From 3c91c5ae784c1e6d627e9001332c28ce209d0a20 Mon Sep 17 00:00:00 2001 From: jaybuidl Date: Fri, 5 Sep 2025 17:02:09 +0100 Subject: [PATCH 1/8] chore: cleanup --- .codeclimate.yml | 18 - .depcheckrc | 2 - .dockerignore | 18 - .editorconfig | 15 - .eslintignore | 4 - .github/CODEOWNERS | 7 - .github/dependabot.yml | 62 - .github/workflows/codeql.yml | 79 - .github/workflows/contracts-testing.yml | 143 - .github/workflows/dependency-review.yml | 40 - .github/workflows/deploy-bots.yml | 32 - .github/workflows/deploy-subgraph.yml | 99 - .github/workflows/scorecards.yml | 91 - .github/workflows/sentry-release.yml | 84 - .github/workflows/sonarcloud.yml | 34 - .gitmodules | 6 - .husky/commit-msg | 4 - .husky/pre-commit | 4 - .lintstagedrc.json | 5 - .nvmrc | 1 - .renovaterc.json | 19 - .vscode/contract-decorators.code-snippets | 118 - .vscode/settings.json | 19 - .whitesource | 23 - .../@yarnpkg/plugin-interactive-tools.cjs | 541 - .yarn/plugins/@yarnpkg/plugin-stage.cjs | 14 - .yarn/plugins/@yarnpkg/plugin-typescript.cjs | 9 - .yarn/plugins/@yarnpkg/plugin-version.cjs | 550 - .../@yarnpkg/plugin-workspace-tools.cjs | 28 - .yarn/releases/yarn-4.9.2.cjs | 942 - .yarnrc.yml | 15 - CONTRIBUTING.md | 37 - LICENSE | 21 - README.md | 195 - SECURITY.md | 6 - bots/README.md | 3 - commitlint.config.js | 18 - contracts/.env.example | 27 - contracts/.eslintignore | 4 - contracts/.npmignore | 7 - contracts/.npmrc | 1 - contracts/.prettierignore | 5 - contracts/.solcover.js | 25 - contracts/.solhint.json | 24 - contracts/.solhintignore | 2 - contracts/.yarnrc.yml | 2 - contracts/CHANGELOG.md | 167 - contracts/DEVNET_REDEPLOY.md | 109 - contracts/README.md | 296 - contracts/README.md.template | 182 - contracts/config/courts.v1.gnosischain.json | 272 - contracts/config/courts.v1.mainnet.json | 362 - contracts/config/courts.v2.devnet.json | 98 - contracts/config/courts.v2.mainnet.json | 498 - contracts/config/courts.v2.testnet.json | 82 - contracts/config/policies.v1.gnosischain.json | 145 - ...Chinese-English-Language-Court-Policy.json | 6 - .../xDai-Curation-Court-Policy.json | 6 - .../xDai-Development-Court-Policy.json | 6 - .../xDai-English-Language-Court-Policy.json | 6 - ...-French-English-Language-Court-Policy.json | 6 - .../xDai-General-Court-Policy.json | 5 - ...-German-English-Language-Court-Policy.json | 6 - ...apanese-English-Language-Court-Policy.json | 6 - .../xDai-Javascript-Court-Policy.json | 6 - ...-Korean-English-Language-Court-Policy.json | 6 - ...tuguese-English-Language-Court-Policy.json | 6 - ...Russian-English-Language-Court-Policy.json | 6 - .../xDai-Solidity-Court-Policy.json | 6 - ...Spanish-English-Language-Court-Policy.json | 6 - ...Turkish-English-Language-Court-Policy.json | 6 - contracts/config/policies.v1.mainnet.json | 191 - .../Blockchain-Court-Policy.json | 5 - ...Chinese-English-Language-Court-Policy.json | 6 - .../Curation-Court-Policy.json | 6 - .../Curation-Medium-Court-Policy.json | 6 - .../Data-Analysis-Court-Policy.json | 6 - .../English-Language-Court-Policy.json | 6 - .../French-English-Language-Court-Policy.json | 6 - .../General-Court-Policy.json | 5 - .../German-English-Language-Court-Policy.json | 6 - .../Humanity-Court-Policy.json | 6 - ...apanese-English-Language-Court-Policy.json | 6 - .../Korean-English-Language-Court-Policy.json | 6 - .../Marketing-Services-Court-Policy.json | 6 - .../Non-Technical-Court-Policy.json | 6 - .../Onboarding-Court-Policy.json | 6 - ...tuguese-English-Language-Court-Policy.json | 6 - ...Russian-English-Language-Court-Policy.json | 6 - ...Spanish-English-Language-Court-Policy.json | 6 - .../Spanish-General-Court-Policy.json | 6 - .../Statistical-Modeling-Court-Policy.json | 6 - .../Technical-Court-Policy.json | 6 - .../Token-Listing-Court-Policy.json | 5 - ...Turkish-English-Language-Court-Policy.json | 6 - .../Video-Production-Court-Policy.json | 6 - contracts/config/policies.v2.devnet.json | 49 - contracts/config/policies.v2.mainnet.json | 247 - contracts/config/policies.v2.testnet.json | 41 - .../00-home-chain-arbitration-mainnet.ts | 164 - .../deploy/00-home-chain-arbitration-ruler.ts | 66 - .../00-home-chain-arbitration-university.ts | 102 - contracts/deploy/00-home-chain-arbitration.ts | 157 - contracts/deploy/00-home-chain-resolver.ts | 31 - contracts/deploy/00-rng-chainlink.ts | 105 - contracts/deploy/00-rng-randomizer.ts | 59 - .../deploy/01-foreign-gateway-on-ethereum.ts | 55 - .../deploy/01-foreign-gateway-on-gnosis.ts | 60 - .../deploy/02-home-gateway-to-ethereum.ts | 47 - contracts/deploy/02-home-gateway-to-gnosis.ts | 40 - contracts/deploy/03-vea-mock.ts | 101 - contracts/deploy/04-foreign-arbitrable.ts | 67 - .../deploy/04-klerosliquid-to-v2-gnosis.ts | 151 - .../change-arbitrable-dispute-template.ts | 43 - .../deploy/change-sortition-module-rng.ts | 30 - contracts/deploy/fix1148.ts | 58 - contracts/deploy/upgrade-all.ts | 86 - contracts/deploy/utils/deployTokens.ts | 81 - contracts/deploy/utils/deployUpgradable.ts | 89 - contracts/deploy/utils/getContractAddress.ts | 12 - contracts/deploy/utils/getContractOrDeploy.ts | 36 - contracts/deploy/utils/index.ts | 41 - contracts/deploy/utils/klerosCoreHelper.ts | 22 - contracts/deployments/arbitrum.ts | 26347 ------------ contracts/deployments/arbitrum/.chainId | 1 - .../deployments/arbitrum/BlockHashRNG.json | 133 - .../deployments/arbitrum/ChainlinkRNG.json | 749 - .../arbitrum/ChainlinkVRFCoordinator.json | 1753 - contracts/deployments/arbitrum/DAI.json | 501 - .../arbitrum/DisputeKitClassic.json | 1210 - .../DisputeKitClassic_Implementation.json | 1852 - .../arbitrum/DisputeKitClassic_Proxy.json | 82 - .../deployments/arbitrum/DisputeKitGated.json | 1240 - .../arbitrum/DisputeKitGatedShutter.json | 1314 - ...DisputeKitGatedShutter_Implementation.json | 1975 - .../DisputeKitGatedShutter_Proxy.json | 81 - .../DisputeKitGated_Implementation.json | 1892 - .../arbitrum/DisputeKitGated_Proxy.json | 81 - .../arbitrum/DisputeKitShutter.json | 1314 - .../DisputeKitShutter_Implementation.json | 1975 - .../arbitrum/DisputeKitShutter_Proxy.json | 81 - .../deployments/arbitrum/DisputeResolver.json | 522 - .../arbitrum/DisputeResolverRuler.json | 522 - .../arbitrum/DisputeTemplateRegistry.json | 299 - ...isputeTemplateRegistry_Implementation.json | 400 - .../DisputeTemplateRegistry_Proxy.json | 81 - .../deployments/arbitrum/EvidenceModule.json | 274 - .../EvidenceModule_Implementation.json | 352 - .../arbitrum/EvidenceModule_Proxy.json | 81 - .../deployments/arbitrum/KlerosCore.json | 2144 - .../deployments/arbitrum/KlerosCoreRuler.json | 1602 - .../KlerosCoreRuler_Implementation.json | 2221 - .../arbitrum/KlerosCoreRuler_Proxy.json | 95 - .../arbitrum/KlerosCoreSnapshotProxy.json | 228 - .../arbitrum/KlerosCore_Implementation.json | 2979 -- .../arbitrum/KlerosCore_Proxy.json | 124 - .../arbitrum/KlerosV2NeoEarlyUser.json | 723 - contracts/deployments/arbitrum/PNK.json | 1 - contracts/deployments/arbitrum/PNKFaucet.json | 127 - contracts/deployments/arbitrum/Pinakion.json | 280 - .../deployments/arbitrum/PolicyRegistry.json | 311 - .../PolicyRegistry_Implementation.json | 422 - .../arbitrum/PolicyRegistry_Proxy.json | 81 - .../arbitrum/RandomizerOracle.json | 4 - .../deployments/arbitrum/RandomizerRNG.json | 385 - .../RandomizerRNG_Implementation.json | 533 - .../arbitrum/RandomizerRNG_Proxy.json | 81 - .../deployments/arbitrum/SortitionModule.json | 1181 - .../SortitionModule_Implementation.json | 1780 - .../arbitrum/SortitionModule_Proxy.json | 81 - .../arbitrum/TransactionBatcher.json | 87 - contracts/deployments/arbitrum/WETH.json | 136 - contracts/deployments/arbitrumSepolia.ts | 23286 ---------- .../deployments/arbitrumSepolia/.chainId | 1 - .../arbitrumSepolia/BlockHashRNG.json | 133 - .../arbitrumSepolia/ChainlinkRNG.json | 749 - .../ChainlinkVRFCoordinator.json | 1753 - .../deployments/arbitrumSepolia/DAI.json | 458 - .../arbitrumSepolia/DAIFaucet.json | 226 - .../arbitrumSepolia/DisputeKitClassic.json | 1209 - .../DisputeKitClassic_Implementation.json | 1852 - .../DisputeKitClassic_Proxy.json | 81 - .../arbitrumSepolia/DisputeKitGated.json | 1238 - .../DisputeKitGatedShutter.json | 1312 - ...DisputeKitGatedShutter_Implementation.json | 1975 - .../DisputeKitGatedShutter_Proxy.json | 81 - .../DisputeKitGated_Implementation.json | 1892 - .../DisputeKitGated_Proxy.json | 81 - .../arbitrumSepolia/DisputeKitShutter.json | 1312 - .../DisputeKitShutter_Implementation.json | 1975 - .../DisputeKitShutter_Proxy.json | 81 - .../arbitrumSepolia/DisputeResolver.json | 522 - .../DisputeTemplateRegistry.json | 317 - ...isputeTemplateRegistry_Implementation.json | 423 - .../DisputeTemplateRegistry_Proxy.json | 81 - .../arbitrumSepolia/EvidenceModule.json | 274 - .../EvidenceModule_Implementation.json | 352 - .../arbitrumSepolia/EvidenceModule_Proxy.json | 81 - .../arbitrumSepolia/KlerosCore.json | 2056 - .../KlerosCoreSnapshotProxy.json | 228 - .../KlerosCore_Implementation.json | 2849 -- .../arbitrumSepolia/KlerosCore_Proxy.json | 124 - .../deployments/arbitrumSepolia/PNK.json | 280 - .../arbitrumSepolia/PNKFaucet.json | 226 - .../arbitrumSepolia/PinakionV2.json | 1 - .../arbitrumSepolia/PolicyRegistry.json | 311 - .../PolicyRegistry_Implementation.json | 422 - .../arbitrumSepolia/PolicyRegistry_Proxy.json | 81 - .../arbitrumSepolia/RandomizerOracle.json | 4 - .../arbitrumSepolia/RandomizerRNG.json | 385 - .../RandomizerRNG_Implementation.json | 533 - .../arbitrumSepolia/RandomizerRNG_Proxy.json | 81 - .../arbitrumSepolia/SortitionModule.json | 1106 - .../SortitionModule_Implementation.json | 1679 - .../SortitionModule_Proxy.json | 81 - .../arbitrumSepolia/TransactionBatcher.json | 87 - .../deployments/arbitrumSepolia/WETH.json | 458 - .../arbitrumSepolia/WETHFaucet.json | 226 - .../deployments/arbitrumSepoliaDevnet.ts | 33782 --------------- .../arbitrumSepoliaDevnet/.chainId | 1 - .../ArbitrableExample.json | 618 - .../arbitrumSepoliaDevnet/BlockHashRNG.json | 133 - .../arbitrumSepoliaDevnet/ChainlinkRNG.json | 749 - .../ChainlinkVRFCoordinator.json | 1753 - .../arbitrumSepoliaDevnet/DAI.json | 458 - .../arbitrumSepoliaDevnet/DAIFaucet.json | 226 - .../DisputeKitClassic.json | 1209 - .../DisputeKitClassicUniversity.json | 1009 - ...teKitClassicUniversity_Implementation.json | 1540 - .../DisputeKitClassicUniversity_Proxy.json | 81 - .../DisputeKitClassic_Implementation.json | 1852 - .../DisputeKitClassic_Proxy.json | 81 - .../DisputeKitGated.json | 1238 - .../DisputeKitGatedShutter.json | 1312 - ...DisputeKitGatedShutter_Implementation.json | 1975 - .../DisputeKitGatedShutter_Proxy.json | 81 - .../DisputeKitGated_Implementation.json | 1892 - .../DisputeKitGated_Proxy.json | 81 - .../DisputeKitShutter.json | 1312 - .../DisputeKitShutter_Implementation.json | 1975 - .../DisputeKitShutter_Proxy.json | 81 - .../DisputeResolver.json | 522 - .../DisputeResolverRuler.json | 522 - .../DisputeResolverUniversity.json | 522 - .../DisputeTemplateRegistry.json | 319 - ...isputeTemplateRegistry_Implementation.json | 423 - .../DisputeTemplateRegistry_Proxy.json | 81 - .../arbitrumSepoliaDevnet/EvidenceModule.json | 276 - .../EvidenceModule_Implementation.json | 352 - .../EvidenceModule_Proxy.json | 81 - .../arbitrumSepoliaDevnet/KlerosCore.json | 2056 - .../KlerosCoreRuler.json | 1622 - .../KlerosCoreRuler_Implementation.json | 2246 - .../KlerosCoreRuler_Proxy.json | 95 - .../KlerosCoreSnapshotProxy.json | 228 - .../KlerosCoreUniversity.json | 1948 - .../KlerosCoreUniversity_Implementation.json | 2645 -- .../KlerosCoreUniversity_Proxy.json | 124 - .../KlerosCore_Implementation.json | 2849 -- .../KlerosCore_Proxy.json | 124 - .../KlerosV2NeoEarlyUser.json | 594 - .../arbitrumSepoliaDevnet/PNK.json | 280 - .../arbitrumSepoliaDevnet/PNKFaucet.json | 226 - .../arbitrumSepoliaDevnet/PinakionV2.json | 1 - .../arbitrumSepoliaDevnet/PolicyRegistry.json | 313 - .../PolicyRegistry_Implementation.json | 422 - .../PolicyRegistry_Proxy.json | 81 - .../RandomizerOracle.json | 4 - .../SortitionModule.json | 1106 - .../SortitionModuleUniversity.json | 629 - ...titionModuleUniversity_Implementation.json | 842 - .../SortitionModuleUniversity_Proxy.json | 81 - .../SortitionModule_Implementation.json | 1679 - .../SortitionModule_Proxy.json | 81 - .../TransactionBatcher.json | 87 - .../arbitrumSepoliaDevnet/WETH.json | 458 - .../arbitrumSepoliaDevnet/WETHFaucet.json | 226 - contracts/deployments/chiado/.chainId | 1 - .../deployments/chiado/ArbitrableExample.json | 618 - .../deployments/chiado/DisputeResolver.json | 522 - .../chiado/DisputeTemplateRegistry.json | 142 - .../chiado/ForeignGatewayOnGnosis.json | 930 - .../chiado/SortitionSumTreeFactory.json | 92 - contracts/deployments/chiado/TokenBridge.json | 4 - contracts/deployments/chiado/WETH.json | 444 - contracts/deployments/chiado/WETHFaucet.json | 146 - contracts/deployments/chiado/WPNKFaucet.json | 146 - .../deployments/chiado/WrappedPinakionV2.json | 436 - .../deployments/chiado/xKlerosLiquidV2.json | 2402 -- contracts/deployments/chiadoDevnet/.chainId | 1 - .../chiadoDevnet/ArbitrableExample.json | 618 - .../chiadoDevnet/DisputeResolver.json | 522 - .../chiadoDevnet/DisputeTemplateRegistry.json | 142 - .../chiadoDevnet/ForeignGatewayOnGnosis.json | 788 - ...ForeignGatewayOnGnosis_Implementation.json | 1118 - .../ForeignGatewayOnGnosis_Proxy.json | 93 - contracts/deployments/chiadoDevnet/WETH.json | 444 - .../deployments/chiadoDevnet/WETHFaucet.json | 146 - .../deployments/chiadoDevnet/WPNKFaucet.json | 146 - .../chiadoDevnet/WrappedPinakionV2.json | 436 - contracts/deployments/contractsEthers.ts | 274 - contracts/deployments/contractsViem.ts | 342 - contracts/deployments/devnet.viem.ts | 21424 --------- contracts/deployments/disputeKitsViem.ts | 85 - .../gnosischain/PolicyRegistry.json | 98 - .../deployments/gnosischain/TokenBridge.json | 140 - .../gnosischain/TransactionBatcher.json | 28 - contracts/deployments/gnosischain/WETH.json | 883 - .../gnosischain/WrappedPinakion.json | 136 - .../gnosischain/xKlerosLiquid.json | 136 - contracts/deployments/gnosischain/xPNK.json | 4 - contracts/deployments/index.ts | 22 - contracts/deployments/mainnet.viem.ts | 16575 ------- contracts/deployments/mainnet/.chainId | 1 - contracts/deployments/sepolia/.chainId | 1 - contracts/deployments/sepolia/PinakionV2.json | 605 - contracts/deployments/sepoliaDevnet/.chainId | 1 - .../deployments/sepoliaDevnet/PinakionV2.json | 605 - contracts/deployments/testnet.viem.ts | 15289 ------- contracts/deployments/utils.ts | 29 - contracts/foundry.toml | 21 - contracts/hardhat.config.ts | 349 - contracts/lib/forge-std | 1 - contracts/lib/solmate | 1 - contracts/package.json | 170 - contracts/remappings.txt | 9 - contracts/scripts/changeOwner.ts | 77 - contracts/scripts/compareStorageLayout.ts | 71 - .../scripts/console-init-chiado-resolver.ts | 29 - contracts/scripts/console-init-chiado.ts | 116 - contracts/scripts/console-init.ts | 240 - contracts/scripts/coverage.sh | 71 - contracts/scripts/disputeCreatorBot.ts | 78 - contracts/scripts/disputeRelayerBot.ts | 114 - .../scripts/disputeRelayerBotFromChiado.ts | 20 - .../scripts/disputeRelayerBotFromHardhat.ts | 19 - .../scripts/disputeRelayerBotFromSepolia.ts | 19 - contracts/scripts/docPostprocess.sh | 9 - contracts/scripts/docPreprocess.sh | 14 - contracts/scripts/dotenv.sh | 15 - contracts/scripts/downloadPolicies.sh | 14 - contracts/scripts/exportDeployments.sh | 18 - .../scripts/find-initializer-versions.sh | 27 - .../scripts/generateDeploymentArtifact.sh | 71 - .../scripts/generateDeploymentsMarkdown.sh | 62 - contracts/scripts/generateMetrics.sh | 23 - contracts/scripts/getCourtsV1.ts | 78 - contracts/scripts/getDisputeKits.ts | 33 - contracts/scripts/getDisputeTemplate.ts | 38 - contracts/scripts/getPoliciesV1.ts | 50 - contracts/scripts/keeperBot.ts | 864 - contracts/scripts/keeperBotShutter.ts | 335 - contracts/scripts/populateCourts.ts | 278 - contracts/scripts/populatePolicyRegistry.ts | 113 - contracts/scripts/populateReadme.sh | 13 - contracts/scripts/publish.sh | 78 - contracts/scripts/setPoliciesURIs.sh | 70 - contracts/scripts/shutter.ts | 293 - contracts/scripts/storage-layout.ts | 10 - contracts/scripts/utils/contracts.ts | 163 - contracts/scripts/utils/env.ts | 24 - contracts/scripts/utils/execution.ts | 59 - contracts/scripts/utils/logger.ts | 36 - contracts/scripts/utils/tx-builder.ts | 45 - contracts/scripts/verifyProxies.sh | 34 - contracts/scripts/viemTest.ts | 53 - contracts/scripts/wagmiHelpers.ts | 62 - .../arbitration/DisputeTemplateRegistry.sol | 85 - contracts/src/arbitration/KlerosCore.sol | 1333 - contracts/src/arbitration/KlerosGovernor.sol | 433 - contracts/src/arbitration/PolicyRegistry.sol | 90 - contracts/src/arbitration/SortitionModule.sol | 622 - .../arbitrables/ArbitrableExample.sol | 165 - .../arbitrables/DisputeResolver.sol | 159 - .../devtools/DisputeResolverRuler.sol | 54 - .../arbitration/devtools/KlerosCoreRuler.sol | 678 - .../dispute-kits/DisputeKitClassic.sol | 48 - .../dispute-kits/DisputeKitClassicBase.sol | 800 - .../dispute-kits/DisputeKitGated.sol | 119 - .../dispute-kits/DisputeKitGatedShutter.sol | 256 - .../dispute-kits/DisputeKitShutter.sol | 189 - .../dispute-kits/DisputeKitSybilResistant.sol | 78 - .../arbitration/evidence/EvidenceModule.sol | 72 - .../evidence/ModeratedEvidenceModule.sol | 449 - .../arbitration/interfaces/IArbitrableV2.sol | 40 - .../arbitration/interfaces/IArbitratorV2.sol | 83 - .../arbitration/interfaces/IDisputeKit.sol | 165 - .../interfaces/IDisputeTemplateRegistry.sol | 25 - .../src/arbitration/interfaces/IEvidence.sol | 12 - .../interfaces/ISortitionModule.sol | 73 - .../university/ISortitionModuleUniversity.sol | 8 - .../university/KlerosCoreUniversity.sol | 1212 - .../university/SortitionModuleUniversity.sol | 427 - .../view/KlerosCoreSnapshotProxy.sol | 78 - contracts/src/gateway/ForeignGateway.sol | 282 - contracts/src/gateway/HomeGateway.sol | 250 - .../gateway/interfaces/IForeignGateway.sol | 39 - .../src/gateway/interfaces/IHomeGateway.sol | 68 - contracts/src/gateway/mock/VeaMock.sol | 59 - .../kleros-v1/interfaces/IArbitrableV1.sol | 24 - .../kleros-v1/interfaces/IArbitratorV1.sol | 73 - .../src/kleros-v1/interfaces/IEvidenceV1.sol | 45 - .../kleros-v1/interfaces/IKlerosLiquid.sol | 106 - .../kleros-v1/interfaces/ITokenController.sol | 25 - .../kleros-liquid-xdai/WrappedPinakion.sol | 299 - .../kleros-liquid-xdai/interfaces/IERC677.sol | 11 - .../interfaces/IRandomAuRa.sol | 13 - .../interfaces/ITokenBridge.sol | 9 - .../kleros-liquid-xdai/xKlerosLiquidV2.sol | 745 - .../KlerosLiquidToV2Governor.sol | 182 - .../libraries/SortitionSumTreeFactory.sol | 230 - contracts/src/libraries/Constants.sol | 42 - contracts/src/libraries/SafeERC20.sol | 47 - contracts/src/libraries/SafeSend.sol | 24 - contracts/src/libraries/SortitionTrees.sol | 232 - contracts/src/proxy/Initializable.sol | 215 - contracts/src/proxy/KlerosProxies.sol | 76 - contracts/src/proxy/UUPSProxiable.sol | 140 - contracts/src/proxy/UUPSProxy.sol | 90 - .../src/proxy/mock/UUPSUpgradeableMocks.sol | 60 - .../by-inheritance/UpgradedByInheritance.sol | 67 - .../mock/by-rewrite/UpgradedByRewrite.sol | 42 - .../mock/by-rewrite/UpgradedByRewriteV2.sol | 42 - contracts/src/rng/BlockhashRNG.sol | 120 - .../src/rng/ChainlinkConsumerBaseV2Plus.sol | 169 - contracts/src/rng/ChainlinkRNG.sol | 171 - contracts/src/rng/IRNG.sol | 16 - contracts/src/rng/IRandomizer.sol | 10 - contracts/src/rng/IncrementalNG.sol | 28 - contracts/src/rng/RNGWithFallback.sol | 109 - contracts/src/rng/RandomizerRNG.sol | 133 - .../rng/mock/ChainlinkVRFCoordinatorMock.sol | 128 - contracts/src/rng/mock/RandomizerMock.sol | 21 - contracts/src/test/KlerosCoreMock.sol | 19 - contracts/src/test/RNGMock.sol | 19 - contracts/src/test/SortitionModuleMock.sol | 16 - contracts/src/test/SortitionTreesMock.sol | 154 - contracts/src/token/Faucet.sol | 71 - contracts/src/token/PNK.sol | 11 - contracts/src/token/PinakionV2.sol | 34 - contracts/src/token/TestERC1155.sol | 64 - contracts/src/token/TestERC20.sol | 11 - contracts/src/token/TestERC721.sol | 77 - contracts/src/token/WrappedPinakionV2.sol | 11 - contracts/src/utils/TransactionBatcher.sol | 23 - .../test/arbitration/dispute-kit-gated.ts | 288 - .../test/arbitration/dispute-kit-shutter.ts | 733 - contracts/test/arbitration/draw.ts | 444 - contracts/test/arbitration/index.ts | 109 - contracts/test/arbitration/ruler.ts | 169 - contracts/test/arbitration/staking-neo.ts | 793 - contracts/test/arbitration/staking.ts | 414 - contracts/test/evidence/index.ts | 284 - .../fixtures/DisputeTemplate.resolver.jsonc | 28 - .../test/fixtures/DisputeTemplate.schema.json | 348 - .../test/fixtures/DisputeTemplate.simple.json | 23 - .../test/foundry/KlerosCore_Appeals.t.sol | 503 - .../test/foundry/KlerosCore_Disputes.t.sol | 148 - .../test/foundry/KlerosCore_Drawing.t.sol | 124 - .../test/foundry/KlerosCore_Execution.t.sol | 760 - .../test/foundry/KlerosCore_Governance.t.sol | 472 - .../foundry/KlerosCore_Initialization.t.sol | 182 - contracts/test/foundry/KlerosCore_RNG.t.sol | 121 - .../test/foundry/KlerosCore_Staking.t.sol | 450 - .../test/foundry/KlerosCore_TestBase.sol | 255 - .../test/foundry/KlerosCore_Voting.t.sol | 486 - .../integration/getContractsEthers.test.ts | 320 - .../test/integration/getContractsViem.test.ts | 277 - contracts/test/integration/index.ts | 208 - contracts/test/proxy/index.ts | 241 - contracts/test/rng/index.ts | 212 - contracts/test/sortition/index.ts | 698 - contracts/test/utils/getActualAddress.test.ts | 22 - contracts/test/utils/getActualAddress.ts | 23 - contracts/tsconfig-release.json | 14 - contracts/tsconfig.json | 20 - contracts/wagmi.config.devnet.ts | 30 - contracts/wagmi.config.hardhat.ts | 14 - contracts/wagmi.config.mainnet.ts | 30 - contracts/wagmi.config.testnet.ts | 30 - cspell.json | 61 - docs/kleros-logo-white.png | Bin 26634 -> 0 bytes docs/local-stack-2.png | Bin 1003730 -> 0 bytes eslint-config/.eslintrc.js | 48 - eslint-config/package.json | 30 - kleros-app/README.md | 115 - kleros-app/eslint.config.mjs | 120 - kleros-app/package.json | 70 - kleros-app/scripts/publish.sh | 42 - kleros-app/src/App.tsx | 18 - kleros-app/src/index.html | 13 - .../src/lib/atlas/hooks/useSessionStorage.ts | 26 - kleros-app/src/lib/atlas/index.ts | 2 - .../src/lib/atlas/providers/AtlasProvider.tsx | 381 - kleros-app/src/lib/atlas/providers/index.ts | 1 - kleros-app/src/lib/atlas/utils/addUser.ts | 37 - .../src/lib/atlas/utils/confirmEmail.ts | 36 - .../src/lib/atlas/utils/createMessage.ts | 21 - .../src/lib/atlas/utils/fetchRestrictions.ts | 40 - kleros-app/src/lib/atlas/utils/fetchUser.ts | 34 - kleros-app/src/lib/atlas/utils/getNonce.ts | 29 - kleros-app/src/lib/atlas/utils/index.ts | 32 - kleros-app/src/lib/atlas/utils/loginUser.ts | 38 - kleros-app/src/lib/atlas/utils/updateEmail.ts | 35 - .../src/lib/atlas/utils/uploadToIpfs.ts | 49 - kleros-app/src/lib/index.ts | 1 - kleros-app/src/utils/index.ts | 2 - kleros-app/tsconfig.json | 35 - kleros-app/vite.config.js | 38 - kleros-sdk/.gitignore | 24 - kleros-sdk/README.md | 11 - kleros-sdk/config/v1-metaevidence/escrow.json | 38 - .../config/v1-metaevidence/escrow2.json | 39 - .../config/v1-metaevidence/escrow3.json | 39 - kleros-sdk/config/v1-metaevidence/lgtcr1.json | 50 - kleros-sdk/config/v1-metaevidence/lgtcr2.json | 50 - kleros-sdk/config/v1-metaevidence/lgtcr3.json | 66 - kleros-sdk/config/v1-metaevidence/lgtcr4.json | 66 - kleros-sdk/config/v1-metaevidence/lgtcr5.json | 48 - kleros-sdk/config/v1-metaevidence/lgtcr6.json | 48 - .../linguo-meta-evidence1.json | 44 - .../linguo-meta-evidence2.json | 44 - kleros-sdk/config/v1-metaevidence/omen1.json | 43 - kleros-sdk/config/v1-metaevidence/omen2.json | 43 - kleros-sdk/config/v1-metaevidence/omen3.json | 43 - kleros-sdk/config/v1-metaevidence/omen4.json | 43 - kleros-sdk/config/v1-metaevidence/omen5.json | 43 - kleros-sdk/config/v1-metaevidence/poh1.json | 19 - kleros-sdk/config/v1-metaevidence/poh2.json | 19 - .../config/v1-metaevidence/reality.json | 8 - .../realityWithAppeals-gnosis-moderate.json | 21 - .../realityWithAppeals-gnosis.json | 21 - .../v1-metaevidence/realityWithAppeals.json | 21 - .../config/v1-metaevidence/resolver.json | 20 - .../v1-metaevidence/tokens-ethfinex1.json | 28 - .../v1-metaevidence/tokens-ethfinex2.json | 28 - .../config/v1-metaevidence/tokens1.json | 21 - .../config/v1-metaevidence/tokens2.json | 21 - .../config/v1-metaevidence/unslashed.json | 19 - .../DisputeDetails.default.jsonc | 23 - .../NewDisputeTemplate.schema.json | 415 - .../config/v2-disputetemplate/README.md | 51 - .../curate/NewDisputeTemplate.curate.jsonc | 25 - .../example/DisputeDetails.curate.jsonc | 71 - .../example/DisputeTemplateInputs.curate.txt | 3 - .../curate/example/NewDispute.curate.jsonc | 11 - .../escrow/DisputeRequest.ts | 7 - .../escrow/example1/DataMappings.escrow.jsonc | 34 - .../DisputeDetails.escrow.jsonc.mustache | 41 - .../example2/DisputeMappings.json.mustache | 40 - .../example2/DisputeTemplate.json.mustache | 40 - .../config/v2-disputetemplate/kip-template.md | 40 - .../linguo/NewDisputeTemplate.linguo.jsonc | 25 - .../example/DisputeDetails.linguo.jsonc | 62 - .../example/DisputeTemplateInputs.linguo.txt | 2 - .../linguo/example/NewDispute.linguo.jsonc | 5 - .../moderate/DisputeDetails.moderate.json | 33 - .../poh/NewDisputeTemplate.poh1.jsonc | 25 - .../poh/NewDisputeTemplate.poh2.jsonc | 25 - .../DisputeDetails.poh1.jsonc | 43 - .../DisputeTemplateInputs.poh1.txt | 1 - .../NewDispute.poh1.jsonc | 11 - .../DisputeDetails.poh2.jsonc | 43 - .../DisputeTemplateInputs.poh2.txt | 1 - .../example2-removal/NewDispute.poh2.jsonc | 11 - .../DisputeDetails.reality.schema.json | 251 - .../reality/NewDisputeTemplate.reality.jsonc | 24 - .../v2-disputetemplate/reality/README.md | 18 - .../example1/DisputeDetails.reality1.jsonc | 57 - .../DisputeTemplateInputs.reality1.txt | 5 - .../example1/NewDispute.reality1.jsonc | 5 - .../example2/DisputeDetails.reality2.jsonc | 60 - .../DisputeTemplateInputs.reality2.txt | 5 - .../example2/NewDispute.reality2.jsonc | 5 - .../reality/example3/DisputeMappings.json | 50 - .../example3/DisputeTemplate.json.mustache | 27 - .../v2-disputetemplate/reality/kip-99.md | 121 - .../simple/NewDisputeTemplate.simple.json | 23 - .../example/DisputeDetails.simple.jsonc | 44 - .../example/DisputeTemplateInputs.simple.txt | 2 - .../simple/example/NewDispute.simple.jsonc | 8 - kleros-sdk/package.json | 54 - kleros-sdk/scripts/publish.sh | 42 - kleros-sdk/src/consts.ts | 1 - .../src/dataMappings/actions/callAction.ts | 25 - .../src/dataMappings/actions/eventAction.ts | 29 - .../actions/fetchIpfsJsonAction.ts | 39 - .../src/dataMappings/actions/jsonAction.ts | 11 - .../dataMappings/actions/subgraphAction.ts | 19 - kleros-sdk/src/dataMappings/executeActions.ts | 66 - kleros-sdk/src/dataMappings/index.ts | 1 - .../src/dataMappings/retrieveRealityData.ts | 120 - .../utils/actionTypeValidators.ts | 45 - .../src/dataMappings/utils/actionTypes.ts | 52 - .../dataMappings/utils/createResultObject.ts | 26 - .../utils/disputeDetailsSchema.ts | 78 - .../dataMappings/utils/disputeDetailsTypes.ts | 8 - kleros-sdk/src/dataMappings/utils/index.ts | 6 - kleros-sdk/src/dataMappings/utils/lambdas.ts | 13 - .../dataMappings/utils/populateTemplate.ts | 34 - .../utils/replacePlaceholdersWithValues.ts | 43 - .../dataMappings/utils/retrieveVariables.ts | 20 - kleros-sdk/src/errors/index.ts | 57 - kleros-sdk/src/index.ts | 5 - .../src/requests/fetchDisputeDetails.ts | 53 - .../requests/fetchDisputeTemplateFromId.ts | 44 - kleros-sdk/src/requests/gqlClient.ts | 18 - kleros-sdk/src/sdk.ts | 18 - kleros-sdk/src/types/index.ts | 17 - kleros-sdk/src/utils/getDispute.ts | 60 - kleros-sdk/src/utils/index.ts | 1 - .../disputeDetailsSchema.test.ts.snap | 19 - .../test/__snapshots__/schema.test.ts.snap | 7 - kleros-sdk/test/dataMappings.test.ts | 460 - kleros-sdk/test/disputeDetailsSchema.test.ts | 101 - kleros-sdk/test/getDispute.test.ts | 216 - kleros-sdk/tsconfig.json | 27 - kleros-sdk/vitest.config.ts | 7 - netlify.toml | 1 - package.json | 96 - prettier-config/.eslintrc | 3 - prettier-config/.prettierrc.js | 3 - prettier-config/index.js | 27 - prettier-config/package.json | 17 - scripts/act-subgraph.yml | 3 - scripts/cancel-all-netlify-builds.sh | 36 - scripts/check-prerequisites.sh | 32 - scripts/tmux-local-stack.sh | 43 - services/bots/.gitignore | 8 - services/bots/base/Dockerfile | 29 - services/bots/base/bot-pm2.yml | 11 - services/bots/base/bot.yml | 12 - services/bots/devnet/.env | 2 - services/bots/devnet/bots.env.devnet.example | 16 - services/bots/devnet/compose.yml | 60 - .../devnet/pm2.config.disputor-bot.devnet.js | 12 - .../devnet/pm2.config.keeper-bot.devnet.js | 12 - ...2.config.relayer-bot-from-chiado.devnet.js | 12 - ...2.config.relayer-bot-from-goerli.devnet.js | 12 - services/bots/mainnet-neo/.env | 2 - .../mainnet-neo/bots.env.mainnet-neo.example | 18 - services/bots/mainnet-neo/compose.yml | 60 - .../pm2.config.keeper-bot.mainnet-neo.js | 12 - services/bots/testnet/.env | 2 - .../bots/testnet/bots.env.testnet.example | 18 - services/bots/testnet/compose.yml | 60 - .../pm2.config.disputor-bot.testnet.js | 12 - .../testnet/pm2.config.keeper-bot.testnet.js | 12 - ....config.relayer-bot-from-chiado.testnet.js | 12 - ....config.relayer-bot-from-goerli.testnet.js | 12 - services/graph-node/.gitignore | 1 - services/graph-node/README.md | 81 - services/graph-node/bin/create | 11 - services/graph-node/bin/debug | 9 - services/graph-node/bin/deploy | 12 - services/graph-node/bin/reassign | 12 - services/graph-node/bin/remove | 11 - services/graph-node/docker-compose.yml | 49 - sonar-project.properties | 3 - subgraph/README.md | 67 - .../abi-migrations/KlerosCoreNeo.json | 2059 - .../abi-migrations/SortitionModuleNeo.json | 1129 - subgraph/core-neo/schema.graphql | 1 - subgraph/core-neo/src | 1 - subgraph/core-neo/subgraph.template.yaml | 287 - subgraph/core-neo/subgraph.yaml | 288 - subgraph/core-neo/tests | 1 - subgraph/core-university/schema.graphql | 1 - .../core-university/src/DisputeKitClassic.ts | 1 - .../core-university/src/EvidenceModule.ts | 1 - subgraph/core-university/src/HomeGateway.ts | 1 - subgraph/core-university/src/KlerosCore.ts | 1 - .../core-university/src/PolicyRegistry.ts | 1 - .../core-university/src/SortitionModule.ts | 19 - subgraph/core-university/src/datapoint.ts | 1 - subgraph/core-university/src/entities | 1 - subgraph/core-university/src/utils.ts | 1 - .../core-university/subgraph.template.yaml | 162 - subgraph/core-university/subgraph.yaml | 161 - subgraph/core-university/tests | 1 - subgraph/core/abi-migrations/KlerosCore.json | 1971 - .../core/abi-migrations/SortitionModule.json | 1054 - subgraph/core/schema.graphql | 373 - subgraph/core/src/DisputeKitClassic.ts | 207 - subgraph/core/src/EvidenceModule.ts | 64 - subgraph/core/src/HomeGateway.ts | 16 - subgraph/core/src/KlerosCore.ts | 311 - subgraph/core/src/PolicyRegistry.ts | 12 - subgraph/core/src/SortitionModule.ts | 21 - subgraph/core/src/datapoint.ts | 168 - subgraph/core/src/entities/Arbitrable.ts | 20 - .../core/src/entities/ClassicContribution.ts | 45 - subgraph/core/src/entities/ClassicDispute.ts | 14 - .../core/src/entities/ClassicEvidenceGroup.ts | 14 - subgraph/core/src/entities/ClassicRound.ts | 97 - subgraph/core/src/entities/ClassicVote.ts | 36 - subgraph/core/src/entities/Court.ts | 49 - subgraph/core/src/entities/Dispute.ts | 122 - subgraph/core/src/entities/DisputeKit.ts | 17 - subgraph/core/src/entities/Draw.ts | 22 - subgraph/core/src/entities/FeeToken.ts | 53 - .../core/src/entities/JurorTokensPerCourt.ts | 114 - subgraph/core/src/entities/Penalty.ts | 37 - .../core/src/entities/PeriodIndexCounter.ts | 14 - subgraph/core/src/entities/Round.ts | 55 - .../core/src/entities/TokenAndEthShift.ts | 68 - subgraph/core/src/entities/User.ts | 68 - subgraph/core/src/utils.ts | 9 - subgraph/core/subgraph.template.yaml | 287 - subgraph/core/subgraph.yaml | 288 - subgraph/core/tests/sortition-module-utils.ts | 49 - subgraph/core/tests/sortition-module.test.ts | 40 - subgraph/core/tests/user.test.ts | 9 - .../dispute-template-registry/schema.graphql | 6 - .../src/DisputeTemplateRegistry.ts | 11 - .../subgraph.template.yaml | 26 - .../dispute-template-registry/subgraph.yaml | 27 - subgraph/package.json | 85 - subgraph/scripts/all.sh | 17 - subgraph/scripts/update.sh | 95 - subgraph/temp-older-events-addition.txt | 120 - subgraph/tsconfig.json | 4 - subgraph/utils/index.ts | 26 - tea.yaml | 9 - tsconfig/.eslintrc | 3 - tsconfig/README.md | 3 - tsconfig/base18.json | 9 - tsconfig/base20.json | 9 - tsconfig/package.json | 15 - tsconfig/react-library.json | 15 - web-devtools/.editorconfig | 15 - web-devtools/.env.devnet-neo.public | 1 - web-devtools/.env.devnet-university.public | 1 - web-devtools/.env.devnet.public | 1 - web-devtools/.env.local.example | 6 - web-devtools/.gitignore | 52 - web-devtools/LICENSE | 21 - web-devtools/README.md | 3 - web-devtools/codegen.ts | 16 - web-devtools/eslint.config.mjs | 184 - web-devtools/global.d.ts | 6 - web-devtools/netlify.toml | 11 - web-devtools/next.config.mjs | 43 - web-devtools/package.json | 77 - web-devtools/scripts/runEnv.sh | 38 - .../src/app/(main)/(homepage)/Header.tsx | 50 - .../src/app/(main)/(homepage)/Tools.tsx | 95 - .../src/app/(main)/(homepage)/page.tsx | 32 - .../dispute-template/CustomContextInputs.tsx | 92 - .../FetchDisputeRequestInput.tsx | 129 - .../dispute-template/FetchFromIdInput.tsx | 76 - .../src/app/(main)/dispute-template/page.tsx | 374 - web-devtools/src/app/(main)/layout.tsx | 37 - .../src/app/(main)/ruler/ChangeDeveloper.tsx | 96 - web-devtools/src/app/(main)/ruler/Header.tsx | 25 - .../src/app/(main)/ruler/ManualRuling.tsx | 136 - .../src/app/(main)/ruler/RulingModes.tsx | 298 - .../src/app/(main)/ruler/SelectArbitrable.tsx | 170 - web-devtools/src/app/(main)/ruler/page.tsx | 49 - web-devtools/src/app/favicon.ico | Bin 243998 -> 0 bytes web-devtools/src/app/layout.tsx | 34 - .../assets/svgs/footer/secured-by-kleros.svg | 12 - .../src/assets/svgs/header/devtools-logo.svg | 4 - .../src/assets/svgs/header/hamburger.svg | 3 - .../svgs/hero/hero-darkmode-desktop.svg | 74 - .../assets/svgs/hero/hero-darkmode-mobile.svg | 53 - web-devtools/src/assets/svgs/icons/arrow.svg | 10 - web-devtools/src/assets/svgs/icons/help.svg | 5 - web-devtools/src/assets/svgs/icons/policy.svg | 3 - .../src/assets/svgs/socialmedia/discord.svg | 10 - .../src/assets/svgs/socialmedia/etherscan.svg | 10 - .../assets/svgs/socialmedia/ghost-blog.svg | 10 - .../src/assets/svgs/socialmedia/github.svg | 10 - .../src/assets/svgs/socialmedia/linkedin.svg | 10 - .../src/assets/svgs/socialmedia/reddit.svg | 10 - .../src/assets/svgs/socialmedia/slack.svg | 10 - .../src/assets/svgs/socialmedia/snapshot.svg | 10 - .../src/assets/svgs/socialmedia/telegram.svg | 10 - .../src/assets/svgs/socialmedia/x.svg | 3 - .../src/assets/svgs/socialmedia/youtube.svg | 10 - .../src/components/ConnectWallet/index.tsx | 57 - web-devtools/src/components/EnsureChain.tsx | 24 - web-devtools/src/components/HeroImage.tsx | 31 - web-devtools/src/components/JSONEditor.tsx | 80 - web-devtools/src/components/LabeledInput.tsx | 110 - web-devtools/src/components/LightButton.tsx | 27 - web-devtools/src/components/ReactMarkdown.tsx | 21 - .../src/components/WithHelpTooltip.tsx | 46 - web-devtools/src/consts/arbitratorTypes.ts | 8 - web-devtools/src/consts/chains.ts | 16 - web-devtools/src/consts/index.ts | 13 - web-devtools/src/consts/socialmedia.tsx | 35 - web-devtools/src/context/GraphqlBatcher.tsx | 59 - web-devtools/src/context/RulerContext.tsx | 101 - .../src/context/StyledComponentsProvider.tsx | 20 - .../src/context/StyledComponentsRegistry.tsx | 22 - web-devtools/src/context/Web3Provider.tsx | 103 - .../hooks/queries/useDisputeTemplateFromId.ts | 37 - web-devtools/src/hooks/useIsDesktop.tsx | 12 - web-devtools/src/hooks/useLocalStorage.ts | 22 - web-devtools/src/layout/Footer/index.tsx | 76 - .../src/layout/Header/DesktopHeader.tsx | 53 - .../src/layout/Header/MobileHeader.tsx | 74 - web-devtools/src/layout/Header/index.tsx | 34 - .../src/layout/Header/navbar/Explore.tsx | 83 - .../src/layout/Header/navbar/index.tsx | 59 - web-devtools/src/styles/Theme.tsx | 10 - web-devtools/src/styles/global-style.ts | 119 - web-devtools/src/styles/landscapeStyle.ts | 9 - web-devtools/src/styles/responsiveSize.ts | 12 - web-devtools/src/utils/debounceErrorToast.ts | 12 - web-devtools/src/utils/dummyData.ts | 18 - .../utils/getDisputeRequestParamsFromTxn.ts | 35 - web-devtools/src/utils/getGraphqlUrl.ts | 25 - web-devtools/src/utils/getIpfsUrl.ts | 13 - web-devtools/src/utils/isEmpty.ts | 1 - web-devtools/src/utils/isUndefined.ts | 2 - web-devtools/src/utils/parseWagmiError.ts | 17 - web-devtools/src/utils/shortenAddress.ts | 13 - .../src/utils/validateAddressOrEns.ts | 14 - web-devtools/src/utils/wrapWithToast.ts | 47 - web-devtools/svgr.d.ts | 10 - web-devtools/tsconfig.json | 53 - web-devtools/wagmi.config.ts | 129 - web/.editorconfig | 11 - web/.env.devnet-neo.public | 12 - web/.env.devnet-university.public | 14 - web/.env.devnet.public | 12 - web/.env.local.public | 12 - web/.env.mainnet-neo.public | 12 - web/.env.testnet.public | 13 - web/.gitignore | 36 - web/.yarnrc.yml | 2 - web/LICENSE | 21 - web/README.md | 42 - web/codegen.ts | 16 - web/eslint.config.mjs | 180 - web/global.d.ts | 25 - web/netlify.toml | 16 - web/package.json | 135 - web/scripts/generateBuildInfo.sh | 6 - web/scripts/gitInfo.js | 42 - web/scripts/runEnv.sh | 38 - web/scripts/sentry-release.sh | 17 - web/src/app.tsx | 130 - web/src/assets/pngs/dashboard/aristoteles.png | Bin 22801 -> 0 bytes web/src/assets/pngs/dashboard/diogenes.png | Bin 21028 -> 0 bytes web/src/assets/pngs/dashboard/plato.png | Bin 22410 -> 0 bytes web/src/assets/pngs/dashboard/pythagoras.png | Bin 21335 -> 0 bytes web/src/assets/pngs/dashboard/socrates.png | Bin 19524 -> 0 bytes web/src/assets/svgs/.gitkeep | 0 .../assets/svgs/footer/secured-by-kleros.svg | 10 - web/src/assets/svgs/header/hamburger.svg | 3 - .../svgs/header/kleros-court-university.svg | 28 - web/src/assets/svgs/header/kleros-court.svg | 3 - .../svgs/hero/hero-darkmode-desktop.svg | 73 - .../assets/svgs/hero/hero-darkmode-mobile.svg | 53 - .../svgs/hero/hero-lightmode-desktop.svg | 15 - .../svgs/hero/hero-lightmode-mobile.svg | 53 - web/src/assets/svgs/icons/appeal.png | Bin 23985 -> 0 bytes web/src/assets/svgs/icons/appeal.svg | 9 - web/src/assets/svgs/icons/arrow-down.svg | 10 - web/src/assets/svgs/icons/arrow-left.svg | 10 - web/src/assets/svgs/icons/arrow-right.svg | 10 - web/src/assets/svgs/icons/arrow.svg | 10 - web/src/assets/svgs/icons/attachment.svg | 10 - web/src/assets/svgs/icons/balance.svg | 11 - web/src/assets/svgs/icons/book-open.svg | 3 - web/src/assets/svgs/icons/book.svg | 3 - web/src/assets/svgs/icons/bookmark.svg | 44 - web/src/assets/svgs/icons/bug.svg | 10 - web/src/assets/svgs/icons/bullhorn.svg | 3 - web/src/assets/svgs/icons/calendar.svg | 10 - web/src/assets/svgs/icons/caseFromScratch.svg | 4 - web/src/assets/svgs/icons/chart.svg | 15 - web/src/assets/svgs/icons/chat.svg | 10 - .../svgs/icons/check-circle-outline.svg | 10 - web/src/assets/svgs/icons/clock.svg | 10 - web/src/assets/svgs/icons/close-circle.svg | 3 - web/src/assets/svgs/icons/close.svg | 3 - web/src/assets/svgs/icons/code.svg | 5 - web/src/assets/svgs/icons/curate-image.png | Bin 13822 -> 0 bytes web/src/assets/svgs/icons/curate.svg | 30 - web/src/assets/svgs/icons/dice.svg | 27 - .../assets/svgs/icons/dispute-resolver.svg | 19 - web/src/assets/svgs/icons/dispute.svg | 11 - web/src/assets/svgs/icons/doc.svg | 3 - web/src/assets/svgs/icons/dollar.svg | 10 - web/src/assets/svgs/icons/dotted-menu.svg | 1 - web/src/assets/svgs/icons/down-arrow.svg | 11 - web/src/assets/svgs/icons/duplicateCase.svg | 4 - web/src/assets/svgs/icons/ellipse.svg | 3 - web/src/assets/svgs/icons/escrow.svg | 5 - web/src/assets/svgs/icons/eth.svg | 3 - web/src/assets/svgs/icons/ethereum-vote.svg | 3 - web/src/assets/svgs/icons/ethereum.svg | 3 - web/src/assets/svgs/icons/eye.svg | 10 - web/src/assets/svgs/icons/faucet.svg | 10 - web/src/assets/svgs/icons/french-flag.svg | 5 - web/src/assets/svgs/icons/gas.svg | 10 - web/src/assets/svgs/icons/gavel-executed.svg | 11 - web/src/assets/svgs/icons/gavel.svg | 3 - web/src/assets/svgs/icons/governor.svg | 5 - web/src/assets/svgs/icons/grid.svg | 3 - web/src/assets/svgs/icons/hourglass.svg | 10 - web/src/assets/svgs/icons/info-circle.svg | 10 - web/src/assets/svgs/icons/kleros.svg | 3 - .../svgs/icons/law-balance-hourglass.svg | 3 - .../svgs/icons/law-balance-with-pnk.svg | 3 - web/src/assets/svgs/icons/law-balance.svg | 10 - web/src/assets/svgs/icons/linguo.svg | 48 - web/src/assets/svgs/icons/list.svg | 3 - web/src/assets/svgs/icons/locker.svg | 3 - web/src/assets/svgs/icons/long-arrow-up.svg | 10 - web/src/assets/svgs/icons/min-stake.svg | 13 - web/src/assets/svgs/icons/minus.svg | 3 - web/src/assets/svgs/icons/new-tab.svg | 3 - web/src/assets/svgs/icons/paperclip.svg | 17 - web/src/assets/svgs/icons/phone.svg | 5 - web/src/assets/svgs/icons/pile-coins.svg | 10 - web/src/assets/svgs/icons/plus.svg | 10 - web/src/assets/svgs/icons/pnk-eth.svg | 3 - web/src/assets/svgs/icons/pnk-usd.svg | 8 - web/src/assets/svgs/icons/pnk.svg | 10 - web/src/assets/svgs/icons/poh-image.png | Bin 24540 -> 0 bytes web/src/assets/svgs/icons/poh.svg | 3 - web/src/assets/svgs/icons/policy.svg | 3 - web/src/assets/svgs/icons/ranking.svg | 3 - .../assets/svgs/icons/redistributed-pnk.svg | 34 - web/src/assets/svgs/icons/rewards-per-pnk.svg | 3 - web/src/assets/svgs/icons/round.svg | 10 - web/src/assets/svgs/icons/snapshot-color.svg | 3 - web/src/assets/svgs/icons/spinner.svg | 3 - web/src/assets/svgs/icons/star.svg | 1 - web/src/assets/svgs/icons/tokens.svg | 7 - web/src/assets/svgs/icons/user.svg | 3 - web/src/assets/svgs/icons/vea.svg | 5 - web/src/assets/svgs/icons/vote-stake.svg | 14 - web/src/assets/svgs/icons/voted.svg | 13 - web/src/assets/svgs/icons/votes-per-pnk.svg | 3 - web/src/assets/svgs/icons/warning-outline.svg | 15 - web/src/assets/svgs/label-icons/appeal.svg | 11 - web/src/assets/svgs/label-icons/evidence.svg | 3 - .../assets/svgs/label-icons/forgot-vote.svg | 5 - web/src/assets/svgs/label-icons/funded.svg | 4 - .../assets/svgs/label-icons/minus-circle.svg | 10 - .../assets/svgs/label-icons/rewards-lost.svg | 3 - .../assets/svgs/label-icons/rewards-won.svg | 3 - web/src/assets/svgs/label-icons/vote.svg | 4 - web/src/assets/svgs/label-icons/voted.svg | 5 - web/src/assets/svgs/menu-icons/dark-mode.svg | 3 - web/src/assets/svgs/menu-icons/help.svg | 3 - .../svgs/menu-icons/kleros-solutions.svg | 3 - web/src/assets/svgs/menu-icons/light-mode.svg | 3 - .../assets/svgs/menu-icons/notifications.svg | 3 - web/src/assets/svgs/menu-icons/settings.svg | 3 - .../mini-guides/appeal/crowdfund-appeal.svg | 10 - .../mini-guides/appeal/payoff-simulator.svg | 45 - .../svgs/mini-guides/appeal/stage-one.svg | 59 - .../svgs/mini-guides/appeal/stage-two.svg | 24 - .../mini-guides/appeal/who-wins-rewards.svg | 38 - .../binary-voting/private-voting.svg | 17 - .../binary-voting/voting-module.svg | 12 - .../dispute-resolver/parameters.svg | 42 - .../mini-guides/dispute-resolver/parties.svg | 29 - .../mini-guides/dispute-resolver/policy.svg | 37 - .../dispute-resolver/start-a-case.svg | 39 - .../dispute-resolver/voting-options.svg | 53 - .../dispute-resolver/well-done.svg | 80 - .../mini-guides/onboarding/how-it-works.svg | 29 - .../mini-guides/onboarding/what-do-i-need.svg | 81 - .../ranked-voting/voting-module.svg | 66 - .../svgs/mini-guides/staking/court-header.svg | 107 - .../mini-guides/staking/juror-rewards.svg | 72 - .../mini-guides/staking/notifications.svg | 37 - .../mini-guides/staking/staking-section.svg | 39 - web/src/assets/svgs/socialmedia/discord.svg | 10 - web/src/assets/svgs/socialmedia/etherscan.svg | 10 - .../assets/svgs/socialmedia/ghost-blog.svg | 10 - web/src/assets/svgs/socialmedia/github.svg | 10 - web/src/assets/svgs/socialmedia/linkedin.svg | 10 - web/src/assets/svgs/socialmedia/reddit.svg | 10 - web/src/assets/svgs/socialmedia/slack.svg | 10 - web/src/assets/svgs/socialmedia/snapshot.svg | 10 - web/src/assets/svgs/socialmedia/telegram.svg | 10 - web/src/assets/svgs/socialmedia/x.svg | 3 - web/src/assets/svgs/socialmedia/youtube.svg | 10 - web/src/assets/svgs/styled/eth.svg | 9 - web/src/assets/svgs/styled/pnk.svg | 9 - web/src/assets/svgs/styled/three-pnks.svg | 19 - web/src/assets/svgs/tokens/arbitrum.svg | 17 - web/src/assets/svgs/tokens/dai.svg | 11 - web/src/assets/svgs/tokens/eth.svg | 9 - web/src/assets/svgs/tokens/gnosis.svg | 14 - web/src/assets/svgs/tokens/optimism.svg | 11 - web/src/assets/svgs/tokens/pnk.svg | 11 - web/src/assets/svgs/tokens/polygon.svg | 11 - web/src/assets/svgs/tokens/usdc.svg | 5 - web/src/components/.gitkeep | 0 .../BlueIconTextButtonContainer.tsx | 32 - web/src/components/CaseStarButton.tsx | 58 - web/src/components/CasesDisplay/CasesGrid.tsx | 87 - web/src/components/CasesDisplay/Filters.tsx | 117 - web/src/components/CasesDisplay/Search.tsx | 113 - web/src/components/CasesDisplay/Stats.tsx | 53 - .../CasesDisplay/StatsAndFilters.tsx | 25 - web/src/components/CasesDisplay/index.tsx | 98 - web/src/components/ClaimPnkButton.tsx | 91 - .../ConnectWallet/AccountDisplay.tsx | 183 - web/src/components/ConnectWallet/index.tsx | 61 - web/src/components/DisputePreview/Alias.tsx | 59 - .../DisputePreview/DisputeContext.tsx | 178 - .../components/DisputePreview/Policies.tsx | 101 - .../DisputeView/CardLabels/Label.tsx | 64 - .../CardLabels/RewardsAndFundLabel.tsx | 48 - .../DisputeView/CardLabels/index.tsx | 177 - .../DisputeView/DisputeCardView.tsx | 82 - .../DisputeInfo/DisputeInfoCard.tsx | 67 - .../DisputeInfo/DisputeInfoList.tsx | 64 - .../DisputeView/DisputeInfo/index.tsx | 114 - .../DisputeView/DisputeListView.tsx | 78 - .../components/DisputeView/PeriodBanner.tsx | 108 - web/src/components/DisputeView/index.tsx | 79 - web/src/components/Divider.tsx | 10 - web/src/components/DottedMenuButton.tsx | 98 - web/src/components/EnsureAuth.tsx | 61 - web/src/components/EnsureChain.tsx | 18 - web/src/components/ErrorButtonMessage.tsx | 11 - web/src/components/ErrorFallback.tsx | 129 - web/src/components/EvidenceCard.tsx | 258 - web/src/components/ExternalLink.tsx | 9 - web/src/components/ExtraStatsDisplay.tsx | 75 - web/src/components/FavoriteCases.tsx | 94 - web/src/components/Field.tsx | 124 - .../FileViewer/Viewers/MarkdownViewer.tsx | 38 - web/src/components/FileViewer/index.tsx | 81 - web/src/components/GradientTokenIcons.tsx | 53 - web/src/components/HeroImage.tsx | 26 - web/src/components/HowItWorks.tsx | 25 - web/src/components/InfoCard.tsx | 32 - web/src/components/InternalLink.tsx | 8 - .../components/JurorsLeaderboardButton.tsx | 19 - web/src/components/LabeledInput.tsx | 38 - web/src/components/LatestCases.tsx | 67 - web/src/components/LightButton.tsx | 51 - web/src/components/Loader.tsx | 50 - web/src/components/NumberDisplay.tsx | 49 - web/src/components/NumberInputField.tsx | 84 - web/src/components/Overlay.tsx | 11 - web/src/components/OverlayPortal.tsx | 18 - web/src/components/Phase.tsx | 21 - web/src/components/PlusMinusField.tsx | 65 - .../components/Popup/Description/Appeal.tsx | 53 - .../Popup/Description/DisputeCreated.tsx | 68 - .../Popup/Description/StakeWithdraw.tsx | 104 - .../Popup/Description/SwapSuccess.tsx | 93 - .../Popup/Description/VoteWithCommit.tsx | 22 - .../Popup/Description/VoteWithoutCommit.tsx | 17 - .../ExtraInfo/DisputeCreatedExtraInfo.tsx | 24 - .../ExtraInfo/StakeWithdrawExtraInfo.tsx | 24 - .../ExtraInfo/VoteWithCommitExtraInfo.tsx | 26 - .../MiniGuides/Appeal/CrowdfundAppeal.tsx | 40 - .../MiniGuides/Appeal/PayoffSimulator.tsx | 79 - .../Popup/MiniGuides/Appeal/StageOne.tsx | 76 - .../Popup/MiniGuides/Appeal/StageTwo.tsx | 57 - .../MiniGuides/Appeal/WhoWinsRewards.tsx | 52 - .../Popup/MiniGuides/Appeal/index.tsx | 74 - .../MiniGuides/BinaryVoting/PrivateVoting.tsx | 43 - .../MiniGuides/BinaryVoting/VotingModule.tsx | 41 - .../Popup/MiniGuides/BinaryVoting/index.tsx | 59 - .../MiniGuides/DisputeResolver/Parameters.tsx | 43 - .../MiniGuides/DisputeResolver/Parties.tsx | 36 - .../MiniGuides/DisputeResolver/Policy.tsx | 31 - .../MiniGuides/DisputeResolver/StartACase.tsx | 55 - .../DisputeResolver/VotingOptions.tsx | 40 - .../MiniGuides/DisputeResolver/WellDone.tsx | 52 - .../MiniGuides/DisputeResolver/index.tsx | 74 - .../Popup/MiniGuides/JurorLevels.tsx | 156 - .../MiniGuides/MainStructureTemplate.tsx | 211 - .../MiniGuides/Onboarding/HowItWorks.tsx | 26 - .../MiniGuides/Onboarding/PnkLogoAndTitle.tsx | 48 - .../MiniGuides/Onboarding/WhatDoINeed.tsx | 77 - .../Popup/MiniGuides/Onboarding/index.tsx | 110 - .../Popup/MiniGuides/PageContentsTemplate.tsx | 152 - .../MiniGuides/RankedVoting/VotingModule.tsx | 75 - .../Popup/MiniGuides/RankedVoting/index.tsx | 61 - .../Popup/MiniGuides/Staking/CourtHeader.tsx | 113 - .../Popup/MiniGuides/Staking/JurorRewards.tsx | 55 - .../MiniGuides/Staking/Notifications.tsx | 50 - .../MiniGuides/Staking/StakingSection.tsx | 53 - .../Popup/MiniGuides/Staking/index.tsx | 67 - web/src/components/Popup/index.tsx | 284 - web/src/components/ReactMarkdown.tsx | 16 - web/src/components/ScrollTop.tsx | 33 - web/src/components/SeeAllCasesButton.tsx | 24 - web/src/components/SeeAllJurorsButton.tsx | 16 - web/src/components/Spinner.tsx | 27 - web/src/components/StatDisplay.tsx | 107 - web/src/components/StyledArrowLink.tsx | 27 - .../StyledIcons/ClosedCircleIcon.tsx | 15 - web/src/components/StyledSkeleton.tsx | 45 - web/src/components/Tag.tsx | 26 - web/src/components/TxnHash.tsx | 40 - web/src/components/Verdict/Answer.tsx | 28 - .../components/Verdict/DisputeTimeline.tsx | 168 - web/src/components/Verdict/FinalDecision.tsx | 146 - .../Verdict/RulingAndRewardsIndicators.tsx | 32 - web/src/components/Verdict/index.tsx | 31 - web/src/components/WithHelpTooltip.tsx | 46 - web/src/consts/arbitratorTypes.ts | 7 - web/src/consts/averageBlockTimeInSeconds.ts | 3 - web/src/consts/chains.ts | 29 - web/src/consts/coingecko.ts | 5 - web/src/consts/community-elements.ts | 49 - web/src/consts/eip712-messages.ts | 45 - web/src/consts/index.ts | 51 - web/src/consts/periods.ts | 7 - web/src/consts/processEnvConsts.ts | 32 - web/src/consts/socialmedia.ts | 33 - web/src/context/AtlasProvider.tsx | 16 - web/src/context/GraphqlBatcher.tsx | 93 - web/src/context/IsListProvider.tsx | 34 - web/src/context/NewDisputeContext.tsx | 199 - web/src/context/OverlayScrollContext.tsx | 3 - web/src/context/QueryClientProvider.tsx | 11 - web/src/context/StyledComponentsProvider.tsx | 28 - web/src/context/Web3Provider.tsx | 121 - web/src/favicon.ico | Bin 14008 -> 0 bytes web/src/hooks/.gitkeep | 0 web/src/hooks/queries/useAllCasesQuery.ts | 28 - web/src/hooks/queries/useAppealCost.ts | 28 - web/src/hooks/queries/useCasesQuery.ts | 112 - .../hooks/queries/useClassicAppealQuery.ts | 66 - web/src/hooks/queries/useCounter.ts | 33 - web/src/hooks/queries/useCourtDetails.ts | 45 - web/src/hooks/queries/useCourtPolicy.ts | 8 - web/src/hooks/queries/useCourtPolicyURI.ts | 36 - web/src/hooks/queries/useCourtTree.ts | 62 - .../hooks/queries/useDisputeDetailsQuery.ts | 63 - .../useDisputeKitClassicMultipliers.ts | 41 - .../queries/useDisputeMaintenanceQuery.ts | 54 - .../hooks/queries/useDisputeTemplateFromId.ts | 36 - web/src/hooks/queries/useDrawQuery.ts | 37 - web/src/hooks/queries/useEvidences.ts | 65 - .../hooks/queries/useHomePageBlockQuery.ts | 209 - .../hooks/queries/useHomePageExtraStats.ts | 21 - web/src/hooks/queries/useHomePageQuery.ts | 49 - .../queries/useJurorStakeDetailsQuery.ts | 36 - .../queries/useJurorsByCoherenceScore.ts | 49 - web/src/hooks/queries/useLabelInfoQuery.ts | 55 - .../hooks/queries/usePolicyRegistryEvent.ts | 36 - .../hooks/queries/usePopulatedDisputeData.ts | 81 - web/src/hooks/queries/useRoundDetailsQuery.ts | 47 - .../hooks/queries/useSupportedDisputeKits.ts | 32 - .../queries/useTopStakedJurorsByCourt.ts | 60 - .../queries/useTotalLeaderboardJurors.ts | 32 - web/src/hooks/queries/useUser.ts | 72 - web/src/hooks/queries/useVotingHistory.ts | 66 - web/src/hooks/useClassicAppealContext.tsx | 188 - web/src/hooks/useCoinPrice.tsx | 25 - web/src/hooks/useCountdown.ts | 21 - web/src/hooks/useDisputeKitAddresses.ts | 163 - web/src/hooks/useGenesisBlock.ts | 32 - web/src/hooks/useHomePageContext.tsx | 30 - web/src/hooks/useIPFSQuery.ts | 19 - web/src/hooks/useIsDesktop.tsx | 12 - web/src/hooks/useLocalStorage.ts | 22 - web/src/hooks/useLockOverlayScroll.ts | 29 - web/src/hooks/useNavigateAndScrollTop.ts | 15 - web/src/hooks/usePNKData.tsx | 46 - web/src/hooks/useParsedAmount.ts | 7 - web/src/hooks/useScrollTop.ts | 15 - web/src/hooks/useSessionStorage.ts | 23 - web/src/hooks/useSigningAccount.tsx | 28 - web/src/hooks/useSortitionModule.ts | 54 - web/src/hooks/useSpamEvidence.ts | 42 - web/src/hooks/useStarredCases.tsx | 26 - web/src/hooks/useToggleThemeContext.tsx | 22 - web/src/hooks/useTokenAddressValidation.ts | 217 - web/src/hooks/useTransactionBatcher.tsx | 70 - web/src/hooks/useVotingContext.tsx | 134 - web/src/index.html | 21 - web/src/index.tsx | 18 - web/src/layout/Footer/index.tsx | 79 - web/src/layout/Header/DesktopHeader.tsx | 191 - web/src/layout/Header/Logo.tsx | 73 - web/src/layout/Header/MobileHeader.tsx | 63 - web/src/layout/Header/index.tsx | 66 - web/src/layout/Header/navbar/DappList.tsx | 156 - web/src/layout/Header/navbar/Debug.tsx | 69 - web/src/layout/Header/navbar/Explore.tsx | 101 - web/src/layout/Header/navbar/Menu/Help.tsx | 145 - .../Settings/General/WalletAndProfile.tsx | 61 - .../navbar/Menu/Settings/General/index.tsx | 84 - .../EmailVerificationInfo.tsx | 103 - .../FormContactDetails/FormContact.tsx | 72 - .../FormContactDetails/index.tsx | 152 - .../Menu/Settings/Notifications/index.tsx | 84 - .../Header/navbar/Menu/Settings/index.tsx | 103 - web/src/layout/Header/navbar/Menu/index.tsx | 91 - web/src/layout/Header/navbar/Product.tsx | 69 - web/src/layout/Header/navbar/index.tsx | 137 - web/src/layout/index.tsx | 57 - web/src/pages/AttachmentDisplay/Header.tsx | 96 - web/src/pages/AttachmentDisplay/index.tsx | 83 - .../CaseDetails/Appeal/AppealHistory.tsx | 57 - .../Cases/CaseDetails/Appeal/Classic/Fund.tsx | 194 - .../Appeal/Classic/Options/StageOne.tsx | 67 - .../Appeal/Classic/Options/StageTwo.tsx | 75 - .../Appeal/Classic/Options/index.tsx | 37 - .../Appeal/Classic/StageExplainer.tsx | 92 - .../CaseDetails/Appeal/Classic/index.tsx | 56 - .../Cases/CaseDetails/Appeal/OptionCard.tsx | 127 - .../Cases/CaseDetails/Appeal/Shutter/Fund.tsx | 176 - .../CaseDetails/Appeal/Shutter/index.tsx | 55 - .../pages/Cases/CaseDetails/Appeal/index.tsx | 85 - .../CaseDetails/Evidence/EvidenceSearch.tsx | 70 - .../Evidence/SubmitEvidenceModal.tsx | 139 - .../Cases/CaseDetails/Evidence/index.tsx | 165 - .../MaintenanceButtons/DistributeRewards.tsx | 91 - .../MaintenanceButtons/DrawButton.tsx | 118 - .../MaintenanceButtons/ExecuteRuling.tsx | 60 - .../MaintenanceButtons/MenuButton.tsx | 85 - .../MaintenanceButtons/PassPeriodButton.tsx | 73 - .../MaintenanceButtons/WithdrawAppealFees.tsx | 107 - .../CaseDetails/MaintenanceButtons/index.tsx | 136 - .../Cases/CaseDetails/Overview/index.tsx | 83 - web/src/pages/Cases/CaseDetails/Tabs.tsx | 100 - web/src/pages/Cases/CaseDetails/Timeline.tsx | 158 - .../CaseDetails/Voting/Classic/Commit.tsx | 98 - .../CaseDetails/Voting/Classic/Reveal.tsx | 165 - .../Cases/CaseDetails/Voting/Classic/Vote.tsx | 71 - .../CaseDetails/Voting/Classic/index.tsx | 40 - .../CaseDetails/Voting/JustificationArea.tsx | 37 - .../CaseDetails/Voting/OptionsContainer.tsx | 128 - .../CaseDetails/Voting/PendingVotesBox.tsx | 42 - .../CaseDetails/Voting/Shutter/Commit.tsx | 164 - .../CaseDetails/Voting/Shutter/Reveal.tsx | 134 - .../CaseDetails/Voting/Shutter/index.tsx | 42 - .../Voting/VotesDetails/AccordionTitle.tsx | 106 - .../CaseDetails/Voting/VotesDetails/index.tsx | 200 - .../CaseDetails/Voting/VotingHistory.tsx | 136 - .../pages/Cases/CaseDetails/Voting/index.tsx | 139 - web/src/pages/Cases/CaseDetails/index.tsx | 94 - web/src/pages/Cases/CasesFetcher.tsx | 89 - web/src/pages/Cases/index.tsx | 35 - .../pages/Courts/CourtDetails/Description.tsx | 132 - web/src/pages/Courts/CourtDetails/Info.tsx | 30 - .../DisplayJurors/Header.tsx | 32 - .../DisplayJurors/JurorCard.tsx | 39 - .../DisplayJurors/Stake.tsx | 18 - .../DisplayJurors/index.tsx | 102 - .../JurorsStakedByCourt/Search.tsx | 60 - .../JurorsStakedByCourt/index.tsx | 31 - .../CourtDetails/StakePanel/InputDisplay.tsx | 151 - .../StakePanel/Simulator/Header.tsx | 69 - .../Simulator/QuantityToSimulate.tsx | 109 - .../StakePanel/Simulator/index.tsx | 276 - .../StakePanel/StakeWithdrawButton.tsx | 319 - .../StakePanel/StakeWithdrawPopup/Header.tsx | 116 - .../StakePanel/StakeWithdrawPopup/index.tsx | 127 - .../StakeWithdrawPopup/stakeSteps.tsx | 161 - .../Courts/CourtDetails/StakePanel/index.tsx | 79 - .../CourtDetails/Stats/StatsContent.tsx | 123 - .../pages/Courts/CourtDetails/Stats/index.tsx | 78 - .../pages/Courts/CourtDetails/Stats/stats.ts | 116 - .../pages/Courts/CourtDetails/TopSearch.tsx | 169 - web/src/pages/Courts/CourtDetails/index.tsx | 195 - .../ExecuteDelayedStakeButton.tsx | 83 - .../PassPhaseButton.tsx | 93 - .../Courts/StakeMaintenanceButton/index.tsx | 77 - web/src/pages/Courts/index.tsx | 36 - web/src/pages/GetPnk/WalletProvider.tsx | 55 - web/src/pages/GetPnk/Widget.tsx | 94 - web/src/pages/GetPnk/index.tsx | 48 - web/src/pages/Home/Community/Element.tsx | 44 - web/src/pages/Home/Community/index.tsx | 71 - web/src/pages/Home/CourtOverview/BarChart.tsx | 126 - .../Home/CourtOverview/CasesByCourtsChart.tsx | 20 - web/src/pages/Home/CourtOverview/Chart.tsx | 149 - .../pages/Home/CourtOverview/ExtraStats.tsx | 107 - web/src/pages/Home/CourtOverview/Header.tsx | 40 - .../CourtOverview/StakedPNKByCourtsChart.tsx | 20 - web/src/pages/Home/CourtOverview/Stats.tsx | 119 - .../Home/CourtOverview/TimeSeriesChart.tsx | 131 - web/src/pages/Home/CourtOverview/index.tsx | 23 - .../pages/Home/TopJurors/Header/Coherence.tsx | 42 - .../Home/TopJurors/Header/DesktopHeader.tsx | 81 - .../Home/TopJurors/Header/MobileHeader.tsx | 53 - .../pages/Home/TopJurors/Header/Rewards.tsx | 47 - web/src/pages/Home/TopJurors/Header/Score.tsx | 40 - web/src/pages/Home/TopJurors/Header/index.tsx | 15 - .../Home/TopJurors/JurorCard/Coherence.tsx | 35 - .../Home/TopJurors/JurorCard/DesktopCard.tsx | 70 - .../Home/TopJurors/JurorCard/JurorLevel.tsx | 56 - .../Home/TopJurors/JurorCard/JurorTitle.tsx | 71 - .../Home/TopJurors/JurorCard/MobileCard.tsx | 131 - .../pages/Home/TopJurors/JurorCard/Rank.tsx | 33 - .../Home/TopJurors/JurorCard/Rewards.tsx | 74 - .../pages/Home/TopJurors/JurorCard/Score.tsx | 29 - .../pages/Home/TopJurors/JurorCard/index.tsx | 25 - web/src/pages/Home/TopJurors/index.tsx | 78 - web/src/pages/Home/index.tsx | 51 - web/src/pages/Jurors/DisplayJurors.tsx | 104 - web/src/pages/Jurors/Search.tsx | 58 - web/src/pages/Jurors/Stats.tsx | 41 - web/src/pages/Jurors/StatsAndFilters.tsx | 52 - web/src/pages/Jurors/index.tsx | 72 - web/src/pages/Profile/JurorInfo/Coherence.tsx | 67 - web/src/pages/Profile/JurorInfo/Header.tsx | 122 - .../pages/Profile/JurorInfo/JurorRewards.tsx | 52 - web/src/pages/Profile/JurorInfo/PixelArt.tsx | 59 - .../Profile/JurorInfo/StakingRewards.tsx | 65 - .../pages/Profile/JurorInfo/TokenRewards.tsx | 39 - web/src/pages/Profile/JurorInfo/index.tsx | 67 - .../Profile/Stakes/CourtCard/CourtName.tsx | 55 - .../pages/Profile/Stakes/CourtCard/Stake.tsx | 60 - .../pages/Profile/Stakes/CourtCard/index.tsx | 51 - web/src/pages/Profile/Stakes/Header.tsx | 139 - web/src/pages/Profile/Stakes/index.tsx | 77 - web/src/pages/Profile/index.tsx | 143 - .../pages/Resolver/Briefing/Description.tsx | 62 - web/src/pages/Resolver/Briefing/Title.tsx | 68 - web/src/pages/Resolver/Header.tsx | 25 - .../pages/Resolver/Landing/CreationCard.tsx | 138 - web/src/pages/Resolver/Landing/index.tsx | 160 - .../Resolver/NavigationButtons/NextButton.tsx | 54 - .../NavigationButtons/PreviousButton.tsx | 30 - .../SubmitBatchDisputesButton.tsx | 121 - .../NavigationButtons/SubmitDisputeButton.tsx | 156 - .../Resolver/NavigationButtons/index.tsx | 40 - .../pages/Resolver/Parameters/Category.tsx | 74 - web/src/pages/Resolver/Parameters/Court.tsx | 356 - web/src/pages/Resolver/Parameters/Jurors.tsx | 84 - .../NotablePersons/PersonFields.tsx | 120 - .../Parameters/NotablePersons/index.tsx | 52 - .../VotingOptions/OptionsFields.tsx | 85 - .../Parameters/VotingOptions/index.tsx | 81 - web/src/pages/Resolver/Policy/index.tsx | 126 - .../Resolver/Preview/BatchCreationCard.tsx | 185 - web/src/pages/Resolver/Preview/index.tsx | 99 - web/src/pages/Resolver/Timeline.tsx | 42 - web/src/pages/Resolver/index.tsx | 155 - .../Settings/EmailConfirmation/index.tsx | 190 - web/src/pages/Settings/index.tsx | 29 - web/src/public/llms.txt | 9 - web/src/styles/commonStyles.ts | 9 - web/src/styles/customScrollbar.ts | 26 - web/src/styles/global-style.ts | 132 - web/src/styles/landscapeStyle.ts | 11 - web/src/styles/portraitStyle.ts | 9 - web/src/styles/responsiveSize.ts | 12 - web/src/styles/themes.ts | 99 - web/src/utils/beautifyStatNumber.ts | 46 - web/src/utils/calculateSubtextRender.tsx | 21 - web/src/utils/commify.ts | 52 - web/src/utils/date.ts | 74 - web/src/utils/debounceErrorToast.ts | 12 - web/src/utils/extradataToTokenInfo.ts | 42 - web/src/utils/format.ts | 24 - web/src/utils/getCoherencePercent.tsx | 4 - web/src/utils/getDescriptiveCourtName.ts | 5 - .../utils/getDisputeRequestParamsFromTxn.ts | 56 - web/src/utils/getDrawnJurorsWithCount.ts | 26 - web/src/utils/getGraphqlUrl.ts | 16 - web/src/utils/getIpfsUrl.ts | 13 - web/src/utils/getLocalRounds.ts | 12 - web/src/utils/getVoteChoice.ts | 14 - web/src/utils/index.ts | 39 - web/src/utils/isLastRound.ts | 10 - web/src/utils/jurorRewardConfig.ts | 49 - web/src/utils/parseWagmiError.ts | 18 - web/src/utils/prepareArbitratorExtradata.ts | 68 - web/src/utils/refecthWithRetry.ts | 25 - web/src/utils/sanitizeFilter.ts | 5 - web/src/utils/sentry.ts | 41 - web/src/utils/shortenAddress.ts | 10 - web/src/utils/shutter.ts | 195 - web/src/utils/transformSearch.ts | 16 - web/src/utils/uri.ts | 22 - web/src/utils/userLevelCalculation.ts | 23 - web/src/utils/validateAddressOrEns.ts | 14 - web/src/utils/wrapWithToast.ts | 51 - web/tsconfig.json | 89 - web/vite.config.js | 48 - web/wagmi.config.ts | 128 - yarn.lock | 35904 ---------------- 1387 files changed, 380527 deletions(-) delete mode 100644 .codeclimate.yml delete mode 100644 .depcheckrc delete mode 100644 .dockerignore delete mode 100644 .editorconfig delete mode 100644 .eslintignore delete mode 100644 .github/CODEOWNERS delete mode 100644 .github/dependabot.yml delete mode 100644 .github/workflows/codeql.yml delete mode 100644 .github/workflows/contracts-testing.yml delete mode 100644 .github/workflows/dependency-review.yml delete mode 100644 .github/workflows/deploy-bots.yml delete mode 100644 .github/workflows/deploy-subgraph.yml delete mode 100644 .github/workflows/scorecards.yml delete mode 100644 .github/workflows/sentry-release.yml delete mode 100644 .github/workflows/sonarcloud.yml delete mode 100644 .gitmodules delete mode 100755 .husky/commit-msg delete mode 100755 .husky/pre-commit delete mode 100644 .lintstagedrc.json delete mode 100644 .nvmrc delete mode 100644 .renovaterc.json delete mode 100644 .vscode/contract-decorators.code-snippets delete mode 100644 .vscode/settings.json delete mode 100644 .whitesource delete mode 100644 .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs delete mode 100644 .yarn/plugins/@yarnpkg/plugin-stage.cjs delete mode 100644 .yarn/plugins/@yarnpkg/plugin-typescript.cjs delete mode 100644 .yarn/plugins/@yarnpkg/plugin-version.cjs delete mode 100644 .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs delete mode 100755 .yarn/releases/yarn-4.9.2.cjs delete mode 100644 .yarnrc.yml delete mode 100644 CONTRIBUTING.md delete mode 100644 LICENSE delete mode 100644 README.md delete mode 100644 SECURITY.md delete mode 100644 bots/README.md delete mode 100644 commitlint.config.js delete mode 100644 contracts/.env.example delete mode 100644 contracts/.eslintignore delete mode 100644 contracts/.npmignore delete mode 100644 contracts/.npmrc delete mode 100644 contracts/.prettierignore delete mode 100644 contracts/.solcover.js delete mode 100644 contracts/.solhint.json delete mode 100644 contracts/.solhintignore delete mode 100644 contracts/.yarnrc.yml delete mode 100644 contracts/CHANGELOG.md delete mode 100644 contracts/DEVNET_REDEPLOY.md delete mode 100644 contracts/README.md delete mode 100644 contracts/README.md.template delete mode 100644 contracts/config/courts.v1.gnosischain.json delete mode 100644 contracts/config/courts.v1.mainnet.json delete mode 100644 contracts/config/courts.v2.devnet.json delete mode 100644 contracts/config/courts.v2.mainnet.json delete mode 100644 contracts/config/courts.v2.testnet.json delete mode 100644 contracts/config/policies.v1.gnosischain.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-Chinese-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-Curation-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-Development-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-French-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-General-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-German-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-Japanese-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-Javascript-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-Korean-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-Portuguese-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-Russian-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-Solidity-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-Spanish-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.gnosischain/xDai-Turkish-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet.json delete mode 100644 contracts/config/policies.v1.mainnet/Blockchain-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Chinese-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Curation-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Curation-Medium-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Data-Analysis-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/French-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/General-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/German-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Humanity-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Japanese-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Korean-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Marketing-Services-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Non-Technical-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Onboarding-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Portuguese-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Russian-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Spanish-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Spanish-General-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Statistical-Modeling-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Technical-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Token-Listing-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Turkish-English-Language-Court-Policy.json delete mode 100644 contracts/config/policies.v1.mainnet/Video-Production-Court-Policy.json delete mode 100644 contracts/config/policies.v2.devnet.json delete mode 100644 contracts/config/policies.v2.mainnet.json delete mode 100644 contracts/config/policies.v2.testnet.json delete mode 100644 contracts/deploy/00-home-chain-arbitration-mainnet.ts delete mode 100644 contracts/deploy/00-home-chain-arbitration-ruler.ts delete mode 100644 contracts/deploy/00-home-chain-arbitration-university.ts delete mode 100644 contracts/deploy/00-home-chain-arbitration.ts delete mode 100644 contracts/deploy/00-home-chain-resolver.ts delete mode 100644 contracts/deploy/00-rng-chainlink.ts delete mode 100644 contracts/deploy/00-rng-randomizer.ts delete mode 100644 contracts/deploy/01-foreign-gateway-on-ethereum.ts delete mode 100644 contracts/deploy/01-foreign-gateway-on-gnosis.ts delete mode 100644 contracts/deploy/02-home-gateway-to-ethereum.ts delete mode 100644 contracts/deploy/02-home-gateway-to-gnosis.ts delete mode 100644 contracts/deploy/03-vea-mock.ts delete mode 100644 contracts/deploy/04-foreign-arbitrable.ts delete mode 100644 contracts/deploy/04-klerosliquid-to-v2-gnosis.ts delete mode 100644 contracts/deploy/change-arbitrable-dispute-template.ts delete mode 100644 contracts/deploy/change-sortition-module-rng.ts delete mode 100644 contracts/deploy/fix1148.ts delete mode 100644 contracts/deploy/upgrade-all.ts delete mode 100644 contracts/deploy/utils/deployTokens.ts delete mode 100644 contracts/deploy/utils/deployUpgradable.ts delete mode 100644 contracts/deploy/utils/getContractAddress.ts delete mode 100644 contracts/deploy/utils/getContractOrDeploy.ts delete mode 100644 contracts/deploy/utils/index.ts delete mode 100644 contracts/deploy/utils/klerosCoreHelper.ts delete mode 100644 contracts/deployments/arbitrum.ts delete mode 100644 contracts/deployments/arbitrum/.chainId delete mode 100644 contracts/deployments/arbitrum/BlockHashRNG.json delete mode 100644 contracts/deployments/arbitrum/ChainlinkRNG.json delete mode 100644 contracts/deployments/arbitrum/ChainlinkVRFCoordinator.json delete mode 100644 contracts/deployments/arbitrum/DAI.json delete mode 100644 contracts/deployments/arbitrum/DisputeKitClassic.json delete mode 100644 contracts/deployments/arbitrum/DisputeKitClassic_Implementation.json delete mode 100644 contracts/deployments/arbitrum/DisputeKitClassic_Proxy.json delete mode 100644 contracts/deployments/arbitrum/DisputeKitGated.json delete mode 100644 contracts/deployments/arbitrum/DisputeKitGatedShutter.json delete mode 100644 contracts/deployments/arbitrum/DisputeKitGatedShutter_Implementation.json delete mode 100644 contracts/deployments/arbitrum/DisputeKitGatedShutter_Proxy.json delete mode 100644 contracts/deployments/arbitrum/DisputeKitGated_Implementation.json delete mode 100644 contracts/deployments/arbitrum/DisputeKitGated_Proxy.json delete mode 100644 contracts/deployments/arbitrum/DisputeKitShutter.json delete mode 100644 contracts/deployments/arbitrum/DisputeKitShutter_Implementation.json delete mode 100644 contracts/deployments/arbitrum/DisputeKitShutter_Proxy.json delete mode 100644 contracts/deployments/arbitrum/DisputeResolver.json delete mode 100644 contracts/deployments/arbitrum/DisputeResolverRuler.json delete mode 100644 contracts/deployments/arbitrum/DisputeTemplateRegistry.json delete mode 100644 contracts/deployments/arbitrum/DisputeTemplateRegistry_Implementation.json delete mode 100644 contracts/deployments/arbitrum/DisputeTemplateRegistry_Proxy.json delete mode 100644 contracts/deployments/arbitrum/EvidenceModule.json delete mode 100644 contracts/deployments/arbitrum/EvidenceModule_Implementation.json delete mode 100644 contracts/deployments/arbitrum/EvidenceModule_Proxy.json delete mode 100644 contracts/deployments/arbitrum/KlerosCore.json delete mode 100644 contracts/deployments/arbitrum/KlerosCoreRuler.json delete mode 100644 contracts/deployments/arbitrum/KlerosCoreRuler_Implementation.json delete mode 100644 contracts/deployments/arbitrum/KlerosCoreRuler_Proxy.json delete mode 100644 contracts/deployments/arbitrum/KlerosCoreSnapshotProxy.json delete mode 100644 contracts/deployments/arbitrum/KlerosCore_Implementation.json delete mode 100644 contracts/deployments/arbitrum/KlerosCore_Proxy.json delete mode 100644 contracts/deployments/arbitrum/KlerosV2NeoEarlyUser.json delete mode 120000 contracts/deployments/arbitrum/PNK.json delete mode 100644 contracts/deployments/arbitrum/PNKFaucet.json delete mode 100644 contracts/deployments/arbitrum/Pinakion.json delete mode 100644 contracts/deployments/arbitrum/PolicyRegistry.json delete mode 100644 contracts/deployments/arbitrum/PolicyRegistry_Implementation.json delete mode 100644 contracts/deployments/arbitrum/PolicyRegistry_Proxy.json delete mode 100644 contracts/deployments/arbitrum/RandomizerOracle.json delete mode 100644 contracts/deployments/arbitrum/RandomizerRNG.json delete mode 100644 contracts/deployments/arbitrum/RandomizerRNG_Implementation.json delete mode 100644 contracts/deployments/arbitrum/RandomizerRNG_Proxy.json delete mode 100644 contracts/deployments/arbitrum/SortitionModule.json delete mode 100644 contracts/deployments/arbitrum/SortitionModule_Implementation.json delete mode 100644 contracts/deployments/arbitrum/SortitionModule_Proxy.json delete mode 100644 contracts/deployments/arbitrum/TransactionBatcher.json delete mode 100644 contracts/deployments/arbitrum/WETH.json delete mode 100644 contracts/deployments/arbitrumSepolia.ts delete mode 100644 contracts/deployments/arbitrumSepolia/.chainId delete mode 100644 contracts/deployments/arbitrumSepolia/BlockHashRNG.json delete mode 100644 contracts/deployments/arbitrumSepolia/ChainlinkRNG.json delete mode 100644 contracts/deployments/arbitrumSepolia/ChainlinkVRFCoordinator.json delete mode 100644 contracts/deployments/arbitrumSepolia/DAI.json delete mode 100644 contracts/deployments/arbitrumSepolia/DAIFaucet.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeKitClassic.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeKitClassic_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeKitClassic_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeKitGated.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeKitGatedShutter.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeKitGatedShutter_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeKitGatedShutter_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeKitGated_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeKitGated_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeKitShutter.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeKitShutter_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeKitShutter_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeResolver.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeTemplateRegistry.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeTemplateRegistry_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepolia/DisputeTemplateRegistry_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepolia/EvidenceModule.json delete mode 100644 contracts/deployments/arbitrumSepolia/EvidenceModule_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepolia/EvidenceModule_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepolia/KlerosCore.json delete mode 100644 contracts/deployments/arbitrumSepolia/KlerosCoreSnapshotProxy.json delete mode 100644 contracts/deployments/arbitrumSepolia/KlerosCore_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepolia/KlerosCore_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepolia/PNK.json delete mode 100644 contracts/deployments/arbitrumSepolia/PNKFaucet.json delete mode 120000 contracts/deployments/arbitrumSepolia/PinakionV2.json delete mode 100644 contracts/deployments/arbitrumSepolia/PolicyRegistry.json delete mode 100644 contracts/deployments/arbitrumSepolia/PolicyRegistry_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepolia/PolicyRegistry_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepolia/RandomizerOracle.json delete mode 100644 contracts/deployments/arbitrumSepolia/RandomizerRNG.json delete mode 100644 contracts/deployments/arbitrumSepolia/RandomizerRNG_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepolia/RandomizerRNG_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepolia/SortitionModule.json delete mode 100644 contracts/deployments/arbitrumSepolia/SortitionModule_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepolia/SortitionModule_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepolia/TransactionBatcher.json delete mode 100644 contracts/deployments/arbitrumSepolia/WETH.json delete mode 100644 contracts/deployments/arbitrumSepolia/WETHFaucet.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet.ts delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/.chainId delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/ArbitrableExample.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/BlockHashRNG.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/ChainlinkRNG.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/ChainlinkVRFCoordinator.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DAI.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DAIFaucet.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeResolver.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeResolverRuler.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeResolverUniversity.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/KlerosCore.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreRuler.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreRuler_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreRuler_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreSnapshotProxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/KlerosCore_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/KlerosCore_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/KlerosV2NeoEarlyUser.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/PNK.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/PNKFaucet.json delete mode 120000 contracts/deployments/arbitrumSepoliaDevnet/PinakionV2.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/RandomizerOracle.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/SortitionModule.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/SortitionModule_Implementation.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/SortitionModule_Proxy.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/TransactionBatcher.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/WETH.json delete mode 100644 contracts/deployments/arbitrumSepoliaDevnet/WETHFaucet.json delete mode 100644 contracts/deployments/chiado/.chainId delete mode 100644 contracts/deployments/chiado/ArbitrableExample.json delete mode 100644 contracts/deployments/chiado/DisputeResolver.json delete mode 100644 contracts/deployments/chiado/DisputeTemplateRegistry.json delete mode 100644 contracts/deployments/chiado/ForeignGatewayOnGnosis.json delete mode 100644 contracts/deployments/chiado/SortitionSumTreeFactory.json delete mode 100644 contracts/deployments/chiado/TokenBridge.json delete mode 100644 contracts/deployments/chiado/WETH.json delete mode 100644 contracts/deployments/chiado/WETHFaucet.json delete mode 100644 contracts/deployments/chiado/WPNKFaucet.json delete mode 100644 contracts/deployments/chiado/WrappedPinakionV2.json delete mode 100644 contracts/deployments/chiado/xKlerosLiquidV2.json delete mode 100644 contracts/deployments/chiadoDevnet/.chainId delete mode 100644 contracts/deployments/chiadoDevnet/ArbitrableExample.json delete mode 100644 contracts/deployments/chiadoDevnet/DisputeResolver.json delete mode 100644 contracts/deployments/chiadoDevnet/DisputeTemplateRegistry.json delete mode 100644 contracts/deployments/chiadoDevnet/ForeignGatewayOnGnosis.json delete mode 100644 contracts/deployments/chiadoDevnet/ForeignGatewayOnGnosis_Implementation.json delete mode 100644 contracts/deployments/chiadoDevnet/ForeignGatewayOnGnosis_Proxy.json delete mode 100644 contracts/deployments/chiadoDevnet/WETH.json delete mode 100644 contracts/deployments/chiadoDevnet/WETHFaucet.json delete mode 100644 contracts/deployments/chiadoDevnet/WPNKFaucet.json delete mode 100644 contracts/deployments/chiadoDevnet/WrappedPinakionV2.json delete mode 100644 contracts/deployments/contractsEthers.ts delete mode 100644 contracts/deployments/contractsViem.ts delete mode 100644 contracts/deployments/devnet.viem.ts delete mode 100644 contracts/deployments/disputeKitsViem.ts delete mode 100644 contracts/deployments/gnosischain/PolicyRegistry.json delete mode 100644 contracts/deployments/gnosischain/TokenBridge.json delete mode 100644 contracts/deployments/gnosischain/TransactionBatcher.json delete mode 100644 contracts/deployments/gnosischain/WETH.json delete mode 100644 contracts/deployments/gnosischain/WrappedPinakion.json delete mode 100644 contracts/deployments/gnosischain/xKlerosLiquid.json delete mode 100644 contracts/deployments/gnosischain/xPNK.json delete mode 100644 contracts/deployments/index.ts delete mode 100644 contracts/deployments/mainnet.viem.ts delete mode 100644 contracts/deployments/mainnet/.chainId delete mode 100644 contracts/deployments/sepolia/.chainId delete mode 100644 contracts/deployments/sepolia/PinakionV2.json delete mode 100644 contracts/deployments/sepoliaDevnet/.chainId delete mode 100644 contracts/deployments/sepoliaDevnet/PinakionV2.json delete mode 100644 contracts/deployments/testnet.viem.ts delete mode 100644 contracts/deployments/utils.ts delete mode 100644 contracts/foundry.toml delete mode 100644 contracts/hardhat.config.ts delete mode 160000 contracts/lib/forge-std delete mode 160000 contracts/lib/solmate delete mode 100644 contracts/package.json delete mode 100644 contracts/remappings.txt delete mode 100644 contracts/scripts/changeOwner.ts delete mode 100644 contracts/scripts/compareStorageLayout.ts delete mode 100644 contracts/scripts/console-init-chiado-resolver.ts delete mode 100644 contracts/scripts/console-init-chiado.ts delete mode 100644 contracts/scripts/console-init.ts delete mode 100755 contracts/scripts/coverage.sh delete mode 100644 contracts/scripts/disputeCreatorBot.ts delete mode 100644 contracts/scripts/disputeRelayerBot.ts delete mode 100644 contracts/scripts/disputeRelayerBotFromChiado.ts delete mode 100644 contracts/scripts/disputeRelayerBotFromHardhat.ts delete mode 100644 contracts/scripts/disputeRelayerBotFromSepolia.ts delete mode 100755 contracts/scripts/docPostprocess.sh delete mode 100755 contracts/scripts/docPreprocess.sh delete mode 100755 contracts/scripts/dotenv.sh delete mode 100755 contracts/scripts/downloadPolicies.sh delete mode 100755 contracts/scripts/exportDeployments.sh delete mode 100755 contracts/scripts/find-initializer-versions.sh delete mode 100755 contracts/scripts/generateDeploymentArtifact.sh delete mode 100755 contracts/scripts/generateDeploymentsMarkdown.sh delete mode 100755 contracts/scripts/generateMetrics.sh delete mode 100644 contracts/scripts/getCourtsV1.ts delete mode 100644 contracts/scripts/getDisputeKits.ts delete mode 100644 contracts/scripts/getDisputeTemplate.ts delete mode 100644 contracts/scripts/getPoliciesV1.ts delete mode 100644 contracts/scripts/keeperBot.ts delete mode 100644 contracts/scripts/keeperBotShutter.ts delete mode 100644 contracts/scripts/populateCourts.ts delete mode 100644 contracts/scripts/populatePolicyRegistry.ts delete mode 100755 contracts/scripts/populateReadme.sh delete mode 100755 contracts/scripts/publish.sh delete mode 100755 contracts/scripts/setPoliciesURIs.sh delete mode 100644 contracts/scripts/shutter.ts delete mode 100644 contracts/scripts/storage-layout.ts delete mode 100644 contracts/scripts/utils/contracts.ts delete mode 100644 contracts/scripts/utils/env.ts delete mode 100644 contracts/scripts/utils/execution.ts delete mode 100644 contracts/scripts/utils/logger.ts delete mode 100644 contracts/scripts/utils/tx-builder.ts delete mode 100755 contracts/scripts/verifyProxies.sh delete mode 100644 contracts/scripts/viemTest.ts delete mode 100644 contracts/scripts/wagmiHelpers.ts delete mode 100644 contracts/src/arbitration/DisputeTemplateRegistry.sol delete mode 100644 contracts/src/arbitration/KlerosCore.sol delete mode 100644 contracts/src/arbitration/KlerosGovernor.sol delete mode 100644 contracts/src/arbitration/PolicyRegistry.sol delete mode 100644 contracts/src/arbitration/SortitionModule.sol delete mode 100644 contracts/src/arbitration/arbitrables/ArbitrableExample.sol delete mode 100644 contracts/src/arbitration/arbitrables/DisputeResolver.sol delete mode 100644 contracts/src/arbitration/devtools/DisputeResolverRuler.sol delete mode 100644 contracts/src/arbitration/devtools/KlerosCoreRuler.sol delete mode 100644 contracts/src/arbitration/dispute-kits/DisputeKitClassic.sol delete mode 100644 contracts/src/arbitration/dispute-kits/DisputeKitClassicBase.sol delete mode 100644 contracts/src/arbitration/dispute-kits/DisputeKitGated.sol delete mode 100644 contracts/src/arbitration/dispute-kits/DisputeKitGatedShutter.sol delete mode 100644 contracts/src/arbitration/dispute-kits/DisputeKitShutter.sol delete mode 100644 contracts/src/arbitration/dispute-kits/DisputeKitSybilResistant.sol delete mode 100644 contracts/src/arbitration/evidence/EvidenceModule.sol delete mode 100644 contracts/src/arbitration/evidence/ModeratedEvidenceModule.sol delete mode 100644 contracts/src/arbitration/interfaces/IArbitrableV2.sol delete mode 100644 contracts/src/arbitration/interfaces/IArbitratorV2.sol delete mode 100644 contracts/src/arbitration/interfaces/IDisputeKit.sol delete mode 100644 contracts/src/arbitration/interfaces/IDisputeTemplateRegistry.sol delete mode 100644 contracts/src/arbitration/interfaces/IEvidence.sol delete mode 100644 contracts/src/arbitration/interfaces/ISortitionModule.sol delete mode 100644 contracts/src/arbitration/university/ISortitionModuleUniversity.sol delete mode 100644 contracts/src/arbitration/university/KlerosCoreUniversity.sol delete mode 100644 contracts/src/arbitration/university/SortitionModuleUniversity.sol delete mode 100644 contracts/src/arbitration/view/KlerosCoreSnapshotProxy.sol delete mode 100644 contracts/src/gateway/ForeignGateway.sol delete mode 100644 contracts/src/gateway/HomeGateway.sol delete mode 100644 contracts/src/gateway/interfaces/IForeignGateway.sol delete mode 100644 contracts/src/gateway/interfaces/IHomeGateway.sol delete mode 100644 contracts/src/gateway/mock/VeaMock.sol delete mode 100644 contracts/src/kleros-v1/interfaces/IArbitrableV1.sol delete mode 100644 contracts/src/kleros-v1/interfaces/IArbitratorV1.sol delete mode 100644 contracts/src/kleros-v1/interfaces/IEvidenceV1.sol delete mode 100644 contracts/src/kleros-v1/interfaces/IKlerosLiquid.sol delete mode 100644 contracts/src/kleros-v1/interfaces/ITokenController.sol delete mode 100644 contracts/src/kleros-v1/kleros-liquid-xdai/WrappedPinakion.sol delete mode 100644 contracts/src/kleros-v1/kleros-liquid-xdai/interfaces/IERC677.sol delete mode 100644 contracts/src/kleros-v1/kleros-liquid-xdai/interfaces/IRandomAuRa.sol delete mode 100644 contracts/src/kleros-v1/kleros-liquid-xdai/interfaces/ITokenBridge.sol delete mode 100644 contracts/src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol delete mode 100644 contracts/src/kleros-v1/kleros-liquid/KlerosLiquidToV2Governor.sol delete mode 100644 contracts/src/kleros-v1/libraries/SortitionSumTreeFactory.sol delete mode 100644 contracts/src/libraries/Constants.sol delete mode 100644 contracts/src/libraries/SafeERC20.sol delete mode 100644 contracts/src/libraries/SafeSend.sol delete mode 100644 contracts/src/libraries/SortitionTrees.sol delete mode 100644 contracts/src/proxy/Initializable.sol delete mode 100644 contracts/src/proxy/KlerosProxies.sol delete mode 100644 contracts/src/proxy/UUPSProxiable.sol delete mode 100644 contracts/src/proxy/UUPSProxy.sol delete mode 100644 contracts/src/proxy/mock/UUPSUpgradeableMocks.sol delete mode 100644 contracts/src/proxy/mock/by-inheritance/UpgradedByInheritance.sol delete mode 100644 contracts/src/proxy/mock/by-rewrite/UpgradedByRewrite.sol delete mode 100644 contracts/src/proxy/mock/by-rewrite/UpgradedByRewriteV2.sol delete mode 100644 contracts/src/rng/BlockhashRNG.sol delete mode 100644 contracts/src/rng/ChainlinkConsumerBaseV2Plus.sol delete mode 100644 contracts/src/rng/ChainlinkRNG.sol delete mode 100644 contracts/src/rng/IRNG.sol delete mode 100644 contracts/src/rng/IRandomizer.sol delete mode 100644 contracts/src/rng/IncrementalNG.sol delete mode 100644 contracts/src/rng/RNGWithFallback.sol delete mode 100644 contracts/src/rng/RandomizerRNG.sol delete mode 100644 contracts/src/rng/mock/ChainlinkVRFCoordinatorMock.sol delete mode 100644 contracts/src/rng/mock/RandomizerMock.sol delete mode 100644 contracts/src/test/KlerosCoreMock.sol delete mode 100644 contracts/src/test/RNGMock.sol delete mode 100644 contracts/src/test/SortitionModuleMock.sol delete mode 100644 contracts/src/test/SortitionTreesMock.sol delete mode 100644 contracts/src/token/Faucet.sol delete mode 100644 contracts/src/token/PNK.sol delete mode 100644 contracts/src/token/PinakionV2.sol delete mode 100644 contracts/src/token/TestERC1155.sol delete mode 100644 contracts/src/token/TestERC20.sol delete mode 100644 contracts/src/token/TestERC721.sol delete mode 100644 contracts/src/token/WrappedPinakionV2.sol delete mode 100644 contracts/src/utils/TransactionBatcher.sol delete mode 100644 contracts/test/arbitration/dispute-kit-gated.ts delete mode 100644 contracts/test/arbitration/dispute-kit-shutter.ts delete mode 100644 contracts/test/arbitration/draw.ts delete mode 100644 contracts/test/arbitration/index.ts delete mode 100644 contracts/test/arbitration/ruler.ts delete mode 100644 contracts/test/arbitration/staking-neo.ts delete mode 100644 contracts/test/arbitration/staking.ts delete mode 100644 contracts/test/evidence/index.ts delete mode 100644 contracts/test/fixtures/DisputeTemplate.resolver.jsonc delete mode 100644 contracts/test/fixtures/DisputeTemplate.schema.json delete mode 100644 contracts/test/fixtures/DisputeTemplate.simple.json delete mode 100644 contracts/test/foundry/KlerosCore_Appeals.t.sol delete mode 100644 contracts/test/foundry/KlerosCore_Disputes.t.sol delete mode 100644 contracts/test/foundry/KlerosCore_Drawing.t.sol delete mode 100644 contracts/test/foundry/KlerosCore_Execution.t.sol delete mode 100644 contracts/test/foundry/KlerosCore_Governance.t.sol delete mode 100644 contracts/test/foundry/KlerosCore_Initialization.t.sol delete mode 100644 contracts/test/foundry/KlerosCore_RNG.t.sol delete mode 100644 contracts/test/foundry/KlerosCore_Staking.t.sol delete mode 100644 contracts/test/foundry/KlerosCore_TestBase.sol delete mode 100644 contracts/test/foundry/KlerosCore_Voting.t.sol delete mode 100644 contracts/test/integration/getContractsEthers.test.ts delete mode 100644 contracts/test/integration/getContractsViem.test.ts delete mode 100644 contracts/test/integration/index.ts delete mode 100644 contracts/test/proxy/index.ts delete mode 100644 contracts/test/rng/index.ts delete mode 100644 contracts/test/sortition/index.ts delete mode 100644 contracts/test/utils/getActualAddress.test.ts delete mode 100644 contracts/test/utils/getActualAddress.ts delete mode 100644 contracts/tsconfig-release.json delete mode 100644 contracts/tsconfig.json delete mode 100644 contracts/wagmi.config.devnet.ts delete mode 100644 contracts/wagmi.config.hardhat.ts delete mode 100644 contracts/wagmi.config.mainnet.ts delete mode 100644 contracts/wagmi.config.testnet.ts delete mode 100644 cspell.json delete mode 100644 docs/kleros-logo-white.png delete mode 100644 docs/local-stack-2.png delete mode 100644 eslint-config/.eslintrc.js delete mode 100644 eslint-config/package.json delete mode 100644 kleros-app/README.md delete mode 100644 kleros-app/eslint.config.mjs delete mode 100644 kleros-app/package.json delete mode 100755 kleros-app/scripts/publish.sh delete mode 100644 kleros-app/src/App.tsx delete mode 100644 kleros-app/src/index.html delete mode 100644 kleros-app/src/lib/atlas/hooks/useSessionStorage.ts delete mode 100644 kleros-app/src/lib/atlas/index.ts delete mode 100644 kleros-app/src/lib/atlas/providers/AtlasProvider.tsx delete mode 100644 kleros-app/src/lib/atlas/providers/index.ts delete mode 100644 kleros-app/src/lib/atlas/utils/addUser.ts delete mode 100644 kleros-app/src/lib/atlas/utils/confirmEmail.ts delete mode 100644 kleros-app/src/lib/atlas/utils/createMessage.ts delete mode 100644 kleros-app/src/lib/atlas/utils/fetchRestrictions.ts delete mode 100644 kleros-app/src/lib/atlas/utils/fetchUser.ts delete mode 100644 kleros-app/src/lib/atlas/utils/getNonce.ts delete mode 100644 kleros-app/src/lib/atlas/utils/index.ts delete mode 100644 kleros-app/src/lib/atlas/utils/loginUser.ts delete mode 100644 kleros-app/src/lib/atlas/utils/updateEmail.ts delete mode 100644 kleros-app/src/lib/atlas/utils/uploadToIpfs.ts delete mode 100644 kleros-app/src/lib/index.ts delete mode 100644 kleros-app/src/utils/index.ts delete mode 100644 kleros-app/tsconfig.json delete mode 100644 kleros-app/vite.config.js delete mode 100644 kleros-sdk/.gitignore delete mode 100644 kleros-sdk/README.md delete mode 100644 kleros-sdk/config/v1-metaevidence/escrow.json delete mode 100644 kleros-sdk/config/v1-metaevidence/escrow2.json delete mode 100644 kleros-sdk/config/v1-metaevidence/escrow3.json delete mode 100644 kleros-sdk/config/v1-metaevidence/lgtcr1.json delete mode 100644 kleros-sdk/config/v1-metaevidence/lgtcr2.json delete mode 100644 kleros-sdk/config/v1-metaevidence/lgtcr3.json delete mode 100644 kleros-sdk/config/v1-metaevidence/lgtcr4.json delete mode 100644 kleros-sdk/config/v1-metaevidence/lgtcr5.json delete mode 100644 kleros-sdk/config/v1-metaevidence/lgtcr6.json delete mode 100644 kleros-sdk/config/v1-metaevidence/linguo-meta-evidence1.json delete mode 100644 kleros-sdk/config/v1-metaevidence/linguo-meta-evidence2.json delete mode 100644 kleros-sdk/config/v1-metaevidence/omen1.json delete mode 100644 kleros-sdk/config/v1-metaevidence/omen2.json delete mode 100644 kleros-sdk/config/v1-metaevidence/omen3.json delete mode 100644 kleros-sdk/config/v1-metaevidence/omen4.json delete mode 100644 kleros-sdk/config/v1-metaevidence/omen5.json delete mode 100644 kleros-sdk/config/v1-metaevidence/poh1.json delete mode 100644 kleros-sdk/config/v1-metaevidence/poh2.json delete mode 100644 kleros-sdk/config/v1-metaevidence/reality.json delete mode 100644 kleros-sdk/config/v1-metaevidence/realityWithAppeals-gnosis-moderate.json delete mode 100644 kleros-sdk/config/v1-metaevidence/realityWithAppeals-gnosis.json delete mode 100644 kleros-sdk/config/v1-metaevidence/realityWithAppeals.json delete mode 100644 kleros-sdk/config/v1-metaevidence/resolver.json delete mode 100644 kleros-sdk/config/v1-metaevidence/tokens-ethfinex1.json delete mode 100644 kleros-sdk/config/v1-metaevidence/tokens-ethfinex2.json delete mode 100644 kleros-sdk/config/v1-metaevidence/tokens1.json delete mode 100644 kleros-sdk/config/v1-metaevidence/tokens2.json delete mode 100644 kleros-sdk/config/v1-metaevidence/unslashed.json delete mode 100644 kleros-sdk/config/v2-disputetemplate/DisputeDetails.default.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/NewDisputeTemplate.schema.json delete mode 100644 kleros-sdk/config/v2-disputetemplate/README.md delete mode 100644 kleros-sdk/config/v2-disputetemplate/curate/NewDisputeTemplate.curate.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/curate/example/DisputeDetails.curate.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/curate/example/DisputeTemplateInputs.curate.txt delete mode 100644 kleros-sdk/config/v2-disputetemplate/curate/example/NewDispute.curate.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/escrow/DisputeRequest.ts delete mode 100644 kleros-sdk/config/v2-disputetemplate/escrow/example1/DataMappings.escrow.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/escrow/example1/DisputeDetails.escrow.jsonc.mustache delete mode 100644 kleros-sdk/config/v2-disputetemplate/escrow/example2/DisputeMappings.json.mustache delete mode 100644 kleros-sdk/config/v2-disputetemplate/escrow/example2/DisputeTemplate.json.mustache delete mode 100644 kleros-sdk/config/v2-disputetemplate/kip-template.md delete mode 100644 kleros-sdk/config/v2-disputetemplate/linguo/NewDisputeTemplate.linguo.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/linguo/example/DisputeDetails.linguo.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/linguo/example/DisputeTemplateInputs.linguo.txt delete mode 100644 kleros-sdk/config/v2-disputetemplate/linguo/example/NewDispute.linguo.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/moderate/DisputeDetails.moderate.json delete mode 100644 kleros-sdk/config/v2-disputetemplate/poh/NewDisputeTemplate.poh1.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/poh/NewDisputeTemplate.poh2.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/poh/example1-registration/DisputeDetails.poh1.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/poh/example1-registration/DisputeTemplateInputs.poh1.txt delete mode 100644 kleros-sdk/config/v2-disputetemplate/poh/example1-registration/NewDispute.poh1.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/poh/example2-removal/DisputeDetails.poh2.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/poh/example2-removal/DisputeTemplateInputs.poh2.txt delete mode 100644 kleros-sdk/config/v2-disputetemplate/poh/example2-removal/NewDispute.poh2.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/reality/DisputeDetails.reality.schema.json delete mode 100644 kleros-sdk/config/v2-disputetemplate/reality/NewDisputeTemplate.reality.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/reality/README.md delete mode 100644 kleros-sdk/config/v2-disputetemplate/reality/example1/DisputeDetails.reality1.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/reality/example1/DisputeTemplateInputs.reality1.txt delete mode 100644 kleros-sdk/config/v2-disputetemplate/reality/example1/NewDispute.reality1.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/reality/example2/DisputeDetails.reality2.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/reality/example2/DisputeTemplateInputs.reality2.txt delete mode 100644 kleros-sdk/config/v2-disputetemplate/reality/example2/NewDispute.reality2.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/reality/example3/DisputeMappings.json delete mode 100644 kleros-sdk/config/v2-disputetemplate/reality/example3/DisputeTemplate.json.mustache delete mode 100644 kleros-sdk/config/v2-disputetemplate/reality/kip-99.md delete mode 100644 kleros-sdk/config/v2-disputetemplate/simple/NewDisputeTemplate.simple.json delete mode 100644 kleros-sdk/config/v2-disputetemplate/simple/example/DisputeDetails.simple.jsonc delete mode 100644 kleros-sdk/config/v2-disputetemplate/simple/example/DisputeTemplateInputs.simple.txt delete mode 100644 kleros-sdk/config/v2-disputetemplate/simple/example/NewDispute.simple.jsonc delete mode 100644 kleros-sdk/package.json delete mode 100755 kleros-sdk/scripts/publish.sh delete mode 100644 kleros-sdk/src/consts.ts delete mode 100644 kleros-sdk/src/dataMappings/actions/callAction.ts delete mode 100644 kleros-sdk/src/dataMappings/actions/eventAction.ts delete mode 100644 kleros-sdk/src/dataMappings/actions/fetchIpfsJsonAction.ts delete mode 100644 kleros-sdk/src/dataMappings/actions/jsonAction.ts delete mode 100644 kleros-sdk/src/dataMappings/actions/subgraphAction.ts delete mode 100644 kleros-sdk/src/dataMappings/executeActions.ts delete mode 100644 kleros-sdk/src/dataMappings/index.ts delete mode 100644 kleros-sdk/src/dataMappings/retrieveRealityData.ts delete mode 100644 kleros-sdk/src/dataMappings/utils/actionTypeValidators.ts delete mode 100644 kleros-sdk/src/dataMappings/utils/actionTypes.ts delete mode 100644 kleros-sdk/src/dataMappings/utils/createResultObject.ts delete mode 100644 kleros-sdk/src/dataMappings/utils/disputeDetailsSchema.ts delete mode 100644 kleros-sdk/src/dataMappings/utils/disputeDetailsTypes.ts delete mode 100644 kleros-sdk/src/dataMappings/utils/index.ts delete mode 100644 kleros-sdk/src/dataMappings/utils/lambdas.ts delete mode 100644 kleros-sdk/src/dataMappings/utils/populateTemplate.ts delete mode 100644 kleros-sdk/src/dataMappings/utils/replacePlaceholdersWithValues.ts delete mode 100644 kleros-sdk/src/dataMappings/utils/retrieveVariables.ts delete mode 100644 kleros-sdk/src/errors/index.ts delete mode 100644 kleros-sdk/src/index.ts delete mode 100644 kleros-sdk/src/requests/fetchDisputeDetails.ts delete mode 100644 kleros-sdk/src/requests/fetchDisputeTemplateFromId.ts delete mode 100644 kleros-sdk/src/requests/gqlClient.ts delete mode 100644 kleros-sdk/src/sdk.ts delete mode 100644 kleros-sdk/src/types/index.ts delete mode 100644 kleros-sdk/src/utils/getDispute.ts delete mode 100644 kleros-sdk/src/utils/index.ts delete mode 100644 kleros-sdk/test/__snapshots__/disputeDetailsSchema.test.ts.snap delete mode 100644 kleros-sdk/test/__snapshots__/schema.test.ts.snap delete mode 100644 kleros-sdk/test/dataMappings.test.ts delete mode 100644 kleros-sdk/test/disputeDetailsSchema.test.ts delete mode 100644 kleros-sdk/test/getDispute.test.ts delete mode 100644 kleros-sdk/tsconfig.json delete mode 100644 kleros-sdk/vitest.config.ts delete mode 120000 netlify.toml delete mode 100644 package.json delete mode 100644 prettier-config/.eslintrc delete mode 100644 prettier-config/.prettierrc.js delete mode 100644 prettier-config/index.js delete mode 100644 prettier-config/package.json delete mode 100755 scripts/act-subgraph.yml delete mode 100755 scripts/cancel-all-netlify-builds.sh delete mode 100755 scripts/check-prerequisites.sh delete mode 100755 scripts/tmux-local-stack.sh delete mode 100644 services/bots/.gitignore delete mode 100644 services/bots/base/Dockerfile delete mode 100644 services/bots/base/bot-pm2.yml delete mode 100644 services/bots/base/bot.yml delete mode 100644 services/bots/devnet/.env delete mode 100644 services/bots/devnet/bots.env.devnet.example delete mode 100644 services/bots/devnet/compose.yml delete mode 100644 services/bots/devnet/pm2.config.disputor-bot.devnet.js delete mode 100644 services/bots/devnet/pm2.config.keeper-bot.devnet.js delete mode 100644 services/bots/devnet/pm2.config.relayer-bot-from-chiado.devnet.js delete mode 100644 services/bots/devnet/pm2.config.relayer-bot-from-goerli.devnet.js delete mode 100644 services/bots/mainnet-neo/.env delete mode 100644 services/bots/mainnet-neo/bots.env.mainnet-neo.example delete mode 100644 services/bots/mainnet-neo/compose.yml delete mode 100644 services/bots/mainnet-neo/pm2.config.keeper-bot.mainnet-neo.js delete mode 100644 services/bots/testnet/.env delete mode 100644 services/bots/testnet/bots.env.testnet.example delete mode 100644 services/bots/testnet/compose.yml delete mode 100644 services/bots/testnet/pm2.config.disputor-bot.testnet.js delete mode 100644 services/bots/testnet/pm2.config.keeper-bot.testnet.js delete mode 100644 services/bots/testnet/pm2.config.relayer-bot-from-chiado.testnet.js delete mode 100644 services/bots/testnet/pm2.config.relayer-bot-from-goerli.testnet.js delete mode 100644 services/graph-node/.gitignore delete mode 100644 services/graph-node/README.md delete mode 100755 services/graph-node/bin/create delete mode 100755 services/graph-node/bin/debug delete mode 100755 services/graph-node/bin/deploy delete mode 100755 services/graph-node/bin/reassign delete mode 100755 services/graph-node/bin/remove delete mode 100644 services/graph-node/docker-compose.yml delete mode 100644 sonar-project.properties delete mode 100644 subgraph/README.md delete mode 100644 subgraph/core-neo/abi-migrations/KlerosCoreNeo.json delete mode 100644 subgraph/core-neo/abi-migrations/SortitionModuleNeo.json delete mode 120000 subgraph/core-neo/schema.graphql delete mode 120000 subgraph/core-neo/src delete mode 100644 subgraph/core-neo/subgraph.template.yaml delete mode 100644 subgraph/core-neo/subgraph.yaml delete mode 120000 subgraph/core-neo/tests delete mode 120000 subgraph/core-university/schema.graphql delete mode 120000 subgraph/core-university/src/DisputeKitClassic.ts delete mode 120000 subgraph/core-university/src/EvidenceModule.ts delete mode 120000 subgraph/core-university/src/HomeGateway.ts delete mode 120000 subgraph/core-university/src/KlerosCore.ts delete mode 120000 subgraph/core-university/src/PolicyRegistry.ts delete mode 100644 subgraph/core-university/src/SortitionModule.ts delete mode 120000 subgraph/core-university/src/datapoint.ts delete mode 120000 subgraph/core-university/src/entities delete mode 120000 subgraph/core-university/src/utils.ts delete mode 100644 subgraph/core-university/subgraph.template.yaml delete mode 100644 subgraph/core-university/subgraph.yaml delete mode 120000 subgraph/core-university/tests delete mode 100644 subgraph/core/abi-migrations/KlerosCore.json delete mode 100644 subgraph/core/abi-migrations/SortitionModule.json delete mode 100644 subgraph/core/schema.graphql delete mode 100644 subgraph/core/src/DisputeKitClassic.ts delete mode 100644 subgraph/core/src/EvidenceModule.ts delete mode 100644 subgraph/core/src/HomeGateway.ts delete mode 100644 subgraph/core/src/KlerosCore.ts delete mode 100644 subgraph/core/src/PolicyRegistry.ts delete mode 100644 subgraph/core/src/SortitionModule.ts delete mode 100644 subgraph/core/src/datapoint.ts delete mode 100644 subgraph/core/src/entities/Arbitrable.ts delete mode 100644 subgraph/core/src/entities/ClassicContribution.ts delete mode 100644 subgraph/core/src/entities/ClassicDispute.ts delete mode 100644 subgraph/core/src/entities/ClassicEvidenceGroup.ts delete mode 100644 subgraph/core/src/entities/ClassicRound.ts delete mode 100644 subgraph/core/src/entities/ClassicVote.ts delete mode 100644 subgraph/core/src/entities/Court.ts delete mode 100644 subgraph/core/src/entities/Dispute.ts delete mode 100644 subgraph/core/src/entities/DisputeKit.ts delete mode 100644 subgraph/core/src/entities/Draw.ts delete mode 100644 subgraph/core/src/entities/FeeToken.ts delete mode 100644 subgraph/core/src/entities/JurorTokensPerCourt.ts delete mode 100644 subgraph/core/src/entities/Penalty.ts delete mode 100644 subgraph/core/src/entities/PeriodIndexCounter.ts delete mode 100644 subgraph/core/src/entities/Round.ts delete mode 100644 subgraph/core/src/entities/TokenAndEthShift.ts delete mode 100644 subgraph/core/src/entities/User.ts delete mode 100644 subgraph/core/src/utils.ts delete mode 100644 subgraph/core/subgraph.template.yaml delete mode 100644 subgraph/core/subgraph.yaml delete mode 100644 subgraph/core/tests/sortition-module-utils.ts delete mode 100644 subgraph/core/tests/sortition-module.test.ts delete mode 100644 subgraph/core/tests/user.test.ts delete mode 100644 subgraph/dispute-template-registry/schema.graphql delete mode 100644 subgraph/dispute-template-registry/src/DisputeTemplateRegistry.ts delete mode 100644 subgraph/dispute-template-registry/subgraph.template.yaml delete mode 100644 subgraph/dispute-template-registry/subgraph.yaml delete mode 100644 subgraph/package.json delete mode 100755 subgraph/scripts/all.sh delete mode 100755 subgraph/scripts/update.sh delete mode 100644 subgraph/temp-older-events-addition.txt delete mode 100644 subgraph/tsconfig.json delete mode 100644 subgraph/utils/index.ts delete mode 100644 tea.yaml delete mode 100644 tsconfig/.eslintrc delete mode 100644 tsconfig/README.md delete mode 100644 tsconfig/base18.json delete mode 100644 tsconfig/base20.json delete mode 100644 tsconfig/package.json delete mode 100644 tsconfig/react-library.json delete mode 100644 web-devtools/.editorconfig delete mode 120000 web-devtools/.env.devnet-neo.public delete mode 120000 web-devtools/.env.devnet-university.public delete mode 120000 web-devtools/.env.devnet.public delete mode 100644 web-devtools/.env.local.example delete mode 100644 web-devtools/.gitignore delete mode 100644 web-devtools/LICENSE delete mode 100644 web-devtools/README.md delete mode 100644 web-devtools/codegen.ts delete mode 100644 web-devtools/eslint.config.mjs delete mode 100644 web-devtools/global.d.ts delete mode 100644 web-devtools/netlify.toml delete mode 100644 web-devtools/next.config.mjs delete mode 100644 web-devtools/package.json delete mode 100755 web-devtools/scripts/runEnv.sh delete mode 100644 web-devtools/src/app/(main)/(homepage)/Header.tsx delete mode 100644 web-devtools/src/app/(main)/(homepage)/Tools.tsx delete mode 100644 web-devtools/src/app/(main)/(homepage)/page.tsx delete mode 100644 web-devtools/src/app/(main)/dispute-template/CustomContextInputs.tsx delete mode 100644 web-devtools/src/app/(main)/dispute-template/FetchDisputeRequestInput.tsx delete mode 100644 web-devtools/src/app/(main)/dispute-template/FetchFromIdInput.tsx delete mode 100644 web-devtools/src/app/(main)/dispute-template/page.tsx delete mode 100644 web-devtools/src/app/(main)/layout.tsx delete mode 100644 web-devtools/src/app/(main)/ruler/ChangeDeveloper.tsx delete mode 100644 web-devtools/src/app/(main)/ruler/Header.tsx delete mode 100644 web-devtools/src/app/(main)/ruler/ManualRuling.tsx delete mode 100644 web-devtools/src/app/(main)/ruler/RulingModes.tsx delete mode 100644 web-devtools/src/app/(main)/ruler/SelectArbitrable.tsx delete mode 100644 web-devtools/src/app/(main)/ruler/page.tsx delete mode 100644 web-devtools/src/app/favicon.ico delete mode 100644 web-devtools/src/app/layout.tsx delete mode 100644 web-devtools/src/assets/svgs/footer/secured-by-kleros.svg delete mode 100644 web-devtools/src/assets/svgs/header/devtools-logo.svg delete mode 100644 web-devtools/src/assets/svgs/header/hamburger.svg delete mode 100644 web-devtools/src/assets/svgs/hero/hero-darkmode-desktop.svg delete mode 100644 web-devtools/src/assets/svgs/hero/hero-darkmode-mobile.svg delete mode 100644 web-devtools/src/assets/svgs/icons/arrow.svg delete mode 100644 web-devtools/src/assets/svgs/icons/help.svg delete mode 100644 web-devtools/src/assets/svgs/icons/policy.svg delete mode 100644 web-devtools/src/assets/svgs/socialmedia/discord.svg delete mode 100644 web-devtools/src/assets/svgs/socialmedia/etherscan.svg delete mode 100644 web-devtools/src/assets/svgs/socialmedia/ghost-blog.svg delete mode 100644 web-devtools/src/assets/svgs/socialmedia/github.svg delete mode 100644 web-devtools/src/assets/svgs/socialmedia/linkedin.svg delete mode 100644 web-devtools/src/assets/svgs/socialmedia/reddit.svg delete mode 100644 web-devtools/src/assets/svgs/socialmedia/slack.svg delete mode 100644 web-devtools/src/assets/svgs/socialmedia/snapshot.svg delete mode 100644 web-devtools/src/assets/svgs/socialmedia/telegram.svg delete mode 100644 web-devtools/src/assets/svgs/socialmedia/x.svg delete mode 100644 web-devtools/src/assets/svgs/socialmedia/youtube.svg delete mode 100644 web-devtools/src/components/ConnectWallet/index.tsx delete mode 100644 web-devtools/src/components/EnsureChain.tsx delete mode 100644 web-devtools/src/components/HeroImage.tsx delete mode 100644 web-devtools/src/components/JSONEditor.tsx delete mode 100644 web-devtools/src/components/LabeledInput.tsx delete mode 100644 web-devtools/src/components/LightButton.tsx delete mode 100644 web-devtools/src/components/ReactMarkdown.tsx delete mode 100644 web-devtools/src/components/WithHelpTooltip.tsx delete mode 100644 web-devtools/src/consts/arbitratorTypes.ts delete mode 100644 web-devtools/src/consts/chains.ts delete mode 100644 web-devtools/src/consts/index.ts delete mode 100644 web-devtools/src/consts/socialmedia.tsx delete mode 100644 web-devtools/src/context/GraphqlBatcher.tsx delete mode 100644 web-devtools/src/context/RulerContext.tsx delete mode 100644 web-devtools/src/context/StyledComponentsProvider.tsx delete mode 100644 web-devtools/src/context/StyledComponentsRegistry.tsx delete mode 100644 web-devtools/src/context/Web3Provider.tsx delete mode 100644 web-devtools/src/hooks/queries/useDisputeTemplateFromId.ts delete mode 100644 web-devtools/src/hooks/useIsDesktop.tsx delete mode 100644 web-devtools/src/hooks/useLocalStorage.ts delete mode 100644 web-devtools/src/layout/Footer/index.tsx delete mode 100644 web-devtools/src/layout/Header/DesktopHeader.tsx delete mode 100644 web-devtools/src/layout/Header/MobileHeader.tsx delete mode 100644 web-devtools/src/layout/Header/index.tsx delete mode 100644 web-devtools/src/layout/Header/navbar/Explore.tsx delete mode 100644 web-devtools/src/layout/Header/navbar/index.tsx delete mode 100644 web-devtools/src/styles/Theme.tsx delete mode 100644 web-devtools/src/styles/global-style.ts delete mode 100644 web-devtools/src/styles/landscapeStyle.ts delete mode 100644 web-devtools/src/styles/responsiveSize.ts delete mode 100644 web-devtools/src/utils/debounceErrorToast.ts delete mode 100644 web-devtools/src/utils/dummyData.ts delete mode 100644 web-devtools/src/utils/getDisputeRequestParamsFromTxn.ts delete mode 100644 web-devtools/src/utils/getGraphqlUrl.ts delete mode 100644 web-devtools/src/utils/getIpfsUrl.ts delete mode 100644 web-devtools/src/utils/isEmpty.ts delete mode 100644 web-devtools/src/utils/isUndefined.ts delete mode 100644 web-devtools/src/utils/parseWagmiError.ts delete mode 100644 web-devtools/src/utils/shortenAddress.ts delete mode 100644 web-devtools/src/utils/validateAddressOrEns.ts delete mode 100644 web-devtools/src/utils/wrapWithToast.ts delete mode 100644 web-devtools/svgr.d.ts delete mode 100644 web-devtools/tsconfig.json delete mode 100644 web-devtools/wagmi.config.ts delete mode 100644 web/.editorconfig delete mode 100644 web/.env.devnet-neo.public delete mode 100644 web/.env.devnet-university.public delete mode 100644 web/.env.devnet.public delete mode 100644 web/.env.local.public delete mode 100644 web/.env.mainnet-neo.public delete mode 100644 web/.env.testnet.public delete mode 100644 web/.gitignore delete mode 100644 web/.yarnrc.yml delete mode 100644 web/LICENSE delete mode 100644 web/README.md delete mode 100644 web/codegen.ts delete mode 100644 web/eslint.config.mjs delete mode 100644 web/global.d.ts delete mode 100644 web/netlify.toml delete mode 100644 web/package.json delete mode 100755 web/scripts/generateBuildInfo.sh delete mode 100644 web/scripts/gitInfo.js delete mode 100755 web/scripts/runEnv.sh delete mode 100755 web/scripts/sentry-release.sh delete mode 100644 web/src/app.tsx delete mode 100644 web/src/assets/pngs/dashboard/aristoteles.png delete mode 100644 web/src/assets/pngs/dashboard/diogenes.png delete mode 100644 web/src/assets/pngs/dashboard/plato.png delete mode 100644 web/src/assets/pngs/dashboard/pythagoras.png delete mode 100644 web/src/assets/pngs/dashboard/socrates.png delete mode 100644 web/src/assets/svgs/.gitkeep delete mode 100644 web/src/assets/svgs/footer/secured-by-kleros.svg delete mode 100644 web/src/assets/svgs/header/hamburger.svg delete mode 100644 web/src/assets/svgs/header/kleros-court-university.svg delete mode 100644 web/src/assets/svgs/header/kleros-court.svg delete mode 100644 web/src/assets/svgs/hero/hero-darkmode-desktop.svg delete mode 100644 web/src/assets/svgs/hero/hero-darkmode-mobile.svg delete mode 100644 web/src/assets/svgs/hero/hero-lightmode-desktop.svg delete mode 100644 web/src/assets/svgs/hero/hero-lightmode-mobile.svg delete mode 100644 web/src/assets/svgs/icons/appeal.png delete mode 100644 web/src/assets/svgs/icons/appeal.svg delete mode 100644 web/src/assets/svgs/icons/arrow-down.svg delete mode 100644 web/src/assets/svgs/icons/arrow-left.svg delete mode 100644 web/src/assets/svgs/icons/arrow-right.svg delete mode 100644 web/src/assets/svgs/icons/arrow.svg delete mode 100644 web/src/assets/svgs/icons/attachment.svg delete mode 100644 web/src/assets/svgs/icons/balance.svg delete mode 100644 web/src/assets/svgs/icons/book-open.svg delete mode 100644 web/src/assets/svgs/icons/book.svg delete mode 100644 web/src/assets/svgs/icons/bookmark.svg delete mode 100644 web/src/assets/svgs/icons/bug.svg delete mode 100644 web/src/assets/svgs/icons/bullhorn.svg delete mode 100644 web/src/assets/svgs/icons/calendar.svg delete mode 100644 web/src/assets/svgs/icons/caseFromScratch.svg delete mode 100644 web/src/assets/svgs/icons/chart.svg delete mode 100644 web/src/assets/svgs/icons/chat.svg delete mode 100644 web/src/assets/svgs/icons/check-circle-outline.svg delete mode 100644 web/src/assets/svgs/icons/clock.svg delete mode 100644 web/src/assets/svgs/icons/close-circle.svg delete mode 100644 web/src/assets/svgs/icons/close.svg delete mode 100644 web/src/assets/svgs/icons/code.svg delete mode 100644 web/src/assets/svgs/icons/curate-image.png delete mode 100644 web/src/assets/svgs/icons/curate.svg delete mode 100644 web/src/assets/svgs/icons/dice.svg delete mode 100644 web/src/assets/svgs/icons/dispute-resolver.svg delete mode 100644 web/src/assets/svgs/icons/dispute.svg delete mode 100644 web/src/assets/svgs/icons/doc.svg delete mode 100644 web/src/assets/svgs/icons/dollar.svg delete mode 100644 web/src/assets/svgs/icons/dotted-menu.svg delete mode 100644 web/src/assets/svgs/icons/down-arrow.svg delete mode 100644 web/src/assets/svgs/icons/duplicateCase.svg delete mode 100644 web/src/assets/svgs/icons/ellipse.svg delete mode 100644 web/src/assets/svgs/icons/escrow.svg delete mode 100644 web/src/assets/svgs/icons/eth.svg delete mode 100644 web/src/assets/svgs/icons/ethereum-vote.svg delete mode 100644 web/src/assets/svgs/icons/ethereum.svg delete mode 100644 web/src/assets/svgs/icons/eye.svg delete mode 100644 web/src/assets/svgs/icons/faucet.svg delete mode 100644 web/src/assets/svgs/icons/french-flag.svg delete mode 100644 web/src/assets/svgs/icons/gas.svg delete mode 100644 web/src/assets/svgs/icons/gavel-executed.svg delete mode 100644 web/src/assets/svgs/icons/gavel.svg delete mode 100644 web/src/assets/svgs/icons/governor.svg delete mode 100644 web/src/assets/svgs/icons/grid.svg delete mode 100644 web/src/assets/svgs/icons/hourglass.svg delete mode 100644 web/src/assets/svgs/icons/info-circle.svg delete mode 100644 web/src/assets/svgs/icons/kleros.svg delete mode 100644 web/src/assets/svgs/icons/law-balance-hourglass.svg delete mode 100644 web/src/assets/svgs/icons/law-balance-with-pnk.svg delete mode 100644 web/src/assets/svgs/icons/law-balance.svg delete mode 100644 web/src/assets/svgs/icons/linguo.svg delete mode 100644 web/src/assets/svgs/icons/list.svg delete mode 100644 web/src/assets/svgs/icons/locker.svg delete mode 100644 web/src/assets/svgs/icons/long-arrow-up.svg delete mode 100644 web/src/assets/svgs/icons/min-stake.svg delete mode 100644 web/src/assets/svgs/icons/minus.svg delete mode 100644 web/src/assets/svgs/icons/new-tab.svg delete mode 100644 web/src/assets/svgs/icons/paperclip.svg delete mode 100644 web/src/assets/svgs/icons/phone.svg delete mode 100644 web/src/assets/svgs/icons/pile-coins.svg delete mode 100644 web/src/assets/svgs/icons/plus.svg delete mode 100644 web/src/assets/svgs/icons/pnk-eth.svg delete mode 100644 web/src/assets/svgs/icons/pnk-usd.svg delete mode 100644 web/src/assets/svgs/icons/pnk.svg delete mode 100644 web/src/assets/svgs/icons/poh-image.png delete mode 100644 web/src/assets/svgs/icons/poh.svg delete mode 100644 web/src/assets/svgs/icons/policy.svg delete mode 100644 web/src/assets/svgs/icons/ranking.svg delete mode 100644 web/src/assets/svgs/icons/redistributed-pnk.svg delete mode 100644 web/src/assets/svgs/icons/rewards-per-pnk.svg delete mode 100644 web/src/assets/svgs/icons/round.svg delete mode 100644 web/src/assets/svgs/icons/snapshot-color.svg delete mode 100644 web/src/assets/svgs/icons/spinner.svg delete mode 100644 web/src/assets/svgs/icons/star.svg delete mode 100644 web/src/assets/svgs/icons/tokens.svg delete mode 100644 web/src/assets/svgs/icons/user.svg delete mode 100644 web/src/assets/svgs/icons/vea.svg delete mode 100644 web/src/assets/svgs/icons/vote-stake.svg delete mode 100644 web/src/assets/svgs/icons/voted.svg delete mode 100644 web/src/assets/svgs/icons/votes-per-pnk.svg delete mode 100644 web/src/assets/svgs/icons/warning-outline.svg delete mode 100644 web/src/assets/svgs/label-icons/appeal.svg delete mode 100644 web/src/assets/svgs/label-icons/evidence.svg delete mode 100644 web/src/assets/svgs/label-icons/forgot-vote.svg delete mode 100644 web/src/assets/svgs/label-icons/funded.svg delete mode 100644 web/src/assets/svgs/label-icons/minus-circle.svg delete mode 100644 web/src/assets/svgs/label-icons/rewards-lost.svg delete mode 100644 web/src/assets/svgs/label-icons/rewards-won.svg delete mode 100644 web/src/assets/svgs/label-icons/vote.svg delete mode 100644 web/src/assets/svgs/label-icons/voted.svg delete mode 100644 web/src/assets/svgs/menu-icons/dark-mode.svg delete mode 100644 web/src/assets/svgs/menu-icons/help.svg delete mode 100644 web/src/assets/svgs/menu-icons/kleros-solutions.svg delete mode 100644 web/src/assets/svgs/menu-icons/light-mode.svg delete mode 100644 web/src/assets/svgs/menu-icons/notifications.svg delete mode 100644 web/src/assets/svgs/menu-icons/settings.svg delete mode 100644 web/src/assets/svgs/mini-guides/appeal/crowdfund-appeal.svg delete mode 100644 web/src/assets/svgs/mini-guides/appeal/payoff-simulator.svg delete mode 100644 web/src/assets/svgs/mini-guides/appeal/stage-one.svg delete mode 100644 web/src/assets/svgs/mini-guides/appeal/stage-two.svg delete mode 100644 web/src/assets/svgs/mini-guides/appeal/who-wins-rewards.svg delete mode 100644 web/src/assets/svgs/mini-guides/binary-voting/private-voting.svg delete mode 100644 web/src/assets/svgs/mini-guides/binary-voting/voting-module.svg delete mode 100644 web/src/assets/svgs/mini-guides/dispute-resolver/parameters.svg delete mode 100644 web/src/assets/svgs/mini-guides/dispute-resolver/parties.svg delete mode 100644 web/src/assets/svgs/mini-guides/dispute-resolver/policy.svg delete mode 100644 web/src/assets/svgs/mini-guides/dispute-resolver/start-a-case.svg delete mode 100644 web/src/assets/svgs/mini-guides/dispute-resolver/voting-options.svg delete mode 100644 web/src/assets/svgs/mini-guides/dispute-resolver/well-done.svg delete mode 100644 web/src/assets/svgs/mini-guides/onboarding/how-it-works.svg delete mode 100644 web/src/assets/svgs/mini-guides/onboarding/what-do-i-need.svg delete mode 100644 web/src/assets/svgs/mini-guides/ranked-voting/voting-module.svg delete mode 100644 web/src/assets/svgs/mini-guides/staking/court-header.svg delete mode 100644 web/src/assets/svgs/mini-guides/staking/juror-rewards.svg delete mode 100644 web/src/assets/svgs/mini-guides/staking/notifications.svg delete mode 100644 web/src/assets/svgs/mini-guides/staking/staking-section.svg delete mode 100644 web/src/assets/svgs/socialmedia/discord.svg delete mode 100644 web/src/assets/svgs/socialmedia/etherscan.svg delete mode 100644 web/src/assets/svgs/socialmedia/ghost-blog.svg delete mode 100644 web/src/assets/svgs/socialmedia/github.svg delete mode 100644 web/src/assets/svgs/socialmedia/linkedin.svg delete mode 100644 web/src/assets/svgs/socialmedia/reddit.svg delete mode 100644 web/src/assets/svgs/socialmedia/slack.svg delete mode 100644 web/src/assets/svgs/socialmedia/snapshot.svg delete mode 100644 web/src/assets/svgs/socialmedia/telegram.svg delete mode 100644 web/src/assets/svgs/socialmedia/x.svg delete mode 100644 web/src/assets/svgs/socialmedia/youtube.svg delete mode 100644 web/src/assets/svgs/styled/eth.svg delete mode 100644 web/src/assets/svgs/styled/pnk.svg delete mode 100644 web/src/assets/svgs/styled/three-pnks.svg delete mode 100644 web/src/assets/svgs/tokens/arbitrum.svg delete mode 100644 web/src/assets/svgs/tokens/dai.svg delete mode 100644 web/src/assets/svgs/tokens/eth.svg delete mode 100644 web/src/assets/svgs/tokens/gnosis.svg delete mode 100644 web/src/assets/svgs/tokens/optimism.svg delete mode 100644 web/src/assets/svgs/tokens/pnk.svg delete mode 100644 web/src/assets/svgs/tokens/polygon.svg delete mode 100644 web/src/assets/svgs/tokens/usdc.svg delete mode 100644 web/src/components/.gitkeep delete mode 100644 web/src/components/BlueIconTextButtonContainer.tsx delete mode 100644 web/src/components/CaseStarButton.tsx delete mode 100644 web/src/components/CasesDisplay/CasesGrid.tsx delete mode 100644 web/src/components/CasesDisplay/Filters.tsx delete mode 100644 web/src/components/CasesDisplay/Search.tsx delete mode 100644 web/src/components/CasesDisplay/Stats.tsx delete mode 100644 web/src/components/CasesDisplay/StatsAndFilters.tsx delete mode 100644 web/src/components/CasesDisplay/index.tsx delete mode 100644 web/src/components/ClaimPnkButton.tsx delete mode 100644 web/src/components/ConnectWallet/AccountDisplay.tsx delete mode 100644 web/src/components/ConnectWallet/index.tsx delete mode 100644 web/src/components/DisputePreview/Alias.tsx delete mode 100644 web/src/components/DisputePreview/DisputeContext.tsx delete mode 100644 web/src/components/DisputePreview/Policies.tsx delete mode 100644 web/src/components/DisputeView/CardLabels/Label.tsx delete mode 100644 web/src/components/DisputeView/CardLabels/RewardsAndFundLabel.tsx delete mode 100644 web/src/components/DisputeView/CardLabels/index.tsx delete mode 100644 web/src/components/DisputeView/DisputeCardView.tsx delete mode 100644 web/src/components/DisputeView/DisputeInfo/DisputeInfoCard.tsx delete mode 100644 web/src/components/DisputeView/DisputeInfo/DisputeInfoList.tsx delete mode 100644 web/src/components/DisputeView/DisputeInfo/index.tsx delete mode 100644 web/src/components/DisputeView/DisputeListView.tsx delete mode 100644 web/src/components/DisputeView/PeriodBanner.tsx delete mode 100644 web/src/components/DisputeView/index.tsx delete mode 100644 web/src/components/Divider.tsx delete mode 100644 web/src/components/DottedMenuButton.tsx delete mode 100644 web/src/components/EnsureAuth.tsx delete mode 100644 web/src/components/EnsureChain.tsx delete mode 100644 web/src/components/ErrorButtonMessage.tsx delete mode 100644 web/src/components/ErrorFallback.tsx delete mode 100644 web/src/components/EvidenceCard.tsx delete mode 100644 web/src/components/ExternalLink.tsx delete mode 100644 web/src/components/ExtraStatsDisplay.tsx delete mode 100644 web/src/components/FavoriteCases.tsx delete mode 100644 web/src/components/Field.tsx delete mode 100644 web/src/components/FileViewer/Viewers/MarkdownViewer.tsx delete mode 100644 web/src/components/FileViewer/index.tsx delete mode 100644 web/src/components/GradientTokenIcons.tsx delete mode 100644 web/src/components/HeroImage.tsx delete mode 100644 web/src/components/HowItWorks.tsx delete mode 100644 web/src/components/InfoCard.tsx delete mode 100644 web/src/components/InternalLink.tsx delete mode 100644 web/src/components/JurorsLeaderboardButton.tsx delete mode 100644 web/src/components/LabeledInput.tsx delete mode 100644 web/src/components/LatestCases.tsx delete mode 100644 web/src/components/LightButton.tsx delete mode 100644 web/src/components/Loader.tsx delete mode 100644 web/src/components/NumberDisplay.tsx delete mode 100644 web/src/components/NumberInputField.tsx delete mode 100644 web/src/components/Overlay.tsx delete mode 100644 web/src/components/OverlayPortal.tsx delete mode 100644 web/src/components/Phase.tsx delete mode 100644 web/src/components/PlusMinusField.tsx delete mode 100644 web/src/components/Popup/Description/Appeal.tsx delete mode 100644 web/src/components/Popup/Description/DisputeCreated.tsx delete mode 100644 web/src/components/Popup/Description/StakeWithdraw.tsx delete mode 100644 web/src/components/Popup/Description/SwapSuccess.tsx delete mode 100644 web/src/components/Popup/Description/VoteWithCommit.tsx delete mode 100644 web/src/components/Popup/Description/VoteWithoutCommit.tsx delete mode 100644 web/src/components/Popup/ExtraInfo/DisputeCreatedExtraInfo.tsx delete mode 100644 web/src/components/Popup/ExtraInfo/StakeWithdrawExtraInfo.tsx delete mode 100644 web/src/components/Popup/ExtraInfo/VoteWithCommitExtraInfo.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Appeal/CrowdfundAppeal.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Appeal/PayoffSimulator.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Appeal/StageOne.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Appeal/StageTwo.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Appeal/WhoWinsRewards.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Appeal/index.tsx delete mode 100644 web/src/components/Popup/MiniGuides/BinaryVoting/PrivateVoting.tsx delete mode 100644 web/src/components/Popup/MiniGuides/BinaryVoting/VotingModule.tsx delete mode 100644 web/src/components/Popup/MiniGuides/BinaryVoting/index.tsx delete mode 100644 web/src/components/Popup/MiniGuides/DisputeResolver/Parameters.tsx delete mode 100644 web/src/components/Popup/MiniGuides/DisputeResolver/Parties.tsx delete mode 100644 web/src/components/Popup/MiniGuides/DisputeResolver/Policy.tsx delete mode 100644 web/src/components/Popup/MiniGuides/DisputeResolver/StartACase.tsx delete mode 100644 web/src/components/Popup/MiniGuides/DisputeResolver/VotingOptions.tsx delete mode 100644 web/src/components/Popup/MiniGuides/DisputeResolver/WellDone.tsx delete mode 100644 web/src/components/Popup/MiniGuides/DisputeResolver/index.tsx delete mode 100644 web/src/components/Popup/MiniGuides/JurorLevels.tsx delete mode 100644 web/src/components/Popup/MiniGuides/MainStructureTemplate.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Onboarding/HowItWorks.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Onboarding/PnkLogoAndTitle.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Onboarding/WhatDoINeed.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Onboarding/index.tsx delete mode 100644 web/src/components/Popup/MiniGuides/PageContentsTemplate.tsx delete mode 100644 web/src/components/Popup/MiniGuides/RankedVoting/VotingModule.tsx delete mode 100644 web/src/components/Popup/MiniGuides/RankedVoting/index.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Staking/CourtHeader.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Staking/JurorRewards.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Staking/Notifications.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Staking/StakingSection.tsx delete mode 100644 web/src/components/Popup/MiniGuides/Staking/index.tsx delete mode 100644 web/src/components/Popup/index.tsx delete mode 100644 web/src/components/ReactMarkdown.tsx delete mode 100644 web/src/components/ScrollTop.tsx delete mode 100644 web/src/components/SeeAllCasesButton.tsx delete mode 100644 web/src/components/SeeAllJurorsButton.tsx delete mode 100644 web/src/components/Spinner.tsx delete mode 100644 web/src/components/StatDisplay.tsx delete mode 100644 web/src/components/StyledArrowLink.tsx delete mode 100644 web/src/components/StyledIcons/ClosedCircleIcon.tsx delete mode 100644 web/src/components/StyledSkeleton.tsx delete mode 100644 web/src/components/Tag.tsx delete mode 100644 web/src/components/TxnHash.tsx delete mode 100644 web/src/components/Verdict/Answer.tsx delete mode 100644 web/src/components/Verdict/DisputeTimeline.tsx delete mode 100644 web/src/components/Verdict/FinalDecision.tsx delete mode 100644 web/src/components/Verdict/RulingAndRewardsIndicators.tsx delete mode 100644 web/src/components/Verdict/index.tsx delete mode 100644 web/src/components/WithHelpTooltip.tsx delete mode 100644 web/src/consts/arbitratorTypes.ts delete mode 100644 web/src/consts/averageBlockTimeInSeconds.ts delete mode 100644 web/src/consts/chains.ts delete mode 100644 web/src/consts/coingecko.ts delete mode 100644 web/src/consts/community-elements.ts delete mode 100644 web/src/consts/eip712-messages.ts delete mode 100644 web/src/consts/index.ts delete mode 100644 web/src/consts/periods.ts delete mode 100644 web/src/consts/processEnvConsts.ts delete mode 100644 web/src/consts/socialmedia.ts delete mode 100644 web/src/context/AtlasProvider.tsx delete mode 100644 web/src/context/GraphqlBatcher.tsx delete mode 100644 web/src/context/IsListProvider.tsx delete mode 100644 web/src/context/NewDisputeContext.tsx delete mode 100644 web/src/context/OverlayScrollContext.tsx delete mode 100644 web/src/context/QueryClientProvider.tsx delete mode 100644 web/src/context/StyledComponentsProvider.tsx delete mode 100644 web/src/context/Web3Provider.tsx delete mode 100644 web/src/favicon.ico delete mode 100644 web/src/hooks/.gitkeep delete mode 100644 web/src/hooks/queries/useAllCasesQuery.ts delete mode 100644 web/src/hooks/queries/useAppealCost.ts delete mode 100644 web/src/hooks/queries/useCasesQuery.ts delete mode 100644 web/src/hooks/queries/useClassicAppealQuery.ts delete mode 100644 web/src/hooks/queries/useCounter.ts delete mode 100644 web/src/hooks/queries/useCourtDetails.ts delete mode 100644 web/src/hooks/queries/useCourtPolicy.ts delete mode 100644 web/src/hooks/queries/useCourtPolicyURI.ts delete mode 100644 web/src/hooks/queries/useCourtTree.ts delete mode 100644 web/src/hooks/queries/useDisputeDetailsQuery.ts delete mode 100644 web/src/hooks/queries/useDisputeKitClassicMultipliers.ts delete mode 100644 web/src/hooks/queries/useDisputeMaintenanceQuery.ts delete mode 100644 web/src/hooks/queries/useDisputeTemplateFromId.ts delete mode 100644 web/src/hooks/queries/useDrawQuery.ts delete mode 100644 web/src/hooks/queries/useEvidences.ts delete mode 100644 web/src/hooks/queries/useHomePageBlockQuery.ts delete mode 100644 web/src/hooks/queries/useHomePageExtraStats.ts delete mode 100644 web/src/hooks/queries/useHomePageQuery.ts delete mode 100644 web/src/hooks/queries/useJurorStakeDetailsQuery.ts delete mode 100644 web/src/hooks/queries/useJurorsByCoherenceScore.ts delete mode 100644 web/src/hooks/queries/useLabelInfoQuery.ts delete mode 100644 web/src/hooks/queries/usePolicyRegistryEvent.ts delete mode 100644 web/src/hooks/queries/usePopulatedDisputeData.ts delete mode 100644 web/src/hooks/queries/useRoundDetailsQuery.ts delete mode 100644 web/src/hooks/queries/useSupportedDisputeKits.ts delete mode 100644 web/src/hooks/queries/useTopStakedJurorsByCourt.ts delete mode 100644 web/src/hooks/queries/useTotalLeaderboardJurors.ts delete mode 100644 web/src/hooks/queries/useUser.ts delete mode 100644 web/src/hooks/queries/useVotingHistory.ts delete mode 100644 web/src/hooks/useClassicAppealContext.tsx delete mode 100644 web/src/hooks/useCoinPrice.tsx delete mode 100644 web/src/hooks/useCountdown.ts delete mode 100644 web/src/hooks/useDisputeKitAddresses.ts delete mode 100644 web/src/hooks/useGenesisBlock.ts delete mode 100644 web/src/hooks/useHomePageContext.tsx delete mode 100644 web/src/hooks/useIPFSQuery.ts delete mode 100644 web/src/hooks/useIsDesktop.tsx delete mode 100644 web/src/hooks/useLocalStorage.ts delete mode 100644 web/src/hooks/useLockOverlayScroll.ts delete mode 100644 web/src/hooks/useNavigateAndScrollTop.ts delete mode 100644 web/src/hooks/usePNKData.tsx delete mode 100644 web/src/hooks/useParsedAmount.ts delete mode 100644 web/src/hooks/useScrollTop.ts delete mode 100644 web/src/hooks/useSessionStorage.ts delete mode 100644 web/src/hooks/useSigningAccount.tsx delete mode 100644 web/src/hooks/useSortitionModule.ts delete mode 100644 web/src/hooks/useSpamEvidence.ts delete mode 100644 web/src/hooks/useStarredCases.tsx delete mode 100644 web/src/hooks/useToggleThemeContext.tsx delete mode 100644 web/src/hooks/useTokenAddressValidation.ts delete mode 100644 web/src/hooks/useTransactionBatcher.tsx delete mode 100644 web/src/hooks/useVotingContext.tsx delete mode 100644 web/src/index.html delete mode 100644 web/src/index.tsx delete mode 100644 web/src/layout/Footer/index.tsx delete mode 100644 web/src/layout/Header/DesktopHeader.tsx delete mode 100644 web/src/layout/Header/Logo.tsx delete mode 100644 web/src/layout/Header/MobileHeader.tsx delete mode 100644 web/src/layout/Header/index.tsx delete mode 100644 web/src/layout/Header/navbar/DappList.tsx delete mode 100644 web/src/layout/Header/navbar/Debug.tsx delete mode 100644 web/src/layout/Header/navbar/Explore.tsx delete mode 100644 web/src/layout/Header/navbar/Menu/Help.tsx delete mode 100644 web/src/layout/Header/navbar/Menu/Settings/General/WalletAndProfile.tsx delete mode 100644 web/src/layout/Header/navbar/Menu/Settings/General/index.tsx delete mode 100644 web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/EmailVerificationInfo.tsx delete mode 100644 web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/FormContact.tsx delete mode 100644 web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/index.tsx delete mode 100644 web/src/layout/Header/navbar/Menu/Settings/Notifications/index.tsx delete mode 100644 web/src/layout/Header/navbar/Menu/Settings/index.tsx delete mode 100644 web/src/layout/Header/navbar/Menu/index.tsx delete mode 100644 web/src/layout/Header/navbar/Product.tsx delete mode 100644 web/src/layout/Header/navbar/index.tsx delete mode 100644 web/src/layout/index.tsx delete mode 100644 web/src/pages/AttachmentDisplay/Header.tsx delete mode 100644 web/src/pages/AttachmentDisplay/index.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Appeal/AppealHistory.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Appeal/Classic/Fund.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/StageOne.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/StageTwo.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/index.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Appeal/Classic/StageExplainer.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Appeal/Classic/index.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Appeal/Shutter/Fund.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Appeal/Shutter/index.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Appeal/index.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Evidence/EvidenceSearch.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Evidence/SubmitEvidenceModal.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Evidence/index.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/MaintenanceButtons/DistributeRewards.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/MaintenanceButtons/DrawButton.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/MaintenanceButtons/ExecuteRuling.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/MaintenanceButtons/MenuButton.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/MaintenanceButtons/PassPeriodButton.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/MaintenanceButtons/WithdrawAppealFees.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/MaintenanceButtons/index.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Overview/index.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Tabs.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Timeline.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/Classic/Commit.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/Classic/Reveal.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/Classic/Vote.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/Classic/index.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/JustificationArea.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/OptionsContainer.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/PendingVotesBox.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/Shutter/Commit.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/Shutter/Reveal.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/Shutter/index.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/VotesDetails/AccordionTitle.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/VotesDetails/index.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/VotingHistory.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/Voting/index.tsx delete mode 100644 web/src/pages/Cases/CaseDetails/index.tsx delete mode 100644 web/src/pages/Cases/CasesFetcher.tsx delete mode 100644 web/src/pages/Cases/index.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/Description.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/Info.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/Header.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/JurorCard.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/Stake.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/index.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/Search.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/index.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/StakePanel/Simulator/Header.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/StakePanel/Simulator/QuantityToSimulate.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/StakePanel/Simulator/index.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawButton.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/Header.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/index.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/stakeSteps.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/StakePanel/index.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/Stats/StatsContent.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/Stats/index.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/Stats/stats.ts delete mode 100644 web/src/pages/Courts/CourtDetails/TopSearch.tsx delete mode 100644 web/src/pages/Courts/CourtDetails/index.tsx delete mode 100644 web/src/pages/Courts/StakeMaintenanceButton/ExecuteDelayedStakeButton.tsx delete mode 100644 web/src/pages/Courts/StakeMaintenanceButton/PassPhaseButton.tsx delete mode 100644 web/src/pages/Courts/StakeMaintenanceButton/index.tsx delete mode 100644 web/src/pages/Courts/index.tsx delete mode 100644 web/src/pages/GetPnk/WalletProvider.tsx delete mode 100644 web/src/pages/GetPnk/Widget.tsx delete mode 100644 web/src/pages/GetPnk/index.tsx delete mode 100644 web/src/pages/Home/Community/Element.tsx delete mode 100644 web/src/pages/Home/Community/index.tsx delete mode 100644 web/src/pages/Home/CourtOverview/BarChart.tsx delete mode 100644 web/src/pages/Home/CourtOverview/CasesByCourtsChart.tsx delete mode 100644 web/src/pages/Home/CourtOverview/Chart.tsx delete mode 100644 web/src/pages/Home/CourtOverview/ExtraStats.tsx delete mode 100644 web/src/pages/Home/CourtOverview/Header.tsx delete mode 100644 web/src/pages/Home/CourtOverview/StakedPNKByCourtsChart.tsx delete mode 100644 web/src/pages/Home/CourtOverview/Stats.tsx delete mode 100644 web/src/pages/Home/CourtOverview/TimeSeriesChart.tsx delete mode 100644 web/src/pages/Home/CourtOverview/index.tsx delete mode 100644 web/src/pages/Home/TopJurors/Header/Coherence.tsx delete mode 100644 web/src/pages/Home/TopJurors/Header/DesktopHeader.tsx delete mode 100644 web/src/pages/Home/TopJurors/Header/MobileHeader.tsx delete mode 100644 web/src/pages/Home/TopJurors/Header/Rewards.tsx delete mode 100644 web/src/pages/Home/TopJurors/Header/Score.tsx delete mode 100644 web/src/pages/Home/TopJurors/Header/index.tsx delete mode 100644 web/src/pages/Home/TopJurors/JurorCard/Coherence.tsx delete mode 100644 web/src/pages/Home/TopJurors/JurorCard/DesktopCard.tsx delete mode 100644 web/src/pages/Home/TopJurors/JurorCard/JurorLevel.tsx delete mode 100644 web/src/pages/Home/TopJurors/JurorCard/JurorTitle.tsx delete mode 100644 web/src/pages/Home/TopJurors/JurorCard/MobileCard.tsx delete mode 100644 web/src/pages/Home/TopJurors/JurorCard/Rank.tsx delete mode 100644 web/src/pages/Home/TopJurors/JurorCard/Rewards.tsx delete mode 100644 web/src/pages/Home/TopJurors/JurorCard/Score.tsx delete mode 100644 web/src/pages/Home/TopJurors/JurorCard/index.tsx delete mode 100644 web/src/pages/Home/TopJurors/index.tsx delete mode 100644 web/src/pages/Home/index.tsx delete mode 100644 web/src/pages/Jurors/DisplayJurors.tsx delete mode 100644 web/src/pages/Jurors/Search.tsx delete mode 100644 web/src/pages/Jurors/Stats.tsx delete mode 100644 web/src/pages/Jurors/StatsAndFilters.tsx delete mode 100644 web/src/pages/Jurors/index.tsx delete mode 100644 web/src/pages/Profile/JurorInfo/Coherence.tsx delete mode 100644 web/src/pages/Profile/JurorInfo/Header.tsx delete mode 100644 web/src/pages/Profile/JurorInfo/JurorRewards.tsx delete mode 100644 web/src/pages/Profile/JurorInfo/PixelArt.tsx delete mode 100644 web/src/pages/Profile/JurorInfo/StakingRewards.tsx delete mode 100644 web/src/pages/Profile/JurorInfo/TokenRewards.tsx delete mode 100644 web/src/pages/Profile/JurorInfo/index.tsx delete mode 100644 web/src/pages/Profile/Stakes/CourtCard/CourtName.tsx delete mode 100644 web/src/pages/Profile/Stakes/CourtCard/Stake.tsx delete mode 100644 web/src/pages/Profile/Stakes/CourtCard/index.tsx delete mode 100644 web/src/pages/Profile/Stakes/Header.tsx delete mode 100644 web/src/pages/Profile/Stakes/index.tsx delete mode 100644 web/src/pages/Profile/index.tsx delete mode 100644 web/src/pages/Resolver/Briefing/Description.tsx delete mode 100644 web/src/pages/Resolver/Briefing/Title.tsx delete mode 100644 web/src/pages/Resolver/Header.tsx delete mode 100644 web/src/pages/Resolver/Landing/CreationCard.tsx delete mode 100644 web/src/pages/Resolver/Landing/index.tsx delete mode 100644 web/src/pages/Resolver/NavigationButtons/NextButton.tsx delete mode 100644 web/src/pages/Resolver/NavigationButtons/PreviousButton.tsx delete mode 100644 web/src/pages/Resolver/NavigationButtons/SubmitBatchDisputesButton.tsx delete mode 100644 web/src/pages/Resolver/NavigationButtons/SubmitDisputeButton.tsx delete mode 100644 web/src/pages/Resolver/NavigationButtons/index.tsx delete mode 100644 web/src/pages/Resolver/Parameters/Category.tsx delete mode 100644 web/src/pages/Resolver/Parameters/Court.tsx delete mode 100644 web/src/pages/Resolver/Parameters/Jurors.tsx delete mode 100644 web/src/pages/Resolver/Parameters/NotablePersons/PersonFields.tsx delete mode 100644 web/src/pages/Resolver/Parameters/NotablePersons/index.tsx delete mode 100644 web/src/pages/Resolver/Parameters/VotingOptions/OptionsFields.tsx delete mode 100644 web/src/pages/Resolver/Parameters/VotingOptions/index.tsx delete mode 100644 web/src/pages/Resolver/Policy/index.tsx delete mode 100644 web/src/pages/Resolver/Preview/BatchCreationCard.tsx delete mode 100644 web/src/pages/Resolver/Preview/index.tsx delete mode 100644 web/src/pages/Resolver/Timeline.tsx delete mode 100644 web/src/pages/Resolver/index.tsx delete mode 100644 web/src/pages/Settings/EmailConfirmation/index.tsx delete mode 100644 web/src/pages/Settings/index.tsx delete mode 100644 web/src/public/llms.txt delete mode 100644 web/src/styles/commonStyles.ts delete mode 100644 web/src/styles/customScrollbar.ts delete mode 100644 web/src/styles/global-style.ts delete mode 100644 web/src/styles/landscapeStyle.ts delete mode 100644 web/src/styles/portraitStyle.ts delete mode 100644 web/src/styles/responsiveSize.ts delete mode 100644 web/src/styles/themes.ts delete mode 100644 web/src/utils/beautifyStatNumber.ts delete mode 100644 web/src/utils/calculateSubtextRender.tsx delete mode 100644 web/src/utils/commify.ts delete mode 100644 web/src/utils/date.ts delete mode 100644 web/src/utils/debounceErrorToast.ts delete mode 100644 web/src/utils/extradataToTokenInfo.ts delete mode 100644 web/src/utils/format.ts delete mode 100644 web/src/utils/getCoherencePercent.tsx delete mode 100644 web/src/utils/getDescriptiveCourtName.ts delete mode 100644 web/src/utils/getDisputeRequestParamsFromTxn.ts delete mode 100644 web/src/utils/getDrawnJurorsWithCount.ts delete mode 100644 web/src/utils/getGraphqlUrl.ts delete mode 100644 web/src/utils/getIpfsUrl.ts delete mode 100644 web/src/utils/getLocalRounds.ts delete mode 100644 web/src/utils/getVoteChoice.ts delete mode 100644 web/src/utils/index.ts delete mode 100644 web/src/utils/isLastRound.ts delete mode 100644 web/src/utils/jurorRewardConfig.ts delete mode 100644 web/src/utils/parseWagmiError.ts delete mode 100644 web/src/utils/prepareArbitratorExtradata.ts delete mode 100644 web/src/utils/refecthWithRetry.ts delete mode 100644 web/src/utils/sanitizeFilter.ts delete mode 100644 web/src/utils/sentry.ts delete mode 100644 web/src/utils/shortenAddress.ts delete mode 100644 web/src/utils/shutter.ts delete mode 100644 web/src/utils/transformSearch.ts delete mode 100644 web/src/utils/uri.ts delete mode 100644 web/src/utils/userLevelCalculation.ts delete mode 100644 web/src/utils/validateAddressOrEns.ts delete mode 100644 web/src/utils/wrapWithToast.ts delete mode 100644 web/tsconfig.json delete mode 100644 web/vite.config.js delete mode 100644 web/wagmi.config.ts delete mode 100644 yarn.lock diff --git a/.codeclimate.yml b/.codeclimate.yml deleted file mode 100644 index 77f80363a..000000000 --- a/.codeclimate.yml +++ /dev/null @@ -1,18 +0,0 @@ -checks: - similar_code: - exclude_paths: - - "contracts/tests/" - complexity: - exclude_paths: - - "contracts/tests/" -engines: - tslint: - enabled: true - checks: - quotemark: - enabled: false -exclude_paths: - - "web/src/graphql/generated.ts" - - "contracts/deployments/" - - "contracts/config/" - - "kleros-sdk/config/" diff --git a/.depcheckrc b/.depcheckrc deleted file mode 100644 index e8aa3c8e2..000000000 --- a/.depcheckrc +++ /dev/null @@ -1,2 +0,0 @@ -ignores: ["lint-*", "prettier-*", "eslint-*", "babel-*", "solhint-*", "@commitlint/*", "conventional-changelog-cli"] -skip-missing: true \ No newline at end of file diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index fb3c7130c..000000000 --- a/.dockerignore +++ /dev/null @@ -1,18 +0,0 @@ -.yarn/cache -.yarn/install-state.gz - -contracts/.env -contracts/.env.* -contracts/test -contracts/lib -contracts/cache -contracts/cache_hardhat -contracts/tenderly.yaml - -*/.DS_Store -*/*.log - -.env* -.flaskenv* -!.env.project -!.env.vault \ No newline at end of file diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 332275afb..000000000 --- a/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -root = true - -[*] -end_of_line = lf -trim_trailing_whitespace = true -insert_final_newline = true -charset = utf-8 - -[*.{html,js,.json,mjs,rjson,ts}] -indent_style = space -indent_size = 2 - -[*.sol] -indent_style = space -indent_size = 4 diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index bd4b8427a..000000000 --- a/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules/ -**/node_modules/ -!**/*.js -!*.js diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index aaca2501d..000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,7 +0,0 @@ -# Default -* @kleros/maintainers-court-v2-frontend -contracts @jaybuidl - -# Owned by everyone -yarn.lock @kleros/devs -.gitignore @kleros/devs diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index e05f824a8..000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,62 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -enable-beta-ecosystems: true -updates: - - package-ecosystem: npm - directory: / - target-branch: dev - schedule: - interval: weekly - open-pull-requests-limit: 10 - labels: - - dependencies - assignees: - - jaybuidl - - - package-ecosystem: github-actions - directory: / - target-branch: dev - schedule: - interval: weekly - open-pull-requests-limit: 10 - labels: - - dependencies - assignees: - - jaybuidl - - alcercu - - - package-ecosystem: docker - directory: /bots - target-branch: dev - schedule: - interval: weekly - labels: - - dependencies - assignees: - - jaybuidl - - - package-ecosystem: docker - directory: /bot-pinner - target-branch: dev - schedule: - interval: weekly - open-pull-requests-limit: 10 - labels: - - dependencies - assignees: - - jaybuidl - - - package-ecosystem: pip - directory: /bot-pinner - target-branch: dev - schedule: - interval: weekly - open-pull-requests-limit: 10 - labels: - - dependencies - assignees: - - jaybuidl diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 0c5dad7ab..000000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,79 +0,0 @@ -name: "CodeQL Advanced" - -on: - merge_group: - branches: - - master - - dev - push: - branches: - - master - - dev - pull_request: - # The branches below must be a subset of the branches above - branches: - - master - - dev - schedule: - - cron: '26 1 * * 6' - -permissions: - actions: read - -jobs: - codeql-advanced-analysis: - name: Analyze - runs-on: ubuntu-latest - timeout-minutes: 360 - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: - - javascript - - steps: - - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 - with: - egress-policy: audit - - - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@b8d3b6e8af63cde30bdc382c0bc28114f4346c88 # v2.28.1 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - - - # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@b8d3b6e8af63cde30bdc382c0bc28114f4346c88 # v2.28.1 - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@b8d3b6e8af63cde30bdc382c0bc28114f4346c88 # v2.28.1 - with: - category: "/language:${{matrix.language}}" diff --git a/.github/workflows/contracts-testing.yml b/.github/workflows/contracts-testing.yml deleted file mode 100644 index 26e1fb313..000000000 --- a/.github/workflows/contracts-testing.yml +++ /dev/null @@ -1,143 +0,0 @@ -name: Contracts Testing - -on: - workflow_dispatch: - merge_group: - push: - branches: - - master - - dev - paths-ignore: - - "kleros-sdk/**" - - "services/**" - - "subgraph/**" - - "web/**" - pull_request: - branches: - - "*" - -permissions: # added using https://github.com/step-security/secure-workflows - contents: read - -jobs: - # *********************************************************************************** # - # ******************************* Hardhat Tests ************************************* # - # *********************************************************************************** # - hardhat-tests: - runs-on: ubuntu-latest - steps: - - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 - with: - disable-sudo: false - egress-policy: block - allowed-endpoints: > - binaries.soliditylang.org:443 - classic.yarnpkg.com:443 - github.com:443 - nightly.yarnpkg.com:443 - nodejs.org:443 - objects.githubusercontent.com:443 - registry.yarnpkg.com:443 - registry.npmjs.org:443 - 54.185.253.63:443 - - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - submodules: recursive - - - name: Set up corepack (for yarn) - run: | - corepack enable - corepack prepare yarn@4.9.2 --activate - yarn set version 4.9.2 - - - name: Setup Node.js environment - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 - with: - node-version: 20.x - cache: yarn - - - name: Cache node modules - uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1 - env: - cache-name: cache-node-modules - with: - path: | - ~/.npm - **/node_modules - key: ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}- - - - name: Install contracts dependencies - run: yarn workspace @kleros/kleros-v2-contracts install - - - name: Run Hardhat tests - run: yarn test - working-directory: contracts - - # *********************************************************************************** # - # ******************************* Foundry Tests ************************************* # - # *********************************************************************************** # - # COMPILATION FAILS 🤬 - # foundry-tests: - # runs-on: ubuntu-latest - # steps: - # - name: Harden Runner - # uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 - # with: - # disable-sudo: false - # egress-policy: block - # allowed-endpoints: > - # binaries.soliditylang.org:443 - # classic.yarnpkg.com:443 - # github.com:443 - # nightly.yarnpkg.com:443 - # nodejs.org:443 - # objects.githubusercontent.com:443 - # registry.yarnpkg.com:443 - # registry.npmjs.org:443 - # 54.185.253.63:443 - - # - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - # with: - # submodules: recursive - - # - name: Set up corepack (for yarn) - # run: | - # corepack enable - # corepack prepare yarn@4.9.2 --activate - # yarn set version 4.9.2 - - # - name: Setup Node.js environment - # uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 - # with: - # node-version: 20.x - # cache: yarn - - # - name: Cache node modules - # uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1 - # env: - # cache-name: cache-node-modules - # with: - # path: | - # ~/.npm - # **/node_modules - # key: ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}- - - # # - name: Install contracts dependencies - # # run: yarn workspace @kleros/kleros-v2-contracts install - - # - name: Install Foundry - # uses: foundry-rs/foundry-toolchain@82dee4ba654bd2146511f85f0d013af94670c4de # v1.4.0 - - # - name: Run Foundry tests - # run: forge test --config-path ./foundry.toml - # working-directory: contracts - - # - name: Run snapshot - # run: NO_COLOR=1 forge snapshot >> $GITHUB_STEP_SUMMARY - # working-directory: contracts diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml deleted file mode 100644 index 26288d133..000000000 --- a/.github/workflows/dependency-review.yml +++ /dev/null @@ -1,40 +0,0 @@ -# Dependency Review Action -# -# This Action will scan dependency manifest files that change as part of a Pull Request, -# surfacing known-vulnerable versions of the packages declared or updated in the PR. -# Once installed, if the workflow run is marked as required, -# PRs introducing known-vulnerable packages will be blocked from merging. -# -# Source repository: https://github.com/actions/dependency-review-action -name: 'Dependency Review' -on: - merge_group: - pull_request: - -permissions: - contents: read - -jobs: - dependency-review: - runs-on: ubuntu-latest - steps: - - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 - with: - disable-sudo: true - egress-policy: block - allowed-endpoints: > - api.github.com:443 - api.deps.dev:443 - github.com:443 - pipelinesghubeus2.actions.githubusercontent.com:443 - acghubeus1.actions.githubusercontent.com:443 - - - name: 'Checkout Repository' - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - - name: 'Dependency Review' - uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0 - with: - base-ref: ${{ github.event.pull_request.base.sha || 'dev' }} - head-ref: ${{ github.event.pull_request.head.sha || github.ref }} diff --git a/.github/workflows/deploy-bots.yml b/.github/workflows/deploy-bots.yml deleted file mode 100644 index 0529a824a..000000000 --- a/.github/workflows/deploy-bots.yml +++ /dev/null @@ -1,32 +0,0 @@ -on: [workflow_dispatch] - -permissions: # added using https://github.com/step-security/secure-workflows - contents: read - -jobs: - build-deploy: - runs-on: ubuntu-latest - steps: - - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 - with: - egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - - uses: actions/checkout@7739b9ba2efcda9dde65ad1e3c2dbe65b41dfba7 - - uses: actions/setup-python@5f2af211d616f86005883b44826180b21abb4060 - - uses: aws-actions/setup-sam@12a6719db503425e98edcc798b6779590a450e8f - - uses: aws-actions/configure-aws-credentials@010d0da01d0b5a38af31e9c3470dbfdabdecca3a - with: - aws-access-key-id: ${{ secrets.STAGING_AWS_ACCESS_KEY }} - aws-secret-access-key: ${{ secrets.STAGING_AWS_SECRET_KEY }} - aws-region: us-east-2 - - # sam build - - run: sam build --use-container - working-directory: bots - - # Run Unit tests- Specify unit tests here - - # sam deploy - - run: sam deploy --no-confirm-changeset --no-fail-on-empty-changeset --stack-name kleros-v2-bots --s3-bucket kleros-v2-bots --capabilities CAPABILITY_IAM --region us-east-2 - working-directory: bots diff --git a/.github/workflows/deploy-subgraph.yml b/.github/workflows/deploy-subgraph.yml deleted file mode 100644 index e109c13fb..000000000 --- a/.github/workflows/deploy-subgraph.yml +++ /dev/null @@ -1,99 +0,0 @@ -name: Deploy the Subgraph - -on: - workflow_dispatch: - inputs: - graph_environment: - description: The Graph environment to deploy to - required: true - default: 'graph-studio-devnet' - type: choice - options: - - graph-studio-devnet - - graph-studio-testnet - - graph-studio-mainnet - subgraph: - description: The name of the subgraph to deploy - required: true - default: 'core' - type: choice - options: - - core - - drt - update: - description: Whether to update the subgraph with the current artifacts for the selected network. - required: true - default: true - type: boolean - -permissions: - contents: read - -jobs: - buildAndDeploy: - runs-on: ubuntu-latest - environment: ${{ inputs.graph_environment }} - steps: - - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 - with: - egress-policy: audit - - - name: Validate Network environment variable - if: ${{!startsWith(vars.NETWORK, 'arbitrum')}} - run: echo ${{vars.NETWORK}} && exit 1 - - - name: Checkout code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - - name: Set up Node.js - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 - with: - node-version: 20 - - - name: Install Yarn if running locally - if: ${{ env.ACT }} - run: npm install -g yarn - - - name: Install the dependencies - run: yarn install - - - name: Install jq and yq - if: ${{ inputs.update }} - run: | - mkdir bin - wget -qO bin/jq https://github.com/jqlang/jq/releases/download/jq-1.6/jq-linux64 - wget -qO bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 - chmod a+x bin/jq bin/yq - - - name: Update the subgraph definition - if: ${{ inputs.update }} - run: | - export PATH=$PWD/../bin:$PATH - yarn update:${{ inputs.subgraph }}:${{ vars.NETWORK }} - working-directory: subgraph - - - name: Build the subgraph - run: | - yarn codegen:${{ inputs.subgraph }} - yarn build:${{ inputs.subgraph }} - working-directory: subgraph - - - name: Authenticate with TheGraph Studio - run: yarn graph auth "${{ secrets.SUBGRAPH_AUTH_TOKEN }}" --studio - working-directory: subgraph - - - name: Deploy the subgraph - run: | - # working around a graph bug which doesn't exit 1 on error: https://github.com/graphprotocol/graph-tooling/issues/1570 - error=$(yarn deploy:${{ inputs.subgraph }}:${{ vars.NETWORK }}) - echo "$error" - if [[ $error == *"Error"* ]] - then - echo "exiting..." - exit 1 - else - echo "deployed successfully" - exit 0 - fi - working-directory: subgraph diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml deleted file mode 100644 index 87cf6cd9b..000000000 --- a/.github/workflows/scorecards.yml +++ /dev/null @@ -1,91 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. They are provided -# by a third-party and are governed by separate terms of service, privacy -# policy, and support documentation. - -name: Scorecards supply-chain security -on: - # For Branch-Protection check. Only the default branch is supported. See - # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection - branch_protection_rule: - # To guarantee Maintained check is occasionally updated. See - # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained - schedule: - - cron: '37 13 * * 3' - push: - branches: [ "dev" ] - -# Declare default permissions as read only. -permissions: read-all - -jobs: - analysis: - name: Scorecards analysis - runs-on: ubuntu-latest - permissions: - # Needed to upload the results to code-scanning dashboard. - security-events: write - # Needed to publish results and get a badge (see publish_results below). - id-token: write - # Uncomment the permissions below if installing in a private repository. - # contents: read - # actions: read - - steps: - - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 - with: - disable-sudo: true - egress-policy: block - allowed-endpoints: > - api.github.com:443 - api.github.com/repos/google/oss-fuzz:443 - oss-fuzz-build-logs.storage.googleapis.com:443 - api.securityscorecards.dev:443 - api.osv.dev:443 - auth.docker.io:443 - bestpractices.coreinfrastructure.org:443 - fulcio.sigstore.dev:443 - rekor.sigstore.dev:443 - github.com:443 - index.docker.io:443 - sigstore-tuf-root.storage.googleapis.com:443 - - - name: "Checkout code" - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - persist-credentials: false - - - name: "Run analysis" - uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1 - with: - results_file: results.sarif - results_format: sarif - # (Optional) Read-only PAT token. Uncomment the `repo_token` line below if: - # - you want to enable the Branch-Protection check on a *public* repository, or - # - you are installing Scorecards on a *private* repository - # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. - # repo_token: ${{ secrets.SCORECARD_READ_TOKEN }} - - # Public repositories: - # - Publish results to OpenSSF REST API for easy access by consumers - # - Allows the repository to include the Scorecard badge. - # - See https://github.com/ossf/scorecard-action#publishing-results. - # For private repositories: - # - `publish_results` will always be set to `false`, regardless - # of the value entered here. - publish_results: true - - # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF - # format to the repository Actions tab. - - name: "Upload artifact" - uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1 - with: - name: SARIF file - path: results.sarif - retention-days: 5 - - # Upload the results to GitHub's code scanning dashboard. - - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@b8d3b6e8af63cde30bdc382c0bc28114f4346c88 # v2.28.1 - with: - sarif_file: results.sarif diff --git a/.github/workflows/sentry-release.yml b/.github/workflows/sentry-release.yml deleted file mode 100644 index 3c033a888..000000000 --- a/.github/workflows/sentry-release.yml +++ /dev/null @@ -1,84 +0,0 @@ -name: Sentry Release - -on: - workflow_dispatch: - push: - branches: - - master - -permissions: # added using https://github.com/step-security/secure-workflows - contents: read - -jobs: - release: - runs-on: ubuntu-latest - environment: Master - outputs: - version: ${{ steps.set-version.outputs.version }} - steps: - - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 - with: - disable-sudo: true - egress-policy: block - allowed-endpoints: > - binaries.soliditylang.org:443 - classic.yarnpkg.com:443 - github.com:443 - nightly.yarnpkg.com:443 - nodejs.org:443 - objects.githubusercontent.com:443 - registry.yarnpkg.com:443 - registry.npmjs.org:443 - 54.185.253.63:443 - sentry.io:443 - - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - submodules: recursive - - - name: Set up corepack (for yarn) - run: | - corepack enable - corepack prepare yarn@4.5.1 --activate - yarn set version 4.5.1 - - - name: Setup Node.js environment - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 - with: - node-version: 20.x - cache: yarn - - - name: Cache node modules - uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1 - env: - cache-name: cache-node-modules - with: - path: | - ~/.npm - **/node_modules - key: ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}- - - - name: Install dependencies and build - run: | - . web/.env.mainnet-neo.public - yarn build:web:ci - - - name: Set version - id: set-version - run: echo "version=v$(cat package.json | jq -r .version)-$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT" - working-directory: web - - - name: Create Sentry release - uses: getsentry/action-release@ffb64465339ef6fb868e2fc261318d78ae0ed8d9 # v1.10.5 - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - SENTRY_ORG: ${{ secrets.SENTRY_ORG }} - SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} - with: - environment: production - version: ${{ steps.set-version.outputs.version }} - sourcemaps: ./web/dist - diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml deleted file mode 100644 index 55444c953..000000000 --- a/.github/workflows/sonarcloud.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Build -on: - push: - branches: - - master - - dev - pull_request: - types: [opened, synchronize, reopened] - -permissions: - contents: read - -jobs: - sonarcloud: - permissions: - contents: read # for actions/checkout to fetch code - pull-requests: read # for SonarSource/sonarcloud-github-action to determine which PR to decorate - name: SonarCloud - runs-on: ubuntu-latest - steps: - - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 - with: - egress-policy: audit - - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - - name: SonarCloud Scan - uses: SonarSource/sonarcloud-github-action@9f9bba2c7aaf7a55eac26abbac906c3021d211b2 # master - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index ca386905b..000000000 --- a/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "contracts/lib/forge-std"] - path = contracts/lib/forge-std - url = https://github.com/foundry-rs/forge-std -[submodule "contracts/lib/solmate"] - path = contracts/lib/solmate - url = https://github.com/rari-capital/solmate diff --git a/.husky/commit-msg b/.husky/commit-msg deleted file mode 100755 index d71a03b9f..000000000 --- a/.husky/commit-msg +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -yarn commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index d2ae35e84..000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -yarn lint-staged diff --git a/.lintstagedrc.json b/.lintstagedrc.json deleted file mode 100644 index 68dabb4db..000000000 --- a/.lintstagedrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "*.{js,jsx,ts,tsx}": "prettier --write --config prettier-config/.prettierrc.js", - "*.{md,html,json}": "prettier --write --config prettier-config/.prettierrc.js", - "*.sol": "prettier --write --config prettier-config/.prettierrc.js" -} diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 209e3ef4b..000000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -20 diff --git a/.renovaterc.json b/.renovaterc.json deleted file mode 100644 index a361c08e0..000000000 --- a/.renovaterc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "baseBranches": [ - "dev" - ], - "labels": [ - "dependencies" - ], - "assignees": [ - "jaybuidl" - ], - "extends": [ - "config:base", - "group:allNonMajor", - ":preserveSemverRanges", - "schedule:daily", - "npm:unpublishSafe", - ":maintainLockFilesDisabled" - ] -} diff --git a/.vscode/contract-decorators.code-snippets b/.vscode/contract-decorators.code-snippets deleted file mode 100644 index 954608ff9..000000000 --- a/.vscode/contract-decorators.code-snippets +++ /dev/null @@ -1,118 +0,0 @@ -{ - // Place your kleros-v2 workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and - // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope - // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is - // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: - // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. - // Placeholders with the same ids are connected. - // Example: - // "Print to console": { - // "scope": "javascript,typescript", - // "prefix": "log", - // "body": [ - // "console.log('$1');", - // "$2" - // ], - // "description": "Log output to console" - // } - "Decorator for the Enums / Structs section": { - "scope": "solidity", - "prefix": "/struct", - "body": [ - "// ************************************* //", - "// * Enums / Structs * //", - "// ************************************* //", - "$0" - ] - }, - "Decorator for the Storage section": { - "scope": "solidity", - "prefix": "/stor", - "body": [ - "// ************************************* //", - "// * Storage * //", - "// ************************************* //", - "$0" - ] - }, - "Decorator for the Events section": { - "scope": "solidity", - "prefix": "/event", - "body": [ - "// ************************************* //", - "// * Events * //", - "// ************************************* //", - "$0" - ] - }, - "Decorator for the Function Modifiers section": { - "scope": "solidity", - "prefix": "/modif", - "body": [ - "// ************************************* //", - "// * Function Modifiers * //", - "// ************************************* //", - "$0" - ] - }, - "Decorator for the Constructor section": { - "scope": "solidity", - "prefix": "/constr", - "body": [ - "// ************************************* //", - "// * Constructor * //", - "// ************************************* //", - "$0" - ] - }, - "Decorator for the Initializer section": { - "scope": "solidity", - "prefix": "/init", - "body": [ - "// ************************************* //", - "// * Initializer * //", - "// ************************************* //", - "$0" - ] - }, - "Decorator for the Governance section": { - "scope": "solidity", - "prefix": "/gov", - "body": [ - "// ************************************* //", - "// * Governance * //", - "// ************************************* //", - "$0" - ] - }, - "Decorator for the State Modifiers section": { - "scope": "solidity", - "prefix": "/state", - "body": [ - "// ************************************* //", - "// * State Modifiers * //", - "// ************************************* //", - "$0" - ] - }, - "Decorator for the Public Views section": { - "scope": "solidity", - "prefix": "/view", - "body": [ - "// ************************************* //", - "// * Public Views * //", - "// ************************************* //", - "$0" - ] - }, - "Decorator for the Internal section": { - "scope": "solidity", - "prefix": "/intern", - "body": [ - "// ************************************* //", - "// * Internal * //", - "// ************************************* //", - "$0" - ] - }, -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 95ab72c41..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "solidity.formatter": "prettier", - "[solidity]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "solidity-va.test.defaultUnittestTemplate": "hardhat", - "solidity-language-server.trace.server.verbosity": "message", - "typescript.tsdk": "node_modules/typescript/lib", - "eslint.packageManager": "yarn", - "prettier.useEditorConfig": true, - "prettier.configPath": "prettier-config/.prettierrc.js", - "sonarlint.connectedMode.project": { - "connectionId": "kleros", - "projectKey": "kleros_kleros-v2" - }, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" - } -} diff --git a/.whitesource b/.whitesource deleted file mode 100644 index 8b5c1c77d..000000000 --- a/.whitesource +++ /dev/null @@ -1,23 +0,0 @@ -{ - "scanSettings": { - "baseBranches": ["dev", "master"] - }, - "checkRunSettings": { - "vulnerableCheckRunConclusionLevel": "failure", - "displayMode": "diff", - "useMendCheckNames": true - }, - "issueSettings": { - "minSeverityLevel": "MEDIUM", - "issueType": "DEPENDENCY", - "customLabels": ["Type: Security🛡️", "dependencies"], - "assignees": ["jaybuidl"] - }, - "remediateSettings": { - "workflowRules": { - "enabled": true, - "minVulnerabilityScore": 3, - "maxVulnerabilityScore": 10 - } - } -} \ No newline at end of file diff --git a/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs b/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs deleted file mode 100644 index 11f949d97..000000000 --- a/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +++ /dev/null @@ -1,541 +0,0 @@ -/* eslint-disable */ -//prettier-ignore -module.exports = { -name: "@yarnpkg/plugin-interactive-tools", -factory: function (require) { -var plugin=(()=>{var jF=Object.create,Ay=Object.defineProperty,zF=Object.defineProperties,HF=Object.getOwnPropertyDescriptor,qF=Object.getOwnPropertyDescriptors,WF=Object.getOwnPropertyNames,__=Object.getOwnPropertySymbols,VF=Object.getPrototypeOf,IE=Object.prototype.hasOwnProperty,O8=Object.prototype.propertyIsEnumerable;var M8=(i,o,a)=>o in i?Ay(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a,Ht=(i,o)=>{for(var a in o||(o={}))IE.call(o,a)&&M8(i,a,o[a]);if(__)for(var a of __(o))O8.call(o,a)&&M8(i,a,o[a]);return i},Zr=(i,o)=>zF(i,qF(o)),GF=i=>Ay(i,"__esModule",{value:!0});var Dl=(i,o)=>{var a={};for(var p in i)IE.call(i,p)&&o.indexOf(p)<0&&(a[p]=i[p]);if(i!=null&&__)for(var p of __(i))o.indexOf(p)<0&&O8.call(i,p)&&(a[p]=i[p]);return a};var tt=(i,o)=>()=>(o||i((o={exports:{}}).exports,o),o.exports),YF=(i,o)=>{for(var a in o)Ay(i,a,{get:o[a],enumerable:!0})},KF=(i,o,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let p of WF(o))!IE.call(i,p)&&p!=="default"&&Ay(i,p,{get:()=>o[p],enumerable:!(a=HF(o,p))||a.enumerable});return i},vu=i=>KF(GF(Ay(i!=null?jF(VF(i)):{},"default",i&&i.__esModule&&"default"in i?{get:()=>i.default,enumerable:!0}:{value:i,enumerable:!0})),i);var Oy=tt((tH,k8)=>{"use strict";var N8=Object.getOwnPropertySymbols,XF=Object.prototype.hasOwnProperty,QF=Object.prototype.propertyIsEnumerable;function JF(i){if(i==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(i)}function ZF(){try{if(!Object.assign)return!1;var i=new String("abc");if(i[5]="de",Object.getOwnPropertyNames(i)[0]==="5")return!1;for(var o={},a=0;a<10;a++)o["_"+String.fromCharCode(a)]=a;var p=Object.getOwnPropertyNames(o).map(function(t){return o[t]});if(p.join("")!=="0123456789")return!1;var _={};return"abcdefghijklmnopqrst".split("").forEach(function(t){_[t]=t}),Object.keys(Object.assign({},_)).join("")==="abcdefghijklmnopqrst"}catch(t){return!1}}k8.exports=ZF()?Object.assign:function(i,o){for(var a,p=JF(i),_,t=1;t{"use strict";var bE=Oy(),Zf=typeof Symbol=="function"&&Symbol.for,My=Zf?Symbol.for("react.element"):60103,$F=Zf?Symbol.for("react.portal"):60106,eP=Zf?Symbol.for("react.fragment"):60107,tP=Zf?Symbol.for("react.strict_mode"):60108,nP=Zf?Symbol.for("react.profiler"):60114,rP=Zf?Symbol.for("react.provider"):60109,iP=Zf?Symbol.for("react.context"):60110,uP=Zf?Symbol.for("react.forward_ref"):60112,oP=Zf?Symbol.for("react.suspense"):60113,lP=Zf?Symbol.for("react.memo"):60115,sP=Zf?Symbol.for("react.lazy"):60116,L8=typeof Symbol=="function"&&Symbol.iterator;function ky(i){for(var o="https://reactjs.org/docs/error-decoder.html?invariant="+i,a=1;aE_.length&&E_.push(i)}function HE(i,o,a,p){var _=typeof i;(_==="undefined"||_==="boolean")&&(i=null);var t=!1;if(i===null)t=!0;else switch(_){case"string":case"number":t=!0;break;case"object":switch(i.$$typeof){case My:case $F:t=!0}}if(t)return a(p,i,o===""?"."+qE(i,0):o),1;if(t=0,o=o===""?".":o+":",Array.isArray(i))for(var k=0;k{"use strict";var hP="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";V8.exports=hP});var YE=tt((iH,Y8)=>{"use strict";var GE=function(){};process.env.NODE_ENV!=="production"&&(K8=G8(),D_={},X8=Function.call.bind(Object.prototype.hasOwnProperty),GE=function(i){var o="Warning: "+i;typeof console!="undefined"&&console.error(o);try{throw new Error(o)}catch(a){}});var K8,D_,X8;function Q8(i,o,a,p,_){if(process.env.NODE_ENV!=="production"){for(var t in i)if(X8(i,t)){var k;try{if(typeof i[t]!="function"){var L=Error((p||"React class")+": "+a+" type `"+t+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof i[t]+"`.");throw L.name="Invariant Violation",L}k=i[t](o,t,p,a,null,K8)}catch(C){k=C}if(k&&!(k instanceof Error)&&GE((p||"React class")+": type specification of "+a+" `"+t+"` is invalid; the type checker function must return `null` or an `Error` but returned a "+typeof k+". You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument)."),k instanceof Error&&!(k.message in D_)){D_[k.message]=!0;var O=_?_():"";GE("Failed "+a+" type: "+k.message+(O!=null?O:""))}}}}Q8.resetWarningCache=function(){process.env.NODE_ENV!=="production"&&(D_={})};Y8.exports=Q8});var J8=tt(Eu=>{"use strict";process.env.NODE_ENV!=="production"&&function(){"use strict";var i=Oy(),o=YE(),a="16.13.1",p=typeof Symbol=="function"&&Symbol.for,_=p?Symbol.for("react.element"):60103,t=p?Symbol.for("react.portal"):60106,k=p?Symbol.for("react.fragment"):60107,L=p?Symbol.for("react.strict_mode"):60108,O=p?Symbol.for("react.profiler"):60114,C=p?Symbol.for("react.provider"):60109,U=p?Symbol.for("react.context"):60110,H=p?Symbol.for("react.concurrent_mode"):60111,W=p?Symbol.for("react.forward_ref"):60112,ne=p?Symbol.for("react.suspense"):60113,m=p?Symbol.for("react.suspense_list"):60120,he=p?Symbol.for("react.memo"):60115,Ee=p?Symbol.for("react.lazy"):60116,ve=p?Symbol.for("react.block"):60121,se=p?Symbol.for("react.fundamental"):60117,De=p?Symbol.for("react.responder"):60118,pe=p?Symbol.for("react.scope"):60119,me=typeof Symbol=="function"&&Symbol.iterator,ie="@@iterator";function Oe(X){if(X===null||typeof X!="object")return null;var we=me&&X[me]||X[ie];return typeof we=="function"?we:null}var je={current:null},qe={suspense:null},yt={current:null},gt=/^(.*)[\\\/]/;function Xe(X,we,Le){var Ne="";if(we){var dt=we.fileName,Yn=dt.replace(gt,"");if(/^index\./.test(Yn)){var Cn=dt.match(gt);if(Cn){var cr=Cn[1];if(cr){var Si=cr.replace(gt,"");Yn=Si+"/"+Yn}}}Ne=" (at "+Yn+":"+we.lineNumber+")"}else Le&&(Ne=" (created by "+Le+")");return` - in `+(X||"Unknown")+Ne}var ut=1;function We(X){return X._status===ut?X._result:null}function Ft(X,we,Le){var Ne=we.displayName||we.name||"";return X.displayName||(Ne!==""?Le+"("+Ne+")":Le)}function Jt(X){if(X==null)return null;if(typeof X.tag=="number"&&ct("Received an unexpected object in getComponentName(). This is likely a bug in React. Please file an issue."),typeof X=="function")return X.displayName||X.name||null;if(typeof X=="string")return X;switch(X){case k:return"Fragment";case t:return"Portal";case O:return"Profiler";case L:return"StrictMode";case ne:return"Suspense";case m:return"SuspenseList"}if(typeof X=="object")switch(X.$$typeof){case U:return"Context.Consumer";case C:return"Context.Provider";case W:return Ft(X,X.render,"ForwardRef");case he:return Jt(X.type);case ve:return Jt(X.render);case Ee:{var we=X,Le=We(we);if(Le)return Jt(Le);break}}return null}var rt={},Q=null;function fe(X){Q=X}rt.getCurrentStack=null,rt.getStackAddendum=function(){var X="";if(Q){var we=Jt(Q.type),Le=Q._owner;X+=Xe(we,Q._source,Le&&Jt(Le.type))}var Ne=rt.getCurrentStack;return Ne&&(X+=Ne()||""),X};var xe={current:!1},oe={ReactCurrentDispatcher:je,ReactCurrentBatchConfig:qe,ReactCurrentOwner:yt,IsSomeRendererActing:xe,assign:i};i(oe,{ReactDebugCurrentFrame:rt,ReactComponentTreeHook:{}});function ze(X){{for(var we=arguments.length,Le=new Array(we>1?we-1:0),Ne=1;Ne1?we-1:0),Ne=1;Ne0&&typeof Le[Le.length-1]=="string"&&Le[Le.length-1].indexOf(` - in`)===0;if(!Ne){var dt=oe.ReactDebugCurrentFrame,Yn=dt.getStackAddendum();Yn!==""&&(we+="%s",Le=Le.concat([Yn]))}var Cn=Le.map(function(Mu){return""+Mu});Cn.unshift("Warning: "+we),Function.prototype.apply.call(console[X],console,Cn);try{var cr=0,Si="Warning: "+we.replace(/%s/g,function(){return Le[cr++]});throw new Error(Si)}catch(Mu){}}}var nn={};function an(X,we){{var Le=X.constructor,Ne=Le&&(Le.displayName||Le.name)||"ReactClass",dt=Ne+"."+we;if(nn[dt])return;ct("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",we,Ne),nn[dt]=!0}}var Mn={isMounted:function(X){return!1},enqueueForceUpdate:function(X,we,Le){an(X,"forceUpdate")},enqueueReplaceState:function(X,we,Le,Ne){an(X,"replaceState")},enqueueSetState:function(X,we,Le,Ne){an(X,"setState")}},lr={};Object.freeze(lr);function ln(X,we,Le){this.props=X,this.context=we,this.refs=lr,this.updater=Le||Mn}ln.prototype.isReactComponent={},ln.prototype.setState=function(X,we){if(!(typeof X=="object"||typeof X=="function"||X==null))throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,X,we,"setState")},ln.prototype.forceUpdate=function(X){this.updater.enqueueForceUpdate(this,X,"forceUpdate")};{var Vt={isMounted:["isMounted","Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."],replaceState:["replaceState","Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."]},Er=function(X,we){Object.defineProperty(ln.prototype,X,{get:function(){ze("%s(...) is deprecated in plain JavaScript React classes. %s",we[0],we[1])}})};for(var w in Vt)Vt.hasOwnProperty(w)&&Er(w,Vt[w])}function jt(){}jt.prototype=ln.prototype;function Xn(X,we,Le){this.props=X,this.context=we,this.refs=lr,this.updater=Le||Mn}var vr=Xn.prototype=new jt;vr.constructor=Xn,i(vr,ln.prototype),vr.isPureReactComponent=!0;function jr(){var X={current:null};return Object.seal(X),X}var fr=Object.prototype.hasOwnProperty,zr={key:!0,ref:!0,__self:!0,__source:!0},Xt,wu,d0;d0={};function Ro(X){if(fr.call(X,"ref")){var we=Object.getOwnPropertyDescriptor(X,"ref").get;if(we&&we.isReactWarning)return!1}return X.ref!==void 0}function Qo(X){if(fr.call(X,"key")){var we=Object.getOwnPropertyDescriptor(X,"key").get;if(we&&we.isReactWarning)return!1}return X.key!==void 0}function Fs(X,we){var Le=function(){Xt||(Xt=!0,ct("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://fb.me/react-special-props)",we))};Le.isReactWarning=!0,Object.defineProperty(X,"key",{get:Le,configurable:!0})}function Jo(X,we){var Le=function(){wu||(wu=!0,ct("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://fb.me/react-special-props)",we))};Le.isReactWarning=!0,Object.defineProperty(X,"ref",{get:Le,configurable:!0})}function Zo(X){if(typeof X.ref=="string"&&yt.current&&X.__self&&yt.current.stateNode!==X.__self){var we=Jt(yt.current.type);d0[we]||(ct('Component "%s" contains the string ref "%s". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://fb.me/react-strict-mode-string-ref',Jt(yt.current.type),X.ref),d0[we]=!0)}}var qt=function(X,we,Le,Ne,dt,Yn,Cn){var cr={$$typeof:_,type:X,key:we,ref:Le,props:Cn,_owner:Yn};return cr._store={},Object.defineProperty(cr._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(cr,"_self",{configurable:!1,enumerable:!1,writable:!1,value:Ne}),Object.defineProperty(cr,"_source",{configurable:!1,enumerable:!1,writable:!1,value:dt}),Object.freeze&&(Object.freeze(cr.props),Object.freeze(cr)),cr};function xi(X,we,Le){var Ne,dt={},Yn=null,Cn=null,cr=null,Si=null;if(we!=null){Ro(we)&&(Cn=we.ref,Zo(we)),Qo(we)&&(Yn=""+we.key),cr=we.__self===void 0?null:we.__self,Si=we.__source===void 0?null:we.__source;for(Ne in we)fr.call(we,Ne)&&!zr.hasOwnProperty(Ne)&&(dt[Ne]=we[Ne])}var Mu=arguments.length-2;if(Mu===1)dt.children=Le;else if(Mu>1){for(var zu=Array(Mu),Hu=0;Hu1){for(var Su=Array(Hu),Ti=0;Ti is not supported and will be removed in a future major release. Did you mean to render instead?")),Le.Provider},set:function(Cn){Le.Provider=Cn}},_currentValue:{get:function(){return Le._currentValue},set:function(Cn){Le._currentValue=Cn}},_currentValue2:{get:function(){return Le._currentValue2},set:function(Cn){Le._currentValue2=Cn}},_threadCount:{get:function(){return Le._threadCount},set:function(Cn){Le._threadCount=Cn}},Consumer:{get:function(){return Ne||(Ne=!0,ct("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?")),Le.Consumer}}}),Le.Consumer=Yn}return Le._currentRenderer=null,Le._currentRenderer2=null,Le}function Wt(X){var we={$$typeof:Ee,_ctor:X,_status:-1,_result:null};{var Le,Ne;Object.defineProperties(we,{defaultProps:{configurable:!0,get:function(){return Le},set:function(dt){ct("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),Le=dt,Object.defineProperty(we,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return Ne},set:function(dt){ct("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),Ne=dt,Object.defineProperty(we,"propTypes",{enumerable:!0})}}})}return we}function Au(X){return X!=null&&X.$$typeof===he?ct("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof X!="function"?ct("forwardRef requires a render function but was given %s.",X===null?"null":typeof X):X.length!==0&&X.length!==2&&ct("forwardRef render functions accept exactly two parameters: props and ref. %s",X.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),X!=null&&(X.defaultProps!=null||X.propTypes!=null)&&ct("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?"),{$$typeof:W,render:X}}function eu(X){return typeof X=="string"||typeof X=="function"||X===k||X===H||X===O||X===L||X===ne||X===m||typeof X=="object"&&X!==null&&(X.$$typeof===Ee||X.$$typeof===he||X.$$typeof===C||X.$$typeof===U||X.$$typeof===W||X.$$typeof===se||X.$$typeof===De||X.$$typeof===pe||X.$$typeof===ve)}function X0(X,we){return eu(X)||ct("memo: The first argument must be a component. Instead received: %s",X===null?"null":typeof X),{$$typeof:he,type:X,compare:we===void 0?null:we}}function Yi(){var X=je.current;if(X===null)throw Error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: -1. You might have mismatching versions of React and the renderer (such as React DOM) -2. You might be breaking the Rules of Hooks -3. You might have more than one copy of React in the same app -See https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.`);return X}function Xl(X,we){var Le=Yi();if(we!==void 0&&ct("useContext() second argument is reserved for future use in React. Passing it is not supported. You passed: %s.%s",we,typeof we=="number"&&Array.isArray(arguments[2])?` - -Did you call array.map(useContext)? Calling Hooks inside a loop is not supported. Learn more at https://fb.me/rules-of-hooks`:""),X._context!==void 0){var Ne=X._context;Ne.Consumer===X?ct("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):Ne.Provider===X&&ct("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return Le.useContext(X,we)}function Mo(X){var we=Yi();return we.useState(X)}function ai(X,we,Le){var Ne=Yi();return Ne.useReducer(X,we,Le)}function so(X){var we=Yi();return we.useRef(X)}function Ql(X,we){var Le=Yi();return Le.useEffect(X,we)}function ko(X,we){var Le=Yi();return Le.useLayoutEffect(X,we)}function Is(X,we){var Le=Yi();return Le.useCallback(X,we)}function $n(X,we){var Le=Yi();return Le.useMemo(X,we)}function el(X,we,Le){var Ne=Yi();return Ne.useImperativeHandle(X,we,Le)}function ao(X,we){{var Le=Yi();return Le.useDebugValue(X,we)}}var I0;I0=!1;function wl(){if(yt.current){var X=Jt(yt.current.type);if(X)return` - -Check the render method of \``+X+"`."}return""}function No(X){if(X!==void 0){var we=X.fileName.replace(/^.*[\\\/]/,""),Le=X.lineNumber;return` - -Check your code at `+we+":"+Le+"."}return""}function wt(X){return X!=null?No(X.__source):""}var bt={};function Hn(X){var we=wl();if(!we){var Le=typeof X=="string"?X:X.displayName||X.name;Le&&(we=` - -Check the top-level render call using <`+Le+">.")}return we}function qr(X,we){if(!(!X._store||X._store.validated||X.key!=null)){X._store.validated=!0;var Le=Hn(we);if(!bt[Le]){bt[Le]=!0;var Ne="";X&&X._owner&&X._owner!==yt.current&&(Ne=" It was passed a child from "+Jt(X._owner.type)+"."),fe(X),ct('Each child in a list should have a unique "key" prop.%s%s See https://fb.me/react-warning-keys for more information.',Le,Ne),fe(null)}}}function Ki(X,we){if(typeof X=="object"){if(Array.isArray(X))for(var Le=0;Le",dt=" Did you accidentally export a JSX literal instead of a component?"):Cn=typeof X,ct("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",Cn,dt)}var cr=xi.apply(this,arguments);if(cr==null)return cr;if(Ne)for(var Si=2;Si{"use strict";process.env.NODE_ENV==="production"?KE.exports=W8():KE.exports=J8()});var Z8=tt((zv,Ny)=>{(function(){var i,o="4.17.21",a=200,p="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",_="Expected a function",t="Invalid `variable` option passed into `_.template`",k="__lodash_hash_undefined__",L=500,O="__lodash_placeholder__",C=1,U=2,H=4,W=1,ne=2,m=1,he=2,Ee=4,ve=8,se=16,De=32,pe=64,me=128,ie=256,Oe=512,je=30,qe="...",yt=800,gt=16,Xe=1,ut=2,We=3,Ft=1/0,Jt=9007199254740991,rt=17976931348623157e292,Q=0/0,fe=4294967295,xe=fe-1,oe=fe>>>1,ze=[["ary",me],["bind",m],["bindKey",he],["curry",ve],["curryRight",se],["flip",Oe],["partial",De],["partialRight",pe],["rearg",ie]],ct="[object Arguments]",Rt="[object Array]",nn="[object AsyncFunction]",an="[object Boolean]",Mn="[object Date]",lr="[object DOMException]",ln="[object Error]",Vt="[object Function]",Er="[object GeneratorFunction]",w="[object Map]",jt="[object Number]",Xn="[object Null]",vr="[object Object]",jr="[object Promise]",fr="[object Proxy]",zr="[object RegExp]",Xt="[object Set]",wu="[object String]",d0="[object Symbol]",Ro="[object Undefined]",Qo="[object WeakMap]",Fs="[object WeakSet]",Jo="[object ArrayBuffer]",Zo="[object DataView]",qt="[object Float32Array]",xi="[object Float64Array]",lu="[object Int8Array]",mi="[object Int16Array]",Dr="[object Int32Array]",$o="[object Uint8Array]",G0="[object Uint8ClampedArray]",Uu="[object Uint16Array]",Y0="[object Uint32Array]",Xr=/\b__p \+= '';/g,Ao=/\b(__p \+=) '' \+/g,Oo=/(__e\(.*?\)|\b__t\)) \+\n'';/g,F0=/&(?:amp|lt|gt|quot|#39);/g,su=/[&<>"']/g,ki=RegExp(F0.source),Ps=RegExp(su.source),Kl=/<%-([\s\S]+?)%>/g,P0=/<%([\s\S]+?)%>/g,p0=/<%=([\s\S]+?)%>/g,Hr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ri=/^\w*$/,K0=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,yi=/[\\^$.*+?()[\]{}|]/g,en=RegExp(yi.source),bn=/^\s+/,Ai=/\s/,gi=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Wt=/\{\n\/\* \[wrapped with (.+)\] \*/,Au=/,? & /,eu=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,X0=/[()=,{}\[\]\/\s]/,Yi=/\\(\\)?/g,Xl=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Mo=/\w*$/,ai=/^[-+]0x[0-9a-f]+$/i,so=/^0b[01]+$/i,Ql=/^\[object .+?Constructor\]$/,ko=/^0o[0-7]+$/i,Is=/^(?:0|[1-9]\d*)$/,$n=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,el=/($^)/,ao=/['\n\r\u2028\u2029\\]/g,I0="\\ud800-\\udfff",wl="\\u0300-\\u036f",No="\\ufe20-\\ufe2f",wt="\\u20d0-\\u20ff",bt=wl+No+wt,Hn="\\u2700-\\u27bf",qr="a-z\\xdf-\\xf6\\xf8-\\xff",Ki="\\xac\\xb1\\xd7\\xf7",Qr="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Ou="\\u2000-\\u206f",h0=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Ni="A-Z\\xc0-\\xd6\\xd8-\\xde",v0="\\ufe0e\\ufe0f",hs=Ki+Qr+Ou+h0,Tt="['\u2019]",fo="["+I0+"]",tl="["+hs+"]",Jl="["+bt+"]",ju="\\d+",vs="["+Hn+"]",b0="["+qr+"]",X="[^"+I0+hs+ju+Hn+qr+Ni+"]",we="\\ud83c[\\udffb-\\udfff]",Le="(?:"+Jl+"|"+we+")",Ne="[^"+I0+"]",dt="(?:\\ud83c[\\udde6-\\uddff]){2}",Yn="[\\ud800-\\udbff][\\udc00-\\udfff]",Cn="["+Ni+"]",cr="\\u200d",Si="(?:"+b0+"|"+X+")",Mu="(?:"+Cn+"|"+X+")",zu="(?:"+Tt+"(?:d|ll|m|re|s|t|ve))?",Hu="(?:"+Tt+"(?:D|LL|M|RE|S|T|VE))?",Su=Le+"?",Ti="["+v0+"]?",Lo="(?:"+cr+"(?:"+[Ne,dt,Yn].join("|")+")"+Ti+Su+")*",ku="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",co="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",qu=Ti+Su+Lo,Pa="(?:"+[vs,dt,Yn].join("|")+")"+qu,m0="(?:"+[Ne+Jl+"?",Jl,dt,Yn,fo].join("|")+")",ia=RegExp(Tt,"g"),Q0=RegExp(Jl,"g"),ua=RegExp(we+"(?="+we+")|"+m0+qu,"g"),Ia=RegExp([Cn+"?"+b0+"+"+zu+"(?="+[tl,Cn,"$"].join("|")+")",Mu+"+"+Hu+"(?="+[tl,Cn+Si,"$"].join("|")+")",Cn+"?"+Si+"+"+zu,Cn+"+"+Hu,co,ku,ju,Pa].join("|"),"g"),ms=RegExp("["+cr+I0+bt+v0+"]"),S0=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Qn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],ac=-1,fi={};fi[qt]=fi[xi]=fi[lu]=fi[mi]=fi[Dr]=fi[$o]=fi[G0]=fi[Uu]=fi[Y0]=!0,fi[ct]=fi[Rt]=fi[Jo]=fi[an]=fi[Zo]=fi[Mn]=fi[ln]=fi[Vt]=fi[w]=fi[jt]=fi[vr]=fi[zr]=fi[Xt]=fi[wu]=fi[Qo]=!1;var $r={};$r[ct]=$r[Rt]=$r[Jo]=$r[Zo]=$r[an]=$r[Mn]=$r[qt]=$r[xi]=$r[lu]=$r[mi]=$r[Dr]=$r[w]=$r[jt]=$r[vr]=$r[zr]=$r[Xt]=$r[wu]=$r[d0]=$r[$o]=$r[G0]=$r[Uu]=$r[Y0]=!0,$r[ln]=$r[Vt]=$r[Qo]=!1;var Zl={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},oa={"&":"&","<":"<",">":">",'"':""","'":"'"},pf={"&":"&","<":"<",">":">",""":'"',"'":"'"},bs={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ba=parseFloat,Bs=parseInt,y0=typeof global=="object"&&global&&global.Object===Object&&global,Us=typeof self=="object"&&self&&self.Object===Object&&self,ji=y0||Us||Function("return this")(),B=typeof zv=="object"&&zv&&!zv.nodeType&&zv,z=B&&typeof Ny=="object"&&Ny&&!Ny.nodeType&&Ny,G=z&&z.exports===B,$=G&&y0.process,Te=function(){try{var Ce=z&&z.require&&z.require("util").types;return Ce||$&&$.binding&&$.binding("util")}catch(et){}}(),ge=Te&&Te.isArrayBuffer,Re=Te&&Te.isDate,Z=Te&&Te.isMap,ke=Te&&Te.isRegExp,Qe=Te&&Te.isSet,ht=Te&&Te.isTypedArray;function ue(Ce,et,Ye){switch(Ye.length){case 0:return Ce.call(et);case 1:return Ce.call(et,Ye[0]);case 2:return Ce.call(et,Ye[0],Ye[1]);case 3:return Ce.call(et,Ye[0],Ye[1],Ye[2])}return Ce.apply(et,Ye)}function He(Ce,et,Ye,Yt){for(var Kt=-1,pr=Ce==null?0:Ce.length;++Kt-1}function rn(Ce,et,Ye){for(var Yt=-1,Kt=Ce==null?0:Ce.length;++Yt-1;);return Ye}function Sl(Ce,et){for(var Ye=Ce.length;Ye--&&Dt(et,Ce[Ye],0)>-1;);return Ye}function vf(Ce,et){for(var Ye=Ce.length,Yt=0;Ye--;)Ce[Ye]===et&&++Yt;return Yt}var Po=Jn(Zl),ys=Jn(oa);function js(Ce){return"\\"+bs[Ce]}function Io(Ce,et){return Ce==null?i:Ce[et]}function bo(Ce){return ms.test(Ce)}function gs(Ce){return S0.test(Ce)}function Qu(Ce){for(var et,Ye=[];!(et=Ce.next()).done;)Ye.push(et.value);return Ye}function Tu(Ce){var et=-1,Ye=Array(Ce.size);return Ce.forEach(function(Yt,Kt){Ye[++et]=[Kt,Yt]}),Ye}function Ei(Ce,et){return function(Ye){return Ce(et(Ye))}}function C0(Ce,et){for(var Ye=-1,Yt=Ce.length,Kt=0,pr=[];++Ye-1}function fa(d,v){var x=this.__data__,P=ts(x,d);return P<0?(++this.size,x.push([d,v])):x[P][1]=v,this}ro.prototype.clear=Ba,ro.prototype.delete=_f,ro.prototype.get=fc,ro.prototype.has=Ds,ro.prototype.set=fa;function U0(d){var v=-1,x=d==null?0:d.length;for(this.clear();++v=v?d:v)),d}function j0(d,v,x,P,q,ee){var de,_e=v&C,Ie=v&U,Et=v&H;if(x&&(de=q?x(d,P,q,ee):x(d)),de!==i)return de;if(!bu(d))return d;var St=tr(d);if(St){if(de=Cs(d),!_e)return iu(d,de)}else{var At=Iu(d),on=At==Vt||At==Er;if(Js(d))return vc(d,_e);if(At==vr||At==ct||on&&!q){if(de=Ie||on?{}:Ec(d),!_e)return Ie?ns(d,ul(de,d)):o0(d,Ef(de,d))}else{if(!$r[At])return q?d:{};de=Dh(d,At,_e)}}ee||(ee=new il);var kn=ee.get(d);if(kn)return kn;ee.set(d,de),Id(d)?d.forEach(function(ar){de.add(j0(ar,v,x,ar,d,ee))}):Ep(d)&&d.forEach(function(ar,ui){de.set(ui,j0(ar,v,x,ui,d,ee))});var rr=Et?Ie?sr:n1:Ie?dn:N0,br=St?i:rr(d);return nt(br||d,function(ar,ui){br&&(ui=ar,ar=d[ui]),Ss(de,ui,j0(ar,v,x,ui,d,ee))}),de}function Df(d){var v=N0(d);return function(x){return qc(x,d,v)}}function qc(d,v,x){var P=x.length;if(d==null)return!P;for(d=xn(d);P--;){var q=x[P],ee=v[q],de=d[q];if(de===i&&!(q in d)||!ee(de))return!1}return!0}function dc(d,v,x){if(typeof d!="function")throw new ti(_);return Qa(function(){d.apply(i,x)},v)}function Al(d,v,x,P){var q=-1,ee=sn,de=!0,_e=d.length,Ie=[],Et=v.length;if(!_e)return Ie;x&&(v=Lt(v,_i(x))),P?(ee=rn,de=!1):v.length>=a&&(ee=nl,de=!1,v=new mo(v));e:for(;++q<_e;){var St=d[q],At=x==null?St:x(St);if(St=P||St!==0?St:0,de&&At===At){for(var on=Et;on--;)if(v[on]===At)continue e;Ie.push(St)}else ee(v,At,P)||Ie.push(St)}return Ie}var Ts=al(R),da=al(F,!0);function ud(d,v){var x=!0;return Ts(d,function(P,q,ee){return x=!!v(P,q,ee),x}),x}function pa(d,v,x){for(var P=-1,q=d.length;++Pq?0:q+x),P=P===i||P>q?q:Mr(P),P<0&&(P+=q),P=x>P?0:wp(P);x0&&x(_e)?v>1?qi(_e,v-1,x,P,q):Dn(q,_e):P||(q[q.length]=_e)}return q}var g=yc(),y=yc(!0);function R(d,v){return d&&g(d,v,N0)}function F(d,v){return d&&y(d,v,N0)}function b(d,v){return It(v,function(x){return xa(d[x])})}function J(d,v){v=Ws(v,d);for(var x=0,P=v.length;d!=null&&xv}function kt(d,v){return d!=null&&li.call(d,v)}function xr(d,v){return d!=null&&v in xn(d)}function i0(d,v,x){return d>=Kn(v,x)&&d=120&&St.length>=120)?new mo(de&&St):i}St=d[0];var At=-1,on=_e[0];e:for(;++At-1;)_e!==d&&O0.call(_e,Ie,1),O0.call(d,Ie,1);return d}function sd(d,v){for(var x=d?v.length:0,P=x-1;x--;){var q=v[x];if(x==P||q!==ee){var ee=q;Eo(q)?O0.call(d,q,1):R2(d,q)}}return d}function ad(d,v){return d+Es(E0()*(v-d+1))}function T2(d,v,x,P){for(var q=-1,ee=ni($u((v-d)/(x||1)),0),de=Ye(ee);ee--;)de[P?ee:++q]=d,d+=x;return de}function Gc(d,v){var x="";if(!d||v<1||v>Jt)return x;do v%2&&(x+=d),v=Es(v/2),v&&(d+=d);while(v);return x}function Ir(d,v){return o1(F2(d,v,s0),d+"")}function fd(d){return za(Nc(d))}function cd(d,v){var x=Nc(d);return wc(x,r0(v,0,x.length))}function Ga(d,v,x,P){if(!bu(d))return d;v=Ws(v,d);for(var q=-1,ee=v.length,de=ee-1,_e=d;_e!=null&&++qq?0:q+v),x=x>q?q:x,x<0&&(x+=q),q=v>x?0:x-v>>>0,v>>>=0;for(var ee=Ye(q);++P>>1,de=d[ee];de!==null&&!bl(de)&&(x?de<=v:de=a){var Et=v?null:rm(d);if(Et)return Z0(Et);de=!1,q=nl,Ie=new mo}else Ie=v?[]:_e;e:for(;++P=P?d:ll(d,v,x)}var Jc=_s||function(d){return ji.clearTimeout(d)};function vc(d,v){if(v)return d.slice();var x=d.length,P=Hi?Hi(x):new d.constructor(x);return d.copy(P),P}function mc(d){var v=new d.constructor(d.byteLength);return new A0(v).set(new A0(d)),v}function pd(d,v){var x=v?mc(d.buffer):d.buffer;return new d.constructor(x,d.byteOffset,d.byteLength)}function yh(d){var v=new d.constructor(d.source,Mo.exec(d));return v.lastIndex=d.lastIndex,v}function Tf(d){return Ar?xn(Ar.call(d)):{}}function Zc(d,v){var x=v?mc(d.buffer):d.buffer;return new d.constructor(x,d.byteOffset,d.length)}function gh(d,v){if(d!==v){var x=d!==i,P=d===null,q=d===d,ee=bl(d),de=v!==i,_e=v===null,Ie=v===v,Et=bl(v);if(!_e&&!Et&&!ee&&d>v||ee&&de&&Ie&&!_e&&!Et||P&&de&&Ie||!x&&Ie||!q)return 1;if(!P&&!ee&&!Et&&d=_e)return Ie;var Et=x[P];return Ie*(Et=="desc"?-1:1)}}return d.index-v.index}function Vs(d,v,x,P){for(var q=-1,ee=d.length,de=x.length,_e=-1,Ie=v.length,Et=ni(ee-de,0),St=Ye(Ie+Et),At=!P;++_e1?x[q-1]:i,de=q>2?x[2]:i;for(ee=d.length>3&&typeof ee=="function"?(q--,ee):i,de&&oo(x[0],x[1],de)&&(ee=q<3?i:ee,q=1),v=xn(v);++P-1?q[ee?v[de]:de]:i}}function e1(d){return fl(function(v){var x=v.length,P=x,q=Vr.prototype.thru;for(d&&v.reverse();P--;){var ee=v[P];if(typeof ee!="function")throw new ti(_);if(q&&!de&&Ho(ee)=="wrapper")var de=new Vr([],!0)}for(P=de?P:x;++P1&&di.reverse(),St&&Ie_e))return!1;var Et=ee.get(d),St=ee.get(v);if(Et&&St)return Et==v&&St==d;var At=-1,on=!0,kn=x&ne?new mo:i;for(ee.set(d,v),ee.set(v,d);++At<_e;){var rr=d[At],br=v[At];if(P)var ar=de?P(br,rr,At,v,d,ee):P(rr,br,At,d,v,ee);if(ar!==i){if(ar)continue;on=!1;break}if(kn){if(!Cr(v,function(ui,di){if(!nl(kn,di)&&(rr===ui||q(rr,ui,x,P,ee)))return kn.push(di)})){on=!1;break}}else if(!(rr===br||q(rr,br,x,P,ee))){on=!1;break}}return ee.delete(d),ee.delete(v),on}function Eh(d,v,x,P,q,ee,de){switch(x){case Zo:if(d.byteLength!=v.byteLength||d.byteOffset!=v.byteOffset)return!1;d=d.buffer,v=v.buffer;case Jo:return!(d.byteLength!=v.byteLength||!ee(new A0(d),new A0(v)));case an:case Mn:case jt:return wo(+d,+v);case ln:return d.name==v.name&&d.message==v.message;case zr:case wu:return d==v+"";case w:var _e=Tu;case Xt:var Ie=P&W;if(_e||(_e=Z0),d.size!=v.size&&!Ie)return!1;var Et=de.get(d);if(Et)return Et==v;P|=ne,de.set(d,v);var St=Of(_e(d),_e(v),P,q,ee,de);return de.delete(d),St;case d0:if(Ar)return Ar.call(d)==Ar.call(v)}return!1}function um(d,v,x,P,q,ee){var de=x&W,_e=n1(d),Ie=_e.length,Et=n1(v),St=Et.length;if(Ie!=St&&!de)return!1;for(var At=Ie;At--;){var on=_e[At];if(!(de?on in v:li.call(v,on)))return!1}var kn=ee.get(d),rr=ee.get(v);if(kn&&rr)return kn==v&&rr==d;var br=!0;ee.set(d,v),ee.set(v,d);for(var ar=de;++At1?"& ":"")+v[P],v=v.join(x>2?", ":" "),d.replace(gi,`{ -/* [wrapped with `+v+`] */ -`)}function is(d){return tr(d)||dl(d)||!!(ho&&d&&d[ho])}function Eo(d,v){var x=typeof d;return v=v==null?Jt:v,!!v&&(x=="number"||x!="symbol"&&Is.test(d))&&d>-1&&d%1==0&&d0){if(++v>=yt)return arguments[0]}else v=0;return d.apply(i,arguments)}}function wc(d,v){var x=-1,P=d.length,q=P-1;for(v=v===i?P:v;++x1?d[v-1]:i;return x=typeof x=="function"?(d.pop(),x):i,Sd(d,x)});function Bh(d){var v=Y(d);return v.__chain__=!0,v}function Uh(d,v){return v(d),d}function y1(d,v){return v(d)}var Z2=fl(function(d){var v=d.length,x=v?d[0]:0,P=this.__wrapped__,q=function(ee){return qa(ee,d)};return v>1||this.__actions__.length||!(P instanceof at)||!Eo(x)?this.thru(q):(P=P.slice(x,+x+(v?1:0)),P.__actions__.push({func:y1,args:[q],thisArg:i}),new Vr(P,this.__chain__).thru(function(ee){return v&&!ee.length&&ee.push(i),ee}))});function jh(){return Bh(this)}function $2(){return new Vr(this.value(),this.__chain__)}function zh(){this.__values__===i&&(this.__values__=lv(this.value()));var d=this.__index__>=this.__values__.length,v=d?i:this.__values__[this.__index__++];return{done:d,value:v}}function dm(){return this}function pm(d){for(var v,x=this;x instanceof ii;){var P=I2(x);P.__index__=0,P.__values__=i,v?q.__wrapped__=P:v=P;var q=P;x=x.__wrapped__}return q.__wrapped__=d,v}function Pf(){var d=this.__wrapped__;if(d instanceof at){var v=d;return this.__actions__.length&&(v=new at(this)),v=v.reverse(),v.__actions__.push({func:y1,args:[V2],thisArg:i}),new Vr(v,this.__chain__)}return this.thru(V2)}function If(){return mh(this.__wrapped__,this.__actions__)}var Td=Ya(function(d,v,x){li.call(d,x)?++d[x]:Gu(d,x,1)});function hm(d,v,x){var P=tr(d)?Mt:ud;return x&&oo(d,v,x)&&(v=i),P(d,Vn(v,3))}function ep(d,v){var x=tr(d)?It:Wc;return x(d,Vn(v,3))}var Cd=kl(j2),tp=kl(s1);function Hh(d,v){return qi(g1(d,v),1)}function np(d,v){return qi(g1(d,v),Ft)}function qh(d,v,x){return x=x===i?1:Mr(x),qi(g1(d,v),x)}function Wh(d,v){var x=tr(d)?nt:Ts;return x(d,Vn(v,3))}function rp(d,v){var x=tr(d)?Ct:da;return x(d,Vn(v,3))}var vm=Ya(function(d,v,x){li.call(d,x)?d[x].push(v):Gu(d,x,[v])});function mm(d,v,x,P){d=pl(d)?d:Nc(d),x=x&&!P?Mr(x):0;var q=d.length;return x<0&&(x=ni(q+x,0)),w1(d)?x<=q&&d.indexOf(v,x)>-1:!!q&&Dt(d,v,x)>-1}var ym=Ir(function(d,v,x){var P=-1,q=typeof v=="function",ee=pl(d)?Ye(d.length):[];return Ts(d,function(de){ee[++P]=q?ue(v,de,x):Ol(de,v,x)}),ee}),Vh=Ya(function(d,v,x){Gu(d,x,v)});function g1(d,v){var x=tr(d)?Lt:w2;return x(d,Vn(v,3))}function gm(d,v,x,P){return d==null?[]:(tr(v)||(v=v==null?[]:[v]),x=P?i:x,tr(x)||(x=x==null?[]:[x]),yo(d,v,x))}var ip=Ya(function(d,v,x){d[x?0:1].push(v)},function(){return[[],[]]});function up(d,v,x){var P=tr(d)?dr:wr,q=arguments.length<3;return P(d,Vn(v,4),x,q,Ts)}function _m(d,v,x){var P=tr(d)?er:wr,q=arguments.length<3;return P(d,Vn(v,4),x,q,da)}function Em(d,v){var x=tr(d)?It:Wc;return x(d,Ad(Vn(v,3)))}function Gh(d){var v=tr(d)?za:fd;return v(d)}function Dm(d,v,x){(x?oo(d,v,x):v===i)?v=1:v=Mr(v);var P=tr(d)?Ha:cd;return P(d,v)}function wm(d){var v=tr(d)?ca:ol;return v(d)}function op(d){if(d==null)return 0;if(pl(d))return w1(d)?tu(d):d.length;var v=Iu(d);return v==w||v==Xt?d.size:Wa(d).length}function lp(d,v,x){var P=tr(d)?Cr:hh;return x&&oo(d,v,x)&&(v=i),P(d,Vn(v,3))}var Ta=Ir(function(d,v){if(d==null)return[];var x=v.length;return x>1&&oo(d,v[0],v[1])?v=[]:x>2&&oo(v[0],v[1],v[2])&&(v=[v[0]]),yo(d,qi(v,1),[])}),_1=aa||function(){return ji.Date.now()};function sp(d,v){if(typeof v!="function")throw new ti(_);return d=Mr(d),function(){if(--d<1)return v.apply(this,arguments)}}function Yh(d,v,x){return v=x?i:v,v=d&&v==null?d.length:v,hn(d,me,i,i,i,i,v)}function xd(d,v){var x;if(typeof v!="function")throw new ti(_);return d=Mr(d),function(){return--d>0&&(x=v.apply(this,arguments)),d<=1&&(v=i),x}}var E1=Ir(function(d,v,x){var P=m;if(x.length){var q=C0(x,yr(E1));P|=De}return hn(d,P,v,x,q)}),Kh=Ir(function(d,v,x){var P=m|he;if(x.length){var q=C0(x,yr(Kh));P|=De}return hn(v,P,d,x,q)});function ap(d,v,x){v=x?i:v;var P=hn(d,ve,i,i,i,i,i,v);return P.placeholder=ap.placeholder,P}function Xh(d,v,x){v=x?i:v;var P=hn(d,se,i,i,i,i,i,v);return P.placeholder=Xh.placeholder,P}function fp(d,v,x){var P,q,ee,de,_e,Ie,Et=0,St=!1,At=!1,on=!0;if(typeof d!="function")throw new ti(_);v=hl(v)||0,bu(x)&&(St=!!x.leading,At="maxWait"in x,ee=At?ni(hl(x.maxWait)||0,v):ee,on="trailing"in x?!!x.trailing:on);function kn(a0){var Os=P,To=q;return P=q=i,Et=a0,de=d.apply(To,Os),de}function rr(a0){return Et=a0,_e=Qa(ui,v),St?kn(a0):de}function br(a0){var Os=a0-Ie,To=a0-Et,Av=v-Os;return At?Kn(Av,ee-To):Av}function ar(a0){var Os=a0-Ie,To=a0-Et;return Ie===i||Os>=v||Os<0||At&&To>=ee}function ui(){var a0=_1();if(ar(a0))return di(a0);_e=Qa(ui,br(a0))}function di(a0){return _e=i,on&&P?kn(a0):(P=q=i,de)}function jl(){_e!==i&&Jc(_e),Et=0,P=Ie=q=_e=i}function Zi(){return _e===i?de:di(_1())}function lo(){var a0=_1(),Os=ar(a0);if(P=arguments,q=this,Ie=a0,Os){if(_e===i)return rr(Ie);if(At)return Jc(_e),_e=Qa(ui,v),kn(Ie)}return _e===i&&(_e=Qa(ui,v)),de}return lo.cancel=jl,lo.flush=Zi,lo}var Qh=Ir(function(d,v){return dc(d,1,v)}),Jh=Ir(function(d,v,x){return dc(d,hl(v)||0,x)});function cp(d){return hn(d,Oe)}function Rd(d,v){if(typeof d!="function"||v!=null&&typeof v!="function")throw new ti(_);var x=function(){var P=arguments,q=v?v.apply(this,P):P[0],ee=x.cache;if(ee.has(q))return ee.get(q);var de=d.apply(this,P);return x.cache=ee.set(q,de)||ee,de};return x.cache=new(Rd.Cache||U0),x}Rd.Cache=U0;function Ad(d){if(typeof d!="function")throw new ti(_);return function(){var v=arguments;switch(v.length){case 0:return!d.call(this);case 1:return!d.call(this,v[0]);case 2:return!d.call(this,v[0],v[1]);case 3:return!d.call(this,v[0],v[1],v[2])}return!d.apply(this,v)}}function H0(d){return xd(2,d)}var Od=M2(function(d,v){v=v.length==1&&tr(v[0])?Lt(v[0],_i(Vn())):Lt(qi(v,1),_i(Vn()));var x=v.length;return Ir(function(P){for(var q=-1,ee=Kn(P.length,x);++q=v}),dl=u0(function(){return arguments}())?u0:function(d){return Yu(d)&&li.call(d,"callee")&&!B0.call(d,"callee")},tr=Ye.isArray,Qs=ge?_i(ge):Ve;function pl(d){return d!=null&&Fd(d.length)&&!xa(d)}function l0(d){return Yu(d)&&pl(d)}function ev(d){return d===!0||d===!1||Yu(d)&&mt(d)==an}var Js=to||Up,mp=Re?_i(Re):Ue;function Rm(d){return Yu(d)&&d.nodeType===1&&!Cc(d)}function tv(d){if(d==null)return!0;if(pl(d)&&(tr(d)||typeof d=="string"||typeof d.splice=="function"||Js(d)||Ra(d)||dl(d)))return!d.length;var v=Iu(d);if(v==w||v==Xt)return!d.size;if(Nf(d))return!Wa(d).length;for(var x in d)if(li.call(d,x))return!1;return!0}function yp(d,v){return lt(d,v)}function Am(d,v,x){x=typeof x=="function"?x:i;var P=x?x(d,v):i;return P===i?lt(d,v,i,x):!!P}function gp(d){if(!Yu(d))return!1;var v=mt(d);return v==ln||v==lr||typeof d.message=="string"&&typeof d.name=="string"&&!Cc(d)}function Tc(d){return typeof d=="number"&&nu(d)}function xa(d){if(!bu(d))return!1;var v=mt(d);return v==Vt||v==Er||v==nn||v==fr}function _p(d){return typeof d=="number"&&d==Mr(d)}function Fd(d){return typeof d=="number"&&d>-1&&d%1==0&&d<=Jt}function bu(d){var v=typeof d;return d!=null&&(v=="object"||v=="function")}function Yu(d){return d!=null&&typeof d=="object"}var Ep=Z?_i(Z):Wn;function Dp(d,v){return d===v||si(d,v,jn(v))}function nv(d,v,x){return x=typeof x=="function"?x:i,si(d,v,jn(v),x)}function Om(d){return rv(d)&&d!=+d}function Mm(d){if(Nl(d))throw new Kt(p);return ur(d)}function km(d){return d===null}function Pd(d){return d==null}function rv(d){return typeof d=="number"||Yu(d)&&mt(d)==jt}function Cc(d){if(!Yu(d)||mt(d)!=vr)return!1;var v=rl(d);if(v===null)return!0;var x=li.call(v,"constructor")&&v.constructor;return typeof x=="function"&&x instanceof x&&Fu.call(x)==sa}var D1=ke?_i(ke):ci;function Nm(d){return _p(d)&&d>=-Jt&&d<=Jt}var Id=Qe?_i(Qe):Qi;function w1(d){return typeof d=="string"||!tr(d)&&Yu(d)&&mt(d)==wu}function bl(d){return typeof d=="symbol"||Yu(d)&&mt(d)==d0}var Ra=ht?_i(ht):Gr;function iv(d){return d===i}function Lm(d){return Yu(d)&&Iu(d)==Qo}function uv(d){return Yu(d)&&mt(d)==Fs}var ov=md(od),Fm=md(function(d,v){return d<=v});function lv(d){if(!d)return[];if(pl(d))return w1(d)?ei(d):iu(d);if(Pu&&d[Pu])return Qu(d[Pu]());var v=Iu(d),x=v==w?Tu:v==Xt?Z0:Nc;return x(d)}function Aa(d){if(!d)return d===0?d:0;if(d=hl(d),d===Ft||d===-Ft){var v=d<0?-1:1;return v*rt}return d===d?d:0}function Mr(d){var v=Aa(d),x=v%1;return v===v?x?v-x:v:0}function wp(d){return d?r0(Mr(d),0,fe):0}function hl(d){if(typeof d=="number")return d;if(bl(d))return Q;if(bu(d)){var v=typeof d.valueOf=="function"?d.valueOf():d;d=bu(v)?v+"":v}if(typeof d!="string")return d===0?d:+d;d=Lu(d);var x=so.test(d);return x||ko.test(d)?Bs(d.slice(2),x?2:8):ai.test(d)?Q:+d}function gu(d){return M0(d,dn(d))}function S1(d){return d?r0(Mr(d),-Jt,Jt):d===0?d:0}function Ui(d){return d==null?"":sl(d)}var Sp=io(function(d,v){if(Nf(v)||pl(v)){M0(v,N0(v),d);return}for(var x in v)li.call(v,x)&&Ss(d,x,v[x])}),bd=io(function(d,v){M0(v,dn(v),d)}),So=io(function(d,v,x,P){M0(v,dn(v),d,P)}),As=io(function(d,v,x,P){M0(v,N0(v),d,P)}),bf=fl(qa);function Bd(d,v){var x=ri(d);return v==null?x:Ef(x,v)}var Tp=Ir(function(d,v){d=xn(d);var x=-1,P=v.length,q=P>2?v[2]:i;for(q&&oo(v[0],v[1],q)&&(P=1);++x1),ee}),M0(d,sr(d),x),P&&(x=j0(x,C|U|H,im));for(var q=v.length;q--;)R2(x,v[q]);return x});function R1(d,v){return ef(d,Ad(Vn(v)))}var Rp=fl(function(d,v){return d==null?{}:dh(d,v)});function ef(d,v){if(d==null)return{};var x=Lt(sr(d),function(P){return[P]});return v=Vn(v),ph(d,x,function(P,q){return v(P,q[0])})}function Pm(d,v,x){v=Ws(v,d);var P=-1,q=v.length;for(q||(q=1,d=i);++Pv){var P=d;d=v,v=P}if(x||d%1||v%1){var q=E0();return Kn(d+q*(v-d+ba("1e-"+((q+"").length-1))),v)}return ad(d,v)}var Vd=Cf(function(d,v,x){return v=v.toLowerCase(),d+(x?qo(v):v)});function qo(d){return Mp(Ui(d).toLowerCase())}function Gd(d){return d=Ui(d),d&&d.replace($n,Po).replace(Q0,"")}function bm(d,v,x){d=Ui(d),v=sl(v);var P=d.length;x=x===i?P:r0(Mr(x),0,P);var q=x;return x-=v.length,x>=0&&d.slice(x,q)==v}function M1(d){return d=Ui(d),d&&Ps.test(d)?d.replace(su,ys):d}function Bm(d){return d=Ui(d),d&&en.test(d)?d.replace(yi,"\\$&"):d}var Um=Cf(function(d,v,x){return d+(x?"-":"")+v.toLowerCase()}),av=Cf(function(d,v,x){return d+(x?" ":"")+v.toLowerCase()}),jm=_h("toLowerCase");function fv(d,v,x){d=Ui(d),v=Mr(v);var P=v?tu(d):0;if(!v||P>=v)return d;var q=(v-P)/2;return ga(Es(q),x)+d+ga($u(q),x)}function zm(d,v,x){d=Ui(d),v=Mr(v);var P=v?tu(d):0;return v&&P>>0,x?(d=Ui(d),d&&(typeof v=="string"||v!=null&&!D1(v))&&(v=sl(v),!v&&bo(d))?va(ei(d),0,x):d.split(v,x)):[]}var zf=Cf(function(d,v,x){return d+(x?" ":"")+Mp(v)});function dv(d,v,x){return d=Ui(d),x=x==null?0:r0(Mr(x),0,d.length),v=sl(v),d.slice(x,x+v.length)==v}function pv(d,v,x){var P=Y.templateSettings;x&&oo(d,v,x)&&(v=i),d=Ui(d),v=So({},v,P,Rf);var q=So({},v.imports,P.imports,Rf),ee=N0(q),de=Fo(q,ee),_e,Ie,Et=0,St=v.interpolate||el,At="__p += '",on=yu((v.escape||el).source+"|"+St.source+"|"+(St===p0?Xl:el).source+"|"+(v.evaluate||el).source+"|$","g"),kn="//# sourceURL="+(li.call(v,"sourceURL")?(v.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++ac+"]")+` -`;d.replace(on,function(ar,ui,di,jl,Zi,lo){return di||(di=jl),At+=d.slice(Et,lo).replace(ao,js),ui&&(_e=!0,At+=`' + -__e(`+ui+`) + -'`),Zi&&(Ie=!0,At+=`'; -`+Zi+`; -__p += '`),di&&(At+=`' + -((__t = (`+di+`)) == null ? '' : __t) + -'`),Et=lo+ar.length,ar}),At+=`'; -`;var rr=li.call(v,"variable")&&v.variable;if(!rr)At=`with (obj) { -`+At+` -} -`;else if(X0.test(rr))throw new Kt(t);At=(Ie?At.replace(Xr,""):At).replace(Ao,"$1").replace(Oo,"$1;"),At="function("+(rr||"obj")+`) { -`+(rr?"":`obj || (obj = {}); -`)+"var __t, __p = ''"+(_e?", __e = _.escape":"")+(Ie?`, __j = Array.prototype.join; -function print() { __p += __j.call(arguments, '') } -`:`; -`)+At+`return __p -}`;var br=_v(function(){return pr(ee,kn+"return "+At).apply(i,de)});if(br.source=At,gp(br))throw br;return br}function hv(d){return Ui(d).toLowerCase()}function Yd(d){return Ui(d).toUpperCase()}function Kd(d,v,x){if(d=Ui(d),d&&(x||v===i))return Lu(d);if(!d||!(v=sl(v)))return d;var P=ei(d),q=ei(v),ee=hf(P,q),de=Sl(P,q)+1;return va(P,ee,de).join("")}function Op(d,v,x){if(d=Ui(d),d&&(x||v===i))return d.slice(0,po(d)+1);if(!d||!(v=sl(v)))return d;var P=ei(d),q=Sl(P,ei(v))+1;return va(P,0,q).join("")}function vv(d,v,x){if(d=Ui(d),d&&(x||v===i))return d.replace(bn,"");if(!d||!(v=sl(v)))return d;var P=ei(d),q=hf(P,ei(v));return va(P,q).join("")}function Xd(d,v){var x=je,P=qe;if(bu(v)){var q="separator"in v?v.separator:q;x="length"in v?Mr(v.length):x,P="omission"in v?sl(v.omission):P}d=Ui(d);var ee=d.length;if(bo(d)){var de=ei(d);ee=de.length}if(x>=ee)return d;var _e=x-tu(P);if(_e<1)return P;var Ie=de?va(de,0,_e).join(""):d.slice(0,_e);if(q===i)return Ie+P;if(de&&(_e+=Ie.length-_e),D1(q)){if(d.slice(_e).search(q)){var Et,St=Ie;for(q.global||(q=yu(q.source,Ui(Mo.exec(q))+"g")),q.lastIndex=0;Et=q.exec(St);)var At=Et.index;Ie=Ie.slice(0,At===i?_e:At)}}else if(d.indexOf(sl(q),_e)!=_e){var on=Ie.lastIndexOf(q);on>-1&&(Ie=Ie.slice(0,on))}return Ie+P}function mv(d){return d=Ui(d),d&&ki.test(d)?d.replace(F0,Bi):d}var yv=Cf(function(d,v,x){return d+(x?" ":"")+v.toUpperCase()}),Mp=_h("toUpperCase");function gv(d,v,x){return d=Ui(d),v=x?i:v,v===i?gs(d)?yf(d):g0(d):d.match(v)||[]}var _v=Ir(function(d,v){try{return ue(d,i,v)}catch(x){return gp(x)?x:new Kt(x)}}),Gm=fl(function(d,v){return nt(v,function(x){x=Ll(x),Gu(d,x,E1(d[x],d))}),d});function Ev(d){var v=d==null?0:d.length,x=Vn();return d=v?Lt(d,function(P){if(typeof P[1]!="function")throw new ti(_);return[x(P[0]),P[1]]}):[],Ir(function(P){for(var q=-1;++qJt)return[];var x=fe,P=Kn(d,fe);v=Vn(v),d-=fe;for(var q=T0(P,v);++x0||v<0)?new at(x):(d<0?x=x.takeRight(-d):d&&(x=x.drop(d)),v!==i&&(v=Mr(v),x=v<0?x.dropRight(-v):x.take(v-d)),x)},at.prototype.takeRightWhile=function(d){return this.reverse().takeWhile(d).reverse()},at.prototype.toArray=function(){return this.take(fe)},R(at.prototype,function(d,v){var x=/^(?:filter|find|map|reject)|While$/.test(v),P=/^(?:head|last)$/.test(v),q=Y[P?"take"+(v=="last"?"Right":""):v],ee=P||/^find/.test(v);!q||(Y.prototype[v]=function(){var de=this.__wrapped__,_e=P?[1]:arguments,Ie=de instanceof at,Et=_e[0],St=Ie||tr(de),At=function(ui){var di=q.apply(Y,Dn([ui],_e));return P&&on?di[0]:di};St&&x&&typeof Et=="function"&&Et.length!=1&&(Ie=St=!1);var on=this.__chain__,kn=!!this.__actions__.length,rr=ee&&!on,br=Ie&&!kn;if(!ee&&St){de=br?de:new at(this);var ar=d.apply(de,_e);return ar.__actions__.push({func:y1,args:[At],thisArg:i}),new Vr(ar,on)}return rr&&br?d.apply(this,_e):(ar=this.thru(At),rr?P?ar.value()[0]:ar.value():ar)})}),nt(["pop","push","shift","sort","splice","unshift"],function(d){var v=Jr[d],x=/^(?:push|sort|unshift)$/.test(d)?"tap":"thru",P=/^(?:pop|shift)$/.test(d);Y.prototype[d]=function(){var q=arguments;if(P&&!this.__chain__){var ee=this.value();return v.apply(tr(ee)?ee:[],q)}return this[x](function(de){return v.apply(tr(de)?de:[],q)})}}),R(at.prototype,function(d,v){var x=Y[v];if(x){var P=x.name+"";li.call(On,P)||(On[P]=[]),On[P].push({name:v,func:x})}}),On[ya(i,he).name]=[{name:"wrapper",func:i}],at.prototype.clone=Di,at.prototype.reverse=ru,at.prototype.value=D0,Y.prototype.at=Z2,Y.prototype.chain=jh,Y.prototype.commit=$2,Y.prototype.next=zh,Y.prototype.plant=pm,Y.prototype.reverse=Pf,Y.prototype.toJSON=Y.prototype.valueOf=Y.prototype.value=If,Y.prototype.first=Y.prototype.head,Pu&&(Y.prototype[Pu]=dm),Y},eo=$0();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(ji._=eo,define(function(){return eo})):z?((z.exports=eo)._=eo,B._=eo):ji._=eo}).call(zv)});var QE=tt((lH,XE)=>{"use strict";var Pi=XE.exports;XE.exports.default=Pi;var Du="[",Ly="]",Hv="\x07",w_=";",$8=process.env.TERM_PROGRAM==="Apple_Terminal";Pi.cursorTo=(i,o)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");return typeof o!="number"?Du+(i+1)+"G":Du+(o+1)+";"+(i+1)+"H"};Pi.cursorMove=(i,o)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");let a="";return i<0?a+=Du+-i+"D":i>0&&(a+=Du+i+"C"),o<0?a+=Du+-o+"A":o>0&&(a+=Du+o+"B"),a};Pi.cursorUp=(i=1)=>Du+i+"A";Pi.cursorDown=(i=1)=>Du+i+"B";Pi.cursorForward=(i=1)=>Du+i+"C";Pi.cursorBackward=(i=1)=>Du+i+"D";Pi.cursorLeft=Du+"G";Pi.cursorSavePosition=$8?"7":Du+"s";Pi.cursorRestorePosition=$8?"8":Du+"u";Pi.cursorGetPosition=Du+"6n";Pi.cursorNextLine=Du+"E";Pi.cursorPrevLine=Du+"F";Pi.cursorHide=Du+"?25l";Pi.cursorShow=Du+"?25h";Pi.eraseLines=i=>{let o="";for(let a=0;a[Ly,"8",w_,w_,o,Hv,i,Ly,"8",w_,w_,Hv].join("");Pi.image=(i,o={})=>{let a=`${Ly}1337;File=inline=1`;return o.width&&(a+=`;width=${o.width}`),o.height&&(a+=`;height=${o.height}`),o.preserveAspectRatio===!1&&(a+=";preserveAspectRatio=0"),a+":"+i.toString("base64")+Hv};Pi.iTerm={setCwd:(i=process.cwd())=>`${Ly}50;CurrentDir=${i}${Hv}`,annotation:(i,o={})=>{let a=`${Ly}1337;`,p=typeof o.x!="undefined",_=typeof o.y!="undefined";if((p||_)&&!(p&&_&&typeof o.length!="undefined"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return i=i.replace(/\|/g,""),a+=o.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",o.length>0?a+=(p?[i,o.length,o.x,o.y]:[o.length,i]).join("|"):a+=i,a+Hv}}});var tS=tt((sH,JE)=>{"use strict";var eS=(i,o)=>{for(let a of Reflect.ownKeys(o))Object.defineProperty(i,a,Object.getOwnPropertyDescriptor(o,a));return i};JE.exports=eS;JE.exports.default=eS});var rS=tt((aH,S_)=>{"use strict";var vP=tS(),T_=new WeakMap,nS=(i,o={})=>{if(typeof i!="function")throw new TypeError("Expected a function");let a,p=0,_=i.displayName||i.name||"",t=function(...k){if(T_.set(t,++p),p===1)a=i.apply(this,k),i=null;else if(o.throw===!0)throw new Error(`Function \`${_}\` can only be called once`);return a};return vP(t,i),T_.set(t,p),t};S_.exports=nS;S_.exports.default=nS;S_.exports.callCount=i=>{if(!T_.has(i))throw new Error(`The given function \`${i.name}\` is not wrapped by the \`onetime\` package`);return T_.get(i)}});var iS=tt((fH,C_)=>{C_.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&C_.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&C_.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var tD=tt((cH,Fy)=>{var mP=require("assert"),Py=iS(),yP=/^win/i.test(process.platform),x_=require("events");typeof x_!="function"&&(x_=x_.EventEmitter);var Gl;process.__signal_exit_emitter__?Gl=process.__signal_exit_emitter__:(Gl=process.__signal_exit_emitter__=new x_,Gl.count=0,Gl.emitted={});Gl.infinite||(Gl.setMaxListeners(Infinity),Gl.infinite=!0);Fy.exports=function(i,o){mP.equal(typeof i,"function","a callback must be provided for exit handler"),Iy===!1&&uS();var a="exit";o&&o.alwaysLast&&(a="afterexit");var p=function(){Gl.removeListener(a,i),Gl.listeners("exit").length===0&&Gl.listeners("afterexit").length===0&&ZE()};return Gl.on(a,i),p};Fy.exports.unload=ZE;function ZE(){!Iy||(Iy=!1,Py.forEach(function(i){try{process.removeListener(i,$E[i])}catch(o){}}),process.emit=eD,process.reallyExit=oS,Gl.count-=1)}function qv(i,o,a){Gl.emitted[i]||(Gl.emitted[i]=!0,Gl.emit(i,o,a))}var $E={};Py.forEach(function(i){$E[i]=function(){var a=process.listeners(i);a.length===Gl.count&&(ZE(),qv("exit",null,i),qv("afterexit",null,i),yP&&i==="SIGHUP"&&(i="SIGINT"),process.kill(process.pid,i))}});Fy.exports.signals=function(){return Py};Fy.exports.load=uS;var Iy=!1;function uS(){Iy||(Iy=!0,Gl.count+=1,Py=Py.filter(function(i){try{return process.on(i,$E[i]),!0}catch(o){return!1}}),process.emit=_P,process.reallyExit=gP)}var oS=process.reallyExit;function gP(i){process.exitCode=i||0,qv("exit",process.exitCode,null),qv("afterexit",process.exitCode,null),oS.call(process,process.exitCode)}var eD=process.emit;function _P(i,o){if(i==="exit"){o!==void 0&&(process.exitCode=o);var a=eD.apply(this,arguments);return qv("exit",process.exitCode,null),qv("afterexit",process.exitCode,null),a}else return eD.apply(this,arguments)}});var sS=tt((dH,lS)=>{"use strict";var EP=rS(),DP=tD();lS.exports=EP(()=>{DP(()=>{process.stderr.write("[?25h")},{alwaysLast:!0})})});var nD=tt(Wv=>{"use strict";var wP=sS(),R_=!1;Wv.show=(i=process.stderr)=>{!i.isTTY||(R_=!1,i.write("[?25h"))};Wv.hide=(i=process.stderr)=>{!i.isTTY||(wP(),R_=!0,i.write("[?25l"))};Wv.toggle=(i,o)=>{i!==void 0&&(R_=i),R_?Wv.show(o):Wv.hide(o)}});var dS=tt(by=>{"use strict";var aS=by&&by.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(by,"__esModule",{value:!0});var fS=aS(QE()),cS=aS(nD()),SP=(i,{showCursor:o=!1}={})=>{let a=0,p="",_=!1,t=k=>{!o&&!_&&(cS.default.hide(),_=!0);let L=k+` -`;L!==p&&(p=L,i.write(fS.default.eraseLines(a)+L),a=L.split(` -`).length)};return t.clear=()=>{i.write(fS.default.eraseLines(a)),p="",a=0},t.done=()=>{p="",a=0,o||(cS.default.show(),_=!1)},t};by.default={create:SP}});var hS=tt((vH,pS)=>{pS.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var yS=tt(Fa=>{"use strict";var vS=hS(),Uc=process.env;Object.defineProperty(Fa,"_vendors",{value:vS.map(function(i){return i.constant})});Fa.name=null;Fa.isPR=null;vS.forEach(function(i){var o=Array.isArray(i.env)?i.env:[i.env],a=o.every(function(p){return mS(p)});if(Fa[i.constant]=a,a)switch(Fa.name=i.name,typeof i.pr){case"string":Fa.isPR=!!Uc[i.pr];break;case"object":"env"in i.pr?Fa.isPR=i.pr.env in Uc&&Uc[i.pr.env]!==i.pr.ne:"any"in i.pr?Fa.isPR=i.pr.any.some(function(p){return!!Uc[p]}):Fa.isPR=mS(i.pr);break;default:Fa.isPR=null}});Fa.isCI=!!(Uc.CI||Uc.CONTINUOUS_INTEGRATION||Uc.BUILD_NUMBER||Uc.RUN_ID||Fa.name);function mS(i){return typeof i=="string"?!!Uc[i]:Object.keys(i).every(function(o){return Uc[o]===i[o]})}});var _S=tt((yH,gS)=>{"use strict";gS.exports=yS().isCI});var DS=tt((gH,ES)=>{"use strict";var TP=i=>{let o=new Set;do for(let a of Reflect.ownKeys(i))o.add([i,a]);while((i=Reflect.getPrototypeOf(i))&&i!==Object.prototype);return o};ES.exports=(i,{include:o,exclude:a}={})=>{let p=_=>{let t=k=>typeof k=="string"?_===k:k.test(_);return o?o.some(t):a?!a.some(t):!0};for(let[_,t]of TP(i.constructor.prototype)){if(t==="constructor"||!p(t))continue;let k=Reflect.getOwnPropertyDescriptor(_,t);k&&typeof k.value=="function"&&(i[t]=i[t].bind(i))}return i}});var AS=tt(ou=>{"use strict";Object.defineProperty(ou,"__esModule",{value:!0});var Vv,By,A_,O_,rD;typeof window=="undefined"||typeof MessageChannel!="function"?(Gv=null,iD=null,uD=function(){if(Gv!==null)try{var i=ou.unstable_now();Gv(!0,i),Gv=null}catch(o){throw setTimeout(uD,0),o}},wS=Date.now(),ou.unstable_now=function(){return Date.now()-wS},Vv=function(i){Gv!==null?setTimeout(Vv,0,i):(Gv=i,setTimeout(uD,0))},By=function(i,o){iD=setTimeout(i,o)},A_=function(){clearTimeout(iD)},O_=function(){return!1},rD=ou.unstable_forceFrameRate=function(){}):(M_=window.performance,oD=window.Date,SS=window.setTimeout,TS=window.clearTimeout,typeof console!="undefined"&&(CS=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof CS!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof M_=="object"&&typeof M_.now=="function"?ou.unstable_now=function(){return M_.now()}:(xS=oD.now(),ou.unstable_now=function(){return oD.now()-xS}),Uy=!1,jy=null,k_=-1,lD=5,sD=0,O_=function(){return ou.unstable_now()>=sD},rD=function(){},ou.unstable_forceFrameRate=function(i){0>i||125L_(k,a))O!==void 0&&0>L_(O,k)?(i[p]=O,i[L]=a,p=L):(i[p]=k,i[t]=a,p=t);else if(O!==void 0&&0>L_(O,a))i[p]=O,i[L]=a,p=L;else break e}}return o}return null}function L_(i,o){var a=i.sortIndex-o.sortIndex;return a!==0?a:i.id-o.id}var $f=[],c2=[],CP=1,Ls=null,ds=3,P_=!1,Zp=!1,zy=!1;function I_(i){for(var o=cf(c2);o!==null;){if(o.callback===null)F_(c2);else if(o.startTime<=i)F_(c2),o.sortIndex=o.expirationTime,fD($f,o);else break;o=cf(c2)}}function cD(i){if(zy=!1,I_(i),!Zp)if(cf($f)!==null)Zp=!0,Vv(dD);else{var o=cf(c2);o!==null&&By(cD,o.startTime-i)}}function dD(i,o){Zp=!1,zy&&(zy=!1,A_()),P_=!0;var a=ds;try{for(I_(o),Ls=cf($f);Ls!==null&&(!(Ls.expirationTime>o)||i&&!O_());){var p=Ls.callback;if(p!==null){Ls.callback=null,ds=Ls.priorityLevel;var _=p(Ls.expirationTime<=o);o=ou.unstable_now(),typeof _=="function"?Ls.callback=_:Ls===cf($f)&&F_($f),I_(o)}else F_($f);Ls=cf($f)}if(Ls!==null)var t=!0;else{var k=cf(c2);k!==null&&By(cD,k.startTime-o),t=!1}return t}finally{Ls=null,ds=a,P_=!1}}function RS(i){switch(i){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var xP=rD;ou.unstable_ImmediatePriority=1;ou.unstable_UserBlockingPriority=2;ou.unstable_NormalPriority=3;ou.unstable_IdlePriority=5;ou.unstable_LowPriority=4;ou.unstable_runWithPriority=function(i,o){switch(i){case 1:case 2:case 3:case 4:case 5:break;default:i=3}var a=ds;ds=i;try{return o()}finally{ds=a}};ou.unstable_next=function(i){switch(ds){case 1:case 2:case 3:var o=3;break;default:o=ds}var a=ds;ds=o;try{return i()}finally{ds=a}};ou.unstable_scheduleCallback=function(i,o,a){var p=ou.unstable_now();if(typeof a=="object"&&a!==null){var _=a.delay;_=typeof _=="number"&&0<_?p+_:p,a=typeof a.timeout=="number"?a.timeout:RS(i)}else a=RS(i),_=p;return a=_+a,i={id:CP++,callback:o,priorityLevel:i,startTime:_,expirationTime:a,sortIndex:-1},_>p?(i.sortIndex=_,fD(c2,i),cf($f)===null&&i===cf(c2)&&(zy?A_():zy=!0,By(cD,_-p))):(i.sortIndex=a,fD($f,i),Zp||P_||(Zp=!0,Vv(dD))),i};ou.unstable_cancelCallback=function(i){i.callback=null};ou.unstable_wrapCallback=function(i){var o=ds;return function(){var a=ds;ds=o;try{return i.apply(this,arguments)}finally{ds=a}}};ou.unstable_getCurrentPriorityLevel=function(){return ds};ou.unstable_shouldYield=function(){var i=ou.unstable_now();I_(i);var o=cf($f);return o!==Ls&&Ls!==null&&o!==null&&o.callback!==null&&o.startTime<=i&&o.expirationTime{"use strict";process.env.NODE_ENV!=="production"&&function(){"use strict";Object.defineProperty(Ii,"__esModule",{value:!0});var i=!1,o=!1,a=!0,p,_,t,k,L;if(typeof window=="undefined"||typeof MessageChannel!="function"){var O=null,C=null,U=function(){if(O!==null)try{var wt=Ii.unstable_now(),bt=!0;O(bt,wt),O=null}catch(Hn){throw setTimeout(U,0),Hn}},H=Date.now();Ii.unstable_now=function(){return Date.now()-H},p=function(wt){O!==null?setTimeout(p,0,wt):(O=wt,setTimeout(U,0))},_=function(wt,bt){C=setTimeout(wt,bt)},t=function(){clearTimeout(C)},k=function(){return!1},L=Ii.unstable_forceFrameRate=function(){}}else{var W=window.performance,ne=window.Date,m=window.setTimeout,he=window.clearTimeout;if(typeof console!="undefined"){var Ee=window.requestAnimationFrame,ve=window.cancelAnimationFrame;typeof Ee!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof ve!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")}if(typeof W=="object"&&typeof W.now=="function")Ii.unstable_now=function(){return W.now()};else{var se=ne.now();Ii.unstable_now=function(){return ne.now()-se}}var De=!1,pe=null,me=-1,ie=5,Oe=0,je=300,qe=!1;if(o&&navigator!==void 0&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0){var yt=navigator.scheduling;k=function(){var wt=Ii.unstable_now();return wt>=Oe?qe||yt.isInputPending()?!0:wt>=je:!1},L=function(){qe=!0}}else k=function(){return Ii.unstable_now()>=Oe},L=function(){};Ii.unstable_forceFrameRate=function(wt){if(wt<0||wt>125){console.error("forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported");return}wt>0?ie=Math.floor(1e3/wt):ie=5};var gt=function(){if(pe!==null){var wt=Ii.unstable_now();Oe=wt+ie;var bt=!0;try{var Hn=pe(bt,wt);Hn?ut.postMessage(null):(De=!1,pe=null)}catch(qr){throw ut.postMessage(null),qr}}else De=!1;qe=!1},Xe=new MessageChannel,ut=Xe.port2;Xe.port1.onmessage=gt,p=function(wt){pe=wt,De||(De=!0,ut.postMessage(null))},_=function(wt,bt){me=m(function(){wt(Ii.unstable_now())},bt)},t=function(){he(me),me=-1}}function We(wt,bt){var Hn=wt.length;wt.push(bt),rt(wt,bt,Hn)}function Ft(wt){var bt=wt[0];return bt===void 0?null:bt}function Jt(wt){var bt=wt[0];if(bt!==void 0){var Hn=wt.pop();return Hn!==bt&&(wt[0]=Hn,Q(wt,Hn,0)),bt}else return null}function rt(wt,bt,Hn){for(var qr=Hn;;){var Ki=Math.floor((qr-1)/2),Qr=wt[Ki];if(Qr!==void 0&&fe(Qr,bt)>0)wt[Ki]=bt,wt[qr]=Qr,qr=Ki;else return}}function Q(wt,bt,Hn){for(var qr=Hn,Ki=wt.length;qrfr){if(fr*=2,fr>jr){console.error("Scheduler Profiling: Event log exceeded maximum size. Don't forget to call `stopLoggingProfilingEvents()`."),Dr();return}var Hn=new Int32Array(fr*4);Hn.set(Xt),zr=Hn.buffer,Xt=Hn}Xt.set(wt,bt)}}function mi(){fr=vr,zr=new ArrayBuffer(fr*4),Xt=new Int32Array(zr),wu=0}function Dr(){var wt=zr;return fr=0,zr=null,Xt=null,wu=0,wt}function $o(wt,bt){a&&(Vt[Xn]++,Xt!==null&&lu([d0,bt*1e3,wt.id,wt.priorityLevel]))}function G0(wt,bt){a&&(Vt[Er]=xe,Vt[w]=0,Vt[Xn]--,Xt!==null&&lu([Ro,bt*1e3,wt.id]))}function Uu(wt,bt){a&&(Vt[Xn]--,Xt!==null&&lu([Fs,bt*1e3,wt.id]))}function Y0(wt,bt){a&&(Vt[Er]=xe,Vt[w]=0,Vt[Xn]--,Xt!==null&&lu([Qo,bt*1e3,wt.id]))}function Xr(wt,bt){a&&(an++,Vt[Er]=wt.priorityLevel,Vt[w]=wt.id,Vt[jt]=an,Xt!==null&&lu([Jo,bt*1e3,wt.id,an]))}function Ao(wt,bt){a&&(Vt[Er]=xe,Vt[w]=0,Vt[jt]=0,Xt!==null&&lu([Zo,bt*1e3,wt.id,an]))}function Oo(wt){a&&(Mn++,Xt!==null&&lu([qt,wt*1e3,Mn]))}function F0(wt){a&&Xt!==null&&lu([xi,wt*1e3,Mn])}var su=1073741823,ki=-1,Ps=250,Kl=5e3,P0=1e4,p0=su,Hr=[],Ri=[],K0=1,yi=!1,en=null,bn=ct,Ai=!1,gi=!1,Wt=!1;function Au(wt){for(var bt=Ft(Ri);bt!==null;){if(bt.callback===null)Jt(Ri);else if(bt.startTime<=wt)Jt(Ri),bt.sortIndex=bt.expirationTime,We(Hr,bt),a&&($o(bt,wt),bt.isQueued=!0);else return;bt=Ft(Ri)}}function eu(wt){if(Wt=!1,Au(wt),!gi)if(Ft(Hr)!==null)gi=!0,p(X0);else{var bt=Ft(Ri);bt!==null&&_(eu,bt.startTime-wt)}}function X0(wt,bt){a&&F0(bt),gi=!1,Wt&&(Wt=!1,t()),Ai=!0;var Hn=bn;try{if(a)try{return Yi(wt,bt)}catch(Qr){if(en!==null){var qr=Ii.unstable_now();Y0(en,qr),en.isQueued=!1}throw Qr}else return Yi(wt,bt)}finally{if(en=null,bn=Hn,Ai=!1,a){var Ki=Ii.unstable_now();Oo(Ki)}}}function Yi(wt,bt){var Hn=bt;for(Au(Hn),en=Ft(Hr);en!==null&&!(i&&yi)&&!(en.expirationTime>Hn&&(!wt||k()));){var qr=en.callback;if(qr!==null){en.callback=null,bn=en.priorityLevel;var Ki=en.expirationTime<=Hn;Xr(en,Hn);var Qr=qr(Ki);Hn=Ii.unstable_now(),typeof Qr=="function"?(en.callback=Qr,Ao(en,Hn)):(a&&(G0(en,Hn),en.isQueued=!1),en===Ft(Hr)&&Jt(Hr)),Au(Hn)}else Jt(Hr);en=Ft(Hr)}if(en!==null)return!0;var Ou=Ft(Ri);return Ou!==null&&_(eu,Ou.startTime-Hn),!1}function Xl(wt,bt){switch(wt){case oe:case ze:case ct:case Rt:case nn:break;default:wt=ct}var Hn=bn;bn=wt;try{return bt()}finally{bn=Hn}}function Mo(wt){var bt;switch(bn){case oe:case ze:case ct:bt=ct;break;default:bt=bn;break}var Hn=bn;bn=bt;try{return wt()}finally{bn=Hn}}function ai(wt){var bt=bn;return function(){var Hn=bn;bn=bt;try{return wt.apply(this,arguments)}finally{bn=Hn}}}function so(wt){switch(wt){case oe:return ki;case ze:return Ps;case nn:return p0;case Rt:return P0;case ct:default:return Kl}}function Ql(wt,bt,Hn){var qr=Ii.unstable_now(),Ki,Qr;if(typeof Hn=="object"&&Hn!==null){var Ou=Hn.delay;typeof Ou=="number"&&Ou>0?Ki=qr+Ou:Ki=qr,Qr=typeof Hn.timeout=="number"?Hn.timeout:so(wt)}else Qr=so(wt),Ki=qr;var h0=Ki+Qr,Ni={id:K0++,callback:bt,priorityLevel:wt,startTime:Ki,expirationTime:h0,sortIndex:-1};return a&&(Ni.isQueued=!1),Ki>qr?(Ni.sortIndex=Ki,We(Ri,Ni),Ft(Hr)===null&&Ni===Ft(Ri)&&(Wt?t():Wt=!0,_(eu,Ki-qr))):(Ni.sortIndex=h0,We(Hr,Ni),a&&($o(Ni,qr),Ni.isQueued=!0),!gi&&!Ai&&(gi=!0,p(X0))),Ni}function ko(){yi=!0}function Is(){yi=!1,!gi&&!Ai&&(gi=!0,p(X0))}function $n(){return Ft(Hr)}function el(wt){if(a&&wt.isQueued){var bt=Ii.unstable_now();Uu(wt,bt),wt.isQueued=!1}wt.callback=null}function ao(){return bn}function I0(){var wt=Ii.unstable_now();Au(wt);var bt=Ft(Hr);return bt!==en&&en!==null&&bt!==null&&bt.callback!==null&&bt.startTime<=wt&&bt.expirationTime{"use strict";process.env.NODE_ENV==="production"?pD.exports=AS():pD.exports=OS()});var MS=tt((wH,Hy)=>{Hy.exports=function i(o){"use strict";var a=Oy(),p=Mi(),_=b_();function t(g){for(var y="https://reactjs.org/docs/error-decoder.html?invariant="+g,R=1;RK0||(g.current=Ri[K0],Ri[K0]=null,K0--)}function en(g,y){K0++,Ri[K0]=g.current,g.current=y}var bn={},Ai={current:bn},gi={current:!1},Wt=bn;function Au(g,y){var R=g.type.contextTypes;if(!R)return bn;var F=g.stateNode;if(F&&F.__reactInternalMemoizedUnmaskedChildContext===y)return F.__reactInternalMemoizedMaskedChildContext;var b={},J;for(J in R)b[J]=y[J];return F&&(g=g.stateNode,g.__reactInternalMemoizedUnmaskedChildContext=y,g.__reactInternalMemoizedMaskedChildContext=b),b}function eu(g){return g=g.childContextTypes,g!=null}function X0(g){yi(gi,g),yi(Ai,g)}function Yi(g){yi(gi,g),yi(Ai,g)}function Xl(g,y,R){if(Ai.current!==bn)throw Error(t(168));en(Ai,y,g),en(gi,R,g)}function Mo(g,y,R){var F=g.stateNode;if(g=y.childContextTypes,typeof F.getChildContext!="function")return R;F=F.getChildContext();for(var b in F)if(!(b in g))throw Error(t(108,je(y)||"Unknown",b));return a({},R,{},F)}function ai(g){var y=g.stateNode;return y=y&&y.__reactInternalMemoizedMergedChildContext||bn,Wt=Ai.current,en(Ai,y,g),en(gi,gi.current,g),!0}function so(g,y,R){var F=g.stateNode;if(!F)throw Error(t(169));R?(y=Mo(g,y,Wt),F.__reactInternalMemoizedMergedChildContext=y,yi(gi,g),yi(Ai,g),en(Ai,y,g)):yi(gi,g),en(gi,R,g)}var Ql=_.unstable_runWithPriority,ko=_.unstable_scheduleCallback,Is=_.unstable_cancelCallback,$n=_.unstable_shouldYield,el=_.unstable_requestPaint,ao=_.unstable_now,I0=_.unstable_getCurrentPriorityLevel,wl=_.unstable_ImmediatePriority,No=_.unstable_UserBlockingPriority,wt=_.unstable_NormalPriority,bt=_.unstable_LowPriority,Hn=_.unstable_IdlePriority,qr={},Ki=el!==void 0?el:function(){},Qr=null,Ou=null,h0=!1,Ni=ao(),v0=1e4>Ni?ao:function(){return ao()-Ni};function hs(){switch(I0()){case wl:return 99;case No:return 98;case wt:return 97;case bt:return 96;case Hn:return 95;default:throw Error(t(332))}}function Tt(g){switch(g){case 99:return wl;case 98:return No;case 97:return wt;case 96:return bt;case 95:return Hn;default:throw Error(t(332))}}function fo(g,y){return g=Tt(g),Ql(g,y)}function tl(g,y,R){return g=Tt(g),ko(g,y,R)}function Jl(g){return Qr===null?(Qr=[g],Ou=ko(wl,vs)):Qr.push(g),qr}function ju(){if(Ou!==null){var g=Ou;Ou=null,Is(g)}vs()}function vs(){if(!h0&&Qr!==null){h0=!0;var g=0;try{var y=Qr;fo(99,function(){for(;g=y&&(po=!0),g.firstContext=null)}function ku(g,y){if(Mu!==g&&y!==!1&&y!==0)if((typeof y!="number"||y===1073741823)&&(Mu=g,y=1073741823),y={context:g,observedBits:y,next:null},Si===null){if(cr===null)throw Error(t(308));Si=y,cr.dependencies={expirationTime:0,firstContext:y,responders:null}}else Si=Si.next=y;return ln?g._currentValue:g._currentValue2}var co=!1;function qu(g){return{baseState:g,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Pa(g){return{baseState:g.baseState,firstUpdate:g.firstUpdate,lastUpdate:g.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function m0(g,y){return{expirationTime:g,suspenseConfig:y,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function ia(g,y){g.lastUpdate===null?g.firstUpdate=g.lastUpdate=y:(g.lastUpdate.next=y,g.lastUpdate=y)}function Q0(g,y){var R=g.alternate;if(R===null){var F=g.updateQueue,b=null;F===null&&(F=g.updateQueue=qu(g.memoizedState))}else F=g.updateQueue,b=R.updateQueue,F===null?b===null?(F=g.updateQueue=qu(g.memoizedState),b=R.updateQueue=qu(R.memoizedState)):F=g.updateQueue=Pa(b):b===null&&(b=R.updateQueue=Pa(F));b===null||F===b?ia(F,y):F.lastUpdate===null||b.lastUpdate===null?(ia(F,y),ia(b,y)):(ia(F,y),b.lastUpdate=y)}function ua(g,y){var R=g.updateQueue;R=R===null?g.updateQueue=qu(g.memoizedState):Ia(g,R),R.lastCapturedUpdate===null?R.firstCapturedUpdate=R.lastCapturedUpdate=y:(R.lastCapturedUpdate.next=y,R.lastCapturedUpdate=y)}function Ia(g,y){var R=g.alternate;return R!==null&&y===R.updateQueue&&(y=g.updateQueue=Pa(y)),y}function ms(g,y,R,F,b,J){switch(R.tag){case 1:return g=R.payload,typeof g=="function"?g.call(J,F,b):g;case 3:g.effectTag=g.effectTag&-4097|64;case 0:if(g=R.payload,b=typeof g=="function"?g.call(J,F,b):g,b==null)break;return a({},F,b);case 2:co=!0}return F}function S0(g,y,R,F,b){co=!1,y=Ia(g,y);for(var J=y.baseState,ce=null,mt=0,xt=y.firstUpdate,kt=J;xt!==null;){var xr=xt.expirationTime;xrci?(Qi=ur,ur=null):Qi=ur.sibling;var Gr=cu(Ve,ur,lt[ci],$t);if(Gr===null){ur===null&&(ur=Qi);break}g&&ur&&Gr.alternate===null&&y(Ve,ur),Ue=J(Gr,Ue,ci),si===null?Wn=Gr:si.sibling=Gr,si=Gr,ur=Qi}if(ci===lt.length)return R(Ve,ur),Wn;if(ur===null){for(;cici?(Qi=ur,ur=null):Qi=ur.sibling;var Cu=cu(Ve,ur,Gr.value,$t);if(Cu===null){ur===null&&(ur=Qi);break}g&&ur&&Cu.alternate===null&&y(Ve,ur),Ue=J(Cu,Ue,ci),si===null?Wn=Cu:si.sibling=Cu,si=Cu,ur=Qi}if(Gr.done)return R(Ve,ur),Wn;if(ur===null){for(;!Gr.done;ci++,Gr=lt.next())Gr=i0(Ve,Gr.value,$t),Gr!==null&&(Ue=J(Gr,Ue,ci),si===null?Wn=Gr:si.sibling=Gr,si=Gr);return Wn}for(ur=F(Ve,ur);!Gr.done;ci++,Gr=lt.next())Gr=z0(ur,Ve,ci,Gr.value,$t),Gr!==null&&(g&&Gr.alternate!==null&&ur.delete(Gr.key===null?ci:Gr.key),Ue=J(Gr,Ue,ci),si===null?Wn=Gr:si.sibling=Gr,si=Gr);return g&&ur.forEach(function(Wa){return y(Ve,Wa)}),Wn}return function(Ve,Ue,lt,$t){var Wn=typeof lt=="object"&<!==null&<.type===U&<.key===null;Wn&&(lt=lt.props.children);var si=typeof lt=="object"&<!==null;if(si)switch(lt.$$typeof){case O:e:{for(si=lt.key,Wn=Ue;Wn!==null;){if(Wn.key===si)if(Wn.tag===7?lt.type===U:Wn.elementType===lt.type){R(Ve,Wn.sibling),Ue=b(Wn,lt.type===U?lt.props.children:lt.props,$t),Ue.ref=Us(Ve,Wn,lt),Ue.return=Ve,Ve=Ue;break e}else{R(Ve,Wn);break}else y(Ve,Wn);Wn=Wn.sibling}lt.type===U?(Ue=r0(lt.props.children,Ve.mode,$t,lt.key),Ue.return=Ve,Ve=Ue):($t=qa(lt.type,lt.key,lt.props,null,Ve.mode,$t),$t.ref=Us(Ve,Ue,lt),$t.return=Ve,Ve=$t)}return ce(Ve);case C:e:{for(Wn=lt.key;Ue!==null;){if(Ue.key===Wn)if(Ue.tag===4&&Ue.stateNode.containerInfo===lt.containerInfo&&Ue.stateNode.implementation===lt.implementation){R(Ve,Ue.sibling),Ue=b(Ue,lt.children||[],$t),Ue.return=Ve,Ve=Ue;break e}else{R(Ve,Ue);break}else y(Ve,Ue);Ue=Ue.sibling}Ue=Df(lt,Ve.mode,$t),Ue.return=Ve,Ve=Ue}return ce(Ve)}if(typeof lt=="string"||typeof lt=="number")return lt=""+lt,Ue!==null&&Ue.tag===6?(R(Ve,Ue.sibling),Ue=b(Ue,lt,$t),Ue.return=Ve,Ve=Ue):(R(Ve,Ue),Ue=j0(lt,Ve.mode,$t),Ue.return=Ve,Ve=Ue),ce(Ve);if(y0(lt))return Ol(Ve,Ue,lt,$t);if(ie(lt))return u0(Ve,Ue,lt,$t);if(si&&ji(Ve,lt),typeof lt=="undefined"&&!Wn)switch(Ve.tag){case 1:case 0:throw Ve=Ve.type,Error(t(152,Ve.displayName||Ve.name||"Component"))}return R(Ve,Ue)}}var z=B(!0),G=B(!1),$={},Te={current:$},ge={current:$},Re={current:$};function Z(g){if(g===$)throw Error(t(174));return g}function ke(g,y){en(Re,y,g),en(ge,g,g),en(Te,$,g),y=Ft(y),yi(Te,g),en(Te,y,g)}function Qe(g){yi(Te,g),yi(ge,g),yi(Re,g)}function ht(g){var y=Z(Re.current),R=Z(Te.current);y=Jt(R,g.type,y),R!==y&&(en(ge,g,g),en(Te,y,g))}function ue(g){ge.current===g&&(yi(Te,g),yi(ge,g))}var He={current:0};function nt(g){for(var y=g;y!==null;){if(y.tag===13){var R=y.memoizedState;if(R!==null&&(R=R.dehydrated,R===null||Xr(R)||Ao(R)))return y}else if(y.tag===19&&y.memoizedProps.revealOrder!==void 0){if((y.effectTag&64)!=0)return y}else if(y.child!==null){y.child.return=y,y=y.child;continue}if(y===g)break;for(;y.sibling===null;){if(y.return===null||y.return===g)return null;y=y.return}y.sibling.return=y.return,y=y.sibling}return null}function Ct(g,y){return{responder:g,props:y}}var Mt=k.ReactCurrentDispatcher,It=k.ReactCurrentBatchConfig,sn=0,rn=null,Lt=null,Dn=null,dr=null,er=null,Cr=null,An=0,Nr=null,g0=0,Lr=!1,it=null,Dt=0;function $e(){throw Error(t(321))}function Pt(g,y){if(y===null)return!1;for(var R=0;RAn&&(An=xr,Ua(An))):(cc(xr,xt.suspenseConfig),J=xt.eagerReducer===g?xt.eagerState:g(J,xt.action)),ce=xt,xt=xt.next}while(xt!==null&&xt!==F);kt||(mt=ce,b=J),Le(J,y.memoizedState)||(po=!0),y.memoizedState=J,y.baseUpdate=mt,y.baseState=b,R.lastRenderedState=J}return[y.memoizedState,R.dispatch]}function T0(g){var y=Jn();return typeof g=="function"&&(g=g()),y.memoizedState=y.baseState=g,g=y.queue={last:null,dispatch:null,lastRenderedReducer:au,lastRenderedState:g},g=g.dispatch=js.bind(null,rn,g),[y.memoizedState,g]}function J0(g){return Nu(au,g)}function Lu(g,y,R,F){return g={tag:g,create:y,destroy:R,deps:F,next:null},Nr===null?(Nr={lastEffect:null},Nr.lastEffect=g.next=g):(y=Nr.lastEffect,y===null?Nr.lastEffect=g.next=g:(R=y.next,y.next=g,g.next=R,Nr.lastEffect=g)),g}function _i(g,y,R,F){var b=Jn();g0|=g,b.memoizedState=Lu(y,R,void 0,F===void 0?null:F)}function Fo(g,y,R,F){var b=wr();F=F===void 0?null:F;var J=void 0;if(Lt!==null){var ce=Lt.memoizedState;if(J=ce.destroy,F!==null&&Pt(F,ce.deps)){Lu(0,R,J,F);return}}g0|=g,b.memoizedState=Lu(y,R,J,F)}function nl(g,y){return _i(516,192,g,y)}function hf(g,y){return Fo(516,192,g,y)}function Sl(g,y){if(typeof y=="function")return g=g(),y(g),function(){y(null)};if(y!=null)return g=g(),y.current=g,function(){y.current=null}}function vf(){}function Po(g,y){return Jn().memoizedState=[g,y===void 0?null:y],g}function ys(g,y){var R=wr();y=y===void 0?null:y;var F=R.memoizedState;return F!==null&&y!==null&&Pt(y,F[1])?F[0]:(R.memoizedState=[g,y],g)}function js(g,y,R){if(!(25>Dt))throw Error(t(301));var F=g.alternate;if(g===rn||F!==null&&F===rn)if(Lr=!0,g={expirationTime:sn,suspenseConfig:null,action:R,eagerReducer:null,eagerState:null,next:null},it===null&&(it=new Map),R=it.get(y),R===void 0)it.set(y,g);else{for(y=R;y.next!==null;)y=y.next;y.next=g}else{var b=D0(),J=fi.suspense;b=Un(b,g,J),J={expirationTime:b,suspenseConfig:J,action:R,eagerReducer:null,eagerState:null,next:null};var ce=y.last;if(ce===null)J.next=J;else{var mt=ce.next;mt!==null&&(J.next=mt),ce.next=J}if(y.last=J,g.expirationTime===0&&(F===null||F.expirationTime===0)&&(F=y.lastRenderedReducer,F!==null))try{var xt=y.lastRenderedState,kt=F(xt,R);if(J.eagerReducer=F,J.eagerState=kt,Le(kt,xt))return}catch(xr){}finally{}t0(g,b)}}var Io={readContext:ku,useCallback:$e,useContext:$e,useEffect:$e,useImperativeHandle:$e,useLayoutEffect:$e,useMemo:$e,useReducer:$e,useRef:$e,useState:$e,useDebugValue:$e,useResponder:$e,useDeferredValue:$e,useTransition:$e},bo={readContext:ku,useCallback:Po,useContext:ku,useEffect:nl,useImperativeHandle:function(g,y,R){return R=R!=null?R.concat([g]):null,_i(4,36,Sl.bind(null,y,g),R)},useLayoutEffect:function(g,y){return _i(4,36,g,y)},useMemo:function(g,y){var R=Jn();return y=y===void 0?null:y,g=g(),R.memoizedState=[g,y],g},useReducer:function(g,y,R){var F=Jn();return y=R!==void 0?R(y):y,F.memoizedState=F.baseState=y,g=F.queue={last:null,dispatch:null,lastRenderedReducer:g,lastRenderedState:y},g=g.dispatch=js.bind(null,rn,g),[F.memoizedState,g]},useRef:function(g){var y=Jn();return g={current:g},y.memoizedState=g},useState:T0,useDebugValue:vf,useResponder:Ct,useDeferredValue:function(g,y){var R=T0(g),F=R[0],b=R[1];return nl(function(){_.unstable_next(function(){var J=It.suspense;It.suspense=y===void 0?null:y;try{b(g)}finally{It.suspense=J}})},[g,y]),F},useTransition:function(g){var y=T0(!1),R=y[0],F=y[1];return[Po(function(b){F(!0),_.unstable_next(function(){var J=It.suspense;It.suspense=g===void 0?null:g;try{F(!1),b()}finally{It.suspense=J}})},[g,R]),R]}},gs={readContext:ku,useCallback:ys,useContext:ku,useEffect:hf,useImperativeHandle:function(g,y,R){return R=R!=null?R.concat([g]):null,Fo(4,36,Sl.bind(null,y,g),R)},useLayoutEffect:function(g,y){return Fo(4,36,g,y)},useMemo:function(g,y){var R=wr();y=y===void 0?null:y;var F=R.memoizedState;return F!==null&&y!==null&&Pt(y,F[1])?F[0]:(g=g(),R.memoizedState=[g,y],g)},useReducer:Nu,useRef:function(){return wr().memoizedState},useState:J0,useDebugValue:vf,useResponder:Ct,useDeferredValue:function(g,y){var R=J0(g),F=R[0],b=R[1];return hf(function(){_.unstable_next(function(){var J=It.suspense;It.suspense=y===void 0?null:y;try{b(g)}finally{It.suspense=J}})},[g,y]),F},useTransition:function(g){var y=J0(!1),R=y[0],F=y[1];return[ys(function(b){F(!0),_.unstable_next(function(){var J=It.suspense;It.suspense=g===void 0?null:g;try{F(!1),b()}finally{It.suspense=J}})},[g,R]),R]}},Qu=null,Tu=null,Ei=!1;function C0(g,y){var R=zo(5,null,null,0);R.elementType="DELETED",R.type="DELETED",R.stateNode=y,R.return=g,R.effectTag=8,g.lastEffect!==null?(g.lastEffect.nextEffect=R,g.lastEffect=R):g.firstEffect=g.lastEffect=R}function Z0(g,y){switch(g.tag){case 5:return y=Uu(y,g.type,g.pendingProps),y!==null?(g.stateNode=y,!0):!1;case 6:return y=Y0(y,g.pendingProps),y!==null?(g.stateNode=y,!0):!1;case 13:return!1;default:return!1}}function Bo(g){if(Ei){var y=Tu;if(y){var R=y;if(!Z0(g,y)){if(y=Oo(R),!y||!Z0(g,y)){g.effectTag=g.effectTag&-1025|2,Ei=!1,Qu=g;return}C0(Qu,R)}Qu=g,Tu=F0(y)}else g.effectTag=g.effectTag&-1025|2,Ei=!1,Qu=g}}function la(g){for(g=g.return;g!==null&&g.tag!==5&&g.tag!==3&&g.tag!==13;)g=g.return;Qu=g}function $l(g){if(!w||g!==Qu)return!1;if(!Ei)return la(g),Ei=!0,!1;var y=g.type;if(g.tag!==5||y!=="head"&&y!=="body"&&!ct(y,g.memoizedProps))for(y=Tu;y;)C0(g,y),y=Oo(y);if(la(g),g.tag===13){if(!w)throw Error(t(316));if(g=g.memoizedState,g=g!==null?g.dehydrated:null,!g)throw Error(t(317));Tu=Ps(g)}else Tu=Qu?Oo(g.stateNode):null;return!0}function tu(){w&&(Tu=Qu=null,Ei=!1)}var ei=k.ReactCurrentOwner,po=!1;function Bi(g,y,R,F){y.child=g===null?G(y,null,R,F):z(y,g.child,R,F)}function Ci(g,y,R,F,b){R=R.render;var J=y.ref;return Lo(y,b),F=un(g,y,R,F,J,b),g!==null&&!po?(y.updateQueue=g.updateQueue,y.effectTag&=-517,g.expirationTime<=b&&(g.expirationTime=0),yu(g,y,b)):(y.effectTag|=1,Bi(g,y,F,b),y.child)}function mf(g,y,R,F,b,J){if(g===null){var ce=R.type;return typeof ce=="function"&&!Ef(ce)&&ce.defaultProps===void 0&&R.compare===null&&R.defaultProps===void 0?(y.tag=15,y.type=ce,yf(g,y,ce,F,b,J)):(g=qa(R.type,null,F,null,y.mode,J),g.ref=y.ref,g.return=y,y.child=g)}return ce=g.child,by)&&Vr.set(g,y)))}}function no(g,y){g.expirationTimeg?y:g)}function n0(g){if(g.lastExpiredTime!==0)g.callbackExpirationTime=1073741823,g.callbackPriority=99,g.callbackNode=Jl(ro.bind(null,g));else{var y=vo(g),R=g.callbackNode;if(y===0)R!==null&&(g.callbackNode=null,g.callbackExpirationTime=0,g.callbackPriority=90);else{var F=D0();if(y===1073741823?F=99:y===1||y===2?F=95:(F=10*(1073741821-y)-10*(1073741821-F),F=0>=F?99:250>=F?98:5250>=F?97:95),R!==null){var b=g.callbackPriority;if(g.callbackExpirationTime===y&&b>=F)return;R!==qr&&Is(R)}g.callbackExpirationTime=y,g.callbackPriority=F,y=y===1073741823?Jl(ro.bind(null,g)):tl(F,Uo.bind(null,g),{timeout:10*(1073741821-y)-v0()}),g.callbackNode=y}}}function Uo(g,y){if(ru=0,y)return y=D0(),da(g,y),n0(g),null;var R=vo(g);if(R!==0){if(y=g.callbackNode,(Fn&(nu|fu))!==Rr)throw Error(t(327));if(qs(),g===ae&&R===Fe||Ds(g,R),re!==null){var F=Fn;Fn|=nu;var b=U0(g);do try{nd();break}catch(mt){fa(g,mt)}while(1);if(zu(),Fn=F,$u.current=b,Ae===ni)throw y=st,Ds(g,R),Al(g,R),n0(g),y;if(re===null)switch(b=g.finishedWork=g.current.alternate,g.finishedExpirationTime=R,F=Ae,ae=null,F){case Li:case ni:throw Error(t(345));case Kn:da(g,2=R){g.lastPingedTime=R,Ds(g,R);break}}if(J=vo(g),J!==0&&J!==R)break;if(F!==0&&F!==R){g.lastPingedTime=F;break}g.timeoutHandle=an(xl.bind(null,g),b);break}xl(g);break;case _0:if(Al(g,R),F=g.lastSuspendedTime,R===F&&(g.nextKnownPendingLevel=Hc(b)),_n&&(b=g.lastPingedTime,b===0||b>=R)){g.lastPingedTime=R,Ds(g,R);break}if(b=vo(g),b!==0&&b!==R)break;if(F!==0&&F!==R){g.lastPingedTime=F;break}if(Qt!==1073741823?F=10*(1073741821-Qt)-v0():vt===1073741823?F=0:(F=10*(1073741821-vt)-5e3,b=v0(),R=10*(1073741821-R)-b,F=b-F,0>F&&(F=0),F=(120>F?120:480>F?480:1080>F?1080:1920>F?1920:3e3>F?3e3:4320>F?4320:1960*gf(F/1960))-F,R=F?F=0:(b=ce.busyDelayMs|0,J=v0()-(10*(1073741821-J)-(ce.timeoutMs|0||5e3)),F=J<=b?0:b+F-J),10 component higher in the tree to provide a loading indicator or placeholder to display.`+Hr(b))}Ae!==E0&&(Ae=Kn),J=Tl(J,b),xt=F;do{switch(xt.tag){case 3:ce=J,xt.effectTag|=4096,xt.expirationTime=y;var Ue=_s(xt,ce,y);ua(xt,Ue);break e;case 1:ce=J;var lt=xt.type,$t=xt.stateNode;if((xt.effectTag&64)==0&&(typeof lt.getDerivedStateFromError=="function"||$t!==null&&typeof $t.componentDidCatch=="function"&&(mr===null||!mr.has($t)))){xt.effectTag|=4096,xt.expirationTime=y;var Wn=aa(xt,ce,y);ua(xt,Wn);break e}}xt=xt.return}while(xt!==null)}re=mo(re)}catch(si){y=si;continue}break}while(1)}function U0(){var g=$u.current;return $u.current=Io,g===null?Io:g}function cc(g,y){gSn&&(Sn=g)}function E2(){for(;re!==null;)re=rd(re)}function nd(){for(;re!==null&&!$n();)re=rd(re)}function rd(g){var y=Ha(g.alternate,g,Fe);return g.memoizedProps=g.pendingProps,y===null&&(y=mo(g)),Es.current=null,y}function mo(g){re=g;do{var y=re.alternate;if(g=re.return,(re.effectTag&2048)==0){e:{var R=y;y=re;var F=Fe,b=y.pendingProps;switch(y.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:eu(y.type)&&X0(y);break;case 3:Qe(y),Yi(y),b=y.stateNode,b.pendingContext&&(b.context=b.pendingContext,b.pendingContext=null),(R===null||R.child===null)&&$l(y)&&Ju(y),Jr(y);break;case 5:ue(y);var J=Z(Re.current);if(F=y.type,R!==null&&y.stateNode!=null)Wu(R,y,F,b,J),R.ref!==y.ref&&(y.effectTag|=128);else if(b){if(R=Z(Te.current),$l(y)){if(b=y,!w)throw Error(t(175));R=su(b.stateNode,b.type,b.memoizedProps,J,R,b),b.updateQueue=R,R=R!==null,R&&Ju(y)}else{var ce=fe(F,b,J,R,y);ti(ce,y,!1,!1),y.stateNode=ce,oe(ce,F,b,J,R)&&Ju(y)}y.ref!==null&&(y.effectTag|=128)}else if(y.stateNode===null)throw Error(t(166));break;case 6:if(R&&y.stateNode!=null)Rn(R,y,R.memoizedProps,b);else{if(typeof b!="string"&&y.stateNode===null)throw Error(t(166));if(R=Z(Re.current),J=Z(Te.current),$l(y)){if(R=y,!w)throw Error(t(176));(R=ki(R.stateNode,R.memoizedProps,R))&&Ju(y)}else y.stateNode=nn(b,R,J,y)}break;case 11:break;case 13:if(yi(He,y),b=y.memoizedState,(y.effectTag&64)!=0){y.expirationTime=F;break e}b=b!==null,J=!1,R===null?y.memoizedProps.fallback!==void 0&&$l(y):(F=R.memoizedState,J=F!==null,b||F===null||(F=R.child.sibling,F!==null&&(ce=y.firstEffect,ce!==null?(y.firstEffect=F,F.nextEffect=ce):(y.firstEffect=y.lastEffect=F,F.nextEffect=null),F.effectTag=8))),b&&!J&&(y.mode&2)!=0&&(R===null&&y.memoizedProps.unstable_avoidThisFallback!==!0||(He.current&1)!=0?Ae===Li&&(Ae=e0):((Ae===Li||Ae===e0)&&(Ae=_0),Sn!==0&&ae!==null&&(Al(ae,Fe),Ts(ae,Sn)))),Er&&b&&(y.effectTag|=4),Vt&&(b||J)&&(y.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:Qe(y),Jr(y);break;case 10:Su(y);break;case 9:break;case 14:break;case 17:eu(y.type)&&X0(y);break;case 19:if(yi(He,y),b=y.memoizedState,b===null)break;if(J=(y.effectTag&64)!=0,ce=b.rendering,ce===null){if(J)Fu(b,!1);else if(Ae!==Li||R!==null&&(R.effectTag&64)!=0)for(R=y.child;R!==null;){if(ce=nt(R),ce!==null){for(y.effectTag|=64,Fu(b,!1),R=ce.updateQueue,R!==null&&(y.updateQueue=R,y.effectTag|=4),b.lastEffect===null&&(y.firstEffect=null),y.lastEffect=b.lastEffect,R=F,b=y.child;b!==null;)J=b,F=R,J.effectTag&=2,J.nextEffect=null,J.firstEffect=null,J.lastEffect=null,ce=J.alternate,ce===null?(J.childExpirationTime=0,J.expirationTime=F,J.child=null,J.memoizedProps=null,J.memoizedState=null,J.updateQueue=null,J.dependencies=null):(J.childExpirationTime=ce.childExpirationTime,J.expirationTime=ce.expirationTime,J.child=ce.child,J.memoizedProps=ce.memoizedProps,J.memoizedState=ce.memoizedState,J.updateQueue=ce.updateQueue,F=ce.dependencies,J.dependencies=F===null?null:{expirationTime:F.expirationTime,firstContext:F.firstContext,responders:F.responders}),b=b.sibling;en(He,He.current&1|2,y),y=y.child;break e}R=R.sibling}}else{if(!J)if(R=nt(ce),R!==null){if(y.effectTag|=64,J=!0,R=R.updateQueue,R!==null&&(y.updateQueue=R,y.effectTag|=4),Fu(b,!0),b.tail===null&&b.tailMode==="hidden"&&!ce.alternate){y=y.lastEffect=b.lastEffect,y!==null&&(y.nextEffect=null);break}}else v0()>b.tailExpiration&&1b&&(b=F),ce>b&&(b=ce),J=J.sibling;R.childExpirationTime=b}if(y!==null)return y;g!==null&&(g.effectTag&2048)==0&&(g.firstEffect===null&&(g.firstEffect=re.firstEffect),re.lastEffect!==null&&(g.lastEffect!==null&&(g.lastEffect.nextEffect=re.firstEffect),g.lastEffect=re.lastEffect),1g?y:g}function xl(g){var y=hs();return fo(99,il.bind(null,g,y)),null}function il(g,y){do qs();while(ri!==null);if((Fn&(nu|fu))!==Rr)throw Error(t(327));var R=g.finishedWork,F=g.finishedExpirationTime;if(R===null)return null;if(g.finishedWork=null,g.finishedExpirationTime=0,R===g.current)throw Error(t(177));g.callbackNode=null,g.callbackExpirationTime=0,g.callbackPriority=90,g.nextKnownPendingLevel=0;var b=Hc(R);if(g.firstPendingTime=b,F<=g.lastSuspendedTime?g.firstSuspendedTime=g.lastSuspendedTime=g.nextKnownPendingLevel=0:F<=g.firstSuspendedTime&&(g.firstSuspendedTime=F-1),F<=g.lastPingedTime&&(g.lastPingedTime=0),F<=g.lastExpiredTime&&(g.lastExpiredTime=0),g===ae&&(re=ae=null,Fe=0),1=R?Kt(g,y,R):(en(He,He.current&1,y),y=yu(g,y,R),y!==null?y.sibling:null);en(He,He.current&1,y);break;case 19:if(F=y.childExpirationTime>=R,(g.effectTag&64)!=0){if(F)return xn(g,y,R);y.effectTag|=64}if(b=y.memoizedState,b!==null&&(b.rendering=null,b.tail=null),en(He,He.current,y),!F)return null}return yu(g,y,R)}po=!1}}else po=!1;switch(y.expirationTime=0,y.tag){case 2:if(F=y.type,g!==null&&(g.alternate=null,y.alternate=null,y.effectTag|=2),g=y.pendingProps,b=Au(y,Ai.current),Lo(y,R),b=un(null,y,F,g,b,R),y.effectTag|=1,typeof b=="object"&&b!==null&&typeof b.render=="function"&&b.$$typeof===void 0){if(y.tag=1,fn(),eu(F)){var J=!0;ai(y)}else J=!1;y.memoizedState=b.state!==null&&b.state!==void 0?b.state:null;var ce=F.getDerivedStateFromProps;typeof ce=="function"&&Zl(y,F,ce,g),b.updater=oa,y.stateNode=b,b._reactInternalFiber=y,Bs(y,F,g,R),y=et(null,y,F,!0,J,R)}else y.tag=0,Bi(null,y,b,R),y=y.child;return y;case 16:if(b=y.elementType,g!==null&&(g.alternate=null,y.alternate=null,y.effectTag|=2),g=y.pendingProps,Oe(b),b._status!==1)throw b._result;switch(b=b._result,y.type=b,J=y.tag=ul(b),g=Yn(b,g),J){case 0:y=eo(null,y,b,g,R);break;case 1:y=Ce(null,y,b,g,R);break;case 11:y=Ci(null,y,b,g,R);break;case 14:y=mf(null,y,b,Yn(b.type,g),F,R);break;default:throw Error(t(306,b,""))}return y;case 0:return F=y.type,b=y.pendingProps,b=y.elementType===F?b:Yn(F,b),eo(g,y,F,b,R);case 1:return F=y.type,b=y.pendingProps,b=y.elementType===F?b:Yn(F,b),Ce(g,y,F,b,R);case 3:if(Ye(y),F=y.updateQueue,F===null)throw Error(t(282));if(b=y.memoizedState,b=b!==null?b.element:null,S0(y,F,y.pendingProps,null,R),F=y.memoizedState.element,F===b)tu(),y=yu(g,y,R);else{if((b=y.stateNode.hydrate)&&(w?(Tu=F0(y.stateNode.containerInfo),Qu=y,b=Ei=!0):b=!1),b)for(R=G(y,null,F,R),y.child=R;R;)R.effectTag=R.effectTag&-3|1024,R=R.sibling;else Bi(g,y,F,R),tu();y=y.child}return y;case 5:return ht(y),g===null&&Bo(y),F=y.type,b=y.pendingProps,J=g!==null?g.memoizedProps:null,ce=b.children,ct(F,b)?ce=null:J!==null&&ct(F,J)&&(y.effectTag|=16),$0(g,y),y.mode&4&&R!==1&&Rt(F,b)?(y.expirationTime=y.childExpirationTime=1,y=null):(Bi(g,y,ce,R),y=y.child),y;case 6:return g===null&&Bo(y),null;case 13:return Kt(g,y,R);case 4:return ke(y,y.stateNode.containerInfo),F=y.pendingProps,g===null?y.child=z(y,null,F,R):Bi(g,y,F,R),y.child;case 11:return F=y.type,b=y.pendingProps,b=y.elementType===F?b:Yn(F,b),Ci(g,y,F,b,R);case 7:return Bi(g,y,y.pendingProps,R),y.child;case 8:return Bi(g,y,y.pendingProps.children,R),y.child;case 12:return Bi(g,y,y.pendingProps.children,R),y.child;case 10:e:{if(F=y.type._context,b=y.pendingProps,ce=y.memoizedProps,J=b.value,Hu(y,J),ce!==null){var mt=ce.value;if(J=Le(mt,J)?0:(typeof F._calculateChangedBits=="function"?F._calculateChangedBits(mt,J):1073741823)|0,J===0){if(ce.children===b.children&&!gi.current){y=yu(g,y,R);break e}}else for(mt=y.child,mt!==null&&(mt.return=y);mt!==null;){var xt=mt.dependencies;if(xt!==null){ce=mt.child;for(var kt=xt.firstContext;kt!==null;){if(kt.context===F&&(kt.observedBits&J)!=0){mt.tag===1&&(kt=m0(R,null),kt.tag=2,Q0(mt,kt)),mt.expirationTime=y&&g<=y}function Al(g,y){var R=g.firstSuspendedTime,F=g.lastSuspendedTime;Ry||R===0)&&(g.lastSuspendedTime=y),y<=g.lastPingedTime&&(g.lastPingedTime=0),y<=g.lastExpiredTime&&(g.lastExpiredTime=0)}function Ts(g,y){y>g.firstPendingTime&&(g.firstPendingTime=y);var R=g.firstSuspendedTime;R!==0&&(y>=R?g.firstSuspendedTime=g.lastSuspendedTime=g.nextKnownPendingLevel=0:y>=g.lastSuspendedTime&&(g.lastSuspendedTime=y+1),y>g.nextKnownPendingLevel&&(g.nextKnownPendingLevel=y))}function da(g,y){var R=g.lastExpiredTime;(R===0||R>y)&&(g.lastExpiredTime=y)}function ud(g){var y=g._reactInternalFiber;if(y===void 0)throw typeof g.render=="function"?Error(t(188)):Error(t(268,Object.keys(g)));return g=Xe(y),g===null?null:g.stateNode}function pa(g,y){g=g.memoizedState,g!==null&&g.dehydrated!==null&&g.retryTime{"use strict";Object.defineProperty(ec,"__esModule",{value:!0});var RP=0;ec.__interactionsRef=null;ec.__subscriberRef=null;ec.unstable_clear=function(i){return i()};ec.unstable_getCurrent=function(){return null};ec.unstable_getThreadID=function(){return++RP};ec.unstable_trace=function(i,o,a){return a()};ec.unstable_wrap=function(i){return i};ec.unstable_subscribe=function(){};ec.unstable_unsubscribe=function(){}});var NS=tt(mu=>{"use strict";process.env.NODE_ENV!=="production"&&function(){"use strict";Object.defineProperty(mu,"__esModule",{value:!0});var i=!0,o=0,a=0,p=0;mu.__interactionsRef=null,mu.__subscriberRef=null,i&&(mu.__interactionsRef={current:new Set},mu.__subscriberRef={current:null});function _(se){if(!i)return se();var De=mu.__interactionsRef.current;mu.__interactionsRef.current=new Set;try{return se()}finally{mu.__interactionsRef.current=De}}function t(){return i?mu.__interactionsRef.current:null}function k(){return++p}function L(se,De,pe){var me=arguments.length>3&&arguments[3]!==void 0?arguments[3]:o;if(!i)return pe();var ie={__count:1,id:a++,name:se,timestamp:De},Oe=mu.__interactionsRef.current,je=new Set(Oe);je.add(ie),mu.__interactionsRef.current=je;var qe=mu.__subscriberRef.current,yt;try{qe!==null&&qe.onInteractionTraced(ie)}finally{try{qe!==null&&qe.onWorkStarted(je,me)}finally{try{yt=pe()}finally{mu.__interactionsRef.current=Oe;try{qe!==null&&qe.onWorkStopped(je,me)}finally{ie.__count--,qe!==null&&ie.__count===0&&qe.onInteractionScheduledWorkCompleted(ie)}}}}return yt}function O(se){var De=arguments.length>1&&arguments[1]!==void 0?arguments[1]:o;if(!i)return se;var pe=mu.__interactionsRef.current,me=mu.__subscriberRef.current;me!==null&&me.onWorkScheduled(pe,De),pe.forEach(function(je){je.__count++});var ie=!1;function Oe(){var je=mu.__interactionsRef.current;mu.__interactionsRef.current=pe,me=mu.__subscriberRef.current;try{var qe;try{me!==null&&me.onWorkStarted(pe,De)}finally{try{qe=se.apply(void 0,arguments)}finally{mu.__interactionsRef.current=je,me!==null&&me.onWorkStopped(pe,De)}}return qe}finally{ie||(ie=!0,pe.forEach(function(yt){yt.__count--,me!==null&&yt.__count===0&&me.onInteractionScheduledWorkCompleted(yt)}))}}return Oe.cancel=function(){me=mu.__subscriberRef.current;try{me!==null&&me.onWorkCanceled(pe,De)}finally{pe.forEach(function(qe){qe.__count--,me&&qe.__count===0&&me.onInteractionScheduledWorkCompleted(qe)})}},Oe}var C=null;i&&(C=new Set);function U(se){i&&(C.add(se),C.size===1&&(mu.__subscriberRef.current={onInteractionScheduledWorkCompleted:ne,onInteractionTraced:W,onWorkCanceled:ve,onWorkScheduled:m,onWorkStarted:he,onWorkStopped:Ee}))}function H(se){i&&(C.delete(se),C.size===0&&(mu.__subscriberRef.current=null))}function W(se){var De=!1,pe=null;if(C.forEach(function(me){try{me.onInteractionTraced(se)}catch(ie){De||(De=!0,pe=ie)}}),De)throw pe}function ne(se){var De=!1,pe=null;if(C.forEach(function(me){try{me.onInteractionScheduledWorkCompleted(se)}catch(ie){De||(De=!0,pe=ie)}}),De)throw pe}function m(se,De){var pe=!1,me=null;if(C.forEach(function(ie){try{ie.onWorkScheduled(se,De)}catch(Oe){pe||(pe=!0,me=Oe)}}),pe)throw me}function he(se,De){var pe=!1,me=null;if(C.forEach(function(ie){try{ie.onWorkStarted(se,De)}catch(Oe){pe||(pe=!0,me=Oe)}}),pe)throw me}function Ee(se,De){var pe=!1,me=null;if(C.forEach(function(ie){try{ie.onWorkStopped(se,De)}catch(Oe){pe||(pe=!0,me=Oe)}}),pe)throw me}function ve(se,De){var pe=!1,me=null;if(C.forEach(function(ie){try{ie.onWorkCanceled(se,De)}catch(Oe){pe||(pe=!0,me=Oe)}}),pe)throw me}mu.unstable_clear=_,mu.unstable_getCurrent=t,mu.unstable_getThreadID=k,mu.unstable_trace=L,mu.unstable_wrap=O,mu.unstable_subscribe=U,mu.unstable_unsubscribe=H}()});var LS=tt((CH,hD)=>{"use strict";process.env.NODE_ENV==="production"?hD.exports=kS():hD.exports=NS()});var PS=tt((xH,qy)=>{"use strict";process.env.NODE_ENV!=="production"&&(qy.exports=function i(o){"use strict";var a=Oy(),p=Mi(),_=YE(),t=b_(),k=LS(),L=0,O=1,C=2,U=3,H=4,W=5,ne=6,m=7,he=8,Ee=9,ve=10,se=11,De=12,pe=13,me=14,ie=15,Oe=16,je=17,qe=18,yt=19,gt=20,Xe=21,ut=function(){};ut=function(f,c){for(var E=arguments.length,T=new Array(E>2?E-2:0),A=2;A8)throw new Error("warningWithoutStack() currently supports at most 8 arguments.");if(!f){if(typeof console!="undefined"){var j=T.map(function(le){return""+le});j.unshift("Warning: "+c),Function.prototype.apply.call(console.error,console,j)}try{var V=0,te="Warning: "+c.replace(/%s/g,function(){return T[V++]});throw new Error(te)}catch(le){}}};var We=ut;function Ft(f){return f._reactInternalFiber}function Jt(f,c){f._reactInternalFiber=c}var rt=p.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;rt.hasOwnProperty("ReactCurrentDispatcher")||(rt.ReactCurrentDispatcher={current:null}),rt.hasOwnProperty("ReactCurrentBatchConfig")||(rt.ReactCurrentBatchConfig={suspense:null});var Q=typeof Symbol=="function"&&Symbol.for,fe=Q?Symbol.for("react.element"):60103,xe=Q?Symbol.for("react.portal"):60106,oe=Q?Symbol.for("react.fragment"):60107,ze=Q?Symbol.for("react.strict_mode"):60108,ct=Q?Symbol.for("react.profiler"):60114,Rt=Q?Symbol.for("react.provider"):60109,nn=Q?Symbol.for("react.context"):60110,an=Q?Symbol.for("react.concurrent_mode"):60111,Mn=Q?Symbol.for("react.forward_ref"):60112,lr=Q?Symbol.for("react.suspense"):60113,ln=Q?Symbol.for("react.suspense_list"):60120,Vt=Q?Symbol.for("react.memo"):60115,Er=Q?Symbol.for("react.lazy"):60116,w=Q?Symbol.for("react.fundamental"):60117,jt=Q?Symbol.for("react.responder"):60118,Xn=Q?Symbol.for("react.scope"):60119,vr=typeof Symbol=="function"&&Symbol.iterator,jr="@@iterator";function fr(f){if(f===null||typeof f!="object")return null;var c=vr&&f[vr]||f[jr];return typeof c=="function"?c:null}var zr=We;zr=function(f,c){if(!f){for(var E=rt.ReactDebugCurrentFrame,T=E.getStackAddendum(),A=arguments.length,j=new Array(A>2?A-2:0),V=2;V import('./MyComponent'))`,T),f._status=Ro,f._result=A}},function(T){f._status===d0&&(f._status=Qo,f._result=T)})}}function Zo(f,c,E){var T=c.displayName||c.name||"";return f.displayName||(T!==""?E+"("+T+")":E)}function qt(f){if(f==null)return null;if(typeof f.tag=="number"&&We(!1,"Received an unexpected object in getComponentName(). This is likely a bug in React. Please file an issue."),typeof f=="function")return f.displayName||f.name||null;if(typeof f=="string")return f;switch(f){case oe:return"Fragment";case xe:return"Portal";case ct:return"Profiler";case ze:return"StrictMode";case lr:return"Suspense";case ln:return"SuspenseList"}if(typeof f=="object")switch(f.$$typeof){case nn:return"Context.Consumer";case Rt:return"Context.Provider";case Mn:return Zo(f,f.render,"ForwardRef");case Vt:return qt(f.type);case Er:{var c=f,E=Fs(c);if(E)return qt(E);break}}return null}var xi=0,lu=1,mi=2,Dr=4,$o=6,G0=8,Uu=16,Y0=32,Xr=64,Ao=128,Oo=256,F0=512,su=1024,ki=1028,Ps=932,Kl=2047,P0=2048,p0=4096,Hr=!0,Ri=!0,K0=!0,yi=!0,en=!0,bn=!0,Ai=!1,gi=!1,Wt=!1,Au=!1,eu=!1,X0=!0,Yi=!1,Xl=!1,Mo=!1,ai=!1,so=!1,Ql=rt.ReactCurrentOwner;function ko(f){var c=f,E=f;if(f.alternate)for(;c.return;)c=c.return;else{var T=c;do c=T,(c.effectTag&(mi|su))!==xi&&(E=c.return),T=c.return;while(T)}return c.tag===U?E:null}function Is(f){return ko(f)===f}function $n(f){{var c=Ql.current;if(c!==null&&c.tag===O){var E=c,T=E.stateNode;T._warnedAboutRefsInRender||We(!1,"%s is accessing isMounted inside its render() function. render() should be a pure function of props and state. It should never access something that requires stale data from the previous render, such as refs. Move this logic to componentDidMount and componentDidUpdate instead.",qt(E.type)||"A component"),T._warnedAboutRefsInRender=!0}}var A=Ft(f);return A?ko(A)===A:!1}function el(f){if(ko(f)!==f)throw Error("Unable to find node on an unmounted component.")}function ao(f){var c=f.alternate;if(!c){var E=ko(f);if(E===null)throw Error("Unable to find node on an unmounted component.");return E!==f?null:f}for(var T=f,A=c;;){var j=T.return;if(j===null)break;var V=j.alternate;if(V===null){var te=j.return;if(te!==null){T=A=te;continue}break}if(j.child===V.child){for(var le=j.child;le;){if(le===T)return el(j),f;if(le===A)return el(j),c;le=le.sibling}throw Error("Unable to find node on an unmounted component.")}if(T.return!==A.return)T=j,A=V;else{for(var Be=!1,Ke=j.child;Ke;){if(Ke===T){Be=!0,T=j,A=V;break}if(Ke===A){Be=!0,A=j,T=V;break}Ke=Ke.sibling}if(!Be){for(Ke=V.child;Ke;){if(Ke===T){Be=!0,T=V,A=j;break}if(Ke===A){Be=!0,A=V,T=j;break}Ke=Ke.sibling}if(!Be)throw Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.")}}if(T.alternate!==A)throw Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.")}if(T.tag!==U)throw Error("Unable to find node on an unmounted component.");return T.stateNode.current===T?f:c}function I0(f){var c=ao(f);if(!c)return null;for(var E=c;;){if(E.tag===W||E.tag===ne)return E;if(E.child){E.child.return=E,E=E.child;continue}if(E===c)return null;for(;!E.sibling;){if(!E.return||E.return===c)return null;E=E.return}E.sibling.return=E.return,E=E.sibling}return null}function wl(f){var c=ao(f);if(!c)return null;for(var E=c;;){if(E.tag===W||E.tag===ne||Wt&&E.tag===gt)return E;if(E.child&&E.tag!==H){E.child.return=E,E=E.child;continue}if(E===c)return null;for(;!E.sibling;){if(!E.return||E.return===c)return null;E=E.return}E.sibling.return=E.return,E=E.sibling}return null}var No=o.getPublicInstance,wt=o.getRootHostContext,bt=o.getChildHostContext,Hn=o.prepareForCommit,qr=o.resetAfterCommit,Ki=o.createInstance,Qr=o.appendInitialChild,Ou=o.finalizeInitialChildren,h0=o.prepareUpdate,Ni=o.shouldSetTextContent,v0=o.shouldDeprioritizeSubtree,hs=o.createTextInstance,Tt=o.setTimeout,fo=o.clearTimeout,tl=o.noTimeout,Jl=o.now,ju=o.isPrimaryRenderer,vs=o.warnsIfNotActing,b0=o.supportsMutation,X=o.supportsPersistence,we=o.supportsHydration,Le=o.mountResponderInstance,Ne=o.unmountResponderInstance,dt=o.getFundamentalComponentInstance,Yn=o.mountFundamentalComponent,Cn=o.shouldUpdateFundamentalComponent,cr=o.getInstanceFromNode,Si=o.appendChild,Mu=o.appendChildToContainer,zu=o.commitTextUpdate,Hu=o.commitMount,Su=o.commitUpdate,Ti=o.insertBefore,Lo=o.insertInContainerBefore,ku=o.removeChild,co=o.removeChildFromContainer,qu=o.resetTextContent,Pa=o.hideInstance,m0=o.hideTextInstance,ia=o.unhideInstance,Q0=o.unhideTextInstance,ua=o.updateFundamentalComponent,Ia=o.unmountFundamentalComponent,ms=o.cloneInstance,S0=o.createContainerChildSet,Qn=o.appendChildToContainerChildSet,ac=o.finalizeContainerChildren,fi=o.replaceContainerChildren,$r=o.cloneHiddenInstance,Zl=o.cloneHiddenTextInstance,oa=o.cloneInstance,pf=o.canHydrateInstance,bs=o.canHydrateTextInstance,ba=o.canHydrateSuspenseInstance,Bs=o.isSuspenseInstancePending,y0=o.isSuspenseInstanceFallback,Us=o.registerSuspenseInstanceRetry,ji=o.getNextHydratableSibling,B=o.getFirstHydratableChild,z=o.hydrateInstance,G=o.hydrateTextInstance,$=o.hydrateSuspenseInstance,Te=o.getNextHydratableInstanceAfterSuspenseInstance,ge=o.commitHydratedContainer,Re=o.commitHydratedSuspenseInstance,Z=o.clearSuspenseBoundary,ke=o.clearSuspenseBoundaryFromContainer,Qe=o.didNotMatchHydratedContainerTextInstance,ht=o.didNotMatchHydratedTextInstance,ue=o.didNotHydrateContainerInstance,He=o.didNotHydrateInstance,nt=o.didNotFindHydratableContainerInstance,Ct=o.didNotFindHydratableContainerTextInstance,Mt=o.didNotFindHydratableContainerSuspenseInstance,It=o.didNotFindHydratableInstance,sn=o.didNotFindHydratableTextInstance,rn=o.didNotFindHydratableSuspenseInstance,Lt=/^(.*)[\\\/]/,Dn=function(f,c,E){var T="";if(c){var A=c.fileName,j=A.replace(Lt,"");if(/^index\./.test(j)){var V=A.match(Lt);if(V){var te=V[1];if(te){var le=te.replace(Lt,"");j=le+"/"+j}}}T=" (at "+j+":"+c.lineNumber+")"}else E&&(T=" (created by "+E+")");return` - in `+(f||"Unknown")+T},dr=rt.ReactDebugCurrentFrame;function er(f){switch(f.tag){case U:case H:case ne:case m:case ve:case Ee:return"";default:var c=f._debugOwner,E=f._debugSource,T=qt(f.type),A=null;return c&&(A=qt(c.type)),Dn(T,E,A)}}function Cr(f){var c="",E=f;do c+=er(E),E=E.return;while(E);return c}var An=null,Nr=null;function g0(){{if(An===null)return null;var f=An._debugOwner;if(f!==null&&typeof f!="undefined")return qt(f.type)}return null}function Lr(){return An===null?"":Cr(An)}function it(){dr.getCurrentStack=null,An=null,Nr=null}function Dt(f){dr.getCurrentStack=Lr,An=f,Nr=null}function $e(f){Nr=f}var Pt="\u269B",un="\u26D4",fn=typeof performance!="undefined"&&typeof performance.mark=="function"&&typeof performance.clearMarks=="function"&&typeof performance.measure=="function"&&typeof performance.clearMeasures=="function",Jn=null,wr=null,au=null,Nu=!1,T0=!1,J0=!1,Lu=0,_i=0,Fo=new Set,nl=function(f){return Pt+" "+f},hf=function(f,c){var E=c?un+" ":Pt+" ",T=c?" Warning: "+c:"";return""+E+f+T},Sl=function(f){performance.mark(nl(f))},vf=function(f){performance.clearMarks(nl(f))},Po=function(f,c,E){var T=nl(c),A=hf(f,E);try{performance.measure(A,T)}catch(j){}performance.clearMarks(T),performance.clearMeasures(A)},ys=function(f,c){return f+" (#"+c+")"},js=function(f,c,E){return E===null?f+" ["+(c?"update":"mount")+"]":f+"."+E},Io=function(f,c){var E=qt(f.type)||"Unknown",T=f._debugID,A=f.alternate!==null,j=js(E,A,c);if(Nu&&Fo.has(j))return!1;Fo.add(j);var V=ys(j,T);return Sl(V),!0},bo=function(f,c){var E=qt(f.type)||"Unknown",T=f._debugID,A=f.alternate!==null,j=js(E,A,c),V=ys(j,T);vf(V)},gs=function(f,c,E){var T=qt(f.type)||"Unknown",A=f._debugID,j=f.alternate!==null,V=js(T,j,c),te=ys(V,A);Po(V,te,E)},Qu=function(f){switch(f.tag){case U:case W:case ne:case H:case m:case ve:case Ee:case he:return!0;default:return!1}},Tu=function(){wr!==null&&au!==null&&bo(au,wr),au=null,wr=null,J0=!1},Ei=function(){for(var f=Jn;f;)f._debugIsCurrentlyTiming&&gs(f,null,null),f=f.return},C0=function(f){f.return!==null&&C0(f.return),f._debugIsCurrentlyTiming&&Io(f,null)},Z0=function(){Jn!==null&&C0(Jn)};function Bo(){Hr&&_i++}function la(){Hr&&(Nu&&(T0=!0),wr!==null&&wr!=="componentWillMount"&&wr!=="componentWillReceiveProps"&&(J0=!0))}function $l(f){if(Hr){if(!fn||Qu(f)||(Jn=f,!Io(f,null)))return;f._debugIsCurrentlyTiming=!0}}function tu(f){if(Hr){if(!fn||Qu(f))return;f._debugIsCurrentlyTiming=!1,bo(f,null)}}function ei(f){if(Hr){if(!fn||Qu(f)||(Jn=f.return,!f._debugIsCurrentlyTiming))return;f._debugIsCurrentlyTiming=!1,gs(f,null,null)}}function po(f){if(Hr){if(!fn||Qu(f)||(Jn=f.return,!f._debugIsCurrentlyTiming))return;f._debugIsCurrentlyTiming=!1;var c=f.tag===pe?"Rendering was suspended":"An error was thrown inside this error boundary";gs(f,null,c)}}function Bi(f,c){if(Hr){if(!fn||(Tu(),!Io(f,c)))return;au=f,wr=c}}function Ci(){if(Hr){if(!fn)return;if(wr!==null&&au!==null){var f=J0?"Scheduled a cascading update":null;gs(au,wr,f)}wr=null,au=null}}function mf(f){if(Hr){if(Jn=f,!fn)return;Lu=0,Sl("(React Tree Reconciliation)"),Z0()}}function yf(f,c){if(Hr){if(!fn)return;var E=null;if(f!==null)if(f.tag===U)E="A top-level update interrupted the previous render";else{var T=qt(f.type)||"Unknown";E="An update to "+T+" interrupted the previous render"}else Lu>1&&(E="There were cascading updates");Lu=0;var A=c?"(React Tree Reconciliation: Completed Root)":"(React Tree Reconciliation: Yielded)";Ei(),Po(A,"(React Tree Reconciliation)",E)}}function $0(){if(Hr){if(!fn)return;Nu=!0,T0=!1,Fo.clear(),Sl("(Committing Changes)")}}function eo(){if(Hr){if(!fn)return;var f=null;T0?f="Lifecycle hook scheduled a cascading update":Lu>0&&(f="Caused by a cascading update in earlier commit"),T0=!1,Lu++,Nu=!1,Fo.clear(),Po("(Committing Changes)","(Committing Changes)",f)}}function Ce(){if(Hr){if(!fn)return;_i=0,Sl("(Committing Snapshot Effects)")}}function et(){if(Hr){if(!fn)return;var f=_i;_i=0,Po("(Committing Snapshot Effects: "+f+" Total)","(Committing Snapshot Effects)",null)}}function Ye(){if(Hr){if(!fn)return;_i=0,Sl("(Committing Host Effects)")}}function Yt(){if(Hr){if(!fn)return;var f=_i;_i=0,Po("(Committing Host Effects: "+f+" Total)","(Committing Host Effects)",null)}}function Kt(){if(Hr){if(!fn)return;_i=0,Sl("(Calling Lifecycle Methods)")}}function pr(){if(Hr){if(!fn)return;var f=_i;_i=0,Po("(Calling Lifecycle Methods: "+f+" Total)","(Calling Lifecycle Methods)",null)}}var Wr=[],xn;xn=[];var yu=-1;function Ju(f){return{current:f}}function ti(f,c){if(yu<0){We(!1,"Unexpected pop.");return}c!==xn[yu]&&We(!1,"Unexpected Fiber popped."),f.current=Wr[yu],Wr[yu]=null,xn[yu]=null,yu--}function Jr(f,c,E){yu++,Wr[yu]=f.current,xn[yu]=E,f.current=c}var Wu;Wu={};var Rn={};Object.freeze(Rn);var x0=Ju(Rn),Fu=Ju(!1),li=Rn;function Tl(f,c,E){return ai?Rn:E&&Xi(c)?li:x0.current}function zs(f,c,E){if(!ai){var T=f.stateNode;T.__reactInternalMemoizedUnmaskedChildContext=c,T.__reactInternalMemoizedMaskedChildContext=E}}function Vu(f,c){if(ai)return Rn;var E=f.type,T=E.contextTypes;if(!T)return Rn;var A=f.stateNode;if(A&&A.__reactInternalMemoizedUnmaskedChildContext===c)return A.__reactInternalMemoizedMaskedChildContext;var j={};for(var V in T)j[V]=c[V];{var te=qt(E)||"Unknown";_(T,j,"context",te,Lr)}return A&&zs(f,c,j),j}function sa(){return ai?!1:Fu.current}function Xi(f){if(ai)return!1;var c=f.childContextTypes;return c!=null}function Hs(f){ai||(ti(Fu,f),ti(x0,f))}function R0(f){ai||(ti(Fu,f),ti(x0,f))}function zi(f,c,E){if(!ai){if(x0.current!==Rn)throw Error("Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.");Jr(x0,c,f),Jr(Fu,E,f)}}function A0(f,c,E){if(ai)return E;var T=f.stateNode,A=c.childContextTypes;if(typeof T.getChildContext!="function"){{var j=qt(c)||"Unknown";Wu[j]||(Wu[j]=!0,We(!1,"%s.childContextTypes is specified but there is no getChildContext() method on the instance. You can either define getChildContext() on %s or remove childContextTypes from it.",j,j))}return E}var V;$e("getChildContext"),Bi(f,"getChildContext"),V=T.getChildContext(),Ci(),$e(null);for(var te in V)if(!(te in A))throw Error((qt(c)||"Unknown")+'.getChildContext(): key "'+te+'" is not defined in childContextTypes.');{var le=qt(c)||"Unknown";_(A,V,"child context",le,Lr)}return a({},E,{},V)}function Hi(f){if(ai)return!1;var c=f.stateNode,E=c&&c.__reactInternalMemoizedMergedChildContext||Rn;return li=x0.current,Jr(x0,E,f),Jr(Fu,Fu.current,f),!0}function rl(f,c,E){if(!ai){var T=f.stateNode;if(!T)throw Error("Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.");if(E){var A=A0(f,c,li);T.__reactInternalMemoizedMergedChildContext=A,ti(Fu,f),ti(x0,f),Jr(x0,A,f),Jr(Fu,E,f)}else ti(Fu,f),Jr(Fu,E,f)}}function Cl(f){if(ai)return Rn;if(!(Is(f)&&f.tag===O))throw Error("Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.");var c=f;do{switch(c.tag){case U:return c.stateNode.context;case O:{var E=c.type;if(Xi(E))return c.stateNode.__reactInternalMemoizedMergedChildContext;break}}c=c.return}while(c!==null);throw Error("Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.")}var B0=1,O0=2,ho=t.unstable_runWithPriority,Pu=t.unstable_scheduleCallback,Zu=t.unstable_cancelCallback,es=t.unstable_shouldYield,_s=t.unstable_requestPaint,aa=t.unstable_now,gf=t.unstable_getCurrentPriorityLevel,$u=t.unstable_ImmediatePriority,Es=t.unstable_UserBlockingPriority,Rr=t.unstable_NormalPriority,to=t.unstable_LowPriority,nu=t.unstable_IdlePriority;if(bn&&!(k.__interactionsRef!=null&&k.__interactionsRef.current!=null))throw Error("It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at http://fb.me/react-profiling");var fu={},Li=99,ni=98,Kn=97,e0=96,_0=95,E0=90,Fn=es,ae=_s!==void 0?_s:function(){},re=null,Fe=null,Ae=!1,st=aa(),vt=st<1e4?aa:function(){return aa()-st};function Qt(){switch(gf()){case $u:return Li;case Es:return ni;case Rr:return Kn;case to:return e0;case nu:return _0;default:throw Error("Unknown priority level.")}}function On(f){switch(f){case Li:return $u;case ni:return Es;case Kn:return Rr;case e0:return to;case _0:return nu;default:throw Error("Unknown priority level.")}}function Sn(f,c){var E=On(f);return ho(E,c)}function _n(f,c,E){var T=On(f);return Pu(T,c,E)}function Tn(f){return re===null?(re=[f],Fe=Pu($u,Fi)):re.push(f),fu}function ir(f){f!==fu&&Zu(f)}function Bt(){if(Fe!==null){var f=Fe;Fe=null,Zu(f)}Fi()}function Fi(){if(!Ae&&re!==null){Ae=!0;var f=0;try{var c=!0,E=re;Sn(Li,function(){for(;f1?c-1:0),T=1;T2?E-2:0),A=2;A0&&(ja.forEach(function(Nt){f.add(qt(Nt.type)||"Component"),ts.add(Nt.type)}),ja=[]);var c=new Set;za.length>0&&(za.forEach(function(Nt){c.add(qt(Nt.type)||"Component"),ts.add(Nt.type)}),za=[]);var E=new Set;Ha.length>0&&(Ha.forEach(function(Nt){E.add(qt(Nt.type)||"Component"),ts.add(Nt.type)}),Ha=[]);var T=new Set;ca.length>0&&(ca.forEach(function(Nt){T.add(qt(Nt.type)||"Component"),ts.add(Nt.type)}),ca=[]);var A=new Set;ws.length>0&&(ws.forEach(function(Nt){A.add(qt(Nt.type)||"Component"),ts.add(Nt.type)}),ws=[]);var j=new Set;if(Ss.length>0&&(Ss.forEach(function(Nt){j.add(qt(Nt.type)||"Component"),ts.add(Nt.type)}),Ss=[]),c.size>0){var V=jo(c);We(!1,`Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move code with side effects to componentDidMount, and set initial state in the constructor. - -Please update the following components: %s`,V)}if(T.size>0){var te=jo(T);We(!1,`Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state - -Please update the following components: %s`,te)}if(j.size>0){var le=jo(j);We(!1,`Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. - -Please update the following components: %s`,le)}if(f.size>0){var Be=jo(f);qs(!1,`componentWillMount has been renamed, and is not recommended for use. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move code with side effects to componentDidMount, and set initial state in the constructor. -* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder. - -Please update the following components: %s`,Be)}if(E.size>0){var Ke=jo(E);qs(!1,`componentWillReceiveProps has been renamed, and is not recommended for use. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state -* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder. - -Please update the following components: %s`,Ke)}if(A.size>0){var pt=jo(A);qs(!1,`componentWillUpdate has been renamed, and is not recommended for use. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder. - -Please update the following components: %s`,pt)}};var zo=new Map,Ef=new Set;Rl.recordLegacyContextWarning=function(f,c){var E=id(f);if(E===null){We(!1,"Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue.");return}if(!Ef.has(f.type)){var T=zo.get(E);(f.type.contextTypes!=null||f.type.childContextTypes!=null||c!==null&&typeof c.getChildContext=="function")&&(T===void 0&&(T=[],zo.set(E,T)),T.push(f))}},Rl.flushLegacyContextWarning=function(){zo.forEach(function(f,c){var E=new Set;f.forEach(function(j){E.add(qt(j.type)||"Component"),Ef.add(j.type)});var T=jo(E),A=Cr(c);We(!1,`Legacy context API has been detected within a strict-mode tree. - -The old API will be supported in all 16.x releases, but applications using it should migrate to the new version. - -Please update the following components: %s - -Learn more about this warning here: https://fb.me/react-legacy-context%s`,T,A)})},Rl.discardPendingWarnings=function(){ja=[],za=[],Ha=[],ca=[],ws=[],Ss=[],zo=new Map}}var ul=null,Gu=null,qa=function(f){ul=f};function r0(f){{if(ul===null)return f;var c=ul(f);return c===void 0?f:c.current}}function j0(f){return r0(f)}function Df(f){{if(ul===null)return f;var c=ul(f);if(c===void 0){if(f!=null&&typeof f.render=="function"){var E=r0(f.render);if(f.render!==E){var T={$$typeof:Mn,render:E};return f.displayName!==void 0&&(T.displayName=f.displayName),T}}return f}return c.current}}function qc(f,c){{if(ul===null)return!1;var E=f.elementType,T=c.type,A=!1,j=typeof T=="object"&&T!==null?T.$$typeof:null;switch(f.tag){case O:{typeof T=="function"&&(A=!0);break}case L:{(typeof T=="function"||j===Er)&&(A=!0);break}case se:{(j===Mn||j===Er)&&(A=!0);break}case me:case ie:{(j===Vt||j===Er)&&(A=!0);break}default:return!1}if(A){var V=ul(E);if(V!==void 0&&V===ul(T))return!0}return!1}}function dc(f){{if(ul===null||typeof WeakSet!="function")return;Gu===null&&(Gu=new WeakSet),Gu.add(f)}}var Al=function(f,c){{if(ul===null)return;var E=c.staleFamilies,T=c.updatedFamilies;tf(),Ap(function(){da(f.current,T,E)})}},Ts=function(f,c){{if(f.context!==Rn)return;tf(),fv(function(){Yg(c,f,null,null)})}};function da(f,c,E){{var T=f.alternate,A=f.child,j=f.sibling,V=f.tag,te=f.type,le=null;switch(V){case L:case ie:case O:le=te;break;case se:le=te.render;break;default:break}if(ul===null)throw new Error("Expected resolveFamily to be set during hot reload.");var Be=!1,Ke=!1;if(le!==null){var pt=ul(le);pt!==void 0&&(E.has(pt)?Ke=!0:c.has(pt)&&(V===O?Ke=!0:Be=!0))}Gu!==null&&(Gu.has(f)||T!==null&&Gu.has(T))&&(Ke=!0),Ke&&(f._debugNeedsRemount=!0),(Ke||Be)&&ml(f,Un),A!==null&&!Ke&&da(A,c,E),j!==null&&da(j,c,E)}}var ud=function(f,c){{var E=new Set,T=new Set(c.map(function(A){return A.current}));return pa(f.current,T,E),E}};function pa(f,c,E){{var T=f.child,A=f.sibling,j=f.tag,V=f.type,te=null;switch(j){case L:case ie:case O:te=V;break;case se:te=V.render;break;default:break}var le=!1;te!==null&&c.has(te)&&(le=!0),le?pc(f,E):T!==null&&pa(T,c,E),A!==null&&pa(A,c,E)}}function pc(f,c){{var E=Wc(f,c);if(E)return;for(var T=f;;){switch(T.tag){case W:c.add(T.stateNode);return;case H:c.add(T.stateNode.containerInfo);return;case U:c.add(T.stateNode.containerInfo);return}if(T.return===null)throw new Error("Expected to reach root first.");T=T.return}}}function Wc(f,c){for(var E=f,T=!1;;){if(E.tag===W)T=!0,c.add(E.stateNode);else if(E.child!==null){E.child.return=E,E=E.child;continue}if(E===f)return T;for(;E.sibling===null;){if(E.return===null||E.return===f)return T;E=E.return}E.sibling.return=E.return,E=E.sibling}return!1}function qi(f,c){if(f&&f.defaultProps){var E=a({},c),T=f.defaultProps;for(var A in T)E[A]===void 0&&(E[A]=T[A]);return E}return c}function g(f){if(Jo(f),f._status!==Ro)throw f._result;return f._result}var y=Ju(null),R;R={};var F=null,b=null,J=null,ce=!1;function mt(){F=null,b=null,J=null,ce=!1}function xt(){ce=!0}function kt(){ce=!1}function xr(f,c){var E=f.type._context;ju?(Jr(y,E._currentValue,f),E._currentValue=c,E._currentRenderer===void 0||E._currentRenderer===null||E._currentRenderer===R||We(!1,"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."),E._currentRenderer=R):(Jr(y,E._currentValue2,f),E._currentValue2=c,E._currentRenderer2===void 0||E._currentRenderer2===null||E._currentRenderer2===R||We(!1,"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."),E._currentRenderer2=R)}function i0(f){var c=y.current;ti(y,f);var E=f.type._context;ju?E._currentValue=c:E._currentValue2=c}function cu(f,c,E){if(mo(E,c))return 0;var T=typeof f._calculateChangedBits=="function"?f._calculateChangedBits(E,c):Vr;return(T&Vr)!==T&&Xt(!1,"calculateChangedBits: Expected the return value to be a 31-bit integer. Instead received: %s",T),T|0}function z0(f,c){for(var E=f;E!==null;){var T=E.alternate;if(E.childExpirationTime=c&&lp(),E.firstContext=null)}}function Ve(f,c){if(ce&&Xt(!1,"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."),J!==f){if(!(c===!1||c===0)){var E;typeof c!="number"||c===Vr?(J=f,E=Vr):E=c;var T={context:f,observedBits:E,next:null};if(b===null){if(F===null)throw Error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().");b=T,F.dependencies={expirationTime:at,firstContext:T,responders:null}}else b=b.next=T}}return ju?f._currentValue:f._currentValue2}var Ue=0,lt=1,$t=2,Wn=3,si=!1,ur,ci;ur=!1,ci=null;function Qi(f){var c={baseState:f,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null};return c}function Gr(f){var c={baseState:f.baseState,firstUpdate:f.firstUpdate,lastUpdate:f.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null};return c}function Cu(f,c){var E={expirationTime:f,suspenseConfig:c,tag:Ue,payload:null,callback:null,next:null,nextEffect:null};return E.priority=Qt(),E}function Wa(f,c){f.lastUpdate===null?f.firstUpdate=f.lastUpdate=c:(f.lastUpdate.next=c,f.lastUpdate=c)}function Va(f,c){var E=f.alternate,T,A;E===null?(T=f.updateQueue,A=null,T===null&&(T=f.updateQueue=Qi(f.memoizedState))):(T=f.updateQueue,A=E.updateQueue,T===null?A===null?(T=f.updateQueue=Qi(f.memoizedState),A=E.updateQueue=Qi(E.memoizedState)):T=f.updateQueue=Gr(A):A===null&&(A=E.updateQueue=Gr(T))),A===null||T===A?Wa(T,c):T.lastUpdate===null||A.lastUpdate===null?(Wa(T,c),Wa(A,c)):(Wa(T,c),A.lastUpdate=c),f.tag===O&&(ci===T||A!==null&&ci===A)&&!ur&&(We(!1,"An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback."),ur=!0)}function od(f,c){var E=f.updateQueue;E===null?E=f.updateQueue=Qi(f.memoizedState):E=w2(f,E),E.lastCapturedUpdate===null?E.firstCapturedUpdate=E.lastCapturedUpdate=c:(E.lastCapturedUpdate.next=c,E.lastCapturedUpdate=c)}function w2(f,c){var E=f.alternate;return E!==null&&c===E.updateQueue&&(c=f.updateQueue=Gr(c)),c}function S2(f,c,E,T,A,j){switch(E.tag){case lt:{var V=E.payload;if(typeof V=="function"){xt(),Ri&&f.mode&mr&&V.call(j,T,A);var te=V.call(j,T,A);return kt(),te}return V}case Wn:f.effectTag=f.effectTag&~p0|Xr;case Ue:{var le=E.payload,Be;return typeof le=="function"?(xt(),Ri&&f.mode&mr&&le.call(j,T,A),Be=le.call(j,T,A),kt()):Be=le,Be==null?T:a({},T,Be)}case $t:return si=!0,T}return T}function wf(f,c,E,T,A){si=!1,c=w2(f,c),ci=c;for(var j=c.baseState,V=null,te=at,le=c.firstUpdate,Be=j;le!==null;){var Ke=le.expirationTime;if(Ke from render. Or maybe you meant to call this function rather than return it."))}function yh(f){function c(ot,Ot){if(!!f){var Ze=ot.lastEffect;Ze!==null?(Ze.nextEffect=Ot,ot.lastEffect=Ot):ot.firstEffect=ot.lastEffect=Ot,Ot.nextEffect=null,Ot.effectTag=G0}}function E(ot,Ot){if(!f)return null;for(var Ze=Ot;Ze!==null;)c(ot,Ze),Ze=Ze.sibling;return null}function T(ot,Ot){for(var Ze=new Map,Ut=Ot;Ut!==null;)Ut.key!==null?Ze.set(Ut.key,Ut):Ze.set(Ut.index,Ut),Ut=Ut.sibling;return Ze}function A(ot,Ot,Ze){var Ut=To(ot,Ot,Ze);return Ut.index=0,Ut.sibling=null,Ut}function j(ot,Ot,Ze){if(ot.index=Ze,!f)return Ot;var Ut=ot.alternate;if(Ut!==null){var Pn=Ut.index;return PnKr?(xu=hr,hr=null):xu=hr.sibling;var w0=Nt(ot,hr,Ze[Kr],Ut);if(w0===null){hr===null&&(hr=xu);break}f&&hr&&w0.alternate===null&&c(ot,hr),pu=j(w0,pu,Kr),Ku===null?pi=w0:Ku.sibling=w0,Ku=w0,hr=xu}if(Kr===Ze.length)return E(ot,hr),pi;if(hr===null){for(;KrW0?(Ms=xu,xu=null):Ms=xu.sibling;var yl=Nt(ot,xu,Xu.value,Ut);if(yl===null){xu===null&&(xu=Ms);break}f&&xu&&yl.alternate===null&&c(ot,xu),w0=j(yl,w0,W0),Kr===null?pu=yl:Kr.sibling=yl,Kr=yl,xu=Ms}if(Xu.done)return E(ot,xu),pu;if(xu===null){for(;!Xu.done;W0++,Xu=hr.next()){var rf=pt(ot,Xu.value,Ut);rf!==null&&(w0=j(rf,w0,W0),Kr===null?pu=rf:Kr.sibling=rf,Kr=rf)}return pu}for(var Wo=T(ot,xu);!Xu.done;W0++,Xu=hr.next()){var ks=Gt(Wo,ot,W0,Xu.value,Ut);ks!==null&&(f&&ks.alternate!==null&&Wo.delete(ks.key===null?W0:ks.key),w0=j(ks,w0,W0),Kr===null?pu=ks:Kr.sibling=ks,Kr=ks)}return f&&Wo.forEach(function(Zd){return c(ot,Zd)}),pu}function oi(ot,Ot,Ze,Ut){if(Ot!==null&&Ot.tag===ne){E(ot,Ot.sibling);var Pn=A(Ot,Ze,Ut);return Pn.return=ot,Pn}E(ot,Ot);var vn=dy(Ze,ot.mode,Ut);return vn.return=ot,vn}function Oi(ot,Ot,Ze,Ut){for(var Pn=Ze.key,vn=Ot;vn!==null;){if(vn.key===Pn)if(vn.tag===m?Ze.type===oe:vn.elementType===Ze.type||qc(vn,Ze)){E(ot,vn.sibling);var Wi=A(vn,Ze.type===oe?Ze.props.children:Ze.props,Ut);return Wi.ref=vc(ot,vn,Ze),Wi.return=ot,Wi._debugSource=Ze._source,Wi._debugOwner=Ze._owner,Wi}else{E(ot,vn);break}else c(ot,vn);vn=vn.sibling}if(Ze.type===oe){var pi=nf(Ze.props.children,ot.mode,Ut,Ze.key);return pi.return=ot,pi}else{var Ku=cy(Ze,ot.mode,Ut);return Ku.ref=vc(ot,Ot,Ze),Ku.return=ot,Ku}}function L0(ot,Ot,Ze,Ut){for(var Pn=Ze.key,vn=Ot;vn!==null;){if(vn.key===Pn)if(vn.tag===H&&vn.stateNode.containerInfo===Ze.containerInfo&&vn.stateNode.implementation===Ze.implementation){E(ot,vn.sibling);var Wi=A(vn,Ze.children||[],Ut);return Wi.return=ot,Wi}else{E(ot,vn);break}else c(ot,vn);vn=vn.sibling}var pi=py(Ze,ot.mode,Ut);return pi.return=ot,pi}function $i(ot,Ot,Ze,Ut){var Pn=typeof Ze=="object"&&Ze!==null&&Ze.type===oe&&Ze.key===null;Pn&&(Ze=Ze.props.children);var vn=typeof Ze=="object"&&Ze!==null;if(vn)switch(Ze.$$typeof){case fe:return V(Oi(ot,Ot,Ze,Ut));case xe:return V(L0(ot,Ot,Ze,Ut))}if(typeof Ze=="string"||typeof Ze=="number")return V(oi(ot,Ot,""+Ze,Ut));if(Jc(Ze))return yn(ot,Ot,Ze,Ut);if(fr(Ze))return kr(ot,Ot,Ze,Ut);if(vn&&mc(ot,Ze),typeof Ze=="function"&&pd(),typeof Ze=="undefined"&&!Pn)switch(ot.tag){case O:{var Wi=ot.stateNode;if(Wi.render._isMockFunction)break}case L:{var pi=ot.type;throw Error((pi.displayName||pi.name||"Component")+"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.")}}return E(ot,Ot)}return $i}var Tf=yh(!0),Zc=yh(!1);function gh(f,c){if(!(f===null||c.child===f.child))throw Error("Resuming work not yet implemented.");if(c.child!==null){var E=c.child,T=To(E,E.pendingProps,E.expirationTime);for(c.child=T,T.return=c;E.sibling!==null;)E=E.sibling,T=T.sibling=To(E,E.pendingProps,E.expirationTime),T.return=c;T.sibling=null}}function nm(f,c){for(var E=f.child;E!==null;)Av(E,c),E=E.sibling}var Vs={},ma=Ju(Vs),iu=Ju(Vs),M0=Ju(Vs);function o0(f){if(f===Vs)throw Error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.");return f}function ns(){var f=o0(M0.current);return f}function Ya(f,c){Jr(M0,c,f),Jr(iu,f,f),Jr(ma,Vs,f);var E=wt(c);ti(ma,f),Jr(ma,E,f)}function io(f){ti(ma,f),ti(iu,f),ti(M0,f)}function al(){var f=o0(ma.current);return f}function yc(f){var c=o0(M0.current),E=o0(ma.current),T=bt(E,f.type,c);E!==T&&(Jr(iu,f,f),Jr(ma,T,f))}function k2(f){iu.current===f&&(ti(ma,f),ti(iu,f))}var _h=0,Cf=1,xf=1,$c=2,kl=Ju(_h);function e1(f,c){return(f&c)!=0}function ya(f){return f&Cf}function hd(f,c){return f&Cf|c}function vd(f,c){return f|c}function Fr(f,c){Jr(kl,c,f)}function ga(f){ti(kl,f)}function N2(f,c){var E=f.memoizedState;if(E!==null)return E.dehydrated!==null;var T=f.memoizedProps;return T.fallback===void 0?!1:T.unstable_avoidThisFallback!==!0?!0:!c}function t1(f){for(var c=f;c!==null;){if(c.tag===pe){var E=c.memoizedState;if(E!==null){var T=E.dehydrated;if(T===null||Bs(T)||y0(T))return c}}else if(c.tag===yt&&c.memoizedProps.revealOrder!==void 0){var A=(c.effectTag&Xr)!==xi;if(A)return c}else if(c.child!==null){c.child.return=c,c=c.child;continue}if(c===f)return null;for(;c.sibling===null;){if(c.return===null||c.return===f)return null;c=c.return}c.sibling.return=c.return,c=c.sibling}return null}var md={},wi=Array.isArray;function L2(f,c,E,T){return{fiber:T,props:c,responder:f,rootEventTypes:null,state:E}}function rm(f,c,E,T,A){var j=md,V=f.getInitialState;V!==null&&(j=V(c));var te=L2(f,c,j,E);if(!A)for(var le=E;le!==null;){var Be=le.tag;if(Be===W){A=le.stateNode;break}else if(Be===U){A=le.stateNode.containerInfo;break}le=le.return}Le(f,te,c,j,A),T.set(f,te)}function yd(f,c,E,T,A){var j,V;if(f&&(j=f.responder,V=f.props),!(j&&j.$$typeof===jt))throw Error("An invalid value was used as an event listener. Expect one or many event listeners created via React.unstable_useResponder().");var te=V;if(E.has(j)){Xt(!1,'Duplicate event responder "%s" found in event listeners. Event listeners passed to elements cannot use the same event responder more than once.',j.displayName);return}E.add(j);var le=T.get(j);le===void 0?rm(j,te,c,T,A):(le.props=te,le.fiber=c)}function hn(f,c,E){var T=new Set,A=c.dependencies;if(f!=null){A===null&&(A=c.dependencies={expirationTime:at,firstContext:null,responders:new Map});var j=A.responders;if(j===null&&(j=new Map),wi(f))for(var V=0,te=f.length;V0){var j=A.dispatch;if(Cs!==null){var V=Cs.get(A);if(V!==void 0){Cs.delete(A);var te=T.memoizedState,le=V;do{var Be=le.action;te=f(te,Be),le=le.next}while(le!==null);return mo(te,T.memoizedState)||lp(),T.memoizedState=te,T.baseUpdate===A.last&&(T.baseState=te),A.lastRenderedState=te,[te,j]}}return[T.memoizedState,j]}var Ke=A.last,pt=T.baseUpdate,Nt=T.baseState,Gt;if(pt!==null?(Ke!==null&&(Ke.next=null),Gt=pt.next):Gt=Ke!==null?Ke.next:null,Gt!==null){var zt=Nt,yn=null,kr=null,oi=pt,Oi=Gt,L0=!1;do{var $i=Oi.expirationTime;if($iIu&&(Iu=$i,Xd(Iu));else if(vv($i,Oi.suspenseConfig),Oi.eagerReducer===f)zt=Oi.eagerState;else{var ot=Oi.action;zt=f(zt,ot)}oi=Oi,Oi=Oi.next}while(Oi!==null&&Oi!==Gt);L0||(kr=oi,yn=zt),mo(zt,T.memoizedState)||lp(),T.memoizedState=zt,T.baseUpdate=kr,T.baseState=yn,A.lastRenderedState=zt}var Ot=A.dispatch;return[T.memoizedState,Ot]}function Ff(f){var c=Dc();typeof f=="function"&&(f=f()),c.memoizedState=c.baseState=f;var E=c.queue={last:null,dispatch:null,lastRenderedReducer:F2,lastRenderedState:f},T=E.dispatch=s1.bind(null,cl,E);return[c.memoizedState,T]}function u1(f){return i1(F2,f)}function Qa(f,c,E,T){var A={tag:f,create:c,destroy:E,deps:T,next:null};if(rs===null)rs=Xa(),rs.lastEffect=A.next=A;else{var j=rs.lastEffect;if(j===null)rs.lastEffect=A.next=A;else{var V=j.next;j.next=A,A.next=V,rs.lastEffect=A}}return A}function o1(f){var c=Dc(),E={current:f};return Object.seal(E),c.memoizedState=E,E}function P2(f){var c=r1();return c.memoizedState}function Dd(f,c,E,T){var A=Dc(),j=T===void 0?null:T;Mf|=f,A.memoizedState=Qa(c,E,void 0,j)}function wc(f,c,E,T){var A=r1(),j=T===void 0?null:T,V=void 0;if(jn!==null){var te=jn.memoizedState;if(V=te.destroy,j!==null){var le=te.deps;if(Nf(j,le)){Qa(Af,E,V,j);return}}}Mf|=f,A.memoizedState=Qa(c,E,V,j)}function l1(f,c){return typeof jest!="undefined"&&Rv(cl),Dd(Dr|F0,sr|n1,f,c)}function Ll(f,c){return typeof jest!="undefined"&&Rv(cl),wc(Dr|F0,sr|n1,f,c)}function Ea(f,c){return Dd(Dr,Of|fl,f,c)}function wh(f,c){return wc(Dr,Of|fl,f,c)}function I2(f,c){if(typeof c=="function"){var E=c,T=f();return E(T),function(){E(null)}}else if(c!=null){var A=c;A.hasOwnProperty("current")||Xt(!1,"Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.","an object with keys {"+Object.keys(A).join(", ")+"}");var j=f();return A.current=j,function(){A.current=null}}}function b2(f,c,E){typeof c!="function"&&Xt(!1,"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",c!==null?typeof c:"null");var T=E!=null?E.concat([f]):null;return Dd(Dr,Of|fl,I2.bind(null,c,f),T)}function Sh(f,c,E){typeof c!="function"&&Xt(!1,"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",c!==null?typeof c:"null");var T=E!=null?E.concat([f]):null;return wc(Dr,Of|fl,I2.bind(null,c,f),T)}function wd(f,c){}var Th=wd;function Fl(f,c){var E=Dc(),T=c===void 0?null:c;return E.memoizedState=[f,T],f}function us(f,c){var E=r1(),T=c===void 0?null:c,A=E.memoizedState;if(A!==null&&T!==null){var j=A[1];if(Nf(T,j))return A[0]}return E.memoizedState=[f,T],f}function xs(f,c){var E=Dc(),T=c===void 0?null:c,A=f();return E.memoizedState=[A,T],A}function Gs(f,c){var E=r1(),T=c===void 0?null:c,A=E.memoizedState;if(A!==null&&T!==null){var j=A[1];if(Nf(T,j))return A[0]}var V=f();return E.memoizedState=[V,T],V}function B2(f,c){var E=Ff(f),T=E[0],A=E[1];return l1(function(){t.unstable_next(function(){var j=Ho.suspense;Ho.suspense=c===void 0?null:c;try{A(f)}finally{Ho.suspense=j}})},[f,c]),T}function Ch(f,c){var E=u1(f),T=E[0],A=E[1];return Ll(function(){t.unstable_next(function(){var j=Ho.suspense;Ho.suspense=c===void 0?null:c;try{A(f)}finally{Ho.suspense=j}})},[f,c]),T}function U2(f){var c=Ff(!1),E=c[0],T=c[1],A=Fl(function(j){T(!0),t.unstable_next(function(){var V=Ho.suspense;Ho.suspense=f===void 0?null:f;try{T(!1),j()}finally{Ho.suspense=V}})},[f,E]);return[A,E]}function j2(f){var c=u1(!1),E=c[0],T=c[1],A=us(function(j){T(!0),t.unstable_next(function(){var V=Ho.suspense;Ho.suspense=f===void 0?null:f;try{T(!1),j()}finally{Ho.suspense=V}})},[f,E]);return[A,E]}function s1(f,c,E){if(!(Ec=0){var E=f1()-c1;f.actualDuration+=E,c&&(f.selfBaseDuration=E),c1=-1}}var Il=null,Za=null,Da=!1;function W2(){Da&&Xt(!1,"We should not be hydrating here. This is a bug in React. Please file a bug.")}function V2(f){if(!we)return!1;var c=f.stateNode.containerInfo;return Za=B(c),Il=f,Da=!0,!0}function lm(f,c){return we?(Za=ji(c),K2(f),Da=!0,!0):!1}function G2(f,c){switch(f.tag){case U:ue(f.stateNode.containerInfo,c);break;case W:He(f.type,f.memoizedProps,f.stateNode,c);break}var E=I4();E.stateNode=c,E.return=f,E.effectTag=G0,f.lastEffect!==null?(f.lastEffect.nextEffect=E,f.lastEffect=E):f.firstEffect=f.lastEffect=E}function kh(f,c){switch(c.effectTag=c.effectTag&~su|mi,f.tag){case U:{var E=f.stateNode.containerInfo;switch(c.tag){case W:var T=c.type,A=c.pendingProps;nt(E,T,A);break;case ne:var j=c.pendingProps;Ct(E,j);break;case pe:Mt(E);break}break}case W:{var V=f.type,te=f.memoizedProps,le=f.stateNode;switch(c.tag){case W:var Be=c.type,Ke=c.pendingProps;It(V,te,le,Be,Ke);break;case ne:var pt=c.pendingProps;sn(V,te,le,pt);break;case pe:rn(V,te,le);break}break}default:return}}function Nh(f,c){switch(f.tag){case W:{var E=f.type,T=f.pendingProps,A=pf(c,E,T);return A!==null?(f.stateNode=A,!0):!1}case ne:{var j=f.pendingProps,V=bs(c,j);return V!==null?(f.stateNode=V,!0):!1}case pe:{if(Ai){var te=ba(c);if(te!==null){var le={dehydrated:te,retryTime:Di};f.memoizedState=le;var Be=b4(te);return Be.return=f,f.child=Be,!0}}return!1}default:return!1}}function Y2(f){if(!!Da){var c=Za;if(!c){kh(Il,f),Da=!1,Il=f;return}var E=c;if(!Nh(f,c)){if(c=ji(E),!c||!Nh(f,c)){kh(Il,f),Da=!1,Il=f;return}G2(Il,E)}Il=f,Za=B(c)}}function sm(f,c,E){if(!we)throw Error("Expected prepareToHydrateHostInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var T=f.stateNode,A=z(T,f.type,f.memoizedProps,c,E,f);return f.updateQueue=A,A!==null}function am(f){if(!we)throw Error("Expected prepareToHydrateHostTextInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var c=f.stateNode,E=f.memoizedProps,T=G(c,E,f);if(T){var A=Il;if(A!==null)switch(A.tag){case U:{var j=A.stateNode.containerInfo;Qe(j,c,E);break}case W:{var V=A.type,te=A.memoizedProps,le=A.stateNode;ht(V,te,le,c,E);break}}}return T}function Lh(f){if(!we)throw Error("Expected prepareToHydrateHostSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var c=f.memoizedState,E=c!==null?c.dehydrated:null;if(!E)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");$(E,f)}function fm(f){if(!we)throw Error("Expected skipPastDehydratedSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var c=f.memoizedState,E=c!==null?c.dehydrated:null;if(!E)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");return Te(E)}function K2(f){for(var c=f.return;c!==null&&c.tag!==W&&c.tag!==U&&c.tag!==pe;)c=c.return;Il=c}function p1(f){if(!we||f!==Il)return!1;if(!Da)return K2(f),Da=!0,!1;var c=f.type;if(f.tag!==W||c!=="head"&&c!=="body"&&!Ni(c,f.memoizedProps))for(var E=Za;E;)G2(f,E),E=ji(E);return K2(f),f.tag===pe?Za=fm(f):Za=Il?ji(f.stateNode):null,!0}function h1(){!we||(Il=null,Za=null,Da=!1)}var v1=rt.ReactCurrentOwner,wa=!1,X2,Ys,Ks,Xs,Q2,Sa,m1,Sd,Sc,J2;X2={},Ys={},Ks={},Xs={},Q2={},Sa=!1,m1=!1,Sd={},Sc={},J2={};function Do(f,c,E,T){f===null?c.child=Zc(c,null,E,T):c.child=Tf(c,f.child,E,T)}function Fh(f,c,E,T){c.child=Tf(c,f.child,null,T),c.child=Tf(c,null,E,T)}function Ph(f,c,E,T,A){if(c.type!==c.elementType){var j=E.propTypes;j&&_(j,T,"prop",qt(E),Lr)}var V=E.render,te=c.ref,le;return u0(c,A),v1.current=c,$e("render"),le=Lf(f,c,V,T,te,A),Ri&&c.mode&mr&&c.memoizedState!==null&&(le=Lf(f,c,V,T,te,A)),$e(null),f!==null&&!wa?(gd(f,c,A),Ta(f,c,A)):(c.effectTag|=lu,Do(f,c,le,A),c.child)}function Ih(f,c,E,T,A,j){if(f===null){var V=E.type;if(a0(V)&&E.compare===null&&E.defaultProps===void 0){var te=V;return te=r0(V),c.tag=ie,c.type=te,ep(c,V),bh(f,c,te,T,A,j)}{var le=V.propTypes;le&&_(le,T,"prop",qt(V),Lr)}var Be=fy(E.type,null,T,null,c.mode,j);return Be.ref=c.ref,Be.return=c,c.child=Be,Be}{var Ke=E.type,pt=Ke.propTypes;pt&&_(pt,T,"prop",qt(Ke),Lr)}var Nt=f.child;if(A component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",le,le),X2[le]=!0)}c.mode&mr&&Rl.recordLegacyContextWarning(c,null),v1.current=c,te=Lf(null,c,E,A,j,T)}if(c.effectTag|=lu,typeof te=="object"&&te!==null&&typeof te.render=="function"&&te.$$typeof===void 0){{var Be=qt(E)||"Unknown";Ys[Be]||(We(!1,"The <%s /> component appears to be a function component that returns a class instance. Change %s to a class that extends React.Component instead. If you can't use a class try assigning the prototype on the function as a workaround. `%s.prototype = React.Component.prototype`. Don't use an arrow function since it cannot be called with `new` by React.",Be,Be,Be),Ys[Be]=!0)}c.tag=O,_d();var Ke=!1;Xi(E)?(Ke=!0,Hi(c)):Ke=!1,c.memoizedState=te.state!==null&&te.state!==void 0?te.state:null;var pt=E.getDerivedStateFromProps;return typeof pt=="function"&&Sf(c,E,pt,A),sl(c,te),hc(c,E,A,T),$2(null,c,E,!0,Ke,T)}else return c.tag=L,ai&&E.contextTypes&&We(!1,"%s uses the legacy contextTypes API which is no longer supported. Use React.createContext() with React.useContext() instead.",qt(E)||"Unknown"),Ri&&c.mode&mr&&c.memoizedState!==null&&(te=Lf(null,c,E,A,j,T)),Do(null,c,te,T),ep(c,E),c.child}function ep(f,c){if(c&&c.childContextTypes&&We(!1,"%s(...): childContextTypes cannot be defined on a function component.",c.displayName||c.name||"Component"),f.ref!==null){var E="",T=g0();T&&(E+=` - -Check the render method of \``+T+"`.");var A=T||f._debugID||"",j=f._debugSource;j&&(A=j.fileName+":"+j.lineNumber),Q2[A]||(Q2[A]=!0,Xt(!1,"Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?%s",E))}if(Xl&&c.defaultProps!==void 0){var V=qt(c)||"Unknown";J2[V]||(We(!1,"%s: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.",V),J2[V]=!0)}if(typeof c.getDerivedStateFromProps=="function"){var te=qt(c)||"Unknown";Xs[te]||(We(!1,"%s: Function components do not support getDerivedStateFromProps.",te),Xs[te]=!0)}if(typeof c.contextType=="object"&&c.contextType!==null){var le=qt(c)||"Unknown";Ks[le]||(We(!1,"%s: Function components do not support contextType.",le),Ks[le]=!0)}}var Cd={dehydrated:null,retryTime:at};function tp(f,c,E){return e1(f,$c)&&(c===null||c.memoizedState!==null)}function Hh(f,c,E){var T=c.mode,A=c.pendingProps;Xg(c)&&(c.effectTag|=Xr);var j=kl.current,V=!1,te=(c.effectTag&Xr)!==xi;if(te||tp(j,f,c)?(V=!0,c.effectTag&=~Xr):(f===null||f.memoizedState!==null)&&A.fallback!==void 0&&A.unstable_avoidThisFallback!==!0&&(j=vd(j,xf)),j=ya(j),Fr(c,j),"maxDuration"in A&&(m1||(m1=!0,Xt(!1,"maxDuration has been removed from React. Remove the maxDuration prop."))),f===null){if(A.fallback!==void 0&&(Y2(c),Ai)){var le=c.memoizedState;if(le!==null){var Be=le.dehydrated;if(Be!==null)return qh(c,Be,E)}}if(V){var Ke=A.fallback,pt=nf(null,T,at,null);if(pt.return=c,(c.mode&Y)===Ar){var Nt=c.memoizedState,Gt=Nt!==null?c.child.child:c.child;pt.child=Gt;for(var zt=Gt;zt!==null;)zt.return=pt,zt=zt.sibling}var yn=nf(Ke,T,E,null);return yn.return=c,pt.sibling=yn,c.memoizedState=Cd,c.child=pt,yn}else{var kr=A.children;return c.memoizedState=null,c.child=Zc(c,null,kr,E)}}else{var oi=f.memoizedState;if(oi!==null){if(Ai){var Oi=oi.dehydrated;if(Oi!==null)if(te){if(c.memoizedState!==null)return c.child=f.child,c.effectTag|=Xr,null;var L0=A.fallback,$i=nf(null,T,at,null);if($i.return=c,$i.child=null,(c.mode&Y)===Ar)for(var ot=$i.child=c.child;ot!==null;)ot.return=$i,ot=ot.sibling;else Tf(c,f.child,null,E);if(en&&c.mode&ii){for(var Ot=0,Ze=$i.child;Ze!==null;)Ot+=Ze.treeBaseDuration,Ze=Ze.sibling;$i.treeBaseDuration=Ot}var Ut=nf(L0,T,E,null);return Ut.return=c,$i.sibling=Ut,Ut.effectTag|=mi,$i.childExpirationTime=at,c.memoizedState=Cd,c.child=$i,Ut}else return Wh(f,c,Oi,oi,E)}var Pn=f.child,vn=Pn.sibling;if(V){var Wi=A.fallback,pi=To(Pn,Pn.pendingProps,at);if(pi.return=c,(c.mode&Y)===Ar){var Ku=c.memoizedState,hr=Ku!==null?c.child.child:c.child;if(hr!==Pn.child){pi.child=hr;for(var pu=hr;pu!==null;)pu.return=pi,pu=pu.sibling}}if(en&&c.mode&ii){for(var Kr=0,xu=pi.child;xu!==null;)Kr+=xu.treeBaseDuration,xu=xu.sibling;pi.treeBaseDuration=Kr}var w0=To(vn,Wi,vn.expirationTime);return w0.return=c,pi.sibling=w0,pi.childExpirationTime=at,c.memoizedState=Cd,c.child=pi,w0}else{var W0=A.children,Ms=Pn.child,Xu=Tf(c,Ms,W0,E);return c.memoizedState=null,c.child=Xu}}else{var yl=f.child;if(V){var rf=A.fallback,Wo=nf(null,T,at,null);if(Wo.return=c,Wo.child=yl,yl!==null&&(yl.return=Wo),(c.mode&Y)===Ar){var ks=c.memoizedState,Zd=ks!==null?c.child.child:c.child;Wo.child=Zd;for(var Vf=Zd;Vf!==null;)Vf.return=Wo,Vf=Vf.sibling}if(en&&c.mode&ii){for(var Lc=0,zl=Wo.child;zl!==null;)Lc+=zl.treeBaseDuration,zl=zl.sibling;Wo.treeBaseDuration=Lc}var Vo=nf(rf,T,E,null);return Vo.return=c,Wo.sibling=Vo,Vo.effectTag|=mi,Wo.childExpirationTime=at,c.memoizedState=Cd,c.child=Wo,Vo}else{c.memoizedState=null;var N1=A.children;return c.child=Tf(c,yl,N1,E)}}}}function np(f,c,E){c.memoizedState=null;var T=c.pendingProps,A=T.children;return Do(f,c,A,E),c.child}function qh(f,c,E){if((f.mode&Y)===Ar)Xt(!1,"Cannot hydrate Suspense in legacy mode. Switch from ReactDOM.hydrate(element, container) to ReactDOM.createBlockingRoot(container, { hydrate: true }).render(element) or remove the Suspense components from the server rendered components."),f.expirationTime=Un;else if(y0(c)){var T=Ul(),A=Ds(T);bn&&x(A),f.expirationTime=A}else f.expirationTime=Di,bn&&x(Di);return null}function Wh(f,c,E,T,A){if(W2(),(c.mode&Y)===Ar||y0(E))return np(f,c,A);var j=f.childExpirationTime>=A;if(wa||j){if(A. Use lowercase "%s" instead.',f,f.toLowerCase());break}case"forward":case"backward":{Xt(!1,'"%s" is not a valid value for revealOrder on . React uses the -s suffix in the spelling. Use "%ss" instead.',f,f.toLowerCase());break}default:Xt(!1,'"%s" is not a supported revealOrder on . Did you mean "together", "forwards" or "backwards"?',f);break}else Xt(!1,'%s is not a supported value for revealOrder on . Did you mean "together", "forwards" or "backwards"?',f)}function Vh(f,c){f!==void 0&&!Sc[f]&&(f!=="collapsed"&&f!=="hidden"?(Sc[f]=!0,Xt(!1,'"%s" is not a supported value for tail on . Did you mean "collapsed" or "hidden"?',f)):c!=="forwards"&&c!=="backwards"&&(Sc[f]=!0,Xt(!1,' is only valid if revealOrder is "forwards" or "backwards". Did you mean to specify revealOrder="forwards"?',f)))}function g1(f,c){{var E=Array.isArray(f),T=!E&&typeof fr(f)=="function";if(E||T){var A=E?"array":"iterable";return Xt(!1,"A nested %s was passed to row #%s in . Wrap it in an additional SuspenseList to configure its revealOrder: ... {%s} ... ",A,c,A),!1}}return!0}function gm(f,c){if((c==="forwards"||c==="backwards")&&f!==void 0&&f!==null&&f!==!1)if(Array.isArray(f)){for(var E=0;E. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?',c)}}function ip(f,c,E,T,A,j){var V=f.memoizedState;V===null?f.memoizedState={isBackwards:c,rendering:null,last:T,tail:E,tailExpiration:0,tailMode:A,lastEffect:j}:(V.isBackwards=c,V.rendering=null,V.last=T,V.tail=E,V.tailExpiration=0,V.tailMode=A,V.lastEffect=j)}function up(f,c,E){var T=c.pendingProps,A=T.revealOrder,j=T.tail,V=T.children;ym(A),Vh(j,A),gm(V,A),Do(f,c,V,E);var te=kl.current,le=e1(te,$c);if(le)te=hd(te,$c),c.effectTag|=Xr;else{var Be=f!==null&&(f.effectTag&Xr)!==xi;Be&&vm(c,c.child,E),te=ya(te)}if(Fr(c,te),(c.mode&Y)===Ar)c.memoizedState=null;else switch(A){case"forwards":{var Ke=mm(c.child),pt;Ke===null?(pt=c.child,c.child=null):(pt=Ke.sibling,Ke.sibling=null),ip(c,!1,pt,Ke,j,c.lastEffect);break}case"backwards":{var Nt=null,Gt=c.child;for(c.child=null;Gt!==null;){var zt=Gt.alternate;if(zt!==null&&t1(zt)===null){c.child=Gt;break}var yn=Gt.sibling;Gt.sibling=Nt,Nt=Gt,Gt=yn}ip(c,!0,Nt,null,j,c.lastEffect);break}case"together":{ip(c,!1,null,null,void 0,c.lastEffect);break}default:c.memoizedState=null}return c.child}function _m(f,c,E){Ya(c,c.stateNode.containerInfo);var T=c.pendingProps;return f===null?c.child=Tf(c,null,T,E):Do(f,c,T,E),c.child}function Em(f,c,E){var T=c.type,A=T._context,j=c.pendingProps,V=c.memoizedProps,te=j.value;{var le=c.type.propTypes;le&&_(le,j,"prop","Context.Provider",Lr)}if(xr(c,te),V!==null){var Be=V.value,Ke=cu(A,te,Be);if(Ke===0){if(V.children===j.children&&!sa())return Ta(f,c,E)}else Ol(c,A,Ke,E)}var pt=j.children;return Do(f,c,pt,E),c.child}var Gh=!1;function Dm(f,c,E){var T=c.type;T._context===void 0?T!==T.Consumer&&(Gh||(Gh=!0,Xt(!1,"Rendering directly is not supported and will be removed in a future major release. Did you mean to render instead?"))):T=T._context;var A=c.pendingProps,j=A.children;typeof j!="function"&&We(!1,"A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."),u0(c,E);var V=Ve(T,A.unstable_observedBits),te;return v1.current=c,$e("render"),te=j(V),$e(null),c.effectTag|=lu,Do(f,c,te,E),c.child}function wm(f,c,E){var T=c.type.impl;if(T.reconcileChildren===!1)return null;var A=c.pendingProps,j=A.children;return Do(f,c,j,E),c.child}function op(f,c,E){var T=c.pendingProps,A=T.children;return Do(f,c,A,E),c.child}function lp(){wa=!0}function Ta(f,c,E){tu(c),f!==null&&(c.dependencies=f.dependencies),en&&Mh(c);var T=c.expirationTime;T!==at&&Xd(T);var A=c.childExpirationTime;return A=E;le&&(c.effectTag|=Dr)}break;case pe:{var Be=c.memoizedState;if(Be!==null){if(Ai&&Be.dehydrated!==null){Fr(c,ya(kl.current)),c.effectTag|=Xr;break}var Ke=c.child,pt=Ke.childExpirationTime;if(pt!==at&&pt>=E)return Hh(f,c,E);Fr(c,ya(kl.current));var Nt=Ta(f,c,E);return Nt!==null?Nt.sibling:null}else Fr(c,ya(kl.current));break}case yt:{var Gt=(f.effectTag&Xr)!==xi,zt=c.childExpirationTime>=E;if(Gt){if(zt)return up(f,c,E);c.effectTag|=Xr}var yn=c.memoizedState;if(yn!==null&&(yn.rendering=null,yn.tail=null),Fr(c,kl.current),zt)break;return null}}return Ta(f,c,E)}else wa=!1}else wa=!1;switch(c.expirationTime=at,c.tag){case C:return hm(f,c,c.type,E);case Oe:{var kr=c.elementType;return If(f,c,kr,T,E)}case L:{var oi=c.type,Oi=c.pendingProps,L0=c.elementType===oi?Oi:qi(oi,Oi);return Z2(f,c,oi,L0,E)}case O:{var $i=c.type,ot=c.pendingProps,Ot=c.elementType===$i?ot:qi($i,ot);return jh(f,c,$i,Ot,E)}case U:return dm(f,c,E);case W:return pm(f,c,E);case ne:return Pf(f,c);case pe:return Hh(f,c,E);case H:return _m(f,c,E);case se:{var Ze=c.type,Ut=c.pendingProps,Pn=c.elementType===Ze?Ut:qi(Ze,Ut);return Ph(f,c,Ze,Pn,E)}case m:return cm(f,c,E);case he:return Bh(f,c,E);case De:return Uh(f,c,E);case ve:return Em(f,c,E);case Ee:return Dm(f,c,E);case me:{var vn=c.type,Wi=c.pendingProps,pi=qi(vn,Wi);if(c.type!==c.elementType){var Ku=vn.propTypes;Ku&&_(Ku,pi,"prop",qt(vn),Lr)}return pi=qi(vn.type,pi),Ih(f,c,vn,pi,T,E)}case ie:return bh(f,c,c.type,c.pendingProps,T,E);case je:{var hr=c.type,pu=c.pendingProps,Kr=c.elementType===hr?pu:qi(hr,pu);return Td(f,c,hr,Kr,E)}case yt:return up(f,c,E);case gt:{if(Wt)return wm(f,c,E);break}case Xe:{if(Au)return op(f,c,E);break}}throw Error("Unknown unit of work tag ("+c.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function Yh(f,c,E,T){return{currentFiber:f,impl:E,instance:null,prevProps:null,props:c,state:T}}function xd(f){return f.tag===pe&&f.memoizedState!==null}function E1(f){return f.child.sibling.child}var Kh={};function ap(f,c,E){if(Au){if(f.tag===W){var T=f.type,A=f.memoizedProps,j=f.stateNode,V=No(j);V!==null&&c(T,A||Kh,V)===!0&&E.push(V)}var te=f.child;xd(f)&&(te=E1(f)),te!==null&&fp(te,c,E)}}function Xh(f,c){if(Au){if(f.tag===W){var E=f.type,T=f.memoizedProps,A=f.stateNode,j=No(A);if(j!==null&&c(E,T,j)===!0)return j}var V=f.child;if(xd(f)&&(V=E1(f)),V!==null)return Qh(V,c)}return null}function fp(f,c,E){for(var T=f;T!==null;)ap(T,c,E),T=T.sibling}function Qh(f,c){for(var E=f;E!==null;){var T=Xh(E,c);if(T!==null)return T;E=E.sibling}return null}function Jh(f,c,E){if(Rd(f,c))E.push(f.stateNode.methods);else{var T=f.child;xd(f)&&(T=E1(f)),T!==null&&cp(T,c,E)}}function cp(f,c,E){for(var T=f;T!==null;)Jh(T,c,E),T=T.sibling}function Rd(f,c){return f.tag===Xe&&f.type===c&&f.stateNode!==null}function Ad(f,c){return{getChildren:function(){var E=c.fiber,T=E.child,A=[];return T!==null&&cp(T,f,A),A.length===0?null:A},getChildrenFromRoot:function(){for(var E=c.fiber,T=E;T!==null;){var A=T.return;if(A===null||(T=A,T.tag===Xe&&T.type===f))break}var j=[];return cp(T.child,f,j),j.length===0?null:j},getParent:function(){for(var E=c.fiber.return;E!==null;){if(E.tag===Xe&&E.type===f)return E.stateNode.methods;E=E.return}return null},getProps:function(){var E=c.fiber;return E.memoizedProps},queryAllNodes:function(E){var T=c.fiber,A=T.child,j=[];return A!==null&&fp(A,E,j),j.length===0?null:j},queryFirstNode:function(E){var T=c.fiber,A=T.child;return A!==null?Qh(A,E):null},containsNode:function(E){for(var T=cr(E);T!==null;){if(T.tag===Xe&&T.type===f&&T.stateNode===c)return!0;T=T.return}return!1}}}function H0(f){f.effectTag|=Dr}function Od(f){f.effectTag|=Ao}var Ca,$a,Md,kd;if(b0)Ca=function(f,c,E,T){for(var A=c.child;A!==null;){if(A.tag===W||A.tag===ne)Qr(f,A.stateNode);else if(Wt&&A.tag===gt)Qr(f,A.stateNode.instance);else if(A.tag!==H){if(A.child!==null){A.child.return=A,A=A.child;continue}}if(A===c)return;for(;A.sibling===null;){if(A.return===null||A.return===c)return;A=A.return}A.sibling.return=A.return,A=A.sibling}},$a=function(f){},Md=function(f,c,E,T,A){var j=f.memoizedProps;if(j!==T){var V=c.stateNode,te=al(),le=h0(V,E,j,T,A,te);c.updateQueue=le,le&&H0(c)}},kd=function(f,c,E,T){E!==T&&H0(c)};else if(X){Ca=function(f,c,E,T){for(var A=c.child;A!==null;){e:if(A.tag===W){var j=A.stateNode;if(E&&T){var V=A.memoizedProps,te=A.type;j=$r(j,te,V,A)}Qr(f,j)}else if(A.tag===ne){var le=A.stateNode;if(E&&T){var Be=A.memoizedProps;le=Zl(le,Be,A)}Qr(f,le)}else if(Wt&&A.tag===gt){var Ke=A.stateNode.instance;if(E&&T){var pt=A.memoizedProps,Nt=A.type;Ke=$r(Ke,Nt,pt,A)}Qr(f,Ke)}else if(A.tag!==H){if(A.tag===pe){if((A.effectTag&Dr)!==xi){var Gt=A.memoizedState!==null;if(Gt){var zt=A.child;if(zt!==null){zt.child!==null&&(zt.child.return=zt,Ca(f,zt,!0,Gt));var yn=zt.sibling;if(yn!==null){yn.return=A,A=yn;continue}}}}if(A.child!==null){A.child.return=A,A=A.child;continue}}else if(A.child!==null){A.child.return=A,A=A.child;continue}}if(A=A,A===c)return;for(;A.sibling===null;){if(A.return===null||A.return===c)return;A=A.return}A.sibling.return=A.return,A=A.sibling}};var dp=function(f,c,E,T){for(var A=c.child;A!==null;){e:if(A.tag===W){var j=A.stateNode;if(E&&T){var V=A.memoizedProps,te=A.type;j=$r(j,te,V,A)}Qn(f,j)}else if(A.tag===ne){var le=A.stateNode;if(E&&T){var Be=A.memoizedProps;le=Zl(le,Be,A)}Qn(f,le)}else if(Wt&&A.tag===gt){var Ke=A.stateNode.instance;if(E&&T){var pt=A.memoizedProps,Nt=A.type;Ke=$r(Ke,Nt,pt,A)}Qn(f,Ke)}else if(A.tag!==H){if(A.tag===pe){if((A.effectTag&Dr)!==xi){var Gt=A.memoizedState!==null;if(Gt){var zt=A.child;if(zt!==null){zt.child!==null&&(zt.child.return=zt,dp(f,zt,!0,Gt));var yn=zt.sibling;if(yn!==null){yn.return=A,A=yn;continue}}}}if(A.child!==null){A.child.return=A,A=A.child;continue}}else if(A.child!==null){A.child.return=A,A=A.child;continue}}if(A=A,A===c)return;for(;A.sibling===null;){if(A.return===null||A.return===c)return;A=A.return}A.sibling.return=A.return,A=A.sibling}};$a=function(f){var c=f.stateNode,E=f.firstEffect===null;if(!E){var T=c.containerInfo,A=S0(T);dp(A,f,!1,!1),c.pendingChildren=A,H0(f),ac(T,A)}},Md=function(f,c,E,T,A){var j=f.stateNode,V=f.memoizedProps,te=c.firstEffect===null;if(te&&V===T){c.stateNode=j;return}var le=c.stateNode,Be=al(),Ke=null;if(V!==T&&(Ke=h0(le,E,V,T,A,Be)),te&&Ke===null){c.stateNode=j;return}var pt=ms(j,Ke,E,V,T,c,te,le);Ou(pt,E,T,A,Be)&&H0(c),c.stateNode=pt,te?H0(c):Ca(pt,c,!1,!1)},kd=function(f,c,E,T){if(E!==T){var A=ns(),j=al();c.stateNode=hs(T,A,j,c),H0(c)}}}else $a=function(f){},Md=function(f,c,E,T,A){},kd=function(f,c,E,T){};function Nd(f,c){switch(f.tailMode){case"hidden":{for(var E=f.tail,T=null;E!==null;)E.alternate!==null&&(T=E),E=E.sibling;T===null?f.tail=null:T.sibling=null;break}case"collapsed":{for(var A=f.tail,j=null;A!==null;)A.alternate!==null&&(j=A),A=A.sibling;j===null?!c&&f.tail!==null?f.tail.sibling=null:f.tail=null:j.sibling=null;break}}}function Zh(f,c,E){var T=c.pendingProps;switch(c.tag){case C:break;case Oe:break;case ie:case L:break;case O:{var A=c.type;Xi(A)&&Hs(c);break}case U:{io(c),R0(c);var j=c.stateNode;if(j.pendingContext&&(j.context=j.pendingContext,j.pendingContext=null),f===null||f.child===null){var V=p1(c);V&&H0(c)}$a(c);break}case W:{k2(c);var te=ns(),le=c.type;if(f!==null&&c.stateNode!=null){if(Md(f,c,le,T,te),gi){var Be=f.memoizedProps.listeners,Ke=T.listeners;Be!==Ke&&H0(c)}f.ref!==c.ref&&Od(c)}else{if(!T){if(c.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");break}var pt=al(),Nt=p1(c);if(Nt){if(sm(c,te,pt)&&H0(c),gi){var Gt=T.listeners;Gt!=null&&hn(Gt,c,te)}}else{var zt=Ki(le,T,te,pt,c);if(Ca(zt,c,!1,!1),c.stateNode=zt,gi){var yn=T.listeners;yn!=null&&hn(yn,c,te)}Ou(zt,le,T,te,pt)&&H0(c)}c.ref!==null&&Od(c)}break}case ne:{var kr=T;if(f&&c.stateNode!=null){var oi=f.memoizedProps;kd(f,c,oi,kr)}else{if(typeof kr!="string"&&c.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");var Oi=ns(),L0=al(),$i=p1(c);$i?am(c)&&H0(c):c.stateNode=hs(kr,Oi,L0,c)}break}case se:break;case pe:{ga(c);var ot=c.memoizedState;if(Ai&&ot!==null&&ot.dehydrated!==null)if(f===null){var Ot=p1(c);if(!Ot)throw Error("A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.");return Lh(c),bn&&x(Di),null}else return h1(),(c.effectTag&Xr)===xi&&(c.memoizedState=null),c.effectTag|=Dr,null;if((c.effectTag&Xr)!==xi)return c.expirationTime=E,c;var Ze=ot!==null,Ut=!1;if(f===null)c.memoizedProps.fallback!==void 0&&p1(c);else{var Pn=f.memoizedState;if(Ut=Pn!==null,!Ze&&Pn!==null){var vn=f.child.sibling;if(vn!==null){var Wi=c.firstEffect;Wi!==null?(c.firstEffect=vn,vn.nextEffect=Wi):(c.firstEffect=c.lastEffect=vn,vn.nextEffect=null),vn.effectTag=G0}}}if(Ze&&!Ut&&(c.mode&Y)!==Ar){var pi=f===null&&c.memoizedProps.unstable_avoidThisFallback!==!0;pi||e1(kl.current,xf)?mv():yv()}X&&Ze&&(c.effectTag|=Dr),b0&&(Ze||Ut)&&(c.effectTag|=Dr),Yi&&c.updateQueue!==null&&c.memoizedProps.suspenseCallback!=null&&(c.effectTag|=Dr);break}case m:break;case he:break;case De:break;case H:io(c),$a(c);break;case ve:i0(c);break;case Ee:break;case me:break;case je:{var Ku=c.type;Xi(Ku)&&Hs(c);break}case yt:{ga(c);var hr=c.memoizedState;if(hr===null)break;var pu=(c.effectTag&Xr)!==xi,Kr=hr.rendering;if(Kr===null)if(pu)Nd(hr,!1);else{var xu=gv()&&(f===null||(f.effectTag&Xr)===xi);if(!xu)for(var w0=c.child;w0!==null;){var W0=t1(w0);if(W0!==null){pu=!0,c.effectTag|=Xr,Nd(hr,!1);var Ms=W0.updateQueue;return Ms!==null&&(c.updateQueue=Ms,c.effectTag|=Dr),hr.lastEffect===null&&(c.firstEffect=null),c.lastEffect=hr.lastEffect,nm(c,E),Fr(c,hd(kl.current,$c)),c.child}w0=w0.sibling}}else{if(!pu){var Xu=t1(Kr);if(Xu!==null){c.effectTag|=Xr,pu=!0;var yl=Xu.updateQueue;if(yl!==null&&(c.updateQueue=yl,c.effectTag|=Dr),Nd(hr,!0),hr.tail===null&&hr.tailMode==="hidden"&&!Kr.alternate){var rf=c.lastEffect=hr.lastEffect;return rf!==null&&(rf.nextEffect=null),null}}else if(vt()>hr.tailExpiration&&E>Di){c.effectTag|=Xr,pu=!0,Nd(hr,!1);var Wo=E-1;c.expirationTime=c.childExpirationTime=Wo,bn&&x(Wo)}}if(hr.isBackwards)Kr.sibling=c.child,c.child=Kr;else{var ks=hr.last;ks!==null?ks.sibling=Kr:c.child=Kr,hr.last=Kr}}if(hr.tail!==null){if(hr.tailExpiration===0){var Zd=500;hr.tailExpiration=vt()+Zd}var Vf=hr.tail;hr.rendering=Vf,hr.tail=Vf.sibling,hr.lastEffect=c.lastEffect,Vf.sibling=null;var Lc=kl.current;return pu?Lc=hd(Lc,$c):Lc=ya(Lc),Fr(c,Lc),Vf}break}case gt:{if(Wt){var zl=c.type.impl,Vo=c.stateNode;if(Vo===null){var N1=zl.getInitialState,n_;N1!==void 0&&(n_=N1(T)),Vo=c.stateNode=Yh(c,T,zl,n_||{});var r_=dt(Vo);if(Vo.instance=r_,zl.reconcileChildren===!1)return null;Ca(r_,c,!1,!1),Yn(Vo)}else{var $4=Vo.props;if(Vo.prevProps=$4,Vo.props=T,Vo.currentFiber=c,X){var i_=oa(Vo);Vo.instance=i_,Ca(i_,c,!1,!1)}var eE=Cn(Vo);eE&&H0(c)}}break}case Xe:{if(Au)if(f===null){var tE=c.type,Ey={fiber:c,methods:null};if(c.stateNode=Ey,Ey.methods=Ad(tE,Ey),gi){var u_=T.listeners;if(u_!=null){var nE=ns();hn(u_,c,nE)}}c.ref!==null&&(Od(c),H0(c))}else{if(gi){var rE=f.memoizedProps.listeners,iE=T.listeners;(rE!==iE||c.ref!==null)&&H0(c)}else c.ref!==null&&H0(c);f.ref!==c.ref&&Od(c)}break}default:throw Error("Unknown unit of work tag ("+c.tag+"). This error is likely caused by a bug in React. Please file an issue.")}return null}function Sm(f,c){switch(f.tag){case O:{var E=f.type;Xi(E)&&Hs(f);var T=f.effectTag;return T&p0?(f.effectTag=T&~p0|Xr,f):null}case U:{io(f),R0(f);var A=f.effectTag;if((A&Xr)!==xi)throw Error("The root failed to unmount after an error. This is likely a bug in React. Please file an issue.");return f.effectTag=A&~p0|Xr,f}case W:return k2(f),null;case pe:{if(ga(f),Ai){var j=f.memoizedState;if(j!==null&&j.dehydrated!==null){if(f.alternate===null)throw Error("Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.");h1()}}var V=f.effectTag;return V&p0?(f.effectTag=V&~p0|Xr,f):null}case yt:return ga(f),null;case H:return io(f),null;case ve:return i0(f),null;default:return null}}function $h(f){switch(f.tag){case O:{var c=f.type.childContextTypes;c!=null&&Hs(f);break}case U:{io(f),R0(f);break}case W:{k2(f);break}case H:io(f);break;case pe:ga(f);break;case yt:ga(f);break;case ve:i0(f);break;default:break}}function pp(f,c){return{value:f,source:c,stack:Cr(c)}}var hp=function(f,c,E,T,A,j,V,te,le){var Be=Array.prototype.slice.call(arguments,3);try{c.apply(E,Be)}catch(Ke){this.onError(Ke)}};if(typeof window!="undefined"&&typeof window.dispatchEvent=="function"&&typeof document!="undefined"&&typeof document.createEvent=="function"){var vp=document.createElement("react"),Tm=function(f,c,E,T,A,j,V,te,le){if(typeof document=="undefined")throw Error("The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous.");var Be=document.createEvent("Event"),Ke=!0,pt=window.event,Nt=Object.getOwnPropertyDescriptor(window,"event"),Gt=Array.prototype.slice.call(arguments,3);function zt(){vp.removeEventListener(L0,zt,!1),typeof window.event!="undefined"&&window.hasOwnProperty("event")&&(window.event=pt),c.apply(E,Gt),Ke=!1}var yn,kr=!1,oi=!1;function Oi($i){if(yn=$i.error,kr=!0,yn===null&&$i.colno===0&&$i.lineno===0&&(oi=!0),$i.defaultPrevented&&yn!=null&&typeof yn=="object")try{yn._suppressLogging=!0}catch(ot){}}var L0="react-"+(f||"invokeguardedcallback");window.addEventListener("error",Oi),vp.addEventListener(L0,zt,!1),Be.initEvent(L0,!1,!1),vp.dispatchEvent(Be),Nt&&Object.defineProperty(window,"event",Nt),Ke&&(kr?oi&&(yn=new Error("A cross-origin error was thrown. React doesn't have access to the actual error object in development. See https://fb.me/react-crossorigin-error for more information.")):yn=new Error(`An error was thrown inside one of your components, but React doesn't know what it was. This is likely due to browser flakiness. React does its best to preserve the "Pause on exceptions" behavior of the DevTools, which requires some DEV-mode only tricks. It's possible that these don't work in your browser. Try triggering the error in production mode, or switching to a modern browser. If you suspect that this is actually an issue with React, please file an issue.`),this.onError(yn)),window.removeEventListener("error",Oi)};hp=Tm}var Cm=hp,wo=!1,Ld=null,xm={onError:function(f){wo=!0,Ld=f}};function dl(f,c,E,T,A,j,V,te,le){wo=!1,Ld=null,Cm.apply(xm,arguments)}function tr(){return wo}function Qs(){if(wo){var f=Ld;return wo=!1,Ld=null,f}else throw Error("clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.")}function pl(f){return!0}function l0(f){var c=pl(f);if(c!==!1){var E=f.error;{var T=f.componentName,A=f.componentStack,j=f.errorBoundaryName,V=f.errorBoundaryFound,te=f.willRetry;if(E!=null&&E._suppressLogging){if(V&&te)return;console.error(E)}var le=T?"The above error occurred in the <"+T+"> component:":"The above error occurred in one of your React components:",Be;V&&j?te?Be="React will try to recreate this component tree from scratch "+("using the error boundary you provided, "+j+"."):Be="This error was initially handled by the error boundary "+j+`. -Recreating the tree from scratch failed so React will unmount the tree.`:Be=`Consider adding an error boundary to your tree to customize error handling behavior. -Visit https://fb.me/react-error-boundaries to learn more about error boundaries.`;var Ke=""+le+A+` - -`+(""+Be);console.error(Ke)}}}var ev=null;ev=new Set;var Js=typeof WeakSet=="function"?WeakSet:Set;function mp(f,c){var E=c.source,T=c.stack;T===null&&E!==null&&(T=Cr(E));var A={componentName:E!==null?qt(E.type):null,componentStack:T!==null?T:"",error:c.value,errorBoundary:null,errorBoundaryName:null,errorBoundaryFound:!1,willRetry:!1};f!==null&&f.tag===O&&(A.errorBoundary=f.stateNode,A.errorBoundaryName=qt(f.type),A.errorBoundaryFound=!0,A.willRetry=!0);try{l0(A)}catch(j){setTimeout(function(){throw j})}}var Rm=function(f,c){Bi(f,"componentWillUnmount"),c.props=f.memoizedProps,c.state=f.memoizedState,c.componentWillUnmount(),Ci()};function tv(f,c){if(dl(null,Rm,null,f,c),tr()){var E=Qs();Hf(f,E)}}function yp(f){var c=f.ref;if(c!==null)if(typeof c=="function"){if(dl(null,c,null,null),tr()){var E=Qs();Hf(f,E)}}else c.current=null}function Am(f,c){if(dl(null,c,null),tr()){var E=Qs();Hf(f,E)}}function gp(f,c){switch(c.tag){case L:case se:case ie:{Tc(im,Af,c);return}case O:{if(c.effectTag&Oo&&f!==null){var E=f.memoizedProps,T=f.memoizedState;Bi(c,"getSnapshotBeforeUpdate");var A=c.stateNode;c.type===c.elementType&&!Sa&&(A.props!==c.memoizedProps&&Xt(!1,"Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(c.type)||"instance"),A.state!==c.memoizedState&&Xt(!1,"Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(c.type)||"instance"));var j=A.getSnapshotBeforeUpdate(c.elementType===c.type?E:qi(c.type,E),T);{var V=ev;j===void 0&&!V.has(c.type)&&(V.add(c.type),We(!1,"%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.",qt(c.type)))}A.__reactInternalSnapshotBeforeUpdate=j,Ci()}return}case U:case W:case ne:case H:case je:return;default:throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.")}}function Tc(f,c,E){var T=E.updateQueue,A=T!==null?T.lastEffect:null;if(A!==null){var j=A.next,V=j;do{if((V.tag&f)!==Af){var te=V.destroy;V.destroy=void 0,te!==void 0&&te()}if((V.tag&c)!==Af){var le=V.create;V.destroy=le();{var Be=V.destroy;if(Be!==void 0&&typeof Be!="function"){var Ke=void 0;Be===null?Ke=" You returned null. If your effect does not require clean up, return undefined (or nothing).":typeof Be.then=="function"?Ke=` - -It looks like you wrote useEffect(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately: - -useEffect(() => { - async function fetchData() { - // You can await here - const response = await MyAPI.getData(someId); - // ... - } - fetchData(); -}, [someId]); // Or [] if effect doesn't need props or state - -Learn more about data fetching with Hooks: https://fb.me/react-hooks-data-fetching`:Ke=" You returned: "+Be,We(!1,"An effect function must not return anything besides a function, which is used for clean-up.%s%s",Ke,Cr(E))}}}V=V.next}while(V!==j)}}function xa(f){if((f.effectTag&F0)!==xi)switch(f.tag){case L:case se:case ie:{Tc(sr,Af,f),Tc(Af,n1,f);break}default:break}}function _p(f,c,E,T){switch(E.tag){case L:case se:case ie:{Tc(um,fl,E);break}case O:{var A=E.stateNode;if(E.effectTag&Dr)if(c===null)Bi(E,"componentDidMount"),E.type===E.elementType&&!Sa&&(A.props!==E.memoizedProps&&Xt(!1,"Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(E.type)||"instance"),A.state!==E.memoizedState&&Xt(!1,"Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(E.type)||"instance")),A.componentDidMount(),Ci();else{var j=E.elementType===E.type?c.memoizedProps:qi(E.type,c.memoizedProps),V=c.memoizedState;Bi(E,"componentDidUpdate"),E.type===E.elementType&&!Sa&&(A.props!==E.memoizedProps&&Xt(!1,"Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(E.type)||"instance"),A.state!==E.memoizedState&&Xt(!1,"Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(E.type)||"instance")),A.componentDidUpdate(j,V,A.__reactInternalSnapshotBeforeUpdate),Ci()}var te=E.updateQueue;te!==null&&(E.type===E.elementType&&!Sa&&(A.props!==E.memoizedProps&&Xt(!1,"Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(E.type)||"instance"),A.state!==E.memoizedState&&Xt(!1,"Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(E.type)||"instance")),yo(E,te,A,T));return}case U:{var le=E.updateQueue;if(le!==null){var Be=null;if(E.child!==null)switch(E.child.tag){case W:Be=No(E.child.stateNode);break;case O:Be=E.child.stateNode;break}yo(E,le,Be,T)}return}case W:{var Ke=E.stateNode;if(c===null&&E.effectTag&Dr){var pt=E.type,Nt=E.memoizedProps;Hu(Ke,pt,Nt,E)}return}case ne:return;case H:return;case De:{if(en){var Gt=E.memoizedProps.onRender;typeof Gt=="function"&&(bn?Gt(E.memoizedProps.id,c===null?"mount":"update",E.actualDuration,E.treeBaseDuration,E.actualStartTime,Pl(),f.memoizedInteractions):Gt(E.memoizedProps.id,c===null?"mount":"update",E.actualDuration,E.treeBaseDuration,E.actualStartTime,Pl()))}return}case pe:{bl(f,E);return}case yt:case je:case gt:case Xe:return;default:throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.")}}function Fd(f,c){if(b0)for(var E=f;;){if(E.tag===W){var T=E.stateNode;c?Pa(T):ia(E.stateNode,E.memoizedProps)}else if(E.tag===ne){var A=E.stateNode;c?m0(A):Q0(A,E.memoizedProps)}else if(E.tag===pe&&E.memoizedState!==null&&E.memoizedState.dehydrated===null){var j=E.child.sibling;j.return=E,E=j;continue}else if(E.child!==null){E.child.return=E,E=E.child;continue}if(E===f)return;for(;E.sibling===null;){if(E.return===null||E.return===f)return;E=E.return}E.sibling.return=E.return,E=E.sibling}}function bu(f){var c=f.ref;if(c!==null){var E=f.stateNode,T;switch(f.tag){case W:T=No(E);break;default:T=E}Au&&f.tag===Xe&&(T=E.methods),typeof c=="function"?c(T):(c.hasOwnProperty("current")||We(!1,"Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().%s",qt(f.type),Cr(f)),c.current=T)}}function Yu(f){var c=f.ref;c!==null&&(typeof c=="function"?c(null):c.current=null)}function Ep(f,c,E){switch(kn(c),c.tag){case L:case se:case me:case ie:{var T=c.updateQueue;if(T!==null){var A=T.lastEffect;if(A!==null){var j=A.next,V=E>Kn?Kn:E;Sn(V,function(){var oi=j;do{var Oi=oi.destroy;Oi!==void 0&&Am(c,Oi),oi=oi.next}while(oi!==j)})}}break}case O:{yp(c);var te=c.stateNode;typeof te.componentWillUnmount=="function"&&tv(c,te);return}case W:{if(gi){var le=c.dependencies;if(le!==null){var Be=le.responders;if(Be!==null){for(var Ke=Array.from(Be.values()),pt=0,Nt=Ke.length;pt component higher in the tree to provide a loading indicator or placeholder to display.`+Cr(E))}Mp(),T=pp(T,E);var Nt=c;do{switch(Nt.tag){case U:{var Gt=T;Nt.effectTag|=p0,Nt.expirationTime=A;var zt=uv(Nt,Gt,A);od(Nt,zt);return}case O:var yn=T,kr=Nt.type,oi=Nt.stateNode;if((Nt.effectTag&Xr)===xi&&(typeof kr.getDerivedStateFromError=="function"||oi!==null&&typeof oi.componentDidCatch=="function"&&!Pp(oi))){Nt.effectTag|=p0,Nt.expirationTime=A;var Oi=ov(Nt,yn,A);od(Nt,Oi);return}break;default:break}Nt=Nt.return}while(Nt!==null)}var Aa=Math.ceil,Mr=rt.ReactCurrentDispatcher,wp=rt.ReactCurrentOwner,hl=rt.IsSomeRendererActing,gu=0,S1=1,Ui=2,Sp=4,bd=8,So=16,As=32,bf=0,Bd=1,Tp=2,T1=3,C1=4,Cp=5,nr=gu,vl=null,Gn=null,q0=at,k0=bf,Ud=null,Bl=Un,x1=Un,xc=null,Rc=at,jd=!1,xp=0,N0=500,dn=null,zd=!1,Hd=null,Ac=null,Oc=!1,Mc=null,R1=E0,Rp=at,ef=null,Pm=50,kc=0,qd=null,sv=50,A1=0,Bf=null,Uf=null,O1=at;function Ul(){return(nr&(So|As))!==gu?n0(vt()):(O1!==at||(O1=n0(vt())),O1)}function Nc(){return n0(vt())}function jf(f,c,E){var T=c.mode;if((T&Y)===Ar)return Un;var A=Qt();if((T&ri)===Ar)return A===Li?Un:t0;if((nr&So)!==gu)return q0;var j;if(E!==null)j=fa(f,E.timeoutMs|0||_f);else switch(A){case Li:j=Un;break;case ni:j=Ua(f);break;case Kn:case e0:j=Ds(f);break;case _0:j=ru;break;default:throw Error("Expected a valid priority level")}return vl!==null&&j===q0&&(j-=1),j}function Im(f,c){ty(),uy(f);var E=Wd(f,c);if(E===null){ry(f);return}zp(f,c),la();var T=Qt();if(c===Un?(nr&bd)!==gu&&(nr&(So|As))===gu?(q(E,c),M1(E)):(qo(E),q(E,c),nr===gu&&Bt()):(qo(E),q(E,c)),(nr&Sp)!==gu&&(T===ni||T===Li))if(ef===null)ef=new Map([[E,c]]);else{var A=ef.get(E);(A===void 0||A>c)&&ef.set(E,c)}}var ml=Im;function Wd(f,c){f.expirationTimeA?T:A}function qo(f){var c=f.lastExpiredTime;if(c!==at){f.callbackExpirationTime=Un,f.callbackPriority=Li,f.callbackNode=Tn(M1.bind(null,f));return}var E=Vd(f),T=f.callbackNode;if(E===at){T!==null&&(f.callbackNode=null,f.callbackExpirationTime=at,f.callbackPriority=E0);return}var A=Ul(),j=nd(A,E);if(T!==null){var V=f.callbackPriority,te=f.callbackExpirationTime;if(te===E&&V>=j)return;ir(T)}f.callbackExpirationTime=E,f.callbackPriority=j;var le;E===Un?le=Tn(M1.bind(null,f)):so?le=_n(j,Gd.bind(null,f)):le=_n(j,Gd.bind(null,f),{timeout:Uo(E)-vt()}),f.callbackNode=le}function Gd(f,c){if(O1=at,c){var E=Ul();return Wp(f,E),qo(f),null}var T=Vd(f);if(T!==at){var A=f.callbackNode;if((nr&(So|As))!==gu)throw Error("Should not already be working.");if(tf(),(f!==vl||T!==q0)&&(zf(f,T),ee(f,T)),Gn!==null){var j=nr;nr|=So;var V=pv(f),te=Yd(f);mf(Gn);do try{Ym();break}catch(Ke){dv(f,Ke)}while(!0);if(mt(),nr=j,hv(V),bn&&Kd(te),k0===Bd){var le=Ud;throw jp(),zf(f,T),Wf(f,T),qo(f),le}if(Gn!==null)jp();else{Tv();var Be=f.finishedWork=f.current.alternate;f.finishedExpirationTime=T,bm(f,Be,k0,T)}if(qo(f),f.callbackNode===A)return Gd.bind(null,f)}}return null}function bm(f,c,E,T){switch(vl=null,E){case bf:case Bd:throw Error("Root did not complete. This is a bug in React.");case Tp:{Wp(f,T>ru?ru:T);break}case T1:{Wf(f,T);var A=f.lastSuspendedTime;T===A&&(f.nextKnownPendingLevel=kp(c)),d();var j=Bl===Un;if(j&&!(X0&&qf.current)){var V=xp+N0-vt();if(V>10){if(jd){var te=f.lastPingedTime;if(te===at||te>=T){f.lastPingedTime=T,zf(f,T);break}}var le=Vd(f);if(le!==at&&le!==T)break;if(A!==at&&A!==T){f.lastPingedTime=A;break}f.timeoutHandle=Tt(s0.bind(null,f),V);break}}s0(f);break}case C1:{Wf(f,T);var Be=f.lastSuspendedTime;if(T===Be&&(f.nextKnownPendingLevel=kp(c)),d(),!(X0&&qf.current)){if(jd){var Ke=f.lastPingedTime;if(Ke===at||Ke>=T){f.lastPingedTime=T,zf(f,T);break}}var pt=Vd(f);if(pt!==at&&pt!==T)break;if(Be!==at&&Be!==T){f.lastPingedTime=Be;break}var Nt;if(x1!==Un)Nt=Uo(x1)-vt();else if(Bl===Un)Nt=0;else{var Gt=_v(Bl),zt=vt(),yn=Uo(T)-zt,kr=zt-Gt;kr<0&&(kr=0),Nt=Bp(kr)-kr,yn10){f.timeoutHandle=Tt(s0.bind(null,f),Nt);break}}s0(f);break}case Cp:{if(!(X0&&qf.current)&&Bl!==Un&&xc!==null){var oi=Up(Bl,T,xc);if(oi>10){Wf(f,T),f.timeoutHandle=Tt(s0.bind(null,f),oi);break}}s0(f);break}default:throw Error("Unknown root exit status.")}}function M1(f){var c=f.lastExpiredTime,E=c!==at?c:Un;if(f.finishedExpirationTime===E)s0(f);else{if((nr&(So|As))!==gu)throw Error("Should not already be working.");if(tf(),(f!==vl||E!==q0)&&(zf(f,E),ee(f,E)),Gn!==null){var T=nr;nr|=So;var A=pv(f),j=Yd(f);mf(Gn);do try{Ev();break}catch(te){dv(f,te)}while(!0);if(mt(),nr=T,hv(A),bn&&Kd(j),k0===Bd){var V=Ud;throw jp(),zf(f,E),Wf(f,E),qo(f),V}if(Gn!==null)throw Error("Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.");Tv(),f.finishedWork=f.current.alternate,f.finishedExpirationTime=E,Bm(f,k0,E),qo(f)}}return null}function Bm(f,c,E){vl=null,(c===T1||c===C1)&&d(),s0(f)}function Um(f,c){Wp(f,c),qo(f),(nr&(So|As))===gu&&Bt()}function av(){if((nr&(S1|So|As))!==gu){(nr&So)!==gu&&Xt(!1,"unstable_flushDiscreteUpdates: Cannot flush updates when React is already rendering.");return}zm(),tf()}function jm(f){return Sn(Kn,f)}function fv(f,c,E,T){return Sn(Li,f.bind(null,c,E,T))}function zm(){if(ef!==null){var f=ef;ef=null,f.forEach(function(c,E){Wp(E,c),qo(E)}),Bt()}}function Hm(f,c){var E=nr;nr|=S1;try{return f(c)}finally{nr=E,nr===gu&&Bt()}}function qm(f,c){var E=nr;nr|=Ui;try{return f(c)}finally{nr=E,nr===gu&&Bt()}}function cv(f,c,E,T){var A=nr;nr|=Sp;try{return Sn(ni,f.bind(null,c,E,T))}finally{nr=A,nr===gu&&Bt()}}function Wm(f,c){var E=nr;nr&=~S1,nr|=bd;try{return f(c)}finally{nr=E,nr===gu&&Bt()}}function Ap(f,c){if((nr&(So|As))!==gu)throw Error("flushSync was called from inside a lifecycle method. It cannot be called when React is already rendering.");var E=nr;nr|=S1;try{return Sn(Li,f.bind(null,c))}finally{nr=E,Bt()}}function Vm(f){var c=nr;nr|=S1;try{Sn(Li,f)}finally{nr=c,nr===gu&&Bt()}}function zf(f,c){f.finishedWork=null,f.finishedExpirationTime=at;var E=f.timeoutHandle;if(E!==tl&&(f.timeoutHandle=tl,fo(E)),Gn!==null)for(var T=Gn.return;T!==null;)$h(T),T=T.return;vl=f,Gn=To(f.current,null,c),q0=c,k0=bf,Ud=null,Bl=Un,x1=Un,xc=null,Rc=at,jd=!1,bn&&(Uf=null),Rl.discardPendingWarnings(),Zs=null}function dv(f,c){do{try{if(mt(),_d(),it(),Gn===null||Gn.return===null)return k0=Bd,Ud=c,null;en&&Gn.mode&ii&&d1(Gn,!0),lv(f,Gn.return,Gn,c,q0),Gn=Dv(Gn)}catch(E){c=E;continue}return}while(!0)}function pv(f){var c=Mr.current;return Mr.current=a1,c===null?a1:c}function hv(f){Mr.current=f}function Yd(f){if(bn){var c=k.__interactionsRef.current;return k.__interactionsRef.current=f.memoizedInteractions,c}return null}function Kd(f){bn&&(k.__interactionsRef.current=f)}function Op(){xp=vt()}function vv(f,c){fru&&(Bl=f),c!==null&&fru&&(x1=f,xc=c)}function Xd(f){f>Rc&&(Rc=f)}function mv(){k0===bf&&(k0=T1)}function yv(){(k0===bf||k0===T1)&&(k0=C1),Rc!==at&&vl!==null&&(Wf(vl,q0),Gg(vl,Rc))}function Mp(){k0!==Cp&&(k0=Tp)}function gv(){return k0===bf}function _v(f){var c=Uo(f);return c-_f}function Gm(f,c){var E=Uo(f);return E-(c.timeoutMs|0||_f)}function Ev(){for(;Gn!==null;)Gn=Qd(Gn)}function Ym(){for(;Gn!==null&&!Fn();)Gn=Qd(Gn)}function Qd(f){var c=f.alternate;$l(f),Dt(f);var E;return en&&(f.mode&ii)!==Ar?(q2(f),E=k1(c,f,q0),d1(f,!0)):E=k1(c,f,q0),it(),f.memoizedProps=f.pendingProps,E===null&&(E=Dv(f)),wp.current=null,E}function Dv(f){Gn=f;do{var c=Gn.alternate,E=Gn.return;if((Gn.effectTag&P0)===xi){Dt(Gn);var T=void 0;if(!en||(Gn.mode&ii)===Ar?T=Zh(c,Gn,q0):(q2(Gn),T=Zh(c,Gn,q0),d1(Gn,!1)),ei(Gn),it(),Km(Gn),T!==null)return T;if(E!==null&&(E.effectTag&P0)===xi){E.firstEffect===null&&(E.firstEffect=Gn.firstEffect),Gn.lastEffect!==null&&(E.lastEffect!==null&&(E.lastEffect.nextEffect=Gn.firstEffect),E.lastEffect=Gn.lastEffect);var A=Gn.effectTag;A>lu&&(E.lastEffect!==null?E.lastEffect.nextEffect=Gn:E.firstEffect=Gn,E.lastEffect=Gn)}}else{var j=Sm(Gn,q0);if(en&&(Gn.mode&ii)!==Ar){d1(Gn,!1);for(var V=Gn.actualDuration,te=Gn.child;te!==null;)V+=te.actualDuration,te=te.sibling;Gn.actualDuration=V}if(j!==null)return po(Gn),j.effectTag&=Kl,j;ei(Gn),E!==null&&(E.firstEffect=E.lastEffect=null,E.effectTag|=P0)}var le=Gn.sibling;if(le!==null)return le;Gn=E}while(Gn!==null);return k0===bf&&(k0=Cp),null}function kp(f){var c=f.expirationTime,E=f.childExpirationTime;return c>E?c:E}function Km(f){if(!(q0!==Di&&f.childExpirationTime===Di)){var c=at;if(en&&(f.mode&ii)!==Ar){for(var E=f.actualDuration,T=f.selfBaseDuration,A=f.alternate===null||f.child!==f.alternate.child,j=f.child;j!==null;){var V=j.expirationTime,te=j.childExpirationTime;V>c&&(c=V),te>c&&(c=te),A&&(E+=j.actualDuration),T+=j.treeBaseDuration,j=j.sibling}f.actualDuration=E,f.treeBaseDuration=T}else for(var le=f.child;le!==null;){var Be=le.expirationTime,Ke=le.childExpirationTime;Be>c&&(c=Be),Ke>c&&(c=Ke),le=le.sibling}f.childExpirationTime=c}}function s0(f){var c=Qt();return Sn(Li,Np.bind(null,f,c)),null}function Np(f,c){do tf();while(Mc!==null);if(ny(),(nr&(So|As))!==gu)throw Error("Should not already be working.");var E=f.finishedWork,T=f.finishedExpirationTime;if(E===null)return null;if(f.finishedWork=null,f.finishedExpirationTime=at,E===f.current)throw Error("Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.");f.callbackNode=null,f.callbackExpirationTime=at,f.callbackPriority=E0,f.nextKnownPendingLevel=at,$0();var A=kp(E);j4(f,T,A),f===vl&&(vl=null,Gn=null,q0=at);var j;if(E.effectTag>lu?E.lastEffect!==null?(E.lastEffect.nextEffect=E,j=E.firstEffect):j=E:j=E.firstEffect,j!==null){var V=nr;nr|=As;var te=Yd(f);wp.current=null,Ce(),Hn(f.containerInfo),dn=j;do if(dl(null,Xm,null),tr()){if(dn===null)throw Error("Should be working on an effect.");var le=Qs();Hf(dn,le),dn=dn.nextEffect}while(dn!==null);et(),en&&Oh(),Ye(),dn=j;do if(dl(null,Qm,null,f,c),tr()){if(dn===null)throw Error("Should be working on an effect.");var Be=Qs();Hf(dn,Be),dn=dn.nextEffect}while(dn!==null);Yt(),qr(f.containerInfo),f.current=E,Kt(),dn=j;do if(dl(null,Lp,null,f,T),tr()){if(dn===null)throw Error("Should be working on an effect.");var Ke=Qs();Hf(dn,Ke),dn=dn.nextEffect}while(dn!==null);pr(),dn=null,ae(),bn&&Kd(te),nr=V}else f.current=E,Ce(),et(),en&&Oh(),Ye(),Yt(),Kt(),pr();eo();var pt=Oc;if(Oc)Oc=!1,Mc=f,Rp=T,R1=c;else for(dn=j;dn!==null;){var Nt=dn.nextEffect;dn.nextEffect=null,dn=Nt}var Gt=f.firstPendingTime;if(Gt!==at){if(bn){if(Uf!==null){var zt=Uf;Uf=null;for(var yn=0;ynKn?Kn:R1;return R1=E0,Sn(f,Fp)}}function Fp(){if(Mc===null)return!1;var f=Mc,c=Rp;if(Mc=null,Rp=at,(nr&(So|As))!==gu)throw Error("Cannot flush passive effects while already rendering.");var E=nr;nr|=As;for(var T=Yd(f),A=f.current.firstEffect;A!==null;){{if(Dt(A),dl(null,xa,null,A),tr()){if(A===null)throw Error("Should be working on an effect.");var j=Qs();Hf(A,j)}it()}var V=A.nextEffect;A.nextEffect=null,A=V}return bn&&(Kd(T),de(f,c)),nr=E,Bt(),A1=Mc===null?0:A1+1,!0}function Pp(f){return Ac!==null&&Ac.has(f)}function Ip(f){Ac===null?Ac=new Set([f]):Ac.add(f)}function Jm(f){zd||(zd=!0,Hd=f)}var Zm=Jm;function wv(f,c,E){var T=pp(E,c),A=uv(f,T,Un);Va(f,A);var j=Wd(f,Un);j!==null&&(qo(j),q(j,Un))}function Hf(f,c){if(f.tag===U){wv(f,f,c);return}for(var E=f.return;E!==null;){if(E.tag===U){wv(E,f,c);return}else if(E.tag===O){var T=E.type,A=E.stateNode;if(typeof T.getDerivedStateFromError=="function"||typeof A.componentDidCatch=="function"&&!Pp(A)){var j=pp(c,f),V=ov(E,j,Un);Va(E,V);var te=Wd(E,Un);te!==null&&(qo(te),q(te,Un));return}}E=E.return}}function bp(f,c,E){var T=f.pingCache;if(T!==null&&T.delete(c),vl===f&&q0===E){k0===C1||k0===T1&&Bl===Un&&vt()-xpPm)throw kc=0,qd=null,Error("Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.");A1>sv&&(A1=0,Xt(!1,"Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render."))}function ny(){Rl.flushLegacyContextWarning(),yi&&Rl.flushPendingUnsafeLifecycleWarnings()}function Tv(){var f=!0;yf(Bf,f),Bf=null}function jp(){var f=!1;yf(Bf,f),Bf=null}function zp(f,c){Hr&&vl!==null&&c>q0&&(Bf=f)}var Jd=null;function ry(f){{var c=f.tag;if(c!==U&&c!==O&&c!==L&&c!==se&&c!==me&&c!==ie)return;var E=qt(f.type)||"ReactComponent";if(Jd!==null){if(Jd.has(E))return;Jd.add(E)}else Jd=new Set([E]);We(!1,"Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in %s.%s",c===O?"the componentWillUnmount method":"a useEffect cleanup function",Cr(f))}}var k1;if(K0){var iy=null;k1=function(f,c,E){var T=Wg(iy,c);try{return sp(f,c,E)}catch(j){if(j!==null&&typeof j=="object"&&typeof j.then=="function")throw j;if(mt(),_d(),$h(c),Wg(c,T),en&&c.mode&ii&&q2(c),dl(null,sp,null,f,c,E),tr()){var A=Qs();throw A}else throw j}}}else k1=sp;var Cv=!1,xv=!1;function uy(f){if(f.tag===O)switch(Nr){case"getChildContext":if(xv)return;We(!1,"setState(...): Cannot call setState() inside getChildContext()"),xv=!0;break;case"render":if(Cv)return;We(!1,"Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state."),Cv=!0;break}}var qf={current:!1};function Hp(f){vs===!0&&hl.current===!0&&qf.current!==!0&&We(!1,`It looks like you're using the wrong act() around your test interactions. -Be sure to use the matching version of act() corresponding to your renderer: - -// for react-dom: -import {act} from 'react-dom/test-utils'; -// ... -act(() => ...); - -// for react-test-renderer: -import TestRenderer from 'react-test-renderer'; -const {act} = TestRenderer; -// ... -act(() => ...);%s`,Cr(f))}function Rv(f){vs===!0&&(f.mode&mr)!==Ar&&hl.current===!1&&qf.current===!1&&We(!1,`An update to %s ran an effect, but was not wrapped in act(...). - -When testing, code that causes React state updates should be wrapped into act(...): - -act(() => { - /* fire events that update state */ -}); -/* assert on the output */ - -This ensures that you're testing the behavior the user would see in the browser. Learn more at https://fb.me/react-wrap-tests-with-act%s`,qt(f.type),Cr(f))}function oy(f){vs===!0&&nr===gu&&hl.current===!1&&qf.current===!1&&We(!1,`An update to %s inside a test was not wrapped in act(...). - -When testing, code that causes React state updates should be wrapped into act(...): - -act(() => { - /* fire events that update state */ -}); -/* assert on the output */ - -This ensures that you're testing the behavior the user would see in the browser. Learn more at https://fb.me/react-wrap-tests-with-act%s`,qt(f.type),Cr(f))}var ly=oy,qp=!1;function sy(f){qp===!1&&t.unstable_flushAllWithoutAsserting===void 0&&(f.mode&Y||f.mode&ri?(qp=!0,We(!1,`In Concurrent or Sync modes, the "scheduler" module needs to be mocked to guarantee consistent behaviour across tests and browsers. For example, with jest: -jest.mock('scheduler', () => require('scheduler/unstable_mock')); - -For more info, visit https://fb.me/react-mock-scheduler`)):eu===!0&&(qp=!0,We(!1,`Starting from React v17, the "scheduler" module will need to be mocked to guarantee consistent behaviour across tests and browsers. For example, with jest: -jest.mock('scheduler', () => require('scheduler/unstable_mock')); - -For more info, visit https://fb.me/react-mock-scheduler`)))}var Zs=null;function ay(f){{var c=Qt();if((f.mode&ri)!==xi&&(c===ni||c===Li))for(var E=f;E!==null;){var T=E.alternate;if(T!==null)switch(E.tag){case O:var A=T.updateQueue;if(A!==null)for(var j=A.firstUpdate;j!==null;){var V=j.priority;if(V===ni||V===Li){Zs===null?Zs=new Set([qt(E.type)]):Zs.add(qt(E.type));break}j=j.next}break;case L:case se:case ie:if(E.memoizedState!==null&&E.memoizedState.baseUpdate!==null)for(var te=E.memoizedState.baseUpdate;te!==null;){var le=te.priority;if(le===ni||le===Li){Zs===null?Zs=new Set([qt(E.type)]):Zs.add(qt(E.type));break}if(te.next===E.memoizedState.baseUpdate)break;te=te.next}break;default:break}E=E.return}}}function d(){if(Zs!==null){var f=[];Zs.forEach(function(c){return f.push(c)}),Zs=null,f.length>0&&We(!1,`%s triggered a user-blocking update that suspended. - -The fix is to split the update into multiple parts: a user-blocking update to provide immediate feedback, and another update that triggers the bulk of the changes. - -Refer to the documentation for useTransition to learn how to implement this pattern.`,f.sort().join(", "))}}function v(f,c){return c*1e3+f.interactionThreadID}function x(f){!bn||(Uf===null?Uf=[f]:Uf.push(f))}function P(f,c,E){if(!!bn&&E.size>0){var T=f.pendingInteractionMap,A=T.get(c);A!=null?E.forEach(function(te){A.has(te)||te.__count++,A.add(te)}):(T.set(c,new Set(E)),E.forEach(function(te){te.__count++}));var j=k.__subscriberRef.current;if(j!==null){var V=v(f,c);j.onWorkScheduled(E,V)}}}function q(f,c){!bn||P(f,c,k.__interactionsRef.current)}function ee(f,c){if(!!bn){var E=new Set;if(f.pendingInteractionMap.forEach(function(j,V){V>=c&&j.forEach(function(te){return E.add(te)})}),f.memoizedInteractions=E,E.size>0){var T=k.__subscriberRef.current;if(T!==null){var A=v(f,c);try{T.onWorkStarted(E,A)}catch(j){_n(Li,function(){throw j})}}}}}function de(f,c){if(!!bn){var E=f.firstPendingTime,T;try{if(T=k.__subscriberRef.current,T!==null&&f.memoizedInteractions.size>0){var A=v(f,c);T.onWorkStopped(f.memoizedInteractions,A)}}catch(V){_n(Li,function(){throw V})}finally{var j=f.pendingInteractionMap;j.forEach(function(V,te){te>E&&(j.delete(te),V.forEach(function(le){if(le.__count--,T!==null&&le.__count===0)try{T.onInteractionScheduledWorkCompleted(le)}catch(Be){_n(Li,function(){throw Be})}}))})}}}var _e=null,Ie=null,Et=!1,St=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__!="undefined";function At(f){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__=="undefined")return!1;var c=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(c.isDisabled)return!0;if(!c.supportsFiber)return We(!1,"The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://fb.me/react-devtools"),!0;try{var E=c.inject(f);_e=function(T,A){try{var j=(T.current.effectTag&Xr)===Xr;if(en){var V=Nc(),te=nd(V,A);c.onCommitFiberRoot(E,T,te,j)}else c.onCommitFiberRoot(E,T,void 0,j)}catch(le){Et||(Et=!0,We(!1,"React DevTools encountered an error: %s",le))}},Ie=function(T){try{c.onCommitFiberUnmount(E,T)}catch(A){Et||(Et=!0,We(!1,"React DevTools encountered an error: %s",A))}}}catch(T){We(!1,"React DevTools encountered an error: %s.",T)}return!0}function on(f,c){typeof _e=="function"&&_e(f,c)}function kn(f){typeof Ie=="function"&&Ie(f)}var rr;{rr=!1;try{var br=Object.preventExtensions({}),ar=new Map([[br,null]]),ui=new Set([br]);ar.set(0,0),ui.add(0)}catch(f){rr=!0}}var di=1;function jl(f,c,E,T){this.tag=f,this.key=E,this.elementType=null,this.type=null,this.stateNode=null,this.return=null,this.child=null,this.sibling=null,this.index=0,this.ref=null,this.pendingProps=c,this.memoizedProps=null,this.updateQueue=null,this.memoizedState=null,this.dependencies=null,this.mode=T,this.effectTag=xi,this.nextEffect=null,this.firstEffect=null,this.lastEffect=null,this.expirationTime=at,this.childExpirationTime=at,this.alternate=null,en&&(this.actualDuration=Number.NaN,this.actualStartTime=Number.NaN,this.selfBaseDuration=Number.NaN,this.treeBaseDuration=Number.NaN,this.actualDuration=0,this.actualStartTime=-1,this.selfBaseDuration=0,this.treeBaseDuration=0),Hr&&(this._debugID=di++,this._debugIsCurrentlyTiming=!1),this._debugSource=null,this._debugOwner=null,this._debugNeedsRemount=!1,this._debugHookTypes=null,!rr&&typeof Object.preventExtensions=="function"&&Object.preventExtensions(this)}var Zi=function(f,c,E,T){return new jl(f,c,E,T)};function lo(f){var c=f.prototype;return!!(c&&c.isReactComponent)}function a0(f){return typeof f=="function"&&!lo(f)&&f.defaultProps===void 0}function Os(f){if(typeof f=="function")return lo(f)?O:L;if(f!=null){var c=f.$$typeof;if(c===Mn)return se;if(c===Vt)return me}return C}function To(f,c,E){var T=f.alternate;T===null?(T=Zi(f.tag,c,f.key,f.mode),T.elementType=f.elementType,T.type=f.type,T.stateNode=f.stateNode,T._debugID=f._debugID,T._debugSource=f._debugSource,T._debugOwner=f._debugOwner,T._debugHookTypes=f._debugHookTypes,T.alternate=f,f.alternate=T):(T.pendingProps=c,T.effectTag=xi,T.nextEffect=null,T.firstEffect=null,T.lastEffect=null,en&&(T.actualDuration=0,T.actualStartTime=-1)),T.childExpirationTime=f.childExpirationTime,T.expirationTime=f.expirationTime,T.child=f.child,T.memoizedProps=f.memoizedProps,T.memoizedState=f.memoizedState,T.updateQueue=f.updateQueue;var A=f.dependencies;switch(T.dependencies=A===null?null:{expirationTime:A.expirationTime,firstContext:A.firstContext,responders:A.responders},T.sibling=f.sibling,T.index=f.index,T.ref=f.ref,en&&(T.selfBaseDuration=f.selfBaseDuration,T.treeBaseDuration=f.treeBaseDuration),T._debugNeedsRemount=f._debugNeedsRemount,T.tag){case C:case L:case ie:T.type=r0(f.type);break;case O:T.type=j0(f.type);break;case se:T.type=Df(f.type);break;default:break}return T}function Av(f,c){f.effectTag&=mi,f.nextEffect=null,f.firstEffect=null,f.lastEffect=null;var E=f.alternate;if(E===null)f.childExpirationTime=at,f.expirationTime=c,f.child=null,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,en&&(f.selfBaseDuration=0,f.treeBaseDuration=0);else{f.childExpirationTime=E.childExpirationTime,f.expirationTime=E.expirationTime,f.child=E.child,f.memoizedProps=E.memoizedProps,f.memoizedState=E.memoizedState,f.updateQueue=E.updateQueue;var T=E.dependencies;f.dependencies=T===null?null:{expirationTime:T.expirationTime,firstContext:T.firstContext,responders:T.responders},en&&(f.selfBaseDuration=E.selfBaseDuration,f.treeBaseDuration=E.treeBaseDuration)}return f}function k4(f){var c;return f===O0?c=ri|Y|mr:f===B0?c=Y|mr:c=Ar,en&&St&&(c|=ii),Zi(U,null,null,c)}function fy(f,c,E,T,A,j){var V,te=C,le=f;if(typeof f=="function")lo(f)?(te=O,le=j0(le)):le=r0(le);else if(typeof f=="string")te=W;else{e:switch(f){case oe:return nf(E.children,A,j,c);case an:te=he,A|=ri|Y|mr;break;case ze:te=he,A|=mr;break;case ct:return L4(E,A,j,c);case lr:return F4(E,A,j,c);case ln:return P4(E,A,j,c);default:{if(typeof f=="object"&&f!==null)switch(f.$$typeof){case Rt:te=ve;break e;case nn:te=Ee;break e;case Mn:te=se,le=Df(le);break e;case Vt:te=me;break e;case Er:te=Oe,le=null;break e;case w:if(Wt)return qg(f,E,A,j,c);break;case Xn:if(Au)return N4(f,E,A,j,c)}var Be="";{(f===void 0||typeof f=="object"&&f!==null&&Object.keys(f).length===0)&&(Be+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var Ke=T?qt(T.type):null;Ke&&(Be+=` - -Check the render method of \``+Ke+"`.")}throw Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+(f==null?f:typeof f)+"."+Be)}}}return V=Zi(te,E,c,A),V.elementType=f,V.type=le,V.expirationTime=j,V}function cy(f,c,E){var T=null;T=f._owner;var A=f.type,j=f.key,V=f.props,te=fy(A,j,V,T,c,E);return te._debugSource=f._source,te._debugOwner=f._owner,te}function nf(f,c,E,T){var A=Zi(m,f,T,c);return A.expirationTime=E,A}function qg(f,c,E,T,A){var j=Zi(gt,c,A,E);return j.elementType=f,j.type=f,j.expirationTime=T,j}function N4(f,c,E,T,A){var j=Zi(Xe,c,A,E);return j.type=f,j.elementType=f,j.expirationTime=T,j}function L4(f,c,E,T){(typeof f.id!="string"||typeof f.onRender!="function")&&We(!1,'Profiler must specify an "id" string and "onRender" function as props');var A=Zi(De,f,T,c|ii);return A.elementType=ct,A.type=ct,A.expirationTime=E,A}function F4(f,c,E,T){var A=Zi(pe,f,T,c);return A.type=lr,A.elementType=lr,A.expirationTime=E,A}function P4(f,c,E,T){var A=Zi(yt,f,T,c);return A.type=ln,A.elementType=ln,A.expirationTime=E,A}function dy(f,c,E){var T=Zi(ne,f,null,c);return T.expirationTime=E,T}function I4(){var f=Zi(W,null,null,Ar);return f.elementType="DELETED",f.type="DELETED",f}function b4(f){var c=Zi(qe,null,null,Ar);return c.stateNode=f,c}function py(f,c,E){var T=f.children!==null?f.children:[],A=Zi(H,T,f.key,c);return A.expirationTime=E,A.stateNode={containerInfo:f.containerInfo,pendingChildren:null,implementation:f.implementation},A}function Wg(f,c){return f===null&&(f=Zi(C,null,null,Ar)),f.tag=c.tag,f.key=c.key,f.elementType=c.elementType,f.type=c.type,f.stateNode=c.stateNode,f.return=c.return,f.child=c.child,f.sibling=c.sibling,f.index=c.index,f.ref=c.ref,f.pendingProps=c.pendingProps,f.memoizedProps=c.memoizedProps,f.updateQueue=c.updateQueue,f.memoizedState=c.memoizedState,f.dependencies=c.dependencies,f.mode=c.mode,f.effectTag=c.effectTag,f.nextEffect=c.nextEffect,f.firstEffect=c.firstEffect,f.lastEffect=c.lastEffect,f.expirationTime=c.expirationTime,f.childExpirationTime=c.childExpirationTime,f.alternate=c.alternate,en&&(f.actualDuration=c.actualDuration,f.actualStartTime=c.actualStartTime,f.selfBaseDuration=c.selfBaseDuration,f.treeBaseDuration=c.treeBaseDuration),f._debugID=c._debugID,f._debugSource=c._debugSource,f._debugOwner=c._debugOwner,f._debugIsCurrentlyTiming=c._debugIsCurrentlyTiming,f._debugNeedsRemount=c._debugNeedsRemount,f._debugHookTypes=c._debugHookTypes,f}function B4(f,c,E){this.tag=c,this.current=null,this.containerInfo=f,this.pendingChildren=null,this.pingCache=null,this.finishedExpirationTime=at,this.finishedWork=null,this.timeoutHandle=tl,this.context=null,this.pendingContext=null,this.hydrate=E,this.callbackNode=null,this.callbackPriority=E0,this.firstPendingTime=at,this.firstSuspendedTime=at,this.lastSuspendedTime=at,this.nextKnownPendingLevel=at,this.lastPingedTime=at,this.lastExpiredTime=at,bn&&(this.interactionThreadID=k.unstable_getThreadID(),this.memoizedInteractions=new Set,this.pendingInteractionMap=new Map),Yi&&(this.hydrationCallbacks=null)}function U4(f,c,E,T){var A=new B4(f,c,E);Yi&&(A.hydrationCallbacks=T);var j=k4(c);return A.current=j,j.stateNode=A,A}function Vg(f,c){var E=f.firstSuspendedTime,T=f.lastSuspendedTime;return E!==at&&E>=c&&T<=c}function Wf(f,c){var E=f.firstSuspendedTime,T=f.lastSuspendedTime;Ec||E===at)&&(f.lastSuspendedTime=c),c<=f.lastPingedTime&&(f.lastPingedTime=at),c<=f.lastExpiredTime&&(f.lastExpiredTime=at)}function Gg(f,c){var E=f.firstPendingTime;c>E&&(f.firstPendingTime=c);var T=f.firstSuspendedTime;T!==at&&(c>=T?f.firstSuspendedTime=f.lastSuspendedTime=f.nextKnownPendingLevel=at:c>=f.lastSuspendedTime&&(f.lastSuspendedTime=c+1),c>f.nextKnownPendingLevel&&(f.nextKnownPendingLevel=c))}function j4(f,c,E){f.firstPendingTime=E,c<=f.lastSuspendedTime?f.firstSuspendedTime=f.lastSuspendedTime=f.nextKnownPendingLevel=at:c<=f.firstSuspendedTime&&(f.firstSuspendedTime=c-1),c<=f.lastPingedTime&&(f.lastPingedTime=at),c<=f.lastExpiredTime&&(f.lastExpiredTime=at)}function Wp(f,c){var E=f.lastExpiredTime;(E===at||E>c)&&(f.lastExpiredTime=c)}var z4={debugTool:null},Ov=z4,hy,vy;hy=!1,vy={};function H4(f){if(!f)return Rn;var c=Ft(f),E=Cl(c);if(c.tag===O){var T=c.type;if(Xi(T))return A0(c,T,E)}return E}function my(f){var c=Ft(f);if(c===void 0)throw typeof f.render=="function"?Error("Unable to find node on an unmounted component."):Error("Argument appears to not be a ReactComponent. Keys: "+Object.keys(f));var E=I0(c);return E===null?null:E.stateNode}function q4(f,c){{var E=Ft(f);if(E===void 0)throw typeof f.render=="function"?Error("Unable to find node on an unmounted component."):Error("Argument appears to not be a ReactComponent. Keys: "+Object.keys(f));var T=I0(E);if(T===null)return null;if(T.mode&mr){var A=qt(E.type)||"Component";vy[A]||(vy[A]=!0,E.mode&mr?We(!1,"%s is deprecated in StrictMode. %s was passed an instance of %s which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://fb.me/react-strict-mode-find-node%s",c,c,A,Cr(T)):We(!1,"%s is deprecated in StrictMode. %s was passed an instance of %s which renders StrictMode children. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://fb.me/react-strict-mode-find-node%s",c,c,A,Cr(T)))}return T.stateNode}return my(f)}function W4(f,c,E,T){return U4(f,c,E,T)}function Yg(f,c,E,T){var A=c.current,j=Ul();typeof jest!="undefined"&&(sy(A),Hp(A));var V=go(),te=jf(j,A,V);Ov.debugTool&&(A.alternate===null?Ov.debugTool.onMountContainer(c):f===null?Ov.debugTool.onUnmountContainer(c):Ov.debugTool.onUpdateContainer(c));var le=H4(E);c.context===null?c.context=le:c.pendingContext=le,Nr==="render"&&An!==null&&!hy&&(hy=!0,We(!1,`Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate. - -Check the render method of %s.`,qt(An.type)||"Unknown"));var Be=Cu(te,V);return Be.payload={element:f},T=T===void 0?null:T,T!==null&&(typeof T!="function"&&We(!1,"render(...): Expected the last optional `callback` argument to be a function. Instead received: %s.",T),Be.callback=T),Va(A,Be),ml(A,te),te}function V4(f){var c=f.current;if(!c.child)return null;switch(c.child.tag){case W:return No(c.child.stateNode);default:return c.child.stateNode}}function G4(f){switch(f.tag){case U:var c=f.stateNode;c.hydrate&&Um(c,c.firstPendingTime);break;case pe:Ap(function(){return ml(f,Un)});var E=Ua(Ul());Mv(f,E);break}}function Kg(f,c){var E=f.memoizedState;E!==null&&E.dehydrated!==null&&E.retryTime=c.length)return T;var A=c[E],j=Array.isArray(f)?f.slice():a({},f);return j[A]=_y(f[A],c,E+1,T),j},e_=function(f,c,E){return _y(f,c,0,E)};Qg=function(f,c,E,T){for(var A=f.memoizedState;A!==null&&c>0;)A=A.next,c--;if(A!==null){var j=e_(A.memoizedState,E,T);A.memoizedState=j,A.baseState=j,f.memoizedProps=a({},f.memoizedProps),ml(f,Un)}},Jg=function(f,c,E){f.pendingProps=e_(f.memoizedProps,c,E),f.alternate&&(f.alternate.pendingProps=f.pendingProps),ml(f,Un)},Zg=function(f){ml(f,Un)},$g=function(f){gy=f}}function Q4(f){var c=f.findFiberByHostInstance,E=rt.ReactCurrentDispatcher;return At(a({},f,{overrideHookState:Qg,overrideProps:Jg,setSuspenseHandler:$g,scheduleUpdate:Zg,currentDispatcherRef:E,findHostInstanceByFiber:function(T){var A=I0(T);return A===null?null:A.stateNode},findFiberByHostInstance:function(T){return c?c(T):null},findHostInstancesForRefresh:ud,scheduleRefresh:Al,scheduleRoot:Ts,setRefreshHandler:qa,getCurrentFiber:function(){return An}}))}var t_=Object.freeze({createContainer:W4,updateContainer:Yg,batchedEventUpdates:qm,batchedUpdates:Hm,unbatchedUpdates:Wm,deferredUpdates:jm,syncUpdates:fv,discreteUpdates:cv,flushDiscreteUpdates:av,flushControlled:Vm,flushSync:Ap,flushPassiveEffects:tf,IsThisRendererActing:qf,getPublicRootInstance:V4,attemptSynchronousHydration:G4,attemptUserBlockingHydration:Y4,attemptContinuousHydration:yy,attemptHydrationAtCurrentPriority:K4,findHostInstance:my,findHostInstanceWithWarning:q4,findHostInstanceWithNoPortals:X4,shouldSuspend:Xg,injectIntoDevTools:Q4}),J4=t_.default||t_;qy.exports=J4;var Z4=qy.exports;return qy.exports=i,Z4})});var IS=tt((RH,vD)=>{"use strict";process.env.NODE_ENV==="production"?vD.exports=MS():vD.exports=PS()});var BS=tt((AH,bS)=>{"use strict";var AP={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};bS.exports=AP});var HS=tt((OH,US)=>{"use strict";var OP=Object.assign||function(i){for(var o=1;o"}}]),i}(),jS=function(){B_(i,null,[{key:"fromJS",value:function(a){var p=a.width,_=a.height;return new i(p,_)}}]);function i(o,a){yD(this,i),this.width=o,this.height=a}return B_(i,[{key:"fromJS",value:function(a){a(this.width,this.height)}},{key:"toString",value:function(){return""}}]),i}(),zS=function(){function i(o,a){yD(this,i),this.unit=o,this.value=a}return B_(i,[{key:"fromJS",value:function(a){a(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case tc.UNIT_POINT:return String(this.value);case tc.UNIT_PERCENT:return this.value+"%";case tc.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),i}();US.exports=function(i,o){function a(k,L,O){var C=k[L];k[L]=function(){for(var U=arguments.length,H=Array(U),W=0;W1?H-1:0),ne=1;ne1&&arguments[1]!==void 0?arguments[1]:NaN,O=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:tc.DIRECTION_LTR;return k.call(this,L,O,C)}),OP({Config:o.Config,Node:o.Node,Layout:i("Layout",MP),Size:i("Size",jS),Value:i("Value",zS),getInstanceCount:function(){return o.getInstanceCount.apply(o,arguments)}},tc)}});var qS=tt((exports,module)=>{(function(i,o){typeof define=="function"&&define.amd?define([],function(){return o}):typeof module=="object"&&module.exports?module.exports=o:(i.nbind=i.nbind||{}).init=o})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(i,o){return function(){i&&i.apply(this,arguments);try{Module.ccall("nbind_init")}catch(a){o(a);return}o(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module!="undefined"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof require=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(o,a){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),o=nodePath.normalize(o);var p=nodeFS.readFileSync(o);return a?p:p.toString()},Module.readBinary=function(o){var a=Module.read(o,!0);return a.buffer||(a=new Uint8Array(a)),assert(a.buffer),a},Module.load=function(o){globalEval(read(o))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module!="undefined"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr!="undefined"&&(Module.printErr=printErr),typeof read!="undefined"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(o){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(o));var a=read(o,"binary");return assert(typeof a=="object"),a},typeof scriptArgs!="undefined"?Module.arguments=scriptArgs:typeof arguments!="undefined"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(i,o){quit(i)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(o){var a=new XMLHttpRequest;return a.open("GET",o,!1),a.send(null),a.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(o){var a=new XMLHttpRequest;return a.open("GET",o,!1),a.responseType="arraybuffer",a.send(null),new Uint8Array(a.response)}),Module.readAsync=function(o,a,p){var _=new XMLHttpRequest;_.open("GET",o,!0),_.responseType="arraybuffer",_.onload=function(){_.status==200||_.status==0&&_.response?a(_.response):p()},_.onerror=p,_.send(null)},typeof arguments!="undefined"&&(Module.arguments=arguments),typeof console!="undefined")Module.print||(Module.print=function(o){console.log(o)}),Module.printErr||(Module.printErr=function(o){console.warn(o)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump!="undefined"?function(i){dump(i)}:function(i){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle=="undefined"&&(Module.setWindowTitle=function(i){document.title=i})}else throw"Unknown runtime environment. Where are we?";function globalEval(i){eval.call(null,i)}!Module.load&&Module.read&&(Module.load=function(o){globalEval(Module.read(o))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(i,o){throw o}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(i){return tempRet0=i,i},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(i){STACKTOP=i},getNativeTypeSize:function(i){switch(i){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(i[i.length-1]==="*")return Runtime.QUANTUM_SIZE;if(i[0]==="i"){var o=parseInt(i.substr(1));return assert(o%8==0),o/8}else return 0}}},getNativeFieldSize:function(i){return Math.max(Runtime.getNativeTypeSize(i),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(i,o){return o==="double"||o==="i64"?i&7&&(assert((i&7)==4),i+=4):assert((i&3)==0),i},getAlignSize:function(i,o,a){return!a&&(i=="i64"||i=="double")?8:i?Math.min(o||(i?Runtime.getNativeFieldSize(i):0),Runtime.QUANTUM_SIZE):Math.min(o,8)},dynCall:function(i,o,a){return a&&a.length?Module["dynCall_"+i].apply(null,[o].concat(a)):Module["dynCall_"+i].call(null,o)},functionPointers:[],addFunction:function(i){for(var o=0;o>2],a=(o+i+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=a,a>=TOTAL_MEMORY){var p=enlargeMemory();if(!p)return HEAP32[DYNAMICTOP_PTR>>2]=o,0}return o},alignMemory:function(i,o){var a=i=Math.ceil(i/(o||16))*(o||16);return a},makeBigInt:function(i,o,a){var p=a?+(i>>>0)+ +(o>>>0)*4294967296:+(i>>>0)+ +(o|0)*4294967296;return p},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(i,o){i||abort("Assertion failed: "+o)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(i){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(i){var o=Runtime.stackAlloc(i.length);return writeArrayToMemory(i,o),o},stringToC:function(i){var o=0;if(i!=null&&i!==0){var a=(i.length<<2)+1;o=Runtime.stackAlloc(a),stringToUTF8(i,o,a)}return o}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(o,a,p,_,t){var k=getCFunc(o),L=[],O=0;if(_)for(var C=0;C<_.length;C++){var U=toC[p[C]];U?(O===0&&(O=Runtime.stackSave()),L[C]=U(_[C])):L[C]=_[C]}var H=k.apply(null,L);if(a==="string"&&(H=Pointer_stringify(H)),O!==0){if(t&&t.async){EmterpreterAsync.asyncFinalizers.push(function(){Runtime.stackRestore(O)});return}Runtime.stackRestore(O)}return H};var sourceRegex=/^function\s*[a-zA-Z$_0-9]*\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;function parseJSFunc(i){var o=i.toString().match(sourceRegex).slice(1);return{arguments:o[0],body:o[1],returnValue:o[2]}}var JSsource=null;function ensureJSsource(){if(!JSsource){JSsource={};for(var i in JSfuncs)JSfuncs.hasOwnProperty(i)&&(JSsource[i]=parseJSFunc(JSfuncs[i]))}}cwrap=function(ident,returnType,argTypes){argTypes=argTypes||[];var cfunc=getCFunc(ident),numericArgs=argTypes.every(function(i){return i==="number"}),numericRet=returnType!=="string";if(numericRet&&numericArgs)return cfunc;var argNames=argTypes.map(function(i,o){return"$"+o}),funcstr="(function("+argNames.join(",")+") {",nargs=argTypes.length;if(!numericArgs){ensureJSsource(),funcstr+="var stack = "+JSsource.stackSave.body+";";for(var i=0;i>0]=o;break;case"i8":HEAP8[i>>0]=o;break;case"i16":HEAP16[i>>1]=o;break;case"i32":HEAP32[i>>2]=o;break;case"i64":tempI64=[o>>>0,(tempDouble=o,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[i>>2]=tempI64[0],HEAP32[i+4>>2]=tempI64[1];break;case"float":HEAPF32[i>>2]=o;break;case"double":HEAPF64[i>>3]=o;break;default:abort("invalid type for setValue: "+a)}}Module.setValue=setValue;function getValue(i,o,a){switch(o=o||"i8",o.charAt(o.length-1)==="*"&&(o="i32"),o){case"i1":return HEAP8[i>>0];case"i8":return HEAP8[i>>0];case"i16":return HEAP16[i>>1];case"i32":return HEAP32[i>>2];case"i64":return HEAP32[i>>2];case"float":return HEAPF32[i>>2];case"double":return HEAPF64[i>>3];default:abort("invalid type for setValue: "+o)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(i,o,a,p){var _,t;typeof i=="number"?(_=!0,t=i):(_=!1,t=i.length);var k=typeof o=="string"?o:null,L;if(a==ALLOC_NONE?L=p:L=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][a===void 0?ALLOC_STATIC:a](Math.max(t,k?1:o.length)),_){var p=L,O;for(assert((L&3)==0),O=L+(t&~3);p>2]=0;for(O=L+t;p>0]=0;return L}if(k==="i8")return i.subarray||i.slice?HEAPU8.set(i,L):HEAPU8.set(new Uint8Array(i),L),L;for(var C=0,U,H,W;C>0],a|=p,!(p==0&&!o||(_++,o&&_==o)););o||(o=_);var t="";if(a<128){for(var k=1024,L;o>0;)L=String.fromCharCode.apply(String,HEAPU8.subarray(i,i+Math.min(o,k))),t=t?t+L:L,i+=k,o-=k;return t}return Module.UTF8ToString(i)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(i){for(var o="";;){var a=HEAP8[i++>>0];if(!a)return o;o+=String.fromCharCode(a)}}Module.AsciiToString=AsciiToString;function stringToAscii(i,o){return writeAsciiToMemory(i,o,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(i,o){for(var a=o;i[a];)++a;if(a-o>16&&i.subarray&&UTF8Decoder)return UTF8Decoder.decode(i.subarray(o,a));for(var p,_,t,k,L,O,C="";;){if(p=i[o++],!p)return C;if(!(p&128)){C+=String.fromCharCode(p);continue}if(_=i[o++]&63,(p&224)==192){C+=String.fromCharCode((p&31)<<6|_);continue}if(t=i[o++]&63,(p&240)==224?p=(p&15)<<12|_<<6|t:(k=i[o++]&63,(p&248)==240?p=(p&7)<<18|_<<12|t<<6|k:(L=i[o++]&63,(p&252)==248?p=(p&3)<<24|_<<18|t<<12|k<<6|L:(O=i[o++]&63,p=(p&1)<<30|_<<24|t<<18|k<<12|L<<6|O))),p<65536)C+=String.fromCharCode(p);else{var U=p-65536;C+=String.fromCharCode(55296|U>>10,56320|U&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(i){return UTF8ArrayToString(HEAPU8,i)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(i,o,a,p){if(!(p>0))return 0;for(var _=a,t=a+p-1,k=0;k=55296&&L<=57343&&(L=65536+((L&1023)<<10)|i.charCodeAt(++k)&1023),L<=127){if(a>=t)break;o[a++]=L}else if(L<=2047){if(a+1>=t)break;o[a++]=192|L>>6,o[a++]=128|L&63}else if(L<=65535){if(a+2>=t)break;o[a++]=224|L>>12,o[a++]=128|L>>6&63,o[a++]=128|L&63}else if(L<=2097151){if(a+3>=t)break;o[a++]=240|L>>18,o[a++]=128|L>>12&63,o[a++]=128|L>>6&63,o[a++]=128|L&63}else if(L<=67108863){if(a+4>=t)break;o[a++]=248|L>>24,o[a++]=128|L>>18&63,o[a++]=128|L>>12&63,o[a++]=128|L>>6&63,o[a++]=128|L&63}else{if(a+5>=t)break;o[a++]=252|L>>30,o[a++]=128|L>>24&63,o[a++]=128|L>>18&63,o[a++]=128|L>>12&63,o[a++]=128|L>>6&63,o[a++]=128|L&63}}return o[a]=0,a-_}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(i,o,a){return stringToUTF8Array(i,HEAPU8,o,a)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(i){for(var o=0,a=0;a=55296&&p<=57343&&(p=65536+((p&1023)<<10)|i.charCodeAt(++a)&1023),p<=127?++o:p<=2047?o+=2:p<=65535?o+=3:p<=2097151?o+=4:p<=67108863?o+=5:o+=6}return o}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0;function demangle(i){var o=Module.___cxa_demangle||Module.__cxa_demangle;if(o){try{var a=i.substr(1),p=lengthBytesUTF8(a)+1,_=_malloc(p);stringToUTF8(a,_,p);var t=_malloc(4),k=o(_,0,0,t);if(getValue(t,"i32")===0&&k)return Pointer_stringify(k)}catch(L){}finally{_&&_free(_),t&&_free(t),k&&_free(k)}return i}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),i}function demangleAll(i){var o=/__Z[\w\d_]+/g;return i.replace(o,function(a){var p=demangle(a);return a===p?a:a+" ["+p+"]"})}function jsStackTrace(){var i=new Error;if(!i.stack){try{throw new Error(0)}catch(o){i=o}if(!i.stack)return"(no stack trace available)"}return i.stack.toString()}function stackTrace(){var i=jsStackTrace();return Module.extraStackTrace&&(i+=` -`+Module.extraStackTrace()),demangleAll(i)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var o=i.shift();if(typeof o=="function"){o();continue}var a=o.func;typeof a=="number"?o.arg===void 0?Module.dynCall_v(a):Module.dynCall_vi(a,o.arg):a(o.arg===void 0?null:o.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(i){__ATPRERUN__.unshift(i)}Module.addOnPreRun=addOnPreRun;function addOnInit(i){__ATINIT__.unshift(i)}Module.addOnInit=addOnInit;function addOnPreMain(i){__ATMAIN__.unshift(i)}Module.addOnPreMain=addOnPreMain;function addOnExit(i){__ATEXIT__.unshift(i)}Module.addOnExit=addOnExit;function addOnPostRun(i){__ATPOSTRUN__.unshift(i)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(i,o,a){var p=a>0?a:lengthBytesUTF8(i)+1,_=new Array(p),t=stringToUTF8Array(i,_,0,_.length);return o&&(_.length=t),_}Module.intArrayFromString=intArrayFromString;function intArrayToString(i){for(var o=[],a=0;a255&&(p&=255),o.push(String.fromCharCode(p))}return o.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(i,o,a){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var p,_;a&&(_=o+lengthBytesUTF8(i),p=HEAP8[_]),stringToUTF8(i,o,Infinity),a&&(HEAP8[_]=p)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(i,o){HEAP8.set(i,o)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(i,o,a){for(var p=0;p>0]=i.charCodeAt(p);a||(HEAP8[o>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function(o,a){var p=o>>>16,_=o&65535,t=a>>>16,k=a&65535;return _*k+(p*k+_*t<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(i){return froundBuffer[0]=i,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(i){i=i>>>0;for(var o=0;o<32;o++)if(i&1<<31-o)return o;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(i){return i<0?Math.ceil(i):Math.floor(i)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(i){return i}function addRunDependency(i){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(i){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var o=dependenciesFulfilled;dependenciesFulfilled=null,o()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(i,o,a,p,_,t,k,L){return _nbind.callbackSignatureList[i].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(i,o,a,p,_,t,k,L){return ASM_CONSTS[i](o,a,p,_,t,k,L)}function _emscripten_asm_const_iiiii(i,o,a,p,_){return ASM_CONSTS[i](o,a,p,_)}function _emscripten_asm_const_iiidddddd(i,o,a,p,_,t,k,L,O){return ASM_CONSTS[i](o,a,p,_,t,k,L,O)}function _emscripten_asm_const_iiididi(i,o,a,p,_,t,k){return ASM_CONSTS[i](o,a,p,_,t,k)}function _emscripten_asm_const_iiii(i,o,a,p){return ASM_CONSTS[i](o,a,p)}function _emscripten_asm_const_iiiid(i,o,a,p,_){return ASM_CONSTS[i](o,a,p,_)}function _emscripten_asm_const_iiiiii(i,o,a,p,_,t){return ASM_CONSTS[i](o,a,p,_,t)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(i,o){__ATEXIT__.unshift({func:i,arg:o})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(i,o,a,p){var _=arguments.length,t=_<3?o:p===null?p=Object.getOwnPropertyDescriptor(o,a):p,k;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")t=Reflect.decorate(i,o,a,p);else for(var L=i.length-1;L>=0;L--)(k=i[L])&&(t=(_<3?k(t):_>3?k(o,a,t):k(o,a))||t);return _>3&&t&&Object.defineProperty(o,a,t),t}function _defineHidden(i){return function(o,a){Object.defineProperty(o,a,{configurable:!1,enumerable:!1,value:i,writable:!0})}}var _nbind={};function __nbind_free_external(i){_nbind.externalList[i].dereference(i)}function __nbind_reference_external(i){_nbind.externalList[i].reference()}function _llvm_stackrestore(i){var o=_llvm_stacksave,a=o.LLVM_SAVEDSTACKS[i];o.LLVM_SAVEDSTACKS.splice(i,1),Runtime.stackRestore(a)}function __nbind_register_pool(i,o,a,p){_nbind.Pool.pageSize=i,_nbind.Pool.usedPtr=o/4,_nbind.Pool.rootPtr=a,_nbind.Pool.pagePtr=p/4,HEAP32[o/4]=16909060,HEAP8[o]==1&&(_nbind.bigEndian=!0),HEAP32[o/4]=0,_nbind.makeTypeKindTbl=(t={},t[1024]=_nbind.PrimitiveType,t[64]=_nbind.Int64Type,t[2048]=_nbind.BindClass,t[3072]=_nbind.BindClassPtr,t[4096]=_nbind.SharedClassPtr,t[5120]=_nbind.ArrayType,t[6144]=_nbind.ArrayType,t[7168]=_nbind.CStringType,t[9216]=_nbind.CallbackType,t[10240]=_nbind.BindType,t),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var _=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});_.proto=Module,_nbind.BindClass.list.push(_);var t}function _emscripten_set_main_loop_timing(i,o){if(Browser.mainLoop.timingMode=i,Browser.mainLoop.timingValue=o,!Browser.mainLoop.func)return 1;if(i==0)Browser.mainLoop.scheduler=function(){var k=Math.max(0,Browser.mainLoop.tickStartTime+o-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,k)},Browser.mainLoop.method="timeout";else if(i==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(i==2){if(!window.setImmediate){let t=function(k){k.source===window&&k.data===p&&(k.stopPropagation(),a.shift()())};var _=t,a=[],p="setimmediate";window.addEventListener("message",t,!0),window.setImmediate=function(L){a.push(L),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(L),window.postMessage({target:p})):window.postMessage(p,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(i,o,a,p,_){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=i,Browser.mainLoop.arg=p;var t;typeof p!="undefined"?t=function(){Module.dynCall_vi(i,p)}:t=function(){Module.dynCall_v(i)};var k=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var O=Date.now(),C=Browser.mainLoop.queue.shift();if(C.func(C.arg),Browser.mainLoop.remainingBlockers){var U=Browser.mainLoop.remainingBlockers,H=U%1==0?U-1:Math.floor(U);C.counted?Browser.mainLoop.remainingBlockers=H:(H=H+.5,Browser.mainLoop.remainingBlockers=(8*U+H)/9)}if(console.log('main loop blocker "'+C.name+'" took '+(Date.now()-O)+" ms"),Browser.mainLoop.updateStatus(),k1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(t),!(k0?_emscripten_set_main_loop_timing(0,1e3/o):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),a)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var i=Browser.mainLoop.timingMode,o=Browser.mainLoop.timingValue,a=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(a,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(i,o),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var i=Module.statusMessage||"Please wait...",o=Browser.mainLoop.remainingBlockers,a=Browser.mainLoop.expectedBlockers;o?o=6;){var qe=ie>>Oe-6&63;Oe-=6,me+=De[qe]}return Oe==2?(me+=De[(ie&3)<<4],me+=pe+pe):Oe==4&&(me+=De[(ie&15)<<2],me+=pe),me}m.src="data:audio/x-"+k.substr(-3)+";base64,"+ve(t),U(m)},m.src=ne,Browser.safeSetTimeout(function(){U(m)},1e4)}else return H()},Module.preloadPlugins.push(o);function a(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var p=Module.canvas;p&&(p.requestPointerLock=p.requestPointerLock||p.mozRequestPointerLock||p.webkitRequestPointerLock||p.msRequestPointerLock||function(){},p.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},p.exitPointerLock=p.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",a,!1),document.addEventListener("mozpointerlockchange",a,!1),document.addEventListener("webkitpointerlockchange",a,!1),document.addEventListener("mspointerlockchange",a,!1),Module.elementPointerLock&&p.addEventListener("click",function(_){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),_.preventDefault())},!1))},createContext:function(i,o,a,p){if(o&&Module.ctx&&i==Module.canvas)return Module.ctx;var _,t;if(o){var k={antialias:!1,alpha:!1};if(p)for(var L in p)k[L]=p[L];t=GL.createContext(i,k),t&&(_=GL.getContext(t).GLctx)}else _=i.getContext("2d");return _?(a&&(o||assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=_,o&&GL.makeContextCurrent(t),Module.useWebGL=o,Browser.moduleContextCreatedCallbacks.forEach(function(O){O()}),Browser.init()),_):null},destroyContext:function(i,o,a){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(i,o,a){Browser.lockPointer=i,Browser.resizeCanvas=o,Browser.vrDevice=a,typeof Browser.lockPointer=="undefined"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas=="undefined"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice=="undefined"&&(Browser.vrDevice=null);var p=Module.canvas;function _(){Browser.isFullscreen=!1;var k=p.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===k?(p.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},p.exitFullscreen=p.exitFullscreen.bind(document),Browser.lockPointer&&p.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(k.parentNode.insertBefore(p,k),k.parentNode.removeChild(k),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(p)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",_,!1),document.addEventListener("mozfullscreenchange",_,!1),document.addEventListener("webkitfullscreenchange",_,!1),document.addEventListener("MSFullscreenChange",_,!1));var t=document.createElement("div");p.parentNode.insertBefore(t,p),t.appendChild(p),t.requestFullscreen=t.requestFullscreen||t.mozRequestFullScreen||t.msRequestFullscreen||(t.webkitRequestFullscreen?function(){t.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(t.webkitRequestFullScreen?function(){t.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),a?t.requestFullscreen({vrDisplay:a}):t.requestFullscreen()},requestFullScreen:function(i,o,a){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(p,_,t){return Browser.requestFullscreen(p,_,t)},Browser.requestFullscreen(i,o,a)},nextRAF:0,fakeRequestAnimationFrame:function(i){var o=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=o+1e3/60;else for(;o+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var a=Math.max(Browser.nextRAF-o,0);setTimeout(i,a)},requestAnimationFrame:function(o){typeof window=="undefined"?Browser.fakeRequestAnimationFrame(o):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(o))},safeCallback:function(i){return function(){if(!ABORT)return i.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var i=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],i.forEach(function(o){o()})}},safeRequestAnimationFrame:function(i){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))})},safeSetTimeout:function(i,o){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))},o)},safeSetInterval:function(i,o){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&i()},o)},getMimetype:function(i){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[i.substr(i.lastIndexOf(".")+1)]},getUserMedia:function(i){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(i)},getMovementX:function(i){return i.movementX||i.mozMovementX||i.webkitMovementX||0},getMovementY:function(i){return i.movementY||i.mozMovementY||i.webkitMovementY||0},getMouseWheelDelta:function(i){var o=0;switch(i.type){case"DOMMouseScroll":o=i.detail;break;case"mousewheel":o=i.wheelDelta;break;case"wheel":o=i.deltaY;break;default:throw"unrecognized mouse wheel event: "+i.type}return o},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(i){if(Browser.pointerLock)i.type!="mousemove"&&"mozMovementX"in i?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(i),Browser.mouseMovementY=Browser.getMovementY(i)),typeof SDL!="undefined"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var o=Module.canvas.getBoundingClientRect(),a=Module.canvas.width,p=Module.canvas.height,_=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset,t=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(i.type==="touchstart"||i.type==="touchend"||i.type==="touchmove"){var k=i.touch;if(k===void 0)return;var L=k.pageX-(_+o.left),O=k.pageY-(t+o.top);L=L*(a/o.width),O=O*(p/o.height);var C={x:L,y:O};if(i.type==="touchstart")Browser.lastTouches[k.identifier]=C,Browser.touches[k.identifier]=C;else if(i.type==="touchend"||i.type==="touchmove"){var U=Browser.touches[k.identifier];U||(U=C),Browser.lastTouches[k.identifier]=U,Browser.touches[k.identifier]=C}return}var H=i.pageX-(_+o.left),W=i.pageY-(t+o.top);H=H*(a/o.width),W=W*(p/o.height),Browser.mouseMovementX=H-Browser.mouseX,Browser.mouseMovementY=W-Browser.mouseY,Browser.mouseX=H,Browser.mouseY=W}},asyncLoad:function(i,o,a,p){var _=p?"":getUniqueRunDependency("al "+i);Module.readAsync(i,function(t){assert(t,'Loading data file "'+i+'" failed (no arrayBuffer).'),o(new Uint8Array(t)),_&&removeRunDependency(_)},function(t){if(a)a();else throw'Loading data file "'+i+'" failed.'}),_&&addRunDependency(_)},resizeListeners:[],updateResizeListeners:function(){var i=Module.canvas;Browser.resizeListeners.forEach(function(o){o(i.width,i.height)})},setCanvasSize:function(i,o,a){var p=Module.canvas;Browser.updateCanvasDimensions(p,i,o),a||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i&~8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},updateCanvasDimensions:function(i,o,a){o&&a?(i.widthNative=o,i.heightNative=a):(o=i.widthNative,a=i.heightNative);var p=o,_=a;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(p/_>2];return o},getStr:function(){var i=Pointer_stringify(SYSCALLS.get());return i},get64:function(){var i=SYSCALLS.get(),o=SYSCALLS.get();return i>=0?assert(o===0):assert(o===-1),i},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(i,o){SYSCALLS.varargs=o;try{var a=SYSCALLS.getStreamFromFD();return FS.close(a),0}catch(p){return(typeof FS=="undefined"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall54(i,o){SYSCALLS.varargs=o;try{return 0}catch(a){return(typeof FS=="undefined"||!(a instanceof FS.ErrnoError))&&abort(a),-a.errno}}function _typeModule(i){var o=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function a(O,C,U,H,W,ne){if(C==1){var m=H&896;(m==128||m==256||m==384)&&(O="X const")}var he;return ne?he=U.replace("X",O).replace("Y",W):he=O.replace("X",U).replace("Y",W),he.replace(/([*&]) (?=[*&])/g,"$1")}function p(O,C,U,H,W){throw new Error(O+" type "+U.replace("X",C+"?")+(H?" with flag "+H:"")+" in "+W)}function _(O,C,U,H,W,ne,m,he){ne===void 0&&(ne="X"),he===void 0&&(he=1);var Ee=U(O);if(Ee)return Ee;var ve=H(O),se=ve.placeholderFlag,De=o[se];m&&De&&(ne=a(m[2],m[0],ne,De[0],"?",!0));var pe;se==0&&(pe="Unbound"),se>=10&&(pe="Corrupt"),he>20&&(pe="Deeply nested"),pe&&p(pe,O,ne,se,W||"?");var me=ve.paramList[0],ie=_(me,C,U,H,W,ne,De,he+1),Oe,je={flags:De[0],id:O,name:"",paramList:[ie]},qe=[],yt="?";switch(ve.placeholderFlag){case 1:Oe=ie.spec;break;case 2:if((ie.flags&15360)==1024&&ie.spec.ptrSize==1){je.flags=7168;break}case 3:case 6:case 5:Oe=ie.spec,(ie.flags&15360)!=2048;break;case 8:yt=""+ve.paramList[1],je.paramList.push(ve.paramList[1]);break;case 9:for(var gt=0,Xe=ve.paramList[1];gt>2]=i),i}function _llvm_stacksave(){var i=_llvm_stacksave;return i.LLVM_SAVEDSTACKS||(i.LLVM_SAVEDSTACKS=[]),i.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),i.LLVM_SAVEDSTACKS.length-1}function ___syscall140(i,o){SYSCALLS.varargs=o;try{var a=SYSCALLS.getStreamFromFD(),p=SYSCALLS.get(),_=SYSCALLS.get(),t=SYSCALLS.get(),k=SYSCALLS.get(),L=_;return FS.llseek(a,L,k),HEAP32[t>>2]=a.position,a.getdents&&L===0&&k===0&&(a.getdents=null),0}catch(O){return(typeof FS=="undefined"||!(O instanceof FS.ErrnoError))&&abort(O),-O.errno}}function ___syscall146(i,o){SYSCALLS.varargs=o;try{var a=SYSCALLS.get(),p=SYSCALLS.get(),_=SYSCALLS.get(),t=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(U,H){var W=___syscall146.buffers[U];assert(W),H===0||H===10?((U===1?Module.print:Module.printErr)(UTF8ArrayToString(W,0)),W.length=0):W.push(H)});for(var k=0;k<_;k++){for(var L=HEAP32[p+k*8>>2],O=HEAP32[p+(k*8+4)>>2],C=0;Ci.pageSize/2||o>i.pageSize-a){var p=_nbind.typeNameTbl.NBind.proto;return p.lalloc(o)}else return HEAPU32[i.usedPtr]=a+o,i.rootPtr+a},i.lreset=function(o,a){var p=HEAPU32[i.pagePtr];if(p){var _=_nbind.typeNameTbl.NBind.proto;_.lreset(o,a)}else HEAPU32[i.usedPtr]=o},i}();_nbind.Pool=Pool;function constructType(i,o){var a=i==10240?_nbind.makeTypeNameTbl[o.name]||_nbind.BindType:_nbind.makeTypeKindTbl[i],p=new a(o);return typeIdTbl[o.id]=p,_nbind.typeNameTbl[o.name]=p,p}_nbind.constructType=constructType;function getType(i){return typeIdTbl[i]}_nbind.getType=getType;function queryType(i){var o=HEAPU8[i],a=_nbind.structureList[o][1];i/=4,a<0&&(++i,a=HEAPU32[i]+1);var p=Array.prototype.slice.call(HEAPU32.subarray(i+1,i+1+a));return o==9&&(p=[p[0],p.slice(1)]),{paramList:p,placeholderFlag:o}}_nbind.queryType=queryType;function getTypes(i,o){return i.map(function(a){return typeof a=="number"?_nbind.getComplexType(a,constructType,getType,queryType,o):_nbind.typeNameTbl[a]})}_nbind.getTypes=getTypes;function readTypeIdList(i,o){return Array.prototype.slice.call(HEAPU32,i/4,i/4+o)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(i){for(var o=i;HEAPU8[o++];);return String.fromCharCode.apply("",HEAPU8.subarray(i,o-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(i){var o={};if(i)for(;;){var a=HEAPU32[i/4];if(!a)break;o[readAsciiString(a)]=!0,i+=4}return o}_nbind.readPolicyList=readPolicyList;function getDynCall(i,o){var a={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},p=i.map(function(t){return a[t.name]||"i"}).join(""),_=Module["dynCall_"+p];if(!_)throw new Error("dynCall_"+p+" not found for "+o+"("+i.map(function(t){return t.name}).join(", ")+")");return _}_nbind.getDynCall=getDynCall;function addMethod(i,o,a,p){var _=i[o];i.hasOwnProperty(o)&&_?((_.arity||_.arity===0)&&(_=_nbind.makeOverloader(_,_.arity),i[o]=_),_.addMethod(a,p)):(a.arity=p,i[o]=a)}_nbind.addMethod=addMethod;function throwError(i){throw new Error(i)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(i){__extends(o,i);function o(){var a=i!==null&&i.apply(this,arguments)||this;return a.heap=HEAPU32,a.ptrSize=4,a}return o.prototype.needsWireRead=function(a){return!!this.wireRead||!!this.makeWireRead},o.prototype.needsWireWrite=function(a){return!!this.wireWrite||!!this.makeWireWrite},o}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(i){__extends(o,i);function o(a){var p=i.call(this,a)||this,_=a.flags&32?{32:HEAPF32,64:HEAPF64}:a.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return p.heap=_[a.ptrSize*8],p.ptrSize=a.ptrSize,p}return o.prototype.needsWireWrite=function(a){return!!a&&!!a.Strict},o.prototype.makeWireWrite=function(a,p){return p&&p.Strict&&function(_){if(typeof _=="number")return _;throw new Error("Type mismatch")}},o}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(i,o){if(i==null){if(o&&o.Nullable)return 0;throw new Error("Type mismatch")}if(o&&o.Strict){if(typeof i!="string")throw new Error("Type mismatch")}else i=i.toString();var a=Module.lengthBytesUTF8(i)+1,p=_nbind.Pool.lalloc(a);return Module.stringToUTF8Array(i,HEAPU8,p,a),p}_nbind.pushCString=pushCString;function popCString(i){return i===0?null:Module.Pointer_stringify(i)}_nbind.popCString=popCString;var CStringType=function(i){__extends(o,i);function o(){var a=i!==null&&i.apply(this,arguments)||this;return a.wireRead=popCString,a.wireWrite=pushCString,a.readResources=[_nbind.resources.pool],a.writeResources=[_nbind.resources.pool],a}return o.prototype.makeWireWrite=function(a,p){return function(_){return pushCString(_,p)}},o}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(i){__extends(o,i);function o(){var a=i!==null&&i.apply(this,arguments)||this;return a.wireRead=function(p){return!!p},a}return o.prototype.needsWireWrite=function(a){return!!a&&!!a.Strict},o.prototype.makeWireRead=function(a){return"!!("+a+")"},o.prototype.makeWireWrite=function(a,p){return p&&p.Strict&&function(_){if(typeof _=="boolean")return _;throw new Error("Type mismatch")}||a},o}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function i(){}return i.prototype.persist=function(){this.__nbindState|=1},i}();_nbind.Wrapper=Wrapper;function makeBound(i,o){var a=function(p){__extends(_,p);function _(t,k,L,O){var C=p.call(this)||this;if(!(C instanceof _))return new(Function.prototype.bind.apply(_,Array.prototype.concat.apply([null],arguments)));var U=k,H=L,W=O;if(t!==_nbind.ptrMarker){var ne=C.__nbindConstructor.apply(C,arguments);U=4096|512,W=HEAPU32[ne/4],H=HEAPU32[ne/4+1]}var m={configurable:!0,enumerable:!1,value:null,writable:!1},he={__nbindFlags:U,__nbindPtr:H};W&&(he.__nbindShared=W,_nbind.mark(C));for(var Ee=0,ve=Object.keys(he);Ee>=1;var a=_nbind.valueList[i];return _nbind.valueList[i]=firstFreeValue,firstFreeValue=i,a}else{if(o)return _nbind.popShared(i,o);throw new Error("Invalid value slot "+i)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(i){return typeof i=="number"?i:pushValue(i)*4096+valueBase}function pop64(i){return i=3?k=Buffer.from(t):k=new Buffer(t),k.copy(p)}else getBuffer(p).set(t)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var i=0,o=dirtyList;i>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(i,o,a,p,_,t){try{Module.dynCall_viiiii(i,o,a,p,_,t)}catch(k){if(typeof k!="number"&&k!=="longjmp")throw k;Module.setThrew(1,0)}}function invoke_vif(i,o,a){try{Module.dynCall_vif(i,o,a)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_vid(i,o,a){try{Module.dynCall_vid(i,o,a)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_fiff(i,o,a,p){try{return Module.dynCall_fiff(i,o,a,p)}catch(_){if(typeof _!="number"&&_!=="longjmp")throw _;Module.setThrew(1,0)}}function invoke_vi(i,o){try{Module.dynCall_vi(i,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vii(i,o,a){try{Module.dynCall_vii(i,o,a)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_ii(i,o){try{return Module.dynCall_ii(i,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_viddi(i,o,a,p,_){try{Module.dynCall_viddi(i,o,a,p,_)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_vidd(i,o,a,p){try{Module.dynCall_vidd(i,o,a,p)}catch(_){if(typeof _!="number"&&_!=="longjmp")throw _;Module.setThrew(1,0)}}function invoke_iiii(i,o,a,p){try{return Module.dynCall_iiii(i,o,a,p)}catch(_){if(typeof _!="number"&&_!=="longjmp")throw _;Module.setThrew(1,0)}}function invoke_diii(i,o,a,p){try{return Module.dynCall_diii(i,o,a,p)}catch(_){if(typeof _!="number"&&_!=="longjmp")throw _;Module.setThrew(1,0)}}function invoke_di(i,o){try{return Module.dynCall_di(i,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iid(i,o,a){try{return Module.dynCall_iid(i,o,a)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_iii(i,o,a){try{return Module.dynCall_iii(i,o,a)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_viiddi(i,o,a,p,_,t){try{Module.dynCall_viiddi(i,o,a,p,_,t)}catch(k){if(typeof k!="number"&&k!=="longjmp")throw k;Module.setThrew(1,0)}}function invoke_viiiiii(i,o,a,p,_,t,k){try{Module.dynCall_viiiiii(i,o,a,p,_,t,k)}catch(L){if(typeof L!="number"&&L!=="longjmp")throw L;Module.setThrew(1,0)}}function invoke_dii(i,o,a){try{return Module.dynCall_dii(i,o,a)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_i(i){try{return Module.dynCall_i(i)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iiiiii(i,o,a,p,_,t){try{return Module.dynCall_iiiiii(i,o,a,p,_,t)}catch(k){if(typeof k!="number"&&k!=="longjmp")throw k;Module.setThrew(1,0)}}function invoke_viiid(i,o,a,p,_){try{Module.dynCall_viiid(i,o,a,p,_)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_viififi(i,o,a,p,_,t,k){try{Module.dynCall_viififi(i,o,a,p,_,t,k)}catch(L){if(typeof L!="number"&&L!=="longjmp")throw L;Module.setThrew(1,0)}}function invoke_viii(i,o,a,p){try{Module.dynCall_viii(i,o,a,p)}catch(_){if(typeof _!="number"&&_!=="longjmp")throw _;Module.setThrew(1,0)}}function invoke_v(i){try{Module.dynCall_v(i)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viid(i,o,a,p){try{Module.dynCall_viid(i,o,a,p)}catch(_){if(typeof _!="number"&&_!=="longjmp")throw _;Module.setThrew(1,0)}}function invoke_idd(i,o,a){try{return Module.dynCall_idd(i,o,a)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_viiii(i,o,a,p,_){try{Module.dynCall_viiii(i,o,a,p,_)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:Infinity},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(i,o,a){var p=new i.Int8Array(a),_=new i.Int16Array(a),t=new i.Int32Array(a),k=new i.Uint8Array(a),L=new i.Uint16Array(a),O=new i.Uint32Array(a),C=new i.Float32Array(a),U=new i.Float64Array(a),H=o.DYNAMICTOP_PTR|0,W=o.tempDoublePtr|0,ne=o.ABORT|0,m=o.STACKTOP|0,he=o.STACK_MAX|0,Ee=o.cttz_i8|0,ve=o.___dso_handle|0,se=0,De=0,pe=0,me=0,ie=i.NaN,Oe=i.Infinity,je=0,qe=0,yt=0,gt=0,Xe=0,ut=0,We=i.Math.floor,Ft=i.Math.abs,Jt=i.Math.sqrt,rt=i.Math.pow,Q=i.Math.cos,fe=i.Math.sin,xe=i.Math.tan,oe=i.Math.acos,ze=i.Math.asin,ct=i.Math.atan,Rt=i.Math.atan2,nn=i.Math.exp,an=i.Math.log,Mn=i.Math.ceil,lr=i.Math.imul,ln=i.Math.min,Vt=i.Math.max,Er=i.Math.clz32,w=i.Math.fround,jt=o.abort,Xn=o.assert,vr=o.enlargeMemory,jr=o.getTotalMemory,fr=o.abortOnCannotGrowMemory,zr=o.invoke_viiiii,Xt=o.invoke_vif,wu=o.invoke_vid,d0=o.invoke_fiff,Ro=o.invoke_vi,Qo=o.invoke_vii,Fs=o.invoke_ii,Jo=o.invoke_viddi,Zo=o.invoke_vidd,qt=o.invoke_iiii,xi=o.invoke_diii,lu=o.invoke_di,mi=o.invoke_iid,Dr=o.invoke_iii,$o=o.invoke_viiddi,G0=o.invoke_viiiiii,Uu=o.invoke_dii,Y0=o.invoke_i,Xr=o.invoke_iiiiii,Ao=o.invoke_viiid,Oo=o.invoke_viififi,F0=o.invoke_viii,su=o.invoke_v,ki=o.invoke_viid,Ps=o.invoke_idd,Kl=o.invoke_viiii,P0=o._emscripten_asm_const_iiiii,p0=o._emscripten_asm_const_iiidddddd,Hr=o._emscripten_asm_const_iiiid,Ri=o.__nbind_reference_external,K0=o._emscripten_asm_const_iiiiiiii,yi=o._removeAccessorPrefix,en=o._typeModule,bn=o.__nbind_register_pool,Ai=o.__decorate,gi=o._llvm_stackrestore,Wt=o.___cxa_atexit,Au=o.__extends,eu=o.__nbind_get_value_object,X0=o.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,Yi=o._emscripten_set_main_loop_timing,Xl=o.__nbind_register_primitive,Mo=o.__nbind_register_type,ai=o._emscripten_memcpy_big,so=o.__nbind_register_function,Ql=o.___setErrNo,ko=o.__nbind_register_class,Is=o.__nbind_finish,$n=o._abort,el=o._nbind_value,ao=o._llvm_stacksave,I0=o.___syscall54,wl=o._defineHidden,No=o._emscripten_set_main_loop,wt=o._emscripten_get_now,bt=o.__nbind_register_callback_signature,Hn=o._emscripten_asm_const_iiiiii,qr=o.__nbind_free_external,Ki=o._emscripten_asm_const_iiii,Qr=o._emscripten_asm_const_iiididi,Ou=o.___syscall6,h0=o._atexit,Ni=o.___syscall140,v0=o.___syscall146,hs=w(0);let Tt=w(0);function fo(e){e=e|0;var n=0;return n=m,m=m+e|0,m=m+15&-16,n|0}function tl(){return m|0}function Jl(e){e=e|0,m=e}function ju(e,n){e=e|0,n=n|0,m=e,he=n}function vs(e,n){e=e|0,n=n|0,se||(se=e,De=n)}function b0(e){e=e|0,ut=e}function X(){return ut|0}function we(){var e=0,n=0;gr(8104,8,400)|0,gr(8504,408,540)|0,e=9044,n=e+44|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));p[9088]=0,p[9089]=1,t[2273]=0,t[2274]=948,t[2275]=948,Wt(17,8104,ve|0)|0}function Le(e){e=e|0,ac(e+948|0)}function Ne(e){return e=w(e),((mr(e)|0)&2147483647)>>>0>2139095040|0}function dt(e,n,r){e=e|0,n=n|0,r=r|0;e:do if(t[e+(n<<3)+4>>2]|0)e=e+(n<<3)|0;else{if((n|2|0)==3?t[e+60>>2]|0:0){e=e+56|0;break}switch(n|0){case 0:case 2:case 4:case 5:{if(t[e+52>>2]|0){e=e+48|0;break e}break}default:}if(t[e+68>>2]|0){e=e+64|0;break}else{e=(n|1|0)==5?948:r;break}}while(0);return e|0}function Yn(e){e=e|0;var n=0;return n=c_(1e3)|0,Cn(e,(n|0)!=0,2456),t[2276]=(t[2276]|0)+1,gr(n|0,8104,1e3)|0,p[e+2>>0]|0&&(t[n+4>>2]=2,t[n+12>>2]=4),t[n+976>>2]=e,n|0}function Cn(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;l=m,m=m+16|0,u=l,n||(t[u>>2]=r,Tl(e,5,3197,u)),m=l}function cr(){return Yn(956)|0}function Si(e){e=e|0;var n=0;return n=pn(1e3)|0,Mu(n,e),Cn(t[e+976>>2]|0,1,2456),t[2276]=(t[2276]|0)+1,t[n+944>>2]=0,n|0}function Mu(e,n){e=e|0,n=n|0;var r=0;gr(e|0,n|0,948)|0,sa(e+948|0,n+948|0),r=e+960|0,e=n+960|0,n=r+40|0;do t[r>>2]=t[e>>2],r=r+4|0,e=e+4|0;while((r|0)<(n|0))}function zu(e){e=e|0;var n=0,r=0,u=0,l=0;if(n=e+944|0,r=t[n>>2]|0,r|0&&(Hu(r+948|0,e)|0,t[n>>2]=0),r=Su(e)|0,r|0){n=0;do t[(Ti(e,n)|0)+944>>2]=0,n=n+1|0;while((n|0)!=(r|0))}r=e+948|0,u=t[r>>2]|0,l=e+952|0,n=t[l>>2]|0,(n|0)!=(u|0)&&(t[l>>2]=n+(~((n+-4-u|0)>>>2)<<2)),Lo(r),d_(e),t[2276]=(t[2276]|0)+-1}function Hu(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0;u=t[e>>2]|0,D=e+4|0,r=t[D>>2]|0,s=r;e:do if((u|0)==(r|0))l=u,h=4;else for(e=u;;){if((t[e>>2]|0)==(n|0)){l=e,h=4;break e}if(e=e+4|0,(e|0)==(r|0)){e=0;break}}while(0);return(h|0)==4&&((l|0)!=(r|0)?(u=l+4|0,e=s-u|0,n=e>>2,n&&(Ty(l|0,u|0,e|0)|0,r=t[D>>2]|0),e=l+(n<<2)|0,(r|0)==(e|0)||(t[D>>2]=r+(~((r+-4-e|0)>>>2)<<2)),e=1):e=0),e|0}function Su(e){return e=e|0,(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2|0}function Ti(e,n){e=e|0,n=n|0;var r=0;return r=t[e+948>>2]|0,(t[e+952>>2]|0)-r>>2>>>0>n>>>0?e=t[r+(n<<2)>>2]|0:e=0,e|0}function Lo(e){e=e|0;var n=0,r=0,u=0,l=0;u=m,m=m+32|0,n=u,l=t[e>>2]|0,r=(t[e+4>>2]|0)-l|0,((t[e+8>>2]|0)-l|0)>>>0>r>>>0&&(l=r>>2,Y(n,l,l,e+8|0),ri(e,n),ii(n)),m=u}function ku(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0;N=Su(e)|0;do if(N|0){if((t[(Ti(e,0)|0)+944>>2]|0)==(e|0)){if(!(Hu(e+948|0,n)|0))break;gr(n+400|0,8504,540)|0,t[n+944>>2]=0,Qn(e);break}h=t[(t[e+976>>2]|0)+12>>2]|0,D=e+948|0,S=(h|0)==0,r=0,s=0;do u=t[(t[D>>2]|0)+(s<<2)>>2]|0,(u|0)==(n|0)?Qn(e):(l=Si(u)|0,t[(t[D>>2]|0)+(r<<2)>>2]=l,t[l+944>>2]=e,S||PE[h&15](u,l,e,r),r=r+1|0),s=s+1|0;while((s|0)!=(N|0));if(r>>>0>>0){S=e+948|0,D=e+952|0,h=r,r=t[D>>2]|0;do s=(t[S>>2]|0)+(h<<2)|0,u=s+4|0,l=r-u|0,n=l>>2,n&&(Ty(s|0,u|0,l|0)|0,r=t[D>>2]|0),l=r,u=s+(n<<2)|0,(l|0)!=(u|0)&&(r=l+(~((l+-4-u|0)>>>2)<<2)|0,t[D>>2]=r),h=h+1|0;while((h|0)!=(N|0))}}while(0)}function co(e){e=e|0;var n=0,r=0,u=0,l=0;qu(e,(Su(e)|0)==0,2491),qu(e,(t[e+944>>2]|0)==0,2545),n=e+948|0,r=t[n>>2]|0,u=e+952|0,l=t[u>>2]|0,(l|0)!=(r|0)&&(t[u>>2]=l+(~((l+-4-r|0)>>>2)<<2)),Lo(n),n=e+976|0,r=t[n>>2]|0,gr(e|0,8104,1e3)|0,p[r+2>>0]|0&&(t[e+4>>2]=2,t[e+12>>2]=4),t[n>>2]=r}function qu(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;l=m,m=m+16|0,u=l,n||(t[u>>2]=r,pr(e,5,3197,u)),m=l}function Pa(){return t[2276]|0}function m0(){var e=0;return e=c_(20)|0,ia((e|0)!=0,2592),t[2277]=(t[2277]|0)+1,t[e>>2]=t[239],t[e+4>>2]=t[240],t[e+8>>2]=t[241],t[e+12>>2]=t[242],t[e+16>>2]=t[243],e|0}function ia(e,n){e=e|0,n=n|0;var r=0,u=0;u=m,m=m+16|0,r=u,e||(t[r>>2]=n,pr(0,5,3197,r)),m=u}function Q0(e){e=e|0,d_(e),t[2277]=(t[2277]|0)+-1}function ua(e,n){e=e|0,n=n|0;var r=0;n?(qu(e,(Su(e)|0)==0,2629),r=1):(r=0,n=0),t[e+964>>2]=n,t[e+988>>2]=r}function Ia(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,s=u+8|0,l=u+4|0,h=u,t[l>>2]=n,qu(e,(t[n+944>>2]|0)==0,2709),qu(e,(t[e+964>>2]|0)==0,2763),ms(e),n=e+948|0,t[h>>2]=(t[n>>2]|0)+(r<<2),t[s>>2]=t[h>>2],S0(n,s,l)|0,t[(t[l>>2]|0)+944>>2]=e,Qn(e),m=u}function ms(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0;if(r=Su(e)|0,r|0?(t[(Ti(e,0)|0)+944>>2]|0)!=(e|0):0){u=t[(t[e+976>>2]|0)+12>>2]|0,l=e+948|0,s=(u|0)==0,n=0;do h=t[(t[l>>2]|0)+(n<<2)>>2]|0,D=Si(h)|0,t[(t[l>>2]|0)+(n<<2)>>2]=D,t[D+944>>2]=e,s||PE[u&15](h,D,e,n),n=n+1|0;while((n|0)!=(r|0))}}function S0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0,be=0,Se=0,ye=0,Je=0,Ge=0;Je=m,m=m+64|0,I=Je+52|0,D=Je+48|0,K=Je+28|0,be=Je+24|0,Se=Je+20|0,ye=Je,u=t[e>>2]|0,s=u,n=u+((t[n>>2]|0)-s>>2<<2)|0,u=e+4|0,l=t[u>>2]|0,h=e+8|0;do if(l>>>0<(t[h>>2]|0)>>>0){if((n|0)==(l|0)){t[n>>2]=t[r>>2],t[u>>2]=(t[u>>2]|0)+4;break}Vr(e,n,l,n+4|0),n>>>0<=r>>>0&&(r=(t[u>>2]|0)>>>0>r>>>0?r+4|0:r),t[n>>2]=t[r>>2]}else{u=(l-s>>2)+1|0,l=R0(e)|0,l>>>0>>0&&hi(e),M=t[e>>2]|0,N=(t[h>>2]|0)-M|0,s=N>>1,Y(ye,N>>2>>>0>>1>>>0?s>>>0>>0?u:s:l,n-M>>2,e+8|0),M=ye+8|0,u=t[M>>2]|0,s=ye+12|0,N=t[s>>2]|0,h=N,S=u;do if((u|0)==(N|0)){if(N=ye+4|0,u=t[N>>2]|0,Ge=t[ye>>2]|0,l=Ge,u>>>0<=Ge>>>0){u=h-l>>1,u=(u|0)==0?1:u,Y(K,u,u>>>2,t[ye+16>>2]|0),t[be>>2]=t[N>>2],t[Se>>2]=t[M>>2],t[D>>2]=t[be>>2],t[I>>2]=t[Se>>2],Di(K,D,I),u=t[ye>>2]|0,t[ye>>2]=t[K>>2],t[K>>2]=u,u=K+4|0,Ge=t[N>>2]|0,t[N>>2]=t[u>>2],t[u>>2]=Ge,u=K+8|0,Ge=t[M>>2]|0,t[M>>2]=t[u>>2],t[u>>2]=Ge,u=K+12|0,Ge=t[s>>2]|0,t[s>>2]=t[u>>2],t[u>>2]=Ge,ii(K),u=t[M>>2]|0;break}s=u,h=((s-l>>2)+1|0)/-2|0,D=u+(h<<2)|0,l=S-s|0,s=l>>2,s&&(Ty(D|0,u|0,l|0)|0,u=t[N>>2]|0),Ge=D+(s<<2)|0,t[M>>2]=Ge,t[N>>2]=u+(h<<2),u=Ge}while(0);t[u>>2]=t[r>>2],t[M>>2]=(t[M>>2]|0)+4,n=at(e,ye,n)|0,ii(ye)}while(0);return m=Je,n|0}function Qn(e){e=e|0;var n=0;do{if(n=e+984|0,p[n>>0]|0)break;p[n>>0]=1,C[e+504>>2]=w(ie),e=t[e+944>>2]|0}while((e|0)!=0)}function ac(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-u|0)>>>2)<<2)),_t(r))}function fi(e){return e=e|0,t[e+944>>2]|0}function $r(e){e=e|0,qu(e,(t[e+964>>2]|0)!=0,2832),Qn(e)}function Zl(e){return e=e|0,(p[e+984>>0]|0)!=0|0}function oa(e,n){e=e|0,n=n|0,gL(e,n,400)|0&&(gr(e|0,n|0,400)|0,Qn(e))}function pf(e){e=e|0;var n=Tt;return n=w(C[e+44>>2]),e=Ne(n)|0,w(e?w(0):n)}function bs(e){e=e|0;var n=Tt;return n=w(C[e+48>>2]),Ne(n)|0&&(n=p[(t[e+976>>2]|0)+2>>0]|0?w(1):w(0)),w(n)}function ba(e,n){e=e|0,n=n|0,t[e+980>>2]=n}function Bs(e){return e=e|0,t[e+980>>2]|0}function y0(e,n){e=e|0,n=n|0;var r=0;r=e+4|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function Us(e){return e=e|0,t[e+4>>2]|0}function ji(e,n){e=e|0,n=n|0;var r=0;r=e+8|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function B(e){return e=e|0,t[e+8>>2]|0}function z(e,n){e=e|0,n=n|0;var r=0;r=e+12|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function G(e){return e=e|0,t[e+12>>2]|0}function $(e,n){e=e|0,n=n|0;var r=0;r=e+16|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function Te(e){return e=e|0,t[e+16>>2]|0}function ge(e,n){e=e|0,n=n|0;var r=0;r=e+20|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function Re(e){return e=e|0,t[e+20>>2]|0}function Z(e,n){e=e|0,n=n|0;var r=0;r=e+24|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function ke(e){return e=e|0,t[e+24>>2]|0}function Qe(e,n){e=e|0,n=n|0;var r=0;r=e+28|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function ht(e){return e=e|0,t[e+28>>2]|0}function ue(e,n){e=e|0,n=n|0;var r=0;r=e+32|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function He(e){return e=e|0,t[e+32>>2]|0}function nt(e,n){e=e|0,n=n|0;var r=0;r=e+36|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function Ct(e){return e=e|0,t[e+36>>2]|0}function Mt(e,n){e=e|0,n=w(n);var r=0;r=e+40|0,w(C[r>>2])!=n&&(C[r>>2]=n,Qn(e))}function It(e,n){e=e|0,n=w(n);var r=0;r=e+44|0,w(C[r>>2])!=n&&(C[r>>2]=n,Qn(e))}function sn(e,n){e=e|0,n=w(n);var r=0;r=e+48|0,w(C[r>>2])!=n&&(C[r>>2]=n,Qn(e))}function rn(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Ne(n)|0,r=(s^1)&1,u=e+52|0,l=e+56|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Qn(e))}function Lt(e,n){e=e|0,n=w(n);var r=0,u=0;u=e+52|0,r=e+56|0,(w(C[u>>2])==n?(t[r>>2]|0)==2:0)||(C[u>>2]=n,u=Ne(n)|0,t[r>>2]=u?3:2,Qn(e))}function Dn(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+52|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function dr(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Ne(r)|0,u=(s^1)&1,l=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Qn(e))}function er(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Ne(r)|0,u=s?0:2,l=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Qn(e))}function Cr(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=n+132+(r<<3)|0,n=t[u+4>>2]|0,r=e,t[r>>2]=t[u>>2],t[r+4>>2]=n}function An(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Ne(r)|0,u=(s^1)&1,l=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Qn(e))}function Nr(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Ne(r)|0,u=s?0:2,l=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Qn(e))}function g0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=n+60+(r<<3)|0,n=t[u+4>>2]|0,r=e,t[r>>2]=t[u>>2],t[r+4>>2]=n}function Lr(e,n){e=e|0,n=n|0;var r=0;r=e+60+(n<<3)+4|0,(t[r>>2]|0)!=3&&(C[e+60+(n<<3)>>2]=w(ie),t[r>>2]=3,Qn(e))}function it(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Ne(r)|0,u=(s^1)&1,l=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Qn(e))}function Dt(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Ne(r)|0,u=s?0:2,l=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Qn(e))}function $e(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=n+204+(r<<3)|0,n=t[u+4>>2]|0,r=e,t[r>>2]=t[u>>2],t[r+4>>2]=n}function Pt(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Ne(r)|0,u=(s^1)&1,l=e+276+(n<<3)|0,n=e+276+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Qn(e))}function un(e,n){return e=e|0,n=n|0,w(C[e+276+(n<<3)>>2])}function fn(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Ne(n)|0,r=(s^1)&1,u=e+348|0,l=e+352|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Qn(e))}function Jn(e,n){e=e|0,n=w(n);var r=0,u=0;u=e+348|0,r=e+352|0,(w(C[u>>2])==n?(t[r>>2]|0)==2:0)||(C[u>>2]=n,u=Ne(n)|0,t[r>>2]=u?3:2,Qn(e))}function wr(e){e=e|0;var n=0;n=e+352|0,(t[n>>2]|0)!=3&&(C[e+348>>2]=w(ie),t[n>>2]=3,Qn(e))}function au(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+348|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function Nu(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Ne(n)|0,r=(s^1)&1,u=e+356|0,l=e+360|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Qn(e))}function T0(e,n){e=e|0,n=w(n);var r=0,u=0;u=e+356|0,r=e+360|0,(w(C[u>>2])==n?(t[r>>2]|0)==2:0)||(C[u>>2]=n,u=Ne(n)|0,t[r>>2]=u?3:2,Qn(e))}function J0(e){e=e|0;var n=0;n=e+360|0,(t[n>>2]|0)!=3&&(C[e+356>>2]=w(ie),t[n>>2]=3,Qn(e))}function Lu(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+356|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function _i(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Ne(n)|0,r=(s^1)&1,u=e+364|0,l=e+368|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Qn(e))}function Fo(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Ne(n)|0,r=s?0:2,u=e+364|0,l=e+368|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Qn(e))}function nl(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+364|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function hf(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Ne(n)|0,r=(s^1)&1,u=e+372|0,l=e+376|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Qn(e))}function Sl(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Ne(n)|0,r=s?0:2,u=e+372|0,l=e+376|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Qn(e))}function vf(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+372|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function Po(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Ne(n)|0,r=(s^1)&1,u=e+380|0,l=e+384|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Qn(e))}function ys(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Ne(n)|0,r=s?0:2,u=e+380|0,l=e+384|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Qn(e))}function js(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+380|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function Io(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Ne(n)|0,r=(s^1)&1,u=e+388|0,l=e+392|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Qn(e))}function bo(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Ne(n)|0,r=s?0:2,u=e+388|0,l=e+392|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Qn(e))}function gs(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+388|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function Qu(e,n){e=e|0,n=w(n);var r=0;r=e+396|0,w(C[r>>2])!=n&&(C[r>>2]=n,Qn(e))}function Tu(e){return e=e|0,w(C[e+396>>2])}function Ei(e){return e=e|0,w(C[e+400>>2])}function C0(e){return e=e|0,w(C[e+404>>2])}function Z0(e){return e=e|0,w(C[e+408>>2])}function Bo(e){return e=e|0,w(C[e+412>>2])}function la(e){return e=e|0,w(C[e+416>>2])}function $l(e){return e=e|0,w(C[e+420>>2])}function tu(e,n){switch(e=e|0,n=n|0,qu(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(C[e+424+(n<<2)>>2])}function ei(e,n){switch(e=e|0,n=n|0,qu(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(C[e+448+(n<<2)>>2])}function po(e,n){switch(e=e|0,n=n|0,qu(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(C[e+472+(n<<2)>>2])}function Bi(e,n){e=e|0,n=n|0;var r=0,u=Tt;return r=t[e+4>>2]|0,(r|0)==(t[n+4>>2]|0)?r?(u=w(C[e>>2]),e=w(Ft(w(u-w(C[n>>2]))))>2]=0,t[u+4>>2]=0,t[u+8>>2]=0,X0(u|0,e|0,n|0,0),pr(e,3,(p[u+11>>0]|0)<0?t[u>>2]|0:u,r),zL(u),m=r}function $0(e,n,r,u){e=w(e),n=w(n),r=r|0,u=u|0;var l=Tt;e=w(e*n),l=w(OE(e,w(1)));do if(Ci(l,w(0))|0)e=w(e-l);else{if(e=w(e-l),Ci(l,w(1))|0){e=w(e+w(1));break}if(r){e=w(e+w(1));break}u||(l>w(.5)?l=w(1):(u=Ci(l,w(.5))|0,l=w(u?1:0)),e=w(e+l))}while(0);return w(e/n)}function eo(e,n,r,u,l,s,h,D,S,N,M,I,K){e=e|0,n=w(n),r=r|0,u=w(u),l=l|0,s=w(s),h=h|0,D=w(D),S=w(S),N=w(N),M=w(M),I=w(I),K=K|0;var be=0,Se=Tt,ye=Tt,Je=Tt,Ge=Tt,ft=Tt,Me=Tt;return S>2]),Se!=w(0)):0)?(Je=w($0(n,Se,0,0)),Ge=w($0(u,Se,0,0)),ye=w($0(s,Se,0,0)),Se=w($0(D,Se,0,0))):(ye=s,Je=n,Se=D,Ge=u),(l|0)==(e|0)?be=Ci(ye,Je)|0:be=0,(h|0)==(r|0)?K=Ci(Se,Ge)|0:K=0,((be?0:(ft=w(n-M),!(Ce(e,ft,S)|0)))?!(et(e,ft,l,S)|0):0)?be=Ye(e,ft,l,s,S)|0:be=1,((K?0:(Me=w(u-I),!(Ce(r,Me,N)|0)))?!(et(r,Me,h,N)|0):0)?K=Ye(r,Me,h,D,N)|0:K=1,K=be&K),K|0}function Ce(e,n,r){return e=e|0,n=w(n),r=w(r),(e|0)==1?e=Ci(n,r)|0:e=0,e|0}function et(e,n,r,u){return e=e|0,n=w(n),r=r|0,u=w(u),(e|0)==2&(r|0)==0?n>=u?e=1:e=Ci(n,u)|0:e=0,e|0}function Ye(e,n,r,u,l){return e=e|0,n=w(n),r=r|0,u=w(u),l=w(l),(e|0)==2&(r|0)==2&u>n?l<=n?e=1:e=Ci(n,l)|0:e=0,e|0}function Yt(e,n,r,u,l,s,h,D,S,N,M){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=s|0,h=w(h),D=w(D),S=S|0,N=N|0,M=M|0;var I=0,K=0,be=0,Se=0,ye=Tt,Je=Tt,Ge=0,ft=0,Me=0,Pe=0,Zt=0,Br=0,In=0,gn=0,_r=0,Pr=0,Nn=0,uu=Tt,os=Tt,ls=Tt,ss=0,ea=0;Nn=m,m=m+160|0,gn=Nn+152|0,In=Nn+120|0,Br=Nn+104|0,Me=Nn+72|0,Se=Nn+56|0,Zt=Nn+8|0,ft=Nn,Pe=(t[2279]|0)+1|0,t[2279]=Pe,_r=e+984|0,((p[_r>>0]|0)!=0?(t[e+512>>2]|0)!=(t[2278]|0):0)?Ge=4:(t[e+516>>2]|0)==(u|0)?Pr=0:Ge=4,(Ge|0)==4&&(t[e+520>>2]=0,t[e+924>>2]=-1,t[e+928>>2]=-1,C[e+932>>2]=w(-1),C[e+936>>2]=w(-1),Pr=1);e:do if(t[e+964>>2]|0)if(ye=w(Kt(e,2,h)),Je=w(Kt(e,0,h)),I=e+916|0,ls=w(C[I>>2]),os=w(C[e+920>>2]),uu=w(C[e+932>>2]),eo(l,n,s,r,t[e+924>>2]|0,ls,t[e+928>>2]|0,os,uu,w(C[e+936>>2]),ye,Je,M)|0)Ge=22;else if(be=t[e+520>>2]|0,!be)Ge=21;else for(K=0;;){if(I=e+524+(K*24|0)|0,uu=w(C[I>>2]),os=w(C[e+524+(K*24|0)+4>>2]),ls=w(C[e+524+(K*24|0)+16>>2]),eo(l,n,s,r,t[e+524+(K*24|0)+8>>2]|0,uu,t[e+524+(K*24|0)+12>>2]|0,os,ls,w(C[e+524+(K*24|0)+20>>2]),ye,Je,M)|0){Ge=22;break e}if(K=K+1|0,K>>>0>=be>>>0){Ge=21;break}}else{if(S){if(I=e+916|0,!(Ci(w(C[I>>2]),n)|0)){Ge=21;break}if(!(Ci(w(C[e+920>>2]),r)|0)){Ge=21;break}if((t[e+924>>2]|0)!=(l|0)){Ge=21;break}I=(t[e+928>>2]|0)==(s|0)?I:0,Ge=22;break}if(be=t[e+520>>2]|0,!be)Ge=21;else for(K=0;;){if(I=e+524+(K*24|0)|0,((Ci(w(C[I>>2]),n)|0?Ci(w(C[e+524+(K*24|0)+4>>2]),r)|0:0)?(t[e+524+(K*24|0)+8>>2]|0)==(l|0):0)?(t[e+524+(K*24|0)+12>>2]|0)==(s|0):0){Ge=22;break e}if(K=K+1|0,K>>>0>=be>>>0){Ge=21;break}}}while(0);do if((Ge|0)==21)p[11697]|0?(I=0,Ge=28):(I=0,Ge=31);else if((Ge|0)==22){if(K=(p[11697]|0)!=0,!((I|0)!=0&(Pr^1)))if(K){Ge=28;break}else{Ge=31;break}Se=I+16|0,t[e+908>>2]=t[Se>>2],be=I+20|0,t[e+912>>2]=t[be>>2],(p[11698]|0)==0|K^1||(t[ft>>2]=Wr(Pe)|0,t[ft+4>>2]=Pe,pr(e,4,2972,ft),K=t[e+972>>2]|0,K|0&&F1[K&127](e),l=xn(l,S)|0,s=xn(s,S)|0,ea=+w(C[Se>>2]),ss=+w(C[be>>2]),t[Zt>>2]=l,t[Zt+4>>2]=s,U[Zt+8>>3]=+n,U[Zt+16>>3]=+r,U[Zt+24>>3]=ea,U[Zt+32>>3]=ss,t[Zt+40>>2]=N,pr(e,4,2989,Zt))}while(0);return(Ge|0)==28&&(K=Wr(Pe)|0,t[Se>>2]=K,t[Se+4>>2]=Pe,t[Se+8>>2]=Pr?3047:11699,pr(e,4,3038,Se),K=t[e+972>>2]|0,K|0&&F1[K&127](e),Zt=xn(l,S)|0,Ge=xn(s,S)|0,t[Me>>2]=Zt,t[Me+4>>2]=Ge,U[Me+8>>3]=+n,U[Me+16>>3]=+r,t[Me+24>>2]=N,pr(e,4,3049,Me),Ge=31),(Ge|0)==31&&(yu(e,n,r,u,l,s,h,D,S,M),p[11697]|0&&(K=t[2279]|0,Zt=Wr(K)|0,t[Br>>2]=Zt,t[Br+4>>2]=K,t[Br+8>>2]=Pr?3047:11699,pr(e,4,3083,Br),K=t[e+972>>2]|0,K|0&&F1[K&127](e),Zt=xn(l,S)|0,Br=xn(s,S)|0,ss=+w(C[e+908>>2]),ea=+w(C[e+912>>2]),t[In>>2]=Zt,t[In+4>>2]=Br,U[In+8>>3]=ss,U[In+16>>3]=ea,t[In+24>>2]=N,pr(e,4,3092,In)),t[e+516>>2]=u,I||(K=e+520|0,I=t[K>>2]|0,(I|0)==16&&(p[11697]|0&&pr(e,4,3124,gn),t[K>>2]=0,I=0),S?I=e+916|0:(t[K>>2]=I+1,I=e+524+(I*24|0)|0),C[I>>2]=n,C[I+4>>2]=r,t[I+8>>2]=l,t[I+12>>2]=s,t[I+16>>2]=t[e+908>>2],t[I+20>>2]=t[e+912>>2],I=0)),S&&(t[e+416>>2]=t[e+908>>2],t[e+420>>2]=t[e+912>>2],p[e+985>>0]=1,p[_r>>0]=0),t[2279]=(t[2279]|0)+-1,t[e+512>>2]=t[2278],m=Nn,Pr|(I|0)==0|0}function Kt(e,n,r){e=e|0,n=n|0,r=w(r);var u=Tt;return u=w(zi(e,n,r)),w(u+w(A0(e,n,r)))}function pr(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=m,m=m+16|0,l=s,t[l>>2]=u,e?u=t[e+976>>2]|0:u=0,zs(u,e,n,r,l),m=s}function Wr(e){return e=e|0,(e>>>0>60?3201:3201+(60-e)|0)|0}function xn(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;return l=m,m=m+32|0,r=l+12|0,u=l,t[r>>2]=t[254],t[r+4>>2]=t[255],t[r+8>>2]=t[256],t[u>>2]=t[257],t[u+4>>2]=t[258],t[u+8>>2]=t[259],(e|0)>2?e=11699:e=t[(n?u:r)+(e<<2)>>2]|0,m=l,e|0}function yu(e,n,r,u,l,s,h,D,S,N){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=s|0,h=w(h),D=w(D),S=S|0,N=N|0;var M=0,I=0,K=0,be=0,Se=Tt,ye=Tt,Je=Tt,Ge=Tt,ft=Tt,Me=Tt,Pe=Tt,Zt=0,Br=0,In=0,gn=Tt,_r=Tt,Pr=0,Nn=Tt,uu=0,os=0,ls=0,ss=0,ea=0,n2=0,r2=0,uf=0,i2=0,Fc=0,Pc=0,u2=0,o2=0,l2=0,vi=0,of=0,s2=0,Yf=0,a2=Tt,f2=Tt,Ic=Tt,bc=Tt,Kf=Tt,Hl=0,La=0,Ns=0,lf=0,I1=0,b1=Tt,Bc=Tt,B1=Tt,U1=Tt,ql=Tt,_l=Tt,sf=0,hu=Tt,j1=Tt,as=Tt,Xf=Tt,fs=Tt,Qf=Tt,z1=0,H1=0,Jf=Tt,Wl=Tt,af=0,q1=0,W1=0,V1=0,Sr=Tt,Bu=0,El=0,cs=0,Vl=0,Or=0,Bn=0,ff=0,mn=Tt,G1=0,f0=0;ff=m,m=m+16|0,Hl=ff+12|0,La=ff+8|0,Ns=ff+4|0,lf=ff,qu(e,(l|0)==0|(Ne(n)|0)^1,3326),qu(e,(s|0)==0|(Ne(r)|0)^1,3406),El=Cl(e,u)|0,t[e+496>>2]=El,Or=B0(2,El)|0,Bn=B0(0,El)|0,C[e+440>>2]=w(zi(e,Or,h)),C[e+444>>2]=w(A0(e,Or,h)),C[e+428>>2]=w(zi(e,Bn,h)),C[e+436>>2]=w(A0(e,Bn,h)),C[e+464>>2]=w(O0(e,Or)),C[e+468>>2]=w(ho(e,Or)),C[e+452>>2]=w(O0(e,Bn)),C[e+460>>2]=w(ho(e,Bn)),C[e+488>>2]=w(Pu(e,Or,h)),C[e+492>>2]=w(Zu(e,Or,h)),C[e+476>>2]=w(Pu(e,Bn,h)),C[e+484>>2]=w(Zu(e,Bn,h));do if(t[e+964>>2]|0)es(e,n,r,l,s,h,D);else{if(cs=e+948|0,Vl=(t[e+952>>2]|0)-(t[cs>>2]|0)>>2,!Vl){_s(e,n,r,l,s,h,D);break}if(S?0:aa(e,n,r,l,s,h,D)|0)break;ms(e),of=e+508|0,p[of>>0]=0,Or=B0(t[e+4>>2]|0,El)|0,Bn=gf(Or,El)|0,Bu=Hi(Or)|0,s2=t[e+8>>2]|0,q1=e+28|0,Yf=(t[q1>>2]|0)!=0,fs=Bu?h:D,Jf=Bu?D:h,a2=w($u(e,Or,h)),f2=w(Es(e,Or,h)),Se=w($u(e,Bn,h)),Qf=w(Rr(e,Or,h)),Wl=w(Rr(e,Bn,h)),In=Bu?l:s,af=Bu?s:l,Sr=Bu?Qf:Wl,ft=Bu?Wl:Qf,Xf=w(Kt(e,2,h)),Ge=w(Kt(e,0,h)),ye=w(w(Rn(e+364|0,h))-Sr),Je=w(w(Rn(e+380|0,h))-Sr),Me=w(w(Rn(e+372|0,D))-ft),Pe=w(w(Rn(e+388|0,D))-ft),Ic=Bu?ye:Me,bc=Bu?Je:Pe,Xf=w(n-Xf),n=w(Xf-Sr),Ne(n)|0?Sr=n:Sr=w(Ru(w(Xp(n,Je)),ye)),j1=w(r-Ge),n=w(j1-ft),Ne(n)|0?as=n:as=w(Ru(w(Xp(n,Pe)),Me)),ye=Bu?Sr:as,hu=Bu?as:Sr;e:do if((In|0)==1)for(u=0,I=0;;){if(M=Ti(e,I)|0,!u)(w(nu(M))>w(0)?w(fu(M))>w(0):0)?u=M:u=0;else if(to(M)|0){be=0;break e}if(I=I+1|0,I>>>0>=Vl>>>0){be=u;break}}else be=0;while(0);Zt=be+500|0,Br=be+504|0,u=0,M=0,n=w(0),K=0;do{if(I=t[(t[cs>>2]|0)+(K<<2)>>2]|0,(t[I+36>>2]|0)==1)Li(I),p[I+985>>0]=1,p[I+984>>0]=0;else{Jr(I),S&&x0(I,Cl(I,El)|0,ye,hu,Sr);do if((t[I+24>>2]|0)!=1)if((I|0)==(be|0)){t[Zt>>2]=t[2278],C[Br>>2]=w(0);break}else{ni(e,I,Sr,l,as,Sr,as,s,El,N);break}else M|0&&(t[M+960>>2]=I),t[I+960>>2]=0,M=I,u=(u|0)==0?I:u;while(0);_l=w(C[I+504>>2]),n=w(n+w(_l+w(Kt(I,Or,Sr))))}K=K+1|0}while((K|0)!=(Vl|0));for(ls=n>ye,sf=Yf&((In|0)==2&ls)?1:In,uu=(af|0)==1,ea=uu&(S^1),n2=(sf|0)==1,r2=(sf|0)==2,uf=976+(Or<<2)|0,i2=(af|2|0)==2,l2=uu&(Yf^1),Fc=1040+(Bn<<2)|0,Pc=1040+(Or<<2)|0,u2=976+(Bn<<2)|0,o2=(af|0)!=1,ls=Yf&((In|0)!=0&ls),os=e+976|0,uu=uu^1,n=ye,Pr=0,ss=0,_l=w(0),Kf=w(0);;){e:do if(Pr>>>0>>0)for(Br=t[cs>>2]|0,K=0,Pe=w(0),Me=w(0),Je=w(0),ye=w(0),I=0,M=0,be=Pr;;){if(Zt=t[Br+(be<<2)>>2]|0,(t[Zt+36>>2]|0)!=1?(t[Zt+940>>2]=ss,(t[Zt+24>>2]|0)!=1):0){if(Ge=w(Kt(Zt,Or,Sr)),vi=t[uf>>2]|0,r=w(Rn(Zt+380+(vi<<3)|0,fs)),ft=w(C[Zt+504>>2]),r=w(Xp(r,ft)),r=w(Ru(w(Rn(Zt+364+(vi<<3)|0,fs)),r)),Yf&(K|0)!=0&w(Ge+w(Me+r))>n){s=K,Ge=Pe,In=be;break e}Ge=w(Ge+r),r=w(Me+Ge),Ge=w(Pe+Ge),to(Zt)|0&&(Je=w(Je+w(nu(Zt))),ye=w(ye-w(ft*w(fu(Zt))))),M|0&&(t[M+960>>2]=Zt),t[Zt+960>>2]=0,K=K+1|0,M=Zt,I=(I|0)==0?Zt:I}else Ge=Pe,r=Me;if(be=be+1|0,be>>>0>>0)Pe=Ge,Me=r;else{s=K,In=be;break}}else s=0,Ge=w(0),Je=w(0),ye=w(0),I=0,In=Pr;while(0);vi=Je>w(0)&Jew(0)&yebc&((Ne(bc)|0)^1))n=bc,vi=51;else if(p[(t[os>>2]|0)+3>>0]|0)vi=51;else{if(gn!=w(0)?w(nu(e))!=w(0):0){vi=53;break}n=Ge,vi=53}while(0);if((vi|0)==51&&(vi=0,Ne(n)|0?vi=53:(_r=w(n-Ge),Nn=n)),(vi|0)==53&&(vi=0,Ge>2]|0,be=_rw(0),Me=w(_r/gn),Je=w(0),Ge=w(0),n=w(0),M=I;do r=w(Rn(M+380+(K<<3)|0,fs)),ye=w(Rn(M+364+(K<<3)|0,fs)),ye=w(Xp(r,w(Ru(ye,w(C[M+504>>2]))))),be?(r=w(ye*w(fu(M))),(r!=w(-0)?(mn=w(ye-w(ft*r)),b1=w(Kn(M,Or,mn,Nn,Sr)),mn!=b1):0)&&(Je=w(Je-w(b1-ye)),n=w(n+r))):((Zt?(Bc=w(nu(M)),Bc!=w(0)):0)?(mn=w(ye+w(Me*Bc)),B1=w(Kn(M,Or,mn,Nn,Sr)),mn!=B1):0)&&(Je=w(Je-w(B1-ye)),Ge=w(Ge-Bc)),M=t[M+960>>2]|0;while((M|0)!=0);if(n=w(Pe+n),ye=w(_r+Je),I1)n=w(0);else{ft=w(gn+Ge),be=t[uf>>2]|0,Zt=yew(0),ft=w(ye/ft),n=w(0);do{mn=w(Rn(I+380+(be<<3)|0,fs)),Je=w(Rn(I+364+(be<<3)|0,fs)),Je=w(Xp(mn,w(Ru(Je,w(C[I+504>>2]))))),Zt?(mn=w(Je*w(fu(I))),ye=w(-mn),mn!=w(-0)?(mn=w(Me*ye),ye=w(Kn(I,Or,w(Je+(Br?ye:mn)),Nn,Sr))):ye=Je):(K?(U1=w(nu(I)),U1!=w(0)):0)?ye=w(Kn(I,Or,w(Je+w(ft*U1)),Nn,Sr)):ye=Je,n=w(n-w(ye-Je)),Ge=w(Kt(I,Or,Sr)),r=w(Kt(I,Bn,Sr)),ye=w(ye+Ge),C[La>>2]=ye,t[lf>>2]=1,Je=w(C[I+396>>2]);e:do if(Ne(Je)|0){M=Ne(hu)|0;do if(!M){if(ls|(Wu(I,Bn,hu)|0|uu)||(e0(e,I)|0)!=4||(t[(_0(I,Bn)|0)+4>>2]|0)==3||(t[(E0(I,Bn)|0)+4>>2]|0)==3)break;C[Hl>>2]=hu,t[Ns>>2]=1;break e}while(0);if(Wu(I,Bn,hu)|0){M=t[I+992+(t[u2>>2]<<2)>>2]|0,mn=w(r+w(Rn(M,hu))),C[Hl>>2]=mn,M=o2&(t[M+4>>2]|0)==2,t[Ns>>2]=((Ne(mn)|0|M)^1)&1;break}else{C[Hl>>2]=hu,t[Ns>>2]=M?0:2;break}}else mn=w(ye-Ge),gn=w(mn/Je),mn=w(Je*mn),t[Ns>>2]=1,C[Hl>>2]=w(r+(Bu?gn:mn));while(0);Fn(I,Or,Nn,Sr,lf,La),Fn(I,Bn,hu,Sr,Ns,Hl);do if(Wu(I,Bn,hu)|0?0:(e0(e,I)|0)==4){if((t[(_0(I,Bn)|0)+4>>2]|0)==3){M=0;break}M=(t[(E0(I,Bn)|0)+4>>2]|0)!=3}else M=0;while(0);mn=w(C[La>>2]),gn=w(C[Hl>>2]),G1=t[lf>>2]|0,f0=t[Ns>>2]|0,Yt(I,Bu?mn:gn,Bu?gn:mn,El,Bu?G1:f0,Bu?f0:G1,Sr,as,S&(M^1),3488,N)|0,p[of>>0]=p[of>>0]|p[I+508>>0],I=t[I+960>>2]|0}while((I|0)!=0)}}else n=w(0);if(n=w(_r+n),f0=n>0]=f0|k[of>>0],r2&n>w(0)?(M=t[uf>>2]|0,((t[e+364+(M<<3)+4>>2]|0)!=0?(ql=w(Rn(e+364+(M<<3)|0,fs)),ql>=w(0)):0)?ye=w(Ru(w(0),w(ql-w(Nn-n)))):ye=w(0)):ye=n,Zt=Pr>>>0>>0,Zt){be=t[cs>>2]|0,K=Pr,M=0;do I=t[be+(K<<2)>>2]|0,t[I+24>>2]|0||(M=((t[(_0(I,Or)|0)+4>>2]|0)==3&1)+M|0,M=M+((t[(E0(I,Or)|0)+4>>2]|0)==3&1)|0),K=K+1|0;while((K|0)!=(In|0));M?(Ge=w(0),r=w(0)):vi=101}else vi=101;e:do if((vi|0)==101)switch(vi=0,s2|0){case 1:{M=0,Ge=w(ye*w(.5)),r=w(0);break e}case 2:{M=0,Ge=ye,r=w(0);break e}case 3:{if(s>>>0<=1){M=0,Ge=w(0),r=w(0);break e}r=w((s+-1|0)>>>0),M=0,Ge=w(0),r=w(w(Ru(ye,w(0)))/r);break e}case 5:{r=w(ye/w((s+1|0)>>>0)),M=0,Ge=r;break e}case 4:{r=w(ye/w(s>>>0)),M=0,Ge=w(r*w(.5));break e}default:{M=0,Ge=w(0),r=w(0);break e}}while(0);if(n=w(a2+Ge),Zt){Je=w(ye/w(M|0)),K=t[cs>>2]|0,I=Pr,ye=w(0);do{M=t[K+(I<<2)>>2]|0;e:do if((t[M+36>>2]|0)!=1){switch(t[M+24>>2]|0){case 1:{if(ae(M,Or)|0){if(!S)break e;mn=w(re(M,Or,Nn)),mn=w(mn+w(O0(e,Or))),mn=w(mn+w(zi(M,Or,Sr))),C[M+400+(t[Pc>>2]<<2)>>2]=mn;break e}break}case 0:if(f0=(t[(_0(M,Or)|0)+4>>2]|0)==3,mn=w(Je+n),n=f0?mn:n,S&&(f0=M+400+(t[Pc>>2]<<2)|0,C[f0>>2]=w(n+w(C[f0>>2]))),f0=(t[(E0(M,Or)|0)+4>>2]|0)==3,mn=w(Je+n),n=f0?mn:n,ea){mn=w(r+w(Kt(M,Or,Sr))),ye=hu,n=w(n+w(mn+w(C[M+504>>2])));break e}else{n=w(n+w(r+w(Fe(M,Or,Sr)))),ye=w(Ru(ye,w(Fe(M,Bn,Sr))));break e}default:}S&&(mn=w(Ge+w(O0(e,Or))),f0=M+400+(t[Pc>>2]<<2)|0,C[f0>>2]=w(mn+w(C[f0>>2])))}while(0);I=I+1|0}while((I|0)!=(In|0))}else ye=w(0);if(r=w(f2+n),i2?Ge=w(w(Kn(e,Bn,w(Wl+ye),Jf,h))-Wl):Ge=hu,Je=w(w(Kn(e,Bn,w(Wl+(l2?hu:ye)),Jf,h))-Wl),Zt&S){I=Pr;do{K=t[(t[cs>>2]|0)+(I<<2)>>2]|0;do if((t[K+36>>2]|0)!=1){if((t[K+24>>2]|0)==1){if(ae(K,Bn)|0){if(mn=w(re(K,Bn,hu)),mn=w(mn+w(O0(e,Bn))),mn=w(mn+w(zi(K,Bn,Sr))),M=t[Fc>>2]|0,C[K+400+(M<<2)>>2]=mn,!(Ne(mn)|0))break}else M=t[Fc>>2]|0;mn=w(O0(e,Bn)),C[K+400+(M<<2)>>2]=w(mn+w(zi(K,Bn,Sr)));break}M=e0(e,K)|0;do if((M|0)==4){if((t[(_0(K,Bn)|0)+4>>2]|0)==3){vi=139;break}if((t[(E0(K,Bn)|0)+4>>2]|0)==3){vi=139;break}if(Wu(K,Bn,hu)|0){n=Se;break}G1=t[K+908+(t[uf>>2]<<2)>>2]|0,t[Hl>>2]=G1,n=w(C[K+396>>2]),f0=Ne(n)|0,ye=(t[W>>2]=G1,w(C[W>>2])),f0?n=Je:(_r=w(Kt(K,Bn,Sr)),mn=w(ye/n),n=w(n*ye),n=w(_r+(Bu?mn:n))),C[La>>2]=n,C[Hl>>2]=w(w(Kt(K,Or,Sr))+ye),t[Ns>>2]=1,t[lf>>2]=1,Fn(K,Or,Nn,Sr,Ns,Hl),Fn(K,Bn,hu,Sr,lf,La),n=w(C[Hl>>2]),_r=w(C[La>>2]),mn=Bu?n:_r,n=Bu?_r:n,f0=((Ne(mn)|0)^1)&1,Yt(K,mn,n,El,f0,((Ne(n)|0)^1)&1,Sr,as,1,3493,N)|0,n=Se}else vi=139;while(0);e:do if((vi|0)==139){vi=0,n=w(Ge-w(Fe(K,Bn,Sr)));do if((t[(_0(K,Bn)|0)+4>>2]|0)==3){if((t[(E0(K,Bn)|0)+4>>2]|0)!=3)break;n=w(Se+w(Ru(w(0),w(n*w(.5)))));break e}while(0);if((t[(E0(K,Bn)|0)+4>>2]|0)==3){n=Se;break}if((t[(_0(K,Bn)|0)+4>>2]|0)==3){n=w(Se+w(Ru(w(0),n)));break}switch(M|0){case 1:{n=Se;break e}case 2:{n=w(Se+w(n*w(.5)));break e}default:{n=w(Se+n);break e}}}while(0);mn=w(_l+n),f0=K+400+(t[Fc>>2]<<2)|0,C[f0>>2]=w(mn+w(C[f0>>2]))}while(0);I=I+1|0}while((I|0)!=(In|0))}if(_l=w(_l+Je),Kf=w(Ru(Kf,r)),s=ss+1|0,In>>>0>=Vl>>>0)break;n=Nn,Pr=In,ss=s}do if(S){if(M=s>>>0>1,M?0:!(Ae(e)|0))break;if(!(Ne(hu)|0)){n=w(hu-_l);e:do switch(t[e+12>>2]|0){case 3:{Se=w(Se+n),Me=w(0);break}case 2:{Se=w(Se+w(n*w(.5))),Me=w(0);break}case 4:{hu>_l?Me=w(n/w(s>>>0)):Me=w(0);break}case 7:if(hu>_l){Se=w(Se+w(n/w(s<<1>>>0))),Me=w(n/w(s>>>0)),Me=M?Me:w(0);break e}else{Se=w(Se+w(n*w(.5))),Me=w(0);break e}case 6:{Me=w(n/w(ss>>>0)),Me=hu>_l&M?Me:w(0);break}default:Me=w(0)}while(0);if(s|0)for(Zt=1040+(Bn<<2)|0,Br=976+(Bn<<2)|0,be=0,I=0;;){e:do if(I>>>0>>0)for(ye=w(0),Je=w(0),n=w(0),K=I;;){M=t[(t[cs>>2]|0)+(K<<2)>>2]|0;do if((t[M+36>>2]|0)!=1?(t[M+24>>2]|0)==0:0){if((t[M+940>>2]|0)!=(be|0))break e;if(st(M,Bn)|0&&(mn=w(C[M+908+(t[Br>>2]<<2)>>2]),n=w(Ru(n,w(mn+w(Kt(M,Bn,Sr)))))),(e0(e,M)|0)!=5)break;ql=w(vt(M)),ql=w(ql+w(zi(M,0,Sr))),mn=w(C[M+912>>2]),mn=w(w(mn+w(Kt(M,0,Sr)))-ql),ql=w(Ru(Je,ql)),mn=w(Ru(ye,mn)),ye=mn,Je=ql,n=w(Ru(n,w(ql+mn)))}while(0);if(M=K+1|0,M>>>0>>0)K=M;else{K=M;break}}else Je=w(0),n=w(0),K=I;while(0);if(ft=w(Me+n),r=Se,Se=w(Se+ft),I>>>0>>0){Ge=w(r+Je),M=I;do{I=t[(t[cs>>2]|0)+(M<<2)>>2]|0;e:do if((t[I+36>>2]|0)!=1?(t[I+24>>2]|0)==0:0)switch(e0(e,I)|0){case 1:{mn=w(r+w(zi(I,Bn,Sr))),C[I+400+(t[Zt>>2]<<2)>>2]=mn;break e}case 3:{mn=w(w(Se-w(A0(I,Bn,Sr)))-w(C[I+908+(t[Br>>2]<<2)>>2])),C[I+400+(t[Zt>>2]<<2)>>2]=mn;break e}case 2:{mn=w(r+w(w(ft-w(C[I+908+(t[Br>>2]<<2)>>2]))*w(.5))),C[I+400+(t[Zt>>2]<<2)>>2]=mn;break e}case 4:{if(mn=w(r+w(zi(I,Bn,Sr))),C[I+400+(t[Zt>>2]<<2)>>2]=mn,Wu(I,Bn,hu)|0||(Bu?(ye=w(C[I+908>>2]),n=w(ye+w(Kt(I,Or,Sr))),Je=ft):(Je=w(C[I+912>>2]),Je=w(Je+w(Kt(I,Bn,Sr))),n=ft,ye=w(C[I+908>>2])),Ci(n,ye)|0?Ci(Je,w(C[I+912>>2]))|0:0))break e;Yt(I,n,Je,El,1,1,Sr,as,1,3501,N)|0;break e}case 5:{C[I+404>>2]=w(w(Ge-w(vt(I)))+w(re(I,0,hu)));break e}default:break e}while(0);M=M+1|0}while((M|0)!=(K|0))}if(be=be+1|0,(be|0)==(s|0))break;I=K}}}while(0);if(C[e+908>>2]=w(Kn(e,2,Xf,h,h)),C[e+912>>2]=w(Kn(e,0,j1,D,h)),((sf|0)!=0?(z1=t[e+32>>2]|0,H1=(sf|0)==2,!(H1&(z1|0)!=2)):0)?H1&(z1|0)==2&&(n=w(Qf+Nn),n=w(Ru(w(Xp(n,w(Qt(e,Or,Kf,fs)))),Qf)),vi=198):(n=w(Kn(e,Or,Kf,fs,h)),vi=198),(vi|0)==198&&(C[e+908+(t[976+(Or<<2)>>2]<<2)>>2]=n),((af|0)!=0?(W1=t[e+32>>2]|0,V1=(af|0)==2,!(V1&(W1|0)!=2)):0)?V1&(W1|0)==2&&(n=w(Wl+hu),n=w(Ru(w(Xp(n,w(Qt(e,Bn,w(Wl+_l),Jf)))),Wl)),vi=204):(n=w(Kn(e,Bn,w(Wl+_l),Jf,h)),vi=204),(vi|0)==204&&(C[e+908+(t[976+(Bn<<2)>>2]<<2)>>2]=n),S){if((t[q1>>2]|0)==2){I=976+(Bn<<2)|0,K=1040+(Bn<<2)|0,M=0;do be=Ti(e,M)|0,t[be+24>>2]|0||(G1=t[I>>2]|0,mn=w(C[e+908+(G1<<2)>>2]),f0=be+400+(t[K>>2]<<2)|0,mn=w(mn-w(C[f0>>2])),C[f0>>2]=w(mn-w(C[be+908+(G1<<2)>>2]))),M=M+1|0;while((M|0)!=(Vl|0))}if(u|0){M=Bu?sf:l;do On(e,u,Sr,M,as,El,N),u=t[u+960>>2]|0;while((u|0)!=0)}if(M=(Or|2|0)==3,I=(Bn|2|0)==3,M|I){u=0;do K=t[(t[cs>>2]|0)+(u<<2)>>2]|0,(t[K+36>>2]|0)!=1&&(M&&Sn(e,K,Or),I&&Sn(e,K,Bn)),u=u+1|0;while((u|0)!=(Vl|0))}}}while(0);m=ff}function Ju(e,n){e=e|0,n=w(n);var r=0;Cn(e,n>=w(0),3147),r=n==w(0),C[e+4>>2]=r?w(0):n}function ti(e,n,r,u){e=e|0,n=w(n),r=w(r),u=u|0;var l=Tt,s=Tt,h=0,D=0,S=0;t[2278]=(t[2278]|0)+1,Jr(e),Wu(e,2,n)|0?(l=w(Rn(t[e+992>>2]|0,n)),S=1,l=w(l+w(Kt(e,2,n)))):(l=w(Rn(e+380|0,n)),l>=w(0)?S=2:(S=((Ne(n)|0)^1)&1,l=n)),Wu(e,0,r)|0?(s=w(Rn(t[e+996>>2]|0,r)),D=1,s=w(s+w(Kt(e,0,n)))):(s=w(Rn(e+388|0,r)),s>=w(0)?D=2:(D=((Ne(r)|0)^1)&1,s=r)),h=e+976|0,(Yt(e,l,s,u,S,D,n,r,1,3189,t[h>>2]|0)|0?(x0(e,t[e+496>>2]|0,n,r,n),Fu(e,w(C[(t[h>>2]|0)+4>>2]),w(0),w(0)),p[11696]|0):0)&&mf(e,7)}function Jr(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0;D=m,m=m+32|0,h=D+24|0,s=D+16|0,u=D+8|0,l=D,r=0;do n=e+380+(r<<3)|0,((t[e+380+(r<<3)+4>>2]|0)!=0?(S=n,N=t[S+4>>2]|0,M=u,t[M>>2]=t[S>>2],t[M+4>>2]=N,M=e+364+(r<<3)|0,N=t[M+4>>2]|0,S=l,t[S>>2]=t[M>>2],t[S+4>>2]=N,t[s>>2]=t[u>>2],t[s+4>>2]=t[u+4>>2],t[h>>2]=t[l>>2],t[h+4>>2]=t[l+4>>2],Bi(s,h)|0):0)||(n=e+348+(r<<3)|0),t[e+992+(r<<2)>>2]=n,r=r+1|0;while((r|0)!=2);m=D}function Wu(e,n,r){e=e|0,n=n|0,r=w(r);var u=0;switch(e=t[e+992+(t[976+(n<<2)>>2]<<2)>>2]|0,t[e+4>>2]|0){case 0:case 3:{e=0;break}case 1:{w(C[e>>2])>2])>2]|0){case 2:{n=w(w(w(C[e>>2])*n)/w(100));break}case 1:{n=w(C[e>>2]);break}default:n=w(ie)}return w(n)}function x0(e,n,r,u,l){e=e|0,n=n|0,r=w(r),u=w(u),l=w(l);var s=0,h=Tt;n=t[e+944>>2]|0?n:1,s=B0(t[e+4>>2]|0,n)|0,n=gf(s,n)|0,r=w(Ar(e,s,r)),u=w(Ar(e,n,u)),h=w(r+w(zi(e,s,l))),C[e+400+(t[1040+(s<<2)>>2]<<2)>>2]=h,r=w(r+w(A0(e,s,l))),C[e+400+(t[1e3+(s<<2)>>2]<<2)>>2]=r,r=w(u+w(zi(e,n,l))),C[e+400+(t[1040+(n<<2)>>2]<<2)>>2]=r,l=w(u+w(A0(e,n,l))),C[e+400+(t[1e3+(n<<2)>>2]<<2)>>2]=l}function Fu(e,n,r,u){e=e|0,n=w(n),r=w(r),u=w(u);var l=0,s=0,h=Tt,D=Tt,S=0,N=0,M=Tt,I=0,K=Tt,be=Tt,Se=Tt,ye=Tt;if(n!=w(0)&&(l=e+400|0,ye=w(C[l>>2]),s=e+404|0,Se=w(C[s>>2]),I=e+416|0,be=w(C[I>>2]),N=e+420|0,h=w(C[N>>2]),K=w(ye+r),M=w(Se+u),u=w(K+be),D=w(M+h),S=(t[e+988>>2]|0)==1,C[l>>2]=w($0(ye,n,0,S)),C[s>>2]=w($0(Se,n,0,S)),r=w(OE(w(be*n),w(1))),Ci(r,w(0))|0?s=0:s=(Ci(r,w(1))|0)^1,r=w(OE(w(h*n),w(1))),Ci(r,w(0))|0?l=0:l=(Ci(r,w(1))|0)^1,ye=w($0(u,n,S&s,S&(s^1))),C[I>>2]=w(ye-w($0(K,n,0,S))),ye=w($0(D,n,S&l,S&(l^1))),C[N>>2]=w(ye-w($0(M,n,0,S))),s=(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2,s|0)){l=0;do Fu(Ti(e,l)|0,n,K,M),l=l+1|0;while((l|0)!=(s|0))}}function li(e,n,r,u,l){switch(e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,r|0){case 5:case 0:{e=i8(t[489]|0,u,l)|0;break}default:e=bL(u,l)|0}return e|0}function Tl(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;l=m,m=m+16|0,s=l,t[s>>2]=u,zs(e,0,n,r,s),m=l}function zs(e,n,r,u,l){if(e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,e=e|0?e:956,C8[t[e+8>>2]&1](e,n,r,u,l)|0,(r|0)==5)$n();else return}function Vu(e,n,r){e=e|0,n=n|0,r=r|0,p[e+n>>0]=r&1}function sa(e,n){e=e|0,n=n|0;var r=0,u=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,u=(t[r>>2]|0)-(t[n>>2]|0)>>2,u|0&&(Xi(e,u),Hs(e,t[n>>2]|0,t[r>>2]|0,u))}function Xi(e,n){e=e|0,n=n|0;var r=0;if((R0(e)|0)>>>0>>0&&hi(e),n>>>0>1073741823)$n();else{r=pn(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function Hs(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,u=e+4|0,e=r-n|0,(e|0)>0&&(gr(t[u>>2]|0,n|0,e|0)|0,t[u>>2]=(t[u>>2]|0)+(e>>>2<<2))}function R0(e){return e=e|0,1073741823}function zi(e,n,r){return e=e|0,n=n|0,r=w(r),(Hi(n)|0?(t[e+96>>2]|0)!=0:0)?e=e+92|0:e=dt(e+60|0,t[1040+(n<<2)>>2]|0,992)|0,w(rl(e,r))}function A0(e,n,r){return e=e|0,n=n|0,r=w(r),(Hi(n)|0?(t[e+104>>2]|0)!=0:0)?e=e+100|0:e=dt(e+60|0,t[1e3+(n<<2)>>2]|0,992)|0,w(rl(e,r))}function Hi(e){return e=e|0,(e|1|0)==3|0}function rl(e,n){return e=e|0,n=w(n),(t[e+4>>2]|0)==3?n=w(0):n=w(Rn(e,n)),w(n)}function Cl(e,n){return e=e|0,n=n|0,e=t[e>>2]|0,((e|0)==0?(n|0)>1?n:1:e)|0}function B0(e,n){e=e|0,n=n|0;var r=0;e:do if((n|0)==2){switch(e|0){case 2:{e=3;break e}case 3:break;default:{r=4;break e}}e=2}else r=4;while(0);return e|0}function O0(e,n){e=e|0,n=n|0;var r=Tt;return((Hi(n)|0?(t[e+312>>2]|0)!=0:0)?(r=w(C[e+308>>2]),r>=w(0)):0)||(r=w(Ru(w(C[(dt(e+276|0,t[1040+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function ho(e,n){e=e|0,n=n|0;var r=Tt;return((Hi(n)|0?(t[e+320>>2]|0)!=0:0)?(r=w(C[e+316>>2]),r>=w(0)):0)||(r=w(Ru(w(C[(dt(e+276|0,t[1e3+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function Pu(e,n,r){e=e|0,n=n|0,r=w(r);var u=Tt;return((Hi(n)|0?(t[e+240>>2]|0)!=0:0)?(u=w(Rn(e+236|0,r)),u>=w(0)):0)||(u=w(Ru(w(Rn(dt(e+204|0,t[1040+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(u)}function Zu(e,n,r){e=e|0,n=n|0,r=w(r);var u=Tt;return((Hi(n)|0?(t[e+248>>2]|0)!=0:0)?(u=w(Rn(e+244|0,r)),u>=w(0)):0)||(u=w(Ru(w(Rn(dt(e+204|0,t[1e3+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(u)}function es(e,n,r,u,l,s,h){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=w(s),h=w(h);var D=Tt,S=Tt,N=Tt,M=Tt,I=Tt,K=Tt,be=0,Se=0,ye=0;ye=m,m=m+16|0,be=ye,Se=e+964|0,qu(e,(t[Se>>2]|0)!=0,3519),D=w(Rr(e,2,n)),S=w(Rr(e,0,n)),N=w(Kt(e,2,n)),M=w(Kt(e,0,n)),Ne(n)|0?I=n:I=w(Ru(w(0),w(w(n-N)-D))),Ne(r)|0?K=r:K=w(Ru(w(0),w(w(r-M)-S))),(u|0)==1&(l|0)==1?(C[e+908>>2]=w(Kn(e,2,w(n-N),s,s)),n=w(Kn(e,0,w(r-M),h,s))):(x8[t[Se>>2]&1](be,e,I,u,K,l),I=w(D+w(C[be>>2])),K=w(n-N),C[e+908>>2]=w(Kn(e,2,(u|2|0)==2?I:K,s,s)),K=w(S+w(C[be+4>>2])),n=w(r-M),n=w(Kn(e,0,(l|2|0)==2?K:n,h,s))),C[e+912>>2]=n,m=ye}function _s(e,n,r,u,l,s,h){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=w(s),h=w(h);var D=Tt,S=Tt,N=Tt,M=Tt;N=w(Rr(e,2,s)),D=w(Rr(e,0,s)),M=w(Kt(e,2,s)),S=w(Kt(e,0,s)),n=w(n-M),C[e+908>>2]=w(Kn(e,2,(u|2|0)==2?N:n,s,s)),r=w(r-S),C[e+912>>2]=w(Kn(e,0,(l|2|0)==2?D:r,h,s))}function aa(e,n,r,u,l,s,h){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=w(s),h=w(h);var D=0,S=Tt,N=Tt;return D=(u|0)==2,((n<=w(0)&D?0:!(r<=w(0)&(l|0)==2))?!((u|0)==1&(l|0)==1):0)?e=0:(S=w(Kt(e,0,s)),N=w(Kt(e,2,s)),D=n>2]=w(Kn(e,2,D?w(0):n,s,s)),n=w(r-S),D=r>2]=w(Kn(e,0,D?w(0):n,h,s)),e=1),e|0}function gf(e,n){return e=e|0,n=n|0,_n(e)|0?e=B0(2,n)|0:e=0,e|0}function $u(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(Pu(e,n,r)),w(r+w(O0(e,n)))}function Es(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(Zu(e,n,r)),w(r+w(ho(e,n)))}function Rr(e,n,r){e=e|0,n=n|0,r=w(r);var u=Tt;return u=w($u(e,n,r)),w(u+w(Es(e,n,r)))}function to(e){return e=e|0,t[e+24>>2]|0?e=0:w(nu(e))!=w(0)?e=1:e=w(fu(e))!=w(0),e|0}function nu(e){e=e|0;var n=Tt;if(t[e+944>>2]|0){if(n=w(C[e+44>>2]),Ne(n)|0)return n=w(C[e+40>>2]),e=n>w(0)&((Ne(n)|0)^1),w(e?n:w(0))}else n=w(0);return w(n)}function fu(e){e=e|0;var n=Tt,r=0,u=Tt;do if(t[e+944>>2]|0){if(n=w(C[e+48>>2]),Ne(n)|0){if(r=p[(t[e+976>>2]|0)+2>>0]|0,r<<24>>24==0?(u=w(C[e+40>>2]),u>24?w(1):w(0)}}else n=w(0);while(0);return w(n)}function Li(e){e=e|0;var n=0,r=0;if(bv(e+400|0,0,540)|0,p[e+985>>0]=1,ms(e),r=Su(e)|0,r|0){n=e+948|0,e=0;do Li(t[(t[n>>2]|0)+(e<<2)>>2]|0),e=e+1|0;while((e|0)!=(r|0))}}function ni(e,n,r,u,l,s,h,D,S,N){e=e|0,n=n|0,r=w(r),u=u|0,l=w(l),s=w(s),h=w(h),D=D|0,S=S|0,N=N|0;var M=0,I=Tt,K=0,be=0,Se=Tt,ye=Tt,Je=0,Ge=Tt,ft=0,Me=Tt,Pe=0,Zt=0,Br=0,In=0,gn=0,_r=0,Pr=0,Nn=0,uu=0,os=0;uu=m,m=m+16|0,Br=uu+12|0,In=uu+8|0,gn=uu+4|0,_r=uu,Nn=B0(t[e+4>>2]|0,S)|0,Pe=Hi(Nn)|0,I=w(Rn(Tn(n)|0,Pe?s:h)),Zt=Wu(n,2,s)|0,Pr=Wu(n,0,h)|0;do if(Ne(I)|0?0:!(Ne(Pe?r:l)|0)){if(M=n+504|0,!(Ne(w(C[M>>2]))|0)&&(!(ir(t[n+976>>2]|0,0)|0)||(t[n+500>>2]|0)==(t[2278]|0)))break;C[M>>2]=w(Ru(I,w(Rr(n,Nn,s))))}else K=7;while(0);do if((K|0)==7){if(ft=Pe^1,!(ft|Zt^1)){h=w(Rn(t[n+992>>2]|0,s)),C[n+504>>2]=w(Ru(h,w(Rr(n,2,s))));break}if(!(Pe|Pr^1)){h=w(Rn(t[n+996>>2]|0,h)),C[n+504>>2]=w(Ru(h,w(Rr(n,0,s))));break}C[Br>>2]=w(ie),C[In>>2]=w(ie),t[gn>>2]=0,t[_r>>2]=0,Ge=w(Kt(n,2,s)),Me=w(Kt(n,0,s)),Zt?(Se=w(Ge+w(Rn(t[n+992>>2]|0,s))),C[Br>>2]=Se,t[gn>>2]=1,be=1):(be=0,Se=w(ie)),Pr?(I=w(Me+w(Rn(t[n+996>>2]|0,h))),C[In>>2]=I,t[_r>>2]=1,M=1):(M=0,I=w(ie)),K=t[e+32>>2]|0,Pe&(K|0)==2?K=2:(Ne(Se)|0?!(Ne(r)|0):0)&&(C[Br>>2]=r,t[gn>>2]=2,be=2,Se=r),(((K|0)==2&ft?0:Ne(I)|0)?!(Ne(l)|0):0)&&(C[In>>2]=l,t[_r>>2]=2,M=2,I=l),ye=w(C[n+396>>2]),Je=Ne(ye)|0;do if(Je)K=be;else{if((be|0)==1&ft){C[In>>2]=w(w(Se-Ge)/ye),t[_r>>2]=1,M=1,K=1;break}Pe&(M|0)==1?(C[Br>>2]=w(ye*w(I-Me)),t[gn>>2]=1,M=1,K=1):K=be}while(0);os=Ne(r)|0,be=(e0(e,n)|0)!=4,(Pe|Zt|((u|0)!=1|os)|(be|(K|0)==1)?0:(C[Br>>2]=r,t[gn>>2]=1,!Je))&&(C[In>>2]=w(w(r-Ge)/ye),t[_r>>2]=1,M=1),(Pr|ft|((D|0)!=1|(Ne(l)|0))|(be|(M|0)==1)?0:(C[In>>2]=l,t[_r>>2]=1,!Je))&&(C[Br>>2]=w(ye*w(l-Me)),t[gn>>2]=1),Fn(n,2,s,s,gn,Br),Fn(n,0,h,s,_r,In),r=w(C[Br>>2]),l=w(C[In>>2]),Yt(n,r,l,S,t[gn>>2]|0,t[_r>>2]|0,s,h,0,3565,N)|0,h=w(C[n+908+(t[976+(Nn<<2)>>2]<<2)>>2]),C[n+504>>2]=w(Ru(h,w(Rr(n,Nn,s))))}while(0);t[n+500>>2]=t[2278],m=uu}function Kn(e,n,r,u,l){return e=e|0,n=n|0,r=w(r),u=w(u),l=w(l),u=w(Qt(e,n,r,u)),w(Ru(u,w(Rr(e,n,l))))}function e0(e,n){return e=e|0,n=n|0,n=n+20|0,n=t[((t[n>>2]|0)==0?e+16|0:n)>>2]|0,((n|0)==5?_n(t[e+4>>2]|0)|0:0)&&(n=1),n|0}function _0(e,n){return e=e|0,n=n|0,(Hi(n)|0?(t[e+96>>2]|0)!=0:0)?n=4:n=t[1040+(n<<2)>>2]|0,e+60+(n<<3)|0}function E0(e,n){return e=e|0,n=n|0,(Hi(n)|0?(t[e+104>>2]|0)!=0:0)?n=5:n=t[1e3+(n<<2)>>2]|0,e+60+(n<<3)|0}function Fn(e,n,r,u,l,s){switch(e=e|0,n=n|0,r=w(r),u=w(u),l=l|0,s=s|0,r=w(Rn(e+380+(t[976+(n<<2)>>2]<<3)|0,r)),r=w(r+w(Kt(e,n,u))),t[l>>2]|0){case 2:case 1:{l=Ne(r)|0,u=w(C[s>>2]),C[s>>2]=l|u>2]=2,C[s>>2]=r);break}default:}}function ae(e,n){return e=e|0,n=n|0,e=e+132|0,(Hi(n)|0?(t[(dt(e,4,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(dt(e,t[1040+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function re(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0;return e=e+132|0,(Hi(n)|0?(u=dt(e,4,948)|0,(t[u+4>>2]|0)!=0):0)?l=4:(u=dt(e,t[1040+(n<<2)>>2]|0,948)|0,t[u+4>>2]|0?l=4:r=w(0)),(l|0)==4&&(r=w(Rn(u,r))),w(r)}function Fe(e,n,r){e=e|0,n=n|0,r=w(r);var u=Tt;return u=w(C[e+908+(t[976+(n<<2)>>2]<<2)>>2]),u=w(u+w(zi(e,n,r))),w(u+w(A0(e,n,r)))}function Ae(e){e=e|0;var n=0,r=0,u=0;e:do if(_n(t[e+4>>2]|0)|0)n=0;else if((t[e+16>>2]|0)!=5)if(r=Su(e)|0,!r)n=0;else for(n=0;;){if(u=Ti(e,n)|0,(t[u+24>>2]|0)==0?(t[u+20>>2]|0)==5:0){n=1;break e}if(n=n+1|0,n>>>0>=r>>>0){n=0;break}}else n=1;while(0);return n|0}function st(e,n){e=e|0,n=n|0;var r=Tt;return r=w(C[e+908+(t[976+(n<<2)>>2]<<2)>>2]),r>=w(0)&((Ne(r)|0)^1)|0}function vt(e){e=e|0;var n=Tt,r=0,u=0,l=0,s=0,h=0,D=0,S=Tt;if(r=t[e+968>>2]|0,r)S=w(C[e+908>>2]),n=w(C[e+912>>2]),n=w(D8[r&0](e,S,n)),qu(e,(Ne(n)|0)^1,3573);else{s=Su(e)|0;do if(s|0){for(r=0,l=0;;){if(u=Ti(e,l)|0,t[u+940>>2]|0){h=8;break}if((t[u+24>>2]|0)!=1)if(D=(e0(e,u)|0)==5,D){r=u;break}else r=(r|0)==0?u:r;if(l=l+1|0,l>>>0>=s>>>0){h=8;break}}if((h|0)==8&&!r)break;return n=w(vt(r)),w(n+w(C[r+404>>2]))}while(0);n=w(C[e+912>>2])}return w(n)}function Qt(e,n,r,u){e=e|0,n=n|0,r=w(r),u=w(u);var l=Tt,s=0;return _n(n)|0?(n=1,s=3):Hi(n)|0?(n=0,s=3):(u=w(ie),l=w(ie)),(s|0)==3&&(l=w(Rn(e+364+(n<<3)|0,u)),u=w(Rn(e+380+(n<<3)|0,u))),s=u=w(0)&((Ne(u)|0)^1)),r=s?u:r,s=l>=w(0)&((Ne(l)|0)^1)&r>2]|0,s)|0,Se=gf(Je,s)|0,ye=Hi(Je)|0,I=w(Kt(n,2,r)),K=w(Kt(n,0,r)),Wu(n,2,r)|0?D=w(I+w(Rn(t[n+992>>2]|0,r))):(ae(n,2)|0?Bt(n,2)|0:0)?(D=w(C[e+908>>2]),S=w(O0(e,2)),S=w(D-w(S+w(ho(e,2)))),D=w(re(n,2,r)),D=w(Kn(n,2,w(S-w(D+w(Fi(n,2,r)))),r,r))):D=w(ie),Wu(n,0,l)|0?S=w(K+w(Rn(t[n+996>>2]|0,l))):(ae(n,0)|0?Bt(n,0)|0:0)?(S=w(C[e+912>>2]),ft=w(O0(e,0)),ft=w(S-w(ft+w(ho(e,0)))),S=w(re(n,0,l)),S=w(Kn(n,0,w(ft-w(S+w(Fi(n,0,l)))),l,r))):S=w(ie),N=Ne(D)|0,M=Ne(S)|0;do if(N^M?(be=w(C[n+396>>2]),!(Ne(be)|0)):0)if(N){D=w(I+w(w(S-K)*be));break}else{ft=w(K+w(w(D-I)/be)),S=M?ft:S;break}while(0);M=Ne(D)|0,N=Ne(S)|0,M|N&&(Me=(M^1)&1,u=r>w(0)&((u|0)!=0&M),D=ye?D:u?r:D,Yt(n,D,S,s,ye?Me:u?2:Me,M&(N^1)&1,D,S,0,3623,h)|0,D=w(C[n+908>>2]),D=w(D+w(Kt(n,2,r))),S=w(C[n+912>>2]),S=w(S+w(Kt(n,0,r)))),Yt(n,D,S,s,1,1,D,S,1,3635,h)|0,(Bt(n,Je)|0?!(ae(n,Je)|0):0)?(Me=t[976+(Je<<2)>>2]|0,ft=w(C[e+908+(Me<<2)>>2]),ft=w(ft-w(C[n+908+(Me<<2)>>2])),ft=w(ft-w(ho(e,Je))),ft=w(ft-w(A0(n,Je,r))),ft=w(ft-w(Fi(n,Je,ye?r:l))),C[n+400+(t[1040+(Je<<2)>>2]<<2)>>2]=ft):Ge=21;do if((Ge|0)==21){if(ae(n,Je)|0?0:(t[e+8>>2]|0)==1){Me=t[976+(Je<<2)>>2]|0,ft=w(C[e+908+(Me<<2)>>2]),ft=w(w(ft-w(C[n+908+(Me<<2)>>2]))*w(.5)),C[n+400+(t[1040+(Je<<2)>>2]<<2)>>2]=ft;break}(ae(n,Je)|0?0:(t[e+8>>2]|0)==2)&&(Me=t[976+(Je<<2)>>2]|0,ft=w(C[e+908+(Me<<2)>>2]),ft=w(ft-w(C[n+908+(Me<<2)>>2])),C[n+400+(t[1040+(Je<<2)>>2]<<2)>>2]=ft)}while(0);(Bt(n,Se)|0?!(ae(n,Se)|0):0)?(Me=t[976+(Se<<2)>>2]|0,ft=w(C[e+908+(Me<<2)>>2]),ft=w(ft-w(C[n+908+(Me<<2)>>2])),ft=w(ft-w(ho(e,Se))),ft=w(ft-w(A0(n,Se,r))),ft=w(ft-w(Fi(n,Se,ye?l:r))),C[n+400+(t[1040+(Se<<2)>>2]<<2)>>2]=ft):Ge=30;do if((Ge|0)==30?!(ae(n,Se)|0):0){if((e0(e,n)|0)==2){Me=t[976+(Se<<2)>>2]|0,ft=w(C[e+908+(Me<<2)>>2]),ft=w(w(ft-w(C[n+908+(Me<<2)>>2]))*w(.5)),C[n+400+(t[1040+(Se<<2)>>2]<<2)>>2]=ft;break}Me=(e0(e,n)|0)==3,Me^(t[e+28>>2]|0)==2&&(Me=t[976+(Se<<2)>>2]|0,ft=w(C[e+908+(Me<<2)>>2]),ft=w(ft-w(C[n+908+(Me<<2)>>2])),C[n+400+(t[1040+(Se<<2)>>2]<<2)>>2]=ft)}while(0)}function Sn(e,n,r){e=e|0,n=n|0,r=r|0;var u=Tt,l=0;l=t[976+(r<<2)>>2]|0,u=w(C[n+908+(l<<2)>>2]),u=w(w(C[e+908+(l<<2)>>2])-u),u=w(u-w(C[n+400+(t[1040+(r<<2)>>2]<<2)>>2])),C[n+400+(t[1e3+(r<<2)>>2]<<2)>>2]=u}function _n(e){return e=e|0,(e|1|0)==1|0}function Tn(e){e=e|0;var n=Tt;switch(t[e+56>>2]|0){case 0:case 3:{n=w(C[e+40>>2]),n>w(0)&((Ne(n)|0)^1)?e=p[(t[e+976>>2]|0)+2>>0]|0?1056:992:e=1056;break}default:e=e+52|0}return e|0}function ir(e,n){return e=e|0,n=n|0,(p[e+n>>0]|0)!=0|0}function Bt(e,n){return e=e|0,n=n|0,e=e+132|0,(Hi(n)|0?(t[(dt(e,5,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(dt(e,t[1e3+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function Fi(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0;return e=e+132|0,(Hi(n)|0?(u=dt(e,5,948)|0,(t[u+4>>2]|0)!=0):0)?l=4:(u=dt(e,t[1e3+(n<<2)>>2]|0,948)|0,t[u+4>>2]|0?l=4:r=w(0)),(l|0)==4&&(r=w(Rn(u,r))),w(r)}function Ar(e,n,r){return e=e|0,n=n|0,r=w(r),ae(e,n)|0?r=w(re(e,n,r)):r=w(-w(Fi(e,n,r))),w(r)}function mr(e){return e=w(e),C[W>>2]=e,t[W>>2]|0|0}function Y(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>1073741823)$n();else{l=pn(n<<2)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<2)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<2)}function ri(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>2)<<2)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function ii(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&_t(e)}function Vr(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;if(h=e+4|0,D=t[h>>2]|0,l=D-u|0,s=l>>2,e=n+(s<<2)|0,e>>>0>>0){u=D;do t[u>>2]=t[e>>2],e=e+4|0,u=(t[h>>2]|0)+4|0,t[h>>2]=u;while(e>>>0>>0)}s|0&&Ty(D+(0-s<<2)|0,n|0,l|0)|0}function at(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0;return D=n+4|0,S=t[D>>2]|0,l=t[e>>2]|0,h=r,s=h-l|0,u=S+(0-(s>>2)<<2)|0,t[D>>2]=u,(s|0)>0&&gr(u|0,l|0,s|0)|0,l=e+4|0,s=n+8|0,u=(t[l>>2]|0)-h|0,(u|0)>0&&(gr(t[s>>2]|0,r|0,u|0)|0,t[s>>2]=(t[s>>2]|0)+(u>>>2<<2)),h=t[e>>2]|0,t[e>>2]=t[D>>2],t[D>>2]=h,h=t[l>>2]|0,t[l>>2]=t[s>>2],t[s>>2]=h,h=e+8|0,r=n+12|0,e=t[h>>2]|0,t[h>>2]=t[r>>2],t[r>>2]=e,t[n>>2]=t[D>>2],S|0}function Di(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;if(h=t[n>>2]|0,s=t[r>>2]|0,(h|0)!=(s|0)){l=e+8|0,r=((s+-4-h|0)>>>2)+1|0,e=h,u=t[l>>2]|0;do t[u>>2]=t[e>>2],u=(t[l>>2]|0)+4|0,t[l>>2]=u,e=e+4|0;while((e|0)!=(s|0));t[n>>2]=h+(r<<2)}}function ru(){we()}function D0(){var e=0;return e=pn(4)|0,Un(e),e|0}function Un(e){e=e|0,t[e>>2]=m0()|0}function t0(e){e=e|0,e|0&&(no(e),_t(e))}function no(e){e=e|0,Q0(t[e>>2]|0)}function vo(e,n,r){e=e|0,n=n|0,r=r|0,Vu(t[e>>2]|0,n,r)}function n0(e,n){e=e|0,n=w(n),Ju(t[e>>2]|0,n)}function Uo(e,n){return e=e|0,n=n|0,ir(t[e>>2]|0,n)|0}function ro(){var e=0;return e=pn(8)|0,Ba(e,0),e|0}function Ba(e,n){e=e|0,n=n|0,n?n=Yn(t[n>>2]|0)|0:n=cr()|0,t[e>>2]=n,t[e+4>>2]=0,ba(n,e)}function _f(e){e=e|0;var n=0;return n=pn(8)|0,Ba(n,e),n|0}function fc(e){e=e|0,e|0&&(Ds(e),_t(e))}function Ds(e){e=e|0;var n=0;zu(t[e>>2]|0),n=e+4|0,e=t[n>>2]|0,t[n>>2]=0,e|0&&(fa(e),_t(e))}function fa(e){e=e|0,U0(e)}function U0(e){e=e|0,e=t[e>>2]|0,e|0&&qr(e|0)}function cc(e){return e=e|0,Bs(e)|0}function Ua(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(fa(n),_t(n)),co(t[e>>2]|0)}function E2(e,n){e=e|0,n=n|0,oa(t[e>>2]|0,t[n>>2]|0)}function nd(e,n){e=e|0,n=n|0,Z(t[e>>2]|0,n)}function rd(e,n,r){e=e|0,n=n|0,r=+r,dr(t[e>>2]|0,n,w(r))}function mo(e,n,r){e=e|0,n=n|0,r=+r,er(t[e>>2]|0,n,w(r))}function Hc(e,n){e=e|0,n=n|0,z(t[e>>2]|0,n)}function xl(e,n){e=e|0,n=n|0,$(t[e>>2]|0,n)}function il(e,n){e=e|0,n=n|0,ge(t[e>>2]|0,n)}function D2(e,n){e=e|0,n=n|0,y0(t[e>>2]|0,n)}function qs(e,n){e=e|0,n=n|0,Qe(t[e>>2]|0,n)}function Rl(e,n){e=e|0,n=n|0,ji(t[e>>2]|0,n)}function id(e,n,r){e=e|0,n=n|0,r=+r,An(t[e>>2]|0,n,w(r))}function jo(e,n,r){e=e|0,n=n|0,r=+r,Nr(t[e>>2]|0,n,w(r))}function ja(e,n){e=e|0,n=n|0,Lr(t[e>>2]|0,n)}function za(e,n){e=e|0,n=n|0,ue(t[e>>2]|0,n)}function Ha(e,n){e=e|0,n=n|0,nt(t[e>>2]|0,n)}function ca(e,n){e=e|0,n=+n,Mt(t[e>>2]|0,w(n))}function ws(e,n){e=e|0,n=+n,rn(t[e>>2]|0,w(n))}function Ss(e,n){e=e|0,n=+n,Lt(t[e>>2]|0,w(n))}function ts(e,n){e=e|0,n=+n,It(t[e>>2]|0,w(n))}function zo(e,n){e=e|0,n=+n,sn(t[e>>2]|0,w(n))}function Ef(e,n){e=e|0,n=+n,fn(t[e>>2]|0,w(n))}function ul(e,n){e=e|0,n=+n,Jn(t[e>>2]|0,w(n))}function Gu(e){e=e|0,wr(t[e>>2]|0)}function qa(e,n){e=e|0,n=+n,Nu(t[e>>2]|0,w(n))}function r0(e,n){e=e|0,n=+n,T0(t[e>>2]|0,w(n))}function j0(e){e=e|0,J0(t[e>>2]|0)}function Df(e,n){e=e|0,n=+n,_i(t[e>>2]|0,w(n))}function qc(e,n){e=e|0,n=+n,Fo(t[e>>2]|0,w(n))}function dc(e,n){e=e|0,n=+n,hf(t[e>>2]|0,w(n))}function Al(e,n){e=e|0,n=+n,Sl(t[e>>2]|0,w(n))}function Ts(e,n){e=e|0,n=+n,Po(t[e>>2]|0,w(n))}function da(e,n){e=e|0,n=+n,ys(t[e>>2]|0,w(n))}function ud(e,n){e=e|0,n=+n,Io(t[e>>2]|0,w(n))}function pa(e,n){e=e|0,n=+n,bo(t[e>>2]|0,w(n))}function pc(e,n){e=e|0,n=+n,Qu(t[e>>2]|0,w(n))}function Wc(e,n,r){e=e|0,n=n|0,r=+r,Pt(t[e>>2]|0,n,w(r))}function qi(e,n,r){e=e|0,n=n|0,r=+r,it(t[e>>2]|0,n,w(r))}function g(e,n,r){e=e|0,n=n|0,r=+r,Dt(t[e>>2]|0,n,w(r))}function y(e){return e=e|0,ke(t[e>>2]|0)|0}function R(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;u=m,m=m+16|0,l=u,Cr(l,t[n>>2]|0,r),F(e,l),m=u}function F(e,n){e=e|0,n=n|0,b(e,t[n+4>>2]|0,+w(C[n>>2]))}function b(e,n,r){e=e|0,n=n|0,r=+r,t[e>>2]=n,U[e+8>>3]=r}function J(e){return e=e|0,G(t[e>>2]|0)|0}function ce(e){return e=e|0,Te(t[e>>2]|0)|0}function mt(e){return e=e|0,Re(t[e>>2]|0)|0}function xt(e){return e=e|0,Us(t[e>>2]|0)|0}function kt(e){return e=e|0,ht(t[e>>2]|0)|0}function xr(e){return e=e|0,B(t[e>>2]|0)|0}function i0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;u=m,m=m+16|0,l=u,g0(l,t[n>>2]|0,r),F(e,l),m=u}function cu(e){return e=e|0,He(t[e>>2]|0)|0}function z0(e){return e=e|0,Ct(t[e>>2]|0)|0}function Ol(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,Dn(u,t[n>>2]|0),F(e,u),m=r}function u0(e){return e=e|0,+ +w(pf(t[e>>2]|0))}function Ve(e){return e=e|0,+ +w(bs(t[e>>2]|0))}function Ue(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,au(u,t[n>>2]|0),F(e,u),m=r}function lt(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,Lu(u,t[n>>2]|0),F(e,u),m=r}function $t(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,nl(u,t[n>>2]|0),F(e,u),m=r}function Wn(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,vf(u,t[n>>2]|0),F(e,u),m=r}function si(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,js(u,t[n>>2]|0),F(e,u),m=r}function ur(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,gs(u,t[n>>2]|0),F(e,u),m=r}function ci(e){return e=e|0,+ +w(Tu(t[e>>2]|0))}function Qi(e,n){return e=e|0,n=n|0,+ +w(un(t[e>>2]|0,n))}function Gr(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;u=m,m=m+16|0,l=u,$e(l,t[n>>2]|0,r),F(e,l),m=u}function Cu(e,n,r){e=e|0,n=n|0,r=r|0,Ia(t[e>>2]|0,t[n>>2]|0,r)}function Wa(e,n){e=e|0,n=n|0,ku(t[e>>2]|0,t[n>>2]|0)}function Va(e){return e=e|0,Su(t[e>>2]|0)|0}function od(e){return e=e|0,e=fi(t[e>>2]|0)|0,e?e=cc(e)|0:e=0,e|0}function w2(e,n){return e=e|0,n=n|0,e=Ti(t[e>>2]|0,n)|0,e?e=cc(e)|0:e=0,e|0}function S2(e,n){e=e|0,n=n|0;var r=0,u=0;u=pn(4)|0,wf(u,n),r=e+4|0,n=t[r>>2]|0,t[r>>2]=u,n|0&&(fa(n),_t(n)),ua(t[e>>2]|0,1)}function wf(e,n){e=e|0,n=n|0,ll(e,n)}function ld(e,n,r,u,l,s){e=e|0,n=n|0,r=w(r),u=u|0,l=w(l),s=s|0;var h=0,D=0;h=m,m=m+16|0,D=h,ch(D,Bs(n)|0,+r,u,+l,s),C[e>>2]=w(+U[D>>3]),C[e+4>>2]=w(+U[D+8>>3]),m=h}function ch(e,n,r,u,l,s){e=e|0,n=n|0,r=+r,u=u|0,l=+l,s=s|0;var h=0,D=0,S=0,N=0,M=0;h=m,m=m+32|0,M=h+8|0,N=h+20|0,S=h,D=h+16|0,U[M>>3]=r,t[N>>2]=u,U[S>>3]=l,t[D>>2]=s,Vc(e,t[n+4>>2]|0,M,N,S,D),m=h}function Vc(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0;h=m,m=m+16|0,D=h,Ma(D),n=yo(n)|0,dh(e,n,+U[r>>3],t[u>>2]|0,+U[l>>3],t[s>>2]|0),ka(D),m=h}function yo(e){return e=e|0,t[e>>2]|0}function dh(e,n,r,u,l,s){e=e|0,n=n|0,r=+r,u=u|0,l=+l,s=s|0;var h=0;h=go(ph()|0)|0,r=+Ml(r),u=sd(u)|0,l=+Ml(l),ad(e,Qr(0,h|0,n|0,+r,u|0,+l,sd(s)|0)|0)}function ph(){var e=0;return p[7608]|0||(Yc(9120),e=7608,t[e>>2]=1,t[e+4>>2]=0),9120}function go(e){return e=e|0,t[e+8>>2]|0}function Ml(e){return e=+e,+ +Ga(e)}function sd(e){return e=e|0,cd(e)|0}function ad(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;l=m,m=m+32|0,r=l,u=n,u&1?(T2(r,0),eu(u|0,r|0)|0,Gc(e,r),Ir(r)):(t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]),m=l}function T2(e,n){e=e|0,n=n|0,fd(e,n),t[e+8>>2]=0,p[e+24>>0]=0}function Gc(e,n){e=e|0,n=n|0,n=n+8|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]}function Ir(e){e=e|0,p[e+24>>0]=0}function fd(e,n){e=e|0,n=n|0,t[e>>2]=n}function cd(e){return e=e|0,e|0}function Ga(e){return e=+e,+e}function Yc(e){e=e|0,ol(e,C2()|0,4)}function C2(){return 1064}function ol(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=bt(n|0,r+1|0)|0}function ll(e,n){e=e|0,n=n|0,n=t[n>>2]|0,t[e>>2]=n,Ri(n|0)}function hh(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(fa(n),_t(n)),ua(t[e>>2]|0,0)}function Sf(e){e=e|0,$r(t[e>>2]|0)}function Kc(e){return e=e|0,Zl(t[e>>2]|0)|0}function x2(e,n,r,u){e=e|0,n=+n,r=+r,u=u|0,ti(t[e>>2]|0,w(n),w(r),u)}function vh(e){return e=e|0,+ +w(Ei(t[e>>2]|0))}function sl(e){return e=e|0,+ +w(Z0(t[e>>2]|0))}function ha(e){return e=e|0,+ +w(C0(t[e>>2]|0))}function R2(e){return e=e|0,+ +w(Bo(t[e>>2]|0))}function A2(e){return e=e|0,+ +w(la(t[e>>2]|0))}function hc(e){return e=e|0,+ +w($l(t[e>>2]|0))}function mh(e,n){e=e|0,n=n|0,U[e>>3]=+w(Ei(t[n>>2]|0)),U[e+8>>3]=+w(Z0(t[n>>2]|0)),U[e+16>>3]=+w(C0(t[n>>2]|0)),U[e+24>>3]=+w(Bo(t[n>>2]|0)),U[e+32>>3]=+w(la(t[n>>2]|0)),U[e+40>>3]=+w($l(t[n>>2]|0))}function O2(e,n){return e=e|0,n=n|0,+ +w(tu(t[e>>2]|0,n))}function dd(e,n){return e=e|0,n=n|0,+ +w(ei(t[e>>2]|0,n))}function Xc(e,n){return e=e|0,n=n|0,+ +w(po(t[e>>2]|0,n))}function Qc(){return Pa()|0}function Ws(){M2(),va(),Jc(),vc(),mc(),pd()}function M2(){S7(11713,4938,1)}function va(){HA(10448)}function Jc(){SA(10408)}function vc(){GR(10324)}function mc(){$4(10096)}function pd(){yh(9132)}function yh(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0,be=0,Se=0,ye=0,Je=0,Ge=0,ft=0,Me=0,Pe=0,Zt=0,Br=0,In=0,gn=0,_r=0,Pr=0,Nn=0,uu=0,os=0,ls=0,ss=0,ea=0,n2=0,r2=0,uf=0,i2=0,Fc=0,Pc=0,u2=0,o2=0,l2=0,vi=0,of=0,s2=0,Yf=0,a2=0,f2=0,Ic=0,bc=0,Kf=0,Hl=0,La=0,Ns=0,lf=0,I1=0,b1=0,Bc=0,B1=0,U1=0,ql=0,_l=0,sf=0,hu=0,j1=0,as=0,Xf=0,fs=0,Qf=0,z1=0,H1=0,Jf=0,Wl=0,af=0,q1=0,W1=0,V1=0,Sr=0,Bu=0,El=0,cs=0,Vl=0,Or=0,Bn=0,ff=0;n=m,m=m+672|0,r=n+656|0,ff=n+648|0,Bn=n+640|0,Or=n+632|0,Vl=n+624|0,cs=n+616|0,El=n+608|0,Bu=n+600|0,Sr=n+592|0,V1=n+584|0,W1=n+576|0,q1=n+568|0,af=n+560|0,Wl=n+552|0,Jf=n+544|0,H1=n+536|0,z1=n+528|0,Qf=n+520|0,fs=n+512|0,Xf=n+504|0,as=n+496|0,j1=n+488|0,hu=n+480|0,sf=n+472|0,_l=n+464|0,ql=n+456|0,U1=n+448|0,B1=n+440|0,Bc=n+432|0,b1=n+424|0,I1=n+416|0,lf=n+408|0,Ns=n+400|0,La=n+392|0,Hl=n+384|0,Kf=n+376|0,bc=n+368|0,Ic=n+360|0,f2=n+352|0,a2=n+344|0,Yf=n+336|0,s2=n+328|0,of=n+320|0,vi=n+312|0,l2=n+304|0,o2=n+296|0,u2=n+288|0,Pc=n+280|0,Fc=n+272|0,i2=n+264|0,uf=n+256|0,r2=n+248|0,n2=n+240|0,ea=n+232|0,ss=n+224|0,ls=n+216|0,os=n+208|0,uu=n+200|0,Nn=n+192|0,Pr=n+184|0,_r=n+176|0,gn=n+168|0,In=n+160|0,Br=n+152|0,Zt=n+144|0,Pe=n+136|0,Me=n+128|0,ft=n+120|0,Ge=n+112|0,Je=n+104|0,ye=n+96|0,Se=n+88|0,be=n+80|0,K=n+72|0,I=n+64|0,M=n+56|0,N=n+48|0,S=n+40|0,D=n+32|0,h=n+24|0,s=n+16|0,l=n+8|0,u=n,Tf(e,3646),Zc(e,3651,2)|0,gh(e,3665,2)|0,nm(e,3682,18)|0,t[ff>>2]=19,t[ff+4>>2]=0,t[r>>2]=t[ff>>2],t[r+4>>2]=t[ff+4>>2],Vs(e,3690,r)|0,t[Bn>>2]=1,t[Bn+4>>2]=0,t[r>>2]=t[Bn>>2],t[r+4>>2]=t[Bn+4>>2],ma(e,3696,r)|0,t[Or>>2]=2,t[Or+4>>2]=0,t[r>>2]=t[Or>>2],t[r+4>>2]=t[Or+4>>2],iu(e,3706,r)|0,t[Vl>>2]=1,t[Vl+4>>2]=0,t[r>>2]=t[Vl>>2],t[r+4>>2]=t[Vl+4>>2],M0(e,3722,r)|0,t[cs>>2]=2,t[cs+4>>2]=0,t[r>>2]=t[cs>>2],t[r+4>>2]=t[cs+4>>2],M0(e,3734,r)|0,t[El>>2]=3,t[El+4>>2]=0,t[r>>2]=t[El>>2],t[r+4>>2]=t[El+4>>2],iu(e,3753,r)|0,t[Bu>>2]=4,t[Bu+4>>2]=0,t[r>>2]=t[Bu>>2],t[r+4>>2]=t[Bu+4>>2],iu(e,3769,r)|0,t[Sr>>2]=5,t[Sr+4>>2]=0,t[r>>2]=t[Sr>>2],t[r+4>>2]=t[Sr+4>>2],iu(e,3783,r)|0,t[V1>>2]=6,t[V1+4>>2]=0,t[r>>2]=t[V1>>2],t[r+4>>2]=t[V1+4>>2],iu(e,3796,r)|0,t[W1>>2]=7,t[W1+4>>2]=0,t[r>>2]=t[W1>>2],t[r+4>>2]=t[W1+4>>2],iu(e,3813,r)|0,t[q1>>2]=8,t[q1+4>>2]=0,t[r>>2]=t[q1>>2],t[r+4>>2]=t[q1+4>>2],iu(e,3825,r)|0,t[af>>2]=3,t[af+4>>2]=0,t[r>>2]=t[af>>2],t[r+4>>2]=t[af+4>>2],M0(e,3843,r)|0,t[Wl>>2]=4,t[Wl+4>>2]=0,t[r>>2]=t[Wl>>2],t[r+4>>2]=t[Wl+4>>2],M0(e,3853,r)|0,t[Jf>>2]=9,t[Jf+4>>2]=0,t[r>>2]=t[Jf>>2],t[r+4>>2]=t[Jf+4>>2],iu(e,3870,r)|0,t[H1>>2]=10,t[H1+4>>2]=0,t[r>>2]=t[H1>>2],t[r+4>>2]=t[H1+4>>2],iu(e,3884,r)|0,t[z1>>2]=11,t[z1+4>>2]=0,t[r>>2]=t[z1>>2],t[r+4>>2]=t[z1+4>>2],iu(e,3896,r)|0,t[Qf>>2]=1,t[Qf+4>>2]=0,t[r>>2]=t[Qf>>2],t[r+4>>2]=t[Qf+4>>2],o0(e,3907,r)|0,t[fs>>2]=2,t[fs+4>>2]=0,t[r>>2]=t[fs>>2],t[r+4>>2]=t[fs+4>>2],o0(e,3915,r)|0,t[Xf>>2]=3,t[Xf+4>>2]=0,t[r>>2]=t[Xf>>2],t[r+4>>2]=t[Xf+4>>2],o0(e,3928,r)|0,t[as>>2]=4,t[as+4>>2]=0,t[r>>2]=t[as>>2],t[r+4>>2]=t[as+4>>2],o0(e,3948,r)|0,t[j1>>2]=5,t[j1+4>>2]=0,t[r>>2]=t[j1>>2],t[r+4>>2]=t[j1+4>>2],o0(e,3960,r)|0,t[hu>>2]=6,t[hu+4>>2]=0,t[r>>2]=t[hu>>2],t[r+4>>2]=t[hu+4>>2],o0(e,3974,r)|0,t[sf>>2]=7,t[sf+4>>2]=0,t[r>>2]=t[sf>>2],t[r+4>>2]=t[sf+4>>2],o0(e,3983,r)|0,t[_l>>2]=20,t[_l+4>>2]=0,t[r>>2]=t[_l>>2],t[r+4>>2]=t[_l+4>>2],Vs(e,3999,r)|0,t[ql>>2]=8,t[ql+4>>2]=0,t[r>>2]=t[ql>>2],t[r+4>>2]=t[ql+4>>2],o0(e,4012,r)|0,t[U1>>2]=9,t[U1+4>>2]=0,t[r>>2]=t[U1>>2],t[r+4>>2]=t[U1+4>>2],o0(e,4022,r)|0,t[B1>>2]=21,t[B1+4>>2]=0,t[r>>2]=t[B1>>2],t[r+4>>2]=t[B1+4>>2],Vs(e,4039,r)|0,t[Bc>>2]=10,t[Bc+4>>2]=0,t[r>>2]=t[Bc>>2],t[r+4>>2]=t[Bc+4>>2],o0(e,4053,r)|0,t[b1>>2]=11,t[b1+4>>2]=0,t[r>>2]=t[b1>>2],t[r+4>>2]=t[b1+4>>2],o0(e,4065,r)|0,t[I1>>2]=12,t[I1+4>>2]=0,t[r>>2]=t[I1>>2],t[r+4>>2]=t[I1+4>>2],o0(e,4084,r)|0,t[lf>>2]=13,t[lf+4>>2]=0,t[r>>2]=t[lf>>2],t[r+4>>2]=t[lf+4>>2],o0(e,4097,r)|0,t[Ns>>2]=14,t[Ns+4>>2]=0,t[r>>2]=t[Ns>>2],t[r+4>>2]=t[Ns+4>>2],o0(e,4117,r)|0,t[La>>2]=15,t[La+4>>2]=0,t[r>>2]=t[La>>2],t[r+4>>2]=t[La+4>>2],o0(e,4129,r)|0,t[Hl>>2]=16,t[Hl+4>>2]=0,t[r>>2]=t[Hl>>2],t[r+4>>2]=t[Hl+4>>2],o0(e,4148,r)|0,t[Kf>>2]=17,t[Kf+4>>2]=0,t[r>>2]=t[Kf>>2],t[r+4>>2]=t[Kf+4>>2],o0(e,4161,r)|0,t[bc>>2]=18,t[bc+4>>2]=0,t[r>>2]=t[bc>>2],t[r+4>>2]=t[bc+4>>2],o0(e,4181,r)|0,t[Ic>>2]=5,t[Ic+4>>2]=0,t[r>>2]=t[Ic>>2],t[r+4>>2]=t[Ic+4>>2],M0(e,4196,r)|0,t[f2>>2]=6,t[f2+4>>2]=0,t[r>>2]=t[f2>>2],t[r+4>>2]=t[f2+4>>2],M0(e,4206,r)|0,t[a2>>2]=7,t[a2+4>>2]=0,t[r>>2]=t[a2>>2],t[r+4>>2]=t[a2+4>>2],M0(e,4217,r)|0,t[Yf>>2]=3,t[Yf+4>>2]=0,t[r>>2]=t[Yf>>2],t[r+4>>2]=t[Yf+4>>2],ns(e,4235,r)|0,t[s2>>2]=1,t[s2+4>>2]=0,t[r>>2]=t[s2>>2],t[r+4>>2]=t[s2+4>>2],Ya(e,4251,r)|0,t[of>>2]=4,t[of+4>>2]=0,t[r>>2]=t[of>>2],t[r+4>>2]=t[of+4>>2],ns(e,4263,r)|0,t[vi>>2]=5,t[vi+4>>2]=0,t[r>>2]=t[vi>>2],t[r+4>>2]=t[vi+4>>2],ns(e,4279,r)|0,t[l2>>2]=6,t[l2+4>>2]=0,t[r>>2]=t[l2>>2],t[r+4>>2]=t[l2+4>>2],ns(e,4293,r)|0,t[o2>>2]=7,t[o2+4>>2]=0,t[r>>2]=t[o2>>2],t[r+4>>2]=t[o2+4>>2],ns(e,4306,r)|0,t[u2>>2]=8,t[u2+4>>2]=0,t[r>>2]=t[u2>>2],t[r+4>>2]=t[u2+4>>2],ns(e,4323,r)|0,t[Pc>>2]=9,t[Pc+4>>2]=0,t[r>>2]=t[Pc>>2],t[r+4>>2]=t[Pc+4>>2],ns(e,4335,r)|0,t[Fc>>2]=2,t[Fc+4>>2]=0,t[r>>2]=t[Fc>>2],t[r+4>>2]=t[Fc+4>>2],Ya(e,4353,r)|0,t[i2>>2]=12,t[i2+4>>2]=0,t[r>>2]=t[i2>>2],t[r+4>>2]=t[i2+4>>2],io(e,4363,r)|0,t[uf>>2]=1,t[uf+4>>2]=0,t[r>>2]=t[uf>>2],t[r+4>>2]=t[uf+4>>2],al(e,4376,r)|0,t[r2>>2]=2,t[r2+4>>2]=0,t[r>>2]=t[r2>>2],t[r+4>>2]=t[r2+4>>2],al(e,4388,r)|0,t[n2>>2]=13,t[n2+4>>2]=0,t[r>>2]=t[n2>>2],t[r+4>>2]=t[n2+4>>2],io(e,4402,r)|0,t[ea>>2]=14,t[ea+4>>2]=0,t[r>>2]=t[ea>>2],t[r+4>>2]=t[ea+4>>2],io(e,4411,r)|0,t[ss>>2]=15,t[ss+4>>2]=0,t[r>>2]=t[ss>>2],t[r+4>>2]=t[ss+4>>2],io(e,4421,r)|0,t[ls>>2]=16,t[ls+4>>2]=0,t[r>>2]=t[ls>>2],t[r+4>>2]=t[ls+4>>2],io(e,4433,r)|0,t[os>>2]=17,t[os+4>>2]=0,t[r>>2]=t[os>>2],t[r+4>>2]=t[os+4>>2],io(e,4446,r)|0,t[uu>>2]=18,t[uu+4>>2]=0,t[r>>2]=t[uu>>2],t[r+4>>2]=t[uu+4>>2],io(e,4458,r)|0,t[Nn>>2]=3,t[Nn+4>>2]=0,t[r>>2]=t[Nn>>2],t[r+4>>2]=t[Nn+4>>2],al(e,4471,r)|0,t[Pr>>2]=1,t[Pr+4>>2]=0,t[r>>2]=t[Pr>>2],t[r+4>>2]=t[Pr+4>>2],yc(e,4486,r)|0,t[_r>>2]=10,t[_r+4>>2]=0,t[r>>2]=t[_r>>2],t[r+4>>2]=t[_r+4>>2],ns(e,4496,r)|0,t[gn>>2]=11,t[gn+4>>2]=0,t[r>>2]=t[gn>>2],t[r+4>>2]=t[gn+4>>2],ns(e,4508,r)|0,t[In>>2]=3,t[In+4>>2]=0,t[r>>2]=t[In>>2],t[r+4>>2]=t[In+4>>2],Ya(e,4519,r)|0,t[Br>>2]=4,t[Br+4>>2]=0,t[r>>2]=t[Br>>2],t[r+4>>2]=t[Br+4>>2],k2(e,4530,r)|0,t[Zt>>2]=19,t[Zt+4>>2]=0,t[r>>2]=t[Zt>>2],t[r+4>>2]=t[Zt+4>>2],_h(e,4542,r)|0,t[Pe>>2]=12,t[Pe+4>>2]=0,t[r>>2]=t[Pe>>2],t[r+4>>2]=t[Pe+4>>2],Cf(e,4554,r)|0,t[Me>>2]=13,t[Me+4>>2]=0,t[r>>2]=t[Me>>2],t[r+4>>2]=t[Me+4>>2],xf(e,4568,r)|0,t[ft>>2]=2,t[ft+4>>2]=0,t[r>>2]=t[ft>>2],t[r+4>>2]=t[ft+4>>2],$c(e,4578,r)|0,t[Ge>>2]=20,t[Ge+4>>2]=0,t[r>>2]=t[Ge>>2],t[r+4>>2]=t[Ge+4>>2],kl(e,4587,r)|0,t[Je>>2]=22,t[Je+4>>2]=0,t[r>>2]=t[Je>>2],t[r+4>>2]=t[Je+4>>2],Vs(e,4602,r)|0,t[ye>>2]=23,t[ye+4>>2]=0,t[r>>2]=t[ye>>2],t[r+4>>2]=t[ye+4>>2],Vs(e,4619,r)|0,t[Se>>2]=14,t[Se+4>>2]=0,t[r>>2]=t[Se>>2],t[r+4>>2]=t[Se+4>>2],e1(e,4629,r)|0,t[be>>2]=1,t[be+4>>2]=0,t[r>>2]=t[be>>2],t[r+4>>2]=t[be+4>>2],ya(e,4637,r)|0,t[K>>2]=4,t[K+4>>2]=0,t[r>>2]=t[K>>2],t[r+4>>2]=t[K+4>>2],al(e,4653,r)|0,t[I>>2]=5,t[I+4>>2]=0,t[r>>2]=t[I>>2],t[r+4>>2]=t[I+4>>2],al(e,4669,r)|0,t[M>>2]=6,t[M+4>>2]=0,t[r>>2]=t[M>>2],t[r+4>>2]=t[M+4>>2],al(e,4686,r)|0,t[N>>2]=7,t[N+4>>2]=0,t[r>>2]=t[N>>2],t[r+4>>2]=t[N+4>>2],al(e,4701,r)|0,t[S>>2]=8,t[S+4>>2]=0,t[r>>2]=t[S>>2],t[r+4>>2]=t[S+4>>2],al(e,4719,r)|0,t[D>>2]=9,t[D+4>>2]=0,t[r>>2]=t[D>>2],t[r+4>>2]=t[D+4>>2],al(e,4736,r)|0,t[h>>2]=21,t[h+4>>2]=0,t[r>>2]=t[h>>2],t[r+4>>2]=t[h+4>>2],hd(e,4754,r)|0,t[s>>2]=2,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],yc(e,4772,r)|0,t[l>>2]=3,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],yc(e,4790,r)|0,t[u>>2]=4,t[u+4>>2]=0,t[r>>2]=t[u>>2],t[r+4>>2]=t[u+4>>2],yc(e,4808,r)|0,m=n}function Tf(e,n){e=e|0,n=n|0;var r=0;r=rf()|0,t[e>>2]=r,Wo(r,n),$d(t[e>>2]|0)}function Zc(e,n,r){return e=e|0,n=n|0,r=r|0,Ot(e,Fr(n)|0,r,0),e|0}function gh(e,n,r){return e=e|0,n=n|0,r=r|0,c(e,Fr(n)|0,r,0),e|0}function nm(e,n,r){return e=e|0,n=n|0,r=r|0,Y4(e,Fr(n)|0,r,0),e|0}function Vs(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],U4(e,n,l),m=u,e|0}function ma(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],jl(e,n,l),m=u,e|0}function iu(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],d(e,n,l),m=u,e|0}function M0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Tv(e,n,l),m=u,e|0}function o0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Xm(e,n,l),m=u,e|0}function ns(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Yd(e,n,l),m=u,e|0}function Ya(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Gd(e,n,l),m=u,e|0}function io(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],k0(e,n,l),m=u,e|0}function al(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],wp(e,n,l),m=u,e|0}function yc(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Mm(e,n,l),m=u,e|0}function k2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],l0(e,n,l),m=u,e|0}function _h(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Od(e,n,l),m=u,e|0}function Cf(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Dm(e,n,l),m=u,e|0}function xf(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],ep(e,n,l),m=u,e|0}function $c(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],m1(e,n,l),m=u,e|0}function kl(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Za(e,n,l),m=u,e|0}function e1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],U2(e,n,l),m=u,e|0}function ya(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],F2(e,n,l),m=u,e|0}function hd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],vd(e,n,l),m=u,e|0}function vd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],ga(e,r,l,1),m=u}function Fr(e){return e=e|0,e|0}function ga(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=N2()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=t1(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,md(s,u)|0,u),m=l}function N2(){var e=0,n=0;if(p[7616]|0||(fl(9136),Wt(24,9136,ve|0)|0,n=7616,t[n>>2]=1,t[n+4>>2]=0),!(sr(9136)|0)){e=9136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));fl(9136)}return 9136}function t1(e){return e=e|0,0}function md(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=N2()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Rf(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Af(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function wi(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,N=0,M=0,I=0,K=0,be=0;h=m,m=m+32|0,K=h+24|0,I=h+20|0,S=h+16|0,M=h+12|0,N=h+8|0,D=h+4|0,be=h,t[I>>2]=n,t[S>>2]=r,t[M>>2]=u,t[N>>2]=l,t[D>>2]=s,s=e+28|0,t[be>>2]=t[s>>2],t[K>>2]=t[be>>2],L2(e+24|0,K,I,M,N,S,D)|0,t[s>>2]=t[t[s>>2]>>2],m=h}function L2(e,n,r,u,l,s,h){return e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,h=h|0,e=rm(n)|0,n=pn(24)|0,yd(n+4|0,t[r>>2]|0,t[u>>2]|0,t[l>>2]|0,t[s>>2]|0,t[h>>2]|0),t[n>>2]=t[e>>2],t[e>>2]=n,n|0}function rm(e){return e=e|0,t[e>>2]|0}function yd(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=u,t[e+12>>2]=l,t[e+16>>2]=s}function hn(e,n){return e=e|0,n=n|0,n|e|0}function Rf(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Af(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=im(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,Of(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Rf(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Eh(e,D),um(D),m=N;return}}function im(e){return e=e|0,357913941}function Of(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Eh(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function um(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function fl(e){e=e|0,Ho(e)}function n1(e){e=e|0,qn(e+24|0)}function sr(e){return e=e|0,t[e>>2]|0}function qn(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function Ho(e){e=e|0;var n=0;n=yr()|0,jn(e,2,3,n,Vn()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function yr(){return 9228}function Vn(){return 1140}function cl(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=_o(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=gc(n,u)|0,m=r,n|0}function jn(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=u,t[e+12>>2]=l,t[e+16>>2]=s}function _o(e){return e=e|0,(t[(N2()|0)+24>>2]|0)+(e*12|0)|0}function gc(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;return l=m,m=m+48|0,u=l,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),P1[r&31](u,e),u=uo(u)|0,m=l,u|0}function uo(e){e=e|0;var n=0,r=0,u=0,l=0;return l=m,m=m+32|0,n=l+12|0,r=l,u=Iu(Ka()|0)|0,u?(rs(n,u),Mf(r,n),_c(e,r),e=Cs(n)|0):e=Ec(e)|0,m=l,e|0}function Ka(){var e=0;return p[7632]|0||(Nf(9184),Wt(25,9184,ve|0)|0,e=7632,t[e>>2]=1,t[e+4>>2]=0),9184}function Iu(e){return e=e|0,t[e+36>>2]|0}function rs(e,n){e=e|0,n=n|0,t[e>>2]=n,t[e+4>>2]=e,t[e+8>>2]=0}function Mf(e,n){e=e|0,n=n|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=0}function _c(e,n){e=e|0,n=n|0,oo(n,e,e+8|0,e+16|0,e+24|0,e+32|0,e+40|0)|0}function Cs(e){return e=e|0,t[(t[e+4>>2]|0)+8>>2]|0}function Ec(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0;S=m,m=m+16|0,r=S+4|0,u=S,l=Oa(8)|0,s=l,h=pn(48)|0,D=h,n=D+48|0;do t[D>>2]=t[e>>2],D=D+4|0,e=e+4|0;while((D|0)<(n|0));return n=s+4|0,t[n>>2]=h,D=pn(8)|0,h=t[n>>2]|0,t[u>>2]=0,t[r>>2]=t[u>>2],Dh(D,h,r),t[l>>2]=D,m=S,s|0}function Dh(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=pn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1092,t[r+12>>2]=n,t[e+4>>2]=r}function cn(e){e=e|0,Iv(e),_t(e)}function is(e){e=e|0,e=t[e+12>>2]|0,e|0&&_t(e)}function Eo(e){e=e|0,_t(e)}function oo(e,n,r,u,l,s,h){return e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,h=h|0,s=Ji(t[e>>2]|0,n,r,u,l,s,h)|0,h=e+4|0,t[(t[h>>2]|0)+8>>2]=s,t[(t[h>>2]|0)+8>>2]|0}function Ji(e,n,r,u,l,s,h){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,h=h|0;var D=0,S=0;return D=m,m=m+16|0,S=D,Ma(S),e=yo(e)|0,h=Yr(e,+U[n>>3],+U[r>>3],+U[u>>3],+U[l>>3],+U[s>>3],+U[h>>3])|0,ka(S),m=D,h|0}function Yr(e,n,r,u,l,s,h){e=e|0,n=+n,r=+r,u=+u,l=+l,s=+s,h=+h;var D=0;return D=go(kf()|0)|0,n=+Ml(n),r=+Ml(r),u=+Ml(u),l=+Ml(l),s=+Ml(s),p0(0,D|0,e|0,+n,+r,+u,+l,+s,+ +Ml(h))|0}function kf(){var e=0;return p[7624]|0||(om(9172),e=7624,t[e>>2]=1,t[e+4>>2]=0),9172}function om(e){e=e|0,ol(e,Nl()|0,6)}function Nl(){return 1112}function Nf(e){e=e|0,Xa(e)}function Lf(e){e=e|0,gd(e+24|0),_d(e+16|0)}function gd(e){e=e|0,r1(e)}function _d(e){e=e|0,Dc(e)}function Dc(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,_t(r);while((n|0)!=0);t[e>>2]=0}function r1(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,_t(r);while((n|0)!=0);t[e>>2]=0}function Xa(e){e=e|0;var n=0;t[e+16>>2]=0,t[e+20>>2]=0,n=e+24|0,t[n>>2]=0,t[e+28>>2]=n,t[e+36>>2]=0,p[e+40>>0]=0,p[e+41>>0]=0}function F2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Ed(e,r,l,0),m=u}function Ed(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=i1()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=Ff(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,u1(s,u)|0,u),m=l}function i1(){var e=0,n=0;if(p[7640]|0||(Ll(9232),Wt(26,9232,ve|0)|0,n=7640,t[n>>2]=1,t[n+4>>2]=0),!(sr(9232)|0)){e=9232,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ll(9232)}return 9232}function Ff(e){return e=e|0,0}function u1(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=i1()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Qa(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(o1(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function Qa(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function o1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=P2(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,Dd(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Qa(s,u,r),t[S>>2]=(t[S>>2]|0)+12,wc(e,D),l1(D),m=N;return}}function P2(e){return e=e|0,357913941}function Dd(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function wc(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function l1(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function Ll(e){e=e|0,I2(e)}function Ea(e){e=e|0,wh(e+24|0)}function wh(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function I2(e){e=e|0;var n=0;n=yr()|0,jn(e,2,1,n,b2()|0,3),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function b2(){return 1144}function Sh(e,n,r,u,l){e=e|0,n=n|0,r=+r,u=+u,l=l|0;var s=0,h=0,D=0,S=0;s=m,m=m+16|0,h=s+8|0,D=s,S=wd(e)|0,e=t[S+4>>2]|0,t[D>>2]=t[S>>2],t[D+4>>2]=e,t[h>>2]=t[D>>2],t[h+4>>2]=t[D+4>>2],Th(n,h,r,u,l),m=s}function wd(e){return e=e|0,(t[(i1()|0)+24>>2]|0)+(e*12|0)|0}function Th(e,n,r,u,l){e=e|0,n=n|0,r=+r,u=+u,l=l|0;var s=0,h=0,D=0,S=0,N=0;N=m,m=m+16|0,h=N+2|0,D=N+1|0,S=N,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),Fl(h,r),r=+us(h,r),Fl(D,u),u=+us(D,u),xs(S,l),S=Gs(S,l)|0,w8[s&1](e,r,u,S),m=N}function Fl(e,n){e=e|0,n=+n}function us(e,n){return e=e|0,n=+n,+ +Ch(n)}function xs(e,n){e=e|0,n=n|0}function Gs(e,n){return e=e|0,n=n|0,B2(n)|0}function B2(e){return e=e|0,e|0}function Ch(e){return e=+e,+e}function U2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],j2(e,r,l,1),m=u}function j2(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=s1()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=a1(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,xh(s,u)|0,u),m=l}function s1(){var e=0,n=0;if(p[7648]|0||(f1(9268),Wt(27,9268,ve|0)|0,n=7648,t[n>>2]=1,t[n+4>>2]=0),!(sr(9268)|0)){e=9268,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));f1(9268)}return 9268}function a1(e){return e=e|0,0}function xh(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=s1()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],z2(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(H2(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function z2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function H2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Rs(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,Ja(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],z2(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Rh(e,D),du(D),m=N;return}}function Rs(e){return e=e|0,357913941}function Ja(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Rh(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function du(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function f1(e){e=e|0,Pl(e)}function Ah(e){e=e|0,c1(e+24|0)}function c1(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function Pl(e){e=e|0;var n=0;n=yr()|0,jn(e,2,4,n,Oh()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Oh(){return 1160}function q2(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=Mh(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=d1(n,u)|0,m=r,n|0}function Mh(e){return e=e|0,(t[(s1()|0)+24>>2]|0)+(e*12|0)|0}function d1(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Il(Jp[r&31](e)|0)|0}function Il(e){return e=e|0,e&1|0}function Za(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Da(e,r,l,0),m=u}function Da(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=W2()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=V2(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,lm(s,u)|0,u),m=l}function W2(){var e=0,n=0;if(p[7656]|0||(Lh(9304),Wt(28,9304,ve|0)|0,n=7656,t[n>>2]=1,t[n+4>>2]=0),!(sr(9304)|0)){e=9304,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Lh(9304)}return 9304}function V2(e){return e=e|0,0}function lm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=W2()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],G2(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(kh(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function G2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function kh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Nh(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,Y2(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],G2(s,u,r),t[S>>2]=(t[S>>2]|0)+12,sm(e,D),am(D),m=N;return}}function Nh(e){return e=e|0,357913941}function Y2(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function sm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function am(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function Lh(e){e=e|0,p1(e)}function fm(e){e=e|0,K2(e+24|0)}function K2(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function p1(e){e=e|0;var n=0;n=yr()|0,jn(e,2,5,n,h1()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function h1(){return 1164}function v1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=wa(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],X2(n,l,r),m=u}function wa(e){return e=e|0,(t[(W2()|0)+24>>2]|0)+(e*12|0)|0}function X2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Ys(l,r),r=Ks(l,r)|0,P1[u&31](e,r),Xs(l),m=s}function Ys(e,n){e=e|0,n=n|0,Q2(e,n)}function Ks(e,n){return e=e|0,n=n|0,e|0}function Xs(e){e=e|0,fa(e)}function Q2(e,n){e=e|0,n=n|0,Sa(e,n)}function Sa(e,n){e=e|0,n=n|0,t[e>>2]=n}function m1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Sd(e,r,l,0),m=u}function Sd(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Sc()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=J2(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Do(s,u)|0,u),m=l}function Sc(){var e=0,n=0;if(p[7664]|0||(Uh(9340),Wt(29,9340,ve|0)|0,n=7664,t[n>>2]=1,t[n+4>>2]=0),!(sr(9340)|0)){e=9340,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Uh(9340)}return 9340}function J2(e){return e=e|0,0}function Do(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Sc()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Fh(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Ph(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function Fh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Ph(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Ih(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,bh(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Fh(s,u,r),t[S>>2]=(t[S>>2]|0)+12,cm(e,D),Bh(D),m=N;return}}function Ih(e){return e=e|0,357913941}function bh(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function cm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Bh(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function Uh(e){e=e|0,jh(e)}function y1(e){e=e|0,Z2(e+24|0)}function Z2(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function jh(e){e=e|0;var n=0;n=yr()|0,jn(e,2,4,n,$2()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function $2(){return 1180}function zh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=dm(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],r=pm(n,l,r)|0,m=u,r|0}function dm(e){return e=e|0,(t[(Sc()|0)+24>>2]|0)+(e*12|0)|0}function pm(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;return s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Pf(l,r),l=If(l,r)|0,l=Td(FE[u&15](e,l)|0)|0,m=s,l|0}function Pf(e,n){e=e|0,n=n|0}function If(e,n){return e=e|0,n=n|0,hm(n)|0}function Td(e){return e=e|0,e|0}function hm(e){return e=e|0,e|0}function ep(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Cd(e,r,l,0),m=u}function Cd(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=tp()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=Hh(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,np(s,u)|0,u),m=l}function tp(){var e=0,n=0;if(p[7672]|0||(Vh(9376),Wt(30,9376,ve|0)|0,n=7672,t[n>>2]=1,t[n+4>>2]=0),!(sr(9376)|0)){e=9376,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Vh(9376)}return 9376}function Hh(e){return e=e|0,0}function np(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=tp()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],qh(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Wh(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function qh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Wh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=rp(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,vm(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],qh(s,u,r),t[S>>2]=(t[S>>2]|0)+12,mm(e,D),ym(D),m=N;return}}function rp(e){return e=e|0,357913941}function vm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function mm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function ym(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function Vh(e){e=e|0,ip(e)}function g1(e){e=e|0,gm(e+24|0)}function gm(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function ip(e){e=e|0;var n=0;n=yr()|0,jn(e,2,5,n,up()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function up(){return 1196}function _m(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=Em(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=Gh(n,u)|0,m=r,n|0}function Em(e){return e=e|0,(t[(tp()|0)+24>>2]|0)+(e*12|0)|0}function Gh(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Td(Jp[r&31](e)|0)|0}function Dm(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],wm(e,r,l,1),m=u}function wm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=op()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=lp(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Ta(s,u)|0,u),m=l}function op(){var e=0,n=0;if(p[7680]|0||(ap(9412),Wt(31,9412,ve|0)|0,n=7680,t[n>>2]=1,t[n+4>>2]=0),!(sr(9412)|0)){e=9412,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));ap(9412)}return 9412}function lp(e){return e=e|0,0}function Ta(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=op()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],_1(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(sp(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function _1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function sp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Yh(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,xd(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],_1(s,u,r),t[S>>2]=(t[S>>2]|0)+12,E1(e,D),Kh(D),m=N;return}}function Yh(e){return e=e|0,357913941}function xd(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function E1(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Kh(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function ap(e){e=e|0,Qh(e)}function Xh(e){e=e|0,fp(e+24|0)}function fp(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function Qh(e){e=e|0;var n=0;n=yr()|0,jn(e,2,6,n,Jh()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Jh(){return 1200}function cp(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=Rd(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=Ad(n,u)|0,m=r,n|0}function Rd(e){return e=e|0,(t[(op()|0)+24>>2]|0)+(e*12|0)|0}function Ad(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),H0(Jp[r&31](e)|0)|0}function H0(e){return e=e|0,e|0}function Od(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Ca(e,r,l,0),m=u}function Ca(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=$a()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=Md(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,kd(s,u)|0,u),m=l}function $a(){var e=0,n=0;if(p[7688]|0||(hp(9448),Wt(32,9448,ve|0)|0,n=7688,t[n>>2]=1,t[n+4>>2]=0),!(sr(9448)|0)){e=9448,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));hp(9448)}return 9448}function Md(e){return e=e|0,0}function kd(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=$a()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],dp(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Nd(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function dp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Nd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Zh(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,Sm(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],dp(s,u,r),t[S>>2]=(t[S>>2]|0)+12,$h(e,D),pp(D),m=N;return}}function Zh(e){return e=e|0,357913941}function Sm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function $h(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function pp(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function hp(e){e=e|0,Cm(e)}function vp(e){e=e|0,Tm(e+24|0)}function Tm(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function Cm(e){e=e|0;var n=0;n=yr()|0,jn(e,2,6,n,wo()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function wo(){return 1204}function Ld(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=xm(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],dl(n,l,r),m=u}function xm(e){return e=e|0,(t[($a()|0)+24>>2]|0)+(e*12|0)|0}function dl(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),tr(l,r),l=Qs(l,r)|0,P1[u&31](e,l),m=s}function tr(e,n){e=e|0,n=n|0}function Qs(e,n){return e=e|0,n=n|0,pl(n)|0}function pl(e){return e=e|0,e|0}function l0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],ev(e,r,l,0),m=u}function ev(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Js()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=mp(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Rm(s,u)|0,u),m=l}function Js(){var e=0,n=0;if(p[7696]|0||(_p(9484),Wt(33,9484,ve|0)|0,n=7696,t[n>>2]=1,t[n+4>>2]=0),!(sr(9484)|0)){e=9484,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));_p(9484)}return 9484}function mp(e){return e=e|0,0}function Rm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Js()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],tv(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(yp(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function tv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function yp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Am(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,gp(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],tv(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Tc(e,D),xa(D),m=N;return}}function Am(e){return e=e|0,357913941}function gp(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Tc(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function xa(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function _p(e){e=e|0,Yu(e)}function Fd(e){e=e|0,bu(e+24|0)}function bu(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function Yu(e){e=e|0;var n=0;n=yr()|0,jn(e,2,1,n,Ep()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Ep(){return 1212}function Dp(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,s=l+8|0,h=l,D=nv(e)|0,e=t[D+4>>2]|0,t[h>>2]=t[D>>2],t[h+4>>2]=e,t[s>>2]=t[h>>2],t[s+4>>2]=t[h+4>>2],Om(n,s,r,u),m=l}function nv(e){return e=e|0,(t[(Js()|0)+24>>2]|0)+(e*12|0)|0}function Om(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;D=m,m=m+16|0,s=D+1|0,h=D,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),tr(s,r),s=Qs(s,r)|0,Pf(h,u),h=If(h,u)|0,Ry[l&15](e,s,h),m=D}function Mm(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],km(e,r,l,1),m=u}function km(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Pd()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=rv(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Cc(s,u)|0,u),m=l}function Pd(){var e=0,n=0;if(p[7704]|0||(iv(9520),Wt(34,9520,ve|0)|0,n=7704,t[n>>2]=1,t[n+4>>2]=0),!(sr(9520)|0)){e=9520,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));iv(9520)}return 9520}function rv(e){return e=e|0,0}function Cc(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Pd()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],D1(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Nm(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function D1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Nm(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Id(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,w1(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],D1(s,u,r),t[S>>2]=(t[S>>2]|0)+12,bl(e,D),Ra(D),m=N;return}}function Id(e){return e=e|0,357913941}function w1(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function bl(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Ra(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function iv(e){e=e|0,ov(e)}function Lm(e){e=e|0,uv(e+24|0)}function uv(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function ov(e){e=e|0;var n=0;n=yr()|0,jn(e,2,1,n,Fm()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Fm(){return 1224}function lv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;return l=m,m=m+16|0,s=l+8|0,h=l,D=Aa(e)|0,e=t[D+4>>2]|0,t[h>>2]=t[D>>2],t[h+4>>2]=e,t[s>>2]=t[h>>2],t[s+4>>2]=t[h+4>>2],u=+Mr(n,s,r),m=l,+u}function Aa(e){return e=e|0,(t[(Pd()|0)+24>>2]|0)+(e*12|0)|0}function Mr(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),xs(l,r),l=Gs(l,r)|0,h=+Ga(+T8[u&7](e,l)),m=s,+h}function wp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],hl(e,r,l,1),m=u}function hl(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=gu()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=S1(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Ui(s,u)|0,u),m=l}function gu(){var e=0,n=0;if(p[7712]|0||(Tp(9556),Wt(35,9556,ve|0)|0,n=7712,t[n>>2]=1,t[n+4>>2]=0),!(sr(9556)|0)){e=9556,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Tp(9556)}return 9556}function S1(e){return e=e|0,0}function Ui(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=gu()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Sp(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(bd(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function Sp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function bd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=So(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,As(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Sp(s,u,r),t[S>>2]=(t[S>>2]|0)+12,bf(e,D),Bd(D),m=N;return}}function So(e){return e=e|0,357913941}function As(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function bf(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Bd(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function Tp(e){e=e|0,Cp(e)}function T1(e){e=e|0,C1(e+24|0)}function C1(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function Cp(e){e=e|0;var n=0;n=yr()|0,jn(e,2,5,n,nr()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function nr(){return 1232}function vl(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=Gn(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],r=+q0(n,l),m=u,+r}function Gn(e){return e=e|0,(t[(gu()|0)+24>>2]|0)+(e*12|0)|0}function q0(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),+ +Ga(+S8[r&15](e))}function k0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Ud(e,r,l,1),m=u}function Ud(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Bl()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=x1(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,xc(s,u)|0,u),m=l}function Bl(){var e=0,n=0;if(p[7720]|0||(Hd(9592),Wt(36,9592,ve|0)|0,n=7720,t[n>>2]=1,t[n+4>>2]=0),!(sr(9592)|0)){e=9592,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Hd(9592)}return 9592}function x1(e){return e=e|0,0}function xc(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Bl()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Rc(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jd(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function Rc(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function jd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=xp(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,N0(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Rc(s,u,r),t[S>>2]=(t[S>>2]|0)+12,dn(e,D),zd(D),m=N;return}}function xp(e){return e=e|0,357913941}function N0(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function dn(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function zd(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function Hd(e){e=e|0,Mc(e)}function Ac(e){e=e|0,Oc(e+24|0)}function Oc(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function Mc(e){e=e|0;var n=0;n=yr()|0,jn(e,2,7,n,R1()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function R1(){return 1276}function Rp(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=ef(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=Pm(n,u)|0,m=r,n|0}function ef(e){return e=e|0,(t[(Bl()|0)+24>>2]|0)+(e*12|0)|0}function Pm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;return l=m,m=m+16|0,u=l,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),P1[r&31](u,e),u=kc(u)|0,m=l,u|0}function kc(e){e=e|0;var n=0,r=0,u=0,l=0;return l=m,m=m+32|0,n=l+12|0,r=l,u=Iu(qd()|0)|0,u?(rs(n,u),Mf(r,n),sv(e,r),e=Cs(n)|0):e=A1(e)|0,m=l,e|0}function qd(){var e=0;return p[7736]|0||(qo(9640),Wt(25,9640,ve|0)|0,e=7736,t[e>>2]=1,t[e+4>>2]=0),9640}function sv(e,n){e=e|0,n=n|0,Nc(n,e,e+8|0)|0}function A1(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0;return r=m,m=m+16|0,l=r+4|0,h=r,u=Oa(8)|0,n=u,D=pn(16)|0,t[D>>2]=t[e>>2],t[D+4>>2]=t[e+4>>2],t[D+8>>2]=t[e+8>>2],t[D+12>>2]=t[e+12>>2],s=n+4|0,t[s>>2]=D,e=pn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],Bf(e,s,l),t[u>>2]=e,m=r,n|0}function Bf(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=pn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1244,t[r+12>>2]=n,t[e+4>>2]=r}function Uf(e){e=e|0,Iv(e),_t(e)}function O1(e){e=e|0,e=t[e+12>>2]|0,e|0&&_t(e)}function Ul(e){e=e|0,_t(e)}function Nc(e,n,r){return e=e|0,n=n|0,r=r|0,n=jf(t[e>>2]|0,n,r)|0,r=e+4|0,t[(t[r>>2]|0)+8>>2]=n,t[(t[r>>2]|0)+8>>2]|0}function jf(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;return u=m,m=m+16|0,l=u,Ma(l),e=yo(e)|0,r=Im(e,t[n>>2]|0,+U[r>>3])|0,ka(l),m=u,r|0}function Im(e,n,r){e=e|0,n=n|0,r=+r;var u=0;return u=go(ml()|0)|0,n=sd(n)|0,Hr(0,u|0,e|0,n|0,+ +Ml(r))|0}function ml(){var e=0;return p[7728]|0||(Wd(9628),e=7728,t[e>>2]=1,t[e+4>>2]=0),9628}function Wd(e){e=e|0,ol(e,Vd()|0,2)}function Vd(){return 1264}function qo(e){e=e|0,Xa(e)}function Gd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],bm(e,r,l,1),m=u}function bm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=M1()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=Bm(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Um(s,u)|0,u),m=l}function M1(){var e=0,n=0;if(p[7744]|0||(cv(9684),Wt(37,9684,ve|0)|0,n=7744,t[n>>2]=1,t[n+4>>2]=0),!(sr(9684)|0)){e=9684,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));cv(9684)}return 9684}function Bm(e){return e=e|0,0}function Um(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=M1()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],av(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jm(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function av(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function jm(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=fv(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,zm(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],av(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Hm(e,D),qm(D),m=N;return}}function fv(e){return e=e|0,357913941}function zm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Hm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function qm(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function cv(e){e=e|0,Vm(e)}function Wm(e){e=e|0,Ap(e+24|0)}function Ap(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function Vm(e){e=e|0;var n=0;n=yr()|0,jn(e,2,5,n,zf()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function zf(){return 1280}function dv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=pv(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],r=hv(n,l,r)|0,m=u,r|0}function pv(e){return e=e|0,(t[(M1()|0)+24>>2]|0)+(e*12|0)|0}function hv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return h=m,m=m+32|0,l=h,s=h+16|0,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),xs(s,r),s=Gs(s,r)|0,Ry[u&15](l,e,s),s=kc(l)|0,m=h,s|0}function Yd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Kd(e,r,l,1),m=u}function Kd(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Op()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=vv(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Xd(s,u)|0,u),m=l}function Op(){var e=0,n=0;if(p[7752]|0||(Ev(9720),Wt(38,9720,ve|0)|0,n=7752,t[n>>2]=1,t[n+4>>2]=0),!(sr(9720)|0)){e=9720,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ev(9720)}return 9720}function vv(e){return e=e|0,0}function Xd(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Op()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],mv(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(yv(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function mv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function yv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Mp(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,gv(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],mv(s,u,r),t[S>>2]=(t[S>>2]|0)+12,_v(e,D),Gm(D),m=N;return}}function Mp(e){return e=e|0,357913941}function gv(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function _v(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Gm(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function Ev(e){e=e|0,Dv(e)}function Ym(e){e=e|0,Qd(e+24|0)}function Qd(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function Dv(e){e=e|0;var n=0;n=yr()|0,jn(e,2,8,n,kp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function kp(){return 1288}function Km(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=s0(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=Np(n,u)|0,m=r,n|0}function s0(e){return e=e|0,(t[(Op()|0)+24>>2]|0)+(e*12|0)|0}function Np(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),cd(Jp[r&31](e)|0)|0}function Xm(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Qm(e,r,l,0),m=u}function Qm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Lp()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=tf(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Fp(s,u)|0,u),m=l}function Lp(){var e=0,n=0;if(p[7760]|0||(bp(9756),Wt(39,9756,ve|0)|0,n=7760,t[n>>2]=1,t[n+4>>2]=0),!(sr(9756)|0)){e=9756,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));bp(9756)}return 9756}function tf(e){return e=e|0,0}function Fp(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Lp()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Pp(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Ip(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function Pp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Ip(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Jm(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,Zm(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Pp(s,u,r),t[S>>2]=(t[S>>2]|0)+12,wv(e,D),Hf(D),m=N;return}}function Jm(e){return e=e|0,357913941}function Zm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function wv(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Hf(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function bp(e){e=e|0,ey(e)}function Sv(e){e=e|0,$m(e+24|0)}function $m(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function ey(e){e=e|0;var n=0;n=yr()|0,jn(e,2,8,n,Bp()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Bp(){return 1292}function Up(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=ty(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],ny(n,l,r),m=u}function ty(e){return e=e|0,(t[(Lp()|0)+24>>2]|0)+(e*12|0)|0}function ny(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Fl(l,r),r=+us(l,r),E8[u&31](e,r),m=s}function Tv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],jp(e,r,l,0),m=u}function jp(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=zp()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=Jd(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,ry(s,u)|0,u),m=l}function zp(){var e=0,n=0;if(p[7768]|0||(Hp(9792),Wt(40,9792,ve|0)|0,n=7768,t[n>>2]=1,t[n+4>>2]=0),!(sr(9792)|0)){e=9792,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Hp(9792)}return 9792}function Jd(e){return e=e|0,0}function ry(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=zp()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],k1(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(iy(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function k1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function iy(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Cv(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,xv(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],k1(s,u,r),t[S>>2]=(t[S>>2]|0)+12,uy(e,D),qf(D),m=N;return}}function Cv(e){return e=e|0,357913941}function xv(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function uy(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function qf(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function Hp(e){e=e|0,ly(e)}function Rv(e){e=e|0,oy(e+24|0)}function oy(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function ly(e){e=e|0;var n=0;n=yr()|0,jn(e,2,1,n,qp()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function qp(){return 1300}function sy(e,n,r,u){e=e|0,n=n|0,r=r|0,u=+u;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,s=l+8|0,h=l,D=Zs(e)|0,e=t[D+4>>2]|0,t[h>>2]=t[D>>2],t[h+4>>2]=e,t[s>>2]=t[h>>2],t[s+4>>2]=t[h+4>>2],ay(n,s,r,u),m=l}function Zs(e){return e=e|0,(t[(zp()|0)+24>>2]|0)+(e*12|0)|0}function ay(e,n,r,u){e=e|0,n=n|0,r=r|0,u=+u;var l=0,s=0,h=0,D=0;D=m,m=m+16|0,s=D+1|0,h=D,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),xs(s,r),s=Gs(s,r)|0,Fl(h,u),u=+us(h,u),A8[l&15](e,s,u),m=D}function d(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],v(e,r,l,0),m=u}function v(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=x()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=P(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,q(s,u)|0,u),m=l}function x(){var e=0,n=0;if(p[7776]|0||(At(9828),Wt(41,9828,ve|0)|0,n=7776,t[n>>2]=1,t[n+4>>2]=0),!(sr(9828)|0)){e=9828,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));At(9828)}return 9828}function P(e){return e=e|0,0}function q(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=x()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],ee(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(de(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function ee(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function de(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=_e(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,Ie(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],ee(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Et(e,D),St(D),m=N;return}}function _e(e){return e=e|0,357913941}function Ie(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Et(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function St(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function At(e){e=e|0,rr(e)}function on(e){e=e|0,kn(e+24|0)}function kn(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function rr(e){e=e|0;var n=0;n=yr()|0,jn(e,2,7,n,br()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function br(){return 1312}function ar(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=ui(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],di(n,l,r),m=u}function ui(e){return e=e|0,(t[(x()|0)+24>>2]|0)+(e*12|0)|0}function di(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),xs(l,r),l=Gs(l,r)|0,P1[u&31](e,l),m=s}function jl(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Zi(e,r,l,0),m=u}function Zi(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=lo()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=a0(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Os(s,u)|0,u),m=l}function lo(){var e=0,n=0;if(p[7784]|0||(qg(9864),Wt(42,9864,ve|0)|0,n=7784,t[n>>2]=1,t[n+4>>2]=0),!(sr(9864)|0)){e=9864,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));qg(9864)}return 9864}function a0(e){return e=e|0,0}function Os(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=lo()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],To(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Av(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function To(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Av(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=k4(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,fy(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],To(s,u,r),t[S>>2]=(t[S>>2]|0)+12,cy(e,D),nf(D),m=N;return}}function k4(e){return e=e|0,357913941}function fy(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function cy(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function nf(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function qg(e){e=e|0,F4(e)}function N4(e){e=e|0,L4(e+24|0)}function L4(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function F4(e){e=e|0;var n=0;n=yr()|0,jn(e,2,8,n,P4()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function P4(){return 1320}function dy(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=I4(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],b4(n,l,r),m=u}function I4(e){return e=e|0,(t[(lo()|0)+24>>2]|0)+(e*12|0)|0}function b4(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),py(l,r),l=Wg(l,r)|0,P1[u&31](e,l),m=s}function py(e,n){e=e|0,n=n|0}function Wg(e,n){return e=e|0,n=n|0,B4(n)|0}function B4(e){return e=e|0,e|0}function U4(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Vg(e,r,l,0),m=u}function Vg(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Wf()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=Gg(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,j4(s,u)|0,u),m=l}function Wf(){var e=0,n=0;if(p[7792]|0||(my(9900),Wt(43,9900,ve|0)|0,n=7792,t[n>>2]=1,t[n+4>>2]=0),!(sr(9900)|0)){e=9900,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));my(9900)}return 9900}function Gg(e){return e=e|0,0}function j4(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Wf()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Wp(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(z4(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function Wp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function z4(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Ov(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,hy(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Wp(s,u,r),t[S>>2]=(t[S>>2]|0)+12,vy(e,D),H4(D),m=N;return}}function Ov(e){return e=e|0,357913941}function hy(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function vy(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function H4(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function my(e){e=e|0,Yg(e)}function q4(e){e=e|0,W4(e+24|0)}function W4(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function Yg(e){e=e|0;var n=0;n=yr()|0,jn(e,2,22,n,V4()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function V4(){return 1344}function G4(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;r=m,m=m+16|0,u=r+8|0,l=r,s=Kg(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],Mv(n,u),m=r}function Kg(e){return e=e|0,(t[(Wf()|0)+24>>2]|0)+(e*12|0)|0}function Mv(e,n){e=e|0,n=n|0;var r=0;r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),F1[r&127](e)}function Y4(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=yy()|0,e=K4(r)|0,wi(s,n,l,e,X4(r,u)|0,u)}function yy(){var e=0,n=0;if(p[7800]|0||(_y(9936),Wt(44,9936,ve|0)|0,n=7800,t[n>>2]=1,t[n+4>>2]=0),!(sr(9936)|0)){e=9936,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));_y(9936)}return 9936}function K4(e){return e=e|0,e|0}function X4(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=yy()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(gy(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(Xg(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function gy(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function Xg(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=Qg(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,M=(t[e+8>>2]|0)-S|0,N=M>>2,Jg(l,M>>3>>>0>>1>>>0?N>>>0>>0?h:N:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,gy(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,Zg(e,l),$g(l),m=D;return}}function Qg(e){return e=e|0,536870911}function Jg(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function Zg(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function $g(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&_t(e)}function _y(e){e=e|0,t_(e)}function e_(e){e=e|0,Q4(e+24|0)}function Q4(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function t_(e){e=e|0;var n=0;n=yr()|0,jn(e,1,23,n,wo()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function J4(e,n){e=e|0,n=n|0,f(t[(Z4(e)|0)>>2]|0,n)}function Z4(e){return e=e|0,(t[(yy()|0)+24>>2]|0)+(e<<3)|0}function f(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,tr(u,n),n=Qs(u,n)|0,F1[e&127](n),m=r}function c(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=E()|0,e=T(r)|0,wi(s,n,l,e,A(r,u)|0,u)}function E(){var e=0,n=0;if(p[7808]|0||(pt(9972),Wt(45,9972,ve|0)|0,n=7808,t[n>>2]=1,t[n+4>>2]=0),!(sr(9972)|0)){e=9972,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));pt(9972)}return 9972}function T(e){return e=e|0,e|0}function A(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=E()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(j(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(V(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function j(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function V(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=te(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,M=(t[e+8>>2]|0)-S|0,N=M>>2,le(l,M>>3>>>0>>1>>>0?N>>>0>>0?h:N:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,j(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,Be(e,l),Ke(l),m=D;return}}function te(e){return e=e|0,536870911}function le(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function Be(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Ke(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&_t(e)}function pt(e){e=e|0,zt(e)}function Nt(e){e=e|0,Gt(e+24|0)}function Gt(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function zt(e){e=e|0;var n=0;n=yr()|0,jn(e,1,9,n,yn()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function yn(){return 1348}function kr(e,n){return e=e|0,n=n|0,Oi(t[(oi(e)|0)>>2]|0,n)|0}function oi(e){return e=e|0,(t[(E()|0)+24>>2]|0)+(e<<3)|0}function Oi(e,n){e=e|0,n=n|0;var r=0,u=0;return r=m,m=m+16|0,u=r,L0(u,n),n=$i(u,n)|0,n=Td(Jp[e&31](n)|0)|0,m=r,n|0}function L0(e,n){e=e|0,n=n|0}function $i(e,n){return e=e|0,n=n|0,ot(n)|0}function ot(e){return e=e|0,e|0}function Ot(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=Ze()|0,e=Ut(r)|0,wi(s,n,l,e,Pn(r,u)|0,u)}function Ze(){var e=0,n=0;if(p[7816]|0||(Kr(10008),Wt(46,10008,ve|0)|0,n=7816,t[n>>2]=1,t[n+4>>2]=0),!(sr(10008)|0)){e=10008,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Kr(10008)}return 10008}function Ut(e){return e=e|0,e|0}function Pn(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=Ze()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(vn(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(Wi(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function vn(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function Wi(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=pi(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,M=(t[e+8>>2]|0)-S|0,N=M>>2,Ku(l,M>>3>>>0>>1>>>0?N>>>0>>0?h:N:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,vn(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,hr(e,l),pu(l),m=D;return}}function pi(e){return e=e|0,536870911}function Ku(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function hr(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function pu(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&_t(e)}function Kr(e){e=e|0,W0(e)}function xu(e){e=e|0,w0(e+24|0)}function w0(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function W0(e){e=e|0;var n=0;n=yr()|0,jn(e,1,15,n,up()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Ms(e){return e=e|0,yl(t[(Xu(e)|0)>>2]|0)|0}function Xu(e){return e=e|0,(t[(Ze()|0)+24>>2]|0)+(e<<3)|0}function yl(e){return e=e|0,Td(g_[e&7]()|0)|0}function rf(){var e=0;return p[7832]|0||(r_(10052),Wt(25,10052,ve|0)|0,e=7832,t[e>>2]=1,t[e+4>>2]=0),10052}function Wo(e,n){e=e|0,n=n|0,t[e>>2]=ks()|0,t[e+4>>2]=Zd()|0,t[e+12>>2]=n,t[e+8>>2]=Vf()|0,t[e+32>>2]=2}function ks(){return 11709}function Zd(){return 1188}function Vf(){return N1()|0}function Lc(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(zl(u,896)|0)==512?r|0&&(Vo(r),_t(r)):n|0&&(Ds(n),_t(n))}function zl(e,n){return e=e|0,n=n|0,n&e|0}function Vo(e){e=e|0,e=t[e+4>>2]|0,e|0&&e2(e)}function N1(){var e=0;return p[7824]|0||(t[2511]=n_()|0,t[2512]=0,e=7824,t[e>>2]=1,t[e+4>>2]=0),10044}function n_(){return 0}function r_(e){e=e|0,Xa(e)}function $4(e){e=e|0;var n=0,r=0,u=0,l=0,s=0;n=m,m=m+32|0,r=n+24|0,s=n+16|0,l=n+8|0,u=n,i_(e,4827),eE(e,4834,3)|0,tE(e,3682,47)|0,t[s>>2]=9,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],Ey(e,4841,r)|0,t[l>>2]=1,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],u_(e,4871,r)|0,t[u>>2]=10,t[u+4>>2]=0,t[r>>2]=t[u>>2],t[r+4>>2]=t[u+4>>2],nE(e,4891,r)|0,m=n}function i_(e,n){e=e|0,n=n|0;var r=0;r=BR()|0,t[e>>2]=r,UR(r,n),$d(t[e>>2]|0)}function eE(e,n,r){return e=e|0,n=n|0,r=r|0,wR(e,Fr(n)|0,r,0),e|0}function tE(e,n,r){return e=e|0,n=n|0,r=r|0,lR(e,Fr(n)|0,r,0),e|0}function Ey(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],H9(e,n,l),m=u,e|0}function u_(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],S9(e,n,l),m=u,e|0}function nE(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],rE(e,n,l),m=u,e|0}function rE(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],iE(e,r,l,1),m=u}function iE(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=uE()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=a9(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,f9(s,u)|0,u),m=l}function uE(){var e=0,n=0;if(p[7840]|0||(rw(10100),Wt(48,10100,ve|0)|0,n=7840,t[n>>2]=1,t[n+4>>2]=0),!(sr(10100)|0)){e=10100,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));rw(10100)}return 10100}function a9(e){return e=e|0,0}function f9(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=uE()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],nw(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(c9(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function nw(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function c9(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=d9(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,p9(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],nw(s,u,r),t[S>>2]=(t[S>>2]|0)+12,h9(e,D),v9(D),m=N;return}}function d9(e){return e=e|0,357913941}function p9(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function h9(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function v9(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function rw(e){e=e|0,g9(e)}function m9(e){e=e|0,y9(e+24|0)}function y9(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function g9(e){e=e|0;var n=0;n=yr()|0,jn(e,2,6,n,_9()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function _9(){return 1364}function E9(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=D9(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],r=w9(n,l,r)|0,m=u,r|0}function D9(e){return e=e|0,(t[(uE()|0)+24>>2]|0)+(e*12|0)|0}function w9(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;return s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),xs(l,r),l=Gs(l,r)|0,l=Il(FE[u&15](e,l)|0)|0,m=s,l|0}function S9(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],T9(e,r,l,0),m=u}function T9(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=oE()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=C9(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,x9(s,u)|0,u),m=l}function oE(){var e=0,n=0;if(p[7848]|0||(uw(10136),Wt(49,10136,ve|0)|0,n=7848,t[n>>2]=1,t[n+4>>2]=0),!(sr(10136)|0)){e=10136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));uw(10136)}return 10136}function C9(e){return e=e|0,0}function x9(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=oE()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],iw(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(R9(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function iw(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function R9(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=A9(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,O9(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],iw(s,u,r),t[S>>2]=(t[S>>2]|0)+12,M9(e,D),k9(D),m=N;return}}function A9(e){return e=e|0,357913941}function O9(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function M9(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function k9(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function uw(e){e=e|0,F9(e)}function N9(e){e=e|0,L9(e+24|0)}function L9(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function F9(e){e=e|0;var n=0;n=yr()|0,jn(e,2,9,n,P9()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function P9(){return 1372}function I9(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=b9(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],B9(n,l,r),m=u}function b9(e){return e=e|0,(t[(oE()|0)+24>>2]|0)+(e*12|0)|0}function B9(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0,h=Tt;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),U9(l,r),h=w(j9(l,r)),_8[u&1](e,h),m=s}function U9(e,n){e=e|0,n=+n}function j9(e,n){return e=e|0,n=+n,w(z9(n))}function z9(e){return e=+e,w(e)}function H9(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],q9(e,r,l,0),m=u}function q9(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,N=0,M=0;l=m,m=m+32|0,s=l+16|0,M=l+8|0,D=l,N=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=lE()|0,t[M>>2]=N,t[M+4>>2]=S,t[s>>2]=t[M>>2],t[s+4>>2]=t[M+4>>2],r=W9(s)|0,t[D>>2]=N,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,V9(s,u)|0,u),m=l}function lE(){var e=0,n=0;if(p[7856]|0||(lw(10172),Wt(50,10172,ve|0)|0,n=7856,t[n>>2]=1,t[n+4>>2]=0),!(sr(10172)|0)){e=10172,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));lw(10172)}return 10172}function W9(e){return e=e|0,0}function V9(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0;return M=m,m=m+32|0,l=M+24|0,h=M+16|0,D=M,S=M+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=lE()|0,N=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],ow(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(G9(N,D,S),e=t[n>>2]|0),m=M,((e-(t[N>>2]|0)|0)/12|0)+-1|0}function ow(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function G9(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;if(N=m,m=m+48|0,u=N+32|0,h=N+24|0,D=N,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Y9(e)|0,s>>>0>>0)hi(e);else{M=t[e>>2]|0,K=((t[e+8>>2]|0)-M|0)/12|0,I=K<<1,K9(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-M|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],ow(s,u,r),t[S>>2]=(t[S>>2]|0)+12,X9(e,D),Q9(D),m=N;return}}function Y9(e){return e=e|0,357913941}function K9(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function X9(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Q9(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&_t(e)}function lw(e){e=e|0,$9(e)}function J9(e){e=e|0,Z9(e+24|0)}function Z9(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),_t(r))}function $9(e){e=e|0;var n=0;n=yr()|0,jn(e,2,3,n,eR()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function eR(){return 1380}function tR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,s=l+8|0,h=l,D=nR(e)|0,e=t[D+4>>2]|0,t[h>>2]=t[D>>2],t[h+4>>2]=e,t[s>>2]=t[h>>2],t[s+4>>2]=t[h+4>>2],rR(n,s,r,u),m=l}function nR(e){return e=e|0,(t[(lE()|0)+24>>2]|0)+(e*12|0)|0}function rR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;D=m,m=m+16|0,s=D+1|0,h=D,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),xs(s,r),s=Gs(s,r)|0,iR(h,u),h=uR(h,u)|0,Ry[l&15](e,s,h),m=D}function iR(e,n){e=e|0,n=n|0}function uR(e,n){return e=e|0,n=n|0,oR(n)|0}function oR(e){return e=e|0,(e|0)!=0|0}function lR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=sE()|0,e=sR(r)|0,wi(s,n,l,e,aR(r,u)|0,u)}function sE(){var e=0,n=0;if(p[7864]|0||(aw(10208),Wt(51,10208,ve|0)|0,n=7864,t[n>>2]=1,t[n+4>>2]=0),!(sr(10208)|0)){e=10208,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));aw(10208)}return 10208}function sR(e){return e=e|0,e|0}function aR(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=sE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(sw(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(fR(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function sw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function fR(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=cR(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,M=(t[e+8>>2]|0)-S|0,N=M>>2,dR(l,M>>3>>>0>>1>>>0?N>>>0>>0?h:N:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,sw(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,pR(e,l),hR(l),m=D;return}}function cR(e){return e=e|0,536870911}function dR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function pR(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function hR(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&_t(e)}function aw(e){e=e|0,yR(e)}function vR(e){e=e|0,mR(e+24|0)}function mR(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function yR(e){e=e|0;var n=0;n=yr()|0,jn(e,1,24,n,gR()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gR(){return 1392}function _R(e,n){e=e|0,n=n|0,DR(t[(ER(e)|0)>>2]|0,n)}function ER(e){return e=e|0,(t[(sE()|0)+24>>2]|0)+(e<<3)|0}function DR(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,L0(u,n),n=$i(u,n)|0,F1[e&127](n),m=r}function wR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=aE()|0,e=SR(r)|0,wi(s,n,l,e,TR(r,u)|0,u)}function aE(){var e=0,n=0;if(p[7872]|0||(cw(10244),Wt(52,10244,ve|0)|0,n=7872,t[n>>2]=1,t[n+4>>2]=0),!(sr(10244)|0)){e=10244,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));cw(10244)}return 10244}function SR(e){return e=e|0,e|0}function TR(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=aE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(fw(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(CR(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function fw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function CR(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=xR(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,M=(t[e+8>>2]|0)-S|0,N=M>>2,RR(l,M>>3>>>0>>1>>>0?N>>>0>>0?h:N:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,fw(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,AR(e,l),OR(l),m=D;return}}function xR(e){return e=e|0,536870911}function RR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function AR(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function OR(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&_t(e)}function cw(e){e=e|0,NR(e)}function MR(e){e=e|0,kR(e+24|0)}function kR(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function NR(e){e=e|0;var n=0;n=yr()|0,jn(e,1,16,n,LR()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function LR(){return 1400}function FR(e){return e=e|0,IR(t[(PR(e)|0)>>2]|0)|0}function PR(e){return e=e|0,(t[(aE()|0)+24>>2]|0)+(e<<3)|0}function IR(e){return e=e|0,bR(g_[e&7]()|0)|0}function bR(e){return e=e|0,e|0}function BR(){var e=0;return p[7880]|0||(VR(10280),Wt(25,10280,ve|0)|0,e=7880,t[e>>2]=1,t[e+4>>2]=0),10280}function UR(e,n){e=e|0,n=n|0,t[e>>2]=jR()|0,t[e+4>>2]=zR()|0,t[e+12>>2]=n,t[e+8>>2]=HR()|0,t[e+32>>2]=4}function jR(){return 11711}function zR(){return 1356}function HR(){return N1()|0}function qR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(zl(u,896)|0)==512?r|0&&(WR(r),_t(r)):n|0&&(no(n),_t(n))}function WR(e){e=e|0,e=t[e+4>>2]|0,e|0&&e2(e)}function VR(e){e=e|0,Xa(e)}function GR(e){e=e|0,YR(e,4920),KR(e)|0,XR(e)|0}function YR(e,n){e=e|0,n=n|0;var r=0;r=qd()|0,t[e>>2]=r,mA(r,n),$d(t[e>>2]|0)}function KR(e){e=e|0;var n=0;return n=t[e>>2]|0,Vp(n,oA()|0),e|0}function XR(e){e=e|0;var n=0;return n=t[e>>2]|0,Vp(n,QR()|0),e|0}function QR(){var e=0;return p[7888]|0||(dw(10328),Wt(53,10328,ve|0)|0,e=7888,t[e>>2]=1,t[e+4>>2]=0),sr(10328)|0||dw(10328),10328}function Vp(e,n){e=e|0,n=n|0,wi(e,0,n,0,0,0)}function dw(e){e=e|0,$R(e),Gp(e,10)}function JR(e){e=e|0,ZR(e+24|0)}function ZR(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function $R(e){e=e|0;var n=0;n=yr()|0,jn(e,5,1,n,rA()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function eA(e,n,r){e=e|0,n=n|0,r=+r,tA(e,n,r)}function Gp(e,n){e=e|0,n=n|0,t[e+20>>2]=n}function tA(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,s=u+8|0,D=u+13|0,l=u,h=u+12|0,xs(D,n),t[s>>2]=Gs(D,n)|0,Fl(h,r),U[l>>3]=+us(h,r),nA(e,s,l),m=u}function nA(e,n,r){e=e|0,n=n|0,r=r|0,b(e+8|0,t[n>>2]|0,+U[r>>3]),p[e+24>>0]=1}function rA(){return 1404}function iA(e,n){return e=e|0,n=+n,uA(e,n)|0}function uA(e,n){e=e|0,n=+n;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return u=m,m=m+16|0,s=u+4|0,h=u+8|0,D=u,l=Oa(8)|0,r=l,S=pn(16)|0,xs(s,e),e=Gs(s,e)|0,Fl(h,n),b(S,e,+us(h,n)),h=r+4|0,t[h>>2]=S,e=pn(8)|0,h=t[h>>2]|0,t[D>>2]=0,t[s>>2]=t[D>>2],Bf(e,h,s),t[l>>2]=e,m=u,r|0}function oA(){var e=0;return p[7896]|0||(pw(10364),Wt(54,10364,ve|0)|0,e=7896,t[e>>2]=1,t[e+4>>2]=0),sr(10364)|0||pw(10364),10364}function pw(e){e=e|0,aA(e),Gp(e,55)}function lA(e){e=e|0,sA(e+24|0)}function sA(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function aA(e){e=e|0;var n=0;n=yr()|0,jn(e,5,4,n,pA()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function fA(e){e=e|0,cA(e)}function cA(e){e=e|0,dA(e)}function dA(e){e=e|0,hw(e+8|0),p[e+24>>0]=1}function hw(e){e=e|0,t[e>>2]=0,U[e+8>>3]=0}function pA(){return 1424}function hA(){return vA()|0}function vA(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0;return n=m,m=m+16|0,l=n+4|0,h=n,r=Oa(8)|0,e=r,u=pn(16)|0,hw(u),s=e+4|0,t[s>>2]=u,u=pn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],Bf(u,s,l),t[r>>2]=u,m=n,e|0}function mA(e,n){e=e|0,n=n|0,t[e>>2]=yA()|0,t[e+4>>2]=gA()|0,t[e+12>>2]=n,t[e+8>>2]=_A()|0,t[e+32>>2]=5}function yA(){return 11710}function gA(){return 1416}function _A(){return o_()|0}function EA(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(zl(u,896)|0)==512?r|0&&(DA(r),_t(r)):n|0&&_t(n)}function DA(e){e=e|0,e=t[e+4>>2]|0,e|0&&e2(e)}function o_(){var e=0;return p[7904]|0||(t[2600]=wA()|0,t[2601]=0,e=7904,t[e>>2]=1,t[e+4>>2]=0),10400}function wA(){return t[357]|0}function SA(e){e=e|0,TA(e,4926),CA(e)|0}function TA(e,n){e=e|0,n=n|0;var r=0;r=Ka()|0,t[e>>2]=r,IA(r,n),$d(t[e>>2]|0)}function CA(e){e=e|0;var n=0;return n=t[e>>2]|0,Vp(n,xA()|0),e|0}function xA(){var e=0;return p[7912]|0||(vw(10412),Wt(56,10412,ve|0)|0,e=7912,t[e>>2]=1,t[e+4>>2]=0),sr(10412)|0||vw(10412),10412}function vw(e){e=e|0,OA(e),Gp(e,57)}function RA(e){e=e|0,AA(e+24|0)}function AA(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function OA(e){e=e|0;var n=0;n=yr()|0,jn(e,5,5,n,LA()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function MA(e){e=e|0,kA(e)}function kA(e){e=e|0,NA(e)}function NA(e){e=e|0;var n=0,r=0;n=e+8|0,r=n+48|0;do t[n>>2]=0,n=n+4|0;while((n|0)<(r|0));p[e+56>>0]=1}function LA(){return 1432}function FA(){return PA()|0}function PA(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0,D=0;h=m,m=m+16|0,e=h+4|0,n=h,r=Oa(8)|0,u=r,l=pn(48)|0,s=l,D=s+48|0;do t[s>>2]=0,s=s+4|0;while((s|0)<(D|0));return s=u+4|0,t[s>>2]=l,D=pn(8)|0,s=t[s>>2]|0,t[n>>2]=0,t[e>>2]=t[n>>2],Dh(D,s,e),t[r>>2]=D,m=h,u|0}function IA(e,n){e=e|0,n=n|0,t[e>>2]=bA()|0,t[e+4>>2]=BA()|0,t[e+12>>2]=n,t[e+8>>2]=UA()|0,t[e+32>>2]=6}function bA(){return 11704}function BA(){return 1436}function UA(){return o_()|0}function jA(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(zl(u,896)|0)==512?r|0&&(zA(r),_t(r)):n|0&&_t(n)}function zA(e){e=e|0,e=t[e+4>>2]|0,e|0&&e2(e)}function HA(e){e=e|0,qA(e,4933),WA(e)|0,VA(e)|0}function qA(e,n){e=e|0,n=n|0;var r=0;r=v7()|0,t[e>>2]=r,m7(r,n),$d(t[e>>2]|0)}function WA(e){e=e|0;var n=0;return n=t[e>>2]|0,Vp(n,u7()|0),e|0}function VA(e){e=e|0;var n=0;return n=t[e>>2]|0,Vp(n,GA()|0),e|0}function GA(){var e=0;return p[7920]|0||(mw(10452),Wt(58,10452,ve|0)|0,e=7920,t[e>>2]=1,t[e+4>>2]=0),sr(10452)|0||mw(10452),10452}function mw(e){e=e|0,XA(e),Gp(e,1)}function YA(e){e=e|0,KA(e+24|0)}function KA(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function XA(e){e=e|0;var n=0;n=yr()|0,jn(e,5,1,n,$A()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function QA(e,n,r){e=e|0,n=+n,r=+r,JA(e,n,r)}function JA(e,n,r){e=e|0,n=+n,r=+r;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+32|0,s=u+8|0,D=u+17|0,l=u,h=u+16|0,Fl(D,n),U[s>>3]=+us(D,n),Fl(h,r),U[l>>3]=+us(h,r),ZA(e,s,l),m=u}function ZA(e,n,r){e=e|0,n=n|0,r=r|0,yw(e+8|0,+U[n>>3],+U[r>>3]),p[e+24>>0]=1}function yw(e,n,r){e=e|0,n=+n,r=+r,U[e>>3]=n,U[e+8>>3]=r}function $A(){return 1472}function e7(e,n){return e=+e,n=+n,t7(e,n)|0}function t7(e,n){e=+e,n=+n;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return u=m,m=m+16|0,h=u+4|0,D=u+8|0,S=u,l=Oa(8)|0,r=l,s=pn(16)|0,Fl(h,e),e=+us(h,e),Fl(D,n),yw(s,e,+us(D,n)),D=r+4|0,t[D>>2]=s,s=pn(8)|0,D=t[D>>2]|0,t[S>>2]=0,t[h>>2]=t[S>>2],gw(s,D,h),t[l>>2]=s,m=u,r|0}function gw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=pn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1452,t[r+12>>2]=n,t[e+4>>2]=r}function n7(e){e=e|0,Iv(e),_t(e)}function r7(e){e=e|0,e=t[e+12>>2]|0,e|0&&_t(e)}function i7(e){e=e|0,_t(e)}function u7(){var e=0;return p[7928]|0||(_w(10488),Wt(59,10488,ve|0)|0,e=7928,t[e>>2]=1,t[e+4>>2]=0),sr(10488)|0||_w(10488),10488}function _w(e){e=e|0,s7(e),Gp(e,60)}function o7(e){e=e|0,l7(e+24|0)}function l7(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function s7(e){e=e|0;var n=0;n=yr()|0,jn(e,5,6,n,d7()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function a7(e){e=e|0,f7(e)}function f7(e){e=e|0,c7(e)}function c7(e){e=e|0,Ew(e+8|0),p[e+24>>0]=1}function Ew(e){e=e|0,t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,t[e+12>>2]=0}function d7(){return 1492}function p7(){return h7()|0}function h7(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0;return n=m,m=m+16|0,l=n+4|0,h=n,r=Oa(8)|0,e=r,u=pn(16)|0,Ew(u),s=e+4|0,t[s>>2]=u,u=pn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],gw(u,s,l),t[r>>2]=u,m=n,e|0}function v7(){var e=0;return p[7936]|0||(w7(10524),Wt(25,10524,ve|0)|0,e=7936,t[e>>2]=1,t[e+4>>2]=0),10524}function m7(e,n){e=e|0,n=n|0,t[e>>2]=y7()|0,t[e+4>>2]=g7()|0,t[e+12>>2]=n,t[e+8>>2]=_7()|0,t[e+32>>2]=7}function y7(){return 11700}function g7(){return 1484}function _7(){return o_()|0}function E7(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(zl(u,896)|0)==512?r|0&&(D7(r),_t(r)):n|0&&_t(n)}function D7(e){e=e|0,e=t[e+4>>2]|0,e|0&&e2(e)}function w7(e){e=e|0,Xa(e)}function S7(e,n,r){e=e|0,n=n|0,r=r|0,e=Fr(n)|0,n=T7(r)|0,r=C7(r,0)|0,tO(e,n,r,fE()|0,0)}function T7(e){return e=e|0,e|0}function C7(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=fE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(ww(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(N7(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function fE(){var e=0,n=0;if(p[7944]|0||(Dw(10568),Wt(61,10568,ve|0)|0,n=7944,t[n>>2]=1,t[n+4>>2]=0),!(sr(10568)|0)){e=10568,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Dw(10568)}return 10568}function Dw(e){e=e|0,A7(e)}function x7(e){e=e|0,R7(e+24|0)}function R7(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function A7(e){e=e|0;var n=0;n=yr()|0,jn(e,1,17,n,Jh()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function O7(e){return e=e|0,k7(t[(M7(e)|0)>>2]|0)|0}function M7(e){return e=e|0,(t[(fE()|0)+24>>2]|0)+(e<<3)|0}function k7(e){return e=e|0,H0(g_[e&7]()|0)|0}function ww(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function N7(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=L7(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,M=(t[e+8>>2]|0)-S|0,N=M>>2,F7(l,M>>3>>>0>>1>>>0?N>>>0>>0?h:N:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,ww(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,P7(e,l),I7(l),m=D;return}}function L7(e){return e=e|0,536870911}function F7(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function P7(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function I7(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&_t(e)}function b7(){B7()}function B7(){U7(10604)}function U7(e){e=e|0,j7(e,4955)}function j7(e,n){e=e|0,n=n|0;var r=0;r=z7()|0,t[e>>2]=r,H7(r,n),$d(t[e>>2]|0)}function z7(){var e=0;return p[7952]|0||(J7(10612),Wt(25,10612,ve|0)|0,e=7952,t[e>>2]=1,t[e+4>>2]=0),10612}function H7(e,n){e=e|0,n=n|0,t[e>>2]=G7()|0,t[e+4>>2]=Y7()|0,t[e+12>>2]=n,t[e+8>>2]=K7()|0,t[e+32>>2]=8}function $d(e){e=e|0;var n=0,r=0;n=m,m=m+16|0,r=n,kv()|0,t[r>>2]=e,q7(10608,r),m=n}function kv(){return p[11714]|0||(t[2652]=0,Wt(62,10608,ve|0)|0,p[11714]=1),10608}function q7(e,n){e=e|0,n=n|0;var r=0;r=pn(8)|0,t[r+4>>2]=t[n>>2],t[r>>2]=t[e>>2],t[e>>2]=r}function W7(e){e=e|0,V7(e)}function V7(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,_t(r);while((n|0)!=0);t[e>>2]=0}function G7(){return 11715}function Y7(){return 1496}function K7(){return N1()|0}function X7(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(zl(u,896)|0)==512?r|0&&(Q7(r),_t(r)):n|0&&_t(n)}function Q7(e){e=e|0,e=t[e+4>>2]|0,e|0&&e2(e)}function J7(e){e=e|0,Xa(e)}function Z7(e,n){e=e|0,n=n|0;var r=0,u=0;kv()|0,r=t[2652]|0;e:do if(r|0){for(;u=t[r+4>>2]|0,!(u|0?(r8(cE(u)|0,e)|0)==0:0);)if(r=t[r>>2]|0,!r)break e;$7(u,n)}while(0)}function cE(e){return e=e|0,t[e+12>>2]|0}function $7(e,n){e=e|0,n=n|0;var r=0;e=e+36|0,r=t[e>>2]|0,r|0&&(fa(r),_t(r)),r=pn(4)|0,wf(r,n),t[e>>2]=r}function dE(){return p[11716]|0||(t[2664]=0,Wt(63,10656,ve|0)|0,p[11716]=1),10656}function Sw(){var e=0;return p[11717]|0?e=t[2665]|0:(eO(),t[2665]=1504,p[11717]=1,e=1504),e|0}function eO(){p[11740]|0||(p[11718]=hn(hn(8,0)|0,0)|0,p[11719]=hn(hn(0,0)|0,0)|0,p[11720]=hn(hn(0,16)|0,0)|0,p[11721]=hn(hn(8,0)|0,0)|0,p[11722]=hn(hn(0,0)|0,0)|0,p[11723]=hn(hn(8,0)|0,0)|0,p[11724]=hn(hn(0,0)|0,0)|0,p[11725]=hn(hn(8,0)|0,0)|0,p[11726]=hn(hn(0,0)|0,0)|0,p[11727]=hn(hn(8,0)|0,0)|0,p[11728]=hn(hn(0,0)|0,0)|0,p[11729]=hn(hn(0,0)|0,32)|0,p[11730]=hn(hn(0,0)|0,32)|0,p[11740]=1)}function Tw(){return 1572}function tO(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,N=0,M=0;s=m,m=m+32|0,M=s+16|0,N=s+12|0,S=s+8|0,D=s+4|0,h=s,t[M>>2]=e,t[N>>2]=n,t[S>>2]=r,t[D>>2]=u,t[h>>2]=l,dE()|0,nO(10656,M,N,S,D,h),m=s}function nO(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0;h=pn(24)|0,yd(h+4|0,t[n>>2]|0,t[r>>2]|0,t[u>>2]|0,t[l>>2]|0,t[s>>2]|0),t[h>>2]=t[e>>2],t[e>>2]=h}function Cw(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0,be=0,Se=0,ye=0,Je=0,Ge=0,ft=0;if(ft=m,m=m+32|0,Se=ft+20|0,ye=ft+8|0,Je=ft+4|0,Ge=ft,n=t[n>>2]|0,n|0){be=Se+4|0,S=Se+8|0,N=ye+4|0,M=ye+8|0,I=ye+8|0,K=Se+8|0;do{if(h=n+4|0,D=pE(h)|0,D|0){if(l=Dy(D)|0,t[Se>>2]=0,t[be>>2]=0,t[S>>2]=0,u=(wy(D)|0)+1|0,rO(Se,u),u|0)for(;u=u+-1|0,Gf(ye,t[l>>2]|0),s=t[be>>2]|0,s>>>0<(t[K>>2]|0)>>>0?(t[s>>2]=t[ye>>2],t[be>>2]=(t[be>>2]|0)+4):hE(Se,ye),u;)l=l+4|0;u=Sy(D)|0,t[ye>>2]=0,t[N>>2]=0,t[M>>2]=0;e:do if(t[u>>2]|0)for(l=0,s=0;;){if((l|0)==(s|0)?iO(ye,u):(t[l>>2]=t[u>>2],t[N>>2]=(t[N>>2]|0)+4),u=u+4|0,!(t[u>>2]|0))break e;l=t[N>>2]|0,s=t[I>>2]|0}while(0);t[Je>>2]=l_(h)|0,t[Ge>>2]=sr(D)|0,uO(r,e,Je,Ge,Se,ye),vE(ye),L1(Se)}n=t[n>>2]|0}while((n|0)!=0)}m=ft}function pE(e){return e=e|0,t[e+12>>2]|0}function Dy(e){return e=e|0,t[e+12>>2]|0}function wy(e){return e=e|0,t[e+16>>2]|0}function rO(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;l=m,m=m+32|0,r=l,u=t[e>>2]|0,(t[e+8>>2]|0)-u>>2>>>0>>0&&(Lw(r,n,(t[e+4>>2]|0)-u>>2,e+8|0),Fw(e,r),Pw(r)),m=l}function hE(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0;if(h=m,m=m+32|0,r=h,u=e+4|0,l=((t[u>>2]|0)-(t[e>>2]|0)>>2)+1|0,s=Nw(e)|0,s>>>0>>0)hi(e);else{D=t[e>>2]|0,N=(t[e+8>>2]|0)-D|0,S=N>>1,Lw(r,N>>2>>>0>>1>>>0?S>>>0>>0?l:S:s,(t[u>>2]|0)-D>>2,e+8|0),s=r+8|0,t[t[s>>2]>>2]=t[n>>2],t[s>>2]=(t[s>>2]|0)+4,Fw(e,r),Pw(r),m=h;return}}function Sy(e){return e=e|0,t[e+8>>2]|0}function iO(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0;if(h=m,m=m+32|0,r=h,u=e+4|0,l=((t[u>>2]|0)-(t[e>>2]|0)>>2)+1|0,s=kw(e)|0,s>>>0>>0)hi(e);else{D=t[e>>2]|0,N=(t[e+8>>2]|0)-D|0,S=N>>1,TO(r,N>>2>>>0>>1>>>0?S>>>0>>0?l:S:s,(t[u>>2]|0)-D>>2,e+8|0),s=r+8|0,t[t[s>>2]>>2]=t[n>>2],t[s>>2]=(t[s>>2]|0)+4,CO(e,r),xO(r),m=h;return}}function l_(e){return e=e|0,t[e>>2]|0}function uO(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,oO(e,n,r,u,l,s)}function vE(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-u|0)>>>2)<<2)),_t(r))}function L1(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-u|0)>>>2)<<2)),_t(r))}function oO(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,N=0,M=0,I=0;h=m,m=m+48|0,M=h+40|0,D=h+32|0,I=h+24|0,S=h+12|0,N=h,Ma(D),e=yo(e)|0,t[I>>2]=t[n>>2],r=t[r>>2]|0,u=t[u>>2]|0,mE(S,l),lO(N,s),t[M>>2]=t[I>>2],sO(e,M,r,u,S,N),vE(N),L1(S),ka(D),m=h}function mE(e,n){e=e|0,n=n|0;var r=0,u=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,u=(t[r>>2]|0)-(t[n>>2]|0)>>2,u|0&&(wO(e,u),SO(e,t[n>>2]|0,t[r>>2]|0,u))}function lO(e,n){e=e|0,n=n|0;var r=0,u=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,u=(t[r>>2]|0)-(t[n>>2]|0)>>2,u|0&&(EO(e,u),DO(e,t[n>>2]|0,t[r>>2]|0,u))}function sO(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,N=0,M=0,I=0;h=m,m=m+32|0,M=h+28|0,I=h+24|0,D=h+12|0,S=h,N=go(aO()|0)|0,t[I>>2]=t[n>>2],t[M>>2]=t[I>>2],n=Yp(M)|0,r=xw(r)|0,u=yE(u)|0,t[D>>2]=t[l>>2],M=l+4|0,t[D+4>>2]=t[M>>2],I=l+8|0,t[D+8>>2]=t[I>>2],t[I>>2]=0,t[M>>2]=0,t[l>>2]=0,l=gE(D)|0,t[S>>2]=t[s>>2],M=s+4|0,t[S+4>>2]=t[M>>2],I=s+8|0,t[S+8>>2]=t[I>>2],t[I>>2]=0,t[M>>2]=0,t[s>>2]=0,K0(0,N|0,e|0,n|0,r|0,u|0,l|0,fO(S)|0)|0,vE(S),L1(D),m=h}function aO(){var e=0;return p[7968]|0||(gO(10708),e=7968,t[e>>2]=1,t[e+4>>2]=0),10708}function Yp(e){return e=e|0,Aw(e)|0}function xw(e){return e=e|0,Rw(e)|0}function yE(e){return e=e|0,H0(e)|0}function gE(e){return e=e|0,dO(e)|0}function fO(e){return e=e|0,cO(e)|0}function cO(e){e=e|0;var n=0,r=0,u=0;if(u=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=u>>2,u=Oa(u+4|0)|0,t[u>>2]=r,r|0){n=0;do t[u+4+(n<<2)>>2]=Rw(t[(t[e>>2]|0)+(n<<2)>>2]|0)|0,n=n+1|0;while((n|0)!=(r|0))}return u|0}function Rw(e){return e=e|0,e|0}function dO(e){e=e|0;var n=0,r=0,u=0;if(u=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=u>>2,u=Oa(u+4|0)|0,t[u>>2]=r,r|0){n=0;do t[u+4+(n<<2)>>2]=Aw((t[e>>2]|0)+(n<<2)|0)|0,n=n+1|0;while((n|0)!=(r|0))}return u|0}function Aw(e){e=e|0;var n=0,r=0,u=0,l=0;return l=m,m=m+32|0,n=l+12|0,r=l,u=Iu(Ow()|0)|0,u?(rs(n,u),Mf(r,n),KN(e,r),e=Cs(n)|0):e=pO(e)|0,m=l,e|0}function Ow(){var e=0;return p[7960]|0||(yO(10664),Wt(25,10664,ve|0)|0,e=7960,t[e>>2]=1,t[e+4>>2]=0),10664}function pO(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0;return r=m,m=m+16|0,l=r+4|0,h=r,u=Oa(8)|0,n=u,D=pn(4)|0,t[D>>2]=t[e>>2],s=n+4|0,t[s>>2]=D,e=pn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],Mw(e,s,l),t[u>>2]=e,m=r,n|0}function Mw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=pn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1656,t[r+12>>2]=n,t[e+4>>2]=r}function hO(e){e=e|0,Iv(e),_t(e)}function vO(e){e=e|0,e=t[e+12>>2]|0,e|0&&_t(e)}function mO(e){e=e|0,_t(e)}function yO(e){e=e|0,Xa(e)}function gO(e){e=e|0,ol(e,_O()|0,5)}function _O(){return 1676}function EO(e,n){e=e|0,n=n|0;var r=0;if((kw(e)|0)>>>0>>0&&hi(e),n>>>0>1073741823)$n();else{r=pn(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function DO(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,u=e+4|0,e=r-n|0,(e|0)>0&&(gr(t[u>>2]|0,n|0,e|0)|0,t[u>>2]=(t[u>>2]|0)+(e>>>2<<2))}function kw(e){return e=e|0,1073741823}function wO(e,n){e=e|0,n=n|0;var r=0;if((Nw(e)|0)>>>0>>0&&hi(e),n>>>0>1073741823)$n();else{r=pn(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function SO(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,u=e+4|0,e=r-n|0,(e|0)>0&&(gr(t[u>>2]|0,n|0,e|0)|0,t[u>>2]=(t[u>>2]|0)+(e>>>2<<2))}function Nw(e){return e=e|0,1073741823}function TO(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>1073741823)$n();else{l=pn(n<<2)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<2)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<2)}function CO(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>2)<<2)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function xO(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&_t(e)}function Lw(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>1073741823)$n();else{l=pn(n<<2)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<2)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<2)}function Fw(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>2)<<2)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Pw(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&_t(e)}function RO(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0,be=0,Se=0,ye=0;if(ye=m,m=m+32|0,M=ye+20|0,I=ye+12|0,N=ye+16|0,K=ye+4|0,be=ye,Se=ye+8|0,D=Sw()|0,s=t[D>>2]|0,h=t[s>>2]|0,h|0)for(S=t[D+8>>2]|0,D=t[D+4>>2]|0;Gf(M,h),AO(e,M,D,S),s=s+4|0,h=t[s>>2]|0,h;)S=S+1|0,D=D+1|0;if(s=Tw()|0,h=t[s>>2]|0,h|0)do Gf(M,h),t[I>>2]=t[s+4>>2],OO(n,M,I),s=s+8|0,h=t[s>>2]|0;while((h|0)!=0);if(s=t[(kv()|0)>>2]|0,s|0)do n=t[s+4>>2]|0,Gf(M,t[(Nv(n)|0)>>2]|0),t[I>>2]=cE(n)|0,MO(r,M,I),s=t[s>>2]|0;while((s|0)!=0);if(Gf(N,0),s=dE()|0,t[M>>2]=t[N>>2],Cw(M,s,l),s=t[(kv()|0)>>2]|0,s|0){e=M+4|0,n=M+8|0,r=M+8|0;do{if(S=t[s+4>>2]|0,Gf(I,t[(Nv(S)|0)>>2]|0),kO(K,Iw(S)|0),h=t[K>>2]|0,h|0){t[M>>2]=0,t[e>>2]=0,t[n>>2]=0;do Gf(be,t[(Nv(t[h+4>>2]|0)|0)>>2]|0),D=t[e>>2]|0,D>>>0<(t[r>>2]|0)>>>0?(t[D>>2]=t[be>>2],t[e>>2]=(t[e>>2]|0)+4):hE(M,be),h=t[h>>2]|0;while((h|0)!=0);NO(u,I,M),L1(M)}t[Se>>2]=t[I>>2],N=bw(S)|0,t[M>>2]=t[Se>>2],Cw(M,N,l),_d(K),s=t[s>>2]|0}while((s|0)!=0)}m=ye}function AO(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,WO(e,n,r,u)}function OO(e,n,r){e=e|0,n=n|0,r=r|0,qO(e,n,r)}function Nv(e){return e=e|0,e|0}function MO(e,n,r){e=e|0,n=n|0,r=r|0,UO(e,n,r)}function Iw(e){return e=e|0,e+16|0}function kO(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;if(s=m,m=m+16|0,l=s+8|0,r=s,t[e>>2]=0,u=t[n>>2]|0,t[l>>2]=u,t[r>>2]=e,r=BO(r)|0,u|0){if(u=pn(12)|0,h=(Bw(l)|0)+4|0,e=t[h+4>>2]|0,n=u+4|0,t[n>>2]=t[h>>2],t[n+4>>2]=e,n=t[t[l>>2]>>2]|0,t[l>>2]=n,!n)e=u;else for(n=u;e=pn(12)|0,S=(Bw(l)|0)+4|0,D=t[S+4>>2]|0,h=e+4|0,t[h>>2]=t[S>>2],t[h+4>>2]=D,t[n>>2]=e,h=t[t[l>>2]>>2]|0,t[l>>2]=h,h;)n=e;t[e>>2]=t[r>>2],t[r>>2]=u}m=s}function NO(e,n,r){e=e|0,n=n|0,r=r|0,LO(e,n,r)}function bw(e){return e=e|0,e+24|0}function LO(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+32|0,h=u+24|0,l=u+16|0,D=u+12|0,s=u,Ma(l),e=yo(e)|0,t[D>>2]=t[n>>2],mE(s,r),t[h>>2]=t[D>>2],FO(e,h,s),L1(s),ka(l),m=u}function FO(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+32|0,h=u+16|0,D=u+12|0,l=u,s=go(PO()|0)|0,t[D>>2]=t[n>>2],t[h>>2]=t[D>>2],n=Yp(h)|0,t[l>>2]=t[r>>2],h=r+4|0,t[l+4>>2]=t[h>>2],D=r+8|0,t[l+8>>2]=t[D>>2],t[D>>2]=0,t[h>>2]=0,t[r>>2]=0,P0(0,s|0,e|0,n|0,gE(l)|0)|0,L1(l),m=u}function PO(){var e=0;return p[7976]|0||(IO(10720),e=7976,t[e>>2]=1,t[e+4>>2]=0),10720}function IO(e){e=e|0,ol(e,bO()|0,2)}function bO(){return 1732}function BO(e){return e=e|0,t[e>>2]|0}function Bw(e){return e=e|0,t[e>>2]|0}function UO(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+32|0,s=u+16|0,l=u+8|0,h=u,Ma(l),e=yo(e)|0,t[h>>2]=t[n>>2],r=t[r>>2]|0,t[s>>2]=t[h>>2],Uw(e,s,r),ka(l),m=u}function Uw(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,s=u+4|0,h=u,l=go(jO()|0)|0,t[h>>2]=t[n>>2],t[s>>2]=t[h>>2],n=Yp(s)|0,P0(0,l|0,e|0,n|0,xw(r)|0)|0,m=u}function jO(){var e=0;return p[7984]|0||(zO(10732),e=7984,t[e>>2]=1,t[e+4>>2]=0),10732}function zO(e){e=e|0,ol(e,HO()|0,2)}function HO(){return 1744}function qO(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+32|0,s=u+16|0,l=u+8|0,h=u,Ma(l),e=yo(e)|0,t[h>>2]=t[n>>2],r=t[r>>2]|0,t[s>>2]=t[h>>2],Uw(e,s,r),ka(l),m=u}function WO(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+32|0,h=l+16|0,s=l+8|0,D=l,Ma(s),e=yo(e)|0,t[D>>2]=t[n>>2],r=p[r>>0]|0,u=p[u>>0]|0,t[h>>2]=t[D>>2],VO(e,h,r,u),ka(s),m=l}function VO(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,h=l+4|0,D=l,s=go(GO()|0)|0,t[D>>2]=t[n>>2],t[h>>2]=t[D>>2],n=Yp(h)|0,r=Lv(r)|0,Hn(0,s|0,e|0,n|0,r|0,Lv(u)|0)|0,m=l}function GO(){var e=0;return p[7992]|0||(KO(10744),e=7992,t[e>>2]=1,t[e+4>>2]=0),10744}function Lv(e){return e=e|0,YO(e)|0}function YO(e){return e=e|0,e&255|0}function KO(e){e=e|0,ol(e,XO()|0,3)}function XO(){return 1756}function QO(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;switch(K=m,m=m+32|0,D=K+8|0,S=K+4|0,N=K+20|0,M=K,Sa(e,0),u=YN(n)|0,t[D>>2]=0,I=D+4|0,t[I>>2]=0,t[D+8>>2]=0,u<<24>>24){case 0:{p[N>>0]=0,JO(S,r,N),s_(e,S)|0,U0(S);break}case 8:{I=TE(n)|0,p[N>>0]=8,Gf(M,t[I+4>>2]|0),ZO(S,r,N,M,I+8|0),s_(e,S)|0,U0(S);break}case 9:{if(s=TE(n)|0,n=t[s+4>>2]|0,n|0)for(h=D+8|0,l=s+12|0;n=n+-1|0,Gf(S,t[l>>2]|0),u=t[I>>2]|0,u>>>0<(t[h>>2]|0)>>>0?(t[u>>2]=t[S>>2],t[I>>2]=(t[I>>2]|0)+4):hE(D,S),n;)l=l+4|0;p[N>>0]=9,Gf(M,t[s+8>>2]|0),$O(S,r,N,M,D),s_(e,S)|0,U0(S);break}default:I=TE(n)|0,p[N>>0]=u,Gf(M,t[I+4>>2]|0),eM(S,r,N,M),s_(e,S)|0,U0(S)}L1(D),m=K}function JO(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;u=m,m=m+16|0,l=u,Ma(l),n=yo(n)|0,pM(e,n,p[r>>0]|0),ka(l),m=u}function s_(e,n){e=e|0,n=n|0;var r=0;return r=t[e>>2]|0,r|0&&qr(r|0),t[e>>2]=t[n>>2],t[n>>2]=0,e|0}function ZO(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0;s=m,m=m+32|0,D=s+16|0,h=s+8|0,S=s,Ma(h),n=yo(n)|0,r=p[r>>0]|0,t[S>>2]=t[u>>2],l=t[l>>2]|0,t[D>>2]=t[S>>2],aM(e,n,r,D,l),ka(h),m=s}function $O(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,N=0;s=m,m=m+32|0,S=s+24|0,h=s+16|0,N=s+12|0,D=s,Ma(h),n=yo(n)|0,r=p[r>>0]|0,t[N>>2]=t[u>>2],mE(D,l),t[S>>2]=t[N>>2],uM(e,n,r,S,D),L1(D),ka(h),m=s}function eM(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+32|0,h=l+16|0,s=l+8|0,D=l,Ma(s),n=yo(n)|0,r=p[r>>0]|0,t[D>>2]=t[u>>2],t[h>>2]=t[D>>2],tM(e,n,r,h),ka(s),m=l}function tM(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,s=l+4|0,D=l,h=go(nM()|0)|0,r=Lv(r)|0,t[D>>2]=t[u>>2],t[s>>2]=t[D>>2],a_(e,P0(0,h|0,n|0,r|0,Yp(s)|0)|0),m=l}function nM(){var e=0;return p[8e3]|0||(rM(10756),e=8e3,t[e>>2]=1,t[e+4>>2]=0),10756}function a_(e,n){e=e|0,n=n|0,Sa(e,n)}function rM(e){e=e|0,ol(e,iM()|0,2)}function iM(){return 1772}function uM(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,N=0;s=m,m=m+32|0,S=s+16|0,N=s+12|0,h=s,D=go(oM()|0)|0,r=Lv(r)|0,t[N>>2]=t[u>>2],t[S>>2]=t[N>>2],u=Yp(S)|0,t[h>>2]=t[l>>2],S=l+4|0,t[h+4>>2]=t[S>>2],N=l+8|0,t[h+8>>2]=t[N>>2],t[N>>2]=0,t[S>>2]=0,t[l>>2]=0,a_(e,Hn(0,D|0,n|0,r|0,u|0,gE(h)|0)|0),L1(h),m=s}function oM(){var e=0;return p[8008]|0||(lM(10768),e=8008,t[e>>2]=1,t[e+4>>2]=0),10768}function lM(e){e=e|0,ol(e,sM()|0,3)}function sM(){return 1784}function aM(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0;s=m,m=m+16|0,D=s+4|0,S=s,h=go(fM()|0)|0,r=Lv(r)|0,t[S>>2]=t[u>>2],t[D>>2]=t[S>>2],u=Yp(D)|0,a_(e,Hn(0,h|0,n|0,r|0,u|0,yE(l)|0)|0),m=s}function fM(){var e=0;return p[8016]|0||(cM(10780),e=8016,t[e>>2]=1,t[e+4>>2]=0),10780}function cM(e){e=e|0,ol(e,dM()|0,3)}function dM(){return 1800}function pM(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=go(hM()|0)|0,a_(e,Ki(0,u|0,n|0,Lv(r)|0)|0)}function hM(){var e=0;return p[8024]|0||(vM(10792),e=8024,t[e>>2]=1,t[e+4>>2]=0),10792}function vM(e){e=e|0,ol(e,mM()|0,1)}function mM(){return 1816}function yM(){gM(),_M(),EM()}function gM(){t[2702]=p8(65536)|0}function _M(){jM(10856)}function EM(){DM(10816)}function DM(e){e=e|0,wM(e,5044),SM(e)|0}function wM(e,n){e=e|0,n=n|0;var r=0;r=Ow()|0,t[e>>2]=r,FM(r,n),$d(t[e>>2]|0)}function SM(e){e=e|0;var n=0;return n=t[e>>2]|0,Vp(n,TM()|0),e|0}function TM(){var e=0;return p[8032]|0||(jw(10820),Wt(64,10820,ve|0)|0,e=8032,t[e>>2]=1,t[e+4>>2]=0),sr(10820)|0||jw(10820),10820}function jw(e){e=e|0,RM(e),Gp(e,25)}function CM(e){e=e|0,xM(e+24|0)}function xM(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function RM(e){e=e|0;var n=0;n=yr()|0,jn(e,5,18,n,kM()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function AM(e,n){e=e|0,n=n|0,OM(e,n)}function OM(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;r=m,m=m+16|0,u=r,l=r+4|0,Pf(l,n),t[u>>2]=If(l,n)|0,MM(e,u),m=r}function MM(e,n){e=e|0,n=n|0,zw(e+4|0,t[n>>2]|0),p[e+8>>0]=1}function zw(e,n){e=e|0,n=n|0,t[e>>2]=n}function kM(){return 1824}function NM(e){return e=e|0,LM(e)|0}function LM(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0;return r=m,m=m+16|0,l=r+4|0,h=r,u=Oa(8)|0,n=u,D=pn(4)|0,Pf(l,e),zw(D,If(l,e)|0),s=n+4|0,t[s>>2]=D,e=pn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],Mw(e,s,l),t[u>>2]=e,m=r,n|0}function Oa(e){e=e|0;var n=0,r=0;return e=e+7&-8,(e>>>0<=32768?(n=t[2701]|0,e>>>0<=(65536-n|0)>>>0):0)?(r=(t[2702]|0)+n|0,t[2701]=n+e,e=r):(e=p8(e+8|0)|0,t[e>>2]=t[2703],t[2703]=e,e=e+8|0),e|0}function FM(e,n){e=e|0,n=n|0,t[e>>2]=PM()|0,t[e+4>>2]=IM()|0,t[e+12>>2]=n,t[e+8>>2]=bM()|0,t[e+32>>2]=9}function PM(){return 11744}function IM(){return 1832}function bM(){return o_()|0}function BM(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(zl(u,896)|0)==512?r|0&&(UM(r),_t(r)):n|0&&_t(n)}function UM(e){e=e|0,e=t[e+4>>2]|0,e|0&&e2(e)}function jM(e){e=e|0,zM(e,5052),HM(e)|0,qM(e,5058,26)|0,WM(e,5069,1)|0,VM(e,5077,10)|0,GM(e,5087,19)|0,YM(e,5094,27)|0}function zM(e,n){e=e|0,n=n|0;var r=0;r=UN()|0,t[e>>2]=r,jN(r,n),$d(t[e>>2]|0)}function HM(e){e=e|0;var n=0;return n=t[e>>2]|0,Vp(n,CN()|0),e|0}function qM(e,n,r){return e=e|0,n=n|0,r=r|0,lN(e,Fr(n)|0,r,0),e|0}function WM(e,n,r){return e=e|0,n=n|0,r=r|0,Gk(e,Fr(n)|0,r,0),e|0}function VM(e,n,r){return e=e|0,n=n|0,r=r|0,Tk(e,Fr(n)|0,r,0),e|0}function GM(e,n,r){return e=e|0,n=n|0,r=r|0,ak(e,Fr(n)|0,r,0),e|0}function Hw(e,n){e=e|0,n=n|0;var r=0,u=0;e:for(;;){for(r=t[2703]|0;;){if((r|0)==(n|0))break e;if(u=t[r>>2]|0,t[2703]=u,!r)r=u;else break}_t(r)}t[2701]=e}function YM(e,n,r){return e=e|0,n=n|0,r=r|0,KM(e,Fr(n)|0,r,0),e|0}function KM(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=_E()|0,e=XM(r)|0,wi(s,n,l,e,QM(r,u)|0,u)}function _E(){var e=0,n=0;if(p[8040]|0||(Ww(10860),Wt(65,10860,ve|0)|0,n=8040,t[n>>2]=1,t[n+4>>2]=0),!(sr(10860)|0)){e=10860,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ww(10860)}return 10860}function XM(e){return e=e|0,e|0}function QM(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=_E()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(qw(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(JM(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function qw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function JM(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=ZM(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,M=(t[e+8>>2]|0)-S|0,N=M>>2,$M(l,M>>3>>>0>>1>>>0?N>>>0>>0?h:N:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,qw(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,ek(e,l),tk(l),m=D;return}}function ZM(e){return e=e|0,536870911}function $M(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function ek(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function tk(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&_t(e)}function Ww(e){e=e|0,ik(e)}function nk(e){e=e|0,rk(e+24|0)}function rk(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function ik(e){e=e|0;var n=0;n=yr()|0,jn(e,1,11,n,uk()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function uk(){return 1840}function ok(e,n,r){e=e|0,n=n|0,r=r|0,sk(t[(lk(e)|0)>>2]|0,n,r)}function lk(e){return e=e|0,(t[(_E()|0)+24>>2]|0)+(e<<3)|0}function sk(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;u=m,m=m+16|0,s=u+1|0,l=u,Pf(s,n),n=If(s,n)|0,Pf(l,r),r=If(l,r)|0,P1[e&31](n,r),m=u}function ak(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=EE()|0,e=fk(r)|0,wi(s,n,l,e,ck(r,u)|0,u)}function EE(){var e=0,n=0;if(p[8048]|0||(Gw(10896),Wt(66,10896,ve|0)|0,n=8048,t[n>>2]=1,t[n+4>>2]=0),!(sr(10896)|0)){e=10896,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Gw(10896)}return 10896}function fk(e){return e=e|0,e|0}function ck(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=EE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(Vw(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(dk(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function Vw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function dk(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=pk(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,M=(t[e+8>>2]|0)-S|0,N=M>>2,hk(l,M>>3>>>0>>1>>>0?N>>>0>>0?h:N:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,Vw(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,vk(e,l),mk(l),m=D;return}}function pk(e){return e=e|0,536870911}function hk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function vk(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function mk(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&_t(e)}function Gw(e){e=e|0,_k(e)}function yk(e){e=e|0,gk(e+24|0)}function gk(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function _k(e){e=e|0;var n=0;n=yr()|0,jn(e,1,11,n,Ek()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Ek(){return 1852}function Dk(e,n){return e=e|0,n=n|0,Sk(t[(wk(e)|0)>>2]|0,n)|0}function wk(e){return e=e|0,(t[(EE()|0)+24>>2]|0)+(e<<3)|0}function Sk(e,n){e=e|0,n=n|0;var r=0,u=0;return r=m,m=m+16|0,u=r,Pf(u,n),n=If(u,n)|0,n=H0(Jp[e&31](n)|0)|0,m=r,n|0}function Tk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=DE()|0,e=Ck(r)|0,wi(s,n,l,e,xk(r,u)|0,u)}function DE(){var e=0,n=0;if(p[8056]|0||(Kw(10932),Wt(67,10932,ve|0)|0,n=8056,t[n>>2]=1,t[n+4>>2]=0),!(sr(10932)|0)){e=10932,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Kw(10932)}return 10932}function Ck(e){return e=e|0,e|0}function xk(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=DE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(Yw(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(Rk(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function Yw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function Rk(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=Ak(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,M=(t[e+8>>2]|0)-S|0,N=M>>2,Ok(l,M>>3>>>0>>1>>>0?N>>>0>>0?h:N:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,Yw(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,Mk(e,l),kk(l),m=D;return}}function Ak(e){return e=e|0,536870911}function Ok(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function Mk(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function kk(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&_t(e)}function Kw(e){e=e|0,Fk(e)}function Nk(e){e=e|0,Lk(e+24|0)}function Lk(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function Fk(e){e=e|0;var n=0;n=yr()|0,jn(e,1,7,n,Pk()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Pk(){return 1860}function Ik(e,n,r){return e=e|0,n=n|0,r=r|0,Bk(t[(bk(e)|0)>>2]|0,n,r)|0}function bk(e){return e=e|0,(t[(DE()|0)+24>>2]|0)+(e<<3)|0}function Bk(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0;return u=m,m=m+32|0,h=u+12|0,s=u+8|0,D=u,S=u+16|0,l=u+4|0,Uk(S,n),jk(D,S,n),Ys(l,r),r=Ks(l,r)|0,t[h>>2]=t[D>>2],Ry[e&15](s,h,r),r=zk(s)|0,U0(s),Xs(l),m=u,r|0}function Uk(e,n){e=e|0,n=n|0}function jk(e,n,r){e=e|0,n=n|0,r=r|0,Hk(e,r)}function zk(e){return e=e|0,yo(e)|0}function Hk(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;l=m,m=m+16|0,r=l,u=n,u&1?(qk(r,0),eu(u|0,r|0)|0,Wk(e,r),Vk(r)):t[e>>2]=t[n>>2],m=l}function qk(e,n){e=e|0,n=n|0,fd(e,n),t[e+4>>2]=0,p[e+8>>0]=0}function Wk(e,n){e=e|0,n=n|0,t[e>>2]=t[n+4>>2]}function Vk(e){e=e|0,p[e+8>>0]=0}function Gk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=wE()|0,e=Yk(r)|0,wi(s,n,l,e,Kk(r,u)|0,u)}function wE(){var e=0,n=0;if(p[8064]|0||(Qw(10968),Wt(68,10968,ve|0)|0,n=8064,t[n>>2]=1,t[n+4>>2]=0),!(sr(10968)|0)){e=10968,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Qw(10968)}return 10968}function Yk(e){return e=e|0,e|0}function Kk(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=wE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(Xw(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(Xk(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function Xw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function Xk(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=Qk(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,M=(t[e+8>>2]|0)-S|0,N=M>>2,Jk(l,M>>3>>>0>>1>>>0?N>>>0>>0?h:N:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,Xw(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,Zk(e,l),$k(l),m=D;return}}function Qk(e){return e=e|0,536870911}function Jk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function Zk(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function $k(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&_t(e)}function Qw(e){e=e|0,nN(e)}function eN(e){e=e|0,tN(e+24|0)}function tN(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function nN(e){e=e|0;var n=0;n=yr()|0,jn(e,1,1,n,rN()|0,5),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function rN(){return 1872}function iN(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,oN(t[(uN(e)|0)>>2]|0,n,r,u,l,s)}function uN(e){return e=e|0,(t[(wE()|0)+24>>2]|0)+(e<<3)|0}function oN(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,N=0,M=0,I=0;h=m,m=m+32|0,D=h+16|0,S=h+12|0,N=h+8|0,M=h+4|0,I=h,Ys(D,n),n=Ks(D,n)|0,Ys(S,r),r=Ks(S,r)|0,Ys(N,u),u=Ks(N,u)|0,Ys(M,l),l=Ks(M,l)|0,Ys(I,s),s=Ks(I,s)|0,g8[e&1](n,r,u,l,s),Xs(I),Xs(M),Xs(N),Xs(S),Xs(D),m=h}function lN(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=SE()|0,e=sN(r)|0,wi(s,n,l,e,aN(r,u)|0,u)}function SE(){var e=0,n=0;if(p[8072]|0||(Zw(11004),Wt(69,11004,ve|0)|0,n=8072,t[n>>2]=1,t[n+4>>2]=0),!(sr(11004)|0)){e=11004,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Zw(11004)}return 11004}function sN(e){return e=e|0,e|0}function aN(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=SE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(Jw(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(fN(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function Jw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function fN(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=cN(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,M=(t[e+8>>2]|0)-S|0,N=M>>2,dN(l,M>>3>>>0>>1>>>0?N>>>0>>0?h:N:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,Jw(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,pN(e,l),hN(l),m=D;return}}function cN(e){return e=e|0,536870911}function dN(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function pN(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(gr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function hN(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&_t(e)}function Zw(e){e=e|0,yN(e)}function vN(e){e=e|0,mN(e+24|0)}function mN(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function yN(e){e=e|0;var n=0;n=yr()|0,jn(e,1,12,n,gN()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gN(){return 1896}function _N(e,n,r){e=e|0,n=n|0,r=r|0,DN(t[(EN(e)|0)>>2]|0,n,r)}function EN(e){return e=e|0,(t[(SE()|0)+24>>2]|0)+(e<<3)|0}function DN(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;u=m,m=m+16|0,s=u+4|0,l=u,wN(s,n),n=SN(s,n)|0,Ys(l,r),r=Ks(l,r)|0,P1[e&31](n,r),Xs(l),m=u}function wN(e,n){e=e|0,n=n|0}function SN(e,n){return e=e|0,n=n|0,TN(n)|0}function TN(e){return e=e|0,e|0}function CN(){var e=0;return p[8080]|0||($w(11040),Wt(70,11040,ve|0)|0,e=8080,t[e>>2]=1,t[e+4>>2]=0),sr(11040)|0||$w(11040),11040}function $w(e){e=e|0,AN(e),Gp(e,71)}function xN(e){e=e|0,RN(e+24|0)}function RN(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),_t(r))}function AN(e){e=e|0;var n=0;n=yr()|0,jn(e,5,7,n,NN()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function ON(e){e=e|0,MN(e)}function MN(e){e=e|0,kN(e)}function kN(e){e=e|0,p[e+8>>0]=1}function NN(){return 1936}function LN(){return FN()|0}function FN(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0;return n=m,m=m+16|0,l=n+4|0,h=n,r=Oa(8)|0,e=r,s=e+4|0,t[s>>2]=pn(1)|0,u=pn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],PN(u,s,l),t[r>>2]=u,m=n,e|0}function PN(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=pn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1916,t[r+12>>2]=n,t[e+4>>2]=r}function IN(e){e=e|0,Iv(e),_t(e)}function bN(e){e=e|0,e=t[e+12>>2]|0,e|0&&_t(e)}function BN(e){e=e|0,_t(e)}function UN(){var e=0;return p[8088]|0||(GN(11076),Wt(25,11076,ve|0)|0,e=8088,t[e>>2]=1,t[e+4>>2]=0),11076}function jN(e,n){e=e|0,n=n|0,t[e>>2]=zN()|0,t[e+4>>2]=HN()|0,t[e+12>>2]=n,t[e+8>>2]=qN()|0,t[e+32>>2]=10}function zN(){return 11745}function HN(){return 1940}function qN(){return N1()|0}function WN(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(zl(u,896)|0)==512?r|0&&(VN(r),_t(r)):n|0&&_t(n)}function VN(e){e=e|0,e=t[e+4>>2]|0,e|0&&e2(e)}function GN(e){e=e|0,Xa(e)}function Gf(e,n){e=e|0,n=n|0,t[e>>2]=n}function TE(e){return e=e|0,t[e>>2]|0}function YN(e){return e=e|0,p[t[e>>2]>>0]|0}function KN(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,t[u>>2]=t[e>>2],XN(n,u)|0,m=r}function XN(e,n){e=e|0,n=n|0;var r=0;return r=QN(t[e>>2]|0,n)|0,n=e+4|0,t[(t[n>>2]|0)+8>>2]=r,t[(t[n>>2]|0)+8>>2]|0}function QN(e,n){e=e|0,n=n|0;var r=0,u=0;return r=m,m=m+16|0,u=r,Ma(u),e=yo(e)|0,n=JN(e,t[n>>2]|0)|0,ka(u),m=r,n|0}function Ma(e){e=e|0,t[e>>2]=t[2701],t[e+4>>2]=t[2703]}function JN(e,n){e=e|0,n=n|0;var r=0;return r=go(ZN()|0)|0,Ki(0,r|0,e|0,yE(n)|0)|0}function ka(e){e=e|0,Hw(t[e>>2]|0,t[e+4>>2]|0)}function ZN(){var e=0;return p[8096]|0||($N(11120),e=8096,t[e>>2]=1,t[e+4>>2]=0),11120}function $N(e){e=e|0,ol(e,eL()|0,1)}function eL(){return 1948}function tL(){nL()}function nL(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0,be=0,Se=0,ye=0;if(Se=m,m=m+16|0,M=Se+4|0,I=Se,bn(65536,10804,t[2702]|0,10812),r=Sw()|0,n=t[r>>2]|0,e=t[n>>2]|0,e|0)for(u=t[r+8>>2]|0,r=t[r+4>>2]|0;Xl(e|0,k[r>>0]|0|0,p[u>>0]|0),n=n+4|0,e=t[n>>2]|0,e;)u=u+1|0,r=r+1|0;if(e=Tw()|0,n=t[e>>2]|0,n|0)do Mo(n|0,t[e+4>>2]|0),e=e+8|0,n=t[e>>2]|0;while((n|0)!=0);Mo(rL()|0,5167),N=kv()|0,e=t[N>>2]|0;e:do if(e|0){do iL(t[e+4>>2]|0),e=t[e>>2]|0;while((e|0)!=0);if(e=t[N>>2]|0,e|0){S=N;do{for(;l=e,e=t[e>>2]|0,l=t[l+4>>2]|0,!!(uL(l)|0);)if(t[I>>2]=S,t[M>>2]=t[I>>2],oL(N,M)|0,!e)break e;if(lL(l),S=t[S>>2]|0,n=e8(l)|0,s=ao()|0,h=m,m=m+((1*(n<<2)|0)+15&-16)|0,D=m,m=m+((1*(n<<2)|0)+15&-16)|0,n=t[(Iw(l)|0)>>2]|0,n|0)for(r=h,u=D;t[r>>2]=t[(Nv(t[n+4>>2]|0)|0)>>2],t[u>>2]=t[n+8>>2],n=t[n>>2]|0,n;)r=r+4|0,u=u+4|0;ye=Nv(l)|0,n=sL(l)|0,r=e8(l)|0,u=aL(l)|0,ko(ye|0,n|0,h|0,D|0,r|0,u|0,cE(l)|0),gi(s|0)}while((e|0)!=0)}}while(0);if(e=t[(dE()|0)>>2]|0,e|0)do ye=e+4|0,N=pE(ye)|0,l=Sy(N)|0,s=Dy(N)|0,h=(wy(N)|0)+1|0,D=f_(N)|0,S=t8(ye)|0,N=sr(N)|0,M=l_(ye)|0,I=CE(ye)|0,so(0,l|0,s|0,h|0,D|0,S|0,N|0,M|0,I|0,xE(ye)|0),e=t[e>>2]|0;while((e|0)!=0);e=t[(kv()|0)>>2]|0;e:do if(e|0){t:for(;;){if(n=t[e+4>>2]|0,n|0?(K=t[(Nv(n)|0)>>2]|0,be=t[(bw(n)|0)>>2]|0,be|0):0){r=be;do{n=r+4|0,u=pE(n)|0;n:do if(u|0)switch(sr(u)|0){case 0:break t;case 4:case 3:case 2:{D=Sy(u)|0,S=Dy(u)|0,N=(wy(u)|0)+1|0,M=f_(u)|0,I=sr(u)|0,ye=l_(n)|0,so(K|0,D|0,S|0,N|0,M|0,0,I|0,ye|0,CE(n)|0,xE(n)|0);break n}case 1:{h=Sy(u)|0,D=Dy(u)|0,S=(wy(u)|0)+1|0,N=f_(u)|0,M=t8(n)|0,I=sr(u)|0,ye=l_(n)|0,so(K|0,h|0,D|0,S|0,N|0,M|0,I|0,ye|0,CE(n)|0,xE(n)|0);break n}case 5:{N=Sy(u)|0,M=Dy(u)|0,I=(wy(u)|0)+1|0,ye=f_(u)|0,so(K|0,N|0,M|0,I|0,ye|0,fL(u)|0,sr(u)|0,0,0,0);break n}default:break n}while(0);r=t[r>>2]|0}while((r|0)!=0)}if(e=t[e>>2]|0,!e)break e}$n()}while(0);Is(),m=Se}function rL(){return 11703}function iL(e){e=e|0,p[e+40>>0]=0}function uL(e){return e=e|0,(p[e+40>>0]|0)!=0|0}function oL(e,n){return e=e|0,n=n|0,n=cL(n)|0,e=t[n>>2]|0,t[n>>2]=t[e>>2],_t(e),t[n>>2]|0}function lL(e){e=e|0,p[e+40>>0]=1}function e8(e){return e=e|0,t[e+20>>2]|0}function sL(e){return e=e|0,t[e+8>>2]|0}function aL(e){return e=e|0,t[e+32>>2]|0}function f_(e){return e=e|0,t[e+4>>2]|0}function t8(e){return e=e|0,t[e+4>>2]|0}function CE(e){return e=e|0,t[e+8>>2]|0}function xE(e){return e=e|0,t[e+16>>2]|0}function fL(e){return e=e|0,t[e+20>>2]|0}function cL(e){return e=e|0,t[e>>2]|0}function c_(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0,be=0,Se=0,ye=0,Je=0,Ge=0,ft=0,Me=0,Pe=0,Zt=0;Zt=m,m=m+16|0,K=Zt;do if(e>>>0<245){if(N=e>>>0<11?16:e+11&-8,e=N>>>3,I=t[2783]|0,r=I>>>e,r&3|0)return n=(r&1^1)+e|0,e=11172+(n<<1<<2)|0,r=e+8|0,u=t[r>>2]|0,l=u+8|0,s=t[l>>2]|0,(e|0)==(s|0)?t[2783]=I&~(1<>2]=e,t[r>>2]=s),Pe=n<<3,t[u+4>>2]=Pe|3,Pe=u+Pe+4|0,t[Pe>>2]=t[Pe>>2]|1,Pe=l,m=Zt,Pe|0;if(M=t[2785]|0,N>>>0>M>>>0){if(r|0)return n=2<>>12&16,n=n>>>h,r=n>>>5&8,n=n>>>r,l=n>>>2&4,n=n>>>l,e=n>>>1&2,n=n>>>e,u=n>>>1&1,u=(r|h|l|e|u)+(n>>>u)|0,n=11172+(u<<1<<2)|0,e=n+8|0,l=t[e>>2]|0,h=l+8|0,r=t[h>>2]|0,(n|0)==(r|0)?(e=I&~(1<>2]=n,t[e>>2]=r,e=I),s=(u<<3)-N|0,t[l+4>>2]=N|3,u=l+N|0,t[u+4>>2]=s|1,t[u+s>>2]=s,M|0&&(l=t[2788]|0,n=M>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=l,t[n+12>>2]=l,t[l+8>>2]=n,t[l+12>>2]=r),t[2785]=s,t[2788]=u,Pe=h,m=Zt,Pe|0;if(D=t[2784]|0,D){if(r=(D&0-D)+-1|0,h=r>>>12&16,r=r>>>h,s=r>>>5&8,r=r>>>s,S=r>>>2&4,r=r>>>S,u=r>>>1&2,r=r>>>u,e=r>>>1&1,e=t[11436+((s|h|S|u|e)+(r>>>e)<<2)>>2]|0,r=(t[e+4>>2]&-8)-N|0,u=t[e+16+(((t[e+16>>2]|0)==0&1)<<2)>>2]|0,!u)S=e,s=r;else{do h=(t[u+4>>2]&-8)-N|0,S=h>>>0>>0,r=S?h:r,e=S?u:e,u=t[u+16+(((t[u+16>>2]|0)==0&1)<<2)>>2]|0;while((u|0)!=0);S=e,s=r}if(h=S+N|0,S>>>0>>0){l=t[S+24>>2]|0,n=t[S+12>>2]|0;do if((n|0)==(S|0)){if(e=S+20|0,n=t[e>>2]|0,!n&&(e=S+16|0,n=t[e>>2]|0,!n)){r=0;break}for(;;){if(r=n+20|0,u=t[r>>2]|0,u|0){n=u,e=r;continue}if(r=n+16|0,u=t[r>>2]|0,u)n=u,e=r;else break}t[e>>2]=0,r=n}else r=t[S+8>>2]|0,t[r+12>>2]=n,t[n+8>>2]=r,r=n;while(0);do if(l|0){if(n=t[S+28>>2]|0,e=11436+(n<<2)|0,(S|0)==(t[e>>2]|0)){if(t[e>>2]=r,!r){t[2784]=D&~(1<>2]|0)!=(S|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=l,n=t[S+16>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),n=t[S+20>>2]|0,n|0&&(t[r+20>>2]=n,t[n+24>>2]=r)}while(0);return s>>>0<16?(Pe=s+N|0,t[S+4>>2]=Pe|3,Pe=S+Pe+4|0,t[Pe>>2]=t[Pe>>2]|1):(t[S+4>>2]=N|3,t[h+4>>2]=s|1,t[h+s>>2]=s,M|0&&(u=t[2788]|0,n=M>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=I|n,n=r,e=r+8|0),t[e>>2]=u,t[n+12>>2]=u,t[u+8>>2]=n,t[u+12>>2]=r),t[2785]=s,t[2788]=h),Pe=S+8|0,m=Zt,Pe|0}else I=N}else I=N}else I=N}else if(e>>>0<=4294967231)if(e=e+11|0,N=e&-8,S=t[2784]|0,S){u=0-N|0,e=e>>>8,e?N>>>0>16777215?D=31:(I=(e+1048320|0)>>>16&8,Me=e<>>16&4,Me=Me<>>16&2,D=14-(M|I|D)+(Me<>>15)|0,D=N>>>(D+7|0)&1|D<<1):D=0,r=t[11436+(D<<2)>>2]|0;e:do if(!r)r=0,e=0,Me=57;else for(e=0,h=N<<((D|0)==31?0:25-(D>>>1)|0),s=0;;){if(l=(t[r+4>>2]&-8)-N|0,l>>>0>>0)if(l)e=r,u=l;else{e=r,u=0,l=r,Me=61;break e}if(l=t[r+20>>2]|0,r=t[r+16+(h>>>31<<2)>>2]|0,s=(l|0)==0|(l|0)==(r|0)?s:l,l=(r|0)==0,l){r=s,Me=57;break}else h=h<<((l^1)&1)}while(0);if((Me|0)==57){if((r|0)==0&(e|0)==0){if(e=2<>>12&16,I=I>>>h,s=I>>>5&8,I=I>>>s,D=I>>>2&4,I=I>>>D,M=I>>>1&2,I=I>>>M,r=I>>>1&1,e=0,r=t[11436+((s|h|D|M|r)+(I>>>r)<<2)>>2]|0}r?(l=r,Me=61):(D=e,h=u)}if((Me|0)==61)for(;;)if(Me=0,r=(t[l+4>>2]&-8)-N|0,I=r>>>0>>0,r=I?r:u,e=I?l:e,l=t[l+16+(((t[l+16>>2]|0)==0&1)<<2)>>2]|0,l)u=r,Me=61;else{D=e,h=r;break}if((D|0)!=0?h>>>0<((t[2785]|0)-N|0)>>>0:0){if(s=D+N|0,D>>>0>=s>>>0)return Pe=0,m=Zt,Pe|0;l=t[D+24>>2]|0,n=t[D+12>>2]|0;do if((n|0)==(D|0)){if(e=D+20|0,n=t[e>>2]|0,!n&&(e=D+16|0,n=t[e>>2]|0,!n)){n=0;break}for(;;){if(r=n+20|0,u=t[r>>2]|0,u|0){n=u,e=r;continue}if(r=n+16|0,u=t[r>>2]|0,u)n=u,e=r;else break}t[e>>2]=0}else Pe=t[D+8>>2]|0,t[Pe+12>>2]=n,t[n+8>>2]=Pe;while(0);do if(l){if(e=t[D+28>>2]|0,r=11436+(e<<2)|0,(D|0)==(t[r>>2]|0)){if(t[r>>2]=n,!n){u=S&~(1<>2]|0)!=(D|0)&1)<<2)>>2]=n,!n){u=S;break}t[n+24>>2]=l,e=t[D+16>>2]|0,e|0&&(t[n+16>>2]=e,t[e+24>>2]=n),e=t[D+20>>2]|0,e&&(t[n+20>>2]=e,t[e+24>>2]=n),u=S}else u=S;while(0);do if(h>>>0>=16){if(t[D+4>>2]=N|3,t[s+4>>2]=h|1,t[s+h>>2]=h,n=h>>>3,h>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=s,t[n+12>>2]=s,t[s+8>>2]=n,t[s+12>>2]=r;break}if(n=h>>>8,n?h>>>0>16777215?n=31:(Me=(n+1048320|0)>>>16&8,Pe=n<>>16&4,Pe=Pe<>>16&2,n=14-(ft|Me|n)+(Pe<>>15)|0,n=h>>>(n+7|0)&1|n<<1):n=0,r=11436+(n<<2)|0,t[s+28>>2]=n,e=s+16|0,t[e+4>>2]=0,t[e>>2]=0,e=1<>2]=s,t[s+24>>2]=r,t[s+12>>2]=s,t[s+8>>2]=s;break}for(e=h<<((n|0)==31?0:25-(n>>>1)|0),r=t[r>>2]|0;;){if((t[r+4>>2]&-8|0)==(h|0)){Me=97;break}if(u=r+16+(e>>>31<<2)|0,n=t[u>>2]|0,n)e=e<<1,r=n;else{Me=96;break}}if((Me|0)==96){t[u>>2]=s,t[s+24>>2]=r,t[s+12>>2]=s,t[s+8>>2]=s;break}else if((Me|0)==97){Me=r+8|0,Pe=t[Me>>2]|0,t[Pe+12>>2]=s,t[Me>>2]=s,t[s+8>>2]=Pe,t[s+12>>2]=r,t[s+24>>2]=0;break}}else Pe=h+N|0,t[D+4>>2]=Pe|3,Pe=D+Pe+4|0,t[Pe>>2]=t[Pe>>2]|1;while(0);return Pe=D+8|0,m=Zt,Pe|0}else I=N}else I=N;else I=-1;while(0);if(r=t[2785]|0,r>>>0>=I>>>0)return n=r-I|0,e=t[2788]|0,n>>>0>15?(Pe=e+I|0,t[2788]=Pe,t[2785]=n,t[Pe+4>>2]=n|1,t[Pe+n>>2]=n,t[e+4>>2]=I|3):(t[2785]=0,t[2788]=0,t[e+4>>2]=r|3,Pe=e+r+4|0,t[Pe>>2]=t[Pe>>2]|1),Pe=e+8|0,m=Zt,Pe|0;if(h=t[2786]|0,h>>>0>I>>>0)return ft=h-I|0,t[2786]=ft,Pe=t[2789]|0,Me=Pe+I|0,t[2789]=Me,t[Me+4>>2]=ft|1,t[Pe+4>>2]=I|3,Pe=Pe+8|0,m=Zt,Pe|0;if(t[2901]|0?e=t[2903]|0:(t[2903]=4096,t[2902]=4096,t[2904]=-1,t[2905]=-1,t[2906]=0,t[2894]=0,e=K&-16^1431655768,t[K>>2]=e,t[2901]=e,e=4096),D=I+48|0,S=I+47|0,s=e+S|0,l=0-e|0,N=s&l,N>>>0<=I>>>0||(e=t[2893]|0,e|0?(M=t[2891]|0,K=M+N|0,K>>>0<=M>>>0|K>>>0>e>>>0):0))return Pe=0,m=Zt,Pe|0;e:do if(t[2894]&4)n=0,Me=133;else{r=t[2789]|0;t:do if(r){for(u=11580;e=t[u>>2]|0,!(e>>>0<=r>>>0?(ye=u+4|0,(e+(t[ye>>2]|0)|0)>>>0>r>>>0):0);)if(e=t[u+8>>2]|0,e)u=e;else{Me=118;break t}if(n=s-h&l,n>>>0<2147483647)if(e=t2(n|0)|0,(e|0)==((t[u>>2]|0)+(t[ye>>2]|0)|0)){if((e|0)!=(-1|0)){h=n,s=e,Me=135;break e}}else u=e,Me=126;else n=0}else Me=118;while(0);do if((Me|0)==118)if(r=t2(0)|0,(r|0)!=(-1|0)?(n=r,be=t[2902]|0,Se=be+-1|0,n=((Se&n|0)==0?0:(Se+n&0-be)-n|0)+N|0,be=t[2891]|0,Se=n+be|0,n>>>0>I>>>0&n>>>0<2147483647):0){if(ye=t[2893]|0,ye|0?Se>>>0<=be>>>0|Se>>>0>ye>>>0:0){n=0;break}if(e=t2(n|0)|0,(e|0)==(r|0)){h=n,s=r,Me=135;break e}else u=e,Me=126}else n=0;while(0);do if((Me|0)==126){if(r=0-n|0,!(D>>>0>n>>>0&(n>>>0<2147483647&(u|0)!=(-1|0))))if((u|0)==(-1|0)){n=0;break}else{h=n,s=u,Me=135;break e}if(e=t[2903]|0,e=S-n+e&0-e,e>>>0>=2147483647){h=n,s=u,Me=135;break e}if((t2(e|0)|0)==(-1|0)){t2(r|0)|0,n=0;break}else{h=e+n|0,s=u,Me=135;break e}}while(0);t[2894]=t[2894]|4,Me=133}while(0);if((((Me|0)==133?N>>>0<2147483647:0)?(ft=t2(N|0)|0,ye=t2(0)|0,Je=ye-ft|0,Ge=Je>>>0>(I+40|0)>>>0,!((ft|0)==(-1|0)|Ge^1|ft>>>0>>0&((ft|0)!=(-1|0)&(ye|0)!=(-1|0))^1)):0)&&(h=Ge?Je:n,s=ft,Me=135),(Me|0)==135){n=(t[2891]|0)+h|0,t[2891]=n,n>>>0>(t[2892]|0)>>>0&&(t[2892]=n),S=t[2789]|0;do if(S){for(n=11580;;){if(e=t[n>>2]|0,r=n+4|0,u=t[r>>2]|0,(s|0)==(e+u|0)){Me=145;break}if(l=t[n+8>>2]|0,l)n=l;else break}if(((Me|0)==145?(t[n+12>>2]&8|0)==0:0)?S>>>0>>0&S>>>0>=e>>>0:0){t[r>>2]=u+h,Pe=S+8|0,Pe=(Pe&7|0)==0?0:0-Pe&7,Me=S+Pe|0,Pe=(t[2786]|0)+(h-Pe)|0,t[2789]=Me,t[2786]=Pe,t[Me+4>>2]=Pe|1,t[Me+Pe+4>>2]=40,t[2790]=t[2905];break}for(s>>>0<(t[2787]|0)>>>0&&(t[2787]=s),r=s+h|0,n=11580;;){if((t[n>>2]|0)==(r|0)){Me=153;break}if(e=t[n+8>>2]|0,e)n=e;else break}if((Me|0)==153?(t[n+12>>2]&8|0)==0:0){t[n>>2]=s,M=n+4|0,t[M>>2]=(t[M>>2]|0)+h,M=s+8|0,M=s+((M&7|0)==0?0:0-M&7)|0,n=r+8|0,n=r+((n&7|0)==0?0:0-n&7)|0,N=M+I|0,D=n-M-I|0,t[M+4>>2]=I|3;do if((n|0)!=(S|0)){if((n|0)==(t[2788]|0)){Pe=(t[2785]|0)+D|0,t[2785]=Pe,t[2788]=N,t[N+4>>2]=Pe|1,t[N+Pe>>2]=Pe;break}if(e=t[n+4>>2]|0,(e&3|0)==1){h=e&-8,u=e>>>3;e:do if(e>>>0<256)if(e=t[n+8>>2]|0,r=t[n+12>>2]|0,(r|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=r,t[r+8>>2]=e;break}else{s=t[n+24>>2]|0,e=t[n+12>>2]|0;do if((e|0)==(n|0)){if(u=n+16|0,r=u+4|0,e=t[r>>2]|0,!e)if(e=t[u>>2]|0,e)r=u;else{e=0;break}for(;;){if(u=e+20|0,l=t[u>>2]|0,l|0){e=l,r=u;continue}if(u=e+16|0,l=t[u>>2]|0,l)e=l,r=u;else break}t[r>>2]=0}else Pe=t[n+8>>2]|0,t[Pe+12>>2]=e,t[e+8>>2]=Pe;while(0);if(!s)break;r=t[n+28>>2]|0,u=11436+(r<<2)|0;do if((n|0)!=(t[u>>2]|0)){if(t[s+16+(((t[s+16>>2]|0)!=(n|0)&1)<<2)>>2]=e,!e)break e}else{if(t[u>>2]=e,e|0)break;t[2784]=t[2784]&~(1<>2]=s,r=n+16|0,u=t[r>>2]|0,u|0&&(t[e+16>>2]=u,t[u+24>>2]=e),r=t[r+4>>2]|0,!r)break;t[e+20>>2]=r,t[r+24>>2]=e}while(0);n=n+h|0,l=h+D|0}else l=D;if(n=n+4|0,t[n>>2]=t[n>>2]&-2,t[N+4>>2]=l|1,t[N+l>>2]=l,n=l>>>3,l>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=N,t[n+12>>2]=N,t[N+8>>2]=n,t[N+12>>2]=r;break}n=l>>>8;do if(!n)n=0;else{if(l>>>0>16777215){n=31;break}Me=(n+1048320|0)>>>16&8,Pe=n<>>16&4,Pe=Pe<>>16&2,n=14-(ft|Me|n)+(Pe<>>15)|0,n=l>>>(n+7|0)&1|n<<1}while(0);if(u=11436+(n<<2)|0,t[N+28>>2]=n,e=N+16|0,t[e+4>>2]=0,t[e>>2]=0,e=t[2784]|0,r=1<>2]=N,t[N+24>>2]=u,t[N+12>>2]=N,t[N+8>>2]=N;break}for(e=l<<((n|0)==31?0:25-(n>>>1)|0),r=t[u>>2]|0;;){if((t[r+4>>2]&-8|0)==(l|0)){Me=194;break}if(u=r+16+(e>>>31<<2)|0,n=t[u>>2]|0,n)e=e<<1,r=n;else{Me=193;break}}if((Me|0)==193){t[u>>2]=N,t[N+24>>2]=r,t[N+12>>2]=N,t[N+8>>2]=N;break}else if((Me|0)==194){Me=r+8|0,Pe=t[Me>>2]|0,t[Pe+12>>2]=N,t[Me>>2]=N,t[N+8>>2]=Pe,t[N+12>>2]=r,t[N+24>>2]=0;break}}else Pe=(t[2786]|0)+D|0,t[2786]=Pe,t[2789]=N,t[N+4>>2]=Pe|1;while(0);return Pe=M+8|0,m=Zt,Pe|0}for(n=11580;e=t[n>>2]|0,!(e>>>0<=S>>>0?(Pe=e+(t[n+4>>2]|0)|0,Pe>>>0>S>>>0):0);)n=t[n+8>>2]|0;l=Pe+-47|0,e=l+8|0,e=l+((e&7|0)==0?0:0-e&7)|0,l=S+16|0,e=e>>>0>>0?S:e,n=e+8|0,r=s+8|0,r=(r&7|0)==0?0:0-r&7,Me=s+r|0,r=h+-40-r|0,t[2789]=Me,t[2786]=r,t[Me+4>>2]=r|1,t[Me+r+4>>2]=40,t[2790]=t[2905],r=e+4|0,t[r>>2]=27,t[n>>2]=t[2895],t[n+4>>2]=t[2896],t[n+8>>2]=t[2897],t[n+12>>2]=t[2898],t[2895]=s,t[2896]=h,t[2898]=0,t[2897]=n,n=e+24|0;do Me=n,n=n+4|0,t[n>>2]=7;while((Me+8|0)>>>0>>0);if((e|0)!=(S|0)){if(s=e-S|0,t[r>>2]=t[r>>2]&-2,t[S+4>>2]=s|1,t[e>>2]=s,n=s>>>3,s>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=S,t[n+12>>2]=S,t[S+8>>2]=n,t[S+12>>2]=r;break}if(n=s>>>8,n?s>>>0>16777215?r=31:(Me=(n+1048320|0)>>>16&8,Pe=n<>>16&4,Pe=Pe<>>16&2,r=14-(ft|Me|r)+(Pe<>>15)|0,r=s>>>(r+7|0)&1|r<<1):r=0,u=11436+(r<<2)|0,t[S+28>>2]=r,t[S+20>>2]=0,t[l>>2]=0,n=t[2784]|0,e=1<>2]=S,t[S+24>>2]=u,t[S+12>>2]=S,t[S+8>>2]=S;break}for(e=s<<((r|0)==31?0:25-(r>>>1)|0),r=t[u>>2]|0;;){if((t[r+4>>2]&-8|0)==(s|0)){Me=216;break}if(u=r+16+(e>>>31<<2)|0,n=t[u>>2]|0,n)e=e<<1,r=n;else{Me=215;break}}if((Me|0)==215){t[u>>2]=S,t[S+24>>2]=r,t[S+12>>2]=S,t[S+8>>2]=S;break}else if((Me|0)==216){Me=r+8|0,Pe=t[Me>>2]|0,t[Pe+12>>2]=S,t[Me>>2]=S,t[S+8>>2]=Pe,t[S+12>>2]=r,t[S+24>>2]=0;break}}}else{Pe=t[2787]|0,(Pe|0)==0|s>>>0>>0&&(t[2787]=s),t[2895]=s,t[2896]=h,t[2898]=0,t[2792]=t[2901],t[2791]=-1,n=0;do Pe=11172+(n<<1<<2)|0,t[Pe+12>>2]=Pe,t[Pe+8>>2]=Pe,n=n+1|0;while((n|0)!=32);Pe=s+8|0,Pe=(Pe&7|0)==0?0:0-Pe&7,Me=s+Pe|0,Pe=h+-40-Pe|0,t[2789]=Me,t[2786]=Pe,t[Me+4>>2]=Pe|1,t[Me+Pe+4>>2]=40,t[2790]=t[2905]}while(0);if(n=t[2786]|0,n>>>0>I>>>0)return ft=n-I|0,t[2786]=ft,Pe=t[2789]|0,Me=Pe+I|0,t[2789]=Me,t[Me+4>>2]=ft|1,t[Pe+4>>2]=I|3,Pe=Pe+8|0,m=Zt,Pe|0}return t[(Fv()|0)>>2]=12,Pe=0,m=Zt,Pe|0}function d_(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0;if(!!e){r=e+-8|0,l=t[2787]|0,e=t[e+-4>>2]|0,n=e&-8,S=r+n|0;do if(e&1)D=r,h=r;else{if(u=t[r>>2]|0,!(e&3)||(h=r+(0-u)|0,s=u+n|0,h>>>0>>0))return;if((h|0)==(t[2788]|0)){if(e=S+4|0,n=t[e>>2]|0,(n&3|0)!=3){D=h,n=s;break}t[2785]=s,t[e>>2]=n&-2,t[h+4>>2]=s|1,t[h+s>>2]=s;return}if(r=u>>>3,u>>>0<256)if(e=t[h+8>>2]|0,n=t[h+12>>2]|0,(n|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=n,t[n+8>>2]=e,D=h,n=s;break}l=t[h+24>>2]|0,e=t[h+12>>2]|0;do if((e|0)==(h|0)){if(r=h+16|0,n=r+4|0,e=t[n>>2]|0,!e)if(e=t[r>>2]|0,e)n=r;else{e=0;break}for(;;){if(r=e+20|0,u=t[r>>2]|0,u|0){e=u,n=r;continue}if(r=e+16|0,u=t[r>>2]|0,u)e=u,n=r;else break}t[n>>2]=0}else D=t[h+8>>2]|0,t[D+12>>2]=e,t[e+8>>2]=D;while(0);if(l){if(n=t[h+28>>2]|0,r=11436+(n<<2)|0,(h|0)==(t[r>>2]|0)){if(t[r>>2]=e,!e){t[2784]=t[2784]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=e,!e){D=h,n=s;break}t[e+24>>2]=l,n=h+16|0,r=t[n>>2]|0,r|0&&(t[e+16>>2]=r,t[r+24>>2]=e),n=t[n+4>>2]|0,n?(t[e+20>>2]=n,t[n+24>>2]=e,D=h,n=s):(D=h,n=s)}else D=h,n=s}while(0);if(!(h>>>0>=S>>>0)&&(e=S+4|0,u=t[e>>2]|0,!!(u&1))){if(u&2)t[e>>2]=u&-2,t[D+4>>2]=n|1,t[h+n>>2]=n,l=n;else{if(e=t[2788]|0,(S|0)==(t[2789]|0)){if(S=(t[2786]|0)+n|0,t[2786]=S,t[2789]=D,t[D+4>>2]=S|1,(D|0)!=(e|0))return;t[2788]=0,t[2785]=0;return}if((S|0)==(e|0)){S=(t[2785]|0)+n|0,t[2785]=S,t[2788]=h,t[D+4>>2]=S|1,t[h+S>>2]=S;return}l=(u&-8)+n|0,r=u>>>3;do if(u>>>0<256)if(n=t[S+8>>2]|0,e=t[S+12>>2]|0,(e|0)==(n|0)){t[2783]=t[2783]&~(1<>2]=e,t[e+8>>2]=n;break}else{s=t[S+24>>2]|0,e=t[S+12>>2]|0;do if((e|0)==(S|0)){if(r=S+16|0,n=r+4|0,e=t[n>>2]|0,!e)if(e=t[r>>2]|0,e)n=r;else{r=0;break}for(;;){if(r=e+20|0,u=t[r>>2]|0,u|0){e=u,n=r;continue}if(r=e+16|0,u=t[r>>2]|0,u)e=u,n=r;else break}t[n>>2]=0,r=e}else r=t[S+8>>2]|0,t[r+12>>2]=e,t[e+8>>2]=r,r=e;while(0);if(s|0){if(e=t[S+28>>2]|0,n=11436+(e<<2)|0,(S|0)==(t[n>>2]|0)){if(t[n>>2]=r,!r){t[2784]=t[2784]&~(1<>2]|0)!=(S|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=s,e=S+16|0,n=t[e>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),e=t[e+4>>2]|0,e|0&&(t[r+20>>2]=e,t[e+24>>2]=r)}}while(0);if(t[D+4>>2]=l|1,t[h+l>>2]=l,(D|0)==(t[2788]|0)){t[2785]=l;return}}if(e=l>>>3,l>>>0<256){r=11172+(e<<1<<2)|0,n=t[2783]|0,e=1<>2]|0):(t[2783]=n|e,e=r,n=r+8|0),t[n>>2]=D,t[e+12>>2]=D,t[D+8>>2]=e,t[D+12>>2]=r;return}e=l>>>8,e?l>>>0>16777215?e=31:(h=(e+1048320|0)>>>16&8,S=e<>>16&4,S=S<>>16&2,e=14-(s|h|e)+(S<>>15)|0,e=l>>>(e+7|0)&1|e<<1):e=0,u=11436+(e<<2)|0,t[D+28>>2]=e,t[D+20>>2]=0,t[D+16>>2]=0,n=t[2784]|0,r=1<>>1)|0),r=t[u>>2]|0;;){if((t[r+4>>2]&-8|0)==(l|0)){e=73;break}if(u=r+16+(n>>>31<<2)|0,e=t[u>>2]|0,e)n=n<<1,r=e;else{e=72;break}}if((e|0)==72){t[u>>2]=D,t[D+24>>2]=r,t[D+12>>2]=D,t[D+8>>2]=D;break}else if((e|0)==73){h=r+8|0,S=t[h>>2]|0,t[S+12>>2]=D,t[h>>2]=D,t[D+8>>2]=S,t[D+12>>2]=r,t[D+24>>2]=0;break}}else t[2784]=n|r,t[u>>2]=D,t[D+24>>2]=u,t[D+12>>2]=D,t[D+8>>2]=D;while(0);if(S=(t[2791]|0)+-1|0,t[2791]=S,!S)e=11588;else return;for(;e=t[e>>2]|0,e;)e=e+8|0;t[2791]=-1}}}function dL(){return 11628}function pL(e){e=e|0;var n=0,r=0;return n=m,m=m+16|0,r=n,t[r>>2]=mL(t[e+60>>2]|0)|0,e=p_(Ou(6,r|0)|0)|0,m=n,e|0}function n8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0,be=0;I=m,m=m+48|0,N=I+16|0,s=I,l=I+32|0,D=e+28|0,u=t[D>>2]|0,t[l>>2]=u,S=e+20|0,u=(t[S>>2]|0)-u|0,t[l+4>>2]=u,t[l+8>>2]=n,t[l+12>>2]=r,u=u+r|0,h=e+60|0,t[s>>2]=t[h>>2],t[s+4>>2]=l,t[s+8>>2]=2,s=p_(v0(146,s|0)|0)|0;e:do if((u|0)!=(s|0)){for(n=2;!((s|0)<0);)if(u=u-s|0,be=t[l+4>>2]|0,K=s>>>0>be>>>0,l=K?l+8|0:l,n=(K<<31>>31)+n|0,be=s-(K?be:0)|0,t[l>>2]=(t[l>>2]|0)+be,K=l+4|0,t[K>>2]=(t[K>>2]|0)-be,t[N>>2]=t[h>>2],t[N+4>>2]=l,t[N+8>>2]=n,s=p_(v0(146,N|0)|0)|0,(u|0)==(s|0)){M=3;break e}t[e+16>>2]=0,t[D>>2]=0,t[S>>2]=0,t[e>>2]=t[e>>2]|32,(n|0)==2?r=0:r=r-(t[l+4>>2]|0)|0}else M=3;while(0);return(M|0)==3&&(be=t[e+44>>2]|0,t[e+16>>2]=be+(t[e+48>>2]|0),t[D>>2]=be,t[S>>2]=be),m=I,r|0}function hL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;return l=m,m=m+32|0,s=l,u=l+20|0,t[s>>2]=t[e+60>>2],t[s+4>>2]=0,t[s+8>>2]=n,t[s+12>>2]=u,t[s+16>>2]=r,(p_(Ni(140,s|0)|0)|0)<0?(t[u>>2]=-1,e=-1):e=t[u>>2]|0,m=l,e|0}function p_(e){return e=e|0,e>>>0>4294963200&&(t[(Fv()|0)>>2]=0-e,e=-1),e|0}function Fv(){return(vL()|0)+64|0}function vL(){return RE()|0}function RE(){return 2084}function mL(e){return e=e|0,e|0}function yL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;return l=m,m=m+32|0,u=l,t[e+36>>2]=1,((t[e>>2]&64|0)==0?(t[u>>2]=t[e+60>>2],t[u+4>>2]=21523,t[u+8>>2]=l+16,I0(54,u|0)|0):0)&&(p[e+75>>0]=-1),u=n8(e,n,r)|0,m=l,u|0}function r8(e,n){e=e|0,n=n|0;var r=0,u=0;if(r=p[e>>0]|0,u=p[n>>0]|0,r<<24>>24==0?1:r<<24>>24!=u<<24>>24)e=u;else{do e=e+1|0,n=n+1|0,r=p[e>>0]|0,u=p[n>>0]|0;while(!(r<<24>>24==0?1:r<<24>>24!=u<<24>>24));e=u}return(r&255)-(e&255)|0}function gL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;e:do if(!r)e=0;else{for(;u=p[e>>0]|0,l=p[n>>0]|0,u<<24>>24==l<<24>>24;)if(r=r+-1|0,r)e=e+1|0,n=n+1|0;else{e=0;break e}e=(u&255)-(l&255)|0}while(0);return e|0}function i8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0,be=0,Se=0,ye=0;ye=m,m=m+224|0,M=ye+120|0,I=ye+80|0,be=ye,Se=ye+136|0,u=I,l=u+40|0;do t[u>>2]=0,u=u+4|0;while((u|0)<(l|0));return t[M>>2]=t[r>>2],(AE(0,n,M,be,I)|0)<0?r=-1:((t[e+76>>2]|0)>-1?K=_L(e)|0:K=0,r=t[e>>2]|0,N=r&32,(p[e+74>>0]|0)<1&&(t[e>>2]=r&-33),u=e+48|0,t[u>>2]|0?r=AE(e,n,M,be,I)|0:(l=e+44|0,s=t[l>>2]|0,t[l>>2]=Se,h=e+28|0,t[h>>2]=Se,D=e+20|0,t[D>>2]=Se,t[u>>2]=80,S=e+16|0,t[S>>2]=Se+80,r=AE(e,n,M,be,I)|0,s&&(y_[t[e+36>>2]&7](e,0,0)|0,r=(t[D>>2]|0)==0?-1:r,t[l>>2]=s,t[u>>2]=0,t[S>>2]=0,t[h>>2]=0,t[D>>2]=0)),u=t[e>>2]|0,t[e>>2]=u|N,K|0&&EL(e),r=(u&32|0)==0?r:-1),m=ye,r|0}function AE(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0,be=0,Se=0,ye=0,Je=0,Ge=0,ft=0,Me=0,Pe=0,Zt=0,Br=0,In=0,gn=0,_r=0,Pr=0,Nn=0;Nn=m,m=m+64|0,In=Nn+16|0,gn=Nn,Zt=Nn+24|0,_r=Nn+8|0,Pr=Nn+20|0,t[In>>2]=n,ft=(e|0)!=0,Me=Zt+40|0,Pe=Me,Zt=Zt+39|0,Br=_r+4|0,h=0,s=0,M=0;e:for(;;){do if((s|0)>-1)if((h|0)>(2147483647-s|0)){t[(Fv()|0)>>2]=75,s=-1;break}else{s=h+s|0;break}while(0);if(h=p[n>>0]|0,h<<24>>24)D=n;else{Ge=87;break}t:for(;;){switch(h<<24>>24){case 37:{h=D,Ge=9;break t}case 0:{h=D;break t}default:}Je=D+1|0,t[In>>2]=Je,h=p[Je>>0]|0,D=Je}t:do if((Ge|0)==9)for(;;){if(Ge=0,(p[D+1>>0]|0)!=37)break t;if(h=h+1|0,D=D+2|0,t[In>>2]=D,(p[D>>0]|0)==37)Ge=9;else break}while(0);if(h=h-n|0,ft&&Go(e,n,h),h|0){n=D;continue}S=D+1|0,h=(p[S>>0]|0)+-48|0,h>>>0<10?(Je=(p[D+2>>0]|0)==36,ye=Je?h:-1,M=Je?1:M,S=Je?D+3|0:S):ye=-1,t[In>>2]=S,h=p[S>>0]|0,D=(h<<24>>24)+-32|0;t:do if(D>>>0<32)for(N=0,I=h;;){if(h=1<>2]=S,h=p[S>>0]|0,D=(h<<24>>24)+-32|0,D>>>0>=32)break;I=h}else N=0;while(0);if(h<<24>>24==42){if(D=S+1|0,h=(p[D>>0]|0)+-48|0,h>>>0<10?(p[S+2>>0]|0)==36:0)t[l+(h<<2)>>2]=10,h=t[u+((p[D>>0]|0)+-48<<3)>>2]|0,M=1,S=S+3|0;else{if(M|0){s=-1;break}ft?(M=(t[r>>2]|0)+(4-1)&~(4-1),h=t[M>>2]|0,t[r>>2]=M+4,M=0,S=D):(h=0,M=0,S=D)}t[In>>2]=S,Je=(h|0)<0,h=Je?0-h|0:h,N=Je?N|8192:N}else{if(h=u8(In)|0,(h|0)<0){s=-1;break}S=t[In>>2]|0}do if((p[S>>0]|0)==46){if((p[S+1>>0]|0)!=42){t[In>>2]=S+1,D=u8(In)|0,S=t[In>>2]|0;break}if(I=S+2|0,D=(p[I>>0]|0)+-48|0,D>>>0<10?(p[S+3>>0]|0)==36:0){t[l+(D<<2)>>2]=10,D=t[u+((p[I>>0]|0)+-48<<3)>>2]|0,S=S+4|0,t[In>>2]=S;break}if(M|0){s=-1;break e}ft?(Je=(t[r>>2]|0)+(4-1)&~(4-1),D=t[Je>>2]|0,t[r>>2]=Je+4):D=0,t[In>>2]=I,S=I}else D=-1;while(0);for(Se=0;;){if(((p[S>>0]|0)+-65|0)>>>0>57){s=-1;break e}if(Je=S+1|0,t[In>>2]=Je,I=p[(p[S>>0]|0)+-65+(5178+(Se*58|0))>>0]|0,K=I&255,(K+-1|0)>>>0<8)Se=K,S=Je;else break}if(!(I<<24>>24)){s=-1;break}be=(ye|0)>-1;do if(I<<24>>24==19)if(be){s=-1;break e}else Ge=49;else{if(be){t[l+(ye<<2)>>2]=K,be=u+(ye<<3)|0,ye=t[be+4>>2]|0,Ge=gn,t[Ge>>2]=t[be>>2],t[Ge+4>>2]=ye,Ge=49;break}if(!ft){s=0;break e}o8(gn,K,r)}while(0);if((Ge|0)==49?(Ge=0,!ft):0){h=0,n=Je;continue}S=p[S>>0]|0,S=(Se|0)!=0&(S&15|0)==3?S&-33:S,be=N&-65537,ye=(N&8192|0)==0?N:be;t:do switch(S|0){case 110:switch((Se&255)<<24>>24){case 0:{t[t[gn>>2]>>2]=s,h=0,n=Je;continue e}case 1:{t[t[gn>>2]>>2]=s,h=0,n=Je;continue e}case 2:{h=t[gn>>2]|0,t[h>>2]=s,t[h+4>>2]=((s|0)<0)<<31>>31,h=0,n=Je;continue e}case 3:{_[t[gn>>2]>>1]=s,h=0,n=Je;continue e}case 4:{p[t[gn>>2]>>0]=s,h=0,n=Je;continue e}case 6:{t[t[gn>>2]>>2]=s,h=0,n=Je;continue e}case 7:{h=t[gn>>2]|0,t[h>>2]=s,t[h+4>>2]=((s|0)<0)<<31>>31,h=0,n=Je;continue e}default:{h=0,n=Je;continue e}}case 112:{S=120,D=D>>>0>8?D:8,n=ye|8,Ge=61;break}case 88:case 120:{n=ye,Ge=61;break}case 111:{S=gn,n=t[S>>2]|0,S=t[S+4>>2]|0,K=wL(n,S,Me)|0,be=Pe-K|0,N=0,I=5642,D=(ye&8|0)==0|(D|0)>(be|0)?D:be+1|0,be=ye,Ge=67;break}case 105:case 100:if(S=gn,n=t[S>>2]|0,S=t[S+4>>2]|0,(S|0)<0){n=h_(0,0,n|0,S|0)|0,S=ut,N=gn,t[N>>2]=n,t[N+4>>2]=S,N=1,I=5642,Ge=66;break t}else{N=(ye&2049|0)!=0&1,I=(ye&2048|0)==0?(ye&1|0)==0?5642:5644:5643,Ge=66;break t}case 117:{S=gn,N=0,I=5642,n=t[S>>2]|0,S=t[S+4>>2]|0,Ge=66;break}case 99:{p[Zt>>0]=t[gn>>2],n=Zt,N=0,I=5642,K=Me,S=1,D=be;break}case 109:{S=SL(t[(Fv()|0)>>2]|0)|0,Ge=71;break}case 115:{S=t[gn>>2]|0,S=S|0?S:5652,Ge=71;break}case 67:{t[_r>>2]=t[gn>>2],t[Br>>2]=0,t[gn>>2]=_r,K=-1,S=_r,Ge=75;break}case 83:{n=t[gn>>2]|0,D?(K=D,S=n,Ge=75):(gl(e,32,h,0,ye),n=0,Ge=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{h=CL(e,+U[gn>>3],h,D,ye,S)|0,n=Je;continue e}default:N=0,I=5642,K=Me,S=D,D=ye}while(0);t:do if((Ge|0)==61)ye=gn,Se=t[ye>>2]|0,ye=t[ye+4>>2]|0,K=DL(Se,ye,Me,S&32)|0,I=(n&8|0)==0|(Se|0)==0&(ye|0)==0,N=I?0:2,I=I?5642:5642+(S>>4)|0,be=n,n=Se,S=ye,Ge=67;else if((Ge|0)==66)K=Pv(n,S,Me)|0,be=ye,Ge=67;else if((Ge|0)==71)Ge=0,ye=TL(S,0,D)|0,Se=(ye|0)==0,n=S,N=0,I=5642,K=Se?S+D|0:ye,S=Se?D:ye-S|0,D=be;else if((Ge|0)==75){for(Ge=0,I=S,n=0,D=0;N=t[I>>2]|0,!(!N||(D=l8(Pr,N)|0,(D|0)<0|D>>>0>(K-n|0)>>>0));)if(n=D+n|0,K>>>0>n>>>0)I=I+4|0;else break;if((D|0)<0){s=-1;break e}if(gl(e,32,h,n,ye),!n)n=0,Ge=84;else for(N=0;;){if(D=t[S>>2]|0,!D){Ge=84;break t}if(D=l8(Pr,D)|0,N=D+N|0,(N|0)>(n|0)){Ge=84;break t}if(Go(e,Pr,D),N>>>0>=n>>>0){Ge=84;break}else S=S+4|0}}while(0);if((Ge|0)==67)Ge=0,S=(n|0)!=0|(S|0)!=0,ye=(D|0)!=0|S,S=((S^1)&1)+(Pe-K)|0,n=ye?K:Me,K=Me,S=ye?(D|0)>(S|0)?D:S:D,D=(D|0)>-1?be&-65537:be;else if((Ge|0)==84){Ge=0,gl(e,32,h,n,ye^8192),h=(h|0)>(n|0)?h:n,n=Je;continue}Se=K-n|0,be=(S|0)<(Se|0)?Se:S,ye=be+N|0,h=(h|0)<(ye|0)?ye:h,gl(e,32,h,ye,D),Go(e,I,N),gl(e,48,h,ye,D^65536),gl(e,48,be,Se,0),Go(e,n,Se),gl(e,32,h,ye,D^8192),n=Je}e:do if((Ge|0)==87&&!e)if(!M)s=0;else{for(s=1;n=t[l+(s<<2)>>2]|0,!!n;)if(o8(u+(s<<3)|0,n,r),s=s+1|0,(s|0)>=10){s=1;break e}for(;;){if(t[l+(s<<2)>>2]|0){s=-1;break e}if(s=s+1|0,(s|0)>=10){s=1;break}}}while(0);return m=Nn,s|0}function _L(e){return e=e|0,0}function EL(e){e=e|0}function Go(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]&32||FL(n,r,e)|0}function u8(e){e=e|0;var n=0,r=0,u=0;if(r=t[e>>2]|0,u=(p[r>>0]|0)+-48|0,u>>>0<10){n=0;do n=u+(n*10|0)|0,r=r+1|0,t[e>>2]=r,u=(p[r>>0]|0)+-48|0;while(u>>>0<10)}else n=0;return n|0}function o8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;e:do if(n>>>0<=20)do switch(n|0){case 9:{u=(t[r>>2]|0)+(4-1)&~(4-1),n=t[u>>2]|0,t[r>>2]=u+4,t[e>>2]=n;break e}case 10:{u=(t[r>>2]|0)+(4-1)&~(4-1),n=t[u>>2]|0,t[r>>2]=u+4,u=e,t[u>>2]=n,t[u+4>>2]=((n|0)<0)<<31>>31;break e}case 11:{u=(t[r>>2]|0)+(4-1)&~(4-1),n=t[u>>2]|0,t[r>>2]=u+4,u=e,t[u>>2]=n,t[u+4>>2]=0;break e}case 12:{u=(t[r>>2]|0)+(8-1)&~(8-1),n=u,l=t[n>>2]|0,n=t[n+4>>2]|0,t[r>>2]=u+8,u=e,t[u>>2]=l,t[u+4>>2]=n;break e}case 13:{l=(t[r>>2]|0)+(4-1)&~(4-1),u=t[l>>2]|0,t[r>>2]=l+4,u=(u&65535)<<16>>16,l=e,t[l>>2]=u,t[l+4>>2]=((u|0)<0)<<31>>31;break e}case 14:{l=(t[r>>2]|0)+(4-1)&~(4-1),u=t[l>>2]|0,t[r>>2]=l+4,l=e,t[l>>2]=u&65535,t[l+4>>2]=0;break e}case 15:{l=(t[r>>2]|0)+(4-1)&~(4-1),u=t[l>>2]|0,t[r>>2]=l+4,u=(u&255)<<24>>24,l=e,t[l>>2]=u,t[l+4>>2]=((u|0)<0)<<31>>31;break e}case 16:{l=(t[r>>2]|0)+(4-1)&~(4-1),u=t[l>>2]|0,t[r>>2]=l+4,l=e,t[l>>2]=u&255,t[l+4>>2]=0;break e}case 17:{l=(t[r>>2]|0)+(8-1)&~(8-1),s=+U[l>>3],t[r>>2]=l+8,U[e>>3]=s;break e}case 18:{l=(t[r>>2]|0)+(8-1)&~(8-1),s=+U[l>>3],t[r>>2]=l+8,U[e>>3]=s;break e}default:break e}while(0);while(0)}function DL(e,n,r,u){if(e=e|0,n=n|0,r=r|0,u=u|0,!((e|0)==0&(n|0)==0))do r=r+-1|0,p[r>>0]=k[5694+(e&15)>>0]|0|u,e=v_(e|0,n|0,4)|0,n=ut;while(!((e|0)==0&(n|0)==0));return r|0}function wL(e,n,r){if(e=e|0,n=n|0,r=r|0,!((e|0)==0&(n|0)==0))do r=r+-1|0,p[r>>0]=e&7|48,e=v_(e|0,n|0,3)|0,n=ut;while(!((e|0)==0&(n|0)==0));return r|0}function Pv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;if(n>>>0>0|(n|0)==0&e>>>0>4294967295){for(;u=NE(e|0,n|0,10,0)|0,r=r+-1|0,p[r>>0]=u&255|48,u=e,e=kE(e|0,n|0,10,0)|0,n>>>0>9|(n|0)==9&u>>>0>4294967295;)n=ut;n=e}else n=e;if(n)for(;r=r+-1|0,p[r>>0]=(n>>>0)%10|0|48,!(n>>>0<10);)n=(n>>>0)/10|0;return r|0}function SL(e){return e=e|0,ML(e,t[(OL()|0)+188>>2]|0)|0}function TL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;s=n&255,u=(r|0)!=0;e:do if(u&(e&3|0)!=0)for(l=n&255;;){if((p[e>>0]|0)==l<<24>>24){h=6;break e}if(e=e+1|0,r=r+-1|0,u=(r|0)!=0,!(u&(e&3|0)!=0)){h=5;break}}else h=5;while(0);(h|0)==5&&(u?h=6:r=0);e:do if((h|0)==6&&(l=n&255,(p[e>>0]|0)!=l<<24>>24)){u=lr(s,16843009)|0;t:do if(r>>>0>3){for(;s=t[e>>2]^u,!((s&-2139062144^-2139062144)&s+-16843009|0);)if(e=e+4|0,r=r+-4|0,r>>>0<=3){h=11;break t}}else h=11;while(0);if((h|0)==11&&!r){r=0;break}for(;;){if((p[e>>0]|0)==l<<24>>24)break e;if(e=e+1|0,r=r+-1|0,!r){r=0;break}}}while(0);return(r|0?e:0)|0}function gl(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0;if(h=m,m=m+256|0,s=h,(r|0)>(u|0)&(l&73728|0)==0){if(l=r-u|0,bv(s|0,n|0,(l>>>0<256?l:256)|0)|0,l>>>0>255){n=r-u|0;do Go(e,s,256),l=l+-256|0;while(l>>>0>255);l=n&255}Go(e,s,l)}m=h}function l8(e,n){return e=e|0,n=n|0,e?e=RL(e,n,0)|0:e=0,e|0}function CL(e,n,r,u,l,s){e=e|0,n=+n,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,N=0,M=0,I=0,K=0,be=0,Se=0,ye=0,Je=0,Ge=0,ft=0,Me=0,Pe=0,Zt=0,Br=0,In=0,gn=0,_r=0,Pr=0,Nn=0,uu=0;uu=m,m=m+560|0,S=uu+8|0,Je=uu,Nn=uu+524|0,Pr=Nn,N=uu+512|0,t[Je>>2]=0,_r=N+12|0,s8(n)|0,(ut|0)<0?(n=-n,In=1,Br=5659):(In=(l&2049|0)!=0&1,Br=(l&2048|0)==0?(l&1|0)==0?5660:5665:5662),s8(n)|0,gn=ut&2146435072;do if(gn>>>0<2146435072|(gn|0)==2146435072&0<0){if(be=+xL(n,Je)*2,h=be!=0,h&&(t[Je>>2]=(t[Je>>2]|0)+-1),ft=s|32,(ft|0)==97){Se=s&32,K=(Se|0)==0?Br:Br+9|0,I=In|2,h=12-u|0;do if(u>>>0>11|(h|0)==0)n=be;else{n=8;do h=h+-1|0,n=n*16;while((h|0)!=0);if((p[K>>0]|0)==45){n=-(n+(-be-n));break}else{n=be+n-n;break}}while(0);D=t[Je>>2]|0,h=(D|0)<0?0-D|0:D,h=Pv(h,((h|0)<0)<<31>>31,_r)|0,(h|0)==(_r|0)&&(h=N+11|0,p[h>>0]=48),p[h+-1>>0]=(D>>31&2)+43,M=h+-2|0,p[M>>0]=s+15,N=(u|0)<1,S=(l&8|0)==0,h=Nn;do gn=~~n,D=h+1|0,p[h>>0]=k[5694+gn>>0]|Se,n=(n-+(gn|0))*16,((D-Pr|0)==1?!(S&(N&n==0)):0)?(p[D>>0]=46,h=h+2|0):h=D;while(n!=0);gn=h-Pr|0,Pr=_r-M|0,_r=(u|0)!=0&(gn+-2|0)<(u|0)?u+2|0:gn,h=Pr+I+_r|0,gl(e,32,r,h,l),Go(e,K,I),gl(e,48,r,h,l^65536),Go(e,Nn,gn),gl(e,48,_r-gn|0,0,0),Go(e,M,Pr),gl(e,32,r,h,l^8192);break}D=(u|0)<0?6:u,h?(h=(t[Je>>2]|0)+-28|0,t[Je>>2]=h,n=be*268435456):(n=be,h=t[Je>>2]|0),gn=(h|0)<0?S:S+288|0,S=gn;do Pe=~~n>>>0,t[S>>2]=Pe,S=S+4|0,n=(n-+(Pe>>>0))*1e9;while(n!=0);if((h|0)>0)for(N=gn,I=S;;){if(M=(h|0)<29?h:29,h=I+-4|0,h>>>0>=N>>>0){S=0;do Me=h8(t[h>>2]|0,0,M|0)|0,Me=ME(Me|0,ut|0,S|0,0)|0,Pe=ut,Ge=NE(Me|0,Pe|0,1e9,0)|0,t[h>>2]=Ge,S=kE(Me|0,Pe|0,1e9,0)|0,h=h+-4|0;while(h>>>0>=N>>>0);S&&(N=N+-4|0,t[N>>2]=S)}for(S=I;!(S>>>0<=N>>>0);)if(h=S+-4|0,!(t[h>>2]|0))S=h;else break;if(h=(t[Je>>2]|0)-M|0,t[Je>>2]=h,(h|0)>0)I=S;else break}else N=gn;if((h|0)<0){u=((D+25|0)/9|0)+1|0,ye=(ft|0)==102;do{if(Se=0-h|0,Se=(Se|0)<9?Se:9,N>>>0>>0){M=(1<>>Se,K=0,h=N;do Pe=t[h>>2]|0,t[h>>2]=(Pe>>>Se)+K,K=lr(Pe&M,I)|0,h=h+4|0;while(h>>>0>>0);h=(t[N>>2]|0)==0?N+4|0:N,K?(t[S>>2]=K,N=h,h=S+4|0):(N=h,h=S)}else N=(t[N>>2]|0)==0?N+4|0:N,h=S;S=ye?gn:N,S=(h-S>>2|0)>(u|0)?S+(u<<2)|0:h,h=(t[Je>>2]|0)+Se|0,t[Je>>2]=h}while((h|0)<0);h=N,u=S}else h=N,u=S;if(Pe=gn,h>>>0>>0){if(S=(Pe-h>>2)*9|0,M=t[h>>2]|0,M>>>0>=10){N=10;do N=N*10|0,S=S+1|0;while(M>>>0>=N>>>0)}}else S=0;if(ye=(ft|0)==103,Ge=(D|0)!=0,N=D-((ft|0)!=102?S:0)+((Ge&ye)<<31>>31)|0,(N|0)<(((u-Pe>>2)*9|0)+-9|0)){if(N=N+9216|0,Se=gn+4+(((N|0)/9|0)+-1024<<2)|0,N=((N|0)%9|0)+1|0,(N|0)<9){M=10;do M=M*10|0,N=N+1|0;while((N|0)!=9)}else M=10;if(I=t[Se>>2]|0,K=(I>>>0)%(M>>>0)|0,N=(Se+4|0)==(u|0),N&(K|0)==0)N=Se;else if(be=(((I>>>0)/(M>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Me=(M|0)/2|0,n=K>>>0>>0?.5:N&(K|0)==(Me|0)?1:1.5,In&&(Me=(p[Br>>0]|0)==45,n=Me?-n:n,be=Me?-be:be),N=I-K|0,t[Se>>2]=N,be+n!=be){if(Me=N+M|0,t[Se>>2]=Me,Me>>>0>999999999)for(S=Se;N=S+-4|0,t[S>>2]=0,N>>>0>>0&&(h=h+-4|0,t[h>>2]=0),Me=(t[N>>2]|0)+1|0,t[N>>2]=Me,Me>>>0>999999999;)S=N;else N=Se;if(S=(Pe-h>>2)*9|0,I=t[h>>2]|0,I>>>0>=10){M=10;do M=M*10|0,S=S+1|0;while(I>>>0>=M>>>0)}}else N=Se;N=N+4|0,N=u>>>0>N>>>0?N:u,Me=h}else N=u,Me=h;for(ft=N;;){if(ft>>>0<=Me>>>0){Je=0;break}if(h=ft+-4|0,!(t[h>>2]|0))ft=h;else{Je=1;break}}u=0-S|0;do if(ye)if(h=((Ge^1)&1)+D|0,(h|0)>(S|0)&(S|0)>-5?(M=s+-1|0,D=h+-1-S|0):(M=s+-2|0,D=h+-1|0),h=l&8,h)Se=h;else{if(Je?(Zt=t[ft+-4>>2]|0,(Zt|0)!=0):0)if((Zt>>>0)%10|0)N=0;else{N=0,h=10;do h=h*10|0,N=N+1|0;while(!((Zt>>>0)%(h>>>0)|0|0))}else N=9;if(h=((ft-Pe>>2)*9|0)+-9|0,(M|32|0)==102){Se=h-N|0,Se=(Se|0)>0?Se:0,D=(D|0)<(Se|0)?D:Se,Se=0;break}else{Se=h+S-N|0,Se=(Se|0)>0?Se:0,D=(D|0)<(Se|0)?D:Se,Se=0;break}}else M=s,Se=l&8;while(0);if(ye=D|Se,I=(ye|0)!=0&1,K=(M|32|0)==102,K)Ge=0,h=(S|0)>0?S:0;else{if(h=(S|0)<0?u:S,h=Pv(h,((h|0)<0)<<31>>31,_r)|0,N=_r,(N-h|0)<2)do h=h+-1|0,p[h>>0]=48;while((N-h|0)<2);p[h+-1>>0]=(S>>31&2)+43,h=h+-2|0,p[h>>0]=M,Ge=h,h=N-h|0}if(h=In+1+D+I+h|0,gl(e,32,r,h,l),Go(e,Br,In),gl(e,48,r,h,l^65536),K){M=Me>>>0>gn>>>0?gn:Me,Se=Nn+9|0,I=Se,K=Nn+8|0,N=M;do{if(S=Pv(t[N>>2]|0,0,Se)|0,(N|0)==(M|0))(S|0)==(Se|0)&&(p[K>>0]=48,S=K);else if(S>>>0>Nn>>>0){bv(Nn|0,48,S-Pr|0)|0;do S=S+-1|0;while(S>>>0>Nn>>>0)}Go(e,S,I-S|0),N=N+4|0}while(N>>>0<=gn>>>0);if(ye|0&&Go(e,5710,1),N>>>0>>0&(D|0)>0)for(;;){if(S=Pv(t[N>>2]|0,0,Se)|0,S>>>0>Nn>>>0){bv(Nn|0,48,S-Pr|0)|0;do S=S+-1|0;while(S>>>0>Nn>>>0)}if(Go(e,S,(D|0)<9?D:9),N=N+4|0,S=D+-9|0,N>>>0>>0&(D|0)>9)D=S;else{D=S;break}}gl(e,48,D+9|0,9,0)}else{if(ye=Je?ft:Me+4|0,(D|0)>-1){Je=Nn+9|0,Se=(Se|0)==0,u=Je,I=0-Pr|0,K=Nn+8|0,M=Me;do{S=Pv(t[M>>2]|0,0,Je)|0,(S|0)==(Je|0)&&(p[K>>0]=48,S=K);do if((M|0)==(Me|0)){if(N=S+1|0,Go(e,S,1),Se&(D|0)<1){S=N;break}Go(e,5710,1),S=N}else{if(S>>>0<=Nn>>>0)break;bv(Nn|0,48,S+I|0)|0;do S=S+-1|0;while(S>>>0>Nn>>>0)}while(0);Pr=u-S|0,Go(e,S,(D|0)>(Pr|0)?Pr:D),D=D-Pr|0,M=M+4|0}while(M>>>0>>0&(D|0)>-1)}gl(e,48,D+18|0,18,0),Go(e,Ge,_r-Ge|0)}gl(e,32,r,h,l^8192)}else Nn=(s&32|0)!=0,h=In+3|0,gl(e,32,r,h,l&-65537),Go(e,Br,In),Go(e,n!=n|!1?Nn?5686:5690:Nn?5678:5682,3),gl(e,32,r,h,l^8192);while(0);return m=uu,((h|0)<(r|0)?r:h)|0}function s8(e){e=+e;var n=0;return U[W>>3]=e,n=t[W>>2]|0,ut=t[W+4>>2]|0,n|0}function xL(e,n){return e=+e,n=n|0,+ +a8(e,n)}function a8(e,n){e=+e,n=n|0;var r=0,u=0,l=0;switch(U[W>>3]=e,r=t[W>>2]|0,u=t[W+4>>2]|0,l=v_(r|0,u|0,52)|0,l&2047){case 0:{e!=0?(e=+a8(e*18446744073709552e3,n),r=(t[n>>2]|0)+-64|0):r=0,t[n>>2]=r;break}case 2047:break;default:t[n>>2]=(l&2047)+-1022,t[W>>2]=r,t[W+4>>2]=u&-2146435073|1071644672,e=+U[W>>3]}return+e}function RL(e,n,r){e=e|0,n=n|0,r=r|0;do if(e){if(n>>>0<128){p[e>>0]=n,e=1;break}if(!(t[t[(AL()|0)+188>>2]>>2]|0))if((n&-128|0)==57216){p[e>>0]=n,e=1;break}else{t[(Fv()|0)>>2]=84,e=-1;break}if(n>>>0<2048){p[e>>0]=n>>>6|192,p[e+1>>0]=n&63|128,e=2;break}if(n>>>0<55296|(n&-8192|0)==57344){p[e>>0]=n>>>12|224,p[e+1>>0]=n>>>6&63|128,p[e+2>>0]=n&63|128,e=3;break}if((n+-65536|0)>>>0<1048576){p[e>>0]=n>>>18|240,p[e+1>>0]=n>>>12&63|128,p[e+2>>0]=n>>>6&63|128,p[e+3>>0]=n&63|128,e=4;break}else{t[(Fv()|0)>>2]=84,e=-1;break}}else e=1;while(0);return e|0}function AL(){return RE()|0}function OL(){return RE()|0}function ML(e,n){e=e|0,n=n|0;var r=0,u=0;for(u=0;;){if((k[5712+u>>0]|0)==(e|0)){e=2;break}if(r=u+1|0,(r|0)==87){r=5800,u=87,e=5;break}else u=r}if((e|0)==2&&(u?(r=5800,e=5):r=5800),(e|0)==5)for(;;){do e=r,r=r+1|0;while((p[e>>0]|0)!=0);if(u=u+-1|0,u)e=5;else break}return kL(r,t[n+20>>2]|0)|0}function kL(e,n){return e=e|0,n=n|0,NL(e,n)|0}function NL(e,n){return e=e|0,n=n|0,n?n=LL(t[n>>2]|0,t[n+4>>2]|0,e)|0:n=0,(n|0?n:e)|0}function LL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0;K=(t[e>>2]|0)+1794895138|0,s=Kp(t[e+8>>2]|0,K)|0,u=Kp(t[e+12>>2]|0,K)|0,l=Kp(t[e+16>>2]|0,K)|0;e:do if((s>>>0>>2>>>0?(I=n-(s<<2)|0,u>>>0>>0&l>>>0>>0):0)?((l|u)&3|0)==0:0){for(I=u>>>2,M=l>>>2,N=0;;){if(D=s>>>1,S=N+D|0,h=S<<1,l=h+I|0,u=Kp(t[e+(l<<2)>>2]|0,K)|0,l=Kp(t[e+(l+1<<2)>>2]|0,K)|0,!(l>>>0>>0&u>>>0<(n-l|0)>>>0)){u=0;break e}if(p[e+(l+u)>>0]|0){u=0;break e}if(u=r8(r,e+l|0)|0,!u)break;if(u=(u|0)<0,(s|0)==1){u=0;break e}else N=u?N:S,s=u?D:s-D|0}u=h+M|0,l=Kp(t[e+(u<<2)>>2]|0,K)|0,u=Kp(t[e+(u+1<<2)>>2]|0,K)|0,u>>>0>>0&l>>>0<(n-u|0)>>>0?u=(p[e+(u+l)>>0]|0)==0?e+u|0:0:u=0}else u=0;while(0);return u|0}function Kp(e,n){e=e|0,n=n|0;var r=0;return r=y8(e|0)|0,((n|0)==0?e:r)|0}function FL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=r+16|0,l=t[u>>2]|0,l?s=5:PL(r)|0?u=0:(l=t[u>>2]|0,s=5);e:do if((s|0)==5){if(D=r+20|0,h=t[D>>2]|0,u=h,(l-h|0)>>>0>>0){u=y_[t[r+36>>2]&7](r,e,n)|0;break}t:do if((p[r+75>>0]|0)>-1){for(h=n;;){if(!h){s=0,l=e;break t}if(l=h+-1|0,(p[e+l>>0]|0)==10)break;h=l}if(u=y_[t[r+36>>2]&7](r,e,h)|0,u>>>0>>0)break e;s=h,l=e+h|0,n=n-h|0,u=t[D>>2]|0}else s=0,l=e;while(0);gr(u|0,l|0,n|0)|0,t[D>>2]=(t[D>>2]|0)+n,u=s+n|0}while(0);return u|0}function PL(e){e=e|0;var n=0,r=0;return n=e+74|0,r=p[n>>0]|0,p[n>>0]=r+255|r,n=t[e>>2]|0,n&8?(t[e>>2]=n|32,e=-1):(t[e+8>>2]=0,t[e+4>>2]=0,r=t[e+44>>2]|0,t[e+28>>2]=r,t[e+20>>2]=r,t[e+16>>2]=r+(t[e+48>>2]|0),e=0),e|0}function Ru(e,n){e=w(e),n=w(n);var r=0,u=0;r=f8(e)|0;do if((r&2147483647)>>>0<=2139095040){if(u=f8(n)|0,(u&2147483647)>>>0<=2139095040)if((u^r|0)<0){e=(r|0)<0?n:e;break}else{e=e>2]=e,t[W>>2]|0|0}function Xp(e,n){e=w(e),n=w(n);var r=0,u=0;r=c8(e)|0;do if((r&2147483647)>>>0<=2139095040){if(u=c8(n)|0,(u&2147483647)>>>0<=2139095040)if((u^r|0)<0){e=(r|0)<0?e:n;break}else{e=e>2]=e,t[W>>2]|0|0}function OE(e,n){e=w(e),n=w(n);var r=0,u=0,l=0,s=0,h=0,D=0,S=0,N=0;s=(C[W>>2]=e,t[W>>2]|0),D=(C[W>>2]=n,t[W>>2]|0),r=s>>>23&255,h=D>>>23&255,S=s&-2147483648,l=D<<1;e:do if((l|0)!=0?!((r|0)==255|((IL(n)|0)&2147483647)>>>0>2139095040):0){if(u=s<<1,u>>>0<=l>>>0)return n=w(e*w(0)),w((u|0)==(l|0)?n:e);if(r)u=s&8388607|8388608;else{if(r=s<<9,(r|0)>-1){u=r,r=0;do r=r+-1|0,u=u<<1;while((u|0)>-1)}else r=0;u=s<<1-r}if(h)D=D&8388607|8388608;else{if(s=D<<9,(s|0)>-1){l=0;do l=l+-1|0,s=s<<1;while((s|0)>-1)}else l=0;h=l,D=D<<1-l}l=u-D|0,s=(l|0)>-1;t:do if((r|0)>(h|0)){for(;;){if(s)if(l)u=l;else break;if(u=u<<1,r=r+-1|0,l=u-D|0,s=(l|0)>-1,(r|0)<=(h|0))break t}n=w(e*w(0));break e}while(0);if(s)if(l)u=l;else{n=w(e*w(0));break}if(u>>>0<8388608)do u=u<<1,r=r+-1|0;while(u>>>0<8388608);(r|0)>0?r=u+-8388608|r<<23:r=u>>>(1-r|0),n=(t[W>>2]=r|S,w(C[W>>2]))}else N=3;while(0);return(N|0)==3&&(n=w(e*n),n=w(n/n)),w(n)}function IL(e){return e=w(e),C[W>>2]=e,t[W>>2]|0|0}function bL(e,n){return e=e|0,n=n|0,i8(t[582]|0,e,n)|0}function hi(e){e=e|0,$n()}function Iv(e){e=e|0}function BL(e,n){return e=e|0,n=n|0,0}function UL(e){return e=e|0,(d8(e+4|0)|0)==-1?(F1[t[(t[e>>2]|0)+8>>2]&127](e),e=1):e=0,e|0}function d8(e){e=e|0;var n=0;return n=t[e>>2]|0,t[e>>2]=n+-1,n+-1|0}function e2(e){e=e|0,UL(e)|0&&jL(e)}function jL(e){e=e|0;var n=0;n=e+8|0,((t[n>>2]|0)!=0?(d8(n)|0)!=-1:0)||F1[t[(t[e>>2]|0)+16>>2]&127](e)}function pn(e){e=e|0;var n=0;for(n=(e|0)==0?1:e;e=c_(n)|0,!(e|0);){if(e=HL()|0,!e){e=0;break}R8[e&0]()}return e|0}function p8(e){return e=e|0,pn(e)|0}function _t(e){e=e|0,d_(e)}function zL(e){e=e|0,(p[e+11>>0]|0)<0&&_t(t[e>>2]|0)}function HL(){var e=0;return e=t[2923]|0,t[2923]=e+0,e|0}function qL(){}function h_(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,u=n-u-(r>>>0>e>>>0|0)>>>0,ut=u,e-r>>>0|0|0}function ME(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,r=e+r>>>0,ut=n+u+(r>>>0>>0|0)>>>0,r|0|0}function bv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;if(s=e+r|0,n=n&255,(r|0)>=67){for(;e&3;)p[e>>0]=n,e=e+1|0;for(u=s&-4|0,l=u-64|0,h=n|n<<8|n<<16|n<<24;(e|0)<=(l|0);)t[e>>2]=h,t[e+4>>2]=h,t[e+8>>2]=h,t[e+12>>2]=h,t[e+16>>2]=h,t[e+20>>2]=h,t[e+24>>2]=h,t[e+28>>2]=h,t[e+32>>2]=h,t[e+36>>2]=h,t[e+40>>2]=h,t[e+44>>2]=h,t[e+48>>2]=h,t[e+52>>2]=h,t[e+56>>2]=h,t[e+60>>2]=h,e=e+64|0;for(;(e|0)<(u|0);)t[e>>2]=h,e=e+4|0}for(;(e|0)<(s|0);)p[e>>0]=n,e=e+1|0;return s-r|0}function h8(e,n,r){return e=e|0,n=n|0,r=r|0,(r|0)<32?(ut=n<>>32-r,e<>>r,e>>>r|(n&(1<>>r-32|0)}function gr(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;if((r|0)>=8192)return ai(e|0,n|0,r|0)|0;if(s=e|0,l=e+r|0,(e&3)==(n&3)){for(;e&3;){if(!r)return s|0;p[e>>0]=p[n>>0]|0,e=e+1|0,n=n+1|0,r=r-1|0}for(r=l&-4|0,u=r-64|0;(e|0)<=(u|0);)t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2],t[e+16>>2]=t[n+16>>2],t[e+20>>2]=t[n+20>>2],t[e+24>>2]=t[n+24>>2],t[e+28>>2]=t[n+28>>2],t[e+32>>2]=t[n+32>>2],t[e+36>>2]=t[n+36>>2],t[e+40>>2]=t[n+40>>2],t[e+44>>2]=t[n+44>>2],t[e+48>>2]=t[n+48>>2],t[e+52>>2]=t[n+52>>2],t[e+56>>2]=t[n+56>>2],t[e+60>>2]=t[n+60>>2],e=e+64|0,n=n+64|0;for(;(e|0)<(r|0);)t[e>>2]=t[n>>2],e=e+4|0,n=n+4|0}else for(r=l-4|0;(e|0)<(r|0);)p[e>>0]=p[n>>0]|0,p[e+1>>0]=p[n+1>>0]|0,p[e+2>>0]=p[n+2>>0]|0,p[e+3>>0]=p[n+3>>0]|0,e=e+4|0,n=n+4|0;for(;(e|0)<(l|0);)p[e>>0]=p[n>>0]|0,e=e+1|0,n=n+1|0;return s|0}function v8(e){e=e|0;var n=0;return n=p[Ee+(e&255)>>0]|0,(n|0)<8?n|0:(n=p[Ee+(e>>8&255)>>0]|0,(n|0)<8?n+8|0:(n=p[Ee+(e>>16&255)>>0]|0,(n|0)<8?n+16|0:(p[Ee+(e>>>24)>>0]|0)+24|0))}function m8(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,N=0,M=0,I=0,K=0,be=0,Se=0;if(M=e,S=n,N=S,h=r,K=u,D=K,!N)return s=(l|0)!=0,D?s?(t[l>>2]=e|0,t[l+4>>2]=n&0,K=0,l=0,ut=K,l|0):(K=0,l=0,ut=K,l|0):(s&&(t[l>>2]=(M>>>0)%(h>>>0),t[l+4>>2]=0),K=0,l=(M>>>0)/(h>>>0)>>>0,ut=K,l|0);s=(D|0)==0;do if(h){if(!s){if(s=(Er(D|0)|0)-(Er(N|0)|0)|0,s>>>0<=31){I=s+1|0,D=31-s|0,n=s-31>>31,h=I,e=M>>>(I>>>0)&n|N<>>(I>>>0)&n,s=0,D=M<>2]=e|0,t[l+4>>2]=S|n&0,K=0,l=0,ut=K,l|0):(K=0,l=0,ut=K,l|0)}if(s=h-1|0,s&h|0){D=(Er(h|0)|0)+33-(Er(N|0)|0)|0,Se=64-D|0,I=32-D|0,S=I>>31,be=D-32|0,n=be>>31,h=D,e=I-1>>31&N>>>(be>>>0)|(N<>>(D>>>0))&n,n=n&N>>>(D>>>0),s=M<>>(be>>>0))&S|M<>31;break}return l|0&&(t[l>>2]=s&M,t[l+4>>2]=0),(h|0)==1?(be=S|n&0,Se=e|0|0,ut=be,Se|0):(Se=v8(h|0)|0,be=N>>>(Se>>>0)|0,Se=N<<32-Se|M>>>(Se>>>0)|0,ut=be,Se|0)}else{if(s)return l|0&&(t[l>>2]=(N>>>0)%(h>>>0),t[l+4>>2]=0),be=0,Se=(N>>>0)/(h>>>0)>>>0,ut=be,Se|0;if(!M)return l|0&&(t[l>>2]=0,t[l+4>>2]=(N>>>0)%(D>>>0)),be=0,Se=(N>>>0)/(D>>>0)>>>0,ut=be,Se|0;if(s=D-1|0,!(s&D))return l|0&&(t[l>>2]=e|0,t[l+4>>2]=s&N|n&0),be=0,Se=N>>>((v8(D|0)|0)>>>0),ut=be,Se|0;if(s=(Er(D|0)|0)-(Er(N|0)|0)|0,s>>>0<=30){n=s+1|0,D=31-s|0,h=n,e=N<>>(n>>>0),n=N>>>(n>>>0),s=0,D=M<>2]=e|0,t[l+4>>2]=S|n&0,be=0,Se=0,ut=be,Se|0):(be=0,Se=0,ut=be,Se|0)}while(0);if(!h)N=D,S=0,D=0;else{I=r|0|0,M=K|u&0,N=ME(I|0,M|0,-1,-1)|0,r=ut,S=D,D=0;do u=S,S=s>>>31|S<<1,s=D|s<<1,u=e<<1|u>>>31|0,K=e>>>31|n<<1|0,h_(N|0,r|0,u|0,K|0)|0,Se=ut,be=Se>>31|((Se|0)<0?-1:0)<<1,D=be&1,e=h_(u|0,K|0,be&I|0,(((Se|0)<0?-1:0)>>31|((Se|0)<0?-1:0)<<1)&M|0)|0,n=ut,h=h-1|0;while((h|0)!=0);N=S,S=0}return h=0,l|0&&(t[l>>2]=e,t[l+4>>2]=n),be=(s|0)>>>31|(N|h)<<1|(h<<1|s>>>31)&0|S,Se=(s<<1|0>>>31)&-2|D,ut=be,Se|0}function kE(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,m8(e,n,r,u,0)|0}function t2(e){e=e|0;var n=0,r=0;return r=e+15&-16|0,n=t[H>>2]|0,e=n+r|0,(r|0)>0&(e|0)<(n|0)|(e|0)<0?(fr()|0,Ql(12),-1):(t[H>>2]=e,((e|0)>(jr()|0)?(vr()|0)==0:0)?(t[H>>2]=n,Ql(12),-1):n|0)}function Ty(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;if((n|0)<(e|0)&(e|0)<(n+r|0)){for(u=e,n=n+r|0,e=e+r|0;(r|0)>0;)e=e-1|0,n=n-1|0,r=r-1|0,p[e>>0]=p[n>>0]|0;e=u}else gr(e,n,r)|0;return e|0}function NE(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;return s=m,m=m+16|0,l=s|0,m8(e,n,r,u,l)|0,m=s,ut=t[l+4>>2]|0,t[l>>2]|0|0}function y8(e){return e=e|0,(e&255)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>>24|0}function WL(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,g8[e&1](n|0,r|0,u|0,l|0,s|0)}function VL(e,n,r){e=e|0,n=n|0,r=w(r),_8[e&1](n|0,w(r))}function YL(e,n,r){e=e|0,n=n|0,r=+r,E8[e&31](n|0,+r)}function KL(e,n,r,u){return e=e|0,n=n|0,r=w(r),u=w(u),w(D8[e&0](n|0,w(r),w(u)))}function XL(e,n){e=e|0,n=n|0,F1[e&127](n|0)}function QL(e,n,r){e=e|0,n=n|0,r=r|0,P1[e&31](n|0,r|0)}function JL(e,n){return e=e|0,n=n|0,Jp[e&31](n|0)|0}function ZL(e,n,r,u,l){e=e|0,n=n|0,r=+r,u=+u,l=l|0,w8[e&1](n|0,+r,+u,l|0)}function $L(e,n,r,u){e=e|0,n=n|0,r=+r,u=+u,LF[e&1](n|0,+r,+u)}function eF(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,y_[e&7](n|0,r|0,u|0)|0}function tF(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,+FF[e&1](n|0,r|0,u|0)}function nF(e,n){return e=e|0,n=n|0,+S8[e&15](n|0)}function rF(e,n,r){return e=e|0,n=n|0,r=+r,PF[e&1](n|0,+r)|0}function iF(e,n,r){return e=e|0,n=n|0,r=r|0,FE[e&15](n|0,r|0)|0}function uF(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=+u,l=+l,s=s|0,IF[e&1](n|0,r|0,+u,+l,s|0)}function oF(e,n,r,u,l,s,h){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,h=h|0,bF[e&1](n|0,r|0,u|0,l|0,s|0,h|0)}function lF(e,n,r){return e=e|0,n=n|0,r=r|0,+T8[e&7](n|0,r|0)}function sF(e){return e=e|0,g_[e&7]()|0}function aF(e,n,r,u,l,s){return e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,C8[e&1](n|0,r|0,u|0,l|0,s|0)|0}function fF(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=+l,BF[e&1](n|0,r|0,u|0,+l)}function cF(e,n,r,u,l,s,h){e=e|0,n=n|0,r=r|0,u=w(u),l=l|0,s=w(s),h=h|0,x8[e&1](n|0,r|0,w(u),l|0,w(s),h|0)}function dF(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,Ry[e&15](n|0,r|0,u|0)}function pF(e){e=e|0,R8[e&0]()}function hF(e,n,r,u){e=e|0,n=n|0,r=r|0,u=+u,A8[e&15](n|0,r|0,+u)}function vF(e,n,r){return e=e|0,n=+n,r=+r,UF[e&1](+n,+r)|0}function mF(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,PE[e&15](n|0,r|0,u|0,l|0)}function yF(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,jt(0)}function gF(e,n){e=e|0,n=w(n),jt(1)}function $s(e,n){e=e|0,n=+n,jt(2)}function _F(e,n,r){return e=e|0,n=w(n),r=w(r),jt(3),Tt}function Zn(e){e=e|0,jt(4)}function Cy(e,n){e=e|0,n=n|0,jt(5)}function Na(e){return e=e|0,jt(6),0}function EF(e,n,r,u){e=e|0,n=+n,r=+r,u=u|0,jt(7)}function DF(e,n,r){e=e|0,n=+n,r=+r,jt(8)}function wF(e,n,r){return e=e|0,n=n|0,r=r|0,jt(9),0}function SF(e,n,r){return e=e|0,n=n|0,r=r|0,jt(10),0}function Qp(e){return e=e|0,jt(11),0}function TF(e,n){return e=e|0,n=+n,jt(12),0}function xy(e,n){return e=e|0,n=n|0,jt(13),0}function CF(e,n,r,u,l){e=e|0,n=n|0,r=+r,u=+u,l=l|0,jt(14)}function xF(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,jt(15)}function LE(e,n){return e=e|0,n=n|0,jt(16),0}function RF(){return jt(17),0}function AF(e,n,r,u,l){return e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,jt(18),0}function OF(e,n,r,u){e=e|0,n=n|0,r=r|0,u=+u,jt(19)}function MF(e,n,r,u,l,s){e=e|0,n=n|0,r=w(r),u=u|0,l=w(l),s=s|0,jt(20)}function m_(e,n,r){e=e|0,n=n|0,r=r|0,jt(21)}function kF(){jt(22)}function Bv(e,n,r){e=e|0,n=n|0,r=+r,jt(23)}function NF(e,n){return e=+e,n=+n,jt(24),0}function Uv(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,jt(25)}var g8=[yF,RO],_8=[gF,n0],E8=[$s,ca,ws,Ss,ts,zo,Ef,ul,qa,r0,Df,qc,dc,Al,Ts,da,ud,pa,pc,$s,$s,$s,$s,$s,$s,$s,$s,$s,$s,$s,$s,$s],D8=[_F],F1=[Zn,Iv,cn,is,Eo,Uf,O1,Ul,n7,r7,i7,hO,vO,mO,IN,bN,BN,Le,fc,Ua,Gu,j0,hh,Sf,n1,Lf,Ea,Ah,fm,y1,g1,Xh,vp,Fd,Lm,T1,Ac,Wm,Ym,Sv,Rv,on,N4,q4,e_,Nt,xu,t0,m9,N9,J9,vR,MR,JR,lA,fA,RA,MA,YA,o7,a7,x7,W7,gd,CM,nk,yk,Nk,eN,vN,xN,ON,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn],P1=[Cy,E2,nd,Hc,xl,il,D2,qs,Rl,ja,za,Ha,Ol,Ue,lt,$t,Wn,si,ur,Wa,S2,mh,G4,J4,_R,AM,Z7,Hw,Cy,Cy,Cy,Cy],Jp=[Na,pL,_f,y,J,ce,mt,xt,kt,xr,cu,z0,Va,od,Kc,Ms,FR,O7,NM,Oa,Na,Na,Na,Na,Na,Na,Na,Na,Na,Na,Na,Na],w8=[EF,x2],LF=[DF,QA],y_=[wF,n8,hL,yL,zh,dv,E9,Ik],FF=[SF,lv],S8=[Qp,u0,Ve,ci,vh,sl,ha,R2,A2,hc,Qp,Qp,Qp,Qp,Qp,Qp],PF=[TF,iA],FE=[xy,BL,w2,cl,q2,_m,cp,Rp,Km,kr,Uo,Dk,xy,xy,xy,xy],IF=[CF,Sh],bF=[xF,iN],T8=[LE,Qi,O2,dd,Xc,vl,LE,LE],g_=[RF,Qc,ro,D0,hA,FA,p7,LN],C8=[AF,li],BF=[OF,sy],x8=[MF,ld],Ry=[m_,R,i0,Gr,Cu,v1,Ld,ar,dy,vo,QO,ok,_N,m_,m_,m_],R8=[kF],A8=[Bv,rd,mo,id,jo,Wc,qi,g,Up,I9,eA,Bv,Bv,Bv,Bv,Bv],UF=[NF,e7],PE=[Uv,Dp,Lc,tR,qR,EA,jA,E7,X7,BM,WN,Uv,Uv,Uv,Uv,Uv];return{_llvm_bswap_i32:y8,dynCall_idd:vF,dynCall_i:sF,_i64Subtract:h_,___udivdi3:kE,dynCall_vif:VL,setThrew:vs,dynCall_viii:dF,_bitshift64Lshr:v_,_bitshift64Shl:h8,dynCall_vi:XL,dynCall_viiddi:uF,dynCall_diii:tF,dynCall_iii:iF,_memset:bv,_sbrk:t2,_memcpy:gr,__GLOBAL__sub_I_Yoga_cpp:ru,dynCall_vii:QL,___uremdi3:NE,dynCall_vid:YL,stackAlloc:fo,_nbind_init:tL,getTempRet0:X,dynCall_di:nF,dynCall_iid:rF,setTempRet0:b0,_i64Add:ME,dynCall_fiff:KL,dynCall_iiii:eF,_emscripten_get_global_libc:dL,dynCall_viid:hF,dynCall_viiid:fF,dynCall_viififi:cF,dynCall_ii:JL,__GLOBAL__sub_I_Binding_cc:yM,dynCall_viiii:mF,dynCall_iiiiii:aF,stackSave:tl,dynCall_viiiii:WL,__GLOBAL__sub_I_nbind_cc:Ws,dynCall_vidd:$L,_free:d_,runPostSets:qL,dynCall_viiiiii:oF,establishStackSpace:ju,_memmove:Ty,stackRestore:Jl,_malloc:c_,__GLOBAL__sub_I_common_cc:b7,dynCall_viddi:ZL,dynCall_dii:lF,dynCall_v:pF}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(i){this.name="ExitStatus",this.message="Program terminated with exit("+i+")",this.status=i}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function i(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=i)},Module.callMain=Module.callMain=function(o){o=o||[],ensureInitRuntime();var a=o.length+1;function p(){for(var O=0;O<4-1;O++)_.push(0)}var _=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];p();for(var t=0;t0||(preRun(),runDependencies>0)||Module.calledRun)return;function o(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(i),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),o()},1)):o()}Module.run=Module.run=run;function exit(i,o){o&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=i,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(i)),ENVIRONMENT_IS_NODE&&process.exit(i),Module.quit(i,new ExitStatus(i)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(i){Module.onAbort&&Module.onAbort(i),i!==void 0?(Module.print(i),Module.printErr(i),i=JSON.stringify(i)):i="",ABORT=!0,EXITSTATUS=1;var o=` -If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,a="abort("+i+") at "+stackTrace()+o;throw abortDecorators&&abortDecorators.forEach(function(p){a=p(a,i)}),a}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var $p=tt((MH,WS)=>{"use strict";var kP=HS(),NP=qS(),gD=!1,_D=null;NP({},function(i,o){if(!gD){if(gD=!0,i)throw i;_D=o}});if(!gD)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");WS.exports=kP(_D.bind,_D.lib)});var GS=tt((kH,VS)=>{"use strict";VS.exports=({onlyFirst:i=!1}={})=>{let o=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(o,i?void 0:"g")}});var ED=tt((NH,YS)=>{"use strict";var LP=GS();YS.exports=i=>typeof i=="string"?i.replace(LP(),""):i});var wD=tt((LH,DD)=>{"use strict";var KS=i=>Number.isNaN(i)?!1:i>=4352&&(i<=4447||i===9001||i===9002||11904<=i&&i<=12871&&i!==12351||12880<=i&&i<=19903||19968<=i&&i<=42182||43360<=i&&i<=43388||44032<=i&&i<=55203||63744<=i&&i<=64255||65040<=i&&i<=65049||65072<=i&&i<=65131||65281<=i&&i<=65376||65504<=i&&i<=65510||110592<=i&&i<=110593||127488<=i&&i<=127569||131072<=i&&i<=262141);DD.exports=KS;DD.exports.default=KS});var QS=tt((FH,XS)=>{"use strict";XS.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var U_=tt((PH,SD)=>{"use strict";var FP=ED(),PP=wD(),IP=QS(),JS=i=>{if(i=i.replace(IP()," "),typeof i!="string"||i.length===0)return 0;i=FP(i);let o=0;for(let a=0;a=127&&p<=159||p>=768&&p<=879||(p>65535&&a++,o+=PP(p)?2:1)}return o};SD.exports=JS;SD.exports.default=JS});var CD=tt((IH,TD)=>{"use strict";var bP=U_(),ZS=i=>{let o=0;for(let a of i.split(` -`))o=Math.max(o,bP(a));return o};TD.exports=ZS;TD.exports.default=ZS});var $S=tt(Wy=>{"use strict";var BP=Wy&&Wy.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Wy,"__esModule",{value:!0});var UP=BP(CD()),xD={};Wy.default=i=>{if(i.length===0)return{width:0,height:0};if(xD[i])return xD[i];let o=UP.default(i),a=i.split(` -`).length;return xD[i]={width:o,height:a},{width:o,height:a}}});var eT=tt(Vy=>{"use strict";var jP=Vy&&Vy.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Vy,"__esModule",{value:!0});var Vi=jP($p()),zP=(i,o)=>{"position"in o&&i.setPositionType(o.position==="absolute"?Vi.default.POSITION_TYPE_ABSOLUTE:Vi.default.POSITION_TYPE_RELATIVE)},HP=(i,o)=>{"marginLeft"in o&&i.setMargin(Vi.default.EDGE_START,o.marginLeft||0),"marginRight"in o&&i.setMargin(Vi.default.EDGE_END,o.marginRight||0),"marginTop"in o&&i.setMargin(Vi.default.EDGE_TOP,o.marginTop||0),"marginBottom"in o&&i.setMargin(Vi.default.EDGE_BOTTOM,o.marginBottom||0)},qP=(i,o)=>{"paddingLeft"in o&&i.setPadding(Vi.default.EDGE_LEFT,o.paddingLeft||0),"paddingRight"in o&&i.setPadding(Vi.default.EDGE_RIGHT,o.paddingRight||0),"paddingTop"in o&&i.setPadding(Vi.default.EDGE_TOP,o.paddingTop||0),"paddingBottom"in o&&i.setPadding(Vi.default.EDGE_BOTTOM,o.paddingBottom||0)},WP=(i,o)=>{var a;"flexGrow"in o&&i.setFlexGrow((a=o.flexGrow)!==null&&a!==void 0?a:0),"flexShrink"in o&&i.setFlexShrink(typeof o.flexShrink=="number"?o.flexShrink:1),"flexDirection"in o&&(o.flexDirection==="row"&&i.setFlexDirection(Vi.default.FLEX_DIRECTION_ROW),o.flexDirection==="row-reverse"&&i.setFlexDirection(Vi.default.FLEX_DIRECTION_ROW_REVERSE),o.flexDirection==="column"&&i.setFlexDirection(Vi.default.FLEX_DIRECTION_COLUMN),o.flexDirection==="column-reverse"&&i.setFlexDirection(Vi.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in o&&(typeof o.flexBasis=="number"?i.setFlexBasis(o.flexBasis):typeof o.flexBasis=="string"?i.setFlexBasisPercent(Number.parseInt(o.flexBasis,10)):i.setFlexBasis(NaN)),"alignItems"in o&&((o.alignItems==="stretch"||!o.alignItems)&&i.setAlignItems(Vi.default.ALIGN_STRETCH),o.alignItems==="flex-start"&&i.setAlignItems(Vi.default.ALIGN_FLEX_START),o.alignItems==="center"&&i.setAlignItems(Vi.default.ALIGN_CENTER),o.alignItems==="flex-end"&&i.setAlignItems(Vi.default.ALIGN_FLEX_END)),"alignSelf"in o&&((o.alignSelf==="auto"||!o.alignSelf)&&i.setAlignSelf(Vi.default.ALIGN_AUTO),o.alignSelf==="flex-start"&&i.setAlignSelf(Vi.default.ALIGN_FLEX_START),o.alignSelf==="center"&&i.setAlignSelf(Vi.default.ALIGN_CENTER),o.alignSelf==="flex-end"&&i.setAlignSelf(Vi.default.ALIGN_FLEX_END)),"justifyContent"in o&&((o.justifyContent==="flex-start"||!o.justifyContent)&&i.setJustifyContent(Vi.default.JUSTIFY_FLEX_START),o.justifyContent==="center"&&i.setJustifyContent(Vi.default.JUSTIFY_CENTER),o.justifyContent==="flex-end"&&i.setJustifyContent(Vi.default.JUSTIFY_FLEX_END),o.justifyContent==="space-between"&&i.setJustifyContent(Vi.default.JUSTIFY_SPACE_BETWEEN),o.justifyContent==="space-around"&&i.setJustifyContent(Vi.default.JUSTIFY_SPACE_AROUND))},VP=(i,o)=>{var a,p;"width"in o&&(typeof o.width=="number"?i.setWidth(o.width):typeof o.width=="string"?i.setWidthPercent(Number.parseInt(o.width,10)):i.setWidthAuto()),"height"in o&&(typeof o.height=="number"?i.setHeight(o.height):typeof o.height=="string"?i.setHeightPercent(Number.parseInt(o.height,10)):i.setHeightAuto()),"minWidth"in o&&(typeof o.minWidth=="string"?i.setMinWidthPercent(Number.parseInt(o.minWidth,10)):i.setMinWidth((a=o.minWidth)!==null&&a!==void 0?a:0)),"minHeight"in o&&(typeof o.minHeight=="string"?i.setMinHeightPercent(Number.parseInt(o.minHeight,10)):i.setMinHeight((p=o.minHeight)!==null&&p!==void 0?p:0))},GP=(i,o)=>{"display"in o&&i.setDisplay(o.display==="flex"?Vi.default.DISPLAY_FLEX:Vi.default.DISPLAY_NONE)},YP=(i,o)=>{if("borderStyle"in o){let a=typeof o.borderStyle=="string"?1:0;i.setBorder(Vi.default.EDGE_TOP,a),i.setBorder(Vi.default.EDGE_BOTTOM,a),i.setBorder(Vi.default.EDGE_LEFT,a),i.setBorder(Vi.default.EDGE_RIGHT,a)}};Vy.default=(i,o={})=>{zP(i,o),HP(i,o),qP(i,o),WP(i,o),VP(i,o),GP(i,o),YP(i,o)}});var nT=tt((UH,tT)=>{"use strict";tT.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var RD=tt((jH,rT)=>{var Gy=nT(),iT={};for(let i of Object.keys(Gy))iT[Gy[i]]=i;var zn={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};rT.exports=zn;for(let i of Object.keys(zn)){if(!("channels"in zn[i]))throw new Error("missing channels property: "+i);if(!("labels"in zn[i]))throw new Error("missing channel labels property: "+i);if(zn[i].labels.length!==zn[i].channels)throw new Error("channel and label counts mismatch: "+i);let{channels:o,labels:a}=zn[i];delete zn[i].channels,delete zn[i].labels,Object.defineProperty(zn[i],"channels",{value:o}),Object.defineProperty(zn[i],"labels",{value:a})}zn.rgb.hsl=function(i){let o=i[0]/255,a=i[1]/255,p=i[2]/255,_=Math.min(o,a,p),t=Math.max(o,a,p),k=t-_,L,O;t===_?L=0:o===t?L=(a-p)/k:a===t?L=2+(p-o)/k:p===t&&(L=4+(o-a)/k),L=Math.min(L*60,360),L<0&&(L+=360);let C=(_+t)/2;return t===_?O=0:C<=.5?O=k/(t+_):O=k/(2-t-_),[L,O*100,C*100]};zn.rgb.hsv=function(i){let o,a,p,_,t,k=i[0]/255,L=i[1]/255,O=i[2]/255,C=Math.max(k,L,O),U=C-Math.min(k,L,O),H=function(W){return(C-W)/6/U+1/2};return U===0?(_=0,t=0):(t=U/C,o=H(k),a=H(L),p=H(O),k===C?_=p-a:L===C?_=1/3+o-p:O===C&&(_=2/3+a-o),_<0?_+=1:_>1&&(_-=1)),[_*360,t*100,C*100]};zn.rgb.hwb=function(i){let o=i[0],a=i[1],p=i[2],_=zn.rgb.hsl(i)[0],t=1/255*Math.min(o,Math.min(a,p));return p=1-1/255*Math.max(o,Math.max(a,p)),[_,t*100,p*100]};zn.rgb.cmyk=function(i){let o=i[0]/255,a=i[1]/255,p=i[2]/255,_=Math.min(1-o,1-a,1-p),t=(1-o-_)/(1-_)||0,k=(1-a-_)/(1-_)||0,L=(1-p-_)/(1-_)||0;return[t*100,k*100,L*100,_*100]};function KP(i,o){return(i[0]-o[0])**2+(i[1]-o[1])**2+(i[2]-o[2])**2}zn.rgb.keyword=function(i){let o=iT[i];if(o)return o;let a=Infinity,p;for(let _ of Object.keys(Gy)){let t=Gy[_],k=KP(i,t);k.04045?((o+.055)/1.055)**2.4:o/12.92,a=a>.04045?((a+.055)/1.055)**2.4:a/12.92,p=p>.04045?((p+.055)/1.055)**2.4:p/12.92;let _=o*.4124+a*.3576+p*.1805,t=o*.2126+a*.7152+p*.0722,k=o*.0193+a*.1192+p*.9505;return[_*100,t*100,k*100]};zn.rgb.lab=function(i){let o=zn.rgb.xyz(i),a=o[0],p=o[1],_=o[2];a/=95.047,p/=100,_/=108.883,a=a>.008856?a**(1/3):7.787*a+16/116,p=p>.008856?p**(1/3):7.787*p+16/116,_=_>.008856?_**(1/3):7.787*_+16/116;let t=116*p-16,k=500*(a-p),L=200*(p-_);return[t,k,L]};zn.hsl.rgb=function(i){let o=i[0]/360,a=i[1]/100,p=i[2]/100,_,t,k;if(a===0)return k=p*255,[k,k,k];p<.5?_=p*(1+a):_=p+a-p*a;let L=2*p-_,O=[0,0,0];for(let C=0;C<3;C++)t=o+1/3*-(C-1),t<0&&t++,t>1&&t--,6*t<1?k=L+(_-L)*6*t:2*t<1?k=_:3*t<2?k=L+(_-L)*(2/3-t)*6:k=L,O[C]=k*255;return O};zn.hsl.hsv=function(i){let o=i[0],a=i[1]/100,p=i[2]/100,_=a,t=Math.max(p,.01);p*=2,a*=p<=1?p:2-p,_*=t<=1?t:2-t;let k=(p+a)/2,L=p===0?2*_/(t+_):2*a/(p+a);return[o,L*100,k*100]};zn.hsv.rgb=function(i){let o=i[0]/60,a=i[1]/100,p=i[2]/100,_=Math.floor(o)%6,t=o-Math.floor(o),k=255*p*(1-a),L=255*p*(1-a*t),O=255*p*(1-a*(1-t));switch(p*=255,_){case 0:return[p,O,k];case 1:return[L,p,k];case 2:return[k,p,O];case 3:return[k,L,p];case 4:return[O,k,p];case 5:return[p,k,L]}};zn.hsv.hsl=function(i){let o=i[0],a=i[1]/100,p=i[2]/100,_=Math.max(p,.01),t,k;k=(2-a)*p;let L=(2-a)*_;return t=a*_,t/=L<=1?L:2-L,t=t||0,k/=2,[o,t*100,k*100]};zn.hwb.rgb=function(i){let o=i[0]/360,a=i[1]/100,p=i[2]/100,_=a+p,t;_>1&&(a/=_,p/=_);let k=Math.floor(6*o),L=1-p;t=6*o-k,(k&1)!=0&&(t=1-t);let O=a+t*(L-a),C,U,H;switch(k){default:case 6:case 0:C=L,U=O,H=a;break;case 1:C=O,U=L,H=a;break;case 2:C=a,U=L,H=O;break;case 3:C=a,U=O,H=L;break;case 4:C=O,U=a,H=L;break;case 5:C=L,U=a,H=O;break}return[C*255,U*255,H*255]};zn.cmyk.rgb=function(i){let o=i[0]/100,a=i[1]/100,p=i[2]/100,_=i[3]/100,t=1-Math.min(1,o*(1-_)+_),k=1-Math.min(1,a*(1-_)+_),L=1-Math.min(1,p*(1-_)+_);return[t*255,k*255,L*255]};zn.xyz.rgb=function(i){let o=i[0]/100,a=i[1]/100,p=i[2]/100,_,t,k;return _=o*3.2406+a*-1.5372+p*-.4986,t=o*-.9689+a*1.8758+p*.0415,k=o*.0557+a*-.204+p*1.057,_=_>.0031308?1.055*_**(1/2.4)-.055:_*12.92,t=t>.0031308?1.055*t**(1/2.4)-.055:t*12.92,k=k>.0031308?1.055*k**(1/2.4)-.055:k*12.92,_=Math.min(Math.max(0,_),1),t=Math.min(Math.max(0,t),1),k=Math.min(Math.max(0,k),1),[_*255,t*255,k*255]};zn.xyz.lab=function(i){let o=i[0],a=i[1],p=i[2];o/=95.047,a/=100,p/=108.883,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116,p=p>.008856?p**(1/3):7.787*p+16/116;let _=116*a-16,t=500*(o-a),k=200*(a-p);return[_,t,k]};zn.lab.xyz=function(i){let o=i[0],a=i[1],p=i[2],_,t,k;t=(o+16)/116,_=a/500+t,k=t-p/200;let L=t**3,O=_**3,C=k**3;return t=L>.008856?L:(t-16/116)/7.787,_=O>.008856?O:(_-16/116)/7.787,k=C>.008856?C:(k-16/116)/7.787,_*=95.047,t*=100,k*=108.883,[_,t,k]};zn.lab.lch=function(i){let o=i[0],a=i[1],p=i[2],_;_=Math.atan2(p,a)*360/2/Math.PI,_<0&&(_+=360);let k=Math.sqrt(a*a+p*p);return[o,k,_]};zn.lch.lab=function(i){let o=i[0],a=i[1],_=i[2]/360*2*Math.PI,t=a*Math.cos(_),k=a*Math.sin(_);return[o,t,k]};zn.rgb.ansi16=function(i,o=null){let[a,p,_]=i,t=o===null?zn.rgb.hsv(i)[2]:o;if(t=Math.round(t/50),t===0)return 30;let k=30+(Math.round(_/255)<<2|Math.round(p/255)<<1|Math.round(a/255));return t===2&&(k+=60),k};zn.hsv.ansi16=function(i){return zn.rgb.ansi16(zn.hsv.rgb(i),i[2])};zn.rgb.ansi256=function(i){let o=i[0],a=i[1],p=i[2];return o===a&&a===p?o<8?16:o>248?231:Math.round((o-8)/247*24)+232:16+36*Math.round(o/255*5)+6*Math.round(a/255*5)+Math.round(p/255*5)};zn.ansi16.rgb=function(i){let o=i%10;if(o===0||o===7)return i>50&&(o+=3.5),o=o/10.5*255,[o,o,o];let a=(~~(i>50)+1)*.5,p=(o&1)*a*255,_=(o>>1&1)*a*255,t=(o>>2&1)*a*255;return[p,_,t]};zn.ansi256.rgb=function(i){if(i>=232){let t=(i-232)*10+8;return[t,t,t]}i-=16;let o,a=Math.floor(i/36)/5*255,p=Math.floor((o=i%36)/6)/5*255,_=o%6/5*255;return[a,p,_]};zn.rgb.hex=function(i){let a=(((Math.round(i[0])&255)<<16)+((Math.round(i[1])&255)<<8)+(Math.round(i[2])&255)).toString(16).toUpperCase();return"000000".substring(a.length)+a};zn.hex.rgb=function(i){let o=i.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!o)return[0,0,0];let a=o[0];o[0].length===3&&(a=a.split("").map(L=>L+L).join(""));let p=parseInt(a,16),_=p>>16&255,t=p>>8&255,k=p&255;return[_,t,k]};zn.rgb.hcg=function(i){let o=i[0]/255,a=i[1]/255,p=i[2]/255,_=Math.max(Math.max(o,a),p),t=Math.min(Math.min(o,a),p),k=_-t,L,O;return k<1?L=t/(1-k):L=0,k<=0?O=0:_===o?O=(a-p)/k%6:_===a?O=2+(p-o)/k:O=4+(o-a)/k,O/=6,O%=1,[O*360,k*100,L*100]};zn.hsl.hcg=function(i){let o=i[1]/100,a=i[2]/100,p=a<.5?2*o*a:2*o*(1-a),_=0;return p<1&&(_=(a-.5*p)/(1-p)),[i[0],p*100,_*100]};zn.hsv.hcg=function(i){let o=i[1]/100,a=i[2]/100,p=o*a,_=0;return p<1&&(_=(a-p)/(1-p)),[i[0],p*100,_*100]};zn.hcg.rgb=function(i){let o=i[0]/360,a=i[1]/100,p=i[2]/100;if(a===0)return[p*255,p*255,p*255];let _=[0,0,0],t=o%1*6,k=t%1,L=1-k,O=0;switch(Math.floor(t)){case 0:_[0]=1,_[1]=k,_[2]=0;break;case 1:_[0]=L,_[1]=1,_[2]=0;break;case 2:_[0]=0,_[1]=1,_[2]=k;break;case 3:_[0]=0,_[1]=L,_[2]=1;break;case 4:_[0]=k,_[1]=0,_[2]=1;break;default:_[0]=1,_[1]=0,_[2]=L}return O=(1-a)*p,[(a*_[0]+O)*255,(a*_[1]+O)*255,(a*_[2]+O)*255]};zn.hcg.hsv=function(i){let o=i[1]/100,a=i[2]/100,p=o+a*(1-o),_=0;return p>0&&(_=o/p),[i[0],_*100,p*100]};zn.hcg.hsl=function(i){let o=i[1]/100,p=i[2]/100*(1-o)+.5*o,_=0;return p>0&&p<.5?_=o/(2*p):p>=.5&&p<1&&(_=o/(2*(1-p))),[i[0],_*100,p*100]};zn.hcg.hwb=function(i){let o=i[1]/100,a=i[2]/100,p=o+a*(1-o);return[i[0],(p-o)*100,(1-p)*100]};zn.hwb.hcg=function(i){let o=i[1]/100,a=i[2]/100,p=1-a,_=p-o,t=0;return _<1&&(t=(p-_)/(1-_)),[i[0],_*100,t*100]};zn.apple.rgb=function(i){return[i[0]/65535*255,i[1]/65535*255,i[2]/65535*255]};zn.rgb.apple=function(i){return[i[0]/255*65535,i[1]/255*65535,i[2]/255*65535]};zn.gray.rgb=function(i){return[i[0]/100*255,i[0]/100*255,i[0]/100*255]};zn.gray.hsl=function(i){return[0,0,i[0]]};zn.gray.hsv=zn.gray.hsl;zn.gray.hwb=function(i){return[0,100,i[0]]};zn.gray.cmyk=function(i){return[0,0,0,i[0]]};zn.gray.lab=function(i){return[i[0],0,0]};zn.gray.hex=function(i){let o=Math.round(i[0]/100*255)&255,p=((o<<16)+(o<<8)+o).toString(16).toUpperCase();return"000000".substring(p.length)+p};zn.rgb.gray=function(i){return[(i[0]+i[1]+i[2])/3/255*100]}});var oT=tt((zH,uT)=>{var j_=RD();function XP(){let i={},o=Object.keys(j_);for(let a=o.length,p=0;p{var AD=RD(),$P=oT(),Yv={},eI=Object.keys(AD);function tI(i){let o=function(...a){let p=a[0];return p==null?p:(p.length>1&&(a=p),i(a))};return"conversion"in i&&(o.conversion=i.conversion),o}function nI(i){let o=function(...a){let p=a[0];if(p==null)return p;p.length>1&&(a=p);let _=i(a);if(typeof _=="object")for(let t=_.length,k=0;k{Yv[i]={},Object.defineProperty(Yv[i],"channels",{value:AD[i].channels}),Object.defineProperty(Yv[i],"labels",{value:AD[i].labels});let o=$P(i);Object.keys(o).forEach(p=>{let _=o[p];Yv[i][p]=nI(_),Yv[i][p].raw=tI(_)})});lT.exports=Yv});var H_=tt((qH,aT)=>{"use strict";var fT=(i,o)=>(...a)=>`[${i(...a)+o}m`,cT=(i,o)=>(...a)=>{let p=i(...a);return`[${38+o};5;${p}m`},dT=(i,o)=>(...a)=>{let p=i(...a);return`[${38+o};2;${p[0]};${p[1]};${p[2]}m`},z_=i=>i,pT=(i,o,a)=>[i,o,a],Kv=(i,o,a)=>{Object.defineProperty(i,o,{get:()=>{let p=a();return Object.defineProperty(i,o,{value:p,enumerable:!0,configurable:!0}),p},enumerable:!0,configurable:!0})},OD,Xv=(i,o,a,p)=>{OD===void 0&&(OD=sT());let _=p?10:0,t={};for(let[k,L]of Object.entries(OD)){let O=k==="ansi16"?"ansi":k;k===o?t[O]=i(a,_):typeof L=="object"&&(t[O]=i(L[o],_))}return t};function rI(){let i=new Map,o={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};o.color.gray=o.color.blackBright,o.bgColor.bgGray=o.bgColor.bgBlackBright,o.color.grey=o.color.blackBright,o.bgColor.bgGrey=o.bgColor.bgBlackBright;for(let[a,p]of Object.entries(o)){for(let[_,t]of Object.entries(p))o[_]={open:`[${t[0]}m`,close:`[${t[1]}m`},p[_]=o[_],i.set(t[0],t[1]);Object.defineProperty(o,a,{value:p,enumerable:!1})}return Object.defineProperty(o,"codes",{value:i,enumerable:!1}),o.color.close="",o.bgColor.close="",Kv(o.color,"ansi",()=>Xv(fT,"ansi16",z_,!1)),Kv(o.color,"ansi256",()=>Xv(cT,"ansi256",z_,!1)),Kv(o.color,"ansi16m",()=>Xv(dT,"rgb",pT,!1)),Kv(o.bgColor,"ansi",()=>Xv(fT,"ansi16",z_,!0)),Kv(o.bgColor,"ansi256",()=>Xv(cT,"ansi256",z_,!0)),Kv(o.bgColor,"ansi16m",()=>Xv(dT,"rgb",pT,!0)),o}Object.defineProperty(aT,"exports",{enumerable:!0,get:rI})});var mT=tt((WH,hT)=>{"use strict";var Yy=U_(),iI=ED(),uI=H_(),MD=new Set(["","\x9B"]),oI=39,vT=i=>`${MD.values().next().value}[${i}m`,lI=i=>i.split(" ").map(o=>Yy(o)),kD=(i,o,a)=>{let p=[...o],_=!1,t=Yy(iI(i[i.length-1]));for(let[k,L]of p.entries()){let O=Yy(L);if(t+O<=a?i[i.length-1]+=L:(i.push(L),t=0),MD.has(L))_=!0;else if(_&&L==="m"){_=!1;continue}_||(t+=O,t===a&&k0&&i.length>1&&(i[i.length-2]+=i.pop())},sI=i=>{let o=i.split(" "),a=o.length;for(;a>0&&!(Yy(o[a-1])>0);)a--;return a===o.length?i:o.slice(0,a).join(" ")+o.slice(a).join("")},aI=(i,o,a={})=>{if(a.trim!==!1&&i.trim()==="")return"";let p="",_="",t,k=lI(i),L=[""];for(let[O,C]of i.split(" ").entries()){a.trim!==!1&&(L[L.length-1]=L[L.length-1].trimLeft());let U=Yy(L[L.length-1]);if(O!==0&&(U>=o&&(a.wordWrap===!1||a.trim===!1)&&(L.push(""),U=0),(U>0||a.trim===!1)&&(L[L.length-1]+=" ",U++)),a.hard&&k[O]>o){let H=o-U,W=1+Math.floor((k[O]-H-1)/o);Math.floor((k[O]-1)/o)o&&U>0&&k[O]>0){if(a.wordWrap===!1&&Uo&&a.wordWrap===!1){kD(L,C,o);continue}L[L.length-1]+=C}a.trim!==!1&&(L=L.map(sI)),p=L.join(` -`);for(let[O,C]of[...p].entries()){if(_+=C,MD.has(C)){let H=parseFloat(/\d[^m]*/.exec(p.slice(O,O+4)));t=H===oI?null:H}let U=uI.codes.get(Number(t));t&&U&&(p[O+1]===` -`?_+=vT(U):C===` -`&&(_+=vT(t)))}return _};hT.exports=(i,o,a)=>String(i).normalize().replace(/\r\n/g,` -`).split(` -`).map(p=>aI(p,o,a)).join(` -`)});var _T=tt((VH,yT)=>{"use strict";var gT="[\uD800-\uDBFF][\uDC00-\uDFFF]",fI=i=>i&&i.exact?new RegExp(`^${gT}$`):new RegExp(gT,"g");yT.exports=fI});var ND=tt((GH,ET)=>{"use strict";var cI=wD(),dI=_T(),DT=H_(),wT=["","\x9B"],q_=i=>`${wT[0]}[${i}m`,ST=(i,o,a)=>{let p=[];i=[...i];for(let _ of i){let t=_;_.match(";")&&(_=_.split(";")[0][0]+"0");let k=DT.codes.get(parseInt(_,10));if(k){let L=i.indexOf(k.toString());L>=0?i.splice(L,1):p.push(q_(o?k:t))}else if(o){p.push(q_(0));break}else p.push(q_(t))}if(o&&(p=p.filter((_,t)=>p.indexOf(_)===t),a!==void 0)){let _=q_(DT.codes.get(parseInt(a,10)));p=p.reduce((t,k)=>k===_?[k,...t]:[...t,k],[])}return p.join("")};ET.exports=(i,o,a)=>{let p=[...i.normalize()],_=[];a=typeof a=="number"?a:p.length;let t=!1,k,L=0,O="";for(let[C,U]of p.entries()){let H=!1;if(wT.includes(U)){let W=/\d[^m]*/.exec(i.slice(C,C+18));k=W&&W.length>0?W[0]:void 0,Lo&&L<=a)O+=U;else if(L===o&&!t&&k!==void 0)O=ST(_);else if(L>=a){O+=ST(_,!0,k);break}}return O}});var CT=tt((YH,TT)=>{"use strict";var d2=ND(),pI=U_();function W_(i,o,a){if(i.charAt(o)===" ")return o;for(let p=1;p<=3;p++)if(a){if(i.charAt(o+p)===" ")return o+p}else if(i.charAt(o-p)===" ")return o-p;return o}TT.exports=(i,o,a)=>{a=Ht({position:"end",preferTruncationOnSpace:!1},a);let{position:p,space:_,preferTruncationOnSpace:t}=a,k="\u2026",L=1;if(typeof i!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof i}`);if(typeof o!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof o}`);if(o<1)return"";if(o===1)return k;let O=pI(i);if(O<=o)return i;if(p==="start"){if(t){let C=W_(i,O-o+1,!0);return k+d2(i,C,O).trim()}return _===!0&&(k+=" ",L=2),k+d2(i,O-o+L,O)}if(p==="middle"){_===!0&&(k=" "+k+" ",L=3);let C=Math.floor(o/2);if(t){let U=W_(i,C),H=W_(i,O-(o-C)+1,!0);return d2(i,0,U)+k+d2(i,H,O).trim()}return d2(i,0,C)+k+d2(i,O-(o-C)+L,O)}if(p==="end"){if(t){let C=W_(i,o-1);return d2(i,0,C)+k}return _===!0&&(k=" "+k,L=2),d2(i,0,o-L)+k}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${p}`)}});var FD=tt(Ky=>{"use strict";var xT=Ky&&Ky.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Ky,"__esModule",{value:!0});var hI=xT(mT()),vI=xT(CT()),LD={};Ky.default=(i,o,a)=>{let p=i+String(o)+String(a);if(LD[p])return LD[p];let _=i;if(a==="wrap"&&(_=hI.default(i,o,{trim:!1,hard:!0})),a.startsWith("truncate")){let t="end";a==="truncate-middle"&&(t="middle"),a==="truncate-start"&&(t="start"),_=vI.default(i,o,{position:t})}return LD[p]=_,_}});var ID=tt(PD=>{"use strict";Object.defineProperty(PD,"__esModule",{value:!0});var RT=i=>{let o="";if(i.childNodes.length>0)for(let a of i.childNodes){let p="";a.nodeName==="#text"?p=a.nodeValue:((a.nodeName==="ink-text"||a.nodeName==="ink-virtual-text")&&(p=RT(a)),p.length>0&&typeof a.internal_transform=="function"&&(p=a.internal_transform(p))),o+=p}return o};PD.default=RT});var bD=tt(c0=>{"use strict";var Xy=c0&&c0.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(c0,"__esModule",{value:!0});c0.setTextNodeValue=c0.createTextNode=c0.setStyle=c0.setAttribute=c0.removeChildNode=c0.insertBeforeNode=c0.appendChildNode=c0.createNode=c0.TEXT_NAME=void 0;var mI=Xy($p()),AT=Xy($S()),yI=Xy(eT()),gI=Xy(FD()),_I=Xy(ID());c0.TEXT_NAME="#text";c0.createNode=i=>{var o;let a={nodeName:i,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:i==="ink-virtual-text"?void 0:mI.default.Node.create()};return i==="ink-text"&&((o=a.yogaNode)===null||o===void 0||o.setMeasureFunc(EI.bind(null,a))),a};c0.appendChildNode=(i,o)=>{var a;o.parentNode&&c0.removeChildNode(o.parentNode,o),o.parentNode=i,i.childNodes.push(o),o.yogaNode&&((a=i.yogaNode)===null||a===void 0||a.insertChild(o.yogaNode,i.yogaNode.getChildCount())),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&V_(i)};c0.insertBeforeNode=(i,o,a)=>{var p,_;o.parentNode&&c0.removeChildNode(o.parentNode,o),o.parentNode=i;let t=i.childNodes.indexOf(a);if(t>=0){i.childNodes.splice(t,0,o),o.yogaNode&&((p=i.yogaNode)===null||p===void 0||p.insertChild(o.yogaNode,t));return}i.childNodes.push(o),o.yogaNode&&((_=i.yogaNode)===null||_===void 0||_.insertChild(o.yogaNode,i.yogaNode.getChildCount())),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&V_(i)};c0.removeChildNode=(i,o)=>{var a,p;o.yogaNode&&((p=(a=o.parentNode)===null||a===void 0?void 0:a.yogaNode)===null||p===void 0||p.removeChild(o.yogaNode)),o.parentNode=null;let _=i.childNodes.indexOf(o);_>=0&&i.childNodes.splice(_,1),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&V_(i)};c0.setAttribute=(i,o,a)=>{i.attributes[o]=a};c0.setStyle=(i,o)=>{i.style=o,i.yogaNode&&yI.default(i.yogaNode,o)};c0.createTextNode=i=>{let o={nodeName:"#text",nodeValue:i,yogaNode:void 0,parentNode:null,style:{}};return c0.setTextNodeValue(o,i),o};var EI=function(i,o){var a,p;let _=i.nodeName==="#text"?i.nodeValue:_I.default(i),t=AT.default(_);if(t.width<=o||t.width>=1&&o>0&&o<1)return t;let k=(p=(a=i.style)===null||a===void 0?void 0:a.textWrap)!==null&&p!==void 0?p:"wrap",L=gI.default(_,o,k);return AT.default(L)},OT=i=>{var o;if(!(!i||!i.parentNode))return(o=i.yogaNode)!==null&&o!==void 0?o:OT(i.parentNode)},V_=i=>{let o=OT(i);o==null||o.markDirty()};c0.setTextNodeValue=(i,o)=>{typeof o!="string"&&(o=String(o)),i.nodeValue=o,V_(i)}});var eh=tt((JH,MT)=>{"use strict";MT.exports={BINARY_TYPES:["nodebuffer","arraybuffer","fragments"],GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),EMPTY_BUFFER:Buffer.alloc(0),NOOP:()=>{}}});var Qy=tt((ZH,BD)=>{"use strict";var{EMPTY_BUFFER:DI}=eh();function kT(i,o){if(i.length===0)return DI;if(i.length===1)return i[0];let a=Buffer.allocUnsafe(o),p=0;for(let _=0;_{"use strict";var IT=Symbol("kDone"),UD=Symbol("kRun"),bT=class{constructor(o){this[IT]=()=>{this.pending--,this[UD]()},this.concurrency=o||Infinity,this.jobs=[],this.pending=0}add(o){this.jobs.push(o),this[UD]()}[UD](){if(this.pending!==this.concurrency&&this.jobs.length){let o=this.jobs.shift();this.pending++,o(this[IT])}}};PT.exports=bT});var $y=tt((eq,UT)=>{"use strict";var Jy=require("zlib"),jT=Qy(),wI=BT(),{kStatusCode:zT,NOOP:SI}=eh(),TI=Buffer.from([0,0,255,255]),Y_=Symbol("permessage-deflate"),K1=Symbol("total-length"),Zy=Symbol("callback"),p2=Symbol("buffers"),jD=Symbol("error"),K_,HT=class{constructor(o,a,p){if(this._maxPayload=p|0,this._options=o||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!a,this._deflate=null,this._inflate=null,this.params=null,!K_){let _=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;K_=new wI(_)}}static get extensionName(){return"permessage-deflate"}offer(){let o={};return this._options.serverNoContextTakeover&&(o.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(o.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(o.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?o.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(o.client_max_window_bits=!0),o}accept(o){return o=this.normalizeParams(o),this.params=this._isServer?this.acceptAsServer(o):this.acceptAsClient(o),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let o=this._deflate[Zy];this._deflate.close(),this._deflate=null,o&&o(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(o){let a=this._options,p=o.find(_=>!(a.serverNoContextTakeover===!1&&_.server_no_context_takeover||_.server_max_window_bits&&(a.serverMaxWindowBits===!1||typeof a.serverMaxWindowBits=="number"&&a.serverMaxWindowBits>_.server_max_window_bits)||typeof a.clientMaxWindowBits=="number"&&!_.client_max_window_bits));if(!p)throw new Error("None of the extension offers can be accepted");return a.serverNoContextTakeover&&(p.server_no_context_takeover=!0),a.clientNoContextTakeover&&(p.client_no_context_takeover=!0),typeof a.serverMaxWindowBits=="number"&&(p.server_max_window_bits=a.serverMaxWindowBits),typeof a.clientMaxWindowBits=="number"?p.client_max_window_bits=a.clientMaxWindowBits:(p.client_max_window_bits===!0||a.clientMaxWindowBits===!1)&&delete p.client_max_window_bits,p}acceptAsClient(o){let a=o[0];if(this._options.clientNoContextTakeover===!1&&a.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!a.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(a.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&a.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return a}normalizeParams(o){return o.forEach(a=>{Object.keys(a).forEach(p=>{let _=a[p];if(_.length>1)throw new Error(`Parameter "${p}" must have only a single value`);if(_=_[0],p==="client_max_window_bits"){if(_!==!0){let t=+_;if(!Number.isInteger(t)||t<8||t>15)throw new TypeError(`Invalid value for parameter "${p}": ${_}`);_=t}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${p}": ${_}`)}else if(p==="server_max_window_bits"){let t=+_;if(!Number.isInteger(t)||t<8||t>15)throw new TypeError(`Invalid value for parameter "${p}": ${_}`);_=t}else if(p==="client_no_context_takeover"||p==="server_no_context_takeover"){if(_!==!0)throw new TypeError(`Invalid value for parameter "${p}": ${_}`)}else throw new Error(`Unknown parameter "${p}"`);a[p]=_})}),o}decompress(o,a,p){K_.add(_=>{this._decompress(o,a,(t,k)=>{_(),p(t,k)})})}compress(o,a,p){K_.add(_=>{this._compress(o,a,(t,k)=>{_(),p(t,k)})})}_decompress(o,a,p){let _=this._isServer?"client":"server";if(!this._inflate){let t=`${_}_max_window_bits`,k=typeof this.params[t]!="number"?Jy.Z_DEFAULT_WINDOWBITS:this.params[t];this._inflate=Jy.createInflateRaw(Zr(Ht({},this._options.zlibInflateOptions),{windowBits:k})),this._inflate[Y_]=this,this._inflate[K1]=0,this._inflate[p2]=[],this._inflate.on("error",xI),this._inflate.on("data",qT)}this._inflate[Zy]=p,this._inflate.write(o),a&&this._inflate.write(TI),this._inflate.flush(()=>{let t=this._inflate[jD];if(t){this._inflate.close(),this._inflate=null,p(t);return}let k=jT.concat(this._inflate[p2],this._inflate[K1]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[K1]=0,this._inflate[p2]=[],a&&this.params[`${_}_no_context_takeover`]&&this._inflate.reset()),p(null,k)})}_compress(o,a,p){let _=this._isServer?"server":"client";if(!this._deflate){let t=`${_}_max_window_bits`,k=typeof this.params[t]!="number"?Jy.Z_DEFAULT_WINDOWBITS:this.params[t];this._deflate=Jy.createDeflateRaw(Zr(Ht({},this._options.zlibDeflateOptions),{windowBits:k})),this._deflate[K1]=0,this._deflate[p2]=[],this._deflate.on("error",SI),this._deflate.on("data",CI)}this._deflate[Zy]=p,this._deflate.write(o),this._deflate.flush(Jy.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let t=jT.concat(this._deflate[p2],this._deflate[K1]);a&&(t=t.slice(0,t.length-4)),this._deflate[Zy]=null,this._deflate[K1]=0,this._deflate[p2]=[],a&&this.params[`${_}_no_context_takeover`]&&this._deflate.reset(),p(null,t)})}};UT.exports=HT;function CI(i){this[p2].push(i),this[K1]+=i.length}function qT(i){if(this[K1]+=i.length,this[Y_]._maxPayload<1||this[K1]<=this[Y_]._maxPayload){this[p2].push(i);return}this[jD]=new RangeError("Max payload size exceeded"),this[jD][zT]=1009,this.removeListener("data",qT),this.reset()}function xI(i){this[Y_]._inflate=null,i[zT]=1007,this[Zy](i)}});var HD=tt((tq,zD)=>{"use strict";function WT(i){return i>=1e3&&i<=1014&&i!==1004&&i!==1005&&i!==1006||i>=3e3&&i<=4999}function VT(i){let o=i.length,a=0;for(;a=o||(i[a+1]&192)!=128||(i[a+2]&192)!=128||i[a]===224&&(i[a+1]&224)==128||i[a]===237&&(i[a+1]&224)==160)return!1;a+=3}else if((i[a]&248)==240){if(a+3>=o||(i[a+1]&192)!=128||(i[a+2]&192)!=128||(i[a+3]&192)!=128||i[a]===240&&(i[a+1]&240)==128||i[a]===244&&i[a+1]>143||i[a]>244)return!1;a+=4}else return!1;return!0}try{let i=require("utf-8-validate");typeof i=="object"&&(i=i.Validation.isValidUTF8),zD.exports={isValidStatusCode:WT,isValidUTF8(o){return o.length<150?VT(o):i(o)}}}catch(i){zD.exports={isValidStatusCode:WT,isValidUTF8:VT}}});var VD=tt((nq,GT)=>{"use strict";var{Writable:RI}=require("stream"),YT=$y(),{BINARY_TYPES:AI,EMPTY_BUFFER:OI,kStatusCode:MI,kWebSocket:kI}=eh(),{concat:qD,toArrayBuffer:NI,unmask:LI}=Qy(),{isValidStatusCode:FI,isValidUTF8:KT}=HD(),eg=0,XT=1,QT=2,JT=3,WD=4,PI=5,ZT=class extends RI{constructor(o,a,p,_){super();this._binaryType=o||AI[0],this[kI]=void 0,this._extensions=a||{},this._isServer=!!p,this._maxPayload=_|0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._state=eg,this._loop=!1}_write(o,a,p){if(this._opcode===8&&this._state==eg)return p();this._bufferedBytes+=o.length,this._buffers.push(o),this.startLoop(p)}consume(o){if(this._bufferedBytes-=o,o===this._buffers[0].length)return this._buffers.shift();if(o=p.length?a.set(this._buffers.shift(),_):(a.set(new Uint8Array(p.buffer,p.byteOffset,o),_),this._buffers[0]=p.slice(o)),o-=p.length}while(o>0);return a}startLoop(o){let a;this._loop=!0;do switch(this._state){case eg:a=this.getInfo();break;case XT:a=this.getPayloadLength16();break;case QT:a=this.getPayloadLength64();break;case JT:this.getMask();break;case WD:a=this.getData(o);break;default:this._loop=!1;return}while(this._loop);o(a)}getInfo(){if(this._bufferedBytes<2){this._loop=!1;return}let o=this.consume(2);if((o[0]&48)!=0)return this._loop=!1,Yo(RangeError,"RSV2 and RSV3 must be clear",!0,1002);let a=(o[0]&64)==64;if(a&&!this._extensions[YT.extensionName])return this._loop=!1,Yo(RangeError,"RSV1 must be clear",!0,1002);if(this._fin=(o[0]&128)==128,this._opcode=o[0]&15,this._payloadLength=o[1]&127,this._opcode===0){if(a)return this._loop=!1,Yo(RangeError,"RSV1 must be clear",!0,1002);if(!this._fragmented)return this._loop=!1,Yo(RangeError,"invalid opcode 0",!0,1002);this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented)return this._loop=!1,Yo(RangeError,`invalid opcode ${this._opcode}`,!0,1002);this._compressed=a}else if(this._opcode>7&&this._opcode<11){if(!this._fin)return this._loop=!1,Yo(RangeError,"FIN must be set",!0,1002);if(a)return this._loop=!1,Yo(RangeError,"RSV1 must be clear",!0,1002);if(this._payloadLength>125)return this._loop=!1,Yo(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002)}else return this._loop=!1,Yo(RangeError,`invalid opcode ${this._opcode}`,!0,1002);if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(o[1]&128)==128,this._isServer){if(!this._masked)return this._loop=!1,Yo(RangeError,"MASK must be set",!0,1002)}else if(this._masked)return this._loop=!1,Yo(RangeError,"MASK must be clear",!0,1002);if(this._payloadLength===126)this._state=XT;else if(this._payloadLength===127)this._state=QT;else return this.haveLength()}getPayloadLength16(){if(this._bufferedBytes<2){this._loop=!1;return}return this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength()}getPayloadLength64(){if(this._bufferedBytes<8){this._loop=!1;return}let o=this.consume(8),a=o.readUInt32BE(0);return a>Math.pow(2,53-32)-1?(this._loop=!1,Yo(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009)):(this._payloadLength=a*Math.pow(2,32)+o.readUInt32BE(4),this.haveLength())}haveLength(){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0))return this._loop=!1,Yo(RangeError,"Max payload size exceeded",!1,1009);this._masked?this._state=JT:this._state=WD}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=WD}getData(o){let a=OI;if(this._payloadLength){if(this._bufferedBytes7)return this.controlMessage(a);if(this._compressed){this._state=PI,this.decompress(a,o);return}return a.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(a)),this.dataMessage()}decompress(o,a){this._extensions[YT.extensionName].decompress(o,this._fin,(_,t)=>{if(_)return a(_);if(t.length){if(this._messageLength+=t.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return a(Yo(RangeError,"Max payload size exceeded",!1,1009));this._fragments.push(t)}let k=this.dataMessage();if(k)return a(k);this.startLoop(a)})}dataMessage(){if(this._fin){let o=this._messageLength,a=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let p;this._binaryType==="nodebuffer"?p=qD(a,o):this._binaryType==="arraybuffer"?p=NI(qD(a,o)):p=a,this.emit("message",p)}else{let p=qD(a,o);if(!KT(p))return this._loop=!1,Yo(Error,"invalid UTF-8 sequence",!0,1007);this.emit("message",p.toString())}}this._state=eg}controlMessage(o){if(this._opcode===8)if(this._loop=!1,o.length===0)this.emit("conclude",1005,""),this.end();else{if(o.length===1)return Yo(RangeError,"invalid payload length 1",!0,1002);{let a=o.readUInt16BE(0);if(!FI(a))return Yo(RangeError,`invalid status code ${a}`,!0,1002);let p=o.slice(2);if(!KT(p))return Yo(Error,"invalid UTF-8 sequence",!0,1007);this.emit("conclude",a,p.toString()),this.end()}}else this._opcode===9?this.emit("ping",o):this.emit("pong",o);this._state=eg}};GT.exports=ZT;function Yo(i,o,a,p){let _=new i(a?`Invalid WebSocket frame: ${o}`:o);return Error.captureStackTrace(_,Yo),_[MI]=p,_}});var GD=tt((rq,$T)=>{"use strict";var{randomFillSync:II}=require("crypto"),eC=$y(),{EMPTY_BUFFER:bI}=eh(),{isValidStatusCode:BI}=HD(),{mask:tC,toBuffer:X1}=Qy(),th=Buffer.alloc(4),Q1=class{constructor(o,a){this._extensions=a||{},this._socket=o,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(o,a){let p=a.mask&&a.readOnly,_=a.mask?6:2,t=o.length;o.length>=65536?(_+=8,t=127):o.length>125&&(_+=2,t=126);let k=Buffer.allocUnsafe(p?o.length+_:_);return k[0]=a.fin?a.opcode|128:a.opcode,a.rsv1&&(k[0]|=64),k[1]=t,t===126?k.writeUInt16BE(o.length,2):t===127&&(k.writeUInt32BE(0,2),k.writeUInt32BE(o.length,6)),a.mask?(II(th,0,4),k[1]|=128,k[_-4]=th[0],k[_-3]=th[1],k[_-2]=th[2],k[_-1]=th[3],p?(tC(o,th,k,_,o.length),[k]):(tC(o,th,o,0,o.length),[k,o])):[k,o]}close(o,a,p,_){let t;if(o===void 0)t=bI;else{if(typeof o!="number"||!BI(o))throw new TypeError("First argument must be a valid error code number");if(a===void 0||a==="")t=Buffer.allocUnsafe(2),t.writeUInt16BE(o,0);else{let k=Buffer.byteLength(a);if(k>123)throw new RangeError("The message must not be greater than 123 bytes");t=Buffer.allocUnsafe(2+k),t.writeUInt16BE(o,0),t.write(a,2)}}this._deflating?this.enqueue([this.doClose,t,p,_]):this.doClose(t,p,_)}doClose(o,a,p){this.sendFrame(Q1.frame(o,{fin:!0,rsv1:!1,opcode:8,mask:a,readOnly:!1}),p)}ping(o,a,p){let _=X1(o);if(_.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPing,_,a,X1.readOnly,p]):this.doPing(_,a,X1.readOnly,p)}doPing(o,a,p,_){this.sendFrame(Q1.frame(o,{fin:!0,rsv1:!1,opcode:9,mask:a,readOnly:p}),_)}pong(o,a,p){let _=X1(o);if(_.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPong,_,a,X1.readOnly,p]):this.doPong(_,a,X1.readOnly,p)}doPong(o,a,p,_){this.sendFrame(Q1.frame(o,{fin:!0,rsv1:!1,opcode:10,mask:a,readOnly:p}),_)}send(o,a,p){let _=X1(o),t=this._extensions[eC.extensionName],k=a.binary?2:1,L=a.compress;if(this._firstFragment?(this._firstFragment=!1,L&&t&&(L=_.length>=t._threshold),this._compress=L):(L=!1,k=0),a.fin&&(this._firstFragment=!0),t){let O={fin:a.fin,rsv1:L,opcode:k,mask:a.mask,readOnly:X1.readOnly};this._deflating?this.enqueue([this.dispatch,_,this._compress,O,p]):this.dispatch(_,this._compress,O,p)}else this.sendFrame(Q1.frame(_,{fin:a.fin,rsv1:!1,opcode:k,mask:a.mask,readOnly:X1.readOnly}),p)}dispatch(o,a,p,_){if(!a){this.sendFrame(Q1.frame(o,p),_);return}let t=this._extensions[eC.extensionName];this._bufferedBytes+=o.length,this._deflating=!0,t.compress(o,p.fin,(k,L)=>{if(this._socket.destroyed){let O=new Error("The socket was closed while data was being compressed");typeof _=="function"&&_(O);for(let C=0;C{"use strict";var tg=class{constructor(o,a){this.target=a,this.type=o}},rC=class extends tg{constructor(o,a){super("message",a);this.data=o}},iC=class extends tg{constructor(o,a,p){super("close",p);this.wasClean=p._closeFrameReceived&&p._closeFrameSent,this.reason=a,this.code=o}},uC=class extends tg{constructor(o){super("open",o)}},oC=class extends tg{constructor(o,a){super("error",a);this.message=o.message,this.error=o}},UI={addEventListener(i,o,a){if(typeof o!="function")return;function p(O){o.call(this,new rC(O,this))}function _(O,C){o.call(this,new iC(O,C,this))}function t(O){o.call(this,new oC(O,this))}function k(){o.call(this,new uC(this))}let L=a&&a.once?"once":"on";i==="message"?(p._listener=o,this[L](i,p)):i==="close"?(_._listener=o,this[L](i,_)):i==="error"?(t._listener=o,this[L](i,t)):i==="open"?(k._listener=o,this[L](i,k)):this[L](i,o)},removeEventListener(i,o){let a=this.listeners(i);for(let p=0;p{"use strict";var ng=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function jc(i,o,a){i[o]===void 0?i[o]=[a]:i[o].push(a)}function jI(i){let o=Object.create(null);if(i===void 0||i==="")return o;let a=Object.create(null),p=!1,_=!1,t=!1,k,L,O=-1,C=-1,U=0;for(;U{let a=i[o];return Array.isArray(a)||(a=[a]),a.map(p=>[o].concat(Object.keys(p).map(_=>{let t=p[_];return Array.isArray(t)||(t=[t]),t.map(k=>k===!0?_:`${_}=${k}`).join("; ")})).join("; ")).join(", ")}).join(", ")}sC.exports={format:zI,parse:jI}});var ZD=tt((oq,aC)=>{"use strict";var HI=require("events"),qI=require("https"),WI=require("http"),fC=require("net"),VI=require("tls"),{randomBytes:GI,createHash:YI}=require("crypto"),{URL:KD}=require("url"),h2=$y(),KI=VD(),XI=GD(),{BINARY_TYPES:cC,EMPTY_BUFFER:XD,GUID:QI,kStatusCode:JI,kWebSocket:ta,NOOP:dC}=eh(),{addEventListener:ZI,removeEventListener:$I}=lC(),{format:eb,parse:tb}=YD(),{toBuffer:nb}=Qy(),pC=["CONNECTING","OPEN","CLOSING","CLOSED"],QD=[8,13],rb=30*1e3,Gi=class extends HI{constructor(o,a,p){super();this._binaryType=cC[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage="",this._closeTimer=null,this._extensions={},this._protocol="",this._readyState=Gi.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,o!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,Array.isArray(a)?a=a.join(", "):typeof a=="object"&&a!==null&&(p=a,a=void 0),hC(this,o,a,p)):this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(o){!cC.includes(o)||(this._binaryType=o,this._receiver&&(this._receiver._binaryType=o))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(o,a,p){let _=new KI(this.binaryType,this._extensions,this._isServer,p);this._sender=new XI(o,this._extensions),this._receiver=_,this._socket=o,_[ta]=this,o[ta]=this,_.on("conclude",ib),_.on("drain",ub),_.on("error",ob),_.on("message",lb),_.on("ping",sb),_.on("pong",ab),o.setTimeout(0),o.setNoDelay(),a.length>0&&o.unshift(a),o.on("close",vC),o.on("data",X_),o.on("end",mC),o.on("error",yC),this._readyState=Gi.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=Gi.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[h2.extensionName]&&this._extensions[h2.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=Gi.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(o,a){if(this.readyState!==Gi.CLOSED){if(this.readyState===Gi.CONNECTING){let p="WebSocket was closed before the connection was established";return J1(this,this._req,p)}if(this.readyState===Gi.CLOSING){this._closeFrameSent&&this._closeFrameReceived&&this._socket.end();return}this._readyState=Gi.CLOSING,this._sender.close(o,a,!this._isServer,p=>{p||(this._closeFrameSent=!0,this._closeFrameReceived&&this._socket.end())}),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),rb)}}ping(o,a,p){if(this.readyState===Gi.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof o=="function"?(p=o,o=a=void 0):typeof a=="function"&&(p=a,a=void 0),typeof o=="number"&&(o=o.toString()),this.readyState!==Gi.OPEN){JD(this,o,p);return}a===void 0&&(a=!this._isServer),this._sender.ping(o||XD,a,p)}pong(o,a,p){if(this.readyState===Gi.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof o=="function"?(p=o,o=a=void 0):typeof a=="function"&&(p=a,a=void 0),typeof o=="number"&&(o=o.toString()),this.readyState!==Gi.OPEN){JD(this,o,p);return}a===void 0&&(a=!this._isServer),this._sender.pong(o||XD,a,p)}send(o,a,p){if(this.readyState===Gi.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof a=="function"&&(p=a,a={}),typeof o=="number"&&(o=o.toString()),this.readyState!==Gi.OPEN){JD(this,o,p);return}let _=Ht({binary:typeof o!="string",mask:!this._isServer,compress:!0,fin:!0},a);this._extensions[h2.extensionName]||(_.compress=!1),this._sender.send(o||XD,_,p)}terminate(){if(this.readyState!==Gi.CLOSED){if(this.readyState===Gi.CONNECTING){let o="WebSocket was closed before the connection was established";return J1(this,this._req,o)}this._socket&&(this._readyState=Gi.CLOSING,this._socket.destroy())}}};pC.forEach((i,o)=>{let a={enumerable:!0,value:o};Object.defineProperty(Gi.prototype,i,a),Object.defineProperty(Gi,i,a)});["binaryType","bufferedAmount","extensions","protocol","readyState","url"].forEach(i=>{Object.defineProperty(Gi.prototype,i,{enumerable:!0})});["open","error","close","message"].forEach(i=>{Object.defineProperty(Gi.prototype,`on${i}`,{configurable:!0,enumerable:!0,get(){let o=this.listeners(i);for(let a=0;a{J1(i,W,"Opening handshake has timed out")}),W.on("error",ne=>{W===null||W.aborted||(W=i._req=null,i._readyState=Gi.CLOSING,i.emit("error",ne),i.emitClose())}),W.on("response",ne=>{let m=ne.headers.location,he=ne.statusCode;if(m&&_.followRedirects&&he>=300&&he<400){if(++i._redirects>_.maxRedirects){J1(i,W,"Maximum redirects exceeded");return}W.abort();let Ee=new KD(m,o);hC(i,Ee,a,p)}else i.emit("unexpected-response",W,ne)||J1(i,W,`Unexpected server response: ${ne.statusCode}`)}),W.on("upgrade",(ne,m,he)=>{if(i.emit("upgrade",ne),i.readyState!==Gi.CONNECTING)return;W=i._req=null;let Ee=YI("sha1").update(C+QI).digest("base64");if(ne.headers["sec-websocket-accept"]!==Ee){J1(i,m,"Invalid Sec-WebSocket-Accept header");return}let ve=ne.headers["sec-websocket-protocol"],se=(a||"").split(/, */),De;if(!a&&ve?De="Server sent a subprotocol but none was requested":a&&!ve?De="Server sent no subprotocol":ve&&!se.includes(ve)&&(De="Server sent an invalid subprotocol"),De){J1(i,m,De);return}if(ve&&(i._protocol=ve),H)try{let pe=tb(ne.headers["sec-websocket-extensions"]);pe[h2.extensionName]&&(H.accept(pe[h2.extensionName]),i._extensions[h2.extensionName]=H)}catch(pe){J1(i,m,"Invalid Sec-WebSocket-Extensions header");return}i.setSocket(m,he,_.maxPayload)})}function fb(i){return i.path=i.socketPath,fC.connect(i)}function cb(i){return i.path=void 0,!i.servername&&i.servername!==""&&(i.servername=fC.isIP(i.host)?"":i.host),VI.connect(i)}function J1(i,o,a){i._readyState=Gi.CLOSING;let p=new Error(a);Error.captureStackTrace(p,J1),o.setHeader?(o.abort(),o.socket&&!o.socket.destroyed&&o.socket.destroy(),o.once("abort",i.emitClose.bind(i)),i.emit("error",p)):(o.destroy(p),o.once("error",i.emit.bind(i,"error")),o.once("close",i.emitClose.bind(i)))}function JD(i,o,a){if(o){let p=nb(o).length;i._socket?i._sender._bufferedBytes+=p:i._bufferedAmount+=p}if(a){let p=new Error(`WebSocket is not open: readyState ${i.readyState} (${pC[i.readyState]})`);a(p)}}function ib(i,o){let a=this[ta];a._socket.removeListener("data",X_),a._socket.resume(),a._closeFrameReceived=!0,a._closeMessage=o,a._closeCode=i,i===1005?a.close():a.close(i,o)}function ub(){this[ta]._socket.resume()}function ob(i){let o=this[ta];o._socket.removeListener("data",X_),o._readyState=Gi.CLOSING,o._closeCode=i[JI],o.emit("error",i),o._socket.destroy()}function gC(){this[ta].emitClose()}function lb(i){this[ta].emit("message",i)}function sb(i){let o=this[ta];o.pong(i,!o._isServer,dC),o.emit("ping",i)}function ab(i){this[ta].emit("pong",i)}function vC(){let i=this[ta];this.removeListener("close",vC),this.removeListener("end",mC),i._readyState=Gi.CLOSING,i._socket.read(),i._receiver.end(),this.removeListener("data",X_),this[ta]=void 0,clearTimeout(i._closeTimer),i._receiver._writableState.finished||i._receiver._writableState.errorEmitted?i.emitClose():(i._receiver.on("error",gC),i._receiver.on("finish",gC))}function X_(i){this[ta]._receiver.write(i)||this.pause()}function mC(){let i=this[ta];i._readyState=Gi.CLOSING,i._receiver.end(),this.end()}function yC(){let i=this[ta];this.removeListener("error",yC),this.on("error",dC),i&&(i._readyState=Gi.CLOSING,this.destroy())}});var wC=tt((lq,_C)=>{"use strict";var{Duplex:db}=require("stream");function EC(i){i.emit("close")}function pb(){!this.destroyed&&this._writableState.finished&&this.destroy()}function DC(i){this.removeListener("error",DC),this.destroy(),this.listenerCount("error")===0&&this.emit("error",i)}function hb(i,o){let a=!0;function p(){a&&i._socket.resume()}i.readyState===i.CONNECTING?i.once("open",function(){i._receiver.removeAllListeners("drain"),i._receiver.on("drain",p)}):(i._receiver.removeAllListeners("drain"),i._receiver.on("drain",p));let _=new db(Zr(Ht({},o),{autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1}));return i.on("message",function(k){_.push(k)||(a=!1,i._socket.pause())}),i.once("error",function(k){_.destroyed||_.destroy(k)}),i.once("close",function(){_.destroyed||_.push(null)}),_._destroy=function(t,k){if(i.readyState===i.CLOSED){k(t),process.nextTick(EC,_);return}let L=!1;i.once("error",function(C){L=!0,k(C)}),i.once("close",function(){L||k(t),process.nextTick(EC,_)}),i.terminate()},_._final=function(t){if(i.readyState===i.CONNECTING){i.once("open",function(){_._final(t)});return}i._socket!==null&&(i._socket._writableState.finished?(t(),_._readableState.endEmitted&&_.destroy()):(i._socket.once("finish",function(){t()}),i.close()))},_._read=function(){i.readyState===i.OPEN&&!a&&(a=!0,i._receiver._writableState.needDrain||i._socket.resume())},_._write=function(t,k,L){if(i.readyState===i.CONNECTING){i.once("open",function(){_._write(t,k,L)});return}i.send(t,L)},_.on("end",pb),_.on("error",DC),_}_C.exports=hb});var CC=tt((sq,SC)=>{"use strict";var vb=require("events"),{createHash:mb}=require("crypto"),{createServer:yb,STATUS_CODES:$D}=require("http"),nh=$y(),gb=ZD(),{format:_b,parse:Eb}=YD(),{GUID:Db,kWebSocket:wb}=eh(),Sb=/^[+/0-9A-Za-z]{22}==$/,TC=class extends vb{constructor(o,a){super();if(o=Ht({maxPayload:100*1024*1024,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null},o),o.port==null&&!o.server&&!o.noServer)throw new TypeError('One of the "port", "server", or "noServer" options must be specified');if(o.port!=null?(this._server=yb((p,_)=>{let t=$D[426];_.writeHead(426,{"Content-Length":t.length,"Content-Type":"text/plain"}),_.end(t)}),this._server.listen(o.port,o.host,o.backlog,a)):o.server&&(this._server=o.server),this._server){let p=this.emit.bind(this,"connection");this._removeListeners=Tb(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(_,t,k)=>{this.handleUpgrade(_,t,k,p)}})}o.perMessageDeflate===!0&&(o.perMessageDeflate={}),o.clientTracking&&(this.clients=new Set),this.options=o}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(o){if(o&&this.once("close",o),this.clients)for(let p of this.clients)p.terminate();let a=this._server;if(a&&(this._removeListeners(),this._removeListeners=this._server=null,this.options.port!=null)){a.close(()=>this.emit("close"));return}process.nextTick(Cb,this)}shouldHandle(o){if(this.options.path){let a=o.url.indexOf("?");if((a!==-1?o.url.slice(0,a):o.url)!==this.options.path)return!1}return!0}handleUpgrade(o,a,p,_){a.on("error",e3);let t=o.headers["sec-websocket-key"]!==void 0?o.headers["sec-websocket-key"].trim():!1,k=+o.headers["sec-websocket-version"],L={};if(o.method!=="GET"||o.headers.upgrade.toLowerCase()!=="websocket"||!t||!Sb.test(t)||k!==8&&k!==13||!this.shouldHandle(o))return Q_(a,400);if(this.options.perMessageDeflate){let O=new nh(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let C=Eb(o.headers["sec-websocket-extensions"]);C[nh.extensionName]&&(O.accept(C[nh.extensionName]),L[nh.extensionName]=O)}catch(C){return Q_(a,400)}}if(this.options.verifyClient){let O={origin:o.headers[`${k===8?"sec-websocket-origin":"origin"}`],secure:!!(o.socket.authorized||o.socket.encrypted),req:o};if(this.options.verifyClient.length===2){this.options.verifyClient(O,(C,U,H,W)=>{if(!C)return Q_(a,U||401,H,W);this.completeUpgrade(t,L,o,a,p,_)});return}if(!this.options.verifyClient(O))return Q_(a,401)}this.completeUpgrade(t,L,o,a,p,_)}completeUpgrade(o,a,p,_,t,k){if(!_.readable||!_.writable)return _.destroy();if(_[wb])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");let L=mb("sha1").update(o+Db).digest("base64"),O=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${L}`],C=new gb(null),U=p.headers["sec-websocket-protocol"];if(U&&(U=U.split(",").map(xb),this.options.handleProtocols?U=this.options.handleProtocols(U,p):U=U[0],U&&(O.push(`Sec-WebSocket-Protocol: ${U}`),C._protocol=U)),a[nh.extensionName]){let H=a[nh.extensionName].params,W=_b({[nh.extensionName]:[H]});O.push(`Sec-WebSocket-Extensions: ${W}`),C._extensions=a}this.emit("headers",O,p),_.write(O.concat(`\r -`).join(`\r -`)),_.removeListener("error",e3),C.setSocket(_,t,this.options.maxPayload),this.clients&&(this.clients.add(C),C.on("close",()=>this.clients.delete(C))),k(C,p)}};SC.exports=TC;function Tb(i,o){for(let a of Object.keys(o))i.on(a,o[a]);return function(){for(let p of Object.keys(o))i.removeListener(p,o[p])}}function Cb(i){i.emit("close")}function e3(){this.destroy()}function Q_(i,o,a,p){i.writable&&(a=a||$D[o],p=Ht({Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(a)},p),i.write(`HTTP/1.1 ${o} ${$D[o]}\r -`+Object.keys(p).map(_=>`${_}: ${p[_]}`).join(`\r -`)+`\r -\r -`+a)),i.removeListener("error",e3),i.destroy()}function xb(i){return i.trim()}});var RC=tt((aq,xC)=>{"use strict";var rg=ZD();rg.createWebSocketStream=wC();rg.Server=CC();rg.Receiver=VD();rg.Sender=GD();xC.exports=rg});var AC=tt(J_=>{"use strict";var Rb=J_&&J_.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(J_,"__esModule",{value:!0});var Ab=Rb(RC()),ig=global;ig.WebSocket||(ig.WebSocket=Ab.default);ig.window||(ig.window=global);ig.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:!0},{type:2,value:"InternalApp",isEnabled:!0,isValid:!0},{type:2,value:"InternalAppContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdoutContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStderrContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdinContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalFocusContext",isEnabled:!0,isValid:!0}]});var OC=tt((Z_,t3)=>{(function(i,o){typeof Z_=="object"&&typeof t3=="object"?t3.exports=o():typeof define=="function"&&define.amd?define([],o):typeof Z_=="object"?Z_.ReactDevToolsBackend=o():i.ReactDevToolsBackend=o()})(window,function(){return function(i){var o={};function a(p){if(o[p])return o[p].exports;var _=o[p]={i:p,l:!1,exports:{}};return i[p].call(_.exports,_,_.exports,a),_.l=!0,_.exports}return a.m=i,a.c=o,a.d=function(p,_,t){a.o(p,_)||Object.defineProperty(p,_,{enumerable:!0,get:t})},a.r=function(p){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(p,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(p,"__esModule",{value:!0})},a.t=function(p,_){if(1&_&&(p=a(p)),8&_||4&_&&typeof p=="object"&&p&&p.__esModule)return p;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:p}),2&_&&typeof p!="string")for(var k in p)a.d(t,k,function(L){return p[L]}.bind(null,k));return t},a.n=function(p){var _=p&&p.__esModule?function(){return p.default}:function(){return p};return a.d(_,"a",_),_},a.o=function(p,_){return Object.prototype.hasOwnProperty.call(p,_)},a.p="",a(a.s=20)}([function(i,o,a){"use strict";i.exports=a(12)},function(i,o,a){"use strict";var p=Object.getOwnPropertySymbols,_=Object.prototype.hasOwnProperty,t=Object.prototype.propertyIsEnumerable;function k(L){if(L==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(L)}i.exports=function(){try{if(!Object.assign)return!1;var L=new String("abc");if(L[5]="de",Object.getOwnPropertyNames(L)[0]==="5")return!1;for(var O={},C=0;C<10;C++)O["_"+String.fromCharCode(C)]=C;if(Object.getOwnPropertyNames(O).map(function(H){return O[H]}).join("")!=="0123456789")return!1;var U={};return"abcdefghijklmnopqrst".split("").forEach(function(H){U[H]=H}),Object.keys(Object.assign({},U)).join("")==="abcdefghijklmnopqrst"}catch(H){return!1}}()?Object.assign:function(L,O){for(var C,U,H=k(L),W=1;W=ie||nn<0||Jt&&Rt-We>=yt}function oe(){var Rt=Ee();if(xe(Rt))return ze(Rt);Xe=setTimeout(oe,function(nn){var an=ie-(nn-ut);return Jt?he(an,yt-(nn-We)):an}(Rt))}function ze(Rt){return Xe=void 0,rt&&je?Q(Rt):(je=qe=void 0,gt)}function ct(){var Rt=Ee(),nn=xe(Rt);if(je=arguments,qe=this,ut=Rt,nn){if(Xe===void 0)return fe(ut);if(Jt)return Xe=setTimeout(oe,ie),Q(ut)}return Xe===void 0&&(Xe=setTimeout(oe,ie)),gt}return ie=pe(ie)||0,se(Oe)&&(Ft=!!Oe.leading,yt=(Jt="maxWait"in Oe)?m(pe(Oe.maxWait)||0,ie):yt,rt="trailing"in Oe?!!Oe.trailing:rt),ct.cancel=function(){Xe!==void 0&&clearTimeout(Xe),We=0,je=ut=qe=Xe=void 0},ct.flush=function(){return Xe===void 0?gt:ze(Ee())},ct}function se(me){var ie=_(me);return!!me&&(ie=="object"||ie=="function")}function De(me){return _(me)=="symbol"||function(ie){return!!ie&&_(ie)=="object"}(me)&&ne.call(me)=="[object Symbol]"}function pe(me){if(typeof me=="number")return me;if(De(me))return NaN;if(se(me)){var ie=typeof me.valueOf=="function"?me.valueOf():me;me=se(ie)?ie+"":ie}if(typeof me!="string")return me===0?me:+me;me=me.replace(t,"");var Oe=L.test(me);return Oe||O.test(me)?C(me.slice(2),Oe?2:8):k.test(me)?NaN:+me}i.exports=function(me,ie,Oe){var je=!0,qe=!0;if(typeof me!="function")throw new TypeError("Expected a function");return se(Oe)&&(je="leading"in Oe?!!Oe.leading:je,qe="trailing"in Oe?!!Oe.trailing:qe),ve(me,ie,{leading:je,maxWait:ie,trailing:qe})}}).call(this,a(4))},function(i,o,a){(function(p){function _(Q){return(_=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(fe){return typeof fe}:function(fe){return fe&&typeof Symbol=="function"&&fe.constructor===Symbol&&fe!==Symbol.prototype?"symbol":typeof fe})(Q)}var t;o=i.exports=m,t=(p===void 0?"undefined":_(p))==="object"&&p.env&&p.env.NODE_DEBUG&&/\bsemver\b/i.test(p.env.NODE_DEBUG)?function(){var Q=Array.prototype.slice.call(arguments,0);Q.unshift("SEMVER"),console.log.apply(console,Q)}:function(){},o.SEMVER_SPEC_VERSION="2.0.0";var k=Number.MAX_SAFE_INTEGER||9007199254740991,L=o.re=[],O=o.src=[],C=o.tokens={},U=0;function H(Q){C[Q]=U++}H("NUMERICIDENTIFIER"),O[C.NUMERICIDENTIFIER]="0|[1-9]\\d*",H("NUMERICIDENTIFIERLOOSE"),O[C.NUMERICIDENTIFIERLOOSE]="[0-9]+",H("NONNUMERICIDENTIFIER"),O[C.NONNUMERICIDENTIFIER]="\\d*[a-zA-Z-][a-zA-Z0-9-]*",H("MAINVERSION"),O[C.MAINVERSION]="("+O[C.NUMERICIDENTIFIER]+")\\.("+O[C.NUMERICIDENTIFIER]+")\\.("+O[C.NUMERICIDENTIFIER]+")",H("MAINVERSIONLOOSE"),O[C.MAINVERSIONLOOSE]="("+O[C.NUMERICIDENTIFIERLOOSE]+")\\.("+O[C.NUMERICIDENTIFIERLOOSE]+")\\.("+O[C.NUMERICIDENTIFIERLOOSE]+")",H("PRERELEASEIDENTIFIER"),O[C.PRERELEASEIDENTIFIER]="(?:"+O[C.NUMERICIDENTIFIER]+"|"+O[C.NONNUMERICIDENTIFIER]+")",H("PRERELEASEIDENTIFIERLOOSE"),O[C.PRERELEASEIDENTIFIERLOOSE]="(?:"+O[C.NUMERICIDENTIFIERLOOSE]+"|"+O[C.NONNUMERICIDENTIFIER]+")",H("PRERELEASE"),O[C.PRERELEASE]="(?:-("+O[C.PRERELEASEIDENTIFIER]+"(?:\\."+O[C.PRERELEASEIDENTIFIER]+")*))",H("PRERELEASELOOSE"),O[C.PRERELEASELOOSE]="(?:-?("+O[C.PRERELEASEIDENTIFIERLOOSE]+"(?:\\."+O[C.PRERELEASEIDENTIFIERLOOSE]+")*))",H("BUILDIDENTIFIER"),O[C.BUILDIDENTIFIER]="[0-9A-Za-z-]+",H("BUILD"),O[C.BUILD]="(?:\\+("+O[C.BUILDIDENTIFIER]+"(?:\\."+O[C.BUILDIDENTIFIER]+")*))",H("FULL"),H("FULLPLAIN"),O[C.FULLPLAIN]="v?"+O[C.MAINVERSION]+O[C.PRERELEASE]+"?"+O[C.BUILD]+"?",O[C.FULL]="^"+O[C.FULLPLAIN]+"$",H("LOOSEPLAIN"),O[C.LOOSEPLAIN]="[v=\\s]*"+O[C.MAINVERSIONLOOSE]+O[C.PRERELEASELOOSE]+"?"+O[C.BUILD]+"?",H("LOOSE"),O[C.LOOSE]="^"+O[C.LOOSEPLAIN]+"$",H("GTLT"),O[C.GTLT]="((?:<|>)?=?)",H("XRANGEIDENTIFIERLOOSE"),O[C.XRANGEIDENTIFIERLOOSE]=O[C.NUMERICIDENTIFIERLOOSE]+"|x|X|\\*",H("XRANGEIDENTIFIER"),O[C.XRANGEIDENTIFIER]=O[C.NUMERICIDENTIFIER]+"|x|X|\\*",H("XRANGEPLAIN"),O[C.XRANGEPLAIN]="[v=\\s]*("+O[C.XRANGEIDENTIFIER]+")(?:\\.("+O[C.XRANGEIDENTIFIER]+")(?:\\.("+O[C.XRANGEIDENTIFIER]+")(?:"+O[C.PRERELEASE]+")?"+O[C.BUILD]+"?)?)?",H("XRANGEPLAINLOOSE"),O[C.XRANGEPLAINLOOSE]="[v=\\s]*("+O[C.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+O[C.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+O[C.XRANGEIDENTIFIERLOOSE]+")(?:"+O[C.PRERELEASELOOSE]+")?"+O[C.BUILD]+"?)?)?",H("XRANGE"),O[C.XRANGE]="^"+O[C.GTLT]+"\\s*"+O[C.XRANGEPLAIN]+"$",H("XRANGELOOSE"),O[C.XRANGELOOSE]="^"+O[C.GTLT]+"\\s*"+O[C.XRANGEPLAINLOOSE]+"$",H("COERCE"),O[C.COERCE]="(^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])",H("COERCERTL"),L[C.COERCERTL]=new RegExp(O[C.COERCE],"g"),H("LONETILDE"),O[C.LONETILDE]="(?:~>?)",H("TILDETRIM"),O[C.TILDETRIM]="(\\s*)"+O[C.LONETILDE]+"\\s+",L[C.TILDETRIM]=new RegExp(O[C.TILDETRIM],"g"),H("TILDE"),O[C.TILDE]="^"+O[C.LONETILDE]+O[C.XRANGEPLAIN]+"$",H("TILDELOOSE"),O[C.TILDELOOSE]="^"+O[C.LONETILDE]+O[C.XRANGEPLAINLOOSE]+"$",H("LONECARET"),O[C.LONECARET]="(?:\\^)",H("CARETTRIM"),O[C.CARETTRIM]="(\\s*)"+O[C.LONECARET]+"\\s+",L[C.CARETTRIM]=new RegExp(O[C.CARETTRIM],"g"),H("CARET"),O[C.CARET]="^"+O[C.LONECARET]+O[C.XRANGEPLAIN]+"$",H("CARETLOOSE"),O[C.CARETLOOSE]="^"+O[C.LONECARET]+O[C.XRANGEPLAINLOOSE]+"$",H("COMPARATORLOOSE"),O[C.COMPARATORLOOSE]="^"+O[C.GTLT]+"\\s*("+O[C.LOOSEPLAIN]+")$|^$",H("COMPARATOR"),O[C.COMPARATOR]="^"+O[C.GTLT]+"\\s*("+O[C.FULLPLAIN]+")$|^$",H("COMPARATORTRIM"),O[C.COMPARATORTRIM]="(\\s*)"+O[C.GTLT]+"\\s*("+O[C.LOOSEPLAIN]+"|"+O[C.XRANGEPLAIN]+")",L[C.COMPARATORTRIM]=new RegExp(O[C.COMPARATORTRIM],"g"),H("HYPHENRANGE"),O[C.HYPHENRANGE]="^\\s*("+O[C.XRANGEPLAIN]+")\\s+-\\s+("+O[C.XRANGEPLAIN]+")\\s*$",H("HYPHENRANGELOOSE"),O[C.HYPHENRANGELOOSE]="^\\s*("+O[C.XRANGEPLAINLOOSE]+")\\s+-\\s+("+O[C.XRANGEPLAINLOOSE]+")\\s*$",H("STAR"),O[C.STAR]="(<|>)?=?\\s*\\*";for(var W=0;W256||!(fe.loose?L[C.LOOSE]:L[C.FULL]).test(Q))return null;try{return new m(Q,fe)}catch(xe){return null}}function m(Q,fe){if(fe&&_(fe)==="object"||(fe={loose:!!fe,includePrerelease:!1}),Q instanceof m){if(Q.loose===fe.loose)return Q;Q=Q.version}else if(typeof Q!="string")throw new TypeError("Invalid Version: "+Q);if(Q.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof m))return new m(Q,fe);t("SemVer",Q,fe),this.options=fe,this.loose=!!fe.loose;var xe=Q.trim().match(fe.loose?L[C.LOOSE]:L[C.FULL]);if(!xe)throw new TypeError("Invalid Version: "+Q);if(this.raw=Q,this.major=+xe[1],this.minor=+xe[2],this.patch=+xe[3],this.major>k||this.major<0)throw new TypeError("Invalid major version");if(this.minor>k||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>k||this.patch<0)throw new TypeError("Invalid patch version");xe[4]?this.prerelease=xe[4].split(".").map(function(oe){if(/^[0-9]+$/.test(oe)){var ze=+oe;if(ze>=0&&ze=0;)typeof this.prerelease[xe]=="number"&&(this.prerelease[xe]++,xe=-2);xe===-1&&this.prerelease.push(0)}fe&&(this.prerelease[0]===fe?isNaN(this.prerelease[1])&&(this.prerelease=[fe,0]):this.prerelease=[fe,0]);break;default:throw new Error("invalid increment argument: "+Q)}return this.format(),this.raw=this.version,this},o.inc=function(Q,fe,xe,oe){typeof xe=="string"&&(oe=xe,xe=void 0);try{return new m(Q,xe).inc(fe,oe).version}catch(ze){return null}},o.diff=function(Q,fe){if(pe(Q,fe))return null;var xe=ne(Q),oe=ne(fe),ze="";if(xe.prerelease.length||oe.prerelease.length){ze="pre";var ct="prerelease"}for(var Rt in xe)if((Rt==="major"||Rt==="minor"||Rt==="patch")&&xe[Rt]!==oe[Rt])return ze+Rt;return ct},o.compareIdentifiers=Ee;var he=/^[0-9]+$/;function Ee(Q,fe){var xe=he.test(Q),oe=he.test(fe);return xe&&oe&&(Q=+Q,fe=+fe),Q===fe?0:xe&&!oe?-1:oe&&!xe?1:Q0}function De(Q,fe,xe){return ve(Q,fe,xe)<0}function pe(Q,fe,xe){return ve(Q,fe,xe)===0}function me(Q,fe,xe){return ve(Q,fe,xe)!==0}function ie(Q,fe,xe){return ve(Q,fe,xe)>=0}function Oe(Q,fe,xe){return ve(Q,fe,xe)<=0}function je(Q,fe,xe,oe){switch(fe){case"===":return _(Q)==="object"&&(Q=Q.version),_(xe)==="object"&&(xe=xe.version),Q===xe;case"!==":return _(Q)==="object"&&(Q=Q.version),_(xe)==="object"&&(xe=xe.version),Q!==xe;case"":case"=":case"==":return pe(Q,xe,oe);case"!=":return me(Q,xe,oe);case">":return se(Q,xe,oe);case">=":return ie(Q,xe,oe);case"<":return De(Q,xe,oe);case"<=":return Oe(Q,xe,oe);default:throw new TypeError("Invalid operator: "+fe)}}function qe(Q,fe){if(fe&&_(fe)==="object"||(fe={loose:!!fe,includePrerelease:!1}),Q instanceof qe){if(Q.loose===!!fe.loose)return Q;Q=Q.value}if(!(this instanceof qe))return new qe(Q,fe);t("comparator",Q,fe),this.options=fe,this.loose=!!fe.loose,this.parse(Q),this.semver===yt?this.value="":this.value=this.operator+this.semver.version,t("comp",this)}o.rcompareIdentifiers=function(Q,fe){return Ee(fe,Q)},o.major=function(Q,fe){return new m(Q,fe).major},o.minor=function(Q,fe){return new m(Q,fe).minor},o.patch=function(Q,fe){return new m(Q,fe).patch},o.compare=ve,o.compareLoose=function(Q,fe){return ve(Q,fe,!0)},o.compareBuild=function(Q,fe,xe){var oe=new m(Q,xe),ze=new m(fe,xe);return oe.compare(ze)||oe.compareBuild(ze)},o.rcompare=function(Q,fe,xe){return ve(fe,Q,xe)},o.sort=function(Q,fe){return Q.sort(function(xe,oe){return o.compareBuild(xe,oe,fe)})},o.rsort=function(Q,fe){return Q.sort(function(xe,oe){return o.compareBuild(oe,xe,fe)})},o.gt=se,o.lt=De,o.eq=pe,o.neq=me,o.gte=ie,o.lte=Oe,o.cmp=je,o.Comparator=qe;var yt={};function gt(Q,fe){if(fe&&_(fe)==="object"||(fe={loose:!!fe,includePrerelease:!1}),Q instanceof gt)return Q.loose===!!fe.loose&&Q.includePrerelease===!!fe.includePrerelease?Q:new gt(Q.raw,fe);if(Q instanceof qe)return new gt(Q.value,fe);if(!(this instanceof gt))return new gt(Q,fe);if(this.options=fe,this.loose=!!fe.loose,this.includePrerelease=!!fe.includePrerelease,this.raw=Q,this.set=Q.split(/\s*\|\|\s*/).map(function(xe){return this.parseRange(xe.trim())},this).filter(function(xe){return xe.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+Q);this.format()}function Xe(Q,fe){for(var xe=!0,oe=Q.slice(),ze=oe.pop();xe&&oe.length;)xe=oe.every(function(ct){return ze.intersects(ct,fe)}),ze=oe.pop();return xe}function ut(Q){return!Q||Q.toLowerCase()==="x"||Q==="*"}function We(Q,fe,xe,oe,ze,ct,Rt,nn,an,Mn,lr,ln,Vt){return((fe=ut(xe)?"":ut(oe)?">="+xe+".0.0":ut(ze)?">="+xe+"."+oe+".0":">="+fe)+" "+(nn=ut(an)?"":ut(Mn)?"<"+(+an+1)+".0.0":ut(lr)?"<"+an+"."+(+Mn+1)+".0":ln?"<="+an+"."+Mn+"."+lr+"-"+ln:"<="+nn)).trim()}function Ft(Q,fe,xe){for(var oe=0;oe0){var ze=Q[oe].semver;if(ze.major===fe.major&&ze.minor===fe.minor&&ze.patch===fe.patch)return!0}return!1}return!0}function Jt(Q,fe,xe){try{fe=new gt(fe,xe)}catch(oe){return!1}return fe.test(Q)}function rt(Q,fe,xe,oe){var ze,ct,Rt,nn,an;switch(Q=new m(Q,oe),fe=new gt(fe,oe),xe){case">":ze=se,ct=Oe,Rt=De,nn=">",an=">=";break;case"<":ze=De,ct=ie,Rt=se,nn="<",an="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Jt(Q,fe,oe))return!1;for(var Mn=0;Mn=0.0.0")),ln=ln||Er,Vt=Vt||Er,ze(Er.semver,ln.semver,oe)?ln=Er:Rt(Er.semver,Vt.semver,oe)&&(Vt=Er)}),ln.operator===nn||ln.operator===an||(!Vt.operator||Vt.operator===nn)&&ct(Q,Vt.semver)||Vt.operator===an&&Rt(Q,Vt.semver))return!1}return!0}qe.prototype.parse=function(Q){var fe=this.options.loose?L[C.COMPARATORLOOSE]:L[C.COMPARATOR],xe=Q.match(fe);if(!xe)throw new TypeError("Invalid comparator: "+Q);this.operator=xe[1]!==void 0?xe[1]:"",this.operator==="="&&(this.operator=""),xe[2]?this.semver=new m(xe[2],this.options.loose):this.semver=yt},qe.prototype.toString=function(){return this.value},qe.prototype.test=function(Q){if(t("Comparator.test",Q,this.options.loose),this.semver===yt||Q===yt)return!0;if(typeof Q=="string")try{Q=new m(Q,this.options)}catch(fe){return!1}return je(Q,this.operator,this.semver,this.options)},qe.prototype.intersects=function(Q,fe){if(!(Q instanceof qe))throw new TypeError("a Comparator is required");var xe;if(fe&&_(fe)==="object"||(fe={loose:!!fe,includePrerelease:!1}),this.operator==="")return this.value===""||(xe=new gt(Q.value,fe),Jt(this.value,xe,fe));if(Q.operator==="")return Q.value===""||(xe=new gt(this.value,fe),Jt(Q.semver,xe,fe));var oe=!(this.operator!==">="&&this.operator!==">"||Q.operator!==">="&&Q.operator!==">"),ze=!(this.operator!=="<="&&this.operator!=="<"||Q.operator!=="<="&&Q.operator!=="<"),ct=this.semver.version===Q.semver.version,Rt=!(this.operator!==">="&&this.operator!=="<="||Q.operator!==">="&&Q.operator!=="<="),nn=je(this.semver,"<",Q.semver,fe)&&(this.operator===">="||this.operator===">")&&(Q.operator==="<="||Q.operator==="<"),an=je(this.semver,">",Q.semver,fe)&&(this.operator==="<="||this.operator==="<")&&(Q.operator===">="||Q.operator===">");return oe||ze||ct&&Rt||nn||an},o.Range=gt,gt.prototype.format=function(){return this.range=this.set.map(function(Q){return Q.join(" ").trim()}).join("||").trim(),this.range},gt.prototype.toString=function(){return this.range},gt.prototype.parseRange=function(Q){var fe=this.options.loose;Q=Q.trim();var xe=fe?L[C.HYPHENRANGELOOSE]:L[C.HYPHENRANGE];Q=Q.replace(xe,We),t("hyphen replace",Q),Q=Q.replace(L[C.COMPARATORTRIM],"$1$2$3"),t("comparator trim",Q,L[C.COMPARATORTRIM]),Q=(Q=(Q=Q.replace(L[C.TILDETRIM],"$1~")).replace(L[C.CARETTRIM],"$1^")).split(/\s+/).join(" ");var oe=fe?L[C.COMPARATORLOOSE]:L[C.COMPARATOR],ze=Q.split(" ").map(function(ct){return function(Rt,nn){return t("comp",Rt,nn),Rt=function(an,Mn){return an.trim().split(/\s+/).map(function(lr){return function(ln,Vt){t("caret",ln,Vt);var Er=Vt.loose?L[C.CARETLOOSE]:L[C.CARET];return ln.replace(Er,function(w,jt,Xn,vr,jr){var fr;return t("caret",ln,w,jt,Xn,vr,jr),ut(jt)?fr="":ut(Xn)?fr=">="+jt+".0.0 <"+(+jt+1)+".0.0":ut(vr)?fr=jt==="0"?">="+jt+"."+Xn+".0 <"+jt+"."+(+Xn+1)+".0":">="+jt+"."+Xn+".0 <"+(+jt+1)+".0.0":jr?(t("replaceCaret pr",jr),fr=jt==="0"?Xn==="0"?">="+jt+"."+Xn+"."+vr+"-"+jr+" <"+jt+"."+Xn+"."+(+vr+1):">="+jt+"."+Xn+"."+vr+"-"+jr+" <"+jt+"."+(+Xn+1)+".0":">="+jt+"."+Xn+"."+vr+"-"+jr+" <"+(+jt+1)+".0.0"):(t("no pr"),fr=jt==="0"?Xn==="0"?">="+jt+"."+Xn+"."+vr+" <"+jt+"."+Xn+"."+(+vr+1):">="+jt+"."+Xn+"."+vr+" <"+jt+"."+(+Xn+1)+".0":">="+jt+"."+Xn+"."+vr+" <"+(+jt+1)+".0.0"),t("caret return",fr),fr})}(lr,Mn)}).join(" ")}(Rt,nn),t("caret",Rt),Rt=function(an,Mn){return an.trim().split(/\s+/).map(function(lr){return function(ln,Vt){var Er=Vt.loose?L[C.TILDELOOSE]:L[C.TILDE];return ln.replace(Er,function(w,jt,Xn,vr,jr){var fr;return t("tilde",ln,w,jt,Xn,vr,jr),ut(jt)?fr="":ut(Xn)?fr=">="+jt+".0.0 <"+(+jt+1)+".0.0":ut(vr)?fr=">="+jt+"."+Xn+".0 <"+jt+"."+(+Xn+1)+".0":jr?(t("replaceTilde pr",jr),fr=">="+jt+"."+Xn+"."+vr+"-"+jr+" <"+jt+"."+(+Xn+1)+".0"):fr=">="+jt+"."+Xn+"."+vr+" <"+jt+"."+(+Xn+1)+".0",t("tilde return",fr),fr})}(lr,Mn)}).join(" ")}(Rt,nn),t("tildes",Rt),Rt=function(an,Mn){return t("replaceXRanges",an,Mn),an.split(/\s+/).map(function(lr){return function(ln,Vt){ln=ln.trim();var Er=Vt.loose?L[C.XRANGELOOSE]:L[C.XRANGE];return ln.replace(Er,function(w,jt,Xn,vr,jr,fr){t("xRange",ln,w,jt,Xn,vr,jr,fr);var zr=ut(Xn),Xt=zr||ut(vr),wu=Xt||ut(jr),d0=wu;return jt==="="&&d0&&(jt=""),fr=Vt.includePrerelease?"-0":"",zr?w=jt===">"||jt==="<"?"<0.0.0-0":"*":jt&&d0?(Xt&&(vr=0),jr=0,jt===">"?(jt=">=",Xt?(Xn=+Xn+1,vr=0,jr=0):(vr=+vr+1,jr=0)):jt==="<="&&(jt="<",Xt?Xn=+Xn+1:vr=+vr+1),w=jt+Xn+"."+vr+"."+jr+fr):Xt?w=">="+Xn+".0.0"+fr+" <"+(+Xn+1)+".0.0"+fr:wu&&(w=">="+Xn+"."+vr+".0"+fr+" <"+Xn+"."+(+vr+1)+".0"+fr),t("xRange return",w),w})}(lr,Mn)}).join(" ")}(Rt,nn),t("xrange",Rt),Rt=function(an,Mn){return t("replaceStars",an,Mn),an.trim().replace(L[C.STAR],"")}(Rt,nn),t("stars",Rt),Rt}(ct,this.options)},this).join(" ").split(/\s+/);return this.options.loose&&(ze=ze.filter(function(ct){return!!ct.match(oe)})),ze=ze.map(function(ct){return new qe(ct,this.options)},this)},gt.prototype.intersects=function(Q,fe){if(!(Q instanceof gt))throw new TypeError("a Range is required");return this.set.some(function(xe){return Xe(xe,fe)&&Q.set.some(function(oe){return Xe(oe,fe)&&xe.every(function(ze){return oe.every(function(ct){return ze.intersects(ct,fe)})})})})},o.toComparators=function(Q,fe){return new gt(Q,fe).set.map(function(xe){return xe.map(function(oe){return oe.value}).join(" ").trim().split(" ")})},gt.prototype.test=function(Q){if(!Q)return!1;if(typeof Q=="string")try{Q=new m(Q,this.options)}catch(xe){return!1}for(var fe=0;fe":ct.prerelease.length===0?ct.patch++:ct.prerelease.push(0),ct.raw=ct.format();case"":case">=":xe&&!se(xe,ct)||(xe=ct);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+ze.operator)}});return xe&&Q.test(xe)?xe:null},o.validRange=function(Q,fe){try{return new gt(Q,fe).range||"*"}catch(xe){return null}},o.ltr=function(Q,fe,xe){return rt(Q,fe,"<",xe)},o.gtr=function(Q,fe,xe){return rt(Q,fe,">",xe)},o.outside=rt,o.prerelease=function(Q,fe){var xe=ne(Q,fe);return xe&&xe.prerelease.length?xe.prerelease:null},o.intersects=function(Q,fe,xe){return Q=new gt(Q,xe),fe=new gt(fe,xe),Q.intersects(fe)},o.coerce=function(Q,fe){if(Q instanceof m)return Q;if(typeof Q=="number"&&(Q=String(Q)),typeof Q!="string")return null;var xe=null;if((fe=fe||{}).rtl){for(var oe;(oe=L[C.COERCERTL].exec(Q))&&(!xe||xe.index+xe[0].length!==Q.length);)xe&&oe.index+oe[0].length===xe.index+xe[0].length||(xe=oe),L[C.COERCERTL].lastIndex=oe.index+oe[1].length+oe[2].length;L[C.COERCERTL].lastIndex=-1}else xe=Q.match(L[C.COERCE]);return xe===null?null:ne(xe[2]+"."+(xe[3]||"0")+"."+(xe[4]||"0"),fe)}}).call(this,a(5))},function(i,o){function a(_){return(a=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(_)}var p;p=function(){return this}();try{p=p||new Function("return this")()}catch(_){(typeof window=="undefined"?"undefined":a(window))==="object"&&(p=window)}i.exports=p},function(i,o){var a,p,_=i.exports={};function t(){throw new Error("setTimeout has not been defined")}function k(){throw new Error("clearTimeout has not been defined")}function L(Ee){if(a===setTimeout)return setTimeout(Ee,0);if((a===t||!a)&&setTimeout)return a=setTimeout,setTimeout(Ee,0);try{return a(Ee,0)}catch(ve){try{return a.call(null,Ee,0)}catch(se){return a.call(this,Ee,0)}}}(function(){try{a=typeof setTimeout=="function"?setTimeout:t}catch(Ee){a=t}try{p=typeof clearTimeout=="function"?clearTimeout:k}catch(Ee){p=k}})();var O,C=[],U=!1,H=-1;function W(){U&&O&&(U=!1,O.length?C=O.concat(C):H=-1,C.length&&ne())}function ne(){if(!U){var Ee=L(W);U=!0;for(var ve=C.length;ve;){for(O=C,C=[];++H1)for(var se=1;sethis[k])return me(this,this[m].get(Xe)),!1;var rt=this[m].get(Xe).value;return this[H]&&(this[W]||this[H](Xe,rt.value)),rt.now=Ft,rt.maxAge=We,rt.value=ut,this[L]+=Jt-rt.length,rt.length=Jt,this.get(Xe),pe(this),!0}var Q=new ie(Xe,ut,Jt,Ft,We);return Q.length>this[k]?(this[H]&&this[H](Xe,ut),!1):(this[L]+=Q.length,this[ne].unshift(Q),this[m].set(Xe,this[ne].head),pe(this),!0)}},{key:"has",value:function(Xe){if(!this[m].has(Xe))return!1;var ut=this[m].get(Xe).value;return!De(this,ut)}},{key:"get",value:function(Xe){return se(this,Xe,!0)}},{key:"peek",value:function(Xe){return se(this,Xe,!1)}},{key:"pop",value:function(){var Xe=this[ne].tail;return Xe?(me(this,Xe),Xe.value):null}},{key:"del",value:function(Xe){me(this,this[m].get(Xe))}},{key:"load",value:function(Xe){this.reset();for(var ut=Date.now(),We=Xe.length-1;We>=0;We--){var Ft=Xe[We],Jt=Ft.e||0;if(Jt===0)this.set(Ft.k,Ft.v);else{var rt=Jt-ut;rt>0&&this.set(Ft.k,Ft.v,rt)}}}},{key:"prune",value:function(){var Xe=this;this[m].forEach(function(ut,We){return se(Xe,We,!1)})}},{key:"max",set:function(Xe){if(typeof Xe!="number"||Xe<0)throw new TypeError("max must be a non-negative number");this[k]=Xe||1/0,pe(this)},get:function(){return this[k]}},{key:"allowStale",set:function(Xe){this[C]=!!Xe},get:function(){return this[C]}},{key:"maxAge",set:function(Xe){if(typeof Xe!="number")throw new TypeError("maxAge must be a non-negative number");this[U]=Xe,pe(this)},get:function(){return this[U]}},{key:"lengthCalculator",set:function(Xe){var ut=this;typeof Xe!="function"&&(Xe=Ee),Xe!==this[O]&&(this[O]=Xe,this[L]=0,this[ne].forEach(function(We){We.length=ut[O](We.value,We.key),ut[L]+=We.length})),pe(this)},get:function(){return this[O]}},{key:"length",get:function(){return this[L]}},{key:"itemCount",get:function(){return this[ne].length}}])&&_(qe.prototype,yt),gt&&_(qe,gt),je}(),se=function(je,qe,yt){var gt=je[m].get(qe);if(gt){var Xe=gt.value;if(De(je,Xe)){if(me(je,gt),!je[C])return}else yt&&(je[he]&&(gt.value.now=Date.now()),je[ne].unshiftNode(gt));return Xe.value}},De=function(je,qe){if(!qe||!qe.maxAge&&!je[U])return!1;var yt=Date.now()-qe.now;return qe.maxAge?yt>qe.maxAge:je[U]&&yt>je[U]},pe=function(je){if(je[L]>je[k])for(var qe=je[ne].tail;je[L]>je[k]&&qe!==null;){var yt=qe.prev;me(je,qe),qe=yt}},me=function(je,qe){if(qe){var yt=qe.value;je[H]&&je[H](yt.key,yt.value),je[L]-=yt.length,je[m].delete(yt.key),je[ne].removeNode(qe)}},ie=function je(qe,yt,gt,Xe,ut){p(this,je),this.key=qe,this.value=yt,this.length=gt,this.now=Xe,this.maxAge=ut||0},Oe=function(je,qe,yt,gt){var Xe=yt.value;De(je,Xe)&&(me(je,yt),je[C]||(Xe=void 0)),Xe&&qe.call(gt,Xe.value,Xe.key,je)};i.exports=ve},function(i,o,a){(function(p){function _(t){return(_=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(k){return typeof k}:function(k){return k&&typeof Symbol=="function"&&k.constructor===Symbol&&k!==Symbol.prototype?"symbol":typeof k})(t)}i.exports=function(){if(typeof document=="undefined"||!document.addEventListener)return null;var t,k,L,O={};return O.copy=function(){var C=!1,U=null,H=!1;function W(){C=!1,U=null,H&&window.getSelection().removeAllRanges(),H=!1}return document.addEventListener("copy",function(ne){if(C){for(var m in U)ne.clipboardData.setData(m,U[m]);ne.preventDefault()}}),function(ne){return new Promise(function(m,he){C=!0,typeof ne=="string"?U={"text/plain":ne}:ne instanceof Node?U={"text/html":new XMLSerializer().serializeToString(ne)}:ne instanceof Object?U=ne:he("Invalid data type. Must be string, DOM node, or an object mapping MIME types to strings."),function Ee(ve){try{if(document.execCommand("copy"))W(),m();else{if(ve)throw W(),new Error("Unable to copy. Perhaps it's not available in your browser?");(function(){var se=document.getSelection();if(!document.queryCommandEnabled("copy")&&se.isCollapsed){var De=document.createRange();De.selectNodeContents(document.body),se.removeAllRanges(),se.addRange(De),H=!0}})(),Ee(!0)}}catch(se){W(),he(se)}}(!1)})}}(),O.paste=(L=!1,document.addEventListener("paste",function(C){if(L){L=!1,C.preventDefault();var U=t;t=null,U(C.clipboardData.getData(k))}}),function(C){return new Promise(function(U,H){L=!0,t=U,k=C||"text/plain";try{document.execCommand("paste")||(L=!1,H(new Error("Unable to paste. Pasting only works in Internet Explorer at the moment.")))}catch(W){L=!1,H(new Error(W))}})}),typeof ClipboardEvent=="undefined"&&window.clipboardData!==void 0&&window.clipboardData.setData!==void 0&&(function(C){function U(pe,me){return function(){pe.apply(me,arguments)}}function H(pe){if(_(this)!="object")throw new TypeError("Promises must be constructed via new");if(typeof pe!="function")throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],ve(pe,U(ne,this),U(m,this))}function W(pe){var me=this;return this._state===null?void this._deferreds.push(pe):void se(function(){var ie=me._state?pe.onFulfilled:pe.onRejected;if(ie!==null){var Oe;try{Oe=ie(me._value)}catch(je){return void pe.reject(je)}pe.resolve(Oe)}else(me._state?pe.resolve:pe.reject)(me._value)})}function ne(pe){try{if(pe===this)throw new TypeError("A promise cannot be resolved with itself.");if(pe&&(_(pe)=="object"||typeof pe=="function")){var me=pe.then;if(typeof me=="function")return void ve(U(me,pe),U(ne,this),U(m,this))}this._state=!0,this._value=pe,he.call(this)}catch(ie){m.call(this,ie)}}function m(pe){this._state=!1,this._value=pe,he.call(this)}function he(){for(var pe=0,me=this._deferreds.length;me>pe;pe++)W.call(this,this._deferreds[pe]);this._deferreds=null}function Ee(pe,me,ie,Oe){this.onFulfilled=typeof pe=="function"?pe:null,this.onRejected=typeof me=="function"?me:null,this.resolve=ie,this.reject=Oe}function ve(pe,me,ie){var Oe=!1;try{pe(function(je){Oe||(Oe=!0,me(je))},function(je){Oe||(Oe=!0,ie(je))})}catch(je){if(Oe)return;Oe=!0,ie(je)}}var se=H.immediateFn||typeof p=="function"&&p||function(pe){setTimeout(pe,1)},De=Array.isArray||function(pe){return Object.prototype.toString.call(pe)==="[object Array]"};H.prototype.catch=function(pe){return this.then(null,pe)},H.prototype.then=function(pe,me){var ie=this;return new H(function(Oe,je){W.call(ie,new Ee(pe,me,Oe,je))})},H.all=function(){var pe=Array.prototype.slice.call(arguments.length===1&&De(arguments[0])?arguments[0]:arguments);return new H(function(me,ie){function Oe(yt,gt){try{if(gt&&(_(gt)=="object"||typeof gt=="function")){var Xe=gt.then;if(typeof Xe=="function")return void Xe.call(gt,function(ut){Oe(yt,ut)},ie)}pe[yt]=gt,--je==0&&me(pe)}catch(ut){ie(ut)}}if(pe.length===0)return me([]);for(var je=pe.length,qe=0;qeOe;Oe++)pe[Oe].then(me,ie)})},i.exports?i.exports=H:C.Promise||(C.Promise=H)}(this),O.copy=function(C){return new Promise(function(U,H){if(typeof C!="string"&&!("text/plain"in C))throw new Error("You must provide a text/plain type.");var W=typeof C=="string"?C:C["text/plain"];window.clipboardData.setData("Text",W)?U():H(new Error("Copying was rejected."))})},O.paste=function(){return new Promise(function(C,U){var H=window.clipboardData.getData("Text");H?C(H):U(new Error("Pasting was rejected."))})}),O}()}).call(this,a(13).setImmediate)},function(i,o,a){"use strict";i.exports=a(15)},function(i,o,a){"use strict";a.r(o),o.default=`:root { - /** - * IMPORTANT: When new theme variables are added below\u2013 also add them to SettingsContext updateThemeVariables() - */ - - /* Light theme */ - --light-color-attribute-name: #ef6632; - --light-color-attribute-name-not-editable: #23272f; - --light-color-attribute-name-inverted: rgba(255, 255, 255, 0.7); - --light-color-attribute-value: #1a1aa6; - --light-color-attribute-value-inverted: #ffffff; - --light-color-attribute-editable-value: #1a1aa6; - --light-color-background: #ffffff; - --light-color-background-hover: rgba(0, 136, 250, 0.1); - --light-color-background-inactive: #e5e5e5; - --light-color-background-invalid: #fff0f0; - --light-color-background-selected: #0088fa; - --light-color-button-background: #ffffff; - --light-color-button-background-focus: #ededed; - --light-color-button: #5f6673; - --light-color-button-disabled: #cfd1d5; - --light-color-button-active: #0088fa; - --light-color-button-focus: #23272f; - --light-color-button-hover: #23272f; - --light-color-border: #eeeeee; - --light-color-commit-did-not-render-fill: #cfd1d5; - --light-color-commit-did-not-render-fill-text: #000000; - --light-color-commit-did-not-render-pattern: #cfd1d5; - --light-color-commit-did-not-render-pattern-text: #333333; - --light-color-commit-gradient-0: #37afa9; - --light-color-commit-gradient-1: #63b19e; - --light-color-commit-gradient-2: #80b393; - --light-color-commit-gradient-3: #97b488; - --light-color-commit-gradient-4: #abb67d; - --light-color-commit-gradient-5: #beb771; - --light-color-commit-gradient-6: #cfb965; - --light-color-commit-gradient-7: #dfba57; - --light-color-commit-gradient-8: #efbb49; - --light-color-commit-gradient-9: #febc38; - --light-color-commit-gradient-text: #000000; - --light-color-component-name: #6a51b2; - --light-color-component-name-inverted: #ffffff; - --light-color-component-badge-background: rgba(0, 0, 0, 0.1); - --light-color-component-badge-background-inverted: rgba(255, 255, 255, 0.25); - --light-color-component-badge-count: #777d88; - --light-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7); - --light-color-context-background: rgba(0,0,0,.9); - --light-color-context-background-hover: rgba(255, 255, 255, 0.1); - --light-color-context-background-selected: #178fb9; - --light-color-context-border: #3d424a; - --light-color-context-text: #ffffff; - --light-color-context-text-selected: #ffffff; - --light-color-dim: #777d88; - --light-color-dimmer: #cfd1d5; - --light-color-dimmest: #eff0f1; - --light-color-error-background: hsl(0, 100%, 97%); - --light-color-error-border: hsl(0, 100%, 92%); - --light-color-error-text: #ff0000; - --light-color-expand-collapse-toggle: #777d88; - --light-color-link: #0000ff; - --light-color-modal-background: rgba(255, 255, 255, 0.75); - --light-color-record-active: #fc3a4b; - --light-color-record-hover: #3578e5; - --light-color-record-inactive: #0088fa; - --light-color-scroll-thumb: #c2c2c2; - --light-color-scroll-track: #fafafa; - --light-color-search-match: yellow; - --light-color-search-match-current: #f7923b; - --light-color-selected-tree-highlight-active: rgba(0, 136, 250, 0.1); - --light-color-selected-tree-highlight-inactive: rgba(0, 0, 0, 0.05); - --light-color-shadow: rgba(0, 0, 0, 0.25); - --light-color-tab-selected-border: #0088fa; - --light-color-text: #000000; - --light-color-text-invalid: #ff0000; - --light-color-text-selected: #ffffff; - --light-color-toggle-background-invalid: #fc3a4b; - --light-color-toggle-background-on: #0088fa; - --light-color-toggle-background-off: #cfd1d5; - --light-color-toggle-text: #ffffff; - --light-color-tooltip-background: rgba(0, 0, 0, 0.9); - --light-color-tooltip-text: #ffffff; - - /* Dark theme */ - --dark-color-attribute-name: #9d87d2; - --dark-color-attribute-name-not-editable: #ededed; - --dark-color-attribute-name-inverted: #282828; - --dark-color-attribute-value: #cedae0; - --dark-color-attribute-value-inverted: #ffffff; - --dark-color-attribute-editable-value: yellow; - --dark-color-background: #282c34; - --dark-color-background-hover: rgba(255, 255, 255, 0.1); - --dark-color-background-inactive: #3d424a; - --dark-color-background-invalid: #5c0000; - --dark-color-background-selected: #178fb9; - --dark-color-button-background: #282c34; - --dark-color-button-background-focus: #3d424a; - --dark-color-button: #afb3b9; - --dark-color-button-active: #61dafb; - --dark-color-button-disabled: #4f5766; - --dark-color-button-focus: #a2e9fc; - --dark-color-button-hover: #ededed; - --dark-color-border: #3d424a; - --dark-color-commit-did-not-render-fill: #777d88; - --dark-color-commit-did-not-render-fill-text: #000000; - --dark-color-commit-did-not-render-pattern: #666c77; - --dark-color-commit-did-not-render-pattern-text: #ffffff; - --dark-color-commit-gradient-0: #37afa9; - --dark-color-commit-gradient-1: #63b19e; - --dark-color-commit-gradient-2: #80b393; - --dark-color-commit-gradient-3: #97b488; - --dark-color-commit-gradient-4: #abb67d; - --dark-color-commit-gradient-5: #beb771; - --dark-color-commit-gradient-6: #cfb965; - --dark-color-commit-gradient-7: #dfba57; - --dark-color-commit-gradient-8: #efbb49; - --dark-color-commit-gradient-9: #febc38; - --dark-color-commit-gradient-text: #000000; - --dark-color-component-name: #61dafb; - --dark-color-component-name-inverted: #282828; - --dark-color-component-badge-background: rgba(255, 255, 255, 0.25); - --dark-color-component-badge-background-inverted: rgba(0, 0, 0, 0.25); - --dark-color-component-badge-count: #8f949d; - --dark-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7); - --dark-color-context-background: rgba(255,255,255,.9); - --dark-color-context-background-hover: rgba(0, 136, 250, 0.1); - --dark-color-context-background-selected: #0088fa; - --dark-color-context-border: #eeeeee; - --dark-color-context-text: #000000; - --dark-color-context-text-selected: #ffffff; - --dark-color-dim: #8f949d; - --dark-color-dimmer: #777d88; - --dark-color-dimmest: #4f5766; - --dark-color-error-background: #200; - --dark-color-error-border: #900; - --dark-color-error-text: #f55; - --dark-color-expand-collapse-toggle: #8f949d; - --dark-color-link: #61dafb; - --dark-color-modal-background: rgba(0, 0, 0, 0.75); - --dark-color-record-active: #fc3a4b; - --dark-color-record-hover: #a2e9fc; - --dark-color-record-inactive: #61dafb; - --dark-color-scroll-thumb: #afb3b9; - --dark-color-scroll-track: #313640; - --dark-color-search-match: yellow; - --dark-color-search-match-current: #f7923b; - --dark-color-selected-tree-highlight-active: rgba(23, 143, 185, 0.15); - --dark-color-selected-tree-highlight-inactive: rgba(255, 255, 255, 0.05); - --dark-color-shadow: rgba(0, 0, 0, 0.5); - --dark-color-tab-selected-border: #178fb9; - --dark-color-text: #ffffff; - --dark-color-text-invalid: #ff8080; - --dark-color-text-selected: #ffffff; - --dark-color-toggle-background-invalid: #fc3a4b; - --dark-color-toggle-background-on: #178fb9; - --dark-color-toggle-background-off: #777d88; - --dark-color-toggle-text: #ffffff; - --dark-color-tooltip-background: rgba(255, 255, 255, 0.9); - --dark-color-tooltip-text: #000000; - - /* Font smoothing */ - --light-font-smoothing: auto; - --dark-font-smoothing: antialiased; - --font-smoothing: auto; - - /* Compact density */ - --compact-font-size-monospace-small: 9px; - --compact-font-size-monospace-normal: 11px; - --compact-font-size-monospace-large: 15px; - --compact-font-size-sans-small: 10px; - --compact-font-size-sans-normal: 12px; - --compact-font-size-sans-large: 14px; - --compact-line-height-data: 18px; - --compact-root-font-size: 16px; - - /* Comfortable density */ - --comfortable-font-size-monospace-small: 10px; - --comfortable-font-size-monospace-normal: 13px; - --comfortable-font-size-monospace-large: 17px; - --comfortable-font-size-sans-small: 12px; - --comfortable-font-size-sans-normal: 14px; - --comfortable-font-size-sans-large: 16px; - --comfortable-line-height-data: 22px; - --comfortable-root-font-size: 20px; - - /* GitHub.com system fonts */ - --font-family-monospace: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, - Courier, monospace; - --font-family-sans: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, - Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; - - /* Constant values shared between JS and CSS */ - --interaction-commit-size: 10px; - --interaction-label-width: 200px; -} -`},function(i,o,a){"use strict";function p(O){var C=this;if(C instanceof p||(C=new p),C.tail=null,C.head=null,C.length=0,O&&typeof O.forEach=="function")O.forEach(function(W){C.push(W)});else if(arguments.length>0)for(var U=0,H=arguments.length;U1)U=C;else{if(!this.head)throw new TypeError("Reduce of empty list with no initial value");H=this.head.next,U=this.head.value}for(var W=0;H!==null;W++)U=O(U,H.value,W),H=H.next;return U},p.prototype.reduceReverse=function(O,C){var U,H=this.tail;if(arguments.length>1)U=C;else{if(!this.tail)throw new TypeError("Reduce of empty list with no initial value");H=this.tail.prev,U=this.tail.value}for(var W=this.length-1;H!==null;W--)U=O(U,H.value,W),H=H.prev;return U},p.prototype.toArray=function(){for(var O=new Array(this.length),C=0,U=this.head;U!==null;C++)O[C]=U.value,U=U.next;return O},p.prototype.toArrayReverse=function(){for(var O=new Array(this.length),C=0,U=this.tail;U!==null;C++)O[C]=U.value,U=U.prev;return O},p.prototype.slice=function(O,C){(C=C||this.length)<0&&(C+=this.length),(O=O||0)<0&&(O+=this.length);var U=new p;if(Cthis.length&&(C=this.length);for(var H=0,W=this.head;W!==null&&Hthis.length&&(C=this.length);for(var H=this.length,W=this.tail;W!==null&&H>C;H--)W=W.prev;for(;W!==null&&H>O;H--,W=W.prev)U.push(W.value);return U},p.prototype.splice=function(O,C){O>this.length&&(O=this.length-1),O<0&&(O=this.length+O);for(var U=0,H=this.head;H!==null&&U=0&&(L._idleTimeoutId=setTimeout(function(){L._onTimeout&&L._onTimeout()},O))},a(14),o.setImmediate=typeof self!="undefined"&&self.setImmediate||p!==void 0&&p.setImmediate||this&&this.setImmediate,o.clearImmediate=typeof self!="undefined"&&self.clearImmediate||p!==void 0&&p.clearImmediate||this&&this.clearImmediate}).call(this,a(4))},function(i,o,a){(function(p,_){(function(t,k){"use strict";if(!t.setImmediate){var L,O,C,U,H,W=1,ne={},m=!1,he=t.document,Ee=Object.getPrototypeOf&&Object.getPrototypeOf(t);Ee=Ee&&Ee.setTimeout?Ee:t,{}.toString.call(t.process)==="[object process]"?L=function(De){_.nextTick(function(){se(De)})}:function(){if(t.postMessage&&!t.importScripts){var De=!0,pe=t.onmessage;return t.onmessage=function(){De=!1},t.postMessage("","*"),t.onmessage=pe,De}}()?(U="setImmediate$"+Math.random()+"$",H=function(De){De.source===t&&typeof De.data=="string"&&De.data.indexOf(U)===0&&se(+De.data.slice(U.length))},t.addEventListener?t.addEventListener("message",H,!1):t.attachEvent("onmessage",H),L=function(De){t.postMessage(U+De,"*")}):t.MessageChannel?((C=new MessageChannel).port1.onmessage=function(De){se(De.data)},L=function(De){C.port2.postMessage(De)}):he&&"onreadystatechange"in he.createElement("script")?(O=he.documentElement,L=function(De){var pe=he.createElement("script");pe.onreadystatechange=function(){se(De),pe.onreadystatechange=null,O.removeChild(pe),pe=null},O.appendChild(pe)}):L=function(De){setTimeout(se,0,De)},Ee.setImmediate=function(De){typeof De!="function"&&(De=new Function(""+De));for(var pe=new Array(arguments.length-1),me=0;mefe;fe++)if((Q=ve(rt,Ft,fe))!==-1){Ee=fe,Ft=Q;break e}Ft=-1}}e:{if(rt=Jt,(Q=W().get(We.primitive))!==void 0){for(fe=0;feFt-rt?null:Jt.slice(rt,Ft-1))!==null){if(Ft=0,qe!==null){for(;FtFt;qe--)yt=Xe.pop()}for(qe=Jt.length-Ft-1;1<=qe;qe--)Ft=[],yt.push({id:null,isStateEditable:!1,name:De(Jt[qe-1].functionName),value:void 0,subHooks:Ft}),Xe.push(yt),yt=Ft;qe=Jt}Ft=(Jt=We.primitive)==="Context"||Jt==="DebugValue"?null:gt++,yt.push({id:Ft,isStateEditable:Jt==="Reducer"||Jt==="State",name:Jt,value:We.value,subHooks:[]})}return function xe(oe,ze){for(var ct=[],Rt=0;Rt-1&&(ne=ne.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var m=ne.replace(/^\s+/,"").replace(/\(eval code/g,"("),he=m.match(/ (\((.+):(\d+):(\d+)\)$)/),Ee=(m=he?m.replace(he[0],""):m).split(/\s+/).slice(1),ve=this.extractLocation(he?he[1]:Ee.pop()),se=Ee.join(" ")||void 0,De=["eval",""].indexOf(ve[0])>-1?void 0:ve[0];return new O({functionName:se,fileName:De,lineNumber:ve[1],columnNumber:ve[2],source:ne})},this)},parseFFOrSafari:function(W){return W.stack.split(` -`).filter(function(ne){return!ne.match(H)},this).map(function(ne){if(ne.indexOf(" > eval")>-1&&(ne=ne.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),ne.indexOf("@")===-1&&ne.indexOf(":")===-1)return new O({functionName:ne});var m=/((.*".+"[^@]*)?[^@]*)(?:@)/,he=ne.match(m),Ee=he&&he[1]?he[1]:void 0,ve=this.extractLocation(ne.replace(m,""));return new O({functionName:Ee,fileName:ve[0],lineNumber:ve[1],columnNumber:ve[2],source:ne})},this)},parseOpera:function(W){return!W.stacktrace||W.message.indexOf(` -`)>-1&&W.message.split(` -`).length>W.stacktrace.split(` -`).length?this.parseOpera9(W):W.stack?this.parseOpera11(W):this.parseOpera10(W)},parseOpera9:function(W){for(var ne=/Line (\d+).*script (?:in )?(\S+)/i,m=W.message.split(` -`),he=[],Ee=2,ve=m.length;Ee/,"$2").replace(/\([^)]*\)/g,"")||void 0;ve.match(/\(([^)]*)\)/)&&(m=ve.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var De=m===void 0||m==="[arguments not available]"?void 0:m.split(",");return new O({functionName:se,args:De,fileName:Ee[0],lineNumber:Ee[1],columnNumber:Ee[2],source:ne})},this)}}})=="function"?p.apply(o,_):p)===void 0||(i.exports=t)})()},function(i,o,a){var p,_,t;(function(k,L){"use strict";_=[],(t=typeof(p=function(){function O(se){return se.charAt(0).toUpperCase()+se.substring(1)}function C(se){return function(){return this[se]}}var U=["isConstructor","isEval","isNative","isToplevel"],H=["columnNumber","lineNumber"],W=["fileName","functionName","source"],ne=U.concat(H,W,["args"]);function m(se){if(se)for(var De=0;De1?Re-1:0),ke=1;ke=0&&Re.splice(Z,1)}}}])&&p(z.prototype,G),$&&p(z,$),B}(),t=a(2),k=a.n(t);try{var L=a(9).default,O=function(B){var z=new RegExp("".concat(B,": ([0-9]+)")),G=L.match(z);return parseInt(G[1],10)};O("comfortable-line-height-data"),O("compact-line-height-data")}catch(B){}function C(B){try{return sessionStorage.getItem(B)}catch(z){return null}}function U(B){try{sessionStorage.removeItem(B)}catch(z){}}function H(B,z){try{return sessionStorage.setItem(B,z)}catch(G){}}var W=function(B,z){return B===z},ne=a(1),m=a.n(ne);function he(B){return B.ownerDocument?B.ownerDocument.defaultView:null}function Ee(B){var z=he(B);return z?z.frameElement:null}function ve(B){var z=pe(B);return se([B.getBoundingClientRect(),{top:z.borderTop,left:z.borderLeft,bottom:z.borderBottom,right:z.borderRight,width:0,height:0}])}function se(B){return B.reduce(function(z,G){return z==null?G:{top:z.top+G.top,left:z.left+G.left,width:z.width,height:z.height,bottom:z.bottom+G.bottom,right:z.right+G.right}})}function De(B,z){var G=Ee(B);if(G&&G!==z){for(var $=[B.getBoundingClientRect()],Te=G,ge=!1;Te;){var Re=ve(Te);if($.push(Re),Te=Ee(Te),ge)break;Te&&he(Te)===z&&(ge=!0)}return se($)}return B.getBoundingClientRect()}function pe(B){var z=window.getComputedStyle(B);return{borderLeft:parseInt(z.borderLeftWidth,10),borderRight:parseInt(z.borderRightWidth,10),borderTop:parseInt(z.borderTopWidth,10),borderBottom:parseInt(z.borderBottomWidth,10),marginLeft:parseInt(z.marginLeft,10),marginRight:parseInt(z.marginRight,10),marginTop:parseInt(z.marginTop,10),marginBottom:parseInt(z.marginBottom,10),paddingLeft:parseInt(z.paddingLeft,10),paddingRight:parseInt(z.paddingRight,10),paddingTop:parseInt(z.paddingTop,10),paddingBottom:parseInt(z.paddingBottom,10)}}function me(B,z){var G;if(typeof Symbol=="undefined"||B[Symbol.iterator]==null){if(Array.isArray(B)||(G=function(ke,Qe){if(!!ke){if(typeof ke=="string")return ie(ke,Qe);var ht=Object.prototype.toString.call(ke).slice(8,-1);if(ht==="Object"&&ke.constructor&&(ht=ke.constructor.name),ht==="Map"||ht==="Set")return Array.from(ke);if(ht==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(ht))return ie(ke,Qe)}}(B))||z&&B&&typeof B.length=="number"){G&&(B=G);var $=0,Te=function(){};return{s:Te,n:function(){return $>=B.length?{done:!0}:{done:!1,value:B[$++]}},e:function(ke){throw ke},f:Te}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ge,Re=!0,Z=!1;return{s:function(){G=B[Symbol.iterator]()},n:function(){var ke=G.next();return Re=ke.done,ke},e:function(ke){Z=!0,ge=ke},f:function(){try{Re||G.return==null||G.return()}finally{if(Z)throw ge}}}}function ie(B,z){(z==null||z>B.length)&&(z=B.length);for(var G=0,$=new Array(z);GRe.left+Re.width&&(ue=Re.left+Re.width-ht-5),{style:{top:ke+="px",left:ue+="px"}}}(z,G,{width:$.width,height:$.height});m()(this.tip.style,Te.style)}}]),B}(),Xe=function(){function B(){Oe(this,B);var z=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.window=z;var G=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.tipBoundsWindow=G;var $=z.document;this.container=$.createElement("div"),this.container.style.zIndex="10000000",this.tip=new gt($,this.container),this.rects=[],$.body.appendChild(this.container)}return qe(B,[{key:"remove",value:function(){this.tip.remove(),this.rects.forEach(function(z){z.remove()}),this.rects.length=0,this.container.parentNode&&this.container.parentNode.removeChild(this.container)}},{key:"inspect",value:function(z,G){for(var $=this,Te=z.filter(function(Ct){return Ct.nodeType===Node.ELEMENT_NODE});this.rects.length>Te.length;)this.rects.pop().remove();if(Te.length!==0){for(;this.rects.length1&&arguments[1]!==void 0?arguments[1]:W,nt=void 0,Ct=[],Mt=void 0,It=!1,sn=function(Lt,Dn){return He(Lt,Ct[Dn])},rn=function(){for(var Lt=arguments.length,Dn=Array(Lt),dr=0;dr5&&arguments[5]!==void 0?arguments[5]:0,Z=Oo(B);switch(Z){case"html_element":return z.push($),{inspectable:!1,preview_short:ki(B,!1),preview_long:ki(B,!0),name:B.tagName,type:Z};case"function":return z.push($),{inspectable:!1,preview_short:ki(B,!1),preview_long:ki(B,!0),name:typeof B.name!="function"&&B.name?B.name:"function",type:Z};case"string":return B.length<=500?B:B.slice(0,500)+"...";case"bigint":case"symbol":return z.push($),{inspectable:!1,preview_short:ki(B,!1),preview_long:ki(B,!0),name:B.toString(),type:Z};case"react_element":return z.push($),{inspectable:!1,preview_short:ki(B,!1),preview_long:ki(B,!0),name:F0(B)||"Unknown",type:Z};case"array_buffer":case"data_view":return z.push($),{inspectable:!1,preview_short:ki(B,!1),preview_long:ki(B,!0),name:Z==="data_view"?"DataView":"ArrayBuffer",size:B.byteLength,type:Z};case"array":return ge=Te($),Re>=2&&!ge?d0(Z,!0,B,z,$):B.map(function(ht,ue){return Ro(ht,z,G,$.concat([ue]),Te,ge?1:Re+1)});case"html_all_collection":case"typed_array":case"iterator":if(ge=Te($),Re>=2&&!ge)return d0(Z,!0,B,z,$);var ke={unserializable:!0,type:Z,readonly:!0,size:Z==="typed_array"?B.length:void 0,preview_short:ki(B,!1),preview_long:ki(B,!0),name:B.constructor&&B.constructor.name!=="Object"?B.constructor.name:""};return Xt(B[Symbol.iterator])&&Array.from(B).forEach(function(ht,ue){return ke[ue]=Ro(ht,z,G,$.concat([ue]),Te,ge?1:Re+1)}),G.push($),ke;case"opaque_iterator":return z.push($),{inspectable:!1,preview_short:ki(B,!1),preview_long:ki(B,!0),name:B[Symbol.toStringTag],type:Z};case"date":case"regexp":return z.push($),{inspectable:!1,preview_short:ki(B,!1),preview_long:ki(B,!0),name:B.toString(),type:Z};case"object":if(ge=Te($),Re>=2&&!ge)return d0(Z,!0,B,z,$);var Qe={};return lu(B).forEach(function(ht){var ue=ht.toString();Qe[ue]=Ro(B[ht],z,G,$.concat([ue]),Te,ge?1:Re+1)}),Qe;case"infinity":case"nan":case"undefined":return z.push($),{type:Z};default:return B}}function Qo(B){return(Qo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(z){return typeof z}:function(z){return z&&typeof Symbol=="function"&&z.constructor===Symbol&&z!==Symbol.prototype?"symbol":typeof z})(B)}function Fs(B){return function(z){if(Array.isArray(z))return Jo(z)}(B)||function(z){if(typeof Symbol!="undefined"&&Symbol.iterator in Object(z))return Array.from(z)}(B)||function(z,G){if(!!z){if(typeof z=="string")return Jo(z,G);var $=Object.prototype.toString.call(z).slice(8,-1);if($==="Object"&&z.constructor&&($=z.constructor.name),$==="Map"||$==="Set")return Array.from(z);if($==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test($))return Jo(z,G)}}(B)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Jo(B,z){(z==null||z>B.length)&&(z=B.length);for(var G=0,$=new Array(z);Gz.toString()?1:z.toString()>B.toString()?-1:0}function lu(B){for(var z=[],G=B,$=function(){var Te=[].concat(Fs(Object.keys(G)),Fs(Object.getOwnPropertySymbols(G))),ge=Object.getOwnPropertyDescriptors(G);Te.forEach(function(Re){ge[Re].enumerable&&z.push(Re)}),G=Object.getPrototypeOf(G)};G!=null;)$();return z}function mi(B){var z=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Anonymous",G=Zo.get(B);if(G!=null)return G;var $=z;return typeof B.displayName=="string"?$=B.displayName:typeof B.name=="string"&&B.name!==""&&($=B.name),Zo.set(B,$),$}var Dr=0;function $o(){return++Dr}function G0(B){var z=qt.get(B);if(z!==void 0)return z;for(var G=new Array(B.length),$=0;$1&&arguments[1]!==void 0?arguments[1]:50;return B.length>z?B.substr(0,z)+"\u2026":B}function ki(B,z){if(B!=null&&hasOwnProperty.call(B,wu.type))return z?B[wu.preview_long]:B[wu.preview_short];switch(Oo(B)){case"html_element":return"<".concat(su(B.tagName.toLowerCase())," />");case"function":return su("\u0192 ".concat(typeof B.name=="function"?"":B.name,"() {}"));case"string":return'"'.concat(B,'"');case"bigint":return su(B.toString()+"n");case"regexp":case"symbol":return su(B.toString());case"react_element":return"<".concat(su(F0(B)||"Unknown")," />");case"array_buffer":return"ArrayBuffer(".concat(B.byteLength,")");case"data_view":return"DataView(".concat(B.buffer.byteLength,")");case"array":if(z){for(var G="",$=0;$0&&(G+=", "),!((G+=ki(B[$],!1)).length>50));$++);return"[".concat(su(G),"]")}var Te=hasOwnProperty.call(B,wu.size)?B[wu.size]:B.length;return"Array(".concat(Te,")");case"typed_array":var ge="".concat(B.constructor.name,"(").concat(B.length,")");if(z){for(var Re="",Z=0;Z0&&(Re+=", "),!((Re+=B[Z]).length>50));Z++);return"".concat(ge," [").concat(su(Re),"]")}return ge;case"iterator":var ke=B.constructor.name;if(z){for(var Qe=Array.from(B),ht="",ue=0;ue0&&(ht+=", "),Array.isArray(He)){var nt=ki(He[0],!0),Ct=ki(He[1],!1);ht+="".concat(nt," => ").concat(Ct)}else ht+=ki(He,!1);if(ht.length>50)break}return"".concat(ke,"(").concat(B.size,") {").concat(su(ht),"}")}return"".concat(ke,"(").concat(B.size,")");case"opaque_iterator":return B[Symbol.toStringTag];case"date":return B.toString();case"object":if(z){for(var Mt=lu(B).sort(xi),It="",sn=0;sn0&&(It+=", "),(It+="".concat(rn.toString(),": ").concat(ki(B[rn],!1))).length>50)break}return"{".concat(su(It),"}")}return"{\u2026}";case"boolean":case"number":case"infinity":case"nan":case"null":case"undefined":return B;default:try{return su(""+B)}catch(Lt){return"unserializable"}}}var Ps=a(7);function Kl(B){return(Kl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(z){return typeof z}:function(z){return z&&typeof Symbol=="function"&&z.constructor===Symbol&&z!==Symbol.prototype?"symbol":typeof z})(B)}function P0(B,z){var G=Object.keys(B);if(Object.getOwnPropertySymbols){var $=Object.getOwnPropertySymbols(B);z&&($=$.filter(function(Te){return Object.getOwnPropertyDescriptor(B,Te).enumerable})),G.push.apply(G,$)}return G}function p0(B){for(var z=1;z2&&arguments[2]!==void 0?arguments[2]:[];if(B!==null){var $=[],Te=[],ge=Ro(B,$,Te,G,z);return{data:ge,cleaned:$,unserializable:Te}}return null}function K0(B){var z,G,$=(z=B,G=new Set,JSON.stringify(z,function(Re,Z){if(Kl(Z)==="object"&&Z!==null){if(G.has(Z))return;G.add(Z)}return typeof Z=="bigint"?Z.toString()+"n":Z})),Te=$===void 0?"undefined":$,ge=window.__REACT_DEVTOOLS_GLOBAL_HOOK__.clipboardCopyText;typeof ge=="function"?ge(Te).catch(function(Re){}):Object(Ps.copy)(Te)}function yi(B,z){var G=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,$=z[G],Te=Array.isArray(B)?B.slice():p0({},B);return G+1===z.length?Array.isArray(Te)?Te.splice($,1):delete Te[$]:Te[$]=yi(B[$],z,G+1),Te}function en(B,z,G){var $=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,Te=z[$],ge=Array.isArray(B)?B.slice():p0({},B);if($+1===z.length){var Re=G[$];ge[Re]=ge[Te],Array.isArray(ge)?ge.splice(Te,1):delete ge[Te]}else ge[Te]=en(B[Te],z,G,$+1);return ge}function bn(B,z,G){var $=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;if($>=z.length)return G;var Te=z[$],ge=Array.isArray(B)?B.slice():p0({},B);return ge[Te]=bn(B[Te],z,G,$+1),ge}var Ai=a(8);function gi(B,z){var G=Object.keys(B);if(Object.getOwnPropertySymbols){var $=Object.getOwnPropertySymbols(B);z&&($=$.filter(function(Te){return Object.getOwnPropertyDescriptor(B,Te).enumerable})),G.push.apply(G,$)}return G}function Wt(B){for(var z=1;z=B.length?{done:!0}:{done:!1,value:B[$++]}},e:function(ke){throw ke},f:Te}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ge,Re=!0,Z=!1;return{s:function(){G=B[Symbol.iterator]()},n:function(){var ke=G.next();return Re=ke.done,ke},e:function(ke){Z=!0,ge=ke},f:function(){try{Re||G.return==null||G.return()}finally{if(Z)throw ge}}}}function Xl(B,z){if(B){if(typeof B=="string")return Mo(B,z);var G=Object.prototype.toString.call(B).slice(8,-1);return G==="Object"&&B.constructor&&(G=B.constructor.name),G==="Map"||G==="Set"?Array.from(B):G==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(G)?Mo(B,z):void 0}}function Mo(B,z){(z==null||z>B.length)&&(z=B.length);for(var G=0,$=new Array(z);G0){var vt=ge(ae);if(vt!=null){var Qt,On=Yi(Po);try{for(On.s();!(Qt=On.n()).done;)if(Qt.value.test(vt))return!0}catch(ir){On.e(ir)}finally{On.f()}}}if(re!=null&&ys.size>0){var Sn,_n=re.fileName,Tn=Yi(ys);try{for(Tn.s();!(Sn=Tn.n()).done;)if(Sn.value.test(_n))return!0}catch(ir){Tn.e(ir)}finally{Tn.f()}}return!1}function Tu(ae){var re=ae.type;switch(ae.tag){case Ct:case Cr:return 1;case nt:case An:return 5;case rn:return 6;case Lt:return 11;case dr:return 7;case Dn:case er:case sn:return 9;case Nr:case Lr:return 8;case it:return 12;case Dt:return 13;default:switch(Re(re)){case 60111:case"Symbol(react.concurrent_mode)":case"Symbol(react.async_mode)":return 9;case 60109:case"Symbol(react.provider)":return 2;case 60110:case"Symbol(react.context)":return 2;case 60108:case"Symbol(react.strict_mode)":return 9;case 60114:case"Symbol(react.profiler)":return 10;default:return 9}}}function Ei(ae){if(Bo.has(ae))return ae;var re=ae.alternate;return re!=null&&Bo.has(re)?re:(Bo.add(ae),ae)}window.__REACT_DEVTOOLS_COMPONENT_FILTERS__!=null?gs(window.__REACT_DEVTOOLS_COMPONENT_FILTERS__):gs([{type:1,value:7,isEnabled:!0}]);var C0=new Map,Z0=new Map,Bo=new Set,la=new Map,$l=new Map,tu=-1;function ei(ae){if(!C0.has(ae)){var re=$o();C0.set(ae,re),Z0.set(re,ae)}return C0.get(ae)}function po(ae){switch(Tu(ae)){case 1:if(B0!==null){var re=ei(Ei(ae)),Fe=Ci(ae);Fe!==null&&B0.set(re,Fe)}}}var Bi={};function Ci(ae){switch(Tu(ae)){case 1:var re=ae.stateNode,Fe=Bi,Ae=Bi;return re!=null&&(re.constructor&&re.constructor.contextType!=null?Ae=re.context:(Fe=re.context)&&Object.keys(Fe).length===0&&(Fe=Bi)),[Fe,Ae];default:return null}}function mf(ae){switch(Tu(ae)){case 1:if(B0!==null){var re=ei(Ei(ae)),Fe=B0.has(re)?B0.get(re):null,Ae=Ci(ae);if(Fe==null||Ae==null)return null;var st=X0(Fe,2),vt=st[0],Qt=st[1],On=X0(Ae,2),Sn=On[0],_n=On[1];if(Sn!==Bi)return $0(vt,Sn);if(_n!==Bi)return Qt!==_n}}return null}function yf(ae,re){if(ae==null||re==null)return!1;if(re.hasOwnProperty("baseState")&&re.hasOwnProperty("memoizedState")&&re.hasOwnProperty("next")&&re.hasOwnProperty("queue"))for(;re!==null;){if(re.memoizedState!==ae.memoizedState)return!0;re=re.next,ae=ae.next}return!1}function $0(ae,re){if(ae==null||re==null||re.hasOwnProperty("baseState")&&re.hasOwnProperty("memoizedState")&&re.hasOwnProperty("next")&&re.hasOwnProperty("queue"))return null;var Fe,Ae=[],st=Yi(new Set([].concat(eu(Object.keys(ae)),eu(Object.keys(re)))));try{for(st.s();!(Fe=st.n()).done;){var vt=Fe.value;ae[vt]!==re[vt]&&Ae.push(vt)}}catch(Qt){st.e(Qt)}finally{st.f()}return Ae}function eo(ae,re){switch(re.tag){case Ct:case nt:case Mt:case Nr:case Lr:return(so(re)&ue)===ue;default:return ae.memoizedProps!==re.memoizedProps||ae.memoizedState!==re.memoizedState||ae.ref!==re.ref}}var Ce=[],et=[],Ye=[],Yt=[],Kt=new Map,pr=0,Wr=null;function xn(ae){Ce.push(ae)}function yu(ae){if(Ce.length!==0||et.length!==0||Ye.length!==0||Wr!==null||Pu){var re=et.length+Ye.length+(Wr===null?0:1),Fe=new Array(3+pr+(re>0?2+re:0)+Ce.length),Ae=0;if(Fe[Ae++]=z,Fe[Ae++]=tu,Fe[Ae++]=pr,Kt.forEach(function(On,Sn){Fe[Ae++]=Sn.length;for(var _n=G0(Sn),Tn=0;Tn<_n.length;Tn++)Fe[Ae+Tn]=_n[Tn];Ae+=Sn.length}),re>0){Fe[Ae++]=2,Fe[Ae++]=re;for(var st=et.length-1;st>=0;st--)Fe[Ae++]=et[st];for(var vt=0;vt0?ae.forEach(function(re){B.emit("operations",re)}):(Rr!==null&&(fu=!0),B.getFiberRoots(z).forEach(function(re){e0(tu=ei(Ei(re.current)),re.current),Pu&&re.memoizedInteractions!=null&&(rl={changeDescriptions:es?new Map:null,durations:[],commitTime:Ql()-Zu,interactions:Array.from(re.memoizedInteractions).map(function(Fe){return Wt(Wt({},Fe),{},{timestamp:Fe.timestamp-Zu})}),maxActualDuration:0,priorityLevel:null}),Jr(re.current,null,!1,!1),yu(),tu=-1}))},getBestMatchForTrackedPath:function(){if(Rr===null||to===null)return null;for(var ae=to;ae!==null&&Qu(ae);)ae=ae.return;return ae===null?null:{id:ei(Ei(ae)),isFullMatch:nu===Rr.length-1}},getDisplayNameForFiberID:function(ae){var re=Z0.get(ae);return re!=null?ge(re):null},getFiberIDForNative:function(ae){var re=arguments.length>1&&arguments[1]!==void 0&&arguments[1],Fe=G.findFiberByHostInstance(ae);if(Fe!=null){if(re)for(;Fe!==null&&Qu(Fe);)Fe=Fe.return;return ei(Ei(Fe))}return null},getInstanceAndStyle:function(ae){var re=null,Fe=null,Ae=Vu(ae);return Ae!==null&&(re=Ae.stateNode,Ae.memoizedProps!==null&&(Fe=Ae.memoizedProps.style)),{instance:re,style:Fe}},getOwnersList:function(ae){var re=Vu(ae);if(re==null)return null;var Fe=re._debugOwner,Ae=[{displayName:ge(re)||"Anonymous",id:ae,type:Tu(re)}];if(Fe)for(var st=Fe;st!==null;)Ae.unshift({displayName:ge(st)||"Anonymous",id:ei(Ei(st)),type:Tu(st)}),st=st._debugOwner||null;return Ae},getPathForElement:function(ae){var re=Z0.get(ae);if(re==null)return null;for(var Fe=[];re!==null;)Fe.push(E0(re)),re=re.return;return Fe.reverse(),Fe},getProfilingData:function(){var ae=[];if(_s===null)throw Error("getProfilingData() called before any profiling data was recorded");return _s.forEach(function(re,Fe){var Ae=[],st=[],vt=new Map,Qt=new Map,On=Cl!==null&&Cl.get(Fe)||"Unknown";O0!=null&&O0.forEach(function(Sn,_n){ho!=null&&ho.get(_n)===Fe&&st.push([_n,Sn])}),re.forEach(function(Sn,_n){var Tn=Sn.changeDescriptions,ir=Sn.durations,Bt=Sn.interactions,Fi=Sn.maxActualDuration,Ar=Sn.priorityLevel,mr=Sn.commitTime,Y=[];Bt.forEach(function(Di){vt.has(Di.id)||vt.set(Di.id,Di),Y.push(Di.id);var ru=Qt.get(Di.id);ru!=null?ru.push(_n):Qt.set(Di.id,[_n])});for(var ri=[],ii=[],Vr=0;Vr1?Kn.set(Tn,ir-1):Kn.delete(Tn),ni.delete(Sn)}(tu),ti(Fe,!1))}else e0(tu,Fe),Jr(Fe,null,!1,!1);if(Pu&&st){var On=_s.get(tu);On!=null?On.push(rl):_s.set(tu,[rl])}yu(),Io&&B.emit("traceUpdates",bo),tu=-1},handleCommitFiberUnmount:function(ae){ti(ae,!1)},inspectElement:function(ae,re){if(zi(ae)){if(re!=null){A0(re);var Fe=null;return re[0]==="hooks"&&(Fe="hooks"),{id:ae,type:"hydrated-path",path:re,value:Ri(Uu(Xi,re),Hi(null,Fe),re)}}return{id:ae,type:"no-change"}}if(Hs=!1,Xi!==null&&Xi.id===ae||(R0={}),(Xi=sa(ae))===null)return{id:ae,type:"not-found"};re!=null&&A0(re),function(st){var vt=st.hooks,Qt=st.id,On=st.props,Sn=Z0.get(Qt);if(Sn!=null){var _n=Sn.elementType,Tn=Sn.stateNode,ir=Sn.tag,Bt=Sn.type;switch(ir){case Ct:case Cr:case An:$.$r=Tn;break;case nt:$.$r={hooks:vt,props:On,type:Bt};break;case rn:$.$r={props:On,type:Bt.render};break;case Nr:case Lr:$.$r={props:On,type:_n!=null&&_n.type!=null?_n.type:Bt};break;default:$.$r=null}}else console.warn('Could not find Fiber with id "'.concat(Qt,'"'))}(Xi);var Ae=Wt({},Xi);return Ae.context=Ri(Ae.context,Hi("context",null)),Ae.hooks=Ri(Ae.hooks,Hi("hooks","hooks")),Ae.props=Ri(Ae.props,Hi("props",null)),Ae.state=Ri(Ae.state,Hi("state",null)),{id:ae,type:"full-data",value:Ae}},logElementToConsole:function(ae){var re=zi(ae)?Xi:sa(ae);if(re!==null){var Fe=typeof console.groupCollapsed=="function";Fe&&console.groupCollapsed("[Click to expand] %c<".concat(re.displayName||"Component"," />"),"color: var(--dom-tag-name-color); font-weight: normal;"),re.props!==null&&console.log("Props:",re.props),re.state!==null&&console.log("State:",re.state),re.hooks!==null&&console.log("Hooks:",re.hooks);var Ae=Tl(ae);Ae!==null&&console.log("Nodes:",Ae),re.source!==null&&console.log("Location:",re.source),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log("Right-click any value to save it as a global variable for further inspection."),Fe&&console.groupEnd()}else console.warn('Could not find Fiber with id "'.concat(ae,'"'))},prepareViewAttributeSource:function(ae,re){zi(ae)&&(window.$attribute=Uu(Xi,re))},prepareViewElementSource:function(ae){var re=Z0.get(ae);if(re!=null){var Fe=re.elementType,Ae=re.tag,st=re.type;switch(Ae){case Ct:case Cr:case An:case nt:$.$type=st;break;case rn:$.$type=st.render;break;case Nr:case Lr:$.$type=Fe!=null&&Fe.type!=null?Fe.type:st;break;default:$.$type=null}}else console.warn('Could not find Fiber with id "'.concat(ae,'"'))},overrideSuspense:function(ae,re){if(typeof Fo!="function"||typeof nl!="function")throw new Error("Expected overrideSuspense() to not get called for earlier React versions.");re?($u.add(ae),$u.size===1&&Fo(Es)):($u.delete(ae),$u.size===0&&Fo(gf));var Fe=Z0.get(ae);Fe!=null&&nl(Fe)},overrideValueAtPath:function(ae,re,Fe,Ae,st){var vt=Vu(re);if(vt!==null){var Qt=vt.stateNode;switch(ae){case"context":switch(Ae=Ae.slice(1),vt.tag){case Ct:Ae.length===0?Qt.context=st:Ao(Qt.context,Ae,st),Qt.forceUpdate()}break;case"hooks":typeof au=="function"&&au(vt,Fe,Ae,st);break;case"props":switch(vt.tag){case Ct:vt.pendingProps=bn(Qt.props,Ae,st),Qt.forceUpdate();break;default:typeof J0=="function"&&J0(vt,Ae,st)}break;case"state":switch(vt.tag){case Ct:Ao(Qt.state,Ae,st),Qt.forceUpdate()}}}},renamePath:function(ae,re,Fe,Ae,st){var vt=Vu(re);if(vt!==null){var Qt=vt.stateNode;switch(ae){case"context":switch(Ae=Ae.slice(1),st=st.slice(1),vt.tag){case Ct:Ae.length===0||Xr(Qt.context,Ae,st),Qt.forceUpdate()}break;case"hooks":typeof T0=="function"&&T0(vt,Fe,Ae,st);break;case"props":Qt===null?typeof _i=="function"&&_i(vt,Ae,st):(vt.pendingProps=en(Qt.props,Ae,st),Qt.forceUpdate());break;case"state":Xr(Qt.state,Ae,st),Qt.forceUpdate()}}},renderer:G,setTraceUpdatesEnabled:function(ae){Io=ae},setTrackedPath:Li,startProfiling:aa,stopProfiling:function(){Pu=!1,es=!1},storeAsGlobal:function(ae,re,Fe){if(zi(ae)){var Ae=Uu(Xi,re),st="$reactTemp".concat(Fe);window[st]=Ae,console.log(st),console.log(Ae)}},updateComponentFilters:function(ae){if(Pu)throw Error("Cannot modify filter preferences while profiling");B.getFiberRoots(z).forEach(function(re){tu=ei(Ei(re.current)),Wu(re.current),ti(re.current,!1),tu=-1}),gs(ae),Kn.clear(),B.getFiberRoots(z).forEach(function(re){e0(tu=ei(Ei(re.current)),re.current),Jr(re.current,null,!1,!1),yu(re),tu=-1})}}}var $n;function el(B){return(el=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(z){return typeof z}:function(z){return z&&typeof Symbol=="function"&&z.constructor===Symbol&&z!==Symbol.prototype?"symbol":typeof z})(B)}function ao(B,z,G){if($n===void 0)try{throw Error()}catch(Te){var $=Te.stack.trim().match(/\n( *(at )?)/);$n=$&&$[1]||""}return` -`+$n+B}var I0=!1;function wl(B,z,G){if(!B||I0)return"";var $,Te=Error.prepareStackTrace;Error.prepareStackTrace=void 0,I0=!0;var ge=G.current;G.current=null;try{if(z){var Re=function(){throw Error()};if(Object.defineProperty(Re.prototype,"props",{set:function(){throw Error()}}),(typeof Reflect=="undefined"?"undefined":el(Reflect))==="object"&&Reflect.construct){try{Reflect.construct(Re,[])}catch(He){$=He}Reflect.construct(B,[],Re)}else{try{Re.call()}catch(He){$=He}B.call(Re.prototype)}}else{try{throw Error()}catch(He){$=He}B()}}catch(He){if(He&&$&&typeof He.stack=="string"){for(var Z=He.stack.split(` -`),ke=$.stack.split(` -`),Qe=Z.length-1,ht=ke.length-1;Qe>=1&&ht>=0&&Z[Qe]!==ke[ht];)ht--;for(;Qe>=1&&ht>=0;Qe--,ht--)if(Z[Qe]!==ke[ht]){if(Qe!==1||ht!==1)do if(Qe--,--ht<0||Z[Qe]!==ke[ht])return` -`+Z[Qe].replace(" at new "," at ");while(Qe>=1&&ht>=0);break}}}finally{I0=!1,Error.prepareStackTrace=Te,G.current=ge}var ue=B?B.displayName||B.name:"";return ue?ao(ue):""}function No(B,z,G,$){return wl(B,!1,$)}function wt(B,z,G){var $=B.HostComponent,Te=B.LazyComponent,ge=B.SuspenseComponent,Re=B.SuspenseListComponent,Z=B.FunctionComponent,ke=B.IndeterminateComponent,Qe=B.SimpleMemoComponent,ht=B.ForwardRef,ue=B.Block,He=B.ClassComponent;switch(z.tag){case $:return ao(z.type);case Te:return ao("Lazy");case ge:return ao("Suspense");case Re:return ao("SuspenseList");case Z:case ke:case Qe:return No(z.type,0,0,G);case ht:return No(z.type.render,0,0,G);case ue:return No(z.type._render,0,0,G);case He:return function(nt,Ct,Mt,It){return wl(nt,!0,It)}(z.type,0,0,G);default:return""}}function bt(B,z,G){try{var $="",Te=z;do $+=wt(B,Te,G),Te=Te.return;while(Te);return $}catch(ge){return` -Error generating stack: `+ge.message+` -`+ge.stack}}function Hn(B,z){var G;if(typeof Symbol=="undefined"||B[Symbol.iterator]==null){if(Array.isArray(B)||(G=function(ke,Qe){if(!!ke){if(typeof ke=="string")return qr(ke,Qe);var ht=Object.prototype.toString.call(ke).slice(8,-1);if(ht==="Object"&&ke.constructor&&(ht=ke.constructor.name),ht==="Map"||ht==="Set")return Array.from(ke);if(ht==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(ht))return qr(ke,Qe)}}(B))||z&&B&&typeof B.length=="number"){G&&(B=G);var $=0,Te=function(){};return{s:Te,n:function(){return $>=B.length?{done:!0}:{done:!1,value:B[$++]}},e:function(ke){throw ke},f:Te}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ge,Re=!0,Z=!1;return{s:function(){G=B[Symbol.iterator]()},n:function(){var ke=G.next();return Re=ke.done,ke},e:function(ke){Z=!0,ge=ke},f:function(){try{Re||G.return==null||G.return()}finally{if(Z)throw ge}}}}function qr(B,z){(z==null||z>B.length)&&(z=B.length);for(var G=0,$=new Array(z);G0?Qe[Qe.length-1]:null,He=ue!==null&&(Qr.test(ue)||Ou.test(ue));if(!He){var nt,Ct=Hn(h0.values());try{for(Ct.s();!(nt=Ct.n()).done;){var Mt=nt.value,It=Mt.currentDispatcherRef,sn=Mt.getCurrentFiber,rn=Mt.workTagMap,Lt=sn();if(Lt!=null){var Dn=bt(rn,Lt,It);Dn!==""&&Qe.push(Dn);break}}}catch(dr){Ct.e(dr)}finally{Ct.f()}}}catch(dr){}ge.apply(void 0,Qe)};Re.__REACT_DEVTOOLS_ORIGINAL_METHOD__=ge,Ni[Te]=Re}catch(Z){}})}}function ju(B){return(ju=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(z){return typeof z}:function(z){return z&&typeof Symbol=="function"&&z.constructor===Symbol&&z!==Symbol.prototype?"symbol":typeof z})(B)}function vs(B,z){for(var G=0;GB.length)&&(z=B.length);for(var G=0,$=new Array(z);G1?Z-1:0),Qe=1;Qe0?ue[ue.length-1]:0),ue.push(un),Z.set($e,Qe(Pt._topLevelWrapper));try{var fn=it.apply(this,Dt);return ue.pop(),fn}catch(wr){throw ue=[],wr}finally{if(ue.length===0){var Jn=Z.get($e);if(Jn===void 0)throw new Error("Expected to find root ID.");dr(Jn)}}},performUpdateIfNecessary:function(it,Dt){var $e=Dt[0];if(S0($e)===9)return it.apply(this,Dt);var Pt=Qe($e);ue.push(Pt);var un=Qn($e);try{var fn=it.apply(this,Dt),Jn=Qn($e);return ht(un,Jn)||Ct($e,Pt,Jn),ue.pop(),fn}catch(au){throw ue=[],au}finally{if(ue.length===0){var wr=Z.get($e);if(wr===void 0)throw new Error("Expected to find root ID.");dr(wr)}}},receiveComponent:function(it,Dt){var $e=Dt[0];if(S0($e)===9)return it.apply(this,Dt);var Pt=Qe($e);ue.push(Pt);var un=Qn($e);try{var fn=it.apply(this,Dt),Jn=Qn($e);return ht(un,Jn)||Ct($e,Pt,Jn),ue.pop(),fn}catch(au){throw ue=[],au}finally{if(ue.length===0){var wr=Z.get($e);if(wr===void 0)throw new Error("Expected to find root ID.");dr(wr)}}},unmountComponent:function(it,Dt){var $e=Dt[0];if(S0($e)===9)return it.apply(this,Dt);var Pt=Qe($e);ue.push(Pt);try{var un=it.apply(this,Dt);return ue.pop(),function(Jn,wr){rn.push(wr),ge.delete(wr)}(0,Pt),un}catch(Jn){throw ue=[],Jn}finally{if(ue.length===0){var fn=Z.get($e);if(fn===void 0)throw new Error("Expected to find root ID.");dr(fn)}}}}));var It=[],sn=new Map,rn=[],Lt=0,Dn=null;function dr(it){if(It.length!==0||rn.length!==0||Dn!==null){var Dt=rn.length+(Dn===null?0:1),$e=new Array(3+Lt+(Dt>0?2+Dt:0)+It.length),Pt=0;if($e[Pt++]=z,$e[Pt++]=it,$e[Pt++]=Lt,sn.forEach(function(Jn,wr){$e[Pt++]=wr.length;for(var au=G0(wr),Nu=0;Nu0){$e[Pt++]=2,$e[Pt++]=Dt;for(var un=0;un"),"color: var(--dom-tag-name-color); font-weight: normal;"),Dt.props!==null&&console.log("Props:",Dt.props),Dt.state!==null&&console.log("State:",Dt.state),Dt.context!==null&&console.log("Context:",Dt.context);var Pt=Te(it);Pt!==null&&console.log("Node:",Pt),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log("Right-click any value to save it as a global variable for further inspection."),$e&&console.groupEnd()}else console.warn('Could not find element with id "'.concat(it,'"'))},overrideSuspense:function(){throw new Error("overrideSuspense not supported by this renderer")},overrideValueAtPath:function(it,Dt,$e,Pt,un){var fn=ge.get(Dt);if(fn!=null){var Jn=fn._instance;if(Jn!=null)switch(it){case"context":Ao(Jn.context,Pt,un),m0(Jn);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var wr=fn._currentElement;fn._currentElement=Q0(Q0({},wr),{},{props:bn(wr.props,Pt,un)}),m0(Jn);break;case"state":Ao(Jn.state,Pt,un),m0(Jn)}}},renamePath:function(it,Dt,$e,Pt,un){var fn=ge.get(Dt);if(fn!=null){var Jn=fn._instance;if(Jn!=null)switch(it){case"context":Xr(Jn.context,Pt,un),m0(Jn);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var wr=fn._currentElement;fn._currentElement=Q0(Q0({},wr),{},{props:en(wr.props,Pt,un)}),m0(Jn);break;case"state":Xr(Jn.state,Pt,un),m0(Jn)}}},prepareViewAttributeSource:function(it,Dt){var $e=Lr(it);$e!==null&&(window.$attribute=Uu($e,Dt))},prepareViewElementSource:function(it){var Dt=ge.get(it);if(Dt!=null){var $e=Dt._currentElement;$e!=null?$.$type=$e.type:console.warn('Could not find element with id "'.concat(it,'"'))}else console.warn('Could not find instance with id "'.concat(it,'"'))},renderer:G,setTraceUpdatesEnabled:function(it){},setTrackedPath:function(it){},startProfiling:function(){},stopProfiling:function(){},storeAsGlobal:function(it,Dt,$e){var Pt=Lr(it);if(Pt!==null){var un=Uu(Pt,Dt),fn="$reactTemp".concat($e);window[fn]=un,console.log(fn),console.log(un)}},updateComponentFilters:function(it){}}}function fi(B,z){var G=!1,$={bottom:0,left:0,right:0,top:0},Te=z[B];if(Te!=null){for(var ge=0,Re=Object.keys($);ge0?"development":"production";var It=Function.prototype.toString;if(Mt.Mount&&Mt.Mount._renderNewRootComponent){var sn=It.call(Mt.Mount._renderNewRootComponent);return sn.indexOf("function")!==0?"production":sn.indexOf("storedMeasure")!==-1?"development":sn.indexOf("should be a pure function")!==-1?sn.indexOf("NODE_ENV")!==-1||sn.indexOf("development")!==-1||sn.indexOf("true")!==-1?"development":sn.indexOf("nextElement")!==-1||sn.indexOf("nextComponent")!==-1?"unminified":"development":sn.indexOf("nextElement")!==-1||sn.indexOf("nextComponent")!==-1?"unminified":"outdated"}}catch(rn){}return"production"}(ke);try{var ue=window.__REACT_DEVTOOLS_APPEND_COMPONENT_STACK__!==!1,He=window.__REACT_DEVTOOLS_BREAK_ON_CONSOLE_ERRORS__===!0;(ue||He)&&(fo(ke),Jl({appendComponentStack:ue,breakOnConsoleErrors:He}))}catch(Mt){}var nt=B.__REACT_DEVTOOLS_ATTACH__;if(typeof nt=="function"){var Ct=nt(Z,Qe,ke,B);Z.rendererInterfaces.set(Qe,Ct)}return Z.emit("renderer",{id:Qe,renderer:ke,reactBuildType:ht}),Qe},on:function(ke,Qe){ge[ke]||(ge[ke]=[]),ge[ke].push(Qe)},off:function(ke,Qe){if(ge[ke]){var ht=ge[ke].indexOf(Qe);ht!==-1&&ge[ke].splice(ht,1),ge[ke].length||delete ge[ke]}},sub:function(ke,Qe){return Z.on(ke,Qe),function(){return Z.off(ke,Qe)}},supportsFiber:!0,checkDCE:function(ke){try{Function.prototype.toString.call(ke).indexOf("^_^")>-1&&(G=!0,setTimeout(function(){throw new Error("React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build")}))}catch(Qe){}},onCommitFiberUnmount:function(ke,Qe){var ht=Te.get(ke);ht!=null&&ht.handleCommitFiberUnmount(Qe)},onCommitFiberRoot:function(ke,Qe,ht){var ue=Z.getFiberRoots(ke),He=Qe.current,nt=ue.has(Qe),Ct=He.memoizedState==null||He.memoizedState.element==null;nt||Ct?nt&&Ct&&ue.delete(Qe):ue.add(Qe);var Mt=Te.get(ke);Mt!=null&&Mt.handleCommitFiberRoot(Qe,ht)}};Object.defineProperty(B,"__REACT_DEVTOOLS_GLOBAL_HOOK__",{configurable:!1,enumerable:!1,get:function(){return Z}})})(window);var y0=window.__REACT_DEVTOOLS_GLOBAL_HOOK__,Us=[{type:1,value:7,isEnabled:!0}];function ji(B){if(y0!=null){var z=B||{},G=z.host,$=G===void 0?"localhost":G,Te=z.nativeStyleEditorValidAttributes,ge=z.useHttps,Re=ge!==void 0&&ge,Z=z.port,ke=Z===void 0?8097:Z,Qe=z.websocket,ht=z.resolveRNStyle,ue=ht===void 0?null:ht,He=z.isAppActive,nt=Re?"wss":"ws",Ct=null;if((He===void 0?function(){return!0}:He)()){var Mt=null,It=[],sn=nt+"://"+$+":"+ke,rn=Qe||new window.WebSocket(sn);rn.onclose=function(){Mt!==null&&Mt.emit("shutdown"),Lt()},rn.onerror=function(){Lt()},rn.onmessage=function(Dn){var dr;try{if(typeof Dn.data!="string")throw Error();dr=JSON.parse(Dn.data)}catch(er){return void console.error("[React DevTools] Failed to parse JSON: "+Dn.data)}It.forEach(function(er){try{er(dr)}catch(Cr){throw console.log("[React DevTools] Error calling listener",dr),console.log("error:",Cr),Cr}})},rn.onopen=function(){(Mt=new co({listen:function(An){return It.push(An),function(){var Nr=It.indexOf(An);Nr>=0&&It.splice(Nr,1)}},send:function(An,Nr,g0){rn.readyState===rn.OPEN?rn.send(JSON.stringify({event:An,payload:Nr})):(Mt!==null&&Mt.shutdown(),Lt())}})).addListener("inspectElement",function(An){var Nr=An.id,g0=An.rendererID,Lr=Dn.rendererInterfaces[g0];if(Lr!=null){var it=Lr.findNativeNodesForFiberID(Nr);it!=null&&it[0]!=null&&Dn.emit("showNativeHighlight",it[0])}}),Mt.addListener("updateComponentFilters",function(An){Us=An}),window.__REACT_DEVTOOLS_COMPONENT_FILTERS__==null&&Mt.send("overrideComponentFilters",Us);var Dn=new Yn(Mt);if(Dn.addListener("shutdown",function(){y0.emit("shutdown")}),function(An,Nr,g0){if(An==null)return function(){};var Lr=[An.sub("renderer-attached",function($e){var Pt=$e.id,un=($e.renderer,$e.rendererInterface);Nr.setRendererInterface(Pt,un),un.flushInitialOperations()}),An.sub("unsupported-renderer-version",function($e){Nr.onUnsupportedRenderer($e)}),An.sub("operations",Nr.onHookOperations),An.sub("traceUpdates",Nr.onTraceUpdates)],it=function($e,Pt){var un=An.rendererInterfaces.get($e);un==null&&(typeof Pt.findFiberByHostInstance=="function"?un=Is(An,$e,Pt,g0):Pt.ComponentTree&&(un=ac(An,$e,Pt,g0)),un!=null&&An.rendererInterfaces.set($e,un)),un!=null?An.emit("renderer-attached",{id:$e,renderer:Pt,rendererInterface:un}):An.emit("unsupported-renderer-version",$e)};An.renderers.forEach(function($e,Pt){it(Pt,$e)}),Lr.push(An.sub("renderer",function($e){var Pt=$e.id,un=$e.renderer;it(Pt,un)})),An.emit("react-devtools",Nr),An.reactDevtoolsAgent=Nr;var Dt=function(){Lr.forEach(function($e){return $e()}),An.rendererInterfaces.forEach(function($e){$e.cleanup()}),An.reactDevtoolsAgent=null};Nr.addListener("shutdown",Dt),Lr.push(function(){Nr.removeListener("shutdown",Dt)})}(y0,Dn,window),ue!=null||y0.resolveRNStyle!=null)oa(Mt,Dn,ue||y0.resolveRNStyle,Te||y0.nativeStyleEditorValidAttributes||null);else{var dr,er,Cr=function(){Mt!==null&&oa(Mt,Dn,dr,er)};y0.hasOwnProperty("resolveRNStyle")||Object.defineProperty(y0,"resolveRNStyle",{enumerable:!1,get:function(){return dr},set:function(An){dr=An,Cr()}}),y0.hasOwnProperty("nativeStyleEditorValidAttributes")||Object.defineProperty(y0,"nativeStyleEditorValidAttributes",{enumerable:!1,get:function(){return er},set:function(An){er=An,Cr()}})}}}else Lt()}function Lt(){Ct===null&&(Ct=setTimeout(function(){return ji(B)},2e3))}}}])})});var kC=tt(MC=>{"use strict";Object.defineProperty(MC,"__esModule",{value:!0});AC();var Ob=OC();Ob.connectToDevTools()});var IC=tt(ug=>{"use strict";var NC=ug&&ug.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(ug,"__esModule",{value:!0});var LC=b_(),Mb=NC(IS()),FC=NC($p()),ps=bD();process.env.DEV==="true"&&kC();var PC=i=>{i==null||i.unsetMeasureFunc(),i==null||i.freeRecursive()};ug.default=Mb.default({schedulePassiveEffects:LC.unstable_scheduleCallback,cancelPassiveEffects:LC.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:i=>{if(i.isStaticDirty){i.isStaticDirty=!1,typeof i.onImmediateRender=="function"&&i.onImmediateRender();return}typeof i.onRender=="function"&&i.onRender()},getChildHostContext:(i,o)=>{let a=i.isInsideText,p=o==="ink-text"||o==="ink-virtual-text";return a===p?i:{isInsideText:p}},shouldSetTextContent:()=>!1,createInstance:(i,o,a,p)=>{if(p.isInsideText&&i==="ink-box")throw new Error(" can\u2019t be nested inside component");let _=i==="ink-text"&&p.isInsideText?"ink-virtual-text":i,t=ps.createNode(_);for(let[k,L]of Object.entries(o))k!=="children"&&(k==="style"?ps.setStyle(t,L):k==="internal_transform"?t.internal_transform=L:k==="internal_static"?t.internal_static=!0:ps.setAttribute(t,k,L));return t},createTextInstance:(i,o,a)=>{if(!a.isInsideText)throw new Error(`Text string "${i}" must be rendered inside component`);return ps.createTextNode(i)},resetTextContent:()=>{},hideTextInstance:i=>{ps.setTextNodeValue(i,"")},unhideTextInstance:(i,o)=>{ps.setTextNodeValue(i,o)},getPublicInstance:i=>i,hideInstance:i=>{var o;(o=i.yogaNode)===null||o===void 0||o.setDisplay(FC.default.DISPLAY_NONE)},unhideInstance:i=>{var o;(o=i.yogaNode)===null||o===void 0||o.setDisplay(FC.default.DISPLAY_FLEX)},appendInitialChild:ps.appendChildNode,appendChild:ps.appendChildNode,insertBefore:ps.insertBeforeNode,finalizeInitialChildren:(i,o,a,p)=>(i.internal_static&&(p.isStaticDirty=!0,p.staticNode=i),!1),supportsMutation:!0,appendChildToContainer:ps.appendChildNode,insertInContainerBefore:ps.insertBeforeNode,removeChildFromContainer:(i,o)=>{ps.removeChildNode(i,o),PC(o.yogaNode)},prepareUpdate:(i,o,a,p,_)=>{i.internal_static&&(_.isStaticDirty=!0);let t={},k=Object.keys(p);for(let L of k)if(p[L]!==a[L]){if(L==="style"&&typeof p.style=="object"&&typeof a.style=="object"){let C=p.style,U=a.style,H=Object.keys(C);for(let W of H){if(W==="borderStyle"||W==="borderColor"){if(typeof t.style!="object"){let ne={};t.style=ne}t.style.borderStyle=C.borderStyle,t.style.borderColor=C.borderColor}if(C[W]!==U[W]){if(typeof t.style!="object"){let ne={};t.style=ne}t.style[W]=C[W]}}continue}t[L]=p[L]}return t},commitUpdate:(i,o)=>{for(let[a,p]of Object.entries(o))a!=="children"&&(a==="style"?ps.setStyle(i,p):a==="internal_transform"?i.internal_transform=p:a==="internal_static"?i.internal_static=!0:ps.setAttribute(i,a,p))},commitTextUpdate:(i,o,a)=>{ps.setTextNodeValue(i,a)},removeChild:(i,o)=>{ps.removeChildNode(i,o),PC(o.yogaNode)}})});var BC=tt((pq,bC)=>{"use strict";bC.exports=(i,o=1,a)=>{if(a=Ht({indent:" ",includeEmptyLines:!1},a),typeof i!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof i}\``);if(typeof o!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof o}\``);if(typeof a.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof a.indent}\``);if(o===0)return i;let p=a.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return i.replace(p,a.indent.repeat(o))}});var UC=tt(og=>{"use strict";var kb=og&&og.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(og,"__esModule",{value:!0});var $_=kb($p());og.default=i=>i.getComputedWidth()-i.getComputedPadding($_.default.EDGE_LEFT)-i.getComputedPadding($_.default.EDGE_RIGHT)-i.getComputedBorder($_.default.EDGE_LEFT)-i.getComputedBorder($_.default.EDGE_RIGHT)});var zC=tt((vq,jC)=>{jC.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var qC=tt((mq,n3)=>{"use strict";var HC=zC();n3.exports=HC;n3.exports.default=HC});var VC=tt((yq,WC)=>{"use strict";WC.exports=(i,o=process.argv)=>{let a=i.startsWith("-")?"":i.length===1?"-":"--",p=o.indexOf(a+i),_=o.indexOf("--");return p!==-1&&(_===-1||p<_)}});var KC=tt((gq,GC)=>{"use strict";var Nb=require("os"),YC=require("tty"),df=VC(),{env:Ko}=process,v2;df("no-color")||df("no-colors")||df("color=false")||df("color=never")?v2=0:(df("color")||df("colors")||df("color=true")||df("color=always"))&&(v2=1);"FORCE_COLOR"in Ko&&(Ko.FORCE_COLOR==="true"?v2=1:Ko.FORCE_COLOR==="false"?v2=0:v2=Ko.FORCE_COLOR.length===0?1:Math.min(parseInt(Ko.FORCE_COLOR,10),3));function r3(i){return i===0?!1:{level:i,hasBasic:!0,has256:i>=2,has16m:i>=3}}function i3(i,o){if(v2===0)return 0;if(df("color=16m")||df("color=full")||df("color=truecolor"))return 3;if(df("color=256"))return 2;if(i&&!o&&v2===void 0)return 0;let a=v2||0;if(Ko.TERM==="dumb")return a;if(process.platform==="win32"){let p=Nb.release().split(".");return Number(p[0])>=10&&Number(p[2])>=10586?Number(p[2])>=14931?3:2:1}if("CI"in Ko)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(p=>p in Ko)||Ko.CI_NAME==="codeship"?1:a;if("TEAMCITY_VERSION"in Ko)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(Ko.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in Ko)return 1;if(Ko.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in Ko){let p=parseInt((Ko.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(Ko.TERM_PROGRAM){case"iTerm.app":return p>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(Ko.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(Ko.TERM)||"COLORTERM"in Ko?1:a}function Lb(i){let o=i3(i,i&&i.isTTY);return r3(o)}GC.exports={supportsColor:Lb,stdout:r3(i3(!0,YC.isatty(1))),stderr:r3(i3(!0,YC.isatty(2)))}});var QC=tt((_q,XC)=>{"use strict";var Fb=(i,o,a)=>{let p=i.indexOf(o);if(p===-1)return i;let _=o.length,t=0,k="";do k+=i.substr(t,p-t)+o+a,t=p+_,p=i.indexOf(o,t);while(p!==-1);return k+=i.substr(t),k},Pb=(i,o,a,p)=>{let _=0,t="";do{let k=i[p-1]==="\r";t+=i.substr(_,(k?p-1:p)-_)+o+(k?`\r -`:` -`)+a,_=p+1,p=i.indexOf(` -`,_)}while(p!==-1);return t+=i.substr(_),t};XC.exports={stringReplaceAll:Fb,stringEncaseCRLFWithFirstIndex:Pb}});var t6=tt((Eq,JC)=>{"use strict";var Ib=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,ZC=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,bb=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,Bb=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,Ub=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e",""],["a","\x07"]]);function $C(i){let o=i[0]==="u",a=i[1]==="{";return o&&!a&&i.length===5||i[0]==="x"&&i.length===3?String.fromCharCode(parseInt(i.slice(1),16)):o&&a?String.fromCodePoint(parseInt(i.slice(2,-1),16)):Ub.get(i)||i}function jb(i,o){let a=[],p=o.trim().split(/\s*,\s*/g),_;for(let t of p){let k=Number(t);if(!Number.isNaN(k))a.push(k);else if(_=t.match(bb))a.push(_[2].replace(Bb,(L,O,C)=>O?$C(O):C));else throw new Error(`Invalid Chalk template style argument: ${t} (in style '${i}')`)}return a}function zb(i){ZC.lastIndex=0;let o=[],a;for(;(a=ZC.exec(i))!==null;){let p=a[1];if(a[2]){let _=jb(p,a[2]);o.push([p].concat(_))}else o.push([p])}return o}function e6(i,o){let a={};for(let _ of o)for(let t of _.styles)a[t[0]]=_.inverse?null:t.slice(1);let p=i;for(let[_,t]of Object.entries(a))if(!!Array.isArray(t)){if(!(_ in p))throw new Error(`Unknown Chalk style: ${_}`);p=t.length>0?p[_](...t):p[_]}return p}JC.exports=(i,o)=>{let a=[],p=[],_=[];if(o.replace(Ib,(t,k,L,O,C,U)=>{if(k)_.push($C(k));else if(O){let H=_.join("");_=[],p.push(a.length===0?H:e6(i,a)(H)),a.push({inverse:L,styles:zb(O)})}else if(C){if(a.length===0)throw new Error("Found extraneous } in Chalk template literal");p.push(e6(i,a)(_.join(""))),_=[],a.pop()}else _.push(U)}),p.push(_.join("")),a.length>0){let t=`Chalk template literal is missing ${a.length} closing bracket${a.length===1?"":"s"} (\`}\`)`;throw new Error(t)}return p.join("")}});var i4=tt((Dq,n6)=>{"use strict";var lg=H_(),{stdout:u3,stderr:o3}=KC(),{stringReplaceAll:Hb,stringEncaseCRLFWithFirstIndex:qb}=QC(),{isArray:e4}=Array,r6=["ansi","ansi","ansi256","ansi16m"],Qv=Object.create(null),Wb=(i,o={})=>{if(o.level&&!(Number.isInteger(o.level)&&o.level>=0&&o.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let a=u3?u3.level:0;i.level=o.level===void 0?a:o.level},i6=class{constructor(o){return u6(o)}},u6=i=>{let o={};return Wb(o,i),o.template=(...a)=>o6(o.template,...a),Object.setPrototypeOf(o,t4.prototype),Object.setPrototypeOf(o.template,o),o.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},o.template.Instance=i6,o.template};function t4(i){return u6(i)}for(let[i,o]of Object.entries(lg))Qv[i]={get(){let a=n4(this,l3(o.open,o.close,this._styler),this._isEmpty);return Object.defineProperty(this,i,{value:a}),a}};Qv.visible={get(){let i=n4(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:i}),i}};var l6=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let i of l6)Qv[i]={get(){let{level:o}=this;return function(...a){let p=l3(lg.color[r6[o]][i](...a),lg.color.close,this._styler);return n4(this,p,this._isEmpty)}}};for(let i of l6){let o="bg"+i[0].toUpperCase()+i.slice(1);Qv[o]={get(){let{level:a}=this;return function(...p){let _=l3(lg.bgColor[r6[a]][i](...p),lg.bgColor.close,this._styler);return n4(this,_,this._isEmpty)}}}}var Vb=Object.defineProperties(()=>{},Zr(Ht({},Qv),{level:{enumerable:!0,get(){return this._generator.level},set(i){this._generator.level=i}}})),l3=(i,o,a)=>{let p,_;return a===void 0?(p=i,_=o):(p=a.openAll+i,_=o+a.closeAll),{open:i,close:o,openAll:p,closeAll:_,parent:a}},n4=(i,o,a)=>{let p=(..._)=>e4(_[0])&&e4(_[0].raw)?s6(p,o6(p,..._)):s6(p,_.length===1?""+_[0]:_.join(" "));return Object.setPrototypeOf(p,Vb),p._generator=i,p._styler=o,p._isEmpty=a,p},s6=(i,o)=>{if(i.level<=0||!o)return i._isEmpty?"":o;let a=i._styler;if(a===void 0)return o;let{openAll:p,closeAll:_}=a;if(o.indexOf("")!==-1)for(;a!==void 0;)o=Hb(o,a.close,a.open),a=a.parent;let t=o.indexOf(` -`);return t!==-1&&(o=qb(o,_,p,t)),p+o+_},s3,o6=(i,...o)=>{let[a]=o;if(!e4(a)||!e4(a.raw))return o.join(" ");let p=o.slice(1),_=[a.raw[0]];for(let t=1;t{"use strict";var Gb=sg&&sg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(sg,"__esModule",{value:!0});var ag=Gb(i4()),Yb=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,Kb=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,u4=(i,o)=>o==="foreground"?i:"bg"+i[0].toUpperCase()+i.slice(1);sg.default=(i,o,a)=>{if(!o)return i;if(o in ag.default){let _=u4(o,a);return ag.default[_](i)}if(o.startsWith("#")){let _=u4("hex",a);return ag.default[_](o)(i)}if(o.startsWith("ansi")){let _=Kb.exec(o);if(!_)return i;let t=u4(_[1],a),k=Number(_[2]);return ag.default[t](k)(i)}if(o.startsWith("rgb")||o.startsWith("hsl")||o.startsWith("hsv")||o.startsWith("hwb")){let _=Yb.exec(o);if(!_)return i;let t=u4(_[1],a),k=Number(_[2]),L=Number(_[3]),O=Number(_[4]);return ag.default[t](k,L,O)(i)}return i}});var f6=tt(fg=>{"use strict";var a6=fg&&fg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(fg,"__esModule",{value:!0});var Xb=a6(qC()),f3=a6(a3());fg.default=(i,o,a,p)=>{if(typeof a.style.borderStyle=="string"){let _=a.yogaNode.getComputedWidth(),t=a.yogaNode.getComputedHeight(),k=a.style.borderColor,L=Xb.default[a.style.borderStyle],O=f3.default(L.topLeft+L.horizontal.repeat(_-2)+L.topRight,k,"foreground"),C=(f3.default(L.vertical,k,"foreground")+` -`).repeat(t-2),U=f3.default(L.bottomLeft+L.horizontal.repeat(_-2)+L.bottomRight,k,"foreground");p.write(i,o,O,{transformers:[]}),p.write(i,o+1,C,{transformers:[]}),p.write(i+_-1,o+1,C,{transformers:[]}),p.write(i,o+t-1,U,{transformers:[]})}}});var d6=tt(cg=>{"use strict";var rh=cg&&cg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(cg,"__esModule",{value:!0});var Qb=rh($p()),Jb=rh(CD()),Zb=rh(BC()),$b=rh(FD()),eB=rh(UC()),tB=rh(ID()),nB=rh(f6()),rB=(i,o)=>{var a;let p=(a=i.childNodes[0])===null||a===void 0?void 0:a.yogaNode;if(p){let _=p.getComputedLeft(),t=p.getComputedTop();o=` -`.repeat(t)+Zb.default(o,_)}return o},c6=(i,o,a)=>{var p;let{offsetX:_=0,offsetY:t=0,transformers:k=[],skipStaticElements:L}=a;if(L&&i.internal_static)return;let{yogaNode:O}=i;if(O){if(O.getDisplay()===Qb.default.DISPLAY_NONE)return;let C=_+O.getComputedLeft(),U=t+O.getComputedTop(),H=k;if(typeof i.internal_transform=="function"&&(H=[i.internal_transform,...k]),i.nodeName==="ink-text"){let W=tB.default(i);if(W.length>0){let ne=Jb.default(W),m=eB.default(O);if(ne>m){let he=(p=i.style.textWrap)!==null&&p!==void 0?p:"wrap";W=$b.default(W,m,he)}W=rB(i,W),o.write(C,U,W,{transformers:H})}return}if(i.nodeName==="ink-box"&&nB.default(C,U,i,o),i.nodeName==="ink-root"||i.nodeName==="ink-box")for(let W of i.childNodes)c6(W,o,{offsetX:C,offsetY:U,transformers:H,skipStaticElements:L})}};cg.default=c6});var h6=tt((Cq,p6)=>{"use strict";p6.exports=i=>{i=Object.assign({onlyFirst:!1},i);let o=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(o,i.onlyFirst?void 0:"g")}});var m6=tt((xq,c3)=>{"use strict";var iB=h6(),v6=i=>typeof i=="string"?i.replace(iB(),""):i;c3.exports=v6;c3.exports.default=v6});var _6=tt((Rq,y6)=>{"use strict";var g6="[\uD800-\uDBFF][\uDC00-\uDFFF]";y6.exports=i=>i&&i.exact?new RegExp(`^${g6}$`):new RegExp(g6,"g")});var D6=tt((Aq,d3)=>{"use strict";var uB=m6(),oB=_6(),E6=i=>uB(i).replace(oB()," ").length;d3.exports=E6;d3.exports.default=E6});var C6=tt(dg=>{"use strict";var w6=dg&&dg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(dg,"__esModule",{value:!0});var S6=w6(ND()),lB=w6(D6()),T6=class{constructor(o){this.writes=[];let{width:a,height:p}=o;this.width=a,this.height=p}write(o,a,p,_){let{transformers:t}=_;!p||this.writes.push({x:o,y:a,text:p,transformers:t})}get(){let o=[];for(let p=0;pp.trimRight()).join(` -`),height:o.length}}};dg.default=T6});var A6=tt(pg=>{"use strict";var p3=pg&&pg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(pg,"__esModule",{value:!0});var sB=p3($p()),x6=p3(d6()),R6=p3(C6());pg.default=(i,o)=>{var a;if(i.yogaNode.setWidth(o),i.yogaNode){i.yogaNode.calculateLayout(void 0,void 0,sB.default.DIRECTION_LTR);let p=new R6.default({width:i.yogaNode.getComputedWidth(),height:i.yogaNode.getComputedHeight()});x6.default(i,p,{skipStaticElements:!0});let _;((a=i.staticNode)===null||a===void 0?void 0:a.yogaNode)&&(_=new R6.default({width:i.staticNode.yogaNode.getComputedWidth(),height:i.staticNode.yogaNode.getComputedHeight()}),x6.default(i.staticNode,_,{skipStaticElements:!1}));let{output:t,height:k}=p.get();return{output:t,outputHeight:k,staticOutput:_?`${_.get().output} -`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var N6=tt((kq,O6)=>{"use strict";var M6=require("stream"),k6=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],h3={},aB=i=>{let o=new M6.PassThrough,a=new M6.PassThrough;o.write=_=>i("stdout",_),a.write=_=>i("stderr",_);let p=new console.Console(o,a);for(let _ of k6)h3[_]=console[_],console[_]=p[_];return()=>{for(let _ of k6)console[_]=h3[_];h3={}}};O6.exports=aB});var m3=tt(v3=>{"use strict";Object.defineProperty(v3,"__esModule",{value:!0});v3.default=new WeakMap});var g3=tt(y3=>{"use strict";Object.defineProperty(y3,"__esModule",{value:!0});var fB=Mi(),L6=fB.createContext({exit:()=>{}});L6.displayName="InternalAppContext";y3.default=L6});var E3=tt(_3=>{"use strict";Object.defineProperty(_3,"__esModule",{value:!0});var cB=Mi(),F6=cB.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});F6.displayName="InternalStdinContext";_3.default=F6});var w3=tt(D3=>{"use strict";Object.defineProperty(D3,"__esModule",{value:!0});var dB=Mi(),P6=dB.createContext({stdout:void 0,write:()=>{}});P6.displayName="InternalStdoutContext";D3.default=P6});var T3=tt(S3=>{"use strict";Object.defineProperty(S3,"__esModule",{value:!0});var pB=Mi(),I6=pB.createContext({stderr:void 0,write:()=>{}});I6.displayName="InternalStderrContext";S3.default=I6});var o4=tt(C3=>{"use strict";Object.defineProperty(C3,"__esModule",{value:!0});var hB=Mi(),b6=hB.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});b6.displayName="InternalFocusContext";C3.default=b6});var U6=tt((Bq,B6)=>{"use strict";var vB=/[|\\{}()[\]^$+*?.-]/g;B6.exports=i=>{if(typeof i!="string")throw new TypeError("Expected a string");return i.replace(vB,"\\$&")}});var q6=tt((Uq,j6)=>{"use strict";var mB=U6(),z6=[].concat(require("module").builtinModules,"bootstrap_node","node").map(i=>new RegExp(`(?:\\(${i}\\.js:\\d+:\\d+\\)$|^\\s*at ${i}\\.js:\\d+:\\d+$)`));z6.push(/\(internal\/[^:]+:\d+:\d+\)$/,/\s*at internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var l4=class{constructor(o){o=Ht({ignoredPackages:[]},o),"internals"in o||(o.internals=l4.nodeInternals()),"cwd"in o||(o.cwd=process.cwd()),this._cwd=o.cwd.replace(/\\/g,"/"),this._internals=[].concat(o.internals,yB(o.ignoredPackages)),this._wrapCallSite=o.wrapCallSite||!1}static nodeInternals(){return[...z6]}clean(o,a=0){a=" ".repeat(a),Array.isArray(o)||(o=o.split(` -`)),!/^\s*at /.test(o[0])&&/^\s*at /.test(o[1])&&(o=o.slice(1));let p=!1,_=null,t=[];return o.forEach(k=>{if(k=k.replace(/\\/g,"/"),this._internals.some(O=>O.test(k)))return;let L=/^\s*at /.test(k);p?k=k.trimEnd().replace(/^(\s+)at /,"$1"):(k=k.trim(),L&&(k=k.slice(3))),k=k.replace(`${this._cwd}/`,""),k&&(L?(_&&(t.push(_),_=null),t.push(k)):(p=!0,_=k))}),t.map(k=>`${a}${k} -`).join("")}captureString(o,a=this.captureString){typeof o=="function"&&(a=o,o=Infinity);let{stackTraceLimit:p}=Error;o&&(Error.stackTraceLimit=o);let _={};Error.captureStackTrace(_,a);let{stack:t}=_;return Error.stackTraceLimit=p,this.clean(t)}capture(o,a=this.capture){typeof o=="function"&&(a=o,o=Infinity);let{prepareStackTrace:p,stackTraceLimit:_}=Error;Error.prepareStackTrace=(L,O)=>this._wrapCallSite?O.map(this._wrapCallSite):O,o&&(Error.stackTraceLimit=o);let t={};Error.captureStackTrace(t,a);let{stack:k}=t;return Object.assign(Error,{prepareStackTrace:p,stackTraceLimit:_}),k}at(o=this.at){let[a]=this.capture(1,o);if(!a)return{};let p={line:a.getLineNumber(),column:a.getColumnNumber()};H6(p,a.getFileName(),this._cwd),a.isConstructor()&&(p.constructor=!0),a.isEval()&&(p.evalOrigin=a.getEvalOrigin()),a.isNative()&&(p.native=!0);let _;try{_=a.getTypeName()}catch(L){}_&&_!=="Object"&&_!=="[object Object]"&&(p.type=_);let t=a.getFunctionName();t&&(p.function=t);let k=a.getMethodName();return k&&t!==k&&(p.method=k),p}parseLine(o){let a=o&&o.match(gB);if(!a)return null;let p=a[1]==="new",_=a[2],t=a[3],k=a[4],L=Number(a[5]),O=Number(a[6]),C=a[7],U=a[8],H=a[9],W=a[10]==="native",ne=a[11]===")",m,he={};if(U&&(he.line=Number(U)),H&&(he.column=Number(H)),ne&&C){let Ee=0;for(let ve=C.length-1;ve>0;ve--)if(C.charAt(ve)===")")Ee++;else if(C.charAt(ve)==="("&&C.charAt(ve-1)===" "&&(Ee--,Ee===-1&&C.charAt(ve-1)===" ")){let se=C.slice(0,ve-1);C=C.slice(ve+1),_+=` (${se}`;break}}if(_){let Ee=_.match(_B);Ee&&(_=Ee[1],m=Ee[2])}return H6(he,C,this._cwd),p&&(he.constructor=!0),t&&(he.evalOrigin=t,he.evalLine=L,he.evalColumn=O,he.evalFile=k&&k.replace(/\\/g,"/")),W&&(he.native=!0),_&&(he.function=_),m&&_!==m&&(he.method=m),he}};function H6(i,o,a){o&&(o=o.replace(/\\/g,"/"),o.startsWith(`${a}/`)&&(o=o.slice(a.length+1)),i.file=o)}function yB(i){if(i.length===0)return[];let o=i.map(a=>mB(a));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${o.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var gB=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),_B=/^(.*?) \[as (.*?)\]$/;j6.exports=l4});var V6=tt((jq,W6)=>{"use strict";W6.exports=(i,o)=>i.replace(/^\t+/gm,a=>" ".repeat(a.length*(o||2)))});var Y6=tt((zq,G6)=>{"use strict";var EB=V6(),DB=(i,o)=>{let a=[],p=i-o,_=i+o;for(let t=p;t<=_;t++)a.push(t);return a};G6.exports=(i,o,a)=>{if(typeof i!="string")throw new TypeError("Source code is missing.");if(!o||o<1)throw new TypeError("Line number must start from `1`.");if(i=EB(i).split(/\r?\n/),!(o>i.length))return a=Ht({around:3},a),DB(o,a.around).filter(p=>i[p-1]!==void 0).map(p=>({line:p,value:i[p-1]}))}});var s4=tt(nc=>{"use strict";var wB=nc&&nc.__createBinding||(Object.create?function(i,o,a,p){p===void 0&&(p=a),Object.defineProperty(i,p,{enumerable:!0,get:function(){return o[a]}})}:function(i,o,a,p){p===void 0&&(p=a),i[p]=o[a]}),SB=nc&&nc.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),TB=nc&&nc.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var a in i)a!=="default"&&Object.hasOwnProperty.call(i,a)&&wB(o,i,a);return SB(o,i),o},CB=nc&&nc.__rest||function(i,o){var a={};for(var p in i)Object.prototype.hasOwnProperty.call(i,p)&&o.indexOf(p)<0&&(a[p]=i[p]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var _=0,p=Object.getOwnPropertySymbols(i);_{var{children:a}=i,p=CB(i,["children"]);let _=Object.assign(Object.assign({},p),{marginLeft:p.marginLeft||p.marginX||p.margin||0,marginRight:p.marginRight||p.marginX||p.margin||0,marginTop:p.marginTop||p.marginY||p.margin||0,marginBottom:p.marginBottom||p.marginY||p.margin||0,paddingLeft:p.paddingLeft||p.paddingX||p.padding||0,paddingRight:p.paddingRight||p.paddingX||p.padding||0,paddingTop:p.paddingTop||p.paddingY||p.padding||0,paddingBottom:p.paddingBottom||p.paddingY||p.padding||0});return K6.default.createElement("ink-box",{ref:o,style:_},a)});x3.displayName="Box";x3.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};nc.default=x3});var O3=tt(hg=>{"use strict";var R3=hg&&hg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(hg,"__esModule",{value:!0});var xB=R3(Mi()),Jv=R3(i4()),X6=R3(a3()),A3=({color:i,backgroundColor:o,dimColor:a,bold:p,italic:_,underline:t,strikethrough:k,inverse:L,wrap:O,children:C})=>{if(C==null)return null;let U=H=>(a&&(H=Jv.default.dim(H)),i&&(H=X6.default(H,i,"foreground")),o&&(H=X6.default(H,o,"background")),p&&(H=Jv.default.bold(H)),_&&(H=Jv.default.italic(H)),t&&(H=Jv.default.underline(H)),k&&(H=Jv.default.strikethrough(H)),L&&(H=Jv.default.inverse(H)),H);return xB.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:O},internal_transform:U},C)};A3.displayName="Text";A3.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};hg.default=A3});var $6=tt(rc=>{"use strict";var RB=rc&&rc.__createBinding||(Object.create?function(i,o,a,p){p===void 0&&(p=a),Object.defineProperty(i,p,{enumerable:!0,get:function(){return o[a]}})}:function(i,o,a,p){p===void 0&&(p=a),i[p]=o[a]}),AB=rc&&rc.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),OB=rc&&rc.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var a in i)a!=="default"&&Object.hasOwnProperty.call(i,a)&&RB(o,i,a);return AB(o,i),o},vg=rc&&rc.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(rc,"__esModule",{value:!0});var Q6=OB(require("fs")),Xo=vg(Mi()),J6=vg(q6()),MB=vg(Y6()),Z1=vg(s4()),zc=vg(O3()),Z6=new J6.default({cwd:process.cwd(),internals:J6.default.nodeInternals()}),kB=({error:i})=>{let o=i.stack?i.stack.split(` -`).slice(1):void 0,a=o?Z6.parseLine(o[0]):void 0,p,_=0;if((a==null?void 0:a.file)&&(a==null?void 0:a.line)&&Q6.existsSync(a.file)){let t=Q6.readFileSync(a.file,"utf8");if(p=MB.default(t,a.line),p)for(let{line:k}of p)_=Math.max(_,String(k).length)}return Xo.default.createElement(Z1.default,{flexDirection:"column",padding:1},Xo.default.createElement(Z1.default,null,Xo.default.createElement(zc.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),Xo.default.createElement(zc.default,null," ",i.message)),a&&Xo.default.createElement(Z1.default,{marginTop:1},Xo.default.createElement(zc.default,{dimColor:!0},a.file,":",a.line,":",a.column)),a&&p&&Xo.default.createElement(Z1.default,{marginTop:1,flexDirection:"column"},p.map(({line:t,value:k})=>Xo.default.createElement(Z1.default,{key:t},Xo.default.createElement(Z1.default,{width:_+1},Xo.default.createElement(zc.default,{dimColor:t!==a.line,backgroundColor:t===a.line?"red":void 0,color:t===a.line?"white":void 0},String(t).padStart(_," "),":")),Xo.default.createElement(zc.default,{key:t,backgroundColor:t===a.line?"red":void 0,color:t===a.line?"white":void 0}," "+k)))),i.stack&&Xo.default.createElement(Z1.default,{marginTop:1,flexDirection:"column"},i.stack.split(` -`).slice(1).map(t=>{let k=Z6.parseLine(t);return k?Xo.default.createElement(Z1.default,{key:t},Xo.default.createElement(zc.default,{dimColor:!0},"- "),Xo.default.createElement(zc.default,{dimColor:!0,bold:!0},k.function),Xo.default.createElement(zc.default,{dimColor:!0,color:"gray"}," ","(",k.file,":",k.line,":",k.column,")")):Xo.default.createElement(Z1.default,{key:t},Xo.default.createElement(zc.default,{dimColor:!0},"- "),Xo.default.createElement(zc.default,{dimColor:!0,bold:!0},t))})))};rc.default=kB});var tx=tt(ic=>{"use strict";var NB=ic&&ic.__createBinding||(Object.create?function(i,o,a,p){p===void 0&&(p=a),Object.defineProperty(i,p,{enumerable:!0,get:function(){return o[a]}})}:function(i,o,a,p){p===void 0&&(p=a),i[p]=o[a]}),LB=ic&&ic.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),FB=ic&&ic.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var a in i)a!=="default"&&Object.hasOwnProperty.call(i,a)&&NB(o,i,a);return LB(o,i),o},ih=ic&&ic.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(ic,"__esModule",{value:!0});var uh=FB(Mi()),ex=ih(nD()),PB=ih(g3()),IB=ih(E3()),bB=ih(w3()),BB=ih(T3()),UB=ih(o4()),jB=ih($6()),zB=" ",HB="",qB="",M3=class extends uh.PureComponent{constructor(){super(...arguments);this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=o=>{let{stdin:a}=this.props;if(!this.isRawModeSupported())throw a===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(a.setEncoding("utf8"),o){this.rawModeEnabledCount===0&&(a.addListener("data",this.handleInput),a.resume(),a.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount==0&&(a.setRawMode(!1),a.removeListener("data",this.handleInput),a.pause())},this.handleInput=o=>{o===""&&this.props.exitOnCtrlC&&this.handleExit(),o===qB&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(o===zB&&this.focusNext(),o===HB&&this.focusPrevious())},this.handleExit=o=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(o)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(o=>{let a=o.focusables[0].id;return{activeFocusId:this.findNextFocusable(o)||a}})},this.focusPrevious=()=>{this.setState(o=>{let a=o.focusables[o.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(o)||a}})},this.addFocusable=(o,{autoFocus:a})=>{this.setState(p=>{let _=p.activeFocusId;return!_&&a&&(_=o),{activeFocusId:_,focusables:[...p.focusables,{id:o,isActive:!0}]}})},this.removeFocusable=o=>{this.setState(a=>({activeFocusId:a.activeFocusId===o?void 0:a.activeFocusId,focusables:a.focusables.filter(p=>p.id!==o)}))},this.activateFocusable=o=>{this.setState(a=>({focusables:a.focusables.map(p=>p.id!==o?p:{id:o,isActive:!0})}))},this.deactivateFocusable=o=>{this.setState(a=>({activeFocusId:a.activeFocusId===o?void 0:a.activeFocusId,focusables:a.focusables.map(p=>p.id!==o?p:{id:o,isActive:!1})}))},this.findNextFocusable=o=>{let a=o.focusables.findIndex(p=>p.id===o.activeFocusId);for(let p=a+1;p{let a=o.focusables.findIndex(p=>p.id===o.activeFocusId);for(let p=a-1;p>=0;p--)if(o.focusables[p].isActive)return o.focusables[p].id}}static getDerivedStateFromError(o){return{error:o}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return uh.default.createElement(PB.default.Provider,{value:{exit:this.handleExit}},uh.default.createElement(IB.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},uh.default.createElement(bB.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},uh.default.createElement(BB.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},uh.default.createElement(UB.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?uh.default.createElement(jB.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){ex.default.hide(this.props.stdout)}componentWillUnmount(){ex.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(o){this.handleExit(o)}};ic.default=M3;M3.displayName="InternalApp"});var ux=tt(uc=>{"use strict";var WB=uc&&uc.__createBinding||(Object.create?function(i,o,a,p){p===void 0&&(p=a),Object.defineProperty(i,p,{enumerable:!0,get:function(){return o[a]}})}:function(i,o,a,p){p===void 0&&(p=a),i[p]=o[a]}),VB=uc&&uc.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),GB=uc&&uc.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var a in i)a!=="default"&&Object.hasOwnProperty.call(i,a)&&WB(o,i,a);return VB(o,i),o},oc=uc&&uc.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(uc,"__esModule",{value:!0});var YB=oc(Mi()),nx=Z8(),KB=oc(dS()),XB=oc(QE()),QB=oc(_S()),JB=oc(DS()),a4=oc(IC()),ZB=oc(A6()),$B=oc(tD()),eU=oc(N6()),tU=GB(bD()),nU=oc(m3()),rU=oc(tx()),Zv=process.env.CI==="false"?!1:QB.default,rx=()=>{},ix=class{constructor(o){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:a,outputHeight:p,staticOutput:_}=ZB.default(this.rootNode,this.options.stdout.columns||80),t=_&&_!==` -`;if(this.options.debug){t&&(this.fullStaticOutput+=_),this.options.stdout.write(this.fullStaticOutput+a);return}if(Zv){t&&this.options.stdout.write(_),this.lastOutput=a;return}if(t&&(this.fullStaticOutput+=_),p>=this.options.stdout.rows){this.options.stdout.write(XB.default.clearTerminal+this.fullStaticOutput+a),this.lastOutput=a;return}t&&(this.log.clear(),this.options.stdout.write(_),this.log(a)),!t&&a!==this.lastOutput&&this.throttledLog(a),this.lastOutput=a},JB.default(this),this.options=o,this.rootNode=tU.createNode("ink-root"),this.rootNode.onRender=o.debug?this.onRender:nx.throttle(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=KB.default.create(o.stdout),this.throttledLog=o.debug?this.log:nx.throttle(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=a4.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=$B.default(this.unmount,{alwaysLast:!1}),process.env.DEV==="true"&&a4.default.injectIntoDevTools({bundleType:0,version:"16.13.1",rendererPackageName:"ink"}),o.patchConsole&&this.patchConsole(),Zv||(o.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{o.stdout.off("resize",this.onRender)})}render(o){let a=YB.default.createElement(rU.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},o);a4.default.updateContainer(a,this.container,null,rx)}writeToStdout(o){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(o+this.fullStaticOutput+this.lastOutput);return}if(Zv){this.options.stdout.write(o);return}this.log.clear(),this.options.stdout.write(o),this.log(this.lastOutput)}}writeToStderr(o){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(o),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(Zv){this.options.stderr.write(o);return}this.log.clear(),this.options.stderr.write(o),this.log(this.lastOutput)}}unmount(o){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),Zv?this.options.stdout.write(this.lastOutput+` -`):this.options.debug||this.log.done(),this.isUnmounted=!0,a4.default.updateContainer(null,this.container,null,rx),nU.default.delete(this.options.stdout),o instanceof Error?this.rejectExitPromise(o):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((o,a)=>{this.resolveExitPromise=o,this.rejectExitPromise=a})),this.exitPromise}clear(){!Zv&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=eU.default((o,a)=>{o==="stdout"&&this.writeToStdout(a),o==="stderr"&&(a.startsWith("The above error occurred")||this.writeToStderr(a))}))}};uc.default=ix});var lx=tt(mg=>{"use strict";var ox=mg&&mg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(mg,"__esModule",{value:!0});var iU=ox(ux()),f4=ox(m3()),uU=require("stream"),sU=(i,o)=>{let a=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},oU(o)),p=lU(a.stdout,()=>new iU.default(a));return p.render(i),{rerender:p.render,unmount:()=>p.unmount(),waitUntilExit:p.waitUntilExit,cleanup:()=>f4.default.delete(a.stdout),clear:p.clear}};mg.default=sU;var oU=(i={})=>i instanceof uU.Stream?{stdout:i,stdin:process.stdin}:i,lU=(i,o)=>{let a;return f4.default.has(i)?a=f4.default.get(i):(a=o(),f4.default.set(i,a)),a}});var ax=tt($1=>{"use strict";var aU=$1&&$1.__createBinding||(Object.create?function(i,o,a,p){p===void 0&&(p=a),Object.defineProperty(i,p,{enumerable:!0,get:function(){return o[a]}})}:function(i,o,a,p){p===void 0&&(p=a),i[p]=o[a]}),fU=$1&&$1.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),cU=$1&&$1.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var a in i)a!=="default"&&Object.hasOwnProperty.call(i,a)&&aU(o,i,a);return fU(o,i),o};Object.defineProperty($1,"__esModule",{value:!0});var yg=cU(Mi()),sx=i=>{let{items:o,children:a,style:p}=i,[_,t]=yg.useState(0),k=yg.useMemo(()=>o.slice(_),[o,_]);yg.useLayoutEffect(()=>{t(o.length)},[o.length]);let L=k.map((C,U)=>a(C,_+U)),O=yg.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},p),[p]);return yg.default.createElement("ink-box",{internal_static:!0,style:O},L)};sx.displayName="Static";$1.default=sx});var cx=tt(gg=>{"use strict";var dU=gg&&gg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(gg,"__esModule",{value:!0});var pU=dU(Mi()),fx=({children:i,transform:o})=>i==null?null:pU.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:o},i);fx.displayName="Transform";gg.default=fx});var px=tt(_g=>{"use strict";var hU=_g&&_g.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(_g,"__esModule",{value:!0});var vU=hU(Mi()),dx=({count:i=1})=>vU.default.createElement("ink-text",null,` -`.repeat(i));dx.displayName="Newline";_g.default=dx});var mx=tt(Eg=>{"use strict";var hx=Eg&&Eg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Eg,"__esModule",{value:!0});var mU=hx(Mi()),yU=hx(s4()),vx=()=>mU.default.createElement(yU.default,{flexGrow:1});vx.displayName="Spacer";Eg.default=vx});var c4=tt(Dg=>{"use strict";var gU=Dg&&Dg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Dg,"__esModule",{value:!0});var _U=Mi(),EU=gU(E3()),DU=()=>_U.useContext(EU.default);Dg.default=DU});var gx=tt(wg=>{"use strict";var wU=wg&&wg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(wg,"__esModule",{value:!0});var yx=Mi(),SU=wU(c4()),TU=(i,o={})=>{let{stdin:a,setRawMode:p,internal_exitOnCtrlC:_}=SU.default();yx.useEffect(()=>{if(o.isActive!==!1)return p(!0),()=>{p(!1)}},[o.isActive,p]),yx.useEffect(()=>{if(o.isActive===!1)return;let t=k=>{let L=String(k),O={upArrow:L==="",downArrow:L==="",leftArrow:L==="",rightArrow:L==="",pageDown:L==="[6~",pageUp:L==="[5~",return:L==="\r",escape:L==="",ctrl:!1,shift:!1,tab:L===" "||L==="",backspace:L==="\b",delete:L==="\x7F"||L==="[3~",meta:!1};L<=""&&!O.return&&(L=String.fromCharCode(L.charCodeAt(0)+"a".charCodeAt(0)-1),O.ctrl=!0),L.startsWith("")&&(L=L.slice(1),O.meta=!0);let C=L>="A"&&L<="Z",U=L>="\u0410"&&L<="\u042F";L.length===1&&(C||U)&&(O.shift=!0),O.tab&&L==="[Z"&&(O.shift=!0),(O.tab||O.backspace||O.delete)&&(L=""),(!(L==="c"&&O.ctrl)||!_)&&i(L,O)};return a==null||a.on("data",t),()=>{a==null||a.off("data",t)}},[o.isActive,a,_,i])};wg.default=TU});var _x=tt(Sg=>{"use strict";var CU=Sg&&Sg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Sg,"__esModule",{value:!0});var xU=Mi(),RU=CU(g3()),AU=()=>xU.useContext(RU.default);Sg.default=AU});var Ex=tt(Tg=>{"use strict";var OU=Tg&&Tg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Tg,"__esModule",{value:!0});var MU=Mi(),kU=OU(w3()),NU=()=>MU.useContext(kU.default);Tg.default=NU});var Dx=tt(Cg=>{"use strict";var LU=Cg&&Cg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Cg,"__esModule",{value:!0});var FU=Mi(),PU=LU(T3()),IU=()=>FU.useContext(PU.default);Cg.default=IU});var Sx=tt(xg=>{"use strict";var wx=xg&&xg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(xg,"__esModule",{value:!0});var Rg=Mi(),bU=wx(o4()),BU=wx(c4()),UU=({isActive:i=!0,autoFocus:o=!1}={})=>{let{isRawModeSupported:a,setRawMode:p}=BU.default(),{activeId:_,add:t,remove:k,activate:L,deactivate:O}=Rg.useContext(bU.default),C=Rg.useMemo(()=>Math.random().toString().slice(2,7),[]);return Rg.useEffect(()=>(t(C,{autoFocus:o}),()=>{k(C)}),[C,o]),Rg.useEffect(()=>{i?L(C):O(C)},[i,C]),Rg.useEffect(()=>{if(!(!a||!i))return p(!0),()=>{p(!1)}},[i]),{isFocused:Boolean(C)&&_===C}};xg.default=UU});var Tx=tt(Ag=>{"use strict";var jU=Ag&&Ag.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Ag,"__esModule",{value:!0});var zU=Mi(),HU=jU(o4()),qU=()=>{let i=zU.useContext(HU.default);return{enableFocus:i.enableFocus,disableFocus:i.disableFocus,focusNext:i.focusNext,focusPrevious:i.focusPrevious}};Ag.default=qU});var Cx=tt(k3=>{"use strict";Object.defineProperty(k3,"__esModule",{value:!0});k3.default=i=>{var o,a,p,_;return{width:(a=(o=i.yogaNode)===null||o===void 0?void 0:o.getComputedWidth())!==null&&a!==void 0?a:0,height:(_=(p=i.yogaNode)===null||p===void 0?void 0:p.getComputedHeight())!==null&&_!==void 0?_:0}}});var lc=tt(Yl=>{"use strict";Object.defineProperty(Yl,"__esModule",{value:!0});var WU=lx();Object.defineProperty(Yl,"render",{enumerable:!0,get:function(){return WU.default}});var VU=s4();Object.defineProperty(Yl,"Box",{enumerable:!0,get:function(){return VU.default}});var GU=O3();Object.defineProperty(Yl,"Text",{enumerable:!0,get:function(){return GU.default}});var YU=ax();Object.defineProperty(Yl,"Static",{enumerable:!0,get:function(){return YU.default}});var KU=cx();Object.defineProperty(Yl,"Transform",{enumerable:!0,get:function(){return KU.default}});var XU=px();Object.defineProperty(Yl,"Newline",{enumerable:!0,get:function(){return XU.default}});var QU=mx();Object.defineProperty(Yl,"Spacer",{enumerable:!0,get:function(){return QU.default}});var JU=gx();Object.defineProperty(Yl,"useInput",{enumerable:!0,get:function(){return JU.default}});var ZU=_x();Object.defineProperty(Yl,"useApp",{enumerable:!0,get:function(){return ZU.default}});var $U=c4();Object.defineProperty(Yl,"useStdin",{enumerable:!0,get:function(){return $U.default}});var ej=Ex();Object.defineProperty(Yl,"useStdout",{enumerable:!0,get:function(){return ej.default}});var tj=Dx();Object.defineProperty(Yl,"useStderr",{enumerable:!0,get:function(){return tj.default}});var nj=Sx();Object.defineProperty(Yl,"useFocus",{enumerable:!0,get:function(){return nj.default}});var rj=Tx();Object.defineProperty(Yl,"useFocusManager",{enumerable:!0,get:function(){return rj.default}});var ij=Cx();Object.defineProperty(Yl,"measureElement",{enumerable:!0,get:function(){return ij.default}})});var Px=tt(Og=>{"use strict";Object.defineProperty(Og,"__esModule",{value:!0});Og.UncontrolledTextInput=void 0;var Nx=Mi(),F3=Mi(),Lx=lc(),sh=i4(),Fx=({value:i,placeholder:o="",focus:a=!0,mask:p,highlightPastedText:_=!1,showCursor:t=!0,onChange:k,onSubmit:L})=>{let[{cursorOffset:O,cursorWidth:C},U]=F3.useState({cursorOffset:(i||"").length,cursorWidth:0});F3.useEffect(()=>{U(he=>{if(!a||!t)return he;let Ee=i||"";return he.cursorOffset>Ee.length-1?{cursorOffset:Ee.length,cursorWidth:0}:he})},[i,a,t]);let H=_?C:0,W=p?p.repeat(i.length):i,ne=W,m=o?sh.grey(o):void 0;if(t&&a){m=o.length>0?sh.inverse(o[0])+sh.grey(o.slice(1)):sh.inverse(" "),ne=W.length>0?"":sh.inverse(" ");let he=0;for(let Ee of W)he>=O-H&&he<=O?ne+=sh.inverse(Ee):ne+=Ee,he++;W.length>0&&O===W.length&&(ne+=sh.inverse(" "))}return Lx.useInput((he,Ee)=>{if(Ee.upArrow||Ee.downArrow||Ee.ctrl&&he==="c"||Ee.tab||Ee.shift&&Ee.tab)return;if(Ee.return){L&&L(i);return}let ve=O,se=i,De=0;Ee.leftArrow?t&&ve--:Ee.rightArrow?t&&ve++:Ee.backspace||Ee.delete?O>0&&(se=i.slice(0,O-1)+i.slice(O,i.length),ve--):(se=i.slice(0,O)+he+i.slice(O,i.length),ve+=he.length,he.length>1&&(De=he.length)),O<0&&(ve=0),O>i.length&&(ve=i.length),U({cursorOffset:ve,cursorWidth:De}),se!==i&&k(se)},{isActive:a}),Nx.createElement(Lx.Text,null,o?W.length>0?ne:m:ne)};Og.default=Fx;Og.UncontrolledTextInput=i=>{let[o,a]=F3.useState("");return Nx.createElement(Fx,Object.assign({},i,{value:o,onChange:a}))}});var bx=tt(E4=>{"use strict";Object.defineProperty(E4,"__esModule",{value:!0});function Mg(i){let o=[...i.caches],a=o.shift();return a===void 0?Ix():{get(p,_,t={miss:()=>Promise.resolve()}){return a.get(p,_,t).catch(()=>Mg({caches:o}).get(p,_,t))},set(p,_){return a.set(p,_).catch(()=>Mg({caches:o}).set(p,_))},delete(p){return a.delete(p).catch(()=>Mg({caches:o}).delete(p))},clear(){return a.clear().catch(()=>Mg({caches:o}).clear())}}}function Ix(){return{get(i,o,a={miss:()=>Promise.resolve()}){return o().then(_=>Promise.all([_,a.miss(_)])).then(([_])=>_)},set(i,o){return Promise.resolve(o)},delete(i){return Promise.resolve()},clear(){return Promise.resolve()}}}E4.createFallbackableCache=Mg;E4.createNullCache=Ix});var Ux=tt((CW,Bx)=>{Bx.exports=bx()});var jx=tt(P3=>{"use strict";Object.defineProperty(P3,"__esModule",{value:!0});function uj(i={serializable:!0}){let o={};return{get(a,p,_={miss:()=>Promise.resolve()}){let t=JSON.stringify(a);if(t in o)return Promise.resolve(i.serializable?JSON.parse(o[t]):o[t]);let k=p(),L=_&&_.miss||(()=>Promise.resolve());return k.then(O=>L(O)).then(()=>k)},set(a,p){return o[JSON.stringify(a)]=i.serializable?JSON.stringify(p):p,Promise.resolve(p)},delete(a){return delete o[JSON.stringify(a)],Promise.resolve()},clear(){return o={},Promise.resolve()}}}P3.createInMemoryCache=uj});var Hx=tt((RW,zx)=>{zx.exports=jx()});var Wx=tt(sc=>{"use strict";Object.defineProperty(sc,"__esModule",{value:!0});function oj(i,o,a){let p={"x-algolia-api-key":a,"x-algolia-application-id":o};return{headers(){return i===I3.WithinHeaders?p:{}},queryParameters(){return i===I3.WithinQueryParameters?p:{}}}}function lj(i){let o=0,a=()=>(o++,new Promise(p=>{setTimeout(()=>{p(i(a))},Math.min(100*o,1e3))}));return i(a)}function qx(i,o=(a,p)=>Promise.resolve()){return Object.assign(i,{wait(a){return qx(i.then(p=>Promise.all([o(p,a),p])).then(p=>p[1]))}})}function sj(i){let o=i.length-1;for(o;o>0;o--){let a=Math.floor(Math.random()*(o+1)),p=i[o];i[o]=i[a],i[a]=p}return i}function aj(i,o){return Object.keys(o!==void 0?o:{}).forEach(a=>{i[a]=o[a](i)}),i}function fj(i,...o){let a=0;return i.replace(/%s/g,()=>encodeURIComponent(o[a++]))}var cj="4.2.0",dj=i=>()=>i.transporter.requester.destroy(),I3={WithinQueryParameters:0,WithinHeaders:1};sc.AuthMode=I3;sc.addMethods=aj;sc.createAuth=oj;sc.createRetryablePromise=lj;sc.createWaitablePromise=qx;sc.destroy=dj;sc.encode=fj;sc.shuffle=sj;sc.version=cj});var kg=tt((OW,Vx)=>{Vx.exports=Wx()});var Gx=tt(b3=>{"use strict";Object.defineProperty(b3,"__esModule",{value:!0});var pj={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};b3.MethodEnum=pj});var Ng=tt((kW,Yx)=>{Yx.exports=Gx()});var s5=tt(V0=>{"use strict";Object.defineProperty(V0,"__esModule",{value:!0});var Kx=Ng();function B3(i,o){let a=i||{},p=a.data||{};return Object.keys(a).forEach(_=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(_)===-1&&(p[_]=a[_])}),{data:Object.entries(p).length>0?p:void 0,timeout:a.timeout||o,headers:a.headers||{},queryParameters:a.queryParameters||{},cacheable:a.cacheable}}var D4={Read:1,Write:2,Any:3},$v={Up:1,Down:2,Timeouted:3},Xx=2*60*1e3;function U3(i,o=$v.Up){return Zr(Ht({},i),{status:o,lastUpdate:Date.now()})}function Qx(i){return i.status===$v.Up||Date.now()-i.lastUpdate>Xx}function Jx(i){return i.status===$v.Timeouted&&Date.now()-i.lastUpdate<=Xx}function j3(i){return{protocol:i.protocol||"https",url:i.url,accept:i.accept||D4.Any}}function hj(i,o){return Promise.all(o.map(a=>i.get(a,()=>Promise.resolve(U3(a))))).then(a=>{let p=a.filter(L=>Qx(L)),_=a.filter(L=>Jx(L)),t=[...p,..._],k=t.length>0?t.map(L=>j3(L)):o;return{getTimeout(L,O){return(_.length===0&&L===0?1:_.length+3+L)*O},statelessHosts:k}})}var vj=({isTimedOut:i,status:o})=>!i&&~~o==0,mj=i=>{let o=i.status;return i.isTimedOut||vj(i)||~~(o/100)!=2&&~~(o/100)!=4},yj=({status:i})=>~~(i/100)==2,gj=(i,o)=>mj(i)?o.onRetry(i):yj(i)?o.onSucess(i):o.onFail(i);function i5(i,o,a,p){let _=[],t=t5(a,p),k=n5(i,p),L=a.method,O=a.method!==Kx.MethodEnum.Get?{}:Ht(Ht({},a.data),p.data),C=Ht(Ht(Ht({"x-algolia-agent":i.userAgent.value},i.queryParameters),O),p.queryParameters),U=0,H=(W,ne)=>{let m=W.pop();if(m===void 0)throw r5(z3(_));let he={data:t,headers:k,method:L,url:e5(m,a.path,C),connectTimeout:ne(U,i.timeouts.connect),responseTimeout:ne(U,p.timeout)},Ee=se=>{let De={request:he,response:se,host:m,triesLeft:W.length};return _.push(De),De},ve={onSucess:se=>Zx(se),onRetry(se){let De=Ee(se);return se.isTimedOut&&U++,Promise.all([i.logger.info("Retryable failure",H3(De)),i.hostsCache.set(m,U3(m,se.isTimedOut?$v.Timeouted:$v.Down))]).then(()=>H(W,ne))},onFail(se){throw Ee(se),$x(se,z3(_))}};return i.requester.send(he).then(se=>gj(se,ve))};return hj(i.hostsCache,o).then(W=>H([...W.statelessHosts].reverse(),W.getTimeout))}function _j(i){let{hostsCache:o,logger:a,requester:p,requestsCache:_,responsesCache:t,timeouts:k,userAgent:L,hosts:O,queryParameters:C,headers:U}=i,H={hostsCache:o,logger:a,requester:p,requestsCache:_,responsesCache:t,timeouts:k,userAgent:L,headers:U,queryParameters:C,hosts:O.map(W=>j3(W)),read(W,ne){let m=B3(ne,H.timeouts.read),he=()=>i5(H,H.hosts.filter(se=>(se.accept&D4.Read)!=0),W,m);if((m.cacheable!==void 0?m.cacheable:W.cacheable)!==!0)return he();let ve={request:W,mappedRequestOptions:m,transporter:{queryParameters:H.queryParameters,headers:H.headers}};return H.responsesCache.get(ve,()=>H.requestsCache.get(ve,()=>H.requestsCache.set(ve,he()).then(se=>Promise.all([H.requestsCache.delete(ve),se]),se=>Promise.all([H.requestsCache.delete(ve),Promise.reject(se)])).then(([se,De])=>De)),{miss:se=>H.responsesCache.set(ve,se)})},write(W,ne){return i5(H,H.hosts.filter(m=>(m.accept&D4.Write)!=0),W,B3(ne,H.timeouts.write))}};return H}function Ej(i){let o={value:`Algolia for JavaScript (${i})`,add(a){let p=`; ${a.segment}${a.version!==void 0?` (${a.version})`:""}`;return o.value.indexOf(p)===-1&&(o.value=`${o.value}${p}`),o}};return o}function Zx(i){try{return JSON.parse(i.content)}catch(o){throw u5(o.message,i)}}function $x({content:i,status:o},a){let p=i;try{p=JSON.parse(i).message}catch(_){}return o5(p,o,a)}function Dj(i,...o){let a=0;return i.replace(/%s/g,()=>encodeURIComponent(o[a++]))}function e5(i,o,a){let p=l5(a),_=`${i.protocol}://${i.url}/${o.charAt(0)==="/"?o.substr(1):o}`;return p.length&&(_+=`?${p}`),_}function l5(i){let o=a=>Object.prototype.toString.call(a)==="[object Object]"||Object.prototype.toString.call(a)==="[object Array]";return Object.keys(i).map(a=>Dj("%s=%s",a,o(i[a])?JSON.stringify(i[a]):i[a])).join("&")}function t5(i,o){if(i.method===Kx.MethodEnum.Get||i.data===void 0&&o.data===void 0)return;let a=Array.isArray(i.data)?i.data:Ht(Ht({},i.data),o.data);return JSON.stringify(a)}function n5(i,o){let a=Ht(Ht({},i.headers),o.headers),p={};return Object.keys(a).forEach(_=>{let t=a[_];p[_.toLowerCase()]=t}),p}function z3(i){return i.map(o=>H3(o))}function H3(i){let o=i.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return Zr(Ht({},i),{request:Zr(Ht({},i.request),{headers:Ht(Ht({},i.request.headers),o)})})}function o5(i,o,a){return{name:"ApiError",message:i,status:o,transporterStackTrace:a}}function u5(i,o){return{name:"DeserializationError",message:i,response:o}}function r5(i){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:i}}V0.CallEnum=D4;V0.HostStatusEnum=$v;V0.createApiError=o5;V0.createDeserializationError=u5;V0.createMappedRequestOptions=B3;V0.createRetryError=r5;V0.createStatefulHost=U3;V0.createStatelessHost=j3;V0.createTransporter=_j;V0.createUserAgent=Ej;V0.deserializeFailure=$x;V0.deserializeSuccess=Zx;V0.isStatefulHostTimeouted=Jx;V0.isStatefulHostUp=Qx;V0.serializeData=t5;V0.serializeHeaders=n5;V0.serializeQueryParameters=l5;V0.serializeUrl=e5;V0.stackFrameWithoutCredentials=H3;V0.stackTraceWithoutCredentials=z3});var Lg=tt((LW,a5)=>{a5.exports=s5()});var f5=tt(g2=>{"use strict";Object.defineProperty(g2,"__esModule",{value:!0});var em=kg(),wj=Lg(),Fg=Ng(),Sj=i=>{let o=i.region||"us",a=em.createAuth(em.AuthMode.WithinHeaders,i.appId,i.apiKey),p=wj.createTransporter(Zr(Ht({hosts:[{url:`analytics.${o}.algolia.com`}]},i),{headers:Ht(Zr(Ht({},a.headers()),{"content-type":"application/json"}),i.headers),queryParameters:Ht(Ht({},a.queryParameters()),i.queryParameters)})),_=i.appId;return em.addMethods({appId:_,transporter:p},i.methods)},Tj=i=>(o,a)=>i.transporter.write({method:Fg.MethodEnum.Post,path:"2/abtests",data:o},a),Cj=i=>(o,a)=>i.transporter.write({method:Fg.MethodEnum.Delete,path:em.encode("2/abtests/%s",o)},a),xj=i=>(o,a)=>i.transporter.read({method:Fg.MethodEnum.Get,path:em.encode("2/abtests/%s",o)},a),Rj=i=>o=>i.transporter.read({method:Fg.MethodEnum.Get,path:"2/abtests"},o),Aj=i=>(o,a)=>i.transporter.write({method:Fg.MethodEnum.Post,path:em.encode("2/abtests/%s/stop",o)},a);g2.addABTest=Tj;g2.createAnalyticsClient=Sj;g2.deleteABTest=Cj;g2.getABTest=xj;g2.getABTests=Rj;g2.stopABTest=Aj});var d5=tt((PW,c5)=>{c5.exports=f5()});var h5=tt(Pg=>{"use strict";Object.defineProperty(Pg,"__esModule",{value:!0});var q3=kg(),Oj=Lg(),p5=Ng(),Mj=i=>{let o=i.region||"us",a=q3.createAuth(q3.AuthMode.WithinHeaders,i.appId,i.apiKey),p=Oj.createTransporter(Zr(Ht({hosts:[{url:`recommendation.${o}.algolia.com`}]},i),{headers:Ht(Zr(Ht({},a.headers()),{"content-type":"application/json"}),i.headers),queryParameters:Ht(Ht({},a.queryParameters()),i.queryParameters)}));return q3.addMethods({appId:i.appId,transporter:p},i.methods)},kj=i=>o=>i.transporter.read({method:p5.MethodEnum.Get,path:"1/strategies/personalization"},o),Nj=i=>(o,a)=>i.transporter.write({method:p5.MethodEnum.Post,path:"1/strategies/personalization",data:o},a);Pg.createRecommendationClient=Mj;Pg.getPersonalizationStrategy=kj;Pg.setPersonalizationStrategy=Nj});var m5=tt((bW,v5)=>{v5.exports=h5()});var O5=tt(tn=>{"use strict";Object.defineProperty(tn,"__esModule",{value:!0});var Ln=kg(),ra=Lg(),Ur=Ng(),Lj=require("crypto");function w4(i){let o=a=>i.request(a).then(p=>{if(i.batch!==void 0&&i.batch(p.hits),!i.shouldStop(p))return p.cursor?o({cursor:p.cursor}):o({page:(a.page||0)+1})});return o({})}var Fj=i=>{let o=i.appId,a=Ln.createAuth(i.authMode!==void 0?i.authMode:Ln.AuthMode.WithinHeaders,o,i.apiKey),p=ra.createTransporter(Zr(Ht({hosts:[{url:`${o}-dsn.algolia.net`,accept:ra.CallEnum.Read},{url:`${o}.algolia.net`,accept:ra.CallEnum.Write}].concat(Ln.shuffle([{url:`${o}-1.algolianet.com`},{url:`${o}-2.algolianet.com`},{url:`${o}-3.algolianet.com`}]))},i),{headers:Ht(Zr(Ht({},a.headers()),{"content-type":"application/x-www-form-urlencoded"}),i.headers),queryParameters:Ht(Ht({},a.queryParameters()),i.queryParameters)})),_={transporter:p,appId:o,addAlgoliaAgent(t,k){p.userAgent.add({segment:t,version:k})},clearCache(){return Promise.all([p.requestsCache.clear(),p.responsesCache.clear()]).then(()=>{})}};return Ln.addMethods(_,i.methods)};function y5(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function g5(){return{name:"ObjectNotFoundError",message:"Object not found."}}function _5(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Pj=i=>(o,a)=>{let L=a||{},{queryParameters:p}=L,_=Dl(L,["queryParameters"]),t=Ht({acl:o},p!==void 0?{queryParameters:p}:{}),k=(O,C)=>Ln.createRetryablePromise(U=>Ig(i)(O.key,C).catch(H=>{if(H.status!==404)throw H;return U()}));return Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:"1/keys",data:t},_),k)},Ij=i=>(o,a,p)=>{let _=ra.createMappedRequestOptions(p);return _.queryParameters["X-Algolia-User-ID"]=o,i.transporter.write({method:Ur.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:a}},_)},bj=i=>(o,a,p)=>i.transporter.write({method:Ur.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:o,cluster:a}},p),S4=i=>(o,a,p)=>{let _=(t,k)=>bg(i)(o,{methods:{waitTask:Co}}).waitTask(t.taskID,k);return Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/operation",o),data:{operation:"copy",destination:a}},p),_)},Bj=i=>(o,a,p)=>S4(i)(o,a,Zr(Ht({},p),{scope:[T4.Rules]})),Uj=i=>(o,a,p)=>S4(i)(o,a,Zr(Ht({},p),{scope:[T4.Settings]})),jj=i=>(o,a,p)=>S4(i)(o,a,Zr(Ht({},p),{scope:[T4.Synonyms]})),zj=i=>(o,a)=>{let p=(_,t)=>Ln.createRetryablePromise(k=>Ig(i)(o,t).then(k).catch(L=>{if(L.status!==404)throw L}));return Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Delete,path:Ln.encode("1/keys/%s",o)},a),p)},Hj=()=>(i,o)=>{let a=ra.serializeQueryParameters(o),p=Lj.createHmac("sha256",i).update(a).digest("hex");return Buffer.from(p+a).toString("base64")},Ig=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Get,path:Ln.encode("1/keys/%s",o)},a),qj=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:"1/logs"},o),Wj=()=>i=>{let o=Buffer.from(i,"base64").toString("ascii"),a=/validUntil=(\d+)/,p=o.match(a);if(p===null)throw _5();return parseInt(p[1],10)-Math.round(new Date().getTime()/1e3)},Vj=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:"1/clusters/mapping/top"},o),Gj=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Get,path:Ln.encode("1/clusters/mapping/%s",o)},a),Yj=i=>o=>{let _=o||{},{retrieveMappings:a}=_,p=Dl(_,["retrieveMappings"]);return a===!0&&(p.getClusters=!0),i.transporter.read({method:Ur.MethodEnum.Get,path:"1/clusters/mapping/pending"},p)},bg=i=>(o,a={})=>{let p={transporter:i.transporter,appId:i.appId,indexName:o};return Ln.addMethods(p,a.methods)},Kj=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:"1/keys"},o),Xj=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:"1/clusters"},o),Qj=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:"1/indexes"},o),Jj=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:"1/clusters/mapping"},o),Zj=i=>(o,a,p)=>{let _=(t,k)=>bg(i)(o,{methods:{waitTask:Co}}).waitTask(t.taskID,k);return Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/operation",o),data:{operation:"move",destination:a}},p),_)},$j=i=>(o,a)=>{let p=(_,t)=>Promise.all(Object.keys(_.taskID).map(k=>bg(i)(k,{methods:{waitTask:Co}}).waitTask(_.taskID[k],t)));return Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:o}},a),p)},ez=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:o}},a),tz=i=>(o,a)=>{let p=o.map(_=>Zr(Ht({},_),{params:ra.serializeQueryParameters(_.params||{})}));return i.transporter.read({method:Ur.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:p},cacheable:!0},a)},nz=i=>(o,a)=>Promise.all(o.map(p=>{let L=p.params,{facetName:_,facetQuery:t}=L,k=Dl(L,["facetName","facetQuery"]);return bg(i)(p.indexName,{methods:{searchForFacetValues:E5}}).searchForFacetValues(_,t,Ht(Ht({},a),k))})),rz=i=>(o,a)=>{let p=ra.createMappedRequestOptions(a);return p.queryParameters["X-Algolia-User-ID"]=o,i.transporter.write({method:Ur.MethodEnum.Delete,path:"1/clusters/mapping"},p)},iz=i=>(o,a)=>{let p=(_,t)=>Ln.createRetryablePromise(k=>Ig(i)(o,t).catch(L=>{if(L.status!==404)throw L;return k()}));return Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Ln.encode("1/keys/%s/restore",o)},a),p)},uz=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:o}},a),oz=i=>(o,a)=>{let p=Object.assign({},a),U=a||{},{queryParameters:_}=U,t=Dl(U,["queryParameters"]),k=_?{queryParameters:_}:{},L=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],O=H=>Object.keys(p).filter(W=>L.indexOf(W)!==-1).every(W=>H[W]===p[W]),C=(H,W)=>Ln.createRetryablePromise(ne=>Ig(i)(o,W).then(m=>O(m)?Promise.resolve():ne()));return Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Put,path:Ln.encode("1/keys/%s",o),data:k},t),C)},D5=i=>(o,a)=>{let p=(_,t)=>Co(i)(_.taskID,t);return Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/batch",i.indexName),data:{requests:o}},a),p)},lz=i=>o=>w4(Zr(Ht({},o),{shouldStop:a=>a.cursor===void 0,request:a=>i.transporter.read({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/browse",i.indexName),data:a},o)})),sz=i=>o=>{let a=Ht({hitsPerPage:1e3},o);return w4(Zr(Ht({},a),{shouldStop:p=>p.hits.lengthZr(Ht({},_),{hits:_.hits.map(t=>(delete t._highlightResult,t))}))}}))},az=i=>o=>{let a=Ht({hitsPerPage:1e3},o);return w4(Zr(Ht({},a),{shouldStop:p=>p.hits.lengthZr(Ht({},_),{hits:_.hits.map(t=>(delete t._highlightResult,t))}))}}))},C4=i=>(o,a,p)=>{let O=p||{},{batchSize:_}=O,t=Dl(O,["batchSize"]),k={taskIDs:[],objectIDs:[]},L=(C=0)=>{let U=[],H;for(H=C;H({action:a,body:W})),t).then(W=>(k.objectIDs=k.objectIDs.concat(W.objectIDs),k.taskIDs.push(W.taskID),H++,L(H)))};return Ln.createWaitablePromise(L(),(C,U)=>Promise.all(C.taskIDs.map(H=>Co(i)(H,U))))},fz=i=>o=>Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/clear",i.indexName)},o),(a,p)=>Co(i)(a.taskID,p)),cz=i=>o=>{let t=o||{},{forwardToReplicas:a}=t,p=Dl(t,["forwardToReplicas"]),_=ra.createMappedRequestOptions(p);return a&&(_.queryParameters.forwardToReplicas=1),Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/rules/clear",i.indexName)},_),(k,L)=>Co(i)(k.taskID,L))},dz=i=>o=>{let t=o||{},{forwardToReplicas:a}=t,p=Dl(t,["forwardToReplicas"]),_=ra.createMappedRequestOptions(p);return a&&(_.queryParameters.forwardToReplicas=1),Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/synonyms/clear",i.indexName)},_),(k,L)=>Co(i)(k.taskID,L))},pz=i=>(o,a)=>Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/deleteByQuery",i.indexName),data:o},a),(p,_)=>Co(i)(p.taskID,_)),hz=i=>o=>Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Delete,path:Ln.encode("1/indexes/%s",i.indexName)},o),(a,p)=>Co(i)(a.taskID,p)),vz=i=>(o,a)=>Ln.createWaitablePromise(T5(i)([o],a).then(p=>({taskID:p.taskIDs[0]})),(p,_)=>Co(i)(p.taskID,_)),T5=i=>(o,a)=>{let p=o.map(_=>({objectID:_}));return C4(i)(p,ah.DeleteObject,a)},mz=i=>(o,a)=>{let k=a||{},{forwardToReplicas:p}=k,_=Dl(k,["forwardToReplicas"]),t=ra.createMappedRequestOptions(_);return p&&(t.queryParameters.forwardToReplicas=1),Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Delete,path:Ln.encode("1/indexes/%s/rules/%s",i.indexName,o)},t),(L,O)=>Co(i)(L.taskID,O))},yz=i=>(o,a)=>{let k=a||{},{forwardToReplicas:p}=k,_=Dl(k,["forwardToReplicas"]),t=ra.createMappedRequestOptions(_);return p&&(t.queryParameters.forwardToReplicas=1),Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Delete,path:Ln.encode("1/indexes/%s/synonyms/%s",i.indexName,o)},t),(L,O)=>Co(i)(L.taskID,O))},gz=i=>o=>C5(i)(o).then(()=>!0).catch(a=>{if(a.status!==404)throw a;return!1}),_z=i=>(o,a)=>{let O=a||{},{query:p,paginate:_}=O,t=Dl(O,["query","paginate"]),k=0,L=()=>x5(i)(p||"",Zr(Ht({},t),{page:k})).then(C=>{for(let[U,H]of Object.entries(C.hits))if(o(H))return{object:H,position:parseInt(U,10),page:k};if(k++,_===!1||k>=C.nbPages)throw g5();return L()});return L()},Ez=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Get,path:Ln.encode("1/indexes/%s/%s",i.indexName,o)},a),Dz=()=>(i,o)=>{for(let[a,p]of Object.entries(i.hits))if(p.objectID===o)return parseInt(a,10);return-1},wz=i=>(o,a)=>{let k=a||{},{attributesToRetrieve:p}=k,_=Dl(k,["attributesToRetrieve"]),t=o.map(L=>Ht({indexName:i.indexName,objectID:L},p?{attributesToRetrieve:p}:{}));return i.transporter.read({method:Ur.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:t}},_)},Sz=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Get,path:Ln.encode("1/indexes/%s/rules/%s",i.indexName,o)},a),C5=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:Ln.encode("1/indexes/%s/settings",i.indexName),data:{getVersion:2}},o),Tz=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Get,path:Ln.encode("1/indexes/%s/synonyms/%s",i.indexName,o)},a),R5=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Get,path:Ln.encode("1/indexes/%s/task/%s",i.indexName,o.toString())},a),Cz=i=>(o,a)=>Ln.createWaitablePromise(A5(i)([o],a).then(p=>({objectID:p.objectIDs[0],taskID:p.taskIDs[0]})),(p,_)=>Co(i)(p.taskID,_)),A5=i=>(o,a)=>{let k=a||{},{createIfNotExists:p}=k,_=Dl(k,["createIfNotExists"]),t=p?ah.PartialUpdateObject:ah.PartialUpdateObjectNoCreate;return C4(i)(o,t,_)},xz=i=>(o,a)=>{let m=a||{},{safe:p,autoGenerateObjectIDIfNotExist:_,batchSize:t}=m,k=Dl(m,["safe","autoGenerateObjectIDIfNotExist","batchSize"]),L=(he,Ee,ve,se)=>Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/operation",he),data:{operation:ve,destination:Ee}},se),(De,pe)=>Co(i)(De.taskID,pe)),O=Math.random().toString(36).substring(7),C=`${i.indexName}_tmp_${O}`,U=W3({appId:i.appId,transporter:i.transporter,indexName:C}),H=[],W=L(i.indexName,C,"copy",Zr(Ht({},k),{scope:["settings","synonyms","rules"]}));H.push(W);let ne=(p?W.wait(k):W).then(()=>{let he=U(o,Zr(Ht({},k),{autoGenerateObjectIDIfNotExist:_,batchSize:t}));return H.push(he),p?he.wait(k):he}).then(()=>{let he=L(C,i.indexName,"move",k);return H.push(he),p?he.wait(k):he}).then(()=>Promise.all(H)).then(([he,Ee,ve])=>({objectIDs:Ee.objectIDs,taskIDs:[he.taskID,...Ee.taskIDs,ve.taskID]}));return Ln.createWaitablePromise(ne,(he,Ee)=>Promise.all(H.map(ve=>ve.wait(Ee))))},Rz=i=>(o,a)=>V3(i)(o,Zr(Ht({},a),{clearExistingRules:!0})),Az=i=>(o,a)=>G3(i)(o,Zr(Ht({},a),{replaceExistingSynonyms:!0})),Oz=i=>(o,a)=>Ln.createWaitablePromise(W3(i)([o],a).then(p=>({objectID:p.objectIDs[0],taskID:p.taskIDs[0]})),(p,_)=>Co(i)(p.taskID,_)),W3=i=>(o,a)=>{let k=a||{},{autoGenerateObjectIDIfNotExist:p}=k,_=Dl(k,["autoGenerateObjectIDIfNotExist"]),t=p?ah.AddObject:ah.UpdateObject;if(t===ah.UpdateObject){for(let L of o)if(L.objectID===void 0)return Ln.createWaitablePromise(Promise.reject(y5()))}return C4(i)(o,t,_)},Mz=i=>(o,a)=>V3(i)([o],a),V3=i=>(o,a)=>{let L=a||{},{forwardToReplicas:p,clearExistingRules:_}=L,t=Dl(L,["forwardToReplicas","clearExistingRules"]),k=ra.createMappedRequestOptions(t);return p&&(k.queryParameters.forwardToReplicas=1),_&&(k.queryParameters.clearExistingRules=1),Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/rules/batch",i.indexName),data:o},k),(O,C)=>Co(i)(O.taskID,C))},kz=i=>(o,a)=>G3(i)([o],a),G3=i=>(o,a)=>{let L=a||{},{forwardToReplicas:p,replaceExistingSynonyms:_}=L,t=Dl(L,["forwardToReplicas","replaceExistingSynonyms"]),k=ra.createMappedRequestOptions(t);return p&&(k.queryParameters.forwardToReplicas=1),_&&(k.queryParameters.replaceExistingSynonyms=1),Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/synonyms/batch",i.indexName),data:o},k),(O,C)=>Co(i)(O.taskID,C))},x5=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/query",i.indexName),data:{query:o},cacheable:!0},a),E5=i=>(o,a,p)=>i.transporter.read({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/facets/%s/query",i.indexName,o),data:{facetQuery:a},cacheable:!0},p),w5=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/rules/search",i.indexName),data:{query:o}},a),S5=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Post,path:Ln.encode("1/indexes/%s/synonyms/search",i.indexName),data:{query:o}},a),Nz=i=>(o,a)=>{let k=a||{},{forwardToReplicas:p}=k,_=Dl(k,["forwardToReplicas"]),t=ra.createMappedRequestOptions(_);return p&&(t.queryParameters.forwardToReplicas=1),Ln.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Put,path:Ln.encode("1/indexes/%s/settings",i.indexName),data:o},t),(L,O)=>Co(i)(L.taskID,O))},Co=i=>(o,a)=>Ln.createRetryablePromise(p=>R5(i)(o,a).then(_=>_.status!=="published"?p():void 0)),Lz={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},ah={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject"},T4={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},Fz={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},Pz={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};tn.ApiKeyACLEnum=Lz;tn.BatchActionEnum=ah;tn.ScopeEnum=T4;tn.StrategyEnum=Fz;tn.SynonymEnum=Pz;tn.addApiKey=Pj;tn.assignUserID=Ij;tn.assignUserIDs=bj;tn.batch=D5;tn.browseObjects=lz;tn.browseRules=sz;tn.browseSynonyms=az;tn.chunkedBatch=C4;tn.clearObjects=fz;tn.clearRules=cz;tn.clearSynonyms=dz;tn.copyIndex=S4;tn.copyRules=Bj;tn.copySettings=Uj;tn.copySynonyms=jj;tn.createBrowsablePromise=w4;tn.createMissingObjectIDError=y5;tn.createObjectNotFoundError=g5;tn.createSearchClient=Fj;tn.createValidUntilNotFoundError=_5;tn.deleteApiKey=zj;tn.deleteBy=pz;tn.deleteIndex=hz;tn.deleteObject=vz;tn.deleteObjects=T5;tn.deleteRule=mz;tn.deleteSynonym=yz;tn.exists=gz;tn.findObject=_z;tn.generateSecuredApiKey=Hj;tn.getApiKey=Ig;tn.getLogs=qj;tn.getObject=Ez;tn.getObjectPosition=Dz;tn.getObjects=wz;tn.getRule=Sz;tn.getSecuredApiKeyRemainingValidity=Wj;tn.getSettings=C5;tn.getSynonym=Tz;tn.getTask=R5;tn.getTopUserIDs=Vj;tn.getUserID=Gj;tn.hasPendingMappings=Yj;tn.initIndex=bg;tn.listApiKeys=Kj;tn.listClusters=Xj;tn.listIndices=Qj;tn.listUserIDs=Jj;tn.moveIndex=Zj;tn.multipleBatch=$j;tn.multipleGetObjects=ez;tn.multipleQueries=tz;tn.multipleSearchForFacetValues=nz;tn.partialUpdateObject=Cz;tn.partialUpdateObjects=A5;tn.removeUserID=rz;tn.replaceAllObjects=xz;tn.replaceAllRules=Rz;tn.replaceAllSynonyms=Az;tn.restoreApiKey=iz;tn.saveObject=Oz;tn.saveObjects=W3;tn.saveRule=Mz;tn.saveRules=V3;tn.saveSynonym=kz;tn.saveSynonyms=G3;tn.search=x5;tn.searchForFacetValues=E5;tn.searchRules=w5;tn.searchSynonyms=S5;tn.searchUserIDs=uz;tn.setSettings=Nz;tn.updateApiKey=oz;tn.waitTask=Co});var k5=tt((UW,M5)=>{M5.exports=O5()});var N5=tt(x4=>{"use strict";Object.defineProperty(x4,"__esModule",{value:!0});function Iz(){return{debug(i,o){return Promise.resolve()},info(i,o){return Promise.resolve()},error(i,o){return Promise.resolve()}}}var bz={Debug:1,Info:2,Error:3};x4.LogLevelEnum=bz;x4.createNullLogger=Iz});var F5=tt((zW,L5)=>{L5.exports=N5()});var b5=tt(Y3=>{"use strict";Object.defineProperty(Y3,"__esModule",{value:!0});var P5=require("http"),I5=require("https"),Bz=require("url");function Uz(){let i={keepAlive:!0},o=new P5.Agent(i),a=new I5.Agent(i);return{send(p){return new Promise(_=>{let t=Bz.parse(p.url),k=t.query===null?t.pathname:`${t.pathname}?${t.query}`,L=Ht({agent:t.protocol==="https:"?a:o,hostname:t.hostname,path:k,method:p.method,headers:p.headers},t.port!==void 0?{port:t.port||""}:{}),O=(t.protocol==="https:"?I5:P5).request(L,W=>{let ne="";W.on("data",m=>ne+=m),W.on("end",()=>{clearTimeout(U),clearTimeout(H),_({status:W.statusCode||0,content:ne,isTimedOut:!1})})}),C=(W,ne)=>setTimeout(()=>{O.abort(),_({status:0,content:ne,isTimedOut:!0})},W*1e3),U=C(p.connectTimeout,"Connection timeout"),H;O.on("error",W=>{clearTimeout(U),clearTimeout(H),_({status:0,content:W.message,isTimedOut:!1})}),O.once("response",()=>{clearTimeout(U),H=C(p.responseTimeout,"Socket timeout")}),p.data!==void 0&&O.write(p.data),O.end()})},destroy(){return o.destroy(),a.destroy(),Promise.resolve()}}}Y3.createNodeHttpRequester=Uz});var U5=tt((qW,B5)=>{B5.exports=b5()});var q5=tt((WW,j5)=>{"use strict";var z5=Ux(),jz=Hx(),tm=d5(),K3=kg(),X3=m5(),wn=k5(),zz=F5(),Hz=U5(),qz=Lg();function H5(i,o,a){let p={appId:i,apiKey:o,timeouts:{connect:2,read:5,write:30},requester:Hz.createNodeHttpRequester(),logger:zz.createNullLogger(),responsesCache:z5.createNullCache(),requestsCache:z5.createNullCache(),hostsCache:jz.createInMemoryCache(),userAgent:qz.createUserAgent(K3.version).add({segment:"Node.js",version:process.versions.node})};return wn.createSearchClient(Zr(Ht(Ht({},p),a),{methods:{search:wn.multipleQueries,searchForFacetValues:wn.multipleSearchForFacetValues,multipleBatch:wn.multipleBatch,multipleGetObjects:wn.multipleGetObjects,multipleQueries:wn.multipleQueries,copyIndex:wn.copyIndex,copySettings:wn.copySettings,copyRules:wn.copyRules,copySynonyms:wn.copySynonyms,moveIndex:wn.moveIndex,listIndices:wn.listIndices,getLogs:wn.getLogs,listClusters:wn.listClusters,multipleSearchForFacetValues:wn.multipleSearchForFacetValues,getApiKey:wn.getApiKey,addApiKey:wn.addApiKey,listApiKeys:wn.listApiKeys,updateApiKey:wn.updateApiKey,deleteApiKey:wn.deleteApiKey,restoreApiKey:wn.restoreApiKey,assignUserID:wn.assignUserID,assignUserIDs:wn.assignUserIDs,getUserID:wn.getUserID,searchUserIDs:wn.searchUserIDs,listUserIDs:wn.listUserIDs,getTopUserIDs:wn.getTopUserIDs,removeUserID:wn.removeUserID,hasPendingMappings:wn.hasPendingMappings,generateSecuredApiKey:wn.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:wn.getSecuredApiKeyRemainingValidity,destroy:K3.destroy,initIndex:_=>t=>wn.initIndex(_)(t,{methods:{batch:wn.batch,delete:wn.deleteIndex,getObject:wn.getObject,getObjects:wn.getObjects,saveObject:wn.saveObject,saveObjects:wn.saveObjects,search:wn.search,searchForFacetValues:wn.searchForFacetValues,waitTask:wn.waitTask,setSettings:wn.setSettings,getSettings:wn.getSettings,partialUpdateObject:wn.partialUpdateObject,partialUpdateObjects:wn.partialUpdateObjects,deleteObject:wn.deleteObject,deleteObjects:wn.deleteObjects,deleteBy:wn.deleteBy,clearObjects:wn.clearObjects,browseObjects:wn.browseObjects,getObjectPosition:wn.getObjectPosition,findObject:wn.findObject,exists:wn.exists,saveSynonym:wn.saveSynonym,saveSynonyms:wn.saveSynonyms,getSynonym:wn.getSynonym,searchSynonyms:wn.searchSynonyms,browseSynonyms:wn.browseSynonyms,deleteSynonym:wn.deleteSynonym,clearSynonyms:wn.clearSynonyms,replaceAllObjects:wn.replaceAllObjects,replaceAllSynonyms:wn.replaceAllSynonyms,searchRules:wn.searchRules,getRule:wn.getRule,deleteRule:wn.deleteRule,saveRule:wn.saveRule,saveRules:wn.saveRules,replaceAllRules:wn.replaceAllRules,browseRules:wn.browseRules,clearRules:wn.clearRules}}),initAnalytics:()=>_=>tm.createAnalyticsClient(Zr(Ht(Ht({},p),_),{methods:{addABTest:tm.addABTest,getABTest:tm.getABTest,getABTests:tm.getABTests,stopABTest:tm.stopABTest,deleteABTest:tm.deleteABTest}})),initRecommendation:()=>_=>X3.createRecommendationClient(Zr(Ht(Ht({},p),_),{methods:{getPersonalizationStrategy:X3.getPersonalizationStrategy,setPersonalizationStrategy:X3.setPersonalizationStrategy}}))}}))}H5.version=K3.version;j5.exports=H5});var V5=tt((VW,Q3)=>{var W5=q5();Q3.exports=W5;Q3.exports.default=W5});var Jz={};YF(Jz,{default:()=>$z});var Y5=vu(require("@yarnpkg/cli")),fh=vu(require("@yarnpkg/core"));var xx=vu(lc()),oh=vu(Mi()),d4=(0,oh.memo)(({active:i})=>{let o=(0,oh.useMemo)(()=>i?"\u25C9":"\u25EF",[i]),a=(0,oh.useMemo)(()=>i?"green":"yellow",[i]);return oh.default.createElement(xx.Text,{color:a},o)});var y2=vu(lc()),na=vu(Mi());var Rx=vu(lc()),p4=vu(Mi());function m2({active:i},o,a){let{stdin:p}=(0,Rx.useStdin)(),_=(0,p4.useCallback)((t,k)=>o(t,k),a);(0,p4.useEffect)(()=>{if(!(!i||!p))return p.on("keypress",_),()=>{p.off("keypress",_)}},[i,_,p])}var h4;(function(a){a.BEFORE="before",a.AFTER="after"})(h4||(h4={}));var Ax=function({active:i},o,a){m2({active:i},(p,_)=>{_.name==="tab"&&(_.shift?o(h4.BEFORE):o(h4.AFTER))},a)};var v4=function(i,o,{active:a,minus:p,plus:_,set:t,loop:k=!0}){m2({active:a},(L,O)=>{let C=o.indexOf(i);switch(O.name){case p:{let U=C-1;if(k){t(o[(o.length+U)%o.length]);return}if(U<0)return;t(o[U])}break;case _:{let U=C+1;if(k){t(o[U%o.length]);return}if(U>=o.length)return;t(o[U])}break}},[o,i,_,t,k])};var m4=({active:i=!0,children:o=[],radius:a=10,size:p=1,loop:_=!0,onFocusRequest:t,willReachEnd:k})=>{let L=Ee=>{if(Ee.key===null)throw new Error("Expected all children to have a key");return Ee.key},O=na.default.Children.map(o,Ee=>L(Ee)),C=O[0],[U,H]=(0,na.useState)(C),W=O.indexOf(U);(0,na.useEffect)(()=>{O.includes(U)||H(C)},[o]),(0,na.useEffect)(()=>{k&&W>=O.length-2&&k()},[W]),Ax({active:i&&!!t},Ee=>{t==null||t(Ee)},[t]),v4(U,O,{active:i,minus:"up",plus:"down",set:H,loop:_});let ne=W-a,m=W+a;m>O.length&&(ne-=m-O.length,m=O.length),ne<0&&(m+=-ne,ne=0),m>=O.length&&(m=O.length-1);let he=[];for(let Ee=ne;Ee<=m;++Ee){let ve=O[Ee],se=i&&ve===U;he.push(na.default.createElement(y2.Box,{key:ve,height:p},na.default.createElement(y2.Box,{marginLeft:1,marginRight:1},na.default.createElement(y2.Text,null,se?na.default.createElement(y2.Text,{color:"cyan",bold:!0},">"):" ")),na.default.createElement(y2.Box,null,na.default.cloneElement(o[Ee],{active:se}))))}return na.default.createElement(y2.Box,{flexDirection:"column",width:"100%"},he)};var y4=vu(Mi());var Ox=vu(lc()),ed=vu(Mi()),Mx=vu(require("readline")),N3=ed.default.createContext(null),kx=({children:i})=>{let{stdin:o,setRawMode:a}=(0,Ox.useStdin)();(0,ed.useEffect)(()=>{a&&a(!0),o&&(0,Mx.emitKeypressEvents)(o)},[o,a]);let[p,_]=(0,ed.useState)(new Map),t=(0,ed.useMemo)(()=>({getAll:()=>p,get:k=>p.get(k),set:(k,L)=>_(new Map([...p,[k,L]]))}),[p,_]);return ed.default.createElement(N3.Provider,{value:t,children:i})};function lh(i,o){let a=(0,y4.useContext)(N3);if(a===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof i=="undefined")return a.getAll();let p=(0,y4.useCallback)(t=>{a.set(i,t)},[i,a.set]),_=a.get(i);return typeof _=="undefined"&&(_=o),[_,p]}var g4=vu(lc()),L3=vu(Mi());async function _4(i,o,{stdin:a,stdout:p,stderr:_}={}){let t,k=O=>{let{exit:C}=(0,g4.useApp)();m2({active:!0},(U,H)=>{H.name==="return"&&(t=O,C())},[C,O])},{waitUntilExit:L}=(0,g4.render)(L3.default.createElement(kx,null,L3.default.createElement(i,Zr(Ht({},o),{useSubmit:k}))),{stdin:a,stdout:p,stderr:_});return await L(),t}var K5=vu(require("clipanion")),X5=vu(Px()),or=vu(lc()),En=vu(Mi());var G5=vu(V5()),J3={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},Wz=(0,G5.default)(J3.appId,J3.apiKey).initIndex(J3.indexName),Z3=async(i,o=0)=>await Wz.search(i,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:o,hitsPerPage:10});var Bg=["regular","dev","peer"],Ug=class extends Y5.BaseCommand{async execute(){let o=await fh.Configuration.find(this.context.cwd,this.context.plugins),a=()=>En.default.createElement(or.Box,{flexDirection:"row"},En.default.createElement(or.Box,{flexDirection:"column",width:48},En.default.createElement(or.Box,null,En.default.createElement(or.Text,null,"Press ",En.default.createElement(or.Text,{bold:!0,color:"cyanBright"},""),"/",En.default.createElement(or.Text,{bold:!0,color:"cyanBright"},"")," to move between packages.")),En.default.createElement(or.Box,null,En.default.createElement(or.Text,null,"Press ",En.default.createElement(or.Text,{bold:!0,color:"cyanBright"},"")," to select a package.")),En.default.createElement(or.Box,null,En.default.createElement(or.Text,null,"Press ",En.default.createElement(or.Text,{bold:!0,color:"cyanBright"},"")," again to change the target."))),En.default.createElement(or.Box,{flexDirection:"column"},En.default.createElement(or.Box,{marginLeft:1},En.default.createElement(or.Text,null,"Press ",En.default.createElement(or.Text,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),En.default.createElement(or.Box,{marginLeft:1},En.default.createElement(or.Text,null,"Press ",En.default.createElement(or.Text,{bold:!0,color:"cyanBright"},"")," to abort.")))),p=()=>En.default.createElement(En.default.Fragment,null,En.default.createElement(or.Box,{width:15},En.default.createElement(or.Text,{bold:!0,underline:!0,color:"gray"},"Owner")),En.default.createElement(or.Box,{width:11},En.default.createElement(or.Text,{bold:!0,underline:!0,color:"gray"},"Version")),En.default.createElement(or.Box,{width:10},En.default.createElement(or.Text,{bold:!0,underline:!0,color:"gray"},"Downloads"))),_=()=>En.default.createElement(or.Box,{width:17},En.default.createElement(or.Text,{bold:!0,underline:!0,color:"gray"},"Target")),t=({hit:ne,active:m})=>{let[he,Ee]=lh(ne.name,null);m2({active:m},(De,pe)=>{if(pe.name!=="space")return;if(!he){Ee(Bg[0]);return}let me=Bg.indexOf(he)+1;me===Bg.length?Ee(null):Ee(Bg[me])},[he,Ee]);let ve=fh.structUtils.parseIdent(ne.name),se=fh.structUtils.prettyIdent(o,ve);return En.default.createElement(or.Box,null,En.default.createElement(or.Box,{width:45},En.default.createElement(or.Text,{bold:!0,wrap:"wrap"},se)),En.default.createElement(or.Box,{width:14,marginLeft:1},En.default.createElement(or.Text,{bold:!0,wrap:"truncate"},ne.owner.name)),En.default.createElement(or.Box,{width:10,marginLeft:1},En.default.createElement(or.Text,{italic:!0,wrap:"truncate"},ne.version)),En.default.createElement(or.Box,{width:16,marginLeft:1},En.default.createElement(or.Text,null,ne.humanDownloadsLast30Days)))},k=({name:ne,active:m})=>{let[he]=lh(ne,null),Ee=fh.structUtils.parseIdent(ne);return En.default.createElement(or.Box,null,En.default.createElement(or.Box,{width:47},En.default.createElement(or.Text,{bold:!0}," - ",fh.structUtils.prettyIdent(o,Ee))),Bg.map(ve=>En.default.createElement(or.Box,{key:ve,width:14,marginLeft:1},En.default.createElement(or.Text,null," ",En.default.createElement(d4,{active:he===ve})," ",En.default.createElement(or.Text,{bold:!0},ve)))))},L=()=>En.default.createElement(or.Box,{marginTop:1},En.default.createElement(or.Text,null,"Powered by Algolia.")),C=await _4(({useSubmit:ne})=>{let m=lh();ne(m);let he=Array.from(m.keys()).filter(qe=>m.get(qe)!==null),[Ee,ve]=(0,En.useState)(""),[se,De]=(0,En.useState)(0),[pe,me]=(0,En.useState)([]),ie=qe=>{qe.match(/\t| /)||ve(qe)},Oe=async()=>{De(0);let qe=await Z3(Ee);qe.query===Ee&&me(qe.hits)},je=async()=>{let qe=await Z3(Ee,se+1);qe.query===Ee&&qe.page-1===se&&(De(qe.page),me([...pe,...qe.hits]))};return(0,En.useEffect)(()=>{Ee?Oe():me([])},[Ee]),En.default.createElement(or.Box,{flexDirection:"column"},En.default.createElement(a,null),En.default.createElement(or.Box,{flexDirection:"row",marginTop:1},En.default.createElement(or.Text,{bold:!0},"Search: "),En.default.createElement(or.Box,{width:41},En.default.createElement(X5.default,{value:Ee,onChange:ie,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),En.default.createElement(p,null)),pe.length?En.default.createElement(m4,{radius:2,loop:!1,children:pe.map(qe=>En.default.createElement(t,{key:qe.name,hit:qe,active:!1})),willReachEnd:je}):En.default.createElement(or.Text,{color:"gray"},"Start typing..."),En.default.createElement(or.Box,{flexDirection:"row",marginTop:1},En.default.createElement(or.Box,{width:49},En.default.createElement(or.Text,{bold:!0},"Selected:")),En.default.createElement(_,null)),he.length?he.map(qe=>En.default.createElement(k,{key:qe,name:qe,active:!1})):En.default.createElement(or.Text,{color:"gray"},"No selected packages..."),En.default.createElement(L,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof C=="undefined")return 1;let U=Array.from(C.keys()).filter(ne=>C.get(ne)==="regular"),H=Array.from(C.keys()).filter(ne=>C.get(ne)==="dev"),W=Array.from(C.keys()).filter(ne=>C.get(ne)==="peer");return U.length&&await this.cli.run(["add",...U]),H.length&&await this.cli.run(["add","--dev",...H]),W&&await this.cli.run(["add","--peer",...W]),0}};Ug.paths=[["search"]],Ug.usage=K5.Command.Usage({category:"Interactive commands",description:"open the search interface",details:` - This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. - `,examples:[["Open the search window","yarn search"]]});var Q5=Ug;var O4=vu(require("@yarnpkg/cli")),xo=vu(require("@yarnpkg/core"));var jg=vu(lc()),_2=vu(Mi());var J5=vu(lc()),Z5=vu(Mi()),R4=({length:i,active:o})=>{if(i===0)return null;let a=i>1?` ${"-".repeat(i-1)}`:" ";return Z5.default.createElement(J5.Text,{dimColor:!o},a)};var $5=function({active:i,skewer:o,options:a,value:p,onChange:_,sizes:t=[]}){let k=a.filter(({label:O})=>!!O).map(({value:O})=>O),L=a.findIndex(O=>O.value===p&&O.label!="");return v4(p,k,{active:i,minus:"left",plus:"right",set:_}),_2.default.createElement(_2.default.Fragment,null,a.map(({label:O},C)=>{let U=C===L,H=t[C]-1||0,W=O.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),ne=Math.max(0,H-W.length-2);return O?_2.default.createElement(jg.Box,{key:O,width:H,marginLeft:1},_2.default.createElement(jg.Text,{wrap:"truncate"},_2.default.createElement(d4,{active:U})," ",O),o?_2.default.createElement(R4,{active:i,length:ne}):null):_2.default.createElement(jg.Box,{key:`spacer-${C}`,width:H,marginLeft:1})}))};var i9=vu(require("@yarnpkg/plugin-essentials")),M4=vu(require("clipanion"));function td(){}td.prototype={diff:function(o,a){var p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},_=p.callback;typeof p=="function"&&(_=p,p={}),this.options=p;var t=this;function k(he){return _?(setTimeout(function(){_(void 0,he)},0),!0):he}o=this.castInput(o),a=this.castInput(a),o=this.removeEmpty(this.tokenize(o)),a=this.removeEmpty(this.tokenize(a));var L=a.length,O=o.length,C=1,U=L+O;p.maxEditLength&&(U=Math.min(U,p.maxEditLength));var H=[{newPos:-1,components:[]}],W=this.extractCommon(H[0],a,o,0);if(H[0].newPos+1>=L&&W+1>=O)return k([{value:this.join(a),count:a.length}]);function ne(){for(var he=-1*C;he<=C;he+=2){var Ee=void 0,ve=H[he-1],se=H[he+1],De=(se?se.newPos:0)-he;ve&&(H[he-1]=void 0);var pe=ve&&ve.newPos+1=L&&De+1>=O)return k(Vz(t,Ee.components,a,o,t.useLongestToken));H[he]=Ee}C++}if(_)(function he(){setTimeout(function(){if(C>U)return _();ne()||he()},0)})();else for(;C<=U;){var m=ne();if(m)return m}},pushComponent:function(o,a,p){var _=o[o.length-1];_&&_.added===a&&_.removed===p?o[o.length-1]={count:_.count+1,added:a,removed:p}:o.push({count:1,added:a,removed:p})},extractCommon:function(o,a,p,_){for(var t=a.length,k=p.length,L=o.newPos,O=L-_,C=0;L+1ne.length?he:ne}),C.value=i.join(U)}else C.value=i.join(a.slice(L,L+C.count));L+=C.count,C.added||(O+=C.count)}}var W=o[k-1];return k>1&&typeof W.value=="string"&&(W.added||W.removed)&&i.equals("",W.value)&&(o[k-2].value+=W.value,o.pop()),o}function Gz(i){return{newPos:i.newPos,components:i.components.slice(0)}}var aV=new td;function Yz(i,o){if(typeof i=="function")o.callback=i;else if(i)for(var a in i)i.hasOwnProperty(a)&&(o[a]=i[a]);return o}var e9=/^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/,t9=/\S/,$3=new td;$3.equals=function(i,o){return this.options.ignoreCase&&(i=i.toLowerCase(),o=o.toLowerCase()),i===o||this.options.ignoreWhitespace&&!t9.test(i)&&!t9.test(o)};$3.tokenize=function(i){for(var o=i.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/),a=0;a=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,l9=(i,o)=>i.length>0?[i.slice(0,o)].concat(l9(i.slice(o),o)):[],Hg=class extends O4.BaseCommand{async execute(){if(!this.context.stdout.isTTY)throw new M4.UsageError("This command can only be run in a TTY environment");let o=await xo.Configuration.find(this.context.cwd,this.context.plugins),{project:a,workspace:p}=await xo.Project.find(o,this.context.cwd),_=await xo.Cache.find(o);if(!p)throw new O4.WorkspaceRequiredError(a.cwd,this.context.cwd);await a.restoreInstallState({restoreResolutions:!1});let t=this.context.stdout.rows-7,k=(se,De)=>{let pe=n9(se,De),me="";for(let ie of pe)ie.added?me+=xo.formatUtils.pretty(o,ie.value,"green"):ie.removed||(me+=ie.value);return me},L=(se,De)=>{if(se===De)return De;let pe=xo.structUtils.parseRange(se),me=xo.structUtils.parseRange(De),ie=pe.selector.match(o9),Oe=me.selector.match(o9);if(!ie||!Oe)return k(se,De);let je=["gray","red","yellow","green","magenta"],qe=null,yt="";for(let gt=1;gt{let me=await i9.suggestUtils.fetchDescriptorFrom(se,pe,{project:a,cache:_,preserveModifier:De,workspace:p});return me!==null?me.range:se.range},C=async se=>{let De=u9.default.valid(se.range)?`^${se.range}`:se.range,[pe,me]=await Promise.all([O(se,se.range,De).catch(()=>null),O(se,se.range,"latest").catch(()=>null)]),ie=[{value:null,label:se.range}];return pe&&pe!==se.range?ie.push({value:pe,label:L(se.range,pe)}):ie.push({value:null,label:""}),me&&me!==pe&&me!==se.range?ie.push({value:me,label:L(se.range,me)}):ie.push({value:null,label:""}),ie},U=()=>Tr.default.createElement(bi.Box,{flexDirection:"row"},Tr.default.createElement(bi.Box,{flexDirection:"column",width:49},Tr.default.createElement(bi.Box,{marginLeft:1},Tr.default.createElement(bi.Text,null,"Press ",Tr.default.createElement(bi.Text,{bold:!0,color:"cyanBright"},""),"/",Tr.default.createElement(bi.Text,{bold:!0,color:"cyanBright"},"")," to select packages.")),Tr.default.createElement(bi.Box,{marginLeft:1},Tr.default.createElement(bi.Text,null,"Press ",Tr.default.createElement(bi.Text,{bold:!0,color:"cyanBright"},""),"/",Tr.default.createElement(bi.Text,{bold:!0,color:"cyanBright"},"")," to select versions."))),Tr.default.createElement(bi.Box,{flexDirection:"column"},Tr.default.createElement(bi.Box,{marginLeft:1},Tr.default.createElement(bi.Text,null,"Press ",Tr.default.createElement(bi.Text,{bold:!0,color:"cyanBright"},"")," to install.")),Tr.default.createElement(bi.Box,{marginLeft:1},Tr.default.createElement(bi.Text,null,"Press ",Tr.default.createElement(bi.Text,{bold:!0,color:"cyanBright"},"")," to abort.")))),H=()=>Tr.default.createElement(bi.Box,{flexDirection:"row",paddingTop:1,paddingBottom:1},Tr.default.createElement(bi.Box,{width:50},Tr.default.createElement(bi.Text,{bold:!0},Tr.default.createElement(bi.Text,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),Tr.default.createElement(bi.Box,{width:17},Tr.default.createElement(bi.Text,{bold:!0,underline:!0,color:"gray"},"Current")),Tr.default.createElement(bi.Box,{width:17},Tr.default.createElement(bi.Text,{bold:!0,underline:!0,color:"gray"},"Range")),Tr.default.createElement(bi.Box,{width:17},Tr.default.createElement(bi.Text,{bold:!0,underline:!0,color:"gray"},"Latest"))),W=({active:se,descriptor:De,suggestions:pe})=>{let[me,ie]=lh(De.descriptorHash,null),Oe=xo.structUtils.stringifyIdent(De),je=Math.max(0,45-Oe.length);return Tr.default.createElement(Tr.default.Fragment,null,Tr.default.createElement(bi.Box,null,Tr.default.createElement(bi.Box,{width:45},Tr.default.createElement(bi.Text,{bold:!0},xo.structUtils.prettyIdent(o,De)),Tr.default.createElement(R4,{active:se,length:je})),Tr.default.createElement($5,{active:se,options:pe,value:me,skewer:!0,onChange:ie,sizes:[17,17,17]})))},ne=({dependencies:se})=>{let[De,pe]=(0,Tr.useState)(se.map(()=>null)),me=(0,Tr.useRef)(!0),ie=async Oe=>{let je=await C(Oe);return je.filter(qe=>qe.label!=="").length<=1?null:{descriptor:Oe,suggestions:je}};return(0,Tr.useEffect)(()=>()=>{me.current=!1},[]),(0,Tr.useEffect)(()=>{let Oe=Math.trunc(t*1.75),je=se.slice(0,Oe),qe=se.slice(Oe),yt=l9(qe,t),gt=je.map(ie).reduce(async(Xe,ut)=>{await Xe;let We=await ut;We!==null&&(!me.current||pe(Ft=>{let Jt=Ft.findIndex(Q=>Q===null),rt=[...Ft];return rt[Jt]=We,rt}))},Promise.resolve());yt.reduce((Xe,ut)=>Promise.all(ut.map(We=>Promise.resolve().then(()=>ie(We)))).then(async We=>{We=We.filter(Ft=>Ft!==null),await Xe,me.current&&pe(Ft=>{let Jt=Ft.findIndex(rt=>rt===null);return Ft.slice(0,Jt).concat(We).concat(Ft.slice(Jt+We.length))})}),gt).then(()=>{me.current&&pe(Xe=>Xe.filter(ut=>ut!==null))})},[]),De.length?Tr.default.createElement(m4,{radius:t>>1,children:De.map((Oe,je)=>Oe!==null?Tr.default.createElement(W,{key:je,active:!1,descriptor:Oe.descriptor,suggestions:Oe.suggestions}):Tr.default.createElement(bi.Text,{key:je},"Loading..."))}):Tr.default.createElement(bi.Text,null,"No upgrades found")},he=await _4(({useSubmit:se})=>{se(lh());let De=new Map;for(let me of a.workspaces)for(let ie of["dependencies","devDependencies"])for(let Oe of me.manifest[ie].values())a.tryWorkspaceByDescriptor(Oe)===null&&De.set(Oe.descriptorHash,Oe);let pe=xo.miscUtils.sortMap(De.values(),me=>xo.structUtils.stringifyDescriptor(me));return Tr.default.createElement(bi.Box,{flexDirection:"column"},Tr.default.createElement(U,null),Tr.default.createElement(H,null),Tr.default.createElement(ne,{dependencies:pe}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof he=="undefined")return 1;let Ee=!1;for(let se of a.workspaces)for(let De of["dependencies","devDependencies"]){let pe=se.manifest[De];for(let me of pe.values()){let ie=he.get(me.descriptorHash);typeof ie!="undefined"&&ie!==null&&(pe.set(me.identHash,xo.structUtils.makeDescriptor(me,ie)),Ee=!0)}}return Ee?(await xo.StreamReport.start({configuration:o,stdout:this.context.stdout,includeLogs:!this.context.quiet},async se=>{await a.install({cache:_,report:se})})).exitCode():0}};Hg.paths=[["upgrade-interactive"]],Hg.usage=M4.Command.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` - This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. - `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var s9=Hg;var Zz={commands:[Q5,s9]},$z=Zz;return Jz;})(); -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react-debug-tools.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler-tracing.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler-tracing.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.24.0 - * react-reconciler.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.24.0 - * react-reconciler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v16.13.1 - * react.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v16.13.1 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -return plugin; -} -}; diff --git a/.yarn/plugins/@yarnpkg/plugin-stage.cjs b/.yarn/plugins/@yarnpkg/plugin-stage.cjs deleted file mode 100644 index 8e80618e5..000000000 --- a/.yarn/plugins/@yarnpkg/plugin-stage.cjs +++ /dev/null @@ -1,14 +0,0 @@ -/* eslint-disable */ -//prettier-ignore -module.exports = { -name: "@yarnpkg/plugin-stage", -factory: function (require) { -var plugin=(()=>{var N=Object.create,x=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var W=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var K=t=>x(t,"__esModule",{value:!0});var Z=(t,e)=>{for(var s in e)x(t,s,{get:e[s],enumerable:!0})},q=(t,e,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of _(e))!J.call(t,a)&&a!=="default"&&x(t,a,{get:()=>e[a],enumerable:!(s=G(e,a))||s.enumerable});return t},w=t=>q(K(x(t!=null?N(W(t)):{},"default",t&&t.__esModule&&"default"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var ot={};Z(ot,{default:()=>ct});var V=w(require("@yarnpkg/cli")),D=w(require("@yarnpkg/core")),y=w(require("@yarnpkg/fslib")),p=w(require("clipanion"));var l=w(require("@yarnpkg/core")),d=w(require("@yarnpkg/fslib"));var f=w(require("@yarnpkg/fslib")),i;(function(r){r[r.CREATE=0]="CREATE",r[r.DELETE=1]="DELETE",r[r.ADD=2]="ADD",r[r.REMOVE=3]="REMOVE",r[r.MODIFY=4]="MODIFY"})(i||(i={}));async function v(t,{marker:e}){do if(!f.xfs.existsSync(f.ppath.join(t,e)))t=f.ppath.dirname(t);else return t;while(t!=="/");return null}function L(t,{roots:e,names:s}){if(s.has(f.ppath.basename(t)))return!0;do if(!e.has(t))t=f.ppath.dirname(t);else return!0;while(t!=="/");return!1}function $(t){let e=[],s=[t];for(;s.length>0;){let a=s.pop(),n=f.xfs.readdirSync(a);for(let r of n){let m=f.ppath.resolve(a,r);f.xfs.lstatSync(m).isDirectory()?s.push(m):e.push(m)}}return e}function T(t,e){let s=0,a=0;for(let n of t)n!=="wip"&&(e.test(n)?s+=1:a+=1);return s>=a}function I(t){let e=T(t,/^(\w\(\w+\):\s*)?\w+s/),s=T(t,/^(\w\(\w+\):\s*)?[A-Z]/),a=T(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:s,useComponent:a}}function z(t){return t.useComponent?"chore(yarn): ":""}var Q=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function H(t,e){let s=z(t),a=[],n=e.slice().sort((r,m)=>r[0]-m[0]);for(;n.length>0;){let[r,m]=n.shift(),h=Q.get(r);t.useUpperCase&&a.length===0&&(h=`${h[0].toUpperCase()}${h.slice(1)}`),t.useThirdPerson&&(h+="s");let o=[m];for(;n.length>0&&n[0][0]===r;){let[,c]=n.shift();o.push(c)}o.sort();let g=o.shift();o.length===1?g+=" (and one other)":o.length>1&&(g+=` (and ${o.length} others)`),a.push(`${h} ${g}`)}return`${s}${a.join(", ")}`}var X="Commit generated via `yarn stage`",tt=11;async function j(t){let{code:e,stdout:s}=await l.execUtils.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?s.trim():null}async function et(t,e){let s=[],a=e.filter(g=>d.ppath.basename(g.path)==="package.json");for(let{action:g,path:c}of a){let P=d.ppath.relative(t,c);if(g===i.MODIFY){let u=await j(t),{stdout:b}=await l.execUtils.execvp("git",["show",`${u}:${P}`],{cwd:t,strict:!0}),A=await l.Manifest.fromText(b),M=await l.Manifest.fromFile(c),F=new Map([...M.dependencies,...M.devDependencies]),R=new Map([...A.dependencies,...A.devDependencies]);for(let[C,U]of R){let S=l.structUtils.stringifyIdent(U),k=F.get(C);k?k.range!==U.range&&s.push([i.MODIFY,`${S} to ${k.range}`]):s.push([i.REMOVE,S])}for(let[C,U]of F)R.has(C)||s.push([i.ADD,l.structUtils.stringifyIdent(U)])}else if(g===i.CREATE){let u=await l.Manifest.fromFile(c);u.name?s.push([i.CREATE,l.structUtils.stringifyIdent(u.name)]):s.push([i.CREATE,"a package"])}else if(g===i.DELETE){let u=await j(t),{stdout:b}=await l.execUtils.execvp("git",["show",`${u}:${P}`],{cwd:t,strict:!0}),A=await l.Manifest.fromText(b);A.name?s.push([i.DELETE,l.structUtils.stringifyIdent(A.name)]):s.push([i.DELETE,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:n,stdout:r}=await l.execUtils.execvp("git",["log",`-${tt}`,"--pretty=format:%s"],{cwd:t}),m=n===0?r.split(/\n/g).filter(g=>g!==""):[],h=I(m);return H(h,s)}var st={[i.CREATE]:[" A ","?? "],[i.MODIFY]:[" M "],[i.DELETE]:[" D "]},at={[i.CREATE]:["A "],[i.MODIFY]:["M "],[i.DELETE]:["D "]},Y={async findRoot(t){return await v(t,{marker:".git"})},async filterChanges(t,e,s,a){let{stdout:n}=await l.execUtils.execvp("git",["status","-s"],{cwd:t,strict:!0}),r=n.toString().split(/\n/g),m=(a==null?void 0:a.staged)?at:st;return[].concat(...r.map(o=>{if(o==="")return[];let g=o.slice(0,3),c=d.ppath.resolve(t,o.slice(3));if(!(a==null?void 0:a.staged)&&g==="?? "&&o.endsWith("/"))return $(c).map(P=>({action:i.CREATE,path:P}));{let u=[i.CREATE,i.MODIFY,i.DELETE].find(b=>m[b].includes(g));return u!==void 0?[{action:u,path:c}]:[]}})).filter(o=>L(o.path,{roots:e,names:s}))},async genCommitMessage(t,e){return await et(t,e)},async makeStage(t,e){let s=e.map(a=>d.npath.fromPortablePath(a.path));await l.execUtils.execvp("git",["add","--",...s],{cwd:t,strict:!0})},async makeCommit(t,e,s){let a=e.map(n=>d.npath.fromPortablePath(n.path));await l.execUtils.execvp("git",["add","-N","--",...a],{cwd:t,strict:!0}),await l.execUtils.execvp("git",["commit","-m",`${s} - -${X} -`,"--",...a],{cwd:t,strict:!0})},async makeReset(t,e){let s=e.map(a=>d.npath.fromPortablePath(a.path));await l.execUtils.execvp("git",["reset","HEAD","--",...s],{cwd:t,strict:!0})}};var O={async findRoot(t){return await v(t,{marker:".hg"})},async filterChanges(t,e,s){return[]},async genCommitMessage(t,e){return""},async makeStage(t,e){},async makeCommit(t,e,s){},async makeReset(t,e){},async makeUpdate(t,e){}};var it=[Y,O],E=class extends V.BaseCommand{constructor(){super(...arguments);this.commit=p.Option.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=p.Option.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=p.Option.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=p.Option.Boolean("-u,--update",!1,{hidden:!0})}async execute(){let e=await D.Configuration.find(this.context.cwd,this.context.plugins),{project:s}=await D.Project.find(e,this.context.cwd),{driver:a,root:n}=await nt(s.cwd),r=[e.get("cacheFolder"),e.get("globalFolder"),e.get("virtualFolder"),e.get("yarnPath")];await e.triggerHook(c=>c.populateYarnPaths,s,c=>{r.push(c)});let m=new Set;for(let c of r)for(let P of rt(n,c))m.add(P);let h=new Set([e.get("rcFilename"),e.get("lockfileFilename"),"package.json"]),o=await a.filterChanges(n,m,h),g=await a.genCommitMessage(n,o);if(this.dryRun)if(this.commit)this.context.stdout.write(`${g} -`);else for(let c of o)this.context.stdout.write(`${y.npath.fromPortablePath(c.path)} -`);else if(this.reset){let c=await a.filterChanges(n,m,h,{staged:!0});c.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,c)}else o.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,o,g):(await a.makeStage(n,o),this.context.stdout.write(g))}};E.paths=[["stage"]],E.usage=p.Command.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]});var B=E;async function nt(t){let e=null,s=null;for(let a of it)if((s=await a.findRoot(t))!==null){e=a;break}if(e===null||s===null)throw new p.UsageError("No stage driver has been found for your current project");return{driver:e,root:s}}function rt(t,e){let s=[];if(e===null)return s;for(;;){(e===t||e.startsWith(`${t}/`))&&s.push(e);let a;try{a=y.xfs.statSync(e)}catch(n){break}if(a.isSymbolicLink())e=y.ppath.resolve(y.ppath.dirname(e),y.xfs.readlinkSync(e));else break}return s}var lt={commands:[B]},ct=lt;return ot;})(); -return plugin; -} -}; diff --git a/.yarn/plugins/@yarnpkg/plugin-typescript.cjs b/.yarn/plugins/@yarnpkg/plugin-typescript.cjs deleted file mode 100644 index 5c1859e0b..000000000 --- a/.yarn/plugins/@yarnpkg/plugin-typescript.cjs +++ /dev/null @@ -1,9 +0,0 @@ -/* eslint-disable */ -//prettier-ignore -module.exports = { -name: "@yarnpkg/plugin-typescript", -factory: function (require) { -var plugin=(()=>{var Ft=Object.create,H=Object.defineProperty,Bt=Object.defineProperties,Kt=Object.getOwnPropertyDescriptor,zt=Object.getOwnPropertyDescriptors,Gt=Object.getOwnPropertyNames,Q=Object.getOwnPropertySymbols,$t=Object.getPrototypeOf,ne=Object.prototype.hasOwnProperty,De=Object.prototype.propertyIsEnumerable;var Re=(e,t,r)=>t in e?H(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,u=(e,t)=>{for(var r in t||(t={}))ne.call(t,r)&&Re(e,r,t[r]);if(Q)for(var r of Q(t))De.call(t,r)&&Re(e,r,t[r]);return e},g=(e,t)=>Bt(e,zt(t)),Lt=e=>H(e,"__esModule",{value:!0});var R=(e,t)=>{var r={};for(var s in e)ne.call(e,s)&&t.indexOf(s)<0&&(r[s]=e[s]);if(e!=null&&Q)for(var s of Q(e))t.indexOf(s)<0&&De.call(e,s)&&(r[s]=e[s]);return r};var I=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Vt=(e,t)=>{for(var r in t)H(e,r,{get:t[r],enumerable:!0})},Qt=(e,t,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Gt(t))!ne.call(e,s)&&s!=="default"&&H(e,s,{get:()=>t[s],enumerable:!(r=Kt(t,s))||r.enumerable});return e},C=e=>Qt(Lt(H(e!=null?Ft($t(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var xe=I(J=>{"use strict";Object.defineProperty(J,"__esModule",{value:!0});function _(e){let t=[...e.caches],r=t.shift();return r===void 0?ve():{get(s,n,a={miss:()=>Promise.resolve()}){return r.get(s,n,a).catch(()=>_({caches:t}).get(s,n,a))},set(s,n){return r.set(s,n).catch(()=>_({caches:t}).set(s,n))},delete(s){return r.delete(s).catch(()=>_({caches:t}).delete(s))},clear(){return r.clear().catch(()=>_({caches:t}).clear())}}}function ve(){return{get(e,t,r={miss:()=>Promise.resolve()}){return t().then(n=>Promise.all([n,r.miss(n)])).then(([n])=>n)},set(e,t){return Promise.resolve(t)},delete(e){return Promise.resolve()},clear(){return Promise.resolve()}}}J.createFallbackableCache=_;J.createNullCache=ve});var Ee=I(($s,qe)=>{qe.exports=xe()});var Te=I(ae=>{"use strict";Object.defineProperty(ae,"__esModule",{value:!0});function Jt(e={serializable:!0}){let t={};return{get(r,s,n={miss:()=>Promise.resolve()}){let a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);let o=s(),d=n&&n.miss||(()=>Promise.resolve());return o.then(y=>d(y)).then(()=>o)},set(r,s){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(s):s,Promise.resolve(s)},delete(r){return delete t[JSON.stringify(r)],Promise.resolve()},clear(){return t={},Promise.resolve()}}}ae.createInMemoryCache=Jt});var we=I((Vs,Me)=>{Me.exports=Te()});var Ce=I(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});function Xt(e,t,r){let s={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers(){return e===oe.WithinHeaders?s:{}},queryParameters(){return e===oe.WithinQueryParameters?s:{}}}}function Yt(e){let t=0,r=()=>(t++,new Promise(s=>{setTimeout(()=>{s(e(r))},Math.min(100*t,1e3))}));return e(r)}function ke(e,t=(r,s)=>Promise.resolve()){return Object.assign(e,{wait(r){return ke(e.then(s=>Promise.all([t(s,r),s])).then(s=>s[1]))}})}function Zt(e){let t=e.length-1;for(t;t>0;t--){let r=Math.floor(Math.random()*(t+1)),s=e[t];e[t]=e[r],e[r]=s}return e}function er(e,t){return Object.keys(t!==void 0?t:{}).forEach(r=>{e[r]=t[r](e)}),e}function tr(e,...t){let r=0;return e.replace(/%s/g,()=>encodeURIComponent(t[r++]))}var rr="4.2.0",sr=e=>()=>e.transporter.requester.destroy(),oe={WithinQueryParameters:0,WithinHeaders:1};M.AuthMode=oe;M.addMethods=er;M.createAuth=Xt;M.createRetryablePromise=Yt;M.createWaitablePromise=ke;M.destroy=sr;M.encode=tr;M.shuffle=Zt;M.version=rr});var F=I((Js,Ue)=>{Ue.exports=Ce()});var Ne=I(ie=>{"use strict";Object.defineProperty(ie,"__esModule",{value:!0});var nr={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};ie.MethodEnum=nr});var B=I((Ys,We)=>{We.exports=Ne()});var Ze=I(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});var He=B();function ce(e,t){let r=e||{},s=r.data||{};return Object.keys(r).forEach(n=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(n)===-1&&(s[n]=r[n])}),{data:Object.entries(s).length>0?s:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var X={Read:1,Write:2,Any:3},U={Up:1,Down:2,Timeouted:3},_e=2*60*1e3;function ue(e,t=U.Up){return g(u({},e),{status:t,lastUpdate:Date.now()})}function Fe(e){return e.status===U.Up||Date.now()-e.lastUpdate>_e}function Be(e){return e.status===U.Timeouted&&Date.now()-e.lastUpdate<=_e}function le(e){return{protocol:e.protocol||"https",url:e.url,accept:e.accept||X.Any}}function ar(e,t){return Promise.all(t.map(r=>e.get(r,()=>Promise.resolve(ue(r))))).then(r=>{let s=r.filter(d=>Fe(d)),n=r.filter(d=>Be(d)),a=[...s,...n],o=a.length>0?a.map(d=>le(d)):t;return{getTimeout(d,y){return(n.length===0&&d===0?1:n.length+3+d)*y},statelessHosts:o}})}var or=({isTimedOut:e,status:t})=>!e&&~~t==0,ir=e=>{let t=e.status;return e.isTimedOut||or(e)||~~(t/100)!=2&&~~(t/100)!=4},cr=({status:e})=>~~(e/100)==2,ur=(e,t)=>ir(e)?t.onRetry(e):cr(e)?t.onSucess(e):t.onFail(e);function Qe(e,t,r,s){let n=[],a=$e(r,s),o=Le(e,s),d=r.method,y=r.method!==He.MethodEnum.Get?{}:u(u({},r.data),s.data),b=u(u(u({"x-algolia-agent":e.userAgent.value},e.queryParameters),y),s.queryParameters),f=0,p=(h,S)=>{let O=h.pop();if(O===void 0)throw Ve(de(n));let P={data:a,headers:o,method:d,url:Ge(O,r.path,b),connectTimeout:S(f,e.timeouts.connect),responseTimeout:S(f,s.timeout)},x=j=>{let T={request:P,response:j,host:O,triesLeft:h.length};return n.push(T),T},v={onSucess:j=>Ke(j),onRetry(j){let T=x(j);return j.isTimedOut&&f++,Promise.all([e.logger.info("Retryable failure",pe(T)),e.hostsCache.set(O,ue(O,j.isTimedOut?U.Timeouted:U.Down))]).then(()=>p(h,S))},onFail(j){throw x(j),ze(j,de(n))}};return e.requester.send(P).then(j=>ur(j,v))};return ar(e.hostsCache,t).then(h=>p([...h.statelessHosts].reverse(),h.getTimeout))}function lr(e){let{hostsCache:t,logger:r,requester:s,requestsCache:n,responsesCache:a,timeouts:o,userAgent:d,hosts:y,queryParameters:b,headers:f}=e,p={hostsCache:t,logger:r,requester:s,requestsCache:n,responsesCache:a,timeouts:o,userAgent:d,headers:f,queryParameters:b,hosts:y.map(h=>le(h)),read(h,S){let O=ce(S,p.timeouts.read),P=()=>Qe(p,p.hosts.filter(j=>(j.accept&X.Read)!=0),h,O);if((O.cacheable!==void 0?O.cacheable:h.cacheable)!==!0)return P();let v={request:h,mappedRequestOptions:O,transporter:{queryParameters:p.queryParameters,headers:p.headers}};return p.responsesCache.get(v,()=>p.requestsCache.get(v,()=>p.requestsCache.set(v,P()).then(j=>Promise.all([p.requestsCache.delete(v),j]),j=>Promise.all([p.requestsCache.delete(v),Promise.reject(j)])).then(([j,T])=>T)),{miss:j=>p.responsesCache.set(v,j)})},write(h,S){return Qe(p,p.hosts.filter(O=>(O.accept&X.Write)!=0),h,ce(S,p.timeouts.write))}};return p}function dr(e){let t={value:`Algolia for JavaScript (${e})`,add(r){let s=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return t.value.indexOf(s)===-1&&(t.value=`${t.value}${s}`),t}};return t}function Ke(e){try{return JSON.parse(e.content)}catch(t){throw Je(t.message,e)}}function ze({content:e,status:t},r){let s=e;try{s=JSON.parse(e).message}catch(n){}return Xe(s,t,r)}function pr(e,...t){let r=0;return e.replace(/%s/g,()=>encodeURIComponent(t[r++]))}function Ge(e,t,r){let s=Ye(r),n=`${e.protocol}://${e.url}/${t.charAt(0)==="/"?t.substr(1):t}`;return s.length&&(n+=`?${s}`),n}function Ye(e){let t=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(e).map(r=>pr("%s=%s",r,t(e[r])?JSON.stringify(e[r]):e[r])).join("&")}function $e(e,t){if(e.method===He.MethodEnum.Get||e.data===void 0&&t.data===void 0)return;let r=Array.isArray(e.data)?e.data:u(u({},e.data),t.data);return JSON.stringify(r)}function Le(e,t){let r=u(u({},e.headers),t.headers),s={};return Object.keys(r).forEach(n=>{let a=r[n];s[n.toLowerCase()]=a}),s}function de(e){return e.map(t=>pe(t))}function pe(e){let t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return g(u({},e),{request:g(u({},e.request),{headers:u(u({},e.request.headers),t)})})}function Xe(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}function Je(e,t){return{name:"DeserializationError",message:e,response:t}}function Ve(e){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:e}}A.CallEnum=X;A.HostStatusEnum=U;A.createApiError=Xe;A.createDeserializationError=Je;A.createMappedRequestOptions=ce;A.createRetryError=Ve;A.createStatefulHost=ue;A.createStatelessHost=le;A.createTransporter=lr;A.createUserAgent=dr;A.deserializeFailure=ze;A.deserializeSuccess=Ke;A.isStatefulHostTimeouted=Be;A.isStatefulHostUp=Fe;A.serializeData=$e;A.serializeHeaders=Le;A.serializeQueryParameters=Ye;A.serializeUrl=Ge;A.stackFrameWithoutCredentials=pe;A.stackTraceWithoutCredentials=de});var K=I((en,et)=>{et.exports=Ze()});var tt=I(w=>{"use strict";Object.defineProperty(w,"__esModule",{value:!0});var N=F(),mr=K(),z=B(),hr=e=>{let t=e.region||"us",r=N.createAuth(N.AuthMode.WithinHeaders,e.appId,e.apiKey),s=mr.createTransporter(g(u({hosts:[{url:`analytics.${t}.algolia.com`}]},e),{headers:u(g(u({},r.headers()),{"content-type":"application/json"}),e.headers),queryParameters:u(u({},r.queryParameters()),e.queryParameters)})),n=e.appId;return N.addMethods({appId:n,transporter:s},e.methods)},yr=e=>(t,r)=>e.transporter.write({method:z.MethodEnum.Post,path:"2/abtests",data:t},r),gr=e=>(t,r)=>e.transporter.write({method:z.MethodEnum.Delete,path:N.encode("2/abtests/%s",t)},r),fr=e=>(t,r)=>e.transporter.read({method:z.MethodEnum.Get,path:N.encode("2/abtests/%s",t)},r),br=e=>t=>e.transporter.read({method:z.MethodEnum.Get,path:"2/abtests"},t),Pr=e=>(t,r)=>e.transporter.write({method:z.MethodEnum.Post,path:N.encode("2/abtests/%s/stop",t)},r);w.addABTest=yr;w.createAnalyticsClient=hr;w.deleteABTest=gr;w.getABTest=fr;w.getABTests=br;w.stopABTest=Pr});var st=I((rn,rt)=>{rt.exports=tt()});var at=I(G=>{"use strict";Object.defineProperty(G,"__esModule",{value:!0});var me=F(),jr=K(),nt=B(),Or=e=>{let t=e.region||"us",r=me.createAuth(me.AuthMode.WithinHeaders,e.appId,e.apiKey),s=jr.createTransporter(g(u({hosts:[{url:`recommendation.${t}.algolia.com`}]},e),{headers:u(g(u({},r.headers()),{"content-type":"application/json"}),e.headers),queryParameters:u(u({},r.queryParameters()),e.queryParameters)}));return me.addMethods({appId:e.appId,transporter:s},e.methods)},Ir=e=>t=>e.transporter.read({method:nt.MethodEnum.Get,path:"1/strategies/personalization"},t),Ar=e=>(t,r)=>e.transporter.write({method:nt.MethodEnum.Post,path:"1/strategies/personalization",data:t},r);G.createRecommendationClient=Or;G.getPersonalizationStrategy=Ir;G.setPersonalizationStrategy=Ar});var it=I((nn,ot)=>{ot.exports=at()});var jt=I(i=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0});var l=F(),q=K(),m=B(),Sr=require("crypto");function Y(e){let t=r=>e.request(r).then(s=>{if(e.batch!==void 0&&e.batch(s.hits),!e.shouldStop(s))return s.cursor?t({cursor:s.cursor}):t({page:(r.page||0)+1})});return t({})}var Dr=e=>{let t=e.appId,r=l.createAuth(e.authMode!==void 0?e.authMode:l.AuthMode.WithinHeaders,t,e.apiKey),s=q.createTransporter(g(u({hosts:[{url:`${t}-dsn.algolia.net`,accept:q.CallEnum.Read},{url:`${t}.algolia.net`,accept:q.CallEnum.Write}].concat(l.shuffle([{url:`${t}-1.algolianet.com`},{url:`${t}-2.algolianet.com`},{url:`${t}-3.algolianet.com`}]))},e),{headers:u(g(u({},r.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:u(u({},r.queryParameters()),e.queryParameters)})),n={transporter:s,appId:t,addAlgoliaAgent(a,o){s.userAgent.add({segment:a,version:o})},clearCache(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then(()=>{})}};return l.addMethods(n,e.methods)};function ct(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function ut(){return{name:"ObjectNotFoundError",message:"Object not found."}}function lt(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Rr=e=>(t,r)=>{let d=r||{},{queryParameters:s}=d,n=R(d,["queryParameters"]),a=u({acl:t},s!==void 0?{queryParameters:s}:{}),o=(y,b)=>l.createRetryablePromise(f=>$(e)(y.key,b).catch(p=>{if(p.status!==404)throw p;return f()}));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:"1/keys",data:a},n),o)},vr=e=>(t,r,s)=>{let n=q.createMappedRequestOptions(s);return n.queryParameters["X-Algolia-User-ID"]=t,e.transporter.write({method:m.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},n)},xr=e=>(t,r,s)=>e.transporter.write({method:m.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:t,cluster:r}},s),Z=e=>(t,r,s)=>{let n=(a,o)=>L(e)(t,{methods:{waitTask:D}}).waitTask(a.taskID,o);return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/operation",t),data:{operation:"copy",destination:r}},s),n)},qr=e=>(t,r,s)=>Z(e)(t,r,g(u({},s),{scope:[ee.Rules]})),Er=e=>(t,r,s)=>Z(e)(t,r,g(u({},s),{scope:[ee.Settings]})),Tr=e=>(t,r,s)=>Z(e)(t,r,g(u({},s),{scope:[ee.Synonyms]})),Mr=e=>(t,r)=>{let s=(n,a)=>l.createRetryablePromise(o=>$(e)(t,a).then(o).catch(d=>{if(d.status!==404)throw d}));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Delete,path:l.encode("1/keys/%s",t)},r),s)},wr=()=>(e,t)=>{let r=q.serializeQueryParameters(t),s=Sr.createHmac("sha256",e).update(r).digest("hex");return Buffer.from(s+r).toString("base64")},$=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/keys/%s",t)},r),kr=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/logs"},t),Cr=()=>e=>{let t=Buffer.from(e,"base64").toString("ascii"),r=/validUntil=(\d+)/,s=t.match(r);if(s===null)throw lt();return parseInt(s[1],10)-Math.round(new Date().getTime()/1e3)},Ur=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/clusters/mapping/top"},t),Nr=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/clusters/mapping/%s",t)},r),Wr=e=>t=>{let n=t||{},{retrieveMappings:r}=n,s=R(n,["retrieveMappings"]);return r===!0&&(s.getClusters=!0),e.transporter.read({method:m.MethodEnum.Get,path:"1/clusters/mapping/pending"},s)},L=e=>(t,r={})=>{let s={transporter:e.transporter,appId:e.appId,indexName:t};return l.addMethods(s,r.methods)},Hr=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/keys"},t),_r=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/clusters"},t),Fr=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/indexes"},t),Br=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/clusters/mapping"},t),Kr=e=>(t,r,s)=>{let n=(a,o)=>L(e)(t,{methods:{waitTask:D}}).waitTask(a.taskID,o);return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/operation",t),data:{operation:"move",destination:r}},s),n)},zr=e=>(t,r)=>{let s=(n,a)=>Promise.all(Object.keys(n.taskID).map(o=>L(e)(o,{methods:{waitTask:D}}).waitTask(n.taskID[o],a)));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:t}},r),s)},Gr=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:t}},r),$r=e=>(t,r)=>{let s=t.map(n=>g(u({},n),{params:q.serializeQueryParameters(n.params||{})}));return e.transporter.read({method:m.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:s},cacheable:!0},r)},Lr=e=>(t,r)=>Promise.all(t.map(s=>{let d=s.params,{facetName:n,facetQuery:a}=d,o=R(d,["facetName","facetQuery"]);return L(e)(s.indexName,{methods:{searchForFacetValues:dt}}).searchForFacetValues(n,a,u(u({},r),o))})),Vr=e=>(t,r)=>{let s=q.createMappedRequestOptions(r);return s.queryParameters["X-Algolia-User-ID"]=t,e.transporter.write({method:m.MethodEnum.Delete,path:"1/clusters/mapping"},s)},Qr=e=>(t,r)=>{let s=(n,a)=>l.createRetryablePromise(o=>$(e)(t,a).catch(d=>{if(d.status!==404)throw d;return o()}));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/keys/%s/restore",t)},r),s)},Jr=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:t}},r),Xr=e=>(t,r)=>{let s=Object.assign({},r),f=r||{},{queryParameters:n}=f,a=R(f,["queryParameters"]),o=n?{queryParameters:n}:{},d=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],y=p=>Object.keys(s).filter(h=>d.indexOf(h)!==-1).every(h=>p[h]===s[h]),b=(p,h)=>l.createRetryablePromise(S=>$(e)(t,h).then(O=>y(O)?Promise.resolve():S()));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Put,path:l.encode("1/keys/%s",t),data:o},a),b)},pt=e=>(t,r)=>{let s=(n,a)=>D(e)(n.taskID,a);return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/batch",e.indexName),data:{requests:t}},r),s)},Yr=e=>t=>Y(g(u({},t),{shouldStop:r=>r.cursor===void 0,request:r=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/browse",e.indexName),data:r},t)})),Zr=e=>t=>{let r=u({hitsPerPage:1e3},t);return Y(g(u({},r),{shouldStop:s=>s.hits.lengthg(u({},n),{hits:n.hits.map(a=>(delete a._highlightResult,a))}))}}))},es=e=>t=>{let r=u({hitsPerPage:1e3},t);return Y(g(u({},r),{shouldStop:s=>s.hits.lengthg(u({},n),{hits:n.hits.map(a=>(delete a._highlightResult,a))}))}}))},te=e=>(t,r,s)=>{let y=s||{},{batchSize:n}=y,a=R(y,["batchSize"]),o={taskIDs:[],objectIDs:[]},d=(b=0)=>{let f=[],p;for(p=b;p({action:r,body:h})),a).then(h=>(o.objectIDs=o.objectIDs.concat(h.objectIDs),o.taskIDs.push(h.taskID),p++,d(p)))};return l.createWaitablePromise(d(),(b,f)=>Promise.all(b.taskIDs.map(p=>D(e)(p,f))))},ts=e=>t=>l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/clear",e.indexName)},t),(r,s)=>D(e)(r.taskID,s)),rs=e=>t=>{let a=t||{},{forwardToReplicas:r}=a,s=R(a,["forwardToReplicas"]),n=q.createMappedRequestOptions(s);return r&&(n.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/rules/clear",e.indexName)},n),(o,d)=>D(e)(o.taskID,d))},ss=e=>t=>{let a=t||{},{forwardToReplicas:r}=a,s=R(a,["forwardToReplicas"]),n=q.createMappedRequestOptions(s);return r&&(n.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/synonyms/clear",e.indexName)},n),(o,d)=>D(e)(o.taskID,d))},ns=e=>(t,r)=>l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/deleteByQuery",e.indexName),data:t},r),(s,n)=>D(e)(s.taskID,n)),as=e=>t=>l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Delete,path:l.encode("1/indexes/%s",e.indexName)},t),(r,s)=>D(e)(r.taskID,s)),os=e=>(t,r)=>l.createWaitablePromise(yt(e)([t],r).then(s=>({taskID:s.taskIDs[0]})),(s,n)=>D(e)(s.taskID,n)),yt=e=>(t,r)=>{let s=t.map(n=>({objectID:n}));return te(e)(s,k.DeleteObject,r)},is=e=>(t,r)=>{let o=r||{},{forwardToReplicas:s}=o,n=R(o,["forwardToReplicas"]),a=q.createMappedRequestOptions(n);return s&&(a.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Delete,path:l.encode("1/indexes/%s/rules/%s",e.indexName,t)},a),(d,y)=>D(e)(d.taskID,y))},cs=e=>(t,r)=>{let o=r||{},{forwardToReplicas:s}=o,n=R(o,["forwardToReplicas"]),a=q.createMappedRequestOptions(n);return s&&(a.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Delete,path:l.encode("1/indexes/%s/synonyms/%s",e.indexName,t)},a),(d,y)=>D(e)(d.taskID,y))},us=e=>t=>gt(e)(t).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),ls=e=>(t,r)=>{let y=r||{},{query:s,paginate:n}=y,a=R(y,["query","paginate"]),o=0,d=()=>ft(e)(s||"",g(u({},a),{page:o})).then(b=>{for(let[f,p]of Object.entries(b.hits))if(t(p))return{object:p,position:parseInt(f,10),page:o};if(o++,n===!1||o>=b.nbPages)throw ut();return d()});return d()},ds=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/%s",e.indexName,t)},r),ps=()=>(e,t)=>{for(let[r,s]of Object.entries(e.hits))if(s.objectID===t)return parseInt(r,10);return-1},ms=e=>(t,r)=>{let o=r||{},{attributesToRetrieve:s}=o,n=R(o,["attributesToRetrieve"]),a=t.map(d=>u({indexName:e.indexName,objectID:d},s?{attributesToRetrieve:s}:{}));return e.transporter.read({method:m.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:a}},n)},hs=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/rules/%s",e.indexName,t)},r),gt=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/settings",e.indexName),data:{getVersion:2}},t),ys=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/synonyms/%s",e.indexName,t)},r),bt=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/task/%s",e.indexName,t.toString())},r),gs=e=>(t,r)=>l.createWaitablePromise(Pt(e)([t],r).then(s=>({objectID:s.objectIDs[0],taskID:s.taskIDs[0]})),(s,n)=>D(e)(s.taskID,n)),Pt=e=>(t,r)=>{let o=r||{},{createIfNotExists:s}=o,n=R(o,["createIfNotExists"]),a=s?k.PartialUpdateObject:k.PartialUpdateObjectNoCreate;return te(e)(t,a,n)},fs=e=>(t,r)=>{let O=r||{},{safe:s,autoGenerateObjectIDIfNotExist:n,batchSize:a}=O,o=R(O,["safe","autoGenerateObjectIDIfNotExist","batchSize"]),d=(P,x,v,j)=>l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/operation",P),data:{operation:v,destination:x}},j),(T,V)=>D(e)(T.taskID,V)),y=Math.random().toString(36).substring(7),b=`${e.indexName}_tmp_${y}`,f=he({appId:e.appId,transporter:e.transporter,indexName:b}),p=[],h=d(e.indexName,b,"copy",g(u({},o),{scope:["settings","synonyms","rules"]}));p.push(h);let S=(s?h.wait(o):h).then(()=>{let P=f(t,g(u({},o),{autoGenerateObjectIDIfNotExist:n,batchSize:a}));return p.push(P),s?P.wait(o):P}).then(()=>{let P=d(b,e.indexName,"move",o);return p.push(P),s?P.wait(o):P}).then(()=>Promise.all(p)).then(([P,x,v])=>({objectIDs:x.objectIDs,taskIDs:[P.taskID,...x.taskIDs,v.taskID]}));return l.createWaitablePromise(S,(P,x)=>Promise.all(p.map(v=>v.wait(x))))},bs=e=>(t,r)=>ye(e)(t,g(u({},r),{clearExistingRules:!0})),Ps=e=>(t,r)=>ge(e)(t,g(u({},r),{replaceExistingSynonyms:!0})),js=e=>(t,r)=>l.createWaitablePromise(he(e)([t],r).then(s=>({objectID:s.objectIDs[0],taskID:s.taskIDs[0]})),(s,n)=>D(e)(s.taskID,n)),he=e=>(t,r)=>{let o=r||{},{autoGenerateObjectIDIfNotExist:s}=o,n=R(o,["autoGenerateObjectIDIfNotExist"]),a=s?k.AddObject:k.UpdateObject;if(a===k.UpdateObject){for(let d of t)if(d.objectID===void 0)return l.createWaitablePromise(Promise.reject(ct()))}return te(e)(t,a,n)},Os=e=>(t,r)=>ye(e)([t],r),ye=e=>(t,r)=>{let d=r||{},{forwardToReplicas:s,clearExistingRules:n}=d,a=R(d,["forwardToReplicas","clearExistingRules"]),o=q.createMappedRequestOptions(a);return s&&(o.queryParameters.forwardToReplicas=1),n&&(o.queryParameters.clearExistingRules=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/rules/batch",e.indexName),data:t},o),(y,b)=>D(e)(y.taskID,b))},Is=e=>(t,r)=>ge(e)([t],r),ge=e=>(t,r)=>{let d=r||{},{forwardToReplicas:s,replaceExistingSynonyms:n}=d,a=R(d,["forwardToReplicas","replaceExistingSynonyms"]),o=q.createMappedRequestOptions(a);return s&&(o.queryParameters.forwardToReplicas=1),n&&(o.queryParameters.replaceExistingSynonyms=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/synonyms/batch",e.indexName),data:t},o),(y,b)=>D(e)(y.taskID,b))},ft=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r),dt=e=>(t,r,s)=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},s),mt=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/rules/search",e.indexName),data:{query:t}},r),ht=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/synonyms/search",e.indexName),data:{query:t}},r),As=e=>(t,r)=>{let o=r||{},{forwardToReplicas:s}=o,n=R(o,["forwardToReplicas"]),a=q.createMappedRequestOptions(n);return s&&(a.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Put,path:l.encode("1/indexes/%s/settings",e.indexName),data:t},a),(d,y)=>D(e)(d.taskID,y))},D=e=>(t,r)=>l.createRetryablePromise(s=>bt(e)(t,r).then(n=>n.status!=="published"?s():void 0)),Ss={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},k={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject"},ee={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},Ds={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},Rs={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};i.ApiKeyACLEnum=Ss;i.BatchActionEnum=k;i.ScopeEnum=ee;i.StrategyEnum=Ds;i.SynonymEnum=Rs;i.addApiKey=Rr;i.assignUserID=vr;i.assignUserIDs=xr;i.batch=pt;i.browseObjects=Yr;i.browseRules=Zr;i.browseSynonyms=es;i.chunkedBatch=te;i.clearObjects=ts;i.clearRules=rs;i.clearSynonyms=ss;i.copyIndex=Z;i.copyRules=qr;i.copySettings=Er;i.copySynonyms=Tr;i.createBrowsablePromise=Y;i.createMissingObjectIDError=ct;i.createObjectNotFoundError=ut;i.createSearchClient=Dr;i.createValidUntilNotFoundError=lt;i.deleteApiKey=Mr;i.deleteBy=ns;i.deleteIndex=as;i.deleteObject=os;i.deleteObjects=yt;i.deleteRule=is;i.deleteSynonym=cs;i.exists=us;i.findObject=ls;i.generateSecuredApiKey=wr;i.getApiKey=$;i.getLogs=kr;i.getObject=ds;i.getObjectPosition=ps;i.getObjects=ms;i.getRule=hs;i.getSecuredApiKeyRemainingValidity=Cr;i.getSettings=gt;i.getSynonym=ys;i.getTask=bt;i.getTopUserIDs=Ur;i.getUserID=Nr;i.hasPendingMappings=Wr;i.initIndex=L;i.listApiKeys=Hr;i.listClusters=_r;i.listIndices=Fr;i.listUserIDs=Br;i.moveIndex=Kr;i.multipleBatch=zr;i.multipleGetObjects=Gr;i.multipleQueries=$r;i.multipleSearchForFacetValues=Lr;i.partialUpdateObject=gs;i.partialUpdateObjects=Pt;i.removeUserID=Vr;i.replaceAllObjects=fs;i.replaceAllRules=bs;i.replaceAllSynonyms=Ps;i.restoreApiKey=Qr;i.saveObject=js;i.saveObjects=he;i.saveRule=Os;i.saveRules=ye;i.saveSynonym=Is;i.saveSynonyms=ge;i.search=ft;i.searchForFacetValues=dt;i.searchRules=mt;i.searchSynonyms=ht;i.searchUserIDs=Jr;i.setSettings=As;i.updateApiKey=Xr;i.waitTask=D});var It=I((on,Ot)=>{Ot.exports=jt()});var At=I(re=>{"use strict";Object.defineProperty(re,"__esModule",{value:!0});function vs(){return{debug(e,t){return Promise.resolve()},info(e,t){return Promise.resolve()},error(e,t){return Promise.resolve()}}}var xs={Debug:1,Info:2,Error:3};re.LogLevelEnum=xs;re.createNullLogger=vs});var Dt=I((un,St)=>{St.exports=At()});var xt=I(fe=>{"use strict";Object.defineProperty(fe,"__esModule",{value:!0});var Rt=require("http"),vt=require("https"),qs=require("url");function Es(){let e={keepAlive:!0},t=new Rt.Agent(e),r=new vt.Agent(e);return{send(s){return new Promise(n=>{let a=qs.parse(s.url),o=a.query===null?a.pathname:`${a.pathname}?${a.query}`,d=u({agent:a.protocol==="https:"?r:t,hostname:a.hostname,path:o,method:s.method,headers:s.headers},a.port!==void 0?{port:a.port||""}:{}),y=(a.protocol==="https:"?vt:Rt).request(d,h=>{let S="";h.on("data",O=>S+=O),h.on("end",()=>{clearTimeout(f),clearTimeout(p),n({status:h.statusCode||0,content:S,isTimedOut:!1})})}),b=(h,S)=>setTimeout(()=>{y.abort(),n({status:0,content:S,isTimedOut:!0})},h*1e3),f=b(s.connectTimeout,"Connection timeout"),p;y.on("error",h=>{clearTimeout(f),clearTimeout(p),n({status:0,content:h.message,isTimedOut:!1})}),y.once("response",()=>{clearTimeout(f),p=b(s.responseTimeout,"Socket timeout")}),s.data!==void 0&&y.write(s.data),y.end()})},destroy(){return t.destroy(),r.destroy(),Promise.resolve()}}}fe.createNodeHttpRequester=Es});var Et=I((dn,qt)=>{qt.exports=xt()});var kt=I((pn,Tt)=>{"use strict";var Mt=Ee(),Ts=we(),W=st(),be=F(),Pe=it(),c=It(),Ms=Dt(),ws=Et(),ks=K();function wt(e,t,r){let s={appId:e,apiKey:t,timeouts:{connect:2,read:5,write:30},requester:ws.createNodeHttpRequester(),logger:Ms.createNullLogger(),responsesCache:Mt.createNullCache(),requestsCache:Mt.createNullCache(),hostsCache:Ts.createInMemoryCache(),userAgent:ks.createUserAgent(be.version).add({segment:"Node.js",version:process.versions.node})};return c.createSearchClient(g(u(u({},s),r),{methods:{search:c.multipleQueries,searchForFacetValues:c.multipleSearchForFacetValues,multipleBatch:c.multipleBatch,multipleGetObjects:c.multipleGetObjects,multipleQueries:c.multipleQueries,copyIndex:c.copyIndex,copySettings:c.copySettings,copyRules:c.copyRules,copySynonyms:c.copySynonyms,moveIndex:c.moveIndex,listIndices:c.listIndices,getLogs:c.getLogs,listClusters:c.listClusters,multipleSearchForFacetValues:c.multipleSearchForFacetValues,getApiKey:c.getApiKey,addApiKey:c.addApiKey,listApiKeys:c.listApiKeys,updateApiKey:c.updateApiKey,deleteApiKey:c.deleteApiKey,restoreApiKey:c.restoreApiKey,assignUserID:c.assignUserID,assignUserIDs:c.assignUserIDs,getUserID:c.getUserID,searchUserIDs:c.searchUserIDs,listUserIDs:c.listUserIDs,getTopUserIDs:c.getTopUserIDs,removeUserID:c.removeUserID,hasPendingMappings:c.hasPendingMappings,generateSecuredApiKey:c.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:c.getSecuredApiKeyRemainingValidity,destroy:be.destroy,initIndex:n=>a=>c.initIndex(n)(a,{methods:{batch:c.batch,delete:c.deleteIndex,getObject:c.getObject,getObjects:c.getObjects,saveObject:c.saveObject,saveObjects:c.saveObjects,search:c.search,searchForFacetValues:c.searchForFacetValues,waitTask:c.waitTask,setSettings:c.setSettings,getSettings:c.getSettings,partialUpdateObject:c.partialUpdateObject,partialUpdateObjects:c.partialUpdateObjects,deleteObject:c.deleteObject,deleteObjects:c.deleteObjects,deleteBy:c.deleteBy,clearObjects:c.clearObjects,browseObjects:c.browseObjects,getObjectPosition:c.getObjectPosition,findObject:c.findObject,exists:c.exists,saveSynonym:c.saveSynonym,saveSynonyms:c.saveSynonyms,getSynonym:c.getSynonym,searchSynonyms:c.searchSynonyms,browseSynonyms:c.browseSynonyms,deleteSynonym:c.deleteSynonym,clearSynonyms:c.clearSynonyms,replaceAllObjects:c.replaceAllObjects,replaceAllSynonyms:c.replaceAllSynonyms,searchRules:c.searchRules,getRule:c.getRule,deleteRule:c.deleteRule,saveRule:c.saveRule,saveRules:c.saveRules,replaceAllRules:c.replaceAllRules,browseRules:c.browseRules,clearRules:c.clearRules}}),initAnalytics:()=>n=>W.createAnalyticsClient(g(u(u({},s),n),{methods:{addABTest:W.addABTest,getABTest:W.getABTest,getABTests:W.getABTests,stopABTest:W.stopABTest,deleteABTest:W.deleteABTest}})),initRecommendation:()=>n=>Pe.createRecommendationClient(g(u(u({},s),n),{methods:{getPersonalizationStrategy:Pe.getPersonalizationStrategy,setPersonalizationStrategy:Pe.setPersonalizationStrategy}}))}}))}wt.version=be.version;Tt.exports=wt});var Ut=I((mn,je)=>{var Ct=kt();je.exports=Ct;je.exports.default=Ct});var Ws={};Vt(Ws,{default:()=>Ks});var Oe=C(require("@yarnpkg/core")),E=C(require("@yarnpkg/core")),Ie=C(require("@yarnpkg/plugin-essentials")),Ht=C(require("semver"));var se=C(require("@yarnpkg/core")),Nt=C(Ut()),Cs="e8e1bd300d860104bb8c58453ffa1eb4",Us="OFCNCOG2CU",Wt=async(e,t)=>{var a;let r=se.structUtils.stringifyIdent(e),n=Ns(t).initIndex("npm-search");try{return((a=(await n.getObject(r,{attributesToRetrieve:["types"]})).types)==null?void 0:a.ts)==="definitely-typed"}catch(o){return!1}},Ns=e=>(0,Nt.default)(Us,Cs,{requester:{async send(r){try{let s=await se.httpUtils.request(r.url,r.data||null,{configuration:e,headers:r.headers});return{content:s.body,isTimedOut:!1,status:s.statusCode}}catch(s){return{content:s.response.body,isTimedOut:!1,status:s.response.statusCode}}}}});var _t=e=>e.scope?`${e.scope}__${e.name}`:`${e.name}`,Hs=async(e,t,r,s)=>{if(r.scope==="types")return;let{project:n}=e,{configuration:a}=n,o=a.makeResolver(),d={project:n,resolver:o,report:new E.ThrowReport};if(!await Wt(r,a))return;let b=_t(r),f=E.structUtils.parseRange(r.range).selector;if(!E.semverUtils.validRange(f)){let P=await o.getCandidates(r,new Map,d);f=E.structUtils.parseRange(P[0].reference).selector}let p=Ht.default.coerce(f);if(p===null)return;let h=`${Ie.suggestUtils.Modifier.CARET}${p.major}`,S=E.structUtils.makeDescriptor(E.structUtils.makeIdent("types",b),h),O=E.miscUtils.mapAndFind(n.workspaces,P=>{var T,V;let x=(T=P.manifest.dependencies.get(r.identHash))==null?void 0:T.descriptorHash,v=(V=P.manifest.devDependencies.get(r.identHash))==null?void 0:V.descriptorHash;if(x!==r.descriptorHash&&v!==r.descriptorHash)return E.miscUtils.mapAndFind.skip;let j=[];for(let Ae of Oe.Manifest.allDependencies){let Se=P.manifest[Ae].get(S.identHash);typeof Se!="undefined"&&j.push([Ae,Se])}return j.length===0?E.miscUtils.mapAndFind.skip:j});if(typeof O!="undefined")for(let[P,x]of O)e.manifest[P].set(x.identHash,x);else{try{if((await o.getCandidates(S,new Map,d)).length===0)return}catch{return}e.manifest[Ie.suggestUtils.Target.DEVELOPMENT].set(S.identHash,S)}},_s=async(e,t,r)=>{if(r.scope==="types")return;let s=_t(r),n=E.structUtils.makeIdent("types",s);for(let a of Oe.Manifest.allDependencies)typeof e.manifest[a].get(n.identHash)!="undefined"&&e.manifest[a].delete(n.identHash)},Fs=(e,t)=>{t.publishConfig&&t.publishConfig.typings&&(t.typings=t.publishConfig.typings),t.publishConfig&&t.publishConfig.types&&(t.types=t.publishConfig.types)},Bs={hooks:{afterWorkspaceDependencyAddition:Hs,afterWorkspaceDependencyRemoval:_s,beforeWorkspacePacking:Fs}},Ks=Bs;return Ws;})(); -return plugin; -} -}; diff --git a/.yarn/plugins/@yarnpkg/plugin-version.cjs b/.yarn/plugins/@yarnpkg/plugin-version.cjs deleted file mode 100644 index 87de4f440..000000000 --- a/.yarn/plugins/@yarnpkg/plugin-version.cjs +++ /dev/null @@ -1,550 +0,0 @@ -/* eslint-disable */ -//prettier-ignore -module.exports = { -name: "@yarnpkg/plugin-version", -factory: function (require) { -var plugin=(()=>{var ZB=Object.create,zy=Object.defineProperty,$B=Object.defineProperties,eU=Object.getOwnPropertyDescriptor,tU=Object.getOwnPropertyDescriptors,nU=Object.getOwnPropertyNames,uS=Object.getOwnPropertySymbols,rU=Object.getPrototypeOf,oS=Object.prototype.hasOwnProperty,iU=Object.prototype.propertyIsEnumerable;var lS=(i,o,f)=>o in i?zy(i,o,{enumerable:!0,configurable:!0,writable:!0,value:f}):i[o]=f,E0=(i,o)=>{for(var f in o||(o={}))oS.call(o,f)&&lS(i,f,o[f]);if(uS)for(var f of uS(o))iU.call(o,f)&&lS(i,f,o[f]);return i},Gf=(i,o)=>$B(i,tU(o)),uU=i=>zy(i,"__esModule",{value:!0});var ce=(i,o)=>()=>(o||i((o={exports:{}}).exports,o),o.exports),sS=(i,o)=>{for(var f in o)zy(i,f,{get:o[f],enumerable:!0})},oU=(i,o,f)=>{if(o&&typeof o=="object"||typeof o=="function")for(let p of nU(o))!oS.call(i,p)&&p!=="default"&&zy(i,p,{get:()=>o[p],enumerable:!(f=eU(o,p))||f.enumerable});return i},Mi=i=>oU(uU(zy(i!=null?ZB(rU(i)):{},"default",i&&i.__esModule&&"default"in i?{get:()=>i.default,enumerable:!0}:{value:i,enumerable:!0})),i);var eD=ce((F$,aS)=>{function lU(i,o){for(var f=-1,p=i==null?0:i.length,E=Array(p);++f{function sU(){this.__data__=[],this.size=0}fS.exports=sU});var tD=ce((P$,dS)=>{function aU(i,o){return i===o||i!==i&&o!==o}dS.exports=aU});var qy=ce((I$,pS)=>{var fU=tD();function cU(i,o){for(var f=i.length;f--;)if(fU(i[f][0],o))return f;return-1}pS.exports=cU});var vS=ce((B$,hS)=>{var dU=qy(),pU=Array.prototype,hU=pU.splice;function vU(i){var o=this.__data__,f=dU(o,i);if(f<0)return!1;var p=o.length-1;return f==p?o.pop():hU.call(o,f,1),--this.size,!0}hS.exports=vU});var yS=ce((U$,mS)=>{var mU=qy();function yU(i){var o=this.__data__,f=mU(o,i);return f<0?void 0:o[f][1]}mS.exports=yU});var _S=ce((j$,gS)=>{var gU=qy();function _U(i){return gU(this.__data__,i)>-1}gS.exports=_U});var DS=ce((z$,ES)=>{var EU=qy();function DU(i,o){var f=this.__data__,p=EU(f,i);return p<0?(++this.size,f.push([i,o])):f[p][1]=o,this}ES.exports=DU});var Hy=ce((q$,wS)=>{var wU=cS(),SU=vS(),TU=yS(),CU=_S(),xU=DS();function jv(i){var o=-1,f=i==null?0:i.length;for(this.clear();++o{var AU=Hy();function RU(){this.__data__=new AU,this.size=0}SS.exports=RU});var xS=ce((W$,CS)=>{function OU(i){var o=this.__data__,f=o.delete(i);return this.size=o.size,f}CS.exports=OU});var RS=ce((V$,AS)=>{function kU(i){return this.__data__.get(i)}AS.exports=kU});var kS=ce((G$,OS)=>{function MU(i){return this.__data__.has(i)}OS.exports=MU});var nD=ce((Y$,MS)=>{var NU=typeof global=="object"&&global&&global.Object===Object&&global;MS.exports=NU});var Yf=ce((K$,NS)=>{var LU=nD(),FU=typeof self=="object"&&self&&self.Object===Object&&self,bU=LU||FU||Function("return this")();NS.exports=bU});var zv=ce((X$,LS)=>{var PU=Yf(),IU=PU.Symbol;LS.exports=IU});var BS=ce((Q$,bS)=>{var PS=zv(),IS=Object.prototype,BU=IS.hasOwnProperty,UU=IS.toString,Wy=PS?PS.toStringTag:void 0;function jU(i){var o=BU.call(i,Wy),f=i[Wy];try{i[Wy]=void 0;var p=!0}catch(t){}var E=UU.call(i);return p&&(o?i[Wy]=f:delete i[Wy]),E}bS.exports=jU});var jS=ce((J$,US)=>{var zU=Object.prototype,qU=zU.toString;function HU(i){return qU.call(i)}US.exports=HU});var Qp=ce((Z$,zS)=>{var qS=zv(),WU=BS(),VU=jS(),GU="[object Null]",YU="[object Undefined]",HS=qS?qS.toStringTag:void 0;function KU(i){return i==null?i===void 0?YU:GU:HS&&HS in Object(i)?WU(i):VU(i)}zS.exports=KU});var qv=ce(($$,WS)=>{function XU(i){var o=typeof i;return i!=null&&(o=="object"||o=="function")}WS.exports=XU});var rD=ce((eee,VS)=>{var QU=Qp(),JU=qv(),ZU="[object AsyncFunction]",$U="[object Function]",ej="[object GeneratorFunction]",tj="[object Proxy]";function nj(i){if(!JU(i))return!1;var o=QU(i);return o==$U||o==ej||o==ZU||o==tj}VS.exports=nj});var YS=ce((tee,GS)=>{var rj=Yf(),ij=rj["__core-js_shared__"];GS.exports=ij});var QS=ce((nee,KS)=>{var iD=YS(),XS=function(){var i=/[^.]+$/.exec(iD&&iD.keys&&iD.keys.IE_PROTO||"");return i?"Symbol(src)_1."+i:""}();function uj(i){return!!XS&&XS in i}KS.exports=uj});var uD=ce((ree,JS)=>{var oj=Function.prototype,lj=oj.toString;function sj(i){if(i!=null){try{return lj.call(i)}catch(o){}try{return i+""}catch(o){}}return""}JS.exports=sj});var $S=ce((iee,ZS)=>{var aj=rD(),fj=QS(),cj=qv(),dj=uD(),pj=/[\\^$.*+?()[\]{}|]/g,hj=/^\[object .+?Constructor\]$/,vj=Function.prototype,mj=Object.prototype,yj=vj.toString,gj=mj.hasOwnProperty,_j=RegExp("^"+yj.call(gj).replace(pj,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Ej(i){if(!cj(i)||fj(i))return!1;var o=aj(i)?_j:hj;return o.test(dj(i))}ZS.exports=Ej});var tT=ce((uee,eT)=>{function Dj(i,o){return i==null?void 0:i[o]}eT.exports=Dj});var sd=ce((oee,nT)=>{var wj=$S(),Sj=tT();function Tj(i,o){var f=Sj(i,o);return wj(f)?f:void 0}nT.exports=Tj});var L_=ce((lee,rT)=>{var Cj=sd(),xj=Yf(),Aj=Cj(xj,"Map");rT.exports=Aj});var Vy=ce((see,iT)=>{var Rj=sd(),Oj=Rj(Object,"create");iT.exports=Oj});var lT=ce((aee,uT)=>{var oT=Vy();function kj(){this.__data__=oT?oT(null):{},this.size=0}uT.exports=kj});var aT=ce((fee,sT)=>{function Mj(i){var o=this.has(i)&&delete this.__data__[i];return this.size-=o?1:0,o}sT.exports=Mj});var cT=ce((cee,fT)=>{var Nj=Vy(),Lj="__lodash_hash_undefined__",Fj=Object.prototype,bj=Fj.hasOwnProperty;function Pj(i){var o=this.__data__;if(Nj){var f=o[i];return f===Lj?void 0:f}return bj.call(o,i)?o[i]:void 0}fT.exports=Pj});var pT=ce((dee,dT)=>{var Ij=Vy(),Bj=Object.prototype,Uj=Bj.hasOwnProperty;function jj(i){var o=this.__data__;return Ij?o[i]!==void 0:Uj.call(o,i)}dT.exports=jj});var vT=ce((pee,hT)=>{var zj=Vy(),qj="__lodash_hash_undefined__";function Hj(i,o){var f=this.__data__;return this.size+=this.has(i)?0:1,f[i]=zj&&o===void 0?qj:o,this}hT.exports=Hj});var yT=ce((hee,mT)=>{var Wj=lT(),Vj=aT(),Gj=cT(),Yj=pT(),Kj=vT();function Hv(i){var o=-1,f=i==null?0:i.length;for(this.clear();++o{var _T=yT(),Xj=Hy(),Qj=L_();function Jj(){this.size=0,this.__data__={hash:new _T,map:new(Qj||Xj),string:new _T}}gT.exports=Jj});var wT=ce((mee,DT)=>{function Zj(i){var o=typeof i;return o=="string"||o=="number"||o=="symbol"||o=="boolean"?i!=="__proto__":i===null}DT.exports=Zj});var Gy=ce((yee,ST)=>{var $j=wT();function ez(i,o){var f=i.__data__;return $j(o)?f[typeof o=="string"?"string":"hash"]:f.map}ST.exports=ez});var CT=ce((gee,TT)=>{var tz=Gy();function nz(i){var o=tz(this,i).delete(i);return this.size-=o?1:0,o}TT.exports=nz});var AT=ce((_ee,xT)=>{var rz=Gy();function iz(i){return rz(this,i).get(i)}xT.exports=iz});var OT=ce((Eee,RT)=>{var uz=Gy();function oz(i){return uz(this,i).has(i)}RT.exports=oz});var MT=ce((Dee,kT)=>{var lz=Gy();function sz(i,o){var f=lz(this,i),p=f.size;return f.set(i,o),this.size+=f.size==p?0:1,this}kT.exports=sz});var oD=ce((wee,NT)=>{var az=ET(),fz=CT(),cz=AT(),dz=OT(),pz=MT();function Wv(i){var o=-1,f=i==null?0:i.length;for(this.clear();++o{var hz=Hy(),vz=L_(),mz=oD(),yz=200;function gz(i,o){var f=this.__data__;if(f instanceof hz){var p=f.__data__;if(!vz||p.length{var _z=Hy(),Ez=TS(),Dz=xS(),wz=RS(),Sz=kS(),Tz=FT();function Vv(i){var o=this.__data__=new _z(i);this.size=o.size}Vv.prototype.clear=Ez;Vv.prototype.delete=Dz;Vv.prototype.get=wz;Vv.prototype.has=Sz;Vv.prototype.set=Tz;bT.exports=Vv});var BT=ce((Cee,IT)=>{function Cz(i,o){for(var f=-1,p=i==null?0:i.length;++f{var xz=sd(),Az=function(){try{var i=xz(Object,"defineProperty");return i({},"",{}),i}catch(o){}}();UT.exports=Az});var sD=ce((Aee,jT)=>{var zT=lD();function Rz(i,o,f){o=="__proto__"&&zT?zT(i,o,{configurable:!0,enumerable:!0,value:f,writable:!0}):i[o]=f}jT.exports=Rz});var aD=ce((Ree,qT)=>{var Oz=sD(),kz=tD(),Mz=Object.prototype,Nz=Mz.hasOwnProperty;function Lz(i,o,f){var p=i[o];(!(Nz.call(i,o)&&kz(p,f))||f===void 0&&!(o in i))&&Oz(i,o,f)}qT.exports=Lz});var Gv=ce((Oee,HT)=>{var Fz=aD(),bz=sD();function Pz(i,o,f,p){var E=!f;f||(f={});for(var t=-1,k=o.length;++t{function Iz(i,o){for(var f=-1,p=Array(i);++f{function Bz(i){return i!=null&&typeof i=="object"}GT.exports=Bz});var KT=ce((Nee,YT)=>{var Uz=Qp(),jz=ad(),zz="[object Arguments]";function qz(i){return jz(i)&&Uz(i)==zz}YT.exports=qz});var fD=ce((Lee,XT)=>{var QT=KT(),Hz=ad(),JT=Object.prototype,Wz=JT.hasOwnProperty,Vz=JT.propertyIsEnumerable,Gz=QT(function(){return arguments}())?QT:function(i){return Hz(i)&&Wz.call(i,"callee")&&!Vz.call(i,"callee")};XT.exports=Gz});var fd=ce((Fee,ZT)=>{var Yz=Array.isArray;ZT.exports=Yz});var eC=ce((bee,$T)=>{function Kz(){return!1}$T.exports=Kz});var cD=ce((Yy,Yv)=>{var Xz=Yf(),Qz=eC(),tC=typeof Yy=="object"&&Yy&&!Yy.nodeType&&Yy,nC=tC&&typeof Yv=="object"&&Yv&&!Yv.nodeType&&Yv,Jz=nC&&nC.exports===tC,rC=Jz?Xz.Buffer:void 0,Zz=rC?rC.isBuffer:void 0,$z=Zz||Qz;Yv.exports=$z});var uC=ce((Pee,iC)=>{var eq=9007199254740991,tq=/^(?:0|[1-9]\d*)$/;function nq(i,o){var f=typeof i;return o=o==null?eq:o,!!o&&(f=="number"||f!="symbol"&&tq.test(i))&&i>-1&&i%1==0&&i{var rq=9007199254740991;function iq(i){return typeof i=="number"&&i>-1&&i%1==0&&i<=rq}oC.exports=iq});var sC=ce((Bee,lC)=>{var uq=Qp(),oq=dD(),lq=ad(),sq="[object Arguments]",aq="[object Array]",fq="[object Boolean]",cq="[object Date]",dq="[object Error]",pq="[object Function]",hq="[object Map]",vq="[object Number]",mq="[object Object]",yq="[object RegExp]",gq="[object Set]",_q="[object String]",Eq="[object WeakMap]",Dq="[object ArrayBuffer]",wq="[object DataView]",Sq="[object Float32Array]",Tq="[object Float64Array]",Cq="[object Int8Array]",xq="[object Int16Array]",Aq="[object Int32Array]",Rq="[object Uint8Array]",Oq="[object Uint8ClampedArray]",kq="[object Uint16Array]",Mq="[object Uint32Array]",o0={};o0[Sq]=o0[Tq]=o0[Cq]=o0[xq]=o0[Aq]=o0[Rq]=o0[Oq]=o0[kq]=o0[Mq]=!0;o0[sq]=o0[aq]=o0[Dq]=o0[fq]=o0[wq]=o0[cq]=o0[dq]=o0[pq]=o0[hq]=o0[vq]=o0[mq]=o0[yq]=o0[gq]=o0[_q]=o0[Eq]=!1;function Nq(i){return lq(i)&&oq(i.length)&&!!o0[uq(i)]}lC.exports=Nq});var F_=ce((Uee,aC)=>{function Lq(i){return function(o){return i(o)}}aC.exports=Lq});var b_=ce((Ky,Kv)=>{var Fq=nD(),fC=typeof Ky=="object"&&Ky&&!Ky.nodeType&&Ky,Xy=fC&&typeof Kv=="object"&&Kv&&!Kv.nodeType&&Kv,bq=Xy&&Xy.exports===fC,pD=bq&&Fq.process,Pq=function(){try{var i=Xy&&Xy.require&&Xy.require("util").types;return i||pD&&pD.binding&&pD.binding("util")}catch(o){}}();Kv.exports=Pq});var hC=ce((jee,cC)=>{var Iq=sC(),Bq=F_(),dC=b_(),pC=dC&&dC.isTypedArray,Uq=pC?Bq(pC):Iq;cC.exports=Uq});var hD=ce((zee,vC)=>{var jq=VT(),zq=fD(),qq=fd(),Hq=cD(),Wq=uC(),Vq=hC(),Gq=Object.prototype,Yq=Gq.hasOwnProperty;function Kq(i,o){var f=qq(i),p=!f&&zq(i),E=!f&&!p&&Hq(i),t=!f&&!p&&!E&&Vq(i),k=f||p||E||t,L=k?jq(i.length,String):[],N=L.length;for(var C in i)(o||Yq.call(i,C))&&!(k&&(C=="length"||E&&(C=="offset"||C=="parent")||t&&(C=="buffer"||C=="byteLength"||C=="byteOffset")||Wq(C,N)))&&L.push(C);return L}vC.exports=Kq});var P_=ce((qee,mC)=>{var Xq=Object.prototype;function Qq(i){var o=i&&i.constructor,f=typeof o=="function"&&o.prototype||Xq;return i===f}mC.exports=Qq});var vD=ce((Hee,yC)=>{function Jq(i,o){return function(f){return i(o(f))}}yC.exports=Jq});var _C=ce((Wee,gC)=>{var Zq=vD(),$q=Zq(Object.keys,Object);gC.exports=$q});var DC=ce((Vee,EC)=>{var eH=P_(),tH=_C(),nH=Object.prototype,rH=nH.hasOwnProperty;function iH(i){if(!eH(i))return tH(i);var o=[];for(var f in Object(i))rH.call(i,f)&&f!="constructor"&&o.push(f);return o}EC.exports=iH});var mD=ce((Gee,wC)=>{var uH=rD(),oH=dD();function lH(i){return i!=null&&oH(i.length)&&!uH(i)}wC.exports=lH});var I_=ce((Yee,SC)=>{var sH=hD(),aH=DC(),fH=mD();function cH(i){return fH(i)?sH(i):aH(i)}SC.exports=cH});var CC=ce((Kee,TC)=>{var dH=Gv(),pH=I_();function hH(i,o){return i&&dH(o,pH(o),i)}TC.exports=hH});var AC=ce((Xee,xC)=>{function vH(i){var o=[];if(i!=null)for(var f in Object(i))o.push(f);return o}xC.exports=vH});var OC=ce((Qee,RC)=>{var mH=qv(),yH=P_(),gH=AC(),_H=Object.prototype,EH=_H.hasOwnProperty;function DH(i){if(!mH(i))return gH(i);var o=yH(i),f=[];for(var p in i)p=="constructor"&&(o||!EH.call(i,p))||f.push(p);return f}RC.exports=DH});var B_=ce((Jee,kC)=>{var wH=hD(),SH=OC(),TH=mD();function CH(i){return TH(i)?wH(i,!0):SH(i)}kC.exports=CH});var NC=ce((Zee,MC)=>{var xH=Gv(),AH=B_();function RH(i,o){return i&&xH(o,AH(o),i)}MC.exports=RH});var IC=ce((Qy,Xv)=>{var OH=Yf(),LC=typeof Qy=="object"&&Qy&&!Qy.nodeType&&Qy,FC=LC&&typeof Xv=="object"&&Xv&&!Xv.nodeType&&Xv,kH=FC&&FC.exports===LC,bC=kH?OH.Buffer:void 0,PC=bC?bC.allocUnsafe:void 0;function MH(i,o){if(o)return i.slice();var f=i.length,p=PC?PC(f):new i.constructor(f);return i.copy(p),p}Xv.exports=MH});var UC=ce(($ee,BC)=>{function NH(i,o){var f=-1,p=i.length;for(o||(o=Array(p));++f{function LH(i,o){for(var f=-1,p=i==null?0:i.length,E=0,t=[];++f{function FH(){return[]}qC.exports=FH});var U_=ce((nte,HC)=>{var bH=zC(),PH=yD(),IH=Object.prototype,BH=IH.propertyIsEnumerable,WC=Object.getOwnPropertySymbols,UH=WC?function(i){return i==null?[]:(i=Object(i),bH(WC(i),function(o){return BH.call(i,o)}))}:PH;HC.exports=UH});var GC=ce((rte,VC)=>{var jH=Gv(),zH=U_();function qH(i,o){return jH(i,zH(i),o)}VC.exports=qH});var j_=ce((ite,YC)=>{function HH(i,o){for(var f=-1,p=o.length,E=i.length;++f{var WH=vD(),VH=WH(Object.getPrototypeOf,Object);KC.exports=VH});var gD=ce((ote,XC)=>{var GH=j_(),YH=z_(),KH=U_(),XH=yD(),QH=Object.getOwnPropertySymbols,JH=QH?function(i){for(var o=[];i;)GH(o,KH(i)),i=YH(i);return o}:XH;XC.exports=JH});var JC=ce((lte,QC)=>{var ZH=Gv(),$H=gD();function eW(i,o){return ZH(i,$H(i),o)}QC.exports=eW});var _D=ce((ste,ZC)=>{var tW=j_(),nW=fd();function rW(i,o,f){var p=o(i);return nW(i)?p:tW(p,f(i))}ZC.exports=rW});var e6=ce((ate,$C)=>{var iW=_D(),uW=U_(),oW=I_();function lW(i){return iW(i,oW,uW)}$C.exports=lW});var ED=ce((fte,t6)=>{var sW=_D(),aW=gD(),fW=B_();function cW(i){return sW(i,fW,aW)}t6.exports=cW});var r6=ce((cte,n6)=>{var dW=sd(),pW=Yf(),hW=dW(pW,"DataView");n6.exports=hW});var u6=ce((dte,i6)=>{var vW=sd(),mW=Yf(),yW=vW(mW,"Promise");i6.exports=yW});var l6=ce((pte,o6)=>{var gW=sd(),_W=Yf(),EW=gW(_W,"Set");o6.exports=EW});var a6=ce((hte,s6)=>{var DW=sd(),wW=Yf(),SW=DW(wW,"WeakMap");s6.exports=SW});var q_=ce((vte,f6)=>{var DD=r6(),wD=L_(),SD=u6(),TD=l6(),CD=a6(),c6=Qp(),Qv=uD(),d6="[object Map]",TW="[object Object]",p6="[object Promise]",h6="[object Set]",v6="[object WeakMap]",m6="[object DataView]",CW=Qv(DD),xW=Qv(wD),AW=Qv(SD),RW=Qv(TD),OW=Qv(CD),Jp=c6;(DD&&Jp(new DD(new ArrayBuffer(1)))!=m6||wD&&Jp(new wD)!=d6||SD&&Jp(SD.resolve())!=p6||TD&&Jp(new TD)!=h6||CD&&Jp(new CD)!=v6)&&(Jp=function(i){var o=c6(i),f=o==TW?i.constructor:void 0,p=f?Qv(f):"";if(p)switch(p){case CW:return m6;case xW:return d6;case AW:return p6;case RW:return h6;case OW:return v6}return o});f6.exports=Jp});var g6=ce((mte,y6)=>{var kW=Object.prototype,MW=kW.hasOwnProperty;function NW(i){var o=i.length,f=new i.constructor(o);return o&&typeof i[0]=="string"&&MW.call(i,"index")&&(f.index=i.index,f.input=i.input),f}y6.exports=NW});var E6=ce((yte,_6)=>{var LW=Yf(),FW=LW.Uint8Array;_6.exports=FW});var H_=ce((gte,D6)=>{var w6=E6();function bW(i){var o=new i.constructor(i.byteLength);return new w6(o).set(new w6(i)),o}D6.exports=bW});var T6=ce((_te,S6)=>{var PW=H_();function IW(i,o){var f=o?PW(i.buffer):i.buffer;return new i.constructor(f,i.byteOffset,i.byteLength)}S6.exports=IW});var x6=ce((Ete,C6)=>{var BW=/\w*$/;function UW(i){var o=new i.constructor(i.source,BW.exec(i));return o.lastIndex=i.lastIndex,o}C6.exports=UW});var M6=ce((Dte,A6)=>{var R6=zv(),O6=R6?R6.prototype:void 0,k6=O6?O6.valueOf:void 0;function jW(i){return k6?Object(k6.call(i)):{}}A6.exports=jW});var L6=ce((wte,N6)=>{var zW=H_();function qW(i,o){var f=o?zW(i.buffer):i.buffer;return new i.constructor(f,i.byteOffset,i.length)}N6.exports=qW});var b6=ce((Ste,F6)=>{var HW=H_(),WW=T6(),VW=x6(),GW=M6(),YW=L6(),KW="[object Boolean]",XW="[object Date]",QW="[object Map]",JW="[object Number]",ZW="[object RegExp]",$W="[object Set]",eV="[object String]",tV="[object Symbol]",nV="[object ArrayBuffer]",rV="[object DataView]",iV="[object Float32Array]",uV="[object Float64Array]",oV="[object Int8Array]",lV="[object Int16Array]",sV="[object Int32Array]",aV="[object Uint8Array]",fV="[object Uint8ClampedArray]",cV="[object Uint16Array]",dV="[object Uint32Array]";function pV(i,o,f){var p=i.constructor;switch(o){case nV:return HW(i);case KW:case XW:return new p(+i);case rV:return WW(i,f);case iV:case uV:case oV:case lV:case sV:case aV:case fV:case cV:case dV:return YW(i,f);case QW:return new p;case JW:case eV:return new p(i);case ZW:return VW(i);case $W:return new p;case tV:return GW(i)}}F6.exports=pV});var B6=ce((Tte,P6)=>{var hV=qv(),I6=Object.create,vV=function(){function i(){}return function(o){if(!hV(o))return{};if(I6)return I6(o);i.prototype=o;var f=new i;return i.prototype=void 0,f}}();P6.exports=vV});var j6=ce((Cte,U6)=>{var mV=B6(),yV=z_(),gV=P_();function _V(i){return typeof i.constructor=="function"&&!gV(i)?mV(yV(i)):{}}U6.exports=_V});var q6=ce((xte,z6)=>{var EV=q_(),DV=ad(),wV="[object Map]";function SV(i){return DV(i)&&EV(i)==wV}z6.exports=SV});var G6=ce((Ate,H6)=>{var TV=q6(),CV=F_(),W6=b_(),V6=W6&&W6.isMap,xV=V6?CV(V6):TV;H6.exports=xV});var K6=ce((Rte,Y6)=>{var AV=q_(),RV=ad(),OV="[object Set]";function kV(i){return RV(i)&&AV(i)==OV}Y6.exports=kV});var Z6=ce((Ote,X6)=>{var MV=K6(),NV=F_(),Q6=b_(),J6=Q6&&Q6.isSet,LV=J6?NV(J6):MV;X6.exports=LV});var rx=ce((kte,$6)=>{var FV=PT(),bV=BT(),PV=aD(),IV=CC(),BV=NC(),UV=IC(),jV=UC(),zV=GC(),qV=JC(),HV=e6(),WV=ED(),VV=q_(),GV=g6(),YV=b6(),KV=j6(),XV=fd(),QV=cD(),JV=G6(),ZV=qv(),$V=Z6(),eG=I_(),tG=B_(),nG=1,rG=2,iG=4,ex="[object Arguments]",uG="[object Array]",oG="[object Boolean]",lG="[object Date]",sG="[object Error]",tx="[object Function]",aG="[object GeneratorFunction]",fG="[object Map]",cG="[object Number]",nx="[object Object]",dG="[object RegExp]",pG="[object Set]",hG="[object String]",vG="[object Symbol]",mG="[object WeakMap]",yG="[object ArrayBuffer]",gG="[object DataView]",_G="[object Float32Array]",EG="[object Float64Array]",DG="[object Int8Array]",wG="[object Int16Array]",SG="[object Int32Array]",TG="[object Uint8Array]",CG="[object Uint8ClampedArray]",xG="[object Uint16Array]",AG="[object Uint32Array]",Wu={};Wu[ex]=Wu[uG]=Wu[yG]=Wu[gG]=Wu[oG]=Wu[lG]=Wu[_G]=Wu[EG]=Wu[DG]=Wu[wG]=Wu[SG]=Wu[fG]=Wu[cG]=Wu[nx]=Wu[dG]=Wu[pG]=Wu[hG]=Wu[vG]=Wu[TG]=Wu[CG]=Wu[xG]=Wu[AG]=!0;Wu[sG]=Wu[tx]=Wu[mG]=!1;function W_(i,o,f,p,E,t){var k,L=o&nG,N=o&rG,C=o&iG;if(f&&(k=E?f(i,p,E,t):f(i)),k!==void 0)return k;if(!ZV(i))return i;var U=XV(i);if(U){if(k=GV(i),!L)return jV(i,k)}else{var q=VV(i),W=q==tx||q==aG;if(QV(i))return UV(i,L);if(q==nx||q==ex||W&&!E){if(k=N||W?{}:KV(i),!L)return N?qV(i,BV(k,i)):zV(i,IV(k,i))}else{if(!Wu[q])return E?i:{};k=YV(i,q,L)}}t||(t=new FV);var ne=t.get(i);if(ne)return ne;t.set(i,k),$V(i)?i.forEach(function(Se){k.add(W_(Se,o,f,Se,i,t))}):JV(i)&&i.forEach(function(Se,he){k.set(he,W_(Se,o,f,he,i,t))});var m=C?N?WV:HV:N?tG:eG,we=U?void 0:m(i);return bV(we||i,function(Se,he){we&&(he=Se,Se=i[he]),PV(k,he,W_(Se,o,f,he,i,t))}),k}$6.exports=W_});var V_=ce((Mte,ix)=>{var RG=Qp(),OG=ad(),kG="[object Symbol]";function MG(i){return typeof i=="symbol"||OG(i)&&RG(i)==kG}ix.exports=MG});var ox=ce((Nte,ux)=>{var NG=fd(),LG=V_(),FG=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,bG=/^\w*$/;function PG(i,o){if(NG(i))return!1;var f=typeof i;return f=="number"||f=="symbol"||f=="boolean"||i==null||LG(i)?!0:bG.test(i)||!FG.test(i)||o!=null&&i in Object(o)}ux.exports=PG});var ax=ce((Lte,lx)=>{var sx=oD(),IG="Expected a function";function xD(i,o){if(typeof i!="function"||o!=null&&typeof o!="function")throw new TypeError(IG);var f=function(){var p=arguments,E=o?o.apply(this,p):p[0],t=f.cache;if(t.has(E))return t.get(E);var k=i.apply(this,p);return f.cache=t.set(E,k)||t,k};return f.cache=new(xD.Cache||sx),f}xD.Cache=sx;lx.exports=xD});var cx=ce((Fte,fx)=>{var BG=ax(),UG=500;function jG(i){var o=BG(i,function(p){return f.size===UG&&f.clear(),p}),f=o.cache;return o}fx.exports=jG});var px=ce((bte,dx)=>{var zG=cx(),qG=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,HG=/\\(\\)?/g,WG=zG(function(i){var o=[];return i.charCodeAt(0)===46&&o.push(""),i.replace(qG,function(f,p,E,t){o.push(E?t.replace(HG,"$1"):p||f)}),o});dx.exports=WG});var _x=ce((Pte,hx)=>{var vx=zv(),VG=eD(),GG=fd(),YG=V_(),KG=1/0,mx=vx?vx.prototype:void 0,yx=mx?mx.toString:void 0;function gx(i){if(typeof i=="string")return i;if(GG(i))return VG(i,gx)+"";if(YG(i))return yx?yx.call(i):"";var o=i+"";return o=="0"&&1/i==-KG?"-0":o}hx.exports=gx});var Dx=ce((Ite,Ex)=>{var XG=_x();function QG(i){return i==null?"":XG(i)}Ex.exports=QG});var G_=ce((Bte,wx)=>{var JG=fd(),ZG=ox(),$G=px(),eY=Dx();function tY(i,o){return JG(i)?i:ZG(i,o)?[i]:$G(eY(i))}wx.exports=tY});var Tx=ce((Ute,Sx)=>{function nY(i){var o=i==null?0:i.length;return o?i[o-1]:void 0}Sx.exports=nY});var AD=ce((jte,Cx)=>{var rY=V_(),iY=1/0;function uY(i){if(typeof i=="string"||rY(i))return i;var o=i+"";return o=="0"&&1/i==-iY?"-0":o}Cx.exports=uY});var Ax=ce((zte,xx)=>{var oY=G_(),lY=AD();function sY(i,o){o=oY(o,i);for(var f=0,p=o.length;i!=null&&f{function aY(i,o,f){var p=-1,E=i.length;o<0&&(o=-o>E?0:E+o),f=f>E?E:f,f<0&&(f+=E),E=o>f?0:f-o>>>0,o>>>=0;for(var t=Array(E);++p{var fY=Ax(),cY=Ox();function dY(i,o){return o.length<2?i:fY(i,cY(o,0,-1))}kx.exports=dY});var Lx=ce((Wte,Nx)=>{var pY=G_(),hY=Tx(),vY=Mx(),mY=AD();function yY(i,o){return o=pY(o,i),i=vY(i,o),i==null||delete i[mY(hY(o))]}Nx.exports=yY});var Px=ce((Vte,Fx)=>{var gY=Qp(),_Y=z_(),EY=ad(),DY="[object Object]",wY=Function.prototype,SY=Object.prototype,bx=wY.toString,TY=SY.hasOwnProperty,CY=bx.call(Object);function xY(i){if(!EY(i)||gY(i)!=DY)return!1;var o=_Y(i);if(o===null)return!0;var f=TY.call(o,"constructor")&&o.constructor;return typeof f=="function"&&f instanceof f&&bx.call(f)==CY}Fx.exports=xY});var Bx=ce((Gte,Ix)=>{var AY=Px();function RY(i){return AY(i)?void 0:i}Ix.exports=RY});var qx=ce((Yte,Ux)=>{var jx=zv(),OY=fD(),kY=fd(),zx=jx?jx.isConcatSpreadable:void 0;function MY(i){return kY(i)||OY(i)||!!(zx&&i&&i[zx])}Ux.exports=MY});var Vx=ce((Kte,Hx)=>{var NY=j_(),LY=qx();function Wx(i,o,f,p,E){var t=-1,k=i.length;for(f||(f=LY),E||(E=[]);++t0&&f(L)?o>1?Wx(L,o-1,f,p,E):NY(E,L):p||(E[E.length]=L)}return E}Hx.exports=Wx});var Yx=ce((Xte,Gx)=>{var FY=Vx();function bY(i){var o=i==null?0:i.length;return o?FY(i,1):[]}Gx.exports=bY});var Xx=ce((Qte,Kx)=>{function PY(i,o,f){switch(f.length){case 0:return i.call(o);case 1:return i.call(o,f[0]);case 2:return i.call(o,f[0],f[1]);case 3:return i.call(o,f[0],f[1],f[2])}return i.apply(o,f)}Kx.exports=PY});var Zx=ce((Jte,Qx)=>{var IY=Xx(),Jx=Math.max;function BY(i,o,f){return o=Jx(o===void 0?i.length-1:o,0),function(){for(var p=arguments,E=-1,t=Jx(p.length-o,0),k=Array(t);++E{function UY(i){return function(){return i}}$x.exports=UY});var n5=ce(($te,t5)=>{function jY(i){return i}t5.exports=jY});var u5=ce((ene,r5)=>{var zY=e5(),i5=lD(),qY=n5(),HY=i5?function(i,o){return i5(i,"toString",{configurable:!0,enumerable:!1,value:zY(o),writable:!0})}:qY;r5.exports=HY});var l5=ce((tne,o5)=>{var WY=800,VY=16,GY=Date.now;function YY(i){var o=0,f=0;return function(){var p=GY(),E=VY-(p-f);if(f=p,E>0){if(++o>=WY)return arguments[0]}else o=0;return i.apply(void 0,arguments)}}o5.exports=YY});var a5=ce((nne,s5)=>{var KY=u5(),XY=l5(),QY=XY(KY);s5.exports=QY});var c5=ce((rne,f5)=>{var JY=Yx(),ZY=Zx(),$Y=a5();function eK(i){return $Y(ZY(i,void 0,JY),i+"")}f5.exports=eK});var p5=ce((ine,d5)=>{var tK=eD(),nK=rx(),rK=Lx(),iK=G_(),uK=Gv(),oK=Bx(),lK=c5(),sK=ED(),aK=1,fK=2,cK=4,dK=lK(function(i,o){var f={};if(i==null)return f;var p=!1;o=tK(o,function(t){return t=iK(t,i),p||(p=t.length>1),t}),uK(i,sK(i),f),p&&(f=nK(f,aK|fK|cK,oK));for(var E=o.length;E--;)rK(f,o[E]);return f});d5.exports=dK});var eg=ce((vne,y5)=>{"use strict";var g5=Object.getOwnPropertySymbols,_K=Object.prototype.hasOwnProperty,EK=Object.prototype.propertyIsEnumerable;function DK(i){if(i==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(i)}function wK(){try{if(!Object.assign)return!1;var i=new String("abc");if(i[5]="de",Object.getOwnPropertyNames(i)[0]==="5")return!1;for(var o={},f=0;f<10;f++)o["_"+String.fromCharCode(f)]=f;var p=Object.getOwnPropertyNames(o).map(function(t){return o[t]});if(p.join("")!=="0123456789")return!1;var E={};return"abcdefghijklmnopqrst".split("").forEach(function(t){E[t]=t}),Object.keys(Object.assign({},E)).join("")==="abcdefghijklmnopqrst"}catch(t){return!1}}y5.exports=wK()?Object.assign:function(i,o){for(var f,p=DK(i),E,t=1;t{"use strict";var LD=eg(),Kf=typeof Symbol=="function"&&Symbol.for,tg=Kf?Symbol.for("react.element"):60103,SK=Kf?Symbol.for("react.portal"):60106,TK=Kf?Symbol.for("react.fragment"):60107,CK=Kf?Symbol.for("react.strict_mode"):60108,xK=Kf?Symbol.for("react.profiler"):60114,AK=Kf?Symbol.for("react.provider"):60109,RK=Kf?Symbol.for("react.context"):60110,OK=Kf?Symbol.for("react.forward_ref"):60112,kK=Kf?Symbol.for("react.suspense"):60113,MK=Kf?Symbol.for("react.memo"):60115,NK=Kf?Symbol.for("react.lazy"):60116,_5=typeof Symbol=="function"&&Symbol.iterator;function ng(i){for(var o="https://reactjs.org/docs/error-decoder.html?invariant="+i,f=1;fJ_.length&&J_.push(i)}function BD(i,o,f,p){var E=typeof i;(E==="undefined"||E==="boolean")&&(i=null);var t=!1;if(i===null)t=!0;else switch(E){case"string":case"number":t=!0;break;case"object":switch(i.$$typeof){case tg:case SK:t=!0}}if(t)return f(p,i,o===""?"."+UD(i,0):o),1;if(t=0,o=o===""?".":o+":",Array.isArray(i))for(var k=0;k{"use strict";var BK="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";M5.exports=BK});var HD=ce((gne,L5)=>{"use strict";var qD=function(){};process.env.NODE_ENV!=="production"&&(F5=N5(),Z_={},b5=Function.call.bind(Object.prototype.hasOwnProperty),qD=function(i){var o="Warning: "+i;typeof console!="undefined"&&console.error(o);try{throw new Error(o)}catch(f){}});var F5,Z_,b5;function P5(i,o,f,p,E){if(process.env.NODE_ENV!=="production"){for(var t in i)if(b5(i,t)){var k;try{if(typeof i[t]!="function"){var L=Error((p||"React class")+": "+f+" type `"+t+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof i[t]+"`.");throw L.name="Invariant Violation",L}k=i[t](o,t,p,f,null,F5)}catch(C){k=C}if(k&&!(k instanceof Error)&&qD((p||"React class")+": type specification of "+f+" `"+t+"` is invalid; the type checker function must return `null` or an `Error` but returned a "+typeof k+". You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument)."),k instanceof Error&&!(k.message in Z_)){Z_[k.message]=!0;var N=E?E():"";qD("Failed "+f+" type: "+k.message+(N!=null?N:""))}}}}P5.resetWarningCache=function(){process.env.NODE_ENV!=="production"&&(Z_={})};L5.exports=P5});var I5=ce(pu=>{"use strict";process.env.NODE_ENV!=="production"&&function(){"use strict";var i=eg(),o=HD(),f="16.13.1",p=typeof Symbol=="function"&&Symbol.for,E=p?Symbol.for("react.element"):60103,t=p?Symbol.for("react.portal"):60106,k=p?Symbol.for("react.fragment"):60107,L=p?Symbol.for("react.strict_mode"):60108,N=p?Symbol.for("react.profiler"):60114,C=p?Symbol.for("react.provider"):60109,U=p?Symbol.for("react.context"):60110,q=p?Symbol.for("react.concurrent_mode"):60111,W=p?Symbol.for("react.forward_ref"):60112,ne=p?Symbol.for("react.suspense"):60113,m=p?Symbol.for("react.suspense_list"):60120,we=p?Symbol.for("react.memo"):60115,Se=p?Symbol.for("react.lazy"):60116,he=p?Symbol.for("react.block"):60121,ge=p?Symbol.for("react.fundamental"):60117,ze=p?Symbol.for("react.responder"):60118,pe=p?Symbol.for("react.scope"):60119,Oe=typeof Symbol=="function"&&Symbol.iterator,le="@@iterator";function Ue(X){if(X===null||typeof X!="object")return null;var _e=Oe&&X[Oe]||X[le];return typeof _e=="function"?_e:null}var Ge={current:null},rt={suspense:null},wt={current:null},xt=/^(.*)[\\\/]/;function $e(X,_e,Ne){var Me="";if(_e){var dt=_e.fileName,Hn=dt.replace(xt,"");if(/^index\./.test(Hn)){var Dn=dt.match(xt);if(Dn){var or=Dn[1];if(or){var mi=or.replace(xt,"");Hn=mi+"/"+Hn}}}Me=" (at "+Hn+":"+_e.lineNumber+")"}else Ne&&(Me=" (created by "+Ne+")");return` - in `+(X||"Unknown")+Me}var ft=1;function Ke(X){return X._status===ft?X._result:null}function jt(X,_e,Ne){var Me=_e.displayName||_e.name||"";return X.displayName||(Me!==""?Ne+"("+Me+")":Ne)}function $t(X){if(X==null)return null;if(typeof X.tag=="number"&&ct("Received an unexpected object in getComponentName(). This is likely a bug in React. Please file an issue."),typeof X=="function")return X.displayName||X.name||null;if(typeof X=="string")return X;switch(X){case k:return"Fragment";case t:return"Portal";case N:return"Profiler";case L:return"StrictMode";case ne:return"Suspense";case m:return"SuspenseList"}if(typeof X=="object")switch(X.$$typeof){case U:return"Context.Consumer";case C:return"Context.Provider";case W:return jt(X,X.render,"ForwardRef");case we:return $t(X.type);case he:return $t(X.render);case Se:{var _e=X,Ne=Ke(_e);if(Ne)return $t(Ne);break}}return null}var at={},Q=null;function ae(X){Q=X}at.getCurrentStack=null,at.getStackAddendum=function(){var X="";if(Q){var _e=$t(Q.type),Ne=Q._owner;X+=$e(_e,Q._source,Ne&&$t(Ne.type))}var Me=at.getCurrentStack;return Me&&(X+=Me()||""),X};var Ce={current:!1},ue={ReactCurrentDispatcher:Ge,ReactCurrentBatchConfig:rt,ReactCurrentOwner:wt,IsSomeRendererActing:Ce,assign:i};i(ue,{ReactDebugCurrentFrame:at,ReactComponentTreeHook:{}});function je(X){{for(var _e=arguments.length,Ne=new Array(_e>1?_e-1:0),Me=1;Me<_e;Me++)Ne[Me-1]=arguments[Me];At("warn",X,Ne)}}function ct(X){{for(var _e=arguments.length,Ne=new Array(_e>1?_e-1:0),Me=1;Me<_e;Me++)Ne[Me-1]=arguments[Me];At("error",X,Ne)}}function At(X,_e,Ne){{var Me=Ne.length>0&&typeof Ne[Ne.length-1]=="string"&&Ne[Ne.length-1].indexOf(` - in`)===0;if(!Me){var dt=ue.ReactDebugCurrentFrame,Hn=dt.getStackAddendum();Hn!==""&&(_e+="%s",Ne=Ne.concat([Hn]))}var Dn=Ne.map(function(Su){return""+Su});Dn.unshift("Warning: "+_e),Function.prototype.apply.call(console[X],console,Dn);try{var or=0,mi="Warning: "+_e.replace(/%s/g,function(){return Ne[or++]});throw new Error(mi)}catch(Su){}}}var en={};function ln(X,_e){{var Ne=X.constructor,Me=Ne&&(Ne.displayName||Ne.name)||"ReactClass",dt=Me+"."+_e;if(en[dt])return;ct("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",_e,Me),en[dt]=!0}}var An={isMounted:function(X){return!1},enqueueForceUpdate:function(X,_e,Ne){ln(X,"forceUpdate")},enqueueReplaceState:function(X,_e,Ne,Me){ln(X,"replaceState")},enqueueSetState:function(X,_e,Ne,Me){ln(X,"setState")}},nr={};Object.freeze(nr);function un(X,_e,Ne){this.props=X,this.context=_e,this.refs=nr,this.updater=Ne||An}un.prototype.isReactComponent={},un.prototype.setState=function(X,_e){if(!(typeof X=="object"||typeof X=="function"||X==null))throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,X,_e,"setState")},un.prototype.forceUpdate=function(X){this.updater.enqueueForceUpdate(this,X,"forceUpdate")};{var Wt={isMounted:["isMounted","Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."],replaceState:["replaceState","Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."]},vr=function(X,_e){Object.defineProperty(un.prototype,X,{get:function(){je("%s(...) is deprecated in plain JavaScript React classes. %s",_e[0],_e[1])}})};for(var w in Wt)Wt.hasOwnProperty(w)&&vr(w,Wt[w])}function Ut(){}Ut.prototype=un.prototype;function Vn(X,_e,Ne){this.props=X,this.context=_e,this.refs=nr,this.updater=Ne||An}var fr=Vn.prototype=new Ut;fr.constructor=Vn,i(fr,un.prototype),fr.isPureReactComponent=!0;function Fr(){var X={current:null};return Object.seal(X),X}var ur=Object.prototype.hasOwnProperty,br={key:!0,ref:!0,__self:!0,__source:!0},Kt,vu,a0;a0={};function So(X){if(ur.call(X,"ref")){var _e=Object.getOwnPropertyDescriptor(X,"ref").get;if(_e&&_e.isReactWarning)return!1}return X.ref!==void 0}function Go(X){if(ur.call(X,"key")){var _e=Object.getOwnPropertyDescriptor(X,"key").get;if(_e&&_e.isReactWarning)return!1}return X.key!==void 0}function Os(X,_e){var Ne=function(){Kt||(Kt=!0,ct("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://fb.me/react-special-props)",_e))};Ne.isReactWarning=!0,Object.defineProperty(X,"key",{get:Ne,configurable:!0})}function Yo(X,_e){var Ne=function(){vu||(vu=!0,ct("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://fb.me/react-special-props)",_e))};Ne.isReactWarning=!0,Object.defineProperty(X,"ref",{get:Ne,configurable:!0})}function Ko(X){if(typeof X.ref=="string"&&wt.current&&X.__self&&wt.current.stateNode!==X.__self){var _e=$t(wt.current.type);a0[_e]||(ct('Component "%s" contains the string ref "%s". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://fb.me/react-strict-mode-string-ref',$t(wt.current.type),X.ref),a0[_e]=!0)}}var qt=function(X,_e,Ne,Me,dt,Hn,Dn){var or={$$typeof:E,type:X,key:_e,ref:Ne,props:Dn,_owner:Hn};return or._store={},Object.defineProperty(or._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(or,"_self",{configurable:!1,enumerable:!1,writable:!1,value:Me}),Object.defineProperty(or,"_source",{configurable:!1,enumerable:!1,writable:!1,value:dt}),Object.freeze&&(Object.freeze(or.props),Object.freeze(or)),or};function _i(X,_e,Ne){var Me,dt={},Hn=null,Dn=null,or=null,mi=null;if(_e!=null){So(_e)&&(Dn=_e.ref,Ko(_e)),Go(_e)&&(Hn=""+_e.key),or=_e.__self===void 0?null:_e.__self,mi=_e.__source===void 0?null:_e.__source;for(Me in _e)ur.call(_e,Me)&&!br.hasOwnProperty(Me)&&(dt[Me]=_e[Me])}var Su=arguments.length-2;if(Su===1)dt.children=Ne;else if(Su>1){for(var bu=Array(Su),Pu=0;Pu1){for(var mu=Array(Pu),yi=0;yi is not supported and will be removed in a future major release. Did you mean to render instead?")),Ne.Provider},set:function(Dn){Ne.Provider=Dn}},_currentValue:{get:function(){return Ne._currentValue},set:function(Dn){Ne._currentValue=Dn}},_currentValue2:{get:function(){return Ne._currentValue2},set:function(Dn){Ne._currentValue2=Dn}},_threadCount:{get:function(){return Ne._threadCount},set:function(Dn){Ne._threadCount=Dn}},Consumer:{get:function(){return Me||(Me=!0,ct("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?")),Ne.Consumer}}}),Ne.Consumer=Hn}return Ne._currentRenderer=null,Ne._currentRenderer2=null,Ne}function Ht(X){var _e={$$typeof:Se,_ctor:X,_status:-1,_result:null};{var Ne,Me;Object.defineProperties(_e,{defaultProps:{configurable:!0,get:function(){return Ne},set:function(dt){ct("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),Ne=dt,Object.defineProperty(_e,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return Me},set:function(dt){ct("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),Me=dt,Object.defineProperty(_e,"propTypes",{enumerable:!0})}}})}return _e}function Du(X){return X!=null&&X.$$typeof===we?ct("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof X!="function"?ct("forwardRef requires a render function but was given %s.",X===null?"null":typeof X):X.length!==0&&X.length!==2&&ct("forwardRef render functions accept exactly two parameters: props and ref. %s",X.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),X!=null&&(X.defaultProps!=null||X.propTypes!=null)&&ct("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?"),{$$typeof:W,render:X}}function Yi(X){return typeof X=="string"||typeof X=="function"||X===k||X===q||X===N||X===L||X===ne||X===m||typeof X=="object"&&X!==null&&(X.$$typeof===Se||X.$$typeof===we||X.$$typeof===C||X.$$typeof===U||X.$$typeof===W||X.$$typeof===ge||X.$$typeof===ze||X.$$typeof===pe||X.$$typeof===he)}function Y0(X,_e){return Yi(X)||ct("memo: The first argument must be a component. Instead received: %s",X===null?"null":typeof X),{$$typeof:we,type:X,compare:_e===void 0?null:_e}}function Ui(){var X=Ge.current;if(X===null)throw Error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: -1. You might have mismatching versions of React and the renderer (such as React DOM) -2. You might be breaking the Rules of Hooks -3. You might have more than one copy of React in the same app -See https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.`);return X}function Wl(X,_e){var Ne=Ui();if(_e!==void 0&&ct("useContext() second argument is reserved for future use in React. Passing it is not supported. You passed: %s.%s",_e,typeof _e=="number"&&Array.isArray(arguments[2])?` - -Did you call array.map(useContext)? Calling Hooks inside a loop is not supported. Learn more at https://fb.me/rules-of-hooks`:""),X._context!==void 0){var Me=X._context;Me.Consumer===X?ct("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):Me.Provider===X&&ct("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return Ne.useContext(X,_e)}function xo(X){var _e=Ui();return _e.useState(X)}function ni(X,_e,Ne){var Me=Ui();return Me.useReducer(X,_e,Ne)}function oo(X){var _e=Ui();return _e.useRef(X)}function Vl(X,_e){var Ne=Ui();return Ne.useEffect(X,_e)}function Ao(X,_e){var Ne=Ui();return Ne.useLayoutEffect(X,_e)}function Ms(X,_e){var Ne=Ui();return Ne.useCallback(X,_e)}function Xn(X,_e){var Ne=Ui();return Ne.useMemo(X,_e)}function Qo(X,_e,Ne){var Me=Ui();return Me.useImperativeHandle(X,_e,Ne)}function lo(X,_e){{var Ne=Ui();return Ne.useDebugValue(X,_e)}}var b0;b0=!1;function yl(){if(wt.current){var X=$t(wt.current.type);if(X)return` - -Check the render method of \``+X+"`."}return""}function Ro(X){if(X!==void 0){var _e=X.fileName.replace(/^.*[\\\/]/,""),Ne=X.lineNumber;return` - -Check your code at `+_e+":"+Ne+"."}return""}function Et(X){return X!=null?Ro(X.__source):""}var Pt={};function Bn(X){var _e=yl();if(!_e){var Ne=typeof X=="string"?X:X.displayName||X.name;Ne&&(_e=` - -Check the top-level render call using <`+Ne+">.")}return _e}function Ir(X,_e){if(!(!X._store||X._store.validated||X.key!=null)){X._store.validated=!0;var Ne=Bn(_e);if(!Pt[Ne]){Pt[Ne]=!0;var Me="";X&&X._owner&&X._owner!==wt.current&&(Me=" It was passed a child from "+$t(X._owner.type)+"."),ae(X),ct('Each child in a list should have a unique "key" prop.%s%s See https://fb.me/react-warning-keys for more information.',Ne,Me),ae(null)}}}function ji(X,_e){if(typeof X=="object"){if(Array.isArray(X))for(var Ne=0;Ne",dt=" Did you accidentally export a JSX literal instead of a component?"):Dn=typeof X,ct("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",Dn,dt)}var or=_i.apply(this,arguments);if(or==null)return or;if(Me)for(var mi=2;mi{"use strict";process.env.NODE_ENV==="production"?WD.exports=k5():WD.exports=I5()});var B5=ce((nm,rg)=>{(function(){var i,o="4.17.21",f=200,p="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",E="Expected a function",t="Invalid `variable` option passed into `_.template`",k="__lodash_hash_undefined__",L=500,N="__lodash_placeholder__",C=1,U=2,q=4,W=1,ne=2,m=1,we=2,Se=4,he=8,ge=16,ze=32,pe=64,Oe=128,le=256,Ue=512,Ge=30,rt="...",wt=800,xt=16,$e=1,ft=2,Ke=3,jt=1/0,$t=9007199254740991,at=17976931348623157e292,Q=0/0,ae=4294967295,Ce=ae-1,ue=ae>>>1,je=[["ary",Oe],["bind",m],["bindKey",we],["curry",he],["curryRight",ge],["flip",Ue],["partial",ze],["partialRight",pe],["rearg",le]],ct="[object Arguments]",At="[object Array]",en="[object AsyncFunction]",ln="[object Boolean]",An="[object Date]",nr="[object DOMException]",un="[object Error]",Wt="[object Function]",vr="[object GeneratorFunction]",w="[object Map]",Ut="[object Number]",Vn="[object Null]",fr="[object Object]",Fr="[object Promise]",ur="[object Proxy]",br="[object RegExp]",Kt="[object Set]",vu="[object String]",a0="[object Symbol]",So="[object Undefined]",Go="[object WeakMap]",Os="[object WeakSet]",Yo="[object ArrayBuffer]",Ko="[object DataView]",qt="[object Float32Array]",_i="[object Float64Array]",eu="[object Int8Array]",ai="[object Int16Array]",mr="[object Int32Array]",Xo="[object Uint8Array]",W0="[object Uint8ClampedArray]",Lu="[object Uint16Array]",V0="[object Uint32Array]",Hr=/\b__p \+= '';/g,To=/\b(__p \+=) '' \+/g,Co=/(__e\(.*?\)|\b__t\)) \+\n'';/g,L0=/&(?:amp|lt|gt|quot|#39);/g,tu=/[&<>"']/g,Si=RegExp(L0.source),ks=RegExp(tu.source),Hl=/<%-([\s\S]+?)%>/g,F0=/<%([\s\S]+?)%>/g,f0=/<%=([\s\S]+?)%>/g,Pr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ei=/^\w*$/,G0=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,fi=/[\\^$.*+?()[\]{}|]/g,Zt=RegExp(fi.source),Ln=/^\s+/,Di=/\s/,ci=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ht=/\{\n\/\* \[wrapped with (.+)\] \*/,Du=/,? & /,Yi=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Y0=/[()=,{}\[\]\/\s]/,Ui=/\\(\\)?/g,Wl=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,xo=/\w*$/,ni=/^[-+]0x[0-9a-f]+$/i,oo=/^0b[01]+$/i,Vl=/^\[object .+?Constructor\]$/,Ao=/^0o[0-7]+$/i,Ms=/^(?:0|[1-9]\d*)$/,Xn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Qo=/($^)/,lo=/['\n\r\u2028\u2029\\]/g,b0="\\ud800-\\udfff",yl="\\u0300-\\u036f",Ro="\\ufe20-\\ufe2f",Et="\\u20d0-\\u20ff",Pt=yl+Ro+Et,Bn="\\u2700-\\u27bf",Ir="a-z\\xdf-\\xf6\\xf8-\\xff",ji="\\xac\\xb1\\xd7\\xf7",Wr="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",wu="\\u2000-\\u206f",c0=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Ti="A-Z\\xc0-\\xd6\\xd8-\\xde",d0="\\ufe0e\\ufe0f",as=ji+Wr+wu+c0,St="['\u2019]",so="["+b0+"]",Jo="["+as+"]",Gl="["+Pt+"]",Fu="\\d+",fs="["+Bn+"]",P0="["+Ir+"]",X="[^"+b0+as+Fu+Bn+Ir+Ti+"]",_e="\\ud83c[\\udffb-\\udfff]",Ne="(?:"+Gl+"|"+_e+")",Me="[^"+b0+"]",dt="(?:\\ud83c[\\udde6-\\uddff]){2}",Hn="[\\ud800-\\udbff][\\udc00-\\udfff]",Dn="["+Ti+"]",or="\\u200d",mi="(?:"+P0+"|"+X+")",Su="(?:"+Dn+"|"+X+")",bu="(?:"+St+"(?:d|ll|m|re|s|t|ve))?",Pu="(?:"+St+"(?:D|LL|M|RE|S|T|VE))?",mu=Ne+"?",yi="["+d0+"]?",Oo="(?:"+or+"(?:"+[Me,dt,Hn].join("|")+")"+yi+mu+")*",Tu="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ao="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Iu=yi+mu+Oo,Oa="(?:"+[fs,dt,Hn].join("|")+")"+Iu,p0="(?:"+[Me+Gl+"?",Gl,dt,Hn,so].join("|")+")",Zs=RegExp(St,"g"),K0=RegExp(Gl,"g"),$s=RegExp(_e+"(?="+_e+")|"+p0+Iu,"g"),ka=RegExp([Dn+"?"+P0+"+"+bu+"(?="+[Jo,Dn,"$"].join("|")+")",Su+"+"+Pu+"(?="+[Jo,Dn+mi,"$"].join("|")+")",Dn+"?"+mi+"+"+bu,Dn+"+"+Pu,ao,Tu,Fu,Oa].join("|"),"g"),cs=RegExp("["+or+b0+Pt+d0+"]"),w0=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Gn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],ic=-1,ri={};ri[qt]=ri[_i]=ri[eu]=ri[ai]=ri[mr]=ri[Xo]=ri[W0]=ri[Lu]=ri[V0]=!0,ri[ct]=ri[At]=ri[Yo]=ri[ln]=ri[Ko]=ri[An]=ri[un]=ri[Wt]=ri[w]=ri[Ut]=ri[fr]=ri[br]=ri[Kt]=ri[vu]=ri[Go]=!1;var Gr={};Gr[ct]=Gr[At]=Gr[Yo]=Gr[Ko]=Gr[ln]=Gr[An]=Gr[qt]=Gr[_i]=Gr[eu]=Gr[ai]=Gr[mr]=Gr[w]=Gr[Ut]=Gr[fr]=Gr[br]=Gr[Kt]=Gr[vu]=Gr[a0]=Gr[Xo]=Gr[W0]=Gr[Lu]=Gr[V0]=!0,Gr[un]=Gr[Wt]=Gr[Go]=!1;var Yl={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},ea={"&":"&","<":"<",">":">",'"':""","'":"'"},lf={"&":"&","<":"<",">":">",""":'"',"'":"'"},Ns={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ma=parseFloat,Ls=parseInt,h0=typeof global=="object"&&global&&global.Object===Object&&global,Fs=typeof self=="object"&&self&&self.Object===Object&&self,Ni=h0||Fs||Function("return this")(),B=typeof nm=="object"&&nm&&!nm.nodeType&&nm,z=B&&typeof rg=="object"&&rg&&!rg.nodeType&&rg,G=z&&z.exports===B,$=G&&h0.process,De=function(){try{var Te=z&&z.require&&z.require("util").types;return Te||$&&$.binding&&$.binding("util")}catch(et){}}(),me=De&&De.isArrayBuffer,xe=De&&De.isDate,Z=De&&De.isMap,ke=De&&De.isRegExp,Xe=De&&De.isSet,ht=De&&De.isTypedArray;function ie(Te,et,Ve){switch(Ve.length){case 0:return Te.call(et);case 1:return Te.call(et,Ve[0]);case 2:return Te.call(et,Ve[0],Ve[1]);case 3:return Te.call(et,Ve[0],Ve[1],Ve[2])}return Te.apply(et,Ve)}function qe(Te,et,Ve,Gt){for(var Yt=-1,sr=Te==null?0:Te.length;++Yt-1}function tn(Te,et,Ve){for(var Gt=-1,Yt=Te==null?0:Te.length;++Gt-1;);return Ve}function gl(Te,et){for(var Ve=Te.length;Ve--&&_t(et,Te[Ve],0)>-1;);return Ve}function af(Te,et){for(var Ve=Te.length,Gt=0;Ve--;)Te[Ve]===et&&++Gt;return Gt}var Mo=Yn(Yl),ds=Yn(ea);function bs(Te){return"\\"+Ns[Te]}function No(Te,et){return Te==null?i:Te[et]}function Lo(Te){return cs.test(Te)}function ps(Te){return w0.test(Te)}function Vu(Te){for(var et,Ve=[];!(et=Te.next()).done;)Ve.push(et.value);return Ve}function yu(Te){var et=-1,Ve=Array(Te.size);return Te.forEach(function(Gt,Yt){Ve[++et]=[Yt,Gt]}),Ve}function pi(Te,et){return function(Ve){return Te(et(Ve))}}function T0(Te,et){for(var Ve=-1,Gt=Te.length,Yt=0,sr=[];++Ve-1}function ia(d,v){var x=this.__data__,b=Ql(x,d);return b<0?(++this.size,x.push([d,v])):x[b][1]=v,this}to.prototype.clear=Na,to.prototype.delete=pf,to.prototype.get=uc,to.prototype.has=ms,to.prototype.set=ia;function B0(d){var v=-1,x=d==null?0:d.length;for(this.clear();++v=v?d:v)),d}function U0(d,v,x,b,H,ee){var de,ye=v&C,be=v&U,gt=v&q;if(x&&(de=H?x(d,b,H,ee):x(d)),de!==i)return de;if(!ku(d))return d;var Dt=Jn(d);if(Dt){if(de=Es(d),!ye)return Ji(d,de)}else{var Rt=Ou(d),rn=Rt==Wt||Rt==vr;if(Gs(d))return fc(d,ye);if(Rt==fr||Rt==ct||rn&&!H){if(de=be||rn?{}:vc(d),!ye)return be?Jl(d,tl(de,d)):t0(d,hf(de,d))}else{if(!Gr[Rt])return H?d:{};de=Dh(d,Rt,ye)}}ee||(ee=new el);var Rn=ee.get(d);if(Rn)return Rn;ee.set(d,de),L2(d)?d.forEach(function(ir){de.add(U0(ir,v,x,ir,d,ee))}):gp(d)&&d.forEach(function(ir,Zr){de.set(Zr,U0(ir,v,x,Zr,d,ee))});var $n=gt?be?rr:$c:be?fn:M0,Nr=Dt?i:$n(d);return tt(Nr||d,function(ir,Zr){Nr&&(Zr=ir,ir=d[Zr]),gs(de,Zr,U0(ir,v,x,Zr,d,ee))}),de}function vf(d){var v=M0(d);return function(x){return jc(x,d,v)}}function jc(d,v,x){var b=x.length;if(d==null)return!b;for(d=wn(d);b--;){var H=x[b],ee=v[H],de=d[H];if(de===i&&!(H in d)||!ee(de))return!1}return!0}function lc(d,v,x){if(typeof d!="function")throw new Kr(E);return Wa(function(){d.apply(i,x)},v)}function Sl(d,v,x,b){var H=-1,ee=on,de=!0,ye=d.length,be=[],gt=v.length;if(!ye)return be;x&&(v=Lt(v,di(x))),b?(ee=tn,de=!1):v.length>=f&&(ee=Zo,de=!1,v=new ho(v));e:for(;++HH?0:H+x),b=b===i||b>H?H:Cr(b),b<0&&(b+=H),b=x>b?0:Ep(b);x0&&x(ye)?v>1?bi(ye,v-1,x,b,H):gn(H,ye):b||(H[H.length]=ye)}return H}var g=dc(),y=dc(!0);function A(d,v){return d&&g(d,v,M0)}function F(d,v){return d&&y(d,v,M0)}function I(d,v){return bt(v,function(x){return Ea(d[x])})}function J(d,v){v=Us(v,d);for(var x=0,b=v.length;d!=null&&xv}function Mt(d,v){return d!=null&&ei.call(d,v)}function Er(d,v){return d!=null&&v in wn(d)}function $u(d,v,x){return d>=Wn(v,x)&&d=120&&Dt.length>=120)?new ho(de&&Dt):i}Dt=d[0];var Rt=-1,rn=ye[0];e:for(;++Rt-1;)ye!==d&&R0.call(ye,be,1),R0.call(d,be,1);return d}function u2(d,v){for(var x=d?v.length:0,b=x-1;x--;){var H=v[x];if(x==b||H!==ee){var ee=H;go(H)?R0.call(d,H,1):Cd(d,H)}}return d}function o2(d,v){return d+vs(y0()*(v-d+1))}function wd(d,v,x,b){for(var H=-1,ee=Xr(Ku((v-d)/(x||1)),0),de=Ve(ee);ee--;)de[b?ee:++H]=d,d+=x;return de}function Hc(d,v){var x="";if(!d||v<1||v>$t)return x;do v%2&&(x+=d),v=vs(v/2),v&&(d+=d);while(v);return x}function Mr(d,v){return r1(Nd(d,v,r0),d+"")}function l2(d){return ba(Ac(d))}function s2(d,v){var x=Ac(d);return yc(x,Zu(v,0,x.length))}function ja(d,v,x,b){if(!ku(d))return d;v=Us(v,d);for(var H=-1,ee=v.length,de=ee-1,ye=d;ye!=null&&++HH?0:H+v),x=x>H?H:x,x<0&&(x+=H),H=v>x?0:x-v>>>0,v>>>=0;for(var ee=Ve(H);++b>>1,de=d[ee];de!==null&&!Nl(de)&&(x?de<=v:de=f){var gt=v?null:mm(d);if(gt)return Q0(gt);de=!1,H=Zo,be=new ho}else be=v?[]:ye;e:for(;++b=b?d:rl(d,v,x)}var Kc=hs||function(d){return Ni.clearTimeout(d)};function fc(d,v){if(v)return d.slice();var x=d.length,b=Fi?Fi(x):new d.constructor(x);return d.copy(b),b}function cc(d){var v=new d.constructor(d.byteLength);return new A0(v).set(new A0(d)),v}function f2(d,v){var x=v?cc(d.buffer):d.buffer;return new d.constructor(x,d.byteOffset,d.byteLength)}function yh(d){var v=new d.constructor(d.source,xo.exec(d));return v.lastIndex=d.lastIndex,v}function gf(d){return Sr?wn(Sr.call(d)):{}}function Xc(d,v){var x=v?cc(d.buffer):d.buffer;return new d.constructor(x,d.byteOffset,d.length)}function gh(d,v){if(d!==v){var x=d!==i,b=d===null,H=d===d,ee=Nl(d),de=v!==i,ye=v===null,be=v===v,gt=Nl(v);if(!ye&&!gt&&!ee&&d>v||ee&&de&&be&&!ye&&!gt||b&&de&&be||!x&&be||!H)return 1;if(!b&&!ee&&!gt&&d=ye)return be;var gt=x[b];return be*(gt=="desc"?-1:1)}}return d.index-v.index}function js(d,v,x,b){for(var H=-1,ee=d.length,de=x.length,ye=-1,be=v.length,gt=Xr(ee-de,0),Dt=Ve(be+gt),Rt=!b;++ye1?x[H-1]:i,de=H>2?x[2]:i;for(ee=d.length>3&&typeof ee=="function"?(H--,ee):i,de&&io(x[0],x[1],de)&&(ee=H<3?i:ee,H=1),v=wn(v);++b-1?H[ee?v[de]:de]:i}}function Jc(d){return ol(function(v){var x=v.length,b=x,H=Ur.prototype.thru;for(d&&v.reverse();b--;){var ee=v[b];if(typeof ee!="function")throw new Kr(E);if(H&&!de&&Bo(ee)=="wrapper")var de=new Ur([],!0)}for(b=de?b:x;++b1&&ui.reverse(),Dt&&beye))return!1;var gt=ee.get(d),Dt=ee.get(v);if(gt&&Dt)return gt==v&&Dt==d;var Rt=-1,rn=!0,Rn=x&ne?new ho:i;for(ee.set(d,v),ee.set(v,d);++Rt1?"& ":"")+v[b],v=v.join(x>2?", ":" "),d.replace(ci,`{ -/* [wrapped with `+v+`] */ -`)}function $l(d){return Jn(d)||sl(d)||!!(co&&d&&d[co])}function go(d,v){var x=typeof d;return v=v==null?$t:v,!!v&&(x=="number"||x!="symbol"&&Ms.test(d))&&d>-1&&d%1==0&&d0){if(++v>=wt)return arguments[0]}else v=0;return d.apply(i,arguments)}}function yc(d,v){var x=-1,b=d.length,H=b-1;for(v=v===i?b:v;++x1?d[v-1]:i;return x=typeof x=="function"?(d.pop(),x):i,E2(d,x)});function Bh(d){var v=Y(d);return v.__chain__=!0,v}function Uh(d,v){return v(d),d}function h1(d,v){return v(d)}var Qd=ol(function(d){var v=d.length,x=v?d[0]:0,b=this.__wrapped__,H=function(ee){return Ia(ee,d)};return v>1||this.__actions__.length||!(b instanceof lt)||!go(x)?this.thru(H):(b=b.slice(x,+x+(v?1:0)),b.__actions__.push({func:h1,args:[H],thisArg:i}),new Ur(b,this.__chain__).thru(function(ee){return v&&!ee.length&&ee.push(i),ee}))});function jh(){return Bh(this)}function Jd(){return new Ur(this.value(),this.__chain__)}function zh(){this.__values__===i&&(this.__values__=lv(this.value()));var d=this.__index__>=this.__values__.length,v=d?i:this.__values__[this.__index__++];return{done:d,value:v}}function Cm(){return this}function xm(d){for(var v,x=this;x instanceof Jr;){var b=Fd(x);b.__index__=0,b.__values__=i,v?H.__wrapped__=b:v=b;var H=b;x=x.__wrapped__}return H.__wrapped__=d,v}function Of(){var d=this.__wrapped__;if(d instanceof lt){var v=d;return this.__actions__.length&&(v=new lt(this)),v=v.reverse(),v.__actions__.push({func:h1,args:[Hd],thisArg:i}),new Ur(v,this.__chain__)}return this.thru(Hd)}function kf(){return mh(this.__wrapped__,this.__actions__)}var D2=za(function(d,v,x){ei.call(d,x)?++d[x]:ju(d,x,1)});function Am(d,v,x){var b=Jn(d)?kt:n2;return x&&io(d,v,x)&&(v=i),b(d,zn(v,3))}function Zd(d,v){var x=Jn(d)?bt:zc;return x(d,zn(v,3))}var w2=xl(Bd),$d=xl(u1);function qh(d,v){return bi(v1(d,v),1)}function ep(d,v){return bi(v1(d,v),jt)}function Hh(d,v,x){return x=x===i?1:Cr(x),bi(v1(d,v),x)}function Wh(d,v){var x=Jn(d)?tt:_s;return x(d,zn(v,3))}function tp(d,v){var x=Jn(d)?Tt:oa;return x(d,zn(v,3))}var Rm=za(function(d,v,x){ei.call(d,x)?d[x].push(v):ju(d,x,[v])});function Om(d,v,x,b){d=al(d)?d:Ac(d),x=x&&!b?Cr(x):0;var H=d.length;return x<0&&(x=Xr(H+x,0)),_1(d)?x<=H&&d.indexOf(v,x)>-1:!!H&&_t(d,v,x)>-1}var km=Mr(function(d,v,x){var b=-1,H=typeof v=="function",ee=al(d)?Ve(d.length):[];return _s(d,function(de){ee[++b]=H?ie(v,de,x):Tl(de,v,x)}),ee}),Vh=za(function(d,v,x){ju(d,x,v)});function v1(d,v){var x=Jn(d)?Lt:Ed;return x(d,zn(v,3))}function Mm(d,v,x,b){return d==null?[]:(Jn(v)||(v=v==null?[]:[v]),x=b?i:x,Jn(x)||(x=x==null?[]:[x]),vo(d,v,x))}var np=za(function(d,v,x){d[x?0:1].push(v)},function(){return[[],[]]});function rp(d,v,x){var b=Jn(d)?lr:yr,H=arguments.length<3;return b(d,zn(v,4),x,H,_s)}function Nm(d,v,x){var b=Jn(d)?Qn:yr,H=arguments.length<3;return b(d,zn(v,4),x,H,oa)}function Lm(d,v){var x=Jn(d)?bt:zc;return x(d,C2(zn(v,3)))}function Gh(d){var v=Jn(d)?ba:l2;return v(d)}function Fm(d,v,x){(x?io(d,v,x):v===i)?v=1:v=Cr(v);var b=Jn(d)?Pa:s2;return b(d,v)}function bm(d){var v=Jn(d)?ua:nl;return v(d)}function ip(d){if(d==null)return 0;if(al(d))return _1(d)?Ki(d):d.length;var v=Ou(d);return v==w||v==Kt?d.size:Ba(d).length}function up(d,v,x){var b=Jn(d)?_r:hh;return x&&io(d,v,x)&&(v=i),b(d,zn(v,3))}var ya=Mr(function(d,v){if(d==null)return[];var x=v.length;return x>1&&io(d,v[0],v[1])?v=[]:x>2&&io(v[0],v[1],v[2])&&(v=[v[0]]),vo(d,bi(v,1),[])}),m1=ra||function(){return Ni.Date.now()};function op(d,v){if(typeof v!="function")throw new Kr(E);return d=Cr(d),function(){if(--d<1)return v.apply(this,arguments)}}function Yh(d,v,x){return v=x?i:v,v=d&&v==null?d.length:v,dn(d,Oe,i,i,i,i,v)}function S2(d,v){var x;if(typeof v!="function")throw new Kr(E);return d=Cr(d),function(){return--d>0&&(x=v.apply(this,arguments)),d<=1&&(v=i),x}}var y1=Mr(function(d,v,x){var b=m;if(x.length){var H=T0(x,dr(y1));b|=ze}return dn(d,b,v,x,H)}),Kh=Mr(function(d,v,x){var b=m|we;if(x.length){var H=T0(x,dr(Kh));b|=ze}return dn(v,b,d,x,H)});function lp(d,v,x){v=x?i:v;var b=dn(d,he,i,i,i,i,i,v);return b.placeholder=lp.placeholder,b}function Xh(d,v,x){v=x?i:v;var b=dn(d,ge,i,i,i,i,i,v);return b.placeholder=Xh.placeholder,b}function sp(d,v,x){var b,H,ee,de,ye,be,gt=0,Dt=!1,Rt=!1,rn=!0;if(typeof d!="function")throw new Kr(E);v=fl(v)||0,ku(x)&&(Dt=!!x.leading,Rt="maxWait"in x,ee=Rt?Xr(fl(x.maxWait)||0,v):ee,rn="trailing"in x?!!x.trailing:rn);function Rn(i0){var Ts=b,wo=H;return b=H=i,gt=i0,de=d.apply(wo,Ts),de}function $n(i0){return gt=i0,ye=Wa(Zr,v),Dt?Rn(i0):de}function Nr(i0){var Ts=i0-be,wo=i0-gt,Rv=v-Ts;return Rt?Wn(Rv,ee-wo):Rv}function ir(i0){var Ts=i0-be,wo=i0-gt;return be===i||Ts>=v||Ts<0||Rt&&wo>=ee}function Zr(){var i0=m1();if(ir(i0))return ui(i0);ye=Wa(Zr,Nr(i0))}function ui(i0){return ye=i,rn&&b?Rn(i0):(b=H=i,de)}function bl(){ye!==i&&Kc(ye),gt=0,b=be=H=ye=i}function Wi(){return ye===i?de:ui(m1())}function uo(){var i0=m1(),Ts=ir(i0);if(b=arguments,H=this,be=i0,Ts){if(ye===i)return $n(be);if(Rt)return Kc(ye),ye=Wa(Zr,v),Rn(be)}return ye===i&&(ye=Wa(Zr,v)),de}return uo.cancel=bl,uo.flush=Wi,uo}var Qh=Mr(function(d,v){return lc(d,1,v)}),Jh=Mr(function(d,v,x){return lc(d,fl(v)||0,x)});function ap(d){return dn(d,Ue)}function T2(d,v){if(typeof d!="function"||v!=null&&typeof v!="function")throw new Kr(E);var x=function(){var b=arguments,H=v?v.apply(this,b):b[0],ee=x.cache;if(ee.has(H))return ee.get(H);var de=d.apply(this,b);return x.cache=ee.set(H,de)||ee,de};return x.cache=new(T2.Cache||B0),x}T2.Cache=B0;function C2(d){if(typeof d!="function")throw new Kr(E);return function(){var v=arguments;switch(v.length){case 0:return!d.call(this);case 1:return!d.call(this,v[0]);case 2:return!d.call(this,v[0],v[1]);case 3:return!d.call(this,v[0],v[1],v[2])}return!d.apply(this,v)}}function z0(d){return S2(2,d)}var x2=Rd(function(d,v){v=v.length==1&&Jn(v[0])?Lt(v[0],di(zn())):Lt(bi(v,1),di(zn()));var x=v.length;return Mr(function(b){for(var H=-1,ee=Wn(b.length,x);++H=v}),sl=e0(function(){return arguments}())?e0:function(d){return zu(d)&&ei.call(d,"callee")&&!I0.call(d,"callee")},Jn=Ve.isArray,Vs=me?di(me):He;function al(d){return d!=null&&M2(d.length)&&!Ea(d)}function n0(d){return zu(d)&&al(d)}function ev(d){return d===!0||d===!1||zu(d)&&mt(d)==ln}var Gs=$0||Ip,hp=xe?di(xe):Be;function jm(d){return zu(d)&&d.nodeType===1&&!Ec(d)}function tv(d){if(d==null)return!0;if(al(d)&&(Jn(d)||typeof d=="string"||typeof d.splice=="function"||Gs(d)||Da(d)||sl(d)))return!d.length;var v=Ou(d);if(v==w||v==Kt)return!d.size;if(xf(d))return!Ba(d).length;for(var x in d)if(ei.call(d,x))return!1;return!0}function vp(d,v){return ut(d,v)}function zm(d,v,x){x=typeof x=="function"?x:i;var b=x?x(d,v):i;return b===i?ut(d,v,i,x):!!b}function mp(d){if(!zu(d))return!1;var v=mt(d);return v==un||v==nr||typeof d.message=="string"&&typeof d.name=="string"&&!Ec(d)}function _c(d){return typeof d=="number"&&Xi(d)}function Ea(d){if(!ku(d))return!1;var v=mt(d);return v==Wt||v==vr||v==en||v==ur}function yp(d){return typeof d=="number"&&d==Cr(d)}function M2(d){return typeof d=="number"&&d>-1&&d%1==0&&d<=$t}function ku(d){var v=typeof d;return d!=null&&(v=="object"||v=="function")}function zu(d){return d!=null&&typeof d=="object"}var gp=Z?di(Z):jn;function _p(d,v){return d===v||ti(d,v,Pn(v))}function nv(d,v,x){return x=typeof x=="function"?x:i,ti(d,v,Pn(v),x)}function qm(d){return rv(d)&&d!=+d}function Hm(d){if(Al(d))throw new Yt(p);return tr(d)}function Wm(d){return d===null}function N2(d){return d==null}function rv(d){return typeof d=="number"||zu(d)&&mt(d)==Ut}function Ec(d){if(!zu(d)||mt(d)!=fr)return!1;var v=$o(d);if(v===null)return!0;var x=ei.call(v,"constructor")&&v.constructor;return typeof x=="function"&&x instanceof x&&Au.call(x)==na}var g1=ke?di(ke):ii;function Vm(d){return yp(d)&&d>=-$t&&d<=$t}var L2=Xe?di(Xe):qi;function _1(d){return typeof d=="string"||!Jn(d)&&zu(d)&&mt(d)==vu}function Nl(d){return typeof d=="symbol"||zu(d)&&mt(d)==a0}var Da=ht?di(ht):jr;function iv(d){return d===i}function Gm(d){return zu(d)&&Ou(d)==Go}function uv(d){return zu(d)&&mt(d)==Os}var ov=p2(r2),Ym=p2(function(d,v){return d<=v});function lv(d){if(!d)return[];if(al(d))return _1(d)?Yr(d):Ji(d);if(Ru&&d[Ru])return Vu(d[Ru]());var v=Ou(d),x=v==w?yu:v==Kt?Q0:Ac;return x(d)}function wa(d){if(!d)return d===0?d:0;if(d=fl(d),d===jt||d===-jt){var v=d<0?-1:1;return v*at}return d===d?d:0}function Cr(d){var v=wa(d),x=v%1;return v===v?x?v-x:v:0}function Ep(d){return d?Zu(Cr(d),0,ae):0}function fl(d){if(typeof d=="number")return d;if(Nl(d))return Q;if(ku(d)){var v=typeof d.valueOf=="function"?d.valueOf():d;d=ku(v)?v+"":v}if(typeof d!="string")return d===0?d:+d;d=xu(d);var x=oo.test(d);return x||Ao.test(d)?Ls(d.slice(2),x?2:8):ni.test(d)?Q:+d}function cu(d){return O0(d,fn(d))}function E1(d){return d?Zu(Cr(d),-$t,$t):d===0?d:0}function ki(d){return d==null?"":il(d)}var Dp=no(function(d,v){if(xf(v)||al(v)){O0(v,M0(v),d);return}for(var x in v)ei.call(v,x)&&gs(d,x,v[x])}),F2=no(function(d,v){O0(v,fn(v),d)}),Do=no(function(d,v,x,b){O0(v,fn(v),d,b)}),Ss=no(function(d,v,x,b){O0(v,M0(v),d,b)}),Mf=ol(Ia);function b2(d,v){var x=Qr(d);return v==null?x:hf(x,v)}var wp=Mr(function(d,v){d=wn(d);var x=-1,b=v.length,H=b>2?v[2]:i;for(H&&io(v[0],v[1],H)&&(b=1);++x1),ee}),O0(d,rr(d),x),b&&(x=U0(x,C|U|q,ym));for(var H=v.length;H--;)Cd(x,v[H]);return x});function T1(d,v){return Ka(d,C2(zn(v)))}var Cp=ol(function(d,v){return d==null?{}:dh(d,v)});function Ka(d,v){if(d==null)return{};var x=Lt(rr(d),function(b){return[b]});return v=zn(v),ph(d,x,function(b,H){return v(b,H[0])})}function Km(d,v,x){v=Us(v,d);var b=-1,H=v.length;for(H||(H=1,d=i);++bv){var b=d;d=v,v=b}if(x||d%1||v%1){var H=y0();return Wn(d+H*(v-d+Ma("1e-"+((H+"").length-1))),v)}return o2(d,v)}var q2=_f(function(d,v,x){return v=v.toLowerCase(),d+(x?Uo(v):v)});function Uo(d){return Rp(ki(d).toLowerCase())}function H2(d){return d=ki(d),d&&d.replace(Xn,Mo).replace(K0,"")}function Qm(d,v,x){d=ki(d),v=il(v);var b=d.length;x=x===i?b:Zu(Cr(x),0,b);var H=x;return x-=v.length,x>=0&&d.slice(x,H)==v}function A1(d){return d=ki(d),d&&ks.test(d)?d.replace(tu,ds):d}function Jm(d){return d=ki(d),d&&Zt.test(d)?d.replace(fi,"\\$&"):d}var Zm=_f(function(d,v,x){return d+(x?"-":"")+v.toLowerCase()}),av=_f(function(d,v,x){return d+(x?" ":"")+v.toLowerCase()}),$m=_h("toLowerCase");function fv(d,v,x){d=ki(d),v=Cr(v);var b=v?Ki(d):0;if(!v||b>=v)return d;var H=(v-b)/2;return da(vs(H),x)+d+da(Ku(H),x)}function ey(d,v,x){d=ki(d),v=Cr(v);var b=v?Ki(d):0;return v&&b>>0,x?(d=ki(d),d&&(typeof v=="string"||v!=null&&!g1(v))&&(v=il(v),!v&&Lo(d))?aa(Yr(d),0,x):d.split(v,x)):[]}var bf=_f(function(d,v,x){return d+(x?" ":"")+Rp(v)});function dv(d,v,x){return d=ki(d),x=x==null?0:Zu(Cr(x),0,d.length),v=il(v),d.slice(x,x+v.length)==v}function pv(d,v,x){var b=Y.templateSettings;x&&io(d,v,x)&&(v=i),d=ki(d),v=Do({},v,b,Df);var H=Do({},v.imports,b.imports,Df),ee=M0(H),de=ko(H,ee),ye,be,gt=0,Dt=v.interpolate||Qo,Rt="__p += '",rn=fu((v.escape||Qo).source+"|"+Dt.source+"|"+(Dt===f0?Wl:Qo).source+"|"+(v.evaluate||Qo).source+"|$","g"),Rn="//# sourceURL="+(ei.call(v,"sourceURL")?(v.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++ic+"]")+` -`;d.replace(rn,function(ir,Zr,ui,bl,Wi,uo){return ui||(ui=bl),Rt+=d.slice(gt,uo).replace(lo,bs),Zr&&(ye=!0,Rt+=`' + -__e(`+Zr+`) + -'`),Wi&&(be=!0,Rt+=`'; -`+Wi+`; -__p += '`),ui&&(Rt+=`' + -((__t = (`+ui+`)) == null ? '' : __t) + -'`),gt=uo+ir.length,ir}),Rt+=`'; -`;var $n=ei.call(v,"variable")&&v.variable;if(!$n)Rt=`with (obj) { -`+Rt+` -} -`;else if(Y0.test($n))throw new Yt(t);Rt=(be?Rt.replace(Hr,""):Rt).replace(To,"$1").replace(Co,"$1;"),Rt="function("+($n||"obj")+`) { -`+($n?"":`obj || (obj = {}); -`)+"var __t, __p = ''"+(ye?", __e = _.escape":"")+(be?`, __j = Array.prototype.join; -function print() { __p += __j.call(arguments, '') } -`:`; -`)+Rt+`return __p -}`;var Nr=_v(function(){return sr(ee,Rn+"return "+Rt).apply(i,de)});if(Nr.source=Rt,mp(Nr))throw Nr;return Nr}function hv(d){return ki(d).toLowerCase()}function W2(d){return ki(d).toUpperCase()}function V2(d,v,x){if(d=ki(d),d&&(x||v===i))return xu(d);if(!d||!(v=il(v)))return d;var b=Yr(d),H=Yr(v),ee=sf(b,H),de=gl(b,H)+1;return aa(b,ee,de).join("")}function Ap(d,v,x){if(d=ki(d),d&&(x||v===i))return d.slice(0,fo(d)+1);if(!d||!(v=il(v)))return d;var b=Yr(d),H=gl(b,Yr(v))+1;return aa(b,0,H).join("")}function vv(d,v,x){if(d=ki(d),d&&(x||v===i))return d.replace(Ln,"");if(!d||!(v=il(v)))return d;var b=Yr(d),H=sf(b,Yr(v));return aa(b,H).join("")}function G2(d,v){var x=Ge,b=rt;if(ku(v)){var H="separator"in v?v.separator:H;x="length"in v?Cr(v.length):x,b="omission"in v?il(v.omission):b}d=ki(d);var ee=d.length;if(Lo(d)){var de=Yr(d);ee=de.length}if(x>=ee)return d;var ye=x-Ki(b);if(ye<1)return b;var be=de?aa(de,0,ye).join(""):d.slice(0,ye);if(H===i)return be+b;if(de&&(ye+=be.length-ye),g1(H)){if(d.slice(ye).search(H)){var gt,Dt=be;for(H.global||(H=fu(H.source,ki(xo.exec(H))+"g")),H.lastIndex=0;gt=H.exec(Dt);)var Rt=gt.index;be=be.slice(0,Rt===i?ye:Rt)}}else if(d.indexOf(il(H),ye)!=ye){var rn=be.lastIndexOf(H);rn>-1&&(be=be.slice(0,rn))}return be+b}function mv(d){return d=ki(d),d&&Si.test(d)?d.replace(L0,Oi):d}var yv=_f(function(d,v,x){return d+(x?" ":"")+v.toUpperCase()}),Rp=_h("toUpperCase");function gv(d,v,x){return d=ki(d),v=x?i:v,v===i?ps(d)?cf(d):v0(d):d.match(v)||[]}var _v=Mr(function(d,v){try{return ie(d,i,v)}catch(x){return mp(x)?x:new Yt(x)}}),uy=ol(function(d,v){return tt(v,function(x){x=Rl(x),ju(d,x,y1(d[x],d))}),d});function Ev(d){var v=d==null?0:d.length,x=zn();return d=v?Lt(d,function(b){if(typeof b[1]!="function")throw new Kr(E);return[x(b[0]),b[1]]}):[],Mr(function(b){for(var H=-1;++H$t)return[];var x=ae,b=Wn(d,ae);v=zn(v),d-=ae;for(var H=S0(b,v);++x0||v<0)?new lt(x):(d<0?x=x.takeRight(-d):d&&(x=x.drop(d)),v!==i&&(v=Cr(v),x=v<0?x.dropRight(-v):x.take(v-d)),x)},lt.prototype.takeRightWhile=function(d){return this.reverse().takeWhile(d).reverse()},lt.prototype.toArray=function(){return this.take(ae)},A(lt.prototype,function(d,v){var x=/^(?:filter|find|map|reject)|While$/.test(v),b=/^(?:head|last)$/.test(v),H=Y[b?"take"+(v=="last"?"Right":""):v],ee=b||/^find/.test(v);!H||(Y.prototype[v]=function(){var de=this.__wrapped__,ye=b?[1]:arguments,be=de instanceof lt,gt=ye[0],Dt=be||Jn(de),Rt=function(Zr){var ui=H.apply(Y,gn([Zr],ye));return b&&rn?ui[0]:ui};Dt&&x&&typeof gt=="function"&>.length!=1&&(be=Dt=!1);var rn=this.__chain__,Rn=!!this.__actions__.length,$n=ee&&!rn,Nr=be&&!Rn;if(!ee&&Dt){de=Nr?de:new lt(this);var ir=d.apply(de,ye);return ir.__actions__.push({func:h1,args:[Rt],thisArg:i}),new Ur(ir,rn)}return $n&&Nr?d.apply(this,ye):(ir=this.thru(Rt),$n?b?ir.value()[0]:ir.value():ir)})}),tt(["pop","push","shift","sort","splice","unshift"],function(d){var v=Vr[d],x=/^(?:push|sort|unshift)$/.test(d)?"tap":"thru",b=/^(?:pop|shift)$/.test(d);Y.prototype[d]=function(){var H=arguments;if(b&&!this.__chain__){var ee=this.value();return v.apply(Jn(ee)?ee:[],H)}return this[x](function(de){return v.apply(Jn(de)?de:[],H)})}}),A(lt.prototype,function(d,v){var x=Y[v];if(x){var b=x.name+"";ei.call(xn,b)||(xn[b]=[]),xn[b].push({name:v,func:x})}}),xn[ca(i,we).name]=[{name:"wrapper",func:i}],lt.prototype.clone=hi,lt.prototype.reverse=Qi,lt.prototype.value=g0,Y.prototype.at=Qd,Y.prototype.chain=jh,Y.prototype.commit=Jd,Y.prototype.next=zh,Y.prototype.plant=xm,Y.prototype.reverse=Of,Y.prototype.toJSON=Y.prototype.valueOf=Y.prototype.value=kf,Y.prototype.first=Y.prototype.head,Ru&&(Y.prototype[Ru]=Cm),Y},Z0=J0();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Ni._=Z0,define(function(){return Z0})):z?((z.exports=Z0)._=Z0,B._=Z0):Ni._=Z0}).call(nm)});var GD=ce((Dne,VD)=>{"use strict";var Ai=VD.exports;VD.exports.default=Ai;var hu="[",ig="]",rm="\x07",$_=";",U5=process.env.TERM_PROGRAM==="Apple_Terminal";Ai.cursorTo=(i,o)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");return typeof o!="number"?hu+(i+1)+"G":hu+(o+1)+";"+(i+1)+"H"};Ai.cursorMove=(i,o)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");let f="";return i<0?f+=hu+-i+"D":i>0&&(f+=hu+i+"C"),o<0?f+=hu+-o+"A":o>0&&(f+=hu+o+"B"),f};Ai.cursorUp=(i=1)=>hu+i+"A";Ai.cursorDown=(i=1)=>hu+i+"B";Ai.cursorForward=(i=1)=>hu+i+"C";Ai.cursorBackward=(i=1)=>hu+i+"D";Ai.cursorLeft=hu+"G";Ai.cursorSavePosition=U5?"7":hu+"s";Ai.cursorRestorePosition=U5?"8":hu+"u";Ai.cursorGetPosition=hu+"6n";Ai.cursorNextLine=hu+"E";Ai.cursorPrevLine=hu+"F";Ai.cursorHide=hu+"?25l";Ai.cursorShow=hu+"?25h";Ai.eraseLines=i=>{let o="";for(let f=0;f[ig,"8",$_,$_,o,rm,i,ig,"8",$_,$_,rm].join("");Ai.image=(i,o={})=>{let f=`${ig}1337;File=inline=1`;return o.width&&(f+=`;width=${o.width}`),o.height&&(f+=`;height=${o.height}`),o.preserveAspectRatio===!1&&(f+=";preserveAspectRatio=0"),f+":"+i.toString("base64")+rm};Ai.iTerm={setCwd:(i=process.cwd())=>`${ig}50;CurrentDir=${i}${rm}`,annotation:(i,o={})=>{let f=`${ig}1337;`,p=typeof o.x!="undefined",E=typeof o.y!="undefined";if((p||E)&&!(p&&E&&typeof o.length!="undefined"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return i=i.replace(/\|/g,""),f+=o.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",o.length>0?f+=(p?[i,o.length,o.x,o.y]:[o.length,i]).join("|"):f+=i,f+rm}}});var z5=ce((wne,YD)=>{"use strict";var j5=(i,o)=>{for(let f of Reflect.ownKeys(o))Object.defineProperty(i,f,Object.getOwnPropertyDescriptor(o,f));return i};YD.exports=j5;YD.exports.default=j5});var H5=ce((Sne,e4)=>{"use strict";var UK=z5(),t4=new WeakMap,q5=(i,o={})=>{if(typeof i!="function")throw new TypeError("Expected a function");let f,p=0,E=i.displayName||i.name||"",t=function(...k){if(t4.set(t,++p),p===1)f=i.apply(this,k),i=null;else if(o.throw===!0)throw new Error(`Function \`${E}\` can only be called once`);return f};return UK(t,i),t4.set(t,p),t};e4.exports=q5;e4.exports.default=q5;e4.exports.callCount=i=>{if(!t4.has(i))throw new Error(`The given function \`${i.name}\` is not wrapped by the \`onetime\` package`);return t4.get(i)}});var W5=ce((Tne,n4)=>{n4.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&n4.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&n4.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var JD=ce((Cne,ug)=>{var jK=require("assert"),og=W5(),zK=/^win/i.test(process.platform),r4=require("events");typeof r4!="function"&&(r4=r4.EventEmitter);var zl;process.__signal_exit_emitter__?zl=process.__signal_exit_emitter__:(zl=process.__signal_exit_emitter__=new r4,zl.count=0,zl.emitted={});zl.infinite||(zl.setMaxListeners(Infinity),zl.infinite=!0);ug.exports=function(i,o){jK.equal(typeof i,"function","a callback must be provided for exit handler"),lg===!1&&V5();var f="exit";o&&o.alwaysLast&&(f="afterexit");var p=function(){zl.removeListener(f,i),zl.listeners("exit").length===0&&zl.listeners("afterexit").length===0&&KD()};return zl.on(f,i),p};ug.exports.unload=KD;function KD(){!lg||(lg=!1,og.forEach(function(i){try{process.removeListener(i,XD[i])}catch(o){}}),process.emit=QD,process.reallyExit=G5,zl.count-=1)}function im(i,o,f){zl.emitted[i]||(zl.emitted[i]=!0,zl.emit(i,o,f))}var XD={};og.forEach(function(i){XD[i]=function(){var f=process.listeners(i);f.length===zl.count&&(KD(),im("exit",null,i),im("afterexit",null,i),zK&&i==="SIGHUP"&&(i="SIGINT"),process.kill(process.pid,i))}});ug.exports.signals=function(){return og};ug.exports.load=V5;var lg=!1;function V5(){lg||(lg=!0,zl.count+=1,og=og.filter(function(i){try{return process.on(i,XD[i]),!0}catch(o){return!1}}),process.emit=HK,process.reallyExit=qK)}var G5=process.reallyExit;function qK(i){process.exitCode=i||0,im("exit",process.exitCode,null),im("afterexit",process.exitCode,null),G5.call(process,process.exitCode)}var QD=process.emit;function HK(i,o){if(i==="exit"){o!==void 0&&(process.exitCode=o);var f=QD.apply(this,arguments);return im("exit",process.exitCode,null),im("afterexit",process.exitCode,null),f}else return QD.apply(this,arguments)}});var K5=ce((xne,Y5)=>{"use strict";var WK=H5(),VK=JD();Y5.exports=WK(()=>{VK(()=>{process.stderr.write("[?25h")},{alwaysLast:!0})})});var ZD=ce(um=>{"use strict";var GK=K5(),i4=!1;um.show=(i=process.stderr)=>{!i.isTTY||(i4=!1,i.write("[?25h"))};um.hide=(i=process.stderr)=>{!i.isTTY||(GK(),i4=!0,i.write("[?25l"))};um.toggle=(i,o)=>{i!==void 0&&(i4=i),i4?um.show(o):um.hide(o)}});var Z5=ce(sg=>{"use strict";var X5=sg&&sg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(sg,"__esModule",{value:!0});var Q5=X5(GD()),J5=X5(ZD()),YK=(i,{showCursor:o=!1}={})=>{let f=0,p="",E=!1,t=k=>{!o&&!E&&(J5.default.hide(),E=!0);let L=k+` -`;L!==p&&(p=L,i.write(Q5.default.eraseLines(f)+L),f=L.split(` -`).length)};return t.clear=()=>{i.write(Q5.default.eraseLines(f)),p="",f=0},t.done=()=>{p="",f=0,o||(J5.default.show(),E=!1)},t};sg.default={create:YK}});var e9=ce((One,$5)=>{$5.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var r9=ce(Ra=>{"use strict";var t9=e9(),bc=process.env;Object.defineProperty(Ra,"_vendors",{value:t9.map(function(i){return i.constant})});Ra.name=null;Ra.isPR=null;t9.forEach(function(i){var o=Array.isArray(i.env)?i.env:[i.env],f=o.every(function(p){return n9(p)});if(Ra[i.constant]=f,f)switch(Ra.name=i.name,typeof i.pr){case"string":Ra.isPR=!!bc[i.pr];break;case"object":"env"in i.pr?Ra.isPR=i.pr.env in bc&&bc[i.pr.env]!==i.pr.ne:"any"in i.pr?Ra.isPR=i.pr.any.some(function(p){return!!bc[p]}):Ra.isPR=n9(i.pr);break;default:Ra.isPR=null}});Ra.isCI=!!(bc.CI||bc.CONTINUOUS_INTEGRATION||bc.BUILD_NUMBER||bc.RUN_ID||Ra.name);function n9(i){return typeof i=="string"?!!bc[i]:Object.keys(i).every(function(o){return bc[o]===i[o]})}});var u9=ce((Mne,i9)=>{"use strict";i9.exports=r9().isCI});var l9=ce((Nne,o9)=>{"use strict";var KK=i=>{let o=new Set;do for(let f of Reflect.ownKeys(i))o.add([i,f]);while((i=Reflect.getPrototypeOf(i))&&i!==Object.prototype);return o};o9.exports=(i,{include:o,exclude:f}={})=>{let p=E=>{let t=k=>typeof k=="string"?E===k:k.test(E);return o?o.some(t):f?!f.some(t):!0};for(let[E,t]of KK(i.constructor.prototype)){if(t==="constructor"||!p(t))continue;let k=Reflect.getOwnPropertyDescriptor(E,t);k&&typeof k.value=="function"&&(i[t]=i[t].bind(i))}return i}});var h9=ce($i=>{"use strict";Object.defineProperty($i,"__esModule",{value:!0});var om,ag,u4,o4,$D;typeof window=="undefined"||typeof MessageChannel!="function"?(lm=null,ew=null,tw=function(){if(lm!==null)try{var i=$i.unstable_now();lm(!0,i),lm=null}catch(o){throw setTimeout(tw,0),o}},s9=Date.now(),$i.unstable_now=function(){return Date.now()-s9},om=function(i){lm!==null?setTimeout(om,0,i):(lm=i,setTimeout(tw,0))},ag=function(i,o){ew=setTimeout(i,o)},u4=function(){clearTimeout(ew)},o4=function(){return!1},$D=$i.unstable_forceFrameRate=function(){}):(l4=window.performance,nw=window.Date,a9=window.setTimeout,f9=window.clearTimeout,typeof console!="undefined"&&(c9=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof c9!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof l4=="object"&&typeof l4.now=="function"?$i.unstable_now=function(){return l4.now()}:(d9=nw.now(),$i.unstable_now=function(){return nw.now()-d9}),fg=!1,cg=null,s4=-1,rw=5,iw=0,o4=function(){return $i.unstable_now()>=iw},$D=function(){},$i.unstable_forceFrameRate=function(i){0>i||125f4(k,f))N!==void 0&&0>f4(N,k)?(i[p]=N,i[L]=f,p=L):(i[p]=k,i[t]=f,p=t);else if(N!==void 0&&0>f4(N,f))i[p]=N,i[L]=f,p=L;else break e}}return o}return null}function f4(i,o){var f=i.sortIndex-o.sortIndex;return f!==0?f:i.id-o.id}var Xf=[],dd=[],XK=1,Rs=null,ls=3,d4=!1,$p=!1,dg=!1;function p4(i){for(var o=uf(dd);o!==null;){if(o.callback===null)c4(dd);else if(o.startTime<=i)c4(dd),o.sortIndex=o.expirationTime,ow(Xf,o);else break;o=uf(dd)}}function lw(i){if(dg=!1,p4(i),!$p)if(uf(Xf)!==null)$p=!0,om(sw);else{var o=uf(dd);o!==null&&ag(lw,o.startTime-i)}}function sw(i,o){$p=!1,dg&&(dg=!1,u4()),d4=!0;var f=ls;try{for(p4(o),Rs=uf(Xf);Rs!==null&&(!(Rs.expirationTime>o)||i&&!o4());){var p=Rs.callback;if(p!==null){Rs.callback=null,ls=Rs.priorityLevel;var E=p(Rs.expirationTime<=o);o=$i.unstable_now(),typeof E=="function"?Rs.callback=E:Rs===uf(Xf)&&c4(Xf),p4(o)}else c4(Xf);Rs=uf(Xf)}if(Rs!==null)var t=!0;else{var k=uf(dd);k!==null&&ag(lw,k.startTime-o),t=!1}return t}finally{Rs=null,ls=f,d4=!1}}function p9(i){switch(i){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var QK=$D;$i.unstable_ImmediatePriority=1;$i.unstable_UserBlockingPriority=2;$i.unstable_NormalPriority=3;$i.unstable_IdlePriority=5;$i.unstable_LowPriority=4;$i.unstable_runWithPriority=function(i,o){switch(i){case 1:case 2:case 3:case 4:case 5:break;default:i=3}var f=ls;ls=i;try{return o()}finally{ls=f}};$i.unstable_next=function(i){switch(ls){case 1:case 2:case 3:var o=3;break;default:o=ls}var f=ls;ls=o;try{return i()}finally{ls=f}};$i.unstable_scheduleCallback=function(i,o,f){var p=$i.unstable_now();if(typeof f=="object"&&f!==null){var E=f.delay;E=typeof E=="number"&&0p?(i.sortIndex=E,ow(dd,i),uf(Xf)===null&&i===uf(dd)&&(dg?u4():dg=!0,ag(lw,E-p))):(i.sortIndex=f,ow(Xf,i),$p||d4||($p=!0,om(sw))),i};$i.unstable_cancelCallback=function(i){i.callback=null};$i.unstable_wrapCallback=function(i){var o=ls;return function(){var f=ls;ls=o;try{return i.apply(this,arguments)}finally{ls=f}}};$i.unstable_getCurrentPriorityLevel=function(){return ls};$i.unstable_shouldYield=function(){var i=$i.unstable_now();p4(i);var o=uf(Xf);return o!==Rs&&Rs!==null&&o!==null&&o.callback!==null&&o.startTime<=i&&o.expirationTime{"use strict";process.env.NODE_ENV!=="production"&&function(){"use strict";Object.defineProperty(Ri,"__esModule",{value:!0});var i=!1,o=!1,f=!0,p,E,t,k,L;if(typeof window=="undefined"||typeof MessageChannel!="function"){var N=null,C=null,U=function(){if(N!==null)try{var Et=Ri.unstable_now(),Pt=!0;N(Pt,Et),N=null}catch(Bn){throw setTimeout(U,0),Bn}},q=Date.now();Ri.unstable_now=function(){return Date.now()-q},p=function(Et){N!==null?setTimeout(p,0,Et):(N=Et,setTimeout(U,0))},E=function(Et,Pt){C=setTimeout(Et,Pt)},t=function(){clearTimeout(C)},k=function(){return!1},L=Ri.unstable_forceFrameRate=function(){}}else{var W=window.performance,ne=window.Date,m=window.setTimeout,we=window.clearTimeout;if(typeof console!="undefined"){var Se=window.requestAnimationFrame,he=window.cancelAnimationFrame;typeof Se!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof he!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")}if(typeof W=="object"&&typeof W.now=="function")Ri.unstable_now=function(){return W.now()};else{var ge=ne.now();Ri.unstable_now=function(){return ne.now()-ge}}var ze=!1,pe=null,Oe=-1,le=5,Ue=0,Ge=300,rt=!1;if(o&&navigator!==void 0&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0){var wt=navigator.scheduling;k=function(){var Et=Ri.unstable_now();return Et>=Ue?rt||wt.isInputPending()?!0:Et>=Ge:!1},L=function(){rt=!0}}else k=function(){return Ri.unstable_now()>=Ue},L=function(){};Ri.unstable_forceFrameRate=function(Et){if(Et<0||Et>125){console.error("forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported");return}Et>0?le=Math.floor(1e3/Et):le=5};var xt=function(){if(pe!==null){var Et=Ri.unstable_now();Ue=Et+le;var Pt=!0;try{var Bn=pe(Pt,Et);Bn?ft.postMessage(null):(ze=!1,pe=null)}catch(Ir){throw ft.postMessage(null),Ir}}else ze=!1;rt=!1},$e=new MessageChannel,ft=$e.port2;$e.port1.onmessage=xt,p=function(Et){pe=Et,ze||(ze=!0,ft.postMessage(null))},E=function(Et,Pt){Oe=m(function(){Et(Ri.unstable_now())},Pt)},t=function(){we(Oe),Oe=-1}}function Ke(Et,Pt){var Bn=Et.length;Et.push(Pt),at(Et,Pt,Bn)}function jt(Et){var Pt=Et[0];return Pt===void 0?null:Pt}function $t(Et){var Pt=Et[0];if(Pt!==void 0){var Bn=Et.pop();return Bn!==Pt&&(Et[0]=Bn,Q(Et,Bn,0)),Pt}else return null}function at(Et,Pt,Bn){for(var Ir=Bn;;){var ji=Math.floor((Ir-1)/2),Wr=Et[ji];if(Wr!==void 0&&ae(Wr,Pt)>0)Et[ji]=Pt,Et[Ir]=Wr,Ir=ji;else return}}function Q(Et,Pt,Bn){for(var Ir=Bn,ji=Et.length;Irur){if(ur*=2,ur>Fr){console.error("Scheduler Profiling: Event log exceeded maximum size. Don't forget to call `stopLoggingProfilingEvents()`."),mr();return}var Bn=new Int32Array(ur*4);Bn.set(Kt),br=Bn.buffer,Kt=Bn}Kt.set(Et,Pt)}}function ai(){ur=fr,br=new ArrayBuffer(ur*4),Kt=new Int32Array(br),vu=0}function mr(){var Et=br;return ur=0,br=null,Kt=null,vu=0,Et}function Xo(Et,Pt){f&&(Wt[Vn]++,Kt!==null&&eu([a0,Pt*1e3,Et.id,Et.priorityLevel]))}function W0(Et,Pt){f&&(Wt[vr]=Ce,Wt[w]=0,Wt[Vn]--,Kt!==null&&eu([So,Pt*1e3,Et.id]))}function Lu(Et,Pt){f&&(Wt[Vn]--,Kt!==null&&eu([Os,Pt*1e3,Et.id]))}function V0(Et,Pt){f&&(Wt[vr]=Ce,Wt[w]=0,Wt[Vn]--,Kt!==null&&eu([Go,Pt*1e3,Et.id]))}function Hr(Et,Pt){f&&(ln++,Wt[vr]=Et.priorityLevel,Wt[w]=Et.id,Wt[Ut]=ln,Kt!==null&&eu([Yo,Pt*1e3,Et.id,ln]))}function To(Et,Pt){f&&(Wt[vr]=Ce,Wt[w]=0,Wt[Ut]=0,Kt!==null&&eu([Ko,Pt*1e3,Et.id,ln]))}function Co(Et){f&&(An++,Kt!==null&&eu([qt,Et*1e3,An]))}function L0(Et){f&&Kt!==null&&eu([_i,Et*1e3,An])}var tu=1073741823,Si=-1,ks=250,Hl=5e3,F0=1e4,f0=tu,Pr=[],Ei=[],G0=1,fi=!1,Zt=null,Ln=ct,Di=!1,ci=!1,Ht=!1;function Du(Et){for(var Pt=jt(Ei);Pt!==null;){if(Pt.callback===null)$t(Ei);else if(Pt.startTime<=Et)$t(Ei),Pt.sortIndex=Pt.expirationTime,Ke(Pr,Pt),f&&(Xo(Pt,Et),Pt.isQueued=!0);else return;Pt=jt(Ei)}}function Yi(Et){if(Ht=!1,Du(Et),!ci)if(jt(Pr)!==null)ci=!0,p(Y0);else{var Pt=jt(Ei);Pt!==null&&E(Yi,Pt.startTime-Et)}}function Y0(Et,Pt){f&&L0(Pt),ci=!1,Ht&&(Ht=!1,t()),Di=!0;var Bn=Ln;try{if(f)try{return Ui(Et,Pt)}catch(Wr){if(Zt!==null){var Ir=Ri.unstable_now();V0(Zt,Ir),Zt.isQueued=!1}throw Wr}else return Ui(Et,Pt)}finally{if(Zt=null,Ln=Bn,Di=!1,f){var ji=Ri.unstable_now();Co(ji)}}}function Ui(Et,Pt){var Bn=Pt;for(Du(Bn),Zt=jt(Pr);Zt!==null&&!(i&&fi)&&!(Zt.expirationTime>Bn&&(!Et||k()));){var Ir=Zt.callback;if(Ir!==null){Zt.callback=null,Ln=Zt.priorityLevel;var ji=Zt.expirationTime<=Bn;Hr(Zt,Bn);var Wr=Ir(ji);Bn=Ri.unstable_now(),typeof Wr=="function"?(Zt.callback=Wr,To(Zt,Bn)):(f&&(W0(Zt,Bn),Zt.isQueued=!1),Zt===jt(Pr)&&$t(Pr)),Du(Bn)}else $t(Pr);Zt=jt(Pr)}if(Zt!==null)return!0;var wu=jt(Ei);return wu!==null&&E(Yi,wu.startTime-Bn),!1}function Wl(Et,Pt){switch(Et){case ue:case je:case ct:case At:case en:break;default:Et=ct}var Bn=Ln;Ln=Et;try{return Pt()}finally{Ln=Bn}}function xo(Et){var Pt;switch(Ln){case ue:case je:case ct:Pt=ct;break;default:Pt=Ln;break}var Bn=Ln;Ln=Pt;try{return Et()}finally{Ln=Bn}}function ni(Et){var Pt=Ln;return function(){var Bn=Ln;Ln=Pt;try{return Et.apply(this,arguments)}finally{Ln=Bn}}}function oo(Et){switch(Et){case ue:return Si;case je:return ks;case en:return f0;case At:return F0;case ct:default:return Hl}}function Vl(Et,Pt,Bn){var Ir=Ri.unstable_now(),ji,Wr;if(typeof Bn=="object"&&Bn!==null){var wu=Bn.delay;typeof wu=="number"&&wu>0?ji=Ir+wu:ji=Ir,Wr=typeof Bn.timeout=="number"?Bn.timeout:oo(Et)}else Wr=oo(Et),ji=Ir;var c0=ji+Wr,Ti={id:G0++,callback:Pt,priorityLevel:Et,startTime:ji,expirationTime:c0,sortIndex:-1};return f&&(Ti.isQueued=!1),ji>Ir?(Ti.sortIndex=ji,Ke(Ei,Ti),jt(Pr)===null&&Ti===jt(Ei)&&(Ht?t():Ht=!0,E(Yi,ji-Ir))):(Ti.sortIndex=c0,Ke(Pr,Ti),f&&(Xo(Ti,Ir),Ti.isQueued=!0),!ci&&!Di&&(ci=!0,p(Y0))),Ti}function Ao(){fi=!0}function Ms(){fi=!1,!ci&&!Di&&(ci=!0,p(Y0))}function Xn(){return jt(Pr)}function Qo(Et){if(f&&Et.isQueued){var Pt=Ri.unstable_now();Lu(Et,Pt),Et.isQueued=!1}Et.callback=null}function lo(){return Ln}function b0(){var Et=Ri.unstable_now();Du(Et);var Pt=jt(Pr);return Pt!==Zt&&Zt!==null&&Pt!==null&&Pt.callback!==null&&Pt.startTime<=Et&&Pt.expirationTime{"use strict";process.env.NODE_ENV==="production"?aw.exports=h9():aw.exports=v9()});var m9=ce((Pne,pg)=>{pg.exports=function i(o){"use strict";var f=eg(),p=su(),E=h4();function t(g){for(var y="https://reactjs.org/docs/error-decoder.html?invariant="+g,A=1;AG0||(g.current=Ei[G0],Ei[G0]=null,G0--)}function Zt(g,y){G0++,Ei[G0]=g.current,g.current=y}var Ln={},Di={current:Ln},ci={current:!1},Ht=Ln;function Du(g,y){var A=g.type.contextTypes;if(!A)return Ln;var F=g.stateNode;if(F&&F.__reactInternalMemoizedUnmaskedChildContext===y)return F.__reactInternalMemoizedMaskedChildContext;var I={},J;for(J in A)I[J]=y[J];return F&&(g=g.stateNode,g.__reactInternalMemoizedUnmaskedChildContext=y,g.__reactInternalMemoizedMaskedChildContext=I),I}function Yi(g){return g=g.childContextTypes,g!=null}function Y0(g){fi(ci,g),fi(Di,g)}function Ui(g){fi(ci,g),fi(Di,g)}function Wl(g,y,A){if(Di.current!==Ln)throw Error(t(168));Zt(Di,y,g),Zt(ci,A,g)}function xo(g,y,A){var F=g.stateNode;if(g=y.childContextTypes,typeof F.getChildContext!="function")return A;F=F.getChildContext();for(var I in F)if(!(I in g))throw Error(t(108,Ge(y)||"Unknown",I));return f({},A,{},F)}function ni(g){var y=g.stateNode;return y=y&&y.__reactInternalMemoizedMergedChildContext||Ln,Ht=Di.current,Zt(Di,y,g),Zt(ci,ci.current,g),!0}function oo(g,y,A){var F=g.stateNode;if(!F)throw Error(t(169));A?(y=xo(g,y,Ht),F.__reactInternalMemoizedMergedChildContext=y,fi(ci,g),fi(Di,g),Zt(Di,y,g)):fi(ci,g),Zt(ci,A,g)}var Vl=E.unstable_runWithPriority,Ao=E.unstable_scheduleCallback,Ms=E.unstable_cancelCallback,Xn=E.unstable_shouldYield,Qo=E.unstable_requestPaint,lo=E.unstable_now,b0=E.unstable_getCurrentPriorityLevel,yl=E.unstable_ImmediatePriority,Ro=E.unstable_UserBlockingPriority,Et=E.unstable_NormalPriority,Pt=E.unstable_LowPriority,Bn=E.unstable_IdlePriority,Ir={},ji=Qo!==void 0?Qo:function(){},Wr=null,wu=null,c0=!1,Ti=lo(),d0=1e4>Ti?lo:function(){return lo()-Ti};function as(){switch(b0()){case yl:return 99;case Ro:return 98;case Et:return 97;case Pt:return 96;case Bn:return 95;default:throw Error(t(332))}}function St(g){switch(g){case 99:return yl;case 98:return Ro;case 97:return Et;case 96:return Pt;case 95:return Bn;default:throw Error(t(332))}}function so(g,y){return g=St(g),Vl(g,y)}function Jo(g,y,A){return g=St(g),Ao(g,y,A)}function Gl(g){return Wr===null?(Wr=[g],wu=Ao(yl,fs)):Wr.push(g),Ir}function Fu(){if(wu!==null){var g=wu;wu=null,Ms(g)}fs()}function fs(){if(!c0&&Wr!==null){c0=!0;var g=0;try{var y=Wr;so(99,function(){for(;g=y&&(fo=!0),g.firstContext=null)}function Tu(g,y){if(Su!==g&&y!==!1&&y!==0)if((typeof y!="number"||y===1073741823)&&(Su=g,y=1073741823),y={context:g,observedBits:y,next:null},mi===null){if(or===null)throw Error(t(308));mi=y,or.dependencies={expirationTime:0,firstContext:y,responders:null}}else mi=mi.next=y;return un?g._currentValue:g._currentValue2}var ao=!1;function Iu(g){return{baseState:g,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Oa(g){return{baseState:g.baseState,firstUpdate:g.firstUpdate,lastUpdate:g.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function p0(g,y){return{expirationTime:g,suspenseConfig:y,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function Zs(g,y){g.lastUpdate===null?g.firstUpdate=g.lastUpdate=y:(g.lastUpdate.next=y,g.lastUpdate=y)}function K0(g,y){var A=g.alternate;if(A===null){var F=g.updateQueue,I=null;F===null&&(F=g.updateQueue=Iu(g.memoizedState))}else F=g.updateQueue,I=A.updateQueue,F===null?I===null?(F=g.updateQueue=Iu(g.memoizedState),I=A.updateQueue=Iu(A.memoizedState)):F=g.updateQueue=Oa(I):I===null&&(I=A.updateQueue=Oa(F));I===null||F===I?Zs(F,y):F.lastUpdate===null||I.lastUpdate===null?(Zs(F,y),Zs(I,y)):(Zs(F,y),I.lastUpdate=y)}function $s(g,y){var A=g.updateQueue;A=A===null?g.updateQueue=Iu(g.memoizedState):ka(g,A),A.lastCapturedUpdate===null?A.firstCapturedUpdate=A.lastCapturedUpdate=y:(A.lastCapturedUpdate.next=y,A.lastCapturedUpdate=y)}function ka(g,y){var A=g.alternate;return A!==null&&y===A.updateQueue&&(y=g.updateQueue=Oa(y)),y}function cs(g,y,A,F,I,J){switch(A.tag){case 1:return g=A.payload,typeof g=="function"?g.call(J,F,I):g;case 3:g.effectTag=g.effectTag&-4097|64;case 0:if(g=A.payload,I=typeof g=="function"?g.call(J,F,I):g,I==null)break;return f({},F,I);case 2:ao=!0}return F}function w0(g,y,A,F,I){ao=!1,y=ka(g,y);for(var J=y.baseState,fe=null,mt=0,Ct=y.firstUpdate,Mt=J;Ct!==null;){var Er=Ct.expirationTime;Erii?(qi=tr,tr=null):qi=tr.sibling;var jr=iu(He,tr,ut[ii],Jt);if(jr===null){tr===null&&(tr=qi);break}g&&tr&&jr.alternate===null&&y(He,tr),Be=J(jr,Be,ii),ti===null?jn=jr:ti.sibling=jr,ti=jr,tr=qi}if(ii===ut.length)return A(He,tr),jn;if(tr===null){for(;iiii?(qi=tr,tr=null):qi=tr.sibling;var gu=iu(He,tr,jr.value,Jt);if(gu===null){tr===null&&(tr=qi);break}g&&tr&&gu.alternate===null&&y(He,tr),Be=J(gu,Be,ii),ti===null?jn=gu:ti.sibling=gu,ti=gu,tr=qi}if(jr.done)return A(He,tr),jn;if(tr===null){for(;!jr.done;ii++,jr=ut.next())jr=$u(He,jr.value,Jt),jr!==null&&(Be=J(jr,Be,ii),ti===null?jn=jr:ti.sibling=jr,ti=jr);return jn}for(tr=F(He,tr);!jr.done;ii++,jr=ut.next())jr=j0(tr,He,ii,jr.value,Jt),jr!==null&&(g&&jr.alternate!==null&&tr.delete(jr.key===null?ii:jr.key),Be=J(jr,Be,ii),ti===null?jn=jr:ti.sibling=jr,ti=jr);return g&&tr.forEach(function(Ba){return y(He,Ba)}),jn}return function(He,Be,ut,Jt){var jn=typeof ut=="object"&&ut!==null&&ut.type===U&&ut.key===null;jn&&(ut=ut.props.children);var ti=typeof ut=="object"&&ut!==null;if(ti)switch(ut.$$typeof){case N:e:{for(ti=ut.key,jn=Be;jn!==null;){if(jn.key===ti)if(jn.tag===7?ut.type===U:jn.elementType===ut.type){A(He,jn.sibling),Be=I(jn,ut.type===U?ut.props.children:ut.props,Jt),Be.ref=Fs(He,jn,ut),Be.return=He,He=Be;break e}else{A(He,jn);break}else y(He,jn);jn=jn.sibling}ut.type===U?(Be=Zu(ut.props.children,He.mode,Jt,ut.key),Be.return=He,He=Be):(Jt=Ia(ut.type,ut.key,ut.props,null,He.mode,Jt),Jt.ref=Fs(He,Be,ut),Jt.return=He,He=Jt)}return fe(He);case C:e:{for(jn=ut.key;Be!==null;){if(Be.key===jn)if(Be.tag===4&&Be.stateNode.containerInfo===ut.containerInfo&&Be.stateNode.implementation===ut.implementation){A(He,Be.sibling),Be=I(Be,ut.children||[],Jt),Be.return=He,He=Be;break e}else{A(He,Be);break}else y(He,Be);Be=Be.sibling}Be=vf(ut,He.mode,Jt),Be.return=He,He=Be}return fe(He)}if(typeof ut=="string"||typeof ut=="number")return ut=""+ut,Be!==null&&Be.tag===6?(A(He,Be.sibling),Be=I(Be,ut,Jt),Be.return=He,He=Be):(A(He,Be),Be=U0(ut,He.mode,Jt),Be.return=He,He=Be),fe(He);if(h0(ut))return Tl(He,Be,ut,Jt);if(le(ut))return e0(He,Be,ut,Jt);if(ti&&Ni(He,ut),typeof ut=="undefined"&&!jn)switch(He.tag){case 1:case 0:throw He=He.type,Error(t(152,He.displayName||He.name||"Component"))}return A(He,Be)}}var z=B(!0),G=B(!1),$={},De={current:$},me={current:$},xe={current:$};function Z(g){if(g===$)throw Error(t(174));return g}function ke(g,y){Zt(xe,y,g),Zt(me,g,g),Zt(De,$,g),y=jt(y),fi(De,g),Zt(De,y,g)}function Xe(g){fi(De,g),fi(me,g),fi(xe,g)}function ht(g){var y=Z(xe.current),A=Z(De.current);y=$t(A,g.type,y),A!==y&&(Zt(me,g,g),Zt(De,y,g))}function ie(g){me.current===g&&(fi(De,g),fi(me,g))}var qe={current:0};function tt(g){for(var y=g;y!==null;){if(y.tag===13){var A=y.memoizedState;if(A!==null&&(A=A.dehydrated,A===null||Hr(A)||To(A)))return y}else if(y.tag===19&&y.memoizedProps.revealOrder!==void 0){if((y.effectTag&64)!=0)return y}else if(y.child!==null){y.child.return=y,y=y.child;continue}if(y===g)break;for(;y.sibling===null;){if(y.return===null||y.return===g)return null;y=y.return}y.sibling.return=y.return,y=y.sibling}return null}function Tt(g,y){return{responder:g,props:y}}var kt=k.ReactCurrentDispatcher,bt=k.ReactCurrentBatchConfig,on=0,tn=null,Lt=null,gn=null,lr=null,Qn=null,_r=null,Cn=0,Ar=null,v0=0,Rr=!1,nt=null,_t=0;function Ze(){throw Error(t(321))}function Ft(g,y){if(y===null)return!1;for(var A=0;ACn&&(Cn=Er,La(Cn))):(oc(Er,Ct.suspenseConfig),J=Ct.eagerReducer===g?Ct.eagerState:g(J,Ct.action)),fe=Ct,Ct=Ct.next}while(Ct!==null&&Ct!==F);Mt||(mt=fe,I=J),Ne(J,y.memoizedState)||(fo=!0),y.memoizedState=J,y.baseUpdate=mt,y.baseState=I,A.lastRenderedState=J}return[y.memoizedState,A.dispatch]}function S0(g){var y=Yn();return typeof g=="function"&&(g=g()),y.memoizedState=y.baseState=g,g=y.queue={last:null,dispatch:null,lastRenderedReducer:nu,lastRenderedState:g},g=g.dispatch=bs.bind(null,tn,g),[y.memoizedState,g]}function X0(g){return Cu(nu,g)}function xu(g,y,A,F){return g={tag:g,create:y,destroy:A,deps:F,next:null},Ar===null?(Ar={lastEffect:null},Ar.lastEffect=g.next=g):(y=Ar.lastEffect,y===null?Ar.lastEffect=g.next=g:(A=y.next,y.next=g,g.next=A,Ar.lastEffect=g)),g}function di(g,y,A,F){var I=Yn();v0|=g,I.memoizedState=xu(y,A,void 0,F===void 0?null:F)}function ko(g,y,A,F){var I=yr();F=F===void 0?null:F;var J=void 0;if(Lt!==null){var fe=Lt.memoizedState;if(J=fe.destroy,F!==null&&Ft(F,fe.deps)){xu(0,A,J,F);return}}v0|=g,I.memoizedState=xu(y,A,J,F)}function Zo(g,y){return di(516,192,g,y)}function sf(g,y){return ko(516,192,g,y)}function gl(g,y){if(typeof y=="function")return g=g(),y(g),function(){y(null)};if(y!=null)return g=g(),y.current=g,function(){y.current=null}}function af(){}function Mo(g,y){return Yn().memoizedState=[g,y===void 0?null:y],g}function ds(g,y){var A=yr();y=y===void 0?null:y;var F=A.memoizedState;return F!==null&&y!==null&&Ft(y,F[1])?F[0]:(A.memoizedState=[g,y],g)}function bs(g,y,A){if(!(25>_t))throw Error(t(301));var F=g.alternate;if(g===tn||F!==null&&F===tn)if(Rr=!0,g={expirationTime:on,suspenseConfig:null,action:A,eagerReducer:null,eagerState:null,next:null},nt===null&&(nt=new Map),A=nt.get(y),A===void 0)nt.set(y,g);else{for(y=A;y.next!==null;)y=y.next;y.next=g}else{var I=g0(),J=ri.suspense;I=bn(I,g,J),J={expirationTime:I,suspenseConfig:J,action:A,eagerReducer:null,eagerState:null,next:null};var fe=y.last;if(fe===null)J.next=J;else{var mt=fe.next;mt!==null&&(J.next=mt),fe.next=J}if(y.last=J,g.expirationTime===0&&(F===null||F.expirationTime===0)&&(F=y.lastRenderedReducer,F!==null))try{var Ct=y.lastRenderedState,Mt=F(Ct,A);if(J.eagerReducer=F,J.eagerState=Mt,Ne(Mt,Ct))return}catch(Er){}finally{}Qu(g,I)}}var No={readContext:Tu,useCallback:Ze,useContext:Ze,useEffect:Ze,useImperativeHandle:Ze,useLayoutEffect:Ze,useMemo:Ze,useReducer:Ze,useRef:Ze,useState:Ze,useDebugValue:Ze,useResponder:Ze,useDeferredValue:Ze,useTransition:Ze},Lo={readContext:Tu,useCallback:Mo,useContext:Tu,useEffect:Zo,useImperativeHandle:function(g,y,A){return A=A!=null?A.concat([g]):null,di(4,36,gl.bind(null,y,g),A)},useLayoutEffect:function(g,y){return di(4,36,g,y)},useMemo:function(g,y){var A=Yn();return y=y===void 0?null:y,g=g(),A.memoizedState=[g,y],g},useReducer:function(g,y,A){var F=Yn();return y=A!==void 0?A(y):y,F.memoizedState=F.baseState=y,g=F.queue={last:null,dispatch:null,lastRenderedReducer:g,lastRenderedState:y},g=g.dispatch=bs.bind(null,tn,g),[F.memoizedState,g]},useRef:function(g){var y=Yn();return g={current:g},y.memoizedState=g},useState:S0,useDebugValue:af,useResponder:Tt,useDeferredValue:function(g,y){var A=S0(g),F=A[0],I=A[1];return Zo(function(){E.unstable_next(function(){var J=bt.suspense;bt.suspense=y===void 0?null:y;try{I(g)}finally{bt.suspense=J}})},[g,y]),F},useTransition:function(g){var y=S0(!1),A=y[0],F=y[1];return[Mo(function(I){F(!0),E.unstable_next(function(){var J=bt.suspense;bt.suspense=g===void 0?null:g;try{F(!1),I()}finally{bt.suspense=J}})},[g,A]),A]}},ps={readContext:Tu,useCallback:ds,useContext:Tu,useEffect:sf,useImperativeHandle:function(g,y,A){return A=A!=null?A.concat([g]):null,ko(4,36,gl.bind(null,y,g),A)},useLayoutEffect:function(g,y){return ko(4,36,g,y)},useMemo:function(g,y){var A=yr();y=y===void 0?null:y;var F=A.memoizedState;return F!==null&&y!==null&&Ft(y,F[1])?F[0]:(g=g(),A.memoizedState=[g,y],g)},useReducer:Cu,useRef:function(){return yr().memoizedState},useState:X0,useDebugValue:af,useResponder:Tt,useDeferredValue:function(g,y){var A=X0(g),F=A[0],I=A[1];return sf(function(){E.unstable_next(function(){var J=bt.suspense;bt.suspense=y===void 0?null:y;try{I(g)}finally{bt.suspense=J}})},[g,y]),F},useTransition:function(g){var y=X0(!1),A=y[0],F=y[1];return[ds(function(I){F(!0),E.unstable_next(function(){var J=bt.suspense;bt.suspense=g===void 0?null:g;try{F(!1),I()}finally{bt.suspense=J}})},[g,A]),A]}},Vu=null,yu=null,pi=!1;function T0(g,y){var A=Io(5,null,null,0);A.elementType="DELETED",A.type="DELETED",A.stateNode=y,A.return=g,A.effectTag=8,g.lastEffect!==null?(g.lastEffect.nextEffect=A,g.lastEffect=A):g.firstEffect=g.lastEffect=A}function Q0(g,y){switch(g.tag){case 5:return y=Lu(y,g.type,g.pendingProps),y!==null?(g.stateNode=y,!0):!1;case 6:return y=V0(y,g.pendingProps),y!==null?(g.stateNode=y,!0):!1;case 13:return!1;default:return!1}}function Fo(g){if(pi){var y=yu;if(y){var A=y;if(!Q0(g,y)){if(y=Co(A),!y||!Q0(g,y)){g.effectTag=g.effectTag&-1025|2,pi=!1,Vu=g;return}T0(Vu,A)}Vu=g,yu=L0(y)}else g.effectTag=g.effectTag&-1025|2,pi=!1,Vu=g}}function ta(g){for(g=g.return;g!==null&&g.tag!==5&&g.tag!==3&&g.tag!==13;)g=g.return;Vu=g}function Kl(g){if(!w||g!==Vu)return!1;if(!pi)return ta(g),pi=!0,!1;var y=g.type;if(g.tag!==5||y!=="head"&&y!=="body"&&!ct(y,g.memoizedProps))for(y=yu;y;)T0(g,y),y=Co(y);if(ta(g),g.tag===13){if(!w)throw Error(t(316));if(g=g.memoizedState,g=g!==null?g.dehydrated:null,!g)throw Error(t(317));yu=ks(g)}else yu=Vu?Co(g.stateNode):null;return!0}function Ki(){w&&(yu=Vu=null,pi=!1)}var Yr=k.ReactCurrentOwner,fo=!1;function Oi(g,y,A,F){y.child=g===null?G(y,null,A,F):z(y,g.child,A,F)}function gi(g,y,A,F,I){A=A.render;var J=y.ref;return Oo(y,I),F=nn(g,y,A,F,J,I),g!==null&&!fo?(y.updateQueue=g.updateQueue,y.effectTag&=-517,g.expirationTime<=I&&(g.expirationTime=0),fu(g,y,I)):(y.effectTag|=1,Oi(g,y,F,I),y.child)}function ff(g,y,A,F,I,J){if(g===null){var fe=A.type;return typeof fe=="function"&&!hf(fe)&&fe.defaultProps===void 0&&A.compare===null&&A.defaultProps===void 0?(y.tag=15,y.type=fe,cf(g,y,fe,F,I,J)):(g=Ia(A.type,null,F,null,y.mode,J),g.ref=y.ref,g.return=y,y.child=g)}return fe=g.child,Iy)&&Ur.set(g,y)))}}function eo(g,y){g.expirationTimeg?y:g)}function Ju(g){if(g.lastExpiredTime!==0)g.callbackExpirationTime=1073741823,g.callbackPriority=99,g.callbackNode=Gl(to.bind(null,g));else{var y=po(g),A=g.callbackNode;if(y===0)A!==null&&(g.callbackNode=null,g.callbackExpirationTime=0,g.callbackPriority=90);else{var F=g0();if(y===1073741823?F=99:y===1||y===2?F=95:(F=10*(1073741821-y)-10*(1073741821-F),F=0>=F?99:250>=F?98:5250>=F?97:95),A!==null){var I=g.callbackPriority;if(g.callbackExpirationTime===y&&I>=F)return;A!==Ir&&Ms(A)}g.callbackExpirationTime=y,g.callbackPriority=F,y=y===1073741823?Gl(to.bind(null,g)):Jo(F,bo.bind(null,g),{timeout:10*(1073741821-y)-d0()}),g.callbackNode=y}}}function bo(g,y){if(Qi=0,y)return y=g0(),oa(g,y),Ju(g),null;var A=po(g);if(A!==0){if(y=g.callbackNode,(kn&(Xi|ru))!==wr)throw Error(t(327));if(Bs(),g===se&&A===Le||ms(g,A),re!==null){var F=kn;kn|=Xi;var I=B0(g);do try{$1();break}catch(mt){ia(g,mt)}while(1);if(bu(),kn=F,Ku.current=I,Ae===Xr)throw y=ot,ms(g,A),Sl(g,A),Ju(g),y;if(re===null)switch(I=g.finishedWork=g.current.alternate,g.finishedExpirationTime=A,F=Ae,se=null,F){case Ci:case Xr:throw Error(t(345));case Wn:oa(g,2=A){g.lastPingedTime=A,ms(g,A);break}}if(J=po(g),J!==0&&J!==A)break;if(F!==0&&F!==A){g.lastPingedTime=F;break}g.timeoutHandle=ln(Dl.bind(null,g),I);break}Dl(g);break;case m0:if(Sl(g,A),F=g.lastSuspendedTime,A===F&&(g.nextKnownPendingLevel=Uc(I)),yn&&(I=g.lastPingedTime,I===0||I>=A)){g.lastPingedTime=A,ms(g,A);break}if(I=po(g),I!==0&&I!==A)break;if(F!==0&&F!==A){g.lastPingedTime=F;break}if(Xt!==1073741823?F=10*(1073741821-Xt)-d0():vt===1073741823?F=0:(F=10*(1073741821-vt)-5e3,I=d0(),A=10*(1073741821-A)-I,F=I-F,0>F&&(F=0),F=(120>F?120:480>F?480:1080>F?1080:1920>F?1920:3e3>F?3e3:4320>F?4320:1960*df(F/1960))-F,A=F?F=0:(I=fe.busyDelayMs|0,J=d0()-(10*(1073741821-J)-(fe.timeoutMs|0||5e3)),F=J<=I?0:I+F-J),10 component higher in the tree to provide a loading indicator or placeholder to display.`+Pr(I))}Ae!==y0&&(Ae=Wn),J=_l(J,I),Ct=F;do{switch(Ct.tag){case 3:fe=J,Ct.effectTag|=4096,Ct.expirationTime=y;var Be=hs(Ct,fe,y);$s(Ct,Be);break e;case 1:fe=J;var ut=Ct.type,Jt=Ct.stateNode;if((Ct.effectTag&64)==0&&(typeof ut.getDerivedStateFromError=="function"||Jt!==null&&typeof Jt.componentDidCatch=="function"&&(cr===null||!cr.has(Jt)))){Ct.effectTag|=4096,Ct.expirationTime=y;var jn=ra(Ct,fe,y);$s(Ct,jn);break e}}Ct=Ct.return}while(Ct!==null)}re=ho(re)}catch(ti){y=ti;continue}break}while(1)}function B0(){var g=Ku.current;return Ku.current=No,g===null?No:g}function oc(g,y){g_n&&(_n=g)}function gd(){for(;re!==null;)re=e2(re)}function $1(){for(;re!==null&&!Xn();)re=e2(re)}function e2(g){var y=Pa(g.alternate,g,Le);return g.memoizedProps=g.pendingProps,y===null&&(y=ho(g)),vs.current=null,y}function ho(g){re=g;do{var y=re.alternate;if(g=re.return,(re.effectTag&2048)==0){e:{var A=y;y=re;var F=Le,I=y.pendingProps;switch(y.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:Yi(y.type)&&Y0(y);break;case 3:Xe(y),Ui(y),I=y.stateNode,I.pendingContext&&(I.context=I.pendingContext,I.pendingContext=null),(A===null||A.child===null)&&Kl(y)&&Gu(y),Vr(y);break;case 5:ie(y);var J=Z(xe.current);if(F=y.type,A!==null&&y.stateNode!=null)Bu(A,y,F,I,J),A.ref!==y.ref&&(y.effectTag|=128);else if(I){if(A=Z(De.current),Kl(y)){if(I=y,!w)throw Error(t(175));A=tu(I.stateNode,I.type,I.memoizedProps,J,A,I),I.updateQueue=A,A=A!==null,A&&Gu(y)}else{var fe=ae(F,I,J,A,y);Kr(fe,y,!1,!1),y.stateNode=fe,ue(fe,F,I,J,A)&&Gu(y)}y.ref!==null&&(y.effectTag|=128)}else if(y.stateNode===null)throw Error(t(166));break;case 6:if(A&&y.stateNode!=null)Sn(A,y,A.memoizedProps,I);else{if(typeof I!="string"&&y.stateNode===null)throw Error(t(166));if(A=Z(xe.current),J=Z(De.current),Kl(y)){if(A=y,!w)throw Error(t(176));(A=Si(A.stateNode,A.memoizedProps,A))&&Gu(y)}else y.stateNode=en(I,A,J,y)}break;case 11:break;case 13:if(fi(qe,y),I=y.memoizedState,(y.effectTag&64)!=0){y.expirationTime=F;break e}I=I!==null,J=!1,A===null?y.memoizedProps.fallback!==void 0&&Kl(y):(F=A.memoizedState,J=F!==null,I||F===null||(F=A.child.sibling,F!==null&&(fe=y.firstEffect,fe!==null?(y.firstEffect=F,F.nextEffect=fe):(y.firstEffect=y.lastEffect=F,F.nextEffect=null),F.effectTag=8))),I&&!J&&(y.mode&2)!=0&&(A===null&&y.memoizedProps.unstable_avoidThisFallback!==!0||(qe.current&1)!=0?Ae===Ci&&(Ae=Xu):((Ae===Ci||Ae===Xu)&&(Ae=m0),_n!==0&&se!==null&&(Sl(se,Le),_s(se,_n)))),vr&&I&&(y.effectTag|=4),Wt&&(I||J)&&(y.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:Xe(y),Vr(y);break;case 10:mu(y);break;case 9:break;case 14:break;case 17:Yi(y.type)&&Y0(y);break;case 19:if(fi(qe,y),I=y.memoizedState,I===null)break;if(J=(y.effectTag&64)!=0,fe=I.rendering,fe===null){if(J)Au(I,!1);else if(Ae!==Ci||A!==null&&(A.effectTag&64)!=0)for(A=y.child;A!==null;){if(fe=tt(A),fe!==null){for(y.effectTag|=64,Au(I,!1),A=fe.updateQueue,A!==null&&(y.updateQueue=A,y.effectTag|=4),I.lastEffect===null&&(y.firstEffect=null),y.lastEffect=I.lastEffect,A=F,I=y.child;I!==null;)J=I,F=A,J.effectTag&=2,J.nextEffect=null,J.firstEffect=null,J.lastEffect=null,fe=J.alternate,fe===null?(J.childExpirationTime=0,J.expirationTime=F,J.child=null,J.memoizedProps=null,J.memoizedState=null,J.updateQueue=null,J.dependencies=null):(J.childExpirationTime=fe.childExpirationTime,J.expirationTime=fe.expirationTime,J.child=fe.child,J.memoizedProps=fe.memoizedProps,J.memoizedState=fe.memoizedState,J.updateQueue=fe.updateQueue,F=fe.dependencies,J.dependencies=F===null?null:{expirationTime:F.expirationTime,firstContext:F.firstContext,responders:F.responders}),I=I.sibling;Zt(qe,qe.current&1|2,y),y=y.child;break e}A=A.sibling}}else{if(!J)if(A=tt(fe),A!==null){if(y.effectTag|=64,J=!0,A=A.updateQueue,A!==null&&(y.updateQueue=A,y.effectTag|=4),Au(I,!0),I.tail===null&&I.tailMode==="hidden"&&!fe.alternate){y=y.lastEffect=I.lastEffect,y!==null&&(y.nextEffect=null);break}}else d0()>I.tailExpiration&&1I&&(I=F),fe>I&&(I=fe),J=J.sibling;A.childExpirationTime=I}if(y!==null)return y;g!==null&&(g.effectTag&2048)==0&&(g.firstEffect===null&&(g.firstEffect=re.firstEffect),re.lastEffect!==null&&(g.lastEffect!==null&&(g.lastEffect.nextEffect=re.firstEffect),g.lastEffect=re.lastEffect),1g?y:g}function Dl(g){var y=as();return so(99,el.bind(null,g,y)),null}function el(g,y){do Bs();while(Qr!==null);if((kn&(Xi|ru))!==wr)throw Error(t(327));var A=g.finishedWork,F=g.finishedExpirationTime;if(A===null)return null;if(g.finishedWork=null,g.finishedExpirationTime=0,A===g.current)throw Error(t(177));g.callbackNode=null,g.callbackExpirationTime=0,g.callbackPriority=90,g.nextKnownPendingLevel=0;var I=Uc(A);if(g.firstPendingTime=I,F<=g.lastSuspendedTime?g.firstSuspendedTime=g.lastSuspendedTime=g.nextKnownPendingLevel=0:F<=g.firstSuspendedTime&&(g.firstSuspendedTime=F-1),F<=g.lastPingedTime&&(g.lastPingedTime=0),F<=g.lastExpiredTime&&(g.lastExpiredTime=0),g===se&&(re=se=null,Le=0),1=A?Yt(g,y,A):(Zt(qe,qe.current&1,y),y=fu(g,y,A),y!==null?y.sibling:null);Zt(qe,qe.current&1,y);break;case 19:if(F=y.childExpirationTime>=A,(g.effectTag&64)!=0){if(F)return wn(g,y,A);y.effectTag|=64}if(I=y.memoizedState,I!==null&&(I.rendering=null,I.tail=null),Zt(qe,qe.current,y),!F)return null}return fu(g,y,A)}fo=!1}}else fo=!1;switch(y.expirationTime=0,y.tag){case 2:if(F=y.type,g!==null&&(g.alternate=null,y.alternate=null,y.effectTag|=2),g=y.pendingProps,I=Du(y,Di.current),Oo(y,A),I=nn(null,y,F,g,I,A),y.effectTag|=1,typeof I=="object"&&I!==null&&typeof I.render=="function"&&I.$$typeof===void 0){if(y.tag=1,sn(),Yi(F)){var J=!0;ni(y)}else J=!1;y.memoizedState=I.state!==null&&I.state!==void 0?I.state:null;var fe=F.getDerivedStateFromProps;typeof fe=="function"&&Yl(y,F,fe,g),I.updater=ea,y.stateNode=I,I._reactInternalFiber=y,Ls(y,F,g,A),y=et(null,y,F,!0,J,A)}else y.tag=0,Oi(null,y,I,A),y=y.child;return y;case 16:if(I=y.elementType,g!==null&&(g.alternate=null,y.alternate=null,y.effectTag|=2),g=y.pendingProps,Ue(I),I._status!==1)throw I._result;switch(I=I._result,y.type=I,J=y.tag=tl(I),g=Hn(I,g),J){case 0:y=Z0(null,y,I,g,A);break;case 1:y=Te(null,y,I,g,A);break;case 11:y=gi(null,y,I,g,A);break;case 14:y=ff(null,y,I,Hn(I.type,g),F,A);break;default:throw Error(t(306,I,""))}return y;case 0:return F=y.type,I=y.pendingProps,I=y.elementType===F?I:Hn(F,I),Z0(g,y,F,I,A);case 1:return F=y.type,I=y.pendingProps,I=y.elementType===F?I:Hn(F,I),Te(g,y,F,I,A);case 3:if(Ve(y),F=y.updateQueue,F===null)throw Error(t(282));if(I=y.memoizedState,I=I!==null?I.element:null,w0(y,F,y.pendingProps,null,A),F=y.memoizedState.element,F===I)Ki(),y=fu(g,y,A);else{if((I=y.stateNode.hydrate)&&(w?(yu=L0(y.stateNode.containerInfo),Vu=y,I=pi=!0):I=!1),I)for(A=G(y,null,F,A),y.child=A;A;)A.effectTag=A.effectTag&-3|1024,A=A.sibling;else Oi(g,y,F,A),Ki();y=y.child}return y;case 5:return ht(y),g===null&&Fo(y),F=y.type,I=y.pendingProps,J=g!==null?g.memoizedProps:null,fe=I.children,ct(F,I)?fe=null:J!==null&&ct(F,J)&&(y.effectTag|=16),J0(g,y),y.mode&4&&A!==1&&At(F,I)?(y.expirationTime=y.childExpirationTime=1,y=null):(Oi(g,y,fe,A),y=y.child),y;case 6:return g===null&&Fo(y),null;case 13:return Yt(g,y,A);case 4:return ke(y,y.stateNode.containerInfo),F=y.pendingProps,g===null?y.child=z(y,null,F,A):Oi(g,y,F,A),y.child;case 11:return F=y.type,I=y.pendingProps,I=y.elementType===F?I:Hn(F,I),gi(g,y,F,I,A);case 7:return Oi(g,y,y.pendingProps,A),y.child;case 8:return Oi(g,y,y.pendingProps.children,A),y.child;case 12:return Oi(g,y,y.pendingProps.children,A),y.child;case 10:e:{if(F=y.type._context,I=y.pendingProps,fe=y.memoizedProps,J=I.value,Pu(y,J),fe!==null){var mt=fe.value;if(J=Ne(mt,J)?0:(typeof F._calculateChangedBits=="function"?F._calculateChangedBits(mt,J):1073741823)|0,J===0){if(fe.children===I.children&&!ci.current){y=fu(g,y,A);break e}}else for(mt=y.child,mt!==null&&(mt.return=y);mt!==null;){var Ct=mt.dependencies;if(Ct!==null){fe=mt.child;for(var Mt=Ct.firstContext;Mt!==null;){if(Mt.context===F&&(Mt.observedBits&J)!=0){mt.tag===1&&(Mt=p0(A,null),Mt.tag=2,K0(mt,Mt)),mt.expirationTime=y&&g<=y}function Sl(g,y){var A=g.firstSuspendedTime,F=g.lastSuspendedTime;Ay||A===0)&&(g.lastSuspendedTime=y),y<=g.lastPingedTime&&(g.lastPingedTime=0),y<=g.lastExpiredTime&&(g.lastExpiredTime=0)}function _s(g,y){y>g.firstPendingTime&&(g.firstPendingTime=y);var A=g.firstSuspendedTime;A!==0&&(y>=A?g.firstSuspendedTime=g.lastSuspendedTime=g.nextKnownPendingLevel=0:y>=g.lastSuspendedTime&&(g.lastSuspendedTime=y+1),y>g.nextKnownPendingLevel&&(g.nextKnownPendingLevel=y))}function oa(g,y){var A=g.lastExpiredTime;(A===0||A>y)&&(g.lastExpiredTime=y)}function n2(g){var y=g._reactInternalFiber;if(y===void 0)throw typeof g.render=="function"?Error(t(188)):Error(t(268,Object.keys(g)));return g=$e(y),g===null?null:g.stateNode}function la(g,y){g=g.memoizedState,g!==null&&g.dehydrated!==null&&g.retryTime{"use strict";Object.defineProperty(Qf,"__esModule",{value:!0});var JK=0;Qf.__interactionsRef=null;Qf.__subscriberRef=null;Qf.unstable_clear=function(i){return i()};Qf.unstable_getCurrent=function(){return null};Qf.unstable_getThreadID=function(){return++JK};Qf.unstable_trace=function(i,o,f){return f()};Qf.unstable_wrap=function(i){return i};Qf.unstable_subscribe=function(){};Qf.unstable_unsubscribe=function(){}});var g9=ce(au=>{"use strict";process.env.NODE_ENV!=="production"&&function(){"use strict";Object.defineProperty(au,"__esModule",{value:!0});var i=!0,o=0,f=0,p=0;au.__interactionsRef=null,au.__subscriberRef=null,i&&(au.__interactionsRef={current:new Set},au.__subscriberRef={current:null});function E(ge){if(!i)return ge();var ze=au.__interactionsRef.current;au.__interactionsRef.current=new Set;try{return ge()}finally{au.__interactionsRef.current=ze}}function t(){return i?au.__interactionsRef.current:null}function k(){return++p}function L(ge,ze,pe){var Oe=arguments.length>3&&arguments[3]!==void 0?arguments[3]:o;if(!i)return pe();var le={__count:1,id:f++,name:ge,timestamp:ze},Ue=au.__interactionsRef.current,Ge=new Set(Ue);Ge.add(le),au.__interactionsRef.current=Ge;var rt=au.__subscriberRef.current,wt;try{rt!==null&&rt.onInteractionTraced(le)}finally{try{rt!==null&&rt.onWorkStarted(Ge,Oe)}finally{try{wt=pe()}finally{au.__interactionsRef.current=Ue;try{rt!==null&&rt.onWorkStopped(Ge,Oe)}finally{le.__count--,rt!==null&&le.__count===0&&rt.onInteractionScheduledWorkCompleted(le)}}}}return wt}function N(ge){var ze=arguments.length>1&&arguments[1]!==void 0?arguments[1]:o;if(!i)return ge;var pe=au.__interactionsRef.current,Oe=au.__subscriberRef.current;Oe!==null&&Oe.onWorkScheduled(pe,ze),pe.forEach(function(Ge){Ge.__count++});var le=!1;function Ue(){var Ge=au.__interactionsRef.current;au.__interactionsRef.current=pe,Oe=au.__subscriberRef.current;try{var rt;try{Oe!==null&&Oe.onWorkStarted(pe,ze)}finally{try{rt=ge.apply(void 0,arguments)}finally{au.__interactionsRef.current=Ge,Oe!==null&&Oe.onWorkStopped(pe,ze)}}return rt}finally{le||(le=!0,pe.forEach(function(wt){wt.__count--,Oe!==null&&wt.__count===0&&Oe.onInteractionScheduledWorkCompleted(wt)}))}}return Ue.cancel=function(){Oe=au.__subscriberRef.current;try{Oe!==null&&Oe.onWorkCanceled(pe,ze)}finally{pe.forEach(function(rt){rt.__count--,Oe&&rt.__count===0&&Oe.onInteractionScheduledWorkCompleted(rt)})}},Ue}var C=null;i&&(C=new Set);function U(ge){i&&(C.add(ge),C.size===1&&(au.__subscriberRef.current={onInteractionScheduledWorkCompleted:ne,onInteractionTraced:W,onWorkCanceled:he,onWorkScheduled:m,onWorkStarted:we,onWorkStopped:Se}))}function q(ge){i&&(C.delete(ge),C.size===0&&(au.__subscriberRef.current=null))}function W(ge){var ze=!1,pe=null;if(C.forEach(function(Oe){try{Oe.onInteractionTraced(ge)}catch(le){ze||(ze=!0,pe=le)}}),ze)throw pe}function ne(ge){var ze=!1,pe=null;if(C.forEach(function(Oe){try{Oe.onInteractionScheduledWorkCompleted(ge)}catch(le){ze||(ze=!0,pe=le)}}),ze)throw pe}function m(ge,ze){var pe=!1,Oe=null;if(C.forEach(function(le){try{le.onWorkScheduled(ge,ze)}catch(Ue){pe||(pe=!0,Oe=Ue)}}),pe)throw Oe}function we(ge,ze){var pe=!1,Oe=null;if(C.forEach(function(le){try{le.onWorkStarted(ge,ze)}catch(Ue){pe||(pe=!0,Oe=Ue)}}),pe)throw Oe}function Se(ge,ze){var pe=!1,Oe=null;if(C.forEach(function(le){try{le.onWorkStopped(ge,ze)}catch(Ue){pe||(pe=!0,Oe=Ue)}}),pe)throw Oe}function he(ge,ze){var pe=!1,Oe=null;if(C.forEach(function(le){try{le.onWorkCanceled(ge,ze)}catch(Ue){pe||(pe=!0,Oe=Ue)}}),pe)throw Oe}au.unstable_clear=E,au.unstable_getCurrent=t,au.unstable_getThreadID=k,au.unstable_trace=L,au.unstable_wrap=N,au.unstable_subscribe=U,au.unstable_unsubscribe=q}()});var _9=ce((Une,fw)=>{"use strict";process.env.NODE_ENV==="production"?fw.exports=y9():fw.exports=g9()});var E9=ce((jne,hg)=>{"use strict";process.env.NODE_ENV!=="production"&&(hg.exports=function i(o){"use strict";var f=eg(),p=su(),E=HD(),t=h4(),k=_9(),L=0,N=1,C=2,U=3,q=4,W=5,ne=6,m=7,we=8,Se=9,he=10,ge=11,ze=12,pe=13,Oe=14,le=15,Ue=16,Ge=17,rt=18,wt=19,xt=20,$e=21,ft=function(){};ft=function(a,c){for(var _=arguments.length,T=new Array(_>2?_-2:0),R=2;R<_;R++)T[R-2]=arguments[R];if(c===void 0)throw new Error("`warningWithoutStack(condition, format, ...args)` requires a warning message argument");if(T.length>8)throw new Error("warningWithoutStack() currently supports at most 8 arguments.");if(!a){if(typeof console!="undefined"){var j=T.map(function(oe){return""+oe});j.unshift("Warning: "+c),Function.prototype.apply.call(console.error,console,j)}try{var V=0,te="Warning: "+c.replace(/%s/g,function(){return T[V++]});throw new Error(te)}catch(oe){}}};var Ke=ft;function jt(a){return a._reactInternalFiber}function $t(a,c){a._reactInternalFiber=c}var at=p.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;at.hasOwnProperty("ReactCurrentDispatcher")||(at.ReactCurrentDispatcher={current:null}),at.hasOwnProperty("ReactCurrentBatchConfig")||(at.ReactCurrentBatchConfig={suspense:null});var Q=typeof Symbol=="function"&&Symbol.for,ae=Q?Symbol.for("react.element"):60103,Ce=Q?Symbol.for("react.portal"):60106,ue=Q?Symbol.for("react.fragment"):60107,je=Q?Symbol.for("react.strict_mode"):60108,ct=Q?Symbol.for("react.profiler"):60114,At=Q?Symbol.for("react.provider"):60109,en=Q?Symbol.for("react.context"):60110,ln=Q?Symbol.for("react.concurrent_mode"):60111,An=Q?Symbol.for("react.forward_ref"):60112,nr=Q?Symbol.for("react.suspense"):60113,un=Q?Symbol.for("react.suspense_list"):60120,Wt=Q?Symbol.for("react.memo"):60115,vr=Q?Symbol.for("react.lazy"):60116,w=Q?Symbol.for("react.fundamental"):60117,Ut=Q?Symbol.for("react.responder"):60118,Vn=Q?Symbol.for("react.scope"):60119,fr=typeof Symbol=="function"&&Symbol.iterator,Fr="@@iterator";function ur(a){if(a===null||typeof a!="object")return null;var c=fr&&a[fr]||a[Fr];return typeof c=="function"?c:null}var br=Ke;br=function(a,c){if(!a){for(var _=at.ReactDebugCurrentFrame,T=_.getStackAddendum(),R=arguments.length,j=new Array(R>2?R-2:0),V=2;V import('./MyComponent'))`,T),a._status=So,a._result=R}},function(T){a._status===a0&&(a._status=Go,a._result=T)})}}function Ko(a,c,_){var T=c.displayName||c.name||"";return a.displayName||(T!==""?_+"("+T+")":_)}function qt(a){if(a==null)return null;if(typeof a.tag=="number"&&Ke(!1,"Received an unexpected object in getComponentName(). This is likely a bug in React. Please file an issue."),typeof a=="function")return a.displayName||a.name||null;if(typeof a=="string")return a;switch(a){case ue:return"Fragment";case Ce:return"Portal";case ct:return"Profiler";case je:return"StrictMode";case nr:return"Suspense";case un:return"SuspenseList"}if(typeof a=="object")switch(a.$$typeof){case en:return"Context.Consumer";case At:return"Context.Provider";case An:return Ko(a,a.render,"ForwardRef");case Wt:return qt(a.type);case vr:{var c=a,_=Os(c);if(_)return qt(_);break}}return null}var _i=0,eu=1,ai=2,mr=4,Xo=6,W0=8,Lu=16,V0=32,Hr=64,To=128,Co=256,L0=512,tu=1024,Si=1028,ks=932,Hl=2047,F0=2048,f0=4096,Pr=!0,Ei=!0,G0=!0,fi=!0,Zt=!0,Ln=!0,Di=!1,ci=!1,Ht=!1,Du=!1,Yi=!1,Y0=!0,Ui=!1,Wl=!1,xo=!1,ni=!1,oo=!1,Vl=at.ReactCurrentOwner;function Ao(a){var c=a,_=a;if(a.alternate)for(;c.return;)c=c.return;else{var T=c;do c=T,(c.effectTag&(ai|tu))!==_i&&(_=c.return),T=c.return;while(T)}return c.tag===U?_:null}function Ms(a){return Ao(a)===a}function Xn(a){{var c=Vl.current;if(c!==null&&c.tag===N){var _=c,T=_.stateNode;T._warnedAboutRefsInRender||Ke(!1,"%s is accessing isMounted inside its render() function. render() should be a pure function of props and state. It should never access something that requires stale data from the previous render, such as refs. Move this logic to componentDidMount and componentDidUpdate instead.",qt(_.type)||"A component"),T._warnedAboutRefsInRender=!0}}var R=jt(a);return R?Ao(R)===R:!1}function Qo(a){if(Ao(a)!==a)throw Error("Unable to find node on an unmounted component.")}function lo(a){var c=a.alternate;if(!c){var _=Ao(a);if(_===null)throw Error("Unable to find node on an unmounted component.");return _!==a?null:a}for(var T=a,R=c;;){var j=T.return;if(j===null)break;var V=j.alternate;if(V===null){var te=j.return;if(te!==null){T=R=te;continue}break}if(j.child===V.child){for(var oe=j.child;oe;){if(oe===T)return Qo(j),a;if(oe===R)return Qo(j),c;oe=oe.sibling}throw Error("Unable to find node on an unmounted component.")}if(T.return!==R.return)T=j,R=V;else{for(var Ie=!1,Ye=j.child;Ye;){if(Ye===T){Ie=!0,T=j,R=V;break}if(Ye===R){Ie=!0,R=j,T=V;break}Ye=Ye.sibling}if(!Ie){for(Ye=V.child;Ye;){if(Ye===T){Ie=!0,T=V,R=j;break}if(Ye===R){Ie=!0,R=V,T=j;break}Ye=Ye.sibling}if(!Ie)throw Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.")}}if(T.alternate!==R)throw Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.")}if(T.tag!==U)throw Error("Unable to find node on an unmounted component.");return T.stateNode.current===T?a:c}function b0(a){var c=lo(a);if(!c)return null;for(var _=c;;){if(_.tag===W||_.tag===ne)return _;if(_.child){_.child.return=_,_=_.child;continue}if(_===c)return null;for(;!_.sibling;){if(!_.return||_.return===c)return null;_=_.return}_.sibling.return=_.return,_=_.sibling}return null}function yl(a){var c=lo(a);if(!c)return null;for(var _=c;;){if(_.tag===W||_.tag===ne||Ht&&_.tag===xt)return _;if(_.child&&_.tag!==q){_.child.return=_,_=_.child;continue}if(_===c)return null;for(;!_.sibling;){if(!_.return||_.return===c)return null;_=_.return}_.sibling.return=_.return,_=_.sibling}return null}var Ro=o.getPublicInstance,Et=o.getRootHostContext,Pt=o.getChildHostContext,Bn=o.prepareForCommit,Ir=o.resetAfterCommit,ji=o.createInstance,Wr=o.appendInitialChild,wu=o.finalizeInitialChildren,c0=o.prepareUpdate,Ti=o.shouldSetTextContent,d0=o.shouldDeprioritizeSubtree,as=o.createTextInstance,St=o.setTimeout,so=o.clearTimeout,Jo=o.noTimeout,Gl=o.now,Fu=o.isPrimaryRenderer,fs=o.warnsIfNotActing,P0=o.supportsMutation,X=o.supportsPersistence,_e=o.supportsHydration,Ne=o.mountResponderInstance,Me=o.unmountResponderInstance,dt=o.getFundamentalComponentInstance,Hn=o.mountFundamentalComponent,Dn=o.shouldUpdateFundamentalComponent,or=o.getInstanceFromNode,mi=o.appendChild,Su=o.appendChildToContainer,bu=o.commitTextUpdate,Pu=o.commitMount,mu=o.commitUpdate,yi=o.insertBefore,Oo=o.insertInContainerBefore,Tu=o.removeChild,ao=o.removeChildFromContainer,Iu=o.resetTextContent,Oa=o.hideInstance,p0=o.hideTextInstance,Zs=o.unhideInstance,K0=o.unhideTextInstance,$s=o.updateFundamentalComponent,ka=o.unmountFundamentalComponent,cs=o.cloneInstance,w0=o.createContainerChildSet,Gn=o.appendChildToContainerChildSet,ic=o.finalizeContainerChildren,ri=o.replaceContainerChildren,Gr=o.cloneHiddenInstance,Yl=o.cloneHiddenTextInstance,ea=o.cloneInstance,lf=o.canHydrateInstance,Ns=o.canHydrateTextInstance,Ma=o.canHydrateSuspenseInstance,Ls=o.isSuspenseInstancePending,h0=o.isSuspenseInstanceFallback,Fs=o.registerSuspenseInstanceRetry,Ni=o.getNextHydratableSibling,B=o.getFirstHydratableChild,z=o.hydrateInstance,G=o.hydrateTextInstance,$=o.hydrateSuspenseInstance,De=o.getNextHydratableInstanceAfterSuspenseInstance,me=o.commitHydratedContainer,xe=o.commitHydratedSuspenseInstance,Z=o.clearSuspenseBoundary,ke=o.clearSuspenseBoundaryFromContainer,Xe=o.didNotMatchHydratedContainerTextInstance,ht=o.didNotMatchHydratedTextInstance,ie=o.didNotHydrateContainerInstance,qe=o.didNotHydrateInstance,tt=o.didNotFindHydratableContainerInstance,Tt=o.didNotFindHydratableContainerTextInstance,kt=o.didNotFindHydratableContainerSuspenseInstance,bt=o.didNotFindHydratableInstance,on=o.didNotFindHydratableTextInstance,tn=o.didNotFindHydratableSuspenseInstance,Lt=/^(.*)[\\\/]/,gn=function(a,c,_){var T="";if(c){var R=c.fileName,j=R.replace(Lt,"");if(/^index\./.test(j)){var V=R.match(Lt);if(V){var te=V[1];if(te){var oe=te.replace(Lt,"");j=oe+"/"+j}}}T=" (at "+j+":"+c.lineNumber+")"}else _&&(T=" (created by "+_+")");return` - in `+(a||"Unknown")+T},lr=at.ReactDebugCurrentFrame;function Qn(a){switch(a.tag){case U:case q:case ne:case m:case he:case Se:return"";default:var c=a._debugOwner,_=a._debugSource,T=qt(a.type),R=null;return c&&(R=qt(c.type)),gn(T,_,R)}}function _r(a){var c="",_=a;do c+=Qn(_),_=_.return;while(_);return c}var Cn=null,Ar=null;function v0(){{if(Cn===null)return null;var a=Cn._debugOwner;if(a!==null&&typeof a!="undefined")return qt(a.type)}return null}function Rr(){return Cn===null?"":_r(Cn)}function nt(){lr.getCurrentStack=null,Cn=null,Ar=null}function _t(a){lr.getCurrentStack=Rr,Cn=a,Ar=null}function Ze(a){Ar=a}var Ft="\u269B",nn="\u26D4",sn=typeof performance!="undefined"&&typeof performance.mark=="function"&&typeof performance.clearMarks=="function"&&typeof performance.measure=="function"&&typeof performance.clearMeasures=="function",Yn=null,yr=null,nu=null,Cu=!1,S0=!1,X0=!1,xu=0,di=0,ko=new Set,Zo=function(a){return Ft+" "+a},sf=function(a,c){var _=c?nn+" ":Ft+" ",T=c?" Warning: "+c:"";return""+_+a+T},gl=function(a){performance.mark(Zo(a))},af=function(a){performance.clearMarks(Zo(a))},Mo=function(a,c,_){var T=Zo(c),R=sf(a,_);try{performance.measure(R,T)}catch(j){}performance.clearMarks(T),performance.clearMeasures(R)},ds=function(a,c){return a+" (#"+c+")"},bs=function(a,c,_){return _===null?a+" ["+(c?"update":"mount")+"]":a+"."+_},No=function(a,c){var _=qt(a.type)||"Unknown",T=a._debugID,R=a.alternate!==null,j=bs(_,R,c);if(Cu&&ko.has(j))return!1;ko.add(j);var V=ds(j,T);return gl(V),!0},Lo=function(a,c){var _=qt(a.type)||"Unknown",T=a._debugID,R=a.alternate!==null,j=bs(_,R,c),V=ds(j,T);af(V)},ps=function(a,c,_){var T=qt(a.type)||"Unknown",R=a._debugID,j=a.alternate!==null,V=bs(T,j,c),te=ds(V,R);Mo(V,te,_)},Vu=function(a){switch(a.tag){case U:case W:case ne:case q:case m:case he:case Se:case we:return!0;default:return!1}},yu=function(){yr!==null&&nu!==null&&Lo(nu,yr),nu=null,yr=null,X0=!1},pi=function(){for(var a=Yn;a;)a._debugIsCurrentlyTiming&&ps(a,null,null),a=a.return},T0=function(a){a.return!==null&&T0(a.return),a._debugIsCurrentlyTiming&&No(a,null)},Q0=function(){Yn!==null&&T0(Yn)};function Fo(){Pr&&di++}function ta(){Pr&&(Cu&&(S0=!0),yr!==null&&yr!=="componentWillMount"&&yr!=="componentWillReceiveProps"&&(X0=!0))}function Kl(a){if(Pr){if(!sn||Vu(a)||(Yn=a,!No(a,null)))return;a._debugIsCurrentlyTiming=!0}}function Ki(a){if(Pr){if(!sn||Vu(a))return;a._debugIsCurrentlyTiming=!1,Lo(a,null)}}function Yr(a){if(Pr){if(!sn||Vu(a)||(Yn=a.return,!a._debugIsCurrentlyTiming))return;a._debugIsCurrentlyTiming=!1,ps(a,null,null)}}function fo(a){if(Pr){if(!sn||Vu(a)||(Yn=a.return,!a._debugIsCurrentlyTiming))return;a._debugIsCurrentlyTiming=!1;var c=a.tag===pe?"Rendering was suspended":"An error was thrown inside this error boundary";ps(a,null,c)}}function Oi(a,c){if(Pr){if(!sn||(yu(),!No(a,c)))return;nu=a,yr=c}}function gi(){if(Pr){if(!sn)return;if(yr!==null&&nu!==null){var a=X0?"Scheduled a cascading update":null;ps(nu,yr,a)}yr=null,nu=null}}function ff(a){if(Pr){if(Yn=a,!sn)return;xu=0,gl("(React Tree Reconciliation)"),Q0()}}function cf(a,c){if(Pr){if(!sn)return;var _=null;if(a!==null)if(a.tag===U)_="A top-level update interrupted the previous render";else{var T=qt(a.type)||"Unknown";_="An update to "+T+" interrupted the previous render"}else xu>1&&(_="There were cascading updates");xu=0;var R=c?"(React Tree Reconciliation: Completed Root)":"(React Tree Reconciliation: Yielded)";pi(),Mo(R,"(React Tree Reconciliation)",_)}}function J0(){if(Pr){if(!sn)return;Cu=!0,S0=!1,ko.clear(),gl("(Committing Changes)")}}function Z0(){if(Pr){if(!sn)return;var a=null;S0?a="Lifecycle hook scheduled a cascading update":xu>0&&(a="Caused by a cascading update in earlier commit"),S0=!1,xu++,Cu=!1,ko.clear(),Mo("(Committing Changes)","(Committing Changes)",a)}}function Te(){if(Pr){if(!sn)return;di=0,gl("(Committing Snapshot Effects)")}}function et(){if(Pr){if(!sn)return;var a=di;di=0,Mo("(Committing Snapshot Effects: "+a+" Total)","(Committing Snapshot Effects)",null)}}function Ve(){if(Pr){if(!sn)return;di=0,gl("(Committing Host Effects)")}}function Gt(){if(Pr){if(!sn)return;var a=di;di=0,Mo("(Committing Host Effects: "+a+" Total)","(Committing Host Effects)",null)}}function Yt(){if(Pr){if(!sn)return;di=0,gl("(Calling Lifecycle Methods)")}}function sr(){if(Pr){if(!sn)return;var a=di;di=0,Mo("(Calling Lifecycle Methods: "+a+" Total)","(Calling Lifecycle Methods)",null)}}var Br=[],wn;wn=[];var fu=-1;function Gu(a){return{current:a}}function Kr(a,c){if(fu<0){Ke(!1,"Unexpected pop.");return}c!==wn[fu]&&Ke(!1,"Unexpected Fiber popped."),a.current=Br[fu],Br[fu]=null,wn[fu]=null,fu--}function Vr(a,c,_){fu++,Br[fu]=a.current,wn[fu]=_,a.current=c}var Bu;Bu={};var Sn={};Object.freeze(Sn);var C0=Gu(Sn),Au=Gu(!1),ei=Sn;function _l(a,c,_){return ni?Sn:_&&zi(c)?ei:C0.current}function Ps(a,c,_){if(!ni){var T=a.stateNode;T.__reactInternalMemoizedUnmaskedChildContext=c,T.__reactInternalMemoizedMaskedChildContext=_}}function Uu(a,c){if(ni)return Sn;var _=a.type,T=_.contextTypes;if(!T)return Sn;var R=a.stateNode;if(R&&R.__reactInternalMemoizedUnmaskedChildContext===c)return R.__reactInternalMemoizedMaskedChildContext;var j={};for(var V in T)j[V]=c[V];{var te=qt(_)||"Unknown";E(T,j,"context",te,Rr)}return R&&Ps(a,c,j),j}function na(){return ni?!1:Au.current}function zi(a){if(ni)return!1;var c=a.childContextTypes;return c!=null}function Is(a){ni||(Kr(Au,a),Kr(C0,a))}function x0(a){ni||(Kr(Au,a),Kr(C0,a))}function Li(a,c,_){if(!ni){if(C0.current!==Sn)throw Error("Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.");Vr(C0,c,a),Vr(Au,_,a)}}function A0(a,c,_){if(ni)return _;var T=a.stateNode,R=c.childContextTypes;if(typeof T.getChildContext!="function"){{var j=qt(c)||"Unknown";Bu[j]||(Bu[j]=!0,Ke(!1,"%s.childContextTypes is specified but there is no getChildContext() method on the instance. You can either define getChildContext() on %s or remove childContextTypes from it.",j,j))}return _}var V;Ze("getChildContext"),Oi(a,"getChildContext"),V=T.getChildContext(),gi(),Ze(null);for(var te in V)if(!(te in R))throw Error((qt(c)||"Unknown")+'.getChildContext(): key "'+te+'" is not defined in childContextTypes.');{var oe=qt(c)||"Unknown";E(R,V,"child context",oe,Rr)}return f({},_,{},V)}function Fi(a){if(ni)return!1;var c=a.stateNode,_=c&&c.__reactInternalMemoizedMergedChildContext||Sn;return ei=C0.current,Vr(C0,_,a),Vr(Au,Au.current,a),!0}function $o(a,c,_){if(!ni){var T=a.stateNode;if(!T)throw Error("Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.");if(_){var R=A0(a,c,ei);T.__reactInternalMemoizedMergedChildContext=R,Kr(Au,a),Kr(C0,a),Vr(C0,R,a),Vr(Au,_,a)}else Kr(Au,a),Vr(Au,_,a)}}function El(a){if(ni)return Sn;if(!(Ms(a)&&a.tag===N))throw Error("Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.");var c=a;do{switch(c.tag){case U:return c.stateNode.context;case N:{var _=c.type;if(zi(_))return c.stateNode.__reactInternalMemoizedMergedChildContext;break}}c=c.return}while(c!==null);throw Error("Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.")}var I0=1,R0=2,co=t.unstable_runWithPriority,Ru=t.unstable_scheduleCallback,Yu=t.unstable_cancelCallback,Xl=t.unstable_shouldYield,hs=t.unstable_requestPaint,ra=t.unstable_now,df=t.unstable_getCurrentPriorityLevel,Ku=t.unstable_ImmediatePriority,vs=t.unstable_UserBlockingPriority,wr=t.unstable_NormalPriority,$0=t.unstable_LowPriority,Xi=t.unstable_IdlePriority;if(Ln&&!(k.__interactionsRef!=null&&k.__interactionsRef.current!=null))throw Error("It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at http://fb.me/react-profiling");var ru={},Ci=99,Xr=98,Wn=97,Xu=96,m0=95,y0=90,kn=Xl,se=hs!==void 0?hs:function(){},re=null,Le=null,Ae=!1,ot=ra(),vt=ot<1e4?ra:function(){return ra()-ot};function Xt(){switch(df()){case Ku:return Ci;case vs:return Xr;case wr:return Wn;case $0:return Xu;case Xi:return m0;default:throw Error("Unknown priority level.")}}function xn(a){switch(a){case Ci:return Ku;case Xr:return vs;case Wn:return wr;case Xu:return $0;case m0:return Xi;default:throw Error("Unknown priority level.")}}function _n(a,c){var _=xn(a);return co(_,c)}function yn(a,c,_){var T=xn(a);return Ru(T,c,_)}function En(a){return re===null?(re=[a],Le=Ru(Ku,xi)):re.push(a),ru}function er(a){a!==ru&&Yu(a)}function It(){if(Le!==null){var a=Le;Le=null,Yu(a)}xi()}function xi(){if(!Ae&&re!==null){Ae=!0;var a=0;try{var c=!0,_=re;_n(Ci,function(){for(;a<_.length;a++){var T=_[a];do T=T(c);while(T!==null)}}),re=null}catch(T){throw re!==null&&(re=re.slice(a+1)),Ru(Ku,It),T}finally{Ae=!1}}}var Sr=0,cr=1,Y=2,Qr=4,Jr=8,Ur=1073741823,lt=0,hi=1,Qi=2,g0=3,bn=Ur,Qu=bn-1,eo=10,po=Qu-1;function Ju(a){return po-(a/eo|0)}function bo(a){return(po-a)*eo}function to(a,c){return((a/c|0)+1)*c}function Na(a,c,_){return po-to(po-a+c/eo,_/eo)}var pf=5e3,uc=250;function ms(a){return Na(a,pf,uc)}function ia(a,c){return Na(a,c,uc)}var B0=500,oc=100;function La(a){return Na(a,B0,oc)}function gd(a){return g0++}function $1(a,c){if(c===bn)return Ci;if(c===hi||c===Qi)return m0;var _=bo(c)-bo(a);return _<=0?Ci:_<=B0+oc?Xr:_<=pf+uc?Wn:m0}function e2(a,c){return a===c&&(a!==0||1/a==1/c)||a!==a&&c!==c}var ho=typeof Object.is=="function"?Object.is:e2,Uc=Object.prototype.hasOwnProperty;function Dl(a,c){if(ho(a,c))return!0;if(typeof a!="object"||a===null||typeof c!="object"||c===null)return!1;var _=Object.keys(a),T=Object.keys(c);if(_.length!==T.length)return!1;for(var R=0;R<_.length;R++)if(!Uc.call(c,_[R])||!ho(a[_[R]],c[_[R]]))return!1;return!0}var el=function(){};{var _d=function(a){for(var c=arguments.length,_=new Array(c>1?c-1:0),T=1;T2?_-2:0),R=2;R<_;R++)T[R-2]=arguments[R];_d.apply(void 0,[c].concat(T))}}}var Bs=el,wl={recordUnsafeLifecycleWarnings:function(a,c){},flushPendingUnsafeLifecycleWarnings:function(){},recordLegacyContextWarning:function(a,c){},flushLegacyContextWarning:function(){},discardPendingWarnings:function(){}};{var t2=function(a){for(var c=null,_=a;_!==null;)_.mode&cr&&(c=_),_=_.return;return c},Po=function(a){var c=[];return a.forEach(function(_){c.push(_)}),c.sort().join(", ")},Fa=[],ba=[],Pa=[],ua=[],ys=[],gs=[],Ql=new Set;wl.recordUnsafeLifecycleWarnings=function(a,c){Ql.has(a.type)||(typeof c.componentWillMount=="function"&&c.componentWillMount.__suppressDeprecationWarning!==!0&&Fa.push(a),a.mode&cr&&typeof c.UNSAFE_componentWillMount=="function"&&ba.push(a),typeof c.componentWillReceiveProps=="function"&&c.componentWillReceiveProps.__suppressDeprecationWarning!==!0&&Pa.push(a),a.mode&cr&&typeof c.UNSAFE_componentWillReceiveProps=="function"&&ua.push(a),typeof c.componentWillUpdate=="function"&&c.componentWillUpdate.__suppressDeprecationWarning!==!0&&ys.push(a),a.mode&cr&&typeof c.UNSAFE_componentWillUpdate=="function"&&gs.push(a))},wl.flushPendingUnsafeLifecycleWarnings=function(){var a=new Set;Fa.length>0&&(Fa.forEach(function(Nt){a.add(qt(Nt.type)||"Component"),Ql.add(Nt.type)}),Fa=[]);var c=new Set;ba.length>0&&(ba.forEach(function(Nt){c.add(qt(Nt.type)||"Component"),Ql.add(Nt.type)}),ba=[]);var _=new Set;Pa.length>0&&(Pa.forEach(function(Nt){_.add(qt(Nt.type)||"Component"),Ql.add(Nt.type)}),Pa=[]);var T=new Set;ua.length>0&&(ua.forEach(function(Nt){T.add(qt(Nt.type)||"Component"),Ql.add(Nt.type)}),ua=[]);var R=new Set;ys.length>0&&(ys.forEach(function(Nt){R.add(qt(Nt.type)||"Component"),Ql.add(Nt.type)}),ys=[]);var j=new Set;if(gs.length>0&&(gs.forEach(function(Nt){j.add(qt(Nt.type)||"Component"),Ql.add(Nt.type)}),gs=[]),c.size>0){var V=Po(c);Ke(!1,`Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move code with side effects to componentDidMount, and set initial state in the constructor. - -Please update the following components: %s`,V)}if(T.size>0){var te=Po(T);Ke(!1,`Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state - -Please update the following components: %s`,te)}if(j.size>0){var oe=Po(j);Ke(!1,`Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. - -Please update the following components: %s`,oe)}if(a.size>0){var Ie=Po(a);Bs(!1,`componentWillMount has been renamed, and is not recommended for use. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move code with side effects to componentDidMount, and set initial state in the constructor. -* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder. - -Please update the following components: %s`,Ie)}if(_.size>0){var Ye=Po(_);Bs(!1,`componentWillReceiveProps has been renamed, and is not recommended for use. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state -* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder. - -Please update the following components: %s`,Ye)}if(R.size>0){var pt=Po(R);Bs(!1,`componentWillUpdate has been renamed, and is not recommended for use. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder. - -Please update the following components: %s`,pt)}};var Io=new Map,hf=new Set;wl.recordLegacyContextWarning=function(a,c){var _=t2(a);if(_===null){Ke(!1,"Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue.");return}if(!hf.has(a.type)){var T=Io.get(_);(a.type.contextTypes!=null||a.type.childContextTypes!=null||c!==null&&typeof c.getChildContext=="function")&&(T===void 0&&(T=[],Io.set(_,T)),T.push(a))}},wl.flushLegacyContextWarning=function(){Io.forEach(function(a,c){var _=new Set;a.forEach(function(j){_.add(qt(j.type)||"Component"),hf.add(j.type)});var T=Po(_),R=_r(c);Ke(!1,`Legacy context API has been detected within a strict-mode tree. - -The old API will be supported in all 16.x releases, but applications using it should migrate to the new version. - -Please update the following components: %s - -Learn more about this warning here: https://fb.me/react-legacy-context%s`,T,R)})},wl.discardPendingWarnings=function(){Fa=[],ba=[],Pa=[],ua=[],ys=[],gs=[],Io=new Map}}var tl=null,ju=null,Ia=function(a){tl=a};function Zu(a){{if(tl===null)return a;var c=tl(a);return c===void 0?a:c.current}}function U0(a){return Zu(a)}function vf(a){{if(tl===null)return a;var c=tl(a);if(c===void 0){if(a!=null&&typeof a.render=="function"){var _=Zu(a.render);if(a.render!==_){var T={$$typeof:An,render:_};return a.displayName!==void 0&&(T.displayName=a.displayName),T}}return a}return c.current}}function jc(a,c){{if(tl===null)return!1;var _=a.elementType,T=c.type,R=!1,j=typeof T=="object"&&T!==null?T.$$typeof:null;switch(a.tag){case N:{typeof T=="function"&&(R=!0);break}case L:{(typeof T=="function"||j===vr)&&(R=!0);break}case ge:{(j===An||j===vr)&&(R=!0);break}case Oe:case le:{(j===Wt||j===vr)&&(R=!0);break}default:return!1}if(R){var V=tl(_);if(V!==void 0&&V===tl(T))return!0}return!1}}function lc(a){{if(tl===null||typeof WeakSet!="function")return;ju===null&&(ju=new WeakSet),ju.add(a)}}var Sl=function(a,c){{if(tl===null)return;var _=c.staleFamilies,T=c.updatedFamilies;Xa(),xp(function(){oa(a.current,T,_)})}},_s=function(a,c){{if(a.context!==Sn)return;Xa(),fv(function(){l_(c,a,null,null)})}};function oa(a,c,_){{var T=a.alternate,R=a.child,j=a.sibling,V=a.tag,te=a.type,oe=null;switch(V){case L:case le:case N:oe=te;break;case ge:oe=te.render;break;default:break}if(tl===null)throw new Error("Expected resolveFamily to be set during hot reload.");var Ie=!1,Ye=!1;if(oe!==null){var pt=tl(oe);pt!==void 0&&(_.has(pt)?Ye=!0:c.has(pt)&&(V===N?Ye=!0:Ie=!0))}ju!==null&&(ju.has(a)||T!==null&&ju.has(T))&&(Ye=!0),Ye&&(a._debugNeedsRemount=!0),(Ye||Ie)&&dl(a,bn),R!==null&&!Ye&&oa(R,c,_),j!==null&&oa(j,c,_)}}var n2=function(a,c){{var _=new Set,T=new Set(c.map(function(R){return R.current}));return la(a.current,T,_),_}};function la(a,c,_){{var T=a.child,R=a.sibling,j=a.tag,V=a.type,te=null;switch(j){case L:case le:case N:te=V;break;case ge:te=V.render;break;default:break}var oe=!1;te!==null&&c.has(te)&&(oe=!0),oe?sc(a,_):T!==null&&la(T,c,_),R!==null&&la(R,c,_)}}function sc(a,c){{var _=zc(a,c);if(_)return;for(var T=a;;){switch(T.tag){case W:c.add(T.stateNode);return;case q:c.add(T.stateNode.containerInfo);return;case U:c.add(T.stateNode.containerInfo);return}if(T.return===null)throw new Error("Expected to reach root first.");T=T.return}}}function zc(a,c){for(var _=a,T=!1;;){if(_.tag===W)T=!0,c.add(_.stateNode);else if(_.child!==null){_.child.return=_,_=_.child;continue}if(_===a)return T;for(;_.sibling===null;){if(_.return===null||_.return===a)return T;_=_.return}_.sibling.return=_.return,_=_.sibling}return!1}function bi(a,c){if(a&&a.defaultProps){var _=f({},c),T=a.defaultProps;for(var R in T)_[R]===void 0&&(_[R]=T[R]);return _}return c}function g(a){if(Yo(a),a._status!==So)throw a._result;return a._result}var y=Gu(null),A;A={};var F=null,I=null,J=null,fe=!1;function mt(){F=null,I=null,J=null,fe=!1}function Ct(){fe=!0}function Mt(){fe=!1}function Er(a,c){var _=a.type._context;Fu?(Vr(y,_._currentValue,a),_._currentValue=c,_._currentRenderer===void 0||_._currentRenderer===null||_._currentRenderer===A||Ke(!1,"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."),_._currentRenderer=A):(Vr(y,_._currentValue2,a),_._currentValue2=c,_._currentRenderer2===void 0||_._currentRenderer2===null||_._currentRenderer2===A||Ke(!1,"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."),_._currentRenderer2=A)}function $u(a){var c=y.current;Kr(y,a);var _=a.type._context;Fu?_._currentValue=c:_._currentValue2=c}function iu(a,c,_){if(ho(_,c))return 0;var T=typeof a._calculateChangedBits=="function"?a._calculateChangedBits(_,c):Ur;return(T&Ur)!==T&&Kt(!1,"calculateChangedBits: Expected the return value to be a 31-bit integer. Instead received: %s",T),T|0}function j0(a,c){for(var _=a;_!==null;){var T=_.alternate;if(_.childExpirationTime=c&&up(),_.firstContext=null)}}function He(a,c){if(fe&&Kt(!1,"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."),J!==a){if(!(c===!1||c===0)){var _;typeof c!="number"||c===Ur?(J=a,_=Ur):_=c;var T={context:a,observedBits:_,next:null};if(I===null){if(F===null)throw Error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().");I=T,F.dependencies={expirationTime:lt,firstContext:T,responders:null}}else I=I.next=T}}return Fu?a._currentValue:a._currentValue2}var Be=0,ut=1,Jt=2,jn=3,ti=!1,tr,ii;tr=!1,ii=null;function qi(a){var c={baseState:a,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null};return c}function jr(a){var c={baseState:a.baseState,firstUpdate:a.firstUpdate,lastUpdate:a.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null};return c}function gu(a,c){var _={expirationTime:a,suspenseConfig:c,tag:Be,payload:null,callback:null,next:null,nextEffect:null};return _.priority=Xt(),_}function Ba(a,c){a.lastUpdate===null?a.firstUpdate=a.lastUpdate=c:(a.lastUpdate.next=c,a.lastUpdate=c)}function Ua(a,c){var _=a.alternate,T,R;_===null?(T=a.updateQueue,R=null,T===null&&(T=a.updateQueue=qi(a.memoizedState))):(T=a.updateQueue,R=_.updateQueue,T===null?R===null?(T=a.updateQueue=qi(a.memoizedState),R=_.updateQueue=qi(_.memoizedState)):T=a.updateQueue=jr(R):R===null&&(R=_.updateQueue=jr(T))),R===null||T===R?Ba(T,c):T.lastUpdate===null||R.lastUpdate===null?(Ba(T,c),Ba(R,c)):(Ba(T,c),R.lastUpdate=c),a.tag===N&&(ii===T||R!==null&&ii===R)&&!tr&&(Ke(!1,"An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback."),tr=!0)}function r2(a,c){var _=a.updateQueue;_===null?_=a.updateQueue=qi(a.memoizedState):_=Ed(a,_),_.lastCapturedUpdate===null?_.firstCapturedUpdate=_.lastCapturedUpdate=c:(_.lastCapturedUpdate.next=c,_.lastCapturedUpdate=c)}function Ed(a,c){var _=a.alternate;return _!==null&&c===_.updateQueue&&(c=a.updateQueue=jr(c)),c}function Dd(a,c,_,T,R,j){switch(_.tag){case ut:{var V=_.payload;if(typeof V=="function"){Ct(),Ei&&a.mode&cr&&V.call(j,T,R);var te=V.call(j,T,R);return Mt(),te}return V}case jn:a.effectTag=a.effectTag&~f0|Hr;case Be:{var oe=_.payload,Ie;return typeof oe=="function"?(Ct(),Ei&&a.mode&cr&&oe.call(j,T,R),Ie=oe.call(j,T,R),Mt()):Ie=oe,Ie==null?T:f({},T,Ie)}case Jt:return ti=!0,T}return T}function mf(a,c,_,T,R){ti=!1,c=Ed(a,c),ii=c;for(var j=c.baseState,V=null,te=lt,oe=c.firstUpdate,Ie=j;oe!==null;){var Ye=oe.expirationTime;if(Ye from render. Or maybe you meant to call this function rather than return it."))}function yh(a){function c(it,Ot){if(!!a){var Je=it.lastEffect;Je!==null?(Je.nextEffect=Ot,it.lastEffect=Ot):it.firstEffect=it.lastEffect=Ot,Ot.nextEffect=null,Ot.effectTag=W0}}function _(it,Ot){if(!a)return null;for(var Je=Ot;Je!==null;)c(it,Je),Je=Je.sibling;return null}function T(it,Ot){for(var Je=new Map,Bt=Ot;Bt!==null;)Bt.key!==null?Je.set(Bt.key,Bt):Je.set(Bt.index,Bt),Bt=Bt.sibling;return Je}function R(it,Ot,Je){var Bt=wo(it,Ot,Je);return Bt.index=0,Bt.sibling=null,Bt}function j(it,Ot,Je){if(it.index=Je,!a)return Ot;var Bt=it.alternate;if(Bt!==null){var Mn=Bt.index;return Mnqr?(_u=ar,ar=null):_u=ar.sibling;var _0=Nt(it,ar,Je[qr],Bt);if(_0===null){ar===null&&(ar=_u);break}a&&ar&&_0.alternate===null&&c(it,ar),ou=j(_0,ou,qr),qu===null?oi=_0:qu.sibling=_0,qu=_0,ar=_u}if(qr===Je.length)return _(it,ar),oi;if(ar===null){for(;qrH0?(Cs=_u,_u=null):Cs=_u.sibling;var pl=Nt(it,_u,Hu.value,Bt);if(pl===null){_u===null&&(_u=Cs);break}a&&_u&&pl.alternate===null&&c(it,_u),_0=j(pl,_0,H0),qr===null?ou=pl:qr.sibling=pl,qr=pl,_u=Cs}if(Hu.done)return _(it,_u),ou;if(_u===null){for(;!Hu.done;H0++,Hu=ar.next()){var Ja=pt(it,Hu.value,Bt);Ja!==null&&(_0=j(Ja,_0,H0),qr===null?ou=Ja:qr.sibling=Ja,qr=Ja)}return ou}for(var jo=T(it,_u);!Hu.done;H0++,Hu=ar.next()){var xs=Vt(jo,it,H0,Hu.value,Bt);xs!==null&&(a&&xs.alternate!==null&&jo.delete(xs.key===null?H0:xs.key),_0=j(xs,_0,H0),qr===null?ou=xs:qr.sibling=xs,qr=xs)}return a&&jo.forEach(function(X2){return c(it,X2)}),ou}function $r(it,Ot,Je,Bt){if(Ot!==null&&Ot.tag===ne){_(it,Ot.sibling);var Mn=R(Ot,Je,Bt);return Mn.return=it,Mn}_(it,Ot);var pn=Cy(Je,it.mode,Bt);return pn.return=it,pn}function wi(it,Ot,Je,Bt){for(var Mn=Je.key,pn=Ot;pn!==null;){if(pn.key===Mn)if(pn.tag===m?Je.type===ue:pn.elementType===Je.type||jc(pn,Je)){_(it,pn.sibling);var Pi=R(pn,Je.type===ue?Je.props.children:Je.props,Bt);return Pi.ref=fc(it,pn,Je),Pi.return=it,Pi._debugSource=Je._source,Pi._debugOwner=Je._owner,Pi}else{_(it,pn);break}else c(it,pn);pn=pn.sibling}if(Je.type===ue){var oi=Qa(Je.props.children,it.mode,Bt,Je.key);return oi.return=it,oi}else{var qu=Ty(Je,it.mode,Bt);return qu.ref=fc(it,Ot,Je),qu.return=it,qu}}function N0(it,Ot,Je,Bt){for(var Mn=Je.key,pn=Ot;pn!==null;){if(pn.key===Mn)if(pn.tag===q&&pn.stateNode.containerInfo===Je.containerInfo&&pn.stateNode.implementation===Je.implementation){_(it,pn.sibling);var Pi=R(pn,Je.children||[],Bt);return Pi.return=it,Pi}else{_(it,pn);break}else c(it,pn);pn=pn.sibling}var oi=xy(Je,it.mode,Bt);return oi.return=it,oi}function Vi(it,Ot,Je,Bt){var Mn=typeof Je=="object"&&Je!==null&&Je.type===ue&&Je.key===null;Mn&&(Je=Je.props.children);var pn=typeof Je=="object"&&Je!==null;if(pn)switch(Je.$$typeof){case ae:return V(wi(it,Ot,Je,Bt));case Ce:return V(N0(it,Ot,Je,Bt))}if(typeof Je=="string"||typeof Je=="number")return V($r(it,Ot,""+Je,Bt));if(Kc(Je))return vn(it,Ot,Je,Bt);if(ur(Je))return xr(it,Ot,Je,Bt);if(pn&&cc(it,Je),typeof Je=="function"&&f2(),typeof Je=="undefined"&&!Mn)switch(it.tag){case N:{var Pi=it.stateNode;if(Pi.render._isMockFunction)break}case L:{var oi=it.type;throw Error((oi.displayName||oi.name||"Component")+"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.")}}return _(it,Ot)}return Vi}var gf=yh(!0),Xc=yh(!1);function gh(a,c){if(!(a===null||c.child===a.child))throw Error("Resuming work not yet implemented.");if(c.child!==null){var _=c.child,T=wo(_,_.pendingProps,_.expirationTime);for(c.child=T,T.return=c;_.sibling!==null;)_=_.sibling,T=T.sibling=wo(_,_.pendingProps,_.expirationTime),T.return=c;T.sibling=null}}function vm(a,c){for(var _=a.child;_!==null;)Rv(_,c),_=_.sibling}var js={},fa=Gu(js),Ji=Gu(js),O0=Gu(js);function t0(a){if(a===js)throw Error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.");return a}function Jl(){var a=t0(O0.current);return a}function za(a,c){Vr(O0,c,a),Vr(Ji,a,a),Vr(fa,js,a);var _=Et(c);Kr(fa,a),Vr(fa,_,a)}function no(a){Kr(fa,a),Kr(Ji,a),Kr(O0,a)}function ul(){var a=t0(fa.current);return a}function dc(a){var c=t0(O0.current),_=t0(fa.current),T=Pt(_,a.type,c);_!==T&&(Vr(Ji,a,a),Vr(fa,T,a))}function Od(a){Ji.current===a&&(Kr(fa,a),Kr(Ji,a))}var _h=0,_f=1,Ef=1,Qc=2,xl=Gu(_h);function Jc(a,c){return(a&c)!=0}function ca(a){return a&_f}function c2(a,c){return a&_f|c}function d2(a,c){return a|c}function Or(a,c){Vr(xl,c,a)}function da(a){Kr(xl,a)}function kd(a,c){var _=a.memoizedState;if(_!==null)return _.dehydrated!==null;var T=a.memoizedProps;return T.fallback===void 0?!1:T.unstable_avoidThisFallback!==!0?!0:!c}function Zc(a){for(var c=a;c!==null;){if(c.tag===pe){var _=c.memoizedState;if(_!==null){var T=_.dehydrated;if(T===null||Ls(T)||h0(T))return c}}else if(c.tag===wt&&c.memoizedProps.revealOrder!==void 0){var R=(c.effectTag&Hr)!==_i;if(R)return c}else if(c.child!==null){c.child.return=c,c=c.child;continue}if(c===a)return null;for(;c.sibling===null;){if(c.return===null||c.return===a)return null;c=c.return}c.sibling.return=c.return,c=c.sibling}return null}var p2={},vi=Array.isArray;function Md(a,c,_,T){return{fiber:T,props:c,responder:a,rootEventTypes:null,state:_}}function mm(a,c,_,T,R){var j=p2,V=a.getInitialState;V!==null&&(j=V(c));var te=Md(a,c,j,_);if(!R)for(var oe=_;oe!==null;){var Ie=oe.tag;if(Ie===W){R=oe.stateNode;break}else if(Ie===U){R=oe.stateNode.containerInfo;break}oe=oe.return}Ne(a,te,c,j,R),T.set(a,te)}function h2(a,c,_,T,R){var j,V;if(a&&(j=a.responder,V=a.props),!(j&&j.$$typeof===Ut))throw Error("An invalid value was used as an event listener. Expect one or many event listeners created via React.unstable_useResponder().");var te=V;if(_.has(j)){Kt(!1,'Duplicate event responder "%s" found in event listeners. Event listeners passed to elements cannot use the same event responder more than once.',j.displayName);return}_.add(j);var oe=T.get(j);oe===void 0?mm(j,te,c,T,R):(oe.props=te,oe.fiber=c)}function dn(a,c,_){var T=new Set,R=c.dependencies;if(a!=null){R===null&&(R=c.dependencies={expirationTime:lt,firstContext:null,responders:new Map});var j=R.responders;if(j===null&&(j=new Map),vi(a))for(var V=0,te=a.length;V0){var j=R.dispatch;if(Es!==null){var V=Es.get(R);if(V!==void 0){Es.delete(R);var te=T.memoizedState,oe=V;do{var Ie=oe.action;te=a(te,Ie),oe=oe.next}while(oe!==null);return ho(te,T.memoizedState)||up(),T.memoizedState=te,T.baseUpdate===R.last&&(T.baseState=te),R.lastRenderedState=te,[te,j]}}return[T.memoizedState,j]}var Ye=R.last,pt=T.baseUpdate,Nt=T.baseState,Vt;if(pt!==null?(Ye!==null&&(Ye.next=null),Vt=pt.next):Vt=Ye!==null?Ye.next:null,Vt!==null){var zt=Nt,vn=null,xr=null,$r=pt,wi=Vt,N0=!1;do{var Vi=wi.expirationTime;if(ViOu&&(Ou=Vi,G2(Ou));else if(vv(Vi,wi.suspenseConfig),wi.eagerReducer===a)zt=wi.eagerState;else{var it=wi.action;zt=a(zt,it)}$r=wi,wi=wi.next}while(wi!==null&&wi!==Vt);N0||(xr=$r,vn=zt),ho(zt,T.memoizedState)||up(),T.memoizedState=zt,T.baseUpdate=xr,T.baseState=vn,R.lastRenderedState=zt}var Ot=R.dispatch;return[T.memoizedState,Ot]}function Rf(a){var c=mc();typeof a=="function"&&(a=a()),c.memoizedState=c.baseState=a;var _=c.queue={last:null,dispatch:null,lastRenderedReducer:Nd,lastRenderedState:a},T=_.dispatch=u1.bind(null,ll,_);return[c.memoizedState,T]}function n1(a){return t1(Nd,a)}function Wa(a,c,_,T){var R={tag:a,create:c,destroy:_,deps:T,next:null};if(Zl===null)Zl=Ha(),Zl.lastEffect=R.next=R;else{var j=Zl.lastEffect;if(j===null)Zl.lastEffect=R.next=R;else{var V=j.next;j.next=R,R.next=V,Zl.lastEffect=R}}return R}function r1(a){var c=mc(),_={current:a};return Object.seal(_),c.memoizedState=_,_}function Ld(a){var c=e1();return c.memoizedState}function g2(a,c,_,T){var R=mc(),j=T===void 0?null:T;Tf|=a,R.memoizedState=Wa(c,_,void 0,j)}function yc(a,c,_,T){var R=e1(),j=T===void 0?null:T,V=void 0;if(Pn!==null){var te=Pn.memoizedState;if(V=te.destroy,j!==null){var oe=te.deps;if(xf(j,oe)){Wa(wf,_,V,j);return}}}Tf|=a,R.memoizedState=Wa(c,_,V,j)}function i1(a,c){return typeof jest!="undefined"&&Av(ll),g2(mr|L0,rr|$c,a,c)}function Rl(a,c){return typeof jest!="undefined"&&Av(ll),yc(mr|L0,rr|$c,a,c)}function pa(a,c){return g2(mr,Sf|ol,a,c)}function wh(a,c){return yc(mr,Sf|ol,a,c)}function Fd(a,c){if(typeof c=="function"){var _=c,T=a();return _(T),function(){_(null)}}else if(c!=null){var R=c;R.hasOwnProperty("current")||Kt(!1,"Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.","an object with keys {"+Object.keys(R).join(", ")+"}");var j=a();return R.current=j,function(){R.current=null}}}function bd(a,c,_){typeof c!="function"&&Kt(!1,"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",c!==null?typeof c:"null");var T=_!=null?_.concat([a]):null;return g2(mr,Sf|ol,Fd.bind(null,c,a),T)}function Sh(a,c,_){typeof c!="function"&&Kt(!1,"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",c!==null?typeof c:"null");var T=_!=null?_.concat([a]):null;return yc(mr,Sf|ol,Fd.bind(null,c,a),T)}function _2(a,c){}var Th=_2;function Ol(a,c){var _=mc(),T=c===void 0?null:c;return _.memoizedState=[a,T],a}function es(a,c){var _=e1(),T=c===void 0?null:c,R=_.memoizedState;if(R!==null&&T!==null){var j=R[1];if(xf(T,j))return R[0]}return _.memoizedState=[a,T],a}function Ds(a,c){var _=mc(),T=c===void 0?null:c,R=a();return _.memoizedState=[R,T],R}function zs(a,c){var _=e1(),T=c===void 0?null:c,R=_.memoizedState;if(R!==null&&T!==null){var j=R[1];if(xf(T,j))return R[0]}var V=a();return _.memoizedState=[V,T],V}function Pd(a,c){var _=Rf(a),T=_[0],R=_[1];return i1(function(){t.unstable_next(function(){var j=Bo.suspense;Bo.suspense=c===void 0?null:c;try{R(a)}finally{Bo.suspense=j}})},[a,c]),T}function Ch(a,c){var _=n1(a),T=_[0],R=_[1];return Rl(function(){t.unstable_next(function(){var j=Bo.suspense;Bo.suspense=c===void 0?null:c;try{R(a)}finally{Bo.suspense=j}})},[a,c]),T}function Id(a){var c=Rf(!1),_=c[0],T=c[1],R=Ol(function(j){T(!0),t.unstable_next(function(){var V=Bo.suspense;Bo.suspense=a===void 0?null:a;try{T(!1),j()}finally{Bo.suspense=V}})},[a,_]);return[R,_]}function Bd(a){var c=n1(!1),_=c[0],T=c[1],R=es(function(j){T(!0),t.unstable_next(function(){var V=Bo.suspense;Bo.suspense=a===void 0?null:a;try{T(!1),j()}finally{Bo.suspense=V}})},[a,_]);return[R,_]}function u1(a,c,_){if(!(vc=0){var _=l1()-s1;a.actualDuration+=_,c&&(a.selfBaseDuration=_),s1=-1}}var Ml=null,Ga=null,ha=!1;function qd(){ha&&Kt(!1,"We should not be hydrating here. This is a bug in React. Please file a bug.")}function Hd(a){if(!_e)return!1;var c=a.stateNode.containerInfo;return Ga=B(c),Ml=a,ha=!0,!0}function Em(a,c){return _e?(Ga=Ni(c),Gd(a),ha=!0,!0):!1}function Wd(a,c){switch(a.tag){case U:ie(a.stateNode.containerInfo,c);break;case W:qe(a.type,a.memoizedProps,a.stateNode,c);break}var _=eE();_.stateNode=c,_.return=a,_.effectTag=W0,a.lastEffect!==null?(a.lastEffect.nextEffect=_,a.lastEffect=_):a.firstEffect=a.lastEffect=_}function Mh(a,c){switch(c.effectTag=c.effectTag&~tu|ai,a.tag){case U:{var _=a.stateNode.containerInfo;switch(c.tag){case W:var T=c.type,R=c.pendingProps;tt(_,T,R);break;case ne:var j=c.pendingProps;Tt(_,j);break;case pe:kt(_);break}break}case W:{var V=a.type,te=a.memoizedProps,oe=a.stateNode;switch(c.tag){case W:var Ie=c.type,Ye=c.pendingProps;bt(V,te,oe,Ie,Ye);break;case ne:var pt=c.pendingProps;on(V,te,oe,pt);break;case pe:tn(V,te,oe);break}break}default:return}}function Nh(a,c){switch(a.tag){case W:{var _=a.type,T=a.pendingProps,R=lf(c,_,T);return R!==null?(a.stateNode=R,!0):!1}case ne:{var j=a.pendingProps,V=Ns(c,j);return V!==null?(a.stateNode=V,!0):!1}case pe:{if(Di){var te=Ma(c);if(te!==null){var oe={dehydrated:te,retryTime:hi};a.memoizedState=oe;var Ie=tE(te);return Ie.return=a,a.child=Ie,!0}}return!1}default:return!1}}function Vd(a){if(!!ha){var c=Ga;if(!c){Mh(Ml,a),ha=!1,Ml=a;return}var _=c;if(!Nh(a,c)){if(c=Ni(_),!c||!Nh(a,c)){Mh(Ml,a),ha=!1,Ml=a;return}Wd(Ml,_)}Ml=a,Ga=B(c)}}function Dm(a,c,_){if(!_e)throw Error("Expected prepareToHydrateHostInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var T=a.stateNode,R=z(T,a.type,a.memoizedProps,c,_,a);return a.updateQueue=R,R!==null}function wm(a){if(!_e)throw Error("Expected prepareToHydrateHostTextInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var c=a.stateNode,_=a.memoizedProps,T=G(c,_,a);if(T){var R=Ml;if(R!==null)switch(R.tag){case U:{var j=R.stateNode.containerInfo;Xe(j,c,_);break}case W:{var V=R.type,te=R.memoizedProps,oe=R.stateNode;ht(V,te,oe,c,_);break}}}return T}function Lh(a){if(!_e)throw Error("Expected prepareToHydrateHostSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var c=a.memoizedState,_=c!==null?c.dehydrated:null;if(!_)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");$(_,a)}function Sm(a){if(!_e)throw Error("Expected skipPastDehydratedSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var c=a.memoizedState,_=c!==null?c.dehydrated:null;if(!_)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");return De(_)}function Gd(a){for(var c=a.return;c!==null&&c.tag!==W&&c.tag!==U&&c.tag!==pe;)c=c.return;Ml=c}function f1(a){if(!_e||a!==Ml)return!1;if(!ha)return Gd(a),ha=!0,!1;var c=a.type;if(a.tag!==W||c!=="head"&&c!=="body"&&!Ti(c,a.memoizedProps))for(var _=Ga;_;)Wd(a,_),_=Ni(_);return Gd(a),a.tag===pe?Ga=Sm(a):Ga=Ml?Ni(a.stateNode):null,!0}function c1(){!_e||(Ml=null,Ga=null,ha=!1)}var d1=at.ReactCurrentOwner,va=!1,Yd,qs,Hs,Ws,Kd,ma,p1,E2,gc,Xd;Yd={},qs={},Hs={},Ws={},Kd={},ma=!1,p1=!1,E2={},gc={},Xd={};function _o(a,c,_,T){a===null?c.child=Xc(c,null,_,T):c.child=gf(c,a.child,_,T)}function Fh(a,c,_,T){c.child=gf(c,a.child,null,T),c.child=gf(c,null,_,T)}function bh(a,c,_,T,R){if(c.type!==c.elementType){var j=_.propTypes;j&&E(j,T,"prop",qt(_),Rr)}var V=_.render,te=c.ref,oe;return e0(c,R),d1.current=c,Ze("render"),oe=Af(a,c,V,T,te,R),Ei&&c.mode&cr&&c.memoizedState!==null&&(oe=Af(a,c,V,T,te,R)),Ze(null),a!==null&&!va?(v2(a,c,R),ya(a,c,R)):(c.effectTag|=eu,_o(a,c,oe,R),c.child)}function Ph(a,c,_,T,R,j){if(a===null){var V=_.type;if(i0(V)&&_.compare===null&&_.defaultProps===void 0){var te=V;return te=Zu(V),c.tag=le,c.type=te,Zd(c,V),Ih(a,c,te,T,R,j)}{var oe=V.propTypes;oe&&E(oe,T,"prop",qt(V),Rr)}var Ie=Sy(_.type,null,T,null,c.mode,j);return Ie.ref=c.ref,Ie.return=c,c.child=Ie,Ie}{var Ye=_.type,pt=Ye.propTypes;pt&&E(pt,T,"prop",qt(Ye),Rr)}var Nt=a.child;if(R component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",oe,oe),Yd[oe]=!0)}c.mode&cr&&wl.recordLegacyContextWarning(c,null),d1.current=c,te=Af(null,c,_,R,j,T)}if(c.effectTag|=eu,typeof te=="object"&&te!==null&&typeof te.render=="function"&&te.$$typeof===void 0){{var Ie=qt(_)||"Unknown";qs[Ie]||(Ke(!1,"The <%s /> component appears to be a function component that returns a class instance. Change %s to a class that extends React.Component instead. If you can't use a class try assigning the prototype on the function as a workaround. `%s.prototype = React.Component.prototype`. Don't use an arrow function since it cannot be called with `new` by React.",Ie,Ie,Ie),qs[Ie]=!0)}c.tag=N,m2();var Ye=!1;zi(_)?(Ye=!0,Fi(c)):Ye=!1,c.memoizedState=te.state!==null&&te.state!==void 0?te.state:null;var pt=_.getDerivedStateFromProps;return typeof pt=="function"&&yf(c,_,pt,R),il(c,te),ac(c,_,R,T),Jd(null,c,_,!0,Ye,T)}else return c.tag=L,ni&&_.contextTypes&&Ke(!1,"%s uses the legacy contextTypes API which is no longer supported. Use React.createContext() with React.useContext() instead.",qt(_)||"Unknown"),Ei&&c.mode&cr&&c.memoizedState!==null&&(te=Af(null,c,_,R,j,T)),_o(null,c,te,T),Zd(c,_),c.child}function Zd(a,c){if(c&&c.childContextTypes&&Ke(!1,"%s(...): childContextTypes cannot be defined on a function component.",c.displayName||c.name||"Component"),a.ref!==null){var _="",T=v0();T&&(_+=` - -Check the render method of \``+T+"`.");var R=T||a._debugID||"",j=a._debugSource;j&&(R=j.fileName+":"+j.lineNumber),Kd[R]||(Kd[R]=!0,Kt(!1,"Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?%s",_))}if(Wl&&c.defaultProps!==void 0){var V=qt(c)||"Unknown";Xd[V]||(Ke(!1,"%s: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.",V),Xd[V]=!0)}if(typeof c.getDerivedStateFromProps=="function"){var te=qt(c)||"Unknown";Ws[te]||(Ke(!1,"%s: Function components do not support getDerivedStateFromProps.",te),Ws[te]=!0)}if(typeof c.contextType=="object"&&c.contextType!==null){var oe=qt(c)||"Unknown";Hs[oe]||(Ke(!1,"%s: Function components do not support contextType.",oe),Hs[oe]=!0)}}var w2={dehydrated:null,retryTime:lt};function $d(a,c,_){return Jc(a,Qc)&&(c===null||c.memoizedState!==null)}function qh(a,c,_){var T=c.mode,R=c.pendingProps;a_(c)&&(c.effectTag|=Hr);var j=xl.current,V=!1,te=(c.effectTag&Hr)!==_i;if(te||$d(j,a,c)?(V=!0,c.effectTag&=~Hr):(a===null||a.memoizedState!==null)&&R.fallback!==void 0&&R.unstable_avoidThisFallback!==!0&&(j=d2(j,Ef)),j=ca(j),Or(c,j),"maxDuration"in R&&(p1||(p1=!0,Kt(!1,"maxDuration has been removed from React. Remove the maxDuration prop."))),a===null){if(R.fallback!==void 0&&(Vd(c),Di)){var oe=c.memoizedState;if(oe!==null){var Ie=oe.dehydrated;if(Ie!==null)return Hh(c,Ie,_)}}if(V){var Ye=R.fallback,pt=Qa(null,T,lt,null);if(pt.return=c,(c.mode&Y)===Sr){var Nt=c.memoizedState,Vt=Nt!==null?c.child.child:c.child;pt.child=Vt;for(var zt=Vt;zt!==null;)zt.return=pt,zt=zt.sibling}var vn=Qa(Ye,T,_,null);return vn.return=c,pt.sibling=vn,c.memoizedState=w2,c.child=pt,vn}else{var xr=R.children;return c.memoizedState=null,c.child=Xc(c,null,xr,_)}}else{var $r=a.memoizedState;if($r!==null){if(Di){var wi=$r.dehydrated;if(wi!==null)if(te){if(c.memoizedState!==null)return c.child=a.child,c.effectTag|=Hr,null;var N0=R.fallback,Vi=Qa(null,T,lt,null);if(Vi.return=c,Vi.child=null,(c.mode&Y)===Sr)for(var it=Vi.child=c.child;it!==null;)it.return=Vi,it=it.sibling;else gf(c,a.child,null,_);if(Zt&&c.mode&Jr){for(var Ot=0,Je=Vi.child;Je!==null;)Ot+=Je.treeBaseDuration,Je=Je.sibling;Vi.treeBaseDuration=Ot}var Bt=Qa(N0,T,_,null);return Bt.return=c,Vi.sibling=Bt,Bt.effectTag|=ai,Vi.childExpirationTime=lt,c.memoizedState=w2,c.child=Vi,Bt}else return Wh(a,c,wi,$r,_)}var Mn=a.child,pn=Mn.sibling;if(V){var Pi=R.fallback,oi=wo(Mn,Mn.pendingProps,lt);if(oi.return=c,(c.mode&Y)===Sr){var qu=c.memoizedState,ar=qu!==null?c.child.child:c.child;if(ar!==Mn.child){oi.child=ar;for(var ou=ar;ou!==null;)ou.return=oi,ou=ou.sibling}}if(Zt&&c.mode&Jr){for(var qr=0,_u=oi.child;_u!==null;)qr+=_u.treeBaseDuration,_u=_u.sibling;oi.treeBaseDuration=qr}var _0=wo(pn,Pi,pn.expirationTime);return _0.return=c,oi.sibling=_0,oi.childExpirationTime=lt,c.memoizedState=w2,c.child=oi,_0}else{var H0=R.children,Cs=Mn.child,Hu=gf(c,Cs,H0,_);return c.memoizedState=null,c.child=Hu}}else{var pl=a.child;if(V){var Ja=R.fallback,jo=Qa(null,T,lt,null);if(jo.return=c,jo.child=pl,pl!==null&&(pl.return=jo),(c.mode&Y)===Sr){var xs=c.memoizedState,X2=xs!==null?c.child.child:c.child;jo.child=X2;for(var Uf=X2;Uf!==null;)Uf.return=jo,Uf=Uf.sibling}if(Zt&&c.mode&Jr){for(var Rc=0,Pl=jo.child;Pl!==null;)Rc+=Pl.treeBaseDuration,Pl=Pl.sibling;jo.treeBaseDuration=Rc}var zo=Qa(Ja,T,_,null);return zo.return=c,jo.sibling=zo,zo.effectTag|=ai,jo.childExpirationTime=lt,c.memoizedState=w2,c.child=jo,zo}else{c.memoizedState=null;var O1=R.children;return c.child=gf(c,pl,O1,_)}}}}function ep(a,c,_){c.memoizedState=null;var T=c.pendingProps,R=T.children;return _o(a,c,R,_),c.child}function Hh(a,c,_){if((a.mode&Y)===Sr)Kt(!1,"Cannot hydrate Suspense in legacy mode. Switch from ReactDOM.hydrate(element, container) to ReactDOM.createBlockingRoot(container, { hydrate: true }).render(element) or remove the Suspense components from the server rendered components."),a.expirationTime=bn;else if(h0(c)){var T=Fl(),R=ms(T);Ln&&x(R),a.expirationTime=R}else a.expirationTime=hi,Ln&&x(hi);return null}function Wh(a,c,_,T,R){if(qd(),(c.mode&Y)===Sr||h0(_))return ep(a,c,R);var j=a.childExpirationTime>=R;if(va||j){if(R. Use lowercase "%s" instead.',a,a.toLowerCase());break}case"forward":case"backward":{Kt(!1,'"%s" is not a valid value for revealOrder on . React uses the -s suffix in the spelling. Use "%ss" instead.',a,a.toLowerCase());break}default:Kt(!1,'"%s" is not a supported revealOrder on . Did you mean "together", "forwards" or "backwards"?',a);break}else Kt(!1,'%s is not a supported value for revealOrder on . Did you mean "together", "forwards" or "backwards"?',a)}function Vh(a,c){a!==void 0&&!gc[a]&&(a!=="collapsed"&&a!=="hidden"?(gc[a]=!0,Kt(!1,'"%s" is not a supported value for tail on . Did you mean "collapsed" or "hidden"?',a)):c!=="forwards"&&c!=="backwards"&&(gc[a]=!0,Kt(!1,' is only valid if revealOrder is "forwards" or "backwards". Did you mean to specify revealOrder="forwards"?',a)))}function v1(a,c){{var _=Array.isArray(a),T=!_&&typeof ur(a)=="function";if(_||T){var R=_?"array":"iterable";return Kt(!1,"A nested %s was passed to row #%s in . Wrap it in an additional SuspenseList to configure its revealOrder: ... {%s} ... ",R,c,R),!1}}return!0}function Mm(a,c){if((c==="forwards"||c==="backwards")&&a!==void 0&&a!==null&&a!==!1)if(Array.isArray(a)){for(var _=0;_. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?',c)}}function np(a,c,_,T,R,j){var V=a.memoizedState;V===null?a.memoizedState={isBackwards:c,rendering:null,last:T,tail:_,tailExpiration:0,tailMode:R,lastEffect:j}:(V.isBackwards=c,V.rendering=null,V.last=T,V.tail=_,V.tailExpiration=0,V.tailMode=R,V.lastEffect=j)}function rp(a,c,_){var T=c.pendingProps,R=T.revealOrder,j=T.tail,V=T.children;km(R),Vh(j,R),Mm(V,R),_o(a,c,V,_);var te=xl.current,oe=Jc(te,Qc);if(oe)te=c2(te,Qc),c.effectTag|=Hr;else{var Ie=a!==null&&(a.effectTag&Hr)!==_i;Ie&&Rm(c,c.child,_),te=ca(te)}if(Or(c,te),(c.mode&Y)===Sr)c.memoizedState=null;else switch(R){case"forwards":{var Ye=Om(c.child),pt;Ye===null?(pt=c.child,c.child=null):(pt=Ye.sibling,Ye.sibling=null),np(c,!1,pt,Ye,j,c.lastEffect);break}case"backwards":{var Nt=null,Vt=c.child;for(c.child=null;Vt!==null;){var zt=Vt.alternate;if(zt!==null&&Zc(zt)===null){c.child=Vt;break}var vn=Vt.sibling;Vt.sibling=Nt,Nt=Vt,Vt=vn}np(c,!0,Nt,null,j,c.lastEffect);break}case"together":{np(c,!1,null,null,void 0,c.lastEffect);break}default:c.memoizedState=null}return c.child}function Nm(a,c,_){za(c,c.stateNode.containerInfo);var T=c.pendingProps;return a===null?c.child=gf(c,null,T,_):_o(a,c,T,_),c.child}function Lm(a,c,_){var T=c.type,R=T._context,j=c.pendingProps,V=c.memoizedProps,te=j.value;{var oe=c.type.propTypes;oe&&E(oe,j,"prop","Context.Provider",Rr)}if(Er(c,te),V!==null){var Ie=V.value,Ye=iu(R,te,Ie);if(Ye===0){if(V.children===j.children&&!na())return ya(a,c,_)}else Tl(c,R,Ye,_)}var pt=j.children;return _o(a,c,pt,_),c.child}var Gh=!1;function Fm(a,c,_){var T=c.type;T._context===void 0?T!==T.Consumer&&(Gh||(Gh=!0,Kt(!1,"Rendering directly is not supported and will be removed in a future major release. Did you mean to render instead?"))):T=T._context;var R=c.pendingProps,j=R.children;typeof j!="function"&&Ke(!1,"A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."),e0(c,_);var V=He(T,R.unstable_observedBits),te;return d1.current=c,Ze("render"),te=j(V),Ze(null),c.effectTag|=eu,_o(a,c,te,_),c.child}function bm(a,c,_){var T=c.type.impl;if(T.reconcileChildren===!1)return null;var R=c.pendingProps,j=R.children;return _o(a,c,j,_),c.child}function ip(a,c,_){var T=c.pendingProps,R=T.children;return _o(a,c,R,_),c.child}function up(){va=!0}function ya(a,c,_){Ki(c),a!==null&&(c.dependencies=a.dependencies),Zt&&kh(c);var T=c.expirationTime;T!==lt&&G2(T);var R=c.childExpirationTime;return R<_?null:(gh(a,c),c.child)}function m1(a,c,_){{var T=c.return;if(T===null)throw new Error("Cannot swap the root fiber.");if(a.alternate=null,c.alternate=null,_.index=c.index,_.sibling=c.sibling,_.return=c.return,_.ref=c.ref,c===T.child)T.child=_;else{var R=T.child;if(R===null)throw new Error("Expected parent to have a child.");for(;R.sibling!==c;)if(R=R.sibling,R===null)throw new Error("Expected to find the previous sibling.");R.sibling=_}var j=T.lastEffect;return j!==null?(j.nextEffect=a,T.lastEffect=a):T.firstEffect=T.lastEffect=a,a.nextEffect=null,a.effectTag=W0,_.effectTag|=ai,_}}function op(a,c,_){var T=c.expirationTime;if(c._debugNeedsRemount&&a!==null)return m1(a,c,Sy(c.type,c.key,c.pendingProps,c._debugOwner||null,c.mode,c.expirationTime));if(a!==null){var R=a.memoizedProps,j=c.pendingProps;if(R!==j||na()||c.type!==a.type)va=!0;else if(T<_){switch(va=!1,c.tag){case U:zh(c),c1();break;case W:if(dc(c),c.mode&Qr&&_!==hi&&d0(c.type,j))return Ln&&x(hi),c.expirationTime=c.childExpirationTime=hi,null;break;case N:{var V=c.type;zi(V)&&Fi(c);break}case q:za(c,c.stateNode.containerInfo);break;case he:{var te=c.memoizedProps.value;Er(c,te);break}case ze:if(Zt){var oe=c.childExpirationTime>=_;oe&&(c.effectTag|=mr)}break;case pe:{var Ie=c.memoizedState;if(Ie!==null){if(Di&&Ie.dehydrated!==null){Or(c,ca(xl.current)),c.effectTag|=Hr;break}var Ye=c.child,pt=Ye.childExpirationTime;if(pt!==lt&&pt>=_)return qh(a,c,_);Or(c,ca(xl.current));var Nt=ya(a,c,_);return Nt!==null?Nt.sibling:null}else Or(c,ca(xl.current));break}case wt:{var Vt=(a.effectTag&Hr)!==_i,zt=c.childExpirationTime>=_;if(Vt){if(zt)return rp(a,c,_);c.effectTag|=Hr}var vn=c.memoizedState;if(vn!==null&&(vn.rendering=null,vn.tail=null),Or(c,xl.current),zt)break;return null}}return ya(a,c,_)}else va=!1}else va=!1;switch(c.expirationTime=lt,c.tag){case C:return Am(a,c,c.type,_);case Ue:{var xr=c.elementType;return kf(a,c,xr,T,_)}case L:{var $r=c.type,wi=c.pendingProps,N0=c.elementType===$r?wi:bi($r,wi);return Qd(a,c,$r,N0,_)}case N:{var Vi=c.type,it=c.pendingProps,Ot=c.elementType===Vi?it:bi(Vi,it);return jh(a,c,Vi,Ot,_)}case U:return Cm(a,c,_);case W:return xm(a,c,_);case ne:return Of(a,c);case pe:return qh(a,c,_);case q:return Nm(a,c,_);case ge:{var Je=c.type,Bt=c.pendingProps,Mn=c.elementType===Je?Bt:bi(Je,Bt);return bh(a,c,Je,Mn,_)}case m:return Tm(a,c,_);case we:return Bh(a,c,_);case ze:return Uh(a,c,_);case he:return Lm(a,c,_);case Se:return Fm(a,c,_);case Oe:{var pn=c.type,Pi=c.pendingProps,oi=bi(pn,Pi);if(c.type!==c.elementType){var qu=pn.propTypes;qu&&E(qu,oi,"prop",qt(pn),Rr)}return oi=bi(pn.type,oi),Ph(a,c,pn,oi,T,_)}case le:return Ih(a,c,c.type,c.pendingProps,T,_);case Ge:{var ar=c.type,ou=c.pendingProps,qr=c.elementType===ar?ou:bi(ar,ou);return D2(a,c,ar,qr,_)}case wt:return rp(a,c,_);case xt:{if(Ht)return bm(a,c,_);break}case $e:{if(Du)return ip(a,c,_);break}}throw Error("Unknown unit of work tag ("+c.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function Yh(a,c,_,T){return{currentFiber:a,impl:_,instance:null,prevProps:null,props:c,state:T}}function S2(a){return a.tag===pe&&a.memoizedState!==null}function y1(a){return a.child.sibling.child}var Kh={};function lp(a,c,_){if(Du){if(a.tag===W){var T=a.type,R=a.memoizedProps,j=a.stateNode,V=Ro(j);V!==null&&c(T,R||Kh,V)===!0&&_.push(V)}var te=a.child;S2(a)&&(te=y1(a)),te!==null&&sp(te,c,_)}}function Xh(a,c){if(Du){if(a.tag===W){var _=a.type,T=a.memoizedProps,R=a.stateNode,j=Ro(R);if(j!==null&&c(_,T,j)===!0)return j}var V=a.child;if(S2(a)&&(V=y1(a)),V!==null)return Qh(V,c)}return null}function sp(a,c,_){for(var T=a;T!==null;)lp(T,c,_),T=T.sibling}function Qh(a,c){for(var _=a;_!==null;){var T=Xh(_,c);if(T!==null)return T;_=_.sibling}return null}function Jh(a,c,_){if(T2(a,c))_.push(a.stateNode.methods);else{var T=a.child;S2(a)&&(T=y1(a)),T!==null&&ap(T,c,_)}}function ap(a,c,_){for(var T=a;T!==null;)Jh(T,c,_),T=T.sibling}function T2(a,c){return a.tag===$e&&a.type===c&&a.stateNode!==null}function C2(a,c){return{getChildren:function(){var _=c.fiber,T=_.child,R=[];return T!==null&&ap(T,a,R),R.length===0?null:R},getChildrenFromRoot:function(){for(var _=c.fiber,T=_;T!==null;){var R=T.return;if(R===null||(T=R,T.tag===$e&&T.type===a))break}var j=[];return ap(T.child,a,j),j.length===0?null:j},getParent:function(){for(var _=c.fiber.return;_!==null;){if(_.tag===$e&&_.type===a)return _.stateNode.methods;_=_.return}return null},getProps:function(){var _=c.fiber;return _.memoizedProps},queryAllNodes:function(_){var T=c.fiber,R=T.child,j=[];return R!==null&&sp(R,_,j),j.length===0?null:j},queryFirstNode:function(_){var T=c.fiber,R=T.child;return R!==null?Qh(R,_):null},containsNode:function(_){for(var T=or(_);T!==null;){if(T.tag===$e&&T.type===a&&T.stateNode===c)return!0;T=T.return}return!1}}}function z0(a){a.effectTag|=mr}function x2(a){a.effectTag|=To}var ga,Ya,A2,R2;if(P0)ga=function(a,c,_,T){for(var R=c.child;R!==null;){if(R.tag===W||R.tag===ne)Wr(a,R.stateNode);else if(Ht&&R.tag===xt)Wr(a,R.stateNode.instance);else if(R.tag!==q){if(R.child!==null){R.child.return=R,R=R.child;continue}}if(R===c)return;for(;R.sibling===null;){if(R.return===null||R.return===c)return;R=R.return}R.sibling.return=R.return,R=R.sibling}},Ya=function(a){},A2=function(a,c,_,T,R){var j=a.memoizedProps;if(j!==T){var V=c.stateNode,te=ul(),oe=c0(V,_,j,T,R,te);c.updateQueue=oe,oe&&z0(c)}},R2=function(a,c,_,T){_!==T&&z0(c)};else if(X){ga=function(a,c,_,T){for(var R=c.child;R!==null;){e:if(R.tag===W){var j=R.stateNode;if(_&&T){var V=R.memoizedProps,te=R.type;j=Gr(j,te,V,R)}Wr(a,j)}else if(R.tag===ne){var oe=R.stateNode;if(_&&T){var Ie=R.memoizedProps;oe=Yl(oe,Ie,R)}Wr(a,oe)}else if(Ht&&R.tag===xt){var Ye=R.stateNode.instance;if(_&&T){var pt=R.memoizedProps,Nt=R.type;Ye=Gr(Ye,Nt,pt,R)}Wr(a,Ye)}else if(R.tag!==q){if(R.tag===pe){if((R.effectTag&mr)!==_i){var Vt=R.memoizedState!==null;if(Vt){var zt=R.child;if(zt!==null){zt.child!==null&&(zt.child.return=zt,ga(a,zt,!0,Vt));var vn=zt.sibling;if(vn!==null){vn.return=R,R=vn;continue}}}}if(R.child!==null){R.child.return=R,R=R.child;continue}}else if(R.child!==null){R.child.return=R,R=R.child;continue}}if(R=R,R===c)return;for(;R.sibling===null;){if(R.return===null||R.return===c)return;R=R.return}R.sibling.return=R.return,R=R.sibling}};var fp=function(a,c,_,T){for(var R=c.child;R!==null;){e:if(R.tag===W){var j=R.stateNode;if(_&&T){var V=R.memoizedProps,te=R.type;j=Gr(j,te,V,R)}Gn(a,j)}else if(R.tag===ne){var oe=R.stateNode;if(_&&T){var Ie=R.memoizedProps;oe=Yl(oe,Ie,R)}Gn(a,oe)}else if(Ht&&R.tag===xt){var Ye=R.stateNode.instance;if(_&&T){var pt=R.memoizedProps,Nt=R.type;Ye=Gr(Ye,Nt,pt,R)}Gn(a,Ye)}else if(R.tag!==q){if(R.tag===pe){if((R.effectTag&mr)!==_i){var Vt=R.memoizedState!==null;if(Vt){var zt=R.child;if(zt!==null){zt.child!==null&&(zt.child.return=zt,fp(a,zt,!0,Vt));var vn=zt.sibling;if(vn!==null){vn.return=R,R=vn;continue}}}}if(R.child!==null){R.child.return=R,R=R.child;continue}}else if(R.child!==null){R.child.return=R,R=R.child;continue}}if(R=R,R===c)return;for(;R.sibling===null;){if(R.return===null||R.return===c)return;R=R.return}R.sibling.return=R.return,R=R.sibling}};Ya=function(a){var c=a.stateNode,_=a.firstEffect===null;if(!_){var T=c.containerInfo,R=w0(T);fp(R,a,!1,!1),c.pendingChildren=R,z0(a),ic(T,R)}},A2=function(a,c,_,T,R){var j=a.stateNode,V=a.memoizedProps,te=c.firstEffect===null;if(te&&V===T){c.stateNode=j;return}var oe=c.stateNode,Ie=ul(),Ye=null;if(V!==T&&(Ye=c0(oe,_,V,T,R,Ie)),te&&Ye===null){c.stateNode=j;return}var pt=cs(j,Ye,_,V,T,c,te,oe);wu(pt,_,T,R,Ie)&&z0(c),c.stateNode=pt,te?z0(c):ga(pt,c,!1,!1)},R2=function(a,c,_,T){if(_!==T){var R=Jl(),j=ul();c.stateNode=as(T,R,j,c),z0(c)}}}else Ya=function(a){},A2=function(a,c,_,T,R){},R2=function(a,c,_,T){};function O2(a,c){switch(a.tailMode){case"hidden":{for(var _=a.tail,T=null;_!==null;)_.alternate!==null&&(T=_),_=_.sibling;T===null?a.tail=null:T.sibling=null;break}case"collapsed":{for(var R=a.tail,j=null;R!==null;)R.alternate!==null&&(j=R),R=R.sibling;j===null?!c&&a.tail!==null?a.tail.sibling=null:a.tail=null:j.sibling=null;break}}}function Zh(a,c,_){var T=c.pendingProps;switch(c.tag){case C:break;case Ue:break;case le:case L:break;case N:{var R=c.type;zi(R)&&Is(c);break}case U:{no(c),x0(c);var j=c.stateNode;if(j.pendingContext&&(j.context=j.pendingContext,j.pendingContext=null),a===null||a.child===null){var V=f1(c);V&&z0(c)}Ya(c);break}case W:{Od(c);var te=Jl(),oe=c.type;if(a!==null&&c.stateNode!=null){if(A2(a,c,oe,T,te),ci){var Ie=a.memoizedProps.listeners,Ye=T.listeners;Ie!==Ye&&z0(c)}a.ref!==c.ref&&x2(c)}else{if(!T){if(c.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");break}var pt=ul(),Nt=f1(c);if(Nt){if(Dm(c,te,pt)&&z0(c),ci){var Vt=T.listeners;Vt!=null&&dn(Vt,c,te)}}else{var zt=ji(oe,T,te,pt,c);if(ga(zt,c,!1,!1),c.stateNode=zt,ci){var vn=T.listeners;vn!=null&&dn(vn,c,te)}wu(zt,oe,T,te,pt)&&z0(c)}c.ref!==null&&x2(c)}break}case ne:{var xr=T;if(a&&c.stateNode!=null){var $r=a.memoizedProps;R2(a,c,$r,xr)}else{if(typeof xr!="string"&&c.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");var wi=Jl(),N0=ul(),Vi=f1(c);Vi?wm(c)&&z0(c):c.stateNode=as(xr,wi,N0,c)}break}case ge:break;case pe:{da(c);var it=c.memoizedState;if(Di&&it!==null&&it.dehydrated!==null)if(a===null){var Ot=f1(c);if(!Ot)throw Error("A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.");return Lh(c),Ln&&x(hi),null}else return c1(),(c.effectTag&Hr)===_i&&(c.memoizedState=null),c.effectTag|=mr,null;if((c.effectTag&Hr)!==_i)return c.expirationTime=_,c;var Je=it!==null,Bt=!1;if(a===null)c.memoizedProps.fallback!==void 0&&f1(c);else{var Mn=a.memoizedState;if(Bt=Mn!==null,!Je&&Mn!==null){var pn=a.child.sibling;if(pn!==null){var Pi=c.firstEffect;Pi!==null?(c.firstEffect=pn,pn.nextEffect=Pi):(c.firstEffect=c.lastEffect=pn,pn.nextEffect=null),pn.effectTag=W0}}}if(Je&&!Bt&&(c.mode&Y)!==Sr){var oi=a===null&&c.memoizedProps.unstable_avoidThisFallback!==!0;oi||Jc(xl.current,Ef)?mv():yv()}X&&Je&&(c.effectTag|=mr),P0&&(Je||Bt)&&(c.effectTag|=mr),Ui&&c.updateQueue!==null&&c.memoizedProps.suspenseCallback!=null&&(c.effectTag|=mr);break}case m:break;case we:break;case ze:break;case q:no(c),Ya(c);break;case he:$u(c);break;case Se:break;case Oe:break;case Ge:{var qu=c.type;zi(qu)&&Is(c);break}case wt:{da(c);var ar=c.memoizedState;if(ar===null)break;var ou=(c.effectTag&Hr)!==_i,qr=ar.rendering;if(qr===null)if(ou)O2(ar,!1);else{var _u=gv()&&(a===null||(a.effectTag&Hr)===_i);if(!_u)for(var _0=c.child;_0!==null;){var H0=Zc(_0);if(H0!==null){ou=!0,c.effectTag|=Hr,O2(ar,!1);var Cs=H0.updateQueue;return Cs!==null&&(c.updateQueue=Cs,c.effectTag|=mr),ar.lastEffect===null&&(c.firstEffect=null),c.lastEffect=ar.lastEffect,vm(c,_),Or(c,c2(xl.current,Qc)),c.child}_0=_0.sibling}}else{if(!ou){var Hu=Zc(qr);if(Hu!==null){c.effectTag|=Hr,ou=!0;var pl=Hu.updateQueue;if(pl!==null&&(c.updateQueue=pl,c.effectTag|=mr),O2(ar,!0),ar.tail===null&&ar.tailMode==="hidden"&&!qr.alternate){var Ja=c.lastEffect=ar.lastEffect;return Ja!==null&&(Ja.nextEffect=null),null}}else if(vt()>ar.tailExpiration&&_>hi){c.effectTag|=Hr,ou=!0,O2(ar,!1);var jo=_-1;c.expirationTime=c.childExpirationTime=jo,Ln&&x(jo)}}if(ar.isBackwards)qr.sibling=c.child,c.child=qr;else{var xs=ar.last;xs!==null?xs.sibling=qr:c.child=qr,ar.last=qr}}if(ar.tail!==null){if(ar.tailExpiration===0){var X2=500;ar.tailExpiration=vt()+X2}var Uf=ar.tail;ar.rendering=Uf,ar.tail=Uf.sibling,ar.lastEffect=c.lastEffect,Uf.sibling=null;var Rc=xl.current;return ou?Rc=c2(Rc,Qc):Rc=ca(Rc),Or(c,Rc),Uf}break}case xt:{if(Ht){var Pl=c.type.impl,zo=c.stateNode;if(zo===null){var O1=Pl.getInitialState,m_;O1!==void 0&&(m_=O1(T)),zo=c.stateNode=Yh(c,T,Pl,m_||{});var y_=dt(zo);if(zo.instance=y_,Pl.reconcileChildren===!1)return null;ga(y_,c,!1,!1),Hn(zo)}else{var yE=zo.props;if(zo.prevProps=yE,zo.props=T,zo.currentFiber=c,X){var g_=ea(zo);zo.instance=g_,ga(g_,c,!1,!1)}var gE=Dn(zo);gE&&z0(c)}}break}case $e:{if(Du)if(a===null){var _E=c.type,Ly={fiber:c,methods:null};if(c.stateNode=Ly,Ly.methods=C2(_E,Ly),ci){var __=T.listeners;if(__!=null){var EE=Jl();dn(__,c,EE)}}c.ref!==null&&(x2(c),z0(c))}else{if(ci){var DE=a.memoizedProps.listeners,wE=T.listeners;(DE!==wE||c.ref!==null)&&z0(c)}else c.ref!==null&&z0(c);a.ref!==c.ref&&x2(c)}break}default:throw Error("Unknown unit of work tag ("+c.tag+"). This error is likely caused by a bug in React. Please file an issue.")}return null}function Pm(a,c){switch(a.tag){case N:{var _=a.type;zi(_)&&Is(a);var T=a.effectTag;return T&f0?(a.effectTag=T&~f0|Hr,a):null}case U:{no(a),x0(a);var R=a.effectTag;if((R&Hr)!==_i)throw Error("The root failed to unmount after an error. This is likely a bug in React. Please file an issue.");return a.effectTag=R&~f0|Hr,a}case W:return Od(a),null;case pe:{if(da(a),Di){var j=a.memoizedState;if(j!==null&&j.dehydrated!==null){if(a.alternate===null)throw Error("Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.");c1()}}var V=a.effectTag;return V&f0?(a.effectTag=V&~f0|Hr,a):null}case wt:return da(a),null;case q:return no(a),null;case he:return $u(a),null;default:return null}}function $h(a){switch(a.tag){case N:{var c=a.type.childContextTypes;c!=null&&Is(a);break}case U:{no(a),x0(a);break}case W:{Od(a);break}case q:no(a);break;case pe:da(a);break;case wt:da(a);break;case he:$u(a);break;default:break}}function cp(a,c){return{value:a,source:c,stack:_r(c)}}var dp=function(a,c,_,T,R,j,V,te,oe){var Ie=Array.prototype.slice.call(arguments,3);try{c.apply(_,Ie)}catch(Ye){this.onError(Ye)}};if(typeof window!="undefined"&&typeof window.dispatchEvent=="function"&&typeof document!="undefined"&&typeof document.createEvent=="function"){var pp=document.createElement("react"),Im=function(a,c,_,T,R,j,V,te,oe){if(typeof document=="undefined")throw Error("The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous.");var Ie=document.createEvent("Event"),Ye=!0,pt=window.event,Nt=Object.getOwnPropertyDescriptor(window,"event"),Vt=Array.prototype.slice.call(arguments,3);function zt(){pp.removeEventListener(N0,zt,!1),typeof window.event!="undefined"&&window.hasOwnProperty("event")&&(window.event=pt),c.apply(_,Vt),Ye=!1}var vn,xr=!1,$r=!1;function wi(Vi){if(vn=Vi.error,xr=!0,vn===null&&Vi.colno===0&&Vi.lineno===0&&($r=!0),Vi.defaultPrevented&&vn!=null&&typeof vn=="object")try{vn._suppressLogging=!0}catch(it){}}var N0="react-"+(a||"invokeguardedcallback");window.addEventListener("error",wi),pp.addEventListener(N0,zt,!1),Ie.initEvent(N0,!1,!1),pp.dispatchEvent(Ie),Nt&&Object.defineProperty(window,"event",Nt),Ye&&(xr?$r&&(vn=new Error("A cross-origin error was thrown. React doesn't have access to the actual error object in development. See https://fb.me/react-crossorigin-error for more information.")):vn=new Error(`An error was thrown inside one of your components, but React doesn't know what it was. This is likely due to browser flakiness. React does its best to preserve the "Pause on exceptions" behavior of the DevTools, which requires some DEV-mode only tricks. It's possible that these don't work in your browser. Try triggering the error in production mode, or switching to a modern browser. If you suspect that this is actually an issue with React, please file an issue.`),this.onError(vn)),window.removeEventListener("error",wi)};dp=Im}var Bm=dp,Eo=!1,k2=null,Um={onError:function(a){Eo=!0,k2=a}};function sl(a,c,_,T,R,j,V,te,oe){Eo=!1,k2=null,Bm.apply(Um,arguments)}function Jn(){return Eo}function Vs(){if(Eo){var a=k2;return Eo=!1,k2=null,a}else throw Error("clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.")}function al(a){return!0}function n0(a){var c=al(a);if(c!==!1){var _=a.error;{var T=a.componentName,R=a.componentStack,j=a.errorBoundaryName,V=a.errorBoundaryFound,te=a.willRetry;if(_!=null&&_._suppressLogging){if(V&&te)return;console.error(_)}var oe=T?"The above error occurred in the <"+T+"> component:":"The above error occurred in one of your React components:",Ie;V&&j?te?Ie="React will try to recreate this component tree from scratch "+("using the error boundary you provided, "+j+"."):Ie="This error was initially handled by the error boundary "+j+`. -Recreating the tree from scratch failed so React will unmount the tree.`:Ie=`Consider adding an error boundary to your tree to customize error handling behavior. -Visit https://fb.me/react-error-boundaries to learn more about error boundaries.`;var Ye=""+oe+R+` - -`+(""+Ie);console.error(Ye)}}}var ev=null;ev=new Set;var Gs=typeof WeakSet=="function"?WeakSet:Set;function hp(a,c){var _=c.source,T=c.stack;T===null&&_!==null&&(T=_r(_));var R={componentName:_!==null?qt(_.type):null,componentStack:T!==null?T:"",error:c.value,errorBoundary:null,errorBoundaryName:null,errorBoundaryFound:!1,willRetry:!1};a!==null&&a.tag===N&&(R.errorBoundary=a.stateNode,R.errorBoundaryName=qt(a.type),R.errorBoundaryFound=!0,R.willRetry=!0);try{n0(R)}catch(j){setTimeout(function(){throw j})}}var jm=function(a,c){Oi(a,"componentWillUnmount"),c.props=a.memoizedProps,c.state=a.memoizedState,c.componentWillUnmount(),gi()};function tv(a,c){if(sl(null,jm,null,a,c),Jn()){var _=Vs();Pf(a,_)}}function vp(a){var c=a.ref;if(c!==null)if(typeof c=="function"){if(sl(null,c,null,null),Jn()){var _=Vs();Pf(a,_)}}else c.current=null}function zm(a,c){if(sl(null,c,null),Jn()){var _=Vs();Pf(a,_)}}function mp(a,c){switch(c.tag){case L:case ge:case le:{_c(ym,wf,c);return}case N:{if(c.effectTag&Co&&a!==null){var _=a.memoizedProps,T=a.memoizedState;Oi(c,"getSnapshotBeforeUpdate");var R=c.stateNode;c.type===c.elementType&&!ma&&(R.props!==c.memoizedProps&&Kt(!1,"Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(c.type)||"instance"),R.state!==c.memoizedState&&Kt(!1,"Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(c.type)||"instance"));var j=R.getSnapshotBeforeUpdate(c.elementType===c.type?_:bi(c.type,_),T);{var V=ev;j===void 0&&!V.has(c.type)&&(V.add(c.type),Ke(!1,"%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.",qt(c.type)))}R.__reactInternalSnapshotBeforeUpdate=j,gi()}return}case U:case W:case ne:case q:case Ge:return;default:throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.")}}function _c(a,c,_){var T=_.updateQueue,R=T!==null?T.lastEffect:null;if(R!==null){var j=R.next,V=j;do{if((V.tag&a)!==wf){var te=V.destroy;V.destroy=void 0,te!==void 0&&te()}if((V.tag&c)!==wf){var oe=V.create;V.destroy=oe();{var Ie=V.destroy;if(Ie!==void 0&&typeof Ie!="function"){var Ye=void 0;Ie===null?Ye=" You returned null. If your effect does not require clean up, return undefined (or nothing).":typeof Ie.then=="function"?Ye=` - -It looks like you wrote useEffect(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately: - -useEffect(() => { - async function fetchData() { - // You can await here - const response = await MyAPI.getData(someId); - // ... - } - fetchData(); -}, [someId]); // Or [] if effect doesn't need props or state - -Learn more about data fetching with Hooks: https://fb.me/react-hooks-data-fetching`:Ye=" You returned: "+Ie,Ke(!1,"An effect function must not return anything besides a function, which is used for clean-up.%s%s",Ye,_r(_))}}}V=V.next}while(V!==j)}}function Ea(a){if((a.effectTag&L0)!==_i)switch(a.tag){case L:case ge:case le:{_c(rr,wf,a),_c(wf,$c,a);break}default:break}}function yp(a,c,_,T){switch(_.tag){case L:case ge:case le:{_c(gm,ol,_);break}case N:{var R=_.stateNode;if(_.effectTag&mr)if(c===null)Oi(_,"componentDidMount"),_.type===_.elementType&&!ma&&(R.props!==_.memoizedProps&&Kt(!1,"Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(_.type)||"instance"),R.state!==_.memoizedState&&Kt(!1,"Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(_.type)||"instance")),R.componentDidMount(),gi();else{var j=_.elementType===_.type?c.memoizedProps:bi(_.type,c.memoizedProps),V=c.memoizedState;Oi(_,"componentDidUpdate"),_.type===_.elementType&&!ma&&(R.props!==_.memoizedProps&&Kt(!1,"Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(_.type)||"instance"),R.state!==_.memoizedState&&Kt(!1,"Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(_.type)||"instance")),R.componentDidUpdate(j,V,R.__reactInternalSnapshotBeforeUpdate),gi()}var te=_.updateQueue;te!==null&&(_.type===_.elementType&&!ma&&(R.props!==_.memoizedProps&&Kt(!1,"Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(_.type)||"instance"),R.state!==_.memoizedState&&Kt(!1,"Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(_.type)||"instance")),vo(_,te,R,T));return}case U:{var oe=_.updateQueue;if(oe!==null){var Ie=null;if(_.child!==null)switch(_.child.tag){case W:Ie=Ro(_.child.stateNode);break;case N:Ie=_.child.stateNode;break}vo(_,oe,Ie,T)}return}case W:{var Ye=_.stateNode;if(c===null&&_.effectTag&mr){var pt=_.type,Nt=_.memoizedProps;Pu(Ye,pt,Nt,_)}return}case ne:return;case q:return;case ze:{if(Zt){var Vt=_.memoizedProps.onRender;typeof Vt=="function"&&(Ln?Vt(_.memoizedProps.id,c===null?"mount":"update",_.actualDuration,_.treeBaseDuration,_.actualStartTime,kl(),a.memoizedInteractions):Vt(_.memoizedProps.id,c===null?"mount":"update",_.actualDuration,_.treeBaseDuration,_.actualStartTime,kl()))}return}case pe:{Nl(a,_);return}case wt:case Ge:case xt:case $e:return;default:throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.")}}function M2(a,c){if(P0)for(var _=a;;){if(_.tag===W){var T=_.stateNode;c?Oa(T):Zs(_.stateNode,_.memoizedProps)}else if(_.tag===ne){var R=_.stateNode;c?p0(R):K0(R,_.memoizedProps)}else if(_.tag===pe&&_.memoizedState!==null&&_.memoizedState.dehydrated===null){var j=_.child.sibling;j.return=_,_=j;continue}else if(_.child!==null){_.child.return=_,_=_.child;continue}if(_===a)return;for(;_.sibling===null;){if(_.return===null||_.return===a)return;_=_.return}_.sibling.return=_.return,_=_.sibling}}function ku(a){var c=a.ref;if(c!==null){var _=a.stateNode,T;switch(a.tag){case W:T=Ro(_);break;default:T=_}Du&&a.tag===$e&&(T=_.methods),typeof c=="function"?c(T):(c.hasOwnProperty("current")||Ke(!1,"Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().%s",qt(a.type),_r(a)),c.current=T)}}function zu(a){var c=a.ref;c!==null&&(typeof c=="function"?c(null):c.current=null)}function gp(a,c,_){switch(Rn(c),c.tag){case L:case ge:case Oe:case le:{var T=c.updateQueue;if(T!==null){var R=T.lastEffect;if(R!==null){var j=R.next,V=_>Wn?Wn:_;_n(V,function(){var $r=j;do{var wi=$r.destroy;wi!==void 0&&zm(c,wi),$r=$r.next}while($r!==j)})}}break}case N:{vp(c);var te=c.stateNode;typeof te.componentWillUnmount=="function"&&tv(c,te);return}case W:{if(ci){var oe=c.dependencies;if(oe!==null){var Ie=oe.responders;if(Ie!==null){for(var Ye=Array.from(Ie.values()),pt=0,Nt=Ye.length;pt component higher in the tree to provide a loading indicator or placeholder to display.`+_r(_))}Rp(),T=cp(T,_);var Nt=c;do{switch(Nt.tag){case U:{var Vt=T;Nt.effectTag|=f0,Nt.expirationTime=R;var zt=uv(Nt,Vt,R);r2(Nt,zt);return}case N:var vn=T,xr=Nt.type,$r=Nt.stateNode;if((Nt.effectTag&Hr)===_i&&(typeof xr.getDerivedStateFromError=="function"||$r!==null&&typeof $r.componentDidCatch=="function"&&!Lp($r))){Nt.effectTag|=f0,Nt.expirationTime=R;var wi=ov(Nt,vn,R);r2(Nt,wi);return}break;default:break}Nt=Nt.return}while(Nt!==null)}var wa=Math.ceil,Cr=at.ReactCurrentDispatcher,Ep=at.ReactCurrentOwner,fl=at.IsSomeRendererActing,cu=0,E1=1,ki=2,Dp=4,F2=8,Do=16,Ss=32,Mf=0,b2=1,wp=2,D1=3,w1=4,Sp=5,Zn=cu,cl=null,qn=null,q0=lt,k0=Mf,P2=null,Ll=bn,S1=bn,Dc=null,wc=lt,I2=!1,Tp=0,M0=500,fn=null,B2=!1,U2=null,Sc=null,Tc=!1,Cc=null,T1=y0,Cp=lt,Ka=null,Km=50,xc=0,j2=null,sv=50,C1=0,Nf=null,Lf=null,x1=lt;function Fl(){return(Zn&(Do|Ss))!==cu?Ju(vt()):(x1!==lt||(x1=Ju(vt())),x1)}function Ac(){return Ju(vt())}function Ff(a,c,_){var T=c.mode;if((T&Y)===Sr)return bn;var R=Xt();if((T&Qr)===Sr)return R===Ci?bn:Qu;if((Zn&Do)!==cu)return q0;var j;if(_!==null)j=ia(a,_.timeoutMs|0||pf);else switch(R){case Ci:j=bn;break;case Xr:j=La(a);break;case Wn:case Xu:j=ms(a);break;case m0:j=Qi;break;default:throw Error("Expected a valid priority level")}return cl!==null&&j===q0&&(j-=1),j}function Xm(a,c){hy(),gy(a);var _=z2(a,c);if(_===null){my(a);return}Up(a,c),ta();var T=Xt();if(c===bn?(Zn&F2)!==cu&&(Zn&(Do|Ss))===cu?(H(_,c),A1(_)):(Uo(_),H(_,c),Zn===cu&&It()):(Uo(_),H(_,c)),(Zn&Dp)!==cu&&(T===Xr||T===Ci))if(Ka===null)Ka=new Map([[_,c]]);else{var R=Ka.get(_);(R===void 0||R>c)&&Ka.set(_,c)}}var dl=Xm;function z2(a,c){a.expirationTimeR?T:R}function Uo(a){var c=a.lastExpiredTime;if(c!==lt){a.callbackExpirationTime=bn,a.callbackPriority=Ci,a.callbackNode=En(A1.bind(null,a));return}var _=q2(a),T=a.callbackNode;if(_===lt){T!==null&&(a.callbackNode=null,a.callbackExpirationTime=lt,a.callbackPriority=y0);return}var R=Fl(),j=$1(R,_);if(T!==null){var V=a.callbackPriority,te=a.callbackExpirationTime;if(te===_&&V>=j)return;er(T)}a.callbackExpirationTime=_,a.callbackPriority=j;var oe;_===bn?oe=En(A1.bind(null,a)):oo?oe=yn(j,H2.bind(null,a)):oe=yn(j,H2.bind(null,a),{timeout:bo(_)-vt()}),a.callbackNode=oe}function H2(a,c){if(x1=lt,c){var _=Fl();return qp(a,_),Uo(a),null}var T=q2(a);if(T!==lt){var R=a.callbackNode;if((Zn&(Do|Ss))!==cu)throw Error("Should not already be working.");if(Xa(),(a!==cl||T!==q0)&&(bf(a,T),ee(a,T)),qn!==null){var j=Zn;Zn|=Do;var V=pv(a),te=W2(a);ff(qn);do try{oy();break}catch(Ye){dv(a,Ye)}while(!0);if(mt(),Zn=j,hv(V),Ln&&V2(te),k0===b2){var oe=P2;throw Bp(),bf(a,T),Bf(a,T),Uo(a),oe}if(qn!==null)Bp();else{Tv();var Ie=a.finishedWork=a.current.alternate;a.finishedExpirationTime=T,Qm(a,Ie,k0,T)}if(Uo(a),a.callbackNode===R)return H2.bind(null,a)}}return null}function Qm(a,c,_,T){switch(cl=null,_){case Mf:case b2:throw Error("Root did not complete. This is a bug in React.");case wp:{qp(a,T>Qi?Qi:T);break}case D1:{Bf(a,T);var R=a.lastSuspendedTime;T===R&&(a.nextKnownPendingLevel=Op(c)),d();var j=Ll===bn;if(j&&!(Y0&&If.current)){var V=Tp+M0-vt();if(V>10){if(I2){var te=a.lastPingedTime;if(te===lt||te>=T){a.lastPingedTime=T,bf(a,T);break}}var oe=q2(a);if(oe!==lt&&oe!==T)break;if(R!==lt&&R!==T){a.lastPingedTime=R;break}a.timeoutHandle=St(r0.bind(null,a),V);break}}r0(a);break}case w1:{Bf(a,T);var Ie=a.lastSuspendedTime;if(T===Ie&&(a.nextKnownPendingLevel=Op(c)),d(),!(Y0&&If.current)){if(I2){var Ye=a.lastPingedTime;if(Ye===lt||Ye>=T){a.lastPingedTime=T,bf(a,T);break}}var pt=q2(a);if(pt!==lt&&pt!==T)break;if(Ie!==lt&&Ie!==T){a.lastPingedTime=Ie;break}var Nt;if(S1!==bn)Nt=bo(S1)-vt();else if(Ll===bn)Nt=0;else{var Vt=_v(Ll),zt=vt(),vn=bo(T)-zt,xr=zt-Vt;xr<0&&(xr=0),Nt=Pp(xr)-xr,vn10){a.timeoutHandle=St(r0.bind(null,a),Nt);break}}r0(a);break}case Sp:{if(!(Y0&&If.current)&&Ll!==bn&&Dc!==null){var $r=Ip(Ll,T,Dc);if($r>10){Bf(a,T),a.timeoutHandle=St(r0.bind(null,a),$r);break}}r0(a);break}default:throw Error("Unknown root exit status.")}}function A1(a){var c=a.lastExpiredTime,_=c!==lt?c:bn;if(a.finishedExpirationTime===_)r0(a);else{if((Zn&(Do|Ss))!==cu)throw Error("Should not already be working.");if(Xa(),(a!==cl||_!==q0)&&(bf(a,_),ee(a,_)),qn!==null){var T=Zn;Zn|=Do;var R=pv(a),j=W2(a);ff(qn);do try{Ev();break}catch(te){dv(a,te)}while(!0);if(mt(),Zn=T,hv(R),Ln&&V2(j),k0===b2){var V=P2;throw Bp(),bf(a,_),Bf(a,_),Uo(a),V}if(qn!==null)throw Error("Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.");Tv(),a.finishedWork=a.current.alternate,a.finishedExpirationTime=_,Jm(a,k0,_),Uo(a)}}return null}function Jm(a,c,_){cl=null,(c===D1||c===w1)&&d(),r0(a)}function Zm(a,c){qp(a,c),Uo(a),(Zn&(Do|Ss))===cu&&It()}function av(){if((Zn&(E1|Do|Ss))!==cu){(Zn&Do)!==cu&&Kt(!1,"unstable_flushDiscreteUpdates: Cannot flush updates when React is already rendering.");return}ey(),Xa()}function $m(a){return _n(Wn,a)}function fv(a,c,_,T){return _n(Ci,a.bind(null,c,_,T))}function ey(){if(Ka!==null){var a=Ka;Ka=null,a.forEach(function(c,_){qp(_,c),Uo(_)}),It()}}function ty(a,c){var _=Zn;Zn|=E1;try{return a(c)}finally{Zn=_,Zn===cu&&It()}}function ny(a,c){var _=Zn;Zn|=ki;try{return a(c)}finally{Zn=_,Zn===cu&&It()}}function cv(a,c,_,T){var R=Zn;Zn|=Dp;try{return _n(Xr,a.bind(null,c,_,T))}finally{Zn=R,Zn===cu&&It()}}function ry(a,c){var _=Zn;Zn&=~E1,Zn|=F2;try{return a(c)}finally{Zn=_,Zn===cu&&It()}}function xp(a,c){if((Zn&(Do|Ss))!==cu)throw Error("flushSync was called from inside a lifecycle method. It cannot be called when React is already rendering.");var _=Zn;Zn|=E1;try{return _n(Ci,a.bind(null,c))}finally{Zn=_,It()}}function iy(a){var c=Zn;Zn|=E1;try{_n(Ci,a)}finally{Zn=c,Zn===cu&&It()}}function bf(a,c){a.finishedWork=null,a.finishedExpirationTime=lt;var _=a.timeoutHandle;if(_!==Jo&&(a.timeoutHandle=Jo,so(_)),qn!==null)for(var T=qn.return;T!==null;)$h(T),T=T.return;cl=a,qn=wo(a.current,null,c),q0=c,k0=Mf,P2=null,Ll=bn,S1=bn,Dc=null,wc=lt,I2=!1,Ln&&(Lf=null),wl.discardPendingWarnings(),Ys=null}function dv(a,c){do{try{if(mt(),m2(),nt(),qn===null||qn.return===null)return k0=b2,P2=c,null;Zt&&qn.mode&Jr&&a1(qn,!0),lv(a,qn.return,qn,c,q0),qn=Dv(qn)}catch(_){c=_;continue}return}while(!0)}function pv(a){var c=Cr.current;return Cr.current=o1,c===null?o1:c}function hv(a){Cr.current=a}function W2(a){if(Ln){var c=k.__interactionsRef.current;return k.__interactionsRef.current=a.memoizedInteractions,c}return null}function V2(a){Ln&&(k.__interactionsRef.current=a)}function Ap(){Tp=vt()}function vv(a,c){aQi&&(Ll=a),c!==null&&aQi&&(S1=a,Dc=c)}function G2(a){a>wc&&(wc=a)}function mv(){k0===Mf&&(k0=D1)}function yv(){(k0===Mf||k0===D1)&&(k0=w1),wc!==lt&&cl!==null&&(Bf(cl,q0),o_(cl,wc))}function Rp(){k0!==Sp&&(k0=wp)}function gv(){return k0===Mf}function _v(a){var c=bo(a);return c-pf}function uy(a,c){var _=bo(a);return _-(c.timeoutMs|0||pf)}function Ev(){for(;qn!==null;)qn=Y2(qn)}function oy(){for(;qn!==null&&!kn();)qn=Y2(qn)}function Y2(a){var c=a.alternate;Kl(a),_t(a);var _;return Zt&&(a.mode&Jr)!==Sr?(zd(a),_=R1(c,a,q0),a1(a,!0)):_=R1(c,a,q0),nt(),a.memoizedProps=a.pendingProps,_===null&&(_=Dv(a)),Ep.current=null,_}function Dv(a){qn=a;do{var c=qn.alternate,_=qn.return;if((qn.effectTag&F0)===_i){_t(qn);var T=void 0;if(!Zt||(qn.mode&Jr)===Sr?T=Zh(c,qn,q0):(zd(qn),T=Zh(c,qn,q0),a1(qn,!1)),Yr(qn),nt(),ly(qn),T!==null)return T;if(_!==null&&(_.effectTag&F0)===_i){_.firstEffect===null&&(_.firstEffect=qn.firstEffect),qn.lastEffect!==null&&(_.lastEffect!==null&&(_.lastEffect.nextEffect=qn.firstEffect),_.lastEffect=qn.lastEffect);var R=qn.effectTag;R>eu&&(_.lastEffect!==null?_.lastEffect.nextEffect=qn:_.firstEffect=qn,_.lastEffect=qn)}}else{var j=Pm(qn,q0);if(Zt&&(qn.mode&Jr)!==Sr){a1(qn,!1);for(var V=qn.actualDuration,te=qn.child;te!==null;)V+=te.actualDuration,te=te.sibling;qn.actualDuration=V}if(j!==null)return fo(qn),j.effectTag&=Hl,j;Yr(qn),_!==null&&(_.firstEffect=_.lastEffect=null,_.effectTag|=F0)}var oe=qn.sibling;if(oe!==null)return oe;qn=_}while(qn!==null);return k0===Mf&&(k0=Sp),null}function Op(a){var c=a.expirationTime,_=a.childExpirationTime;return c>_?c:_}function ly(a){if(!(q0!==hi&&a.childExpirationTime===hi)){var c=lt;if(Zt&&(a.mode&Jr)!==Sr){for(var _=a.actualDuration,T=a.selfBaseDuration,R=a.alternate===null||a.child!==a.alternate.child,j=a.child;j!==null;){var V=j.expirationTime,te=j.childExpirationTime;V>c&&(c=V),te>c&&(c=te),R&&(_+=j.actualDuration),T+=j.treeBaseDuration,j=j.sibling}a.actualDuration=_,a.treeBaseDuration=T}else for(var oe=a.child;oe!==null;){var Ie=oe.expirationTime,Ye=oe.childExpirationTime;Ie>c&&(c=Ie),Ye>c&&(c=Ye),oe=oe.sibling}a.childExpirationTime=c}}function r0(a){var c=Xt();return _n(Ci,kp.bind(null,a,c)),null}function kp(a,c){do Xa();while(Cc!==null);if(vy(),(Zn&(Do|Ss))!==cu)throw Error("Should not already be working.");var _=a.finishedWork,T=a.finishedExpirationTime;if(_===null)return null;if(a.finishedWork=null,a.finishedExpirationTime=lt,_===a.current)throw Error("Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.");a.callbackNode=null,a.callbackExpirationTime=lt,a.callbackPriority=y0,a.nextKnownPendingLevel=lt,J0();var R=Op(_);iE(a,T,R),a===cl&&(cl=null,qn=null,q0=lt);var j;if(_.effectTag>eu?_.lastEffect!==null?(_.lastEffect.nextEffect=_,j=_.firstEffect):j=_:j=_.firstEffect,j!==null){var V=Zn;Zn|=Ss;var te=W2(a);Ep.current=null,Te(),Bn(a.containerInfo),fn=j;do if(sl(null,sy,null),Jn()){if(fn===null)throw Error("Should be working on an effect.");var oe=Vs();Pf(fn,oe),fn=fn.nextEffect}while(fn!==null);et(),Zt&&Oh(),Ve(),fn=j;do if(sl(null,ay,null,a,c),Jn()){if(fn===null)throw Error("Should be working on an effect.");var Ie=Vs();Pf(fn,Ie),fn=fn.nextEffect}while(fn!==null);Gt(),Ir(a.containerInfo),a.current=_,Yt(),fn=j;do if(sl(null,Mp,null,a,T),Jn()){if(fn===null)throw Error("Should be working on an effect.");var Ye=Vs();Pf(fn,Ye),fn=fn.nextEffect}while(fn!==null);sr(),fn=null,se(),Ln&&V2(te),Zn=V}else a.current=_,Te(),et(),Zt&&Oh(),Ve(),Gt(),Yt(),sr();Z0();var pt=Tc;if(Tc)Tc=!1,Cc=a,Cp=T,T1=c;else for(fn=j;fn!==null;){var Nt=fn.nextEffect;fn.nextEffect=null,fn=Nt}var Vt=a.firstPendingTime;if(Vt!==lt){if(Ln){if(Lf!==null){var zt=Lf;Lf=null;for(var vn=0;vnWn?Wn:T1;return T1=y0,_n(a,Np)}}function Np(){if(Cc===null)return!1;var a=Cc,c=Cp;if(Cc=null,Cp=lt,(Zn&(Do|Ss))!==cu)throw Error("Cannot flush passive effects while already rendering.");var _=Zn;Zn|=Ss;for(var T=W2(a),R=a.current.firstEffect;R!==null;){{if(_t(R),sl(null,Ea,null,R),Jn()){if(R===null)throw Error("Should be working on an effect.");var j=Vs();Pf(R,j)}nt()}var V=R.nextEffect;R.nextEffect=null,R=V}return Ln&&(V2(T),de(a,c)),Zn=_,It(),C1=Cc===null?0:C1+1,!0}function Lp(a){return Sc!==null&&Sc.has(a)}function Fp(a){Sc===null?Sc=new Set([a]):Sc.add(a)}function fy(a){B2||(B2=!0,U2=a)}var cy=fy;function wv(a,c,_){var T=cp(_,c),R=uv(a,T,bn);Ua(a,R);var j=z2(a,bn);j!==null&&(Uo(j),H(j,bn))}function Pf(a,c){if(a.tag===U){wv(a,a,c);return}for(var _=a.return;_!==null;){if(_.tag===U){wv(_,a,c);return}else if(_.tag===N){var T=_.type,R=_.stateNode;if(typeof T.getDerivedStateFromError=="function"||typeof R.componentDidCatch=="function"&&!Lp(R)){var j=cp(c,a),V=ov(_,j,bn);Ua(_,V);var te=z2(_,bn);te!==null&&(Uo(te),H(te,bn));return}}_=_.return}}function bp(a,c,_){var T=a.pingCache;if(T!==null&&T.delete(c),cl===a&&q0===_){k0===w1||k0===D1&&Ll===bn&&vt()-TpKm)throw xc=0,j2=null,Error("Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.");C1>sv&&(C1=0,Kt(!1,"Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render."))}function vy(){wl.flushLegacyContextWarning(),fi&&wl.flushPendingUnsafeLifecycleWarnings()}function Tv(){var a=!0;cf(Nf,a),Nf=null}function Bp(){var a=!1;cf(Nf,a),Nf=null}function Up(a,c){Pr&&cl!==null&&c>q0&&(Nf=a)}var K2=null;function my(a){{var c=a.tag;if(c!==U&&c!==N&&c!==L&&c!==ge&&c!==Oe&&c!==le)return;var _=qt(a.type)||"ReactComponent";if(K2!==null){if(K2.has(_))return;K2.add(_)}else K2=new Set([_]);Ke(!1,"Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in %s.%s",c===N?"the componentWillUnmount method":"a useEffect cleanup function",_r(a))}}var R1;if(G0){var yy=null;R1=function(a,c,_){var T=i_(yy,c);try{return op(a,c,_)}catch(j){if(j!==null&&typeof j=="object"&&typeof j.then=="function")throw j;if(mt(),m2(),$h(c),i_(c,T),Zt&&c.mode&Jr&&zd(c),sl(null,op,null,a,c,_),Jn()){var R=Vs();throw R}else throw j}}}else R1=op;var Cv=!1,xv=!1;function gy(a){if(a.tag===N)switch(Ar){case"getChildContext":if(xv)return;Ke(!1,"setState(...): Cannot call setState() inside getChildContext()"),xv=!0;break;case"render":if(Cv)return;Ke(!1,"Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state."),Cv=!0;break}}var If={current:!1};function jp(a){fs===!0&&fl.current===!0&&If.current!==!0&&Ke(!1,`It looks like you're using the wrong act() around your test interactions. -Be sure to use the matching version of act() corresponding to your renderer: - -// for react-dom: -import {act} from 'react-dom/test-utils'; -// ... -act(() => ...); - -// for react-test-renderer: -import TestRenderer from 'react-test-renderer'; -const {act} = TestRenderer; -// ... -act(() => ...);%s`,_r(a))}function Av(a){fs===!0&&(a.mode&cr)!==Sr&&fl.current===!1&&If.current===!1&&Ke(!1,`An update to %s ran an effect, but was not wrapped in act(...). - -When testing, code that causes React state updates should be wrapped into act(...): - -act(() => { - /* fire events that update state */ -}); -/* assert on the output */ - -This ensures that you're testing the behavior the user would see in the browser. Learn more at https://fb.me/react-wrap-tests-with-act%s`,qt(a.type),_r(a))}function _y(a){fs===!0&&Zn===cu&&fl.current===!1&&If.current===!1&&Ke(!1,`An update to %s inside a test was not wrapped in act(...). - -When testing, code that causes React state updates should be wrapped into act(...): - -act(() => { - /* fire events that update state */ -}); -/* assert on the output */ - -This ensures that you're testing the behavior the user would see in the browser. Learn more at https://fb.me/react-wrap-tests-with-act%s`,qt(a.type),_r(a))}var Ey=_y,zp=!1;function Dy(a){zp===!1&&t.unstable_flushAllWithoutAsserting===void 0&&(a.mode&Y||a.mode&Qr?(zp=!0,Ke(!1,`In Concurrent or Sync modes, the "scheduler" module needs to be mocked to guarantee consistent behaviour across tests and browsers. For example, with jest: -jest.mock('scheduler', () => require('scheduler/unstable_mock')); - -For more info, visit https://fb.me/react-mock-scheduler`)):Yi===!0&&(zp=!0,Ke(!1,`Starting from React v17, the "scheduler" module will need to be mocked to guarantee consistent behaviour across tests and browsers. For example, with jest: -jest.mock('scheduler', () => require('scheduler/unstable_mock')); - -For more info, visit https://fb.me/react-mock-scheduler`)))}var Ys=null;function wy(a){{var c=Xt();if((a.mode&Qr)!==_i&&(c===Xr||c===Ci))for(var _=a;_!==null;){var T=_.alternate;if(T!==null)switch(_.tag){case N:var R=T.updateQueue;if(R!==null)for(var j=R.firstUpdate;j!==null;){var V=j.priority;if(V===Xr||V===Ci){Ys===null?Ys=new Set([qt(_.type)]):Ys.add(qt(_.type));break}j=j.next}break;case L:case ge:case le:if(_.memoizedState!==null&&_.memoizedState.baseUpdate!==null)for(var te=_.memoizedState.baseUpdate;te!==null;){var oe=te.priority;if(oe===Xr||oe===Ci){Ys===null?Ys=new Set([qt(_.type)]):Ys.add(qt(_.type));break}if(te.next===_.memoizedState.baseUpdate)break;te=te.next}break;default:break}_=_.return}}}function d(){if(Ys!==null){var a=[];Ys.forEach(function(c){return a.push(c)}),Ys=null,a.length>0&&Ke(!1,`%s triggered a user-blocking update that suspended. - -The fix is to split the update into multiple parts: a user-blocking update to provide immediate feedback, and another update that triggers the bulk of the changes. - -Refer to the documentation for useTransition to learn how to implement this pattern.`,a.sort().join(", "))}}function v(a,c){return c*1e3+a.interactionThreadID}function x(a){!Ln||(Lf===null?Lf=[a]:Lf.push(a))}function b(a,c,_){if(!!Ln&&_.size>0){var T=a.pendingInteractionMap,R=T.get(c);R!=null?_.forEach(function(te){R.has(te)||te.__count++,R.add(te)}):(T.set(c,new Set(_)),_.forEach(function(te){te.__count++}));var j=k.__subscriberRef.current;if(j!==null){var V=v(a,c);j.onWorkScheduled(_,V)}}}function H(a,c){!Ln||b(a,c,k.__interactionsRef.current)}function ee(a,c){if(!!Ln){var _=new Set;if(a.pendingInteractionMap.forEach(function(j,V){V>=c&&j.forEach(function(te){return _.add(te)})}),a.memoizedInteractions=_,_.size>0){var T=k.__subscriberRef.current;if(T!==null){var R=v(a,c);try{T.onWorkStarted(_,R)}catch(j){yn(Ci,function(){throw j})}}}}}function de(a,c){if(!!Ln){var _=a.firstPendingTime,T;try{if(T=k.__subscriberRef.current,T!==null&&a.memoizedInteractions.size>0){var R=v(a,c);T.onWorkStopped(a.memoizedInteractions,R)}}catch(V){yn(Ci,function(){throw V})}finally{var j=a.pendingInteractionMap;j.forEach(function(V,te){te>_&&(j.delete(te),V.forEach(function(oe){if(oe.__count--,T!==null&&oe.__count===0)try{T.onInteractionScheduledWorkCompleted(oe)}catch(Ie){yn(Ci,function(){throw Ie})}}))})}}}var ye=null,be=null,gt=!1,Dt=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__!="undefined";function Rt(a){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__=="undefined")return!1;var c=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(c.isDisabled)return!0;if(!c.supportsFiber)return Ke(!1,"The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://fb.me/react-devtools"),!0;try{var _=c.inject(a);ye=function(T,R){try{var j=(T.current.effectTag&Hr)===Hr;if(Zt){var V=Ac(),te=$1(V,R);c.onCommitFiberRoot(_,T,te,j)}else c.onCommitFiberRoot(_,T,void 0,j)}catch(oe){gt||(gt=!0,Ke(!1,"React DevTools encountered an error: %s",oe))}},be=function(T){try{c.onCommitFiberUnmount(_,T)}catch(R){gt||(gt=!0,Ke(!1,"React DevTools encountered an error: %s",R))}}}catch(T){Ke(!1,"React DevTools encountered an error: %s.",T)}return!0}function rn(a,c){typeof ye=="function"&&ye(a,c)}function Rn(a){typeof be=="function"&&be(a)}var $n;{$n=!1;try{var Nr=Object.preventExtensions({}),ir=new Map([[Nr,null]]),Zr=new Set([Nr]);ir.set(0,0),Zr.add(0)}catch(a){$n=!0}}var ui=1;function bl(a,c,_,T){this.tag=a,this.key=_,this.elementType=null,this.type=null,this.stateNode=null,this.return=null,this.child=null,this.sibling=null,this.index=0,this.ref=null,this.pendingProps=c,this.memoizedProps=null,this.updateQueue=null,this.memoizedState=null,this.dependencies=null,this.mode=T,this.effectTag=_i,this.nextEffect=null,this.firstEffect=null,this.lastEffect=null,this.expirationTime=lt,this.childExpirationTime=lt,this.alternate=null,Zt&&(this.actualDuration=Number.NaN,this.actualStartTime=Number.NaN,this.selfBaseDuration=Number.NaN,this.treeBaseDuration=Number.NaN,this.actualDuration=0,this.actualStartTime=-1,this.selfBaseDuration=0,this.treeBaseDuration=0),Pr&&(this._debugID=ui++,this._debugIsCurrentlyTiming=!1),this._debugSource=null,this._debugOwner=null,this._debugNeedsRemount=!1,this._debugHookTypes=null,!$n&&typeof Object.preventExtensions=="function"&&Object.preventExtensions(this)}var Wi=function(a,c,_,T){return new bl(a,c,_,T)};function uo(a){var c=a.prototype;return!!(c&&c.isReactComponent)}function i0(a){return typeof a=="function"&&!uo(a)&&a.defaultProps===void 0}function Ts(a){if(typeof a=="function")return uo(a)?N:L;if(a!=null){var c=a.$$typeof;if(c===An)return ge;if(c===Wt)return Oe}return C}function wo(a,c,_){var T=a.alternate;T===null?(T=Wi(a.tag,c,a.key,a.mode),T.elementType=a.elementType,T.type=a.type,T.stateNode=a.stateNode,T._debugID=a._debugID,T._debugSource=a._debugSource,T._debugOwner=a._debugOwner,T._debugHookTypes=a._debugHookTypes,T.alternate=a,a.alternate=T):(T.pendingProps=c,T.effectTag=_i,T.nextEffect=null,T.firstEffect=null,T.lastEffect=null,Zt&&(T.actualDuration=0,T.actualStartTime=-1)),T.childExpirationTime=a.childExpirationTime,T.expirationTime=a.expirationTime,T.child=a.child,T.memoizedProps=a.memoizedProps,T.memoizedState=a.memoizedState,T.updateQueue=a.updateQueue;var R=a.dependencies;switch(T.dependencies=R===null?null:{expirationTime:R.expirationTime,firstContext:R.firstContext,responders:R.responders},T.sibling=a.sibling,T.index=a.index,T.ref=a.ref,Zt&&(T.selfBaseDuration=a.selfBaseDuration,T.treeBaseDuration=a.treeBaseDuration),T._debugNeedsRemount=a._debugNeedsRemount,T.tag){case C:case L:case le:T.type=Zu(a.type);break;case N:T.type=U0(a.type);break;case ge:T.type=vf(a.type);break;default:break}return T}function Rv(a,c){a.effectTag&=ai,a.nextEffect=null,a.firstEffect=null,a.lastEffect=null;var _=a.alternate;if(_===null)a.childExpirationTime=lt,a.expirationTime=c,a.child=null,a.memoizedProps=null,a.memoizedState=null,a.updateQueue=null,a.dependencies=null,Zt&&(a.selfBaseDuration=0,a.treeBaseDuration=0);else{a.childExpirationTime=_.childExpirationTime,a.expirationTime=_.expirationTime,a.child=_.child,a.memoizedProps=_.memoizedProps,a.memoizedState=_.memoizedState,a.updateQueue=_.updateQueue;var T=_.dependencies;a.dependencies=T===null?null:{expirationTime:T.expirationTime,firstContext:T.firstContext,responders:T.responders},Zt&&(a.selfBaseDuration=_.selfBaseDuration,a.treeBaseDuration=_.treeBaseDuration)}return a}function X4(a){var c;return a===R0?c=Qr|Y|cr:a===I0?c=Y|cr:c=Sr,Zt&&Dt&&(c|=Jr),Wi(U,null,null,c)}function Sy(a,c,_,T,R,j){var V,te=C,oe=a;if(typeof a=="function")uo(a)?(te=N,oe=U0(oe)):oe=Zu(oe);else if(typeof a=="string")te=W;else{e:switch(a){case ue:return Qa(_.children,R,j,c);case ln:te=we,R|=Qr|Y|cr;break;case je:te=we,R|=cr;break;case ct:return J4(_,R,j,c);case nr:return Z4(_,R,j,c);case un:return $4(_,R,j,c);default:{if(typeof a=="object"&&a!==null)switch(a.$$typeof){case At:te=he;break e;case en:te=Se;break e;case An:te=ge,oe=vf(oe);break e;case Wt:te=Oe;break e;case vr:te=Ue,oe=null;break e;case w:if(Ht)return r_(a,_,R,j,c);break;case Vn:if(Du)return Q4(a,_,R,j,c)}var Ie="";{(a===void 0||typeof a=="object"&&a!==null&&Object.keys(a).length===0)&&(Ie+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var Ye=T?qt(T.type):null;Ye&&(Ie+=` - -Check the render method of \``+Ye+"`.")}throw Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+(a==null?a:typeof a)+"."+Ie)}}}return V=Wi(te,_,c,R),V.elementType=a,V.type=oe,V.expirationTime=j,V}function Ty(a,c,_){var T=null;T=a._owner;var R=a.type,j=a.key,V=a.props,te=Sy(R,j,V,T,c,_);return te._debugSource=a._source,te._debugOwner=a._owner,te}function Qa(a,c,_,T){var R=Wi(m,a,T,c);return R.expirationTime=_,R}function r_(a,c,_,T,R){var j=Wi(xt,c,R,_);return j.elementType=a,j.type=a,j.expirationTime=T,j}function Q4(a,c,_,T,R){var j=Wi($e,c,R,_);return j.type=a,j.elementType=a,j.expirationTime=T,j}function J4(a,c,_,T){(typeof a.id!="string"||typeof a.onRender!="function")&&Ke(!1,'Profiler must specify an "id" string and "onRender" function as props');var R=Wi(ze,a,T,c|Jr);return R.elementType=ct,R.type=ct,R.expirationTime=_,R}function Z4(a,c,_,T){var R=Wi(pe,a,T,c);return R.type=nr,R.elementType=nr,R.expirationTime=_,R}function $4(a,c,_,T){var R=Wi(wt,a,T,c);return R.type=un,R.elementType=un,R.expirationTime=_,R}function Cy(a,c,_){var T=Wi(ne,a,null,c);return T.expirationTime=_,T}function eE(){var a=Wi(W,null,null,Sr);return a.elementType="DELETED",a.type="DELETED",a}function tE(a){var c=Wi(rt,null,null,Sr);return c.stateNode=a,c}function xy(a,c,_){var T=a.children!==null?a.children:[],R=Wi(q,T,a.key,c);return R.expirationTime=_,R.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation},R}function i_(a,c){return a===null&&(a=Wi(C,null,null,Sr)),a.tag=c.tag,a.key=c.key,a.elementType=c.elementType,a.type=c.type,a.stateNode=c.stateNode,a.return=c.return,a.child=c.child,a.sibling=c.sibling,a.index=c.index,a.ref=c.ref,a.pendingProps=c.pendingProps,a.memoizedProps=c.memoizedProps,a.updateQueue=c.updateQueue,a.memoizedState=c.memoizedState,a.dependencies=c.dependencies,a.mode=c.mode,a.effectTag=c.effectTag,a.nextEffect=c.nextEffect,a.firstEffect=c.firstEffect,a.lastEffect=c.lastEffect,a.expirationTime=c.expirationTime,a.childExpirationTime=c.childExpirationTime,a.alternate=c.alternate,Zt&&(a.actualDuration=c.actualDuration,a.actualStartTime=c.actualStartTime,a.selfBaseDuration=c.selfBaseDuration,a.treeBaseDuration=c.treeBaseDuration),a._debugID=c._debugID,a._debugSource=c._debugSource,a._debugOwner=c._debugOwner,a._debugIsCurrentlyTiming=c._debugIsCurrentlyTiming,a._debugNeedsRemount=c._debugNeedsRemount,a._debugHookTypes=c._debugHookTypes,a}function nE(a,c,_){this.tag=c,this.current=null,this.containerInfo=a,this.pendingChildren=null,this.pingCache=null,this.finishedExpirationTime=lt,this.finishedWork=null,this.timeoutHandle=Jo,this.context=null,this.pendingContext=null,this.hydrate=_,this.callbackNode=null,this.callbackPriority=y0,this.firstPendingTime=lt,this.firstSuspendedTime=lt,this.lastSuspendedTime=lt,this.nextKnownPendingLevel=lt,this.lastPingedTime=lt,this.lastExpiredTime=lt,Ln&&(this.interactionThreadID=k.unstable_getThreadID(),this.memoizedInteractions=new Set,this.pendingInteractionMap=new Map),Ui&&(this.hydrationCallbacks=null)}function rE(a,c,_,T){var R=new nE(a,c,_);Ui&&(R.hydrationCallbacks=T);var j=X4(c);return R.current=j,j.stateNode=R,R}function u_(a,c){var _=a.firstSuspendedTime,T=a.lastSuspendedTime;return _!==lt&&_>=c&&T<=c}function Bf(a,c){var _=a.firstSuspendedTime,T=a.lastSuspendedTime;_c||_===lt)&&(a.lastSuspendedTime=c),c<=a.lastPingedTime&&(a.lastPingedTime=lt),c<=a.lastExpiredTime&&(a.lastExpiredTime=lt)}function o_(a,c){var _=a.firstPendingTime;c>_&&(a.firstPendingTime=c);var T=a.firstSuspendedTime;T!==lt&&(c>=T?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=lt:c>=a.lastSuspendedTime&&(a.lastSuspendedTime=c+1),c>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=c))}function iE(a,c,_){a.firstPendingTime=_,c<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=lt:c<=a.firstSuspendedTime&&(a.firstSuspendedTime=c-1),c<=a.lastPingedTime&&(a.lastPingedTime=lt),c<=a.lastExpiredTime&&(a.lastExpiredTime=lt)}function qp(a,c){var _=a.lastExpiredTime;(_===lt||_>c)&&(a.lastExpiredTime=c)}var uE={debugTool:null},Ov=uE,Ay,Ry;Ay=!1,Ry={};function oE(a){if(!a)return Sn;var c=jt(a),_=El(c);if(c.tag===N){var T=c.type;if(zi(T))return A0(c,T,_)}return _}function Oy(a){var c=jt(a);if(c===void 0)throw typeof a.render=="function"?Error("Unable to find node on an unmounted component."):Error("Argument appears to not be a ReactComponent. Keys: "+Object.keys(a));var _=b0(c);return _===null?null:_.stateNode}function lE(a,c){{var _=jt(a);if(_===void 0)throw typeof a.render=="function"?Error("Unable to find node on an unmounted component."):Error("Argument appears to not be a ReactComponent. Keys: "+Object.keys(a));var T=b0(_);if(T===null)return null;if(T.mode&cr){var R=qt(_.type)||"Component";Ry[R]||(Ry[R]=!0,_.mode&cr?Ke(!1,"%s is deprecated in StrictMode. %s was passed an instance of %s which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://fb.me/react-strict-mode-find-node%s",c,c,R,_r(T)):Ke(!1,"%s is deprecated in StrictMode. %s was passed an instance of %s which renders StrictMode children. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://fb.me/react-strict-mode-find-node%s",c,c,R,_r(T)))}return T.stateNode}return Oy(a)}function sE(a,c,_,T){return rE(a,c,_,T)}function l_(a,c,_,T){var R=c.current,j=Fl();typeof jest!="undefined"&&(Dy(R),jp(R));var V=mo(),te=Ff(j,R,V);Ov.debugTool&&(R.alternate===null?Ov.debugTool.onMountContainer(c):a===null?Ov.debugTool.onUnmountContainer(c):Ov.debugTool.onUpdateContainer(c));var oe=oE(_);c.context===null?c.context=oe:c.pendingContext=oe,Ar==="render"&&Cn!==null&&!Ay&&(Ay=!0,Ke(!1,`Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate. - -Check the render method of %s.`,qt(Cn.type)||"Unknown"));var Ie=gu(te,V);return Ie.payload={element:a},T=T===void 0?null:T,T!==null&&(typeof T!="function"&&Ke(!1,"render(...): Expected the last optional `callback` argument to be a function. Instead received: %s.",T),Ie.callback=T),Ua(R,Ie),dl(R,te),te}function aE(a){var c=a.current;if(!c.child)return null;switch(c.child.tag){case W:return Ro(c.child.stateNode);default:return c.child.stateNode}}function fE(a){switch(a.tag){case U:var c=a.stateNode;c.hydrate&&Zm(c,c.firstPendingTime);break;case pe:xp(function(){return dl(a,bn)});var _=La(Fl());kv(a,_);break}}function s_(a,c){var _=a.memoizedState;_!==null&&_.dehydrated!==null&&_.retryTime=c.length)return T;var R=c[_],j=Array.isArray(a)?a.slice():f({},a);return j[R]=Ny(a[R],c,_+1,T),j},h_=function(a,c,_){return Ny(a,c,0,_)};f_=function(a,c,_,T){for(var R=a.memoizedState;R!==null&&c>0;)R=R.next,c--;if(R!==null){var j=h_(R.memoizedState,_,T);R.memoizedState=j,R.baseState=j,a.memoizedProps=f({},a.memoizedProps),dl(a,bn)}},c_=function(a,c,_){a.pendingProps=h_(a.memoizedProps,c,_),a.alternate&&(a.alternate.pendingProps=a.pendingProps),dl(a,bn)},d_=function(a){dl(a,bn)},p_=function(a){My=a}}function hE(a){var c=a.findFiberByHostInstance,_=at.ReactCurrentDispatcher;return Rt(f({},a,{overrideHookState:f_,overrideProps:c_,setSuspenseHandler:p_,scheduleUpdate:d_,currentDispatcherRef:_,findHostInstanceByFiber:function(T){var R=b0(T);return R===null?null:R.stateNode},findFiberByHostInstance:function(T){return c?c(T):null},findHostInstancesForRefresh:n2,scheduleRefresh:Sl,scheduleRoot:_s,setRefreshHandler:Ia,getCurrentFiber:function(){return Cn}}))}var v_=Object.freeze({createContainer:sE,updateContainer:l_,batchedEventUpdates:ny,batchedUpdates:ty,unbatchedUpdates:ry,deferredUpdates:$m,syncUpdates:fv,discreteUpdates:cv,flushDiscreteUpdates:av,flushControlled:iy,flushSync:xp,flushPassiveEffects:Xa,IsThisRendererActing:If,getPublicRootInstance:aE,attemptSynchronousHydration:fE,attemptUserBlockingHydration:cE,attemptContinuousHydration:ky,attemptHydrationAtCurrentPriority:dE,findHostInstance:Oy,findHostInstanceWithWarning:lE,findHostInstanceWithNoPortals:pE,shouldSuspend:a_,injectIntoDevTools:hE}),vE=v_.default||v_;hg.exports=vE;var mE=hg.exports;return hg.exports=i,mE})});var D9=ce((zne,cw)=>{"use strict";process.env.NODE_ENV==="production"?cw.exports=m9():cw.exports=E9()});var S9=ce((qne,w9)=>{"use strict";var ZK={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};w9.exports=ZK});var A9=ce((Hne,T9)=>{"use strict";var $K=Object.assign||function(i){for(var o=1;o"}}]),i}(),C9=function(){v4(i,null,[{key:"fromJS",value:function(f){var p=f.width,E=f.height;return new i(p,E)}}]);function i(o,f){pw(this,i),this.width=o,this.height=f}return v4(i,[{key:"fromJS",value:function(f){f(this.width,this.height)}},{key:"toString",value:function(){return""}}]),i}(),x9=function(){function i(o,f){pw(this,i),this.unit=o,this.value=f}return v4(i,[{key:"fromJS",value:function(f){f(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case Jf.UNIT_POINT:return String(this.value);case Jf.UNIT_PERCENT:return this.value+"%";case Jf.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),i}();T9.exports=function(i,o){function f(k,L,N){var C=k[L];k[L]=function(){for(var U=arguments.length,q=Array(U),W=0;W1?q-1:0),ne=1;ne1&&arguments[1]!==void 0?arguments[1]:NaN,N=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Jf.DIRECTION_LTR;return k.call(this,L,N,C)}),$K({Config:o.Config,Node:o.Node,Layout:i("Layout",eX),Size:i("Size",C9),Value:i("Value",x9),getInstanceCount:function(){return o.getInstanceCount.apply(o,arguments)}},Jf)}});var R9=ce((exports,module)=>{(function(i,o){typeof define=="function"&&define.amd?define([],function(){return o}):typeof module=="object"&&module.exports?module.exports=o:(i.nbind=i.nbind||{}).init=o})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(i,o){return function(){i&&i.apply(this,arguments);try{Module.ccall("nbind_init")}catch(f){o(f);return}o(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module!="undefined"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof require=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(o,f){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),o=nodePath.normalize(o);var p=nodeFS.readFileSync(o);return f?p:p.toString()},Module.readBinary=function(o){var f=Module.read(o,!0);return f.buffer||(f=new Uint8Array(f)),assert(f.buffer),f},Module.load=function(o){globalEval(read(o))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module!="undefined"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr!="undefined"&&(Module.printErr=printErr),typeof read!="undefined"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(o){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(o));var f=read(o,"binary");return assert(typeof f=="object"),f},typeof scriptArgs!="undefined"?Module.arguments=scriptArgs:typeof arguments!="undefined"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(i,o){quit(i)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(o){var f=new XMLHttpRequest;return f.open("GET",o,!1),f.send(null),f.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(o){var f=new XMLHttpRequest;return f.open("GET",o,!1),f.responseType="arraybuffer",f.send(null),new Uint8Array(f.response)}),Module.readAsync=function(o,f,p){var E=new XMLHttpRequest;E.open("GET",o,!0),E.responseType="arraybuffer",E.onload=function(){E.status==200||E.status==0&&E.response?f(E.response):p()},E.onerror=p,E.send(null)},typeof arguments!="undefined"&&(Module.arguments=arguments),typeof console!="undefined")Module.print||(Module.print=function(o){console.log(o)}),Module.printErr||(Module.printErr=function(o){console.warn(o)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump!="undefined"?function(i){dump(i)}:function(i){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle=="undefined"&&(Module.setWindowTitle=function(i){document.title=i})}else throw"Unknown runtime environment. Where are we?";function globalEval(i){eval.call(null,i)}!Module.load&&Module.read&&(Module.load=function(o){globalEval(Module.read(o))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(i,o){throw o}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(i){return tempRet0=i,i},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(i){STACKTOP=i},getNativeTypeSize:function(i){switch(i){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(i[i.length-1]==="*")return Runtime.QUANTUM_SIZE;if(i[0]==="i"){var o=parseInt(i.substr(1));return assert(o%8==0),o/8}else return 0}}},getNativeFieldSize:function(i){return Math.max(Runtime.getNativeTypeSize(i),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(i,o){return o==="double"||o==="i64"?i&7&&(assert((i&7)==4),i+=4):assert((i&3)==0),i},getAlignSize:function(i,o,f){return!f&&(i=="i64"||i=="double")?8:i?Math.min(o||(i?Runtime.getNativeFieldSize(i):0),Runtime.QUANTUM_SIZE):Math.min(o,8)},dynCall:function(i,o,f){return f&&f.length?Module["dynCall_"+i].apply(null,[o].concat(f)):Module["dynCall_"+i].call(null,o)},functionPointers:[],addFunction:function(i){for(var o=0;o>2],f=(o+i+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=f,f>=TOTAL_MEMORY){var p=enlargeMemory();if(!p)return HEAP32[DYNAMICTOP_PTR>>2]=o,0}return o},alignMemory:function(i,o){var f=i=Math.ceil(i/(o||16))*(o||16);return f},makeBigInt:function(i,o,f){var p=f?+(i>>>0)+ +(o>>>0)*4294967296:+(i>>>0)+ +(o|0)*4294967296;return p},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(i,o){i||abort("Assertion failed: "+o)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(i){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(i){var o=Runtime.stackAlloc(i.length);return writeArrayToMemory(i,o),o},stringToC:function(i){var o=0;if(i!=null&&i!==0){var f=(i.length<<2)+1;o=Runtime.stackAlloc(f),stringToUTF8(i,o,f)}return o}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(o,f,p,E,t){var k=getCFunc(o),L=[],N=0;if(E)for(var C=0;C>0]=o;break;case"i8":HEAP8[i>>0]=o;break;case"i16":HEAP16[i>>1]=o;break;case"i32":HEAP32[i>>2]=o;break;case"i64":tempI64=[o>>>0,(tempDouble=o,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[i>>2]=tempI64[0],HEAP32[i+4>>2]=tempI64[1];break;case"float":HEAPF32[i>>2]=o;break;case"double":HEAPF64[i>>3]=o;break;default:abort("invalid type for setValue: "+f)}}Module.setValue=setValue;function getValue(i,o,f){switch(o=o||"i8",o.charAt(o.length-1)==="*"&&(o="i32"),o){case"i1":return HEAP8[i>>0];case"i8":return HEAP8[i>>0];case"i16":return HEAP16[i>>1];case"i32":return HEAP32[i>>2];case"i64":return HEAP32[i>>2];case"float":return HEAPF32[i>>2];case"double":return HEAPF64[i>>3];default:abort("invalid type for setValue: "+o)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(i,o,f,p){var E,t;typeof i=="number"?(E=!0,t=i):(E=!1,t=i.length);var k=typeof o=="string"?o:null,L;if(f==ALLOC_NONE?L=p:L=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][f===void 0?ALLOC_STATIC:f](Math.max(t,k?1:o.length)),E){var p=L,N;for(assert((L&3)==0),N=L+(t&~3);p>2]=0;for(N=L+t;p>0]=0;return L}if(k==="i8")return i.subarray||i.slice?HEAPU8.set(i,L):HEAPU8.set(new Uint8Array(i),L),L;for(var C=0,U,q,W;C>0],f|=p,!(p==0&&!o||(E++,o&&E==o)););o||(o=E);var t="";if(f<128){for(var k=1024,L;o>0;)L=String.fromCharCode.apply(String,HEAPU8.subarray(i,i+Math.min(o,k))),t=t?t+L:L,i+=k,o-=k;return t}return Module.UTF8ToString(i)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(i){for(var o="";;){var f=HEAP8[i++>>0];if(!f)return o;o+=String.fromCharCode(f)}}Module.AsciiToString=AsciiToString;function stringToAscii(i,o){return writeAsciiToMemory(i,o,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(i,o){for(var f=o;i[f];)++f;if(f-o>16&&i.subarray&&UTF8Decoder)return UTF8Decoder.decode(i.subarray(o,f));for(var p,E,t,k,L,N,C="";;){if(p=i[o++],!p)return C;if(!(p&128)){C+=String.fromCharCode(p);continue}if(E=i[o++]&63,(p&224)==192){C+=String.fromCharCode((p&31)<<6|E);continue}if(t=i[o++]&63,(p&240)==224?p=(p&15)<<12|E<<6|t:(k=i[o++]&63,(p&248)==240?p=(p&7)<<18|E<<12|t<<6|k:(L=i[o++]&63,(p&252)==248?p=(p&3)<<24|E<<18|t<<12|k<<6|L:(N=i[o++]&63,p=(p&1)<<30|E<<24|t<<18|k<<12|L<<6|N))),p<65536)C+=String.fromCharCode(p);else{var U=p-65536;C+=String.fromCharCode(55296|U>>10,56320|U&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(i){return UTF8ArrayToString(HEAPU8,i)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(i,o,f,p){if(!(p>0))return 0;for(var E=f,t=f+p-1,k=0;k=55296&&L<=57343&&(L=65536+((L&1023)<<10)|i.charCodeAt(++k)&1023),L<=127){if(f>=t)break;o[f++]=L}else if(L<=2047){if(f+1>=t)break;o[f++]=192|L>>6,o[f++]=128|L&63}else if(L<=65535){if(f+2>=t)break;o[f++]=224|L>>12,o[f++]=128|L>>6&63,o[f++]=128|L&63}else if(L<=2097151){if(f+3>=t)break;o[f++]=240|L>>18,o[f++]=128|L>>12&63,o[f++]=128|L>>6&63,o[f++]=128|L&63}else if(L<=67108863){if(f+4>=t)break;o[f++]=248|L>>24,o[f++]=128|L>>18&63,o[f++]=128|L>>12&63,o[f++]=128|L>>6&63,o[f++]=128|L&63}else{if(f+5>=t)break;o[f++]=252|L>>30,o[f++]=128|L>>24&63,o[f++]=128|L>>18&63,o[f++]=128|L>>12&63,o[f++]=128|L>>6&63,o[f++]=128|L&63}}return o[f]=0,f-E}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(i,o,f){return stringToUTF8Array(i,HEAPU8,o,f)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(i){for(var o=0,f=0;f=55296&&p<=57343&&(p=65536+((p&1023)<<10)|i.charCodeAt(++f)&1023),p<=127?++o:p<=2047?o+=2:p<=65535?o+=3:p<=2097151?o+=4:p<=67108863?o+=5:o+=6}return o}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0;function demangle(i){var o=Module.___cxa_demangle||Module.__cxa_demangle;if(o){try{var f=i.substr(1),p=lengthBytesUTF8(f)+1,E=_malloc(p);stringToUTF8(f,E,p);var t=_malloc(4),k=o(E,0,0,t);if(getValue(t,"i32")===0&&k)return Pointer_stringify(k)}catch(L){}finally{E&&_free(E),t&&_free(t),k&&_free(k)}return i}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),i}function demangleAll(i){var o=/__Z[\w\d_]+/g;return i.replace(o,function(f){var p=demangle(f);return f===p?f:f+" ["+p+"]"})}function jsStackTrace(){var i=new Error;if(!i.stack){try{throw new Error(0)}catch(o){i=o}if(!i.stack)return"(no stack trace available)"}return i.stack.toString()}function stackTrace(){var i=jsStackTrace();return Module.extraStackTrace&&(i+=` -`+Module.extraStackTrace()),demangleAll(i)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var o=i.shift();if(typeof o=="function"){o();continue}var f=o.func;typeof f=="number"?o.arg===void 0?Module.dynCall_v(f):Module.dynCall_vi(f,o.arg):f(o.arg===void 0?null:o.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(i){__ATPRERUN__.unshift(i)}Module.addOnPreRun=addOnPreRun;function addOnInit(i){__ATINIT__.unshift(i)}Module.addOnInit=addOnInit;function addOnPreMain(i){__ATMAIN__.unshift(i)}Module.addOnPreMain=addOnPreMain;function addOnExit(i){__ATEXIT__.unshift(i)}Module.addOnExit=addOnExit;function addOnPostRun(i){__ATPOSTRUN__.unshift(i)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(i,o,f){var p=f>0?f:lengthBytesUTF8(i)+1,E=new Array(p),t=stringToUTF8Array(i,E,0,E.length);return o&&(E.length=t),E}Module.intArrayFromString=intArrayFromString;function intArrayToString(i){for(var o=[],f=0;f255&&(p&=255),o.push(String.fromCharCode(p))}return o.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(i,o,f){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var p,E;f&&(E=o+lengthBytesUTF8(i),p=HEAP8[E]),stringToUTF8(i,o,Infinity),f&&(HEAP8[E]=p)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(i,o){HEAP8.set(i,o)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(i,o,f){for(var p=0;p>0]=i.charCodeAt(p);f||(HEAP8[o>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function(o,f){var p=o>>>16,E=o&65535,t=f>>>16,k=f&65535;return E*k+(p*k+E*t<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(i){return froundBuffer[0]=i,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(i){i=i>>>0;for(var o=0;o<32;o++)if(i&1<<31-o)return o;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(i){return i<0?Math.ceil(i):Math.floor(i)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(i){return i}function addRunDependency(i){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(i){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var o=dependenciesFulfilled;dependenciesFulfilled=null,o()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(i,o,f,p,E,t,k,L){return _nbind.callbackSignatureList[i].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(i,o,f,p,E,t,k,L){return ASM_CONSTS[i](o,f,p,E,t,k,L)}function _emscripten_asm_const_iiiii(i,o,f,p,E){return ASM_CONSTS[i](o,f,p,E)}function _emscripten_asm_const_iiidddddd(i,o,f,p,E,t,k,L,N){return ASM_CONSTS[i](o,f,p,E,t,k,L,N)}function _emscripten_asm_const_iiididi(i,o,f,p,E,t,k){return ASM_CONSTS[i](o,f,p,E,t,k)}function _emscripten_asm_const_iiii(i,o,f,p){return ASM_CONSTS[i](o,f,p)}function _emscripten_asm_const_iiiid(i,o,f,p,E){return ASM_CONSTS[i](o,f,p,E)}function _emscripten_asm_const_iiiiii(i,o,f,p,E,t){return ASM_CONSTS[i](o,f,p,E,t)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(i,o){__ATEXIT__.unshift({func:i,arg:o})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(i,o,f,p){var E=arguments.length,t=E<3?o:p===null?p=Object.getOwnPropertyDescriptor(o,f):p,k;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")t=Reflect.decorate(i,o,f,p);else for(var L=i.length-1;L>=0;L--)(k=i[L])&&(t=(E<3?k(t):E>3?k(o,f,t):k(o,f))||t);return E>3&&t&&Object.defineProperty(o,f,t),t}function _defineHidden(i){return function(o,f){Object.defineProperty(o,f,{configurable:!1,enumerable:!1,value:i,writable:!0})}}var _nbind={};function __nbind_free_external(i){_nbind.externalList[i].dereference(i)}function __nbind_reference_external(i){_nbind.externalList[i].reference()}function _llvm_stackrestore(i){var o=_llvm_stacksave,f=o.LLVM_SAVEDSTACKS[i];o.LLVM_SAVEDSTACKS.splice(i,1),Runtime.stackRestore(f)}function __nbind_register_pool(i,o,f,p){_nbind.Pool.pageSize=i,_nbind.Pool.usedPtr=o/4,_nbind.Pool.rootPtr=f,_nbind.Pool.pagePtr=p/4,HEAP32[o/4]=16909060,HEAP8[o]==1&&(_nbind.bigEndian=!0),HEAP32[o/4]=0,_nbind.makeTypeKindTbl=(t={},t[1024]=_nbind.PrimitiveType,t[64]=_nbind.Int64Type,t[2048]=_nbind.BindClass,t[3072]=_nbind.BindClassPtr,t[4096]=_nbind.SharedClassPtr,t[5120]=_nbind.ArrayType,t[6144]=_nbind.ArrayType,t[7168]=_nbind.CStringType,t[9216]=_nbind.CallbackType,t[10240]=_nbind.BindType,t),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var E=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});E.proto=Module,_nbind.BindClass.list.push(E);var t}function _emscripten_set_main_loop_timing(i,o){if(Browser.mainLoop.timingMode=i,Browser.mainLoop.timingValue=o,!Browser.mainLoop.func)return 1;if(i==0)Browser.mainLoop.scheduler=function(){var k=Math.max(0,Browser.mainLoop.tickStartTime+o-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,k)},Browser.mainLoop.method="timeout";else if(i==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(i==2){if(!window.setImmediate){let t=function(k){k.source===window&&k.data===p&&(k.stopPropagation(),f.shift()())};var E=t,f=[],p="setimmediate";window.addEventListener("message",t,!0),window.setImmediate=function(L){f.push(L),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(L),window.postMessage({target:p})):window.postMessage(p,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(i,o,f,p,E){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=i,Browser.mainLoop.arg=p;var t;typeof p!="undefined"?t=function(){Module.dynCall_vi(i,p)}:t=function(){Module.dynCall_v(i)};var k=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var N=Date.now(),C=Browser.mainLoop.queue.shift();if(C.func(C.arg),Browser.mainLoop.remainingBlockers){var U=Browser.mainLoop.remainingBlockers,q=U%1==0?U-1:Math.floor(U);C.counted?Browser.mainLoop.remainingBlockers=q:(q=q+.5,Browser.mainLoop.remainingBlockers=(8*U+q)/9)}if(console.log('main loop blocker "'+C.name+'" took '+(Date.now()-N)+" ms"),Browser.mainLoop.updateStatus(),k1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(t),!(k0?_emscripten_set_main_loop_timing(0,1e3/o):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),f)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var i=Browser.mainLoop.timingMode,o=Browser.mainLoop.timingValue,f=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(f,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(i,o),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var i=Module.statusMessage||"Please wait...",o=Browser.mainLoop.remainingBlockers,f=Browser.mainLoop.expectedBlockers;o?o=6;){var rt=le>>Ue-6&63;Ue-=6,Oe+=ze[rt]}return Ue==2?(Oe+=ze[(le&3)<<4],Oe+=pe+pe):Ue==4&&(Oe+=ze[(le&15)<<2],Oe+=pe),Oe}m.src="data:audio/x-"+k.substr(-3)+";base64,"+he(t),U(m)},m.src=ne,Browser.safeSetTimeout(function(){U(m)},1e4)}else return q()},Module.preloadPlugins.push(o);function f(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var p=Module.canvas;p&&(p.requestPointerLock=p.requestPointerLock||p.mozRequestPointerLock||p.webkitRequestPointerLock||p.msRequestPointerLock||function(){},p.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},p.exitPointerLock=p.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",f,!1),document.addEventListener("mozpointerlockchange",f,!1),document.addEventListener("webkitpointerlockchange",f,!1),document.addEventListener("mspointerlockchange",f,!1),Module.elementPointerLock&&p.addEventListener("click",function(E){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),E.preventDefault())},!1))},createContext:function(i,o,f,p){if(o&&Module.ctx&&i==Module.canvas)return Module.ctx;var E,t;if(o){var k={antialias:!1,alpha:!1};if(p)for(var L in p)k[L]=p[L];t=GL.createContext(i,k),t&&(E=GL.getContext(t).GLctx)}else E=i.getContext("2d");return E?(f&&(o||assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=E,o&&GL.makeContextCurrent(t),Module.useWebGL=o,Browser.moduleContextCreatedCallbacks.forEach(function(N){N()}),Browser.init()),E):null},destroyContext:function(i,o,f){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(i,o,f){Browser.lockPointer=i,Browser.resizeCanvas=o,Browser.vrDevice=f,typeof Browser.lockPointer=="undefined"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas=="undefined"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice=="undefined"&&(Browser.vrDevice=null);var p=Module.canvas;function E(){Browser.isFullscreen=!1;var k=p.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===k?(p.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},p.exitFullscreen=p.exitFullscreen.bind(document),Browser.lockPointer&&p.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(k.parentNode.insertBefore(p,k),k.parentNode.removeChild(k),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(p)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",E,!1),document.addEventListener("mozfullscreenchange",E,!1),document.addEventListener("webkitfullscreenchange",E,!1),document.addEventListener("MSFullscreenChange",E,!1));var t=document.createElement("div");p.parentNode.insertBefore(t,p),t.appendChild(p),t.requestFullscreen=t.requestFullscreen||t.mozRequestFullScreen||t.msRequestFullscreen||(t.webkitRequestFullscreen?function(){t.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(t.webkitRequestFullScreen?function(){t.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),f?t.requestFullscreen({vrDisplay:f}):t.requestFullscreen()},requestFullScreen:function(i,o,f){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(p,E,t){return Browser.requestFullscreen(p,E,t)},Browser.requestFullscreen(i,o,f)},nextRAF:0,fakeRequestAnimationFrame:function(i){var o=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=o+1e3/60;else for(;o+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var f=Math.max(Browser.nextRAF-o,0);setTimeout(i,f)},requestAnimationFrame:function(o){typeof window=="undefined"?Browser.fakeRequestAnimationFrame(o):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(o))},safeCallback:function(i){return function(){if(!ABORT)return i.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var i=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],i.forEach(function(o){o()})}},safeRequestAnimationFrame:function(i){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))})},safeSetTimeout:function(i,o){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))},o)},safeSetInterval:function(i,o){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&i()},o)},getMimetype:function(i){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[i.substr(i.lastIndexOf(".")+1)]},getUserMedia:function(i){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(i)},getMovementX:function(i){return i.movementX||i.mozMovementX||i.webkitMovementX||0},getMovementY:function(i){return i.movementY||i.mozMovementY||i.webkitMovementY||0},getMouseWheelDelta:function(i){var o=0;switch(i.type){case"DOMMouseScroll":o=i.detail;break;case"mousewheel":o=i.wheelDelta;break;case"wheel":o=i.deltaY;break;default:throw"unrecognized mouse wheel event: "+i.type}return o},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(i){if(Browser.pointerLock)i.type!="mousemove"&&"mozMovementX"in i?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(i),Browser.mouseMovementY=Browser.getMovementY(i)),typeof SDL!="undefined"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var o=Module.canvas.getBoundingClientRect(),f=Module.canvas.width,p=Module.canvas.height,E=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset,t=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(i.type==="touchstart"||i.type==="touchend"||i.type==="touchmove"){var k=i.touch;if(k===void 0)return;var L=k.pageX-(E+o.left),N=k.pageY-(t+o.top);L=L*(f/o.width),N=N*(p/o.height);var C={x:L,y:N};if(i.type==="touchstart")Browser.lastTouches[k.identifier]=C,Browser.touches[k.identifier]=C;else if(i.type==="touchend"||i.type==="touchmove"){var U=Browser.touches[k.identifier];U||(U=C),Browser.lastTouches[k.identifier]=U,Browser.touches[k.identifier]=C}return}var q=i.pageX-(E+o.left),W=i.pageY-(t+o.top);q=q*(f/o.width),W=W*(p/o.height),Browser.mouseMovementX=q-Browser.mouseX,Browser.mouseMovementY=W-Browser.mouseY,Browser.mouseX=q,Browser.mouseY=W}},asyncLoad:function(i,o,f,p){var E=p?"":getUniqueRunDependency("al "+i);Module.readAsync(i,function(t){assert(t,'Loading data file "'+i+'" failed (no arrayBuffer).'),o(new Uint8Array(t)),E&&removeRunDependency(E)},function(t){if(f)f();else throw'Loading data file "'+i+'" failed.'}),E&&addRunDependency(E)},resizeListeners:[],updateResizeListeners:function(){var i=Module.canvas;Browser.resizeListeners.forEach(function(o){o(i.width,i.height)})},setCanvasSize:function(i,o,f){var p=Module.canvas;Browser.updateCanvasDimensions(p,i,o),f||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i&~8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},updateCanvasDimensions:function(i,o,f){o&&f?(i.widthNative=o,i.heightNative=f):(o=i.widthNative,f=i.heightNative);var p=o,E=f;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(p/E>2];return o},getStr:function(){var i=Pointer_stringify(SYSCALLS.get());return i},get64:function(){var i=SYSCALLS.get(),o=SYSCALLS.get();return i>=0?assert(o===0):assert(o===-1),i},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(i,o){SYSCALLS.varargs=o;try{var f=SYSCALLS.getStreamFromFD();return FS.close(f),0}catch(p){return(typeof FS=="undefined"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall54(i,o){SYSCALLS.varargs=o;try{return 0}catch(f){return(typeof FS=="undefined"||!(f instanceof FS.ErrnoError))&&abort(f),-f.errno}}function _typeModule(i){var o=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function f(N,C,U,q,W,ne){if(C==1){var m=q&896;(m==128||m==256||m==384)&&(N="X const")}var we;return ne?we=U.replace("X",N).replace("Y",W):we=N.replace("X",U).replace("Y",W),we.replace(/([*&]) (?=[*&])/g,"$1")}function p(N,C,U,q,W){throw new Error(N+" type "+U.replace("X",C+"?")+(q?" with flag "+q:"")+" in "+W)}function E(N,C,U,q,W,ne,m,we){ne===void 0&&(ne="X"),we===void 0&&(we=1);var Se=U(N);if(Se)return Se;var he=q(N),ge=he.placeholderFlag,ze=o[ge];m&&ze&&(ne=f(m[2],m[0],ne,ze[0],"?",!0));var pe;ge==0&&(pe="Unbound"),ge>=10&&(pe="Corrupt"),we>20&&(pe="Deeply nested"),pe&&p(pe,N,ne,ge,W||"?");var Oe=he.paramList[0],le=E(Oe,C,U,q,W,ne,ze,we+1),Ue,Ge={flags:ze[0],id:N,name:"",paramList:[le]},rt=[],wt="?";switch(he.placeholderFlag){case 1:Ue=le.spec;break;case 2:if((le.flags&15360)==1024&&le.spec.ptrSize==1){Ge.flags=7168;break}case 3:case 6:case 5:Ue=le.spec,(le.flags&15360)!=2048;break;case 8:wt=""+he.paramList[1],Ge.paramList.push(he.paramList[1]);break;case 9:for(var xt=0,$e=he.paramList[1];xt<$e.length;xt++){var ft=$e[xt],Ke=E(ft,C,U,q,W,ne,ze,we+1);rt.push(Ke.name),Ge.paramList.push(Ke)}wt=rt.join(", ");break;default:break}if(Ge.name=f(ze[2],ze[0],le.name,le.flags,wt),Ue){for(var jt=0,$t=Object.keys(Ue);jt<$t.length;jt++){var at=$t[jt];Ge[at]=Ge[at]||Ue[at]}Ge.flags|=Ue.flags}return t(C,Ge)}function t(N,C){var U=C.flags,q=U&896,W=U&15360;return!C.name&&W==1024&&(C.ptrSize==1?C.name=(U&16?"":(U&8?"un":"")+"signed ")+"char":C.name=(U&8?"u":"")+(U&32?"float":"int")+(C.ptrSize*8+"_t")),C.ptrSize==8&&!(U&32)&&(W=64),W==2048&&(q==512||q==640?W=4096:q&&(W=3072)),N(W,C)}var k=function(){function N(C){this.id=C.id,this.name=C.name,this.flags=C.flags,this.spec=C}return N.prototype.toString=function(){return this.name},N}(),L={Type:k,getComplexType:E,makeType:t,structureList:o};return i.output=L,i.output||L}function __nbind_register_type(i,o){var f=_nbind.readAsciiString(o),p={flags:10240,id:i,name:f};_nbind.makeType(_nbind.constructType,p)}function __nbind_register_callback_signature(i,o){var f=_nbind.readTypeIdList(i,o),p=_nbind.callbackSignatureList.length;return _nbind.callbackSignatureList[p]=_nbind.makeJSCaller(f),p}function __extends(i,o){for(var f in o)o.hasOwnProperty(f)&&(i[f]=o[f]);function p(){this.constructor=i}p.prototype=o.prototype,i.prototype=new p}function __nbind_register_class(i,o,f,p,E,t,k){var L=_nbind.readAsciiString(k),N=_nbind.readPolicyList(o),C=HEAPU32.subarray(i/4,i/4+2),U={flags:2048|(N.Value?2:0),id:C[0],name:L},q=_nbind.makeType(_nbind.constructType,U);q.ptrType=_nbind.getComplexType(C[1],_nbind.constructType,_nbind.getType,_nbind.queryType),q.destroy=_nbind.makeMethodCaller(q.ptrType,{boundID:U.id,flags:0,name:"destroy",num:0,ptr:t,title:q.name+".free",typeList:["void","uint32_t","uint32_t"]}),E&&(q.superIdList=Array.prototype.slice.call(HEAPU32.subarray(f/4,f/4+E)),q.upcastList=Array.prototype.slice.call(HEAPU32.subarray(p/4,p/4+E))),Module[q.name]=q.makeBound(N),_nbind.BindClass.list.push(q)}function _removeAccessorPrefix(i){var o=/^[Gg]et_?([A-Z]?([A-Z]?))/;return i.replace(o,function(f,p,E){return E?p:p.toLowerCase()})}function __nbind_register_function(i,o,f,p,E,t,k,L,N,C){var U=_nbind.getType(i),q=_nbind.readPolicyList(o),W=_nbind.readTypeIdList(f,p),ne;if(k==5)ne=[{direct:E,name:"__nbindConstructor",ptr:0,title:U.name+" constructor",typeList:["uint32_t"].concat(W.slice(1))},{direct:t,name:"__nbindValueConstructor",ptr:0,title:U.name+" value constructor",typeList:["void","uint32_t"].concat(W.slice(1))}];else{var m=_nbind.readAsciiString(L),we=(U.name&&U.name+".")+m;(k==3||k==4)&&(m=_removeAccessorPrefix(m)),ne=[{boundID:i,direct:t,name:m,ptr:E,title:we,typeList:W}]}for(var Se=0,he=ne;Se>2]=i),i}function _llvm_stacksave(){var i=_llvm_stacksave;return i.LLVM_SAVEDSTACKS||(i.LLVM_SAVEDSTACKS=[]),i.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),i.LLVM_SAVEDSTACKS.length-1}function ___syscall140(i,o){SYSCALLS.varargs=o;try{var f=SYSCALLS.getStreamFromFD(),p=SYSCALLS.get(),E=SYSCALLS.get(),t=SYSCALLS.get(),k=SYSCALLS.get(),L=E;return FS.llseek(f,L,k),HEAP32[t>>2]=f.position,f.getdents&&L===0&&k===0&&(f.getdents=null),0}catch(N){return(typeof FS=="undefined"||!(N instanceof FS.ErrnoError))&&abort(N),-N.errno}}function ___syscall146(i,o){SYSCALLS.varargs=o;try{var f=SYSCALLS.get(),p=SYSCALLS.get(),E=SYSCALLS.get(),t=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(U,q){var W=___syscall146.buffers[U];assert(W),q===0||q===10?((U===1?Module.print:Module.printErr)(UTF8ArrayToString(W,0)),W.length=0):W.push(q)});for(var k=0;k>2],N=HEAP32[p+(k*8+4)>>2],C=0;Ci.pageSize/2||o>i.pageSize-f){var p=_nbind.typeNameTbl.NBind.proto;return p.lalloc(o)}else return HEAPU32[i.usedPtr]=f+o,i.rootPtr+f},i.lreset=function(o,f){var p=HEAPU32[i.pagePtr];if(p){var E=_nbind.typeNameTbl.NBind.proto;E.lreset(o,f)}else HEAPU32[i.usedPtr]=o},i}();_nbind.Pool=Pool;function constructType(i,o){var f=i==10240?_nbind.makeTypeNameTbl[o.name]||_nbind.BindType:_nbind.makeTypeKindTbl[i],p=new f(o);return typeIdTbl[o.id]=p,_nbind.typeNameTbl[o.name]=p,p}_nbind.constructType=constructType;function getType(i){return typeIdTbl[i]}_nbind.getType=getType;function queryType(i){var o=HEAPU8[i],f=_nbind.structureList[o][1];i/=4,f<0&&(++i,f=HEAPU32[i]+1);var p=Array.prototype.slice.call(HEAPU32.subarray(i+1,i+1+f));return o==9&&(p=[p[0],p.slice(1)]),{paramList:p,placeholderFlag:o}}_nbind.queryType=queryType;function getTypes(i,o){return i.map(function(f){return typeof f=="number"?_nbind.getComplexType(f,constructType,getType,queryType,o):_nbind.typeNameTbl[f]})}_nbind.getTypes=getTypes;function readTypeIdList(i,o){return Array.prototype.slice.call(HEAPU32,i/4,i/4+o)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(i){for(var o=i;HEAPU8[o++];);return String.fromCharCode.apply("",HEAPU8.subarray(i,o-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(i){var o={};if(i)for(;;){var f=HEAPU32[i/4];if(!f)break;o[readAsciiString(f)]=!0,i+=4}return o}_nbind.readPolicyList=readPolicyList;function getDynCall(i,o){var f={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},p=i.map(function(t){return f[t.name]||"i"}).join(""),E=Module["dynCall_"+p];if(!E)throw new Error("dynCall_"+p+" not found for "+o+"("+i.map(function(t){return t.name}).join(", ")+")");return E}_nbind.getDynCall=getDynCall;function addMethod(i,o,f,p){var E=i[o];i.hasOwnProperty(o)&&E?((E.arity||E.arity===0)&&(E=_nbind.makeOverloader(E,E.arity),i[o]=E),E.addMethod(f,p)):(f.arity=p,i[o]=f)}_nbind.addMethod=addMethod;function throwError(i){throw new Error(i)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(i){__extends(o,i);function o(){var f=i!==null&&i.apply(this,arguments)||this;return f.heap=HEAPU32,f.ptrSize=4,f}return o.prototype.needsWireRead=function(f){return!!this.wireRead||!!this.makeWireRead},o.prototype.needsWireWrite=function(f){return!!this.wireWrite||!!this.makeWireWrite},o}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(i){__extends(o,i);function o(f){var p=i.call(this,f)||this,E=f.flags&32?{32:HEAPF32,64:HEAPF64}:f.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return p.heap=E[f.ptrSize*8],p.ptrSize=f.ptrSize,p}return o.prototype.needsWireWrite=function(f){return!!f&&!!f.Strict},o.prototype.makeWireWrite=function(f,p){return p&&p.Strict&&function(E){if(typeof E=="number")return E;throw new Error("Type mismatch")}},o}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(i,o){if(i==null){if(o&&o.Nullable)return 0;throw new Error("Type mismatch")}if(o&&o.Strict){if(typeof i!="string")throw new Error("Type mismatch")}else i=i.toString();var f=Module.lengthBytesUTF8(i)+1,p=_nbind.Pool.lalloc(f);return Module.stringToUTF8Array(i,HEAPU8,p,f),p}_nbind.pushCString=pushCString;function popCString(i){return i===0?null:Module.Pointer_stringify(i)}_nbind.popCString=popCString;var CStringType=function(i){__extends(o,i);function o(){var f=i!==null&&i.apply(this,arguments)||this;return f.wireRead=popCString,f.wireWrite=pushCString,f.readResources=[_nbind.resources.pool],f.writeResources=[_nbind.resources.pool],f}return o.prototype.makeWireWrite=function(f,p){return function(E){return pushCString(E,p)}},o}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(i){__extends(o,i);function o(){var f=i!==null&&i.apply(this,arguments)||this;return f.wireRead=function(p){return!!p},f}return o.prototype.needsWireWrite=function(f){return!!f&&!!f.Strict},o.prototype.makeWireRead=function(f){return"!!("+f+")"},o.prototype.makeWireWrite=function(f,p){return p&&p.Strict&&function(E){if(typeof E=="boolean")return E;throw new Error("Type mismatch")}||f},o}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function i(){}return i.prototype.persist=function(){this.__nbindState|=1},i}();_nbind.Wrapper=Wrapper;function makeBound(i,o){var f=function(p){__extends(E,p);function E(t,k,L,N){var C=p.call(this)||this;if(!(C instanceof E))return new(Function.prototype.bind.apply(E,Array.prototype.concat.apply([null],arguments)));var U=k,q=L,W=N;if(t!==_nbind.ptrMarker){var ne=C.__nbindConstructor.apply(C,arguments);U=4096|512,W=HEAPU32[ne/4],q=HEAPU32[ne/4+1]}var m={configurable:!0,enumerable:!1,value:null,writable:!1},we={__nbindFlags:U,__nbindPtr:q};W&&(we.__nbindShared=W,_nbind.mark(C));for(var Se=0,he=Object.keys(we);Se>=1;var f=_nbind.valueList[i];return _nbind.valueList[i]=firstFreeValue,firstFreeValue=i,f}else{if(o)return _nbind.popShared(i,o);throw new Error("Invalid value slot "+i)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(i){return typeof i=="number"?i:pushValue(i)*4096+valueBase}function pop64(i){return i=3?k=Buffer.from(t):k=new Buffer(t),k.copy(p)}else getBuffer(p).set(t)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var i=0,o=dirtyList;i>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(i,o,f,p,E,t){try{Module.dynCall_viiiii(i,o,f,p,E,t)}catch(k){if(typeof k!="number"&&k!=="longjmp")throw k;Module.setThrew(1,0)}}function invoke_vif(i,o,f){try{Module.dynCall_vif(i,o,f)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_vid(i,o,f){try{Module.dynCall_vid(i,o,f)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_fiff(i,o,f,p){try{return Module.dynCall_fiff(i,o,f,p)}catch(E){if(typeof E!="number"&&E!=="longjmp")throw E;Module.setThrew(1,0)}}function invoke_vi(i,o){try{Module.dynCall_vi(i,o)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_vii(i,o,f){try{Module.dynCall_vii(i,o,f)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_ii(i,o){try{return Module.dynCall_ii(i,o)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_viddi(i,o,f,p,E){try{Module.dynCall_viddi(i,o,f,p,E)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_vidd(i,o,f,p){try{Module.dynCall_vidd(i,o,f,p)}catch(E){if(typeof E!="number"&&E!=="longjmp")throw E;Module.setThrew(1,0)}}function invoke_iiii(i,o,f,p){try{return Module.dynCall_iiii(i,o,f,p)}catch(E){if(typeof E!="number"&&E!=="longjmp")throw E;Module.setThrew(1,0)}}function invoke_diii(i,o,f,p){try{return Module.dynCall_diii(i,o,f,p)}catch(E){if(typeof E!="number"&&E!=="longjmp")throw E;Module.setThrew(1,0)}}function invoke_di(i,o){try{return Module.dynCall_di(i,o)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_iid(i,o,f){try{return Module.dynCall_iid(i,o,f)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_iii(i,o,f){try{return Module.dynCall_iii(i,o,f)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_viiddi(i,o,f,p,E,t){try{Module.dynCall_viiddi(i,o,f,p,E,t)}catch(k){if(typeof k!="number"&&k!=="longjmp")throw k;Module.setThrew(1,0)}}function invoke_viiiiii(i,o,f,p,E,t,k){try{Module.dynCall_viiiiii(i,o,f,p,E,t,k)}catch(L){if(typeof L!="number"&&L!=="longjmp")throw L;Module.setThrew(1,0)}}function invoke_dii(i,o,f){try{return Module.dynCall_dii(i,o,f)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_i(i){try{return Module.dynCall_i(i)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iiiiii(i,o,f,p,E,t){try{return Module.dynCall_iiiiii(i,o,f,p,E,t)}catch(k){if(typeof k!="number"&&k!=="longjmp")throw k;Module.setThrew(1,0)}}function invoke_viiid(i,o,f,p,E){try{Module.dynCall_viiid(i,o,f,p,E)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_viififi(i,o,f,p,E,t,k){try{Module.dynCall_viififi(i,o,f,p,E,t,k)}catch(L){if(typeof L!="number"&&L!=="longjmp")throw L;Module.setThrew(1,0)}}function invoke_viii(i,o,f,p){try{Module.dynCall_viii(i,o,f,p)}catch(E){if(typeof E!="number"&&E!=="longjmp")throw E;Module.setThrew(1,0)}}function invoke_v(i){try{Module.dynCall_v(i)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viid(i,o,f,p){try{Module.dynCall_viid(i,o,f,p)}catch(E){if(typeof E!="number"&&E!=="longjmp")throw E;Module.setThrew(1,0)}}function invoke_idd(i,o,f){try{return Module.dynCall_idd(i,o,f)}catch(p){if(typeof p!="number"&&p!=="longjmp")throw p;Module.setThrew(1,0)}}function invoke_viiii(i,o,f,p,E){try{Module.dynCall_viiii(i,o,f,p,E)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:Infinity},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(i,o,f){var p=new i.Int8Array(f),E=new i.Int16Array(f),t=new i.Int32Array(f),k=new i.Uint8Array(f),L=new i.Uint16Array(f),N=new i.Uint32Array(f),C=new i.Float32Array(f),U=new i.Float64Array(f),q=o.DYNAMICTOP_PTR|0,W=o.tempDoublePtr|0,ne=o.ABORT|0,m=o.STACKTOP|0,we=o.STACK_MAX|0,Se=o.cttz_i8|0,he=o.___dso_handle|0,ge=0,ze=0,pe=0,Oe=0,le=i.NaN,Ue=i.Infinity,Ge=0,rt=0,wt=0,xt=0,$e=0,ft=0,Ke=i.Math.floor,jt=i.Math.abs,$t=i.Math.sqrt,at=i.Math.pow,Q=i.Math.cos,ae=i.Math.sin,Ce=i.Math.tan,ue=i.Math.acos,je=i.Math.asin,ct=i.Math.atan,At=i.Math.atan2,en=i.Math.exp,ln=i.Math.log,An=i.Math.ceil,nr=i.Math.imul,un=i.Math.min,Wt=i.Math.max,vr=i.Math.clz32,w=i.Math.fround,Ut=o.abort,Vn=o.assert,fr=o.enlargeMemory,Fr=o.getTotalMemory,ur=o.abortOnCannotGrowMemory,br=o.invoke_viiiii,Kt=o.invoke_vif,vu=o.invoke_vid,a0=o.invoke_fiff,So=o.invoke_vi,Go=o.invoke_vii,Os=o.invoke_ii,Yo=o.invoke_viddi,Ko=o.invoke_vidd,qt=o.invoke_iiii,_i=o.invoke_diii,eu=o.invoke_di,ai=o.invoke_iid,mr=o.invoke_iii,Xo=o.invoke_viiddi,W0=o.invoke_viiiiii,Lu=o.invoke_dii,V0=o.invoke_i,Hr=o.invoke_iiiiii,To=o.invoke_viiid,Co=o.invoke_viififi,L0=o.invoke_viii,tu=o.invoke_v,Si=o.invoke_viid,ks=o.invoke_idd,Hl=o.invoke_viiii,F0=o._emscripten_asm_const_iiiii,f0=o._emscripten_asm_const_iiidddddd,Pr=o._emscripten_asm_const_iiiid,Ei=o.__nbind_reference_external,G0=o._emscripten_asm_const_iiiiiiii,fi=o._removeAccessorPrefix,Zt=o._typeModule,Ln=o.__nbind_register_pool,Di=o.__decorate,ci=o._llvm_stackrestore,Ht=o.___cxa_atexit,Du=o.__extends,Yi=o.__nbind_get_value_object,Y0=o.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,Ui=o._emscripten_set_main_loop_timing,Wl=o.__nbind_register_primitive,xo=o.__nbind_register_type,ni=o._emscripten_memcpy_big,oo=o.__nbind_register_function,Vl=o.___setErrNo,Ao=o.__nbind_register_class,Ms=o.__nbind_finish,Xn=o._abort,Qo=o._nbind_value,lo=o._llvm_stacksave,b0=o.___syscall54,yl=o._defineHidden,Ro=o._emscripten_set_main_loop,Et=o._emscripten_get_now,Pt=o.__nbind_register_callback_signature,Bn=o._emscripten_asm_const_iiiiii,Ir=o.__nbind_free_external,ji=o._emscripten_asm_const_iiii,Wr=o._emscripten_asm_const_iiididi,wu=o.___syscall6,c0=o._atexit,Ti=o.___syscall140,d0=o.___syscall146,as=w(0);let St=w(0);function so(e){e=e|0;var n=0;return n=m,m=m+e|0,m=m+15&-16,n|0}function Jo(){return m|0}function Gl(e){e=e|0,m=e}function Fu(e,n){e=e|0,n=n|0,m=e,we=n}function fs(e,n){e=e|0,n=n|0,ge||(ge=e,ze=n)}function P0(e){e=e|0,ft=e}function X(){return ft|0}function _e(){var e=0,n=0;pr(8104,8,400)|0,pr(8504,408,540)|0,e=9044,n=e+44|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));p[9088]=0,p[9089]=1,t[2273]=0,t[2274]=948,t[2275]=948,Ht(17,8104,he|0)|0}function Ne(e){e=e|0,ic(e+948|0)}function Me(e){return e=w(e),((cr(e)|0)&2147483647)>>>0>2139095040|0}function dt(e,n,r){e=e|0,n=n|0,r=r|0;e:do if(t[e+(n<<3)+4>>2]|0)e=e+(n<<3)|0;else{if((n|2|0)==3?t[e+60>>2]|0:0){e=e+56|0;break}switch(n|0){case 0:case 2:case 4:case 5:{if(t[e+52>>2]|0){e=e+48|0;break e}break}default:}if(t[e+68>>2]|0){e=e+64|0;break}else{e=(n|1|0)==5?948:r;break}}while(0);return e|0}function Hn(e){e=e|0;var n=0;return n=C_(1e3)|0,Dn(e,(n|0)!=0,2456),t[2276]=(t[2276]|0)+1,pr(n|0,8104,1e3)|0,p[e+2>>0]|0&&(t[n+4>>2]=2,t[n+12>>2]=4),t[n+976>>2]=e,n|0}function Dn(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;l=m,m=m+16|0,u=l,n||(t[u>>2]=r,_l(e,5,3197,u)),m=l}function or(){return Hn(956)|0}function mi(e){e=e|0;var n=0;return n=cn(1e3)|0,Su(n,e),Dn(t[e+976>>2]|0,1,2456),t[2276]=(t[2276]|0)+1,t[n+944>>2]=0,n|0}function Su(e,n){e=e|0,n=n|0;var r=0;pr(e|0,n|0,948)|0,na(e+948|0,n+948|0),r=e+960|0,e=n+960|0,n=r+40|0;do t[r>>2]=t[e>>2],r=r+4|0,e=e+4|0;while((r|0)<(n|0))}function bu(e){e=e|0;var n=0,r=0,u=0,l=0;if(n=e+944|0,r=t[n>>2]|0,r|0&&(Pu(r+948|0,e)|0,t[n>>2]=0),r=mu(e)|0,r|0){n=0;do t[(yi(e,n)|0)+944>>2]=0,n=n+1|0;while((n|0)!=(r|0))}r=e+948|0,u=t[r>>2]|0,l=e+952|0,n=t[l>>2]|0,(n|0)!=(u|0)&&(t[l>>2]=n+(~((n+-4-u|0)>>>2)<<2)),Oo(r),x_(e),t[2276]=(t[2276]|0)+-1}function Pu(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0;u=t[e>>2]|0,D=e+4|0,r=t[D>>2]|0,s=r;e:do if((u|0)==(r|0))l=u,h=4;else for(e=u;;){if((t[e>>2]|0)==(n|0)){l=e,h=4;break e}if(e=e+4|0,(e|0)==(r|0)){e=0;break}}while(0);return(h|0)==4&&((l|0)!=(r|0)?(u=l+4|0,e=s-u|0,n=e>>2,n&&(Iy(l|0,u|0,e|0)|0,r=t[D>>2]|0),e=l+(n<<2)|0,(r|0)==(e|0)||(t[D>>2]=r+(~((r+-4-e|0)>>>2)<<2)),e=1):e=0),e|0}function mu(e){return e=e|0,(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2|0}function yi(e,n){e=e|0,n=n|0;var r=0;return r=t[e+948>>2]|0,(t[e+952>>2]|0)-r>>2>>>0>n>>>0?e=t[r+(n<<2)>>2]|0:e=0,e|0}function Oo(e){e=e|0;var n=0,r=0,u=0,l=0;u=m,m=m+32|0,n=u,l=t[e>>2]|0,r=(t[e+4>>2]|0)-l|0,((t[e+8>>2]|0)-l|0)>>>0>r>>>0&&(l=r>>2,Y(n,l,l,e+8|0),Qr(e,n),Jr(n)),m=u}function Tu(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0;M=mu(e)|0;do if(M|0){if((t[(yi(e,0)|0)+944>>2]|0)==(e|0)){if(!(Pu(e+948|0,n)|0))break;pr(n+400|0,8504,540)|0,t[n+944>>2]=0,Gn(e);break}h=t[(t[e+976>>2]|0)+12>>2]|0,D=e+948|0,S=(h|0)==0,r=0,s=0;do u=t[(t[D>>2]|0)+(s<<2)>>2]|0,(u|0)==(n|0)?Gn(e):(l=mi(u)|0,t[(t[D>>2]|0)+(r<<2)>>2]=l,t[l+944>>2]=e,S||$E[h&15](u,l,e,r),r=r+1|0),s=s+1|0;while((s|0)!=(M|0));if(r>>>0>>0){S=e+948|0,D=e+952|0,h=r,r=t[D>>2]|0;do s=(t[S>>2]|0)+(h<<2)|0,u=s+4|0,l=r-u|0,n=l>>2,n&&(Iy(s|0,u|0,l|0)|0,r=t[D>>2]|0),l=r,u=s+(n<<2)|0,(l|0)!=(u|0)&&(r=l+(~((l+-4-u|0)>>>2)<<2)|0,t[D>>2]=r),h=h+1|0;while((h|0)!=(M|0))}}while(0)}function ao(e){e=e|0;var n=0,r=0,u=0,l=0;Iu(e,(mu(e)|0)==0,2491),Iu(e,(t[e+944>>2]|0)==0,2545),n=e+948|0,r=t[n>>2]|0,u=e+952|0,l=t[u>>2]|0,(l|0)!=(r|0)&&(t[u>>2]=l+(~((l+-4-r|0)>>>2)<<2)),Oo(n),n=e+976|0,r=t[n>>2]|0,pr(e|0,8104,1e3)|0,p[r+2>>0]|0&&(t[e+4>>2]=2,t[e+12>>2]=4),t[n>>2]=r}function Iu(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;l=m,m=m+16|0,u=l,n||(t[u>>2]=r,sr(e,5,3197,u)),m=l}function Oa(){return t[2276]|0}function p0(){var e=0;return e=C_(20)|0,Zs((e|0)!=0,2592),t[2277]=(t[2277]|0)+1,t[e>>2]=t[239],t[e+4>>2]=t[240],t[e+8>>2]=t[241],t[e+12>>2]=t[242],t[e+16>>2]=t[243],e|0}function Zs(e,n){e=e|0,n=n|0;var r=0,u=0;u=m,m=m+16|0,r=u,e||(t[r>>2]=n,sr(0,5,3197,r)),m=u}function K0(e){e=e|0,x_(e),t[2277]=(t[2277]|0)+-1}function $s(e,n){e=e|0,n=n|0;var r=0;n?(Iu(e,(mu(e)|0)==0,2629),r=1):(r=0,n=0),t[e+964>>2]=n,t[e+988>>2]=r}function ka(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,s=u+8|0,l=u+4|0,h=u,t[l>>2]=n,Iu(e,(t[n+944>>2]|0)==0,2709),Iu(e,(t[e+964>>2]|0)==0,2763),cs(e),n=e+948|0,t[h>>2]=(t[n>>2]|0)+(r<<2),t[s>>2]=t[h>>2],w0(n,s,l)|0,t[(t[l>>2]|0)+944>>2]=e,Gn(e),m=u}function cs(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0;if(r=mu(e)|0,r|0?(t[(yi(e,0)|0)+944>>2]|0)!=(e|0):0){u=t[(t[e+976>>2]|0)+12>>2]|0,l=e+948|0,s=(u|0)==0,n=0;do h=t[(t[l>>2]|0)+(n<<2)>>2]|0,D=mi(h)|0,t[(t[l>>2]|0)+(n<<2)>>2]=D,t[D+944>>2]=e,s||$E[u&15](h,D,e,n),n=n+1|0;while((n|0)!=(r|0))}}function w0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0,Pe=0,Ee=0,ve=0,Qe=0,We=0;Qe=m,m=m+64|0,P=Qe+52|0,D=Qe+48|0,K=Qe+28|0,Pe=Qe+24|0,Ee=Qe+20|0,ve=Qe,u=t[e>>2]|0,s=u,n=u+((t[n>>2]|0)-s>>2<<2)|0,u=e+4|0,l=t[u>>2]|0,h=e+8|0;do if(l>>>0<(t[h>>2]|0)>>>0){if((n|0)==(l|0)){t[n>>2]=t[r>>2],t[u>>2]=(t[u>>2]|0)+4;break}Ur(e,n,l,n+4|0),n>>>0<=r>>>0&&(r=(t[u>>2]|0)>>>0>r>>>0?r+4|0:r),t[n>>2]=t[r>>2]}else{u=(l-s>>2)+1|0,l=x0(e)|0,l>>>0>>0&&li(e),O=t[e>>2]|0,M=(t[h>>2]|0)-O|0,s=M>>1,Y(ve,M>>2>>>0>>1>>>0?s>>>0>>0?u:s:l,n-O>>2,e+8|0),O=ve+8|0,u=t[O>>2]|0,s=ve+12|0,M=t[s>>2]|0,h=M,S=u;do if((u|0)==(M|0)){if(M=ve+4|0,u=t[M>>2]|0,We=t[ve>>2]|0,l=We,u>>>0<=We>>>0){u=h-l>>1,u=(u|0)==0?1:u,Y(K,u,u>>>2,t[ve+16>>2]|0),t[Pe>>2]=t[M>>2],t[Ee>>2]=t[O>>2],t[D>>2]=t[Pe>>2],t[P>>2]=t[Ee>>2],hi(K,D,P),u=t[ve>>2]|0,t[ve>>2]=t[K>>2],t[K>>2]=u,u=K+4|0,We=t[M>>2]|0,t[M>>2]=t[u>>2],t[u>>2]=We,u=K+8|0,We=t[O>>2]|0,t[O>>2]=t[u>>2],t[u>>2]=We,u=K+12|0,We=t[s>>2]|0,t[s>>2]=t[u>>2],t[u>>2]=We,Jr(K),u=t[O>>2]|0;break}s=u,h=((s-l>>2)+1|0)/-2|0,D=u+(h<<2)|0,l=S-s|0,s=l>>2,s&&(Iy(D|0,u|0,l|0)|0,u=t[M>>2]|0),We=D+(s<<2)|0,t[O>>2]=We,t[M>>2]=u+(h<<2),u=We}while(0);t[u>>2]=t[r>>2],t[O>>2]=(t[O>>2]|0)+4,n=lt(e,ve,n)|0,Jr(ve)}while(0);return m=Qe,n|0}function Gn(e){e=e|0;var n=0;do{if(n=e+984|0,p[n>>0]|0)break;p[n>>0]=1,C[e+504>>2]=w(le),e=t[e+944>>2]|0}while((e|0)!=0)}function ic(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-u|0)>>>2)<<2)),yt(r))}function ri(e){return e=e|0,t[e+944>>2]|0}function Gr(e){e=e|0,Iu(e,(t[e+964>>2]|0)!=0,2832),Gn(e)}function Yl(e){return e=e|0,(p[e+984>>0]|0)!=0|0}function ea(e,n){e=e|0,n=n|0,MI(e,n,400)|0&&(pr(e|0,n|0,400)|0,Gn(e))}function lf(e){e=e|0;var n=St;return n=w(C[e+44>>2]),e=Me(n)|0,w(e?w(0):n)}function Ns(e){e=e|0;var n=St;return n=w(C[e+48>>2]),Me(n)|0&&(n=p[(t[e+976>>2]|0)+2>>0]|0?w(1):w(0)),w(n)}function Ma(e,n){e=e|0,n=n|0,t[e+980>>2]=n}function Ls(e){return e=e|0,t[e+980>>2]|0}function h0(e,n){e=e|0,n=n|0;var r=0;r=e+4|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Gn(e))}function Fs(e){return e=e|0,t[e+4>>2]|0}function Ni(e,n){e=e|0,n=n|0;var r=0;r=e+8|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Gn(e))}function B(e){return e=e|0,t[e+8>>2]|0}function z(e,n){e=e|0,n=n|0;var r=0;r=e+12|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Gn(e))}function G(e){return e=e|0,t[e+12>>2]|0}function $(e,n){e=e|0,n=n|0;var r=0;r=e+16|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Gn(e))}function De(e){return e=e|0,t[e+16>>2]|0}function me(e,n){e=e|0,n=n|0;var r=0;r=e+20|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Gn(e))}function xe(e){return e=e|0,t[e+20>>2]|0}function Z(e,n){e=e|0,n=n|0;var r=0;r=e+24|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Gn(e))}function ke(e){return e=e|0,t[e+24>>2]|0}function Xe(e,n){e=e|0,n=n|0;var r=0;r=e+28|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Gn(e))}function ht(e){return e=e|0,t[e+28>>2]|0}function ie(e,n){e=e|0,n=n|0;var r=0;r=e+32|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Gn(e))}function qe(e){return e=e|0,t[e+32>>2]|0}function tt(e,n){e=e|0,n=n|0;var r=0;r=e+36|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Gn(e))}function Tt(e){return e=e|0,t[e+36>>2]|0}function kt(e,n){e=e|0,n=w(n);var r=0;r=e+40|0,w(C[r>>2])!=n&&(C[r>>2]=n,Gn(e))}function bt(e,n){e=e|0,n=w(n);var r=0;r=e+44|0,w(C[r>>2])!=n&&(C[r>>2]=n,Gn(e))}function on(e,n){e=e|0,n=w(n);var r=0;r=e+48|0,w(C[r>>2])!=n&&(C[r>>2]=n,Gn(e))}function tn(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Me(n)|0,r=(s^1)&1,u=e+52|0,l=e+56|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Gn(e))}function Lt(e,n){e=e|0,n=w(n);var r=0,u=0;u=e+52|0,r=e+56|0,(w(C[u>>2])==n?(t[r>>2]|0)==2:0)||(C[u>>2]=n,u=Me(n)|0,t[r>>2]=u?3:2,Gn(e))}function gn(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+52|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function lr(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Me(r)|0,u=(s^1)&1,l=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Gn(e))}function Qn(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Me(r)|0,u=s?0:2,l=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Gn(e))}function _r(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=n+132+(r<<3)|0,n=t[u+4>>2]|0,r=e,t[r>>2]=t[u>>2],t[r+4>>2]=n}function Cn(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Me(r)|0,u=(s^1)&1,l=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Gn(e))}function Ar(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Me(r)|0,u=s?0:2,l=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Gn(e))}function v0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=n+60+(r<<3)|0,n=t[u+4>>2]|0,r=e,t[r>>2]=t[u>>2],t[r+4>>2]=n}function Rr(e,n){e=e|0,n=n|0;var r=0;r=e+60+(n<<3)+4|0,(t[r>>2]|0)!=3&&(C[e+60+(n<<3)>>2]=w(le),t[r>>2]=3,Gn(e))}function nt(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Me(r)|0,u=(s^1)&1,l=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Gn(e))}function _t(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Me(r)|0,u=s?0:2,l=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Gn(e))}function Ze(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=n+204+(r<<3)|0,n=t[u+4>>2]|0,r=e,t[r>>2]=t[u>>2],t[r+4>>2]=n}function Ft(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Me(r)|0,u=(s^1)&1,l=e+276+(n<<3)|0,n=e+276+(n<<3)+4|0,(s|w(C[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(C[l>>2]=r,t[n>>2]=u,Gn(e))}function nn(e,n){return e=e|0,n=n|0,w(C[e+276+(n<<3)>>2])}function sn(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Me(n)|0,r=(s^1)&1,u=e+348|0,l=e+352|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Gn(e))}function Yn(e,n){e=e|0,n=w(n);var r=0,u=0;u=e+348|0,r=e+352|0,(w(C[u>>2])==n?(t[r>>2]|0)==2:0)||(C[u>>2]=n,u=Me(n)|0,t[r>>2]=u?3:2,Gn(e))}function yr(e){e=e|0;var n=0;n=e+352|0,(t[n>>2]|0)!=3&&(C[e+348>>2]=w(le),t[n>>2]=3,Gn(e))}function nu(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+348|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function Cu(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Me(n)|0,r=(s^1)&1,u=e+356|0,l=e+360|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Gn(e))}function S0(e,n){e=e|0,n=w(n);var r=0,u=0;u=e+356|0,r=e+360|0,(w(C[u>>2])==n?(t[r>>2]|0)==2:0)||(C[u>>2]=n,u=Me(n)|0,t[r>>2]=u?3:2,Gn(e))}function X0(e){e=e|0;var n=0;n=e+360|0,(t[n>>2]|0)!=3&&(C[e+356>>2]=w(le),t[n>>2]=3,Gn(e))}function xu(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+356|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function di(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Me(n)|0,r=(s^1)&1,u=e+364|0,l=e+368|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Gn(e))}function ko(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Me(n)|0,r=s?0:2,u=e+364|0,l=e+368|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Gn(e))}function Zo(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+364|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function sf(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Me(n)|0,r=(s^1)&1,u=e+372|0,l=e+376|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Gn(e))}function gl(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Me(n)|0,r=s?0:2,u=e+372|0,l=e+376|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Gn(e))}function af(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+372|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function Mo(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Me(n)|0,r=(s^1)&1,u=e+380|0,l=e+384|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Gn(e))}function ds(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Me(n)|0,r=s?0:2,u=e+380|0,l=e+384|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Gn(e))}function bs(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+380|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function No(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Me(n)|0,r=(s^1)&1,u=e+388|0,l=e+392|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Gn(e))}function Lo(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Me(n)|0,r=s?0:2,u=e+388|0,l=e+392|0,(s|w(C[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(C[u>>2]=n,t[l>>2]=r,Gn(e))}function ps(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+388|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function Vu(e,n){e=e|0,n=w(n);var r=0;r=e+396|0,w(C[r>>2])!=n&&(C[r>>2]=n,Gn(e))}function yu(e){return e=e|0,w(C[e+396>>2])}function pi(e){return e=e|0,w(C[e+400>>2])}function T0(e){return e=e|0,w(C[e+404>>2])}function Q0(e){return e=e|0,w(C[e+408>>2])}function Fo(e){return e=e|0,w(C[e+412>>2])}function ta(e){return e=e|0,w(C[e+416>>2])}function Kl(e){return e=e|0,w(C[e+420>>2])}function Ki(e,n){switch(e=e|0,n=n|0,Iu(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(C[e+424+(n<<2)>>2])}function Yr(e,n){switch(e=e|0,n=n|0,Iu(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(C[e+448+(n<<2)>>2])}function fo(e,n){switch(e=e|0,n=n|0,Iu(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(C[e+472+(n<<2)>>2])}function Oi(e,n){e=e|0,n=n|0;var r=0,u=St;return r=t[e+4>>2]|0,(r|0)==(t[n+4>>2]|0)?r?(u=w(C[e>>2]),e=w(jt(w(u-w(C[n>>2]))))>2]=0,t[u+4>>2]=0,t[u+8>>2]=0,Y0(u|0,e|0,n|0,0),sr(e,3,(p[u+11>>0]|0)<0?t[u>>2]|0:u,r),eB(u),m=r}function J0(e,n,r,u){e=w(e),n=w(n),r=r|0,u=u|0;var l=St;e=w(e*n),l=w(YE(e,w(1)));do if(gi(l,w(0))|0)e=w(e-l);else{if(e=w(e-l),gi(l,w(1))|0){e=w(e+w(1));break}if(r){e=w(e+w(1));break}u||(l>w(.5)?l=w(1):(u=gi(l,w(.5))|0,l=w(u?1:0)),e=w(e+l))}while(0);return w(e/n)}function Z0(e,n,r,u,l,s,h,D,S,M,O,P,K){e=e|0,n=w(n),r=r|0,u=w(u),l=l|0,s=w(s),h=h|0,D=w(D),S=w(S),M=w(M),O=w(O),P=w(P),K=K|0;var Pe=0,Ee=St,ve=St,Qe=St,We=St,st=St,Re=St;return S>2]),Ee!=w(0)):0)?(Qe=w(J0(n,Ee,0,0)),We=w(J0(u,Ee,0,0)),ve=w(J0(s,Ee,0,0)),Ee=w(J0(D,Ee,0,0))):(ve=s,Qe=n,Ee=D,We=u),(l|0)==(e|0)?Pe=gi(ve,Qe)|0:Pe=0,(h|0)==(r|0)?K=gi(Ee,We)|0:K=0,((Pe?0:(st=w(n-O),!(Te(e,st,S)|0)))?!(et(e,st,l,S)|0):0)?Pe=Ve(e,st,l,s,S)|0:Pe=1,((K?0:(Re=w(u-P),!(Te(r,Re,M)|0)))?!(et(r,Re,h,M)|0):0)?K=Ve(r,Re,h,D,M)|0:K=1,K=Pe&K),K|0}function Te(e,n,r){return e=e|0,n=w(n),r=w(r),(e|0)==1?e=gi(n,r)|0:e=0,e|0}function et(e,n,r,u){return e=e|0,n=w(n),r=r|0,u=w(u),(e|0)==2&(r|0)==0?n>=u?e=1:e=gi(n,u)|0:e=0,e|0}function Ve(e,n,r,u,l){return e=e|0,n=w(n),r=r|0,u=w(u),l=w(l),(e|0)==2&(r|0)==2&u>n?l<=n?e=1:e=gi(n,l)|0:e=0,e|0}function Gt(e,n,r,u,l,s,h,D,S,M,O){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=s|0,h=w(h),D=w(D),S=S|0,M=M|0,O=O|0;var P=0,K=0,Pe=0,Ee=0,ve=St,Qe=St,We=0,st=0,Re=0,Fe=0,Qt=0,Lr=0,Nn=0,mn=0,hr=0,kr=0,On=0,Zi=St,ts=St,ns=St,rs=0,Xs=0;On=m,m=m+160|0,mn=On+152|0,Nn=On+120|0,Lr=On+104|0,Re=On+72|0,Ee=On+56|0,Qt=On+8|0,st=On,Fe=(t[2279]|0)+1|0,t[2279]=Fe,hr=e+984|0,((p[hr>>0]|0)!=0?(t[e+512>>2]|0)!=(t[2278]|0):0)?We=4:(t[e+516>>2]|0)==(u|0)?kr=0:We=4,(We|0)==4&&(t[e+520>>2]=0,t[e+924>>2]=-1,t[e+928>>2]=-1,C[e+932>>2]=w(-1),C[e+936>>2]=w(-1),kr=1);e:do if(t[e+964>>2]|0)if(ve=w(Yt(e,2,h)),Qe=w(Yt(e,0,h)),P=e+916|0,ns=w(C[P>>2]),ts=w(C[e+920>>2]),Zi=w(C[e+932>>2]),Z0(l,n,s,r,t[e+924>>2]|0,ns,t[e+928>>2]|0,ts,Zi,w(C[e+936>>2]),ve,Qe,O)|0)We=22;else if(Pe=t[e+520>>2]|0,!Pe)We=21;else for(K=0;;){if(P=e+524+(K*24|0)|0,Zi=w(C[P>>2]),ts=w(C[e+524+(K*24|0)+4>>2]),ns=w(C[e+524+(K*24|0)+16>>2]),Z0(l,n,s,r,t[e+524+(K*24|0)+8>>2]|0,Zi,t[e+524+(K*24|0)+12>>2]|0,ts,ns,w(C[e+524+(K*24|0)+20>>2]),ve,Qe,O)|0){We=22;break e}if(K=K+1|0,K>>>0>=Pe>>>0){We=21;break}}else{if(S){if(P=e+916|0,!(gi(w(C[P>>2]),n)|0)){We=21;break}if(!(gi(w(C[e+920>>2]),r)|0)){We=21;break}if((t[e+924>>2]|0)!=(l|0)){We=21;break}P=(t[e+928>>2]|0)==(s|0)?P:0,We=22;break}if(Pe=t[e+520>>2]|0,!Pe)We=21;else for(K=0;;){if(P=e+524+(K*24|0)|0,((gi(w(C[P>>2]),n)|0?gi(w(C[e+524+(K*24|0)+4>>2]),r)|0:0)?(t[e+524+(K*24|0)+8>>2]|0)==(l|0):0)?(t[e+524+(K*24|0)+12>>2]|0)==(s|0):0){We=22;break e}if(K=K+1|0,K>>>0>=Pe>>>0){We=21;break}}}while(0);do if((We|0)==21)p[11697]|0?(P=0,We=28):(P=0,We=31);else if((We|0)==22){if(K=(p[11697]|0)!=0,!((P|0)!=0&(kr^1)))if(K){We=28;break}else{We=31;break}Ee=P+16|0,t[e+908>>2]=t[Ee>>2],Pe=P+20|0,t[e+912>>2]=t[Pe>>2],(p[11698]|0)==0|K^1||(t[st>>2]=Br(Fe)|0,t[st+4>>2]=Fe,sr(e,4,2972,st),K=t[e+972>>2]|0,K|0&&M1[K&127](e),l=wn(l,S)|0,s=wn(s,S)|0,Xs=+w(C[Ee>>2]),rs=+w(C[Pe>>2]),t[Qt>>2]=l,t[Qt+4>>2]=s,U[Qt+8>>3]=+n,U[Qt+16>>3]=+r,U[Qt+24>>3]=Xs,U[Qt+32>>3]=rs,t[Qt+40>>2]=M,sr(e,4,2989,Qt))}while(0);return(We|0)==28&&(K=Br(Fe)|0,t[Ee>>2]=K,t[Ee+4>>2]=Fe,t[Ee+8>>2]=kr?3047:11699,sr(e,4,3038,Ee),K=t[e+972>>2]|0,K|0&&M1[K&127](e),Qt=wn(l,S)|0,We=wn(s,S)|0,t[Re>>2]=Qt,t[Re+4>>2]=We,U[Re+8>>3]=+n,U[Re+16>>3]=+r,t[Re+24>>2]=M,sr(e,4,3049,Re),We=31),(We|0)==31&&(fu(e,n,r,u,l,s,h,D,S,O),p[11697]|0&&(K=t[2279]|0,Qt=Br(K)|0,t[Lr>>2]=Qt,t[Lr+4>>2]=K,t[Lr+8>>2]=kr?3047:11699,sr(e,4,3083,Lr),K=t[e+972>>2]|0,K|0&&M1[K&127](e),Qt=wn(l,S)|0,Lr=wn(s,S)|0,rs=+w(C[e+908>>2]),Xs=+w(C[e+912>>2]),t[Nn>>2]=Qt,t[Nn+4>>2]=Lr,U[Nn+8>>3]=rs,U[Nn+16>>3]=Xs,t[Nn+24>>2]=M,sr(e,4,3092,Nn)),t[e+516>>2]=u,P||(K=e+520|0,P=t[K>>2]|0,(P|0)==16&&(p[11697]|0&&sr(e,4,3124,mn),t[K>>2]=0,P=0),S?P=e+916|0:(t[K>>2]=P+1,P=e+524+(P*24|0)|0),C[P>>2]=n,C[P+4>>2]=r,t[P+8>>2]=l,t[P+12>>2]=s,t[P+16>>2]=t[e+908>>2],t[P+20>>2]=t[e+912>>2],P=0)),S&&(t[e+416>>2]=t[e+908>>2],t[e+420>>2]=t[e+912>>2],p[e+985>>0]=1,p[hr>>0]=0),t[2279]=(t[2279]|0)+-1,t[e+512>>2]=t[2278],m=On,kr|(P|0)==0|0}function Yt(e,n,r){e=e|0,n=n|0,r=w(r);var u=St;return u=w(Li(e,n,r)),w(u+w(A0(e,n,r)))}function sr(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=m,m=m+16|0,l=s,t[l>>2]=u,e?u=t[e+976>>2]|0:u=0,Ps(u,e,n,r,l),m=s}function Br(e){return e=e|0,(e>>>0>60?3201:3201+(60-e)|0)|0}function wn(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;return l=m,m=m+32|0,r=l+12|0,u=l,t[r>>2]=t[254],t[r+4>>2]=t[255],t[r+8>>2]=t[256],t[u>>2]=t[257],t[u+4>>2]=t[258],t[u+8>>2]=t[259],(e|0)>2?e=11699:e=t[(n?u:r)+(e<<2)>>2]|0,m=l,e|0}function fu(e,n,r,u,l,s,h,D,S,M){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=s|0,h=w(h),D=w(D),S=S|0,M=M|0;var O=0,P=0,K=0,Pe=0,Ee=St,ve=St,Qe=St,We=St,st=St,Re=St,Fe=St,Qt=0,Lr=0,Nn=0,mn=St,hr=St,kr=0,On=St,Zi=0,ts=0,ns=0,rs=0,Xs=0,$2=0,ed=0,Za=0,td=0,Oc=0,kc=0,nd=0,rd=0,id=0,si=0,$a=0,ud=0,zf=0,od=St,ld=St,Mc=St,Nc=St,qf=St,Il=0,Aa=0,As=0,ef=0,L1=0,F1=St,Lc=St,b1=St,P1=St,Bl=St,vl=St,tf=0,lu=St,I1=St,is=St,Hf=St,us=St,Wf=St,B1=0,U1=0,Vf=St,Ul=St,nf=0,j1=0,z1=0,q1=0,gr=St,Mu=0,ml=0,os=0,jl=0,Tr=0,Fn=0,rf=0,hn=St,H1=0,u0=0;rf=m,m=m+16|0,Il=rf+12|0,Aa=rf+8|0,As=rf+4|0,ef=rf,Iu(e,(l|0)==0|(Me(n)|0)^1,3326),Iu(e,(s|0)==0|(Me(r)|0)^1,3406),ml=El(e,u)|0,t[e+496>>2]=ml,Tr=I0(2,ml)|0,Fn=I0(0,ml)|0,C[e+440>>2]=w(Li(e,Tr,h)),C[e+444>>2]=w(A0(e,Tr,h)),C[e+428>>2]=w(Li(e,Fn,h)),C[e+436>>2]=w(A0(e,Fn,h)),C[e+464>>2]=w(R0(e,Tr)),C[e+468>>2]=w(co(e,Tr)),C[e+452>>2]=w(R0(e,Fn)),C[e+460>>2]=w(co(e,Fn)),C[e+488>>2]=w(Ru(e,Tr,h)),C[e+492>>2]=w(Yu(e,Tr,h)),C[e+476>>2]=w(Ru(e,Fn,h)),C[e+484>>2]=w(Yu(e,Fn,h));do if(t[e+964>>2]|0)Xl(e,n,r,l,s,h,D);else{if(os=e+948|0,jl=(t[e+952>>2]|0)-(t[os>>2]|0)>>2,!jl){hs(e,n,r,l,s,h,D);break}if(S?0:ra(e,n,r,l,s,h,D)|0)break;cs(e),$a=e+508|0,p[$a>>0]=0,Tr=I0(t[e+4>>2]|0,ml)|0,Fn=df(Tr,ml)|0,Mu=Fi(Tr)|0,ud=t[e+8>>2]|0,j1=e+28|0,zf=(t[j1>>2]|0)!=0,us=Mu?h:D,Vf=Mu?D:h,od=w(Ku(e,Tr,h)),ld=w(vs(e,Tr,h)),Ee=w(Ku(e,Fn,h)),Wf=w(wr(e,Tr,h)),Ul=w(wr(e,Fn,h)),Nn=Mu?l:s,nf=Mu?s:l,gr=Mu?Wf:Ul,st=Mu?Ul:Wf,Hf=w(Yt(e,2,h)),We=w(Yt(e,0,h)),ve=w(w(Sn(e+364|0,h))-gr),Qe=w(w(Sn(e+380|0,h))-gr),Re=w(w(Sn(e+372|0,D))-st),Fe=w(w(Sn(e+388|0,D))-st),Mc=Mu?ve:Re,Nc=Mu?Qe:Fe,Hf=w(n-Hf),n=w(Hf-gr),Me(n)|0?gr=n:gr=w(Eu(w(Yp(n,Qe)),ve)),I1=w(r-We),n=w(I1-st),Me(n)|0?is=n:is=w(Eu(w(Yp(n,Fe)),Re)),ve=Mu?gr:is,lu=Mu?is:gr;e:do if((Nn|0)==1)for(u=0,P=0;;){if(O=yi(e,P)|0,!u)(w(Xi(O))>w(0)?w(ru(O))>w(0):0)?u=O:u=0;else if($0(O)|0){Pe=0;break e}if(P=P+1|0,P>>>0>=jl>>>0){Pe=u;break}}else Pe=0;while(0);Qt=Pe+500|0,Lr=Pe+504|0,u=0,O=0,n=w(0),K=0;do{if(P=t[(t[os>>2]|0)+(K<<2)>>2]|0,(t[P+36>>2]|0)==1)Ci(P),p[P+985>>0]=1,p[P+984>>0]=0;else{Vr(P),S&&C0(P,El(P,ml)|0,ve,lu,gr);do if((t[P+24>>2]|0)!=1)if((P|0)==(Pe|0)){t[Qt>>2]=t[2278],C[Lr>>2]=w(0);break}else{Xr(e,P,gr,l,is,gr,is,s,ml,M);break}else O|0&&(t[O+960>>2]=P),t[P+960>>2]=0,O=P,u=(u|0)==0?P:u;while(0);vl=w(C[P+504>>2]),n=w(n+w(vl+w(Yt(P,Tr,gr))))}K=K+1|0}while((K|0)!=(jl|0));for(ns=n>ve,tf=zf&((Nn|0)==2&ns)?1:Nn,Zi=(nf|0)==1,Xs=Zi&(S^1),$2=(tf|0)==1,ed=(tf|0)==2,Za=976+(Tr<<2)|0,td=(nf|2|0)==2,id=Zi&(zf^1),Oc=1040+(Fn<<2)|0,kc=1040+(Tr<<2)|0,nd=976+(Fn<<2)|0,rd=(nf|0)!=1,ns=zf&((Nn|0)!=0&ns),ts=e+976|0,Zi=Zi^1,n=ve,kr=0,rs=0,vl=w(0),qf=w(0);;){e:do if(kr>>>0>>0)for(Lr=t[os>>2]|0,K=0,Fe=w(0),Re=w(0),Qe=w(0),ve=w(0),P=0,O=0,Pe=kr;;){if(Qt=t[Lr+(Pe<<2)>>2]|0,(t[Qt+36>>2]|0)!=1?(t[Qt+940>>2]=rs,(t[Qt+24>>2]|0)!=1):0){if(We=w(Yt(Qt,Tr,gr)),si=t[Za>>2]|0,r=w(Sn(Qt+380+(si<<3)|0,us)),st=w(C[Qt+504>>2]),r=w(Yp(r,st)),r=w(Eu(w(Sn(Qt+364+(si<<3)|0,us)),r)),zf&(K|0)!=0&w(We+w(Re+r))>n){s=K,We=Fe,Nn=Pe;break e}We=w(We+r),r=w(Re+We),We=w(Fe+We),$0(Qt)|0&&(Qe=w(Qe+w(Xi(Qt))),ve=w(ve-w(st*w(ru(Qt))))),O|0&&(t[O+960>>2]=Qt),t[Qt+960>>2]=0,K=K+1|0,O=Qt,P=(P|0)==0?Qt:P}else We=Fe,r=Re;if(Pe=Pe+1|0,Pe>>>0>>0)Fe=We,Re=r;else{s=K,Nn=Pe;break}}else s=0,We=w(0),Qe=w(0),ve=w(0),P=0,Nn=kr;while(0);si=Qe>w(0)&Qew(0)&veNc&((Me(Nc)|0)^1))n=Nc,si=51;else if(p[(t[ts>>2]|0)+3>>0]|0)si=51;else{if(mn!=w(0)?w(Xi(e))!=w(0):0){si=53;break}n=We,si=53}while(0);if((si|0)==51&&(si=0,Me(n)|0?si=53:(hr=w(n-We),On=n)),(si|0)==53&&(si=0,We>2]|0,Pe=hrw(0),Re=w(hr/mn),Qe=w(0),We=w(0),n=w(0),O=P;do r=w(Sn(O+380+(K<<3)|0,us)),ve=w(Sn(O+364+(K<<3)|0,us)),ve=w(Yp(r,w(Eu(ve,w(C[O+504>>2]))))),Pe?(r=w(ve*w(ru(O))),(r!=w(-0)?(hn=w(ve-w(st*r)),F1=w(Wn(O,Tr,hn,On,gr)),hn!=F1):0)&&(Qe=w(Qe-w(F1-ve)),n=w(n+r))):((Qt?(Lc=w(Xi(O)),Lc!=w(0)):0)?(hn=w(ve+w(Re*Lc)),b1=w(Wn(O,Tr,hn,On,gr)),hn!=b1):0)&&(Qe=w(Qe-w(b1-ve)),We=w(We-Lc)),O=t[O+960>>2]|0;while((O|0)!=0);if(n=w(Fe+n),ve=w(hr+Qe),L1)n=w(0);else{st=w(mn+We),Pe=t[Za>>2]|0,Qt=vew(0),st=w(ve/st),n=w(0);do{hn=w(Sn(P+380+(Pe<<3)|0,us)),Qe=w(Sn(P+364+(Pe<<3)|0,us)),Qe=w(Yp(hn,w(Eu(Qe,w(C[P+504>>2]))))),Qt?(hn=w(Qe*w(ru(P))),ve=w(-hn),hn!=w(-0)?(hn=w(Re*ve),ve=w(Wn(P,Tr,w(Qe+(Lr?ve:hn)),On,gr))):ve=Qe):(K?(P1=w(Xi(P)),P1!=w(0)):0)?ve=w(Wn(P,Tr,w(Qe+w(st*P1)),On,gr)):ve=Qe,n=w(n-w(ve-Qe)),We=w(Yt(P,Tr,gr)),r=w(Yt(P,Fn,gr)),ve=w(ve+We),C[Aa>>2]=ve,t[ef>>2]=1,Qe=w(C[P+396>>2]);e:do if(Me(Qe)|0){O=Me(lu)|0;do if(!O){if(ns|(Bu(P,Fn,lu)|0|Zi)||(Xu(e,P)|0)!=4||(t[(m0(P,Fn)|0)+4>>2]|0)==3||(t[(y0(P,Fn)|0)+4>>2]|0)==3)break;C[Il>>2]=lu,t[As>>2]=1;break e}while(0);if(Bu(P,Fn,lu)|0){O=t[P+992+(t[nd>>2]<<2)>>2]|0,hn=w(r+w(Sn(O,lu))),C[Il>>2]=hn,O=rd&(t[O+4>>2]|0)==2,t[As>>2]=((Me(hn)|0|O)^1)&1;break}else{C[Il>>2]=lu,t[As>>2]=O?0:2;break}}else hn=w(ve-We),mn=w(hn/Qe),hn=w(Qe*hn),t[As>>2]=1,C[Il>>2]=w(r+(Mu?mn:hn));while(0);kn(P,Tr,On,gr,ef,Aa),kn(P,Fn,lu,gr,As,Il);do if(Bu(P,Fn,lu)|0?0:(Xu(e,P)|0)==4){if((t[(m0(P,Fn)|0)+4>>2]|0)==3){O=0;break}O=(t[(y0(P,Fn)|0)+4>>2]|0)!=3}else O=0;while(0);hn=w(C[Aa>>2]),mn=w(C[Il>>2]),H1=t[ef>>2]|0,u0=t[As>>2]|0,Gt(P,Mu?hn:mn,Mu?mn:hn,ml,Mu?H1:u0,Mu?u0:H1,gr,is,S&(O^1),3488,M)|0,p[$a>>0]=p[$a>>0]|p[P+508>>0],P=t[P+960>>2]|0}while((P|0)!=0)}}else n=w(0);if(n=w(hr+n),u0=n>0]=u0|k[$a>>0],ed&n>w(0)?(O=t[Za>>2]|0,((t[e+364+(O<<3)+4>>2]|0)!=0?(Bl=w(Sn(e+364+(O<<3)|0,us)),Bl>=w(0)):0)?ve=w(Eu(w(0),w(Bl-w(On-n)))):ve=w(0)):ve=n,Qt=kr>>>0>>0,Qt){Pe=t[os>>2]|0,K=kr,O=0;do P=t[Pe+(K<<2)>>2]|0,t[P+24>>2]|0||(O=((t[(m0(P,Tr)|0)+4>>2]|0)==3&1)+O|0,O=O+((t[(y0(P,Tr)|0)+4>>2]|0)==3&1)|0),K=K+1|0;while((K|0)!=(Nn|0));O?(We=w(0),r=w(0)):si=101}else si=101;e:do if((si|0)==101)switch(si=0,ud|0){case 1:{O=0,We=w(ve*w(.5)),r=w(0);break e}case 2:{O=0,We=ve,r=w(0);break e}case 3:{if(s>>>0<=1){O=0,We=w(0),r=w(0);break e}r=w((s+-1|0)>>>0),O=0,We=w(0),r=w(w(Eu(ve,w(0)))/r);break e}case 5:{r=w(ve/w((s+1|0)>>>0)),O=0,We=r;break e}case 4:{r=w(ve/w(s>>>0)),O=0,We=w(r*w(.5));break e}default:{O=0,We=w(0),r=w(0);break e}}while(0);if(n=w(od+We),Qt){Qe=w(ve/w(O|0)),K=t[os>>2]|0,P=kr,ve=w(0);do{O=t[K+(P<<2)>>2]|0;e:do if((t[O+36>>2]|0)!=1){switch(t[O+24>>2]|0){case 1:{if(se(O,Tr)|0){if(!S)break e;hn=w(re(O,Tr,On)),hn=w(hn+w(R0(e,Tr))),hn=w(hn+w(Li(O,Tr,gr))),C[O+400+(t[kc>>2]<<2)>>2]=hn;break e}break}case 0:if(u0=(t[(m0(O,Tr)|0)+4>>2]|0)==3,hn=w(Qe+n),n=u0?hn:n,S&&(u0=O+400+(t[kc>>2]<<2)|0,C[u0>>2]=w(n+w(C[u0>>2]))),u0=(t[(y0(O,Tr)|0)+4>>2]|0)==3,hn=w(Qe+n),n=u0?hn:n,Xs){hn=w(r+w(Yt(O,Tr,gr))),ve=lu,n=w(n+w(hn+w(C[O+504>>2])));break e}else{n=w(n+w(r+w(Le(O,Tr,gr)))),ve=w(Eu(ve,w(Le(O,Fn,gr))));break e}default:}S&&(hn=w(We+w(R0(e,Tr))),u0=O+400+(t[kc>>2]<<2)|0,C[u0>>2]=w(hn+w(C[u0>>2])))}while(0);P=P+1|0}while((P|0)!=(Nn|0))}else ve=w(0);if(r=w(ld+n),td?We=w(w(Wn(e,Fn,w(Ul+ve),Vf,h))-Ul):We=lu,Qe=w(w(Wn(e,Fn,w(Ul+(id?lu:ve)),Vf,h))-Ul),Qt&S){P=kr;do{K=t[(t[os>>2]|0)+(P<<2)>>2]|0;do if((t[K+36>>2]|0)!=1){if((t[K+24>>2]|0)==1){if(se(K,Fn)|0){if(hn=w(re(K,Fn,lu)),hn=w(hn+w(R0(e,Fn))),hn=w(hn+w(Li(K,Fn,gr))),O=t[Oc>>2]|0,C[K+400+(O<<2)>>2]=hn,!(Me(hn)|0))break}else O=t[Oc>>2]|0;hn=w(R0(e,Fn)),C[K+400+(O<<2)>>2]=w(hn+w(Li(K,Fn,gr)));break}O=Xu(e,K)|0;do if((O|0)==4){if((t[(m0(K,Fn)|0)+4>>2]|0)==3){si=139;break}if((t[(y0(K,Fn)|0)+4>>2]|0)==3){si=139;break}if(Bu(K,Fn,lu)|0){n=Ee;break}H1=t[K+908+(t[Za>>2]<<2)>>2]|0,t[Il>>2]=H1,n=w(C[K+396>>2]),u0=Me(n)|0,ve=(t[W>>2]=H1,w(C[W>>2])),u0?n=Qe:(hr=w(Yt(K,Fn,gr)),hn=w(ve/n),n=w(n*ve),n=w(hr+(Mu?hn:n))),C[Aa>>2]=n,C[Il>>2]=w(w(Yt(K,Tr,gr))+ve),t[As>>2]=1,t[ef>>2]=1,kn(K,Tr,On,gr,As,Il),kn(K,Fn,lu,gr,ef,Aa),n=w(C[Il>>2]),hr=w(C[Aa>>2]),hn=Mu?n:hr,n=Mu?hr:n,u0=((Me(hn)|0)^1)&1,Gt(K,hn,n,ml,u0,((Me(n)|0)^1)&1,gr,is,1,3493,M)|0,n=Ee}else si=139;while(0);e:do if((si|0)==139){si=0,n=w(We-w(Le(K,Fn,gr)));do if((t[(m0(K,Fn)|0)+4>>2]|0)==3){if((t[(y0(K,Fn)|0)+4>>2]|0)!=3)break;n=w(Ee+w(Eu(w(0),w(n*w(.5)))));break e}while(0);if((t[(y0(K,Fn)|0)+4>>2]|0)==3){n=Ee;break}if((t[(m0(K,Fn)|0)+4>>2]|0)==3){n=w(Ee+w(Eu(w(0),n)));break}switch(O|0){case 1:{n=Ee;break e}case 2:{n=w(Ee+w(n*w(.5)));break e}default:{n=w(Ee+n);break e}}}while(0);hn=w(vl+n),u0=K+400+(t[Oc>>2]<<2)|0,C[u0>>2]=w(hn+w(C[u0>>2]))}while(0);P=P+1|0}while((P|0)!=(Nn|0))}if(vl=w(vl+Qe),qf=w(Eu(qf,r)),s=rs+1|0,Nn>>>0>=jl>>>0)break;n=On,kr=Nn,rs=s}do if(S){if(O=s>>>0>1,O?0:!(Ae(e)|0))break;if(!(Me(lu)|0)){n=w(lu-vl);e:do switch(t[e+12>>2]|0){case 3:{Ee=w(Ee+n),Re=w(0);break}case 2:{Ee=w(Ee+w(n*w(.5))),Re=w(0);break}case 4:{lu>vl?Re=w(n/w(s>>>0)):Re=w(0);break}case 7:if(lu>vl){Ee=w(Ee+w(n/w(s<<1>>>0))),Re=w(n/w(s>>>0)),Re=O?Re:w(0);break e}else{Ee=w(Ee+w(n*w(.5))),Re=w(0);break e}case 6:{Re=w(n/w(rs>>>0)),Re=lu>vl&O?Re:w(0);break}default:Re=w(0)}while(0);if(s|0)for(Qt=1040+(Fn<<2)|0,Lr=976+(Fn<<2)|0,Pe=0,P=0;;){e:do if(P>>>0>>0)for(ve=w(0),Qe=w(0),n=w(0),K=P;;){O=t[(t[os>>2]|0)+(K<<2)>>2]|0;do if((t[O+36>>2]|0)!=1?(t[O+24>>2]|0)==0:0){if((t[O+940>>2]|0)!=(Pe|0))break e;if(ot(O,Fn)|0&&(hn=w(C[O+908+(t[Lr>>2]<<2)>>2]),n=w(Eu(n,w(hn+w(Yt(O,Fn,gr)))))),(Xu(e,O)|0)!=5)break;Bl=w(vt(O)),Bl=w(Bl+w(Li(O,0,gr))),hn=w(C[O+912>>2]),hn=w(w(hn+w(Yt(O,0,gr)))-Bl),Bl=w(Eu(Qe,Bl)),hn=w(Eu(ve,hn)),ve=hn,Qe=Bl,n=w(Eu(n,w(Bl+hn)))}while(0);if(O=K+1|0,O>>>0>>0)K=O;else{K=O;break}}else Qe=w(0),n=w(0),K=P;while(0);if(st=w(Re+n),r=Ee,Ee=w(Ee+st),P>>>0>>0){We=w(r+Qe),O=P;do{P=t[(t[os>>2]|0)+(O<<2)>>2]|0;e:do if((t[P+36>>2]|0)!=1?(t[P+24>>2]|0)==0:0)switch(Xu(e,P)|0){case 1:{hn=w(r+w(Li(P,Fn,gr))),C[P+400+(t[Qt>>2]<<2)>>2]=hn;break e}case 3:{hn=w(w(Ee-w(A0(P,Fn,gr)))-w(C[P+908+(t[Lr>>2]<<2)>>2])),C[P+400+(t[Qt>>2]<<2)>>2]=hn;break e}case 2:{hn=w(r+w(w(st-w(C[P+908+(t[Lr>>2]<<2)>>2]))*w(.5))),C[P+400+(t[Qt>>2]<<2)>>2]=hn;break e}case 4:{if(hn=w(r+w(Li(P,Fn,gr))),C[P+400+(t[Qt>>2]<<2)>>2]=hn,Bu(P,Fn,lu)|0||(Mu?(ve=w(C[P+908>>2]),n=w(ve+w(Yt(P,Tr,gr))),Qe=st):(Qe=w(C[P+912>>2]),Qe=w(Qe+w(Yt(P,Fn,gr))),n=st,ve=w(C[P+908>>2])),gi(n,ve)|0?gi(Qe,w(C[P+912>>2]))|0:0))break e;Gt(P,n,Qe,ml,1,1,gr,is,1,3501,M)|0;break e}case 5:{C[P+404>>2]=w(w(We-w(vt(P)))+w(re(P,0,lu)));break e}default:break e}while(0);O=O+1|0}while((O|0)!=(K|0))}if(Pe=Pe+1|0,(Pe|0)==(s|0))break;P=K}}}while(0);if(C[e+908>>2]=w(Wn(e,2,Hf,h,h)),C[e+912>>2]=w(Wn(e,0,I1,D,h)),((tf|0)!=0?(B1=t[e+32>>2]|0,U1=(tf|0)==2,!(U1&(B1|0)!=2)):0)?U1&(B1|0)==2&&(n=w(Wf+On),n=w(Eu(w(Yp(n,w(Xt(e,Tr,qf,us)))),Wf)),si=198):(n=w(Wn(e,Tr,qf,us,h)),si=198),(si|0)==198&&(C[e+908+(t[976+(Tr<<2)>>2]<<2)>>2]=n),((nf|0)!=0?(z1=t[e+32>>2]|0,q1=(nf|0)==2,!(q1&(z1|0)!=2)):0)?q1&(z1|0)==2&&(n=w(Ul+lu),n=w(Eu(w(Yp(n,w(Xt(e,Fn,w(Ul+vl),Vf)))),Ul)),si=204):(n=w(Wn(e,Fn,w(Ul+vl),Vf,h)),si=204),(si|0)==204&&(C[e+908+(t[976+(Fn<<2)>>2]<<2)>>2]=n),S){if((t[j1>>2]|0)==2){P=976+(Fn<<2)|0,K=1040+(Fn<<2)|0,O=0;do Pe=yi(e,O)|0,t[Pe+24>>2]|0||(H1=t[P>>2]|0,hn=w(C[e+908+(H1<<2)>>2]),u0=Pe+400+(t[K>>2]<<2)|0,hn=w(hn-w(C[u0>>2])),C[u0>>2]=w(hn-w(C[Pe+908+(H1<<2)>>2]))),O=O+1|0;while((O|0)!=(jl|0))}if(u|0){O=Mu?tf:l;do xn(e,u,gr,O,is,ml,M),u=t[u+960>>2]|0;while((u|0)!=0)}if(O=(Tr|2|0)==3,P=(Fn|2|0)==3,O|P){u=0;do K=t[(t[os>>2]|0)+(u<<2)>>2]|0,(t[K+36>>2]|0)!=1&&(O&&_n(e,K,Tr),P&&_n(e,K,Fn)),u=u+1|0;while((u|0)!=(jl|0))}}}while(0);m=rf}function Gu(e,n){e=e|0,n=w(n);var r=0;Dn(e,n>=w(0),3147),r=n==w(0),C[e+4>>2]=r?w(0):n}function Kr(e,n,r,u){e=e|0,n=w(n),r=w(r),u=u|0;var l=St,s=St,h=0,D=0,S=0;t[2278]=(t[2278]|0)+1,Vr(e),Bu(e,2,n)|0?(l=w(Sn(t[e+992>>2]|0,n)),S=1,l=w(l+w(Yt(e,2,n)))):(l=w(Sn(e+380|0,n)),l>=w(0)?S=2:(S=((Me(n)|0)^1)&1,l=n)),Bu(e,0,r)|0?(s=w(Sn(t[e+996>>2]|0,r)),D=1,s=w(s+w(Yt(e,0,n)))):(s=w(Sn(e+388|0,r)),s>=w(0)?D=2:(D=((Me(r)|0)^1)&1,s=r)),h=e+976|0,(Gt(e,l,s,u,S,D,n,r,1,3189,t[h>>2]|0)|0?(C0(e,t[e+496>>2]|0,n,r,n),Au(e,w(C[(t[h>>2]|0)+4>>2]),w(0),w(0)),p[11696]|0):0)&&ff(e,7)}function Vr(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0;D=m,m=m+32|0,h=D+24|0,s=D+16|0,u=D+8|0,l=D,r=0;do n=e+380+(r<<3)|0,((t[e+380+(r<<3)+4>>2]|0)!=0?(S=n,M=t[S+4>>2]|0,O=u,t[O>>2]=t[S>>2],t[O+4>>2]=M,O=e+364+(r<<3)|0,M=t[O+4>>2]|0,S=l,t[S>>2]=t[O>>2],t[S+4>>2]=M,t[s>>2]=t[u>>2],t[s+4>>2]=t[u+4>>2],t[h>>2]=t[l>>2],t[h+4>>2]=t[l+4>>2],Oi(s,h)|0):0)||(n=e+348+(r<<3)|0),t[e+992+(r<<2)>>2]=n,r=r+1|0;while((r|0)!=2);m=D}function Bu(e,n,r){e=e|0,n=n|0,r=w(r);var u=0;switch(e=t[e+992+(t[976+(n<<2)>>2]<<2)>>2]|0,t[e+4>>2]|0){case 0:case 3:{e=0;break}case 1:{w(C[e>>2])>2])>2]|0){case 2:{n=w(w(w(C[e>>2])*n)/w(100));break}case 1:{n=w(C[e>>2]);break}default:n=w(le)}return w(n)}function C0(e,n,r,u,l){e=e|0,n=n|0,r=w(r),u=w(u),l=w(l);var s=0,h=St;n=t[e+944>>2]|0?n:1,s=I0(t[e+4>>2]|0,n)|0,n=df(s,n)|0,r=w(Sr(e,s,r)),u=w(Sr(e,n,u)),h=w(r+w(Li(e,s,l))),C[e+400+(t[1040+(s<<2)>>2]<<2)>>2]=h,r=w(r+w(A0(e,s,l))),C[e+400+(t[1e3+(s<<2)>>2]<<2)>>2]=r,r=w(u+w(Li(e,n,l))),C[e+400+(t[1040+(n<<2)>>2]<<2)>>2]=r,l=w(u+w(A0(e,n,l))),C[e+400+(t[1e3+(n<<2)>>2]<<2)>>2]=l}function Au(e,n,r,u){e=e|0,n=w(n),r=w(r),u=w(u);var l=0,s=0,h=St,D=St,S=0,M=0,O=St,P=0,K=St,Pe=St,Ee=St,ve=St;if(n!=w(0)&&(l=e+400|0,ve=w(C[l>>2]),s=e+404|0,Ee=w(C[s>>2]),P=e+416|0,Pe=w(C[P>>2]),M=e+420|0,h=w(C[M>>2]),K=w(ve+r),O=w(Ee+u),u=w(K+Pe),D=w(O+h),S=(t[e+988>>2]|0)==1,C[l>>2]=w(J0(ve,n,0,S)),C[s>>2]=w(J0(Ee,n,0,S)),r=w(YE(w(Pe*n),w(1))),gi(r,w(0))|0?s=0:s=(gi(r,w(1))|0)^1,r=w(YE(w(h*n),w(1))),gi(r,w(0))|0?l=0:l=(gi(r,w(1))|0)^1,ve=w(J0(u,n,S&s,S&(s^1))),C[P>>2]=w(ve-w(J0(K,n,0,S))),ve=w(J0(D,n,S&l,S&(l^1))),C[M>>2]=w(ve-w(J0(O,n,0,S))),s=(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2,s|0)){l=0;do Au(yi(e,l)|0,n,K,O),l=l+1|0;while((l|0)!=(s|0))}}function ei(e,n,r,u,l){switch(e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,r|0){case 5:case 0:{e=F8(t[489]|0,u,l)|0;break}default:e=QI(u,l)|0}return e|0}function _l(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;l=m,m=m+16|0,s=l,t[s>>2]=u,Ps(e,0,n,r,s),m=l}function Ps(e,n,r,u,l){if(e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,e=e|0?e:956,tS[t[e+8>>2]&1](e,n,r,u,l)|0,(r|0)==5)Xn();else return}function Uu(e,n,r){e=e|0,n=n|0,r=r|0,p[e+n>>0]=r&1}function na(e,n){e=e|0,n=n|0;var r=0,u=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,u=(t[r>>2]|0)-(t[n>>2]|0)>>2,u|0&&(zi(e,u),Is(e,t[n>>2]|0,t[r>>2]|0,u))}function zi(e,n){e=e|0,n=n|0;var r=0;if((x0(e)|0)>>>0>>0&&li(e),n>>>0>1073741823)Xn();else{r=cn(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function Is(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,u=e+4|0,e=r-n|0,(e|0)>0&&(pr(t[u>>2]|0,n|0,e|0)|0,t[u>>2]=(t[u>>2]|0)+(e>>>2<<2))}function x0(e){return e=e|0,1073741823}function Li(e,n,r){return e=e|0,n=n|0,r=w(r),(Fi(n)|0?(t[e+96>>2]|0)!=0:0)?e=e+92|0:e=dt(e+60|0,t[1040+(n<<2)>>2]|0,992)|0,w($o(e,r))}function A0(e,n,r){return e=e|0,n=n|0,r=w(r),(Fi(n)|0?(t[e+104>>2]|0)!=0:0)?e=e+100|0:e=dt(e+60|0,t[1e3+(n<<2)>>2]|0,992)|0,w($o(e,r))}function Fi(e){return e=e|0,(e|1|0)==3|0}function $o(e,n){return e=e|0,n=w(n),(t[e+4>>2]|0)==3?n=w(0):n=w(Sn(e,n)),w(n)}function El(e,n){return e=e|0,n=n|0,e=t[e>>2]|0,((e|0)==0?(n|0)>1?n:1:e)|0}function I0(e,n){e=e|0,n=n|0;var r=0;e:do if((n|0)==2){switch(e|0){case 2:{e=3;break e}case 3:break;default:{r=4;break e}}e=2}else r=4;while(0);return e|0}function R0(e,n){e=e|0,n=n|0;var r=St;return((Fi(n)|0?(t[e+312>>2]|0)!=0:0)?(r=w(C[e+308>>2]),r>=w(0)):0)||(r=w(Eu(w(C[(dt(e+276|0,t[1040+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function co(e,n){e=e|0,n=n|0;var r=St;return((Fi(n)|0?(t[e+320>>2]|0)!=0:0)?(r=w(C[e+316>>2]),r>=w(0)):0)||(r=w(Eu(w(C[(dt(e+276|0,t[1e3+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function Ru(e,n,r){e=e|0,n=n|0,r=w(r);var u=St;return((Fi(n)|0?(t[e+240>>2]|0)!=0:0)?(u=w(Sn(e+236|0,r)),u>=w(0)):0)||(u=w(Eu(w(Sn(dt(e+204|0,t[1040+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(u)}function Yu(e,n,r){e=e|0,n=n|0,r=w(r);var u=St;return((Fi(n)|0?(t[e+248>>2]|0)!=0:0)?(u=w(Sn(e+244|0,r)),u>=w(0)):0)||(u=w(Eu(w(Sn(dt(e+204|0,t[1e3+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(u)}function Xl(e,n,r,u,l,s,h){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=w(s),h=w(h);var D=St,S=St,M=St,O=St,P=St,K=St,Pe=0,Ee=0,ve=0;ve=m,m=m+16|0,Pe=ve,Ee=e+964|0,Iu(e,(t[Ee>>2]|0)!=0,3519),D=w(wr(e,2,n)),S=w(wr(e,0,n)),M=w(Yt(e,2,n)),O=w(Yt(e,0,n)),Me(n)|0?P=n:P=w(Eu(w(0),w(w(n-M)-D))),Me(r)|0?K=r:K=w(Eu(w(0),w(w(r-O)-S))),(u|0)==1&(l|0)==1?(C[e+908>>2]=w(Wn(e,2,w(n-M),s,s)),n=w(Wn(e,0,w(r-O),h,s))):(nS[t[Ee>>2]&1](Pe,e,P,u,K,l),P=w(D+w(C[Pe>>2])),K=w(n-M),C[e+908>>2]=w(Wn(e,2,(u|2|0)==2?P:K,s,s)),K=w(S+w(C[Pe+4>>2])),n=w(r-O),n=w(Wn(e,0,(l|2|0)==2?K:n,h,s))),C[e+912>>2]=n,m=ve}function hs(e,n,r,u,l,s,h){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=w(s),h=w(h);var D=St,S=St,M=St,O=St;M=w(wr(e,2,s)),D=w(wr(e,0,s)),O=w(Yt(e,2,s)),S=w(Yt(e,0,s)),n=w(n-O),C[e+908>>2]=w(Wn(e,2,(u|2|0)==2?M:n,s,s)),r=w(r-S),C[e+912>>2]=w(Wn(e,0,(l|2|0)==2?D:r,h,s))}function ra(e,n,r,u,l,s,h){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=w(s),h=w(h);var D=0,S=St,M=St;return D=(u|0)==2,((n<=w(0)&D?0:!(r<=w(0)&(l|0)==2))?!((u|0)==1&(l|0)==1):0)?e=0:(S=w(Yt(e,0,s)),M=w(Yt(e,2,s)),D=n>2]=w(Wn(e,2,D?w(0):n,s,s)),n=w(r-S),D=r>2]=w(Wn(e,0,D?w(0):n,h,s)),e=1),e|0}function df(e,n){return e=e|0,n=n|0,yn(e)|0?e=I0(2,n)|0:e=0,e|0}function Ku(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(Ru(e,n,r)),w(r+w(R0(e,n)))}function vs(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(Yu(e,n,r)),w(r+w(co(e,n)))}function wr(e,n,r){e=e|0,n=n|0,r=w(r);var u=St;return u=w(Ku(e,n,r)),w(u+w(vs(e,n,r)))}function $0(e){return e=e|0,t[e+24>>2]|0?e=0:w(Xi(e))!=w(0)?e=1:e=w(ru(e))!=w(0),e|0}function Xi(e){e=e|0;var n=St;if(t[e+944>>2]|0){if(n=w(C[e+44>>2]),Me(n)|0)return n=w(C[e+40>>2]),e=n>w(0)&((Me(n)|0)^1),w(e?n:w(0))}else n=w(0);return w(n)}function ru(e){e=e|0;var n=St,r=0,u=St;do if(t[e+944>>2]|0){if(n=w(C[e+48>>2]),Me(n)|0){if(r=p[(t[e+976>>2]|0)+2>>0]|0,r<<24>>24==0?(u=w(C[e+40>>2]),u>24?w(1):w(0)}}else n=w(0);while(0);return w(n)}function Ci(e){e=e|0;var n=0,r=0;if(Iv(e+400|0,0,540)|0,p[e+985>>0]=1,cs(e),r=mu(e)|0,r|0){n=e+948|0,e=0;do Ci(t[(t[n>>2]|0)+(e<<2)>>2]|0),e=e+1|0;while((e|0)!=(r|0))}}function Xr(e,n,r,u,l,s,h,D,S,M){e=e|0,n=n|0,r=w(r),u=u|0,l=w(l),s=w(s),h=w(h),D=D|0,S=S|0,M=M|0;var O=0,P=St,K=0,Pe=0,Ee=St,ve=St,Qe=0,We=St,st=0,Re=St,Fe=0,Qt=0,Lr=0,Nn=0,mn=0,hr=0,kr=0,On=0,Zi=0,ts=0;Zi=m,m=m+16|0,Lr=Zi+12|0,Nn=Zi+8|0,mn=Zi+4|0,hr=Zi,On=I0(t[e+4>>2]|0,S)|0,Fe=Fi(On)|0,P=w(Sn(En(n)|0,Fe?s:h)),Qt=Bu(n,2,s)|0,kr=Bu(n,0,h)|0;do if(Me(P)|0?0:!(Me(Fe?r:l)|0)){if(O=n+504|0,!(Me(w(C[O>>2]))|0)&&(!(er(t[n+976>>2]|0,0)|0)||(t[n+500>>2]|0)==(t[2278]|0)))break;C[O>>2]=w(Eu(P,w(wr(n,On,s))))}else K=7;while(0);do if((K|0)==7){if(st=Fe^1,!(st|Qt^1)){h=w(Sn(t[n+992>>2]|0,s)),C[n+504>>2]=w(Eu(h,w(wr(n,2,s))));break}if(!(Fe|kr^1)){h=w(Sn(t[n+996>>2]|0,h)),C[n+504>>2]=w(Eu(h,w(wr(n,0,s))));break}C[Lr>>2]=w(le),C[Nn>>2]=w(le),t[mn>>2]=0,t[hr>>2]=0,We=w(Yt(n,2,s)),Re=w(Yt(n,0,s)),Qt?(Ee=w(We+w(Sn(t[n+992>>2]|0,s))),C[Lr>>2]=Ee,t[mn>>2]=1,Pe=1):(Pe=0,Ee=w(le)),kr?(P=w(Re+w(Sn(t[n+996>>2]|0,h))),C[Nn>>2]=P,t[hr>>2]=1,O=1):(O=0,P=w(le)),K=t[e+32>>2]|0,Fe&(K|0)==2?K=2:(Me(Ee)|0?!(Me(r)|0):0)&&(C[Lr>>2]=r,t[mn>>2]=2,Pe=2,Ee=r),(((K|0)==2&st?0:Me(P)|0)?!(Me(l)|0):0)&&(C[Nn>>2]=l,t[hr>>2]=2,O=2,P=l),ve=w(C[n+396>>2]),Qe=Me(ve)|0;do if(Qe)K=Pe;else{if((Pe|0)==1&st){C[Nn>>2]=w(w(Ee-We)/ve),t[hr>>2]=1,O=1,K=1;break}Fe&(O|0)==1?(C[Lr>>2]=w(ve*w(P-Re)),t[mn>>2]=1,O=1,K=1):K=Pe}while(0);ts=Me(r)|0,Pe=(Xu(e,n)|0)!=4,(Fe|Qt|((u|0)!=1|ts)|(Pe|(K|0)==1)?0:(C[Lr>>2]=r,t[mn>>2]=1,!Qe))&&(C[Nn>>2]=w(w(r-We)/ve),t[hr>>2]=1,O=1),(kr|st|((D|0)!=1|(Me(l)|0))|(Pe|(O|0)==1)?0:(C[Nn>>2]=l,t[hr>>2]=1,!Qe))&&(C[Lr>>2]=w(ve*w(l-Re)),t[mn>>2]=1),kn(n,2,s,s,mn,Lr),kn(n,0,h,s,hr,Nn),r=w(C[Lr>>2]),l=w(C[Nn>>2]),Gt(n,r,l,S,t[mn>>2]|0,t[hr>>2]|0,s,h,0,3565,M)|0,h=w(C[n+908+(t[976+(On<<2)>>2]<<2)>>2]),C[n+504>>2]=w(Eu(h,w(wr(n,On,s))))}while(0);t[n+500>>2]=t[2278],m=Zi}function Wn(e,n,r,u,l){return e=e|0,n=n|0,r=w(r),u=w(u),l=w(l),u=w(Xt(e,n,r,u)),w(Eu(u,w(wr(e,n,l))))}function Xu(e,n){return e=e|0,n=n|0,n=n+20|0,n=t[((t[n>>2]|0)==0?e+16|0:n)>>2]|0,((n|0)==5?yn(t[e+4>>2]|0)|0:0)&&(n=1),n|0}function m0(e,n){return e=e|0,n=n|0,(Fi(n)|0?(t[e+96>>2]|0)!=0:0)?n=4:n=t[1040+(n<<2)>>2]|0,e+60+(n<<3)|0}function y0(e,n){return e=e|0,n=n|0,(Fi(n)|0?(t[e+104>>2]|0)!=0:0)?n=5:n=t[1e3+(n<<2)>>2]|0,e+60+(n<<3)|0}function kn(e,n,r,u,l,s){switch(e=e|0,n=n|0,r=w(r),u=w(u),l=l|0,s=s|0,r=w(Sn(e+380+(t[976+(n<<2)>>2]<<3)|0,r)),r=w(r+w(Yt(e,n,u))),t[l>>2]|0){case 2:case 1:{l=Me(r)|0,u=w(C[s>>2]),C[s>>2]=l|u>2]=2,C[s>>2]=r);break}default:}}function se(e,n){return e=e|0,n=n|0,e=e+132|0,(Fi(n)|0?(t[(dt(e,4,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(dt(e,t[1040+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function re(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0;return e=e+132|0,(Fi(n)|0?(u=dt(e,4,948)|0,(t[u+4>>2]|0)!=0):0)?l=4:(u=dt(e,t[1040+(n<<2)>>2]|0,948)|0,t[u+4>>2]|0?l=4:r=w(0)),(l|0)==4&&(r=w(Sn(u,r))),w(r)}function Le(e,n,r){e=e|0,n=n|0,r=w(r);var u=St;return u=w(C[e+908+(t[976+(n<<2)>>2]<<2)>>2]),u=w(u+w(Li(e,n,r))),w(u+w(A0(e,n,r)))}function Ae(e){e=e|0;var n=0,r=0,u=0;e:do if(yn(t[e+4>>2]|0)|0)n=0;else if((t[e+16>>2]|0)!=5)if(r=mu(e)|0,!r)n=0;else for(n=0;;){if(u=yi(e,n)|0,(t[u+24>>2]|0)==0?(t[u+20>>2]|0)==5:0){n=1;break e}if(n=n+1|0,n>>>0>=r>>>0){n=0;break}}else n=1;while(0);return n|0}function ot(e,n){e=e|0,n=n|0;var r=St;return r=w(C[e+908+(t[976+(n<<2)>>2]<<2)>>2]),r>=w(0)&((Me(r)|0)^1)|0}function vt(e){e=e|0;var n=St,r=0,u=0,l=0,s=0,h=0,D=0,S=St;if(r=t[e+968>>2]|0,r)S=w(C[e+908>>2]),n=w(C[e+912>>2]),n=w(J8[r&0](e,S,n)),Iu(e,(Me(n)|0)^1,3573);else{s=mu(e)|0;do if(s|0){for(r=0,l=0;;){if(u=yi(e,l)|0,t[u+940>>2]|0){h=8;break}if((t[u+24>>2]|0)!=1)if(D=(Xu(e,u)|0)==5,D){r=u;break}else r=(r|0)==0?u:r;if(l=l+1|0,l>>>0>=s>>>0){h=8;break}}if((h|0)==8&&!r)break;return n=w(vt(r)),w(n+w(C[r+404>>2]))}while(0);n=w(C[e+912>>2])}return w(n)}function Xt(e,n,r,u){e=e|0,n=n|0,r=w(r),u=w(u);var l=St,s=0;return yn(n)|0?(n=1,s=3):Fi(n)|0?(n=0,s=3):(u=w(le),l=w(le)),(s|0)==3&&(l=w(Sn(e+364+(n<<3)|0,u)),u=w(Sn(e+380+(n<<3)|0,u))),s=u=w(0)&((Me(u)|0)^1)),r=s?u:r,s=l>=w(0)&((Me(l)|0)^1)&r>2]|0,s)|0,Ee=df(Qe,s)|0,ve=Fi(Qe)|0,P=w(Yt(n,2,r)),K=w(Yt(n,0,r)),Bu(n,2,r)|0?D=w(P+w(Sn(t[n+992>>2]|0,r))):(se(n,2)|0?It(n,2)|0:0)?(D=w(C[e+908>>2]),S=w(R0(e,2)),S=w(D-w(S+w(co(e,2)))),D=w(re(n,2,r)),D=w(Wn(n,2,w(S-w(D+w(xi(n,2,r)))),r,r))):D=w(le),Bu(n,0,l)|0?S=w(K+w(Sn(t[n+996>>2]|0,l))):(se(n,0)|0?It(n,0)|0:0)?(S=w(C[e+912>>2]),st=w(R0(e,0)),st=w(S-w(st+w(co(e,0)))),S=w(re(n,0,l)),S=w(Wn(n,0,w(st-w(S+w(xi(n,0,l)))),l,r))):S=w(le),M=Me(D)|0,O=Me(S)|0;do if(M^O?(Pe=w(C[n+396>>2]),!(Me(Pe)|0)):0)if(M){D=w(P+w(w(S-K)*Pe));break}else{st=w(K+w(w(D-P)/Pe)),S=O?st:S;break}while(0);O=Me(D)|0,M=Me(S)|0,O|M&&(Re=(O^1)&1,u=r>w(0)&((u|0)!=0&O),D=ve?D:u?r:D,Gt(n,D,S,s,ve?Re:u?2:Re,O&(M^1)&1,D,S,0,3623,h)|0,D=w(C[n+908>>2]),D=w(D+w(Yt(n,2,r))),S=w(C[n+912>>2]),S=w(S+w(Yt(n,0,r)))),Gt(n,D,S,s,1,1,D,S,1,3635,h)|0,(It(n,Qe)|0?!(se(n,Qe)|0):0)?(Re=t[976+(Qe<<2)>>2]|0,st=w(C[e+908+(Re<<2)>>2]),st=w(st-w(C[n+908+(Re<<2)>>2])),st=w(st-w(co(e,Qe))),st=w(st-w(A0(n,Qe,r))),st=w(st-w(xi(n,Qe,ve?r:l))),C[n+400+(t[1040+(Qe<<2)>>2]<<2)>>2]=st):We=21;do if((We|0)==21){if(se(n,Qe)|0?0:(t[e+8>>2]|0)==1){Re=t[976+(Qe<<2)>>2]|0,st=w(C[e+908+(Re<<2)>>2]),st=w(w(st-w(C[n+908+(Re<<2)>>2]))*w(.5)),C[n+400+(t[1040+(Qe<<2)>>2]<<2)>>2]=st;break}(se(n,Qe)|0?0:(t[e+8>>2]|0)==2)&&(Re=t[976+(Qe<<2)>>2]|0,st=w(C[e+908+(Re<<2)>>2]),st=w(st-w(C[n+908+(Re<<2)>>2])),C[n+400+(t[1040+(Qe<<2)>>2]<<2)>>2]=st)}while(0);(It(n,Ee)|0?!(se(n,Ee)|0):0)?(Re=t[976+(Ee<<2)>>2]|0,st=w(C[e+908+(Re<<2)>>2]),st=w(st-w(C[n+908+(Re<<2)>>2])),st=w(st-w(co(e,Ee))),st=w(st-w(A0(n,Ee,r))),st=w(st-w(xi(n,Ee,ve?l:r))),C[n+400+(t[1040+(Ee<<2)>>2]<<2)>>2]=st):We=30;do if((We|0)==30?!(se(n,Ee)|0):0){if((Xu(e,n)|0)==2){Re=t[976+(Ee<<2)>>2]|0,st=w(C[e+908+(Re<<2)>>2]),st=w(w(st-w(C[n+908+(Re<<2)>>2]))*w(.5)),C[n+400+(t[1040+(Ee<<2)>>2]<<2)>>2]=st;break}Re=(Xu(e,n)|0)==3,Re^(t[e+28>>2]|0)==2&&(Re=t[976+(Ee<<2)>>2]|0,st=w(C[e+908+(Re<<2)>>2]),st=w(st-w(C[n+908+(Re<<2)>>2])),C[n+400+(t[1040+(Ee<<2)>>2]<<2)>>2]=st)}while(0)}function _n(e,n,r){e=e|0,n=n|0,r=r|0;var u=St,l=0;l=t[976+(r<<2)>>2]|0,u=w(C[n+908+(l<<2)>>2]),u=w(w(C[e+908+(l<<2)>>2])-u),u=w(u-w(C[n+400+(t[1040+(r<<2)>>2]<<2)>>2])),C[n+400+(t[1e3+(r<<2)>>2]<<2)>>2]=u}function yn(e){return e=e|0,(e|1|0)==1|0}function En(e){e=e|0;var n=St;switch(t[e+56>>2]|0){case 0:case 3:{n=w(C[e+40>>2]),n>w(0)&((Me(n)|0)^1)?e=p[(t[e+976>>2]|0)+2>>0]|0?1056:992:e=1056;break}default:e=e+52|0}return e|0}function er(e,n){return e=e|0,n=n|0,(p[e+n>>0]|0)!=0|0}function It(e,n){return e=e|0,n=n|0,e=e+132|0,(Fi(n)|0?(t[(dt(e,5,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(dt(e,t[1e3+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function xi(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0;return e=e+132|0,(Fi(n)|0?(u=dt(e,5,948)|0,(t[u+4>>2]|0)!=0):0)?l=4:(u=dt(e,t[1e3+(n<<2)>>2]|0,948)|0,t[u+4>>2]|0?l=4:r=w(0)),(l|0)==4&&(r=w(Sn(u,r))),w(r)}function Sr(e,n,r){return e=e|0,n=n|0,r=w(r),se(e,n)|0?r=w(re(e,n,r)):r=w(-w(xi(e,n,r))),w(r)}function cr(e){return e=w(e),C[W>>2]=e,t[W>>2]|0|0}function Y(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>1073741823)Xn();else{l=cn(n<<2)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<2)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<2)}function Qr(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>2)<<2)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Jr(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&yt(e)}function Ur(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;if(h=e+4|0,D=t[h>>2]|0,l=D-u|0,s=l>>2,e=n+(s<<2)|0,e>>>0>>0){u=D;do t[u>>2]=t[e>>2],e=e+4|0,u=(t[h>>2]|0)+4|0,t[h>>2]=u;while(e>>>0>>0)}s|0&&Iy(D+(0-s<<2)|0,n|0,l|0)|0}function lt(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0;return D=n+4|0,S=t[D>>2]|0,l=t[e>>2]|0,h=r,s=h-l|0,u=S+(0-(s>>2)<<2)|0,t[D>>2]=u,(s|0)>0&&pr(u|0,l|0,s|0)|0,l=e+4|0,s=n+8|0,u=(t[l>>2]|0)-h|0,(u|0)>0&&(pr(t[s>>2]|0,r|0,u|0)|0,t[s>>2]=(t[s>>2]|0)+(u>>>2<<2)),h=t[e>>2]|0,t[e>>2]=t[D>>2],t[D>>2]=h,h=t[l>>2]|0,t[l>>2]=t[s>>2],t[s>>2]=h,h=e+8|0,r=n+12|0,e=t[h>>2]|0,t[h>>2]=t[r>>2],t[r>>2]=e,t[n>>2]=t[D>>2],S|0}function hi(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;if(h=t[n>>2]|0,s=t[r>>2]|0,(h|0)!=(s|0)){l=e+8|0,r=((s+-4-h|0)>>>2)+1|0,e=h,u=t[l>>2]|0;do t[u>>2]=t[e>>2],u=(t[l>>2]|0)+4|0,t[l>>2]=u,e=e+4|0;while((e|0)!=(s|0));t[n>>2]=h+(r<<2)}}function Qi(){_e()}function g0(){var e=0;return e=cn(4)|0,bn(e),e|0}function bn(e){e=e|0,t[e>>2]=p0()|0}function Qu(e){e=e|0,e|0&&(eo(e),yt(e))}function eo(e){e=e|0,K0(t[e>>2]|0)}function po(e,n,r){e=e|0,n=n|0,r=r|0,Uu(t[e>>2]|0,n,r)}function Ju(e,n){e=e|0,n=w(n),Gu(t[e>>2]|0,n)}function bo(e,n){return e=e|0,n=n|0,er(t[e>>2]|0,n)|0}function to(){var e=0;return e=cn(8)|0,Na(e,0),e|0}function Na(e,n){e=e|0,n=n|0,n?n=Hn(t[n>>2]|0)|0:n=or()|0,t[e>>2]=n,t[e+4>>2]=0,Ma(n,e)}function pf(e){e=e|0;var n=0;return n=cn(8)|0,Na(n,e),n|0}function uc(e){e=e|0,e|0&&(ms(e),yt(e))}function ms(e){e=e|0;var n=0;bu(t[e>>2]|0),n=e+4|0,e=t[n>>2]|0,t[n>>2]=0,e|0&&(ia(e),yt(e))}function ia(e){e=e|0,B0(e)}function B0(e){e=e|0,e=t[e>>2]|0,e|0&&Ir(e|0)}function oc(e){return e=e|0,Ls(e)|0}function La(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(ia(n),yt(n)),ao(t[e>>2]|0)}function gd(e,n){e=e|0,n=n|0,ea(t[e>>2]|0,t[n>>2]|0)}function $1(e,n){e=e|0,n=n|0,Z(t[e>>2]|0,n)}function e2(e,n,r){e=e|0,n=n|0,r=+r,lr(t[e>>2]|0,n,w(r))}function ho(e,n,r){e=e|0,n=n|0,r=+r,Qn(t[e>>2]|0,n,w(r))}function Uc(e,n){e=e|0,n=n|0,z(t[e>>2]|0,n)}function Dl(e,n){e=e|0,n=n|0,$(t[e>>2]|0,n)}function el(e,n){e=e|0,n=n|0,me(t[e>>2]|0,n)}function _d(e,n){e=e|0,n=n|0,h0(t[e>>2]|0,n)}function Bs(e,n){e=e|0,n=n|0,Xe(t[e>>2]|0,n)}function wl(e,n){e=e|0,n=n|0,Ni(t[e>>2]|0,n)}function t2(e,n,r){e=e|0,n=n|0,r=+r,Cn(t[e>>2]|0,n,w(r))}function Po(e,n,r){e=e|0,n=n|0,r=+r,Ar(t[e>>2]|0,n,w(r))}function Fa(e,n){e=e|0,n=n|0,Rr(t[e>>2]|0,n)}function ba(e,n){e=e|0,n=n|0,ie(t[e>>2]|0,n)}function Pa(e,n){e=e|0,n=n|0,tt(t[e>>2]|0,n)}function ua(e,n){e=e|0,n=+n,kt(t[e>>2]|0,w(n))}function ys(e,n){e=e|0,n=+n,tn(t[e>>2]|0,w(n))}function gs(e,n){e=e|0,n=+n,Lt(t[e>>2]|0,w(n))}function Ql(e,n){e=e|0,n=+n,bt(t[e>>2]|0,w(n))}function Io(e,n){e=e|0,n=+n,on(t[e>>2]|0,w(n))}function hf(e,n){e=e|0,n=+n,sn(t[e>>2]|0,w(n))}function tl(e,n){e=e|0,n=+n,Yn(t[e>>2]|0,w(n))}function ju(e){e=e|0,yr(t[e>>2]|0)}function Ia(e,n){e=e|0,n=+n,Cu(t[e>>2]|0,w(n))}function Zu(e,n){e=e|0,n=+n,S0(t[e>>2]|0,w(n))}function U0(e){e=e|0,X0(t[e>>2]|0)}function vf(e,n){e=e|0,n=+n,di(t[e>>2]|0,w(n))}function jc(e,n){e=e|0,n=+n,ko(t[e>>2]|0,w(n))}function lc(e,n){e=e|0,n=+n,sf(t[e>>2]|0,w(n))}function Sl(e,n){e=e|0,n=+n,gl(t[e>>2]|0,w(n))}function _s(e,n){e=e|0,n=+n,Mo(t[e>>2]|0,w(n))}function oa(e,n){e=e|0,n=+n,ds(t[e>>2]|0,w(n))}function n2(e,n){e=e|0,n=+n,No(t[e>>2]|0,w(n))}function la(e,n){e=e|0,n=+n,Lo(t[e>>2]|0,w(n))}function sc(e,n){e=e|0,n=+n,Vu(t[e>>2]|0,w(n))}function zc(e,n,r){e=e|0,n=n|0,r=+r,Ft(t[e>>2]|0,n,w(r))}function bi(e,n,r){e=e|0,n=n|0,r=+r,nt(t[e>>2]|0,n,w(r))}function g(e,n,r){e=e|0,n=n|0,r=+r,_t(t[e>>2]|0,n,w(r))}function y(e){return e=e|0,ke(t[e>>2]|0)|0}function A(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;u=m,m=m+16|0,l=u,_r(l,t[n>>2]|0,r),F(e,l),m=u}function F(e,n){e=e|0,n=n|0,I(e,t[n+4>>2]|0,+w(C[n>>2]))}function I(e,n,r){e=e|0,n=n|0,r=+r,t[e>>2]=n,U[e+8>>3]=r}function J(e){return e=e|0,G(t[e>>2]|0)|0}function fe(e){return e=e|0,De(t[e>>2]|0)|0}function mt(e){return e=e|0,xe(t[e>>2]|0)|0}function Ct(e){return e=e|0,Fs(t[e>>2]|0)|0}function Mt(e){return e=e|0,ht(t[e>>2]|0)|0}function Er(e){return e=e|0,B(t[e>>2]|0)|0}function $u(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;u=m,m=m+16|0,l=u,v0(l,t[n>>2]|0,r),F(e,l),m=u}function iu(e){return e=e|0,qe(t[e>>2]|0)|0}function j0(e){return e=e|0,Tt(t[e>>2]|0)|0}function Tl(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,gn(u,t[n>>2]|0),F(e,u),m=r}function e0(e){return e=e|0,+ +w(lf(t[e>>2]|0))}function He(e){return e=e|0,+ +w(Ns(t[e>>2]|0))}function Be(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,nu(u,t[n>>2]|0),F(e,u),m=r}function ut(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,xu(u,t[n>>2]|0),F(e,u),m=r}function Jt(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,Zo(u,t[n>>2]|0),F(e,u),m=r}function jn(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,af(u,t[n>>2]|0),F(e,u),m=r}function ti(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,bs(u,t[n>>2]|0),F(e,u),m=r}function tr(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,ps(u,t[n>>2]|0),F(e,u),m=r}function ii(e){return e=e|0,+ +w(yu(t[e>>2]|0))}function qi(e,n){return e=e|0,n=n|0,+ +w(nn(t[e>>2]|0,n))}function jr(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;u=m,m=m+16|0,l=u,Ze(l,t[n>>2]|0,r),F(e,l),m=u}function gu(e,n,r){e=e|0,n=n|0,r=r|0,ka(t[e>>2]|0,t[n>>2]|0,r)}function Ba(e,n){e=e|0,n=n|0,Tu(t[e>>2]|0,t[n>>2]|0)}function Ua(e){return e=e|0,mu(t[e>>2]|0)|0}function r2(e){return e=e|0,e=ri(t[e>>2]|0)|0,e?e=oc(e)|0:e=0,e|0}function Ed(e,n){return e=e|0,n=n|0,e=yi(t[e>>2]|0,n)|0,e?e=oc(e)|0:e=0,e|0}function Dd(e,n){e=e|0,n=n|0;var r=0,u=0;u=cn(4)|0,mf(u,n),r=e+4|0,n=t[r>>2]|0,t[r>>2]=u,n|0&&(ia(n),yt(n)),$s(t[e>>2]|0,1)}function mf(e,n){e=e|0,n=n|0,rl(e,n)}function i2(e,n,r,u,l,s){e=e|0,n=n|0,r=w(r),u=u|0,l=w(l),s=s|0;var h=0,D=0;h=m,m=m+16|0,D=h,ch(D,Ls(n)|0,+r,u,+l,s),C[e>>2]=w(+U[D>>3]),C[e+4>>2]=w(+U[D+8>>3]),m=h}function ch(e,n,r,u,l,s){e=e|0,n=n|0,r=+r,u=u|0,l=+l,s=s|0;var h=0,D=0,S=0,M=0,O=0;h=m,m=m+32|0,O=h+8|0,M=h+20|0,S=h,D=h+16|0,U[O>>3]=r,t[M>>2]=u,U[S>>3]=l,t[D>>2]=s,qc(e,t[n+4>>2]|0,O,M,S,D),m=h}function qc(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0;h=m,m=m+16|0,D=h,Ta(D),n=vo(n)|0,dh(e,n,+U[r>>3],t[u>>2]|0,+U[l>>3],t[s>>2]|0),Ca(D),m=h}function vo(e){return e=e|0,t[e>>2]|0}function dh(e,n,r,u,l,s){e=e|0,n=n|0,r=+r,u=u|0,l=+l,s=s|0;var h=0;h=mo(ph()|0)|0,r=+Cl(r),u=u2(u)|0,l=+Cl(l),o2(e,Wr(0,h|0,n|0,+r,u|0,+l,u2(s)|0)|0)}function ph(){var e=0;return p[7608]|0||(Wc(9120),e=7608,t[e>>2]=1,t[e+4>>2]=0),9120}function mo(e){return e=e|0,t[e+8>>2]|0}function Cl(e){return e=+e,+ +ja(e)}function u2(e){return e=e|0,s2(e)|0}function o2(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;l=m,m=m+32|0,r=l,u=n,u&1?(wd(r,0),Yi(u|0,r|0)|0,Hc(e,r),Mr(r)):(t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]),m=l}function wd(e,n){e=e|0,n=n|0,l2(e,n),t[e+8>>2]=0,p[e+24>>0]=0}function Hc(e,n){e=e|0,n=n|0,n=n+8|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]}function Mr(e){e=e|0,p[e+24>>0]=0}function l2(e,n){e=e|0,n=n|0,t[e>>2]=n}function s2(e){return e=e|0,e|0}function ja(e){return e=+e,+e}function Wc(e){e=e|0,nl(e,Sd()|0,4)}function Sd(){return 1064}function nl(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=Pt(n|0,r+1|0)|0}function rl(e,n){e=e|0,n=n|0,n=t[n>>2]|0,t[e>>2]=n,Ei(n|0)}function hh(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(ia(n),yt(n)),$s(t[e>>2]|0,0)}function yf(e){e=e|0,Gr(t[e>>2]|0)}function Vc(e){return e=e|0,Yl(t[e>>2]|0)|0}function Td(e,n,r,u){e=e|0,n=+n,r=+r,u=u|0,Kr(t[e>>2]|0,w(n),w(r),u)}function vh(e){return e=e|0,+ +w(pi(t[e>>2]|0))}function il(e){return e=e|0,+ +w(Q0(t[e>>2]|0))}function sa(e){return e=e|0,+ +w(T0(t[e>>2]|0))}function Cd(e){return e=e|0,+ +w(Fo(t[e>>2]|0))}function xd(e){return e=e|0,+ +w(ta(t[e>>2]|0))}function ac(e){return e=e|0,+ +w(Kl(t[e>>2]|0))}function mh(e,n){e=e|0,n=n|0,U[e>>3]=+w(pi(t[n>>2]|0)),U[e+8>>3]=+w(Q0(t[n>>2]|0)),U[e+16>>3]=+w(T0(t[n>>2]|0)),U[e+24>>3]=+w(Fo(t[n>>2]|0)),U[e+32>>3]=+w(ta(t[n>>2]|0)),U[e+40>>3]=+w(Kl(t[n>>2]|0))}function Ad(e,n){return e=e|0,n=n|0,+ +w(Ki(t[e>>2]|0,n))}function a2(e,n){return e=e|0,n=n|0,+ +w(Yr(t[e>>2]|0,n))}function Gc(e,n){return e=e|0,n=n|0,+ +w(fo(t[e>>2]|0,n))}function Yc(){return Oa()|0}function Us(){Rd(),aa(),Kc(),fc(),cc(),f2()}function Rd(){bN(11713,4938,1)}function aa(){eN(10448)}function Kc(){bM(10408)}function fc(){iM(10324)}function cc(){yE(10096)}function f2(){yh(9132)}function yh(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0,Pe=0,Ee=0,ve=0,Qe=0,We=0,st=0,Re=0,Fe=0,Qt=0,Lr=0,Nn=0,mn=0,hr=0,kr=0,On=0,Zi=0,ts=0,ns=0,rs=0,Xs=0,$2=0,ed=0,Za=0,td=0,Oc=0,kc=0,nd=0,rd=0,id=0,si=0,$a=0,ud=0,zf=0,od=0,ld=0,Mc=0,Nc=0,qf=0,Il=0,Aa=0,As=0,ef=0,L1=0,F1=0,Lc=0,b1=0,P1=0,Bl=0,vl=0,tf=0,lu=0,I1=0,is=0,Hf=0,us=0,Wf=0,B1=0,U1=0,Vf=0,Ul=0,nf=0,j1=0,z1=0,q1=0,gr=0,Mu=0,ml=0,os=0,jl=0,Tr=0,Fn=0,rf=0;n=m,m=m+672|0,r=n+656|0,rf=n+648|0,Fn=n+640|0,Tr=n+632|0,jl=n+624|0,os=n+616|0,ml=n+608|0,Mu=n+600|0,gr=n+592|0,q1=n+584|0,z1=n+576|0,j1=n+568|0,nf=n+560|0,Ul=n+552|0,Vf=n+544|0,U1=n+536|0,B1=n+528|0,Wf=n+520|0,us=n+512|0,Hf=n+504|0,is=n+496|0,I1=n+488|0,lu=n+480|0,tf=n+472|0,vl=n+464|0,Bl=n+456|0,P1=n+448|0,b1=n+440|0,Lc=n+432|0,F1=n+424|0,L1=n+416|0,ef=n+408|0,As=n+400|0,Aa=n+392|0,Il=n+384|0,qf=n+376|0,Nc=n+368|0,Mc=n+360|0,ld=n+352|0,od=n+344|0,zf=n+336|0,ud=n+328|0,$a=n+320|0,si=n+312|0,id=n+304|0,rd=n+296|0,nd=n+288|0,kc=n+280|0,Oc=n+272|0,td=n+264|0,Za=n+256|0,ed=n+248|0,$2=n+240|0,Xs=n+232|0,rs=n+224|0,ns=n+216|0,ts=n+208|0,Zi=n+200|0,On=n+192|0,kr=n+184|0,hr=n+176|0,mn=n+168|0,Nn=n+160|0,Lr=n+152|0,Qt=n+144|0,Fe=n+136|0,Re=n+128|0,st=n+120|0,We=n+112|0,Qe=n+104|0,ve=n+96|0,Ee=n+88|0,Pe=n+80|0,K=n+72|0,P=n+64|0,O=n+56|0,M=n+48|0,S=n+40|0,D=n+32|0,h=n+24|0,s=n+16|0,l=n+8|0,u=n,gf(e,3646),Xc(e,3651,2)|0,gh(e,3665,2)|0,vm(e,3682,18)|0,t[rf>>2]=19,t[rf+4>>2]=0,t[r>>2]=t[rf>>2],t[r+4>>2]=t[rf+4>>2],js(e,3690,r)|0,t[Fn>>2]=1,t[Fn+4>>2]=0,t[r>>2]=t[Fn>>2],t[r+4>>2]=t[Fn+4>>2],fa(e,3696,r)|0,t[Tr>>2]=2,t[Tr+4>>2]=0,t[r>>2]=t[Tr>>2],t[r+4>>2]=t[Tr+4>>2],Ji(e,3706,r)|0,t[jl>>2]=1,t[jl+4>>2]=0,t[r>>2]=t[jl>>2],t[r+4>>2]=t[jl+4>>2],O0(e,3722,r)|0,t[os>>2]=2,t[os+4>>2]=0,t[r>>2]=t[os>>2],t[r+4>>2]=t[os+4>>2],O0(e,3734,r)|0,t[ml>>2]=3,t[ml+4>>2]=0,t[r>>2]=t[ml>>2],t[r+4>>2]=t[ml+4>>2],Ji(e,3753,r)|0,t[Mu>>2]=4,t[Mu+4>>2]=0,t[r>>2]=t[Mu>>2],t[r+4>>2]=t[Mu+4>>2],Ji(e,3769,r)|0,t[gr>>2]=5,t[gr+4>>2]=0,t[r>>2]=t[gr>>2],t[r+4>>2]=t[gr+4>>2],Ji(e,3783,r)|0,t[q1>>2]=6,t[q1+4>>2]=0,t[r>>2]=t[q1>>2],t[r+4>>2]=t[q1+4>>2],Ji(e,3796,r)|0,t[z1>>2]=7,t[z1+4>>2]=0,t[r>>2]=t[z1>>2],t[r+4>>2]=t[z1+4>>2],Ji(e,3813,r)|0,t[j1>>2]=8,t[j1+4>>2]=0,t[r>>2]=t[j1>>2],t[r+4>>2]=t[j1+4>>2],Ji(e,3825,r)|0,t[nf>>2]=3,t[nf+4>>2]=0,t[r>>2]=t[nf>>2],t[r+4>>2]=t[nf+4>>2],O0(e,3843,r)|0,t[Ul>>2]=4,t[Ul+4>>2]=0,t[r>>2]=t[Ul>>2],t[r+4>>2]=t[Ul+4>>2],O0(e,3853,r)|0,t[Vf>>2]=9,t[Vf+4>>2]=0,t[r>>2]=t[Vf>>2],t[r+4>>2]=t[Vf+4>>2],Ji(e,3870,r)|0,t[U1>>2]=10,t[U1+4>>2]=0,t[r>>2]=t[U1>>2],t[r+4>>2]=t[U1+4>>2],Ji(e,3884,r)|0,t[B1>>2]=11,t[B1+4>>2]=0,t[r>>2]=t[B1>>2],t[r+4>>2]=t[B1+4>>2],Ji(e,3896,r)|0,t[Wf>>2]=1,t[Wf+4>>2]=0,t[r>>2]=t[Wf>>2],t[r+4>>2]=t[Wf+4>>2],t0(e,3907,r)|0,t[us>>2]=2,t[us+4>>2]=0,t[r>>2]=t[us>>2],t[r+4>>2]=t[us+4>>2],t0(e,3915,r)|0,t[Hf>>2]=3,t[Hf+4>>2]=0,t[r>>2]=t[Hf>>2],t[r+4>>2]=t[Hf+4>>2],t0(e,3928,r)|0,t[is>>2]=4,t[is+4>>2]=0,t[r>>2]=t[is>>2],t[r+4>>2]=t[is+4>>2],t0(e,3948,r)|0,t[I1>>2]=5,t[I1+4>>2]=0,t[r>>2]=t[I1>>2],t[r+4>>2]=t[I1+4>>2],t0(e,3960,r)|0,t[lu>>2]=6,t[lu+4>>2]=0,t[r>>2]=t[lu>>2],t[r+4>>2]=t[lu+4>>2],t0(e,3974,r)|0,t[tf>>2]=7,t[tf+4>>2]=0,t[r>>2]=t[tf>>2],t[r+4>>2]=t[tf+4>>2],t0(e,3983,r)|0,t[vl>>2]=20,t[vl+4>>2]=0,t[r>>2]=t[vl>>2],t[r+4>>2]=t[vl+4>>2],js(e,3999,r)|0,t[Bl>>2]=8,t[Bl+4>>2]=0,t[r>>2]=t[Bl>>2],t[r+4>>2]=t[Bl+4>>2],t0(e,4012,r)|0,t[P1>>2]=9,t[P1+4>>2]=0,t[r>>2]=t[P1>>2],t[r+4>>2]=t[P1+4>>2],t0(e,4022,r)|0,t[b1>>2]=21,t[b1+4>>2]=0,t[r>>2]=t[b1>>2],t[r+4>>2]=t[b1+4>>2],js(e,4039,r)|0,t[Lc>>2]=10,t[Lc+4>>2]=0,t[r>>2]=t[Lc>>2],t[r+4>>2]=t[Lc+4>>2],t0(e,4053,r)|0,t[F1>>2]=11,t[F1+4>>2]=0,t[r>>2]=t[F1>>2],t[r+4>>2]=t[F1+4>>2],t0(e,4065,r)|0,t[L1>>2]=12,t[L1+4>>2]=0,t[r>>2]=t[L1>>2],t[r+4>>2]=t[L1+4>>2],t0(e,4084,r)|0,t[ef>>2]=13,t[ef+4>>2]=0,t[r>>2]=t[ef>>2],t[r+4>>2]=t[ef+4>>2],t0(e,4097,r)|0,t[As>>2]=14,t[As+4>>2]=0,t[r>>2]=t[As>>2],t[r+4>>2]=t[As+4>>2],t0(e,4117,r)|0,t[Aa>>2]=15,t[Aa+4>>2]=0,t[r>>2]=t[Aa>>2],t[r+4>>2]=t[Aa+4>>2],t0(e,4129,r)|0,t[Il>>2]=16,t[Il+4>>2]=0,t[r>>2]=t[Il>>2],t[r+4>>2]=t[Il+4>>2],t0(e,4148,r)|0,t[qf>>2]=17,t[qf+4>>2]=0,t[r>>2]=t[qf>>2],t[r+4>>2]=t[qf+4>>2],t0(e,4161,r)|0,t[Nc>>2]=18,t[Nc+4>>2]=0,t[r>>2]=t[Nc>>2],t[r+4>>2]=t[Nc+4>>2],t0(e,4181,r)|0,t[Mc>>2]=5,t[Mc+4>>2]=0,t[r>>2]=t[Mc>>2],t[r+4>>2]=t[Mc+4>>2],O0(e,4196,r)|0,t[ld>>2]=6,t[ld+4>>2]=0,t[r>>2]=t[ld>>2],t[r+4>>2]=t[ld+4>>2],O0(e,4206,r)|0,t[od>>2]=7,t[od+4>>2]=0,t[r>>2]=t[od>>2],t[r+4>>2]=t[od+4>>2],O0(e,4217,r)|0,t[zf>>2]=3,t[zf+4>>2]=0,t[r>>2]=t[zf>>2],t[r+4>>2]=t[zf+4>>2],Jl(e,4235,r)|0,t[ud>>2]=1,t[ud+4>>2]=0,t[r>>2]=t[ud>>2],t[r+4>>2]=t[ud+4>>2],za(e,4251,r)|0,t[$a>>2]=4,t[$a+4>>2]=0,t[r>>2]=t[$a>>2],t[r+4>>2]=t[$a+4>>2],Jl(e,4263,r)|0,t[si>>2]=5,t[si+4>>2]=0,t[r>>2]=t[si>>2],t[r+4>>2]=t[si+4>>2],Jl(e,4279,r)|0,t[id>>2]=6,t[id+4>>2]=0,t[r>>2]=t[id>>2],t[r+4>>2]=t[id+4>>2],Jl(e,4293,r)|0,t[rd>>2]=7,t[rd+4>>2]=0,t[r>>2]=t[rd>>2],t[r+4>>2]=t[rd+4>>2],Jl(e,4306,r)|0,t[nd>>2]=8,t[nd+4>>2]=0,t[r>>2]=t[nd>>2],t[r+4>>2]=t[nd+4>>2],Jl(e,4323,r)|0,t[kc>>2]=9,t[kc+4>>2]=0,t[r>>2]=t[kc>>2],t[r+4>>2]=t[kc+4>>2],Jl(e,4335,r)|0,t[Oc>>2]=2,t[Oc+4>>2]=0,t[r>>2]=t[Oc>>2],t[r+4>>2]=t[Oc+4>>2],za(e,4353,r)|0,t[td>>2]=12,t[td+4>>2]=0,t[r>>2]=t[td>>2],t[r+4>>2]=t[td+4>>2],no(e,4363,r)|0,t[Za>>2]=1,t[Za+4>>2]=0,t[r>>2]=t[Za>>2],t[r+4>>2]=t[Za+4>>2],ul(e,4376,r)|0,t[ed>>2]=2,t[ed+4>>2]=0,t[r>>2]=t[ed>>2],t[r+4>>2]=t[ed+4>>2],ul(e,4388,r)|0,t[$2>>2]=13,t[$2+4>>2]=0,t[r>>2]=t[$2>>2],t[r+4>>2]=t[$2+4>>2],no(e,4402,r)|0,t[Xs>>2]=14,t[Xs+4>>2]=0,t[r>>2]=t[Xs>>2],t[r+4>>2]=t[Xs+4>>2],no(e,4411,r)|0,t[rs>>2]=15,t[rs+4>>2]=0,t[r>>2]=t[rs>>2],t[r+4>>2]=t[rs+4>>2],no(e,4421,r)|0,t[ns>>2]=16,t[ns+4>>2]=0,t[r>>2]=t[ns>>2],t[r+4>>2]=t[ns+4>>2],no(e,4433,r)|0,t[ts>>2]=17,t[ts+4>>2]=0,t[r>>2]=t[ts>>2],t[r+4>>2]=t[ts+4>>2],no(e,4446,r)|0,t[Zi>>2]=18,t[Zi+4>>2]=0,t[r>>2]=t[Zi>>2],t[r+4>>2]=t[Zi+4>>2],no(e,4458,r)|0,t[On>>2]=3,t[On+4>>2]=0,t[r>>2]=t[On>>2],t[r+4>>2]=t[On+4>>2],ul(e,4471,r)|0,t[kr>>2]=1,t[kr+4>>2]=0,t[r>>2]=t[kr>>2],t[r+4>>2]=t[kr+4>>2],dc(e,4486,r)|0,t[hr>>2]=10,t[hr+4>>2]=0,t[r>>2]=t[hr>>2],t[r+4>>2]=t[hr+4>>2],Jl(e,4496,r)|0,t[mn>>2]=11,t[mn+4>>2]=0,t[r>>2]=t[mn>>2],t[r+4>>2]=t[mn+4>>2],Jl(e,4508,r)|0,t[Nn>>2]=3,t[Nn+4>>2]=0,t[r>>2]=t[Nn>>2],t[r+4>>2]=t[Nn+4>>2],za(e,4519,r)|0,t[Lr>>2]=4,t[Lr+4>>2]=0,t[r>>2]=t[Lr>>2],t[r+4>>2]=t[Lr+4>>2],Od(e,4530,r)|0,t[Qt>>2]=19,t[Qt+4>>2]=0,t[r>>2]=t[Qt>>2],t[r+4>>2]=t[Qt+4>>2],_h(e,4542,r)|0,t[Fe>>2]=12,t[Fe+4>>2]=0,t[r>>2]=t[Fe>>2],t[r+4>>2]=t[Fe+4>>2],_f(e,4554,r)|0,t[Re>>2]=13,t[Re+4>>2]=0,t[r>>2]=t[Re>>2],t[r+4>>2]=t[Re+4>>2],Ef(e,4568,r)|0,t[st>>2]=2,t[st+4>>2]=0,t[r>>2]=t[st>>2],t[r+4>>2]=t[st+4>>2],Qc(e,4578,r)|0,t[We>>2]=20,t[We+4>>2]=0,t[r>>2]=t[We>>2],t[r+4>>2]=t[We+4>>2],xl(e,4587,r)|0,t[Qe>>2]=22,t[Qe+4>>2]=0,t[r>>2]=t[Qe>>2],t[r+4>>2]=t[Qe+4>>2],js(e,4602,r)|0,t[ve>>2]=23,t[ve+4>>2]=0,t[r>>2]=t[ve>>2],t[r+4>>2]=t[ve+4>>2],js(e,4619,r)|0,t[Ee>>2]=14,t[Ee+4>>2]=0,t[r>>2]=t[Ee>>2],t[r+4>>2]=t[Ee+4>>2],Jc(e,4629,r)|0,t[Pe>>2]=1,t[Pe+4>>2]=0,t[r>>2]=t[Pe>>2],t[r+4>>2]=t[Pe+4>>2],ca(e,4637,r)|0,t[K>>2]=4,t[K+4>>2]=0,t[r>>2]=t[K>>2],t[r+4>>2]=t[K+4>>2],ul(e,4653,r)|0,t[P>>2]=5,t[P+4>>2]=0,t[r>>2]=t[P>>2],t[r+4>>2]=t[P+4>>2],ul(e,4669,r)|0,t[O>>2]=6,t[O+4>>2]=0,t[r>>2]=t[O>>2],t[r+4>>2]=t[O+4>>2],ul(e,4686,r)|0,t[M>>2]=7,t[M+4>>2]=0,t[r>>2]=t[M>>2],t[r+4>>2]=t[M+4>>2],ul(e,4701,r)|0,t[S>>2]=8,t[S+4>>2]=0,t[r>>2]=t[S>>2],t[r+4>>2]=t[S+4>>2],ul(e,4719,r)|0,t[D>>2]=9,t[D+4>>2]=0,t[r>>2]=t[D>>2],t[r+4>>2]=t[D+4>>2],ul(e,4736,r)|0,t[h>>2]=21,t[h+4>>2]=0,t[r>>2]=t[h>>2],t[r+4>>2]=t[h+4>>2],c2(e,4754,r)|0,t[s>>2]=2,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],dc(e,4772,r)|0,t[l>>2]=3,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],dc(e,4790,r)|0,t[u>>2]=4,t[u+4>>2]=0,t[r>>2]=t[u>>2],t[r+4>>2]=t[u+4>>2],dc(e,4808,r)|0,m=n}function gf(e,n){e=e|0,n=n|0;var r=0;r=Ja()|0,t[e>>2]=r,jo(r,n),Q2(t[e>>2]|0)}function Xc(e,n,r){return e=e|0,n=n|0,r=r|0,Ot(e,Or(n)|0,r,0),e|0}function gh(e,n,r){return e=e|0,n=n|0,r=r|0,c(e,Or(n)|0,r,0),e|0}function vm(e,n,r){return e=e|0,n=n|0,r=r|0,cE(e,Or(n)|0,r,0),e|0}function js(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],rE(e,n,l),m=u,e|0}function fa(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],bl(e,n,l),m=u,e|0}function Ji(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],d(e,n,l),m=u,e|0}function O0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Tv(e,n,l),m=u,e|0}function t0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],sy(e,n,l),m=u,e|0}function Jl(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],W2(e,n,l),m=u,e|0}function za(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],H2(e,n,l),m=u,e|0}function no(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],k0(e,n,l),m=u,e|0}function ul(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Ep(e,n,l),m=u,e|0}function dc(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Hm(e,n,l),m=u,e|0}function Od(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],n0(e,n,l),m=u,e|0}function _h(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],x2(e,n,l),m=u,e|0}function _f(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Fm(e,n,l),m=u,e|0}function Ef(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Zd(e,n,l),m=u,e|0}function Qc(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],p1(e,n,l),m=u,e|0}function xl(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Ga(e,n,l),m=u,e|0}function Jc(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Id(e,n,l),m=u,e|0}function ca(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Nd(e,n,l),m=u,e|0}function c2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],d2(e,n,l),m=u,e|0}function d2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],da(e,r,l,1),m=u}function Or(e){return e=e|0,e|0}function da(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=kd()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=Zc(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,p2(s,u)|0,u),m=l}function kd(){var e=0,n=0;if(p[7616]|0||(ol(9136),Ht(24,9136,he|0)|0,n=7616,t[n>>2]=1,t[n+4>>2]=0),!(rr(9136)|0)){e=9136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));ol(9136)}return 9136}function Zc(e){return e=e|0,0}function p2(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=kd()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Df(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(wf(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function vi(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,M=0,O=0,P=0,K=0,Pe=0;h=m,m=m+32|0,K=h+24|0,P=h+20|0,S=h+16|0,O=h+12|0,M=h+8|0,D=h+4|0,Pe=h,t[P>>2]=n,t[S>>2]=r,t[O>>2]=u,t[M>>2]=l,t[D>>2]=s,s=e+28|0,t[Pe>>2]=t[s>>2],t[K>>2]=t[Pe>>2],Md(e+24|0,K,P,O,M,S,D)|0,t[s>>2]=t[t[s>>2]>>2],m=h}function Md(e,n,r,u,l,s,h){return e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,h=h|0,e=mm(n)|0,n=cn(24)|0,h2(n+4|0,t[r>>2]|0,t[u>>2]|0,t[l>>2]|0,t[s>>2]|0,t[h>>2]|0),t[n>>2]=t[e>>2],t[e>>2]=n,n|0}function mm(e){return e=e|0,t[e>>2]|0}function h2(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=u,t[e+12>>2]=l,t[e+16>>2]=s}function dn(e,n){return e=e|0,n=n|0,n|e|0}function Df(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function wf(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=ym(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,Sf(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Df(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Eh(e,D),gm(D),m=M;return}}function ym(e){return e=e|0,357913941}function Sf(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Eh(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function gm(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function ol(e){e=e|0,Bo(e)}function $c(e){e=e|0,Un(e+24|0)}function rr(e){return e=e|0,t[e>>2]|0}function Un(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Bo(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,3,n,zn()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function dr(){return 9228}function zn(){return 1140}function ll(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=yo(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=pc(n,u)|0,m=r,n|0}function Pn(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=u,t[e+12>>2]=l,t[e+16>>2]=s}function yo(e){return e=e|0,(t[(kd()|0)+24>>2]|0)+(e*12|0)|0}function pc(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;return l=m,m=m+48|0,u=l,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),N1[r&31](u,e),u=ro(u)|0,m=l,u|0}function ro(e){e=e|0;var n=0,r=0,u=0,l=0;return l=m,m=m+32|0,n=l+12|0,r=l,u=Ou(qa()|0)|0,u?(Zl(n,u),Tf(r,n),hc(e,r),e=Es(n)|0):e=vc(e)|0,m=l,e|0}function qa(){var e=0;return p[7632]|0||(xf(9184),Ht(25,9184,he|0)|0,e=7632,t[e>>2]=1,t[e+4>>2]=0),9184}function Ou(e){return e=e|0,t[e+36>>2]|0}function Zl(e,n){e=e|0,n=n|0,t[e>>2]=n,t[e+4>>2]=e,t[e+8>>2]=0}function Tf(e,n){e=e|0,n=n|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=0}function hc(e,n){e=e|0,n=n|0,io(n,e,e+8|0,e+16|0,e+24|0,e+32|0,e+40|0)|0}function Es(e){return e=e|0,t[(t[e+4>>2]|0)+8>>2]|0}function vc(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0;S=m,m=m+16|0,r=S+4|0,u=S,l=Sa(8)|0,s=l,h=cn(48)|0,D=h,n=D+48|0;do t[D>>2]=t[e>>2],D=D+4|0,e=e+4|0;while((D|0)<(n|0));return n=s+4|0,t[n>>2]=h,D=cn(8)|0,h=t[n>>2]|0,t[u>>2]=0,t[r>>2]=t[u>>2],Dh(D,h,r),t[l>>2]=D,m=S,s|0}function Dh(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=cn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1092,t[r+12>>2]=n,t[e+4>>2]=r}function an(e){e=e|0,Pv(e),yt(e)}function $l(e){e=e|0,e=t[e+12>>2]|0,e|0&&yt(e)}function go(e){e=e|0,yt(e)}function io(e,n,r,u,l,s,h){return e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,h=h|0,s=Hi(t[e>>2]|0,n,r,u,l,s,h)|0,h=e+4|0,t[(t[h>>2]|0)+8>>2]=s,t[(t[h>>2]|0)+8>>2]|0}function Hi(e,n,r,u,l,s,h){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,h=h|0;var D=0,S=0;return D=m,m=m+16|0,S=D,Ta(S),e=vo(e)|0,h=zr(e,+U[n>>3],+U[r>>3],+U[u>>3],+U[l>>3],+U[s>>3],+U[h>>3])|0,Ca(S),m=D,h|0}function zr(e,n,r,u,l,s,h){e=e|0,n=+n,r=+r,u=+u,l=+l,s=+s,h=+h;var D=0;return D=mo(Cf()|0)|0,n=+Cl(n),r=+Cl(r),u=+Cl(u),l=+Cl(l),s=+Cl(s),f0(0,D|0,e|0,+n,+r,+u,+l,+s,+ +Cl(h))|0}function Cf(){var e=0;return p[7624]|0||(_m(9172),e=7624,t[e>>2]=1,t[e+4>>2]=0),9172}function _m(e){e=e|0,nl(e,Al()|0,6)}function Al(){return 1112}function xf(e){e=e|0,Ha(e)}function Af(e){e=e|0,v2(e+24|0),m2(e+16|0)}function v2(e){e=e|0,e1(e)}function m2(e){e=e|0,mc(e)}function mc(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,yt(r);while((n|0)!=0);t[e>>2]=0}function e1(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,yt(r);while((n|0)!=0);t[e>>2]=0}function Ha(e){e=e|0;var n=0;t[e+16>>2]=0,t[e+20>>2]=0,n=e+24|0,t[n>>2]=0,t[e+28>>2]=n,t[e+36>>2]=0,p[e+40>>0]=0,p[e+41>>0]=0}function Nd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],y2(e,r,l,0),m=u}function y2(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=t1()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=Rf(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,n1(s,u)|0,u),m=l}function t1(){var e=0,n=0;if(p[7640]|0||(Rl(9232),Ht(26,9232,he|0)|0,n=7640,t[n>>2]=1,t[n+4>>2]=0),!(rr(9232)|0)){e=9232,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Rl(9232)}return 9232}function Rf(e){return e=e|0,0}function n1(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=t1()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Wa(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(r1(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function Wa(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function r1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Ld(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,g2(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Wa(s,u,r),t[S>>2]=(t[S>>2]|0)+12,yc(e,D),i1(D),m=M;return}}function Ld(e){return e=e|0,357913941}function g2(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function yc(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function i1(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Rl(e){e=e|0,Fd(e)}function pa(e){e=e|0,wh(e+24|0)}function wh(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Fd(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,1,n,bd()|0,3),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function bd(){return 1144}function Sh(e,n,r,u,l){e=e|0,n=n|0,r=+r,u=+u,l=l|0;var s=0,h=0,D=0,S=0;s=m,m=m+16|0,h=s+8|0,D=s,S=_2(e)|0,e=t[S+4>>2]|0,t[D>>2]=t[S>>2],t[D+4>>2]=e,t[h>>2]=t[D>>2],t[h+4>>2]=t[D+4>>2],Th(n,h,r,u,l),m=s}function _2(e){return e=e|0,(t[(t1()|0)+24>>2]|0)+(e*12|0)|0}function Th(e,n,r,u,l){e=e|0,n=n|0,r=+r,u=+u,l=l|0;var s=0,h=0,D=0,S=0,M=0;M=m,m=m+16|0,h=M+2|0,D=M+1|0,S=M,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),Ol(h,r),r=+es(h,r),Ol(D,u),u=+es(D,u),Ds(S,l),S=zs(S,l)|0,Z8[s&1](e,r,u,S),m=M}function Ol(e,n){e=e|0,n=+n}function es(e,n){return e=e|0,n=+n,+ +Ch(n)}function Ds(e,n){e=e|0,n=n|0}function zs(e,n){return e=e|0,n=n|0,Pd(n)|0}function Pd(e){return e=e|0,e|0}function Ch(e){return e=+e,+e}function Id(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Bd(e,r,l,1),m=u}function Bd(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=u1()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=o1(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,xh(s,u)|0,u),m=l}function u1(){var e=0,n=0;if(p[7648]|0||(l1(9268),Ht(27,9268,he|0)|0,n=7648,t[n>>2]=1,t[n+4>>2]=0),!(rr(9268)|0)){e=9268,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));l1(9268)}return 9268}function o1(e){return e=e|0,0}function xh(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=u1()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Ud(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jd(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function Ud(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function jd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=ws(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,Va(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Ud(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Ah(e,D),uu(D),m=M;return}}function ws(e){return e=e|0,357913941}function Va(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Ah(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function uu(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function l1(e){e=e|0,kl(e)}function Rh(e){e=e|0,s1(e+24|0)}function s1(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function kl(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,4,n,Oh()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Oh(){return 1160}function zd(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=kh(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=a1(n,u)|0,m=r,n|0}function kh(e){return e=e|0,(t[(u1()|0)+24>>2]|0)+(e*12|0)|0}function a1(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Ml(Xp[r&31](e)|0)|0}function Ml(e){return e=e|0,e&1|0}function Ga(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],ha(e,r,l,0),m=u}function ha(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=qd()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=Hd(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,Em(s,u)|0,u),m=l}function qd(){var e=0,n=0;if(p[7656]|0||(Lh(9304),Ht(28,9304,he|0)|0,n=7656,t[n>>2]=1,t[n+4>>2]=0),!(rr(9304)|0)){e=9304,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Lh(9304)}return 9304}function Hd(e){return e=e|0,0}function Em(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=qd()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Wd(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Mh(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function Wd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Mh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Nh(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,Vd(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Wd(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Dm(e,D),wm(D),m=M;return}}function Nh(e){return e=e|0,357913941}function Vd(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Dm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function wm(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Lh(e){e=e|0,f1(e)}function Sm(e){e=e|0,Gd(e+24|0)}function Gd(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function f1(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,5,n,c1()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function c1(){return 1164}function d1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=va(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Yd(n,l,r),m=u}function va(e){return e=e|0,(t[(qd()|0)+24>>2]|0)+(e*12|0)|0}function Yd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),qs(l,r),r=Hs(l,r)|0,N1[u&31](e,r),Ws(l),m=s}function qs(e,n){e=e|0,n=n|0,Kd(e,n)}function Hs(e,n){return e=e|0,n=n|0,e|0}function Ws(e){e=e|0,ia(e)}function Kd(e,n){e=e|0,n=n|0,ma(e,n)}function ma(e,n){e=e|0,n=n|0,t[e>>2]=n}function p1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],E2(e,r,l,0),m=u}function E2(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=gc()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=Xd(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,_o(s,u)|0,u),m=l}function gc(){var e=0,n=0;if(p[7664]|0||(Uh(9340),Ht(29,9340,he|0)|0,n=7664,t[n>>2]=1,t[n+4>>2]=0),!(rr(9340)|0)){e=9340,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Uh(9340)}return 9340}function Xd(e){return e=e|0,0}function _o(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=gc()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Fh(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(bh(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function Fh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function bh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Ph(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,Ih(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Fh(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Tm(e,D),Bh(D),m=M;return}}function Ph(e){return e=e|0,357913941}function Ih(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Tm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Bh(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Uh(e){e=e|0,jh(e)}function h1(e){e=e|0,Qd(e+24|0)}function Qd(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function jh(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,4,n,Jd()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Jd(){return 1180}function zh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=Cm(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],r=xm(n,l,r)|0,m=u,r|0}function Cm(e){return e=e|0,(t[(gc()|0)+24>>2]|0)+(e*12|0)|0}function xm(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;return s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Of(l,r),l=kf(l,r)|0,l=D2(ZE[u&15](e,l)|0)|0,m=s,l|0}function Of(e,n){e=e|0,n=n|0}function kf(e,n){return e=e|0,n=n|0,Am(n)|0}function D2(e){return e=e|0,e|0}function Am(e){return e=e|0,e|0}function Zd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],w2(e,r,l,0),m=u}function w2(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=$d()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=qh(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,ep(s,u)|0,u),m=l}function $d(){var e=0,n=0;if(p[7672]|0||(Vh(9376),Ht(30,9376,he|0)|0,n=7672,t[n>>2]=1,t[n+4>>2]=0),!(rr(9376)|0)){e=9376,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Vh(9376)}return 9376}function qh(e){return e=e|0,0}function ep(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=$d()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Hh(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Wh(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function Hh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Wh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=tp(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,Rm(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Hh(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Om(e,D),km(D),m=M;return}}function tp(e){return e=e|0,357913941}function Rm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Om(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function km(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Vh(e){e=e|0,np(e)}function v1(e){e=e|0,Mm(e+24|0)}function Mm(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function np(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,5,n,rp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function rp(){return 1196}function Nm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=Lm(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=Gh(n,u)|0,m=r,n|0}function Lm(e){return e=e|0,(t[($d()|0)+24>>2]|0)+(e*12|0)|0}function Gh(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),D2(Xp[r&31](e)|0)|0}function Fm(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],bm(e,r,l,1),m=u}function bm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=ip()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=up(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,ya(s,u)|0,u),m=l}function ip(){var e=0,n=0;if(p[7680]|0||(lp(9412),Ht(31,9412,he|0)|0,n=7680,t[n>>2]=1,t[n+4>>2]=0),!(rr(9412)|0)){e=9412,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));lp(9412)}return 9412}function up(e){return e=e|0,0}function ya(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=ip()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],m1(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(op(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function m1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function op(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Yh(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,S2(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],m1(s,u,r),t[S>>2]=(t[S>>2]|0)+12,y1(e,D),Kh(D),m=M;return}}function Yh(e){return e=e|0,357913941}function S2(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function y1(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Kh(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function lp(e){e=e|0,Qh(e)}function Xh(e){e=e|0,sp(e+24|0)}function sp(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Qh(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,6,n,Jh()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Jh(){return 1200}function ap(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=T2(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=C2(n,u)|0,m=r,n|0}function T2(e){return e=e|0,(t[(ip()|0)+24>>2]|0)+(e*12|0)|0}function C2(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),z0(Xp[r&31](e)|0)|0}function z0(e){return e=e|0,e|0}function x2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],ga(e,r,l,0),m=u}function ga(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Ya()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=A2(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,R2(s,u)|0,u),m=l}function Ya(){var e=0,n=0;if(p[7688]|0||(dp(9448),Ht(32,9448,he|0)|0,n=7688,t[n>>2]=1,t[n+4>>2]=0),!(rr(9448)|0)){e=9448,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));dp(9448)}return 9448}function A2(e){return e=e|0,0}function R2(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=Ya()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],fp(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(O2(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function fp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function O2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Zh(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,Pm(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],fp(s,u,r),t[S>>2]=(t[S>>2]|0)+12,$h(e,D),cp(D),m=M;return}}function Zh(e){return e=e|0,357913941}function Pm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function $h(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function cp(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function dp(e){e=e|0,Bm(e)}function pp(e){e=e|0,Im(e+24|0)}function Im(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Bm(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,6,n,Eo()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Eo(){return 1204}function k2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=Um(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],sl(n,l,r),m=u}function Um(e){return e=e|0,(t[(Ya()|0)+24>>2]|0)+(e*12|0)|0}function sl(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Jn(l,r),l=Vs(l,r)|0,N1[u&31](e,l),m=s}function Jn(e,n){e=e|0,n=n|0}function Vs(e,n){return e=e|0,n=n|0,al(n)|0}function al(e){return e=e|0,e|0}function n0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],ev(e,r,l,0),m=u}function ev(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Gs()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=hp(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,jm(s,u)|0,u),m=l}function Gs(){var e=0,n=0;if(p[7696]|0||(yp(9484),Ht(33,9484,he|0)|0,n=7696,t[n>>2]=1,t[n+4>>2]=0),!(rr(9484)|0)){e=9484,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));yp(9484)}return 9484}function hp(e){return e=e|0,0}function jm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=Gs()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],tv(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(vp(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function tv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function vp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=zm(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,mp(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],tv(s,u,r),t[S>>2]=(t[S>>2]|0)+12,_c(e,D),Ea(D),m=M;return}}function zm(e){return e=e|0,357913941}function mp(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function _c(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Ea(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function yp(e){e=e|0,zu(e)}function M2(e){e=e|0,ku(e+24|0)}function ku(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function zu(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,1,n,gp()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gp(){return 1212}function _p(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,s=l+8|0,h=l,D=nv(e)|0,e=t[D+4>>2]|0,t[h>>2]=t[D>>2],t[h+4>>2]=e,t[s>>2]=t[h>>2],t[s+4>>2]=t[h+4>>2],qm(n,s,r,u),m=l}function nv(e){return e=e|0,(t[(Gs()|0)+24>>2]|0)+(e*12|0)|0}function qm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;D=m,m=m+16|0,s=D+1|0,h=D,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),Jn(s,r),s=Vs(s,r)|0,Of(h,u),h=kf(h,u)|0,jy[l&15](e,s,h),m=D}function Hm(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Wm(e,r,l,1),m=u}function Wm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=N2()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=rv(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,Ec(s,u)|0,u),m=l}function N2(){var e=0,n=0;if(p[7704]|0||(iv(9520),Ht(34,9520,he|0)|0,n=7704,t[n>>2]=1,t[n+4>>2]=0),!(rr(9520)|0)){e=9520,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));iv(9520)}return 9520}function rv(e){return e=e|0,0}function Ec(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=N2()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],g1(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Vm(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function g1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Vm(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=L2(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,_1(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],g1(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Nl(e,D),Da(D),m=M;return}}function L2(e){return e=e|0,357913941}function _1(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Nl(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Da(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function iv(e){e=e|0,ov(e)}function Gm(e){e=e|0,uv(e+24|0)}function uv(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function ov(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,1,n,Ym()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Ym(){return 1224}function lv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;return l=m,m=m+16|0,s=l+8|0,h=l,D=wa(e)|0,e=t[D+4>>2]|0,t[h>>2]=t[D>>2],t[h+4>>2]=e,t[s>>2]=t[h>>2],t[s+4>>2]=t[h+4>>2],u=+Cr(n,s,r),m=l,+u}function wa(e){return e=e|0,(t[(N2()|0)+24>>2]|0)+(e*12|0)|0}function Cr(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Ds(l,r),l=zs(l,r)|0,h=+ja(+eS[u&7](e,l)),m=s,+h}function Ep(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],fl(e,r,l,1),m=u}function fl(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=cu()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=E1(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,ki(s,u)|0,u),m=l}function cu(){var e=0,n=0;if(p[7712]|0||(wp(9556),Ht(35,9556,he|0)|0,n=7712,t[n>>2]=1,t[n+4>>2]=0),!(rr(9556)|0)){e=9556,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));wp(9556)}return 9556}function E1(e){return e=e|0,0}function ki(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=cu()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Dp(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(F2(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function Dp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function F2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Do(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,Ss(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Dp(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Mf(e,D),b2(D),m=M;return}}function Do(e){return e=e|0,357913941}function Ss(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Mf(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function b2(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function wp(e){e=e|0,Sp(e)}function D1(e){e=e|0,w1(e+24|0)}function w1(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Sp(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,5,n,Zn()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Zn(){return 1232}function cl(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=qn(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],r=+q0(n,l),m=u,+r}function qn(e){return e=e|0,(t[(cu()|0)+24>>2]|0)+(e*12|0)|0}function q0(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),+ +ja(+$8[r&15](e))}function k0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],P2(e,r,l,1),m=u}function P2(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Ll()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=S1(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,Dc(s,u)|0,u),m=l}function Ll(){var e=0,n=0;if(p[7720]|0||(U2(9592),Ht(36,9592,he|0)|0,n=7720,t[n>>2]=1,t[n+4>>2]=0),!(rr(9592)|0)){e=9592,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));U2(9592)}return 9592}function S1(e){return e=e|0,0}function Dc(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=Ll()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],wc(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(I2(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function wc(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function I2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Tp(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,M0(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],wc(s,u,r),t[S>>2]=(t[S>>2]|0)+12,fn(e,D),B2(D),m=M;return}}function Tp(e){return e=e|0,357913941}function M0(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function fn(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function B2(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function U2(e){e=e|0,Cc(e)}function Sc(e){e=e|0,Tc(e+24|0)}function Tc(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Cc(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,7,n,T1()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function T1(){return 1276}function Cp(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=Ka(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=Km(n,u)|0,m=r,n|0}function Ka(e){return e=e|0,(t[(Ll()|0)+24>>2]|0)+(e*12|0)|0}function Km(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;return l=m,m=m+16|0,u=l,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),N1[r&31](u,e),u=xc(u)|0,m=l,u|0}function xc(e){e=e|0;var n=0,r=0,u=0,l=0;return l=m,m=m+32|0,n=l+12|0,r=l,u=Ou(j2()|0)|0,u?(Zl(n,u),Tf(r,n),sv(e,r),e=Es(n)|0):e=C1(e)|0,m=l,e|0}function j2(){var e=0;return p[7736]|0||(Uo(9640),Ht(25,9640,he|0)|0,e=7736,t[e>>2]=1,t[e+4>>2]=0),9640}function sv(e,n){e=e|0,n=n|0,Ac(n,e,e+8|0)|0}function C1(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0;return r=m,m=m+16|0,l=r+4|0,h=r,u=Sa(8)|0,n=u,D=cn(16)|0,t[D>>2]=t[e>>2],t[D+4>>2]=t[e+4>>2],t[D+8>>2]=t[e+8>>2],t[D+12>>2]=t[e+12>>2],s=n+4|0,t[s>>2]=D,e=cn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],Nf(e,s,l),t[u>>2]=e,m=r,n|0}function Nf(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=cn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1244,t[r+12>>2]=n,t[e+4>>2]=r}function Lf(e){e=e|0,Pv(e),yt(e)}function x1(e){e=e|0,e=t[e+12>>2]|0,e|0&&yt(e)}function Fl(e){e=e|0,yt(e)}function Ac(e,n,r){return e=e|0,n=n|0,r=r|0,n=Ff(t[e>>2]|0,n,r)|0,r=e+4|0,t[(t[r>>2]|0)+8>>2]=n,t[(t[r>>2]|0)+8>>2]|0}function Ff(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;return u=m,m=m+16|0,l=u,Ta(l),e=vo(e)|0,r=Xm(e,t[n>>2]|0,+U[r>>3])|0,Ca(l),m=u,r|0}function Xm(e,n,r){e=e|0,n=n|0,r=+r;var u=0;return u=mo(dl()|0)|0,n=u2(n)|0,Pr(0,u|0,e|0,n|0,+ +Cl(r))|0}function dl(){var e=0;return p[7728]|0||(z2(9628),e=7728,t[e>>2]=1,t[e+4>>2]=0),9628}function z2(e){e=e|0,nl(e,q2()|0,2)}function q2(){return 1264}function Uo(e){e=e|0,Ha(e)}function H2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Qm(e,r,l,1),m=u}function Qm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=A1()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=Jm(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,Zm(s,u)|0,u),m=l}function A1(){var e=0,n=0;if(p[7744]|0||(cv(9684),Ht(37,9684,he|0)|0,n=7744,t[n>>2]=1,t[n+4>>2]=0),!(rr(9684)|0)){e=9684,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));cv(9684)}return 9684}function Jm(e){return e=e|0,0}function Zm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=A1()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],av(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):($m(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function av(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function $m(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=fv(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,ey(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],av(s,u,r),t[S>>2]=(t[S>>2]|0)+12,ty(e,D),ny(D),m=M;return}}function fv(e){return e=e|0,357913941}function ey(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function ty(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function ny(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function cv(e){e=e|0,iy(e)}function ry(e){e=e|0,xp(e+24|0)}function xp(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function iy(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,5,n,bf()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function bf(){return 1280}function dv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=pv(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],r=hv(n,l,r)|0,m=u,r|0}function pv(e){return e=e|0,(t[(A1()|0)+24>>2]|0)+(e*12|0)|0}function hv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return h=m,m=m+32|0,l=h,s=h+16|0,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Ds(s,r),s=zs(s,r)|0,jy[u&15](l,e,s),s=xc(l)|0,m=h,s|0}function W2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],V2(e,r,l,1),m=u}function V2(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Ap()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=vv(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,G2(s,u)|0,u),m=l}function Ap(){var e=0,n=0;if(p[7752]|0||(Ev(9720),Ht(38,9720,he|0)|0,n=7752,t[n>>2]=1,t[n+4>>2]=0),!(rr(9720)|0)){e=9720,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ev(9720)}return 9720}function vv(e){return e=e|0,0}function G2(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=Ap()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],mv(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(yv(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function mv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function yv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Rp(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,gv(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],mv(s,u,r),t[S>>2]=(t[S>>2]|0)+12,_v(e,D),uy(D),m=M;return}}function Rp(e){return e=e|0,357913941}function gv(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function _v(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function uy(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Ev(e){e=e|0,Dv(e)}function oy(e){e=e|0,Y2(e+24|0)}function Y2(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Dv(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,8,n,Op()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Op(){return 1288}function ly(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=r0(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=kp(n,u)|0,m=r,n|0}function r0(e){return e=e|0,(t[(Ap()|0)+24>>2]|0)+(e*12|0)|0}function kp(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),s2(Xp[r&31](e)|0)|0}function sy(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],ay(e,r,l,0),m=u}function ay(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Mp()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=Xa(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,Np(s,u)|0,u),m=l}function Mp(){var e=0,n=0;if(p[7760]|0||(bp(9756),Ht(39,9756,he|0)|0,n=7760,t[n>>2]=1,t[n+4>>2]=0),!(rr(9756)|0)){e=9756,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));bp(9756)}return 9756}function Xa(e){return e=e|0,0}function Np(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=Mp()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Lp(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Fp(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function Lp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Fp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=fy(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,cy(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Lp(s,u,r),t[S>>2]=(t[S>>2]|0)+12,wv(e,D),Pf(D),m=M;return}}function fy(e){return e=e|0,357913941}function cy(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function wv(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Pf(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function bp(e){e=e|0,py(e)}function Sv(e){e=e|0,dy(e+24|0)}function dy(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function py(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,8,n,Pp()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Pp(){return 1292}function Ip(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=hy(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],vy(n,l,r),m=u}function hy(e){return e=e|0,(t[(Mp()|0)+24>>2]|0)+(e*12|0)|0}function vy(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Ol(l,r),r=+es(l,r),Q8[u&31](e,r),m=s}function Tv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Bp(e,r,l,0),m=u}function Bp(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Up()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=K2(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,my(s,u)|0,u),m=l}function Up(){var e=0,n=0;if(p[7768]|0||(jp(9792),Ht(40,9792,he|0)|0,n=7768,t[n>>2]=1,t[n+4>>2]=0),!(rr(9792)|0)){e=9792,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));jp(9792)}return 9792}function K2(e){return e=e|0,0}function my(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=Up()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],R1(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(yy(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function R1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function yy(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Cv(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,xv(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],R1(s,u,r),t[S>>2]=(t[S>>2]|0)+12,gy(e,D),If(D),m=M;return}}function Cv(e){return e=e|0,357913941}function xv(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function gy(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function If(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function jp(e){e=e|0,Ey(e)}function Av(e){e=e|0,_y(e+24|0)}function _y(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Ey(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,1,n,zp()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function zp(){return 1300}function Dy(e,n,r,u){e=e|0,n=n|0,r=r|0,u=+u;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,s=l+8|0,h=l,D=Ys(e)|0,e=t[D+4>>2]|0,t[h>>2]=t[D>>2],t[h+4>>2]=e,t[s>>2]=t[h>>2],t[s+4>>2]=t[h+4>>2],wy(n,s,r,u),m=l}function Ys(e){return e=e|0,(t[(Up()|0)+24>>2]|0)+(e*12|0)|0}function wy(e,n,r,u){e=e|0,n=n|0,r=r|0,u=+u;var l=0,s=0,h=0,D=0;D=m,m=m+16|0,s=D+1|0,h=D,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),Ds(s,r),s=zs(s,r)|0,Ol(h,u),u=+es(h,u),iS[l&15](e,s,u),m=D}function d(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],v(e,r,l,0),m=u}function v(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=x()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=b(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,H(s,u)|0,u),m=l}function x(){var e=0,n=0;if(p[7776]|0||(Rt(9828),Ht(41,9828,he|0)|0,n=7776,t[n>>2]=1,t[n+4>>2]=0),!(rr(9828)|0)){e=9828,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Rt(9828)}return 9828}function b(e){return e=e|0,0}function H(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=x()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],ee(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(de(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function ee(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function de(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=ye(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,be(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],ee(s,u,r),t[S>>2]=(t[S>>2]|0)+12,gt(e,D),Dt(D),m=M;return}}function ye(e){return e=e|0,357913941}function be(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function gt(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Dt(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Rt(e){e=e|0,$n(e)}function rn(e){e=e|0,Rn(e+24|0)}function Rn(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function $n(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,7,n,Nr()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Nr(){return 1312}function ir(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=Zr(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],ui(n,l,r),m=u}function Zr(e){return e=e|0,(t[(x()|0)+24>>2]|0)+(e*12|0)|0}function ui(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Ds(l,r),l=zs(l,r)|0,N1[u&31](e,l),m=s}function bl(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Wi(e,r,l,0),m=u}function Wi(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=uo()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=i0(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,Ts(s,u)|0,u),m=l}function uo(){var e=0,n=0;if(p[7784]|0||(r_(9864),Ht(42,9864,he|0)|0,n=7784,t[n>>2]=1,t[n+4>>2]=0),!(rr(9864)|0)){e=9864,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));r_(9864)}return 9864}function i0(e){return e=e|0,0}function Ts(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=uo()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],wo(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Rv(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function wo(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Rv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=X4(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,Sy(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],wo(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Ty(e,D),Qa(D),m=M;return}}function X4(e){return e=e|0,357913941}function Sy(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Ty(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Qa(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function r_(e){e=e|0,Z4(e)}function Q4(e){e=e|0,J4(e+24|0)}function J4(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Z4(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,8,n,$4()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function $4(){return 1320}function Cy(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=eE(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],tE(n,l,r),m=u}function eE(e){return e=e|0,(t[(uo()|0)+24>>2]|0)+(e*12|0)|0}function tE(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),xy(l,r),l=i_(l,r)|0,N1[u&31](e,l),m=s}function xy(e,n){e=e|0,n=n|0}function i_(e,n){return e=e|0,n=n|0,nE(n)|0}function nE(e){return e=e|0,e|0}function rE(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],u_(e,r,l,0),m=u}function u_(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Bf()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=o_(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,iE(s,u)|0,u),m=l}function Bf(){var e=0,n=0;if(p[7792]|0||(Oy(9900),Ht(43,9900,he|0)|0,n=7792,t[n>>2]=1,t[n+4>>2]=0),!(rr(9900)|0)){e=9900,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Oy(9900)}return 9900}function o_(e){return e=e|0,0}function iE(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=Bf()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],qp(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(uE(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function qp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function uE(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Ov(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,Ay(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],qp(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Ry(e,D),oE(D),m=M;return}}function Ov(e){return e=e|0,357913941}function Ay(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Ry(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function oE(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Oy(e){e=e|0,l_(e)}function lE(e){e=e|0,sE(e+24|0)}function sE(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function l_(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,22,n,aE()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function aE(){return 1344}function fE(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;r=m,m=m+16|0,u=r+8|0,l=r,s=s_(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],kv(n,u),m=r}function s_(e){return e=e|0,(t[(Bf()|0)+24>>2]|0)+(e*12|0)|0}function kv(e,n){e=e|0,n=n|0;var r=0;r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),M1[r&127](e)}function cE(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=ky()|0,e=dE(r)|0,vi(s,n,l,e,pE(r,u)|0,u)}function ky(){var e=0,n=0;if(p[7800]|0||(Ny(9936),Ht(44,9936,he|0)|0,n=7800,t[n>>2]=1,t[n+4>>2]=0),!(rr(9936)|0)){e=9936,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ny(9936)}return 9936}function dE(e){return e=e|0,e|0}function pE(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=ky()|0,h=S+24|0,n=dn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(My(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(a_(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function My(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function a_(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=f_(e)|0,u>>>0>>0)li(e);else{S=t[e>>2]|0,O=(t[e+8>>2]|0)-S|0,M=O>>2,c_(l,O>>3>>>0>>1>>>0?M>>>0>>0?h:M:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,My(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,d_(e,l),p_(l),m=D;return}}function f_(e){return e=e|0,536870911}function c_(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)Xn();else{l=cn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function d_(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function p_(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function Ny(e){e=e|0,v_(e)}function h_(e){e=e|0,hE(e+24|0)}function hE(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function v_(e){e=e|0;var n=0;n=dr()|0,Pn(e,1,23,n,Eo()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function vE(e,n){e=e|0,n=n|0,a(t[(mE(e)|0)>>2]|0,n)}function mE(e){return e=e|0,(t[(ky()|0)+24>>2]|0)+(e<<3)|0}function a(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,Jn(u,n),n=Vs(u,n)|0,M1[e&127](n),m=r}function c(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=_()|0,e=T(r)|0,vi(s,n,l,e,R(r,u)|0,u)}function _(){var e=0,n=0;if(p[7808]|0||(pt(9972),Ht(45,9972,he|0)|0,n=7808,t[n>>2]=1,t[n+4>>2]=0),!(rr(9972)|0)){e=9972,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));pt(9972)}return 9972}function T(e){return e=e|0,e|0}function R(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=_()|0,h=S+24|0,n=dn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(j(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(V(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function j(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function V(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=te(e)|0,u>>>0>>0)li(e);else{S=t[e>>2]|0,O=(t[e+8>>2]|0)-S|0,M=O>>2,oe(l,O>>3>>>0>>1>>>0?M>>>0>>0?h:M:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,j(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,Ie(e,l),Ye(l),m=D;return}}function te(e){return e=e|0,536870911}function oe(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)Xn();else{l=cn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function Ie(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Ye(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function pt(e){e=e|0,zt(e)}function Nt(e){e=e|0,Vt(e+24|0)}function Vt(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function zt(e){e=e|0;var n=0;n=dr()|0,Pn(e,1,9,n,vn()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function vn(){return 1348}function xr(e,n){return e=e|0,n=n|0,wi(t[($r(e)|0)>>2]|0,n)|0}function $r(e){return e=e|0,(t[(_()|0)+24>>2]|0)+(e<<3)|0}function wi(e,n){e=e|0,n=n|0;var r=0,u=0;return r=m,m=m+16|0,u=r,N0(u,n),n=Vi(u,n)|0,n=D2(Xp[e&31](n)|0)|0,m=r,n|0}function N0(e,n){e=e|0,n=n|0}function Vi(e,n){return e=e|0,n=n|0,it(n)|0}function it(e){return e=e|0,e|0}function Ot(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=Je()|0,e=Bt(r)|0,vi(s,n,l,e,Mn(r,u)|0,u)}function Je(){var e=0,n=0;if(p[7816]|0||(qr(10008),Ht(46,10008,he|0)|0,n=7816,t[n>>2]=1,t[n+4>>2]=0),!(rr(10008)|0)){e=10008,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));qr(10008)}return 10008}function Bt(e){return e=e|0,e|0}function Mn(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=Je()|0,h=S+24|0,n=dn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(pn(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(Pi(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function pn(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function Pi(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=oi(e)|0,u>>>0>>0)li(e);else{S=t[e>>2]|0,O=(t[e+8>>2]|0)-S|0,M=O>>2,qu(l,O>>3>>>0>>1>>>0?M>>>0>>0?h:M:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,pn(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,ar(e,l),ou(l),m=D;return}}function oi(e){return e=e|0,536870911}function qu(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)Xn();else{l=cn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function ar(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function ou(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function qr(e){e=e|0,H0(e)}function _u(e){e=e|0,_0(e+24|0)}function _0(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function H0(e){e=e|0;var n=0;n=dr()|0,Pn(e,1,15,n,rp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Cs(e){return e=e|0,pl(t[(Hu(e)|0)>>2]|0)|0}function Hu(e){return e=e|0,(t[(Je()|0)+24>>2]|0)+(e<<3)|0}function pl(e){return e=e|0,D2(N_[e&7]()|0)|0}function Ja(){var e=0;return p[7832]|0||(y_(10052),Ht(25,10052,he|0)|0,e=7832,t[e>>2]=1,t[e+4>>2]=0),10052}function jo(e,n){e=e|0,n=n|0,t[e>>2]=xs()|0,t[e+4>>2]=X2()|0,t[e+12>>2]=n,t[e+8>>2]=Uf()|0,t[e+32>>2]=2}function xs(){return 11709}function X2(){return 1188}function Uf(){return O1()|0}function Rc(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Pl(u,896)|0)==512?r|0&&(zo(r),yt(r)):n|0&&(ms(n),yt(n))}function Pl(e,n){return e=e|0,n=n|0,n&e|0}function zo(e){e=e|0,e=t[e+4>>2]|0,e|0&&J2(e)}function O1(){var e=0;return p[7824]|0||(t[2511]=m_()|0,t[2512]=0,e=7824,t[e>>2]=1,t[e+4>>2]=0),10044}function m_(){return 0}function y_(e){e=e|0,Ha(e)}function yE(e){e=e|0;var n=0,r=0,u=0,l=0,s=0;n=m,m=m+32|0,r=n+24|0,s=n+16|0,l=n+8|0,u=n,g_(e,4827),gE(e,4834,3)|0,_E(e,3682,47)|0,t[s>>2]=9,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],Ly(e,4841,r)|0,t[l>>2]=1,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],__(e,4871,r)|0,t[u>>2]=10,t[u+4>>2]=0,t[r>>2]=t[u>>2],t[r+4>>2]=t[u+4>>2],EE(e,4891,r)|0,m=n}function g_(e,n){e=e|0,n=n|0;var r=0;r=Qk()|0,t[e>>2]=r,Jk(r,n),Q2(t[e>>2]|0)}function gE(e,n,r){return e=e|0,n=n|0,r=r|0,Fk(e,Or(n)|0,r,0),e|0}function _E(e,n,r){return e=e|0,n=n|0,r=r|0,_k(e,Or(n)|0,r,0),e|0}function Ly(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],ek(e,n,l),m=u,e|0}function __(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],bO(e,n,l),m=u,e|0}function EE(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],DE(e,n,l),m=u,e|0}function DE(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],wE(e,r,l,1),m=u}function wE(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=SE()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=DO(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,wO(s,u)|0,u),m=l}function SE(){var e=0,n=0;if(p[7840]|0||(L3(10100),Ht(48,10100,he|0)|0,n=7840,t[n>>2]=1,t[n+4>>2]=0),!(rr(10100)|0)){e=10100,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));L3(10100)}return 10100}function DO(e){return e=e|0,0}function wO(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=SE()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],N3(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(SO(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function N3(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function SO(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=TO(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,CO(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],N3(s,u,r),t[S>>2]=(t[S>>2]|0)+12,xO(e,D),AO(D),m=M;return}}function TO(e){return e=e|0,357913941}function CO(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function xO(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function AO(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function L3(e){e=e|0,kO(e)}function RO(e){e=e|0,OO(e+24|0)}function OO(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function kO(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,6,n,MO()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function MO(){return 1364}function NO(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=LO(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],r=FO(n,l,r)|0,m=u,r|0}function LO(e){return e=e|0,(t[(SE()|0)+24>>2]|0)+(e*12|0)|0}function FO(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;return s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Ds(l,r),l=zs(l,r)|0,l=Ml(ZE[u&15](e,l)|0)|0,m=s,l|0}function bO(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],PO(e,r,l,0),m=u}function PO(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=TE()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=IO(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,BO(s,u)|0,u),m=l}function TE(){var e=0,n=0;if(p[7848]|0||(b3(10136),Ht(49,10136,he|0)|0,n=7848,t[n>>2]=1,t[n+4>>2]=0),!(rr(10136)|0)){e=10136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));b3(10136)}return 10136}function IO(e){return e=e|0,0}function BO(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=TE()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],F3(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(UO(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function F3(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function UO(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=jO(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,zO(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],F3(s,u,r),t[S>>2]=(t[S>>2]|0)+12,qO(e,D),HO(D),m=M;return}}function jO(e){return e=e|0,357913941}function zO(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function qO(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function HO(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function b3(e){e=e|0,GO(e)}function WO(e){e=e|0,VO(e+24|0)}function VO(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function GO(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,9,n,YO()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function YO(){return 1372}function KO(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=XO(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],QO(n,l,r),m=u}function XO(e){return e=e|0,(t[(TE()|0)+24>>2]|0)+(e*12|0)|0}function QO(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0,h=St;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),JO(l,r),h=w(ZO(l,r)),X8[u&1](e,h),m=s}function JO(e,n){e=e|0,n=+n}function ZO(e,n){return e=e|0,n=+n,w($O(n))}function $O(e){return e=+e,w(e)}function ek(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Or(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],tk(e,r,l,0),m=u}function tk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,M=0,O=0;l=m,m=m+32|0,s=l+16|0,O=l+8|0,D=l,M=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=CE()|0,t[O>>2]=M,t[O+4>>2]=S,t[s>>2]=t[O>>2],t[s+4>>2]=t[O+4>>2],r=nk(s)|0,t[D>>2]=M,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],vi(h,n,e,r,rk(s,u)|0,u),m=l}function CE(){var e=0,n=0;if(p[7856]|0||(I3(10172),Ht(50,10172,he|0)|0,n=7856,t[n>>2]=1,t[n+4>>2]=0),!(rr(10172)|0)){e=10172,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));I3(10172)}return 10172}function nk(e){return e=e|0,0}function rk(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0;return O=m,m=m+32|0,l=O+24|0,h=O+16|0,D=O,S=O+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,P=CE()|0,M=P+24|0,e=dn(n,4)|0,t[S>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],P3(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(ik(M,D,S),e=t[n>>2]|0),m=O,((e-(t[M>>2]|0)|0)/12|0)+-1|0}function P3(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function ik(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;if(M=m,m=m+48|0,u=M+32|0,h=M+24|0,D=M,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=uk(e)|0,s>>>0>>0)li(e);else{O=t[e>>2]|0,K=((t[e+8>>2]|0)-O|0)/12|0,P=K<<1,ok(D,K>>>0>>1>>>0?P>>>0>>0?l:P:s,((t[S>>2]|0)-O|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],P3(s,u,r),t[S>>2]=(t[S>>2]|0)+12,lk(e,D),sk(D),m=M;return}}function uk(e){return e=e|0,357913941}function ok(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)Xn();else{l=cn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function lk(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function sk(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function I3(e){e=e|0,ck(e)}function ak(e){e=e|0,fk(e+24|0)}function fk(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function ck(e){e=e|0;var n=0;n=dr()|0,Pn(e,2,3,n,dk()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function dk(){return 1380}function pk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,s=l+8|0,h=l,D=hk(e)|0,e=t[D+4>>2]|0,t[h>>2]=t[D>>2],t[h+4>>2]=e,t[s>>2]=t[h>>2],t[s+4>>2]=t[h+4>>2],vk(n,s,r,u),m=l}function hk(e){return e=e|0,(t[(CE()|0)+24>>2]|0)+(e*12|0)|0}function vk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;D=m,m=m+16|0,s=D+1|0,h=D,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),Ds(s,r),s=zs(s,r)|0,mk(h,u),h=yk(h,u)|0,jy[l&15](e,s,h),m=D}function mk(e,n){e=e|0,n=n|0}function yk(e,n){return e=e|0,n=n|0,gk(n)|0}function gk(e){return e=e|0,(e|0)!=0|0}function _k(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=xE()|0,e=Ek(r)|0,vi(s,n,l,e,Dk(r,u)|0,u)}function xE(){var e=0,n=0;if(p[7864]|0||(U3(10208),Ht(51,10208,he|0)|0,n=7864,t[n>>2]=1,t[n+4>>2]=0),!(rr(10208)|0)){e=10208,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));U3(10208)}return 10208}function Ek(e){return e=e|0,e|0}function Dk(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=xE()|0,h=S+24|0,n=dn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(B3(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(wk(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function B3(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function wk(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=Sk(e)|0,u>>>0>>0)li(e);else{S=t[e>>2]|0,O=(t[e+8>>2]|0)-S|0,M=O>>2,Tk(l,O>>3>>>0>>1>>>0?M>>>0>>0?h:M:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,B3(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,Ck(e,l),xk(l),m=D;return}}function Sk(e){return e=e|0,536870911}function Tk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)Xn();else{l=cn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function Ck(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function xk(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function U3(e){e=e|0,Ok(e)}function Ak(e){e=e|0,Rk(e+24|0)}function Rk(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function Ok(e){e=e|0;var n=0;n=dr()|0,Pn(e,1,24,n,kk()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function kk(){return 1392}function Mk(e,n){e=e|0,n=n|0,Lk(t[(Nk(e)|0)>>2]|0,n)}function Nk(e){return e=e|0,(t[(xE()|0)+24>>2]|0)+(e<<3)|0}function Lk(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,N0(u,n),n=Vi(u,n)|0,M1[e&127](n),m=r}function Fk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=AE()|0,e=bk(r)|0,vi(s,n,l,e,Pk(r,u)|0,u)}function AE(){var e=0,n=0;if(p[7872]|0||(z3(10244),Ht(52,10244,he|0)|0,n=7872,t[n>>2]=1,t[n+4>>2]=0),!(rr(10244)|0)){e=10244,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));z3(10244)}return 10244}function bk(e){return e=e|0,e|0}function Pk(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=AE()|0,h=S+24|0,n=dn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(j3(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(Ik(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function j3(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function Ik(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=Bk(e)|0,u>>>0>>0)li(e);else{S=t[e>>2]|0,O=(t[e+8>>2]|0)-S|0,M=O>>2,Uk(l,O>>3>>>0>>1>>>0?M>>>0>>0?h:M:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,j3(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,jk(e,l),zk(l),m=D;return}}function Bk(e){return e=e|0,536870911}function Uk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)Xn();else{l=cn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function jk(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function zk(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function z3(e){e=e|0,Wk(e)}function qk(e){e=e|0,Hk(e+24|0)}function Hk(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function Wk(e){e=e|0;var n=0;n=dr()|0,Pn(e,1,16,n,Vk()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Vk(){return 1400}function Gk(e){return e=e|0,Kk(t[(Yk(e)|0)>>2]|0)|0}function Yk(e){return e=e|0,(t[(AE()|0)+24>>2]|0)+(e<<3)|0}function Kk(e){return e=e|0,Xk(N_[e&7]()|0)|0}function Xk(e){return e=e|0,e|0}function Qk(){var e=0;return p[7880]|0||(rM(10280),Ht(25,10280,he|0)|0,e=7880,t[e>>2]=1,t[e+4>>2]=0),10280}function Jk(e,n){e=e|0,n=n|0,t[e>>2]=Zk()|0,t[e+4>>2]=$k()|0,t[e+12>>2]=n,t[e+8>>2]=eM()|0,t[e+32>>2]=4}function Zk(){return 11711}function $k(){return 1356}function eM(){return O1()|0}function tM(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Pl(u,896)|0)==512?r|0&&(nM(r),yt(r)):n|0&&(eo(n),yt(n))}function nM(e){e=e|0,e=t[e+4>>2]|0,e|0&&J2(e)}function rM(e){e=e|0,Ha(e)}function iM(e){e=e|0,uM(e,4920),oM(e)|0,lM(e)|0}function uM(e,n){e=e|0,n=n|0;var r=0;r=j2()|0,t[e>>2]=r,RM(r,n),Q2(t[e>>2]|0)}function oM(e){e=e|0;var n=0;return n=t[e>>2]|0,Hp(n,gM()|0),e|0}function lM(e){e=e|0;var n=0;return n=t[e>>2]|0,Hp(n,sM()|0),e|0}function sM(){var e=0;return p[7888]|0||(q3(10328),Ht(53,10328,he|0)|0,e=7888,t[e>>2]=1,t[e+4>>2]=0),rr(10328)|0||q3(10328),10328}function Hp(e,n){e=e|0,n=n|0,vi(e,0,n,0,0,0)}function q3(e){e=e|0,cM(e),Wp(e,10)}function aM(e){e=e|0,fM(e+24|0)}function fM(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function cM(e){e=e|0;var n=0;n=dr()|0,Pn(e,5,1,n,vM()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function dM(e,n,r){e=e|0,n=n|0,r=+r,pM(e,n,r)}function Wp(e,n){e=e|0,n=n|0,t[e+20>>2]=n}function pM(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,s=u+8|0,D=u+13|0,l=u,h=u+12|0,Ds(D,n),t[s>>2]=zs(D,n)|0,Ol(h,r),U[l>>3]=+es(h,r),hM(e,s,l),m=u}function hM(e,n,r){e=e|0,n=n|0,r=r|0,I(e+8|0,t[n>>2]|0,+U[r>>3]),p[e+24>>0]=1}function vM(){return 1404}function mM(e,n){return e=e|0,n=+n,yM(e,n)|0}function yM(e,n){e=e|0,n=+n;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return u=m,m=m+16|0,s=u+4|0,h=u+8|0,D=u,l=Sa(8)|0,r=l,S=cn(16)|0,Ds(s,e),e=zs(s,e)|0,Ol(h,n),I(S,e,+es(h,n)),h=r+4|0,t[h>>2]=S,e=cn(8)|0,h=t[h>>2]|0,t[D>>2]=0,t[s>>2]=t[D>>2],Nf(e,h,s),t[l>>2]=e,m=u,r|0}function gM(){var e=0;return p[7896]|0||(H3(10364),Ht(54,10364,he|0)|0,e=7896,t[e>>2]=1,t[e+4>>2]=0),rr(10364)|0||H3(10364),10364}function H3(e){e=e|0,DM(e),Wp(e,55)}function _M(e){e=e|0,EM(e+24|0)}function EM(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function DM(e){e=e|0;var n=0;n=dr()|0,Pn(e,5,4,n,CM()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function wM(e){e=e|0,SM(e)}function SM(e){e=e|0,TM(e)}function TM(e){e=e|0,W3(e+8|0),p[e+24>>0]=1}function W3(e){e=e|0,t[e>>2]=0,U[e+8>>3]=0}function CM(){return 1424}function xM(){return AM()|0}function AM(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0;return n=m,m=m+16|0,l=n+4|0,h=n,r=Sa(8)|0,e=r,u=cn(16)|0,W3(u),s=e+4|0,t[s>>2]=u,u=cn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],Nf(u,s,l),t[r>>2]=u,m=n,e|0}function RM(e,n){e=e|0,n=n|0,t[e>>2]=OM()|0,t[e+4>>2]=kM()|0,t[e+12>>2]=n,t[e+8>>2]=MM()|0,t[e+32>>2]=5}function OM(){return 11710}function kM(){return 1416}function MM(){return E_()|0}function NM(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Pl(u,896)|0)==512?r|0&&(LM(r),yt(r)):n|0&&yt(n)}function LM(e){e=e|0,e=t[e+4>>2]|0,e|0&&J2(e)}function E_(){var e=0;return p[7904]|0||(t[2600]=FM()|0,t[2601]=0,e=7904,t[e>>2]=1,t[e+4>>2]=0),10400}function FM(){return t[357]|0}function bM(e){e=e|0,PM(e,4926),IM(e)|0}function PM(e,n){e=e|0,n=n|0;var r=0;r=qa()|0,t[e>>2]=r,KM(r,n),Q2(t[e>>2]|0)}function IM(e){e=e|0;var n=0;return n=t[e>>2]|0,Hp(n,BM()|0),e|0}function BM(){var e=0;return p[7912]|0||(V3(10412),Ht(56,10412,he|0)|0,e=7912,t[e>>2]=1,t[e+4>>2]=0),rr(10412)|0||V3(10412),10412}function V3(e){e=e|0,zM(e),Wp(e,57)}function UM(e){e=e|0,jM(e+24|0)}function jM(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function zM(e){e=e|0;var n=0;n=dr()|0,Pn(e,5,5,n,VM()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function qM(e){e=e|0,HM(e)}function HM(e){e=e|0,WM(e)}function WM(e){e=e|0;var n=0,r=0;n=e+8|0,r=n+48|0;do t[n>>2]=0,n=n+4|0;while((n|0)<(r|0));p[e+56>>0]=1}function VM(){return 1432}function GM(){return YM()|0}function YM(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0,D=0;h=m,m=m+16|0,e=h+4|0,n=h,r=Sa(8)|0,u=r,l=cn(48)|0,s=l,D=s+48|0;do t[s>>2]=0,s=s+4|0;while((s|0)<(D|0));return s=u+4|0,t[s>>2]=l,D=cn(8)|0,s=t[s>>2]|0,t[n>>2]=0,t[e>>2]=t[n>>2],Dh(D,s,e),t[r>>2]=D,m=h,u|0}function KM(e,n){e=e|0,n=n|0,t[e>>2]=XM()|0,t[e+4>>2]=QM()|0,t[e+12>>2]=n,t[e+8>>2]=JM()|0,t[e+32>>2]=6}function XM(){return 11704}function QM(){return 1436}function JM(){return E_()|0}function ZM(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Pl(u,896)|0)==512?r|0&&($M(r),yt(r)):n|0&&yt(n)}function $M(e){e=e|0,e=t[e+4>>2]|0,e|0&&J2(e)}function eN(e){e=e|0,tN(e,4933),nN(e)|0,rN(e)|0}function tN(e,n){e=e|0,n=n|0;var r=0;r=AN()|0,t[e>>2]=r,RN(r,n),Q2(t[e>>2]|0)}function nN(e){e=e|0;var n=0;return n=t[e>>2]|0,Hp(n,yN()|0),e|0}function rN(e){e=e|0;var n=0;return n=t[e>>2]|0,Hp(n,iN()|0),e|0}function iN(){var e=0;return p[7920]|0||(G3(10452),Ht(58,10452,he|0)|0,e=7920,t[e>>2]=1,t[e+4>>2]=0),rr(10452)|0||G3(10452),10452}function G3(e){e=e|0,lN(e),Wp(e,1)}function uN(e){e=e|0,oN(e+24|0)}function oN(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function lN(e){e=e|0;var n=0;n=dr()|0,Pn(e,5,1,n,cN()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function sN(e,n,r){e=e|0,n=+n,r=+r,aN(e,n,r)}function aN(e,n,r){e=e|0,n=+n,r=+r;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+32|0,s=u+8|0,D=u+17|0,l=u,h=u+16|0,Ol(D,n),U[s>>3]=+es(D,n),Ol(h,r),U[l>>3]=+es(h,r),fN(e,s,l),m=u}function fN(e,n,r){e=e|0,n=n|0,r=r|0,Y3(e+8|0,+U[n>>3],+U[r>>3]),p[e+24>>0]=1}function Y3(e,n,r){e=e|0,n=+n,r=+r,U[e>>3]=n,U[e+8>>3]=r}function cN(){return 1472}function dN(e,n){return e=+e,n=+n,pN(e,n)|0}function pN(e,n){e=+e,n=+n;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return u=m,m=m+16|0,h=u+4|0,D=u+8|0,S=u,l=Sa(8)|0,r=l,s=cn(16)|0,Ol(h,e),e=+es(h,e),Ol(D,n),Y3(s,e,+es(D,n)),D=r+4|0,t[D>>2]=s,s=cn(8)|0,D=t[D>>2]|0,t[S>>2]=0,t[h>>2]=t[S>>2],K3(s,D,h),t[l>>2]=s,m=u,r|0}function K3(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=cn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1452,t[r+12>>2]=n,t[e+4>>2]=r}function hN(e){e=e|0,Pv(e),yt(e)}function vN(e){e=e|0,e=t[e+12>>2]|0,e|0&&yt(e)}function mN(e){e=e|0,yt(e)}function yN(){var e=0;return p[7928]|0||(X3(10488),Ht(59,10488,he|0)|0,e=7928,t[e>>2]=1,t[e+4>>2]=0),rr(10488)|0||X3(10488),10488}function X3(e){e=e|0,EN(e),Wp(e,60)}function gN(e){e=e|0,_N(e+24|0)}function _N(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function EN(e){e=e|0;var n=0;n=dr()|0,Pn(e,5,6,n,TN()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function DN(e){e=e|0,wN(e)}function wN(e){e=e|0,SN(e)}function SN(e){e=e|0,Q3(e+8|0),p[e+24>>0]=1}function Q3(e){e=e|0,t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,t[e+12>>2]=0}function TN(){return 1492}function CN(){return xN()|0}function xN(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0;return n=m,m=m+16|0,l=n+4|0,h=n,r=Sa(8)|0,e=r,u=cn(16)|0,Q3(u),s=e+4|0,t[s>>2]=u,u=cn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],K3(u,s,l),t[r>>2]=u,m=n,e|0}function AN(){var e=0;return p[7936]|0||(FN(10524),Ht(25,10524,he|0)|0,e=7936,t[e>>2]=1,t[e+4>>2]=0),10524}function RN(e,n){e=e|0,n=n|0,t[e>>2]=ON()|0,t[e+4>>2]=kN()|0,t[e+12>>2]=n,t[e+8>>2]=MN()|0,t[e+32>>2]=7}function ON(){return 11700}function kN(){return 1484}function MN(){return E_()|0}function NN(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Pl(u,896)|0)==512?r|0&&(LN(r),yt(r)):n|0&&yt(n)}function LN(e){e=e|0,e=t[e+4>>2]|0,e|0&&J2(e)}function FN(e){e=e|0,Ha(e)}function bN(e,n,r){e=e|0,n=n|0,r=r|0,e=Or(n)|0,n=PN(r)|0,r=IN(r,0)|0,pL(e,n,r,RE()|0,0)}function PN(e){return e=e|0,e|0}function IN(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=RE()|0,h=S+24|0,n=dn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(Z3(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(WN(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function RE(){var e=0,n=0;if(p[7944]|0||(J3(10568),Ht(61,10568,he|0)|0,n=7944,t[n>>2]=1,t[n+4>>2]=0),!(rr(10568)|0)){e=10568,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));J3(10568)}return 10568}function J3(e){e=e|0,jN(e)}function BN(e){e=e|0,UN(e+24|0)}function UN(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function jN(e){e=e|0;var n=0;n=dr()|0,Pn(e,1,17,n,Jh()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function zN(e){return e=e|0,HN(t[(qN(e)|0)>>2]|0)|0}function qN(e){return e=e|0,(t[(RE()|0)+24>>2]|0)+(e<<3)|0}function HN(e){return e=e|0,z0(N_[e&7]()|0)|0}function Z3(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function WN(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=VN(e)|0,u>>>0>>0)li(e);else{S=t[e>>2]|0,O=(t[e+8>>2]|0)-S|0,M=O>>2,GN(l,O>>3>>>0>>1>>>0?M>>>0>>0?h:M:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,Z3(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,YN(e,l),KN(l),m=D;return}}function VN(e){return e=e|0,536870911}function GN(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)Xn();else{l=cn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function YN(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function KN(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function XN(){QN()}function QN(){JN(10604)}function JN(e){e=e|0,ZN(e,4955)}function ZN(e,n){e=e|0,n=n|0;var r=0;r=$N()|0,t[e>>2]=r,eL(r,n),Q2(t[e>>2]|0)}function $N(){var e=0;return p[7952]|0||(aL(10612),Ht(25,10612,he|0)|0,e=7952,t[e>>2]=1,t[e+4>>2]=0),10612}function eL(e,n){e=e|0,n=n|0,t[e>>2]=iL()|0,t[e+4>>2]=uL()|0,t[e+12>>2]=n,t[e+8>>2]=oL()|0,t[e+32>>2]=8}function Q2(e){e=e|0;var n=0,r=0;n=m,m=m+16|0,r=n,Mv()|0,t[r>>2]=e,tL(10608,r),m=n}function Mv(){return p[11714]|0||(t[2652]=0,Ht(62,10608,he|0)|0,p[11714]=1),10608}function tL(e,n){e=e|0,n=n|0;var r=0;r=cn(8)|0,t[r+4>>2]=t[n>>2],t[r>>2]=t[e>>2],t[e>>2]=r}function nL(e){e=e|0,rL(e)}function rL(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,yt(r);while((n|0)!=0);t[e>>2]=0}function iL(){return 11715}function uL(){return 1496}function oL(){return O1()|0}function lL(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Pl(u,896)|0)==512?r|0&&(sL(r),yt(r)):n|0&&yt(n)}function sL(e){e=e|0,e=t[e+4>>2]|0,e|0&&J2(e)}function aL(e){e=e|0,Ha(e)}function fL(e,n){e=e|0,n=n|0;var r=0,u=0;Mv()|0,r=t[2652]|0;e:do if(r|0){for(;u=t[r+4>>2]|0,!(u|0?(L8(OE(u)|0,e)|0)==0:0);)if(r=t[r>>2]|0,!r)break e;cL(u,n)}while(0)}function OE(e){return e=e|0,t[e+12>>2]|0}function cL(e,n){e=e|0,n=n|0;var r=0;e=e+36|0,r=t[e>>2]|0,r|0&&(ia(r),yt(r)),r=cn(4)|0,mf(r,n),t[e>>2]=r}function kE(){return p[11716]|0||(t[2664]=0,Ht(63,10656,he|0)|0,p[11716]=1),10656}function $3(){var e=0;return p[11717]|0?e=t[2665]|0:(dL(),t[2665]=1504,p[11717]=1,e=1504),e|0}function dL(){p[11740]|0||(p[11718]=dn(dn(8,0)|0,0)|0,p[11719]=dn(dn(0,0)|0,0)|0,p[11720]=dn(dn(0,16)|0,0)|0,p[11721]=dn(dn(8,0)|0,0)|0,p[11722]=dn(dn(0,0)|0,0)|0,p[11723]=dn(dn(8,0)|0,0)|0,p[11724]=dn(dn(0,0)|0,0)|0,p[11725]=dn(dn(8,0)|0,0)|0,p[11726]=dn(dn(0,0)|0,0)|0,p[11727]=dn(dn(8,0)|0,0)|0,p[11728]=dn(dn(0,0)|0,0)|0,p[11729]=dn(dn(0,0)|0,32)|0,p[11730]=dn(dn(0,0)|0,32)|0,p[11740]=1)}function e8(){return 1572}function pL(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,M=0,O=0;s=m,m=m+32|0,O=s+16|0,M=s+12|0,S=s+8|0,D=s+4|0,h=s,t[O>>2]=e,t[M>>2]=n,t[S>>2]=r,t[D>>2]=u,t[h>>2]=l,kE()|0,hL(10656,O,M,S,D,h),m=s}function hL(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0;h=cn(24)|0,h2(h+4|0,t[n>>2]|0,t[r>>2]|0,t[u>>2]|0,t[l>>2]|0,t[s>>2]|0),t[h>>2]=t[e>>2],t[e>>2]=h}function t8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0,Pe=0,Ee=0,ve=0,Qe=0,We=0,st=0;if(st=m,m=m+32|0,Ee=st+20|0,ve=st+8|0,Qe=st+4|0,We=st,n=t[n>>2]|0,n|0){Pe=Ee+4|0,S=Ee+8|0,M=ve+4|0,O=ve+8|0,P=ve+8|0,K=Ee+8|0;do{if(h=n+4|0,D=ME(h)|0,D|0){if(l=Fy(D)|0,t[Ee>>2]=0,t[Pe>>2]=0,t[S>>2]=0,u=(by(D)|0)+1|0,vL(Ee,u),u|0)for(;u=u+-1|0,jf(ve,t[l>>2]|0),s=t[Pe>>2]|0,s>>>0<(t[K>>2]|0)>>>0?(t[s>>2]=t[ve>>2],t[Pe>>2]=(t[Pe>>2]|0)+4):NE(Ee,ve),u;)l=l+4|0;u=Py(D)|0,t[ve>>2]=0,t[M>>2]=0,t[O>>2]=0;e:do if(t[u>>2]|0)for(l=0,s=0;;){if((l|0)==(s|0)?mL(ve,u):(t[l>>2]=t[u>>2],t[M>>2]=(t[M>>2]|0)+4),u=u+4|0,!(t[u>>2]|0))break e;l=t[M>>2]|0,s=t[P>>2]|0}while(0);t[Qe>>2]=D_(h)|0,t[We>>2]=rr(D)|0,yL(r,e,Qe,We,Ee,ve),LE(ve),k1(Ee)}n=t[n>>2]|0}while((n|0)!=0)}m=st}function ME(e){return e=e|0,t[e+12>>2]|0}function Fy(e){return e=e|0,t[e+12>>2]|0}function by(e){return e=e|0,t[e+16>>2]|0}function vL(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;l=m,m=m+32|0,r=l,u=t[e>>2]|0,(t[e+8>>2]|0)-u>>2>>>0>>0&&(a8(r,n,(t[e+4>>2]|0)-u>>2,e+8|0),f8(e,r),c8(r)),m=l}function NE(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0;if(h=m,m=m+32|0,r=h,u=e+4|0,l=((t[u>>2]|0)-(t[e>>2]|0)>>2)+1|0,s=s8(e)|0,s>>>0>>0)li(e);else{D=t[e>>2]|0,M=(t[e+8>>2]|0)-D|0,S=M>>1,a8(r,M>>2>>>0>>1>>>0?S>>>0>>0?l:S:s,(t[u>>2]|0)-D>>2,e+8|0),s=r+8|0,t[t[s>>2]>>2]=t[n>>2],t[s>>2]=(t[s>>2]|0)+4,f8(e,r),c8(r),m=h;return}}function Py(e){return e=e|0,t[e+8>>2]|0}function mL(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0;if(h=m,m=m+32|0,r=h,u=e+4|0,l=((t[u>>2]|0)-(t[e>>2]|0)>>2)+1|0,s=l8(e)|0,s>>>0>>0)li(e);else{D=t[e>>2]|0,M=(t[e+8>>2]|0)-D|0,S=M>>1,PL(r,M>>2>>>0>>1>>>0?S>>>0>>0?l:S:s,(t[u>>2]|0)-D>>2,e+8|0),s=r+8|0,t[t[s>>2]>>2]=t[n>>2],t[s>>2]=(t[s>>2]|0)+4,IL(e,r),BL(r),m=h;return}}function D_(e){return e=e|0,t[e>>2]|0}function yL(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,gL(e,n,r,u,l,s)}function LE(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-u|0)>>>2)<<2)),yt(r))}function k1(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-u|0)>>>2)<<2)),yt(r))}function gL(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,M=0,O=0,P=0;h=m,m=m+48|0,O=h+40|0,D=h+32|0,P=h+24|0,S=h+12|0,M=h,Ta(D),e=vo(e)|0,t[P>>2]=t[n>>2],r=t[r>>2]|0,u=t[u>>2]|0,FE(S,l),_L(M,s),t[O>>2]=t[P>>2],EL(e,O,r,u,S,M),LE(M),k1(S),Ca(D),m=h}function FE(e,n){e=e|0,n=n|0;var r=0,u=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,u=(t[r>>2]|0)-(t[n>>2]|0)>>2,u|0&&(FL(e,u),bL(e,t[n>>2]|0,t[r>>2]|0,u))}function _L(e,n){e=e|0,n=n|0;var r=0,u=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,u=(t[r>>2]|0)-(t[n>>2]|0)>>2,u|0&&(NL(e,u),LL(e,t[n>>2]|0,t[r>>2]|0,u))}function EL(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,M=0,O=0,P=0;h=m,m=m+32|0,O=h+28|0,P=h+24|0,D=h+12|0,S=h,M=mo(DL()|0)|0,t[P>>2]=t[n>>2],t[O>>2]=t[P>>2],n=Vp(O)|0,r=n8(r)|0,u=bE(u)|0,t[D>>2]=t[l>>2],O=l+4|0,t[D+4>>2]=t[O>>2],P=l+8|0,t[D+8>>2]=t[P>>2],t[P>>2]=0,t[O>>2]=0,t[l>>2]=0,l=PE(D)|0,t[S>>2]=t[s>>2],O=s+4|0,t[S+4>>2]=t[O>>2],P=s+8|0,t[S+8>>2]=t[P>>2],t[P>>2]=0,t[O>>2]=0,t[s>>2]=0,G0(0,M|0,e|0,n|0,r|0,u|0,l|0,wL(S)|0)|0,LE(S),k1(D),m=h}function DL(){var e=0;return p[7968]|0||(kL(10708),e=7968,t[e>>2]=1,t[e+4>>2]=0),10708}function Vp(e){return e=e|0,i8(e)|0}function n8(e){return e=e|0,r8(e)|0}function bE(e){return e=e|0,z0(e)|0}function PE(e){return e=e|0,TL(e)|0}function wL(e){return e=e|0,SL(e)|0}function SL(e){e=e|0;var n=0,r=0,u=0;if(u=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=u>>2,u=Sa(u+4|0)|0,t[u>>2]=r,r|0){n=0;do t[u+4+(n<<2)>>2]=r8(t[(t[e>>2]|0)+(n<<2)>>2]|0)|0,n=n+1|0;while((n|0)!=(r|0))}return u|0}function r8(e){return e=e|0,e|0}function TL(e){e=e|0;var n=0,r=0,u=0;if(u=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=u>>2,u=Sa(u+4|0)|0,t[u>>2]=r,r|0){n=0;do t[u+4+(n<<2)>>2]=i8((t[e>>2]|0)+(n<<2)|0)|0,n=n+1|0;while((n|0)!=(r|0))}return u|0}function i8(e){e=e|0;var n=0,r=0,u=0,l=0;return l=m,m=m+32|0,n=l+12|0,r=l,u=Ou(u8()|0)|0,u?(Zl(n,u),Tf(r,n),lI(e,r),e=Es(n)|0):e=CL(e)|0,m=l,e|0}function u8(){var e=0;return p[7960]|0||(OL(10664),Ht(25,10664,he|0)|0,e=7960,t[e>>2]=1,t[e+4>>2]=0),10664}function CL(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0;return r=m,m=m+16|0,l=r+4|0,h=r,u=Sa(8)|0,n=u,D=cn(4)|0,t[D>>2]=t[e>>2],s=n+4|0,t[s>>2]=D,e=cn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],o8(e,s,l),t[u>>2]=e,m=r,n|0}function o8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=cn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1656,t[r+12>>2]=n,t[e+4>>2]=r}function xL(e){e=e|0,Pv(e),yt(e)}function AL(e){e=e|0,e=t[e+12>>2]|0,e|0&&yt(e)}function RL(e){e=e|0,yt(e)}function OL(e){e=e|0,Ha(e)}function kL(e){e=e|0,nl(e,ML()|0,5)}function ML(){return 1676}function NL(e,n){e=e|0,n=n|0;var r=0;if((l8(e)|0)>>>0>>0&&li(e),n>>>0>1073741823)Xn();else{r=cn(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function LL(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,u=e+4|0,e=r-n|0,(e|0)>0&&(pr(t[u>>2]|0,n|0,e|0)|0,t[u>>2]=(t[u>>2]|0)+(e>>>2<<2))}function l8(e){return e=e|0,1073741823}function FL(e,n){e=e|0,n=n|0;var r=0;if((s8(e)|0)>>>0>>0&&li(e),n>>>0>1073741823)Xn();else{r=cn(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function bL(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,u=e+4|0,e=r-n|0,(e|0)>0&&(pr(t[u>>2]|0,n|0,e|0)|0,t[u>>2]=(t[u>>2]|0)+(e>>>2<<2))}function s8(e){return e=e|0,1073741823}function PL(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>1073741823)Xn();else{l=cn(n<<2)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<2)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<2)}function IL(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>2)<<2)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function BL(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&yt(e)}function a8(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>1073741823)Xn();else{l=cn(n<<2)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<2)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<2)}function f8(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>2)<<2)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function c8(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&yt(e)}function UL(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0,Pe=0,Ee=0,ve=0;if(ve=m,m=m+32|0,O=ve+20|0,P=ve+12|0,M=ve+16|0,K=ve+4|0,Pe=ve,Ee=ve+8|0,D=$3()|0,s=t[D>>2]|0,h=t[s>>2]|0,h|0)for(S=t[D+8>>2]|0,D=t[D+4>>2]|0;jf(O,h),jL(e,O,D,S),s=s+4|0,h=t[s>>2]|0,h;)S=S+1|0,D=D+1|0;if(s=e8()|0,h=t[s>>2]|0,h|0)do jf(O,h),t[P>>2]=t[s+4>>2],zL(n,O,P),s=s+8|0,h=t[s>>2]|0;while((h|0)!=0);if(s=t[(Mv()|0)>>2]|0,s|0)do n=t[s+4>>2]|0,jf(O,t[(Nv(n)|0)>>2]|0),t[P>>2]=OE(n)|0,qL(r,O,P),s=t[s>>2]|0;while((s|0)!=0);if(jf(M,0),s=kE()|0,t[O>>2]=t[M>>2],t8(O,s,l),s=t[(Mv()|0)>>2]|0,s|0){e=O+4|0,n=O+8|0,r=O+8|0;do{if(S=t[s+4>>2]|0,jf(P,t[(Nv(S)|0)>>2]|0),HL(K,d8(S)|0),h=t[K>>2]|0,h|0){t[O>>2]=0,t[e>>2]=0,t[n>>2]=0;do jf(Pe,t[(Nv(t[h+4>>2]|0)|0)>>2]|0),D=t[e>>2]|0,D>>>0<(t[r>>2]|0)>>>0?(t[D>>2]=t[Pe>>2],t[e>>2]=(t[e>>2]|0)+4):NE(O,Pe),h=t[h>>2]|0;while((h|0)!=0);WL(u,P,O),k1(O)}t[Ee>>2]=t[P>>2],M=p8(S)|0,t[O>>2]=t[Ee>>2],t8(O,M,l),m2(K),s=t[s>>2]|0}while((s|0)!=0)}m=ve}function jL(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,rF(e,n,r,u)}function zL(e,n,r){e=e|0,n=n|0,r=r|0,nF(e,n,r)}function Nv(e){return e=e|0,e|0}function qL(e,n,r){e=e|0,n=n|0,r=r|0,ZL(e,n,r)}function d8(e){return e=e|0,e+16|0}function HL(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;if(s=m,m=m+16|0,l=s+8|0,r=s,t[e>>2]=0,u=t[n>>2]|0,t[l>>2]=u,t[r>>2]=e,r=JL(r)|0,u|0){if(u=cn(12)|0,h=(h8(l)|0)+4|0,e=t[h+4>>2]|0,n=u+4|0,t[n>>2]=t[h>>2],t[n+4>>2]=e,n=t[t[l>>2]>>2]|0,t[l>>2]=n,!n)e=u;else for(n=u;e=cn(12)|0,S=(h8(l)|0)+4|0,D=t[S+4>>2]|0,h=e+4|0,t[h>>2]=t[S>>2],t[h+4>>2]=D,t[n>>2]=e,h=t[t[l>>2]>>2]|0,t[l>>2]=h,h;)n=e;t[e>>2]=t[r>>2],t[r>>2]=u}m=s}function WL(e,n,r){e=e|0,n=n|0,r=r|0,VL(e,n,r)}function p8(e){return e=e|0,e+24|0}function VL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+32|0,h=u+24|0,l=u+16|0,D=u+12|0,s=u,Ta(l),e=vo(e)|0,t[D>>2]=t[n>>2],FE(s,r),t[h>>2]=t[D>>2],YL(e,h,s),k1(s),Ca(l),m=u}function YL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+32|0,h=u+16|0,D=u+12|0,l=u,s=mo(KL()|0)|0,t[D>>2]=t[n>>2],t[h>>2]=t[D>>2],n=Vp(h)|0,t[l>>2]=t[r>>2],h=r+4|0,t[l+4>>2]=t[h>>2],D=r+8|0,t[l+8>>2]=t[D>>2],t[D>>2]=0,t[h>>2]=0,t[r>>2]=0,F0(0,s|0,e|0,n|0,PE(l)|0)|0,k1(l),m=u}function KL(){var e=0;return p[7976]|0||(XL(10720),e=7976,t[e>>2]=1,t[e+4>>2]=0),10720}function XL(e){e=e|0,nl(e,QL()|0,2)}function QL(){return 1732}function JL(e){return e=e|0,t[e>>2]|0}function h8(e){return e=e|0,t[e>>2]|0}function ZL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+32|0,s=u+16|0,l=u+8|0,h=u,Ta(l),e=vo(e)|0,t[h>>2]=t[n>>2],r=t[r>>2]|0,t[s>>2]=t[h>>2],v8(e,s,r),Ca(l),m=u}function v8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,s=u+4|0,h=u,l=mo($L()|0)|0,t[h>>2]=t[n>>2],t[s>>2]=t[h>>2],n=Vp(s)|0,F0(0,l|0,e|0,n|0,n8(r)|0)|0,m=u}function $L(){var e=0;return p[7984]|0||(eF(10732),e=7984,t[e>>2]=1,t[e+4>>2]=0),10732}function eF(e){e=e|0,nl(e,tF()|0,2)}function tF(){return 1744}function nF(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+32|0,s=u+16|0,l=u+8|0,h=u,Ta(l),e=vo(e)|0,t[h>>2]=t[n>>2],r=t[r>>2]|0,t[s>>2]=t[h>>2],v8(e,s,r),Ca(l),m=u}function rF(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+32|0,h=l+16|0,s=l+8|0,D=l,Ta(s),e=vo(e)|0,t[D>>2]=t[n>>2],r=p[r>>0]|0,u=p[u>>0]|0,t[h>>2]=t[D>>2],iF(e,h,r,u),Ca(s),m=l}function iF(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,h=l+4|0,D=l,s=mo(uF()|0)|0,t[D>>2]=t[n>>2],t[h>>2]=t[D>>2],n=Vp(h)|0,r=Lv(r)|0,Bn(0,s|0,e|0,n|0,r|0,Lv(u)|0)|0,m=l}function uF(){var e=0;return p[7992]|0||(lF(10744),e=7992,t[e>>2]=1,t[e+4>>2]=0),10744}function Lv(e){return e=e|0,oF(e)|0}function oF(e){return e=e|0,e&255|0}function lF(e){e=e|0,nl(e,sF()|0,3)}function sF(){return 1756}function aF(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;switch(K=m,m=m+32|0,D=K+8|0,S=K+4|0,M=K+20|0,O=K,ma(e,0),u=oI(n)|0,t[D>>2]=0,P=D+4|0,t[P>>2]=0,t[D+8>>2]=0,u<<24>>24){case 0:{p[M>>0]=0,fF(S,r,M),w_(e,S)|0,B0(S);break}case 8:{P=qE(n)|0,p[M>>0]=8,jf(O,t[P+4>>2]|0),cF(S,r,M,O,P+8|0),w_(e,S)|0,B0(S);break}case 9:{if(s=qE(n)|0,n=t[s+4>>2]|0,n|0)for(h=D+8|0,l=s+12|0;n=n+-1|0,jf(S,t[l>>2]|0),u=t[P>>2]|0,u>>>0<(t[h>>2]|0)>>>0?(t[u>>2]=t[S>>2],t[P>>2]=(t[P>>2]|0)+4):NE(D,S),n;)l=l+4|0;p[M>>0]=9,jf(O,t[s+8>>2]|0),dF(S,r,M,O,D),w_(e,S)|0,B0(S);break}default:P=qE(n)|0,p[M>>0]=u,jf(O,t[P+4>>2]|0),pF(S,r,M,O),w_(e,S)|0,B0(S)}k1(D),m=K}function fF(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;u=m,m=m+16|0,l=u,Ta(l),n=vo(n)|0,xF(e,n,p[r>>0]|0),Ca(l),m=u}function w_(e,n){e=e|0,n=n|0;var r=0;return r=t[e>>2]|0,r|0&&Ir(r|0),t[e>>2]=t[n>>2],t[n>>2]=0,e|0}function cF(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0;s=m,m=m+32|0,D=s+16|0,h=s+8|0,S=s,Ta(h),n=vo(n)|0,r=p[r>>0]|0,t[S>>2]=t[u>>2],l=t[l>>2]|0,t[D>>2]=t[S>>2],wF(e,n,r,D,l),Ca(h),m=s}function dF(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,M=0;s=m,m=m+32|0,S=s+24|0,h=s+16|0,M=s+12|0,D=s,Ta(h),n=vo(n)|0,r=p[r>>0]|0,t[M>>2]=t[u>>2],FE(D,l),t[S>>2]=t[M>>2],gF(e,n,r,S,D),k1(D),Ca(h),m=s}function pF(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+32|0,h=l+16|0,s=l+8|0,D=l,Ta(s),n=vo(n)|0,r=p[r>>0]|0,t[D>>2]=t[u>>2],t[h>>2]=t[D>>2],hF(e,n,r,h),Ca(s),m=l}function hF(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,s=l+4|0,D=l,h=mo(vF()|0)|0,r=Lv(r)|0,t[D>>2]=t[u>>2],t[s>>2]=t[D>>2],S_(e,F0(0,h|0,n|0,r|0,Vp(s)|0)|0),m=l}function vF(){var e=0;return p[8e3]|0||(mF(10756),e=8e3,t[e>>2]=1,t[e+4>>2]=0),10756}function S_(e,n){e=e|0,n=n|0,ma(e,n)}function mF(e){e=e|0,nl(e,yF()|0,2)}function yF(){return 1772}function gF(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,M=0;s=m,m=m+32|0,S=s+16|0,M=s+12|0,h=s,D=mo(_F()|0)|0,r=Lv(r)|0,t[M>>2]=t[u>>2],t[S>>2]=t[M>>2],u=Vp(S)|0,t[h>>2]=t[l>>2],S=l+4|0,t[h+4>>2]=t[S>>2],M=l+8|0,t[h+8>>2]=t[M>>2],t[M>>2]=0,t[S>>2]=0,t[l>>2]=0,S_(e,Bn(0,D|0,n|0,r|0,u|0,PE(h)|0)|0),k1(h),m=s}function _F(){var e=0;return p[8008]|0||(EF(10768),e=8008,t[e>>2]=1,t[e+4>>2]=0),10768}function EF(e){e=e|0,nl(e,DF()|0,3)}function DF(){return 1784}function wF(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0;s=m,m=m+16|0,D=s+4|0,S=s,h=mo(SF()|0)|0,r=Lv(r)|0,t[S>>2]=t[u>>2],t[D>>2]=t[S>>2],u=Vp(D)|0,S_(e,Bn(0,h|0,n|0,r|0,u|0,bE(l)|0)|0),m=s}function SF(){var e=0;return p[8016]|0||(TF(10780),e=8016,t[e>>2]=1,t[e+4>>2]=0),10780}function TF(e){e=e|0,nl(e,CF()|0,3)}function CF(){return 1800}function xF(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=mo(AF()|0)|0,S_(e,ji(0,u|0,n|0,Lv(r)|0)|0)}function AF(){var e=0;return p[8024]|0||(RF(10792),e=8024,t[e>>2]=1,t[e+4>>2]=0),10792}function RF(e){e=e|0,nl(e,OF()|0,1)}function OF(){return 1816}function kF(){MF(),NF(),LF()}function MF(){t[2702]=H8(65536)|0}function NF(){$F(10856)}function LF(){FF(10816)}function FF(e){e=e|0,bF(e,5044),PF(e)|0}function bF(e,n){e=e|0,n=n|0;var r=0;r=u8()|0,t[e>>2]=r,YF(r,n),Q2(t[e>>2]|0)}function PF(e){e=e|0;var n=0;return n=t[e>>2]|0,Hp(n,IF()|0),e|0}function IF(){var e=0;return p[8032]|0||(m8(10820),Ht(64,10820,he|0)|0,e=8032,t[e>>2]=1,t[e+4>>2]=0),rr(10820)|0||m8(10820),10820}function m8(e){e=e|0,jF(e),Wp(e,25)}function BF(e){e=e|0,UF(e+24|0)}function UF(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function jF(e){e=e|0;var n=0;n=dr()|0,Pn(e,5,18,n,WF()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function zF(e,n){e=e|0,n=n|0,qF(e,n)}function qF(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;r=m,m=m+16|0,u=r,l=r+4|0,Of(l,n),t[u>>2]=kf(l,n)|0,HF(e,u),m=r}function HF(e,n){e=e|0,n=n|0,y8(e+4|0,t[n>>2]|0),p[e+8>>0]=1}function y8(e,n){e=e|0,n=n|0,t[e>>2]=n}function WF(){return 1824}function VF(e){return e=e|0,GF(e)|0}function GF(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0;return r=m,m=m+16|0,l=r+4|0,h=r,u=Sa(8)|0,n=u,D=cn(4)|0,Of(l,e),y8(D,kf(l,e)|0),s=n+4|0,t[s>>2]=D,e=cn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],o8(e,s,l),t[u>>2]=e,m=r,n|0}function Sa(e){e=e|0;var n=0,r=0;return e=e+7&-8,(e>>>0<=32768?(n=t[2701]|0,e>>>0<=(65536-n|0)>>>0):0)?(r=(t[2702]|0)+n|0,t[2701]=n+e,e=r):(e=H8(e+8|0)|0,t[e>>2]=t[2703],t[2703]=e,e=e+8|0),e|0}function YF(e,n){e=e|0,n=n|0,t[e>>2]=KF()|0,t[e+4>>2]=XF()|0,t[e+12>>2]=n,t[e+8>>2]=QF()|0,t[e+32>>2]=9}function KF(){return 11744}function XF(){return 1832}function QF(){return E_()|0}function JF(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Pl(u,896)|0)==512?r|0&&(ZF(r),yt(r)):n|0&&yt(n)}function ZF(e){e=e|0,e=t[e+4>>2]|0,e|0&&J2(e)}function $F(e){e=e|0,eb(e,5052),tb(e)|0,nb(e,5058,26)|0,rb(e,5069,1)|0,ib(e,5077,10)|0,ub(e,5087,19)|0,ob(e,5094,27)|0}function eb(e,n){e=e|0,n=n|0;var r=0;r=ZP()|0,t[e>>2]=r,$P(r,n),Q2(t[e>>2]|0)}function tb(e){e=e|0;var n=0;return n=t[e>>2]|0,Hp(n,BP()|0),e|0}function nb(e,n,r){return e=e|0,n=n|0,r=r|0,EP(e,Or(n)|0,r,0),e|0}function rb(e,n,r){return e=e|0,n=n|0,r=r|0,uP(e,Or(n)|0,r,0),e|0}function ib(e,n,r){return e=e|0,n=n|0,r=r|0,Ib(e,Or(n)|0,r,0),e|0}function ub(e,n,r){return e=e|0,n=n|0,r=r|0,wb(e,Or(n)|0,r,0),e|0}function g8(e,n){e=e|0,n=n|0;var r=0,u=0;e:for(;;){for(r=t[2703]|0;;){if((r|0)==(n|0))break e;if(u=t[r>>2]|0,t[2703]=u,!r)r=u;else break}yt(r)}t[2701]=e}function ob(e,n,r){return e=e|0,n=n|0,r=r|0,lb(e,Or(n)|0,r,0),e|0}function lb(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=IE()|0,e=sb(r)|0,vi(s,n,l,e,ab(r,u)|0,u)}function IE(){var e=0,n=0;if(p[8040]|0||(E8(10860),Ht(65,10860,he|0)|0,n=8040,t[n>>2]=1,t[n+4>>2]=0),!(rr(10860)|0)){e=10860,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));E8(10860)}return 10860}function sb(e){return e=e|0,e|0}function ab(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=IE()|0,h=S+24|0,n=dn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(_8(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(fb(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function _8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function fb(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=cb(e)|0,u>>>0>>0)li(e);else{S=t[e>>2]|0,O=(t[e+8>>2]|0)-S|0,M=O>>2,db(l,O>>3>>>0>>1>>>0?M>>>0>>0?h:M:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,_8(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,pb(e,l),hb(l),m=D;return}}function cb(e){return e=e|0,536870911}function db(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)Xn();else{l=cn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function pb(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function hb(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function E8(e){e=e|0,yb(e)}function vb(e){e=e|0,mb(e+24|0)}function mb(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function yb(e){e=e|0;var n=0;n=dr()|0,Pn(e,1,11,n,gb()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gb(){return 1840}function _b(e,n,r){e=e|0,n=n|0,r=r|0,Db(t[(Eb(e)|0)>>2]|0,n,r)}function Eb(e){return e=e|0,(t[(IE()|0)+24>>2]|0)+(e<<3)|0}function Db(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;u=m,m=m+16|0,s=u+1|0,l=u,Of(s,n),n=kf(s,n)|0,Of(l,r),r=kf(l,r)|0,N1[e&31](n,r),m=u}function wb(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=BE()|0,e=Sb(r)|0,vi(s,n,l,e,Tb(r,u)|0,u)}function BE(){var e=0,n=0;if(p[8048]|0||(w8(10896),Ht(66,10896,he|0)|0,n=8048,t[n>>2]=1,t[n+4>>2]=0),!(rr(10896)|0)){e=10896,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));w8(10896)}return 10896}function Sb(e){return e=e|0,e|0}function Tb(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=BE()|0,h=S+24|0,n=dn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(D8(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(Cb(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function D8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function Cb(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=xb(e)|0,u>>>0>>0)li(e);else{S=t[e>>2]|0,O=(t[e+8>>2]|0)-S|0,M=O>>2,Ab(l,O>>3>>>0>>1>>>0?M>>>0>>0?h:M:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,D8(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,Rb(e,l),Ob(l),m=D;return}}function xb(e){return e=e|0,536870911}function Ab(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)Xn();else{l=cn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function Rb(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Ob(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function w8(e){e=e|0,Nb(e)}function kb(e){e=e|0,Mb(e+24|0)}function Mb(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function Nb(e){e=e|0;var n=0;n=dr()|0,Pn(e,1,11,n,Lb()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Lb(){return 1852}function Fb(e,n){return e=e|0,n=n|0,Pb(t[(bb(e)|0)>>2]|0,n)|0}function bb(e){return e=e|0,(t[(BE()|0)+24>>2]|0)+(e<<3)|0}function Pb(e,n){e=e|0,n=n|0;var r=0,u=0;return r=m,m=m+16|0,u=r,Of(u,n),n=kf(u,n)|0,n=z0(Xp[e&31](n)|0)|0,m=r,n|0}function Ib(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=UE()|0,e=Bb(r)|0,vi(s,n,l,e,Ub(r,u)|0,u)}function UE(){var e=0,n=0;if(p[8056]|0||(T8(10932),Ht(67,10932,he|0)|0,n=8056,t[n>>2]=1,t[n+4>>2]=0),!(rr(10932)|0)){e=10932,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));T8(10932)}return 10932}function Bb(e){return e=e|0,e|0}function Ub(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=UE()|0,h=S+24|0,n=dn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(S8(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(jb(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function S8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function jb(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=zb(e)|0,u>>>0>>0)li(e);else{S=t[e>>2]|0,O=(t[e+8>>2]|0)-S|0,M=O>>2,qb(l,O>>3>>>0>>1>>>0?M>>>0>>0?h:M:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,S8(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,Hb(e,l),Wb(l),m=D;return}}function zb(e){return e=e|0,536870911}function qb(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)Xn();else{l=cn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function Hb(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Wb(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function T8(e){e=e|0,Yb(e)}function Vb(e){e=e|0,Gb(e+24|0)}function Gb(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function Yb(e){e=e|0;var n=0;n=dr()|0,Pn(e,1,7,n,Kb()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Kb(){return 1860}function Xb(e,n,r){return e=e|0,n=n|0,r=r|0,Jb(t[(Qb(e)|0)>>2]|0,n,r)|0}function Qb(e){return e=e|0,(t[(UE()|0)+24>>2]|0)+(e<<3)|0}function Jb(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0;return u=m,m=m+32|0,h=u+12|0,s=u+8|0,D=u,S=u+16|0,l=u+4|0,Zb(S,n),$b(D,S,n),qs(l,r),r=Hs(l,r)|0,t[h>>2]=t[D>>2],jy[e&15](s,h,r),r=eP(s)|0,B0(s),Ws(l),m=u,r|0}function Zb(e,n){e=e|0,n=n|0}function $b(e,n,r){e=e|0,n=n|0,r=r|0,tP(e,r)}function eP(e){return e=e|0,vo(e)|0}function tP(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;l=m,m=m+16|0,r=l,u=n,u&1?(nP(r,0),Yi(u|0,r|0)|0,rP(e,r),iP(r)):t[e>>2]=t[n>>2],m=l}function nP(e,n){e=e|0,n=n|0,l2(e,n),t[e+4>>2]=0,p[e+8>>0]=0}function rP(e,n){e=e|0,n=n|0,t[e>>2]=t[n+4>>2]}function iP(e){e=e|0,p[e+8>>0]=0}function uP(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=jE()|0,e=oP(r)|0,vi(s,n,l,e,lP(r,u)|0,u)}function jE(){var e=0,n=0;if(p[8064]|0||(x8(10968),Ht(68,10968,he|0)|0,n=8064,t[n>>2]=1,t[n+4>>2]=0),!(rr(10968)|0)){e=10968,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));x8(10968)}return 10968}function oP(e){return e=e|0,e|0}function lP(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=jE()|0,h=S+24|0,n=dn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(C8(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(sP(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function C8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function sP(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=aP(e)|0,u>>>0>>0)li(e);else{S=t[e>>2]|0,O=(t[e+8>>2]|0)-S|0,M=O>>2,fP(l,O>>3>>>0>>1>>>0?M>>>0>>0?h:M:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,C8(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,cP(e,l),dP(l),m=D;return}}function aP(e){return e=e|0,536870911}function fP(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)Xn();else{l=cn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function cP(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function dP(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function x8(e){e=e|0,vP(e)}function pP(e){e=e|0,hP(e+24|0)}function hP(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function vP(e){e=e|0;var n=0;n=dr()|0,Pn(e,1,1,n,mP()|0,5),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function mP(){return 1872}function yP(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,_P(t[(gP(e)|0)>>2]|0,n,r,u,l,s)}function gP(e){return e=e|0,(t[(jE()|0)+24>>2]|0)+(e<<3)|0}function _P(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,M=0,O=0,P=0;h=m,m=m+32|0,D=h+16|0,S=h+12|0,M=h+8|0,O=h+4|0,P=h,qs(D,n),n=Hs(D,n)|0,qs(S,r),r=Hs(S,r)|0,qs(M,u),u=Hs(M,u)|0,qs(O,l),l=Hs(O,l)|0,qs(P,s),s=Hs(P,s)|0,K8[e&1](n,r,u,l,s),Ws(P),Ws(O),Ws(M),Ws(S),Ws(D),m=h}function EP(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=zE()|0,e=DP(r)|0,vi(s,n,l,e,wP(r,u)|0,u)}function zE(){var e=0,n=0;if(p[8072]|0||(R8(11004),Ht(69,11004,he|0)|0,n=8072,t[n>>2]=1,t[n+4>>2]=0),!(rr(11004)|0)){e=11004,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));R8(11004)}return 11004}function DP(e){return e=e|0,e|0}function wP(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=zE()|0,h=S+24|0,n=dn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(A8(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(SP(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function A8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function SP(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=TP(e)|0,u>>>0>>0)li(e);else{S=t[e>>2]|0,O=(t[e+8>>2]|0)-S|0,M=O>>2,CP(l,O>>3>>>0>>1>>>0?M>>>0>>0?h:M:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,A8(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,xP(e,l),AP(l),m=D;return}}function TP(e){return e=e|0,536870911}function CP(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)Xn();else{l=cn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function xP(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(pr(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function AP(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function R8(e){e=e|0,kP(e)}function RP(e){e=e|0,OP(e+24|0)}function OP(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function kP(e){e=e|0;var n=0;n=dr()|0,Pn(e,1,12,n,MP()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function MP(){return 1896}function NP(e,n,r){e=e|0,n=n|0,r=r|0,FP(t[(LP(e)|0)>>2]|0,n,r)}function LP(e){return e=e|0,(t[(zE()|0)+24>>2]|0)+(e<<3)|0}function FP(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;u=m,m=m+16|0,s=u+4|0,l=u,bP(s,n),n=PP(s,n)|0,qs(l,r),r=Hs(l,r)|0,N1[e&31](n,r),Ws(l),m=u}function bP(e,n){e=e|0,n=n|0}function PP(e,n){return e=e|0,n=n|0,IP(n)|0}function IP(e){return e=e|0,e|0}function BP(){var e=0;return p[8080]|0||(O8(11040),Ht(70,11040,he|0)|0,e=8080,t[e>>2]=1,t[e+4>>2]=0),rr(11040)|0||O8(11040),11040}function O8(e){e=e|0,zP(e),Wp(e,71)}function UP(e){e=e|0,jP(e+24|0)}function jP(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function zP(e){e=e|0;var n=0;n=dr()|0,Pn(e,5,7,n,VP()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function qP(e){e=e|0,HP(e)}function HP(e){e=e|0,WP(e)}function WP(e){e=e|0,p[e+8>>0]=1}function VP(){return 1936}function GP(){return YP()|0}function YP(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0;return n=m,m=m+16|0,l=n+4|0,h=n,r=Sa(8)|0,e=r,s=e+4|0,t[s>>2]=cn(1)|0,u=cn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],KP(u,s,l),t[r>>2]=u,m=n,e|0}function KP(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=cn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1916,t[r+12>>2]=n,t[e+4>>2]=r}function XP(e){e=e|0,Pv(e),yt(e)}function QP(e){e=e|0,e=t[e+12>>2]|0,e|0&&yt(e)}function JP(e){e=e|0,yt(e)}function ZP(){var e=0;return p[8088]|0||(uI(11076),Ht(25,11076,he|0)|0,e=8088,t[e>>2]=1,t[e+4>>2]=0),11076}function $P(e,n){e=e|0,n=n|0,t[e>>2]=eI()|0,t[e+4>>2]=tI()|0,t[e+12>>2]=n,t[e+8>>2]=nI()|0,t[e+32>>2]=10}function eI(){return 11745}function tI(){return 1940}function nI(){return O1()|0}function rI(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Pl(u,896)|0)==512?r|0&&(iI(r),yt(r)):n|0&&yt(n)}function iI(e){e=e|0,e=t[e+4>>2]|0,e|0&&J2(e)}function uI(e){e=e|0,Ha(e)}function jf(e,n){e=e|0,n=n|0,t[e>>2]=n}function qE(e){return e=e|0,t[e>>2]|0}function oI(e){return e=e|0,p[t[e>>2]>>0]|0}function lI(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,t[u>>2]=t[e>>2],sI(n,u)|0,m=r}function sI(e,n){e=e|0,n=n|0;var r=0;return r=aI(t[e>>2]|0,n)|0,n=e+4|0,t[(t[n>>2]|0)+8>>2]=r,t[(t[n>>2]|0)+8>>2]|0}function aI(e,n){e=e|0,n=n|0;var r=0,u=0;return r=m,m=m+16|0,u=r,Ta(u),e=vo(e)|0,n=fI(e,t[n>>2]|0)|0,Ca(u),m=r,n|0}function Ta(e){e=e|0,t[e>>2]=t[2701],t[e+4>>2]=t[2703]}function fI(e,n){e=e|0,n=n|0;var r=0;return r=mo(cI()|0)|0,ji(0,r|0,e|0,bE(n)|0)|0}function Ca(e){e=e|0,g8(t[e>>2]|0,t[e+4>>2]|0)}function cI(){var e=0;return p[8096]|0||(dI(11120),e=8096,t[e>>2]=1,t[e+4>>2]=0),11120}function dI(e){e=e|0,nl(e,pI()|0,1)}function pI(){return 1948}function hI(){vI()}function vI(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0,Pe=0,Ee=0,ve=0;if(Ee=m,m=m+16|0,O=Ee+4|0,P=Ee,Ln(65536,10804,t[2702]|0,10812),r=$3()|0,n=t[r>>2]|0,e=t[n>>2]|0,e|0)for(u=t[r+8>>2]|0,r=t[r+4>>2]|0;Wl(e|0,k[r>>0]|0|0,p[u>>0]|0),n=n+4|0,e=t[n>>2]|0,e;)u=u+1|0,r=r+1|0;if(e=e8()|0,n=t[e>>2]|0,n|0)do xo(n|0,t[e+4>>2]|0),e=e+8|0,n=t[e>>2]|0;while((n|0)!=0);xo(mI()|0,5167),M=Mv()|0,e=t[M>>2]|0;e:do if(e|0){do yI(t[e+4>>2]|0),e=t[e>>2]|0;while((e|0)!=0);if(e=t[M>>2]|0,e|0){S=M;do{for(;l=e,e=t[e>>2]|0,l=t[l+4>>2]|0,!!(gI(l)|0);)if(t[P>>2]=S,t[O>>2]=t[P>>2],_I(M,O)|0,!e)break e;if(EI(l),S=t[S>>2]|0,n=k8(l)|0,s=lo()|0,h=m,m=m+((1*(n<<2)|0)+15&-16)|0,D=m,m=m+((1*(n<<2)|0)+15&-16)|0,n=t[(d8(l)|0)>>2]|0,n|0)for(r=h,u=D;t[r>>2]=t[(Nv(t[n+4>>2]|0)|0)>>2],t[u>>2]=t[n+8>>2],n=t[n>>2]|0,n;)r=r+4|0,u=u+4|0;ve=Nv(l)|0,n=DI(l)|0,r=k8(l)|0,u=wI(l)|0,Ao(ve|0,n|0,h|0,D|0,r|0,u|0,OE(l)|0),ci(s|0)}while((e|0)!=0)}}while(0);if(e=t[(kE()|0)>>2]|0,e|0)do ve=e+4|0,M=ME(ve)|0,l=Py(M)|0,s=Fy(M)|0,h=(by(M)|0)+1|0,D=T_(M)|0,S=M8(ve)|0,M=rr(M)|0,O=D_(ve)|0,P=HE(ve)|0,oo(0,l|0,s|0,h|0,D|0,S|0,M|0,O|0,P|0,WE(ve)|0),e=t[e>>2]|0;while((e|0)!=0);e=t[(Mv()|0)>>2]|0;e:do if(e|0){t:for(;;){if(n=t[e+4>>2]|0,n|0?(K=t[(Nv(n)|0)>>2]|0,Pe=t[(p8(n)|0)>>2]|0,Pe|0):0){r=Pe;do{n=r+4|0,u=ME(n)|0;n:do if(u|0)switch(rr(u)|0){case 0:break t;case 4:case 3:case 2:{D=Py(u)|0,S=Fy(u)|0,M=(by(u)|0)+1|0,O=T_(u)|0,P=rr(u)|0,ve=D_(n)|0,oo(K|0,D|0,S|0,M|0,O|0,0,P|0,ve|0,HE(n)|0,WE(n)|0);break n}case 1:{h=Py(u)|0,D=Fy(u)|0,S=(by(u)|0)+1|0,M=T_(u)|0,O=M8(n)|0,P=rr(u)|0,ve=D_(n)|0,oo(K|0,h|0,D|0,S|0,M|0,O|0,P|0,ve|0,HE(n)|0,WE(n)|0);break n}case 5:{M=Py(u)|0,O=Fy(u)|0,P=(by(u)|0)+1|0,ve=T_(u)|0,oo(K|0,M|0,O|0,P|0,ve|0,SI(u)|0,rr(u)|0,0,0,0);break n}default:break n}while(0);r=t[r>>2]|0}while((r|0)!=0)}if(e=t[e>>2]|0,!e)break e}Xn()}while(0);Ms(),m=Ee}function mI(){return 11703}function yI(e){e=e|0,p[e+40>>0]=0}function gI(e){return e=e|0,(p[e+40>>0]|0)!=0|0}function _I(e,n){return e=e|0,n=n|0,n=TI(n)|0,e=t[n>>2]|0,t[n>>2]=t[e>>2],yt(e),t[n>>2]|0}function EI(e){e=e|0,p[e+40>>0]=1}function k8(e){return e=e|0,t[e+20>>2]|0}function DI(e){return e=e|0,t[e+8>>2]|0}function wI(e){return e=e|0,t[e+32>>2]|0}function T_(e){return e=e|0,t[e+4>>2]|0}function M8(e){return e=e|0,t[e+4>>2]|0}function HE(e){return e=e|0,t[e+8>>2]|0}function WE(e){return e=e|0,t[e+16>>2]|0}function SI(e){return e=e|0,t[e+20>>2]|0}function TI(e){return e=e|0,t[e>>2]|0}function C_(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0,Pe=0,Ee=0,ve=0,Qe=0,We=0,st=0,Re=0,Fe=0,Qt=0;Qt=m,m=m+16|0,K=Qt;do if(e>>>0<245){if(M=e>>>0<11?16:e+11&-8,e=M>>>3,P=t[2783]|0,r=P>>>e,r&3|0)return n=(r&1^1)+e|0,e=11172+(n<<1<<2)|0,r=e+8|0,u=t[r>>2]|0,l=u+8|0,s=t[l>>2]|0,(e|0)==(s|0)?t[2783]=P&~(1<>2]=e,t[r>>2]=s),Fe=n<<3,t[u+4>>2]=Fe|3,Fe=u+Fe+4|0,t[Fe>>2]=t[Fe>>2]|1,Fe=l,m=Qt,Fe|0;if(O=t[2785]|0,M>>>0>O>>>0){if(r|0)return n=2<>>12&16,n=n>>>h,r=n>>>5&8,n=n>>>r,l=n>>>2&4,n=n>>>l,e=n>>>1&2,n=n>>>e,u=n>>>1&1,u=(r|h|l|e|u)+(n>>>u)|0,n=11172+(u<<1<<2)|0,e=n+8|0,l=t[e>>2]|0,h=l+8|0,r=t[h>>2]|0,(n|0)==(r|0)?(e=P&~(1<>2]=n,t[e>>2]=r,e=P),s=(u<<3)-M|0,t[l+4>>2]=M|3,u=l+M|0,t[u+4>>2]=s|1,t[u+s>>2]=s,O|0&&(l=t[2788]|0,n=O>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=l,t[n+12>>2]=l,t[l+8>>2]=n,t[l+12>>2]=r),t[2785]=s,t[2788]=u,Fe=h,m=Qt,Fe|0;if(D=t[2784]|0,D){if(r=(D&0-D)+-1|0,h=r>>>12&16,r=r>>>h,s=r>>>5&8,r=r>>>s,S=r>>>2&4,r=r>>>S,u=r>>>1&2,r=r>>>u,e=r>>>1&1,e=t[11436+((s|h|S|u|e)+(r>>>e)<<2)>>2]|0,r=(t[e+4>>2]&-8)-M|0,u=t[e+16+(((t[e+16>>2]|0)==0&1)<<2)>>2]|0,!u)S=e,s=r;else{do h=(t[u+4>>2]&-8)-M|0,S=h>>>0>>0,r=S?h:r,e=S?u:e,u=t[u+16+(((t[u+16>>2]|0)==0&1)<<2)>>2]|0;while((u|0)!=0);S=e,s=r}if(h=S+M|0,S>>>0>>0){l=t[S+24>>2]|0,n=t[S+12>>2]|0;do if((n|0)==(S|0)){if(e=S+20|0,n=t[e>>2]|0,!n&&(e=S+16|0,n=t[e>>2]|0,!n)){r=0;break}for(;;){if(r=n+20|0,u=t[r>>2]|0,u|0){n=u,e=r;continue}if(r=n+16|0,u=t[r>>2]|0,u)n=u,e=r;else break}t[e>>2]=0,r=n}else r=t[S+8>>2]|0,t[r+12>>2]=n,t[n+8>>2]=r,r=n;while(0);do if(l|0){if(n=t[S+28>>2]|0,e=11436+(n<<2)|0,(S|0)==(t[e>>2]|0)){if(t[e>>2]=r,!r){t[2784]=D&~(1<>2]|0)!=(S|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=l,n=t[S+16>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),n=t[S+20>>2]|0,n|0&&(t[r+20>>2]=n,t[n+24>>2]=r)}while(0);return s>>>0<16?(Fe=s+M|0,t[S+4>>2]=Fe|3,Fe=S+Fe+4|0,t[Fe>>2]=t[Fe>>2]|1):(t[S+4>>2]=M|3,t[h+4>>2]=s|1,t[h+s>>2]=s,O|0&&(u=t[2788]|0,n=O>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=P|n,n=r,e=r+8|0),t[e>>2]=u,t[n+12>>2]=u,t[u+8>>2]=n,t[u+12>>2]=r),t[2785]=s,t[2788]=h),Fe=S+8|0,m=Qt,Fe|0}else P=M}else P=M}else P=M}else if(e>>>0<=4294967231)if(e=e+11|0,M=e&-8,S=t[2784]|0,S){u=0-M|0,e=e>>>8,e?M>>>0>16777215?D=31:(P=(e+1048320|0)>>>16&8,Re=e<>>16&4,Re=Re<>>16&2,D=14-(O|P|D)+(Re<>>15)|0,D=M>>>(D+7|0)&1|D<<1):D=0,r=t[11436+(D<<2)>>2]|0;e:do if(!r)r=0,e=0,Re=57;else for(e=0,h=M<<((D|0)==31?0:25-(D>>>1)|0),s=0;;){if(l=(t[r+4>>2]&-8)-M|0,l>>>0>>0)if(l)e=r,u=l;else{e=r,u=0,l=r,Re=61;break e}if(l=t[r+20>>2]|0,r=t[r+16+(h>>>31<<2)>>2]|0,s=(l|0)==0|(l|0)==(r|0)?s:l,l=(r|0)==0,l){r=s,Re=57;break}else h=h<<((l^1)&1)}while(0);if((Re|0)==57){if((r|0)==0&(e|0)==0){if(e=2<>>12&16,P=P>>>h,s=P>>>5&8,P=P>>>s,D=P>>>2&4,P=P>>>D,O=P>>>1&2,P=P>>>O,r=P>>>1&1,e=0,r=t[11436+((s|h|D|O|r)+(P>>>r)<<2)>>2]|0}r?(l=r,Re=61):(D=e,h=u)}if((Re|0)==61)for(;;)if(Re=0,r=(t[l+4>>2]&-8)-M|0,P=r>>>0>>0,r=P?r:u,e=P?l:e,l=t[l+16+(((t[l+16>>2]|0)==0&1)<<2)>>2]|0,l)u=r,Re=61;else{D=e,h=r;break}if((D|0)!=0?h>>>0<((t[2785]|0)-M|0)>>>0:0){if(s=D+M|0,D>>>0>=s>>>0)return Fe=0,m=Qt,Fe|0;l=t[D+24>>2]|0,n=t[D+12>>2]|0;do if((n|0)==(D|0)){if(e=D+20|0,n=t[e>>2]|0,!n&&(e=D+16|0,n=t[e>>2]|0,!n)){n=0;break}for(;;){if(r=n+20|0,u=t[r>>2]|0,u|0){n=u,e=r;continue}if(r=n+16|0,u=t[r>>2]|0,u)n=u,e=r;else break}t[e>>2]=0}else Fe=t[D+8>>2]|0,t[Fe+12>>2]=n,t[n+8>>2]=Fe;while(0);do if(l){if(e=t[D+28>>2]|0,r=11436+(e<<2)|0,(D|0)==(t[r>>2]|0)){if(t[r>>2]=n,!n){u=S&~(1<>2]|0)!=(D|0)&1)<<2)>>2]=n,!n){u=S;break}t[n+24>>2]=l,e=t[D+16>>2]|0,e|0&&(t[n+16>>2]=e,t[e+24>>2]=n),e=t[D+20>>2]|0,e&&(t[n+20>>2]=e,t[e+24>>2]=n),u=S}else u=S;while(0);do if(h>>>0>=16){if(t[D+4>>2]=M|3,t[s+4>>2]=h|1,t[s+h>>2]=h,n=h>>>3,h>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=s,t[n+12>>2]=s,t[s+8>>2]=n,t[s+12>>2]=r;break}if(n=h>>>8,n?h>>>0>16777215?n=31:(Re=(n+1048320|0)>>>16&8,Fe=n<>>16&4,Fe=Fe<>>16&2,n=14-(st|Re|n)+(Fe<>>15)|0,n=h>>>(n+7|0)&1|n<<1):n=0,r=11436+(n<<2)|0,t[s+28>>2]=n,e=s+16|0,t[e+4>>2]=0,t[e>>2]=0,e=1<>2]=s,t[s+24>>2]=r,t[s+12>>2]=s,t[s+8>>2]=s;break}for(e=h<<((n|0)==31?0:25-(n>>>1)|0),r=t[r>>2]|0;;){if((t[r+4>>2]&-8|0)==(h|0)){Re=97;break}if(u=r+16+(e>>>31<<2)|0,n=t[u>>2]|0,n)e=e<<1,r=n;else{Re=96;break}}if((Re|0)==96){t[u>>2]=s,t[s+24>>2]=r,t[s+12>>2]=s,t[s+8>>2]=s;break}else if((Re|0)==97){Re=r+8|0,Fe=t[Re>>2]|0,t[Fe+12>>2]=s,t[Re>>2]=s,t[s+8>>2]=Fe,t[s+12>>2]=r,t[s+24>>2]=0;break}}else Fe=h+M|0,t[D+4>>2]=Fe|3,Fe=D+Fe+4|0,t[Fe>>2]=t[Fe>>2]|1;while(0);return Fe=D+8|0,m=Qt,Fe|0}else P=M}else P=M;else P=-1;while(0);if(r=t[2785]|0,r>>>0>=P>>>0)return n=r-P|0,e=t[2788]|0,n>>>0>15?(Fe=e+P|0,t[2788]=Fe,t[2785]=n,t[Fe+4>>2]=n|1,t[Fe+n>>2]=n,t[e+4>>2]=P|3):(t[2785]=0,t[2788]=0,t[e+4>>2]=r|3,Fe=e+r+4|0,t[Fe>>2]=t[Fe>>2]|1),Fe=e+8|0,m=Qt,Fe|0;if(h=t[2786]|0,h>>>0>P>>>0)return st=h-P|0,t[2786]=st,Fe=t[2789]|0,Re=Fe+P|0,t[2789]=Re,t[Re+4>>2]=st|1,t[Fe+4>>2]=P|3,Fe=Fe+8|0,m=Qt,Fe|0;if(t[2901]|0?e=t[2903]|0:(t[2903]=4096,t[2902]=4096,t[2904]=-1,t[2905]=-1,t[2906]=0,t[2894]=0,e=K&-16^1431655768,t[K>>2]=e,t[2901]=e,e=4096),D=P+48|0,S=P+47|0,s=e+S|0,l=0-e|0,M=s&l,M>>>0<=P>>>0||(e=t[2893]|0,e|0?(O=t[2891]|0,K=O+M|0,K>>>0<=O>>>0|K>>>0>e>>>0):0))return Fe=0,m=Qt,Fe|0;e:do if(t[2894]&4)n=0,Re=133;else{r=t[2789]|0;t:do if(r){for(u=11580;e=t[u>>2]|0,!(e>>>0<=r>>>0?(ve=u+4|0,(e+(t[ve>>2]|0)|0)>>>0>r>>>0):0);)if(e=t[u+8>>2]|0,e)u=e;else{Re=118;break t}if(n=s-h&l,n>>>0<2147483647)if(e=Z2(n|0)|0,(e|0)==((t[u>>2]|0)+(t[ve>>2]|0)|0)){if((e|0)!=(-1|0)){h=n,s=e,Re=135;break e}}else u=e,Re=126;else n=0}else Re=118;while(0);do if((Re|0)==118)if(r=Z2(0)|0,(r|0)!=(-1|0)?(n=r,Pe=t[2902]|0,Ee=Pe+-1|0,n=((Ee&n|0)==0?0:(Ee+n&0-Pe)-n|0)+M|0,Pe=t[2891]|0,Ee=n+Pe|0,n>>>0>P>>>0&n>>>0<2147483647):0){if(ve=t[2893]|0,ve|0?Ee>>>0<=Pe>>>0|Ee>>>0>ve>>>0:0){n=0;break}if(e=Z2(n|0)|0,(e|0)==(r|0)){h=n,s=r,Re=135;break e}else u=e,Re=126}else n=0;while(0);do if((Re|0)==126){if(r=0-n|0,!(D>>>0>n>>>0&(n>>>0<2147483647&(u|0)!=(-1|0))))if((u|0)==(-1|0)){n=0;break}else{h=n,s=u,Re=135;break e}if(e=t[2903]|0,e=S-n+e&0-e,e>>>0>=2147483647){h=n,s=u,Re=135;break e}if((Z2(e|0)|0)==(-1|0)){Z2(r|0)|0,n=0;break}else{h=e+n|0,s=u,Re=135;break e}}while(0);t[2894]=t[2894]|4,Re=133}while(0);if((((Re|0)==133?M>>>0<2147483647:0)?(st=Z2(M|0)|0,ve=Z2(0)|0,Qe=ve-st|0,We=Qe>>>0>(P+40|0)>>>0,!((st|0)==(-1|0)|We^1|st>>>0>>0&((st|0)!=(-1|0)&(ve|0)!=(-1|0))^1)):0)&&(h=We?Qe:n,s=st,Re=135),(Re|0)==135){n=(t[2891]|0)+h|0,t[2891]=n,n>>>0>(t[2892]|0)>>>0&&(t[2892]=n),S=t[2789]|0;do if(S){for(n=11580;;){if(e=t[n>>2]|0,r=n+4|0,u=t[r>>2]|0,(s|0)==(e+u|0)){Re=145;break}if(l=t[n+8>>2]|0,l)n=l;else break}if(((Re|0)==145?(t[n+12>>2]&8|0)==0:0)?S>>>0>>0&S>>>0>=e>>>0:0){t[r>>2]=u+h,Fe=S+8|0,Fe=(Fe&7|0)==0?0:0-Fe&7,Re=S+Fe|0,Fe=(t[2786]|0)+(h-Fe)|0,t[2789]=Re,t[2786]=Fe,t[Re+4>>2]=Fe|1,t[Re+Fe+4>>2]=40,t[2790]=t[2905];break}for(s>>>0<(t[2787]|0)>>>0&&(t[2787]=s),r=s+h|0,n=11580;;){if((t[n>>2]|0)==(r|0)){Re=153;break}if(e=t[n+8>>2]|0,e)n=e;else break}if((Re|0)==153?(t[n+12>>2]&8|0)==0:0){t[n>>2]=s,O=n+4|0,t[O>>2]=(t[O>>2]|0)+h,O=s+8|0,O=s+((O&7|0)==0?0:0-O&7)|0,n=r+8|0,n=r+((n&7|0)==0?0:0-n&7)|0,M=O+P|0,D=n-O-P|0,t[O+4>>2]=P|3;do if((n|0)!=(S|0)){if((n|0)==(t[2788]|0)){Fe=(t[2785]|0)+D|0,t[2785]=Fe,t[2788]=M,t[M+4>>2]=Fe|1,t[M+Fe>>2]=Fe;break}if(e=t[n+4>>2]|0,(e&3|0)==1){h=e&-8,u=e>>>3;e:do if(e>>>0<256)if(e=t[n+8>>2]|0,r=t[n+12>>2]|0,(r|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=r,t[r+8>>2]=e;break}else{s=t[n+24>>2]|0,e=t[n+12>>2]|0;do if((e|0)==(n|0)){if(u=n+16|0,r=u+4|0,e=t[r>>2]|0,!e)if(e=t[u>>2]|0,e)r=u;else{e=0;break}for(;;){if(u=e+20|0,l=t[u>>2]|0,l|0){e=l,r=u;continue}if(u=e+16|0,l=t[u>>2]|0,l)e=l,r=u;else break}t[r>>2]=0}else Fe=t[n+8>>2]|0,t[Fe+12>>2]=e,t[e+8>>2]=Fe;while(0);if(!s)break;r=t[n+28>>2]|0,u=11436+(r<<2)|0;do if((n|0)!=(t[u>>2]|0)){if(t[s+16+(((t[s+16>>2]|0)!=(n|0)&1)<<2)>>2]=e,!e)break e}else{if(t[u>>2]=e,e|0)break;t[2784]=t[2784]&~(1<>2]=s,r=n+16|0,u=t[r>>2]|0,u|0&&(t[e+16>>2]=u,t[u+24>>2]=e),r=t[r+4>>2]|0,!r)break;t[e+20>>2]=r,t[r+24>>2]=e}while(0);n=n+h|0,l=h+D|0}else l=D;if(n=n+4|0,t[n>>2]=t[n>>2]&-2,t[M+4>>2]=l|1,t[M+l>>2]=l,n=l>>>3,l>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=M,t[n+12>>2]=M,t[M+8>>2]=n,t[M+12>>2]=r;break}n=l>>>8;do if(!n)n=0;else{if(l>>>0>16777215){n=31;break}Re=(n+1048320|0)>>>16&8,Fe=n<>>16&4,Fe=Fe<>>16&2,n=14-(st|Re|n)+(Fe<>>15)|0,n=l>>>(n+7|0)&1|n<<1}while(0);if(u=11436+(n<<2)|0,t[M+28>>2]=n,e=M+16|0,t[e+4>>2]=0,t[e>>2]=0,e=t[2784]|0,r=1<>2]=M,t[M+24>>2]=u,t[M+12>>2]=M,t[M+8>>2]=M;break}for(e=l<<((n|0)==31?0:25-(n>>>1)|0),r=t[u>>2]|0;;){if((t[r+4>>2]&-8|0)==(l|0)){Re=194;break}if(u=r+16+(e>>>31<<2)|0,n=t[u>>2]|0,n)e=e<<1,r=n;else{Re=193;break}}if((Re|0)==193){t[u>>2]=M,t[M+24>>2]=r,t[M+12>>2]=M,t[M+8>>2]=M;break}else if((Re|0)==194){Re=r+8|0,Fe=t[Re>>2]|0,t[Fe+12>>2]=M,t[Re>>2]=M,t[M+8>>2]=Fe,t[M+12>>2]=r,t[M+24>>2]=0;break}}else Fe=(t[2786]|0)+D|0,t[2786]=Fe,t[2789]=M,t[M+4>>2]=Fe|1;while(0);return Fe=O+8|0,m=Qt,Fe|0}for(n=11580;e=t[n>>2]|0,!(e>>>0<=S>>>0?(Fe=e+(t[n+4>>2]|0)|0,Fe>>>0>S>>>0):0);)n=t[n+8>>2]|0;l=Fe+-47|0,e=l+8|0,e=l+((e&7|0)==0?0:0-e&7)|0,l=S+16|0,e=e>>>0>>0?S:e,n=e+8|0,r=s+8|0,r=(r&7|0)==0?0:0-r&7,Re=s+r|0,r=h+-40-r|0,t[2789]=Re,t[2786]=r,t[Re+4>>2]=r|1,t[Re+r+4>>2]=40,t[2790]=t[2905],r=e+4|0,t[r>>2]=27,t[n>>2]=t[2895],t[n+4>>2]=t[2896],t[n+8>>2]=t[2897],t[n+12>>2]=t[2898],t[2895]=s,t[2896]=h,t[2898]=0,t[2897]=n,n=e+24|0;do Re=n,n=n+4|0,t[n>>2]=7;while((Re+8|0)>>>0>>0);if((e|0)!=(S|0)){if(s=e-S|0,t[r>>2]=t[r>>2]&-2,t[S+4>>2]=s|1,t[e>>2]=s,n=s>>>3,s>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=S,t[n+12>>2]=S,t[S+8>>2]=n,t[S+12>>2]=r;break}if(n=s>>>8,n?s>>>0>16777215?r=31:(Re=(n+1048320|0)>>>16&8,Fe=n<>>16&4,Fe=Fe<>>16&2,r=14-(st|Re|r)+(Fe<>>15)|0,r=s>>>(r+7|0)&1|r<<1):r=0,u=11436+(r<<2)|0,t[S+28>>2]=r,t[S+20>>2]=0,t[l>>2]=0,n=t[2784]|0,e=1<>2]=S,t[S+24>>2]=u,t[S+12>>2]=S,t[S+8>>2]=S;break}for(e=s<<((r|0)==31?0:25-(r>>>1)|0),r=t[u>>2]|0;;){if((t[r+4>>2]&-8|0)==(s|0)){Re=216;break}if(u=r+16+(e>>>31<<2)|0,n=t[u>>2]|0,n)e=e<<1,r=n;else{Re=215;break}}if((Re|0)==215){t[u>>2]=S,t[S+24>>2]=r,t[S+12>>2]=S,t[S+8>>2]=S;break}else if((Re|0)==216){Re=r+8|0,Fe=t[Re>>2]|0,t[Fe+12>>2]=S,t[Re>>2]=S,t[S+8>>2]=Fe,t[S+12>>2]=r,t[S+24>>2]=0;break}}}else{Fe=t[2787]|0,(Fe|0)==0|s>>>0>>0&&(t[2787]=s),t[2895]=s,t[2896]=h,t[2898]=0,t[2792]=t[2901],t[2791]=-1,n=0;do Fe=11172+(n<<1<<2)|0,t[Fe+12>>2]=Fe,t[Fe+8>>2]=Fe,n=n+1|0;while((n|0)!=32);Fe=s+8|0,Fe=(Fe&7|0)==0?0:0-Fe&7,Re=s+Fe|0,Fe=h+-40-Fe|0,t[2789]=Re,t[2786]=Fe,t[Re+4>>2]=Fe|1,t[Re+Fe+4>>2]=40,t[2790]=t[2905]}while(0);if(n=t[2786]|0,n>>>0>P>>>0)return st=n-P|0,t[2786]=st,Fe=t[2789]|0,Re=Fe+P|0,t[2789]=Re,t[Re+4>>2]=st|1,t[Fe+4>>2]=P|3,Fe=Fe+8|0,m=Qt,Fe|0}return t[(Fv()|0)>>2]=12,Fe=0,m=Qt,Fe|0}function x_(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0;if(!!e){r=e+-8|0,l=t[2787]|0,e=t[e+-4>>2]|0,n=e&-8,S=r+n|0;do if(e&1)D=r,h=r;else{if(u=t[r>>2]|0,!(e&3)||(h=r+(0-u)|0,s=u+n|0,h>>>0>>0))return;if((h|0)==(t[2788]|0)){if(e=S+4|0,n=t[e>>2]|0,(n&3|0)!=3){D=h,n=s;break}t[2785]=s,t[e>>2]=n&-2,t[h+4>>2]=s|1,t[h+s>>2]=s;return}if(r=u>>>3,u>>>0<256)if(e=t[h+8>>2]|0,n=t[h+12>>2]|0,(n|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=n,t[n+8>>2]=e,D=h,n=s;break}l=t[h+24>>2]|0,e=t[h+12>>2]|0;do if((e|0)==(h|0)){if(r=h+16|0,n=r+4|0,e=t[n>>2]|0,!e)if(e=t[r>>2]|0,e)n=r;else{e=0;break}for(;;){if(r=e+20|0,u=t[r>>2]|0,u|0){e=u,n=r;continue}if(r=e+16|0,u=t[r>>2]|0,u)e=u,n=r;else break}t[n>>2]=0}else D=t[h+8>>2]|0,t[D+12>>2]=e,t[e+8>>2]=D;while(0);if(l){if(n=t[h+28>>2]|0,r=11436+(n<<2)|0,(h|0)==(t[r>>2]|0)){if(t[r>>2]=e,!e){t[2784]=t[2784]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=e,!e){D=h,n=s;break}t[e+24>>2]=l,n=h+16|0,r=t[n>>2]|0,r|0&&(t[e+16>>2]=r,t[r+24>>2]=e),n=t[n+4>>2]|0,n?(t[e+20>>2]=n,t[n+24>>2]=e,D=h,n=s):(D=h,n=s)}else D=h,n=s}while(0);if(!(h>>>0>=S>>>0)&&(e=S+4|0,u=t[e>>2]|0,!!(u&1))){if(u&2)t[e>>2]=u&-2,t[D+4>>2]=n|1,t[h+n>>2]=n,l=n;else{if(e=t[2788]|0,(S|0)==(t[2789]|0)){if(S=(t[2786]|0)+n|0,t[2786]=S,t[2789]=D,t[D+4>>2]=S|1,(D|0)!=(e|0))return;t[2788]=0,t[2785]=0;return}if((S|0)==(e|0)){S=(t[2785]|0)+n|0,t[2785]=S,t[2788]=h,t[D+4>>2]=S|1,t[h+S>>2]=S;return}l=(u&-8)+n|0,r=u>>>3;do if(u>>>0<256)if(n=t[S+8>>2]|0,e=t[S+12>>2]|0,(e|0)==(n|0)){t[2783]=t[2783]&~(1<>2]=e,t[e+8>>2]=n;break}else{s=t[S+24>>2]|0,e=t[S+12>>2]|0;do if((e|0)==(S|0)){if(r=S+16|0,n=r+4|0,e=t[n>>2]|0,!e)if(e=t[r>>2]|0,e)n=r;else{r=0;break}for(;;){if(r=e+20|0,u=t[r>>2]|0,u|0){e=u,n=r;continue}if(r=e+16|0,u=t[r>>2]|0,u)e=u,n=r;else break}t[n>>2]=0,r=e}else r=t[S+8>>2]|0,t[r+12>>2]=e,t[e+8>>2]=r,r=e;while(0);if(s|0){if(e=t[S+28>>2]|0,n=11436+(e<<2)|0,(S|0)==(t[n>>2]|0)){if(t[n>>2]=r,!r){t[2784]=t[2784]&~(1<>2]|0)!=(S|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=s,e=S+16|0,n=t[e>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),e=t[e+4>>2]|0,e|0&&(t[r+20>>2]=e,t[e+24>>2]=r)}}while(0);if(t[D+4>>2]=l|1,t[h+l>>2]=l,(D|0)==(t[2788]|0)){t[2785]=l;return}}if(e=l>>>3,l>>>0<256){r=11172+(e<<1<<2)|0,n=t[2783]|0,e=1<>2]|0):(t[2783]=n|e,e=r,n=r+8|0),t[n>>2]=D,t[e+12>>2]=D,t[D+8>>2]=e,t[D+12>>2]=r;return}e=l>>>8,e?l>>>0>16777215?e=31:(h=(e+1048320|0)>>>16&8,S=e<>>16&4,S=S<>>16&2,e=14-(s|h|e)+(S<>>15)|0,e=l>>>(e+7|0)&1|e<<1):e=0,u=11436+(e<<2)|0,t[D+28>>2]=e,t[D+20>>2]=0,t[D+16>>2]=0,n=t[2784]|0,r=1<>>1)|0),r=t[u>>2]|0;;){if((t[r+4>>2]&-8|0)==(l|0)){e=73;break}if(u=r+16+(n>>>31<<2)|0,e=t[u>>2]|0,e)n=n<<1,r=e;else{e=72;break}}if((e|0)==72){t[u>>2]=D,t[D+24>>2]=r,t[D+12>>2]=D,t[D+8>>2]=D;break}else if((e|0)==73){h=r+8|0,S=t[h>>2]|0,t[S+12>>2]=D,t[h>>2]=D,t[D+8>>2]=S,t[D+12>>2]=r,t[D+24>>2]=0;break}}else t[2784]=n|r,t[u>>2]=D,t[D+24>>2]=u,t[D+12>>2]=D,t[D+8>>2]=D;while(0);if(S=(t[2791]|0)+-1|0,t[2791]=S,!S)e=11588;else return;for(;e=t[e>>2]|0,e;)e=e+8|0;t[2791]=-1}}}function CI(){return 11628}function xI(e){e=e|0;var n=0,r=0;return n=m,m=m+16|0,r=n,t[r>>2]=OI(t[e+60>>2]|0)|0,e=A_(wu(6,r|0)|0)|0,m=n,e|0}function N8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0,Pe=0;P=m,m=m+48|0,M=P+16|0,s=P,l=P+32|0,D=e+28|0,u=t[D>>2]|0,t[l>>2]=u,S=e+20|0,u=(t[S>>2]|0)-u|0,t[l+4>>2]=u,t[l+8>>2]=n,t[l+12>>2]=r,u=u+r|0,h=e+60|0,t[s>>2]=t[h>>2],t[s+4>>2]=l,t[s+8>>2]=2,s=A_(d0(146,s|0)|0)|0;e:do if((u|0)!=(s|0)){for(n=2;!((s|0)<0);)if(u=u-s|0,Pe=t[l+4>>2]|0,K=s>>>0>Pe>>>0,l=K?l+8|0:l,n=(K<<31>>31)+n|0,Pe=s-(K?Pe:0)|0,t[l>>2]=(t[l>>2]|0)+Pe,K=l+4|0,t[K>>2]=(t[K>>2]|0)-Pe,t[M>>2]=t[h>>2],t[M+4>>2]=l,t[M+8>>2]=n,s=A_(d0(146,M|0)|0)|0,(u|0)==(s|0)){O=3;break e}t[e+16>>2]=0,t[D>>2]=0,t[S>>2]=0,t[e>>2]=t[e>>2]|32,(n|0)==2?r=0:r=r-(t[l+4>>2]|0)|0}else O=3;while(0);return(O|0)==3&&(Pe=t[e+44>>2]|0,t[e+16>>2]=Pe+(t[e+48>>2]|0),t[D>>2]=Pe,t[S>>2]=Pe),m=P,r|0}function AI(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;return l=m,m=m+32|0,s=l,u=l+20|0,t[s>>2]=t[e+60>>2],t[s+4>>2]=0,t[s+8>>2]=n,t[s+12>>2]=u,t[s+16>>2]=r,(A_(Ti(140,s|0)|0)|0)<0?(t[u>>2]=-1,e=-1):e=t[u>>2]|0,m=l,e|0}function A_(e){return e=e|0,e>>>0>4294963200&&(t[(Fv()|0)>>2]=0-e,e=-1),e|0}function Fv(){return(RI()|0)+64|0}function RI(){return VE()|0}function VE(){return 2084}function OI(e){return e=e|0,e|0}function kI(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;return l=m,m=m+32|0,u=l,t[e+36>>2]=1,((t[e>>2]&64|0)==0?(t[u>>2]=t[e+60>>2],t[u+4>>2]=21523,t[u+8>>2]=l+16,b0(54,u|0)|0):0)&&(p[e+75>>0]=-1),u=N8(e,n,r)|0,m=l,u|0}function L8(e,n){e=e|0,n=n|0;var r=0,u=0;if(r=p[e>>0]|0,u=p[n>>0]|0,r<<24>>24==0?1:r<<24>>24!=u<<24>>24)e=u;else{do e=e+1|0,n=n+1|0,r=p[e>>0]|0,u=p[n>>0]|0;while(!(r<<24>>24==0?1:r<<24>>24!=u<<24>>24));e=u}return(r&255)-(e&255)|0}function MI(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;e:do if(!r)e=0;else{for(;u=p[e>>0]|0,l=p[n>>0]|0,u<<24>>24==l<<24>>24;)if(r=r+-1|0,r)e=e+1|0,n=n+1|0;else{e=0;break e}e=(u&255)-(l&255)|0}while(0);return e|0}function F8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0,Pe=0,Ee=0,ve=0;ve=m,m=m+224|0,O=ve+120|0,P=ve+80|0,Pe=ve,Ee=ve+136|0,u=P,l=u+40|0;do t[u>>2]=0,u=u+4|0;while((u|0)<(l|0));return t[O>>2]=t[r>>2],(GE(0,n,O,Pe,P)|0)<0?r=-1:((t[e+76>>2]|0)>-1?K=NI(e)|0:K=0,r=t[e>>2]|0,M=r&32,(p[e+74>>0]|0)<1&&(t[e>>2]=r&-33),u=e+48|0,t[u>>2]|0?r=GE(e,n,O,Pe,P)|0:(l=e+44|0,s=t[l>>2]|0,t[l>>2]=Ee,h=e+28|0,t[h>>2]=Ee,D=e+20|0,t[D>>2]=Ee,t[u>>2]=80,S=e+16|0,t[S>>2]=Ee+80,r=GE(e,n,O,Pe,P)|0,s&&(M_[t[e+36>>2]&7](e,0,0)|0,r=(t[D>>2]|0)==0?-1:r,t[l>>2]=s,t[u>>2]=0,t[S>>2]=0,t[h>>2]=0,t[D>>2]=0)),u=t[e>>2]|0,t[e>>2]=u|M,K|0&&LI(e),r=(u&32|0)==0?r:-1),m=ve,r|0}function GE(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0,Pe=0,Ee=0,ve=0,Qe=0,We=0,st=0,Re=0,Fe=0,Qt=0,Lr=0,Nn=0,mn=0,hr=0,kr=0,On=0;On=m,m=m+64|0,Nn=On+16|0,mn=On,Qt=On+24|0,hr=On+8|0,kr=On+20|0,t[Nn>>2]=n,st=(e|0)!=0,Re=Qt+40|0,Fe=Re,Qt=Qt+39|0,Lr=hr+4|0,h=0,s=0,O=0;e:for(;;){do if((s|0)>-1)if((h|0)>(2147483647-s|0)){t[(Fv()|0)>>2]=75,s=-1;break}else{s=h+s|0;break}while(0);if(h=p[n>>0]|0,h<<24>>24)D=n;else{We=87;break}t:for(;;){switch(h<<24>>24){case 37:{h=D,We=9;break t}case 0:{h=D;break t}default:}Qe=D+1|0,t[Nn>>2]=Qe,h=p[Qe>>0]|0,D=Qe}t:do if((We|0)==9)for(;;){if(We=0,(p[D+1>>0]|0)!=37)break t;if(h=h+1|0,D=D+2|0,t[Nn>>2]=D,(p[D>>0]|0)==37)We=9;else break}while(0);if(h=h-n|0,st&&qo(e,n,h),h|0){n=D;continue}S=D+1|0,h=(p[S>>0]|0)+-48|0,h>>>0<10?(Qe=(p[D+2>>0]|0)==36,ve=Qe?h:-1,O=Qe?1:O,S=Qe?D+3|0:S):ve=-1,t[Nn>>2]=S,h=p[S>>0]|0,D=(h<<24>>24)+-32|0;t:do if(D>>>0<32)for(M=0,P=h;;){if(h=1<>2]=S,h=p[S>>0]|0,D=(h<<24>>24)+-32|0,D>>>0>=32)break;P=h}else M=0;while(0);if(h<<24>>24==42){if(D=S+1|0,h=(p[D>>0]|0)+-48|0,h>>>0<10?(p[S+2>>0]|0)==36:0)t[l+(h<<2)>>2]=10,h=t[u+((p[D>>0]|0)+-48<<3)>>2]|0,O=1,S=S+3|0;else{if(O|0){s=-1;break}st?(O=(t[r>>2]|0)+(4-1)&~(4-1),h=t[O>>2]|0,t[r>>2]=O+4,O=0,S=D):(h=0,O=0,S=D)}t[Nn>>2]=S,Qe=(h|0)<0,h=Qe?0-h|0:h,M=Qe?M|8192:M}else{if(h=b8(Nn)|0,(h|0)<0){s=-1;break}S=t[Nn>>2]|0}do if((p[S>>0]|0)==46){if((p[S+1>>0]|0)!=42){t[Nn>>2]=S+1,D=b8(Nn)|0,S=t[Nn>>2]|0;break}if(P=S+2|0,D=(p[P>>0]|0)+-48|0,D>>>0<10?(p[S+3>>0]|0)==36:0){t[l+(D<<2)>>2]=10,D=t[u+((p[P>>0]|0)+-48<<3)>>2]|0,S=S+4|0,t[Nn>>2]=S;break}if(O|0){s=-1;break e}st?(Qe=(t[r>>2]|0)+(4-1)&~(4-1),D=t[Qe>>2]|0,t[r>>2]=Qe+4):D=0,t[Nn>>2]=P,S=P}else D=-1;while(0);for(Ee=0;;){if(((p[S>>0]|0)+-65|0)>>>0>57){s=-1;break e}if(Qe=S+1|0,t[Nn>>2]=Qe,P=p[(p[S>>0]|0)+-65+(5178+(Ee*58|0))>>0]|0,K=P&255,(K+-1|0)>>>0<8)Ee=K,S=Qe;else break}if(!(P<<24>>24)){s=-1;break}Pe=(ve|0)>-1;do if(P<<24>>24==19)if(Pe){s=-1;break e}else We=49;else{if(Pe){t[l+(ve<<2)>>2]=K,Pe=u+(ve<<3)|0,ve=t[Pe+4>>2]|0,We=mn,t[We>>2]=t[Pe>>2],t[We+4>>2]=ve,We=49;break}if(!st){s=0;break e}P8(mn,K,r)}while(0);if((We|0)==49?(We=0,!st):0){h=0,n=Qe;continue}S=p[S>>0]|0,S=(Ee|0)!=0&(S&15|0)==3?S&-33:S,Pe=M&-65537,ve=(M&8192|0)==0?M:Pe;t:do switch(S|0){case 110:switch((Ee&255)<<24>>24){case 0:{t[t[mn>>2]>>2]=s,h=0,n=Qe;continue e}case 1:{t[t[mn>>2]>>2]=s,h=0,n=Qe;continue e}case 2:{h=t[mn>>2]|0,t[h>>2]=s,t[h+4>>2]=((s|0)<0)<<31>>31,h=0,n=Qe;continue e}case 3:{E[t[mn>>2]>>1]=s,h=0,n=Qe;continue e}case 4:{p[t[mn>>2]>>0]=s,h=0,n=Qe;continue e}case 6:{t[t[mn>>2]>>2]=s,h=0,n=Qe;continue e}case 7:{h=t[mn>>2]|0,t[h>>2]=s,t[h+4>>2]=((s|0)<0)<<31>>31,h=0,n=Qe;continue e}default:{h=0,n=Qe;continue e}}case 112:{S=120,D=D>>>0>8?D:8,n=ve|8,We=61;break}case 88:case 120:{n=ve,We=61;break}case 111:{S=mn,n=t[S>>2]|0,S=t[S+4>>2]|0,K=bI(n,S,Re)|0,Pe=Fe-K|0,M=0,P=5642,D=(ve&8|0)==0|(D|0)>(Pe|0)?D:Pe+1|0,Pe=ve,We=67;break}case 105:case 100:if(S=mn,n=t[S>>2]|0,S=t[S+4>>2]|0,(S|0)<0){n=R_(0,0,n|0,S|0)|0,S=ft,M=mn,t[M>>2]=n,t[M+4>>2]=S,M=1,P=5642,We=66;break t}else{M=(ve&2049|0)!=0&1,P=(ve&2048|0)==0?(ve&1|0)==0?5642:5644:5643,We=66;break t}case 117:{S=mn,M=0,P=5642,n=t[S>>2]|0,S=t[S+4>>2]|0,We=66;break}case 99:{p[Qt>>0]=t[mn>>2],n=Qt,M=0,P=5642,K=Re,S=1,D=Pe;break}case 109:{S=PI(t[(Fv()|0)>>2]|0)|0,We=71;break}case 115:{S=t[mn>>2]|0,S=S|0?S:5652,We=71;break}case 67:{t[hr>>2]=t[mn>>2],t[Lr>>2]=0,t[mn>>2]=hr,K=-1,S=hr,We=75;break}case 83:{n=t[mn>>2]|0,D?(K=D,S=n,We=75):(hl(e,32,h,0,ve),n=0,We=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{h=BI(e,+U[mn>>3],h,D,ve,S)|0,n=Qe;continue e}default:M=0,P=5642,K=Re,S=D,D=ve}while(0);t:do if((We|0)==61)ve=mn,Ee=t[ve>>2]|0,ve=t[ve+4>>2]|0,K=FI(Ee,ve,Re,S&32)|0,P=(n&8|0)==0|(Ee|0)==0&(ve|0)==0,M=P?0:2,P=P?5642:5642+(S>>4)|0,Pe=n,n=Ee,S=ve,We=67;else if((We|0)==66)K=bv(n,S,Re)|0,Pe=ve,We=67;else if((We|0)==71)We=0,ve=II(S,0,D)|0,Ee=(ve|0)==0,n=S,M=0,P=5642,K=Ee?S+D|0:ve,S=Ee?D:ve-S|0,D=Pe;else if((We|0)==75){for(We=0,P=S,n=0,D=0;M=t[P>>2]|0,!(!M||(D=I8(kr,M)|0,(D|0)<0|D>>>0>(K-n|0)>>>0));)if(n=D+n|0,K>>>0>n>>>0)P=P+4|0;else break;if((D|0)<0){s=-1;break e}if(hl(e,32,h,n,ve),!n)n=0,We=84;else for(M=0;;){if(D=t[S>>2]|0,!D){We=84;break t}if(D=I8(kr,D)|0,M=D+M|0,(M|0)>(n|0)){We=84;break t}if(qo(e,kr,D),M>>>0>=n>>>0){We=84;break}else S=S+4|0}}while(0);if((We|0)==67)We=0,S=(n|0)!=0|(S|0)!=0,ve=(D|0)!=0|S,S=((S^1)&1)+(Fe-K)|0,n=ve?K:Re,K=Re,S=ve?(D|0)>(S|0)?D:S:D,D=(D|0)>-1?Pe&-65537:Pe;else if((We|0)==84){We=0,hl(e,32,h,n,ve^8192),h=(h|0)>(n|0)?h:n,n=Qe;continue}Ee=K-n|0,Pe=(S|0)<(Ee|0)?Ee:S,ve=Pe+M|0,h=(h|0)<(ve|0)?ve:h,hl(e,32,h,ve,D),qo(e,P,M),hl(e,48,h,ve,D^65536),hl(e,48,Pe,Ee,0),qo(e,n,Ee),hl(e,32,h,ve,D^8192),n=Qe}e:do if((We|0)==87&&!e)if(!O)s=0;else{for(s=1;n=t[l+(s<<2)>>2]|0,!!n;)if(P8(u+(s<<3)|0,n,r),s=s+1|0,(s|0)>=10){s=1;break e}for(;;){if(t[l+(s<<2)>>2]|0){s=-1;break e}if(s=s+1|0,(s|0)>=10){s=1;break}}}while(0);return m=On,s|0}function NI(e){return e=e|0,0}function LI(e){e=e|0}function qo(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]&32||YI(n,r,e)|0}function b8(e){e=e|0;var n=0,r=0,u=0;if(r=t[e>>2]|0,u=(p[r>>0]|0)+-48|0,u>>>0<10){n=0;do n=u+(n*10|0)|0,r=r+1|0,t[e>>2]=r,u=(p[r>>0]|0)+-48|0;while(u>>>0<10)}else n=0;return n|0}function P8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;e:do if(n>>>0<=20)do switch(n|0){case 9:{u=(t[r>>2]|0)+(4-1)&~(4-1),n=t[u>>2]|0,t[r>>2]=u+4,t[e>>2]=n;break e}case 10:{u=(t[r>>2]|0)+(4-1)&~(4-1),n=t[u>>2]|0,t[r>>2]=u+4,u=e,t[u>>2]=n,t[u+4>>2]=((n|0)<0)<<31>>31;break e}case 11:{u=(t[r>>2]|0)+(4-1)&~(4-1),n=t[u>>2]|0,t[r>>2]=u+4,u=e,t[u>>2]=n,t[u+4>>2]=0;break e}case 12:{u=(t[r>>2]|0)+(8-1)&~(8-1),n=u,l=t[n>>2]|0,n=t[n+4>>2]|0,t[r>>2]=u+8,u=e,t[u>>2]=l,t[u+4>>2]=n;break e}case 13:{l=(t[r>>2]|0)+(4-1)&~(4-1),u=t[l>>2]|0,t[r>>2]=l+4,u=(u&65535)<<16>>16,l=e,t[l>>2]=u,t[l+4>>2]=((u|0)<0)<<31>>31;break e}case 14:{l=(t[r>>2]|0)+(4-1)&~(4-1),u=t[l>>2]|0,t[r>>2]=l+4,l=e,t[l>>2]=u&65535,t[l+4>>2]=0;break e}case 15:{l=(t[r>>2]|0)+(4-1)&~(4-1),u=t[l>>2]|0,t[r>>2]=l+4,u=(u&255)<<24>>24,l=e,t[l>>2]=u,t[l+4>>2]=((u|0)<0)<<31>>31;break e}case 16:{l=(t[r>>2]|0)+(4-1)&~(4-1),u=t[l>>2]|0,t[r>>2]=l+4,l=e,t[l>>2]=u&255,t[l+4>>2]=0;break e}case 17:{l=(t[r>>2]|0)+(8-1)&~(8-1),s=+U[l>>3],t[r>>2]=l+8,U[e>>3]=s;break e}case 18:{l=(t[r>>2]|0)+(8-1)&~(8-1),s=+U[l>>3],t[r>>2]=l+8,U[e>>3]=s;break e}default:break e}while(0);while(0)}function FI(e,n,r,u){if(e=e|0,n=n|0,r=r|0,u=u|0,!((e|0)==0&(n|0)==0))do r=r+-1|0,p[r>>0]=k[5694+(e&15)>>0]|0|u,e=O_(e|0,n|0,4)|0,n=ft;while(!((e|0)==0&(n|0)==0));return r|0}function bI(e,n,r){if(e=e|0,n=n|0,r=r|0,!((e|0)==0&(n|0)==0))do r=r+-1|0,p[r>>0]=e&7|48,e=O_(e|0,n|0,3)|0,n=ft;while(!((e|0)==0&(n|0)==0));return r|0}function bv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;if(n>>>0>0|(n|0)==0&e>>>0>4294967295){for(;u=QE(e|0,n|0,10,0)|0,r=r+-1|0,p[r>>0]=u&255|48,u=e,e=XE(e|0,n|0,10,0)|0,n>>>0>9|(n|0)==9&u>>>0>4294967295;)n=ft;n=e}else n=e;if(n)for(;r=r+-1|0,p[r>>0]=(n>>>0)%10|0|48,!(n>>>0<10);)n=(n>>>0)/10|0;return r|0}function PI(e){return e=e|0,HI(e,t[(qI()|0)+188>>2]|0)|0}function II(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;s=n&255,u=(r|0)!=0;e:do if(u&(e&3|0)!=0)for(l=n&255;;){if((p[e>>0]|0)==l<<24>>24){h=6;break e}if(e=e+1|0,r=r+-1|0,u=(r|0)!=0,!(u&(e&3|0)!=0)){h=5;break}}else h=5;while(0);(h|0)==5&&(u?h=6:r=0);e:do if((h|0)==6&&(l=n&255,(p[e>>0]|0)!=l<<24>>24)){u=nr(s,16843009)|0;t:do if(r>>>0>3){for(;s=t[e>>2]^u,!((s&-2139062144^-2139062144)&s+-16843009|0);)if(e=e+4|0,r=r+-4|0,r>>>0<=3){h=11;break t}}else h=11;while(0);if((h|0)==11&&!r){r=0;break}for(;;){if((p[e>>0]|0)==l<<24>>24)break e;if(e=e+1|0,r=r+-1|0,!r){r=0;break}}}while(0);return(r|0?e:0)|0}function hl(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0;if(h=m,m=m+256|0,s=h,(r|0)>(u|0)&(l&73728|0)==0){if(l=r-u|0,Iv(s|0,n|0,(l>>>0<256?l:256)|0)|0,l>>>0>255){n=r-u|0;do qo(e,s,256),l=l+-256|0;while(l>>>0>255);l=n&255}qo(e,s,l)}m=h}function I8(e,n){return e=e|0,n=n|0,e?e=jI(e,n,0)|0:e=0,e|0}function BI(e,n,r,u,l,s){e=e|0,n=+n,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,M=0,O=0,P=0,K=0,Pe=0,Ee=0,ve=0,Qe=0,We=0,st=0,Re=0,Fe=0,Qt=0,Lr=0,Nn=0,mn=0,hr=0,kr=0,On=0,Zi=0;Zi=m,m=m+560|0,S=Zi+8|0,Qe=Zi,On=Zi+524|0,kr=On,M=Zi+512|0,t[Qe>>2]=0,hr=M+12|0,B8(n)|0,(ft|0)<0?(n=-n,Nn=1,Lr=5659):(Nn=(l&2049|0)!=0&1,Lr=(l&2048|0)==0?(l&1|0)==0?5660:5665:5662),B8(n)|0,mn=ft&2146435072;do if(mn>>>0<2146435072|(mn|0)==2146435072&0<0){if(Pe=+UI(n,Qe)*2,h=Pe!=0,h&&(t[Qe>>2]=(t[Qe>>2]|0)+-1),st=s|32,(st|0)==97){Ee=s&32,K=(Ee|0)==0?Lr:Lr+9|0,P=Nn|2,h=12-u|0;do if(u>>>0>11|(h|0)==0)n=Pe;else{n=8;do h=h+-1|0,n=n*16;while((h|0)!=0);if((p[K>>0]|0)==45){n=-(n+(-Pe-n));break}else{n=Pe+n-n;break}}while(0);D=t[Qe>>2]|0,h=(D|0)<0?0-D|0:D,h=bv(h,((h|0)<0)<<31>>31,hr)|0,(h|0)==(hr|0)&&(h=M+11|0,p[h>>0]=48),p[h+-1>>0]=(D>>31&2)+43,O=h+-2|0,p[O>>0]=s+15,M=(u|0)<1,S=(l&8|0)==0,h=On;do mn=~~n,D=h+1|0,p[h>>0]=k[5694+mn>>0]|Ee,n=(n-+(mn|0))*16,((D-kr|0)==1?!(S&(M&n==0)):0)?(p[D>>0]=46,h=h+2|0):h=D;while(n!=0);mn=h-kr|0,kr=hr-O|0,hr=(u|0)!=0&(mn+-2|0)<(u|0)?u+2|0:mn,h=kr+P+hr|0,hl(e,32,r,h,l),qo(e,K,P),hl(e,48,r,h,l^65536),qo(e,On,mn),hl(e,48,hr-mn|0,0,0),qo(e,O,kr),hl(e,32,r,h,l^8192);break}D=(u|0)<0?6:u,h?(h=(t[Qe>>2]|0)+-28|0,t[Qe>>2]=h,n=Pe*268435456):(n=Pe,h=t[Qe>>2]|0),mn=(h|0)<0?S:S+288|0,S=mn;do Fe=~~n>>>0,t[S>>2]=Fe,S=S+4|0,n=(n-+(Fe>>>0))*1e9;while(n!=0);if((h|0)>0)for(M=mn,P=S;;){if(O=(h|0)<29?h:29,h=P+-4|0,h>>>0>=M>>>0){S=0;do Re=W8(t[h>>2]|0,0,O|0)|0,Re=KE(Re|0,ft|0,S|0,0)|0,Fe=ft,We=QE(Re|0,Fe|0,1e9,0)|0,t[h>>2]=We,S=XE(Re|0,Fe|0,1e9,0)|0,h=h+-4|0;while(h>>>0>=M>>>0);S&&(M=M+-4|0,t[M>>2]=S)}for(S=P;!(S>>>0<=M>>>0);)if(h=S+-4|0,!(t[h>>2]|0))S=h;else break;if(h=(t[Qe>>2]|0)-O|0,t[Qe>>2]=h,(h|0)>0)P=S;else break}else M=mn;if((h|0)<0){u=((D+25|0)/9|0)+1|0,ve=(st|0)==102;do{if(Ee=0-h|0,Ee=(Ee|0)<9?Ee:9,M>>>0>>0){O=(1<>>Ee,K=0,h=M;do Fe=t[h>>2]|0,t[h>>2]=(Fe>>>Ee)+K,K=nr(Fe&O,P)|0,h=h+4|0;while(h>>>0>>0);h=(t[M>>2]|0)==0?M+4|0:M,K?(t[S>>2]=K,M=h,h=S+4|0):(M=h,h=S)}else M=(t[M>>2]|0)==0?M+4|0:M,h=S;S=ve?mn:M,S=(h-S>>2|0)>(u|0)?S+(u<<2)|0:h,h=(t[Qe>>2]|0)+Ee|0,t[Qe>>2]=h}while((h|0)<0);h=M,u=S}else h=M,u=S;if(Fe=mn,h>>>0>>0){if(S=(Fe-h>>2)*9|0,O=t[h>>2]|0,O>>>0>=10){M=10;do M=M*10|0,S=S+1|0;while(O>>>0>=M>>>0)}}else S=0;if(ve=(st|0)==103,We=(D|0)!=0,M=D-((st|0)!=102?S:0)+((We&ve)<<31>>31)|0,(M|0)<(((u-Fe>>2)*9|0)+-9|0)){if(M=M+9216|0,Ee=mn+4+(((M|0)/9|0)+-1024<<2)|0,M=((M|0)%9|0)+1|0,(M|0)<9){O=10;do O=O*10|0,M=M+1|0;while((M|0)!=9)}else O=10;if(P=t[Ee>>2]|0,K=(P>>>0)%(O>>>0)|0,M=(Ee+4|0)==(u|0),M&(K|0)==0)M=Ee;else if(Pe=(((P>>>0)/(O>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Re=(O|0)/2|0,n=K>>>0>>0?.5:M&(K|0)==(Re|0)?1:1.5,Nn&&(Re=(p[Lr>>0]|0)==45,n=Re?-n:n,Pe=Re?-Pe:Pe),M=P-K|0,t[Ee>>2]=M,Pe+n!=Pe){if(Re=M+O|0,t[Ee>>2]=Re,Re>>>0>999999999)for(S=Ee;M=S+-4|0,t[S>>2]=0,M>>>0>>0&&(h=h+-4|0,t[h>>2]=0),Re=(t[M>>2]|0)+1|0,t[M>>2]=Re,Re>>>0>999999999;)S=M;else M=Ee;if(S=(Fe-h>>2)*9|0,P=t[h>>2]|0,P>>>0>=10){O=10;do O=O*10|0,S=S+1|0;while(P>>>0>=O>>>0)}}else M=Ee;M=M+4|0,M=u>>>0>M>>>0?M:u,Re=h}else M=u,Re=h;for(st=M;;){if(st>>>0<=Re>>>0){Qe=0;break}if(h=st+-4|0,!(t[h>>2]|0))st=h;else{Qe=1;break}}u=0-S|0;do if(ve)if(h=((We^1)&1)+D|0,(h|0)>(S|0)&(S|0)>-5?(O=s+-1|0,D=h+-1-S|0):(O=s+-2|0,D=h+-1|0),h=l&8,h)Ee=h;else{if(Qe?(Qt=t[st+-4>>2]|0,(Qt|0)!=0):0)if((Qt>>>0)%10|0)M=0;else{M=0,h=10;do h=h*10|0,M=M+1|0;while(!((Qt>>>0)%(h>>>0)|0|0))}else M=9;if(h=((st-Fe>>2)*9|0)+-9|0,(O|32|0)==102){Ee=h-M|0,Ee=(Ee|0)>0?Ee:0,D=(D|0)<(Ee|0)?D:Ee,Ee=0;break}else{Ee=h+S-M|0,Ee=(Ee|0)>0?Ee:0,D=(D|0)<(Ee|0)?D:Ee,Ee=0;break}}else O=s,Ee=l&8;while(0);if(ve=D|Ee,P=(ve|0)!=0&1,K=(O|32|0)==102,K)We=0,h=(S|0)>0?S:0;else{if(h=(S|0)<0?u:S,h=bv(h,((h|0)<0)<<31>>31,hr)|0,M=hr,(M-h|0)<2)do h=h+-1|0,p[h>>0]=48;while((M-h|0)<2);p[h+-1>>0]=(S>>31&2)+43,h=h+-2|0,p[h>>0]=O,We=h,h=M-h|0}if(h=Nn+1+D+P+h|0,hl(e,32,r,h,l),qo(e,Lr,Nn),hl(e,48,r,h,l^65536),K){O=Re>>>0>mn>>>0?mn:Re,Ee=On+9|0,P=Ee,K=On+8|0,M=O;do{if(S=bv(t[M>>2]|0,0,Ee)|0,(M|0)==(O|0))(S|0)==(Ee|0)&&(p[K>>0]=48,S=K);else if(S>>>0>On>>>0){Iv(On|0,48,S-kr|0)|0;do S=S+-1|0;while(S>>>0>On>>>0)}qo(e,S,P-S|0),M=M+4|0}while(M>>>0<=mn>>>0);if(ve|0&&qo(e,5710,1),M>>>0>>0&(D|0)>0)for(;;){if(S=bv(t[M>>2]|0,0,Ee)|0,S>>>0>On>>>0){Iv(On|0,48,S-kr|0)|0;do S=S+-1|0;while(S>>>0>On>>>0)}if(qo(e,S,(D|0)<9?D:9),M=M+4|0,S=D+-9|0,M>>>0>>0&(D|0)>9)D=S;else{D=S;break}}hl(e,48,D+9|0,9,0)}else{if(ve=Qe?st:Re+4|0,(D|0)>-1){Qe=On+9|0,Ee=(Ee|0)==0,u=Qe,P=0-kr|0,K=On+8|0,O=Re;do{S=bv(t[O>>2]|0,0,Qe)|0,(S|0)==(Qe|0)&&(p[K>>0]=48,S=K);do if((O|0)==(Re|0)){if(M=S+1|0,qo(e,S,1),Ee&(D|0)<1){S=M;break}qo(e,5710,1),S=M}else{if(S>>>0<=On>>>0)break;Iv(On|0,48,S+P|0)|0;do S=S+-1|0;while(S>>>0>On>>>0)}while(0);kr=u-S|0,qo(e,S,(D|0)>(kr|0)?kr:D),D=D-kr|0,O=O+4|0}while(O>>>0>>0&(D|0)>-1)}hl(e,48,D+18|0,18,0),qo(e,We,hr-We|0)}hl(e,32,r,h,l^8192)}else On=(s&32|0)!=0,h=Nn+3|0,hl(e,32,r,h,l&-65537),qo(e,Lr,Nn),qo(e,n!=n|!1?On?5686:5690:On?5678:5682,3),hl(e,32,r,h,l^8192);while(0);return m=Zi,((h|0)<(r|0)?r:h)|0}function B8(e){e=+e;var n=0;return U[W>>3]=e,n=t[W>>2]|0,ft=t[W+4>>2]|0,n|0}function UI(e,n){return e=+e,n=n|0,+ +U8(e,n)}function U8(e,n){e=+e,n=n|0;var r=0,u=0,l=0;switch(U[W>>3]=e,r=t[W>>2]|0,u=t[W+4>>2]|0,l=O_(r|0,u|0,52)|0,l&2047){case 0:{e!=0?(e=+U8(e*18446744073709552e3,n),r=(t[n>>2]|0)+-64|0):r=0,t[n>>2]=r;break}case 2047:break;default:t[n>>2]=(l&2047)+-1022,t[W>>2]=r,t[W+4>>2]=u&-2146435073|1071644672,e=+U[W>>3]}return+e}function jI(e,n,r){e=e|0,n=n|0,r=r|0;do if(e){if(n>>>0<128){p[e>>0]=n,e=1;break}if(!(t[t[(zI()|0)+188>>2]>>2]|0))if((n&-128|0)==57216){p[e>>0]=n,e=1;break}else{t[(Fv()|0)>>2]=84,e=-1;break}if(n>>>0<2048){p[e>>0]=n>>>6|192,p[e+1>>0]=n&63|128,e=2;break}if(n>>>0<55296|(n&-8192|0)==57344){p[e>>0]=n>>>12|224,p[e+1>>0]=n>>>6&63|128,p[e+2>>0]=n&63|128,e=3;break}if((n+-65536|0)>>>0<1048576){p[e>>0]=n>>>18|240,p[e+1>>0]=n>>>12&63|128,p[e+2>>0]=n>>>6&63|128,p[e+3>>0]=n&63|128,e=4;break}else{t[(Fv()|0)>>2]=84,e=-1;break}}else e=1;while(0);return e|0}function zI(){return VE()|0}function qI(){return VE()|0}function HI(e,n){e=e|0,n=n|0;var r=0,u=0;for(u=0;;){if((k[5712+u>>0]|0)==(e|0)){e=2;break}if(r=u+1|0,(r|0)==87){r=5800,u=87,e=5;break}else u=r}if((e|0)==2&&(u?(r=5800,e=5):r=5800),(e|0)==5)for(;;){do e=r,r=r+1|0;while((p[e>>0]|0)!=0);if(u=u+-1|0,u)e=5;else break}return WI(r,t[n+20>>2]|0)|0}function WI(e,n){return e=e|0,n=n|0,VI(e,n)|0}function VI(e,n){return e=e|0,n=n|0,n?n=GI(t[n>>2]|0,t[n+4>>2]|0,e)|0:n=0,(n|0?n:e)|0}function GI(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0;K=(t[e>>2]|0)+1794895138|0,s=Gp(t[e+8>>2]|0,K)|0,u=Gp(t[e+12>>2]|0,K)|0,l=Gp(t[e+16>>2]|0,K)|0;e:do if((s>>>0>>2>>>0?(P=n-(s<<2)|0,u>>>0

>>0&l>>>0

>>0):0)?((l|u)&3|0)==0:0){for(P=u>>>2,O=l>>>2,M=0;;){if(D=s>>>1,S=M+D|0,h=S<<1,l=h+P|0,u=Gp(t[e+(l<<2)>>2]|0,K)|0,l=Gp(t[e+(l+1<<2)>>2]|0,K)|0,!(l>>>0>>0&u>>>0<(n-l|0)>>>0)){u=0;break e}if(p[e+(l+u)>>0]|0){u=0;break e}if(u=L8(r,e+l|0)|0,!u)break;if(u=(u|0)<0,(s|0)==1){u=0;break e}else M=u?M:S,s=u?D:s-D|0}u=h+O|0,l=Gp(t[e+(u<<2)>>2]|0,K)|0,u=Gp(t[e+(u+1<<2)>>2]|0,K)|0,u>>>0>>0&l>>>0<(n-u|0)>>>0?u=(p[e+(u+l)>>0]|0)==0?e+u|0:0:u=0}else u=0;while(0);return u|0}function Gp(e,n){e=e|0,n=n|0;var r=0;return r=Y8(e|0)|0,((n|0)==0?e:r)|0}function YI(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=r+16|0,l=t[u>>2]|0,l?s=5:KI(r)|0?u=0:(l=t[u>>2]|0,s=5);e:do if((s|0)==5){if(D=r+20|0,h=t[D>>2]|0,u=h,(l-h|0)>>>0>>0){u=M_[t[r+36>>2]&7](r,e,n)|0;break}t:do if((p[r+75>>0]|0)>-1){for(h=n;;){if(!h){s=0,l=e;break t}if(l=h+-1|0,(p[e+l>>0]|0)==10)break;h=l}if(u=M_[t[r+36>>2]&7](r,e,h)|0,u>>>0>>0)break e;s=h,l=e+h|0,n=n-h|0,u=t[D>>2]|0}else s=0,l=e;while(0);pr(u|0,l|0,n|0)|0,t[D>>2]=(t[D>>2]|0)+n,u=s+n|0}while(0);return u|0}function KI(e){e=e|0;var n=0,r=0;return n=e+74|0,r=p[n>>0]|0,p[n>>0]=r+255|r,n=t[e>>2]|0,n&8?(t[e>>2]=n|32,e=-1):(t[e+8>>2]=0,t[e+4>>2]=0,r=t[e+44>>2]|0,t[e+28>>2]=r,t[e+20>>2]=r,t[e+16>>2]=r+(t[e+48>>2]|0),e=0),e|0}function Eu(e,n){e=w(e),n=w(n);var r=0,u=0;r=j8(e)|0;do if((r&2147483647)>>>0<=2139095040){if(u=j8(n)|0,(u&2147483647)>>>0<=2139095040)if((u^r|0)<0){e=(r|0)<0?n:e;break}else{e=e>2]=e,t[W>>2]|0|0}function Yp(e,n){e=w(e),n=w(n);var r=0,u=0;r=z8(e)|0;do if((r&2147483647)>>>0<=2139095040){if(u=z8(n)|0,(u&2147483647)>>>0<=2139095040)if((u^r|0)<0){e=(r|0)<0?e:n;break}else{e=e>2]=e,t[W>>2]|0|0}function YE(e,n){e=w(e),n=w(n);var r=0,u=0,l=0,s=0,h=0,D=0,S=0,M=0;s=(C[W>>2]=e,t[W>>2]|0),D=(C[W>>2]=n,t[W>>2]|0),r=s>>>23&255,h=D>>>23&255,S=s&-2147483648,l=D<<1;e:do if((l|0)!=0?!((r|0)==255|((XI(n)|0)&2147483647)>>>0>2139095040):0){if(u=s<<1,u>>>0<=l>>>0)return n=w(e*w(0)),w((u|0)==(l|0)?n:e);if(r)u=s&8388607|8388608;else{if(r=s<<9,(r|0)>-1){u=r,r=0;do r=r+-1|0,u=u<<1;while((u|0)>-1)}else r=0;u=s<<1-r}if(h)D=D&8388607|8388608;else{if(s=D<<9,(s|0)>-1){l=0;do l=l+-1|0,s=s<<1;while((s|0)>-1)}else l=0;h=l,D=D<<1-l}l=u-D|0,s=(l|0)>-1;t:do if((r|0)>(h|0)){for(;;){if(s)if(l)u=l;else break;if(u=u<<1,r=r+-1|0,l=u-D|0,s=(l|0)>-1,(r|0)<=(h|0))break t}n=w(e*w(0));break e}while(0);if(s)if(l)u=l;else{n=w(e*w(0));break}if(u>>>0<8388608)do u=u<<1,r=r+-1|0;while(u>>>0<8388608);(r|0)>0?r=u+-8388608|r<<23:r=u>>>(1-r|0),n=(t[W>>2]=r|S,w(C[W>>2]))}else M=3;while(0);return(M|0)==3&&(n=w(e*n),n=w(n/n)),w(n)}function XI(e){return e=w(e),C[W>>2]=e,t[W>>2]|0|0}function QI(e,n){return e=e|0,n=n|0,F8(t[582]|0,e,n)|0}function li(e){e=e|0,Xn()}function Pv(e){e=e|0}function JI(e,n){return e=e|0,n=n|0,0}function ZI(e){return e=e|0,(q8(e+4|0)|0)==-1?(M1[t[(t[e>>2]|0)+8>>2]&127](e),e=1):e=0,e|0}function q8(e){e=e|0;var n=0;return n=t[e>>2]|0,t[e>>2]=n+-1,n+-1|0}function J2(e){e=e|0,ZI(e)|0&&$I(e)}function $I(e){e=e|0;var n=0;n=e+8|0,((t[n>>2]|0)!=0?(q8(n)|0)!=-1:0)||M1[t[(t[e>>2]|0)+16>>2]&127](e)}function cn(e){e=e|0;var n=0;for(n=(e|0)==0?1:e;e=C_(n)|0,!(e|0);){if(e=tB()|0,!e){e=0;break}rS[e&0]()}return e|0}function H8(e){return e=e|0,cn(e)|0}function yt(e){e=e|0,x_(e)}function eB(e){e=e|0,(p[e+11>>0]|0)<0&&yt(t[e>>2]|0)}function tB(){var e=0;return e=t[2923]|0,t[2923]=e+0,e|0}function nB(){}function R_(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,u=n-u-(r>>>0>e>>>0|0)>>>0,ft=u,e-r>>>0|0|0}function KE(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,r=e+r>>>0,ft=n+u+(r>>>0>>0|0)>>>0,r|0|0}function Iv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;if(s=e+r|0,n=n&255,(r|0)>=67){for(;e&3;)p[e>>0]=n,e=e+1|0;for(u=s&-4|0,l=u-64|0,h=n|n<<8|n<<16|n<<24;(e|0)<=(l|0);)t[e>>2]=h,t[e+4>>2]=h,t[e+8>>2]=h,t[e+12>>2]=h,t[e+16>>2]=h,t[e+20>>2]=h,t[e+24>>2]=h,t[e+28>>2]=h,t[e+32>>2]=h,t[e+36>>2]=h,t[e+40>>2]=h,t[e+44>>2]=h,t[e+48>>2]=h,t[e+52>>2]=h,t[e+56>>2]=h,t[e+60>>2]=h,e=e+64|0;for(;(e|0)<(u|0);)t[e>>2]=h,e=e+4|0}for(;(e|0)<(s|0);)p[e>>0]=n,e=e+1|0;return s-r|0}function W8(e,n,r){return e=e|0,n=n|0,r=r|0,(r|0)<32?(ft=n<>>32-r,e<>>r,e>>>r|(n&(1<>>r-32|0)}function pr(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;if((r|0)>=8192)return ni(e|0,n|0,r|0)|0;if(s=e|0,l=e+r|0,(e&3)==(n&3)){for(;e&3;){if(!r)return s|0;p[e>>0]=p[n>>0]|0,e=e+1|0,n=n+1|0,r=r-1|0}for(r=l&-4|0,u=r-64|0;(e|0)<=(u|0);)t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2],t[e+16>>2]=t[n+16>>2],t[e+20>>2]=t[n+20>>2],t[e+24>>2]=t[n+24>>2],t[e+28>>2]=t[n+28>>2],t[e+32>>2]=t[n+32>>2],t[e+36>>2]=t[n+36>>2],t[e+40>>2]=t[n+40>>2],t[e+44>>2]=t[n+44>>2],t[e+48>>2]=t[n+48>>2],t[e+52>>2]=t[n+52>>2],t[e+56>>2]=t[n+56>>2],t[e+60>>2]=t[n+60>>2],e=e+64|0,n=n+64|0;for(;(e|0)<(r|0);)t[e>>2]=t[n>>2],e=e+4|0,n=n+4|0}else for(r=l-4|0;(e|0)<(r|0);)p[e>>0]=p[n>>0]|0,p[e+1>>0]=p[n+1>>0]|0,p[e+2>>0]=p[n+2>>0]|0,p[e+3>>0]=p[n+3>>0]|0,e=e+4|0,n=n+4|0;for(;(e|0)<(l|0);)p[e>>0]=p[n>>0]|0,e=e+1|0,n=n+1|0;return s|0}function V8(e){e=e|0;var n=0;return n=p[Se+(e&255)>>0]|0,(n|0)<8?n|0:(n=p[Se+(e>>8&255)>>0]|0,(n|0)<8?n+8|0:(n=p[Se+(e>>16&255)>>0]|0,(n|0)<8?n+16|0:(p[Se+(e>>>24)>>0]|0)+24|0))}function G8(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,M=0,O=0,P=0,K=0,Pe=0,Ee=0;if(O=e,S=n,M=S,h=r,K=u,D=K,!M)return s=(l|0)!=0,D?s?(t[l>>2]=e|0,t[l+4>>2]=n&0,K=0,l=0,ft=K,l|0):(K=0,l=0,ft=K,l|0):(s&&(t[l>>2]=(O>>>0)%(h>>>0),t[l+4>>2]=0),K=0,l=(O>>>0)/(h>>>0)>>>0,ft=K,l|0);s=(D|0)==0;do if(h){if(!s){if(s=(vr(D|0)|0)-(vr(M|0)|0)|0,s>>>0<=31){P=s+1|0,D=31-s|0,n=s-31>>31,h=P,e=O>>>(P>>>0)&n|M<>>(P>>>0)&n,s=0,D=O<>2]=e|0,t[l+4>>2]=S|n&0,K=0,l=0,ft=K,l|0):(K=0,l=0,ft=K,l|0)}if(s=h-1|0,s&h|0){D=(vr(h|0)|0)+33-(vr(M|0)|0)|0,Ee=64-D|0,P=32-D|0,S=P>>31,Pe=D-32|0,n=Pe>>31,h=D,e=P-1>>31&M>>>(Pe>>>0)|(M<>>(D>>>0))&n,n=n&M>>>(D>>>0),s=O<>>(Pe>>>0))&S|O<>31;break}return l|0&&(t[l>>2]=s&O,t[l+4>>2]=0),(h|0)==1?(Pe=S|n&0,Ee=e|0|0,ft=Pe,Ee|0):(Ee=V8(h|0)|0,Pe=M>>>(Ee>>>0)|0,Ee=M<<32-Ee|O>>>(Ee>>>0)|0,ft=Pe,Ee|0)}else{if(s)return l|0&&(t[l>>2]=(M>>>0)%(h>>>0),t[l+4>>2]=0),Pe=0,Ee=(M>>>0)/(h>>>0)>>>0,ft=Pe,Ee|0;if(!O)return l|0&&(t[l>>2]=0,t[l+4>>2]=(M>>>0)%(D>>>0)),Pe=0,Ee=(M>>>0)/(D>>>0)>>>0,ft=Pe,Ee|0;if(s=D-1|0,!(s&D))return l|0&&(t[l>>2]=e|0,t[l+4>>2]=s&M|n&0),Pe=0,Ee=M>>>((V8(D|0)|0)>>>0),ft=Pe,Ee|0;if(s=(vr(D|0)|0)-(vr(M|0)|0)|0,s>>>0<=30){n=s+1|0,D=31-s|0,h=n,e=M<>>(n>>>0),n=M>>>(n>>>0),s=0,D=O<>2]=e|0,t[l+4>>2]=S|n&0,Pe=0,Ee=0,ft=Pe,Ee|0):(Pe=0,Ee=0,ft=Pe,Ee|0)}while(0);if(!h)M=D,S=0,D=0;else{P=r|0|0,O=K|u&0,M=KE(P|0,O|0,-1,-1)|0,r=ft,S=D,D=0;do u=S,S=s>>>31|S<<1,s=D|s<<1,u=e<<1|u>>>31|0,K=e>>>31|n<<1|0,R_(M|0,r|0,u|0,K|0)|0,Ee=ft,Pe=Ee>>31|((Ee|0)<0?-1:0)<<1,D=Pe&1,e=R_(u|0,K|0,Pe&P|0,(((Ee|0)<0?-1:0)>>31|((Ee|0)<0?-1:0)<<1)&O|0)|0,n=ft,h=h-1|0;while((h|0)!=0);M=S,S=0}return h=0,l|0&&(t[l>>2]=e,t[l+4>>2]=n),Pe=(s|0)>>>31|(M|h)<<1|(h<<1|s>>>31)&0|S,Ee=(s<<1|0>>>31)&-2|D,ft=Pe,Ee|0}function XE(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,G8(e,n,r,u,0)|0}function Z2(e){e=e|0;var n=0,r=0;return r=e+15&-16|0,n=t[q>>2]|0,e=n+r|0,(r|0)>0&(e|0)<(n|0)|(e|0)<0?(ur()|0,Vl(12),-1):(t[q>>2]=e,((e|0)>(Fr()|0)?(fr()|0)==0:0)?(t[q>>2]=n,Vl(12),-1):n|0)}function Iy(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;if((n|0)<(e|0)&(e|0)<(n+r|0)){for(u=e,n=n+r|0,e=e+r|0;(r|0)>0;)e=e-1|0,n=n-1|0,r=r-1|0,p[e>>0]=p[n>>0]|0;e=u}else pr(e,n,r)|0;return e|0}function QE(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;return s=m,m=m+16|0,l=s|0,G8(e,n,r,u,l)|0,m=s,ft=t[l+4>>2]|0,t[l>>2]|0|0}function Y8(e){return e=e|0,(e&255)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>>24|0}function rB(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,K8[e&1](n|0,r|0,u|0,l|0,s|0)}function iB(e,n,r){e=e|0,n=n|0,r=w(r),X8[e&1](n|0,w(r))}function uB(e,n,r){e=e|0,n=n|0,r=+r,Q8[e&31](n|0,+r)}function oB(e,n,r,u){return e=e|0,n=n|0,r=w(r),u=w(u),w(J8[e&0](n|0,w(r),w(u)))}function lB(e,n){e=e|0,n=n|0,M1[e&127](n|0)}function sB(e,n,r){e=e|0,n=n|0,r=r|0,N1[e&31](n|0,r|0)}function aB(e,n){return e=e|0,n=n|0,Xp[e&31](n|0)|0}function fB(e,n,r,u,l){e=e|0,n=n|0,r=+r,u=+u,l=l|0,Z8[e&1](n|0,+r,+u,l|0)}function cB(e,n,r,u){e=e|0,n=n|0,r=+r,u=+u,VB[e&1](n|0,+r,+u)}function dB(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,M_[e&7](n|0,r|0,u|0)|0}function pB(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,+GB[e&1](n|0,r|0,u|0)}function hB(e,n){return e=e|0,n=n|0,+$8[e&15](n|0)}function vB(e,n,r){return e=e|0,n=n|0,r=+r,YB[e&1](n|0,+r)|0}function mB(e,n,r){return e=e|0,n=n|0,r=r|0,ZE[e&15](n|0,r|0)|0}function yB(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=+u,l=+l,s=s|0,KB[e&1](n|0,r|0,+u,+l,s|0)}function gB(e,n,r,u,l,s,h){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,h=h|0,XB[e&1](n|0,r|0,u|0,l|0,s|0,h|0)}function _B(e,n,r){return e=e|0,n=n|0,r=r|0,+eS[e&7](n|0,r|0)}function EB(e){return e=e|0,N_[e&7]()|0}function DB(e,n,r,u,l,s){return e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,tS[e&1](n|0,r|0,u|0,l|0,s|0)|0}function wB(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=+l,QB[e&1](n|0,r|0,u|0,+l)}function SB(e,n,r,u,l,s,h){e=e|0,n=n|0,r=r|0,u=w(u),l=l|0,s=w(s),h=h|0,nS[e&1](n|0,r|0,w(u),l|0,w(s),h|0)}function TB(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,jy[e&15](n|0,r|0,u|0)}function CB(e){e=e|0,rS[e&0]()}function xB(e,n,r,u){e=e|0,n=n|0,r=r|0,u=+u,iS[e&15](n|0,r|0,+u)}function AB(e,n,r){return e=e|0,n=+n,r=+r,JB[e&1](+n,+r)|0}function RB(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,$E[e&15](n|0,r|0,u|0,l|0)}function OB(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,Ut(0)}function kB(e,n){e=e|0,n=w(n),Ut(1)}function Ks(e,n){e=e|0,n=+n,Ut(2)}function MB(e,n,r){return e=e|0,n=w(n),r=w(r),Ut(3),St}function Kn(e){e=e|0,Ut(4)}function By(e,n){e=e|0,n=n|0,Ut(5)}function xa(e){return e=e|0,Ut(6),0}function NB(e,n,r,u){e=e|0,n=+n,r=+r,u=u|0,Ut(7)}function LB(e,n,r){e=e|0,n=+n,r=+r,Ut(8)}function FB(e,n,r){return e=e|0,n=n|0,r=r|0,Ut(9),0}function bB(e,n,r){return e=e|0,n=n|0,r=r|0,Ut(10),0}function Kp(e){return e=e|0,Ut(11),0}function PB(e,n){return e=e|0,n=+n,Ut(12),0}function Uy(e,n){return e=e|0,n=n|0,Ut(13),0}function IB(e,n,r,u,l){e=e|0,n=n|0,r=+r,u=+u,l=l|0,Ut(14)}function BB(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,Ut(15)}function JE(e,n){return e=e|0,n=n|0,Ut(16),0}function UB(){return Ut(17),0}function jB(e,n,r,u,l){return e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,Ut(18),0}function zB(e,n,r,u){e=e|0,n=n|0,r=r|0,u=+u,Ut(19)}function qB(e,n,r,u,l,s){e=e|0,n=n|0,r=w(r),u=u|0,l=w(l),s=s|0,Ut(20)}function k_(e,n,r){e=e|0,n=n|0,r=r|0,Ut(21)}function HB(){Ut(22)}function Bv(e,n,r){e=e|0,n=n|0,r=+r,Ut(23)}function WB(e,n){return e=+e,n=+n,Ut(24),0}function Uv(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,Ut(25)}var K8=[OB,UL],X8=[kB,Ju],Q8=[Ks,ua,ys,gs,Ql,Io,hf,tl,Ia,Zu,vf,jc,lc,Sl,_s,oa,n2,la,sc,Ks,Ks,Ks,Ks,Ks,Ks,Ks,Ks,Ks,Ks,Ks,Ks,Ks],J8=[MB],M1=[Kn,Pv,an,$l,go,Lf,x1,Fl,hN,vN,mN,xL,AL,RL,XP,QP,JP,Ne,uc,La,ju,U0,hh,yf,$c,Af,pa,Rh,Sm,h1,v1,Xh,pp,M2,Gm,D1,Sc,ry,oy,Sv,Av,rn,Q4,lE,h_,Nt,_u,Qu,RO,WO,ak,Ak,qk,aM,_M,wM,UM,qM,uN,gN,DN,BN,nL,v2,BF,vb,kb,Vb,pP,RP,UP,qP,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn,Kn],N1=[By,gd,$1,Uc,Dl,el,_d,Bs,wl,Fa,ba,Pa,Tl,Be,ut,Jt,jn,ti,tr,Ba,Dd,mh,fE,vE,Mk,zF,fL,g8,By,By,By,By],Xp=[xa,xI,pf,y,J,fe,mt,Ct,Mt,Er,iu,j0,Ua,r2,Vc,Cs,Gk,zN,VF,Sa,xa,xa,xa,xa,xa,xa,xa,xa,xa,xa,xa,xa],Z8=[NB,Td],VB=[LB,sN],M_=[FB,N8,AI,kI,zh,dv,NO,Xb],GB=[bB,lv],$8=[Kp,e0,He,ii,vh,il,sa,Cd,xd,ac,Kp,Kp,Kp,Kp,Kp,Kp],YB=[PB,mM],ZE=[Uy,JI,Ed,ll,zd,Nm,ap,Cp,ly,xr,bo,Fb,Uy,Uy,Uy,Uy],KB=[IB,Sh],XB=[BB,yP],eS=[JE,qi,Ad,a2,Gc,cl,JE,JE],N_=[UB,Yc,to,g0,xM,GM,CN,GP],tS=[jB,ei],QB=[zB,Dy],nS=[qB,i2],jy=[k_,A,$u,jr,gu,d1,k2,ir,Cy,po,aF,_b,NP,k_,k_,k_],rS=[HB],iS=[Bv,e2,ho,t2,Po,zc,bi,g,Ip,KO,dM,Bv,Bv,Bv,Bv,Bv],JB=[WB,dN],$E=[Uv,_p,Rc,pk,tM,NM,ZM,NN,lL,JF,rI,Uv,Uv,Uv,Uv,Uv];return{_llvm_bswap_i32:Y8,dynCall_idd:AB,dynCall_i:EB,_i64Subtract:R_,___udivdi3:XE,dynCall_vif:iB,setThrew:fs,dynCall_viii:TB,_bitshift64Lshr:O_,_bitshift64Shl:W8,dynCall_vi:lB,dynCall_viiddi:yB,dynCall_diii:pB,dynCall_iii:mB,_memset:Iv,_sbrk:Z2,_memcpy:pr,__GLOBAL__sub_I_Yoga_cpp:Qi,dynCall_vii:sB,___uremdi3:QE,dynCall_vid:uB,stackAlloc:so,_nbind_init:hI,getTempRet0:X,dynCall_di:hB,dynCall_iid:vB,setTempRet0:P0,_i64Add:KE,dynCall_fiff:oB,dynCall_iiii:dB,_emscripten_get_global_libc:CI,dynCall_viid:xB,dynCall_viiid:wB,dynCall_viififi:SB,dynCall_ii:aB,__GLOBAL__sub_I_Binding_cc:kF,dynCall_viiii:RB,dynCall_iiiiii:DB,stackSave:Jo,dynCall_viiiii:rB,__GLOBAL__sub_I_nbind_cc:Us,dynCall_vidd:cB,_free:x_,runPostSets:nB,dynCall_viiiiii:gB,establishStackSpace:Fu,_memmove:Iy,stackRestore:Gl,_malloc:C_,__GLOBAL__sub_I_common_cc:XN,dynCall_viddi:fB,dynCall_dii:_B,dynCall_v:CB}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(i){this.name="ExitStatus",this.message="Program terminated with exit("+i+")",this.status=i}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function i(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=i)},Module.callMain=Module.callMain=function(o){o=o||[],ensureInitRuntime();var f=o.length+1;function p(){for(var N=0;N<4-1;N++)E.push(0)}var E=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];p();for(var t=0;t0||(preRun(),runDependencies>0)||Module.calledRun)return;function o(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(i),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),o()},1)):o()}Module.run=Module.run=run;function exit(i,o){o&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=i,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(i)),ENVIRONMENT_IS_NODE&&process.exit(i),Module.quit(i,new ExitStatus(i)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(i){Module.onAbort&&Module.onAbort(i),i!==void 0?(Module.print(i),Module.printErr(i),i=JSON.stringify(i)):i="",ABORT=!0,EXITSTATUS=1;var o=` -If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,f="abort("+i+") at "+stackTrace()+o;throw abortDecorators&&abortDecorators.forEach(function(p){f=p(f,i)}),f}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var eh=ce((Wne,O9)=>{"use strict";var tX=A9(),nX=R9(),hw=!1,vw=null;nX({},function(i,o){if(!hw){if(hw=!0,i)throw i;vw=o}});if(!hw)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");O9.exports=tX(vw.bind,vw.lib)});var M9=ce((Vne,k9)=>{"use strict";k9.exports=({onlyFirst:i=!1}={})=>{let o=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(o,i?void 0:"g")}});var mw=ce((Gne,N9)=>{"use strict";var rX=M9();N9.exports=i=>typeof i=="string"?i.replace(rX(),""):i});var gw=ce((Yne,yw)=>{"use strict";var L9=i=>Number.isNaN(i)?!1:i>=4352&&(i<=4447||i===9001||i===9002||11904<=i&&i<=12871&&i!==12351||12880<=i&&i<=19903||19968<=i&&i<=42182||43360<=i&&i<=43388||44032<=i&&i<=55203||63744<=i&&i<=64255||65040<=i&&i<=65049||65072<=i&&i<=65131||65281<=i&&i<=65376||65504<=i&&i<=65510||110592<=i&&i<=110593||127488<=i&&i<=127569||131072<=i&&i<=262141);yw.exports=L9;yw.exports.default=L9});var b9=ce((Kne,F9)=>{"use strict";F9.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var m4=ce((Xne,_w)=>{"use strict";var iX=mw(),uX=gw(),oX=b9(),P9=i=>{if(i=i.replace(oX()," "),typeof i!="string"||i.length===0)return 0;i=iX(i);let o=0;for(let f=0;f=127&&p<=159||p>=768&&p<=879||(p>65535&&f++,o+=uX(p)?2:1)}return o};_w.exports=P9;_w.exports.default=P9});var Dw=ce((Qne,Ew)=>{"use strict";var lX=m4(),I9=i=>{let o=0;for(let f of i.split(` -`))o=Math.max(o,lX(f));return o};Ew.exports=I9;Ew.exports.default=I9});var B9=ce(vg=>{"use strict";var sX=vg&&vg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(vg,"__esModule",{value:!0});var aX=sX(Dw()),ww={};vg.default=i=>{if(i.length===0)return{width:0,height:0};if(ww[i])return ww[i];let o=aX.default(i),f=i.split(` -`).length;return ww[i]={width:o,height:f},{width:o,height:f}}});var U9=ce(mg=>{"use strict";var fX=mg&&mg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(mg,"__esModule",{value:!0});var Ii=fX(eh()),cX=(i,o)=>{"position"in o&&i.setPositionType(o.position==="absolute"?Ii.default.POSITION_TYPE_ABSOLUTE:Ii.default.POSITION_TYPE_RELATIVE)},dX=(i,o)=>{"marginLeft"in o&&i.setMargin(Ii.default.EDGE_START,o.marginLeft||0),"marginRight"in o&&i.setMargin(Ii.default.EDGE_END,o.marginRight||0),"marginTop"in o&&i.setMargin(Ii.default.EDGE_TOP,o.marginTop||0),"marginBottom"in o&&i.setMargin(Ii.default.EDGE_BOTTOM,o.marginBottom||0)},pX=(i,o)=>{"paddingLeft"in o&&i.setPadding(Ii.default.EDGE_LEFT,o.paddingLeft||0),"paddingRight"in o&&i.setPadding(Ii.default.EDGE_RIGHT,o.paddingRight||0),"paddingTop"in o&&i.setPadding(Ii.default.EDGE_TOP,o.paddingTop||0),"paddingBottom"in o&&i.setPadding(Ii.default.EDGE_BOTTOM,o.paddingBottom||0)},hX=(i,o)=>{var f;"flexGrow"in o&&i.setFlexGrow((f=o.flexGrow)!==null&&f!==void 0?f:0),"flexShrink"in o&&i.setFlexShrink(typeof o.flexShrink=="number"?o.flexShrink:1),"flexDirection"in o&&(o.flexDirection==="row"&&i.setFlexDirection(Ii.default.FLEX_DIRECTION_ROW),o.flexDirection==="row-reverse"&&i.setFlexDirection(Ii.default.FLEX_DIRECTION_ROW_REVERSE),o.flexDirection==="column"&&i.setFlexDirection(Ii.default.FLEX_DIRECTION_COLUMN),o.flexDirection==="column-reverse"&&i.setFlexDirection(Ii.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in o&&(typeof o.flexBasis=="number"?i.setFlexBasis(o.flexBasis):typeof o.flexBasis=="string"?i.setFlexBasisPercent(Number.parseInt(o.flexBasis,10)):i.setFlexBasis(NaN)),"alignItems"in o&&((o.alignItems==="stretch"||!o.alignItems)&&i.setAlignItems(Ii.default.ALIGN_STRETCH),o.alignItems==="flex-start"&&i.setAlignItems(Ii.default.ALIGN_FLEX_START),o.alignItems==="center"&&i.setAlignItems(Ii.default.ALIGN_CENTER),o.alignItems==="flex-end"&&i.setAlignItems(Ii.default.ALIGN_FLEX_END)),"alignSelf"in o&&((o.alignSelf==="auto"||!o.alignSelf)&&i.setAlignSelf(Ii.default.ALIGN_AUTO),o.alignSelf==="flex-start"&&i.setAlignSelf(Ii.default.ALIGN_FLEX_START),o.alignSelf==="center"&&i.setAlignSelf(Ii.default.ALIGN_CENTER),o.alignSelf==="flex-end"&&i.setAlignSelf(Ii.default.ALIGN_FLEX_END)),"justifyContent"in o&&((o.justifyContent==="flex-start"||!o.justifyContent)&&i.setJustifyContent(Ii.default.JUSTIFY_FLEX_START),o.justifyContent==="center"&&i.setJustifyContent(Ii.default.JUSTIFY_CENTER),o.justifyContent==="flex-end"&&i.setJustifyContent(Ii.default.JUSTIFY_FLEX_END),o.justifyContent==="space-between"&&i.setJustifyContent(Ii.default.JUSTIFY_SPACE_BETWEEN),o.justifyContent==="space-around"&&i.setJustifyContent(Ii.default.JUSTIFY_SPACE_AROUND))},vX=(i,o)=>{var f,p;"width"in o&&(typeof o.width=="number"?i.setWidth(o.width):typeof o.width=="string"?i.setWidthPercent(Number.parseInt(o.width,10)):i.setWidthAuto()),"height"in o&&(typeof o.height=="number"?i.setHeight(o.height):typeof o.height=="string"?i.setHeightPercent(Number.parseInt(o.height,10)):i.setHeightAuto()),"minWidth"in o&&(typeof o.minWidth=="string"?i.setMinWidthPercent(Number.parseInt(o.minWidth,10)):i.setMinWidth((f=o.minWidth)!==null&&f!==void 0?f:0)),"minHeight"in o&&(typeof o.minHeight=="string"?i.setMinHeightPercent(Number.parseInt(o.minHeight,10)):i.setMinHeight((p=o.minHeight)!==null&&p!==void 0?p:0))},mX=(i,o)=>{"display"in o&&i.setDisplay(o.display==="flex"?Ii.default.DISPLAY_FLEX:Ii.default.DISPLAY_NONE)},yX=(i,o)=>{if("borderStyle"in o){let f=typeof o.borderStyle=="string"?1:0;i.setBorder(Ii.default.EDGE_TOP,f),i.setBorder(Ii.default.EDGE_BOTTOM,f),i.setBorder(Ii.default.EDGE_LEFT,f),i.setBorder(Ii.default.EDGE_RIGHT,f)}};mg.default=(i,o={})=>{cX(i,o),dX(i,o),pX(i,o),hX(i,o),vX(i,o),mX(i,o),yX(i,o)}});var z9=ce(($ne,j9)=>{"use strict";j9.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Sw=ce((ere,q9)=>{var yg=z9(),H9={};for(let i of Object.keys(yg))H9[yg[i]]=i;var In={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};q9.exports=In;for(let i of Object.keys(In)){if(!("channels"in In[i]))throw new Error("missing channels property: "+i);if(!("labels"in In[i]))throw new Error("missing channel labels property: "+i);if(In[i].labels.length!==In[i].channels)throw new Error("channel and label counts mismatch: "+i);let{channels:o,labels:f}=In[i];delete In[i].channels,delete In[i].labels,Object.defineProperty(In[i],"channels",{value:o}),Object.defineProperty(In[i],"labels",{value:f})}In.rgb.hsl=function(i){let o=i[0]/255,f=i[1]/255,p=i[2]/255,E=Math.min(o,f,p),t=Math.max(o,f,p),k=t-E,L,N;t===E?L=0:o===t?L=(f-p)/k:f===t?L=2+(p-o)/k:p===t&&(L=4+(o-f)/k),L=Math.min(L*60,360),L<0&&(L+=360);let C=(E+t)/2;return t===E?N=0:C<=.5?N=k/(t+E):N=k/(2-t-E),[L,N*100,C*100]};In.rgb.hsv=function(i){let o,f,p,E,t,k=i[0]/255,L=i[1]/255,N=i[2]/255,C=Math.max(k,L,N),U=C-Math.min(k,L,N),q=function(W){return(C-W)/6/U+1/2};return U===0?(E=0,t=0):(t=U/C,o=q(k),f=q(L),p=q(N),k===C?E=p-f:L===C?E=1/3+o-p:N===C&&(E=2/3+f-o),E<0?E+=1:E>1&&(E-=1)),[E*360,t*100,C*100]};In.rgb.hwb=function(i){let o=i[0],f=i[1],p=i[2],E=In.rgb.hsl(i)[0],t=1/255*Math.min(o,Math.min(f,p));return p=1-1/255*Math.max(o,Math.max(f,p)),[E,t*100,p*100]};In.rgb.cmyk=function(i){let o=i[0]/255,f=i[1]/255,p=i[2]/255,E=Math.min(1-o,1-f,1-p),t=(1-o-E)/(1-E)||0,k=(1-f-E)/(1-E)||0,L=(1-p-E)/(1-E)||0;return[t*100,k*100,L*100,E*100]};function gX(i,o){return(i[0]-o[0])**2+(i[1]-o[1])**2+(i[2]-o[2])**2}In.rgb.keyword=function(i){let o=H9[i];if(o)return o;let f=Infinity,p;for(let E of Object.keys(yg)){let t=yg[E],k=gX(i,t);k.04045?((o+.055)/1.055)**2.4:o/12.92,f=f>.04045?((f+.055)/1.055)**2.4:f/12.92,p=p>.04045?((p+.055)/1.055)**2.4:p/12.92;let E=o*.4124+f*.3576+p*.1805,t=o*.2126+f*.7152+p*.0722,k=o*.0193+f*.1192+p*.9505;return[E*100,t*100,k*100]};In.rgb.lab=function(i){let o=In.rgb.xyz(i),f=o[0],p=o[1],E=o[2];f/=95.047,p/=100,E/=108.883,f=f>.008856?f**(1/3):7.787*f+16/116,p=p>.008856?p**(1/3):7.787*p+16/116,E=E>.008856?E**(1/3):7.787*E+16/116;let t=116*p-16,k=500*(f-p),L=200*(p-E);return[t,k,L]};In.hsl.rgb=function(i){let o=i[0]/360,f=i[1]/100,p=i[2]/100,E,t,k;if(f===0)return k=p*255,[k,k,k];p<.5?E=p*(1+f):E=p+f-p*f;let L=2*p-E,N=[0,0,0];for(let C=0;C<3;C++)t=o+1/3*-(C-1),t<0&&t++,t>1&&t--,6*t<1?k=L+(E-L)*6*t:2*t<1?k=E:3*t<2?k=L+(E-L)*(2/3-t)*6:k=L,N[C]=k*255;return N};In.hsl.hsv=function(i){let o=i[0],f=i[1]/100,p=i[2]/100,E=f,t=Math.max(p,.01);p*=2,f*=p<=1?p:2-p,E*=t<=1?t:2-t;let k=(p+f)/2,L=p===0?2*E/(t+E):2*f/(p+f);return[o,L*100,k*100]};In.hsv.rgb=function(i){let o=i[0]/60,f=i[1]/100,p=i[2]/100,E=Math.floor(o)%6,t=o-Math.floor(o),k=255*p*(1-f),L=255*p*(1-f*t),N=255*p*(1-f*(1-t));switch(p*=255,E){case 0:return[p,N,k];case 1:return[L,p,k];case 2:return[k,p,N];case 3:return[k,L,p];case 4:return[N,k,p];case 5:return[p,k,L]}};In.hsv.hsl=function(i){let o=i[0],f=i[1]/100,p=i[2]/100,E=Math.max(p,.01),t,k;k=(2-f)*p;let L=(2-f)*E;return t=f*E,t/=L<=1?L:2-L,t=t||0,k/=2,[o,t*100,k*100]};In.hwb.rgb=function(i){let o=i[0]/360,f=i[1]/100,p=i[2]/100,E=f+p,t;E>1&&(f/=E,p/=E);let k=Math.floor(6*o),L=1-p;t=6*o-k,(k&1)!=0&&(t=1-t);let N=f+t*(L-f),C,U,q;switch(k){default:case 6:case 0:C=L,U=N,q=f;break;case 1:C=N,U=L,q=f;break;case 2:C=f,U=L,q=N;break;case 3:C=f,U=N,q=L;break;case 4:C=N,U=f,q=L;break;case 5:C=L,U=f,q=N;break}return[C*255,U*255,q*255]};In.cmyk.rgb=function(i){let o=i[0]/100,f=i[1]/100,p=i[2]/100,E=i[3]/100,t=1-Math.min(1,o*(1-E)+E),k=1-Math.min(1,f*(1-E)+E),L=1-Math.min(1,p*(1-E)+E);return[t*255,k*255,L*255]};In.xyz.rgb=function(i){let o=i[0]/100,f=i[1]/100,p=i[2]/100,E,t,k;return E=o*3.2406+f*-1.5372+p*-.4986,t=o*-.9689+f*1.8758+p*.0415,k=o*.0557+f*-.204+p*1.057,E=E>.0031308?1.055*E**(1/2.4)-.055:E*12.92,t=t>.0031308?1.055*t**(1/2.4)-.055:t*12.92,k=k>.0031308?1.055*k**(1/2.4)-.055:k*12.92,E=Math.min(Math.max(0,E),1),t=Math.min(Math.max(0,t),1),k=Math.min(Math.max(0,k),1),[E*255,t*255,k*255]};In.xyz.lab=function(i){let o=i[0],f=i[1],p=i[2];o/=95.047,f/=100,p/=108.883,o=o>.008856?o**(1/3):7.787*o+16/116,f=f>.008856?f**(1/3):7.787*f+16/116,p=p>.008856?p**(1/3):7.787*p+16/116;let E=116*f-16,t=500*(o-f),k=200*(f-p);return[E,t,k]};In.lab.xyz=function(i){let o=i[0],f=i[1],p=i[2],E,t,k;t=(o+16)/116,E=f/500+t,k=t-p/200;let L=t**3,N=E**3,C=k**3;return t=L>.008856?L:(t-16/116)/7.787,E=N>.008856?N:(E-16/116)/7.787,k=C>.008856?C:(k-16/116)/7.787,E*=95.047,t*=100,k*=108.883,[E,t,k]};In.lab.lch=function(i){let o=i[0],f=i[1],p=i[2],E;E=Math.atan2(p,f)*360/2/Math.PI,E<0&&(E+=360);let k=Math.sqrt(f*f+p*p);return[o,k,E]};In.lch.lab=function(i){let o=i[0],f=i[1],E=i[2]/360*2*Math.PI,t=f*Math.cos(E),k=f*Math.sin(E);return[o,t,k]};In.rgb.ansi16=function(i,o=null){let[f,p,E]=i,t=o===null?In.rgb.hsv(i)[2]:o;if(t=Math.round(t/50),t===0)return 30;let k=30+(Math.round(E/255)<<2|Math.round(p/255)<<1|Math.round(f/255));return t===2&&(k+=60),k};In.hsv.ansi16=function(i){return In.rgb.ansi16(In.hsv.rgb(i),i[2])};In.rgb.ansi256=function(i){let o=i[0],f=i[1],p=i[2];return o===f&&f===p?o<8?16:o>248?231:Math.round((o-8)/247*24)+232:16+36*Math.round(o/255*5)+6*Math.round(f/255*5)+Math.round(p/255*5)};In.ansi16.rgb=function(i){let o=i%10;if(o===0||o===7)return i>50&&(o+=3.5),o=o/10.5*255,[o,o,o];let f=(~~(i>50)+1)*.5,p=(o&1)*f*255,E=(o>>1&1)*f*255,t=(o>>2&1)*f*255;return[p,E,t]};In.ansi256.rgb=function(i){if(i>=232){let t=(i-232)*10+8;return[t,t,t]}i-=16;let o,f=Math.floor(i/36)/5*255,p=Math.floor((o=i%36)/6)/5*255,E=o%6/5*255;return[f,p,E]};In.rgb.hex=function(i){let f=(((Math.round(i[0])&255)<<16)+((Math.round(i[1])&255)<<8)+(Math.round(i[2])&255)).toString(16).toUpperCase();return"000000".substring(f.length)+f};In.hex.rgb=function(i){let o=i.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!o)return[0,0,0];let f=o[0];o[0].length===3&&(f=f.split("").map(L=>L+L).join(""));let p=parseInt(f,16),E=p>>16&255,t=p>>8&255,k=p&255;return[E,t,k]};In.rgb.hcg=function(i){let o=i[0]/255,f=i[1]/255,p=i[2]/255,E=Math.max(Math.max(o,f),p),t=Math.min(Math.min(o,f),p),k=E-t,L,N;return k<1?L=t/(1-k):L=0,k<=0?N=0:E===o?N=(f-p)/k%6:E===f?N=2+(p-o)/k:N=4+(o-f)/k,N/=6,N%=1,[N*360,k*100,L*100]};In.hsl.hcg=function(i){let o=i[1]/100,f=i[2]/100,p=f<.5?2*o*f:2*o*(1-f),E=0;return p<1&&(E=(f-.5*p)/(1-p)),[i[0],p*100,E*100]};In.hsv.hcg=function(i){let o=i[1]/100,f=i[2]/100,p=o*f,E=0;return p<1&&(E=(f-p)/(1-p)),[i[0],p*100,E*100]};In.hcg.rgb=function(i){let o=i[0]/360,f=i[1]/100,p=i[2]/100;if(f===0)return[p*255,p*255,p*255];let E=[0,0,0],t=o%1*6,k=t%1,L=1-k,N=0;switch(Math.floor(t)){case 0:E[0]=1,E[1]=k,E[2]=0;break;case 1:E[0]=L,E[1]=1,E[2]=0;break;case 2:E[0]=0,E[1]=1,E[2]=k;break;case 3:E[0]=0,E[1]=L,E[2]=1;break;case 4:E[0]=k,E[1]=0,E[2]=1;break;default:E[0]=1,E[1]=0,E[2]=L}return N=(1-f)*p,[(f*E[0]+N)*255,(f*E[1]+N)*255,(f*E[2]+N)*255]};In.hcg.hsv=function(i){let o=i[1]/100,f=i[2]/100,p=o+f*(1-o),E=0;return p>0&&(E=o/p),[i[0],E*100,p*100]};In.hcg.hsl=function(i){let o=i[1]/100,p=i[2]/100*(1-o)+.5*o,E=0;return p>0&&p<.5?E=o/(2*p):p>=.5&&p<1&&(E=o/(2*(1-p))),[i[0],E*100,p*100]};In.hcg.hwb=function(i){let o=i[1]/100,f=i[2]/100,p=o+f*(1-o);return[i[0],(p-o)*100,(1-p)*100]};In.hwb.hcg=function(i){let o=i[1]/100,f=i[2]/100,p=1-f,E=p-o,t=0;return E<1&&(t=(p-E)/(1-E)),[i[0],E*100,t*100]};In.apple.rgb=function(i){return[i[0]/65535*255,i[1]/65535*255,i[2]/65535*255]};In.rgb.apple=function(i){return[i[0]/255*65535,i[1]/255*65535,i[2]/255*65535]};In.gray.rgb=function(i){return[i[0]/100*255,i[0]/100*255,i[0]/100*255]};In.gray.hsl=function(i){return[0,0,i[0]]};In.gray.hsv=In.gray.hsl;In.gray.hwb=function(i){return[0,100,i[0]]};In.gray.cmyk=function(i){return[0,0,0,i[0]]};In.gray.lab=function(i){return[i[0],0,0]};In.gray.hex=function(i){let o=Math.round(i[0]/100*255)&255,p=((o<<16)+(o<<8)+o).toString(16).toUpperCase();return"000000".substring(p.length)+p};In.rgb.gray=function(i){return[(i[0]+i[1]+i[2])/3/255*100]}});var V9=ce((tre,W9)=>{var y4=Sw();function _X(){let i={},o=Object.keys(y4);for(let f=o.length,p=0;p{var Tw=Sw(),SX=V9(),sm={},TX=Object.keys(Tw);function CX(i){let o=function(...f){let p=f[0];return p==null?p:(p.length>1&&(f=p),i(f))};return"conversion"in i&&(o.conversion=i.conversion),o}function xX(i){let o=function(...f){let p=f[0];if(p==null)return p;p.length>1&&(f=p);let E=i(f);if(typeof E=="object")for(let t=E.length,k=0;k{sm[i]={},Object.defineProperty(sm[i],"channels",{value:Tw[i].channels}),Object.defineProperty(sm[i],"labels",{value:Tw[i].labels});let o=SX(i);Object.keys(o).forEach(p=>{let E=o[p];sm[i][p]=xX(E),sm[i][p].raw=CX(E)})});G9.exports=sm});var _4=ce((rre,K9)=>{"use strict";var X9=(i,o)=>(...f)=>`[${i(...f)+o}m`,Q9=(i,o)=>(...f)=>{let p=i(...f);return`[${38+o};5;${p}m`},J9=(i,o)=>(...f)=>{let p=i(...f);return`[${38+o};2;${p[0]};${p[1]};${p[2]}m`},g4=i=>i,Z9=(i,o,f)=>[i,o,f],am=(i,o,f)=>{Object.defineProperty(i,o,{get:()=>{let p=f();return Object.defineProperty(i,o,{value:p,enumerable:!0,configurable:!0}),p},enumerable:!0,configurable:!0})},Cw,fm=(i,o,f,p)=>{Cw===void 0&&(Cw=Y9());let E=p?10:0,t={};for(let[k,L]of Object.entries(Cw)){let N=k==="ansi16"?"ansi":k;k===o?t[N]=i(f,E):typeof L=="object"&&(t[N]=i(L[o],E))}return t};function AX(){let i=new Map,o={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};o.color.gray=o.color.blackBright,o.bgColor.bgGray=o.bgColor.bgBlackBright,o.color.grey=o.color.blackBright,o.bgColor.bgGrey=o.bgColor.bgBlackBright;for(let[f,p]of Object.entries(o)){for(let[E,t]of Object.entries(p))o[E]={open:`[${t[0]}m`,close:`[${t[1]}m`},p[E]=o[E],i.set(t[0],t[1]);Object.defineProperty(o,f,{value:p,enumerable:!1})}return Object.defineProperty(o,"codes",{value:i,enumerable:!1}),o.color.close="",o.bgColor.close="",am(o.color,"ansi",()=>fm(X9,"ansi16",g4,!1)),am(o.color,"ansi256",()=>fm(Q9,"ansi256",g4,!1)),am(o.color,"ansi16m",()=>fm(J9,"rgb",Z9,!1)),am(o.bgColor,"ansi",()=>fm(X9,"ansi16",g4,!0)),am(o.bgColor,"ansi256",()=>fm(Q9,"ansi256",g4,!0)),am(o.bgColor,"ansi16m",()=>fm(J9,"rgb",Z9,!0)),o}Object.defineProperty(K9,"exports",{enumerable:!0,get:AX})});var tA=ce((ire,$9)=>{"use strict";var gg=m4(),RX=mw(),OX=_4(),xw=new Set(["","\x9B"]),kX=39,eA=i=>`${xw.values().next().value}[${i}m`,MX=i=>i.split(" ").map(o=>gg(o)),Aw=(i,o,f)=>{let p=[...o],E=!1,t=gg(RX(i[i.length-1]));for(let[k,L]of p.entries()){let N=gg(L);if(t+N<=f?i[i.length-1]+=L:(i.push(L),t=0),xw.has(L))E=!0;else if(E&&L==="m"){E=!1;continue}E||(t+=N,t===f&&k0&&i.length>1&&(i[i.length-2]+=i.pop())},NX=i=>{let o=i.split(" "),f=o.length;for(;f>0&&!(gg(o[f-1])>0);)f--;return f===o.length?i:o.slice(0,f).join(" ")+o.slice(f).join("")},LX=(i,o,f={})=>{if(f.trim!==!1&&i.trim()==="")return"";let p="",E="",t,k=MX(i),L=[""];for(let[N,C]of i.split(" ").entries()){f.trim!==!1&&(L[L.length-1]=L[L.length-1].trimLeft());let U=gg(L[L.length-1]);if(N!==0&&(U>=o&&(f.wordWrap===!1||f.trim===!1)&&(L.push(""),U=0),(U>0||f.trim===!1)&&(L[L.length-1]+=" ",U++)),f.hard&&k[N]>o){let q=o-U,W=1+Math.floor((k[N]-q-1)/o);Math.floor((k[N]-1)/o)o&&U>0&&k[N]>0){if(f.wordWrap===!1&&Uo&&f.wordWrap===!1){Aw(L,C,o);continue}L[L.length-1]+=C}f.trim!==!1&&(L=L.map(NX)),p=L.join(` -`);for(let[N,C]of[...p].entries()){if(E+=C,xw.has(C)){let q=parseFloat(/\d[^m]*/.exec(p.slice(N,N+4)));t=q===kX?null:q}let U=OX.codes.get(Number(t));t&&U&&(p[N+1]===` -`?E+=eA(U):C===` -`&&(E+=eA(t)))}return E};$9.exports=(i,o,f)=>String(i).normalize().replace(/\r\n/g,` -`).split(` -`).map(p=>LX(p,o,f)).join(` -`)});var iA=ce((ure,nA)=>{"use strict";var rA="[\uD800-\uDBFF][\uDC00-\uDFFF]",FX=i=>i&&i.exact?new RegExp(`^${rA}$`):new RegExp(rA,"g");nA.exports=FX});var Rw=ce((ore,uA)=>{"use strict";var bX=gw(),PX=iA(),oA=_4(),lA=["","\x9B"],E4=i=>`${lA[0]}[${i}m`,sA=(i,o,f)=>{let p=[];i=[...i];for(let E of i){let t=E;E.match(";")&&(E=E.split(";")[0][0]+"0");let k=oA.codes.get(parseInt(E,10));if(k){let L=i.indexOf(k.toString());L>=0?i.splice(L,1):p.push(E4(o?k:t))}else if(o){p.push(E4(0));break}else p.push(E4(t))}if(o&&(p=p.filter((E,t)=>p.indexOf(E)===t),f!==void 0)){let E=E4(oA.codes.get(parseInt(f,10)));p=p.reduce((t,k)=>k===E?[k,...t]:[...t,k],[])}return p.join("")};uA.exports=(i,o,f)=>{let p=[...i.normalize()],E=[];f=typeof f=="number"?f:p.length;let t=!1,k,L=0,N="";for(let[C,U]of p.entries()){let q=!1;if(lA.includes(U)){let W=/\d[^m]*/.exec(i.slice(C,C+18));k=W&&W.length>0?W[0]:void 0,Lo&&L<=f)N+=U;else if(L===o&&!t&&k!==void 0)N=sA(E);else if(L>=f){N+=sA(E,!0,k);break}}return N}});var fA=ce((lre,aA)=>{"use strict";var pd=Rw(),IX=m4();function D4(i,o,f){if(i.charAt(o)===" ")return o;for(let p=1;p<=3;p++)if(f){if(i.charAt(o+p)===" ")return o+p}else if(i.charAt(o-p)===" ")return o-p;return o}aA.exports=(i,o,f)=>{f=E0({position:"end",preferTruncationOnSpace:!1},f);let{position:p,space:E,preferTruncationOnSpace:t}=f,k="\u2026",L=1;if(typeof i!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof i}`);if(typeof o!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof o}`);if(o<1)return"";if(o===1)return k;let N=IX(i);if(N<=o)return i;if(p==="start"){if(t){let C=D4(i,N-o+1,!0);return k+pd(i,C,N).trim()}return E===!0&&(k+=" ",L=2),k+pd(i,N-o+L,N)}if(p==="middle"){E===!0&&(k=" "+k+" ",L=3);let C=Math.floor(o/2);if(t){let U=D4(i,C),q=D4(i,N-(o-C)+1,!0);return pd(i,0,U)+k+pd(i,q,N).trim()}return pd(i,0,C)+k+pd(i,N-(o-C)+L,N)}if(p==="end"){if(t){let C=D4(i,o-1);return pd(i,0,C)+k}return E===!0&&(k=" "+k,L=2),pd(i,0,o-L)+k}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${p}`)}});var kw=ce(_g=>{"use strict";var cA=_g&&_g.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(_g,"__esModule",{value:!0});var BX=cA(tA()),UX=cA(fA()),Ow={};_g.default=(i,o,f)=>{let p=i+String(o)+String(f);if(Ow[p])return Ow[p];let E=i;if(f==="wrap"&&(E=BX.default(i,o,{trim:!1,hard:!0})),f.startsWith("truncate")){let t="end";f==="truncate-middle"&&(t="middle"),f==="truncate-start"&&(t="start"),E=UX.default(i,o,{position:t})}return Ow[p]=E,E}});var Nw=ce(Mw=>{"use strict";Object.defineProperty(Mw,"__esModule",{value:!0});var dA=i=>{let o="";if(i.childNodes.length>0)for(let f of i.childNodes){let p="";f.nodeName==="#text"?p=f.nodeValue:((f.nodeName==="ink-text"||f.nodeName==="ink-virtual-text")&&(p=dA(f)),p.length>0&&typeof f.internal_transform=="function"&&(p=f.internal_transform(p))),o+=p}return o};Mw.default=dA});var Lw=ce(l0=>{"use strict";var Eg=l0&&l0.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(l0,"__esModule",{value:!0});l0.setTextNodeValue=l0.createTextNode=l0.setStyle=l0.setAttribute=l0.removeChildNode=l0.insertBeforeNode=l0.appendChildNode=l0.createNode=l0.TEXT_NAME=void 0;var jX=Eg(eh()),pA=Eg(B9()),zX=Eg(U9()),qX=Eg(kw()),HX=Eg(Nw());l0.TEXT_NAME="#text";l0.createNode=i=>{var o;let f={nodeName:i,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:i==="ink-virtual-text"?void 0:jX.default.Node.create()};return i==="ink-text"&&((o=f.yogaNode)===null||o===void 0||o.setMeasureFunc(WX.bind(null,f))),f};l0.appendChildNode=(i,o)=>{var f;o.parentNode&&l0.removeChildNode(o.parentNode,o),o.parentNode=i,i.childNodes.push(o),o.yogaNode&&((f=i.yogaNode)===null||f===void 0||f.insertChild(o.yogaNode,i.yogaNode.getChildCount())),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&w4(i)};l0.insertBeforeNode=(i,o,f)=>{var p,E;o.parentNode&&l0.removeChildNode(o.parentNode,o),o.parentNode=i;let t=i.childNodes.indexOf(f);if(t>=0){i.childNodes.splice(t,0,o),o.yogaNode&&((p=i.yogaNode)===null||p===void 0||p.insertChild(o.yogaNode,t));return}i.childNodes.push(o),o.yogaNode&&((E=i.yogaNode)===null||E===void 0||E.insertChild(o.yogaNode,i.yogaNode.getChildCount())),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&w4(i)};l0.removeChildNode=(i,o)=>{var f,p;o.yogaNode&&((p=(f=o.parentNode)===null||f===void 0?void 0:f.yogaNode)===null||p===void 0||p.removeChild(o.yogaNode)),o.parentNode=null;let E=i.childNodes.indexOf(o);E>=0&&i.childNodes.splice(E,1),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&w4(i)};l0.setAttribute=(i,o,f)=>{i.attributes[o]=f};l0.setStyle=(i,o)=>{i.style=o,i.yogaNode&&zX.default(i.yogaNode,o)};l0.createTextNode=i=>{let o={nodeName:"#text",nodeValue:i,yogaNode:void 0,parentNode:null,style:{}};return l0.setTextNodeValue(o,i),o};var WX=function(i,o){var f,p;let E=i.nodeName==="#text"?i.nodeValue:HX.default(i),t=pA.default(E);if(t.width<=o||t.width>=1&&o>0&&o<1)return t;let k=(p=(f=i.style)===null||f===void 0?void 0:f.textWrap)!==null&&p!==void 0?p:"wrap",L=qX.default(E,o,k);return pA.default(L)},hA=i=>{var o;if(!(!i||!i.parentNode))return(o=i.yogaNode)!==null&&o!==void 0?o:hA(i.parentNode)},w4=i=>{let o=hA(i);o==null||o.markDirty()};l0.setTextNodeValue=(i,o)=>{typeof o!="string"&&(o=String(o)),i.nodeValue=o,w4(i)}});var th=ce((cre,vA)=>{"use strict";vA.exports={BINARY_TYPES:["nodebuffer","arraybuffer","fragments"],GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),EMPTY_BUFFER:Buffer.alloc(0),NOOP:()=>{}}});var Dg=ce((dre,Fw)=>{"use strict";var{EMPTY_BUFFER:VX}=th();function mA(i,o){if(i.length===0)return VX;if(i.length===1)return i[0];let f=Buffer.allocUnsafe(o),p=0;for(let E=0;E{"use strict";var DA=Symbol("kDone"),bw=Symbol("kRun"),wA=class{constructor(o){this[DA]=()=>{this.pending--,this[bw]()},this.concurrency=o||Infinity,this.jobs=[],this.pending=0}add(o){this.jobs.push(o),this[bw]()}[bw](){if(this.pending!==this.concurrency&&this.jobs.length){let o=this.jobs.shift();this.pending++,o(this[DA])}}};EA.exports=wA});var Tg=ce((hre,TA)=>{"use strict";var wg=require("zlib"),CA=Dg(),GX=SA(),{kStatusCode:xA,NOOP:YX}=th(),KX=Buffer.from([0,0,255,255]),T4=Symbol("permessage-deflate"),G1=Symbol("total-length"),Sg=Symbol("callback"),hd=Symbol("buffers"),Pw=Symbol("error"),C4,AA=class{constructor(o,f,p){if(this._maxPayload=p|0,this._options=o||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!f,this._deflate=null,this._inflate=null,this.params=null,!C4){let E=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;C4=new GX(E)}}static get extensionName(){return"permessage-deflate"}offer(){let o={};return this._options.serverNoContextTakeover&&(o.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(o.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(o.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?o.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(o.client_max_window_bits=!0),o}accept(o){return o=this.normalizeParams(o),this.params=this._isServer?this.acceptAsServer(o):this.acceptAsClient(o),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let o=this._deflate[Sg];this._deflate.close(),this._deflate=null,o&&o(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(o){let f=this._options,p=o.find(E=>!(f.serverNoContextTakeover===!1&&E.server_no_context_takeover||E.server_max_window_bits&&(f.serverMaxWindowBits===!1||typeof f.serverMaxWindowBits=="number"&&f.serverMaxWindowBits>E.server_max_window_bits)||typeof f.clientMaxWindowBits=="number"&&!E.client_max_window_bits));if(!p)throw new Error("None of the extension offers can be accepted");return f.serverNoContextTakeover&&(p.server_no_context_takeover=!0),f.clientNoContextTakeover&&(p.client_no_context_takeover=!0),typeof f.serverMaxWindowBits=="number"&&(p.server_max_window_bits=f.serverMaxWindowBits),typeof f.clientMaxWindowBits=="number"?p.client_max_window_bits=f.clientMaxWindowBits:(p.client_max_window_bits===!0||f.clientMaxWindowBits===!1)&&delete p.client_max_window_bits,p}acceptAsClient(o){let f=o[0];if(this._options.clientNoContextTakeover===!1&&f.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!f.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(f.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&f.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return f}normalizeParams(o){return o.forEach(f=>{Object.keys(f).forEach(p=>{let E=f[p];if(E.length>1)throw new Error(`Parameter "${p}" must have only a single value`);if(E=E[0],p==="client_max_window_bits"){if(E!==!0){let t=+E;if(!Number.isInteger(t)||t<8||t>15)throw new TypeError(`Invalid value for parameter "${p}": ${E}`);E=t}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${p}": ${E}`)}else if(p==="server_max_window_bits"){let t=+E;if(!Number.isInteger(t)||t<8||t>15)throw new TypeError(`Invalid value for parameter "${p}": ${E}`);E=t}else if(p==="client_no_context_takeover"||p==="server_no_context_takeover"){if(E!==!0)throw new TypeError(`Invalid value for parameter "${p}": ${E}`)}else throw new Error(`Unknown parameter "${p}"`);f[p]=E})}),o}decompress(o,f,p){C4.add(E=>{this._decompress(o,f,(t,k)=>{E(),p(t,k)})})}compress(o,f,p){C4.add(E=>{this._compress(o,f,(t,k)=>{E(),p(t,k)})})}_decompress(o,f,p){let E=this._isServer?"client":"server";if(!this._inflate){let t=`${E}_max_window_bits`,k=typeof this.params[t]!="number"?wg.Z_DEFAULT_WINDOWBITS:this.params[t];this._inflate=wg.createInflateRaw(Gf(E0({},this._options.zlibInflateOptions),{windowBits:k})),this._inflate[T4]=this,this._inflate[G1]=0,this._inflate[hd]=[],this._inflate.on("error",QX),this._inflate.on("data",RA)}this._inflate[Sg]=p,this._inflate.write(o),f&&this._inflate.write(KX),this._inflate.flush(()=>{let t=this._inflate[Pw];if(t){this._inflate.close(),this._inflate=null,p(t);return}let k=CA.concat(this._inflate[hd],this._inflate[G1]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[G1]=0,this._inflate[hd]=[],f&&this.params[`${E}_no_context_takeover`]&&this._inflate.reset()),p(null,k)})}_compress(o,f,p){let E=this._isServer?"server":"client";if(!this._deflate){let t=`${E}_max_window_bits`,k=typeof this.params[t]!="number"?wg.Z_DEFAULT_WINDOWBITS:this.params[t];this._deflate=wg.createDeflateRaw(Gf(E0({},this._options.zlibDeflateOptions),{windowBits:k})),this._deflate[G1]=0,this._deflate[hd]=[],this._deflate.on("error",YX),this._deflate.on("data",XX)}this._deflate[Sg]=p,this._deflate.write(o),this._deflate.flush(wg.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let t=CA.concat(this._deflate[hd],this._deflate[G1]);f&&(t=t.slice(0,t.length-4)),this._deflate[Sg]=null,this._deflate[G1]=0,this._deflate[hd]=[],f&&this.params[`${E}_no_context_takeover`]&&this._deflate.reset(),p(null,t)})}};TA.exports=AA;function XX(i){this[hd].push(i),this[G1]+=i.length}function RA(i){if(this[G1]+=i.length,this[T4]._maxPayload<1||this[G1]<=this[T4]._maxPayload){this[hd].push(i);return}this[Pw]=new RangeError("Max payload size exceeded"),this[Pw][xA]=1009,this.removeListener("data",RA),this.reset()}function QX(i){this[T4]._inflate=null,i[xA]=1007,this[Sg](i)}});var Bw=ce((vre,Iw)=>{"use strict";function OA(i){return i>=1e3&&i<=1014&&i!==1004&&i!==1005&&i!==1006||i>=3e3&&i<=4999}function kA(i){let o=i.length,f=0;for(;f=o||(i[f+1]&192)!=128||(i[f+2]&192)!=128||i[f]===224&&(i[f+1]&224)==128||i[f]===237&&(i[f+1]&224)==160)return!1;f+=3}else if((i[f]&248)==240){if(f+3>=o||(i[f+1]&192)!=128||(i[f+2]&192)!=128||(i[f+3]&192)!=128||i[f]===240&&(i[f+1]&240)==128||i[f]===244&&i[f+1]>143||i[f]>244)return!1;f+=4}else return!1;return!0}try{let i=require("utf-8-validate");typeof i=="object"&&(i=i.Validation.isValidUTF8),Iw.exports={isValidStatusCode:OA,isValidUTF8(o){return o.length<150?kA(o):i(o)}}}catch(i){Iw.exports={isValidStatusCode:OA,isValidUTF8:kA}}});var zw=ce((mre,MA)=>{"use strict";var{Writable:JX}=require("stream"),NA=Tg(),{BINARY_TYPES:ZX,EMPTY_BUFFER:$X,kStatusCode:eQ,kWebSocket:tQ}=th(),{concat:Uw,toArrayBuffer:nQ,unmask:rQ}=Dg(),{isValidStatusCode:iQ,isValidUTF8:LA}=Bw(),Cg=0,FA=1,bA=2,PA=3,jw=4,uQ=5,IA=class extends JX{constructor(o,f,p,E){super();this._binaryType=o||ZX[0],this[tQ]=void 0,this._extensions=f||{},this._isServer=!!p,this._maxPayload=E|0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._state=Cg,this._loop=!1}_write(o,f,p){if(this._opcode===8&&this._state==Cg)return p();this._bufferedBytes+=o.length,this._buffers.push(o),this.startLoop(p)}consume(o){if(this._bufferedBytes-=o,o===this._buffers[0].length)return this._buffers.shift();if(o=p.length?f.set(this._buffers.shift(),E):(f.set(new Uint8Array(p.buffer,p.byteOffset,o),E),this._buffers[0]=p.slice(o)),o-=p.length}while(o>0);return f}startLoop(o){let f;this._loop=!0;do switch(this._state){case Cg:f=this.getInfo();break;case FA:f=this.getPayloadLength16();break;case bA:f=this.getPayloadLength64();break;case PA:this.getMask();break;case jw:f=this.getData(o);break;default:this._loop=!1;return}while(this._loop);o(f)}getInfo(){if(this._bufferedBytes<2){this._loop=!1;return}let o=this.consume(2);if((o[0]&48)!=0)return this._loop=!1,Ho(RangeError,"RSV2 and RSV3 must be clear",!0,1002);let f=(o[0]&64)==64;if(f&&!this._extensions[NA.extensionName])return this._loop=!1,Ho(RangeError,"RSV1 must be clear",!0,1002);if(this._fin=(o[0]&128)==128,this._opcode=o[0]&15,this._payloadLength=o[1]&127,this._opcode===0){if(f)return this._loop=!1,Ho(RangeError,"RSV1 must be clear",!0,1002);if(!this._fragmented)return this._loop=!1,Ho(RangeError,"invalid opcode 0",!0,1002);this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented)return this._loop=!1,Ho(RangeError,`invalid opcode ${this._opcode}`,!0,1002);this._compressed=f}else if(this._opcode>7&&this._opcode<11){if(!this._fin)return this._loop=!1,Ho(RangeError,"FIN must be set",!0,1002);if(f)return this._loop=!1,Ho(RangeError,"RSV1 must be clear",!0,1002);if(this._payloadLength>125)return this._loop=!1,Ho(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002)}else return this._loop=!1,Ho(RangeError,`invalid opcode ${this._opcode}`,!0,1002);if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(o[1]&128)==128,this._isServer){if(!this._masked)return this._loop=!1,Ho(RangeError,"MASK must be set",!0,1002)}else if(this._masked)return this._loop=!1,Ho(RangeError,"MASK must be clear",!0,1002);if(this._payloadLength===126)this._state=FA;else if(this._payloadLength===127)this._state=bA;else return this.haveLength()}getPayloadLength16(){if(this._bufferedBytes<2){this._loop=!1;return}return this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength()}getPayloadLength64(){if(this._bufferedBytes<8){this._loop=!1;return}let o=this.consume(8),f=o.readUInt32BE(0);return f>Math.pow(2,53-32)-1?(this._loop=!1,Ho(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009)):(this._payloadLength=f*Math.pow(2,32)+o.readUInt32BE(4),this.haveLength())}haveLength(){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0))return this._loop=!1,Ho(RangeError,"Max payload size exceeded",!1,1009);this._masked?this._state=PA:this._state=jw}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=jw}getData(o){let f=$X;if(this._payloadLength){if(this._bufferedBytes7)return this.controlMessage(f);if(this._compressed){this._state=uQ,this.decompress(f,o);return}return f.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(f)),this.dataMessage()}decompress(o,f){this._extensions[NA.extensionName].decompress(o,this._fin,(E,t)=>{if(E)return f(E);if(t.length){if(this._messageLength+=t.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return f(Ho(RangeError,"Max payload size exceeded",!1,1009));this._fragments.push(t)}let k=this.dataMessage();if(k)return f(k);this.startLoop(f)})}dataMessage(){if(this._fin){let o=this._messageLength,f=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let p;this._binaryType==="nodebuffer"?p=Uw(f,o):this._binaryType==="arraybuffer"?p=nQ(Uw(f,o)):p=f,this.emit("message",p)}else{let p=Uw(f,o);if(!LA(p))return this._loop=!1,Ho(Error,"invalid UTF-8 sequence",!0,1007);this.emit("message",p.toString())}}this._state=Cg}controlMessage(o){if(this._opcode===8)if(this._loop=!1,o.length===0)this.emit("conclude",1005,""),this.end();else{if(o.length===1)return Ho(RangeError,"invalid payload length 1",!0,1002);{let f=o.readUInt16BE(0);if(!iQ(f))return Ho(RangeError,`invalid status code ${f}`,!0,1002);let p=o.slice(2);if(!LA(p))return Ho(Error,"invalid UTF-8 sequence",!0,1007);this.emit("conclude",f,p.toString()),this.end()}}else this._opcode===9?this.emit("ping",o):this.emit("pong",o);this._state=Cg}};MA.exports=IA;function Ho(i,o,f,p){let E=new i(f?`Invalid WebSocket frame: ${o}`:o);return Error.captureStackTrace(E,Ho),E[eQ]=p,E}});var qw=ce((yre,BA)=>{"use strict";var{randomFillSync:oQ}=require("crypto"),UA=Tg(),{EMPTY_BUFFER:lQ}=th(),{isValidStatusCode:sQ}=Bw(),{mask:jA,toBuffer:Y1}=Dg(),nh=Buffer.alloc(4),K1=class{constructor(o,f){this._extensions=f||{},this._socket=o,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(o,f){let p=f.mask&&f.readOnly,E=f.mask?6:2,t=o.length;o.length>=65536?(E+=8,t=127):o.length>125&&(E+=2,t=126);let k=Buffer.allocUnsafe(p?o.length+E:E);return k[0]=f.fin?f.opcode|128:f.opcode,f.rsv1&&(k[0]|=64),k[1]=t,t===126?k.writeUInt16BE(o.length,2):t===127&&(k.writeUInt32BE(0,2),k.writeUInt32BE(o.length,6)),f.mask?(oQ(nh,0,4),k[1]|=128,k[E-4]=nh[0],k[E-3]=nh[1],k[E-2]=nh[2],k[E-1]=nh[3],p?(jA(o,nh,k,E,o.length),[k]):(jA(o,nh,o,0,o.length),[k,o])):[k,o]}close(o,f,p,E){let t;if(o===void 0)t=lQ;else{if(typeof o!="number"||!sQ(o))throw new TypeError("First argument must be a valid error code number");if(f===void 0||f==="")t=Buffer.allocUnsafe(2),t.writeUInt16BE(o,0);else{let k=Buffer.byteLength(f);if(k>123)throw new RangeError("The message must not be greater than 123 bytes");t=Buffer.allocUnsafe(2+k),t.writeUInt16BE(o,0),t.write(f,2)}}this._deflating?this.enqueue([this.doClose,t,p,E]):this.doClose(t,p,E)}doClose(o,f,p){this.sendFrame(K1.frame(o,{fin:!0,rsv1:!1,opcode:8,mask:f,readOnly:!1}),p)}ping(o,f,p){let E=Y1(o);if(E.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPing,E,f,Y1.readOnly,p]):this.doPing(E,f,Y1.readOnly,p)}doPing(o,f,p,E){this.sendFrame(K1.frame(o,{fin:!0,rsv1:!1,opcode:9,mask:f,readOnly:p}),E)}pong(o,f,p){let E=Y1(o);if(E.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPong,E,f,Y1.readOnly,p]):this.doPong(E,f,Y1.readOnly,p)}doPong(o,f,p,E){this.sendFrame(K1.frame(o,{fin:!0,rsv1:!1,opcode:10,mask:f,readOnly:p}),E)}send(o,f,p){let E=Y1(o),t=this._extensions[UA.extensionName],k=f.binary?2:1,L=f.compress;if(this._firstFragment?(this._firstFragment=!1,L&&t&&(L=E.length>=t._threshold),this._compress=L):(L=!1,k=0),f.fin&&(this._firstFragment=!0),t){let N={fin:f.fin,rsv1:L,opcode:k,mask:f.mask,readOnly:Y1.readOnly};this._deflating?this.enqueue([this.dispatch,E,this._compress,N,p]):this.dispatch(E,this._compress,N,p)}else this.sendFrame(K1.frame(E,{fin:f.fin,rsv1:!1,opcode:k,mask:f.mask,readOnly:Y1.readOnly}),p)}dispatch(o,f,p,E){if(!f){this.sendFrame(K1.frame(o,p),E);return}let t=this._extensions[UA.extensionName];this._bufferedBytes+=o.length,this._deflating=!0,t.compress(o,p.fin,(k,L)=>{if(this._socket.destroyed){let N=new Error("The socket was closed while data was being compressed");typeof E=="function"&&E(N);for(let C=0;C{"use strict";var xg=class{constructor(o,f){this.target=f,this.type=o}},qA=class extends xg{constructor(o,f){super("message",f);this.data=o}},HA=class extends xg{constructor(o,f,p){super("close",p);this.wasClean=p._closeFrameReceived&&p._closeFrameSent,this.reason=f,this.code=o}},WA=class extends xg{constructor(o){super("open",o)}},VA=class extends xg{constructor(o,f){super("error",f);this.message=o.message,this.error=o}},aQ={addEventListener(i,o,f){if(typeof o!="function")return;function p(N){o.call(this,new qA(N,this))}function E(N,C){o.call(this,new HA(N,C,this))}function t(N){o.call(this,new VA(N,this))}function k(){o.call(this,new WA(this))}let L=f&&f.once?"once":"on";i==="message"?(p._listener=o,this[L](i,p)):i==="close"?(E._listener=o,this[L](i,E)):i==="error"?(t._listener=o,this[L](i,t)):i==="open"?(k._listener=o,this[L](i,k)):this[L](i,o)},removeEventListener(i,o){let f=this.listeners(i);for(let p=0;p{"use strict";var Ag=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function Pc(i,o,f){i[o]===void 0?i[o]=[f]:i[o].push(f)}function fQ(i){let o=Object.create(null);if(i===void 0||i==="")return o;let f=Object.create(null),p=!1,E=!1,t=!1,k,L,N=-1,C=-1,U=0;for(;U{let f=i[o];return Array.isArray(f)||(f=[f]),f.map(p=>[o].concat(Object.keys(p).map(E=>{let t=p[E];return Array.isArray(t)||(t=[t]),t.map(k=>k===!0?E:`${E}=${k}`).join("; ")})).join("; ")).join(", ")}).join(", ")}YA.exports={format:cQ,parse:fQ}});var Kw=ce((Ere,KA)=>{"use strict";var dQ=require("events"),pQ=require("https"),hQ=require("http"),XA=require("net"),vQ=require("tls"),{randomBytes:mQ,createHash:yQ}=require("crypto"),{URL:Ww}=require("url"),vd=Tg(),gQ=zw(),_Q=qw(),{BINARY_TYPES:QA,EMPTY_BUFFER:Vw,GUID:EQ,kStatusCode:DQ,kWebSocket:Qs,NOOP:JA}=th(),{addEventListener:wQ,removeEventListener:SQ}=GA(),{format:TQ,parse:CQ}=Hw(),{toBuffer:xQ}=Dg(),ZA=["CONNECTING","OPEN","CLOSING","CLOSED"],Gw=[8,13],AQ=30*1e3,Bi=class extends dQ{constructor(o,f,p){super();this._binaryType=QA[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage="",this._closeTimer=null,this._extensions={},this._protocol="",this._readyState=Bi.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,o!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,Array.isArray(f)?f=f.join(", "):typeof f=="object"&&f!==null&&(p=f,f=void 0),$A(this,o,f,p)):this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(o){!QA.includes(o)||(this._binaryType=o,this._receiver&&(this._receiver._binaryType=o))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(o,f,p){let E=new gQ(this.binaryType,this._extensions,this._isServer,p);this._sender=new _Q(o,this._extensions),this._receiver=E,this._socket=o,E[Qs]=this,o[Qs]=this,E.on("conclude",RQ),E.on("drain",OQ),E.on("error",kQ),E.on("message",MQ),E.on("ping",NQ),E.on("pong",LQ),o.setTimeout(0),o.setNoDelay(),f.length>0&&o.unshift(f),o.on("close",eR),o.on("data",x4),o.on("end",tR),o.on("error",nR),this._readyState=Bi.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=Bi.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[vd.extensionName]&&this._extensions[vd.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=Bi.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(o,f){if(this.readyState!==Bi.CLOSED){if(this.readyState===Bi.CONNECTING){let p="WebSocket was closed before the connection was established";return X1(this,this._req,p)}if(this.readyState===Bi.CLOSING){this._closeFrameSent&&this._closeFrameReceived&&this._socket.end();return}this._readyState=Bi.CLOSING,this._sender.close(o,f,!this._isServer,p=>{p||(this._closeFrameSent=!0,this._closeFrameReceived&&this._socket.end())}),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),AQ)}}ping(o,f,p){if(this.readyState===Bi.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof o=="function"?(p=o,o=f=void 0):typeof f=="function"&&(p=f,f=void 0),typeof o=="number"&&(o=o.toString()),this.readyState!==Bi.OPEN){Yw(this,o,p);return}f===void 0&&(f=!this._isServer),this._sender.ping(o||Vw,f,p)}pong(o,f,p){if(this.readyState===Bi.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof o=="function"?(p=o,o=f=void 0):typeof f=="function"&&(p=f,f=void 0),typeof o=="number"&&(o=o.toString()),this.readyState!==Bi.OPEN){Yw(this,o,p);return}f===void 0&&(f=!this._isServer),this._sender.pong(o||Vw,f,p)}send(o,f,p){if(this.readyState===Bi.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof f=="function"&&(p=f,f={}),typeof o=="number"&&(o=o.toString()),this.readyState!==Bi.OPEN){Yw(this,o,p);return}let E=E0({binary:typeof o!="string",mask:!this._isServer,compress:!0,fin:!0},f);this._extensions[vd.extensionName]||(E.compress=!1),this._sender.send(o||Vw,E,p)}terminate(){if(this.readyState!==Bi.CLOSED){if(this.readyState===Bi.CONNECTING){let o="WebSocket was closed before the connection was established";return X1(this,this._req,o)}this._socket&&(this._readyState=Bi.CLOSING,this._socket.destroy())}}};ZA.forEach((i,o)=>{let f={enumerable:!0,value:o};Object.defineProperty(Bi.prototype,i,f),Object.defineProperty(Bi,i,f)});["binaryType","bufferedAmount","extensions","protocol","readyState","url"].forEach(i=>{Object.defineProperty(Bi.prototype,i,{enumerable:!0})});["open","error","close","message"].forEach(i=>{Object.defineProperty(Bi.prototype,`on${i}`,{configurable:!0,enumerable:!0,get(){let o=this.listeners(i);for(let f=0;f{X1(i,W,"Opening handshake has timed out")}),W.on("error",ne=>{W===null||W.aborted||(W=i._req=null,i._readyState=Bi.CLOSING,i.emit("error",ne),i.emitClose())}),W.on("response",ne=>{let m=ne.headers.location,we=ne.statusCode;if(m&&E.followRedirects&&we>=300&&we<400){if(++i._redirects>E.maxRedirects){X1(i,W,"Maximum redirects exceeded");return}W.abort();let Se=new Ww(m,o);$A(i,Se,f,p)}else i.emit("unexpected-response",W,ne)||X1(i,W,`Unexpected server response: ${ne.statusCode}`)}),W.on("upgrade",(ne,m,we)=>{if(i.emit("upgrade",ne),i.readyState!==Bi.CONNECTING)return;W=i._req=null;let Se=yQ("sha1").update(C+EQ).digest("base64");if(ne.headers["sec-websocket-accept"]!==Se){X1(i,m,"Invalid Sec-WebSocket-Accept header");return}let he=ne.headers["sec-websocket-protocol"],ge=(f||"").split(/, */),ze;if(!f&&he?ze="Server sent a subprotocol but none was requested":f&&!he?ze="Server sent no subprotocol":he&&!ge.includes(he)&&(ze="Server sent an invalid subprotocol"),ze){X1(i,m,ze);return}if(he&&(i._protocol=he),q)try{let pe=CQ(ne.headers["sec-websocket-extensions"]);pe[vd.extensionName]&&(q.accept(pe[vd.extensionName]),i._extensions[vd.extensionName]=q)}catch(pe){X1(i,m,"Invalid Sec-WebSocket-Extensions header");return}i.setSocket(m,we,E.maxPayload)})}function FQ(i){return i.path=i.socketPath,XA.connect(i)}function bQ(i){return i.path=void 0,!i.servername&&i.servername!==""&&(i.servername=XA.isIP(i.host)?"":i.host),vQ.connect(i)}function X1(i,o,f){i._readyState=Bi.CLOSING;let p=new Error(f);Error.captureStackTrace(p,X1),o.setHeader?(o.abort(),o.socket&&!o.socket.destroyed&&o.socket.destroy(),o.once("abort",i.emitClose.bind(i)),i.emit("error",p)):(o.destroy(p),o.once("error",i.emit.bind(i,"error")),o.once("close",i.emitClose.bind(i)))}function Yw(i,o,f){if(o){let p=xQ(o).length;i._socket?i._sender._bufferedBytes+=p:i._bufferedAmount+=p}if(f){let p=new Error(`WebSocket is not open: readyState ${i.readyState} (${ZA[i.readyState]})`);f(p)}}function RQ(i,o){let f=this[Qs];f._socket.removeListener("data",x4),f._socket.resume(),f._closeFrameReceived=!0,f._closeMessage=o,f._closeCode=i,i===1005?f.close():f.close(i,o)}function OQ(){this[Qs]._socket.resume()}function kQ(i){let o=this[Qs];o._socket.removeListener("data",x4),o._readyState=Bi.CLOSING,o._closeCode=i[DQ],o.emit("error",i),o._socket.destroy()}function rR(){this[Qs].emitClose()}function MQ(i){this[Qs].emit("message",i)}function NQ(i){let o=this[Qs];o.pong(i,!o._isServer,JA),o.emit("ping",i)}function LQ(i){this[Qs].emit("pong",i)}function eR(){let i=this[Qs];this.removeListener("close",eR),this.removeListener("end",tR),i._readyState=Bi.CLOSING,i._socket.read(),i._receiver.end(),this.removeListener("data",x4),this[Qs]=void 0,clearTimeout(i._closeTimer),i._receiver._writableState.finished||i._receiver._writableState.errorEmitted?i.emitClose():(i._receiver.on("error",rR),i._receiver.on("finish",rR))}function x4(i){this[Qs]._receiver.write(i)||this.pause()}function tR(){let i=this[Qs];i._readyState=Bi.CLOSING,i._receiver.end(),this.end()}function nR(){let i=this[Qs];this.removeListener("error",nR),this.on("error",JA),i&&(i._readyState=Bi.CLOSING,this.destroy())}});var lR=ce((Dre,iR)=>{"use strict";var{Duplex:PQ}=require("stream");function uR(i){i.emit("close")}function IQ(){!this.destroyed&&this._writableState.finished&&this.destroy()}function oR(i){this.removeListener("error",oR),this.destroy(),this.listenerCount("error")===0&&this.emit("error",i)}function BQ(i,o){let f=!0;function p(){f&&i._socket.resume()}i.readyState===i.CONNECTING?i.once("open",function(){i._receiver.removeAllListeners("drain"),i._receiver.on("drain",p)}):(i._receiver.removeAllListeners("drain"),i._receiver.on("drain",p));let E=new PQ(Gf(E0({},o),{autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1}));return i.on("message",function(k){E.push(k)||(f=!1,i._socket.pause())}),i.once("error",function(k){E.destroyed||E.destroy(k)}),i.once("close",function(){E.destroyed||E.push(null)}),E._destroy=function(t,k){if(i.readyState===i.CLOSED){k(t),process.nextTick(uR,E);return}let L=!1;i.once("error",function(C){L=!0,k(C)}),i.once("close",function(){L||k(t),process.nextTick(uR,E)}),i.terminate()},E._final=function(t){if(i.readyState===i.CONNECTING){i.once("open",function(){E._final(t)});return}i._socket!==null&&(i._socket._writableState.finished?(t(),E._readableState.endEmitted&&E.destroy()):(i._socket.once("finish",function(){t()}),i.close()))},E._read=function(){i.readyState===i.OPEN&&!f&&(f=!0,i._receiver._writableState.needDrain||i._socket.resume())},E._write=function(t,k,L){if(i.readyState===i.CONNECTING){i.once("open",function(){E._write(t,k,L)});return}i.send(t,L)},E.on("end",IQ),E.on("error",oR),E}iR.exports=BQ});var fR=ce((wre,sR)=>{"use strict";var UQ=require("events"),{createHash:jQ}=require("crypto"),{createServer:zQ,STATUS_CODES:Xw}=require("http"),rh=Tg(),qQ=Kw(),{format:HQ,parse:WQ}=Hw(),{GUID:VQ,kWebSocket:GQ}=th(),YQ=/^[+/0-9A-Za-z]{22}==$/,aR=class extends UQ{constructor(o,f){super();if(o=E0({maxPayload:100*1024*1024,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null},o),o.port==null&&!o.server&&!o.noServer)throw new TypeError('One of the "port", "server", or "noServer" options must be specified');if(o.port!=null?(this._server=zQ((p,E)=>{let t=Xw[426];E.writeHead(426,{"Content-Length":t.length,"Content-Type":"text/plain"}),E.end(t)}),this._server.listen(o.port,o.host,o.backlog,f)):o.server&&(this._server=o.server),this._server){let p=this.emit.bind(this,"connection");this._removeListeners=KQ(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(E,t,k)=>{this.handleUpgrade(E,t,k,p)}})}o.perMessageDeflate===!0&&(o.perMessageDeflate={}),o.clientTracking&&(this.clients=new Set),this.options=o}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(o){if(o&&this.once("close",o),this.clients)for(let p of this.clients)p.terminate();let f=this._server;if(f&&(this._removeListeners(),this._removeListeners=this._server=null,this.options.port!=null)){f.close(()=>this.emit("close"));return}process.nextTick(XQ,this)}shouldHandle(o){if(this.options.path){let f=o.url.indexOf("?");if((f!==-1?o.url.slice(0,f):o.url)!==this.options.path)return!1}return!0}handleUpgrade(o,f,p,E){f.on("error",Qw);let t=o.headers["sec-websocket-key"]!==void 0?o.headers["sec-websocket-key"].trim():!1,k=+o.headers["sec-websocket-version"],L={};if(o.method!=="GET"||o.headers.upgrade.toLowerCase()!=="websocket"||!t||!YQ.test(t)||k!==8&&k!==13||!this.shouldHandle(o))return A4(f,400);if(this.options.perMessageDeflate){let N=new rh(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let C=WQ(o.headers["sec-websocket-extensions"]);C[rh.extensionName]&&(N.accept(C[rh.extensionName]),L[rh.extensionName]=N)}catch(C){return A4(f,400)}}if(this.options.verifyClient){let N={origin:o.headers[`${k===8?"sec-websocket-origin":"origin"}`],secure:!!(o.socket.authorized||o.socket.encrypted),req:o};if(this.options.verifyClient.length===2){this.options.verifyClient(N,(C,U,q,W)=>{if(!C)return A4(f,U||401,q,W);this.completeUpgrade(t,L,o,f,p,E)});return}if(!this.options.verifyClient(N))return A4(f,401)}this.completeUpgrade(t,L,o,f,p,E)}completeUpgrade(o,f,p,E,t,k){if(!E.readable||!E.writable)return E.destroy();if(E[GQ])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");let L=jQ("sha1").update(o+VQ).digest("base64"),N=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${L}`],C=new qQ(null),U=p.headers["sec-websocket-protocol"];if(U&&(U=U.split(",").map(QQ),this.options.handleProtocols?U=this.options.handleProtocols(U,p):U=U[0],U&&(N.push(`Sec-WebSocket-Protocol: ${U}`),C._protocol=U)),f[rh.extensionName]){let q=f[rh.extensionName].params,W=HQ({[rh.extensionName]:[q]});N.push(`Sec-WebSocket-Extensions: ${W}`),C._extensions=f}this.emit("headers",N,p),E.write(N.concat(`\r -`).join(`\r -`)),E.removeListener("error",Qw),C.setSocket(E,t,this.options.maxPayload),this.clients&&(this.clients.add(C),C.on("close",()=>this.clients.delete(C))),k(C,p)}};sR.exports=aR;function KQ(i,o){for(let f of Object.keys(o))i.on(f,o[f]);return function(){for(let p of Object.keys(o))i.removeListener(p,o[p])}}function XQ(i){i.emit("close")}function Qw(){this.destroy()}function A4(i,o,f,p){i.writable&&(f=f||Xw[o],p=E0({Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(f)},p),i.write(`HTTP/1.1 ${o} ${Xw[o]}\r -`+Object.keys(p).map(E=>`${E}: ${p[E]}`).join(`\r -`)+`\r -\r -`+f)),i.removeListener("error",Qw),i.destroy()}function QQ(i){return i.trim()}});var dR=ce((Sre,cR)=>{"use strict";var Rg=Kw();Rg.createWebSocketStream=lR();Rg.Server=fR();Rg.Receiver=zw();Rg.Sender=qw();cR.exports=Rg});var pR=ce(R4=>{"use strict";var JQ=R4&&R4.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(R4,"__esModule",{value:!0});var ZQ=JQ(dR()),Og=global;Og.WebSocket||(Og.WebSocket=ZQ.default);Og.window||(Og.window=global);Og.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:!0},{type:2,value:"InternalApp",isEnabled:!0,isValid:!0},{type:2,value:"InternalAppContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdoutContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStderrContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdinContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalFocusContext",isEnabled:!0,isValid:!0}]});var hR=ce((O4,Jw)=>{(function(i,o){typeof O4=="object"&&typeof Jw=="object"?Jw.exports=o():typeof define=="function"&&define.amd?define([],o):typeof O4=="object"?O4.ReactDevToolsBackend=o():i.ReactDevToolsBackend=o()})(window,function(){return function(i){var o={};function f(p){if(o[p])return o[p].exports;var E=o[p]={i:p,l:!1,exports:{}};return i[p].call(E.exports,E,E.exports,f),E.l=!0,E.exports}return f.m=i,f.c=o,f.d=function(p,E,t){f.o(p,E)||Object.defineProperty(p,E,{enumerable:!0,get:t})},f.r=function(p){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(p,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(p,"__esModule",{value:!0})},f.t=function(p,E){if(1&E&&(p=f(p)),8&E||4&E&&typeof p=="object"&&p&&p.__esModule)return p;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:p}),2&E&&typeof p!="string")for(var k in p)f.d(t,k,function(L){return p[L]}.bind(null,k));return t},f.n=function(p){var E=p&&p.__esModule?function(){return p.default}:function(){return p};return f.d(E,"a",E),E},f.o=function(p,E){return Object.prototype.hasOwnProperty.call(p,E)},f.p="",f(f.s=20)}([function(i,o,f){"use strict";i.exports=f(12)},function(i,o,f){"use strict";var p=Object.getOwnPropertySymbols,E=Object.prototype.hasOwnProperty,t=Object.prototype.propertyIsEnumerable;function k(L){if(L==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(L)}i.exports=function(){try{if(!Object.assign)return!1;var L=new String("abc");if(L[5]="de",Object.getOwnPropertyNames(L)[0]==="5")return!1;for(var N={},C=0;C<10;C++)N["_"+String.fromCharCode(C)]=C;if(Object.getOwnPropertyNames(N).map(function(q){return N[q]}).join("")!=="0123456789")return!1;var U={};return"abcdefghijklmnopqrst".split("").forEach(function(q){U[q]=q}),Object.keys(Object.assign({},U)).join("")==="abcdefghijklmnopqrst"}catch(q){return!1}}()?Object.assign:function(L,N){for(var C,U,q=k(L),W=1;W=le||en<0||$t&&At-Ke>=wt}function ue(){var At=Se();if(Ce(At))return je(At);$e=setTimeout(ue,function(en){var ln=le-(en-ft);return $t?we(ln,wt-(en-Ke)):ln}(At))}function je(At){return $e=void 0,at&&Ge?Q(At):(Ge=rt=void 0,xt)}function ct(){var At=Se(),en=Ce(At);if(Ge=arguments,rt=this,ft=At,en){if($e===void 0)return ae(ft);if($t)return $e=setTimeout(ue,le),Q(ft)}return $e===void 0&&($e=setTimeout(ue,le)),xt}return le=pe(le)||0,ge(Ue)&&(jt=!!Ue.leading,wt=($t="maxWait"in Ue)?m(pe(Ue.maxWait)||0,le):wt,at="trailing"in Ue?!!Ue.trailing:at),ct.cancel=function(){$e!==void 0&&clearTimeout($e),Ke=0,Ge=ft=rt=$e=void 0},ct.flush=function(){return $e===void 0?xt:je(Se())},ct}function ge(Oe){var le=E(Oe);return!!Oe&&(le=="object"||le=="function")}function ze(Oe){return E(Oe)=="symbol"||function(le){return!!le&&E(le)=="object"}(Oe)&&ne.call(Oe)=="[object Symbol]"}function pe(Oe){if(typeof Oe=="number")return Oe;if(ze(Oe))return NaN;if(ge(Oe)){var le=typeof Oe.valueOf=="function"?Oe.valueOf():Oe;Oe=ge(le)?le+"":le}if(typeof Oe!="string")return Oe===0?Oe:+Oe;Oe=Oe.replace(t,"");var Ue=L.test(Oe);return Ue||N.test(Oe)?C(Oe.slice(2),Ue?2:8):k.test(Oe)?NaN:+Oe}i.exports=function(Oe,le,Ue){var Ge=!0,rt=!0;if(typeof Oe!="function")throw new TypeError("Expected a function");return ge(Ue)&&(Ge="leading"in Ue?!!Ue.leading:Ge,rt="trailing"in Ue?!!Ue.trailing:rt),he(Oe,le,{leading:Ge,maxWait:le,trailing:rt})}}).call(this,f(4))},function(i,o,f){(function(p){function E(Q){return(E=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(ae){return typeof ae}:function(ae){return ae&&typeof Symbol=="function"&&ae.constructor===Symbol&&ae!==Symbol.prototype?"symbol":typeof ae})(Q)}var t;o=i.exports=m,t=(p===void 0?"undefined":E(p))==="object"&&p.env&&p.env.NODE_DEBUG&&/\bsemver\b/i.test(p.env.NODE_DEBUG)?function(){var Q=Array.prototype.slice.call(arguments,0);Q.unshift("SEMVER"),console.log.apply(console,Q)}:function(){},o.SEMVER_SPEC_VERSION="2.0.0";var k=Number.MAX_SAFE_INTEGER||9007199254740991,L=o.re=[],N=o.src=[],C=o.tokens={},U=0;function q(Q){C[Q]=U++}q("NUMERICIDENTIFIER"),N[C.NUMERICIDENTIFIER]="0|[1-9]\\d*",q("NUMERICIDENTIFIERLOOSE"),N[C.NUMERICIDENTIFIERLOOSE]="[0-9]+",q("NONNUMERICIDENTIFIER"),N[C.NONNUMERICIDENTIFIER]="\\d*[a-zA-Z-][a-zA-Z0-9-]*",q("MAINVERSION"),N[C.MAINVERSION]="("+N[C.NUMERICIDENTIFIER]+")\\.("+N[C.NUMERICIDENTIFIER]+")\\.("+N[C.NUMERICIDENTIFIER]+")",q("MAINVERSIONLOOSE"),N[C.MAINVERSIONLOOSE]="("+N[C.NUMERICIDENTIFIERLOOSE]+")\\.("+N[C.NUMERICIDENTIFIERLOOSE]+")\\.("+N[C.NUMERICIDENTIFIERLOOSE]+")",q("PRERELEASEIDENTIFIER"),N[C.PRERELEASEIDENTIFIER]="(?:"+N[C.NUMERICIDENTIFIER]+"|"+N[C.NONNUMERICIDENTIFIER]+")",q("PRERELEASEIDENTIFIERLOOSE"),N[C.PRERELEASEIDENTIFIERLOOSE]="(?:"+N[C.NUMERICIDENTIFIERLOOSE]+"|"+N[C.NONNUMERICIDENTIFIER]+")",q("PRERELEASE"),N[C.PRERELEASE]="(?:-("+N[C.PRERELEASEIDENTIFIER]+"(?:\\."+N[C.PRERELEASEIDENTIFIER]+")*))",q("PRERELEASELOOSE"),N[C.PRERELEASELOOSE]="(?:-?("+N[C.PRERELEASEIDENTIFIERLOOSE]+"(?:\\."+N[C.PRERELEASEIDENTIFIERLOOSE]+")*))",q("BUILDIDENTIFIER"),N[C.BUILDIDENTIFIER]="[0-9A-Za-z-]+",q("BUILD"),N[C.BUILD]="(?:\\+("+N[C.BUILDIDENTIFIER]+"(?:\\."+N[C.BUILDIDENTIFIER]+")*))",q("FULL"),q("FULLPLAIN"),N[C.FULLPLAIN]="v?"+N[C.MAINVERSION]+N[C.PRERELEASE]+"?"+N[C.BUILD]+"?",N[C.FULL]="^"+N[C.FULLPLAIN]+"$",q("LOOSEPLAIN"),N[C.LOOSEPLAIN]="[v=\\s]*"+N[C.MAINVERSIONLOOSE]+N[C.PRERELEASELOOSE]+"?"+N[C.BUILD]+"?",q("LOOSE"),N[C.LOOSE]="^"+N[C.LOOSEPLAIN]+"$",q("GTLT"),N[C.GTLT]="((?:<|>)?=?)",q("XRANGEIDENTIFIERLOOSE"),N[C.XRANGEIDENTIFIERLOOSE]=N[C.NUMERICIDENTIFIERLOOSE]+"|x|X|\\*",q("XRANGEIDENTIFIER"),N[C.XRANGEIDENTIFIER]=N[C.NUMERICIDENTIFIER]+"|x|X|\\*",q("XRANGEPLAIN"),N[C.XRANGEPLAIN]="[v=\\s]*("+N[C.XRANGEIDENTIFIER]+")(?:\\.("+N[C.XRANGEIDENTIFIER]+")(?:\\.("+N[C.XRANGEIDENTIFIER]+")(?:"+N[C.PRERELEASE]+")?"+N[C.BUILD]+"?)?)?",q("XRANGEPLAINLOOSE"),N[C.XRANGEPLAINLOOSE]="[v=\\s]*("+N[C.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+N[C.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+N[C.XRANGEIDENTIFIERLOOSE]+")(?:"+N[C.PRERELEASELOOSE]+")?"+N[C.BUILD]+"?)?)?",q("XRANGE"),N[C.XRANGE]="^"+N[C.GTLT]+"\\s*"+N[C.XRANGEPLAIN]+"$",q("XRANGELOOSE"),N[C.XRANGELOOSE]="^"+N[C.GTLT]+"\\s*"+N[C.XRANGEPLAINLOOSE]+"$",q("COERCE"),N[C.COERCE]="(^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])",q("COERCERTL"),L[C.COERCERTL]=new RegExp(N[C.COERCE],"g"),q("LONETILDE"),N[C.LONETILDE]="(?:~>?)",q("TILDETRIM"),N[C.TILDETRIM]="(\\s*)"+N[C.LONETILDE]+"\\s+",L[C.TILDETRIM]=new RegExp(N[C.TILDETRIM],"g"),q("TILDE"),N[C.TILDE]="^"+N[C.LONETILDE]+N[C.XRANGEPLAIN]+"$",q("TILDELOOSE"),N[C.TILDELOOSE]="^"+N[C.LONETILDE]+N[C.XRANGEPLAINLOOSE]+"$",q("LONECARET"),N[C.LONECARET]="(?:\\^)",q("CARETTRIM"),N[C.CARETTRIM]="(\\s*)"+N[C.LONECARET]+"\\s+",L[C.CARETTRIM]=new RegExp(N[C.CARETTRIM],"g"),q("CARET"),N[C.CARET]="^"+N[C.LONECARET]+N[C.XRANGEPLAIN]+"$",q("CARETLOOSE"),N[C.CARETLOOSE]="^"+N[C.LONECARET]+N[C.XRANGEPLAINLOOSE]+"$",q("COMPARATORLOOSE"),N[C.COMPARATORLOOSE]="^"+N[C.GTLT]+"\\s*("+N[C.LOOSEPLAIN]+")$|^$",q("COMPARATOR"),N[C.COMPARATOR]="^"+N[C.GTLT]+"\\s*("+N[C.FULLPLAIN]+")$|^$",q("COMPARATORTRIM"),N[C.COMPARATORTRIM]="(\\s*)"+N[C.GTLT]+"\\s*("+N[C.LOOSEPLAIN]+"|"+N[C.XRANGEPLAIN]+")",L[C.COMPARATORTRIM]=new RegExp(N[C.COMPARATORTRIM],"g"),q("HYPHENRANGE"),N[C.HYPHENRANGE]="^\\s*("+N[C.XRANGEPLAIN]+")\\s+-\\s+("+N[C.XRANGEPLAIN]+")\\s*$",q("HYPHENRANGELOOSE"),N[C.HYPHENRANGELOOSE]="^\\s*("+N[C.XRANGEPLAINLOOSE]+")\\s+-\\s+("+N[C.XRANGEPLAINLOOSE]+")\\s*$",q("STAR"),N[C.STAR]="(<|>)?=?\\s*\\*";for(var W=0;W256||!(ae.loose?L[C.LOOSE]:L[C.FULL]).test(Q))return null;try{return new m(Q,ae)}catch(Ce){return null}}function m(Q,ae){if(ae&&E(ae)==="object"||(ae={loose:!!ae,includePrerelease:!1}),Q instanceof m){if(Q.loose===ae.loose)return Q;Q=Q.version}else if(typeof Q!="string")throw new TypeError("Invalid Version: "+Q);if(Q.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof m))return new m(Q,ae);t("SemVer",Q,ae),this.options=ae,this.loose=!!ae.loose;var Ce=Q.trim().match(ae.loose?L[C.LOOSE]:L[C.FULL]);if(!Ce)throw new TypeError("Invalid Version: "+Q);if(this.raw=Q,this.major=+Ce[1],this.minor=+Ce[2],this.patch=+Ce[3],this.major>k||this.major<0)throw new TypeError("Invalid major version");if(this.minor>k||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>k||this.patch<0)throw new TypeError("Invalid patch version");Ce[4]?this.prerelease=Ce[4].split(".").map(function(ue){if(/^[0-9]+$/.test(ue)){var je=+ue;if(je>=0&&je=0;)typeof this.prerelease[Ce]=="number"&&(this.prerelease[Ce]++,Ce=-2);Ce===-1&&this.prerelease.push(0)}ae&&(this.prerelease[0]===ae?isNaN(this.prerelease[1])&&(this.prerelease=[ae,0]):this.prerelease=[ae,0]);break;default:throw new Error("invalid increment argument: "+Q)}return this.format(),this.raw=this.version,this},o.inc=function(Q,ae,Ce,ue){typeof Ce=="string"&&(ue=Ce,Ce=void 0);try{return new m(Q,Ce).inc(ae,ue).version}catch(je){return null}},o.diff=function(Q,ae){if(pe(Q,ae))return null;var Ce=ne(Q),ue=ne(ae),je="";if(Ce.prerelease.length||ue.prerelease.length){je="pre";var ct="prerelease"}for(var At in Ce)if((At==="major"||At==="minor"||At==="patch")&&Ce[At]!==ue[At])return je+At;return ct},o.compareIdentifiers=Se;var we=/^[0-9]+$/;function Se(Q,ae){var Ce=we.test(Q),ue=we.test(ae);return Ce&&ue&&(Q=+Q,ae=+ae),Q===ae?0:Ce&&!ue?-1:ue&&!Ce?1:Q0}function ze(Q,ae,Ce){return he(Q,ae,Ce)<0}function pe(Q,ae,Ce){return he(Q,ae,Ce)===0}function Oe(Q,ae,Ce){return he(Q,ae,Ce)!==0}function le(Q,ae,Ce){return he(Q,ae,Ce)>=0}function Ue(Q,ae,Ce){return he(Q,ae,Ce)<=0}function Ge(Q,ae,Ce,ue){switch(ae){case"===":return E(Q)==="object"&&(Q=Q.version),E(Ce)==="object"&&(Ce=Ce.version),Q===Ce;case"!==":return E(Q)==="object"&&(Q=Q.version),E(Ce)==="object"&&(Ce=Ce.version),Q!==Ce;case"":case"=":case"==":return pe(Q,Ce,ue);case"!=":return Oe(Q,Ce,ue);case">":return ge(Q,Ce,ue);case">=":return le(Q,Ce,ue);case"<":return ze(Q,Ce,ue);case"<=":return Ue(Q,Ce,ue);default:throw new TypeError("Invalid operator: "+ae)}}function rt(Q,ae){if(ae&&E(ae)==="object"||(ae={loose:!!ae,includePrerelease:!1}),Q instanceof rt){if(Q.loose===!!ae.loose)return Q;Q=Q.value}if(!(this instanceof rt))return new rt(Q,ae);t("comparator",Q,ae),this.options=ae,this.loose=!!ae.loose,this.parse(Q),this.semver===wt?this.value="":this.value=this.operator+this.semver.version,t("comp",this)}o.rcompareIdentifiers=function(Q,ae){return Se(ae,Q)},o.major=function(Q,ae){return new m(Q,ae).major},o.minor=function(Q,ae){return new m(Q,ae).minor},o.patch=function(Q,ae){return new m(Q,ae).patch},o.compare=he,o.compareLoose=function(Q,ae){return he(Q,ae,!0)},o.compareBuild=function(Q,ae,Ce){var ue=new m(Q,Ce),je=new m(ae,Ce);return ue.compare(je)||ue.compareBuild(je)},o.rcompare=function(Q,ae,Ce){return he(ae,Q,Ce)},o.sort=function(Q,ae){return Q.sort(function(Ce,ue){return o.compareBuild(Ce,ue,ae)})},o.rsort=function(Q,ae){return Q.sort(function(Ce,ue){return o.compareBuild(ue,Ce,ae)})},o.gt=ge,o.lt=ze,o.eq=pe,o.neq=Oe,o.gte=le,o.lte=Ue,o.cmp=Ge,o.Comparator=rt;var wt={};function xt(Q,ae){if(ae&&E(ae)==="object"||(ae={loose:!!ae,includePrerelease:!1}),Q instanceof xt)return Q.loose===!!ae.loose&&Q.includePrerelease===!!ae.includePrerelease?Q:new xt(Q.raw,ae);if(Q instanceof rt)return new xt(Q.value,ae);if(!(this instanceof xt))return new xt(Q,ae);if(this.options=ae,this.loose=!!ae.loose,this.includePrerelease=!!ae.includePrerelease,this.raw=Q,this.set=Q.split(/\s*\|\|\s*/).map(function(Ce){return this.parseRange(Ce.trim())},this).filter(function(Ce){return Ce.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+Q);this.format()}function $e(Q,ae){for(var Ce=!0,ue=Q.slice(),je=ue.pop();Ce&&ue.length;)Ce=ue.every(function(ct){return je.intersects(ct,ae)}),je=ue.pop();return Ce}function ft(Q){return!Q||Q.toLowerCase()==="x"||Q==="*"}function Ke(Q,ae,Ce,ue,je,ct,At,en,ln,An,nr,un,Wt){return((ae=ft(Ce)?"":ft(ue)?">="+Ce+".0.0":ft(je)?">="+Ce+"."+ue+".0":">="+ae)+" "+(en=ft(ln)?"":ft(An)?"<"+(+ln+1)+".0.0":ft(nr)?"<"+ln+"."+(+An+1)+".0":un?"<="+ln+"."+An+"."+nr+"-"+un:"<="+en)).trim()}function jt(Q,ae,Ce){for(var ue=0;ue0){var je=Q[ue].semver;if(je.major===ae.major&&je.minor===ae.minor&&je.patch===ae.patch)return!0}return!1}return!0}function $t(Q,ae,Ce){try{ae=new xt(ae,Ce)}catch(ue){return!1}return ae.test(Q)}function at(Q,ae,Ce,ue){var je,ct,At,en,ln;switch(Q=new m(Q,ue),ae=new xt(ae,ue),Ce){case">":je=ge,ct=Ue,At=ze,en=">",ln=">=";break;case"<":je=ze,ct=le,At=ge,en="<",ln="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if($t(Q,ae,ue))return!1;for(var An=0;An=0.0.0")),un=un||vr,Wt=Wt||vr,je(vr.semver,un.semver,ue)?un=vr:At(vr.semver,Wt.semver,ue)&&(Wt=vr)}),un.operator===en||un.operator===ln||(!Wt.operator||Wt.operator===en)&&ct(Q,Wt.semver)||Wt.operator===ln&&At(Q,Wt.semver))return!1}return!0}rt.prototype.parse=function(Q){var ae=this.options.loose?L[C.COMPARATORLOOSE]:L[C.COMPARATOR],Ce=Q.match(ae);if(!Ce)throw new TypeError("Invalid comparator: "+Q);this.operator=Ce[1]!==void 0?Ce[1]:"",this.operator==="="&&(this.operator=""),Ce[2]?this.semver=new m(Ce[2],this.options.loose):this.semver=wt},rt.prototype.toString=function(){return this.value},rt.prototype.test=function(Q){if(t("Comparator.test",Q,this.options.loose),this.semver===wt||Q===wt)return!0;if(typeof Q=="string")try{Q=new m(Q,this.options)}catch(ae){return!1}return Ge(Q,this.operator,this.semver,this.options)},rt.prototype.intersects=function(Q,ae){if(!(Q instanceof rt))throw new TypeError("a Comparator is required");var Ce;if(ae&&E(ae)==="object"||(ae={loose:!!ae,includePrerelease:!1}),this.operator==="")return this.value===""||(Ce=new xt(Q.value,ae),$t(this.value,Ce,ae));if(Q.operator==="")return Q.value===""||(Ce=new xt(this.value,ae),$t(Q.semver,Ce,ae));var ue=!(this.operator!==">="&&this.operator!==">"||Q.operator!==">="&&Q.operator!==">"),je=!(this.operator!=="<="&&this.operator!=="<"||Q.operator!=="<="&&Q.operator!=="<"),ct=this.semver.version===Q.semver.version,At=!(this.operator!==">="&&this.operator!=="<="||Q.operator!==">="&&Q.operator!=="<="),en=Ge(this.semver,"<",Q.semver,ae)&&(this.operator===">="||this.operator===">")&&(Q.operator==="<="||Q.operator==="<"),ln=Ge(this.semver,">",Q.semver,ae)&&(this.operator==="<="||this.operator==="<")&&(Q.operator===">="||Q.operator===">");return ue||je||ct&&At||en||ln},o.Range=xt,xt.prototype.format=function(){return this.range=this.set.map(function(Q){return Q.join(" ").trim()}).join("||").trim(),this.range},xt.prototype.toString=function(){return this.range},xt.prototype.parseRange=function(Q){var ae=this.options.loose;Q=Q.trim();var Ce=ae?L[C.HYPHENRANGELOOSE]:L[C.HYPHENRANGE];Q=Q.replace(Ce,Ke),t("hyphen replace",Q),Q=Q.replace(L[C.COMPARATORTRIM],"$1$2$3"),t("comparator trim",Q,L[C.COMPARATORTRIM]),Q=(Q=(Q=Q.replace(L[C.TILDETRIM],"$1~")).replace(L[C.CARETTRIM],"$1^")).split(/\s+/).join(" ");var ue=ae?L[C.COMPARATORLOOSE]:L[C.COMPARATOR],je=Q.split(" ").map(function(ct){return function(At,en){return t("comp",At,en),At=function(ln,An){return ln.trim().split(/\s+/).map(function(nr){return function(un,Wt){t("caret",un,Wt);var vr=Wt.loose?L[C.CARETLOOSE]:L[C.CARET];return un.replace(vr,function(w,Ut,Vn,fr,Fr){var ur;return t("caret",un,w,Ut,Vn,fr,Fr),ft(Ut)?ur="":ft(Vn)?ur=">="+Ut+".0.0 <"+(+Ut+1)+".0.0":ft(fr)?ur=Ut==="0"?">="+Ut+"."+Vn+".0 <"+Ut+"."+(+Vn+1)+".0":">="+Ut+"."+Vn+".0 <"+(+Ut+1)+".0.0":Fr?(t("replaceCaret pr",Fr),ur=Ut==="0"?Vn==="0"?">="+Ut+"."+Vn+"."+fr+"-"+Fr+" <"+Ut+"."+Vn+"."+(+fr+1):">="+Ut+"."+Vn+"."+fr+"-"+Fr+" <"+Ut+"."+(+Vn+1)+".0":">="+Ut+"."+Vn+"."+fr+"-"+Fr+" <"+(+Ut+1)+".0.0"):(t("no pr"),ur=Ut==="0"?Vn==="0"?">="+Ut+"."+Vn+"."+fr+" <"+Ut+"."+Vn+"."+(+fr+1):">="+Ut+"."+Vn+"."+fr+" <"+Ut+"."+(+Vn+1)+".0":">="+Ut+"."+Vn+"."+fr+" <"+(+Ut+1)+".0.0"),t("caret return",ur),ur})}(nr,An)}).join(" ")}(At,en),t("caret",At),At=function(ln,An){return ln.trim().split(/\s+/).map(function(nr){return function(un,Wt){var vr=Wt.loose?L[C.TILDELOOSE]:L[C.TILDE];return un.replace(vr,function(w,Ut,Vn,fr,Fr){var ur;return t("tilde",un,w,Ut,Vn,fr,Fr),ft(Ut)?ur="":ft(Vn)?ur=">="+Ut+".0.0 <"+(+Ut+1)+".0.0":ft(fr)?ur=">="+Ut+"."+Vn+".0 <"+Ut+"."+(+Vn+1)+".0":Fr?(t("replaceTilde pr",Fr),ur=">="+Ut+"."+Vn+"."+fr+"-"+Fr+" <"+Ut+"."+(+Vn+1)+".0"):ur=">="+Ut+"."+Vn+"."+fr+" <"+Ut+"."+(+Vn+1)+".0",t("tilde return",ur),ur})}(nr,An)}).join(" ")}(At,en),t("tildes",At),At=function(ln,An){return t("replaceXRanges",ln,An),ln.split(/\s+/).map(function(nr){return function(un,Wt){un=un.trim();var vr=Wt.loose?L[C.XRANGELOOSE]:L[C.XRANGE];return un.replace(vr,function(w,Ut,Vn,fr,Fr,ur){t("xRange",un,w,Ut,Vn,fr,Fr,ur);var br=ft(Vn),Kt=br||ft(fr),vu=Kt||ft(Fr),a0=vu;return Ut==="="&&a0&&(Ut=""),ur=Wt.includePrerelease?"-0":"",br?w=Ut===">"||Ut==="<"?"<0.0.0-0":"*":Ut&&a0?(Kt&&(fr=0),Fr=0,Ut===">"?(Ut=">=",Kt?(Vn=+Vn+1,fr=0,Fr=0):(fr=+fr+1,Fr=0)):Ut==="<="&&(Ut="<",Kt?Vn=+Vn+1:fr=+fr+1),w=Ut+Vn+"."+fr+"."+Fr+ur):Kt?w=">="+Vn+".0.0"+ur+" <"+(+Vn+1)+".0.0"+ur:vu&&(w=">="+Vn+"."+fr+".0"+ur+" <"+Vn+"."+(+fr+1)+".0"+ur),t("xRange return",w),w})}(nr,An)}).join(" ")}(At,en),t("xrange",At),At=function(ln,An){return t("replaceStars",ln,An),ln.trim().replace(L[C.STAR],"")}(At,en),t("stars",At),At}(ct,this.options)},this).join(" ").split(/\s+/);return this.options.loose&&(je=je.filter(function(ct){return!!ct.match(ue)})),je=je.map(function(ct){return new rt(ct,this.options)},this)},xt.prototype.intersects=function(Q,ae){if(!(Q instanceof xt))throw new TypeError("a Range is required");return this.set.some(function(Ce){return $e(Ce,ae)&&Q.set.some(function(ue){return $e(ue,ae)&&Ce.every(function(je){return ue.every(function(ct){return je.intersects(ct,ae)})})})})},o.toComparators=function(Q,ae){return new xt(Q,ae).set.map(function(Ce){return Ce.map(function(ue){return ue.value}).join(" ").trim().split(" ")})},xt.prototype.test=function(Q){if(!Q)return!1;if(typeof Q=="string")try{Q=new m(Q,this.options)}catch(Ce){return!1}for(var ae=0;ae":ct.prerelease.length===0?ct.patch++:ct.prerelease.push(0),ct.raw=ct.format();case"":case">=":Ce&&!ge(Ce,ct)||(Ce=ct);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+je.operator)}});return Ce&&Q.test(Ce)?Ce:null},o.validRange=function(Q,ae){try{return new xt(Q,ae).range||"*"}catch(Ce){return null}},o.ltr=function(Q,ae,Ce){return at(Q,ae,"<",Ce)},o.gtr=function(Q,ae,Ce){return at(Q,ae,">",Ce)},o.outside=at,o.prerelease=function(Q,ae){var Ce=ne(Q,ae);return Ce&&Ce.prerelease.length?Ce.prerelease:null},o.intersects=function(Q,ae,Ce){return Q=new xt(Q,Ce),ae=new xt(ae,Ce),Q.intersects(ae)},o.coerce=function(Q,ae){if(Q instanceof m)return Q;if(typeof Q=="number"&&(Q=String(Q)),typeof Q!="string")return null;var Ce=null;if((ae=ae||{}).rtl){for(var ue;(ue=L[C.COERCERTL].exec(Q))&&(!Ce||Ce.index+Ce[0].length!==Q.length);)Ce&&ue.index+ue[0].length===Ce.index+Ce[0].length||(Ce=ue),L[C.COERCERTL].lastIndex=ue.index+ue[1].length+ue[2].length;L[C.COERCERTL].lastIndex=-1}else Ce=Q.match(L[C.COERCE]);return Ce===null?null:ne(Ce[2]+"."+(Ce[3]||"0")+"."+(Ce[4]||"0"),ae)}}).call(this,f(5))},function(i,o){function f(E){return(f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(E)}var p;p=function(){return this}();try{p=p||new Function("return this")()}catch(E){(typeof window=="undefined"?"undefined":f(window))==="object"&&(p=window)}i.exports=p},function(i,o){var f,p,E=i.exports={};function t(){throw new Error("setTimeout has not been defined")}function k(){throw new Error("clearTimeout has not been defined")}function L(Se){if(f===setTimeout)return setTimeout(Se,0);if((f===t||!f)&&setTimeout)return f=setTimeout,setTimeout(Se,0);try{return f(Se,0)}catch(he){try{return f.call(null,Se,0)}catch(ge){return f.call(this,Se,0)}}}(function(){try{f=typeof setTimeout=="function"?setTimeout:t}catch(Se){f=t}try{p=typeof clearTimeout=="function"?clearTimeout:k}catch(Se){p=k}})();var N,C=[],U=!1,q=-1;function W(){U&&N&&(U=!1,N.length?C=N.concat(C):q=-1,C.length&&ne())}function ne(){if(!U){var Se=L(W);U=!0;for(var he=C.length;he;){for(N=C,C=[];++q1)for(var ge=1;gethis[k])return Oe(this,this[m].get($e)),!1;var at=this[m].get($e).value;return this[q]&&(this[W]||this[q]($e,at.value)),at.now=jt,at.maxAge=Ke,at.value=ft,this[L]+=$t-at.length,at.length=$t,this.get($e),pe(this),!0}var Q=new le($e,ft,$t,jt,Ke);return Q.length>this[k]?(this[q]&&this[q]($e,ft),!1):(this[L]+=Q.length,this[ne].unshift(Q),this[m].set($e,this[ne].head),pe(this),!0)}},{key:"has",value:function($e){if(!this[m].has($e))return!1;var ft=this[m].get($e).value;return!ze(this,ft)}},{key:"get",value:function($e){return ge(this,$e,!0)}},{key:"peek",value:function($e){return ge(this,$e,!1)}},{key:"pop",value:function(){var $e=this[ne].tail;return $e?(Oe(this,$e),$e.value):null}},{key:"del",value:function($e){Oe(this,this[m].get($e))}},{key:"load",value:function($e){this.reset();for(var ft=Date.now(),Ke=$e.length-1;Ke>=0;Ke--){var jt=$e[Ke],$t=jt.e||0;if($t===0)this.set(jt.k,jt.v);else{var at=$t-ft;at>0&&this.set(jt.k,jt.v,at)}}}},{key:"prune",value:function(){var $e=this;this[m].forEach(function(ft,Ke){return ge($e,Ke,!1)})}},{key:"max",set:function($e){if(typeof $e!="number"||$e<0)throw new TypeError("max must be a non-negative number");this[k]=$e||1/0,pe(this)},get:function(){return this[k]}},{key:"allowStale",set:function($e){this[C]=!!$e},get:function(){return this[C]}},{key:"maxAge",set:function($e){if(typeof $e!="number")throw new TypeError("maxAge must be a non-negative number");this[U]=$e,pe(this)},get:function(){return this[U]}},{key:"lengthCalculator",set:function($e){var ft=this;typeof $e!="function"&&($e=Se),$e!==this[N]&&(this[N]=$e,this[L]=0,this[ne].forEach(function(Ke){Ke.length=ft[N](Ke.value,Ke.key),ft[L]+=Ke.length})),pe(this)},get:function(){return this[N]}},{key:"length",get:function(){return this[L]}},{key:"itemCount",get:function(){return this[ne].length}}])&&E(rt.prototype,wt),xt&&E(rt,xt),Ge}(),ge=function(Ge,rt,wt){var xt=Ge[m].get(rt);if(xt){var $e=xt.value;if(ze(Ge,$e)){if(Oe(Ge,xt),!Ge[C])return}else wt&&(Ge[we]&&(xt.value.now=Date.now()),Ge[ne].unshiftNode(xt));return $e.value}},ze=function(Ge,rt){if(!rt||!rt.maxAge&&!Ge[U])return!1;var wt=Date.now()-rt.now;return rt.maxAge?wt>rt.maxAge:Ge[U]&&wt>Ge[U]},pe=function(Ge){if(Ge[L]>Ge[k])for(var rt=Ge[ne].tail;Ge[L]>Ge[k]&&rt!==null;){var wt=rt.prev;Oe(Ge,rt),rt=wt}},Oe=function(Ge,rt){if(rt){var wt=rt.value;Ge[q]&&Ge[q](wt.key,wt.value),Ge[L]-=wt.length,Ge[m].delete(wt.key),Ge[ne].removeNode(rt)}},le=function Ge(rt,wt,xt,$e,ft){p(this,Ge),this.key=rt,this.value=wt,this.length=xt,this.now=$e,this.maxAge=ft||0},Ue=function(Ge,rt,wt,xt){var $e=wt.value;ze(Ge,$e)&&(Oe(Ge,wt),Ge[C]||($e=void 0)),$e&&rt.call(xt,$e.value,$e.key,Ge)};i.exports=he},function(i,o,f){(function(p){function E(t){return(E=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(k){return typeof k}:function(k){return k&&typeof Symbol=="function"&&k.constructor===Symbol&&k!==Symbol.prototype?"symbol":typeof k})(t)}i.exports=function(){if(typeof document=="undefined"||!document.addEventListener)return null;var t,k,L,N={};return N.copy=function(){var C=!1,U=null,q=!1;function W(){C=!1,U=null,q&&window.getSelection().removeAllRanges(),q=!1}return document.addEventListener("copy",function(ne){if(C){for(var m in U)ne.clipboardData.setData(m,U[m]);ne.preventDefault()}}),function(ne){return new Promise(function(m,we){C=!0,typeof ne=="string"?U={"text/plain":ne}:ne instanceof Node?U={"text/html":new XMLSerializer().serializeToString(ne)}:ne instanceof Object?U=ne:we("Invalid data type. Must be string, DOM node, or an object mapping MIME types to strings."),function Se(he){try{if(document.execCommand("copy"))W(),m();else{if(he)throw W(),new Error("Unable to copy. Perhaps it's not available in your browser?");(function(){var ge=document.getSelection();if(!document.queryCommandEnabled("copy")&&ge.isCollapsed){var ze=document.createRange();ze.selectNodeContents(document.body),ge.removeAllRanges(),ge.addRange(ze),q=!0}})(),Se(!0)}}catch(ge){W(),we(ge)}}(!1)})}}(),N.paste=(L=!1,document.addEventListener("paste",function(C){if(L){L=!1,C.preventDefault();var U=t;t=null,U(C.clipboardData.getData(k))}}),function(C){return new Promise(function(U,q){L=!0,t=U,k=C||"text/plain";try{document.execCommand("paste")||(L=!1,q(new Error("Unable to paste. Pasting only works in Internet Explorer at the moment.")))}catch(W){L=!1,q(new Error(W))}})}),typeof ClipboardEvent=="undefined"&&window.clipboardData!==void 0&&window.clipboardData.setData!==void 0&&(function(C){function U(pe,Oe){return function(){pe.apply(Oe,arguments)}}function q(pe){if(E(this)!="object")throw new TypeError("Promises must be constructed via new");if(typeof pe!="function")throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],he(pe,U(ne,this),U(m,this))}function W(pe){var Oe=this;return this._state===null?void this._deferreds.push(pe):void ge(function(){var le=Oe._state?pe.onFulfilled:pe.onRejected;if(le!==null){var Ue;try{Ue=le(Oe._value)}catch(Ge){return void pe.reject(Ge)}pe.resolve(Ue)}else(Oe._state?pe.resolve:pe.reject)(Oe._value)})}function ne(pe){try{if(pe===this)throw new TypeError("A promise cannot be resolved with itself.");if(pe&&(E(pe)=="object"||typeof pe=="function")){var Oe=pe.then;if(typeof Oe=="function")return void he(U(Oe,pe),U(ne,this),U(m,this))}this._state=!0,this._value=pe,we.call(this)}catch(le){m.call(this,le)}}function m(pe){this._state=!1,this._value=pe,we.call(this)}function we(){for(var pe=0,Oe=this._deferreds.length;Oe>pe;pe++)W.call(this,this._deferreds[pe]);this._deferreds=null}function Se(pe,Oe,le,Ue){this.onFulfilled=typeof pe=="function"?pe:null,this.onRejected=typeof Oe=="function"?Oe:null,this.resolve=le,this.reject=Ue}function he(pe,Oe,le){var Ue=!1;try{pe(function(Ge){Ue||(Ue=!0,Oe(Ge))},function(Ge){Ue||(Ue=!0,le(Ge))})}catch(Ge){if(Ue)return;Ue=!0,le(Ge)}}var ge=q.immediateFn||typeof p=="function"&&p||function(pe){setTimeout(pe,1)},ze=Array.isArray||function(pe){return Object.prototype.toString.call(pe)==="[object Array]"};q.prototype.catch=function(pe){return this.then(null,pe)},q.prototype.then=function(pe,Oe){var le=this;return new q(function(Ue,Ge){W.call(le,new Se(pe,Oe,Ue,Ge))})},q.all=function(){var pe=Array.prototype.slice.call(arguments.length===1&&ze(arguments[0])?arguments[0]:arguments);return new q(function(Oe,le){function Ue(wt,xt){try{if(xt&&(E(xt)=="object"||typeof xt=="function")){var $e=xt.then;if(typeof $e=="function")return void $e.call(xt,function(ft){Ue(wt,ft)},le)}pe[wt]=xt,--Ge==0&&Oe(pe)}catch(ft){le(ft)}}if(pe.length===0)return Oe([]);for(var Ge=pe.length,rt=0;rtUe;Ue++)pe[Ue].then(Oe,le)})},i.exports?i.exports=q:C.Promise||(C.Promise=q)}(this),N.copy=function(C){return new Promise(function(U,q){if(typeof C!="string"&&!("text/plain"in C))throw new Error("You must provide a text/plain type.");var W=typeof C=="string"?C:C["text/plain"];window.clipboardData.setData("Text",W)?U():q(new Error("Copying was rejected."))})},N.paste=function(){return new Promise(function(C,U){var q=window.clipboardData.getData("Text");q?C(q):U(new Error("Pasting was rejected."))})}),N}()}).call(this,f(13).setImmediate)},function(i,o,f){"use strict";i.exports=f(15)},function(i,o,f){"use strict";f.r(o),o.default=`:root { - /** - * IMPORTANT: When new theme variables are added below\u2013 also add them to SettingsContext updateThemeVariables() - */ - - /* Light theme */ - --light-color-attribute-name: #ef6632; - --light-color-attribute-name-not-editable: #23272f; - --light-color-attribute-name-inverted: rgba(255, 255, 255, 0.7); - --light-color-attribute-value: #1a1aa6; - --light-color-attribute-value-inverted: #ffffff; - --light-color-attribute-editable-value: #1a1aa6; - --light-color-background: #ffffff; - --light-color-background-hover: rgba(0, 136, 250, 0.1); - --light-color-background-inactive: #e5e5e5; - --light-color-background-invalid: #fff0f0; - --light-color-background-selected: #0088fa; - --light-color-button-background: #ffffff; - --light-color-button-background-focus: #ededed; - --light-color-button: #5f6673; - --light-color-button-disabled: #cfd1d5; - --light-color-button-active: #0088fa; - --light-color-button-focus: #23272f; - --light-color-button-hover: #23272f; - --light-color-border: #eeeeee; - --light-color-commit-did-not-render-fill: #cfd1d5; - --light-color-commit-did-not-render-fill-text: #000000; - --light-color-commit-did-not-render-pattern: #cfd1d5; - --light-color-commit-did-not-render-pattern-text: #333333; - --light-color-commit-gradient-0: #37afa9; - --light-color-commit-gradient-1: #63b19e; - --light-color-commit-gradient-2: #80b393; - --light-color-commit-gradient-3: #97b488; - --light-color-commit-gradient-4: #abb67d; - --light-color-commit-gradient-5: #beb771; - --light-color-commit-gradient-6: #cfb965; - --light-color-commit-gradient-7: #dfba57; - --light-color-commit-gradient-8: #efbb49; - --light-color-commit-gradient-9: #febc38; - --light-color-commit-gradient-text: #000000; - --light-color-component-name: #6a51b2; - --light-color-component-name-inverted: #ffffff; - --light-color-component-badge-background: rgba(0, 0, 0, 0.1); - --light-color-component-badge-background-inverted: rgba(255, 255, 255, 0.25); - --light-color-component-badge-count: #777d88; - --light-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7); - --light-color-context-background: rgba(0,0,0,.9); - --light-color-context-background-hover: rgba(255, 255, 255, 0.1); - --light-color-context-background-selected: #178fb9; - --light-color-context-border: #3d424a; - --light-color-context-text: #ffffff; - --light-color-context-text-selected: #ffffff; - --light-color-dim: #777d88; - --light-color-dimmer: #cfd1d5; - --light-color-dimmest: #eff0f1; - --light-color-error-background: hsl(0, 100%, 97%); - --light-color-error-border: hsl(0, 100%, 92%); - --light-color-error-text: #ff0000; - --light-color-expand-collapse-toggle: #777d88; - --light-color-link: #0000ff; - --light-color-modal-background: rgba(255, 255, 255, 0.75); - --light-color-record-active: #fc3a4b; - --light-color-record-hover: #3578e5; - --light-color-record-inactive: #0088fa; - --light-color-scroll-thumb: #c2c2c2; - --light-color-scroll-track: #fafafa; - --light-color-search-match: yellow; - --light-color-search-match-current: #f7923b; - --light-color-selected-tree-highlight-active: rgba(0, 136, 250, 0.1); - --light-color-selected-tree-highlight-inactive: rgba(0, 0, 0, 0.05); - --light-color-shadow: rgba(0, 0, 0, 0.25); - --light-color-tab-selected-border: #0088fa; - --light-color-text: #000000; - --light-color-text-invalid: #ff0000; - --light-color-text-selected: #ffffff; - --light-color-toggle-background-invalid: #fc3a4b; - --light-color-toggle-background-on: #0088fa; - --light-color-toggle-background-off: #cfd1d5; - --light-color-toggle-text: #ffffff; - --light-color-tooltip-background: rgba(0, 0, 0, 0.9); - --light-color-tooltip-text: #ffffff; - - /* Dark theme */ - --dark-color-attribute-name: #9d87d2; - --dark-color-attribute-name-not-editable: #ededed; - --dark-color-attribute-name-inverted: #282828; - --dark-color-attribute-value: #cedae0; - --dark-color-attribute-value-inverted: #ffffff; - --dark-color-attribute-editable-value: yellow; - --dark-color-background: #282c34; - --dark-color-background-hover: rgba(255, 255, 255, 0.1); - --dark-color-background-inactive: #3d424a; - --dark-color-background-invalid: #5c0000; - --dark-color-background-selected: #178fb9; - --dark-color-button-background: #282c34; - --dark-color-button-background-focus: #3d424a; - --dark-color-button: #afb3b9; - --dark-color-button-active: #61dafb; - --dark-color-button-disabled: #4f5766; - --dark-color-button-focus: #a2e9fc; - --dark-color-button-hover: #ededed; - --dark-color-border: #3d424a; - --dark-color-commit-did-not-render-fill: #777d88; - --dark-color-commit-did-not-render-fill-text: #000000; - --dark-color-commit-did-not-render-pattern: #666c77; - --dark-color-commit-did-not-render-pattern-text: #ffffff; - --dark-color-commit-gradient-0: #37afa9; - --dark-color-commit-gradient-1: #63b19e; - --dark-color-commit-gradient-2: #80b393; - --dark-color-commit-gradient-3: #97b488; - --dark-color-commit-gradient-4: #abb67d; - --dark-color-commit-gradient-5: #beb771; - --dark-color-commit-gradient-6: #cfb965; - --dark-color-commit-gradient-7: #dfba57; - --dark-color-commit-gradient-8: #efbb49; - --dark-color-commit-gradient-9: #febc38; - --dark-color-commit-gradient-text: #000000; - --dark-color-component-name: #61dafb; - --dark-color-component-name-inverted: #282828; - --dark-color-component-badge-background: rgba(255, 255, 255, 0.25); - --dark-color-component-badge-background-inverted: rgba(0, 0, 0, 0.25); - --dark-color-component-badge-count: #8f949d; - --dark-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7); - --dark-color-context-background: rgba(255,255,255,.9); - --dark-color-context-background-hover: rgba(0, 136, 250, 0.1); - --dark-color-context-background-selected: #0088fa; - --dark-color-context-border: #eeeeee; - --dark-color-context-text: #000000; - --dark-color-context-text-selected: #ffffff; - --dark-color-dim: #8f949d; - --dark-color-dimmer: #777d88; - --dark-color-dimmest: #4f5766; - --dark-color-error-background: #200; - --dark-color-error-border: #900; - --dark-color-error-text: #f55; - --dark-color-expand-collapse-toggle: #8f949d; - --dark-color-link: #61dafb; - --dark-color-modal-background: rgba(0, 0, 0, 0.75); - --dark-color-record-active: #fc3a4b; - --dark-color-record-hover: #a2e9fc; - --dark-color-record-inactive: #61dafb; - --dark-color-scroll-thumb: #afb3b9; - --dark-color-scroll-track: #313640; - --dark-color-search-match: yellow; - --dark-color-search-match-current: #f7923b; - --dark-color-selected-tree-highlight-active: rgba(23, 143, 185, 0.15); - --dark-color-selected-tree-highlight-inactive: rgba(255, 255, 255, 0.05); - --dark-color-shadow: rgba(0, 0, 0, 0.5); - --dark-color-tab-selected-border: #178fb9; - --dark-color-text: #ffffff; - --dark-color-text-invalid: #ff8080; - --dark-color-text-selected: #ffffff; - --dark-color-toggle-background-invalid: #fc3a4b; - --dark-color-toggle-background-on: #178fb9; - --dark-color-toggle-background-off: #777d88; - --dark-color-toggle-text: #ffffff; - --dark-color-tooltip-background: rgba(255, 255, 255, 0.9); - --dark-color-tooltip-text: #000000; - - /* Font smoothing */ - --light-font-smoothing: auto; - --dark-font-smoothing: antialiased; - --font-smoothing: auto; - - /* Compact density */ - --compact-font-size-monospace-small: 9px; - --compact-font-size-monospace-normal: 11px; - --compact-font-size-monospace-large: 15px; - --compact-font-size-sans-small: 10px; - --compact-font-size-sans-normal: 12px; - --compact-font-size-sans-large: 14px; - --compact-line-height-data: 18px; - --compact-root-font-size: 16px; - - /* Comfortable density */ - --comfortable-font-size-monospace-small: 10px; - --comfortable-font-size-monospace-normal: 13px; - --comfortable-font-size-monospace-large: 17px; - --comfortable-font-size-sans-small: 12px; - --comfortable-font-size-sans-normal: 14px; - --comfortable-font-size-sans-large: 16px; - --comfortable-line-height-data: 22px; - --comfortable-root-font-size: 20px; - - /* GitHub.com system fonts */ - --font-family-monospace: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, - Courier, monospace; - --font-family-sans: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, - Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; - - /* Constant values shared between JS and CSS */ - --interaction-commit-size: 10px; - --interaction-label-width: 200px; -} -`},function(i,o,f){"use strict";function p(N){var C=this;if(C instanceof p||(C=new p),C.tail=null,C.head=null,C.length=0,N&&typeof N.forEach=="function")N.forEach(function(W){C.push(W)});else if(arguments.length>0)for(var U=0,q=arguments.length;U1)U=C;else{if(!this.head)throw new TypeError("Reduce of empty list with no initial value");q=this.head.next,U=this.head.value}for(var W=0;q!==null;W++)U=N(U,q.value,W),q=q.next;return U},p.prototype.reduceReverse=function(N,C){var U,q=this.tail;if(arguments.length>1)U=C;else{if(!this.tail)throw new TypeError("Reduce of empty list with no initial value");q=this.tail.prev,U=this.tail.value}for(var W=this.length-1;q!==null;W--)U=N(U,q.value,W),q=q.prev;return U},p.prototype.toArray=function(){for(var N=new Array(this.length),C=0,U=this.head;U!==null;C++)N[C]=U.value,U=U.next;return N},p.prototype.toArrayReverse=function(){for(var N=new Array(this.length),C=0,U=this.tail;U!==null;C++)N[C]=U.value,U=U.prev;return N},p.prototype.slice=function(N,C){(C=C||this.length)<0&&(C+=this.length),(N=N||0)<0&&(N+=this.length);var U=new p;if(Cthis.length&&(C=this.length);for(var q=0,W=this.head;W!==null&&qthis.length&&(C=this.length);for(var q=this.length,W=this.tail;W!==null&&q>C;q--)W=W.prev;for(;W!==null&&q>N;q--,W=W.prev)U.push(W.value);return U},p.prototype.splice=function(N,C){N>this.length&&(N=this.length-1),N<0&&(N=this.length+N);for(var U=0,q=this.head;q!==null&&U=0&&(L._idleTimeoutId=setTimeout(function(){L._onTimeout&&L._onTimeout()},N))},f(14),o.setImmediate=typeof self!="undefined"&&self.setImmediate||p!==void 0&&p.setImmediate||this&&this.setImmediate,o.clearImmediate=typeof self!="undefined"&&self.clearImmediate||p!==void 0&&p.clearImmediate||this&&this.clearImmediate}).call(this,f(4))},function(i,o,f){(function(p,E){(function(t,k){"use strict";if(!t.setImmediate){var L,N,C,U,q,W=1,ne={},m=!1,we=t.document,Se=Object.getPrototypeOf&&Object.getPrototypeOf(t);Se=Se&&Se.setTimeout?Se:t,{}.toString.call(t.process)==="[object process]"?L=function(ze){E.nextTick(function(){ge(ze)})}:function(){if(t.postMessage&&!t.importScripts){var ze=!0,pe=t.onmessage;return t.onmessage=function(){ze=!1},t.postMessage("","*"),t.onmessage=pe,ze}}()?(U="setImmediate$"+Math.random()+"$",q=function(ze){ze.source===t&&typeof ze.data=="string"&&ze.data.indexOf(U)===0&&ge(+ze.data.slice(U.length))},t.addEventListener?t.addEventListener("message",q,!1):t.attachEvent("onmessage",q),L=function(ze){t.postMessage(U+ze,"*")}):t.MessageChannel?((C=new MessageChannel).port1.onmessage=function(ze){ge(ze.data)},L=function(ze){C.port2.postMessage(ze)}):we&&"onreadystatechange"in we.createElement("script")?(N=we.documentElement,L=function(ze){var pe=we.createElement("script");pe.onreadystatechange=function(){ge(ze),pe.onreadystatechange=null,N.removeChild(pe),pe=null},N.appendChild(pe)}):L=function(ze){setTimeout(ge,0,ze)},Se.setImmediate=function(ze){typeof ze!="function"&&(ze=new Function(""+ze));for(var pe=new Array(arguments.length-1),Oe=0;Oeae;ae++)if((Q=he(at,jt,ae))!==-1){Se=ae,jt=Q;break e}jt=-1}}e:{if(at=$t,(Q=W().get(Ke.primitive))!==void 0){for(ae=0;aejt-at?null:$t.slice(at,jt-1))!==null){if(jt=0,rt!==null){for(;jt<$t.length&&jtjt;rt--)wt=$e.pop()}for(rt=$t.length-jt-1;1<=rt;rt--)jt=[],wt.push({id:null,isStateEditable:!1,name:ze($t[rt-1].functionName),value:void 0,subHooks:jt}),$e.push(wt),wt=jt;rt=$t}jt=($t=Ke.primitive)==="Context"||$t==="DebugValue"?null:xt++,wt.push({id:jt,isStateEditable:$t==="Reducer"||$t==="State",name:$t,value:Ke.value,subHooks:[]})}return function Ce(ue,je){for(var ct=[],At=0;At-1&&(ne=ne.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var m=ne.replace(/^\s+/,"").replace(/\(eval code/g,"("),we=m.match(/ (\((.+):(\d+):(\d+)\)$)/),Se=(m=we?m.replace(we[0],""):m).split(/\s+/).slice(1),he=this.extractLocation(we?we[1]:Se.pop()),ge=Se.join(" ")||void 0,ze=["eval",""].indexOf(he[0])>-1?void 0:he[0];return new N({functionName:ge,fileName:ze,lineNumber:he[1],columnNumber:he[2],source:ne})},this)},parseFFOrSafari:function(W){return W.stack.split(` -`).filter(function(ne){return!ne.match(q)},this).map(function(ne){if(ne.indexOf(" > eval")>-1&&(ne=ne.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),ne.indexOf("@")===-1&&ne.indexOf(":")===-1)return new N({functionName:ne});var m=/((.*".+"[^@]*)?[^@]*)(?:@)/,we=ne.match(m),Se=we&&we[1]?we[1]:void 0,he=this.extractLocation(ne.replace(m,""));return new N({functionName:Se,fileName:he[0],lineNumber:he[1],columnNumber:he[2],source:ne})},this)},parseOpera:function(W){return!W.stacktrace||W.message.indexOf(` -`)>-1&&W.message.split(` -`).length>W.stacktrace.split(` -`).length?this.parseOpera9(W):W.stack?this.parseOpera11(W):this.parseOpera10(W)},parseOpera9:function(W){for(var ne=/Line (\d+).*script (?:in )?(\S+)/i,m=W.message.split(` -`),we=[],Se=2,he=m.length;Se/,"$2").replace(/\([^)]*\)/g,"")||void 0;he.match(/\(([^)]*)\)/)&&(m=he.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var ze=m===void 0||m==="[arguments not available]"?void 0:m.split(",");return new N({functionName:ge,args:ze,fileName:Se[0],lineNumber:Se[1],columnNumber:Se[2],source:ne})},this)}}})=="function"?p.apply(o,E):p)===void 0||(i.exports=t)})()},function(i,o,f){var p,E,t;(function(k,L){"use strict";E=[],(t=typeof(p=function(){function N(ge){return ge.charAt(0).toUpperCase()+ge.substring(1)}function C(ge){return function(){return this[ge]}}var U=["isConstructor","isEval","isNative","isToplevel"],q=["columnNumber","lineNumber"],W=["fileName","functionName","source"],ne=U.concat(q,W,["args"]);function m(ge){if(ge)for(var ze=0;ze1?xe-1:0),ke=1;ke=0&&xe.splice(Z,1)}}}])&&p(z.prototype,G),$&&p(z,$),B}(),t=f(2),k=f.n(t);try{var L=f(9).default,N=function(B){var z=new RegExp("".concat(B,": ([0-9]+)")),G=L.match(z);return parseInt(G[1],10)};N("comfortable-line-height-data"),N("compact-line-height-data")}catch(B){}function C(B){try{return sessionStorage.getItem(B)}catch(z){return null}}function U(B){try{sessionStorage.removeItem(B)}catch(z){}}function q(B,z){try{return sessionStorage.setItem(B,z)}catch(G){}}var W=function(B,z){return B===z},ne=f(1),m=f.n(ne);function we(B){return B.ownerDocument?B.ownerDocument.defaultView:null}function Se(B){var z=we(B);return z?z.frameElement:null}function he(B){var z=pe(B);return ge([B.getBoundingClientRect(),{top:z.borderTop,left:z.borderLeft,bottom:z.borderBottom,right:z.borderRight,width:0,height:0}])}function ge(B){return B.reduce(function(z,G){return z==null?G:{top:z.top+G.top,left:z.left+G.left,width:z.width,height:z.height,bottom:z.bottom+G.bottom,right:z.right+G.right}})}function ze(B,z){var G=Se(B);if(G&&G!==z){for(var $=[B.getBoundingClientRect()],De=G,me=!1;De;){var xe=he(De);if($.push(xe),De=Se(De),me)break;De&&we(De)===z&&(me=!0)}return ge($)}return B.getBoundingClientRect()}function pe(B){var z=window.getComputedStyle(B);return{borderLeft:parseInt(z.borderLeftWidth,10),borderRight:parseInt(z.borderRightWidth,10),borderTop:parseInt(z.borderTopWidth,10),borderBottom:parseInt(z.borderBottomWidth,10),marginLeft:parseInt(z.marginLeft,10),marginRight:parseInt(z.marginRight,10),marginTop:parseInt(z.marginTop,10),marginBottom:parseInt(z.marginBottom,10),paddingLeft:parseInt(z.paddingLeft,10),paddingRight:parseInt(z.paddingRight,10),paddingTop:parseInt(z.paddingTop,10),paddingBottom:parseInt(z.paddingBottom,10)}}function Oe(B,z){var G;if(typeof Symbol=="undefined"||B[Symbol.iterator]==null){if(Array.isArray(B)||(G=function(ke,Xe){if(!!ke){if(typeof ke=="string")return le(ke,Xe);var ht=Object.prototype.toString.call(ke).slice(8,-1);if(ht==="Object"&&ke.constructor&&(ht=ke.constructor.name),ht==="Map"||ht==="Set")return Array.from(ke);if(ht==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(ht))return le(ke,Xe)}}(B))||z&&B&&typeof B.length=="number"){G&&(B=G);var $=0,De=function(){};return{s:De,n:function(){return $>=B.length?{done:!0}:{done:!1,value:B[$++]}},e:function(ke){throw ke},f:De}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var me,xe=!0,Z=!1;return{s:function(){G=B[Symbol.iterator]()},n:function(){var ke=G.next();return xe=ke.done,ke},e:function(ke){Z=!0,me=ke},f:function(){try{xe||G.return==null||G.return()}finally{if(Z)throw me}}}}function le(B,z){(z==null||z>B.length)&&(z=B.length);for(var G=0,$=new Array(z);Gxe.left+xe.width&&(ie=xe.left+xe.width-ht-5),{style:{top:ke+="px",left:ie+="px"}}}(z,G,{width:$.width,height:$.height});m()(this.tip.style,De.style)}}]),B}(),$e=function(){function B(){Ue(this,B);var z=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.window=z;var G=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.tipBoundsWindow=G;var $=z.document;this.container=$.createElement("div"),this.container.style.zIndex="10000000",this.tip=new xt($,this.container),this.rects=[],$.body.appendChild(this.container)}return rt(B,[{key:"remove",value:function(){this.tip.remove(),this.rects.forEach(function(z){z.remove()}),this.rects.length=0,this.container.parentNode&&this.container.parentNode.removeChild(this.container)}},{key:"inspect",value:function(z,G){for(var $=this,De=z.filter(function(Tt){return Tt.nodeType===Node.ELEMENT_NODE});this.rects.length>De.length;)this.rects.pop().remove();if(De.length!==0){for(;this.rects.length1&&arguments[1]!==void 0?arguments[1]:W,tt=void 0,Tt=[],kt=void 0,bt=!1,on=function(Lt,gn){return qe(Lt,Tt[gn])},tn=function(){for(var Lt=arguments.length,gn=Array(Lt),lr=0;lr5&&arguments[5]!==void 0?arguments[5]:0,Z=Co(B);switch(Z){case"html_element":return z.push($),{inspectable:!1,preview_short:Si(B,!1),preview_long:Si(B,!0),name:B.tagName,type:Z};case"function":return z.push($),{inspectable:!1,preview_short:Si(B,!1),preview_long:Si(B,!0),name:typeof B.name!="function"&&B.name?B.name:"function",type:Z};case"string":return B.length<=500?B:B.slice(0,500)+"...";case"bigint":case"symbol":return z.push($),{inspectable:!1,preview_short:Si(B,!1),preview_long:Si(B,!0),name:B.toString(),type:Z};case"react_element":return z.push($),{inspectable:!1,preview_short:Si(B,!1),preview_long:Si(B,!0),name:L0(B)||"Unknown",type:Z};case"array_buffer":case"data_view":return z.push($),{inspectable:!1,preview_short:Si(B,!1),preview_long:Si(B,!0),name:Z==="data_view"?"DataView":"ArrayBuffer",size:B.byteLength,type:Z};case"array":return me=De($),xe>=2&&!me?a0(Z,!0,B,z,$):B.map(function(ht,ie){return So(ht,z,G,$.concat([ie]),De,me?1:xe+1)});case"html_all_collection":case"typed_array":case"iterator":if(me=De($),xe>=2&&!me)return a0(Z,!0,B,z,$);var ke={unserializable:!0,type:Z,readonly:!0,size:Z==="typed_array"?B.length:void 0,preview_short:Si(B,!1),preview_long:Si(B,!0),name:B.constructor&&B.constructor.name!=="Object"?B.constructor.name:""};return Kt(B[Symbol.iterator])&&Array.from(B).forEach(function(ht,ie){return ke[ie]=So(ht,z,G,$.concat([ie]),De,me?1:xe+1)}),G.push($),ke;case"opaque_iterator":return z.push($),{inspectable:!1,preview_short:Si(B,!1),preview_long:Si(B,!0),name:B[Symbol.toStringTag],type:Z};case"date":case"regexp":return z.push($),{inspectable:!1,preview_short:Si(B,!1),preview_long:Si(B,!0),name:B.toString(),type:Z};case"object":if(me=De($),xe>=2&&!me)return a0(Z,!0,B,z,$);var Xe={};return eu(B).forEach(function(ht){var ie=ht.toString();Xe[ie]=So(B[ht],z,G,$.concat([ie]),De,me?1:xe+1)}),Xe;case"infinity":case"nan":case"undefined":return z.push($),{type:Z};default:return B}}function Go(B){return(Go=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(z){return typeof z}:function(z){return z&&typeof Symbol=="function"&&z.constructor===Symbol&&z!==Symbol.prototype?"symbol":typeof z})(B)}function Os(B){return function(z){if(Array.isArray(z))return Yo(z)}(B)||function(z){if(typeof Symbol!="undefined"&&Symbol.iterator in Object(z))return Array.from(z)}(B)||function(z,G){if(!!z){if(typeof z=="string")return Yo(z,G);var $=Object.prototype.toString.call(z).slice(8,-1);if($==="Object"&&z.constructor&&($=z.constructor.name),$==="Map"||$==="Set")return Array.from(z);if($==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test($))return Yo(z,G)}}(B)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Yo(B,z){(z==null||z>B.length)&&(z=B.length);for(var G=0,$=new Array(z);Gz.toString()?1:z.toString()>B.toString()?-1:0}function eu(B){for(var z=[],G=B,$=function(){var De=[].concat(Os(Object.keys(G)),Os(Object.getOwnPropertySymbols(G))),me=Object.getOwnPropertyDescriptors(G);De.forEach(function(xe){me[xe].enumerable&&z.push(xe)}),G=Object.getPrototypeOf(G)};G!=null;)$();return z}function ai(B){var z=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Anonymous",G=Ko.get(B);if(G!=null)return G;var $=z;return typeof B.displayName=="string"?$=B.displayName:typeof B.name=="string"&&B.name!==""&&($=B.name),Ko.set(B,$),$}var mr=0;function Xo(){return++mr}function W0(B){var z=qt.get(B);if(z!==void 0)return z;for(var G=new Array(B.length),$=0;$1&&arguments[1]!==void 0?arguments[1]:50;return B.length>z?B.substr(0,z)+"\u2026":B}function Si(B,z){if(B!=null&&hasOwnProperty.call(B,vu.type))return z?B[vu.preview_long]:B[vu.preview_short];switch(Co(B)){case"html_element":return"<".concat(tu(B.tagName.toLowerCase())," />");case"function":return tu("\u0192 ".concat(typeof B.name=="function"?"":B.name,"() {}"));case"string":return'"'.concat(B,'"');case"bigint":return tu(B.toString()+"n");case"regexp":case"symbol":return tu(B.toString());case"react_element":return"<".concat(tu(L0(B)||"Unknown")," />");case"array_buffer":return"ArrayBuffer(".concat(B.byteLength,")");case"data_view":return"DataView(".concat(B.buffer.byteLength,")");case"array":if(z){for(var G="",$=0;$0&&(G+=", "),!((G+=Si(B[$],!1)).length>50));$++);return"[".concat(tu(G),"]")}var De=hasOwnProperty.call(B,vu.size)?B[vu.size]:B.length;return"Array(".concat(De,")");case"typed_array":var me="".concat(B.constructor.name,"(").concat(B.length,")");if(z){for(var xe="",Z=0;Z0&&(xe+=", "),!((xe+=B[Z]).length>50));Z++);return"".concat(me," [").concat(tu(xe),"]")}return me;case"iterator":var ke=B.constructor.name;if(z){for(var Xe=Array.from(B),ht="",ie=0;ie0&&(ht+=", "),Array.isArray(qe)){var tt=Si(qe[0],!0),Tt=Si(qe[1],!1);ht+="".concat(tt," => ").concat(Tt)}else ht+=Si(qe,!1);if(ht.length>50)break}return"".concat(ke,"(").concat(B.size,") {").concat(tu(ht),"}")}return"".concat(ke,"(").concat(B.size,")");case"opaque_iterator":return B[Symbol.toStringTag];case"date":return B.toString();case"object":if(z){for(var kt=eu(B).sort(_i),bt="",on=0;on0&&(bt+=", "),(bt+="".concat(tn.toString(),": ").concat(Si(B[tn],!1))).length>50)break}return"{".concat(tu(bt),"}")}return"{\u2026}";case"boolean":case"number":case"infinity":case"nan":case"null":case"undefined":return B;default:try{return tu(""+B)}catch(Lt){return"unserializable"}}}var ks=f(7);function Hl(B){return(Hl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(z){return typeof z}:function(z){return z&&typeof Symbol=="function"&&z.constructor===Symbol&&z!==Symbol.prototype?"symbol":typeof z})(B)}function F0(B,z){var G=Object.keys(B);if(Object.getOwnPropertySymbols){var $=Object.getOwnPropertySymbols(B);z&&($=$.filter(function(De){return Object.getOwnPropertyDescriptor(B,De).enumerable})),G.push.apply(G,$)}return G}function f0(B){for(var z=1;z2&&arguments[2]!==void 0?arguments[2]:[];if(B!==null){var $=[],De=[],me=So(B,$,De,G,z);return{data:me,cleaned:$,unserializable:De}}return null}function G0(B){var z,G,$=(z=B,G=new Set,JSON.stringify(z,function(xe,Z){if(Hl(Z)==="object"&&Z!==null){if(G.has(Z))return;G.add(Z)}return typeof Z=="bigint"?Z.toString()+"n":Z})),De=$===void 0?"undefined":$,me=window.__REACT_DEVTOOLS_GLOBAL_HOOK__.clipboardCopyText;typeof me=="function"?me(De).catch(function(xe){}):Object(ks.copy)(De)}function fi(B,z){var G=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,$=z[G],De=Array.isArray(B)?B.slice():f0({},B);return G+1===z.length?Array.isArray(De)?De.splice($,1):delete De[$]:De[$]=fi(B[$],z,G+1),De}function Zt(B,z,G){var $=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,De=z[$],me=Array.isArray(B)?B.slice():f0({},B);if($+1===z.length){var xe=G[$];me[xe]=me[De],Array.isArray(me)?me.splice(De,1):delete me[De]}else me[De]=Zt(B[De],z,G,$+1);return me}function Ln(B,z,G){var $=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;if($>=z.length)return G;var De=z[$],me=Array.isArray(B)?B.slice():f0({},B);return me[De]=Ln(B[De],z,G,$+1),me}var Di=f(8);function ci(B,z){var G=Object.keys(B);if(Object.getOwnPropertySymbols){var $=Object.getOwnPropertySymbols(B);z&&($=$.filter(function(De){return Object.getOwnPropertyDescriptor(B,De).enumerable})),G.push.apply(G,$)}return G}function Ht(B){for(var z=1;z=B.length?{done:!0}:{done:!1,value:B[$++]}},e:function(ke){throw ke},f:De}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var me,xe=!0,Z=!1;return{s:function(){G=B[Symbol.iterator]()},n:function(){var ke=G.next();return xe=ke.done,ke},e:function(ke){Z=!0,me=ke},f:function(){try{xe||G.return==null||G.return()}finally{if(Z)throw me}}}}function Wl(B,z){if(B){if(typeof B=="string")return xo(B,z);var G=Object.prototype.toString.call(B).slice(8,-1);return G==="Object"&&B.constructor&&(G=B.constructor.name),G==="Map"||G==="Set"?Array.from(B):G==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(G)?xo(B,z):void 0}}function xo(B,z){(z==null||z>B.length)&&(z=B.length);for(var G=0,$=new Array(z);G0){var vt=me(se);if(vt!=null){var Xt,xn=Ui(Mo);try{for(xn.s();!(Xt=xn.n()).done;)if(Xt.value.test(vt))return!0}catch(er){xn.e(er)}finally{xn.f()}}}if(re!=null&&ds.size>0){var _n,yn=re.fileName,En=Ui(ds);try{for(En.s();!(_n=En.n()).done;)if(_n.value.test(yn))return!0}catch(er){En.e(er)}finally{En.f()}}return!1}function yu(se){var re=se.type;switch(se.tag){case Tt:case _r:return 1;case tt:case Cn:return 5;case tn:return 6;case Lt:return 11;case lr:return 7;case gn:case Qn:case on:return 9;case Ar:case Rr:return 8;case nt:return 12;case _t:return 13;default:switch(xe(re)){case 60111:case"Symbol(react.concurrent_mode)":case"Symbol(react.async_mode)":return 9;case 60109:case"Symbol(react.provider)":return 2;case 60110:case"Symbol(react.context)":return 2;case 60108:case"Symbol(react.strict_mode)":return 9;case 60114:case"Symbol(react.profiler)":return 10;default:return 9}}}function pi(se){if(Fo.has(se))return se;var re=se.alternate;return re!=null&&Fo.has(re)?re:(Fo.add(se),se)}window.__REACT_DEVTOOLS_COMPONENT_FILTERS__!=null?ps(window.__REACT_DEVTOOLS_COMPONENT_FILTERS__):ps([{type:1,value:7,isEnabled:!0}]);var T0=new Map,Q0=new Map,Fo=new Set,ta=new Map,Kl=new Map,Ki=-1;function Yr(se){if(!T0.has(se)){var re=Xo();T0.set(se,re),Q0.set(re,se)}return T0.get(se)}function fo(se){switch(yu(se)){case 1:if(I0!==null){var re=Yr(pi(se)),Le=gi(se);Le!==null&&I0.set(re,Le)}}}var Oi={};function gi(se){switch(yu(se)){case 1:var re=se.stateNode,Le=Oi,Ae=Oi;return re!=null&&(re.constructor&&re.constructor.contextType!=null?Ae=re.context:(Le=re.context)&&Object.keys(Le).length===0&&(Le=Oi)),[Le,Ae];default:return null}}function ff(se){switch(yu(se)){case 1:if(I0!==null){var re=Yr(pi(se)),Le=I0.has(re)?I0.get(re):null,Ae=gi(se);if(Le==null||Ae==null)return null;var ot=Y0(Le,2),vt=ot[0],Xt=ot[1],xn=Y0(Ae,2),_n=xn[0],yn=xn[1];if(_n!==Oi)return J0(vt,_n);if(yn!==Oi)return Xt!==yn}}return null}function cf(se,re){if(se==null||re==null)return!1;if(re.hasOwnProperty("baseState")&&re.hasOwnProperty("memoizedState")&&re.hasOwnProperty("next")&&re.hasOwnProperty("queue"))for(;re!==null;){if(re.memoizedState!==se.memoizedState)return!0;re=re.next,se=se.next}return!1}function J0(se,re){if(se==null||re==null||re.hasOwnProperty("baseState")&&re.hasOwnProperty("memoizedState")&&re.hasOwnProperty("next")&&re.hasOwnProperty("queue"))return null;var Le,Ae=[],ot=Ui(new Set([].concat(Yi(Object.keys(se)),Yi(Object.keys(re)))));try{for(ot.s();!(Le=ot.n()).done;){var vt=Le.value;se[vt]!==re[vt]&&Ae.push(vt)}}catch(Xt){ot.e(Xt)}finally{ot.f()}return Ae}function Z0(se,re){switch(re.tag){case Tt:case tt:case kt:case Ar:case Rr:return(oo(re)&ie)===ie;default:return se.memoizedProps!==re.memoizedProps||se.memoizedState!==re.memoizedState||se.ref!==re.ref}}var Te=[],et=[],Ve=[],Gt=[],Yt=new Map,sr=0,Br=null;function wn(se){Te.push(se)}function fu(se){if(Te.length!==0||et.length!==0||Ve.length!==0||Br!==null||Ru){var re=et.length+Ve.length+(Br===null?0:1),Le=new Array(3+sr+(re>0?2+re:0)+Te.length),Ae=0;if(Le[Ae++]=z,Le[Ae++]=Ki,Le[Ae++]=sr,Yt.forEach(function(xn,_n){Le[Ae++]=_n.length;for(var yn=W0(_n),En=0;En0){Le[Ae++]=2,Le[Ae++]=re;for(var ot=et.length-1;ot>=0;ot--)Le[Ae++]=et[ot];for(var vt=0;vt0?se.forEach(function(re){B.emit("operations",re)}):(wr!==null&&(ru=!0),B.getFiberRoots(z).forEach(function(re){Xu(Ki=Yr(pi(re.current)),re.current),Ru&&re.memoizedInteractions!=null&&($o={changeDescriptions:Xl?new Map:null,durations:[],commitTime:Vl()-Yu,interactions:Array.from(re.memoizedInteractions).map(function(Le){return Ht(Ht({},Le),{},{timestamp:Le.timestamp-Yu})}),maxActualDuration:0,priorityLevel:null}),Vr(re.current,null,!1,!1),fu(),Ki=-1}))},getBestMatchForTrackedPath:function(){if(wr===null||$0===null)return null;for(var se=$0;se!==null&&Vu(se);)se=se.return;return se===null?null:{id:Yr(pi(se)),isFullMatch:Xi===wr.length-1}},getDisplayNameForFiberID:function(se){var re=Q0.get(se);return re!=null?me(re):null},getFiberIDForNative:function(se){var re=arguments.length>1&&arguments[1]!==void 0&&arguments[1],Le=G.findFiberByHostInstance(se);if(Le!=null){if(re)for(;Le!==null&&Vu(Le);)Le=Le.return;return Yr(pi(Le))}return null},getInstanceAndStyle:function(se){var re=null,Le=null,Ae=Uu(se);return Ae!==null&&(re=Ae.stateNode,Ae.memoizedProps!==null&&(Le=Ae.memoizedProps.style)),{instance:re,style:Le}},getOwnersList:function(se){var re=Uu(se);if(re==null)return null;var Le=re._debugOwner,Ae=[{displayName:me(re)||"Anonymous",id:se,type:yu(re)}];if(Le)for(var ot=Le;ot!==null;)Ae.unshift({displayName:me(ot)||"Anonymous",id:Yr(pi(ot)),type:yu(ot)}),ot=ot._debugOwner||null;return Ae},getPathForElement:function(se){var re=Q0.get(se);if(re==null)return null;for(var Le=[];re!==null;)Le.push(y0(re)),re=re.return;return Le.reverse(),Le},getProfilingData:function(){var se=[];if(hs===null)throw Error("getProfilingData() called before any profiling data was recorded");return hs.forEach(function(re,Le){var Ae=[],ot=[],vt=new Map,Xt=new Map,xn=El!==null&&El.get(Le)||"Unknown";R0!=null&&R0.forEach(function(_n,yn){co!=null&&co.get(yn)===Le&&ot.push([yn,_n])}),re.forEach(function(_n,yn){var En=_n.changeDescriptions,er=_n.durations,It=_n.interactions,xi=_n.maxActualDuration,Sr=_n.priorityLevel,cr=_n.commitTime,Y=[];It.forEach(function(hi){vt.has(hi.id)||vt.set(hi.id,hi),Y.push(hi.id);var Qi=Xt.get(hi.id);Qi!=null?Qi.push(yn):Xt.set(hi.id,[yn])});for(var Qr=[],Jr=[],Ur=0;Ur1?Wn.set(En,er-1):Wn.delete(En),Xr.delete(_n)}(Ki),Kr(Le,!1))}else Xu(Ki,Le),Vr(Le,null,!1,!1);if(Ru&&ot){var xn=hs.get(Ki);xn!=null?xn.push($o):hs.set(Ki,[$o])}fu(),No&&B.emit("traceUpdates",Lo),Ki=-1},handleCommitFiberUnmount:function(se){Kr(se,!1)},inspectElement:function(se,re){if(Li(se)){if(re!=null){A0(re);var Le=null;return re[0]==="hooks"&&(Le="hooks"),{id:se,type:"hydrated-path",path:re,value:Ei(Lu(zi,re),Fi(null,Le),re)}}return{id:se,type:"no-change"}}if(Is=!1,zi!==null&&zi.id===se||(x0={}),(zi=na(se))===null)return{id:se,type:"not-found"};re!=null&&A0(re),function(ot){var vt=ot.hooks,Xt=ot.id,xn=ot.props,_n=Q0.get(Xt);if(_n!=null){var yn=_n.elementType,En=_n.stateNode,er=_n.tag,It=_n.type;switch(er){case Tt:case _r:case Cn:$.$r=En;break;case tt:$.$r={hooks:vt,props:xn,type:It};break;case tn:$.$r={props:xn,type:It.render};break;case Ar:case Rr:$.$r={props:xn,type:yn!=null&&yn.type!=null?yn.type:It};break;default:$.$r=null}}else console.warn('Could not find Fiber with id "'.concat(Xt,'"'))}(zi);var Ae=Ht({},zi);return Ae.context=Ei(Ae.context,Fi("context",null)),Ae.hooks=Ei(Ae.hooks,Fi("hooks","hooks")),Ae.props=Ei(Ae.props,Fi("props",null)),Ae.state=Ei(Ae.state,Fi("state",null)),{id:se,type:"full-data",value:Ae}},logElementToConsole:function(se){var re=Li(se)?zi:na(se);if(re!==null){var Le=typeof console.groupCollapsed=="function";Le&&console.groupCollapsed("[Click to expand] %c<".concat(re.displayName||"Component"," />"),"color: var(--dom-tag-name-color); font-weight: normal;"),re.props!==null&&console.log("Props:",re.props),re.state!==null&&console.log("State:",re.state),re.hooks!==null&&console.log("Hooks:",re.hooks);var Ae=_l(se);Ae!==null&&console.log("Nodes:",Ae),re.source!==null&&console.log("Location:",re.source),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log("Right-click any value to save it as a global variable for further inspection."),Le&&console.groupEnd()}else console.warn('Could not find Fiber with id "'.concat(se,'"'))},prepareViewAttributeSource:function(se,re){Li(se)&&(window.$attribute=Lu(zi,re))},prepareViewElementSource:function(se){var re=Q0.get(se);if(re!=null){var Le=re.elementType,Ae=re.tag,ot=re.type;switch(Ae){case Tt:case _r:case Cn:case tt:$.$type=ot;break;case tn:$.$type=ot.render;break;case Ar:case Rr:$.$type=Le!=null&&Le.type!=null?Le.type:ot;break;default:$.$type=null}}else console.warn('Could not find Fiber with id "'.concat(se,'"'))},overrideSuspense:function(se,re){if(typeof ko!="function"||typeof Zo!="function")throw new Error("Expected overrideSuspense() to not get called for earlier React versions.");re?(Ku.add(se),Ku.size===1&&ko(vs)):(Ku.delete(se),Ku.size===0&&ko(df));var Le=Q0.get(se);Le!=null&&Zo(Le)},overrideValueAtPath:function(se,re,Le,Ae,ot){var vt=Uu(re);if(vt!==null){var Xt=vt.stateNode;switch(se){case"context":switch(Ae=Ae.slice(1),vt.tag){case Tt:Ae.length===0?Xt.context=ot:To(Xt.context,Ae,ot),Xt.forceUpdate()}break;case"hooks":typeof nu=="function"&&nu(vt,Le,Ae,ot);break;case"props":switch(vt.tag){case Tt:vt.pendingProps=Ln(Xt.props,Ae,ot),Xt.forceUpdate();break;default:typeof X0=="function"&&X0(vt,Ae,ot)}break;case"state":switch(vt.tag){case Tt:To(Xt.state,Ae,ot),Xt.forceUpdate()}}}},renamePath:function(se,re,Le,Ae,ot){var vt=Uu(re);if(vt!==null){var Xt=vt.stateNode;switch(se){case"context":switch(Ae=Ae.slice(1),ot=ot.slice(1),vt.tag){case Tt:Ae.length===0||Hr(Xt.context,Ae,ot),Xt.forceUpdate()}break;case"hooks":typeof S0=="function"&&S0(vt,Le,Ae,ot);break;case"props":Xt===null?typeof di=="function"&&di(vt,Ae,ot):(vt.pendingProps=Zt(Xt.props,Ae,ot),Xt.forceUpdate());break;case"state":Hr(Xt.state,Ae,ot),Xt.forceUpdate()}}},renderer:G,setTraceUpdatesEnabled:function(se){No=se},setTrackedPath:Ci,startProfiling:ra,stopProfiling:function(){Ru=!1,Xl=!1},storeAsGlobal:function(se,re,Le){if(Li(se)){var Ae=Lu(zi,re),ot="$reactTemp".concat(Le);window[ot]=Ae,console.log(ot),console.log(Ae)}},updateComponentFilters:function(se){if(Ru)throw Error("Cannot modify filter preferences while profiling");B.getFiberRoots(z).forEach(function(re){Ki=Yr(pi(re.current)),Bu(re.current),Kr(re.current,!1),Ki=-1}),ps(se),Wn.clear(),B.getFiberRoots(z).forEach(function(re){Xu(Ki=Yr(pi(re.current)),re.current),Vr(re.current,null,!1,!1),fu(re),Ki=-1})}}}var Xn;function Qo(B){return(Qo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(z){return typeof z}:function(z){return z&&typeof Symbol=="function"&&z.constructor===Symbol&&z!==Symbol.prototype?"symbol":typeof z})(B)}function lo(B,z,G){if(Xn===void 0)try{throw Error()}catch(De){var $=De.stack.trim().match(/\n( *(at )?)/);Xn=$&&$[1]||""}return` -`+Xn+B}var b0=!1;function yl(B,z,G){if(!B||b0)return"";var $,De=Error.prepareStackTrace;Error.prepareStackTrace=void 0,b0=!0;var me=G.current;G.current=null;try{if(z){var xe=function(){throw Error()};if(Object.defineProperty(xe.prototype,"props",{set:function(){throw Error()}}),(typeof Reflect=="undefined"?"undefined":Qo(Reflect))==="object"&&Reflect.construct){try{Reflect.construct(xe,[])}catch(qe){$=qe}Reflect.construct(B,[],xe)}else{try{xe.call()}catch(qe){$=qe}B.call(xe.prototype)}}else{try{throw Error()}catch(qe){$=qe}B()}}catch(qe){if(qe&&$&&typeof qe.stack=="string"){for(var Z=qe.stack.split(` -`),ke=$.stack.split(` -`),Xe=Z.length-1,ht=ke.length-1;Xe>=1&&ht>=0&&Z[Xe]!==ke[ht];)ht--;for(;Xe>=1&&ht>=0;Xe--,ht--)if(Z[Xe]!==ke[ht]){if(Xe!==1||ht!==1)do if(Xe--,--ht<0||Z[Xe]!==ke[ht])return` -`+Z[Xe].replace(" at new "," at ");while(Xe>=1&&ht>=0);break}}}finally{b0=!1,Error.prepareStackTrace=De,G.current=me}var ie=B?B.displayName||B.name:"";return ie?lo(ie):""}function Ro(B,z,G,$){return yl(B,!1,$)}function Et(B,z,G){var $=B.HostComponent,De=B.LazyComponent,me=B.SuspenseComponent,xe=B.SuspenseListComponent,Z=B.FunctionComponent,ke=B.IndeterminateComponent,Xe=B.SimpleMemoComponent,ht=B.ForwardRef,ie=B.Block,qe=B.ClassComponent;switch(z.tag){case $:return lo(z.type);case De:return lo("Lazy");case me:return lo("Suspense");case xe:return lo("SuspenseList");case Z:case ke:case Xe:return Ro(z.type,0,0,G);case ht:return Ro(z.type.render,0,0,G);case ie:return Ro(z.type._render,0,0,G);case qe:return function(tt,Tt,kt,bt){return yl(tt,!0,bt)}(z.type,0,0,G);default:return""}}function Pt(B,z,G){try{var $="",De=z;do $+=Et(B,De,G),De=De.return;while(De);return $}catch(me){return` -Error generating stack: `+me.message+` -`+me.stack}}function Bn(B,z){var G;if(typeof Symbol=="undefined"||B[Symbol.iterator]==null){if(Array.isArray(B)||(G=function(ke,Xe){if(!!ke){if(typeof ke=="string")return Ir(ke,Xe);var ht=Object.prototype.toString.call(ke).slice(8,-1);if(ht==="Object"&&ke.constructor&&(ht=ke.constructor.name),ht==="Map"||ht==="Set")return Array.from(ke);if(ht==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(ht))return Ir(ke,Xe)}}(B))||z&&B&&typeof B.length=="number"){G&&(B=G);var $=0,De=function(){};return{s:De,n:function(){return $>=B.length?{done:!0}:{done:!1,value:B[$++]}},e:function(ke){throw ke},f:De}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var me,xe=!0,Z=!1;return{s:function(){G=B[Symbol.iterator]()},n:function(){var ke=G.next();return xe=ke.done,ke},e:function(ke){Z=!0,me=ke},f:function(){try{xe||G.return==null||G.return()}finally{if(Z)throw me}}}}function Ir(B,z){(z==null||z>B.length)&&(z=B.length);for(var G=0,$=new Array(z);G0?Xe[Xe.length-1]:null,qe=ie!==null&&(Wr.test(ie)||wu.test(ie));if(!qe){var tt,Tt=Bn(c0.values());try{for(Tt.s();!(tt=Tt.n()).done;){var kt=tt.value,bt=kt.currentDispatcherRef,on=kt.getCurrentFiber,tn=kt.workTagMap,Lt=on();if(Lt!=null){var gn=Pt(tn,Lt,bt);gn!==""&&Xe.push(gn);break}}}catch(lr){Tt.e(lr)}finally{Tt.f()}}}catch(lr){}me.apply(void 0,Xe)};xe.__REACT_DEVTOOLS_ORIGINAL_METHOD__=me,Ti[De]=xe}catch(Z){}})}}function Fu(B){return(Fu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(z){return typeof z}:function(z){return z&&typeof Symbol=="function"&&z.constructor===Symbol&&z!==Symbol.prototype?"symbol":typeof z})(B)}function fs(B,z){for(var G=0;GB.length)&&(z=B.length);for(var G=0,$=new Array(z);G1?Z-1:0),Xe=1;Xe0?ie[ie.length-1]:0),ie.push(nn),Z.set(Ze,Xe(Ft._topLevelWrapper));try{var sn=nt.apply(this,_t);return ie.pop(),sn}catch(yr){throw ie=[],yr}finally{if(ie.length===0){var Yn=Z.get(Ze);if(Yn===void 0)throw new Error("Expected to find root ID.");lr(Yn)}}},performUpdateIfNecessary:function(nt,_t){var Ze=_t[0];if(w0(Ze)===9)return nt.apply(this,_t);var Ft=Xe(Ze);ie.push(Ft);var nn=Gn(Ze);try{var sn=nt.apply(this,_t),Yn=Gn(Ze);return ht(nn,Yn)||Tt(Ze,Ft,Yn),ie.pop(),sn}catch(nu){throw ie=[],nu}finally{if(ie.length===0){var yr=Z.get(Ze);if(yr===void 0)throw new Error("Expected to find root ID.");lr(yr)}}},receiveComponent:function(nt,_t){var Ze=_t[0];if(w0(Ze)===9)return nt.apply(this,_t);var Ft=Xe(Ze);ie.push(Ft);var nn=Gn(Ze);try{var sn=nt.apply(this,_t),Yn=Gn(Ze);return ht(nn,Yn)||Tt(Ze,Ft,Yn),ie.pop(),sn}catch(nu){throw ie=[],nu}finally{if(ie.length===0){var yr=Z.get(Ze);if(yr===void 0)throw new Error("Expected to find root ID.");lr(yr)}}},unmountComponent:function(nt,_t){var Ze=_t[0];if(w0(Ze)===9)return nt.apply(this,_t);var Ft=Xe(Ze);ie.push(Ft);try{var nn=nt.apply(this,_t);return ie.pop(),function(Yn,yr){tn.push(yr),me.delete(yr)}(0,Ft),nn}catch(Yn){throw ie=[],Yn}finally{if(ie.length===0){var sn=Z.get(Ze);if(sn===void 0)throw new Error("Expected to find root ID.");lr(sn)}}}}));var bt=[],on=new Map,tn=[],Lt=0,gn=null;function lr(nt){if(bt.length!==0||tn.length!==0||gn!==null){var _t=tn.length+(gn===null?0:1),Ze=new Array(3+Lt+(_t>0?2+_t:0)+bt.length),Ft=0;if(Ze[Ft++]=z,Ze[Ft++]=nt,Ze[Ft++]=Lt,on.forEach(function(Yn,yr){Ze[Ft++]=yr.length;for(var nu=W0(yr),Cu=0;Cu0){Ze[Ft++]=2,Ze[Ft++]=_t;for(var nn=0;nn"),"color: var(--dom-tag-name-color); font-weight: normal;"),_t.props!==null&&console.log("Props:",_t.props),_t.state!==null&&console.log("State:",_t.state),_t.context!==null&&console.log("Context:",_t.context);var Ft=De(nt);Ft!==null&&console.log("Node:",Ft),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log("Right-click any value to save it as a global variable for further inspection."),Ze&&console.groupEnd()}else console.warn('Could not find element with id "'.concat(nt,'"'))},overrideSuspense:function(){throw new Error("overrideSuspense not supported by this renderer")},overrideValueAtPath:function(nt,_t,Ze,Ft,nn){var sn=me.get(_t);if(sn!=null){var Yn=sn._instance;if(Yn!=null)switch(nt){case"context":To(Yn.context,Ft,nn),p0(Yn);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var yr=sn._currentElement;sn._currentElement=K0(K0({},yr),{},{props:Ln(yr.props,Ft,nn)}),p0(Yn);break;case"state":To(Yn.state,Ft,nn),p0(Yn)}}},renamePath:function(nt,_t,Ze,Ft,nn){var sn=me.get(_t);if(sn!=null){var Yn=sn._instance;if(Yn!=null)switch(nt){case"context":Hr(Yn.context,Ft,nn),p0(Yn);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var yr=sn._currentElement;sn._currentElement=K0(K0({},yr),{},{props:Zt(yr.props,Ft,nn)}),p0(Yn);break;case"state":Hr(Yn.state,Ft,nn),p0(Yn)}}},prepareViewAttributeSource:function(nt,_t){var Ze=Rr(nt);Ze!==null&&(window.$attribute=Lu(Ze,_t))},prepareViewElementSource:function(nt){var _t=me.get(nt);if(_t!=null){var Ze=_t._currentElement;Ze!=null?$.$type=Ze.type:console.warn('Could not find element with id "'.concat(nt,'"'))}else console.warn('Could not find instance with id "'.concat(nt,'"'))},renderer:G,setTraceUpdatesEnabled:function(nt){},setTrackedPath:function(nt){},startProfiling:function(){},stopProfiling:function(){},storeAsGlobal:function(nt,_t,Ze){var Ft=Rr(nt);if(Ft!==null){var nn=Lu(Ft,_t),sn="$reactTemp".concat(Ze);window[sn]=nn,console.log(sn),console.log(nn)}},updateComponentFilters:function(nt){}}}function ri(B,z){var G=!1,$={bottom:0,left:0,right:0,top:0},De=z[B];if(De!=null){for(var me=0,xe=Object.keys($);me0?"development":"production";var bt=Function.prototype.toString;if(kt.Mount&&kt.Mount._renderNewRootComponent){var on=bt.call(kt.Mount._renderNewRootComponent);return on.indexOf("function")!==0?"production":on.indexOf("storedMeasure")!==-1?"development":on.indexOf("should be a pure function")!==-1?on.indexOf("NODE_ENV")!==-1||on.indexOf("development")!==-1||on.indexOf("true")!==-1?"development":on.indexOf("nextElement")!==-1||on.indexOf("nextComponent")!==-1?"unminified":"development":on.indexOf("nextElement")!==-1||on.indexOf("nextComponent")!==-1?"unminified":"outdated"}}catch(tn){}return"production"}(ke);try{var ie=window.__REACT_DEVTOOLS_APPEND_COMPONENT_STACK__!==!1,qe=window.__REACT_DEVTOOLS_BREAK_ON_CONSOLE_ERRORS__===!0;(ie||qe)&&(so(ke),Gl({appendComponentStack:ie,breakOnConsoleErrors:qe}))}catch(kt){}var tt=B.__REACT_DEVTOOLS_ATTACH__;if(typeof tt=="function"){var Tt=tt(Z,Xe,ke,B);Z.rendererInterfaces.set(Xe,Tt)}return Z.emit("renderer",{id:Xe,renderer:ke,reactBuildType:ht}),Xe},on:function(ke,Xe){me[ke]||(me[ke]=[]),me[ke].push(Xe)},off:function(ke,Xe){if(me[ke]){var ht=me[ke].indexOf(Xe);ht!==-1&&me[ke].splice(ht,1),me[ke].length||delete me[ke]}},sub:function(ke,Xe){return Z.on(ke,Xe),function(){return Z.off(ke,Xe)}},supportsFiber:!0,checkDCE:function(ke){try{Function.prototype.toString.call(ke).indexOf("^_^")>-1&&(G=!0,setTimeout(function(){throw new Error("React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build")}))}catch(Xe){}},onCommitFiberUnmount:function(ke,Xe){var ht=De.get(ke);ht!=null&&ht.handleCommitFiberUnmount(Xe)},onCommitFiberRoot:function(ke,Xe,ht){var ie=Z.getFiberRoots(ke),qe=Xe.current,tt=ie.has(Xe),Tt=qe.memoizedState==null||qe.memoizedState.element==null;tt||Tt?tt&&Tt&&ie.delete(Xe):ie.add(Xe);var kt=De.get(ke);kt!=null&&kt.handleCommitFiberRoot(Xe,ht)}};Object.defineProperty(B,"__REACT_DEVTOOLS_GLOBAL_HOOK__",{configurable:!1,enumerable:!1,get:function(){return Z}})})(window);var h0=window.__REACT_DEVTOOLS_GLOBAL_HOOK__,Fs=[{type:1,value:7,isEnabled:!0}];function Ni(B){if(h0!=null){var z=B||{},G=z.host,$=G===void 0?"localhost":G,De=z.nativeStyleEditorValidAttributes,me=z.useHttps,xe=me!==void 0&&me,Z=z.port,ke=Z===void 0?8097:Z,Xe=z.websocket,ht=z.resolveRNStyle,ie=ht===void 0?null:ht,qe=z.isAppActive,tt=xe?"wss":"ws",Tt=null;if((qe===void 0?function(){return!0}:qe)()){var kt=null,bt=[],on=tt+"://"+$+":"+ke,tn=Xe||new window.WebSocket(on);tn.onclose=function(){kt!==null&&kt.emit("shutdown"),Lt()},tn.onerror=function(){Lt()},tn.onmessage=function(gn){var lr;try{if(typeof gn.data!="string")throw Error();lr=JSON.parse(gn.data)}catch(Qn){return void console.error("[React DevTools] Failed to parse JSON: "+gn.data)}bt.forEach(function(Qn){try{Qn(lr)}catch(_r){throw console.log("[React DevTools] Error calling listener",lr),console.log("error:",_r),_r}})},tn.onopen=function(){(kt=new ao({listen:function(Cn){return bt.push(Cn),function(){var Ar=bt.indexOf(Cn);Ar>=0&&bt.splice(Ar,1)}},send:function(Cn,Ar,v0){tn.readyState===tn.OPEN?tn.send(JSON.stringify({event:Cn,payload:Ar})):(kt!==null&&kt.shutdown(),Lt())}})).addListener("inspectElement",function(Cn){var Ar=Cn.id,v0=Cn.rendererID,Rr=gn.rendererInterfaces[v0];if(Rr!=null){var nt=Rr.findNativeNodesForFiberID(Ar);nt!=null&&nt[0]!=null&&gn.emit("showNativeHighlight",nt[0])}}),kt.addListener("updateComponentFilters",function(Cn){Fs=Cn}),window.__REACT_DEVTOOLS_COMPONENT_FILTERS__==null&&kt.send("overrideComponentFilters",Fs);var gn=new Hn(kt);if(gn.addListener("shutdown",function(){h0.emit("shutdown")}),function(Cn,Ar,v0){if(Cn==null)return function(){};var Rr=[Cn.sub("renderer-attached",function(Ze){var Ft=Ze.id,nn=(Ze.renderer,Ze.rendererInterface);Ar.setRendererInterface(Ft,nn),nn.flushInitialOperations()}),Cn.sub("unsupported-renderer-version",function(Ze){Ar.onUnsupportedRenderer(Ze)}),Cn.sub("operations",Ar.onHookOperations),Cn.sub("traceUpdates",Ar.onTraceUpdates)],nt=function(Ze,Ft){var nn=Cn.rendererInterfaces.get(Ze);nn==null&&(typeof Ft.findFiberByHostInstance=="function"?nn=Ms(Cn,Ze,Ft,v0):Ft.ComponentTree&&(nn=ic(Cn,Ze,Ft,v0)),nn!=null&&Cn.rendererInterfaces.set(Ze,nn)),nn!=null?Cn.emit("renderer-attached",{id:Ze,renderer:Ft,rendererInterface:nn}):Cn.emit("unsupported-renderer-version",Ze)};Cn.renderers.forEach(function(Ze,Ft){nt(Ft,Ze)}),Rr.push(Cn.sub("renderer",function(Ze){var Ft=Ze.id,nn=Ze.renderer;nt(Ft,nn)})),Cn.emit("react-devtools",Ar),Cn.reactDevtoolsAgent=Ar;var _t=function(){Rr.forEach(function(Ze){return Ze()}),Cn.rendererInterfaces.forEach(function(Ze){Ze.cleanup()}),Cn.reactDevtoolsAgent=null};Ar.addListener("shutdown",_t),Rr.push(function(){Ar.removeListener("shutdown",_t)})}(h0,gn,window),ie!=null||h0.resolveRNStyle!=null)ea(kt,gn,ie||h0.resolveRNStyle,De||h0.nativeStyleEditorValidAttributes||null);else{var lr,Qn,_r=function(){kt!==null&&ea(kt,gn,lr,Qn)};h0.hasOwnProperty("resolveRNStyle")||Object.defineProperty(h0,"resolveRNStyle",{enumerable:!1,get:function(){return lr},set:function(Cn){lr=Cn,_r()}}),h0.hasOwnProperty("nativeStyleEditorValidAttributes")||Object.defineProperty(h0,"nativeStyleEditorValidAttributes",{enumerable:!1,get:function(){return Qn},set:function(Cn){Qn=Cn,_r()}})}}}else Lt()}function Lt(){Tt===null&&(Tt=setTimeout(function(){return Ni(B)},2e3))}}}])})});var mR=ce(vR=>{"use strict";Object.defineProperty(vR,"__esModule",{value:!0});pR();var $Q=hR();$Q.connectToDevTools()});var DR=ce(kg=>{"use strict";var yR=kg&&kg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(kg,"__esModule",{value:!0});var gR=h4(),eJ=yR(D9()),_R=yR(eh()),ss=Lw();process.env.DEV==="true"&&mR();var ER=i=>{i==null||i.unsetMeasureFunc(),i==null||i.freeRecursive()};kg.default=eJ.default({schedulePassiveEffects:gR.unstable_scheduleCallback,cancelPassiveEffects:gR.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:i=>{if(i.isStaticDirty){i.isStaticDirty=!1,typeof i.onImmediateRender=="function"&&i.onImmediateRender();return}typeof i.onRender=="function"&&i.onRender()},getChildHostContext:(i,o)=>{let f=i.isInsideText,p=o==="ink-text"||o==="ink-virtual-text";return f===p?i:{isInsideText:p}},shouldSetTextContent:()=>!1,createInstance:(i,o,f,p)=>{if(p.isInsideText&&i==="ink-box")throw new Error(" can\u2019t be nested inside component");let E=i==="ink-text"&&p.isInsideText?"ink-virtual-text":i,t=ss.createNode(E);for(let[k,L]of Object.entries(o))k!=="children"&&(k==="style"?ss.setStyle(t,L):k==="internal_transform"?t.internal_transform=L:k==="internal_static"?t.internal_static=!0:ss.setAttribute(t,k,L));return t},createTextInstance:(i,o,f)=>{if(!f.isInsideText)throw new Error(`Text string "${i}" must be rendered inside component`);return ss.createTextNode(i)},resetTextContent:()=>{},hideTextInstance:i=>{ss.setTextNodeValue(i,"")},unhideTextInstance:(i,o)=>{ss.setTextNodeValue(i,o)},getPublicInstance:i=>i,hideInstance:i=>{var o;(o=i.yogaNode)===null||o===void 0||o.setDisplay(_R.default.DISPLAY_NONE)},unhideInstance:i=>{var o;(o=i.yogaNode)===null||o===void 0||o.setDisplay(_R.default.DISPLAY_FLEX)},appendInitialChild:ss.appendChildNode,appendChild:ss.appendChildNode,insertBefore:ss.insertBeforeNode,finalizeInitialChildren:(i,o,f,p)=>(i.internal_static&&(p.isStaticDirty=!0,p.staticNode=i),!1),supportsMutation:!0,appendChildToContainer:ss.appendChildNode,insertInContainerBefore:ss.insertBeforeNode,removeChildFromContainer:(i,o)=>{ss.removeChildNode(i,o),ER(o.yogaNode)},prepareUpdate:(i,o,f,p,E)=>{i.internal_static&&(E.isStaticDirty=!0);let t={},k=Object.keys(p);for(let L of k)if(p[L]!==f[L]){if(L==="style"&&typeof p.style=="object"&&typeof f.style=="object"){let C=p.style,U=f.style,q=Object.keys(C);for(let W of q){if(W==="borderStyle"||W==="borderColor"){if(typeof t.style!="object"){let ne={};t.style=ne}t.style.borderStyle=C.borderStyle,t.style.borderColor=C.borderColor}if(C[W]!==U[W]){if(typeof t.style!="object"){let ne={};t.style=ne}t.style[W]=C[W]}}continue}t[L]=p[L]}return t},commitUpdate:(i,o)=>{for(let[f,p]of Object.entries(o))f!=="children"&&(f==="style"?ss.setStyle(i,p):f==="internal_transform"?i.internal_transform=p:f==="internal_static"?i.internal_static=!0:ss.setAttribute(i,f,p))},commitTextUpdate:(i,o,f)=>{ss.setTextNodeValue(i,f)},removeChild:(i,o)=>{ss.removeChildNode(i,o),ER(o.yogaNode)}})});var SR=ce((Are,wR)=>{"use strict";wR.exports=(i,o=1,f)=>{if(f=E0({indent:" ",includeEmptyLines:!1},f),typeof i!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof i}\``);if(typeof o!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof o}\``);if(typeof f.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof f.indent}\``);if(o===0)return i;let p=f.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return i.replace(p,f.indent.repeat(o))}});var TR=ce(Mg=>{"use strict";var tJ=Mg&&Mg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Mg,"__esModule",{value:!0});var k4=tJ(eh());Mg.default=i=>i.getComputedWidth()-i.getComputedPadding(k4.default.EDGE_LEFT)-i.getComputedPadding(k4.default.EDGE_RIGHT)-i.getComputedBorder(k4.default.EDGE_LEFT)-i.getComputedBorder(k4.default.EDGE_RIGHT)});var xR=ce((Ore,CR)=>{CR.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var RR=ce((kre,Zw)=>{"use strict";var AR=xR();Zw.exports=AR;Zw.exports.default=AR});var kR=ce((Mre,OR)=>{"use strict";OR.exports=(i,o=process.argv)=>{let f=i.startsWith("-")?"":i.length===1?"-":"--",p=o.indexOf(f+i),E=o.indexOf("--");return p!==-1&&(E===-1||p{"use strict";var nJ=require("os"),NR=require("tty"),of=kR(),{env:Wo}=process,md;of("no-color")||of("no-colors")||of("color=false")||of("color=never")?md=0:(of("color")||of("colors")||of("color=true")||of("color=always"))&&(md=1);"FORCE_COLOR"in Wo&&(Wo.FORCE_COLOR==="true"?md=1:Wo.FORCE_COLOR==="false"?md=0:md=Wo.FORCE_COLOR.length===0?1:Math.min(parseInt(Wo.FORCE_COLOR,10),3));function $w(i){return i===0?!1:{level:i,hasBasic:!0,has256:i>=2,has16m:i>=3}}function e3(i,o){if(md===0)return 0;if(of("color=16m")||of("color=full")||of("color=truecolor"))return 3;if(of("color=256"))return 2;if(i&&!o&&md===void 0)return 0;let f=md||0;if(Wo.TERM==="dumb")return f;if(process.platform==="win32"){let p=nJ.release().split(".");return Number(p[0])>=10&&Number(p[2])>=10586?Number(p[2])>=14931?3:2:1}if("CI"in Wo)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(p=>p in Wo)||Wo.CI_NAME==="codeship"?1:f;if("TEAMCITY_VERSION"in Wo)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(Wo.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in Wo)return 1;if(Wo.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in Wo){let p=parseInt((Wo.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(Wo.TERM_PROGRAM){case"iTerm.app":return p>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(Wo.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(Wo.TERM)||"COLORTERM"in Wo?1:f}function rJ(i){let o=e3(i,i&&i.isTTY);return $w(o)}MR.exports={supportsColor:rJ,stdout:$w(e3(!0,NR.isatty(1))),stderr:$w(e3(!0,NR.isatty(2)))}});var bR=ce((Lre,FR)=>{"use strict";var iJ=(i,o,f)=>{let p=i.indexOf(o);if(p===-1)return i;let E=o.length,t=0,k="";do k+=i.substr(t,p-t)+o+f,t=p+E,p=i.indexOf(o,t);while(p!==-1);return k+=i.substr(t),k},uJ=(i,o,f,p)=>{let E=0,t="";do{let k=i[p-1]==="\r";t+=i.substr(E,(k?p-1:p)-E)+o+(k?`\r -`:` -`)+f,E=p+1,p=i.indexOf(` -`,E)}while(p!==-1);return t+=i.substr(E),t};FR.exports={stringReplaceAll:iJ,stringEncaseCRLFWithFirstIndex:uJ}});var jR=ce((Fre,PR)=>{"use strict";var oJ=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,IR=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,lJ=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,sJ=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,aJ=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e",""],["a","\x07"]]);function BR(i){let o=i[0]==="u",f=i[1]==="{";return o&&!f&&i.length===5||i[0]==="x"&&i.length===3?String.fromCharCode(parseInt(i.slice(1),16)):o&&f?String.fromCodePoint(parseInt(i.slice(2,-1),16)):aJ.get(i)||i}function fJ(i,o){let f=[],p=o.trim().split(/\s*,\s*/g),E;for(let t of p){let k=Number(t);if(!Number.isNaN(k))f.push(k);else if(E=t.match(lJ))f.push(E[2].replace(sJ,(L,N,C)=>N?BR(N):C));else throw new Error(`Invalid Chalk template style argument: ${t} (in style '${i}')`)}return f}function cJ(i){IR.lastIndex=0;let o=[],f;for(;(f=IR.exec(i))!==null;){let p=f[1];if(f[2]){let E=fJ(p,f[2]);o.push([p].concat(E))}else o.push([p])}return o}function UR(i,o){let f={};for(let E of o)for(let t of E.styles)f[t[0]]=E.inverse?null:t.slice(1);let p=i;for(let[E,t]of Object.entries(f))if(!!Array.isArray(t)){if(!(E in p))throw new Error(`Unknown Chalk style: ${E}`);p=t.length>0?p[E](...t):p[E]}return p}PR.exports=(i,o)=>{let f=[],p=[],E=[];if(o.replace(oJ,(t,k,L,N,C,U)=>{if(k)E.push(BR(k));else if(N){let q=E.join("");E=[],p.push(f.length===0?q:UR(i,f)(q)),f.push({inverse:L,styles:cJ(N)})}else if(C){if(f.length===0)throw new Error("Found extraneous } in Chalk template literal");p.push(UR(i,f)(E.join(""))),E=[],f.pop()}else E.push(U)}),p.push(E.join("")),f.length>0){let t=`Chalk template literal is missing ${f.length} closing bracket${f.length===1?"":"s"} (\`}\`)`;throw new Error(t)}return p.join("")}});var u3=ce((bre,zR)=>{"use strict";var Ng=_4(),{stdout:t3,stderr:n3}=LR(),{stringReplaceAll:dJ,stringEncaseCRLFWithFirstIndex:pJ}=bR(),{isArray:M4}=Array,qR=["ansi","ansi","ansi256","ansi16m"],cm=Object.create(null),hJ=(i,o={})=>{if(o.level&&!(Number.isInteger(o.level)&&o.level>=0&&o.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let f=t3?t3.level:0;i.level=o.level===void 0?f:o.level},HR=class{constructor(o){return WR(o)}},WR=i=>{let o={};return hJ(o,i),o.template=(...f)=>VR(o.template,...f),Object.setPrototypeOf(o,N4.prototype),Object.setPrototypeOf(o.template,o),o.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},o.template.Instance=HR,o.template};function N4(i){return WR(i)}for(let[i,o]of Object.entries(Ng))cm[i]={get(){let f=L4(this,r3(o.open,o.close,this._styler),this._isEmpty);return Object.defineProperty(this,i,{value:f}),f}};cm.visible={get(){let i=L4(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:i}),i}};var GR=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let i of GR)cm[i]={get(){let{level:o}=this;return function(...f){let p=r3(Ng.color[qR[o]][i](...f),Ng.color.close,this._styler);return L4(this,p,this._isEmpty)}}};for(let i of GR){let o="bg"+i[0].toUpperCase()+i.slice(1);cm[o]={get(){let{level:f}=this;return function(...p){let E=r3(Ng.bgColor[qR[f]][i](...p),Ng.bgColor.close,this._styler);return L4(this,E,this._isEmpty)}}}}var vJ=Object.defineProperties(()=>{},Gf(E0({},cm),{level:{enumerable:!0,get(){return this._generator.level},set(i){this._generator.level=i}}})),r3=(i,o,f)=>{let p,E;return f===void 0?(p=i,E=o):(p=f.openAll+i,E=o+f.closeAll),{open:i,close:o,openAll:p,closeAll:E,parent:f}},L4=(i,o,f)=>{let p=(...E)=>M4(E[0])&&M4(E[0].raw)?YR(p,VR(p,...E)):YR(p,E.length===1?""+E[0]:E.join(" "));return Object.setPrototypeOf(p,vJ),p._generator=i,p._styler=o,p._isEmpty=f,p},YR=(i,o)=>{if(i.level<=0||!o)return i._isEmpty?"":o;let f=i._styler;if(f===void 0)return o;let{openAll:p,closeAll:E}=f;if(o.indexOf("")!==-1)for(;f!==void 0;)o=dJ(o,f.close,f.open),f=f.parent;let t=o.indexOf(` -`);return t!==-1&&(o=pJ(o,E,p,t)),p+o+E},i3,VR=(i,...o)=>{let[f]=o;if(!M4(f)||!M4(f.raw))return o.join(" ");let p=o.slice(1),E=[f.raw[0]];for(let t=1;t{"use strict";var mJ=Lg&&Lg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Lg,"__esModule",{value:!0});var Fg=mJ(u3()),yJ=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,gJ=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,b4=(i,o)=>o==="foreground"?i:"bg"+i[0].toUpperCase()+i.slice(1);Lg.default=(i,o,f)=>{if(!o)return i;if(o in Fg.default){let E=b4(o,f);return Fg.default[E](i)}if(o.startsWith("#")){let E=b4("hex",f);return Fg.default[E](o)(i)}if(o.startsWith("ansi")){let E=gJ.exec(o);if(!E)return i;let t=b4(E[1],f),k=Number(E[2]);return Fg.default[t](k)(i)}if(o.startsWith("rgb")||o.startsWith("hsl")||o.startsWith("hsv")||o.startsWith("hwb")){let E=yJ.exec(o);if(!E)return i;let t=b4(E[1],f),k=Number(E[2]),L=Number(E[3]),N=Number(E[4]);return Fg.default[t](k,L,N)(i)}return i}});var XR=ce(bg=>{"use strict";var KR=bg&&bg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(bg,"__esModule",{value:!0});var _J=KR(RR()),l3=KR(o3());bg.default=(i,o,f,p)=>{if(typeof f.style.borderStyle=="string"){let E=f.yogaNode.getComputedWidth(),t=f.yogaNode.getComputedHeight(),k=f.style.borderColor,L=_J.default[f.style.borderStyle],N=l3.default(L.topLeft+L.horizontal.repeat(E-2)+L.topRight,k,"foreground"),C=(l3.default(L.vertical,k,"foreground")+` -`).repeat(t-2),U=l3.default(L.bottomLeft+L.horizontal.repeat(E-2)+L.bottomRight,k,"foreground");p.write(i,o,N,{transformers:[]}),p.write(i,o+1,C,{transformers:[]}),p.write(i+E-1,o+1,C,{transformers:[]}),p.write(i,o+t-1,U,{transformers:[]})}}});var JR=ce(Pg=>{"use strict";var ih=Pg&&Pg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Pg,"__esModule",{value:!0});var EJ=ih(eh()),DJ=ih(Dw()),wJ=ih(SR()),SJ=ih(kw()),TJ=ih(TR()),CJ=ih(Nw()),xJ=ih(XR()),AJ=(i,o)=>{var f;let p=(f=i.childNodes[0])===null||f===void 0?void 0:f.yogaNode;if(p){let E=p.getComputedLeft(),t=p.getComputedTop();o=` -`.repeat(t)+wJ.default(o,E)}return o},QR=(i,o,f)=>{var p;let{offsetX:E=0,offsetY:t=0,transformers:k=[],skipStaticElements:L}=f;if(L&&i.internal_static)return;let{yogaNode:N}=i;if(N){if(N.getDisplay()===EJ.default.DISPLAY_NONE)return;let C=E+N.getComputedLeft(),U=t+N.getComputedTop(),q=k;if(typeof i.internal_transform=="function"&&(q=[i.internal_transform,...k]),i.nodeName==="ink-text"){let W=CJ.default(i);if(W.length>0){let ne=DJ.default(W),m=TJ.default(N);if(ne>m){let we=(p=i.style.textWrap)!==null&&p!==void 0?p:"wrap";W=SJ.default(W,m,we)}W=AJ(i,W),o.write(C,U,W,{transformers:q})}return}if(i.nodeName==="ink-box"&&xJ.default(C,U,i,o),i.nodeName==="ink-root"||i.nodeName==="ink-box")for(let W of i.childNodes)QR(W,o,{offsetX:C,offsetY:U,transformers:q,skipStaticElements:L})}};Pg.default=QR});var $R=ce((Ure,ZR)=>{"use strict";ZR.exports=i=>{i=Object.assign({onlyFirst:!1},i);let o=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(o,i.onlyFirst?void 0:"g")}});var t7=ce((jre,s3)=>{"use strict";var RJ=$R(),e7=i=>typeof i=="string"?i.replace(RJ(),""):i;s3.exports=e7;s3.exports.default=e7});var i7=ce((zre,n7)=>{"use strict";var r7="[\uD800-\uDBFF][\uDC00-\uDFFF]";n7.exports=i=>i&&i.exact?new RegExp(`^${r7}$`):new RegExp(r7,"g")});var o7=ce((qre,a3)=>{"use strict";var OJ=t7(),kJ=i7(),u7=i=>OJ(i).replace(kJ()," ").length;a3.exports=u7;a3.exports.default=u7});var f7=ce(Ig=>{"use strict";var l7=Ig&&Ig.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Ig,"__esModule",{value:!0});var s7=l7(Rw()),MJ=l7(o7()),a7=class{constructor(o){this.writes=[];let{width:f,height:p}=o;this.width=f,this.height=p}write(o,f,p,E){let{transformers:t}=E;!p||this.writes.push({x:o,y:f,text:p,transformers:t})}get(){let o=[];for(let p=0;pp.trimRight()).join(` -`),height:o.length}}};Ig.default=a7});var p7=ce(Bg=>{"use strict";var f3=Bg&&Bg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Bg,"__esModule",{value:!0});var NJ=f3(eh()),c7=f3(JR()),d7=f3(f7());Bg.default=(i,o)=>{var f;if(i.yogaNode.setWidth(o),i.yogaNode){i.yogaNode.calculateLayout(void 0,void 0,NJ.default.DIRECTION_LTR);let p=new d7.default({width:i.yogaNode.getComputedWidth(),height:i.yogaNode.getComputedHeight()});c7.default(i,p,{skipStaticElements:!0});let E;((f=i.staticNode)===null||f===void 0?void 0:f.yogaNode)&&(E=new d7.default({width:i.staticNode.yogaNode.getComputedWidth(),height:i.staticNode.yogaNode.getComputedHeight()}),c7.default(i.staticNode,E,{skipStaticElements:!1}));let{output:t,height:k}=p.get();return{output:t,outputHeight:k,staticOutput:E?`${E.get().output} -`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var y7=ce((Vre,h7)=>{"use strict";var v7=require("stream"),m7=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],c3={},LJ=i=>{let o=new v7.PassThrough,f=new v7.PassThrough;o.write=E=>i("stdout",E),f.write=E=>i("stderr",E);let p=new console.Console(o,f);for(let E of m7)c3[E]=console[E],console[E]=p[E];return()=>{for(let E of m7)console[E]=c3[E];c3={}}};h7.exports=LJ});var p3=ce(d3=>{"use strict";Object.defineProperty(d3,"__esModule",{value:!0});d3.default=new WeakMap});var v3=ce(h3=>{"use strict";Object.defineProperty(h3,"__esModule",{value:!0});var FJ=su(),g7=FJ.createContext({exit:()=>{}});g7.displayName="InternalAppContext";h3.default=g7});var y3=ce(m3=>{"use strict";Object.defineProperty(m3,"__esModule",{value:!0});var bJ=su(),_7=bJ.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});_7.displayName="InternalStdinContext";m3.default=_7});var _3=ce(g3=>{"use strict";Object.defineProperty(g3,"__esModule",{value:!0});var PJ=su(),E7=PJ.createContext({stdout:void 0,write:()=>{}});E7.displayName="InternalStdoutContext";g3.default=E7});var D3=ce(E3=>{"use strict";Object.defineProperty(E3,"__esModule",{value:!0});var IJ=su(),D7=IJ.createContext({stderr:void 0,write:()=>{}});D7.displayName="InternalStderrContext";E3.default=D7});var P4=ce(w3=>{"use strict";Object.defineProperty(w3,"__esModule",{value:!0});var BJ=su(),w7=BJ.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});w7.displayName="InternalFocusContext";w3.default=w7});var T7=ce((Zre,S7)=>{"use strict";var UJ=/[|\\{}()[\]^$+*?.-]/g;S7.exports=i=>{if(typeof i!="string")throw new TypeError("Expected a string");return i.replace(UJ,"\\$&")}});var R7=ce(($re,C7)=>{"use strict";var jJ=T7(),x7=[].concat(require("module").builtinModules,"bootstrap_node","node").map(i=>new RegExp(`(?:\\(${i}\\.js:\\d+:\\d+\\)$|^\\s*at ${i}\\.js:\\d+:\\d+$)`));x7.push(/\(internal\/[^:]+:\d+:\d+\)$/,/\s*at internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var I4=class{constructor(o){o=E0({ignoredPackages:[]},o),"internals"in o||(o.internals=I4.nodeInternals()),"cwd"in o||(o.cwd=process.cwd()),this._cwd=o.cwd.replace(/\\/g,"/"),this._internals=[].concat(o.internals,zJ(o.ignoredPackages)),this._wrapCallSite=o.wrapCallSite||!1}static nodeInternals(){return[...x7]}clean(o,f=0){f=" ".repeat(f),Array.isArray(o)||(o=o.split(` -`)),!/^\s*at /.test(o[0])&&/^\s*at /.test(o[1])&&(o=o.slice(1));let p=!1,E=null,t=[];return o.forEach(k=>{if(k=k.replace(/\\/g,"/"),this._internals.some(N=>N.test(k)))return;let L=/^\s*at /.test(k);p?k=k.trimEnd().replace(/^(\s+)at /,"$1"):(k=k.trim(),L&&(k=k.slice(3))),k=k.replace(`${this._cwd}/`,""),k&&(L?(E&&(t.push(E),E=null),t.push(k)):(p=!0,E=k))}),t.map(k=>`${f}${k} -`).join("")}captureString(o,f=this.captureString){typeof o=="function"&&(f=o,o=Infinity);let{stackTraceLimit:p}=Error;o&&(Error.stackTraceLimit=o);let E={};Error.captureStackTrace(E,f);let{stack:t}=E;return Error.stackTraceLimit=p,this.clean(t)}capture(o,f=this.capture){typeof o=="function"&&(f=o,o=Infinity);let{prepareStackTrace:p,stackTraceLimit:E}=Error;Error.prepareStackTrace=(L,N)=>this._wrapCallSite?N.map(this._wrapCallSite):N,o&&(Error.stackTraceLimit=o);let t={};Error.captureStackTrace(t,f);let{stack:k}=t;return Object.assign(Error,{prepareStackTrace:p,stackTraceLimit:E}),k}at(o=this.at){let[f]=this.capture(1,o);if(!f)return{};let p={line:f.getLineNumber(),column:f.getColumnNumber()};A7(p,f.getFileName(),this._cwd),f.isConstructor()&&(p.constructor=!0),f.isEval()&&(p.evalOrigin=f.getEvalOrigin()),f.isNative()&&(p.native=!0);let E;try{E=f.getTypeName()}catch(L){}E&&E!=="Object"&&E!=="[object Object]"&&(p.type=E);let t=f.getFunctionName();t&&(p.function=t);let k=f.getMethodName();return k&&t!==k&&(p.method=k),p}parseLine(o){let f=o&&o.match(qJ);if(!f)return null;let p=f[1]==="new",E=f[2],t=f[3],k=f[4],L=Number(f[5]),N=Number(f[6]),C=f[7],U=f[8],q=f[9],W=f[10]==="native",ne=f[11]===")",m,we={};if(U&&(we.line=Number(U)),q&&(we.column=Number(q)),ne&&C){let Se=0;for(let he=C.length-1;he>0;he--)if(C.charAt(he)===")")Se++;else if(C.charAt(he)==="("&&C.charAt(he-1)===" "&&(Se--,Se===-1&&C.charAt(he-1)===" ")){let ge=C.slice(0,he-1);C=C.slice(he+1),E+=` (${ge}`;break}}if(E){let Se=E.match(HJ);Se&&(E=Se[1],m=Se[2])}return A7(we,C,this._cwd),p&&(we.constructor=!0),t&&(we.evalOrigin=t,we.evalLine=L,we.evalColumn=N,we.evalFile=k&&k.replace(/\\/g,"/")),W&&(we.native=!0),E&&(we.function=E),m&&E!==m&&(we.method=m),we}};function A7(i,o,f){o&&(o=o.replace(/\\/g,"/"),o.startsWith(`${f}/`)&&(o=o.slice(f.length+1)),i.file=o)}function zJ(i){if(i.length===0)return[];let o=i.map(f=>jJ(f));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${o.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var qJ=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),HJ=/^(.*?) \[as (.*?)\]$/;C7.exports=I4});var k7=ce((eie,O7)=>{"use strict";O7.exports=(i,o)=>i.replace(/^\t+/gm,f=>" ".repeat(f.length*(o||2)))});var N7=ce((tie,M7)=>{"use strict";var WJ=k7(),VJ=(i,o)=>{let f=[],p=i-o,E=i+o;for(let t=p;t<=E;t++)f.push(t);return f};M7.exports=(i,o,f)=>{if(typeof i!="string")throw new TypeError("Source code is missing.");if(!o||o<1)throw new TypeError("Line number must start from `1`.");if(i=WJ(i).split(/\r?\n/),!(o>i.length))return f=E0({around:3},f),VJ(o,f.around).filter(p=>i[p-1]!==void 0).map(p=>({line:p,value:i[p-1]}))}});var B4=ce(Zf=>{"use strict";var GJ=Zf&&Zf.__createBinding||(Object.create?function(i,o,f,p){p===void 0&&(p=f),Object.defineProperty(i,p,{enumerable:!0,get:function(){return o[f]}})}:function(i,o,f,p){p===void 0&&(p=f),i[p]=o[f]}),YJ=Zf&&Zf.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),KJ=Zf&&Zf.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&GJ(o,i,f);return YJ(o,i),o},XJ=Zf&&Zf.__rest||function(i,o){var f={};for(var p in i)Object.prototype.hasOwnProperty.call(i,p)&&o.indexOf(p)<0&&(f[p]=i[p]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var E=0,p=Object.getOwnPropertySymbols(i);E{var{children:f}=i,p=XJ(i,["children"]);let E=Object.assign(Object.assign({},p),{marginLeft:p.marginLeft||p.marginX||p.margin||0,marginRight:p.marginRight||p.marginX||p.margin||0,marginTop:p.marginTop||p.marginY||p.margin||0,marginBottom:p.marginBottom||p.marginY||p.margin||0,paddingLeft:p.paddingLeft||p.paddingX||p.padding||0,paddingRight:p.paddingRight||p.paddingX||p.padding||0,paddingTop:p.paddingTop||p.paddingY||p.padding||0,paddingBottom:p.paddingBottom||p.paddingY||p.padding||0});return L7.default.createElement("ink-box",{ref:o,style:E},f)});S3.displayName="Box";S3.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};Zf.default=S3});var x3=ce(Ug=>{"use strict";var T3=Ug&&Ug.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Ug,"__esModule",{value:!0});var QJ=T3(su()),dm=T3(u3()),F7=T3(o3()),C3=({color:i,backgroundColor:o,dimColor:f,bold:p,italic:E,underline:t,strikethrough:k,inverse:L,wrap:N,children:C})=>{if(C==null)return null;let U=q=>(f&&(q=dm.default.dim(q)),i&&(q=F7.default(q,i,"foreground")),o&&(q=F7.default(q,o,"background")),p&&(q=dm.default.bold(q)),E&&(q=dm.default.italic(q)),t&&(q=dm.default.underline(q)),k&&(q=dm.default.strikethrough(q)),L&&(q=dm.default.inverse(q)),q);return QJ.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:N},internal_transform:U},C)};C3.displayName="Text";C3.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};Ug.default=C3});var B7=ce($f=>{"use strict";var JJ=$f&&$f.__createBinding||(Object.create?function(i,o,f,p){p===void 0&&(p=f),Object.defineProperty(i,p,{enumerable:!0,get:function(){return o[f]}})}:function(i,o,f,p){p===void 0&&(p=f),i[p]=o[f]}),ZJ=$f&&$f.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),$J=$f&&$f.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&JJ(o,i,f);return ZJ(o,i),o},jg=$f&&$f.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty($f,"__esModule",{value:!0});var b7=$J(require("fs")),Vo=jg(su()),P7=jg(R7()),eZ=jg(N7()),Q1=jg(B4()),Ic=jg(x3()),I7=new P7.default({cwd:process.cwd(),internals:P7.default.nodeInternals()}),tZ=({error:i})=>{let o=i.stack?i.stack.split(` -`).slice(1):void 0,f=o?I7.parseLine(o[0]):void 0,p,E=0;if((f==null?void 0:f.file)&&(f==null?void 0:f.line)&&b7.existsSync(f.file)){let t=b7.readFileSync(f.file,"utf8");if(p=eZ.default(t,f.line),p)for(let{line:k}of p)E=Math.max(E,String(k).length)}return Vo.default.createElement(Q1.default,{flexDirection:"column",padding:1},Vo.default.createElement(Q1.default,null,Vo.default.createElement(Ic.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),Vo.default.createElement(Ic.default,null," ",i.message)),f&&Vo.default.createElement(Q1.default,{marginTop:1},Vo.default.createElement(Ic.default,{dimColor:!0},f.file,":",f.line,":",f.column)),f&&p&&Vo.default.createElement(Q1.default,{marginTop:1,flexDirection:"column"},p.map(({line:t,value:k})=>Vo.default.createElement(Q1.default,{key:t},Vo.default.createElement(Q1.default,{width:E+1},Vo.default.createElement(Ic.default,{dimColor:t!==f.line,backgroundColor:t===f.line?"red":void 0,color:t===f.line?"white":void 0},String(t).padStart(E," "),":")),Vo.default.createElement(Ic.default,{key:t,backgroundColor:t===f.line?"red":void 0,color:t===f.line?"white":void 0}," "+k)))),i.stack&&Vo.default.createElement(Q1.default,{marginTop:1,flexDirection:"column"},i.stack.split(` -`).slice(1).map(t=>{let k=I7.parseLine(t);return k?Vo.default.createElement(Q1.default,{key:t},Vo.default.createElement(Ic.default,{dimColor:!0},"- "),Vo.default.createElement(Ic.default,{dimColor:!0,bold:!0},k.function),Vo.default.createElement(Ic.default,{dimColor:!0,color:"gray"}," ","(",k.file,":",k.line,":",k.column,")")):Vo.default.createElement(Q1.default,{key:t},Vo.default.createElement(Ic.default,{dimColor:!0},"- "),Vo.default.createElement(Ic.default,{dimColor:!0,bold:!0},t))})))};$f.default=tZ});var j7=ce(ec=>{"use strict";var nZ=ec&&ec.__createBinding||(Object.create?function(i,o,f,p){p===void 0&&(p=f),Object.defineProperty(i,p,{enumerable:!0,get:function(){return o[f]}})}:function(i,o,f,p){p===void 0&&(p=f),i[p]=o[f]}),rZ=ec&&ec.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),iZ=ec&&ec.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&nZ(o,i,f);return rZ(o,i),o},uh=ec&&ec.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(ec,"__esModule",{value:!0});var oh=iZ(su()),U7=uh(ZD()),uZ=uh(v3()),oZ=uh(y3()),lZ=uh(_3()),sZ=uh(D3()),aZ=uh(P4()),fZ=uh(B7()),cZ=" ",dZ="",pZ="",A3=class extends oh.PureComponent{constructor(){super(...arguments);this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=o=>{let{stdin:f}=this.props;if(!this.isRawModeSupported())throw f===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(f.setEncoding("utf8"),o){this.rawModeEnabledCount===0&&(f.addListener("data",this.handleInput),f.resume(),f.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount==0&&(f.setRawMode(!1),f.removeListener("data",this.handleInput),f.pause())},this.handleInput=o=>{o===""&&this.props.exitOnCtrlC&&this.handleExit(),o===pZ&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(o===cZ&&this.focusNext(),o===dZ&&this.focusPrevious())},this.handleExit=o=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(o)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(o=>{let f=o.focusables[0].id;return{activeFocusId:this.findNextFocusable(o)||f}})},this.focusPrevious=()=>{this.setState(o=>{let f=o.focusables[o.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(o)||f}})},this.addFocusable=(o,{autoFocus:f})=>{this.setState(p=>{let E=p.activeFocusId;return!E&&f&&(E=o),{activeFocusId:E,focusables:[...p.focusables,{id:o,isActive:!0}]}})},this.removeFocusable=o=>{this.setState(f=>({activeFocusId:f.activeFocusId===o?void 0:f.activeFocusId,focusables:f.focusables.filter(p=>p.id!==o)}))},this.activateFocusable=o=>{this.setState(f=>({focusables:f.focusables.map(p=>p.id!==o?p:{id:o,isActive:!0})}))},this.deactivateFocusable=o=>{this.setState(f=>({activeFocusId:f.activeFocusId===o?void 0:f.activeFocusId,focusables:f.focusables.map(p=>p.id!==o?p:{id:o,isActive:!1})}))},this.findNextFocusable=o=>{let f=o.focusables.findIndex(p=>p.id===o.activeFocusId);for(let p=f+1;p{let f=o.focusables.findIndex(p=>p.id===o.activeFocusId);for(let p=f-1;p>=0;p--)if(o.focusables[p].isActive)return o.focusables[p].id}}static getDerivedStateFromError(o){return{error:o}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return oh.default.createElement(uZ.default.Provider,{value:{exit:this.handleExit}},oh.default.createElement(oZ.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},oh.default.createElement(lZ.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},oh.default.createElement(sZ.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},oh.default.createElement(aZ.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?oh.default.createElement(fZ.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){U7.default.hide(this.props.stdout)}componentWillUnmount(){U7.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(o){this.handleExit(o)}};ec.default=A3;A3.displayName="InternalApp"});var W7=ce(tc=>{"use strict";var hZ=tc&&tc.__createBinding||(Object.create?function(i,o,f,p){p===void 0&&(p=f),Object.defineProperty(i,p,{enumerable:!0,get:function(){return o[f]}})}:function(i,o,f,p){p===void 0&&(p=f),i[p]=o[f]}),vZ=tc&&tc.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),mZ=tc&&tc.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&hZ(o,i,f);return vZ(o,i),o},nc=tc&&tc.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(tc,"__esModule",{value:!0});var yZ=nc(su()),z7=B5(),gZ=nc(Z5()),_Z=nc(GD()),EZ=nc(u9()),DZ=nc(l9()),U4=nc(DR()),wZ=nc(p7()),SZ=nc(JD()),TZ=nc(y7()),CZ=mZ(Lw()),xZ=nc(p3()),AZ=nc(j7()),pm=process.env.CI==="false"?!1:EZ.default,q7=()=>{},H7=class{constructor(o){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:f,outputHeight:p,staticOutput:E}=wZ.default(this.rootNode,this.options.stdout.columns||80),t=E&&E!==` -`;if(this.options.debug){t&&(this.fullStaticOutput+=E),this.options.stdout.write(this.fullStaticOutput+f);return}if(pm){t&&this.options.stdout.write(E),this.lastOutput=f;return}if(t&&(this.fullStaticOutput+=E),p>=this.options.stdout.rows){this.options.stdout.write(_Z.default.clearTerminal+this.fullStaticOutput+f),this.lastOutput=f;return}t&&(this.log.clear(),this.options.stdout.write(E),this.log(f)),!t&&f!==this.lastOutput&&this.throttledLog(f),this.lastOutput=f},DZ.default(this),this.options=o,this.rootNode=CZ.createNode("ink-root"),this.rootNode.onRender=o.debug?this.onRender:z7.throttle(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=gZ.default.create(o.stdout),this.throttledLog=o.debug?this.log:z7.throttle(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=U4.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=SZ.default(this.unmount,{alwaysLast:!1}),process.env.DEV==="true"&&U4.default.injectIntoDevTools({bundleType:0,version:"16.13.1",rendererPackageName:"ink"}),o.patchConsole&&this.patchConsole(),pm||(o.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{o.stdout.off("resize",this.onRender)})}render(o){let f=yZ.default.createElement(AZ.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},o);U4.default.updateContainer(f,this.container,null,q7)}writeToStdout(o){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(o+this.fullStaticOutput+this.lastOutput);return}if(pm){this.options.stdout.write(o);return}this.log.clear(),this.options.stdout.write(o),this.log(this.lastOutput)}}writeToStderr(o){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(o),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(pm){this.options.stderr.write(o);return}this.log.clear(),this.options.stderr.write(o),this.log(this.lastOutput)}}unmount(o){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),pm?this.options.stdout.write(this.lastOutput+` -`):this.options.debug||this.log.done(),this.isUnmounted=!0,U4.default.updateContainer(null,this.container,null,q7),xZ.default.delete(this.options.stdout),o instanceof Error?this.rejectExitPromise(o):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((o,f)=>{this.resolveExitPromise=o,this.rejectExitPromise=f})),this.exitPromise}clear(){!pm&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=TZ.default((o,f)=>{o==="stdout"&&this.writeToStdout(f),o==="stderr"&&(f.startsWith("The above error occurred")||this.writeToStderr(f))}))}};tc.default=H7});var G7=ce(zg=>{"use strict";var V7=zg&&zg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(zg,"__esModule",{value:!0});var RZ=V7(W7()),j4=V7(p3()),OZ=require("stream"),NZ=(i,o)=>{let f=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},kZ(o)),p=MZ(f.stdout,()=>new RZ.default(f));return p.render(i),{rerender:p.render,unmount:()=>p.unmount(),waitUntilExit:p.waitUntilExit,cleanup:()=>j4.default.delete(f.stdout),clear:p.clear}};zg.default=NZ;var kZ=(i={})=>i instanceof OZ.Stream?{stdout:i,stdin:process.stdin}:i,MZ=(i,o)=>{let f;return j4.default.has(i)?f=j4.default.get(i):(f=o(),j4.default.set(i,f)),f}});var K7=ce(J1=>{"use strict";var LZ=J1&&J1.__createBinding||(Object.create?function(i,o,f,p){p===void 0&&(p=f),Object.defineProperty(i,p,{enumerable:!0,get:function(){return o[f]}})}:function(i,o,f,p){p===void 0&&(p=f),i[p]=o[f]}),FZ=J1&&J1.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),bZ=J1&&J1.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&LZ(o,i,f);return FZ(o,i),o};Object.defineProperty(J1,"__esModule",{value:!0});var qg=bZ(su()),Y7=i=>{let{items:o,children:f,style:p}=i,[E,t]=qg.useState(0),k=qg.useMemo(()=>o.slice(E),[o,E]);qg.useLayoutEffect(()=>{t(o.length)},[o.length]);let L=k.map((C,U)=>f(C,E+U)),N=qg.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},p),[p]);return qg.default.createElement("ink-box",{internal_static:!0,style:N},L)};Y7.displayName="Static";J1.default=Y7});var Q7=ce(Hg=>{"use strict";var PZ=Hg&&Hg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Hg,"__esModule",{value:!0});var IZ=PZ(su()),X7=({children:i,transform:o})=>i==null?null:IZ.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:o},i);X7.displayName="Transform";Hg.default=X7});var Z7=ce(Wg=>{"use strict";var BZ=Wg&&Wg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Wg,"__esModule",{value:!0});var UZ=BZ(su()),J7=({count:i=1})=>UZ.default.createElement("ink-text",null,` -`.repeat(i));J7.displayName="Newline";Wg.default=J7});var tO=ce(Vg=>{"use strict";var $7=Vg&&Vg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Vg,"__esModule",{value:!0});var jZ=$7(su()),zZ=$7(B4()),eO=()=>jZ.default.createElement(zZ.default,{flexGrow:1});eO.displayName="Spacer";Vg.default=eO});var z4=ce(Gg=>{"use strict";var qZ=Gg&&Gg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Gg,"__esModule",{value:!0});var HZ=su(),WZ=qZ(y3()),VZ=()=>HZ.useContext(WZ.default);Gg.default=VZ});var rO=ce(Yg=>{"use strict";var GZ=Yg&&Yg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Yg,"__esModule",{value:!0});var nO=su(),YZ=GZ(z4()),KZ=(i,o={})=>{let{stdin:f,setRawMode:p,internal_exitOnCtrlC:E}=YZ.default();nO.useEffect(()=>{if(o.isActive!==!1)return p(!0),()=>{p(!1)}},[o.isActive,p]),nO.useEffect(()=>{if(o.isActive===!1)return;let t=k=>{let L=String(k),N={upArrow:L==="",downArrow:L==="",leftArrow:L==="",rightArrow:L==="",pageDown:L==="[6~",pageUp:L==="[5~",return:L==="\r",escape:L==="",ctrl:!1,shift:!1,tab:L===" "||L==="",backspace:L==="\b",delete:L==="\x7F"||L==="[3~",meta:!1};L<=""&&!N.return&&(L=String.fromCharCode(L.charCodeAt(0)+"a".charCodeAt(0)-1),N.ctrl=!0),L.startsWith("")&&(L=L.slice(1),N.meta=!0);let C=L>="A"&&L<="Z",U=L>="\u0410"&&L<="\u042F";L.length===1&&(C||U)&&(N.shift=!0),N.tab&&L==="[Z"&&(N.shift=!0),(N.tab||N.backspace||N.delete)&&(L=""),(!(L==="c"&&N.ctrl)||!E)&&i(L,N)};return f==null||f.on("data",t),()=>{f==null||f.off("data",t)}},[o.isActive,f,E,i])};Yg.default=KZ});var iO=ce(Kg=>{"use strict";var XZ=Kg&&Kg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Kg,"__esModule",{value:!0});var QZ=su(),JZ=XZ(v3()),ZZ=()=>QZ.useContext(JZ.default);Kg.default=ZZ});var uO=ce(Xg=>{"use strict";var $Z=Xg&&Xg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Xg,"__esModule",{value:!0});var e$=su(),t$=$Z(_3()),n$=()=>e$.useContext(t$.default);Xg.default=n$});var oO=ce(Qg=>{"use strict";var r$=Qg&&Qg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Qg,"__esModule",{value:!0});var i$=su(),u$=r$(D3()),o$=()=>i$.useContext(u$.default);Qg.default=o$});var sO=ce(Jg=>{"use strict";var lO=Jg&&Jg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Jg,"__esModule",{value:!0});var Zg=su(),l$=lO(P4()),s$=lO(z4()),a$=({isActive:i=!0,autoFocus:o=!1}={})=>{let{isRawModeSupported:f,setRawMode:p}=s$.default(),{activeId:E,add:t,remove:k,activate:L,deactivate:N}=Zg.useContext(l$.default),C=Zg.useMemo(()=>Math.random().toString().slice(2,7),[]);return Zg.useEffect(()=>(t(C,{autoFocus:o}),()=>{k(C)}),[C,o]),Zg.useEffect(()=>{i?L(C):N(C)},[i,C]),Zg.useEffect(()=>{if(!(!f||!i))return p(!0),()=>{p(!1)}},[i]),{isFocused:Boolean(C)&&E===C}};Jg.default=a$});var aO=ce($g=>{"use strict";var f$=$g&&$g.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty($g,"__esModule",{value:!0});var c$=su(),d$=f$(P4()),p$=()=>{let i=c$.useContext(d$.default);return{enableFocus:i.enableFocus,disableFocus:i.disableFocus,focusNext:i.focusNext,focusPrevious:i.focusPrevious}};$g.default=p$});var fO=ce(R3=>{"use strict";Object.defineProperty(R3,"__esModule",{value:!0});R3.default=i=>{var o,f,p,E;return{width:(f=(o=i.yogaNode)===null||o===void 0?void 0:o.getComputedWidth())!==null&&f!==void 0?f:0,height:(E=(p=i.yogaNode)===null||p===void 0?void 0:p.getComputedHeight())!==null&&E!==void 0?E:0}}});var lh=ce(ql=>{"use strict";Object.defineProperty(ql,"__esModule",{value:!0});var h$=G7();Object.defineProperty(ql,"render",{enumerable:!0,get:function(){return h$.default}});var v$=B4();Object.defineProperty(ql,"Box",{enumerable:!0,get:function(){return v$.default}});var m$=x3();Object.defineProperty(ql,"Text",{enumerable:!0,get:function(){return m$.default}});var y$=K7();Object.defineProperty(ql,"Static",{enumerable:!0,get:function(){return y$.default}});var g$=Q7();Object.defineProperty(ql,"Transform",{enumerable:!0,get:function(){return g$.default}});var _$=Z7();Object.defineProperty(ql,"Newline",{enumerable:!0,get:function(){return _$.default}});var E$=tO();Object.defineProperty(ql,"Spacer",{enumerable:!0,get:function(){return E$.default}});var D$=rO();Object.defineProperty(ql,"useInput",{enumerable:!0,get:function(){return D$.default}});var w$=iO();Object.defineProperty(ql,"useApp",{enumerable:!0,get:function(){return w$.default}});var S$=z4();Object.defineProperty(ql,"useStdin",{enumerable:!0,get:function(){return S$.default}});var T$=uO();Object.defineProperty(ql,"useStdout",{enumerable:!0,get:function(){return T$.default}});var C$=oO();Object.defineProperty(ql,"useStderr",{enumerable:!0,get:function(){return C$.default}});var x$=sO();Object.defineProperty(ql,"useFocus",{enumerable:!0,get:function(){return x$.default}});var A$=aO();Object.defineProperty(ql,"useFocusManager",{enumerable:!0,get:function(){return A$.default}});var R$=fO();Object.defineProperty(ql,"measureElement",{enumerable:!0,get:function(){return R$.default}})});var k$={};sS(k$,{default:()=>N$,versionUtils:()=>RD});var M3=Mi(require("@yarnpkg/core"));var X_=Mi(require("@yarnpkg/cli")),em=Mi(require("@yarnpkg/core")),Q_=Mi(require("@yarnpkg/core")),cd=Mi(require("clipanion"));var RD={};sS(RD,{Decision:()=>Nu,applyPrerelease:()=>v5,applyReleases:()=>ND,applyStrategy:()=>Y_,clearVersionFiles:()=>OD,fetchBase:()=>pK,fetchChangedFiles:()=>vK,fetchRoot:()=>hK,getUndecidedDependentWorkspaces:()=>Zy,getUndecidedWorkspaces:()=>K_,openVersionFile:()=>$v,requireMoreDecisions:()=>yK,resolveVersionFiles:()=>Jy,suggestStrategy:()=>MD,updateVersionFiles:()=>kD,validateReleaseDecision:()=>Zv});var Gi=Mi(require("@yarnpkg/core")),D0=Mi(require("@yarnpkg/fslib")),W1=Mi(require("@yarnpkg/parsers")),Zp=Mi(require("@yarnpkg/plugin-git")),Jv=Mi(require("clipanion")),h5=Mi(p5()),Fc=Mi(require("semver")),pK=Zp.gitUtils.fetchBase,hK=Zp.gitUtils.fetchRoot,vK=Zp.gitUtils.fetchChangedFiles,mK=/^(>=|[~^]|)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/,Nu;(function(k){k.UNDECIDED="undecided",k.DECLINE="decline",k.MAJOR="major",k.MINOR="minor",k.PATCH="patch",k.PRERELEASE="prerelease"})(Nu||(Nu={}));function Zv(i){let o=Fc.default.valid(i);return o||Gi.miscUtils.validateEnum((0,h5.default)(Nu,"UNDECIDED"),i)}async function Jy(i,{prerelease:o=null}={}){var t;let f=new Map,p=i.configuration.get("deferredVersionFolder");if(!D0.xfs.existsSync(p))return new Map;let E=await D0.xfs.readdirPromise(p);for(let k of E){if(!k.endsWith(".yml"))continue;let L=D0.ppath.join(p,k),N=await D0.xfs.readFilePromise(L,"utf8"),C=(0,W1.parseSyml)(N);for(let[U,q]of Object.entries(C.releases||{})){if(q===Nu.DECLINE)continue;let W=Gi.structUtils.parseIdent(U),ne=i.tryWorkspaceByIdent(W);if(ne===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${D0.ppath.basename(L)} references ${U})`);if(ne.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${Gi.structUtils.prettyLocator(i.configuration,ne.anchoredLocator)})`);let m=(t=ne.manifest.raw.stableVersion)!=null?t:ne.manifest.version,we=f.get(ne),Se=Y_(m,Zv(q));if(Se===null)throw new Error(`Assertion failed: Expected ${m} to support being bumped via strategy ${q}`);let he=typeof we!="undefined"?Fc.default.gt(Se,we)?Se:we:Se;f.set(ne,he)}}return o&&(f=new Map([...f].map(([k,L])=>[k,v5(L,{current:k.manifest.version,prerelease:o})]))),f}async function OD(i){let o=i.configuration.get("deferredVersionFolder");!D0.xfs.existsSync(o)||await D0.xfs.removePromise(o)}async function kD(i){let o=i.configuration.get("deferredVersionFolder");if(!D0.xfs.existsSync(o))return;let f=await D0.xfs.readdirPromise(o);for(let p of f){if(!p.endsWith(".yml"))continue;let E=D0.ppath.join(o,p),t=await D0.xfs.readFilePromise(E,"utf8"),k=(0,W1.parseSyml)(t),L=k==null?void 0:k.releases;if(!!L){for(let N of Object.keys(L)){let C=Gi.structUtils.parseLocator(N);i.tryWorkspaceByLocator(C)===null&&delete k.releases[N]}await D0.xfs.changeFilePromise(E,(0,W1.stringifySyml)(new W1.stringifySyml.PreserveOrdering(k)))}}}async function $v(i,{allowEmpty:o=!1}={}){let f=i.configuration;if(f.projectCwd===null)throw new Jv.UsageError("This command can only be run from within a Yarn project");let p=await Zp.gitUtils.fetchRoot(f.projectCwd),E=p!==null?await Zp.gitUtils.fetchBase(p,{baseRefs:f.get("changesetBaseRefs")}):null,t=p!==null?await Zp.gitUtils.fetchChangedFiles(p,{base:E.hash,project:i}):[],k=f.get("deferredVersionFolder"),L=t.filter(ne=>D0.ppath.contains(k,ne)!==null);if(L.length>1)throw new Jv.UsageError(`Your current branch contains multiple versioning files; this isn't supported: -- ${L.map(ne=>D0.npath.fromPortablePath(ne)).join(` -- `)}`);let N=new Set(Gi.miscUtils.mapAndFilter(t,ne=>{let m=i.tryWorkspaceByFilePath(ne);return m===null?Gi.miscUtils.mapAndFilter.skip:m}));if(L.length===0&&N.size===0&&!o)return null;let C=L.length===1?L[0]:D0.ppath.join(k,`${Gi.hashUtils.makeHash(Math.random().toString()).slice(0,8)}.yml`),U=D0.xfs.existsSync(C)?await D0.xfs.readFilePromise(C,"utf8"):"{}",q=(0,W1.parseSyml)(U),W=new Map;for(let ne of q.declined||[]){let m=Gi.structUtils.parseIdent(ne),we=i.getWorkspaceByIdent(m);W.set(we,Nu.DECLINE)}for(let[ne,m]of Object.entries(q.releases||{})){let we=Gi.structUtils.parseIdent(ne),Se=i.getWorkspaceByIdent(we);W.set(Se,Zv(m))}return{project:i,root:p,baseHash:E!==null?E.hash:null,baseTitle:E!==null?E.title:null,changedFiles:new Set(t),changedWorkspaces:N,releaseRoots:new Set([...N].filter(ne=>ne.manifest.version!==null)),releases:W,async saveAll(){let ne={},m=[],we=[];for(let Se of i.workspaces){if(Se.manifest.version===null)continue;let he=Gi.structUtils.stringifyIdent(Se.locator),ge=W.get(Se);ge===Nu.DECLINE?m.push(he):typeof ge!="undefined"?ne[he]=Zv(ge):N.has(Se)&&we.push(he)}await D0.xfs.mkdirPromise(D0.ppath.dirname(C),{recursive:!0}),await D0.xfs.changeFilePromise(C,(0,W1.stringifySyml)(new W1.stringifySyml.PreserveOrdering({releases:Object.keys(ne).length>0?ne:void 0,declined:m.length>0?m:void 0,undecided:we.length>0?we:void 0})))}}}function yK(i){return K_(i).size>0||Zy(i).length>0}function K_(i){let o=new Set;for(let f of i.changedWorkspaces)f.manifest.version!==null&&(i.releases.has(f)||o.add(f));return o}function Zy(i,{include:o=new Set}={}){let f=[],p=new Map(Gi.miscUtils.mapAndFilter([...i.releases],([t,k])=>k===Nu.DECLINE?Gi.miscUtils.mapAndFilter.skip:[t.anchoredLocator.locatorHash,t])),E=new Map(Gi.miscUtils.mapAndFilter([...i.releases],([t,k])=>k!==Nu.DECLINE?Gi.miscUtils.mapAndFilter.skip:[t.anchoredLocator.locatorHash,t]));for(let t of i.project.workspaces)if(!(!o.has(t)&&(E.has(t.anchoredLocator.locatorHash)||p.has(t.anchoredLocator.locatorHash)))&&t.manifest.version!==null)for(let k of Gi.Manifest.hardDependencies)for(let L of t.manifest.getForScope(k).values()){let N=i.project.tryWorkspaceByDescriptor(L);N!==null&&p.has(N.anchoredLocator.locatorHash)&&f.push([t,N])}return f}function MD(i,o){let f=Fc.default.clean(o);for(let p of Object.values(Nu))if(p!==Nu.UNDECIDED&&p!==Nu.DECLINE&&Fc.default.inc(i,p)===f)return p;return null}function Y_(i,o){if(Fc.default.valid(o))return o;if(i===null)throw new Jv.UsageError(`Cannot apply the release strategy "${o}" unless the workspace already has a valid version`);if(!Fc.default.valid(i))throw new Jv.UsageError(`Cannot apply the release strategy "${o}" on a non-semver version (${i})`);let f=Fc.default.inc(i,o);if(f===null)throw new Jv.UsageError(`Cannot apply the release strategy "${o}" on the specified version (${i})`);return f}function ND(i,o,{report:f}){let p=new Map;for(let E of i.workspaces)for(let t of Gi.Manifest.allDependencies)for(let k of E.manifest[t].values()){let L=i.tryWorkspaceByDescriptor(k);if(L===null||!o.has(L))continue;Gi.miscUtils.getArrayWithDefault(p,L).push([E,t,k.identHash])}for(let[E,t]of o){let k=E.manifest.version;E.manifest.version=t,Fc.default.prerelease(t)===null?delete E.manifest.raw.stableVersion:E.manifest.raw.stableVersion||(E.manifest.raw.stableVersion=k);let L=E.manifest.name!==null?Gi.structUtils.stringifyIdent(E.manifest.name):null;f.reportInfo(Gi.MessageName.UNNAMED,`${Gi.structUtils.prettyLocator(i.configuration,E.anchoredLocator)}: Bumped to ${t}`),f.reportJson({cwd:D0.npath.fromPortablePath(E.cwd),ident:L,oldVersion:k,newVersion:t});let N=p.get(E);if(typeof N!="undefined")for(let[C,U,q]of N){let W=C.manifest[U].get(q);if(typeof W=="undefined")throw new Error("Assertion failed: The dependency should have existed");let ne=W.range,m=!1;if(ne.startsWith(Gi.WorkspaceResolver.protocol)&&(ne=ne.slice(Gi.WorkspaceResolver.protocol.length),m=!0,ne===E.relativeCwd))continue;let we=ne.match(mK);if(!we){f.reportWarning(Gi.MessageName.UNNAMED,`Couldn't auto-upgrade range ${ne} (in ${Gi.structUtils.prettyLocator(i.configuration,C.anchoredLocator)})`);continue}let Se=`${we[1]}${t}`;m&&(Se=`${Gi.WorkspaceResolver.protocol}${Se}`);let he=Gi.structUtils.makeDescriptor(W,Se);C.manifest[U].set(q,he)}}}var gK=new Map([["%n",{extract:i=>i.length>=1?[i[0],i.slice(1)]:null,generate:(i=0)=>`${i+1}`}]]);function v5(i,{current:o,prerelease:f}){let p=new Fc.default.SemVer(o),E=p.prerelease.slice(),t=[];p.prerelease=[],p.format()!==i&&(E.length=0);let k=!0,L=f.split(/\./g);for(let N of L){let C=gK.get(N);if(typeof C=="undefined")t.push(N),E[0]===N?E.shift():k=!1;else{let U=k?C.extract(E):null;U!==null&&typeof U[0]=="number"?(t.push(C.generate(U[0])),E=U[1]):(t.push(C.generate()),k=!1)}}return p.prerelease&&(p.prerelease=[]),`${i}-${t.join(".")}`}var $y=class extends X_.BaseCommand{constructor(){super(...arguments);this.all=cd.Option.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=cd.Option.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=cd.Option.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.recursive=cd.Option.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=cd.Option.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let o=await em.Configuration.find(this.context.cwd,this.context.plugins),{project:f,workspace:p}=await Q_.Project.find(o,this.context.cwd),E=await em.Cache.find(o);if(!p)throw new X_.WorkspaceRequiredError(f.cwd,this.context.cwd);return await f.restoreInstallState({restoreResolutions:!1}),(await Q_.StreamReport.start({configuration:o,json:this.json,stdout:this.context.stdout},async k=>{let L=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,N=await Jy(f,{prerelease:L}),C=new Map;if(this.all)C=N;else{let U=this.recursive?p.getRecursiveWorkspaceDependencies():[p];for(let q of U){let W=N.get(q);typeof W!="undefined"&&C.set(q,W)}}if(C.size===0){let U=N.size>0?" Did you want to add --all?":"";k.reportWarning(em.MessageName.UNNAMED,`The current workspace doesn't seem to require a version bump.${U}`);return}ND(f,C,{report:k}),this.dryRun||(L||(this.all?await OD(f):await kD(f)),k.reportSeparator(),await f.install({cache:E,report:k}))})).exitCode()}};$y.paths=[["version","apply"]],$y.usage=cd.Command.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` - This command will apply the deferred version changes and remove their definitions from the repository. - - Note that if \`--prerelease\` is set, the given prerelease identifier (by default \`rc.%d\`) will be used on all new versions and the version definitions will be kept as-is. - - By default only the current workspace will be bumped, but you can configure this behavior by using one of: - - - \`--recursive\` to also apply the version bump on its dependencies - - \`--all\` to apply the version bump on all packages in the repository - - Note that this command will also update the \`workspace:\` references across all your local workspaces, thus ensuring that they keep referring to the same workspaces even after the version bump. - `,examples:[["Apply the version change to the local workspace","yarn version apply"],["Apply the version change to all the workspaces in the local workspace","yarn version apply --all"]]});var m5=$y;var e_=Mi(require("@yarnpkg/cli")),s0=Mi(require("@yarnpkg/core")),rc=Mi(require("@yarnpkg/fslib"));var cO=Mi(lh()),sh=Mi(su()),dO=(0,sh.memo)(({active:i})=>{let o=(0,sh.useMemo)(()=>i?"\u25C9":"\u25EF",[i]),f=(0,sh.useMemo)(()=>i?"green":"yellow",[i]);return sh.default.createElement(cO.Text,{color:f},o)});var yd=Mi(lh()),Js=Mi(su());var pO=Mi(lh()),q4=Mi(su());function hm({active:i},o,f){let{stdin:p}=(0,pO.useStdin)(),E=(0,q4.useCallback)((t,k)=>o(t,k),f);(0,q4.useEffect)(()=>{if(!(!i||!p))return p.on("keypress",E),()=>{p.off("keypress",E)}},[i,E,p])}var ah;(function(f){f.BEFORE="before",f.AFTER="after"})(ah||(ah={}));var hO=function({active:i},o,f){hm({active:i},(p,E)=>{E.name==="tab"&&(E.shift?o(ah.BEFORE):o(ah.AFTER))},f)};var H4=function(i,o,{active:f,minus:p,plus:E,set:t,loop:k=!0}){hm({active:f},(L,N)=>{let C=o.indexOf(i);switch(N.name){case p:{let U=C-1;if(k){t(o[(o.length+U)%o.length]);return}if(U<0)return;t(o[U])}break;case E:{let U=C+1;if(k){t(o[U%o.length]);return}if(U>=o.length)return;t(o[U])}break}},[o,i,E,t,k])};var O3=({active:i=!0,children:o=[],radius:f=10,size:p=1,loop:E=!0,onFocusRequest:t,willReachEnd:k})=>{let L=Se=>{if(Se.key===null)throw new Error("Expected all children to have a key");return Se.key},N=Js.default.Children.map(o,Se=>L(Se)),C=N[0],[U,q]=(0,Js.useState)(C),W=N.indexOf(U);(0,Js.useEffect)(()=>{N.includes(U)||q(C)},[o]),(0,Js.useEffect)(()=>{k&&W>=N.length-2&&k()},[W]),hO({active:i&&!!t},Se=>{t==null||t(Se)},[t]),H4(U,N,{active:i,minus:"up",plus:"down",set:q,loop:E});let ne=W-f,m=W+f;m>N.length&&(ne-=m-N.length,m=N.length),ne<0&&(m+=-ne,ne=0),m>=N.length&&(m=N.length-1);let we=[];for(let Se=ne;Se<=m;++Se){let he=N[Se],ge=i&&he===U;we.push(Js.default.createElement(yd.Box,{key:he,height:p},Js.default.createElement(yd.Box,{marginLeft:1,marginRight:1},Js.default.createElement(yd.Text,null,ge?Js.default.createElement(yd.Text,{color:"cyan",bold:!0},">"):" ")),Js.default.createElement(yd.Box,null,Js.default.cloneElement(o[Se],{active:ge}))))}return Js.default.createElement(yd.Box,{flexDirection:"column",width:"100%"},we)};var W4=Mi(lh()),k3=Mi(su());var vO=Mi(lh()),Z1=Mi(su()),mO=Mi(require("readline")),O$=Z1.default.createContext(null),yO=({children:i})=>{let{stdin:o,setRawMode:f}=(0,vO.useStdin)();(0,Z1.useEffect)(()=>{f&&f(!0),o&&(0,mO.emitKeypressEvents)(o)},[o,f]);let[p,E]=(0,Z1.useState)(new Map),t=(0,Z1.useMemo)(()=>({getAll:()=>p,get:k=>p.get(k),set:(k,L)=>E(new Map([...p,[k,L]]))}),[p,E]);return Z1.default.createElement(O$.Provider,{value:t,children:i})};async function gO(i,o,{stdin:f,stdout:p,stderr:E}={}){let t,k=N=>{let{exit:C}=(0,W4.useApp)();hm({active:!0},(U,q)=>{q.name==="return"&&(t=N,C())},[C,N])},{waitUntilExit:L}=(0,W4.render)(k3.default.createElement(yO,null,k3.default.createElement(i,Gf(E0({},o),{useSubmit:k}))),{stdin:f,stdout:p,stderr:E});return await L(),t}var fh=Mi(require("clipanion")),Dr=Mi(lh()),Tn=Mi(su()),V4=Mi(require("semver"));var t_=class extends e_.BaseCommand{constructor(){super(...arguments);this.interactive=fh.Option.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){let o=await s0.Configuration.find(this.context.cwd,this.context.plugins),{project:f,workspace:p}=await s0.Project.find(o,this.context.cwd);if(!p)throw new e_.WorkspaceRequiredError(f.cwd,this.context.cwd);await f.restoreInstallState();let E=await $v(f);if(E===null||E.releaseRoots.size===0)return 0;if(E.root===null)throw new fh.UsageError("This command can only be run on Git repositories");let t=()=>Tn.default.createElement(Dr.Box,{flexDirection:"row",paddingBottom:1},Tn.default.createElement(Dr.Box,{flexDirection:"column",width:60},Tn.default.createElement(Dr.Box,null,Tn.default.createElement(Dr.Text,null,"Press ",Tn.default.createElement(Dr.Text,{bold:!0,color:"cyanBright"},""),"/",Tn.default.createElement(Dr.Text,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),Tn.default.createElement(Dr.Box,null,Tn.default.createElement(Dr.Text,null,"Press ",Tn.default.createElement(Dr.Text,{bold:!0,color:"cyanBright"},""),"/",Tn.default.createElement(Dr.Text,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),Tn.default.createElement(Dr.Box,{flexDirection:"column"},Tn.default.createElement(Dr.Box,{marginLeft:1},Tn.default.createElement(Dr.Text,null,"Press ",Tn.default.createElement(Dr.Text,{bold:!0,color:"cyanBright"},"")," to save.")),Tn.default.createElement(Dr.Box,{marginLeft:1},Tn.default.createElement(Dr.Text,null,"Press ",Tn.default.createElement(Dr.Text,{bold:!0,color:"cyanBright"},"")," to abort.")))),k=({workspace:W,active:ne,decision:m,setDecision:we})=>{var ze;let Se=(ze=W.manifest.raw.stableVersion)!=null?ze:W.manifest.version;if(Se===null)throw new Error(`Assertion failed: The version should have been set (${s0.structUtils.prettyLocator(o,W.anchoredLocator)})`);if(V4.default.prerelease(Se)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${Se})`);let he=[Nu.UNDECIDED,Nu.DECLINE,Nu.PATCH,Nu.MINOR,Nu.MAJOR];H4(m,he,{active:ne,minus:"left",plus:"right",set:we});let ge=m===Nu.UNDECIDED?Tn.default.createElement(Dr.Text,{color:"yellow"},Se):m===Nu.DECLINE?Tn.default.createElement(Dr.Text,{color:"green"},Se):Tn.default.createElement(Dr.Text,null,Tn.default.createElement(Dr.Text,{color:"magenta"},Se)," \u2192 ",Tn.default.createElement(Dr.Text,{color:"green"},V4.default.valid(m)?m:V4.default.inc(Se,m)));return Tn.default.createElement(Dr.Box,{flexDirection:"column"},Tn.default.createElement(Dr.Box,null,Tn.default.createElement(Dr.Text,null,s0.structUtils.prettyLocator(o,W.anchoredLocator)," - ",ge)),Tn.default.createElement(Dr.Box,null,he.map(pe=>Tn.default.createElement(Dr.Box,{key:pe,paddingLeft:2},Tn.default.createElement(Dr.Text,null,Tn.default.createElement(dO,{active:pe===m})," ",pe)))))},L=W=>{let ne=new Set(E.releaseRoots),m=new Map([...W].filter(([we])=>ne.has(we)));for(;;){let we=Zy({project:E.project,releases:m}),Se=!1;if(we.length>0){for(let[he]of we)if(!ne.has(he)){ne.add(he),Se=!0;let ge=W.get(he);typeof ge!="undefined"&&m.set(he,ge)}}if(!Se)break}return{relevantWorkspaces:ne,relevantReleases:m}},N=()=>{let[W,ne]=(0,Tn.useState)(()=>new Map(E.releases)),m=(0,Tn.useCallback)((we,Se)=>{let he=new Map(W);Se!==Nu.UNDECIDED?he.set(we,Se):he.delete(we);let{relevantReleases:ge}=L(he);ne(ge)},[W,ne]);return[W,m]},C=({workspaces:W,releases:ne})=>{let m=[];m.push(`${W.size} total`);let we=0,Se=0;for(let he of W){let ge=ne.get(he);typeof ge=="undefined"?Se+=1:ge!==Nu.DECLINE&&(we+=1)}return m.push(`${we} release${we===1?"":"s"}`),m.push(`${Se} remaining`),Tn.default.createElement(Dr.Text,{color:"yellow"},m.join(", "))},q=await gO(({useSubmit:W})=>{let[ne,m]=N();W(ne);let{relevantWorkspaces:we}=L(ne),Se=new Set([...we].filter(pe=>!E.releaseRoots.has(pe))),[he,ge]=(0,Tn.useState)(0),ze=(0,Tn.useCallback)(pe=>{switch(pe){case ah.BEFORE:ge(he-1);break;case ah.AFTER:ge(he+1);break}},[he,ge]);return Tn.default.createElement(Dr.Box,{flexDirection:"column"},Tn.default.createElement(t,null),Tn.default.createElement(Dr.Box,null,Tn.default.createElement(Dr.Text,{wrap:"wrap"},"The following files have been modified in your local checkout.")),Tn.default.createElement(Dr.Box,{flexDirection:"column",marginTop:1,paddingLeft:2},[...E.changedFiles].map(pe=>Tn.default.createElement(Dr.Box,{key:pe},Tn.default.createElement(Dr.Text,null,Tn.default.createElement(Dr.Text,{color:"grey"},rc.npath.fromPortablePath(E.root)),rc.npath.sep,rc.npath.relative(rc.npath.fromPortablePath(E.root),rc.npath.fromPortablePath(pe)))))),E.releaseRoots.size>0&&Tn.default.createElement(Tn.default.Fragment,null,Tn.default.createElement(Dr.Box,{marginTop:1},Tn.default.createElement(Dr.Text,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),Se.size>3?Tn.default.createElement(Dr.Box,{marginTop:1},Tn.default.createElement(C,{workspaces:E.releaseRoots,releases:ne})):null,Tn.default.createElement(Dr.Box,{marginTop:1,flexDirection:"column"},Tn.default.createElement(O3,{active:he%2==0,radius:1,size:2,onFocusRequest:ze},[...E.releaseRoots].map(pe=>Tn.default.createElement(k,{key:pe.cwd,workspace:pe,decision:ne.get(pe)||Nu.UNDECIDED,setDecision:Oe=>m(pe,Oe)}))))),Se.size>0?Tn.default.createElement(Tn.default.Fragment,null,Tn.default.createElement(Dr.Box,{marginTop:1},Tn.default.createElement(Dr.Text,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),Tn.default.createElement(Dr.Box,null,Tn.default.createElement(Dr.Text,null,"(Press ",Tn.default.createElement(Dr.Text,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),Se.size>5?Tn.default.createElement(Dr.Box,{marginTop:1},Tn.default.createElement(C,{workspaces:Se,releases:ne})):null,Tn.default.createElement(Dr.Box,{marginTop:1,flexDirection:"column"},Tn.default.createElement(O3,{active:he%2==1,radius:2,size:2,onFocusRequest:ze},[...Se].map(pe=>Tn.default.createElement(k,{key:pe.cwd,workspace:pe,decision:ne.get(pe)||Nu.UNDECIDED,setDecision:Oe=>m(pe,Oe)}))))):null)},{versionFile:E},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof q=="undefined")return 1;E.releases.clear();for(let[W,ne]of q)E.releases.set(W,ne);await E.saveAll()}async executeStandard(){let o=await s0.Configuration.find(this.context.cwd,this.context.plugins),{project:f,workspace:p}=await s0.Project.find(o,this.context.cwd);if(!p)throw new e_.WorkspaceRequiredError(f.cwd,this.context.cwd);return await f.restoreInstallState(),(await s0.StreamReport.start({configuration:o,stdout:this.context.stdout},async t=>{let k=await $v(f);if(k===null||k.releaseRoots.size===0)return;if(k.root===null)throw new fh.UsageError("This command can only be run on Git repositories");if(t.reportInfo(s0.MessageName.UNNAMED,`Your PR was started right after ${s0.formatUtils.pretty(o,k.baseHash.slice(0,7),"yellow")} ${s0.formatUtils.pretty(o,k.baseTitle,"magenta")}`),k.changedFiles.size>0){t.reportInfo(s0.MessageName.UNNAMED,"You have changed the following files since then:"),t.reportSeparator();for(let q of k.changedFiles)t.reportInfo(null,`${s0.formatUtils.pretty(o,rc.npath.fromPortablePath(k.root),"gray")}${rc.npath.sep}${rc.npath.relative(rc.npath.fromPortablePath(k.root),rc.npath.fromPortablePath(q))}`)}let L=!1,N=!1,C=K_(k);if(C.size>0){L||t.reportSeparator();for(let q of C)t.reportError(s0.MessageName.UNNAMED,`${s0.structUtils.prettyLocator(o,q.anchoredLocator)} has been modified but doesn't have a release strategy attached`);L=!0}let U=Zy(k);for(let[q,W]of U)N||t.reportSeparator(),t.reportError(s0.MessageName.UNNAMED,`${s0.structUtils.prettyLocator(o,q.anchoredLocator)} doesn't have a release strategy attached, but depends on ${s0.structUtils.prettyWorkspace(o,W)} which is planned for release.`),N=!0;(L||N)&&(t.reportSeparator(),t.reportInfo(s0.MessageName.UNNAMED,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),t.reportInfo(s0.MessageName.UNNAMED,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};t_.paths=[["version","check"]],t_.usage=fh.Command.Usage({category:"Release-related commands",description:"check that all the relevant packages have been bumped",details:"\n **Warning:** This command currently requires Git.\n\n This command will check that all the packages covered by the files listed in argument have been properly bumped or declined to bump.\n\n In the case of a bump, the check will also cover transitive packages - meaning that should `Foo` be bumped, a package `Bar` depending on `Foo` will require a decision as to whether `Bar` will need to be bumped. This check doesn't cross packages that have declined to bump.\n\n In case no arguments are passed to the function, the list of modified files will be generated by comparing the HEAD against `master`.\n ",examples:[["Check whether the modified packages need a bump","yarn version check"]]});var _O=t_;var G4=Mi(require("@yarnpkg/cli")),Y4=Mi(require("@yarnpkg/core")),Bc=Mi(require("clipanion")),K4=Mi(require("semver"));var n_=class extends G4.BaseCommand{constructor(){super(...arguments);this.deferred=Bc.Option.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=Bc.Option.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=Bc.Option.String()}async execute(){let o=await Y4.Configuration.find(this.context.cwd,this.context.plugins),{project:f,workspace:p}=await Y4.Project.find(o,this.context.cwd);if(!p)throw new G4.WorkspaceRequiredError(f.cwd,this.context.cwd);let E=o.get("preferDeferredVersions");this.deferred&&(E=!0),this.immediate&&(E=!1);let t=K4.default.valid(this.strategy),k=this.strategy===Nu.DECLINE,L;if(t)if(p.manifest.version!==null){let C=MD(p.manifest.version,this.strategy);C!==null?L=C:L=this.strategy}else L=this.strategy;else{let C=p.manifest.version;if(!k){if(C===null)throw new Bc.UsageError("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof C!="string"||!K4.default.valid(C))throw new Bc.UsageError(`Can't bump the version (${C}) if it's not valid semver`)}L=Zv(this.strategy)}if(!E){let U=(await Jy(f)).get(p);if(typeof U!="undefined"&&L!==Nu.DECLINE){let q=Y_(p.manifest.version,L);if(K4.default.lt(q,U))throw new Bc.UsageError(`Can't bump the version to one that would be lower than the current deferred one (${U})`)}}let N=await $v(f,{allowEmpty:!0});return N.releases.set(p,L),await N.saveAll(),E?0:await this.cli.run(["version","apply"])}};n_.paths=[["version"]],n_.usage=Bc.Command.Usage({category:"Release-related commands",description:"apply a new version to the current package",details:"\n This command will bump the version number for the given package, following the specified strategy:\n\n - If `major`, the first number from the semver range will be increased (`X.0.0`).\n - If `minor`, the second number from the semver range will be increased (`0.X.0`).\n - If `patch`, the third number from the semver range will be increased (`0.0.X`).\n - If prefixed by `pre` (`premajor`, ...), a `-0` suffix will be set (`0.0.0-0`).\n - If `prerelease`, the suffix will be increased (`0.0.0-X`); the third number from the semver range will also be increased if there was no suffix in the previous version.\n - If `decline`, the nonce will be increased for `yarn version check` to pass without version bump.\n - If a valid semver range, it will be used as new version.\n - If unspecified, Yarn will ask you for guidance.\n\n For more information about the `--deferred` flag, consult our documentation (https://yarnpkg.com/features/release-workflow#deferred-versioning).\n ",examples:[["Immediately bump the version to the next major","yarn version major"],["Prepare the version to be bumped to the next major","yarn version major --deferred"]]});var EO=n_;var M$={configuration:{deferredVersionFolder:{description:"Folder where are stored the versioning files",type:M3.SettingsType.ABSOLUTE_PATH,default:"./.yarn/versions"},preferDeferredVersions:{description:"If true, running `yarn version` will assume the `--deferred` flag unless `--immediate` is set",type:M3.SettingsType.BOOLEAN,default:!1}},commands:[m5,_O,EO]},N$=M$;return k$;})(); -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react-debug-tools.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler-tracing.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler-tracing.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.24.0 - * react-reconciler.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.24.0 - * react-reconciler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v16.13.1 - * react.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v16.13.1 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -return plugin; -} -}; diff --git a/.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs b/.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs deleted file mode 100644 index fc27b01d3..000000000 --- a/.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs +++ /dev/null @@ -1,28 +0,0 @@ -/* eslint-disable */ -//prettier-ignore -module.exports = { -name: "@yarnpkg/plugin-workspace-tools", -factory: function (require) { -var plugin=(()=>{var _r=Object.create;var we=Object.defineProperty;var Er=Object.getOwnPropertyDescriptor;var br=Object.getOwnPropertyNames;var xr=Object.getPrototypeOf,Cr=Object.prototype.hasOwnProperty;var W=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(r,t)=>(typeof require<"u"?require:r)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var q=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports),wr=(e,r)=>{for(var t in r)we(e,t,{get:r[t],enumerable:!0})},Je=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of br(r))!Cr.call(e,s)&&s!==t&&we(e,s,{get:()=>r[s],enumerable:!(n=Er(r,s))||n.enumerable});return e};var Be=(e,r,t)=>(t=e!=null?_r(xr(e)):{},Je(r||!e||!e.__esModule?we(t,"default",{value:e,enumerable:!0}):t,e)),Sr=e=>Je(we({},"__esModule",{value:!0}),e);var ve=q(ee=>{"use strict";ee.isInteger=e=>typeof e=="number"?Number.isInteger(e):typeof e=="string"&&e.trim()!==""?Number.isInteger(Number(e)):!1;ee.find=(e,r)=>e.nodes.find(t=>t.type===r);ee.exceedsLimit=(e,r,t=1,n)=>n===!1||!ee.isInteger(e)||!ee.isInteger(r)?!1:(Number(r)-Number(e))/Number(t)>=n;ee.escapeNode=(e,r=0,t)=>{let n=e.nodes[r];!n||(t&&n.type===t||n.type==="open"||n.type==="close")&&n.escaped!==!0&&(n.value="\\"+n.value,n.escaped=!0)};ee.encloseBrace=e=>e.type!=="brace"?!1:e.commas>>0+e.ranges>>0===0?(e.invalid=!0,!0):!1;ee.isInvalidBrace=e=>e.type!=="brace"?!1:e.invalid===!0||e.dollar?!0:e.commas>>0+e.ranges>>0===0||e.open!==!0||e.close!==!0?(e.invalid=!0,!0):!1;ee.isOpenOrClose=e=>e.type==="open"||e.type==="close"?!0:e.open===!0||e.close===!0;ee.reduce=e=>e.reduce((r,t)=>(t.type==="text"&&r.push(t.value),t.type==="range"&&(t.type="text"),r),[]);ee.flatten=(...e)=>{let r=[],t=n=>{for(let s=0;s{"use strict";var tt=ve();rt.exports=(e,r={})=>{let t=(n,s={})=>{let i=r.escapeInvalid&&tt.isInvalidBrace(s),a=n.invalid===!0&&r.escapeInvalid===!0,c="";if(n.value)return(i||a)&&tt.isOpenOrClose(n)?"\\"+n.value:n.value;if(n.value)return n.value;if(n.nodes)for(let p of n.nodes)c+=t(p);return c};return t(e)}});var st=q((Jn,nt)=>{"use strict";nt.exports=function(e){return typeof e=="number"?e-e===0:typeof e=="string"&&e.trim()!==""?Number.isFinite?Number.isFinite(+e):isFinite(+e):!1}});var ht=q((es,pt)=>{"use strict";var at=st(),le=(e,r,t)=>{if(at(e)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(r===void 0||e===r)return String(e);if(at(r)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let n={relaxZeros:!0,...t};typeof n.strictZeros=="boolean"&&(n.relaxZeros=n.strictZeros===!1);let s=String(n.relaxZeros),i=String(n.shorthand),a=String(n.capture),c=String(n.wrap),p=e+":"+r+"="+s+i+a+c;if(le.cache.hasOwnProperty(p))return le.cache[p].result;let m=Math.min(e,r),h=Math.max(e,r);if(Math.abs(m-h)===1){let y=e+"|"+r;return n.capture?`(${y})`:n.wrap===!1?y:`(?:${y})`}let R=ft(e)||ft(r),f={min:e,max:r,a:m,b:h},$=[],_=[];if(R&&(f.isPadded=R,f.maxLen=String(f.max).length),m<0){let y=h<0?Math.abs(h):1;_=it(y,Math.abs(m),f,n),m=f.a=0}return h>=0&&($=it(m,h,f,n)),f.negatives=_,f.positives=$,f.result=vr(_,$,n),n.capture===!0?f.result=`(${f.result})`:n.wrap!==!1&&$.length+_.length>1&&(f.result=`(?:${f.result})`),le.cache[p]=f,f.result};function vr(e,r,t){let n=Me(e,r,"-",!1,t)||[],s=Me(r,e,"",!1,t)||[],i=Me(e,r,"-?",!0,t)||[];return n.concat(i).concat(s).join("|")}function Hr(e,r){let t=1,n=1,s=ut(e,t),i=new Set([r]);for(;e<=s&&s<=r;)i.add(s),t+=1,s=ut(e,t);for(s=ct(r+1,n)-1;e1&&c.count.pop(),c.count.push(h.count[0]),c.string=c.pattern+lt(c.count),a=m+1;continue}t.isPadded&&(R=Or(m,t,n)),h.string=R+h.pattern+lt(h.count),i.push(h),a=m+1,c=h}return i}function Me(e,r,t,n,s){let i=[];for(let a of e){let{string:c}=a;!n&&!ot(r,"string",c)&&i.push(t+c),n&&ot(r,"string",c)&&i.push(t+c)}return i}function Tr(e,r){let t=[];for(let n=0;nr?1:r>e?-1:0}function ot(e,r,t){return e.some(n=>n[r]===t)}function ut(e,r){return Number(String(e).slice(0,-r)+"9".repeat(r))}function ct(e,r){return e-e%Math.pow(10,r)}function lt(e){let[r=0,t=""]=e;return t||r>1?`{${r+(t?","+t:"")}}`:""}function Lr(e,r,t){return`[${e}${r-e===1?"":"-"}${r}]`}function ft(e){return/^-?(0+)\d/.test(e)}function Or(e,r,t){if(!r.isPadded)return e;let n=Math.abs(r.maxLen-String(e).length),s=t.relaxZeros!==!1;switch(n){case 0:return"";case 1:return s?"0?":"0";case 2:return s?"0{0,2}":"00";default:return s?`0{0,${n}}`:`0{${n}}`}}le.cache={};le.clearCache=()=>le.cache={};pt.exports=le});var Ue=q((ts,Et)=>{"use strict";var Nr=W("util"),At=ht(),dt=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),Ir=e=>r=>e===!0?Number(r):String(r),Pe=e=>typeof e=="number"||typeof e=="string"&&e!=="",Ae=e=>Number.isInteger(+e),De=e=>{let r=`${e}`,t=-1;if(r[0]==="-"&&(r=r.slice(1)),r==="0")return!1;for(;r[++t]==="0";);return t>0},Br=(e,r,t)=>typeof e=="string"||typeof r=="string"?!0:t.stringify===!0,Mr=(e,r,t)=>{if(r>0){let n=e[0]==="-"?"-":"";n&&(e=e.slice(1)),e=n+e.padStart(n?r-1:r,"0")}return t===!1?String(e):e},gt=(e,r)=>{let t=e[0]==="-"?"-":"";for(t&&(e=e.slice(1),r--);e.length{e.negatives.sort((a,c)=>ac?1:0),e.positives.sort((a,c)=>ac?1:0);let t=r.capture?"":"?:",n="",s="",i;return e.positives.length&&(n=e.positives.join("|")),e.negatives.length&&(s=`-(${t}${e.negatives.join("|")})`),n&&s?i=`${n}|${s}`:i=n||s,r.wrap?`(${t}${i})`:i},mt=(e,r,t,n)=>{if(t)return At(e,r,{wrap:!1,...n});let s=String.fromCharCode(e);if(e===r)return s;let i=String.fromCharCode(r);return`[${s}-${i}]`},Rt=(e,r,t)=>{if(Array.isArray(e)){let n=t.wrap===!0,s=t.capture?"":"?:";return n?`(${s}${e.join("|")})`:e.join("|")}return At(e,r,t)},yt=(...e)=>new RangeError("Invalid range arguments: "+Nr.inspect(...e)),_t=(e,r,t)=>{if(t.strictRanges===!0)throw yt([e,r]);return[]},Dr=(e,r)=>{if(r.strictRanges===!0)throw new TypeError(`Expected step "${e}" to be a number`);return[]},Ur=(e,r,t=1,n={})=>{let s=Number(e),i=Number(r);if(!Number.isInteger(s)||!Number.isInteger(i)){if(n.strictRanges===!0)throw yt([e,r]);return[]}s===0&&(s=0),i===0&&(i=0);let a=s>i,c=String(e),p=String(r),m=String(t);t=Math.max(Math.abs(t),1);let h=De(c)||De(p)||De(m),R=h?Math.max(c.length,p.length,m.length):0,f=h===!1&&Br(e,r,n)===!1,$=n.transform||Ir(f);if(n.toRegex&&t===1)return mt(gt(e,R),gt(r,R),!0,n);let _={negatives:[],positives:[]},y=T=>_[T<0?"negatives":"positives"].push(Math.abs(T)),E=[],S=0;for(;a?s>=i:s<=i;)n.toRegex===!0&&t>1?y(s):E.push(Mr($(s,S),R,f)),s=a?s-t:s+t,S++;return n.toRegex===!0?t>1?Pr(_,n):Rt(E,null,{wrap:!1,...n}):E},Gr=(e,r,t=1,n={})=>{if(!Ae(e)&&e.length>1||!Ae(r)&&r.length>1)return _t(e,r,n);let s=n.transform||(f=>String.fromCharCode(f)),i=`${e}`.charCodeAt(0),a=`${r}`.charCodeAt(0),c=i>a,p=Math.min(i,a),m=Math.max(i,a);if(n.toRegex&&t===1)return mt(p,m,!1,n);let h=[],R=0;for(;c?i>=a:i<=a;)h.push(s(i,R)),i=c?i-t:i+t,R++;return n.toRegex===!0?Rt(h,null,{wrap:!1,options:n}):h},$e=(e,r,t,n={})=>{if(r==null&&Pe(e))return[e];if(!Pe(e)||!Pe(r))return _t(e,r,n);if(typeof t=="function")return $e(e,r,1,{transform:t});if(dt(t))return $e(e,r,0,t);let s={...n};return s.capture===!0&&(s.wrap=!0),t=t||s.step||1,Ae(t)?Ae(e)&&Ae(r)?Ur(e,r,t,s):Gr(e,r,Math.max(Math.abs(t),1),s):t!=null&&!dt(t)?Dr(t,s):$e(e,r,1,t)};Et.exports=$e});var Ct=q((rs,xt)=>{"use strict";var qr=Ue(),bt=ve(),Kr=(e,r={})=>{let t=(n,s={})=>{let i=bt.isInvalidBrace(s),a=n.invalid===!0&&r.escapeInvalid===!0,c=i===!0||a===!0,p=r.escapeInvalid===!0?"\\":"",m="";if(n.isOpen===!0||n.isClose===!0)return p+n.value;if(n.type==="open")return c?p+n.value:"(";if(n.type==="close")return c?p+n.value:")";if(n.type==="comma")return n.prev.type==="comma"?"":c?n.value:"|";if(n.value)return n.value;if(n.nodes&&n.ranges>0){let h=bt.reduce(n.nodes),R=qr(...h,{...r,wrap:!1,toRegex:!0});if(R.length!==0)return h.length>1&&R.length>1?`(${R})`:R}if(n.nodes)for(let h of n.nodes)m+=t(h,n);return m};return t(e)};xt.exports=Kr});var vt=q((ns,St)=>{"use strict";var Wr=Ue(),wt=He(),he=ve(),fe=(e="",r="",t=!1)=>{let n=[];if(e=[].concat(e),r=[].concat(r),!r.length)return e;if(!e.length)return t?he.flatten(r).map(s=>`{${s}}`):r;for(let s of e)if(Array.isArray(s))for(let i of s)n.push(fe(i,r,t));else for(let i of r)t===!0&&typeof i=="string"&&(i=`{${i}}`),n.push(Array.isArray(i)?fe(s,i,t):s+i);return he.flatten(n)},jr=(e,r={})=>{let t=r.rangeLimit===void 0?1e3:r.rangeLimit,n=(s,i={})=>{s.queue=[];let a=i,c=i.queue;for(;a.type!=="brace"&&a.type!=="root"&&a.parent;)a=a.parent,c=a.queue;if(s.invalid||s.dollar){c.push(fe(c.pop(),wt(s,r)));return}if(s.type==="brace"&&s.invalid!==!0&&s.nodes.length===2){c.push(fe(c.pop(),["{}"]));return}if(s.nodes&&s.ranges>0){let R=he.reduce(s.nodes);if(he.exceedsLimit(...R,r.step,t))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let f=Wr(...R,r);f.length===0&&(f=wt(s,r)),c.push(fe(c.pop(),f)),s.nodes=[];return}let p=he.encloseBrace(s),m=s.queue,h=s;for(;h.type!=="brace"&&h.type!=="root"&&h.parent;)h=h.parent,m=h.queue;for(let R=0;R{"use strict";Ht.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` -`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var Nt=q((as,Ot)=>{"use strict";var Fr=He(),{MAX_LENGTH:Tt,CHAR_BACKSLASH:Ge,CHAR_BACKTICK:Qr,CHAR_COMMA:Xr,CHAR_DOT:Zr,CHAR_LEFT_PARENTHESES:Yr,CHAR_RIGHT_PARENTHESES:zr,CHAR_LEFT_CURLY_BRACE:Vr,CHAR_RIGHT_CURLY_BRACE:Jr,CHAR_LEFT_SQUARE_BRACKET:kt,CHAR_RIGHT_SQUARE_BRACKET:Lt,CHAR_DOUBLE_QUOTE:en,CHAR_SINGLE_QUOTE:tn,CHAR_NO_BREAK_SPACE:rn,CHAR_ZERO_WIDTH_NOBREAK_SPACE:nn}=$t(),sn=(e,r={})=>{if(typeof e!="string")throw new TypeError("Expected a string");let t=r||{},n=typeof t.maxLength=="number"?Math.min(Tt,t.maxLength):Tt;if(e.length>n)throw new SyntaxError(`Input length (${e.length}), exceeds max characters (${n})`);let s={type:"root",input:e,nodes:[]},i=[s],a=s,c=s,p=0,m=e.length,h=0,R=0,f,$={},_=()=>e[h++],y=E=>{if(E.type==="text"&&c.type==="dot"&&(c.type="text"),c&&c.type==="text"&&E.type==="text"){c.value+=E.value;return}return a.nodes.push(E),E.parent=a,E.prev=c,c=E,E};for(y({type:"bos"});h0){if(a.ranges>0){a.ranges=0;let E=a.nodes.shift();a.nodes=[E,{type:"text",value:Fr(a)}]}y({type:"comma",value:f}),a.commas++;continue}if(f===Zr&&R>0&&a.commas===0){let E=a.nodes;if(R===0||E.length===0){y({type:"text",value:f});continue}if(c.type==="dot"){if(a.range=[],c.value+=f,c.type="range",a.nodes.length!==3&&a.nodes.length!==5){a.invalid=!0,a.ranges=0,c.type="text";continue}a.ranges++,a.args=[];continue}if(c.type==="range"){E.pop();let S=E[E.length-1];S.value+=c.value+f,c=S,a.ranges--;continue}y({type:"dot",value:f});continue}y({type:"text",value:f})}do if(a=i.pop(),a.type!=="root"){a.nodes.forEach(T=>{T.nodes||(T.type==="open"&&(T.isOpen=!0),T.type==="close"&&(T.isClose=!0),T.nodes||(T.type="text"),T.invalid=!0)});let E=i[i.length-1],S=E.nodes.indexOf(a);E.nodes.splice(S,1,...a.nodes)}while(i.length>0);return y({type:"eos"}),s};Ot.exports=sn});var Mt=q((is,Bt)=>{"use strict";var It=He(),an=Ct(),on=vt(),un=Nt(),X=(e,r={})=>{let t=[];if(Array.isArray(e))for(let n of e){let s=X.create(n,r);Array.isArray(s)?t.push(...s):t.push(s)}else t=[].concat(X.create(e,r));return r&&r.expand===!0&&r.nodupes===!0&&(t=[...new Set(t)]),t};X.parse=(e,r={})=>un(e,r);X.stringify=(e,r={})=>It(typeof e=="string"?X.parse(e,r):e,r);X.compile=(e,r={})=>(typeof e=="string"&&(e=X.parse(e,r)),an(e,r));X.expand=(e,r={})=>{typeof e=="string"&&(e=X.parse(e,r));let t=on(e,r);return r.noempty===!0&&(t=t.filter(Boolean)),r.nodupes===!0&&(t=[...new Set(t)]),t};X.create=(e,r={})=>e===""||e.length<3?[e]:r.expand!==!0?X.compile(e,r):X.expand(e,r);Bt.exports=X});var me=q((os,qt)=>{"use strict";var cn=W("path"),se="\\\\/",Pt=`[^${se}]`,ie="\\.",ln="\\+",fn="\\?",Te="\\/",pn="(?=.)",Dt="[^/]",qe=`(?:${Te}|$)`,Ut=`(?:^|${Te})`,Ke=`${ie}{1,2}${qe}`,hn=`(?!${ie})`,dn=`(?!${Ut}${Ke})`,gn=`(?!${ie}{0,1}${qe})`,An=`(?!${Ke})`,mn=`[^.${Te}]`,Rn=`${Dt}*?`,Gt={DOT_LITERAL:ie,PLUS_LITERAL:ln,QMARK_LITERAL:fn,SLASH_LITERAL:Te,ONE_CHAR:pn,QMARK:Dt,END_ANCHOR:qe,DOTS_SLASH:Ke,NO_DOT:hn,NO_DOTS:dn,NO_DOT_SLASH:gn,NO_DOTS_SLASH:An,QMARK_NO_DOT:mn,STAR:Rn,START_ANCHOR:Ut},yn={...Gt,SLASH_LITERAL:`[${se}]`,QMARK:Pt,STAR:`${Pt}*?`,DOTS_SLASH:`${ie}{1,2}(?:[${se}]|$)`,NO_DOT:`(?!${ie})`,NO_DOTS:`(?!(?:^|[${se}])${ie}{1,2}(?:[${se}]|$))`,NO_DOT_SLASH:`(?!${ie}{0,1}(?:[${se}]|$))`,NO_DOTS_SLASH:`(?!${ie}{1,2}(?:[${se}]|$))`,QMARK_NO_DOT:`[^.${se}]`,START_ANCHOR:`(?:^|[${se}])`,END_ANCHOR:`(?:[${se}]|$)`},_n={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};qt.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:_n,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:cn.sep,extglobChars(e){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${e.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(e){return e===!0?yn:Gt}}});var Re=q(F=>{"use strict";var En=W("path"),bn=process.platform==="win32",{REGEX_BACKSLASH:xn,REGEX_REMOVE_BACKSLASH:Cn,REGEX_SPECIAL_CHARS:wn,REGEX_SPECIAL_CHARS_GLOBAL:Sn}=me();F.isObject=e=>e!==null&&typeof e=="object"&&!Array.isArray(e);F.hasRegexChars=e=>wn.test(e);F.isRegexChar=e=>e.length===1&&F.hasRegexChars(e);F.escapeRegex=e=>e.replace(Sn,"\\$1");F.toPosixSlashes=e=>e.replace(xn,"/");F.removeBackslashes=e=>e.replace(Cn,r=>r==="\\"?"":r);F.supportsLookbehinds=()=>{let e=process.version.slice(1).split(".").map(Number);return e.length===3&&e[0]>=9||e[0]===8&&e[1]>=10};F.isWindows=e=>e&&typeof e.windows=="boolean"?e.windows:bn===!0||En.sep==="\\";F.escapeLast=(e,r,t)=>{let n=e.lastIndexOf(r,t);return n===-1?e:e[n-1]==="\\"?F.escapeLast(e,r,n-1):`${e.slice(0,n)}\\${e.slice(n)}`};F.removePrefix=(e,r={})=>{let t=e;return t.startsWith("./")&&(t=t.slice(2),r.prefix="./"),t};F.wrapOutput=(e,r={},t={})=>{let n=t.contains?"":"^",s=t.contains?"":"$",i=`${n}(?:${e})${s}`;return r.negated===!0&&(i=`(?:^(?!${i}).*$)`),i}});var Yt=q((cs,Zt)=>{"use strict";var Kt=Re(),{CHAR_ASTERISK:We,CHAR_AT:vn,CHAR_BACKWARD_SLASH:ye,CHAR_COMMA:Hn,CHAR_DOT:je,CHAR_EXCLAMATION_MARK:Fe,CHAR_FORWARD_SLASH:Xt,CHAR_LEFT_CURLY_BRACE:Qe,CHAR_LEFT_PARENTHESES:Xe,CHAR_LEFT_SQUARE_BRACKET:$n,CHAR_PLUS:Tn,CHAR_QUESTION_MARK:Wt,CHAR_RIGHT_CURLY_BRACE:kn,CHAR_RIGHT_PARENTHESES:jt,CHAR_RIGHT_SQUARE_BRACKET:Ln}=me(),Ft=e=>e===Xt||e===ye,Qt=e=>{e.isPrefix!==!0&&(e.depth=e.isGlobstar?1/0:1)},On=(e,r)=>{let t=r||{},n=e.length-1,s=t.parts===!0||t.scanToEnd===!0,i=[],a=[],c=[],p=e,m=-1,h=0,R=0,f=!1,$=!1,_=!1,y=!1,E=!1,S=!1,T=!1,L=!1,z=!1,I=!1,re=0,K,g,v={value:"",depth:0,isGlob:!1},k=()=>m>=n,l=()=>p.charCodeAt(m+1),H=()=>(K=g,p.charCodeAt(++m));for(;m0&&(B=p.slice(0,h),p=p.slice(h),R-=h),w&&_===!0&&R>0?(w=p.slice(0,R),o=p.slice(R)):_===!0?(w="",o=p):w=p,w&&w!==""&&w!=="/"&&w!==p&&Ft(w.charCodeAt(w.length-1))&&(w=w.slice(0,-1)),t.unescape===!0&&(o&&(o=Kt.removeBackslashes(o)),w&&T===!0&&(w=Kt.removeBackslashes(w)));let u={prefix:B,input:e,start:h,base:w,glob:o,isBrace:f,isBracket:$,isGlob:_,isExtglob:y,isGlobstar:E,negated:L,negatedExtglob:z};if(t.tokens===!0&&(u.maxDepth=0,Ft(g)||a.push(v),u.tokens=a),t.parts===!0||t.tokens===!0){let M;for(let b=0;b{"use strict";var ke=me(),Z=Re(),{MAX_LENGTH:Le,POSIX_REGEX_SOURCE:Nn,REGEX_NON_SPECIAL_CHARS:In,REGEX_SPECIAL_CHARS_BACKREF:Bn,REPLACEMENTS:zt}=ke,Mn=(e,r)=>{if(typeof r.expandRange=="function")return r.expandRange(...e,r);e.sort();let t=`[${e.join("-")}]`;try{new RegExp(t)}catch{return e.map(s=>Z.escapeRegex(s)).join("..")}return t},de=(e,r)=>`Missing ${e}: "${r}" - use "\\\\${r}" to match literal characters`,Vt=(e,r)=>{if(typeof e!="string")throw new TypeError("Expected a string");e=zt[e]||e;let t={...r},n=typeof t.maxLength=="number"?Math.min(Le,t.maxLength):Le,s=e.length;if(s>n)throw new SyntaxError(`Input length: ${s}, exceeds maximum allowed length: ${n}`);let i={type:"bos",value:"",output:t.prepend||""},a=[i],c=t.capture?"":"?:",p=Z.isWindows(r),m=ke.globChars(p),h=ke.extglobChars(m),{DOT_LITERAL:R,PLUS_LITERAL:f,SLASH_LITERAL:$,ONE_CHAR:_,DOTS_SLASH:y,NO_DOT:E,NO_DOT_SLASH:S,NO_DOTS_SLASH:T,QMARK:L,QMARK_NO_DOT:z,STAR:I,START_ANCHOR:re}=m,K=A=>`(${c}(?:(?!${re}${A.dot?y:R}).)*?)`,g=t.dot?"":E,v=t.dot?L:z,k=t.bash===!0?K(t):I;t.capture&&(k=`(${k})`),typeof t.noext=="boolean"&&(t.noextglob=t.noext);let l={input:e,index:-1,start:0,dot:t.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:a};e=Z.removePrefix(e,l),s=e.length;let H=[],w=[],B=[],o=i,u,M=()=>l.index===s-1,b=l.peek=(A=1)=>e[l.index+A],V=l.advance=()=>e[++l.index]||"",J=()=>e.slice(l.index+1),Q=(A="",O=0)=>{l.consumed+=A,l.index+=O},Ee=A=>{l.output+=A.output!=null?A.output:A.value,Q(A.value)},Rr=()=>{let A=1;for(;b()==="!"&&(b(2)!=="("||b(3)==="?");)V(),l.start++,A++;return A%2===0?!1:(l.negated=!0,l.start++,!0)},be=A=>{l[A]++,B.push(A)},oe=A=>{l[A]--,B.pop()},C=A=>{if(o.type==="globstar"){let O=l.braces>0&&(A.type==="comma"||A.type==="brace"),d=A.extglob===!0||H.length&&(A.type==="pipe"||A.type==="paren");A.type!=="slash"&&A.type!=="paren"&&!O&&!d&&(l.output=l.output.slice(0,-o.output.length),o.type="star",o.value="*",o.output=k,l.output+=o.output)}if(H.length&&A.type!=="paren"&&(H[H.length-1].inner+=A.value),(A.value||A.output)&&Ee(A),o&&o.type==="text"&&A.type==="text"){o.value+=A.value,o.output=(o.output||"")+A.value;return}A.prev=o,a.push(A),o=A},xe=(A,O)=>{let d={...h[O],conditions:1,inner:""};d.prev=o,d.parens=l.parens,d.output=l.output;let x=(t.capture?"(":"")+d.open;be("parens"),C({type:A,value:O,output:l.output?"":_}),C({type:"paren",extglob:!0,value:V(),output:x}),H.push(d)},yr=A=>{let O=A.close+(t.capture?")":""),d;if(A.type==="negate"){let x=k;A.inner&&A.inner.length>1&&A.inner.includes("/")&&(x=K(t)),(x!==k||M()||/^\)+$/.test(J()))&&(O=A.close=`)$))${x}`),A.inner.includes("*")&&(d=J())&&/^\.[^\\/.]+$/.test(d)&&(O=A.close=`)${d})${x})`),A.prev.type==="bos"&&(l.negatedExtglob=!0)}C({type:"paren",extglob:!0,value:u,output:O}),oe("parens")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(e)){let A=!1,O=e.replace(Bn,(d,x,P,j,G,Ie)=>j==="\\"?(A=!0,d):j==="?"?x?x+j+(G?L.repeat(G.length):""):Ie===0?v+(G?L.repeat(G.length):""):L.repeat(P.length):j==="."?R.repeat(P.length):j==="*"?x?x+j+(G?k:""):k:x?d:`\\${d}`);return A===!0&&(t.unescape===!0?O=O.replace(/\\/g,""):O=O.replace(/\\+/g,d=>d.length%2===0?"\\\\":d?"\\":"")),O===e&&t.contains===!0?(l.output=e,l):(l.output=Z.wrapOutput(O,l,r),l)}for(;!M();){if(u=V(),u==="\0")continue;if(u==="\\"){let d=b();if(d==="/"&&t.bash!==!0||d==="."||d===";")continue;if(!d){u+="\\",C({type:"text",value:u});continue}let x=/^\\+/.exec(J()),P=0;if(x&&x[0].length>2&&(P=x[0].length,l.index+=P,P%2!==0&&(u+="\\")),t.unescape===!0?u=V():u+=V(),l.brackets===0){C({type:"text",value:u});continue}}if(l.brackets>0&&(u!=="]"||o.value==="["||o.value==="[^")){if(t.posix!==!1&&u===":"){let d=o.value.slice(1);if(d.includes("[")&&(o.posix=!0,d.includes(":"))){let x=o.value.lastIndexOf("["),P=o.value.slice(0,x),j=o.value.slice(x+2),G=Nn[j];if(G){o.value=P+G,l.backtrack=!0,V(),!i.output&&a.indexOf(o)===1&&(i.output=_);continue}}}(u==="["&&b()!==":"||u==="-"&&b()==="]")&&(u=`\\${u}`),u==="]"&&(o.value==="["||o.value==="[^")&&(u=`\\${u}`),t.posix===!0&&u==="!"&&o.value==="["&&(u="^"),o.value+=u,Ee({value:u});continue}if(l.quotes===1&&u!=='"'){u=Z.escapeRegex(u),o.value+=u,Ee({value:u});continue}if(u==='"'){l.quotes=l.quotes===1?0:1,t.keepQuotes===!0&&C({type:"text",value:u});continue}if(u==="("){be("parens"),C({type:"paren",value:u});continue}if(u===")"){if(l.parens===0&&t.strictBrackets===!0)throw new SyntaxError(de("opening","("));let d=H[H.length-1];if(d&&l.parens===d.parens+1){yr(H.pop());continue}C({type:"paren",value:u,output:l.parens?")":"\\)"}),oe("parens");continue}if(u==="["){if(t.nobracket===!0||!J().includes("]")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(de("closing","]"));u=`\\${u}`}else be("brackets");C({type:"bracket",value:u});continue}if(u==="]"){if(t.nobracket===!0||o&&o.type==="bracket"&&o.value.length===1){C({type:"text",value:u,output:`\\${u}`});continue}if(l.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(de("opening","["));C({type:"text",value:u,output:`\\${u}`});continue}oe("brackets");let d=o.value.slice(1);if(o.posix!==!0&&d[0]==="^"&&!d.includes("/")&&(u=`/${u}`),o.value+=u,Ee({value:u}),t.literalBrackets===!1||Z.hasRegexChars(d))continue;let x=Z.escapeRegex(o.value);if(l.output=l.output.slice(0,-o.value.length),t.literalBrackets===!0){l.output+=x,o.value=x;continue}o.value=`(${c}${x}|${o.value})`,l.output+=o.value;continue}if(u==="{"&&t.nobrace!==!0){be("braces");let d={type:"brace",value:u,output:"(",outputIndex:l.output.length,tokensIndex:l.tokens.length};w.push(d),C(d);continue}if(u==="}"){let d=w[w.length-1];if(t.nobrace===!0||!d){C({type:"text",value:u,output:u});continue}let x=")";if(d.dots===!0){let P=a.slice(),j=[];for(let G=P.length-1;G>=0&&(a.pop(),P[G].type!=="brace");G--)P[G].type!=="dots"&&j.unshift(P[G].value);x=Mn(j,t),l.backtrack=!0}if(d.comma!==!0&&d.dots!==!0){let P=l.output.slice(0,d.outputIndex),j=l.tokens.slice(d.tokensIndex);d.value=d.output="\\{",u=x="\\}",l.output=P;for(let G of j)l.output+=G.output||G.value}C({type:"brace",value:u,output:x}),oe("braces"),w.pop();continue}if(u==="|"){H.length>0&&H[H.length-1].conditions++,C({type:"text",value:u});continue}if(u===","){let d=u,x=w[w.length-1];x&&B[B.length-1]==="braces"&&(x.comma=!0,d="|"),C({type:"comma",value:u,output:d});continue}if(u==="/"){if(o.type==="dot"&&l.index===l.start+1){l.start=l.index+1,l.consumed="",l.output="",a.pop(),o=i;continue}C({type:"slash",value:u,output:$});continue}if(u==="."){if(l.braces>0&&o.type==="dot"){o.value==="."&&(o.output=R);let d=w[w.length-1];o.type="dots",o.output+=u,o.value+=u,d.dots=!0;continue}if(l.braces+l.parens===0&&o.type!=="bos"&&o.type!=="slash"){C({type:"text",value:u,output:R});continue}C({type:"dot",value:u,output:R});continue}if(u==="?"){if(!(o&&o.value==="(")&&t.noextglob!==!0&&b()==="("&&b(2)!=="?"){xe("qmark",u);continue}if(o&&o.type==="paren"){let x=b(),P=u;if(x==="<"&&!Z.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(o.value==="("&&!/[!=<:]/.test(x)||x==="<"&&!/<([!=]|\w+>)/.test(J()))&&(P=`\\${u}`),C({type:"text",value:u,output:P});continue}if(t.dot!==!0&&(o.type==="slash"||o.type==="bos")){C({type:"qmark",value:u,output:z});continue}C({type:"qmark",value:u,output:L});continue}if(u==="!"){if(t.noextglob!==!0&&b()==="("&&(b(2)!=="?"||!/[!=<:]/.test(b(3)))){xe("negate",u);continue}if(t.nonegate!==!0&&l.index===0){Rr();continue}}if(u==="+"){if(t.noextglob!==!0&&b()==="("&&b(2)!=="?"){xe("plus",u);continue}if(o&&o.value==="("||t.regex===!1){C({type:"plus",value:u,output:f});continue}if(o&&(o.type==="bracket"||o.type==="paren"||o.type==="brace")||l.parens>0){C({type:"plus",value:u});continue}C({type:"plus",value:f});continue}if(u==="@"){if(t.noextglob!==!0&&b()==="("&&b(2)!=="?"){C({type:"at",extglob:!0,value:u,output:""});continue}C({type:"text",value:u});continue}if(u!=="*"){(u==="$"||u==="^")&&(u=`\\${u}`);let d=In.exec(J());d&&(u+=d[0],l.index+=d[0].length),C({type:"text",value:u});continue}if(o&&(o.type==="globstar"||o.star===!0)){o.type="star",o.star=!0,o.value+=u,o.output=k,l.backtrack=!0,l.globstar=!0,Q(u);continue}let A=J();if(t.noextglob!==!0&&/^\([^?]/.test(A)){xe("star",u);continue}if(o.type==="star"){if(t.noglobstar===!0){Q(u);continue}let d=o.prev,x=d.prev,P=d.type==="slash"||d.type==="bos",j=x&&(x.type==="star"||x.type==="globstar");if(t.bash===!0&&(!P||A[0]&&A[0]!=="/")){C({type:"star",value:u,output:""});continue}let G=l.braces>0&&(d.type==="comma"||d.type==="brace"),Ie=H.length&&(d.type==="pipe"||d.type==="paren");if(!P&&d.type!=="paren"&&!G&&!Ie){C({type:"star",value:u,output:""});continue}for(;A.slice(0,3)==="/**";){let Ce=e[l.index+4];if(Ce&&Ce!=="/")break;A=A.slice(3),Q("/**",3)}if(d.type==="bos"&&M()){o.type="globstar",o.value+=u,o.output=K(t),l.output=o.output,l.globstar=!0,Q(u);continue}if(d.type==="slash"&&d.prev.type!=="bos"&&!j&&M()){l.output=l.output.slice(0,-(d.output+o.output).length),d.output=`(?:${d.output}`,o.type="globstar",o.output=K(t)+(t.strictSlashes?")":"|$)"),o.value+=u,l.globstar=!0,l.output+=d.output+o.output,Q(u);continue}if(d.type==="slash"&&d.prev.type!=="bos"&&A[0]==="/"){let Ce=A[1]!==void 0?"|$":"";l.output=l.output.slice(0,-(d.output+o.output).length),d.output=`(?:${d.output}`,o.type="globstar",o.output=`${K(t)}${$}|${$}${Ce})`,o.value+=u,l.output+=d.output+o.output,l.globstar=!0,Q(u+V()),C({type:"slash",value:"/",output:""});continue}if(d.type==="bos"&&A[0]==="/"){o.type="globstar",o.value+=u,o.output=`(?:^|${$}|${K(t)}${$})`,l.output=o.output,l.globstar=!0,Q(u+V()),C({type:"slash",value:"/",output:""});continue}l.output=l.output.slice(0,-o.output.length),o.type="globstar",o.output=K(t),o.value+=u,l.output+=o.output,l.globstar=!0,Q(u);continue}let O={type:"star",value:u,output:k};if(t.bash===!0){O.output=".*?",(o.type==="bos"||o.type==="slash")&&(O.output=g+O.output),C(O);continue}if(o&&(o.type==="bracket"||o.type==="paren")&&t.regex===!0){O.output=u,C(O);continue}(l.index===l.start||o.type==="slash"||o.type==="dot")&&(o.type==="dot"?(l.output+=S,o.output+=S):t.dot===!0?(l.output+=T,o.output+=T):(l.output+=g,o.output+=g),b()!=="*"&&(l.output+=_,o.output+=_)),C(O)}for(;l.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(de("closing","]"));l.output=Z.escapeLast(l.output,"["),oe("brackets")}for(;l.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(de("closing",")"));l.output=Z.escapeLast(l.output,"("),oe("parens")}for(;l.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(de("closing","}"));l.output=Z.escapeLast(l.output,"{"),oe("braces")}if(t.strictSlashes!==!0&&(o.type==="star"||o.type==="bracket")&&C({type:"maybe_slash",value:"",output:`${$}?`}),l.backtrack===!0){l.output="";for(let A of l.tokens)l.output+=A.output!=null?A.output:A.value,A.suffix&&(l.output+=A.suffix)}return l};Vt.fastpaths=(e,r)=>{let t={...r},n=typeof t.maxLength=="number"?Math.min(Le,t.maxLength):Le,s=e.length;if(s>n)throw new SyntaxError(`Input length: ${s}, exceeds maximum allowed length: ${n}`);e=zt[e]||e;let i=Z.isWindows(r),{DOT_LITERAL:a,SLASH_LITERAL:c,ONE_CHAR:p,DOTS_SLASH:m,NO_DOT:h,NO_DOTS:R,NO_DOTS_SLASH:f,STAR:$,START_ANCHOR:_}=ke.globChars(i),y=t.dot?R:h,E=t.dot?f:h,S=t.capture?"":"?:",T={negated:!1,prefix:""},L=t.bash===!0?".*?":$;t.capture&&(L=`(${L})`);let z=g=>g.noglobstar===!0?L:`(${S}(?:(?!${_}${g.dot?m:a}).)*?)`,I=g=>{switch(g){case"*":return`${y}${p}${L}`;case".*":return`${a}${p}${L}`;case"*.*":return`${y}${L}${a}${p}${L}`;case"*/*":return`${y}${L}${c}${p}${E}${L}`;case"**":return y+z(t);case"**/*":return`(?:${y}${z(t)}${c})?${E}${p}${L}`;case"**/*.*":return`(?:${y}${z(t)}${c})?${E}${L}${a}${p}${L}`;case"**/.*":return`(?:${y}${z(t)}${c})?${a}${p}${L}`;default:{let v=/^(.*?)\.(\w+)$/.exec(g);if(!v)return;let k=I(v[1]);return k?k+a+v[2]:void 0}}},re=Z.removePrefix(e,T),K=I(re);return K&&t.strictSlashes!==!0&&(K+=`${c}?`),K};Jt.exports=Vt});var rr=q((fs,tr)=>{"use strict";var Pn=W("path"),Dn=Yt(),Ze=er(),Ye=Re(),Un=me(),Gn=e=>e&&typeof e=="object"&&!Array.isArray(e),D=(e,r,t=!1)=>{if(Array.isArray(e)){let h=e.map(f=>D(f,r,t));return f=>{for(let $ of h){let _=$(f);if(_)return _}return!1}}let n=Gn(e)&&e.tokens&&e.input;if(e===""||typeof e!="string"&&!n)throw new TypeError("Expected pattern to be a non-empty string");let s=r||{},i=Ye.isWindows(r),a=n?D.compileRe(e,r):D.makeRe(e,r,!1,!0),c=a.state;delete a.state;let p=()=>!1;if(s.ignore){let h={...r,ignore:null,onMatch:null,onResult:null};p=D(s.ignore,h,t)}let m=(h,R=!1)=>{let{isMatch:f,match:$,output:_}=D.test(h,a,r,{glob:e,posix:i}),y={glob:e,state:c,regex:a,posix:i,input:h,output:_,match:$,isMatch:f};return typeof s.onResult=="function"&&s.onResult(y),f===!1?(y.isMatch=!1,R?y:!1):p(h)?(typeof s.onIgnore=="function"&&s.onIgnore(y),y.isMatch=!1,R?y:!1):(typeof s.onMatch=="function"&&s.onMatch(y),R?y:!0)};return t&&(m.state=c),m};D.test=(e,r,t,{glob:n,posix:s}={})=>{if(typeof e!="string")throw new TypeError("Expected input to be a string");if(e==="")return{isMatch:!1,output:""};let i=t||{},a=i.format||(s?Ye.toPosixSlashes:null),c=e===n,p=c&&a?a(e):e;return c===!1&&(p=a?a(e):e,c=p===n),(c===!1||i.capture===!0)&&(i.matchBase===!0||i.basename===!0?c=D.matchBase(e,r,t,s):c=r.exec(p)),{isMatch:Boolean(c),match:c,output:p}};D.matchBase=(e,r,t,n=Ye.isWindows(t))=>(r instanceof RegExp?r:D.makeRe(r,t)).test(Pn.basename(e));D.isMatch=(e,r,t)=>D(r,t)(e);D.parse=(e,r)=>Array.isArray(e)?e.map(t=>D.parse(t,r)):Ze(e,{...r,fastpaths:!1});D.scan=(e,r)=>Dn(e,r);D.compileRe=(e,r,t=!1,n=!1)=>{if(t===!0)return e.output;let s=r||{},i=s.contains?"":"^",a=s.contains?"":"$",c=`${i}(?:${e.output})${a}`;e&&e.negated===!0&&(c=`^(?!${c}).*$`);let p=D.toRegex(c,r);return n===!0&&(p.state=e),p};D.makeRe=(e,r={},t=!1,n=!1)=>{if(!e||typeof e!="string")throw new TypeError("Expected a non-empty string");let s={negated:!1,fastpaths:!0};return r.fastpaths!==!1&&(e[0]==="."||e[0]==="*")&&(s.output=Ze.fastpaths(e,r)),s.output||(s=Ze(e,r)),D.compileRe(s,r,t,n)};D.toRegex=(e,r)=>{try{let t=r||{};return new RegExp(e,t.flags||(t.nocase?"i":""))}catch(t){if(r&&r.debug===!0)throw t;return/$^/}};D.constants=Un;tr.exports=D});var sr=q((ps,nr)=>{"use strict";nr.exports=rr()});var cr=q((hs,ur)=>{"use strict";var ir=W("util"),or=Mt(),ae=sr(),ze=Re(),ar=e=>e===""||e==="./",N=(e,r,t)=>{r=[].concat(r),e=[].concat(e);let n=new Set,s=new Set,i=new Set,a=0,c=h=>{i.add(h.output),t&&t.onResult&&t.onResult(h)};for(let h=0;h!n.has(h));if(t&&m.length===0){if(t.failglob===!0)throw new Error(`No matches found for "${r.join(", ")}"`);if(t.nonull===!0||t.nullglob===!0)return t.unescape?r.map(h=>h.replace(/\\/g,"")):r}return m};N.match=N;N.matcher=(e,r)=>ae(e,r);N.isMatch=(e,r,t)=>ae(r,t)(e);N.any=N.isMatch;N.not=(e,r,t={})=>{r=[].concat(r).map(String);let n=new Set,s=[],a=N(e,r,{...t,onResult:c=>{t.onResult&&t.onResult(c),s.push(c.output)}});for(let c of s)a.includes(c)||n.add(c);return[...n]};N.contains=(e,r,t)=>{if(typeof e!="string")throw new TypeError(`Expected a string: "${ir.inspect(e)}"`);if(Array.isArray(r))return r.some(n=>N.contains(e,n,t));if(typeof r=="string"){if(ar(e)||ar(r))return!1;if(e.includes(r)||e.startsWith("./")&&e.slice(2).includes(r))return!0}return N.isMatch(e,r,{...t,contains:!0})};N.matchKeys=(e,r,t)=>{if(!ze.isObject(e))throw new TypeError("Expected the first argument to be an object");let n=N(Object.keys(e),r,t),s={};for(let i of n)s[i]=e[i];return s};N.some=(e,r,t)=>{let n=[].concat(e);for(let s of[].concat(r)){let i=ae(String(s),t);if(n.some(a=>i(a)))return!0}return!1};N.every=(e,r,t)=>{let n=[].concat(e);for(let s of[].concat(r)){let i=ae(String(s),t);if(!n.every(a=>i(a)))return!1}return!0};N.all=(e,r,t)=>{if(typeof e!="string")throw new TypeError(`Expected a string: "${ir.inspect(e)}"`);return[].concat(r).every(n=>ae(n,t)(e))};N.capture=(e,r,t)=>{let n=ze.isWindows(t),i=ae.makeRe(String(e),{...t,capture:!0}).exec(n?ze.toPosixSlashes(r):r);if(i)return i.slice(1).map(a=>a===void 0?"":a)};N.makeRe=(...e)=>ae.makeRe(...e);N.scan=(...e)=>ae.scan(...e);N.parse=(e,r)=>{let t=[];for(let n of[].concat(e||[]))for(let s of or(String(n),r))t.push(ae.parse(s,r));return t};N.braces=(e,r)=>{if(typeof e!="string")throw new TypeError("Expected a string");return r&&r.nobrace===!0||!/\{.*\}/.test(e)?[e]:or(e,r)};N.braceExpand=(e,r)=>{if(typeof e!="string")throw new TypeError("Expected a string");return N.braces(e,{...r,expand:!0})};ur.exports=N});var fr=q((ds,lr)=>{"use strict";lr.exports=(e,...r)=>new Promise(t=>{t(e(...r))})});var hr=q((gs,Ve)=>{"use strict";var qn=fr(),pr=e=>{if(e<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let r=[],t=0,n=()=>{t--,r.length>0&&r.shift()()},s=(c,p,...m)=>{t++;let h=qn(c,...m);p(h),h.then(n,n)},i=(c,p,...m)=>{tnew Promise(m=>i(c,m,...p));return Object.defineProperties(a,{activeCount:{get:()=>t},pendingCount:{get:()=>r.length}}),a};Ve.exports=pr;Ve.exports.default=pr});var Fn={};wr(Fn,{default:()=>jn});var Se=W("@yarnpkg/cli"),ne=W("@yarnpkg/core"),et=W("@yarnpkg/core"),ue=W("clipanion"),ce=class extends Se.BaseCommand{constructor(){super(...arguments);this.json=ue.Option.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=ue.Option.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=ue.Option.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=ue.Option.Rest()}async execute(){let t=await ne.Configuration.find(this.context.cwd,this.context.plugins),{project:n,workspace:s}=await ne.Project.find(t,this.context.cwd),i=await ne.Cache.find(t);await n.restoreInstallState({restoreResolutions:!1});let a;if(this.all)a=new Set(n.workspaces);else if(this.workspaces.length===0){if(!s)throw new Se.WorkspaceRequiredError(n.cwd,this.context.cwd);a=new Set([s])}else a=new Set(this.workspaces.map(p=>n.getWorkspaceByIdent(et.structUtils.parseIdent(p))));for(let p of a)for(let m of this.production?["dependencies"]:ne.Manifest.hardDependencies)for(let h of p.manifest.getForScope(m).values()){let R=n.tryWorkspaceByDescriptor(h);R!==null&&a.add(R)}for(let p of n.workspaces)a.has(p)?this.production&&p.manifest.devDependencies.clear():(p.manifest.installConfig=p.manifest.installConfig||{},p.manifest.installConfig.selfReferences=!1,p.manifest.dependencies.clear(),p.manifest.devDependencies.clear(),p.manifest.peerDependencies.clear(),p.manifest.scripts.clear());return(await ne.StreamReport.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!0},async p=>{await n.install({cache:i,report:p,persistProject:!1})})).exitCode()}};ce.paths=[["workspaces","focus"]],ce.usage=ue.Command.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "});var Ne=W("@yarnpkg/cli"),ge=W("@yarnpkg/core"),_e=W("@yarnpkg/core"),Y=W("@yarnpkg/core"),gr=W("@yarnpkg/plugin-git"),U=W("clipanion"),Oe=Be(cr()),Ar=W("os"),mr=Be(hr()),te=Be(W("typanion")),pe=class extends Ne.BaseCommand{constructor(){super(...arguments);this.recursive=U.Option.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.from=U.Option.Array("--from",[],{description:"An array of glob pattern idents from which to base any recursion"});this.all=U.Option.Boolean("-A,--all",!1,{description:"Run the command on all workspaces of a project"});this.verbose=U.Option.Boolean("-v,--verbose",!1,{description:"Prefix each output line with the name of the originating workspace"});this.parallel=U.Option.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=U.Option.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=U.Option.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:te.isOneOf([te.isEnum(["unlimited"]),te.applyCascade(te.isNumber(),[te.isInteger(),te.isAtLeast(1)])])});this.topological=U.Option.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=U.Option.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=U.Option.Array("--include",[],{description:"An array of glob pattern idents; only matching workspaces will be traversed"});this.exclude=U.Option.Array("--exclude",[],{description:"An array of glob pattern idents; matching workspaces won't be traversed"});this.publicOnly=U.Option.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=U.Option.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.commandName=U.Option.String();this.args=U.Option.Proxy()}async execute(){let t=await ge.Configuration.find(this.context.cwd,this.context.plugins),{project:n,workspace:s}=await ge.Project.find(t,this.context.cwd);if(!this.all&&!s)throw new Ne.WorkspaceRequiredError(n.cwd,this.context.cwd);await n.restoreInstallState();let i=this.cli.process([this.commandName,...this.args]),a=i.path.length===1&&i.path[0]==="run"&&typeof i.scriptName<"u"?i.scriptName:null;if(i.path.length===0)throw new U.UsageError("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let c=this.all?n.topLevelWorkspace:s,p=this.since?Array.from(await gr.gitUtils.fetchChangedWorkspaces({ref:this.since,project:n})):[c,...this.from.length>0?c.getRecursiveWorkspaceChildren():[]],m=g=>Oe.default.isMatch(Y.structUtils.stringifyIdent(g.locator),this.from),h=this.from.length>0?p.filter(m):p,R=new Set([...h,...h.map(g=>[...this.recursive?this.since?g.getRecursiveWorkspaceDependents():g.getRecursiveWorkspaceDependencies():g.getRecursiveWorkspaceChildren()]).flat()]),f=[],$=!1;if(a!=null&&a.includes(":")){for(let g of n.workspaces)if(g.manifest.scripts.has(a)&&($=!$,$===!1))break}for(let g of R)a&&!g.manifest.scripts.has(a)&&!$&&!(await ge.scriptUtils.getWorkspaceAccessibleBinaries(g)).has(a)||a===process.env.npm_lifecycle_event&&g.cwd===s.cwd||this.include.length>0&&!Oe.default.isMatch(Y.structUtils.stringifyIdent(g.locator),this.include)||this.exclude.length>0&&Oe.default.isMatch(Y.structUtils.stringifyIdent(g.locator),this.exclude)||this.publicOnly&&g.manifest.private===!0||f.push(g);let _=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.max(1,(0,Ar.cpus)().length/2):1,y=_===1?!1:this.parallel,E=y?this.interlaced:!0,S=(0,mr.default)(_),T=new Map,L=new Set,z=0,I=null,re=!1,K=await _e.StreamReport.start({configuration:t,stdout:this.context.stdout},async g=>{let v=async(k,{commandIndex:l})=>{if(re)return-1;!y&&this.verbose&&l>1&&g.reportSeparator();let H=Kn(k,{configuration:t,verbose:this.verbose,commandIndex:l}),[w,B]=dr(g,{prefix:H,interlaced:E}),[o,u]=dr(g,{prefix:H,interlaced:E});try{this.verbose&&g.reportInfo(null,`${H} Process started`);let M=Date.now(),b=await this.cli.run([this.commandName,...this.args],{cwd:k.cwd,stdout:w,stderr:o})||0;w.end(),o.end(),await B,await u;let V=Date.now();if(this.verbose){let J=t.get("enableTimers")?`, completed in ${Y.formatUtils.pretty(t,V-M,Y.formatUtils.Type.DURATION)}`:"";g.reportInfo(null,`${H} Process exited (exit code ${b})${J}`)}return b===130&&(re=!0,I=b),b}catch(M){throw w.end(),o.end(),await B,await u,M}};for(let k of f)T.set(k.anchoredLocator.locatorHash,k);for(;T.size>0&&!g.hasErrors();){let k=[];for(let[w,B]of T){if(L.has(B.anchoredDescriptor.descriptorHash))continue;let o=!0;if(this.topological||this.topologicalDev){let u=this.topologicalDev?new Map([...B.manifest.dependencies,...B.manifest.devDependencies]):B.manifest.dependencies;for(let M of u.values()){let b=n.tryWorkspaceByDescriptor(M);if(o=b===null||!T.has(b.anchoredLocator.locatorHash),!o)break}}if(!!o&&(L.add(B.anchoredDescriptor.descriptorHash),k.push(S(async()=>{let u=await v(B,{commandIndex:++z});return T.delete(w),L.delete(B.anchoredDescriptor.descriptorHash),u})),!y))break}if(k.length===0){let w=Array.from(T.values()).map(B=>Y.structUtils.prettyLocator(t,B.anchoredLocator)).join(", ");g.reportError(_e.MessageName.CYCLIC_DEPENDENCIES,`Dependency cycle detected (${w})`);return}let H=(await Promise.all(k)).find(w=>w!==0);I===null&&(I=typeof H<"u"?1:I),(this.topological||this.topologicalDev)&&typeof H<"u"&&g.reportError(_e.MessageName.UNNAMED,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return I!==null?I:K.exitCode()}};pe.paths=[["workspaces","foreach"]],pe.usage=U.Command.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project. By default yarn runs the command only on current and all its descendant workspaces.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n Adding the `-v,--verbose` flag will cause Yarn to print more information; in particular the name of the workspace that generated the output will be printed at the front of each line.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish current and all descendant packages","yarn workspaces foreach npm publish --tolerate-republish"],["Run build script on current and all descendant packages","yarn workspaces foreach run build"],["Run build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -pt run build"],["Run build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -ptR --from '{workspace-a,workspace-b}' run build"]]});function dr(e,{prefix:r,interlaced:t}){let n=e.createStreamReporter(r),s=new Y.miscUtils.DefaultStream;s.pipe(n,{end:!1}),s.on("finish",()=>{n.end()});let i=new Promise(c=>{n.on("finish",()=>{c(s.active)})});if(t)return[s,i];let a=new Y.miscUtils.BufferStream;return a.pipe(s,{end:!1}),a.on("finish",()=>{s.end()}),[a,i]}function Kn(e,{configuration:r,commandIndex:t,verbose:n}){if(!n)return null;let i=`[${Y.structUtils.stringifyIdent(e.locator)}]:`,a=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],c=a[t%a.length];return Y.formatUtils.pretty(r,i,c)}var Wn={commands:[ce,pe]},jn=Wn;return Sr(Fn);})(); -/*! - * fill-range - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Licensed under the MIT License. - */ -/*! - * is-number - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * to-regex-range - * - * Copyright (c) 2015-present, Jon Schlinkert. - * Released under the MIT License. - */ -return plugin; -} -}; diff --git a/.yarn/releases/yarn-4.9.2.cjs b/.yarn/releases/yarn-4.9.2.cjs deleted file mode 100755 index 28f25b14b..000000000 --- a/.yarn/releases/yarn-4.9.2.cjs +++ /dev/null @@ -1,942 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -//prettier-ignore -(()=>{var UVe=Object.create;var E_=Object.defineProperty;var HVe=Object.getOwnPropertyDescriptor;var jVe=Object.getOwnPropertyNames;var qVe=Object.getPrototypeOf,GVe=Object.prototype.hasOwnProperty;var Ie=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var Ct=(t,e)=>()=>(t&&(e=t(t=0)),e);var L=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Vt=(t,e)=>{for(var r in e)E_(t,r,{get:e[r],enumerable:!0})},WVe=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of jVe(e))!GVe.call(t,a)&&a!==r&&E_(t,a,{get:()=>e[a],enumerable:!(s=HVe(e,a))||s.enumerable});return t};var et=(t,e,r)=>(r=t!=null?UVe(qVe(t)):{},WVe(e||!t||!t.__esModule?E_(r,"default",{value:t,enumerable:!0}):r,t));var fi={};Vt(fi,{SAFE_TIME:()=>d$,S_IFDIR:()=>rx,S_IFLNK:()=>nx,S_IFMT:()=>_f,S_IFREG:()=>N2});var _f,rx,N2,nx,d$,m$=Ct(()=>{_f=61440,rx=16384,N2=32768,nx=40960,d$=456789e3});var or={};Vt(or,{EBADF:()=>Uo,EBUSY:()=>YVe,EEXIST:()=>XVe,EINVAL:()=>KVe,EISDIR:()=>ZVe,ENOENT:()=>JVe,ENOSYS:()=>VVe,ENOTDIR:()=>zVe,ENOTEMPTY:()=>e7e,EOPNOTSUPP:()=>t7e,EROFS:()=>$Ve,ERR_DIR_CLOSED:()=>I_});function wc(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function YVe(t){return wc("EBUSY",t)}function VVe(t,e){return wc("ENOSYS",`${t}, ${e}`)}function KVe(t){return wc("EINVAL",`invalid argument, ${t}`)}function Uo(t){return wc("EBADF",`bad file descriptor, ${t}`)}function JVe(t){return wc("ENOENT",`no such file or directory, ${t}`)}function zVe(t){return wc("ENOTDIR",`not a directory, ${t}`)}function ZVe(t){return wc("EISDIR",`illegal operation on a directory, ${t}`)}function XVe(t){return wc("EEXIST",`file already exists, ${t}`)}function $Ve(t){return wc("EROFS",`read-only filesystem, ${t}`)}function e7e(t){return wc("ENOTEMPTY",`directory not empty, ${t}`)}function t7e(t){return wc("EOPNOTSUPP",`operation not supported, ${t}`)}function I_(){return wc("ERR_DIR_CLOSED","Directory handle was closed")}var ix=Ct(()=>{});var el={};Vt(el,{BigIntStatsEntry:()=>rE,DEFAULT_MODE:()=>B_,DirEntry:()=>C_,StatEntry:()=>tE,areStatsEqual:()=>v_,clearStats:()=>sx,convertToBigIntStats:()=>n7e,makeDefaultStats:()=>y$,makeEmptyStats:()=>r7e});function y$(){return new tE}function r7e(){return sx(y$())}function sx(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):w_.types.isDate(r)&&(t[e]=new Date(0))}return t}function n7e(t){let e=new rE;for(let r in t)if(Object.hasOwn(t,r)){let s=t[r];typeof s=="number"?e[r]=BigInt(s):w_.types.isDate(s)&&(e[r]=new Date(s))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function v_(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,s=e;return!(r.atimeNs!==s.atimeNs||r.mtimeNs!==s.mtimeNs||r.ctimeNs!==s.ctimeNs||r.birthtimeNs!==s.birthtimeNs)}var w_,B_,C_,tE,rE,S_=Ct(()=>{w_=et(Ie("util")),B_=33188,C_=class{constructor(){this.name="";this.path="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},tE=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=B_;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},rE=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(B_);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}}});function l7e(t){let e,r;if(e=t.match(o7e))t=e[1];else if(r=t.match(a7e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function c7e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(i7e))?t=`/${e[1]}`:(r=t.match(s7e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function ox(t,e){return t===ue?I$(e):D_(e)}var O2,vt,Er,ue,K,E$,i7e,s7e,o7e,a7e,D_,I$,tl=Ct(()=>{O2=et(Ie("path")),vt={root:"/",dot:".",parent:".."},Er={home:"~",nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",pnpData:".pnp.data.json",pnpEsmLoader:".pnp.loader.mjs",rc:".yarnrc.yml",env:".env"},ue=Object.create(O2.default),K=Object.create(O2.default.posix);ue.cwd=()=>process.cwd();K.cwd=process.platform==="win32"?()=>D_(process.cwd()):process.cwd;process.platform==="win32"&&(K.resolve=(...t)=>t.length>0&&K.isAbsolute(t[0])?O2.default.posix.resolve(...t):O2.default.posix.resolve(K.cwd(),...t));E$=function(t,e,r){return e=t.normalize(e),r=t.normalize(r),e===r?".":(e.endsWith(t.sep)||(e=e+t.sep),r.startsWith(e)?r.slice(e.length):null)};ue.contains=(t,e)=>E$(ue,t,e);K.contains=(t,e)=>E$(K,t,e);i7e=/^([a-zA-Z]:.*)$/,s7e=/^\/\/(\.\/)?(.*)$/,o7e=/^\/([a-zA-Z]:.*)$/,a7e=/^\/unc\/(\.dot\/)?(.*)$/;D_=process.platform==="win32"?c7e:t=>t,I$=process.platform==="win32"?l7e:t=>t;ue.fromPortablePath=I$;ue.toPortablePath=D_});async function ax(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let s=[];for(let a of r)for(let n of r)s.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(s),e.indexPath}async function C$(t,e,r,s,a){let n=t.pathUtils.normalize(e),c=r.pathUtils.normalize(s),f=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:gd,mtime:gd}:await r.lstatPromise(c);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await b_(f,p,t,n,r,c,{...a,didParentExist:!0});for(let C of f)await C();await Promise.all(p.map(C=>C()))}async function b_(t,e,r,s,a,n,c){let f=c.didParentExist?await w$(r,s):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=c.stableTime?{atime:gd,mtime:gd}:p,C;switch(!0){case p.isDirectory():C=await f7e(t,e,r,s,f,a,n,p,c);break;case p.isFile():C=await h7e(t,e,r,s,f,a,n,p,c);break;case p.isSymbolicLink():C=await g7e(t,e,r,s,f,a,n,p,c);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(c.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((C||f?.mtime?.getTime()!==E.getTime()||f?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(s,h,E)),C=!0),(f===null||(f.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(s,p.mode&511)),C=!0)),C}async function w$(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function f7e(t,e,r,s,a,n,c,f,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(s)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(s,{mode:f.mode})}catch(S){if(S.code!=="EEXIST")throw S}}),h=!0);let E=await n.readdirPromise(c),C=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let S of E.sort())await b_(t,e,r,r.pathUtils.join(s,S),n,n.pathUtils.join(c,S),C)&&(h=!0);else(await Promise.all(E.map(async P=>{await b_(t,e,r,r.pathUtils.join(s,P),n,n.pathUtils.join(c,P),C)}))).some(P=>P)&&(h=!0);return h}async function A7e(t,e,r,s,a,n,c,f,p,h){let E=await n.checksumFilePromise(c,{algorithm:"sha1"}),C=420,S=f.mode&511,P=`${E}${S!==C?S.toString(8):""}`,I=r.pathUtils.join(h.indexPath,E.slice(0,2),`${P}.dat`),R;(ce=>(ce[ce.Lock=0]="Lock",ce[ce.Rename=1]="Rename"))(R||={});let N=1,U=await w$(r,I);if(a){let ie=U&&a.dev===U.dev&&a.ino===U.ino,Ae=U?.mtimeMs!==u7e;if(ie&&Ae&&h.autoRepair&&(N=0,U=null),!ie)if(p.overwrite)t.push(async()=>r.removePromise(s)),a=null;else return!1}let W=!U&&N===1?`${I}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,te=!1;return t.push(async()=>{if(!U&&(N===0&&await r.lockPromise(I,async()=>{let ie=await n.readFilePromise(c);await r.writeFilePromise(I,ie)}),N===1&&W)){let ie=await n.readFilePromise(c);await r.writeFilePromise(W,ie);try{await r.linkPromise(W,I)}catch(Ae){if(Ae.code==="EEXIST")te=!0,await r.unlinkPromise(W);else throw Ae}}a||await r.linkPromise(I,s)}),e.push(async()=>{U||(await r.lutimesPromise(I,gd,gd),S!==C&&await r.chmodPromise(I,S)),W&&!te&&await r.unlinkPromise(W)}),!1}async function p7e(t,e,r,s,a,n,c,f,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(s)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(c);await r.writeFilePromise(s,h)}),!0}async function h7e(t,e,r,s,a,n,c,f,p){return p.linkStrategy?.type==="HardlinkFromIndex"?A7e(t,e,r,s,a,n,c,f,p,p.linkStrategy):p7e(t,e,r,s,a,n,c,f,p)}async function g7e(t,e,r,s,a,n,c,f,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(s)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(ox(r.pathUtils,await n.readlinkPromise(c)),s)}),!0}var gd,u7e,P_=Ct(()=>{tl();gd=new Date(456789e3*1e3),u7e=gd.getTime()});function lx(t,e,r,s){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let c=t.pathUtils.join(e,n);return Object.assign(t.statSync(c),{name:n,path:void 0})};return new L2(e,a,s)}var L2,B$=Ct(()=>{ix();L2=class{constructor(e,r,s={}){this.path=e;this.nextDirent=r;this.opts=s;this.closed=!1}throwIfClosed(){if(this.closed)throw I_()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let r=this.readSync();return typeof e<"u"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}}});function v$(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var S$,cx,D$=Ct(()=>{S$=Ie("events");S_();cx=class t extends S$.EventEmitter{constructor(r,s,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=s,this.bigint=a,this.lastStats=this.stat()}static create(r,s,a){let n=new t(r,s,a);return n.start(),n}start(){v$(this.status,"ready"),this.status="running",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit("change",this.lastStats,this.lastStats)},3)}stop(){v$(this.status,"running"),this.status="stopped",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit("stop")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let r=this.bigint?new rE:new tE;return sx(r)}}makeInterval(r){let s=setInterval(()=>{let a=this.stat(),n=this.lastStats;v_(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?s:s.unref()}registerChangeListener(r,s){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(s))}unregisterChangeListener(r){this.removeListener("change",r);let s=this.changeListeners.get(r);typeof s<"u"&&clearInterval(s),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function nE(t,e,r,s){let a,n,c,f;switch(typeof r){case"function":a=!1,n=!0,c=5007,f=r;break;default:({bigint:a=!1,persistent:n=!0,interval:c=5007}=r),f=s;break}let p=ux.get(t);typeof p>"u"&&ux.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=cx.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(f,{persistent:n,interval:c}),h}function dd(t,e,r){let s=ux.get(t);if(typeof s>"u")return;let a=s.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),s.delete(e)))}function md(t){let e=ux.get(t);if(!(typeof e>"u"))for(let r of e.keys())dd(t,r)}var ux,x_=Ct(()=>{D$();ux=new WeakMap});function d7e(t){let e=t.match(/\r?\n/g);if(e===null)return P$.EOL;let r=e.filter(a=>a===`\r -`).length,s=e.length-r;return r>s?`\r -`:` -`}function yd(t,e){return e.replace(/\r?\n/g,d7e(t))}var b$,P$,Ep,Uf,Ed=Ct(()=>{b$=Ie("crypto"),P$=Ie("os");P_();tl();Ep=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let s=[e];for(;s.length>0;){let a=s.shift();if((await this.lstatPromise(a)).isDirectory()){let c=await this.readdirPromise(a);if(r)for(let f of c.sort())s.push(this.pathUtils.join(a,f));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let s=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),c=(0,b$.createHash)(r),f=0;for(;(f=await this.readPromise(s,n,0,65536))!==0;)c.update(f===65536?n:n.slice(0,f));return c.digest("hex")}finally{await this.closePromise(s)}}async removePromise(e,{recursive:r=!0,maxRetries:s=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(c=>this.removePromise(this.pathUtils.resolve(e,c))))}for(let n=0;n<=s;n++)try{await this.rmdirPromise(e);break}catch(c){if(c.code!=="EBUSY"&&c.code!=="ENOTEMPTY")throw c;nsetTimeout(f,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let s;try{s=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(s.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:s}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let c=2;c<=a.length;++c){let f=a.slice(0,c).join(this.pathUtils.sep);if(!this.existsSync(f)){try{await this.mkdirPromise(f)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=f,r!=null&&await this.chmodPromise(f,r),s!=null)await this.utimesPromise(f,s[0],s[1]);else{let p=await this.statPromise(this.pathUtils.dirname(f));await this.utimesPromise(f,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:s}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let c=2;c<=a.length;++c){let f=a.slice(0,c).join(this.pathUtils.sep);if(!this.existsSync(f)){try{this.mkdirSync(f)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=f,r!=null&&this.chmodSync(f,r),s!=null)this.utimesSync(f,s[0],s[1]);else{let p=this.statSync(this.pathUtils.dirname(f));this.utimesSync(f,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:s=this,overwrite:a=!0,stableSort:n=!1,stableTime:c=!1,linkStrategy:f=null}={}){return await C$(this,e,s,r,{overwrite:a,stableSort:n,stableTime:c,linkStrategy:f})}copySync(e,r,{baseFs:s=this,overwrite:a=!0}={}){let n=s.lstatSync(r),c=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=s.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),s.pathUtils.join(r,h),{baseFs:s,overwrite:a})}else if(n.isFile()){if(!c||a){c&&this.removeSync(e);let p=s.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!c||a){c&&this.removeSync(e);let p=s.readlinkSync(r);this.symlinkSync(ox(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let f=n.mode&511;this.chmodSync(e,f)}async changeFilePromise(e,r,s={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,s):this.changeFileTextPromise(e,r,s)}async changeFileBufferPromise(e,r,{mode:s}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:s})}async changeFileTextPromise(e,r,{automaticNewlines:s,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let c=s?yd(n,r):r;n!==c&&await this.writeFilePromise(e,c,{mode:a})}changeFileSync(e,r,s={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,s):this.changeFileTextSync(e,r,s)}changeFileBufferSync(e,r,{mode:s}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:s})}changeFileTextSync(e,r,{automaticNewlines:s=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let c=s?yd(n,r):r;n!==c&&this.writeFileSync(e,c,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(s){if(s.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw s}}moveSync(e,r){try{this.renameSync(e,r)}catch(s){if(s.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw s}}async lockPromise(e,r){let s=`${e}.flock`,a=1e3/60,n=Date.now(),c=null,f=async()=>{let p;try{[p]=await this.readJsonPromise(s)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;c===null;)try{c=await this.openPromise(s,"wx")}catch(p){if(p.code==="EEXIST"){if(!await f())try{await this.unlinkPromise(s);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${s})`)}else throw p}await this.writePromise(c,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(c),await this.unlinkPromise(s)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(s){throw s.message+=` (in ${e})`,s}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(s){throw s.message+=` (in ${e})`,s}}async writeJsonPromise(e,r,{compact:s=!1}={}){let a=s?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} -`)}writeJsonSync(e,r,{compact:s=!1}={}){let a=s?0:2;return this.writeFileSync(e,`${JSON.stringify(r,null,a)} -`)}async preserveTimePromise(e,r){let s=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,s.atime,s.mtime)}async preserveTimeSync(e,r){let s=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,s.atime,s.mtime)}},Uf=class extends Ep{constructor(){super(K)}}});var js,Ip=Ct(()=>{Ed();js=class extends Ep{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,s){return this.baseFs.openPromise(this.mapToBase(e),r,s)}openSync(e,r,s){return this.baseFs.openSync(this.mapToBase(e),r,s)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,s,a,n){return await this.baseFs.readPromise(e,r,s,a,n)}readSync(e,r,s,a,n){return this.baseFs.readSync(e,r,s,a,n)}async writePromise(e,r,s,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,s):await this.baseFs.writePromise(e,r,s,a,n)}writeSync(e,r,s,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,s):this.baseFs.writeSync(e,r,s,a,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async fchownPromise(e,r,s){return this.baseFs.fchownPromise(e,r,s)}fchownSync(e,r,s){return this.baseFs.fchownSync(e,r,s)}async chownPromise(e,r,s){return this.baseFs.chownPromise(this.mapToBase(e),r,s)}chownSync(e,r,s){return this.baseFs.chownSync(this.mapToBase(e),r,s)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,s=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),s)}copyFileSync(e,r,s=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),s)}async appendFilePromise(e,r,s){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,s)}appendFileSync(e,r,s){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,s)}async writeFilePromise(e,r,s){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,s)}writeFileSync(e,r,s){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,s)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,s){return this.baseFs.utimesPromise(this.mapToBase(e),r,s)}utimesSync(e,r,s){return this.baseFs.utimesSync(this.mapToBase(e),r,s)}async lutimesPromise(e,r,s){return this.baseFs.lutimesPromise(this.mapToBase(e),r,s)}lutimesSync(e,r,s){return this.baseFs.lutimesSync(this.mapToBase(e),r,s)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async rmPromise(e,r){return this.baseFs.rmPromise(this.mapToBase(e),r)}rmSync(e,r){return this.baseFs.rmSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,s){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,s);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),c=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(c,a,s)}symlinkSync(e,r,s){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,s);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),c=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(c,a,s)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,s){return this.baseFs.watch(this.mapToBase(e),r,s)}watchFile(e,r,s){return this.baseFs.watchFile(this.mapToBase(e),r,s)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var Hf,x$=Ct(()=>{Ip();Hf=class extends js{constructor(e,{baseFs:r,pathUtils:s}){super(s),this.target=e,this.baseFs=r}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(e){return e}mapToBase(e){return e}}});function k$(t){let e=t;return typeof t.path=="string"&&(e.path=ue.toPortablePath(t.path)),e}var Q$,Yn,Id=Ct(()=>{Q$=et(Ie("fs"));Ed();tl();Yn=class extends Uf{constructor(e=Q$.default){super(),this.realFs=e}getExtractHint(){return!1}getRealPath(){return vt.root}resolve(e){return K.resolve(e)}async openPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.open(ue.fromPortablePath(e),r,s,this.makeCallback(a,n))})}openSync(e,r,s){return this.realFs.openSync(ue.fromPortablePath(e),r,s)}async opendirPromise(e,r){return await new Promise((s,a)=>{typeof r<"u"?this.realFs.opendir(ue.fromPortablePath(e),r,this.makeCallback(s,a)):this.realFs.opendir(ue.fromPortablePath(e),this.makeCallback(s,a))}).then(s=>{let a=s;return Object.defineProperty(a,"path",{value:e,configurable:!0,writable:!0}),a})}opendirSync(e,r){let a=typeof r<"u"?this.realFs.opendirSync(ue.fromPortablePath(e),r):this.realFs.opendirSync(ue.fromPortablePath(e));return Object.defineProperty(a,"path",{value:e,configurable:!0,writable:!0}),a}async readPromise(e,r,s=0,a=0,n=-1){return await new Promise((c,f)=>{this.realFs.read(e,r,s,a,n,(p,h)=>{p?f(p):c(h)})})}readSync(e,r,s,a,n){return this.realFs.readSync(e,r,s,a,n)}async writePromise(e,r,s,a,n){return await new Promise((c,f)=>typeof r=="string"?this.realFs.write(e,r,s,this.makeCallback(c,f)):this.realFs.write(e,r,s,a,n,this.makeCallback(c,f)))}writeSync(e,r,s,a,n){return typeof r=="string"?this.realFs.writeSync(e,r,s):this.realFs.writeSync(e,r,s,a,n)}async closePromise(e){await new Promise((r,s)=>{this.realFs.close(e,this.makeCallback(r,s))})}closeSync(e){this.realFs.closeSync(e)}createReadStream(e,r){let s=e!==null?ue.fromPortablePath(e):e;return this.realFs.createReadStream(s,r)}createWriteStream(e,r){let s=e!==null?ue.fromPortablePath(e):e;return this.realFs.createWriteStream(s,r)}async realpathPromise(e){return await new Promise((r,s)=>{this.realFs.realpath(ue.fromPortablePath(e),{},this.makeCallback(r,s))}).then(r=>ue.toPortablePath(r))}realpathSync(e){return ue.toPortablePath(this.realFs.realpathSync(ue.fromPortablePath(e),{}))}async existsPromise(e){return await new Promise(r=>{this.realFs.exists(ue.fromPortablePath(e),r)})}accessSync(e,r){return this.realFs.accessSync(ue.fromPortablePath(e),r)}async accessPromise(e,r){return await new Promise((s,a)=>{this.realFs.access(ue.fromPortablePath(e),r,this.makeCallback(s,a))})}existsSync(e){return this.realFs.existsSync(ue.fromPortablePath(e))}async statPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.stat(ue.fromPortablePath(e),r,this.makeCallback(s,a)):this.realFs.stat(ue.fromPortablePath(e),this.makeCallback(s,a))})}statSync(e,r){return r?this.realFs.statSync(ue.fromPortablePath(e),r):this.realFs.statSync(ue.fromPortablePath(e))}async fstatPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.fstat(e,r,this.makeCallback(s,a)):this.realFs.fstat(e,this.makeCallback(s,a))})}fstatSync(e,r){return r?this.realFs.fstatSync(e,r):this.realFs.fstatSync(e)}async lstatPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.lstat(ue.fromPortablePath(e),r,this.makeCallback(s,a)):this.realFs.lstat(ue.fromPortablePath(e),this.makeCallback(s,a))})}lstatSync(e,r){return r?this.realFs.lstatSync(ue.fromPortablePath(e),r):this.realFs.lstatSync(ue.fromPortablePath(e))}async fchmodPromise(e,r){return await new Promise((s,a)=>{this.realFs.fchmod(e,r,this.makeCallback(s,a))})}fchmodSync(e,r){return this.realFs.fchmodSync(e,r)}async chmodPromise(e,r){return await new Promise((s,a)=>{this.realFs.chmod(ue.fromPortablePath(e),r,this.makeCallback(s,a))})}chmodSync(e,r){return this.realFs.chmodSync(ue.fromPortablePath(e),r)}async fchownPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.fchown(e,r,s,this.makeCallback(a,n))})}fchownSync(e,r,s){return this.realFs.fchownSync(e,r,s)}async chownPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.chown(ue.fromPortablePath(e),r,s,this.makeCallback(a,n))})}chownSync(e,r,s){return this.realFs.chownSync(ue.fromPortablePath(e),r,s)}async renamePromise(e,r){return await new Promise((s,a)=>{this.realFs.rename(ue.fromPortablePath(e),ue.fromPortablePath(r),this.makeCallback(s,a))})}renameSync(e,r){return this.realFs.renameSync(ue.fromPortablePath(e),ue.fromPortablePath(r))}async copyFilePromise(e,r,s=0){return await new Promise((a,n)=>{this.realFs.copyFile(ue.fromPortablePath(e),ue.fromPortablePath(r),s,this.makeCallback(a,n))})}copyFileSync(e,r,s=0){return this.realFs.copyFileSync(ue.fromPortablePath(e),ue.fromPortablePath(r),s)}async appendFilePromise(e,r,s){return await new Promise((a,n)=>{let c=typeof e=="string"?ue.fromPortablePath(e):e;s?this.realFs.appendFile(c,r,s,this.makeCallback(a,n)):this.realFs.appendFile(c,r,this.makeCallback(a,n))})}appendFileSync(e,r,s){let a=typeof e=="string"?ue.fromPortablePath(e):e;s?this.realFs.appendFileSync(a,r,s):this.realFs.appendFileSync(a,r)}async writeFilePromise(e,r,s){return await new Promise((a,n)=>{let c=typeof e=="string"?ue.fromPortablePath(e):e;s?this.realFs.writeFile(c,r,s,this.makeCallback(a,n)):this.realFs.writeFile(c,r,this.makeCallback(a,n))})}writeFileSync(e,r,s){let a=typeof e=="string"?ue.fromPortablePath(e):e;s?this.realFs.writeFileSync(a,r,s):this.realFs.writeFileSync(a,r)}async unlinkPromise(e){return await new Promise((r,s)=>{this.realFs.unlink(ue.fromPortablePath(e),this.makeCallback(r,s))})}unlinkSync(e){return this.realFs.unlinkSync(ue.fromPortablePath(e))}async utimesPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.utimes(ue.fromPortablePath(e),r,s,this.makeCallback(a,n))})}utimesSync(e,r,s){this.realFs.utimesSync(ue.fromPortablePath(e),r,s)}async lutimesPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.lutimes(ue.fromPortablePath(e),r,s,this.makeCallback(a,n))})}lutimesSync(e,r,s){this.realFs.lutimesSync(ue.fromPortablePath(e),r,s)}async mkdirPromise(e,r){return await new Promise((s,a)=>{this.realFs.mkdir(ue.fromPortablePath(e),r,this.makeCallback(s,a))})}mkdirSync(e,r){return this.realFs.mkdirSync(ue.fromPortablePath(e),r)}async rmdirPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.rmdir(ue.fromPortablePath(e),r,this.makeCallback(s,a)):this.realFs.rmdir(ue.fromPortablePath(e),this.makeCallback(s,a))})}rmdirSync(e,r){return this.realFs.rmdirSync(ue.fromPortablePath(e),r)}async rmPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.rm(ue.fromPortablePath(e),r,this.makeCallback(s,a)):this.realFs.rm(ue.fromPortablePath(e),this.makeCallback(s,a))})}rmSync(e,r){return this.realFs.rmSync(ue.fromPortablePath(e),r)}async linkPromise(e,r){return await new Promise((s,a)=>{this.realFs.link(ue.fromPortablePath(e),ue.fromPortablePath(r),this.makeCallback(s,a))})}linkSync(e,r){return this.realFs.linkSync(ue.fromPortablePath(e),ue.fromPortablePath(r))}async symlinkPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.symlink(ue.fromPortablePath(e.replace(/\/+$/,"")),ue.fromPortablePath(r),s,this.makeCallback(a,n))})}symlinkSync(e,r,s){return this.realFs.symlinkSync(ue.fromPortablePath(e.replace(/\/+$/,"")),ue.fromPortablePath(r),s)}async readFilePromise(e,r){return await new Promise((s,a)=>{let n=typeof e=="string"?ue.fromPortablePath(e):e;this.realFs.readFile(n,r,this.makeCallback(s,a))})}readFileSync(e,r){let s=typeof e=="string"?ue.fromPortablePath(e):e;return this.realFs.readFileSync(s,r)}async readdirPromise(e,r){return await new Promise((s,a)=>{r?r.recursive&&process.platform==="win32"?r.withFileTypes?this.realFs.readdir(ue.fromPortablePath(e),r,this.makeCallback(n=>s(n.map(k$)),a)):this.realFs.readdir(ue.fromPortablePath(e),r,this.makeCallback(n=>s(n.map(ue.toPortablePath)),a)):this.realFs.readdir(ue.fromPortablePath(e),r,this.makeCallback(s,a)):this.realFs.readdir(ue.fromPortablePath(e),this.makeCallback(s,a))})}readdirSync(e,r){return r?r.recursive&&process.platform==="win32"?r.withFileTypes?this.realFs.readdirSync(ue.fromPortablePath(e),r).map(k$):this.realFs.readdirSync(ue.fromPortablePath(e),r).map(ue.toPortablePath):this.realFs.readdirSync(ue.fromPortablePath(e),r):this.realFs.readdirSync(ue.fromPortablePath(e))}async readlinkPromise(e){return await new Promise((r,s)=>{this.realFs.readlink(ue.fromPortablePath(e),this.makeCallback(r,s))}).then(r=>ue.toPortablePath(r))}readlinkSync(e){return ue.toPortablePath(this.realFs.readlinkSync(ue.fromPortablePath(e)))}async truncatePromise(e,r){return await new Promise((s,a)=>{this.realFs.truncate(ue.fromPortablePath(e),r,this.makeCallback(s,a))})}truncateSync(e,r){return this.realFs.truncateSync(ue.fromPortablePath(e),r)}async ftruncatePromise(e,r){return await new Promise((s,a)=>{this.realFs.ftruncate(e,r,this.makeCallback(s,a))})}ftruncateSync(e,r){return this.realFs.ftruncateSync(e,r)}watch(e,r,s){return this.realFs.watch(ue.fromPortablePath(e),r,s)}watchFile(e,r,s){return this.realFs.watchFile(ue.fromPortablePath(e),r,s)}unwatchFile(e,r){return this.realFs.unwatchFile(ue.fromPortablePath(e),r)}makeCallback(e,r){return(s,a)=>{s?r(s):e(a)}}}});var Sn,T$=Ct(()=>{Id();Ip();tl();Sn=class extends js{constructor(e,{baseFs:r=new Yn}={}){super(K),this.target=this.pathUtils.normalize(e),this.baseFs=r}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(e){return this.pathUtils.isAbsolute(e)?K.normalize(e):this.baseFs.resolve(K.join(this.target,e))}mapFromBase(e){return e}mapToBase(e){return this.pathUtils.isAbsolute(e)?e:this.pathUtils.join(this.target,e)}}});var R$,jf,F$=Ct(()=>{Id();Ip();tl();R$=vt.root,jf=class extends js{constructor(e,{baseFs:r=new Yn}={}){super(K),this.target=this.pathUtils.resolve(vt.root,e),this.baseFs=r}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(vt.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(e){let r=this.pathUtils.normalize(e);if(this.pathUtils.isAbsolute(e))return this.pathUtils.resolve(this.target,this.pathUtils.relative(R$,e));if(r.match(/^\.\.\/?/))throw new Error(`Resolving this path (${e}) would escape the jail`);return this.pathUtils.resolve(this.target,e)}mapFromBase(e){return this.pathUtils.resolve(R$,this.pathUtils.relative(this.target,e))}}});var iE,N$=Ct(()=>{Ip();iE=class extends js{constructor(r,s){super(s);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var Cd,rl,r0,O$=Ct(()=>{Cd=Ie("fs");Ed();Id();x_();ix();tl();rl=4278190080,r0=class extends Uf{constructor({baseFs:r=new Yn,filter:s=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:c=!0,maxAge:f=5e3,typeCheck:p=Cd.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:C}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=c?new Map:null,this.factoryPromise=E,this.factorySync=C,this.filter=s,this.getMountPoint=h,this.magic=a<<24,this.maxAge=f,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(md(this),this.mountInstances)for(let[r,{childFs:s}]of this.mountInstances.entries())s.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(md(this),this.mountInstances)for(let[r,{childFs:s}]of this.mountInstances.entries())s.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,s){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,s]),a}async openPromise(r,s,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,s,a),async(n,{subPath:c})=>this.remapFd(n,await n.openPromise(c,s,a)))}openSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,s,a),(n,{subPath:c})=>this.remapFd(n,n.openSync(c,s,a)))}async opendirPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,s),async(a,{subPath:n})=>await a.opendirPromise(n,s),{requireSubpath:!1})}opendirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,s),(a,{subPath:n})=>a.opendirSync(n,s),{requireSubpath:!1})}async readPromise(r,s,a,n,c){if((r&rl)!==this.magic)return await this.baseFs.readPromise(r,s,a,n,c);let f=this.fdMap.get(r);if(typeof f>"u")throw Uo("read");let[p,h]=f;return await p.readPromise(h,s,a,n,c)}readSync(r,s,a,n,c){if((r&rl)!==this.magic)return this.baseFs.readSync(r,s,a,n,c);let f=this.fdMap.get(r);if(typeof f>"u")throw Uo("readSync");let[p,h]=f;return p.readSync(h,s,a,n,c)}async writePromise(r,s,a,n,c){if((r&rl)!==this.magic)return typeof s=="string"?await this.baseFs.writePromise(r,s,a):await this.baseFs.writePromise(r,s,a,n,c);let f=this.fdMap.get(r);if(typeof f>"u")throw Uo("write");let[p,h]=f;return typeof s=="string"?await p.writePromise(h,s,a):await p.writePromise(h,s,a,n,c)}writeSync(r,s,a,n,c){if((r&rl)!==this.magic)return typeof s=="string"?this.baseFs.writeSync(r,s,a):this.baseFs.writeSync(r,s,a,n,c);let f=this.fdMap.get(r);if(typeof f>"u")throw Uo("writeSync");let[p,h]=f;return typeof s=="string"?p.writeSync(h,s,a):p.writeSync(h,s,a,n,c)}async closePromise(r){if((r&rl)!==this.magic)return await this.baseFs.closePromise(r);let s=this.fdMap.get(r);if(typeof s>"u")throw Uo("close");this.fdMap.delete(r);let[a,n]=s;return await a.closePromise(n)}closeSync(r){if((r&rl)!==this.magic)return this.baseFs.closeSync(r);let s=this.fdMap.get(r);if(typeof s>"u")throw Uo("closeSync");this.fdMap.delete(r);let[a,n]=s;return a.closeSync(n)}createReadStream(r,s){return r===null?this.baseFs.createReadStream(r,s):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,s),(a,{archivePath:n,subPath:c})=>{let f=a.createReadStream(c,s);return f.path=ue.fromPortablePath(this.pathUtils.join(n,c)),f})}createWriteStream(r,s){return r===null?this.baseFs.createWriteStream(r,s):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,s),(a,{subPath:n})=>a.createWriteStream(n,s))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(s,{archivePath:a,subPath:n})=>{let c=this.realPaths.get(a);return typeof c>"u"&&(c=await this.baseFs.realpathPromise(a),this.realPaths.set(a,c)),this.pathUtils.join(c,this.pathUtils.relative(vt.root,await s.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(s,{archivePath:a,subPath:n})=>{let c=this.realPaths.get(a);return typeof c>"u"&&(c=this.baseFs.realpathSync(a),this.realPaths.set(a,c)),this.pathUtils.join(c,this.pathUtils.relative(vt.root,s.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(s,{subPath:a})=>await s.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(s,{subPath:a})=>s.existsSync(a))}async accessPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,s),async(a,{subPath:n})=>await a.accessPromise(n,s))}accessSync(r,s){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,s),(a,{subPath:n})=>a.accessSync(n,s))}async statPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,s),async(a,{subPath:n})=>await a.statPromise(n,s))}statSync(r,s){return this.makeCallSync(r,()=>this.baseFs.statSync(r,s),(a,{subPath:n})=>a.statSync(n,s))}async fstatPromise(r,s){if((r&rl)!==this.magic)return this.baseFs.fstatPromise(r,s);let a=this.fdMap.get(r);if(typeof a>"u")throw Uo("fstat");let[n,c]=a;return n.fstatPromise(c,s)}fstatSync(r,s){if((r&rl)!==this.magic)return this.baseFs.fstatSync(r,s);let a=this.fdMap.get(r);if(typeof a>"u")throw Uo("fstatSync");let[n,c]=a;return n.fstatSync(c,s)}async lstatPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,s),async(a,{subPath:n})=>await a.lstatPromise(n,s))}lstatSync(r,s){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,s),(a,{subPath:n})=>a.lstatSync(n,s))}async fchmodPromise(r,s){if((r&rl)!==this.magic)return this.baseFs.fchmodPromise(r,s);let a=this.fdMap.get(r);if(typeof a>"u")throw Uo("fchmod");let[n,c]=a;return n.fchmodPromise(c,s)}fchmodSync(r,s){if((r&rl)!==this.magic)return this.baseFs.fchmodSync(r,s);let a=this.fdMap.get(r);if(typeof a>"u")throw Uo("fchmodSync");let[n,c]=a;return n.fchmodSync(c,s)}async chmodPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,s),async(a,{subPath:n})=>await a.chmodPromise(n,s))}chmodSync(r,s){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,s),(a,{subPath:n})=>a.chmodSync(n,s))}async fchownPromise(r,s,a){if((r&rl)!==this.magic)return this.baseFs.fchownPromise(r,s,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Uo("fchown");let[c,f]=n;return c.fchownPromise(f,s,a)}fchownSync(r,s,a){if((r&rl)!==this.magic)return this.baseFs.fchownSync(r,s,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Uo("fchownSync");let[c,f]=n;return c.fchownSync(f,s,a)}async chownPromise(r,s,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,s,a),async(n,{subPath:c})=>await n.chownPromise(c,s,a))}chownSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,s,a),(n,{subPath:c})=>n.chownSync(c,s,a))}async renamePromise(r,s){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(s,async()=>await this.baseFs.renamePromise(r,s),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(s,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(c,{subPath:f})=>{if(a!==c)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,f)}))}renameSync(r,s){return this.makeCallSync(r,()=>this.makeCallSync(s,()=>this.baseFs.renameSync(r,s),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(s,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(c,{subPath:f})=>{if(a!==c)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,f)}))}async copyFilePromise(r,s,a=0){let n=async(c,f,p,h)=>{if(a&Cd.constants.COPYFILE_FICLONE_FORCE)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${f}' -> ${h}'`),{code:"EXDEV"});if(a&Cd.constants.COPYFILE_EXCL&&await this.existsPromise(f))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${f}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await c.readFilePromise(f)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${f}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(s,async()=>await this.baseFs.copyFilePromise(r,s,a),async(c,{subPath:f})=>await n(this.baseFs,r,c,f)),async(c,{subPath:f})=>await this.makeCallPromise(s,async()=>await n(c,f,this.baseFs,s),async(p,{subPath:h})=>c!==p?await n(c,f,p,h):await c.copyFilePromise(f,h,a)))}copyFileSync(r,s,a=0){let n=(c,f,p,h)=>{if(a&Cd.constants.COPYFILE_FICLONE_FORCE)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${f}' -> ${h}'`),{code:"EXDEV"});if(a&Cd.constants.COPYFILE_EXCL&&this.existsSync(f))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${f}' -> '${h}'`),{code:"EEXIST"});let E;try{E=c.readFileSync(f)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${f}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(s,()=>this.baseFs.copyFileSync(r,s,a),(c,{subPath:f})=>n(this.baseFs,r,c,f)),(c,{subPath:f})=>this.makeCallSync(s,()=>n(c,f,this.baseFs,s),(p,{subPath:h})=>c!==p?n(c,f,p,h):c.copyFileSync(f,h,a)))}async appendFilePromise(r,s,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,s,a),async(n,{subPath:c})=>await n.appendFilePromise(c,s,a))}appendFileSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,s,a),(n,{subPath:c})=>n.appendFileSync(c,s,a))}async writeFilePromise(r,s,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,s,a),async(n,{subPath:c})=>await n.writeFilePromise(c,s,a))}writeFileSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,s,a),(n,{subPath:c})=>n.writeFileSync(c,s,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(s,{subPath:a})=>await s.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(s,{subPath:a})=>s.unlinkSync(a))}async utimesPromise(r,s,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,s,a),async(n,{subPath:c})=>await n.utimesPromise(c,s,a))}utimesSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,s,a),(n,{subPath:c})=>n.utimesSync(c,s,a))}async lutimesPromise(r,s,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,s,a),async(n,{subPath:c})=>await n.lutimesPromise(c,s,a))}lutimesSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,s,a),(n,{subPath:c})=>n.lutimesSync(c,s,a))}async mkdirPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,s),async(a,{subPath:n})=>await a.mkdirPromise(n,s))}mkdirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,s),(a,{subPath:n})=>a.mkdirSync(n,s))}async rmdirPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,s),async(a,{subPath:n})=>await a.rmdirPromise(n,s))}rmdirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,s),(a,{subPath:n})=>a.rmdirSync(n,s))}async rmPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.rmPromise(r,s),async(a,{subPath:n})=>await a.rmPromise(n,s))}rmSync(r,s){return this.makeCallSync(r,()=>this.baseFs.rmSync(r,s),(a,{subPath:n})=>a.rmSync(n,s))}async linkPromise(r,s){return await this.makeCallPromise(s,async()=>await this.baseFs.linkPromise(r,s),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,s){return this.makeCallSync(s,()=>this.baseFs.linkSync(r,s),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,s,a){return await this.makeCallPromise(s,async()=>await this.baseFs.symlinkPromise(r,s,a),async(n,{subPath:c})=>await n.symlinkPromise(r,c))}symlinkSync(r,s,a){return this.makeCallSync(s,()=>this.baseFs.symlinkSync(r,s,a),(n,{subPath:c})=>n.symlinkSync(r,c))}async readFilePromise(r,s){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,s),async(a,{subPath:n})=>await a.readFilePromise(n,s))}readFileSync(r,s){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,s),(a,{subPath:n})=>a.readFileSync(n,s))}async readdirPromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,s),async(a,{subPath:n})=>await a.readdirPromise(n,s),{requireSubpath:!1})}readdirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,s),(a,{subPath:n})=>a.readdirSync(n,s),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(s,{subPath:a})=>await s.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(s,{subPath:a})=>s.readlinkSync(a))}async truncatePromise(r,s){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,s),async(a,{subPath:n})=>await a.truncatePromise(n,s))}truncateSync(r,s){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,s),(a,{subPath:n})=>a.truncateSync(n,s))}async ftruncatePromise(r,s){if((r&rl)!==this.magic)return this.baseFs.ftruncatePromise(r,s);let a=this.fdMap.get(r);if(typeof a>"u")throw Uo("ftruncate");let[n,c]=a;return n.ftruncatePromise(c,s)}ftruncateSync(r,s){if((r&rl)!==this.magic)return this.baseFs.ftruncateSync(r,s);let a=this.fdMap.get(r);if(typeof a>"u")throw Uo("ftruncateSync");let[n,c]=a;return n.ftruncateSync(c,s)}watch(r,s,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,s,a),(n,{subPath:c})=>n.watch(c,s,a))}watchFile(r,s,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,s,a),()=>nE(this,r,s,a))}unwatchFile(r,s){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,s),()=>dd(this,r,s))}async makeCallPromise(r,s,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await s();let c=this.resolve(r),f=this.findMount(c);return f?n&&f.subPath==="/"?await s():await this.getMountPromise(f.archivePath,async p=>await a(p,f)):await s()}makeCallSync(r,s,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return s();let c=this.resolve(r),f=this.findMount(c);return!f||n&&f.subPath==="/"?s():this.getMountSync(f.archivePath,p=>a(p,f))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let s="";for(;;){let a=r.substring(s.length),n=this.getMountPoint(a,s);if(!n)return null;if(s=this.pathUtils.join(s,n),!this.isMount.has(s)){if(this.notMount.has(s))continue;try{if(this.typeCheck!==null&&(this.baseFs.statSync(s).mode&Cd.constants.S_IFMT)!==this.typeCheck){this.notMount.add(s);continue}}catch{return null}this.isMount.add(s)}return{archivePath:s,subPath:this.pathUtils.join(vt.root,r.substring(s.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let s=Date.now(),a=s+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[c,{childFs:f,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||f.hasOpenFileHandles?.())){if(s>=p){f.saveAndClose?.(),this.mountInstances.delete(c),n-=1;continue}else if(r===null||n<=0){a=p;break}f.saveAndClose?.(),this.mountInstances.delete(c),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-s).unref())}async getMountPromise(r,s){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await s(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await s(a)}finally{a.saveAndClose?.()}}}getMountSync(r,s){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,s(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return s(a)}finally{a.saveAndClose?.()}}}}});var er,fx,L$=Ct(()=>{Ed();tl();er=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),fx=class t extends Ep{static{this.instance=new t}constructor(){super(K)}getExtractHint(){throw er()}getRealPath(){throw er()}resolve(){throw er()}async openPromise(){throw er()}openSync(){throw er()}async opendirPromise(){throw er()}opendirSync(){throw er()}async readPromise(){throw er()}readSync(){throw er()}async writePromise(){throw er()}writeSync(){throw er()}async closePromise(){throw er()}closeSync(){throw er()}createWriteStream(){throw er()}createReadStream(){throw er()}async realpathPromise(){throw er()}realpathSync(){throw er()}async readdirPromise(){throw er()}readdirSync(){throw er()}async existsPromise(e){throw er()}existsSync(e){throw er()}async accessPromise(){throw er()}accessSync(){throw er()}async statPromise(){throw er()}statSync(){throw er()}async fstatPromise(e){throw er()}fstatSync(e){throw er()}async lstatPromise(e){throw er()}lstatSync(e){throw er()}async fchmodPromise(){throw er()}fchmodSync(){throw er()}async chmodPromise(){throw er()}chmodSync(){throw er()}async fchownPromise(){throw er()}fchownSync(){throw er()}async chownPromise(){throw er()}chownSync(){throw er()}async mkdirPromise(){throw er()}mkdirSync(){throw er()}async rmdirPromise(){throw er()}rmdirSync(){throw er()}async rmPromise(){throw er()}rmSync(){throw er()}async linkPromise(){throw er()}linkSync(){throw er()}async symlinkPromise(){throw er()}symlinkSync(){throw er()}async renamePromise(){throw er()}renameSync(){throw er()}async copyFilePromise(){throw er()}copyFileSync(){throw er()}async appendFilePromise(){throw er()}appendFileSync(){throw er()}async writeFilePromise(){throw er()}writeFileSync(){throw er()}async unlinkPromise(){throw er()}unlinkSync(){throw er()}async utimesPromise(){throw er()}utimesSync(){throw er()}async lutimesPromise(){throw er()}lutimesSync(){throw er()}async readFilePromise(){throw er()}readFileSync(){throw er()}async readlinkPromise(){throw er()}readlinkSync(){throw er()}async truncatePromise(){throw er()}truncateSync(){throw er()}async ftruncatePromise(e,r){throw er()}ftruncateSync(e,r){throw er()}watch(){throw er()}watchFile(){throw er()}unwatchFile(){throw er()}}});var n0,M$=Ct(()=>{Ip();tl();n0=class extends js{constructor(e){super(ue),this.baseFs=e}mapFromBase(e){return ue.fromPortablePath(e)}mapToBase(e){return ue.toPortablePath(e)}}});var m7e,k_,y7e,Ao,_$=Ct(()=>{Id();Ip();tl();m7e=/^[0-9]+$/,k_=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,y7e=/^([^/]+-)?[a-f0-9]+$/,Ao=class t extends js{static makeVirtualPath(e,r,s){if(K.basename(e)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!K.basename(r).match(y7e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let n=K.relative(K.dirname(e),s).split("/"),c=0;for(;c{Q_=et(Ie("buffer")),U$=Ie("url"),H$=Ie("util");Ip();tl();Ax=class extends js{constructor(e){super(ue),this.baseFs=e}mapFromBase(e){return e}mapToBase(e){if(typeof e=="string")return e;if(e instanceof URL)return(0,U$.fileURLToPath)(e);if(Buffer.isBuffer(e)){let r=e.toString();if(!E7e(e,r))throw new Error("Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942");return r}throw new Error(`Unsupported path type: ${(0,H$.inspect)(e)}`)}}});var V$,Ho,Cp,i0,px,hx,sE,Nu,Ou,q$,G$,W$,Y$,M2,K$=Ct(()=>{V$=Ie("readline"),Ho=Symbol("kBaseFs"),Cp=Symbol("kFd"),i0=Symbol("kClosePromise"),px=Symbol("kCloseResolve"),hx=Symbol("kCloseReject"),sE=Symbol("kRefs"),Nu=Symbol("kRef"),Ou=Symbol("kUnref"),M2=class{constructor(e,r){this[Y$]=1;this[W$]=void 0;this[G$]=void 0;this[q$]=void 0;this[Ho]=r,this[Cp]=e}get fd(){return this[Cp]}async appendFile(e,r){try{this[Nu](this.appendFile);let s=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Ho].appendFilePromise(this.fd,e,s?{encoding:s}:void 0)}finally{this[Ou]()}}async chown(e,r){try{return this[Nu](this.chown),await this[Ho].fchownPromise(this.fd,e,r)}finally{this[Ou]()}}async chmod(e){try{return this[Nu](this.chmod),await this[Ho].fchmodPromise(this.fd,e)}finally{this[Ou]()}}createReadStream(e){return this[Ho].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Ho].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,s,a){try{this[Nu](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,s=e.length??n.byteLength,a=e.position??null),r??=0,s??=0,s===0?{bytesRead:s,buffer:n}:{bytesRead:await this[Ho].readPromise(this.fd,n,r,s,a),buffer:n}}finally{this[Ou]()}}async readFile(e){try{this[Nu](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Ho].readFilePromise(this.fd,r)}finally{this[Ou]()}}readLines(e){return(0,V$.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Nu](this.stat),await this[Ho].fstatPromise(this.fd,e)}finally{this[Ou]()}}async truncate(e){try{return this[Nu](this.truncate),await this[Ho].ftruncatePromise(this.fd,e)}finally{this[Ou]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Nu](this.writeFile);let s=(typeof r=="string"?r:r?.encoding)??void 0;await this[Ho].writeFilePromise(this.fd,e,s)}finally{this[Ou]()}}async write(...e){try{if(this[Nu](this.write),ArrayBuffer.isView(e[0])){let[r,s,a,n]=e;return{bytesWritten:await this[Ho].writePromise(this.fd,r,s??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,s,a]=e;return{bytesWritten:await this[Ho].writePromise(this.fd,r,s,a),buffer:r}}}finally{this[Ou]()}}async writev(e,r){try{this[Nu](this.writev);let s=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);s+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);s+=n.bytesWritten}return{buffers:e,bytesWritten:s}}finally{this[Ou]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[Cp]===-1)return Promise.resolve();if(this[i0])return this[i0];if(this[sE]--,this[sE]===0){let e=this[Cp];this[Cp]=-1,this[i0]=this[Ho].closePromise(e).finally(()=>{this[i0]=void 0})}else this[i0]=new Promise((e,r)=>{this[px]=e,this[hx]=r}).finally(()=>{this[i0]=void 0,this[hx]=void 0,this[px]=void 0});return this[i0]}[(Ho,Cp,Y$=sE,W$=i0,G$=px,q$=hx,Nu)](e){if(this[Cp]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[sE]++}[Ou](){if(this[sE]--,this[sE]===0){let e=this[Cp];this[Cp]=-1,this[Ho].closePromise(e).then(this[px],this[hx])}}}});function _2(t,e){e=new Ax(e);let r=(s,a,n)=>{let c=s[a];s[a]=n,typeof c?.[oE.promisify.custom]<"u"&&(n[oE.promisify.custom]=c[oE.promisify.custom])};{r(t,"exists",(s,...a)=>{let c=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(s).then(f=>{c(f)},()=>{c(!1)})})}),r(t,"read",(...s)=>{let[a,n,c,f,p,h]=s;if(s.length<=3){let E={};s.length<3?h=s[1]:(E=s[1],h=s[2]),{buffer:n=Buffer.alloc(16384),offset:c=0,length:f=n.byteLength,position:p}=E}if(c==null&&(c=0),f|=0,f===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,c,f,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let s of J$){let a=s.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[s];if(typeof n>"u")continue;r(t,a,(...f)=>{let h=typeof f[f.length-1]=="function"?f.pop():()=>{};process.nextTick(()=>{n.apply(e,f).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",s=>{try{return e.existsSync(s)}catch{return!1}}),r(t,"readSync",(...s)=>{let[a,n,c,f,p]=s;return s.length<=3&&({offset:c=0,length:f=n.byteLength,position:p}=s[2]||{}),c==null&&(c=0),f|=0,f===0?0:(p==null&&(p=-1),e.readSync(a,n,c,f,p))});for(let s of I7e){let a=s;if(typeof t[a]>"u")continue;let n=e[s];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let s=t.promises;for(let a of J$){let n=a.replace(/Promise$/,"");if(typeof s[n]>"u")continue;let c=e[a];typeof c>"u"||a!=="open"&&r(s,n,(f,...p)=>f instanceof M2?f[n].apply(f,p):c.call(e,f,...p))}r(s,"open",async(...a)=>{let n=await e.openPromise(...a);return new M2(n,e)})}t.read[oE.promisify.custom]=async(s,a,...n)=>({bytesRead:await e.readPromise(s,a,...n),buffer:a}),t.write[oE.promisify.custom]=async(s,a,...n)=>({bytesWritten:await e.writePromise(s,a,...n),buffer:a})}function gx(t,e){let r=Object.create(t);return _2(r,e),r}var oE,I7e,J$,z$=Ct(()=>{oE=Ie("util");j$();K$();I7e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","rmSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),J$=new Set(["accessPromise","appendFilePromise","fchmodPromise","chmodPromise","fchownPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","rmPromise","statPromise","symlinkPromise","truncatePromise","ftruncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"])});function Z$(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function X$(){if(T_)return T_;let t=ue.toPortablePath($$.default.tmpdir()),e=le.realpathSync(t);return process.once("exit",()=>{le.rmtempSync()}),T_={tmpdir:t,realTmpdir:e}}var $$,Lu,T_,le,eee=Ct(()=>{$$=et(Ie("os"));Id();tl();Lu=new Set,T_=null;le=Object.assign(new Yn,{detachTemp(t){Lu.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=X$();for(;;){let s=Z$("xfs-");try{this.mkdirSync(K.join(e,s))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=K.join(r,s);if(Lu.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Lu.has(a)){Lu.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=X$();for(;;){let s=Z$("xfs-");try{await this.mkdirPromise(K.join(e,s))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=K.join(r,s);if(Lu.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Lu.has(a)){Lu.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Lu.values()).map(async t=>{try{await le.removePromise(t,{maxRetries:0}),Lu.delete(t)}catch{}}))},rmtempSync(){for(let t of Lu)try{le.removeSync(t),Lu.delete(t)}catch{}}})});var U2={};Vt(U2,{AliasFS:()=>Hf,BasePortableFakeFS:()=>Uf,CustomDir:()=>L2,CwdFS:()=>Sn,FakeFS:()=>Ep,Filename:()=>Er,JailFS:()=>jf,LazyFS:()=>iE,MountFS:()=>r0,NoFS:()=>fx,NodeFS:()=>Yn,PortablePath:()=>vt,PosixFS:()=>n0,ProxiedFS:()=>js,VirtualFS:()=>Ao,constants:()=>fi,errors:()=>or,extendFs:()=>gx,normalizeLineEndings:()=>yd,npath:()=>ue,opendir:()=>lx,patchFs:()=>_2,ppath:()=>K,setupCopyIndex:()=>ax,statUtils:()=>el,unwatchAllFiles:()=>md,unwatchFile:()=>dd,watchFile:()=>nE,xfs:()=>le});var bt=Ct(()=>{m$();ix();S_();P_();B$();x_();Ed();tl();tl();x$();Ed();T$();F$();N$();O$();L$();Id();M$();Ip();_$();z$();eee()});var see=L((wGt,iee)=>{iee.exports=nee;nee.sync=w7e;var tee=Ie("fs");function C7e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var s=0;s{cee.exports=aee;aee.sync=B7e;var oee=Ie("fs");function aee(t,e,r){oee.stat(t,function(s,a){r(s,s?!1:lee(a,e))})}function B7e(t,e){return lee(oee.statSync(t),e)}function lee(t,e){return t.isFile()&&v7e(t,e)}function v7e(t,e){var r=t.mode,s=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),c=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),f=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=f|p,C=r&h||r&p&&a===c||r&f&&s===n||r&E&&n===0;return C}});var Aee=L((SGt,fee)=>{var vGt=Ie("fs"),dx;process.platform==="win32"||global.TESTING_WINDOWS?dx=see():dx=uee();fee.exports=R_;R_.sync=S7e;function R_(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(s,a){R_(t,e||{},function(n,c){n?a(n):s(c)})})}dx(t,e||{},function(s,a){s&&(s.code==="EACCES"||e&&e.ignoreErrors)&&(s=null,a=!1),r(s,a)})}function S7e(t,e){try{return dx.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var Eee=L((DGt,yee)=>{var aE=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",pee=Ie("path"),D7e=aE?";":":",hee=Aee(),gee=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),dee=(t,e)=>{let r=e.colon||D7e,s=t.match(/\//)||aE&&t.match(/\\/)?[""]:[...aE?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=aE?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=aE?a.split(r):[""];return aE&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:s,pathExt:n,pathExtExe:a}},mee=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:s,pathExt:a,pathExtExe:n}=dee(t,e),c=[],f=h=>new Promise((E,C)=>{if(h===s.length)return e.all&&c.length?E(c):C(gee(t));let S=s[h],P=/^".*"$/.test(S)?S.slice(1,-1):S,I=pee.join(P,t),R=!P&&/^\.[\\\/]/.test(t)?t.slice(0,2)+I:I;E(p(R,h,0))}),p=(h,E,C)=>new Promise((S,P)=>{if(C===a.length)return S(f(E+1));let I=a[C];hee(h+I,{pathExt:n},(R,N)=>{if(!R&&N)if(e.all)c.push(h+I);else return S(h+I);return S(p(h,E,C+1))})});return r?f(0).then(h=>r(null,h),r):f(0)},b7e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:s,pathExtExe:a}=dee(t,e),n=[];for(let c=0;c{"use strict";var Iee=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(s=>s.toUpperCase()==="PATH")||"Path"};F_.exports=Iee;F_.exports.default=Iee});var See=L((PGt,vee)=>{"use strict";var wee=Ie("path"),P7e=Eee(),x7e=Cee();function Bee(t,e){let r=t.options.env||process.env,s=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let c;try{c=P7e.sync(t.command,{path:r[x7e({env:r})],pathExt:e?wee.delimiter:void 0})}catch{}finally{n&&process.chdir(s)}return c&&(c=wee.resolve(a?t.options.cwd:"",c)),c}function k7e(t){return Bee(t)||Bee(t,!0)}vee.exports=k7e});var Dee=L((xGt,O_)=>{"use strict";var N_=/([()\][%!^"`<>&|;, *?])/g;function Q7e(t){return t=t.replace(N_,"^$1"),t}function T7e(t,e){return t=`${t}`,t=t.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),t=t.replace(/(?=(\\+?)?)\1$/,"$1$1"),t=`"${t}"`,t=t.replace(N_,"^$1"),e&&(t=t.replace(N_,"^$1")),t}O_.exports.command=Q7e;O_.exports.argument=T7e});var Pee=L((kGt,bee)=>{"use strict";bee.exports=/^#!(.*)/});var kee=L((QGt,xee)=>{"use strict";var R7e=Pee();xee.exports=(t="")=>{let e=t.match(R7e);if(!e)return null;let[r,s]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?s:s?`${a} ${s}`:a}});var Tee=L((TGt,Qee)=>{"use strict";var L_=Ie("fs"),F7e=kee();function N7e(t){let r=Buffer.alloc(150),s;try{s=L_.openSync(t,"r"),L_.readSync(s,r,0,150,0),L_.closeSync(s)}catch{}return F7e(r.toString())}Qee.exports=N7e});var Oee=L((RGt,Nee)=>{"use strict";var O7e=Ie("path"),Ree=See(),Fee=Dee(),L7e=Tee(),M7e=process.platform==="win32",_7e=/\.(?:com|exe)$/i,U7e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function H7e(t){t.file=Ree(t);let e=t.file&&L7e(t.file);return e?(t.args.unshift(t.file),t.command=e,Ree(t)):t.file}function j7e(t){if(!M7e)return t;let e=H7e(t),r=!_7e.test(e);if(t.options.forceShell||r){let s=U7e.test(e);t.command=O7e.normalize(t.command),t.command=Fee.command(t.command),t.args=t.args.map(n=>Fee.argument(n,s));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function q7e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let s={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?s:j7e(s)}Nee.exports=q7e});var _ee=L((FGt,Mee)=>{"use strict";var M_=process.platform==="win32";function __(t,e){return Object.assign(new Error(`${e} ${t.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${t.command}`,path:t.command,spawnargs:t.args})}function G7e(t,e){if(!M_)return;let r=t.emit;t.emit=function(s,a){if(s==="exit"){let n=Lee(a,e);if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function Lee(t,e){return M_&&t===1&&!e.file?__(e.original,"spawn"):null}function W7e(t,e){return M_&&t===1&&!e.file?__(e.original,"spawnSync"):null}Mee.exports={hookChildProcess:G7e,verifyENOENT:Lee,verifyENOENTSync:W7e,notFoundError:__}});var j_=L((NGt,lE)=>{"use strict";var Uee=Ie("child_process"),U_=Oee(),H_=_ee();function Hee(t,e,r){let s=U_(t,e,r),a=Uee.spawn(s.command,s.args,s.options);return H_.hookChildProcess(a,s),a}function Y7e(t,e,r){let s=U_(t,e,r),a=Uee.spawnSync(s.command,s.args,s.options);return a.error=a.error||H_.verifyENOENTSync(a.status,s),a}lE.exports=Hee;lE.exports.spawn=Hee;lE.exports.sync=Y7e;lE.exports._parse=U_;lE.exports._enoent=H_});var qee=L((OGt,jee)=>{"use strict";function V7e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function wd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.location=s,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,wd)}V7e(wd,Error);wd.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",C;for(C=0;C0){for(C=1,S=1;C>",b=ur(">>",!1),y=">&",F=ur(">&",!1),z=">",Z=ur(">",!1),$="<<<",oe=ur("<<<",!1),xe="<&",Te=ur("<&",!1),lt="<",It=ur("<",!1),qt=function(O){return{type:"argument",segments:[].concat(...O)}},ir=function(O){return O},Pt="$'",gn=ur("$'",!1),Pr="'",Ir=ur("'",!1),Nr=function(O){return[{type:"text",text:O}]},nn='""',ai=ur('""',!1),wo=function(){return{type:"text",text:""}},ns='"',to=ur('"',!1),Bo=function(O){return O},ji=function(O){return{type:"arithmetic",arithmetic:O,quoted:!0}},ro=function(O){return{type:"shell",shell:O,quoted:!0}},vo=function(O){return{type:"variable",...O,quoted:!0}},RA=function(O){return{type:"text",text:O}},pf=function(O){return{type:"arithmetic",arithmetic:O,quoted:!1}},yh=function(O){return{type:"shell",shell:O,quoted:!1}},Eh=function(O){return{type:"variable",...O,quoted:!1}},no=function(O){return{type:"glob",pattern:O}},jn=/^[^']/,Fs=Zi(["'"],!0,!1),io=function(O){return O.join("")},lu=/^[^$"]/,cu=Zi(["$",'"'],!0,!1),uu=`\\ -`,FA=ur(`\\ -`,!1),NA=function(){return""},aa="\\",la=ur("\\",!1),OA=/^[\\$"`]/,gr=Zi(["\\","$",'"',"`"],!1,!1),So=function(O){return O},Me="\\a",fu=ur("\\a",!1),Cr=function(){return"a"},hf="\\b",LA=ur("\\b",!1),MA=function(){return"\b"},Au=/^[Ee]/,pu=Zi(["E","e"],!1,!1),ac=function(){return"\x1B"},ve="\\f",Nt=ur("\\f",!1),lc=function(){return"\f"},Li="\\n",so=ur("\\n",!1),Rt=function(){return` -`},xn="\\r",ca=ur("\\r",!1),qi=function(){return"\r"},Mi="\\t",Oa=ur("\\t",!1),dn=function(){return" "},Jn="\\v",hu=ur("\\v",!1),Ih=function(){return"\v"},La=/^[\\'"?]/,Ma=Zi(["\\","'",'"',"?"],!1,!1),Ua=function(O){return String.fromCharCode(parseInt(O,16))},Xe="\\x",Ha=ur("\\x",!1),gf="\\u",cc=ur("\\u",!1),wn="\\U",ua=ur("\\U",!1),_A=function(O){return String.fromCodePoint(parseInt(O,16))},UA=/^[0-7]/,fa=Zi([["0","7"]],!1,!1),vl=/^[0-9a-fA-f]/,Mt=Zi([["0","9"],["a","f"],["A","f"]],!1,!1),kn=Ef(),Aa="{}",ja=ur("{}",!1),is=function(){return"{}"},uc="-",gu=ur("-",!1),fc="+",qa=ur("+",!1),_i=".",ws=ur(".",!1),Sl=function(O,J,re){return{type:"number",value:(O==="-"?-1:1)*parseFloat(J.join("")+"."+re.join(""))}},df=function(O,J){return{type:"number",value:(O==="-"?-1:1)*parseInt(J.join(""))}},Ac=function(O){return{type:"variable",...O}},Bi=function(O){return{type:"variable",name:O}},Qn=function(O){return O},pc="*",Je=ur("*",!1),st="/",St=ur("/",!1),lr=function(O,J,re){return{type:J==="*"?"multiplication":"division",right:re}},ee=function(O,J){return J.reduce((re,de)=>({left:re,...de}),O)},Ee=function(O,J,re){return{type:J==="+"?"addition":"subtraction",right:re}},Oe="$((",gt=ur("$((",!1),yt="))",Dt=ur("))",!1),tr=function(O){return O},fn="$(",li=ur("$(",!1),Gi=function(O){return O},Tn="${",Ga=ur("${",!1),gy=":-",X1=ur(":-",!1),Do=function(O,J){return{name:O,defaultValue:J}},dy=":-}",Ch=ur(":-}",!1),$1=function(O){return{name:O,defaultValue:[]}},bo=":+",wh=ur(":+",!1),Bh=function(O,J){return{name:O,alternativeValue:J}},du=":+}",vh=ur(":+}",!1),Rg=function(O){return{name:O,alternativeValue:[]}},Fg=function(O){return{name:O}},Ng="$",my=ur("$",!1),mf=function(O){return e.isGlobPattern(O)},Po=function(O){return O},Dl=/^[a-zA-Z0-9_]/,Sh=Zi([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Og=function(){return Cy()},bl=/^[$@*?#a-zA-Z0-9_\-]/,Pl=Zi(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),yy=/^[()}<>$|&; \t"']/,HA=Zi(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),Ey=/^[<>&; \t"']/,Iy=Zi(["<",">","&",";"," "," ",'"',"'"],!1,!1),jA=/^[ \t]/,qA=Zi([" "," "],!1,!1),Y=0,xt=0,GA=[{line:1,column:1}],xo=0,yf=[],mt=0,mu;if("startRule"in e){if(!(e.startRule in s))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=s[e.startRule]}function Cy(){return t.substring(xt,Y)}function Lg(){return If(xt,Y)}function e2(O,J){throw J=J!==void 0?J:If(xt,Y),WA([Mg(O)],t.substring(xt,Y),J)}function Dh(O,J){throw J=J!==void 0?J:If(xt,Y),di(O,J)}function ur(O,J){return{type:"literal",text:O,ignoreCase:J}}function Zi(O,J,re){return{type:"class",parts:O,inverted:J,ignoreCase:re}}function Ef(){return{type:"any"}}function Wa(){return{type:"end"}}function Mg(O){return{type:"other",description:O}}function yu(O){var J=GA[O],re;if(J)return J;for(re=O-1;!GA[re];)re--;for(J=GA[re],J={line:J.line,column:J.column};rexo&&(xo=Y,yf=[]),yf.push(O))}function di(O,J){return new wd(O,null,null,J)}function WA(O,J,re){return new wd(wd.buildMessage(O,J),O,J,re)}function Ya(){var O,J,re;for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();return J!==r?(re=pa(),re===r&&(re=null),re!==r?(xt=O,J=n(re),O=J):(Y=O,O=r)):(Y=O,O=r),O}function pa(){var O,J,re,de,Ke;if(O=Y,J=bh(),J!==r){for(re=[],de=kt();de!==r;)re.push(de),de=kt();re!==r?(de=_g(),de!==r?(Ke=Va(),Ke===r&&(Ke=null),Ke!==r?(xt=O,J=c(J,de,Ke),O=J):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r)}else Y=O,O=r;if(O===r)if(O=Y,J=bh(),J!==r){for(re=[],de=kt();de!==r;)re.push(de),de=kt();re!==r?(de=_g(),de===r&&(de=null),de!==r?(xt=O,J=f(J,de),O=J):(Y=O,O=r)):(Y=O,O=r)}else Y=O,O=r;return O}function Va(){var O,J,re,de,Ke;for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();if(J!==r)if(re=pa(),re!==r){for(de=[],Ke=kt();Ke!==r;)de.push(Ke),Ke=kt();de!==r?(xt=O,J=p(re),O=J):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r;return O}function _g(){var O;return t.charCodeAt(Y)===59?(O=h,Y++):(O=r,mt===0&&wt(E)),O===r&&(t.charCodeAt(Y)===38?(O=C,Y++):(O=r,mt===0&&wt(S))),O}function bh(){var O,J,re;return O=Y,J=YA(),J!==r?(re=Ug(),re===r&&(re=null),re!==r?(xt=O,J=P(J,re),O=J):(Y=O,O=r)):(Y=O,O=r),O}function Ug(){var O,J,re,de,Ke,ft,dr;for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();if(J!==r)if(re=wy(),re!==r){for(de=[],Ke=kt();Ke!==r;)de.push(Ke),Ke=kt();if(de!==r)if(Ke=bh(),Ke!==r){for(ft=[],dr=kt();dr!==r;)ft.push(dr),dr=kt();ft!==r?(xt=O,J=I(re,Ke),O=J):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;else Y=O,O=r;return O}function wy(){var O;return t.substr(Y,2)===R?(O=R,Y+=2):(O=r,mt===0&&wt(N)),O===r&&(t.substr(Y,2)===U?(O=U,Y+=2):(O=r,mt===0&&wt(W))),O}function YA(){var O,J,re;return O=Y,J=Cf(),J!==r?(re=Hg(),re===r&&(re=null),re!==r?(xt=O,J=te(J,re),O=J):(Y=O,O=r)):(Y=O,O=r),O}function Hg(){var O,J,re,de,Ke,ft,dr;for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();if(J!==r)if(re=Eu(),re!==r){for(de=[],Ke=kt();Ke!==r;)de.push(Ke),Ke=kt();if(de!==r)if(Ke=YA(),Ke!==r){for(ft=[],dr=kt();dr!==r;)ft.push(dr),dr=kt();ft!==r?(xt=O,J=ie(re,Ke),O=J):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;else Y=O,O=r;return O}function Eu(){var O;return t.substr(Y,2)===Ae?(O=Ae,Y+=2):(O=r,mt===0&&wt(ce)),O===r&&(t.charCodeAt(Y)===124?(O=me,Y++):(O=r,mt===0&&wt(pe))),O}function Iu(){var O,J,re,de,Ke,ft;if(O=Y,J=kh(),J!==r)if(t.charCodeAt(Y)===61?(re=Be,Y++):(re=r,mt===0&&wt(Ce)),re!==r)if(de=VA(),de!==r){for(Ke=[],ft=kt();ft!==r;)Ke.push(ft),ft=kt();Ke!==r?(xt=O,J=g(J,de),O=J):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r;else Y=O,O=r;if(O===r)if(O=Y,J=kh(),J!==r)if(t.charCodeAt(Y)===61?(re=Be,Y++):(re=r,mt===0&&wt(Ce)),re!==r){for(de=[],Ke=kt();Ke!==r;)de.push(Ke),Ke=kt();de!==r?(xt=O,J=we(J),O=J):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r;return O}function Cf(){var O,J,re,de,Ke,ft,dr,Br,_n,mi,Bs;for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();if(J!==r)if(t.charCodeAt(Y)===40?(re=ye,Y++):(re=r,mt===0&&wt(fe)),re!==r){for(de=[],Ke=kt();Ke!==r;)de.push(Ke),Ke=kt();if(de!==r)if(Ke=pa(),Ke!==r){for(ft=[],dr=kt();dr!==r;)ft.push(dr),dr=kt();if(ft!==r)if(t.charCodeAt(Y)===41?(dr=se,Y++):(dr=r,mt===0&&wt(X)),dr!==r){for(Br=[],_n=kt();_n!==r;)Br.push(_n),_n=kt();if(Br!==r){for(_n=[],mi=qn();mi!==r;)_n.push(mi),mi=qn();if(_n!==r){for(mi=[],Bs=kt();Bs!==r;)mi.push(Bs),Bs=kt();mi!==r?(xt=O,J=De(Ke,_n),O=J):(Y=O,O=r)}else Y=O,O=r}else Y=O,O=r}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;else Y=O,O=r;if(O===r){for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();if(J!==r)if(t.charCodeAt(Y)===123?(re=Re,Y++):(re=r,mt===0&&wt(dt)),re!==r){for(de=[],Ke=kt();Ke!==r;)de.push(Ke),Ke=kt();if(de!==r)if(Ke=pa(),Ke!==r){for(ft=[],dr=kt();dr!==r;)ft.push(dr),dr=kt();if(ft!==r)if(t.charCodeAt(Y)===125?(dr=j,Y++):(dr=r,mt===0&&wt(rt)),dr!==r){for(Br=[],_n=kt();_n!==r;)Br.push(_n),_n=kt();if(Br!==r){for(_n=[],mi=qn();mi!==r;)_n.push(mi),mi=qn();if(_n!==r){for(mi=[],Bs=kt();Bs!==r;)mi.push(Bs),Bs=kt();mi!==r?(xt=O,J=Fe(Ke,_n),O=J):(Y=O,O=r)}else Y=O,O=r}else Y=O,O=r}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;else Y=O,O=r;if(O===r){for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();if(J!==r){for(re=[],de=Iu();de!==r;)re.push(de),de=Iu();if(re!==r){for(de=[],Ke=kt();Ke!==r;)de.push(Ke),Ke=kt();if(de!==r){if(Ke=[],ft=Cu(),ft!==r)for(;ft!==r;)Ke.push(ft),ft=Cu();else Ke=r;if(Ke!==r){for(ft=[],dr=kt();dr!==r;)ft.push(dr),dr=kt();ft!==r?(xt=O,J=Ne(re,Ke),O=J):(Y=O,O=r)}else Y=O,O=r}else Y=O,O=r}else Y=O,O=r}else Y=O,O=r;if(O===r){for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();if(J!==r){if(re=[],de=Iu(),de!==r)for(;de!==r;)re.push(de),de=Iu();else re=r;if(re!==r){for(de=[],Ke=kt();Ke!==r;)de.push(Ke),Ke=kt();de!==r?(xt=O,J=Pe(re),O=J):(Y=O,O=r)}else Y=O,O=r}else Y=O,O=r}}}return O}function Ns(){var O,J,re,de,Ke;for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();if(J!==r){if(re=[],de=ki(),de!==r)for(;de!==r;)re.push(de),de=ki();else re=r;if(re!==r){for(de=[],Ke=kt();Ke!==r;)de.push(Ke),Ke=kt();de!==r?(xt=O,J=Ye(re),O=J):(Y=O,O=r)}else Y=O,O=r}else Y=O,O=r;return O}function Cu(){var O,J,re;for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();if(J!==r?(re=qn(),re!==r?(xt=O,J=ke(re),O=J):(Y=O,O=r)):(Y=O,O=r),O===r){for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();J!==r?(re=ki(),re!==r?(xt=O,J=ke(re),O=J):(Y=O,O=r)):(Y=O,O=r)}return O}function qn(){var O,J,re,de,Ke;for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();return J!==r?(it.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(_e)),re===r&&(re=null),re!==r?(de=ss(),de!==r?(Ke=ki(),Ke!==r?(xt=O,J=x(re,de,Ke),O=J):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O}function ss(){var O;return t.substr(Y,2)===w?(O=w,Y+=2):(O=r,mt===0&&wt(b)),O===r&&(t.substr(Y,2)===y?(O=y,Y+=2):(O=r,mt===0&&wt(F)),O===r&&(t.charCodeAt(Y)===62?(O=z,Y++):(O=r,mt===0&&wt(Z)),O===r&&(t.substr(Y,3)===$?(O=$,Y+=3):(O=r,mt===0&&wt(oe)),O===r&&(t.substr(Y,2)===xe?(O=xe,Y+=2):(O=r,mt===0&&wt(Te)),O===r&&(t.charCodeAt(Y)===60?(O=lt,Y++):(O=r,mt===0&&wt(It))))))),O}function ki(){var O,J,re;for(O=Y,J=[],re=kt();re!==r;)J.push(re),re=kt();return J!==r?(re=VA(),re!==r?(xt=O,J=ke(re),O=J):(Y=O,O=r)):(Y=O,O=r),O}function VA(){var O,J,re;if(O=Y,J=[],re=wf(),re!==r)for(;re!==r;)J.push(re),re=wf();else J=r;return J!==r&&(xt=O,J=qt(J)),O=J,O}function wf(){var O,J;return O=Y,J=mn(),J!==r&&(xt=O,J=ir(J)),O=J,O===r&&(O=Y,J=jg(),J!==r&&(xt=O,J=ir(J)),O=J,O===r&&(O=Y,J=qg(),J!==r&&(xt=O,J=ir(J)),O=J,O===r&&(O=Y,J=os(),J!==r&&(xt=O,J=ir(J)),O=J))),O}function mn(){var O,J,re,de;return O=Y,t.substr(Y,2)===Pt?(J=Pt,Y+=2):(J=r,mt===0&&wt(gn)),J!==r?(re=yn(),re!==r?(t.charCodeAt(Y)===39?(de=Pr,Y++):(de=r,mt===0&&wt(Ir)),de!==r?(xt=O,J=Nr(re),O=J):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O}function jg(){var O,J,re,de;return O=Y,t.charCodeAt(Y)===39?(J=Pr,Y++):(J=r,mt===0&&wt(Ir)),J!==r?(re=Bf(),re!==r?(t.charCodeAt(Y)===39?(de=Pr,Y++):(de=r,mt===0&&wt(Ir)),de!==r?(xt=O,J=Nr(re),O=J):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O}function qg(){var O,J,re,de;if(O=Y,t.substr(Y,2)===nn?(J=nn,Y+=2):(J=r,mt===0&&wt(ai)),J!==r&&(xt=O,J=wo()),O=J,O===r)if(O=Y,t.charCodeAt(Y)===34?(J=ns,Y++):(J=r,mt===0&&wt(to)),J!==r){for(re=[],de=xl();de!==r;)re.push(de),de=xl();re!==r?(t.charCodeAt(Y)===34?(de=ns,Y++):(de=r,mt===0&&wt(to)),de!==r?(xt=O,J=Bo(re),O=J):(Y=O,O=r)):(Y=O,O=r)}else Y=O,O=r;return O}function os(){var O,J,re;if(O=Y,J=[],re=ko(),re!==r)for(;re!==r;)J.push(re),re=ko();else J=r;return J!==r&&(xt=O,J=Bo(J)),O=J,O}function xl(){var O,J;return O=Y,J=Xr(),J!==r&&(xt=O,J=ji(J)),O=J,O===r&&(O=Y,J=xh(),J!==r&&(xt=O,J=ro(J)),O=J,O===r&&(O=Y,J=JA(),J!==r&&(xt=O,J=vo(J)),O=J,O===r&&(O=Y,J=vf(),J!==r&&(xt=O,J=RA(J)),O=J))),O}function ko(){var O,J;return O=Y,J=Xr(),J!==r&&(xt=O,J=pf(J)),O=J,O===r&&(O=Y,J=xh(),J!==r&&(xt=O,J=yh(J)),O=J,O===r&&(O=Y,J=JA(),J!==r&&(xt=O,J=Eh(J)),O=J,O===r&&(O=Y,J=By(),J!==r&&(xt=O,J=no(J)),O=J,O===r&&(O=Y,J=Ph(),J!==r&&(xt=O,J=RA(J)),O=J)))),O}function Bf(){var O,J,re;for(O=Y,J=[],jn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(Fs));re!==r;)J.push(re),jn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(Fs));return J!==r&&(xt=O,J=io(J)),O=J,O}function vf(){var O,J,re;if(O=Y,J=[],re=kl(),re===r&&(lu.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(cu))),re!==r)for(;re!==r;)J.push(re),re=kl(),re===r&&(lu.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(cu)));else J=r;return J!==r&&(xt=O,J=io(J)),O=J,O}function kl(){var O,J,re;return O=Y,t.substr(Y,2)===uu?(J=uu,Y+=2):(J=r,mt===0&&wt(FA)),J!==r&&(xt=O,J=NA()),O=J,O===r&&(O=Y,t.charCodeAt(Y)===92?(J=aa,Y++):(J=r,mt===0&&wt(la)),J!==r?(OA.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(gr)),re!==r?(xt=O,J=So(re),O=J):(Y=O,O=r)):(Y=O,O=r)),O}function yn(){var O,J,re;for(O=Y,J=[],re=Qo(),re===r&&(jn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(Fs)));re!==r;)J.push(re),re=Qo(),re===r&&(jn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(Fs)));return J!==r&&(xt=O,J=io(J)),O=J,O}function Qo(){var O,J,re;return O=Y,t.substr(Y,2)===Me?(J=Me,Y+=2):(J=r,mt===0&&wt(fu)),J!==r&&(xt=O,J=Cr()),O=J,O===r&&(O=Y,t.substr(Y,2)===hf?(J=hf,Y+=2):(J=r,mt===0&&wt(LA)),J!==r&&(xt=O,J=MA()),O=J,O===r&&(O=Y,t.charCodeAt(Y)===92?(J=aa,Y++):(J=r,mt===0&&wt(la)),J!==r?(Au.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(pu)),re!==r?(xt=O,J=ac(),O=J):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===ve?(J=ve,Y+=2):(J=r,mt===0&&wt(Nt)),J!==r&&(xt=O,J=lc()),O=J,O===r&&(O=Y,t.substr(Y,2)===Li?(J=Li,Y+=2):(J=r,mt===0&&wt(so)),J!==r&&(xt=O,J=Rt()),O=J,O===r&&(O=Y,t.substr(Y,2)===xn?(J=xn,Y+=2):(J=r,mt===0&&wt(ca)),J!==r&&(xt=O,J=qi()),O=J,O===r&&(O=Y,t.substr(Y,2)===Mi?(J=Mi,Y+=2):(J=r,mt===0&&wt(Oa)),J!==r&&(xt=O,J=dn()),O=J,O===r&&(O=Y,t.substr(Y,2)===Jn?(J=Jn,Y+=2):(J=r,mt===0&&wt(hu)),J!==r&&(xt=O,J=Ih()),O=J,O===r&&(O=Y,t.charCodeAt(Y)===92?(J=aa,Y++):(J=r,mt===0&&wt(la)),J!==r?(La.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(Ma)),re!==r?(xt=O,J=So(re),O=J):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=wu()))))))))),O}function wu(){var O,J,re,de,Ke,ft,dr,Br,_n,mi,Bs,zA;return O=Y,t.charCodeAt(Y)===92?(J=aa,Y++):(J=r,mt===0&&wt(la)),J!==r?(re=ha(),re!==r?(xt=O,J=Ua(re),O=J):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===Xe?(J=Xe,Y+=2):(J=r,mt===0&&wt(Ha)),J!==r?(re=Y,de=Y,Ke=ha(),Ke!==r?(ft=Os(),ft!==r?(Ke=[Ke,ft],de=Ke):(Y=de,de=r)):(Y=de,de=r),de===r&&(de=ha()),de!==r?re=t.substring(re,Y):re=de,re!==r?(xt=O,J=Ua(re),O=J):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===gf?(J=gf,Y+=2):(J=r,mt===0&&wt(cc)),J!==r?(re=Y,de=Y,Ke=Os(),Ke!==r?(ft=Os(),ft!==r?(dr=Os(),dr!==r?(Br=Os(),Br!==r?(Ke=[Ke,ft,dr,Br],de=Ke):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r),de!==r?re=t.substring(re,Y):re=de,re!==r?(xt=O,J=Ua(re),O=J):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===wn?(J=wn,Y+=2):(J=r,mt===0&&wt(ua)),J!==r?(re=Y,de=Y,Ke=Os(),Ke!==r?(ft=Os(),ft!==r?(dr=Os(),dr!==r?(Br=Os(),Br!==r?(_n=Os(),_n!==r?(mi=Os(),mi!==r?(Bs=Os(),Bs!==r?(zA=Os(),zA!==r?(Ke=[Ke,ft,dr,Br,_n,mi,Bs,zA],de=Ke):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r)):(Y=de,de=r),de!==r?re=t.substring(re,Y):re=de,re!==r?(xt=O,J=_A(re),O=J):(Y=O,O=r)):(Y=O,O=r)))),O}function ha(){var O;return UA.test(t.charAt(Y))?(O=t.charAt(Y),Y++):(O=r,mt===0&&wt(fa)),O}function Os(){var O;return vl.test(t.charAt(Y))?(O=t.charAt(Y),Y++):(O=r,mt===0&&wt(Mt)),O}function Ph(){var O,J,re,de,Ke;if(O=Y,J=[],re=Y,t.charCodeAt(Y)===92?(de=aa,Y++):(de=r,mt===0&&wt(la)),de!==r?(t.length>Y?(Ke=t.charAt(Y),Y++):(Ke=r,mt===0&&wt(kn)),Ke!==r?(xt=re,de=So(Ke),re=de):(Y=re,re=r)):(Y=re,re=r),re===r&&(re=Y,t.substr(Y,2)===Aa?(de=Aa,Y+=2):(de=r,mt===0&&wt(ja)),de!==r&&(xt=re,de=is()),re=de,re===r&&(re=Y,de=Y,mt++,Ke=vy(),mt--,Ke===r?de=void 0:(Y=de,de=r),de!==r?(t.length>Y?(Ke=t.charAt(Y),Y++):(Ke=r,mt===0&&wt(kn)),Ke!==r?(xt=re,de=So(Ke),re=de):(Y=re,re=r)):(Y=re,re=r))),re!==r)for(;re!==r;)J.push(re),re=Y,t.charCodeAt(Y)===92?(de=aa,Y++):(de=r,mt===0&&wt(la)),de!==r?(t.length>Y?(Ke=t.charAt(Y),Y++):(Ke=r,mt===0&&wt(kn)),Ke!==r?(xt=re,de=So(Ke),re=de):(Y=re,re=r)):(Y=re,re=r),re===r&&(re=Y,t.substr(Y,2)===Aa?(de=Aa,Y+=2):(de=r,mt===0&&wt(ja)),de!==r&&(xt=re,de=is()),re=de,re===r&&(re=Y,de=Y,mt++,Ke=vy(),mt--,Ke===r?de=void 0:(Y=de,de=r),de!==r?(t.length>Y?(Ke=t.charAt(Y),Y++):(Ke=r,mt===0&&wt(kn)),Ke!==r?(xt=re,de=So(Ke),re=de):(Y=re,re=r)):(Y=re,re=r)));else J=r;return J!==r&&(xt=O,J=io(J)),O=J,O}function KA(){var O,J,re,de,Ke,ft;if(O=Y,t.charCodeAt(Y)===45?(J=uc,Y++):(J=r,mt===0&&wt(gu)),J===r&&(t.charCodeAt(Y)===43?(J=fc,Y++):(J=r,mt===0&&wt(qa))),J===r&&(J=null),J!==r){if(re=[],it.test(t.charAt(Y))?(de=t.charAt(Y),Y++):(de=r,mt===0&&wt(_e)),de!==r)for(;de!==r;)re.push(de),it.test(t.charAt(Y))?(de=t.charAt(Y),Y++):(de=r,mt===0&&wt(_e));else re=r;if(re!==r)if(t.charCodeAt(Y)===46?(de=_i,Y++):(de=r,mt===0&&wt(ws)),de!==r){if(Ke=[],it.test(t.charAt(Y))?(ft=t.charAt(Y),Y++):(ft=r,mt===0&&wt(_e)),ft!==r)for(;ft!==r;)Ke.push(ft),it.test(t.charAt(Y))?(ft=t.charAt(Y),Y++):(ft=r,mt===0&&wt(_e));else Ke=r;Ke!==r?(xt=O,J=Sl(J,re,Ke),O=J):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;if(O===r){if(O=Y,t.charCodeAt(Y)===45?(J=uc,Y++):(J=r,mt===0&&wt(gu)),J===r&&(t.charCodeAt(Y)===43?(J=fc,Y++):(J=r,mt===0&&wt(qa))),J===r&&(J=null),J!==r){if(re=[],it.test(t.charAt(Y))?(de=t.charAt(Y),Y++):(de=r,mt===0&&wt(_e)),de!==r)for(;de!==r;)re.push(de),it.test(t.charAt(Y))?(de=t.charAt(Y),Y++):(de=r,mt===0&&wt(_e));else re=r;re!==r?(xt=O,J=df(J,re),O=J):(Y=O,O=r)}else Y=O,O=r;if(O===r&&(O=Y,J=JA(),J!==r&&(xt=O,J=Ac(J)),O=J,O===r&&(O=Y,J=hc(),J!==r&&(xt=O,J=Bi(J)),O=J,O===r)))if(O=Y,t.charCodeAt(Y)===40?(J=ye,Y++):(J=r,mt===0&&wt(fe)),J!==r){for(re=[],de=kt();de!==r;)re.push(de),de=kt();if(re!==r)if(de=oo(),de!==r){for(Ke=[],ft=kt();ft!==r;)Ke.push(ft),ft=kt();Ke!==r?(t.charCodeAt(Y)===41?(ft=se,Y++):(ft=r,mt===0&&wt(X)),ft!==r?(xt=O,J=Qn(de),O=J):(Y=O,O=r)):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r}return O}function Sf(){var O,J,re,de,Ke,ft,dr,Br;if(O=Y,J=KA(),J!==r){for(re=[],de=Y,Ke=[],ft=kt();ft!==r;)Ke.push(ft),ft=kt();if(Ke!==r)if(t.charCodeAt(Y)===42?(ft=pc,Y++):(ft=r,mt===0&&wt(Je)),ft===r&&(t.charCodeAt(Y)===47?(ft=st,Y++):(ft=r,mt===0&&wt(St))),ft!==r){for(dr=[],Br=kt();Br!==r;)dr.push(Br),Br=kt();dr!==r?(Br=KA(),Br!==r?(xt=de,Ke=lr(J,ft,Br),de=Ke):(Y=de,de=r)):(Y=de,de=r)}else Y=de,de=r;else Y=de,de=r;for(;de!==r;){for(re.push(de),de=Y,Ke=[],ft=kt();ft!==r;)Ke.push(ft),ft=kt();if(Ke!==r)if(t.charCodeAt(Y)===42?(ft=pc,Y++):(ft=r,mt===0&&wt(Je)),ft===r&&(t.charCodeAt(Y)===47?(ft=st,Y++):(ft=r,mt===0&&wt(St))),ft!==r){for(dr=[],Br=kt();Br!==r;)dr.push(Br),Br=kt();dr!==r?(Br=KA(),Br!==r?(xt=de,Ke=lr(J,ft,Br),de=Ke):(Y=de,de=r)):(Y=de,de=r)}else Y=de,de=r;else Y=de,de=r}re!==r?(xt=O,J=ee(J,re),O=J):(Y=O,O=r)}else Y=O,O=r;return O}function oo(){var O,J,re,de,Ke,ft,dr,Br;if(O=Y,J=Sf(),J!==r){for(re=[],de=Y,Ke=[],ft=kt();ft!==r;)Ke.push(ft),ft=kt();if(Ke!==r)if(t.charCodeAt(Y)===43?(ft=fc,Y++):(ft=r,mt===0&&wt(qa)),ft===r&&(t.charCodeAt(Y)===45?(ft=uc,Y++):(ft=r,mt===0&&wt(gu))),ft!==r){for(dr=[],Br=kt();Br!==r;)dr.push(Br),Br=kt();dr!==r?(Br=Sf(),Br!==r?(xt=de,Ke=Ee(J,ft,Br),de=Ke):(Y=de,de=r)):(Y=de,de=r)}else Y=de,de=r;else Y=de,de=r;for(;de!==r;){for(re.push(de),de=Y,Ke=[],ft=kt();ft!==r;)Ke.push(ft),ft=kt();if(Ke!==r)if(t.charCodeAt(Y)===43?(ft=fc,Y++):(ft=r,mt===0&&wt(qa)),ft===r&&(t.charCodeAt(Y)===45?(ft=uc,Y++):(ft=r,mt===0&&wt(gu))),ft!==r){for(dr=[],Br=kt();Br!==r;)dr.push(Br),Br=kt();dr!==r?(Br=Sf(),Br!==r?(xt=de,Ke=Ee(J,ft,Br),de=Ke):(Y=de,de=r)):(Y=de,de=r)}else Y=de,de=r;else Y=de,de=r}re!==r?(xt=O,J=ee(J,re),O=J):(Y=O,O=r)}else Y=O,O=r;return O}function Xr(){var O,J,re,de,Ke,ft;if(O=Y,t.substr(Y,3)===Oe?(J=Oe,Y+=3):(J=r,mt===0&&wt(gt)),J!==r){for(re=[],de=kt();de!==r;)re.push(de),de=kt();if(re!==r)if(de=oo(),de!==r){for(Ke=[],ft=kt();ft!==r;)Ke.push(ft),ft=kt();Ke!==r?(t.substr(Y,2)===yt?(ft=yt,Y+=2):(ft=r,mt===0&&wt(Dt)),ft!==r?(xt=O,J=tr(de),O=J):(Y=O,O=r)):(Y=O,O=r)}else Y=O,O=r;else Y=O,O=r}else Y=O,O=r;return O}function xh(){var O,J,re,de;return O=Y,t.substr(Y,2)===fn?(J=fn,Y+=2):(J=r,mt===0&&wt(li)),J!==r?(re=pa(),re!==r?(t.charCodeAt(Y)===41?(de=se,Y++):(de=r,mt===0&&wt(X)),de!==r?(xt=O,J=Gi(re),O=J):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O}function JA(){var O,J,re,de,Ke,ft;return O=Y,t.substr(Y,2)===Tn?(J=Tn,Y+=2):(J=r,mt===0&&wt(Ga)),J!==r?(re=hc(),re!==r?(t.substr(Y,2)===gy?(de=gy,Y+=2):(de=r,mt===0&&wt(X1)),de!==r?(Ke=Ns(),Ke!==r?(t.charCodeAt(Y)===125?(ft=j,Y++):(ft=r,mt===0&&wt(rt)),ft!==r?(xt=O,J=Do(re,Ke),O=J):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===Tn?(J=Tn,Y+=2):(J=r,mt===0&&wt(Ga)),J!==r?(re=hc(),re!==r?(t.substr(Y,3)===dy?(de=dy,Y+=3):(de=r,mt===0&&wt(Ch)),de!==r?(xt=O,J=$1(re),O=J):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===Tn?(J=Tn,Y+=2):(J=r,mt===0&&wt(Ga)),J!==r?(re=hc(),re!==r?(t.substr(Y,2)===bo?(de=bo,Y+=2):(de=r,mt===0&&wt(wh)),de!==r?(Ke=Ns(),Ke!==r?(t.charCodeAt(Y)===125?(ft=j,Y++):(ft=r,mt===0&&wt(rt)),ft!==r?(xt=O,J=Bh(re,Ke),O=J):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===Tn?(J=Tn,Y+=2):(J=r,mt===0&&wt(Ga)),J!==r?(re=hc(),re!==r?(t.substr(Y,3)===du?(de=du,Y+=3):(de=r,mt===0&&wt(vh)),de!==r?(xt=O,J=Rg(re),O=J):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.substr(Y,2)===Tn?(J=Tn,Y+=2):(J=r,mt===0&&wt(Ga)),J!==r?(re=hc(),re!==r?(t.charCodeAt(Y)===125?(de=j,Y++):(de=r,mt===0&&wt(rt)),de!==r?(xt=O,J=Fg(re),O=J):(Y=O,O=r)):(Y=O,O=r)):(Y=O,O=r),O===r&&(O=Y,t.charCodeAt(Y)===36?(J=Ng,Y++):(J=r,mt===0&&wt(my)),J!==r?(re=hc(),re!==r?(xt=O,J=Fg(re),O=J):(Y=O,O=r)):(Y=O,O=r)))))),O}function By(){var O,J,re;return O=Y,J=Gg(),J!==r?(xt=Y,re=mf(J),re?re=void 0:re=r,re!==r?(xt=O,J=Po(J),O=J):(Y=O,O=r)):(Y=O,O=r),O}function Gg(){var O,J,re,de,Ke;if(O=Y,J=[],re=Y,de=Y,mt++,Ke=Qh(),mt--,Ke===r?de=void 0:(Y=de,de=r),de!==r?(t.length>Y?(Ke=t.charAt(Y),Y++):(Ke=r,mt===0&&wt(kn)),Ke!==r?(xt=re,de=So(Ke),re=de):(Y=re,re=r)):(Y=re,re=r),re!==r)for(;re!==r;)J.push(re),re=Y,de=Y,mt++,Ke=Qh(),mt--,Ke===r?de=void 0:(Y=de,de=r),de!==r?(t.length>Y?(Ke=t.charAt(Y),Y++):(Ke=r,mt===0&&wt(kn)),Ke!==r?(xt=re,de=So(Ke),re=de):(Y=re,re=r)):(Y=re,re=r);else J=r;return J!==r&&(xt=O,J=io(J)),O=J,O}function kh(){var O,J,re;if(O=Y,J=[],Dl.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(Sh)),re!==r)for(;re!==r;)J.push(re),Dl.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(Sh));else J=r;return J!==r&&(xt=O,J=Og()),O=J,O}function hc(){var O,J,re;if(O=Y,J=[],bl.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(Pl)),re!==r)for(;re!==r;)J.push(re),bl.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,mt===0&&wt(Pl));else J=r;return J!==r&&(xt=O,J=Og()),O=J,O}function vy(){var O;return yy.test(t.charAt(Y))?(O=t.charAt(Y),Y++):(O=r,mt===0&&wt(HA)),O}function Qh(){var O;return Ey.test(t.charAt(Y))?(O=t.charAt(Y),Y++):(O=r,mt===0&&wt(Iy)),O}function kt(){var O,J;if(O=[],jA.test(t.charAt(Y))?(J=t.charAt(Y),Y++):(J=r,mt===0&&wt(qA)),J!==r)for(;J!==r;)O.push(J),jA.test(t.charAt(Y))?(J=t.charAt(Y),Y++):(J=r,mt===0&&wt(qA));else O=r;return O}if(mu=a(),mu!==r&&Y===t.length)return mu;throw mu!==r&&Y!1}){try{return(0,Gee.parse)(t,e)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function cE(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:s},a)=>`${Ex(r)}${s===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function Ex(t){return`${uE(t.chain)}${t.then?` ${q_(t.then)}`:""}`}function q_(t){return`${t.type} ${Ex(t.line)}`}function uE(t){return`${W_(t)}${t.then?` ${G_(t.then)}`:""}`}function G_(t){return`${t.type} ${uE(t.chain)}`}function W_(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>mx(e)).join(" ")} `:""}${t.args.map(e=>Y_(e)).join(" ")}`;case"subshell":return`(${cE(t.subshell)})${t.args.length>0?` ${t.args.map(e=>H2(e)).join(" ")}`:""}`;case"group":return`{ ${cE(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>H2(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>mx(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function mx(t){return`${t.name}=${t.args[0]?Bd(t.args[0]):""}`}function Y_(t){switch(t.type){case"redirection":return H2(t);case"argument":return Bd(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function H2(t){return`${t.subtype} ${t.args.map(e=>Bd(e)).join(" ")}`}function Bd(t){return t.segments.map(e=>V_(e)).join("")}function V_(t){let e=(s,a)=>a?`"${s}"`:s,r=s=>s===""?"''":s.match(/[()}<>$|&;"'\n\t ]/)?s.match(/['\t\p{C}]/u)?s.match(/'/)?`"${s.replace(/["$\t\p{C}]/u,z7e)}"`:`$'${s.replace(/[\t\p{C}]/u,Yee)}'`:`'${s}'`:s;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`$(${cE(t.shell)})`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(s=>Bd(s)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(s=>Bd(s)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${Ix(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function Ix(t){let e=a=>{switch(a){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,s=a=>r(Ix(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${s(t.left)} ${e(t.type)} ${s(t.right)}`}}var Gee,Wee,J7e,Yee,z7e,Vee=Ct(()=>{Gee=et(qee());Wee=new Map([["\f","\\f"],[` -`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),J7e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(Wee,([t,e])=>[t,`"$'${e}'"`])]),Yee=t=>Wee.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,z7e=t=>J7e.get(t)??`"$'${Yee(t)}'"`});var Jee=L((zGt,Kee)=>{"use strict";function Z7e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function vd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.location=s,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,vd)}Z7e(vd,Error);vd.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",C;for(C=0;C0){for(C=1,S=1;CAe&&(Ae=W,ce=[]),ce.push(_e))}function rt(_e,x){return new vd(_e,null,null,x)}function Fe(_e,x,w){return new vd(vd.buildMessage(_e,x),_e,x,w)}function Ne(){var _e,x,w,b;return _e=W,x=Pe(),x!==r?(t.charCodeAt(W)===47?(w=n,W++):(w=r,me===0&&j(c)),w!==r?(b=Pe(),b!==r?(te=_e,x=f(x,b),_e=x):(W=_e,_e=r)):(W=_e,_e=r)):(W=_e,_e=r),_e===r&&(_e=W,x=Pe(),x!==r&&(te=_e,x=p(x)),_e=x),_e}function Pe(){var _e,x,w,b;return _e=W,x=Ye(),x!==r?(t.charCodeAt(W)===64?(w=h,W++):(w=r,me===0&&j(E)),w!==r?(b=it(),b!==r?(te=_e,x=C(x,b),_e=x):(W=_e,_e=r)):(W=_e,_e=r)):(W=_e,_e=r),_e===r&&(_e=W,x=Ye(),x!==r&&(te=_e,x=S(x)),_e=x),_e}function Ye(){var _e,x,w,b,y;return _e=W,t.charCodeAt(W)===64?(x=h,W++):(x=r,me===0&&j(E)),x!==r?(w=ke(),w!==r?(t.charCodeAt(W)===47?(b=n,W++):(b=r,me===0&&j(c)),b!==r?(y=ke(),y!==r?(te=_e,x=P(),_e=x):(W=_e,_e=r)):(W=_e,_e=r)):(W=_e,_e=r)):(W=_e,_e=r),_e===r&&(_e=W,x=ke(),x!==r&&(te=_e,x=P()),_e=x),_e}function ke(){var _e,x,w;if(_e=W,x=[],I.test(t.charAt(W))?(w=t.charAt(W),W++):(w=r,me===0&&j(R)),w!==r)for(;w!==r;)x.push(w),I.test(t.charAt(W))?(w=t.charAt(W),W++):(w=r,me===0&&j(R));else x=r;return x!==r&&(te=_e,x=P()),_e=x,_e}function it(){var _e,x,w;if(_e=W,x=[],N.test(t.charAt(W))?(w=t.charAt(W),W++):(w=r,me===0&&j(U)),w!==r)for(;w!==r;)x.push(w),N.test(t.charAt(W))?(w=t.charAt(W),W++):(w=r,me===0&&j(U));else x=r;return x!==r&&(te=_e,x=P()),_e=x,_e}if(pe=a(),pe!==r&&W===t.length)return pe;throw pe!==r&&W{zee=et(Jee())});var Dd=L((XGt,Sd)=>{"use strict";function Xee(t){return typeof t>"u"||t===null}function $7e(t){return typeof t=="object"&&t!==null}function eKe(t){return Array.isArray(t)?t:Xee(t)?[]:[t]}function tKe(t,e){var r,s,a,n;if(e)for(n=Object.keys(e),r=0,s=n.length;r{"use strict";function j2(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}j2.prototype=Object.create(Error.prototype);j2.prototype.constructor=j2;j2.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};$ee.exports=j2});var rte=L((e5t,tte)=>{"use strict";var ete=Dd();function K_(t,e,r,s,a){this.name=t,this.buffer=e,this.position=r,this.line=s,this.column=a}K_.prototype.getSnippet=function(e,r){var s,a,n,c,f;if(!this.buffer)return null;for(e=e||4,r=r||75,s="",a=this.position;a>0&&`\0\r -\x85\u2028\u2029`.indexOf(this.buffer.charAt(a-1))===-1;)if(a-=1,this.position-a>r/2-1){s=" ... ",a+=5;break}for(n="",c=this.position;cr/2-1){n=" ... ",c-=5;break}return f=this.buffer.slice(a,c),ete.repeat(" ",e)+s+f+n+` -`+ete.repeat(" ",e+this.position-a+s.length)+"^"};K_.prototype.toString=function(e){var r,s="";return this.name&&(s+='in "'+this.name+'" '),s+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(s+=`: -`+r)),s};tte.exports=K_});var bs=L((t5t,ite)=>{"use strict";var nte=fE(),iKe=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],sKe=["scalar","sequence","mapping"];function oKe(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(s){e[String(s)]=r})}),e}function aKe(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(iKe.indexOf(r)===-1)throw new nte('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=oKe(e.styleAliases||null),sKe.indexOf(this.kind)===-1)throw new nte('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}ite.exports=aKe});var bd=L((r5t,ote)=>{"use strict";var ste=Dd(),Bx=fE(),lKe=bs();function J_(t,e,r){var s=[];return t.include.forEach(function(a){r=J_(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,c){n.tag===a.tag&&n.kind===a.kind&&s.push(c)}),r.push(a)}),r.filter(function(a,n){return s.indexOf(n)===-1})}function cKe(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function s(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var uKe=bs();ate.exports=new uKe("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var ute=L((i5t,cte)=>{"use strict";var fKe=bs();cte.exports=new fKe("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var Ate=L((s5t,fte)=>{"use strict";var AKe=bs();fte.exports=new AKe("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var vx=L((o5t,pte)=>{"use strict";var pKe=bd();pte.exports=new pKe({explicit:[lte(),ute(),Ate()]})});var gte=L((a5t,hte)=>{"use strict";var hKe=bs();function gKe(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function dKe(){return null}function mKe(t){return t===null}hte.exports=new hKe("tag:yaml.org,2002:null",{kind:"scalar",resolve:gKe,construct:dKe,predicate:mKe,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var mte=L((l5t,dte)=>{"use strict";var yKe=bs();function EKe(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function IKe(t){return t==="true"||t==="True"||t==="TRUE"}function CKe(t){return Object.prototype.toString.call(t)==="[object Boolean]"}dte.exports=new yKe("tag:yaml.org,2002:bool",{kind:"scalar",resolve:EKe,construct:IKe,predicate:CKe,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})});var Ete=L((c5t,yte)=>{"use strict";var wKe=Dd(),BKe=bs();function vKe(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function SKe(t){return 48<=t&&t<=55}function DKe(t){return 48<=t&&t<=57}function bKe(t){if(t===null)return!1;var e=t.length,r=0,s=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var wte=L((u5t,Cte)=>{"use strict";var Ite=Dd(),kKe=bs(),QKe=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function TKe(t){return!(t===null||!QKe.test(t)||t[t.length-1]==="_")}function RKe(t){var e,r,s,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(n){a.unshift(parseFloat(n,10))}),e=0,s=1,a.forEach(function(n){e+=n*s,s*=60}),r*e):r*parseFloat(e,10)}var FKe=/^[-+]?[0-9]+e/;function NKe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Ite.isNegativeZero(t))return"-0.0";return r=t.toString(10),FKe.test(r)?r.replace("e",".e"):r}function OKe(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||Ite.isNegativeZero(t))}Cte.exports=new kKe("tag:yaml.org,2002:float",{kind:"scalar",resolve:TKe,construct:RKe,predicate:OKe,represent:NKe,defaultStyle:"lowercase"})});var z_=L((f5t,Bte)=>{"use strict";var LKe=bd();Bte.exports=new LKe({include:[vx()],implicit:[gte(),mte(),Ete(),wte()]})});var Z_=L((A5t,vte)=>{"use strict";var MKe=bd();vte.exports=new MKe({include:[z_()]})});var Pte=L((p5t,bte)=>{"use strict";var _Ke=bs(),Ste=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Dte=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function UKe(t){return t===null?!1:Ste.exec(t)!==null||Dte.exec(t)!==null}function HKe(t){var e,r,s,a,n,c,f,p=0,h=null,E,C,S;if(e=Ste.exec(t),e===null&&(e=Dte.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],s=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,s,a));if(n=+e[4],c=+e[5],f=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],C=+(e[11]||0),h=(E*60+C)*6e4,e[9]==="-"&&(h=-h)),S=new Date(Date.UTC(r,s,a,n,c,f,p)),h&&S.setTime(S.getTime()-h),S}function jKe(t){return t.toISOString()}bte.exports=new _Ke("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:UKe,construct:HKe,instanceOf:Date,represent:jKe})});var kte=L((h5t,xte)=>{"use strict";var qKe=bs();function GKe(t){return t==="<<"||t===null}xte.exports=new qKe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:GKe})});var Rte=L((g5t,Tte)=>{"use strict";var Pd;try{Qte=Ie,Pd=Qte("buffer").Buffer}catch{}var Qte,WKe=bs(),X_=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function YKe(t){if(t===null)return!1;var e,r,s=0,a=t.length,n=X_;for(r=0;r64)){if(e<0)return!1;s+=6}return s%8===0}function VKe(t){var e,r,s=t.replace(/[\r\n=]/g,""),a=s.length,n=X_,c=0,f=[];for(e=0;e>16&255),f.push(c>>8&255),f.push(c&255)),c=c<<6|n.indexOf(s.charAt(e));return r=a%4*6,r===0?(f.push(c>>16&255),f.push(c>>8&255),f.push(c&255)):r===18?(f.push(c>>10&255),f.push(c>>2&255)):r===12&&f.push(c>>4&255),Pd?Pd.from?Pd.from(f):new Pd(f):f}function KKe(t){var e="",r=0,s,a,n=t.length,c=X_;for(s=0;s>18&63],e+=c[r>>12&63],e+=c[r>>6&63],e+=c[r&63]),r=(r<<8)+t[s];return a=n%3,a===0?(e+=c[r>>18&63],e+=c[r>>12&63],e+=c[r>>6&63],e+=c[r&63]):a===2?(e+=c[r>>10&63],e+=c[r>>4&63],e+=c[r<<2&63],e+=c[64]):a===1&&(e+=c[r>>2&63],e+=c[r<<4&63],e+=c[64],e+=c[64]),e}function JKe(t){return Pd&&Pd.isBuffer(t)}Tte.exports=new WKe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:YKe,construct:VKe,predicate:JKe,represent:KKe})});var Nte=L((m5t,Fte)=>{"use strict";var zKe=bs(),ZKe=Object.prototype.hasOwnProperty,XKe=Object.prototype.toString;function $Ke(t){if(t===null)return!0;var e=[],r,s,a,n,c,f=t;for(r=0,s=f.length;r{"use strict";var tJe=bs(),rJe=Object.prototype.toString;function nJe(t){if(t===null)return!0;var e,r,s,a,n,c=t;for(n=new Array(c.length),e=0,r=c.length;e{"use strict";var sJe=bs(),oJe=Object.prototype.hasOwnProperty;function aJe(t){if(t===null)return!0;var e,r=t;for(e in r)if(oJe.call(r,e)&&r[e]!==null)return!1;return!0}function lJe(t){return t!==null?t:{}}Mte.exports=new sJe("tag:yaml.org,2002:set",{kind:"mapping",resolve:aJe,construct:lJe})});var pE=L((I5t,Ute)=>{"use strict";var cJe=bd();Ute.exports=new cJe({include:[Z_()],implicit:[Pte(),kte()],explicit:[Rte(),Nte(),Lte(),_te()]})});var jte=L((C5t,Hte)=>{"use strict";var uJe=bs();function fJe(){return!0}function AJe(){}function pJe(){return""}function hJe(t){return typeof t>"u"}Hte.exports=new uJe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:fJe,construct:AJe,predicate:hJe,represent:pJe})});var Gte=L((w5t,qte)=>{"use strict";var gJe=bs();function dJe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),s="";return!(e[0]==="/"&&(r&&(s=r[1]),s.length>3||e[e.length-s.length-1]!=="/"))}function mJe(t){var e=t,r=/\/([gim]*)$/.exec(t),s="";return e[0]==="/"&&(r&&(s=r[1]),e=e.slice(1,e.length-s.length-1)),new RegExp(e,s)}function yJe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function EJe(t){return Object.prototype.toString.call(t)==="[object RegExp]"}qte.exports=new gJe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:dJe,construct:mJe,predicate:EJe,represent:yJe})});var Vte=L((B5t,Yte)=>{"use strict";var Sx;try{Wte=Ie,Sx=Wte("esprima")}catch{typeof window<"u"&&(Sx=window.esprima)}var Wte,IJe=bs();function CJe(t){if(t===null)return!1;try{var e="("+t+")",r=Sx.parse(e,{range:!0});return!(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function wJe(t){var e="("+t+")",r=Sx.parse(e,{range:!0}),s=[],a;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(n){s.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(s,e.slice(a[0]+1,a[1]-1)):new Function(s,"return "+e.slice(a[0],a[1]))}function BJe(t){return t.toString()}function vJe(t){return Object.prototype.toString.call(t)==="[object Function]"}Yte.exports=new IJe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:CJe,construct:wJe,predicate:vJe,represent:BJe})});var q2=L((S5t,Jte)=>{"use strict";var Kte=bd();Jte.exports=Kte.DEFAULT=new Kte({include:[pE()],explicit:[jte(),Gte(),Vte()]})});var hre=L((D5t,G2)=>{"use strict";var wp=Dd(),rre=fE(),SJe=rte(),nre=pE(),DJe=q2(),o0=Object.prototype.hasOwnProperty,Dx=1,ire=2,sre=3,bx=4,$_=1,bJe=2,zte=3,PJe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,xJe=/[\x85\u2028\u2029]/,kJe=/[,\[\]\{\}]/,ore=/^(?:!|!!|![a-z\-]+!)$/i,are=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function Zte(t){return Object.prototype.toString.call(t)}function qf(t){return t===10||t===13}function kd(t){return t===9||t===32}function nl(t){return t===9||t===32||t===10||t===13}function hE(t){return t===44||t===91||t===93||t===123||t===125}function QJe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function TJe(t){return t===120?2:t===117?4:t===85?8:0}function RJe(t){return 48<=t&&t<=57?t-48:-1}function Xte(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` -`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function FJe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var lre=new Array(256),cre=new Array(256);for(xd=0;xd<256;xd++)lre[xd]=Xte(xd)?1:0,cre[xd]=Xte(xd);var xd;function NJe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||DJe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function ure(t,e){return new rre(e,new SJe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Rr(t,e){throw ure(t,e)}function Px(t,e){t.onWarning&&t.onWarning.call(null,ure(t,e))}var $te={YAML:function(e,r,s){var a,n,c;e.version!==null&&Rr(e,"duplication of %YAML directive"),s.length!==1&&Rr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(s[0]),a===null&&Rr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),c=parseInt(a[2],10),n!==1&&Rr(e,"unacceptable YAML version of the document"),e.version=s[0],e.checkLineBreaks=c<2,c!==1&&c!==2&&Px(e,"unsupported YAML version of the document")},TAG:function(e,r,s){var a,n;s.length!==2&&Rr(e,"TAG directive accepts exactly two arguments"),a=s[0],n=s[1],ore.test(a)||Rr(e,"ill-formed tag handle (first argument) of the TAG directive"),o0.call(e.tagMap,a)&&Rr(e,'there is a previously declared suffix for "'+a+'" tag handle'),are.test(n)||Rr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function s0(t,e,r,s){var a,n,c,f;if(e1&&(t.result+=wp.repeat(` -`,e-1))}function OJe(t,e,r){var s,a,n,c,f,p,h,E,C=t.kind,S=t.result,P;if(P=t.input.charCodeAt(t.position),nl(P)||hE(P)||P===35||P===38||P===42||P===33||P===124||P===62||P===39||P===34||P===37||P===64||P===96||(P===63||P===45)&&(a=t.input.charCodeAt(t.position+1),nl(a)||r&&hE(a)))return!1;for(t.kind="scalar",t.result="",n=c=t.position,f=!1;P!==0;){if(P===58){if(a=t.input.charCodeAt(t.position+1),nl(a)||r&&hE(a))break}else if(P===35){if(s=t.input.charCodeAt(t.position-1),nl(s))break}else{if(t.position===t.lineStart&&xx(t)||r&&hE(P))break;if(qf(P))if(p=t.line,h=t.lineStart,E=t.lineIndent,ls(t,!1,-1),t.lineIndent>=e){f=!0,P=t.input.charCodeAt(t.position);continue}else{t.position=c,t.line=p,t.lineStart=h,t.lineIndent=E;break}}f&&(s0(t,n,c,!1),tU(t,t.line-p),n=c=t.position,f=!1),kd(P)||(c=t.position+1),P=t.input.charCodeAt(++t.position)}return s0(t,n,c,!1),t.result?!0:(t.kind=C,t.result=S,!1)}function LJe(t,e){var r,s,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,s=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(s0(t,s,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)s=t.position,t.position++,a=t.position;else return!0;else qf(r)?(s0(t,s,a,!0),tU(t,ls(t,!1,e)),s=a=t.position):t.position===t.lineStart&&xx(t)?Rr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Rr(t,"unexpected end of the stream within a single quoted scalar")}function MJe(t,e){var r,s,a,n,c,f;if(f=t.input.charCodeAt(t.position),f!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=s=t.position;(f=t.input.charCodeAt(t.position))!==0;){if(f===34)return s0(t,r,t.position,!0),t.position++,!0;if(f===92){if(s0(t,r,t.position,!0),f=t.input.charCodeAt(++t.position),qf(f))ls(t,!1,e);else if(f<256&&lre[f])t.result+=cre[f],t.position++;else if((c=TJe(f))>0){for(a=c,n=0;a>0;a--)f=t.input.charCodeAt(++t.position),(c=QJe(f))>=0?n=(n<<4)+c:Rr(t,"expected hexadecimal character");t.result+=FJe(n),t.position++}else Rr(t,"unknown escape sequence");r=s=t.position}else qf(f)?(s0(t,r,s,!0),tU(t,ls(t,!1,e)),r=s=t.position):t.position===t.lineStart&&xx(t)?Rr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,s=t.position)}Rr(t,"unexpected end of the stream within a double quoted scalar")}function _Je(t,e){var r=!0,s,a=t.tag,n,c=t.anchor,f,p,h,E,C,S={},P,I,R,N;if(N=t.input.charCodeAt(t.position),N===91)p=93,C=!1,n=[];else if(N===123)p=125,C=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),N=t.input.charCodeAt(++t.position);N!==0;){if(ls(t,!0,e),N=t.input.charCodeAt(t.position),N===p)return t.position++,t.tag=a,t.anchor=c,t.kind=C?"mapping":"sequence",t.result=n,!0;r||Rr(t,"missed comma between flow collection entries"),I=P=R=null,h=E=!1,N===63&&(f=t.input.charCodeAt(t.position+1),nl(f)&&(h=E=!0,t.position++,ls(t,!0,e))),s=t.line,dE(t,e,Dx,!1,!0),I=t.tag,P=t.result,ls(t,!0,e),N=t.input.charCodeAt(t.position),(E||t.line===s)&&N===58&&(h=!0,N=t.input.charCodeAt(++t.position),ls(t,!0,e),dE(t,e,Dx,!1,!0),R=t.result),C?gE(t,n,S,I,P,R):h?n.push(gE(t,null,S,I,P,R)):n.push(P),ls(t,!0,e),N=t.input.charCodeAt(t.position),N===44?(r=!0,N=t.input.charCodeAt(++t.position)):r=!1}Rr(t,"unexpected end of the stream within a flow collection")}function UJe(t,e){var r,s,a=$_,n=!1,c=!1,f=e,p=0,h=!1,E,C;if(C=t.input.charCodeAt(t.position),C===124)s=!1;else if(C===62)s=!0;else return!1;for(t.kind="scalar",t.result="";C!==0;)if(C=t.input.charCodeAt(++t.position),C===43||C===45)$_===a?a=C===43?zte:bJe:Rr(t,"repeat of a chomping mode identifier");else if((E=RJe(C))>=0)E===0?Rr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?Rr(t,"repeat of an indentation width identifier"):(f=e+E-1,c=!0);else break;if(kd(C)){do C=t.input.charCodeAt(++t.position);while(kd(C));if(C===35)do C=t.input.charCodeAt(++t.position);while(!qf(C)&&C!==0)}for(;C!==0;){for(eU(t),t.lineIndent=0,C=t.input.charCodeAt(t.position);(!c||t.lineIndentf&&(f=t.lineIndent),qf(C)){p++;continue}if(t.lineIndente)&&p!==0)Rr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(dE(t,e,bx,!0,a)&&(I?S=t.result:P=t.result),I||(gE(t,h,E,C,S,P,n,c),C=S=P=null),ls(t,!0,-1),N=t.input.charCodeAt(t.position)),t.lineIndent>e&&N!==0)Rr(t,"bad indentation of a mapping entry");else if(t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),C=0,S=t.implicitTypes.length;C tag; it should be "'+P.kind+'", not "'+t.kind+'"'),P.resolve(t.result)?(t.result=P.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Rr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Rr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function WJe(t){var e=t.position,r,s,a,n=!1,c;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(c=t.input.charCodeAt(t.position))!==0&&(ls(t,!0,-1),c=t.input.charCodeAt(t.position),!(t.lineIndent>0||c!==37));){for(n=!0,c=t.input.charCodeAt(++t.position),r=t.position;c!==0&&!nl(c);)c=t.input.charCodeAt(++t.position);for(s=t.input.slice(r,t.position),a=[],s.length<1&&Rr(t,"directive name must not be less than one character in length");c!==0;){for(;kd(c);)c=t.input.charCodeAt(++t.position);if(c===35){do c=t.input.charCodeAt(++t.position);while(c!==0&&!qf(c));break}if(qf(c))break;for(r=t.position;c!==0&&!nl(c);)c=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}c!==0&&eU(t),o0.call($te,s)?$te[s](t,s,a):Px(t,'unknown document directive "'+s+'"')}if(ls(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,ls(t,!0,-1)):n&&Rr(t,"directives end mark is expected"),dE(t,t.lineIndent-1,bx,!1,!0),ls(t,!0,-1),t.checkLineBreaks&&xJe.test(t.input.slice(e,t.position))&&Px(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&xx(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,ls(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var s=fre(t,r);if(typeof e!="function")return s;for(var a=0,n=s.length;a"u"&&(r=e,e=null),Are(t,e,wp.extend({schema:nre},r))}function VJe(t,e){return pre(t,wp.extend({schema:nre},e))}G2.exports.loadAll=Are;G2.exports.load=pre;G2.exports.safeLoadAll=YJe;G2.exports.safeLoad=VJe});var Lre=L((b5t,sU)=>{"use strict";var Y2=Dd(),V2=fE(),KJe=q2(),JJe=pE(),wre=Object.prototype.toString,Bre=Object.prototype.hasOwnProperty,zJe=9,W2=10,ZJe=13,XJe=32,$Je=33,eze=34,vre=35,tze=37,rze=38,nze=39,ize=42,Sre=44,sze=45,Dre=58,oze=61,aze=62,lze=63,cze=64,bre=91,Pre=93,uze=96,xre=123,fze=124,kre=125,jo={};jo[0]="\\0";jo[7]="\\a";jo[8]="\\b";jo[9]="\\t";jo[10]="\\n";jo[11]="\\v";jo[12]="\\f";jo[13]="\\r";jo[27]="\\e";jo[34]='\\"';jo[92]="\\\\";jo[133]="\\N";jo[160]="\\_";jo[8232]="\\L";jo[8233]="\\P";var Aze=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function pze(t,e){var r,s,a,n,c,f,p;if(e===null)return{};for(r={},s=Object.keys(e),a=0,n=s.length;a0?t.charCodeAt(n-1):null,S=S&&mre(c,f)}else{for(n=0;ns&&t[C+1]!==" ",C=n);else if(!mE(c))return kx;f=n>0?t.charCodeAt(n-1):null,S=S&&mre(c,f)}h=h||E&&n-C-1>s&&t[C+1]!==" "}return!p&&!h?S&&!a(t)?Tre:Rre:r>9&&Qre(t)?kx:h?Nre:Fre}function Eze(t,e,r,s){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&Aze.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),c=s||t.flowLevel>-1&&r>=t.flowLevel;function f(p){return gze(t,p)}switch(yze(e,c,t.indent,n,f)){case Tre:return e;case Rre:return"'"+e.replace(/'/g,"''")+"'";case Fre:return"|"+yre(e,t.indent)+Ere(dre(e,a));case Nre:return">"+yre(e,t.indent)+Ere(dre(Ize(e,n),a));case kx:return'"'+Cze(e,n)+'"';default:throw new V2("impossible error: invalid scalar style")}}()}function yre(t,e){var r=Qre(t)?String(e):"",s=t[t.length-1]===` -`,a=s&&(t[t.length-2]===` -`||t===` -`),n=a?"+":s?"":"-";return r+n+` -`}function Ere(t){return t[t.length-1]===` -`?t.slice(0,-1):t}function Ize(t,e){for(var r=/(\n+)([^\n]*)/g,s=function(){var h=t.indexOf(` -`);return h=h!==-1?h:t.length,r.lastIndex=h,Ire(t.slice(0,h),e)}(),a=t[0]===` -`||t[0]===" ",n,c;c=r.exec(t);){var f=c[1],p=c[2];n=p[0]===" ",s+=f+(!a&&!n&&p!==""?` -`:"")+Ire(p,e),a=n}return s}function Ire(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,s,a=0,n,c=0,f=0,p="";s=r.exec(t);)f=s.index,f-a>e&&(n=c>a?c:f,p+=` -`+t.slice(a,n),a=n+1),c=f;return p+=` -`,t.length-a>e&&c>a?p+=t.slice(a,c)+` -`+t.slice(c+1):p+=t.slice(a),p.slice(1)}function Cze(t){for(var e="",r,s,a,n=0;n=55296&&r<=56319&&(s=t.charCodeAt(n+1),s>=56320&&s<=57343)){e+=gre((r-55296)*1024+s-56320+65536),n++;continue}a=jo[r],e+=!a&&mE(r)?t[n]:a||gre(r)}return e}function wze(t,e,r){var s="",a=t.tag,n,c;for(n=0,c=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Qd(t,e,h,!1,!1)&&(E+=t.dump,s+=E));t.tag=a,t.dump="{"+s+"}"}function Sze(t,e,r,s){var a="",n=t.tag,c=Object.keys(r),f,p,h,E,C,S;if(t.sortKeys===!0)c.sort();else if(typeof t.sortKeys=="function")c.sort(t.sortKeys);else if(t.sortKeys)throw new V2("sortKeys must be a boolean or a function");for(f=0,p=c.length;f1024,C&&(t.dump&&W2===t.dump.charCodeAt(0)?S+="?":S+="? "),S+=t.dump,C&&(S+=rU(t,e)),Qd(t,e+1,E,!0,C)&&(t.dump&&W2===t.dump.charCodeAt(0)?S+=":":S+=": ",S+=t.dump,a+=S));t.tag=n,t.dump=a||"{}"}function Cre(t,e,r){var s,a,n,c,f,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,c=a.length;n tag resolver accepts not "'+p+'" style');t.dump=s}return!0}return!1}function Qd(t,e,r,s,a,n){t.tag=null,t.dump=r,Cre(t,r,!1)||Cre(t,r,!0);var c=wre.call(t.dump);s&&(s=t.flowLevel<0||t.flowLevel>e);var f=c==="[object Object]"||c==="[object Array]",p,h;if(f&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(f&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),c==="[object Object]")s&&Object.keys(t.dump).length!==0?(Sze(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(vze(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(c==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;s&&t.dump.length!==0?(Bze(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(wze(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(c==="[object String]")t.tag!=="?"&&Eze(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new V2("unacceptable kind of an object to dump "+c)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function Dze(t,e){var r=[],s=[],a,n;for(nU(t,r,s),a=0,n=s.length;a{"use strict";var Qx=hre(),Mre=Lre();function Tx(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}Wi.exports.Type=bs();Wi.exports.Schema=bd();Wi.exports.FAILSAFE_SCHEMA=vx();Wi.exports.JSON_SCHEMA=z_();Wi.exports.CORE_SCHEMA=Z_();Wi.exports.DEFAULT_SAFE_SCHEMA=pE();Wi.exports.DEFAULT_FULL_SCHEMA=q2();Wi.exports.load=Qx.load;Wi.exports.loadAll=Qx.loadAll;Wi.exports.safeLoad=Qx.safeLoad;Wi.exports.safeLoadAll=Qx.safeLoadAll;Wi.exports.dump=Mre.dump;Wi.exports.safeDump=Mre.safeDump;Wi.exports.YAMLException=fE();Wi.exports.MINIMAL_SCHEMA=vx();Wi.exports.SAFE_SCHEMA=pE();Wi.exports.DEFAULT_SCHEMA=q2();Wi.exports.scan=Tx("scan");Wi.exports.parse=Tx("parse");Wi.exports.compose=Tx("compose");Wi.exports.addConstructor=Tx("addConstructor")});var Hre=L((x5t,Ure)=>{"use strict";var Pze=_re();Ure.exports=Pze});var qre=L((k5t,jre)=>{"use strict";function xze(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Td(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.location=s,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Td)}xze(Td,Error);Td.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",C;for(C=0;C0){for(C=1,S=1;C({[gt]:Oe})))},Ae=function(ee){return ee},ce=function(ee){return ee},me=La("correct indentation"),pe=" ",Be=dn(" ",!1),Ce=function(ee){return ee.length===lr*St},g=function(ee){return ee.length===(lr+1)*St},we=function(){return lr++,!0},ye=function(){return lr--,!0},fe=function(){return ca()},se=La("pseudostring"),X=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,De=Jn(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),Re=/^[^\r\n\t ,\][{}:#"']/,dt=Jn(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),j=function(){return ca().replace(/^ *| *$/g,"")},rt="--",Fe=dn("--",!1),Ne=/^[a-zA-Z\/0-9]/,Pe=Jn([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),Ye=/^[^\r\n\t :,]/,ke=Jn(["\r",` -`," "," ",":",","],!0,!1),it="null",_e=dn("null",!1),x=function(){return null},w="true",b=dn("true",!1),y=function(){return!0},F="false",z=dn("false",!1),Z=function(){return!1},$=La("string"),oe='"',xe=dn('"',!1),Te=function(){return""},lt=function(ee){return ee},It=function(ee){return ee.join("")},qt=/^[^"\\\0-\x1F\x7F]/,ir=Jn(['"',"\\",["\0",""],"\x7F"],!0,!1),Pt='\\"',gn=dn('\\"',!1),Pr=function(){return'"'},Ir="\\\\",Nr=dn("\\\\",!1),nn=function(){return"\\"},ai="\\/",wo=dn("\\/",!1),ns=function(){return"/"},to="\\b",Bo=dn("\\b",!1),ji=function(){return"\b"},ro="\\f",vo=dn("\\f",!1),RA=function(){return"\f"},pf="\\n",yh=dn("\\n",!1),Eh=function(){return` -`},no="\\r",jn=dn("\\r",!1),Fs=function(){return"\r"},io="\\t",lu=dn("\\t",!1),cu=function(){return" "},uu="\\u",FA=dn("\\u",!1),NA=function(ee,Ee,Oe,gt){return String.fromCharCode(parseInt(`0x${ee}${Ee}${Oe}${gt}`))},aa=/^[0-9a-fA-F]/,la=Jn([["0","9"],["a","f"],["A","F"]],!1,!1),OA=La("blank space"),gr=/^[ \t]/,So=Jn([" "," "],!1,!1),Me=La("white space"),fu=/^[ \t\n\r]/,Cr=Jn([" "," ",` -`,"\r"],!1,!1),hf=`\r -`,LA=dn(`\r -`,!1),MA=` -`,Au=dn(` -`,!1),pu="\r",ac=dn("\r",!1),ve=0,Nt=0,lc=[{line:1,column:1}],Li=0,so=[],Rt=0,xn;if("startRule"in e){if(!(e.startRule in s))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=s[e.startRule]}function ca(){return t.substring(Nt,ve)}function qi(){return Ua(Nt,ve)}function Mi(ee,Ee){throw Ee=Ee!==void 0?Ee:Ua(Nt,ve),gf([La(ee)],t.substring(Nt,ve),Ee)}function Oa(ee,Ee){throw Ee=Ee!==void 0?Ee:Ua(Nt,ve),Ha(ee,Ee)}function dn(ee,Ee){return{type:"literal",text:ee,ignoreCase:Ee}}function Jn(ee,Ee,Oe){return{type:"class",parts:ee,inverted:Ee,ignoreCase:Oe}}function hu(){return{type:"any"}}function Ih(){return{type:"end"}}function La(ee){return{type:"other",description:ee}}function Ma(ee){var Ee=lc[ee],Oe;if(Ee)return Ee;for(Oe=ee-1;!lc[Oe];)Oe--;for(Ee=lc[Oe],Ee={line:Ee.line,column:Ee.column};OeLi&&(Li=ve,so=[]),so.push(ee))}function Ha(ee,Ee){return new Td(ee,null,null,Ee)}function gf(ee,Ee,Oe){return new Td(Td.buildMessage(ee,Ee),ee,Ee,Oe)}function cc(){var ee;return ee=_A(),ee}function wn(){var ee,Ee,Oe;for(ee=ve,Ee=[],Oe=ua();Oe!==r;)Ee.push(Oe),Oe=ua();return Ee!==r&&(Nt=ee,Ee=n(Ee)),ee=Ee,ee}function ua(){var ee,Ee,Oe,gt,yt;return ee=ve,Ee=vl(),Ee!==r?(t.charCodeAt(ve)===45?(Oe=c,ve++):(Oe=r,Rt===0&&Xe(f)),Oe!==r?(gt=Qn(),gt!==r?(yt=fa(),yt!==r?(Nt=ee,Ee=p(yt),ee=Ee):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r),ee}function _A(){var ee,Ee,Oe;for(ee=ve,Ee=[],Oe=UA();Oe!==r;)Ee.push(Oe),Oe=UA();return Ee!==r&&(Nt=ee,Ee=h(Ee)),ee=Ee,ee}function UA(){var ee,Ee,Oe,gt,yt,Dt,tr,fn,li;if(ee=ve,Ee=Qn(),Ee===r&&(Ee=null),Ee!==r){if(Oe=ve,t.charCodeAt(ve)===35?(gt=E,ve++):(gt=r,Rt===0&&Xe(C)),gt!==r){if(yt=[],Dt=ve,tr=ve,Rt++,fn=st(),Rt--,fn===r?tr=void 0:(ve=tr,tr=r),tr!==r?(t.length>ve?(fn=t.charAt(ve),ve++):(fn=r,Rt===0&&Xe(S)),fn!==r?(tr=[tr,fn],Dt=tr):(ve=Dt,Dt=r)):(ve=Dt,Dt=r),Dt!==r)for(;Dt!==r;)yt.push(Dt),Dt=ve,tr=ve,Rt++,fn=st(),Rt--,fn===r?tr=void 0:(ve=tr,tr=r),tr!==r?(t.length>ve?(fn=t.charAt(ve),ve++):(fn=r,Rt===0&&Xe(S)),fn!==r?(tr=[tr,fn],Dt=tr):(ve=Dt,Dt=r)):(ve=Dt,Dt=r);else yt=r;yt!==r?(gt=[gt,yt],Oe=gt):(ve=Oe,Oe=r)}else ve=Oe,Oe=r;if(Oe===r&&(Oe=null),Oe!==r){if(gt=[],yt=Je(),yt!==r)for(;yt!==r;)gt.push(yt),yt=Je();else gt=r;gt!==r?(Nt=ee,Ee=P(),ee=Ee):(ve=ee,ee=r)}else ve=ee,ee=r}else ve=ee,ee=r;if(ee===r&&(ee=ve,Ee=vl(),Ee!==r?(Oe=ja(),Oe!==r?(gt=Qn(),gt===r&&(gt=null),gt!==r?(t.charCodeAt(ve)===58?(yt=I,ve++):(yt=r,Rt===0&&Xe(R)),yt!==r?(Dt=Qn(),Dt===r&&(Dt=null),Dt!==r?(tr=fa(),tr!==r?(Nt=ee,Ee=N(Oe,tr),ee=Ee):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r),ee===r&&(ee=ve,Ee=vl(),Ee!==r?(Oe=is(),Oe!==r?(gt=Qn(),gt===r&&(gt=null),gt!==r?(t.charCodeAt(ve)===58?(yt=I,ve++):(yt=r,Rt===0&&Xe(R)),yt!==r?(Dt=Qn(),Dt===r&&(Dt=null),Dt!==r?(tr=fa(),tr!==r?(Nt=ee,Ee=N(Oe,tr),ee=Ee):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r),ee===r))){if(ee=ve,Ee=vl(),Ee!==r)if(Oe=is(),Oe!==r)if(gt=Qn(),gt!==r)if(yt=gu(),yt!==r){if(Dt=[],tr=Je(),tr!==r)for(;tr!==r;)Dt.push(tr),tr=Je();else Dt=r;Dt!==r?(Nt=ee,Ee=N(Oe,yt),ee=Ee):(ve=ee,ee=r)}else ve=ee,ee=r;else ve=ee,ee=r;else ve=ee,ee=r;else ve=ee,ee=r;if(ee===r)if(ee=ve,Ee=vl(),Ee!==r)if(Oe=is(),Oe!==r){if(gt=[],yt=ve,Dt=Qn(),Dt===r&&(Dt=null),Dt!==r?(t.charCodeAt(ve)===44?(tr=U,ve++):(tr=r,Rt===0&&Xe(W)),tr!==r?(fn=Qn(),fn===r&&(fn=null),fn!==r?(li=is(),li!==r?(Nt=yt,Dt=te(Oe,li),yt=Dt):(ve=yt,yt=r)):(ve=yt,yt=r)):(ve=yt,yt=r)):(ve=yt,yt=r),yt!==r)for(;yt!==r;)gt.push(yt),yt=ve,Dt=Qn(),Dt===r&&(Dt=null),Dt!==r?(t.charCodeAt(ve)===44?(tr=U,ve++):(tr=r,Rt===0&&Xe(W)),tr!==r?(fn=Qn(),fn===r&&(fn=null),fn!==r?(li=is(),li!==r?(Nt=yt,Dt=te(Oe,li),yt=Dt):(ve=yt,yt=r)):(ve=yt,yt=r)):(ve=yt,yt=r)):(ve=yt,yt=r);else gt=r;gt!==r?(yt=Qn(),yt===r&&(yt=null),yt!==r?(t.charCodeAt(ve)===58?(Dt=I,ve++):(Dt=r,Rt===0&&Xe(R)),Dt!==r?(tr=Qn(),tr===r&&(tr=null),tr!==r?(fn=fa(),fn!==r?(Nt=ee,Ee=ie(Oe,gt,fn),ee=Ee):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)}else ve=ee,ee=r;else ve=ee,ee=r}return ee}function fa(){var ee,Ee,Oe,gt,yt,Dt,tr;if(ee=ve,Ee=ve,Rt++,Oe=ve,gt=st(),gt!==r?(yt=Mt(),yt!==r?(t.charCodeAt(ve)===45?(Dt=c,ve++):(Dt=r,Rt===0&&Xe(f)),Dt!==r?(tr=Qn(),tr!==r?(gt=[gt,yt,Dt,tr],Oe=gt):(ve=Oe,Oe=r)):(ve=Oe,Oe=r)):(ve=Oe,Oe=r)):(ve=Oe,Oe=r),Rt--,Oe!==r?(ve=Ee,Ee=void 0):Ee=r,Ee!==r?(Oe=Je(),Oe!==r?(gt=kn(),gt!==r?(yt=wn(),yt!==r?(Dt=Aa(),Dt!==r?(Nt=ee,Ee=Ae(yt),ee=Ee):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r),ee===r&&(ee=ve,Ee=st(),Ee!==r?(Oe=kn(),Oe!==r?(gt=_A(),gt!==r?(yt=Aa(),yt!==r?(Nt=ee,Ee=Ae(gt),ee=Ee):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r),ee===r))if(ee=ve,Ee=uc(),Ee!==r){if(Oe=[],gt=Je(),gt!==r)for(;gt!==r;)Oe.push(gt),gt=Je();else Oe=r;Oe!==r?(Nt=ee,Ee=ce(Ee),ee=Ee):(ve=ee,ee=r)}else ve=ee,ee=r;return ee}function vl(){var ee,Ee,Oe;for(Rt++,ee=ve,Ee=[],t.charCodeAt(ve)===32?(Oe=pe,ve++):(Oe=r,Rt===0&&Xe(Be));Oe!==r;)Ee.push(Oe),t.charCodeAt(ve)===32?(Oe=pe,ve++):(Oe=r,Rt===0&&Xe(Be));return Ee!==r?(Nt=ve,Oe=Ce(Ee),Oe?Oe=void 0:Oe=r,Oe!==r?(Ee=[Ee,Oe],ee=Ee):(ve=ee,ee=r)):(ve=ee,ee=r),Rt--,ee===r&&(Ee=r,Rt===0&&Xe(me)),ee}function Mt(){var ee,Ee,Oe;for(ee=ve,Ee=[],t.charCodeAt(ve)===32?(Oe=pe,ve++):(Oe=r,Rt===0&&Xe(Be));Oe!==r;)Ee.push(Oe),t.charCodeAt(ve)===32?(Oe=pe,ve++):(Oe=r,Rt===0&&Xe(Be));return Ee!==r?(Nt=ve,Oe=g(Ee),Oe?Oe=void 0:Oe=r,Oe!==r?(Ee=[Ee,Oe],ee=Ee):(ve=ee,ee=r)):(ve=ee,ee=r),ee}function kn(){var ee;return Nt=ve,ee=we(),ee?ee=void 0:ee=r,ee}function Aa(){var ee;return Nt=ve,ee=ye(),ee?ee=void 0:ee=r,ee}function ja(){var ee;return ee=Sl(),ee===r&&(ee=fc()),ee}function is(){var ee,Ee,Oe;if(ee=Sl(),ee===r){if(ee=ve,Ee=[],Oe=qa(),Oe!==r)for(;Oe!==r;)Ee.push(Oe),Oe=qa();else Ee=r;Ee!==r&&(Nt=ee,Ee=fe()),ee=Ee}return ee}function uc(){var ee;return ee=_i(),ee===r&&(ee=ws(),ee===r&&(ee=Sl(),ee===r&&(ee=fc()))),ee}function gu(){var ee;return ee=_i(),ee===r&&(ee=Sl(),ee===r&&(ee=qa())),ee}function fc(){var ee,Ee,Oe,gt,yt,Dt;if(Rt++,ee=ve,X.test(t.charAt(ve))?(Ee=t.charAt(ve),ve++):(Ee=r,Rt===0&&Xe(De)),Ee!==r){for(Oe=[],gt=ve,yt=Qn(),yt===r&&(yt=null),yt!==r?(Re.test(t.charAt(ve))?(Dt=t.charAt(ve),ve++):(Dt=r,Rt===0&&Xe(dt)),Dt!==r?(yt=[yt,Dt],gt=yt):(ve=gt,gt=r)):(ve=gt,gt=r);gt!==r;)Oe.push(gt),gt=ve,yt=Qn(),yt===r&&(yt=null),yt!==r?(Re.test(t.charAt(ve))?(Dt=t.charAt(ve),ve++):(Dt=r,Rt===0&&Xe(dt)),Dt!==r?(yt=[yt,Dt],gt=yt):(ve=gt,gt=r)):(ve=gt,gt=r);Oe!==r?(Nt=ee,Ee=j(),ee=Ee):(ve=ee,ee=r)}else ve=ee,ee=r;return Rt--,ee===r&&(Ee=r,Rt===0&&Xe(se)),ee}function qa(){var ee,Ee,Oe,gt,yt;if(ee=ve,t.substr(ve,2)===rt?(Ee=rt,ve+=2):(Ee=r,Rt===0&&Xe(Fe)),Ee===r&&(Ee=null),Ee!==r)if(Ne.test(t.charAt(ve))?(Oe=t.charAt(ve),ve++):(Oe=r,Rt===0&&Xe(Pe)),Oe!==r){for(gt=[],Ye.test(t.charAt(ve))?(yt=t.charAt(ve),ve++):(yt=r,Rt===0&&Xe(ke));yt!==r;)gt.push(yt),Ye.test(t.charAt(ve))?(yt=t.charAt(ve),ve++):(yt=r,Rt===0&&Xe(ke));gt!==r?(Nt=ee,Ee=j(),ee=Ee):(ve=ee,ee=r)}else ve=ee,ee=r;else ve=ee,ee=r;return ee}function _i(){var ee,Ee;return ee=ve,t.substr(ve,4)===it?(Ee=it,ve+=4):(Ee=r,Rt===0&&Xe(_e)),Ee!==r&&(Nt=ee,Ee=x()),ee=Ee,ee}function ws(){var ee,Ee;return ee=ve,t.substr(ve,4)===w?(Ee=w,ve+=4):(Ee=r,Rt===0&&Xe(b)),Ee!==r&&(Nt=ee,Ee=y()),ee=Ee,ee===r&&(ee=ve,t.substr(ve,5)===F?(Ee=F,ve+=5):(Ee=r,Rt===0&&Xe(z)),Ee!==r&&(Nt=ee,Ee=Z()),ee=Ee),ee}function Sl(){var ee,Ee,Oe,gt;return Rt++,ee=ve,t.charCodeAt(ve)===34?(Ee=oe,ve++):(Ee=r,Rt===0&&Xe(xe)),Ee!==r?(t.charCodeAt(ve)===34?(Oe=oe,ve++):(Oe=r,Rt===0&&Xe(xe)),Oe!==r?(Nt=ee,Ee=Te(),ee=Ee):(ve=ee,ee=r)):(ve=ee,ee=r),ee===r&&(ee=ve,t.charCodeAt(ve)===34?(Ee=oe,ve++):(Ee=r,Rt===0&&Xe(xe)),Ee!==r?(Oe=df(),Oe!==r?(t.charCodeAt(ve)===34?(gt=oe,ve++):(gt=r,Rt===0&&Xe(xe)),gt!==r?(Nt=ee,Ee=lt(Oe),ee=Ee):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)),Rt--,ee===r&&(Ee=r,Rt===0&&Xe($)),ee}function df(){var ee,Ee,Oe;if(ee=ve,Ee=[],Oe=Ac(),Oe!==r)for(;Oe!==r;)Ee.push(Oe),Oe=Ac();else Ee=r;return Ee!==r&&(Nt=ee,Ee=It(Ee)),ee=Ee,ee}function Ac(){var ee,Ee,Oe,gt,yt,Dt;return qt.test(t.charAt(ve))?(ee=t.charAt(ve),ve++):(ee=r,Rt===0&&Xe(ir)),ee===r&&(ee=ve,t.substr(ve,2)===Pt?(Ee=Pt,ve+=2):(Ee=r,Rt===0&&Xe(gn)),Ee!==r&&(Nt=ee,Ee=Pr()),ee=Ee,ee===r&&(ee=ve,t.substr(ve,2)===Ir?(Ee=Ir,ve+=2):(Ee=r,Rt===0&&Xe(Nr)),Ee!==r&&(Nt=ee,Ee=nn()),ee=Ee,ee===r&&(ee=ve,t.substr(ve,2)===ai?(Ee=ai,ve+=2):(Ee=r,Rt===0&&Xe(wo)),Ee!==r&&(Nt=ee,Ee=ns()),ee=Ee,ee===r&&(ee=ve,t.substr(ve,2)===to?(Ee=to,ve+=2):(Ee=r,Rt===0&&Xe(Bo)),Ee!==r&&(Nt=ee,Ee=ji()),ee=Ee,ee===r&&(ee=ve,t.substr(ve,2)===ro?(Ee=ro,ve+=2):(Ee=r,Rt===0&&Xe(vo)),Ee!==r&&(Nt=ee,Ee=RA()),ee=Ee,ee===r&&(ee=ve,t.substr(ve,2)===pf?(Ee=pf,ve+=2):(Ee=r,Rt===0&&Xe(yh)),Ee!==r&&(Nt=ee,Ee=Eh()),ee=Ee,ee===r&&(ee=ve,t.substr(ve,2)===no?(Ee=no,ve+=2):(Ee=r,Rt===0&&Xe(jn)),Ee!==r&&(Nt=ee,Ee=Fs()),ee=Ee,ee===r&&(ee=ve,t.substr(ve,2)===io?(Ee=io,ve+=2):(Ee=r,Rt===0&&Xe(lu)),Ee!==r&&(Nt=ee,Ee=cu()),ee=Ee,ee===r&&(ee=ve,t.substr(ve,2)===uu?(Ee=uu,ve+=2):(Ee=r,Rt===0&&Xe(FA)),Ee!==r?(Oe=Bi(),Oe!==r?(gt=Bi(),gt!==r?(yt=Bi(),yt!==r?(Dt=Bi(),Dt!==r?(Nt=ee,Ee=NA(Oe,gt,yt,Dt),ee=Ee):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)):(ve=ee,ee=r)))))))))),ee}function Bi(){var ee;return aa.test(t.charAt(ve))?(ee=t.charAt(ve),ve++):(ee=r,Rt===0&&Xe(la)),ee}function Qn(){var ee,Ee;if(Rt++,ee=[],gr.test(t.charAt(ve))?(Ee=t.charAt(ve),ve++):(Ee=r,Rt===0&&Xe(So)),Ee!==r)for(;Ee!==r;)ee.push(Ee),gr.test(t.charAt(ve))?(Ee=t.charAt(ve),ve++):(Ee=r,Rt===0&&Xe(So));else ee=r;return Rt--,ee===r&&(Ee=r,Rt===0&&Xe(OA)),ee}function pc(){var ee,Ee;if(Rt++,ee=[],fu.test(t.charAt(ve))?(Ee=t.charAt(ve),ve++):(Ee=r,Rt===0&&Xe(Cr)),Ee!==r)for(;Ee!==r;)ee.push(Ee),fu.test(t.charAt(ve))?(Ee=t.charAt(ve),ve++):(Ee=r,Rt===0&&Xe(Cr));else ee=r;return Rt--,ee===r&&(Ee=r,Rt===0&&Xe(Me)),ee}function Je(){var ee,Ee,Oe,gt,yt,Dt;if(ee=ve,Ee=st(),Ee!==r){for(Oe=[],gt=ve,yt=Qn(),yt===r&&(yt=null),yt!==r?(Dt=st(),Dt!==r?(yt=[yt,Dt],gt=yt):(ve=gt,gt=r)):(ve=gt,gt=r);gt!==r;)Oe.push(gt),gt=ve,yt=Qn(),yt===r&&(yt=null),yt!==r?(Dt=st(),Dt!==r?(yt=[yt,Dt],gt=yt):(ve=gt,gt=r)):(ve=gt,gt=r);Oe!==r?(Ee=[Ee,Oe],ee=Ee):(ve=ee,ee=r)}else ve=ee,ee=r;return ee}function st(){var ee;return t.substr(ve,2)===hf?(ee=hf,ve+=2):(ee=r,Rt===0&&Xe(LA)),ee===r&&(t.charCodeAt(ve)===10?(ee=MA,ve++):(ee=r,Rt===0&&Xe(Au)),ee===r&&(t.charCodeAt(ve)===13?(ee=pu,ve++):(ee=r,Rt===0&&Xe(ac)))),ee}let St=2,lr=0;if(xn=a(),xn!==r&&ve===t.length)return xn;throw xn!==r&&ve"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>Vre(t[e])):!1}function oU(t,e,r){if(t===null)return`null -`;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} -`;if(typeof t=="string")return`${Wre(t)} -`;if(Array.isArray(t)){if(t.length===0)return`[] -`;let s=" ".repeat(e);return` -${t.map(n=>`${s}- ${oU(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[s,a]=t instanceof Rx?[t.data,!1]:[t,!0],n=" ".repeat(e),c=Object.keys(s);a&&c.sort((p,h)=>{let E=Gre.indexOf(p),C=Gre.indexOf(h);return E===-1&&C===-1?ph?1:0:E!==-1&&C===-1?-1:E===-1&&C!==-1?1:E-C});let f=c.filter(p=>!Vre(s[p])).map((p,h)=>{let E=s[p],C=Wre(p),S=oU(E,e+1,!0),P=h>0||r?n:"",I=C.length>1024?`? ${C} -${P}:`:`${C}:`,R=S.startsWith(` -`)?S:` ${S}`;return`${P}${I}${R}`}).join(e===0?` -`:"")||` -`;return r?` -${f}`:`${f}`}throw new Error(`Unsupported value type (${t})`)}function il(t){try{let e=oU(t,0,!1);return e!==` -`?e:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}function Tze(t){return t.endsWith(` -`)||(t+=` -`),(0,Yre.parse)(t)}function Fze(t){if(Rze.test(t))return Tze(t);let e=(0,Fx.safeLoad)(t,{schema:Fx.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!="object")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return e}function cs(t){return Fze(t)}var Fx,Yre,Qze,Gre,Rx,Rze,Kre=Ct(()=>{Fx=et(Hre()),Yre=et(qre()),Qze=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,Gre=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],Rx=class{constructor(e){this.data=e}};il.PreserveOrdering=Rx;Rze=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var K2={};Vt(K2,{parseResolution:()=>Cx,parseShell:()=>yx,parseSyml:()=>cs,stringifyArgument:()=>Y_,stringifyArgumentSegment:()=>V_,stringifyArithmeticExpression:()=>Ix,stringifyCommand:()=>W_,stringifyCommandChain:()=>uE,stringifyCommandChainThen:()=>G_,stringifyCommandLine:()=>Ex,stringifyCommandLineThen:()=>q_,stringifyEnvSegment:()=>mx,stringifyRedirectArgument:()=>H2,stringifyResolution:()=>wx,stringifyShell:()=>cE,stringifyShellLine:()=>cE,stringifySyml:()=>il,stringifyValueArgument:()=>Bd});var Bc=Ct(()=>{Vee();Zee();Kre()});var zre=L((N5t,aU)=>{"use strict";var Nze=t=>{let e=!1,r=!1,s=!1;for(let a=0;a{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=Nze(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};aU.exports=Jre;aU.exports.default=Jre});var Zre=L((O5t,Oze)=>{Oze.exports=[{name:"Agola CI",constant:"AGOLA",env:"AGOLA_GIT_REF",pr:"AGOLA_PULL_REQUEST_ID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"TF_BUILD",pr:{BUILD_REASON:"PullRequest"}},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codemagic",constant:"CODEMAGIC",env:"CM_BUILD_ID",pr:"CM_PULL_REQUEST"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"Earthly",constant:"EARTHLY",env:"EARTHLY_CI"},{name:"Expo Application Services",constant:"EAS",env:"EAS_BUILD"},{name:"Gerrit",constant:"GERRIT",env:"GERRIT_PROJECT"},{name:"Gitea Actions",constant:"GITEA_ACTIONS",env:"GITEA_ACTIONS"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Google Cloud Build",constant:"GOOGLE_CLOUD_BUILD",env:"BUILDER_OUTPUT"},{name:"Harness CI",constant:"HARNESS",env:"HARNESS_BUILD_ID"},{name:"Heroku",constant:"HEROKU",env:{env:"NODE",includes:"/app/.heroku/node/bin/node"}},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Prow",constant:"PROW",env:"PROW_JOB_ID"},{name:"ReleaseHub",constant:"RELEASEHUB",env:"RELEASE_BUILD_ID"},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Sourcehut",constant:"SOURCEHUT",env:{CI_NAME:"sourcehut"}},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vela",constant:"VELA",env:"VELA",pr:{VELA_PULL_REQUEST:"1"}},{name:"Vercel",constant:"VERCEL",env:{any:["NOW_BUILDER","VERCEL"]},pr:"VERCEL_GIT_PULL_REQUEST_ID"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"},{name:"Woodpecker",constant:"WOODPECKER",env:{CI:"woodpecker"},pr:{CI_BUILD_EVENT:"pull_request"}},{name:"Xcode Cloud",constant:"XCODE_CLOUD",env:"CI_XCODE_PROJECT",pr:"CI_PULL_REQUEST_NUMBER"},{name:"Xcode Server",constant:"XCODE_SERVER",env:"XCS"}]});var Rd=L(_l=>{"use strict";var $re=Zre(),Ps=process.env;Object.defineProperty(_l,"_vendors",{value:$re.map(function(t){return t.constant})});_l.name=null;_l.isPR=null;$re.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(s){return Xre(s)});if(_l[t.constant]=r,!!r)switch(_l.name=t.name,typeof t.pr){case"string":_l.isPR=!!Ps[t.pr];break;case"object":"env"in t.pr?_l.isPR=t.pr.env in Ps&&Ps[t.pr.env]!==t.pr.ne:"any"in t.pr?_l.isPR=t.pr.any.some(function(s){return!!Ps[s]}):_l.isPR=Xre(t.pr);break;default:_l.isPR=null}});_l.isCI=!!(Ps.CI!=="false"&&(Ps.BUILD_ID||Ps.BUILD_NUMBER||Ps.CI||Ps.CI_APP_ID||Ps.CI_BUILD_ID||Ps.CI_BUILD_NUMBER||Ps.CI_NAME||Ps.CONTINUOUS_INTEGRATION||Ps.RUN_ID||_l.name));function Xre(t){return typeof t=="string"?!!Ps[t]:"env"in t?Ps[t.env]&&Ps[t.env].includes(t.includes):"any"in t?t.any.some(function(e){return!!Ps[e]}):Object.keys(t).every(function(e){return Ps[e]===t[e]})}});var ei,En,Fd,lU,Nx,ene,cU,uU,Ox=Ct(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(ei||(ei={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(En||(En={}));Fd=-1,lU=/^(-h|--help)(?:=([0-9]+))?$/,Nx=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,ene=/^-[a-zA-Z]{2,}$/,cU=/^([^=]+)=([\s\S]*)$/,uU=process.env.DEBUG_CLI==="1"});var nt,yE,Lx,fU,Mx=Ct(()=>{Ox();nt=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},yE=class extends Error{constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(s=>s.reason!==null&&s.reason===r[0].reason)){let[{reason:s}]=this.candidates;this.message=`${s} - -${this.candidates.map(({usage:a})=>`$ ${a}`).join(` -`)}`}else if(this.candidates.length===1){let[{usage:s}]=this.candidates;this.message=`Command not found; did you mean: - -$ ${s} -${fU(e)}`}else this.message=`Command not found; did you mean one of: - -${this.candidates.map(({usage:s},a)=>`${`${a}.`.padStart(4)} ${s}`).join(` -`)} - -${fU(e)}`}},Lx=class extends Error{constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: - -${this.usages.map((s,a)=>`${`${a}.`.padStart(4)} ${s}`).join(` -`)} - -${fU(e)}`}},fU=t=>`While running ${t.filter(e=>e!==ei.EndOfInput&&e!==ei.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function Lze(t){let e=t.split(` -`),r=e.filter(a=>a.match(/\S/)),s=r.length>0?r.reduce((a,n)=>Math.min(a,n.length-n.trimStart().length),Number.MAX_VALUE):0;return e.map(a=>a.slice(s).trimRight()).join(` -`)}function qo(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` -`),t=Lze(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 - -`),t=t.replace(/\n(\n)?\n*/g,(s,a)=>a||" "),r&&(t=t.split(/\n/).map(s=>{let a=s.match(/^\s*[*-][\t ]+(.*)/);if(!a)return s.match(/(.{1,80})(?: |$)/g).join(` -`);let n=s.length-s.trimStart().length;return a[1].match(new RegExp(`(.{1,${78-n}})(?: |$)`,"g")).map((c,f)=>" ".repeat(n)+(f===0?"- ":" ")+c).join(` -`)}).join(` - -`)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(s,a,n)=>e.code(a+n+a)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(s,a,n)=>e.bold(a+n+a)),t?`${t} -`:""}var AU,tne,rne,pU=Ct(()=>{AU=Array(80).fill("\u2501");for(let t=0;t<=24;++t)AU[AU.length-t]=`\x1B[38;5;${232+t}m\u2501`;tne={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<75?` ${AU.slice(t.length+5).join("")}`:":"}\x1B[0m`,bold:t=>`\x1B[1m${t}\x1B[22m`,error:t=>`\x1B[31m\x1B[1m${t}\x1B[22m\x1B[39m`,code:t=>`\x1B[36m${t}\x1B[39m`},rne={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Ea(t){return{...t,[J2]:!0}}function Gf(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function _x(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,s,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=s!=="."||!e?`${s.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function z2(t,e){return e.length===1?new nt(`${t}${_x(e[0],{mergeName:!0})}`):new nt(`${t}: -${e.map(r=>` -- ${_x(r)}`).join("")}`)}function Nd(t,e,r){if(typeof r>"u")return e;let s=[],a=[],n=f=>{let p=e;return e=f,n.bind(null,p)};if(!r(e,{errors:s,coercions:a,coercion:n}))throw z2(`Invalid value for ${t}`,s);for(let[,f]of a)f();return e}var J2,Bp=Ct(()=>{Mx();J2=Symbol("clipanion/isOption")});var Ia={};Vt(Ia,{KeyRelationship:()=>Wf,TypeAssertionError:()=>l0,applyCascade:()=>$2,as:()=>rZe,assert:()=>$ze,assertWithErrors:()=>eZe,cascade:()=>qx,fn:()=>nZe,hasAtLeastOneKey:()=>IU,hasExactLength:()=>ane,hasForbiddenKeys:()=>wZe,hasKeyRelationship:()=>tB,hasMaxLength:()=>sZe,hasMinLength:()=>iZe,hasMutuallyExclusiveKeys:()=>BZe,hasRequiredKeys:()=>CZe,hasUniqueItems:()=>oZe,isArray:()=>Ux,isAtLeast:()=>yU,isAtMost:()=>cZe,isBase64:()=>mZe,isBoolean:()=>Wze,isDate:()=>Vze,isDict:()=>zze,isEnum:()=>po,isHexColor:()=>dZe,isISO8601:()=>gZe,isInExclusiveRange:()=>fZe,isInInclusiveRange:()=>uZe,isInstanceOf:()=>Xze,isInteger:()=>EU,isJSON:()=>yZe,isLiteral:()=>ine,isLowerCase:()=>AZe,isMap:()=>Jze,isNegative:()=>aZe,isNullable:()=>IZe,isNumber:()=>dU,isObject:()=>sne,isOneOf:()=>mU,isOptional:()=>EZe,isPartial:()=>Zze,isPayload:()=>Yze,isPositive:()=>lZe,isRecord:()=>jx,isSet:()=>Kze,isString:()=>IE,isTuple:()=>Hx,isUUID4:()=>hZe,isUnknown:()=>gU,isUpperCase:()=>pZe,makeTrait:()=>one,makeValidator:()=>Wr,matchesRegExp:()=>X2,softAssert:()=>tZe});function ti(t){return t===null?"null":t===void 0?"undefined":t===""?"an empty string":typeof t=="symbol"?`<${t.toString()}>`:Array.isArray(t)?"an array":JSON.stringify(t)}function EE(t,e){if(t.length===0)return"nothing";if(t.length===1)return ti(t[0]);let r=t.slice(0,-1),s=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>ti(n)).join(", ")}${a}${ti(s)}`}function a0(t,e){var r,s,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:Mze.test(e)?`${(s=t?.p)!==null&&s!==void 0?s:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function hU(t,e,r){return t===1?e:r}function mr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function qze(t,e){return r=>{t[e]=r}}function Yf(t,e){return r=>{let s=t[e];return t[e]=r,Yf(t,e).bind(null,s)}}function Z2(t,e,r){let s=()=>(t(r()),a),a=()=>(t(e),s);return s}function gU(){return Wr({test:(t,e)=>!0})}function ine(t){return Wr({test:(e,r)=>e!==t?mr(r,`Expected ${ti(t)} (got ${ti(e)})`):!0})}function IE(){return Wr({test:(t,e)=>typeof t!="string"?mr(e,`Expected a string (got ${ti(t)})`):!0})}function po(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),s=new Set(e);return s.size===1?ine([...s][0]):Wr({test:(a,n)=>s.has(a)?!0:r?mr(n,`Expected one of ${EE(e,"or")} (got ${ti(a)})`):mr(n,`Expected a valid enumeration value (got ${ti(a)})`)})}function Wze(){return Wr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return mr(e,"Unbound coercion result");let s=Gze.get(t);if(typeof s<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,s)]),!0}return mr(e,`Expected a boolean (got ${ti(t)})`)}return!0}})}function dU(){return Wr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return mr(e,"Unbound coercion result");let s;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)s=a;else return mr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof s<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,s)]),!0}return mr(e,`Expected a number (got ${ti(t)})`)}return!0}})}function Yze(t){return Wr({test:(e,r)=>{var s;if(typeof r?.coercions>"u")return mr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return mr(r,"Unbound coercion result");if(typeof e!="string")return mr(r,`Expected a string (got ${ti(e)})`);let a;try{a=JSON.parse(e)}catch{return mr(r,`Expected a JSON string (got ${ti(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Yf(n,"value")}))?(r.coercions.push([(s=r.p)!==null&&s!==void 0?s:".",r.coercion.bind(null,n.value)]),!0):!1}})}function Vze(){return Wr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return mr(e,"Unbound coercion result");let s;if(typeof t=="string"&&nne.test(t))s=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))s=new Date(a*1e3);else return mr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof s<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,s)]),!0}return mr(e,`Expected a date (got ${ti(t)})`)}return!0}})}function Ux(t,{delimiter:e}={}){return Wr({test:(r,s)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof s?.coercions<"u"){if(typeof s?.coercion>"u")return mr(s,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return mr(s,`Expected an array (got ${ti(r)})`);let c=!0;for(let f=0,p=r.length;f{var n,c;if(Object.getPrototypeOf(s).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return mr(a,"Unbound coercion result");let f=[...s],p=[...s];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,C)=>E!==f[C])?new Set(p):s;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",Z2(a.coercion,s,h)]),!0}else{let f=!0;for(let p of s)if(f=t(p,Object.assign({},a))&&f,!f&&a?.errors==null)break;return f}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return mr(a,"Unbound coercion result");let f={value:s};return r(s,Object.assign(Object.assign({},a),{coercion:Yf(f,"value")}))?(a.coercions.push([(c=a.p)!==null&&c!==void 0?c:".",Z2(a.coercion,s,()=>new Set(f.value))]),!0):!1}return mr(a,`Expected a set (got ${ti(s)})`)}})}function Jze(t,e){let r=Ux(Hx([t,e])),s=jx(e,{keys:t});return Wr({test:(a,n)=>{var c,f,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return mr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let C=()=>E.some((S,P)=>S[0]!==h[P][0]||S[1]!==h[P][1])?new Map(E):a;return n.coercions.push([(c=n.p)!==null&&c!==void 0?c:".",Z2(n.coercion,a,C)]),!0}else{let h=!0;for(let[E,C]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(C,Object.assign(Object.assign({},n),{p:a0(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return mr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(f=n.p)!==null&&f!==void 0?f:".",Z2(n.coercion,a,()=>new Map(h.value))]),!0):!1:s(a,Object.assign(Object.assign({},n),{coercion:Yf(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",Z2(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return mr(n,`Expected a map (got ${ti(a)})`)}})}function Hx(t,{delimiter:e}={}){let r=ane(t.length);return Wr({test:(s,a)=>{var n;if(typeof s=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return mr(a,"Unbound coercion result");s=s.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,s)])}if(!Array.isArray(s))return mr(a,`Expected a tuple (got ${ti(s)})`);let c=r(s,Object.assign({},a));for(let f=0,p=s.length;f{var n;if(Array.isArray(s)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?mr(a,"Unbound coercion result"):r(s,Object.assign(Object.assign({},a),{coercion:void 0}))?(s=Object.fromEntries(s),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,s)]),!0):!1;if(typeof s!="object"||s===null)return mr(a,`Expected an object (got ${ti(s)})`);let c=Object.keys(s),f=!0;for(let p=0,h=c.length;p{if(typeof a!="object"||a===null)return mr(n,`Expected an object (got ${ti(a)})`);let c=new Set([...r,...Object.keys(a)]),f={},p=!0;for(let h of c){if(h==="constructor"||h==="__proto__")p=mr(Object.assign(Object.assign({},n),{p:a0(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,C=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(C,Object.assign(Object.assign({},n),{p:a0(n,h),coercion:Yf(a,h)}))&&p:e===null?p=mr(Object.assign(Object.assign({},n),{p:a0(n,h)}),`Extraneous property (got ${ti(C)})`):Object.defineProperty(f,h,{enumerable:!0,get:()=>C,set:qze(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(f,n)&&p),p}});return Object.assign(s,{properties:t})}function Zze(t){return sne(t,{extra:jx(gU())})}function one(t){return()=>t}function Wr({test:t}){return one(t)()}function $ze(t,e){if(!e(t))throw new l0}function eZe(t,e){let r=[];if(!e(t,{errors:r}))throw new l0({errors:r})}function tZe(t,e){}function rZe(t,e,{coerce:r=!1,errors:s,throw:a}={}){let n=s?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new l0({errors:n});return{value:void 0,errors:n??!0}}let c={value:t},f=Yf(c,"value"),p=[];if(!e(t,{errors:n,coercion:f,coercions:p})){if(a)throw new l0({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?c.value:{value:c.value,errors:void 0}}function nZe(t,e){let r=Hx(t);return(...s)=>{if(!r(s))throw new l0;return e(...s)}}function iZe(t){return Wr({test:(e,r)=>e.length>=t?!0:mr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function sZe(t){return Wr({test:(e,r)=>e.length<=t?!0:mr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function ane(t){return Wr({test:(e,r)=>e.length!==t?mr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function oZe({map:t}={}){return Wr({test:(e,r)=>{let s=new Set,a=new Set;for(let n=0,c=e.length;nt<=0?!0:mr(e,`Expected to be negative (got ${t})`)})}function lZe(){return Wr({test:(t,e)=>t>=0?!0:mr(e,`Expected to be positive (got ${t})`)})}function yU(t){return Wr({test:(e,r)=>e>=t?!0:mr(r,`Expected to be at least ${t} (got ${e})`)})}function cZe(t){return Wr({test:(e,r)=>e<=t?!0:mr(r,`Expected to be at most ${t} (got ${e})`)})}function uZe(t,e){return Wr({test:(r,s)=>r>=t&&r<=e?!0:mr(s,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function fZe(t,e){return Wr({test:(r,s)=>r>=t&&re!==Math.round(e)?mr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?mr(r,`Expected to be a safe integer (got ${e})`):!0})}function X2(t){return Wr({test:(e,r)=>t.test(e)?!0:mr(r,`Expected to match the pattern ${t.toString()} (got ${ti(e)})`)})}function AZe(){return Wr({test:(t,e)=>t!==t.toLowerCase()?mr(e,`Expected to be all-lowercase (got ${t})`):!0})}function pZe(){return Wr({test:(t,e)=>t!==t.toUpperCase()?mr(e,`Expected to be all-uppercase (got ${t})`):!0})}function hZe(){return Wr({test:(t,e)=>jze.test(t)?!0:mr(e,`Expected to be a valid UUID v4 (got ${ti(t)})`)})}function gZe(){return Wr({test:(t,e)=>nne.test(t)?!0:mr(e,`Expected to be a valid ISO 8601 date string (got ${ti(t)})`)})}function dZe({alpha:t=!1}){return Wr({test:(e,r)=>(t?_ze.test(e):Uze.test(e))?!0:mr(r,`Expected to be a valid hexadecimal color string (got ${ti(e)})`)})}function mZe(){return Wr({test:(t,e)=>Hze.test(t)?!0:mr(e,`Expected to be a valid base 64 string (got ${ti(t)})`)})}function yZe(t=gU()){return Wr({test:(e,r)=>{let s;try{s=JSON.parse(e)}catch{return mr(r,`Expected to be a valid JSON string (got ${ti(e)})`)}return t(s,r)}})}function qx(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Wr({test:(s,a)=>{var n,c;let f={value:s},p=typeof a?.coercions<"u"?Yf(f,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(s,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,C]of h)E.push(C());try{if(typeof a?.coercions<"u"){if(f.value!==s){if(typeof a?.coercion>"u")return mr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,f.value)])}(c=a?.coercions)===null||c===void 0||c.push(...h)}return r.every(C=>C(f.value,a))}finally{for(let C of E)C()}}})}function $2(t,...e){let r=Array.isArray(e[0])?e[0]:e;return qx(t,r)}function EZe(t){return Wr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function IZe(t){return Wr({test:(e,r)=>e===null?!0:t(e,r)})}function CZe(t,e){var r;let s=new Set(t),a=eB[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Wr({test:(n,c)=>{let f=new Set(Object.keys(n)),p=[];for(let h of s)a(f,h,n)||p.push(h);return p.length>0?mr(c,`Missing required ${hU(p.length,"property","properties")} ${EE(p,"and")}`):!0}})}function IU(t,e){var r;let s=new Set(t),a=eB[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Wr({test:(n,c)=>Object.keys(n).some(h=>a(s,h,n))?!0:mr(c,`Missing at least one property from ${EE(Array.from(s),"or")}`)})}function wZe(t,e){var r;let s=new Set(t),a=eB[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Wr({test:(n,c)=>{let f=new Set(Object.keys(n)),p=[];for(let h of s)a(f,h,n)&&p.push(h);return p.length>0?mr(c,`Forbidden ${hU(p.length,"property","properties")} ${EE(p,"and")}`):!0}})}function BZe(t,e){var r;let s=new Set(t),a=eB[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Wr({test:(n,c)=>{let f=new Set(Object.keys(n)),p=[];for(let h of s)a(f,h,n)&&p.push(h);return p.length>1?mr(c,`Mutually exclusive properties ${EE(p,"and")}`):!0}})}function tB(t,e,r,s){var a,n;let c=new Set((a=s?.ignore)!==null&&a!==void 0?a:[]),f=eB[(n=s?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=vZe[e],E=e===Wf.Forbids?"or":"and";return Wr({test:(C,S)=>{let P=new Set(Object.keys(C));if(!f(P,t,C)||c.has(C[t]))return!0;let I=[];for(let R of p)(f(P,R,C)&&!c.has(C[R]))!==h.expect&&I.push(R);return I.length>=1?mr(S,`Property "${t}" ${h.message} ${hU(I.length,"property","properties")} ${EE(I,E)}`):!0}})}var Mze,_ze,Uze,Hze,jze,nne,Gze,Xze,mU,l0,eB,Wf,vZe,Ul=Ct(()=>{Mze=/^[a-zA-Z_][a-zA-Z0-9_]*$/;_ze=/^#[0-9a-f]{6}$/i,Uze=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,Hze=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,jze=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,nne=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/;Gze=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);Xze=t=>Wr({test:(e,r)=>e instanceof t?!0:mr(r,`Expected an instance of ${t.name} (got ${ti(e)})`)}),mU=(t,{exclusive:e=!1}={})=>Wr({test:(r,s)=>{var a,n,c;let f=[],p=typeof s?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?mr(s,`Expected to match exactly a single predicate (matched ${f.join(", ")})`):(c=s?.errors)===null||c===void 0||c.push(...p),!1}});l0=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` -`;for(let s of e)r+=` -- ${s}`}super(r)}};eB={missing:(t,e)=>t.has(e),undefined:(t,e,r)=>t.has(e)&&typeof r[e]<"u",nil:(t,e,r)=>t.has(e)&&r[e]!=null,falsy:(t,e,r)=>t.has(e)&&!!r[e]};(function(t){t.Forbids="Forbids",t.Requires="Requires"})(Wf||(Wf={}));vZe={[Wf.Forbids]:{expect:!1,message:"forbids using"},[Wf.Requires]:{expect:!0,message:"requires using"}}});var ot,c0=Ct(()=>{Bp();ot=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:c}=await Promise.resolve().then(()=>(Ul(),Ia)),f=c(a(n()),r),p=[],h=[];if(!f(this,{errors:p,coercions:h}))throw z2("Invalid option schema",p);for(let[,C]of h)C()}else if(r!=null)throw new Error("Invalid command schema");let s=await this.execute();return typeof s<"u"?s:0}};ot.isOption=J2;ot.Default=[]});function sl(t){uU&&console.log(t)}function cne(){let t={nodes:[]};for(let e=0;e{if(e.has(s))return;e.add(s);let a=t.nodes[s];for(let c of Object.values(a.statics))for(let{to:f}of c)r(f);for(let[,{to:c}]of a.dynamics)r(c);for(let{to:c}of a.shortcuts)r(c);let n=new Set(a.shortcuts.map(({to:c})=>c));for(;a.shortcuts.length>0;){let{to:c}=a.shortcuts.shift(),f=t.nodes[c];for(let[p,h]of Object.entries(f.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let C of h)E.some(({to:S})=>C.to===S)||E.push(C)}for(let[p,h]of f.dynamics)a.dynamics.some(([E,{to:C}])=>p===E&&h.to===C)||a.dynamics.push([p,h]);for(let p of f.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(En.InitialNode)}function bZe(t,{prefix:e=""}={}){if(uU){sl(`${e}Nodes are:`);for(let r=0;rE!==En.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===En.ErrorNode))throw new yE(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));s=kZe(h)}if(s.length>0){sl(" Results:");for(let n of s)sl(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else sl(" No results");return s}function xZe(t,e,{endToken:r=ei.EndOfInput}={}){let s=PZe(t,[...e,r]);return QZe(e,s.map(({state:a})=>a))}function kZe(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path.length);return t.filter(({state:r})=>r.path.length===e)}function QZe(t,e){let r=e.filter(S=>S.selectedIndex!==null),s=r.filter(S=>!S.partial);if(s.length>0&&(r=s),r.length===0)throw new Error;let a=r.filter(S=>S.selectedIndex===Fd||S.requiredOptions.every(P=>P.some(I=>S.options.find(R=>R.name===I))));if(a.length===0)throw new yE(t,r.map(S=>({usage:S.candidateUsage,reason:null})));let n=0;for(let S of a)S.path.length>n&&(n=S.path.length);let c=a.filter(S=>S.path.length===n),f=S=>S.positionals.filter(({extra:P})=>!P).length+S.options.length,p=c.map(S=>({state:S,positionalCount:f(S)})),h=0;for(let{positionalCount:S}of p)S>h&&(h=S);let E=p.filter(({positionalCount:S})=>S===h).map(({state:S})=>S),C=TZe(E);if(C.length>1)throw new Lx(t,C.map(S=>S.candidateUsage));return C[0]}function TZe(t){let e=[],r=[];for(let s of t)s.selectedIndex===Fd?r.push(s):e.push(s);return r.length>0&&e.push({...lne,path:une(...r.map(s=>s.path)),options:r.reduce((s,a)=>s.concat(a.options),[])}),e}function une(t,e,...r){return e===void 0?Array.from(t):une(t.filter((s,a)=>s===e[a]),...r)}function Hl(){return{dynamics:[],shortcuts:[],statics:{}}}function fne(t){return t===En.SuccessNode||t===En.ErrorNode}function CU(t,e=0){return{to:fne(t.to)?t.to:t.to>=En.CustomNode?t.to+e-En.CustomNode+1:t.to+e,reducer:t.reducer}}function RZe(t,e=0){let r=Hl();for(let[s,a]of t.dynamics)r.dynamics.push([s,CU(a,e)]);for(let s of t.shortcuts)r.shortcuts.push(CU(s,e));for(let[s,a]of Object.entries(t.statics))r.statics[s]=a.map(n=>CU(n,e));return r}function qs(t,e,r,s,a){t.nodes[e].dynamics.push([r,{to:s,reducer:a}])}function CE(t,e,r,s){t.nodes[e].shortcuts.push({to:r,reducer:s})}function Ca(t,e,r,s,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:s,reducer:a})}function Gx(t,e,r,s,a){if(Array.isArray(e)){let[n,...c]=e;return t[n](r,s,a,...c)}else return t[e](r,s,a)}var lne,FZe,wU,jl,BU,Wx,Yx=Ct(()=>{Ox();Mx();lne={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:Fd,partial:!1,tokens:[]};FZe={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,s)=>!t.ignoreOptions&&e===s,isBatchOption:(t,e,r,s)=>!t.ignoreOptions&&ene.test(e)&&[...e.slice(1)].every(a=>s.has(`-${a}`)),isBoundOption:(t,e,r,s,a)=>{let n=e.match(cU);return!t.ignoreOptions&&!!n&&Nx.test(n[1])&&s.has(n[1])&&a.filter(c=>c.nameSet.includes(n[1])).every(c=>c.allowBinding)},isNegatedOption:(t,e,r,s)=>!t.ignoreOptions&&e===`--no-${s.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&lU.test(e),isUnsupportedOption:(t,e,r,s)=>!t.ignoreOptions&&e.startsWith("-")&&Nx.test(e)&&!s.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!Nx.test(e)},wU={setCandidateState:(t,e,r,s)=>({...t,...s}),setSelectedIndex:(t,e,r,s)=>({...t,selectedIndex:s}),setPartialIndex:(t,e,r,s)=>({...t,selectedIndex:s,partial:!0}),pushBatch:(t,e,r,s)=>{let a=t.options.slice(),n=t.tokens.slice();for(let c=1;c{let[,s,a]=e.match(cU),n=t.options.concat({name:s,value:a}),c=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,s.length],option:s},{segmentIndex:r,type:"assign",slice:[s.length,s.length+1]},{segmentIndex:r,type:"value",slice:[s.length+1,s.length+a.length+1]}]);return{...t,options:n,tokens:c}},pushPath:(t,e,r)=>{let s=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:s,tokens:a}},pushPositional:(t,e,r)=>{let s=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:s,tokens:a}},pushExtra:(t,e,r)=>{let s=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:s,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let s=t.positionals.concat({value:e,extra:jl}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:s,tokens:a}},pushTrue:(t,e,r,s)=>{let a=t.options.concat({name:s,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:s});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,s)=>{let a=t.options.concat({name:s,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:s});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,s)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var s;let a=t.options[t.options.length-1],n=t.options.slice(),c=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((s=a.value)!==null&&s!==void 0?s:[]).concat([e]),{...t,options:n,tokens:c}},setStringValue:(t,e,r)=>{let s=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return s.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,s)=>{let[,,a]=e.match(lU);return typeof a<"u"?{...t,options:[{name:"-c",value:String(s)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(s)}]}},setError:(t,e,r,s)=>e===ei.EndOfInput||e===ei.EndOfPartialInput?{...t,errorMessage:`${s}.`}:{...t,errorMessage:`${s} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},jl=Symbol(),BU=class{constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:s=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:s,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===jl)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!r&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!r&&this.arity.extra!==jl?this.arity.extra.push(e):this.arity.extra!==jl&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===jl)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let s=0;s1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(s))throw new Error(`The arity must be an integer, got ${s}`);if(s<0)throw new Error(`The arity must be positive, got ${s}`);let f=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,f);this.options.push({preferredName:f,nameSet:e,description:r,arity:s,hidden:a,required:n,allowBinding:c})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let s=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&s.push(...this.paths[0]),e){for(let{preferredName:c,nameSet:f,arity:p,hidden:h,description:E,required:C}of this.options){if(h)continue;let S=[];for(let I=0;I`:`[${P}]`)}s.push(...this.arity.leading.map(c=>`<${c}>`)),this.arity.extra===jl?s.push("..."):s.push(...this.arity.extra.map(c=>`[${c}]`)),s.push(...this.arity.trailing.map(c=>`<${c}>`))}return{usage:s.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=cne(),r=En.InitialNode,s=this.usage().usage,a=this.options.filter(f=>f.required).map(f=>f.nameSet);r=Mu(e,Hl()),Ca(e,En.InitialNode,ei.StartOfInput,r,["setCandidateState",{candidateUsage:s,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",c=this.paths.length>0?this.paths:[[]];for(let f of c){let p=r;if(f.length>0){let S=Mu(e,Hl());CE(e,p,S),this.registerOptions(e,S),p=S}for(let S=0;S0||!this.arity.proxy){let S=Mu(e,Hl());qs(e,p,"isHelp",S,["useHelp",this.cliIndex]),qs(e,S,"always",S,"pushExtra"),Ca(e,S,ei.EndOfInput,En.SuccessNode,["setSelectedIndex",Fd]),this.registerOptions(e,p)}this.arity.leading.length>0&&(Ca(e,p,ei.EndOfInput,En.ErrorNode,["setError","Not enough positional arguments"]),Ca(e,p,ei.EndOfPartialInput,En.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let S=0;S0||S+1!==this.arity.leading.length)&&(Ca(e,P,ei.EndOfInput,En.ErrorNode,["setError","Not enough positional arguments"]),Ca(e,P,ei.EndOfPartialInput,En.SuccessNode,["setPartialIndex",this.cliIndex])),qs(e,h,"isNotOptionLike",P,"pushPositional"),h=P}let E=h;if(this.arity.extra===jl||this.arity.extra.length>0){let S=Mu(e,Hl());if(CE(e,h,S),this.arity.extra===jl){let P=Mu(e,Hl());this.arity.proxy||this.registerOptions(e,P),qs(e,h,n,P,"pushExtraNoLimits"),qs(e,P,n,P,"pushExtraNoLimits"),CE(e,P,S)}else for(let P=0;P0)&&this.registerOptions(e,I),qs(e,E,n,I,"pushExtra"),CE(e,I,S),E=I}E=S}this.arity.trailing.length>0&&(Ca(e,E,ei.EndOfInput,En.ErrorNode,["setError","Not enough positional arguments"]),Ca(e,E,ei.EndOfPartialInput,En.SuccessNode,["setPartialIndex",this.cliIndex]));let C=E;for(let S=0;S=0&&e{let c=n?ei.EndOfPartialInput:ei.EndOfInput;return xZe(s,a,{endToken:c})}}}}});function pne(){return Vx.default&&"getColorDepth"in Vx.default.WriteStream.prototype?Vx.default.WriteStream.prototype.getColorDepth():process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}function hne(t){let e=Ane;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=Ie("async_hooks");e=Ane=new r;let s=process.stdout._write;process.stdout._write=function(n,c,f){let p=e.getStore();return typeof p>"u"?s.call(this,n,c,f):p.stdout.write(n,c,f)};let a=process.stderr._write;process.stderr._write=function(n,c,f){let p=e.getStore();return typeof p>"u"?a.call(this,n,c,f):p.stderr.write(n,c,f)}}return r=>e.run(t,r)}var Vx,Ane,gne=Ct(()=>{Vx=et(Ie("tty"),1)});var Kx,dne=Ct(()=>{c0();Kx=class t extends ot{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let s=new t(r);s.path=e.path;for(let a of e.options)switch(a.name){case"-c":s.commands.push(Number(a.value));break;case"-i":s.index=Number(a.value);break}return s}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: -`),this.context.stdout.write(` -`);let r=0;for(let s of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[s].commandClass,{prefix:`${r++}. `.padStart(5)}));this.context.stdout.write(` -`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. -`)}}}});async function Ene(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:s,resolvedContext:a}=Cne(t);return wa.from(r,e).runExit(s,a)}async function Ine(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:s,resolvedContext:a}=Cne(t);return wa.from(r,e).run(s,a)}function Cne(t){let e,r,s,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(s=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof ot||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?s=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],s=t[2]):t[0]&&t[0].prototype instanceof ot||Array.isArray(t[0])?(r=t[0],s=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],s=t[2],a=t[3];break}if(typeof s>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:s,resolvedContext:a}}function yne(t){return t()}var mne,wa,wne=Ct(()=>{Ox();Yx();pU();gne();c0();dne();mne=Symbol("clipanion/errorCommand");wa=class t{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:s,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new Wx({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=s,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let s=new t(r),a=Array.isArray(e)?e:[e];for(let n of a)s.register(n);return s}register(e){var r;let s=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[ot.isOption]&&s.set(p,h)}let n=this.builder.command(),c=n.cliIndex,f=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof f<"u")for(let p of f)n.addPath(p);this.registrations.set(e,{specs:s,builder:n,index:c});for(let[p,{definition:h}]of s.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:s,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:c,process:f}=this.builder.compile(),p=f(s,{partial:n}),h={...t.defaultContext,...a};switch(p.selectedIndex){case Fd:{let E=Kx.from(p,c);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=c[p.selectedIndex],C=this.registrations.get(E);if(typeof C>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let S=new E;S.context=h,S.tokens=p.tokens,S.path=p.path;try{for(let[P,{transformer:I}]of C.specs.entries())S[P]=I(C.builder,P,p,h);return S}catch(P){throw P[mne]=S,P}}break}}async run(e,r){var s,a;let n,c={...t.defaultContext,...r},f=(s=this.enableColors)!==null&&s!==void 0?s:c.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,c)}catch(E){return c.stdout.write(this.error(E,{colored:f})),1}if(n.help)return c.stdout.write(this.usage(n,{colored:f,detailed:!0})),0;n.context=c,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:E=>this.definition(E),error:(E,C)=>this.error(E,C),format:E=>this.format(E),process:(E,C)=>this.process(E,{...c,...C}),run:(E,C)=>this.run(E,{...c,...C}),usage:(E,C)=>this.usage(E,C)};let p=this.enableCapture&&(a=hne(c))!==null&&a!==void 0?a:yne,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return c.stdout.write(this.error(E,{colored:f,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:s}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),c=typeof e.usage.category<"u"?qo(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,f=typeof e.usage.description<"u"?qo(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?qo(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,C])=>[qo(E,{format:this.format(r),paragraphs:!1}),C.replace(/\$0/g,this.binaryName)]):void 0;return{path:s,usage:a,category:c,description:f,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let s of this.registrations.keys()){let a=this.definition(s,{colored:e});a&&r.push(a)}return r}usage(e=null,{colored:r,detailed:s=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,E=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(P=>P.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(E){e=null;continue}}e&&(s=!0)}let c=e!==null&&e instanceof ot?e.constructor:e,f="";if(c)if(s){let{description:p="",details:h="",examples:E=[]}=c.usage||{};p!==""&&(f+=qo(p,{format:this.format(r),paragraphs:!1}).replace(/^./,P=>P.toUpperCase()),f+=` -`),(h!==""||E.length>0)&&(f+=`${this.format(r).header("Usage")} -`,f+=` -`);let{usage:C,options:S}=this.getUsageByRegistration(c,{inlineOptions:!1});if(f+=`${this.format(r).bold(a)}${C} -`,S.length>0){f+=` -`,f+=`${this.format(r).header("Options")} -`;let P=S.reduce((I,R)=>Math.max(I,R.definition.length),0);f+=` -`;for(let{definition:I,description:R}of S)f+=` ${this.format(r).bold(I.padEnd(P))} ${qo(R,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(f+=` -`,f+=`${this.format(r).header("Details")} -`,f+=` -`,f+=qo(h,{format:this.format(r),paragraphs:!0})),E.length>0){f+=` -`,f+=`${this.format(r).header("Examples")} -`;for(let[P,I]of E)f+=` -`,f+=qo(P,{format:this.format(r),paragraphs:!1}),f+=`${I.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} -`}}else{let{usage:p}=this.getUsageByRegistration(c);f+=`${this.format(r).bold(a)}${p} -`}else{let p=new Map;for(let[S,{index:P}]of this.registrations.entries()){if(typeof S.usage>"u")continue;let I=typeof S.usage.category<"u"?qo(S.usage.category,{format:this.format(r),paragraphs:!1}):null,R=p.get(I);typeof R>"u"&&p.set(I,R=[]);let{usage:N}=this.getUsageByIndex(P);R.push({commandClass:S,usage:N})}let h=Array.from(p.keys()).sort((S,P)=>S===null?-1:P===null?1:S.localeCompare(P,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",C=typeof this.binaryVersion<"u";E||C?(E&&C?f+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} - -`:E?f+=`${this.format(r).header(`${this.binaryLabel}`)} -`:f+=`${this.format(r).header(`${this.binaryVersion}`)} -`,f+=` ${this.format(r).bold(a)}${this.binaryName} -`):f+=`${this.format(r).bold(a)}${this.binaryName} -`;for(let S of h){let P=p.get(S).slice().sort((R,N)=>R.usage.localeCompare(N.usage,"en",{usage:"sort",caseFirst:"upper"})),I=S!==null?S.trim():"General commands";f+=` -`,f+=`${this.format(r).header(`${I}`)} -`;for(let{commandClass:R,usage:N}of P){let U=R.usage.description||"undocumented";f+=` -`,f+=` ${this.format(r).bold(N)} -`,f+=` ${qo(U,{format:this.format(r),paragraphs:!1})}`}}f+=` -`,f+=qo("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return f}error(e,r){var s,{colored:a,command:n=(s=e[mne])!==null&&s!==void 0?s:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let c="",f=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");f==="Error"&&(f="Internal Error"),c+=`${this.format(a).error(f)}: ${e.message} -`;let p=e.clipanion;return typeof p<"u"?p.type==="usage"&&(c+=` -`,c+=this.usage(n)):e.stack&&(c+=`${e.stack.replace(/^.*\n/,"")} -`),c}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:t.defaultContext.colorDepth>1)?tne:rne}getUsageByRegistration(e,r){let s=this.registrations.get(e);if(typeof s>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(s.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};wa.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:pne()}});var rB,Bne=Ct(()=>{c0();rB=class extends ot{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} -`)}};rB.paths=[["--clipanion=definitions"]]});var nB,vne=Ct(()=>{c0();nB=class extends ot{async execute(){this.context.stdout.write(this.cli.usage())}};nB.paths=[["-h"],["--help"]]});function Jx(t={}){return Ea({definition(e,r){var s;e.addProxy({name:(s=t.name)!==null&&s!==void 0?s:r,required:t.required})},transformer(e,r,s){return s.positionals.map(({value:a})=>a)}})}var vU=Ct(()=>{Bp()});var iB,Sne=Ct(()=>{c0();vU();iB=class extends ot{constructor(){super(...arguments),this.args=Jx()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} -`)}};iB.paths=[["--clipanion=tokens"]]});var sB,Dne=Ct(()=>{c0();sB=class extends ot{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} -`)}};sB.paths=[["-v"],["--version"]]});var SU={};Vt(SU,{DefinitionsCommand:()=>rB,HelpCommand:()=>nB,TokensCommand:()=>iB,VersionCommand:()=>sB});var bne=Ct(()=>{Bne();vne();Sne();Dne()});function Pne(t,e,r){let[s,a]=Gf(e,r??{}),{arity:n=1}=a,c=t.split(","),f=new Set(c);return Ea({definition(p){p.addOption({names:c,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let C,S=typeof s<"u"?[...s]:void 0;for(let{name:P,value:I}of E.options)f.has(P)&&(C=P,S=S??[],S.push(I));return typeof S<"u"?Nd(C??h,S,a.validator):S}})}var xne=Ct(()=>{Bp()});function kne(t,e,r){let[s,a]=Gf(e,r??{}),n=t.split(","),c=new Set(n);return Ea({definition(f){f.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(f,p,h){let E=s;for(let{name:C,value:S}of h.options)c.has(C)&&(E=S);return E}})}var Qne=Ct(()=>{Bp()});function Tne(t,e,r){let[s,a]=Gf(e,r??{}),n=t.split(","),c=new Set(n);return Ea({definition(f){f.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(f,p,h){let E=s;for(let{name:C,value:S}of h.options)c.has(C)&&(E??(E=0),S?E+=1:E=0);return E}})}var Rne=Ct(()=>{Bp()});function Fne(t={}){return Ea({definition(e,r){var s;e.addRest({name:(s=t.name)!==null&&s!==void 0?s:r,required:t.required})},transformer(e,r,s){let a=c=>{let f=s.positionals[c];return f.extra===jl||f.extra===!1&&cc)}})}var Nne=Ct(()=>{Yx();Bp()});function NZe(t,e,r){let[s,a]=Gf(e,r??{}),{arity:n=1}=a,c=t.split(","),f=new Set(c);return Ea({definition(p){p.addOption({names:c,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,C){let S,P=s;typeof a.env<"u"&&C.env[a.env]&&(S=a.env,P=C.env[a.env]);for(let{name:I,value:R}of E.options)f.has(I)&&(S=I,P=R);return typeof P=="string"?Nd(S??h,P,a.validator):P}})}function OZe(t={}){let{required:e=!0}=t;return Ea({definition(r,s){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:s,required:t.required})},transformer(r,s,a){var n;for(let c=0;c{Yx();Bp()});var ge={};Vt(ge,{Array:()=>Pne,Boolean:()=>kne,Counter:()=>Tne,Proxy:()=>Jx,Rest:()=>Fne,String:()=>One,applyValidator:()=>Nd,cleanValidationError:()=>_x,formatError:()=>z2,isOptionSymbol:()=>J2,makeCommandOption:()=>Ea,rerouteArguments:()=>Gf});var Mne=Ct(()=>{Bp();vU();xne();Qne();Rne();Nne();Lne()});var oB={};Vt(oB,{Builtins:()=>SU,Cli:()=>wa,Command:()=>ot,Option:()=>ge,UsageError:()=>nt,formatMarkdownish:()=>qo,run:()=>Ine,runExit:()=>Ene});var Wt=Ct(()=>{Mx();pU();c0();wne();bne();Mne()});var _ne=L((q9t,LZe)=>{LZe.exports={name:"dotenv",version:"16.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://github.com/motdotla/dotenv?sponsor=1",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var qne=L((G9t,vp)=>{var Une=Ie("fs"),bU=Ie("path"),MZe=Ie("os"),_Ze=Ie("crypto"),UZe=_ne(),PU=UZe.version,HZe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function jZe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` -`);let s;for(;(s=HZe.exec(r))!=null;){let a=s[1],n=s[2]||"";n=n.trim();let c=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),c==='"'&&(n=n.replace(/\\n/g,` -`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function qZe(t){let e=jne(t),r=Gs.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let s=Hne(t).split(","),a=s.length,n;for(let c=0;c=a)throw f}return Gs.parse(n)}function GZe(t){console.log(`[dotenv@${PU}][INFO] ${t}`)}function WZe(t){console.log(`[dotenv@${PU}][WARN] ${t}`)}function DU(t){console.log(`[dotenv@${PU}][DEBUG] ${t}`)}function Hne(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function YZe(t,e){let r;try{r=new URL(e)}catch(f){throw f.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):f}let s=r.password;if(!s)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,c=t.parsed[n];if(!c)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:c,key:s}}function jne(t){let e=bU.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function VZe(t){return t[0]==="~"?bU.join(MZe.homedir(),t.slice(1)):t}function KZe(t){GZe("Loading env from encrypted .env.vault");let e=Gs._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),Gs.populate(r,e,t),{parsed:e}}function JZe(t){let e=bU.resolve(process.cwd(),".env"),r="utf8",s=!!(t&&t.debug);t&&(t.path!=null&&(e=VZe(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=Gs.parse(Une.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),Gs.populate(n,a,t),{parsed:a}}catch(a){return s&&DU(`Failed to load ${e} ${a.message}`),{error:a}}}function zZe(t){let e=jne(t);return Hne(t).length===0?Gs.configDotenv(t):Une.existsSync(e)?Gs._configVault(t):(WZe(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),Gs.configDotenv(t))}function ZZe(t,e){let r=Buffer.from(e.slice(-64),"hex"),s=Buffer.from(t,"base64"),a=s.slice(0,12),n=s.slice(-16);s=s.slice(12,-16);try{let c=_Ze.createDecipheriv("aes-256-gcm",r,a);return c.setAuthTag(n),`${c.update(s)}${c.final()}`}catch(c){let f=c instanceof RangeError,p=c.message==="Invalid key length",h=c.message==="Unsupported state or unable to authenticate data";if(f||p){let E="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(E)}else if(h){let E="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(E)}else throw console.error("Error: ",c.code),console.error("Error: ",c.message),c}}function XZe(t,e,r={}){let s=!!(r&&r.debug),a=!!(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),s&&DU(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var Gs={configDotenv:JZe,_configVault:KZe,_parseVault:qZe,config:zZe,decrypt:ZZe,parse:jZe,populate:XZe};vp.exports.configDotenv=Gs.configDotenv;vp.exports._configVault=Gs._configVault;vp.exports._parseVault=Gs._parseVault;vp.exports.config=Gs.config;vp.exports.decrypt=Gs.decrypt;vp.exports.parse=Gs.parse;vp.exports.populate=Gs.populate;vp.exports=Gs});var Wne=L((W9t,Gne)=>{"use strict";Gne.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var Od=L((Y9t,xU)=>{"use strict";var $Ze=Wne(),Yne=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,s=()=>{r--,e.length>0&&e.shift()()},a=(f,p,...h)=>{r++;let E=$Ze(f,...h);p(E),E.then(s,s)},n=(f,p,...h)=>{rnew Promise(h=>n(f,h,...p));return Object.defineProperties(c,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),c};xU.exports=Yne;xU.exports.default=Yne});function Vf(t){return`YN${t.toString(10).padStart(4,"0")}`}function zx(t){let e=Number(t.slice(2));if(typeof Dr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var Dr,Zx=Ct(()=>{Dr=(Me=>(Me[Me.UNNAMED=0]="UNNAMED",Me[Me.EXCEPTION=1]="EXCEPTION",Me[Me.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Me[Me.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Me[Me.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Me[Me.BUILD_DISABLED=5]="BUILD_DISABLED",Me[Me.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Me[Me.MUST_BUILD=7]="MUST_BUILD",Me[Me.MUST_REBUILD=8]="MUST_REBUILD",Me[Me.BUILD_FAILED=9]="BUILD_FAILED",Me[Me.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Me[Me.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Me[Me.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Me[Me.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Me[Me.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Me[Me.REMOTE_INVALID=15]="REMOTE_INVALID",Me[Me.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Me[Me.RESOLUTION_PACK=17]="RESOLUTION_PACK",Me[Me.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Me[Me.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Me[Me.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Me[Me.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Me[Me.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Me[Me.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Me[Me.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Me[Me.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Me[Me.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Me[Me.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Me[Me.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Me[Me.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Me[Me.FETCH_FAILED=30]="FETCH_FAILED",Me[Me.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Me[Me.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Me[Me.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Me[Me.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Me[Me.NETWORK_ERROR=35]="NETWORK_ERROR",Me[Me.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Me[Me.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Me[Me.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Me[Me.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Me[Me.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Me[Me.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Me[Me.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Me[Me.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Me[Me.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Me[Me.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Me[Me.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Me[Me.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Me[Me.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Me[Me.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Me[Me.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Me[Me.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Me[Me.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Me[Me.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Me[Me.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Me[Me.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Me[Me.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Me[Me.INVALID_MANIFEST=57]="INVALID_MANIFEST",Me[Me.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Me[Me.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Me[Me.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Me[Me.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Me[Me.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Me[Me.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Me[Me.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Me[Me.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Me[Me.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Me[Me.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Me[Me.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Me[Me.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Me[Me.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Me[Me.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Me[Me.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Me[Me.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Me[Me.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Me[Me.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Me[Me.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Me[Me.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Me[Me.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Me[Me.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Me[Me.NETWORK_DISABLED=80]="NETWORK_DISABLED",Me[Me.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Me[Me.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Me[Me.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Me[Me.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Me[Me.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Me[Me.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Me[Me.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Me[Me.VERSION_NOTICE=88]="VERSION_NOTICE",Me[Me.TIPS_NOTICE=89]="TIPS_NOTICE",Me[Me.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Me[Me.INVALID_PROVENANCE_ENVIRONMENT=91]="INVALID_PROVENANCE_ENVIRONMENT",Me))(Dr||{})});var aB=L((K9t,Vne)=>{var eXe="2.0.0",tXe=Number.MAX_SAFE_INTEGER||9007199254740991,rXe=16,nXe=250,iXe=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Vne.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:rXe,MAX_SAFE_BUILD_LENGTH:nXe,MAX_SAFE_INTEGER:tXe,RELEASE_TYPES:iXe,SEMVER_SPEC_VERSION:eXe,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var lB=L((J9t,Kne)=>{var sXe=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};Kne.exports=sXe});var wE=L((Sp,Jne)=>{var{MAX_SAFE_COMPONENT_LENGTH:kU,MAX_SAFE_BUILD_LENGTH:oXe,MAX_LENGTH:aXe}=aB(),lXe=lB();Sp=Jne.exports={};var cXe=Sp.re=[],uXe=Sp.safeRe=[],rr=Sp.src=[],nr=Sp.t={},fXe=0,QU="[a-zA-Z0-9-]",AXe=[["\\s",1],["\\d",aXe],[QU,oXe]],pXe=t=>{for(let[e,r]of AXe)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Kr=(t,e,r)=>{let s=pXe(e),a=fXe++;lXe(t,a,e),nr[t]=a,rr[a]=e,cXe[a]=new RegExp(e,r?"g":void 0),uXe[a]=new RegExp(s,r?"g":void 0)};Kr("NUMERICIDENTIFIER","0|[1-9]\\d*");Kr("NUMERICIDENTIFIERLOOSE","\\d+");Kr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${QU}*`);Kr("MAINVERSION",`(${rr[nr.NUMERICIDENTIFIER]})\\.(${rr[nr.NUMERICIDENTIFIER]})\\.(${rr[nr.NUMERICIDENTIFIER]})`);Kr("MAINVERSIONLOOSE",`(${rr[nr.NUMERICIDENTIFIERLOOSE]})\\.(${rr[nr.NUMERICIDENTIFIERLOOSE]})\\.(${rr[nr.NUMERICIDENTIFIERLOOSE]})`);Kr("PRERELEASEIDENTIFIER",`(?:${rr[nr.NUMERICIDENTIFIER]}|${rr[nr.NONNUMERICIDENTIFIER]})`);Kr("PRERELEASEIDENTIFIERLOOSE",`(?:${rr[nr.NUMERICIDENTIFIERLOOSE]}|${rr[nr.NONNUMERICIDENTIFIER]})`);Kr("PRERELEASE",`(?:-(${rr[nr.PRERELEASEIDENTIFIER]}(?:\\.${rr[nr.PRERELEASEIDENTIFIER]})*))`);Kr("PRERELEASELOOSE",`(?:-?(${rr[nr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${rr[nr.PRERELEASEIDENTIFIERLOOSE]})*))`);Kr("BUILDIDENTIFIER",`${QU}+`);Kr("BUILD",`(?:\\+(${rr[nr.BUILDIDENTIFIER]}(?:\\.${rr[nr.BUILDIDENTIFIER]})*))`);Kr("FULLPLAIN",`v?${rr[nr.MAINVERSION]}${rr[nr.PRERELEASE]}?${rr[nr.BUILD]}?`);Kr("FULL",`^${rr[nr.FULLPLAIN]}$`);Kr("LOOSEPLAIN",`[v=\\s]*${rr[nr.MAINVERSIONLOOSE]}${rr[nr.PRERELEASELOOSE]}?${rr[nr.BUILD]}?`);Kr("LOOSE",`^${rr[nr.LOOSEPLAIN]}$`);Kr("GTLT","((?:<|>)?=?)");Kr("XRANGEIDENTIFIERLOOSE",`${rr[nr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Kr("XRANGEIDENTIFIER",`${rr[nr.NUMERICIDENTIFIER]}|x|X|\\*`);Kr("XRANGEPLAIN",`[v=\\s]*(${rr[nr.XRANGEIDENTIFIER]})(?:\\.(${rr[nr.XRANGEIDENTIFIER]})(?:\\.(${rr[nr.XRANGEIDENTIFIER]})(?:${rr[nr.PRERELEASE]})?${rr[nr.BUILD]}?)?)?`);Kr("XRANGEPLAINLOOSE",`[v=\\s]*(${rr[nr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${rr[nr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${rr[nr.XRANGEIDENTIFIERLOOSE]})(?:${rr[nr.PRERELEASELOOSE]})?${rr[nr.BUILD]}?)?)?`);Kr("XRANGE",`^${rr[nr.GTLT]}\\s*${rr[nr.XRANGEPLAIN]}$`);Kr("XRANGELOOSE",`^${rr[nr.GTLT]}\\s*${rr[nr.XRANGEPLAINLOOSE]}$`);Kr("COERCEPLAIN",`(^|[^\\d])(\\d{1,${kU}})(?:\\.(\\d{1,${kU}}))?(?:\\.(\\d{1,${kU}}))?`);Kr("COERCE",`${rr[nr.COERCEPLAIN]}(?:$|[^\\d])`);Kr("COERCEFULL",rr[nr.COERCEPLAIN]+`(?:${rr[nr.PRERELEASE]})?(?:${rr[nr.BUILD]})?(?:$|[^\\d])`);Kr("COERCERTL",rr[nr.COERCE],!0);Kr("COERCERTLFULL",rr[nr.COERCEFULL],!0);Kr("LONETILDE","(?:~>?)");Kr("TILDETRIM",`(\\s*)${rr[nr.LONETILDE]}\\s+`,!0);Sp.tildeTrimReplace="$1~";Kr("TILDE",`^${rr[nr.LONETILDE]}${rr[nr.XRANGEPLAIN]}$`);Kr("TILDELOOSE",`^${rr[nr.LONETILDE]}${rr[nr.XRANGEPLAINLOOSE]}$`);Kr("LONECARET","(?:\\^)");Kr("CARETTRIM",`(\\s*)${rr[nr.LONECARET]}\\s+`,!0);Sp.caretTrimReplace="$1^";Kr("CARET",`^${rr[nr.LONECARET]}${rr[nr.XRANGEPLAIN]}$`);Kr("CARETLOOSE",`^${rr[nr.LONECARET]}${rr[nr.XRANGEPLAINLOOSE]}$`);Kr("COMPARATORLOOSE",`^${rr[nr.GTLT]}\\s*(${rr[nr.LOOSEPLAIN]})$|^$`);Kr("COMPARATOR",`^${rr[nr.GTLT]}\\s*(${rr[nr.FULLPLAIN]})$|^$`);Kr("COMPARATORTRIM",`(\\s*)${rr[nr.GTLT]}\\s*(${rr[nr.LOOSEPLAIN]}|${rr[nr.XRANGEPLAIN]})`,!0);Sp.comparatorTrimReplace="$1$2$3";Kr("HYPHENRANGE",`^\\s*(${rr[nr.XRANGEPLAIN]})\\s+-\\s+(${rr[nr.XRANGEPLAIN]})\\s*$`);Kr("HYPHENRANGELOOSE",`^\\s*(${rr[nr.XRANGEPLAINLOOSE]})\\s+-\\s+(${rr[nr.XRANGEPLAINLOOSE]})\\s*$`);Kr("STAR","(<|>)?=?\\s*\\*");Kr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Kr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var Xx=L((z9t,zne)=>{var hXe=Object.freeze({loose:!0}),gXe=Object.freeze({}),dXe=t=>t?typeof t!="object"?hXe:t:gXe;zne.exports=dXe});var TU=L((Z9t,$ne)=>{var Zne=/^[0-9]+$/,Xne=(t,e)=>{let r=Zne.test(t),s=Zne.test(e);return r&&s&&(t=+t,e=+e),t===e?0:r&&!s?-1:s&&!r?1:tXne(e,t);$ne.exports={compareIdentifiers:Xne,rcompareIdentifiers:mXe}});var Go=L((X9t,nie)=>{var $x=lB(),{MAX_LENGTH:eie,MAX_SAFE_INTEGER:ek}=aB(),{safeRe:tie,t:rie}=wE(),yXe=Xx(),{compareIdentifiers:BE}=TU(),RU=class t{constructor(e,r){if(r=yXe(r),e instanceof t){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>eie)throw new TypeError(`version is longer than ${eie} characters`);$x("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let s=e.trim().match(r.loose?tie[rie.LOOSE]:tie[rie.FULL]);if(!s)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+s[1],this.minor=+s[2],this.patch=+s[3],this.major>ek||this.major<0)throw new TypeError("Invalid major version");if(this.minor>ek||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>ek||this.patch<0)throw new TypeError("Invalid patch version");s[4]?this.prerelease=s[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&s===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];s===!1&&(n=[r]),BE(this.prerelease[0],r)===0?isNaN(this.prerelease[1])&&(this.prerelease=n):this.prerelease=n}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};nie.exports=RU});var Ld=L(($9t,sie)=>{var iie=Go(),EXe=(t,e,r=!1)=>{if(t instanceof iie)return t;try{return new iie(t,e)}catch(s){if(!r)return null;throw s}};sie.exports=EXe});var aie=L((eWt,oie)=>{var IXe=Ld(),CXe=(t,e)=>{let r=IXe(t,e);return r?r.version:null};oie.exports=CXe});var cie=L((tWt,lie)=>{var wXe=Ld(),BXe=(t,e)=>{let r=wXe(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};lie.exports=BXe});var Aie=L((rWt,fie)=>{var uie=Go(),vXe=(t,e,r,s,a)=>{typeof r=="string"&&(a=s,s=r,r=void 0);try{return new uie(t instanceof uie?t.version:t,r).inc(e,s,a).version}catch{return null}};fie.exports=vXe});var gie=L((nWt,hie)=>{var pie=Ld(),SXe=(t,e)=>{let r=pie(t,null,!0),s=pie(e,null,!0),a=r.compare(s);if(a===0)return null;let n=a>0,c=n?r:s,f=n?s:r,p=!!c.prerelease.length;if(!!f.prerelease.length&&!p)return!f.patch&&!f.minor?"major":c.patch?"patch":c.minor?"minor":"major";let E=p?"pre":"";return r.major!==s.major?E+"major":r.minor!==s.minor?E+"minor":r.patch!==s.patch?E+"patch":"prerelease"};hie.exports=SXe});var mie=L((iWt,die)=>{var DXe=Go(),bXe=(t,e)=>new DXe(t,e).major;die.exports=bXe});var Eie=L((sWt,yie)=>{var PXe=Go(),xXe=(t,e)=>new PXe(t,e).minor;yie.exports=xXe});var Cie=L((oWt,Iie)=>{var kXe=Go(),QXe=(t,e)=>new kXe(t,e).patch;Iie.exports=QXe});var Bie=L((aWt,wie)=>{var TXe=Ld(),RXe=(t,e)=>{let r=TXe(t,e);return r&&r.prerelease.length?r.prerelease:null};wie.exports=RXe});var vc=L((lWt,Sie)=>{var vie=Go(),FXe=(t,e,r)=>new vie(t,r).compare(new vie(e,r));Sie.exports=FXe});var bie=L((cWt,Die)=>{var NXe=vc(),OXe=(t,e,r)=>NXe(e,t,r);Die.exports=OXe});var xie=L((uWt,Pie)=>{var LXe=vc(),MXe=(t,e)=>LXe(t,e,!0);Pie.exports=MXe});var tk=L((fWt,Qie)=>{var kie=Go(),_Xe=(t,e,r)=>{let s=new kie(t,r),a=new kie(e,r);return s.compare(a)||s.compareBuild(a)};Qie.exports=_Xe});var Rie=L((AWt,Tie)=>{var UXe=tk(),HXe=(t,e)=>t.sort((r,s)=>UXe(r,s,e));Tie.exports=HXe});var Nie=L((pWt,Fie)=>{var jXe=tk(),qXe=(t,e)=>t.sort((r,s)=>jXe(s,r,e));Fie.exports=qXe});var cB=L((hWt,Oie)=>{var GXe=vc(),WXe=(t,e,r)=>GXe(t,e,r)>0;Oie.exports=WXe});var rk=L((gWt,Lie)=>{var YXe=vc(),VXe=(t,e,r)=>YXe(t,e,r)<0;Lie.exports=VXe});var FU=L((dWt,Mie)=>{var KXe=vc(),JXe=(t,e,r)=>KXe(t,e,r)===0;Mie.exports=JXe});var NU=L((mWt,_ie)=>{var zXe=vc(),ZXe=(t,e,r)=>zXe(t,e,r)!==0;_ie.exports=ZXe});var nk=L((yWt,Uie)=>{var XXe=vc(),$Xe=(t,e,r)=>XXe(t,e,r)>=0;Uie.exports=$Xe});var ik=L((EWt,Hie)=>{var e$e=vc(),t$e=(t,e,r)=>e$e(t,e,r)<=0;Hie.exports=t$e});var OU=L((IWt,jie)=>{var r$e=FU(),n$e=NU(),i$e=cB(),s$e=nk(),o$e=rk(),a$e=ik(),l$e=(t,e,r,s)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return r$e(t,r,s);case"!=":return n$e(t,r,s);case">":return i$e(t,r,s);case">=":return s$e(t,r,s);case"<":return o$e(t,r,s);case"<=":return a$e(t,r,s);default:throw new TypeError(`Invalid operator: ${e}`)}};jie.exports=l$e});var Gie=L((CWt,qie)=>{var c$e=Go(),u$e=Ld(),{safeRe:sk,t:ok}=wE(),f$e=(t,e)=>{if(t instanceof c$e)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(e.includePrerelease?sk[ok.COERCEFULL]:sk[ok.COERCE]);else{let p=e.includePrerelease?sk[ok.COERCERTLFULL]:sk[ok.COERCERTL],h;for(;(h=p.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||h.index+h[0].length!==r.index+r[0].length)&&(r=h),p.lastIndex=h.index+h[1].length+h[2].length;p.lastIndex=-1}if(r===null)return null;let s=r[2],a=r[3]||"0",n=r[4]||"0",c=e.includePrerelease&&r[5]?`-${r[5]}`:"",f=e.includePrerelease&&r[6]?`+${r[6]}`:"";return u$e(`${s}.${a}.${n}${c}${f}`,e)};qie.exports=f$e});var Yie=L((wWt,Wie)=>{"use strict";Wie.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var ak=L((BWt,Vie)=>{"use strict";Vie.exports=Fn;Fn.Node=Md;Fn.create=Fn;function Fn(t){var e=this;if(e instanceof Fn||(e=new Fn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,s=arguments.length;r1)r=e;else if(this.head)s=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;s!==null;a++)r=t(r,s.value,a),s=s.next;return r};Fn.prototype.reduceReverse=function(t,e){var r,s=this.tail;if(arguments.length>1)r=e;else if(this.tail)s=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;s!==null;a--)r=t(r,s.value,a),s=s.prev;return r};Fn.prototype.toArray=function(){for(var t=new Array(this.length),e=0,r=this.head;r!==null;e++)t[e]=r.value,r=r.next;return t};Fn.prototype.toArrayReverse=function(){for(var t=new Array(this.length),e=0,r=this.tail;r!==null;e++)t[e]=r.value,r=r.prev;return t};Fn.prototype.slice=function(t,e){e=e||this.length,e<0&&(e+=this.length),t=t||0,t<0&&(t+=this.length);var r=new Fn;if(ethis.length&&(e=this.length);for(var s=0,a=this.head;a!==null&&sthis.length&&(e=this.length);for(var s=this.length,a=this.tail;a!==null&&s>e;s--)a=a.prev;for(;a!==null&&s>t;s--,a=a.prev)r.push(a.value);return r};Fn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var s=0,a=this.head;a!==null&&s{"use strict";var g$e=ak(),_d=Symbol("max"),bp=Symbol("length"),vE=Symbol("lengthCalculator"),fB=Symbol("allowStale"),Ud=Symbol("maxAge"),Dp=Symbol("dispose"),Kie=Symbol("noDisposeOnSet"),Ws=Symbol("lruList"),_u=Symbol("cache"),zie=Symbol("updateAgeOnGet"),LU=()=>1,_U=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let r=this[_d]=e.max||1/0,s=e.length||LU;if(this[vE]=typeof s!="function"?LU:s,this[fB]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[Ud]=e.maxAge||0,this[Dp]=e.dispose,this[Kie]=e.noDisposeOnSet||!1,this[zie]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[_d]=e||1/0,uB(this)}get max(){return this[_d]}set allowStale(e){this[fB]=!!e}get allowStale(){return this[fB]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[Ud]=e,uB(this)}get maxAge(){return this[Ud]}set lengthCalculator(e){typeof e!="function"&&(e=LU),e!==this[vE]&&(this[vE]=e,this[bp]=0,this[Ws].forEach(r=>{r.length=this[vE](r.value,r.key),this[bp]+=r.length})),uB(this)}get lengthCalculator(){return this[vE]}get length(){return this[bp]}get itemCount(){return this[Ws].length}rforEach(e,r){r=r||this;for(let s=this[Ws].tail;s!==null;){let a=s.prev;Jie(this,e,s,r),s=a}}forEach(e,r){r=r||this;for(let s=this[Ws].head;s!==null;){let a=s.next;Jie(this,e,s,r),s=a}}keys(){return this[Ws].toArray().map(e=>e.key)}values(){return this[Ws].toArray().map(e=>e.value)}reset(){this[Dp]&&this[Ws]&&this[Ws].length&&this[Ws].forEach(e=>this[Dp](e.key,e.value)),this[_u]=new Map,this[Ws]=new g$e,this[bp]=0}dump(){return this[Ws].map(e=>lk(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[Ws]}set(e,r,s){if(s=s||this[Ud],s&&typeof s!="number")throw new TypeError("maxAge must be a number");let a=s?Date.now():0,n=this[vE](r,e);if(this[_u].has(e)){if(n>this[_d])return SE(this,this[_u].get(e)),!1;let p=this[_u].get(e).value;return this[Dp]&&(this[Kie]||this[Dp](e,p.value)),p.now=a,p.maxAge=s,p.value=r,this[bp]+=n-p.length,p.length=n,this.get(e),uB(this),!0}let c=new UU(e,r,n,a,s);return c.length>this[_d]?(this[Dp]&&this[Dp](e,r),!1):(this[bp]+=c.length,this[Ws].unshift(c),this[_u].set(e,this[Ws].head),uB(this),!0)}has(e){if(!this[_u].has(e))return!1;let r=this[_u].get(e).value;return!lk(this,r)}get(e){return MU(this,e,!0)}peek(e){return MU(this,e,!1)}pop(){let e=this[Ws].tail;return e?(SE(this,e),e.value):null}del(e){SE(this,this[_u].get(e))}load(e){this.reset();let r=Date.now();for(let s=e.length-1;s>=0;s--){let a=e[s],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let c=n-r;c>0&&this.set(a.k,a.v,c)}}}prune(){this[_u].forEach((e,r)=>MU(this,r,!1))}},MU=(t,e,r)=>{let s=t[_u].get(e);if(s){let a=s.value;if(lk(t,a)){if(SE(t,s),!t[fB])return}else r&&(t[zie]&&(s.value.now=Date.now()),t[Ws].unshiftNode(s));return a.value}},lk=(t,e)=>{if(!e||!e.maxAge&&!t[Ud])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[Ud]&&r>t[Ud]},uB=t=>{if(t[bp]>t[_d])for(let e=t[Ws].tail;t[bp]>t[_d]&&e!==null;){let r=e.prev;SE(t,e),e=r}},SE=(t,e)=>{if(e){let r=e.value;t[Dp]&&t[Dp](r.key,r.value),t[bp]-=r.length,t[_u].delete(r.key),t[Ws].removeNode(e)}},UU=class{constructor(e,r,s,a,n){this.key=e,this.value=r,this.length=s,this.now=a,this.maxAge=n||0}},Jie=(t,e,r,s)=>{let a=r.value;lk(t,a)&&(SE(t,r),t[fB]||(a=void 0)),a&&e.call(s,a.value,a.key,t)};Zie.exports=_U});var Sc=L((SWt,rse)=>{var HU=class t{constructor(e,r){if(r=m$e(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof jU)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(s=>this.parseRange(s.trim())).filter(s=>s.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let s=this.set[0];if(this.set=this.set.filter(a=>!ese(a[0])),this.set.length===0)this.set=[s];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&v$e(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let s=((this.options.includePrerelease&&w$e)|(this.options.loose&&B$e))+":"+e,a=$ie.get(s);if(a)return a;let n=this.options.loose,c=n?ol[Ba.HYPHENRANGELOOSE]:ol[Ba.HYPHENRANGE];e=e.replace(c,F$e(this.options.includePrerelease)),Si("hyphen replace",e),e=e.replace(ol[Ba.COMPARATORTRIM],E$e),Si("comparator trim",e),e=e.replace(ol[Ba.TILDETRIM],I$e),Si("tilde trim",e),e=e.replace(ol[Ba.CARETTRIM],C$e),Si("caret trim",e);let f=e.split(" ").map(C=>S$e(C,this.options)).join(" ").split(/\s+/).map(C=>R$e(C,this.options));n&&(f=f.filter(C=>(Si("loose invalid filter",C,this.options),!!C.match(ol[Ba.COMPARATORLOOSE])))),Si("range list",f);let p=new Map,h=f.map(C=>new jU(C,this.options));for(let C of h){if(ese(C))return[C];p.set(C.value,C)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return $ie.set(s,E),E}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(s=>tse(s,r)&&e.set.some(a=>tse(a,r)&&s.every(n=>a.every(c=>n.intersects(c,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new y$e(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",v$e=t=>t.value==="",tse=(t,e)=>{let r=!0,s=t.slice(),a=s.pop();for(;r&&s.length;)r=s.every(n=>a.intersects(n,e)),a=s.pop();return r},S$e=(t,e)=>(Si("comp",t,e),t=P$e(t,e),Si("caret",t),t=D$e(t,e),Si("tildes",t),t=k$e(t,e),Si("xrange",t),t=T$e(t,e),Si("stars",t),t),va=t=>!t||t.toLowerCase()==="x"||t==="*",D$e=(t,e)=>t.trim().split(/\s+/).map(r=>b$e(r,e)).join(" "),b$e=(t,e)=>{let r=e.loose?ol[Ba.TILDELOOSE]:ol[Ba.TILDE];return t.replace(r,(s,a,n,c,f)=>{Si("tilde",t,s,a,n,c,f);let p;return va(a)?p="":va(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:va(c)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:f?(Si("replaceTilde pr",f),p=`>=${a}.${n}.${c}-${f} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${c} <${a}.${+n+1}.0-0`,Si("tilde return",p),p})},P$e=(t,e)=>t.trim().split(/\s+/).map(r=>x$e(r,e)).join(" "),x$e=(t,e)=>{Si("caret",t,e);let r=e.loose?ol[Ba.CARETLOOSE]:ol[Ba.CARET],s=e.includePrerelease?"-0":"";return t.replace(r,(a,n,c,f,p)=>{Si("caret",t,a,n,c,f,p);let h;return va(n)?h="":va(c)?h=`>=${n}.0.0${s} <${+n+1}.0.0-0`:va(f)?n==="0"?h=`>=${n}.${c}.0${s} <${n}.${+c+1}.0-0`:h=`>=${n}.${c}.0${s} <${+n+1}.0.0-0`:p?(Si("replaceCaret pr",p),n==="0"?c==="0"?h=`>=${n}.${c}.${f}-${p} <${n}.${c}.${+f+1}-0`:h=`>=${n}.${c}.${f}-${p} <${n}.${+c+1}.0-0`:h=`>=${n}.${c}.${f}-${p} <${+n+1}.0.0-0`):(Si("no pr"),n==="0"?c==="0"?h=`>=${n}.${c}.${f}${s} <${n}.${c}.${+f+1}-0`:h=`>=${n}.${c}.${f}${s} <${n}.${+c+1}.0-0`:h=`>=${n}.${c}.${f} <${+n+1}.0.0-0`),Si("caret return",h),h})},k$e=(t,e)=>(Si("replaceXRanges",t,e),t.split(/\s+/).map(r=>Q$e(r,e)).join(" ")),Q$e=(t,e)=>{t=t.trim();let r=e.loose?ol[Ba.XRANGELOOSE]:ol[Ba.XRANGE];return t.replace(r,(s,a,n,c,f,p)=>{Si("xRange",t,s,a,n,c,f,p);let h=va(n),E=h||va(c),C=E||va(f),S=C;return a==="="&&S&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?s="<0.0.0-0":s="*":a&&S?(E&&(c=0),f=0,a===">"?(a=">=",E?(n=+n+1,c=0,f=0):(c=+c+1,f=0)):a==="<="&&(a="<",E?n=+n+1:c=+c+1),a==="<"&&(p="-0"),s=`${a+n}.${c}.${f}${p}`):E?s=`>=${n}.0.0${p} <${+n+1}.0.0-0`:C&&(s=`>=${n}.${c}.0${p} <${n}.${+c+1}.0-0`),Si("xRange return",s),s})},T$e=(t,e)=>(Si("replaceStars",t,e),t.trim().replace(ol[Ba.STAR],"")),R$e=(t,e)=>(Si("replaceGTE0",t,e),t.trim().replace(ol[e.includePrerelease?Ba.GTE0PRE:Ba.GTE0],"")),F$e=t=>(e,r,s,a,n,c,f,p,h,E,C,S,P)=>(va(s)?r="":va(a)?r=`>=${s}.0.0${t?"-0":""}`:va(n)?r=`>=${s}.${a}.0${t?"-0":""}`:c?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,va(h)?p="":va(E)?p=`<${+h+1}.0.0-0`:va(C)?p=`<${h}.${+E+1}.0-0`:S?p=`<=${h}.${E}.${C}-${S}`:t?p=`<${h}.${E}.${+C+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),N$e=(t,e,r)=>{for(let s=0;s0){let a=t[s].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var AB=L((DWt,lse)=>{var pB=Symbol("SemVer ANY"),WU=class t{static get ANY(){return pB}constructor(e,r){if(r=nse(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),GU("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===pB?this.value="":this.value=this.operator+this.semver.version,GU("comp",this)}parse(e){let r=this.options.loose?ise[sse.COMPARATORLOOSE]:ise[sse.COMPARATOR],s=e.match(r);if(!s)throw new TypeError(`Invalid comparator: ${e}`);this.operator=s[1]!==void 0?s[1]:"",this.operator==="="&&(this.operator=""),s[2]?this.semver=new ose(s[2],this.options.loose):this.semver=pB}toString(){return this.value}test(e){if(GU("Comparator.test",e,this.options.loose),this.semver===pB||e===pB)return!0;if(typeof e=="string")try{e=new ose(e,this.options)}catch{return!1}return qU(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new ase(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new ase(this.value,r).test(e.semver):(r=nse(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||qU(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||qU(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};lse.exports=WU;var nse=Xx(),{safeRe:ise,t:sse}=wE(),qU=OU(),GU=lB(),ose=Go(),ase=Sc()});var hB=L((bWt,cse)=>{var O$e=Sc(),L$e=(t,e,r)=>{try{e=new O$e(e,r)}catch{return!1}return e.test(t)};cse.exports=L$e});var fse=L((PWt,use)=>{var M$e=Sc(),_$e=(t,e)=>new M$e(t,e).set.map(r=>r.map(s=>s.value).join(" ").trim().split(" "));use.exports=_$e});var pse=L((xWt,Ase)=>{var U$e=Go(),H$e=Sc(),j$e=(t,e,r)=>{let s=null,a=null,n=null;try{n=new H$e(e,r)}catch{return null}return t.forEach(c=>{n.test(c)&&(!s||a.compare(c)===-1)&&(s=c,a=new U$e(s,r))}),s};Ase.exports=j$e});var gse=L((kWt,hse)=>{var q$e=Go(),G$e=Sc(),W$e=(t,e,r)=>{let s=null,a=null,n=null;try{n=new G$e(e,r)}catch{return null}return t.forEach(c=>{n.test(c)&&(!s||a.compare(c)===1)&&(s=c,a=new q$e(s,r))}),s};hse.exports=W$e});var yse=L((QWt,mse)=>{var YU=Go(),Y$e=Sc(),dse=cB(),V$e=(t,e)=>{t=new Y$e(t,e);let r=new YU("0.0.0");if(t.test(r)||(r=new YU("0.0.0-0"),t.test(r)))return r;r=null;for(let s=0;s{let f=new YU(c.semver.version);switch(c.operator){case">":f.prerelease.length===0?f.patch++:f.prerelease.push(0),f.raw=f.format();case"":case">=":(!n||dse(f,n))&&(n=f);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${c.operator}`)}}),n&&(!r||dse(r,n))&&(r=n)}return r&&t.test(r)?r:null};mse.exports=V$e});var Ise=L((TWt,Ese)=>{var K$e=Sc(),J$e=(t,e)=>{try{return new K$e(t,e).range||"*"}catch{return null}};Ese.exports=J$e});var ck=L((RWt,vse)=>{var z$e=Go(),Bse=AB(),{ANY:Z$e}=Bse,X$e=Sc(),$$e=hB(),Cse=cB(),wse=rk(),eet=ik(),tet=nk(),ret=(t,e,r,s)=>{t=new z$e(t,s),e=new X$e(e,s);let a,n,c,f,p;switch(r){case">":a=Cse,n=eet,c=wse,f=">",p=">=";break;case"<":a=wse,n=tet,c=Cse,f="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if($$e(t,e,s))return!1;for(let h=0;h{P.semver===Z$e&&(P=new Bse(">=0.0.0")),C=C||P,S=S||P,a(P.semver,C.semver,s)?C=P:c(P.semver,S.semver,s)&&(S=P)}),C.operator===f||C.operator===p||(!S.operator||S.operator===f)&&n(t,S.semver))return!1;if(S.operator===p&&c(t,S.semver))return!1}return!0};vse.exports=ret});var Dse=L((FWt,Sse)=>{var net=ck(),iet=(t,e,r)=>net(t,e,">",r);Sse.exports=iet});var Pse=L((NWt,bse)=>{var set=ck(),oet=(t,e,r)=>set(t,e,"<",r);bse.exports=oet});var Qse=L((OWt,kse)=>{var xse=Sc(),aet=(t,e,r)=>(t=new xse(t,r),e=new xse(e,r),t.intersects(e,r));kse.exports=aet});var Rse=L((LWt,Tse)=>{var cet=hB(),uet=vc();Tse.exports=(t,e,r)=>{let s=[],a=null,n=null,c=t.sort((E,C)=>uet(E,C,r));for(let E of c)cet(E,e,r)?(n=E,a||(a=E)):(n&&s.push([a,n]),n=null,a=null);a&&s.push([a,null]);let f=[];for(let[E,C]of s)E===C?f.push(E):!C&&E===c[0]?f.push("*"):C?E===c[0]?f.push(`<=${C}`):f.push(`${E} - ${C}`):f.push(`>=${E}`);let p=f.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var Fse=Sc(),KU=AB(),{ANY:VU}=KU,gB=hB(),JU=vc(),fet=(t,e,r={})=>{if(t===e)return!0;t=new Fse(t,r),e=new Fse(e,r);let s=!1;e:for(let a of t.set){for(let n of e.set){let c=pet(a,n,r);if(s=s||c!==null,c)continue e}if(s)return!1}return!0},Aet=[new KU(">=0.0.0-0")],Nse=[new KU(">=0.0.0")],pet=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===VU){if(e.length===1&&e[0].semver===VU)return!0;r.includePrerelease?t=Aet:t=Nse}if(e.length===1&&e[0].semver===VU){if(r.includePrerelease)return!0;e=Nse}let s=new Set,a,n;for(let P of t)P.operator===">"||P.operator===">="?a=Ose(a,P,r):P.operator==="<"||P.operator==="<="?n=Lse(n,P,r):s.add(P.semver);if(s.size>1)return null;let c;if(a&&n){if(c=JU(a.semver,n.semver,r),c>0)return null;if(c===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let P of s){if(a&&!gB(P,String(a),r)||n&&!gB(P,String(n),r))return null;for(let I of e)if(!gB(P,String(I),r))return!1;return!0}let f,p,h,E,C=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,S=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;C&&C.prerelease.length===1&&n.operator==="<"&&C.prerelease[0]===0&&(C=!1);for(let P of e){if(E=E||P.operator===">"||P.operator===">=",h=h||P.operator==="<"||P.operator==="<=",a){if(S&&P.semver.prerelease&&P.semver.prerelease.length&&P.semver.major===S.major&&P.semver.minor===S.minor&&P.semver.patch===S.patch&&(S=!1),P.operator===">"||P.operator===">="){if(f=Ose(a,P,r),f===P&&f!==a)return!1}else if(a.operator===">="&&!gB(a.semver,String(P),r))return!1}if(n){if(C&&P.semver.prerelease&&P.semver.prerelease.length&&P.semver.major===C.major&&P.semver.minor===C.minor&&P.semver.patch===C.patch&&(C=!1),P.operator==="<"||P.operator==="<="){if(p=Lse(n,P,r),p===P&&p!==n)return!1}else if(n.operator==="<="&&!gB(n.semver,String(P),r))return!1}if(!P.operator&&(n||a)&&c!==0)return!1}return!(a&&h&&!n&&c!==0||n&&E&&!a&&c!==0||S||C)},Ose=(t,e,r)=>{if(!t)return e;let s=JU(t.semver,e.semver,r);return s>0?t:s<0||e.operator===">"&&t.operator===">="?e:t},Lse=(t,e,r)=>{if(!t)return e;let s=JU(t.semver,e.semver,r);return s<0?t:s>0||e.operator==="<"&&t.operator==="<="?e:t};Mse.exports=fet});var Ai=L((_Wt,jse)=>{var zU=wE(),Use=aB(),het=Go(),Hse=TU(),get=Ld(),det=aie(),met=cie(),yet=Aie(),Eet=gie(),Iet=mie(),Cet=Eie(),wet=Cie(),Bet=Bie(),vet=vc(),Det=bie(),bet=xie(),Pet=tk(),xet=Rie(),ket=Nie(),Qet=cB(),Tet=rk(),Ret=FU(),Fet=NU(),Net=nk(),Oet=ik(),Let=OU(),Met=Gie(),_et=AB(),Uet=Sc(),Het=hB(),jet=fse(),qet=pse(),Get=gse(),Wet=yse(),Yet=Ise(),Vet=ck(),Ket=Dse(),Jet=Pse(),zet=Qse(),Zet=Rse(),Xet=_se();jse.exports={parse:get,valid:det,clean:met,inc:yet,diff:Eet,major:Iet,minor:Cet,patch:wet,prerelease:Bet,compare:vet,rcompare:Det,compareLoose:bet,compareBuild:Pet,sort:xet,rsort:ket,gt:Qet,lt:Tet,eq:Ret,neq:Fet,gte:Net,lte:Oet,cmp:Let,coerce:Met,Comparator:_et,Range:Uet,satisfies:Het,toComparators:jet,maxSatisfying:qet,minSatisfying:Get,minVersion:Wet,validRange:Yet,outside:Vet,gtr:Ket,ltr:Jet,intersects:zet,simplifyRange:Zet,subset:Xet,SemVer:het,re:zU.re,src:zU.src,tokens:zU.t,SEMVER_SPEC_VERSION:Use.SEMVER_SPEC_VERSION,RELEASE_TYPES:Use.RELEASE_TYPES,compareIdentifiers:Hse.compareIdentifiers,rcompareIdentifiers:Hse.rcompareIdentifiers}});var Gse=L((UWt,qse)=>{"use strict";function $et(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Hd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.location=s,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Hd)}$et(Hd,Error);Hd.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",C;for(C=0;C0){for(C=1,S=1;C{switch(Te[1]){case"|":return xe|Te[3];case"&":return xe&Te[3];case"^":return xe^Te[3]}},$)},S="!",P=Fe("!",!1),I=function($){return!$},R="(",N=Fe("(",!1),U=")",W=Fe(")",!1),te=function($){return $},ie=/^[^ \t\n\r()!|&\^]/,Ae=Ne([" "," ",` -`,"\r","(",")","!","|","&","^"],!0,!1),ce=function($){return e.queryPattern.test($)},me=function($){return e.checkFn($)},pe=ke("whitespace"),Be=/^[ \t\n\r]/,Ce=Ne([" "," ",` -`,"\r"],!1,!1),g=0,we=0,ye=[{line:1,column:1}],fe=0,se=[],X=0,De;if("startRule"in e){if(!(e.startRule in s))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=s[e.startRule]}function Re(){return t.substring(we,g)}function dt(){return _e(we,g)}function j($,oe){throw oe=oe!==void 0?oe:_e(we,g),b([ke($)],t.substring(we,g),oe)}function rt($,oe){throw oe=oe!==void 0?oe:_e(we,g),w($,oe)}function Fe($,oe){return{type:"literal",text:$,ignoreCase:oe}}function Ne($,oe,xe){return{type:"class",parts:$,inverted:oe,ignoreCase:xe}}function Pe(){return{type:"any"}}function Ye(){return{type:"end"}}function ke($){return{type:"other",description:$}}function it($){var oe=ye[$],xe;if(oe)return oe;for(xe=$-1;!ye[xe];)xe--;for(oe=ye[xe],oe={line:oe.line,column:oe.column};xe<$;)t.charCodeAt(xe)===10?(oe.line++,oe.column=1):oe.column++,xe++;return ye[$]=oe,oe}function _e($,oe){var xe=it($),Te=it(oe);return{start:{offset:$,line:xe.line,column:xe.column},end:{offset:oe,line:Te.line,column:Te.column}}}function x($){gfe&&(fe=g,se=[]),se.push($))}function w($,oe){return new Hd($,null,null,oe)}function b($,oe,xe){return new Hd(Hd.buildMessage($,oe),$,oe,xe)}function y(){var $,oe,xe,Te,lt,It,qt,ir;if($=g,oe=F(),oe!==r){for(xe=[],Te=g,lt=Z(),lt!==r?(t.charCodeAt(g)===124?(It=n,g++):(It=r,X===0&&x(c)),It===r&&(t.charCodeAt(g)===38?(It=f,g++):(It=r,X===0&&x(p)),It===r&&(t.charCodeAt(g)===94?(It=h,g++):(It=r,X===0&&x(E)))),It!==r?(qt=Z(),qt!==r?(ir=F(),ir!==r?(lt=[lt,It,qt,ir],Te=lt):(g=Te,Te=r)):(g=Te,Te=r)):(g=Te,Te=r)):(g=Te,Te=r);Te!==r;)xe.push(Te),Te=g,lt=Z(),lt!==r?(t.charCodeAt(g)===124?(It=n,g++):(It=r,X===0&&x(c)),It===r&&(t.charCodeAt(g)===38?(It=f,g++):(It=r,X===0&&x(p)),It===r&&(t.charCodeAt(g)===94?(It=h,g++):(It=r,X===0&&x(E)))),It!==r?(qt=Z(),qt!==r?(ir=F(),ir!==r?(lt=[lt,It,qt,ir],Te=lt):(g=Te,Te=r)):(g=Te,Te=r)):(g=Te,Te=r)):(g=Te,Te=r);xe!==r?(we=$,oe=C(oe,xe),$=oe):(g=$,$=r)}else g=$,$=r;return $}function F(){var $,oe,xe,Te,lt,It;return $=g,t.charCodeAt(g)===33?(oe=S,g++):(oe=r,X===0&&x(P)),oe!==r?(xe=F(),xe!==r?(we=$,oe=I(xe),$=oe):(g=$,$=r)):(g=$,$=r),$===r&&($=g,t.charCodeAt(g)===40?(oe=R,g++):(oe=r,X===0&&x(N)),oe!==r?(xe=Z(),xe!==r?(Te=y(),Te!==r?(lt=Z(),lt!==r?(t.charCodeAt(g)===41?(It=U,g++):(It=r,X===0&&x(W)),It!==r?(we=$,oe=te(Te),$=oe):(g=$,$=r)):(g=$,$=r)):(g=$,$=r)):(g=$,$=r)):(g=$,$=r),$===r&&($=z())),$}function z(){var $,oe,xe,Te,lt;if($=g,oe=Z(),oe!==r){if(xe=g,Te=[],ie.test(t.charAt(g))?(lt=t.charAt(g),g++):(lt=r,X===0&&x(Ae)),lt!==r)for(;lt!==r;)Te.push(lt),ie.test(t.charAt(g))?(lt=t.charAt(g),g++):(lt=r,X===0&&x(Ae));else Te=r;Te!==r?xe=t.substring(xe,g):xe=Te,xe!==r?(we=g,Te=ce(xe),Te?Te=void 0:Te=r,Te!==r?(we=$,oe=me(xe),$=oe):(g=$,$=r)):(g=$,$=r)}else g=$,$=r;return $}function Z(){var $,oe;for(X++,$=[],Be.test(t.charAt(g))?(oe=t.charAt(g),g++):(oe=r,X===0&&x(Ce));oe!==r;)$.push(oe),Be.test(t.charAt(g))?(oe=t.charAt(g),g++):(oe=r,X===0&&x(Ce));return X--,$===r&&(oe=r,X===0&&x(pe)),$}if(De=a(),De!==r&&g===t.length)return De;throw De!==r&&g{var{parse:ttt}=Gse();uk.makeParser=(t=/[a-z]+/)=>(e,r)=>ttt(e,{queryPattern:t,checkFn:r});uk.parse=uk.makeParser()});var Vse=L((jWt,Yse)=>{"use strict";Yse.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var ZU=L((qWt,Jse)=>{var dB=Vse(),Kse={};for(let t of Object.keys(dB))Kse[dB[t]]=t;var hr={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};Jse.exports=hr;for(let t of Object.keys(hr)){if(!("channels"in hr[t]))throw new Error("missing channels property: "+t);if(!("labels"in hr[t]))throw new Error("missing channel labels property: "+t);if(hr[t].labels.length!==hr[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=hr[t];delete hr[t].channels,delete hr[t].labels,Object.defineProperty(hr[t],"channels",{value:e}),Object.defineProperty(hr[t],"labels",{value:r})}hr.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,s=t[2]/255,a=Math.min(e,r,s),n=Math.max(e,r,s),c=n-a,f,p;n===a?f=0:e===n?f=(r-s)/c:r===n?f=2+(s-e)/c:s===n&&(f=4+(e-r)/c),f=Math.min(f*60,360),f<0&&(f+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=c/(n+a):p=c/(2-n-a),[f,p*100,h*100]};hr.rgb.hsv=function(t){let e,r,s,a,n,c=t[0]/255,f=t[1]/255,p=t[2]/255,h=Math.max(c,f,p),E=h-Math.min(c,f,p),C=function(S){return(h-S)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=C(c),r=C(f),s=C(p),c===h?a=s-r:f===h?a=1/3+e-s:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};hr.rgb.hwb=function(t){let e=t[0],r=t[1],s=t[2],a=hr.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,s));return s=1-1/255*Math.max(e,Math.max(r,s)),[a,n*100,s*100]};hr.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,s=t[2]/255,a=Math.min(1-e,1-r,1-s),n=(1-e-a)/(1-a)||0,c=(1-r-a)/(1-a)||0,f=(1-s-a)/(1-a)||0;return[n*100,c*100,f*100,a*100]};function rtt(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}hr.rgb.keyword=function(t){let e=Kse[t];if(e)return e;let r=1/0,s;for(let a of Object.keys(dB)){let n=dB[a],c=rtt(t,n);c.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,s=s>.04045?((s+.055)/1.055)**2.4:s/12.92;let a=e*.4124+r*.3576+s*.1805,n=e*.2126+r*.7152+s*.0722,c=e*.0193+r*.1192+s*.9505;return[a*100,n*100,c*100]};hr.rgb.lab=function(t){let e=hr.rgb.xyz(t),r=e[0],s=e[1],a=e[2];r/=95.047,s/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,s=s>.008856?s**(1/3):7.787*s+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*s-16,c=500*(r-s),f=200*(s-a);return[n,c,f]};hr.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,s=t[2]/100,a,n,c;if(r===0)return c=s*255,[c,c,c];s<.5?a=s*(1+r):a=s+r-s*r;let f=2*s-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?c=f+(a-f)*6*n:2*n<1?c=a:3*n<2?c=f+(a-f)*(2/3-n)*6:c=f,p[h]=c*255;return p};hr.hsl.hsv=function(t){let e=t[0],r=t[1]/100,s=t[2]/100,a=r,n=Math.max(s,.01);s*=2,r*=s<=1?s:2-s,a*=n<=1?n:2-n;let c=(s+r)/2,f=s===0?2*a/(n+a):2*r/(s+r);return[e,f*100,c*100]};hr.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,s=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),c=255*s*(1-r),f=255*s*(1-r*n),p=255*s*(1-r*(1-n));switch(s*=255,a){case 0:return[s,p,c];case 1:return[f,s,c];case 2:return[c,s,p];case 3:return[c,f,s];case 4:return[p,c,s];case 5:return[s,c,f]}};hr.hsv.hsl=function(t){let e=t[0],r=t[1]/100,s=t[2]/100,a=Math.max(s,.01),n,c;c=(2-r)*s;let f=(2-r)*a;return n=r*a,n/=f<=1?f:2-f,n=n||0,c/=2,[e,n*100,c*100]};hr.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,s=t[2]/100,a=r+s,n;a>1&&(r/=a,s/=a);let c=Math.floor(6*e),f=1-s;n=6*e-c,c&1&&(n=1-n);let p=r+n*(f-r),h,E,C;switch(c){default:case 6:case 0:h=f,E=p,C=r;break;case 1:h=p,E=f,C=r;break;case 2:h=r,E=f,C=p;break;case 3:h=r,E=p,C=f;break;case 4:h=p,E=r,C=f;break;case 5:h=f,E=r,C=p;break}return[h*255,E*255,C*255]};hr.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,s=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),c=1-Math.min(1,r*(1-a)+a),f=1-Math.min(1,s*(1-a)+a);return[n*255,c*255,f*255]};hr.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,s=t[2]/100,a,n,c;return a=e*3.2406+r*-1.5372+s*-.4986,n=e*-.9689+r*1.8758+s*.0415,c=e*.0557+r*-.204+s*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,c=c>.0031308?1.055*c**(1/2.4)-.055:c*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),c=Math.min(Math.max(0,c),1),[a*255,n*255,c*255]};hr.xyz.lab=function(t){let e=t[0],r=t[1],s=t[2];e/=95.047,r/=100,s/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,s=s>.008856?s**(1/3):7.787*s+16/116;let a=116*r-16,n=500*(e-r),c=200*(r-s);return[a,n,c]};hr.lab.xyz=function(t){let e=t[0],r=t[1],s=t[2],a,n,c;n=(e+16)/116,a=r/500+n,c=n-s/200;let f=n**3,p=a**3,h=c**3;return n=f>.008856?f:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,c=h>.008856?h:(c-16/116)/7.787,a*=95.047,n*=100,c*=108.883,[a,n,c]};hr.lab.lch=function(t){let e=t[0],r=t[1],s=t[2],a;a=Math.atan2(s,r)*360/2/Math.PI,a<0&&(a+=360);let c=Math.sqrt(r*r+s*s);return[e,c,a]};hr.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),c=r*Math.sin(a);return[e,n,c]};hr.rgb.ansi16=function(t,e=null){let[r,s,a]=t,n=e===null?hr.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let c=30+(Math.round(a/255)<<2|Math.round(s/255)<<1|Math.round(r/255));return n===2&&(c+=60),c};hr.hsv.ansi16=function(t){return hr.rgb.ansi16(hr.hsv.rgb(t),t[2])};hr.rgb.ansi256=function(t){let e=t[0],r=t[1],s=t[2];return e===r&&r===s?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(s/255*5)};hr.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,s=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[s,a,n]};hr.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,s=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,s,a]};hr.rgb.hex=function(t){let r=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};hr.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(f=>f+f).join(""));let s=parseInt(r,16),a=s>>16&255,n=s>>8&255,c=s&255;return[a,n,c]};hr.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,s=t[2]/255,a=Math.max(Math.max(e,r),s),n=Math.min(Math.min(e,r),s),c=a-n,f,p;return c<1?f=n/(1-c):f=0,c<=0?p=0:a===e?p=(r-s)/c%6:a===r?p=2+(s-e)/c:p=4+(e-r)/c,p/=6,p%=1,[p*360,c*100,f*100]};hr.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,s=r<.5?2*e*r:2*e*(1-r),a=0;return s<1&&(a=(r-.5*s)/(1-s)),[t[0],s*100,a*100]};hr.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,s=e*r,a=0;return s<1&&(a=(r-s)/(1-s)),[t[0],s*100,a*100]};hr.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,s=t[2]/100;if(r===0)return[s*255,s*255,s*255];let a=[0,0,0],n=e%1*6,c=n%1,f=1-c,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=c,a[2]=0;break;case 1:a[0]=f,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=c;break;case 3:a[0]=0,a[1]=f,a[2]=1;break;case 4:a[0]=c,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=f}return p=(1-r)*s,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};hr.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,s=e+r*(1-e),a=0;return s>0&&(a=e/s),[t[0],a*100,s*100]};hr.hcg.hsl=function(t){let e=t[1]/100,s=t[2]/100*(1-e)+.5*e,a=0;return s>0&&s<.5?a=e/(2*s):s>=.5&&s<1&&(a=e/(2*(1-s))),[t[0],a*100,s*100]};hr.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,s=e+r*(1-e);return[t[0],(s-e)*100,(1-s)*100]};hr.hwb.hcg=function(t){let e=t[1]/100,s=1-t[2]/100,a=s-e,n=0;return a<1&&(n=(s-a)/(1-a)),[t[0],a*100,n*100]};hr.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};hr.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};hr.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};hr.gray.hsl=function(t){return[0,0,t[0]]};hr.gray.hsv=hr.gray.hsl;hr.gray.hwb=function(t){return[0,100,t[0]]};hr.gray.cmyk=function(t){return[0,0,0,t[0]]};hr.gray.lab=function(t){return[t[0],0,0]};hr.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,s=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(s.length)+s};hr.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var Zse=L((GWt,zse)=>{var fk=ZU();function ntt(){let t={},e=Object.keys(fk);for(let r=e.length,s=0;s{var XU=ZU(),att=Zse(),DE={},ltt=Object.keys(XU);function ctt(t){let e=function(...r){let s=r[0];return s==null?s:(s.length>1&&(r=s),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function utt(t){let e=function(...r){let s=r[0];if(s==null)return s;s.length>1&&(r=s);let a=t(r);if(typeof a=="object")for(let n=a.length,c=0;c{DE[t]={},Object.defineProperty(DE[t],"channels",{value:XU[t].channels}),Object.defineProperty(DE[t],"labels",{value:XU[t].labels});let e=att(t);Object.keys(e).forEach(s=>{let a=e[s];DE[t][s]=utt(a),DE[t][s].raw=ctt(a)})});Xse.exports=DE});var pk=L((YWt,ioe)=>{"use strict";var eoe=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,toe=(t,e)=>(...r)=>{let s=t(...r);return`\x1B[${38+e};5;${s}m`},roe=(t,e)=>(...r)=>{let s=t(...r);return`\x1B[${38+e};2;${s[0]};${s[1]};${s[2]}m`},Ak=t=>t,noe=(t,e,r)=>[t,e,r],bE=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let s=r();return Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0}),s},enumerable:!0,configurable:!0})},$U,PE=(t,e,r,s)=>{$U===void 0&&($U=$se());let a=s?10:0,n={};for(let[c,f]of Object.entries($U)){let p=c==="ansi16"?"ansi":c;c===e?n[p]=t(r,a):typeof f=="object"&&(n[p]=t(f[e],a))}return n};function ftt(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,s]of Object.entries(e)){for(let[a,n]of Object.entries(s))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},s[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:s,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",bE(e.color,"ansi",()=>PE(eoe,"ansi16",Ak,!1)),bE(e.color,"ansi256",()=>PE(toe,"ansi256",Ak,!1)),bE(e.color,"ansi16m",()=>PE(roe,"rgb",noe,!1)),bE(e.bgColor,"ansi",()=>PE(eoe,"ansi16",Ak,!0)),bE(e.bgColor,"ansi256",()=>PE(toe,"ansi256",Ak,!0)),bE(e.bgColor,"ansi16m",()=>PE(roe,"rgb",noe,!0)),e}Object.defineProperty(ioe,"exports",{enumerable:!0,get:ftt})});var ooe=L((VWt,soe)=>{"use strict";soe.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",s=e.indexOf(r+t),a=e.indexOf("--");return s!==-1&&(a===-1||s{"use strict";var Att=Ie("os"),aoe=Ie("tty"),Dc=ooe(),{env:xs}=process,u0;Dc("no-color")||Dc("no-colors")||Dc("color=false")||Dc("color=never")?u0=0:(Dc("color")||Dc("colors")||Dc("color=true")||Dc("color=always"))&&(u0=1);"FORCE_COLOR"in xs&&(xs.FORCE_COLOR==="true"?u0=1:xs.FORCE_COLOR==="false"?u0=0:u0=xs.FORCE_COLOR.length===0?1:Math.min(parseInt(xs.FORCE_COLOR,10),3));function e4(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function t4(t,e){if(u0===0)return 0;if(Dc("color=16m")||Dc("color=full")||Dc("color=truecolor"))return 3;if(Dc("color=256"))return 2;if(t&&!e&&u0===void 0)return 0;let r=u0||0;if(xs.TERM==="dumb")return r;if(process.platform==="win32"){let s=Att.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in xs)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(s=>s in xs)||xs.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in xs)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(xs.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in xs)return 1;if(xs.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in xs){let s=parseInt((xs.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(xs.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(xs.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(xs.TERM)||"COLORTERM"in xs?1:r}function ptt(t){let e=t4(t,t&&t.isTTY);return e4(e)}loe.exports={supportsColor:ptt,stdout:e4(t4(!0,aoe.isatty(1))),stderr:e4(t4(!0,aoe.isatty(2)))}});var foe=L((JWt,uoe)=>{"use strict";var htt=(t,e,r)=>{let s=t.indexOf(e);if(s===-1)return t;let a=e.length,n=0,c="";do c+=t.substr(n,s-n)+e+r,n=s+a,s=t.indexOf(e,n);while(s!==-1);return c+=t.substr(n),c},gtt=(t,e,r,s)=>{let a=0,n="";do{let c=t[s-1]==="\r";n+=t.substr(a,(c?s-1:s)-a)+e+(c?`\r -`:` -`)+r,a=s+1,s=t.indexOf(` -`,a)}while(s!==-1);return n+=t.substr(a),n};uoe.exports={stringReplaceAll:htt,stringEncaseCRLFWithFirstIndex:gtt}});var doe=L((zWt,goe)=>{"use strict";var dtt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,Aoe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,mtt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,ytt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,Ett=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function hoe(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):Ett.get(t)||t}function Itt(t,e){let r=[],s=e.trim().split(/\s*,\s*/g),a;for(let n of s){let c=Number(n);if(!Number.isNaN(c))r.push(c);else if(a=n.match(mtt))r.push(a[2].replace(ytt,(f,p,h)=>p?hoe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function Ctt(t){Aoe.lastIndex=0;let e=[],r;for(;(r=Aoe.exec(t))!==null;){let s=r[1];if(r[2]){let a=Itt(s,r[2]);e.push([s].concat(a))}else e.push([s])}return e}function poe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let s=t;for(let[a,n]of Object.entries(r))if(Array.isArray(n)){if(!(a in s))throw new Error(`Unknown Chalk style: ${a}`);s=n.length>0?s[a](...n):s[a]}return s}goe.exports=(t,e)=>{let r=[],s=[],a=[];if(e.replace(dtt,(n,c,f,p,h,E)=>{if(c)a.push(hoe(c));else if(p){let C=a.join("");a=[],s.push(r.length===0?C:poe(t,r)(C)),r.push({inverse:f,styles:Ctt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");s.push(poe(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),s.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return s.join("")}});var kE=L((ZWt,woe)=>{"use strict";var mB=pk(),{stdout:n4,stderr:i4}=coe(),{stringReplaceAll:wtt,stringEncaseCRLFWithFirstIndex:Btt}=foe(),{isArray:hk}=Array,yoe=["ansi","ansi","ansi256","ansi16m"],xE=Object.create(null),vtt=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=n4?n4.level:0;t.level=e.level===void 0?r:e.level},s4=class{constructor(e){return Eoe(e)}},Eoe=t=>{let e={};return vtt(e,t),e.template=(...r)=>Coe(e.template,...r),Object.setPrototypeOf(e,gk.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=s4,e.template};function gk(t){return Eoe(t)}for(let[t,e]of Object.entries(mB))xE[t]={get(){let r=dk(this,o4(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};xE.visible={get(){let t=dk(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var Ioe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of Ioe)xE[t]={get(){let{level:e}=this;return function(...r){let s=o4(mB.color[yoe[e]][t](...r),mB.color.close,this._styler);return dk(this,s,this._isEmpty)}}};for(let t of Ioe){let e="bg"+t[0].toUpperCase()+t.slice(1);xE[e]={get(){let{level:r}=this;return function(...s){let a=o4(mB.bgColor[yoe[r]][t](...s),mB.bgColor.close,this._styler);return dk(this,a,this._isEmpty)}}}}var Stt=Object.defineProperties(()=>{},{...xE,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),o4=(t,e,r)=>{let s,a;return r===void 0?(s=t,a=e):(s=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:s,closeAll:a,parent:r}},dk=(t,e,r)=>{let s=(...a)=>hk(a[0])&&hk(a[0].raw)?moe(s,Coe(s,...a)):moe(s,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(s,Stt),s._generator=t,s._styler=e,s._isEmpty=r,s},moe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:s,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=wtt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` -`);return n!==-1&&(e=Btt(e,a,s,n)),s+e+a},r4,Coe=(t,...e)=>{let[r]=e;if(!hk(r)||!hk(r.raw))return e.join(" ");let s=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";bc.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;bc.find=(t,e)=>t.nodes.find(r=>r.type===e);bc.exceedsLimit=(t,e,r=1,s)=>s===!1||!bc.isInteger(t)||!bc.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=s;bc.escapeNode=(t,e=0,r)=>{let s=t.nodes[e];s&&(r&&s.type===r||s.type==="open"||s.type==="close")&&s.escaped!==!0&&(s.value="\\"+s.value,s.escaped=!0)};bc.encloseBrace=t=>t.type!=="brace"||t.commas>>0+t.ranges>>0?!1:(t.invalid=!0,!0);bc.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:!(t.commas>>0+t.ranges>>0)||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;bc.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;bc.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);bc.flatten=(...t)=>{let e=[],r=s=>{for(let a=0;a{"use strict";var Boe=yk();voe.exports=(t,e={})=>{let r=(s,a={})=>{let n=e.escapeInvalid&&Boe.isInvalidBrace(a),c=s.invalid===!0&&e.escapeInvalid===!0,f="";if(s.value)return(n||c)&&Boe.isOpenOrClose(s)?"\\"+s.value:s.value;if(s.value)return s.value;if(s.nodes)for(let p of s.nodes)f+=r(p);return f};return r(t)}});var Doe=L((eYt,Soe)=>{"use strict";Soe.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var Noe=L((tYt,Foe)=>{"use strict";var boe=Doe(),jd=(t,e,r)=>{if(boe(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(boe(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let s={relaxZeros:!0,...r};typeof s.strictZeros=="boolean"&&(s.relaxZeros=s.strictZeros===!1);let a=String(s.relaxZeros),n=String(s.shorthand),c=String(s.capture),f=String(s.wrap),p=t+":"+e+"="+a+n+c+f;if(jd.cache.hasOwnProperty(p))return jd.cache[p].result;let h=Math.min(t,e),E=Math.max(t,e);if(Math.abs(h-E)===1){let R=t+"|"+e;return s.capture?`(${R})`:s.wrap===!1?R:`(?:${R})`}let C=Roe(t)||Roe(e),S={min:t,max:e,a:h,b:E},P=[],I=[];if(C&&(S.isPadded=C,S.maxLen=String(S.max).length),h<0){let R=E<0?Math.abs(E):1;I=Poe(R,Math.abs(h),S,s),h=S.a=0}return E>=0&&(P=Poe(h,E,S,s)),S.negatives=I,S.positives=P,S.result=Dtt(I,P,s),s.capture===!0?S.result=`(${S.result})`:s.wrap!==!1&&P.length+I.length>1&&(S.result=`(?:${S.result})`),jd.cache[p]=S,S.result};function Dtt(t,e,r){let s=a4(t,e,"-",!1,r)||[],a=a4(e,t,"",!1,r)||[],n=a4(t,e,"-?",!0,r)||[];return s.concat(n).concat(a).join("|")}function btt(t,e){let r=1,s=1,a=koe(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=koe(t,r);for(a=Qoe(e+1,s)-1;t1&&f.count.pop(),f.count.push(E.count[0]),f.string=f.pattern+Toe(f.count),c=h+1;continue}r.isPadded&&(C=Ttt(h,r,s)),E.string=C+E.pattern+Toe(E.count),n.push(E),c=h+1,f=E}return n}function a4(t,e,r,s,a){let n=[];for(let c of t){let{string:f}=c;!s&&!xoe(e,"string",f)&&n.push(r+f),s&&xoe(e,"string",f)&&n.push(r+f)}return n}function xtt(t,e){let r=[];for(let s=0;se?1:e>t?-1:0}function xoe(t,e,r){return t.some(s=>s[e]===r)}function koe(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function Qoe(t,e){return t-t%Math.pow(10,e)}function Toe(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function Qtt(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function Roe(t){return/^-?(0+)\d/.test(t)}function Ttt(t,e,r){if(!e.isPadded)return t;let s=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(s){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${s}}`:`0{${s}}`}}jd.cache={};jd.clearCache=()=>jd.cache={};Foe.exports=jd});var u4=L((rYt,qoe)=>{"use strict";var Rtt=Ie("util"),Moe=Noe(),Ooe=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),Ftt=t=>e=>t===!0?Number(e):String(e),l4=t=>typeof t=="number"||typeof t=="string"&&t!=="",yB=t=>Number.isInteger(+t),c4=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},Ntt=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,Ott=(t,e,r)=>{if(e>0){let s=t[0]==="-"?"-":"";s&&(t=t.slice(1)),t=s+t.padStart(s?e-1:e,"0")}return r===!1?String(t):t},Loe=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((c,f)=>cf?1:0),t.positives.sort((c,f)=>cf?1:0);let r=e.capture?"":"?:",s="",a="",n;return t.positives.length&&(s=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),s&&a?n=`${s}|${a}`:n=s||a,e.wrap?`(${r}${n})`:n},_oe=(t,e,r,s)=>{if(r)return Moe(t,e,{wrap:!1,...s});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},Uoe=(t,e,r)=>{if(Array.isArray(t)){let s=r.wrap===!0,a=r.capture?"":"?:";return s?`(${a}${t.join("|")})`:t.join("|")}return Moe(t,e,r)},Hoe=(...t)=>new RangeError("Invalid range arguments: "+Rtt.inspect(...t)),joe=(t,e,r)=>{if(r.strictRanges===!0)throw Hoe([t,e]);return[]},Mtt=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},_tt=(t,e,r=1,s={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(s.strictRanges===!0)throw Hoe([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let c=a>n,f=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=c4(f)||c4(p)||c4(h),C=E?Math.max(f.length,p.length,h.length):0,S=E===!1&&Ntt(t,e,s)===!1,P=s.transform||Ftt(S);if(s.toRegex&&r===1)return _oe(Loe(t,C),Loe(e,C),!0,s);let I={negatives:[],positives:[]},R=W=>I[W<0?"negatives":"positives"].push(Math.abs(W)),N=[],U=0;for(;c?a>=n:a<=n;)s.toRegex===!0&&r>1?R(a):N.push(Ott(P(a,U),C,S)),a=c?a-r:a+r,U++;return s.toRegex===!0?r>1?Ltt(I,s):Uoe(N,null,{wrap:!1,...s}):N},Utt=(t,e,r=1,s={})=>{if(!yB(t)&&t.length>1||!yB(e)&&e.length>1)return joe(t,e,s);let a=s.transform||(S=>String.fromCharCode(S)),n=`${t}`.charCodeAt(0),c=`${e}`.charCodeAt(0),f=n>c,p=Math.min(n,c),h=Math.max(n,c);if(s.toRegex&&r===1)return _oe(p,h,!1,s);let E=[],C=0;for(;f?n>=c:n<=c;)E.push(a(n,C)),n=f?n-r:n+r,C++;return s.toRegex===!0?Uoe(E,null,{wrap:!1,options:s}):E},Ik=(t,e,r,s={})=>{if(e==null&&l4(t))return[t];if(!l4(t)||!l4(e))return joe(t,e,s);if(typeof r=="function")return Ik(t,e,1,{transform:r});if(Ooe(r))return Ik(t,e,0,r);let a={...s};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,yB(r)?yB(t)&&yB(e)?_tt(t,e,r,a):Utt(t,e,Math.max(Math.abs(r),1),a):r!=null&&!Ooe(r)?Mtt(r,a):Ik(t,e,1,r)};qoe.exports=Ik});var Yoe=L((nYt,Woe)=>{"use strict";var Htt=u4(),Goe=yk(),jtt=(t,e={})=>{let r=(s,a={})=>{let n=Goe.isInvalidBrace(a),c=s.invalid===!0&&e.escapeInvalid===!0,f=n===!0||c===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(s.isOpen===!0||s.isClose===!0)return p+s.value;if(s.type==="open")return f?p+s.value:"(";if(s.type==="close")return f?p+s.value:")";if(s.type==="comma")return s.prev.type==="comma"?"":f?s.value:"|";if(s.value)return s.value;if(s.nodes&&s.ranges>0){let E=Goe.reduce(s.nodes),C=Htt(...E,{...e,wrap:!1,toRegex:!0});if(C.length!==0)return E.length>1&&C.length>1?`(${C})`:C}if(s.nodes)for(let E of s.nodes)h+=r(E,s);return h};return r(t)};Woe.exports=jtt});var Joe=L((iYt,Koe)=>{"use strict";var qtt=u4(),Voe=Ek(),QE=yk(),qd=(t="",e="",r=!1)=>{let s=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?QE.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)s.push(qd(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),s.push(Array.isArray(n)?qd(a,n,r):a+n);return QE.flatten(s)},Gtt=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,s=(a,n={})=>{a.queue=[];let c=n,f=n.queue;for(;c.type!=="brace"&&c.type!=="root"&&c.parent;)c=c.parent,f=c.queue;if(a.invalid||a.dollar){f.push(qd(f.pop(),Voe(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){f.push(qd(f.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let C=QE.reduce(a.nodes);if(QE.exceedsLimit(...C,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let S=qtt(...C,e);S.length===0&&(S=Voe(a,e)),f.push(qd(f.pop(),S)),a.nodes=[];return}let p=QE.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let C=0;C{"use strict";zoe.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` -`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var rae=L((oYt,tae)=>{"use strict";var Wtt=Ek(),{MAX_LENGTH:Xoe,CHAR_BACKSLASH:f4,CHAR_BACKTICK:Ytt,CHAR_COMMA:Vtt,CHAR_DOT:Ktt,CHAR_LEFT_PARENTHESES:Jtt,CHAR_RIGHT_PARENTHESES:ztt,CHAR_LEFT_CURLY_BRACE:Ztt,CHAR_RIGHT_CURLY_BRACE:Xtt,CHAR_LEFT_SQUARE_BRACKET:$oe,CHAR_RIGHT_SQUARE_BRACKET:eae,CHAR_DOUBLE_QUOTE:$tt,CHAR_SINGLE_QUOTE:ert,CHAR_NO_BREAK_SPACE:trt,CHAR_ZERO_WIDTH_NOBREAK_SPACE:rrt}=Zoe(),nrt=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},s=typeof r.maxLength=="number"?Math.min(Xoe,r.maxLength):Xoe;if(t.length>s)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${s})`);let a={type:"root",input:t,nodes:[]},n=[a],c=a,f=a,p=0,h=t.length,E=0,C=0,S,P={},I=()=>t[E++],R=N=>{if(N.type==="text"&&f.type==="dot"&&(f.type="text"),f&&f.type==="text"&&N.type==="text"){f.value+=N.value;return}return c.nodes.push(N),N.parent=c,N.prev=f,f=N,N};for(R({type:"bos"});E0){if(c.ranges>0){c.ranges=0;let N=c.nodes.shift();c.nodes=[N,{type:"text",value:Wtt(c)}]}R({type:"comma",value:S}),c.commas++;continue}if(S===Ktt&&C>0&&c.commas===0){let N=c.nodes;if(C===0||N.length===0){R({type:"text",value:S});continue}if(f.type==="dot"){if(c.range=[],f.value+=S,f.type="range",c.nodes.length!==3&&c.nodes.length!==5){c.invalid=!0,c.ranges=0,f.type="text";continue}c.ranges++,c.args=[];continue}if(f.type==="range"){N.pop();let U=N[N.length-1];U.value+=f.value+S,f=U,c.ranges--;continue}R({type:"dot",value:S});continue}R({type:"text",value:S})}do if(c=n.pop(),c.type!=="root"){c.nodes.forEach(W=>{W.nodes||(W.type==="open"&&(W.isOpen=!0),W.type==="close"&&(W.isClose=!0),W.nodes||(W.type="text"),W.invalid=!0)});let N=n[n.length-1],U=N.nodes.indexOf(c);N.nodes.splice(U,1,...c.nodes)}while(n.length>0);return R({type:"eos"}),a};tae.exports=nrt});var sae=L((aYt,iae)=>{"use strict";var nae=Ek(),irt=Yoe(),srt=Joe(),ort=rae(),ql=(t,e={})=>{let r=[];if(Array.isArray(t))for(let s of t){let a=ql.create(s,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(ql.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};ql.parse=(t,e={})=>ort(t,e);ql.stringify=(t,e={})=>nae(typeof t=="string"?ql.parse(t,e):t,e);ql.compile=(t,e={})=>(typeof t=="string"&&(t=ql.parse(t,e)),irt(t,e));ql.expand=(t,e={})=>{typeof t=="string"&&(t=ql.parse(t,e));let r=srt(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};ql.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?ql.compile(t,e):ql.expand(t,e);iae.exports=ql});var EB=L((lYt,uae)=>{"use strict";var art=Ie("path"),Kf="\\\\/",oae=`[^${Kf}]`,Pp="\\.",lrt="\\+",crt="\\?",Ck="\\/",urt="(?=.)",aae="[^/]",A4=`(?:${Ck}|$)`,lae=`(?:^|${Ck})`,p4=`${Pp}{1,2}${A4}`,frt=`(?!${Pp})`,Art=`(?!${lae}${p4})`,prt=`(?!${Pp}{0,1}${A4})`,hrt=`(?!${p4})`,grt=`[^.${Ck}]`,drt=`${aae}*?`,cae={DOT_LITERAL:Pp,PLUS_LITERAL:lrt,QMARK_LITERAL:crt,SLASH_LITERAL:Ck,ONE_CHAR:urt,QMARK:aae,END_ANCHOR:A4,DOTS_SLASH:p4,NO_DOT:frt,NO_DOTS:Art,NO_DOT_SLASH:prt,NO_DOTS_SLASH:hrt,QMARK_NO_DOT:grt,STAR:drt,START_ANCHOR:lae},mrt={...cae,SLASH_LITERAL:`[${Kf}]`,QMARK:oae,STAR:`${oae}*?`,DOTS_SLASH:`${Pp}{1,2}(?:[${Kf}]|$)`,NO_DOT:`(?!${Pp})`,NO_DOTS:`(?!(?:^|[${Kf}])${Pp}{1,2}(?:[${Kf}]|$))`,NO_DOT_SLASH:`(?!${Pp}{0,1}(?:[${Kf}]|$))`,NO_DOTS_SLASH:`(?!${Pp}{1,2}(?:[${Kf}]|$))`,QMARK_NO_DOT:`[^.${Kf}]`,START_ANCHOR:`(?:^|[${Kf}])`,END_ANCHOR:`(?:[${Kf}]|$)`},yrt={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};uae.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:yrt,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:art.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?mrt:cae}}});var IB=L(al=>{"use strict";var Ert=Ie("path"),Irt=process.platform==="win32",{REGEX_BACKSLASH:Crt,REGEX_REMOVE_BACKSLASH:wrt,REGEX_SPECIAL_CHARS:Brt,REGEX_SPECIAL_CHARS_GLOBAL:vrt}=EB();al.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);al.hasRegexChars=t=>Brt.test(t);al.isRegexChar=t=>t.length===1&&al.hasRegexChars(t);al.escapeRegex=t=>t.replace(vrt,"\\$1");al.toPosixSlashes=t=>t.replace(Crt,"/");al.removeBackslashes=t=>t.replace(wrt,e=>e==="\\"?"":e);al.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};al.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:Irt===!0||Ert.sep==="\\";al.escapeLast=(t,e,r)=>{let s=t.lastIndexOf(e,r);return s===-1?t:t[s-1]==="\\"?al.escapeLast(t,e,s-1):`${t.slice(0,s)}\\${t.slice(s)}`};al.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};al.wrapOutput=(t,e={},r={})=>{let s=r.contains?"":"^",a=r.contains?"":"$",n=`${s}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var yae=L((uYt,mae)=>{"use strict";var fae=IB(),{CHAR_ASTERISK:h4,CHAR_AT:Srt,CHAR_BACKWARD_SLASH:CB,CHAR_COMMA:Drt,CHAR_DOT:g4,CHAR_EXCLAMATION_MARK:d4,CHAR_FORWARD_SLASH:dae,CHAR_LEFT_CURLY_BRACE:m4,CHAR_LEFT_PARENTHESES:y4,CHAR_LEFT_SQUARE_BRACKET:brt,CHAR_PLUS:Prt,CHAR_QUESTION_MARK:Aae,CHAR_RIGHT_CURLY_BRACE:xrt,CHAR_RIGHT_PARENTHESES:pae,CHAR_RIGHT_SQUARE_BRACKET:krt}=EB(),hae=t=>t===dae||t===CB,gae=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},Qrt=(t,e)=>{let r=e||{},s=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],c=[],f=[],p=t,h=-1,E=0,C=0,S=!1,P=!1,I=!1,R=!1,N=!1,U=!1,W=!1,te=!1,ie=!1,Ae=!1,ce=0,me,pe,Be={value:"",depth:0,isGlob:!1},Ce=()=>h>=s,g=()=>p.charCodeAt(h+1),we=()=>(me=pe,p.charCodeAt(++h));for(;h0&&(fe=p.slice(0,E),p=p.slice(E),C-=E),ye&&I===!0&&C>0?(ye=p.slice(0,C),se=p.slice(C)):I===!0?(ye="",se=p):ye=p,ye&&ye!==""&&ye!=="/"&&ye!==p&&hae(ye.charCodeAt(ye.length-1))&&(ye=ye.slice(0,-1)),r.unescape===!0&&(se&&(se=fae.removeBackslashes(se)),ye&&W===!0&&(ye=fae.removeBackslashes(ye)));let X={prefix:fe,input:t,start:E,base:ye,glob:se,isBrace:S,isBracket:P,isGlob:I,isExtglob:R,isGlobstar:N,negated:te,negatedExtglob:ie};if(r.tokens===!0&&(X.maxDepth=0,hae(pe)||c.push(Be),X.tokens=c),r.parts===!0||r.tokens===!0){let De;for(let Re=0;Re{"use strict";var wk=EB(),Gl=IB(),{MAX_LENGTH:Bk,POSIX_REGEX_SOURCE:Trt,REGEX_NON_SPECIAL_CHARS:Rrt,REGEX_SPECIAL_CHARS_BACKREF:Frt,REPLACEMENTS:Eae}=wk,Nrt=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(a=>Gl.escapeRegex(a)).join("..")}return r},TE=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,E4=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=Eae[t]||t;let r={...e},s=typeof r.maxLength=="number"?Math.min(Bk,r.maxLength):Bk,a=t.length;if(a>s)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${s}`);let n={type:"bos",value:"",output:r.prepend||""},c=[n],f=r.capture?"":"?:",p=Gl.isWindows(e),h=wk.globChars(p),E=wk.extglobChars(h),{DOT_LITERAL:C,PLUS_LITERAL:S,SLASH_LITERAL:P,ONE_CHAR:I,DOTS_SLASH:R,NO_DOT:N,NO_DOT_SLASH:U,NO_DOTS_SLASH:W,QMARK:te,QMARK_NO_DOT:ie,STAR:Ae,START_ANCHOR:ce}=h,me=x=>`(${f}(?:(?!${ce}${x.dot?R:C}).)*?)`,pe=r.dot?"":N,Be=r.dot?te:ie,Ce=r.bash===!0?me(r):Ae;r.capture&&(Ce=`(${Ce})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:c};t=Gl.removePrefix(t,g),a=t.length;let we=[],ye=[],fe=[],se=n,X,De=()=>g.index===a-1,Re=g.peek=(x=1)=>t[g.index+x],dt=g.advance=()=>t[++g.index]||"",j=()=>t.slice(g.index+1),rt=(x="",w=0)=>{g.consumed+=x,g.index+=w},Fe=x=>{g.output+=x.output!=null?x.output:x.value,rt(x.value)},Ne=()=>{let x=1;for(;Re()==="!"&&(Re(2)!=="("||Re(3)==="?");)dt(),g.start++,x++;return x%2===0?!1:(g.negated=!0,g.start++,!0)},Pe=x=>{g[x]++,fe.push(x)},Ye=x=>{g[x]--,fe.pop()},ke=x=>{if(se.type==="globstar"){let w=g.braces>0&&(x.type==="comma"||x.type==="brace"),b=x.extglob===!0||we.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!w&&!b&&(g.output=g.output.slice(0,-se.output.length),se.type="star",se.value="*",se.output=Ce,g.output+=se.output)}if(we.length&&x.type!=="paren"&&(we[we.length-1].inner+=x.value),(x.value||x.output)&&Fe(x),se&&se.type==="text"&&x.type==="text"){se.value+=x.value,se.output=(se.output||"")+x.value;return}x.prev=se,c.push(x),se=x},it=(x,w)=>{let b={...E[w],conditions:1,inner:""};b.prev=se,b.parens=g.parens,b.output=g.output;let y=(r.capture?"(":"")+b.open;Pe("parens"),ke({type:x,value:w,output:g.output?"":I}),ke({type:"paren",extglob:!0,value:dt(),output:y}),we.push(b)},_e=x=>{let w=x.close+(r.capture?")":""),b;if(x.type==="negate"){let y=Ce;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(y=me(r)),(y!==Ce||De()||/^\)+$/.test(j()))&&(w=x.close=`)$))${y}`),x.inner.includes("*")&&(b=j())&&/^\.[^\\/.]+$/.test(b)){let F=E4(b,{...e,fastpaths:!1}).output;w=x.close=`)${F})${y})`}x.prev.type==="bos"&&(g.negatedExtglob=!0)}ke({type:"paren",extglob:!0,value:X,output:w}),Ye("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,w=t.replace(Frt,(b,y,F,z,Z,$)=>z==="\\"?(x=!0,b):z==="?"?y?y+z+(Z?te.repeat(Z.length):""):$===0?Be+(Z?te.repeat(Z.length):""):te.repeat(F.length):z==="."?C.repeat(F.length):z==="*"?y?y+z+(Z?Ce:""):Ce:y?b:`\\${b}`);return x===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,b=>b.length%2===0?"\\\\":b?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=Gl.wrapOutput(w,g,e),g)}for(;!De();){if(X=dt(),X==="\0")continue;if(X==="\\"){let b=Re();if(b==="/"&&r.bash!==!0||b==="."||b===";")continue;if(!b){X+="\\",ke({type:"text",value:X});continue}let y=/^\\+/.exec(j()),F=0;if(y&&y[0].length>2&&(F=y[0].length,g.index+=F,F%2!==0&&(X+="\\")),r.unescape===!0?X=dt():X+=dt(),g.brackets===0){ke({type:"text",value:X});continue}}if(g.brackets>0&&(X!=="]"||se.value==="["||se.value==="[^")){if(r.posix!==!1&&X===":"){let b=se.value.slice(1);if(b.includes("[")&&(se.posix=!0,b.includes(":"))){let y=se.value.lastIndexOf("["),F=se.value.slice(0,y),z=se.value.slice(y+2),Z=Trt[z];if(Z){se.value=F+Z,g.backtrack=!0,dt(),!n.output&&c.indexOf(se)===1&&(n.output=I);continue}}}(X==="["&&Re()!==":"||X==="-"&&Re()==="]")&&(X=`\\${X}`),X==="]"&&(se.value==="["||se.value==="[^")&&(X=`\\${X}`),r.posix===!0&&X==="!"&&se.value==="["&&(X="^"),se.value+=X,Fe({value:X});continue}if(g.quotes===1&&X!=='"'){X=Gl.escapeRegex(X),se.value+=X,Fe({value:X});continue}if(X==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&ke({type:"text",value:X});continue}if(X==="("){Pe("parens"),ke({type:"paren",value:X});continue}if(X===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(TE("opening","("));let b=we[we.length-1];if(b&&g.parens===b.parens+1){_e(we.pop());continue}ke({type:"paren",value:X,output:g.parens?")":"\\)"}),Ye("parens");continue}if(X==="["){if(r.nobracket===!0||!j().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(TE("closing","]"));X=`\\${X}`}else Pe("brackets");ke({type:"bracket",value:X});continue}if(X==="]"){if(r.nobracket===!0||se&&se.type==="bracket"&&se.value.length===1){ke({type:"text",value:X,output:`\\${X}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(TE("opening","["));ke({type:"text",value:X,output:`\\${X}`});continue}Ye("brackets");let b=se.value.slice(1);if(se.posix!==!0&&b[0]==="^"&&!b.includes("/")&&(X=`/${X}`),se.value+=X,Fe({value:X}),r.literalBrackets===!1||Gl.hasRegexChars(b))continue;let y=Gl.escapeRegex(se.value);if(g.output=g.output.slice(0,-se.value.length),r.literalBrackets===!0){g.output+=y,se.value=y;continue}se.value=`(${f}${y}|${se.value})`,g.output+=se.value;continue}if(X==="{"&&r.nobrace!==!0){Pe("braces");let b={type:"brace",value:X,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};ye.push(b),ke(b);continue}if(X==="}"){let b=ye[ye.length-1];if(r.nobrace===!0||!b){ke({type:"text",value:X,output:X});continue}let y=")";if(b.dots===!0){let F=c.slice(),z=[];for(let Z=F.length-1;Z>=0&&(c.pop(),F[Z].type!=="brace");Z--)F[Z].type!=="dots"&&z.unshift(F[Z].value);y=Nrt(z,r),g.backtrack=!0}if(b.comma!==!0&&b.dots!==!0){let F=g.output.slice(0,b.outputIndex),z=g.tokens.slice(b.tokensIndex);b.value=b.output="\\{",X=y="\\}",g.output=F;for(let Z of z)g.output+=Z.output||Z.value}ke({type:"brace",value:X,output:y}),Ye("braces"),ye.pop();continue}if(X==="|"){we.length>0&&we[we.length-1].conditions++,ke({type:"text",value:X});continue}if(X===","){let b=X,y=ye[ye.length-1];y&&fe[fe.length-1]==="braces"&&(y.comma=!0,b="|"),ke({type:"comma",value:X,output:b});continue}if(X==="/"){if(se.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",c.pop(),se=n;continue}ke({type:"slash",value:X,output:P});continue}if(X==="."){if(g.braces>0&&se.type==="dot"){se.value==="."&&(se.output=C);let b=ye[ye.length-1];se.type="dots",se.output+=X,se.value+=X,b.dots=!0;continue}if(g.braces+g.parens===0&&se.type!=="bos"&&se.type!=="slash"){ke({type:"text",value:X,output:C});continue}ke({type:"dot",value:X,output:C});continue}if(X==="?"){if(!(se&&se.value==="(")&&r.noextglob!==!0&&Re()==="("&&Re(2)!=="?"){it("qmark",X);continue}if(se&&se.type==="paren"){let y=Re(),F=X;if(y==="<"&&!Gl.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(se.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(j()))&&(F=`\\${X}`),ke({type:"text",value:X,output:F});continue}if(r.dot!==!0&&(se.type==="slash"||se.type==="bos")){ke({type:"qmark",value:X,output:ie});continue}ke({type:"qmark",value:X,output:te});continue}if(X==="!"){if(r.noextglob!==!0&&Re()==="("&&(Re(2)!=="?"||!/[!=<:]/.test(Re(3)))){it("negate",X);continue}if(r.nonegate!==!0&&g.index===0){Ne();continue}}if(X==="+"){if(r.noextglob!==!0&&Re()==="("&&Re(2)!=="?"){it("plus",X);continue}if(se&&se.value==="("||r.regex===!1){ke({type:"plus",value:X,output:S});continue}if(se&&(se.type==="bracket"||se.type==="paren"||se.type==="brace")||g.parens>0){ke({type:"plus",value:X});continue}ke({type:"plus",value:S});continue}if(X==="@"){if(r.noextglob!==!0&&Re()==="("&&Re(2)!=="?"){ke({type:"at",extglob:!0,value:X,output:""});continue}ke({type:"text",value:X});continue}if(X!=="*"){(X==="$"||X==="^")&&(X=`\\${X}`);let b=Rrt.exec(j());b&&(X+=b[0],g.index+=b[0].length),ke({type:"text",value:X});continue}if(se&&(se.type==="globstar"||se.star===!0)){se.type="star",se.star=!0,se.value+=X,se.output=Ce,g.backtrack=!0,g.globstar=!0,rt(X);continue}let x=j();if(r.noextglob!==!0&&/^\([^?]/.test(x)){it("star",X);continue}if(se.type==="star"){if(r.noglobstar===!0){rt(X);continue}let b=se.prev,y=b.prev,F=b.type==="slash"||b.type==="bos",z=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!F||x[0]&&x[0]!=="/")){ke({type:"star",value:X,output:""});continue}let Z=g.braces>0&&(b.type==="comma"||b.type==="brace"),$=we.length&&(b.type==="pipe"||b.type==="paren");if(!F&&b.type!=="paren"&&!Z&&!$){ke({type:"star",value:X,output:""});continue}for(;x.slice(0,3)==="/**";){let oe=t[g.index+4];if(oe&&oe!=="/")break;x=x.slice(3),rt("/**",3)}if(b.type==="bos"&&De()){se.type="globstar",se.value+=X,se.output=me(r),g.output=se.output,g.globstar=!0,rt(X);continue}if(b.type==="slash"&&b.prev.type!=="bos"&&!z&&De()){g.output=g.output.slice(0,-(b.output+se.output).length),b.output=`(?:${b.output}`,se.type="globstar",se.output=me(r)+(r.strictSlashes?")":"|$)"),se.value+=X,g.globstar=!0,g.output+=b.output+se.output,rt(X);continue}if(b.type==="slash"&&b.prev.type!=="bos"&&x[0]==="/"){let oe=x[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(b.output+se.output).length),b.output=`(?:${b.output}`,se.type="globstar",se.output=`${me(r)}${P}|${P}${oe})`,se.value+=X,g.output+=b.output+se.output,g.globstar=!0,rt(X+dt()),ke({type:"slash",value:"/",output:""});continue}if(b.type==="bos"&&x[0]==="/"){se.type="globstar",se.value+=X,se.output=`(?:^|${P}|${me(r)}${P})`,g.output=se.output,g.globstar=!0,rt(X+dt()),ke({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-se.output.length),se.type="globstar",se.output=me(r),se.value+=X,g.output+=se.output,g.globstar=!0,rt(X);continue}let w={type:"star",value:X,output:Ce};if(r.bash===!0){w.output=".*?",(se.type==="bos"||se.type==="slash")&&(w.output=pe+w.output),ke(w);continue}if(se&&(se.type==="bracket"||se.type==="paren")&&r.regex===!0){w.output=X,ke(w);continue}(g.index===g.start||se.type==="slash"||se.type==="dot")&&(se.type==="dot"?(g.output+=U,se.output+=U):r.dot===!0?(g.output+=W,se.output+=W):(g.output+=pe,se.output+=pe),Re()!=="*"&&(g.output+=I,se.output+=I)),ke(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(TE("closing","]"));g.output=Gl.escapeLast(g.output,"["),Ye("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(TE("closing",")"));g.output=Gl.escapeLast(g.output,"("),Ye("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(TE("closing","}"));g.output=Gl.escapeLast(g.output,"{"),Ye("braces")}if(r.strictSlashes!==!0&&(se.type==="star"||se.type==="bracket")&&ke({type:"maybe_slash",value:"",output:`${P}?`}),g.backtrack===!0){g.output="";for(let x of g.tokens)g.output+=x.output!=null?x.output:x.value,x.suffix&&(g.output+=x.suffix)}return g};E4.fastpaths=(t,e)=>{let r={...e},s=typeof r.maxLength=="number"?Math.min(Bk,r.maxLength):Bk,a=t.length;if(a>s)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${s}`);t=Eae[t]||t;let n=Gl.isWindows(e),{DOT_LITERAL:c,SLASH_LITERAL:f,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:C,NO_DOTS_SLASH:S,STAR:P,START_ANCHOR:I}=wk.globChars(n),R=r.dot?C:E,N=r.dot?S:E,U=r.capture?"":"?:",W={negated:!1,prefix:""},te=r.bash===!0?".*?":P;r.capture&&(te=`(${te})`);let ie=pe=>pe.noglobstar===!0?te:`(${U}(?:(?!${I}${pe.dot?h:c}).)*?)`,Ae=pe=>{switch(pe){case"*":return`${R}${p}${te}`;case".*":return`${c}${p}${te}`;case"*.*":return`${R}${te}${c}${p}${te}`;case"*/*":return`${R}${te}${f}${p}${N}${te}`;case"**":return R+ie(r);case"**/*":return`(?:${R}${ie(r)}${f})?${N}${p}${te}`;case"**/*.*":return`(?:${R}${ie(r)}${f})?${N}${te}${c}${p}${te}`;case"**/.*":return`(?:${R}${ie(r)}${f})?${c}${p}${te}`;default:{let Be=/^(.*?)\.(\w+)$/.exec(pe);if(!Be)return;let Ce=Ae(Be[1]);return Ce?Ce+c+Be[2]:void 0}}},ce=Gl.removePrefix(t,W),me=Ae(ce);return me&&r.strictSlashes!==!0&&(me+=`${f}?`),me};Iae.exports=E4});var Bae=L((AYt,wae)=>{"use strict";var Ort=Ie("path"),Lrt=yae(),I4=Cae(),C4=IB(),Mrt=EB(),_rt=t=>t&&typeof t=="object"&&!Array.isArray(t),$i=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(S=>$i(S,e,r));return S=>{for(let P of E){let I=P(S);if(I)return I}return!1}}let s=_rt(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!s)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=C4.isWindows(e),c=s?$i.compileRe(t,e):$i.makeRe(t,e,!1,!0),f=c.state;delete c.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=$i(a.ignore,E,r)}let h=(E,C=!1)=>{let{isMatch:S,match:P,output:I}=$i.test(E,c,e,{glob:t,posix:n}),R={glob:t,state:f,regex:c,posix:n,input:E,output:I,match:P,isMatch:S};return typeof a.onResult=="function"&&a.onResult(R),S===!1?(R.isMatch=!1,C?R:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(R),R.isMatch=!1,C?R:!1):(typeof a.onMatch=="function"&&a.onMatch(R),C?R:!0)};return r&&(h.state=f),h};$i.test=(t,e,r,{glob:s,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},c=n.format||(a?C4.toPosixSlashes:null),f=t===s,p=f&&c?c(t):t;return f===!1&&(p=c?c(t):t,f=p===s),(f===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?f=$i.matchBase(t,e,r,a):f=e.exec(p)),{isMatch:!!f,match:f,output:p}};$i.matchBase=(t,e,r,s=C4.isWindows(r))=>(e instanceof RegExp?e:$i.makeRe(e,r)).test(Ort.basename(t));$i.isMatch=(t,e,r)=>$i(e,r)(t);$i.parse=(t,e)=>Array.isArray(t)?t.map(r=>$i.parse(r,e)):I4(t,{...e,fastpaths:!1});$i.scan=(t,e)=>Lrt(t,e);$i.compileRe=(t,e,r=!1,s=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",c=a.contains?"":"$",f=`${n}(?:${t.output})${c}`;t&&t.negated===!0&&(f=`^(?!${f}).*$`);let p=$i.toRegex(f,e);return s===!0&&(p.state=t),p};$i.makeRe=(t,e={},r=!1,s=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=I4.fastpaths(t,e)),a.output||(a=I4(t,e)),$i.compileRe(a,e,r,s)};$i.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};$i.constants=Mrt;wae.exports=$i});var Sae=L((pYt,vae)=>{"use strict";vae.exports=Bae()});var Sa=L((hYt,xae)=>{"use strict";var bae=Ie("util"),Pae=sae(),Jf=Sae(),w4=IB(),Dae=t=>t===""||t==="./",Qi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let s=new Set,a=new Set,n=new Set,c=0,f=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!s.has(E));if(r&&h.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(E=>E.replace(/\\/g,"")):e}return h};Qi.match=Qi;Qi.matcher=(t,e)=>Jf(t,e);Qi.isMatch=(t,e,r)=>Jf(e,r)(t);Qi.any=Qi.isMatch;Qi.not=(t,e,r={})=>{e=[].concat(e).map(String);let s=new Set,a=[],n=f=>{r.onResult&&r.onResult(f),a.push(f.output)},c=new Set(Qi(t,e,{...r,onResult:n}));for(let f of a)c.has(f)||s.add(f);return[...s]};Qi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${bae.inspect(t)}"`);if(Array.isArray(e))return e.some(s=>Qi.contains(t,s,r));if(typeof e=="string"){if(Dae(t)||Dae(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return Qi.isMatch(t,e,{...r,contains:!0})};Qi.matchKeys=(t,e,r)=>{if(!w4.isObject(t))throw new TypeError("Expected the first argument to be an object");let s=Qi(Object.keys(t),e,r),a={};for(let n of s)a[n]=t[n];return a};Qi.some=(t,e,r)=>{let s=[].concat(t);for(let a of[].concat(e)){let n=Jf(String(a),r);if(s.some(c=>n(c)))return!0}return!1};Qi.every=(t,e,r)=>{let s=[].concat(t);for(let a of[].concat(e)){let n=Jf(String(a),r);if(!s.every(c=>n(c)))return!1}return!0};Qi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${bae.inspect(t)}"`);return[].concat(e).every(s=>Jf(s,r)(t))};Qi.capture=(t,e,r)=>{let s=w4.isWindows(r),n=Jf.makeRe(String(t),{...r,capture:!0}).exec(s?w4.toPosixSlashes(e):e);if(n)return n.slice(1).map(c=>c===void 0?"":c)};Qi.makeRe=(...t)=>Jf.makeRe(...t);Qi.scan=(...t)=>Jf.scan(...t);Qi.parse=(t,e)=>{let r=[];for(let s of[].concat(t||[]))for(let a of Pae(String(s),e))r.push(Jf.parse(a,e));return r};Qi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:Pae(t,e)};Qi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return Qi.braces(t,{...e,expand:!0})};xae.exports=Qi});var Qae=L((gYt,kae)=>{"use strict";kae.exports=({onlyFirst:t=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}});var vk=L((dYt,Tae)=>{"use strict";var Urt=Qae();Tae.exports=t=>typeof t=="string"?t.replace(Urt(),""):t});var Fae=L((mYt,Rae)=>{function Hrt(){this.__data__=[],this.size=0}Rae.exports=Hrt});var RE=L((yYt,Nae)=>{function jrt(t,e){return t===e||t!==t&&e!==e}Nae.exports=jrt});var wB=L((EYt,Oae)=>{var qrt=RE();function Grt(t,e){for(var r=t.length;r--;)if(qrt(t[r][0],e))return r;return-1}Oae.exports=Grt});var Mae=L((IYt,Lae)=>{var Wrt=wB(),Yrt=Array.prototype,Vrt=Yrt.splice;function Krt(t){var e=this.__data__,r=Wrt(e,t);if(r<0)return!1;var s=e.length-1;return r==s?e.pop():Vrt.call(e,r,1),--this.size,!0}Lae.exports=Krt});var Uae=L((CYt,_ae)=>{var Jrt=wB();function zrt(t){var e=this.__data__,r=Jrt(e,t);return r<0?void 0:e[r][1]}_ae.exports=zrt});var jae=L((wYt,Hae)=>{var Zrt=wB();function Xrt(t){return Zrt(this.__data__,t)>-1}Hae.exports=Xrt});var Gae=L((BYt,qae)=>{var $rt=wB();function ent(t,e){var r=this.__data__,s=$rt(r,t);return s<0?(++this.size,r.push([t,e])):r[s][1]=e,this}qae.exports=ent});var BB=L((vYt,Wae)=>{var tnt=Fae(),rnt=Mae(),nnt=Uae(),int=jae(),snt=Gae();function FE(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var ont=BB();function ant(){this.__data__=new ont,this.size=0}Yae.exports=ant});var Jae=L((DYt,Kae)=>{function lnt(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}Kae.exports=lnt});var Zae=L((bYt,zae)=>{function cnt(t){return this.__data__.get(t)}zae.exports=cnt});var $ae=L((PYt,Xae)=>{function unt(t){return this.__data__.has(t)}Xae.exports=unt});var B4=L((xYt,ele)=>{var fnt=typeof global=="object"&&global&&global.Object===Object&&global;ele.exports=fnt});var Pc=L((kYt,tle)=>{var Ant=B4(),pnt=typeof self=="object"&&self&&self.Object===Object&&self,hnt=Ant||pnt||Function("return this")();tle.exports=hnt});var Gd=L((QYt,rle)=>{var gnt=Pc(),dnt=gnt.Symbol;rle.exports=dnt});var ole=L((TYt,sle)=>{var nle=Gd(),ile=Object.prototype,mnt=ile.hasOwnProperty,ynt=ile.toString,vB=nle?nle.toStringTag:void 0;function Ent(t){var e=mnt.call(t,vB),r=t[vB];try{t[vB]=void 0;var s=!0}catch{}var a=ynt.call(t);return s&&(e?t[vB]=r:delete t[vB]),a}sle.exports=Ent});var lle=L((RYt,ale)=>{var Int=Object.prototype,Cnt=Int.toString;function wnt(t){return Cnt.call(t)}ale.exports=wnt});var Wd=L((FYt,fle)=>{var cle=Gd(),Bnt=ole(),vnt=lle(),Snt="[object Null]",Dnt="[object Undefined]",ule=cle?cle.toStringTag:void 0;function bnt(t){return t==null?t===void 0?Dnt:Snt:ule&&ule in Object(t)?Bnt(t):vnt(t)}fle.exports=bnt});var Wl=L((NYt,Ale)=>{function Pnt(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}Ale.exports=Pnt});var Sk=L((OYt,ple)=>{var xnt=Wd(),knt=Wl(),Qnt="[object AsyncFunction]",Tnt="[object Function]",Rnt="[object GeneratorFunction]",Fnt="[object Proxy]";function Nnt(t){if(!knt(t))return!1;var e=xnt(t);return e==Tnt||e==Rnt||e==Qnt||e==Fnt}ple.exports=Nnt});var gle=L((LYt,hle)=>{var Ont=Pc(),Lnt=Ont["__core-js_shared__"];hle.exports=Lnt});var yle=L((MYt,mle)=>{var v4=gle(),dle=function(){var t=/[^.]+$/.exec(v4&&v4.keys&&v4.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function Mnt(t){return!!dle&&dle in t}mle.exports=Mnt});var S4=L((_Yt,Ele)=>{var _nt=Function.prototype,Unt=_nt.toString;function Hnt(t){if(t!=null){try{return Unt.call(t)}catch{}try{return t+""}catch{}}return""}Ele.exports=Hnt});var Cle=L((UYt,Ile)=>{var jnt=Sk(),qnt=yle(),Gnt=Wl(),Wnt=S4(),Ynt=/[\\^$.*+?()[\]{}|]/g,Vnt=/^\[object .+?Constructor\]$/,Knt=Function.prototype,Jnt=Object.prototype,znt=Knt.toString,Znt=Jnt.hasOwnProperty,Xnt=RegExp("^"+znt.call(Znt).replace(Ynt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function $nt(t){if(!Gnt(t)||qnt(t))return!1;var e=jnt(t)?Xnt:Vnt;return e.test(Wnt(t))}Ile.exports=$nt});var Ble=L((HYt,wle)=>{function eit(t,e){return t?.[e]}wle.exports=eit});var f0=L((jYt,vle)=>{var tit=Cle(),rit=Ble();function nit(t,e){var r=rit(t,e);return tit(r)?r:void 0}vle.exports=nit});var Dk=L((qYt,Sle)=>{var iit=f0(),sit=Pc(),oit=iit(sit,"Map");Sle.exports=oit});var SB=L((GYt,Dle)=>{var ait=f0(),lit=ait(Object,"create");Dle.exports=lit});var xle=L((WYt,Ple)=>{var ble=SB();function cit(){this.__data__=ble?ble(null):{},this.size=0}Ple.exports=cit});var Qle=L((YYt,kle)=>{function uit(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}kle.exports=uit});var Rle=L((VYt,Tle)=>{var fit=SB(),Ait="__lodash_hash_undefined__",pit=Object.prototype,hit=pit.hasOwnProperty;function git(t){var e=this.__data__;if(fit){var r=e[t];return r===Ait?void 0:r}return hit.call(e,t)?e[t]:void 0}Tle.exports=git});var Nle=L((KYt,Fle)=>{var dit=SB(),mit=Object.prototype,yit=mit.hasOwnProperty;function Eit(t){var e=this.__data__;return dit?e[t]!==void 0:yit.call(e,t)}Fle.exports=Eit});var Lle=L((JYt,Ole)=>{var Iit=SB(),Cit="__lodash_hash_undefined__";function wit(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Iit&&e===void 0?Cit:e,this}Ole.exports=wit});var _le=L((zYt,Mle)=>{var Bit=xle(),vit=Qle(),Sit=Rle(),Dit=Nle(),bit=Lle();function NE(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var Ule=_le(),Pit=BB(),xit=Dk();function kit(){this.size=0,this.__data__={hash:new Ule,map:new(xit||Pit),string:new Ule}}Hle.exports=kit});var Gle=L((XYt,qle)=>{function Qit(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}qle.exports=Qit});var DB=L(($Yt,Wle)=>{var Tit=Gle();function Rit(t,e){var r=t.__data__;return Tit(e)?r[typeof e=="string"?"string":"hash"]:r.map}Wle.exports=Rit});var Vle=L((eVt,Yle)=>{var Fit=DB();function Nit(t){var e=Fit(this,t).delete(t);return this.size-=e?1:0,e}Yle.exports=Nit});var Jle=L((tVt,Kle)=>{var Oit=DB();function Lit(t){return Oit(this,t).get(t)}Kle.exports=Lit});var Zle=L((rVt,zle)=>{var Mit=DB();function _it(t){return Mit(this,t).has(t)}zle.exports=_it});var $le=L((nVt,Xle)=>{var Uit=DB();function Hit(t,e){var r=Uit(this,t),s=r.size;return r.set(t,e),this.size+=r.size==s?0:1,this}Xle.exports=Hit});var bk=L((iVt,ece)=>{var jit=jle(),qit=Vle(),Git=Jle(),Wit=Zle(),Yit=$le();function OE(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var Vit=BB(),Kit=Dk(),Jit=bk(),zit=200;function Zit(t,e){var r=this.__data__;if(r instanceof Vit){var s=r.__data__;if(!Kit||s.length{var Xit=BB(),$it=Vae(),est=Jae(),tst=Zae(),rst=$ae(),nst=rce();function LE(t){var e=this.__data__=new Xit(t);this.size=e.size}LE.prototype.clear=$it;LE.prototype.delete=est;LE.prototype.get=tst;LE.prototype.has=rst;LE.prototype.set=nst;nce.exports=LE});var sce=L((aVt,ice)=>{var ist="__lodash_hash_undefined__";function sst(t){return this.__data__.set(t,ist),this}ice.exports=sst});var ace=L((lVt,oce)=>{function ost(t){return this.__data__.has(t)}oce.exports=ost});var cce=L((cVt,lce)=>{var ast=bk(),lst=sce(),cst=ace();function xk(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new ast;++e{function ust(t,e){for(var r=-1,s=t==null?0:t.length;++r{function fst(t,e){return t.has(e)}Ace.exports=fst});var D4=L((AVt,hce)=>{var Ast=cce(),pst=fce(),hst=pce(),gst=1,dst=2;function mst(t,e,r,s,a,n){var c=r&gst,f=t.length,p=e.length;if(f!=p&&!(c&&p>f))return!1;var h=n.get(t),E=n.get(e);if(h&&E)return h==e&&E==t;var C=-1,S=!0,P=r&dst?new Ast:void 0;for(n.set(t,e),n.set(e,t);++C{var yst=Pc(),Est=yst.Uint8Array;gce.exports=Est});var mce=L((hVt,dce)=>{function Ist(t){var e=-1,r=Array(t.size);return t.forEach(function(s,a){r[++e]=[a,s]}),r}dce.exports=Ist});var Ece=L((gVt,yce)=>{function Cst(t){var e=-1,r=Array(t.size);return t.forEach(function(s){r[++e]=s}),r}yce.exports=Cst});var vce=L((dVt,Bce)=>{var Ice=Gd(),Cce=b4(),wst=RE(),Bst=D4(),vst=mce(),Sst=Ece(),Dst=1,bst=2,Pst="[object Boolean]",xst="[object Date]",kst="[object Error]",Qst="[object Map]",Tst="[object Number]",Rst="[object RegExp]",Fst="[object Set]",Nst="[object String]",Ost="[object Symbol]",Lst="[object ArrayBuffer]",Mst="[object DataView]",wce=Ice?Ice.prototype:void 0,P4=wce?wce.valueOf:void 0;function _st(t,e,r,s,a,n,c){switch(r){case Mst:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case Lst:return!(t.byteLength!=e.byteLength||!n(new Cce(t),new Cce(e)));case Pst:case xst:case Tst:return wst(+t,+e);case kst:return t.name==e.name&&t.message==e.message;case Rst:case Nst:return t==e+"";case Qst:var f=vst;case Fst:var p=s&Dst;if(f||(f=Sst),t.size!=e.size&&!p)return!1;var h=c.get(t);if(h)return h==e;s|=bst,c.set(t,e);var E=Bst(f(t),f(e),s,a,n,c);return c.delete(t),E;case Ost:if(P4)return P4.call(t)==P4.call(e)}return!1}Bce.exports=_st});var kk=L((mVt,Sce)=>{function Ust(t,e){for(var r=-1,s=e.length,a=t.length;++r{var Hst=Array.isArray;Dce.exports=Hst});var x4=L((EVt,bce)=>{var jst=kk(),qst=xc();function Gst(t,e,r){var s=e(t);return qst(t)?s:jst(s,r(t))}bce.exports=Gst});var xce=L((IVt,Pce)=>{function Wst(t,e){for(var r=-1,s=t==null?0:t.length,a=0,n=[];++r{function Yst(){return[]}kce.exports=Yst});var Qk=L((wVt,Tce)=>{var Vst=xce(),Kst=k4(),Jst=Object.prototype,zst=Jst.propertyIsEnumerable,Qce=Object.getOwnPropertySymbols,Zst=Qce?function(t){return t==null?[]:(t=Object(t),Vst(Qce(t),function(e){return zst.call(t,e)}))}:Kst;Tce.exports=Zst});var Fce=L((BVt,Rce)=>{function Xst(t,e){for(var r=-1,s=Array(t);++r{function $st(t){return t!=null&&typeof t=="object"}Nce.exports=$st});var Lce=L((SVt,Oce)=>{var eot=Wd(),tot=zf(),rot="[object Arguments]";function not(t){return tot(t)&&eot(t)==rot}Oce.exports=not});var bB=L((DVt,Uce)=>{var Mce=Lce(),iot=zf(),_ce=Object.prototype,sot=_ce.hasOwnProperty,oot=_ce.propertyIsEnumerable,aot=Mce(function(){return arguments}())?Mce:function(t){return iot(t)&&sot.call(t,"callee")&&!oot.call(t,"callee")};Uce.exports=aot});var jce=L((bVt,Hce)=>{function lot(){return!1}Hce.exports=lot});var xB=L((PB,ME)=>{var cot=Pc(),uot=jce(),Wce=typeof PB=="object"&&PB&&!PB.nodeType&&PB,qce=Wce&&typeof ME=="object"&&ME&&!ME.nodeType&&ME,fot=qce&&qce.exports===Wce,Gce=fot?cot.Buffer:void 0,Aot=Gce?Gce.isBuffer:void 0,pot=Aot||uot;ME.exports=pot});var kB=L((PVt,Yce)=>{var hot=9007199254740991,got=/^(?:0|[1-9]\d*)$/;function dot(t,e){var r=typeof t;return e=e??hot,!!e&&(r=="number"||r!="symbol"&&got.test(t))&&t>-1&&t%1==0&&t{var mot=9007199254740991;function yot(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=mot}Vce.exports=yot});var Jce=L((kVt,Kce)=>{var Eot=Wd(),Iot=Tk(),Cot=zf(),wot="[object Arguments]",Bot="[object Array]",vot="[object Boolean]",Sot="[object Date]",Dot="[object Error]",bot="[object Function]",Pot="[object Map]",xot="[object Number]",kot="[object Object]",Qot="[object RegExp]",Tot="[object Set]",Rot="[object String]",Fot="[object WeakMap]",Not="[object ArrayBuffer]",Oot="[object DataView]",Lot="[object Float32Array]",Mot="[object Float64Array]",_ot="[object Int8Array]",Uot="[object Int16Array]",Hot="[object Int32Array]",jot="[object Uint8Array]",qot="[object Uint8ClampedArray]",Got="[object Uint16Array]",Wot="[object Uint32Array]",Di={};Di[Lot]=Di[Mot]=Di[_ot]=Di[Uot]=Di[Hot]=Di[jot]=Di[qot]=Di[Got]=Di[Wot]=!0;Di[wot]=Di[Bot]=Di[Not]=Di[vot]=Di[Oot]=Di[Sot]=Di[Dot]=Di[bot]=Di[Pot]=Di[xot]=Di[kot]=Di[Qot]=Di[Tot]=Di[Rot]=Di[Fot]=!1;function Yot(t){return Cot(t)&&Iot(t.length)&&!!Di[Eot(t)]}Kce.exports=Yot});var Rk=L((QVt,zce)=>{function Vot(t){return function(e){return t(e)}}zce.exports=Vot});var Fk=L((QB,_E)=>{var Kot=B4(),Zce=typeof QB=="object"&&QB&&!QB.nodeType&&QB,TB=Zce&&typeof _E=="object"&&_E&&!_E.nodeType&&_E,Jot=TB&&TB.exports===Zce,Q4=Jot&&Kot.process,zot=function(){try{var t=TB&&TB.require&&TB.require("util").types;return t||Q4&&Q4.binding&&Q4.binding("util")}catch{}}();_E.exports=zot});var Nk=L((TVt,eue)=>{var Zot=Jce(),Xot=Rk(),Xce=Fk(),$ce=Xce&&Xce.isTypedArray,$ot=$ce?Xot($ce):Zot;eue.exports=$ot});var T4=L((RVt,tue)=>{var eat=Fce(),tat=bB(),rat=xc(),nat=xB(),iat=kB(),sat=Nk(),oat=Object.prototype,aat=oat.hasOwnProperty;function lat(t,e){var r=rat(t),s=!r&&tat(t),a=!r&&!s&&nat(t),n=!r&&!s&&!a&&sat(t),c=r||s||a||n,f=c?eat(t.length,String):[],p=f.length;for(var h in t)(e||aat.call(t,h))&&!(c&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||iat(h,p)))&&f.push(h);return f}tue.exports=lat});var Ok=L((FVt,rue)=>{var cat=Object.prototype;function uat(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||cat;return t===r}rue.exports=uat});var R4=L((NVt,nue)=>{function fat(t,e){return function(r){return t(e(r))}}nue.exports=fat});var sue=L((OVt,iue)=>{var Aat=R4(),pat=Aat(Object.keys,Object);iue.exports=pat});var aue=L((LVt,oue)=>{var hat=Ok(),gat=sue(),dat=Object.prototype,mat=dat.hasOwnProperty;function yat(t){if(!hat(t))return gat(t);var e=[];for(var r in Object(t))mat.call(t,r)&&r!="constructor"&&e.push(r);return e}oue.exports=yat});var RB=L((MVt,lue)=>{var Eat=Sk(),Iat=Tk();function Cat(t){return t!=null&&Iat(t.length)&&!Eat(t)}lue.exports=Cat});var Lk=L((_Vt,cue)=>{var wat=T4(),Bat=aue(),vat=RB();function Sat(t){return vat(t)?wat(t):Bat(t)}cue.exports=Sat});var F4=L((UVt,uue)=>{var Dat=x4(),bat=Qk(),Pat=Lk();function xat(t){return Dat(t,Pat,bat)}uue.exports=xat});var pue=L((HVt,Aue)=>{var fue=F4(),kat=1,Qat=Object.prototype,Tat=Qat.hasOwnProperty;function Rat(t,e,r,s,a,n){var c=r&kat,f=fue(t),p=f.length,h=fue(e),E=h.length;if(p!=E&&!c)return!1;for(var C=p;C--;){var S=f[C];if(!(c?S in e:Tat.call(e,S)))return!1}var P=n.get(t),I=n.get(e);if(P&&I)return P==e&&I==t;var R=!0;n.set(t,e),n.set(e,t);for(var N=c;++C{var Fat=f0(),Nat=Pc(),Oat=Fat(Nat,"DataView");hue.exports=Oat});var mue=L((qVt,due)=>{var Lat=f0(),Mat=Pc(),_at=Lat(Mat,"Promise");due.exports=_at});var Eue=L((GVt,yue)=>{var Uat=f0(),Hat=Pc(),jat=Uat(Hat,"Set");yue.exports=jat});var Cue=L((WVt,Iue)=>{var qat=f0(),Gat=Pc(),Wat=qat(Gat,"WeakMap");Iue.exports=Wat});var FB=L((YVt,Pue)=>{var N4=gue(),O4=Dk(),L4=mue(),M4=Eue(),_4=Cue(),bue=Wd(),UE=S4(),wue="[object Map]",Yat="[object Object]",Bue="[object Promise]",vue="[object Set]",Sue="[object WeakMap]",Due="[object DataView]",Vat=UE(N4),Kat=UE(O4),Jat=UE(L4),zat=UE(M4),Zat=UE(_4),Yd=bue;(N4&&Yd(new N4(new ArrayBuffer(1)))!=Due||O4&&Yd(new O4)!=wue||L4&&Yd(L4.resolve())!=Bue||M4&&Yd(new M4)!=vue||_4&&Yd(new _4)!=Sue)&&(Yd=function(t){var e=bue(t),r=e==Yat?t.constructor:void 0,s=r?UE(r):"";if(s)switch(s){case Vat:return Due;case Kat:return wue;case Jat:return Bue;case zat:return vue;case Zat:return Sue}return e});Pue.exports=Yd});var Oue=L((VVt,Nue)=>{var U4=Pk(),Xat=D4(),$at=vce(),elt=pue(),xue=FB(),kue=xc(),Que=xB(),tlt=Nk(),rlt=1,Tue="[object Arguments]",Rue="[object Array]",Mk="[object Object]",nlt=Object.prototype,Fue=nlt.hasOwnProperty;function ilt(t,e,r,s,a,n){var c=kue(t),f=kue(e),p=c?Rue:xue(t),h=f?Rue:xue(e);p=p==Tue?Mk:p,h=h==Tue?Mk:h;var E=p==Mk,C=h==Mk,S=p==h;if(S&&Que(t)){if(!Que(e))return!1;c=!0,E=!1}if(S&&!E)return n||(n=new U4),c||tlt(t)?Xat(t,e,r,s,a,n):$at(t,e,p,r,s,a,n);if(!(r&rlt)){var P=E&&Fue.call(t,"__wrapped__"),I=C&&Fue.call(e,"__wrapped__");if(P||I){var R=P?t.value():t,N=I?e.value():e;return n||(n=new U4),a(R,N,r,s,n)}}return S?(n||(n=new U4),elt(t,e,r,s,a,n)):!1}Nue.exports=ilt});var Uue=L((KVt,_ue)=>{var slt=Oue(),Lue=zf();function Mue(t,e,r,s,a){return t===e?!0:t==null||e==null||!Lue(t)&&!Lue(e)?t!==t&&e!==e:slt(t,e,r,s,Mue,a)}_ue.exports=Mue});var jue=L((JVt,Hue)=>{var olt=Uue();function alt(t,e){return olt(t,e)}Hue.exports=alt});var H4=L((zVt,que)=>{var llt=f0(),clt=function(){try{var t=llt(Object,"defineProperty");return t({},"",{}),t}catch{}}();que.exports=clt});var _k=L((ZVt,Wue)=>{var Gue=H4();function ult(t,e,r){e=="__proto__"&&Gue?Gue(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}Wue.exports=ult});var j4=L((XVt,Yue)=>{var flt=_k(),Alt=RE();function plt(t,e,r){(r!==void 0&&!Alt(t[e],r)||r===void 0&&!(e in t))&&flt(t,e,r)}Yue.exports=plt});var Kue=L(($Vt,Vue)=>{function hlt(t){return function(e,r,s){for(var a=-1,n=Object(e),c=s(e),f=c.length;f--;){var p=c[t?f:++a];if(r(n[p],p,n)===!1)break}return e}}Vue.exports=hlt});var zue=L((e7t,Jue)=>{var glt=Kue(),dlt=glt();Jue.exports=dlt});var q4=L((NB,HE)=>{var mlt=Pc(),efe=typeof NB=="object"&&NB&&!NB.nodeType&&NB,Zue=efe&&typeof HE=="object"&&HE&&!HE.nodeType&&HE,ylt=Zue&&Zue.exports===efe,Xue=ylt?mlt.Buffer:void 0,$ue=Xue?Xue.allocUnsafe:void 0;function Elt(t,e){if(e)return t.slice();var r=t.length,s=$ue?$ue(r):new t.constructor(r);return t.copy(s),s}HE.exports=Elt});var Uk=L((t7t,rfe)=>{var tfe=b4();function Ilt(t){var e=new t.constructor(t.byteLength);return new tfe(e).set(new tfe(t)),e}rfe.exports=Ilt});var G4=L((r7t,nfe)=>{var Clt=Uk();function wlt(t,e){var r=e?Clt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}nfe.exports=wlt});var Hk=L((n7t,ife)=>{function Blt(t,e){var r=-1,s=t.length;for(e||(e=Array(s));++r{var vlt=Wl(),sfe=Object.create,Slt=function(){function t(){}return function(e){if(!vlt(e))return{};if(sfe)return sfe(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();ofe.exports=Slt});var jk=L((s7t,lfe)=>{var Dlt=R4(),blt=Dlt(Object.getPrototypeOf,Object);lfe.exports=blt});var W4=L((o7t,cfe)=>{var Plt=afe(),xlt=jk(),klt=Ok();function Qlt(t){return typeof t.constructor=="function"&&!klt(t)?Plt(xlt(t)):{}}cfe.exports=Qlt});var ffe=L((a7t,ufe)=>{var Tlt=RB(),Rlt=zf();function Flt(t){return Rlt(t)&&Tlt(t)}ufe.exports=Flt});var Y4=L((l7t,pfe)=>{var Nlt=Wd(),Olt=jk(),Llt=zf(),Mlt="[object Object]",_lt=Function.prototype,Ult=Object.prototype,Afe=_lt.toString,Hlt=Ult.hasOwnProperty,jlt=Afe.call(Object);function qlt(t){if(!Llt(t)||Nlt(t)!=Mlt)return!1;var e=Olt(t);if(e===null)return!0;var r=Hlt.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Afe.call(r)==jlt}pfe.exports=qlt});var V4=L((c7t,hfe)=>{function Glt(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}hfe.exports=Glt});var qk=L((u7t,gfe)=>{var Wlt=_k(),Ylt=RE(),Vlt=Object.prototype,Klt=Vlt.hasOwnProperty;function Jlt(t,e,r){var s=t[e];(!(Klt.call(t,e)&&Ylt(s,r))||r===void 0&&!(e in t))&&Wlt(t,e,r)}gfe.exports=Jlt});var Vd=L((f7t,dfe)=>{var zlt=qk(),Zlt=_k();function Xlt(t,e,r,s){var a=!r;r||(r={});for(var n=-1,c=e.length;++n{function $lt(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}mfe.exports=$lt});var Ife=L((p7t,Efe)=>{var ect=Wl(),tct=Ok(),rct=yfe(),nct=Object.prototype,ict=nct.hasOwnProperty;function sct(t){if(!ect(t))return rct(t);var e=tct(t),r=[];for(var s in t)s=="constructor"&&(e||!ict.call(t,s))||r.push(s);return r}Efe.exports=sct});var jE=L((h7t,Cfe)=>{var oct=T4(),act=Ife(),lct=RB();function cct(t){return lct(t)?oct(t,!0):act(t)}Cfe.exports=cct});var Bfe=L((g7t,wfe)=>{var uct=Vd(),fct=jE();function Act(t){return uct(t,fct(t))}wfe.exports=Act});var xfe=L((d7t,Pfe)=>{var vfe=j4(),pct=q4(),hct=G4(),gct=Hk(),dct=W4(),Sfe=bB(),Dfe=xc(),mct=ffe(),yct=xB(),Ect=Sk(),Ict=Wl(),Cct=Y4(),wct=Nk(),bfe=V4(),Bct=Bfe();function vct(t,e,r,s,a,n,c){var f=bfe(t,r),p=bfe(e,r),h=c.get(p);if(h){vfe(t,r,h);return}var E=n?n(f,p,r+"",t,e,c):void 0,C=E===void 0;if(C){var S=Dfe(p),P=!S&&yct(p),I=!S&&!P&&wct(p);E=p,S||P||I?Dfe(f)?E=f:mct(f)?E=gct(f):P?(C=!1,E=pct(p,!0)):I?(C=!1,E=hct(p,!0)):E=[]:Cct(p)||Sfe(p)?(E=f,Sfe(f)?E=Bct(f):(!Ict(f)||Ect(f))&&(E=dct(p))):C=!1}C&&(c.set(p,E),a(E,p,s,n,c),c.delete(p)),vfe(t,r,E)}Pfe.exports=vct});var Tfe=L((m7t,Qfe)=>{var Sct=Pk(),Dct=j4(),bct=zue(),Pct=xfe(),xct=Wl(),kct=jE(),Qct=V4();function kfe(t,e,r,s,a){t!==e&&bct(e,function(n,c){if(a||(a=new Sct),xct(n))Pct(t,e,c,r,kfe,s,a);else{var f=s?s(Qct(t,c),n,c+"",t,e,a):void 0;f===void 0&&(f=n),Dct(t,c,f)}},kct)}Qfe.exports=kfe});var K4=L((y7t,Rfe)=>{function Tct(t){return t}Rfe.exports=Tct});var Nfe=L((E7t,Ffe)=>{function Rct(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}Ffe.exports=Rct});var J4=L((I7t,Lfe)=>{var Fct=Nfe(),Ofe=Math.max;function Nct(t,e,r){return e=Ofe(e===void 0?t.length-1:e,0),function(){for(var s=arguments,a=-1,n=Ofe(s.length-e,0),c=Array(n);++a{function Oct(t){return function(){return t}}Mfe.exports=Oct});var jfe=L((w7t,Hfe)=>{var Lct=_fe(),Ufe=H4(),Mct=K4(),_ct=Ufe?function(t,e){return Ufe(t,"toString",{configurable:!0,enumerable:!1,value:Lct(e),writable:!0})}:Mct;Hfe.exports=_ct});var Gfe=L((B7t,qfe)=>{var Uct=800,Hct=16,jct=Date.now;function qct(t){var e=0,r=0;return function(){var s=jct(),a=Hct-(s-r);if(r=s,a>0){if(++e>=Uct)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}qfe.exports=qct});var z4=L((v7t,Wfe)=>{var Gct=jfe(),Wct=Gfe(),Yct=Wct(Gct);Wfe.exports=Yct});var Vfe=L((S7t,Yfe)=>{var Vct=K4(),Kct=J4(),Jct=z4();function zct(t,e){return Jct(Kct(t,e,Vct),t+"")}Yfe.exports=zct});var Jfe=L((D7t,Kfe)=>{var Zct=RE(),Xct=RB(),$ct=kB(),eut=Wl();function tut(t,e,r){if(!eut(r))return!1;var s=typeof e;return(s=="number"?Xct(r)&&$ct(e,r.length):s=="string"&&e in r)?Zct(r[e],t):!1}Kfe.exports=tut});var Zfe=L((b7t,zfe)=>{var rut=Vfe(),nut=Jfe();function iut(t){return rut(function(e,r){var s=-1,a=r.length,n=a>1?r[a-1]:void 0,c=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,c&&nut(r[0],r[1],c)&&(n=a<3?void 0:n,a=1),e=Object(e);++s{var sut=Tfe(),out=Zfe(),aut=out(function(t,e,r,s){sut(t,e,r,s)});Xfe.exports=aut});var je={};Vt(je,{AsyncActions:()=>$4,BufferStream:()=>X4,CachingStrategy:()=>fAe,DefaultStream:()=>e3,allSettledSafe:()=>Uu,assertNever:()=>r3,bufferStream:()=>GE,buildIgnorePattern:()=>hut,convertMapsToIndexableObjects:()=>Wk,dynamicRequire:()=>kp,escapeRegExp:()=>cut,getArrayWithDefault:()=>LB,getFactoryWithDefault:()=>Vl,getMapWithDefault:()=>n3,getSetWithDefault:()=>xp,groupBy:()=>mut,isIndexableObject:()=>Z4,isPathLike:()=>gut,isTaggedYarnVersion:()=>lut,makeDeferred:()=>lAe,mapAndFilter:()=>Yl,mapAndFind:()=>A0,mergeIntoTarget:()=>pAe,overrideType:()=>uut,parseBoolean:()=>MB,parseInt:()=>WE,parseOptionalBoolean:()=>AAe,plural:()=>Gk,prettifyAsyncErrors:()=>qE,prettifySyncErrors:()=>i3,releaseAfterUseAsync:()=>Aut,replaceEnvVariables:()=>Yk,sortMap:()=>Ys,toMerged:()=>dut,tryParseOptionalBoolean:()=>s3,validateEnum:()=>fut});function lut(t){return!!(sAe.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function Gk(t,{one:e,more:r,zero:s=r}){return t===0?s:t===1?e:r}function cut(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function uut(t){}function r3(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function fut(t,e){let r=Object.values(t);if(!r.includes(e))throw new nt(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(s=>JSON.stringify(s)).join(", ")})`);return e}function Yl(t,e){let r=[];for(let s of t){let a=e(s);a!==oAe&&r.push(a)}return r}function A0(t,e){for(let r of t){let s=e(r);if(s!==aAe)return s}}function Z4(t){return typeof t=="object"&&t!==null}async function Uu(t){let e=await Promise.allSettled(t),r=[];for(let s of e){if(s.status==="rejected")throw s.reason;r.push(s.value)}return r}function Wk(t){if(t instanceof Map&&(t=Object.fromEntries(t)),Z4(t))for(let e of Object.keys(t)){let r=t[e];Z4(r)&&(t[e]=Wk(r))}return t}function Vl(t,e,r){let s=t.get(e);return typeof s>"u"&&t.set(e,s=r()),s}function LB(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function xp(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function n3(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function Aut(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function qE(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function i3(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function GE(t){return await new Promise((e,r)=>{let s=[];t.on("error",a=>{r(a)}),t.on("data",a=>{s.push(a)}),t.on("end",()=>{e(Buffer.concat(s))})})}function lAe(){let t,e;return{promise:new Promise((s,a)=>{t=s,e=a}),resolve:t,reject:e}}function cAe(t){return OB(ue.fromPortablePath(t))}function uAe(path){let physicalPath=ue.fromPortablePath(path),currentCacheEntry=OB.cache[physicalPath];delete OB.cache[physicalPath];let result;try{result=cAe(physicalPath);let freshCacheEntry=OB.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{OB.cache[physicalPath]=currentCacheEntry}return result}function put(t){let e=eAe.get(t),r=le.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let s=uAe(t);return eAe.set(t,{mtime:r.mtimeMs,instance:s}),s}function kp(t,{cachingStrategy:e=2}={}){switch(e){case 0:return uAe(t);case 1:return put(t);case 2:return cAe(t);default:throw new Error("Unsupported caching strategy")}}function Ys(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let s=[];for(let n of e)s.push(r.map(c=>n(c)));let a=r.map((n,c)=>c);return a.sort((n,c)=>{for(let f of s){let p=f[n]f[c]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function hut(t){return t.length===0?null:t.map(e=>`(${nAe.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function Yk(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...s)=>{let{variableName:a,colon:n,fallback:c}=s[s.length-1],f=Object.hasOwn(e,a),p=e[a];if(p||f&&!n)return p;if(c!=null)return c;throw new nt(`Environment variable not found (${a})`)})}function MB(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${t}" as a boolean`)}}function AAe(t){return typeof t>"u"?t:MB(t)}function s3(t){try{return AAe(t)}catch{return null}}function gut(t){return!!(ue.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function pAe(t,...e){let r=c=>({value:c}),s=r(t),a=e.map(c=>r(c)),{value:n}=(0,rAe.default)(s,...a,(c,f)=>{if(Array.isArray(c)&&Array.isArray(f)){for(let p of f)c.find(h=>(0,tAe.default)(h,p))||c.push(p);return c}});return n}function dut(...t){return pAe({},...t)}function mut(t,e){let r=Object.create(null);for(let s of t){let a=s[e];r[a]??=[],r[a].push(s)}return r}function WE(t){return typeof t=="string"?Number.parseInt(t,10):t}var tAe,rAe,nAe,iAe,sAe,t3,oAe,aAe,X4,$4,e3,OB,eAe,fAe,kc=Ct(()=>{bt();Wt();tAe=et(jue()),rAe=et($fe()),nAe=et(Sa()),iAe=et(Od()),sAe=et(Ai()),t3=Ie("stream");oAe=Symbol();Yl.skip=oAe;aAe=Symbol();A0.skip=aAe;X4=class extends t3.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,s,a){if(s!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};$4=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,iAe.default)(e)}set(e,r){let s=this.deferred.get(e);typeof s>"u"&&this.deferred.set(e,s=lAe());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&s.resolve()},n=>{this.promises.get(e)===a&&s.reject(n)}),s.promise}reduce(e,r){let s=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(s))}async wait(){await Promise.all(this.promises.values())}},e3=class extends t3.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,s,a){if(s!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},OB=eval("require");eAe=new Map;fAe=(s=>(s[s.NoCache=0]="NoCache",s[s.FsTime=1]="FsTime",s[s.Node=2]="Node",s))(fAe||{})});var YE,o3,a3,hAe=Ct(()=>{YE=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(YE||{}),o3=(s=>(s.Dependency="Dependency",s.PeerDependency="PeerDependency",s.PeerDependencyMeta="PeerDependencyMeta",s))(o3||{}),a3=(s=>(s.Inactive="inactive",s.Redundant="redundant",s.Active="active",s))(a3||{})});var he={};Vt(he,{LogLevel:()=>Xk,Style:()=>Jk,Type:()=>pt,addLogFilterSupport:()=>HB,applyColor:()=>ri,applyHyperlink:()=>KE,applyStyle:()=>Kd,json:()=>Jd,jsonOrPretty:()=>Iut,mark:()=>A3,pretty:()=>Ut,prettyField:()=>Zf,prettyList:()=>f3,prettyTruncatedLocatorList:()=>Zk,stripAnsi:()=>VE.default,supportsColor:()=>zk,supportsHyperlinks:()=>u3,tuple:()=>Hu});function gAe(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let s=1024**r;return`${Math.floor(t*100/s)/100} ${e[r-1]}`}function Vk(t,e){if(Array.isArray(e))return e.length===0?ri(t,"[]",pt.CODE):ri(t,"[ ",pt.CODE)+e.map(r=>Vk(t,r)).join(", ")+ri(t," ]",pt.CODE);if(typeof e=="string")return ri(t,JSON.stringify(e),pt.STRING);if(typeof e=="number")return ri(t,JSON.stringify(e),pt.NUMBER);if(typeof e=="boolean")return ri(t,JSON.stringify(e),pt.BOOLEAN);if(e===null)return ri(t,"null",pt.NULL);if(typeof e=="object"&&Object.getPrototypeOf(e)===Object.prototype){let r=Object.entries(e);return r.length===0?ri(t,"{}",pt.CODE):ri(t,"{ ",pt.CODE)+r.map(([s,a])=>`${Vk(t,s)}: ${Vk(t,a)}`).join(", ")+ri(t," }",pt.CODE)}if(typeof e>"u")return ri(t,"undefined",pt.NULL);throw new Error("Assertion failed: The value doesn't seem to be a valid JSON object")}function Hu(t,e){return[e,t]}function Kd(t,e,r){return t.get("enableColors")&&r&2&&(e=UB.default.bold(e)),e}function ri(t,e,r){if(!t.get("enableColors"))return e;let s=yut.get(r);if(s===null)return e;let a=typeof s>"u"?r:c3.level>=3?s[0]:s[1],n=typeof a=="number"?l3.ansi256(a):a.startsWith("#")?l3.hex(a):l3[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function KE(t,e,r){return t.get("enableHyperlinks")?Eut?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Ut(t,e,r){if(e===null)return ri(t,"null",pt.NULL);if(Object.hasOwn(Kk,r))return Kk[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return ri(t,e,r)}function f3(t,e,r,{separator:s=", "}={}){return[...e].map(a=>Ut(t,a,r)).join(s)}function Jd(t,e){if(t===null)return null;if(Object.hasOwn(Kk,e))return Kk[e].json(t);if(typeof t!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof t}`);return t}function Iut(t,e,[r,s]){return t?Jd(r,s):Ut(e,r,s)}function A3(t){return{Check:ri(t,"\u2713","green"),Cross:ri(t,"\u2718","red"),Question:ri(t,"?","cyan")}}function Zf(t,{label:e,value:[r,s]}){return`${Ut(t,e,pt.CODE)}: ${Ut(t,r,s)}`}function Zk(t,e,r){let s=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${Yr(t,h)}, `,C=p3(h).length+2;if(s.length>0&&nh).join("").slice(0,-2);let c="X".repeat(a.length.toString().length),f=`and ${c} more.`,p=a.length;for(;s.length>1&&nh).join(""),f.replace(c,Ut(t,p,pt.NUMBER))].join("")}function HB(t,{configuration:e}){let r=e.get("logFilters"),s=new Map,a=new Map,n=[];for(let C of r){let S=C.get("level");if(typeof S>"u")continue;let P=C.get("code");typeof P<"u"&&s.set(P,S);let I=C.get("text");typeof I<"u"&&a.set(I,S);let R=C.get("pattern");typeof R<"u"&&n.push([dAe.default.matcher(R,{contains:!0}),S])}n.reverse();let c=(C,S,P)=>{if(C===null||C===0)return P;let I=a.size>0||n.length>0?(0,VE.default)(S):S;if(a.size>0){let R=a.get(I);if(typeof R<"u")return R??P}if(n.length>0){for(let[R,N]of n)if(R(I))return N??P}if(s.size>0){let R=s.get(Vf(C));if(typeof R<"u")return R??P}return P},f=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(C,S,P,I){switch(c(S,P,I)){case"info":f.call(C,S,P);break;case"warning":p.call(C,S??0,P);break;case"error":h.call(C,S??0,P);break}};t.reportInfo=function(...C){return E(this,...C,"info")},t.reportWarning=function(...C){return E(this,...C,"warning")},t.reportError=function(...C){return E(this,...C,"error")}}var UB,_B,dAe,VE,pt,Jk,c3,zk,u3,l3,yut,Wo,Kk,Eut,Xk,Qc=Ct(()=>{bt();UB=et(kE()),_B=et(Rd());Wt();dAe=et(Sa()),VE=et(vk());Zx();Yo();pt={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",STRING:"STRING",BOOLEAN:"BOOLEAN",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},Jk=(e=>(e[e.BOLD=2]="BOLD",e))(Jk||{}),c3=_B.default.GITHUB_ACTIONS?{level:2}:UB.default.supportsColor?{level:UB.default.supportsColor.level}:{level:0},zk=c3.level!==0,u3=zk&&!_B.default.GITHUB_ACTIONS&&!_B.default.CIRCLE&&!_B.default.GITLAB,l3=new UB.default.Instance(c3),yut=new Map([[pt.NO_HINT,null],[pt.NULL,["#a853b5",129]],[pt.SCOPE,["#d75f00",166]],[pt.NAME,["#d7875f",173]],[pt.RANGE,["#00afaf",37]],[pt.REFERENCE,["#87afff",111]],[pt.NUMBER,["#ffd700",220]],[pt.STRING,["#b4bd68",32]],[pt.BOOLEAN,["#faa023",209]],[pt.PATH,["#d75fd7",170]],[pt.URL,["#d75fd7",170]],[pt.ADDED,["#5faf00",70]],[pt.REMOVED,["#ff3131",160]],[pt.CODE,["#87afff",111]],[pt.SIZE,["#ffd700",220]]]),Wo=t=>t;Kk={[pt.ID]:Wo({pretty:(t,e)=>typeof e=="number"?ri(t,`${e}`,pt.NUMBER):ri(t,e,pt.CODE),json:t=>t}),[pt.INSPECT]:Wo({pretty:(t,e)=>Vk(t,e),json:t=>t}),[pt.NUMBER]:Wo({pretty:(t,e)=>ri(t,`${e}`,pt.NUMBER),json:t=>t}),[pt.IDENT]:Wo({pretty:(t,e)=>es(t,e),json:t=>cn(t)}),[pt.LOCATOR]:Wo({pretty:(t,e)=>Yr(t,e),json:t=>cl(t)}),[pt.DESCRIPTOR]:Wo({pretty:(t,e)=>ni(t,e),json:t=>ll(t)}),[pt.RESOLUTION]:Wo({pretty:(t,{descriptor:e,locator:r})=>jB(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:ll(t),locator:e!==null?cl(e):null})}),[pt.DEPENDENT]:Wo({pretty:(t,{locator:e,descriptor:r})=>h3(t,e,r),json:({locator:t,descriptor:e})=>({locator:cl(t),descriptor:ll(e)})}),[pt.PACKAGE_EXTENSION]:Wo({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${es(t,e.parentDescriptor)} \u27A4 ${ri(t,"dependencies",pt.CODE)} \u27A4 ${es(t,e.descriptor)}`;case"PeerDependency":return`${es(t,e.parentDescriptor)} \u27A4 ${ri(t,"peerDependencies",pt.CODE)} \u27A4 ${es(t,e.descriptor)}`;case"PeerDependencyMeta":return`${es(t,e.parentDescriptor)} \u27A4 ${ri(t,"peerDependenciesMeta",pt.CODE)} \u27A4 ${es(t,Da(e.selector))} \u27A4 ${ri(t,e.key,pt.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${cn(t.parentDescriptor)} > ${cn(t.descriptor)}`;case"PeerDependency":return`${cn(t.parentDescriptor)} >> ${cn(t.descriptor)}`;case"PeerDependencyMeta":return`${cn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[pt.SETTING]:Wo({pretty:(t,e)=>(t.get(e),KE(t,ri(t,e,pt.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[pt.DURATION]:Wo({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),s=Math.ceil((e-r*60*1e3)/1e3);return s===0?`${r}m`:`${r}m ${s}s`}else{let r=Math.floor(e/1e3),s=e-r*1e3;return s===0?`${r}s`:`${r}s ${s}ms`}},json:t=>t}),[pt.SIZE]:Wo({pretty:(t,e)=>ri(t,gAe(e),pt.NUMBER),json:t=>t}),[pt.SIZE_DIFF]:Wo({pretty:(t,e)=>{let r=e>=0?"+":"-",s=r==="+"?pt.REMOVED:pt.ADDED;return ri(t,`${r} ${gAe(Math.max(Math.abs(e),1))}`,s)},json:t=>t}),[pt.PATH]:Wo({pretty:(t,e)=>ri(t,ue.fromPortablePath(e),pt.PATH),json:t=>ue.fromPortablePath(t)}),[pt.MARKDOWN]:Wo({pretty:(t,{text:e,format:r,paragraphs:s})=>qo(e,{format:r,paragraphs:s}),json:({text:t})=>t}),[pt.MARKDOWN_INLINE]:Wo({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,s,a)=>Ut(t,s+a+s,pt.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,s,a)=>Kd(t,a,2)),e),json:t=>t})};Eut=!!process.env.KONSOLE_VERSION;Xk=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(Xk||{})});var mAe=L(JE=>{"use strict";Object.defineProperty(JE,"__esModule",{value:!0});JE.splitWhen=JE.flatten=void 0;function Cut(t){return t.reduce((e,r)=>[].concat(e,r),[])}JE.flatten=Cut;function wut(t,e){let r=[[]],s=0;for(let a of t)e(a)?(s++,r[s]=[]):r[s].push(a);return r}JE.splitWhen=wut});var yAe=L($k=>{"use strict";Object.defineProperty($k,"__esModule",{value:!0});$k.isEnoentCodeError=void 0;function But(t){return t.code==="ENOENT"}$k.isEnoentCodeError=But});var EAe=L(eQ=>{"use strict";Object.defineProperty(eQ,"__esModule",{value:!0});eQ.createDirentFromStats=void 0;var g3=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function vut(t,e){return new g3(t,e)}eQ.createDirentFromStats=vut});var BAe=L(us=>{"use strict";Object.defineProperty(us,"__esModule",{value:!0});us.convertPosixPathToPattern=us.convertWindowsPathToPattern=us.convertPathToPattern=us.escapePosixPath=us.escapeWindowsPath=us.escape=us.removeLeadingDotSegment=us.makeAbsolute=us.unixify=void 0;var Sut=Ie("os"),Dut=Ie("path"),IAe=Sut.platform()==="win32",but=2,Put=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,xut=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,kut=/^\\\\([.?])/,Qut=/\\(?![!()+@[\]{}])/g;function Tut(t){return t.replace(/\\/g,"/")}us.unixify=Tut;function Rut(t,e){return Dut.resolve(t,e)}us.makeAbsolute=Rut;function Fut(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(but)}return t}us.removeLeadingDotSegment=Fut;us.escape=IAe?d3:m3;function d3(t){return t.replace(xut,"\\$2")}us.escapeWindowsPath=d3;function m3(t){return t.replace(Put,"\\$2")}us.escapePosixPath=m3;us.convertPathToPattern=IAe?CAe:wAe;function CAe(t){return d3(t).replace(kut,"//$1").replace(Qut,"/")}us.convertWindowsPathToPattern=CAe;function wAe(t){return m3(t)}us.convertPosixPathToPattern=wAe});var SAe=L((q7t,vAe)=>{vAe.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var PAe=L((G7t,bAe)=>{var Nut=SAe(),DAe={"{":"}","(":")","[":"]"},Out=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,s=-2,a=-2,n=-2,c=-2;ee&&(c===-1||c>s||(c=t.indexOf("\\",e),c===-1||c>s)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(c=t.indexOf("\\",e),c===-1||c>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(c=t.indexOf("\\",e),c===-1||c>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(c=t.indexOf("\\",r),c===-1||c>n))))return!0;if(t[e]==="\\"){var f=t[e+1];e+=2;var p=DAe[f];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},Lut=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var Mut=PAe(),_ut=Ie("path").posix.dirname,Uut=Ie("os").platform()==="win32",y3="/",Hut=/\\/g,jut=/[\{\[].*[\}\]]$/,qut=/(^|[^\\])([\{\[]|\([^\)]+$)/,Gut=/\\([\!\*\?\|\[\]\(\)\{\}])/g;xAe.exports=function(e,r){var s=Object.assign({flipBackslashes:!0},r);s.flipBackslashes&&Uut&&e.indexOf(y3)<0&&(e=e.replace(Hut,y3)),jut.test(e)&&(e+=y3),e+="a";do e=_ut(e);while(Mut(e)||qut.test(e));return e.replace(Gut,"$1")}});var MAe=L(jr=>{"use strict";Object.defineProperty(jr,"__esModule",{value:!0});jr.removeDuplicateSlashes=jr.matchAny=jr.convertPatternsToRe=jr.makeRe=jr.getPatternParts=jr.expandBraceExpansion=jr.expandPatternsWithBraceExpansion=jr.isAffectDepthOfReadingPattern=jr.endsWithSlashGlobStar=jr.hasGlobStar=jr.getBaseDirectory=jr.isPatternRelatedToParentDirectory=jr.getPatternsOutsideCurrentDirectory=jr.getPatternsInsideCurrentDirectory=jr.getPositivePatterns=jr.getNegativePatterns=jr.isPositivePattern=jr.isNegativePattern=jr.convertToNegativePattern=jr.convertToPositivePattern=jr.isDynamicPattern=jr.isStaticPattern=void 0;var Wut=Ie("path"),Yut=kAe(),E3=Sa(),QAe="**",Vut="\\",Kut=/[*?]|^!/,Jut=/\[[^[]*]/,zut=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,Zut=/[!*+?@]\([^(]*\)/,Xut=/,|\.\./,$ut=/(?!^)\/{2,}/g;function TAe(t,e={}){return!RAe(t,e)}jr.isStaticPattern=TAe;function RAe(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(Vut)||Kut.test(t)||Jut.test(t)||zut.test(t)||e.extglob!==!1&&Zut.test(t)||e.braceExpansion!==!1&&eft(t))}jr.isDynamicPattern=RAe;function eft(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let s=t.slice(e,r);return Xut.test(s)}function tft(t){return tQ(t)?t.slice(1):t}jr.convertToPositivePattern=tft;function rft(t){return"!"+t}jr.convertToNegativePattern=rft;function tQ(t){return t.startsWith("!")&&t[1]!=="("}jr.isNegativePattern=tQ;function FAe(t){return!tQ(t)}jr.isPositivePattern=FAe;function nft(t){return t.filter(tQ)}jr.getNegativePatterns=nft;function ift(t){return t.filter(FAe)}jr.getPositivePatterns=ift;function sft(t){return t.filter(e=>!I3(e))}jr.getPatternsInsideCurrentDirectory=sft;function oft(t){return t.filter(I3)}jr.getPatternsOutsideCurrentDirectory=oft;function I3(t){return t.startsWith("..")||t.startsWith("./..")}jr.isPatternRelatedToParentDirectory=I3;function aft(t){return Yut(t,{flipBackslashes:!1})}jr.getBaseDirectory=aft;function lft(t){return t.includes(QAe)}jr.hasGlobStar=lft;function NAe(t){return t.endsWith("/"+QAe)}jr.endsWithSlashGlobStar=NAe;function cft(t){let e=Wut.basename(t);return NAe(t)||TAe(e)}jr.isAffectDepthOfReadingPattern=cft;function uft(t){return t.reduce((e,r)=>e.concat(OAe(r)),[])}jr.expandPatternsWithBraceExpansion=uft;function OAe(t){let e=E3.braces(t,{expand:!0,nodupes:!0,keepEscaping:!0});return e.sort((r,s)=>r.length-s.length),e.filter(r=>r!=="")}jr.expandBraceExpansion=OAe;function fft(t,e){let{parts:r}=E3.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}jr.getPatternParts=fft;function LAe(t,e){return E3.makeRe(t,e)}jr.makeRe=LAe;function Aft(t,e){return t.map(r=>LAe(r,e))}jr.convertPatternsToRe=Aft;function pft(t,e){return e.some(r=>r.test(t))}jr.matchAny=pft;function hft(t){return t.replace($ut,"/")}jr.removeDuplicateSlashes=hft});var jAe=L((V7t,HAe)=>{"use strict";var gft=Ie("stream"),_Ae=gft.PassThrough,dft=Array.prototype.slice;HAe.exports=mft;function mft(){let t=[],e=dft.call(arguments),r=!1,s=e[e.length-1];s&&!Array.isArray(s)&&s.pipe==null?e.pop():s={};let a=s.end!==!1,n=s.pipeError===!0;s.objectMode==null&&(s.objectMode=!0),s.highWaterMark==null&&(s.highWaterMark=64*1024);let c=_Ae(s);function f(){for(let E=0,C=arguments.length;E0||(r=!1,p())}function P(I){function R(){I.removeListener("merge2UnpipeEnd",R),I.removeListener("end",R),n&&I.removeListener("error",N),S()}function N(U){c.emit("error",U)}if(I._readableState.endEmitted)return S();I.on("merge2UnpipeEnd",R),I.on("end",R),n&&I.on("error",N),I.pipe(c,{end:!1}),I.resume()}for(let I=0;I{"use strict";Object.defineProperty(rQ,"__esModule",{value:!0});rQ.merge=void 0;var yft=jAe();function Eft(t){let e=yft(t);return t.forEach(r=>{r.once("error",s=>e.emit("error",s))}),e.once("close",()=>qAe(t)),e.once("end",()=>qAe(t)),e}rQ.merge=Eft;function qAe(t){t.forEach(e=>e.emit("close"))}});var WAe=L(zE=>{"use strict";Object.defineProperty(zE,"__esModule",{value:!0});zE.isEmpty=zE.isString=void 0;function Ift(t){return typeof t=="string"}zE.isString=Ift;function Cft(t){return t===""}zE.isEmpty=Cft});var Qp=L(Vo=>{"use strict";Object.defineProperty(Vo,"__esModule",{value:!0});Vo.string=Vo.stream=Vo.pattern=Vo.path=Vo.fs=Vo.errno=Vo.array=void 0;var wft=mAe();Vo.array=wft;var Bft=yAe();Vo.errno=Bft;var vft=EAe();Vo.fs=vft;var Sft=BAe();Vo.path=Sft;var Dft=MAe();Vo.pattern=Dft;var bft=GAe();Vo.stream=bft;var Pft=WAe();Vo.string=Pft});var JAe=L(Ko=>{"use strict";Object.defineProperty(Ko,"__esModule",{value:!0});Ko.convertPatternGroupToTask=Ko.convertPatternGroupsToTasks=Ko.groupPatternsByBaseDirectory=Ko.getNegativePatternsAsPositive=Ko.getPositivePatterns=Ko.convertPatternsToTasks=Ko.generate=void 0;var ju=Qp();function xft(t,e){let r=YAe(t,e),s=YAe(e.ignore,e),a=VAe(r),n=KAe(r,s),c=a.filter(E=>ju.pattern.isStaticPattern(E,e)),f=a.filter(E=>ju.pattern.isDynamicPattern(E,e)),p=C3(c,n,!1),h=C3(f,n,!0);return p.concat(h)}Ko.generate=xft;function YAe(t,e){let r=t;return e.braceExpansion&&(r=ju.pattern.expandPatternsWithBraceExpansion(r)),e.baseNameMatch&&(r=r.map(s=>s.includes("/")?s:`**/${s}`)),r.map(s=>ju.pattern.removeDuplicateSlashes(s))}function C3(t,e,r){let s=[],a=ju.pattern.getPatternsOutsideCurrentDirectory(t),n=ju.pattern.getPatternsInsideCurrentDirectory(t),c=w3(a),f=w3(n);return s.push(...B3(c,e,r)),"."in f?s.push(v3(".",n,e,r)):s.push(...B3(f,e,r)),s}Ko.convertPatternsToTasks=C3;function VAe(t){return ju.pattern.getPositivePatterns(t)}Ko.getPositivePatterns=VAe;function KAe(t,e){return ju.pattern.getNegativePatterns(t).concat(e).map(ju.pattern.convertToPositivePattern)}Ko.getNegativePatternsAsPositive=KAe;function w3(t){let e={};return t.reduce((r,s)=>{let a=ju.pattern.getBaseDirectory(s);return a in r?r[a].push(s):r[a]=[s],r},e)}Ko.groupPatternsByBaseDirectory=w3;function B3(t,e,r){return Object.keys(t).map(s=>v3(s,t[s],e,r))}Ko.convertPatternGroupsToTasks=B3;function v3(t,e,r,s){return{dynamic:s,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(ju.pattern.convertToNegativePattern))}}Ko.convertPatternGroupToTask=v3});var ZAe=L(nQ=>{"use strict";Object.defineProperty(nQ,"__esModule",{value:!0});nQ.read=void 0;function kft(t,e,r){e.fs.lstat(t,(s,a)=>{if(s!==null){zAe(r,s);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){S3(r,a);return}e.fs.stat(t,(n,c)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){zAe(r,n);return}S3(r,a);return}e.markSymbolicLink&&(c.isSymbolicLink=()=>!0),S3(r,c)})})}nQ.read=kft;function zAe(t,e){t(e)}function S3(t,e){t(null,e)}});var XAe=L(iQ=>{"use strict";Object.defineProperty(iQ,"__esModule",{value:!0});iQ.read=void 0;function Qft(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let s=e.fs.statSync(t);return e.markSymbolicLink&&(s.isSymbolicLink=()=>!0),s}catch(s){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw s}}iQ.read=Qft});var $Ae=L(p0=>{"use strict";Object.defineProperty(p0,"__esModule",{value:!0});p0.createFileSystemAdapter=p0.FILE_SYSTEM_ADAPTER=void 0;var sQ=Ie("fs");p0.FILE_SYSTEM_ADAPTER={lstat:sQ.lstat,stat:sQ.stat,lstatSync:sQ.lstatSync,statSync:sQ.statSync};function Tft(t){return t===void 0?p0.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},p0.FILE_SYSTEM_ADAPTER),t)}p0.createFileSystemAdapter=Tft});var epe=L(b3=>{"use strict";Object.defineProperty(b3,"__esModule",{value:!0});var Rft=$Ae(),D3=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Rft.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};b3.default=D3});var zd=L(h0=>{"use strict";Object.defineProperty(h0,"__esModule",{value:!0});h0.statSync=h0.stat=h0.Settings=void 0;var tpe=ZAe(),Fft=XAe(),P3=epe();h0.Settings=P3.default;function Nft(t,e,r){if(typeof e=="function"){tpe.read(t,x3(),e);return}tpe.read(t,x3(e),r)}h0.stat=Nft;function Oft(t,e){let r=x3(e);return Fft.read(t,r)}h0.statSync=Oft;function x3(t={}){return t instanceof P3.default?t:new P3.default(t)}});var ipe=L((nKt,npe)=>{var rpe;npe.exports=typeof queueMicrotask=="function"?queueMicrotask.bind(typeof window<"u"?window:global):t=>(rpe||(rpe=Promise.resolve())).then(t).catch(e=>setTimeout(()=>{throw e},0))});var ope=L((iKt,spe)=>{spe.exports=Mft;var Lft=ipe();function Mft(t,e){let r,s,a,n=!0;Array.isArray(t)?(r=[],s=t.length):(a=Object.keys(t),r={},s=a.length);function c(p){function h(){e&&e(p,r),e=null}n?Lft(h):h()}function f(p,h,E){r[p]=E,(--s===0||h)&&c(h)}s?a?a.forEach(function(p){t[p](function(h,E){f(p,h,E)})}):t.forEach(function(p,h){p(function(E,C){f(h,E,C)})}):c(null),n=!1}});var k3=L(aQ=>{"use strict";Object.defineProperty(aQ,"__esModule",{value:!0});aQ.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var oQ=process.versions.node.split(".");if(oQ[0]===void 0||oQ[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var ape=Number.parseInt(oQ[0],10),_ft=Number.parseInt(oQ[1],10),lpe=10,Uft=10,Hft=ape>lpe,jft=ape===lpe&&_ft>=Uft;aQ.IS_SUPPORT_READDIR_WITH_FILE_TYPES=Hft||jft});var cpe=L(lQ=>{"use strict";Object.defineProperty(lQ,"__esModule",{value:!0});lQ.createDirentFromStats=void 0;var Q3=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function qft(t,e){return new Q3(t,e)}lQ.createDirentFromStats=qft});var T3=L(cQ=>{"use strict";Object.defineProperty(cQ,"__esModule",{value:!0});cQ.fs=void 0;var Gft=cpe();cQ.fs=Gft});var R3=L(uQ=>{"use strict";Object.defineProperty(uQ,"__esModule",{value:!0});uQ.joinPathSegments=void 0;function Wft(t,e,r){return t.endsWith(r)?t+e:t+r+e}uQ.joinPathSegments=Wft});var gpe=L(g0=>{"use strict";Object.defineProperty(g0,"__esModule",{value:!0});g0.readdir=g0.readdirWithFileTypes=g0.read=void 0;var Yft=zd(),upe=ope(),Vft=k3(),fpe=T3(),Ape=R3();function Kft(t,e,r){if(!e.stats&&Vft.IS_SUPPORT_READDIR_WITH_FILE_TYPES){ppe(t,e,r);return}hpe(t,e,r)}g0.read=Kft;function ppe(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(s,a)=>{if(s!==null){fQ(r,s);return}let n=a.map(f=>({dirent:f,name:f.name,path:Ape.joinPathSegments(t,f.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){F3(r,n);return}let c=n.map(f=>Jft(f,e));upe(c,(f,p)=>{if(f!==null){fQ(r,f);return}F3(r,p)})})}g0.readdirWithFileTypes=ppe;function Jft(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(s,a)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){r(s);return}r(null,t);return}t.dirent=fpe.fs.createDirentFromStats(t.name,a),r(null,t)})}}function hpe(t,e,r){e.fs.readdir(t,(s,a)=>{if(s!==null){fQ(r,s);return}let n=a.map(c=>{let f=Ape.joinPathSegments(t,c,e.pathSegmentSeparator);return p=>{Yft.stat(f,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let C={name:c,path:f,dirent:fpe.fs.createDirentFromStats(c,E)};e.stats&&(C.stats=E),p(null,C)})}});upe(n,(c,f)=>{if(c!==null){fQ(r,c);return}F3(r,f)})})}g0.readdir=hpe;function fQ(t,e){t(e)}function F3(t,e){t(null,e)}});var Ipe=L(d0=>{"use strict";Object.defineProperty(d0,"__esModule",{value:!0});d0.readdir=d0.readdirWithFileTypes=d0.read=void 0;var zft=zd(),Zft=k3(),dpe=T3(),mpe=R3();function Xft(t,e){return!e.stats&&Zft.IS_SUPPORT_READDIR_WITH_FILE_TYPES?ype(t,e):Epe(t,e)}d0.read=Xft;function ype(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(s=>{let a={dirent:s,name:s.name,path:mpe.joinPathSegments(t,s.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=dpe.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}d0.readdirWithFileTypes=ype;function Epe(t,e){return e.fs.readdirSync(t).map(s=>{let a=mpe.joinPathSegments(t,s,e.pathSegmentSeparator),n=zft.statSync(a,e.fsStatSettings),c={name:s,path:a,dirent:dpe.fs.createDirentFromStats(s,n)};return e.stats&&(c.stats=n),c})}d0.readdir=Epe});var Cpe=L(m0=>{"use strict";Object.defineProperty(m0,"__esModule",{value:!0});m0.createFileSystemAdapter=m0.FILE_SYSTEM_ADAPTER=void 0;var ZE=Ie("fs");m0.FILE_SYSTEM_ADAPTER={lstat:ZE.lstat,stat:ZE.stat,lstatSync:ZE.lstatSync,statSync:ZE.statSync,readdir:ZE.readdir,readdirSync:ZE.readdirSync};function $ft(t){return t===void 0?m0.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},m0.FILE_SYSTEM_ADAPTER),t)}m0.createFileSystemAdapter=$ft});var wpe=L(O3=>{"use strict";Object.defineProperty(O3,"__esModule",{value:!0});var eAt=Ie("path"),tAt=zd(),rAt=Cpe(),N3=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=rAt.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,eAt.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new tAt.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};O3.default=N3});var AQ=L(y0=>{"use strict";Object.defineProperty(y0,"__esModule",{value:!0});y0.Settings=y0.scandirSync=y0.scandir=void 0;var Bpe=gpe(),nAt=Ipe(),L3=wpe();y0.Settings=L3.default;function iAt(t,e,r){if(typeof e=="function"){Bpe.read(t,M3(),e);return}Bpe.read(t,M3(e),r)}y0.scandir=iAt;function sAt(t,e){let r=M3(e);return nAt.read(t,r)}y0.scandirSync=sAt;function M3(t={}){return t instanceof L3.default?t:new L3.default(t)}});var Spe=L((hKt,vpe)=>{"use strict";function oAt(t){var e=new t,r=e;function s(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:s,release:a}}vpe.exports=oAt});var bpe=L((gKt,_3)=>{"use strict";var aAt=Spe();function Dpe(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),!(r>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");var s=aAt(lAt),a=null,n=null,c=0,f=null,p={push:R,drain:Tc,saturated:Tc,pause:E,paused:!1,get concurrency(){return r},set concurrency(Ae){if(!(Ae>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");if(r=Ae,!p.paused)for(;a&&c=r||p.paused?n?(n.next=me,n=me):(a=me,n=me,p.saturated()):(c++,e.call(t,me.value,me.worked))}function N(Ae,ce){var me=s.get();me.context=t,me.release=U,me.value=Ae,me.callback=ce||Tc,me.errorHandler=f,c>=r||p.paused?a?(me.next=a,a=me):(a=me,n=me,p.saturated()):(c++,e.call(t,me.value,me.worked))}function U(Ae){Ae&&s.release(Ae);var ce=a;ce&&c<=r?p.paused?c--:(n===a&&(n=null),a=ce.next,ce.next=null,e.call(t,ce.value,ce.worked),n===null&&p.empty()):--c===0&&p.drain()}function W(){a=null,n=null,p.drain=Tc}function te(){a=null,n=null,p.drain(),p.drain=Tc}function ie(Ae){f=Ae}}function Tc(){}function lAt(){this.value=null,this.callback=Tc,this.next=null,this.release=Tc,this.context=null,this.errorHandler=null;var t=this;this.worked=function(r,s){var a=t.callback,n=t.errorHandler,c=t.value;t.value=null,t.callback=Tc,t.errorHandler&&n(r,c),a.call(t.context,r,s),t.release(t)}}function cAt(t,e,r){typeof t=="function"&&(r=e,e=t,t=null);function s(E,C){e.call(this,E).then(function(S){C(null,S)},C)}var a=Dpe(t,s,r),n=a.push,c=a.unshift;return a.push=f,a.unshift=p,a.drained=h,a;function f(E){var C=new Promise(function(S,P){n(E,function(I,R){if(I){P(I);return}S(R)})});return C.catch(Tc),C}function p(E){var C=new Promise(function(S,P){c(E,function(I,R){if(I){P(I);return}S(R)})});return C.catch(Tc),C}function h(){if(a.idle())return new Promise(function(S){S()});var E=a.drain,C=new Promise(function(S){a.drain=function(){E(),S()}});return C}}_3.exports=Dpe;_3.exports.promise=cAt});var pQ=L(Xf=>{"use strict";Object.defineProperty(Xf,"__esModule",{value:!0});Xf.joinPathSegments=Xf.replacePathSegmentSeparator=Xf.isAppliedFilter=Xf.isFatalError=void 0;function uAt(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Xf.isFatalError=uAt;function fAt(t,e){return t===null||t(e)}Xf.isAppliedFilter=fAt;function AAt(t,e){return t.split(/[/\\]/).join(e)}Xf.replacePathSegmentSeparator=AAt;function pAt(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Xf.joinPathSegments=pAt});var j3=L(H3=>{"use strict";Object.defineProperty(H3,"__esModule",{value:!0});var hAt=pQ(),U3=class{constructor(e,r){this._root=e,this._settings=r,this._root=hAt.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};H3.default=U3});var W3=L(G3=>{"use strict";Object.defineProperty(G3,"__esModule",{value:!0});var gAt=Ie("events"),dAt=AQ(),mAt=bpe(),hQ=pQ(),yAt=j3(),q3=class extends yAt.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=dAt.scandir,this._emitter=new gAt.EventEmitter,this._queue=mAt(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let s={directory:e,base:r};this._queue.push(s,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(s,a)=>{if(s!==null){r(s,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!hQ.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let s=e.path;r!==void 0&&(e.path=hQ.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),hQ.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&hQ.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(s,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};G3.default=q3});var Ppe=L(V3=>{"use strict";Object.defineProperty(V3,"__esModule",{value:!0});var EAt=W3(),Y3=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new EAt.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{IAt(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{CAt(e,this._storage)}),this._reader.read()}};V3.default=Y3;function IAt(t,e){t(e)}function CAt(t,e){t(null,e)}});var xpe=L(J3=>{"use strict";Object.defineProperty(J3,"__esModule",{value:!0});var wAt=Ie("stream"),BAt=W3(),K3=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new BAt.default(this._root,this._settings),this._stream=new wAt.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};J3.default=K3});var kpe=L(Z3=>{"use strict";Object.defineProperty(Z3,"__esModule",{value:!0});var vAt=AQ(),gQ=pQ(),SAt=j3(),z3=class extends SAt.default{constructor(){super(...arguments),this._scandir=vAt.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let s=this._scandir(e,this._settings.fsScandirSettings);for(let a of s)this._handleEntry(a,r)}catch(s){this._handleError(s)}}_handleError(e){if(gQ.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let s=e.path;r!==void 0&&(e.path=gQ.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),gQ.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&gQ.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(s,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};Z3.default=z3});var Qpe=L($3=>{"use strict";Object.defineProperty($3,"__esModule",{value:!0});var DAt=kpe(),X3=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new DAt.default(this._root,this._settings)}read(){return this._reader.read()}};$3.default=X3});var Tpe=L(t8=>{"use strict";Object.defineProperty(t8,"__esModule",{value:!0});var bAt=Ie("path"),PAt=AQ(),e8=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,bAt.sep),this.fsScandirSettings=new PAt.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};t8.default=e8});var mQ=L($f=>{"use strict";Object.defineProperty($f,"__esModule",{value:!0});$f.Settings=$f.walkStream=$f.walkSync=$f.walk=void 0;var Rpe=Ppe(),xAt=xpe(),kAt=Qpe(),r8=Tpe();$f.Settings=r8.default;function QAt(t,e,r){if(typeof e=="function"){new Rpe.default(t,dQ()).read(e);return}new Rpe.default(t,dQ(e)).read(r)}$f.walk=QAt;function TAt(t,e){let r=dQ(e);return new kAt.default(t,r).read()}$f.walkSync=TAt;function RAt(t,e){let r=dQ(e);return new xAt.default(t,r).read()}$f.walkStream=RAt;function dQ(t={}){return t instanceof r8.default?t:new r8.default(t)}});var yQ=L(i8=>{"use strict";Object.defineProperty(i8,"__esModule",{value:!0});var FAt=Ie("path"),NAt=zd(),Fpe=Qp(),n8=class{constructor(e){this._settings=e,this._fsStatSettings=new NAt.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return FAt.resolve(this._settings.cwd,e)}_makeEntry(e,r){let s={name:r,path:r,dirent:Fpe.fs.createDirentFromStats(r,e)};return this._settings.stats&&(s.stats=e),s}_isFatalError(e){return!Fpe.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};i8.default=n8});var a8=L(o8=>{"use strict";Object.defineProperty(o8,"__esModule",{value:!0});var OAt=Ie("stream"),LAt=zd(),MAt=mQ(),_At=yQ(),s8=class extends _At.default{constructor(){super(...arguments),this._walkStream=MAt.walkStream,this._stat=LAt.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let s=e.map(this._getFullEntryPath,this),a=new OAt.PassThrough({objectMode:!0});a._write=(n,c,f)=>this._getEntry(s[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===s.length-1&&a.end(),f()}).catch(f);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(s.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,s)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):s(a))})}};o8.default=s8});var Npe=L(c8=>{"use strict";Object.defineProperty(c8,"__esModule",{value:!0});var UAt=mQ(),HAt=yQ(),jAt=a8(),l8=class extends HAt.default{constructor(){super(...arguments),this._walkAsync=UAt.walk,this._readerStream=new jAt.default(this._settings)}dynamic(e,r){return new Promise((s,a)=>{this._walkAsync(e,r,(n,c)=>{n===null?s(c):a(n)})})}async static(e,r){let s=[],a=this._readerStream.static(e,r);return new Promise((n,c)=>{a.once("error",c),a.on("data",f=>s.push(f)),a.once("end",()=>n(s))})}};c8.default=l8});var Ope=L(f8=>{"use strict";Object.defineProperty(f8,"__esModule",{value:!0});var qB=Qp(),u8=class{constructor(e,r,s){this._patterns=e,this._settings=r,this._micromatchOptions=s,this._storage=[],this._fillStorage()}_fillStorage(){for(let e of this._patterns){let r=this._getPatternSegments(e),s=this._splitSegmentsIntoSections(r);this._storage.push({complete:s.length<=1,pattern:e,segments:r,sections:s})}}_getPatternSegments(e){return qB.pattern.getPatternParts(e,this._micromatchOptions).map(s=>qB.pattern.isDynamicPattern(s,this._settings)?{dynamic:!0,pattern:s,patternRe:qB.pattern.makeRe(s,this._micromatchOptions)}:{dynamic:!1,pattern:s})}_splitSegmentsIntoSections(e){return qB.array.splitWhen(e,r=>r.dynamic&&qB.pattern.hasGlobStar(r.pattern))}};f8.default=u8});var Lpe=L(p8=>{"use strict";Object.defineProperty(p8,"__esModule",{value:!0});var qAt=Ope(),A8=class extends qAt.default{match(e){let r=e.split("/"),s=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>s);for(let n of a){let c=n.sections[0];if(!n.complete&&s>c.length||r.every((p,h)=>{let E=n.segments[h];return!!(E.dynamic&&E.patternRe.test(p)||!E.dynamic&&E.pattern===p)}))return!0}return!1}};p8.default=A8});var Mpe=L(g8=>{"use strict";Object.defineProperty(g8,"__esModule",{value:!0});var EQ=Qp(),GAt=Lpe(),h8=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,s){let a=this._getMatcher(r),n=this._getNegativePatternsRe(s);return c=>this._filter(e,c,a,n)}_getMatcher(e){return new GAt.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(EQ.pattern.isAffectDepthOfReadingPattern);return EQ.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,s,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=EQ.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,s)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let s=r.split("/").length;if(e==="")return s;let a=e.split("/").length;return s-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!EQ.pattern.matchAny(e,r)}};g8.default=h8});var _pe=L(m8=>{"use strict";Object.defineProperty(m8,"__esModule",{value:!0});var Zd=Qp(),d8=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let s=Zd.pattern.convertPatternsToRe(e,this._micromatchOptions),a=Zd.pattern.convertPatternsToRe(r,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0}));return n=>this._filter(n,s,a)}_filter(e,r,s){let a=Zd.path.removeLeadingDotSegment(e.path);if(this._settings.unique&&this._isDuplicateEntry(a)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(a,s))return!1;let n=e.dirent.isDirectory(),c=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(a,s,n);return this._settings.unique&&c&&this._createIndexRecord(a),c}_isDuplicateEntry(e){return this.index.has(e)}_createIndexRecord(e){this.index.set(e,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let s=Zd.path.makeAbsolute(this._settings.cwd,e);return Zd.pattern.matchAny(s,r)}_isMatchToPatterns(e,r,s){let a=Zd.pattern.matchAny(e,r);return!a&&s?Zd.pattern.matchAny(e+"/",r):a}};m8.default=d8});var Upe=L(E8=>{"use strict";Object.defineProperty(E8,"__esModule",{value:!0});var WAt=Qp(),y8=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return WAt.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};E8.default=y8});var jpe=L(C8=>{"use strict";Object.defineProperty(C8,"__esModule",{value:!0});var Hpe=Qp(),I8=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Hpe.path.makeAbsolute(this._settings.cwd,r),r=Hpe.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};C8.default=I8});var IQ=L(B8=>{"use strict";Object.defineProperty(B8,"__esModule",{value:!0});var YAt=Ie("path"),VAt=Mpe(),KAt=_pe(),JAt=Upe(),zAt=jpe(),w8=class{constructor(e){this._settings=e,this.errorFilter=new JAt.default(this._settings),this.entryFilter=new KAt.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new VAt.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new zAt.default(this._settings)}_getRootDirectory(e){return YAt.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};B8.default=w8});var qpe=L(S8=>{"use strict";Object.defineProperty(S8,"__esModule",{value:!0});var ZAt=Npe(),XAt=IQ(),v8=class extends XAt.default{constructor(){super(...arguments),this._reader=new ZAt.default(this._settings)}async read(e){let r=this._getRootDirectory(e),s=this._getReaderOptions(e);return(await this.api(r,e,s)).map(n=>s.transform(n))}api(e,r,s){return r.dynamic?this._reader.dynamic(e,s):this._reader.static(r.patterns,s)}};S8.default=v8});var Gpe=L(b8=>{"use strict";Object.defineProperty(b8,"__esModule",{value:!0});var $At=Ie("stream"),ept=a8(),tpt=IQ(),D8=class extends tpt.default{constructor(){super(...arguments),this._reader=new ept.default(this._settings)}read(e){let r=this._getRootDirectory(e),s=this._getReaderOptions(e),a=this.api(r,e,s),n=new $At.Readable({objectMode:!0,read:()=>{}});return a.once("error",c=>n.emit("error",c)).on("data",c=>n.emit("data",s.transform(c))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,s){return r.dynamic?this._reader.dynamic(e,s):this._reader.static(r.patterns,s)}};b8.default=D8});var Wpe=L(x8=>{"use strict";Object.defineProperty(x8,"__esModule",{value:!0});var rpt=zd(),npt=mQ(),ipt=yQ(),P8=class extends ipt.default{constructor(){super(...arguments),this._walkSync=npt.walkSync,this._statSync=rpt.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let s=[];for(let a of e){let n=this._getFullEntryPath(a),c=this._getEntry(n,a,r);c===null||!r.entryFilter(c)||s.push(c)}return s}_getEntry(e,r,s){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(s.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};x8.default=P8});var Ype=L(Q8=>{"use strict";Object.defineProperty(Q8,"__esModule",{value:!0});var spt=Wpe(),opt=IQ(),k8=class extends opt.default{constructor(){super(...arguments),this._reader=new spt.default(this._settings)}read(e){let r=this._getRootDirectory(e),s=this._getReaderOptions(e);return this.api(r,e,s).map(s.transform)}api(e,r,s){return r.dynamic?this._reader.dynamic(e,s):this._reader.static(r.patterns,s)}};Q8.default=k8});var Vpe=L($E=>{"use strict";Object.defineProperty($E,"__esModule",{value:!0});$E.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var XE=Ie("fs"),apt=Ie("os"),lpt=Math.max(apt.cpus().length,1);$E.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:XE.lstat,lstatSync:XE.lstatSync,stat:XE.stat,statSync:XE.statSync,readdir:XE.readdir,readdirSync:XE.readdirSync};var T8=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,lpt),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0),this.ignore=[].concat(this.ignore)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},$E.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};$E.default=T8});var CQ=L((UKt,Jpe)=>{"use strict";var Kpe=JAe(),cpt=qpe(),upt=Gpe(),fpt=Ype(),R8=Vpe(),Rc=Qp();async function F8(t,e){qu(t);let r=N8(t,cpt.default,e),s=await Promise.all(r);return Rc.array.flatten(s)}(function(t){t.glob=t,t.globSync=e,t.globStream=r,t.async=t;function e(h,E){qu(h);let C=N8(h,fpt.default,E);return Rc.array.flatten(C)}t.sync=e;function r(h,E){qu(h);let C=N8(h,upt.default,E);return Rc.stream.merge(C)}t.stream=r;function s(h,E){qu(h);let C=[].concat(h),S=new R8.default(E);return Kpe.generate(C,S)}t.generateTasks=s;function a(h,E){qu(h);let C=new R8.default(E);return Rc.pattern.isDynamicPattern(h,C)}t.isDynamicPattern=a;function n(h){return qu(h),Rc.path.escape(h)}t.escapePath=n;function c(h){return qu(h),Rc.path.convertPathToPattern(h)}t.convertPathToPattern=c;let f;(function(h){function E(S){return qu(S),Rc.path.escapePosixPath(S)}h.escapePath=E;function C(S){return qu(S),Rc.path.convertPosixPathToPattern(S)}h.convertPathToPattern=C})(f=t.posix||(t.posix={}));let p;(function(h){function E(S){return qu(S),Rc.path.escapeWindowsPath(S)}h.escapePath=E;function C(S){return qu(S),Rc.path.convertWindowsPathToPattern(S)}h.convertPathToPattern=C})(p=t.win32||(t.win32={}))})(F8||(F8={}));function N8(t,e,r){let s=[].concat(t),a=new R8.default(r),n=Kpe.generate(s,a),c=new e(a);return n.map(c.read,c)}function qu(t){if(![].concat(t).every(s=>Rc.string.isString(s)&&!Rc.string.isEmpty(s)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}Jpe.exports=F8});var Nn={};Vt(Nn,{checksumFile:()=>BQ,checksumPattern:()=>vQ,makeHash:()=>fs});function fs(...t){let e=(0,wQ.createHash)("sha512"),r="";for(let s of t)typeof s=="string"?r+=s:s&&(r&&(e.update(r),r=""),e.update(s));return r&&e.update(r),e.digest("hex")}async function BQ(t,{baseFs:e,algorithm:r}={baseFs:le,algorithm:"sha512"}){let s=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),c=(0,wQ.createHash)(r),f=0;for(;(f=await e.readPromise(s,n,0,65536))!==0;)c.update(f===65536?n:n.slice(0,f));return c.digest("hex")}finally{await e.closePromise(s)}}async function vQ(t,{cwd:e}){let s=(await(0,O8.default)(t,{cwd:ue.fromPortablePath(e),onlyDirectories:!0})).map(f=>`${f}/**/*`),a=await(0,O8.default)([t,...s],{cwd:ue.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async f=>{let p=[Buffer.from(f)],h=K.join(e,ue.toPortablePath(f)),E=await le.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await le.readlinkPromise(h))):E.isFile()&&p.push(await le.readFilePromise(h)),p.join("\0")})),c=(0,wQ.createHash)("sha512");for(let f of n)c.update(f);return c.digest("hex")}var wQ,O8,E0=Ct(()=>{bt();wQ=Ie("crypto"),O8=et(CQ())});var q={};Vt(q,{allPeerRequests:()=>XB,areDescriptorsEqual:()=>ehe,areIdentsEqual:()=>VB,areLocatorsEqual:()=>KB,areVirtualPackagesEquivalent:()=>Ipt,bindDescriptor:()=>ypt,bindLocator:()=>Ept,convertDescriptorToLocator:()=>SQ,convertLocatorToDescriptor:()=>M8,convertPackageToLocator:()=>gpt,convertToIdent:()=>hpt,convertToManifestRange:()=>kpt,copyPackage:()=>WB,devirtualizeDescriptor:()=>YB,devirtualizeLocator:()=>tI,ensureDevirtualizedDescriptor:()=>dpt,ensureDevirtualizedLocator:()=>mpt,getIdentVendorPath:()=>j8,isPackageCompatible:()=>kQ,isVirtualDescriptor:()=>Tp,isVirtualLocator:()=>Gu,makeDescriptor:()=>On,makeIdent:()=>ba,makeLocator:()=>Vs,makeRange:()=>PQ,parseDescriptor:()=>I0,parseFileStyleRange:()=>Ppt,parseIdent:()=>Da,parseLocator:()=>Rp,parseRange:()=>Xd,prettyDependent:()=>h3,prettyDescriptor:()=>ni,prettyIdent:()=>es,prettyLocator:()=>Yr,prettyLocatorNoColors:()=>p3,prettyRange:()=>nI,prettyReference:()=>zB,prettyResolution:()=>jB,prettyWorkspace:()=>ZB,renamePackage:()=>_8,slugifyIdent:()=>L8,slugifyLocator:()=>rI,sortDescriptors:()=>iI,stringifyDescriptor:()=>ll,stringifyIdent:()=>cn,stringifyLocator:()=>cl,tryParseDescriptor:()=>JB,tryParseIdent:()=>the,tryParseLocator:()=>bQ,tryParseRange:()=>bpt,unwrapIdentFromScope:()=>Tpt,virtualizeDescriptor:()=>U8,virtualizePackage:()=>H8,wrapIdentIntoScope:()=>Qpt});function ba(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:fs(t,e),scope:t,name:e}}function On(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:fs(t.identHash,e),range:e}}function Vs(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:fs(t.identHash,e),reference:e}}function hpt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function SQ(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function M8(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function gpt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function _8(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function WB(t){return _8(t,t)}function U8(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return On(t,`virtual:${e}#${t.range}`)}function H8(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return _8(t,Vs(t,`virtual:${e}#${t.reference}`))}function Tp(t){return t.range.startsWith(GB)}function Gu(t){return t.reference.startsWith(GB)}function YB(t){if(!Tp(t))throw new Error("Not a virtual descriptor");return On(t,t.range.replace(DQ,""))}function tI(t){if(!Gu(t))throw new Error("Not a virtual descriptor");return Vs(t,t.reference.replace(DQ,""))}function dpt(t){return Tp(t)?On(t,t.range.replace(DQ,"")):t}function mpt(t){return Gu(t)?Vs(t,t.reference.replace(DQ,"")):t}function ypt(t,e){return t.range.includes("::")?t:On(t,`${t.range}::${eI.default.stringify(e)}`)}function Ept(t,e){return t.reference.includes("::")?t:Vs(t,`${t.reference}::${eI.default.stringify(e)}`)}function VB(t,e){return t.identHash===e.identHash}function ehe(t,e){return t.descriptorHash===e.descriptorHash}function KB(t,e){return t.locatorHash===e.locatorHash}function Ipt(t,e){if(!Gu(t))throw new Error("Invalid package type");if(!Gu(e))throw new Error("Invalid package type");if(!VB(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let s=e.dependencies.get(r.identHash);if(!s||!ehe(r,s))return!1}return!0}function Da(t){let e=the(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function the(t){let e=t.match(Cpt);if(!e)return null;let[,r,s]=e;return ba(typeof r<"u"?r:null,s)}function I0(t,e=!1){let r=JB(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function JB(t,e=!1){let r=e?t.match(wpt):t.match(Bpt);if(!r)return null;let[,s,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let c=typeof s<"u"?s:null,f=typeof n<"u"?n:"unknown";return On(ba(c,a),f)}function Rp(t,e=!1){let r=bQ(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function bQ(t,e=!1){let r=e?t.match(vpt):t.match(Spt);if(!r)return null;let[,s,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let c=typeof s<"u"?s:null,f=typeof n<"u"?n:"unknown";return Vs(ba(c,a),f)}function Xd(t,e){let r=t.match(Dpt);if(r===null)throw new Error(`Invalid range (${t})`);let s=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&s!==e.requireProtocol)throw new Error(`Invalid protocol (${s})`);if(e?.requireProtocol&&s===null)throw new Error(`Missing protocol (${s})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),c=e?.parseSelector?eI.default.parse(n):n,f=typeof r[4]<"u"?eI.default.parse(r[4]):null;return{protocol:s,source:a,selector:c,params:f}}function bpt(t,e){try{return Xd(t,e)}catch{return null}}function Ppt(t,{protocol:e}){let{selector:r,params:s}=Xd(t,{requireProtocol:e,requireBindings:!0});if(typeof s.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:Rp(s.locator,!0),path:r}}function zpe(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function xpt(t){return t===null?!1:Object.entries(t).length>0}function PQ({protocol:t,source:e,selector:r,params:s}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${zpe(e)}#`),a+=zpe(r),xpt(s)&&(a+=`::${eI.default.stringify(s)}`),a}function kpt(t){let{params:e,protocol:r,source:s,selector:a}=Xd(t);for(let n in e)n.startsWith("__")&&delete e[n];return PQ({protocol:r,source:s,params:e,selector:a})}function cn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function Qpt(t,e){return t.scope?ba(e,`${t.scope}__${t.name}`):ba(e,t.name)}function Tpt(t,e){if(t.scope!==e)return t;let r=t.name.indexOf("__");if(r===-1)return ba(null,t.name);let s=t.name.slice(0,r),a=t.name.slice(r+2);return ba(s,a)}function ll(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function cl(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function L8(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function rI(t){let{protocol:e,selector:r}=Xd(t.reference),s=e!==null?e.replace(Rpt,""):"exotic",a=Zpe.default.valid(r),n=a!==null?`${s}-${a}`:`${s}`,c=10;return t.scope?`${L8(t)}-${n}-${t.locatorHash.slice(0,c)}`:`${L8(t)}-${n}-${t.locatorHash.slice(0,c)}`}function es(t,e){return e.scope?`${Ut(t,`@${e.scope}/`,pt.SCOPE)}${Ut(t,e.name,pt.NAME)}`:`${Ut(t,e.name,pt.NAME)}`}function xQ(t){if(t.startsWith(GB)){let e=xQ(t.substring(t.indexOf("#")+1)),r=t.substring(GB.length,GB.length+Apt);return`${e} [${r}]`}else return t.replace(Fpt,"?[...]")}function nI(t,e){return`${Ut(t,xQ(e),pt.RANGE)}`}function ni(t,e){return`${es(t,e)}${Ut(t,"@",pt.RANGE)}${nI(t,e.range)}`}function zB(t,e){return`${Ut(t,xQ(e),pt.REFERENCE)}`}function Yr(t,e){return`${es(t,e)}${Ut(t,"@",pt.REFERENCE)}${zB(t,e.reference)}`}function p3(t){return`${cn(t)}@${xQ(t.reference)}`}function iI(t){return Ys(t,[e=>cn(e),e=>e.range])}function ZB(t,e){return es(t,e.anchoredLocator)}function jB(t,e,r){let s=Tp(e)?YB(e):e;return r===null?`${ni(t,s)} \u2192 ${A3(t).Cross}`:s.identHash===r.identHash?`${ni(t,s)} \u2192 ${zB(t,r.reference)}`:`${ni(t,s)} \u2192 ${Yr(t,r)}`}function h3(t,e,r){return r===null?`${Yr(t,e)}`:`${Yr(t,e)} (via ${nI(t,r.range)})`}function j8(t){return`node_modules/${cn(t)}`}function kQ(t,e){return t.conditions?ppt(t.conditions,r=>{let[,s,a]=r.match($pe),n=e[s];return n?n.includes(a):!0}):!0}function XB(t){let e=new Set;if("children"in t)e.add(t);else for(let r of t.requests.values())e.add(r);for(let r of e)for(let s of r.children.values())e.add(s);return e}var eI,Zpe,Xpe,GB,Apt,$pe,ppt,DQ,Cpt,wpt,Bpt,vpt,Spt,Dpt,Rpt,Fpt,Yo=Ct(()=>{eI=et(Ie("querystring")),Zpe=et(Ai()),Xpe=et(Wse());Qc();E0();kc();Yo();GB="virtual:",Apt=5,$pe=/(os|cpu|libc)=([a-z0-9_-]+)/,ppt=(0,Xpe.makeParser)($pe);DQ=/^[^#]*#/;Cpt=/^(?:@([^/]+?)\/)?([^@/]+)$/;wpt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Bpt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;vpt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Spt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Dpt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;Rpt=/:$/;Fpt=/\?.*/});var rhe,nhe=Ct(()=>{Yo();rhe={hooks:{reduceDependency:(t,e,r,s,{resolver:a,resolveOptions:n})=>{for(let{pattern:c,reference:f}of e.topLevelWorkspace.manifest.resolutions){if(c.from&&(c.from.fullName!==cn(r)||e.configuration.normalizeLocator(Vs(Da(c.from.fullName),c.from.description??r.reference)).locatorHash!==r.locatorHash)||c.descriptor.fullName!==cn(t)||e.configuration.normalizeDependency(On(Rp(c.descriptor.fullName),c.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(On(t,f)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let s=ZB(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${s}: ${n}`),reportError:(a,n)=>e.reportError(a,`${s}: ${n}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let s of r.errors)e.reportWarning(57,s.message)}}}});var Ei,$d=Ct(()=>{Ei=class t{static{this.protocol="workspace:"}supportsDescriptor(e,r){return!!(e.range.startsWith(t.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(t.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){return[s.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let s=r.project.getWorkspaceByCwd(e.reference.slice(t.protocol.length));return{...e,version:s.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...s.manifest.dependencies,...s.manifest.devDependencies])),peerDependencies:new Map([...s.manifest.peerDependencies]),dependenciesMeta:s.manifest.dependenciesMeta,peerDependenciesMeta:s.manifest.peerDependenciesMeta,bin:s.manifest.bin}}}});var Or={};Vt(Or,{SemVer:()=>lhe.SemVer,clean:()=>Opt,getComparator:()=>ohe,mergeComparators:()=>q8,satisfiesWithPrereleases:()=>eA,simplifyRanges:()=>G8,stringifyComparator:()=>ahe,validRange:()=>ul});function eA(t,e,r=!1){if(!t)return!1;let s=`${e}${r}`,a=ihe.get(s);if(typeof a>"u")try{a=new Fp.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{ihe.set(s,a||null)}else if(a===null)return!1;let n;try{n=new Fp.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(c=>{for(let f of c)f.semver.prerelease&&(f.semver.prerelease=[]);return c.every(f=>f.test(n))}))}function ul(t){if(t.indexOf(":")!==-1)return null;let e=she.get(t);if(typeof e<"u")return e;try{e=new Fp.default.Range(t)}catch{e=null}return she.set(t,e),e}function Opt(t){let e=Npt.exec(t);return e?e[1]:null}function ohe(t){if(t.semver===Fp.default.Comparator.ANY)return{gt:null,lt:null};switch(t.operator){case"":return{gt:[">=",t.semver],lt:["<=",t.semver]};case">":case">=":return{gt:[t.operator,t.semver],lt:null};case"<":case"<=":return{gt:null,lt:[t.operator,t.semver]};default:throw new Error(`Assertion failed: Unexpected comparator operator (${t.operator})`)}}function q8(t){if(t.length===0)return null;let e=null,r=null;for(let s of t){if(s.gt){let a=e!==null?Fp.default.compare(s.gt[1],e[1]):null;(a===null||a>0||a===0&&s.gt[0]===">")&&(e=s.gt)}if(s.lt){let a=r!==null?Fp.default.compare(s.lt[1],r[1]):null;(a===null||a<0||a===0&&s.lt[0]==="<")&&(r=s.lt)}}if(e&&r){let s=Fp.default.compare(e[1],r[1]);if(s===0&&(e[0]===">"||r[0]==="<")||s>0)return null}return{gt:e,lt:r}}function ahe(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1].version===t.lt[1].version)return t.gt[1].version;if(t.gt[0]===">="&&t.lt[0]==="<"){if(t.lt[1].version===`${t.gt[1].major+1}.0.0-0`)return`^${t.gt[1].version}`;if(t.lt[1].version===`${t.gt[1].major}.${t.gt[1].minor+1}.0-0`)return`~${t.gt[1].version}`}}let e=[];return t.gt&&e.push(t.gt[0]+t.gt[1].version),t.lt&&e.push(t.lt[0]+t.lt[1].version),e.length?e.join(" "):"*"}function G8(t){let e=t.map(Lpt).map(s=>ul(s).set.map(a=>a.map(n=>ohe(n)))),r=e.shift().map(s=>q8(s)).filter(s=>s!==null);for(let s of e){let a=[];for(let n of r)for(let c of s){let f=q8([n,...c]);f!==null&&a.push(f)}r=a}return r.length===0?null:r.map(s=>ahe(s)).join(" || ")}function Lpt(t){let e=t.split("||");if(e.length>1){let r=new Set;for(let s of e)e.some(a=>a!==s&&Fp.default.subset(s,a))||r.add(s);if(r.size{Fp=et(Ai()),lhe=et(Ai()),ihe=new Map;she=new Map;Npt=/^(?:[\sv=]*?)((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\s*)$/});function che(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function uhe(t){return t.charCodeAt(0)===65279?t.slice(1):t}function Pa(t){return t.replace(/\\/g,"/")}function QQ(t,{yamlCompatibilityMode:e}){return e?s3(t):typeof t>"u"||typeof t=="boolean"?t:null}function fhe(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let s=r%2===0?"":"!",a=e.slice(r);return`${s}${t}=${a}`}function W8(t,e){return e.length===1?fhe(t,e[0]):`(${e.map(r=>fhe(t,r)).join(" | ")})`}var Ahe,Ht,sI=Ct(()=>{bt();Bc();Ahe=et(Ai());$d();kc();Np();Yo();Ht=class t{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static{this.fileName="package.json"}static{this.allDependencies=["dependencies","devDependencies","peerDependencies"]}static{this.hardDependencies=["dependencies","devDependencies"]}static async tryFind(e,{baseFs:r=new Yn}={}){let s=K.join(e,"package.json");try{return await t.fromFile(s,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let s=await t.tryFind(e,{baseFs:r});if(s===null)throw new Error("Manifest not found");return s}static async fromFile(e,{baseFs:r=new Yn}={}){let s=new t;return await s.loadFile(e,{baseFs:r}),s}static fromText(e){let r=new t;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(uhe(e)||"{}")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(r),this.indent=che(e)}async loadFile(e,{baseFs:r=new Yn}){let s=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(uhe(s)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=che(s)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let s=[];if(this.name=null,typeof e.name=="string")try{this.name=Da(e.name)}catch{s.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let n=[];this.os=n;for(let c of e.os)typeof c!="string"?s.push(new Error("Parsing failed for the 'os' field")):n.push(c)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let c of e.cpu)typeof c!="string"?s.push(new Error("Parsing failed for the 'cpu' field")):n.push(c)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let c of e.libc)typeof c!="string"?s.push(new Error("Parsing failed for the 'libc' field")):n.push(c)}else this.libc=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=Pa(e.main):this.main=null,typeof e.module=="string"?this.module=Pa(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=Pa(e.browser);else{this.browser=new Map;for(let[n,c]of Object.entries(e.browser))this.browser.set(Pa(n),typeof c=="string"?Pa(c):c)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?s.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,Pa(e.bin)):s.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,c]of Object.entries(e.bin)){if(typeof c!="string"||c.trim()===""){s.push(new Error(`Invalid bin definition for '${n}'`));continue}let f=Da(n);this.bin.set(f.name,Pa(c))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,c]of Object.entries(e.scripts)){if(typeof c!="string"){s.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,c)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,c]of Object.entries(e.dependencies)){if(typeof c!="string"){s.push(new Error(`Invalid dependency range for '${n}'`));continue}let f;try{f=Da(n)}catch{s.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=On(f,c);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,c]of Object.entries(e.devDependencies)){if(typeof c!="string"){s.push(new Error(`Invalid dependency range for '${n}'`));continue}let f;try{f=Da(n)}catch{s.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=On(f,c);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,c]of Object.entries(e.peerDependencies)){let f;try{f=Da(n)}catch{s.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof c!="string"||!c.startsWith(Ei.protocol)&&!ul(c))&&(s.push(new Error(`Invalid dependency range for '${n}'`)),c="*");let p=On(f,c);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&s.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let n of a){if(typeof n!="string"){s.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,c]of Object.entries(e.dependenciesMeta)){if(typeof c!="object"||c===null){s.push(new Error(`Invalid meta field for '${n}`));continue}let f=I0(n),p=this.ensureDependencyMeta(f),h=QQ(c.built,{yamlCompatibilityMode:r});if(h===null){s.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=QQ(c.optional,{yamlCompatibilityMode:r});if(E===null){s.push(new Error(`Invalid optional meta field for '${n}'`));continue}let C=QQ(c.unplugged,{yamlCompatibilityMode:r});if(C===null){s.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:C})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,c]of Object.entries(e.peerDependenciesMeta)){if(typeof c!="object"||c===null){s.push(new Error(`Invalid meta field for '${n}'`));continue}let f=I0(n),p=this.ensurePeerDependencyMeta(f),h=QQ(c.optional,{yamlCompatibilityMode:r});if(h===null){s.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,c]of Object.entries(e.resolutions)){if(typeof c!="string"){s.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:Cx(n),reference:c})}catch(f){s.push(f);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){s.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=Pa(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=Pa(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=Pa(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,c]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(Pa(n),typeof c=="string"?Pa(c):c)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.provenance=="boolean"&&(this.publishConfig.provenance=e.publishConfig.provenance),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,Pa(e.publishConfig.bin)]]):s.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[n,c]of Object.entries(e.publishConfig.bin)){if(typeof c!="string"){s.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,Pa(c))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){s.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add(Pa(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:s.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:s.push(new Error("Invalid selfReferences definition, must be a boolean value")):s.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,c]of Object.entries(e.optionalDependencies)){if(typeof c!="string"){s.push(new Error(`Invalid dependency range for '${n}'`));continue}let f;try{f=Da(n)}catch{s.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=On(f,c);this.dependencies.set(p.identHash,p);let h=On(f,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=s}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(W8("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(W8("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(W8("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!Ahe.default.valid(e.range))throw new Error(`Invalid meta field range for '${ll(e)}'`);let r=cn(e),s=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(s);return n||a.set(s,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${ll(e)}'`);let r=cn(e),s=this.peerDependenciesMeta.get(r);return s||this.peerDependenciesMeta.set(r,s={}),s}setRawField(e,r,{after:s=[]}={}){let a=new Set(s.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,c=this.raw={},f=!1;for(let p of Object.keys(n))c[p]=n[p],f||(a.delete(p),a.size===0&&(c[e]=r,f=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=cn(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(c=>({[c]:n.get(c)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let s=[],a=[];for(let n of this.dependencies.values()){let c=this.dependenciesMeta.get(cn(n)),f=!1;if(r&&c){let p=c.get(null);p&&p.optional&&(f=!0)}f?a.push(n):s.push(n)}s.length>0?e.dependencies=Object.assign({},...iI(s).map(n=>({[cn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...iI(a).map(n=>({[cn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...iI(this.devDependencies.values()).map(n=>({[cn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...iI(this.peerDependencies.values()).map(n=>({[cn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,c]of Ys(this.dependenciesMeta.entries(),([f,p])=>f))for(let[f,p]of Ys(c.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=f!==null?ll(On(Da(n),f)):n,E={...p};r&&f===null&&delete E.optional,Object.keys(E).length!==0&&(e.dependenciesMeta[h]=E)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...Ys(this.peerDependenciesMeta.entries(),([n,c])=>n).map(([n,c])=>({[n]:c}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:c})=>({[wx(n)]:c}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,c]of this.scripts.entries())e.scripts[n]=c}else delete e.scripts;return e}}});var hhe=L((tJt,phe)=>{var Mpt=Pc(),_pt=function(){return Mpt.Date.now()};phe.exports=_pt});var dhe=L((rJt,ghe)=>{var Upt=/\s/;function Hpt(t){for(var e=t.length;e--&&Upt.test(t.charAt(e)););return e}ghe.exports=Hpt});var yhe=L((nJt,mhe)=>{var jpt=dhe(),qpt=/^\s+/;function Gpt(t){return t&&t.slice(0,jpt(t)+1).replace(qpt,"")}mhe.exports=Gpt});var oI=L((iJt,Ehe)=>{var Wpt=Wd(),Ypt=zf(),Vpt="[object Symbol]";function Kpt(t){return typeof t=="symbol"||Ypt(t)&&Wpt(t)==Vpt}Ehe.exports=Kpt});var Bhe=L((sJt,whe)=>{var Jpt=yhe(),Ihe=Wl(),zpt=oI(),Che=NaN,Zpt=/^[-+]0x[0-9a-f]+$/i,Xpt=/^0b[01]+$/i,$pt=/^0o[0-7]+$/i,eht=parseInt;function tht(t){if(typeof t=="number")return t;if(zpt(t))return Che;if(Ihe(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Ihe(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=Jpt(t);var r=Xpt.test(t);return r||$pt.test(t)?eht(t.slice(2),r?2:8):Zpt.test(t)?Che:+t}whe.exports=tht});var Dhe=L((oJt,She)=>{var rht=Wl(),Y8=hhe(),vhe=Bhe(),nht="Expected a function",iht=Math.max,sht=Math.min;function oht(t,e,r){var s,a,n,c,f,p,h=0,E=!1,C=!1,S=!0;if(typeof t!="function")throw new TypeError(nht);e=vhe(e)||0,rht(r)&&(E=!!r.leading,C="maxWait"in r,n=C?iht(vhe(r.maxWait)||0,e):n,S="trailing"in r?!!r.trailing:S);function P(ce){var me=s,pe=a;return s=a=void 0,h=ce,c=t.apply(pe,me),c}function I(ce){return h=ce,f=setTimeout(U,e),E?P(ce):c}function R(ce){var me=ce-p,pe=ce-h,Be=e-me;return C?sht(Be,n-pe):Be}function N(ce){var me=ce-p,pe=ce-h;return p===void 0||me>=e||me<0||C&&pe>=n}function U(){var ce=Y8();if(N(ce))return W(ce);f=setTimeout(U,R(ce))}function W(ce){return f=void 0,S&&s?P(ce):(s=a=void 0,c)}function te(){f!==void 0&&clearTimeout(f),h=0,s=p=a=f=void 0}function ie(){return f===void 0?c:W(Y8())}function Ae(){var ce=Y8(),me=N(ce);if(s=arguments,a=this,p=ce,me){if(f===void 0)return I(p);if(C)return clearTimeout(f),f=setTimeout(U,e),P(p)}return f===void 0&&(f=setTimeout(U,e)),c}return Ae.cancel=te,Ae.flush=ie,Ae}She.exports=oht});var V8=L((aJt,bhe)=>{var aht=Dhe(),lht=Wl(),cht="Expected a function";function uht(t,e,r){var s=!0,a=!0;if(typeof t!="function")throw new TypeError(cht);return lht(r)&&(s="leading"in r?!!r.leading:s,a="trailing"in r?!!r.trailing:a),aht(t,e,{leading:s,maxWait:e,trailing:a})}bhe.exports=uht});function Aht(t){return typeof t.reportCode<"u"}var Phe,xhe,khe,fht,Yt,ho,Fc=Ct(()=>{Phe=et(V8()),xhe=Ie("stream"),khe=Ie("string_decoder"),fht=15,Yt=class extends Error{constructor(r,s,a){super(s);this.reportExtra=a;this.reportCode=r}};ho=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,s,a=new Promise(p=>{s=p}),n=p=>{let h=s;a=new Promise(E=>{s=E}),r=p,h()},c=(p=0)=>{n(r+1)},f=async function*(){for(;r{r=c}),a=(0,Phe.default)(c=>{let f=r;s=new Promise(p=>{r=p}),e=c,f()},1e3/fht),n=async function*(){for(;;)await s,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let s=this.reportProgress(e);try{return await r(e)}finally{s.stop()}}startProgressSync(e,r){let s=this.reportProgress(e);try{return r(e)}finally{s.stop()}}reportInfoOnce(e,r,s){let a=s&&s.key?s.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),s?.reportExtra?.(this))}reportWarningOnce(e,r,s){let a=s&&s.key?s.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),s?.reportExtra?.(this))}reportErrorOnce(e,r,s){let a=s&&s.key?s.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),s?.reportExtra?.(this))}reportExceptionOnce(e){Aht(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let r=new xhe.PassThrough,s=new khe.StringDecoder,a="";return r.on("data",n=>{let c=s.write(n),f;do if(f=c.indexOf(` -`),f!==-1){let p=a+c.substring(0,f);c=c.substring(f+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(f!==-1);a+=c}),r.on("end",()=>{let n=s.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var aI,K8=Ct(()=>{Fc();Yo();aI=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let s=this.fetchers.find(a=>a.supports(e,r));return s||null}getFetcher(e,r){let s=this.fetchers.find(a=>a.supports(e,r));if(!s)throw new Yt(11,`${Yr(r.project.configuration,e)} isn't supported by any available fetcher`);return s}}});var em,J8=Ct(()=>{Yo();em=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,s){return this.getResolverByDescriptor(e,s).bindDescriptor(e,r,s)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,s){return await this.getResolverByDescriptor(e,s).getCandidates(e,r,s)}async getSatisfying(e,r,s,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,s,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let s=this.resolvers.find(a=>a.supportsDescriptor(e,r));return s||null}getResolverByDescriptor(e,r){let s=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!s)throw new Error(`${ni(r.project.configuration,e)} isn't supported by any available resolver`);return s}tryResolverByLocator(e,r){let s=this.resolvers.find(a=>a.supportsLocator(e,r));return s||null}getResolverByLocator(e,r){let s=this.resolvers.find(a=>a.supportsLocator(e,r));if(!s)throw new Error(`${Yr(r.project.configuration,e)} isn't supported by any available resolver`);return s}}});var lI,z8=Ct(()=>{bt();Yo();lI=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let s=e.reference.indexOf("#");if(s===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(s+1),n=Vs(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let s=e.reference.indexOf("#");if(s===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(s+1),n=Vs(e,a),c=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,c,r)}getLocatorFilename(e){return rI(e)}async ensureVirtualLink(e,r,s){let a=r.packageFs.getRealPath(),n=s.project.configuration.get("virtualFolder"),c=this.getLocatorFilename(e),f=Ao.makeVirtualPath(n,c,a),p=new Hf(f,{baseFs:r.packageFs,pathUtils:K});return{...r,packageFs:p}}}});var TQ,Qhe=Ct(()=>{TQ=class t{static{this.protocol="virtual:"}static isVirtualDescriptor(e){return!!e.range.startsWith(t.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(t.protocol)}supportsDescriptor(e,r){return t.isVirtualDescriptor(e)}supportsLocator(e,r){return t.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,s){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,s,a){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}}});var cI,Z8=Ct(()=>{bt();$d();cI=class{supports(e){return!!e.reference.startsWith(Ei.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let s=this.getWorkspace(e,r).cwd;return{packageFs:new Sn(s),prefixPath:vt.dot,localPath:s}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Ei.protocol.length))}}});function $B(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function The(t){return typeof t>"u"?3:$B(t)?0:Array.isArray(t)?1:2}function eH(t,e){return Object.hasOwn(t,e)}function hht(t){return $B(t)&&eH(t,"onConflict")&&typeof t.onConflict=="string"}function ght(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!hht(t))return{onConflict:"default",value:t};if(eH(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function Rhe(t,e){let r=$B(t)&&eH(t,e)?t[e]:void 0;return ght(r)}function uI(t,e){return[t,e,Fhe]}function tH(t){return Array.isArray(t)?t[2]===Fhe:!1}function X8(t,e){if($B(t)){let r={};for(let s of Object.keys(t))r[s]=X8(t[s],e);return uI(e,r)}return Array.isArray(t)?uI(e,t.map(r=>X8(r,e))):uI(e,t)}function $8(t,e,r,s,a){let n,c=[],f=a,p=0;for(let E=a-1;E>=s;--E){let[C,S]=t[E],{onConflict:P,value:I}=Rhe(S,r),R=The(I);if(R!==3){if(n??=R,R!==n||P==="hardReset"){p=f;break}if(R===2)return uI(C,I);if(c.unshift([C,I]),P==="reset"){p=E;break}P==="extend"&&E===s&&(s=0),f=E}}if(typeof n>"u")return null;let h=c.map(([E])=>E).join(", ");switch(n){case 1:return uI(h,new Array().concat(...c.map(([E,C])=>C.map(S=>X8(S,E)))));case 0:{let E=Object.assign({},...c.map(([,R])=>R)),C=Object.keys(E),S={},P=t.map(([R,N])=>[R,Rhe(N,r).value]),I=pht(P,([R,N])=>{let U=The(N);return U!==0&&U!==3});if(I!==-1){let R=P.slice(I+1);for(let N of C)S[N]=$8(R,e,N,0,R.length)}else for(let R of C)S[R]=$8(P,e,R,p,P.length);return uI(h,S)}default:throw new Error("Assertion failed: Non-extendable value type")}}function Nhe(t){return $8(t.map(([e,r])=>[e,{".":r}]),[],".",0,t.length)}function ev(t){return tH(t)?t[1]:t}function RQ(t){let e=tH(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>RQ(r));if($B(e)){let r={};for(let[s,a]of Object.entries(e))r[s]=RQ(a);return r}return e}function rH(t){return tH(t)?t[0]:null}var pht,Fhe,Ohe=Ct(()=>{pht=(t,e,r)=>{let s=[...t];return s.reverse(),s.findIndex(e,r)};Fhe=Symbol()});var FQ={};Vt(FQ,{getDefaultGlobalFolder:()=>iH,getHomeFolder:()=>fI,isFolderInside:()=>sH});function iH(){if(process.platform==="win32"){let t=ue.toPortablePath(process.env.LOCALAPPDATA||ue.join((0,nH.homedir)(),"AppData","Local"));return K.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=ue.toPortablePath(process.env.XDG_DATA_HOME);return K.resolve(t,"yarn/berry")}return K.resolve(fI(),".yarn/berry")}function fI(){return ue.toPortablePath((0,nH.homedir)()||"/usr/local/share")}function sH(t,e){let r=K.relative(e,t);return r&&!r.startsWith("..")&&!K.isAbsolute(r)}var nH,NQ=Ct(()=>{bt();nH=Ie("os")});var _he=L((IJt,Mhe)=>{"use strict";var oH=Ie("https"),aH=Ie("http"),{URL:Lhe}=Ie("url"),lH=class extends aH.Agent{constructor(e){let{proxy:r,proxyRequestOptions:s,...a}=e;super(a),this.proxy=typeof r=="string"?new Lhe(r):r,this.proxyRequestOptions=s||{}}createConnection(e,r){let s={...this.proxyRequestOptions,method:"CONNECT",host:this.proxy.hostname,port:this.proxy.port,path:`${e.host}:${e.port}`,setHost:!1,headers:{...this.proxyRequestOptions.headers,connection:this.keepAlive?"keep-alive":"close",host:`${e.host}:${e.port}`},agent:!1,timeout:e.timeout||0};if(this.proxy.username||this.proxy.password){let n=Buffer.from(`${decodeURIComponent(this.proxy.username||"")}:${decodeURIComponent(this.proxy.password||"")}`).toString("base64");s.headers["proxy-authorization"]=`Basic ${n}`}this.proxy.protocol==="https:"&&(s.servername=this.proxy.hostname);let a=(this.proxy.protocol==="http:"?aH:oH).request(s);a.once("connect",(n,c,f)=>{a.removeAllListeners(),c.removeAllListeners(),n.statusCode===200?r(null,c):(c.destroy(),r(new Error(`Bad response: ${n.statusCode}`),null))}),a.once("timeout",()=>{a.destroy(new Error("Proxy timeout"))}),a.once("error",n=>{a.removeAllListeners(),r(n,null)}),a.end()}},cH=class extends oH.Agent{constructor(e){let{proxy:r,proxyRequestOptions:s,...a}=e;super(a),this.proxy=typeof r=="string"?new Lhe(r):r,this.proxyRequestOptions=s||{}}createConnection(e,r){let s={...this.proxyRequestOptions,method:"CONNECT",host:this.proxy.hostname,port:this.proxy.port,path:`${e.host}:${e.port}`,setHost:!1,headers:{...this.proxyRequestOptions.headers,connection:this.keepAlive?"keep-alive":"close",host:`${e.host}:${e.port}`},agent:!1,timeout:e.timeout||0};if(this.proxy.username||this.proxy.password){let n=Buffer.from(`${decodeURIComponent(this.proxy.username||"")}:${decodeURIComponent(this.proxy.password||"")}`).toString("base64");s.headers["proxy-authorization"]=`Basic ${n}`}this.proxy.protocol==="https:"&&(s.servername=this.proxy.hostname);let a=(this.proxy.protocol==="http:"?aH:oH).request(s);a.once("connect",(n,c,f)=>{if(a.removeAllListeners(),c.removeAllListeners(),n.statusCode===200){let p=super.createConnection({...e,socket:c});r(null,p)}else c.destroy(),r(new Error(`Bad response: ${n.statusCode}`),null)}),a.once("timeout",()=>{a.destroy(new Error("Proxy timeout"))}),a.once("error",n=>{a.removeAllListeners(),r(n,null)}),a.end()}};Mhe.exports={HttpProxyAgent:lH,HttpsProxyAgent:cH}});var uH,Uhe,Hhe,jhe=Ct(()=>{uH=et(_he(),1),Uhe=uH.default.HttpProxyAgent,Hhe=uH.default.HttpsProxyAgent});var Lp=L((Op,OQ)=>{"use strict";Object.defineProperty(Op,"__esModule",{value:!0});var qhe=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function mht(t){return qhe.includes(t)}var yht=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Blob","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","FormData","URLSearchParams","HTMLElement",...qhe];function Eht(t){return yht.includes(t)}var Iht=["null","undefined","string","number","bigint","boolean","symbol"];function Cht(t){return Iht.includes(t)}function AI(t){return e=>typeof e===t}var{toString:Ghe}=Object.prototype,tv=t=>{let e=Ghe.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&be.domElement(t))return"HTMLElement";if(Eht(e))return e},pi=t=>e=>tv(e)===t;function be(t){if(t===null)return"null";switch(typeof t){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol";default:}if(be.observable(t))return"Observable";if(be.array(t))return"Array";if(be.buffer(t))return"Buffer";let e=tv(t);if(e)return e;if(t instanceof String||t instanceof Boolean||t instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}be.undefined=AI("undefined");be.string=AI("string");var wht=AI("number");be.number=t=>wht(t)&&!be.nan(t);be.bigint=AI("bigint");be.function_=AI("function");be.null_=t=>t===null;be.class_=t=>be.function_(t)&&t.toString().startsWith("class ");be.boolean=t=>t===!0||t===!1;be.symbol=AI("symbol");be.numericString=t=>be.string(t)&&!be.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));be.array=(t,e)=>Array.isArray(t)?be.function_(e)?t.every(e):!0:!1;be.buffer=t=>{var e,r,s,a;return(a=(s=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||s===void 0?void 0:s.call(r,t))!==null&&a!==void 0?a:!1};be.blob=t=>pi("Blob")(t);be.nullOrUndefined=t=>be.null_(t)||be.undefined(t);be.object=t=>!be.null_(t)&&(typeof t=="object"||be.function_(t));be.iterable=t=>{var e;return be.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};be.asyncIterable=t=>{var e;return be.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};be.generator=t=>{var e,r;return be.iterable(t)&&be.function_((e=t)===null||e===void 0?void 0:e.next)&&be.function_((r=t)===null||r===void 0?void 0:r.throw)};be.asyncGenerator=t=>be.asyncIterable(t)&&be.function_(t.next)&&be.function_(t.throw);be.nativePromise=t=>pi("Promise")(t);var Bht=t=>{var e,r;return be.function_((e=t)===null||e===void 0?void 0:e.then)&&be.function_((r=t)===null||r===void 0?void 0:r.catch)};be.promise=t=>be.nativePromise(t)||Bht(t);be.generatorFunction=pi("GeneratorFunction");be.asyncGeneratorFunction=t=>tv(t)==="AsyncGeneratorFunction";be.asyncFunction=t=>tv(t)==="AsyncFunction";be.boundFunction=t=>be.function_(t)&&!t.hasOwnProperty("prototype");be.regExp=pi("RegExp");be.date=pi("Date");be.error=pi("Error");be.map=t=>pi("Map")(t);be.set=t=>pi("Set")(t);be.weakMap=t=>pi("WeakMap")(t);be.weakSet=t=>pi("WeakSet")(t);be.int8Array=pi("Int8Array");be.uint8Array=pi("Uint8Array");be.uint8ClampedArray=pi("Uint8ClampedArray");be.int16Array=pi("Int16Array");be.uint16Array=pi("Uint16Array");be.int32Array=pi("Int32Array");be.uint32Array=pi("Uint32Array");be.float32Array=pi("Float32Array");be.float64Array=pi("Float64Array");be.bigInt64Array=pi("BigInt64Array");be.bigUint64Array=pi("BigUint64Array");be.arrayBuffer=pi("ArrayBuffer");be.sharedArrayBuffer=pi("SharedArrayBuffer");be.dataView=pi("DataView");be.enumCase=(t,e)=>Object.values(e).includes(t);be.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;be.urlInstance=t=>pi("URL")(t);be.urlString=t=>{if(!be.string(t))return!1;try{return new URL(t),!0}catch{return!1}};be.truthy=t=>!!t;be.falsy=t=>!t;be.nan=t=>Number.isNaN(t);be.primitive=t=>be.null_(t)||Cht(typeof t);be.integer=t=>Number.isInteger(t);be.safeInteger=t=>Number.isSafeInteger(t);be.plainObject=t=>{if(Ghe.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};be.typedArray=t=>mht(tv(t));var vht=t=>be.safeInteger(t)&&t>=0;be.arrayLike=t=>!be.nullOrUndefined(t)&&!be.function_(t)&&vht(t.length);be.inRange=(t,e)=>{if(be.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(be.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var Sht=1,Dht=["innerHTML","ownerDocument","style","attributes","nodeValue"];be.domElement=t=>be.object(t)&&t.nodeType===Sht&&be.string(t.nodeName)&&!be.plainObject(t)&&Dht.every(e=>e in t);be.observable=t=>{var e,r,s,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(s=t)["@@observable"])===null||a===void 0?void 0:a.call(s)):!1};be.nodeStream=t=>be.object(t)&&be.function_(t.pipe)&&!be.observable(t);be.infinite=t=>t===1/0||t===-1/0;var Whe=t=>e=>be.integer(e)&&Math.abs(e%2)===t;be.evenInteger=Whe(0);be.oddInteger=Whe(1);be.emptyArray=t=>be.array(t)&&t.length===0;be.nonEmptyArray=t=>be.array(t)&&t.length>0;be.emptyString=t=>be.string(t)&&t.length===0;var bht=t=>be.string(t)&&!/\S/.test(t);be.emptyStringOrWhitespace=t=>be.emptyString(t)||bht(t);be.nonEmptyString=t=>be.string(t)&&t.length>0;be.nonEmptyStringAndNotWhitespace=t=>be.string(t)&&!be.emptyStringOrWhitespace(t);be.emptyObject=t=>be.object(t)&&!be.map(t)&&!be.set(t)&&Object.keys(t).length===0;be.nonEmptyObject=t=>be.object(t)&&!be.map(t)&&!be.set(t)&&Object.keys(t).length>0;be.emptySet=t=>be.set(t)&&t.size===0;be.nonEmptySet=t=>be.set(t)&&t.size>0;be.emptyMap=t=>be.map(t)&&t.size===0;be.nonEmptyMap=t=>be.map(t)&&t.size>0;be.propertyKey=t=>be.any([be.string,be.number,be.symbol],t);be.formData=t=>pi("FormData")(t);be.urlSearchParams=t=>pi("URLSearchParams")(t);var Yhe=(t,e,r)=>{if(!be.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(r.length===0)throw new TypeError("Invalid number of values");return t.call(r,e)};be.any=(t,...e)=>(be.array(t)?t:[t]).some(s=>Yhe(Array.prototype.some,s,e));be.all=(t,...e)=>Yhe(Array.prototype.every,t,e);var _t=(t,e,r,s={})=>{if(!t){let{multipleValues:a}=s,n=a?`received values of types ${[...new Set(r.map(c=>`\`${be(c)}\``))].join(", ")}`:`received value of type \`${be(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Op.assert={undefined:t=>_t(be.undefined(t),"undefined",t),string:t=>_t(be.string(t),"string",t),number:t=>_t(be.number(t),"number",t),bigint:t=>_t(be.bigint(t),"bigint",t),function_:t=>_t(be.function_(t),"Function",t),null_:t=>_t(be.null_(t),"null",t),class_:t=>_t(be.class_(t),"Class",t),boolean:t=>_t(be.boolean(t),"boolean",t),symbol:t=>_t(be.symbol(t),"symbol",t),numericString:t=>_t(be.numericString(t),"string with a number",t),array:(t,e)=>{_t(be.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>_t(be.buffer(t),"Buffer",t),blob:t=>_t(be.blob(t),"Blob",t),nullOrUndefined:t=>_t(be.nullOrUndefined(t),"null or undefined",t),object:t=>_t(be.object(t),"Object",t),iterable:t=>_t(be.iterable(t),"Iterable",t),asyncIterable:t=>_t(be.asyncIterable(t),"AsyncIterable",t),generator:t=>_t(be.generator(t),"Generator",t),asyncGenerator:t=>_t(be.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>_t(be.nativePromise(t),"native Promise",t),promise:t=>_t(be.promise(t),"Promise",t),generatorFunction:t=>_t(be.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>_t(be.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>_t(be.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>_t(be.boundFunction(t),"Function",t),regExp:t=>_t(be.regExp(t),"RegExp",t),date:t=>_t(be.date(t),"Date",t),error:t=>_t(be.error(t),"Error",t),map:t=>_t(be.map(t),"Map",t),set:t=>_t(be.set(t),"Set",t),weakMap:t=>_t(be.weakMap(t),"WeakMap",t),weakSet:t=>_t(be.weakSet(t),"WeakSet",t),int8Array:t=>_t(be.int8Array(t),"Int8Array",t),uint8Array:t=>_t(be.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>_t(be.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>_t(be.int16Array(t),"Int16Array",t),uint16Array:t=>_t(be.uint16Array(t),"Uint16Array",t),int32Array:t=>_t(be.int32Array(t),"Int32Array",t),uint32Array:t=>_t(be.uint32Array(t),"Uint32Array",t),float32Array:t=>_t(be.float32Array(t),"Float32Array",t),float64Array:t=>_t(be.float64Array(t),"Float64Array",t),bigInt64Array:t=>_t(be.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>_t(be.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>_t(be.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>_t(be.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>_t(be.dataView(t),"DataView",t),enumCase:(t,e)=>_t(be.enumCase(t,e),"EnumCase",t),urlInstance:t=>_t(be.urlInstance(t),"URL",t),urlString:t=>_t(be.urlString(t),"string with a URL",t),truthy:t=>_t(be.truthy(t),"truthy",t),falsy:t=>_t(be.falsy(t),"falsy",t),nan:t=>_t(be.nan(t),"NaN",t),primitive:t=>_t(be.primitive(t),"primitive",t),integer:t=>_t(be.integer(t),"integer",t),safeInteger:t=>_t(be.safeInteger(t),"integer",t),plainObject:t=>_t(be.plainObject(t),"plain object",t),typedArray:t=>_t(be.typedArray(t),"TypedArray",t),arrayLike:t=>_t(be.arrayLike(t),"array-like",t),domElement:t=>_t(be.domElement(t),"HTMLElement",t),observable:t=>_t(be.observable(t),"Observable",t),nodeStream:t=>_t(be.nodeStream(t),"Node.js Stream",t),infinite:t=>_t(be.infinite(t),"infinite number",t),emptyArray:t=>_t(be.emptyArray(t),"empty array",t),nonEmptyArray:t=>_t(be.nonEmptyArray(t),"non-empty array",t),emptyString:t=>_t(be.emptyString(t),"empty string",t),emptyStringOrWhitespace:t=>_t(be.emptyStringOrWhitespace(t),"empty string or whitespace",t),nonEmptyString:t=>_t(be.nonEmptyString(t),"non-empty string",t),nonEmptyStringAndNotWhitespace:t=>_t(be.nonEmptyStringAndNotWhitespace(t),"non-empty string and not whitespace",t),emptyObject:t=>_t(be.emptyObject(t),"empty object",t),nonEmptyObject:t=>_t(be.nonEmptyObject(t),"non-empty object",t),emptySet:t=>_t(be.emptySet(t),"empty set",t),nonEmptySet:t=>_t(be.nonEmptySet(t),"non-empty set",t),emptyMap:t=>_t(be.emptyMap(t),"empty map",t),nonEmptyMap:t=>_t(be.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>_t(be.propertyKey(t),"PropertyKey",t),formData:t=>_t(be.formData(t),"FormData",t),urlSearchParams:t=>_t(be.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>_t(be.evenInteger(t),"even integer",t),oddInteger:t=>_t(be.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>_t(be.directInstanceOf(t,e),"T",t),inRange:(t,e)=>_t(be.inRange(t,e),"in range",t),any:(t,...e)=>_t(be.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>_t(be.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(be,{class:{value:be.class_},function:{value:be.function_},null:{value:be.null_}});Object.defineProperties(Op.assert,{class:{value:Op.assert.class_},function:{value:Op.assert.function_},null:{value:Op.assert.null_}});Op.default=be;OQ.exports=be;OQ.exports.default=be;OQ.exports.assert=Op.assert});var Vhe=L((wJt,fH)=>{"use strict";var LQ=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},MQ=class t{static fn(e){return(...r)=>new t((s,a,n)=>{r.push(n),e(...r).then(s,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,s)=>{this._reject=s;let a=f=>{this._isPending=!1,r(f)},n=f=>{this._isPending=!1,s(f)},c=f=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(f)};return Object.defineProperties(c,{shouldReject:{get:()=>this._rejectOnCancel,set:f=>{this._rejectOnCancel=f}}}),e(a,n,c)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new LQ(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(MQ.prototype,Promise.prototype);fH.exports=MQ;fH.exports.CancelError=LQ});var Khe=L((pH,hH)=>{"use strict";Object.defineProperty(pH,"__esModule",{value:!0});function Pht(t){return t.encrypted}var AH=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let s=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",c=()=>{s&&r.connect(),Pht(t)&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?c():t.connecting?t.once("connect",c):t.destroyed&&n&&r.close(t._hadError)};pH.default=AH;hH.exports=AH;hH.exports.default=AH});var Jhe=L((dH,mH)=>{"use strict";Object.defineProperty(dH,"__esModule",{value:!0});var xht=Khe(),kht=Number(process.versions.node.split(".")[0]),gH=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=c=>{let f=c.emit.bind(c);c.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,c.emit=f),f(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||kht>=13)&&(e.phases.total=Date.now()-e.start)});let s=c=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let f=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};c.prependOnceListener("lookup",f),xht.default(c,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(c.removeListener("lookup",f),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?s(t.socket):t.prependOnceListener("socket",s);let a=()=>{var c;e.upload=Date.now(),e.phases.request=e.upload-(c=e.secureConnect,c??e.connect)};return(typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",c=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,c.timings=e,r(c),c.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};dH.default=gH;mH.exports=gH;mH.exports.default=gH});var r0e=L((BJt,IH)=>{"use strict";var{V4MAPPED:Qht,ADDRCONFIG:Tht,ALL:t0e,promises:{Resolver:zhe},lookup:Rht}=Ie("dns"),{promisify:yH}=Ie("util"),Fht=Ie("os"),pI=Symbol("cacheableLookupCreateConnection"),EH=Symbol("cacheableLookupInstance"),Zhe=Symbol("expires"),Nht=typeof t0e=="number",Xhe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},Oht=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},$he=()=>{let t=!1,e=!1;for(let r of Object.values(Fht.networkInterfaces()))for(let s of r)if(!s.internal&&(s.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},Lht=t=>Symbol.iterator in t,e0e={ttl:!0},Mht={all:!0},_Q=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:s=3600,errorTtl:a=.15,resolver:n=new zhe,lookup:c=Rht}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=yH(c),this._resolver instanceof zhe?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=yH(this._resolver.resolve4.bind(this._resolver)),this._resolve6=yH(this._resolver.resolve6.bind(this._resolver))),this._iface=$he(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,s<1)this._fallback=!1;else{this._fallback=!0;let f=setInterval(()=>{this._hostnamesToFallback.clear()},s*1e3);f.unref&&f.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,s){if(typeof r=="function"?(s=r,r={}):typeof r=="number"&&(r={family:r}),!s)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?s(null,a):s(null,a.address,a.family,a.expires,a.ttl)},s)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let s=await this.query(e);if(r.family===6){let a=s.filter(n=>n.family===6);r.hints&Qht&&(Nht&&r.hints&t0e||a.length===0)?Oht(s):s=a}else r.family===4&&(s=s.filter(a=>a.family===4));if(r.hints&Tht){let{_iface:a}=this;s=s.filter(n=>n.family===6?a.has6:a.has4)}if(s.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?s:s[0]}async query(e){let r=await this._cache.get(e);if(!r){let s=this._pending[e];if(s)r=await s;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(s=>({...s})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[s,a]=await Promise.all([this._resolve4(e,e0e),this._resolve6(e,e0e)].map(h=>r(h))),n=0,c=0,f=0,p=Date.now();for(let h of s)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,c=Math.max(c,h.ttl);return s.length>0?a.length>0?f=Math.min(n,c):f=n:f=c,{entries:[...s,...a],cacheTtl:f}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,s){if(this.maxTtl>0&&s>0){s=Math.min(s,this.maxTtl)*1e3,r[Zhe]=Date.now()+s;try{await this._cache.set(e,r,s)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}Lht(this._cache)&&this._tick(s)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,Mht);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let s=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,s),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let s=1/0,a=Date.now();for(let[n,c]of this._cache){let f=c[Zhe];a>=f?this._cache.delete(n):f("lookup"in r||(r.lookup=this.lookup),e[pI](r,s))}uninstall(e){if(Xhe(e),e[pI]){if(e[EH]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[pI],delete e[pI],delete e[EH]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=$he(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};IH.exports=_Q;IH.exports.default=_Q});var s0e=L((vJt,CH)=>{"use strict";var _ht=typeof URL>"u"?Ie("url").URL:URL,Uht="text/plain",Hht="us-ascii",n0e=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),jht=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let s=r[1].split(";"),a=r[2],n=e?"":r[3],c=!1;s[s.length-1]==="base64"&&(s.pop(),c=!0);let f=(s.shift()||"").toLowerCase(),h=[...s.map(E=>{let[C,S=""]=E.split("=").map(P=>P.trim());return C==="charset"&&(S=S.toLowerCase(),S===Hht)?"":`${C}${S?`=${S}`:""}`}).filter(Boolean)];return c&&h.push("base64"),(h.length!==0||f&&f!==Uht)&&h.unshift(f),`data:${h.join(";")},${c?a.trim():a}${n?`#${n}`:""}`},i0e=(t,e)=>{if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return jht(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new _ht(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,c)=>/^(?!\/)/g.test(c)?`${c}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),c=n[n.length-1];n0e(c,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])n0e(n,e.removeQueryParameters)&&a.searchParams.delete(n);return e.sortQueryParameters&&a.searchParams.sort(),e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,"")),t=a.toString(),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};CH.exports=i0e;CH.exports.default=i0e});var l0e=L((SJt,a0e)=>{a0e.exports=o0e;function o0e(t,e){if(t&&e)return o0e(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(s){r[s]=t[s]}),r;function r(){for(var s=new Array(arguments.length),a=0;a{var c0e=l0e();wH.exports=c0e(UQ);wH.exports.strict=c0e(u0e);UQ.proto=UQ(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return UQ(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return u0e(this)},configurable:!0})});function UQ(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function u0e(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var vH=L((bJt,A0e)=>{var qht=BH(),Ght=function(){},Wht=function(t){return t.setHeader&&typeof t.abort=="function"},Yht=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},f0e=function(t,e,r){if(typeof e=="function")return f0e(t,null,e);e||(e={}),r=qht(r||Ght);var s=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,c=e.writable||e.writable!==!1&&t.writable,f=function(){t.writable||p()},p=function(){c=!1,n||r.call(t)},h=function(){n=!1,c||r.call(t)},E=function(I){r.call(t,I?new Error("exited with error code: "+I):null)},C=function(I){r.call(t,I)},S=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(c&&!(s&&s.ended))return r.call(t,new Error("premature close"))},P=function(){t.req.on("finish",p)};return Wht(t)?(t.on("complete",p),t.on("abort",S),t.req?P():t.on("request",P)):c&&!s&&(t.on("end",f),t.on("close",f)),Yht(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",C),t.on("close",S),function(){t.removeListener("complete",p),t.removeListener("abort",S),t.removeListener("request",P),t.req&&t.req.removeListener("finish",p),t.removeListener("end",f),t.removeListener("close",f),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",C),t.removeListener("close",S)}};A0e.exports=f0e});var g0e=L((PJt,h0e)=>{var Vht=BH(),Kht=vH(),SH=Ie("fs"),rv=function(){},Jht=/^v?\.0/.test(process.version),HQ=function(t){return typeof t=="function"},zht=function(t){return!Jht||!SH?!1:(t instanceof(SH.ReadStream||rv)||t instanceof(SH.WriteStream||rv))&&HQ(t.close)},Zht=function(t){return t.setHeader&&HQ(t.abort)},Xht=function(t,e,r,s){s=Vht(s);var a=!1;t.on("close",function(){a=!0}),Kht(t,{readable:e,writable:r},function(c){if(c)return s(c);a=!0,s()});var n=!1;return function(c){if(!a&&!n){if(n=!0,zht(t))return t.close(rv);if(Zht(t))return t.abort();if(HQ(t.destroy))return t.destroy();s(c||new Error("stream was destroyed"))}}},p0e=function(t){t()},$ht=function(t,e){return t.pipe(e)},e0t=function(){var t=Array.prototype.slice.call(arguments),e=HQ(t[t.length-1]||rv)&&t.pop()||rv;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,s=t.map(function(a,n){var c=n0;return Xht(a,c,f,function(p){r||(r=p),p&&s.forEach(p0e),!c&&(s.forEach(p0e),e(r))})});return t.reduce($ht)};h0e.exports=e0t});var m0e=L((xJt,d0e)=>{"use strict";var{PassThrough:t0t}=Ie("stream");d0e.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,s=r==="buffer",a=!1;e?a=!(r||s):r=r||"utf8",s&&(r=null);let n=new t0t({objectMode:a});r&&n.setEncoding(r);let c=0,f=[];return n.on("data",p=>{f.push(p),a?c=f.length:c+=p.length}),n.getBufferedValue=()=>e?f:s?Buffer.concat(f,c):f.join(""),n.getBufferedLength=()=>c,n}});var y0e=L((kJt,hI)=>{"use strict";var r0t=g0e(),n0t=m0e(),jQ=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function qQ(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,s;return await new Promise((a,n)=>{let c=f=>{f&&(f.bufferedData=s.getBufferedValue()),n(f)};s=r0t(t,n0t(e),f=>{if(f){c(f);return}a()}),s.on("data",()=>{s.getBufferedLength()>r&&c(new jQ)})}),s.getBufferedValue()}hI.exports=qQ;hI.exports.default=qQ;hI.exports.buffer=(t,e)=>qQ(t,{...e,encoding:"buffer"});hI.exports.array=(t,e)=>qQ(t,{...e,array:!0});hI.exports.MaxBufferError=jQ});var I0e=L((TJt,E0e)=>{"use strict";var i0t=new Set([200,203,204,206,300,301,308,404,405,410,414,501]),s0t=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),o0t=new Set([500,502,503,504]),a0t={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},l0t={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function tm(t){let e=parseInt(t,10);return isFinite(e)?e:0}function c0t(t){return t?o0t.has(t.status):!0}function DH(t){let e={};if(!t)return e;let r=t.trim().split(/,/);for(let s of r){let[a,n]=s.split(/=/,2);e[a.trim()]=n===void 0?!0:n.trim().replace(/^"|"$/g,"")}return e}function u0t(t){let e=[];for(let r in t){let s=t[r];e.push(s===!0?r:r+"="+s)}if(e.length)return e.join(", ")}E0e.exports=class{constructor(e,r,{shared:s,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:c,_fromObject:f}={}){if(f){this._fromObject(f);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=s!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=DH(r.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=r.headers.vary?e.headers:null,this._reqcc=DH(e.headers["cache-control"]),c&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":u0t(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),r.headers["cache-control"]==null&&/no-cache/.test(r.headers.pragma)&&(this._rescc["no-cache"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||this._method==="HEAD"||this._method==="POST"&&this._hasExplicitExpiration())&&s0t.has(this._status)&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc["max-age"]||this._isShared&&this._rescc["s-maxage"]||this._rescc.public||i0t.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=DH(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let s of r)if(e.headers[s]!==this._reqHeaders[s])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let s in e)a0t[s]||(r[s]=e[s]);if(e.connection){let s=e.connection.trim().split(/\s*,\s*/);for(let a of s)delete r[a]}if(r.warning){let s=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));s.length?r.warning=s.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return tm(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary==="*")return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return tm(this._rescc["s-maxage"])}if(this._rescc["max-age"])return tm(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let s=Date.parse(this._resHeaders.expires);return Number.isNaN(s)||ss)return Math.max(e,(r-s)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+tm(this._rescc["stale-if-error"]),s=e+tm(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,s)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+tm(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+tm(this._rescc["stale-while-revalidate"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||e.v!==1)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copyWithoutHopByHopHeaders(e.headers);if(delete r["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete r["if-none-match"],delete r["if-modified-since"],r;if(this._resHeaders.etag&&(r["if-none-match"]=r["if-none-match"]?`${r["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),r["accept-ranges"]||r["if-match"]||r["if-unmodified-since"]||this._method&&this._method!="GET"){if(delete r["if-modified-since"],r["if-none-match"]){let a=r["if-none-match"].split(/,/).filter(n=>!/^\s*W\//.test(n));a.length?r["if-none-match"]=a.join(",").trim():delete r["if-none-match"]}}else this._resHeaders["last-modified"]&&!r["if-modified-since"]&&(r["if-modified-since"]=this._resHeaders["last-modified"]);return r}revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&c0t(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let s=!1;if(r.status!==void 0&&r.status!=304?s=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?s=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?s=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?s=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(s=!0),!s)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let c in this._resHeaders)a[c]=c in r.headers&&!l0t[c]?r.headers[c]:this._resHeaders[c];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var GQ=L((RJt,C0e)=>{"use strict";C0e.exports=t=>{let e={};for(let[r,s]of Object.entries(t))e[r.toLowerCase()]=s;return e}});var B0e=L((FJt,w0e)=>{"use strict";var f0t=Ie("stream").Readable,A0t=GQ(),bH=class extends f0t{constructor(e,r,s,a){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(s instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=A0t(r),this.body=s,this.url=a}_read(){this.push(this.body),this.push(null)}};w0e.exports=bH});var S0e=L((NJt,v0e)=>{"use strict";var p0t=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];v0e.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(p0t));for(let s of r)s in e||(e[s]=typeof t[s]=="function"?t[s].bind(t):t[s])}});var b0e=L((OJt,D0e)=>{"use strict";var h0t=Ie("stream").PassThrough,g0t=S0e(),d0t=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new h0t;return g0t(t,e),t.pipe(e)};D0e.exports=d0t});var P0e=L(PH=>{PH.stringify=function t(e){if(typeof e>"u")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",s=Array.isArray(e);r=s?"[":"{";var a=!0;for(var n in e){var c=typeof e[n]=="function"||!s&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!c&&(a||(r+=","),a=!1,s?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=s?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};PH.parse=function(t){return JSON.parse(t,function(e,r){return typeof r=="string"?/^:base64:/.test(r)?Buffer.from(r.substring(8),"base64"):/^:/.test(r)?r.substring(1):r:r})}});var T0e=L((MJt,Q0e)=>{"use strict";var m0t=Ie("events"),x0e=P0e(),y0t=t=>{let e={redis:"@keyv/redis",rediss:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql",etcd:"@keyv/etcd",offline:"@keyv/offline",tiered:"@keyv/tiered"};if(t.adapter||t.uri){let r=t.adapter||/^[^:+]*/.exec(t.uri)[0];return new(Ie(e[r]))(t)}return new Map},k0e=["sqlite","postgres","mysql","mongo","redis","tiered"],xH=class extends m0t{constructor(e,{emitErrors:r=!0,...s}={}){if(super(),this.opts={namespace:"keyv",serialize:x0e.stringify,deserialize:x0e.parse,...typeof e=="string"?{uri:e}:e,...s},!this.opts.store){let n={...this.opts};this.opts.store=y0t(n)}if(this.opts.compression){let n=this.opts.compression;this.opts.serialize=n.serialize.bind(n),this.opts.deserialize=n.deserialize.bind(n)}typeof this.opts.store.on=="function"&&r&&this.opts.store.on("error",n=>this.emit("error",n)),this.opts.store.namespace=this.opts.namespace;let a=n=>async function*(){for await(let[c,f]of typeof n=="function"?n(this.opts.store.namespace):n){let p=await this.opts.deserialize(f);if(!(this.opts.store.namespace&&!c.includes(this.opts.store.namespace))){if(typeof p.expires=="number"&&Date.now()>p.expires){this.delete(c);continue}yield[this._getKeyUnprefix(c),p.value]}}};typeof this.opts.store[Symbol.iterator]=="function"&&this.opts.store instanceof Map?this.iterator=a(this.opts.store):typeof this.opts.store.iterator=="function"&&this.opts.store.opts&&this._checkIterableAdaptar()&&(this.iterator=a(this.opts.store.iterator.bind(this.opts.store)))}_checkIterableAdaptar(){return k0e.includes(this.opts.store.opts.dialect)||k0e.findIndex(e=>this.opts.store.opts.url.includes(e))>=0}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}_getKeyPrefixArray(e){return e.map(r=>`${this.opts.namespace}:${r}`)}_getKeyUnprefix(e){return e.split(":").splice(1).join(":")}get(e,r){let{store:s}=this.opts,a=Array.isArray(e),n=a?this._getKeyPrefixArray(e):this._getKeyPrefix(e);if(a&&s.getMany===void 0){let c=[];for(let f of n)c.push(Promise.resolve().then(()=>s.get(f)).then(p=>typeof p=="string"?this.opts.deserialize(p):this.opts.compression?this.opts.deserialize(p):p).then(p=>{if(p!=null)return typeof p.expires=="number"&&Date.now()>p.expires?this.delete(f).then(()=>{}):r&&r.raw?p:p.value}));return Promise.allSettled(c).then(f=>{let p=[];for(let h of f)p.push(h.value);return p})}return Promise.resolve().then(()=>a?s.getMany(n):s.get(n)).then(c=>typeof c=="string"?this.opts.deserialize(c):this.opts.compression?this.opts.deserialize(c):c).then(c=>{if(c!=null)return a?c.map((f,p)=>{if(typeof f=="string"&&(f=this.opts.deserialize(f)),f!=null){if(typeof f.expires=="number"&&Date.now()>f.expires){this.delete(e[p]).then(()=>{});return}return r&&r.raw?f:f.value}}):typeof c.expires=="number"&&Date.now()>c.expires?this.delete(e).then(()=>{}):r&&r.raw?c:c.value})}set(e,r,s){let a=this._getKeyPrefix(e);typeof s>"u"&&(s=this.opts.ttl),s===0&&(s=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let c=typeof s=="number"?Date.now()+s:null;return typeof r=="symbol"&&this.emit("error","symbol cannot be serialized"),r={value:r,expires:c},this.opts.serialize(r)}).then(c=>n.set(a,c,s)).then(()=>!0)}delete(e){let{store:r}=this.opts;if(Array.isArray(e)){let a=this._getKeyPrefixArray(e);if(r.deleteMany===void 0){let n=[];for(let c of a)n.push(r.delete(c));return Promise.allSettled(n).then(c=>c.every(f=>f.value===!0))}return Promise.resolve().then(()=>r.deleteMany(a))}let s=this._getKeyPrefix(e);return Promise.resolve().then(()=>r.delete(s))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}has(e){let r=this._getKeyPrefix(e),{store:s}=this.opts;return Promise.resolve().then(async()=>typeof s.has=="function"?s.has(r):await s.get(r)!==void 0)}disconnect(){let{store:e}=this.opts;if(typeof e.disconnect=="function")return e.disconnect()}};Q0e.exports=xH});var N0e=L((UJt,F0e)=>{"use strict";var E0t=Ie("events"),WQ=Ie("url"),I0t=s0e(),C0t=y0e(),kH=I0e(),R0e=B0e(),w0t=GQ(),B0t=b0e(),v0t=T0e(),nv=class t{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new v0t({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,s)=>{let a;if(typeof r=="string")a=QH(WQ.parse(r)),r={};else if(r instanceof WQ.URL)a=QH(WQ.parse(r.toString())),r={};else{let[C,...S]=(r.path||"").split("?"),P=S.length>0?`?${S.join("?")}`:"";a=QH({...r,pathname:C,search:P})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...S0t(a)},r.headers=w0t(r.headers);let n=new E0t,c=I0t(WQ.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),f=`${r.method}:${c}`,p=!1,h=!1,E=C=>{h=!0;let S=!1,P,I=new Promise(N=>{P=()=>{S||(S=!0,N())}}),R=N=>{if(p&&!C.forceRefresh){N.status=N.statusCode;let W=kH.fromObject(p.cachePolicy).revalidatedPolicy(C,N);if(!W.modified){let te=W.policy.responseHeaders();N=new R0e(p.statusCode,te,p.body,p.url),N.cachePolicy=W.policy,N.fromCache=!0}}N.fromCache||(N.cachePolicy=new kH(C,N,C),N.fromCache=!1);let U;C.cache&&N.cachePolicy.storable()?(U=B0t(N),(async()=>{try{let W=C0t.buffer(N);if(await Promise.race([I,new Promise(ce=>N.once("end",ce))]),S)return;let te=await W,ie={cachePolicy:N.cachePolicy.toObject(),url:N.url,statusCode:N.fromCache?p.statusCode:N.statusCode,body:te},Ae=C.strictTtl?N.cachePolicy.timeToLive():void 0;C.maxTtl&&(Ae=Ae?Math.min(Ae,C.maxTtl):C.maxTtl),await this.cache.set(f,ie,Ae)}catch(W){n.emit("error",new t.CacheError(W))}})()):C.cache&&p&&(async()=>{try{await this.cache.delete(f)}catch(W){n.emit("error",new t.CacheError(W))}})(),n.emit("response",U||N),typeof s=="function"&&s(U||N)};try{let N=e(C,R);N.once("error",P),N.once("abort",P),n.emit("request",N)}catch(N){n.emit("error",new t.RequestError(N))}};return(async()=>{let C=async P=>{await Promise.resolve();let I=P.cache?await this.cache.get(f):void 0;if(typeof I>"u")return E(P);let R=kH.fromObject(I.cachePolicy);if(R.satisfiesWithoutRevalidation(P)&&!P.forceRefresh){let N=R.responseHeaders(),U=new R0e(I.statusCode,N,I.body,I.url);U.cachePolicy=R,U.fromCache=!0,n.emit("response",U),typeof s=="function"&&s(U)}else p=I,P.headers=R.revalidationHeaders(P),E(P)},S=P=>n.emit("error",new t.CacheError(P));this.cache.once("error",S),n.on("response",()=>this.cache.removeListener("error",S));try{await C(r)}catch(P){r.automaticFailover&&!h&&E(r),n.emit("error",new t.CacheError(P))}})(),n}}};function S0t(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function QH(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}nv.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};nv.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};F0e.exports=nv});var L0e=L((qJt,O0e)=>{"use strict";var D0t=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];O0e.exports=(t,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let r=new Set(Object.keys(t).concat(D0t)),s={};for(let a of r)a in e||(s[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,s),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var _0e=L((GJt,M0e)=>{"use strict";var{Transform:b0t,PassThrough:P0t}=Ie("stream"),TH=Ie("zlib"),x0t=L0e();M0e.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof TH.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let s=!0,a=new b0t({transform(f,p,h){s=!1,h(null,f)},flush(f){f()}}),n=new P0t({autoDestroy:!1,destroy(f,p){t.destroy(),p(f)}}),c=r?TH.createBrotliDecompress():TH.createUnzip();return c.once("error",f=>{if(s&&!t.readable){n.end();return}n.destroy(f)}),x0t(t,n),t.pipe(a).pipe(c).pipe(n),n}});var FH=L((WJt,U0e)=>{"use strict";var RH=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[s,a]of this.oldCache.entries())this.onEviction(s,a);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};U0e.exports=RH});var OH=L((YJt,G0e)=>{"use strict";var k0t=Ie("events"),Q0t=Ie("tls"),T0t=Ie("http2"),R0t=FH(),xa=Symbol("currentStreamsCount"),H0e=Symbol("request"),Nc=Symbol("cachedOriginSet"),gI=Symbol("gracefullyClosing"),F0t=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],N0t=(t,e,r)=>{let s=0,a=t.length;for(;s>>1;r(t[n],e)?s=n+1:a=n}return s},O0t=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,NH=(t,e)=>{for(let r of t)r[Nc].lengthe[Nc].includes(s))&&r[xa]+e[xa]<=e.remoteSettings.maxConcurrentStreams&&q0e(r)},L0t=(t,e)=>{for(let r of t)e[Nc].lengthr[Nc].includes(s))&&e[xa]+r[xa]<=r.remoteSettings.maxConcurrentStreams&&q0e(e)},j0e=({agent:t,isFree:e})=>{let r={};for(let s in t.sessions){let n=t.sessions[s].filter(c=>{let f=c[rm.kCurrentStreamsCount]{t[gI]=!0,t[xa]===0&&t.close()},rm=class t extends k0t{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:s=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=s,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new R0t({maxSize:a})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let s of F0t)e[s]&&(r+=`:${e[s]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let s=this.queue[e][r];this._sessionsCount{Array.isArray(s)?(s=[...s],a()):s=[{resolve:a,reject:n}];let c=this.normalizeOptions(r),f=t.normalizeOrigin(e,r&&r.servername);if(f===void 0){for(let{reject:E}of s)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(c in this.sessions){let E=this.sessions[c],C=-1,S=-1,P;for(let I of E){let R=I.remoteSettings.maxConcurrentStreams;if(R=R||I[gI]||I.destroyed)continue;P||(C=R),N>S&&(P=I,S=N)}}if(P){if(s.length!==1){for(let{reject:I}of s){let R=new Error(`Expected the length of listeners to be 1, got ${s.length}. -Please report this to https://github.com/szmarczak/http2-wrapper/`);I(R)}return}s[0].resolve(P);return}}if(c in this.queue){if(f in this.queue[c]){this.queue[c][f].listeners.push(...s),this._tryToCreateNewSession(c,f);return}}else this.queue[c]={};let p=()=>{c in this.queue&&this.queue[c][f]===h&&(delete this.queue[c][f],Object.keys(this.queue[c]).length===0&&delete this.queue[c])},h=()=>{let E=`${f}:${c}`,C=!1;try{let S=T0t.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});S[xa]=0,S[gI]=!1;let P=()=>S[xa]{this.tlsSessionCache.set(E,N)}),S.once("error",N=>{for(let{reject:U}of s)U(N);this.tlsSessionCache.delete(E)}),S.setTimeout(this.timeout,()=>{S.destroy()}),S.once("close",()=>{if(C){I&&this._freeSessionsCount--,this._sessionsCount--;let N=this.sessions[c];N.splice(N.indexOf(S),1),N.length===0&&delete this.sessions[c]}else{let N=new Error("Session closed without receiving a SETTINGS frame");N.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of s)U(N);p()}this._tryToCreateNewSession(c,f)});let R=()=>{if(!(!(c in this.queue)||!P())){for(let N of S[Nc])if(N in this.queue[c]){let{listeners:U}=this.queue[c][N];for(;U.length!==0&&P();)U.shift().resolve(S);let W=this.queue[c];if(W[N].listeners.length===0&&(delete W[N],Object.keys(W).length===0)){delete this.queue[c];break}if(!P())break}}};S.on("origin",()=>{S[Nc]=S.originSet,P()&&(R(),NH(this.sessions[c],S))}),S.once("remoteSettings",()=>{if(S.ref(),S.unref(),this._sessionsCount++,h.destroyed){let N=new Error("Agent has been destroyed");for(let U of s)U.reject(N);S.destroy();return}S[Nc]=S.originSet;{let N=this.sessions;if(c in N){let U=N[c];U.splice(N0t(U,S,O0t),0,S)}else N[c]=[S]}this._freeSessionsCount+=1,C=!0,this.emit("session",S),R(),p(),S[xa]===0&&this._freeSessionsCount>this.maxFreeSessions&&S.close(),s.length!==0&&(this.getSession(f,r,s),s.length=0),S.on("remoteSettings",()=>{R(),NH(this.sessions[c],S)})}),S[H0e]=S.request,S.request=(N,U)=>{if(S[gI])throw new Error("The session is gracefully closing. No new streams are allowed.");let W=S[H0e](N,U);return S.ref(),++S[xa],S[xa]===S.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,W.once("close",()=>{if(I=P(),--S[xa],!S.destroyed&&!S.closed&&(L0t(this.sessions[c],S),P()&&!S.closed)){I||(this._freeSessionsCount++,I=!0);let te=S[xa]===0;te&&S.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||S[gI])?S.close():(NH(this.sessions[c],S),R())}}),W}}catch(S){for(let P of s)P.reject(S);p()}};h.listeners=s,h.completed=!1,h.destroyed=!1,this.queue[c][f]=h,this._tryToCreateNewSession(c,f)})}request(e,r,s,a){return new Promise((n,c)=>{this.getSession(e,r,[{reject:c,resolve:f=>{try{n(f.request(s,a))}catch(p){c(p)}}}])})}createConnection(e,r){return t.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let s=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),Q0t.connect(s,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[xa]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let s of r)s.destroy(e);for(let r of Object.values(this.queue))for(let s of Object.values(r))s.destroyed=!0;this.queue={}}get freeSessions(){return j0e({agent:this,isFree:!0})}get busySessions(){return j0e({agent:this,isFree:!1})}};rm.kCurrentStreamsCount=xa;rm.kGracefullyClosing=gI;G0e.exports={Agent:rm,globalAgent:new rm}});var MH=L((VJt,W0e)=>{"use strict";var{Readable:M0t}=Ie("stream"),LH=class extends M0t{constructor(e,r){super({highWaterMark:r,autoDestroy:!1}),this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,r){return this.req.setTimeout(e,r),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}};W0e.exports=LH});var _H=L((KJt,Y0e)=>{"use strict";Y0e.exports=t=>{let e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return typeof t.port=="string"&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var K0e=L((JJt,V0e)=>{"use strict";V0e.exports=(t,e,r)=>{for(let s of r)t.on(s,(...a)=>e.emit(s,...a))}});var z0e=L((zJt,J0e)=>{"use strict";J0e.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var X0e=L((XJt,Z0e)=>{"use strict";var dI=(t,e,r)=>{Z0e.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};dI(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],s=Array.isArray(r);return s&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${s?"one of":"of"} type ${r}. Received ${typeof t[2]}`});dI(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);dI(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);dI(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);dI(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);dI(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var GH=L(($Jt,sge)=>{"use strict";var _0t=Ie("http2"),{Writable:U0t}=Ie("stream"),{Agent:$0e,globalAgent:H0t}=OH(),j0t=MH(),q0t=_H(),G0t=K0e(),W0t=z0e(),{ERR_INVALID_ARG_TYPE:UH,ERR_INVALID_PROTOCOL:Y0t,ERR_HTTP_HEADERS_SENT:ege,ERR_INVALID_HTTP_TOKEN:V0t,ERR_HTTP_INVALID_HEADER_VALUE:K0t,ERR_INVALID_CHAR:J0t}=X0e(),{HTTP2_HEADER_STATUS:tge,HTTP2_HEADER_METHOD:rge,HTTP2_HEADER_PATH:nge,HTTP2_METHOD_CONNECT:z0t}=_0t.constants,Jo=Symbol("headers"),HH=Symbol("origin"),jH=Symbol("session"),ige=Symbol("options"),YQ=Symbol("flushedHeaders"),iv=Symbol("jobs"),Z0t=/^[\^`\-\w!#$%&*+.|~]+$/,X0t=/[^\t\u0020-\u007E\u0080-\u00FF]/,qH=class extends U0t{constructor(e,r,s){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=q0t(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(s=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[jH]=r.h2session;else if(r.agent===!1)this.agent=new $0e({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new $0e({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=H0t;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new UH("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new Y0t(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,c=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:f}=r;if(r.timeout=void 0,this[Jo]=Object.create(null),this[iv]=[],this.socket=null,this.connection=null,this.method=r.method||"GET",this.path=r.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,r.headers)for(let[p,h]of Object.entries(r.headers))this.setHeader(p,h);r.auth&&!("authorization"in this[Jo])&&(this[Jo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[ige]=r,n===443?(this[HH]=`https://${c}`,":authority"in this[Jo]||(this[Jo][":authority"]=c)):(this[HH]=`https://${c}:${n}`,":authority"in this[Jo]||(this[Jo][":authority"]=`${c}:${n}`)),f&&this.setTimeout(f),s&&this.once("response",s),this[YQ]=!1}get method(){return this[Jo][rge]}set method(e){e&&(this[Jo][rge]=e.toUpperCase())}get path(){return this[Jo][nge]}set path(e){e&&(this[Jo][nge]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,s){if(this._mustNotHaveABody){s(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,s);this._request?a():this[iv].push(a)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[iv].push(r)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.destroy(),r(e)}async flushHeaders(){if(this[YQ]||this.destroyed)return;this[YQ]=!0;let e=this.method===z0t,r=s=>{if(this._request=s,this.destroyed){s.destroy();return}e||G0t(s,this,["timeout","continue","close","error"]);let a=c=>(...f)=>{!this.writable&&!this.destroyed?c(...f):this.once("finish",()=>{c(...f)})};s.once("response",a((c,f,p)=>{let h=new j0t(this.socket,s.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=c[tge],h.headers=c,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,s,Buffer.alloc(0))?this.emit("close"):s.destroy()):(s.on("data",E=>{!h._dumped&&!h.push(E)&&s.pause()}),s.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),s.once("headers",a(c=>this.emit("information",{statusCode:c[tge]}))),s.once("trailers",a((c,f,p)=>{let{res:h}=this;h.trailers=c,h.rawTrailers=p}));let{socket:n}=s.session;this.socket=n,this.connection=n;for(let c of this[iv])c();this.emit("socket",this.socket)};if(this[jH])try{r(this[jH].request(this[Jo]))}catch(s){this.emit("error",s)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[HH],this[ige],this[Jo]))}catch(s){this.emit("error",s)}}}getHeader(e){if(typeof e!="string")throw new UH("name","string",e);return this[Jo][e.toLowerCase()]}get headersSent(){return this[YQ]}removeHeader(e){if(typeof e!="string")throw new UH("name","string",e);if(this.headersSent)throw new ege("remove");delete this[Jo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new ege("set");if(typeof e!="string"||!Z0t.test(e)&&!W0t(e))throw new V0t("Header name",e);if(typeof r>"u")throw new K0t(r,e);if(X0t.test(r))throw new J0t("header content",e);this[Jo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let s=()=>this._request.setTimeout(e,r);return this._request?s():this[iv].push(s),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};sge.exports=qH});var age=L((ezt,oge)=>{"use strict";var $0t=Ie("tls");oge.exports=(t={},e=$0t.connect)=>new Promise((r,s)=>{let a=!1,n,c=async()=>{await p,n.off("timeout",f),n.off("error",s),t.resolveSocket?(r({alpnProtocol:n.alpnProtocol,socket:n,timeout:a}),a&&(await Promise.resolve(),n.emit("timeout"))):(n.destroy(),r({alpnProtocol:n.alpnProtocol,timeout:a}))},f=async()=>{a=!0,c()},p=(async()=>{try{n=await e(t,c),n.on("error",s),n.once("timeout",f)}catch(h){s(h)}})()})});var cge=L((tzt,lge)=>{"use strict";var egt=Ie("net");lge.exports=t=>{let e=t.host,r=t.headers&&t.headers.host;return r&&(r.startsWith("[")?r.indexOf("]")===-1?e=r:e=r.slice(1,-1):e=r.split(":",1)[0]),egt.isIP(e)?"":e}});var Age=L((rzt,YH)=>{"use strict";var uge=Ie("http"),WH=Ie("https"),tgt=age(),rgt=FH(),ngt=GH(),igt=cge(),sgt=_H(),VQ=new rgt({maxSize:100}),sv=new Map,fge=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let s=()=>{t.emit("free",e,r)};e.on("free",s);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",s),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},ogt=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!VQ.has(e)){if(sv.has(e))return(await sv.get(e)).alpnProtocol;let{path:r,agent:s}=t;t.path=t.socketPath;let a=tgt(t);sv.set(e,a);try{let{socket:n,alpnProtocol:c}=await a;if(VQ.set(e,c),t.path=r,c==="h2")n.destroy();else{let{globalAgent:f}=WH,p=WH.Agent.prototype.createConnection;s?s.createConnection===p?fge(s,n,t):n.destroy():f.createConnection===p?fge(f,n,t):n.destroy()}return sv.delete(e),c}catch(n){throw sv.delete(e),n}}return VQ.get(e)};YH.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=sgt(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={ALPNProtocols:["h2","http/1.1"],...t,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let s=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||igt(e),e.port=e.port||(s?443:80),e._defaultAgent=s?WH.globalAgent:uge.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[s?"https":"http"]}return s&&await ogt(e)==="h2"?(a&&(e.agent=a.http2),new ngt(e,r)):uge.request(e,r)};YH.exports.protocolCache=VQ});var hge=L((nzt,pge)=>{"use strict";var agt=Ie("http2"),lgt=OH(),VH=GH(),cgt=MH(),ugt=Age(),fgt=(t,e,r)=>new VH(t,e,r),Agt=(t,e,r)=>{let s=new VH(t,e,r);return s.end(),s};pge.exports={...agt,ClientRequest:VH,IncomingMessage:cgt,...lgt,request:fgt,get:Agt,auto:ugt}});var JH=L(KH=>{"use strict";Object.defineProperty(KH,"__esModule",{value:!0});var gge=Lp();KH.default=t=>gge.default.nodeStream(t)&&gge.default.function_(t.getBoundary)});var Ege=L(zH=>{"use strict";Object.defineProperty(zH,"__esModule",{value:!0});var mge=Ie("fs"),yge=Ie("util"),dge=Lp(),pgt=JH(),hgt=yge.promisify(mge.stat);zH.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(dge.default.string(t))return Buffer.byteLength(t);if(dge.default.buffer(t))return t.length;if(pgt.default(t))return yge.promisify(t.getLength.bind(t))();if(t instanceof mge.ReadStream){let{size:r}=await hgt(t.path);return r===0?void 0:r}}});var XH=L(ZH=>{"use strict";Object.defineProperty(ZH,"__esModule",{value:!0});function ggt(t,e,r){let s={};for(let a of r)s[a]=(...n)=>{e.emit(a,...n)},t.on(a,s[a]);return()=>{for(let a of r)t.off(a,s[a])}}ZH.default=ggt});var Ige=L($H=>{"use strict";Object.defineProperty($H,"__esModule",{value:!0});$H.default=()=>{let t=[];return{once(e,r,s){e.once(r,s),t.push({origin:e,event:r,fn:s})},unhandleAll(){for(let e of t){let{origin:r,event:s,fn:a}=e;r.removeListener(s,a)}t.length=0}}}});var wge=L(ov=>{"use strict";Object.defineProperty(ov,"__esModule",{value:!0});ov.TimeoutError=void 0;var dgt=Ie("net"),mgt=Ige(),Cge=Symbol("reentry"),ygt=()=>{},KQ=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};ov.TimeoutError=KQ;ov.default=(t,e,r)=>{if(Cge in t)return ygt;t[Cge]=!0;let s=[],{once:a,unhandleAll:n}=mgt.default(),c=(C,S,P)=>{var I;let R=setTimeout(S,C,C,P);(I=R.unref)===null||I===void 0||I.call(R);let N=()=>{clearTimeout(R)};return s.push(N),N},{host:f,hostname:p}=r,h=(C,S)=>{t.destroy(new KQ(C,S))},E=()=>{for(let C of s)C();n()};if(t.once("error",C=>{if(E(),t.listenerCount("error")===0)throw C}),t.once("close",E),a(t,"response",C=>{a(C,"end",E)}),typeof e.request<"u"&&c(e.request,h,"request"),typeof e.socket<"u"){let C=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,C),s.push(()=>{t.removeListener("timeout",C)})}return a(t,"socket",C=>{var S;let{socketPath:P}=t;if(C.connecting){let I=!!(P??dgt.isIP((S=p??f)!==null&&S!==void 0?S:"")!==0);if(typeof e.lookup<"u"&&!I&&typeof C.address().address>"u"){let R=c(e.lookup,h,"lookup");a(C,"lookup",R)}if(typeof e.connect<"u"){let R=()=>c(e.connect,h,"connect");I?a(C,"connect",R()):a(C,"lookup",N=>{N===null&&a(C,"connect",R())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(C,"connect",()=>{let R=c(e.secureConnect,h,"secureConnect");a(C,"secureConnect",R)})}if(typeof e.send<"u"){let I=()=>c(e.send,h,"send");C.connecting?a(C,"connect",()=>{a(t,"upload-complete",I())}):a(t,"upload-complete",I())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let C=c(e.response,h,"response");a(t,"response",C)}),E}});var vge=L(ej=>{"use strict";Object.defineProperty(ej,"__esModule",{value:!0});var Bge=Lp();ej.default=t=>{t=t;let e={protocol:t.protocol,hostname:Bge.default.string(t.hostname)&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return Bge.default.string(t.port)&&t.port.length>0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var Sge=L(tj=>{"use strict";Object.defineProperty(tj,"__esModule",{value:!0});var Egt=Ie("url"),Igt=["protocol","host","hostname","port","pathname","search"];tj.default=(t,e)=>{var r,s;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(s=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&s!==void 0?s:""}`}let a=new Egt.URL(t);if(e.path){let n=e.path.indexOf("?");n===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,n),e.search=e.path.slice(n+1)),delete e.path}for(let n of Igt)e[n]&&(a[n]=e[n].toString());return a}});var Dge=L(nj=>{"use strict";Object.defineProperty(nj,"__esModule",{value:!0});var rj=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}};nj.default=rj});var sj=L(ij=>{"use strict";Object.defineProperty(ij,"__esModule",{value:!0});var Cgt=async t=>{let e=[],r=0;for await(let s of t)e.push(s),r+=Buffer.byteLength(s);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};ij.default=Cgt});var Pge=L(nm=>{"use strict";Object.defineProperty(nm,"__esModule",{value:!0});nm.dnsLookupIpVersionToFamily=nm.isDnsLookupIpVersion=void 0;var bge={auto:0,ipv4:4,ipv6:6};nm.isDnsLookupIpVersion=t=>t in bge;nm.dnsLookupIpVersionToFamily=t=>{if(nm.isDnsLookupIpVersion(t))return bge[t];throw new Error("Invalid DNS lookup IP version")}});var oj=L(JQ=>{"use strict";Object.defineProperty(JQ,"__esModule",{value:!0});JQ.isResponseOk=void 0;JQ.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var kge=L(aj=>{"use strict";Object.defineProperty(aj,"__esModule",{value:!0});var xge=new Set;aj.default=t=>{xge.has(t)||(xge.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var Qge=L(lj=>{"use strict";Object.defineProperty(lj,"__esModule",{value:!0});var bi=Lp(),wgt=(t,e)=>{if(bi.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");bi.assert.any([bi.default.string,bi.default.undefined],t.encoding),bi.assert.any([bi.default.boolean,bi.default.undefined],t.resolveBodyOnly),bi.assert.any([bi.default.boolean,bi.default.undefined],t.methodRewriting),bi.assert.any([bi.default.boolean,bi.default.undefined],t.isStream),bi.assert.any([bi.default.string,bi.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:s=>s.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},bi.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(s=>s.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):bi.default.number(r)&&(t.retry.limit=r),bi.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(bi.default.number))),bi.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:s}=t;if(!bi.default.function_(s.transform))throw new Error("`options.pagination.transform` must be implemented");if(!bi.default.function_(s.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!bi.default.function_(s.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!bi.default.function_(s.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};lj.default=wgt});var Tge=L(av=>{"use strict";Object.defineProperty(av,"__esModule",{value:!0});av.retryAfterStatusCodes=void 0;av.retryAfterStatusCodes=new Set([413,429,503]);var Bgt=({attemptCount:t,retryOptions:e,error:r,retryAfter:s})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),c=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!c)return 0;if(r.response){if(s)return e.maxRetryAfter===void 0||s>e.maxRetryAfter?0:s;if(r.response.statusCode===413)return 0}let f=Math.random()*100;return 2**(t-1)*1e3+f};av.default=Bgt});var uv=L(Ln=>{"use strict";Object.defineProperty(Ln,"__esModule",{value:!0});Ln.UnsupportedProtocolError=Ln.ReadError=Ln.TimeoutError=Ln.UploadError=Ln.CacheError=Ln.HTTPError=Ln.MaxRedirectsError=Ln.RequestError=Ln.setNonEnumerableProperties=Ln.knownHookEvents=Ln.withoutBody=Ln.kIsNormalizedAlready=void 0;var Rge=Ie("util"),Fge=Ie("stream"),vgt=Ie("fs"),C0=Ie("url"),Nge=Ie("http"),cj=Ie("http"),Sgt=Ie("https"),Dgt=Jhe(),bgt=r0e(),Oge=N0e(),Pgt=_0e(),xgt=hge(),kgt=GQ(),at=Lp(),Qgt=Ege(),Lge=JH(),Tgt=XH(),Mge=wge(),Rgt=vge(),_ge=Sge(),Fgt=Dge(),Ngt=sj(),Uge=Pge(),Ogt=oj(),w0=kge(),Lgt=Qge(),Mgt=Tge(),uj,go=Symbol("request"),XQ=Symbol("response"),mI=Symbol("responseSize"),yI=Symbol("downloadedSize"),EI=Symbol("bodySize"),II=Symbol("uploadedSize"),zQ=Symbol("serverResponsesPiped"),Hge=Symbol("unproxyEvents"),jge=Symbol("isFromCache"),fj=Symbol("cancelTimeouts"),qge=Symbol("startedReading"),CI=Symbol("stopReading"),ZQ=Symbol("triggerRead"),B0=Symbol("body"),lv=Symbol("jobs"),Gge=Symbol("originalResponse"),Wge=Symbol("retryTimeout");Ln.kIsNormalizedAlready=Symbol("isNormalizedAlready");var _gt=at.default.string(process.versions.brotli);Ln.withoutBody=new Set(["GET","HEAD"]);Ln.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function Ugt(t){for(let e in t){let r=t[e];if(!at.default.string(r)&&!at.default.number(r)&&!at.default.boolean(r)&&!at.default.null_(r)&&!at.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function Hgt(t){return at.default.object(t)&&!("statusCode"in t)}var Aj=new Fgt.default,jgt=async t=>new Promise((e,r)=>{let s=a=>{r(a)};t.pending||e(),t.once("error",s),t.once("ready",()=>{t.off("error",s),e()})}),qgt=new Set([300,301,302,303,304,307,308]),Ggt=["context","body","json","form"];Ln.setNonEnumerableProperties=(t,e)=>{let r={};for(let s of t)if(s)for(let a of Ggt)a in s&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:s[a]});Object.defineProperties(e,r)};var As=class extends Error{constructor(e,r,s){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,s instanceof sT?(Object.defineProperty(this,"request",{enumerable:!1,value:s}),Object.defineProperty(this,"response",{enumerable:!1,value:s[XQ]}),Object.defineProperty(this,"options",{enumerable:!1,value:s.options})):Object.defineProperty(this,"options",{enumerable:!1,value:s}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,at.default.string(r.stack)&&at.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,c=this.stack.slice(n).split(` -`).reverse(),f=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` -`).reverse();for(;f.length!==0&&f[0]===c[0];)c.shift();this.stack=`${this.stack.slice(0,n)}${c.reverse().join(` -`)}${f.reverse().join(` -`)}`}}};Ln.RequestError=As;var $Q=class extends As{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Ln.MaxRedirectsError=$Q;var eT=class extends As{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Ln.HTTPError=eT;var tT=class extends As{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Ln.CacheError=tT;var rT=class extends As{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Ln.UploadError=rT;var nT=class extends As{constructor(e,r,s){super(e.message,e,s),this.name="TimeoutError",this.event=e.event,this.timings=r}};Ln.TimeoutError=nT;var cv=class extends As{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Ln.ReadError=cv;var iT=class extends As{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Ln.UnsupportedProtocolError=iT;var Wgt=["socket","connect","continue","information","upgrade","timeout"],sT=class extends Fge.Duplex{constructor(e,r={},s){super({autoDestroy:!1,highWaterMark:0}),this[yI]=0,this[II]=0,this.requestInitialized=!1,this[zQ]=new Set,this.redirects=[],this[CI]=!1,this[ZQ]=!1,this[lv]=[],this.retryCount=0,this._progressCallbacks=[];let a=()=>this._unlockWrite(),n=()=>this._lockWrite();this.on("pipe",h=>{h.prependListener("data",a),h.on("data",n),h.prependListener("end",a),h.on("end",n)}),this.on("unpipe",h=>{h.off("data",a),h.off("data",n),h.off("end",a),h.off("end",n)}),this.on("pipe",h=>{h instanceof cj.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:c,body:f,form:p}=r;if((c||f||p)&&this._lockWrite(),Ln.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,s)}catch(h){at.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof vgt.ReadStream&&await jgt(this.options.body);let{url:E}=this.options;if(!E)throw new TypeError("Missing `url` property");if(this.requestUrl=E.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(h=this[go])===null||h===void 0||h.destroy();return}for(let C of this[lv])C();this[lv].length=0,this.requestInitialized=!0}catch(E){if(E instanceof As){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,s){var a,n,c,f,p;let h=r;if(at.default.object(e)&&!at.default.urlInstance(e))r={...s,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...s,...r},e!==void 0&&(r.url=e),at.default.urlInstance(r.url)&&(r.url=new C0.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),at.assert.any([at.default.string,at.default.undefined],r.method),at.assert.any([at.default.object,at.default.undefined],r.headers),at.assert.any([at.default.string,at.default.urlInstance,at.default.undefined],r.prefixUrl),at.assert.any([at.default.object,at.default.undefined],r.cookieJar),at.assert.any([at.default.object,at.default.string,at.default.undefined],r.searchParams),at.assert.any([at.default.object,at.default.string,at.default.undefined],r.cache),at.assert.any([at.default.object,at.default.number,at.default.undefined],r.timeout),at.assert.any([at.default.object,at.default.undefined],r.context),at.assert.any([at.default.object,at.default.undefined],r.hooks),at.assert.any([at.default.boolean,at.default.undefined],r.decompress),at.assert.any([at.default.boolean,at.default.undefined],r.ignoreInvalidCookies),at.assert.any([at.default.boolean,at.default.undefined],r.followRedirect),at.assert.any([at.default.number,at.default.undefined],r.maxRedirects),at.assert.any([at.default.boolean,at.default.undefined],r.throwHttpErrors),at.assert.any([at.default.boolean,at.default.undefined],r.http2),at.assert.any([at.default.boolean,at.default.undefined],r.allowGetBody),at.assert.any([at.default.string,at.default.undefined],r.localAddress),at.assert.any([Uge.isDnsLookupIpVersion,at.default.undefined],r.dnsLookupIpVersion),at.assert.any([at.default.object,at.default.undefined],r.https),at.assert.any([at.default.boolean,at.default.undefined],r.rejectUnauthorized),r.https&&(at.assert.any([at.default.boolean,at.default.undefined],r.https.rejectUnauthorized),at.assert.any([at.default.function_,at.default.undefined],r.https.checkServerIdentity),at.assert.any([at.default.string,at.default.object,at.default.array,at.default.undefined],r.https.certificateAuthority),at.assert.any([at.default.string,at.default.object,at.default.array,at.default.undefined],r.https.key),at.assert.any([at.default.string,at.default.object,at.default.array,at.default.undefined],r.https.certificate),at.assert.any([at.default.string,at.default.undefined],r.https.passphrase),at.assert.any([at.default.string,at.default.buffer,at.default.array,at.default.undefined],r.https.pfx)),at.assert.any([at.default.object,at.default.undefined],r.cacheOptions),at.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===s?.headers?r.headers={...r.headers}:r.headers=kgt({...s?.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==s?.searchParams){let P;if(at.default.string(r.searchParams)||r.searchParams instanceof C0.URLSearchParams)P=new C0.URLSearchParams(r.searchParams);else{Ugt(r.searchParams),P=new C0.URLSearchParams;for(let I in r.searchParams){let R=r.searchParams[I];R===null?P.append(I,""):R!==void 0&&P.append(I,R)}}(a=s?.searchParams)===null||a===void 0||a.forEach((I,R)=>{P.has(R)||P.append(R,I)}),r.searchParams=P}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(c=r.password)!==null&&c!==void 0?c:"",at.default.undefined(r.prefixUrl)?r.prefixUrl=(f=s?.prefixUrl)!==null&&f!==void 0?f:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),at.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=_ge.default(r.prefixUrl+r.url,r)}else(at.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=_ge.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:P}=r;Object.defineProperty(r,"prefixUrl",{set:R=>{let N=r.url;if(!N.href.startsWith(R))throw new Error(`Cannot change \`prefixUrl\` from ${P} to ${R}: ${N.href}`);r.url=new C0.URL(R+N.href.slice(P.length)),P=R},get:()=>P});let{protocol:I}=r.url;if(I==="unix:"&&(I="http:",r.url=new C0.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),I!=="http:"&&I!=="https:")throw new iT(r);r.username===""?r.username=r.url.username:r.url.username=r.username,r.password===""?r.password=r.url.password:r.url.password=r.password}let{cookieJar:E}=r;if(E){let{setCookie:P,getCookieString:I}=E;at.assert.function_(P),at.assert.function_(I),P.length===4&&I.length===0&&(P=Rge.promisify(P.bind(r.cookieJar)),I=Rge.promisify(I.bind(r.cookieJar)),r.cookieJar={setCookie:P,getCookieString:I})}let{cache:C}=r;if(C&&(Aj.has(C)||Aj.set(C,new Oge((P,I)=>{let R=P[go](P,I);return at.default.promise(R)&&(R.once=(N,U)=>{if(N==="error")R.catch(U);else if(N==="abort")(async()=>{try{(await R).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${N}`);return R}),R},C))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)uj||(uj=new bgt.default),r.dnsCache=uj;else if(!at.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${at.default(r.dnsCache)}`);at.default.number(r.timeout)?r.timeout={request:r.timeout}:s&&r.timeout!==s.timeout?r.timeout={...s.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let S=r.hooks===s?.hooks;r.hooks={...r.hooks};for(let P of Ln.knownHookEvents)if(P in r.hooks)if(at.default.array(r.hooks[P]))r.hooks[P]=[...r.hooks[P]];else throw new TypeError(`Parameter \`${P}\` must be an Array, got ${at.default(r.hooks[P])}`);else r.hooks[P]=[];if(s&&!S)for(let P of Ln.knownHookEvents)s.hooks[P].length>0&&(r.hooks[P]=[...s.hooks[P],...r.hooks[P]]);if("family"in r&&w0.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),s?.https&&(r.https={...s.https,...r.https}),"rejectUnauthorized"in r&&w0.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&w0.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&w0.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&w0.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&w0.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&w0.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&w0.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent){for(let P in r.agent)if(P!=="http"&&P!=="https"&&P!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${P}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Ln.setNonEnumerableProperties([s,h],r),Lgt.default(r,s)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,s=!at.default.undefined(e.form),a=!at.default.undefined(e.json),n=!at.default.undefined(e.body),c=s||a||n,f=Ln.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=f,c){if(f)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,s,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Fge.Readable)&&!at.default.string(e.body)&&!at.default.buffer(e.body)&&!Lge.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(s&&!at.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!at.default.string(r["content-type"]);n?(Lge.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[B0]=e.body):s?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[B0]=new C0.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[B0]=e.stringifyJson(e.json));let h=await Qgt.default(this[B0],e.headers);at.default.undefined(r["content-length"])&&at.default.undefined(r["transfer-encoding"])&&!f&&!at.default.undefined(h)&&(r["content-length"]=String(h))}}else f?this._lockWrite():this._unlockWrite();this[EI]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:s}=r;this[Gge]=e,r.decompress&&(e=Pgt(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Nge.STATUS_CODES[a],n.url=r.url.toString(),n.requestUrl=this.requestUrl,n.redirectUrls=this.redirects,n.request=this,n.isFromCache=e.fromCache||!1,n.ip=this.ip,n.retryCount=this.retryCount,this[jge]=n.isFromCache,this[mI]=Number(e.headers["content-length"])||void 0,this[XQ]=e,e.once("end",()=>{this[mI]=this[yI],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",f=>{e.destroy(),this._beforeError(new cv(f,this))}),e.once("aborted",()=>{this._beforeError(new cv({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let c=e.headers["set-cookie"];if(at.default.object(r.cookieJar)&&c){let f=c.map(async p=>r.cookieJar.setCookie(p,s.toString()));r.ignoreInvalidCookies&&(f=f.map(async p=>p.catch(()=>{})));try{await Promise.all(f)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&qgt.has(a)){if(e.resume(),this[go]&&(this[fj](),delete this[go],this[Hge]()),(a===303&&r.method!=="GET"&&r.method!=="HEAD"||!r.methodRewriting)&&(r.method="GET","body"in r&&delete r.body,"json"in r&&delete r.json,"form"in r&&delete r.form,this[B0]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new $Q(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new C0.URL(p,s),E=h.toString();decodeURI(E),h.hostname!==s.hostname||h.port!==s.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(h.username=r.username,h.password=r.password),this.redirects.push(E),r.url=h;for(let C of r.hooks.beforeRedirect)await C(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!Ogt.isResponseOk(n)){this._beforeError(new eT(n));return}e.on("readable",()=>{this[ZQ]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let f of this[zQ])if(!f.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&f.setHeader(p,E)}f.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:s,url:a}=r;Dgt.default(e),this[fj]=Mge.default(e,s,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof Mge.TimeoutError?new nT(p,this.timings,this):new As(p.message,p,this),this._beforeError(p)}),this[Hge]=Tgt.default(e,this,Wgt),this[go]=e,this.emit("uploadProgress",this.uploadProgress);let c=this[B0],f=this.redirects.length===0?this:e;at.default.nodeStream(c)?(c.pipe(f),c.once("error",p=>{this._beforeError(new rT(p,this))})):(this._unlockWrite(),at.default.undefined(c)?(this._cannotHaveBody||this._noPipe)&&(f.end(),this._lockWrite()):(this._writeRequest(c,void 0,()=>{}),f.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((s,a)=>{Object.assign(r,Rgt.default(e)),delete r.url;let n,c=Aj.get(r.cache)(r,async f=>{f._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",f),s(f)});r.url=e,c.once("error",a),c.once("request",async f=>{n=f,s(n)})})}async _makeRequest(){var e,r,s,a,n;let{options:c}=this,{headers:f}=c;for(let U in f)if(at.default.undefined(f[U]))delete f[U];else if(at.default.null_(f[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(c.decompress&&at.default.undefined(f["accept-encoding"])&&(f["accept-encoding"]=_gt?"gzip, deflate, br":"gzip, deflate"),c.cookieJar){let U=await c.cookieJar.getCookieString(c.url.toString());at.default.nonEmptyString(U)&&(c.headers.cookie=U)}for(let U of c.hooks.beforeRequest){let W=await U(c);if(!at.default.undefined(W)){c.request=()=>W;break}}c.body&&this[B0]!==c.body&&(this[B0]=c.body);let{agent:p,request:h,timeout:E,url:C}=c;if(c.dnsCache&&!("lookup"in c)&&(c.lookup=c.dnsCache.lookup),C.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${C.pathname}${C.search}`);if(U?.groups){let{socketPath:W,path:te}=U.groups;Object.assign(c,{socketPath:W,path:te,host:""})}}let S=C.protocol==="https:",P;c.http2?P=xgt.auto:P=S?Sgt.request:Nge.request;let I=(e=c.request)!==null&&e!==void 0?e:P,R=c.cache?this._createCacheableRequest:I;p&&!c.http2&&(c.agent=p[S?"https":"http"]),c[go]=I,delete c.request,delete c.timeout;let N=c;if(N.shared=(r=c.cacheOptions)===null||r===void 0?void 0:r.shared,N.cacheHeuristic=(s=c.cacheOptions)===null||s===void 0?void 0:s.cacheHeuristic,N.immutableMinTimeToLive=(a=c.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,N.ignoreCargoCult=(n=c.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,c.dnsLookupIpVersion!==void 0)try{N.family=Uge.dnsLookupIpVersionToFamily(c.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}c.https&&("rejectUnauthorized"in c.https&&(N.rejectUnauthorized=c.https.rejectUnauthorized),c.https.checkServerIdentity&&(N.checkServerIdentity=c.https.checkServerIdentity),c.https.certificateAuthority&&(N.ca=c.https.certificateAuthority),c.https.certificate&&(N.cert=c.https.certificate),c.https.key&&(N.key=c.https.key),c.https.passphrase&&(N.passphrase=c.https.passphrase),c.https.pfx&&(N.pfx=c.https.pfx));try{let U=await R(C,N);at.default.undefined(U)&&(U=P(C,N)),c.request=h,c.timeout=E,c.agent=p,c.https&&("rejectUnauthorized"in c.https&&delete N.rejectUnauthorized,c.https.checkServerIdentity&&delete N.checkServerIdentity,c.https.certificateAuthority&&delete N.ca,c.https.certificate&&delete N.cert,c.https.key&&delete N.key,c.https.passphrase&&delete N.passphrase,c.https.pfx&&delete N.pfx),Hgt(U)?this._onRequest(U):this.writable?(this.once("finish",()=>{this._onResponse(U)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(U)}catch(U){throw U instanceof Oge.CacheError?new tT(U,this):new As(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new As(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[CI])return;let{options:r}=this,s=this.retryCount+1;this[CI]=!0,e instanceof As||(e=new As(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await Ngt.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let c;try{let f;n&&"retry-after"in n.headers&&(f=Number(n.headers["retry-after"]),Number.isNaN(f)?(f=Date.parse(n.headers["retry-after"])-Date.now(),f<=0&&(f=1)):f*=1e3),c=await r.retry.calculateDelay({attemptCount:s,retryOptions:r.retry,error:a,retryAfter:f,computedValue:Mgt.default({attemptCount:s,retryOptions:r.retry,error:a,retryAfter:f,computedValue:0})})}catch(f){this._error(new As(f.message,f,this));return}if(c){let f=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,s)}catch(p){this._error(new As(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",s,e))};this[Wge]=setTimeout(f,c);return}}this._error(a)})()}_read(){this[ZQ]=!0;let e=this[XQ];if(e&&!this[CI]){e.readableLength&&(this[ZQ]=!1);let r;for(;(r=e.read())!==null;){this[yI]+=r.length,this[qge]=!0;let s=this.downloadProgress;s.percent<1&&this.emit("downloadProgress",s),this.push(r)}}}_write(e,r,s){let a=()=>{this._writeRequest(e,r,s)};this.requestInitialized?a():this[lv].push(a)}_writeRequest(e,r,s){this[go].destroyed||(this._progressCallbacks.push(()=>{this[II]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[go].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),s(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(go in this)){e();return}if(this[go].destroyed){e();return}this[go].end(s=>{s||(this[EI]=this[II],this.emit("uploadProgress",this.uploadProgress),this[go].emit("upload-complete")),e(s)})};this.requestInitialized?r():this[lv].push(r)}_destroy(e,r){var s;this[CI]=!0,clearTimeout(this[Wge]),go in this&&(this[fj](),!((s=this[XQ])===null||s===void 0)&&s.complete||this[go].destroy()),e!==null&&!at.default.undefined(e)&&!(e instanceof As)&&(e=new As(e.message,e,this)),r(e)}get _isAboutToError(){return this[CI]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,s;return((r=(e=this[go])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((s=this[Gge])===null||s===void 0)&&s.complete)}get socket(){var e,r;return(r=(e=this[go])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[mI]?e=this[yI]/this[mI]:this[mI]===this[yI]?e=1:e=0,{percent:e,transferred:this[yI],total:this[mI]}}get uploadProgress(){let e;return this[EI]?e=this[II]/this[EI]:this[EI]===this[II]?e=1:e=0,{percent:e,transferred:this[II],total:this[EI]}}get timings(){var e;return(e=this[go])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[jge]}pipe(e,r){if(this[qge])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof cj.ServerResponse&&this[zQ].add(e),super.pipe(e,r)}unpipe(e){return e instanceof cj.ServerResponse&&this[zQ].delete(e),super.unpipe(e),this}};Ln.default=sT});var fv=L(Wu=>{"use strict";var Ygt=Wu&&Wu.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),Vgt=Wu&&Wu.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Ygt(e,t,r)};Object.defineProperty(Wu,"__esModule",{value:!0});Wu.CancelError=Wu.ParseError=void 0;var Yge=uv(),pj=class extends Yge.RequestError{constructor(e,r){let{options:s}=r.request;super(`${e.message} in "${s.url.toString()}"`,e,r.request),this.name="ParseError"}};Wu.ParseError=pj;var hj=class extends Yge.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};Wu.CancelError=hj;Vgt(uv(),Wu)});var Kge=L(gj=>{"use strict";Object.defineProperty(gj,"__esModule",{value:!0});var Vge=fv(),Kgt=(t,e,r,s)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(s);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Vge.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Vge.ParseError(n,t)}};gj.default=Kgt});var dj=L(v0=>{"use strict";var Jgt=v0&&v0.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),zgt=v0&&v0.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Jgt(e,t,r)};Object.defineProperty(v0,"__esModule",{value:!0});var Zgt=Ie("events"),Xgt=Lp(),$gt=Vhe(),oT=fv(),Jge=Kge(),zge=uv(),edt=XH(),tdt=sj(),Zge=oj(),rdt=["request","response","redirect","uploadProgress","downloadProgress"];function Xge(t){let e,r,s=new Zgt.EventEmitter,a=new $gt((c,f,p)=>{let h=E=>{let C=new zge.default(void 0,t);C.retryCount=E,C._noPipe=!0,p(()=>C.destroy()),p.shouldReject=!1,p(()=>f(new oT.CancelError(C))),e=C,C.once("response",async I=>{var R;if(I.retryCount=E,I.request.aborted)return;let N;try{N=await tdt.default(C),I.rawBody=N}catch{return}if(C._isAboutToError)return;let U=((R=I.headers["content-encoding"])!==null&&R!==void 0?R:"").toLowerCase(),W=["gzip","deflate","br"].includes(U),{options:te}=C;if(W&&!te.decompress)I.body=N;else try{I.body=Jge.default(I,te.responseType,te.parseJson,te.encoding)}catch(ie){if(I.body=N.toString(),Zge.isResponseOk(I)){C._beforeError(ie);return}}try{for(let[ie,Ae]of te.hooks.afterResponse.entries())I=await Ae(I,async ce=>{let me=zge.default.normalizeArguments(void 0,{...ce,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);me.hooks.afterResponse=me.hooks.afterResponse.slice(0,ie);for(let Be of me.hooks.beforeRetry)await Be(me);let pe=Xge(me);return p(()=>{pe.catch(()=>{}),pe.cancel()}),pe})}catch(ie){C._beforeError(new oT.RequestError(ie.message,ie,C));return}if(!Zge.isResponseOk(I)){C._beforeError(new oT.HTTPError(I));return}r=I,c(C.options.resolveBodyOnly?I.body:I)});let S=I=>{if(a.isCanceled)return;let{options:R}=C;if(I instanceof oT.HTTPError&&!R.throwHttpErrors){let{response:N}=I;c(C.options.resolveBodyOnly?N.body:N);return}f(I)};C.once("error",S);let P=C.options.body;C.once("retry",(I,R)=>{var N,U;if(P===((N=R.request)===null||N===void 0?void 0:N.options.body)&&Xgt.default.nodeStream((U=R.request)===null||U===void 0?void 0:U.options.body)){S(R);return}h(I)}),edt.default(C,s,rdt)};h(0)});a.on=(c,f)=>(s.on(c,f),a);let n=c=>{let f=(async()=>{await a;let{options:p}=r.request;return Jge.default(r,c,p.parseJson,p.encoding)})();return Object.defineProperties(f,Object.getOwnPropertyDescriptors(a)),f};return a.json=()=>{let{headers:c}=e.options;return!e.writableFinished&&c.accept===void 0&&(c.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}v0.default=Xge;zgt(fv(),v0)});var $ge=L(mj=>{"use strict";Object.defineProperty(mj,"__esModule",{value:!0});var ndt=fv();function idt(t,...e){let r=(async()=>{if(t instanceof ndt.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),s=()=>r;return r.json=s,r.text=s,r.buffer=s,r.on=s,r}mj.default=idt});var rde=L(yj=>{"use strict";Object.defineProperty(yj,"__esModule",{value:!0});var ede=Lp();function tde(t){for(let e of Object.values(t))(ede.default.plainObject(e)||ede.default.array(e))&&tde(e);return Object.freeze(t)}yj.default=tde});var ide=L(nde=>{"use strict";Object.defineProperty(nde,"__esModule",{value:!0})});var Ej=L(Lc=>{"use strict";var sdt=Lc&&Lc.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),odt=Lc&&Lc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&sdt(e,t,r)};Object.defineProperty(Lc,"__esModule",{value:!0});Lc.defaultHandler=void 0;var sde=Lp(),Oc=dj(),adt=$ge(),lT=uv(),ldt=rde(),cdt={RequestError:Oc.RequestError,CacheError:Oc.CacheError,ReadError:Oc.ReadError,HTTPError:Oc.HTTPError,MaxRedirectsError:Oc.MaxRedirectsError,TimeoutError:Oc.TimeoutError,ParseError:Oc.ParseError,CancelError:Oc.CancelError,UnsupportedProtocolError:Oc.UnsupportedProtocolError,UploadError:Oc.UploadError},udt=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:aT}=lT.default,ode=(...t)=>{let e;for(let r of t)e=aT(void 0,r,e);return e},fdt=t=>t.isStream?new lT.default(void 0,t):Oc.default(t),Adt=t=>"defaults"in t&&"options"in t.defaults,pdt=["get","post","put","patch","head","delete"];Lc.defaultHandler=(t,e)=>e(t);var ade=(t,e)=>{if(t)for(let r of t)r(e)},lde=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(s=>(a,n)=>{let c,f=s(a,p=>(c=n(p),c));if(f!==c&&!a.isStream&&c){let p=f,{then:h,catch:E,finally:C}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(c)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(c)),p.then=h,p.catch=E,p.finally=C}return f});let e=(s,a={},n)=>{var c,f;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?fdt:h);if(sde.default.plainObject(s)){let E={...s,...a};lT.setNonEnumerableProperties([s,a],E),a=E,s=void 0}try{let E;try{ade(t.options.hooks.init,a),ade((c=a.hooks)===null||c===void 0?void 0:c.init,a)}catch(S){E=S}let C=aT(s,a,n??t.options);if(C[lT.kIsNormalizedAlready]=!0,E)throw new Oc.RequestError(E.message,E,C);return h(C)}catch(E){if(a.isStream)throw E;return adt.default(E,t.options.hooks.beforeError,(f=a.hooks)===null||f===void 0?void 0:f.beforeError)}};e.extend=(...s)=>{let a=[t.options],n=[...t._rawHandlers],c;for(let f of s)Adt(f)?(a.push(f.defaults.options),n.push(...f.defaults._rawHandlers),c=f.defaults.mutableDefaults):(a.push(f),"handlers"in f&&n.push(...f.handlers),c=f.mutableDefaults);return n=n.filter(f=>f!==Lc.defaultHandler),n.length===0&&n.push(Lc.defaultHandler),lde({options:ode(...a),handlers:n,mutableDefaults:!!c})};let r=async function*(s,a){let n=aT(s,a,t.options);n.resolveBodyOnly=!1;let c=n.pagination;if(!sde.default.object(c))throw new TypeError("`options.pagination` must be implemented");let f=[],{countLimit:p}=c,h=0;for(;h{let n=[];for await(let c of r(s,a))n.push(c);return n},e.paginate.each=r,e.stream=(s,a)=>e(s,{...a,isStream:!0});for(let s of pdt)e[s]=(a,n)=>e(a,{...n,method:s}),e.stream[s]=(a,n)=>e(a,{...n,method:s,isStream:!0});return Object.assign(e,cdt),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:ldt.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=ode,e};Lc.default=lde;odt(ide(),Lc)});var fde=L((Mp,cT)=>{"use strict";var hdt=Mp&&Mp.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),cde=Mp&&Mp.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&hdt(e,t,r)};Object.defineProperty(Mp,"__esModule",{value:!0});var gdt=Ie("url"),ude=Ej(),ddt={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let s of e){let a=s.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new gdt.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[ude.defaultHandler],mutableDefaults:!1},Ij=ude.default(ddt);Mp.default=Ij;cT.exports=Ij;cT.exports.default=Ij;cT.exports.__esModule=!0;cde(Ej(),Mp);cde(dj(),Mp)});var An={};Vt(An,{Method:()=>mde,del:()=>Cdt,get:()=>Bj,getNetworkSettings:()=>dde,post:()=>vj,put:()=>Idt,request:()=>Av});async function Cj(t){return Vl(pde,t,()=>le.readFilePromise(t).then(e=>(pde.set(t,e),e)))}function Edt({statusCode:t,statusMessage:e},r){let s=Ut(r,t,pt.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return KE(r,`${s}${e?` (${e})`:""}`,a)}async function uT(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(s){if(s.name!=="HTTPError")throw s;let a=r?.(s,e)??s.response.body?.error;a==null&&(s.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=s.message),s.code==="ETIMEDOUT"&&s.event==="socket"&&(a+=`(can be increased via ${Ut(e,"httpTimeout",pt.SETTING)})`);let n=new Yt(35,a,c=>{s.response&&c.reportError(35,` ${Zf(e,{label:"Response Code",value:Hu(pt.NO_HINT,Edt(s.response,e))})}`),s.request&&(c.reportError(35,` ${Zf(e,{label:"Request Method",value:Hu(pt.NO_HINT,s.request.options.method)})}`),c.reportError(35,` ${Zf(e,{label:"Request URL",value:Hu(pt.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&c.reportError(35,` ${Zf(e,{label:"Request Redirects",value:Hu(pt.NO_HINT,f3(e,s.request.redirects,pt.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&c.reportError(35,` ${Zf(e,{label:"Request Retry Count",value:Hu(pt.NO_HINT,`${Ut(e,s.request.retryCount,pt.NUMBER)} (can be increased via ${Ut(e,"httpRetry",pt.SETTING)})`)})}`)});throw n.originalError=s,n}}function dde(t,e){let r=[...e.configuration.get("networkSettings")].sort(([c],[f])=>f.length-c.length),s={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(s),n=typeof t=="string"?new URL(t):t;for(let[c,f]of r)if(wj.default.isMatch(n.hostname,c))for(let p of a){let h=f.get(p);h!==null&&typeof s[p]>"u"&&(s[p]=h)}for(let c of a)typeof s[c]>"u"&&(s[c]=e.configuration.get(c));return s}async function Av(t,e,{configuration:r,headers:s,jsonRequest:a,jsonResponse:n,method:c="GET",wrapNetworkRequest:f}){let p={target:t,body:e,configuration:r,headers:s,jsonRequest:a,jsonResponse:n,method:c},h=async()=>await wdt(t,e,p),E=typeof f<"u"?await f(h,p):h;return await(await r.reduceHook(S=>S.wrapNetworkRequest,E,p))()}async function Bj(t,{configuration:e,jsonResponse:r,customErrorMessage:s,wrapNetworkRequest:a,...n}){let c=()=>uT(Av(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:s}).then(p=>p.body),f=await(typeof a<"u"?c():Vl(Ade,t,()=>c().then(p=>(Ade.set(t,p),p))));return r?JSON.parse(f.toString()):f}async function Idt(t,e,{customErrorMessage:r,...s}){return(await uT(Av(t,e,{...s,method:"PUT"}),{customErrorMessage:r,configuration:s.configuration})).body}async function vj(t,e,{customErrorMessage:r,...s}){return(await uT(Av(t,e,{...s,method:"POST"}),{customErrorMessage:r,configuration:s.configuration})).body}async function Cdt(t,{customErrorMessage:e,...r}){return(await uT(Av(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function wdt(t,e,{configuration:r,headers:s,jsonRequest:a,jsonResponse:n,method:c="GET"}){let f=typeof t=="string"?new URL(t):t,p=dde(f,{configuration:r});if(p.enableNetwork===!1)throw new Yt(80,`Request to '${f.href}' has been blocked because of your configuration settings`);if(f.protocol==="http:"&&!wj.default.isMatch(f.hostname,r.get("unsafeHttpWhitelist")))throw new Yt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${f.hostname})`);let h={headers:s,method:c};h.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?h.body=e:h.json=e);let E=r.get("httpTimeout"),C=r.get("httpRetry"),S=r.get("enableStrictSsl"),P=p.httpsCaFilePath,I=p.httpsCertFilePath,R=p.httpsKeyFilePath,{default:N}=await Promise.resolve().then(()=>et(fde())),U=P?await Cj(P):void 0,W=I?await Cj(I):void 0,te=R?await Cj(R):void 0,ie={rejectUnauthorized:S,ca:U,cert:W,key:te},Ae={http:p.httpProxy?new Uhe({proxy:p.httpProxy,proxyRequestOptions:ie}):mdt,https:p.httpsProxy?new Hhe({proxy:p.httpsProxy,proxyRequestOptions:ie}):ydt},ce=N.extend({timeout:{socket:E},retry:C,agent:Ae,https:{rejectUnauthorized:S,certificateAuthority:U,certificate:W,key:te},...h});return r.getLimit("networkConcurrency")(()=>ce(f))}var hde,gde,wj,Ade,pde,mdt,ydt,mde,fT=Ct(()=>{bt();jhe();hde=Ie("https"),gde=Ie("http"),wj=et(Sa());Fc();Qc();kc();Ade=new Map,pde=new Map,mdt=new gde.Agent({keepAlive:!0}),ydt=new hde.Agent({keepAlive:!0});mde=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(mde||{})});var ps={};Vt(ps,{availableParallelism:()=>Dj,getArchitecture:()=>pv,getArchitectureName:()=>bdt,getArchitectureSet:()=>Sj,getCaller:()=>Qdt,major:()=>Bdt,openUrl:()=>vdt});function Ddt(){if(process.platform==="darwin"||process.platform==="win32")return null;let t;try{t=le.readFileSync(Sdt)}catch{}if(typeof t<"u"){if(t&&(t.includes("GLIBC")||t.includes("libc")))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],s=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return A0(r,a=>{let n=a.match(s);if(!n)return A0.skip;if(n[1])return"glibc";if(n[2])return"musl";throw new Error("Assertion failed: Expected the libc variant to have been detected")})??null}function pv(){return Ede=Ede??{os:process.platform,cpu:process.arch,libc:Ddt()}}function bdt(t=pv()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function Sj(){let t=pv();return Ide=Ide??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function kdt(t){let e=Pdt.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,s=e[2]&&e[2].indexOf("eval")===0,a=xdt.exec(e[2]);return s&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function Qdt(){let e=new Error().stack.split(` -`)[3];return kdt(e)}function Dj(){return typeof AT.default.availableParallelism<"u"?AT.default.availableParallelism():Math.max(1,AT.default.cpus().length)}var AT,Bdt,yde,vdt,Sdt,Ede,Ide,Pdt,xdt,pT=Ct(()=>{bt();AT=et(Ie("os"));hT();kc();Bdt=Number(process.versions.node.split(".")[0]),yde=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),vdt=typeof yde<"u"?async t=>{try{return await bj(yde,[t],{cwd:K.cwd()}),!0}catch{return!1}}:void 0,Sdt="/usr/bin/ldd";Pdt=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,xdt=/\((\S*)(?::(\d+))(?::(\d+))\)/});function Tj(t,e,r,s,a){let n=ev(r);if(s.isArray||s.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((c,f)=>Pj(t,`${e}[${f}]`,c,s,a)):String(n).split(/,/).map(c=>Pj(t,e,c,s,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return Pj(t,e,r,s,a)}function Pj(t,e,r,s,a){let n=ev(r);switch(s.type){case"ANY":return RQ(n);case"SHAPE":return Ndt(t,e,r,s,a);case"MAP":return Odt(t,e,r,s,a)}if(n===null&&!s.isNullable&&s.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(s.values?.includes(n))return n;let f=(()=>{if(s.type==="BOOLEAN"&&typeof n!="string")return MB(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=Yk(n,{env:t.env});switch(s.type){case"ABSOLUTE_PATH":{let h=a,E=rH(r);return E&&E[0]!=="<"&&(h=K.dirname(E)),K.resolve(h,ue.toPortablePath(p))}case"LOCATOR_LOOSE":return Rp(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return Rp(p);case"BOOLEAN":return MB(p);default:return p}})();if(s.values&&!s.values.includes(f))throw new Error(`Invalid value, expected one of ${s.values.join(", ")}`);return f}function Ndt(t,e,r,s,a){let n=ev(r);if(typeof n!="object"||Array.isArray(n))throw new nt(`Object configuration settings "${e}" must be an object`);let c=Rj(t,s,{ignoreArrays:!0});if(n===null)return c;for(let[f,p]of Object.entries(n)){let h=`${e}.${f}`;if(!s.properties[f])throw new nt(`Unrecognized configuration settings found: ${e}.${f} - run "yarn config -v" to see the list of settings supported in Yarn`);c.set(f,Tj(t,h,p,s.properties[f],a))}return c}function Odt(t,e,r,s,a){let n=ev(r),c=new Map;if(typeof n!="object"||Array.isArray(n))throw new nt(`Map configuration settings "${e}" must be an object`);if(n===null)return c;for(let[f,p]of Object.entries(n)){let h=s.normalizeKeys?s.normalizeKeys(f):f,E=`${e}['${h}']`,C=s.valueDefinition;c.set(h,Tj(t,E,p,C,a))}return c}function Rj(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let s=new Map;for(let[a,n]of Object.entries(e.properties))s.set(a,Rj(t,n));return s}case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(s=>K.normalize(s)):K.isAbsolute(e.default)?K.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(s=>K.resolve(t.projectCwd,s)):K.resolve(t.projectCwd,e.default);default:return e.default}}function dT(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return Fdt;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return ue.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let s=[];for(let a of t)s.push(dT(a,e,r));return s}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let s=new Map;for(let[a,n]of t.entries()){let c=dT(n,e.valueDefinition,r);typeof c<"u"&&s.set(a,c)}return s}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let s=new Map;for(let[a,n]of t.entries()){let c=e.properties[a],f=dT(n,c,r);typeof f<"u"&&s.set(a,f)}return s}return t}function Ldt(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(mT)&&(e=(0,wde.default)(e.slice(mT.length)),t[e]=r);return t}function kj(){let t=`${mT}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return Qj}async function Cde(t){try{return await le.readFilePromise(t)}catch{return Buffer.of()}}async function Mdt(t,e){return Buffer.compare(...await Promise.all([Cde(t),Cde(e)]))===0}async function _dt(t,e){let[r,s]=await Promise.all([le.statPromise(t),le.statPromise(e)]);return r.dev===s.dev&&r.ino===s.ino}async function Hdt({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await Udt(r,e)?null:r}var wde,_p,Bde,vde,Sde,xj,Tdt,hv,Rdt,Up,mT,Qj,Fdt,gv,Dde,yT,gT,Udt,ze,dv=Ct(()=>{bt();Bc();wde=et(zre()),_p=et(Rd());Wt();Bde=et(qne()),vde=Ie("module"),Sde=et(Od()),xj=Ie("stream");nhe();sI();K8();J8();z8();Qhe();Z8();$d();Ohe();NQ();Qc();E0();fT();kc();pT();Np();Yo();Tdt=function(){if(!_p.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=ue.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=le.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),hv=new Set(["@yarnpkg/plugin-constraints","@yarnpkg/plugin-exec","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]),Rdt=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","zipDataEpilogue","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),Up=/^(?!v)[a-z0-9._-]+$/i,mT="yarn_",Qj=".yarnrc.yml",Fdt="********",gv=(E=>(E.ANY="ANY",E.BOOLEAN="BOOLEAN",E.ABSOLUTE_PATH="ABSOLUTE_PATH",E.LOCATOR="LOCATOR",E.LOCATOR_LOOSE="LOCATOR_LOOSE",E.NUMBER="NUMBER",E.STRING="STRING",E.SECRET="SECRET",E.SHAPE="SHAPE",E.MAP="MAP",E))(gv||{}),Dde=pt,yT=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(yT||{}),gT={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:"STRING",default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:"ABSOLUTE_PATH",default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:"BOOLEAN",default:!1},globalFolder:{description:"Folder where all system-global files are stored",type:"ABSOLUTE_PATH",default:iH()},cacheFolder:{description:"Folder where the cache files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:"NUMBER",values:["mixed",0,1,2,3,4,5,6,7,8,9],default:0},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:"ABSOLUTE_PATH",default:"./.yarn/__virtual__"},installStatePath:{description:"Path of the file where the install state will be persisted",type:"ABSOLUTE_PATH",default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:"STRING",default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:"STRING",default:kj()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:"BOOLEAN",default:!0},cacheMigrationMode:{description:"Defines the conditions under which Yarn upgrades should cause the cache archives to be regenerated.",type:"STRING",values:["always","match-spec","required-only"],default:"always"},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:"BOOLEAN",default:zk,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:u3,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:_p.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:"BOOLEAN",default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:"BOOLEAN",default:!_p.isCI,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:"BOOLEAN",default:!0},enableTips:{description:"If true, installs will print a helpful message every day of the week",type:"BOOLEAN",default:!_p.isCI,defaultText:""},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:"BOOLEAN",default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:"BOOLEAN",default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:"STRING",default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:"STRING",default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:"STRING",default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:"BOOLEAN",default:!0},supportedArchitectures:{description:"Architectures that Yarn will fetch and inject into the resolver",type:"SHAPE",properties:{os:{description:"Array of supported process.platform strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},cpu:{description:"Array of supported process.arch strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},libc:{description:"Array of supported libc libraries, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]}}},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:"BOOLEAN",default:!0},enableNetwork:{description:"If false, Yarn will refuse to use the network if required to",type:"BOOLEAN",default:!0},enableOfflineMode:{description:"If true, Yarn will attempt to retrieve files and metadata from the global cache rather than the network",type:"BOOLEAN",default:!1},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:"STRING",default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:"NUMBER",default:6e4},httpRetry:{description:"Retry times on http failure",type:"NUMBER",default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:"NUMBER",default:50},taskPoolConcurrency:{description:"Maximal amount of concurrent heavy task processing",type:"NUMBER",default:Dj()},taskPoolMode:{description:"Execution strategy for heavy tasks",type:"STRING",values:["async","workers"],default:"workers"},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{httpsCaFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:"BOOLEAN",default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null}}}},httpsCaFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:"BOOLEAN",default:!0},logFilters:{description:"Overrides for log levels",type:"SHAPE",isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:"STRING",default:void 0},text:{description:"Code of the texts covered by this override",type:"STRING",default:void 0},pattern:{description:"Code of the patterns covered by this override",type:"STRING",default:void 0},level:{description:"Log level override, set to null to remove override",type:"STRING",values:Object.values(Xk),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:"BOOLEAN",default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:"NUMBER",default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:"STRING",default:null},enableHardenedMode:{description:"If true, automatically enable --check-resolutions --refresh-lockfile on installs",type:"BOOLEAN",default:_p.isPR&&Tdt,defaultText:""},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:"BOOLEAN",default:!0},enableStrictSettings:{description:"If true, unknown settings will cause Yarn to abort",type:"BOOLEAN",default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:"BOOLEAN",default:!1},enableCacheClean:{description:"If false, disallows the `cache clean` command",type:"BOOLEAN",default:!0},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:"STRING",default:"throw"},injectEnvironmentFiles:{description:"List of all the environment files that Yarn should inject inside the process when it starts",type:"ABSOLUTE_PATH",default:[".env.yarn?"],isArray:!0},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:"MAP",valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:"SHAPE",properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:"MAP",valueDefinition:{description:"A range",type:"STRING"}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:"MAP",valueDefinition:{description:"A semver range",type:"STRING"}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:"MAP",valueDefinition:{description:"The peerDependency meta",type:"SHAPE",properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:"BOOLEAN",default:!1}}}}}}}};Udt=process.platform==="win32"?Mdt:_dt;ze=class t{constructor(e){this.isCI=_p.isCI;this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.env={};this.limits=new Map;this.packageExtensions=null;this.startingCwd=e}static{this.deleteProperty=Symbol()}static{this.telemetry=null}static create(e,r,s){let a=new t(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(gT);let n=typeof s<"u"?s:r instanceof Map?r:new Map;for(let[c,f]of n)a.activatePlugin(c,f);return a}static async find(e,r,{strict:s=!0,usePathCheck:a=null,useRc:n=!0}={}){let c=Ldt();delete c.rcFilename;let f=new t(e),p=await t.findRcFiles(e),h=await t.findFolderRcFile(fI());h&&(p.find(me=>me.path===h.path)||p.unshift(h));let E=Nhe(p.map(ce=>[ce.path,ce.data])),C=vt.dot,S=new Set(Object.keys(gT)),P=({yarnPath:ce,ignorePath:me,injectEnvironmentFiles:pe})=>({yarnPath:ce,ignorePath:me,injectEnvironmentFiles:pe}),I=({yarnPath:ce,ignorePath:me,injectEnvironmentFiles:pe,...Be})=>{let Ce={};for(let[g,we]of Object.entries(Be))S.has(g)&&(Ce[g]=we);return Ce},R=({yarnPath:ce,ignorePath:me,...pe})=>{let Be={};for(let[Ce,g]of Object.entries(pe))S.has(Ce)||(Be[Ce]=g);return Be};if(f.importSettings(P(gT)),f.useWithSource("",P(c),e,{strict:!1}),E){let[ce,me]=E;f.useWithSource(ce,P(me),C,{strict:!1})}if(a){if(await Hdt({configuration:f,selfPath:a})!==null)return f;f.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let N=await t.findProjectCwd(e);f.startingCwd=e,f.projectCwd=N;let U=Object.assign(Object.create(null),process.env);f.env=U;let W=await Promise.all(f.get("injectEnvironmentFiles").map(async ce=>{let me=ce.endsWith("?")?await le.readFilePromise(ce.slice(0,-1),"utf8").catch(()=>""):await le.readFilePromise(ce,"utf8");return(0,Bde.parse)(me)}));for(let ce of W)for(let[me,pe]of Object.entries(ce))f.env[me]=Yk(pe,{env:U});if(f.importSettings(I(gT)),f.useWithSource("",I(c),e,{strict:s}),E){let[ce,me]=E;f.useWithSource(ce,I(me),C,{strict:s})}let te=ce=>"default"in ce?ce.default:ce,ie=new Map([["@@core",rhe]]);if(r!==null)for(let ce of r.plugins.keys())ie.set(ce,te(r.modules.get(ce)));for(let[ce,me]of ie)f.activatePlugin(ce,me);let Ae=new Map([]);if(r!==null){let ce=new Map;for(let[Be,Ce]of r.modules)ce.set(Be,()=>Ce);let me=new Set,pe=async(Be,Ce)=>{let{factory:g,name:we}=kp(Be);if(!g||me.has(we))return;let ye=new Map(ce),fe=X=>{if((0,vde.isBuiltin)(X))return kp(X);if(ye.has(X))return ye.get(X)();throw new nt(`This plugin cannot access the package referenced via ${X} which is neither a builtin, nor an exposed entry`)},se=await qE(async()=>te(await g(fe)),X=>`${X} (when initializing ${we}, defined in ${Ce})`);ce.set(we,()=>se),me.add(we),Ae.set(we,se)};if(c.plugins)for(let Be of c.plugins.split(";")){let Ce=K.resolve(e,ue.toPortablePath(Be));await pe(Ce,"")}for(let{path:Be,cwd:Ce,data:g}of p)if(n&&Array.isArray(g.plugins))for(let we of g.plugins){let ye=typeof we!="string"?we.path:we,fe=we?.spec??"",se=we?.checksum??"";if(hv.has(fe))continue;let X=K.resolve(Ce,ue.toPortablePath(ye));if(!await le.existsPromise(X)){if(!fe){let dt=Ut(f,K.basename(X,".cjs"),pt.NAME),j=Ut(f,".gitignore",pt.NAME),rt=Ut(f,f.values.get("rcFilename"),pt.NAME),Fe=Ut(f,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",pt.URL);throw new nt(`Missing source for the ${dt} plugin - please try to remove the plugin from ${rt} then reinstall it manually. This error usually occurs because ${j} is incorrect, check ${Fe} to make sure your plugin folder isn't gitignored.`)}if(!fe.match(/^https?:/)){let dt=Ut(f,K.basename(X,".cjs"),pt.NAME),j=Ut(f,f.values.get("rcFilename"),pt.NAME);throw new nt(`Failed to recognize the source for the ${dt} plugin - please try to delete the plugin from ${j} then reinstall it manually.`)}let De=await Bj(fe,{configuration:f}),Re=fs(De);if(se&&se!==Re){let dt=Ut(f,K.basename(X,".cjs"),pt.NAME),j=Ut(f,f.values.get("rcFilename"),pt.NAME),rt=Ut(f,`yarn plugin import ${fe}`,pt.CODE);throw new nt(`Failed to fetch the ${dt} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${j} then run ${rt} to reimport it.`)}await le.mkdirPromise(K.dirname(X),{recursive:!0}),await le.writeFilePromise(X,De)}await pe(X,Be)}}for(let[ce,me]of Ae)f.activatePlugin(ce,me);if(f.useWithSource("",R(c),e,{strict:s}),E){let[ce,me]=E;f.useWithSource(ce,R(me),C,{strict:s})}return f.get("enableGlobalCache")&&(f.values.set("cacheFolder",`${f.get("globalFolder")}/cache`),f.sources.set("cacheFolder","")),f}static async findRcFiles(e){let r=kj(),s=[],a=e,n=null;for(;a!==n;){n=a;let c=K.join(n,r);if(le.existsSync(c)){let f,p;try{p=await le.readFilePromise(c,"utf8"),f=cs(p)}catch{let h="";throw p?.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(h=" (in particular, make sure you list the colons after each key name)"),new nt(`Parse error when loading ${c}; please check it's proper Yaml${h}`)}s.unshift({path:c,cwd:n,data:f})}a=K.dirname(n)}return s}static async findFolderRcFile(e){let r=K.join(e,Er.rc),s;try{s=await le.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=cs(s);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,s=e,a=null;for(;s!==a;){if(a=s,le.existsSync(K.join(a,Er.lockfile)))return a;le.existsSync(K.join(a,Er.manifest))&&(r=a),s=K.dirname(a)}return r}static async updateConfiguration(e,r,s={}){let a=kj(),n=K.join(e,a),c=le.existsSync(n)?cs(await le.readFilePromise(n,"utf8")):{},f=!1,p;if(typeof r=="function"){try{p=r(c)}catch{p=r({})}if(p===c)return!1}else{p=c;for(let h of Object.keys(r)){let E=c[h],C=r[h],S;if(typeof C=="function")try{S=C(E)}catch{S=C(void 0)}else S=C;E!==S&&(S===t.deleteProperty?delete p[h]:p[h]=S,f=!0)}if(!f)return!1}return await le.changeFilePromise(n,il(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await t.updateConfiguration(e,s=>{let a=s.plugins??[];if(a.length===0)return{...s,plugins:r};let n=[],c=[...r];for(let f of a){let p=typeof f!="string"?f.path:f,h=c.find(E=>E.path===p);h?(n.push(h),c=c.filter(E=>E!==h)):n.push(f)}return n.push(...c),{...s,plugins:n}})}static async updateHomeConfiguration(e){let r=fI();return await t.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,s]of Object.entries(e))if(s!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,s),this.values.set(r,Rj(this,s))}}useWithSource(e,r,s,a){try{this.use(e,r,s,a)}catch(n){throw n.message+=` (in ${Ut(this,e,pt.PATH)})`,n}}use(e,r,s,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let c of["enableStrictSettings",...Object.keys(r)]){let f=r[c],p=rH(f);if(p&&(e=p),typeof f>"u"||c==="plugins"||e===""&&Rdt.has(c))continue;if(c==="rcFilename")throw new nt(`The rcFilename settings can only be set via ${`${mT}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(c);if(!h){let C=fI(),S=e[0]!=="<"?K.dirname(e):null;if(a&&!(S!==null?C===S:!1))throw new nt(`Unrecognized or legacy configuration settings found: ${c} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(c,e);continue}if(this.sources.has(c)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=Tj(this,c,f,h,s)}catch(C){throw C.message+=` in ${Ut(this,e,pt.PATH)}`,C}if(c==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let C=this.values.get(c);this.values.set(c,new Map(n?[...C,...E]:[...E,...C])),this.sources.set(c,`${this.sources.get(c)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let C=this.values.get(c);this.values.set(c,n?[...C,...E]:[...E,...C]),this.sources.set(c,`${this.sources.get(c)}, ${e}`)}else this.values.set(c,E),this.sources.set(c,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:s=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new nt(`Couldn't find a configuration settings named "${e}"`);return dT(a,n,{hideSecrets:r,getNativePaths:s})}getSubprocessStreams(e,{header:r,prefix:s,report:a}){let n,c,f=le.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${s} ${Ut(this,"STDOUT","green")}`),h=a.createStreamReporter(`${s} ${Ut(this,"STDERR","red")}`);n=new xj.PassThrough,n.pipe(p),n.pipe(f),c=new xj.PassThrough,c.pipe(h),c.pipe(f)}else n=f,c=f,typeof r<"u"&&n.write(`${r} -`);return{stdout:n,stderr:c}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let s of r.resolvers||[])e.push(new s);return new em([new TQ,new Ei,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let s of r.fetchers||[])e.push(new s);return new aI([new lI,new cI,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let s of r.linkers||[])e.push(new s);return e}getSupportedArchitectures(){let e=pv(),r=this.get("supportedArchitectures"),s=r.get("os");s!==null&&(s=s.map(c=>c==="current"?e.os:c));let a=r.get("cpu");a!==null&&(a=a.map(c=>c==="current"?e.cpu:c));let n=r.get("libc");return n!==null&&(n=Yl(n,c=>c==="current"?e.libc??Yl.skip:c)),{os:s,cpu:a,libc:n}}isInteractive({interactive:e,stdout:r}){return r.isTTY?e??this.get("preferInteractive"):!1}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(s,a,{userProvided:n=!1}={})=>{if(!ul(s.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let c=new Ht;c.load(a,{yamlCompatibilityMode:!0});let f=LB(e,s.identHash),p=[];f.push([s.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:s};for(let E of c.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of c.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,C]of c.peerDependenciesMeta)for(let[S,P]of Object.entries(C))p.push({...h,type:"PeerDependencyMeta",selector:E,key:S,value:P})};await this.triggerHook(s=>s.registerPackageExtensions,this,r);for(let[s,a]of this.get("packageExtensions"))r(I0(s,!0),Wk(a),{userProvided:!0});return e}normalizeLocator(e){return ul(e.reference)?Vs(e,`${this.get("defaultProtocol")}${e.reference}`):Up.test(e.reference)?Vs(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return ul(e.range)?On(e,`${this.get("defaultProtocol")}${e.range}`):Up.test(e.range)?On(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,s])=>[r,this.normalizeDependency(s)]))}normalizePackage(e,{packageExtensions:r}){let s=WB(e),a=r.get(e.identHash);if(typeof a<"u"){let c=e.version;if(c!==null){for(let[f,p]of a)if(eA(c,f))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof s.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",s.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof s.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",s.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=s.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",Vl(s.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:r3(h)}}}let n=c=>c.scope?`${c.scope}__${c.name}`:`${c.name}`;for(let c of s.peerDependenciesMeta.keys()){let f=Da(c);s.peerDependencies.has(f.identHash)||s.peerDependencies.set(f.identHash,On(f,"*"))}for(let c of s.peerDependencies.values()){if(c.scope==="types")continue;let f=n(c),p=ba("types",f),h=cn(p);s.peerDependencies.has(p.identHash)||s.peerDependenciesMeta.has(h)||s.dependencies.has(p.identHash)||(s.peerDependencies.set(p.identHash,On(p,"*")),s.peerDependenciesMeta.set(h,{optional:!0}))}return s.dependencies=new Map(Ys(s.dependencies,([,c])=>ll(c))),s.peerDependencies=new Map(Ys(s.peerDependencies,([,c])=>ll(c))),s}getLimit(e){return Vl(this.limits,e,()=>(0,Sde.default)(this.get(e)))}async triggerHook(e,...r){for(let s of this.plugins.values()){let a=s.hooks;if(!a)continue;let n=e(a);n&&await n(...r)}}async triggerMultipleHooks(e,r){for(let s of r)await this.triggerHook(e,...s)}async reduceHook(e,r,...s){let a=r;for(let n of this.plugins.values()){let c=n.hooks;if(!c)continue;let f=e(c);f&&(a=await f(a,...s))}return a}async firstHook(e,...r){for(let s of this.plugins.values()){let a=s.hooks;if(!a)continue;let n=e(a);if(!n)continue;let c=await n(...r);if(typeof c<"u")return c}return null}}});var Gr={};Vt(Gr,{EndStrategy:()=>Lj,ExecError:()=>ET,PipeError:()=>mv,execvp:()=>bj,pipevp:()=>Yu});function im(t){return t!==null&&typeof t.fd=="number"}function Fj(){}function Nj(){for(let t of sm)t.kill()}async function Yu(t,e,{cwd:r,env:s=process.env,strict:a=!1,stdin:n=null,stdout:c,stderr:f,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":im(n)&&(h[0]=n),im(c)&&(h[1]=c),im(f)&&(h[2]=f);let E=(0,Oj.default)(t,e,{cwd:ue.fromPortablePath(r),env:{...s,PWD:ue.fromPortablePath(r)},stdio:h});sm.add(E),sm.size===1&&(process.on("SIGINT",Fj),process.on("SIGTERM",Nj)),!im(n)&&n!==null&&n.pipe(E.stdin),im(c)||E.stdout.pipe(c,{end:!1}),im(f)||E.stderr.pipe(f,{end:!1});let C=()=>{for(let S of new Set([c,f]))im(S)||S.end()};return new Promise((S,P)=>{E.on("error",I=>{sm.delete(E),sm.size===0&&(process.off("SIGINT",Fj),process.off("SIGTERM",Nj)),(p===2||p===1)&&C(),P(I)}),E.on("close",(I,R)=>{sm.delete(E),sm.size===0&&(process.off("SIGINT",Fj),process.off("SIGTERM",Nj)),(p===2||p===1&&I!==0)&&C(),I===0||!a?S({code:Mj(I,R)}):P(new mv({fileName:t,code:I,signal:R}))})})}async function bj(t,e,{cwd:r,env:s=process.env,encoding:a="utf8",strict:n=!1}){let c=["ignore","pipe","pipe"],f=[],p=[],h=ue.fromPortablePath(r);typeof s.PWD<"u"&&(s={...s,PWD:h});let E=(0,Oj.default)(t,e,{cwd:h,env:s,stdio:c});return E.stdout.on("data",C=>{f.push(C)}),E.stderr.on("data",C=>{p.push(C)}),await new Promise((C,S)=>{E.on("error",P=>{let I=ze.create(r),R=Ut(I,t,pt.PATH);S(new Yt(1,`Process ${R} failed to spawn`,N=>{N.reportError(1,` ${Zf(I,{label:"Thrown Error",value:Hu(pt.NO_HINT,P.message)})}`)}))}),E.on("close",(P,I)=>{let R=a==="buffer"?Buffer.concat(f):Buffer.concat(f).toString(a),N=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);P===0||!n?C({code:Mj(P,I),stdout:R,stderr:N}):S(new ET({fileName:t,code:P,signal:I,stdout:R,stderr:N}))})})}function Mj(t,e){let r=jdt.get(e);return typeof r<"u"?128+r:t??1}function qdt(t,e,{configuration:r,report:s}){s.reportError(1,` ${Zf(r,t!==null?{label:"Exit Code",value:Hu(pt.NUMBER,t)}:{label:"Exit Signal",value:Hu(pt.CODE,e)})}`)}var Oj,Lj,mv,ET,sm,jdt,hT=Ct(()=>{bt();Oj=et(j_());dv();Fc();Qc();Lj=(s=>(s[s.Never=0]="Never",s[s.ErrorCode=1]="ErrorCode",s[s.Always=2]="Always",s))(Lj||{}),mv=class extends Yt{constructor({fileName:e,code:r,signal:s}){let a=ze.create(K.cwd()),n=Ut(a,e,pt.PATH);super(1,`Child ${n} reported an error`,c=>{qdt(r,s,{configuration:a,report:c})}),this.code=Mj(r,s)}},ET=class extends mv{constructor({fileName:e,code:r,signal:s,stdout:a,stderr:n}){super({fileName:e,code:r,signal:s}),this.stdout=a,this.stderr=n}};sm=new Set;jdt=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Pde(t){bde=t}function yv(){return typeof _j>"u"&&(_j=bde()),_j}var _j,bde,Uj=Ct(()=>{bde=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var xde=L((IT,jj)=>{var Gdt=Object.assign({},Ie("fs")),Hj=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},s,a;r.ready=new Promise(function(Je,st){s=Je,a=st});var n={},c;for(c in r)r.hasOwnProperty(c)&&(n[c]=r[c]);var f=[],p="./this.program",h=function(Je,st){throw st},E=!1,C=!0,S="";function P(Je){return r.locateFile?r.locateFile(Je,S):S+Je}var I,R,N,U;C&&(E?S=Ie("path").dirname(S)+"/":S=__dirname+"/",I=function(st,St){var lr=Me(st);return lr?St?lr:lr.toString():(N||(N=Gdt),U||(U=Ie("path")),st=U.normalize(st),N.readFileSync(st,St?null:"utf8"))},R=function(st){var St=I(st,!0);return St.buffer||(St=new Uint8Array(St)),we(St.buffer),St},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),f=process.argv.slice(2),h=function(Je){process.exit(Je)},r.inspect=function(){return"[Emscripten Module object]"});var W=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(c in n)n.hasOwnProperty(c)&&(r[c]=n[c]);n=null,r.arguments&&(f=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var ie=0,Ae=function(Je){ie=Je},ce;r.wasmBinary&&(ce=r.wasmBinary);var me=r.noExitRuntime||!0;typeof WebAssembly!="object"&&ns("no native wasm support detected");function pe(Je,st,St){switch(st=st||"i8",st.charAt(st.length-1)==="*"&&(st="i32"),st){case"i1":return Ye[Je>>0];case"i8":return Ye[Je>>0];case"i16":return Eh((Je>>1)*2);case"i32":return no((Je>>2)*4);case"i64":return no((Je>>2)*4);case"float":return pf((Je>>2)*4);case"double":return yh((Je>>3)*8);default:ns("invalid type for getValue: "+st)}return null}var Be,Ce=!1,g;function we(Je,st){Je||ns("Assertion failed: "+st)}function ye(Je){var st=r["_"+Je];return we(st,"Cannot call unknown function "+Je+", make sure it is exported"),st}function fe(Je,st,St,lr,ee){var Ee={string:function(Gi){var Tn=0;if(Gi!=null&&Gi!==0){var Ga=(Gi.length<<2)+1;Tn=Bi(Ga),dt(Gi,Tn,Ga)}return Tn},array:function(Gi){var Tn=Bi(Gi.length);return Fe(Gi,Tn),Tn}};function Oe(Gi){return st==="string"?De(Gi):st==="boolean"?!!Gi:Gi}var gt=ye(Je),yt=[],Dt=0;if(lr)for(var tr=0;tr=St)&&ke[lr];)++lr;return X.decode(ke.subarray(Je,lr))}function Re(Je,st,St,lr){if(!(lr>0))return 0;for(var ee=St,Ee=St+lr-1,Oe=0;Oe=55296&><=57343){var yt=Je.charCodeAt(++Oe);gt=65536+((gt&1023)<<10)|yt&1023}if(gt<=127){if(St>=Ee)break;st[St++]=gt}else if(gt<=2047){if(St+1>=Ee)break;st[St++]=192|gt>>6,st[St++]=128|gt&63}else if(gt<=65535){if(St+2>=Ee)break;st[St++]=224|gt>>12,st[St++]=128|gt>>6&63,st[St++]=128|gt&63}else{if(St+3>=Ee)break;st[St++]=240|gt>>18,st[St++]=128|gt>>12&63,st[St++]=128|gt>>6&63,st[St++]=128|gt&63}}return st[St]=0,St-ee}function dt(Je,st,St){return Re(Je,ke,st,St)}function j(Je){for(var st=0,St=0;St=55296&&lr<=57343&&(lr=65536+((lr&1023)<<10)|Je.charCodeAt(++St)&1023),lr<=127?++st:lr<=2047?st+=2:lr<=65535?st+=3:st+=4}return st}function rt(Je){var st=j(Je)+1,St=Ma(st);return St&&Re(Je,Ye,St,st),St}function Fe(Je,st){Ye.set(Je,st)}function Ne(Je,st){return Je%st>0&&(Je+=st-Je%st),Je}var Pe,Ye,ke,it,_e,x,w,b,y,F;function z(Je){Pe=Je,r.HEAP_DATA_VIEW=F=new DataView(Je),r.HEAP8=Ye=new Int8Array(Je),r.HEAP16=it=new Int16Array(Je),r.HEAP32=x=new Int32Array(Je),r.HEAPU8=ke=new Uint8Array(Je),r.HEAPU16=_e=new Uint16Array(Je),r.HEAPU32=w=new Uint32Array(Je),r.HEAPF32=b=new Float32Array(Je),r.HEAPF64=y=new Float64Array(Je)}var Z=r.INITIAL_MEMORY||16777216,$,oe=[],xe=[],Te=[],lt=!1;function It(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)Pt(r.preRun.shift());Fs(oe)}function qt(){lt=!0,Fs(xe)}function ir(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Pr(r.postRun.shift());Fs(Te)}function Pt(Je){oe.unshift(Je)}function gn(Je){xe.unshift(Je)}function Pr(Je){Te.unshift(Je)}var Ir=0,Nr=null,nn=null;function ai(Je){Ir++,r.monitorRunDependencies&&r.monitorRunDependencies(Ir)}function wo(Je){if(Ir--,r.monitorRunDependencies&&r.monitorRunDependencies(Ir),Ir==0&&(Nr!==null&&(clearInterval(Nr),Nr=null),nn)){var st=nn;nn=null,st()}}r.preloadedImages={},r.preloadedAudios={};function ns(Je){r.onAbort&&r.onAbort(Je),Je+="",te(Je),Ce=!0,g=1,Je="abort("+Je+"). Build with -s ASSERTIONS=1 for more info.";var st=new WebAssembly.RuntimeError(Je);throw a(st),st}var to="data:application/octet-stream;base64,";function Bo(Je){return Je.startsWith(to)}var ji="data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkAvwEJAH8ACQB/AQkA/wAJAP8BCQAAAAcAQAAHACAABwBgAAcAEAAHAFAABwAwAAcAcAAHAAgABwBIAAcAKAAHAGgABwAYAAcAWAAHADgABwB4AAcABAAHAEQABwAkAAcAZAAHABQABwBUAAcANAAHAHQABwADAAgAgwAIAEMACADDAAgAIwAIAKMACABjAAgA4wAIAAAABQAQAAUACAAFABgABQAEAAUAFAAFAAwABQAcAAUAAgAFABIABQAKAAUAGgAFAAYABQAWAAUADgAFAB4ABQABAAUAEQAFAAkABQAZAAUABQAFABUABQANAAUAHQAFAAMABQATAAUACwAFABsABQAHAAUAFwAFAEGBywAL7AYBAgMEBAUFBgYGBgcHBwcICAgICAgICAkJCQkJCQkJCgoKCgoKCgoKCgoKCgoKCgsLCwsLCwsLCwsLCwsLCwsMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8AABAREhITExQUFBQVFRUVFhYWFhYWFhYXFxcXFxcXFxgYGBgYGBgYGBgYGBgYGBgZGRkZGRkZGRkZGRkZGRkZGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhobGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAAECAwQFBgcICAkJCgoLCwwMDAwNDQ0NDg4ODg8PDw8QEBAQEBAQEBEREREREREREhISEhISEhITExMTExMTExQUFBQUFBQUFBQUFBQUFBQVFRUVFRUVFRUVFRUVFRUVFhYWFhYWFhYWFhYWFhYWFhcXFxcXFxcXFxcXFxcXFxcYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhobGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbHAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAQYTSAAutAQEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAgCAAAMApAAABAQAAHgEAAA8AAAAAJQAAQCoAAAAAAAAeAAAADwAAAAAAAADAKgAAAAAAABMAAAAHAEHg0wALTQEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAMAAAADAAAAAwAAAAQAAAAEAAAABAAAAAQAAAAFAAAABQAAAAUAAAAFAEHQ1AALZQEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAUAAAAGAAAABgAAAAcAAAAHAAAACAAAAAgAAAAJAAAACQAAAAoAAAAKAAAACwAAAAsAAAAMAAAADAAAAA0AAAANAEGA1gALIwIAAAADAAAABwAAAAAAAAAQERIACAcJBgoFCwQMAw0CDgEPAEHQ1gALTQEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAMAAAADAAAAAwAAAAQAAAAEAAAABAAAAAQAAAAFAAAABQAAAAUAAAAFAEHA1wALZQEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAUAAAAGAAAABgAAAAcAAAAHAAAACAAAAAgAAAAJAAAACQAAAAoAAAAKAAAACwAAAAsAAAAMAAAADAAAAA0AAAANAEG42AALASwAQcTYAAthLQAAAAQABAAIAAQALgAAAAQABgAQAAYALwAAAAQADAAgABgALwAAAAgAEAAgACAALwAAAAgAEACAAIAALwAAAAgAIACAAAABMAAAACAAgAACAQAEMAAAACAAAgECAQAQMABBsNkAC6UTAwAEAAUABgAHAAgACQAKAAsADQAPABEAEwAXABsAHwAjACsAMwA7AEMAUwBjAHMAgwCjAMMA4wACAQAAAAAAABAAEAAQABAAEAAQABAAEAARABEAEQARABIAEgASABIAEwATABMAEwAUABQAFAAUABUAFQAVABUAEABNAMoAAAABAAIAAwAEAAUABwAJAA0AEQAZACEAMQBBAGEAgQDBAAEBgQEBAgEDAQQBBgEIAQwBEAEYASABMAFAAWAAAAAAEAAQABAAEAARABEAEgASABMAEwAUABQAFQAVABYAFgAXABcAGAAYABkAGQAaABoAGwAbABwAHAAdAB0AQABAAGAHAAAACFAAAAgQABQIcwASBx8AAAhwAAAIMAAACcAAEAcKAAAIYAAACCAAAAmgAAAIAAAACIAAAAhAAAAJ4AAQBwYAAAhYAAAIGAAACZAAEwc7AAAIeAAACDgAAAnQABEHEQAACGgAAAgoAAAJsAAACAgAAAiIAAAISAAACfAAEAcEAAAIVAAACBQAFQjjABMHKwAACHQAAAg0AAAJyAARBw0AAAhkAAAIJAAACagAAAgEAAAIhAAACEQAAAnoABAHCAAACFwAAAgcAAAJmAAUB1MAAAh8AAAIPAAACdgAEgcXAAAIbAAACCwAAAm4AAAIDAAACIwAAAhMAAAJ+AAQBwMAAAhSAAAIEgAVCKMAEwcjAAAIcgAACDIAAAnEABEHCwAACGIAAAgiAAAJpAAACAIAAAiCAAAIQgAACeQAEAcHAAAIWgAACBoAAAmUABQHQwAACHoAAAg6AAAJ1AASBxMAAAhqAAAIKgAACbQAAAgKAAAIigAACEoAAAn0ABAHBQAACFYAAAgWAEAIAAATBzMAAAh2AAAINgAACcwAEQcPAAAIZgAACCYAAAmsAAAIBgAACIYAAAhGAAAJ7AAQBwkAAAheAAAIHgAACZwAFAdjAAAIfgAACD4AAAncABIHGwAACG4AAAguAAAJvAAACA4AAAiOAAAITgAACfwAYAcAAAAIUQAACBEAFQiDABIHHwAACHEAAAgxAAAJwgAQBwoAAAhhAAAIIQAACaIAAAgBAAAIgQAACEEAAAniABAHBgAACFkAAAgZAAAJkgATBzsAAAh5AAAIOQAACdIAEQcRAAAIaQAACCkAAAmyAAAICQAACIkAAAhJAAAJ8gAQBwQAAAhVAAAIFQAQCAIBEwcrAAAIdQAACDUAAAnKABEHDQAACGUAAAglAAAJqgAACAUAAAiFAAAIRQAACeoAEAcIAAAIXQAACB0AAAmaABQHUwAACH0AAAg9AAAJ2gASBxcAAAhtAAAILQAACboAAAgNAAAIjQAACE0AAAn6ABAHAwAACFMAAAgTABUIwwATByMAAAhzAAAIMwAACcYAEQcLAAAIYwAACCMAAAmmAAAIAwAACIMAAAhDAAAJ5gAQBwcAAAhbAAAIGwAACZYAFAdDAAAIewAACDsAAAnWABIHEwAACGsAAAgrAAAJtgAACAsAAAiLAAAISwAACfYAEAcFAAAIVwAACBcAQAgAABMHMwAACHcAAAg3AAAJzgARBw8AAAhnAAAIJwAACa4AAAgHAAAIhwAACEcAAAnuABAHCQAACF8AAAgfAAAJngAUB2MAAAh/AAAIPwAACd4AEgcbAAAIbwAACC8AAAm+AAAIDwAACI8AAAhPAAAJ/gBgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnBABAHCgAACGAAAAggAAAJoQAACAAAAAiAAAAIQAAACeEAEAcGAAAIWAAACBgAAAmRABMHOwAACHgAAAg4AAAJ0QARBxEAAAhoAAAIKAAACbEAAAgIAAAIiAAACEgAAAnxABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACckAEQcNAAAIZAAACCQAAAmpAAAIBAAACIQAAAhEAAAJ6QAQBwgAAAhcAAAIHAAACZkAFAdTAAAIfAAACDwAAAnZABIHFwAACGwAAAgsAAAJuQAACAwAAAiMAAAITAAACfkAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxQARBwsAAAhiAAAIIgAACaUAAAgCAAAIggAACEIAAAnlABAHBwAACFoAAAgaAAAJlQAUB0MAAAh6AAAIOgAACdUAEgcTAAAIagAACCoAAAm1AAAICgAACIoAAAhKAAAJ9QAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnNABEHDwAACGYAAAgmAAAJrQAACAYAAAiGAAAIRgAACe0AEAcJAAAIXgAACB4AAAmdABQHYwAACH4AAAg+AAAJ3QASBxsAAAhuAAAILgAACb0AAAgOAAAIjgAACE4AAAn9AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcMAEAcKAAAIYQAACCEAAAmjAAAIAQAACIEAAAhBAAAJ4wAQBwYAAAhZAAAIGQAACZMAEwc7AAAIeQAACDkAAAnTABEHEQAACGkAAAgpAAAJswAACAkAAAiJAAAISQAACfMAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJywARBw0AAAhlAAAIJQAACasAAAgFAAAIhQAACEUAAAnrABAHCAAACF0AAAgdAAAJmwAUB1MAAAh9AAAIPQAACdsAEgcXAAAIbQAACC0AAAm7AAAIDQAACI0AAAhNAAAJ+wAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnHABEHCwAACGMAAAgjAAAJpwAACAMAAAiDAAAIQwAACecAEAcHAAAIWwAACBsAAAmXABQHQwAACHsAAAg7AAAJ1wASBxMAAAhrAAAIKwAACbcAAAgLAAAIiwAACEsAAAn3ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc8AEQcPAAAIZwAACCcAAAmvAAAIBwAACIcAAAhHAAAJ7wAQBwkAAAhfAAAIHwAACZ8AFAdjAAAIfwAACD8AAAnfABIHGwAACG8AAAgvAAAJvwAACA8AAAiPAAAITwAACf8AEAUBABcFAQETBREAGwUBEBEFBQAZBQEEFQVBAB0FAUAQBQMAGAUBAhQFIQAcBQEgEgUJABoFAQgWBYEAQAUAABAFAgAXBYEBEwUZABsFARgRBQcAGQUBBhUFYQAdBQFgEAUEABgFAQMUBTEAHAUBMBIFDQAaBQEMFgXBAEAFAAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEHg7AALQREACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABAAkLCwAACQYLAAALAAYRAAAAERERAEGx7QALIQsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwBB6+0ACwEMAEH37QALFQwAAAAADAAAAAAJDAAAAAAADAAADABBpe4ACwEOAEGx7gALFQ0AAAAEDQAAAAAJDgAAAAAADgAADgBB3+4ACwEQAEHr7gALHg8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgBBou8ACw4SAAAAEhISAAAAAAAACQBB0+8ACwELAEHf7wALFQoAAAAACgAAAAAJCwAAAAAACwAACwBBjfAACwEMAEGZ8AALJwwAAAAADAAAAAAJDAAAAAAADAAADAAAMDEyMzQ1Njc4OUFCQ0RFRgBB5PAACwE+AEGL8QALBf//////AEHQ8QALVxkSRDsCPyxHFD0zMAobBkZLRTcPSQ6OFwNAHTxpKzYfSi0cASAlKSEIDBUWIi4QOD4LNDEYZHR1di9BCX85ESNDMkKJiosFBCYoJw0qHjWMBxpIkxOUlQBBsPIAC4oOSWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";Bo(ji)||(ji=P(ji));function ro(Je){try{if(Je==ji&&ce)return new Uint8Array(ce);var st=Me(Je);if(st)return st;if(R)return R(Je);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(St){ns(St)}}function vo(Je,st){var St,lr,ee;try{ee=ro(Je),lr=new WebAssembly.Module(ee),St=new WebAssembly.Instance(lr,st)}catch(Oe){var Ee=Oe.toString();throw te("failed to compile wasm module: "+Ee),(Ee.includes("imported Memory")||Ee.includes("memory import"))&&te("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),Oe}return[St,lr]}function RA(){var Je={a:fu};function st(ee,Ee){var Oe=ee.exports;r.asm=Oe,Be=r.asm.g,z(Be.buffer),$=r.asm.W,gn(r.asm.h),wo("wasm-instantiate")}if(ai("wasm-instantiate"),r.instantiateWasm)try{var St=r.instantiateWasm(Je,st);return St}catch(ee){return te("Module.instantiateWasm callback failed with error: "+ee),!1}var lr=vo(ji,Je);return st(lr[0]),r.asm}function pf(Je){return F.getFloat32(Je,!0)}function yh(Je){return F.getFloat64(Je,!0)}function Eh(Je){return F.getInt16(Je,!0)}function no(Je){return F.getInt32(Je,!0)}function jn(Je,st){F.setInt32(Je,st,!0)}function Fs(Je){for(;Je.length>0;){var st=Je.shift();if(typeof st=="function"){st(r);continue}var St=st.func;typeof St=="number"?st.arg===void 0?$.get(St)():$.get(St)(st.arg):St(st.arg===void 0?null:st.arg)}}function io(Je,st){var St=new Date(no((Je>>2)*4)*1e3);jn((st>>2)*4,St.getUTCSeconds()),jn((st+4>>2)*4,St.getUTCMinutes()),jn((st+8>>2)*4,St.getUTCHours()),jn((st+12>>2)*4,St.getUTCDate()),jn((st+16>>2)*4,St.getUTCMonth()),jn((st+20>>2)*4,St.getUTCFullYear()-1900),jn((st+24>>2)*4,St.getUTCDay()),jn((st+36>>2)*4,0),jn((st+32>>2)*4,0);var lr=Date.UTC(St.getUTCFullYear(),0,1,0,0,0,0),ee=(St.getTime()-lr)/(1e3*60*60*24)|0;return jn((st+28>>2)*4,ee),io.GMTString||(io.GMTString=rt("GMT")),jn((st+40>>2)*4,io.GMTString),st}function lu(Je,st){return io(Je,st)}function cu(Je,st,St){ke.copyWithin(Je,st,st+St)}function uu(Je){try{return Be.grow(Je-Pe.byteLength+65535>>>16),z(Be.buffer),1}catch{}}function FA(Je){var st=ke.length;Je=Je>>>0;var St=2147483648;if(Je>St)return!1;for(var lr=1;lr<=4;lr*=2){var ee=st*(1+.2/lr);ee=Math.min(ee,Je+100663296);var Ee=Math.min(St,Ne(Math.max(Je,ee),65536)),Oe=uu(Ee);if(Oe)return!0}return!1}function NA(Je){Ae(Je)}function aa(Je){var st=Date.now()/1e3|0;return Je&&jn((Je>>2)*4,st),st}function la(){if(la.called)return;la.called=!0;var Je=new Date().getFullYear(),st=new Date(Je,0,1),St=new Date(Je,6,1),lr=st.getTimezoneOffset(),ee=St.getTimezoneOffset(),Ee=Math.max(lr,ee);jn((Sl()>>2)*4,Ee*60),jn((ws()>>2)*4,+(lr!=ee));function Oe(fn){var li=fn.toTimeString().match(/\(([A-Za-z ]+)\)$/);return li?li[1]:"GMT"}var gt=Oe(st),yt=Oe(St),Dt=rt(gt),tr=rt(yt);ee>2)*4,Dt),jn((_i()+4>>2)*4,tr)):(jn((_i()>>2)*4,tr),jn((_i()+4>>2)*4,Dt))}function OA(Je){la();var st=Date.UTC(no((Je+20>>2)*4)+1900,no((Je+16>>2)*4),no((Je+12>>2)*4),no((Je+8>>2)*4),no((Je+4>>2)*4),no((Je>>2)*4),0),St=new Date(st);jn((Je+24>>2)*4,St.getUTCDay());var lr=Date.UTC(St.getUTCFullYear(),0,1,0,0,0,0),ee=(St.getTime()-lr)/(1e3*60*60*24)|0;return jn((Je+28>>2)*4,ee),St.getTime()/1e3|0}var gr=typeof atob=="function"?atob:function(Je){var st="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",St="",lr,ee,Ee,Oe,gt,yt,Dt,tr=0;Je=Je.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Oe=st.indexOf(Je.charAt(tr++)),gt=st.indexOf(Je.charAt(tr++)),yt=st.indexOf(Je.charAt(tr++)),Dt=st.indexOf(Je.charAt(tr++)),lr=Oe<<2|gt>>4,ee=(gt&15)<<4|yt>>2,Ee=(yt&3)<<6|Dt,St=St+String.fromCharCode(lr),yt!==64&&(St=St+String.fromCharCode(ee)),Dt!==64&&(St=St+String.fromCharCode(Ee));while(tr0||(It(),Ir>0))return;function st(){Qn||(Qn=!0,r.calledRun=!0,!Ce&&(qt(),s(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),ir()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),st()},1)):st()}if(r.run=pc,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return pc(),e}}();typeof IT=="object"&&typeof jj=="object"?jj.exports=Hj:typeof define=="function"&&define.amd?define([],function(){return Hj}):typeof IT=="object"&&(IT.createModule=Hj)});var Hp,kde,Qde,Tde=Ct(()=>{Hp=["number","number"],kde=(X=>(X[X.ZIP_ER_OK=0]="ZIP_ER_OK",X[X.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",X[X.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",X[X.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",X[X.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",X[X.ZIP_ER_READ=5]="ZIP_ER_READ",X[X.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",X[X.ZIP_ER_CRC=7]="ZIP_ER_CRC",X[X.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",X[X.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",X[X.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",X[X.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",X[X.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",X[X.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",X[X.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",X[X.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",X[X.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",X[X.ZIP_ER_EOF=17]="ZIP_ER_EOF",X[X.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",X[X.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",X[X.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",X[X.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",X[X.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",X[X.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",X[X.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",X[X.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",X[X.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",X[X.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",X[X.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",X[X.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",X[X.ZIP_ER_TELL=30]="ZIP_ER_TELL",X[X.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",X))(kde||{}),Qde=t=>({get HEAPU8(){return t.HEAPU8},errors:kde,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_EXCL:2,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:t._malloc(1),uint32S:t._malloc(4),malloc:t._malloc,free:t._free,getValue:t.getValue,openFromSource:t.cwrap("zip_open_from_source","number",["number","number","number"]),close:t.cwrap("zip_close","number",["number"]),discard:t.cwrap("zip_discard",null,["number"]),getError:t.cwrap("zip_get_error","number",["number"]),getName:t.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:t.cwrap("zip_get_num_entries","number",["number","number"]),delete:t.cwrap("zip_delete","number",["number","number"]),statIndex:t.cwrap("zip_stat_index","number",["number",...Hp,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Hp,"number"]),fread:t.cwrap("zip_fread","number",["number","number","number","number"]),fclose:t.cwrap("zip_fclose","number",["number"]),dir:{add:t.cwrap("zip_dir_add","number",["number","string"])},file:{add:t.cwrap("zip_file_add","number",["number","string","number","number"]),getError:t.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:t.cwrap("zip_file_get_external_attributes","number",["number",...Hp,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Hp,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Hp,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Hp,"number","number"])},ext:{countSymlinks:t.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:t.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:t.cwrap("zip_error_strerror","string",["number"])},name:{locate:t.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:t.cwrap("zip_source_buffer_create","number",["number",...Hp,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Hp,"number"]),free:t.cwrap("zip_source_free",null,["number"]),keep:t.cwrap("zip_source_keep",null,["number"]),open:t.cwrap("zip_source_open","number",["number"]),close:t.cwrap("zip_source_close","number",["number"]),seek:t.cwrap("zip_source_seek","number",["number",...Hp,"number"]),tell:t.cwrap("zip_source_tell","number",["number"]),read:t.cwrap("zip_source_read","number",["number","number","number"]),error:t.cwrap("zip_source_error","number",["number"])},struct:{statS:t.cwrap("zipstruct_statS","number",[]),statSize:t.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:t.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:t.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:t.cwrap("zipstruct_stat_mtime","number",["number"]),statCrc:t.cwrap("zipstruct_stat_crc","number",["number"]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}})});function qj(t,e){let r=t.indexOf(e);if(r<=0)return null;let s=r;for(;r>=0&&(s=r+e.length,t[s]!==K.sep);){if(t[r-1]===K.sep)return null;r=t.indexOf(e,s)}return t.length>s&&t[s]!==K.sep?null:t.slice(0,s)}var tA,Rde=Ct(()=>{bt();bt();rA();tA=class t extends r0{static async openPromise(e,r){let s=new t(r);try{return await e(s)}finally{s.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,s=e.readOnlyArchives,a=typeof r>"u"?f=>qj(f,".zip"):f=>{for(let p of r){let h=qj(f,p);if(h)return h}return null},n=(f,p)=>new hs(p,{baseFs:f,readOnly:s,stats:f.statSync(p),customZipImplementation:e.customZipImplementation}),c=async(f,p)=>{let h={baseFs:f,readOnly:s,stats:await f.statPromise(p),customZipImplementation:e.customZipImplementation};return()=>new hs(p,h)};super({...e,factorySync:n,factoryPromise:c,getMountPoint:a})}}});var Gj,wI,Wj=Ct(()=>{Uj();Gj=class extends Error{constructor(e,r){super(e),this.name="Libzip Error",this.code=r}},wI=class{constructor(e){this.filesShouldBeCached=!0;let r="buffer"in e?e.buffer:e.baseFs.readFileSync(e.path);this.libzip=yv();let s=this.libzip.malloc(4);try{let c=0;e.readOnly&&(c|=this.libzip.ZIP_RDONLY);let f=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(f,c,s),this.lzSource=f}catch(p){throw this.libzip.source.free(f),p}if(this.zip===0){let p=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(p,this.libzip.getValue(s,"i32")),this.makeLibzipError(p)}}finally{this.libzip.free(s)}let a=this.libzip.getNumEntries(this.zip,0),n=new Array(a);for(let c=0;c>>0,n=this.libzip.struct.statMtime(r)>>>0,c=this.libzip.struct.statCrc(r)>>>0;return{size:a,mtime:n,crc:c}}makeLibzipError(e){let r=this.libzip.struct.errorCodeZip(e),s=this.libzip.error.strerror(e),a=new Gj(s,this.libzip.errors[r]);if(r===this.libzip.errors.ZIP_ER_CHANGED)throw new Error(`Assertion failed: Unexpected libzip error: ${a.message}`);return a}setFileSource(e,r,s){let a=this.allocateSource(s);try{let n=this.libzip.file.add(this.zip,e,a,this.libzip.ZIP_FL_OVERWRITE);if(n===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(r!==null&&this.libzip.file.setCompression(this.zip,n,0,r[0],r[1])===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return n}catch(n){throw this.libzip.source.free(a),n}}setMtime(e,r){if(this.libzip.file.setMtime(this.zip,e,0,r,0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}getExternalAttributes(e){if(this.libzip.file.getExternalAttributes(this.zip,e,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let s=this.libzip.getValue(this.libzip.uint08S,"i8")>>>0,a=this.libzip.getValue(this.libzip.uint32S,"i32")>>>0;return[s,a]}setExternalAttributes(e,r,s){if(this.libzip.file.setExternalAttributes(this.zip,e,0,0,r,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}locate(e){return this.libzip.name.locate(this.zip,e,0)}getFileSource(e){let r=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,e,0,0,r)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.libzip.struct.statCompSize(r),n=this.libzip.struct.statCompMethod(r),c=this.libzip.malloc(a);try{let f=this.libzip.fopenIndex(this.zip,e,0,this.libzip.ZIP_FL_COMPRESSED);if(f===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let p=this.libzip.fread(f,c,a,0);if(p===-1)throw this.makeLibzipError(this.libzip.file.getError(f));if(pa)throw new Error("Overread");let h=this.libzip.HEAPU8.subarray(c,c+a);return{data:Buffer.from(h),compressionMethod:n}}finally{this.libzip.fclose(f)}}finally{this.libzip.free(c)}}deleteEntry(e){if(this.libzip.delete(this.zip,e)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}addDirectory(e){let r=this.libzip.dir.add(this.zip,e);if(r===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return r}getBufferAndClose(){try{if(this.libzip.source.keep(this.lzSource),this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.source.open(this.lzSource)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_END)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let e=this.libzip.source.tell(this.lzSource);if(e===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_SET)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let r=this.libzip.malloc(e);if(!r)throw new Error("Couldn't allocate enough memory");try{let s=this.libzip.source.read(this.lzSource,r,e);if(s===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(se)throw new Error("Overread");let a=Buffer.from(this.libzip.HEAPU8.subarray(r,r+e));return process.env.YARN_IS_TEST_ENV&&process.env.YARN_ZIP_DATA_EPILOGUE&&(a=Buffer.concat([a,Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)])),a}finally{this.libzip.free(r)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource)}}allocateBuffer(e){Buffer.isBuffer(e)||(e=Buffer.from(e));let r=this.libzip.malloc(e.byteLength);if(!r)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,r,e.byteLength).set(e),{buffer:r,byteLength:e.byteLength}}allocateUnattachedSource(e){let r=this.libzip.struct.errorS(),{buffer:s,byteLength:a}=this.allocateBuffer(e),n=this.libzip.source.fromUnattachedBuffer(s,a,0,1,r);if(n===0)throw this.libzip.free(r),this.makeLibzipError(r);return n}allocateSource(e){let{buffer:r,byteLength:s}=this.allocateBuffer(e),a=this.libzip.source.fromBuffer(this.zip,r,s,0,1);if(a===0)throw this.libzip.free(r),this.makeLibzipError(this.libzip.getError(this.zip));return a}discard(){this.libzip.discard(this.zip)}}});function Wdt(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof t=="number"&&Number.isFinite(t))return t<0?Date.now()/1e3:t;if(Fde.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function CT(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var ka,Yj,Fde,Vj,om,Kj,Jj,Nde,hs,wT=Ct(()=>{bt();bt();bt();bt();bt();bt();ka=Ie("fs"),Yj=Ie("stream"),Fde=Ie("util"),Vj=et(Ie("zlib"));Wj();om=3,Kj=0,Jj=8,Nde="mixed";hs=class extends Uf{constructor(r,s={}){super();this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;s.readOnly&&(this.readOnly=!0);let a=s;this.level=typeof a.level<"u"?a.level:Nde;let n=s.customZipImplementation??wI;if(typeof r=="string"){let{baseFs:f=new Yn}=a;this.baseFs=f,this.path=r}else this.path=null,this.baseFs=null;if(s.stats)this.stats=s.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(f){if(f.code==="ENOENT"&&a.create)this.stats=el.makeDefaultStats();else throw f}else this.stats=el.makeDefaultStats();typeof r=="string"?s.create?this.zipImpl=new n({buffer:CT(),readOnly:this.readOnly}):this.zipImpl=new n({path:r,baseFs:this.baseFs,readOnly:this.readOnly,size:this.stats.size}):this.zipImpl=new n({buffer:r??CT(),readOnly:this.readOnly}),this.listings.set(vt.root,new Set);let c=this.zipImpl.getListings();for(let f=0;f{this.closeSync(f)}})}async readPromise(r,s,a,n,c){return this.readSync(r,s,a,n,c)}readSync(r,s,a=0,n=s.byteLength,c=-1){let f=this.fds.get(r);if(typeof f>"u")throw or.EBADF("read");let p=c===-1||c===null?f.cursor:c,h=this.readFileSync(f.p);h.copy(s,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(c===-1||c===null)&&(f.cursor+=E),E}async writePromise(r,s,a,n,c){return typeof s=="string"?this.writeSync(r,s,c):this.writeSync(r,s,a,n,c)}writeSync(r,s,a,n,c){throw typeof this.fds.get(r)>"u"?or.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw or.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:s}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new Yj.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(f,p)=>{clearImmediate(c),this.closeSync(a),p(f)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),c=setImmediate(async()=>{try{let f=await this.readFilePromise(r,s);n.bytesRead=f.length,n.end(f)}catch(f){n.destroy(f)}});return n}createWriteStream(r,{encoding:s}={}){if(this.readOnly)throw or.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),c=Object.assign(new Yj.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(f,p)=>{try{f?p(f):(this.writeFileSync(r,Buffer.concat(a),s),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){c.destroy()},bytesWritten:0,path:r,pending:!1});return c.on("data",f=>{let p=Buffer.from(f);c.bytesWritten+=p.length,a.push(p)}),c}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let s=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(s)&&!this.listings.has(s))throw or.ENOENT(`lstat '${r}'`);return s}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw or.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=K.resolve(vt.root,r);return this.entries.has(a)||this.listings.has(a)}let s;try{s=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return s===void 0?!1:this.entries.has(s)||this.listings.has(s)}async accessPromise(r,s){return this.accessSync(r,s)}accessSync(r,s=ka.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw or.ENOENT(`access '${r}'`);if(this.readOnly&&s&ka.constants.W_OK)throw or.EROFS(`access '${r}'`)}async statPromise(r,s={bigint:!1}){return s.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,s={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,s.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(s.throwIfNoEntry===!1)return;throw or.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw or.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,s)}}async fstatPromise(r,s){return this.fstatSync(r,s)}fstatSync(r,s){let a=this.fds.get(r);if(typeof a>"u")throw or.EBADF("fstatSync");let{p:n}=a,c=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(c)&&!this.listings.has(c))throw or.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(c))throw or.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,c,s)}async lstatPromise(r,s={bigint:!1}){return s.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,s={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,s.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(s.throwIfNoEntry===!1)return;throw or.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw or.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,s)}}statImpl(r,s,a={}){let n=this.entries.get(s);if(typeof n<"u"){let c=this.zipImpl.stat(n),f=c.crc,p=c.size,h=c.mtime*1e3,E=this.stats.uid,C=this.stats.gid,S=512,P=Math.ceil(c.size/S),I=h,R=h,N=h,U=new Date(I),W=new Date(R),te=new Date(N),ie=new Date(h),Ae=this.listings.has(s)?ka.constants.S_IFDIR:this.isSymbolicLink(n)?ka.constants.S_IFLNK:ka.constants.S_IFREG,ce=Ae===ka.constants.S_IFDIR?493:420,me=Ae|this.getUnixMode(n,ce)&511,pe=Object.assign(new el.StatEntry,{uid:E,gid:C,size:p,blksize:S,blocks:P,atime:U,birthtime:W,ctime:te,mtime:ie,atimeMs:I,birthtimeMs:R,ctimeMs:N,mtimeMs:h,mode:me,crc:f});return a.bigint===!0?el.convertToBigIntStats(pe):pe}if(this.listings.has(s)){let c=this.stats.uid,f=this.stats.gid,p=0,h=512,E=0,C=this.stats.mtimeMs,S=this.stats.mtimeMs,P=this.stats.mtimeMs,I=this.stats.mtimeMs,R=new Date(C),N=new Date(S),U=new Date(P),W=new Date(I),te=ka.constants.S_IFDIR|493,Ae=Object.assign(new el.StatEntry,{uid:c,gid:f,size:p,blksize:h,blocks:E,atime:R,birthtime:N,ctime:U,mtime:W,atimeMs:C,birthtimeMs:S,ctimeMs:P,mtimeMs:I,mode:te,crc:0});return a.bigint===!0?el.convertToBigIntStats(Ae):Ae}throw new Error("Unreachable")}getUnixMode(r,s){let[a,n]=this.zipImpl.getExternalAttributes(r);return a!==om?s:n>>>16}registerListing(r){let s=this.listings.get(r);if(s)return s;this.registerListing(K.dirname(r)).add(K.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,s){this.registerListing(K.dirname(r)).add(K.basename(r)),this.entries.set(r,s)}unregisterListing(r){this.listings.delete(r),this.listings.get(K.dirname(r))?.delete(K.basename(r))}unregisterEntry(r){this.unregisterListing(r);let s=this.entries.get(r);this.entries.delete(r),!(typeof s>"u")&&(this.fileSources.delete(s),this.isSymbolicLink(s)&&this.symlinkCount--)}deleteEntry(r,s){this.unregisterEntry(r),this.zipImpl.deleteEntry(s)}resolveFilename(r,s,a=!0,n=!0){if(!this.ready)throw or.EBUSY(`archive closed, ${r}`);let c=K.resolve(vt.root,s);if(c==="/")return vt.root;let f=this.entries.get(c);if(a&&f!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(f)){let p=this.getFileSource(f).toString();return this.resolveFilename(r,K.resolve(K.dirname(c),p),!0,n)}else return c;for(;;){let p=this.resolveFilename(r,K.dirname(c),!0,n);if(p===void 0)return p;let h=this.listings.has(p),E=this.entries.has(p);if(!h&&!E){if(n===!1)return;throw or.ENOENT(r)}if(!h)throw or.ENOTDIR(r);if(c=K.resolve(p,K.basename(c)),!a||this.symlinkCount===0)break;let C=this.zipImpl.locate(c.slice(1));if(C===-1)break;if(this.isSymbolicLink(C)){let S=this.getFileSource(C).toString();c=K.resolve(K.dirname(c),S)}else break}return c}setFileSource(r,s){let a=Buffer.isBuffer(s)?s:Buffer.from(s),n=K.relative(vt.root,r),c=null;this.level!=="mixed"&&(c=[this.level===0?Kj:Jj,this.level]);let f=this.zipImpl.setFileSource(n,c,a);return this.fileSources.set(f,a),f}isSymbolicLink(r){if(this.symlinkCount===0)return!1;let[s,a]=this.zipImpl.getExternalAttributes(r);return s!==om?!1:(a>>>16&ka.constants.S_IFMT)===ka.constants.S_IFLNK}getFileSource(r,s={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let{data:n,compressionMethod:c}=this.zipImpl.getFileSource(r);if(c===Kj)return this.zipImpl.filesShouldBeCached&&this.fileSources.set(r,n),n;if(c===Jj){if(s.asyncDecompress)return new Promise((f,p)=>{Vj.default.inflateRaw(n,(h,E)=>{h?p(h):(this.zipImpl.filesShouldBeCached&&this.fileSources.set(r,E),f(E))})});{let f=Vj.default.inflateRawSync(n);return this.zipImpl.filesShouldBeCached&&this.fileSources.set(r,f),f}}else throw new Error(`Unsupported compression method: ${c}`)}async fchmodPromise(r,s){return this.chmodPromise(this.fdToPath(r,"fchmod"),s)}fchmodSync(r,s){return this.chmodSync(this.fdToPath(r,"fchmodSync"),s)}async chmodPromise(r,s){return this.chmodSync(r,s)}chmodSync(r,s){if(this.readOnly)throw or.EROFS(`chmod '${r}'`);s&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let f=this.getUnixMode(n,ka.constants.S_IFREG|0)&-512|s;this.zipImpl.setExternalAttributes(n,om,f<<16)}async fchownPromise(r,s,a){return this.chownPromise(this.fdToPath(r,"fchown"),s,a)}fchownSync(r,s,a){return this.chownSync(this.fdToPath(r,"fchownSync"),s,a)}async chownPromise(r,s,a){return this.chownSync(r,s,a)}chownSync(r,s,a){throw new Error("Unimplemented")}async renamePromise(r,s){return this.renameSync(r,s)}renameSync(r,s){throw new Error("Unimplemented")}async copyFilePromise(r,s,a){let{indexSource:n,indexDest:c,resolvedDestP:f}=this.prepareCopyFile(r,s,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(f,p);h!==c&&this.registerEntry(f,h)}copyFileSync(r,s,a=0){let{indexSource:n,indexDest:c,resolvedDestP:f}=this.prepareCopyFile(r,s,a),p=this.getFileSource(n),h=this.setFileSource(f,p);h!==c&&this.registerEntry(f,h)}prepareCopyFile(r,s,a=0){if(this.readOnly)throw or.EROFS(`copyfile '${r} -> '${s}'`);if(a&ka.constants.COPYFILE_FICLONE_FORCE)throw or.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${s}'`);let n=this.resolveFilename(`copyfile '${r} -> ${s}'`,r),c=this.entries.get(n);if(typeof c>"u")throw or.EINVAL(`copyfile '${r}' -> '${s}'`);let f=this.resolveFilename(`copyfile '${r}' -> ${s}'`,s),p=this.entries.get(f);if(a&(ka.constants.COPYFILE_EXCL|ka.constants.COPYFILE_FICLONE_FORCE)&&typeof p<"u")throw or.EEXIST(`copyfile '${r}' -> '${s}'`);return{indexSource:c,resolvedDestP:f,indexDest:p}}async appendFilePromise(r,s,a){if(this.readOnly)throw or.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,s,a)}appendFileSync(r,s,a={}){if(this.readOnly)throw or.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,s,a)}fdToPath(r,s){let a=this.fds.get(r)?.p;if(typeof a>"u")throw or.EBADF(s);return a}async writeFilePromise(r,s,a){let{encoding:n,mode:c,index:f,resolvedP:p}=this.prepareWriteFile(r,a);f!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(s=Buffer.concat([await this.getFileSource(f,{asyncDecompress:!0}),Buffer.from(s)])),n!==null&&(s=s.toString(n));let h=this.setFileSource(p,s);h!==f&&this.registerEntry(p,h),c!==null&&await this.chmodPromise(p,c)}writeFileSync(r,s,a){let{encoding:n,mode:c,index:f,resolvedP:p}=this.prepareWriteFile(r,a);f!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(s=Buffer.concat([this.getFileSource(f),Buffer.from(s)])),n!==null&&(s=s.toString(n));let h=this.setFileSource(p,s);h!==f&&this.registerEntry(p,h),c!==null&&this.chmodSync(p,c)}prepareWriteFile(r,s){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw or.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw or.EISDIR(`open '${r}'`);let n=null,c=null;typeof s=="string"?n=s:typeof s=="object"&&({encoding:n=null,mode:c=null}=s);let f=this.entries.get(a);return{encoding:n,mode:c,resolvedP:a,index:f}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw or.EROFS(`unlink '${r}'`);let s=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(s))throw or.EISDIR(`unlink '${r}'`);let a=this.entries.get(s);if(typeof a>"u")throw or.EINVAL(`unlink '${r}'`);this.deleteEntry(s,a)}async utimesPromise(r,s,a){return this.utimesSync(r,s,a)}utimesSync(r,s,a){if(this.readOnly)throw or.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,s,a){return this.lutimesSync(r,s,a)}lutimesSync(r,s,a){if(this.readOnly)throw or.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,s){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");this.zipImpl.setMtime(a,Wdt(s))}async mkdirPromise(r,s){return this.mkdirSync(r,s)}mkdirSync(r,{mode:s=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:s});if(this.readOnly)throw or.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw or.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,s)}async rmdirPromise(r,s){return this.rmdirSync(r,s)}rmdirSync(r,{recursive:s=!1}={}){if(this.readOnly)throw or.EROFS(`rmdir '${r}'`);if(s){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw or.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw or.ENOTEMPTY(`rmdir '${r}'`);let c=this.entries.get(a);if(typeof c>"u")throw or.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,c)}async rmPromise(r,s){return this.rmSync(r,s)}rmSync(r,{recursive:s=!1}={}){if(this.readOnly)throw or.EROFS(`rm '${r}'`);if(s){this.removeSync(r);return}let a=this.resolveFilename(`rm '${r}'`,r),n=this.listings.get(a);if(!n)throw or.ENOTDIR(`rm '${r}'`);if(n.size>0)throw or.ENOTEMPTY(`rm '${r}'`);let c=this.entries.get(a);if(typeof c>"u")throw or.EINVAL(`rm '${r}'`);this.deleteEntry(r,c)}hydrateDirectory(r){let s=this.zipImpl.addDirectory(K.relative(vt.root,r));return this.registerListing(r),this.registerEntry(r,s),s}async linkPromise(r,s){return this.linkSync(r,s)}linkSync(r,s){throw or.EOPNOTSUPP(`link '${r}' -> '${s}'`)}async symlinkPromise(r,s){return this.symlinkSync(r,s)}symlinkSync(r,s){if(this.readOnly)throw or.EROFS(`symlink '${r}' -> '${s}'`);let a=this.resolveFilename(`symlink '${r}' -> '${s}'`,s);if(this.listings.has(a))throw or.EISDIR(`symlink '${r}' -> '${s}'`);if(this.entries.has(a))throw or.EEXIST(`symlink '${r}' -> '${s}'`);let n=this.setFileSource(a,r);this.registerEntry(a,n),this.zipImpl.setExternalAttributes(n,om,(ka.constants.S_IFLNK|511)<<16),this.symlinkCount+=1}async readFilePromise(r,s){typeof s=="object"&&(s=s?s.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return s?a.toString(s):a}readFileSync(r,s){typeof s=="object"&&(s=s?s.encoding:void 0);let a=this.readFileBuffer(r);return s?a.toString(s):a}readFileBuffer(r,s={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw or.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw or.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw or.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,s)}async readdirPromise(r,s){return this.readdirSync(r,s)}readdirSync(r,s){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw or.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw or.ENOTDIR(`scandir '${r}'`);if(s?.recursive)if(s?.withFileTypes){let c=Array.from(n,f=>Object.assign(this.statImpl("lstat",K.join(r,f)),{name:f,path:vt.dot}));for(let f of c){if(!f.isDirectory())continue;let p=K.join(f.path,f.name),h=this.listings.get(K.join(a,p));for(let E of h)c.push(Object.assign(this.statImpl("lstat",K.join(r,p,E)),{name:E,path:p}))}return c}else{let c=[...n];for(let f of c){let p=this.listings.get(K.join(a,f));if(!(typeof p>"u"))for(let h of p)c.push(K.join(f,h))}return c}else return s?.withFileTypes?Array.from(n,c=>Object.assign(this.statImpl("lstat",K.join(r,c)),{name:c,path:void 0})):[...n]}async readlinkPromise(r){let s=this.prepareReadlink(r);return(await this.getFileSource(s,{asyncDecompress:!0})).toString()}readlinkSync(r){let s=this.prepareReadlink(r);return this.getFileSource(s).toString()}prepareReadlink(r){let s=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(s)&&!this.listings.has(s))throw or.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(s))throw or.ENOTDIR(`open '${r}'`);if(this.listings.has(s))throw or.EINVAL(`readlink '${r}'`);let a=this.entries.get(s);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw or.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,s=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw or.EINVAL(`open '${r}'`);let c=await this.getFileSource(n,{asyncDecompress:!0}),f=Buffer.alloc(s,0);return c.copy(f),await this.writeFilePromise(r,f)}truncateSync(r,s=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw or.EINVAL(`open '${r}'`);let c=this.getFileSource(n),f=Buffer.alloc(s,0);return c.copy(f),this.writeFileSync(r,f)}async ftruncatePromise(r,s){return this.truncatePromise(this.fdToPath(r,"ftruncate"),s)}ftruncateSync(r,s){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),s)}watch(r,s,a){let n;switch(typeof s){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=s);break}if(!n)return{on:()=>{},close:()=>{}};let c=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(c)}}}watchFile(r,s,a){let n=K.resolve(vt.root,r);return nE(this,n,s,a)}unwatchFile(r,s){let a=K.resolve(vt.root,r);return dd(this,a,s)}}});function Lde(t,e,r=Buffer.alloc(0),s){let a=new hs(r),n=C=>C===e||C.startsWith(`${e}/`)?C.slice(0,e.length):null,c=async(C,S)=>()=>a,f=(C,S)=>a,p={...t},h=new Yn(p),E=new r0({baseFs:h,getMountPoint:n,factoryPromise:c,factorySync:f,magicByte:21,maxAge:1/0,typeCheck:s?.typeCheck});return _2(Ode.default,new n0(E)),a}var Ode,Mde=Ct(()=>{bt();Ode=et(Ie("fs"));wT()});var _de=Ct(()=>{Rde();wT();Mde()});var zj,Ev,BT,Ude=Ct(()=>{bt();wT();zj={CENTRAL_DIRECTORY:33639248,END_OF_CENTRAL_DIRECTORY:101010256},Ev=22,BT=class t{constructor(e){this.filesShouldBeCached=!1;if("buffer"in e)throw new Error("Buffer based zip archives are not supported");if(!e.readOnly)throw new Error("Writable zip archives are not supported");this.baseFs=e.baseFs,this.fd=this.baseFs.openSync(e.path,"r");try{this.entries=t.readZipSync(this.fd,this.baseFs,e.size)}catch(r){throw this.baseFs.closeSync(this.fd),this.fd="closed",r}}static readZipSync(e,r,s){if(s=0;N--)if(n.readUInt32LE(N)===zj.END_OF_CENTRAL_DIRECTORY){a=N;break}if(a===-1)throw new Error("Not a zip archive")}let c=n.readUInt16LE(a+10),f=n.readUInt32LE(a+12),p=n.readUInt32LE(a+16),h=n.readUInt16LE(a+20);if(a+h+Ev>n.length)throw new Error("Zip archive inconsistent");if(c==65535||f==4294967295||p==4294967295)throw new Error("Zip 64 is not supported");if(f>s)throw new Error("Zip archive inconsistent");if(c>f/46)throw new Error("Zip archive inconsistent");let E=Buffer.alloc(f);if(r.readSync(e,E,0,E.length,p)!==E.length)throw new Error("Zip archive inconsistent");let C=[],S=0,P=0,I=0;for(;PE.length)throw new Error("Zip archive inconsistent");if(E.readUInt32LE(S)!==zj.CENTRAL_DIRECTORY)throw new Error("Zip archive inconsistent");let N=E.readUInt16LE(S+4)>>>8;if(E.readUInt16LE(S+8)&1)throw new Error("Encrypted zip files are not supported");let W=E.readUInt16LE(S+10),te=E.readUInt32LE(S+16),ie=E.readUInt16LE(S+28),Ae=E.readUInt16LE(S+30),ce=E.readUInt16LE(S+32),me=E.readUInt32LE(S+42),pe=E.toString("utf8",S+46,S+46+ie).replaceAll("\0"," ");if(pe.includes("\0"))throw new Error("Invalid ZIP file");let Be=E.readUInt32LE(S+20),Ce=E.readUInt32LE(S+38);C.push({name:pe,os:N,mtime:fi.SAFE_TIME,crc:te,compressionMethod:W,isSymbolicLink:N===om&&(Ce>>>16&fi.S_IFMT)===fi.S_IFLNK,size:E.readUInt32LE(S+24),compressedSize:Be,externalAttributes:Ce,localHeaderOffset:me}),I+=Be,P+=1,S+=46+ie+Ae+ce}if(I>s)throw new Error("Zip archive inconsistent");if(S!==E.length)throw new Error("Zip archive inconsistent");return C}getExternalAttributes(e){let r=this.entries[e];return[r.os,r.externalAttributes]}getListings(){return this.entries.map(e=>e.name)}getSymlinkCount(){let e=0;for(let r of this.entries)r.isSymbolicLink&&(e+=1);return e}stat(e){let r=this.entries[e];return{crc:r.crc,mtime:r.mtime,size:r.size}}locate(e){for(let r=0;rNde,DEFLATE:()=>Jj,JsZipImpl:()=>BT,LibZipImpl:()=>wI,STORE:()=>Kj,ZIP_UNIX:()=>om,ZipFS:()=>hs,ZipOpenFS:()=>tA,getArchivePart:()=>qj,getLibzipPromise:()=>Vdt,getLibzipSync:()=>Ydt,makeEmptyArchive:()=>CT,mountMemoryDrive:()=>Lde});function Ydt(){return yv()}async function Vdt(){return yv()}var Hde,rA=Ct(()=>{Uj();Hde=et(xde());Tde();_de();Ude();Wj();Pde(()=>{let t=(0,Hde.default)();return Qde(t)})});var Cv,jde=Ct(()=>{bt();Wt();wv();Cv=class extends ot{constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd(),{description:"The directory to run the command in"});this.commandName=ge.String();this.args=ge.Proxy()}static{this.usage={description:"run a command using yarn's portable shell",details:` - This command will run a command using Yarn's portable shell. - - Make sure to escape glob patterns, redirections, and other features that might be expanded by your own shell. - - Note: To escape something from Yarn's shell, you might have to escape it twice, the first time from your own shell. - - Note: Don't use this command in Yarn scripts, as Yarn's shell is automatically used. - - For a list of features, visit: https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-shell/README.md. - `,examples:[["Run a simple command","$0 echo Hello"],["Run a command with a glob pattern","$0 echo '*.js'"],["Run a command with a redirection","$0 echo Hello World '>' hello.txt"],["Run a command with an escaped glob pattern (The double escape is needed in Unix shells)",`$0 echo '"*.js"'`],["Run a command with a variable (Double quotes are needed in Unix shells, to prevent them from expanding the variable)",'$0 "GREETING=Hello echo $GREETING World"']]}}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await BI(r,[],{cwd:ue.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}}});var Kl,qde=Ct(()=>{Kl=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var DT={};Vt(DT,{fastGlobOptions:()=>Yde,isBraceExpansion:()=>Zj,isGlobPattern:()=>Kdt,match:()=>Jdt,micromatchOptions:()=>ST});function Kdt(t){if(!vT.default.scan(t,ST).isGlob)return!1;try{vT.default.parse(t,ST)}catch{return!1}return!0}function Jdt(t,{cwd:e,baseFs:r}){return(0,Gde.default)(t,{...Yde,cwd:ue.fromPortablePath(e),fs:gx(Wde.default,new n0(r))})}function Zj(t){return vT.default.scan(t,ST).isBrace}var Gde,Wde,vT,ST,Yde,Vde=Ct(()=>{bt();Gde=et(CQ()),Wde=et(Ie("fs")),vT=et(Sa()),ST={strictBrackets:!0},Yde={onlyDirectories:!1,onlyFiles:!1}});function Xj(){}function $j(){for(let t of am)t.kill()}function Zde(t,e,r,s){return a=>{let n=a[0]instanceof nA.Transform?"pipe":a[0],c=a[1]instanceof nA.Transform?"pipe":a[1],f=a[2]instanceof nA.Transform?"pipe":a[2],p=(0,Jde.default)(t,e,{...s,stdio:[n,c,f]});return am.add(p),am.size===1&&(process.on("SIGINT",Xj),process.on("SIGTERM",$j)),a[0]instanceof nA.Transform&&a[0].pipe(p.stdin),a[1]instanceof nA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof nA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(am.delete(p),am.size===0&&(process.off("SIGINT",Xj),process.off("SIGTERM",$j)),E.code){case"ENOENT":a[2].write(`command not found: ${t} -`),h(127);break;case"EACCES":a[2].write(`permission denied: ${t} -`),h(128);break;default:a[2].write(`uncaught error: ${E.message} -`),h(1);break}}),p.on("close",E=>{am.delete(p),am.size===0&&(process.off("SIGINT",Xj),process.off("SIGTERM",$j)),h(E!==null?E:129)})})}}}function Xde(t){return e=>{let r=e[0]==="pipe"?new nA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function bT(t,e){return t6.start(t,e)}function Kde(t,e=null){let r=new nA.PassThrough,s=new zde.StringDecoder,a="";return r.on("data",n=>{let c=s.write(n),f;do if(f=c.indexOf(` -`),f!==-1){let p=a+c.substring(0,f);c=c.substring(f+1),a="",t(e!==null?`${e} ${p}`:p)}while(f!==-1);a+=c}),r.on("end",()=>{let n=s.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function $de(t,{prefix:e}){return{stdout:Kde(r=>t.stdout.write(`${r} -`),t.stdout.isTTY?e:null),stderr:Kde(r=>t.stderr.write(`${r} -`),t.stderr.isTTY?e:null)}}var Jde,nA,zde,am,Mc,e6,t6,r6=Ct(()=>{Jde=et(j_()),nA=Ie("stream"),zde=Ie("string_decoder"),am=new Set;Mc=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},e6=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");return this.stream}},t6=class t{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:s,stderr:a}){let n=new t(null,e);return n.stdin=r,n.stdout=s,n.stderr=a,n}pipeTo(e,r=1){let s=new t(this,e),a=new e6;return s.pipe=a,s.stdout=this.stdout,s.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),s}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let s;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");s=this.stderr,e[2]=s.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),s.close(),n))}async run(){let e=[];for(let s=this;s;s=s.ancestor)e.push(s.exec());return(await Promise.all(e))[0]}}});var Dv={};Vt(Dv,{EntryCommand:()=>Cv,ShellError:()=>Kl,execute:()=>BI,globUtils:()=>DT});function eme(t,e,r){let s=new Jl.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(s,{end:!1}),(e&2)===2&&r.stdin instanceof Jl.Writable&&s.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(s,{end:!1}),(e&2)===2&&s.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(s,{end:!1}),(e&2)===2&&s.pipe(r.stderr,{end:!1});break;default:throw new Kl(`Bad file descriptor: "${t}"`)}return s}function xT(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function Zdt(t,e,r){let s=[],a=new Jl.PassThrough;return a.on("data",n=>s.push(n)),await kT(t,e,xT(r,{stdout:a})),Buffer.concat(s).toString().replace(/[\r\n]+$/,"")}async function tme(t,e,r){let s=t.map(async n=>{let c=await lm(n.args,e,r);return{name:n.name,value:c.join(" ")}});return(await Promise.all(s)).reduce((n,c)=>(n[c.name]=c.value,n),{})}function PT(t){return t.match(/[^ \r\n\t]+/g)||[]}async function ame(t,e,r,s,a=s){switch(t.name){case"$":s(String(process.pid));break;case"#":s(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let c=PT(n);for(let f=0;f=0&&n"u"&&(t.defaultValue?c=(await lm(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(c="")),typeof c>"u")throw f?new Kl(`Unbound argument #${n}`):new Kl(`Unbound variable "${t.name}"`);if(t.quoted)s(c);else{let p=PT(c);for(let E=0;Es.push(n));let a=Number(s.join(" "));return Number.isNaN(a)?Bv({type:"variable",name:s.join(" ")},e,r):Bv({type:"number",value:a},e,r)}else return Xdt[t.type](await Bv(t.left,e,r),await Bv(t.right,e,r))}async function lm(t,e,r){let s=new Map,a=[],n=[],c=E=>{n.push(E)},f=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{c(E),f()},h=(E,C,S)=>{let P=JSON.stringify({type:E,fd:C}),I=s.get(P);typeof I>"u"&&s.set(P,I=[]),I.push(S)};for(let E of t){let C=!1;switch(E.type){case"redirection":{let S=await lm(E.args,e,r);for(let P of S)h(E.subtype,E.fd,P)}break;case"argument":for(let S of E.segments)switch(S.type){case"text":c(S.text);break;case"glob":c(S.pattern),C=!0;break;case"shell":{let P=await Zdt(S.shell,e,r);if(S.quoted)c(P);else{let I=PT(P);for(let R=0;R"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let P=await e.glob.match(S,{cwd:r.cwd,baseFs:e.baseFs});if(P.length===0){let I=Zj(S)?". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22":"";throw new Kl(`No matches found: "${S}"${I}`)}for(let I of P.sort())p(I)}}if(s.size>0){let E=[];for(let[C,S]of s.entries())E.splice(E.length,0,C,String(S.length),...S);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function vv(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let s=ue.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:s});let[n,...c]=t;if(n==="command")return Zde(c[0],c.slice(1),e,{cwd:s,env:a});let f=e.builtins.get(n);if(typeof f>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return Xde(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:C,stdout:S,stderr:P}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await f(c,e,r)}finally{r.stdin=C,r.stdout=S,r.stderr=P}})}function $dt(t,e,r){return s=>{let a=new Jl.PassThrough,n=kT(t,e,xT(r,{stdin:a}));return{stdin:a,promise:n}}}function emt(t,e,r){return s=>{let a=new Jl.PassThrough,n=kT(t,e,r);return{stdin:a,promise:n}}}function rme(t,e,r,s){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(s.procedures,a));return s.procedures={...s.procedures},s.procedures[a]=t,vv([...e,"__ysh_run_procedure",a],r,s)}}async function nme(t,e,r){let s=t,a=null,n=null;for(;s;){let c=s.then?{...r}:r,f;switch(s.type){case"command":{let p=await lm(s.args,e,r),h=await tme(s.envs,e,r);f=s.envs.length?vv(p,e,xT(c,{environment:h})):vv(p,e,c)}break;case"subshell":{let p=await lm(s.args,e,r),h=$dt(s.subshell,e,c);f=rme(h,p,e,c)}break;case"group":{let p=await lm(s.args,e,r),h=emt(s.group,e,c);f=rme(h,p,e,c)}break;case"envs":{let p=await tme(s.envs,e,r);c.environment={...c.environment,...p},f=vv(["true"],e,c)}break}if(typeof f>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=bT(f,{stdin:new Mc(c.stdin),stdout:new Mc(c.stdout),stderr:new Mc(c.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(f,1);break;case"|&":n=n.pipeTo(f,3);break}}s.then?(a=s.then.type,s=s.then.chain):s=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function tmt(t,e,r,{background:s=!1}={}){function a(n){let c=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],f=c[n%c.length];return ime.default.hex(f)}if(s){let n=r.nextBackgroundJobIndex++,c=a(n),f=`[${n}]`,p=c(f),{stdout:h,stderr:E}=$de(r,{prefix:p});return r.backgroundJobs.push(nme(t,e,xT(r,{stdout:h,stderr:E})).catch(C=>E.write(`${C.message} -`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${c(uE(t))}' has ended -`)})),0}return await nme(t,e,r)}async function rmt(t,e,r,{background:s=!1}={}){let a,n=f=>{a=f,r.variables["?"]=String(f)},c=async f=>{try{return await tmt(f.chain,e,r,{background:s&&typeof f.then>"u"})}catch(p){if(!(p instanceof Kl))throw p;return r.stderr.write(`${p.message} -`),1}};for(n(await c(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await c(t.then.line));break;case"||":a!==0&&n(await c(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function kT(t,e,r){let s=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:c}of t){if(a=await rmt(n,e,r,{background:c==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=s,a}function lme(t){switch(t.type){case"variable":return t.name==="@"||t.name==="#"||t.name==="*"||Number.isFinite(parseInt(t.name,10))||"defaultValue"in t&&!!t.defaultValue&&t.defaultValue.some(e=>Sv(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>Sv(e));case"arithmetic":return n6(t.arithmetic);case"shell":return i6(t.shell);default:return!1}}function Sv(t){switch(t.type){case"redirection":return t.args.some(e=>Sv(e));case"argument":return t.segments.some(e=>lme(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function n6(t){switch(t.type){case"variable":return lme(t);case"number":return!1;default:return n6(t.left)||n6(t.right)}}function i6(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let s;switch(r.type){case"subshell":s=i6(r.subshell);break;case"command":s=r.envs.some(a=>a.args.some(n=>Sv(n)))||r.args.some(a=>Sv(a));break}if(s)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function BI(t,e=[],{baseFs:r=new Yn,builtins:s={},cwd:a=ue.toPortablePath(process.cwd()),env:n=process.env,stdin:c=process.stdin,stdout:f=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=DT}={}){let C={};for(let[I,R]of Object.entries(n))typeof R<"u"&&(C[I]=R);let S=new Map(zdt);for(let[I,R]of Object.entries(s))S.set(I,R);c===null&&(c=new Jl.PassThrough,c.end());let P=yx(t,E);if(!i6(P)&&P.length>0&&e.length>0){let{command:I}=P[P.length-1];for(;I.then;)I=I.then.line;let R=I.chain;for(;R.then;)R=R.then.chain;R.type==="command"&&(R.args=R.args.concat(e.map(N=>({type:"argument",segments:[{type:"text",text:N}]}))))}return await kT(P,{args:e,baseFs:r,builtins:S,initialStdin:c,initialStdout:f,initialStderr:p,glob:E},{cwd:a,environment:C,exitCode:null,procedures:{},stdin:c,stdout:f,stderr:p,variables:Object.assign({},h,{"?":0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var ime,sme,Jl,ome,zdt,Xdt,wv=Ct(()=>{bt();Bc();ime=et(kE()),sme=Ie("os"),Jl=Ie("stream"),ome=Ie("timers/promises");jde();qde();Vde();r6();r6();zdt=new Map([["cd",async([t=(0,sme.homedir)(),...e],r,s)=>{let a=K.resolve(s.cwd,ue.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(c=>{throw c.code==="ENOENT"?new Kl(`cd: no such file or directory: ${t}`):c})).isDirectory())throw new Kl(`cd: not a directory: ${t}`);return s.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${ue.fromPortablePath(r.cwd)} -`),0)],[":",async(t,e,r)=>0],["true",async(t,e,r)=>0],["false",async(t,e,r)=>1],["exit",async([t,...e],r,s)=>s.exitCode=parseInt(t??s.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} -`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new Kl("sleep: missing operand");let s=Number(t);if(Number.isNaN(s))throw new Kl(`sleep: invalid time interval '${t}'`);return await(0,ome.setTimeout)(1e3*s,0)}],["unset",async(t,e,r)=>{for(let s of t)delete r.environment[s],delete r.variables[s];return 0}],["__ysh_run_procedure",async(t,e,r)=>{let s=r.procedures[t[0]];return await bT(s,{stdin:new Mc(r.stdin),stdout:new Mc(r.stdout),stderr:new Mc(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let s=r.stdin,a=r.stdout,n=r.stderr,c=[],f=[],p=[],h=0;for(;t[h]!=="--";){let C=t[h++],{type:S,fd:P}=JSON.parse(C),I=W=>{switch(P){case null:case 0:c.push(W);break;default:throw new Error(`Unsupported file descriptor: "${P}"`)}},R=W=>{switch(P){case null:case 1:f.push(W);break;case 2:p.push(W);break;default:throw new Error(`Unsupported file descriptor: "${P}"`)}},N=Number(t[h++]),U=h+N;for(let W=h;We.baseFs.createReadStream(K.resolve(r.cwd,ue.toPortablePath(t[W]))));break;case"<<<":I(()=>{let te=new Jl.PassThrough;return process.nextTick(()=>{te.write(`${t[W]} -`),te.end()}),te});break;case"<&":I(()=>eme(Number(t[W]),1,r));break;case">":case">>":{let te=K.resolve(r.cwd,ue.toPortablePath(t[W]));R(te==="/dev/null"?new Jl.Writable({autoDestroy:!0,emitClose:!0,write(ie,Ae,ce){setImmediate(ce)}}):e.baseFs.createWriteStream(te,S===">>"?{flags:"a"}:void 0))}break;case">&":R(eme(Number(t[W]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${S}"`)}}if(c.length>0){let C=new Jl.PassThrough;s=C;let S=P=>{if(P===c.length)C.end();else{let I=c[P]();I.pipe(C,{end:!1}),I.on("end",()=>{S(P+1)})}};S(0)}if(f.length>0){let C=new Jl.PassThrough;a=C;for(let S of f)C.pipe(S)}if(p.length>0){let C=new Jl.PassThrough;n=C;for(let S of p)C.pipe(S)}let E=await bT(vv(t.slice(h+1),e,r),{stdin:new Mc(s),stdout:new Mc(a),stderr:new Mc(n)}).run();return await Promise.all(f.map(C=>new Promise((S,P)=>{C.on("error",I=>{P(I)}),C.on("close",()=>{S()}),C.end()}))),await Promise.all(p.map(C=>new Promise((S,P)=>{C.on("error",I=>{P(I)}),C.on("close",()=>{S()}),C.end()}))),E}]]);Xdt={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var QT=L((DXt,cme)=>{function nmt(t,e){for(var r=-1,s=t==null?0:t.length,a=Array(s);++r{var ume=Gd(),imt=QT(),smt=xc(),omt=oI(),amt=1/0,fme=ume?ume.prototype:void 0,Ame=fme?fme.toString:void 0;function pme(t){if(typeof t=="string")return t;if(smt(t))return imt(t,pme)+"";if(omt(t))return Ame?Ame.call(t):"";var e=t+"";return e=="0"&&1/t==-amt?"-0":e}hme.exports=pme});var bv=L((PXt,dme)=>{var lmt=gme();function cmt(t){return t==null?"":lmt(t)}dme.exports=cmt});var s6=L((xXt,mme)=>{function umt(t,e,r){var s=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++s{var fmt=s6();function Amt(t,e,r){var s=t.length;return r=r===void 0?s:r,!e&&r>=s?t:fmt(t,e,r)}yme.exports=Amt});var o6=L((QXt,Ime)=>{var pmt="\\ud800-\\udfff",hmt="\\u0300-\\u036f",gmt="\\ufe20-\\ufe2f",dmt="\\u20d0-\\u20ff",mmt=hmt+gmt+dmt,ymt="\\ufe0e\\ufe0f",Emt="\\u200d",Imt=RegExp("["+Emt+pmt+mmt+ymt+"]");function Cmt(t){return Imt.test(t)}Ime.exports=Cmt});var wme=L((TXt,Cme)=>{function wmt(t){return t.split("")}Cme.exports=wmt});var kme=L((RXt,xme)=>{var Bme="\\ud800-\\udfff",Bmt="\\u0300-\\u036f",vmt="\\ufe20-\\ufe2f",Smt="\\u20d0-\\u20ff",Dmt=Bmt+vmt+Smt,bmt="\\ufe0e\\ufe0f",Pmt="["+Bme+"]",a6="["+Dmt+"]",l6="\\ud83c[\\udffb-\\udfff]",xmt="(?:"+a6+"|"+l6+")",vme="[^"+Bme+"]",Sme="(?:\\ud83c[\\udde6-\\uddff]){2}",Dme="[\\ud800-\\udbff][\\udc00-\\udfff]",kmt="\\u200d",bme=xmt+"?",Pme="["+bmt+"]?",Qmt="(?:"+kmt+"(?:"+[vme,Sme,Dme].join("|")+")"+Pme+bme+")*",Tmt=Pme+bme+Qmt,Rmt="(?:"+[vme+a6+"?",a6,Sme,Dme,Pmt].join("|")+")",Fmt=RegExp(l6+"(?="+l6+")|"+Rmt+Tmt,"g");function Nmt(t){return t.match(Fmt)||[]}xme.exports=Nmt});var Tme=L((FXt,Qme)=>{var Omt=wme(),Lmt=o6(),Mmt=kme();function _mt(t){return Lmt(t)?Mmt(t):Omt(t)}Qme.exports=_mt});var Fme=L((NXt,Rme)=>{var Umt=Eme(),Hmt=o6(),jmt=Tme(),qmt=bv();function Gmt(t){return function(e){e=qmt(e);var r=Hmt(e)?jmt(e):void 0,s=r?r[0]:e.charAt(0),a=r?Umt(r,1).join(""):e.slice(1);return s[t]()+a}}Rme.exports=Gmt});var Ome=L((OXt,Nme)=>{var Wmt=Fme(),Ymt=Wmt("toUpperCase");Nme.exports=Ymt});var c6=L((LXt,Lme)=>{var Vmt=bv(),Kmt=Ome();function Jmt(t){return Kmt(Vmt(t).toLowerCase())}Lme.exports=Jmt});var Mme=L((MXt,TT)=>{function zmt(){var t=0,e=1,r=2,s=3,a=4,n=5,c=6,f=7,p=8,h=9,E=10,C=11,S=12,P=13,I=14,R=15,N=16,U=17,W=0,te=1,ie=2,Ae=3,ce=4;function me(g,we){return 55296<=g.charCodeAt(we)&&g.charCodeAt(we)<=56319&&56320<=g.charCodeAt(we+1)&&g.charCodeAt(we+1)<=57343}function pe(g,we){we===void 0&&(we=0);var ye=g.charCodeAt(we);if(55296<=ye&&ye<=56319&&we=1){var fe=g.charCodeAt(we-1),se=ye;return 55296<=fe&&fe<=56319?(fe-55296)*1024+(se-56320)+65536:se}return ye}function Be(g,we,ye){var fe=[g].concat(we).concat([ye]),se=fe[fe.length-2],X=ye,De=fe.lastIndexOf(I);if(De>1&&fe.slice(1,De).every(function(j){return j==s})&&[s,P,U].indexOf(g)==-1)return ie;var Re=fe.lastIndexOf(a);if(Re>0&&fe.slice(1,Re).every(function(j){return j==a})&&[S,a].indexOf(se)==-1)return fe.filter(function(j){return j==a}).length%2==1?Ae:ce;if(se==t&&X==e)return W;if(se==r||se==t||se==e)return X==I&&we.every(function(j){return j==s})?ie:te;if(X==r||X==t||X==e)return te;if(se==c&&(X==c||X==f||X==h||X==E))return W;if((se==h||se==f)&&(X==f||X==p))return W;if((se==E||se==p)&&X==p)return W;if(X==s||X==R)return W;if(X==n)return W;if(se==S)return W;var dt=fe.indexOf(s)!=-1?fe.lastIndexOf(s)-1:fe.length-2;return[P,U].indexOf(fe[dt])!=-1&&fe.slice(dt+1,-1).every(function(j){return j==s})&&X==I||se==R&&[N,U].indexOf(X)!=-1?W:we.indexOf(a)!=-1?ie:se==a&&X==a?W:te}this.nextBreak=function(g,we){if(we===void 0&&(we=0),we<0)return 0;if(we>=g.length-1)return g.length;for(var ye=Ce(pe(g,we)),fe=[],se=we+1;se{var Zmt=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,RT;function Xmt(){if(RT)return RT;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return RT=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=Mme(),e=new t;return RT=r=>e.splitGraphemes(r)}}_me.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let s=r-e,a="",n=0,c=0;for(;t.length>0;){let f=t.match(Zmt)||[t,t,void 0],p=Xmt()(f[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(s-c,p.length);a+=p.slice(0,E).join(""),n+=h,c+=E,typeof f[2]<"u"&&(a+=f[2]),t=t.slice(f[0].length)}return a}});var un,Pv=Ct(()=>{un=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.9.2"});function Yme(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Vf(t===null?0:t);return!r&&t===null?Ut(e,a,"grey"):a}function u6(t,{configuration:e,json:r}){let s=Yme(t,{configuration:e,json:r});if(!s||t===null||t===0)return s;let a=Dr[t],n=`https://yarnpkg.com/advanced/error-codes#${s}---${a}`.toLowerCase();return KE(e,s,n)}async function vI({configuration:t,stdout:e,forceError:r},s){let a=await Ot.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let c=!1,f=!1;for(let p of s)typeof p.option<"u"&&(p.error||r?(f=!0,n.reportError(50,p.message)):(c=!0,n.reportWarning(50,p.message)),p.callback?.());c&&!f&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Gme,FT,$mt,Hme,jme,S0,Wme,qme,eyt,tyt,NT,ryt,Ot,xv=Ct(()=>{Gme=et(Ume()),FT=et(Rd());Zx();Fc();Pv();Qc();$mt="\xB7",Hme=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],jme=80,S0=FT.default.GITHUB_ACTIONS?{start:t=>`::group::${t} -`,end:t=>`::endgroup:: -`}:FT.default.TRAVIS?{start:t=>`travis_fold:start:${t} -`,end:t=>`travis_fold:end:${t} -`}:FT.default.GITLAB?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}[collapsed=true]\r\x1B[0K${t} -`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r\x1B[0K`}:null,Wme=S0!==null,qme=new Date,eyt=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,tyt=t=>t,NT=tyt({patrick:{date:[17,3],chars:["\u{1F340}","\u{1F331}"],size:40},simba:{date:[19,7],chars:["\u{1F981}","\u{1F334}"],size:40},jack:{date:[31,10],chars:["\u{1F383}","\u{1F987}"],size:40},hogsfather:{date:[31,12],chars:["\u{1F389}","\u{1F384}"],size:40},default:{chars:["=","-"],size:80}}),ryt=eyt&&Object.keys(NT).find(t=>{let e=NT[t];return!(e.date&&(e.date[0]!==qme.getDate()||e.date[1]!==qme.getMonth()+1))})||"default";Ot=class extends ho{constructor({configuration:r,stdout:s,json:a=!1,forceSectionAlignment:n=!1,includeNames:c=!0,includePrefix:f=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:C=h}){super();this.uncommitted=new Set;this.warningCount=0;this.errorCount=0;this.timerFooter=[];this.startTime=Date.now();this.indent=0;this.level=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;if(HB(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=c,this.includePrefix=f,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=C,this.json=a,this.stdout=s,r.get("enableProgressBars")&&!a&&s.isTTY&&s.columns>22){let S=r.get("progressBarStyle")||ryt;if(!Object.hasOwn(NT,S))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=NT[S];let P=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*P/80)}}static async start(r,s){let a=new this(r),n=process.emitWarning;process.emitWarning=(c,f)=>{if(typeof c!="string"){let h=c;c=h.message,f=f??h.name}let p=typeof f<"u"?`${f}: ${c}`:c;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,Kd(r.configuration,`Yarn ${un}`,2));try{await s(a)}catch(c){a.reportExceptionOnce(c)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let s=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,s-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:s,skipIfEmpty:a},n){let c={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(c):(c.action(),c.committed=!0);let f=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(c),c.committed&&s?.(p-f)}}async startSectionPromise({reportHeader:r,reportFooter:s,skipIfEmpty:a},n){let c={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(c):(c.action(),c.committed=!0);let f=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(c),c.committed&&s?.(p-f)}}startTimerImpl(r,s,a){return{cb:typeof s=="function"?s:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,S0!==null&&!this.json&&this.includeInfos&&this.stdout.write(S0.start(r))},reportFooter:f=>{if(this.indent-=1,S0!==null&&!this.json&&this.includeInfos){this.stdout.write(S0.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&f>200?this.reportInfo(null,`\u2514 Completed in ${Ut(this.configuration,f,pt.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof s=="function"?{}:s).skipIfEmpty}}startTimerSync(r,s,a){let{cb:n,...c}=this.startTimerImpl(r,s,a);return this.startSectionSync(c,n)}async startTimerPromise(r,s,a){let{cb:n,...c}=this.startTimerImpl(r,s,a);return this.startSectionPromise(c,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,s){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",c=`${this.formatPrefix(n,"blueBright")}${s}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:s}):this.writeLine(c)}reportWarning(r,s){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:s}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${s}`)}reportError(r,s){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,s)),this.reportErrorImpl(r,s)}reportErrorImpl(r,s){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:s}):this.writeLine(`${this.formatPrefix(n,"redBright")}${s}`,{truncate:!1})}reportFold(r,s){if(!S0)return;let a=`${S0.start(r)}${s}${S0.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let s=!1,a=Promise.resolve().then(async()=>{let c={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:c,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:f,title:p}of r)s||c.progress===f&&c.title===p||(c.progress=f,c.title=p,this.refreshProgress());n()}),n=()=>{s||(s=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let s=Ut(this.configuration,Date.now()-this.startTime,pt.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${s}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:s}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:s})} -`),this.writeProgress()}writeLines(r,{truncate:s}={}){this.clearProgress({delta:r.length});for(let a of r)this.stdout.write(`${this.truncate(a,{truncate:s})} -`);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let s of r)s.committed=!0,s.action()}clearProgress({delta:r=0,clear:s=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||s)&&this.stdout.write("\x1B[0J"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let r=Date.now();r-this.progressTime>jme&&(this.progressFrame=(this.progressFrame+1)%Hme.length,this.progressTime=r);let s=Hme[this.progressFrame];for(let a of this.progress.values()){let n="";if(typeof a.lastScaledSize<"u"){let h=this.progressStyle.chars[0].repeat(a.lastScaledSize),E=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-a.lastScaledSize);n=` ${h}${E}`}let c=this.formatName(null),f=c?`${c}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${Ut(this.configuration,"\u27A4","blueBright")} ${f}${s}${n}${p} -`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},jme)}refreshProgress({delta:r=0,force:s=!1}={}){let a=!1,n=!1;if(s||this.progress.size===0)a=!0;else for(let c of this.progress.values()){let f=typeof c.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*c.definition.progress):void 0,p=c.lastScaledSize;c.lastScaledSize=f;let h=c.lastTitle;if(c.lastTitle=c.definition.title,f!==p||(n=h!==c.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:s}={}){return this.progressStyle===null&&(s=!1),typeof s>"u"&&(s=this.configuration.get("preferTruncatedLines")),s&&(r=(0,Gme.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?Yme(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,s){return this.includePrefix?`${Ut(this.configuration,"\u27A4",s)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?u6(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${$mt} `}}});var In={};Vt(In,{PackageManager:()=>Jme,detectPackageManager:()=>zme,executePackageAccessibleBinary:()=>tye,executePackageScript:()=>OT,executePackageShellcode:()=>f6,executeWorkspaceAccessibleBinary:()=>cyt,executeWorkspaceLifecycleScript:()=>$me,executeWorkspaceScript:()=>Xme,getPackageAccessibleBinaries:()=>LT,getWorkspaceAccessibleBinaries:()=>eye,hasPackageScript:()=>oyt,hasWorkspaceScript:()=>A6,isNodeScript:()=>p6,makeScriptEnv:()=>kv,maybeExecuteWorkspaceLifecycleScript:()=>lyt,prepareExternalProject:()=>syt});async function D0(t,e,r,s=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${s.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await le.writeFilePromise(K.format({dir:t,name:e,ext:".cmd"}),a)}await le.writeFilePromise(K.join(t,e),`#!/bin/sh -exec "${r}" ${s.map(a=>`'${a.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" -`,{mode:493})}async function zme(t){let e=await Ht.tryFind(t);if(e?.packageManager){let s=bQ(e.packageManager);if(s?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=s.reference.split(".");switch(s.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await le.readFilePromise(K.join(t,Er.lockfile),"utf8")}catch{}return r!==void 0?r.match(/^__metadata:$/m)?{packageManager:"Yarn",reason:'"__metadata" key found in yarn.lock'}:{packageManager:"Yarn Classic",reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:le.existsSync(K.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:le.existsSync(K.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function kv({project:t,locator:e,binFolder:r,ignoreCorepack:s,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let c={};for(let[E,C]of Object.entries(n))typeof C<"u"&&(c[E.toLowerCase()!=="path"?E:"PATH"]=C);let f=ue.fromPortablePath(r);c.BERRY_BIN_FOLDER=ue.fromPortablePath(f);let p=process.env.COREPACK_ROOT&&!s?ue.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([D0(r,"node",process.execPath),...un!==null?[D0(r,"run",process.execPath,[p,"run"]),D0(r,"yarn",process.execPath,[p]),D0(r,"yarnpkg",process.execPath,[p]),D0(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(c.INIT_CWD=ue.fromPortablePath(t.configuration.startingCwd),c.PROJECT_CWD=ue.fromPortablePath(t.cwd)),c.PATH=c.PATH?`${f}${ue.delimiter}${c.PATH}`:`${f}`,c.npm_execpath=`${f}${ue.sep}yarn`,c.npm_node_execpath=`${f}${ue.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),C=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";c.npm_package_name=cn(e),c.npm_package_version=C;let S;if(E)S=E.cwd;else{let P=t.storedPackages.get(e.locatorHash);if(!P)throw new Error(`Package for ${Yr(t.configuration,e)} not found in the project`);let I=t.configuration.getLinkers(),R={project:t,report:new Ot({stdout:new b0.PassThrough,configuration:t.configuration})},N=I.find(U=>U.supportsPackage(P,R));if(!N)throw new Error(`The package ${Yr(t.configuration,P)} isn't supported by any of the available linkers`);S=await N.findPackageLocation(P,R)}c.npm_package_json=ue.fromPortablePath(K.join(S,Er.manifest))}let h=un!==null?`yarn/${un}`:`yarn/${kp("@yarnpkg/core").version}-core`;return c.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(c.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,c,async(E,C,S)=>await D0(r,E,C,S)),c}async function syt(t,e,{configuration:r,report:s,workspace:a=null,locator:n=null}){await iyt(async()=>{await le.mktempPromise(async c=>{let f=K.join(c,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(f,{prefix:ue.fromPortablePath(t),report:s}),C=n&&Gu(n)?tI(n):n,S=C?cl(C):"an external project";h.write(`Packing ${S} from sources -`);let P=await zme(t),I;P!==null?(h.write(`Using ${P.packageManager} for bootstrap. Reason: ${P.reason} - -`),I=P.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn - -`),I="Yarn");let R=I==="Yarn"&&!P?.packageManagerField;await le.mktempPromise(async N=>{let U=await kv({binFolder:N,ignoreCorepack:R,baseEnv:{...process.env,COREPACK_ENABLE_AUTO_PIN:"0"}}),te=new Map([["Yarn Classic",async()=>{let Ae=a!==null?["workspace",a]:[],ce=K.join(t,Er.manifest),me=await le.readFilePromise(ce),pe=await Yu(process.execPath,[process.argv[1],"set","version","classic","--only-if-needed","--yarn-path"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(pe.code!==0)return pe.code;await le.writeFilePromise(ce,me),await le.appendFilePromise(K.join(t,".npmignore"),`/.yarn -`),h.write(` -`),delete U.NODE_ENV;let Be=await Yu("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(Be.code!==0)return Be.code;h.write(` -`);let Ce=await Yu("yarn",[...Ae,"pack","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return Ce.code!==0?Ce.code:0}],["Yarn",async()=>{let Ae=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let ce=K.join(t,Er.lockfile);await le.existsPromise(ce)||await le.writeFilePromise(ce,"");let me=await Yu("yarn",[...Ae,"pack","--install-if-needed","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return me.code!==0?me.code:0}],["npm",async()=>{if(a!==null){let we=new b0.PassThrough,ye=GE(we);we.pipe(h,{end:!1});let fe=await Yu("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:we,stderr:E,end:0});if(we.end(),fe.code!==0)return h.end(),E.end(),fe.code;let se=(await ye).toString().trim();if(!eA(se,">=7.x")){let X=ba(null,"npm"),De=On(X,se),Re=On(X,">=7.x");throw new Error(`Workspaces aren't supported by ${ni(r,De)}; please upgrade to ${ni(r,Re)} (npm has been detected as the primary package manager for ${Ut(r,t,pt.PATH)})`)}}let Ae=a!==null?["--workspace",a]:[];delete U.npm_config_user_agent,delete U.npm_config_production,delete U.NPM_CONFIG_PRODUCTION,delete U.NODE_ENV;let ce=await Yu("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(ce.code!==0)return ce.code;let me=new b0.PassThrough,pe=GE(me);me.pipe(h);let Be=await Yu("npm",["pack","--silent",...Ae],{cwd:t,env:U,stdin:p,stdout:me,stderr:E});if(Be.code!==0)return Be.code;let Ce=(await pe).toString().trim().replace(/^.*\n/s,""),g=K.resolve(t,ue.toPortablePath(Ce));return await le.renamePromise(g,e),0}]]).get(I);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let ie=await te();if(!(ie===0||typeof ie>"u"))throw le.detachTemp(c),new Yt(58,`Packing the package failed (exit code ${ie}, logs can be found here: ${Ut(r,f,pt.PATH)})`)})})})}async function oyt(t,e,{project:r}){let s=r.tryWorkspaceByLocator(t);if(s!==null)return A6(s,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${Yr(r.configuration,t)} not found in the project`);return await tA.openPromise(async n=>{let c=r.configuration,f=r.configuration.getLinkers(),p={project:r,report:new Ot({stdout:new b0.PassThrough,configuration:c})},h=f.find(P=>P.supportsPackage(a,p));if(!h)throw new Error(`The package ${Yr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),C=new Sn(E,{baseFs:n});return(await Ht.find(vt.dot,{baseFs:C})).scripts.has(e)})}async function OT(t,e,r,{cwd:s,project:a,stdin:n,stdout:c,stderr:f}){return await le.mktempPromise(async p=>{let{manifest:h,env:E,cwd:C}=await Zme(t,{project:a,binFolder:p,cwd:s,lifecycleScript:e}),S=h.scripts.get(e);if(typeof S>"u")return 1;let P=async()=>await BI(S,r,{cwd:C,env:E,stdin:n,stdout:c,stderr:f});return await(await a.configuration.reduceHook(R=>R.wrapScriptExecution,P,a,t,e,{script:S,args:r,cwd:C,env:E,stdin:n,stdout:c,stderr:f}))()})}async function f6(t,e,r,{cwd:s,project:a,stdin:n,stdout:c,stderr:f}){return await le.mktempPromise(async p=>{let{env:h,cwd:E}=await Zme(t,{project:a,binFolder:p,cwd:s});return await BI(e,r,{cwd:E,env:h,stdin:n,stdout:c,stderr:f})})}async function ayt(t,{binFolder:e,cwd:r,lifecycleScript:s}){let a=await kv({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:s});return await h6(e,await eye(t)),typeof r>"u"&&(r=K.dirname(await le.realpathPromise(K.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function Zme(t,{project:e,binFolder:r,cwd:s,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return ayt(n,{binFolder:r,cwd:s,lifecycleScript:a});let c=e.storedPackages.get(t.locatorHash);if(!c)throw new Error(`Package for ${Yr(e.configuration,t)} not found in the project`);return await tA.openPromise(async f=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Ot({stdout:new b0.PassThrough,configuration:p})},C=h.find(N=>N.supportsPackage(c,E));if(!C)throw new Error(`The package ${Yr(e.configuration,c)} isn't supported by any of the available linkers`);let S=await kv({project:e,locator:t,binFolder:r,lifecycleScript:a});await h6(r,await LT(t,{project:e}));let P=await C.findPackageLocation(c,E),I=new Sn(P,{baseFs:f}),R=await Ht.find(vt.dot,{baseFs:I});return typeof s>"u"&&(s=P),{manifest:R,binFolder:r,env:S,cwd:s}})}async function Xme(t,e,r,{cwd:s,stdin:a,stdout:n,stderr:c}){return await OT(t.anchoredLocator,e,r,{cwd:s,project:t.project,stdin:a,stdout:n,stderr:c})}function A6(t,e){return t.manifest.scripts.has(e)}async function $me(t,e,{cwd:r,report:s}){let{configuration:a}=t.project,n=null;await le.mktempPromise(async c=>{let f=K.join(c,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${ue.fromPortablePath(t.cwd)}") -`,{stdout:h,stderr:E}=a.getSubprocessStreams(f,{report:s,prefix:Yr(a,t.anchoredLocator),header:p});s.reportInfo(36,`Calling the "${e}" lifecycle script`);let C=await Xme(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),C!==0)throw le.detachTemp(c),new Yt(36,`${(0,Vme.default)(e)} script failed (exit code ${Ut(a,C,pt.NUMBER)}, logs can be found here: ${Ut(a,f,pt.PATH)}); run ${Ut(a,`yarn ${e}`,pt.CODE)} to investigate`)})}async function lyt(t,e,r){A6(t,e)&&await $me(t,e,r)}function p6(t){let e=K.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),s;try{s=le.openSync(t,"r")}catch{return!0}try{le.readSync(s,r,0,r.length,0)}finally{le.closeSync(s)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function LT(t,{project:e}){let r=e.configuration,s=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${Yr(r,t)} not found in the project`);let n=new b0.Writable,c=r.getLinkers(),f={project:e,report:new Ot({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let C=e.storedResolutions.get(E.descriptorHash);if(!C)throw new Error(`Assertion failed: The resolution (${ni(r,E)}) should have been registered`);p.add(C)}let h=await Promise.all(Array.from(p,async E=>{let C=e.storedPackages.get(E);if(!C)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(C.bin.size===0)return Yl.skip;let S=c.find(I=>I.supportsPackage(C,f));if(!S)return Yl.skip;let P=null;try{P=await S.findPackageLocation(C,f)}catch(I){if(I.code==="LOCATOR_NOT_INSTALLED")return Yl.skip;throw I}return{dependency:C,packageLocation:P}}));for(let E of h){if(E===Yl.skip)continue;let{dependency:C,packageLocation:S}=E;for(let[P,I]of C.bin){let R=K.resolve(S,I);s.set(P,[C,ue.fromPortablePath(R),p6(R)])}}return s}async function eye(t){return await LT(t.anchoredLocator,{project:t.project})}async function h6(t,e){await Promise.all(Array.from(e,([r,[,s,a]])=>a?D0(t,r,process.execPath,[s]):D0(t,r,s,[])))}async function tye(t,e,r,{cwd:s,project:a,stdin:n,stdout:c,stderr:f,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await LT(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${Yr(a.configuration,t)}`);return await le.mktempPromise(async C=>{let[,S]=E,P=await kv({project:a,locator:t,binFolder:C});await h6(P.BERRY_BIN_FOLDER,h);let I=p6(ue.toPortablePath(S))?Yu(process.execPath,[...p,S,...r],{cwd:s,env:P,stdin:n,stdout:c,stderr:f}):Yu(S,r,{cwd:s,env:P,stdin:n,stdout:c,stderr:f}),R;try{R=await I}finally{await le.removePromise(P.BERRY_BIN_FOLDER)}return R.code})}async function cyt(t,e,r,{cwd:s,stdin:a,stdout:n,stderr:c,packageAccessibleBinaries:f}){return await tye(t.anchoredLocator,e,r,{project:t.project,cwd:s,stdin:a,stdout:n,stderr:c,packageAccessibleBinaries:f})}var Vme,Kme,b0,Jme,nyt,iyt,g6=Ct(()=>{bt();bt();rA();wv();Vme=et(c6()),Kme=et(Od()),b0=Ie("stream");sI();Fc();xv();Pv();hT();Qc();kc();Np();Yo();Jme=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))(Jme||{});nyt=2,iyt=(0,Kme.default)(nyt)});var SI=L((o$t,nye)=>{"use strict";var rye=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]);nye.exports=t=>t?Object.keys(t).map(e=>[rye.has(e)?rye.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var bI=L((a$t,Aye)=>{"use strict";var iye=typeof process=="object"&&process?process:{stdout:null,stderr:null},uyt=Ie("events"),sye=Ie("stream"),oye=Ie("string_decoder").StringDecoder,jp=Symbol("EOF"),qp=Symbol("maybeEmitEnd"),P0=Symbol("emittedEnd"),MT=Symbol("emittingEnd"),Qv=Symbol("emittedError"),_T=Symbol("closed"),aye=Symbol("read"),UT=Symbol("flush"),lye=Symbol("flushChunk"),fl=Symbol("encoding"),Gp=Symbol("decoder"),HT=Symbol("flowing"),Tv=Symbol("paused"),DI=Symbol("resume"),Ks=Symbol("bufferLength"),d6=Symbol("bufferPush"),m6=Symbol("bufferShift"),zo=Symbol("objectMode"),Zo=Symbol("destroyed"),y6=Symbol("emitData"),cye=Symbol("emitEnd"),E6=Symbol("emitEnd2"),Wp=Symbol("async"),Rv=t=>Promise.resolve().then(t),uye=global._MP_NO_ITERATOR_SYMBOLS_!=="1",fyt=uye&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),Ayt=uye&&Symbol.iterator||Symbol("iterator not implemented"),pyt=t=>t==="end"||t==="finish"||t==="prefinish",hyt=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,gyt=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),jT=class{constructor(e,r,s){this.src=e,this.dest=r,this.opts=s,this.ondrain=()=>e[DI](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},I6=class extends jT{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,s){super(e,r,s),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};Aye.exports=class fye extends sye{constructor(e){super(),this[HT]=!1,this[Tv]=!1,this.pipes=[],this.buffer=[],this[zo]=e&&e.objectMode||!1,this[zo]?this[fl]=null:this[fl]=e&&e.encoding||null,this[fl]==="buffer"&&(this[fl]=null),this[Wp]=e&&!!e.async||!1,this[Gp]=this[fl]?new oye(this[fl]):null,this[jp]=!1,this[P0]=!1,this[MT]=!1,this[_T]=!1,this[Qv]=null,this.writable=!0,this.readable=!0,this[Ks]=0,this[Zo]=!1}get bufferLength(){return this[Ks]}get encoding(){return this[fl]}set encoding(e){if(this[zo])throw new Error("cannot set encoding in objectMode");if(this[fl]&&e!==this[fl]&&(this[Gp]&&this[Gp].lastNeed||this[Ks]))throw new Error("cannot change encoding");this[fl]!==e&&(this[Gp]=e?new oye(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[Gp].write(r)))),this[fl]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[zo]}set objectMode(e){this[zo]=this[zo]||!!e}get async(){return this[Wp]}set async(e){this[Wp]=this[Wp]||!!e}write(e,r,s){if(this[jp])throw new Error("write after end");if(this[Zo])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(s=r,r="utf8"),r||(r="utf8");let a=this[Wp]?Rv:n=>n();return!this[zo]&&!Buffer.isBuffer(e)&&(gyt(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):hyt(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[zo]?(this.flowing&&this[Ks]!==0&&this[UT](!0),this.flowing?this.emit("data",e):this[d6](e),this[Ks]!==0&&this.emit("readable"),s&&a(s),this.flowing):e.length?(typeof e=="string"&&!(r===this[fl]&&!this[Gp].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[fl]&&(e=this[Gp].write(e)),this.flowing&&this[Ks]!==0&&this[UT](!0),this.flowing?this.emit("data",e):this[d6](e),this[Ks]!==0&&this.emit("readable"),s&&a(s),this.flowing):(this[Ks]!==0&&this.emit("readable"),s&&a(s),this.flowing)}read(e){if(this[Zo])return null;if(this[Ks]===0||e===0||e>this[Ks])return this[qp](),null;this[zo]&&(e=null),this.buffer.length>1&&!this[zo]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Ks])]);let r=this[aye](e||null,this.buffer[0]);return this[qp](),r}[aye](e,r){return e===r.length||e===null?this[m6]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Ks]-=e),this.emit("data",r),!this.buffer.length&&!this[jp]&&this.emit("drain"),r}end(e,r,s){return typeof e=="function"&&(s=e,e=null),typeof r=="function"&&(s=r,r="utf8"),e&&this.write(e,r),s&&this.once("end",s),this[jp]=!0,this.writable=!1,(this.flowing||!this[Tv])&&this[qp](),this}[DI](){this[Zo]||(this[Tv]=!1,this[HT]=!0,this.emit("resume"),this.buffer.length?this[UT]():this[jp]?this[qp]():this.emit("drain"))}resume(){return this[DI]()}pause(){this[HT]=!1,this[Tv]=!0}get destroyed(){return this[Zo]}get flowing(){return this[HT]}get paused(){return this[Tv]}[d6](e){this[zo]?this[Ks]+=1:this[Ks]+=e.length,this.buffer.push(e)}[m6](){return this.buffer.length&&(this[zo]?this[Ks]-=1:this[Ks]-=this.buffer[0].length),this.buffer.shift()}[UT](e){do;while(this[lye](this[m6]()));!e&&!this.buffer.length&&!this[jp]&&this.emit("drain")}[lye](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[Zo])return;let s=this[P0];return r=r||{},e===iye.stdout||e===iye.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,s?r.end&&e.end():(this.pipes.push(r.proxyErrors?new I6(this,e,r):new jT(this,e,r)),this[Wp]?Rv(()=>this[DI]()):this[DI]()),e}unpipe(e){let r=this.pipes.find(s=>s.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let s=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[DI]():e==="readable"&&this[Ks]!==0?super.emit("readable"):pyt(e)&&this[P0]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[Qv]&&(this[Wp]?Rv(()=>r.call(this,this[Qv])):r.call(this,this[Qv])),s}get emittedEnd(){return this[P0]}[qp](){!this[MT]&&!this[P0]&&!this[Zo]&&this.buffer.length===0&&this[jp]&&(this[MT]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[_T]&&this.emit("close"),this[MT]=!1)}emit(e,r,...s){if(e!=="error"&&e!=="close"&&e!==Zo&&this[Zo])return;if(e==="data")return r?this[Wp]?Rv(()=>this[y6](r)):this[y6](r):!1;if(e==="end")return this[cye]();if(e==="close"){if(this[_T]=!0,!this[P0]&&!this[Zo])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[Qv]=r;let n=super.emit("error",r);return this[qp](),n}else if(e==="resume"){let n=super.emit("resume");return this[qp](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...s);return this[qp](),a}[y6](e){for(let s of this.pipes)s.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[qp](),r}[cye](){this[P0]||(this[P0]=!0,this.readable=!1,this[Wp]?Rv(()=>this[E6]()):this[E6]())}[E6](){if(this[Gp]){let r=this[Gp].end();if(r){for(let s of this.pipes)s.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[zo]||(e.dataLength=0);let r=this.promise();return this.on("data",s=>{e.push(s),this[zo]||(e.dataLength+=s.length)}),r.then(()=>e)}concat(){return this[zo]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[zo]?Promise.reject(new Error("cannot concat in objectMode")):this[fl]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(Zo,()=>r(new Error("stream destroyed"))),this.on("error",s=>r(s)),this.on("end",()=>e())})}[fyt](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[jp])return Promise.resolve({done:!0});let s=null,a=null,n=h=>{this.removeListener("data",c),this.removeListener("end",f),a(h)},c=h=>{this.removeListener("error",n),this.removeListener("end",f),this.pause(),s({value:h,done:!!this[jp]})},f=()=>{this.removeListener("error",n),this.removeListener("data",c),s({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,s=h,this.once(Zo,p),this.once("error",n),this.once("end",f),this.once("data",c)})}}}[Ayt](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[Zo]?(e?this.emit("error",e):this.emit(Zo),this):(this[Zo]=!0,this.buffer.length=0,this[Ks]=0,typeof this.close=="function"&&!this[_T]&&this.close(),e?this.emit("error",e):this.emit(Zo),this)}static isStream(e){return!!e&&(e instanceof fye||e instanceof sye||e instanceof uyt&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var hye=L((l$t,pye)=>{var dyt=Ie("zlib").constants||{ZLIB_VERNUM:4736};pye.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},dyt))});var O6=L(zl=>{"use strict";var S6=Ie("assert"),x0=Ie("buffer").Buffer,mye=Ie("zlib"),cm=zl.constants=hye(),myt=bI(),gye=x0.concat,um=Symbol("_superWrite"),xI=class extends Error{constructor(e){super("zlib: "+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},yyt=Symbol("opts"),Fv=Symbol("flushFlag"),dye=Symbol("finishFlushFlag"),N6=Symbol("fullFlushFlag"),Ii=Symbol("handle"),qT=Symbol("onError"),PI=Symbol("sawError"),C6=Symbol("level"),w6=Symbol("strategy"),B6=Symbol("ended"),c$t=Symbol("_defaultFullFlush"),GT=class extends myt{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[PI]=!1,this[B6]=!1,this[yyt]=e,this[Fv]=e.flush,this[dye]=e.finishFlush;try{this[Ii]=new mye[r](e)}catch(s){throw new xI(s)}this[qT]=s=>{this[PI]||(this[PI]=!0,this.close(),this.emit("error",s))},this[Ii].on("error",s=>this[qT](new xI(s))),this.once("end",()=>this.close)}close(){this[Ii]&&(this[Ii].close(),this[Ii]=null,this.emit("close"))}reset(){if(!this[PI])return S6(this[Ii],"zlib binding closed"),this[Ii].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[N6]),this.write(Object.assign(x0.alloc(0),{[Fv]:e})))}end(e,r,s){return e&&this.write(e,r),this.flush(this[dye]),this[B6]=!0,super.end(null,null,s)}get ended(){return this[B6]}write(e,r,s){if(typeof r=="function"&&(s=r,r="utf8"),typeof e=="string"&&(e=x0.from(e,r)),this[PI])return;S6(this[Ii],"zlib binding closed");let a=this[Ii]._handle,n=a.close;a.close=()=>{};let c=this[Ii].close;this[Ii].close=()=>{},x0.concat=h=>h;let f;try{let h=typeof e[Fv]=="number"?e[Fv]:this[Fv];f=this[Ii]._processChunk(e,h),x0.concat=gye}catch(h){x0.concat=gye,this[qT](new xI(h))}finally{this[Ii]&&(this[Ii]._handle=a,a.close=n,this[Ii].close=c,this[Ii].removeAllListeners("error"))}this[Ii]&&this[Ii].on("error",h=>this[qT](new xI(h)));let p;if(f)if(Array.isArray(f)&&f.length>0){p=this[um](x0.from(f[0]));for(let h=1;h{this.flush(a),n()};try{this[Ii].params(e,r)}finally{this[Ii].flush=s}this[Ii]&&(this[C6]=e,this[w6]=r)}}}},D6=class extends Yp{constructor(e){super(e,"Deflate")}},b6=class extends Yp{constructor(e){super(e,"Inflate")}},v6=Symbol("_portable"),P6=class extends Yp{constructor(e){super(e,"Gzip"),this[v6]=e&&!!e.portable}[um](e){return this[v6]?(this[v6]=!1,e[9]=255,super[um](e)):super[um](e)}},x6=class extends Yp{constructor(e){super(e,"Gunzip")}},k6=class extends Yp{constructor(e){super(e,"DeflateRaw")}},Q6=class extends Yp{constructor(e){super(e,"InflateRaw")}},T6=class extends Yp{constructor(e){super(e,"Unzip")}},WT=class extends GT{constructor(e,r){e=e||{},e.flush=e.flush||cm.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||cm.BROTLI_OPERATION_FINISH,super(e,r),this[N6]=cm.BROTLI_OPERATION_FLUSH}},R6=class extends WT{constructor(e){super(e,"BrotliCompress")}},F6=class extends WT{constructor(e){super(e,"BrotliDecompress")}};zl.Deflate=D6;zl.Inflate=b6;zl.Gzip=P6;zl.Gunzip=x6;zl.DeflateRaw=k6;zl.InflateRaw=Q6;zl.Unzip=T6;typeof mye.BrotliCompress=="function"?(zl.BrotliCompress=R6,zl.BrotliDecompress=F6):zl.BrotliCompress=zl.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var kI=L((A$t,yye)=>{var Eyt=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;yye.exports=Eyt!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var YT=L((h$t,Eye)=>{"use strict";var Iyt=bI(),L6=kI(),M6=Symbol("slurp");Eye.exports=class extends Iyt{constructor(e,r,s){switch(super(),this.pause(),this.extended=r,this.globalExtended=s,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=L6(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=L6(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[M6](r),s&&this[M6](s,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let s=this.remain,a=this.blockRemain;return this.remain=Math.max(0,s-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:s>=r?super.write(e):super.write(e.slice(0,s))}[M6](e,r){for(let s in e)e[s]!==null&&e[s]!==void 0&&!(r&&s==="path")&&(this[s]=s==="path"||s==="linkpath"?L6(e[s]):e[s])}}});var _6=L(VT=>{"use strict";VT.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);VT.code=new Map(Array.from(VT.name).map(t=>[t[1],t[0]]))});var Bye=L((d$t,wye)=>{"use strict";var Cyt=(t,e)=>{if(Number.isSafeInteger(t))t<0?Byt(t,e):wyt(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},wyt=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},Byt=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var s=e.length;s>1;s--){var a=t&255;t=Math.floor(t/256),r?e[s-1]=Iye(a):a===0?e[s-1]=0:(r=!0,e[s-1]=Cye(a))}},vyt=t=>{let e=t[0],r=e===128?Dyt(t.slice(1,t.length)):e===255?Syt(t):null;if(r===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(r))throw Error("parsed number outside of javascript safe integer range");return r},Syt=t=>{for(var e=t.length,r=0,s=!1,a=e-1;a>-1;a--){var n=t[a],c;s?c=Iye(n):n===0?c=n:(s=!0,c=Cye(n)),c!==0&&(r-=c*Math.pow(256,e-a-1))}return r},Dyt=t=>{for(var e=t.length,r=0,s=e-1;s>-1;s--){var a=t[s];a!==0&&(r+=a*Math.pow(256,e-s-1))}return r},Iye=t=>(255^t)&255,Cye=t=>(255^t)+1&255;wye.exports={encode:Cyt,parse:vyt}});var TI=L((m$t,Sye)=>{"use strict";var U6=_6(),QI=Ie("path").posix,vye=Bye(),H6=Symbol("slurp"),Zl=Symbol("type"),G6=class{constructor(e,r,s,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Zl]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,s,a):e&&this.set(e)}decode(e,r,s,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=fm(e,r,100),this.mode=k0(e,r+100,8),this.uid=k0(e,r+108,8),this.gid=k0(e,r+116,8),this.size=k0(e,r+124,12),this.mtime=j6(e,r+136,12),this.cksum=k0(e,r+148,12),this[H6](s),this[H6](a,!0),this[Zl]=fm(e,r+156,1),this[Zl]===""&&(this[Zl]="0"),this[Zl]==="0"&&this.path.substr(-1)==="/"&&(this[Zl]="5"),this[Zl]==="5"&&(this.size=0),this.linkpath=fm(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=fm(e,r+265,32),this.gname=fm(e,r+297,32),this.devmaj=k0(e,r+329,8),this.devmin=k0(e,r+337,8),e[r+475]!==0){let c=fm(e,r+345,155);this.path=c+"/"+this.path}else{let c=fm(e,r+345,130);c&&(this.path=c+"/"+this.path),this.atime=j6(e,r+476,12),this.ctime=j6(e,r+488,12)}let n=8*32;for(let c=r;c=r+512))throw new Error("need 512 bytes for header");let s=this.ctime||this.atime?130:155,a=byt(this.path||"",s),n=a[0],c=a[1];this.needPax=a[2],this.needPax=Am(e,r,100,n)||this.needPax,this.needPax=Q0(e,r+100,8,this.mode)||this.needPax,this.needPax=Q0(e,r+108,8,this.uid)||this.needPax,this.needPax=Q0(e,r+116,8,this.gid)||this.needPax,this.needPax=Q0(e,r+124,12,this.size)||this.needPax,this.needPax=q6(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[Zl].charCodeAt(0),this.needPax=Am(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Am(e,r+265,32,this.uname)||this.needPax,this.needPax=Am(e,r+297,32,this.gname)||this.needPax,this.needPax=Q0(e,r+329,8,this.devmaj)||this.needPax,this.needPax=Q0(e,r+337,8,this.devmin)||this.needPax,this.needPax=Am(e,r+345,s,c)||this.needPax,e[r+475]!==0?this.needPax=Am(e,r+345,155,c)||this.needPax:(this.needPax=Am(e,r+345,130,c)||this.needPax,this.needPax=q6(e,r+476,12,this.atime)||this.needPax,this.needPax=q6(e,r+488,12,this.ctime)||this.needPax);let f=8*32;for(let p=r;p{let s=t,a="",n,c=QI.parse(t).root||".";if(Buffer.byteLength(s)<100)n=[s,a,!1];else{a=QI.dirname(s),s=QI.basename(s);do Buffer.byteLength(s)<=100&&Buffer.byteLength(a)<=e?n=[s,a,!1]:Buffer.byteLength(s)>100&&Buffer.byteLength(a)<=e?n=[s.substr(0,99),a,!0]:(s=QI.join(QI.basename(a),s),a=QI.dirname(a));while(a!==c&&!n);n||(n=[t.substr(0,99),"",!0])}return n},fm=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),j6=(t,e,r)=>Pyt(k0(t,e,r)),Pyt=t=>t===null?null:new Date(t*1e3),k0=(t,e,r)=>t[e]&128?vye.parse(t.slice(e,e+r)):kyt(t,e,r),xyt=t=>isNaN(t)?null:t,kyt=(t,e,r)=>xyt(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),Qyt={12:8589934591,8:2097151},Q0=(t,e,r,s)=>s===null?!1:s>Qyt[r]||s<0?(vye.encode(s,t.slice(e,e+r)),!0):(Tyt(t,e,r,s),!1),Tyt=(t,e,r,s)=>t.write(Ryt(s,r),e,r,"ascii"),Ryt=(t,e)=>Fyt(Math.floor(t).toString(8),e),Fyt=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",q6=(t,e,r,s)=>s===null?!1:Q0(t,e,r,s.getTime()/1e3),Nyt=new Array(156).join("\0"),Am=(t,e,r,s)=>s===null?!1:(t.write(s+Nyt,e,r,"utf8"),s.length!==Buffer.byteLength(s)||s.length>r);Sye.exports=G6});var KT=L((y$t,Dye)=>{"use strict";var Oyt=TI(),Lyt=Ie("path"),Nv=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),s=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(s);for(let n=0;n<512;n++)a[n]=0;new Oyt({path:("PaxHeader/"+Lyt.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+s}};Nv.parse=(t,e,r)=>new Nv(Myt(_yt(t),e),r);var Myt=(t,e)=>e?Object.keys(t).reduce((r,s)=>(r[s]=t[s],r),e):t,_yt=t=>t.replace(/\n$/,"").split(` -`).reduce(Uyt,Object.create(null)),Uyt=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let s=e.split("="),a=s.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=s.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};Dye.exports=Nv});var RI=L((E$t,bye)=>{bye.exports=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)}});var JT=L((I$t,Pye)=>{"use strict";Pye.exports=t=>class extends t{warn(e,r,s={}){this.file&&(s.file=this.file),this.cwd&&(s.cwd=this.cwd),s.code=r instanceof Error&&r.code||e,s.tarCode=e,!this.strict&&s.recoverable!==!1?(r instanceof Error&&(s=Object.assign(r,s),r=r.message),this.emit("warn",s.tarCode,r,s)):r instanceof Error?this.emit("error",Object.assign(r,s)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),s))}}});var Y6=L((w$t,xye)=>{"use strict";var zT=["|","<",">","?",":"],W6=zT.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),Hyt=new Map(zT.map((t,e)=>[t,W6[e]])),jyt=new Map(W6.map((t,e)=>[t,zT[e]]));xye.exports={encode:t=>zT.reduce((e,r)=>e.split(r).join(Hyt.get(r)),t),decode:t=>W6.reduce((e,r)=>e.split(r).join(jyt.get(r)),t)}});var V6=L((B$t,Qye)=>{var{isAbsolute:qyt,parse:kye}=Ie("path").win32;Qye.exports=t=>{let e="",r=kye(t);for(;qyt(t)||r.root;){let s=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(s.length),e+=s,r=kye(t)}return[e,t]}});var Rye=L((v$t,Tye)=>{"use strict";Tye.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var nq=L((b$t,Vye)=>{"use strict";var Uye=bI(),Hye=KT(),jye=TI(),sA=Ie("fs"),Fye=Ie("path"),iA=kI(),Gyt=RI(),qye=(t,e)=>e?(t=iA(t).replace(/^\.(\/|$)/,""),Gyt(e)+"/"+t):iA(t),Wyt=16*1024*1024,Nye=Symbol("process"),Oye=Symbol("file"),Lye=Symbol("directory"),J6=Symbol("symlink"),Mye=Symbol("hardlink"),Ov=Symbol("header"),ZT=Symbol("read"),z6=Symbol("lstat"),XT=Symbol("onlstat"),Z6=Symbol("onread"),X6=Symbol("onreadlink"),$6=Symbol("openfile"),eq=Symbol("onopenfile"),T0=Symbol("close"),$T=Symbol("mode"),tq=Symbol("awaitDrain"),K6=Symbol("ondrain"),oA=Symbol("prefix"),_ye=Symbol("hadError"),Gye=JT(),Yyt=Y6(),Wye=V6(),Yye=Rye(),eR=Gye(class extends Uye{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=iA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||Wyt,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=iA(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,this.prefix=r.prefix?iA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let s=!1;if(!this.preservePaths){let[a,n]=Wye(this.path);a&&(this.path=n,s=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=Yyt.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=iA(r.absolute||Fye.resolve(this.cwd,e)),this.path===""&&(this.path="./"),s&&this.warn("TAR_ENTRY_INFO",`stripping ${s} from absolute path`,{entry:this,path:s+this.path}),this.statCache.has(this.absolute)?this[XT](this.statCache.get(this.absolute)):this[z6]()}emit(e,...r){return e==="error"&&(this[_ye]=!0),super.emit(e,...r)}[z6](){sA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[XT](r)})}[XT](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=Kyt(e),this.emit("stat",e),this[Nye]()}[Nye](){switch(this.type){case"File":return this[Oye]();case"Directory":return this[Lye]();case"SymbolicLink":return this[J6]();default:return this.end()}}[$T](e){return Yye(e,this.type==="Directory",this.portable)}[oA](e){return qye(e,this.prefix)}[Ov](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new jye({path:this[oA](this.path),linkpath:this.type==="Link"?this[oA](this.linkpath):this.linkpath,mode:this[$T](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new Hye({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[oA](this.path),linkpath:this.type==="Link"?this[oA](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[Lye](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[Ov](),this.end()}[J6](){sA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[X6](r)})}[X6](e){this.linkpath=iA(e),this[Ov](),this.end()}[Mye](e){this.type="Link",this.linkpath=iA(Fye.relative(this.cwd,e)),this.stat.size=0,this[Ov](),this.end()}[Oye](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let r=this.linkCache.get(e);if(r.indexOf(this.cwd)===0)return this[Mye](r)}this.linkCache.set(e,this.absolute)}if(this[Ov](),this.stat.size===0)return this.end();this[$6]()}[$6](){sA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[eq](r)})}[eq](e){if(this.fd=e,this[_ye])return this[T0]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let r=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(r),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[ZT]()}[ZT](){let{fd:e,buf:r,offset:s,length:a,pos:n}=this;sA.read(e,r,s,a,n,(c,f)=>{if(c)return this[T0](()=>this.emit("error",c));this[Z6](f)})}[T0](e){sA.close(this.fd,e)}[Z6](e){if(e<=0&&this.remain>0){let a=new Error("encountered unexpected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[T0](()=>this.emit("error",a))}if(e>this.remain){let a=new Error("did not encounter expected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[T0](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[K6]())}[tq](e){this.once("drain",e)}write(e){if(this.blockRemaine?this.emit("error",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[ZT]()}}),rq=class extends eR{[z6](){this[XT](sA.lstatSync(this.absolute))}[J6](){this[X6](sA.readlinkSync(this.absolute))}[$6](){this[eq](sA.openSync(this.absolute,"r"))}[ZT](){let e=!0;try{let{fd:r,buf:s,offset:a,length:n,pos:c}=this,f=sA.readSync(r,s,a,n,c);this[Z6](f),e=!1}finally{if(e)try{this[T0](()=>{})}catch{}}}[tq](e){e()}[T0](e){sA.closeSync(this.fd),e()}},Vyt=Gye(class extends Uye{constructor(e,r){r=r||{},super(r),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=r.prefix||null,this.path=iA(e.path),this.mode=this[$T](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:r.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=iA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let s=!1;if(!this.preservePaths){let[a,n]=Wye(this.path);a&&(this.path=n,s=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new jye({path:this[oA](this.path),linkpath:this.type==="Link"?this[oA](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),s&&this.warn("TAR_ENTRY_INFO",`stripping ${s} from absolute path`,{entry:this,path:s+this.path}),this.header.encode()&&!this.noPax&&super.write(new Hye({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[oA](this.path),linkpath:this.type==="Link"?this[oA](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[oA](e){return qye(e,this.prefix)}[$T](e){return Yye(e,this.type==="Directory",this.portable)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});eR.Sync=rq;eR.Tar=Vyt;var Kyt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Vye.exports=eR});var cR=L((x$t,eEe)=>{"use strict";var aR=class{constructor(e,r){this.path=e||"./",this.absolute=r,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},Jyt=bI(),zyt=O6(),Zyt=YT(),Aq=nq(),Xyt=Aq.Sync,$yt=Aq.Tar,eEt=ak(),Kye=Buffer.alloc(1024),nR=Symbol("onStat"),tR=Symbol("ended"),aA=Symbol("queue"),FI=Symbol("current"),pm=Symbol("process"),rR=Symbol("processing"),Jye=Symbol("processJob"),lA=Symbol("jobs"),iq=Symbol("jobDone"),iR=Symbol("addFSEntry"),zye=Symbol("addTarEntry"),lq=Symbol("stat"),cq=Symbol("readdir"),sR=Symbol("onreaddir"),oR=Symbol("pipe"),Zye=Symbol("entry"),sq=Symbol("entryOpt"),uq=Symbol("writeEntryClass"),$ye=Symbol("write"),oq=Symbol("ondrain"),lR=Ie("fs"),Xye=Ie("path"),tEt=JT(),aq=kI(),pq=tEt(class extends Jyt{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=aq(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[uq]=Aq,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new zyt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[oq]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[oq]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:r=>!0,this[aA]=new eEt,this[lA]=0,this.jobs=+e.jobs||4,this[rR]=!1,this[tR]=!1}[$ye](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[tR]=!0,this[pm](),this}write(e){if(this[tR])throw new Error("write after end");return e instanceof Zyt?this[zye](e):this[iR](e),this.flowing}[zye](e){let r=aq(Xye.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let s=new aR(e.path,r,!1);s.entry=new $yt(e,this[sq](s)),s.entry.on("end",a=>this[iq](s)),this[lA]+=1,this[aA].push(s)}this[pm]()}[iR](e){let r=aq(Xye.resolve(this.cwd,e));this[aA].push(new aR(e,r)),this[pm]()}[lq](e){e.pending=!0,this[lA]+=1;let r=this.follow?"stat":"lstat";lR[r](e.absolute,(s,a)=>{e.pending=!1,this[lA]-=1,s?this.emit("error",s):this[nR](e,a)})}[nR](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[pm]()}[cq](e){e.pending=!0,this[lA]+=1,lR.readdir(e.absolute,(r,s)=>{if(e.pending=!1,this[lA]-=1,r)return this.emit("error",r);this[sR](e,s)})}[sR](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[pm]()}[pm](){if(!this[rR]){this[rR]=!0;for(let e=this[aA].head;e!==null&&this[lA]this.warn(r,s,a),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[Zye](e){this[lA]+=1;try{return new this[uq](e.path,this[sq](e)).on("end",()=>this[iq](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[oq](){this[FI]&&this[FI].entry&&this[FI].entry.resume()}[oR](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,c=n==="./"?"":n.replace(/\/*$/,"/");this[iR](c+a)});let r=e.entry,s=this.zip;s?r.on("data",a=>{s.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),fq=class extends pq{constructor(e){super(e),this[uq]=Xyt}pause(){}resume(){}[lq](e){let r=this.follow?"statSync":"lstatSync";this[nR](e,lR[r](e.absolute))}[cq](e,r){this[sR](e,lR.readdirSync(e.absolute))}[oR](e){let r=e.entry,s=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,c=n==="./"?"":n.replace(/\/*$/,"/");this[iR](c+a)}),s?r.on("data",a=>{s.write(a)}):r.on("data",a=>{super[$ye](a)})}};pq.Sync=fq;eEe.exports=pq});var jI=L(Mv=>{"use strict";var rEt=bI(),nEt=Ie("events").EventEmitter,Al=Ie("fs"),dq=Al.writev;if(!dq){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;dq=(r,s,a,n)=>{let c=(p,h)=>n(p,h,s),f=new e;f.oncomplete=c,t.writeBuffers(r,s,a,f)}}var UI=Symbol("_autoClose"),Vu=Symbol("_close"),Lv=Symbol("_ended"),ii=Symbol("_fd"),tEe=Symbol("_finished"),F0=Symbol("_flags"),hq=Symbol("_flush"),mq=Symbol("_handleChunk"),yq=Symbol("_makeBuf"),hR=Symbol("_mode"),uR=Symbol("_needDrain"),MI=Symbol("_onerror"),HI=Symbol("_onopen"),gq=Symbol("_onread"),OI=Symbol("_onwrite"),N0=Symbol("_open"),Vp=Symbol("_path"),hm=Symbol("_pos"),cA=Symbol("_queue"),LI=Symbol("_read"),rEe=Symbol("_readSize"),R0=Symbol("_reading"),fR=Symbol("_remain"),nEe=Symbol("_size"),AR=Symbol("_write"),NI=Symbol("_writing"),pR=Symbol("_defaultFlag"),_I=Symbol("_errored"),gR=class extends rEt{constructor(e,r){if(r=r||{},super(r),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[_I]=!1,this[ii]=typeof r.fd=="number"?r.fd:null,this[Vp]=e,this[rEe]=r.readSize||16*1024*1024,this[R0]=!1,this[nEe]=typeof r.size=="number"?r.size:1/0,this[fR]=this[nEe],this[UI]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[ii]=="number"?this[LI]():this[N0]()}get fd(){return this[ii]}get path(){return this[Vp]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[N0](){Al.open(this[Vp],"r",(e,r)=>this[HI](e,r))}[HI](e,r){e?this[MI](e):(this[ii]=r,this.emit("open",r),this[LI]())}[yq](){return Buffer.allocUnsafe(Math.min(this[rEe],this[fR]))}[LI](){if(!this[R0]){this[R0]=!0;let e=this[yq]();if(e.length===0)return process.nextTick(()=>this[gq](null,0,e));Al.read(this[ii],e,0,e.length,null,(r,s,a)=>this[gq](r,s,a))}}[gq](e,r,s){this[R0]=!1,e?this[MI](e):this[mq](r,s)&&this[LI]()}[Vu](){if(this[UI]&&typeof this[ii]=="number"){let e=this[ii];this[ii]=null,Al.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[MI](e){this[R0]=!0,this[Vu](),this.emit("error",e)}[mq](e,r){let s=!1;return this[fR]-=e,e>0&&(s=super.write(ethis[HI](e,r))}[HI](e,r){this[pR]&&this[F0]==="r+"&&e&&e.code==="ENOENT"?(this[F0]="w",this[N0]()):e?this[MI](e):(this[ii]=r,this.emit("open",r),this[hq]())}end(e,r){return e&&this.write(e,r),this[Lv]=!0,!this[NI]&&!this[cA].length&&typeof this[ii]=="number"&&this[OI](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[Lv]?(this.emit("error",new Error("write() after end()")),!1):this[ii]===null||this[NI]||this[cA].length?(this[cA].push(e),this[uR]=!0,!1):(this[NI]=!0,this[AR](e),!0)}[AR](e){Al.write(this[ii],e,0,e.length,this[hm],(r,s)=>this[OI](r,s))}[OI](e,r){e?this[MI](e):(this[hm]!==null&&(this[hm]+=r),this[cA].length?this[hq]():(this[NI]=!1,this[Lv]&&!this[tEe]?(this[tEe]=!0,this[Vu](),this.emit("finish")):this[uR]&&(this[uR]=!1,this.emit("drain"))))}[hq](){if(this[cA].length===0)this[Lv]&&this[OI](null,0);else if(this[cA].length===1)this[AR](this[cA].pop());else{let e=this[cA];this[cA]=[],dq(this[ii],e,this[hm],(r,s)=>this[OI](r,s))}}[Vu](){if(this[UI]&&typeof this[ii]=="number"){let e=this[ii];this[ii]=null,Al.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},Iq=class extends dR{[N0](){let e;if(this[pR]&&this[F0]==="r+")try{e=Al.openSync(this[Vp],this[F0],this[hR])}catch(r){if(r.code==="ENOENT")return this[F0]="w",this[N0]();throw r}else e=Al.openSync(this[Vp],this[F0],this[hR]);this[HI](null,e)}[Vu](){if(this[UI]&&typeof this[ii]=="number"){let e=this[ii];this[ii]=null,Al.closeSync(e),this.emit("close")}}[AR](e){let r=!0;try{this[OI](null,Al.writeSync(this[ii],e,0,e.length,this[hm])),r=!1}finally{if(r)try{this[Vu]()}catch{}}}};Mv.ReadStream=gR;Mv.ReadStreamSync=Eq;Mv.WriteStream=dR;Mv.WriteStreamSync=Iq});var BR=L((T$t,uEe)=>{"use strict";var iEt=JT(),sEt=TI(),oEt=Ie("events"),aEt=ak(),lEt=1024*1024,cEt=YT(),iEe=KT(),uEt=O6(),Cq=Buffer.from([31,139]),_c=Symbol("state"),gm=Symbol("writeEntry"),Kp=Symbol("readEntry"),wq=Symbol("nextEntry"),sEe=Symbol("processEntry"),Uc=Symbol("extendedHeader"),_v=Symbol("globalExtendedHeader"),O0=Symbol("meta"),oEe=Symbol("emitMeta"),Pi=Symbol("buffer"),Jp=Symbol("queue"),dm=Symbol("ended"),aEe=Symbol("emittedEnd"),mm=Symbol("emit"),pl=Symbol("unzip"),mR=Symbol("consumeChunk"),yR=Symbol("consumeChunkSub"),Bq=Symbol("consumeBody"),lEe=Symbol("consumeMeta"),cEe=Symbol("consumeHeader"),ER=Symbol("consuming"),vq=Symbol("bufferConcat"),Sq=Symbol("maybeEnd"),Uv=Symbol("writing"),L0=Symbol("aborted"),IR=Symbol("onDone"),ym=Symbol("sawValidEntry"),CR=Symbol("sawNullBlock"),wR=Symbol("sawEOF"),fEt=t=>!0;uEe.exports=iEt(class extends oEt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[ym]=null,this.on(IR,r=>{(this[_c]==="begin"||this[ym]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(IR,e.ondone):this.on(IR,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||lEt,this.filter=typeof e.filter=="function"?e.filter:fEt,this.writable=!0,this.readable=!1,this[Jp]=new aEt,this[Pi]=null,this[Kp]=null,this[gm]=null,this[_c]="begin",this[O0]="",this[Uc]=null,this[_v]=null,this[dm]=!1,this[pl]=null,this[L0]=!1,this[CR]=!1,this[wR]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[cEe](e,r){this[ym]===null&&(this[ym]=!1);let s;try{s=new sEt(e,r,this[Uc],this[_v])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(s.nullBlock)this[CR]?(this[wR]=!0,this[_c]==="begin"&&(this[_c]="header"),this[mm]("eof")):(this[CR]=!0,this[mm]("nullBlock"));else if(this[CR]=!1,!s.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:s});else if(!s.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:s});else{let a=s.type;if(/^(Symbolic)?Link$/.test(a)&&!s.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:s});else if(!/^(Symbolic)?Link$/.test(a)&&s.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:s});else{let n=this[gm]=new cEt(s,this[Uc],this[_v]);if(!this[ym])if(n.remain){let c=()=>{n.invalid||(this[ym]=!0)};n.on("end",c)}else this[ym]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[mm]("ignoredEntry",n),this[_c]="ignore",n.resume()):n.size>0&&(this[O0]="",n.on("data",c=>this[O0]+=c),this[_c]="meta"):(this[Uc]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[mm]("ignoredEntry",n),this[_c]=n.remain?"ignore":"header",n.resume()):(n.remain?this[_c]="body":(this[_c]="header",n.end()),this[Kp]?this[Jp].push(n):(this[Jp].push(n),this[wq]())))}}}[sEe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[Kp]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",s=>this[wq]()),r=!1)):(this[Kp]=null,r=!1),r}[wq](){do;while(this[sEe](this[Jp].shift()));if(!this[Jp].length){let e=this[Kp];!e||e.flowing||e.size===e.remain?this[Uv]||this.emit("drain"):e.once("drain",s=>this.emit("drain"))}}[Bq](e,r){let s=this[gm],a=s.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return s.write(n),s.blockRemain||(this[_c]="header",this[gm]=null,s.end()),n.length}[lEe](e,r){let s=this[gm],a=this[Bq](e,r);return this[gm]||this[oEe](s),a}[mm](e,r,s){!this[Jp].length&&!this[Kp]?this.emit(e,r,s):this[Jp].push([e,r,s])}[oEe](e){switch(this[mm]("meta",this[O0]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[Uc]=iEe.parse(this[O0],this[Uc],!1);break;case"GlobalExtendedHeader":this[_v]=iEe.parse(this[O0],this[_v],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[Uc]=this[Uc]||Object.create(null),this[Uc].path=this[O0].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[Uc]=this[Uc]||Object.create(null),this[Uc].linkpath=this[O0].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[L0]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[L0])return;if(this[pl]===null&&e){if(this[Pi]&&(e=Buffer.concat([this[Pi],e]),this[Pi]=null),e.lengththis[mR](n)),this[pl].on("error",n=>this.abort(n)),this[pl].on("end",n=>{this[dm]=!0,this[mR]()}),this[Uv]=!0;let a=this[pl][s?"end":"write"](e);return this[Uv]=!1,a}}this[Uv]=!0,this[pl]?this[pl].write(e):this[mR](e),this[Uv]=!1;let r=this[Jp].length?!1:this[Kp]?this[Kp].flowing:!0;return!r&&!this[Jp].length&&this[Kp].once("drain",s=>this.emit("drain")),r}[vq](e){e&&!this[L0]&&(this[Pi]=this[Pi]?Buffer.concat([this[Pi],e]):e)}[Sq](){if(this[dm]&&!this[aEe]&&!this[L0]&&!this[ER]){this[aEe]=!0;let e=this[gm];if(e&&e.blockRemain){let r=this[Pi]?this[Pi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[Pi]&&e.write(this[Pi]),e.end()}this[mm](IR)}}[mR](e){if(this[ER])this[vq](e);else if(!e&&!this[Pi])this[Sq]();else{if(this[ER]=!0,this[Pi]){this[vq](e);let r=this[Pi];this[Pi]=null,this[yR](r)}else this[yR](e);for(;this[Pi]&&this[Pi].length>=512&&!this[L0]&&!this[wR];){let r=this[Pi];this[Pi]=null,this[yR](r)}this[ER]=!1}(!this[Pi]||this[dm])&&this[Sq]()}[yR](e){let r=0,s=e.length;for(;r+512<=s&&!this[L0]&&!this[wR];)switch(this[_c]){case"begin":case"header":this[cEe](e,r),r+=512;break;case"ignore":case"body":r+=this[Bq](e,r);break;case"meta":r+=this[lEe](e,r);break;default:throw new Error("invalid state: "+this[_c])}r{"use strict";var AEt=SI(),AEe=BR(),qI=Ie("fs"),pEt=jI(),fEe=Ie("path"),Dq=RI();hEe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let s=AEt(t);if(s.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!s.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&gEt(s,e),s.noResume||hEt(s),s.file&&s.sync?dEt(s):s.file?mEt(s,r):pEe(s)};var hEt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},gEt=(t,e)=>{let r=new Map(e.map(n=>[Dq(n),!0])),s=t.filter,a=(n,c)=>{let f=c||fEe.parse(n).root||".",p=n===f?!1:r.has(n)?r.get(n):a(fEe.dirname(n),f);return r.set(n,p),p};t.filter=s?(n,c)=>s(n,c)&&a(Dq(n)):n=>a(Dq(n))},dEt=t=>{let e=pEe(t),r=t.file,s=!0,a;try{let n=qI.statSync(r),c=t.maxReadSize||16*1024*1024;if(n.size{let r=new AEe(t),s=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((c,f)=>{r.on("error",f),r.on("end",c),qI.stat(a,(p,h)=>{if(p)f(p);else{let E=new pEt.ReadStream(a,{readSize:s,size:h.size});E.on("error",f),E.pipe(r)}})});return e?n.then(e,e):n},pEe=t=>new AEe(t)});var IEe=L((F$t,EEe)=>{"use strict";var yEt=SI(),SR=cR(),gEe=jI(),dEe=vR(),mEe=Ie("path");EEe.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let s=yEt(t);if(s.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!s.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return s.file&&s.sync?EEt(s,e):s.file?IEt(s,e,r):s.sync?CEt(s,e):wEt(s,e)};var EEt=(t,e)=>{let r=new SR.Sync(t),s=new gEe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(s),yEe(r,e)},IEt=(t,e,r)=>{let s=new SR(t),a=new gEe.WriteStream(t.file,{mode:t.mode||438});s.pipe(a);let n=new Promise((c,f)=>{a.on("error",f),a.on("close",c),s.on("error",f)});return bq(s,e),r?n.then(r,r):n},yEe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?dEe({file:mEe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:s=>t.add(s)}):t.add(r)}),t.end()},bq=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return dEe({file:mEe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:s=>t.add(s)}).then(s=>bq(t,e));t.add(r)}t.end()},CEt=(t,e)=>{let r=new SR.Sync(t);return yEe(r,e),r},wEt=(t,e)=>{let r=new SR(t);return bq(r,e),r}});var Pq=L((N$t,bEe)=>{"use strict";var BEt=SI(),CEe=cR(),Xl=Ie("fs"),wEe=jI(),BEe=vR(),vEe=Ie("path"),SEe=TI();bEe.exports=(t,e,r)=>{let s=BEt(t);if(!s.file)throw new TypeError("file is required");if(s.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),s.sync?vEt(s,e):DEt(s,e,r)};var vEt=(t,e)=>{let r=new CEe.Sync(t),s=!0,a,n;try{try{a=Xl.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=Xl.openSync(t.file,"w+");else throw p}let c=Xl.fstatSync(a),f=Buffer.alloc(512);e:for(n=0;nc.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}s=!1,SEt(t,r,n,a,e)}finally{if(s)try{Xl.closeSync(a)}catch{}}},SEt=(t,e,r,s,a)=>{let n=new wEe.WriteStreamSync(t.file,{fd:s,start:r});e.pipe(n),bEt(e,a)},DEt=(t,e,r)=>{e=Array.from(e);let s=new CEe(t),a=(c,f,p)=>{let h=(I,R)=>{I?Xl.close(c,N=>p(I)):p(null,R)},E=0;if(f===0)return h(null,0);let C=0,S=Buffer.alloc(512),P=(I,R)=>{if(I)return h(I);if(C+=R,C<512&&R)return Xl.read(c,S,C,S.length-C,E+C,P);if(E===0&&S[0]===31&&S[1]===139)return h(new Error("cannot append to compressed archives"));if(C<512)return h(null,E);let N=new SEe(S);if(!N.cksumValid)return h(null,E);let U=512*Math.ceil(N.size/512);if(E+U+512>f||(E+=U+512,E>=f))return h(null,E);t.mtimeCache&&t.mtimeCache.set(N.path,N.mtime),C=0,Xl.read(c,S,0,512,E,P)};Xl.read(c,S,0,512,E,P)},n=new Promise((c,f)=>{s.on("error",f);let p="r+",h=(E,C)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",Xl.open(t.file,p,h);if(E)return f(E);Xl.fstat(C,(S,P)=>{if(S)return Xl.close(C,()=>f(S));a(C,P.size,(I,R)=>{if(I)return f(I);let N=new wEe.WriteStream(t.file,{fd:C,start:R});s.pipe(N),N.on("error",f),N.on("close",c),DEe(s,e)})})};Xl.open(t.file,p,h)});return r?n.then(r,r):n},bEt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?BEe({file:vEe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:s=>t.add(s)}):t.add(r)}),t.end()},DEe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return BEe({file:vEe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:s=>t.add(s)}).then(s=>DEe(t,e));t.add(r)}t.end()}});var xEe=L((O$t,PEe)=>{"use strict";var PEt=SI(),xEt=Pq();PEe.exports=(t,e,r)=>{let s=PEt(t);if(!s.file)throw new TypeError("file is required");if(s.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),kEt(s),xEt(s,e,r)};var kEt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,s)=>e(r,s)&&!(t.mtimeCache.get(r)>s.mtime):(r,s)=>!(t.mtimeCache.get(r)>s.mtime)}});var TEe=L((L$t,QEe)=>{var{promisify:kEe}=Ie("util"),M0=Ie("fs"),QEt=t=>{if(!t)t={mode:511,fs:M0};else if(typeof t=="object")t={mode:511,fs:M0,...t};else if(typeof t=="number")t={mode:t,fs:M0};else if(typeof t=="string")t={mode:parseInt(t,8),fs:M0};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||M0.mkdir,t.mkdirAsync=kEe(t.mkdir),t.stat=t.stat||t.fs.stat||M0.stat,t.statAsync=kEe(t.stat),t.statSync=t.statSync||t.fs.statSync||M0.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||M0.mkdirSync,t};QEe.exports=QEt});var FEe=L((M$t,REe)=>{var TEt=process.platform,{resolve:REt,parse:FEt}=Ie("path"),NEt=t=>{if(/\0/.test(t))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:t,code:"ERR_INVALID_ARG_VALUE"});if(t=REt(t),TEt==="win32"){let e=/[*|"<>?:]/,{root:r}=FEt(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};REe.exports=NEt});var _Ee=L((_$t,MEe)=>{var{dirname:NEe}=Ie("path"),OEe=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(s=>s.isDirectory()?r:void 0,s=>s.code==="ENOENT"?OEe(t,NEe(e),e):void 0),LEe=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(s){return s.code==="ENOENT"?LEe(t,NEe(e),e):void 0}};MEe.exports={findMade:OEe,findMadeSync:LEe}});var Qq=L((U$t,HEe)=>{var{dirname:UEe}=Ie("path"),xq=(t,e,r)=>{e.recursive=!1;let s=UEe(t);return s===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return xq(s,e).then(n=>xq(t,e,n));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;return e.statAsync(t).then(n=>{if(n.isDirectory())return r;throw a},()=>{throw a})})},kq=(t,e,r)=>{let s=UEe(t);if(e.recursive=!1,s===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return kq(t,e,kq(s,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};HEe.exports={mkdirpManual:xq,mkdirpManualSync:kq}});var GEe=L((H$t,qEe)=>{var{dirname:jEe}=Ie("path"),{findMade:OEt,findMadeSync:LEt}=_Ee(),{mkdirpManual:MEt,mkdirpManualSync:_Et}=Qq(),UEt=(t,e)=>(e.recursive=!0,jEe(t)===t?e.mkdirAsync(t,e):OEt(e,t).then(s=>e.mkdirAsync(t,e).then(()=>s).catch(a=>{if(a.code==="ENOENT")return MEt(t,e);throw a}))),HEt=(t,e)=>{if(e.recursive=!0,jEe(t)===t)return e.mkdirSync(t,e);let s=LEt(e,t);try{return e.mkdirSync(t,e),s}catch(a){if(a.code==="ENOENT")return _Et(t,e);throw a}};qEe.exports={mkdirpNative:UEt,mkdirpNativeSync:HEt}});var KEe=L((j$t,VEe)=>{var WEe=Ie("fs"),jEt=process.version,Tq=jEt.replace(/^v/,"").split("."),YEe=+Tq[0]>10||+Tq[0]==10&&+Tq[1]>=12,qEt=YEe?t=>t.mkdir===WEe.mkdir:()=>!1,GEt=YEe?t=>t.mkdirSync===WEe.mkdirSync:()=>!1;VEe.exports={useNative:qEt,useNativeSync:GEt}});var eIe=L((q$t,$Ee)=>{var GI=TEe(),WI=FEe(),{mkdirpNative:JEe,mkdirpNativeSync:zEe}=GEe(),{mkdirpManual:ZEe,mkdirpManualSync:XEe}=Qq(),{useNative:WEt,useNativeSync:YEt}=KEe(),YI=(t,e)=>(t=WI(t),e=GI(e),WEt(e)?JEe(t,e):ZEe(t,e)),VEt=(t,e)=>(t=WI(t),e=GI(e),YEt(e)?zEe(t,e):XEe(t,e));YI.sync=VEt;YI.native=(t,e)=>JEe(WI(t),GI(e));YI.manual=(t,e)=>ZEe(WI(t),GI(e));YI.nativeSync=(t,e)=>zEe(WI(t),GI(e));YI.manualSync=(t,e)=>XEe(WI(t),GI(e));$Ee.exports=YI});var aIe=L((G$t,oIe)=>{"use strict";var Hc=Ie("fs"),Em=Ie("path"),KEt=Hc.lchown?"lchown":"chown",JEt=Hc.lchownSync?"lchownSync":"chownSync",rIe=Hc.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),tIe=(t,e,r)=>{try{return Hc[JEt](t,e,r)}catch(s){if(s.code!=="ENOENT")throw s}},zEt=(t,e,r)=>{try{return Hc.chownSync(t,e,r)}catch(s){if(s.code!=="ENOENT")throw s}},ZEt=rIe?(t,e,r,s)=>a=>{!a||a.code!=="EISDIR"?s(a):Hc.chown(t,e,r,s)}:(t,e,r,s)=>s,Rq=rIe?(t,e,r)=>{try{return tIe(t,e,r)}catch(s){if(s.code!=="EISDIR")throw s;zEt(t,e,r)}}:(t,e,r)=>tIe(t,e,r),XEt=process.version,nIe=(t,e,r)=>Hc.readdir(t,e,r),$Et=(t,e)=>Hc.readdirSync(t,e);/^v4\./.test(XEt)&&(nIe=(t,e,r)=>Hc.readdir(t,r));var DR=(t,e,r,s)=>{Hc[KEt](t,e,r,ZEt(t,e,r,a=>{s(a&&a.code!=="ENOENT"?a:null)}))},iIe=(t,e,r,s,a)=>{if(typeof e=="string")return Hc.lstat(Em.resolve(t,e),(n,c)=>{if(n)return a(n.code!=="ENOENT"?n:null);c.name=e,iIe(t,c,r,s,a)});if(e.isDirectory())Fq(Em.resolve(t,e.name),r,s,n=>{if(n)return a(n);let c=Em.resolve(t,e.name);DR(c,r,s,a)});else{let n=Em.resolve(t,e.name);DR(n,r,s,a)}},Fq=(t,e,r,s)=>{nIe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return s();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return s(a)}if(a||!n.length)return DR(t,e,r,s);let c=n.length,f=null,p=h=>{if(!f){if(h)return s(f=h);if(--c===0)return DR(t,e,r,s)}};n.forEach(h=>iIe(t,h,e,r,p))})},eIt=(t,e,r,s)=>{if(typeof e=="string")try{let a=Hc.lstatSync(Em.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&sIe(Em.resolve(t,e.name),r,s),Rq(Em.resolve(t,e.name),r,s)},sIe=(t,e,r)=>{let s;try{s=$Et(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return Rq(t,e,r);throw a}return s&&s.length&&s.forEach(a=>eIt(t,a,e,r)),Rq(t,e,r)};oIe.exports=Fq;Fq.sync=sIe});var fIe=L((W$t,Nq)=>{"use strict";var lIe=eIe(),jc=Ie("fs"),bR=Ie("path"),cIe=aIe(),Ku=kI(),PR=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},xR=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},kR=(t,e)=>t.get(Ku(e)),Hv=(t,e,r)=>t.set(Ku(e),r),tIt=(t,e)=>{jc.stat(t,(r,s)=>{(r||!s.isDirectory())&&(r=new xR(t,r&&r.code||"ENOTDIR")),e(r)})};Nq.exports=(t,e,r)=>{t=Ku(t);let s=e.umask,a=e.mode|448,n=(a&s)!==0,c=e.uid,f=e.gid,p=typeof c=="number"&&typeof f=="number"&&(c!==e.processUid||f!==e.processGid),h=e.preserve,E=e.unlink,C=e.cache,S=Ku(e.cwd),P=(N,U)=>{N?r(N):(Hv(C,t,!0),U&&p?cIe(U,c,f,W=>P(W)):n?jc.chmod(t,a,r):r())};if(C&&kR(C,t)===!0)return P();if(t===S)return tIt(t,P);if(h)return lIe(t,{mode:a}).then(N=>P(null,N),P);let R=Ku(bR.relative(S,t)).split("/");QR(S,R,a,C,E,S,null,P)};var QR=(t,e,r,s,a,n,c,f)=>{if(!e.length)return f(null,c);let p=e.shift(),h=Ku(bR.resolve(t+"/"+p));if(kR(s,h))return QR(h,e,r,s,a,n,c,f);jc.mkdir(h,r,uIe(h,e,r,s,a,n,c,f))},uIe=(t,e,r,s,a,n,c,f)=>p=>{p?jc.lstat(t,(h,E)=>{if(h)h.path=h.path&&Ku(h.path),f(h);else if(E.isDirectory())QR(t,e,r,s,a,n,c,f);else if(a)jc.unlink(t,C=>{if(C)return f(C);jc.mkdir(t,r,uIe(t,e,r,s,a,n,c,f))});else{if(E.isSymbolicLink())return f(new PR(t,t+"/"+e.join("/")));f(p)}}):(c=c||t,QR(t,e,r,s,a,n,c,f))},rIt=t=>{let e=!1,r="ENOTDIR";try{e=jc.statSync(t).isDirectory()}catch(s){r=s.code}finally{if(!e)throw new xR(t,r)}};Nq.exports.sync=(t,e)=>{t=Ku(t);let r=e.umask,s=e.mode|448,a=(s&r)!==0,n=e.uid,c=e.gid,f=typeof n=="number"&&typeof c=="number"&&(n!==e.processUid||c!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,C=Ku(e.cwd),S=N=>{Hv(E,t,!0),N&&f&&cIe.sync(N,n,c),a&&jc.chmodSync(t,s)};if(E&&kR(E,t)===!0)return S();if(t===C)return rIt(C),S();if(p)return S(lIe.sync(t,s));let I=Ku(bR.relative(C,t)).split("/"),R=null;for(let N=I.shift(),U=C;N&&(U+="/"+N);N=I.shift())if(U=Ku(bR.resolve(U)),!kR(E,U))try{jc.mkdirSync(U,s),R=R||U,Hv(E,U,!0)}catch{let te=jc.lstatSync(U);if(te.isDirectory()){Hv(E,U,!0);continue}else if(h){jc.unlinkSync(U),jc.mkdirSync(U,s),R=R||U,Hv(E,U,!0);continue}else if(te.isSymbolicLink())return new PR(U,U+"/"+I.join("/"))}return S(R)}});var Lq=L((Y$t,AIe)=>{var Oq=Object.create(null),{hasOwnProperty:nIt}=Object.prototype;AIe.exports=t=>(nIt.call(Oq,t)||(Oq[t]=t.normalize("NFKD")),Oq[t])});var dIe=L((V$t,gIe)=>{var pIe=Ie("assert"),iIt=Lq(),sIt=RI(),{join:hIe}=Ie("path"),oIt=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,aIt=oIt==="win32";gIe.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((C,S)=>(C.length&&(S=hIe(C[C.length-1],S)),C.push(S||"/"),C),[]),s=new Set,a=h=>{let E=e.get(h);if(!E)throw new Error("function does not have any path reservations");return{paths:E.paths.map(C=>t.get(C)),dirs:[...E.dirs].map(C=>t.get(C))}},n=h=>{let{paths:E,dirs:C}=a(h);return E.every(S=>S[0]===h)&&C.every(S=>S[0]instanceof Set&&S[0].has(h))},c=h=>s.has(h)||!n(h)?!1:(s.add(h),h(()=>f(h)),!0),f=h=>{if(!s.has(h))return!1;let{paths:E,dirs:C}=e.get(h),S=new Set;return E.forEach(P=>{let I=t.get(P);pIe.equal(I[0],h),I.length===1?t.delete(P):(I.shift(),typeof I[0]=="function"?S.add(I[0]):I[0].forEach(R=>S.add(R)))}),C.forEach(P=>{let I=t.get(P);pIe(I[0]instanceof Set),I[0].size===1&&I.length===1?t.delete(P):I[0].size===1?(I.shift(),S.add(I[0])):I[0].delete(h)}),s.delete(h),S.forEach(P=>c(P)),!0};return{check:n,reserve:(h,E)=>{h=aIt?["win32 parallelization disabled"]:h.map(S=>iIt(sIt(hIe(S))).toLowerCase());let C=new Set(h.map(S=>r(S)).reduce((S,P)=>S.concat(P)));return e.set(E,{dirs:C,paths:h}),h.forEach(S=>{let P=t.get(S);P?P.push(E):t.set(S,[E])}),C.forEach(S=>{let P=t.get(S);P?P[P.length-1]instanceof Set?P[P.length-1].add(E):P.push(new Set([E])):t.set(S,[new Set([E])])}),c(E)}}}});var EIe=L((K$t,yIe)=>{var lIt=process.platform,cIt=lIt==="win32",uIt=global.__FAKE_TESTING_FS__||Ie("fs"),{O_CREAT:fIt,O_TRUNC:AIt,O_WRONLY:pIt,UV_FS_O_FILEMAP:mIe=0}=uIt.constants,hIt=cIt&&!!mIe,gIt=512*1024,dIt=mIe|AIt|fIt|pIt;yIe.exports=hIt?t=>t"w"});var Yq=L((J$t,RIe)=>{"use strict";var mIt=Ie("assert"),yIt=BR(),Mn=Ie("fs"),EIt=jI(),zp=Ie("path"),kIe=fIe(),IIe=Y6(),IIt=dIe(),CIt=V6(),$l=kI(),wIt=RI(),BIt=Lq(),CIe=Symbol("onEntry"),Uq=Symbol("checkFs"),wIe=Symbol("checkFs2"),FR=Symbol("pruneCache"),Hq=Symbol("isReusable"),qc=Symbol("makeFs"),jq=Symbol("file"),qq=Symbol("directory"),NR=Symbol("link"),BIe=Symbol("symlink"),vIe=Symbol("hardlink"),SIe=Symbol("unsupported"),DIe=Symbol("checkPath"),_0=Symbol("mkdir"),Xo=Symbol("onError"),TR=Symbol("pending"),bIe=Symbol("pend"),VI=Symbol("unpend"),Mq=Symbol("ended"),_q=Symbol("maybeClose"),Gq=Symbol("skip"),jv=Symbol("doChown"),qv=Symbol("uid"),Gv=Symbol("gid"),Wv=Symbol("checkedCwd"),QIe=Ie("crypto"),TIe=EIe(),vIt=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,Yv=vIt==="win32",SIt=(t,e)=>{if(!Yv)return Mn.unlink(t,e);let r=t+".DELETE."+QIe.randomBytes(16).toString("hex");Mn.rename(t,r,s=>{if(s)return e(s);Mn.unlink(r,e)})},DIt=t=>{if(!Yv)return Mn.unlinkSync(t);let e=t+".DELETE."+QIe.randomBytes(16).toString("hex");Mn.renameSync(t,e),Mn.unlinkSync(e)},PIe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,xIe=t=>BIt(wIt($l(t))).toLowerCase(),bIt=(t,e)=>{e=xIe(e);for(let r of t.keys()){let s=xIe(r);(s===e||s.indexOf(e+"/")===0)&&t.delete(r)}},PIt=t=>{for(let e of t.keys())t.delete(e)},Vv=class extends yIt{constructor(e){if(e||(e={}),e.ondone=r=>{this[Mq]=!0,this[_q]()},super(e),this[Wv]=!1,this.reservations=IIt(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[TR]=0,this[Mq]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||Yv,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=$l(zp.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",r=>this[CIe](r))}warn(e,r,s={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(s.recoverable=!1),super.warn(e,r,s)}[_q](){this[Mq]&&this[TR]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[DIe](e){if(this.strip){let r=$l(e.path).split("/");if(r.length=this.strip)e.linkpath=s.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=$l(e.path),s=r.split("/");if(s.includes("..")||Yv&&/^[a-z]:\.\.$/i.test(s[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=CIt(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(zp.isAbsolute(e.path)?e.absolute=$l(zp.resolve(e.path)):e.absolute=$l(zp.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:$l(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:r}=zp.win32.parse(e.absolute);e.absolute=r+IIe.encode(e.absolute.substr(r.length));let{root:s}=zp.win32.parse(e.path);e.path=s+IIe.encode(e.path.substr(s.length))}return!0}[CIe](e){if(!this[DIe](e))return e.resume();switch(mIt.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[Uq](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[SIe](e)}}[Xo](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[VI](),r.resume())}[_0](e,r,s){kIe($l(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r,noChmod:this.noChmod},s)}[jv](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[qv](e){return PIe(this.uid,e.uid,this.processUid)}[Gv](e){return PIe(this.gid,e.gid,this.processGid)}[jq](e,r){let s=e.mode&4095||this.fmode,a=new EIt.WriteStream(e.absolute,{flags:TIe(e.size),mode:s,autoClose:!1});a.on("error",p=>{a.fd&&Mn.close(a.fd,()=>{}),a.write=()=>!0,this[Xo](p,e),r()});let n=1,c=p=>{if(p){a.fd&&Mn.close(a.fd,()=>{}),this[Xo](p,e),r();return}--n===0&&Mn.close(a.fd,h=>{h?this[Xo](h,e):this[VI](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let C=e.atime||new Date,S=e.mtime;Mn.futimes(E,C,S,P=>P?Mn.utimes(h,C,S,I=>c(I&&P)):c())}if(this[jv](e)){n++;let C=this[qv](e),S=this[Gv](e);Mn.fchown(E,C,S,P=>P?Mn.chown(h,C,S,I=>c(I&&P)):c())}c()});let f=this.transform&&this.transform(e)||e;f!==e&&(f.on("error",p=>{this[Xo](p,e),r()}),e.pipe(f)),f.pipe(a)}[qq](e,r){let s=e.mode&4095||this.dmode;this[_0](e.absolute,s,a=>{if(a){this[Xo](a,e),r();return}let n=1,c=f=>{--n===0&&(r(),this[VI](),e.resume())};e.mtime&&!this.noMtime&&(n++,Mn.utimes(e.absolute,e.atime||new Date,e.mtime,c)),this[jv](e)&&(n++,Mn.chown(e.absolute,this[qv](e),this[Gv](e),c)),c()})}[SIe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[BIe](e,r){this[NR](e,e.linkpath,"symlink",r)}[vIe](e,r){let s=$l(zp.resolve(this.cwd,e.linkpath));this[NR](e,s,"link",r)}[bIe](){this[TR]++}[VI](){this[TR]--,this[_q]()}[Gq](e){this[VI](),e.resume()}[Hq](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!Yv}[Uq](e){this[bIe]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,s=>this[wIe](e,s))}[FR](e){e.type==="SymbolicLink"?PIt(this.dirCache):e.type!=="Directory"&&bIt(this.dirCache,e.absolute)}[wIe](e,r){this[FR](e);let s=f=>{this[FR](e),r(f)},a=()=>{this[_0](this.cwd,this.dmode,f=>{if(f){this[Xo](f,e),s();return}this[Wv]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let f=$l(zp.dirname(e.absolute));if(f!==this.cwd)return this[_0](f,this.dmode,p=>{if(p){this[Xo](p,e),s();return}c()})}c()},c=()=>{Mn.lstat(e.absolute,(f,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[Gq](e),s();return}if(f||this[Hq](e,p))return this[qc](null,e,s);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=C=>this[qc](C,e,s);return h?Mn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return Mn.rmdir(e.absolute,h=>this[qc](h,e,s))}if(e.absolute===this.cwd)return this[qc](null,e,s);SIt(e.absolute,h=>this[qc](h,e,s))})};this[Wv]?n():a()}[qc](e,r,s){if(e){this[Xo](e,r),s();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[jq](r,s);case"Link":return this[vIe](r,s);case"SymbolicLink":return this[BIe](r,s);case"Directory":case"GNUDumpDir":return this[qq](r,s)}}[NR](e,r,s,a){Mn[s](r,e.absolute,n=>{n?this[Xo](n,e):(this[VI](),e.resume()),a()})}},RR=t=>{try{return[null,t()]}catch(e){return[e,null]}},Wq=class extends Vv{[qc](e,r){return super[qc](e,r,()=>{})}[Uq](e){if(this[FR](e),!this[Wv]){let n=this[_0](this.cwd,this.dmode);if(n)return this[Xo](n,e);this[Wv]=!0}if(e.absolute!==this.cwd){let n=$l(zp.dirname(e.absolute));if(n!==this.cwd){let c=this[_0](n,this.dmode);if(c)return this[Xo](c,e)}}let[r,s]=RR(()=>Mn.lstatSync(e.absolute));if(s&&(this.keep||this.newer&&s.mtime>e.mtime))return this[Gq](e);if(r||this[Hq](e,s))return this[qc](null,e);if(s.isDirectory()){if(e.type==="Directory"){let c=!this.noChmod&&e.mode&&(s.mode&4095)!==e.mode,[f]=c?RR(()=>{Mn.chmodSync(e.absolute,e.mode)}):[];return this[qc](f,e)}let[n]=RR(()=>Mn.rmdirSync(e.absolute));this[qc](n,e)}let[a]=e.absolute===this.cwd?[]:RR(()=>DIt(e.absolute));this[qc](a,e)}[jq](e,r){let s=e.mode&4095||this.fmode,a=f=>{let p;try{Mn.closeSync(n)}catch(h){p=h}(f||p)&&this[Xo](f||p,e),r()},n;try{n=Mn.openSync(e.absolute,TIe(e.size),s)}catch(f){return a(f)}let c=this.transform&&this.transform(e)||e;c!==e&&(c.on("error",f=>this[Xo](f,e)),e.pipe(c)),c.on("data",f=>{try{Mn.writeSync(n,f,0,f.length)}catch(p){a(p)}}),c.on("end",f=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{Mn.futimesSync(n,h,E)}catch(C){try{Mn.utimesSync(e.absolute,h,E)}catch{p=C}}}if(this[jv](e)){let h=this[qv](e),E=this[Gv](e);try{Mn.fchownSync(n,h,E)}catch(C){try{Mn.chownSync(e.absolute,h,E)}catch{p=p||C}}}a(p)})}[qq](e,r){let s=e.mode&4095||this.dmode,a=this[_0](e.absolute,s);if(a){this[Xo](a,e),r();return}if(e.mtime&&!this.noMtime)try{Mn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[jv](e))try{Mn.chownSync(e.absolute,this[qv](e),this[Gv](e))}catch{}r(),e.resume()}[_0](e,r){try{return kIe.sync($l(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(s){return s}}[NR](e,r,s,a){try{Mn[s+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[Xo](n,e)}}};Vv.Sync=Wq;RIe.exports=Vv});var MIe=L((z$t,LIe)=>{"use strict";var xIt=SI(),OR=Yq(),NIe=Ie("fs"),OIe=jI(),FIe=Ie("path"),Vq=RI();LIe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let s=xIt(t);if(s.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!s.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&kIt(s,e),s.file&&s.sync?QIt(s):s.file?TIt(s,r):s.sync?RIt(s):FIt(s)};var kIt=(t,e)=>{let r=new Map(e.map(n=>[Vq(n),!0])),s=t.filter,a=(n,c)=>{let f=c||FIe.parse(n).root||".",p=n===f?!1:r.has(n)?r.get(n):a(FIe.dirname(n),f);return r.set(n,p),p};t.filter=s?(n,c)=>s(n,c)&&a(Vq(n)):n=>a(Vq(n))},QIt=t=>{let e=new OR.Sync(t),r=t.file,s=NIe.statSync(r),a=t.maxReadSize||16*1024*1024;new OIe.ReadStreamSync(r,{readSize:a,size:s.size}).pipe(e)},TIt=(t,e)=>{let r=new OR(t),s=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((c,f)=>{r.on("error",f),r.on("close",c),NIe.stat(a,(p,h)=>{if(p)f(p);else{let E=new OIe.ReadStream(a,{readSize:s,size:h.size});E.on("error",f),E.pipe(r)}})});return e?n.then(e,e):n},RIt=t=>new OR.Sync(t),FIt=t=>new OR(t)});var _Ie=L(ks=>{"use strict";ks.c=ks.create=IEe();ks.r=ks.replace=Pq();ks.t=ks.list=vR();ks.u=ks.update=xEe();ks.x=ks.extract=MIe();ks.Pack=cR();ks.Unpack=Yq();ks.Parse=BR();ks.ReadEntry=YT();ks.WriteEntry=nq();ks.Header=TI();ks.Pax=KT();ks.types=_6()});var Kq,UIe,U0,Kv,Jv,HIe=Ct(()=>{Kq=et(Od()),UIe=Ie("worker_threads"),U0=Symbol("kTaskInfo"),Kv=class{constructor(e,r){this.fn=e;this.limit=(0,Kq.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},Jv=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,Kq.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let s=this.workers.pop();s?s.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new UIe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[U0])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[U0].resolve(r),e[U0]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[U0]?.reject(r),e[U0]=null}),e.on("exit",r=>{r!==0&&e[U0]?.reject(new Error(`Worker exited with code ${r}`)),e[U0]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((s,a)=>{r[U0]={resolve:s,reject:a},r.postMessage(e)})})}}});var qIe=L((eer,jIe)=>{var Jq;jIe.exports.getContent=()=>(typeof Jq>"u"&&(Jq=Ie("zlib").brotliDecompressSync(Buffer.from("W2xFdgBPZrjSneDvVbLecg9fIhuy4cX6GuF9CJQpmu4RdNt2tSIi3YZAPJzO1Ju/O0dV1bTkYsgCLThVdbatry9HdhTU1geV2ROjsMltUFBZJKzSZoSLXaDMA7MJtfXUZJlq3aQXKbUKncLmJdo5ByJUTvhIXveNwEBNvBd2oxvnpn4bPkVdGHlvHIlNFxsdCpFJELoRwnbMYlM4po2Z06KXwCi1p2pjs9id3NE2aovZB2yHbSj773jMlfchfy8YwvdDUZ/vn38/MrcgKXdhPVyCRIJINOTc+nvG10A05G5fDWBJlRYRLcZ2SJ9KXzV9P+t4bZ/4ta/XzPq/ny+h1gFHGaDHLBUStJHA1I6ePGRc71wTQyYfc9XD5lW9lkNwtRR9fQNnHnpZTidToeBJ1Jm1RF0pyQsV2LW+fcW218zX0zX/IxA45ZhdTxJH79h9EQSUiPkborYYSHZWctm7f//rd+ZPtVfMU6BpdkJgCVQmfvqm+fVbEgYxqmR7xsfeTPDsKih7u8clJ/eEIKB1UIl7ilvT1LKqXzCI9eUZcoOKhSFnla7zhX1BzrDkzGO57PXtznEtQ5DI6RoVcQbKVsRC1v/6verXL2YYcm90hZP2vehoS2TLcW3ZHklOOlVVgmElU0lA2ZUfMcB//6lpq63QR6LxhEs0eyZXsfAPJnM1aQnRmWpTsunAngg8P3/llEf/LfOOuZqsQdCgcRCUxFQtq9rYCAxxd6DQ1POB53uacqH73VQR/fjG1vHQQUpr8fjmM+CgUANS0Y0wBrINE3e/ZGGx+Xz4MEVr7XN2s8kFODQXAtIf2roXIqLa9ogq2qqyBS5z7CeYnNVZchZhFsDSTev96F0FZpBgFPCIpvrj8NtZ6eMDCElwZ9JHVxBmuu6Hpnl4+nDr+/x4u6vOw5XfU7e701UkJJXQQvzDoBWIBB0ce3RguzkawgT8AMPzlHgdDw5idYnj+5NJM9XBL7HSG0M/wsbK7v5iUUOt5+PuLthWduVnVU8PNAbsQUGJ/JPlTUOUBMvIGWn96Efznz4/dnfvRE2e+TxVXd0UA2iBjTJ/E+ZaENTxhknQ/K5h3/EKWn6Wo8yMRhKZla5AvalupPqw5Kso3q/5ebzuH7bEI/DiYAraB7m1PH5xtjTj/2+m9u366oab8TLrfeSCpGGktTbc8Adh1zXvEuWaaAeyuwEMAYLUgJQ4BCGNce++V01VVUOaBsDZA0DaORiOMSZa+fUuC5wNNwyMTcL9/3vTrLb3/R8IBAgmBTJZEqgsk1WebctvO2CkSqmMPX3Uzq16sRHevfe/k/+990OK/yPQiv8j0EJEAEeIAHkKEQCrCYD5fwBkBUBmDpiZVYOkpDqUqTOUqTkse7KqfRKkZpSZ0jmVmVKbVHvVGONSY6xdOXf2bfxYs+r97Gaz7/VidrNczmo5i+X4/79WaRtnVo6UQAk7u1v/33o7HGQdPSpQj/7rqqYgCstG5MTLOF+dsIv//2aWtasTQFXXSGVKy0Ch0FwtLAv5xL+sjMzIJeSZkqQ+090j9RMRiYjIRDMBVHEBdLMPuzhK9ArtKWmta6w91npmkeMIbXl7nz+t0qqu7mqNZH8NgWcOML8gqf5fsvkoWoqCW/Uv9a31Jb231iAdAFq2b0f2AXJIgEFCSX5xeJctKHDjpJQ3m3Urk0iC5/t7U/875277i6mGdxYoptsKpVKptp46HgxpRCOeWYxBRAIkEfH8P2f4vnxABfSq3okFhW7Sh7EOU6Zknm9b/2dQZl1CfrShJVuQKkmDUKRlwEAYpohyd7/uuRO4vjhiW92oa7DifsWphJQsLIonVqN9+X6G95E9gJv1/aVCu6Vysu/NbAvVQJAIkgSLIIEgCcE1iBZvi3Talbv/B95N+2tvY1Qof7OKQVArLUEjJSQhhBgSgWJaCGz+exJ5As24WxMMguChXfbB3r3z09qdsMUgWww4SIpBUgwSMGCKKVKkSDFoiimmuGKFLRY8P+/j/1z/z8vcC0/38z9ixBEjRoTHiLRERESEEhFKHk1poFts2iWWWCLiyP783Pr/f3p9jjDzv+KKLbZo0QLRAoEgGQSZIMgEgSCZEogSJUqUWJmUwG/uv3/60+facZ/fES1atGixxRZhCENEGEpElAhMifCIiMh7RNRARD0osUTmQzS53d7gIWweY/AMx+gtFBHZ+QKBsEAgEAiEnXyTePKGdLaKJm1heyFaU3uzbTmJnADDv5s+/2iBsQLt8213mBZIEC+iwULwYIFUkDqt7977a5EjE/PA5Kn3lAZJ2jN6FtU6hpJswxeRU8EDzmheRavGU+8SAXcv9hs2VHFHpGFd2uSqhHfl+2vjalI8eXtMfadrWGGNgIrP+vNSPghBQhnaYRowg/SWg6qitd+w5dduV3M/w+v7ZmNa2EHT7PCw7b26WSDoIaI+BqiP5p2zrxStV+M2GSTNwLZe7+NuQ2yBmwrOzjTUkFHwTV/eBa16T3gA4/213h/1KeX+30V2dZfwJfquaEB6xymhDz3/VMrY5GD9qnZSnAOdHwOrSiaW52B2t2N16zP70evD5mkQyIw0SkzGfUSC0v6MnmPjA/zDgnWuNgwjo7uqtquP5iVWyxtfYeRFHYCX8Ri+J5QLlWqdxq/rU5NcBfWU0gwJLQozOPn8AKW8O8tlag5jTBhcLinjQ3x+ROz+sC1XeAEFjsiL/RBz5ZaHIRt1Zbw7BI/oqy9GqIvPir/AVOOYmyvYsW4S+OjA6lAao99TaXVi1/zOSY7OsRX/YRjJGmdyzupZMt8/DVsorPED2dvEHJaq3K/NE3bKc+Ilrb/azbMvPOIR2+6+xdd8ma/RzeYh23z26tLr9RU6lUdspWd2NAZvk1KsuWtCCp0djmdRFF8HywmTO5KH5Q7JmWezwwKTluDzWDDEEErDdtCCr0a3/GLiI1+HFJKGSB6KtqRHbbS4nsotDPyRz6MFVsQZEL/84gHTA3INdbmG+IoQeUnuY9jGbwRzWSQPASvKFzPQ8sMX+Ty0xAooDSUYEg2rB2Asi8sg++mGqyPPdcZaQiV7O4lZKh/GtbLxz6f2bTsRiLCS7YyUlJjXyQfUAqv97xnph6+1be14kuOkiiW9yBJa3qGJc/jQpCNb/vnTbiO8xEL8sWjHbz2Bnbw/6u0defDAf0FGLaQbLe/+iCD19fZdW4gLDjOLrMbQ2T9vzdtlMqbVl3aCRT/5cB8G8CCpn5B9Lf3jpPZHybpehwzVihnKVbsZkH26pXEqhZl3TmBX61DuBRGWyjOcuBvMT14I2t2ppPMw9ZDpZixooFP9mAgeVVq/i0VyO1POaBTOdukyymNgYmnefdg99y0VvJTipQXLHiIB+GYJk6iLBUtXC5Eut2DpuKRTvuBkW3pv6b3l9xr3/tvyL7GOfiZJ5G+M1aBLJ8TSrpD/ib7xQ9H4b9AfOQ/uEcDmZB6cL2xC41vkwfpiTmh85keSHMtuqSwHp3CQjy0hCN4mosrShflH0n4J1MoTLAROsfy6R7DbEVIUplDwMc4bwsJzphym5GmaVt3+FVff00PZlpU7E5+eHCn5OBo5v0P3QHYrsHNk0PZ7klsowDlcZtJdJgvEbmwvROEM44XY0SuLhahpubgq3SzjsieuutCgAA3qM4rw/MfmzN6HiA++fyU4Rojl44Jb3lXXiQdVSyENix+uraEeD7BibuDCZyFx7aSSW3MA55ymmgAwipqWKus8ykE9HSnJ7CAcn4q4rnO13Ll54POTEjqOxF+FpSAggq+iW01ABNH0JIpBemwUz1pq6GW5MeY0mCE5NtDFSzPrukTra4iNQgyYuZRHSsz72UwNvCA042mO1PKJUG7b896RNyXM88mIr7W1lyhCT8uigfq1LwQ1zXpPQsUrUocxVC+No06fCYUsGWWUjl0/D4tExtJmp4w1SYeaLpnQJ7CNbVODe+nUys2PIKLyxnBq0kHPfRWcq+THl5c2JS2fQeZBVxYtIn74wmnVXuTeFKjE4apGeJAQWnr5Jum5VD/KXuOoyZRPRtrgkZfqvDIhmlbcO6TcjEIhK7mkfR/ad7WeqFjihp7L40OITvp037LNCGX/L6y51MCmkxcpjKCpzBA0noqXTJW2WtDBHUAiBTBi4eBW4rLSC2L+o208CmJ/sxGolgvDgv6hwNsfmxveCnGodx1iKVgEsUO1vE1JKVnT4SgRTO2dgh9K+H599CAmLZE8YvfNp3nhge3MhwAfna99yEZihxv/XwtnAneD0/eEOhyhBTIjd37wBrwuGTKcNBm0/Mx8mIj73As7n47h25bDP3X6UH6TyhtoUa+4M/rKf5ClWLs9Y21CYGxQE809XrP2Jk3orKEJ6hOiL28/33rVJeS5dVpluNegSJcPZfWrG3wDPe1BG6B5cHPnHbNBlhNozcJdZMyFTFG7UPzgl+oUCXRn+ISQ1WnXACLe4kbKtvvthKJhtUPPc2w70asPUj6hAjfITl0GnlA+vRox2VZA9LnskDs68Tk16hXuKd1zfFgC7b6qnLKaoEVXr+2g/BhWXIgw+GVBoqgnDnVuAp2qiUC6qOG4x6GNRVF5WUi7Odw/iUrK/gQUFTBttWGE+ceQumw2t+2dqUrzOrsHSaolipYpBpeLVPvA+1LureB631Tl56A1Wd0ryu96SzibapY3Nz1TXxbMfhInq7WkbUrgGfVaH2vd/tsicD5w5CYV+eISjPH/omyb0wzec5XMokuSw+38AZ2b9rNMawsYSIHvehmbPWUWUuFHVW7var3Am1LM8YFd+G9VDZuKFOvxqm68LDL8bNbjxFevGsFlTyXE1FAbwNZcd6k29dl6ub5BZ6V/O5cTFBmJtgRrraPr7PoqJUnMj6QIpMIodZLDE57k2i6TROku8ZdH3m6Y1vYJFSWTeioWMDaeNqyKHeN8tlp4nDWkSQxHMqbaON4f71KnQF1IwiOkHHPCMrVw/D5W089eWX3/j60UkkuvoRPJTsumkpFd6wW09GwYBwLMgvEZcBgHED3tGu6bESdiXTBcD8W+EIsfaJeutJZ5THXopIx6YVJDbcsMGmYsZtIXb8bsVjewXzc88FcTZ5lYYoFhIrBcO6ljLt5+dp5HmzXv1Kg2MwCJDrRr7qVlXdraGTP828XfilNRkEJ1GwtTE3I1t/aITjVWiTHgXNljdnMXh5wdZpZcKzszsONMKEJhMh0NK+bDGn+rAJDC3mgiOZxq1OUUXNsxkQWhYW1GFtRiWFZNcNDeLLlIQll0jLYPjE2ynxKXI4lcBwCNsxFW85dwAN0PW2KmOMcI6cTvka8d0LYiqm5TNUQfQJPIoralnyMJ4bt6oiIaYBwZu+k4MkkXTQfL1e90rIWXSgjgUBMgCXkoTn9Rr9HCuegYSj1NaIXnzEQUfbtnz7/FkaUwrNSQpHIL+Jj0VvXs5zg6Gn4hCOMevrvMmTvdBdt6DOzxoF88Zp3bG+juT/Zl9hHsXlZY/IeRVTezaepfT0+FNz8u+rCFX+1LykI9/PPmJIfH8/IRAejJVADY7rGj+r8PWPt4mhxDEd6+n9rB/NPcTe2dTs3pXtOjtNyFndrtwLPSz6s+d+vOkWnztCqcbmMfyfd0LcFRcVF8kjkoWIncdj9IKIfZhh+PP+DeY7TVAGAK++IgvZUF6PTLIJT9EhxpprSPCoWuxThGwP8vmEbDs6kDehX0zWXz47U9+/Hqajad+simdjof8lRabLnIvfxoaVOQL907ZBofU7FPER91ifRhlz9nXfSHyGA+c9sQnfOh/SDUqx+vRyM4oJLJXEyfaISzIFoC6MDWR2JB9vBLhhchIiznCQbr7n4zxaEcvphNcZfivwbIKk4C7kb+IcPA8u66nd2Gb/vUiilkp7G6ydQXj82jFjlebJ0yyezuSSbikTcg/iPlGxcWL0JnPmnSbXtHfKBGopIcI3lir17wt8hz8Tw0UHbloVh1oDnNdFBZVkteweiH42CzircC5ZTif9eeYhieGEnmUuVH7ai/JO7HRhjYEPIibvKkVqM3z0jfZE3TOv0ECUC8NkRhCWEHvAOZQ2Di9cpB1UFmdoTca81BmGHQHV52E9WYKITgpIkjtau2nj2g+/51uj2O1NqXpe7/et2u+ywiRJcxClnpB8zPWr8KpuDNG1On7P5XzL7w4LaThoWCyw51tg67gUiQxAvac5QMfVAg7A9hcPddIYKqXNqHKVTRL1cI18UOJxu71LHOStvahBLKaojwKBgRA37Txbt+RZS2SV8fnhjPK3JtIrQYXS/KbLS+FL65SGQrNoZCPoQ3jPPJ5oGmhVQ7p1HPtUJWZUSK9u52UhHSn7Fz4LaB7f232yKKRJk07LL/FidQB0163aXVWAUV+9Uo0KWhJRPowfH1uqYdJztTXYWif3SQ2veJvBWruwtw9FsVjhQC7panWsvhWmb/auexdM60b7dpZ6YWOyOJa0qT+G9zC+cUTlJul16NOjStrdI5+HmW42OyTZigq9e6wSExmEs9irgKnyuV2XcQjptcAhXGxzo0uId2qEuEZLPpPSpkxKQDdnY2nESOYlFBYmNWyWgXWU1cgMEOrISgwBaXV58jMLxLhTFsomEXb26Cnyiq2J2giU9Fm2absgPt4Rbymjjkcd7KgXAtHaXNVLic47oHHBk8ARny/M5iBziv+H09TI7cjX/4l1dt0YkbjOG67cwvyDnwimukP5zYBXBFF7hxXAov2L5b2RfPdccCG3yiboYvK/mEAdstGcwwoUpM2weBoiRPCYEpRZxbEcXZdI3lGC5+PAl0a9AOvplhycISXApYj/Cb6zYy1K01G+osg1+ehGE0m/zhJpyLJ7Z57DmuoP90ZNkReZoycA3m5rCOFZTV8N6IbLjf5BqGMUl4znKQZT8ehgTTt5IvwXbnJLz/7W2WXCWlXpiwfXydTi/zOvfh/iZZU5gT/fCx3nc4PpiXjU8MdqGAs84cdBbTDHTs/YbHBvUVFzcLVURv20/zNCLGxwIchrqFeEBiuug3jSpTTTU7nE2FRDhL0LYczn6cZASeq3qNqi1zQVYub8kofKMm6437UYd5b3/SO7CKivw4FWFPLCLc4Z8CBcULyQE9K8kclUkMZwxwWqSVYIrnqhl3jFaMYj9xzk4XxZQBOZeTHSYKTGcyN0fb56s9a6UvmqOL8RLP5maDP0skmaEs2VciXWCWkS8gbAyh6gHDIsnXCmDhDERh10JM1UdBGKpt3XYeJrw/+Ox5PFGyCLErC+uRMXw76JlFhorQtT6lEItxakSkm2joAbmHfVOulpr1LyuY5qrCVm7ZV8y6SBu2UYc1R9GKlgLZ0FCB7GyxzUfoiunzAJUkS4CwDLnKYZlJE5rs6JF008a55Dco1ZmpojV5KSQyO3RGmuIu6MJqCkKcv/VWPC5Cmzr77J8L2amlHANFA8v4MLWPFTxCuY9+llLIkHb9KqC6drvO76U/HhzYd4TCrtX3hIMtbCl4wpA/crGvRH0eb0k3lkNxfNADxb3kdLBtYQIKSVtpVDXnukN6/Jdmoy9bYx2lx/ziK38opmSgnSmwC8vM2i8fKZ8MSMatN+ll9Va3rQptqQeOiUWdB5P8j67+kp4MWQFGUJgq/jA2SU0WLYbL3FznrYOcZUA2pFzq8l+c26QbiCbAl8Ch0La9zRiLDPy2srfCpXRVcMOatjv3XJEqv6lQBhL4ygI3GKN8DSMNoacSezvDfw84MD+EGYUFiyxXhVwAcjhmct3ea/nmTEyFPJL03efr5cMR1jXApiV6KATnd6csvUBQIDUUE/gF87lpIhcASzc3FNkongQzQBhyilusxM5JCHhq1vsAHUSGlgfPu3T1LMf8fUvu+nWo1UBLM6eduqghd2CF8y4g+jxwScriC7to9zCH1oCqa+AO4eXSC2V6Ayu3vW127r3ABmlmG7suJd51EhqnAydEaetoL5Z+Ih9DtWAiYG1DSpjkcYPAD5smccfdVDpabrJdAdk1Bwhk2f/0XFt+gZ89z9cWBxBadW17CYPkcnfxboTMe+1Gm9uLOdI72/ZEW8/y0dSUqGtJdXZHqbBgpaZqxg9gdyvqrqrbu6pWaCOvqGZ9bS2aNQDDcttEfa7PXefhfw+AEl08ngtUlua0VZbiX43A5T84leaUEbC5JWu0ClotsUtMv9U9Ma8XonMcneCouY74ROyoXJb2qJ3JxdQ0t2Q4GJsnrM6NKuEQsucEeknJx9Kow/RNlZAi5gmhVfd9kZGBWxrcGjGGclP8Dlyf/begmrKtRtKZ5yBT8yKmq5BbFMBNJ3ipr7VHfJAIAEVxbHyfCVVxhN4Ea+KJOX1kmZaTU/zPKeIuHT9RFhcximF6rOEch4CCeVy0QojIiYrbkxQjbaoz5+dTT2lV8Rvem+gxY85I+O944aZIxHzaH3mJ0YT77dfahgwJEN+Ecac7wiCCIbmkaWV98mdvPxjT8bb5DRzhJR3z2dolyrlyaNktNUvWxPOjxcke/OgOG/FwhyIXgS9DOAEITNdNLXNtuKDHc8plFH43V4UF92UVd917U4OC+UYmM9htdQeQb5I/FQp+3cw6YsWkTBNupvHaX4FOeZk90YqUGUsSz1gWzC1geFSSiYQeEdS0CY6LXPM4KVsvR61UCB4pu70JHkvpAE4e0B7PIba/7aQvUbAr9ZlScVQ3ZXzHatAGkBg+fO4eawSGac8km+CpXbCs+fb7FJ8xW/0Fy3TDoZwOwb6pW+BIv8uCG5EDbNrUSRJ/WUcQn4nnt35rFYyt6GLoroOfLw+6Gcj0pO2fsa+AtutLPb9/jmtx+rXd6t3Ls22SglWOFNbJHGG8r7Q9xIThX+tITsfORZ/N/tf/jGqe2ikQDYq2celmNH7OnXLzSvuO9YNSrDOoTSTs3LlGKochkEZlMW/XAAMt7Yp/jbjIlVq2TSg8sewqPiwvBC23Zm/dTcmPDerVVzsUQcHhB+nzht1kaCTCdTNhdvoWKwvYZ4oSsaqOGGcbb5Fl+rid+q6arHmMR20GI6+uWKihVOIb707/PrT1cPyirhOh3NZKdbTbl0cuJuRSqmEV3BOkAGkr3zd0DUr+L5QTewxGAetWpDipU3AdliEJHg0sdyYLdHyNYQueZGb6g0jlOWQQ5J5v3aM199JVy3Uf/1Ge3bkUt13caf0uBvT8mPeOg705fTxlxlV8YqKpH3Ky0eqPaZDkVLcckyXL+x/Se8g56COoCA+vP5ov6o+Gq0F+INLDEJbG6H7QTc1uS8BzgI5xdRrVjdzNfNl7xrtUcdNhwEyTmciqsCw9t2xIe+RMCZTaG6rH0HSa8IzUrSafJqsbmtZwLNfIT+ipGbS6EDg/AOjP2S0Q7NpnkskF6On9uZfJBNMc/vRuPPO+CgdQfjClqSgsCSMKIdCVJSvc5lo7XijOtAu1+cAnisoJqanxLtNhMiZquTYxAg0RznpnCrQ1N8m5SKv/9Ka54quCMo1bPbNcYTa/iO3IWD+FCky5gplE7yvElfoQPOiy3GB0tsPgZH0HbIeEcx5cI6QO00aSWe8+aiLcg8lMxFwL5rRyH2XFwnT+ZpIDbUYiKNB/G0P3n75pLoHkRmfle8JmO5BO2juC2oc1qe6HJ/TC45AjhJ6czzOtLg0Q99Zri3cs+gIfZMwKN+ZARqPe540Aj0bGZso2NHB1O1t5/RkeDdikWUxkEFPKEMbII7WtZuIc1sFeyNo0fo+No1AljZ40n68sAS64VLmvZ4P5++PAqbMkRjyKYh3PXfxynQI1lAg/kz1Ky+RNG2hK0Lu+tIqLD7o9+gSk4ACGxLoKeLU1+YaI1HXJtoNRuw1pMGcuWfZTpIvUyIatl1l45Elm6xNdbDS02RGC7HxTMmZULCwdGyYXsYp4/RJgdqBWINVf7FKIaio4QYm6H5aZIpV+2XsVIn2ATFIBBq739vS8O10e1CI9Zros+/6UQ2nmCDXg6z3adf3sV9bEp8t+e7piPl0Vn6K+O0ZwZDjsWLVv1mgXeNI1bBh6kk8iojUn7nRitqTJ7o+xfs6NZTQfilDoypCeK/kaNg0+yScxuUa3HXBSpNCIkv8gbspwrErL08UpBDJieyBraCuOA1hAPfmkPFJZ9wWq4uR4fB3I6YYRqJERQ5cGX7At+5Np41bUzSNyjseRMm+HeG/Y4AOTh4sFQ6eZrtDMr6g0N5x4Qj/WEqGJ53g3lPIgwX/BjbkvAN63C4acLsxgdIE6mJCCXUZhvDTnr7Nxa6EAYH4AlflhCVNGE6TM10ypmFEoUVr30VFr5dMlvj1dIZ+iXWpUQpswhGTZ0rUdIE1uAB2ho3IZCUkoAETlgWTYTpeHTq+R59HnIeee8yLnEKghPA6gPynJCqv9EmBxl5DHixNZwGIC+ISIP596tmySz1lKWOfJSzCNvSCsphu1WSjnZ5BhOFZrKuj4Q5BJTEAqjd5FcdDoy7EPgtGmeNT6dAtdPT5oKKNBnrUNt1bmp3X8dGpblRXKqVL6+ReHnjdSY3QaLY1HU/FmqVXaPTFvxYHJxUlqTNMfb/OJaIMHrSXQ6d5QHmVpnSy8xGXfAcd6FdokA1MKAzBqB+j85xb7scozV4FTownJXNbX9hsG6i8VjLYfYfFVwvqdoWg8d49fazKaITx5BOo3bIcHKBdMaTC3DrBju3cwmjGERPEz67R4I+AEDzJIO3z0q/ZjUo9uI6WejbnyrEJp+V/2TkToGvLmdDxPqLdErgttfHueQZ4wRk42tDr1WI8ZUpkTvHvSi0wss9WMPTuTccFYOp7Vc+65+JKgOZUryMKe4H6cmOM0m3GsQxeaOPGNKY9TnaotMkhqAptsqyevZ4uGBuo0ZWacIsUxWpCQz+DT7IwKbQRnd1CSfDDOh1mmV0VZj9xygoOSlrf3TxLf8QylmirPfJRzz0bzs5Rn15+jMml2WhWeddU8AM4eATCKiVf/80RzQzE/HS7HcZBCA7w7y8fl0m+8fuf2BIEPdXRYvXUac2yxwkuOKA77mLoxfFbWKQndw7U8GDJShjJxBIgNBGN+UU14ox0YgJ+IM7vYX5ObmNF8NKUC4CN00gHk+OEuqpI3rCNei6d1kR6KzxyHsQ2bruIRx1VHoFq+zW9Ig0WemXUnkWLSlgPd0Dm+ARifyFS0uujurMDt1a8HpqbYz911nQb4TwHyRqdLsFgm3PLoUmOnDL4udj7Z/97w1eaPfyMtBP0ewBq4l/Xnypqpl4el6OnUYFt4SecDUJjh5B0Hg3uQayutsdsj6iRMwO2hMuVSyPagTWUEh5No3x8CE/QRkQHzxmWErQwksxqj7aIQyRA0obK2FRuX67Fs04IxIWOrytjmMZpyMlZdOQowSjQ2jstNQt9dyGFTjTwsdzQsyj4OQ1SOojVrNBLDUtOyjB36Q88MyXlKDihQT1mhoAElDZhpRAJ1KJkLj2EwzWYaI+3SN/5dVpV5LZftFyzcztT2sLCjuGuAKPgaNxY7Nc2bn2UgA3xIlzlUPE0x5wMiNMa7b4KpKq1kS2RcZXz1l0RJajkZzj5iiSqvqYNE0wvIytCMEQBK8fuOzqNBwV/CBCcfhfuwuq64o6mT4miwYCeoAblNBALa6rhaPPQTiijH4KaYg2bD9IUkWwtoDFhpw2/q+paPxEU3jCQGs/LnZKbNxJoqZecAyVC18y6st4me59Qnfco59MewM7GFrp8eZChAKRvXk1tLx+HFdBacQZHR0oXoXdscR+45nbBRMdY0Jt1QH04iAHUwDO7Iku+pHtupJ/XuNcuDeCgbKlpbAd1u91zwSjAOoE80NFnZX8q1YRnYpbffDudICa6eWt5NSVcKLfl+cbdk+sUIOibTNqBNJjyYHkBbLOfADZHkSI8CCggwbr9goMPQZcvj6cKiR+uOQ4/HK/GAOIzNcVLj8a5bVHwJIbNgV+IosU8kQnt/O6JN4z08ORoYvyN5iOfg4xJgMRceOc3anQf65YOrZTSP0Zq+Rcsyms8Itz+PxKCKxZkYMeVFOKfGYbISW3i7P5Iax0nQH+BW/QAjDik9AJDdDqTFQb1zfgQv2wJ/FO2jTAh2jL6lLnM2dnbL/7BygCU0AWKvBHJbwu+CED04ZVad3yNuNpb93gn+XsopRH5LteJEwkqG+Ekrqy7OJlRyn5UJ4BnpxLRCksfT+YhG57Ay0Ivh6rmqT+9J7yZXr58Eus52M4TYBYndTj3HkRS7OBJ7dUkfcRDKiLrgSRcxZxD1MikpUfnjLYoBgonb3gcE2R/otu25r2+sl8+C/eTRvq4+dTSetKZnL4qG/6D/Im0MDe3VQRr+lkROZBeXPhUhu7hVT5NL512dVCWx71GZo3MherjBXD2vePP+q3poRAc6+bB6IvVW+xcbAVAujruIz8OE3RbaOl1Ugqs/uDJjqJRpZPQ0SlQ9Ivo1WkaqU6R68Mvrt3lPeOvET1iGUQXgTMyshouibO3A/wuZoOjc2hD3B/OdIjSXYkhPII7JCPu3QKMV80nSyM/n4VKY7pdIb6qZhR2JvplYrasbD6F/cIKnNGHvZkbINmSUNy0sdlwHbCEExifPCp+l5HM/2kKUEJzMZluCjiXCNENLG7iyYGLvnhldiknwSxYHZN3NzDk9D8kbcCT2woGofSJem943nDYcmMtyZCpzEMdwsO/loCxz+grJ4MZitO6rDKDHIacWBxibAWoc9BWWwTyoy/kNdOVEloQkyII9AVU18e871tLqGS3CaI3folUwms9IXwEaXE/cqv9yRW4ESOkBgOxmgJYM/6tyrZOHVK8w4pDSA+DB6ZW0ZOhTtGRUjoZEfVEetd9rNOYClETrOvfURb1BWPYd9e9lMmN9edm6qA3CfC/S4BpRLTvrhQw5kfcdLVg/ig29gUiTiPdeo+VHCmwWnCxcl0ZNLYmYOGTBPoLkfUd5/fRqQQVr2ToqcEtoKAc1mT1AXDno0x4vt+vn5WzkXyHLXjI38zzj4ty/MLhuiLqYb0FXHHmQRABZsAOpKkB3CYy8rp6YggkRGyElTkgUR4gqkhCxE57jta3ILH4Gn+nru/dQmojvt1k+R06Ba4lIkp9IDHJ5VWdBdyIFINaQgHe9u1B7PKcdQhGKWcg4sJTW6K90F0JTZChHDNkce5itjJb5yr8O89zqdb632zyIPe0df+TBW2qNtJQt+7585WbdQ2dOlTAnHsQSz002FRKZvcPR8/Qc/fK4lhzqXcgkRtdPoTN7kXOMGRXItT0fr4Zi1GSJvOeB9SzIa1APrT+tTPeDxfHZpd1itV1vgdSXkiUlzxzTS+hJfUoD2UoZphAnfXB5uXoUI8EF2hcXj820hev769o1gsGYtEa1tFPgATELWqPyeV2ZYIzyAl7J+Qo4F/a1N3LqV/OjrnJGpoZo0uI4Y1DW1jf3DRqEzWv7RRdVv5yG4Lnyh7agT/tf+tktBzkd0sPdHFLfP3ZBpI74T8AdJc1Tf2g4TN06i6ziXBnwpqSoypI3u7D/aPNAz/D6tI4YyGUT+cOzJ71ReWL1AerHHOeqeO7CeqEBneqw3DHPhYutpNg4VQ+NMwDTWTzmnjE/97qTUKzdmxox9WPjwyr8/58Bdi4dU5JylYkp9ubriWgYgJYJBF9Qw//H4tSwBgDEJRALURops49OS5z6RZtluLDJ0x9lA799/c34tDHsfWLhDLX8IklPe7Wtp/V4NO89nFMo7i9+6RC8gWUx0FyZIMGGOR/WjiMQ9paDOkxFdRTBSfaVVDA2Gsr0lxDsbwrR863VdxY6i6KQQBLJJV2nGQjU/Mjtwp7+AekN3fW3A/7Dexq8poXDXB3kGW19YXa47n+n9gMpu//ZPwFzWR62lY6J/Tm8pVlB305Smnkl6In+9yEVNsbk1wRrxY7077fU9sjDB6ntBtBpgd2hEdKrv+kraxOWGwjTjOhRX6IQXE17xq3LixEEvQkMM+Ye0BFpOg5jWMCwStz5yGye48bVSa3WvB19O1p7nRv6tXlp9IpT58bvHtjrXsWLLe4QSmL14mnfcL2GmS7BYK/vjDkt4lm8AN3zWxix275LeB7nitYSH3boqqh84JEUlRdUCSqMLxf5cfwC+0KEBfU01o0U2ddbRNFuQICKoT+p8MeYhwZi35FzW5c3BatsW/X09ZfOw2K/XY8NNZ7bW3hPd09j+DhJoFopL2Td1KTEJV199pnPzC1Mv7csySdSqxt52wPq1/vxEY94I+PF/p4w7nn2/maWKq4ij//uPUbPPtz7Iet8uu9+34heqvtT6XaMBcCQA5dmE6YdznFrpM1jhceli/E/VkZsWyo9dL+wWwvPYJeLud2MkvsCQBaTjuwjPqTReNJIMrJAKcvsIuCR1x45zt00mwAMdDhr0uwmz5o/E672l6mxa5uSvi7g6dVUyiyjl+Ki4M8PdC8vnIdK695dhKM/IU1YflL554i+KIFsmpa+vhg1dPxi4pPRf47NVb4nh/b+1BZZyXt8m1BEkHM6OzTEEb7jhtlIZMb1tOgRe12nWf0kp1iu7Y3Zjwtxxi9cscph6+Wpdek9k2NZe6t15LBAOMAA9bM02pYzOjsovPhIrf7cfs7Pa1Or4UaRtUAbKlhl5F/unfqvPMiBnAOil/djhSc4rS0c3Ji1evkgvKI4lyivNmGl70MPpN63Gk1Mix9dtf7pivhKe1Ib1LmcwTNoFNQS2XxhhNIA1gDKgwua/CzrXHScGUBOTb361NcszobHMitEj7TzDDB2266FC1hc0XliJvE0ltDflTsPLq32TMqeA0njyEngPyfkyRXqv39HpwJQZsRBHPrD0Fx2UhF7UTSH675ZD1i9ETygY3cFWcZM6IUJ+J3v5jc0jwzjp0Yr1DTOT4vezCVrqO3TJVoEswD42nl73LYLP03itFGb20YFwZ7zi3SiVmeqwt45dMeut02k0c0o0Lot9LMq64I1WzlSzuXGc45veEqE3SHDeM2WZ1kQRmnpGBpUi9bv+8NbQo7Th+8W2d63Fw42nFzatdTjhWEak2mQF8tkhmhwJYuzf2v33iN68SJPVkzcqiR3znKD1ZXD/ydzLbUdwLltd1Mfbc9w/P9S+4qyDsQ20e/3mfbvRAtCzNLQRm4cN4p2KGwDTxGdnkbSnUOI7uM1LiKXvqWXrOoKc+rxbDC09VyntHsFxIEmCUlRhHU/YTOyP74+KouFO1OF1LfmUzwkF/i1U4/8yTtIqbJKPRltRFFLn7Ld4PjOGFYGNAmd+EGG2P5pFEtTglQu9qPaQg8ZtHIFXQAukCgCpPde4xQoIzaxP+yPQxTA5riD/0FwJ4hED9uhk0W6/Wchrrgw82nl/xaCX8uKIUgLKoacHY+ZmBtbX4JSrV/vUalha6YBUOAH1tMAG7W4VAmCoWNQDLkBMzH49fMDlIO/b6jYig6JCXyhfTiyFGjymkPiyM3p5hvXg0mpQTJsYPtjTjqu1mbeYSWrYh80f90OJHOHOHJahZCL1EEuhUSUR9FiUXNaRpX89llNu8DXdA4xj7doINu8Q6kXN3lvp3fost3vHV7KMdYhtGIpvpx1pVimIu2Gm39hPpK/m6KMKVvhT91EOxJSgQ1TxNtzmt8WV+IfeiutIrRxznlCMrRB9aYamZ0sdMVm2pbCCBeLeArNOWnRQ8r44uYvXqV0MMHl6r8fCp/XFpGYVC6/gNOBclOa1pZkwbmU87FR0wh3DFIvsMqzO8g86q92AVgXKlCDBtZOfX+3SW0vXa/92dBx5L3PMRjFFkbhJRAXzIDOLgv3CZuOiQqD10pHQb7FoqtUS4xfsVCxKgAnW+72X+7PkgNFjPE8WgUgh8eX6W1gvY/UcjnbfPzAd5vjl6DB/TISaX1DFWUWFEkzvM3jer1BwAtKx0B2AOPYGL2DtxvhiW/TuwocAXO/UKtnTvGLWPJCWbwN0f5yTlkUIGNIo707TNY/KbbRWsvKVjYTm2CO/BAtV0XWnW15YA7T+B92yN5IUvGvXl94bN5x49vD5JKuS4yjdcrx+g6JyTxZL1NTFHTkOfIfWUseh69la1YBzdgi7a9WXyzxQrEVDzC1YWqh8rN39vtEbeIBDVEHgH56nsgYq/fauFgbD6u+q1RzO6zaA6D2RAxNGAePqVW0nDzqiZtPCGp8P/GPmID82P9wS/UHKxXbJxfAWsYCENQGbsfydLYzy8vhkTksn3XgNShDELREsxG2VjPi6AJZOwyV8xOO+EqHDmtt/jw/hCIg3XsVvgXPPsTybLbfbbzS0EZ/2+b9zj+1PA87FNYgYrlvvx/V3lMqQ8Hz+s8bnDiSUu2vIL00oMn81NaO1WxIIixPWxlo9WvX8dsw7aNR7kDgCsJppKHso1VBGmvmHqAhiana1+i3yYFETyE1vtPpc6J1QXLUwboWe5/R7cJkOisw6fCPiJBghYzyKL6zc9nahDl+l/xFNCfSJimbUCCP7wp+vDzeCuQ7S4VAPoD9S1dwJHZp3fng8+GCfP7vBIMn7GbdIQRpHv05T2a9+2kp84hZ1Nn6Tc18ueBdXfHcV0C9lPxtPc08HucFChZoyXjCIAsErejHgtEusvRrFk3HA7jXY6EZEL/S29ZFrZ6Km/CGs+fj3M8qkWzMJFb5HyWNCtfBCryU7wQnVm3bIYK3jqBPkkt9nF3sY+f1wTYtgvRA58uqvY1pf8TLanzsaDA3IEhQM12NiVlqFuNwizzh7/6bwIxnzOza9VAeILoQDrVZzVG0+IDA8jNTJ9fKJuwx99dq9p37ZhlqHJeZeMXo8yFEfdE2jZCaou76IAWa9H4dhts7MWKZZ74O0z/f7BoanEpX/aIq/EEKHvPDlKHLSXo145vg7QBkxFSvXmpf+lO/M09T9aPbfIgziu7rnKrRj+4d6kb1zorI6B0nJ8qhMc7+7M7zSh3XSAuQLtWWUSsLXGoSkGMWK3VgT3BOy3F02Gg/9wMw1p9wa6SwkrafkmrpfgN7L2GJbR72nAClVbtye8V8a4DPyQIu0EhmSgo1Oltrp4RVWpS0Xx/UqzodyprcKVDqpERN9RliKi608b1uKy1UyO8G54ZoWIoP3OTJzFh5aCU3ZceHeqFTMzja5JbLsh51q1IIq4MQFyaT1Hq9aojBzuMDlvwwJD6TKp6+rWlSfKUNWYVIQmBkGlgo+CFyfygBgmKKuzxTIxSJdsZf1+FqPFugGUHKZjm8ZP72tG55AIUZpcWdiQ/iE8lKqIKrajmMvGXyzTO3bjaQCZ3rMJaJaap54V9QPftcmAkl2lZfLmS9tbn5mBnkCIRY8tvSowaesopFhUnUOclWirztsmmtqu93W0fRf41ucwSLGiMtgStPNm3WNxtMSHLsMeq8jaFSHZ9kOvZJ6wuT7FEyLD8Yv+uzisUw68n3H5TQQsaL/tjUTwYIkkBML99VKpPdISLwCENHAOANUmcwqI0g+IMUjpy+Nn9Fx1Yr2b0mvqZSEdEm4lBwNgdeuPyhlGru8p5SvbNUDA6YP2MF/TB7xkwIeDIEzqYH5UKymipf76wlfWXxhDxYSjrdnuAGg30N6qzifM8DvBdcRryjmrU+CDMJtLhGuoKZVMBSscgJk9Y/l5ZctkwNwPmKJtRcd4lIq5g1qIu+sefQmeuUmleU0WG3YXalHaQqxdlY80WdMzsp0FtN2Q2UlDsLV1i6fhnTUre7pq0kcQ7hmtpU8VJUsxEMOngMNVuEibhaNZLMr8x11LZoeJ0dpEIvtywIwo4YvPktiRepoD8PLoi0IDzu7ubGEvms6twDJy3JnenAR24eKHclGnNwXEbn8uyxfgTABY3pz+GPQbaWgDyWTY++zP/jg3fRHy7Kxrh6TxvZsC2K0T071qArULYam2hKmhnOCoWJGXXxi9VPOadzx5lj43GN/7fYAFRFNDubI4Eh9vxm01VOZFEI0fHJzHHmuHl9bVjDr6rk/P8cb9c4JhW6vBtXLFJDy/GMplr8MaHAyknKnf2/1CFf6Jo1kW9+iFXItI6Dcw0u8hKZqJWt6QiY6riwjCKlNbBwDI6uYwtYdJTCRt5GE/PO/XBaI6fZHr2+NuiZDiFbkXMCWUwsVe3gDJeyZ66raXNpnzff0JBDH+dQnV5JpeTYqz7nQFDpUdkP9YAM6ZCby+tO3fZDHLobrKhJqsaj5tvBnDDiRXEsLzX6IK2djp9wKKH3vbjd5OZ5wxTRYFWmnCmAHmN8+2zO7mWQANUwBvDpxx44kS2x2d461wJgzA+hnt+VYujuO9J8ab1bz7g08J+XxtrdHMU2Q11sWGtb1ajdvRX7Ycf13NOJlfWdUBpxoN4kfMEmgC4l/4py7Xm9nnkuaWf2o9CJOVLNTWS/X/aOtXoph3sNY27ym0FqAug2/kj7jZJ28dOPYrD5RrnfdXjbU+pSi3VZyj8LJLzZCqYtRB1bOo1Sue/XF3F3pc2dVBq+FHZuod0Rivt3zsE98h99arUCUaYEBPvjmCZqeXtTGQiT0Yeh0iLEnGAfH0dUht9WKOViaxVrqsh+izP6oFdT0ouFvQjVQDFcl+mpeEcUdOpFoHg0JJy3c11gAvurWC8gzBPdtiSewge+BiFZA4AJUlAyZdkO7YFtBxiLmN4l6oTbCAJdv3OspEXBV8vYxoFEjJyMWACi5XM8QmQIoC3oqf+IkHD8SdUhWI1jcxhqk27jbLYY4yox5OIp8XavBwDYAr2Rb6Wc884TqFDh3qYjC3El2lk/AqyCRRnh7siTEuH3VB7Kaqyt8GQ/lzeN5SViIgrDCtM8hvbhCmFPpSH99dE1IS62QU3eflbvuA1SEeClfhqvC/i7YQgOFc7GRfmRyzsgTUAXLPcD8ND34Km5UzfowwTQMWAiu5h1CZ7aN6DhlIDy4iqkSoPlppfyXq5UWgl/baz8ATbywzL5mEAJ6JnGJ6xaCFwnFNkAnDzFnQZqIAPICL9OKyHzSsOEUrYHGHjQelWQEjGojkIZ8ji9sIB7w7xlMd3APfhNODKB51feEbINNvfm7b9oUONTI1dybZxzm9n2kmJgvcw5sF8kJhN3kemSjhZibMxV27jV75hATdrH15J6CroCWB+DOkVH+EOiCdyb6yMTbufK9guzqSbeuJK4hLOmnKIwcTQspZUClg2K7Mf0JtGTeQ/HqZpC7PNYxCzeU0mt5tbrlti1J0MdOQZ33QVJf/n7PbOsAbCO2d06CNQbtAyAdSQrNMXC0NWpnPmSCRoUFFlRJaeZ+Z4SOR6gQAqo/U4DoE5Sbb3AZx4vgZhyrFy6PbzhlkTxWCgrhcDezEZKldMgzVOrPSAsbAHowadGZDEuniZpVvfnPdGL+KZ00NGg1Vs1N40WVs1va07fSuDovh6mAjuCGmXjqCIULnVPsStWPWUq456n6IMmHXOn9vTIb0AV+ERrADpOHYglvFGNj3JJ8hVKSynUPqAclHrQNnkCyX6WtXTJ/GdiBA2HcX4/UA3GpNF70urARZWnYBv1wuaAUqU54MFwvl3KsEPVH8rq9rFPKR0dqm3aLUbZSRhkCUxKCYBicPVYuqQo0V93Aoqo+mkUJzRgqj6RqIVWw+n2kXts59IRMd/wVOYTaEhD1DnfGOmTGNus1E5edrHH/Y+UaerZUTEuEgoFEyTSAAD3IAwNUZ/nm/tKwfIr/2bG1XjYK1a4YhFg+BbjYpXxfvEHngADkXfSAeOQXULQGVY8O4nRqnxFYPZHtdm0DBPlLu/H96SoJ2wT05u1ye8xkVRGQmnwLzNiUdb7UC7sc0oQO1No54IgN2tFG0ZMmOoYlhgmV8+xFl0cL6eCq1lcSntZAd6Q+kZk0ls0fVD08fDVu8Kzem7zfET94w8YcJK41b5/DKVDevEFJPsliIBqUMj+mpnH5Ht6ccyltm8CnB/ZJWECv5StR6y2FqniG7V/26IMzRPd0+UMruS+naD0z7DCdStVfdu+wN7YKxb7YCtilZrWSNJKZG9fjkNx77fRbomr0j7W4w6Z/IVl9Icc8IPfApB+OF2PG66NK731jLUGYWb9HgEazE6l8b5tzCqZ7Z2heyMdgOE8V5pvT99gHP8y++9t0IoYnMJASKHDGM13KGwG8dhLjno6k4A1mXpfQO+N+1oNP1wCZqTLpJ61+jy5jCJb8sGP3NPC5dp2Wc09GKpX/WBq1CWj8906tTk+lB9ytk+A5ZHFhabqGin1lQRN4wmxNEd1CSuiy0k+hg5RORQJF4f8CMXsXxR3E1Dm6F+40ajj8hkCx2ARwO9rw1rnp/kspFw9Y6H71m8FsW9fbNsYt3bCM/g9P+cvNwcSHdwwa3yCAz3t9lUag/6sKdbcBqaqLy9BExuvW8eOcyv7uKMJFlKycAGdjCNCC0h1+mcJqbaf5lrIHJEhTOR5+scW2FzN9kZQZaMsgAbpmEiYy6pej/RnhPesKTP61hCKcR5ERR2f0xWT/JbZev3QBAZ7Z4DjWzlvxIVMVvqTS71FWaobdBnVmW+ZeFXiUUYJ+wJlf2hEGySkL6qtk0yNG8CL/AC9704eCnBepEB9scj9OrJX3kfdaChUHK2UV7F2dOeQuB9I5i9vANRw457YlljMHIeJaDbWe+TiaJ26riL3f1329f3Q2FucOurSIWWQ2jCJ52j6ZSSn/+sYAtocRfTp50EQ8tDUZjFOrVF8OEPWv5xrPf6G4kFNhxzFco+09JikmOpFjTjKWh27NQZiGqlrf5jvkkN+2szHUX8DgE3XbY7OTf5ldJP3zFOGogsH4rsJSstLjxZnSazmsMNQQsm0sjinT+eaNm7PG0j0NSNlGeQ4qPjasFM8y+RnBwGKcbSiNFr2PzsE6I8fFdYJ4IWnjWotZtBZtDqukcucDohIqXMoWhJF4eJcU6Ff9iDCw176pIzLKfh+WyJr7fZm5/tJvyC6nSPyxBT+dgdgUMOnMaz/fH7IZqehJvh2a2T6ZEhnNrqFRny3DkgMal0Z7sGS3Jw58rf1Tf1Uhsk31rItwgsotYpCHuucOO3f4TxC9gMEg9X6GM0AxUBhUa3l+hCXvXDSCSNTOiHxnUH2/MN+rNIWygUiPlmORqhYZ0tvGhJavnaPJTCCxggvqEsul7zhE/JVNAn9C7IVRwkvI/PFAYY7lEAGxpdeDQ+EHWlrM/glBLgb8+VTQmsDrkDsGcKUDFHUpOxbqlg3kJ6ej+y234ABf4gpjGJTr/NtpjBhmC3MarGDlAxpakIsaeoPBZiATv/rhJY6gyIneE80q0E0D3gXlbtZKVcXaYS9rQgRU8B5HIlYFqUfQsbm3oeAkUDBE++iIe0zqrQEPhCA86AsBvWFdEMgzgV0nBnV0bARuDOZhbZa59eN0Ar7ZzsrpNoV8gd9ZJlv5TwyuSu6DMJxAu8nZno/XBFGEm2e+MWiJZYFYfmg4XE/5rMzFLbZ9XiIYp92cBmdYmkwDJN8Pq+TU3T00JmGEbcduvzw+P/a4tY8VM65gdFAIpPNMcLoq6HbY+03j2qA+r+psSEyIUWU3Hv/We8dR3+seisFnkWi0cfgp1NXhh7Aa3QLpIz0wjlGSqdxQIRMioFv7uduNcltFYnu0HLS4MQTTgg2qXkRoc/PQZ5PaZYXQiJlS2H/1EaLUD4oPVGPNTex/ED6/k32yHB+SB6Dwdj80C+uhfT60+lI5NXc8moC9WB7oR5LAfcZRIi1cxTimeIpdJ98kJQF0PjHQhAQ5clWTFamAOqVG8wzCu7RadNvQqM1Mu5rTRqsSgMwVJJnx6RWra+kuT3YIIsALStrOFb9MFInjnh+ZOQGyi8Y7979auPp/EF+x0KKmAaIByCjiQePNoeo4IvljmG6Th6MrmVjtiBgC7RyKnHCNcLKw7x5UeLzcZDhSGcE8NhqXgCfC8DvAZchyih6JxiQLAHp7plvSyAdNQkcJhIm3PLAiHLiqDOuGLpbPaHIGzJfN2k7zgfWBo2R1fX6FHEQSDebBhhMqNVbH8/atmoReisrOgCuVeLgc4ZLesQ5obNElBQbQFBQRpYTFADoNRmwgMF4zGesJb+Skf5bqYg6KOomQZcNLWbnNBpFtrrdwwJKf4tC8133rLcwPbmheDZHfjnJIOz96sr8FKcIR35n5yA++nosoJR2U77fRxwfKlSEtiUxgzh/rhVEk813AY57CS4w/5l4iBxyUQFpWP+ILPgWOHpMiSWTZ5M6rg3WuWIKqG2GBAFIAa81WmDiCRd6g2P/NAAaPEySnz2AffbGZ/PuMlKx+CYQDs/iV3US5w73T8PFVWLcMMWjBY12DM/L2GaGGdxNQXVLmMEhVKi5oyW3eHF1ZzjMlozYk6g7Jk2TEAP5h72HUe+/H4cP+sKY8IJJL2pQT7T/kmIA5UoLZraDBPXY8oFEnRTy01TbC0PYGV++2L0oceQypwwEquHXJSUNPuU+KeChw3qQUIwmbCTULskc+m1FtHQDJxC7Rw5l/Jf/cirjF7/nAHAr91yKyD6ECzge6PiL3fd0aMW+UF0fdMxqd5h5Xyauxv7+rKpEq8oQKlQyouG6u5XKaGg66ZRUgnokQtJKJm8G2/aDkg23ZBXSwV70MAONVIExLPZGWV/d1TW4OatRa4FjL7/F9+2L7GH+N/4NusigrwXcoEqYqCVSTLlxi6LBtvew+9YrLNxfo773YTuhCh1eSGemgpjQVEGN6mq8SvDpffNaNuQHRIMA7oAPuTO/b0v6RgHy6AEG3ZQ2uyF3F/f7B97cPwNLZyFNoOVovg1sUQuM9/uJ2HWiYJsKc6vAyJgo50PFK41+5MXKQYrNCATVspR+lMxyOI6coxpqbLaoRVF4deS3rVy7bTxVxUm7qriOr2jiExdDj3/htp0zKpaQEeTZrIWtJ6p3QBihnzvMMLRbWSHr5CpDNUDeiFJ9kXeSJ7lEo/2R3XBlxSBzv5SoSTKlFAH2MWNofhf4L5qwD+rGgp2FI7/SquPiw2+x9fi8ofZeKbbKjnXuNLejn6mlDlDb4L1VKIea5lxExFFlj2Fo1b4Huozuk1mTiQ9WEYKTNYoE8A+qXFekEXF0Ho300UnSta4RBoO1swiEekYYNJf689Z4eruKWefoYM5mc2OIpqYb1shI+Eb5b82V4h6iDGI+JFb3XooGueQA5Mk9wrjKwSD+k0KbF7aA5L/wejFYxcMvZ3DH1urC+xog3W/1/2oyySIrT6iPRqFMFRtbwhgVc8rAUVkvgQUC6e26yaroEXGhIS5/edUT17dmc2sTePHCnsxLlhfx7KHzu7VXq0zH02j6PVqk5OW172tQJ72Lg4BDXZeKr8mlDAgLIKoGw+RdarEVEYMUqcASNY0vZsJmnXeazGFbJuXSkjEsEf+B5lHhYopRgSFYVD7l2/rmh+sLB+GxSXG8tBobHAjncV5gjGn6o6l4dBe6/85SkRIBBKRQtmCi/kHgh+uzVQczrsAMjd5OVdq2E3r6+cbfA88Oyqp8Q0Qv0Cq9nQptRq4xmfUoy1zr88LmKmH0HFUWdV+HL0aby3yD6BHAanRufB2bz0puq+G56TtfHBiWIVdt/Ggs1oQrLFV5pVJIIheyapbxVMeL6cHg7fGHR7bYJDfaKdZHVuEWasDvkFRR7KY1g4RXDzDOg57exUYPVTnRjk6DvmG3L4Y+ory30leorypJmM4Wf6EUAB7wWOX34s1VcCtB6L6UuDzRSD9hLAWUFdBMUzZywBu3jEuHqVyVXBaov6qr2vfYRN8Xdk91XrcUnOlRqCi6tSA7HLqrAG8izlmvOsogVF8i2kaSTJDAnuo8rVTq8G4K/ZjxwAkYmtw/eYBtI7WjJYzq6921FWhIhV7TUmuOxmgezAAkpGPAWfFofuSTQMgCx/1m2GUaU+WSlbPwP+fLJiVeVrwLaUpzTJWeeekRBvK7JIc5T854+ZEQQP8pr2I1VVkqPHHKX/lDHSD1MCeoWIpoj1gnTqFYwFk6OR85WMSqvGK1uT6ppX7rxo6eZHb2gspPWQ+kIfNGPSnDGNdmC2wYJ8oyhVzNaNOCx1RUxpTteGoGnC50456n3aC7xs+ugeGJpLR5QaofOCf2qjAKzmZYnDnvF/1WWW0nKZMFo1Lf3MT+PeO8zirLRZMzOyu8/VPQ7WYzpzEUrLYHmUvPFBkmrIaHkIQxxR4xJ1oOahd5jLZ9kOoHThbs5z66lR7WUp1ocp8cpPculdPKkRdYgrMRRqaaIVCDp4Cw+JbjbjaEj8yIQEIcjKHN0Tp2muBYroVGXXji14U5Zt8FTzbkqHMp4byJRc0FcF2L+rjRslgumUaNi1PMZ7xVJi3c8IhbyTT2sS9X1NdtwuPjX3EcXeiJhrIZLW3yN6NhyYhVsOch4AuRG6yJMjZlHW46PULXjuPtgYnsjAK5wMzlIU7CIapAZuNGaCWbXgseFqngcRjFa6ZbHnHR4pMgVVyjheGcYeqZ7lv+yjVhKusjsYgGsfEg91ioNKbsFNQCJ7/Pw06iSqz92tvwwxUyr2fECoqDSLUmJgUV/TSeWw00hlsD5hD73UzkL3ACWJ0tsKT0QnhP8WgCmUGVbAUK9wvhN9smcoZwEbCGCkHQzor941LOpfkJdM32c3EuzozmR/lHP4v/MfcO/2lSbN+Vfe0xUMN9JcU0BO32/PCOJ5C2mYgsKKqawVF2UMFgPp8fn6GzMTOtyzIhWeXcJUMXVBLpFaJq6lEI9cYltaBcMtjtgQsO/26ZZOjLdPVjhLYDxvp8YYFofLgAkjmbQhsQcDa38qBcSli22uYA0iTlg+4Pws5FB2vKDFgK3r4Bv2YpwaBwQ5wIk3TxH5JhMw9SPqUAXGpjQ9GG6hC4eGTGR/3Woh4Xwkas4DiLhdHMEQEtUuZo5e4USnZj1k6dFsu8X2cRtbX2aK7Wo7BXpvCN5YdLFAIykmyBw0YiRus7lUx6lR/mafZ1ekJal9iThy7Q0H1SdCIJqthItA4aedoB45I2UJ4NpV2YGOECTc8Iz9CcYZ8g4H62rryPso2tKbEfAxkIZ27Lno2U9jcONseDH+vSz6Y26JbBsIwyYL8KVSg/OefVfOQJVqgWcTyd3su2ZG1quF1SpdWE+eNlMKaN9b9SVQJidb1OS7TSH82J9mf/GNn92SxUnLEkdFJRRPwwGdzRgBa+V4tw7rqmVWXWJdUnyj8vgxkgJ0Xa0Y/jMB72C2aF3LveEPOJpIPQn3bMgqwBGc3CslNoSDEdqgt8n3Y+4ACfZEnZDTrOBEB+8cadmvk8Ci6xW4ek/KrOMHIaQIWyNVMyx7m7RSbIYuokoTetUAtcUpWnTMrNFLntX6FAXlBvJhPls8gi5DgKtmMC5rgECl0X4tyjhC7U9FVkogMpBH1/pEcd+l334uTDgqAGzK13yVFn0gHaXbrGWU+0Shi2K/kx7sTmXEzNjg0usmC9Kvj0nSWuqf+E4HBunQ8wIF0OW/gE9glOykYo3rfStrcYRlcfSs5FRpUap9CcIiCikzNLd4k4LOR69veGmSOds+ZFNz4ShbftUfnw8wvM27bPzeV6H8zE+pIqO1Gz8mzFcqhw6DANr8VL6Lh67tI8lAPMlmNOnI5lOpCUYXpvI/FarqxN2bHMsQdgG6/JjL1Py+D7js6M5WdrrkZ2ovqIHEQvqUlpa6XLumFpayUgXScAr+V5jFa7L4vzEitaOTIO8QR5lKyzNrATn9AsmkC0bRKP1j5YB7a9SP66YtWJL4dbDrdsL+PF57kAZooIyheTMhwOcMBayIGj+bsaNOW87s0DZlzqrslkFa2c7fPaAMtV3ncWpztjTzi97c8Odfa12wtx3UyzMicoZiUxt7DF5tD7bxkfLoyKfdCapQNk4EzvbN0FVO0JGePRaN5/dODIBVJmGhN8qHDlDBRfG2mXefC4eahBFojRskKPUpXa1ArYqHIdaHN5QO4KQ4BDzQwGVk0KmDKAMAYQsTDclQTjfyTIAHhIDWog8s5SUVLHHY0Wo4AzqwTpgyHxABhQP1QAvoNG2+BFjhDhAMxGoXRg9/1WpwEgjvJfjMPYC9gyA9cXzGD1XGtPA0AnONL9jhWI5VlnHYsGdTN2Feq5HXXWZYhQsCslwhLAVDhVU5bdUMXjFUnNjeOpGB530QdqbdDaj6UlPExmeBQkc40IPwlwkg5SKz4HH4qyc8b2nF0qyXuSn5SKVqPxWFFJfkKEqkurmKBsTI2woYiISrv3SGZL4+MU8mZvI6LjzzfBvtjuYXQ67SdRSyU8RnrHS01sKyR2fITg1knC+II82444iVk9UeGDxiTJz1XAfCh8bG0Hw9vcmMJi2MPVs1jq6LqdLPocnn06PYd19D65mB2a7LhTxN6V6eMZwKFoyQm0UY3wXijyjoifO/BlIKxK6GiFqjpVeEfAKAeR/WwkoaZH4ZzeO0SUMEtcxM5gswrFAOIIh9CVDlRaAoaHqWTZLt7g9j5pa6v2w8MfYMUMIAk3v4jSATueDk9U3MLdUH0/qjh1ywHEOLOUohk+FuS9js5qHTsIyRcsODsq7X8kovdbHWzgbBOftCoVdMkxnZN1uied4oK7Brc60QzHQuMlIeq2eazCgCDmSTcx8NGdVO+0+7T1jxQbMkWp5CNjT2PqgaQ0JfQzgeG24P7p/asg0Lp8anDZYjPJ88ddRxe7ExgNs7YI3B34Fhat+fdW2KHjB7SaW81dKXZAhRs3rOaCAlc2jJvuKnTBETKpGW67xwbbnLt09ipyNfzAYlsJ6yGQNnnHgHpvtfx2J7rAaqi/2uMc5XRptsyNFJOhgQb5VebV/SD7io2MejwNLCJRQGBgmc1vNHVAdcBtL6Du13XggvEgZ34I9veqmrgVYWg09zw2hlHuIKbSeGxIZ7Fwz6qjmsx2BiwVJ9rJiopl7cfnE6iFIUBY0dKR6WVaTxUB8QOaLbIu2GINk27++FwOtgVap0bMzCVI8KJK7eTkTBmwL0Jfeby1y1vrpfKF2UeqI0S7ocPrHO4m3kWgtu/YFGYnGIdoOjicp52CNi7P7EzZMjMmG3bjynaGg7xz4MrxKZlQAm5GJRxUlHqE9LFsNQkCByxqxGEG+j2y+aHBnyAI8qQDw4uBJrm4aCWQ33C5no5vsfgzdiYCCsoR7gLwHScxgLAmPxOTJlDSQail9rcC+0n14FIdo0qrSmoyPNBOox7Wv+zIS7qL6DNn9dz5e7Hjn3bjchqBH/sKnNy7dg/WKy40/rrTKywLwjbftwovOqUgClosgqFpHeCAOQlillefGI+/Sf6XUi2CH+ynjHFUf+8ik9q0O93ebMcdkQ9HsU7NEOQ+9xFhvzPRM9E90fvwHPhH2IiTk2BvOvH2ys/qW9z6fwTy06bwMJitnR8HXp3V4pJ2GcbDzmRWuT6J/sgHV98j4v8ATmQ2sLrhCR15j+YCfLhaJIU7YkyRrJn6ZcGF8aZ3oCXTG+IeJiIzCyjFiHOZrDkVLOoc/BiLdUUpskucvq5Fzmlv6qkS6I3HhL6vryG6XViEfsyvqsxA+Mq208JOGGbbk09+0OkFR/YvAeCpChuIC95zYVW+ExMRJLF2Ix0U2W6A2Lun5+Rnf/PMxl82gO8r/y2EyvTXpHLefzU/7wYbCuogUYtisx9L7PoDVapgg/emvB7EOXwXrI2U67GzXF/I27qKEkCF7mCDMsKGap9Rwwxh12yrR1XGlexnIlsHSPYXyOp7jokuht6TNDnijSUVgZykbs4IluMUUnWd7vQlkf3yBCqgTP30Q8cEVQ58PuubMGPjIjaDW23AR4xFs0WiAGByugzWDXx+VTxRIdm5f1B2XEmPUPD0lll6BWeN/4NGWRPZouiP1KBC+oW+a7reSgAqRL9MWWV436LOQh67IXPTTYsSHq1uljwXMkFIB1fUaX5ym0Kc1YUfOtUaCUr6gbvIBcqduJicG89qt1Lm1pzdC5Vl7TAWUAlSOdxtuIAQf5gD+BMm6MES83MeAB8Bl8z6yo1U4vd84IxJaZTXqWTv+aYN9lrBxjyklm0PwML/ulXg7Zv0WWvVwJN9WzqxagM6Kk12OTA+OYJIrXOHYtxOklzBtrqq1AoH4qvokdysJ60/+v/zAMmJGLqWuFn3wgB2G9V/Uh/m32M3XT9Qf7vwx8nZiyJ+WNqcsi8VbsotHVSENJC1DaY4XgL2U8ddj+8H2PGq9v319qaup+9XmUHbblm0paZJ82T+AsJhY4fwjpUtmTmUouTJFm/kl/il2ht9wIFCI7z6EHNX3Gia5/BQK0yRimbJujfZeUDzQusaqDMggRTo5DKIjsZDh3HqK8K5eHwCMK2ee1FdxNnbZxLjbT3/FVj5suDMPhoLGSg+PaeRqmAn6ifao66xcxTxUQG9nCAvmuFTxcL+2dNBwJ6yaBUZPMy0tePe9scNtOIRrj6RquPqJ7W5v+1U76/yQkEF7teG4cDGOj5sWbOdq4OHWlfX2kr+q8dq6T9GquFSFbZbzBBvmArbfp+gn5l6T7Ai/9bOAITxxhn8b1jTQPgdFtvLbKcIhLuIUvkt7pHNFZNLlmrI1j//4iP0TYSomqi/PZ4EIXlvLa99PTKWZ+FkhPFup80IFmpoEybwX0AEfTYho5gmbmIt40QOkxA8fJD+tVl13N4O98sgaH3eZInMJMmI5U+UJ8b0/z5Zo5gtnGpHdl9SQK1xKg5CpBISxYgbnC+02vb4D2VRICQ+rV2l56BFRWQl2jNqYZG/xAH2RYPQmp3F6sM2OO1fnwISvKa1DEhrVfH82JyhEFfAkjLuHVWFjmWba6O7EewTCA35G1Lk+QEsTUmk7hO/9IsYhVSmV9Ri+JwmhAuNVWqaq0YRe+4RoXN9iEuHs0jCWpmm6IM4EO/Mo3So5iM6uGxTDds5WLEEfa76zFyEcr6Iqx4mV9VVO+h568MkU9CXoOLE8YnhF30GY0sdKCoczpvQxCsKTgUQ6qPx8EgWNJIZbFxXizVNcVTTKbqovZFfW0FvdLmniEVM4/5/QrpYXAFbVCEEu0J0pfCGk1vK4jHal8pCM82+shClbWhRbP4ziOiGl66/I4jV3uJJEeu6IK/Df9ygqOtovnmMaSaICNfWeKMgEiKtYKJZ2WZZQZgQVYEdObRP9sEmz1UVBt48Wqv6AJYHqDIvJYk8v1OEXhvJlKo2i+ZfT71l+S4TiDJLNhydJURrLQQlwHNZMKakMwxVi24V61JyvW0p+037zm2yCCPGqJU8NK6NFAKy+enGJpLDC4DHCWAMEEBiApYIRmtgbc7cK8t0LZP10wjlQRqlZrvj+NMJMSUHMwu41YQUAVUX+H4KGj9ZLutUKP9yWk5PIlkc8nRQrOt3jrX5zi6KDcVEv32++o6D0QQwCEsn68NEum5DvwR8kvgHXTlcZdDCkBCwWRPZA5PdXnDG1Y6dT98lu+O+Z4NejVSMWhI54GOCZT7vw3EBjKXl8Q2p7w6g7SX8ZnDMrp8IzRDcQGNxGkzP14FRvxVJnDamGL0a1sEIFsdieRLPQU++q7RwICGpdvYG/fEDWDmeCbCSJGjmmtis6Ma409c+kJGwiCKOLsL12hOX6b3EaU9Z6C32lk8GdFj2YjQuJVKrk3Uam+HDBVous5xZJYhciFGWG/R10+oxfEHerfWDLGFXg2TfPQl9DhYbzpvnyjl4nWxiBMpipIyJackA5h8VPqkiuEJZf0woD/qeFnJ7k6DGDJAhcNwIsy2SSiDOsrHJya8HOZJIYVFNpY15i4yiNMxvqLnFE1ppEEJPAoFfhPnTpmS15GYqqf4Yq47WHhRB3Yi+wfpBTCexINpsDWc9Vwj4E4VN1y3UVz7s9cvrWfSVepMo+hgj/UDHVLTw1qPcE+OUU+1IvUWMNl5bZUE2xGtyLl8ZWxE9hQC8ssihqH0uwUFC7/vTzqBkbfjx6fYrpdfn14cfj3SnnpubC3bNQXsJeot4YUO9urxJdrfQ/CrMaA8Zd+e97v8W6y/DRQlY4FOh3OHumblV29Hm+IZ7pZV7GeXh6fO10N0kIh9e95w/E/9kYKQKRHlCPNvqaBXFTJ3c4TcVyh2EjwTHxmABGNDfkEjrU9lpSUHUYiJP2Nt6fNKvG3X7ppsODhgcQfRW1TmQigS0EgYb+iIG6z/NPL4COclYWIDVRXDFEWpgaYECwggrpC2KgnAdaslISl5KLZa+vdp73X+OV7OFqM+pjueu9XG7fIyh3/XSPidzk1L3r44R6NK7wcJ+XJdmYfr1kvLLQSdNC8XvK79vgAU40yCLy1IFyY9v4qgETv0qlP61A6vIs5yY1ahNFp2wfDFwAlLxntFWt6qCD+RRnNO/fGHnSN32HfVSr4o1Z1dTID4oz+7r5XpgOUYB2T4oWHFUxfZYxc11uRCORyixMI7vKR/UyTM0AIglNvYAzQKb+HQW76Z2yYPnMd4kCowCuxjpQHcfpnmL52IAx95ytVEv5//LlV9OjYMtvXmFOOCmBFisc9xRdAulCODb8T0/z3JgqnnqtHwAaU/7bD0eKoBuQzei1OyXfB81j+4wOi/egyoHoRunYwD6A3jnVaFBOfo0Ds3yph7JwHVP9/bwku0xxwqsXZgRWNogv6r5vKOdS916kmgc6LDQ+mBYuTKuQxAwyHtQz6SAGTtwIk2Qc/tz+qBUxI9Jr/taZPYR4yxNmXGy6YXU2XLh5+68Uw7o0rhKjxfD4V1ROLxL2lC+MbRTCXZ1dEoLiSzllw+ghs2HBSVthh8hNXeCc+3ZEnvuTrtPf5ufwdR+AXnzq3UeOyy03jhcHKsmzWGiP2rONY0VgUNaVEvG/N0bhIvv1bgPiKVQO3Ls0usuYCOtB1WUSsAchHQQTk2I7UoYsuGploBQeKIWmhXG1WJFMc24fONjOn85KxjFlLh80dgtBhv0QiK56iDnJyCdnlcSYGb6UWJImqbQWuGO1W2Z4XZSAkLRtd83wZvfpKYBGUJ3AGJ7spEbwPO2sFnjMqlUhHp9FZMPic7lgJ72/sWbOATLXUb8wVWYJw4XZV5M1DbskjvUdu+qIluO/qdsk+TrbF16zc69gWWf6/hABsERZndhgw6eACxIGTycQS7a9Ew5jOAHGHzQYcuWj+8u9/cjMfqhf46hisR2xqoeLO1CZV1VY+LDSaLojJc5yXwVbvMYMcA8CIscca+CYTmvvXyFvrTX6u7iLjD5VUClfgq8Al8ubHV3ceePWyhiIW2UquAPImGK22ZmHbe7h/iWMHo46hLC2JrXh9kDCH5BRBwS74y8tycMd+zvCVMci16R3kKfF96zzx+9vAIcJiVCPKBCDr7Uc3eDqwHkxgagAz33NAC6hgyCvmjuwJAV8ztii3O5AYZfX/JZoisZ/qF4td8ub+R2zI0kbdIS1GvejepoScGs7V5P1RD1ZJU0JERoi/nrweld1YfaAP8IF/Up3y/v5eGbt9Se/PHuTYOPnthgU5xd46ejr1PYWrLO4VSelbBjVeQxB5vyh9zn8FKO5Gi+0OhDyeSbC3fdsFGPo+ywqW3Ww4kDv3VCom3Y18plV11sZsu0dPuGswyoDQF4nKFm0Cy53tv2+ndXcb/JZ9CINPy04x+uyeGuB+2lVP8OJFsg8h4FRKvYHYHl0hpYD0VFegsd3nYNL7Ulzrc5m8kPrkhVTUE5C/8yQXTuZWBICE6Fbp8g6r4iR0yuB6K9zr5vrwReYOoCaVLWTp86KG4aWOFEdo7hO93sCIfJla7vrIC8wBQRrd5mwFag47us79GwAgrPfTwdmMNFeUfQeH5So1Vgk0M5DAsGoSk0FLhsJ/XF0lcX7447xSN5+Pn00s4PBD/Sl2pbFznqL0Y166wybWbKy1+s7zs1I6+oRvTf0tBxpWZzkn4cGLNezhTnGLJnJ2iogZ1qHA7e3uTf2sMlWwfHh784XJRXsu/jMfEx7tx7ViCeU3GzrjL0AFazslaqRo/Qatkb8IHiPfHu47Ad3wiqvI494lke8TAH0lWkfC9ytdV6PfpnVJJ6ktD9JLsH845XQGX24sUmXyj6gSFc9kwikQ6V+vhfr949YvKgdEKCZZTWAzIjLGZNToY3lnTZJWzmV32SYlP82haTbsU5xSZF1nac+RCmvTwP3qDb6hGOOQrFaQ7cBmFm7FDnGFl2ACmLX0j6QSfWD47WsG0KQubHAt9JvrsJKDag+gPRsQpFYq4QucRAA6mP95Sf9RfTqXA7VrSeBg/cfzEfd/weIl45yeqmVjNVUAY+ENiUyhpbEppm9YbVF6ljKQkSbKOUfdxPCqR0vwG5amMMN9XscvyKb3LRSxE8VN+kjmH62/s/GplOfxCVmpRhFDemyqTuJtkvmhDZmr2QjIV8W8sX/Ci1Jelsr6j9RX6JEihAxROfuG9zm7jgY0YkajA8ANj48JkdZ4QQ/EV//JcdmlsgWCF0fHFU1eHuGSGTw8fxzubYySuRo637fJmpId6imVh4Dul0Xxkw+XRWo5FNLzpbw7TipeuS/iV/iVqzcUJrKcVNHK10tufaJ9do5m5+RvRWfUR0fok5Hha50OBURRedWObHT6qw1BjqnJQIlYu5MhvFQeAY23jMIx4HSzzmgOOgxjWr3ilj8ODrS9D7g6HxgnvJ2hGBteRTbH/7sVYpKnx1EcA+DmwJfe8zzyvlPI8fOLhMvM7fykrCAXXCATmd5cr5zymxK9t3zm0T2LopDGkPI71130tCDoAe018dbCUzpV8m290WI67TwnrfpaBGFUwwFAkyT7H3xG7WEQobVs/lMsbMzz3aoukkFOgemQIVKTqGGOba7EF6fjEHwQoTOU6PvYNc4vxw6lLcdweccmHD/EKxIiPKj8J06UwybFTQ1ltvqx2CqMj06uxuW82a8ViKUfJB31csKMOCq2SjDJ/Z5EHsLs+2bN+k5+pMvn7FedIwOAYoJzXV+/7U/NSwlchc1RiNREtHNOOF3D8uyk+wVKTpvM36vOrq0PUlv/SRmbcy5KIY3/drDL5JUJWvn33LVXbL40mFjIwivr2FaKHDlZFY1apOb+GIMfjmt7tZCoiOCjufSx9uZU/zIbDfe/LO6lLu9d0judEFDsooN2jb0437G6WHd0tCy1hwvnMStPzeWtaHxSCIvgjT40S3/BML47tivCg3anAOFE5WakeID9iCgrGBBlTksuMSm6LTp4icidpU4ZBpnhqYrVzIsLUzua0lBUzzExgDImsy0qKF2oiUuw6MbcOwWnKb+tZh/uKWjqga6EJv59C1DcO04Dauf2MK+lscYbwn1FTqyqDbMAiUqtBChYe7hT2iLwmt3s5hAKwk5OWOy+hvQV1F9/SW8Kejk9+MxQTorcuH3gXI1lmFZJx8Ac4X0u6F6QMhXqnEQekVviAWK3wBaykqAEEdw1SuugAdYuCEHJRqYxbVZPNUE9g8IRekR8z0mlySHqmTSOOwt21ex8D38HBgvH5l84zv2aLnhNY7st55Ch10borHIJZOuuYg1gTnQCPUsUlMQq004Qu2owdInYCvrtnh2GvUJ6zZeDJV9igdXCVh3Bp5A9QbaL1Gnutdgh0VY7S4G1B7EjNyycpOdGqGmbbNPeGVsmxcS8kq1q6BxWukRwBTFiWg+hjgyjX+mB4BTOmTHBummeG6JBWKaMQJHP9xdJQtzLPSMIK2eoFRsxKAH4N+eyT5skyuIMt8AQdbXOcgrA9xugiqLyi8VMlH3ItsZa0rArKdLHi7lEO0g5cq6x7cdiIx+ComcliJA3E4iSzreVhxFtloGDYchPqFVJ3UbXlH8vV3zIJujcFiX7Otw5RWJMMTh9f4+CVbuVWHxIye1lqoqR6muCK0bglwMPhJW03aB6XRNC9Caj961DJt2syzZbIj+RP9+yTX2jsneeA1B7r/UFFd0Nq4qMOiP2QF+t/b+VJWyoZRZV0d8OfiCI/bEMgcgIZAx7G81nq3kt/V53NoO8BhdwVEqLbL92pyforF3ahaX5bh3pv2dFgf25ypJ0dWQKMsM0sfCLq/U13ER21xsdBcLzhtPaBs9P+QNJjfscNTJ8gDo2qQwzbUbLhmwza+cjXQCUlrGIsVII60OtOmbsq1YXrxBFJrotDiJbDJMKBivZFTXHHN+YeL2HSzffjnMccpHJT4whVizD9hIbwagSPzxT4Nyn/IHUMSUQ/sCoo0ieaMNcOH0ulIm5f7eBTgFoG5C3PMgIw7hhy5dkL1n7uBgyRkcW2sBBfcx2z4UeJE/Za+zhz3EiRIrLkID+4hTSHSQYFuHVyDYg3HOjCNjNOI4wzhPdijRkGtFNkoPWcLgqUANyM2OA2Pbjt5co05nA0ATReWW1IC085Dj6+L7i9xzxeUP1yVbhKQhBAn6bOFuHmOXe8cKev+jDY9Bo7byXfHiKwdhC1QXoQ6LqiFjV87Ic/3CljDWoEteGuzPC/6AmbIbQ7KK7ynejfyTokUJjeVKNAL6Uy14lXQKJop7tYdySAu7wML0EdWA7fzGP5mic5TNFTjmrsAGTaOVadL74fdFB1TCUh2y/To5BTJQzuWTvTdFKhJtmCZVhBlpUOjQGs1fZCw4IWBGhmlvKWsUL7yD5wkp9h/clGdYN592+M97VoiZ+H1YOE62Vy7ZEhFM4BJrZjDqjgje29swXPd2VDlejd3CUeCpmNdi8wQNVNcFxjD64ofaTzZVPRh82yyBi53cS+4NLJq7OGpU4ZUixVBzIzAj7VsS+b5cZOn98ftPC71c+Kx9pUqzp/3OMaain4tFxcv+/33qM19LPkMfv/OTBDDO/uDAH9ARZpeJKwReUBxwPYXx3ofbR5NGkAFt976AKs9Wbiy9uRSMnjyEbK2Zynapfke4GVV5RcFsh0Odg8qLv2xXV385xV9Qefhu8DcTnEXmimI1o4ZPvvydergaWdWcW1tzpUeRMlCv01dCEmDiYaxj1tQvYKJCok6IdBctLa5XL10+A+gQr5/OO2KTgvHJ+F3w/JL9Qu0a1njElxJVXgzK1orXSes0rhakFHP8oK2C261nDsTiALuCLo4avykuBkMx4QzpGlgtIjzCFMXhWxI1PBhT/KcaT5LwFz9YqTK9tbnuB2U1FaY/nJ1dg0UThFmfJLUkG3SyxVoUAjrL5RmA4zElppDiDV9Q2Co0OSM6K23ffGYIfhaEGrZa+iTY9KN/xQYGvUq1jKdX7eoblJtBTP2KKFp0o6d2cNJd5fzsvcQdjQV9/GLZ4zCdwuPyaoU32LBWTQhTRZ8+iuGoAzKhVM1tw2MoD5zf4x5ql0E3J6aULhC8NQ/GZooz4R6fA5PpcfsrxByGKc2nVMXUwHUmAvhs0kr7kGU6QT2lRP2r8JNI/pAMJsDw81XNJqQOZRI0V4H5Fjcc4zLTVZtytMfF6bChVg3kILIyJakQr06XrdwYqyfpFBrvTHrsAIDh8ELs6mZTvNNFfxRAvnz+HDqRucTB6YyylRLVYgFDjOt0NMIllIi5UyEEIWP5xW/j7RiH+qZjFNEWvoCiyA2w9lIseiMzisyObBH2ppURL9auW0hmmYFgzinZdiGeNjT4BkmMkywLE0tv0Qu96KQPVqZU7Giir3K8iaVejG/CpZOkGIYNs8hoy4aRT9+c0TDQvmQLzPjMTcy9PtAywWPRCX9lcML3J5uBll6JzvXzZpW+ARXnmFvMg5JLVBqFx+ksEOCS3rEKaWdGUzYc7lzYnqpzb4wD+bsLZPCiMEi9ey1VgfZ7twhZt/aje2NNiRSiWyjy4QBFWktrYr85JFwdPyY4oEWliUDDEknpVn7iAPOAs7+sWUlW3Eu5R+5CirwejT6kiO3cXCGn3agkTHzc1SP25yEp0ZPCJbuDLcFaHE1kzgVLeFDK0AmaSlEsLBHGHEYLOnqYrGd6/B2A5jvkz9GvcmcMOlY5q+bT6YcNj0OBwKrQfB1fHzb/j8RseMumdWe/dsdihuynyzeLJBSAPwMj73b6g3W+uRP6IeXUGAThGvUKWPV9dek/Stzg9jBpoOUu3NR61T4VU09HOCVyPQKwhatlIjGibdAG64yeLdAvNv7KkGzlugUFEelerd5VkX6LzKHEb7WKbykFMLz4v9LAkchdMQkVrQgChs6I4QAJqa3mZGC7CgazReEMF8dKlT601GcMB3ElEKyjJ40Xlf2F46IzW4qiBjTRbPjKIbCaqk9kAxasHslTKnhRVsbwFcgbk0iINOhoVwjlkbEUV6R0DLimAkOEitBcAtMEopViSEXGldzHuf7K4zSYLM3TGJVuIBILtiiOOH9sIZPVx4DWxqqwm3tZ9lOgWJ43fVWnpN//s4mn+wWbD9vHJiQebYDCpSY4Wyaz7js+GRCkE9yWg0EaxxBym+lo1WPRDHv1b943jn0JCMcNeZMdQdtKkEpK8NiZ7yqRKcLlvNbzlCTD++/2bhbwainlm9jHBYT/7oARrT4oHxckgA9hTYKTCYX3L9Vadg1t8LfV6N19vsKDodSgZ8+if579G12SwnMij0CqIjtZQcMKbUSipj7aPYv47+zPf+pNtErza0vs8Z/LQA0gbz7Y0VuJXdrWqrR/7JOb/GW1EfH8vC9bKpZ1Z+MDv9pZ/BniKZviEWxFi7oRvXj6mVHAHmCk6wy9mXasMKKxSVNo6kF87c5VKuBHpby6oBC7iP74aEPjte4fJaqbe2BFhhj7Fs0vL9/FrVX3t0NuHW4fyz73UiiMeWnmqsfy3S+weHtGSX9Ahwx3hPo3obYHtNujr4iMNtOCTRkYXHOvDaDjnPgBgoKEIfnmU6laDHJA91VF1/LHmRQFoIF+z+xu+BwfRjz0eCzHJ2Yq2a+9MlQE9/GWlvH2Pr21+6inbtCMySmwmL+T3Z0GjX9ojoBque9MaEvlUJ7zI0r9PLJMiW5EkuqOLlJGBthHY3YbSL/ZE4T1GhnzLhwA37aPonY4Ek9g7cc8nxTIId+eYUArHKwbZs40512ve4v+btfh6xrqj9tmPTUCLXap/EVVv3O30Z/xHW7dQOsSr72rFVO3EvHqXNtf+M/6TjXqXDFn7ziXreZmtb1LhTH3EM0pt/5W+KFC/zW1OGwb0z28Ik6vONc3UoVWPCBUs+n0s0ZHvS2+x2MN3/I7ffjHYbyx9Ll6IseAir+tpPDm+zWZ8JvUXPmTk1egQLl58RW/pB00e5dMEVH4RhYvp0tKbUDrPcSGqsKk39aW/hEpfytKQVGmGkP9tfqhs/uJ39ZFyhmkED161KVXhT5qbEh3cbV8QTcYl+CT1NcZwhq68Oz3fDF0Yc7kmKcwlq9eSXnWha4v12YXy1jzU6QqZzZbTESuFWYrZCww2Klx2+r34yjowqskqTv8K2DyNYtNTaszvP1ebTgx2h+RSaXvz21xDKv+1OTptqS6OfoezVb12oiDc3FTIACpfjTC9eqKX7kyFYm8eqi1WFl+44ZmQPTU2/zdnYQRQcY1Nn7siFNlUmM3qVlbnRDnbB334QvZdem8y5rIPWoav/L3C8ckxHBafJYBR7vLNJvzov+rhyMV0e81h/8jWe+kQe+kT6wc/DxmQm9lkSZ5ZfLN+9eBDacOtCHktpvsAHvMdXxc93Vl/WjRtRfZeN5hAOW39dOkjdJ4Rt86u8hT/UsScuHa4/jsxJiqODB6ef+mk9qB5ZwtDp+ODBtKhoLYB+KvA2UaMMcpRVzeQeyR8Zcwm8vK88VD7m+4xhpzcf3iFw6NFntNP0KaT+I1PUsHDTomU14ep7aSTz4JAjtvvPjWYgR3Qw6Hrm4knXGl0W8STZn4fOdP3Aap4HgdqLt9l2+8Mt+U52Yy9NIhIoWpWk02ySyq61XXWtwqOqo9rXqavKbrnV/OnUs9tAwpM8+DfHf29GWSdWOzwk+VV1n7Z+q+Q/mzTcy4WYBG9qJ6ex+czepnguyWvy1fhCr1bQpXH2fA29+Dwqc+CBv7Ee+Z/9a323nszyzPtHp38h0hMHB2ETgew0Pxg/5Mp74xWD+HYQY+3uF4LbLPyo4/b0DZ6ez+Iexu6NNzQQPn34ArI9cJGmTulBOSVub8gqfveI1v39ztNk4C2L0UdwUvh5/hX18T5aL3tdHTa2k88+9z+rk7UvMLnzw/2oXmImFbRRXU76hgmnzm1j+FIZvb5tBn56QPtmhnPko/Qi/GrMw6q6nVXza8+eXGuz95pwpwyW/5sf5nMO/GsOH7FmvGM7MzWTvcpRXAu0fkPcLewAk8e9LEgCghee6Q7Polmt2t6Aux8sa5WJfYq+tcYEE8nx3n1B2FQP6Rcr5VSq79dEHSMfMyvea3S/AyGdo5/xR8XrveL3/D17Xjqv79TaGK221mAGma0wDK93imAuMgeBgDdIXaGAFvCIw99BEgpDHdP7+P0gKDAdsg5UPY4hCls1/6qCXeN6uirbMQPlRAE61plrjHqhfMDgCnw7sMYEvR8XfyXCfq/8vnTEDNrXYtIvgwdmhE1cbFW2EhYGRDZsRJle+HhWWEekUsbUWLZhQA+4NeQU22MSSTfzOgzzJ2nVMXJA/bPm6AsErgjIcz4jCcPNxCahhBkpk1sGLhrciwioGZxEMGUAiZSatgvPLBq6WVAoYKwPsVBkGchByOgq2I2FMZOrJdiCoECxhUwbQAhKccglD6fRIGLOzGaB+gjFhA8ONSQXksSDLFYAANyZlIY091uEn0pYYwGZgsiOfcySzV8KX6sL4C9tWgDjilJpqfxDjHywn4nHClITewSfE+IKFEY8rvGel9ywviLHHIiM8Mc4ItS6PiPEvehCeFL9D6ZD4HhbfQVb+zqEQ4xVqI56OOGeljwgMiwn1kciK3wiph0c2sMYx9jUhD7hkpcLLDBYLqoqQF/yFUGnyhRjvUAkhb/hMQnt1HjF+xD4k8i3+QKgC/yPGBfYB0Qt+QajasGejYB832Cuhr1FbfICBXsBnxPgN+1HQj5xd6dUHB+MFvRJe44hlSLzWI5Yr4rUbsQzoXo0QIff718SfM/r0MqI/vfzIcfedy9/YfNyxuT3M1b09f319wq9RjsnXOLR88XKDg9IxlwkHpoe0Gflzw+9eveBPpVXadPgDLb36jd+ZM68esavoLm1qnA785tUGp0RBrhJOSgGKJ4wr/qYuw7iwuV7nrIvbLizv0yaLIEWXaygojhQOET1OswIiSqYZRSHH1WETcExzWKDIQm0yUETCdYwjZUeD3UKhHj9MO7papC0UnQYUwLEdGxhB28nQmUBGjQ6k3Zp7LaCoR9QnCqSa35n3hOuelmbU9N3eoY7mYp1QYT3sfSPIKRghZ5TUTcjpTq/g6LEtjgLlZr1AHIcdO2zCM+wWOojVTh2CoB7RPJFHjQ5hC1V1U6xrFzmQQK/g3sImiQ5Bi+LH1E4oimAHRUOcxqSEgEWCEoGZIkiFHRzFOoENZMnHdN5CoZ5WYJAW9GNRHMlEWCQoKsGJCLUDVmcdVrAUitrQXDonrJoG6eOdx+OYwiaQgc1BFHIFhyIG1PfJkNOKzBT+pFg1aqHGEiKMUPTnE+DZcm7giyMh5WY7QoURDe1BsskMLiSTNxlIEtd2xKpTol/YRXMEWeh/kmYJ7SCh8AXs/arogMYMiuzI8abd7xw5BAERnuQKnhSM0CRozBD84mhwe18ACtTNDVDKCG/biOHMRUbgRXtiol+LJKjv4CRvkbQVCdcxcExHgfoLRKj9kRV1S4ddGY5wfBakkH0bbhtBT7PsKCYWVxBys6aSRy6sQSGLfF7OkzrnIIeVYoFqx7sUJX2xWcJhcjHNg3S4Kh5PpR9gOiIvDmzckbqjC+Ime105u8Ol6kNDK4Hsz+ZMJt5xwgJlqoW6EztiHNezE9Z2Q+j9W/aO3swQ/yTuv3CgM+p3/za9Tx+n2OuSi/IM/CTdLMchRSNb3RfskhJnLRNIX+8Z7ydCy/LijwHYz7YUEC18vCKGQ0TKE6r6Z0C50PcNUryIHQ868NAxTUJhu+jVni8HG3kG9lDlWVkAx9eOnQN3ry87GqDkkfpl3DZahCMKVg1XmKCQYrE4rEcjPEjkNrVIz1ZHN093b5TijdyGZ5y3Fbjus8oheJ0UhnyWQyjg7Q+4dAVFy50hgdsJGX8tE1noIIAiUvxyuk0aXw9HfdqnMQfJBvJLrsoH7Y6jx3eLzIoSWEj/WKCp7tyBDxKKdshiLNKKk1HQB7B+3gOKpsY/4EQQOQhKwtPb2VDSJti9v4qwQM4oRsQcCpmFTYi10GytkPzLfa17JLBqHJiJk0GqxXWf3mlBP3ihrrqhm5L8SL9A+3CSOYieeBFHR2J1PFqRg+CDnzIKguARgoNaEw82PlFUf53F4zQhcSHAj04N7D8KQUJ3BWsNefA9FHAkMEOPDty7GVCUPxYzpw5QxN8U82sfC2CBQiQQlo/QRFU9qEolYLUJ2gCfUdDO9V8AfAOcpdmkEe3O45hUmLQWcG+TRorKedCnsaGuklmkAGTpwGBBS5qMKXntgAYKdSQTlTMvk7azC7SFahCyR0fLUW1ENgEzZ/Q+wcwZnRXnnNZKZHPgyp/Yc1Y7pOxnwhu+xnt4+t1IKzpbZEeNOE5jQZ+T6c0UXuwpUg7aGBHJsrjZMUo2F6TTAOx5HG1Vi5QYDmaW3odIP3pynCadZ4fIX22noEcHXRIAP2cwZ0V99RrFfZhcHAXKBWAHFAD4UQavR9JS/0WSwhw6YG0CUCUGBVoocAFEzAF7qAiGnQBGtjSnfM5oE/6AiDXT+hRgRQksL9ScDmwesL/2oEgWU97cH/1nLw6RqiymSfVsWdH6SvNTynHRBkrtBtykW9U8MI90b0aNVV+RaX+yCFYHcYbFoh3R9ED0Gvd7243aq5o7n1+djKoKrs00kSCRkxBBb6wL+0gnF/GeZtFa+OFfR4nBysKCMjAngYHjM3Mk8KGSGREo6HwYhJppUBBFmzfigmded4Us8XDUMG4CFOVsEEd3EOzI5DhBId2hmif9h3Q1BhR1rPq6KQHP9PZj2hGu04DmAewcNEbqCbDiUiIDt6OdOd4ImuVhE6JPCQFxLcARv9EHuLBBpaWJ3hkyFJjrw4TR1VKNZ3t3xOlHDQN+OHtiuFRTt2kqIb0yEuWC6TZ0oIMEspETfA4Soilww3FGLBvbQQgEIZ72xaizVeTRcBUKYcCX8C7E1nFQrkSmIfC7klThPJ4vKcZnUyhE6sNRY7uRuef5Lml/Oe55ZSTS0YIZC5qZi5/u8euNeOvp3oYuSN192sVe+4thereYGRIzdmB14C3UxOmI4SghzglaDVwmXSyomWaKprg9gtDqci+x3t7uZtCAExzredfpNhrEDw15tNvnMA2GwUBjew+L1V1YIUPKia8qG+MU6aLQH8xaB4u4t4vTQouQ9gZ+QGZ/cQhYm/gajsKAvd9/Kn0BLcVz4h/nRO198sKPVxYawBQufhoxaU4v0t8dScBy7EAndjOCdZ8Wh35orOLodt82A+L122YAHoBpMQ0uXAGdhm6JZZLsc0RU1DhAHLxDFRN2wfRMUiLe8W4/4bRYl8kyOdnPhAWKQt3t7QTNU6TjBQRGPdHRkzjWggRJB7l2cB5WEGnz2hBxhIU+8aDC+ELecuwggVqp7uyQz55xBwn4v5cOf7kaXi6mdJFmptL00CJ/7WB1yDi6YYiuV6BNcxxR1VsbxmVEe217gUxUJlSeY6IyWc08G7wkkVYDjP3v4hJMcaBmJs5GHnBnCmxk9JEJsqeCT06GGKtuLcYAG1BbN3Yesp2qSgYYIz+hRm3j4aTvsDKxAQSH4rELQLaYZSfEfvbyjE4VFt7PGRQ4pMaq13BVX7vnTzDp0zwEBakAQTpCKLZK2UV+D2a93oaDmZo97DIwCUeTLqOhBp+imkOqCVuGk/ehf9Rq55ucKHBK6lEgdpbuMDJcVbCpoXBUUQYwmvewRU+iquxu0Vou1wruk+eizAagtKCtdmw4cTQ99b2+849bc1T13/XrmIrPFxTwQZuc+FQ5uns4b999+4U70WgIBc/XdNK9wBouzahJd6pwbKdJrrTNtgcNHvRjVurcJsRE9zaOxz+wreI4Jwlhr0EjEKesHfszb23kUgHT4hpixYqSFoGcINatYAgxU0DAuTWUHNG/G5pdpNku0S6crHipILybRuqKXU4DLPZMR1M00424Hga1aXjOheMnm6615nxwEIxF2HJjKehp8V/1C2/0Z6slMe3azPhUg+somjyy1V8hkM4XlZvhmI8TDCp8wQjeBGTncXFe6Sy5uFkcHh5KsHRU5kkNAdp+2notVCETsEp0gL2uy0jhIrLtE7fXAPZWCsWtJFic28uJ2/nLxTS24OHCKFvEtlVcFD7q+Gz/chKgxrXDhWDE5hFvpebIM0AWDj2WlT0E7SW2igMtSXIawM2FuKDyY47MTy2gsk8CTdbu7yAyWfqCF6ttSyZVvBIo+FXRNdXMiLTHEp6doFb2pxpdwGEoyldBr4gF0kPaopQ48WLRDbFAvumKUWJ/qqnXPPYR6fzctsRdr4h0fHH30sdw6mwcIlIx0Q2KyFwZQvaf/taM9DV07qJ65oqB9jUJc6GBIc82xvETQzMrNNI5qumHZISIyPm3ifdTAQ60dTLLedHqq8kyQVqSWjf3pxQPl7LZcFZak4Jch6jhIhYy+cZFtJ240B6OvvuXirNH4AJ8kDfcqBodasWRUIhsdCDHrnmA6AxzrYkrw+kdCT38Tkb12LVr+88pPosDavhWR96iCOdU4ac4PZXPTiiarqcHxQ4ijdROEYC1WjrDOnFHTAkH0mDZmZ84amXGrCOGMUeVEs9CFhGqs4J5GfG9HCCwaLS5zi7yjRa6qm+Ua5pUFxqA2IQ97xwqYLU8QONYIUfyXXMgxrebzakJasF/85f0oeBm0aIdBIqSXHIiLfXHPt0J3GU7phyXEQUnOM0RMw5FXDTUsAU9qkkCh+h4IWqQDTsXKpXSvQkLOBvO4xywgFJfayS0DfNAHz0tjq3sap7DsXl/A/J412tj8kD3bSw+Vm4zBjHINkoEsJFQZ7I9cX7YzSxcW8iWYYNv37LI1BAEQTsI7JTI8oVDdSCbDxYLZt4o5faTxcpR6MI3k+/21P3WWLGnqMuoRBQThliQh0uFu2FOsBqaylFcTEUuQFAnMOdZ+e57DAVcgANUXwhjHVVkhvicMJIwMOjDNpL6W2xndnMHyRH84vmFrNrf3kUS/vlcn9JA0aHamcP4DXkrxe2EQ6T/CUmTdH1rEMeVObr0bErCkxoKsOL55/Wo1H6b0yYZG7A6C2jMngwHh9CKMCCIjDXDGNM6TCxFXf5f7sqQgAAHfOyM5aE6glHQOGlBjQ095q3p42Kz7lbI993emrEP5rpAQ6oepzIUP0eJGWesB5KgRhTFIjeA2ykq+luboI1G4xsg5yfIyF2y3j9agT6/+UnJnranwIz0zfZogA0tpTNExZhEd+ct6fp/BKMNwTYdX0xrSn7hNdbOzc2REyajm37mIhyzDg3C9VePkOvdCQSyziEh9aI/2akF09aiiYgGaodM62TUpoRBteHyXlig/cOU6p7TuyUjXygIqWE741mGCJUIu6ADuAdSx4D96gTQCLQ8GMfxz1YO9NkinMbQeIto67rYosxRnfO6HDK3SYqDb8HshGdqREDHkcAQaAQK61pHTICwblJQQJksHgBHucf+wOY7gO1mRscBaLv9oxMDW+2nCxecdYsK9V9lpJ7CSw/jZciQMgtcjRsbGOnABZmUx2CIaXdWSQen4BKs+77g6Jf8IVNZRACK4t7iWh7iSuCgZIiflQoiXUMNdwAZhHqwQMlGnp7PYkhrPXmEQD3SWLfBy+wfz7p2JEc6WhDF/oFiH0iScGIpFtNAqU/u2jQItBHADTCyLnFkVsYujiV+C0bvjdoyQwshKRITcA6OLiTjhJnYoE2RmCaCwEdYbbDzzf0R5gs+2IELD8w3g5n8/+ebMGzD+IYATzjFqrJxbQDH6eB1Km09JQ/zUJo4tGotGwMVioZnKSC2NihWpbYop2yaIRIrXbBAuPdAWz+BKEfEkwLPmBe77j2ourc8JKYGrRA6jHuwM9QskU1RZsiopEhzFogUEp39q8hWN0hQayn1KY34ciiuG2XIbRQk31USJrw7r022IYTUoEmud2fEzbMVZ4D9DB5AzcA20Lb9PCjgjcmaJiarPfD74TNWYwt+H8M4dEEHxrM0ZihBxJMCWcq0E3u1mBZNGlMXtvL9m2aXDBQRqXqcZTtFW8yXP/hn2MRJ36rErjQ2ApYTE4S1zqZILXTaTCakl7uvzZcr0Wso6qDbR+LMAYVYBGWOz83JIELJeh0kmiTCg5C20Hg1B3aWFONEm6tEkfMkCmWY3LpbKc5lcgcqlFzvXDQgW2vHMjgFFkvC21AVg+EcGLQFwlequ0i5hts8uxfiM5W8OMTTfIELXhEdqTCtLOrnAKsbwXqYSp4fgmHnbmfF24pdri9VtoBKCZ18x3kll+utJS83OrzliQL2mskjdnQzYIpvABEUThQKmoTxqf53BJz7Ngpqw/721EwA+/MIrS/AhASqXrA0vhMfg7Cwft98TSarcacDUt807qxywySMLC2psiOSxRK5Urr/ECTaf0dlP1qk8oBR8TIeHeAwCyxdiCdxmiZhBRaEi7xDOO/KdxvYfnU2ESWjJwME8kvtY1ai3+vFSuLrCySAyCS+UOwE47aHCFhU7iJzD2dYitfc3QQFv1ld3/rIXvHtTQSsBJvUU4xM03rUJHOeI7RMixQqZP398jwlUC9RDCOVn0s6kpYtVfNLht3mLhnhoF48qxT+VY9Gxk4eJq++0ouys4ydbNdxoEwcabtfIbKkVPT3Vv1471TunnN3saoxzCCpfNPze545BaPGEpR7IVFqa4o9Q/nb1cAh7yENPoHKVydiEAT4gz+DVrOMCL1pPrtfHC+foAf38METgjj5ISZvmo/u/zcrNJ+SmH1u/nax9Gp2JObTzLvKHcUtoiUmamdquXo8LyE2SQqD2jbapD/NVFUid3Vm0fHX/Ad/KpnbIqper8WaV1Xe4jMZ6HdQRai7LQfGp3nhAkeNt70voiDGkVY12eKo6pp0UWtbbGei48LNy5RoHv1/kVKM2+NccwcoiNZ8+1HHfLuuI/kg/lAH9EWlco3w1xt+F964KiRp/HduyoC96UuTNgiIPvnrx+KBYE6CD0Ju1FgKrUcJsHeLtySWsL/IE5+vOscOTmZVwKXZndb9c62ktnpEYpHVpOPRW1os6q7dhHvBl70y3LqKP9HqOBOnYDn2ti5D/erBfa/6+K4htbpceH42fF9W+I75U09ilbMhKF5Kq3x0wEWED+Ubv7j5Md0py2tChJqHhaugu6vyxAQTYif82VI81d4vkxT8zutc8LIeJ4UpJmp9KWhjYiJ86kLrUUBJTtSiWQYfCH0KdNROkH9I05XAR4mTB8Zd61d6H0GKxmbzH0Swm/am+Xv1pUH78y/7ASM+Epmm+TPWCx+FdSpVqUlfUk0j8FLPMKOdMP1LnUvDag/jE58WQ9v3CNFEK+x/SbuCd85/YHBf+gJpIBAToeMoGF0YZWEFkwEopqZrnvJ2n+7r+v+2+Di+QqVUqgkYTyqjtQdpLpB9WUwN21OMSAM5rl23lrhjAdOsl1ouYKBWUNUWpq4N7hKGf7y+Ec1wiV/GkKBqxyZg81BXkWWUORXvevd34cx/P+P1njwDq8dP+3xNYId07NLvGIzb92ZSBMWxDnBISuK/pOM6COynwg67TdHcPZaNz7ticNui2W7RLehWZvnYy3FrxuBhF5cLPtyEcG3a4O8uGsLOuPDBaPDvGnbKWfcb+3Stqn1fqLiZmkjru/GNCyzVe+lu6f6+hXQtFqxcTm+hKPJFTf0fDSdGodjQAfWI69e/zE9PUeEYpg4dRHGqrOpO0BBeT2cbxMHHcJTrMTKwx96a4qSa/5i+8j4oQneXdBkn8iTSzZHG19LNWh8tNl1C2gKt9S6ILR4paYxoW8DhP5/kkhE1gaoZWHh+LdB5t7MYbAnAsf6R/kER5dMS6ellGtmQtAUU8fy+01F1cTC63D/udkOkjP/DP4E+ciuwOtqC3Aa2Ru78vG+kc8yf8Hf/8EGdUhD9z7dQc0I2RPKgxKMsoV7YJLnxmBPPiIjKVyuI6djOFtLwnWmhz01+3099oZSSBxzbf+uk0rkZUJLrBjyoa6Nei9ea4nFe3D7DzUUU87W12WFklYwSfanV5frihQqP6XFpDA9OJ5L/cIjpZcSnNXxpWEAzrn5H2ZnZP+yviw2po5Kz6XgGJ6DqdrX9DUNNBTDk+PLWtM2MIv/bj2VkQnkW6QQ9PS5Lhw7xvJGs6IlextNgrWshTxPrflbclahfr3790x7K9xvBdTGqsShtQU698Nz+19+535RCj8K/lxF1f3lH0rWNE8s84/cc16Tdz2ZgaN3xln/XcDSWYyzgjnwQKhOhLWubsXg9Gvkdh4pBhcXMeIM/qy0U4grqGluwoCWLjZ74PElI36IXpHEFyF6wWvvQEpiztzQpchv3uqTGBTFmmoQmBsIVZfTDjcwPqlm3IDvdrNaPH0Us9zst5GgOjROSm9AikbXiA0mqc8wR2ceCpF+wptE1PXnwL0D5ZQ5AdNbepA1IZerHp2/dlRZ4oq9f2rOmd2brzQ83TqobGTy9VS71eRdJbXOcj+DQhuI9IlgvW/bVRGfTxhT6PujXI21Cyj8u9vo47D4LwsfxWgFnOkeLQyHGbf3v47sbA2w3zFLNQvG3GF7kERiSKsgXY3WIoDFV14G1mdRpea4CSm6DkEJTPdEQPnofMmHpzXC304AO2ca2x8KEONhhNa7Rwhc4OZMFNhC7MQJ5Qbp0x0rxJSg5MIcnodXQdoUd7A/QS7x72ycsaNZJ2aLBxb7vvy35j0qPjm/pe+1osBVNwZFkaPpgELRhX6t4mc8NRLDc+WbcGm45GB5Odn8AoMXZpuI1fxztknLYV+Vj4Ng6mEADwbdKy2ykU4RgdsDg3Rj96Q6HHzPLMI7E1sVV6fyI7AAK6/FHAJcBHi1QkCJuibfmpthkt/PXdSJfTqia0rGWXuOD2P2Lc7qdT39n5e7awgo6m7YVEhei6tTWcfkEB2Lsjgjtsgqn9jFhxGI6co0NOW3RnkQ97qqECyWQ+P9svcLqMGpNVihs9+yNO482Lv/nG0ibjBkbw3BOA7/GHnD07cB4WrG7AsSPZSjkFszUV2IYOviz5VSe6v1AZYj9XLX2ZkSBtLD1xjWwYmBk4zDXpQXBiFTrF4RrSQ8p5276VizmMF509xKVpuUzQi2nhFCK2wUlWj3Du+A7qYZ0oIfWbWCmkHRthcZ7JNkE/kD04xYx89O1vjpVOjdjm8f9mPq+fL36ufUZMlhnC376z8nvgWJz1m0qE2hoy1dzW/E1kMuDXo6IMxzHp8s5HbPJa5XwhT+5bKyrYOPZvkujzngX20fnpnwDSu3aUgOsgYEXIGDqzUSGBgfin5VDbRXH9OJ8Ol+KHkiqpg3gmZauv8LXmGy3YE48f++o01+4JQJoncPZcN+uJFctHYipbLaym22XTB7UJdXr+xUmzP3S9UWQBJyYUhDf/ej+IQU1suQI8smUpLjQZUn0X9PQX03tfCgStx+/hgWZ/UuRiAmuKIDTg3yND6dYVN/T4qR3vcUInDFOSJq+sOrzZtrQPGa1nXENo1Ab8hAOoVjHNWJiThkhAu7oa9dztzN2TAWdwRSRbRB8KZYc42VpBbXQnRgciruCAPADWNo15O7XRKui11XLq2+rwCB4kzHV9bW+fC4u0TvvbKyP8c/6RZ7pKDvOj7Rk3DTiPXc3MJTSIKixPv7Eq6g8OnyJjAY8uRB/SlPYMJyDGJZYMfmoUMR93ov9mc95aeaQnoTZHp7eYBM7M55pNECE6vNp+N7pOYDs656supWBK9Bi+10Ty6CjTeMEakWhn9NulNehqAMI64mg/QTMcoLUJmV7Fp7x+QOJlf3SjUf4WPPae+fe43QB46f3C9gvV7AnG954CRd5GaaSh9fuCoIFW56mXINwNR6gTcJTOGd692gX+hpaYvVkKEZ6lP3M2GRu54l51AIjrwuZKJCE8zAPqNTrWEcXxv8ycGS9geyTOdpl/3BoeLkmrtcOZuLqHju2aY6ZeWUQo9VaH7oIhS25jGILCFz3uv7X0HTnHS6XtHNk89trAI1zAruV+WIXHMc6bGNZgI4DdZ/TwLY2eCB39lNzlY3cJnTIZBDkZQW63lYQIfEkLXJSTK0SU22FFRoo4cx9SSl93heU9ET8dt0d9G6GTiGs2L3tVElL+Kjq8Rd0LacCeFtLd9H/AbVDB7lExoC6bpSWYszafbuGflRqATo3wUbd6YqjVteDUw5Rx61E5Jgj5OWK/X3n/EeaWlVUYl8XMsVHoVl3mHE7BWn7qODRHDssFud31qgFFPkClOThrmkHKnwhgqUD304JMg6Fm6aIpYauJOns7EO8eWqHWFU6xYWHUlL0ugijD7whcNBfJpESEVv3N70m82k6f7YeKn1zdBZOnv8i6IBfu10P7aAwLm9d41jSGcO4yyhWQ/fRj8CEhKiv6wdYckm96/NAtOy5kGLo39/HHgUaECXkhHE8TWVeVbp6uAZzdoVLJh8zSULjLq/bBnfFjD3ULMp7BiTqZkvEuXpVdesyoz48OmhykbjWJMsPWT/YV3kV9cpjoZKV9W6kEPRUGFkeyVrbInhJ8vmCAPN7kMl+bLIl5JZqZlQtXIByOtppnJjfT2rWWkJkeTG8U+HS5O7tzgoD2fH2hMhI2zc3MrjqWrxcu5nmtQq4tCOwDGOq6hLUxcb0PBUUsLDOW9VrMlKa6Bv/BQiVxeVkUXcC2zGWSczQoENUZWcWKq/LKFWh9kxgTtjBmVA0aRZva2fy9dTqErxbrFpn53XMDbZr3AZ1XPWyLf7TpRUEEb7dtUguyxojJleLK3szonAd/cDeW0vfz/S0jBmaeYUu9oQrMxhUTqfrBe9Vrc1Yt/5p3HTFtNUvQ9GWBGZYtouByZTnvt/o3USgqBi3qdSs1FJG93D21B2tw4SHSbXEEO7Vj8erlmDFQguZGFOkAH2TXrBbTpHFlZVExzCyvOECWTSSKA6hSEGUewgdrB/41MwQapKantwgy1M+yVSQXWG+Gsjrxqjf/f5pRty8OPT8QYxhhTaUEw8VbYY2aSFCXEcdJvdkTRDxoTnzUVg6tQTmWm7nshRKrvg18ElQ55y7hmC7K1l/JAc8i7WHyguZVNbjlbzOHfgtMKb1D0mzddFTL+C8cQ+ao38XmHVjMCI0v1oL8AO4JY48ycMr7FqjBSZ3JLgyF0O/mOWf9guJZKXCGuoS8fKCOMPi3Ml1oKL4MtrR4FsjvN2zN6GCtM6HRzQ93h42gQWwocrlcMqstyGsoEBRiQ07GoVBaq28nBg2WpeMLFunBnsNm9xDIeVihdB8clxkOGiyiansFj97i4c19um4umE3SQ6hGfD7a9b9RVWDUOISMhIY2WMpWi6iIukBTY/Ep5thVxTNx9uZu037Lv1f7UYcdkQkPIzQAC3xRTPkSLp7v4eZrT+/6S2Wt7H2hFErvXs69tebEcflQYCLKKPk6NEr6q2+d8fdulE7ulW836zNk+Jb8vaXBZeK8jitjVYQ6J5qdJ1PX1wJbyMrSh/WZSVxKfGoaWGvrRJUnANSP7V0YjYpRoyFtWuL5/fphqJTBJLWIYIRgzXhThOvKy2ZAV++PZNHi/betb5Vgg7tQmAqTpGAHX1UUAlh/3ENXa3ImA+UJDlBwt+eL0AdcMIiRBz0LQm0U9qKJHWpo5NvkHMAc8kHqEcx2M715sYi3g0EBdaXTgiAAtcBzfqgd5MNrB0ulDUlpSHafrQLx4m1JfnH6MOxQKuoix4pmLjycl4nHQrt6dZAkgEraJc4D7NxPt040TcmOh1BDDCk02COSuzOUZhnRXJcxoaRtc49vSQY90mbzgFwUi7S9f5PR8oJb8K2oaPe64/xgHv5SBk/bI5frgvluNi/7+eFFuqlOej4DqI1usTk8jmWqNs7TIzKiex0zp3Wn/WkzojkkV3iE3mx0VRnePWzre+CHT5bGuV7HbiY24P0fAj5m0v/GcWAzcaQuAC1x0BtstcKfppMtVtQpwk4lyazsdtw01g5bnJNmhPIpd+gtDQyY5ULadSn4lioGSuBgd0MsQZqEicQe1qtnqJGDqiZK9beDLnKPgRFFzViqafJfJ0KQjyburfAsgFKt3wYN4u337JEdDOYNrdvsSDPC68nErgxgAWcwVe304iY3/rXniyNT7lzNcARmKPv6fJOQdf3zD2AK7ykHjZ3lHWip+sgLRyAtrXnaoiJmPXSfDib9i7Symi7E6rprI6H5YeQCVR1tZux5youfVH6/ImwuklPPKkWWO+RAgi71WUd5aIeeBftdwIDNl4ltydzRJqtNh0sLh0IWb2NieHzYEBiXjNqbbQrbIy8iFKsKolqRqYPHn5TxQcs0xHis4UmllssWLr7QmC2WsVFDzmsAGFnL+cclCPbCSQEiPzfORF/mNdJ0oK+uRkMNHRdtbIPXL0wi3bYMRZyFRsDBCOPUy4V1tkH+wY/Cc424ZVGQpeZkGaSNO6FyH5hWvdnlwTzhVCYQ0rN5rMnKESe3tq787RtqTsFIR/NFaCNQ5QGneVN2zMnFjZ7iBx6zW6BhbsuVsvMrWpFMAZ5E556BRGzZ7iEWYmFz+5pRgLhzr7vt8mydjjs3yJUVR+cx//woDbO6/tRW1EvRasxrv4uDrZfn4/1JZVX7N4u37W+ZFNyECkYN427nx12+SSgGLzbUs/VUHEy87emuF/NoRYzM66azvG2kuql9rN6M5xMkwyIKRm8o0GpUBZMK6yyVXmaFyVIBSHy8YSywoKzMEILeZ3p4GeSMl8AJfF6vMbOBeokS9ypoDRSdiaUutI6HOYUU1Li50GOEovFZxiHG0uxDmjRXLip0/YqBiiJhxgZSJj2kyPOLjZkHVJ7VA6CqA8Oh+MpAk7Ubw+Ui6Eg4O1zkpCr71fZQEifFRzSaIXJF/qTDsut2sMHX4gnXn2tCW9K3smEBLKn5GzGhWE1PHU8EPWWoqhUxQGC6G82RckNl9yGlMAsTOahtM6BMqVlvaYjvOkqOdbEh+uSdfCPZ71PFkafMsXj9agn0J0RRsirwai1EgJ+E7Lc2qStusNMUNDYULHFDrV0tb8QwOlQcTh7J7WqIWy4RpMsQmmJASet1b3WRI3YyIPCYJNRMz21kaHnZKUP78N+JEJWMUVvzDnRu5POlYo/vpKFNlBClhh9X0TGdXzTLW1lTilADwh2pWb4mDA4PtSDmmVwOgCTRzHqzYOizjmCe+DtqmUCXoPG72no09mI64oLXPs0N2sGwv/mozbVe6kSNwVBn3rRH1b66FaGNSEx1E4C8Tpl4b5bLBu43hiZKXStvC4L1QSyeUSuHhITrg02GdxaoOtjCQvxFApZeLY81qDz4HVazE1V3TXyTugJNo2smpftr5JkMWeMd/ktrRnIoMl2TIhK3scgxjjzTFi73lgbmg4dwtavJ5JDwt73ZuacqBo7MAQ8BPSCvH7RneCUDJoRy4e/x90M4T8DwdKFDNvkANQZFqAOtxVsRdiqkWeF/XlNIgi+StBxaIIvrQjjkJp8rthY+wCqWFq7XLhRmhzmOoLpn3OcwwZ3Uy0rmY+wcRXzlPU3xa1iTTTEfYaXtHTr3MJ/uuKf6A9IxDHdS7mkFOME2f7TdEtYnmmq6BtnoD8rX0kS2SVEvrhJTNNzshwmzw2tXNqurdDOa1/BTvtjoe0uyDLvL6D79B9X+j/YlWCOgqYprfU/UDTexVhpfDPNBgSdhZgj03ACP8YeoCerF/487EKKPezc7cSAUaipVYk9iDX296ceRwpZqXIhbRJkaqNMUZ+8o40il5m1a+5JxxCkEtOCBn7Va4h6vYa2movddA7rzTOK3ei0Zm4W+hHmKYF5fPPvWPNNtQR/RzKbrhl0tsqSC7e2/eis9qTUNpeN8g5UzL07YoZl8i3pFFzdsAHHUwtvKknl0pTxX5XZvBUZbFFjOKnS7rTl0FoQhos6xjBw7IWGY1b5BT94cHS9iJepy4uJ93jSL1Fzwvp1Iyd1lutEsSV/URz0y4j51tcwUAnpR2IYri7OSaXAPJ7ZubpBYOpcjsil9N7nfEIcAGhvBHbCGU4Ny1OJ6zFoMau7t1GoRxfAtYx7poaZXbR1B0dXPMAnqvNOnt+NzFpv9neLmLD6ba2/1C/zWU5fgDxxOs4KyYTm/b8A9OC+OKoRNOo2rZMZVbtEIzYIalyCjtOU41RL5983HuO4Mfg2U35qLU/mIo5uN6FIAhVh7ww7IggWfS70wgZXAmcdK3YN98Xt3K0MokD+II6nrKhrUYlwtv61ftXnovqEKUoEF+bT06MRDN8yB/1kBu55oKdkrIcks4qXWPpiMI6knb93RQrF4u+K6VfRV/FEg6PQ10izCKJ9nkT0KlD1Mkt1KE8vwFY6/JqbJKgnoSsQiL1vp7QvAMDHmb7PPOFwm8KvfT8qcV7bWnXss8smMXnZXZFaGzK8owFdDpXjGnz03ekdMSxyC0hY2m8tLphS6nIOrNN39uuzH2p/ykuSufGHQg9h9v3K2iGIitjvp/2PqLEqivS++5Ji5Ke/unWn7+VbenOqNyVdvDFPI/r0UnkVqgS1was5a+j2dSLi7C1KFpJMj+wU/8ELkpuvUJeIOl19Ep/+AFwAyPOE3WqmVCn4ikeLajgjKFrqHJ8h22xb47C+1rqKi/24sFncErVG4nS5M9YVnJ0t82fFmcBXExAXfnoqxDi5h/muCrG6EjxYIavvp8o2uPD5qgs3w2tF5xpw0XMHSxcCuQCYoEDLAKCSH6xsIskSLWdkMquSToL9UFsBLtjqVQpzkdK6tsefA1DvhYK7i0WlViHjU1l9RnKM/+OqVvBv7NedCZAUqsLdMriWSj7GkZXdu1oQlQJMvH+D8AhJ3D6QGSWXDpiQqpH6nTf0yA2uxYiCUNHsfDfNjVvUBcjsh/NdRH0SAyh01P5QjZZ76y/pxBPT2kUVDnzdSKsYj0GJcSW7uU3UnMTP0fiBPwvfJUcYGOXbxGFBjGk5E9rj+SGU1N21fw5pkk0b+7D2iMB7Kc5Ij9gBHM1Ymw9Eh6eQXcWxke+rwg5wId/NB68KKN7XHKrMykogMHvXyytYNybgTMPt02iyhfd6xm6vPP/r89SjWS0+3Ogg8YJ8mjb6bqpX+PAmwE6Y3LGp2dBAYSMKxf4WOTA4789KnQT6royDDp5daHnyIIpVFHy6IEslgUTKoPTiLvc6uCv0Jo/LW6H4wEXJvfkonosBGxVusNzbZ0aFEb67b0oyiqCJias2FBpYkWUKAZ/pnmawDf0H76zUIgJmEkiN6+T3ELwDeDYEVIii6H9bKGxptCCcQINdFlpe3U4d1GwzNKxBegGoBFM0dlm6w8gkDi9VppxT6rA0L9jrZG2HAplYlxtBsYIxiRA7YYtQ8ADGrpDLi8gEVgUBbv0btjcB76nNgAHqlgOmr7xQgELKD/nGh1ab8WNwcCBNCrCtiyeWxQkWtkaDGzcJWbta4LFnrLHvEkE3CH119OQrwMc+r95q8Oa1lOdS/ba+P1gIJEsAn+cSxcAtrQFBRPJEFYkot0KimsdeWjAL8DppVX997Gi9S0GbH5TmoQ1hxxzqZFAyVozZAEqtHb71jdn82PAIrJ08fowfemxej/IoJEmCAUHG6EREyiGHkQK+Bq+g7oqiIBC2FvsZlAuPINv4eAu8HOmqq7cNj2le9zQIMVWgwrIFYDsuBw8ln21Xx/Ha2O1vAMB/OXLseX+hMxkEkTDvn2HIqAKDWVO6orI4RbabqXyT2MoymHjaHgRla8HCAJBc5lufvnqjhJQW6ttfIWkAv4bA/eR8uhoJiGiTkhmk0wDpGC8F4qim08nTizSjmVdogGCTTLmT02LuYRDTcYq01KvdTXbKILBC7EfiEH7s5J3Xo6noOKW9gUmMI/v3aaZlAAPCmnP+maco+L0SSp1vNTPee6iP1K8DWcRFxjsNpiNobZR7/w5dUfn5ktR7WaSMjQ3a3p9No4tUnCxuaB1zJAqsSxZabbFqnvZspiAt+z7rOp4nixzHKgLKcHXjnWEEGCggkKzzNOmZbXea6jZSolRqZh8GY8M0HTNLPETyxQUL/phxNAnrt7IuFu+wIVpF6bDkX7EN1olFxf0I7muqRUNxByAx1YlL+lwd7AgogG6qyhSBiCLEFVWC03egEJRWhm8rhRHrKqfQ/B4Sv+d3+XxCPI/83X0BJ3DKhxNkV48p2pKA8ltag/x/dd1sQWpFYhNEbjU2U6kOICPZAhz1ISKZULBkgG3RfOOBVzzsUWsOhEg/iOrVK2/KYu7LDsTr+4AF9BckhTGlOc8/xfpiSyTesBojMy8odz+03h1gNswp6rtta75lY9p0S3UB0orpVNDopR8oTLJl8hRAK2ZLrYQKgAmmbvsrQchq2ZvhzdEDRQ4yZSFwTPAsZ8Q/z6r9UKr2Khv8pkUuOSoxFYEyU610YIv7OwdG/IV524k2g8GUtY+WaeT2qBcUvediMSOuYT1GpvDUFcKL3PRmc/dZsc0PxGXI9mFbGMm3gjht4FEdCgFfvksgpFRiono8/jytqiuBQS00lqruTQZ1quPP9yd14T6CcpCVx9GxXoegqu6hLYdIdDyMQVMvJhpgtpHgSSmK/LFw35fKHN0M52aDAmfKW8LjhXPaw0xiH+zX91tTkGHvy/XG7Bk7tMdwJdWGYVODtX9hFHjG7qqDwm3vbe+YoHjwuwoTPWDDhDHkRkTfZsMqjfAJtCCuSOmRylipd+Y2tI5EpoplO/E9tsAYqMuTMdfAxulNKXJ3k+O9GCqLIWqMWBuJwXHGddWIkP09W7CgZluLJMghMASvVFhLWJZyFptZl+j7UeieY9tWsBRqrfs2DIgCogHgSixKX4n5pZG6P0JLfANQUcx6AQRQJtH3jmkBByIr1Glk656nRmo3ElUxYeo6aCKksyzOEXC0m67TxoTbwA3nzrzuUXt5lIlyae/RktvDiUA2w+I/iNqcqV76NCsbnlE+uEPtbg/E05rMPka7WFCDCcO66RH/g5nDlKD2sIHE6gak3qLFD2aKqIGqFNRgQIGY8GNPfz4kijzn7YV40gq0h2dARTvDxo/86Tm7ECnE4puM5filRT/EprX8Nv7ZwYlRGwpDTKZp8ibfjIYpJteQ56pIJt2Mu+UvN73B+MhpaRWb2qQQm2qWomRZ3g1aXQdB4DyveVCa7pKkx+7gZ5t7s/fBLTHdb2iRQUqyUtB6eyeJNqEaeI7QE3xjZ7+4sPU7wr5XZ+m+86SorObiDnPw208c626f57+cvxTIMFsIIKe34xjmawjTHqbafFPhWAEs8PlESKDW2HxRaYHt3e11dawvI9S73lSbV7z3IyvfG+SQvMw/+dDYZiQKnPjUOINtxvbpGoT8OGSTO6JhdwCCNJd479lwWOR0TX1CQ4lNzrE8bh60pGl4135T72Ome40AEfUwQtLyz8DCAuOafDG6ea2HMvz3V91wPnW1b3ll08tSYAdWPuS/y+9nC4qKsCj5Y9GuBHlHHvuZn0uPDTPDu+DJT1pqHvVwYsDuvNuEAj7wz1oOZSv56NR6msS2LqUwjH2ncOGODEB8cCwyAlw7QYNshzW4K5zFZd1kPEAATSYIbRHQrpcO1hEW6wSIPcI2uolIezHWvd83pRN1zndjzPjQTkcl3G2vp4K97nnpUhl7Fy3X0k1nsANwnOZSwEqW636OnZXfzU1bYd+bYeOKN4633pmSBCUq4OLWw3FxZDdzDvtPI4BySLACUd27Y9rdFtdvgDITP4yIO+YVRiev29o9n4gR3gu1ar3yLGW0Sax2mrG+9EDL49Sb5QJESquRIMeC6MoKaoO9khvFelE/32y9wEck1Fo+J8Om/T7OgchzAuWHbatGIE1UJmkaOyX25/BAlm2/6H7vixABSmD07C8SIN3T2eKa6LgVRMLVPBeCpDfIITA51v0dp08lerDHUnAzhgQENdecGyxKAgxIKSrujE50OMP1RzbAMfI6KU/hkYlcrGX+gQXkWiP4Xl53DpTf8hq50cq52xbWlp24vbcQ+pRo6AW5GaV4fR5g2fON7jNtgkV/qOEQnJLhVsGYwQzZIQfhvYAvjiRyK2JRLDNC/bnMQIhOPCMUUym25prvXBwHxUYZQRWSpHgSd7HETUI7BWupn2IMzCIWCL1dfLyQ2+4FxJoHFCfZISBXko61pmHC80zEjWOBtjFd8BRjrGugE3Eo2TGccfqcp8q2nV2MnrNW4TJbxpSPtDoCCplEo9ySsW+8MgcO8zTUlPa3KzFtxiTR7ohJhG4oTyUxspkNTw2zW2bipVKQdQjsmDiC5tOkGSBz9QJL8v1EybiBr2zEuoC2JMRssMljrDk511BmhY6khjT+g6+Z39ySR8SLNlArlvIIQ4p7d1irOC76deOLKqYgZ3GkQFYAEwuLSj0HSfenZd/L579BP1YufKYMpOEhB2XW+6S9hzjS2sKEZpynTatoW5FgnDyLIBfV2VfYoSYEIPM6gIs+eTF2UlvtQ0tl/dSEaphwo3mFyhBfPrtx6fHPi2l24br805R/WHwjMDfa1KAWujIr+uTTzpBYi2HEdt+Z9Hl9MYgjy73/0n3Xv5gumY304NiP1UiSjqdfQvSOe7LV46j9+fncHD4suUKIJxPvv0ja6v2aKuptyTds9jcHmT7SYysuZ+IYop+TsMKy86DESqkM8HxBHTAJRG2k/tCyCDrele3rMMVQrMKwj59oG7un/RWeArANVxN/wx7CGwqHj0sSXNSH3xbLGBF2sZD/xH3jqyrtf00mCjO/i8zkZkSx1pHFDxupBfkdBvPWkWBgCvv3XAePiwPtMtL0BByNrK3ViheVze6/io0RRWVWyYqzLcPAbdRIM2Odgmjuy8VdppPHtPtEpqDmQbSceShZjTyARgFrJeT3fbyh7bF4ddpcGBl9savCS/MNMrG4topmWv/3QlyyvywVcO+pJ1k+G7NCqVjblK6w43BRBbRYnQ1GulLe3A9Nbb6Euht86KBdhqmpvqADGuHtNjaHrG1FT5RhDTWmekUnhGnL7vvz/VuRlqboysEOmzqd3ki7rEi8gri/mWTqgd02DBrjexrdv0/eq56WfRiW+sq+mmBjBOZCcM4NP9bDjS5gkPKR6a28qoea8HYhNDJfqWKLc3fx6JC33pDUFRK8WP0aEZba/k4WctryDCWzdapwGejBXJUN8+btDhoU28gCzaMClnsN0yjRG8+Ye9SbIjbppETcdqxbibktliYu9CaXnEQrgcKm13TDhbI+n/pOg/VEYWjkaSj0q7UiWwjFCsb05130O5Co5w6MImJ9e2l2ukFCC2cUZ+pOJUhGxPmpaOABu+hmwEq4NJBg0HQGEb32hOi72VrzQ94vaVrOfmFzZGygTcEzv5sfBKs7K4NKKyiAcwQ30TGvXGosvah+ICa7TSS8bXxELbGBfpXbSPJywfjLzrccg38xfAfF6pKQBJFAfAIzRbBdxj0eq0CpFtCwxLpmSY6uPwqwi9IIMYwBDfjfUWbLVBilYPEg/mL6djJ1l4aguDz42UjgzhGvBnhoWDGvHCKbQVwYSWsH2mSazoDt4VLoVWHpDChGD4Tf30BTnBTQNferAO+ZhzfHaT6R9ahaog22CZXblfLE0FzoO1NqZJK/pOLth5yEeS9AR+U5dz/MUyZwvaAtPquEeMdWlT7HIsfMMVSSaT3XvKxP+EMx/KGlPjiBVqoF1CyYB3FbCZd6gI8p9BGHewFGovd1rPyMnZrmKQtZVdV141/MMeeKq9uU4Cs8Zyc7/9OBmdX4jVyxyoPWO5xMZLX1ZGImB8uLBRfx4Gxy2IqLeFxj+uSy1vcOT37kwuFnSaKBAXExgoV6r55aIC1ujOZHxiA4y36TN95ydaXWM3qeGrxLrFioF8hDClYmxMAZQuwjemL5zkTlfNJtHtV2GMEqnMYm1actepyqdx57OF2k9U7QmowzwoDj0VtWsLo6AhJ1jhlSRj8VO2a7i2s2MQUACdvRldIwSUZrfM6LQPaAxgYEixEHhvcoM1U0UoNJ2QE9sug40O4zWxY1ab+gyOqiD3r4xzEInPTLQMTz1M9d0GYtp38OD8HUkBgI5t4ozsNygToPzRRDe7oj0KpB0aLz7TeRDtsLUW3Qlu6bOcVbm16HUNDyxaTZDwNU46Mxb2h/aVfITsZu9pFmc1ueR2VIUJ0y3ANR5unaWJHnfYwLqSoXzq8lL8adqKDddglztPR9Q5JhRbHPdY3mSpiXq95DFvI8nIDZOq3BHPzHWLD7XJMXMqa3lVmdYCkFrIF1WbmnW+jPtw8p1puTl7Y590ey8IntRGrBcAGknuZQy/kCPdpmhU3fJ+uX95b+lLfUb06bMZUrbtIJx4dtYAfYhhvWvCjxtAwJtlXmuzYaV69++77fRMrT9dfvTO5utCHk9iod1eZ76MOwJrGES2KazlgNIsZDs29EKgL09q779xD4wgxYhkVr7NLQs2y0PSzH4I9R8bPut3AzoGCcIrShgnMdgnAsvzYQbs3f5sultRqU53MCm8vCXG6ZVEaIg75WG8rhtvIehtXDB0QAkPQZckEX6Thgq6nNRSw21R6nQCCWy4h1WUjKzwnppYcbChcdJva58ec7mCWiAO6HnEmPjUmYDrt2dDsWll9dUi1TyHi5Zpymcx/e9nOhvQ5OLobeH+fTl56y1ZIRCkPpEQL5impXVbx5Ykjg3ZTF6ItkKF9y+d9AcN5G8o2cLJBbUY9Nff1NRZvX4dvIB5RgLg71aRIeEgoapcKIh+8pDvDTDjnS04KLFAehRblnBeHdGrqd1wvpdSWz5qTn2ERdjTO40PI92ppP2ME0uHvBN0GJIseVYPyDtXUQqcSma5h6bjwak7nSCGs9A7fm3zQN9eQ51rfGak4ZPk3NTLaQgt5YQFMfyxuieSpL0aFA3ifuACUxdf2wFpwbYuCVfNRclTbSXojOAhqBg7i+FiWhki91OcP9+6uhsjiqIu8/yRJxQso72gpB9sqf58GEk8X1vn9ZOmSRND06GOM+SH+bAV102HH1Gk0eD57AEXYTMAI7yqzmYzcpPAjhpyAKfj/G3PrAX5idkx7+zeK5sMYsZr8w2eC/wMzm8gtRD2X7C/PIMnyHbsx/AX7S4776ZDMDbYm7cdTdji6FLk1oTwSzot1Pz0TMdILbv2FqbLgXoh/T3Q9YbWzwQumJiDOXu9EVzrtnt7Jv0y3cwYn7cuqutp7Gl24E27t2gBvnV9/3+Sb/bAL0WeVW/FQa1icjQSv9dJY9ccTJRb+pZJs2Aq9HwXt3XTQ4EHh+cRGh1pLckjC3nZsIXhq9T0cS7e+GLmGuDWOrxFGNCLX88NeAtdvU4U9Ylv9Awt2m4BlzocnLcRlDluzM/otHQZ612E4VkwIbDusRzBjoi98JRqN6aqzmZClMKoW/TZhKSb+VCevSCqraKlwMtlXF5YgLP7IA03RDjBpce4sqvtBVqxTU26E5SHhYENXBL1c/h7ViQmOHpf0DSMS6pBLU21Ta0f8VMCVbFg+zZYwTjx7GnBMVkTBscOXb3jOwZkkkINtebgXwUldYxWT6bdkHGKPtY6gsk4wLkqkM31+yxslD4f4wWa+vocer1LOw5zNF9ihLVDdL9dOSu4T2cVMWOnr8mkGHgwDfALhgBw60a1cuhVkNMgl74NfwS6H4egkR1VwwklKZKjFDbCOvlnjiDlQInRSvycrj0A5tTIpRlhnXvZRWZSleT8+DzVnpsk4hvijl2qHwhGnC2fbRVdkl4V6w83BepqLUzmsaUcKRwj2fNNw3U3vBMgpKevFIOi3pxzC9Zf0SdqSLivDMF7ly36QHKOWRbCNrBCkStkWCxQXurxc/dnTBW/OUTBCqTU2lxJdLiMBIgXnBIog9rIsBzQ2SZ0Snm4vHpDieiTfKewTBheo3HTfoKA30txZ3EZ6UoktEHoyU9z7Ew4OnEKgzGnVXOMlyXvp9QBRsTbQZEvMxcpBjqrzDuJrzkvyzxwt1rrUBEhzvdcpy7etS29SKs7HwrVxAdNtAJeqbVXF4EF0rkVt/5sdnbMadd5daRynC75CthQti9kRHsOtxL0ZdVlcmPoqC+wLgOvVQE15LeG/FxNg4Fr6V60JLqn2q+KLeQrCzLtV5XVrR+A2tJrTXX6+lObAsg7JCHBZBmSbSY0nryqqMgZ0epLcAHH6BCIbHUJHdPWxpbsdE/LYGHGj+Da2in2CDAo9YEuH0+axeM67wDe8pYgLp2ESj6KzH3so7f1sY3FzfKmiBGPmYh+3Vt1v/QwIUjfXv0H58wxMdCcfxje/yckqx0y3og8faGRieBRk2lDJI8ix3e7IYbitWzcvYNL3WSf8TbaP2yowToj12ovNzZEMKJnZMeMsc6EH1Um3t5WeczREkSU0V+zYunaRktgTguJ2L8CGVHjdNxbmcqlaNebK4EoFJbj10WiwK66vPGYZ86J76VaLXAECVCB7pqyfUjCYNXcbGvb584wd/n1aekUEUtVYRlfSPvptQME6NF6F4OaV9vO3TVoKhZyxZFmjzDup+aAYFvSAEIU47EJGOhZjqL3aNvsvpcMHeFJvhiZGoB1Zch94VTnIEZnkH01ZlNq9AJBONAmYlbaR6NYtJlyQVQUXVjd8Wh2pVahgrmpXATTMxDIVoqMTcDJqb0PnigezmmTrnbFWnGSmRU6UNbUbkdDmhgcxiYdW90TgxeVWOWEZSfeiwMutNPYzRIWoY3r3Fx3YXhxmhxs0fKKAi2yb+JjpmPMgNQokqvGFIfUtVmWCRVgaXQ5SbosBawkAWFWdIyMIsZmPA2nqTMikF6GT6ZtQyKCf7FbtQVVYMtVBAtI5bQVuMRDKqy2b1kB6HIwyp6PdaCLzRLGOk3p4SWUysHmkKuGsaLq27bZMLV0890G6XeqEQF20Wq2ZYJYS5AW+LfR/pWn5MOTbIUyOldel1zKFR8Zu8UB158is+Sf0MP7kBBV0NIwPl4O51jyenOaiZW1dBbOrtYNVhOIcxtwKUZ1tZU2hCg3uqifqoGiTGndqxSd1UEvb5/K6z7AXqUpeXFOOfRwUU2XlYiBlRTMBepNwepliv4LmWg7uugR3KFHtWHNu6l8iQ3lCMPVTM08o3jC3XQd0tpMKrB7EXzLZ3Hiqp0o7axN33zMzi1j8pq38U0ceAKaXrVRVXOkI+lwZWJ8eq1YENwuf4Aw8XzgZIHswjdKPbFZaNL7RxYgCBuWrC/SLUWvHh+FLeBKElGLA3/23fDU3dml/8faLCZcMTsmhO3pUxAVjtoG6JoujUROTqVaXE20Zq+YN8phz2Bw+6b9HLCujaekvFqg5dc/2DmAMONBkTZZjXaGoXk9nuKrEfl+p61LJ1/pHjExdaNe0yHaoJLgvlVA/sVm1/q8dzKhKcWsSuGoCgGrr1aLg7frto3vUX8tEMDfdPUmZIWEd5mt/4W+n2uO7mYzWr2vpeKJmUc4o3IxwSB94rbMoNUNF5fIiYmF5QVFpTJUQOVuyS6HFa1YcZ4V4RmLpp2jHa2PoQEuzbJ8ljr50bylh6jh0a7vsaic6xbFBreZuU9aKvem5pW/DysOUM2/nq83z1IDFcoWWQjWzlp3DWTDP4t5ECDa7G6+UdgxzxMFctO5g2GbXvejLjcMpCguoTps082mhyJFsg1gQnm173J7AEyFqCw7eveeTmUyKH9Q+SpZMsnbQyklZGUiRLkSydjKWTsfQykV4m1D0K/mDwju2r/0F7TzADAzFCM+V1Y4vFdq2TFwtEJ8FRbkqG8E97vKRTucCqc04m0TeBp/E/ego8nCwEQ+5st+BZ6EYHDe9FtcArO/PrP5Nc0ukkmok+Hx+inzMTH+m44940PR9tN5z8pj5dh/bbnJhBzbMdBf0M8CCjKK7C2Ft6cqORIjtHEHiL4rKGsCOOXvhnSzr1NQXWawSp+k0QvgmYkUhMMo75SRSluw+XWWEvevPZ9FEflg4OKzMi7IPNgPBRmKsKG8iFHmGD2hKMgkAol3BR9xQhQd4UC4VYhXekE2+/84oEKG74gMpfllbV0Mn+jkpayxp1zVvjUvP6fcP3vchaTg+zZUQtv7HkKJAJaN4IxqrIU+WCGBegf+a79xvxKn2QFLqobkvdo4ftQnrJSfb0IVGNWr5Rg1Arzv02dU1k0PyN0sDuSf7eG7nVjf8PZhn9V64aOg3o/OUSMcAJEuAS+gMMmsB92C6kF5nGrychi1psrXOdhLAU5ip4GfEeHKgo0kDQrq9GydBiIdALWu8yv1M3B7lcz3KHnHQogUAoKb5g429Ek7RKJmub059O+28zBkAUnvG0YvzG2Pp9onBKcf3k8ykNFBx8S7DpiZUQSvMQqk/LQ8a1UxmUUAtDUZCacQccUP09oMMc/KC7YweUjMkE5Zwoze4SV7gPhdnrsPnb22mfJgqOn/HDY8WZ3qi6HYA0bUsxy3kNRZsb2oq5xqB7tXyxnm6pkg1mHzbAzVeVuec8cIWlN1ADsP1rc1K/CatOVgdh1kJ2J7SYVhLT6QbgDnLT0Hsa2HmgbX6DC8wK6nTy6/aGB+31+HDz03l5LhRQUNIJyPQSfdSIllpJPcEXiM11e+p41q0QkeX6w4Ys+tz5D6Q+P/q7jBFtreFgAkiznTW9WPuWGdrKscIjxB6JZGTzecd4g3MFN2iuHN899R8wlgk2ADpkaWPb9+KMITzRvztDUdlPEExcWDE3TcAF1wB3a6fb30bp1YVq5lEsYoka2GFU/dBnD9J8mpGqMrcSI7wA7LxKoPNOp/3+xvU1zmifsmgJi2SGW4luZle/gh8dNLVIoYktoLBpQtDHU5bLi6UpCS6ky5fIy5g6GhzvKYyTYX+ZVE5MCQPo5FJ9J1Bk0hIzSi+uFwqci1uJVo+q0+m3UX+ZimVjkgQdaq4vpmaiRUqCpTgpakacgJEihK05AgwJ4J3yVMeyPy5uCdfP5xQPLWDZW/8iylSSNaOXO4Ojc2eOX0hTeq1NRrDrlQoAO/IFfR66VN5idHJeW8+uoO6uS2DcylTz7gMvLEvOEkseAJICauTDmtp9/kTzfSVF+n/eUvhTMbLfumbKNDI1txKX2XEPCZOa3sb8fmtduQzEjw7DzOLCBU8EpUW835rgXl3arQYV/WqJlcQprTPlYmFAZn5w5ggeMxfwDYxluu33J+UP6hbtw20Quqxt+vhusSoyncnF8msI97byUeam0OG9G9ceWsLMnugxXF30ePG762/TO7cDsZ7Iib7ZWeWWNg/6O/5dMFURuyXpPhgiMOIWwToy+jgE+muREKBdOpz3qYn/gsFCLbbXghvn8XxS0uM93tSPy/QVG5OpxQLCqtToCIaVrT5V3Dq2/w42zsH3Yto17J0ug59t//NqnuKFuzZE1N05kNeA3qU2YNAXQb00ow6M3XD3iqlDWqxvOmUz4q+pRZq78GOS0Bh4L6b9azHtHZS6uMhJ7rnYe1V4MrrHuvNjKpKJ4WXTfSa/WzRNu2r6fRM86ddgFm+TPVqZ7lNh0M7ohj5pcZQOH7XwDiTQdxCuQbdCNwWlk4QiaENFS9VhksVjn1kLntrGkFmtfpPK4HRcnVzfIDzQ2NAG8RaZGa0PuPGEC17UGNOMGtUZd5g518QzcQQDd7xD7xN6nvDP4I/S53waG8tqcBCvlfUBNB62q/a8vdtV1NVvlgUC0Mmd7zYymIqKVjRnh+uLn4Tj0eITwoADu6b2gvDsrlg8+aKJF/zj/sec4dWlj+y9vCrG6knHD5Kf8dJFMqScSh3dh0xeSVVeMRTzgm2E8m6UStBJxUFrTT6wv2sDNS/ztCv48yb8MBqj/Jbex+ek/txZOtM7QMWdtXIOqJ6a2pOvC4yxJeXHBSuQnV4GWZ5fN4GKF9ur2Uxi0l+4d6SLjZ/vbbokqzA2Jin8u4xGK68Y/37sHphX2qKF0jQaWs8/2ticnz25aBwsUKch2NWe80r4+bIWeqV2xCtdoD59Vcda5Ke1I3Ihxn7gc9L48+a9IM7QF2ZyK1A155FTjfQNDrxDGcotOjve8DX23CN7RmfFLW9rDtMRNZKMASNH9D7hyCd84qdRZ9qvflZtTaZm7qaTdGg85E26210nraQZm2aR+o7FF8Z+hJuxrzruRZ4QBsyZ9kJFj7DmiQshvq7t/NTdluGNU8c/5Mnocm+t95JajAPtsew22MXDa1W6o1gB/dkZzxXzzSXeGAjBSNdk2pexLa2qLzjVYQfO1+eKyEITztNPJY0EiaPppFSBjHq2Pm5VJYhutcEoEYaKPD2nyEpwXEBrMRjm14q3KxrYzzvQywsodz9xlqxrek+Z1j4jIXew42wUiVju+3Pw/STy9VgFAvUJmEVvN74sAVNtnW9NB+mP/uilF6hPwCx66aWXXsBe9EIw9AJm0UsvvfRyBOTKlmXTLO7TC3hWBXhWBXhOBLgNueQo1kxubRrn7/OlFV/ay43oVqmS8NMibZbDIP4BgYdsYEAhxWnTX/Hf+00YB+xofh3MePg4wLF9qy8auHCWIDbDDzOuOmYczJ89C1PdC56ugpt22H/ryVsyih36Vqs4vhNpHv/Ayhh1m/CclIl2fQtp+gd67Jqut3jHd2h9wDOfMAzD8KKxoXLExAnFCxor7v0ekS5cbbuewk9CLTGjztUTNB52rOP917u9M0d045lDY0dUjg1OsWEbN7dTynTkIJwQNFdzzyJIMIZu4pp5Cq+/pGL8+L6R0eiUBn3GIKnuusPN9KRBcgNMpEBjYmuO7wvMmBcomvu6mHHngoZGGjLLg+2r+fbMk3nQOM5pbx5GYNE4UdnZ8XKPELm53ycMuXjI/1ika9J2QiiSBRnAYfJ6bV+XEc3khkdFa1gyVsIEuabSBZF72LNi1z4xl/iCgqFHQhTLTBKnYT5HRixtuD1vYxXQTmc2jPoS3NKUBxtPoGd8Z2zCTnbMFkMNLWJzaO2AQczuUFyaEDmfUm8Rb7lOFNmemLRMWhYP7Rkg4/NQUGtkQWuoymzNjMoeRgyxOkM4LQ7tXJlPzgtlBZTUyXFRHNt5MSU/F6d2/pqB34qLdu7MzAfUoR3MYapoBGT2pALX84RpFG4uxNjUiTY41zTWYf19jgQy3OEtR8WBsy/hLFWoi6m++qLdBCFGIEtgupEX4rGLUOnL3KgcuGpnDumU1vnQgPgC5FVvUVhqtM+oxIEHLHbosjS95myaVP6ssWSr6jzzsu5hBA4hp3mTNHXEiuMBc1Jc7EmUW0pcprxlqbIdgJMcpqc9pWGqHOQjHwTlOe0yhw4ISYH2Dft3RnL7Yft0mGKGczBg9CqXCwFfxmN92df9DcZK7qblD5LaAHGT551AsCO5ikBmKZ2FlOtqKHLY0wkXVX0F41vZbRmUFo5jsmVT4w6wB32DC4HSJSlEi4oJAHaQhxSHdq7MJxeFsgJK6uT4uTi282JKfitO7fw1Ax+Ki3buzIy9yVBBKrpy+Cib4hoZSStvjfSzAEthK/J862Kx7VPV7lM9qSfQWkv+GR13Jn7OULWNVhxL5HITQr0vhNngSfDCUgOGICsRxAJqQ1AHeouBbUX10AszZ0ze936zR3Sj2fA8TYszKMEtqSSFxQnSQYAHgT9XaTx1V8wIiRYrPacEs1plexFQ/Y+7D8wKsxEkUaej6Pj+c7L6VDp9kz6/4BVkCwvyD9Mtwx0cd88Wd4ItWytrEX49SZrY94/AmbdE0sJLbNbonBqVN+qNtczq7lPeHbcLGjHzADkDuhGjxHd0XVKA6NvLUA1QG3lOe94V5mAqY4ybM2Mv0lpVQFmCrcapuL6Kp08BnUxES1PM84JqCCJs1RSishk/ksF0qgtzuhQH4N/4W7sJlu33rc2Rjae0cRpld3FT978zgkXwhRODXr8s1kpok+bA0Cpng5KgqrNUYlT+aCXBRQay2y+3iiCnmNLfPLX8ANlGROhbzkBMZqp+L92oZQzi+dX1IZY0+9RVRdJ4yjJFuEgPsmqhKevRDL8QUqANDznxSV0qfA8BCAQhA/iQYxSHcSha7WTyqqEX8EDBDgTVyWeL2icSbtwgx7KQNjZynxNpyOiY80azL3hpB0UQs03uv0GcSmu9KvJisg64UFH0jJR+zgBHzqsBhVnb1RTOK7sZXvNWzl01KeoTFgJVrIWuG8ECESRvhsB8K9KSjQbzg5LLdPXDbdyEeWJTnaqTjDnpSXVg1ddNHZSAcz/M0MrVUnyvSayu2LxpEtr7wjYD0Q5bvUOBjS331HQP0BerRwVgtsFcGS0t7nmmAHwNcy/YCZ4COqCex1lJihg+sZeVoUcXGhHvU61FnYGPW3dNXTbZdMCv6sQ4aUaRD/cDEZCBeYzofB6NmFwKVSz0wb5T6FDoomA3h1H9ZYpJg9EuMKFMsX2X+I8dKT90PgSmFZGoGxG+g6aKymx9fCGoLKaRAzH9zKBerOGC1KOsp1Nf6ndhxuPlpVxYrc+2wBncdZXmbiQmPQWce4FMiqAJLfxsrR1bqsBlx+2CLLF0/LBNwX4odmsFzd6c6eAopL4nTHFBwdAtS19uwxK+5hMHxeDXkVQXRnmQ8Cil6UjAK9xcGUkovo5HnUrVMwbzvjdZEBjXlIlSO1fZysuAV4scwO2DQGQsX9GDOwPbXnqxJtEQq0q2GTICotXRTCuewo3JMuKwaFDJcSG92sSHHG9HDviApDotu6Ru3zlTyZlEyFn7ZKW1tc3Cy89ob5BIFdafLAGxaNF9RCxYavJFd0Ewi8hpgcCE9oWpC2VitnD0YeUt2celrNhZI3TevPFgA2PmMlGJBREWQYqRe1xkHnXweyhxEUjs7R4KXIikgbG8HEoXpbHi0mVHDuwhUSJLQy5MhsA+TaDV/QVaXHLUwntilCQO1vRb+XBy9dmhJWq/gUbigL0AhG8Pb95+bXBLYgqypi3Cg1FnxEKTNl2NgBb8n/61SyYH7EQYnM7mNhbT/WSqMUWYmgErox2GvR60+GpWV69zneWOVXsUSApnr0qN3VIrin8qT97LSY9OK0WBBxSwuGU0//BTqufjHGsAOwJ8IsqrdhCjj4djdctlpCCU8Twn2u9nWuBwSb8xxdYFRm5Ll6unodOt2BorTUIqc1yoOd51vxMZ/WeeBqm9mtfiOf94qOrd+xH6FgeikZNOtSFXsVDl5xJ+He7angXNf7v+13RL8fPI9XJUvf/JZ6/Jku6TXve8J5flam+R/x6u6nIraBLdjDJjO7PMSlwFCMyIrxcyI80KBPgknv+MiJATqHLIggzPfby4SMqas8hExTo/xUD55XY/gWxARE9TnJEkNPVeK7O0xHWCBMdPPwDKLv/ti8YBpxst/v2+jNjetfa4+u/f0/tNfz+oOPz+Fj63Mv9zdHX6v9qTs3jPFXnGIDLnNFM2ZJo/t9ytsKVfjK5GxAsORVIU27yzz2Dj9duShl+koNneQhnp0X6WruzCsfYemdWkiS4m3MPCWInTLiAeclBiEQOFfPp0O8KFO+9GuAZf3hpKgE1yWqhgtMH0YyUFy4BTE5ivP2RK7GdNMQBKSRNaVNkf0YP3BoW5aJFGz8FsC/MYbHBYQD0ae4GhaNYPSLcGExd1oZH80raauqOjuLAubp/kMCv8CYCCl3eiMFRYDblamPqol0C57ybDiAzQ3/aAm7+hMNFs3eIYqYjN2HlORWu0PvJZYf1eoID98XShe6AkPADn4NRXw3n6qPR5qsimqcdhuFhNl2tTwiRcvtkqiBgFl6obDFJCGTwzV2PziATab3rKx9a/JzY1PVL9G0qa9rulYwALqz3YXVlA3gozcYWP9YLSkTRMiMZDx0dt8LJhYsF5pMBBNhILJ9vBXgKVoyheRYKXWOrd9dQG+P7pQ2bRxB4ephvE54jtcw4VKyenaq1AsWeJOqaokhZnkMw49AJb/yKqJn65w4KQ7bmaBEmimDwgiJXBLtUiQeSlgo6u9UmfCXaJPBte1nupEE7FdaAYpflmgaED/fEbRCTPSNy7siqchC9mDHGakKqVp6vhkqG9V/Uq9ayTBe2qaMzM9054EzQA6qszpNd93eGN2zKit7RKtLkkEF5NmXy403DTQju//AVATcxoO6UdDheQtA6zmzDXHlpjs9G7Y0JaNzuyQkBmjKFsi+JS9049EpfEPo4pNNNTqfAPK1Cky+nsGqv2NxP7UWCLuAjgg90BvQA7RaJWRXuCx5ocJReCtIhurSZniQHsI1zWalB6FSRIYB+QcPLWxVIEcJ9F8S0Hn212wVrw+E3KFslIhN0v2cCmGqN2vpJQTh1fFn9+hcnCcG3ThMNFIv/WtHLcf+qhJ7Wm/3esWZKknQK0WTlLD+yQtppplzYOWF1ubvYlsiJdWSfnx2BrDX+vwxATLmJrn5QL0aCX/zUiqwhlIyAaH2v6YXCclxnQhhgv4gSOYQabcAbdoaygU+UwHlJYmDxYcoiFySMQptjS7/hcKKhEZGwNQHguOAfUlgvudSZS2K3LFjlOf4ISoBC8jLHzxYu6ZnTJ8nzbBDxB8eCB3HJnfipl0cO0vF/fbADGjJqQmsr/KbgZvISvb+aRVqe1BKI/ZuW+VZ9RR15yYp+MlfbuNm/LFjufRM0CCelnRKaXS16YYEgT3QncTVhiIiRzKSiKKuWhjG+TtRhzScSOwSE2OyX/xQd6qauSPgYH9Of0eYedO5Opdwcz7nwcmQP0yhKOBaUAHn7F5BPxN+KJxRz22gJjGqA0qD9u0ZmhnwgPE/OWRykavVTJSo81MQDV0hIdWjQvyPAe4ayo9f+R+slKwTMW5+3pHF2Coj1FibLJaR/8v3OKaB4nC3RTBZLXUE8HkaQ2Rp3d2ALhkpAYYLyb98NrI3OifAbFFyJkh0QEVLZz2O6K2OoQ2e3Tgm2SNnyy8Rj9f2islVIj7yKK3RB/uvwfkiTdxPRd7PowEw34Z93E555YFvY1GNeLcVxy680JYcoQ5pBKMjJb9xocqXx+9onJTiOZH6zqz/VYXMehBculYeIZa3u0mIM4vv2Wl/q+77BzvfQIT8sAmkCfwgCy61hlADCM1XI2KRHbOiHbotu+K2mNDUNAbhlmZkGexZxp/N/jKDKvk1I7kduoMFmMg9eSuUQZbUE/Q8tMmuGKNMzQ+I8YnahNFf8Me7+kJNz12GFkTQDnA5mdJaHecTJL4TShl7OhwaIcmjLa+TbZeZO9vvQEFUwzQipNVtLAmnD0PWv0myXoXekwN4QHHi/qRKsVgVaNv+/gu7GzX2uuleYn/KAmckqejSpW/nGI4APeKgWLuQak73qbSNF2LMhhthHrRj10s74YTzrD03TrmtHgTvWNG925HWriAu95nHHXzumVV8sQW/drI/rp9ysFNYah2rFvK0lUAox4cT3r8mVHcO5szJT9B4j87jQ3Lz+MJ5ztFCdMkr63wj6AtFbhPbcPynunCeVWhwXaJUb4wArjte8jhLSXTDUPrZ5ygmA4qXIb4H5nA1wiKVAUbiosm1/FGDYoZXt+sHEr5asUbk4vMUFMr6f0BJjC0lJSocEA6QtH9hsAU8IxPNnOXWGn30XHTSGCa3cwZrt3ylk7YWsVMjzvXTnG7MqryEAz9R4aTAEBwxVuD2p67IhhyCKSdoZ3BQ8bPaEnY5ERNv0eOCN4M/Ux/ndEP4ANuoe5sgWO5Ol6ZPvLzjbsUI0IeN9ix9OarwJXoUMqDzfKw3FKbxfwd4pF4Hyg8DNkq0aTGcDzT6yeSjVgYEhjA8Bt2Ja1DxdtA9Dyo6xTS+qwLggcGTfAXSYOhWoM/sdB9ceVcb0yR5Lfnkk7J0R4wg7ojhk30v0mVm/Z8OuqVEUyq3AGBG6a1EzMzcZAs+kqNM4DCgyxEv3CFNIRmr9ufyVwdPYSU5uR5CkoJDE/bBvyXgORRe6tYCVsWBUmeBlsngceK04BRpBoWazHIa2ewPwoNjfoW90HGaqARVhGJdiTPFyqLIGeAplZlbXyPROWh5g0LWEMAxtwKewRNpGLYAVMTkjFiOk4d+RO3azjsMyFxnfhH8CnMPMBZ7kfHEJYhQGom927fr3EtslAB0e5rtIEYS33Es8GPHt38sQElWGOg2gDTiBq58YLgAbZa3D3NiZzXwix5t46H0cqoqMvQrHm6ECMjUH6GBCLnKRzjwfx0X/62nhU9fzflnRzB7cOGEu0qMEYaBQXGeVAECyREHZAcbI5JUko1m6QYR0mvuU573TgqyMPpg6BWo1g75eRneNOe/eNJzSU5wgmt9pKZCZFy5IQVZsVO1IapTS7jOmmOXOvyw0tuWKp2mJmI9khHOsr3Z+u5lTzXaR7RdxqFlbYgfbKlPa6W4lPrM5lAH1EkX3e8jkQl+/EILVg/nvYWYddswlzj6JSqaNpp0dNo3YkoFTHVYh7dye4FIx0D5dxcnAntYKfhvKSzy0p6C7ZOeB7r4F4Ku4LgKqHkBJQPAGF5ET3Hb/PAbJBR0RkoGI29thvNGRHnJqNc8hZRp2EoKtE302X59myfA/L51SBok5ZQOTBngwtnHZjcPsx8tdJYdbsgHG6fTLaE3/gzj7/szld1boZTCDr059Xt8CALKhq1NJOD6NR3ksQU34DcIDEwu2kc38hbBjH0Nj1wVjRxsh1amaitcxtwlvBworhtTQiIdNDG/QuE77bsDmMwkkkML1GViER4Rcmev2mIoYj9wiIBqFyym9kuWRZgG6B0yLR67pFkdNE1LFO7IP3ruJNQZOZTObkXEXZnxT7m0mstBmXvY8btHa4si+rftZONUN5LQ4OISU69YFLE8yA+RU1cF3dsag/LwntQJcEgxzMXHacbau6j0w+dxd/9E4BzKJaVKWTM1wqKoXgKZoLrJS2show1npI/H/YhNYzNmaC4LnDDVnwZkxsWSenfvCHQOPj9Re571yRsWTPrhtU8ypG18jz1gLjZoWdst72Tkr9pirjbyt+jIqC6Uz9AV59SSBzxT+9EKlG/eRzHQmKF1GMIJSXoD1Ustpzv7i85kn3mJTyIih1ZDo2E/XZsOqqoFzJlkjQDQOnt1lINhpqBkaLpO4k2Ny/SXkqZvwJkXzL1kxk7tJF5zPSC9+hX2j8FSk57LTJ7ZRsZc2V6g7MaEBn7BzBOWDVDkDeNhjU3aiLuyCBmNMVxmH9dVWKtKqZb2mNTU7f2hIIP1PMx+mwCMOVcJfl8mt7NS3FukK68L1/eFcIFneGfShkMWy86KMOsdRZo/tQSChnBTbV+O5Xhu1HbgbT2gpCrCJNJuOwcN8WniZPQxBdf++c/biuEgv1yTMtQNaEYhJ762XVMlezR7O3+r2IwlnJhOMGSoyUuyj0Geu7Qo3FYIQPg+ENMzeDvo2o1QNA/8xLGctSrPZO1JFl0FAkvlaWeyQsR1NubSU4FrtKAndrfJN5TvDiLpjk4zoSTBUQMZTyiTotgYDm2P9MGrzaBjUAmPOhmcTwNyF2WtDkrItBoBhKVfFeGF7htmoRDNQ0rktFBWy4qHblWXmvCuG7sUaOr5j3xQckY40AUjVFFNpRHhQqmBJBwlyVrVNTprQN3tYxTyPGiYfJRvVYSOfkAidNvHHj/SJE2VqxEUHwF/Sde/pE9PkB53+I8XRSXiFmvhFfJk6cu4aJThDclACA5ygdi9SMr/K0+ue7RruovGA9F9hbhIIkbx31Ri6DNTDCSQlw5nfoFW5BdISAnGtk1AbGfxU2WqB9sk1oqv8jHcms1EeX+E4xTXLYoDwncCdLqR+rknN8YMUB4u6usHifyJoZ0NCI+0mRaEs4WNze9gWBzU4sJDBuxSxfEwGIHxOVd8pAQ3ZJpkqPai0ECDjGiruTm0bQBr0uV/aFJUnBkyDuLX4uFoepBI/j65QivbW0qNa0wyUHoC0B7hY2mLBX7hN8mXgCwxrId+lzsNe2zn1iYfKFBdUbF+pnezx1A1CCM4JXG5GNKarzqGPw9G34bSOnYbM+3xOwYj8BgR74QEYGjAEUVGbLCJ47geJveyj+nj0kmqtT8pAsbZzjlapCzPFC3PQJEGXJBRnjQOEpNwyAObhZiyYPuz4NY2/B1QDPR3J/M46G+KOKYbC+H7nzxUkWvwtZymasHgBhbMmRHYx1PA1QTx7UTWXWCKMYd3k3ttZvRBtmqOQ7YvyR+XyPq/8yA7+HQneva/aNBICvTHwxuUcutguxFu4WAfyAHCiogb6e9QLQQcvba1MaMd6Yni+SVT8vaecWCHY5FlLK/QUwXf7WDDJCLzGsr0HYBxo8plSI8M4PL/01olkvGMD0MVBYgM47gn/WI3of0kPm3tpXX9QdjtU0hNj+vi2/y81vNNo4OtPGxWTusBNVeaOg4jD5Djn/53/1SYc7TTeyrDo/pNeAbxSflqmo+MDnoE0iFanEhBhtfgEoUtG9p/GWK3IP7T4Mxo7VUdzp8VUcSWBb8bYCZZhXgViduB7jOxfIb/y7F6eBrBC6E4mW5oKfK41oLwIY14UUvlCtR/FedPUp1I8cFdVHFeowhzpXiekrAnvfqqnNG/7ll2JQgZsONE03bxr8U+u5xz/1dQmExRker060frT8Nv6MzjkwWVPet8Zq8hEfLaudPxssDmEJFO9OUYBfaCikDzj1pH7WQF+r56ntzP08lKSXrIetXTV+2zF4rM3WaNO1fjtoXQnHOrWbKQ8tVMcP/D1yBVC5lQn8Gf0xJvJk5MfONhidyxEg0TsrawtRzJ3i4euvjI22BJF8xlLQXdL/Ne0uH0xQn9vEIepYl92WXC0Wbb+Tp9Uo0ZXvy8n+Jsa6+i8yKelWTimma8h0dNObq8tjdgrhpoZKVLCzJybHwMgwvrfu0UHkmL2riZosFAg4fh0GoAL8dI8H5NHb+GP+s+FP3N5Xq28/ev9Qf+KT+y3N00jZXlC17MEk0bdeD3KQAEIjdoHtS7PFaZYCpvVgpOQWVOGEGpbC7srAjGktIMUNOQe8VhzJSHbBg0E4i3bI0bzOpFQpBaqHDXSBc9oTwZo+Y5dtGgoiNq1+rxnlRVW+T2riAwelrRi8B4/rUcp3Ez8MCSKfFB6TW20yvJ6tXjJ0LCledsT9WsIid7vAZxs0hy0YMmAc3H8vb6uMffMCfPQvLthdrRTnN1iZGcPhdxJnlpt9kwWA1U+6RchD4ygxGg7eKCDgmmteLbYAGZ3l5fP5D7Ym2rWkiONP6ePyxI450+IF7GDdePLYRXhV8omvnrKNgR+8ABJlQn7hKWKY7p0F7VLnkoXao+iXZEaWHaZm9nDYoSej4Kby4VDYI0vr1E6O3i3BzLO81b5T9KskUIg9/DE770BqFuccDJQCvF93yjtyhCA/0TcvQCdUwPRHeEBOFpSW57jCfminreRQfnAebthmxCPo8gGy9FoTu2J7jqwgYc0IIWggnEsDDdruEmWdz0FctECPtbUj0qsP2lgdQpNUFHBiFnfi7CmUqmlgFSybjtp7rFtiOEcsSZORCCaRmAsunB8VFZnIw/uTjI7KuUaEQ8O6c27n43vaH3qshhq/JJZEy9vxkEukbk4YdB1pSZNMaCAG98U847qyKFG3cGlFjWhnb5pBhBp8crOSpBNVqN3rufCcCoTCQBA/ecT9PeuxoPeeRtcc0OXZPTeY4YIePBCM+QCxUEN6qoG977y3P2fpR9hPjjPZ+bWZizaDTc7B/h2g8/LaKdpg1Eq3pG74nITMnb/Ljgdqv9fGfpKTz5II44g9SuL3LYyg0D/+IMhpjCSO83KL/0YK0owdojwkiCQXuBd9MtF+vyBDjT83s/n2ywk74FStjaUEu/8JmDEn8eTox4QE9Tuz8wh1m+G/CzhTHTjydy25OWHxHWc/OQaHUHwlGfRRcz8l/gPj05gQcQC/kD2ruwfUq6STC/8eMscXOcnUDuzXe3Jao7UvHQSVTpc8whXwhXp4sxQLLC0ZJWtkkH15aG573kJ5CQm1wuaoIAU2VUTiODcGIdb93jve8J8D29XQ15VyS21u80Gm7Z5li2t3Tkgmp0gHZaTDiCt85UH3X+/hcCTc+N/pw7Udrmu2yyhJSd7GLR+SNLR1h0A/XgvLuiAGZQqsPzvUNkMJNnb2thcUdNGYDnMRpT7iz1gGI72G9QQ7T3emenOuc2CmVR5LTG4eiHFbAl/bPEI2SJAiTBPp4RaNml1F2y8W/tvpn3eJrI5QNCu11bZFxjWE5bpo/uRaGIj1WaQdrNMZWfHAVy49euuwfG6YqUePP/L6J0e34Hxv9+5P9BKRwcqJOxL8QVqZsrImtvQugjLFdZvgdCXDNpJ6H+tpI+1NiCAefiRjPlxNh/jYGfsJ6bLHgtxFuyPG3UncUKTL6Ge4zyP2AFiFNSE4r3ivuNR6i0rZHR5nPGkIA4O9EzlnFzV2fgr6HdOKm1SFefsMx9Q6/MOZ0pN8YHcwKlhVM4ADzSXWIbDW9DbFTtjmolshfAHn1J3Z5XNlpEKPppSp54JOKSpyZHDZO0r6nkPl5d9o4LOPpPIjkxaYlAOg0pxNcXNSlT03w7n+I7a2YZZZHuOKdUJslnVypY592LJXRMUHrdE8kn94QjfBQFe+yuPm0NCGFI1JkqNU5LZii+tLpwnnbC2fcvVLEFieg30m4F7sCVRwsD71ModjfsYVcRGuvC5OjzNSu/UdXryT1XYS2BkDCDQDlFiSUBVADLlCICwhxz9kqR4p8T7UUn9rej2Hay6CFT/MKOOdPwiyNE0eiMjyi0/SLebZ9Vc5/wSt95dfJFhVygoriEpfVbZvMqCZmCrC+k2qyVCTYxRCeVC9DOCKH1QzNisO/CUjJeOurBxYcFzMbibOg06fq40GNcvaNmdUqVQ9S4N3F/ZMWOjUAqvclM9YwgjpR5A0aSJUlUKW5qjJYi5xUM/qrdhOnVlUxgzRY+mggwFGept707ZHXaVx9LT5kqtFsFulrK3ek/RYQpxN7fErT7/cJirOtyOGEDhtSDs3fnFvkn0ZlDsS9qopgcHJ/ngvrRZ+VP5eh84TqzHYCvRBeA5CGrZNC/KjMKwrfJYvUlBu0UHTrA7hg7yZduYRXd9HhTRHN5gtuNjLHpsbkBy714+jeZqmZF6ihkCy63dqdRdfKJVJzu4MjSP/afc+YZQaNv08bkyZ7b2ndG3VS8tHkT27vyHYoaB01QT0eG1okG9Q2G36Tg84vVf4w82FpIg7oy3Lan/tyO+sji51p6iU7UKOWjulqrQn8qM79/lWOylu5WzGru5o9Ky4Q4pkosZ9mK5ZyTcgrP88QFOXg+mv0wn3bjsWpi02o0/u+oD3o7MEauOunMAFGJVy/41T/B93NTvOfPurKbAekwrf1dUMWhH1NOHKRbEKjwe/8EkLHMH3Yy0MzLaLjeBOPueOpbZdeaVdy53XusvTuwrf3XW/0f9zHF/cWdDgECNXbb7bal/GeLA7dXwfKl+mWOVYsvU5UVnmQO+ciUNbhZrbo+EO9JH5fhG8FS+WEHR/PVqj1MNd2zlu2J7+ppLWlrzOl4Mbk+XKWPhWLgh02wjZhBilstr7LzLzlbc1C7q6Bd312vM1Fn5fXFJg5Te+WZLuZl2omH0r/HraBecMUBjVI5yit12QoKWGFhzkex0CCBQ4glqxTtYHP2E0WJjWn89U2d/jdC68ldtIDDhPVRomJ+VBEEsSV1pcfHjTqKbG/HtoNofR8WaJvbadyfduJZBKBdXw9SKujzrGFuwn1RpZxSdMs/ZZbzOICr+86w3E2KnXlxL+ZkgqjH1vqUhB1ZfUKr7zVKu491G7imGyIln0ISHkbi2xSxqzN8trq/+78VxDlcs4NYkBPmQoiNAeGi0OR8/Rf9sJmhJYji9pF+2QxhXALFn4IEGP6YudV27SvOD8hIh3hLHUKfy5pYMSKRuVUFQlH+8bD5lErhNgNmlD/kZeSJ6iwJHnOTNSiZ4nwzW17Zq5n2DEGTMVvsvry0Qc0+zwZdJ4VoGh1VvQfDWjIukkikpeWrMayTDOlZNeIn6C03QTdT5C7dyJ5aOpu2Tm5QSDZ2QVvrtL57RAez4uU19Fm7vubUIY4RrTUzjCEzAiR1VsQHXQZ49RGX+9UVVAQqrJG99e43zwe80Xs0OK7WrHn4dJqKA+oiN//Wg1GPmhQuf447c26Ynp8vZ+Q8+vIogvhPzh2I8qK7Y9uNxSp83DzByGY0Lwf9Oq70kmTm1CTrS+efkrFSGflNZKexahXk3nX2bNnL4fQx7kSK7lp3D5m9umrMMxP0kKIQLiiMmp/FdyrPl3gs386n9ZW4eHnCcKKL8btw16Eas6x3dehWeR1rvyAe7qVAEsjsKctzV47nJXGwCY2f2oBA0b+9ei2CGyBCJUJHMgT6snXOPIGdsIEOY5wfoZgW0C8iq6HpngmunhZAJMLE/YBmrdNdyzNsM3qHJwpOP8GoWFKNDShCYTvWz+KQuM39sbk22ThlUnUoHDN46iiwcRI6qxPKnHCl7DmHRu2YVnaxT89zvFPOjmsMU9fIleIu0q4w2CQWnwx1vz5yeihHfVMjIcYHQnQkn95OCiPtusK/Nn4HtQsgE5jCRCXNEz6MYzxhTp0c/n/QU22aOG7wUZ+USyHJHPZIMdhI6d0Hwn/0pokD000239GAKcnohyBz/wgJ+XU/mYHjdt6X9mvGQG2AUY3qUpVc8cIEBs0FKn9qhbI+eyJE5vGxflonbHGxFe8fio4GM2aaul+g9s6neYl3DPzIG0pkXpCyZWX7KG6CKxvrdIuof8w2C5nT0vreGrC5ibyOuSTz7SUGb/PI1WjqJIFI/qjs6PMtu5e2PcPNcn0nFuAs3jmdY/Q+56QR8Ag8Ih04PzFFAaAjvXyTJ1H4ZVyZLj4fDVYRJItG+alEyeXtpiyjT45p14FhQFCzLF8CvkoMNUG1dK57ylpI+9zDRWmMiuEUzf4EiiN0bSJWHlqnhGHLNvo8FOqnPw7BBaFGsbJo0s257qMQgvxPmZAKLBIzFs9wAVSknoMOwr0LvGRBGR7z3Bj3BJwAfb8zkxNACkccAFQgbo1OZK4J9mJDBdBLnZlN7X9ebfhfTm66UhqY1cqUkKVypSiKXCl2Iei13KCIYzqIwAQOwJQfsFiLyo9KcFJMyq0zHAw2kyFD39BpDDRAFuCfCMv1nAifwX4T0AY4k07sCgEGaIvpZsVgHFpr083gKw9+rr7nv8/qJyfzhWFws/XPbpLkZpZ5op9Y63Qd62KzeHb4YiOp7wqR98IrAeh4d5MMwmymAqlEhE29XceKEBSLqu7+8u/3w60y6fafE/rNoVTQWm4tCPdAE2aMwHMDpWcDiP0OpfKOFJ9/qvUPjI4S0+/D8Ja0IWPiWsc8Uq/GUKYRMRMdUfMwoylHdRou7rwzUqpqjZRIN4V7fXuGcKYxMtUrqxGumYaklm6PTd403RiQv2q4lqQqry5/5CQMvsrzeqaytDa//Y+qB579GVo0sn7/TeGhi48teQuVvAq6wvMmaKxmM0TP+xCPhPQUGpSiPN68sR5gRPbjsd+THfOsLfv6y6FBm4148emIIYw3EMh4WjDUcdEVVEaERkESHBcDAorH+paURdprS5e/5XX4lQfyRyMYpm6Fnnc76aXVG+0/5LR/MP9yFP6tLBjdrBkjqETK73qIRj/0cKzD+3cAxGZPBBHPj9Vyc69l8++J9fw6BzfDFPs3HwXz7wD2uW/s+WqTVTFz7eSwnOuj60MTwm/F8+2n8Uqqkc6w4USbJWUNG2JrlFJn9kMxB8xSM3E6HIVMjL5+8e1v2Q1LE2fUGMFOfZt4e6TE3r//KBcb3qmFpNWOBf7qmLf4WwOkjolbHlCIgwlpr1WLO2NdmxCWici0d7nmCBnDmmlY6sJ53rttY8xu91s5osOK/h+C/Ow+L1ZlTHv8aB9KMiHsEsMvMNjbv+XiHqW+5Wg+Nb0g2avaoTOO2yomXJV7pwSsf9kPfWVb6DwNt3QWca3/gYs8Y5Sdlw3yyywQ27IzZ6ZyBPFDSODN0mRB0LwPhzadR3JZ7FqOvjSPcYLuUklPIWf00C3uZzfctdJTkSM31bu05CeMHuAZvEOZkIN2AAqW/j17QEJaV164uBJX5chqEXre65X7JNUCKDUq/77VOFxexdfqWii4pJnzzBn3++7Kgcs4zUkggzHI6O0jhWqNWGVoH2oxUWKy2K1OuTt6v/DWtLtgSqDKvbn3nEfAj6xwtpqJg7VBCjAPwgSxiQCvhlR9omY92xPL/ux0jNJc+gDGQW64z0Zf+TSIpg2Y831FAEhWsMhblenoiRMBcVROuEDk3F/isNnQCAp8F2j9oygQ9AdspwddIsCtBXw/mD8kGFDS27wpxvvhLOjN44ffGg8wZ8HoKPc1U0iOhZ+NqaNv6pJ/w1jSw6f1fAsb9pHrNSNz0eHpkW7jxKr/UnwY0b1a4wd3lmDybRuI4jj7Iovuqals4bhERHkah061nh9dEje6/R60UaVt/IWMurmdfYq3amdFdIp6R0W9rq9pSn8j/6+jKgoW74e2UWcsEQ9FAOipltqfJmL0m7JJhL1hkQm138olzstJzR1NRJTPXJnhp1aq/AtWxcGYsxcD/xlH7KQMlYYhnmgNiJZRWK4NKo3RFr/tylcodVR8IXEuQ1cdtKTzOPp8q0KnfN9RwgxEE/1FUVbtyOx/dlvReOmxsRPZoQzyLq08lTAkPeNSqLN/j+LAg7+FE1+KjUSEdtrpA6V7hpoAT6zhMlFw3004XWAxSmEV2CcO6j6kCdqBlfWLsAxUTObX27+8XxHhN9Vj/zocvvrIS3lXRTtZdH5vIQmpTM7enIGPtj8jDtUmgO64XuqGAgCR9/0LrESg9sYjDYVoaGrwWDD7rhk0Bd5BB6UukTon+/NXPxETEpinfsIXasmO9CB4soO8qiqpnZUwCmuOl1kCwLs1vTuMhudTo4WbiTgkVNo3pLRNS7fjoKyuVkRFIuNZ8p+Bzqy50NMLBYQqG3BMLb5hXUex3USosl0ggLAVVWSZwsSol4bZ2gy72iQKjKo4BdK6VGPDGxTYJyTzV6CEUdO1QEftEmRJ87Jym6E3VguhqlwcsJF0e/AC+lIJCDdOf7aDjiWF2cOGcOwUSbLKtKu3HINuzX34wD/crZ2teKcWEv2NU28Wh1GPK1WoH7H+r/Zf6U2MxhuKcTuH6WKuTbvOTJWpJrLG6ndD3MMksziwKtLwCRP71JO8Trjn6tCBu5C8SqQ+J+v8zykBOgQTYeO4ooUzZ/9M18zUB9NRy8Hqw7DgufGUHFAF7UcMxsyUOBVadpzRkBcsC7/QGmABy+x73rjmfxGxCfvdIOjw5NWiZ+ToY6hyvDHQWcrUOS0cEhwX8LXzElhCvX3grDHYv2kNCh5OgHc6G93DRMpKc3wNyM0I5YRFSWG/+RUKXIm7xJFJ6exrlfhQgpUtD6kqBnbhr2lwNlfpikWc67qiNT97vGqd4tpzMbLdf27PHWNlIIOpsejzAD/waRrwQDSdHgsFKpyoG3VTq8feZk/UQvT92nKmR5a6njBdzIu4QdepHRluefkjHd+TLCNAOMeiW8w/cNlRyMHVai8j+O/fvUjHE+M0gmTubu4pH/QsDMENCyd7Er4O95fnAz1m7Vmn6zZA/ZRATJW6U5PU6//ywhD0LbSCgvktkWWvSXNPSl1n/0uFnwwrs01sVegunEzfJIwUEsC6rPbF5HRNZecXi5XozgoVQ93c6J7nN7sYUjTxXg0xbM/i7Ix/HA3pBHETvB+k5RLDXTQJhxr69M/np3Wlt3wYzr95mE1PNReplduGH4XLqJZZkOSjHnN+qMX/uORlSHu9l8SkGQJ631SeoJVv/WsAVHu1ZXRzDubOmdbxMrvvJGJugqVLrsSp5aBDt3lUJPCshk0qhHKWKYqvUxQ+khMD8I1MpSohoyx8ClnMoFFvsd6YPknGuH1MM7Z/z2Q4VWD6hch2Q/b1PrqJADJ4boeNuDF+opP6aDSMf49lumQhX9YIzGQ1kexkd5vwFRhLb2251Ez2sg3z8QtchIWlIOJ3eFGVTNw48j/vGH87CXpG4QZiqUz26MvDVsEHstQsu0eENQpCPXBXV5RHb4yvWeK0o9G+yHR6o7osGxTI4PadDnQYWnyAallMCP9XXa6Vbnqul+ZoBUJIrI0zxnNPfgaVkBxJCoT/wdmZtIFePEfDSUoYGHTZ3wwASXxHzncpG86N/fTV8pr2dit2jkciFFG6Kzx+DA6uY8sLpppvrKmDDgz9FRADgLtnnkjYIoYC3O0b2+hRvVTJ80wLQkrqtMyU1jxuKYWPvHqnBvKE137AqfePLEWE8AeHeklXQf+iLu2ZyBxvkvvRwSY9+PVlA3H3sen5TSrKyVl2d1eYlJ9f31lIbi/ADADrL9+2WsVOVxp71TVkfJElwDA2P2VMmnrdBxGK5QM2uL/n0KmH3mR6U265a7oMVkQC4lgOCfsZDaFEzbmaGMIieKelhcMf+ZnO1zXNs0qDZsOwmPz2ZdKfVP1udRaBCm6VniteQ57vSpf28kNb0qpm2CpJ9a0fwPWg2VzbSSO9ijlFOG4mSiEWld66x2TYk6gQGXqtKZZJhZqiwyNO7QqpGqforWGZ/oX0+tm5L79EsiMhp+/hEhtfhwFbvxHl90hTop85U8zdNPDoHhOj9t6qib9bG+FBOs7tS/6pNZl1/Qft7OQx5eCdJJI3RY0o89aYhFv0T4MKRh1Rbukp7VnUYNKuQWKuXyd5B3TrebDL/hyvyn9GiH2bmE2WgyavxFJq03VsOjFjXcHF/ztEt4fJlNKof8oze+BYKUd/JZQn7SX0MNZG06b1n4he+t4h9BIfOY9XdE7dCVoeYYdgV7x5qvdqyMaee1Zno4AcFRGhvTle7C7Ptd9eySGqWWYNeq9aj7HHrnN4iTUIs/N8rNeOV0NC65+POCm2XaFrrzJvSdhEEos9j5aTsSl5UdHRrlNfAHVDpukFjGwPJAJvPUG2a7SbRqi2s1EQ7TOHsoyVOdwVQNodot3mysUroZLFh6nS9udz100+c6oTb+iWBqr8678NZIXK8uX8eE2cw4XwChoYMteJCktq9kjfbYoLyHKMzusjUrjquNdV4ItQCku9ogwJqMTn4E3AgdXtRHrP1lmsShUjWbrf+n7C5sjcbVLWW/2VjviEdyQii/ovOA82oyZUOUeMZn13f25GbD6QzuJXeFnXrYcphq7HQ63A5ucLpc+hYJ6XPFWeyakA9G62vwHDLffFXJnWcFP4KCmTgv8Fr2Th7RoiHpZ5tjmXeCTyjsFGuImcVq/z5iF/C2rs9mlWnLZpBKrNBzU6Mg5KEXo1fNvue4f0zf26q5GzHln1Up4cUv7Z10L4ZwsVGx3jB9VmDpREZbyB5tD+d6obSATFO+wYtGkO4rjpMi0VEFnPZvStUhCVg2BFPX1gjTvmsjms9Ga+HCma4L7eb05rpWD4H0jEVzlYunJtq3v/8n2ZLjjFoEDUWcQAJUWrNziHuHd+X8T+UL55MdSU/g4CSWePim0MVoiM/GCGqHFJulknQBlYHJlGco3Q6FWKOhc0herQRrx9zXYMW1hkejo4SeZoUxPuJRKF3b9AwSTVeN5lu2a7zzIoLRlTnXTRnnbtCKmqZ+r7C0aTVXQtIG9rm10RQKZxlmrSzadjSGN0e4MIjFxwic9QMxUXaEDlu+u9STG0gRtAfea+TA0vpH2Djalia0raMpndvVJO6Z0TE8vgrXwyd22G5K4Rg4HLYWHf478/He5XIi7BjtmgV+ikrZfhJU6bDpsLpio8CbgFvLQeYg6uKglxmSyUwrGUgOAM+ivRxvFyowjTLkcc3q4BbDL0Ah+q4asrDUElQsdPLiW7EAaapgCG5nZl303RRmgi2xqyJ89do3NJDUeYv/qiRJnqI/3jzK1n4WAG6e/rTG25ylk4SjOvkHJapn7FXLtPFGx19yu7Qj0tm6G8n6DA/rGKXDpCcF+9HTO0Mzm3ZEm9pwZZlRHS+IKTOS6TPCJqaWVn7EB31yUpkvlY4qcB3uoVxtlUIr5v4uhobOZL7iV19kIfnaEjr+MPcgNu1zF8+ayirObcaftmbhp6Dfm0dx2Gdznh4FM0IuRQIDVgEvIlqtw4MgobzrICJ6ADIm/dTIvvBFcDPWavHWplaZjqGPNQe2wB5L7ODXOfTgRk7MBWMI5PVWQRAg65fu2vqgak6inOTofMBusgbnvbcn01oheQjmCYyJ3VA+5TSCJyZdVE/mEFkaJ2JwdwzGecZpkmNzqvOptDYk+s+XEt0V0A0Kf+FTJTPMnTm2omCfMmuXKxmLPMV/twt9S+6gI2Oo0n+TtaJxAZsX5xTg5ATdn7W4RY2Sm5UoHu/oC2MfNWqVCsWRPc8PD1I+tMEN1jYXxg52A4hghTLhN8Yh/yhJ+hEPggvx9KjYbsWGVHpiGscNR+Jg9nOkHS3HmaNUROb4swtMI2F3qHvN2V0xa8MymT/CaY5i5rY8vK2x1EuGlFd5cD1SrsNHR8Mv+ilqBZc9B6MQ7X9V8ZYm/iCDDkMbCiiGsIHbwc1ogKThobH+EYuMp2dslk5mIt99OBUaZFtx9uNr2XrbTqtePQuFZMYyJSvlDh2UsvyBo2SWS7mYT+3JY3GJD6eWMh393C9j1MVZFoTdbOVJ6Gv3+P7IGT6+0KWl0F851k0hfU2cWhmnUeRSRIVk26HWy82sen8qxqD6HdE96jQYgJQDNzRS91e5gFuwBlWXx3uIqzGyq24q38RUoysqPZPWnsKBuZv9NJkuWuv3X0HaL/pu7qsGbWsfgIA03Kq3Jc2p1HRCCfZ+RU0Lu8l07WlSh0GH3eLICmb94PF3SN5hfLKGtdBbpa6PNtQWGYPgKZ1xMnV4+2m08Ett+Wca1CBq+5M2uM38Asu/MjFNdmP0icqeBz98tgYGWbzdpEQk0zaGJwkYiuIykv2y1OMC7yndieAXdrtdOloS6/uUacGlnDTMrq5Oxs1kEknyprcJBKSa1tK2ZXc0HgZ0tKZ+x936M+6bbiIUO4rlFDgVMiVNI4tUOAqM2LQy6oD58b4PQNufxbHWeLs31n8QKT0sTpQxexiB+3f0bPpzmqiN6eW7C61KFExu+nmlGHXt9Yh7nH9dyoZt7diuYE0EmW1tK+yOXFHnRrGVyjEnpqbNsQmisz1jR50K+WdReiNuBSCKhwYLvJVDFzTGO11AgJz1K3l4s+eqHXei4FzkEyRTOvUNTDbCwyuZZB6Y3/b3Y8jdzLmAZN1D2U5u3XSTNX2wzjRQI0ewhH4BO0//0p76I+MM8G96aj2yPFTeQ+nxm9H8w4bJ1Rh1EvLv5GmeuqdCwSYbaT8uD0dLyD8lQtNnfEJRDkEYR6d/bQp/JufkcdZwdKjlw+UCjW7JM4XjlTH6+aq8oZOXcqPYzRQoFd6t3E9Njy9pPEzgFUXkMJkPXHtJ53JVlOmNFtl7KUQ5nrgmL96w2W+tMwZMDFoGLRUd4RBZaEPGxlUuKDvpeGGrzOj38KtyouxD79nl/L3X1k27tO7aMyS3dwqhfD5rc4P1b2ubsApZhiv/GJAdoWIXn10fj/NaiuBIA1XXaWRKGVXFma1VMjnU3fE6eLKM+Ks57OeVUMsfMKLIr10IIVQleZYphy/ZQA8B0yFG8HUNw52rHiEcEs02gWbmI29AaCIiQgeMjjpwR2qAaqibFlsROBMhXcVNKuY80MjB47WZnqw8mndEV9dogO/sVjGMU6glsvfzFSBged5ZMkv/LYo3l8xUjXjvhF7TSku+xEtSsGMF5MXpvQCWo2uO3hWl/OXpwCWRc6WWmoAP7tmUNvyg0pL6z8LEiNm52ImQkSqjPEErMBpOcEMxIqGxUJG73MU9QbQQy0eo54NqjicJBRNh4kpd7jkFYzAZkrY46XQCfJWa4nApxLvgVzxJIH38DtvryIbX+ydieDaakJXJXHDGyQt3R4IeeS6kjDn6TifH6CrvTdp473clu/Z/7ZXJrrD51LnE4KMKLRwbxR1/BXyLNCGuJqlwzq0+k+G05ijCT2/jcIVPx9u0bMN6/3Osr7eN4n9L0EKwtfbfhRZafP6ZirffX8Fj3lfbx/uv8G33HmA7rbHXGiz07Gz1uH3y669J7Zsl+Fjt0ubUnw/olxYeVlPkNBXZHyOpBLbdrPetORc3s63ngDIbKuRQSffXNyGDMWN206ld+fPSLHn7ECR+9Ywr8xVFrpRwfcFIdogq9g0mrjfXMw7xQ3MxqzfsLRVCq76JZNQykgmFgTStBDxtJBhpdSOTJD/LyCQDOqfIzN0swzGPZR6ys8P4RBmYTBmJGsvgwoGnOxD8BkfGL+1B7/D0o10iPtyBLCDeyeqGIgWnhQ1jXVtSrwQMSol8Mc3Y2bX0g8rofFXAyJ2ybqoKTRZlKAm4b+dmrn5NYl7NAtEzcfyhNFp6x1GkrSaCySVPd2aUbZFVSSx7WdTszWYTbL3d2HCVaQC5Lwz6kU/JUcn5/FzrugllT6SEFqkiu4HGFNWZamDVSIbEOzWQgCIRiXOoD/hUHR3kri+R9v/UnApAaGWqGX2WQxTaHj1mRa8FlF7urQWvPuLEmEyuI24CNzEMqUZRLg1XBxA+6y8dBc+bcPj3Dscfj1TSUNAzXkRbQIhnq3VMoyq+0z+j53spISmueX48dyYYW8PQsf1TJE8Mp6KaRjQC/C/niUZNiJGjvxsN46JSRUxJoyIX9mgpqhbqlBeQCY03Mn0Est1NiBaeR0kIHBtYeDN1YbgVPRpTfKylWgl5c6ahOOJ2tuP+ZjxTVNghgNY2v9BvCko2Fcv8bu+xDiU2i7etrrkZXIEhVPTAUPXv49LzORRTuagUYIDWmovn0b6SFadd5x8FPplpjgiNuweVEper3Aru3lDcIL5MuWMUGbnkPNxPE3M/eGzLokKOO7vcstYYfXfs7qhnPNHI19xXpcrLLrjDp31AOGGPtyIu7k05tgHthXFwNhQ6y2483Zrl9EQl98PcOEKv70FbwCSaX368Xo+j2VyWTNw3UevhcTnT3nCw8ZSjiIgO2NIwRB0mDeCdHAA9Hfc28LCI6ibQYuEmtgdkmX2tvv6wr3Kl9zHceRBvuU35bPX5gRQWhQfj2PmnQZUdnKioxqMrFbu4Cdh1NKNXb4G8CchSk4jizhNAneEX5oHnLERcU00Rkc2mSmUsnW/x3AVXbH44JU6wTYP8hCSY2w0vtz0v+JQeY6HtQw8jLsLyKyJm8lfC+yM/GrLRGpjTc28S8QrOna3lGTZw1MK7HW0fp9Ho54d2kysZ4U41jLRRwicLOp0sJK14p8dj81uDaDszdoVKilqiyTYitBeGSGm96hDvEFI/RkVQV0qtPTBn6UFMtow+THv4K+hDuxL6oK2tEAgRLtCANFW7FitP5FZTRDEdYkBU8GDGPRIyurzaKIUHUp8/oNhgY0VXhcJpxy+qKyMzpfoVwihsNAk6mqsB/Ix4flSw/hOzdetDMGqb0GZw8N/C7fNseL+OCh6pVv/Fy4lS/xCqfSqZs+pfxe7Pm0BIJgp5io2sxUZC8zn95O4mqpIW1fxF32NNRFj3JggdmyFvoKp49mchzwnbEwaKExV+4hovScQ85f21mFyRYJ3uis0pfe7vbr8kmUl8O2Xx89uCF3c5LD1ofZY9ekoxfbum7KsBgzpFJMMNGsrCo40ONaaJ/cbEcEf2JPbrh2JZJvDVlqiVfZVQ1se+u2K0jip407S4bmn2qUmqKQwDAeYtwdRY6S1pLznrgWJCzqzCXVbYl8oKAcKHyarp06cpQUOiQ5REIXWOk0GJsrN9KIe+LvVDlT4z9U7jiXjy2Enb4wSoM1p9SbGT4laksfgZ0td+fDqIdk2cMGirG5CUw3NUeJiMijEHw+NPsRXXxVos06BXl2PtyZ0csZQMW7uUNixTkAYOjsPfMblZIX3HOpVslSVPNMH1pNurmXZaH0TSaXScnHAispfGeWWZYBzJ/lntnLxi5gKdBd6DlrjKMH91iJALUsq3yhn0WNNHZZ3UKjRMinc0tKofDnBZAyo7JfODNx2+K4mnFST5taM1808j5kCmSmFc+G33SCyCpnf0TMYZlW2BxmjfITBhISPMyg+o1+tLccPzmDA3dLZKZNfKlNVkY8Ds0sXA+PJRr1zaUtQ+YvNgFaUH4OSEu505p2MfnOOyOqqXn+qp76GYTvzkuTFyphqXTcl5RpdmBzys23+1r3JhK0qJVkm0F0XhdFWlZra94qzoDCC/PK3ISJMp2e9gzTTYVELScULUDF8kIscgnWh9R1CE7nEA1ooEzZ8UREDPALmHo2mS2kDnXj9lrhyJCHhmpzZWp6AiqXqOd7daEdKF/nh8ocCfRW8eJrhD35zonIZT7YOPPmQj2/eMYvIsXACZUmbu3qSPPAPjGbkKKCK2RzO6AF5wMJjF9uO74fIut0sJwyndxbGCtMvT2US2/n/IPbclT/6fTbw5K8+KF9VfrKuVO4mdF2tCA5+qFSO7TvMAlSoVBot680ljUrCBSCGNM8/hh9Igbrr2X1qsy5Ry1RtAMsv6KZREODcu3QDPukEHtUNsa5x5uWP6nHfe27W0zeywNn1m2KAPNHmU+nnsVRB7tIbcyFbCBAtNw9LoaEGrojFpHePnLfbdRmtj0Jkps2HseS4UNGvzZwCwh7C2TfffYSsNQ0NWPOgZjDgyZt3sWpV42pO1KVCCQ9gUOQgIu+h478CcvqUBHgl51Wwd5U2rFm9HOmxwJV51mowcmoIvFHBcyLOWHiDVhJ0usaGnAqA/i3uRncaNyJqeHXoXUCJG9UwPY8hIzeVc1zr7xCLtSpES5mrGrP+dv96h0PEvmDEwIZSJmJNW8eCy+HaMDaDD1GnTGTW9/ie2rSphH17jolvfcnaZ+8wUwBQlQwKxpEJF1eJMtATINl29XBWRCJYywHtEnsQEpYTSszknixECpYpG7sHHfLEnV594EtWGUvPBYbfarH+QCnsUA8FbR/ZPuk54V6lGRMoMVHe6bGeQsWWQbdT65Mz7BX/UI2uei43xawjUbSRGcI0GrzLbQQ8CPKeV0vUpQNCg0hdVG22jvO3Q7kNwh41e+9ExJKfbuW9rJLTvCx1gldUMw00IhamTJ7UOicTYZtrr7WywsKTJ+sgrU6SdaO64wMhFBVIMbo4LpK6gf4lUDyakwlc9R6jw5lCzkrHrxWZkboTNodT2lyWZG18eQUKNZzffrDvQ7nGeXE/xuAv18rPaexF5RtZHKu/AcNVxKTK0zPqwGZMH17oHjdOQ6qY+C4Fq4gmxm37mcrColTxzWrizkhJp0GKPTUmRqOGiJr5AtUNUkEcQ9reCp4BB/TuFESOvtFfPlwu+v1RFJLI+rnMCBVE3fL7I10JHMXEe+0QBpn+w+aOXK+XWen3HRL4McYSjFA07xtIlhkxSIfgy28mvadwVzEWUGvl2x7AcjpO1rZ7/ADK0GkCZrAh8Z77QArpqhHeDtXcPVbwRlVNVDbLsGZyyJZrqHFiNV1I+3xkiJhjTnPWf/v6Oa4eM7SKxPZCpZ+Ouxc6Hy3xilPdSmqKq9fk4HpSdBlKrNKSBAb9eFbafGqHMUfyai5YlQi74Ufj97DvCv/f5+SLfBKPplzzchmDuVRaEUzS8bel3JcKA45VlcM8lIcaPXw8KhPA+NJnwKBAoChMRHhmHwpRd7nGmXHDrhzK77U/G9FXk84fzLlWdOQwFH60jTZWOP5rdniz/tH9920XKVjQQ65x+FGBCv5hwvJEVP7ojzVM/omNR1CaHHadmGAZz1VII0DTx3YdJYVEYfLneXoopBvZUIs/Yx6Tg3HaC3p4nZofJsnBKH3TddtQS1E3gv2AnFAX17PqSYIeLOG/BlohdkZrj8iY3rWbrMQDGQJMOhf48H/H6sk/ENA7S68Fp5dJim9y9PVhFknuAOqX2VOvlqer39J4WDI6LfRM0hrhZT+ytmerKYF4wCG3eJb0WqY68owilztDdY+kjRosL8j8Aoz3Ui4Z2I7WYuLKzfKh1L6DpzRHH3aOhnS1qAK3nkETBNqXluXx0bhO0Wb4ND+l4x47cRg054R9TzUW3B9A3CEW1u4bQLUcRJC9Z8hAhoTq5dLToST38aaqevoUnc7xeNuQ+8G0+/NjdMLT9heoFWSWyUDshAG1lc8N3PdK2jO/ByXnB2nagxzzw89VSaKFXVfYbhiMpg+E0nXbuxO53DrSTq7xbx2k3Lc4v69oYR6pEiGbvEWkl8uR7ihgG2Td5JEKhdgNtHmwVU5nICE6lstZ+Ye/6kEUL8xQ9SbxNEDh2H+e9GuwhwAzwtEdlCpFhbnPAPgbarR6LFBniLUE8r+qKSe1PLh03VhZdA4OpndXU7b5kpUpIGf04EOR0nS3g7u6czr041+6lQBvOh/ZN3YZ/NN2KIpuxKfA34COL6b3oYPBIrho1sogiEpaReLvmH5J6Pl8Xq2MhSwyvsg0Oqaq73w/rWGg5NQbpih1xWJHizC9K9rr0I7M3v5vSu7Ec+6stdKVgBSWC3J65OLRnzpfVJhBqHveKOjjEqg6V3N0rD9wKlw1q6sr+GbXTdsBxrH4AxgQRgv12P316z5p5jtwuon12S3lSJpKgDE38BEP55v0zkXRsj+IPCMNBhPD9lUuUUCQD9qJftJUq49JMedwIs82xTtgt0A760FtKN0L7k9SHbgTtOS3OedE7qBSQmBjR7k4EgKQ8I4wE+qAE6a6UbbQDDeBsttsZFjzFpFq6jQM15YO25adUnaR1RGksD8byTZQ2sGstb6KQcsLPNG89SxSLi9HXpVp8NBtSqUlwJ2zHkBiqcG9RuT/48/C2zcIEXaKf7iCqlGc6tOBMKlw2YCPE2IuGRcUP1s24ruRdB6whHuexi/ZIhLLi1DeBD8Wf91k6p/+LmptN0ujQl/zbppiy963pcsDaZHlwzGwfdZNAGNGeLIpmFcJBj9VyG8c6IKmIhMXm8Z2nhd/8hCQJXjqrvKuL4DISR+ay94/Bh4ft3ou9rHxnCJliHFmG+cu+j96f8nZV1I6h18Fn2iXemezvcLnXaV9AZvNisoHO4RHTJMUItskYSkA2AqolIBkk20uMcU/FiIXIJrKYpJIvDPmRz47Ak+VP/PCkcIEiJcrIpL2iMGgYKoXhJtTOynjT3HHip6pIZxfxiHLBpgYsJ1n2G3oMC2qNq39wU0N8GfnOMsOj+KB1YhW9vm0QK3lKsAIcb0D89CSaTDugntp2ltrH1SbJqqDAaGw6EmyLsKLkw3u0INX8ykHGCww0o1SSyVuXP5jJKA4GiYnvVjNk4fHxYbbFpXJUSt1Kat1F1Ldtqq4FjQDx26Y2Qe42KVlq3ErAEbmzGC5UUwMYyrxp/MdfccUfFqvaD7l17KJvS5VvEmHyySK88d847xOReoY+wDLh6QPsyt74DhEvuB2Lz8Ft2PbehACZglMo+mMz/e2nyNHEwGQ5QWYP+vKpXF10XD0Q9RecCcL9dTJdZyxC94yDUgkDbduqwv4ieFfZqXtvhHwcW3xyju/XhWhvEuY+9yFSWv+x1ov5HhSi3PS2wIYA3SnfLdTEloD1ukxWFoUgQ9mjEQfd8OgNQDBpuUjJywDBOGIPaOGUyzbzG5rXS3VM6T+F65w0WguerjljNSfwBhsANMrySokQWhSHS9vikmE0p4hDCm35FaSizT3lVOU59QSlBWU9NFmf7AgE/WYsfkBk6hsFJcZ0rJFvYMbP83ovXkANiVZKbdKaZCcgO7eWLobFPCoX0qtMOUmO9uBsWQcg8+I59YXGLvnz5gJ5q8QRvE1G44vEdeV+CbXOAdiSWeSHH21RTPLwKLXIp7viDw6OZFqyFYOyTSSQP/hTQ/iPmrDpUny4UKzmf2bCZQ5HRvOq9bjcGH+S0detLeFq4eEcLx3NUjY5pVj/60xatkTLwfqfqONmoWZuB1PiMwM//53/9i9vmZffhqE9qRBHSpoG/rEdNNVogxxYgkE9sSk9E7Eaf5gFNW9jPKcIi7qO6OjGJbmWZldqKKkbhbmMXdieXOY9zpNuzo5vVc0JHFtOfJaYrGh9LIXPl18HKb2B0PnAoOhwPipL/a5+dQv6ERiQcLbDzJIU0wRWTdnIuiV9QI7rw6CFx7opyRRTdeLka0XW6IUBTSY4J8mUIU7Czg3XowYqOa75PrMb85aPJnDbSMgVqKe0LcrSpeQs5Uxfkrm+82cFVPIGX9LkWQsb9R2uSvR10+ay19+LsVz3MG4fqo0X/nweoDlSozaDFqk3EJ7mkuUAfyMLs93WV8M7fjjJkK+HC82gQkeR8lptvZdriqv17rne8CmWuRzA8Mxofx14Q1YlZxnQZRFKznCz9Md1H4gPAxnYqe277m4z3TAbkTI9XKmZFNXrlt4JadEX8IhHFGRmQy7j/GTe0BDKG+S23R5+21KMtxSyubqiUhC1SZ25pw7l5lKPsX6yeWci2mQcmfIEf4ToZmiDlCfwPPIXxrRO4o0U7YLEuRzwYHrl1OybRY1NmxdRWChvIucM+p5q718ukFzYBcvn5VomXi1h6VTaJL4s8ol4KkuLpoKf+2pP/ul6/Kid+MahMIQ/GVOG/Du3MqHQ98x92lPGPTnByRUeRTnZ5Qe7WxgtjFVx+LcxQFi8sW0eZ06VxMaQIEv30taEsaQtkrqN+wj2Xv4w+8e/zBQT/z5d4zhW3zntAuv4tS43syR/buL07C31+GlfWFdofPGIvz8tVVuTErzRGL3Cohj8Em4wVVFBsOK32LK2t3lk7S8km/soa30ci9qb5e7BF2+AY61KnKIFAWsfL0kdK2PvNYx4EDCFxfP1RMdjZx1EjV0Q14DmbcHSoaeorNSMNCBzgQn0wIaJ3wt3PqjJcW5ScFr0tdXAyUzX7tf8UxS5InjSX1ejzf4CASIpiTNQ2AeecWEcY012GnTrrEdCiad2LkZUVbjDqO3zbh0vBYaf82NOdF/GplM/RJrQdbNcZ7GCCC+J1VB++JGRcU6lfiiL6IzH9o2ST5bx7i4aiW6KWqybSH3w1/OjGKYvLYgTH6F70O/6DpnVrDt5MW25LzQ4GcHt/6eBfAOQFxM8Px+4FyKjzPKlob2LP2QPKJCSipojue03fT7PQDHqE9MQOHnMjfplRFX6tucrBLXKQ2IJkTXImXiroZoSLDi3/Dxx6TBb7+IpwRrMpyAlcVGz8eEed15GJjRimj1iDa7Kl78SeW761jPzzw0WjaNNlKhrwwRenQXbBLuR2FblPPVjER1FjY9TXCsHbVPrvAaGH/Xx3AvzHZsCXsdZyALxlHzV35+IfPL/H/XXozW3N3hOfdZvh2y9O05piTlW98SqGxxTazt0xAQR8JtHRPjOGsEnvHkSqeZZoLUBNHjwB2W43fX6+G9RJI90o++9Wcvwhz7hkpd1ZODHMo+0Juf1ycjyGVDT4tqrJlqB18/fC9UWZuMU1v08ekABI5RVGcdvYUYBPcJie1UjlJ6oVT3O6GIIydsVc1DbCW3r+YYdJkFuKABJI/M69/0DoCgiEePhk5tTZ4OJGHly9JSGP8K90wecZvLQltKqYn9+K/aCd3HGyc/i7lCFV3pukXvX0yWbJ/mrhR6qi1Vut9am9r37TbdjLOw3vQWo3dulS89DNp/4+iSC4H015sve93zXERddUgaOAcLJR/5MV0tt6Zdc3tEpc9FDT3ZwUhi2Om2fwlaxVlgyC+Bx+lkQhdmm0daafz+dFVTizcDQ3hRCUQiSL8jeCv1HIEF8Sl3ZIuyc+GkMh8YF8bAzFt6yJuvpc6Dj758ycR5D8FWCIsHcKZJqm+vBVWfzOV3LvQoh3vXCDPiJrvXD1xPUGNQu9rBGyEF/MO/ssFtUagnCUGsm5FiDRZxfQUoC2KexT3IKqbDEtoIywnjGg8cSsWnTlHdNBbNFiTAKiPoYbaVzvyduuXQ0f9y5Qgpbz+kHktEJ4dEX4Op96XtIidAoA+dfNyu4aXA95S37mJbGISKZgeoGYWspuiBM6fOSyZz3gHgBsq5ArITzNcVcUunw5fqvg+BQjNzQoHOiiV4EvmQ9AIzHJx63zVNBct9LDOpv9+AtV/nVWGa2d+74NqHZOzgOLt8M/c6FYPeKmLE3QrZfsGMpJeidlHXWpQ8eHx0Z+8cNvWCU58tmjB0hY5SXej30e6cID7vhlLl6/N8lFiOdHBWuJxWRBJsalnGYZ5beOlZRy6oapVoQY7kZ2cMvr2j549TliM/pMUnTrVC5ZrRUNwbX9bSRIsxj4a9rLIs5lhtPJuj5zIECOOFdrCHUTrvMpE74erDQLTNmkbtnSiC3f1IBTBaUCslMX81KIFAy+BgiNfymZgPgTfUwaUJTll1WS90Ajkkr4O4I93CcQ8zyMtgjAZVRTF93l0SWQKcYouXT+yEealmpz4ER4eusFn/qg4USkd+xFCX2Tir7VeXD/Uaxx4pS7S+jGfYVZGs9RENOkElNsNj1asmNslKBQj++xEFu4zJAGAe0djRTdcZtAzOhIfZHNXTXpUN5s5UmJMAUw7GralnZH5Zh0/REO+beMP+FLV72EpriYumPNNBgi4M6hVpHz8QFl1ZbLT4FW+cqe2jCRFlOh6t7SoxCTS/mPKeqjy7jEcsOlJpJJw/HKDk0Uv0gY+N9gVBPiDchyBbNkQGTiatPAhAiiRbSNS5e25lCg6SKNiairKJ0LeQb/f8kzs5QZ3UdDUPUPdabzunn/+B7fA8gDeWb0gnTmC2sPuvqnmjDQj52OGQl7qkuRoqzFRab8oqxl4xK9QvWtt2pfeaZpZ7puaAQuud9VhHD+rSVPbBfwa5Et9PZmahke2NIrGTikr2+3bxgOfTd5lzT+rQbDFuqNPZ3g43OH5jfSiY11kI71WWlpxLK55TbdFL7v6Zz7DX0wtKxe9yceGCY2Kuu7rs+H7TTA5rLz6e4k99Cp0ac4FgplwE8+YIPqq+552+xBmpK34k29SByGm9CSaoETWYp9lxuCPSHCT2WV5LTbl7ZXu6vZ5tgdlUfdPf0hXlMeUAiSEg0XdLiDCBGqDvpv0Sb/ZjdS/ZwhyMDNYMNG+hafgnd8BgNvEQdqnN/TLRb9MVhSlb+K3kDtNMb/q4baVjy4T/y41RbNeWAoChyBEFMNtdVsVxDUkbKtFuPoOTxgAiGnHm3IgtL27bh8EVBe56iKsKVbhbGqo5Jm9BPslQ1TPVIBXcolcurrNY+9qICRUjkfbOpJqXkzlQrL34T1/wVlTRZPncAjtQHzGMc7iA0JQDBRijqUdEn/W1+Qe/OgJOULwzvgMY/KkagcvhoXfuGlPMbjhnw005FOPka7Q9ida7H44YO91Lie4LnF1e245E6Uy8/fNZjCba+vtFmqbNINcFEH2p6uv1XtmC35utNzAVn2JOIYEn1fZfeEpFTYZKWNuYFgwv4bd34EY5zlTgr0rwqTn4lkudIo0rppjkxMpy1U21EQX0ghSwhrcYeTGzdro2S6XECRzNivIToA50vn/yPMWdgohcsBT4JvuIRE2Up1Fg66ajdEs54eNGALwDF1aZ7rTci3GIT7n2DlsMG17IYOwyGPpbajM/2JMwvasx55uxZflzr5eMsLkYJWBgp8Hv6tH0VXyA/gsxITWeX28Mu5QvJbvHL2Z7+GUBXyif2ToGXAz2qF13Jt9WlYL71TbmXFCF42Ybm1f2AzFvYHN+TEhZ2HhQMv1snXICjUxIIHV3KnB3s7kkB8RzirZYNC6H0aiMqGBnes8p2IbHYSZ7LuYlKcKlOE5it6ixsUlQ8wTFhCU8bf39PKk0uhbtj+h3GUwtW8ZGGlEiltTGsvFs1p0CWRH1MBFnFJAek+DTj7rXnCK8SXLXWLNrjGYmTvN/6GKgVqjLiT9TuSMauIHgRtxMs+TatELHtpk8F0VBrcJD3SYZyYvw/dqxMBfXUoghzvtUSrrudQIrh4//7q1Le+KTDXSH/kSWzatDk+KkWY9Me9dkRwYl5Sidc99nQvEl89XMUzJJPj0UOAgtFi2cS0f2ZDl+Xx+kO7gH9lmGj3cEgd/gisI5oCFP2zRTvoiIzybflptnyPb7UG4J1GNh2eYuOrGq0TzDXFz4d1+kEJXMhdDGXTn6saIXgUSjBYxXozdhoeholAkGBmNfjJn9VLFuW3TW/fMg/eMyRmhuZNFWLWz9p/uTSP5PYK0YvNEaVcGC5mcr178AMDnv3hNx56wqbdd9whLm9wzumoju78cI/Yp8QLwvPRse0HnzVx38bf2U97mx4I9amYWLuRwWrPbC/FmWbB1MylqPqXDovipowpy/w4JIQzE/+O7/GA+SQF/WCzWOtThbmxjdZKCxU6/aMjvfzEwRe9NRsNmxU0WspD9YodTUeO2Io/4ff2RVcDNBZvOhsM0w9JC7FPW5/8NkKC67fZtyeTT+zFEfJ4R1+fmUKbpnwpK10RjCOAum4T4iYFyULUl+urZKABvrniA88F9CwcMWQz3TWSfwlTpLVMazbJDAno0k1dMGDl4Tq7ypBxzjZ8muhmROsvlYahuZ7/8HifzDD9oFdrnamszkth4jL8a2aJLL3GGM9PYPcXvE5xXDjvrGPxxipb3hOcLmFutsTK6p5Mrwsy9IzGfzMoRgLoMKt/V00KXIXZ+uvEY36+RCXbXLpVcTz6GZUkSHeWDkWxYjyEct86UqW0LCsESNCFgyPka9yoDZJTLKrn2nLijzvnRxQO5TwTKHRZ4ItFS33G9swxGbpVnT9FxTa3EE+PlcDhZ9E8r21FclAuASvx8jmlm4m49KKSudi8g5ROq/JAI9ZhMn51uGfctSnYW1oD0zkdzfpxcvcXhZKQZ2BjWwRO//O+VX7zjtOU1StrOIZl6l/MpUaL9kXJzp4mKzapt0EeD0CWFLRX524Koi03IDQKl4eyIwC4k6fLYxyTvPj89CwyJY/6CpTJN69YxobUw0tGheyIeaSw8XTO+klFtOV0Xo6zITjugWZcvcGbpjt0Vm54Vsk7GdqxM/X99fj44yYiFgOBjEw41QKxYYaVKMwJwukNC9i7gG1BztUqIJdUuNgupUaqbfh3dBsBjSlVjvDu9Ba3VaQWrAoEJX+u6lo/91z7mtaxTc1iAO8xMZwRdFHstZS8N3OU12qis4mSB6h9FbUVKnz25de3n+85j44+Rv9q5O4eEsd7tdrh1Q8XHT0RO9bSwe1bYzGd5FlsKp/M8BM/OUkzZZC8NAQmyQ2i1LzK0+ecD8SQKIRRd672RWFmY3mC5lWK66WMH+kafL3w6T4pXJWqCBi13QqIcoXzd3ZHCo4Rb4eIizqEo1gtK0vUfCObhFsCuIL7FwVLxNqJuZiWfg5CKxh6bQW3cyZ1YyfxkYSQUF2YXPMio0PYZk9h6/N+eNtyCgfy0xAeFH3qmpwPGMJ5bGjU46J8vO849ysa9ogPNDIEg2yZaWUUkpFSimlFIKQlJRSSrkS5q6dUbM8z3PD8qYnkoZlmOhlRhIENONYJ0AdYGVuai8oUiyefNHES6SYM7y69Epm9uq4NYwgvHhQpr9s6laBOGDmIKvibQdobfPQLc7Bb/8777ogKL5zdg1NBc9ylXeNPtSKB26GhoBQz8NyzOsj6yB8a6xs+vdofItpgKn+MXB04zwSxDHXnxDFPgzYQ0HWsicmUSDU7GJzkcRy0vR2FfgNIz+lnIpZZsCglTZdSFc7DVwd29nFlwy8ANi4kNGOpEx3BmjZMy4fk//vpcjbljLUuAPYmHkaTRhcHsMyM0eTWzrFDkDnG4cmQvrfYWXfxtuNLscxiARkIJIctbO6KtVYtQCbLXIk/CoO7MzwYoO9r0kRGckPov+G8YCfIVz1EGAN0KSaJNoYHzDK0x5ugVQugDJ/LvG82r2VLH/Ska0/F+tuhTq+GI8UPK3Q+UIEkX7/rDBpKvXl1PB8AbrQBYtHxxEF1tdwBkR+Q2+hI+qjhHTrd4ZxrMfn9lF/Uxmkzz1yT4uza+H7HYTtHpQNIxYMGcBsXr8vLjY6NI92sDS2+8N2jPyRnq0fbGmMeNAE7+8BhxYJq1zzROYxkCb1eOYQGzDWI5gR+6Za4I2HwA4bUXtKGQQ7cwrehS+8l7B8x0zrom4JcYAOaGkyOVuu9sWBJRgQVpFZB0P2XxkcgALrcBsOZQxOpNQq8mfJAWnHKsGmIq+H76WVk6i9doRqwt/HSLwvlXIgpvNbVMkrCgJKdBzZd+D3KqZqH5+NBIL81MLyXJwGC81px7EmL+No2m5ji+BsQkRdKtN8czxkifBGmAVByDWOzN5hShyndUaXdD7wHgwlN7pWw0Bm1wcFg21O32oafYKSbcmPMCooaXRIujKbyUGzIiZFPqCvIGf4C6yNaxqXB/RqSRpjU+gKzAcG5Zr1uPBZ5IksmfWdhmXbpjGe8scruI70w+FMLNy7/tjYB1kEFgMjjZi2MOoRlpRe7e+k7DVb5CT2e30HomX/M17/JHvyf1ZojxpOgqjt9/+Ah3cY7FDWOx8TknK8x2Eumz64GdksMooTdJWCQy/bypWfeodNMbCNVJ9/gh6Uj2GLzKoWHjFw2xVEQgRQ7m2NKOCCkT3ND7eQ80cEkEa2iYuiBEpxGex2bIybJKjLu3Yw8hT1hvc54f/09QT798IweEddJv59jhm2FWlvplkpJ52gnNVGc0P1Mj/mDVJaNLpxDKWfU/DJ6GMVRM/yGqPatUKXG6cWBIvVAzU9EPuSOOSwYxWQxfTq1nonrl4vyoPQM8N2G1Kq1qvAT1MoybGdDNPtpTFV+CzbfxJIPw7tUgHbxwltQunSEax03iLBSjqsvTOmck4mPaDMvOkrlvVMeSdOcRUzytAZvq1+mWSjBMcxBDeMJYYdFd2RZwQuoEBWaesMVFFndkAgjmwcWjJICj/4A2Lu7QlHQf7KoCEAoaNIiHikkJTZyoITvGV9wsmjCl9sCMMbhvgmcW2dqxaM4qX7pJqU6dBleaPqGKRiW8w9+Ytal1tzOk0ZM2LVe82tjjcxNG7cBObkqele/V+ckRPlcjd1qMp8HcltrDl7iVnVulKhbF6834bB+vGw/n0OB2Y1So7xNkAf3E7mkWQoIHMPVhPJMw65z2dpCVcX4mq5xZ/01wfJmXLlaHGY86RSuTlHTpmK9feGQhGRr/ux+qySdXWH316zPqGaJaD+p8aQc6akkU1KAkdLfOyEU6+zvC+TsrxQaudS2OEyGQcMKQmnlGbymAUuXS8bG4EiWupCg2DjAn30HR8iQ4p+nf03oQ5FINCR7A9yX2rf9r3UIkPf7dMnVVBz8Xx8cuQijH/feOh6bDPIdLHmq5mXvwX74Y3+7ecfG6jxyQYTNR0Tp21ZYnU6cx3ElF+9wPufEFRq4de+vOant1Kio0VMr4tppEunUwgd+n6Z6yN9DzugwtSv8L4n0pPTfAvyNIDGXj8X362a1E1sHS9F/Zg/X5y0dmTJZ/yEPFZfE7/ErdIMUOairpe0pfssVw0DQ/ktl1D1h0/xGXqLgqPFDQiL1jctMb6OPfyWt3t+9OojIDTAx1sLVMGFR+YObJ1tN5usEENbs+zLCWlTOlBqhg9K80OGXQdX6up6S5dfci/9CnT5iFl3/6IKhrQm3XKtsdD0mDZljqCxrsHUws3IBgpoZnvptKmhcMG11qWg9xo8pvcEsfoYuDNsmD9XNiwjT/JFyA+RGsQFFXrQkRx22uPkab+BzZ+9TkzPkJ6/QOtda5wr3XBSeefdyZlod9WmDO4ADvWP4UkO+lR4VBj4rmrnuinIV8NRCBFf+9f1kM8bpexUtfnmJpaF44xjWmayGRTq0laZhEKBMDYC5a3AfnYC01yP9f+EiBSlbQm+NGRQEJKS/euMH+yiFqJ4YUzcKgJHhOZv9bR4mIi126dx7l09XDgm/dYIuQw8UuXE2/nAtMPiiazD2OgblTlTamkplnkXXTI9TlFTlENT9Jf3fTc39+Zvu7kJYx8IuN7rj/dtbj5r/xK/jk8hjXkoi/wKsQGAeSZ9YoYD6JRFog63GuNVm3mohTcYX7PQMI3W6owrwxdZN8cQO+JQC1nPmMndnHBQmUvF26XsYJ2TLc8+dWChkyqOEHNgJCcFmHQBm6h8d7zC/dOkXQEFFOHUBaKTQv0Yi5s5EqdOfJAYvbR8JsM8UMcwTxM1VEojFe57vWI9Dr7UYZMnCU2CELzFkRYyjTIKk4BUiebxooP+Wi6vcBpVUu8tw50gBzyZiDlDikXCo01NnfJirrdAbJWfV1UXC/WglgVa7+QBz6Hr3qp4qaymBGaOAdtSUN65nA8+d0939y0YyCOPDPD0U3+hLUKYEogjWoHsaYQU96N2wxRBR7GMitKlAXL8EJHPJgO8tGE/MPabwR3H5B5R+dX4t1IwL7vvb689kuIcLyctD9FWW5HpE4fVzfc+0K+VWJP45UUV91QCwN9rr+mSDCnfY3A2U0pxN+u6OMw6PATzULT8YaQEe13K/DgTn+aurDEs5+bodpb14Xo8QJE2LdJ6NEARpnIRuENRKslssaZS9vE9Bz2yGkkhn7FWdwRzEbKb4InEXRYWngfsTL2dzokVyNE6U8ZYltMkbdzD+DeJUaMAxFI/0AKQEkFQwIYVRHh6LSJeMFYVkZVu1TVyBeJe5CKrAsb18WIe/xqO6/dN6NTiOlJxjX7xlna1a17ebFM2HMN+uBQKrREcegwm/q3rjyQp8GiasCU1Do42Q096s1jbVHtJAIn5yD+aCvCzXJSDJqY8Q+Vrr9T0Z7SqjaPRBpw7EY+nhwkqSHIQQ7bp2VTCQyP05daD0o845ysESLAtf0zkJOB6Nm26PFypQ1MJKT74efKG1HQonJymG5SMTw+Y5EU+WoFR3We3S81dgH8GrzesPSl62Kdivo8035y/68RRfMCXToFSciJVcvjCi+zayRa3QlHFPSZ5+p5L9TqHcabZ0W2OalWFrXTU5R6oDTWWO48640XOzQ58m5XR8kY2ZdBg7EFLh6aR2Bn1u6Bk1jltZqnDjHG1ak26xURHMaRBh136eNXUBiM0aBbCgFH+uXRiKn6cCQCRHZ6mD60Wvo3vEvaCKZyJYVSZguAg3BaGsCMmLJyQqWGYq+jUGBYE3qqinw34bBD88gqaTGNZJUsoZow0iAhXfIGn1/TunGk+42DxWvp9ybaX2ZRMRZZPr9hRig/5GbvE8i4sn8HFwbSf/yHnrU3GUQcp+xoxsUZKg6G5vZz5WWvG8ikUK1pPXULMuH9T0XWsAOzidXiJgR0o6VzfGrobOH7qKljKiYNgC0/OCPz+gFC6weX5NBfmTdhvQlNRGi2NAUXWqNUmh60JUMIVXo1AqhQu1jvCadRZDnBxFMmY3buGiW3jmlU2inn2XFyLygnakVb3/VjDYDrcrOBH94ylMvwUQklIWJy5MfJACzEpw2Yb1+L+8ZEOz4G+jxL4warcy03u1YYlKLE56fTS62Ad+NUgnVdl1PpxTpdgNN3ick46jTKZrD6HApCKQKHkwx6//6DJ/tVJp/z+Jk11xHVBsbd2Las9BwP2QrZ+ym054bvchBWXD6CB7XpsDqHlm9IrQSytFIeekpM/ii7P+fxBTwfuHk9c7U0Kf+LNHoNCvE3nbU6LuZCxhLko1eAmkdftyuJCbT9b9G3LN86YXxpIzQPZMRucJK1AlSulCLkuaeNoamJZJ/8AFDiBcXECs88dHTPAKI+iiMklec3HQm8SgNI6/13J8OV3PePkIL0WllxqUOVGm/p7w+bTTDyBOk1Z8Vr4LrONZZpc/bH8NI++zHbNZ11fgYb9biTcv8yu/PkLQ1wDtriZbbNzj8OZ+TD4Pq5rGc0MpWf9ylA+qa6h9bXtqBaMGnfVnPcvZZWPADy4idwJ3aT2Hh4dt1z1+IOlYb8mYVsfpvLvG4GyY2/ACvNR7Nn6THJfrso6qVLu0bJNYC8nqzd/5KONaLq1b96Qp5P9pFN5jKR/Aj7gSznxOh0NUC0Lr9BzkYgHv87Llvw/p6UTOBxU+5WsMn06PGz6snmX1aWL0LEuLGpH7ur3yvVW+1/LZYyAC0n3IbrK37II9NjLoLK5gvlyewmr9hI13c9FR2jSVNeCrFXQwiHLYKBJ6TEgzUYT1VrHLyL1oQV2Ntgpnzo5FvZFu6IDvVMu23ysMB9F18BOXETxGXjLknvCkz7twKjGBXFcqP1GWTHA7VA3COh4x96fymIlXdTsH6AyiXdBcU7w3TrkpkJKbGniweny1dcjTXk2jXkdtf9bzxhyP++855AZB6qsDcWbvIVpDKSb6oQOFlyWTX2eYL4OvfKejC1wWd/u2wqfQqihrS5HlHQGGUsulHbgFzaRuZPWyboQpH+rQ1+l7y8kU7d7RXk4aNZ1EZdFkdyIDGixTh9UyO5P6jKHIlMJXR5MvCd5Fjqfyq+xEVCyriad9jWyuGnelLBzH8RXcSGP8/7m4bfvP/aw++YD0uAgjMs0OzcL+/WjZK5f1iO3dHvqhp8A1XFcqmZt0YAU38c520UlguiDSPkRbfaHVG6we/sDfdEMvLEjwMNd69Et8vVujrr8ugeWd0jOBDZhEyFTlZjO4NqV3LJdtVOLSwXXQAw/bD3AswCPHTMaB8BX4utGNXtyM7hL20AEIh2JYHe5/ZXDPBn5Efy4QeTo+1Xt3hXKYzD1NDYh8ZAojHqfKZxDme3Eg3YGroVHgdH/yVOFgYFnQG4FKueZS1XLzAKhele8stKBnMWC5OK1438ZifspS51vF4OVVJR6ExH8zj3Ra0Grp5Dtt14W4dnQqwVi/XeTH5jhQ1pUAlIKTOJj5KUEgxjDbufhDyTAsCc4Vzk/adgIuoJyVSIHLWT59mFqDjgpngwPdGe4CX6XdgeF4I8gb0JaJ2S/vQ223VK//fl8+ubt/UksobUfuDxzjHHYhxHULhtT5hH2dnht6kkvSR06jtjdN6O8e2C+gOqi6/KjdMY7rnQTWhjLsh7GJlgE5AhuLAZcjVXBB/WkWnR5mowL+uvUjlAPLLej9r10w8kSSNdVpDrzvVZSMrgKbElMF9FwEYudM26lpxW0x1Cmif0ANTKZHCe9iwwaB549AbRnUwaOtNAwIv3rYhC7P6BZhI0dUipvXtAvyAp+DK/gQPIwcc6CM7t5Q2D1ADyYQ0P1VYHXfQXeK+aEDaES0wZs6hY6+Hi45BW6F4eInaDJpdh/pNPl3xpLFGrPvPGFYLjAhxOMtFN6Lazg8w+bW4cM1tnjyS+TjP6myhjVRnYUHpTyjxkmnjFWDVB69hQuyFRCQNKKWAwAS0Qx9/v7nejNSVFr/jWoGESsI2cgcj/SgczmNF2auR0XC8i1bxy3xyhniKK7nPmFJqMgywdgPT+KO0AVy0M0OH3diQR2ye4doRmuR0zz3xeAs6pYU4rSad9Mhf1m0QtVCiQtAf7Br9l+feO4KzlAU4qxV3oTYkWXZ+6NTvCizoknsaDaPr8+mb7qOH8+NEr+BRWTN/ECOyhO5fh62JRLlGkrPGUMURrm/1+pYB6AQdG+ZJ3foCH3ptXIkUkYnzlWeXDzs24QRvKTeJsFNi6LXQXuBtlxjqiBdjI7mYppU152YYTsyo7FXOseigCvhy3XYLa+Hkd5+MWNCRl9YfeHMMutgSeGStgdEkEpsSVdvtDTIYuXceuhugr6WaEb0cphXdLw9dfkg3Jx1P/ToXhOirTlXwdpIUumMhtrdvYXi/3dbVp3Xz4+XvynGt1ivoDxTmQ2s7Nygoylbliw9DeokgLkWO3kXgM/XHsTFtjJRc5Jc2mk+w6og0wZWg0hqwpVgWMUEHISwYkZ7uRZ+t3zxZBNB7eRAmbgugl2pndCvfvuT0rfqyg/7qFoeaX/+Gl2CFGfHPXDEluaRwZ2hH3ki4qN24i4wkKaAXOl1JDnnJqPeTqBnI95OoE8GiNVoAQi09ZARE9qMPrmSA7N1McoLoXhpc3V4xOD1rXXgXQXeYkrtLNOHPXkT6Q+uCaYVnXB9nX0s7TDUlIf8y6u2Z81p0jBh1UrDRxUSFFK5b+ZxYf9hi9u0cRlG17l7Az3Nr/ZX/bckERglKNIEvrFgdcEjfHS1NHQCdp1sjIo2tD8qyFapwdElTP86PkctBJSBUghlSiCtVXYnGRxWFATeltf+RKpVCtorHUzeFZ6t6VF521x75YimMT919IAmKBpxYuBBOBXvgsB7NW7lh9GpoqxyJ54sLOqOz7V5yE8LiRasKEOvoZ38lx01SetQD4xJ9NxsqnNcPvuCusqwDBJZFIkvGfh/nYRJfCLrcVv6Z0qcmWCrQhUptMJMlkb1wcDjqslduAnN162JXa3F6+T4S03fFFklWTWDoWW0mxGNG+yf4i/8F3QcKUs2brYyaQITA/TAvQSMweIOaLrEvCz9cAuv4NgG+vVSAOM/0EfqrGeVuO9sXTgLJq1cPjhjOIU5KIfydg2PIPVxj04E77fg5bmUMyqh5vUZhWdqbML1AG0dZPFhhZH9exCreUavQuYbYFkCgxSaMBBdE3/kszGPK3zH5Pyp6280wAb3kHguqRuP05ripDeUDJuqjOG8H9aTl+3GFlORAasgWEwG1USjEe3Y2lHOvEYcJ7ytvhcf35l/vyTUKBNskETDVD5agbzJ7vGkEQClbrJd9NfoF6ZS8Sw5vMmsGlRPWGfTHNtvmMg3ugs2kSzrhL/WpgWHVxHPm/P83rTn79NIwpOcEgV/5ejpe99kiwDiRsEqSXI5JoIwAyao8nzNJE/rZQDXnUDmlBE9jXz8Wj9t4us3XAIzfutBQQIM4KTitGG1RjhRlT7pRAQSsEZDqpVrfMVVfyaV+FVzedNvhkJOWKz0Xd2hs84f5dmnTrV1TsdiU4DzL25KSf596l0OoHA3ARRqKhHkisn6Fx5I1yMU0CmyCjlkyuMdmMjk0e6Px3nLyVfEHnZMFGmRiqheUjXCieFbZ8e5ULKRprDjIRArUwtSmw8xc35LHkeAg03PUuIlsmkZzI0qwrYQj/hizoWeI3OcuM84BuRaTGKZxvzQM7sHepdFcBVOmRV1Mhm4MgZXv31ELH6q6EvuMkgGOf/OrBXrP4sJYd4gfW6ki0Yfy4weFYyC0w5AWcYIHJMh7KI8/tRuvxWII/zzzHWpwz4z0zMbkcJtCSvRumk9PSOIEweIIE2kavWQKxP9MZML9YZVNWmV/l0L4zJxZ4J6rsxKh3/R409DO62VWZjvf5p+NdjdbHVT6VRE+rjnQF5/HTYGizJeC+QW9XlvFszciomvO8Y7ljEGivVTO572ueKRoRc0VKYeBIxIStFzp3YByP/GjWAetRaeUXRTXDnczfQaDJe5oldu83TkuGcB2BU1ULr8L4gS1K84ESwfhTdEGzwPDTq4/ESUHRjHURNsLhs8GP82BbFe8ZQS747vU1gsUBL4MN6DdM3Tw1RO6EQ7CCRlgFC5vJ7y8bFu1nMkojTVLs67R8AURc8BMl0fm3JCY5oIXEHcL/usuMQQ/OLmAm4G8hA3sQnOJt98RqGk6OH1FwJkl8tSBGGhWgiJ607LiyVSlxIISuP36akUxlKYq1j+iq5H3R0KaAlRe+vxUwKKzERB31oPepBlk8lgU6qMWqAz1z7tv7yXaQKg2+156MZhjigx/8yDywrwLqVnzIYkmowUiJlMTJUJOiYHPUoQCkpaSXFS9WoRNIMxrRPMgrBcG2Uv6uxdeRExvzt/HZoyDk/Bt3VmaK7bOIFmNc0uJzIKO/spBZxMaNElNfMEXMoJt7JYZWJJpv1vHWe0XsCM8inFr6w307BA9fSMioOVWfnD5Ci3v1373X4v2zQl+qEBydw/b/qHOvQ//hA/lq2T1fv5Bvwn7VXq1P+S0n5Jf+Iv3Ls/SMwx+D/MjcmMO00zRun/S8l4etCgdpnVq9cBL+hI6sy/FM+HjJkk9qYnj1YHhwqyJyxW38NLv8lT9gA0AT/7XmUwST7tbSe7yKpHPTbsYpyRiEddxQXY/SSTmityg4waV6VK3/Tv/UH5z/Ofm8yrIbyH61gtK6SO6l1QcJDE1QiBhKNrWcHtFqs0nsqPYFYPd/k/dyGzc72+s0eWe1XSTMrtp9wLVhhvyb0EMA5ozpSDu8X3hJh2jSPSNX+DCUPZ/jrZK63oHrqr3jRGm6p6fbrron23ChgF/l/d4qAoilEdSCVHx3qhqmzXMlfcpX2Y/WBzheYssAdzz6tJoESlVFofaj88EQJVrlPzRR+ktMw8XJC5yj76T2xKa6v0+JKGxm0ro9jqiy/02DFls83tUUrjcZAfyGWbMEUpK88cLw9VJL8O1b+i937FUXoenJ3/F6Tbdjv7i5/Hcv9xVTZunYOrotWFcVVLDyE/X+yFGiYL5YjAz3/Ciqq8fratk9u+3yIXB//JCMAeht6wyNFKZeU+8Tm2C3ezT58p/8cnLr7Fr8NVLbfpMjRa/m7uX0//y9FqGQm4NON9O6OW2MLerae8LAwR79VCbbRbsVeAiY5Ff/ll2+aum+ab4n4W4K6XRQvc2rP/Z7Y2Zpssi8veIQWqMRPKXK+657ZHKjm2JUn26DnX+BpPWmr88p/1tlaGXgo55Kye2umpHHKZ91/KQDbRPEp18/X9/fN9T3e/unfYfxHkzW4v0oSYO8LmpZG+Mbzmrmz+MKB/P+hxDx6YleZ5zW5R1TiT2m87efojrffFCpqTVGCPyk8h4EeUzoBhZMlXv2qe3sN2+w4yFVYl2QDB1+zoiUH1qwi5gJqL0KtxicFT9svAcwxfD/jY03NglAd1gSk5r89PUwSag7NXNA1k2ERGts0KuLJgNxPhFcPttoheT6XsV6+VoEuuz77fCjzTCRHLeEEemky4xnMCyqqI4CEhMfkCd1lOMQzF48gKdS90yUPUjuQ9U0fem9xI63ZujibjNoSl10hft+FQ/3pPrPihs+BcNWaaiJXqDQCDx8s6HkAZOrfQT8yUrxD45nzfm5jcwx1lR5F/TKJtvdfNYra5D83nkIaE9VSsIGORRhxt+f0zIaTEu0oHeoN7aggoalQq4f+3Xgk5p68ffkhd36y9GWqyZOrTyCONmaXDY981d48hb82HOgvtweR1ZRbHQviOrYxgsWmrd3GweXFcE5/JCuuA15Sq+UHZLJcL0hmJUTaX/PFZJGi9VheHE8RBLtqKOdeYcrly9g7N7P8XRDcv58r+lj3gvzR12LF1L8uk0m99n5x/BSz/lmFaMAbUcwcUHIiLQJ89okSB6QTUbzaxDAkfJYZ70zx2tH9kYYzEytbEl8BoxlhHakTeGGPBQP8I9hYoasT3YE4nmzPakx0TwHvrbBMC6RbUfzggEAtdhP7mIAKejj2tCKnktdBQw/QPv9d6po/66wPNoXHRD9et/wzLrvpff17+231PDwPv7dt9Zjaj7hbrx7Hb/Vxq7xP7/df+8vV5/T2b9zephu3ny3OXPnbj1hs0qf8PD4ua9rWL2+x+Fp99m+ZI5HkmRPRK8aZMK6UH8TMEj+JBUtnpotWxh865Vr5i66w5j3dxHrmkq5iY7whUlUC/YotqaXfs3XJ+hM7kyX9zI3Kpf6SSdowJNMsk6H30eSOwbhVuWeYuSM9Miy4c2kfLgU8TSif/n9/xTuLwj3pg8XEvadXFhWfLf1ixEHTF2PmgXTEOPDg6YJx5IulD4zOV00HkJ/2c3fJ+sSFNSfWvNfmN+sX/t+bF9aXfLDmlZXyr3Yr1nv+te4tm4FLaz6wGXnj5ZZr58Xiiave96/Y8SX6oM03m4lLbTZcTfxj8QaBB6r9znA0oz/M4nA7ox/M4EWemhoj0wWDGglj0oWRGgZj8oWuGhZj7IWFGh6jwAWB6jujzgWF6jCjzYWVGlJj1IWBGg1j2oWNGjJjzoWzGjVjyoWjGg5jxIWeGhpj9oWb6jYjz0WKmjhjz0WOmjDj4dg1oxr8w1g9Qxn86fACQyT8xFgrQzq83OkSQwa85qmtsgtM6qmD0jG94tkoIzTdwTCpsheM1KmgoivMwkUNwzAMw3CRwZSoLgkWua8ulw7pK0FyD7pbwUdjAkz9GHmVsfQ5v3kYKg8VUcZNZ87e+J3G2Ux0rYsA+yEYjgvljbODoBcl1XFPNrTvVduVkxNCXfqZdN0DGsHuWfrQi8V+A2dJztrMJp1DdY8dWP1qmqx2zAgBEj1Sghg0D+4w73Tmx7GXBWNOFvyDE/FhMYvzcsoD878yzLg6mAQmNF0wt8XEpgdwrnafc+bqRZ8MkH8HhvyJMYcFCsU2X+ZF5KPuRjwP4iUEY+JuI8rxx6YtpAMwrTutQnl/uE7hdVD2miPYvDecxnQKGwIf4vySag36kZRU/lGuL7XJ9sLt40NnumeOU74IO8s5kz8NtDabYMZ3l0Rv4QLw2WQjrgO1QXsYoekqizYQ4DB2vzXq2HYJf0kkH62g7sMnp5ZHqgpsLNkTLYp7hqhtzv6JIUWi37AddSEhO73k6gj5UztKM9YCD8YSkrNjYE2ocG3YvZxUp88U+qJlMgwn0sZ/bVpGGvwBALftMaBWkAdEyXDUAijPRbvsWtIajMeJHaEClPkkbeZ+do2rA/5p3rtSJ1UnpLcNMhsnK/ij7Bh/DD3adowUX0JU4YTONgic+jIORxKSwvyqmodLSFpi/jEqLGX4DLjt35A4OhLJVw6rsvbOoXsLTBWxnZtp4yCQ3p/FnVdnru+MolgYmWf/jS8Gtif8dGpvyY8yXG13SWul6OU5qxgRKhseh9h9y5/DyONb7iBLNK0ER1EWrqIglxrz3jDakWJyHXg+D/Le8nRyZiusfJMcO41liOjoh5RjIwtIzs4zO51X2d4BeDE7hI1ZdS7OL+xlioD1Vc84SRKWQxKoSEfWIfHLQudRvdruUvgcwrceddI2FVUkFJXxreUluweg92efZy47X7aG9Gw3PSy8ObEEK8g8ifB1WNLzZgFW3ov4PY1Sr5vt9258un8NNFGjealLsIYobzy8+1zk5Sac0lETG0aARe6ixlz0sarZyR1CtpvFCoLm6WUb0iN9PodDzsgqInkuVY+Jmuxj1sytdDY/d7SVbabC/hOLwMKZRRU/fBixGTZwdF3isrRLI0XSYi+EVy8LWhXzPuPxBMCh5uQaee4AOi3JufSAqrsfjdqroZf6dzOgCY/pqvO2JNm7hCpUstKMU9ona0Aw9oeUjo/OuDI4T5GdZXgHmDaYIaL4I09UWYq2WKTHl2XQPK717AZvRcKUEjUqTrzjB+XqlSea97iWndKFinuERImOQvxj0Q0aEAS1FVF10Tj4k6pM1ABssP9354j27LtmqNYfEFl/co5onhwxPHn8e2OMjh6Y0kOvz+t0kK2WFA4nIW05cuet9RXAkV7bNz8v0ZQYLejNdBDDMAzj9uecJi/yH7vmZ9MdVffpt6DTdXc4e5YwEKmA5XqE4ChE5j9mb0wYol1e9Ppu+7m/O6l7TqUOsENbqDSlZreESZazJNGKOs1GAuntoy+jERhRQb9O8fmY6onZNFJcuzANBSkhsYcOkWVp6L73r/ljYN05wimH8STOmmc6M6cDsquZ4SfYfskHGUIZ5qF3vWIgKixilKSJ4kRC7z15JcncggB1LAWmrNEsqMvSLPb8jmkKN+TI2UNgvqVJkOQC/p3IDLacCc2keX44VzMsXz4+eWE/TJlM2xG4QxiQ8OfEojoTl4QTxOPew7TxjF58m2dtQHj3hel5LsPuiEgSNx4zQy6fYS6D+xxELdidBloX40MtZKV6fjQ/kkC6TW8oO2vBBlj4vYYhI/WysEUGU9TC92vaEvMlHuYwaXb2fEO3zxA2xOm5UfSRwVEa0XXDTCvXzQsCryySQ6nZ4wVqSnT0jHpqOsjcvovzcNbA6QbhmKziI7oPBV76WZVcsqGkGOeOqLP3Vkn6rji+M4Rx2XtNHKXpG1/JvWrvx5T5N2pCSX2V8z5WYMatpHAvWxT5fZ067DSc4o0E+YRq1NO3xJv7UbxZsw3SnUek2nRPJOnRMWHuoH4gi7z1iJtuO0Lr3dH79RQwn5yE8ZZ5dJ6GkByS1bAc0LEW+D2SvLM8vpehonOr8MRa+ARcqsSMDBfe3mc0cJZ07LmELgAke6TNa7LRZ3f6qeFhlkOF5sVHRUm/ZMe6G196z6EWDfTkbaESf6X7NOuQS1QCgcyvKzYEDJ+9bkLeGV+UrWNPA/xn+0GTbE6zy/mb0NGhsvi4+dzBjZisFjzZEdH8uLJMRI+qL2MWkbBnrbenh0WSITKgM0liPIU9SplRC3TRuYd4KRe+Z35AIPJ27vRIXFp3KM3/HEQuyxLFRslEYLiwE+fxjkZ+uCg02g/1ByRGVI8kPZ4HXF7L0cleZzERbOTKCf0cEuTwdhqVyEBJNClVHYcvwCSBgXbf6TKnNfN3nK2HFkRgzFjV5nlZZBa9uP/sGf8mzz0IXPA0aHzX3p5tQWreWINAh23xeTSxAlNwgUpWyO+iPmCOQJoQIrJTQZEPatLJ0G3f4/hs5uXbjgjBTjoJQdYoN8NMUBR+Z35Yy392MHDOrtMTRPq7nbwj1zhDOmLQco7nuWrOTYsxfDXb/ek8vfTQgYt2uNLeRUL2903H1rlEb6PpEwvmgHPCB9eJuzQ2SHIhRVh6+WMLFuN73iWX52Y+eFWcm/+F92HGLs9kfRNIvzUEHRs8aXuCEVmF66L7NV8Rza1fCci2LdO0JIy6WW4S/NzQC11o+zFRyMc4aQ6qTYheLtwJs+l8JARnxJ8wDMMwYsdgZ/2yuwttSRotgGJm1kT0yQIIz13MwaXbwybKmaCiKcyjs5OLMXRMYLWlL69iPOBofxWJMxL8a1Y7z0I6reldBC8AP4qkhEWLOr+Y3U4ceq7o7vDMC84e8pv2X95LZzUxBQwoYnmpGwdfEbR3oAFvyDDMHAS2lHeiIROUizP5djpRVfgYokZTpibS8338BEnybSPXYUfGIELkqrirHqgSVI0lEuJGf38W2PunAyppQHYLidoAuZ5h7DnKAyqZQW6qln57qMqe1OWM98vs5zc8wqPzQZJtYiwBMpAHUkE9NCcSyBpBUPPBvVRXIWTDnlySjqZE5NVC5pmWXX9wAvzk1pYh1UZZibjFF6lhETcMk8QV/z3DJtunfyLvtbS6dvh6uFnQL/Swcg3iEEg9GRTXnEnc9wojVUqMD9bB0FpVY7V0pe2C3aYH7k8/5tKdeJs9EvOias5n4QuJWq0RcA16zcSEx1srD27ctSu+mAXIQdlmuc+a1H44ZVDa6mZkiJPl+2/OfFOP7p99JhHjiiaJTxrquOjQc+EenYS3H9xhTm2fQcdObuIw8c1G2Cp2j6Gt8Lf1tgxSzeNrfNb+c3sp3ne/REnwKjVP5h3sWub23Cu4XbQJV0hrN/Md5HsX1UH1Wcpd5yFK/YJDo/SyeKMaVWgvevWTdoMG/ukgrJRxYv/7mVytFYnHQ4EfZ4gXwBpOhMtDFCRLsHFDZiweqmW6oSqohiHg6MvjPYN+ZkvkUEPsRW7lDFH5C5lGl+l3jtofIbHjVU1TSCBqe39ZCN/k54R6VWeLrLjkhV2Dt8a0KOaEH4m5t4tUmtPbtZVlUfhXOmnQHlaOcmx8g3eN+VPoc7mfWdN+FrQ8LzAtIByCnVE3YzV6nmCr2Y08uQGd6fDDk/KcCc9mfNiJnQXE4kvaO6FDe79oyoJxN22NZXWLbQBXOuAn9D0LmGDsage6t5PEqVjOzfGxLrnixaWUW+ZzqvtaC8lBk2IpTLC2Lm4XTkxNZsdv/cUwUH9UvJPCHwcBD6caG9JDuWqX6oIXPsldqb1mPyh6vQWqOEpreV+t2ZhxznPz2hrsAE7Ln++YUDUYF38pk8ufmyaNsmJHlLP15OA3z3wf5qXyUeUwvXF+iu4CkyC08IC3UmTRr078GeBJ7CKJAoHHq3fkbVAPnWvOKP/j7DAF+pe+Snk4K/qahgqqKyxoSSy+xun1AwhLZm6LFA16gXio1NRfwFjbdveiNHZL4qT0Ap9m46EHo+MGtIa89xpgUtTBjPal81xjPYnbfhTXyBX9IMCdxIXO5y5oMS7KWOHrD/2wrO9TmdwvwCtsVu2+ldawrlWYaIiYcV5pM35yQkU2i2YWh2EYhm/PUb8b5A7YSC/ba5FgotFxRCZwJaJqBh+4jmx5DXdFAEoYsLPfJPDy2Y5BZ8UB999/4v47VzmlqBtqMElizbiAan+f9EDL7yQaLxbk5dDVmqKjYisxk2pqMTP/1/+ofoZdjY9GfJhsOblL0/DUcPko3FDQVLT6vnwA808MvZXiUrBEXfshXE2CKWbOP73JMY+R/MNPxyEC2Psy/aHEttTQjBXXnKYfiK4+XGqsQwKd8kTJjMC36RQi9sG3rx/w2FaDvSo2jHrLYcETfLgMCMZ+LKhHAk6mGDbI4/JUYYNSI6bw5ZqViG3dtfj6TitlCeQ1iGCWOleygWWmJWwKBSGaIq/DysijnOJ253TSrRiPpHBLmBx/W4JYeesj5K9QDTEzBedIMlA2BuOjody42Js6kpq8auwWzVBgWzUq7rlGdcpq+SZdcHOlW1rqmSTbFaj90n3AlPWm9pkYOYSaGeBH3zlzu143LIlicFyLMY471e7bqH7txjIFpXWTkVc+oHrrdVAgwqixXgl9B45kxD5OYngZOoROYICeK5BiKcsoHXU+Fqz5gITt/SikcXuN+yJZhAmQcp/Avj1OVlRGqVc3TyHU4wZv49m8Cuv9wWaeDYSHDjU11pd1FZc0wSGskhh76XhfWD6RL5/v3+XIVA4X+OatQ5LckmkMtgCbKt33iXWsQOD6HNix/z5dpXgfIpxaXNRYcYkXKz7cADA9fsNzG1/CBuvJ/b/H/PU7HPCOaVkfEVJoIUOJQAkidSI+hcV4db2lUyja+pz9aavziNPr8/hS9pFOhaQPK21H10tH1Os+tIlqCPFoaqjr1OaN9P3KyPwFrR+nWqhONHvjDv0DqwVlXoGBOvcb4khPbBIBMQHht4CwUabh0OGFHX1qyy3cDtPt9VqwkjqBhiBV2r+jVZIYvjUYa0+BURE3R7PQoINQXtmycE8+mlJMAgzVM7US1MF1nfwgClIW/ht3E9RcdjNVL5c5CpSLcGgW9ESfQDdVD2sEzRaeLH81QIrw1mEU3SeTG/qExNQTm5ydAKvZuygoydmmdhNno4dJv0OZ57Pw6r0CxJB6IHiJ6r7lp9GiAJ0zxdf5ZPimSse/ISAk+YnheGsHH8hFynbAFz0Nl9hvGqfKfoDmgt0RMBxEDgqgIefKBmQ0tcKHo/4P8pmEJr6+mE8yznLzfjcgj2g8n0uoLfXc2DUO0JgWusY5QUF8eDtDVS9cMhj6rS8bW6xsPuuPkNzV8ALjuIIQuExDf285ck1sBXauZK9vavwYpFheUVK8do6T7brbBLXX7Dz01sYb6LdqZDorDpHe8vUKzt0YlZZOLIXXRw6mw9CB+ejurAscibnqTY5qVWAYhmEc6ppaqnJs0xMifPX/r1AK7D/221HO35s99PMUFbcFKy9bPW2jkjqMdgm6PXQztguFzQKENcdUQQ4NTJfqdHTFH/donCO4COWBQtddXQOiyH/LGuxLDx8PPh+fv+7hQX4XFp3LzpVqL5z78up0W1SbiSLIJ96TOIw2bfehevmWj8ABJ1rtTKuBGV+tGILF7CzLEzORWxNHbHr9XrBSGfk/rkLEAOjJhCowLlkn4swu8l4GF6JyY5Pzj2KVqpM3UMFfiQ3ugSH/C+Ipqd085Se85pRjA7FlI6t+s2wkdx6wk850yE3Q2a84HAEr5Y8eYDtGpzW0V/ThufUmmQdpKZTivLowc/npeFMLniz4/uT8Dse6qltBU/2AnUphGd60MSO1Sn5sDSGyCbyK4l9WB64+K5cAge7mSCmUMBcmbKZEaNdMUjb96dnnBpl7d5SQl8JZl8PvRdQVAOUaJdxE0pB30cUW73aU/8QGoCtBugt4GshjYkzkx/k5+LfH5LFCIPz99OVpY5aRrNJ4mWqemD8ZRSM9rJAwUw5c70QDnEnoNPYh2PBCrFcd1+VzKq1tEJ1k282TtLsfX89TqYILioBSnhGFy4LipXtoPLhM8l9vtgaVdnMqdGKev/vUwT+bzOP2YeFYb3EnMV2RnnSVLTuoSDy5OR/NlRnXG0KWq9d7fdsZbqF1+Hry6XPEa5hJxVdTruj8i6UuFunPl8jKxStiPrSt83pFjVOok5J4cupHDiQyXlvq3lqAH8X4+QuDEznhdSS1UeeweHC5oAaiOQ7RdgIKeCrxatDQDrd75yj/4FTg6TZ+BX1njJbCtxesI8BaUOzvx9qA6mWSkN6Fe7hHUfg61w4z12TGTYNfGq1UoKrERGykAcsNeBLv3DPOnv5+FEnp4JgYIlHILGgdXEAZh82GJBMY5w5fajuDiW7qxTg2uhE2m+VC4CBxk2tcNH8w7HdKpI69zhlk6+spj77SXB8+S0FuWHvL2IfMHlPSNqUfinOBtM2effVBISj2Y59jJDwS8wDo3krokIMgbOZGleVS1gikGmdCWk1eTG+RRma1+ZPcWJ5gJyMcUTXfU/34BoboZI3ILVfnoGkTv8opTqfsuJpWohjw6GEXAnMGzD6RPxCyhLvDb9W5kgcr5Yhu3TgHv19OSiWVVxQNEeDT2ArUSkd/EnhPxknNKyuyYhpDirYU5w3lSJcpfFkvRCKymZftCtvjiDgx+14r08T1/0hQogMdKCZBpe9rvYaK8Idsus4LyTU73rqJB8hZv68Qg6ii8AtZZqnjTTNDTnl2t17HbvOP5sUhedrAJtQ0vpWahACfcwlIRXCP6dZyj9W7LJN+BqVllbbMfUn0KGSgolQdvIaKo030rSV+SwUVXRoQtSiWnKhDI/h1HOoEkdG4QbZyAq9o/I1s4QTdjMaIrDhBKmj8F1nnBFGj8RXZxgkEGs1kfRZ0AY3cyK6SIL2gcWFkKQniGo2pkV0ngd9ovJpsTILuC40wsvxCkM7R+G2ymAjiDxr3Jlu/ELhH49lkw0TQ3aOxbmTLiSCdoPEfI7MniCUaWyNbDQSe0fhussVA0L2jMRhZGQjSLzTeGVk3EMQPNB5MthkIrGk8may/IOguaSyN7GpBkP6h8cHI0oIgntC4M7LrBYH/QOOXycYFQXcADZUs94IkaMwqiyiIZzT2SrbuBbZonFQ2REG3QWOlZMsoSHs0LpXMiSBWaOyUbDUS+I7GD5UtRoLuA42FkpWRIG3R+EvJupEgfqLxRWWbkcCAxlFl/SToWjSKkl31gvSGxnslS70gbtH4qGTXvcA7NH6qbOwF3REanZLltwTpAo0/KouKIP6i8Vll67cEHtA4q2yoCLpHNDZKtqwI0hkab5QsZUK5oY6cXKFkCSo3ODHNsXCdCW1uqCMrp9BlCRq+ceLV+8KYCZVv6silU9hkCcoSJ8JjIb8SGtbUkZ1T6F8ltFnjxG/vCzETyt/UkR+ucDVLqHzixL33hfUroc0ndWThFNIsoeEBJ569LwwzofJAHfnLKVzPEsoHnFjPsbCcCQ2n1JEvrjDOEtqc4sR/3AoOhDJSR46ukA8SKh1ObD0WVoXQpqOOFKcQRULDb5z47n1hUQiV39SR905hfZBQ7nBi8FgohdBwRx356BSGIqHNHU6881joCqH8lzry0xWWRULlGCcevC9sCqHNMXWkcwouJWi4wokn7wv9JaFyRR354wqrWoLyCyeWHgtXNaHhP3Xksyssagna/MeJDx4LqSaUr9SRsyuUWoLKDifuPBaua0KbHXVk4xS6WoKGQzjxy/vCWBMqh+jIG6ewqSUoOFAxEkguDQd6RgYkZ8aBA0Y0kkvmwBVGFkZy9jhwi5HOSC4XOJAw0leSc8KBTxhJSnKZOHCNkVFJTodGc1m/IugaNPJMdpUJ0isaF06GpFRMAgPJSErPZMCAmaQcMNEYSElSrjBZGAP2JOUWk84YSAuSkjDpKwNOJOUTJkkZSL2kXGMyKgNWJOUGk3AG0kxSRkwGZ6BfyJdbnrIXWu4T0yA2LMTKmLw8PiZ9cjV0+Nux6fznPy/Df3GsOuZfHG8vGv3fmC3Wa39m1ZvG1146iW08ppv4r06D6G276T+2z8Pt2ufctfuCNT8QfgHbxWb8ufE83f/ieFj8O2tv9T+Y4M+sx3FbrWU//VeNT9bW4cnInYuwXWpfV8VJ3B7UbzVYuqbKh6WLHKDLPKALYyhd6UGgPSwdu9s6f2j4wOGROxjKg6HVzREd9feAM+rIOPoy35mxMzmL+eTWnCunO+bCqc5wLJlzcLITGsD6TnW4ucY/f9WYwUVZeewXAlVVG0En6w5crlxwrIVTK77jZsk39x67pFD0VA2ToL/YQI7o6lfGBpncvJf0o1Uzy5s7e6pSFPVO25NLpTpiUNkHUg0N3WmmtKftRz3CcutSudiZMcuw36Id9xsL6hZHnRd9RRzf77Xgzlt8d/m3eWcs0+yBm6gkLzhuk+CwSja14bpirqKxuIn9qWNN938cvPO1icUPnoOdU8vNHj+flzUIyc+sytLSvoxRsXeddmcqyeBUo39o8CaBDFn1WzonOimoXuCUFqEemWS+OBEn/Q3zkqeZjDEPXOL8VfdKp2xIUT9zR5oZnSdiZuV8oF8xzfLEmGkeT6wyF05QGcVOP+C43jL6FaAH2UGYmLlxMu8qAdmbGFSy1vfSBavJ8nzmMS6J/bdm/vvJJyJaqQiLqGkn6JNpn2ixo6qIxay69Po9O1JmwC3wkDxTHv3Ljj358oHBuCMVFtiTRhbKPWli4XwmOSMeSBWVhIXv2PbXG9Z0cDvZ1zg68gqioHc4R95DBPBsQ4LEsV0WN1V82C/DYV6oqbY3/Vw+AHwZTvn/QDurFMdYEUuDNkGZIWjwmJB3EDv0DhH5I4Qog76+Srk7d0Sn0CqUL2zFKxxH5AJxb2gR+QgRK5wnEmOAaB1aQXnHlI4yHGvkDcSj6Vu5Q/4MERyeF8gdRJrhmFEOoIpnHK+R+8bHcJ7p5/KEfDCiSThHKY7BEcuE9gLlA4KMx4BcDfGkeocO+dYQMsFzL2mnjugmaCcoR9jJPuP4B/nKEA+Kdo78aER8gXMlMYoi2gHaL72MG/nOOP5AvjZEcX0tV8ifDBEGeJ6RkyHSHo5LlFNU8RHHJ8ijIbbOwMMr8lcjmgWci5TGpSOWC2j/oPyH4AIeL5FvDLFzew4gTxUh0aAvjZTGzhFdRNujuKniExyfkXNF3Cc0QW5KxB7nFxKjGKIdoW1RRnMj3zOOP5HXFfGY9LVskO+VCCM8fyGHItIJjiuU2qjiiuMt8qDUQE5xLn8jPyjR9DifS3FsFLHs0d5Q/hjBhMcWeauIp4neISHfKUIqeL4nadfPiK6Cdobyw9jJvuD4F3mpiIcJ2gXykxLxLZxPJEZmRJuh3Uh9nt2NfGUcv5FXjiiDvpY18t4RIcPzO7IZkVZwbFB+GlW84PiAvHDEdmDgoUH+4kQzw/mXlMY4I5YztE+Uv0bwCo9r5J0jdoPeoUX+6AgpVBpS7rIjugLtGOXbbMVrHH8jF0fcL9A65KMT8QDnfyTGoIi2hrZD+W2m9CPD8RDyxhGPC30rn5E/OxFqeD6A3DkiXcLxCuXQpMkMjorcM0WX6Vv5inyAaMBZJMZgiCVohjIpATyCXCGeot5hiXwLIQbPGyl3lzOiM2gLlErZyj7iOEG+gniIaAn5ESI2OO8lRoFoFVov9fnCuZGvGccK+RqijPpaLpA/QQSF5w/kBJEqHCPKiVLFDceCPEJsRwYebpC/QjQO562UxtYRS4c2o/xTghkeM/INxG7UOzTIU0NIMujLq5S7NCO6hPaFsldb8RnHF8i5Ie57tIDcjIgZ5zeJURzRTtDuobypKVUZjifI64Z47PWt3CDfGxEmeD5CDkOkFzieo5wpVbzH8RfyYCKgn8sf5AcjmgHOF1IcG0csB2jvKJ9KsIfHJfLWEE+V3mGFfGcIWcDzo6Td4IhuAe0AyrGyk/2M4z/IS0M8VGiXyE9GxAs4ny0BiNXmQJ+bezRllOgrlV5puVs0ZZQx3TD6gXNyhaaMHvc+CoEJ0HvUct9QZluUKX1S+dhyz9A0o1Seorz1ouXelDlnnJw6sq84Kxs8FZw53TF72nI/cYprnNd0TOl15zGeapzif5yDXcvd4anGqdOO2v84l17hf2ytNyVSadV4I5to4X2KKQ6ifBKN/aC3QqpaJlU0s2BKHHVIlYPU2GLrC2lqVfuVhqgykRho3MkQU5z7T6S5tbVN0sJC+yTP/TAoD1Jbi6ZeslbNfbqJRqaUJQ2Nci81rlq7S/QGqEv0e7QLAN+wJ4wBrySssKJTAheobOhHO2WpmyiMbdxGF/iG3LsTF+Dwa/SVTXiO21jzuTgJp3U4Qoc1LLHfgH4bt/SL/WllmepMs0j2MY0uNVk3SnCowz+RdHJQCY8r+vHYjK1Wne6cchyir+1I8vG00KPXLv0GONVn9Z2OmDCw8eMDqMfGz6SzWsM4BLG63mFpxttT2sXzk9O/OlzsNMJjOk4XeldEqoPabLGs7U5ntzgTVTVv1Ge97kwutjXf4JX/TrFq4u/8R99dvJaL9TQErTbtxiT9vGIS/5lY1xrL7pD4K/L3BXns/yXf7sfdtpnD5ms/Dk31nb08pNN2ubkpVzs9uRz8wniz/7j6M3y9fqwO7Ph2vou5k/42PS7qZbdYXzRxv+02R48vZync1T/j7qLJ43l5meYhhWFazdWP7unXSvYf+bRfT980yXyVxWK63H260NfW63EUNXs3J8EUIKeAbKEwBFLueaEO64zA/Uf91nqNg9bLoN4cP/QmMoLvlEaSrJ4NPvk37L8sCnUEqRrVCTvWJUIfL2+qSzZRI7hYpDe+1wn8SqYhlagFXd7ml4jhA2TQ8w0KrJzian4D3mMbNRgLGS65S1pLoygDbJfyFU/mKErmsIr+/2QgXDldCyAQbb/+npQhGRPgY2jQi/fTDo0VMlxhja/d3XpU4g+mVvDwIYF0TDYnEKBOkm+U9j4wpOMzTvgnl7ePfyPD/bxOXhq2q+YbanqipRtby0l5kKh2LVR9b6vIHxSCDIQSPKWzFwaPL7pIYxtNS3GcZnnb3+d58iCBQBkygh/ayE5oFT0toq7iUe8jpKvvTnSLKcDv73OfRD2FqyYUNO2HqozXApUI50Z1iBfriR2t7rhJ6gVUYbiiFCu/ImF/+z88w83yrZ9ifBf/xpO6k8SHFrSTt2sYXYtCxgCIfqQbc1XOcThPhKyjVrNfK4/jz7hu/Jrq+IavUI/xGRc8I8fD9VIeY2drDOo8393UwGRoBBS9VpxPfUU2JbZf02zDFF6YEhhUStBLHWHi9+ISkQbJKaQSKchwav3VP+c6B86nZv8DKD/ayDZ+jbrtxX4tGa4lsB9O6nLxywlEDMfQwxyz0S19vXSd3L0WGDGLtz0jjumKT9DFFcog3NWy3oEX5bKcDXcrzR88j0gauZCbt8E+YDi5EQ/Pjic3BIKi8FOTDsXD3OomrqXTRcc+y+dWzVOFaMroVaukJJAQId5cPKRWD/NM7kDxcFIhgUA9diiPnjEIAYq3FqMzRfIjUYNsKGl1rb2W1C3I12WAtCQT+0QXU5LhvZGjlsDnwcPNtnThJVKsgrRHcCfvNKFG3Vyj0CbOoJIGQ+oFZUgqvUunVKESqTNQsuyqSSVqqbsQzrMHzG8rB+jHJFBJm4A0c0mF+isRqLMi72rYO6lZEYouE/Xdt9H8eGHCmh/Lk32W5fx4I1BXiV2VJc5E6JSpWuFEVLoWSVP40ahGVyLIYF6HQgZP6GZCD7Z6p8A9RpEeQTZVQLqL4ti+07HSosdPmIHOAQr1+/BK9S9N0b07rSUVu/JoqqLFoCcnXbcaf3eTr9OSDA+JdCac5Wi5eDxJx6B/CR4gzdgn/qjq9q83Ep1M+Lu4ZwP5oVo4udDdZJL+g0Re0HhFY+zqu78iB7TgMt38rUeRC42SSdSViP5LEnpBKfUpIFPsid3o87exlmxjAE2qsepK3MLibhiFBiqOo3AWvIrA3MersfLehEjRbBdpjaIZMvWxKdrexzVZ0vptZ+52CumYlx05Vgqp2g0nN5OTsbp72yehELdxP+/p1XYgp2yeXsKpPSa0xxPwk9olRrMw0hsByAf98ZYN1R82dV3zeuP+wGFZhmOcnOTaoG3UtLNcf2jnaVMtbpUuwm+wcugUvAPXBl35v/RwXe13F4k/9TX0/oX/VKPuroM6h7tYqQ+ho8765rc2ctFNOBqT7a9pxHp2MSpB0NCyBDnZ9cbXPjh3K0Dv9mgFPyyBt1NBmjeibL5YEKBMfMCFPju7/LGstqRPBPjcFIxtMlu7JA/U9BLL9MMJ1pxTq39AgrP77kxuQ4P9q5i6yH4e8jzK70jiZXBTPerpgnyBa1oMRzcCBbWkjuleTn/y64R/9tXvHm+3j0eopqSmoCVquGMFi6BlGQEfoXWzCDB70nDc9O5dYvMWm5NTfz4R0/2PfWuXRdC6FbMQr//Tv+zMGW0lCXHvCyX8GF/auZNLyZGdXH6WZvkVor8Zi9i0mGC5DB/AOHBneetJcl5BdSW6HSw01Kk1tU4O+91QijXnSoz0t8MOiQamt1aN4eamLWV8TdkaCp0wLVjOX4jsGqH4DcbiLq311fUtpDvIIzDwokRLyW55RygeQUGOjkBMYBL8P62Eyccbp+lqsAr6s7+CMvPIB6DMCForJYS85p8lsPSNxjhe1iixkLp6e4SfttoAXu8E+i7uUf8QjnCpCe+g6GZSZICFXHDzi1+eCg5u/Pir/E5PH4Rp+hlJ+bGkzjZR7cb9if+LK2t6Zjk6mJ84LUqlWFyABH+U6yjECy1RrsUZqeLHdv3+ZCB7HyB35Ha3tx10K2lVrKU4e2a10EtnhY48ZvGEsDjhVVXX6DHc0SdI1zRlz1TKSOzj8fexT3p8keP9y2Liy3F91vaK052T7BpuXcLibpCpq3YqjRfQ4CsNBvnoRBq0p7H/hNLgeADUzUtfLh/8lIl/0wm8ooVhD7PnSfdTByfP5Humb+3zepcCtrsno3h0xh6YApdVhGGiE1Tk9eebKvYPkIEL/ZeXkTH8eWNaDnjXXRK2PIffU+fffc6POGDpn0q2/oob6qpZml5XE+SJm0MQv67o1tXa/FFZaUe1UMLcD5sFqHiRP2RmRaql56BYo5hN58IMoVvmbBAWQRhRu7f+hk969spX76rXy6U0pG7GbAPLwR6f4ScO3uJLjOKaOFIjXvMZyYoBiBB0BBLKNYs7Iy7QeFFSnSjHU0DKuXNECIThIhfaJrtHN3HhtW25Dv5MB8TPlg8vHWKw0MzpX18xJTZa8oYEFo5lAPeHSfzav2pjgOWVTrSHmusR46LxGS/FRCNUqL7KYXUf5gbTooWzTZK9yu6MJdaQYz3G4VT8LqbqaTqZ0gqd+683DI/j0+Ef1V2BH1+lt2F4LkqOSEjrEkZ29fhbYRDmnIO0THxF+i8z2pYr/WNAhd5QYPWzqYwBl906tTcBwwTyWc/OUdbOnfvI685qU7H6ske5f1oIed3auW8fAG140BzltoT+p/QkKEcjXRp8Grc1HL4p1O+ULIrFUn7hWbQhX7nfP1Ku/ck40Z+/A/uJQWLMsF0w8/uKpv79dqhtjV/78/diWhZX+teIbYT7AeLf1J5KshUhjuX0QblxLnG31fMLA8oKwmWBctEvZnDGLBL7X9a8ylnIpipMlZfGhqLv0C+WGXXjl0F+XBkbn8efW/Fc1D8atzuX8UfDb1Nj9NgfX2bOfAU78FnljoPD5TFAmK5LT+LOLIYYaohDexGQrfA8HcA2K5v99BMdGojWlLFfAUDYezbeX18/hUdpcZ30avoe134PPc2Dn0uTtv86FpBJU7vyhQTz9In3ZW/SKbuURmKqU34AgpRzHwkAvnFqPbThYZlFlD4mh8flGLhtAcTl4tXrnrMlBEcAypuUYvbSay1MIIxMyoXCY7Rp0KE+uYl7Y0I+p4B23shmy0yKAM0FcaHslTY9f51xvpKFtYNybuC67s230qVjCk2GgubH3pTbE6rKaSZEXzEXubncWmfrcy7T7HJTEDWyvjR43E2KeHlvWft/LQ2dhsGg91biXEQnMlJzfdWOubZks8PyWjWHW+ZN5XpKmQOtDf2t2pgqtZe+sFvYHOwmq39pa6Q6X1Pu8rZ6435IzZ82JFU7LeaC5naxkDi9kiG/+T1sBTxVUE6InduHhlMXbJaaCXnVQWV01IVq8qGWUBsL+VccpZDFVnUcwxNWdSL88k/ZNEucYidCWOrsl695v5+7wGUvfR5fzofBf/mDH/u0t74f5q0r+VMzvKVXOpkJ+an75vvU9EgL4UefNT8TAtbbMMhvwBfyo5dJ/ypsgraP2Zsmy2/apeslSg5KUfwNwnXrf5vTf9Uw7Hl9MK/iXL2zbv2VvmC+Z9y2Md3m79YWwxi9jCIUV5HOHPRExrFzoTviJyAffGgl3lQoadaxv99aK71i30/rc6nNh/M6n116Cc74V0f+lT5j953kj6ZtUk3Ne9DdeCgFCXBPAgkkkFsLpBRh2a/rX8f40OJTmN06SloyojQX29GHnxO2Dd2qjuSJ0iUBB1DgR1XiboeKGBYchHPcm9Y+6zSQjR9tQ5vdKxlTlMT3gef8q42wBLh6Ap9vHMwH9M5nB4WTSxD4ump85W5hI7z6JZMDlL1kuFBktXC3bPmbXTBUvZAUouG9wQvwvkrlz2X3kDXeXL4+UboNfsPN+LjfFkzTYWa8VtYOhd0j5uYT8fXnV3zMTpQGSuci138VvfZLKSVF9JBLEt+bDVYQTRPK1yVnKcRVgeN73/NLnLkMfi6WglP4zgQlgbzPTJ/D05CxlQJlXQU3ez7H8TGLVR1r7NHngCZtv94rcH63DfBQyLW1JB6J9AdFEkgkt/2jTNRk7hCW4U5hfY7AEA8PzAJmrdDGCl4V9IRYQBKTNpH5fOOXqPtVnXFL1i5LZK4Vw7axXhsLRiD98GakVo70TiKy6R1xkGwdrwSusTpcGp28o8SAjykDIlcR4vuQrpMgUi0ATT22nT2icpa3g8GlT1w6hEzt+F5XJDpasq3etU8UOhQOWL9TwU1c0ejkSPoZXbdJRaqTETGc9x2GWpQ6IRC0Y5ORW6Q60ajlLVinqN2/3ndLvFQzEqmO0FfnpqpbKXWYieq8Seup1Q6xXzJZyzTj9XLHOEbkcol1vUWlI2jf1k1RH1vuGvrw1XMQxa2dhqYfpxz9onElfp8vUlkdSqlDZOcZTahTubWT+AL9UqB1abVjIDbF68C9l1Yxjgb8ulAkXeuplNp5t5QNaz3ThRKNFpFDIU2aertjXCtUGrwwonMO/pVeqa6vLdcRoJLIrtPkiNS5spjo1RElsc1EHf7Y8HQ0yR1yiAld3juFN0GyjTU/3a4vWDwUxFpneRdBPvzn92ISVVgkpw/YsloX4v43+a6AfSQBeBqEtA0Jc2YIPoGNi0/RNE5DQIUGMRkZQ+KB9AwMlhGrTVzMv2jZ6rVaKBVC9e0x84oAP2z/y6fsbSTwleQ0yPO+UzaPuvB/CWyobLVB5vnl1fbPCgwyet6NvFgP0OHuzWgkfRrGf9lvm4YV8mf5TtJiBUTeq6d5Ix45VWrkvzT6omLK1QN68hURG8AjvBpJBTfm1YXKsrE+oKEEyryiu33l8whYYi5dyMxu+GzENbMJF5zI3JE0PhyvnXBcETPuz3yYbxgyvEPfooE4h9vSnGb0VO6MwBYtQQq6mYsfvFiaOVhJlqQPAkYT+VEzmGL0u0fSearp/ocYD/ihwUxC+eHJsWngD45RPkagFwvFqxF3DKWFm1LgA/yLOCh4JRwIDZUME2EQIseGqUNAezNF5C9HLl4ecHFJA5MFnoCImLfyTtPqyaXS+eEm27k/T97VejSXp44XRjLCbLcYLQjygkoQGJsuoBb5vaxKneFe9Qtbta1nFfhnqS9UgA+fZbgvGQGyaaW19o0pFiRb19oCrk3zhNOVk8qXxBZcEzylLSIKvxmX/7g+K2WTjfl6iwwF/lvwd/KHOe9t0UGxLMo8dGrjfM8WShdayhcPdQiMqWeyLeje/4r3J+iJ5Qu+oJ1pJig3Nw1I7V219lEiZrnXCkfTkfALne0aCQhyzzJW1M9cdC84VSXnUn0YOXdz8RRA4bULJg+8Ld1bbsiSZdaT0cJq7oP2MwUx4lxB+1msMRDnHht3oLTonu+R5cIGAVoOzv2j/SZRQN8RKlp3IThENY+1RZfXOTlTsydI21sQ8Beg3IH2yQSdUE4Zn55KQxXfzJAak+CD1n4Jmos1/YBzT031cdsbn05rHpdn1DwBl+25dxRZmuei8NpyDNHDC/6mRpSfqmtS3uctAVSoE1GAPlSnVzk1MVh4paLednMce+HCPBQE0pAFw06kjn/NNwGb+15aOz8+HAlmhDCf/b2xxAmzLD1hH3qHIlmAVXI3XgcJXFaszSGYJ7WQr+TBz2UWExyAvgFA4KDI+lYGfgQe0CvW8jOZy15RCJl3CVIHcJRxbnrEAQ0acM13scEshB+dEEVKy+VdVqS/t+mLdVZm+ykq7A8o7MEVF0xMkPGxQ7EBt9cv7yoWGpDE1PQnUNoAAlHFWUPZAhwFOQYTf6CiRYzXTuKlL7Qg4AAS7+7+LZqbEswEdZ9IF7SlcQmTyhMg0AHjkEeEPTwWCzMr+0mXYDA7c3853ARWVMAA79UgJrK6OusHXgA1jtCtMhDkTchGDyQm2mzHegGO/bXBZtIOyKLHjcO9HO892GQy2PlbbIZk03JnNiCY02GYntKqYhRuFdh3318y/plw/Tt8jr6edbH6jLvOsUBTZCMWvvXhWK6+pAqqZHoJ9ggLGTl26luSH1egvbG3QHYEWeKfxjVMcIKFa9Yktjo8vucEVDGwB9UxcgwBYxF0cgszar7izZgrSzuZVLsXxrdnCxgJ+zyoWoAJRmo3f41ywOAAixMEM8hMHSfQiqyXGM70p9VU5f4lZti5L+olVGalHaU+dgklCe96VEzoiLCpBcxcZKWwMeSRnPMCIbzmRrxv2V5+m8G0iok0FEUv6836f6YIPkxe6Z50bv5B1YEuH5ZsgvQ7OKmGrsQfqWA9/IVBO+nMh7M64llJbzI6spBEzkn/6TRYv3kzfE/JUlN7BrkEIUeFJaVLdLGvGLIfPgSUKOD4XsmcmaMI1dOFa5QIpd3FOeCs/QByGtWYS127EFGo350/MmQleE2e+Jk8yACshFi6tj7ClmY0jYZOXDQRabHtRRPKawQ6gihuHIqniS0GM1gmRlUN3b4lIbF+LNhc2hE6856JULb+PdV7Sd2Gf57bVtOJX5We0Ltkg3uG2iV9EtFFP+PHQ7Dv9UPIznHCrA2G48GqI0vBlFUfwK/CWAz+84MA2JlTJZGG8Y6n11lDbFOha67t9OkYt/1oKQFJOmAkNiYmoK06L7gog8QC/uKEuIO+kC2APKtR8dzQnPuuJap5ZYnBXCnkYzhMbyRDRLUE7DJxEl1QTOAsJP5XhDaIQybEymbHJ7NaMAhiJd15mYBkIYVVFOkfgS4tYJ8DSeKmEqXeXCcUNQC+EMNgkSWNZbEqmaIDsFbA8IS3lMtBmhCPZwtyOQJiFWfZNI0g9s8V/UMe3KUn1FMj9wQ6VAJ52kerxy9BfiHwWY/fRjIH0LBBXaJVzBk6TBlTFsBTLuhzkKLTAqdJ2LEAyxYkdB/0jDYTuQJE5kF8Y1RcWEJ3USTbO+mcCZGZPVNHszTuOU2mmZ1WHYWM1Sbx4T4nUrQPDYFIi4q0zcOl5aBAwWNe57yc0XwJEoMBL1HQglKgMPH/rY/MkFO+L41iGYdVTQGgBag+oiyNAAuk4A6laNB2xYnh5hul9SqJ7Hkp8votIiINBk2ieClQnN9rJlDSEle6PONmby4hcmHe/I1R02UtFvg/nHxa/zrWmqOKcbVGtRnJ6cULJ0c3/puL/jG0cSprp6Wg4G+S+5q4Zy9GqSWZf47TWUKs1ohwkOQyOh+nWIWhZu6yTNeWGYQ4ZEzXk1dvoGMhUbdMFPZONE0xY/QmAxWAsYnxxqtIP6PG4NlNMXBpx44JRY//GrrzfsIxIkSzEb7LYNokgCt0Hh4diSD2I4HTFWMxwgd5yc1sMFSsORkhyvIciUWaj3DbgrMIhxMhicOQzbCs5aHZIUJjh8qqbxI3/Dx72OPhJC5RFybyDokUiwYgvXs7MHJAnD18NwzZ0OHTixcddIoHs2+zK28FrWlmDe314w0Zyqmon2MmpDZaqWVuHpMMps3wLZcrS3jTFAjA5qiRtjKZCvxFrlZc5XU1mMZuGoAKS+PHaNyQvEbkbNtoC4qxtAAuB5/pOayIwNxgoIi7+VHRUCQCa4Y308KVwyOvSqZ9RDC86Mtji6GavZUxA6fJ9/OQkfnfwp+i/J2V1c8EO+WGwpMeVxvWeWX104XqQkQe1CDgi/etLaEfDKoMC+bA4tAeqERCaGu40RBW7ZC3AXkY5m+epTEDXr/fkEquCYg1+IrgoUrEGSw2SnAn62WaQJ9IvaHN7JzCwq4V4XmAEwLPMWo1W4j/UcWJlENYpQ/4A1O//2be2HgtXXMinNF5fHc1HsiRyezmN5wCIHHyALCl32Qg/x4GSPZ3WmzXA6d+x2g96EwzmtjMOFQ9jN3UEARxlrP5H4JpzC6UEDR6NO0tAA2FRtfzEJH5uzmfaNHDYycKYifxNtPqFEka8mLzg7OUnKBOktA9o1l8EX+W7hUq5Y3n951FRYti93tPjJ7T/85m0RmiBScUP2zkQn8IPIldzt37/vDDvwCzHHwl2dkU6+PyjyiqQfvrO5eci66Hp8sSHNn54O84X0XyR0Co5PkwJG6Q8lYXpb2IzJCIBgMzo3hCO90uuCN9gMiZsxDEGRLAd+nZqPlyyI5Xxrun9uX9wh8yqN3wDknK8ufSrSg/4W+z2w2hQQEEyik79bfLRiRUzgHBzZtCiWmLHg3sVVwYVi8wawTbFT+jtfTnb1lACexlOAgJJvOSZwtFQuIn5zF2jDHyswmsNMyEYTbU4pFxNaEUBzMSzS94GPFQOHDY0OBJzwATOwc3iTPOfiBnF1aJLmAIzI4ABUSeFpj/4oNGhqH/QNQZV0A+asyxF9mgf4oFN9OtMsML2fScoSBPGV6AgnyYBOU2xksS+MNODLV7E+Q8RlgLR4+Gb3x7GNWfh1aAm1pFjWIXtqPBT9Yh4/9OtGh3tlv1H5Pg4LBhwS1ndVb1WPWb5FvVUK/6I93I4W+WXnXmXrWsV8EJpJYNHAmbeuBHhMuk1XWOlYtvhVecYWzON6ceK/GEP2ng/2NObzlGv6CWQtyQag0PVxNM/9DtbzRN0wFZ21Mwp31Vl8s91Y+fgRn3LptE/sjGQNaiGByuyXKvrYXT3WUuTMy9UbA03AVrw3Uwn3jUAH+Y1uUxcjJRY3KBxczh5fULSXIEmM5ov8AEYozQ/+bfbVroT4Xxh/oWz/PgxMH6KADu9++T+IL5rRjaE235J3GeYAhI8fw9y3YuhTJ6KZSzlu9GVb6+7L4EGYFpaaQKkbNo/UQ8T9pR97zWp3cgWpRcu9udmZo+kFG86OHLL175Jphh4fCD/+D1nqvf5gEkXVCmg/PDINP2GXFu4N7ClGbkrLhLkSBwBWolCTGicsHxPFGyxbJl2bkwVb6gFhajIDesQSmfqPQHcK9NC6tm/ADnOzGui/ZAgqUXm3M5ucWt/hRWn3ML3c/aHVy3xVx23efSjHRVhAd763LNF1YjpYkEYX35dSymjdyC86qXvHlzPTitThS9R77iJU0A3Q6BGd7AlrLgsshP5zsdA0UKdFUN3z9wyFaE+BluzPuN7xWbbymR6Z8FxhsSZTix4tMKRYtlEN2Cg+yxETsBuu/3dS5S4qcXjT4DsATXIbz3+IzxUQux2yLPsDgmj5PmOUsMQkYaVZ3GCPvxMGIEb47oLmGmi42Txu2IWffGHIt4tv/R4b7ysWGZJOnJxykaKQ4/aWxag2ZJVSSov42hxwK5HiqXiLIlsO0GLIwta2scsUsttnv4zKCBYS6FVHmM6UuY72NvWkLnHXWXSc+nBTwOuDsYu7qW5JtPcUTFlS0FUrZ2ALY4gIYAJKApaQSmGj8BNIwFGZYO6KV79pwame2xONGZecJyTQweAnYfjfGlloYlfhHZWEc2QY6Scw6Y/E3Jawr6ubaTH7Ibpq30cxPirDX6ZjLLhCimaZGPsjjC8CYr97vz85jK9grgUi2bM2SZlehRBO42IlmDA+DDtlkXYi+sndYKkfxeptmGCuxs2mfw0sk/ApuLkTLqnnL+jL033KK2N970inDuikN1X3E2X4ptd0mvSVRk8JkNHU/VqyU7k60ZTbbNjstxgUcpzLNptUjDriSubCe/z0gB1LvVqY2wrqu/twi/DJVhFc66jhWaolCr2TRFVwyUXJSRfYLGT8yO0ojEzcz7xmaGO2m4TWSnuHZPr6iRgUUvYTAV+hyrXU+T9PeGiC1xm4jVPo6/g5udg6H3JkuMTimV6Jdi9gbDyDcFq903LYIuKvLa7NQHbiP8+W0KQrF8maYfoajtvek0F2mDvgSjarG40n/0gcLP5CXU47NwEz3zTNEJhJSSYntQIk2np70Ut4U/58pjhMt5BYqeVnOHuFyX9Etr172ircnErTqi1Dl38e4/aPtP8RIBxGsHyebQd7HSWKozKzLfUsVaWss7oWhrQf+2NZ8wMmy8/ZNW+7x7BGV0Nc859xyOTm5UpuWmroj6i89cCA48wG3V0SfAIeMPNXMYqRCmUg5k6F+1ShuNkTGbXPm/5zm4tAqHL0B8GgWZxhFX4SU/usm08c1Ao9oKy2EyTAPSM1ZHy4SGUQDAjAzZMnxAsM0OoRVCErO2SnNxzZu0WqnCHox2n8OC4hnGxRz4guIy4oLF9thU26tfDn5/hItBQacxg7d3BljGZi2a66Cz+6zz7Sn87ufoF2f9bU6b9s2vwrYp7//+lZotfjhkZt4W8WKEMNykFRMgmJGiW0YeWJPKCXslpjFsrfQrcONotN6+1xy4MXIo6AnM2oXUHP0tVF293fJAdyE7EI1obdVjZWwlk8LkF9796b02nytZ9fMcdQObG58Q1Sa6EePigvfw/ZwVmTdyZlf6vQ1nhsuKlytNaXJOK9FRRDhqxcwUPCrkSA82+UlMKLBQLPFaT0dwBxLArwDGHA4RBz0c4orpnKF6z0aJeWTAWHfQbVPM8sriQl+cdrfuvUM74j1q1/P2zAG7LN7MexHYpc+6ppTvH9tCIW2Dr+JxtbZV/jlqh8yKxW30jCEe5LWwVRMyIn+WlD1aFP+8mzmrTK9EDyKTsEfceeOchVdZrqJohCwVIaxWYJPB58tkuYEDXVLjdUNvty0eP3Y4knRr3Jt1+EjBVBcqp0Y5J8r3b7j7s9LI+qu/cvcWw7u/dBBBDpfc0E/uiX+H2eNt0KMrtJp1H7txv3jFN2sVUYbmMCz8DM01f8zp99dU8t4+qiC+oqGAUV3X/aOEP69le5rfn5s5G7D8kqVZTqxM+VqOR3cyD/3UCKbQ8vqjSNN0E5XgRFgYSiwVnMviy01ePEvHYh6xS1VJyAg1KTAXgRYkFc5WtFlUvmxqcwbj3kUKNUjOqBUDFvdhlt+b0LfS78BGIa0ea89AV8FyJKSYhDv7i9kCAPKioVYcOW1o3CoDxUeo2I2gg8LGhTfmdZSCsx1VS1j1pn6r+qT0KszHmxwZM6ETSS25FNjm/greq39XtJkzoHD0rADl7Izm23WaT8VlYx8m3xsR7vb1c03Qz7Zz8L3AITsx00xnIje1TshB6QBIlUaxKVLwnkuXo0zSp9GVVYS9LkAHD759iEt4U54axMqPuePg80pB876omzqrgKBGktC/5i5MYmBa2pRWdYkJQIeNSRjLxnBP1GJQg7/Qvmlc/ur9cLJaWR+cA17IoPeFnE0Edx2eUE6br4BWNk01TnNqmpdIc0qaxWhOXdNKk9HVfA3BDb60Z4bbnoI2+78puCExWW+2jGGrLMY3xWwMkCQHpobByHDsHEyWTa7cJBP+DBQx8shk3x5Fhq2qsRyTRqN5hW3q+VPQcHTcOPKcrg8E826b+KWam7ydIO4f9odUWDYnpN06wzql+0mdFtY9LCoViIxojBwZ+Txjn8JmGkwjiqjqN7xBGati8sm6fRi0kY0PRk4vjxkZpxStPD6tQobrphfNFzjVbD2BfHluXWE0p3eZjyfWvv5Gt3tY+AUyzyajvFKOe3tkuAEVeHYrMmx3HeQflhfZ7UVA8rQUIOLHGR3DTZtDXg09QNqY/tbeoW5fBCKh4EqJ4FKurTTz+2FgjlQB5qtb9L3yC3x1vXiRbkriNtCgWlR8l8dNK6FNdXudfQU91nD4fLJergct5M2oXbZvFpvUp8b4cCuuWpf4gGBTm+zokshHqDo6k+I+YnS5W5SUrxbP7thrZACjWfkSlvxvNl3kEl0q52mkvyFWbGieeB7mbO7SMOTVaKF3F3Rbej0ObCwo0jxETzo6vuVuByU6foHiFO96ALKLZ+zvc27SDe9JsXj+WXtOSL62+2yRCBRlQ0zewIXfhXTB7bd1+ITlvOI32c54DzhiN3X5GP+p3f3o03GATk4B6m98DmdCmv5FpLQBXje1Bz8cPt47yjeIqHZijtpBHI5z0pQctjAFWLvBS/tFFF+VZSxP98XTZqswkSV/1RkcvqbLdiLpee224HXFbojP3zOsaDx+O21oPCEPnFGD2oWUwWvWw0fxRgjPjEnEY0MWv3hJM8TfiIB0o9XVQ61QGgd2C/JXLjuHDLZEKKLlHrKLq4GCx0g+VIMA4WE5FaklP25a2+0BdnGekfb7NPFJ+ZvCRwWKhzdaThBRK74/sH1fNuKOYYMJo6utlbinMwvSBCvDgWYI+JcTOMHUcnCIiRLuf3tpeHj02bT4SRQTbpTiIRom9hD2uAlT23ABLiy/DPDMOS0nnSujA7m4LnGjfqeqwy8GDptik1cbt2MVfu2aIE8OFcVHE5LUFsBFP0Q/wtFtdrjmQEMeuv3yOoCBVslSjOYKdzLiXmwQpKQPnX+WxKwztC4vPUecNwO+0ySgNq6voBS8Y+mYIF2R6k/wjKPrRX100I0T6sdN237PPXVfpWd7tGCaZyK7dvkdNmghOFr40agJUuhZFFNuymqJYkK4RnaB0pq+/7qQUea7rraCA4T/sLtXI5Vz8V5wc7ZR+JgEjECxdeezrCqoMQ4yCG/Lzg84nggVPaNZnBgYd7vDEWFIvJmbfhBrqdeDxTMdH+1R9VX8ocvR9v2TvsouYjCSWdRm0SGUb1+hAsXRApI5/lE4sYl269HXmQPsif4lGeqvrT0Tw3NpyL+rpR4jqTiu0w1JdDmSuDt361V96q6aGhGT2aVCFMXvip8eErgLqiio5g5mycdEEJJZNAKamlRgsEuuLisAH3yy1yXNlCLWlXvV6g8UgZxZNIjqmohmZyQFpG5E/CIUyFhF6GraLLRtf7i6xyWYiIN0d5NWyyE3ktbh1L6PShIL0dgkqtsROTEUcAI70nmiZB/f9EivsTwUBKspsEOWfn2EjnMpSvt40ihVNYSyHIlF+2AyAmZpH4VJWwagwLsWVGHbPiw7aZRTSLlOh2I9YQTKBU7O4TjrxrhzxtXHAqRbBWIyobtxMsyTW7aEoz5B/o0BrxE9guxthPju+p4DSqiODnQK468Ht6LNygqAQ0ct7NboO3gnPbRvXfd95zQEIZBI50jE/xhYu3KfLG6E8iDp8Qd8/PGyFWRKoCaOtCvjWijBsIc1+6Q7d37iwUGcH4UcsiGOYtc8h8gm6oB5dA+itMxZy87UIPaHyrC6AKYXIqkh7jeNIj2yhXv3+5VNZi1OcI5USbcVlHEAek+zFS0lESQTQ+k8cTCJUtSxQPMglV5NOiumdjCKsqETiXMPHVbNsDD8zhAlfpgrqdINyH1sn0p6aB2BF1lhEBLVk2Omw/4+MgadjImZDixDY79q94cYOgtY5KtcFDxomzyz3XFkMU4HWulPjZkfgCX2mJ3xcJtuKQAuqzPsrXotiDm7diMSDssLuxvE3FEYCHso+R45Rkac890hNh35Qk44EnrLcvJdkBATlUWXKcKSvQwPpe0Kb7zxSpbuS8L4xEs6P8GVlDDB8T8z7BjIkOkBUmHox4WqMkflQOvwALSAemO/QmCIPdmC8E4iz9xhs6Dc754rSYNWIpAVZbPVFaIvIdEbx6SPW3JoOBZTEwo3IhsEWpmQ5kMlijpov4p/cqJu4xJaVVJQ7IERmo/6Z1CLre1+HYxnoI2wosUL2o0LZ7riR6RH5j+A/gsDHZ38xKTMLQHTHfyTrTDEi2xCPecRJXI1FdJ4JUb+VA7yqWos2IbqzHPmpFjyeyTEowLavBztmqC1MJBDLMdenOdQx0Sc6Lfe6UqVN9QlIKUWDwDiUkfrQDuHqMFq4+apw/7on3XmvHZ1Ycu9eq8C4Ve17b9NgCBAonSslY94AzckF+HNWYz4LtEh6W+1FR2QVjBtU3wPC+H7p2O2mPE9C8QsfjslSz/ZrV9AGbOsPYgFTTcNUe6n8kuhFczdhWt2wXScWFsOPKrYUkxgPcDojQT3LDPefDve1+Mra6Ai9Ptun8/hKthQbm2XSboGzht+p6vp++PZY4hlCbB4KrXIhRN2f2Jh7oRE43tY3OmuZse/yOi7aIOtS34+iaMIA9o5MkvS0d7beKrtM/sRE9u/iIF41BkGpYfmBn5RNWvLt3AMlnN7ej9DrUaPx1VaJzVHuZHfoQsCbOUgs4A3CJpm7th0OamslMim00/IemtTYZ9LaLTvZwMdzmUslKSKnm5f1rs4mRVa/JZEURzKwURjC6Rg4gUcctJmxlIxm4Ku2xH0WcAuNU+9DkGIjsMOCCHEIdPI4XWgS6rvZx380K1KL+NyGNJeFDQfJCZnOdsmYnOfWQX1Uon6Qi+vsFT5UJL+6Ka+wd2EhG84fZeNvul/REpU24U21Z4Dd3I1iZGH78HCPoOn5G8XpB4XW+NJXekMFToVjoAQm06jpeS9LTTCT+YVU4TYaXX//HDz44fzwvn+eWPMDiW8y+y3KmglJuBSJbwPnoNEvAyDpSh1ODGmF4uhppyvCercTVIYHgOujT8/L4mDpN6OWF0WW8YwQpV0EQ5V8kWdMR7zzu8iNefCybqM5mbZg4xm2/OLBraNRbL8olZacFIpqq6/N6Gj6vmhkBl5UDIajaaqFlY8VqljEREjOF+L1hsdG8AC15WE9+hR9jFAMX2RqGR8AsnZtCxFMv6k0DPPVLxtXMXlf0DQQ5xZcDQxTOoSd/ZL1sUQyXp4hmnQQ2kBxB1F36iGKYyw++JJozMEHzewgcZxavy4VJ/O2YC/s092CPAX4I5Gy3KrEwJqcB8DkixBZXSJiDAFc4sqdG9Tmzblcp5gT82p8uZEmnMGB648peTIncRa9JQmkzmS0cNNScpQt2HnOkMzdXnqRpt5o0Den6Dnq0Yt5aEtZ2Ti9Tng2FYiwZBHtAlBOGp/0Pg8AsK4i2dDvkzAuor37QIFtoremjpVpE/1Bb2s+K6W0rZj2qkNQ9myJZkK9MWtEnKLYBYxYxgmRbYgurr0beUUGPSBaddGoHRMtQ0FeBvqo6WuNM/AKO+WZjat2SR2grICebUe79u1HnFKOv2ZOMMJkexBJYtKDwghYSpkdgM8a9SfoUcftntY0gZrPPzoLIRhHpikYAJHpxel7GhnYpnaNuRkdtrZycl/qUs4uxJIuNSsUxBkisHRpZcmFH9KYY5J/EDM2s+BmULvX4dcXr7eP+urQJa8R0c7nUcALp7Cx7Q8TCwrhyInRdQJWy9UUvuzSxS1En/h1sxDJm8wme5X/FjIeINIMdmBJryg/JnbTa1kDavGjYoY5Nt4PmbDDQ1ZyHCCGT2SZlh8Dk8q7VsacCLZcN/byr3GXCNCyMqzSOsY5lPoYHNL0uFGNVODK8onowsWaTN5RIFu1bNcKWSVpLqt/EPVkgI5GLYCrlfYIJ5Oh+yADonlGvbO2otGHfr8hCxWji94Al8jPsBnaQQ7Z9DDEgU8SOx1UgYy6JGikeoquECXvcExuS1yLuyGWWIk1u8sdcR25rdbOZJ9zqDMozCKBFxDFE62M5PjIgvaHDVOp9wv7rMu7dxWusBcOrB4vksVgKVJmnbrw9Y/9vi4vNVg+nuZTW7SyrObXyo38H5q8EJ2IDG4P6X0DG6VwPNWAaJDHKeHfKvMBnw6XMuC3Ad4M7HUfipx2LgGYIx8WONm7MlJTdciC081I5h4r0FipxzJ8VmkIUk4bAu9dNuAfTuA8ewdKXDBLY1wm8saYeRmdDWtZ3KBofV7PAjSCBmyMQ0KTsp+OxCMUbQ83RsR0RsUZKLc1db3ZiEUT/oetOHjP+rQY8wo9o5uEOcNTZQhyeVN3MQ/AwzfmxDnfc92cL7kS1i+9rrxhoNXl8+Z3d1WPEN+JINuHWcf2+dDS0tsI7U+jNk7SPAkNjLLW7QBEn63YUx/P7xMI2Op7ZgALkNtQPl4MjmN93fHkjkiHCF5hHLC1zDpAo7lDUOfvbCYzb5o6kuVaOBI0wto+p7Zj9PNxRC2oOBYpzV2mFoZun84U8MKeAxyRGOlmf3k4khosCJs/JZIcEjAAW6CcA8Eh29Ouf5g31iLL8fLhYA/sbUt6qmVnwvM738ZLRJlGbqp5T2iimtABsnIAC6tXEPdXs5FGDaDVjjywZkjbcHRB9LaIythIR3MgPQfDFyR1ySuwzP7icPhMH+xxLJCXL5b5RvZgfyNDVIzSNM/UPYTAcLEXyzyBdpOfkFyTFPUCdTUfjZxlC6tEk70FxUHWRDqGWXC37BclLIY2dLU8YPSm2onRRk20YUd6r2ZzDEmhAiP45vmTxznZ5GS3GapbJm+ticlQU/tZyzn/97o0hdSlGbCy5KIbuQ+CqKF04DTmrQwBwRBceWi7+AcGSgQaMSvLNSKT5rfVzFTaeXZ8UkugMPoykvIkoeVt7SiEW72/aLTzK18qOUz0Bxcep95kjbYPzhCJXglHvpXDgtqxUO6Yqp2MBQrF/+i8UDyPn1YV9uvPA0Ui4e4fNlJapvIdxnUoMnIXH7PzS0OBuHizfAfAgMbvGaU4GHFAPQfjw0OxmF/pVTUE8JKU9Oi1ffqSanafqVNNQylSxriDyf4h6DodAH38QRb9fkwVxtDc+WGm+4FjOmaXD9xxyAFjNVrdcLSiyME12Dof0dqTB46kakd8x/j802xszefa4FWRgmumizF1IibLs0cyIHXxne+w+p4aw6poad4pi81la+3naSE8mtllzet6fJrTFX4fzH8/uGntqoBrXEnHFH1MUkTHikrPStRAl6C4CqJm/6cMrAstx0vFUAHSjCItyDXAl+5iC0RSG3tv0DX5LDKGllEBiTBiHxDB8G1J6xhTC6E+z08dQg76/qt7vu9Wq2gE2hBhBsxIcuDp1uCoVUz0t4wpmeVGIqWnwmCQzaiw4JhjdgrhnTECNVor4RhM19V6HW0cFCqZnAEofHCzQKt4JsBb+yr8BSPEG0QwLWpsqIGuWDWUZSkGGMuZiApgynd8boaDYolChAurClWoH1CzValJeZqoZTz6yuet21lnhRIRy40XtNb3CGTsw+jZcQ/3hZDjpJarsvEMZSPBuEP9vG7RBJ1SecD/nzMcjx8VhRFLq4hqf6WiDZjRSQ0EoOgTZR+lZqCMAfhVeAJ1duXmMzlHcKAOnBh2x7HVdGTMTEvDqaXYoC93fVU41DqUqpeGE+2c2yoRm3C56U+WnKaDaxiq6S2AWwOC9GPGF0qxQzNSHYLCWTASAEB33Ef5rY9wpqp6oWMsENCG5To+y6GHDwoWf3IRm6AgWfxB2l7nj/O5p1BKLe3kwG0i+8jiAHqU5keal+fcgkxs48r9X67NBjk58Ksj6STOnkaIYMwTkRK9w3eae3hTEIIsAZIi3KuH59A5PqlRnYO+a1cuSdUC7voshGfKl77RSqu7+kfX7mqWsvA/PX2z3JRGMbognUPzZPak9TtV2xjKMGwUcZIT/hY9tzWNpo+tE7IL3Qd2T6s9J9vQRmLHePR86PHqD0T2ox/hzUhMqUO3FubecRMe3F/poGeInpPRUQshEiQN61C++UNMmZxLRwL0V3+KDfAsJC9nE97LSLJMaX1Bm4AeZqN5REDmMmBinpcIEBrskexv9PRUxIyWaEDZMlrYFYvxV+XdvTssmd04yq10gSThU5k/ymfwKk7hESyLL7eR2dtqUf5KzEkTFF3LB4Qk9Tvy6NXMYCEGAFoboaC7gcv8tpH3t6gsfIYJDdzv7x8quwWwJdf3lRgKDpvElwyLoNTrl7uR611FOS88CwIlgmr/Mr6ZvNBZHpBowDvBv84LO/P2qU0RENrlyokaK535uVdqkPqiR+11TsxhzEGk4iApT2J4U36rhID96H/D0x77fblzNroqo22i2zOsOB5t8GNJ0F1y9NMotoiaVZrgWFYf+/sWXCMMAWPi0e0l8xwfC7CL9m8CVigNDbBgUmVvlrhmJWYHtjBKZcLVBCwUJ2y8tFsnwqcSxyIGuxEB5pAOIAU4ypsoEGsfyYOuw1ZuN18u2RPBSWGdF9MN3P6WxxWYhXRPhhMLnD3oCIe1dcC09cl018Ko/+M/Z6oXSRHMjhqP74Xl8U7nwOHQMupiE07qEbc6BASvVvq4RzyN53iVaLEjTkYG3drgXLWKBIi/ZaBaZjvKd9cd914JN9oL8e24QTSig6+B6xeu65qG5HL6ujPPZBm4LfYqIEQmhswvxAQ2KnPrW6FIKzlOoDrfgwxjYxLqZ94dsrjLTEU2xjvnxrlqghyLDiquwwExOFU3YgfBqS3VBLJC+/uxGU32iuUHMOEnOqtrOg2Qbpr1dW/flsY0b3c9NDc3Q2mEfY16hHH1RvjdpGqI1RrLERo58ifvz3WRxvy9/zzTQ//x6ZYBJufFQSbqPLKYq/ZdZJtdBgq3JaGE6ogJl03XcjRov/nghNwuVTbaA9+hUfI5mR3L5vndGjfWxQUXQAITgtLuLWbEYY6FBMH3/WUWzrUeuxr9VoA/6fVkU1ewaq+3uoUn9SZmt5BpiBfleTPOpnik5jehm1w22053B87Tims3gyO2oxTTW3c1dzwGZpX8ftGlHnX4Ip4GAJ9MGFranAFOI3HCXpz5TmOhO/1Fn8vPauOOnijqCLB1NE4dS84dnOcWiv3jja11phKxPz5F8zFNtPshwmua2QUCEBOyZAoxkvIsp7tyRKrKGjChDZUccO6X13hfl6LtSxmtlTFrGtFTmQOFP/3wKadEelg76dQb1e47Yy7/ZpQwQeiRaDt+qJlffCR9KAIfhC9WAQ/OvV4FPwkemNe+1n0qAt+IT0YBL+69GgTbP3tBjqovfj2aslrLGrO2tImy8k0OFM0DhS1y+uXt7qIKLjKxejkFmpuPdtns/h3quPEVvTBjd0Jio/aIl5INLw4r30BDGUl9Ou1Tyb5i4gzpaOzOMUk5WnvVEtFzXdsqyHGjmtw/zWoqGlfRbh+0Q4ZDvyhkJcYBlxgtYSsnZuy5h0QAULMcAvKNS3k7NyoaQMA5SRK69PKtyImMga/VzE2SZgbnGA1zwqo4EhiPuTSS0+dLZN3GZnSMOYnYKuIL68oDdPALz8ACpLAnoXHVcoUhCREKfBYupshyvl+6a3IGhYUWU2B+I9qIcVyCVcGthfFCdBOE8an8A5l+GwIYznse/vWGWyyGW9qt9DMsQYR+thYtBjlLhByAt8reut7tXSqMIik5i3FLiVHQNTsdGK/c9pcuE5LwZtLnPkh5R1V8tWWpQJj/CkqKsogOgeYYs56u+vhN+6LG+Gs3dtj2PS/pij2nFWQHMRTalOWz9bVut2uY6vMLng+BzXluXC3KU7Vx43/Qbk+0y5lcD/uheQovpAHJcatrnmxeLdDSHX7E/pqS80mCRAeVK8wuJ1+Qrkjdr2npzrdVVr6g/yoqEYWG5UTBaWqIpkpCtKHFAwCd6vmP6FFRbWDcchKguohPJkkhOoJ2xRgQeGBXySd26WBgW+FqhmSARmAXDGk/qGSTXEHkxnVYu5/2BgDPs67ubdYxtDOmoylPbiDGLbJPnSqRQyNYrJK7/6oftYP1VyQ0icbfWT2r/H56ZD9h179ZWU1CDHAXnb3kVnzZ5a/3c7DzTln1wM4fXEFsjNIDJ/sbEPokCfQuakXDB4Uh5lTMrojLPYcHxm0xeQctkzLpMMwpfDoJud3zeQwrw7Mo3JyIDWJFBvDGi5H37H2Tr0HftGZUYih9qFEzABRrORIXsCbdF8eshRySOLLYxUWcI/1w0R+jyBHFUi9BFKlP3pPkCoBDokp+Io09g1+UMntzJGrit1FL6J3hAhs/rzjzx3KGI0mKmp8NC3FtJ+O02KSn/aKY1QGmL3QBsfPczndCp5OPZnq7vwW90/wRAovdfRFrbjWEBXBI5VWwGgioaMvCoXa2h+KhYOVdAXgUIT4r9OYMKRESaWTEFLC+cCML2I1DuALA2ve5oFofIehpv0FVhIXk6qT99ajkUU34zTBJqkmMrIzHJyGOYVzQ9WM3FG99YqwU51ZDRFzPn/udd8YyiplGbAimlvzFOilUcucRvotnOoSlP+wzN3fGZ35OVyjHf06PU0pdFM+a52X5P9UI3AfUoKqvtqXTjjMDRWQoFkLCruwABrvuz70c/CqBSUMML6It86R8eDAuQp9xAzT0NTW3p0OHW17z9AVxfsI0QGDQbeKctg+m4479n6Apfp3J9NzsgsoB458dhDQxjgUXQjwe1OY4YqXYYD5maFAu7THbaPmd1vfcYfpOtS2e56ZOmbbZi9sI28KujfPmFdrBMCcY/1zqdbjFwVuTVWgxZZJt/WOQyju5eSa1tVr+/0q73AHfhdGJi+s5O1D95J1uZgZRd/NAtwejn5v4+YJnaIWBUykvd7kBg+f80QC26zYSF72Xx6JgeaomSQG8HzlKswfrZvbd4qmEKV+oUiotB3twIFEeBUKRY3z15Zex3BV8XBgLrD/gsQKuJL/9rVmWgSMfaDnJRB3rooEFFZ6I3vfxf8NmY6Ba+0NZwNvll0PzL08U9fs3KtCEXbi5MRJiFwTyw1fYwt6afg+y6Qs48nXerzfiNSIe2005Rr4NNr7jkuW46SKbYFRnAN/gIqC101SClkXLtgj3P3kqzADHgnDLoOCAmBB+dt7muGnbtCzZ70esX8DTjXKWhkyr9/uh2VqzGAf1f7LRZEr+A3IH6Xh/zTapxB+mMA//CT1qB+TNjdGrfHx3lekjN6Sxof+7dyn6uYb6VAg2uYQUqwDTz5E1c8JMUcXl0GTmQpotXFwSdhS8v9GenbbIP0y1dZCTO3EZd9xK2c6je44GFWwT7Y/1ESE2TwWb3XJCx3TXSSOWEZEr7W8pRGBMxR89HHgIy6D8Runr1y2Ty4/y5odVUk09K/64rDU/w//kIpbqx7x6WyWVZcvK1acFq9gK/cx8ncUrzr027B29g+XKpDhMPpA0nR43xv27T9DBelCGmQfMrcogz//Yp9An/616kJ9PKQcHAUhOYWkZsVTMuxAQ2A8MFUFqrUjSg4TFxA8BnS5aDZmEAr6zLU04GiOqWKHqiq4TumZg74+qQxd/8I0BWQr6NvE3DCXMTmnrXHqLlDmU73pBPCAmrqjQ6cepMJWMyeNJ+c5zqAibN9z0qrP6/Gdg56Htkcvpe7aqTLFoJwAtDsE7AOHjiUk5nOKY0ijnb3CR9/Lk1g0CUaRIaZ5q4NM+Y9Q2cE7ljFJUQ1m9Fz+cHju5aRR8UKK2TJQ6WgDH7ouOM8pU5TEd+A2hHtvtOkum/Rw/dFpN0BFQ7FM83wmgiQ0iDdoRzNqD2mrlA/P1+KqLYTaD15B2Q+jmv1Lue8Knv+RoG3urqKV4qFyqwaxSINNcHFLQFrwY2Ob30Fh9Q9U//ELy6qzpmw7dK7vbHMnvQg2EYcySJ52Njkj0XD5IszqHH+vka5wUJcDaiJuTyNj04tbtKLpkuEmJzA/2V321kV+svyty1vNFSE/VBKT2/Q4P3jrbSnucWHltlLiuX21w+MSDOYnqxwTcevY843YgD+trdB2g8vmL2ESEwHkNfR2Gch5aTTMZPpMucr/pvivs5gcOF3fPFGJNq6iyH7by5MAlUz1HUctmPZjoKjBaVIQl4xbw7BpO37+YK5bCjy+fdOBSYOM8PNUL2BCg7SIwx0NdSDkvWew+mZTKWLoHOYKB2923Jt/r00E6F6dGbs3S6OHoQPDR1ReXrElG2ZRqK3+H7k2LEBIGwFCBt5QDemKThycmHIPyBgJkD2Bjg/0b7hVxJFbIBJ+EtqiMtKUPl6QHzuIJj2N9Z09DWPfaYMFEkWk+U+oBqVjNBOt1ig7BCmDHxe8FgOqhXDU5se/UHN++VgZYt1wiRcqQIEICkD85YJoJ2heczgusNH+TcrX2yuHZh1KptbZ4HnQWVMb5p8bEYgf9ImOVsfRCQDf6bygGsR4qhxiIu/pstrK9z7BSKeNuSR9xJnkzgcUQWh+OKl8w9Ghsrvm6Mh+L9D6nxU2xOqTVzO/pbaa0VRWYTk23bWxOrDf50beiQum8Pi5BVPDKWi/KRzApwyG4ZFWHah7CNECalOkejPrKpxJWWSztuBtt2XuxhAQe/4xZ4Ft2RN0YC9IP+wBp2YTwun4IHGKvie2J3A+hSKiu5bbV/ZKpJCpBT+1NFuUTZ6ALRI7+9RZFH1YS+N7TX+YSmt+KxU8sjWD2HTctpFOeJMx4enp0Se4lXRZ4s36lWTNhxDietteEAI8eY/c/9I5jKHpVISfwAqk3tAHEeK6IeoLYNMoROJ6jF86N9yUUw6MGj37DyKmqTATgLDHUWBClYLzsfD2TWb06eoHp52Nxi2wmCxshIYIrpMqsh5GqdfgQEcO2rPCpdcYAe6OArAUV/Ns99RgLy/Pm/qJqZNXn1JzpyqAFpCNap2kAQm51Akwf4r+IwQ49jxnShOaQsS7lYiI3DR/NdQ70g56UuOCREN+/y7lA+ITsfnnkXgiRjcuiafqeMhk55bfBra/yoLefUgvMobOOHv7Am6P4AK3hDTFW3GxthSvQLHcoM0EZ14mmojI/IMHqxc9FVD+o14GEAAopZ1lmVW9ow5j6Khzc2eh8IPQCbIDxXrhjx9yKUXOjGsU7M3OjBH4bfEqUrYldKJhJ9/JBLatwLf0nuju8TX/JBHYH/kVE0L5sA3UoAJkZDX7RwgfmqiWpJD0sY2h+lt3asOGx5O/QOyL3VqSDxIQDkQvB5yoyF4V9Lt1Ul4YJw+zET35xp5RQK+PofRKsvLPUpzGxyj+F5ozcguKLCp+qHN1djd5Co0drD97fzArDuTXqwsaqUmc33hIJg7wgExq67khoIutB0k6yg7o5hIwm8ugDKi07DlaeIXrjBRwTmoNcRW3an4pdxaQzfLA/pw3Acw+kvmVh9AMd9E7aBRip1dSyf3t1UBs9+M7voTWC2Lm49UFoagIekLmfMx1a9qbH+gXuoBmq+LINcKeGq13rjR8F5HG8Ll+HUd14DM4canu8DVU+KcKy0k6Y4yLXO5MqLigc/wddaMeJiW/ic1rUu9gUsoXOdBH94pevjqu0b1UzlzM9HNfJ0rM3cPL6m4LE86Z33AdxBQrov1jY6yRiBN0jAU21vBqrna/qwTzu0Tup43i8dyUMqoqlgXNLhTcHZJyWuMVAieyOtcFZ+d8YkMGDYX17hPCMlD2y5dnXQXMCIwnT1A7AqyvgnWKDKOfHQg64cdoKnxFg9Vh570sbpdbauVjATYPIXIfS0WXAc1vng1M0pVG/At7MLEf2K4DrnLxI01ZbVFvUX+vGA194ikffttt38sVpBb6YCsL3RgYM6DKJi/mfNr0JZ1SoItG7+Nvhtnpizs9LkvxkwWLnvpVFSp6C7xO80HM6K3zPnegk5W1ERXmg+jPSavJeRquQ3cdyKdSw3Rort0ErI+6o60Lsu9dAGHUQgfQP6v8axFXy65QL5QwFcfKSuBZKOfcJYyzajAWyXW8Uq3N3oZyKpF3Cl4HwNGYJW9X1kdOlTV0jsp6rpOFA3DTe5VuXiEwPlT0eBRfU1FeC9V3oRj+8RwBn44TwldRFjWJQp4hnAjEofrmMzf6zEqhb5MAEDeDo6xcl7PMhb1E+yoeznNcMdJqBR/gSvoAQXKNdEhnIgBF9fpWpxtIUGmv0hXIugEW51lpGLzJRdsWTp8g0W6RTAWRcB1dzVGQWByi7YbBMNBzyrVjPuj3eVtE4ax6Bmr0vZmbDlSkgG8XbksQgoWtJbDYGhYTHLOtdb44X2J72VEVMKSRi+2M57SNanM0gWN2SN0dLfJ57PoZiLb6zzFUInZsAchApqtk1Dm0sHEUbuscm3Ay7mEpQpNhvLgzGbRDWIrh/g7nDRHrUpWaKhc1XhHcTtOOFqG14yrsFF4iVDSOt2n+SkCo+QT2ViNo4Y+wzSl3ssBsA+2j7IhKOTR4LEAm1qArHnXoDHEGW+RNRFMAYNVg4y2MYxMtiGBd0bjMokKIQtu0gLHErEL2ySm8IHeGmSJrvmsznngKXABkUYM+gqp3OLWPh8Z/HOCqNzdeLzoDZPkQA5bbJz7Dt3qijmakv9U4cPgDRRe+KZMHiJuwJQWX3jcvss8TrasOt6T6bA1S6ptgJQq9NpdVQLmk9KPulHFy+20NvvL1fSORPlJBr/tKI5geKushVnGxZnqYEcWZZjdmyItn4/NkA4WrXmeAI5b8lDw+EVQppej3Eb+ErAXN2viAjXYYtzUDtkYL617Nf40vg6RpFLHiHw72zv7HISTfyXeGJTnJ+5tAehnL1jEnNLcUo2yL1P7W81IqlR82o9c9NuDNW86FiJghZqJHIfDqih6V76/pNfgajmF8tsrWwOEG2tfJwXKtr83VTZGvW/eu/MwGeETrXAibRSSIzUuNDBEgClzSmTslCMRckNi7Qo3p7yBKPnfwL/fqISAf+U7rpfCod8BBGxhIi3SJR753hpMPfQL9XZCc3uAqQGvt0TJrFmxYqBLRo3qIzgJe2RHEOBMvYKHy+4FN1kpBTSWEBqk/Py4UXpkIMch5mJQhQcwhJtkrEzHuDoEDwlx7uiPkv/wFfE8CtPu6tuHOZ5tFIG4w0gsKIBKfhOxfzLd5bjD3x1P6mEaj5ve+Uft3RYGkb9CB4QXSUBvli8jBIrN+WarerU0Kr7Z1eb1yswLIyDJrmVJVMTbPaJ8+/J8EXcb4DwBHobgKQy8z+ArIzSL7GpagknzB6hdL+0Tz8VLoxkw+czDTTZy0RBZls3ZuicHX5mxpSjs6sSyLdiYt1KKdifO3qK7kpVN0m3uJF6VxfkWrvPiLHpY8J4zu1DNLzB793ZLU8zmXFD69C4s0bbo0juDVLN/wtb1xmZtT2lZcvJacOKRnblEVtZv1uKshUiwX/6CuQrMX06aJ23xSNqd8zdu2RrUFideczknC5rSVlbM9Bjavy7cLdgjEKiA2aXEsxFVh9jvJvOd99cQz6fnXCPOsC1vruNaJPxsEi9sH0ItOMgXvpM1E7eDiHq7oDJu1LqpIp9P2mmIqMae0Q00Z1U2atnPq93xDMnpIIsai/JI67nZ/pvYdxm7s3+8drFEXbmmpsf8E0aYdElcwQNwarUAXLNhk1EBO0pWfuWoExbUNNLClStDZiRwV45CebHjU8AUvE0UhR6nlBHsUmWD0QHOQQyBatg6fjIhsAROUTtT9aLrY5W/BxYXP9vA2fgGHnXoXK6bb18TWrdwN+yDp17WgtWIQso6oLEMdyqHmb/p9Wb7yz9SOTWMykZxfkaTv14X7+eAsiTNfb0KI9e4Hwevgi+mxz4mamxsq+8kSlO39a2ogVXmeBlZAk5FAaUERHPCvHPDm0PEfifYD+znGFpkbytZ+7t9mJ/AcUtg35+iqT5jLBpbYAJur88CFGaKVWGiA4as+7161ZG18dTFgC/zuCux3SJV8bBfPjVptO8B+kXle7jgbVo8tS2njSfpaV7DqYCc5vAwYSJT0hroLDRqJ9wSagvfGNqBRZnLtyOE6JXqQ+129WuwOCqEKiCuJfWiFeN1BgFLBZVd4BXHreSc8+VwazaV0H/XFOqzeIzdpYC1/pL71QcC4a2NaY4qC0ik4m5dmVjfGUfRNNYPavC+XTDJxrLQ5PmNsE5uTfLIFrwnXPRAIIIKQG+RYGE0Xog+tFoR95Ix0vptSAbG7KECieh47kM9he8QdNB5BCY17mKOC3K/1RzGcF5JopS6Bif25BcL3Yykx0OFD1PhwvfPNABuvrorSMbo4NaRt+qqKm744F7PX4z4HKJvjNNoYZxCR9jlppVMzFFXDU3t1nFITpAWWQloith6bj4UWmPrhulfZZKj3BB7ZkR2p6rOebtJAwiximrcqH7ouwC+7UBi4AjDlVseFL2NHnqkpGuan1IC0hNeYipcAy9il1v183BXs3DD4AcX0r2JcX38yBzYNZb7VzrmFg0fawMOwPSiwBpGPFT3VOuA/B/iR0HljMXeqOZJZ9CqfZA3OG36ZtuAyhc0Fvl1G+8vAtv0Rlaho6o4YncG4uJTD6lzs72c3hfUyJbxM2bsOs0RnOaPcVBs7sy6FeqUZQBWvsb1ht/gdIjkAB647uyakoV0dqd2nGedQ6HgiJ5EE1V6XR/165PPaX0hJl6R7fiSpRzH0lFPNVZPhvmGSh2D6gDS/UC7UdwT3Xo82Qdc3na0TbBUfwT+8NGJlJR6giCeJISgfmda+Z/4xTtESeL7cpy5mTbU2WzVbop3+IHzNLp+TyXWYYCUQIUJS77SMpQwgLi145LpHdH5GqoDrsVW3kvo9m0Ur2IobNS2Y+KvOgR2fZ32Bh2FFZc5OBmEFoSqYzdwVFuiO2Y4v6JxdBm0Gez2eBfVYrjRNrK9szto4xcabff5Ek+dqHWTqG3G42Bx3JIzgzFKvGqfTN5Z3rqaRQTarlyu4/02lDYFPXL8pFG0pj9ZV5MQLGQLsr7oxVALgGi4ihMg9Oa+FQQ7EgLUIF3oPV2pBFzsIVW7efF9ntngJBp1AJpflfNbnHls9iQ91SFbeGlHKErIQI3i1O0LOYQPJKm75YA0oLPOX/1DIk8Wjj+AQXBEky2+AMZkbymYr6o1bg8R7DJ9h2Fu84fzU3Kg07kDMQs41X4URlxx9LZuOxNzigXzvIHAcWimeSKjKfVEc1hpGJ2tYH29FVwuhoIbDOch05mHmz54n5yZe+aRuFL/D+7olLSRJGcQHIltoJDpo17Kl0JAwo0aXZduacWbkXbgzPR/Kajdh2QiPJHyFx4Ge36GgoyAAPU1L8HMHmlYGZpoiCZpvsoMRKUmRape81sn+j/IdTp7i9tiQ+qLpcYItLKSG7KsQb/BmCexn6OVirIBlTvHW/hO0TP05d8YKZ5ipfYfCwVOqkUxR9Z9aW+jvn75q1nQuVKgy5Cw2v0uUl8fR3J99xo0BOn8xDB4xe2YmMGV4TGkInlmDOhV9HE0z/DMmXFsuxHm85/69oohhbGaAwiKFzuPeWBvE1E6DiorgE5dsa3+KGNBdgyUsg5Sa4ZJCiZMidQ/ept1lQ00RZsW1WniJRYhDwy/yS6yQN+KC8vpuIzzhyru04KmEyFIqA6A7AnDYgFuEmeuNLCBlRvBYhGU6NfhIiHjcQA9AxAgI3FPA2VAxABeiqoRiKzhFWDi9g6+xhOz3RzNno3mRpwFqR1sgq/ZoJvNjlUNKORwaPjmKMEa0N1O4j5uVW7/Q6wliSieQt8A3fofe0OWykocWl1sk4fcfZzFc39cYdWd9YAkm5SQBJJUIxzGw4+XNXbxLLxdqeBobObRyPklP9RETYyI6JMr3lDVAZZGN7PX4d9rudCZCxXrnQsNiOXyi05yNnqScOsYLITbPdqpCK8uS7zg+fEya5sbHPLx0e+0poa+4a9Z+K+5idYqzFWL/lR5u8jz15HT7oVZmuO2Ci0crQKPESBqBBnX8QFXyCjUOkZkUrBJHKxS36KPpESyABg5Rg4ccA6imp7jGp24ih00NpmCgJ2/wy0lw+wL9N5223rYgk9i5bEz7Ye8MbrpjMmcfONCQK3HTbwU0BKa3iAkJT5esWJQWibyxFKpay6XO7VxR0BuuWTXrQix6xp17Pgx7gavz/CQKFMoGmAHSNn15/Ur4eHg8UXymxACP0KB/dAAG9wvoGOPB66Hp9b0H8UvqnQ81GuZRs9g4NSar0Hp4uudM7x/9pDp8BjKHxDr50AmhYlyqRciEZdGV8OSCX5lPXsKsGAUVlXg3fQuo6ih61AMK9cgi58CusI+khxN5IwC8qtjQQyssuTudN1Llhw0HRAnwhQHIITkbUo/gIopEIXSMM3xkOfEgWWdCQDAzUGK/BvXmqT51cmATnJMEmdUsx94aBnUgJgFntAd++St5MdCpSZkGEtifRwFn1DBKuKEW1h3lmRi8jDJ14Y4orAUMt73O/z0EYCfM4HMWyh99w9taGPvzO9LFN7SF2j+XKC6tNlDp2zrTHxDyqbA6Q7ERMzWxP2i2HcU4e5YWOFbXp4EbSZoMPr9kXe6etDw6xwySniAB0y35C/cA2IwwxSRpuZGe0+HPUtqDChSj1VI+bMdzeTA6eFkcI5aAf3/nSlIyHTGw+SqINS3teR0K8t3p+ZHi+cek4PNEaOYTVfOiucU/m0Oczee28lxit5CxqhqIn7orgm3hy5xS3CWq+e4tIguSKhkYFHzYnb5G3buPUvfAmtAJzwUS3PaRJUrc0P2jZgSs4liWtZCKE5L8ial0stcEVvm4UQ2F6iJBUwkKJ7jctLkQ4yFil3DhZPCIEeSEhzH3sCmRR+cepD5Scu5iC05SAKH6n8luJDmuP+It0I45Eo1v/Js93QAnPkdjY/a8Vh/8UrfOkfyIdom2pMXhYNZ9Iv5zCLEgNPh81bDw7EjMkuJeeiJDT9pXu2pWgTyr2p4KLMA43p7Bq76hVc4YYRaflGXJd/9RB9hJT7pkzLLy7ynWoGqTYNtVb7ScZjSRcBuRAX4KYccKgE5EUWumg8/LxRErFYIrzrFFxS7OMyD4GV1Tlk96t9pesToZqsbsns8h9FKiDO+G5fse12nGyLqqBMcDZf7ThSe7Tk9zGlCUQO6VbkCCdBR3+Fvtj3MVDrR/PZ/7xO6b3scZ5LF2j4YK8AvnHyJ0adSQIwC6f0Pg+EVwQhegHwbmH9vdlQ2CBAJVhEsZuCeRM3soCuBS4GLGEdF0I0qf+AAEBP3O7xXH0uaLyPCy4y3j3QeuYrLxYSBZLoI7brDIi8IA3vWHV/fWtS8/ryxq+5Mo/nXEYaQARhkCyAIsAIABUT1fgh589PqHMuGIX49j1zy24MYEccqcPZLpehyJj5lqPvaF9x7NUrSRxmNo/4nn/RsDR0l2P3qMZ5vMWBAXHxqM8LqEK2oJYYtg/OVU1jeIGJVzjUpUIYsPeV1SyoCENcxGDa8tR+Dlq9SGDQw/GkK2D42kVx6SbB79jMkfpNW1SuS5v5QH+fofC8atOTfsoq28X/iPdslR/0+fQViLGGqArZT+W7b8Efxr7RNBmT3tHshcwuHKBRIYnBMnDIG4ozFkfly4DkP8ws53F9wXmhJCu9kouO6svqe0w4PTRu58lQ87KRTc4JrwnlUSEEnK7ONWRc7lv/QMvORqgWfK/Zx1OWWaAQ0QpB6rIOmFhRf/PkEjrdrjBlyWYK7IX2cvXmFkzImo1WRv5ZUAAkh0j9Khv92Vm/Q8QdDIVgPS5LcUbTJ2l6Nh0QZxfWbN16WctRc1soxYSnmoKnmfUEH4EaeG8/cafTJ1I4Ct0JZgn113KgJomkrN8t+ugzhhl9K/3HCpPK2zinW8XE2TCPe5vTOGXo6amGb6bYsMrJNLM+fyIdtTX1HR4716E+OC31D1Vz2Yz+3kEGmOMRV64OpSCuiBnDqGQ8rNIcx+pDvIgpm3eabOYZgMI581fQAzDppv5GHMiJc61MOXcsxJaE8P9PYoI7eUtl4HIE3qZGyZ8S/TiEm6hxzJivU5gHHyosEDgQv3p2gN3IaEmoGty80kBziX5619mkqh1PrR6sA4/4Tz1mVApIknkxTjOoKAIiugAZ1GPSCx0mD8DXUPBp2khjBBv22QPF7A3J+2DqRod2DVPvT+AAOkJX6+wQldfRVqkRgji9B/LH66VsvTuzqyD4YBRbeGwKHzQGw/+iTOMG2yopqMqLA4uAa723hn9/5JbV5hKHmtco/b8QJXUQImudu9GiN/6LOYo5CBEcmUhc63hn8+sOgWcsA7FXmTFSj6Q3X4mLjRtlGclTYduj4XBv2T3rFyr6W0mlZBxaTXDQQEohaUkUYcUKk0M4saD8Fko9WBXA0fG6mMjt223CWKeagJjiEFSf6Kx+bPdbX3o7uK2jTIrsPsY8ZpjVjIoOX6ngosRb2oPeCAiD7+KpvWVjWhmrrrXCOKb2y0l4V2hpdvq5dv7/ACVd9BgsvHfNowkq6LvyEZ2Sa2Z8n9+Sw8ajAZzaNvZeyf62TaAqiwJ+pMSvjAbggTYjg+PexKY4eoySweZx9jc53bKlL8nTKj0Y4I3W+7Hnw1WgwnO+cJLRp0AQVf6RouXgxWCUHWkKZ1RjKuqBeRd/tusGEzepQmcIn6Ca05dqXzowN9FTd8S2sgf2rDm/nG1OrZsqLSNepdubsp/+NkQTLewXnKxz4IdOTAoIFDazI3OYwQjWzUMGa4Vy9y4uFCC34WMxRQfGNCinFjF3aH6lLabedml0BZAodhMRMsMyrLOpYtIMYxeS41LR5gRqAWRL19Dcv8g5OTyfgQVa6hkinyAb3dhbM0bJpEx0KRssFmS7qEaaSZS0YKuia3MW7R+eKDRkLPLM0BuKPswJQgTe6CZu/bVv2QSx1d/f4VB6tCy5RPW3NZfv6vdbhVv9iPqB9BWmefVq0zJtNgzrNjXYBOhCj5AnvuVi0OvWMKzLIt8E0GMZH1Lhf5IIQBNFdlyBsiTANBWYGrBsGm4F4l5UyRnPlk9E3F1AlWdwuyzF3C1jDGLIMuL9FwPb8WntoR4mzqyCO4ihAlum8qhWS/87LEYaLRYkhgHwbSjjfqZRUCWqUdjBxYXeHXRLqjbE/3G34qFW89gD6XLeeCFilfEGHzWejZXOtT2EgAhxx0Kw4F+xni7iXiUdzDVTaYxqtR2Q/5A7QWgkqp7DE8AlB6xsR8kAgSOVURL5dHSwNBc6g5VLBp/+5iPDvclzmsxIDZU8efSv2pe/QMZYTROES7lDOdjjIPz66TW2dvOVfxE5WE3lWsS3U6UypHrdpX89liJb+v41AI3fLt+ys4aP7dfcQvXtHTfZ/XCTVvB1arZdAdO3zV6+vvqnx/8230VFj5b4gQ/+dZUHD0/SehYeB1/doqdZ0sPCKhEvifVYX8VLVxOz5HAH6CAGhBtcqJhkeiFb0fSp2LgY46l0zDAD88EUihgGSiC84Yc8tDBADusLoFk7g0dpSxcFHAXl0pSMPn8afxD0TOdBo/JqbeD8Ne6fM44YbF2PS0wy1wOcSUXlC8Seqx1C1ykVhQEw0+FajP9nrxMXFhJwXz2IZG2XLGkTmf+Ll2WIO8hiY7pXJDlVji8bVINrsaQoqLgkv4RFmR3Dpn8seDmWzMeGonHfa1ocMm5GDfhROsxhK9CuqCU34UD6Fu5RKdj4wqLtUT+xEYj0mVw8vQGVChpTYHd13NCxoHFf6WaweIYTpNAgabIOL/lsYelUDC+yDbaty+3I58YYeGTj08yGx/sJ395mM5CQZ5IJNzZCvklYu6Uc4dwYrhbYjry1+4lhFRFCMAPQXIpymtx3DH6wtj5pebZ/Jt+5yMi9WWa/IrHbFVwMs/pLCPHrNn8g9cZo+OqHXF4n16D8OzhlAuBAUR00Gtgw7cznKQ7+qWu/R+7IUuCJ3ZdWQqIiIMb2u+Zd9nB/SDTW1Y4KyiPiFqqje/2JwoMD5ymnP8frnCf9UN71ZSdY63/s5C/4iohhSUsZ2Q78zdYlBtnS/rQ67ROeqVIOi8UgrCzb3eEMazMagDp2aEmfob45XtPny/UE0Zz8PrAuuZwE3tYqaiV2U7pCQ1wHc4pXjswhrH4ZZqQ5smVcdOtmk64IBsfblwGF2eapLkfGEL6qjkXxWMKP3I8AFO3T9Mf5hpHqyOvd/yrMv0gFOF1Zi7qoIVuwKg11JTPOiHZSsMCZ2rbV+x9lfDFrmm+GyauEM8DFIpDR3FYmeIxtxvLy+J3xaQ2LV4iO3RMv76bWRGEYJetQ+eAI8CacPz0BbOUaohqvJxsTUNKQvmfGJvGbffg8XyvEFuUPRJ+L1l16Y9F9XCtYCKpv2Jw7FbRNXXgMjRba9I1CqZxKupJ+x5UH4oD5qduewd1fQ6Urz7UtYryK+IvszAo5I59kQualULXKq3mp8VS+Ecj+nvRBsiU8EXrg34lAZEwwgXh7/V5xb18Z+JcTCbzzrbhADhxzuT3wklVvlLta4T/eCejyxWvrGydgdjArNGWAf3jDL1SawYieMqP5EJ/gJ+P26geYB+12PV+jdVYiP381BCO/ffbXLRiCJT+448PHSXfXiOKLtyvVbcr8IU7p1lzvXM2P0D87mtZ/olU8QzZU0deo6ZF086CeUSNFKYzpdXDGcxz2DXrZSTf1JBQjDHUddu3WW2AUVGvc/ROsYZzej14e1Z7zEftk7hL7XlgNNqNttTMLJbllA04coA+6izvfGf3TRPUWvTvmIE99gh1Icos4T7f5x2tZUxWeDb3EJ29DwXDChPJ4Zh+DuyBZdNq4T58wkVGp9hAbniA2NnZ+P6wck5ZRlu9SQQZQVb1mEeR6zY8hy3T0JOZXZ9ROj9szrCrW1UCjvbqBJFVjF/IEUkzsnuKJBKUPp9q6+z1Ch/rfcOgJGs/SU6FRvfa6H7heUn7GlUIRHRYu38luMVPXDt0LJsqqDbd418Di3Yun1Sbw/dv8LYkxfz4/Vo3ddb74bPddQGi29NtybRsl2AKpPFBz1C32cRI66U99+w+kJC0gANCe4AC3k5dmX4dtmotzTK/VzG5Bq42VE49kTqN22hpmXJsbtXw0bGdgdblMVZfkvYH20s99Q91PwBPuk6DSx3JNzjDjgpYuKYoxNz79bk7HdW+IMrrbRzEtMzVBg4CxCJVVUz2TqCwL3JzBWYDOs50seRCq2YXD5Q/1bvSb/F/tF0JSezmOM2czri1osaoD35fUQi3UtZfn49rmE/e7l57RsP2+PzBEnAoC81wToWBeZLjYajJl/P+pFmtbb3n53dIBMVPOteyXlXbmIaW+K2hkU8eE2duUiGoWldlO+VxbHSCkO02VNeknXSQZi5vGOoItmnZzhm6Lv6OCflAsyEJ1kLQmBGchg2WY7EKDkTDgGqLjRFZAqHs1ZzJsZBTIwEUJymGnHuPGJ1QqJg3aOhP0qRCEJcu+/W4/vrHz/kx6vAugF7ZsI6lK2gVDxk8tjqUVS4ZEjdpgDBnVPb0tbDdBWK2k/3fukhQAsW1mVuxNyF3XxoKtu+PmXBbesQidi0GE7Ajwy0w3902f1vsaOP2qtXjw29PD+M/sxQC+AZPVRuGaCRGA29qN7T75qA2VYjGNl54iEw6lKN5RrZdKEAcgpg9vasZaaO2xCJUwkF21wDz/QDdZgLeqeZoUDj2bF3I+mvE6eXF6IkmmcqQEl3SPsYsBUdbfsY4WLK9Y8J3XM5kmJ75tDZiodTj5/MwC/JcROn4Zd9UI25G2F9U3dOe7gULWNRT+cd5U1/JQPK9FUs8l4FZBlcZBu7cMwpsLtSPF7TtepEMNnRtCAmQKurOaIwOC3xIWXsi2BE7wndGL9ZCgPsLAcp//w4aM0kBHLf3uIOPEP3eFuxii4Ao8EKSOlzbY+WQpfeVRTOnVsRw8bgW4BXg1jsaP2WmFObwqxCgovePjQ4XF2IZGHA7g9CqkJouGSsARuSZuhNNAwV9eqqvWETQkaN3LS2Alwe72ZyU4XNIncx0lRHU+1OKOpNEBRhSX3eoZQCncSAikGx85co70QpskU6xPXu0/haX1nCqnDTqwQVAv4yiz4wYhaO1jDl490M0/beILUjN/pMIpHymqfsOQqI4Ujdu4wKPE1Ro6AHbech5PO5pyhxBTurIJajQdBFC1/h6pk2dG/H2H2EXkPMBKAAJAZUOMaB4NX42wQ1WJwlPgLojAtaVPSIFmNi3ny2sqcGsEEfS7SFhJ1EVP89YW1UbDm+S8wBaFbrJCqo9AVPfE1YJY93TkgYotJ3Cc6HScowibq+lLL8vh89LUIHqiV7U6oRgZNrJvliAITVEI4iMUj3IdRRjorsgmwUKlrcnqP8XUq/XDETUR8DtotmGY4VZhtxLhHnCcYDm2LNhgBZh0lhxz0cKbPR1iug4g10jme95j7JNhxf6jrUAmK15XuHOlsgGdsE/rHySriDpwPL5yLdF3zV/RVYVxmwI91VtBKAdUYLAFa7QAi9tggnhKYgGBoCNtt5kkLNNLnGmQ2d4O71e382OZSzOAMPPK9B2KHujr/Gj6TqaPExTi25XdTLuehRYEIPcCnP6JfTw+kWuojjCqbyW6Dsv/+UTt8Q/nrPbCql789dH3DP+yuPFc6wlTN7RyC7Oy9v6Eth6TBEOfVEPys2zL26hfJkCEzxrWEXbF1N1CiVtt9vXakggtXRjoCW9w45g8OI7tU6KTQzK/MrXOV4dYMqs96lixXrLG4as9hcpiE0/S/3OIQ8t8EUxE4whT2uMsUgFUN0OZW+LPED3rt6/wUt6i6s7dRjqpV184DhwZfiqSqYTWya0Hwoq7g8mHTdiIV3utlAd925FMWWvKC9It+JmK/e+Do5SepknyQP8DSgu1HHhnXOLb81zXL9wjvqpDHerlM/HITMJl5UXxbAGWxkxSY8Y+ttLM9UpVtiV4ec4fsGnsn1vuLHxqk+Ek1o97clkqHpyH6CtrV+iW0esqZqrQDNuPdPTbJ6Q+BDI6ddMp9pKlfwbp2/zkunZLnwnOS54x4VVc1PmjZw32jJZc294N3vzEczEk0ea+ktRCO5cOeqoHSg+cTp27kb8t2a6Jl4SgakcfWJMuLeO0hlRuodJcfDnWM723J+D7lkSx0IhuD24Cn8tyt40iSF/DT03F3yCQkXHHcOQBJAfDniRA2kuQhNNkwFjk7z8FcTCtk2XQXTpXokWp+k0OurHidStDO+JrFVyzcKVukrG2fWcs3uKTbVcJJBj3xvKBIL3aDvdnMixNDN2IAHpcD9+mUmmNXhTWYe5oAx6TOfmm2XAdMV3P/nqzz47Lp3an4uXPYd9J16C9i/Pv89BlT/IHEc/XcO6mED2rN9sVr25Z7X+ZIyvlXzszDjv0IJQgzTX2NVOxrdqHlEiqeTsagRoJCXrt8b0JyEadRNCN9OqHgZAuSAgIuDpgmkkwcSkN20Kw8WhhSG2oxqJtMoTXemo3l+8w3rNbM7MW1iXUNYv66LN9/akEAlAfRdyfSg/gQpg1pPqh+JhDWlJopFzyWc6H6UmFIrGlxcYGZMgGRXJuhmia3JMuH3xrK0Oj4hwaI3TyIyQ2V45ydqI+M6LQJG+zgaZMj145Y+idKoX8n33WE6bqFgqCx0YPRbmrzdmS6UTKt7/aWJUn+anO5wq7CzVdKEb4jxSUnFXL8i68GVWQs7uYSH3twUp4go3V8lXfcW3lOnVoKo1uCUQno1tV7jnsZFJllpauvUmkzKKiu1VhcalOe62ybZVVl1UaF0QTiJ2XVyk0B8K5OhUoSB9kvFmV1aNbsjzgjAC0LcCZ62c7favizvvZLop/ILhWeLM9Njs0wYHsnvUz4dTYdyKSR+lcle6SCumkp1fAlLQfR0DPZTnAVuUiwvlGAtF+82YklI0Y6c46Qs32IqCOyCG4yjaDD0ajI4HUhpf+RWDa9HPlFjczDDuROVaywiSt9uRHIYXkphybr89dt2vTaXVKQPoVrFTWeWdjyca7Wi/jE5BQuxSDP2iIZ1zufqMnk5r9WlfelxUWmYF6bllvaqPkiYXc1NAbO22Iaej6mrE1L6PMmppFJC+4umxqlhXWohUzYWRl2h6KP8ChxA9hifPvQpX1pqIar57qAiaVuop6zkNnWI8ScW0eRMW6mEKS1qzpwGb7dp4+GAkCStjMW14rE28na3uTKI65SEqcrjjfqSRNIicmWORapTMW8h2zXDl32hOMlt3OHiWneDj5NsfGo5Clv3Wb9U9qhPkH+O3A4aTjKhp9Q6ehZivOUTQOFQ0WundUlwWNsWlFsckmdXWMm1/V66mR5DqcWt0jU92ScCMSPsnW62X1n+gxvbli0wx2gVk94UnxLO6cw7pBYqaUWTsc36aczZB6KaFyZ1Rk3u/CzaC9EMc55iI2Rp5KiinLtcPLBKnftM9Nm5Nl589UtnFXdvxwtk/stO8HCtXt247hU2ergVW6twjGUEms+4/7J7ZCOkJuFsyVod3assY4lxjN6OZj3EPZTpxdlIwdPgx1lhOma6qVhlGvh19x4v9eqbJZLVJMx09aMAaAesnouGnCU/dqUKkuh1lDPNBfItH1X2W3l9IVqd2pUcBap4vc64zn/RiVXQryMhN/F1IEboDJstO+5QmKYv+wkNQCPP0dm+4tA4Y4TZH72uzIztzaguvNhFcItDSYF7Dj9bKO72arvaE9a5ylaNUw31AzFS7TxSn0KstnjI97jHSrwhzxWDWe4q8x1eHbv79teDVbZJg7JNqCjZTWKLbO7Sc9lJRTkwOSKgvHcDep2Psn1jYL/vyWlvm3iX+bJ3ZDONHBU9FJvdhlZxe5Wu3AE9DNanFArMMbrHSq4NTZ/Og1xI+jNaypqmc+w+dCZ1XoXDNrHlJIx0yRwEjHqd3GuNyjO6/rUlPOYTWqSovY9nYWEJatq3djs5ccXEElUyTb+7MSDntCDfWzXn3xNcnzPMTRUSw8ttYz9Wfos6nx/+5cK8ErZ5/KamXfzBWT8lwv7pyZBJmb/9j6KMm2Mre81Cmr9Dul3I38WULtxMU62MDGDVwoTFvs9WotQqzOOiRspnd7fM7m6r724qlG2HXwdg7dYF3IE9/9aiWltByKi483o8+jt+G1BeRHejnLxa7IzdQ542oyeSazI6vJDDG/YQhHPckXOwVHjbYU29C0BnUga6YF8GnD9OMtQ8/0E3J7HKch66NjVgcM+ufkSlcEMXIguITOkDZ8uUAfH1zarU5+MONa+RzUPNYgn4zF08ksWEVI85lMyaEVidg7QHkPeAdXVTMAVPTmUL+4LArutl8Rei2PoBlyJoLBgCxXirXmDso0RHg1c404Ot7BZcxcxBZf0eO1E4cJzwBS5ECAoyA+BcbfgF7jZ9rcAAfsQWZUZYIM/C4df7aflRlOzv8t6E9rrropsowfNPQcH8Ofz4sPGT8SL5Qh2YNHcPNcj60DMaZpeVoOh9ymAGTqXqdtGUKLIg9NlOxRqNO74n1kfhbfSfIKfDJ4OrVOZmP/kExX2VhjzFECGx7FUaqOQuu0abqMO5kntiO1tn8RaUdTMaaVoBEfNJPlW+6VcW2vOY8GfdsfXg1FJFa0H7oQsj9RYf6RjMtuUTV2G+yblcaatHeR7q0bPKVoeCB+F4MWVBQHfSN2MIn7thmbSOYqq1TxZyXlawNeUq+FPeShGXaq/e4GavG+cEf+JInzZC34h1zta1al7Qh0DucBlZVATZUwQyiwEMmmlAUwgQbwCsFGyaNXDNVtY72ZS049ualMOhMCq6+hxwLVsjotCCUQjzgdfgUItNUoJJUtyEp3MoyRRGGNLZxFzX3V3zd8we1uy+4hZ4m0PMeeSdy993YNwVCi3nl+2rudFFuZp+ogrlCT6jnrHcfDNhnlc5f81xnp1BCDa5NrvlzOigrSNUnia6opwpLYKQY686xiidTAyxSl8SeoEJFUQFMA21l4C0nu/8KgZ58urD2npcPhp8F238DtsdtrxtLfENt0JTbheifcFg/BUg2y9Te5o+B4qcitSHF9k0u3zSBvOm9lhmSWHPgJwlk2WX+to7WArs2S37ow1qnBTM4RGO1KDP9YUfmPTysT51aantlzxJhbJpiYv0TB8PK+M1S5EFocpO1a2L+Ox/k6HudjfvRu1JACB+8bhXYVyBmyTPzULu1PFAsoJPjxkFm4Qp38dsKjS3BFF8MPoCONt3dwVJWT6Lpaavlwfl0VN5KSNjpFmEdYLpko534TsNqO6/DLBt9PtVMhat2Fwiq9Q0hs/BqLDCXuoA8ENHzJsf6+NiGzZ0t+E+q00oZR4YLyKkTurGMpTS70VmU/+HQ1leUX7XD67xn8W1ZgwJVprRGsP74ScSRa1Rtg+J7/pH0GP+yMOCu+IRO+VTBOnEjauu/MzkeJCo+ZQE4gW5S3lHcJcwzVrc1C0k0DqNOJUm+RBUP6+CHROhtYxwlCIhjEwIeOYi4trOKRsXiuKCIkeZwpr0r+GKlm5tXJFfxUlJPTQppKzH/aR/OHLluoLfGKeuhzLhwk5HdtbczFoh51OpuWNpbJd3TEeUwBbFMtgm7F/ndMvH1f9+gQMk5DD0gmFSt920ZDehEw5VRAswvMgnL7ka+irncnFgDeBzOqQ2DFsKEnYndVlao48bEyKj9BGMkGLA57NZGtdYrLCc8LPuLTwH5wyT8ykgg98Yk3ttBtqTy8HurppNiMWTFOKYrAhOAEUlOTI9QTZA4rtymyFmiPWcLand9bYCOfB/ug1SIwwQnjDgnh5lKdtjgky5RIyKo0pCAvI7XWxcNCpilAIjnTiTlJ9EVs7labivqjg+xQq2qYdkZUgVVKjq7/9ag+MmIheVL6WYGlbUV6DHpj2zfOsN/NU1qk6Jpp1xdLGM2SUcZIT29pZB5x3MbfwF/fLd18EvpFZi7kLeVocM7/1c3OXLLdwJty6o1jJA5iPTiC4feTSlSDs85V0wudwYGE7zTDWF6bwQyhS15kTBLL90gx+mSl5YfBi6M6TIDEM+kXAtGBFjVlcTsEpdATLsUXCK+7VWMN0yPEd9G73keW0sS43n6iIVkAyBPRyMEE9cErbfj+u+uLNyEKCSOkSrEgJ1v8oK+9VEkIHvUR26yqtNWhuLTdMZIVHYqV5pBpt15AD8A5VHRUvOPN29FSO+8ew4SA/DNddt8oG7XgP7WYnGYUUAVeKm2i9Q6zFH5Bpyqmdfw6sFQV2OpihI8PPxx5jqiqkN15jWKO7gg8L363Sr9jQB/nZpZdNzzQWycxOVNwbbuNgwrkk8vqMt4/g3SjcT3Z1kO1bI+MILxFrfNmHu3JjEHwUPxVKFD3+Yhwi0HB8bHMgWcTg1DAjp79UVQWEBEVtYqxqPZJhnrSfdeyyRW9FYe/Sp269H4nIJ+85225Qo14yQNJfOl3W47f8AGtry4/D3OiujuxJMUWhx9teW7v5Qgyu/e+l+LiudLN0jnKkJnAAEpovL/3piwoah5ckoBEq/15r/RhbonG/sj0aFLFp1857pQjzEYrVErvCu3XVLFDoBzmZW0q6rF8oygI7D6+z39WCUe5yMgDtE+uZa3N0nxuUZOJoOkNNHProiBAw5QZoF3oaOF+Aj70L7vn8MiZQ5eTOsIN/OxCR8eJXezKkQ56qqLkVKe3CLu+AdboSWaXp/iCWdcYP0Y462m3hbVI1BzIevHzp55ul0/q7D8fzBiwOA3EgCP534E6H1gDzLC1vZbwE0Vl5qcPMtCmQyGEU9BDmlVRtdjrU9CaXJw9RiK1WMVnSqtR8BO1CJg0OhBvttBAVeUbYnwl09NkjokELchjbZZV7atY5KGJxYUfNGS64LNsvBX0nG6UBhHB7Rj6lgc0NIovm5PJYiZHaEAzSFa8LBwoTU+PvJcDnTk1hQRd0Cp62/mwzcNG94e++Om5EJvUKNMPmPsXf/FU58fsvIlDgvnjFaRkRPMfVIdUrweWB88nQFaTe67rzJ9+EK2oSv725Gv309dDz2Pks52Mmqu214fJBrtPcmBxfTwJepCtrA8XNwwnAOub8ZjeSDV4ltSHBzxlRKUfWZbl35KYNNDbmP99onATfE9686N6zidx1sed9Gczy+Q+ZhgTcULUc6K2H3JyDuVCloPac09RPltr6JLSD22UFkR0Aj5bYX6NevIgpD5FsdbGqBooN+nlRrms580rOlFl4Teh+6IF8sQES+UYQ1EfA5tH3TO8zM7rI8lEJ0IyaM1x4BYoLWguVtv9tHTLDcNCk3fNh3eKjgkHYNOfC7PXFZw+2TEhDWGt2gM6mmDSUEraUDmiQcqm0cKikZGWx448Du3GxgokXAcrlBa5mBxIbDFikCUOPjh7n5kUwsXWzTXuKZ24SfbFCF9iTYNy2oLHfbC+h2Anqe4UkutRfWXdD9C3V3cmopBjc5UqZd/UZBbL2kk45hcE6Axw+/wneWAZ+NYobI5SLIAulEo1ICQXlrCUcnKS8iIOqyOnNrqDNjKgbg9DuVo3eC/KQlGHYzXgQSxYagtAF+/hH8BggsoEd5pWFjuABVVrgAoa1oETGHQtHaukBUh4sETwF8WcAUFBDBlwg4ECRNcqp26A4nAmPGwzbcnWknjIWbJ/os7LxbdltSEhmgC5NwAvDSwQjkCp/yF8l6mUH4TQm1LKpUWVGCgAoZMBE+58lHrih//Zv1ML8rxYO4NkE/Fu8Z/31XwU+cyDn2sZJNAp/k4W12bz3O4Nv41HnyAiyNezA76pU/JS/73eBuEPXX18LqPLp1t9weEcW4VmdNkx6b32eZXlX6YsmjT8x3A+yBUb3PpEdL8AVcB5Q77kcHip+GhH7XI7OkccRp+pmPGLEO+rClBNSOQPKAmqk3EnybUKU6B1VM1LLAiRDVdCYIuyWo/PLZObqTL99ogi6f8w/Zt+JAFgZSFW387WeqEM8p9GYlrcIyd82D0RMLeqwesdS7U98qUCoouJPlQdsbny6XsU5z7U7JayX135INNTzZCpTbjWP0QNh0G/3skJvN+cYv34bpM58zg/SZQzI5gnoxf2C4WovXcFlo4byite4FpF0/bz7zESslMfq4NsJ1gEGbwG3/8ay+/Wc4yOtz9x9xwHyQSqsGZY4GPWJ6XBfz/sNdaZR1lcxpjc3Ll2oC3/WJ+Xz6rmHxcdxZHpClKgqiWbmZEYBPnjRhytlL4kos67A6SfIUz6COPvWOS4hrSF8Wl/u19O54W+AkK56NnWmW5pmqY5TbHTgdClLDAg92AslKZcu4X3qsiluFx62lA5XZqgqDRo5YYWsqdyk9Vn0Y+5BFggcC5MZ4D5FEs0V4sEK8EA/wPcpDFlWMyvg8WKeNgWb7EbHbqR1d92dlSn0E8nRsdOo+z3J7tbSAC3f9e3SzDJB5xVXbt+Zq3ayiGJzf4KV4Mfkf","base64")).toString()),Jq)});var gs={};Vt(gs,{convertToZip:()=>MIt,convertToZipWorker:()=>Xq,extractArchiveTo:()=>KIe,getDefaultTaskPool:()=>YIe,getTaskPoolForConfiguration:()=>VIe,makeArchiveFromDirectory:()=>LIt});function NIt(t,e){switch(t){case"async":return new Kv(Xq,{poolSize:e});case"workers":return new Jv((0,Zq.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function YIe(){return typeof zq>"u"&&(zq=NIt("workers",ps.availableParallelism())),zq}function VIe(t){return typeof t>"u"?YIe():Vl(OIt,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new Kv(Xq,{poolSize:r});case"workers":return new Jv((0,Zq.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function Xq(t){let{tmpFile:e,tgz:r,compressionLevel:s,extractBufferOpts:a}=t,n=new hs(e,{create:!0,level:s,stats:el.makeDefaultStats()}),c=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await KIe(c,n,a),n.saveAndClose(),e}async function LIt(t,{baseFs:e=new Yn,prefixPath:r=vt.root,compressionLevel:s,inMemory:a=!1}={}){let n;if(a)n=new hs(null,{level:s});else{let f=await le.mktempPromise(),p=K.join(f,"archive.zip");n=new hs(p,{create:!0,level:s})}let c=K.resolve(vt.root,r);return await n.copyPromise(c,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function MIt(t,e={}){let r=await le.mktempPromise(),s=K.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??VIe(e.configuration)).run({tmpFile:s,tgz:t,compressionLevel:a,extractBufferOpts:n}),new hs(s,{level:e.compressionLevel})}async function*_It(t){let e=new WIe.default.Parse,r=new GIe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",s=>{r.write(s)}),e.on("error",s=>{r.destroy(s)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let s of r){let a=s;yield a,a.resume()}}async function KIe(t,e,{stripComponents:r=0,prefixPath:s=vt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let c=n.path.split(/\//g);return!!(c.some(f=>f==="..")||c.length<=r)}for await(let n of _It(t)){if(a(n))continue;let c=K.normalize(ue.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(c.length<=r)continue;let f=c.slice(r).join("/"),p=K.join(s,f),h=420;switch((n.type==="Directory"||(n.mode??0)&73)&&(h|=73),n.type){case"Directory":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[fi.SAFE_TIME,fi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,fi.SAFE_TIME,fi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[fi.SAFE_TIME,fi.SAFE_TIME]}),e.writeFileSync(p,await GE(n),{mode:h}),e.utimesSync(p,fi.SAFE_TIME,fi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[fi.SAFE_TIME,fi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,fi.SAFE_TIME,fi.SAFE_TIME);break}}return e}var GIe,WIe,Zq,zq,OIt,JIe=Ct(()=>{Ve();bt();rA();GIe=Ie("stream"),WIe=et(_Ie());HIe();kc();Zq=et(qIe());OIt=new WeakMap});var ZIe=L(($q,zIe)=>{(function(t,e){typeof $q=="object"?zIe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})($q,function(){function t(a,n){var c=n?"\u2514":"\u251C";return a?c+="\u2500 ":c+="\u2500\u2500\u2510",c}function e(a,n){var c=[];for(var f in a)a.hasOwnProperty(f)&&(n&&typeof a[f]=="function"||c.push(f));return c}function r(a,n,c,f,p,h,E){var C="",S=0,P,I,R=f.slice(0);if(R.push([n,c])&&f.length>0&&(f.forEach(function(U,W){W>0&&(C+=(U[1]?" ":"\u2502")+" "),!I&&U[0]===n&&(I=!0)}),C+=t(a,c)+a,p&&(typeof n!="object"||n instanceof Date)&&(C+=": "+n),I&&(C+=" (circular ref.)"),E(C)),!I&&typeof n=="object"){var N=e(n,h);N.forEach(function(U){P=++S===N.length,r(U,n[U],P,R,p,h,E)})}}var s={};return s.asLines=function(a,n,c,f){var p=typeof c!="function"?c:!1;r(".",a,!1,[],n,p,f||c)},s.asTree=function(a,n,c){var f="";return r(".",a,!1,[],n,c,function(p){f+=p+` -`}),f},s})});var Qs={};Vt(Qs,{emitList:()=>UIt,emitTree:()=>tCe,treeNodeToJson:()=>eCe,treeNodeToTreeify:()=>$Ie});function $Ie(t,{configuration:e}){let r={},s=0,a=(n,c)=>{let f=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of f){if(!h)continue;let{label:E,value:C,children:S}=h,P=[];typeof E<"u"&&P.push(Kd(e,E,2)),typeof C<"u"&&P.push(Ut(e,C[0],C[1])),P.length===0&&P.push(Kd(e,`${p}`,2));let I=P.join(": ").trim(),R=`\0${s++}\0`,N=c[`${R}${I}`]={};typeof S<"u"&&a(S,N)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function eCe(t){let e=r=>{if(typeof r.children>"u"){if(typeof r.value>"u")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return Jd(r.value[0],r.value[1])}let s=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,c]of s)c&&(a[HIt(n)]=e(c));return typeof r.value>"u"?a:{value:Jd(r.value[0],r.value[1]),children:a}};return e(t)}function UIt(t,{configuration:e,stdout:r,json:s}){let a=t.map(n=>({value:n}));tCe({children:a},{configuration:e,stdout:r,json:s})}function tCe(t,{configuration:e,stdout:r,json:s,separators:a=0}){if(s){let c=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let f of c)f&&r.write(`${JSON.stringify(eCe(f))} -`);return}let n=(0,XIe.asTree)($Ie(t,{configuration:e}),!1,!1);if(n=n.replace(/\0[0-9]+\0/g,""),a>=1&&(n=n.replace(/^([├└]─)/gm,`\u2502 -$1`).replace(/^│\n/,"")),a>=2)for(let c=0;c<2;++c)n=n.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 -$2`).replace(/^│\n/,"");if(a>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function HIt(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var XIe,rCe=Ct(()=>{XIe=et(ZIe());Qc()});var LR,nCe=Ct(()=>{LR=class{constructor(e){this.releaseFunction=e;this.map=new Map}addOrCreate(e,r){let s=this.map.get(e);if(typeof s<"u"){if(s.refCount<=0)throw new Error(`Race condition in RefCountedMap. While adding a new key the refCount is: ${s.refCount} for ${JSON.stringify(e)}`);return s.refCount++,{value:s.value,release:()=>this.release(e)}}else{let a=r();return this.map.set(e,{refCount:1,value:a}),{value:a,release:()=>this.release(e)}}}release(e){let r=this.map.get(e);if(!r)throw new Error(`Unbalanced calls to release. No known instances of: ${JSON.stringify(e)}`);let s=r.refCount;if(s<=0)throw new Error(`Unbalanced calls to release. Too many release vs alloc refcount would become: ${s-1} of ${JSON.stringify(e)}`);s==1?(this.map.delete(e),this.releaseFunction(r.value)):r.refCount--}}});function zv(t){let e=t.match(jIt);if(!e?.groups)throw new Error("Assertion failed: Expected the checksum to match the requested pattern");let r=e.groups.cacheVersion?parseInt(e.groups.cacheVersion):null;return{cacheKey:e.groups.cacheKey??null,cacheVersion:r,cacheSpec:e.groups.cacheSpec??null,hash:e.groups.hash}}var iCe,eG,tG,MR,Jr,jIt,rG=Ct(()=>{Ve();bt();bt();rA();iCe=Ie("crypto"),eG=et(Ie("fs"));nCe();Fc();E0();kc();Yo();tG=WE(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),MR=WE(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Jr=class t{constructor(e,{configuration:r,immutable:s=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.refCountedZipFsCache=new LR(e=>{e.discardAndClose()});this.cacheId=`-${(0,iCe.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=s,this.check=a;let{cacheSpec:n,cacheKey:c}=t.getCacheKey(r);this.cacheSpec=n,this.cacheKey=c}static async find(e,{immutable:r,check:s}={}){let a=new t(e.get("cacheFolder"),{configuration:e,immutable:r,check:s});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),s=r!=="mixed"?`c${r}`:"";return{cacheKey:[MR,s].join(""),cacheSpec:s}}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${rI(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=zv(r).hash.slice(0,10);return`${rI(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:s}=zv(e);if(r===null||r{let pe=new hs,Be=K.join(vt.root,j8(e));return pe.mkdirSync(Be,{recursive:!0}),pe.writeJsonSync(K.join(Be,Er.manifest),{name:cn(e),mocked:!0}),pe},E=async(pe,{isColdHit:Be,controlPath:Ce=null})=>{if(Ce===null&&c.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!Be?zv(r).cacheKey:this.cacheKey,we=!c.skipIntegrityCheck||!r?`${g}/${await BQ(pe)}`:r;if(Ce!==null){let fe=!c.skipIntegrityCheck||!r?`${this.cacheKey}/${await BQ(Ce)}`:r;if(we!==fe)throw new Yt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let ye=null;switch(r!==null&&we!==r&&(this.check?ye="throw":zv(r).cacheKey!==zv(we).cacheKey?ye="update":ye=this.configuration.get("checksumBehavior")),ye){case null:case"update":return{isValid:!0,hash:we};case"ignore":return{isValid:!0,hash:r};case"reset":return{isValid:!1,hash:r};default:case"throw":throw new Yt(18,"The remote archive doesn't match the expected checksum")}},C=async pe=>{if(!n)throw new Error(`Cache check required but no loader configured for ${Yr(this.configuration,e)}`);let Be=await n(),Ce=Be.getRealPath();Be.saveAndClose(),await le.chmodPromise(Ce,420);let g=await E(pe,{controlPath:Ce,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},S=async()=>{if(f===null||!await le.existsPromise(f)){let pe=await n(),Be=pe.getRealPath();return pe.saveAndClose(),{source:"loader",path:Be}}return{source:"mirror",path:f}},P=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${Yr(this.configuration,e)}`);if(this.immutable)throw new Yt(56,`Cache entry required but missing for ${Yr(this.configuration,e)}`);let{path:pe,source:Be}=await S(),{hash:Ce}=await E(pe,{isColdHit:!0}),g=this.getLocatorPath(e,Ce),we=[];Be!=="mirror"&&f!==null&&we.push(async()=>{let fe=`${f}${this.cacheId}`;await le.copyFilePromise(pe,fe,eG.default.constants.COPYFILE_FICLONE),await le.chmodPromise(fe,420),await le.renamePromise(fe,f)}),(!c.mirrorWriteOnly||f===null)&&we.push(async()=>{let fe=`${g}${this.cacheId}`;await le.copyFilePromise(pe,fe,eG.default.constants.COPYFILE_FICLONE),await le.chmodPromise(fe,420),await le.renamePromise(fe,g)});let ye=c.mirrorWriteOnly?f??g:g;return await Promise.all(we.map(fe=>fe())),[!1,ye,Ce]},I=async()=>{let Be=(async()=>{let Ce=c.unstablePackages?.has(e.locatorHash),g=Ce||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,we=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,ye=!!c.mockedPackages?.has(e.locatorHash)&&(!this.check||!we),fe=ye||we,se=fe?s:a;if(se&&se(),fe){let X=null,De=g;if(!ye)if(this.check)X=await C(De);else{let Re=await E(De,{isColdHit:!1});if(Re.isValid)X=Re.hash;else return P()}return[ye,De,X]}else{if(this.immutable&&Ce)throw new Yt(56,`Cache entry required but missing for ${Yr(this.configuration,e)}; consider defining ${he.pretty(this.configuration,"supportedArchitectures",he.Type.CODE)} to cache packages for multiple systems`);return P()}})();this.mutexes.set(e.locatorHash,Be);try{return await Be}finally{this.mutexes.delete(e.locatorHash)}};for(let pe;pe=this.mutexes.get(e.locatorHash);)await pe;let[R,N,U]=await I();R||this.markedFiles.add(N);let W=()=>this.refCountedZipFsCache.addOrCreate(N,()=>R?h():new hs(N,{baseFs:p,readOnly:!0})),te,ie=new iE(()=>i3(()=>(te=W(),te.value),pe=>`Failed to open the cache entry for ${Yr(this.configuration,e)}: ${pe}`),K),Ae=new Hf(N,{baseFs:ie,pathUtils:K}),ce=()=>{te?.release()},me=c.unstablePackages?.has(e.locatorHash)?null:U;return[Ae,ce,me]}},jIt=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var _R,sCe=Ct(()=>{_R=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(_R||{})});var qIt,KI,nG=Ct(()=>{bt();Bc();Np();Yo();qIt=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,s)=>`${r}#commit=${s}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",s,a)=>`https://${r}github.com/${s}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",s,a)=>`https://${r}github.com/${s}.git#commit=${a}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>PQ({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],KI=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let s=K.join(e.cwd,Er.lockfile);if(!le.existsSync(s))return;let a=await le.readFilePromise(s,"utf8"),n=cs(a);if(Object.hasOwn(n,"__metadata"))return;let c=this.resolutions=new Map;for(let f of Object.keys(n)){let p=JB(f);if(!p){r.reportWarning(14,`Failed to parse the string "${f}" into a proper descriptor`);continue}let h=ul(p.range)?On(p,`npm:${p.range}`):p,{version:E,resolved:C}=n[f];if(!C)continue;let S;for(let[I,R]of qIt){let N=C.match(I);if(N){S=R(E,...N);break}}if(!S){r.reportWarning(14,`${ni(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${C}")`);continue}let P=h;try{let I=Xd(h.range),R=JB(I.selector,!0);R&&(P=R)}catch{}c.set(h.descriptorHash,Vs(P,S))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=M8(a),c=s.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(c,r,s)}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var uA,oCe=Ct(()=>{Fc();xv();Qc();uA=class extends ho{constructor({configuration:r,stdout:s,suggestInstall:a=!0}){super();this.errorCount=0;HB(this,{configuration:r}),this.configuration=r,this.stdout=s,this.suggestInstall=a}static async start(r,s){let a=new this(r);try{await s(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,s){return s()}async startSectionPromise(r,s){return await s()}startTimerSync(r,s,a){return(typeof s=="function"?s:a)()}async startTimerPromise(r,s,a){return await(typeof s=="function"?s:a)()}reportSeparator(){}reportInfo(r,s){}reportWarning(r,s){}reportError(r,s){this.errorCount+=1,this.stdout.write(`${Ut(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${s} -`)}reportProgress(r){return{...Promise.resolve().then(async()=>{for await(let{}of r);}),stop:()=>{}}}reportJson(r){}reportFold(r,s){}async finalize(){this.errorCount>0&&(this.stdout.write(` -`),this.stdout.write(`${Ut(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. -`),this.suggestInstall&&this.stdout.write(`${Ut(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. -`))}formatNameWithHyperlink(r){return u6(r,{configuration:this.configuration,json:!1})}}});var JI,iG=Ct(()=>{Yo();JI=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(SQ(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,s){let a=s.project.storedResolutions.get(e.descriptorHash);if(a){let c=s.project.originalPackages.get(a);if(c)return[c]}let n=s.project.originalPackages.get(SQ(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let s=r.project.originalPackages.get(e.locatorHash);if(!s)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return s}}});function Zp(){}function GIt(t,e,r,s,a){for(var n=0,c=e.length,f=0,p=0;nP.length?R:P}),h.value=t.join(E)}else h.value=t.join(r.slice(f,f+h.count));f+=h.count,h.added||(p+=h.count)}}var S=e[c-1];return c>1&&typeof S.value=="string"&&(S.added||S.removed)&&t.equals("",S.value)&&(e[c-2].value+=S.value,e.pop()),e}function WIt(t){return{newPos:t.newPos,components:t.components.slice(0)}}function YIt(t,e){if(typeof t=="function")e.callback=t;else if(t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}function cCe(t,e,r){return r=YIt(r,{ignoreWhitespace:!0}),cG.diff(t,e,r)}function VIt(t,e,r){return uG.diff(t,e,r)}function UR(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?UR=function(e){return typeof e}:UR=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},UR(t)}function sG(t){return zIt(t)||ZIt(t)||XIt(t)||$It()}function zIt(t){if(Array.isArray(t))return oG(t)}function ZIt(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function XIt(t,e){if(t){if(typeof t=="string")return oG(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return oG(t,e)}}function oG(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,s=new Array(e);r"u"&&(c.context=4);var f=VIt(r,s,c);if(!f)return;f.push({value:"",lines:[]});function p(U){return U.map(function(W){return" "+W})}for(var h=[],E=0,C=0,S=[],P=1,I=1,R=function(W){var te=f[W],ie=te.lines||te.value.replace(/\n$/,"").split(` -`);if(te.lines=ie,te.added||te.removed){var Ae;if(!E){var ce=f[W-1];E=P,C=I,ce&&(S=c.context>0?p(ce.lines.slice(-c.context)):[],E-=S.length,C-=S.length)}(Ae=S).push.apply(Ae,sG(ie.map(function(fe){return(te.added?"+":"-")+fe}))),te.added?I+=ie.length:P+=ie.length}else{if(E)if(ie.length<=c.context*2&&W=f.length-2&&ie.length<=c.context){var g=/\n$/.test(r),we=/\n$/.test(s),ye=ie.length==0&&S.length>Ce.oldLines;!g&&ye&&r.length>0&&S.splice(Ce.oldLines,0,"\\ No newline at end of file"),(!g&&!ye||!we)&&S.push("\\ No newline at end of file")}h.push(Ce),E=0,C=0,S=[]}P+=ie.length,I+=ie.length}},N=0;N{Zp.prototype={diff:function(e,r){var s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=s.callback;typeof s=="function"&&(a=s,s={}),this.options=s;var n=this;function c(R){return a?(setTimeout(function(){a(void 0,R)},0),!0):R}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var f=r.length,p=e.length,h=1,E=f+p;s.maxEditLength&&(E=Math.min(E,s.maxEditLength));var C=[{newPos:-1,components:[]}],S=this.extractCommon(C[0],r,e,0);if(C[0].newPos+1>=f&&S+1>=p)return c([{value:this.join(r),count:r.length}]);function P(){for(var R=-1*h;R<=h;R+=2){var N=void 0,U=C[R-1],W=C[R+1],te=(W?W.newPos:0)-R;U&&(C[R-1]=void 0);var ie=U&&U.newPos+1=f&&te+1>=p)return c(GIt(n,N.components,r,e,n.useLongestToken));C[R]=N}h++}if(a)(function R(){setTimeout(function(){if(h>E)return a();P()||R()},0)})();else for(;h<=E;){var I=P();if(I)return I}},pushComponent:function(e,r,s){var a=e[e.length-1];a&&a.added===r&&a.removed===s?e[e.length-1]={count:a.count+1,added:r,removed:s}:e.push({count:1,added:r,removed:s})},extractCommon:function(e,r,s,a){for(var n=r.length,c=s.length,f=e.newPos,p=f-a,h=0;f+1"u"?r:c}:s;return typeof t=="string"?t:JSON.stringify(aG(t,null,null,a),a," ")};Zv.equals=function(t,e){return Zp.prototype.equals.call(Zv,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};lG=new Zp;lG.tokenize=function(t){return t.slice()};lG.join=lG.removeEmpty=function(t){return t}});var ACe=L((Ter,fCe)=>{var tCt=xc(),rCt=oI(),nCt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,iCt=/^\w*$/;function sCt(t,e){if(tCt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||rCt(t)?!0:iCt.test(t)||!nCt.test(t)||e!=null&&t in Object(e)}fCe.exports=sCt});var gCe=L((Rer,hCe)=>{var pCe=bk(),oCt="Expected a function";function AG(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(oCt);var r=function(){var s=arguments,a=e?e.apply(this,s):s[0],n=r.cache;if(n.has(a))return n.get(a);var c=t.apply(this,s);return r.cache=n.set(a,c)||n,c};return r.cache=new(AG.Cache||pCe),r}AG.Cache=pCe;hCe.exports=AG});var mCe=L((Fer,dCe)=>{var aCt=gCe(),lCt=500;function cCt(t){var e=aCt(t,function(s){return r.size===lCt&&r.clear(),s}),r=e.cache;return e}dCe.exports=cCt});var pG=L((Ner,yCe)=>{var uCt=mCe(),fCt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ACt=/\\(\\)?/g,pCt=uCt(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(fCt,function(r,s,a,n){e.push(a?n.replace(ACt,"$1"):s||r)}),e});yCe.exports=pCt});var Im=L((Oer,ECe)=>{var hCt=xc(),gCt=ACe(),dCt=pG(),mCt=bv();function yCt(t,e){return hCt(t)?t:gCt(t,e)?[t]:dCt(mCt(t))}ECe.exports=yCt});var zI=L((Ler,ICe)=>{var ECt=oI(),ICt=1/0;function CCt(t){if(typeof t=="string"||ECt(t))return t;var e=t+"";return e=="0"&&1/t==-ICt?"-0":e}ICe.exports=CCt});var HR=L((Mer,CCe)=>{var wCt=Im(),BCt=zI();function vCt(t,e){e=wCt(e,t);for(var r=0,s=e.length;t!=null&&r{var SCt=qk(),DCt=Im(),bCt=kB(),wCe=Wl(),PCt=zI();function xCt(t,e,r,s){if(!wCe(t))return t;e=DCt(e,t);for(var a=-1,n=e.length,c=n-1,f=t;f!=null&&++a{var kCt=HR(),QCt=hG(),TCt=Im();function RCt(t,e,r){for(var s=-1,a=e.length,n={};++s{function FCt(t,e){return t!=null&&e in Object(t)}DCe.exports=FCt});var gG=L((jer,PCe)=>{var NCt=Im(),OCt=bB(),LCt=xc(),MCt=kB(),_Ct=Tk(),UCt=zI();function HCt(t,e,r){e=NCt(e,t);for(var s=-1,a=e.length,n=!1;++s{var jCt=bCe(),qCt=gG();function GCt(t,e){return t!=null&&qCt(t,e,jCt)}xCe.exports=GCt});var TCe=L((Ger,QCe)=>{var WCt=SCe(),YCt=kCe();function VCt(t,e){return WCt(t,e,function(r,s){return YCt(t,s)})}QCe.exports=VCt});var OCe=L((Wer,NCe)=>{var RCe=Gd(),KCt=bB(),JCt=xc(),FCe=RCe?RCe.isConcatSpreadable:void 0;function zCt(t){return JCt(t)||KCt(t)||!!(FCe&&t&&t[FCe])}NCe.exports=zCt});var _Ce=L((Yer,MCe)=>{var ZCt=kk(),XCt=OCe();function LCe(t,e,r,s,a){var n=-1,c=t.length;for(r||(r=XCt),a||(a=[]);++n0&&r(f)?e>1?LCe(f,e-1,r,s,a):ZCt(a,f):s||(a[a.length]=f)}return a}MCe.exports=LCe});var HCe=L((Ver,UCe)=>{var $Ct=_Ce();function ewt(t){var e=t==null?0:t.length;return e?$Ct(t,1):[]}UCe.exports=ewt});var dG=L((Ker,jCe)=>{var twt=HCe(),rwt=J4(),nwt=z4();function iwt(t){return nwt(rwt(t,void 0,twt),t+"")}jCe.exports=iwt});var mG=L((Jer,qCe)=>{var swt=TCe(),owt=dG(),awt=owt(function(t,e){return t==null?{}:swt(t,e)});qCe.exports=awt});var jR,GCe=Ct(()=>{Fc();jR=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,s){return this.resolver.bindDescriptor(e,r,s)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,s){throw new Yt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,s,a){throw new Yt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new Yt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Yi,yG=Ct(()=>{Fc();Yi=class extends ho{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,s){return(typeof r=="function"?r:s)()}async startTimerPromise(e,r,s){return await(typeof r=="function"?r:s)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var WCe,ZI,EG=Ct(()=>{bt();WCe=et(CQ());sI();$d();Qc();E0();Np();Yo();ZI=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Ht.tryFind(this.cwd)??new Ht,this.relativeCwd=K.relative(this.project.cwd,this.cwd)||vt.dot;let e=this.manifest.name?this.manifest.name:ba(null,`${this.computeCandidateName()}-${fs(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=On(e,`${Ei.protocol}${this.relativeCwd}`),this.anchoredLocator=Vs(e,`${Ei.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let s=await(0,WCe.default)(r,{cwd:ue.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});s.sort(),await s.reduce(async(a,n)=>{let c=K.resolve(this.cwd,ue.toPortablePath(n)),f=await le.existsPromise(K.join(c,"package.json"));await a,f&&this.workspacesCwds.add(c)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${ZB(this.project.configuration,this)} (${Ut(this.project.configuration,K.join(this.cwd,Er.manifest),pt.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),s=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(s===Ei.protocol&&K.normalize(a)===this.relativeCwd||s===Ei.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=ul(a);return n?s===Ei.protocol?n.test(this.manifest.version??"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?n.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${K.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Ht.hardDependencies}={}){let r=new Set,s=a=>{for(let n of e)for(let c of a.manifest[n].values()){let f=this.project.tryWorkspaceByDescriptor(c);f===null||r.has(f)||(r.add(f),s(f))}};return s(this),r}getRecursiveWorkspaceDependents({dependencies:e=Ht.hardDependencies}={}){let r=new Set,s=a=>{for(let n of this.project.workspaces)e.some(f=>[...n.manifest[f].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&KB(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),s(n))};return s(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let s of r.workspacesCwds){let a=this.project.workspacesByCwd.get(s);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=K.join(this.cwd,Ht.fileName),s=`${JSON.stringify(e,null,this.manifest.indent)} -`;await le.changeFilePromise(r,s,{automaticNewlines:!0}),this.manifest.raw=e}}});function pwt({project:t,allDescriptors:e,allResolutions:r,allPackages:s,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:c=new Map,peerWarnings:f=[],peerRequirementNodes:p=new Map,volatileDescriptors:h=new Set}){let E=new Map,C=[],S=new Map,P=new Map,I=new Map,R=new Map,N=new Map,U=new Map(t.workspaces.map(ce=>{let me=ce.anchoredLocator.locatorHash,pe=s.get(me);if(typeof pe>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[me,WB(pe)]})),W=()=>{let ce=le.mktempSync(),me=K.join(ce,"stacktrace.log"),pe=String(C.length+1).length,Be=C.map((Ce,g)=>`${`${g+1}.`.padStart(pe," ")} ${cl(Ce)} -`).join("");throw le.writeFileSync(me,Be),le.detachTemp(ce),new Yt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${ue.fromPortablePath(me)}`)},te=ce=>{let me=r.get(ce.descriptorHash);if(typeof me>"u")throw new Error("Assertion failed: The resolution should have been registered");let pe=s.get(me);if(!pe)throw new Error("Assertion failed: The package could not be found");return pe},ie=(ce,me,pe,{top:Be,optional:Ce})=>{C.length>1e3&&W(),C.push(me);let g=Ae(ce,me,pe,{top:Be,optional:Ce});return C.pop(),g},Ae=(ce,me,pe,{top:Be,optional:Ce})=>{if(Ce||n.delete(me.locatorHash),a.has(me.locatorHash))return;a.add(me.locatorHash);let g=s.get(me.locatorHash);if(!g)throw new Error(`Assertion failed: The package (${Yr(t.configuration,me)}) should have been registered`);let we=new Set,ye=new Map,fe=[],se=[],X=[],De=[];for(let Re of Array.from(g.dependencies.values())){if(g.peerDependencies.has(Re.identHash)&&g.locatorHash!==Be)continue;if(Tp(Re))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");h.delete(Re.descriptorHash);let dt=Ce;if(!dt){let ke=g.dependenciesMeta.get(cn(Re));if(typeof ke<"u"){let it=ke.get(null);typeof it<"u"&&it.optional&&(dt=!0)}}let j=r.get(Re.descriptorHash);if(!j)throw new Error(`Assertion failed: The resolution (${ni(t.configuration,Re)}) should have been registered`);let rt=U.get(j)||s.get(j);if(!rt)throw new Error(`Assertion failed: The package (${j}, resolved from ${ni(t.configuration,Re)}) should have been registered`);if(rt.peerDependencies.size===0){ie(Re,rt,new Map,{top:Be,optional:dt});continue}let Fe,Ne,Pe=new Set,Ye=new Map;fe.push(()=>{Fe=U8(Re,me.locatorHash),Ne=H8(rt,me.locatorHash),g.dependencies.set(Re.identHash,Fe),r.set(Fe.descriptorHash,Ne.locatorHash),e.set(Fe.descriptorHash,Fe),s.set(Ne.locatorHash,Ne),xp(R,Ne.locatorHash).add(Fe.descriptorHash),we.add(Ne.locatorHash)}),se.push(()=>{N.set(Ne.locatorHash,Ye);for(let ke of Ne.peerDependencies.values()){let _e=Vl(ye,ke.identHash,()=>{let x=pe.get(ke.identHash)??null,w=g.dependencies.get(ke.identHash);return!w&&VB(me,ke)&&(ce.identHash===me.identHash?w=ce:(w=On(me,ce.range),e.set(w.descriptorHash,w),r.set(w.descriptorHash,me.locatorHash),h.delete(w.descriptorHash),x=null)),w||(w=On(ke,"missing:")),{subject:me,ident:ke,provided:w,root:!x,requests:new Map,hash:`p${fs(me.locatorHash,ke.identHash).slice(0,5)}`}}).provided;if(_e.range==="missing:"&&Ne.dependencies.has(ke.identHash)){Ne.peerDependencies.delete(ke.identHash);continue}if(Ye.set(ke.identHash,{requester:Ne,descriptor:ke,meta:Ne.peerDependenciesMeta.get(cn(ke)),children:new Map}),Ne.dependencies.set(ke.identHash,_e),Tp(_e)){let x=r.get(_e.descriptorHash);xp(I,x).add(Ne.locatorHash)}S.set(_e.identHash,_e),_e.range==="missing:"&&Pe.add(_e.identHash)}Ne.dependencies=new Map(Ys(Ne.dependencies,([ke,it])=>cn(it)))}),X.push(()=>{if(!s.has(Ne.locatorHash))return;let ke=E.get(rt.locatorHash);typeof ke=="number"&&ke>=2&&W();let it=E.get(rt.locatorHash),_e=typeof it<"u"?it+1:1;E.set(rt.locatorHash,_e),ie(Fe,Ne,Ye,{top:Be,optional:dt}),E.set(rt.locatorHash,_e-1)}),De.push(()=>{let ke=r.get(Fe.descriptorHash);if(typeof ke>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let it=N.get(ke);if(typeof it>"u")throw new Error("Assertion failed: Expected the peer requests to be registered");for(let _e of ye.values()){let x=it.get(_e.ident.identHash);x&&(_e.requests.set(Fe.descriptorHash,x),p.set(_e.hash,_e),_e.root||pe.get(_e.ident.identHash)?.children.set(Fe.descriptorHash,x))}if(s.has(Ne.locatorHash))for(let _e of Pe)Ne.dependencies.delete(_e)})}for(let Re of[...fe,...se])Re();for(let Re of we){we.delete(Re);let dt=s.get(Re),j=fs(tI(dt).locatorHash,...Array.from(dt.dependencies.values(),Pe=>{let Ye=Pe.range!=="missing:"?r.get(Pe.descriptorHash):"missing:";if(typeof Ye>"u")throw new Error(`Assertion failed: Expected the resolution for ${ni(t.configuration,Pe)} to have been registered`);return Ye===Be?`${Ye} (top)`:Ye})),rt=P.get(j);if(typeof rt>"u"){P.set(j,dt);continue}let Fe=xp(R,rt.locatorHash);for(let Pe of R.get(dt.locatorHash)??[])r.set(Pe,rt.locatorHash),Fe.add(Pe);s.delete(dt.locatorHash),a.delete(dt.locatorHash),we.delete(dt.locatorHash);let Ne=I.get(dt.locatorHash);if(Ne!==void 0){let Pe=xp(I,rt.locatorHash);for(let Ye of Ne)Pe.add(Ye),we.add(Ye)}}for(let Re of[...X,...De])Re()};for(let ce of t.workspaces){let me=ce.anchoredLocator;h.delete(ce.anchoredDescriptor.descriptorHash),ie(ce.anchoredDescriptor,me,new Map,{top:me.locatorHash,optional:!1})}for(let ce of p.values()){if(!ce.root)continue;let me=s.get(ce.subject.locatorHash);if(typeof me>"u")continue;for(let Be of ce.requests.values()){let Ce=`p${fs(ce.subject.locatorHash,cn(ce.ident),Be.requester.locatorHash).slice(0,5)}`;c.set(Ce,{subject:ce.subject.locatorHash,requested:ce.ident,rootRequester:Be.requester.locatorHash,allRequesters:Array.from(XB(Be),g=>g.requester.locatorHash)})}let pe=[...XB(ce)];if(ce.provided.range!=="missing:"){let Be=te(ce.provided),Ce=Be.version??"0.0.0",g=ye=>{if(ye.startsWith(Ei.protocol)){if(!t.tryWorkspaceByLocator(Be))return null;ye=ye.slice(Ei.protocol.length),(ye==="^"||ye==="~")&&(ye="*")}return ye},we=!0;for(let ye of pe){let fe=g(ye.descriptor.range);if(fe===null){we=!1;continue}if(!eA(Ce,fe)){we=!1;let se=`p${fs(ce.subject.locatorHash,cn(ce.ident),ye.requester.locatorHash).slice(0,5)}`;f.push({type:1,subject:me,requested:ce.ident,requester:ye.requester,version:Ce,hash:se,requirementCount:pe.length})}}if(!we){let ye=pe.map(fe=>g(fe.descriptor.range));f.push({type:3,node:ce,range:ye.includes(null)?null:G8(ye),hash:ce.hash})}}else{let Be=!0;for(let Ce of pe)if(!Ce.meta?.optional){Be=!1;let g=`p${fs(ce.subject.locatorHash,cn(ce.ident),Ce.requester.locatorHash).slice(0,5)}`;f.push({type:0,subject:me,requested:ce.ident,requester:Ce.requester,hash:g})}Be||f.push({type:2,node:ce,hash:ce.hash})}}}function*hwt(t){let e=new Map;if("children"in t)e.set(t,t);else for(let r of t.requests.values())e.set(r,r);for(let[r,s]of e){yield{request:r,root:s};for(let a of r.children.values())e.has(a)||e.set(a,s)}}function gwt(t,e){let r=[],s=[],a=!1;for(let n of t.peerWarnings)if(!(n.type===1||n.type===0)){if(!t.tryWorkspaceByLocator(n.node.subject)){a=!0;continue}if(n.type===3){let c=t.storedResolutions.get(n.node.provided.descriptorHash);if(typeof c>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let f=t.storedPackages.get(c);if(typeof f>"u")throw new Error("Assertion failed: Expected the package to be registered");let p=A0(hwt(n.node),({request:C,root:S})=>eA(f.version??"0.0.0",C.descriptor.range)?A0.skip:C===S?es(t.configuration,C.requester):`${es(t.configuration,C.requester)} (via ${es(t.configuration,S.requester)})`),h=[...XB(n.node)].length>1?"and other dependencies request":"requests",E=n.range?nI(t.configuration,n.range):Ut(t.configuration,"but they have non-overlapping ranges!","redBright");r.push(`${es(t.configuration,n.node.ident)} is listed by your project with version ${zB(t.configuration,f.version??"0.0.0")} (${Ut(t.configuration,n.hash,pt.CODE)}), which doesn't satisfy what ${p} ${h} (${E}).`)}if(n.type===2){let c=n.node.requests.size>1?" and other dependencies":"";s.push(`${Yr(t.configuration,n.node.subject)} doesn't provide ${es(t.configuration,n.node.ident)} (${Ut(t.configuration,n.hash,pt.CODE)}), requested by ${es(t.configuration,n.node.requests.values().next().value.requester)}${c}.`)}}e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met by your project; run ${Ut(t.configuration,"yarn explain peer-requirements ",pt.CODE)} for details, where ${Ut(t.configuration,"",pt.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of Ys(r,c=>VE.default(c)))e.reportWarning(60,n);for(let n of Ys(s,c=>VE.default(c)))e.reportWarning(2,n)}),a&&e.reportWarning(86,`Some peer dependencies are incorrectly met by dependencies; run ${Ut(t.configuration,"yarn explain peer-requirements",pt.CODE)} for details.`)}var qR,GR,WR,KCe,wG,CG,BG,YR,lwt,cwt,YCe,uwt,fwt,Awt,ec,IG,VR,VCe,Tt,JCe=Ct(()=>{bt();bt();Bc();Wt();qR=Ie("crypto");fG();GR=et(mG()),WR=et(Od()),KCe=et(Ai()),wG=Ie("util"),CG=et(Ie("v8")),BG=et(Ie("zlib"));rG();dv();nG();iG();sI();J8();Fc();GCe();xv();yG();$d();EG();NQ();Qc();E0();kc();pT();g6();Np();Yo();YR=WE(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),lwt=3,cwt=/ *, */g,YCe=/\/$/,uwt=32,fwt=(0,wG.promisify)(BG.default.gzip),Awt=(0,wG.promisify)(BG.default.gunzip),ec=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(ec||{}),IG={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},VR=(a=>(a[a.NotProvided=0]="NotProvided",a[a.NotCompatible=1]="NotCompatible",a[a.NodeNotProvided=2]="NodeNotProvided",a[a.NodeNotCompatible=3]="NodeNotCompatible",a))(VR||{}),VCe=t=>fs(`${lwt}`,t),Tt=class t{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.peerRequirementNodes=new Map;this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new nt(`No project found in ${r}`);let s=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,le.existsSync(K.join(n,Er.manifest))){s=n;break}a=K.dirname(n)}let c=new t(e.projectCwd,{configuration:e});ze.telemetry?.reportProject(c.cwd),await c.setupResolutions(),await c.setupWorkspaces(),ze.telemetry?.reportWorkspaceCount(c.workspaces.length),ze.telemetry?.reportDependencyCount(c.workspaces.reduce((I,R)=>I+R.manifest.dependencies.size+R.manifest.devDependencies.size,0));let f=c.tryWorkspaceByCwd(s);if(f)return{project:c,workspace:f,locator:f.anchoredLocator};let p=await c.findLocatorForLocation(`${s}/`,{strict:!0});if(p)return{project:c,locator:p,workspace:null};let h=Ut(e,c.cwd,pt.PATH),E=Ut(e,K.relative(c.cwd,s),pt.PATH),C=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,S=`- If ${h} is intended to be a project, it might be that you forgot to list ${E} in its workspace configuration.`,P=`- Finally, if ${h} is fine and you intend ${E} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new nt(`The nearest package directory (${Ut(e,s,pt.PATH)}) doesn't seem to be part of the project declared in ${Ut(e,c.cwd,pt.PATH)}. - -${[C,S,P].join(` -`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=K.join(this.cwd,Er.lockfile),r=this.configuration.get("defaultLanguageName");if(le.existsSync(e)){let s=await le.readFilePromise(e,"utf8");this.lockFileChecksum=VCe(s);let a=cs(s);if(a.__metadata){let n=a.__metadata.version,c=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${f})`);let h=Rp(p.resolution,!0),E=new Ht;E.load(p,{yamlCompatibilityMode:!0});let C=E.version,S=E.languageName||r,P=p.linkType.toUpperCase(),I=p.conditions??null,R=E.dependencies,N=E.peerDependencies,U=E.dependenciesMeta,W=E.peerDependenciesMeta,te=E.bin;if(p.checksum!=null){let Ae=typeof c<"u"&&!p.checksum.includes("/")?`${c}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,Ae)}let ie={...h,version:C,languageName:S,linkType:P,conditions:I,dependencies:R,peerDependencies:N,dependenciesMeta:U,peerDependenciesMeta:W,bin:te};this.originalPackages.set(ie.locatorHash,ie);for(let Ae of f.split(cwt)){let ce=I0(Ae);n<=6&&(ce=this.configuration.normalizeDependency(ce),ce=On(ce,ce.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(ce.descriptorHash,ce),this.storedResolutions.set(ce.descriptorHash,h.locatorHash)}}}else s.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,WR.default)(4),s=async(a,n)=>{if(e.has(n))return a;e.add(n);let c=new ZI(n,{project:this});await r(()=>c.setup());let f=a.then(()=>{this.addWorkspace(c)});return Array.from(c.workspacesCwds).reduce(s,f)};await s(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${es(this.configuration,e.anchoredLocator)}: ${ue.fromPortablePath(e.cwd)} conflicts with ${ue.fromPortablePath(r.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.anchoredLocator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){K.isAbsolute(e)||(e=K.resolve(this.cwd,e)),e=K.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let s of this.workspaces)K.relative(s.cwd,e).startsWith("../")||r&&r.cwd.length>=s.cwd.length||(r=s);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${es(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Ei.protocol)){let s=e.range.slice(Ei.protocol.length);if(s!=="^"&&s!=="~"&&s!=="*"&&!ul(s))return this.tryWorkspaceByCwd(s)}let r=this.tryWorkspaceByIdent(e);return r===null||(Tp(e)&&(e=YB(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${ni(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Gu(e)&&(e=tI(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${Yr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let s=new Set(this.storedResolutions.values());typeof r<"u"&&!s.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,s]of this.storedResolutions)s===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[s,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(s)}for(let s of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(s,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(s.locatorHash);let n=r.get(s.locatorHash);if(n){r.delete(s.locatorHash);for(let c of n)this.deleteDescriptor(c)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,s]of e.dependencies)Tp(s)&&e.dependencies.set(r,YB(s))}getDependencyMeta(e,r){let s={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(cn(e));if(!n)return s;let c=n.get(null);if(c&&Object.assign(s,c),r===null||!KCe.default.valid(r))return s;for(let[f,p]of n)f!==null&&f===r&&Object.assign(s,p);return s}async findLocatorForLocation(e,{strict:r=!1}={}){let s=new Yi,a=this.configuration.getLinkers(),n={project:this,report:s};for(let c of a){let f=await c.findPackageLocator(e,n);if(f){if(r&&(await c.findPackageLocation(f,n)).replace(YCe,"")!==e.replace(YCe,""))continue;return f}}return null}async loadUserConfig(){let e=K.join(this.cwd,".pnp.cjs");await le.existsPromise(e)&&kp(e).setup();let r=K.join(this.cwd,"yarn.config.cjs");return await le.existsPromise(r)?kp(r):null}async preparePackage(e,{resolver:r,resolveOptions:s}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[c,f]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,f,this,n,f,{resolver:r,resolveOptions:s});if(!VB(f,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,s);n.dependencies.set(c,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),s=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new KI(a);await n.setup(this,{report:e.report});let c=e.lockfileOnly?[new jR(a)]:[n,a],f=new em([new JI(a),...c]),p=new em([...c]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:f}:{project:this,report:e.report,resolver:f,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},C=new Map,S=new Map,P=new Map,I=new Map,R=new Map,N=new Map,U=this.topLevelWorkspace.anchoredLocator,W=new Set,te=[],ie=Sj(),Ae=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(ho.progressViaTitle(),async se=>{let X=async rt=>{let Fe=await qE(async()=>await f.resolve(rt,E),ke=>`${Yr(this.configuration,rt)}: ${ke}`);if(!KB(rt,Fe))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${Yr(this.configuration,rt)} to ${Yr(this.configuration,Fe)})`);I.set(Fe.locatorHash,Fe),!r.delete(Fe.locatorHash)&&!this.tryWorkspaceByLocator(Fe)&&s.push(Fe);let Pe=await this.preparePackage(Fe,{resolver:f,resolveOptions:E}),Ye=Uu([...Pe.dependencies.values()].map(ke=>j(ke)));return te.push(Ye),Ye.catch(()=>{}),S.set(Pe.locatorHash,Pe),Pe},De=async rt=>{let Fe=R.get(rt.locatorHash);if(typeof Fe<"u")return Fe;let Ne=Promise.resolve().then(()=>X(rt));return R.set(rt.locatorHash,Ne),Ne},Re=async(rt,Fe)=>{let Ne=await j(Fe);return C.set(rt.descriptorHash,rt),P.set(rt.descriptorHash,Ne.locatorHash),Ne},dt=async rt=>{se.setTitle(ni(this.configuration,rt));let Fe=this.resolutionAliases.get(rt.descriptorHash);if(typeof Fe<"u")return Re(rt,this.storedDescriptors.get(Fe));let Ne=f.getResolutionDependencies(rt,E),Pe=Object.fromEntries(await Uu(Object.entries(Ne).map(async([it,_e])=>{let x=f.bindDescriptor(_e,U,E),w=await j(x);return W.add(w.locatorHash),[it,w]}))),ke=(await qE(async()=>await f.getCandidates(rt,Pe,E),it=>`${ni(this.configuration,rt)}: ${it}`))[0];if(typeof ke>"u")throw new Yt(82,`${ni(this.configuration,rt)}: No candidates found`);if(e.checkResolutions){let{locators:it}=await p.getSatisfying(rt,Pe,[ke],{...E,resolver:p});if(!it.find(_e=>_e.locatorHash===ke.locatorHash))throw new Yt(78,`Invalid resolution ${jB(this.configuration,rt,ke)}`)}return C.set(rt.descriptorHash,rt),P.set(rt.descriptorHash,ke.locatorHash),De(ke)},j=rt=>{let Fe=N.get(rt.descriptorHash);if(typeof Fe<"u")return Fe;C.set(rt.descriptorHash,rt);let Ne=Promise.resolve().then(()=>dt(rt));return N.set(rt.descriptorHash,Ne),Ne};for(let rt of this.workspaces){let Fe=rt.anchoredDescriptor;te.push(j(Fe))}for(;te.length>0;){let rt=[...te];te.length=0,await Uu(rt)}});let ce=Yl(r.values(),se=>this.tryWorkspaceByLocator(se)?Yl.skip:se);if(s.length>0||ce.length>0){let se=new Set(this.workspaces.flatMap(rt=>{let Fe=S.get(rt.anchoredLocator.locatorHash);if(!Fe)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(Fe.dependencies.values(),Ne=>{let Pe=P.get(Ne.descriptorHash);if(!Pe)throw new Error("Assertion failed: The resolution should have been registered");return Pe})})),X=rt=>se.has(rt.locatorHash)?"0":"1",De=rt=>cl(rt),Re=Ys(s,[X,De]),dt=Ys(ce,[X,De]),j=e.report.getRecommendedLength();Re.length>0&&e.report.reportInfo(85,`${Ut(this.configuration,"+",pt.ADDED)} ${Zk(this.configuration,Re,j)}`),dt.length>0&&e.report.reportInfo(85,`${Ut(this.configuration,"-",pt.REMOVED)} ${Zk(this.configuration,dt,j)}`)}let me=new Set(this.resolutionAliases.values()),pe=new Set(S.keys()),Be=new Set,Ce=new Map,g=[],we=new Map;pwt({project:this,accessibleLocators:Be,volatileDescriptors:me,optionalBuilds:pe,peerRequirements:Ce,peerWarnings:g,peerRequirementNodes:we,allDescriptors:C,allResolutions:P,allPackages:S});for(let se of W)pe.delete(se);for(let se of me)C.delete(se),P.delete(se);let ye=new Set,fe=new Set;for(let se of S.values())se.conditions!=null&&pe.has(se.locatorHash)&&(kQ(se,Ae)||(kQ(se,ie)&&e.report.reportWarningOnce(77,`${Yr(this.configuration,se)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Ut(this.configuration,"supportedArchitectures",pt.SETTING)} setting`),fe.add(se.locatorHash)),ye.add(se.locatorHash));this.storedResolutions=P,this.storedDescriptors=C,this.storedPackages=S,this.accessibleLocators=Be,this.conditionalLocators=ye,this.disabledLocators=fe,this.originalPackages=I,this.optionalBuilds=pe,this.peerRequirements=Ce,this.peerWarnings=g,this.peerRequirementNodes=we}async fetchEverything({cache:e,report:r,fetcher:s,mode:a,persistProject:n=!0}){let c={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},f=s||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:f,report:r,cacheOptions:c},h=Array.from(new Set(Ys(this.storedResolutions.values(),[I=>{let R=this.storedPackages.get(I);if(!R)throw new Error("Assertion failed: The locator should have been registered");return cl(R)}])));a==="update-lockfile"&&(h=h.filter(I=>!this.storedChecksums.has(I)));let E=!1,C=ho.progressViaCounter(h.length);await r.reportProgress(C);let S=(0,WR.default)(uwt);if(await Uu(h.map(I=>S(async()=>{let R=this.storedPackages.get(I);if(!R)throw new Error("Assertion failed: The locator should have been registered");if(Gu(R))return;let N;try{N=await f.fetch(R,p)}catch(U){U.message=`${Yr(this.configuration,R)}: ${U.message}`,r.reportExceptionOnce(U),E=U;return}N.checksum!=null?this.storedChecksums.set(R.locatorHash,N.checksum):this.storedChecksums.delete(R.locatorHash),N.releaseFs&&N.releaseFs()}).finally(()=>{C.tick()}))),E)throw E;let P=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||P){let R=(await Promise.all([...r.cacheMisses].map(async ce=>{let me=this.storedPackages.get(ce),pe=this.storedChecksums.get(ce)??null,Be=e.getLocatorPath(me,pe);return(await le.statPromise(Be)).size}))).reduce((ce,me)=>ce+me,0)-(P?.size??0),N=r.cacheMisses.size,U=P?.count??0,W=`${Gk(N,{zero:"No new packages",one:"A package was",more:`${Ut(this.configuration,N,pt.NUMBER)} packages were`})} added to the project`,te=`${Gk(U,{zero:"none were",one:"one was",more:`${Ut(this.configuration,U,pt.NUMBER)} were`})} removed`,ie=R!==0?` (${Ut(this.configuration,R,pt.SIZE_DIFF)})`:"",Ae=U>0?N>0?`${W}, and ${te}${ie}.`:`${W}, but ${te}${ie}.`:`${W}${ie}.`;r.reportInfo(13,Ae)}}async linkEverything({cache:e,report:r,fetcher:s,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},c=s||this.configuration.makeFetcher(),f={checksums:this.storedChecksums,project:this,cache:e,fetcher:c,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(ye=>{let fe=ye.makeInstaller(h),se=ye.getCustomDataKey(),X=this.linkersCustomData.get(se);return typeof X<"u"&&fe.attachCustomData(X),[ye,fe]})),C=new Map,S=new Map,P=new Map,I=new Map(await Uu([...this.accessibleLocators].map(async ye=>{let fe=this.storedPackages.get(ye);if(!fe)throw new Error("Assertion failed: The locator should have been registered");return[ye,await c.fetch(fe,f)]}))),R=[],N=new Set,U=[];for(let ye of this.accessibleLocators){let fe=this.storedPackages.get(ye);if(typeof fe>"u")throw new Error("Assertion failed: The locator should have been registered");let se=I.get(fe.locatorHash);if(typeof se>"u")throw new Error("Assertion failed: The fetch result should have been registered");let X=[],De=dt=>{X.push(dt)},Re=this.tryWorkspaceByLocator(fe);if(Re!==null){let dt=[],{scripts:j}=Re.manifest;for(let Fe of["preinstall","install","postinstall"])j.has(Fe)&&dt.push({type:0,script:Fe});try{for(let[Fe,Ne]of E)if(Fe.supportsPackage(fe,h)&&(await Ne.installPackage(fe,se,{holdFetchResult:De})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{X.length===0?se.releaseFs?.():R.push(Uu(X).catch(()=>{}).then(()=>{se.releaseFs?.()}))}let rt=K.join(se.packageFs.getRealPath(),se.prefixPath);S.set(fe.locatorHash,rt),!Gu(fe)&&dt.length>0&&P.set(fe.locatorHash,{buildDirectives:dt,buildLocations:[rt]})}else{let dt=p.find(Fe=>Fe.supportsPackage(fe,h));if(!dt)throw new Yt(12,`${Yr(this.configuration,fe)} isn't supported by any available linker`);let j=E.get(dt);if(!j)throw new Error("Assertion failed: The installer should have been registered");let rt;try{rt=await j.installPackage(fe,se,{holdFetchResult:De})}finally{X.length===0?se.releaseFs?.():R.push(Uu(X).then(()=>{}).then(()=>{se.releaseFs?.()}))}C.set(fe.locatorHash,dt),S.set(fe.locatorHash,rt.packageLocation),rt.buildRequest&&rt.packageLocation&&(rt.buildRequest.skipped?(N.add(fe.locatorHash),this.skippedBuilds.has(fe.locatorHash)||U.push([fe,rt.buildRequest.explain])):P.set(fe.locatorHash,{buildDirectives:rt.buildRequest.directives,buildLocations:[rt.packageLocation]}))}}let W=new Map;for(let ye of this.accessibleLocators){let fe=this.storedPackages.get(ye);if(!fe)throw new Error("Assertion failed: The locator should have been registered");let se=this.tryWorkspaceByLocator(fe)!==null,X=async(De,Re)=>{let dt=S.get(fe.locatorHash);if(typeof dt>"u")throw new Error(`Assertion failed: The package (${Yr(this.configuration,fe)}) should have been registered`);let j=[];for(let rt of fe.dependencies.values()){let Fe=this.storedResolutions.get(rt.descriptorHash);if(typeof Fe>"u")throw new Error(`Assertion failed: The resolution (${ni(this.configuration,rt)}, from ${Yr(this.configuration,fe)})should have been registered`);let Ne=this.storedPackages.get(Fe);if(typeof Ne>"u")throw new Error(`Assertion failed: The package (${Fe}, resolved from ${ni(this.configuration,rt)}) should have been registered`);let Pe=this.tryWorkspaceByLocator(Ne)===null?C.get(Fe):null;if(typeof Pe>"u")throw new Error(`Assertion failed: The package (${Fe}, resolved from ${ni(this.configuration,rt)}) should have been registered`);Pe===De||Pe===null?S.get(Ne.locatorHash)!==null&&j.push([rt,Ne]):!se&&dt!==null&&LB(W,Fe).push(dt)}dt!==null&&await Re.attachInternalDependencies(fe,j)};if(se)for(let[De,Re]of E)De.supportsPackage(fe,h)&&await X(De,Re);else{let De=C.get(fe.locatorHash);if(!De)throw new Error("Assertion failed: The linker should have been found");let Re=E.get(De);if(!Re)throw new Error("Assertion failed: The installer should have been registered");await X(De,Re)}}for(let[ye,fe]of W){let se=this.storedPackages.get(ye);if(!se)throw new Error("Assertion failed: The package should have been registered");let X=C.get(se.locatorHash);if(!X)throw new Error("Assertion failed: The linker should have been found");let De=E.get(X);if(!De)throw new Error("Assertion failed: The installer should have been registered");await De.attachExternalDependents(se,fe)}let te=new Map;for(let[ye,fe]of E){let se=await fe.finalizeInstall();for(let X of se?.records??[])X.buildRequest.skipped?(N.add(X.locator.locatorHash),this.skippedBuilds.has(X.locator.locatorHash)||U.push([X.locator,X.buildRequest.explain])):P.set(X.locator.locatorHash,{buildDirectives:X.buildRequest.directives,buildLocations:X.buildLocations});typeof se?.customData<"u"&&te.set(ye.getCustomDataKey(),se.customData)}if(this.linkersCustomData=te,await Uu(R),a==="skip-build")return;for(let[,ye]of Ys(U,([fe])=>cl(fe)))ye(r);let ie=new Set(P.keys()),Ae=(0,qR.createHash)("sha512");Ae.update(process.versions.node),await this.configuration.triggerHook(ye=>ye.globalHashGeneration,this,ye=>{Ae.update("\0"),Ae.update(ye)});let ce=Ae.digest("hex"),me=new Map,pe=ye=>{let fe=me.get(ye.locatorHash);if(typeof fe<"u")return fe;let se=this.storedPackages.get(ye.locatorHash);if(typeof se>"u")throw new Error("Assertion failed: The package should have been registered");let X=(0,qR.createHash)("sha512");X.update(ye.locatorHash),me.set(ye.locatorHash,"");for(let De of se.dependencies.values()){let Re=this.storedResolutions.get(De.descriptorHash);if(typeof Re>"u")throw new Error(`Assertion failed: The resolution (${ni(this.configuration,De)}) should have been registered`);let dt=this.storedPackages.get(Re);if(typeof dt>"u")throw new Error("Assertion failed: The package should have been registered");X.update(pe(dt))}return fe=X.digest("hex"),me.set(ye.locatorHash,fe),fe},Be=(ye,fe)=>{let se=(0,qR.createHash)("sha512");se.update(ce),se.update(pe(ye));for(let X of fe)se.update(X);return se.digest("hex")},Ce=new Map,g=!1,we=ye=>{let fe=new Set([ye.locatorHash]);for(let se of fe){let X=this.storedPackages.get(se);if(!X)throw new Error("Assertion failed: The package should have been registered");for(let De of X.dependencies.values()){let Re=this.storedResolutions.get(De.descriptorHash);if(!Re)throw new Error(`Assertion failed: The resolution (${ni(this.configuration,De)}) should have been registered`);if(Re!==ye.locatorHash&&ie.has(Re))return!1;let dt=this.storedPackages.get(Re);if(!dt)throw new Error("Assertion failed: The package should have been registered");let j=this.tryWorkspaceByLocator(dt);if(j){if(j.anchoredLocator.locatorHash!==ye.locatorHash&&ie.has(j.anchoredLocator.locatorHash))return!1;fe.add(j.anchoredLocator.locatorHash)}fe.add(Re)}}return!0};for(;ie.size>0;){let ye=ie.size,fe=[];for(let se of ie){let X=this.storedPackages.get(se);if(!X)throw new Error("Assertion failed: The package should have been registered");if(!we(X))continue;let De=P.get(X.locatorHash);if(!De)throw new Error("Assertion failed: The build directive should have been registered");let Re=Be(X,De.buildLocations);if(this.storedBuildState.get(X.locatorHash)===Re){Ce.set(X.locatorHash,Re),ie.delete(se);continue}g||(await this.persistInstallStateFile(),g=!0),this.storedBuildState.has(X.locatorHash)?r.reportInfo(8,`${Yr(this.configuration,X)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${Yr(this.configuration,X)} must be built because it never has been before or the last one failed`);let dt=De.buildLocations.map(async j=>{if(!K.isAbsolute(j))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${j})`);for(let rt of De.buildDirectives){let Fe=`# This file contains the result of Yarn building a package (${cl(X)}) -`;switch(rt.type){case 0:Fe+=`# Script name: ${rt.script} -`;break;case 1:Fe+=`# Script code: ${rt.script} -`;break}let Ne=null;if(!await le.mktempPromise(async Ye=>{let ke=K.join(Ye,"build.log"),{stdout:it,stderr:_e}=this.configuration.getSubprocessStreams(ke,{header:Fe,prefix:Yr(this.configuration,X),report:r}),x;try{switch(rt.type){case 0:x=await OT(X,rt.script,[],{cwd:j,project:this,stdin:Ne,stdout:it,stderr:_e});break;case 1:x=await f6(X,rt.script,[],{cwd:j,project:this,stdin:Ne,stdout:it,stderr:_e});break}}catch(y){_e.write(y.stack),x=1}if(it.end(),_e.end(),x===0)return!0;le.detachTemp(Ye);let w=`${Yr(this.configuration,X)} couldn't be built successfully (exit code ${Ut(this.configuration,x,pt.NUMBER)}, logs can be found here: ${Ut(this.configuration,ke,pt.PATH)})`,b=this.optionalBuilds.has(X.locatorHash);return b?r.reportInfo(9,w):r.reportError(9,w),Wme&&r.reportFold(ue.fromPortablePath(ke),le.readFileSync(ke,"utf8")),b}))return!1}return!0});fe.push(...dt,Promise.allSettled(dt).then(j=>{ie.delete(se),j.every(rt=>rt.status==="fulfilled"&&rt.value===!0)&&Ce.set(X.locatorHash,Re)}))}if(await Uu(fe),ye===ie.size){let se=Array.from(ie).map(X=>{let De=this.storedPackages.get(X);if(!De)throw new Error("Assertion failed: The package should have been registered");return Yr(this.configuration,De)}).join(", ");r.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${se})`);break}}this.storedBuildState=Ce,this.skippedBuilds=N}async installWithNewReport(e,r){return(await Ot.start({configuration:this.configuration,json:e.json,stdout:e.stdout,forceSectionAlignment:!0,includeLogs:!e.json&&!e.quiet,includeVersion:!0},async a=>{await this.install({...r,report:a})})).exitCode()}async install(e){let r=this.configuration.get("nodeLinker");ze.telemetry?.reportInstall(r);let s=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(E=>E.validateProject,this,{reportWarning:(E,C)=>{e.report.reportWarning(E,C)},reportError:(E,C)=>{e.report.reportError(E,C),s=!0}})}),s)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,C]of E)for(let S of C)S.status="inactive";let n=K.join(this.cwd,Er.lockfile),c=null;if(e.immutable)try{c=await le.readFilePromise(n,"utf8")}catch(E){throw E.code==="ENOENT"?new Yt(28,"The lockfile would have been created by this install, which is explicitly forbidden."):E}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{gwt(this,e.report);for(let[,E]of a)for(let[,C]of E)for(let S of C)if(S.userProvided){let P=Ut(this.configuration,S,pt.PACKAGE_EXTENSION);switch(S.status){case"inactive":e.report.reportWarning(68,`${P}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${P}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(c!==null){let E=yd(c,this.generateLockfile());if(E!==c){let C=uCe(n,n,c,E,void 0,void 0,{maxEditLength:100});if(C){e.report.reportSeparator();for(let S of C.hunks){e.report.reportInfo(null,`@@ -${S.oldStart},${S.oldLines} +${S.newStart},${S.newLines} @@`);for(let P of S.lines)P.startsWith("+")?e.report.reportError(28,Ut(this.configuration,P,pt.ADDED)):P.startsWith("-")?e.report.reportError(28,Ut(this.configuration,P,pt.REMOVED)):e.report.reportInfo(null,Ut(this.configuration,P,"grey"))}e.report.reportSeparator()}throw new Yt(28,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let E of a.values())for(let[,C]of E)for(let S of C)S.userProvided&&S.status==="active"&&ze.telemetry?.reportPackageExtension(Jd(S,pt.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let f=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(f.map(async E=>vQ(E,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${Ut(this.configuration,"mode=update-lockfile",pt.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(f.map(async C=>vQ(C,{cwd:this.cwd})));for(let C=0;C{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,C)=>{e.report.reportWarning(E,C)},reportError:(E,C)=>{e.report.reportError(E,C),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,c]of this.storedResolutions.entries()){let f=e.get(c);f||e.set(c,f=new Set),f.add(n)}let r={},{cacheKey:s}=Jr.getCacheKey(this.configuration);r.__metadata={version:YR,cacheKey:s};for(let[n,c]of e.entries()){let f=this.originalPackages.get(n);if(!f)continue;let p=[];for(let C of c){let S=this.storedDescriptors.get(C);if(!S)throw new Error("Assertion failed: The descriptor should have been registered");p.push(S)}let h=p.map(C=>ll(C)).sort().join(", "),E=new Ht;E.version=f.linkType==="HARD"?f.version:"0.0.0-use.local",E.languageName=f.languageName,E.dependencies=new Map(f.dependencies),E.peerDependencies=new Map(f.peerDependencies),E.dependenciesMeta=new Map(f.dependenciesMeta),E.peerDependenciesMeta=new Map(f.peerDependenciesMeta),E.bin=new Map(f.bin),r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:f.linkType.toLowerCase(),resolution:cl(f),checksum:this.storedChecksums.get(f.locatorHash),conditions:f.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. -`,`# Manual changes might be lost - proceed with caution! -`].join("")} -`+il(r)}async persistLockfile(){let e=K.join(this.cwd,Er.lockfile),r="";try{r=await le.readFilePromise(e,"utf8")}catch{}let s=this.generateLockfile(),a=yd(r,s);a!==r&&(await le.writeFilePromise(e,a),this.lockFileChecksum=VCe(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let c of Object.values(IG))e.push(...c);let r=(0,GR.default)(this,e),s=CG.default.serialize(r),a=fs(s);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await le.mkdirPromise(K.dirname(n),{recursive:!0}),await le.writeFilePromise(n,await fwt(s)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:s=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let c=await Awt(await le.readFilePromise(a));n=CG.default.deserialize(c),this.installStateChecksum=fs(c)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),s&&Object.assign(this,(0,GR.default)(n,IG.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,(0,GR.default)(n,IG.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Yi}),await this.persistInstallStateFile()}async persist(){let e=(0,WR.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(r=>e(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let s=new Set([".gitignore"]);if(!sH(e.cwd,this.cwd)||!await le.existsPromise(e.cwd))return null;let a=[];for(let c of await le.readdirPromise(e.cwd)){if(s.has(c))continue;let f=K.resolve(e.cwd,c);e.markedFiles.has(f)||(e.immutable?r.reportError(56,`${Ut(this.configuration,K.basename(f),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(le.lstatPromise(f).then(async p=>(await le.removePromise(f),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((c,f)=>c+f,0)}}}});function dwt(t){let s=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),c=n+a,f=t.state.lastTips??s*864e5,p=f+864e5+8*36e5-t.timeZone,h=c<=t.timeNow,E=p<=t.timeNow,C=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(C={},C.lastUpdate=h?t.timeNow:n,C.lastTips=f,C.blocks=h?{}:t.state.blocks,C.displayedTips=t.state.displayedTips),{nextState:C,triggerUpdate:h,triggerTips:E,nextTips:E?s*864e5:f}}var XI,zCe=Ct(()=>{bt();Pv();E0();fT();kc();Np();XI=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let s=this.getRegistryPath();this.isNew=!le.existsSync(s),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),s=f=>f&&un?eA(un,f):!1,a=e.map((f,p)=>p).filter(f=>e[f]&&s(e[f]?.selector));if(a.length===0)return null;let n=a.filter(f=>!r.has(f));if(n.length===0){let f=Math.floor(a.length*.2);this.displayedTips=f>0?this.displayedTips.slice(-f):[],n=a.filter(p=>!r.has(p))}let c=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(c),this.commitTips(),e[c]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){xp(this.values,e).add(r)}reportEnumerator(e,r){xp(this.enumerators,e).add(fs(r))}reportHit(e,r="*"){let s=n3(this.hits,e),a=Vl(s,r,()=>0);s.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return K.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),s;try{s=le.readJsonSync(r)}catch{s={}}let{nextState:a,triggerUpdate:n,triggerTips:c,nextTips:f}=dwt({state:s,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=f,this.displayedTips=s.displayedTips??[],a!==null)try{le.mkdirSync(K.dirname(r),{recursive:!0}),le.writeJsonSync(r,a)}catch{return!1}if(c&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=s.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=C=>vj(h,C,{configuration:this.configuration}).catch(()=>{});for(let[C,S]of Object.entries(s.blocks??{})){if(Object.keys(S).length===0)continue;let P=S;P.userId=C,P.reportType="primary";for(let N of Object.keys(P.enumerators??{}))P.enumerators[N]=P.enumerators[N].length;E(P);let I=new Map,R=20;for(let[N,U]of Object.entries(P.values))U.length>0&&I.set(N,U.slice(0,R));for(;I.size>0;){let N={};N.userId=C,N.reportType="secondary",N.metrics={};for(let[U,W]of I)N.metrics[U]=W.shift(),W.length===0&&I.delete(U);E(N)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=le.readJsonSync(e)}catch{r={}}let s=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[s]=a[s]??{};for(let c of this.hits.keys()){let f=n.hits=n.hits??{},p=f[c]=f[c]??{};for(let[h,E]of this.hits.get(c))p[h]=(p[h]??0)+E}for(let c of["values","enumerators"])for(let f of this[c].keys()){let p=n[c]=n[c]??{};p[f]=[...new Set([...p[f]??[],...this[c].get(f)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),le.mkdirSync(K.dirname(e),{recursive:!0}),le.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var Xv={};Vt(Xv,{BuildDirectiveType:()=>_R,CACHE_CHECKPOINT:()=>tG,CACHE_VERSION:()=>MR,Cache:()=>Jr,Configuration:()=>ze,DEFAULT_RC_FILENAME:()=>Qj,FormatType:()=>Dde,InstallMode:()=>ec,LEGACY_PLUGINS:()=>hv,LOCKFILE_VERSION:()=>YR,LegacyMigrationResolver:()=>KI,LightReport:()=>uA,LinkType:()=>YE,LockfileResolver:()=>JI,Manifest:()=>Ht,MessageName:()=>Dr,MultiFetcher:()=>aI,PackageExtensionStatus:()=>a3,PackageExtensionType:()=>o3,PeerWarningType:()=>VR,Project:()=>Tt,Report:()=>ho,ReportError:()=>Yt,SettingsType:()=>gv,StreamReport:()=>Ot,TAG_REGEXP:()=>Up,TelemetryManager:()=>XI,ThrowReport:()=>Yi,VirtualFetcher:()=>lI,WindowsLinkType:()=>yT,Workspace:()=>ZI,WorkspaceFetcher:()=>cI,WorkspaceResolver:()=>Ei,YarnVersion:()=>un,execUtils:()=>Gr,folderUtils:()=>FQ,formatUtils:()=>he,hashUtils:()=>Nn,httpUtils:()=>An,miscUtils:()=>je,nodeUtils:()=>ps,parseMessageName:()=>zx,reportOptionDeprecations:()=>vI,scriptUtils:()=>In,semverUtils:()=>Or,stringifyMessageName:()=>Vf,structUtils:()=>q,tgzUtils:()=>gs,treeUtils:()=>Qs});var Ve=Ct(()=>{hT();NQ();Qc();E0();fT();kc();pT();g6();Np();Yo();JIe();rCe();rG();dv();dv();sCe();nG();oCe();iG();sI();Zx();K8();JCe();Fc();xv();zCe();yG();z8();Z8();$d();EG();Pv();hAe()});var rwe=L((wrr,eS)=>{"use strict";var ywt=process.env.TERM_PROGRAM==="Hyper",Ewt=process.platform==="win32",$Ce=process.platform==="linux",vG={ballotDisabled:"\u2612",ballotOff:"\u2610",ballotOn:"\u2611",bullet:"\u2022",bulletWhite:"\u25E6",fullBlock:"\u2588",heart:"\u2764",identicalTo:"\u2261",line:"\u2500",mark:"\u203B",middot:"\xB7",minus:"\uFF0D",multiplication:"\xD7",obelus:"\xF7",pencilDownRight:"\u270E",pencilRight:"\u270F",pencilUpRight:"\u2710",percent:"%",pilcrow2:"\u2761",pilcrow:"\xB6",plusMinus:"\xB1",section:"\xA7",starsOff:"\u2606",starsOn:"\u2605",upDownArrow:"\u2195"},ewe=Object.assign({},vG,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),twe=Object.assign({},vG,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:$Ce?"\u25B8":"\u276F",pointerSmall:$Ce?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});eS.exports=Ewt&&!ywt?ewe:twe;Reflect.defineProperty(eS.exports,"common",{enumerable:!1,value:vG});Reflect.defineProperty(eS.exports,"windows",{enumerable:!1,value:ewe});Reflect.defineProperty(eS.exports,"other",{enumerable:!1,value:twe})});var Ju=L((Brr,SG)=>{"use strict";var Iwt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),Cwt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,nwe=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let c=n.open=`\x1B[${n.codes[0]}m`,f=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,E)=>{h.includes(f)&&(h=h.replace(p,f+c));let C=c+h+f;return E?C.replace(/\r*\n/g,`${f}$&${c}`):C},n},r=(n,c,f)=>typeof n=="function"?n(c):n.wrap(c,f),s=(n,c)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let f=""+n,p=f.includes(` -`),h=c.length;for(h>0&&c.includes("unstyle")&&(c=[...new Set(["unstyle",...c])].reverse());h-- >0;)f=r(t.styles[c[h]],f,p);return f},a=(n,c,f)=>{t.styles[n]=e({name:n,codes:c}),(t.keys[f]||(t.keys[f]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>s(E,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=Cwt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,c)=>{let f=typeof c=="string"?t[c]:c;if(typeof f!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");f.stack||(Reflect.defineProperty(f,"name",{value:n}),t.styles[n]=f,f.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>s(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(f.stack):f.stack,p}})},t.theme=n=>{if(!Iwt(n))throw new TypeError("Expected theme to be an object");for(let c of Object.keys(n))t.alias(c,n[c]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=rwe(),t.define=a,t};SG.exports=nwe();SG.exports.create=nwe});var $o=L(pn=>{"use strict";var wwt=Object.prototype.toString,Gc=Ju(),iwe=!1,DG=[],swe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};pn.longest=(t,e)=>t.reduce((r,s)=>Math.max(r,e?s[e].length:s.length),0);pn.hasColor=t=>!!t&&Gc.hasColor(t);var JR=pn.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);pn.nativeType=t=>wwt.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");pn.isAsyncFn=t=>pn.nativeType(t)==="asyncfunction";pn.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";pn.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;pn.scrollDown=(t=[])=>[...t.slice(1),t[0]];pn.scrollUp=(t=[])=>[t.pop(),...t];pn.reorder=(t=[])=>{let e=t.slice();return e.sort((r,s)=>r.index>s.index?1:r.index{let s=t.length,a=r===s?0:r<0?s-1:r,n=t[e];t[e]=t[a],t[a]=n};pn.width=(t,e=80)=>{let r=t&&t.columns?t.columns:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[0]),process.platform==="win32"?r-1:r};pn.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};pn.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:s=` -`+r,width:a=80}=e,n=(s+r).match(/[^\S\n]/g)||[];a-=n.length;let c=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,f=t.trim(),p=new RegExp(c,"g"),h=f.match(p)||[];return h=h.map(E=>E.replace(/\n$/,"")),e.padEnd&&(h=h.map(E=>E.padEnd(a," "))),e.padStart&&(h=h.map(E=>E.padStart(a," "))),r+h.join(s)};pn.unmute=t=>{let e=t.stack.find(s=>Gc.keys.color.includes(s));return e?Gc[e]:t.stack.find(s=>s.slice(2)==="bg")?Gc[e.slice(2)]:s=>s};pn.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";pn.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(s=>Gc.keys.color.includes(s));if(e){let s=Gc["bg"+pn.pascal(e)];return s?s.black:t}let r=t.stack.find(s=>s.slice(0,2)==="bg");return r?Gc[r.slice(2).toLowerCase()]||t:Gc.none};pn.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(s=>Gc.keys.color.includes(s)),r=t.stack.find(s=>s.slice(0,2)==="bg");if(e&&!r)return Gc[swe[e]||e];if(r){let s=r.slice(2).toLowerCase(),a=swe[s];return a&&Gc["bg"+pn.pascal(a)]||t}return Gc.none};pn.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),s=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+s};pn.set=(t={},e="",r)=>e.split(".").reduce((s,a,n,c)=>{let f=c.length-1>n?s[a]||{}:r;return!pn.isObject(f)&&n{let s=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return s??r};pn.mixin=(t,e)=>{if(!JR(t))return e;if(!JR(e))return t;for(let r of Object.keys(e)){let s=Object.getOwnPropertyDescriptor(e,r);if(s.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&JR(s.value)){let a=Object.getOwnPropertyDescriptor(t,r);JR(a.value)?t[r]=pn.merge({},t[r],e[r]):Reflect.defineProperty(t,r,s)}else Reflect.defineProperty(t,r,s);else Reflect.defineProperty(t,r,s)}return t};pn.merge=(...t)=>{let e={};for(let r of t)pn.mixin(e,r);return e};pn.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let s of Object.keys(r)){let a=r[s];typeof a=="function"?pn.define(t,s,a.bind(e)):pn.define(t,s,a)}};pn.onExit=t=>{let e=(r,s)=>{iwe||(iwe=!0,DG.forEach(a=>a()),r===!0&&process.exit(128+s))};DG.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),DG.push(t)};pn.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};pn.defineExport=(t,e,r)=>{let s;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){s=a},get(){return s?s():r()}})}});var owe=L(rC=>{"use strict";rC.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"};rC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};rC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};rC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};rC.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}});var cwe=L((Drr,lwe)=>{"use strict";var awe=Ie("readline"),Bwt=owe(),vwt=/^(?:\x1b)([a-zA-Z0-9])$/,Swt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,Dwt={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};function bwt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function Pwt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var zR=(t="",e={})=>{let r,s={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t,...e};if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=s.sequence||""),s.sequence=s.sequence||t||s.name,t==="\r")s.raw=void 0,s.name="return";else if(t===` -`)s.name="enter";else if(t===" ")s.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")s.name="backspace",s.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")s.name="escape",s.meta=t.length===2;else if(t===" "||t==="\x1B ")s.name="space",s.meta=t.length===2;else if(t<="")s.name=String.fromCharCode(t.charCodeAt(0)+97-1),s.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")s.name="number";else if(t.length===1&&t>="a"&&t<="z")s.name=t;else if(t.length===1&&t>="A"&&t<="Z")s.name=t.toLowerCase(),s.shift=!0;else if(r=vwt.exec(t))s.meta=!0,s.shift=/^[A-Z]$/.test(r[1]);else if(r=Swt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(s.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),c=(r[3]||r[5]||1)-1;s.ctrl=!!(c&4),s.meta=!!(c&10),s.shift=!!(c&1),s.code=n,s.name=Dwt[n],s.shift=bwt(n)||s.shift,s.ctrl=Pwt(n)||s.ctrl}return s};zR.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let s=awe.createInterface({terminal:!0,input:r});awe.emitKeypressEvents(r,s);let a=(f,p)=>e(f,zR(f,p),s),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),s.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),s.pause(),s.close()}};zR.action=(t,e,r)=>{let s={...Bwt,...r};return e.ctrl?(e.action=s.ctrl[e.name],e):e.option&&s.option?(e.action=s.option[e.name],e):e.shift?(e.action=s.shift[e.name],e):(e.action=s.keys[e.name],e)};lwe.exports=zR});var fwe=L((brr,uwe)=>{"use strict";uwe.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(e)for(let r of Object.keys(e)){let s=e[r];typeof s=="number"&&(s={interval:s}),xwt(t,r,s)}};function xwt(t,e,r={}){let s=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;s.frames=r.frames||[],s.loading=!0;let n=setInterval(()=>{s.ms=Date.now()-s.start,s.tick++,t.render()},a);return s.stop=()=>{s.loading=!1,clearInterval(n)},Reflect.defineProperty(s,"interval",{value:n}),t.once("close",()=>s.stop()),s.stop}});var pwe=L((Prr,Awe)=>{"use strict";var{define:kwt,width:Qwt}=$o(),bG=class{constructor(e){let r=e.options;kwt(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=Qwt(r.stdout||process.stdout),Object.assign(this,r),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let r=this._color||e[this.status];return typeof r=="function"?r:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading=="boolean"?this._loading:this.loadingChoices?"choices":!1}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}};Awe.exports=bG});var gwe=L((xrr,hwe)=>{"use strict";var PG=$o(),mo=Ju(),xG={default:mo.noop,noop:mo.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||PG.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||PG.complement(this.primary)},primary:mo.cyan,success:mo.green,danger:mo.magenta,strong:mo.bold,warning:mo.yellow,muted:mo.dim,disabled:mo.gray,dark:mo.dim.gray,underline:mo.underline,set info(t){this._info=t},get info(){return this._info||this.primary},set em(t){this._em=t},get em(){return this._em||this.primary.underline},set heading(t){this._heading=t},get heading(){return this._heading||this.muted.underline},set pending(t){this._pending=t},get pending(){return this._pending||this.primary},set submitted(t){this._submitted=t},get submitted(){return this._submitted||this.success},set cancelled(t){this._cancelled=t},get cancelled(){return this._cancelled||this.danger},set typing(t){this._typing=t},get typing(){return this._typing||this.dim},set placeholder(t){this._placeholder=t},get placeholder(){return this._placeholder||this.primary.dim},set highlight(t){this._highlight=t},get highlight(){return this._highlight||this.inverse}};xG.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(mo.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(mo.visible=t.styles.visible);let e=PG.merge({},xG,t.styles);delete e.merge;for(let r of Object.keys(mo))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>mo[r]});for(let r of Object.keys(mo.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>mo[r]});return e};hwe.exports=xG});var mwe=L((krr,dwe)=>{"use strict";var kG=process.platform==="win32",Xp=Ju(),Twt=$o(),QG={...Xp.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:Xp.symbols.check,leftAngle:"\u2039",mark:"\u203B",minus:"\u2212",multiplication:"\xD7",obelus:"\xF7",percent:"%",pilcrow:"\xB6",pilcrow2:"\u2761",pencilUpRight:"\u2710",pencilDownRight:"\u270E",pencilRight:"\u270F",plus:"+",plusMinus:"\xB1",pointRight:"\u261E",rightAngle:"\u203A",section:"\xA7",hexagon:{off:"\u2B21",on:"\u2B22",disabled:"\u2B22"},ballot:{on:"\u2611",off:"\u2610",disabled:"\u2612"},stars:{on:"\u2605",off:"\u2606",disabled:"\u2606"},folder:{on:"\u25BC",off:"\u25B6",disabled:"\u25B6"},prefix:{pending:Xp.symbols.question,submitted:Xp.symbols.check,cancelled:Xp.symbols.cross},separator:{pending:Xp.symbols.pointerSmall,submitted:Xp.symbols.middot,cancelled:Xp.symbols.middot},radio:{off:kG?"( )":"\u25EF",on:kG?"(*)":"\u25C9",disabled:kG?"(|)":"\u24BE"},numbers:["\u24EA","\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246A","\u246B","\u246C","\u246D","\u246E","\u246F","\u2470","\u2471","\u2472","\u2473","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325A","\u325B","\u325C","\u325D","\u325E","\u325F","\u32B1","\u32B2","\u32B3","\u32B4","\u32B5","\u32B6","\u32B7","\u32B8","\u32B9","\u32BA","\u32BB","\u32BC","\u32BD","\u32BE","\u32BF"]};QG.merge=t=>{let e=Twt.merge({},Xp.symbols,QG,t.symbols);return delete e.merge,e};dwe.exports=QG});var Ewe=L((Qrr,ywe)=>{"use strict";var Rwt=gwe(),Fwt=mwe(),Nwt=$o();ywe.exports=t=>{t.options=Nwt.merge({},t.options.theme,t.options),t.symbols=Fwt.merge(t.options),t.styles=Rwt.merge(t.options)}});var vwe=L((wwe,Bwe)=>{"use strict";var Iwe=process.env.TERM_PROGRAM==="Apple_Terminal",Owt=Ju(),TG=$o(),zu=Bwe.exports=wwe,Ui="\x1B[",Cwe="\x07",RG=!1,H0=zu.code={bell:Cwe,beep:Cwe,beginning:`${Ui}G`,down:`${Ui}J`,esc:Ui,getPosition:`${Ui}6n`,hide:`${Ui}?25l`,line:`${Ui}2K`,lineEnd:`${Ui}K`,lineStart:`${Ui}1K`,restorePosition:Ui+(Iwe?"8":"u"),savePosition:Ui+(Iwe?"7":"s"),screen:`${Ui}2J`,show:`${Ui}?25h`,up:`${Ui}1J`},Cm=zu.cursor={get hidden(){return RG},hide(){return RG=!0,H0.hide},show(){return RG=!1,H0.show},forward:(t=1)=>`${Ui}${t}C`,backward:(t=1)=>`${Ui}${t}D`,nextLine:(t=1)=>`${Ui}E`.repeat(t),prevLine:(t=1)=>`${Ui}F`.repeat(t),up:(t=1)=>t?`${Ui}${t}A`:"",down:(t=1)=>t?`${Ui}${t}B`:"",right:(t=1)=>t?`${Ui}${t}C`:"",left:(t=1)=>t?`${Ui}${t}D`:"",to(t,e){return e?`${Ui}${e+1};${t+1}H`:`${Ui}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?Cm.left(-t):t>0?Cm.right(t):"",r+=e<0?Cm.up(-e):e>0?Cm.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:s,input:a,prompt:n,size:c,value:f}=t;if(s=TG.isPrimitive(s)?String(s):"",a=TG.isPrimitive(a)?String(a):"",f=TG.isPrimitive(f)?String(f):"",c){let p=zu.cursor.up(c)+zu.cursor.to(n.length),h=a.length-r;return h>0&&(p+=zu.cursor.left(h)),p}if(f||e){let p=!a&&s?-s.length:-a.length+r;return e&&(p-=e.length),a===""&&s&&!n.includes(s)&&(p+=s.length),zu.cursor.move(p)}}},FG=zu.erase={screen:H0.screen,up:H0.up,down:H0.down,line:H0.line,lineEnd:H0.lineEnd,lineStart:H0.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return FG.line+Cm.to(0);let r=n=>[...Owt.unstyle(n)].length,s=t.split(/\r?\n/),a=0;for(let n of s)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(FG.line+Cm.prevLine()).repeat(a-1)+FG.line+Cm.to(0)}});var nC=L((Trr,Dwe)=>{"use strict";var Lwt=Ie("events"),Swe=Ju(),NG=cwe(),Mwt=fwe(),_wt=pwe(),Uwt=Ewe(),hl=$o(),wm=vwe(),OG=class t extends Lwt{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,Uwt(this),Mwt(this),this.state=new _wt(this),this.initial=[e.initial,e.default].find(r=>r!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=jwt(this.options.margin),this.setMaxListeners(0),Hwt(this)}async keypress(e,r={}){this.keypressed=!0;let s=NG.action(e,NG(e,r),this.options.actions);this.state.keypress=s,this.emit("keypress",e,s),this.emit("state",this.state.clone());let a=this.options[s.action]||this[s.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,s);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(wm.code.beep)}cursorHide(){this.stdout.write(wm.cursor.hide()),hl.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(wm.cursor.show())}write(e){e&&(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let r=this.state.buffer;this.state.buffer="",!(!r&&!e||this.options.show===!1)&&this.stdout.write(wm.cursor.down(e)+wm.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:s}=this.sections(),{cursor:a,initial:n="",input:c="",value:f=""}=this,p=this.state.size=s.length,h={after:r,cursor:a,initial:n,input:c,prompt:e,size:p,value:f},E=wm.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:s}=this.state;s=Swe.unstyle(s);let a=Swe.unstyle(e),n=a.indexOf(s),c=a.slice(0,n),p=a.slice(n).split(` -`),h=p[0],E=p[p.length-1],S=(s+(r?" "+r:"")).length,P=Se.call(this,this.value),this.result=()=>s.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,s){let{options:a,state:n,symbols:c,timers:f}=this,p=f&&f[e];n.timer=p;let h=a[e]||n[e]||c[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let C=await this.resolve(E,n,r,s);return!C&&r&&r[e]?this.resolve(h,n,r,s):C}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,s=this.state;return s.timer=r,hl.isObject(e)&&(e=e[s.status]||e.pending),hl.hasColor(e)?e:(this.styles[s.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return hl.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,s=this.state;s.timer=r;let a=e[s.status]||e.pending||s.separator,n=await this.resolve(a,s);return hl.isObject(n)&&(n=n[s.status]||n.pending),hl.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let s=await this.element("pointer",e,r);if(typeof s=="string"&&hl.hasColor(s))return s;if(s){let a=this.styles,n=this.index===r,c=n?a.primary:h=>h,f=await this.resolve(s[n?"on":"off"]||s,this.state),p=hl.hasColor(f)?f:c(f);return n?p:" ".repeat(f.length)}}async indicator(e,r){let s=await this.element("indicator",e,r);if(typeof s=="string"&&hl.hasColor(s))return s;if(s){let a=this.styles,n=e.enabled===!0,c=n?a.success:a.dark,f=s[n?"on":"off"]||s;return hl.hasColor(f)?f:c(f)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return hl.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==""}resolve(e,...r){return hl.resolve(this,e,...r)}get base(){return t.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||hl.height(this.stdout,25)}get width(){return this.options.columns||hl.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,s=[r,e].find(this.isValue.bind(this));return this.isValue(s)?s:this.initial}static get prompt(){return e=>new this(e).run()}};function Hwt(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],s=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?s.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function jwt(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` -`:" ",s=[];for(let a=0;a<4;a++){let n=r(a);e[a]?s.push(n.repeat(e[a])):s.push("")}return s}Dwe.exports=OG});var xwe=L((Rrr,Pwe)=>{"use strict";var qwt=$o(),bwe={default(t,e){return e},checkbox(t,e){throw new Error("checkbox role is not implemented yet")},editable(t,e){throw new Error("editable role is not implemented yet")},expandable(t,e){throw new Error("expandable role is not implemented yet")},heading(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||"",e},input(t,e){throw new Error("input role is not implemented yet")},option(t,e){return bwe.default(t,e)},radio(t,e){throw new Error("radio role is not implemented yet")},separator(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||t.symbols.line.repeat(5),e},spacer(t,e){return e}};Pwe.exports=(t,e={})=>{let r=qwt.merge({},bwe,e.roles);return r[t]||r.default}});var tS=L((Frr,Twe)=>{"use strict";var Gwt=Ju(),Wwt=nC(),Ywt=xwe(),ZR=$o(),{reorder:LG,scrollUp:Vwt,scrollDown:Kwt,isObject:kwe,swap:Jwt}=ZR,MG=class extends Wwt{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:s,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");kwe(r)&&(r=Object.keys(r)),Array.isArray(r)?(s!=null&&(this.index=this.findIndex(s)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(s!=null&&(r=s),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let s=[],a=0,n=async(c,f)=>{typeof c=="function"&&(c=await c.call(this)),c instanceof Promise&&(c=await c);for(let p=0;p(this.state.loadingChoices=!1,c))}async toChoice(e,r,s){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let a=e.value;if(e=Ywt(e.role,this.options)(this,e),typeof e.disabled=="string"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint="(disabled)"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=r,e.cursor=0,ZR.define(e,"parent",s),e.level=s?s.level+1:1,e.indent==null&&(e.indent=s?s.indent+" ":e.indent||""),e.path=s?s.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,Gwt.unstyle(e.message).length));let c={...e};return e.reset=(f=c.input,p=c.value)=>{for(let h of Object.keys(c))e[h]=c[h];e.input=f,e.value=p},a==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,s){let a=await this.toChoice(e,r,s);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,s){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,s);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(a=>this.toggle(a,r));let s=e.parent;for(;s;){let a=s.choices.filter(n=>this.isDisabled(n));s.enabled=a.every(n=>n.enabled===!0),s=s.parent}return Qwe(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=s=>{let a=Number(s);if(a>this.choices.length-1)return this.alert();let n=this.focused,c=this.choices.find(f=>a===f.index);if(!c.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(c)===-1){let f=LG(this.choices),p=f.indexOf(c);if(n.index>p){let h=f.slice(p,p+this.limit),E=f.filter(C=>!h.includes(C));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=f.slice(h).concat(f.slice(0,h))}}return this.index=this.choices.indexOf(c),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(s=>{let a=this.choices.length,n=this.num,c=(f=!1,p)=>{clearTimeout(this.numberTimeout),f&&(p=r(n)),this.num="",s(p)};if(n==="0"||n.length===1&&+(n+"0")>a)return c(!0);if(Number(n)>a)return c(!1,this.alert());this.numberTimeout=setTimeout(()=>c(!0),this.delay)})}home(){return this.choices=LG(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=LG(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,s=this.index;return this.options.scroll===!1&&s===0?this.alert():e>r&&s===0?this.scrollUp():(this.index=(s-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,s=this.index;return this.options.scroll===!1&&s===r-1?this.alert():e>r&&s===r-1?this.scrollDown():(this.index=(s+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=Vwt(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=Kwt(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Jwt(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(s=>e[s]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(s=>!this.isDisabled(s));return e.enabled&&r.every(s=>this.isEnabled(s))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((s,a)=>(s[a]=this.find(a,r),s),{})}filter(e,r){let a=typeof e=="function"?e:(f,p)=>[f.name,p].includes(e),c=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?c.map(f=>f[r]):c}find(e,r){if(kwe(e))return r?e[r]:e;let a=typeof e=="function"?e:(c,f)=>[c.name,f].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(c=>c.newChoice))return this.alert();let{reorder:r,sort:s}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&s!==!0&&(n=ZR.reorder(n)),this.value=a?n.map(c=>c.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(s=>s.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let s=this.find(r);s&&(this.initial=s.index,this.focus(s,!0))}}}get choices(){return Qwe(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:s}=this,a=e.limit||this._limit||r.limit||s.length;return Math.min(a,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function Qwe(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(ZR.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let s=r.choices.filter(a=>!t.isDisabled(a));r.enabled=s.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}Twe.exports=MG});var j0=L((Nrr,Rwe)=>{"use strict";var zwt=tS(),_G=$o(),UG=class extends zwt{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let s=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!_G.hasColor(s)&&(s=this.styles.strong(s)),this.resolve(s,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let s=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),c=await this.resolve(e.hint,this.state,e,r);c&&!_G.hasColor(c)&&(c=this.styles.muted(c));let f=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],f+a+n,p,this.margin[1],c].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(_G.hasColor(p)||(p=this.styles.disabled(p)),h()):(s&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,c)=>await this.renderChoice(n,c)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let s=this.margin[0]+r.join(` -`),a;return this.options.choicesHeader&&(a=await this.resolve(this.options.choicesHeader,this.state)),[a,s].filter(Boolean).join(` -`)}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:r}=this.state,s="",a=await this.header(),n=await this.prefix(),c=await this.separator(),f=await this.message();this.options.promptLine!==!1&&(s=[n,f,c,""].join(" "),this.state.prompt=s);let p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),C=await this.footer();p&&(s+=p),h&&!s.includes(h)&&(s+=" "+h),e&&!p&&!E.trim()&&this.multiple&&this.emptyError!=null&&(s+=this.styles.danger(this.emptyError)),this.clear(r),this.write([a,s,E,C].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};Rwe.exports=UG});var Nwe=L((Orr,Fwe)=>{"use strict";var Zwt=j0(),Xwt=(t,e)=>{let r=t.toLowerCase();return s=>{let n=s.toLowerCase().indexOf(r),c=e(s.slice(n,n+r.length));return n>=0?s.slice(0,n)+c+s.slice(n+r.length):s}},HG=class extends Zwt{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:s}=this.state;return this.input=s.slice(0,r)+e+s.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let s=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(s))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=Xwt(this.input,e),s=this.choices;this.choices=s.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=s}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Fwe.exports=HG});var qG=L((Lrr,Owe)=>{"use strict";var jG=$o();Owe.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:s="",pos:a,showCursor:n=!0,color:c}=e,f=c||t.styles.placeholder,p=jG.inverse(t.styles.primary),h=R=>p(t.styles.black(R)),E=r,C=" ",S=h(C);if(t.blink&&t.blink.off===!0&&(h=R=>R,S=""),n&&a===0&&s===""&&r==="")return h(C);if(n&&a===0&&(r===s||r===""))return h(s[0])+f(s.slice(1));s=jG.isPrimitive(s)?`${s}`:"",r=jG.isPrimitive(r)?`${r}`:"";let P=s&&s.startsWith(r)&&s!==r,I=P?h(s[r.length]):S;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),I=""),n===!1&&(I=""),P){let R=t.styles.unstyle(E+I);return E+I+f(s.slice(R.length))}return E+I}});var XR=L((Mrr,Lwe)=>{"use strict";var $wt=Ju(),e1t=j0(),t1t=qG(),GG=class extends e1t{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:s,input:a}=r;return r.value=r.input=a.slice(0,s)+e+a.slice(s),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:s}=e;return e.value=e.input=s.slice(0,r-1)+s.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:s}=e;if(s[r]===void 0)return this.alert();let a=`${s}`.slice(0,r)+`${s}`.slice(r+1);return e.value=e.input=a,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:s}=e;return r&&r.startsWith(s)&&s!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let s=await this.resolve(e.separator,this.state,e,r)||":";return s?" "+this.styles.disabled(s):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:s,styles:a}=this,{cursor:n,initial:c="",name:f,hint:p,input:h=""}=e,{muted:E,submitted:C,primary:S,danger:P}=a,I=p,R=this.index===r,N=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),W=e.message;this.align==="right"&&(W=W.padStart(this.longest+1," ")),this.align==="left"&&(W=W.padEnd(this.longest+1," "));let te=this.values[f]=h||c,ie=h?"success":"dark";await N.call(e,te,this.state)!==!0&&(ie="danger");let Ae=a[ie],ce=Ae(await this.indicator(e,r))+(e.pad||""),me=this.indent(e),pe=()=>[me,ce,W+U,h,I].filter(Boolean).join(" ");if(s.submitted)return W=$wt.unstyle(W),h=C(h),I="",pe();if(e.format)h=await e.format.call(this,h,e,r);else{let Be=this.styles.muted;h=t1t(this,{input:h,initial:c,pos:n,showCursor:R,color:Be})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[f]=await e.result.call(this,te,e,r)),R&&(W=S(W)),e.error?h+=(h?" ":"")+P(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),pe()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Lwe.exports=GG});var WG=L((_rr,_we)=>{"use strict";var r1t=XR(),n1t=()=>{throw new Error("expected prompt to have a custom authenticate method")},Mwe=(t=n1t)=>{class e extends r1t{constructor(s){super(s)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(s){return Mwe(s)}}return e};_we.exports=Mwe()});var jwe=L((Urr,Hwe)=>{"use strict";var i1t=WG();function s1t(t,e){return t.username===this.options.username&&t.password===this.options.password}var Uwe=(t=s1t)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(s){return this.options.showPassword?s:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(s.length))}}];class r extends i1t.create(t){constructor(a){super({...a,choices:e})}static create(a){return Uwe(a)}}return r};Hwe.exports=Uwe()});var $R=L((Hrr,qwe)=>{"use strict";var o1t=nC(),{isPrimitive:a1t,hasColor:l1t}=$o(),YG=class extends o1t{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:s}=this;return s.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return a1t(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return l1t(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,s=await this.prefix(),a=await this.separator(),n=await this.message(),c=this.styles.muted(this.default),f=[s,n,c,a].filter(Boolean).join(" ");this.state.prompt=f;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),C=await this.error()||await this.hint(),S=await this.footer();C&&!f.includes(C)&&(E+=" "+C),f+=" "+E,this.clear(r),this.write([p,f,S].filter(Boolean).join(` -`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};qwe.exports=YG});var Wwe=L((jrr,Gwe)=>{"use strict";var c1t=$R(),VG=class extends c1t{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};Gwe.exports=VG});var Vwe=L((qrr,Ywe)=>{"use strict";var u1t=j0(),f1t=XR(),iC=f1t.prototype,KG=class extends u1t{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let s=this.focused,a=s.parent||{};return!s.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():iC.dispatch.call(this,e,r)}append(e,r){return iC.append.call(this,e,r)}delete(e,r){return iC.delete.call(this,e,r)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?iC.next.call(this):super.next()}prev(){return this.focused.editable?iC.prev.call(this):super.prev()}async indicator(e,r){let s=e.indicator||"",a=e.editable?s:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?iC.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let s=r.parent?this.value[r.parent.name]:this.value;if(r.editable?s=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(s=r.enabled===!0),e=await r.validate(s,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Ywe.exports=KG});var Bm=L((Grr,Kwe)=>{"use strict";var A1t=nC(),p1t=qG(),{isPrimitive:h1t}=$o(),JG=class extends A1t{constructor(e){super(e),this.initial=h1t(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let s=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!s||s.name!=="return")?this.append(` -`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:s}=this.state;this.input=`${s}`.slice(0,r)+e+`${s}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),s=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=s,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):p1t(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),s=await this.separator(),a=await this.message(),n=[r,a,s].filter(Boolean).join(" ");this.state.prompt=n;let c=await this.header(),f=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!f.includes(p)&&(f+=" "+p),n+=" "+f,this.clear(e),this.write([c,n,h].filter(Boolean).join(` -`)),this.restore()}};Kwe.exports=JG});var zwe=L((Wrr,Jwe)=>{"use strict";var g1t=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),eF=t=>g1t(t).filter(Boolean);Jwe.exports=(t,e={},r="")=>{let{past:s=[],present:a=""}=e,n,c;switch(t){case"prev":case"undo":return n=s.slice(0,s.length-1),c=s[s.length-1]||"",{past:eF([r,...n]),present:c};case"next":case"redo":return n=s.slice(1),c=s[0]||"",{past:eF([...n,r]),present:c};case"save":return{past:eF([...s,r]),present:""};case"remove":return c=eF(s.filter(f=>f!==r)),a="",c.length&&(a=c.pop()),{past:c,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var ZG=L((Yrr,Xwe)=>{"use strict";var d1t=Bm(),Zwe=zwe(),zG=class extends d1t{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let s=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:s},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Zwe(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){this.store&&(this.data=Zwe("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};Xwe.exports=zG});var e1e=L((Vrr,$we)=>{"use strict";var m1t=Bm(),XG=class extends m1t{format(){return""}};$we.exports=XG});var r1e=L((Krr,t1e)=>{"use strict";var y1t=Bm(),$G=class extends y1t{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:r=>r;return this.list.map(e).join(", ")}async submit(e){let r=this.state.error||await this.validate(this.list,this.state);return r!==!0?(this.state.error=r,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};t1e.exports=$G});var i1e=L((Jrr,n1e)=>{"use strict";var E1t=j0(),e5=class extends E1t{constructor(e){super({...e,multiple:!0})}};n1e.exports=e5});var r5=L((zrr,s1e)=>{"use strict";var I1t=Bm(),t5=class extends I1t{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,s=this.toNumber(this.input);return s>this.max+r?this.alert():(this.input=`${s+r}`,this.render())}down(e){let r=e||this.minor,s=this.toNumber(this.input);return sthis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};s1e.exports=t5});var a1e=L((Zrr,o1e)=>{o1e.exports=r5()});var c1e=L((Xrr,l1e)=>{"use strict";var C1t=Bm(),n5=class extends C1t{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):""}};l1e.exports=n5});var A1e=L(($rr,f1e)=>{"use strict";var w1t=Ju(),B1t=tS(),u1e=$o(),i5=class extends B1t{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` - `;let r=e.startNumber||1;typeof this.scale=="number"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((s,a)=>({name:a+r})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let r of this.choices){e=Math.max(e,r.message.length),r.scaleIndex=r.initial||2,r.scale=[];for(let s=0;s=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.index)).join(", "):""}pointer(){return""}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?"":["",...this.scale.map(s=>` ${s.name} - ${s.message}`)].map(s=>this.styles.muted(s)).join(` -`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let s=this.scaleLength-r.join("").length,a=Math.round(s/(r.length-1)),c=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),f=" ".repeat(this.widths[0]);return this.margin[3]+f+this.margin[1]+c}scaleIndicator(e,r,s){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,s);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let s=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return s.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let s=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!u1e.hasColor(n)&&(n=this.styles.muted(n));let c=I=>this.margin[3]+I.replace(/\s+$/,"").padEnd(this.widths[0]," "),f=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),C=this.margin[1]+this.margin[3];this.scaleLength=w1t.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-C.length);let P=u1e.wordWrap(h,{width:this.widths[0],newline:f}).split(` -`).map(I=>c(I)+this.margin[1]);return s&&(E=this.styles.info(E),P=P.map(I=>this.styles.info(I))),P[0]+=E,this.linebreak&&P.push(""),[p+a,P.join(` -`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(a,n)=>await this.renderChoice(a,n)),r=await Promise.all(e),s=await this.renderScaleHeading();return this.margin[0]+[s,...r.map(a=>a.join(" "))].join(` -`)}async render(){let{submitted:e,size:r}=this.state,s=await this.prefix(),a=await this.separator(),n=await this.message(),c="";this.options.promptLine!==!1&&(c=[s,n,a,""].join(" "),this.state.prompt=c);let f=await this.header(),p=await this.format(),h=await this.renderScaleKey(),E=await this.error()||await this.hint(),C=await this.renderChoices(),S=await this.footer(),P=this.emptyError;p&&(c+=p),E&&!c.includes(E)&&(c+=" "+E),e&&!p&&!C.trim()&&this.multiple&&P!=null&&(c+=this.styles.danger(P)),this.clear(r),this.write([f,c,h,C,S].filter(Boolean).join(` -`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};f1e.exports=i5});var g1e=L((enr,h1e)=>{"use strict";var p1e=Ju(),v1t=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",o5=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=v1t(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},S1t=async(t={},e={},r=s=>s)=>{let s=new Set,a=t.fields||[],n=t.template,c=[],f=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,C=()=>n[++E],S=()=>n[E+1],P=I=>{I.line=h,c.push(I)};for(P({type:"bos",value:""});Eie.name===U.key);U.field=a.find(ie=>ie.name===U.key),te||(te=new o5(U),f.push(te)),te.lines.push(U.line-1);continue}let R=c[c.length-1];R.type==="text"&&R.line===h?R.value+=I:P({type:"text",value:I})}return P({type:"eos",value:""}),{input:n,tabstops:c,unique:s,keys:p,items:f}};h1e.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),s={...e.values,...e.initial},{tabstops:a,items:n,keys:c}=await S1t(e,s),f=s5("result",t,e),p=s5("format",t,e),h=s5("validate",t,e,!0),E=t.isValue.bind(t);return async(C={},S=!1)=>{let P=0;C.required=r,C.items=n,C.keys=c,C.output="";let I=async(W,te,ie,Ae)=>{let ce=await h(W,te,ie,Ae);return ce===!1?"Invalid field "+ie.name:ce};for(let W of a){let te=W.value,ie=W.key;if(W.type!=="template"){te&&(C.output+=te);continue}if(W.type==="template"){let Ae=n.find(Ce=>Ce.name===ie);e.required===!0&&C.required.add(Ae.name);let ce=[Ae.input,C.values[Ae.value],Ae.value,te].find(E),pe=(Ae.field||{}).message||W.inner;if(S){let Ce=await I(C.values[ie],C,Ae,P);if(Ce&&typeof Ce=="string"||Ce===!1){C.invalid.set(ie,Ce);continue}C.invalid.delete(ie);let g=await f(C.values[ie],C,Ae,P);C.output+=p1e.unstyle(g);continue}Ae.placeholder=!1;let Be=te;te=await p(te,C,Ae,P),ce!==te?(C.values[ie]=ce,te=t.styles.typing(ce),C.missing.delete(pe)):(C.values[ie]=void 0,ce=`<${pe}>`,te=t.styles.primary(ce),Ae.placeholder=!0,C.required.has(ie)&&C.missing.add(pe)),C.missing.has(pe)&&C.validating&&(te=t.styles.warning(ce)),C.invalid.has(ie)&&C.validating&&(te=t.styles.danger(ce)),P===C.index&&(Be!==te?te=t.styles.underline(te):te=t.styles.heading(p1e.unstyle(te))),P++}te&&(C.output+=te)}let R=C.output.split(` -`).map(W=>" "+W),N=n.length,U=0;for(let W of n)C.invalid.has(W.name)&&W.lines.forEach(te=>{R[te][0]===" "&&(R[te]=C.styles.danger(C.symbols.bullet)+R[te].slice(1))}),t.isValue(C.values[W.name])&&U++;return C.completed=(U/N*100).toFixed(0),C.output=R.join(` -`),C.output}};function s5(t,e,r,s){return(a,n,c,f)=>typeof c.field[t]=="function"?c.field[t].call(e,a,n,c,f):[s,a].find(p=>e.isValue(p))}});var m1e=L((tnr,d1e)=>{"use strict";var D1t=Ju(),b1t=g1e(),P1t=nC(),a5=class extends P1t{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await b1t(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let s=this.getItem(),a=s.input.slice(0,this.cursor),n=s.input.slice(this.cursor);this.input=s.input=`${a}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),s=e.input.slice(0,this.cursor-1);this.input=e.input=`${s}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:s,size:a}=this.state,n=[this.options.newline,` -`].find(W=>W!=null),c=await this.prefix(),f=await this.separator(),p=await this.message(),h=[c,p,f].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),C=await this.error()||"",S=await this.hint()||"",P=s?"":await this.interpolate(this.state),I=this.state.key=r[e]||"",R=await this.format(I),N=await this.footer();R&&(h+=" "+R),S&&!R&&this.state.completed===0&&(h+=" "+S),this.clear(a);let U=[E,h,P,N,C.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:s,index:a}=this.state,n=r.find(c=>c.name===s[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:s,values:a}=this.state;if(e.size){let f="";for(let[p,h]of e)f+=`Invalid ${p}: ${h} -`;return this.state.error=f,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let c=D1t.unstyle(s).split(` -`).map(f=>f.slice(1)).join(` -`);return this.value={values:a,result:c},super.submit()}};d1e.exports=a5});var E1e=L((rnr,y1e)=>{"use strict";var x1t="(Use + to sort)",k1t=j0(),l5=class extends k1t{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,x1t].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let s=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+s:n+s}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};y1e.exports=l5});var C1e=L((nnr,I1e)=>{"use strict";var Q1t=tS(),c5=class extends Q1t{constructor(e={}){if(super(e),this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(s=>this.styles.muted(s)),this.state.header=r.join(` - `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let s of r)s.scale=T1t(5,this.options),s.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],s=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!s,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let s=this.index===r,a=this.term==="Hyper",n=a?9:8,c=a?"":" ",f=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+c,E=r+1+".",C=s?this.styles.heading:this.styles.noop,S=await this.resolve(e.message,this.state,e,r),P=this.indent(e),I=P+e.scale.map((te,ie)=>h(ie===e.scaleIdx)).join(f),R=te=>te===e.scaleIdx?C(te):te,N=P+e.scale.map((te,ie)=>R(ie)).join(p),U=()=>[E,S].filter(Boolean).join(" "),W=()=>[U(),I,N," "].filter(Boolean).join(` -`);return s&&(I=this.styles.cyan(I),N=this.styles.cyan(N)),W()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(s,a)=>await this.renderChoice(s,a)),r=await Promise.all(e);return r.length||r.push(this.styles.danger("No matching choices")),r.join(` -`)}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.scaleIdx)).join(", "):""}async render(){let{submitted:e,size:r}=this.state,s=await this.prefix(),a=await this.separator(),n=await this.message(),c=[s,n,a].filter(Boolean).join(" ");this.state.prompt=c;let f=await this.header(),p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),C=await this.footer();(p||!h)&&(c+=" "+p),h&&!c.includes(h)&&(c+=" "+h),e&&!p&&!E&&this.multiple&&this.type!=="form"&&(c+=this.styles.danger(this.emptyError)),this.clear(r),this.write([c,f,E,C].filter(Boolean).join(` -`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function T1t(t,e={}){if(Array.isArray(e.scale))return e.scale.map(s=>({...s}));let r=[];for(let s=1;s{w1e.exports=ZG()});var S1e=L((snr,v1e)=>{"use strict";var R1t=$R(),u5=class extends R1t{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=s=>this.styles.primary.underline(s);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),s=await this.prefix(),a=await this.separator(),n=await this.message(),c=await this.format(),f=await this.error()||await this.hint(),p=await this.footer(),h=[s,n,a,c].join(" ");this.state.prompt=h,f&&!h.includes(f)&&(h+=" "+f),this.clear(e),this.write([r,h,p].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};v1e.exports=u5});var b1e=L((onr,D1e)=>{"use strict";var F1t=j0(),f5=class extends F1t{constructor(e){if(super(e),typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let s=await super.toChoices(e,r);if(s.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>s.length)throw new Error("Please specify the index of the correct answer from the list of choices");return s}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};D1e.exports=f5});var x1e=L(A5=>{"use strict";var P1e=$o(),Ts=(t,e)=>{P1e.defineExport(A5,t,e),P1e.defineExport(A5,t.toLowerCase(),e)};Ts("AutoComplete",()=>Nwe());Ts("BasicAuth",()=>jwe());Ts("Confirm",()=>Wwe());Ts("Editable",()=>Vwe());Ts("Form",()=>XR());Ts("Input",()=>ZG());Ts("Invisible",()=>e1e());Ts("List",()=>r1e());Ts("MultiSelect",()=>i1e());Ts("Numeral",()=>a1e());Ts("Password",()=>c1e());Ts("Scale",()=>A1e());Ts("Select",()=>j0());Ts("Snippet",()=>m1e());Ts("Sort",()=>E1e());Ts("Survey",()=>C1e());Ts("Text",()=>B1e());Ts("Toggle",()=>S1e());Ts("Quiz",()=>b1e())});var Q1e=L((lnr,k1e)=>{k1e.exports={ArrayPrompt:tS(),AuthPrompt:WG(),BooleanPrompt:$R(),NumberPrompt:r5(),StringPrompt:Bm()}});var nS=L((cnr,R1e)=>{"use strict";var T1e=Ie("assert"),h5=Ie("events"),q0=$o(),Zu=class extends h5{constructor(e,r){super(),this.options=q0.merge({},e),this.answers={...r}}register(e,r){if(q0.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}T1e.equal(typeof r,"function","expected a function");let s=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[s]=r:this.prompts[s]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(q0.merge({},this.options,r))}catch(s){return Promise.reject(s)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=q0.merge({},this.options,e),{type:s,name:a}=e,{set:n,get:c}=q0;if(typeof s=="function"&&(s=await s.call(this,e,this.answers)),!s)return this.answers[a];T1e(this.prompts[s],`Prompt "${s}" is not registered`);let f=new this.prompts[s](r),p=c(this.answers,a);f.state.answers=this.answers,f.enquirer=this,a&&f.on("submit",E=>{this.emit("answer",a,E,f),n(this.answers,a,E)});let h=f.emit.bind(f);return f.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",f,this),r.autofill&&p!=null?(f.value=f.input=p,r.autofill==="show"&&await f.submit()):p=f.value=await f.run(),p}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||nC()}static get prompts(){return x1e()}static get types(){return Q1e()}static get prompt(){let e=(r,...s)=>{let a=new this(...s),n=a.emit.bind(a);return a.emit=(...c)=>(e.emit(...c),n(...c)),a.prompt(r)};return q0.mixinEmitter(e,new h5),e}};q0.mixinEmitter(Zu,new h5);var p5=Zu.prompts;for(let t of Object.keys(p5)){let e=t.toLowerCase(),r=s=>new p5[t](s).run();Zu.prompt[e]=r,Zu[e]=r,Zu[t]||Reflect.defineProperty(Zu,t,{get:()=>p5[t]})}var rS=t=>{q0.defineExport(Zu,t,()=>Zu.types[t])};rS("ArrayPrompt");rS("AuthPrompt");rS("BooleanPrompt");rS("NumberPrompt");rS("StringPrompt");R1e.exports=Zu});var aS=L((Wnr,U1e)=>{var H1t=HR();function j1t(t,e,r){var s=t==null?void 0:H1t(t,e);return s===void 0?r:s}U1e.exports=j1t});var q1e=L((Znr,j1e)=>{function q1t(t,e){for(var r=-1,s=t==null?0:t.length;++r{var G1t=Vd(),W1t=Lk();function Y1t(t,e){return t&&G1t(e,W1t(e),t)}G1e.exports=Y1t});var V1e=L(($nr,Y1e)=>{var V1t=Vd(),K1t=jE();function J1t(t,e){return t&&V1t(e,K1t(e),t)}Y1e.exports=J1t});var J1e=L((eir,K1e)=>{var z1t=Vd(),Z1t=Qk();function X1t(t,e){return z1t(t,Z1t(t),e)}K1e.exports=X1t});var I5=L((tir,z1e)=>{var $1t=kk(),e2t=jk(),t2t=Qk(),r2t=k4(),n2t=Object.getOwnPropertySymbols,i2t=n2t?function(t){for(var e=[];t;)$1t(e,t2t(t)),t=e2t(t);return e}:r2t;z1e.exports=i2t});var X1e=L((rir,Z1e)=>{var s2t=Vd(),o2t=I5();function a2t(t,e){return s2t(t,o2t(t),e)}Z1e.exports=a2t});var C5=L((nir,$1e)=>{var l2t=x4(),c2t=I5(),u2t=jE();function f2t(t){return l2t(t,u2t,c2t)}$1e.exports=f2t});var t2e=L((iir,e2e)=>{var A2t=Object.prototype,p2t=A2t.hasOwnProperty;function h2t(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&p2t.call(t,"index")&&(r.index=t.index,r.input=t.input),r}e2e.exports=h2t});var n2e=L((sir,r2e)=>{var g2t=Uk();function d2t(t,e){var r=e?g2t(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}r2e.exports=d2t});var s2e=L((oir,i2e)=>{var m2t=/\w*$/;function y2t(t){var e=new t.constructor(t.source,m2t.exec(t));return e.lastIndex=t.lastIndex,e}i2e.exports=y2t});var u2e=L((air,c2e)=>{var o2e=Gd(),a2e=o2e?o2e.prototype:void 0,l2e=a2e?a2e.valueOf:void 0;function E2t(t){return l2e?Object(l2e.call(t)):{}}c2e.exports=E2t});var A2e=L((lir,f2e)=>{var I2t=Uk(),C2t=n2e(),w2t=s2e(),B2t=u2e(),v2t=G4(),S2t="[object Boolean]",D2t="[object Date]",b2t="[object Map]",P2t="[object Number]",x2t="[object RegExp]",k2t="[object Set]",Q2t="[object String]",T2t="[object Symbol]",R2t="[object ArrayBuffer]",F2t="[object DataView]",N2t="[object Float32Array]",O2t="[object Float64Array]",L2t="[object Int8Array]",M2t="[object Int16Array]",_2t="[object Int32Array]",U2t="[object Uint8Array]",H2t="[object Uint8ClampedArray]",j2t="[object Uint16Array]",q2t="[object Uint32Array]";function G2t(t,e,r){var s=t.constructor;switch(e){case R2t:return I2t(t);case S2t:case D2t:return new s(+t);case F2t:return C2t(t,r);case N2t:case O2t:case L2t:case M2t:case _2t:case U2t:case H2t:case j2t:case q2t:return v2t(t,r);case b2t:return new s;case P2t:case Q2t:return new s(t);case x2t:return w2t(t);case k2t:return new s;case T2t:return B2t(t)}}f2e.exports=G2t});var h2e=L((cir,p2e)=>{var W2t=FB(),Y2t=zf(),V2t="[object Map]";function K2t(t){return Y2t(t)&&W2t(t)==V2t}p2e.exports=K2t});var y2e=L((uir,m2e)=>{var J2t=h2e(),z2t=Rk(),g2e=Fk(),d2e=g2e&&g2e.isMap,Z2t=d2e?z2t(d2e):J2t;m2e.exports=Z2t});var I2e=L((fir,E2e)=>{var X2t=FB(),$2t=zf(),eBt="[object Set]";function tBt(t){return $2t(t)&&X2t(t)==eBt}E2e.exports=tBt});var v2e=L((Air,B2e)=>{var rBt=I2e(),nBt=Rk(),C2e=Fk(),w2e=C2e&&C2e.isSet,iBt=w2e?nBt(w2e):rBt;B2e.exports=iBt});var w5=L((pir,P2e)=>{var sBt=Pk(),oBt=q1e(),aBt=qk(),lBt=W1e(),cBt=V1e(),uBt=q4(),fBt=Hk(),ABt=J1e(),pBt=X1e(),hBt=F4(),gBt=C5(),dBt=FB(),mBt=t2e(),yBt=A2e(),EBt=W4(),IBt=xc(),CBt=xB(),wBt=y2e(),BBt=Wl(),vBt=v2e(),SBt=Lk(),DBt=jE(),bBt=1,PBt=2,xBt=4,S2e="[object Arguments]",kBt="[object Array]",QBt="[object Boolean]",TBt="[object Date]",RBt="[object Error]",D2e="[object Function]",FBt="[object GeneratorFunction]",NBt="[object Map]",OBt="[object Number]",b2e="[object Object]",LBt="[object RegExp]",MBt="[object Set]",_Bt="[object String]",UBt="[object Symbol]",HBt="[object WeakMap]",jBt="[object ArrayBuffer]",qBt="[object DataView]",GBt="[object Float32Array]",WBt="[object Float64Array]",YBt="[object Int8Array]",VBt="[object Int16Array]",KBt="[object Int32Array]",JBt="[object Uint8Array]",zBt="[object Uint8ClampedArray]",ZBt="[object Uint16Array]",XBt="[object Uint32Array]",Ci={};Ci[S2e]=Ci[kBt]=Ci[jBt]=Ci[qBt]=Ci[QBt]=Ci[TBt]=Ci[GBt]=Ci[WBt]=Ci[YBt]=Ci[VBt]=Ci[KBt]=Ci[NBt]=Ci[OBt]=Ci[b2e]=Ci[LBt]=Ci[MBt]=Ci[_Bt]=Ci[UBt]=Ci[JBt]=Ci[zBt]=Ci[ZBt]=Ci[XBt]=!0;Ci[RBt]=Ci[D2e]=Ci[HBt]=!1;function rF(t,e,r,s,a,n){var c,f=e&bBt,p=e&PBt,h=e&xBt;if(r&&(c=a?r(t,s,a,n):r(t)),c!==void 0)return c;if(!BBt(t))return t;var E=IBt(t);if(E){if(c=mBt(t),!f)return fBt(t,c)}else{var C=dBt(t),S=C==D2e||C==FBt;if(CBt(t))return uBt(t,f);if(C==b2e||C==S2e||S&&!a){if(c=p||S?{}:EBt(t),!f)return p?pBt(t,cBt(c,t)):ABt(t,lBt(c,t))}else{if(!Ci[C])return a?t:{};c=yBt(t,C,f)}}n||(n=new sBt);var P=n.get(t);if(P)return P;n.set(t,c),vBt(t)?t.forEach(function(N){c.add(rF(N,e,r,N,t,n))}):wBt(t)&&t.forEach(function(N,U){c.set(U,rF(N,e,r,U,t,n))});var I=h?p?gBt:hBt:p?DBt:SBt,R=E?void 0:I(t);return oBt(R||t,function(N,U){R&&(U=N,N=t[U]),aBt(c,U,rF(N,e,r,U,t,n))}),c}P2e.exports=rF});var B5=L((hir,x2e)=>{var $Bt=w5(),evt=1,tvt=4;function rvt(t){return $Bt(t,evt|tvt)}x2e.exports=rvt});var v5=L((gir,k2e)=>{var nvt=hG();function ivt(t,e,r){return t==null?t:nvt(t,e,r)}k2e.exports=ivt});var N2e=L((Cir,F2e)=>{var svt=Object.prototype,ovt=svt.hasOwnProperty;function avt(t,e){return t!=null&&ovt.call(t,e)}F2e.exports=avt});var L2e=L((wir,O2e)=>{var lvt=N2e(),cvt=gG();function uvt(t,e){return t!=null&&cvt(t,e,lvt)}O2e.exports=uvt});var _2e=L((Bir,M2e)=>{function fvt(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}M2e.exports=fvt});var H2e=L((vir,U2e)=>{var Avt=HR(),pvt=s6();function hvt(t,e){return e.length<2?t:Avt(t,pvt(e,0,-1))}U2e.exports=hvt});var D5=L((Sir,j2e)=>{var gvt=Im(),dvt=_2e(),mvt=H2e(),yvt=zI();function Evt(t,e){return e=gvt(e,t),t=mvt(t,e),t==null||delete t[yvt(dvt(e))]}j2e.exports=Evt});var b5=L((Dir,q2e)=>{var Ivt=D5();function Cvt(t,e){return t==null?!0:Ivt(t,e)}q2e.exports=Cvt});var K2e=L((tsr,vvt)=>{vvt.exports={name:"@yarnpkg/cli",version:"4.9.2",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"workspace:^","@yarnpkg/plugin-jsr":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^4.0.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-jsr","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"git+https://github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var O5=L((Flr,oBe)=>{"use strict";oBe.exports=function(e,r){r===!0&&(r=0);var s="";if(typeof e=="string")try{s=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(s=e.protocol);var a=s.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var lBe=L((Nlr,aBe)=>{"use strict";var Gvt=O5();function Wvt(t){var e={protocols:[],protocol:null,port:null,resource:"",host:"",user:"",password:"",pathname:"",hash:"",search:"",href:t,query:{},parse_failed:!1};try{var r=new URL(t);e.protocols=Gvt(r),e.protocol=e.protocols[0],e.port=r.port,e.resource=r.hostname,e.host=r.host,e.user=r.username||"",e.password=r.password||"",e.pathname=r.pathname,e.hash=r.hash.slice(1),e.search=r.search.slice(1),e.href=r.href,e.query=Object.fromEntries(r.searchParams)}catch{e.protocols=["file"],e.protocol=e.protocols[0],e.port="",e.resource="",e.user="",e.pathname="",e.hash="",e.search="",e.href=t,e.query={},e.parse_failed=!0}return e}aBe.exports=Wvt});var fBe=L((Olr,uBe)=>{"use strict";var Yvt=lBe();function Vvt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var Kvt=Vvt(Yvt),Jvt="text/plain",zvt="us-ascii",cBe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),Zvt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:s,data:a,hash:n}=r.groups,c=s.split(";");n=e?"":n;let f=!1;c[c.length-1]==="base64"&&(c.pop(),f=!0);let p=(c.shift()||"").toLowerCase(),E=[...c.map(C=>{let[S,P=""]=C.split("=").map(I=>I.trim());return S==="charset"&&(P=P.toLowerCase(),P===zvt)?"":`${S}${P?`=${P}`:""}`}).filter(Boolean)];return f&&E.push("base64"),(E.length>0||p&&p!==Jvt)&&E.unshift(p),`data:${E.join(";")},${f?a.trim():a}${n?`#${n}`:""}`};function Xvt(t,e){if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},t=t.trim(),/^data:/i.test(t))return Zvt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let c=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,f=0,p="";for(;;){let E=c.exec(a.pathname);if(!E)break;let C=E[0],S=E.index,P=a.pathname.slice(f,S);p+=P.replace(/\/{2,}/g,"/"),p+=C,f=S+C.length}let h=a.pathname.slice(f,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let c=a.pathname.split("/"),f=c[c.length-1];cBe(f,e.removeDirectoryIndex)&&(c=c.slice(0,-1),a.pathname=c.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let c of[...a.searchParams.keys()])cBe(c,e.removeQueryParameters)&&a.searchParams.delete(c);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var L5=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,s=n=>{let c=new Error(n);throw c.subject_url=t,c};(typeof t!="string"||!t.trim())&&s("Invalid url."),t.length>L5.MAX_INPUT_LENGTH&&s("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=Xvt(t,e));let a=Kvt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):s("URL parsing failed.")}return a};L5.MAX_INPUT_LENGTH=2048;uBe.exports=L5});var hBe=L((Llr,pBe)=>{"use strict";var $vt=O5();function ABe(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=$vt(t);if(t=t.substring(t.indexOf("://")+3),ABe(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var eSt=fBe(),gBe=hBe();function tSt(t){var e=eSt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),gBe(e.protocols)||e.protocols.length===0&&gBe(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}dBe.exports=tSt});var EBe=L((_lr,yBe)=>{"use strict";var rSt=mBe();function M5(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=/^([a-z\d-]{1,39})\/([-\.\w]{1,100})$/i;e.test(t)&&(t="https://github.com/"+t);var r=rSt(t),s=r.resource.split("."),a=null;switch(r.toString=function(N){return M5.stringify(this,N)},r.source=s.length>2?s.slice(1-s.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=s[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var c=a.indexOf("-",2),f=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),C=a.indexOf("raw",2),S=a.indexOf("edit",2);n=c>0?c-1:f>0?f-1:p>0?p-1:h>0?h-1:E>0?E-1:C>0?C-1:S>0?S-1:n,r.owner=a.slice(0,n).join("/"),r.name=a[n],h&&(r.commit=a[n+2])}r.ref="",r.filepathtype="",r.filepath="";var P=a.length>n&&a[n+1]==="-"?n+1:n;a.length>P+2&&["raw","src","blob","tree","edit"].indexOf(a[P+1])>=0&&(r.filepathtype=a[P+1],r.ref=a[P+2],a.length>P+3&&(r.filepath=a.slice(P+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var I=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,R=I.exec(r.pathname);return R!=null&&(r.source="bitbucket-server",R[1]==="users"?r.owner="~"+R[2]:r.owner=R[2],r.organization=r.owner,r.name=R[3],a=R[4].split("/"),a.length>1&&(["raw","browse"].indexOf(a[1])>=0?(r.filepathtype=a[1],a.length>2&&(r.filepath=a.slice(2).join("/"))):a[1]==="commits"&&a.length>2&&(r.commit=a[2])),r.full_name=r.owner+"/"+r.name,r.query.at?r.ref=r.query.at:r.ref=""),r}M5.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",s=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+s+"@"+t.resource+r+"/"+t.full_name+a:s+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+s+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?nSt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+iSt(t)+a;default:return t.href}};function nSt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function iSt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}yBe.exports=M5});var NBe=L((yur,FBe)=>{var gSt=QT(),dSt=Hk(),mSt=xc(),ySt=oI(),ESt=pG(),ISt=zI(),CSt=bv();function wSt(t){return mSt(t)?gSt(t,ISt):ySt(t)?[t]:dSt(ESt(CSt(t)))}FBe.exports=wSt});function DSt(t,e){return e===1&&SSt.has(t[0])}function hS(t){let e=Array.isArray(t)?t:(0,MBe.default)(t);return e.map((s,a)=>BSt.test(s)?`[${s}]`:vSt.test(s)&&!DSt(e,a)?`.${s}`:`[${JSON.stringify(s)}]`).join("").replace(/^\./,"")}function bSt(t,e){let r=[];if(e.methodName!==null&&r.push(he.pretty(t,e.methodName,he.Type.CODE)),e.file!==null){let s=[];s.push(he.pretty(t,e.file,he.Type.PATH)),e.line!==null&&(s.push(he.pretty(t,e.line,he.Type.NUMBER)),e.column!==null&&s.push(he.pretty(t,e.column,he.Type.NUMBER))),r.push(`(${s.join(he.pretty(t,":","grey"))})`)}return r.join(" ")}function oF(t,{manifestUpdates:e,reportedErrors:r},{fix:s}={}){let a=new Map,n=new Map,c=[...r.keys()].map(f=>[f,new Map]);for(let[f,p]of[...c,...e]){let h=r.get(f)?.map(P=>({text:P,fixable:!1}))??[],E=!1,C=t.getWorkspaceByCwd(f),S=C.manifest.exportTo({});for(let[P,I]of p){if(I.size>1){let R=[...I].map(([N,U])=>{let W=he.pretty(t.configuration,N,he.Type.INSPECT),te=U.size>0?bSt(t.configuration,U.values().next().value):null;return te!==null?` -${W} at ${te}`:` -${W}`}).join("");h.push({text:`Conflict detected in constraint targeting ${he.pretty(t.configuration,P,he.Type.CODE)}; conflicting values are:${R}`,fixable:!1})}else{let[[R]]=I,N=(0,OBe.default)(S,P);if(JSON.stringify(N)===JSON.stringify(R))continue;if(!s){let U=typeof N>"u"?`Missing field ${he.pretty(t.configuration,P,he.Type.CODE)}; expected ${he.pretty(t.configuration,R,he.Type.INSPECT)}`:typeof R>"u"?`Extraneous field ${he.pretty(t.configuration,P,he.Type.CODE)} currently set to ${he.pretty(t.configuration,N,he.Type.INSPECT)}`:`Invalid field ${he.pretty(t.configuration,P,he.Type.CODE)}; expected ${he.pretty(t.configuration,R,he.Type.INSPECT)}, found ${he.pretty(t.configuration,N,he.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof R>"u"?(0,_Be.default)(S,P):(0,LBe.default)(S,P,R),E=!0}E&&a.set(C,S)}h.length>0&&n.set(C,h)}return{changedWorkspaces:a,remainingErrors:n}}function UBe(t,{configuration:e}){let r={children:[]};for(let[s,a]of t){let n=[];for(let f of a){let p=f.text.split(/\n/);f.fixable&&(p[0]=`${he.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:he.tuple(he.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:he.tuple(he.Type.NO_HINT,h)}))})}let c={value:he.tuple(he.Type.LOCATOR,s.anchoredLocator),children:je.sortMap(n,f=>f.value[1])};r.children.push(c)}return r.children=je.sortMap(r.children,s=>s.value[1]),r}var OBe,LBe,MBe,_Be,WC,BSt,vSt,SSt,gS=Ct(()=>{Ve();OBe=et(aS()),LBe=et(v5()),MBe=et(NBe()),_Be=et(b5()),WC=class{constructor(e){this.indexedFields=e;this.items=[];this.indexes={};this.clear()}clear(){this.items=[];for(let e of this.indexedFields)this.indexes[e]=new Map}insert(e){this.items.push(e);for(let r of this.indexedFields){let s=Object.hasOwn(e,r)?e[r]:void 0;if(typeof s>"u")continue;je.getArrayWithDefault(this.indexes[r],s).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let s=[],a;for(let[c,f]of r){let p=c,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){s.push([p,f]);continue}let E=new Set(h.get(f)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let C of a)E.has(C)||a.delete(C);if(a.size===0)break}let n=[...a??[]];return s.length>0&&(n=n.filter(c=>{for(let[f,p]of s)if(!(typeof p<"u"?Object.hasOwn(c,f)&&c[f]===p:Object.hasOwn(c,f)===!1))return!1;return!0})),n}},BSt=/^[0-9]+$/,vSt=/^[a-zA-Z0-9_]+$/,SSt=new Set(["scripts",...Ht.allDependencies])});var HBe=L((kur,X5)=>{var PSt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(s,a,n){var c=n.args[0],f=n.args[1];if(!t.type.is_variable(f)&&!t.type.is_integer(f))s.throw_error(t.error.type("integer",f,n.indicator));else if(t.type.is_integer(f)&&f.value<0)s.throw_error(t.error.domain("not_less_than_zero",f,n.indicator));else{var p=new t.type.Term("length",[c,new t.type.Num(0,!1),f]);t.type.is_integer(f)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),s.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(s,a,n){var c=n.args[0],f=n.args[1],p=n.args[2];if(t.type.is_variable(f))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(f))s.throw_error(t.error.type("integer",f,n.indicator));else if(f.value<0)s.throw_error(t.error.domain("not_less_than_zero",f,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))s.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;C--)E[C].equals(E[C-1])&&E.splice(C,1);for(var S=new t.type.Term("[]"),C=E.length-1;C>=0;C--)S=new t.type.Term(".",[E[C],S]);s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[S,f])),a.substitution,a)])}}},"msort/2":function(s,a,n){var c=n.args[0],f=n.args[1];if(t.type.is_variable(c))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(f)&&!t.type.is_fully_list(f))s.throw_error(t.error.type("list",f,n.indicator));else{for(var p=[],h=c;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))s.throw_error(t.error.type("list",c,n.indicator));else{for(var E=p.sort(t.compare),C=new t.type.Term("[]"),S=E.length-1;S>=0;S--)C=new t.type.Term(".",[E[S],C]);s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[C,f])),a.substitution,a)])}}},"keysort/2":function(s,a,n){var c=n.args[0],f=n.args[1];if(t.type.is_variable(c))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(f)&&!t.type.is_fully_list(f))s.throw_error(t.error.type("list",f,n.indicator));else{for(var p=[],h,E=c;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){s.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){s.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),E=E.args[1]}if(t.type.is_variable(E))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))s.throw_error(t.error.type("list",c,n.indicator));else{for(var C=p.sort(t.compare),S=new t.type.Term("[]"),P=C.length-1;P>=0;P--)S=new t.type.Term(".",[new t.type.Term("-",[C[P],C[P].pair]),S]),delete C[P].pair;s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[S,f])),a.substitution,a)])}}},"take/3":function(s,a,n){var c=n.args[0],f=n.args[1],p=n.args[2];if(t.type.is_variable(f)||t.type.is_variable(c))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(f))s.throw_error(t.error.type("list",f,n.indicator));else if(!t.type.is_integer(c))s.throw_error(t.error.type("integer",c,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))s.throw_error(t.error.type("list",p,n.indicator));else{for(var h=c.value,E=[],C=f;h>0&&C.indicator==="./2";)E.push(C.args[0]),C=C.args[1],h--;if(h===0){for(var S=new t.type.Term("[]"),h=E.length-1;h>=0;h--)S=new t.type.Term(".",[E[h],S]);s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[S,p])),a.substitution,a)])}}},"drop/3":function(s,a,n){var c=n.args[0],f=n.args[1],p=n.args[2];if(t.type.is_variable(f)||t.type.is_variable(c))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(f))s.throw_error(t.error.type("list",f,n.indicator));else if(!t.type.is_integer(c))s.throw_error(t.error.type("integer",c,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))s.throw_error(t.error.type("list",p,n.indicator));else{for(var h=c.value,E=[],C=f;h>0&&C.indicator==="./2";)E.push(C.args[0]),C=C.args[1],h--;h===0&&s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[C,p])),a.substitution,a)])}},"reverse/2":function(s,a,n){var c=n.args[0],f=n.args[1],p=t.type.is_instantiated_list(c),h=t.type.is_instantiated_list(f);if(t.type.is_variable(c)&&t.type.is_variable(f))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(c)&&!t.type.is_fully_list(c))s.throw_error(t.error.type("list",c,n.indicator));else if(!t.type.is_variable(f)&&!t.type.is_fully_list(f))s.throw_error(t.error.type("list",f,n.indicator));else if(!p&&!h)s.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?c:f,C=new t.type.Term("[]",[]);E.indicator==="./2";)C=new t.type.Term(".",[E.args[0],C]),E=E.args[1];s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[C,p?f:c])),a.substitution,a)])}},"list_to_set/2":function(s,a,n){var c=n.args[0],f=n.args[1];if(t.type.is_variable(c))s.throw_error(t.error.instantiation(n.indicator));else{for(var p=c,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))s.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")s.throw_error(t.error.type("list",c,n.indicator));else{for(var E=[],C=new t.type.Term("[]",[]),S,P=0;P=0;P--)C=new t.type.Term(".",[E[P],C]);s.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[f,C])),a.substitution,a)])}}}}},r=["append/2","append/3","member/2","permutation/2","maplist/2","maplist/3","maplist/4","maplist/5","maplist/6","maplist/7","maplist/8","include/3","exclude/3","foldl/4","sum_list/2","max_list/2","min_list/2","prod_list/2","last/2","prefix/2","nth0/3","nth1/3","nth0/4","nth1/4","length/2","replicate/3","select/3","sort/2","msort/2","keysort/2","take/3","drop/3","reverse/2","list_to_set/2"];typeof X5<"u"?X5.exports=function(s){t=s,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(PSt)});var rve=L($r=>{"use strict";var Dm=process.platform==="win32",$5="aes-256-cbc",xSt="sha256",GBe="The current environment doesn't support interactive reading from TTY.",si=Ie("fs"),jBe=process.binding("tty_wrap").TTY,t9=Ie("child_process"),Y0=Ie("path"),r9={prompt:"> ",hideEchoBack:!1,mask:"*",limit:[],limitMessage:"Input another, please.$<( [)limit(])>",defaultInput:"",trueValue:[],falseValue:[],caseSensitive:!1,keepWhitespace:!1,encoding:"utf8",bufferSize:1024,print:void 0,history:!0,cd:!1,phContent:void 0,preCheck:void 0},$p="none",$u,VC,qBe=!1,W0,lF,e9,kSt=0,a9="",Sm=[],cF,WBe=!1,n9=!1,dS=!1;function YBe(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(s){return"#"+s.charCodeAt(0)+";"})}return lF.concat(function(r){var s=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&s.push("--"+a):r[a]==="string"&&t[a]&&s.push("--"+a,e(t[a]))}),s}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function QSt(t,e){function r(U){var W,te="",ie;for(e9=e9||Ie("os").tmpdir();;){W=Y0.join(e9,U+te);try{ie=si.openSync(W,"wx")}catch(Ae){if(Ae.code==="EEXIST"){te++;continue}else throw Ae}si.closeSync(ie);break}return W}var s,a,n,c={},f,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),C=r("readline-sync.exit"),S=r("readline-sync.done"),P=Ie("crypto"),I,R,N;I=P.createHash(xSt),I.update(""+process.pid+kSt+++Math.random()),N=I.digest("hex"),R=P.createDecipher($5,N),s=YBe(t),Dm?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+W0+"%Q%"+s.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+C+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+$5+"%Q% %Q%"+N+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+S+"%Q%"]):(a="/bin/sh",n=["-c",'("'+W0+'"'+s.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+C+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+$5+'" "'+N+'" >"'+h+'"; echo 1 >"'+S+'"']),dS&&dS("_execFileSync",s);try{t9.spawn(a,n,e)}catch(U){c.error=new Error(U.message),c.error.method="_execFileSync - spawn",c.error.program=a,c.error.args=n}for(;si.readFileSync(S,{encoding:t.encoding}).trim()!=="1";);return(f=si.readFileSync(C,{encoding:t.encoding}).trim())==="0"?c.input=R.update(si.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+R.final(t.encoding):(p=si.readFileSync(E,{encoding:t.encoding}).trim(),c.error=new Error(GBe+(p?` -`+p:"")),c.error.method="_execFileSync",c.error.program=a,c.error.args=n,c.error.extMessage=p,c.error.exitCode=+f),si.unlinkSync(h),si.unlinkSync(E),si.unlinkSync(C),si.unlinkSync(S),c}function TSt(t){var e,r={},s,a={env:process.env,encoding:t.encoding};if(W0||(Dm?process.env.PSModulePath?(W0="powershell.exe",lF=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(W0="cscript.exe",lF=["//nologo",__dirname+"\\read.cs.js"]):(W0="/bin/sh",lF=[__dirname+"/read.sh"])),Dm&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),t9.execFileSync){e=YBe(t),dS&&dS("execFileSync",e);try{r.input=t9.execFileSync(W0,e,a)}catch(n){s=n.stderr?(n.stderr+"").trim():"",r.error=new Error(GBe+(s?` -`+s:"")),r.error.method="execFileSync",r.error.program=W0,r.error.args=e,r.error.extMessage=s,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=QSt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function i9(t){var e="",r=t.display,s=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=TSt(t);if(n.error)throw n.error;return n.input}return n9&&n9(t),function(){var n,c,f;function p(){return n||(n=process.binding("fs"),c=process.binding("constants")),n}if(typeof $p=="string")if($p=null,Dm){if(f=function(h){var E=h.replace(/^\D+/,"").split("."),C=0;return(E[0]=+E[0])&&(C+=E[0]*1e4),(E[1]=+E[1])&&(C+=E[1]*100),(E[2]=+E[2])&&(C+=E[2]),C}(process.version),!(f>=20302&&f<40204||f>=5e4&&f<50100||f>=50600&&f<60200)&&process.stdin.isTTY)process.stdin.pause(),$p=process.stdin.fd,VC=process.stdin._handle;else try{$p=p().open("CONIN$",c.O_RDWR,parseInt("0666",8)),VC=new jBe($p,!0)}catch{}if(process.stdout.isTTY)$u=process.stdout.fd;else{try{$u=si.openSync("\\\\.\\CON","w")}catch{}if(typeof $u!="number")try{$u=p().open("CONOUT$",c.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{$p=si.openSync("/dev/tty","r"),VC=process.stdin._handle}catch{}}else try{$p=si.openSync("/dev/tty","r"),VC=new jBe($p,!1)}catch{}if(process.stdout.isTTY)$u=process.stdout.fd;else try{$u=si.openSync("/dev/tty","w")}catch{}}}(),function(){var n,c,f=!t.hideEchoBack&&!t.keyIn,p,h,E,C,S;cF="";function P(I){return I===qBe?!0:VC.setRawMode(I)!==0?!1:(qBe=I,!0)}if(WBe||!VC||typeof $u!="number"&&(t.display||!f)){e=a();return}if(t.display&&(si.writeSync($u,t.display),t.display=""),!t.displayOnly){if(!P(!f)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(c=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=si.readSync($p,p,0,h)}catch(I){if(I.code!=="EOF"){P(!1),e+=a();return}}if(E>0?(C=p.toString(t.encoding,0,E),cF+=C):(C=` -`,cF+="\0"),C&&typeof(S=(C.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(C=S,n=!0),C&&(C=C.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),C&&c&&(C=C.replace(c,"")),C&&(f||(t.hideEchoBack?t.mask&&si.writeSync($u,new Array(C.length+1).join(t.mask)):si.writeSync($u,C)),e+=C),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!f&&!s&&si.writeSync($u,` -`),P(!1)}}(),t.print&&!s&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` -`),t.encoding),t.displayOnly?"":a9=t.keepWhitespace||t.keyIn?e:e.trim()}function RSt(t,e){var r=[];function s(a){a!=null&&(Array.isArray(a)?a.forEach(s):(!e||e(a))&&r.push(a))}return s(t),r}function l9(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Js(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(r9),t.unshift(r9))),t.reduce(function(s,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var c;if(a.hasOwnProperty(n))switch(c=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":c=c!=null?c+"":"",c&&n!=="limitMessage"&&(c=c.replace(/[\r\n]/g,"")),s[n]=c;break;case"bufferSize":!isNaN(c=parseInt(c,10))&&typeof c=="number"&&(s[n]=c);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":s[n]=!!c;break;case"limit":case"trueValue":case"falseValue":s[n]=RSt(c,function(f){var p=typeof f;return p==="string"||p==="number"||p==="function"||f instanceof RegExp}).map(function(f){return typeof f=="string"?f.replace(/[\r\n]/g,""):f});break;case"print":case"phContent":case"preCheck":s[n]=typeof c=="function"?c:void 0;break;case"prompt":case"display":s[n]=c??"";break}})),s},{})}function s9(t,e,r){return e.some(function(s){var a=typeof s;return a==="string"?r?t===s:t.toLowerCase()===s.toLowerCase():a==="number"?parseFloat(t)===s:a==="function"?s(t):s instanceof RegExp?s.test(t):!1})}function c9(t,e){var r=Y0.normalize(Dm?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=Y0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+l9(r)+"(?=\\/|\\\\|$)",Dm?"i":""),"~")}function KC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",s=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(c,f,p,h,E,C){var S;return f||typeof(S=e(E))!="string"?p:S?(h||"")+S+(C||""):""}return t.replace(s,n).replace(a,n)}function VBe(t,e,r){var s,a=[],n=-1,c=0,f="",p;function h(E,C){return C.length>3?(E.push(C[0]+"..."+C[C.length-1]),p=!0):C.length&&(E=E.concat(C)),E}return s=t.reduce(function(E,C){return E.concat((C+"").split(""))},[]).reduce(function(E,C){var S,P;return e||(C=C.toLowerCase()),S=/^\d$/.test(C)?1:/^[A-Z]$/.test(C)?2:/^[a-z]$/.test(C)?3:0,r&&S===0?f+=C:(P=C.charCodeAt(0),S&&S===n&&P===c+1?a.push(C):(E=h(E,a),a=[C],n=S),c=P),E},[]),s=h(s,a),f&&(s.push(f),p=!0),{values:s,suppressed:p}}function KBe(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function JBe(t,e){var r,s,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":s=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=VBe(s,e.caseSensitive),s=a.values):s=s.filter(function(c){var f=typeof c;return f==="string"||f==="number"}),r=KBe(s,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=a9;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=Y0.basename(r):t==="cwdHome"&&(r=c9(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(c){return c.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=Sm[Sm.length-n]||"")}return r}function zBe(t){var e=/^(.)-(.)$/.exec(t),r="",s,a,n,c;if(!e)return null;for(s=e[1].charCodeAt(0),a=e[2].charCodeAt(0),c=s -And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(P){return P==="charlist"?r.text:P==="length"?s+"..."+a:null}}),c,f,p,h,E,C,S;for(e=e||{},c=KC(e.charlist?e.charlist+"":"$",zBe),(isNaN(s=parseInt(e.min,10))||typeof s!="number")&&(s=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+l9(c)+"]{"+s+","+a+"}$"),r=VBe([c],n.caseSensitive,!0),r.text=KBe(r.values,r.suppressed),f=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),E=n.limitMessage;!S;)n.limit=h,n.limitMessage=E,C=$r.question(t,n),n.limit=[C,""],n.limitMessage=p,S=$r.question(f,n);return C};function $Be(t,e,r){var s;function a(n){return s=r(n),!isNaN(s)&&typeof s=="number"}return $r.question(t,Js({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),s}$r.questionInt=function(t,e){return $Be(t,e,function(r){return parseInt(r,10)})};$r.questionFloat=function(t,e){return $Be(t,e,parseFloat)};$r.questionPath=function(t,e){var r,s="",a=Js({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var c,f,p;n=c9(n,!0),s="";function h(E){E.split(/\/|\\/).reduce(function(C,S){var P=Y0.resolve(C+=S+Y0.sep);if(!si.existsSync(P))si.mkdirSync(P);else if(!si.statSync(P).isDirectory())throw new Error("Non directory already exists: "+P);return C},"")}try{if(c=si.existsSync(n),r=c?si.realpathSync(n):Y0.resolve(n),!e.hasOwnProperty("exists")&&!c||typeof e.exists=="boolean"&&e.exists!==c)return s=(c?"Already exists":"No such file or directory")+": "+r,!1;if(!c&&e.create&&(e.isDirectory?h(r):(h(Y0.dirname(r)),si.closeSync(si.openSync(r,"w"))),r=si.realpathSync(r)),c&&(e.min||e.max||e.isFile||e.isDirectory)){if(f=si.statSync(r),e.isFile&&!f.isFile())return s="Not file: "+r,!1;if(e.isDirectory&&!f.isDirectory())return s="Not directory: "+r,!1;if(e.min&&f.size<+e.min||e.max&&f.size>+e.max)return s="Size "+f.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(s=p),!1}catch(E){return s=E+"",!1}return!0},phContent:function(n){return n==="error"?s:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),$r.question(t,a),r};function eve(t,e){var r={},s={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(s[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=o9(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&s.hasOwnProperty(n)?s[n].apply(a,r.args.slice(1)):s.hasOwnProperty("_")?s._.apply(a,r.args):null,{res:a,forceNext:!1}},s.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),s.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=o9(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}$r.promptCL=function(t,e){var r=Js({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),s=eve(t,r);return r.limit=s.limit,r.preCheck=s.preCheck,$r.prompt(r),s.args};$r.promptLoop=function(t,e){for(var r=Js({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t($r.prompt(r)););};$r.promptCLLoop=function(t,e){var r=Js({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),s=eve(t,r);for(r.limit=s.limit,r.preCheck=s.preCheck;$r.prompt(r),!s.hRes;);};$r.promptSimShell=function(t){return $r.prompt(Js({hideEchoBack:!1,history:!0},t,{prompt:function(){return Dm?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function tve(t,e,r){var s;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),s=$r.keyIn(t,Js(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof s=="boolean"?s:""}$r.keyInYN=function(t,e){return tve(t,e)};$r.keyInYNStrict=function(t,e){return tve(t,e,"yn")};$r.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),$r.keyIn(t,Js({limit:null},e,{hideEchoBack:!0,mask:""}))};$r.keyInSelect=function(t,e,r){var s=Js({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},c=49,f=` -`;if(!Array.isArray(t)||!t.length||t.length>35)throw"`items` must be Array (max length: 35).";return t.forEach(function(p,h){var E=String.fromCharCode(c);a+=E,n[E]=h,f+="["+E+"] "+(p+"").trim()+` -`,c=c===57?97:c+1}),(!r||r.cancel!==!1)&&(a+="0",n[0]=-1,f+="[0] "+(r&&r.cancel!=null&&typeof r.cancel!="boolean"?(r.cancel+"").trim():"CANCEL")+` -`),s.limit=a,f+=` -`,e==null&&(e="Choose one from list: "),(e+="")&&((!r||r.guide!==!1)&&(e=e.replace(/\s*:?\s*$/,"")+" [$]: "),f+=e),n[$r.keyIn(f,s).toLowerCase()]};$r.getRawInput=function(){return cF};function mS(t,e){var r;return e.length&&(r={},r[t]=e[0]),$r.setDefaultOptions(r)[t]}$r.setPrint=function(){return mS("print",arguments)};$r.setPrompt=function(){return mS("prompt",arguments)};$r.setEncoding=function(){return mS("encoding",arguments)};$r.setMask=function(){return mS("mask",arguments)};$r.setBufferSize=function(){return mS("bufferSize",arguments)}});var u9=L((Tur,tc)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,b,y){var F=tau_file_system.files[w];if(!F){if(y==="read")return null;F={path:w,text:"",type:b,get:function(z,Z){return Z===this.text.length||Z>this.text.length?"end_of_file":this.text.substring(Z,Z+z)},put:function(z,Z){return Z==="end_of_file"?(this.text+=z,!0):Z==="past_end_of_file"?null:(this.text=this.text.substring(0,Z)+z+this.text.substring(Z+z.length),!0)},get_byte:function(z){if(z==="end_of_stream")return-1;var Z=Math.floor(z/2);if(this.text.length<=Z)return-1;var $=n(this.text[Math.floor(z/2)],0);return z%2===0?$&255:$/256>>>0},put_byte:function(z,Z){var $=Z==="end_of_stream"?this.text.length:Math.floor(Z/2);if(this.text.length<$)return null;var oe=this.text.length===$?-1:n(this.text[Math.floor(Z/2)],0);return Z%2===0?(oe=oe/256>>>0,oe=(oe&255)<<8|z&255):(oe=oe&255,oe=(z&255)<<8|oe&255),this.text.length===$?this.text+=c(oe):this.text=this.text.substring(0,$)+c(oe)+this.text.substring($+1),!0},flush:function(){return!0},close:function(){var z=tau_file_system.files[this.path];return z?!0:null}},tau_file_system.files[w]=F}return y==="write"&&(F.text=""),F}},tau_user_input={buffer:"",get:function(w,b){for(var y;tau_user_input.buffer.length\?\@\^\~\\]+|'(?:[^']*?(?:\\(?:x?\d+)?\\)*(?:'')*(?:\\')*)*')/,number:/^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abfnrtv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/,string:/^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/,l_brace:/^(?:\[)/,r_brace:/^(?:\])/,l_bracket:/^(?:\{)/,r_bracket:/^(?:\})/,bar:/^(?:\|)/,l_paren:/^(?:\()/,r_paren:/^(?:\))/};function N(w,b){return w.get_flag("char_conversion").id==="on"?b.replace(/./g,function(y){return w.get_char_conversion(y)}):b}function U(w){this.thread=w,this.text="",this.tokens=[]}U.prototype.set_last_tokens=function(w){return this.tokens=w},U.prototype.new_text=function(w){this.text=w,this.tokens=[]},U.prototype.get_tokens=function(w){var b,y=0,F=0,z=0,Z=[],$=!1;if(w){var oe=this.tokens[w-1];y=oe.len,b=N(this.thread,this.text.substr(oe.len)),F=oe.line,z=oe.start}else b=this.text;if(/^\s*$/.test(b))return null;for(;b!=="";){var xe=[],Te=!1;if(/^\n/.exec(b)!==null){F++,z=0,y++,b=b.replace(/\n/,""),$=!0;continue}for(var lt in R)if(R.hasOwnProperty(lt)){var It=R[lt].exec(b);It&&xe.push({value:It[0],name:lt,matches:It})}if(!xe.length)return this.set_last_tokens([{value:b,matches:[],name:"lexical",line:F,start:z}]);var oe=r(xe,function(Pr,Ir){return Pr.value.length>=Ir.value.length?Pr:Ir});switch(oe.start=z,oe.line=F,b=b.replace(oe.value,""),z+=oe.value.length,y+=oe.value.length,oe.name){case"atom":oe.raw=oe.value,oe.value.charAt(0)==="'"&&(oe.value=S(oe.value.substr(1,oe.value.length-2),"'"),oe.value===null&&(oe.name="lexical",oe.value="unknown escape sequence"));break;case"number":oe.float=oe.value.substring(0,2)!=="0x"&&oe.value.match(/[.eE]/)!==null&&oe.value!=="0'.",oe.value=I(oe.value),oe.blank=Te;break;case"string":var qt=oe.value.charAt(0);oe.value=S(oe.value.substr(1,oe.value.length-2),qt),oe.value===null&&(oe.name="lexical",oe.value="unknown escape sequence");break;case"whitespace":var ir=Z[Z.length-1];ir&&(ir.space=!0),Te=!0;continue;case"r_bracket":Z.length>0&&Z[Z.length-1].name==="l_bracket"&&(oe=Z.pop(),oe.name="atom",oe.value="{}",oe.raw="{}",oe.space=!1);break;case"r_brace":Z.length>0&&Z[Z.length-1].name==="l_brace"&&(oe=Z.pop(),oe.name="atom",oe.value="[]",oe.raw="[]",oe.space=!1);break}oe.len=y,Z.push(oe),Te=!1}var Pt=this.set_last_tokens(Z);return Pt.length===0?null:Pt};function W(w,b,y,F,z){if(!b[y])return{type:f,value:x.error.syntax(b[y-1],"expression expected",!0)};var Z;if(F==="0"){var $=b[y];switch($.name){case"number":return{type:p,len:y+1,value:new x.type.Num($.value,$.float)};case"variable":return{type:p,len:y+1,value:new x.type.Var($.value)};case"string":var oe;switch(w.get_flag("double_quotes").id){case"atom":oe=new j($.value,[]);break;case"codes":oe=new j("[]",[]);for(var xe=$.value.length-1;xe>=0;xe--)oe=new j(".",[new x.type.Num(n($.value,xe),!1),oe]);break;case"chars":oe=new j("[]",[]);for(var xe=$.value.length-1;xe>=0;xe--)oe=new j(".",[new x.type.Term($.value.charAt(xe),[]),oe]);break}return{type:p,len:y+1,value:oe};case"l_paren":var Pt=W(w,b,y+1,w.__get_max_priority(),!0);return Pt.type!==p?Pt:b[Pt.len]&&b[Pt.len].name==="r_paren"?(Pt.len++,Pt):{type:f,derived:!0,value:x.error.syntax(b[Pt.len]?b[Pt.len]:b[Pt.len-1],") or operator expected",!b[Pt.len])};case"l_bracket":var Pt=W(w,b,y+1,w.__get_max_priority(),!0);return Pt.type!==p?Pt:b[Pt.len]&&b[Pt.len].name==="r_bracket"?(Pt.len++,Pt.value=new j("{}",[Pt.value]),Pt):{type:f,derived:!0,value:x.error.syntax(b[Pt.len]?b[Pt.len]:b[Pt.len-1],"} or operator expected",!b[Pt.len])}}var Te=te(w,b,y,z);return Te.type===p||Te.derived||(Te=ie(w,b,y),Te.type===p||Te.derived)?Te:{type:f,derived:!1,value:x.error.syntax(b[y],"unexpected token")}}var lt=w.__get_max_priority(),It=w.__get_next_priority(F),qt=y;if(b[y].name==="atom"&&b[y+1]&&(b[y].space||b[y+1].name!=="l_paren")){var $=b[y++],ir=w.__lookup_operator_classes(F,$.value);if(ir&&ir.indexOf("fy")>-1){var Pt=W(w,b,y,F,z);if(Pt.type!==f)return $.value==="-"&&!$.space&&x.type.is_number(Pt.value)?{value:new x.type.Num(-Pt.value.value,Pt.value.is_float),len:Pt.len,type:p}:{value:new x.type.Term($.value,[Pt.value]),len:Pt.len,type:p};Z=Pt}else if(ir&&ir.indexOf("fx")>-1){var Pt=W(w,b,y,It,z);if(Pt.type!==f)return{value:new x.type.Term($.value,[Pt.value]),len:Pt.len,type:p};Z=Pt}}y=qt;var Pt=W(w,b,y,It,z);if(Pt.type===p){y=Pt.len;var $=b[y];if(b[y]&&(b[y].name==="atom"&&w.__lookup_operator_classes(F,$.value)||b[y].name==="bar"&&w.__lookup_operator_classes(F,"|"))){var gn=It,Pr=F,ir=w.__lookup_operator_classes(F,$.value);if(ir.indexOf("xf")>-1)return{value:new x.type.Term($.value,[Pt.value]),len:++Pt.len,type:p};if(ir.indexOf("xfx")>-1){var Ir=W(w,b,y+1,gn,z);return Ir.type===p?{value:new x.type.Term($.value,[Pt.value,Ir.value]),len:Ir.len,type:p}:(Ir.derived=!0,Ir)}else if(ir.indexOf("xfy")>-1){var Ir=W(w,b,y+1,Pr,z);return Ir.type===p?{value:new x.type.Term($.value,[Pt.value,Ir.value]),len:Ir.len,type:p}:(Ir.derived=!0,Ir)}else if(Pt.type!==f)for(;;){y=Pt.len;var $=b[y];if($&&$.name==="atom"&&w.__lookup_operator_classes(F,$.value)){var ir=w.__lookup_operator_classes(F,$.value);if(ir.indexOf("yf")>-1)Pt={value:new x.type.Term($.value,[Pt.value]),len:++y,type:p};else if(ir.indexOf("yfx")>-1){var Ir=W(w,b,++y,gn,z);if(Ir.type===f)return Ir.derived=!0,Ir;y=Ir.len,Pt={value:new x.type.Term($.value,[Pt.value,Ir.value]),len:y,type:p}}else break}else break}}else Z={type:f,value:x.error.syntax(b[Pt.len-1],"operator expected")};return Pt}return Pt}function te(w,b,y,F){if(!b[y]||b[y].name==="atom"&&b[y].raw==="."&&!F&&(b[y].space||!b[y+1]||b[y+1].name!=="l_paren"))return{type:f,derived:!1,value:x.error.syntax(b[y-1],"unfounded token")};var z=b[y],Z=[];if(b[y].name==="atom"&&b[y].raw!==","){if(y++,b[y-1].space)return{type:p,len:y,value:new x.type.Term(z.value,Z)};if(b[y]&&b[y].name==="l_paren"){if(b[y+1]&&b[y+1].name==="r_paren")return{type:f,derived:!0,value:x.error.syntax(b[y+1],"argument expected")};var $=W(w,b,++y,"999",!0);if($.type===f)return $.derived?$:{type:f,derived:!0,value:x.error.syntax(b[y]?b[y]:b[y-1],"argument expected",!b[y])};for(Z.push($.value),y=$.len;b[y]&&b[y].name==="atom"&&b[y].value===",";){if($=W(w,b,y+1,"999",!0),$.type===f)return $.derived?$:{type:f,derived:!0,value:x.error.syntax(b[y+1]?b[y+1]:b[y],"argument expected",!b[y+1])};Z.push($.value),y=$.len}if(b[y]&&b[y].name==="r_paren")y++;else return{type:f,derived:!0,value:x.error.syntax(b[y]?b[y]:b[y-1],", or ) expected",!b[y])}}return{type:p,len:y,value:new x.type.Term(z.value,Z)}}return{type:f,derived:!1,value:x.error.syntax(b[y],"term expected")}}function ie(w,b,y){if(!b[y])return{type:f,derived:!1,value:x.error.syntax(b[y-1],"[ expected")};if(b[y]&&b[y].name==="l_brace"){var F=W(w,b,++y,"999",!0),z=[F.value],Z=void 0;if(F.type===f)return b[y]&&b[y].name==="r_brace"?{type:p,len:y+1,value:new x.type.Term("[]",[])}:{type:f,derived:!0,value:x.error.syntax(b[y],"] expected")};for(y=F.len;b[y]&&b[y].name==="atom"&&b[y].value===",";){if(F=W(w,b,y+1,"999",!0),F.type===f)return F.derived?F:{type:f,derived:!0,value:x.error.syntax(b[y+1]?b[y+1]:b[y],"argument expected",!b[y+1])};z.push(F.value),y=F.len}var $=!1;if(b[y]&&b[y].name==="bar"){if($=!0,F=W(w,b,y+1,"999",!0),F.type===f)return F.derived?F:{type:f,derived:!0,value:x.error.syntax(b[y+1]?b[y+1]:b[y],"argument expected",!b[y+1])};Z=F.value,y=F.len}return b[y]&&b[y].name==="r_brace"?{type:p,len:y+1,value:g(z,Z)}:{type:f,derived:!0,value:x.error.syntax(b[y]?b[y]:b[y-1],$?"] expected":", or | or ] expected",!b[y])}}return{type:f,derived:!1,value:x.error.syntax(b[y],"list expected")}}function Ae(w,b,y){var F=b[y].line,z=W(w,b,y,w.__get_max_priority(),!1),Z=null,$;if(z.type!==f)if(y=z.len,b[y]&&b[y].name==="atom"&&b[y].raw===".")if(y++,x.type.is_term(z.value)){if(z.value.indicator===":-/2"?(Z=new x.type.Rule(z.value.args[0],Ce(z.value.args[1])),$={value:Z,len:y,type:p}):z.value.indicator==="-->/2"?(Z=pe(new x.type.Rule(z.value.args[0],z.value.args[1]),w),Z.body=Ce(Z.body),$={value:Z,len:y,type:x.type.is_rule(Z)?p:f}):(Z=new x.type.Rule(z.value,null),$={value:Z,len:y,type:p}),Z){var oe=Z.singleton_variables();oe.length>0&&w.throw_warning(x.warning.singleton(oe,Z.head.indicator,F))}return $}else return{type:f,value:x.error.syntax(b[y],"callable expected")};else return{type:f,value:x.error.syntax(b[y]?b[y]:b[y-1],". or operator expected")};return z}function ce(w,b,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var F=new U(w),z={},Z;F.new_text(b);var $=0,oe=F.get_tokens($);do{if(oe===null||!oe[$])break;var xe=Ae(w,oe,$);if(xe.type===f)return new j("throw",[xe.value]);if(xe.value.body===null&&xe.value.head.indicator==="?-/1"){var Te=new it(w.session);Te.add_goal(xe.value.head.args[0]),Te.answer(function(It){x.type.is_error(It)?w.throw_warning(It.args[0]):(It===!1||It===null)&&w.throw_warning(x.warning.failed_goal(xe.value.head.args[0],xe.len))}),$=xe.len;var lt=!0}else if(xe.value.body===null&&xe.value.head.indicator===":-/1"){var lt=w.run_directive(xe.value.head.args[0]);$=xe.len,xe.value.head.args[0].indicator==="char_conversion/2"&&(oe=F.get_tokens($),$=0)}else{Z=xe.value.head.indicator,y.reconsult!==!1&&z[Z]!==!0&&!w.is_multifile_predicate(Z)&&(w.session.rules[Z]=a(w.session.rules[Z]||[],function(qt){return qt.dynamic}),z[Z]=!0);var lt=w.add_rule(xe.value,y);$=xe.len}if(!lt)return lt}while(!0);return!0}function me(w,b){var y=new U(w);y.new_text(b);var F=0;do{var z=y.get_tokens(F);if(z===null)break;var Z=W(w,z,0,w.__get_max_priority(),!1);if(Z.type!==f){var $=Z.len,oe=$;if(z[$]&&z[$].name==="atom"&&z[$].raw===".")w.add_goal(Ce(Z.value));else{var xe=z[$];return new j("throw",[x.error.syntax(xe||z[$-1],". or operator expected",!xe)])}F=Z.len+1}else return new j("throw",[Z.value])}while(!0);return!0}function pe(w,b){w=w.rename(b);var y=b.next_free_variable(),F=Be(w.body,y,b);return F.error?F.value:(w.body=F.value,w.head.args=w.head.args.concat([y,F.variable]),w.head=new j(w.head.id,w.head.args),w)}function Be(w,b,y){var F;if(x.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:b,error:!1};if(x.type.is_term(w)&&w.indicator===",/2"){var z=Be(w.args[0],b,y);if(z.error)return z;var Z=Be(w.args[1],z.variable,y);return Z.error?Z:{value:new j(",",[z.value,Z.value]),variable:Z.variable,error:!1}}else{if(x.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:b,error:!1};if(x.type.is_empty_list(w))return{value:new j("true",[]),variable:b,error:!1};if(x.type.is_list(w)){F=y.next_free_variable();for(var $=w,oe;$.indicator==="./2";)oe=$,$=$.args[1];return x.type.is_variable($)?{value:x.error.instantiation("DCG"),variable:b,error:!0}:x.type.is_empty_list($)?(oe.args[1]=F,{value:new j("=",[b,w]),variable:F,error:!1}):{value:x.error.type("list",w,"DCG"),variable:b,error:!0}}else return x.type.is_callable(w)?(F=y.next_free_variable(),w.args=w.args.concat([b,F]),w=new j(w.id,w.args),{value:w,variable:F,error:!1}):{value:x.error.type("callable",w,"DCG"),variable:b,error:!0}}}function Ce(w){return x.type.is_variable(w)?new j("call",[w]):x.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new j(w.id,[Ce(w.args[0]),Ce(w.args[1])]):w}function g(w,b){for(var y=b||new x.type.Term("[]",[]),F=w.length-1;F>=0;F--)y=new x.type.Term(".",[w[F],y]);return y}function we(w,b){for(var y=w.length-1;y>=0;y--)w[y]===b&&w.splice(y,1)}function ye(w){for(var b={},y=[],F=0;F=0;b--)if(w.charAt(b)==="/")return new j("/",[new j(w.substring(0,b)),new Re(parseInt(w.substring(b+1)),!1)])}function De(w){this.id=w}function Re(w,b){this.is_float=b!==void 0?b:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var dt=0;function j(w,b,y){this.ref=y||++dt,this.id=w,this.args=b||[],this.indicator=w+"/"+this.args.length}var rt=0;function Fe(w,b,y,F,z,Z){this.id=rt++,this.stream=w,this.mode=b,this.alias=y,this.type=F!==void 0?F:"text",this.reposition=z!==void 0?z:!0,this.eof_action=Z!==void 0?Z:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function Ne(w){w=w||{},this.links=w}function Pe(w,b,y){b=b||new Ne,y=y||null,this.goal=w,this.substitution=b,this.parent=y}function Ye(w,b,y){this.head=w,this.body=b,this.dynamic=y||!1}function ke(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new it(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Fe(typeof tc<"u"&&tc.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Fe(typeof tc<"u"&&tc.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof tc<"u"&&tc.exports?nodejs_file_system:tau_file_system,this.standard_input=this.streams.user_input,this.standard_output=this.streams.user_output,this.current_input=this.streams.user_input,this.current_output=this.streams.user_output,this.format_success=function(b){return b.substitution},this.format_error=function(b){return b.goal},this.flag={bounded:x.flag.bounded.value,max_integer:x.flag.max_integer.value,min_integer:x.flag.min_integer.value,integer_rounding_function:x.flag.integer_rounding_function.value,char_conversion:x.flag.char_conversion.value,debug:x.flag.debug.value,max_arity:x.flag.max_arity.value,unknown:x.flag.unknown.value,double_quotes:x.flag.double_quotes.value,occurs_check:x.flag.occurs_check.value,dialect:x.flag.dialect.value,version_data:x.flag.version_data.value,nodejs:x.flag.nodejs.value},this.__loaded_modules=[],this.__char_conversion={},this.__operators={1200:{":-":["fx","xfx"],"-->":["xfx"],"?-":["fx"]},1100:{";":["xfy"]},1050:{"->":["xfy"]},1e3:{",":["xfy"]},900:{"\\+":["fy"]},700:{"=":["xfx"],"\\=":["xfx"],"==":["xfx"],"\\==":["xfx"],"@<":["xfx"],"@=<":["xfx"],"@>":["xfx"],"@>=":["xfx"],"=..":["xfx"],is:["xfx"],"=:=":["xfx"],"=\\=":["xfx"],"<":["xfx"],"=<":["xfx"],">":["xfx"],">=":["xfx"]},600:{":":["xfy"]},500:{"+":["yfx"],"-":["yfx"],"/\\":["yfx"],"\\/":["yfx"]},400:{"*":["yfx"],"/":["yfx"],"//":["yfx"],rem:["yfx"],mod:["yfx"],"<<":["yfx"],">>":["yfx"]},200:{"**":["xfx"],"^":["xfy"],"-":["fy"],"+":["fy"],"\\":["fy"]}}}function it(w){this.epoch=Date.now(),this.session=w,this.session.total_threads++,this.total_steps=0,this.cpu_time=0,this.cpu_time_last=0,this.points=[],this.debugger=!1,this.debugger_states=[],this.level="top_level/0",this.__calls=[],this.current_limit=this.session.limit,this.warnings=[]}function _e(w,b,y){this.id=w,this.rules=b,this.exports=y,x.module[w]=this}_e.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},De.prototype.unify=function(w,b){if(b&&e(w.variables(),this.id)!==-1&&!x.type.is_variable(w))return null;var y={};return y[this.id]=w,new Ne(y)},Re.prototype.unify=function(w,b){return x.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new Ne:null},j.prototype.unify=function(w,b){if(x.type.is_term(w)&&this.indicator===w.indicator){for(var y=new Ne,F=0;F=0){var F=this.args[0].value,z=Math.floor(F/26),Z=F%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[Z]+(z!==0?z:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var $="["+this.args[0].toString(w),oe=this.args[1];oe.indicator==="./2";)$+=", "+oe.args[0].toString(w),oe=oe.args[1];return oe.indicator!=="[]/0"&&($+="|"+oe.toString(w)),$+="]",$;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var xe=this.id,Te=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Te===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(xe)&&xe!=="{}"&&xe!=="[]"&&(xe="'"+P(xe)+"'"),xe+(this.args.length?"("+s(this.args,function(ir){return ir.toString(w)}).join(", ")+")":"");var lt=Te.priority>b.priority||Te.priority===b.priority&&(Te.class==="xfy"&&this.indicator!==b.indicator||Te.class==="yfx"&&this.indicator!==b.indicator||this.indicator===b.indicator&&Te.class==="yfx"&&y==="right"||this.indicator===b.indicator&&Te.class==="xfy"&&y==="left");Te.indicator=this.indicator;var It=lt?"(":"",qt=lt?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Te.class)!==-1?It+xe+" "+this.args[0].toString(w,Te)+qt:["yf","xf"].indexOf(Te.class)!==-1?It+this.args[0].toString(w,Te)+" "+xe+qt:It+this.args[0].toString(w,Te,"left")+" "+this.id+" "+this.args[1].toString(w,Te,"right")+qt}},Fe.prototype.toString=function(w){return"("+this.id+")"},Ne.prototype.toString=function(w){var b="{";for(var y in this.links)this.links.hasOwnProperty(y)&&(b!=="{"&&(b+=", "),b+=y+"/"+this.links[y].toString(w));return b+="}",b},Pe.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},Ye.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},ke.prototype.toString=function(w){for(var b="",y=0;y=0;z--)F=new j(".",[b[z],F]);return F}return new j(this.id,s(this.args,function(Z){return Z.apply(w)}),this.ref)},Fe.prototype.apply=function(w){return this},Ye.prototype.apply=function(w){return new Ye(this.head.apply(w),this.body!==null?this.body.apply(w):null)},Ne.prototype.apply=function(w){var b,y={};for(b in this.links)this.links.hasOwnProperty(b)&&(y[b]=this.links[b].apply(w));return new Ne(y)},j.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},j.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new j(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new j(",",[w,this.args[1]]):w},j.prototype.search=function(w){if(x.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var b=0;bb&&F0&&(b=this.head_point().substitution.domain());e(b,x.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new De(x.format_variable(this.session.rename));this.session.renamed_variables[w.id]=x.format_variable(this.session.rename)}return new De(this.session.renamed_variables[w.id])},ke.prototype.next_free_variable=function(){return this.thread.next_free_variable()},it.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,x.format_variable(this.session.rename))!==-1;)this.session.rename++;return new De(x.format_variable(this.session.rename))},ke.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},it.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},ke.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},it.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},ke.prototype.prepend=function(w){return this.thread.prepend(w)},it.prototype.prepend=function(w){for(var b=w.length-1;b>=0;b--)this.points.push(w[b])},ke.prototype.success=function(w,b){return this.thread.success(w,b)},it.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new Pe(w.goal.replace(null),w.substitution,y)])},ke.prototype.throw_error=function(w){return this.thread.throw_error(w)},it.prototype.throw_error=function(w){this.prepend([new Pe(new j("throw",[w]),new Ne,null,null)])},ke.prototype.step_rule=function(w,b){return this.thread.step_rule(w,b)},it.prototype.step_rule=function(w,b){var y=b.indicator;if(w==="user"&&(w=null),w===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var F=w===null?this.session.modules:e(this.session.modules,w)===-1?[]:[w],z=0;z1)&&this.again()},ke.prototype.answers=function(w,b,y){return this.thread.answers(w,b,y)},it.prototype.answers=function(w,b,y){var F=b||1e3,z=this;if(b<=0){y&&y();return}this.answer(function(Z){w(Z),Z!==!1?setTimeout(function(){z.answers(w,b-1,y)},1):y&&y()})},ke.prototype.again=function(w){return this.thread.again(w)},it.prototype.again=function(w){for(var b,y=Date.now();this.__calls.length>0;){for(this.warnings=[],w!==!1&&(this.current_limit=this.session.limit);this.current_limit>0&&this.points.length>0&&this.head_point().goal!==null&&!x.type.is_error(this.head_point().goal);)if(this.current_limit--,this.step()===!0)return;var F=Date.now();this.cpu_time_last=F-y,this.cpu_time+=this.cpu_time_last;var z=this.__calls.shift();this.current_limit<=0?z(null):this.points.length===0?z(!1):x.type.is_error(this.head_point().goal)?(b=this.session.format_error(this.points.pop()),this.points=[],z(b)):(this.debugger&&this.debugger_states.push(this.head_point()),b=this.session.format_success(this.points.pop()),z(b))}},ke.prototype.unfold=function(w){if(w.body===null)return!1;var b=w.head,y=w.body,F=y.select(),z=new it(this),Z=[];z.add_goal(F),z.step();for(var $=z.points.length-1;$>=0;$--){var oe=z.points[$],xe=b.apply(oe.substitution),Te=y.replace(oe.goal);Te!==null&&(Te=Te.apply(oe.substitution)),Z.push(new Ye(xe,Te))}var lt=this.rules[b.indicator],It=e(lt,w);return Z.length>0&&It!==-1?(lt.splice.apply(lt,[It,1].concat(Z)),!0):!1},it.prototype.unfold=function(w){return this.session.unfold(w)},De.prototype.interpret=function(w){return x.error.instantiation(w.level)},Re.prototype.interpret=function(w){return this},j.prototype.interpret=function(w){return x.type.is_unitary_list(this)?this.args[0].interpret(w):x.operate(w,this)},De.prototype.compare=function(w){return this.idw.id?1:0},Re.prototype.compare=function(w){if(this.value===w.value&&this.is_float===w.is_float)return 0;if(this.valuew.value)return 1},j.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var b=0;bF)return 1;if(w.constructor===Re){if(w.is_float&&b.is_float)return 0;if(w.is_float)return-1;if(b.is_float)return 1}return 0},is_substitution:function(w){return w instanceof Ne},is_state:function(w){return w instanceof Pe},is_rule:function(w){return w instanceof Ye},is_variable:function(w){return w instanceof De},is_stream:function(w){return w instanceof Fe},is_anonymous_var:function(w){return w instanceof De&&w.id==="_"},is_callable:function(w){return w instanceof j},is_number:function(w){return w instanceof Re},is_integer:function(w){return w instanceof Re&&!w.is_float},is_float:function(w){return w instanceof Re&&w.is_float},is_term:function(w){return w instanceof j},is_atom:function(w){return w instanceof j&&w.args.length===0},is_ground:function(w){if(w instanceof De)return!1;if(w instanceof j){for(var b=0;b0},is_list:function(w){return w instanceof j&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof j&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof j&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof j&&w.indicator==="./2";)w=w.args[1];return w instanceof De||w instanceof j&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof j&&w.indicator==="./2";)w=w.args[1];return w instanceof j&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof j&&w.indicator==="./2"&&w.args[1]instanceof j&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof j&&(w.id.length===1||w.id.length>0&&w.id.length<=2&&n(w.id,0)>=65536)},is_character_code:function(w){return w instanceof Re&&!w.is_float&&w.value>=0&&w.value<=1114111},is_byte:function(w){return w instanceof Re&&!w.is_float&&w.value>=0&&w.value<=255},is_operator:function(w){return w instanceof j&&x.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof j&&x.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof j&&x.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof j&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof j&&w.indicator==="//2"&&w.args[0]instanceof j&&w.args[0].args.length===0&&w.args[1]instanceof Re&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof j&&w.args.length===0&&x.flag[w.id]!==void 0},is_value_flag:function(w,b){if(!x.type.is_flag(w))return!1;for(var y in x.flag[w.id].allowed)if(x.flag[w.id].allowed.hasOwnProperty(y)&&x.flag[w.id].allowed[y].equals(b))return!0;return!1},is_io_mode:function(w){return x.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return x.type.is_term(w)&&(w.indicator==="alias/1"&&x.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))},is_stream_position:function(w){return x.type.is_integer(w)&&w.value>=0||x.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return x.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(x.type.is_variable(w.args[0])||x.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="read"||w.args[0].id==="write"||w.args[0].id==="append"))||w.indicator==="eof_action/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))||w.indicator==="end_of_stream/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="at"||w.args[0].id==="past"||w.args[0].id==="not")))},is_streamable:function(w){return w.__proto__.stream!==void 0},is_read_option:function(w){return x.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return x.type.is_term(w)&&(w.indicator==="quoted/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return x.type.is_term(w)&&w.indicator==="force/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return x.type.is_flag(w)&&x.flag[w.id].changeable},is_module:function(w){return w instanceof j&&w.indicator==="library/1"&&w.args[0]instanceof j&&w.args[0].args.length===0&&x.module[w.args[0].id]!==void 0}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(w){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(w){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(w){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(w){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(w,b){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,b){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,b){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,b){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,b){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,b){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,b){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,b){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,b){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,b){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,b){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,b){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,b){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,b){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,b){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,b){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,b){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,b){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,b,y){return Math.atan2(w,b)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,b){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,b){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,b){return w>0?Math.log(w):x.error.evaluation("undefined",b.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,b,y){return w+b}},"-/2":{type_args:null,type_result:null,fn:function(w,b,y){return w-b}},"*/2":{type_args:null,type_result:null,fn:function(w,b,y){return w*b}},"//2":{type_args:null,type_result:!0,fn:function(w,b,y){return b?w/b:x.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,b,y){return b?parseInt(w/b):x.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,b,y){return Math.pow(w,b)}},"^/2":{type_args:null,type_result:null,fn:function(w,b,y){return Math.pow(w,b)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,b,y){return w>>b}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,b,y){return w&b}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,b,y){return w|b}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,b,y){return w^b}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,b,y){return b?w%b:x.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,b,y){return b?w-parseInt(w/b)*b:x.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,b,y){return Math.max(w,b)}},"min/2":{type_args:null,type_result:null,fn:function(w,b,y){return Math.min(w,b)}}}},directive:{"dynamic/1":function(w,b){var y=b.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(b.indicator));else if(!x.type.is_compound(y)||y.indicator!=="//2")w.throw_error(x.error.type("predicate_indicator",y,b.indicator));else if(x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1]))w.throw_error(x.error.instantiation(b.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],b.indicator));else if(!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],b.indicator));else{var F=b.args[0].args[0].id+"/"+b.args[0].args[1].value;w.session.public_predicates[F]=!0,w.session.rules[F]||(w.session.rules[F]=[])}},"multifile/1":function(w,b){var y=b.args[0];x.type.is_variable(y)?w.throw_error(x.error.instantiation(b.indicator)):!x.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(x.error.type("predicate_indicator",y,b.indicator)):x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1])?w.throw_error(x.error.instantiation(b.indicator)):x.type.is_atom(y.args[0])?x.type.is_integer(y.args[1])?w.session.multifile_predicates[b.args[0].args[0].id+"/"+b.args[0].args[1].value]=!0:w.throw_error(x.error.type("integer",y.args[1],b.indicator)):w.throw_error(x.error.type("atom",y.args[0],b.indicator))},"set_prolog_flag/2":function(w,b){var y=b.args[0],F=b.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(b.indicator)):x.type.is_atom(y)?x.type.is_flag(y)?x.type.is_value_flag(y,F)?x.type.is_modifiable_flag(y)?w.session.flag[y.id]=F:w.throw_error(x.error.permission("modify","flag",y)):w.throw_error(x.error.domain("flag_value",new j("+",[y,F]),b.indicator)):w.throw_error(x.error.domain("prolog_flag",y,b.indicator)):w.throw_error(x.error.type("atom",y,b.indicator))},"use_module/1":function(w,b){var y=b.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(b.indicator));else if(!x.type.is_term(y))w.throw_error(x.error.type("term",y,b.indicator));else if(x.type.is_module(y)){var F=y.args[0].id;e(w.session.modules,F)===-1&&w.session.modules.push(F)}},"char_conversion/2":function(w,b){var y=b.args[0],F=b.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(b.indicator)):x.type.is_character(y)?x.type.is_character(F)?y.id===F.id?delete w.session.__char_conversion[y.id]:w.session.__char_conversion[y.id]=F.id:w.throw_error(x.error.type("character",F,b.indicator)):w.throw_error(x.error.type("character",y,b.indicator))},"op/3":function(w,b){var y=b.args[0],F=b.args[1],z=b.args[2];if(x.type.is_variable(y)||x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(b.indicator));else if(!x.type.is_integer(y))w.throw_error(x.error.type("integer",y,b.indicator));else if(!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,b.indicator));else if(!x.type.is_atom(z))w.throw_error(x.error.type("atom",z,b.indicator));else if(y.value<0||y.value>1200)w.throw_error(x.error.domain("operator_priority",y,b.indicator));else if(z.id===",")w.throw_error(x.error.permission("modify","operator",z,b.indicator));else if(z.id==="|"&&(y.value<1001||F.id.length!==3))w.throw_error(x.error.permission("modify","operator",z,b.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(F.id)===-1)w.throw_error(x.error.domain("operator_specifier",F,b.indicator));else{var Z={prefix:null,infix:null,postfix:null};for(var $ in w.session.__operators)if(w.session.__operators.hasOwnProperty($)){var oe=w.session.__operators[$][z.id];oe&&(e(oe,"fx")!==-1&&(Z.prefix={priority:$,type:"fx"}),e(oe,"fy")!==-1&&(Z.prefix={priority:$,type:"fy"}),e(oe,"xf")!==-1&&(Z.postfix={priority:$,type:"xf"}),e(oe,"yf")!==-1&&(Z.postfix={priority:$,type:"yf"}),e(oe,"xfx")!==-1&&(Z.infix={priority:$,type:"xfx"}),e(oe,"xfy")!==-1&&(Z.infix={priority:$,type:"xfy"}),e(oe,"yfx")!==-1&&(Z.infix={priority:$,type:"yfx"}))}var xe;switch(F.id){case"fy":case"fx":xe="prefix";break;case"yf":case"xf":xe="postfix";break;default:xe="infix";break}if(((Z.prefix&&xe==="prefix"||Z.postfix&&xe==="postfix"||Z.infix&&xe==="infix")&&Z[xe].type!==F.id||Z.infix&&xe==="postfix"||Z.postfix&&xe==="infix")&&y.value!==0)w.throw_error(x.error.permission("create","operator",z,b.indicator));else return Z[xe]&&(we(w.session.__operators[Z[xe].priority][z.id],F.id),w.session.__operators[Z[xe].priority][z.id].length===0&&delete w.session.__operators[Z[xe].priority][z.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][z.id]||(w.session.__operators[y.value][z.id]=[]),w.session.__operators[y.value][z.id].push(F.id)),!0}}},predicate:{"op/3":function(w,b,y){x.directive["op/3"](w,y)&&w.success(b)},"current_op/3":function(w,b,y){var F=y.args[0],z=y.args[1],Z=y.args[2],$=[];for(var oe in w.session.__operators)for(var xe in w.session.__operators[oe])for(var Te=0;Te/2"){var F=w.points,z=w.session.format_success,Z=w.session.format_error;w.session.format_success=function(Te){return Te.substitution},w.session.format_error=function(Te){return Te.goal},w.points=[new Pe(y.args[0].args[0],b.substitution,b)];var $=function(Te){w.points=F,w.session.format_success=z,w.session.format_error=Z,Te===!1?w.prepend([new Pe(b.goal.replace(y.args[1]),b.substitution,b)]):x.type.is_error(Te)?w.throw_error(Te.args[0]):Te===null?(w.prepend([b]),w.__calls.shift()(null)):w.prepend([new Pe(b.goal.replace(y.args[0].args[1]).apply(Te),b.substitution.apply(Te),b)])};w.__calls.unshift($)}else{var oe=new Pe(b.goal.replace(y.args[0]),b.substitution,b),xe=new Pe(b.goal.replace(y.args[1]),b.substitution,b);w.prepend([oe,xe])}},"!/0":function(w,b,y){var F,z,Z=[];for(F=b,z=null;F.parent!==null&&F.parent.goal.search(y);)if(z=F,F=F.parent,F.goal!==null){var $=F.goal.select();if($&&$.id==="call"&&$.search(y)){F=z;break}}for(var oe=w.points.length-1;oe>=0;oe--){for(var xe=w.points[oe],Te=xe.parent;Te!==null&&Te!==F.parent;)Te=Te.parent;Te===null&&Te!==F.parent&&Z.push(xe)}w.points=Z.reverse(),w.success(b)},"\\+/1":function(w,b,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(w.level)):x.type.is_callable(F)?w.prepend([new Pe(b.goal.replace(new j(",",[new j(",",[new j("call",[F]),new j("!",[])]),new j("fail",[])])),b.substitution,b),new Pe(b.goal.replace(null),b.substitution,b)]):w.throw_error(x.error.type("callable",F,w.level))},"->/2":function(w,b,y){var F=b.goal.replace(new j(",",[y.args[0],new j(",",[new j("!"),y.args[1]])]));w.prepend([new Pe(F,b.substitution,b)])},"fail/0":function(w,b,y){},"false/0":function(w,b,y){},"true/0":function(w,b,y){w.success(b)},"call/1":se(1),"call/2":se(2),"call/3":se(3),"call/4":se(4),"call/5":se(5),"call/6":se(6),"call/7":se(7),"call/8":se(8),"once/1":function(w,b,y){var F=y.args[0];w.prepend([new Pe(b.goal.replace(new j(",",[new j("call",[F]),new j("!",[])])),b.substitution,b)])},"forall/2":function(w,b,y){var F=y.args[0],z=y.args[1];w.prepend([new Pe(b.goal.replace(new j("\\+",[new j(",",[new j("call",[F]),new j("\\+",[new j("call",[z])])])])),b.substitution,b)])},"repeat/0":function(w,b,y){w.prepend([new Pe(b.goal.replace(null),b.substitution,b),b])},"throw/1":function(w,b,y){x.type.is_variable(y.args[0])?w.throw_error(x.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,b,y){var F=w.points;w.points=[],w.prepend([new Pe(y.args[0],b.substitution,b)]);var z=w.session.format_success,Z=w.session.format_error;w.session.format_success=function(oe){return oe.substitution},w.session.format_error=function(oe){return oe.goal};var $=function(oe){var xe=w.points;if(w.points=F,w.session.format_success=z,w.session.format_error=Z,x.type.is_error(oe)){for(var Te=[],lt=w.points.length-1;lt>=0;lt--){for(var ir=w.points[lt],It=ir.parent;It!==null&&It!==b.parent;)It=It.parent;It===null&&It!==b.parent&&Te.push(ir)}w.points=Te;var qt=w.get_flag("occurs_check").indicator==="true/0",ir=new Pe,Pt=x.unify(oe.args[0],y.args[1],qt);Pt!==null?(ir.substitution=b.substitution.apply(Pt),ir.goal=b.goal.replace(y.args[2]).apply(Pt),ir.parent=b,w.prepend([ir])):w.throw_error(oe.args[0])}else if(oe!==!1){for(var gn=oe===null?[]:[new Pe(b.goal.apply(oe).replace(null),b.substitution.apply(oe),b)],Pr=[],lt=xe.length-1;lt>=0;lt--){Pr.push(xe[lt]);var Ir=xe[lt].goal!==null?xe[lt].goal.select():null;if(x.type.is_term(Ir)&&Ir.indicator==="!/0")break}var Nr=s(Pr,function(nn){return nn.goal===null&&(nn.goal=new j("true",[])),nn=new Pe(b.goal.replace(new j("catch",[nn.goal,y.args[1],y.args[2]])),b.substitution.apply(nn.substitution),nn.parent),nn.exclude=y.args[0].variables(),nn}).reverse();w.prepend(Nr),w.prepend(gn),oe===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift($)},"=/2":function(w,b,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=new Pe,Z=x.unify(y.args[0],y.args[1],F);Z!==null&&(z.goal=b.goal.apply(Z).replace(null),z.substitution=b.substitution.apply(Z),z.parent=b,w.prepend([z]))},"unify_with_occurs_check/2":function(w,b,y){var F=new Pe,z=x.unify(y.args[0],y.args[1],!0);z!==null&&(F.goal=b.goal.apply(z).replace(null),F.substitution=b.substitution.apply(z),F.parent=b,w.prepend([F]))},"\\=/2":function(w,b,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[0],y.args[1],F);z===null&&w.success(b)},"subsumes_term/2":function(w,b,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[1],y.args[0],F);z!==null&&y.args[1].apply(z).equals(y.args[1])&&w.success(b)},"findall/3":function(w,b,y){var F=y.args[0],z=y.args[1],Z=y.args[2];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(z))w.throw_error(x.error.type("callable",z,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var $=w.next_free_variable(),oe=new j(",",[z,new j("=",[$,F])]),xe=w.points,Te=w.session.limit,lt=w.session.format_success;w.session.format_success=function(ir){return ir.substitution},w.add_goal(oe,!0,b);var It=[],qt=function(ir){if(ir!==!1&&ir!==null&&!x.type.is_error(ir))w.__calls.unshift(qt),It.push(ir.links[$.id]),w.session.limit=w.current_limit;else if(w.points=xe,w.session.limit=Te,w.session.format_success=lt,x.type.is_error(ir))w.throw_error(ir.args[0]);else if(w.current_limit>0){for(var Pt=new j("[]"),gn=It.length-1;gn>=0;gn--)Pt=new j(".",[It[gn],Pt]);w.prepend([new Pe(b.goal.replace(new j("=",[Z,Pt])),b.substitution,b)])}};w.__calls.unshift(qt)}},"bagof/3":function(w,b,y){var F,z=y.args[0],Z=y.args[1],$=y.args[2];if(x.type.is_variable(Z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(Z))w.throw_error(x.error.type("callable",Z,y.indicator));else if(!x.type.is_variable($)&&!x.type.is_list($))w.throw_error(x.error.type("list",$,y.indicator));else{var oe=w.next_free_variable(),xe;Z.indicator==="^/2"?(xe=Z.args[0].variables(),Z=Z.args[1]):xe=[],xe=xe.concat(z.variables());for(var Te=Z.variables().filter(function(Nr){return e(xe,Nr)===-1}),lt=new j("[]"),It=Te.length-1;It>=0;It--)lt=new j(".",[new De(Te[It]),lt]);var qt=new j(",",[Z,new j("=",[oe,new j(",",[lt,z])])]),ir=w.points,Pt=w.session.limit,gn=w.session.format_success;w.session.format_success=function(Nr){return Nr.substitution},w.add_goal(qt,!0,b);var Pr=[],Ir=function(Nr){if(Nr!==!1&&Nr!==null&&!x.type.is_error(Nr)){w.__calls.unshift(Ir);var nn=!1,ai=Nr.links[oe.id].args[0],wo=Nr.links[oe.id].args[1];for(var ns in Pr)if(Pr.hasOwnProperty(ns)){var to=Pr[ns];if(to.variables.equals(ai)){to.answers.push(wo),nn=!0;break}}nn||Pr.push({variables:ai,answers:[wo]}),w.session.limit=w.current_limit}else if(w.points=ir,w.session.limit=Pt,w.session.format_success=gn,x.type.is_error(Nr))w.throw_error(Nr.args[0]);else if(w.current_limit>0){for(var Bo=[],ji=0;ji=0;vo--)ro=new j(".",[Nr[vo],ro]);Bo.push(new Pe(b.goal.replace(new j(",",[new j("=",[lt,Pr[ji].variables]),new j("=",[$,ro])])),b.substitution,b))}w.prepend(Bo)}};w.__calls.unshift(Ir)}},"setof/3":function(w,b,y){var F,z=y.args[0],Z=y.args[1],$=y.args[2];if(x.type.is_variable(Z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(Z))w.throw_error(x.error.type("callable",Z,y.indicator));else if(!x.type.is_variable($)&&!x.type.is_list($))w.throw_error(x.error.type("list",$,y.indicator));else{var oe=w.next_free_variable(),xe;Z.indicator==="^/2"?(xe=Z.args[0].variables(),Z=Z.args[1]):xe=[],xe=xe.concat(z.variables());for(var Te=Z.variables().filter(function(Nr){return e(xe,Nr)===-1}),lt=new j("[]"),It=Te.length-1;It>=0;It--)lt=new j(".",[new De(Te[It]),lt]);var qt=new j(",",[Z,new j("=",[oe,new j(",",[lt,z])])]),ir=w.points,Pt=w.session.limit,gn=w.session.format_success;w.session.format_success=function(Nr){return Nr.substitution},w.add_goal(qt,!0,b);var Pr=[],Ir=function(Nr){if(Nr!==!1&&Nr!==null&&!x.type.is_error(Nr)){w.__calls.unshift(Ir);var nn=!1,ai=Nr.links[oe.id].args[0],wo=Nr.links[oe.id].args[1];for(var ns in Pr)if(Pr.hasOwnProperty(ns)){var to=Pr[ns];if(to.variables.equals(ai)){to.answers.push(wo),nn=!0;break}}nn||Pr.push({variables:ai,answers:[wo]}),w.session.limit=w.current_limit}else if(w.points=ir,w.session.limit=Pt,w.session.format_success=gn,x.type.is_error(Nr))w.throw_error(Nr.args[0]);else if(w.current_limit>0){for(var Bo=[],ji=0;ji=0;vo--)ro=new j(".",[Nr[vo],ro]);Bo.push(new Pe(b.goal.replace(new j(",",[new j("=",[lt,Pr[ji].variables]),new j("=",[$,ro])])),b.substitution,b))}w.prepend(Bo)}};w.__calls.unshift(Ir)}},"functor/3":function(w,b,y){var F,z=y.args[0],Z=y.args[1],$=y.args[2];if(x.type.is_variable(z)&&(x.type.is_variable(Z)||x.type.is_variable($)))w.throw_error(x.error.instantiation("functor/3"));else if(!x.type.is_variable($)&&!x.type.is_integer($))w.throw_error(x.error.type("integer",y.args[2],"functor/3"));else if(!x.type.is_variable(Z)&&!x.type.is_atomic(Z))w.throw_error(x.error.type("atomic",y.args[1],"functor/3"));else if(x.type.is_integer(Z)&&x.type.is_integer($)&&$.value!==0)w.throw_error(x.error.type("atom",y.args[1],"functor/3"));else if(x.type.is_variable(z)){if(y.args[2].value>=0){for(var oe=[],xe=0;xe<$.value;xe++)oe.push(w.next_free_variable());var Te=x.type.is_integer(Z)?Z:new j(Z.id,oe);w.prepend([new Pe(b.goal.replace(new j("=",[z,Te])),b.substitution,b)])}}else{var lt=x.type.is_integer(z)?z:new j(z.id,[]),It=x.type.is_integer(z)?new Re(0,!1):new Re(z.args.length,!1),qt=new j(",",[new j("=",[lt,Z]),new j("=",[It,$])]);w.prepend([new Pe(b.goal.replace(qt),b.substitution,b)])}},"arg/3":function(w,b,y){if(x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1]))w.throw_error(x.error.instantiation(y.indicator));else if(y.args[0].value<0)w.throw_error(x.error.domain("not_less_than_zero",y.args[0],y.indicator));else if(!x.type.is_compound(y.args[1]))w.throw_error(x.error.type("compound",y.args[1],y.indicator));else{var F=y.args[0].value;if(F>0&&F<=y.args[1].args.length){var z=new j("=",[y.args[1].args[F-1],y.args[2]]);w.prepend([new Pe(b.goal.replace(z),b.substitution,b)])}}},"=../2":function(w,b,y){var F;if(x.type.is_variable(y.args[0])&&(x.type.is_variable(y.args[1])||x.type.is_non_empty_list(y.args[1])&&x.type.is_variable(y.args[1].args[0])))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_fully_list(y.args[1]))w.throw_error(x.error.type("list",y.args[1],y.indicator));else if(x.type.is_variable(y.args[0])){if(!x.type.is_variable(y.args[1])){var Z=[];for(F=y.args[1].args[1];F.indicator==="./2";)Z.push(F.args[0]),F=F.args[1];x.type.is_variable(y.args[0])&&x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):Z.length===0&&x.type.is_compound(y.args[1].args[0])?w.throw_error(x.error.type("atomic",y.args[1].args[0],y.indicator)):Z.length>0&&(x.type.is_compound(y.args[1].args[0])||x.type.is_number(y.args[1].args[0]))?w.throw_error(x.error.type("atom",y.args[1].args[0],y.indicator)):Z.length===0?w.prepend([new Pe(b.goal.replace(new j("=",[y.args[1].args[0],y.args[0]],b)),b.substitution,b)]):w.prepend([new Pe(b.goal.replace(new j("=",[new j(y.args[1].args[0].id,Z),y.args[0]])),b.substitution,b)])}}else{if(x.type.is_atomic(y.args[0]))F=new j(".",[y.args[0],new j("[]")]);else{F=new j("[]");for(var z=y.args[0].args.length-1;z>=0;z--)F=new j(".",[y.args[0].args[z],F]);F=new j(".",[new j(y.args[0].id),F])}w.prepend([new Pe(b.goal.replace(new j("=",[F,y.args[1]])),b.substitution,b)])}},"copy_term/2":function(w,b,y){var F=y.args[0].rename(w);w.prepend([new Pe(b.goal.replace(new j("=",[F,y.args[1]])),b.substitution,b.parent)])},"term_variables/2":function(w,b,y){var F=y.args[0],z=y.args[1];if(!x.type.is_fully_list(z))w.throw_error(x.error.type("list",z,y.indicator));else{var Z=g(s(ye(F.variables()),function($){return new De($)}));w.prepend([new Pe(b.goal.replace(new j("=",[z,Z])),b.substitution,b)])}},"clause/2":function(w,b,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_callable(y.args[1]))w.throw_error(x.error.type("callable",y.args[1],y.indicator));else if(w.session.rules[y.args[0].indicator]!==void 0)if(w.is_public_predicate(y.args[0].indicator)){var F=[];for(var z in w.session.rules[y.args[0].indicator])if(w.session.rules[y.args[0].indicator].hasOwnProperty(z)){var Z=w.session.rules[y.args[0].indicator][z];w.session.renamed_variables={},Z=Z.rename(w),Z.body===null&&(Z.body=new j("true"));var $=new j(",",[new j("=",[Z.head,y.args[0]]),new j("=",[Z.body,y.args[1]])]);F.push(new Pe(b.goal.replace($),b.substitution,b))}w.prepend(F)}else w.throw_error(x.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,b,y){var F=y.args[0];if(!x.type.is_variable(F)&&(!x.type.is_compound(F)||F.indicator!=="//2"))w.throw_error(x.error.type("predicate_indicator",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[0])&&!x.type.is_atom(F.args[0]))w.throw_error(x.error.type("atom",F.args[0],y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[1])&&!x.type.is_integer(F.args[1]))w.throw_error(x.error.type("integer",F.args[1],y.indicator));else{var z=[];for(var Z in w.session.rules)if(w.session.rules.hasOwnProperty(Z)){var $=Z.lastIndexOf("/"),oe=Z.substr(0,$),xe=parseInt(Z.substr($+1,Z.length-($+1))),Te=new j("/",[new j(oe),new Re(xe,!1)]),lt=new j("=",[Te,F]);z.push(new Pe(b.goal.replace(lt),b.substitution,b))}w.prepend(z)}},"asserta/1":function(w,b,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Ce(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator]=[new Ye(F,z,!0)].concat(w.session.rules[F.indicator]),w.success(b)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"assertz/1":function(w,b,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Ce(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator].push(new Ye(F,z,!0)),w.success(b)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"retract/1":function(w,b,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;if(y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=y.args[0].args[1]):(F=y.args[0],z=new j("true")),typeof b.retract>"u")if(w.is_public_predicate(F.indicator)){if(w.session.rules[F.indicator]!==void 0){for(var Z=[],$=0;$w.get_flag("max_arity").value)w.throw_error(x.error.representation("max_arity",y.indicator));else{var F=y.args[0].args[0].id+"/"+y.args[0].args[1].value;w.is_public_predicate(F)?(delete w.session.rules[F],w.success(b)):w.throw_error(x.error.permission("modify","static_procedure",F,y.indicator))}},"atom_length/2":function(w,b,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],y.indicator));else if(x.type.is_integer(y.args[1])&&y.args[1].value<0)w.throw_error(x.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var F=new Re(y.args[0].id.length,!1);w.prepend([new Pe(b.goal.replace(new j("=",[F,y.args[1]])),b.substitution,b)])}},"atom_concat/3":function(w,b,y){var F,z,Z=y.args[0],$=y.args[1],oe=y.args[2];if(x.type.is_variable(oe)&&(x.type.is_variable(Z)||x.type.is_variable($)))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_atom(Z))w.throw_error(x.error.type("atom",Z,y.indicator));else if(!x.type.is_variable($)&&!x.type.is_atom($))w.throw_error(x.error.type("atom",$,y.indicator));else if(!x.type.is_variable(oe)&&!x.type.is_atom(oe))w.throw_error(x.error.type("atom",oe,y.indicator));else{var xe=x.type.is_variable(Z),Te=x.type.is_variable($);if(!xe&&!Te)z=new j("=",[oe,new j(Z.id+$.id)]),w.prepend([new Pe(b.goal.replace(z),b.substitution,b)]);else if(xe&&!Te)F=oe.id.substr(0,oe.id.length-$.id.length),F+$.id===oe.id&&(z=new j("=",[Z,new j(F)]),w.prepend([new Pe(b.goal.replace(z),b.substitution,b)]));else if(Te&&!xe)F=oe.id.substr(Z.id.length),Z.id+F===oe.id&&(z=new j("=",[$,new j(F)]),w.prepend([new Pe(b.goal.replace(z),b.substitution,b)]));else{for(var lt=[],It=0;It<=oe.id.length;It++){var qt=new j(oe.id.substr(0,It)),ir=new j(oe.id.substr(It));z=new j(",",[new j("=",[qt,Z]),new j("=",[ir,$])]),lt.push(new Pe(b.goal.replace(z),b.substitution,b))}w.prepend(lt)}}},"sub_atom/5":function(w,b,y){var F,z=y.args[0],Z=y.args[1],$=y.args[2],oe=y.args[3],xe=y.args[4];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",Z,y.indicator));else if(!x.type.is_variable($)&&!x.type.is_integer($))w.throw_error(x.error.type("integer",$,y.indicator));else if(!x.type.is_variable(oe)&&!x.type.is_integer(oe))w.throw_error(x.error.type("integer",oe,y.indicator));else if(x.type.is_integer(Z)&&Z.value<0)w.throw_error(x.error.domain("not_less_than_zero",Z,y.indicator));else if(x.type.is_integer($)&&$.value<0)w.throw_error(x.error.domain("not_less_than_zero",$,y.indicator));else if(x.type.is_integer(oe)&&oe.value<0)w.throw_error(x.error.domain("not_less_than_zero",oe,y.indicator));else{var Te=[],lt=[],It=[];if(x.type.is_variable(Z))for(F=0;F<=z.id.length;F++)Te.push(F);else Te.push(Z.value);if(x.type.is_variable($))for(F=0;F<=z.id.length;F++)lt.push(F);else lt.push($.value);if(x.type.is_variable(oe))for(F=0;F<=z.id.length;F++)It.push(F);else It.push(oe.value);var qt=[];for(var ir in Te)if(Te.hasOwnProperty(ir)){F=Te[ir];for(var Pt in lt)if(lt.hasOwnProperty(Pt)){var gn=lt[Pt],Pr=z.id.length-F-gn;if(e(It,Pr)!==-1&&F+gn+Pr===z.id.length){var Ir=z.id.substr(F,gn);if(z.id===z.id.substr(0,F)+Ir+z.id.substr(F+gn,Pr)){var Nr=new j("=",[new j(Ir),xe]),nn=new j("=",[Z,new Re(F)]),ai=new j("=",[$,new Re(gn)]),wo=new j("=",[oe,new Re(Pr)]),ns=new j(",",[new j(",",[new j(",",[nn,ai]),wo]),Nr]);qt.push(new Pe(b.goal.replace(ns),b.substitution,b))}}}}w.prepend(qt)}},"atom_chars/2":function(w,b,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var oe=z,xe=x.type.is_variable(F),Te="";oe.indicator==="./2";){if(x.type.is_character(oe.args[0]))Te+=oe.args[0].id;else if(x.type.is_variable(oe.args[0])&&xe){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(oe.args[0])){w.throw_error(x.error.type("character",oe.args[0],y.indicator));return}oe=oe.args[1]}x.type.is_variable(oe)&&xe?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(oe)&&!x.type.is_variable(oe)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new Pe(b.goal.replace(new j("=",[new j(Te),F])),b.substitution,b)])}else{for(var Z=new j("[]"),$=F.id.length-1;$>=0;$--)Z=new j(".",[new j(F.id.charAt($)),Z]);w.prepend([new Pe(b.goal.replace(new j("=",[z,Z])),b.substitution,b)])}},"atom_codes/2":function(w,b,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var oe=z,xe=x.type.is_variable(F),Te="";oe.indicator==="./2";){if(x.type.is_character_code(oe.args[0]))Te+=c(oe.args[0].value);else if(x.type.is_variable(oe.args[0])&&xe){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(oe.args[0])){w.throw_error(x.error.representation("character_code",y.indicator));return}oe=oe.args[1]}x.type.is_variable(oe)&&xe?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(oe)&&!x.type.is_variable(oe)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new Pe(b.goal.replace(new j("=",[new j(Te),F])),b.substitution,b)])}else{for(var Z=new j("[]"),$=F.id.length-1;$>=0;$--)Z=new j(".",[new Re(n(F.id,$),!1),Z]);w.prepend([new Pe(b.goal.replace(new j("=",[z,Z])),b.substitution,b)])}},"char_code/2":function(w,b,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_character(F))w.throw_error(x.error.type("character",F,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_character_code(z))w.throw_error(x.error.representation("character_code",y.indicator));else if(x.type.is_variable(z)){var Z=new Re(n(F.id,0),!1);w.prepend([new Pe(b.goal.replace(new j("=",[Z,z])),b.substitution,b)])}else{var $=new j(c(z.value));w.prepend([new Pe(b.goal.replace(new j("=",[$,F])),b.substitution,b)])}},"number_chars/2":function(w,b,y){var F,z=y.args[0],Z=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(Z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var $=x.type.is_variable(z);if(!x.type.is_variable(Z)){var oe=Z,xe=!0;for(F="";oe.indicator==="./2";){if(x.type.is_character(oe.args[0]))F+=oe.args[0].id;else if(x.type.is_variable(oe.args[0]))xe=!1;else if(!x.type.is_variable(oe.args[0])){w.throw_error(x.error.type("character",oe.args[0],y.indicator));return}oe=oe.args[1]}if(xe=xe&&x.type.is_empty_list(oe),!x.type.is_empty_list(oe)&&!x.type.is_variable(oe)){w.throw_error(x.error.type("list",Z,y.indicator));return}if(!xe&&$){w.throw_error(x.error.instantiation(y.indicator));return}else if(xe)if(x.type.is_variable(oe)&&$){w.throw_error(x.error.instantiation(y.indicator));return}else{var Te=w.parse(F),lt=Te.value;!x.type.is_number(lt)||Te.tokens[Te.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new Pe(b.goal.replace(new j("=",[z,lt])),b.substitution,b)]);return}}if(!$){F=z.toString();for(var It=new j("[]"),qt=F.length-1;qt>=0;qt--)It=new j(".",[new j(F.charAt(qt)),It]);w.prepend([new Pe(b.goal.replace(new j("=",[Z,It])),b.substitution,b)])}}},"number_codes/2":function(w,b,y){var F,z=y.args[0],Z=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(Z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var $=x.type.is_variable(z);if(!x.type.is_variable(Z)){var oe=Z,xe=!0;for(F="";oe.indicator==="./2";){if(x.type.is_character_code(oe.args[0]))F+=c(oe.args[0].value);else if(x.type.is_variable(oe.args[0]))xe=!1;else if(!x.type.is_variable(oe.args[0])){w.throw_error(x.error.type("character_code",oe.args[0],y.indicator));return}oe=oe.args[1]}if(xe=xe&&x.type.is_empty_list(oe),!x.type.is_empty_list(oe)&&!x.type.is_variable(oe)){w.throw_error(x.error.type("list",Z,y.indicator));return}if(!xe&&$){w.throw_error(x.error.instantiation(y.indicator));return}else if(xe)if(x.type.is_variable(oe)&&$){w.throw_error(x.error.instantiation(y.indicator));return}else{var Te=w.parse(F),lt=Te.value;!x.type.is_number(lt)||Te.tokens[Te.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new Pe(b.goal.replace(new j("=",[z,lt])),b.substitution,b)]);return}}if(!$){F=z.toString();for(var It=new j("[]"),qt=F.length-1;qt>=0;qt--)It=new j(".",[new Re(n(F,qt),!1),It]);w.prepend([new Pe(b.goal.replace(new j("=",[Z,It])),b.substitution,b)])}}},"upcase_atom/2":function(w,b,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new Pe(b.goal.replace(new j("=",[z,new j(F.id.toUpperCase(),[])])),b.substitution,b)]):w.throw_error(x.error.type("atom",F,y.indicator))},"downcase_atom/2":function(w,b,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new Pe(b.goal.replace(new j("=",[z,new j(F.id.toLowerCase(),[])])),b.substitution,b)]):w.throw_error(x.error.type("atom",F,y.indicator))},"atomic_list_concat/2":function(w,b,y){var F=y.args[0],z=y.args[1];w.prepend([new Pe(b.goal.replace(new j("atomic_list_concat",[F,new j("",[]),z])),b.substitution,b)])},"atomic_list_concat/3":function(w,b,y){var F=y.args[0],z=y.args[1],Z=y.args[2];if(x.type.is_variable(z)||x.type.is_variable(F)&&x.type.is_variable(Z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_list(F))w.throw_error(x.error.type("list",F,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_atom(Z))w.throw_error(x.error.type("atom",Z,y.indicator));else if(x.type.is_variable(Z)){for(var oe="",xe=F;x.type.is_term(xe)&&xe.indicator==="./2";){if(!x.type.is_atom(xe.args[0])&&!x.type.is_number(xe.args[0])){w.throw_error(x.error.type("atomic",xe.args[0],y.indicator));return}oe!==""&&(oe+=z.id),x.type.is_atom(xe.args[0])?oe+=xe.args[0].id:oe+=""+xe.args[0].value,xe=xe.args[1]}oe=new j(oe,[]),x.type.is_variable(xe)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_term(xe)||xe.indicator!=="[]/0"?w.throw_error(x.error.type("list",F,y.indicator)):w.prepend([new Pe(b.goal.replace(new j("=",[oe,Z])),b.substitution,b)])}else{var $=g(s(Z.id.split(z.id),function(Te){return new j(Te,[])}));w.prepend([new Pe(b.goal.replace(new j("=",[$,F])),b.substitution,b)])}},"@=/2":function(w,b,y){x.compare(y.args[0],y.args[1])>0&&w.success(b)},"@>=/2":function(w,b,y){x.compare(y.args[0],y.args[1])>=0&&w.success(b)},"compare/3":function(w,b,y){var F=y.args[0],z=y.args[1],Z=y.args[2];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_atom(F)&&["<",">","="].indexOf(F.id)===-1)w.throw_error(x.type.domain("order",F,y.indicator));else{var $=x.compare(z,Z);$=$===0?"=":$===-1?"<":">",w.prepend([new Pe(b.goal.replace(new j("=",[F,new j($,[])])),b.substitution,b)])}},"is/2":function(w,b,y){var F=y.args[1].interpret(w);x.type.is_number(F)?w.prepend([new Pe(b.goal.replace(new j("=",[y.args[0],F],w.level)),b.substitution,b)]):w.throw_error(F)},"between/3":function(w,b,y){var F=y.args[0],z=y.args[1],Z=y.args[2];if(x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_integer(F))w.throw_error(x.error.type("integer",F,y.indicator));else if(!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",Z,y.indicator));else if(x.type.is_variable(Z)){var $=[new Pe(b.goal.replace(new j("=",[Z,F])),b.substitution,b)];F.value=Z.value&&w.success(b)},"succ/2":function(w,b,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)&&x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_variable(F)&&!x.type.is_integer(F)?w.throw_error(x.error.type("integer",F,y.indicator)):!x.type.is_variable(z)&&!x.type.is_integer(z)?w.throw_error(x.error.type("integer",z,y.indicator)):!x.type.is_variable(F)&&F.value<0?w.throw_error(x.error.domain("not_less_than_zero",F,y.indicator)):!x.type.is_variable(z)&&z.value<0?w.throw_error(x.error.domain("not_less_than_zero",z,y.indicator)):(x.type.is_variable(z)||z.value>0)&&(x.type.is_variable(F)?w.prepend([new Pe(b.goal.replace(new j("=",[F,new Re(z.value-1,!1)])),b.substitution,b)]):w.prepend([new Pe(b.goal.replace(new j("=",[z,new Re(F.value+1,!1)])),b.substitution,b)]))},"=:=/2":function(w,b,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F===0&&w.success(b)},"=\\=/2":function(w,b,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F!==0&&w.success(b)},"/2":function(w,b,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>0&&w.success(b)},">=/2":function(w,b,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>=0&&w.success(b)},"var/1":function(w,b,y){x.type.is_variable(y.args[0])&&w.success(b)},"atom/1":function(w,b,y){x.type.is_atom(y.args[0])&&w.success(b)},"atomic/1":function(w,b,y){x.type.is_atomic(y.args[0])&&w.success(b)},"compound/1":function(w,b,y){x.type.is_compound(y.args[0])&&w.success(b)},"integer/1":function(w,b,y){x.type.is_integer(y.args[0])&&w.success(b)},"float/1":function(w,b,y){x.type.is_float(y.args[0])&&w.success(b)},"number/1":function(w,b,y){x.type.is_number(y.args[0])&&w.success(b)},"nonvar/1":function(w,b,y){x.type.is_variable(y.args[0])||w.success(b)},"ground/1":function(w,b,y){y.variables().length===0&&w.success(b)},"acyclic_term/1":function(w,b,y){for(var F=b.substitution.apply(b.substitution),z=y.args[0].variables(),Z=0;Z0?Pt[Pt.length-1]:null,Pt!==null&&(qt=W(w,Pt,0,w.__get_max_priority(),!1))}if(qt.type===p&&qt.len===Pt.length-1&&gn.value==="."){qt=qt.value.rename(w);var Pr=new j("=",[z,qt]);if(oe.variables){var Ir=g(s(ye(qt.variables()),function(Nr){return new De(Nr)}));Pr=new j(",",[Pr,new j("=",[oe.variables,Ir])])}if(oe.variable_names){var Ir=g(s(ye(qt.variables()),function(nn){var ai;for(ai in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(ai)&&w.session.renamed_variables[ai]===nn)break;return new j("=",[new j(ai,[]),new De(nn)])}));Pr=new j(",",[Pr,new j("=",[oe.variable_names,Ir])])}if(oe.singletons){var Ir=g(s(new Ye(qt,null).singleton_variables(),function(nn){var ai;for(ai in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(ai)&&w.session.renamed_variables[ai]===nn)break;return new j("=",[new j(ai,[]),new De(nn)])}));Pr=new j(",",[Pr,new j("=",[oe.singletons,Ir])])}w.prepend([new Pe(b.goal.replace(Pr),b.substitution,b)])}else qt.type===p?w.throw_error(x.error.syntax(Pt[qt.len],"unexpected token",!1)):w.throw_error(qt.value)}}},"write/1":function(w,b,y){var F=y.args[0];w.prepend([new Pe(b.goal.replace(new j(",",[new j("current_output",[new De("S")]),new j("write",[new De("S"),F])])),b.substitution,b)])},"write/2":function(w,b,y){var F=y.args[0],z=y.args[1];w.prepend([new Pe(b.goal.replace(new j("write_term",[F,z,new j(".",[new j("quoted",[new j("false",[])]),new j(".",[new j("ignore_ops",[new j("false")]),new j(".",[new j("numbervars",[new j("true")]),new j("[]",[])])])])])),b.substitution,b)])},"writeq/1":function(w,b,y){var F=y.args[0];w.prepend([new Pe(b.goal.replace(new j(",",[new j("current_output",[new De("S")]),new j("writeq",[new De("S"),F])])),b.substitution,b)])},"writeq/2":function(w,b,y){var F=y.args[0],z=y.args[1];w.prepend([new Pe(b.goal.replace(new j("write_term",[F,z,new j(".",[new j("quoted",[new j("true",[])]),new j(".",[new j("ignore_ops",[new j("false")]),new j(".",[new j("numbervars",[new j("true")]),new j("[]",[])])])])])),b.substitution,b)])},"write_canonical/1":function(w,b,y){var F=y.args[0];w.prepend([new Pe(b.goal.replace(new j(",",[new j("current_output",[new De("S")]),new j("write_canonical",[new De("S"),F])])),b.substitution,b)])},"write_canonical/2":function(w,b,y){var F=y.args[0],z=y.args[1];w.prepend([new Pe(b.goal.replace(new j("write_term",[F,z,new j(".",[new j("quoted",[new j("true",[])]),new j(".",[new j("ignore_ops",[new j("true")]),new j(".",[new j("numbervars",[new j("false")]),new j("[]",[])])])])])),b.substitution,b)])},"write_term/2":function(w,b,y){var F=y.args[0],z=y.args[1];w.prepend([new Pe(b.goal.replace(new j(",",[new j("current_output",[new De("S")]),new j("write_term",[new De("S"),F,z])])),b.substitution,b)])},"write_term/3":function(w,b,y){var F=y.args[0],z=y.args[1],Z=y.args[2],$=x.type.is_stream(F)?F:w.get_stream_by_alias(F.id);if(x.type.is_variable(F)||x.type.is_variable(Z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else if(!x.type.is_stream(F)&&!x.type.is_atom(F))w.throw_error(x.error.domain("stream_or_alias",F,y.indicator));else if(!x.type.is_stream($)||$.stream===null)w.throw_error(x.error.existence("stream",F,y.indicator));else if($.input)w.throw_error(x.error.permission("output","stream",F,y.indicator));else if($.type==="binary")w.throw_error(x.error.permission("output","binary_stream",F,y.indicator));else if($.position==="past_end_of_stream"&&$.eof_action==="error")w.throw_error(x.error.permission("output","past_end_of_stream",F,y.indicator));else{for(var oe={},xe=Z,Te;x.type.is_term(xe)&&xe.indicator==="./2";){if(Te=xe.args[0],x.type.is_variable(Te)){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_write_option(Te)){w.throw_error(x.error.domain("write_option",Te,y.indicator));return}oe[Te.id]=Te.args[0].id==="true",xe=xe.args[1]}if(xe.indicator!=="[]/0"){x.type.is_variable(xe)?w.throw_error(x.error.instantiation(y.indicator)):w.throw_error(x.error.type("list",Z,y.indicator));return}else{oe.session=w.session;var lt=z.toString(oe);$.stream.put(lt,$.position),typeof $.position=="number"&&($.position+=lt.length),w.success(b)}}},"halt/0":function(w,b,y){w.points=[]},"halt/1":function(w,b,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_integer(F)?w.points=[]:w.throw_error(x.error.type("integer",F,y.indicator))},"current_prolog_flag/2":function(w,b,y){var F=y.args[0],z=y.args[1];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_flag(F))w.throw_error(x.error.domain("prolog_flag",F,y.indicator));else{var Z=[];for(var $ in x.flag)if(x.flag.hasOwnProperty($)){var oe=new j(",",[new j("=",[new j($),F]),new j("=",[w.get_flag($),z])]);Z.push(new Pe(b.goal.replace(oe),b.substitution,b))}w.prepend(Z)}},"set_prolog_flag/2":function(w,b,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)||x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?x.type.is_flag(F)?x.type.is_value_flag(F,z)?x.type.is_modifiable_flag(F)?(w.session.flag[F.id]=z,w.success(b)):w.throw_error(x.error.permission("modify","flag",F)):w.throw_error(x.error.domain("flag_value",new j("+",[F,z]),y.indicator)):w.throw_error(x.error.domain("prolog_flag",F,y.indicator)):w.throw_error(x.error.type("atom",F,y.indicator))}},flag:{bounded:{allowed:[new j("true"),new j("false")],value:new j("true"),changeable:!1},max_integer:{allowed:[new Re(Number.MAX_SAFE_INTEGER)],value:new Re(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new Re(Number.MIN_SAFE_INTEGER)],value:new Re(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new j("down"),new j("toward_zero")],value:new j("toward_zero"),changeable:!1},char_conversion:{allowed:[new j("on"),new j("off")],value:new j("on"),changeable:!0},debug:{allowed:[new j("on"),new j("off")],value:new j("off"),changeable:!0},max_arity:{allowed:[new j("unbounded")],value:new j("unbounded"),changeable:!1},unknown:{allowed:[new j("error"),new j("fail"),new j("warning")],value:new j("error"),changeable:!0},double_quotes:{allowed:[new j("chars"),new j("codes"),new j("atom")],value:new j("codes"),changeable:!0},occurs_check:{allowed:[new j("false"),new j("true")],value:new j("false"),changeable:!0},dialect:{allowed:[new j("tau")],value:new j("tau"),changeable:!1},version_data:{allowed:[new j("tau",[new Re(t.major,!1),new Re(t.minor,!1),new Re(t.patch,!1),new j(t.status)])],value:new j("tau",[new Re(t.major,!1),new Re(t.minor,!1),new Re(t.patch,!1),new j(t.status)]),changeable:!1},nodejs:{allowed:[new j("yes"),new j("no")],value:new j(typeof tc<"u"&&tc.exports?"yes":"no"),changeable:!1}},unify:function(w,b,y){y=y===void 0?!1:y;for(var F=[{left:w,right:b}],z={};F.length!==0;){var Z=F.pop();if(w=Z.left,b=Z.right,x.type.is_term(w)&&x.type.is_term(b)){if(w.indicator!==b.indicator)return null;for(var $=0;$z.value?1:0:z}else return F},operate:function(w,b){if(x.type.is_operator(b)){for(var y=x.type.is_operator(b),F=[],z,Z=!1,$=0;$w.get_flag("max_integer").value||z0?w.start+w.matches[0].length:w.start,z=y?new j("token_not_found"):new j("found",[new j(w.value.toString())]),Z=new j(".",[new j("line",[new Re(w.line+1)]),new j(".",[new j("column",[new Re(F+1)]),new j(".",[z,new j("[]",[])])])]);return new j("error",[new j("syntax_error",[new j(b)]),Z])},syntax_by_predicate:function(w,b){return new j("error",[new j("syntax_error",[new j(w)]),X(b)])}},warning:{singleton:function(w,b,y){for(var F=new j("[]"),z=w.length-1;z>=0;z--)F=new j(".",[new De(w[z]),F]);return new j("warning",[new j("singleton_variables",[F,X(b)]),new j(".",[new j("line",[new Re(y,!1)]),new j("[]")])])},failed_goal:function(w,b){return new j("warning",[new j("failed_goal",[w]),new j(".",[new j("line",[new Re(b,!1)]),new j("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,b,F){b instanceof ke&&(b=b.thread);var F=F||{};if(F.session=b?b.session:void 0,x.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var z=0,Z="";if(x.type.is_substitution(w)){var $=w.domain(!0);w=w.filter(function(Te,lt){return!x.type.is_variable(lt)||$.indexOf(lt.id)!==-1&&Te!==lt.id})}for(var oe in w.links)w.links.hasOwnProperty(oe)&&(z++,Z!==""&&(Z+=", "),Z+=oe.toString(F)+" = "+w.links[oe].toString(F));var xe=typeof b>"u"||b.points.length>0?" ;":".";return z===0?"true"+xe:Z+xe},flatten_error:function(w){if(!x.type.is_error(w))return null;w=w.args[0];var b={};return b.type=w.args[0].id,b.thrown=b.type==="syntax_error"?null:w.args[1].id,b.expected=null,b.found=null,b.representation=null,b.existence=null,b.existence_type=null,b.line=null,b.column=null,b.permission_operation=null,b.permission_type=null,b.evaluation_type=null,b.type==="type_error"||b.type==="domain_error"?(b.expected=w.args[0].args[0].id,b.found=w.args[0].args[1].toString()):b.type==="syntax_error"?w.args[1].indicator==="./2"?(b.expected=w.args[0].args[0].id,b.found=w.args[1].args[1].args[1].args[0],b.found=b.found.id==="token_not_found"?b.found.id:b.found.args[0].id,b.line=w.args[1].args[0].args[0].value,b.column=w.args[1].args[1].args[0].args[0].value):b.thrown=w.args[1].id:b.type==="permission_error"?(b.found=w.args[0].args[2].toString(),b.permission_operation=w.args[0].args[0].id,b.permission_type=w.args[0].args[1].id):b.type==="evaluation_error"?b.evaluation_type=w.args[0].args[0].id:b.type==="representation_error"?b.representation=w.args[0].args[0].id:b.type==="existence_error"&&(b.existence=w.args[0].args[1].toString(),b.existence_type=w.args[0].args[0].id),b},create:function(w){return new x.type.Session(w)}};typeof tc<"u"?tc.exports=x:window.pl=x})()});function nve(t,e,r){t.prepend(r.map(s=>new gl.default.type.State(e.goal.replace(s),e.substitution,e)))}function f9(t){let e=sve.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function ove(t,e){sve.set(t,e),t.consult(`:- use_module(library(${OSt.id})).`)}var A9,gl,ive,V0,FSt,NSt,sve,OSt,ave=Ct(()=>{Ve();A9=et(aS()),gl=et(u9()),ive=et(Ie("vm")),{is_atom:V0,is_variable:FSt,is_instantiated_list:NSt}=gl.default.type;sve=new WeakMap;OSt=new gl.default.type.Module("constraints",{"project_workspaces_by_descriptor/3":(t,e,r)=>{let[s,a,n]=r.args;if(!V0(s)||!V0(a)){t.throw_error(gl.default.error.instantiation(r.indicator));return}let c=q.parseIdent(s.id),f=q.makeDescriptor(c,a.id),h=f9(t).tryWorkspaceByDescriptor(f);FSt(n)&&h!==null&&nve(t,e,[new gl.default.type.Term("=",[n,new gl.default.type.Term(String(h.relativeCwd))])]),V0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},"workspace_field/3":(t,e,r)=>{let[s,a,n]=r.args;if(!V0(s)||!V0(a)){t.throw_error(gl.default.error.instantiation(r.indicator));return}let f=f9(t).tryWorkspaceByCwd(s.id);if(f==null)return;let p=(0,A9.default)(f.manifest.raw,a.id);typeof p>"u"||nve(t,e,[new gl.default.type.Term("=",[n,new gl.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},"workspace_field_test/3":(t,e,r)=>{let[s,a,n]=r.args;t.prepend([new gl.default.type.State(e.goal.replace(new gl.default.type.Term("workspace_field_test",[s,a,n,new gl.default.type.Term("[]",[])])),e.substitution,e)])},"workspace_field_test/4":(t,e,r)=>{let[s,a,n,c]=r.args;if(!V0(s)||!V0(a)||!V0(n)||!NSt(c)){t.throw_error(gl.default.error.instantiation(r.indicator));return}let p=f9(t).tryWorkspaceByCwd(s.id);if(p==null)return;let h=(0,A9.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[S,P]of c.toJavaScript().entries())E[`$${S}`]=P;ive.default.runInNewContext(n.id,E)&&t.success(e)}},["project_workspaces_by_descriptor/3","workspace_field/3","workspace_field_test/3","workspace_field_test/4"])});var yS={};Vt(yS,{Constraints:()=>h9,DependencyType:()=>fve});function yo(t){if(t instanceof JC.default.type.Num)return t.value;if(t instanceof JC.default.type.Term)switch(t.indicator){case"throw/1":return yo(t.args[0]);case"error/1":return yo(t.args[0]);case"error/2":if(t.args[0]instanceof JC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(yo(t.args[0]),...yo(t.args[1]));{let e=yo(t.args[0]);return e.message+=` (in ${yo(t.args[1])})`,e}case"syntax_error/1":return new Yt(43,`Syntax error: ${yo(t.args[0])}`);case"existence_error/2":return new Yt(44,`Existence error: ${yo(t.args[0])} ${yo(t.args[1])} not found`);case"instantiation_error/0":return new Yt(75,"Instantiation error: an argument is variable when an instantiated argument was expected");case"line/1":return{line:yo(t.args[0])};case"column/1":return{column:yo(t.args[0])};case"found/1":return{found:yo(t.args[0])};case"./2":return[yo(t.args[0])].concat(yo(t.args[1]));case"//2":return`${yo(t.args[0])}/${yo(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function cve(t){let e;try{e=yo(t)}catch(r){throw typeof r=="string"?new Yt(42,`Unknown error: ${t} (note: ${r})`):r}return typeof e.line<"u"&&typeof e.column<"u"&&(e.message+=` at line ${e.line}, column ${e.column}`),e}function bm(t){return t.id==="null"?null:`${t.toJavaScript()}`}function LSt(t){if(t.id==="null")return null;{let e=t.toJavaScript();if(typeof e!="string")return JSON.stringify(e);try{return JSON.stringify(JSON.parse(e))}catch{return JSON.stringify(e)}}}function K0(t){return typeof t=="string"?`'${t}'`:"[]"}var uve,JC,fve,lve,p9,h9,ES=Ct(()=>{Ve();Ve();bt();uve=et(HBe()),JC=et(u9());gS();ave();(0,uve.default)(JC.default);fve=(s=>(s.Dependencies="dependencies",s.DevDependencies="devDependencies",s.PeerDependencies="peerDependencies",s))(fve||{}),lve=["dependencies","devDependencies","peerDependencies"];p9=class{constructor(e,r){let s=1e3*e.workspaces.length;this.session=JC.default.create(s),ove(this.session,e),this.session.consult(":- use_module(library(lists))."),this.session.consult(r)}fetchNextAnswer(){return new Promise(e=>{this.session.answer(r=>{e(r)})})}async*makeQuery(e){let r=this.session.query(e);if(r!==!0)throw cve(r);for(;;){let s=await this.fetchNextAnswer();if(s===null)throw new Yt(79,"Resolution limit exceeded");if(!s)break;if(s.id==="throw")throw cve(s);yield s}}};h9=class t{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");le.existsSync(r)&&(this.source=le.readFileSync(r,"utf8"))}static async find(e){return new t(e)}getProjectDatabase(){let e="";for(let r of lve)e+=`dependency_type(${r}). -`;for(let r of this.project.workspacesByCwd.values()){let s=r.relativeCwd;e+=`workspace(${K0(s)}). -`,e+=`workspace_ident(${K0(s)}, ${K0(q.stringifyIdent(r.anchoredLocator))}). -`,e+=`workspace_version(${K0(s)}, ${K0(r.manifest.version)}). -`;for(let a of lve)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${K0(s)}, ${K0(q.stringifyIdent(n))}, ${K0(n.range)}, ${a}). -`}return e+=`workspace(_) :- false. -`,e+=`workspace_ident(_, _) :- false. -`,e+=`workspace_version(_, _) :- false. -`,e+=`workspace_has_dependency(_, _, _, _) :- false. -`,e}getDeclarations(){let e="";return e+=`gen_enforced_dependency(_, _, _, _) :- false. -`,e+=`gen_enforced_field(_, _, _) :- false. -`,e}get fullSource(){return`${this.getProjectDatabase()} -${this.source} -${this.getDeclarations()}`}createSession(){return new p9(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),s=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:c,dependencyType:f}of e){let p=hS([f,q.stringifyIdent(n)]),h=je.getMapWithDefault(s,a.cwd);je.getMapWithDefault(h,p).set(c??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:c}of r){let f=hS(n),p=je.getMapWithDefault(s,a.cwd);je.getMapWithDefault(p,f).set(JSON.parse(c)??void 0,new Set)}return{manifestUpdates:s,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let s of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=K.resolve(this.project.cwd,bm(s.links.WorkspaceCwd)),n=bm(s.links.DependencyIdent),c=bm(s.links.DependencyRange),f=bm(s.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=q.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:c,dependencyType:f})}return je.sortMap(r,[({dependencyRange:s})=>s!==null?"0":"1",({workspace:s})=>q.stringifyIdent(s.anchoredLocator),({dependencyIdent:s})=>q.stringifyIdent(s)])}async genEnforcedFields(e){let r=[];for await(let s of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=K.resolve(this.project.cwd,bm(s.links.WorkspaceCwd)),n=bm(s.links.FieldPath),c=LSt(s.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let f=this.project.getWorkspaceByCwd(a);r.push({workspace:f,fieldPath:n,fieldValue:c})}return je.sortMap(r,[({workspace:s})=>q.stringifyIdent(s.anchoredLocator),({fieldPath:s})=>s])}async*query(e){let r=this.createSession();for await(let s of r.makeQuery(e)){let a={};for(let[n,c]of Object.entries(s.links))n!=="_"&&(a[n]=bm(c));yield a}}}});var Ive=L(pF=>{"use strict";Object.defineProperty(pF,"__esModule",{value:!0});function NS(t){let e=[...t.caches],r=e.shift();return r===void 0?Eve():{get(s,a,n={miss:()=>Promise.resolve()}){return r.get(s,a,n).catch(()=>NS({caches:e}).get(s,a,n))},set(s,a){return r.set(s,a).catch(()=>NS({caches:e}).set(s,a))},delete(s){return r.delete(s).catch(()=>NS({caches:e}).delete(s))},clear(){return r.clear().catch(()=>NS({caches:e}).clear())}}}function Eve(){return{get(t,e,r={miss:()=>Promise.resolve()}){return e().then(a=>Promise.all([a,r.miss(a)])).then(([a])=>a)},set(t,e){return Promise.resolve(e)},delete(t){return Promise.resolve()},clear(){return Promise.resolve()}}}pF.createFallbackableCache=NS;pF.createNullCache=Eve});var wve=L((Apr,Cve)=>{Cve.exports=Ive()});var Bve=L(P9=>{"use strict";Object.defineProperty(P9,"__esModule",{value:!0});function rDt(t={serializable:!0}){let e={};return{get(r,s,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let c=s(),f=a&&a.miss||(()=>Promise.resolve());return c.then(p=>f(p)).then(()=>c)},set(r,s){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(s):s,Promise.resolve(s)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}P9.createInMemoryCache=rDt});var Sve=L((hpr,vve)=>{vve.exports=Bve()});var bve=L(ef=>{"use strict";Object.defineProperty(ef,"__esModule",{value:!0});function nDt(t,e,r){let s={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===x9.WithinHeaders?s:{}},queryParameters(){return t===x9.WithinQueryParameters?s:{}}}}function iDt(t){let e=0,r=()=>(e++,new Promise(s=>{setTimeout(()=>{s(t(r))},Math.min(100*e,1e3))}));return t(r)}function Dve(t,e=(r,s)=>Promise.resolve()){return Object.assign(t,{wait(r){return Dve(t.then(s=>Promise.all([e(s,r),s])).then(s=>s[1]))}})}function sDt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),s=t[e];t[e]=t[r],t[r]=s}return t}function oDt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function aDt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var lDt="4.22.1",cDt=t=>()=>t.transporter.requester.destroy(),x9={WithinQueryParameters:0,WithinHeaders:1};ef.AuthMode=x9;ef.addMethods=oDt;ef.createAuth=nDt;ef.createRetryablePromise=iDt;ef.createWaitablePromise=Dve;ef.destroy=cDt;ef.encode=aDt;ef.shuffle=sDt;ef.version=lDt});var OS=L((dpr,Pve)=>{Pve.exports=bve()});var xve=L(k9=>{"use strict";Object.defineProperty(k9,"__esModule",{value:!0});var uDt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};k9.MethodEnum=uDt});var LS=L((ypr,kve)=>{kve.exports=xve()});var Wve=L(Vi=>{"use strict";Object.defineProperty(Vi,"__esModule",{value:!0});var Tve=LS();function Q9(t,e){let r=t||{},s=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(s[a]=r[a])}),{data:Object.entries(s).length>0?s:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var MS={Read:1,Write:2,Any:3},sw={Up:1,Down:2,Timeouted:3},Rve=2*60*1e3;function R9(t,e=sw.Up){return{...t,status:e,lastUpdate:Date.now()}}function Fve(t){return t.status===sw.Up||Date.now()-t.lastUpdate>Rve}function Nve(t){return t.status===sw.Timeouted&&Date.now()-t.lastUpdate<=Rve}function F9(t){return typeof t=="string"?{protocol:"https",url:t,accept:MS.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||MS.Any}}function fDt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(R9(r))))).then(r=>{let s=r.filter(f=>Fve(f)),a=r.filter(f=>Nve(f)),n=[...s,...a],c=n.length>0?n.map(f=>F9(f)):e;return{getTimeout(f,p){return(a.length===0&&f===0?1:a.length+3+f)*p},statelessHosts:c}})}var ADt=({isTimedOut:t,status:e})=>!t&&~~e===0,pDt=t=>{let e=t.status;return t.isTimedOut||ADt(t)||~~(e/100)!==2&&~~(e/100)!==4},hDt=({status:t})=>~~(t/100)===2,gDt=(t,e)=>pDt(t)?e.onRetry(t):hDt(t)?e.onSuccess(t):e.onFail(t);function Qve(t,e,r,s){let a=[],n=Uve(r,s),c=Hve(t,s),f=r.method,p=r.method!==Tve.MethodEnum.Get?{}:{...r.data,...s.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...s.queryParameters},E=0,C=(S,P)=>{let I=S.pop();if(I===void 0)throw Gve(T9(a));let R={data:n,headers:c,method:f,url:Mve(I,r.path,h),connectTimeout:P(E,t.timeouts.connect),responseTimeout:P(E,s.timeout)},N=W=>{let te={request:R,response:W,host:I,triesLeft:S.length};return a.push(te),te},U={onSuccess:W=>Ove(W),onRetry(W){let te=N(W);return W.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",N9(te)),t.hostsCache.set(I,R9(I,W.isTimedOut?sw.Timeouted:sw.Down))]).then(()=>C(S,P))},onFail(W){throw N(W),Lve(W,T9(a))}};return t.requester.send(R).then(W=>gDt(W,U))};return fDt(t.hostsCache,e).then(S=>C([...S.statelessHosts].reverse(),S.getTimeout))}function dDt(t){let{hostsCache:e,logger:r,requester:s,requestsCache:a,responsesCache:n,timeouts:c,userAgent:f,hosts:p,queryParameters:h,headers:E}=t,C={hostsCache:e,logger:r,requester:s,requestsCache:a,responsesCache:n,timeouts:c,userAgent:f,headers:E,queryParameters:h,hosts:p.map(S=>F9(S)),read(S,P){let I=Q9(P,C.timeouts.read),R=()=>Qve(C,C.hosts.filter(W=>(W.accept&MS.Read)!==0),S,I);if((I.cacheable!==void 0?I.cacheable:S.cacheable)!==!0)return R();let U={request:S,mappedRequestOptions:I,transporter:{queryParameters:C.queryParameters,headers:C.headers}};return C.responsesCache.get(U,()=>C.requestsCache.get(U,()=>C.requestsCache.set(U,R()).then(W=>Promise.all([C.requestsCache.delete(U),W]),W=>Promise.all([C.requestsCache.delete(U),Promise.reject(W)])).then(([W,te])=>te)),{miss:W=>C.responsesCache.set(U,W)})},write(S,P){return Qve(C,C.hosts.filter(I=>(I.accept&MS.Write)!==0),S,Q9(P,C.timeouts.write))}};return C}function mDt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let s=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(s)===-1&&(e.value=`${e.value}${s}`),e}};return e}function Ove(t){try{return JSON.parse(t.content)}catch(e){throw qve(e.message,t)}}function Lve({content:t,status:e},r){let s=t;try{s=JSON.parse(t).message}catch{}return jve(s,e,r)}function yDt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function Mve(t,e,r){let s=_ve(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return s.length&&(a+=`?${s}`),a}function _ve(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>yDt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function Uve(t,e){if(t.method===Tve.MethodEnum.Get||t.data===void 0&&e.data===void 0)return;let r=Array.isArray(t.data)?t.data:{...t.data,...e.data};return JSON.stringify(r)}function Hve(t,e){let r={...t.headers,...e.headers},s={};return Object.keys(r).forEach(a=>{let n=r[a];s[a.toLowerCase()]=n}),s}function T9(t){return t.map(e=>N9(e))}function N9(t){let e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...t,request:{...t.request,headers:{...t.request.headers,...e}}}}function jve(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function qve(t,e){return{name:"DeserializationError",message:t,response:e}}function Gve(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Vi.CallEnum=MS;Vi.HostStatusEnum=sw;Vi.createApiError=jve;Vi.createDeserializationError=qve;Vi.createMappedRequestOptions=Q9;Vi.createRetryError=Gve;Vi.createStatefulHost=R9;Vi.createStatelessHost=F9;Vi.createTransporter=dDt;Vi.createUserAgent=mDt;Vi.deserializeFailure=Lve;Vi.deserializeSuccess=Ove;Vi.isStatefulHostTimeouted=Nve;Vi.isStatefulHostUp=Fve;Vi.serializeData=Uve;Vi.serializeHeaders=Hve;Vi.serializeQueryParameters=_ve;Vi.serializeUrl=Mve;Vi.stackFrameWithoutCredentials=N9;Vi.stackTraceWithoutCredentials=T9});var _S=L((Ipr,Yve)=>{Yve.exports=Wve()});var Vve=L(z0=>{"use strict";Object.defineProperty(z0,"__esModule",{value:!0});var ow=OS(),EDt=_S(),US=LS(),IDt=t=>{let e=t.region||"us",r=ow.createAuth(ow.AuthMode.WithinHeaders,t.appId,t.apiKey),s=EDt.createTransporter({hosts:[{url:`analytics.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a=t.appId;return ow.addMethods({appId:a,transporter:s},t.methods)},CDt=t=>(e,r)=>t.transporter.write({method:US.MethodEnum.Post,path:"2/abtests",data:e},r),wDt=t=>(e,r)=>t.transporter.write({method:US.MethodEnum.Delete,path:ow.encode("2/abtests/%s",e)},r),BDt=t=>(e,r)=>t.transporter.read({method:US.MethodEnum.Get,path:ow.encode("2/abtests/%s",e)},r),vDt=t=>e=>t.transporter.read({method:US.MethodEnum.Get,path:"2/abtests"},e),SDt=t=>(e,r)=>t.transporter.write({method:US.MethodEnum.Post,path:ow.encode("2/abtests/%s/stop",e)},r);z0.addABTest=CDt;z0.createAnalyticsClient=IDt;z0.deleteABTest=wDt;z0.getABTest=BDt;z0.getABTests=vDt;z0.stopABTest=SDt});var Jve=L((wpr,Kve)=>{Kve.exports=Vve()});var Zve=L(HS=>{"use strict";Object.defineProperty(HS,"__esModule",{value:!0});var O9=OS(),DDt=_S(),zve=LS(),bDt=t=>{let e=t.region||"us",r=O9.createAuth(O9.AuthMode.WithinHeaders,t.appId,t.apiKey),s=DDt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return O9.addMethods({appId:t.appId,transporter:s},t.methods)},PDt=t=>e=>t.transporter.read({method:zve.MethodEnum.Get,path:"1/strategies/personalization"},e),xDt=t=>(e,r)=>t.transporter.write({method:zve.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);HS.createPersonalizationClient=bDt;HS.getPersonalizationStrategy=PDt;HS.setPersonalizationStrategy=xDt});var $ve=L((vpr,Xve)=>{Xve.exports=Zve()});var pSe=L(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var Kt=OS(),dl=_S(),br=LS(),kDt=Ie("crypto");function hF(t){let e=r=>t.request(r).then(s=>{if(t.batch!==void 0&&t.batch(s.hits),!t.shouldStop(s))return s.cursor?e({cursor:s.cursor}):e({page:(r.page||0)+1})});return e({})}var QDt=t=>{let e=t.appId,r=Kt.createAuth(t.authMode!==void 0?t.authMode:Kt.AuthMode.WithinHeaders,e,t.apiKey),s=dl.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:dl.CallEnum.Read},{url:`${e}.algolia.net`,accept:dl.CallEnum.Write}].concat(Kt.shuffle([{url:`${e}-1.algolianet.com`},{url:`${e}-2.algolianet.com`},{url:`${e}-3.algolianet.com`}])),...t,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a={transporter:s,appId:e,addAlgoliaAgent(n,c){s.userAgent.add({segment:n,version:c})},clearCache(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then(()=>{})}};return Kt.addMethods(a,t.methods)};function eSe(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function tSe(){return{name:"ObjectNotFoundError",message:"Object not found."}}function rSe(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var TDt=t=>(e,r)=>{let{queryParameters:s,...a}=r||{},n={acl:e,...s!==void 0?{queryParameters:s}:{}},c=(f,p)=>Kt.createRetryablePromise(h=>jS(t)(f.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:"1/keys",data:n},a),c)},RDt=t=>(e,r,s)=>{let a=dl.createMappedRequestOptions(s);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:br.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},FDt=t=>(e,r,s)=>t.transporter.write({method:br.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},s),NDt=t=>(e,r)=>Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(s,a)=>aw(t)(s.taskID,a)),gF=t=>(e,r,s)=>{let a=(n,c)=>qS(t)(e,{methods:{waitTask:ds}}).waitTask(n.taskID,c);return Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},s),a)},ODt=t=>(e,r,s)=>gF(t)(e,r,{...s,scope:[mF.Rules]}),LDt=t=>(e,r,s)=>gF(t)(e,r,{...s,scope:[mF.Settings]}),MDt=t=>(e,r,s)=>gF(t)(e,r,{...s,scope:[mF.Synonyms]}),_Dt=t=>(e,r)=>e.method===br.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),UDt=t=>(e,r)=>{let s=(a,n)=>Kt.createRetryablePromise(c=>jS(t)(e,n).then(c).catch(f=>{if(f.status!==404)throw f}));return Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Delete,path:Kt.encode("1/keys/%s",e)},r),s)},HDt=t=>(e,r,s)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},s),(n,c)=>aw(t)(n.taskID,c))},jDt=()=>(t,e)=>{let r=dl.serializeQueryParameters(e),s=kDt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(s+r).toString("base64")},jS=t=>(e,r)=>t.transporter.read({method:br.MethodEnum.Get,path:Kt.encode("1/keys/%s",e)},r),nSe=t=>(e,r)=>t.transporter.read({method:br.MethodEnum.Get,path:Kt.encode("1/task/%s",e.toString())},r),qDt=t=>e=>t.transporter.read({method:br.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),GDt=t=>e=>t.transporter.read({method:br.MethodEnum.Get,path:"1/logs"},e),WDt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,s=e.match(r);if(s===null)throw rSe();return parseInt(s[1],10)-Math.round(new Date().getTime()/1e3)},YDt=t=>e=>t.transporter.read({method:br.MethodEnum.Get,path:"1/clusters/mapping/top"},e),VDt=t=>(e,r)=>t.transporter.read({method:br.MethodEnum.Get,path:Kt.encode("1/clusters/mapping/%s",e)},r),KDt=t=>e=>{let{retrieveMappings:r,...s}=e||{};return r===!0&&(s.getClusters=!0),t.transporter.read({method:br.MethodEnum.Get,path:"1/clusters/mapping/pending"},s)},qS=t=>(e,r={})=>{let s={transporter:t.transporter,appId:t.appId,indexName:e};return Kt.addMethods(s,r.methods)},JDt=t=>e=>t.transporter.read({method:br.MethodEnum.Get,path:"1/keys"},e),zDt=t=>e=>t.transporter.read({method:br.MethodEnum.Get,path:"1/clusters"},e),ZDt=t=>e=>t.transporter.read({method:br.MethodEnum.Get,path:"1/indexes"},e),XDt=t=>e=>t.transporter.read({method:br.MethodEnum.Get,path:"1/clusters/mapping"},e),$Dt=t=>(e,r,s)=>{let a=(n,c)=>qS(t)(e,{methods:{waitTask:ds}}).waitTask(n.taskID,c);return Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},s),a)},ebt=t=>(e,r)=>{let s=(a,n)=>Promise.all(Object.keys(a.taskID).map(c=>qS(t)(c,{methods:{waitTask:ds}}).waitTask(a.taskID[c],n)));return Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),s)},tbt=t=>(e,r)=>t.transporter.read({method:br.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),rbt=t=>(e,r)=>{let s=e.map(a=>({...a,params:dl.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:br.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:s},cacheable:!0},r)},nbt=t=>(e,r)=>Promise.all(e.map(s=>{let{facetName:a,facetQuery:n,...c}=s.params;return qS(t)(s.indexName,{methods:{searchForFacetValues:uSe}}).searchForFacetValues(a,n,{...r,...c})})),ibt=t=>(e,r)=>{let s=dl.createMappedRequestOptions(r);return s.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:br.MethodEnum.Delete,path:"1/clusters/mapping"},s)},sbt=t=>(e,r,s)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},s),(n,c)=>aw(t)(n.taskID,c))},obt=t=>(e,r)=>{let s=(a,n)=>Kt.createRetryablePromise(c=>jS(t)(e,n).catch(f=>{if(f.status!==404)throw f;return c()}));return Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("1/keys/%s/restore",e)},r),s)},abt=t=>(e,r,s)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},s),(n,c)=>aw(t)(n.taskID,c))},lbt=t=>(e,r,s)=>t.transporter.read({method:br.MethodEnum.Post,path:Kt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},s),cbt=t=>(e,r)=>t.transporter.read({method:br.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),ubt=t=>(e,r)=>Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(s,a)=>aw(t)(s.taskID,a)),fbt=t=>(e,r)=>{let s=Object.assign({},r),{queryParameters:a,...n}=r||{},c=a?{queryParameters:a}:{},f=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(s).filter(C=>f.indexOf(C)!==-1).every(C=>{if(Array.isArray(E[C])&&Array.isArray(s[C])){let S=E[C];return S.length===s[C].length&&S.every((P,I)=>P===s[C][I])}else return E[C]===s[C]}),h=(E,C)=>Kt.createRetryablePromise(S=>jS(t)(e,C).then(P=>p(P)?Promise.resolve():S()));return Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Put,path:Kt.encode("1/keys/%s",e),data:c},n),h)},aw=t=>(e,r)=>Kt.createRetryablePromise(s=>nSe(t)(e,r).then(a=>a.status!=="published"?s():void 0)),iSe=t=>(e,r)=>{let s=(a,n)=>ds(t)(a.taskID,n);return Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),s)},Abt=t=>e=>hF({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),pbt=t=>e=>{let r={hitsPerPage:1e3,...e};return hF({shouldStop:s=>s.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},hbt=t=>e=>{let r={hitsPerPage:1e3,...e};return hF({shouldStop:s=>s.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},dF=t=>(e,r,s)=>{let{batchSize:a,...n}=s||{},c={taskIDs:[],objectIDs:[]},f=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:C})),n).then(C=>(c.objectIDs=c.objectIDs.concat(C.objectIDs),c.taskIDs.push(C.taskID),E++,f(E)))};return Kt.createWaitablePromise(f(),(p,h)=>Promise.all(p.taskIDs.map(E=>ds(t)(E,h))))},gbt=t=>e=>Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/clear",t.indexName)},e),(r,s)=>ds(t)(r.taskID,s)),dbt=t=>e=>{let{forwardToReplicas:r,...s}=e||{},a=dl.createMappedRequestOptions(s);return r&&(a.queryParameters.forwardToReplicas=1),Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,c)=>ds(t)(n.taskID,c))},mbt=t=>e=>{let{forwardToReplicas:r,...s}=e||{},a=dl.createMappedRequestOptions(s);return r&&(a.queryParameters.forwardToReplicas=1),Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,c)=>ds(t)(n.taskID,c))},ybt=t=>(e,r)=>Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(s,a)=>ds(t)(s.taskID,a)),Ebt=t=>e=>Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Delete,path:Kt.encode("1/indexes/%s",t.indexName)},e),(r,s)=>ds(t)(r.taskID,s)),Ibt=t=>(e,r)=>Kt.createWaitablePromise(sSe(t)([e],r).then(s=>({taskID:s.taskIDs[0]})),(s,a)=>ds(t)(s.taskID,a)),sSe=t=>(e,r)=>{let s=e.map(a=>({objectID:a}));return dF(t)(s,xm.DeleteObject,r)},Cbt=t=>(e,r)=>{let{forwardToReplicas:s,...a}=r||{},n=dl.createMappedRequestOptions(a);return s&&(n.queryParameters.forwardToReplicas=1),Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Delete,path:Kt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(c,f)=>ds(t)(c.taskID,f))},wbt=t=>(e,r)=>{let{forwardToReplicas:s,...a}=r||{},n=dl.createMappedRequestOptions(a);return s&&(n.queryParameters.forwardToReplicas=1),Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Delete,path:Kt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(c,f)=>ds(t)(c.taskID,f))},Bbt=t=>e=>oSe(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),vbt=t=>(e,r,s)=>t.transporter.read({method:br.MethodEnum.Post,path:Kt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},s),Sbt=t=>(e,r)=>{let{query:s,paginate:a,...n}=r||{},c=0,f=()=>cSe(t)(s||"",{...n,page:c}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:c};if(c++,a===!1||c>=p.nbPages)throw tSe();return f()});return f()},Dbt=t=>(e,r)=>t.transporter.read({method:br.MethodEnum.Get,path:Kt.encode("1/indexes/%s/%s",t.indexName,e)},r),bbt=()=>(t,e)=>{for(let[r,s]of Object.entries(t.hits))if(s.objectID===e)return parseInt(r,10);return-1},Pbt=t=>(e,r)=>{let{attributesToRetrieve:s,...a}=r||{},n=e.map(c=>({indexName:t.indexName,objectID:c,...s?{attributesToRetrieve:s}:{}}));return t.transporter.read({method:br.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},xbt=t=>(e,r)=>t.transporter.read({method:br.MethodEnum.Get,path:Kt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),oSe=t=>e=>t.transporter.read({method:br.MethodEnum.Get,path:Kt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),kbt=t=>(e,r)=>t.transporter.read({method:br.MethodEnum.Get,path:Kt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),aSe=t=>(e,r)=>t.transporter.read({method:br.MethodEnum.Get,path:Kt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),Qbt=t=>(e,r)=>Kt.createWaitablePromise(lSe(t)([e],r).then(s=>({objectID:s.objectIDs[0],taskID:s.taskIDs[0]})),(s,a)=>ds(t)(s.taskID,a)),lSe=t=>(e,r)=>{let{createIfNotExists:s,...a}=r||{},n=s?xm.PartialUpdateObject:xm.PartialUpdateObjectNoCreate;return dF(t)(e,n,a)},Tbt=t=>(e,r)=>{let{safe:s,autoGenerateObjectIDIfNotExist:a,batchSize:n,...c}=r||{},f=(I,R,N,U)=>Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/operation",I),data:{operation:N,destination:R}},U),(W,te)=>ds(t)(W.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=L9({appId:t.appId,transporter:t.transporter,indexName:h}),C=[],S=f(t.indexName,h,"copy",{...c,scope:["settings","synonyms","rules"]});C.push(S);let P=(s?S.wait(c):S).then(()=>{let I=E(e,{...c,autoGenerateObjectIDIfNotExist:a,batchSize:n});return C.push(I),s?I.wait(c):I}).then(()=>{let I=f(h,t.indexName,"move",c);return C.push(I),s?I.wait(c):I}).then(()=>Promise.all(C)).then(([I,R,N])=>({objectIDs:R.objectIDs,taskIDs:[I.taskID,...R.taskIDs,N.taskID]}));return Kt.createWaitablePromise(P,(I,R)=>Promise.all(C.map(N=>N.wait(R))))},Rbt=t=>(e,r)=>M9(t)(e,{...r,clearExistingRules:!0}),Fbt=t=>(e,r)=>_9(t)(e,{...r,clearExistingSynonyms:!0}),Nbt=t=>(e,r)=>Kt.createWaitablePromise(L9(t)([e],r).then(s=>({objectID:s.objectIDs[0],taskID:s.taskIDs[0]})),(s,a)=>ds(t)(s.taskID,a)),L9=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:s,...a}=r||{},n=s?xm.AddObject:xm.UpdateObject;if(n===xm.UpdateObject){for(let c of e)if(c.objectID===void 0)return Kt.createWaitablePromise(Promise.reject(eSe()))}return dF(t)(e,n,a)},Obt=t=>(e,r)=>M9(t)([e],r),M9=t=>(e,r)=>{let{forwardToReplicas:s,clearExistingRules:a,...n}=r||{},c=dl.createMappedRequestOptions(n);return s&&(c.queryParameters.forwardToReplicas=1),a&&(c.queryParameters.clearExistingRules=1),Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},c),(f,p)=>ds(t)(f.taskID,p))},Lbt=t=>(e,r)=>_9(t)([e],r),_9=t=>(e,r)=>{let{forwardToReplicas:s,clearExistingSynonyms:a,replaceExistingSynonyms:n,...c}=r||{},f=dl.createMappedRequestOptions(c);return s&&(f.queryParameters.forwardToReplicas=1),(n||a)&&(f.queryParameters.replaceExistingSynonyms=1),Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},f),(p,h)=>ds(t)(p.taskID,h))},cSe=t=>(e,r)=>t.transporter.read({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),uSe=t=>(e,r,s)=>t.transporter.read({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},s),fSe=t=>(e,r)=>t.transporter.read({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),ASe=t=>(e,r)=>t.transporter.read({method:br.MethodEnum.Post,path:Kt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),Mbt=t=>(e,r)=>{let{forwardToReplicas:s,...a}=r||{},n=dl.createMappedRequestOptions(a);return s&&(n.queryParameters.forwardToReplicas=1),Kt.createWaitablePromise(t.transporter.write({method:br.MethodEnum.Put,path:Kt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(c,f)=>ds(t)(c.taskID,f))},ds=t=>(e,r)=>Kt.createRetryablePromise(s=>aSe(t)(e,r).then(a=>a.status!=="published"?s():void 0)),_bt={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",Inference:"inference",ListIndexes:"listIndexes",Logs:"logs",Personalization:"personalization",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},xm={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},mF={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},Ubt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},Hbt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Ft.ApiKeyACLEnum=_bt;Ft.BatchActionEnum=xm;Ft.ScopeEnum=mF;Ft.StrategyEnum=Ubt;Ft.SynonymEnum=Hbt;Ft.addApiKey=TDt;Ft.assignUserID=RDt;Ft.assignUserIDs=FDt;Ft.batch=iSe;Ft.browseObjects=Abt;Ft.browseRules=pbt;Ft.browseSynonyms=hbt;Ft.chunkedBatch=dF;Ft.clearDictionaryEntries=NDt;Ft.clearObjects=gbt;Ft.clearRules=dbt;Ft.clearSynonyms=mbt;Ft.copyIndex=gF;Ft.copyRules=ODt;Ft.copySettings=LDt;Ft.copySynonyms=MDt;Ft.createBrowsablePromise=hF;Ft.createMissingObjectIDError=eSe;Ft.createObjectNotFoundError=tSe;Ft.createSearchClient=QDt;Ft.createValidUntilNotFoundError=rSe;Ft.customRequest=_Dt;Ft.deleteApiKey=UDt;Ft.deleteBy=ybt;Ft.deleteDictionaryEntries=HDt;Ft.deleteIndex=Ebt;Ft.deleteObject=Ibt;Ft.deleteObjects=sSe;Ft.deleteRule=Cbt;Ft.deleteSynonym=wbt;Ft.exists=Bbt;Ft.findAnswers=vbt;Ft.findObject=Sbt;Ft.generateSecuredApiKey=jDt;Ft.getApiKey=jS;Ft.getAppTask=nSe;Ft.getDictionarySettings=qDt;Ft.getLogs=GDt;Ft.getObject=Dbt;Ft.getObjectPosition=bbt;Ft.getObjects=Pbt;Ft.getRule=xbt;Ft.getSecuredApiKeyRemainingValidity=WDt;Ft.getSettings=oSe;Ft.getSynonym=kbt;Ft.getTask=aSe;Ft.getTopUserIDs=YDt;Ft.getUserID=VDt;Ft.hasPendingMappings=KDt;Ft.initIndex=qS;Ft.listApiKeys=JDt;Ft.listClusters=zDt;Ft.listIndices=ZDt;Ft.listUserIDs=XDt;Ft.moveIndex=$Dt;Ft.multipleBatch=ebt;Ft.multipleGetObjects=tbt;Ft.multipleQueries=rbt;Ft.multipleSearchForFacetValues=nbt;Ft.partialUpdateObject=Qbt;Ft.partialUpdateObjects=lSe;Ft.removeUserID=ibt;Ft.replaceAllObjects=Tbt;Ft.replaceAllRules=Rbt;Ft.replaceAllSynonyms=Fbt;Ft.replaceDictionaryEntries=sbt;Ft.restoreApiKey=obt;Ft.saveDictionaryEntries=abt;Ft.saveObject=Nbt;Ft.saveObjects=L9;Ft.saveRule=Obt;Ft.saveRules=M9;Ft.saveSynonym=Lbt;Ft.saveSynonyms=_9;Ft.search=cSe;Ft.searchDictionaryEntries=lbt;Ft.searchForFacetValues=uSe;Ft.searchRules=fSe;Ft.searchSynonyms=ASe;Ft.searchUserIDs=cbt;Ft.setDictionarySettings=ubt;Ft.setSettings=Mbt;Ft.updateApiKey=fbt;Ft.waitAppTask=aw;Ft.waitTask=ds});var gSe=L((Dpr,hSe)=>{hSe.exports=pSe()});var dSe=L(yF=>{"use strict";Object.defineProperty(yF,"__esModule",{value:!0});function jbt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var qbt={Debug:1,Info:2,Error:3};yF.LogLevelEnum=qbt;yF.createNullLogger=jbt});var ySe=L((Ppr,mSe)=>{mSe.exports=dSe()});var wSe=L(U9=>{"use strict";Object.defineProperty(U9,"__esModule",{value:!0});var ESe=Ie("http"),ISe=Ie("https"),Gbt=Ie("url"),CSe={keepAlive:!0},Wbt=new ESe.Agent(CSe),Ybt=new ISe.Agent(CSe);function Vbt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:s={}}={}){let a=e||t||Wbt,n=r||t||Ybt;return{send(c){return new Promise(f=>{let p=Gbt.parse(c.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...s,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:c.method,headers:{...s&&s.headers?s.headers:{},...c.headers},...p.port!==void 0?{port:p.port||""}:{}},C=(p.protocol==="https:"?ISe:ESe).request(E,R=>{let N=[];R.on("data",U=>{N=N.concat(U)}),R.on("end",()=>{clearTimeout(P),clearTimeout(I),f({status:R.statusCode||0,content:Buffer.concat(N).toString(),isTimedOut:!1})})}),S=(R,N)=>setTimeout(()=>{C.abort(),f({status:0,content:N,isTimedOut:!0})},R*1e3),P=S(c.connectTimeout,"Connection timeout"),I;C.on("error",R=>{clearTimeout(P),clearTimeout(I),f({status:0,content:R.message,isTimedOut:!1})}),C.once("response",()=>{clearTimeout(P),I=S(c.responseTimeout,"Socket timeout")}),c.data!==void 0&&C.write(c.data),C.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}U9.createNodeHttpRequester=Vbt});var vSe=L((kpr,BSe)=>{BSe.exports=wSe()});var PSe=L((Qpr,bSe)=>{"use strict";var SSe=wve(),Kbt=Sve(),lw=Jve(),j9=OS(),H9=$ve(),jt=gSe(),Jbt=ySe(),zbt=vSe(),Zbt=_S();function DSe(t,e,r){let s={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:zbt.createNodeHttpRequester(),logger:Jbt.createNullLogger(),responsesCache:SSe.createNullCache(),requestsCache:SSe.createNullCache(),hostsCache:Kbt.createInMemoryCache(),userAgent:Zbt.createUserAgent(j9.version).add({segment:"Node.js",version:process.versions.node})},a={...s,...r},n=()=>c=>H9.createPersonalizationClient({...s,...c,methods:{getPersonalizationStrategy:H9.getPersonalizationStrategy,setPersonalizationStrategy:H9.setPersonalizationStrategy}});return jt.createSearchClient({...a,methods:{search:jt.multipleQueries,searchForFacetValues:jt.multipleSearchForFacetValues,multipleBatch:jt.multipleBatch,multipleGetObjects:jt.multipleGetObjects,multipleQueries:jt.multipleQueries,copyIndex:jt.copyIndex,copySettings:jt.copySettings,copyRules:jt.copyRules,copySynonyms:jt.copySynonyms,moveIndex:jt.moveIndex,listIndices:jt.listIndices,getLogs:jt.getLogs,listClusters:jt.listClusters,multipleSearchForFacetValues:jt.multipleSearchForFacetValues,getApiKey:jt.getApiKey,addApiKey:jt.addApiKey,listApiKeys:jt.listApiKeys,updateApiKey:jt.updateApiKey,deleteApiKey:jt.deleteApiKey,restoreApiKey:jt.restoreApiKey,assignUserID:jt.assignUserID,assignUserIDs:jt.assignUserIDs,getUserID:jt.getUserID,searchUserIDs:jt.searchUserIDs,listUserIDs:jt.listUserIDs,getTopUserIDs:jt.getTopUserIDs,removeUserID:jt.removeUserID,hasPendingMappings:jt.hasPendingMappings,generateSecuredApiKey:jt.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:jt.getSecuredApiKeyRemainingValidity,destroy:j9.destroy,clearDictionaryEntries:jt.clearDictionaryEntries,deleteDictionaryEntries:jt.deleteDictionaryEntries,getDictionarySettings:jt.getDictionarySettings,getAppTask:jt.getAppTask,replaceDictionaryEntries:jt.replaceDictionaryEntries,saveDictionaryEntries:jt.saveDictionaryEntries,searchDictionaryEntries:jt.searchDictionaryEntries,setDictionarySettings:jt.setDictionarySettings,waitAppTask:jt.waitAppTask,customRequest:jt.customRequest,initIndex:c=>f=>jt.initIndex(c)(f,{methods:{batch:jt.batch,delete:jt.deleteIndex,findAnswers:jt.findAnswers,getObject:jt.getObject,getObjects:jt.getObjects,saveObject:jt.saveObject,saveObjects:jt.saveObjects,search:jt.search,searchForFacetValues:jt.searchForFacetValues,waitTask:jt.waitTask,setSettings:jt.setSettings,getSettings:jt.getSettings,partialUpdateObject:jt.partialUpdateObject,partialUpdateObjects:jt.partialUpdateObjects,deleteObject:jt.deleteObject,deleteObjects:jt.deleteObjects,deleteBy:jt.deleteBy,clearObjects:jt.clearObjects,browseObjects:jt.browseObjects,getObjectPosition:jt.getObjectPosition,findObject:jt.findObject,exists:jt.exists,saveSynonym:jt.saveSynonym,saveSynonyms:jt.saveSynonyms,getSynonym:jt.getSynonym,searchSynonyms:jt.searchSynonyms,browseSynonyms:jt.browseSynonyms,deleteSynonym:jt.deleteSynonym,clearSynonyms:jt.clearSynonyms,replaceAllObjects:jt.replaceAllObjects,replaceAllSynonyms:jt.replaceAllSynonyms,searchRules:jt.searchRules,getRule:jt.getRule,deleteRule:jt.deleteRule,saveRule:jt.saveRule,saveRules:jt.saveRules,replaceAllRules:jt.replaceAllRules,browseRules:jt.browseRules,clearRules:jt.clearRules}}),initAnalytics:()=>c=>lw.createAnalyticsClient({...s,...c,methods:{addABTest:lw.addABTest,getABTest:lw.getABTest,getABTests:lw.getABTests,stopABTest:lw.stopABTest,deleteABTest:lw.deleteABTest}}),initPersonalization:n,initRecommendation:()=>c=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(c))}})}DSe.version=j9.version;bSe.exports=DSe});var G9=L((Tpr,q9)=>{var xSe=PSe();q9.exports=xSe;q9.exports.default=xSe});var V9=L((Fpr,TSe)=>{"use strict";var QSe=Object.getOwnPropertySymbols,$bt=Object.prototype.hasOwnProperty,ePt=Object.prototype.propertyIsEnumerable;function tPt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function rPt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var s=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(s.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}TSe.exports=rPt()?Object.assign:function(t,e){for(var r,s=tPt(t),a,n=1;n{"use strict";var J9=V9(),cw=60103,NSe=60106;Dn.Fragment=60107;Dn.StrictMode=60108;Dn.Profiler=60114;var OSe=60109,LSe=60110,MSe=60112;Dn.Suspense=60113;var _Se=60115,USe=60116;typeof Symbol=="function"&&Symbol.for&&(Wc=Symbol.for,cw=Wc("react.element"),NSe=Wc("react.portal"),Dn.Fragment=Wc("react.fragment"),Dn.StrictMode=Wc("react.strict_mode"),Dn.Profiler=Wc("react.profiler"),OSe=Wc("react.provider"),LSe=Wc("react.context"),MSe=Wc("react.forward_ref"),Dn.Suspense=Wc("react.suspense"),_Se=Wc("react.memo"),USe=Wc("react.lazy"));var Wc,RSe=typeof Symbol=="function"&&Symbol.iterator;function nPt(t){return t===null||typeof t!="object"?null:(t=RSe&&t[RSe]||t["@@iterator"],typeof t=="function"?t:null)}function GS(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;r{"use strict";JSe.exports=KSe()});var tW=L((Lpr,eW)=>{"use strict";var Cn=eW.exports;eW.exports.default=Cn;var Zn="\x1B[",WS="\x1B]",fw="\x07",CF=";",zSe=process.env.TERM_PROGRAM==="Apple_Terminal";Cn.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Zn+(t+1)+"G":Zn+(e+1)+";"+(t+1)+"H"};Cn.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Zn+-t+"D":t>0&&(r+=Zn+t+"C"),e<0?r+=Zn+-e+"A":e>0&&(r+=Zn+e+"B"),r};Cn.cursorUp=(t=1)=>Zn+t+"A";Cn.cursorDown=(t=1)=>Zn+t+"B";Cn.cursorForward=(t=1)=>Zn+t+"C";Cn.cursorBackward=(t=1)=>Zn+t+"D";Cn.cursorLeft=Zn+"G";Cn.cursorSavePosition=zSe?"\x1B7":Zn+"s";Cn.cursorRestorePosition=zSe?"\x1B8":Zn+"u";Cn.cursorGetPosition=Zn+"6n";Cn.cursorNextLine=Zn+"E";Cn.cursorPrevLine=Zn+"F";Cn.cursorHide=Zn+"?25l";Cn.cursorShow=Zn+"?25h";Cn.eraseLines=t=>{let e="";for(let r=0;r[WS,"8",CF,CF,e,fw,t,WS,"8",CF,CF,fw].join("");Cn.image=(t,e={})=>{let r=`${WS}1337;File=inline=1`;return e.width&&(r+=`;width=${e.width}`),e.height&&(r+=`;height=${e.height}`),e.preserveAspectRatio===!1&&(r+=";preserveAspectRatio=0"),r+":"+t.toString("base64")+fw};Cn.iTerm={setCwd:(t=process.cwd())=>`${WS}50;CurrentDir=${t}${fw}`,annotation:(t,e={})=>{let r=`${WS}1337;`,s=typeof e.x<"u",a=typeof e.y<"u";if((s||a)&&!(s&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(s?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+fw}}});var XSe=L((Mpr,rW)=>{"use strict";var ZSe=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};rW.exports=ZSe;rW.exports.default=ZSe});var eDe=L((_pr,BF)=>{"use strict";var lPt=XSe(),wF=new WeakMap,$Se=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,s=0,a=t.displayName||t.name||"",n=function(...c){if(wF.set(n,++s),s===1)r=t.apply(this,c),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return lPt(n,t),wF.set(n,s),n};BF.exports=$Se;BF.exports.default=$Se;BF.exports.callCount=t=>{if(!wF.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return wF.get(t)}});var tDe=L((Upr,vF)=>{vF.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&vF.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&vF.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var sW=L((Hpr,hw)=>{var Ti=global.process,km=function(t){return t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function"};km(Ti)?(rDe=Ie("assert"),Aw=tDe(),nDe=/^win/i.test(Ti.platform),YS=Ie("events"),typeof YS!="function"&&(YS=YS.EventEmitter),Ti.__signal_exit_emitter__?zs=Ti.__signal_exit_emitter__:(zs=Ti.__signal_exit_emitter__=new YS,zs.count=0,zs.emitted={}),zs.infinite||(zs.setMaxListeners(1/0),zs.infinite=!0),hw.exports=function(t,e){if(!km(global.process))return function(){};rDe.equal(typeof t,"function","a callback must be provided for exit handler"),pw===!1&&nW();var r="exit";e&&e.alwaysLast&&(r="afterexit");var s=function(){zs.removeListener(r,t),zs.listeners("exit").length===0&&zs.listeners("afterexit").length===0&&SF()};return zs.on(r,t),s},SF=function(){!pw||!km(global.process)||(pw=!1,Aw.forEach(function(e){try{Ti.removeListener(e,DF[e])}catch{}}),Ti.emit=bF,Ti.reallyExit=iW,zs.count-=1)},hw.exports.unload=SF,Qm=function(e,r,s){zs.emitted[e]||(zs.emitted[e]=!0,zs.emit(e,r,s))},DF={},Aw.forEach(function(t){DF[t]=function(){if(km(global.process)){var r=Ti.listeners(t);r.length===zs.count&&(SF(),Qm("exit",null,t),Qm("afterexit",null,t),nDe&&t==="SIGHUP"&&(t="SIGINT"),Ti.kill(Ti.pid,t))}}}),hw.exports.signals=function(){return Aw},pw=!1,nW=function(){pw||!km(global.process)||(pw=!0,zs.count+=1,Aw=Aw.filter(function(e){try{return Ti.on(e,DF[e]),!0}catch{return!1}}),Ti.emit=sDe,Ti.reallyExit=iDe)},hw.exports.load=nW,iW=Ti.reallyExit,iDe=function(e){km(global.process)&&(Ti.exitCode=e||0,Qm("exit",Ti.exitCode,null),Qm("afterexit",Ti.exitCode,null),iW.call(Ti,Ti.exitCode))},bF=Ti.emit,sDe=function(e,r){if(e==="exit"&&km(global.process)){r!==void 0&&(Ti.exitCode=r);var s=bF.apply(this,arguments);return Qm("exit",Ti.exitCode,null),Qm("afterexit",Ti.exitCode,null),s}else return bF.apply(this,arguments)}):hw.exports=function(){return function(){}};var rDe,Aw,nDe,YS,zs,SF,Qm,DF,pw,nW,iW,iDe,bF,sDe});var aDe=L((jpr,oDe)=>{"use strict";var cPt=eDe(),uPt=sW();oDe.exports=cPt(()=>{uPt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var oW=L(gw=>{"use strict";var fPt=aDe(),PF=!1;gw.show=(t=process.stderr)=>{t.isTTY&&(PF=!1,t.write("\x1B[?25h"))};gw.hide=(t=process.stderr)=>{t.isTTY&&(fPt(),PF=!0,t.write("\x1B[?25l"))};gw.toggle=(t,e)=>{t!==void 0&&(PF=t),PF?gw.show(e):gw.hide(e)}});var fDe=L(VS=>{"use strict";var uDe=VS&&VS.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(VS,"__esModule",{value:!0});var lDe=uDe(tW()),cDe=uDe(oW()),APt=(t,{showCursor:e=!1}={})=>{let r=0,s="",a=!1,n=c=>{!e&&!a&&(cDe.default.hide(),a=!0);let f=c+` -`;f!==s&&(s=f,t.write(lDe.default.eraseLines(r)+f),r=f.split(` -`).length)};return n.clear=()=>{t.write(lDe.default.eraseLines(r)),s="",r=0},n.done=()=>{s="",r=0,e||(cDe.default.show(),a=!1)},n};VS.default={create:APt}});var ADe=L((Wpr,pPt)=>{pPt.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var gDe=L(rc=>{"use strict";var hDe=ADe(),AA=process.env;Object.defineProperty(rc,"_vendors",{value:hDe.map(function(t){return t.constant})});rc.name=null;rc.isPR=null;hDe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(s){return pDe(s)});if(rc[t.constant]=r,r)switch(rc.name=t.name,typeof t.pr){case"string":rc.isPR=!!AA[t.pr];break;case"object":"env"in t.pr?rc.isPR=t.pr.env in AA&&AA[t.pr.env]!==t.pr.ne:"any"in t.pr?rc.isPR=t.pr.any.some(function(s){return!!AA[s]}):rc.isPR=pDe(t.pr);break;default:rc.isPR=null}});rc.isCI=!!(AA.CI||AA.CONTINUOUS_INTEGRATION||AA.BUILD_NUMBER||AA.RUN_ID||rc.name);function pDe(t){return typeof t=="string"?!!AA[t]:Object.keys(t).every(function(e){return AA[e]===t[e]})}});var mDe=L((Vpr,dDe)=>{"use strict";dDe.exports=gDe().isCI});var EDe=L((Kpr,yDe)=>{"use strict";var hPt=t=>{let e=new Set;do for(let r of Reflect.ownKeys(t))e.add([t,r]);while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e};yDe.exports=(t,{include:e,exclude:r}={})=>{let s=a=>{let n=c=>typeof c=="string"?a===c:c.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of hPt(t.constructor.prototype)){if(n==="constructor"||!s(n))continue;let c=Reflect.getOwnPropertyDescriptor(a,n);c&&typeof c.value=="function"&&(t[n]=t[n].bind(t))}return t}});var SDe=L(Vn=>{"use strict";var mw,zS,TF,pW;typeof performance=="object"&&typeof performance.now=="function"?(IDe=performance,Vn.unstable_now=function(){return IDe.now()}):(aW=Date,CDe=aW.now(),Vn.unstable_now=function(){return aW.now()-CDe});var IDe,aW,CDe;typeof window>"u"||typeof MessageChannel!="function"?(dw=null,lW=null,cW=function(){if(dw!==null)try{var t=Vn.unstable_now();dw(!0,t),dw=null}catch(e){throw setTimeout(cW,0),e}},mw=function(t){dw!==null?setTimeout(mw,0,t):(dw=t,setTimeout(cW,0))},zS=function(t,e){lW=setTimeout(t,e)},TF=function(){clearTimeout(lW)},Vn.unstable_shouldYield=function(){return!1},pW=Vn.unstable_forceFrameRate=function(){}):(wDe=window.setTimeout,BDe=window.clearTimeout,typeof console<"u"&&(vDe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof vDe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),KS=!1,JS=null,xF=-1,uW=5,fW=0,Vn.unstable_shouldYield=function(){return Vn.unstable_now()>=fW},pW=function(){},Vn.unstable_forceFrameRate=function(t){0>t||125>>1,a=t[s];if(a!==void 0&&0QF(c,r))p!==void 0&&0>QF(p,c)?(t[s]=p,t[f]=r,s=f):(t[s]=c,t[n]=r,s=n);else if(p!==void 0&&0>QF(p,r))t[s]=p,t[f]=r,s=f;else break e}}return e}return null}function QF(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var pA=[],Z0=[],gPt=1,Yc=null,ea=3,FF=!1,Tm=!1,ZS=!1;function gW(t){for(var e=tf(Z0);e!==null;){if(e.callback===null)RF(Z0);else if(e.startTime<=t)RF(Z0),e.sortIndex=e.expirationTime,hW(pA,e);else break;e=tf(Z0)}}function dW(t){if(ZS=!1,gW(t),!Tm)if(tf(pA)!==null)Tm=!0,mw(mW);else{var e=tf(Z0);e!==null&&zS(dW,e.startTime-t)}}function mW(t,e){Tm=!1,ZS&&(ZS=!1,TF()),FF=!0;var r=ea;try{for(gW(e),Yc=tf(pA);Yc!==null&&(!(Yc.expirationTime>e)||t&&!Vn.unstable_shouldYield());){var s=Yc.callback;if(typeof s=="function"){Yc.callback=null,ea=Yc.priorityLevel;var a=s(Yc.expirationTime<=e);e=Vn.unstable_now(),typeof a=="function"?Yc.callback=a:Yc===tf(pA)&&RF(pA),gW(e)}else RF(pA);Yc=tf(pA)}if(Yc!==null)var n=!0;else{var c=tf(Z0);c!==null&&zS(dW,c.startTime-e),n=!1}return n}finally{Yc=null,ea=r,FF=!1}}var dPt=pW;Vn.unstable_IdlePriority=5;Vn.unstable_ImmediatePriority=1;Vn.unstable_LowPriority=4;Vn.unstable_NormalPriority=3;Vn.unstable_Profiling=null;Vn.unstable_UserBlockingPriority=2;Vn.unstable_cancelCallback=function(t){t.callback=null};Vn.unstable_continueExecution=function(){Tm||FF||(Tm=!0,mw(mW))};Vn.unstable_getCurrentPriorityLevel=function(){return ea};Vn.unstable_getFirstCallbackNode=function(){return tf(pA)};Vn.unstable_next=function(t){switch(ea){case 1:case 2:case 3:var e=3;break;default:e=ea}var r=ea;ea=e;try{return t()}finally{ea=r}};Vn.unstable_pauseExecution=function(){};Vn.unstable_requestPaint=dPt;Vn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=ea;ea=t;try{return e()}finally{ea=r}};Vn.unstable_scheduleCallback=function(t,e,r){var s=Vn.unstable_now();switch(typeof r=="object"&&r!==null?(r=r.delay,r=typeof r=="number"&&0s?(t.sortIndex=r,hW(Z0,t),tf(pA)===null&&t===tf(Z0)&&(ZS?TF():ZS=!0,zS(dW,r-s))):(t.sortIndex=a,hW(pA,t),Tm||FF||(Tm=!0,mw(mW))),t};Vn.unstable_wrapCallback=function(t){var e=ea;return function(){var r=ea;ea=e;try{return t.apply(this,arguments)}finally{ea=r}}}});var yW=L((zpr,DDe)=>{"use strict";DDe.exports=SDe()});var bDe=L((Zpr,XS)=>{XS.exports=function(e){var r={},s=V9(),a=hn(),n=yW();function c(v){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+v,Q=1;QUe||V[Se]!==ne[Ue])return` -`+V[Se].replace(" at new "," at ");while(1<=Se&&0<=Ue);break}}}finally{ve=!1,Error.prepareStackTrace=Q}return(v=v?v.displayName||v.name:"")?ac(v):""}var lc=[],Li=-1;function so(v){return{current:v}}function Rt(v){0>Li||(v.current=lc[Li],lc[Li]=null,Li--)}function xn(v,D){Li++,lc[Li]=v.current,v.current=D}var ca={},qi=so(ca),Mi=so(!1),Oa=ca;function dn(v,D){var Q=v.type.contextTypes;if(!Q)return ca;var H=v.stateNode;if(H&&H.__reactInternalMemoizedUnmaskedChildContext===D)return H.__reactInternalMemoizedMaskedChildContext;var V={},ne;for(ne in Q)V[ne]=D[ne];return H&&(v=v.stateNode,v.__reactInternalMemoizedUnmaskedChildContext=D,v.__reactInternalMemoizedMaskedChildContext=V),V}function Jn(v){return v=v.childContextTypes,v!=null}function hu(){Rt(Mi),Rt(qi)}function Ih(v,D,Q){if(qi.current!==ca)throw Error(c(168));xn(qi,D),xn(Mi,Q)}function La(v,D,Q){var H=v.stateNode;if(v=D.childContextTypes,typeof H.getChildContext!="function")return Q;H=H.getChildContext();for(var V in H)if(!(V in v))throw Error(c(108,g(D)||"Unknown",V));return s({},Q,H)}function Ma(v){return v=(v=v.stateNode)&&v.__reactInternalMemoizedMergedChildContext||ca,Oa=qi.current,xn(qi,v),xn(Mi,Mi.current),!0}function Ua(v,D,Q){var H=v.stateNode;if(!H)throw Error(c(169));Q?(v=La(v,D,Oa),H.__reactInternalMemoizedMergedChildContext=v,Rt(Mi),Rt(qi),xn(qi,v)):Rt(Mi),xn(Mi,Q)}var Xe=null,Ha=null,gf=n.unstable_now;gf();var cc=0,wn=8;function ua(v){if(1&v)return wn=15,1;if(2&v)return wn=14,2;if(4&v)return wn=13,4;var D=24&v;return D!==0?(wn=12,D):v&32?(wn=11,32):(D=192&v,D!==0?(wn=10,D):v&256?(wn=9,256):(D=3584&v,D!==0?(wn=8,D):v&4096?(wn=7,4096):(D=4186112&v,D!==0?(wn=6,D):(D=62914560&v,D!==0?(wn=5,D):v&67108864?(wn=4,67108864):v&134217728?(wn=3,134217728):(D=805306368&v,D!==0?(wn=2,D):1073741824&v?(wn=1,1073741824):(wn=8,v))))))}function _A(v){switch(v){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}function UA(v){switch(v){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(c(358,v))}}function fa(v,D){var Q=v.pendingLanes;if(Q===0)return wn=0;var H=0,V=0,ne=v.expiredLanes,Se=v.suspendedLanes,Ue=v.pingedLanes;if(ne!==0)H=ne,V=wn=15;else if(ne=Q&134217727,ne!==0){var At=ne&~Se;At!==0?(H=ua(At),V=wn):(Ue&=ne,Ue!==0&&(H=ua(Ue),V=wn))}else ne=Q&~Se,ne!==0?(H=ua(ne),V=wn):Ue!==0&&(H=ua(Ue),V=wn);if(H===0)return 0;if(H=31-is(H),H=Q&((0>H?0:1<Q;Q++)D.push(v);return D}function ja(v,D,Q){v.pendingLanes|=D;var H=D-1;v.suspendedLanes&=H,v.pingedLanes&=H,v=v.eventTimes,D=31-is(D),v[D]=Q}var is=Math.clz32?Math.clz32:fc,uc=Math.log,gu=Math.LN2;function fc(v){return v===0?32:31-(uc(v)/gu|0)|0}var qa=n.unstable_runWithPriority,_i=n.unstable_scheduleCallback,ws=n.unstable_cancelCallback,Sl=n.unstable_shouldYield,df=n.unstable_requestPaint,Ac=n.unstable_now,Bi=n.unstable_getCurrentPriorityLevel,Qn=n.unstable_ImmediatePriority,pc=n.unstable_UserBlockingPriority,Je=n.unstable_NormalPriority,st=n.unstable_LowPriority,St=n.unstable_IdlePriority,lr={},ee=df!==void 0?df:function(){},Ee=null,Oe=null,gt=!1,yt=Ac(),Dt=1e4>yt?Ac:function(){return Ac()-yt};function tr(){switch(Bi()){case Qn:return 99;case pc:return 98;case Je:return 97;case st:return 96;case St:return 95;default:throw Error(c(332))}}function fn(v){switch(v){case 99:return Qn;case 98:return pc;case 97:return Je;case 96:return st;case 95:return St;default:throw Error(c(332))}}function li(v,D){return v=fn(v),qa(v,D)}function Gi(v,D,Q){return v=fn(v),_i(v,D,Q)}function Tn(){if(Oe!==null){var v=Oe;Oe=null,ws(v)}Ga()}function Ga(){if(!gt&&Ee!==null){gt=!0;var v=0;try{var D=Ee;li(99,function(){for(;vRn?(Un=kr,kr=null):Un=kr.sibling;var zr=Xt($e,kr,ht[Rn],Zt);if(zr===null){kr===null&&(kr=Un);break}v&&kr&&zr.alternate===null&&D($e,kr),qe=ne(zr,qe,Rn),Xn===null?Sr=zr:Xn.sibling=zr,Xn=zr,kr=Un}if(Rn===ht.length)return Q($e,kr),Sr;if(kr===null){for(;RnRn?(Un=kr,kr=null):Un=kr.sibling;var ci=Xt($e,kr,zr.value,Zt);if(ci===null){kr===null&&(kr=Un);break}v&&kr&&ci.alternate===null&&D($e,kr),qe=ne(ci,qe,Rn),Xn===null?Sr=ci:Xn.sibling=ci,Xn=ci,kr=Un}if(zr.done)return Q($e,kr),Sr;if(kr===null){for(;!zr.done;Rn++,zr=ht.next())zr=Lr($e,zr.value,Zt),zr!==null&&(qe=ne(zr,qe,Rn),Xn===null?Sr=zr:Xn.sibling=zr,Xn=zr);return Sr}for(kr=H($e,kr);!zr.done;Rn++,zr=ht.next())zr=zn(kr,$e,Rn,zr.value,Zt),zr!==null&&(v&&zr.alternate!==null&&kr.delete(zr.key===null?Rn:zr.key),qe=ne(zr,qe,Rn),Xn===null?Sr=zr:Xn.sibling=zr,Xn=zr);return v&&kr.forEach(function(Pu){return D($e,Pu)}),Sr}return function($e,qe,ht,Zt){var Sr=typeof ht=="object"&&ht!==null&&ht.type===E&&ht.key===null;Sr&&(ht=ht.props.children);var Xn=typeof ht=="object"&&ht!==null;if(Xn)switch(ht.$$typeof){case p:e:{for(Xn=ht.key,Sr=qe;Sr!==null;){if(Sr.key===Xn){switch(Sr.tag){case 7:if(ht.type===E){Q($e,Sr.sibling),qe=V(Sr,ht.props.children),qe.return=$e,$e=qe;break e}break;default:if(Sr.elementType===ht.type){Q($e,Sr.sibling),qe=V(Sr,ht.props),qe.ref=mt($e,Sr,ht),qe.return=$e,$e=qe;break e}}Q($e,Sr);break}else D($e,Sr);Sr=Sr.sibling}ht.type===E?(qe=Qf(ht.props.children,$e.mode,Zt,ht.key),qe.return=$e,$e=qe):(Zt=id(ht.type,ht.key,ht.props,null,$e.mode,Zt),Zt.ref=mt($e,qe,ht),Zt.return=$e,$e=Zt)}return Se($e);case h:e:{for(Sr=ht.key;qe!==null;){if(qe.key===Sr)if(qe.tag===4&&qe.stateNode.containerInfo===ht.containerInfo&&qe.stateNode.implementation===ht.implementation){Q($e,qe.sibling),qe=V(qe,ht.children||[]),qe.return=$e,$e=qe;break e}else{Q($e,qe);break}else D($e,qe);qe=qe.sibling}qe=Ro(ht,$e.mode,Zt),qe.return=$e,$e=qe}return Se($e)}if(typeof ht=="string"||typeof ht=="number")return ht=""+ht,qe!==null&&qe.tag===6?(Q($e,qe.sibling),qe=V(qe,ht),qe.return=$e,$e=qe):(Q($e,qe),qe=b2(ht,$e.mode,Zt),qe.return=$e,$e=qe),Se($e);if(yf(ht))return yi($e,qe,ht,Zt);if(Ce(ht))return Za($e,qe,ht,Zt);if(Xn&&mu($e,ht),typeof ht>"u"&&!Sr)switch($e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(c(152,g($e.type)||"Component"))}return Q($e,qe)}}var Lg=Cy(!0),e2=Cy(!1),Dh={},ur=so(Dh),Zi=so(Dh),Ef=so(Dh);function Wa(v){if(v===Dh)throw Error(c(174));return v}function Mg(v,D){xn(Ef,D),xn(Zi,v),xn(ur,Dh),v=dt(D),Rt(ur),xn(ur,v)}function yu(){Rt(ur),Rt(Zi),Rt(Ef)}function If(v){var D=Wa(Ef.current),Q=Wa(ur.current);D=j(Q,v.type,D),Q!==D&&(xn(Zi,v),xn(ur,D))}function wt(v){Zi.current===v&&(Rt(ur),Rt(Zi))}var di=so(0);function WA(v){for(var D=v;D!==null;){if(D.tag===13){var Q=D.memoizedState;if(Q!==null&&(Q=Q.dehydrated,Q===null||gr(Q)||So(Q)))return D}else if(D.tag===19&&D.memoizedProps.revealOrder!==void 0){if(D.flags&64)return D}else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===v)break;for(;D.sibling===null;){if(D.return===null||D.return===v)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}var Ya=null,pa=null,Va=!1;function _g(v,D){var Q=za(5,null,null,0);Q.elementType="DELETED",Q.type="DELETED",Q.stateNode=D,Q.return=v,Q.flags=8,v.lastEffect!==null?(v.lastEffect.nextEffect=Q,v.lastEffect=Q):v.firstEffect=v.lastEffect=Q}function bh(v,D){switch(v.tag){case 5:return D=la(D,v.type,v.pendingProps),D!==null?(v.stateNode=D,!0):!1;case 6:return D=OA(D,v.pendingProps),D!==null?(v.stateNode=D,!0):!1;case 13:return!1;default:return!1}}function Ug(v){if(Va){var D=pa;if(D){var Q=D;if(!bh(v,D)){if(D=Me(Q),!D||!bh(v,D)){v.flags=v.flags&-1025|2,Va=!1,Ya=v;return}_g(Ya,Q)}Ya=v,pa=fu(D)}else v.flags=v.flags&-1025|2,Va=!1,Ya=v}}function wy(v){for(v=v.return;v!==null&&v.tag!==5&&v.tag!==3&&v.tag!==13;)v=v.return;Ya=v}function YA(v){if(!Z||v!==Ya)return!1;if(!Va)return wy(v),Va=!0,!1;var D=v.type;if(v.tag!==5||D!=="head"&&D!=="body"&&!it(D,v.memoizedProps))for(D=pa;D;)_g(v,D),D=Me(D);if(wy(v),v.tag===13){if(!Z)throw Error(c(316));if(v=v.memoizedState,v=v!==null?v.dehydrated:null,!v)throw Error(c(317));pa=LA(v)}else pa=Ya?Me(v.stateNode):null;return!0}function Hg(){Z&&(pa=Ya=null,Va=!1)}var Eu=[];function Iu(){for(var v=0;vne))throw Error(c(301));ne+=1,ki=ss=null,D.updateQueue=null,Cf.current=re,v=Q(H,V)}while(wf)}if(Cf.current=kt,D=ss!==null&&ss.next!==null,Cu=0,ki=ss=qn=null,VA=!1,D)throw Error(c(300));return v}function os(){var v={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return ki===null?qn.memoizedState=ki=v:ki=ki.next=v,ki}function xl(){if(ss===null){var v=qn.alternate;v=v!==null?v.memoizedState:null}else v=ss.next;var D=ki===null?qn.memoizedState:ki.next;if(D!==null)ki=D,ss=v;else{if(v===null)throw Error(c(310));ss=v,v={memoizedState:ss.memoizedState,baseState:ss.baseState,baseQueue:ss.baseQueue,queue:ss.queue,next:null},ki===null?qn.memoizedState=ki=v:ki=ki.next=v}return ki}function ko(v,D){return typeof D=="function"?D(v):D}function Bf(v){var D=xl(),Q=D.queue;if(Q===null)throw Error(c(311));Q.lastRenderedReducer=v;var H=ss,V=H.baseQueue,ne=Q.pending;if(ne!==null){if(V!==null){var Se=V.next;V.next=ne.next,ne.next=Se}H.baseQueue=V=ne,Q.pending=null}if(V!==null){V=V.next,H=H.baseState;var Ue=Se=ne=null,At=V;do{var Gt=At.lane;if((Cu&Gt)===Gt)Ue!==null&&(Ue=Ue.next={lane:0,action:At.action,eagerReducer:At.eagerReducer,eagerState:At.eagerState,next:null}),H=At.eagerReducer===v?At.eagerState:v(H,At.action);else{var vr={lane:Gt,action:At.action,eagerReducer:At.eagerReducer,eagerState:At.eagerState,next:null};Ue===null?(Se=Ue=vr,ne=H):Ue=Ue.next=vr,qn.lanes|=Gt,Zg|=Gt}At=At.next}while(At!==null&&At!==V);Ue===null?ne=H:Ue.next=Se,Do(H,D.memoizedState)||(Ke=!0),D.memoizedState=H,D.baseState=ne,D.baseQueue=Ue,Q.lastRenderedState=H}return[D.memoizedState,Q.dispatch]}function vf(v){var D=xl(),Q=D.queue;if(Q===null)throw Error(c(311));Q.lastRenderedReducer=v;var H=Q.dispatch,V=Q.pending,ne=D.memoizedState;if(V!==null){Q.pending=null;var Se=V=V.next;do ne=v(ne,Se.action),Se=Se.next;while(Se!==V);Do(ne,D.memoizedState)||(Ke=!0),D.memoizedState=ne,D.baseQueue===null&&(D.baseState=ne),Q.lastRenderedState=ne}return[ne,H]}function kl(v,D,Q){var H=D._getVersion;H=H(D._source);var V=y?D._workInProgressVersionPrimary:D._workInProgressVersionSecondary;if(V!==null?v=V===H:(v=v.mutableReadLanes,(v=(Cu&v)===v)&&(y?D._workInProgressVersionPrimary=H:D._workInProgressVersionSecondary=H,Eu.push(D))),v)return Q(D._source);throw Eu.push(D),Error(c(350))}function yn(v,D,Q,H){var V=ao;if(V===null)throw Error(c(349));var ne=D._getVersion,Se=ne(D._source),Ue=Cf.current,At=Ue.useState(function(){return kl(V,D,Q)}),Gt=At[1],vr=At[0];At=ki;var Lr=v.memoizedState,Xt=Lr.refs,zn=Xt.getSnapshot,yi=Lr.source;Lr=Lr.subscribe;var Za=qn;return v.memoizedState={refs:Xt,source:D,subscribe:H},Ue.useEffect(function(){Xt.getSnapshot=Q,Xt.setSnapshot=Gt;var $e=ne(D._source);if(!Do(Se,$e)){$e=Q(D._source),Do(vr,$e)||(Gt($e),$e=Ss(Za),V.mutableReadLanes|=$e&V.pendingLanes),$e=V.mutableReadLanes,V.entangledLanes|=$e;for(var qe=V.entanglements,ht=$e;0Q?98:Q,function(){v(!0)}),li(97m2&&(D.flags|=64,V=!0,$A(H,!1),D.lanes=33554432)}else{if(!V)if(v=WA(ne),v!==null){if(D.flags|=64,V=!0,v=v.updateQueue,v!==null&&(D.updateQueue=v,D.flags|=4),$A(H,!0),H.tail===null&&H.tailMode==="hidden"&&!ne.alternate&&!Va)return D=D.lastEffect=H.lastEffect,D!==null&&(D.nextEffect=null),null}else 2*Dt()-H.renderingStartTime>m2&&Q!==1073741824&&(D.flags|=64,V=!0,$A(H,!1),D.lanes=33554432);H.isBackwards?(ne.sibling=D.child,D.child=ne):(v=H.last,v!==null?v.sibling=ne:D.child=ne,H.last=ne)}return H.tail!==null?(v=H.tail,H.rendering=v,H.tail=v.sibling,H.lastEffect=D.lastEffect,H.renderingStartTime=Dt(),v.sibling=null,D=di.current,xn(di,V?D&1|2:D&1),v):null;case 23:case 24:return B2(),v!==null&&v.memoizedState!==null!=(D.memoizedState!==null)&&H.mode!=="unstable-defer-without-hiding"&&(D.flags|=4),null}throw Error(c(156,D.tag))}function YL(v){switch(v.tag){case 1:Jn(v.type)&&hu();var D=v.flags;return D&4096?(v.flags=D&-4097|64,v):null;case 3:if(yu(),Rt(Mi),Rt(qi),Iu(),D=v.flags,D&64)throw Error(c(285));return v.flags=D&-4097|64,v;case 5:return wt(v),null;case 13:return Rt(di),D=v.flags,D&4096?(v.flags=D&-4097|64,v):null;case 19:return Rt(di),null;case 4:return yu(),null;case 10:return Ng(v),null;case 23:case 24:return B2(),null;default:return null}}function Wg(v,D){try{var Q="",H=D;do Q+=$1(H),H=H.return;while(H);var V=Q}catch(ne){V=` -Error generating stack: `+ne.message+` -`+ne.stack}return{value:v,source:D,stack:V}}function Yg(v,D){try{console.error(D.value)}catch(Q){setTimeout(function(){throw Q})}}var VL=typeof WeakMap=="function"?WeakMap:Map;function i2(v,D,Q){Q=bl(-1,Q),Q.tag=3,Q.payload={element:null};var H=D.value;return Q.callback=function(){My||(My=!0,y2=H),Yg(v,D)},Q}function Vg(v,D,Q){Q=bl(-1,Q),Q.tag=3;var H=v.type.getDerivedStateFromError;if(typeof H=="function"){var V=D.value;Q.payload=function(){return Yg(v,D),H(V)}}var ne=v.stateNode;return ne!==null&&typeof ne.componentDidCatch=="function"&&(Q.callback=function(){typeof H!="function"&&(gc===null?gc=new Set([this]):gc.add(this),Yg(v,D));var Se=D.stack;this.componentDidCatch(D.value,{componentStack:Se!==null?Se:""})}),Q}var KL=typeof WeakSet=="function"?WeakSet:Set;function s2(v){var D=v.ref;if(D!==null)if(typeof D=="function")try{D(null)}catch(Q){kf(v,Q)}else D.current=null}function by(v,D){switch(D.tag){case 0:case 11:case 15:case 22:return;case 1:if(D.flags&256&&v!==null){var Q=v.memoizedProps,H=v.memoizedState;v=D.stateNode,D=v.getSnapshotBeforeUpdate(D.elementType===D.type?Q:bo(D.type,Q),H),v.__reactInternalSnapshotBeforeUpdate=D}return;case 3:F&&D.flags&256&&Fs(D.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(c(163))}function Fh(v,D){if(D=D.updateQueue,D=D!==null?D.lastEffect:null,D!==null){var Q=D=D.next;do{if((Q.tag&v)===v){var H=Q.destroy;Q.destroy=void 0,H!==void 0&&H()}Q=Q.next}while(Q!==D)}}function yP(v,D,Q){switch(Q.tag){case 0:case 11:case 15:case 22:if(D=Q.updateQueue,D=D!==null?D.lastEffect:null,D!==null){v=D=D.next;do{if((v.tag&3)===3){var H=v.create;v.destroy=H()}v=v.next}while(v!==D)}if(D=Q.updateQueue,D=D!==null?D.lastEffect:null,D!==null){v=D=D.next;do{var V=v;H=V.next,V=V.tag,V&4&&V&1&&(TP(Q,v),nM(Q,v)),v=H}while(v!==D)}return;case 1:v=Q.stateNode,Q.flags&4&&(D===null?v.componentDidMount():(H=Q.elementType===Q.type?D.memoizedProps:bo(Q.type,D.memoizedProps),v.componentDidUpdate(H,D.memoizedState,v.__reactInternalSnapshotBeforeUpdate))),D=Q.updateQueue,D!==null&&Ey(Q,D,v);return;case 3:if(D=Q.updateQueue,D!==null){if(v=null,Q.child!==null)switch(Q.child.tag){case 5:v=Re(Q.child.stateNode);break;case 1:v=Q.child.stateNode}Ey(Q,D,v)}return;case 5:v=Q.stateNode,D===null&&Q.flags&4&&to(v,Q.type,Q.memoizedProps,Q);return;case 6:return;case 4:return;case 12:return;case 13:Z&&Q.memoizedState===null&&(Q=Q.alternate,Q!==null&&(Q=Q.memoizedState,Q!==null&&(Q=Q.dehydrated,Q!==null&&Au(Q))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(c(163))}function EP(v,D){if(F)for(var Q=v;;){if(Q.tag===5){var H=Q.stateNode;D?yh(H):no(Q.stateNode,Q.memoizedProps)}else if(Q.tag===6)H=Q.stateNode,D?Eh(H):jn(H,Q.memoizedProps);else if((Q.tag!==23&&Q.tag!==24||Q.memoizedState===null||Q===v)&&Q.child!==null){Q.child.return=Q,Q=Q.child;continue}if(Q===v)break;for(;Q.sibling===null;){if(Q.return===null||Q.return===v)return;Q=Q.return}Q.sibling.return=Q.return,Q=Q.sibling}}function Py(v,D){if(Ha&&typeof Ha.onCommitFiberUnmount=="function")try{Ha.onCommitFiberUnmount(Xe,D)}catch{}switch(D.tag){case 0:case 11:case 14:case 15:case 22:if(v=D.updateQueue,v!==null&&(v=v.lastEffect,v!==null)){var Q=v=v.next;do{var H=Q,V=H.destroy;if(H=H.tag,V!==void 0)if(H&4)TP(D,Q);else{H=D;try{V()}catch(ne){kf(H,ne)}}Q=Q.next}while(Q!==v)}break;case 1:if(s2(D),v=D.stateNode,typeof v.componentWillUnmount=="function")try{v.props=D.memoizedProps,v.state=D.memoizedState,v.componentWillUnmount()}catch(ne){kf(D,ne)}break;case 5:s2(D);break;case 4:F?BP(v,D):z&&z&&(D=D.stateNode.containerInfo,v=lu(D),FA(D,v))}}function IP(v,D){for(var Q=D;;)if(Py(v,Q),Q.child===null||F&&Q.tag===4){if(Q===D)break;for(;Q.sibling===null;){if(Q.return===null||Q.return===D)return;Q=Q.return}Q.sibling.return=Q.return,Q=Q.sibling}else Q.child.return=Q,Q=Q.child}function xy(v){v.alternate=null,v.child=null,v.dependencies=null,v.firstEffect=null,v.lastEffect=null,v.memoizedProps=null,v.memoizedState=null,v.pendingProps=null,v.return=null,v.updateQueue=null}function CP(v){return v.tag===5||v.tag===3||v.tag===4}function wP(v){if(F){e:{for(var D=v.return;D!==null;){if(CP(D))break e;D=D.return}throw Error(c(160))}var Q=D;switch(D=Q.stateNode,Q.tag){case 5:var H=!1;break;case 3:D=D.containerInfo,H=!0;break;case 4:D=D.containerInfo,H=!0;break;default:throw Error(c(161))}Q.flags&16&&(pf(D),Q.flags&=-17);e:t:for(Q=v;;){for(;Q.sibling===null;){if(Q.return===null||CP(Q.return)){Q=null;break e}Q=Q.return}for(Q.sibling.return=Q.return,Q=Q.sibling;Q.tag!==5&&Q.tag!==6&&Q.tag!==18;){if(Q.flags&2||Q.child===null||Q.tag===4)continue t;Q.child.return=Q,Q=Q.child}if(!(Q.flags&2)){Q=Q.stateNode;break e}}H?o2(v,Q,D):a2(v,Q,D)}}function o2(v,D,Q){var H=v.tag,V=H===5||H===6;if(V)v=V?v.stateNode:v.stateNode.instance,D?ro(Q,v,D):wo(Q,v);else if(H!==4&&(v=v.child,v!==null))for(o2(v,D,Q),v=v.sibling;v!==null;)o2(v,D,Q),v=v.sibling}function a2(v,D,Q){var H=v.tag,V=H===5||H===6;if(V)v=V?v.stateNode:v.stateNode.instance,D?ji(Q,v,D):ai(Q,v);else if(H!==4&&(v=v.child,v!==null))for(a2(v,D,Q),v=v.sibling;v!==null;)a2(v,D,Q),v=v.sibling}function BP(v,D){for(var Q=D,H=!1,V,ne;;){if(!H){H=Q.return;e:for(;;){if(H===null)throw Error(c(160));switch(V=H.stateNode,H.tag){case 5:ne=!1;break e;case 3:V=V.containerInfo,ne=!0;break e;case 4:V=V.containerInfo,ne=!0;break e}H=H.return}H=!0}if(Q.tag===5||Q.tag===6)IP(v,Q),ne?RA(V,Q.stateNode):vo(V,Q.stateNode);else if(Q.tag===4){if(Q.child!==null){V=Q.stateNode.containerInfo,ne=!0,Q.child.return=Q,Q=Q.child;continue}}else if(Py(v,Q),Q.child!==null){Q.child.return=Q,Q=Q.child;continue}if(Q===D)break;for(;Q.sibling===null;){if(Q.return===null||Q.return===D)return;Q=Q.return,Q.tag===4&&(H=!1)}Q.sibling.return=Q.return,Q=Q.sibling}}function l2(v,D){if(F){switch(D.tag){case 0:case 11:case 14:case 15:case 22:Fh(3,D);return;case 1:return;case 5:var Q=D.stateNode;if(Q!=null){var H=D.memoizedProps;v=v!==null?v.memoizedProps:H;var V=D.type,ne=D.updateQueue;D.updateQueue=null,ne!==null&&Bo(Q,ne,V,v,H,D)}return;case 6:if(D.stateNode===null)throw Error(c(162));Q=D.memoizedProps,ns(D.stateNode,v!==null?v.memoizedProps:Q,Q);return;case 3:Z&&(D=D.stateNode,D.hydrate&&(D.hydrate=!1,MA(D.containerInfo)));return;case 12:return;case 13:vP(D),Kg(D);return;case 19:Kg(D);return;case 17:return;case 23:case 24:EP(D,D.memoizedState!==null);return}throw Error(c(163))}switch(D.tag){case 0:case 11:case 14:case 15:case 22:Fh(3,D);return;case 12:return;case 13:vP(D),Kg(D);return;case 19:Kg(D);return;case 3:Z&&(Q=D.stateNode,Q.hydrate&&(Q.hydrate=!1,MA(Q.containerInfo)));break;case 23:case 24:return}e:if(z){switch(D.tag){case 1:case 5:case 6:case 20:break e;case 3:case 4:D=D.stateNode,FA(D.containerInfo,D.pendingChildren);break e}throw Error(c(163))}}function vP(v){v.memoizedState!==null&&(d2=Dt(),F&&EP(v.child,!0))}function Kg(v){var D=v.updateQueue;if(D!==null){v.updateQueue=null;var Q=v.stateNode;Q===null&&(Q=v.stateNode=new KL),D.forEach(function(H){var V=sM.bind(null,v,H);Q.has(H)||(Q.add(H),H.then(V,V))})}}function JL(v,D){return v!==null&&(v=v.memoizedState,v===null||v.dehydrated!==null)?(D=D.memoizedState,D!==null&&D.dehydrated===null):!1}var ky=0,Qy=1,Ty=2,Jg=3,Ry=4;if(typeof Symbol=="function"&&Symbol.for){var zg=Symbol.for;ky=zg("selector.component"),Qy=zg("selector.has_pseudo_class"),Ty=zg("selector.role"),Jg=zg("selector.test_id"),Ry=zg("selector.text")}function Fy(v){var D=$(v);if(D!=null){if(typeof D.memoizedProps["data-testname"]!="string")throw Error(c(364));return D}if(v=ir(v),v===null)throw Error(c(362));return v.stateNode.current}function Df(v,D){switch(D.$$typeof){case ky:if(v.type===D.value)return!0;break;case Qy:e:{D=D.value,v=[v,0];for(var Q=0;Q";case Qy:return":has("+(bf(v)||"")+")";case Ty:return'[role="'+v.value+'"]';case Ry:return'"'+v.value+'"';case Jg:return'[data-testname="'+v.value+'"]';default:throw Error(c(365,v))}}function c2(v,D){var Q=[];v=[v,0];for(var H=0;HV&&(V=Se),Q&=~ne}if(Q=V,Q=Dt()-Q,Q=(120>Q?120:480>Q?480:1080>Q?1080:1920>Q?1920:3e3>Q?3e3:4320>Q?4320:1960*ZL(Q/1960))-Q,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}vs!==5&&(vs=2),At=Wg(At,Ue),Xt=Se;do{switch(Xt.tag){case 3:ne=At,Xt.flags|=4096,D&=-D,Xt.lanes|=D;var Xn=i2(Xt,ne,D);yy(Xt,Xn);break e;case 1:ne=At;var kr=Xt.type,Rn=Xt.stateNode;if(!(Xt.flags&64)&&(typeof kr.getDerivedStateFromError=="function"||Rn!==null&&typeof Rn.componentDidCatch=="function"&&(gc===null||!gc.has(Rn)))){Xt.flags|=4096,D&=-D,Xt.lanes|=D;var Un=Vg(Xt,ne,D);yy(Xt,Un);break e}}Xt=Xt.return}while(Xt!==null)}QP(Q)}catch(zr){D=zr,Xi===Q&&Q!==null&&(Xi=Q=Q.return);continue}break}while(!0)}function xP(){var v=Oy.current;return Oy.current=kt,v===null?kt:v}function nd(v,D){var Q=xr;xr|=16;var H=xP();ao===v&&Ls===D||Mh(v,D);do try{$L();break}catch(V){PP(v,V)}while(!0);if(Rg(),xr=Q,Oy.current=H,Xi!==null)throw Error(c(261));return ao=null,Ls=0,vs}function $L(){for(;Xi!==null;)kP(Xi)}function eM(){for(;Xi!==null&&!Sl();)kP(Xi)}function kP(v){var D=NP(v.alternate,v,ep);v.memoizedProps=v.pendingProps,D===null?QP(v):Xi=D,f2.current=null}function QP(v){var D=v;do{var Q=D.alternate;if(v=D.return,D.flags&2048){if(Q=YL(D),Q!==null){Q.flags&=2047,Xi=Q;return}v!==null&&(v.firstEffect=v.lastEffect=null,v.flags|=2048)}else{if(Q=WL(Q,D,ep),Q!==null){Xi=Q;return}if(Q=D,Q.tag!==24&&Q.tag!==23||Q.memoizedState===null||ep&1073741824||!(Q.mode&4)){for(var H=0,V=Q.child;V!==null;)H|=V.lanes|V.childLanes,V=V.sibling;Q.childLanes=H}v!==null&&!(v.flags&2048)&&(v.firstEffect===null&&(v.firstEffect=D.firstEffect),D.lastEffect!==null&&(v.lastEffect!==null&&(v.lastEffect.nextEffect=D.firstEffect),v.lastEffect=D.lastEffect),1Dt()-d2?Mh(v,0):h2|=Q),da(v,D)}function sM(v,D){var Q=v.stateNode;Q!==null&&Q.delete(D),D=0,D===0&&(D=v.mode,D&2?D&4?(Su===0&&(Su=Nh),D=kn(62914560&~Su),D===0&&(D=4194304)):D=tr()===99?1:2:D=1),Q=To(),v=Hy(v,D),v!==null&&(ja(v,D,Q),da(v,Q))}var NP;NP=function(v,D,Q){var H=D.lanes;if(v!==null)if(v.memoizedProps!==D.pendingProps||Mi.current)Ke=!0;else if(Q&H)Ke=!!(v.flags&16384);else{switch(Ke=!1,D.tag){case 3:Sy(D),Hg();break;case 5:If(D);break;case 1:Jn(D.type)&&Ma(D);break;case 4:Mg(D,D.stateNode.containerInfo);break;case 10:Fg(D,D.memoizedProps.value);break;case 13:if(D.memoizedState!==null)return Q&D.child.childLanes?r2(v,D,Q):(xn(di,di.current&1),D=Gn(v,D,Q),D!==null?D.sibling:null);xn(di,di.current&1);break;case 19:if(H=(Q&D.childLanes)!==0,v.flags&64){if(H)return mP(v,D,Q);D.flags|=64}var V=D.memoizedState;if(V!==null&&(V.rendering=null,V.tail=null,V.lastEffect=null),xn(di,di.current),H)break;return null;case 23:case 24:return D.lanes=0,mi(v,D,Q)}return Gn(v,D,Q)}else Ke=!1;switch(D.lanes=0,D.tag){case 2:if(H=D.type,v!==null&&(v.alternate=null,D.alternate=null,D.flags|=2),v=D.pendingProps,V=dn(D,qi.current),mf(D,Q),V=qg(null,D,H,v,V,Q),D.flags|=1,typeof V=="object"&&V!==null&&typeof V.render=="function"&&V.$$typeof===void 0){if(D.tag=1,D.memoizedState=null,D.updateQueue=null,Jn(H)){var ne=!0;Ma(D)}else ne=!1;D.memoizedState=V.state!==null&&V.state!==void 0?V.state:null,Sh(D);var Se=H.getDerivedStateFromProps;typeof Se=="function"&&jA(D,H,Se,v),V.updater=qA,D.stateNode=V,V._reactInternals=D,xo(D,H,v,Q),D=t2(null,D,H,!0,ne,Q)}else D.tag=0,ft(null,D,V,Q),D=D.child;return D;case 16:V=D.elementType;e:{switch(v!==null&&(v.alternate=null,D.alternate=null,D.flags|=2),v=D.pendingProps,ne=V._init,V=ne(V._payload),D.type=V,ne=D.tag=aM(V),v=bo(V,v),ne){case 0:D=zA(null,D,V,v,Q);break e;case 1:D=dP(null,D,V,v,Q);break e;case 11:D=dr(null,D,V,v,Q);break e;case 14:D=Br(null,D,V,bo(V.type,v),H,Q);break e}throw Error(c(306,V,""))}return D;case 0:return H=D.type,V=D.pendingProps,V=D.elementType===H?V:bo(H,V),zA(v,D,H,V,Q);case 1:return H=D.type,V=D.pendingProps,V=D.elementType===H?V:bo(H,V),dP(v,D,H,V,Q);case 3:if(Sy(D),H=D.updateQueue,v===null||H===null)throw Error(c(282));if(H=D.pendingProps,V=D.memoizedState,V=V!==null?V.element:null,Og(v,D),HA(D,H,null,Q),H=D.memoizedState.element,H===V)Hg(),D=Gn(v,D,Q);else{if(V=D.stateNode,(ne=V.hydrate)&&(Z?(pa=fu(D.stateNode.containerInfo),Ya=D,ne=Va=!0):ne=!1),ne){if(Z&&(v=V.mutableSourceEagerHydrationData,v!=null))for(V=0;V=Gt&&ne>=Lr&&V<=vr&&Se<=Xt){v.splice(D,1);break}else if(H!==Gt||Q.width!==At.width||XtSe){if(!(ne!==Lr||Q.height!==At.height||vrV)){Gt>H&&(At.width+=Gt-H,At.x=H),vrne&&(At.height+=Lr-ne,At.y=ne),XtQ&&(Q=Se)),Se ")+` - -No matching component was found for: - `)+v.join(" > ")}return null},r.getPublicRootInstance=function(v){if(v=v.current,!v.child)return null;switch(v.child.tag){case 5:return Re(v.child.stateNode);default:return v.child.stateNode}},r.injectIntoDevTools=function(v){if(v={bundleType:v.bundleType,version:v.version,rendererPackageName:v.rendererPackageName,rendererConfig:v.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:f.ReactCurrentDispatcher,findHostInstanceByFiber:cM,findFiberByHostInstance:v.findFiberByHostInstance||uM,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")v=!1;else{var D=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!D.isDisabled&&D.supportsFiber)try{Xe=D.inject(v),Ha=D}catch{}v=!0}return v},r.observeVisibleRects=function(v,D,Q,H){if(!qt)throw Error(c(363));v=u2(v,D);var V=nn(v,Q,H).disconnect;return{disconnect:function(){V()}}},r.registerMutableSourceForHydration=function(v,D){var Q=D._getVersion;Q=Q(D._source),v.mutableSourceEagerHydrationData==null?v.mutableSourceEagerHydrationData=[D,Q]:v.mutableSourceEagerHydrationData.push(D,Q)},r.runWithPriority=function(v,D){var Q=cc;try{return cc=v,D()}finally{cc=Q}},r.shouldSuspend=function(){return!1},r.unbatchedUpdates=function(v,D){var Q=xr;xr&=-2,xr|=8;try{return v(D)}finally{xr=Q,xr===0&&(Pf(),Tn())}},r.updateContainer=function(v,D,Q,H){var V=D.current,ne=To(),Se=Ss(V);e:if(Q){Q=Q._reactInternals;t:{if(we(Q)!==Q||Q.tag!==1)throw Error(c(170));var Ue=Q;do{switch(Ue.tag){case 3:Ue=Ue.stateNode.context;break t;case 1:if(Jn(Ue.type)){Ue=Ue.stateNode.__reactInternalMemoizedMergedChildContext;break t}}Ue=Ue.return}while(Ue!==null);throw Error(c(171))}if(Q.tag===1){var At=Q.type;if(Jn(At)){Q=La(Q,At,Ue);break e}}Q=Ue}else Q=ca;return D.context===null?D.context=Q:D.pendingContext=Q,D=bl(ne,Se),D.payload={element:v},H=H===void 0?null:H,H!==null&&(D.callback=H),Pl(V,D),Rl(V,Se,ne),Se},r}});var xDe=L((Xpr,PDe)=>{"use strict";PDe.exports=bDe()});var QDe=L(($pr,kDe)=>{"use strict";var mPt={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};kDe.exports=mPt});var NDe=L((ehr,FDe)=>{"use strict";var yPt=Object.assign||function(t){for(var e=1;e"}}]),t}(),TDe=function(){NF(t,null,[{key:"fromJS",value:function(r){var s=r.width,a=r.height;return new t(s,a)}}]);function t(e,r){IW(this,t),this.width=e,this.height=r}return NF(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),RDe=function(){function t(e,r){IW(this,t),this.unit=e,this.value=r}return NF(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case rf.UNIT_POINT:return String(this.value);case rf.UNIT_PERCENT:return this.value+"%";case rf.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();FDe.exports=function(t,e){function r(c,f,p){var h=c[f];c[f]=function(){for(var E=arguments.length,C=Array(E),S=0;S1?C-1:0),P=1;P1&&arguments[1]!==void 0?arguments[1]:NaN,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:rf.DIRECTION_LTR;return c.call(this,f,p,h)}),yPt({Config:e.Config,Node:e.Node,Layout:t("Layout",EPt),Size:t("Size",TDe),Value:t("Value",RDe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},rf)}});var ODe=L((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof Ie=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var s=nodeFS.readFileSync(e);return r?s:s.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,s){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):s()},a.onerror=s,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var s=enlargeMemory();if(!s)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var s=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return s},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,s,a,n){var c=getCFunc(e),f=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,s){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var c=typeof e=="string"?e:null,f;if(r==ALLOC_NONE?f=s:f=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,c?1:e.length)),a){var s=f,p;for(assert((f&3)==0),p=f+(n&-4);s>2]=0;for(p=f+n;s>0]=0;return f}if(c==="i8")return t.subarray||t.slice?HEAPU8.set(t,f):HEAPU8.set(new Uint8Array(t),f),f;for(var h=0,E,C,S;h>0],r|=s,!(s==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var c=1024,f;e>0;)f=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,c))),n=n?n+f:f,t+=c,e-=c;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var s,a,n,c,f,p,h="";;){if(s=t[e++],!s)return h;if(!(s&128)){h+=String.fromCharCode(s);continue}if(a=t[e++]&63,(s&224)==192){h+=String.fromCharCode((s&31)<<6|a);continue}if(n=t[e++]&63,(s&240)==224?s=(s&15)<<12|a<<6|n:(c=t[e++]&63,(s&248)==240?s=(s&7)<<18|a<<12|n<<6|c:(f=t[e++]&63,(s&252)==248?s=(s&3)<<24|a<<18|n<<12|c<<6|f:(p=t[e++]&63,s=(s&1)<<30|a<<24|n<<18|c<<12|f<<6|p))),s<65536)h+=String.fromCharCode(s);else{var E=s-65536;h+=String.fromCharCode(55296|E>>10,56320|E&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,s){if(!(s>0))return 0;for(var a=r,n=r+s-1,c=0;c=55296&&f<=57343&&(f=65536+((f&1023)<<10)|t.charCodeAt(++c)&1023),f<=127){if(r>=n)break;e[r++]=f}else if(f<=2047){if(r+1>=n)break;e[r++]=192|f>>6,e[r++]=128|f&63}else if(f<=65535){if(r+2>=n)break;e[r++]=224|f>>12,e[r++]=128|f>>6&63,e[r++]=128|f&63}else if(f<=2097151){if(r+3>=n)break;e[r++]=240|f>>18,e[r++]=128|f>>12&63,e[r++]=128|f>>6&63,e[r++]=128|f&63}else if(f<=67108863){if(r+4>=n)break;e[r++]=248|f>>24,e[r++]=128|f>>18&63,e[r++]=128|f>>12&63,e[r++]=128|f>>6&63,e[r++]=128|f&63}else{if(r+5>=n)break;e[r++]=252|f>>30,e[r++]=128|f>>24&63,e[r++]=128|f>>18&63,e[r++]=128|f>>12&63,e[r++]=128|f>>6&63,e[r++]=128|f&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&s<=57343&&(s=65536+((s&1023)<<10)|t.charCodeAt(++r)&1023),s<=127?++e:s<=2047?e+=2:s<=65535?e+=3:s<=2097151?e+=4:s<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),s=lengthBytesUTF8(r)+1,a=_malloc(s);stringToUTF8(r,a,s);var n=_malloc(4),c=e(a,0,0,n);if(getValue(n,"i32")===0&&c)return Pointer_stringify(c)}catch{}finally{a&&_free(a),n&&_free(n),c&&_free(c)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var s=demangle(r);return r===s?r:r+" ["+s+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` -`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var s=r>0?r:lengthBytesUTF8(t)+1,a=new Array(s),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(s&=255),e.push(String.fromCharCode(s))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var s,a;r&&(a=e+lengthBytesUTF8(t),s=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=s)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var s=0;s>0]=t.charCodeAt(s);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var s=e>>>16,a=e&65535,n=r>>>16,c=r&65535;return a*c+(s*c+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,s,a,n,c,f){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,s,a,n,c,f){return ASM_CONSTS[t](e,r,s,a,n,c,f)}function _emscripten_asm_const_iiiii(t,e,r,s,a){return ASM_CONSTS[t](e,r,s,a)}function _emscripten_asm_const_iiidddddd(t,e,r,s,a,n,c,f,p){return ASM_CONSTS[t](e,r,s,a,n,c,f,p)}function _emscripten_asm_const_iiididi(t,e,r,s,a,n,c){return ASM_CONSTS[t](e,r,s,a,n,c)}function _emscripten_asm_const_iiii(t,e,r,s){return ASM_CONSTS[t](e,r,s)}function _emscripten_asm_const_iiiid(t,e,r,s,a){return ASM_CONSTS[t](e,r,s,a)}function _emscripten_asm_const_iiiiii(t,e,r,s,a,n){return ASM_CONSTS[t](e,r,s,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,s){var a=arguments.length,n=a<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,r):s,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,s);else for(var f=t.length-1;f>=0;f--)(c=t[f])&&(n=(a<3?c(n):a>3?c(e,r,n):c(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,s){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=s/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var c=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,c)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(c){c.source===window&&c.data===s&&(c.stopPropagation(),r.shift()())};var a=n,r=[],s="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(f){r.push(f),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(f),window.postMessage({target:s})):window.postMessage(s,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,s,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=s;var n;typeof s<"u"?n=function(){Module.dynCall_vi(t,s)}:n=function(){Module.dynCall_v(t)};var c=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var E=Browser.mainLoop.remainingBlockers,C=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=C:(C=C+.5,Browser.mainLoop.remainingBlockers=(8*E+C)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),c1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(c0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,c,f,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(c)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(c)}))}catch(P){Runtime.warnOnce("Blob constructor present but fails: "+P+"; falling back to blob builder")}if(!h){var E=new Browser.BlobBuilder;E.append(new Uint8Array(n).buffer),h=E.getBlob()}var C=Browser.URLObject.createObjectURL(h),S=new Image;S.onload=function(){assert(S.complete,"Image "+c+" could not be decoded");var I=document.createElement("canvas");I.width=S.width,I.height=S.height;var R=I.getContext("2d");R.drawImage(S,0,0),Module.preloadedImages[c]=I,Browser.URLObject.revokeObjectURL(C),f&&f(n)},S.onerror=function(I){console.log("Image "+C+" could not be decoded"),p&&p()},S.src=C},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,c,f,p){var h=!1;function E(R){h||(h=!0,Module.preloadedAudios[c]=R,f&&f(n))}function C(){h||(h=!0,Module.preloadedAudios[c]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var S=new Blob([n],{type:Browser.getMimetype(c)})}catch{return C()}var P=Browser.URLObject.createObjectURL(S),I=new Audio;I.addEventListener("canplaythrough",function(){E(I)},!1),I.onerror=function(N){if(h)return;console.log("warning: browser could not fully decode audio "+c+", trying slower base64 approach");function U(W){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ie="=",Ae="",ce=0,me=0,pe=0;pe=6;){var Be=ce>>me-6&63;me-=6,Ae+=te[Be]}return me==2?(Ae+=te[(ce&3)<<4],Ae+=ie+ie):me==4&&(Ae+=te[(ce&15)<<2],Ae+=ie),Ae}I.src="data:audio/x-"+c.substr(-3)+";base64,"+U(n),E(I)},I.src=P,Browser.safeSetTimeout(function(){E(I)},1e4)}else return C()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var s=Module.canvas;s&&(s.requestPointerLock=s.requestPointerLock||s.mozRequestPointerLock||s.webkitRequestPointerLock||s.msRequestPointerLock||function(){},s.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},s.exitPointerLock=s.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&s.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,s){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var c={antialias:!1,alpha:!1};if(s)for(var f in s)c[f]=s[f];n=GL.createContext(t,c),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var s=Module.canvas;function a(){Browser.isFullscreen=!1;var c=s.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===c?(s.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},s.exitFullscreen=s.exitFullscreen.bind(document),Browser.lockPointer&&s.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(c.parentNode.insertBefore(s,c),c.parentNode.removeChild(c),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(s)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");s.parentNode.insertBefore(n,s),n.appendChild(s),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(s,a,n){return Browser.requestFullscreen(s,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,s=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var c=t.touch;if(c===void 0)return;var f=c.pageX-(a+e.left),p=c.pageY-(n+e.top);f=f*(r/e.width),p=p*(s/e.height);var h={x:f,y:p};if(t.type==="touchstart")Browser.lastTouches[c.identifier]=h,Browser.touches[c.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[c.identifier];E||(E=h),Browser.lastTouches[c.identifier]=E,Browser.touches[c.identifier]=h}return}var C=t.pageX-(a+e.left),S=t.pageY-(n+e.top);C=C*(r/e.width),S=S*(s/e.height),Browser.mouseMovementX=C-Browser.mouseX,Browser.mouseMovementY=S-Browser.mouseY,Browser.mouseX=C,Browser.mouseY=S}},asyncLoad:function(t,e,r,s){var a=s?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var s=Module.canvas;Browser.updateCanvasDimensions(s,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var s=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(s/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(s){return(typeof FS>"u"||!(s instanceof FS.ErrnoError))&&abort(s),-s.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,E,C,S,P){if(h==1){var I=C&896;(I==128||I==256||I==384)&&(p="X const")}var R;return P?R=E.replace("X",p).replace("Y",S):R=p.replace("X",E).replace("Y",S),R.replace(/([*&]) (?=[*&])/g,"$1")}function s(p,h,E,C,S){throw new Error(p+" type "+E.replace("X",h+"?")+(C?" with flag "+C:"")+" in "+S)}function a(p,h,E,C,S,P,I,R){P===void 0&&(P="X"),R===void 0&&(R=1);var N=E(p);if(N)return N;var U=C(p),W=U.placeholderFlag,te=e[W];I&&te&&(P=r(I[2],I[0],P,te[0],"?",!0));var ie;W==0&&(ie="Unbound"),W>=10&&(ie="Corrupt"),R>20&&(ie="Deeply nested"),ie&&s(ie,p,P,W,S||"?");var Ae=U.paramList[0],ce=a(Ae,h,E,C,S,P,te,R+1),me,pe={flags:te[0],id:p,name:"",paramList:[ce]},Be=[],Ce="?";switch(U.placeholderFlag){case 1:me=ce.spec;break;case 2:if((ce.flags&15360)==1024&&ce.spec.ptrSize==1){pe.flags=7168;break}case 3:case 6:case 5:me=ce.spec,ce.flags&15360;break;case 8:Ce=""+U.paramList[1],pe.paramList.push(U.paramList[1]);break;case 9:for(var g=0,we=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),s=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),c=SYSCALLS.get(),f=a;return FS.llseek(r,f,c),HEAP32[n>>2]=r.position,r.getdents&&f===0&&c===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),s=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,C){var S=___syscall146.buffers[E];assert(S),C===0||C===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(S,0)),S.length=0):S.push(C)});for(var c=0;c>2],p=HEAP32[s+(c*8+4)>>2],h=0;h"u"||!(E instanceof FS.ErrnoError))&&abort(E),-E.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var s=_nbind.typeNameTbl.NBind.proto;return s.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var s=HEAPU32[t.pagePtr];if(s){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],s=new r(e);return typeIdTbl[e.id]=s,_nbind.typeNameTbl[e.name]=s,s}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var s=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(s=[s[0],s.slice(1)]),{paramList:s,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},s=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+s];if(!a)throw new Error("dynCall_"+s+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,s){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,s)):(r.arity=s,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var s=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return s.heap=a[r.ptrSize*8],s.ptrSize=r.ptrSize,s}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,s){return s&&s.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,s=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,s,r),s}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,s){return function(a){return pushCString(a,s)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(s){return!!s},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,s){return s&&s.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(s){__extends(a,s);function a(n,c,f,p){var h=s.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=c,C=f,S=p;if(n!==_nbind.ptrMarker){var P=h.__nbindConstructor.apply(h,arguments);E=4608,S=HEAPU32[P/4],C=HEAPU32[P/4+1]}var I={configurable:!0,enumerable:!1,value:null,writable:!1},R={__nbindFlags:E,__nbindPtr:C};S&&(R.__nbindShared=S,_nbind.mark(h));for(var N=0,U=Object.keys(R);N>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?c=Buffer.from(n):c=new Buffer(n),c.copy(s)}else getBuffer(s).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,s,a,n){try{Module.dynCall_viiiii(t,e,r,s,a,n)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(s){if(typeof s!="number"&&s!=="longjmp")throw s;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(s){if(typeof s!="number"&&s!=="longjmp")throw s;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,s){try{return Module.dynCall_fiff(t,e,r,s)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(s){if(typeof s!="number"&&s!=="longjmp")throw s;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,s,a){try{Module.dynCall_viddi(t,e,r,s,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,s){try{Module.dynCall_vidd(t,e,r,s)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,s){try{return Module.dynCall_iiii(t,e,r,s)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,s){try{return Module.dynCall_diii(t,e,r,s)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(s){if(typeof s!="number"&&s!=="longjmp")throw s;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(s){if(typeof s!="number"&&s!=="longjmp")throw s;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,s,a,n){try{Module.dynCall_viiddi(t,e,r,s,a,n)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,s,a,n,c){try{Module.dynCall_viiiiii(t,e,r,s,a,n,c)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(s){if(typeof s!="number"&&s!=="longjmp")throw s;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,s,a,n){try{return Module.dynCall_iiiiii(t,e,r,s,a,n)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,s,a){try{Module.dynCall_viiid(t,e,r,s,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,s,a,n,c){try{Module.dynCall_viififi(t,e,r,s,a,n,c)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_viii(t,e,r,s){try{Module.dynCall_viii(t,e,r,s)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,s){try{Module.dynCall_viid(t,e,r,s)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(s){if(typeof s!="number"&&s!=="longjmp")throw s;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,s,a){try{Module.dynCall_viiii(t,e,r,s,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var s=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),c=new t.Uint8Array(r),f=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),C=e.DYNAMICTOP_PTR|0,S=e.tempDoublePtr|0,P=e.ABORT|0,I=e.STACKTOP|0,R=e.STACK_MAX|0,N=e.cttz_i8|0,U=e.___dso_handle|0,W=0,te=0,ie=0,Ae=0,ce=t.NaN,me=t.Infinity,pe=0,Be=0,Ce=0,g=0,we=0,ye=0,fe=t.Math.floor,se=t.Math.abs,X=t.Math.sqrt,De=t.Math.pow,Re=t.Math.cos,dt=t.Math.sin,j=t.Math.tan,rt=t.Math.acos,Fe=t.Math.asin,Ne=t.Math.atan,Pe=t.Math.atan2,Ye=t.Math.exp,ke=t.Math.log,it=t.Math.ceil,_e=t.Math.imul,x=t.Math.min,w=t.Math.max,b=t.Math.clz32,y=t.Math.fround,F=e.abort,z=e.assert,Z=e.enlargeMemory,$=e.getTotalMemory,oe=e.abortOnCannotGrowMemory,xe=e.invoke_viiiii,Te=e.invoke_vif,lt=e.invoke_vid,It=e.invoke_fiff,qt=e.invoke_vi,ir=e.invoke_vii,Pt=e.invoke_ii,gn=e.invoke_viddi,Pr=e.invoke_vidd,Ir=e.invoke_iiii,Nr=e.invoke_diii,nn=e.invoke_di,ai=e.invoke_iid,wo=e.invoke_iii,ns=e.invoke_viiddi,to=e.invoke_viiiiii,Bo=e.invoke_dii,ji=e.invoke_i,ro=e.invoke_iiiiii,vo=e.invoke_viiid,RA=e.invoke_viififi,pf=e.invoke_viii,yh=e.invoke_v,Eh=e.invoke_viid,no=e.invoke_idd,jn=e.invoke_viiii,Fs=e._emscripten_asm_const_iiiii,io=e._emscripten_asm_const_iiidddddd,lu=e._emscripten_asm_const_iiiid,cu=e.__nbind_reference_external,uu=e._emscripten_asm_const_iiiiiiii,FA=e._removeAccessorPrefix,NA=e._typeModule,aa=e.__nbind_register_pool,la=e.__decorate,OA=e._llvm_stackrestore,gr=e.___cxa_atexit,So=e.__extends,Me=e.__nbind_get_value_object,fu=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,Cr=e._emscripten_set_main_loop_timing,hf=e.__nbind_register_primitive,LA=e.__nbind_register_type,MA=e._emscripten_memcpy_big,Au=e.__nbind_register_function,pu=e.___setErrNo,ac=e.__nbind_register_class,ve=e.__nbind_finish,Nt=e._abort,lc=e._nbind_value,Li=e._llvm_stacksave,so=e.___syscall54,Rt=e._defineHidden,xn=e._emscripten_set_main_loop,ca=e._emscripten_get_now,qi=e.__nbind_register_callback_signature,Mi=e._emscripten_asm_const_iiiiii,Oa=e.__nbind_free_external,dn=e._emscripten_asm_const_iiii,Jn=e._emscripten_asm_const_iiididi,hu=e.___syscall6,Ih=e._atexit,La=e.___syscall140,Ma=e.___syscall146,Ua=y(0);let Xe=y(0);function Ha(o){o=o|0;var l=0;return l=I,I=I+o|0,I=I+15&-16,l|0}function gf(){return I|0}function cc(o){o=o|0,I=o}function wn(o,l){o=o|0,l=l|0,I=o,R=l}function ua(o,l){o=o|0,l=l|0,W||(W=o,te=l)}function _A(o){o=o|0,ye=o}function UA(){return ye|0}function fa(){var o=0,l=0;Qr(8104,8,400)|0,Qr(8504,408,540)|0,o=9044,l=o+44|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));s[9088]=0,s[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,gr(17,8104,U|0)|0}function vl(o){o=o|0,gt(o+948|0)}function Mt(o){return o=y(o),((EP(o)|0)&2147483647)>>>0>2139095040|0}function kn(o,l,u){o=o|0,l=l|0,u=u|0;e:do if(n[o+(l<<3)+4>>2]|0)o=o+(l<<3)|0;else{if((l|2|0)==3&&n[o+60>>2]|0){o=o+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[o+52>>2]|0){o=o+48|0;break e}break}default:}if(n[o+68>>2]|0){o=o+64|0;break}else{o=(l|1|0)==5?948:u;break}}while(!1);return o|0}function Aa(o){o=o|0;var l=0;return l=KP(1e3)|0,ja(o,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Qr(l|0,8104,1e3)|0,s[o+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=o,l|0}function ja(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;d=I,I=I+16|0,A=d,l||(n[A>>2]=u,Gg(o,5,3197,A)),I=d}function is(){return Aa(956)|0}function uc(o){o=o|0;var l=0;return l=Jt(1e3)|0,gu(l,o),ja(n[o+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function gu(o,l){o=o|0,l=l|0;var u=0;Qr(o|0,l|0,948)|0,vy(o+948|0,l+948|0),u=o+960|0,o=l+960|0,l=u+40|0;do n[u>>2]=n[o>>2],u=u+4|0,o=o+4|0;while((u|0)<(l|0))}function fc(o){o=o|0;var l=0,u=0,A=0,d=0;if(l=o+944|0,u=n[l>>2]|0,u|0&&(qa(u+948|0,o)|0,n[l>>2]=0),u=_i(o)|0,u|0){l=0;do n[(ws(o,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(u|0))}u=o+948|0,A=n[u>>2]|0,d=o+952|0,l=n[d>>2]|0,(l|0)!=(A|0)&&(n[d>>2]=l+(~((l+-4-A|0)>>>2)<<2)),Sl(u),JP(o),n[2276]=(n[2276]|0)+-1}function qa(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0;A=n[o>>2]|0,k=o+4|0,u=n[k>>2]|0,m=u;e:do if((A|0)==(u|0))d=A,B=4;else for(o=A;;){if((n[o>>2]|0)==(l|0)){d=o,B=4;break e}if(o=o+4|0,(o|0)==(u|0)){o=0;break}}while(!1);return(B|0)==4&&((d|0)!=(u|0)?(A=d+4|0,o=m-A|0,l=o>>2,l&&(Q2(d|0,A|0,o|0)|0,u=n[k>>2]|0),o=d+(l<<2)|0,(u|0)==(o|0)||(n[k>>2]=u+(~((u+-4-o|0)>>>2)<<2)),o=1):o=0),o|0}function _i(o){return o=o|0,(n[o+952>>2]|0)-(n[o+948>>2]|0)>>2|0}function ws(o,l){o=o|0,l=l|0;var u=0;return u=n[o+948>>2]|0,(n[o+952>>2]|0)-u>>2>>>0>l>>>0?o=n[u+(l<<2)>>2]|0:o=0,o|0}function Sl(o){o=o|0;var l=0,u=0,A=0,d=0;A=I,I=I+32|0,l=A,d=n[o>>2]|0,u=(n[o+4>>2]|0)-d|0,((n[o+8>>2]|0)-d|0)>>>0>u>>>0&&(d=u>>2,Py(l,d,d,o+8|0),IP(o,l),xy(l)),I=A}function df(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0;_=_i(o)|0;do if(_|0){if((n[(ws(o,0)|0)+944>>2]|0)==(o|0)){if(!(qa(o+948|0,l)|0))break;Qr(l+400|0,8504,540)|0,n[l+944>>2]=0,Oe(o);break}B=n[(n[o+976>>2]|0)+12>>2]|0,k=o+948|0,T=(B|0)==0,u=0,m=0;do A=n[(n[k>>2]|0)+(m<<2)>>2]|0,(A|0)==(l|0)?Oe(o):(d=uc(A)|0,n[(n[k>>2]|0)+(u<<2)>>2]=d,n[d+944>>2]=o,T||y_[B&15](A,d,o,u),u=u+1|0),m=m+1|0;while((m|0)!=(_|0));if(u>>>0<_>>>0){T=o+948|0,k=o+952|0,B=u,u=n[k>>2]|0;do m=(n[T>>2]|0)+(B<<2)|0,A=m+4|0,d=u-A|0,l=d>>2,l&&(Q2(m|0,A|0,d|0)|0,u=n[k>>2]|0),d=u,A=m+(l<<2)|0,(d|0)!=(A|0)&&(u=d+(~((d+-4-A|0)>>>2)<<2)|0,n[k>>2]=u),B=B+1|0;while((B|0)!=(_|0))}}while(!1)}function Ac(o){o=o|0;var l=0,u=0,A=0,d=0;Bi(o,(_i(o)|0)==0,2491),Bi(o,(n[o+944>>2]|0)==0,2545),l=o+948|0,u=n[l>>2]|0,A=o+952|0,d=n[A>>2]|0,(d|0)!=(u|0)&&(n[A>>2]=d+(~((d+-4-u|0)>>>2)<<2)),Sl(l),l=o+976|0,u=n[l>>2]|0,Qr(o|0,8104,1e3)|0,s[u+2>>0]|0&&(n[o+4>>2]=2,n[o+12>>2]=4),n[l>>2]=u}function Bi(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;d=I,I=I+16|0,A=d,l||(n[A>>2]=u,Qo(o,5,3197,A)),I=d}function Qn(){return n[2276]|0}function pc(){var o=0;return o=KP(20)|0,Je((o|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[o>>2]=n[239],n[o+4>>2]=n[240],n[o+8>>2]=n[241],n[o+12>>2]=n[242],n[o+16>>2]=n[243],o|0}function Je(o,l){o=o|0,l=l|0;var u=0,A=0;A=I,I=I+16|0,u=A,o||(n[u>>2]=l,Qo(0,5,3197,u)),I=A}function st(o){o=o|0,JP(o),n[2277]=(n[2277]|0)+-1}function St(o,l){o=o|0,l=l|0;var u=0;l?(Bi(o,(_i(o)|0)==0,2629),u=1):(u=0,l=0),n[o+964>>2]=l,n[o+988>>2]=u}function lr(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,m=A+8|0,d=A+4|0,B=A,n[d>>2]=l,Bi(o,(n[l+944>>2]|0)==0,2709),Bi(o,(n[o+964>>2]|0)==0,2763),ee(o),l=o+948|0,n[B>>2]=(n[l>>2]|0)+(u<<2),n[m>>2]=n[B>>2],Ee(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=o,Oe(o),I=A}function ee(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0;if(u=_i(o)|0,u|0&&(n[(ws(o,0)|0)+944>>2]|0)!=(o|0)){A=n[(n[o+976>>2]|0)+12>>2]|0,d=o+948|0,m=(A|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=uc(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=o,m||y_[A&15](B,k,o,l),l=l+1|0;while((l|0)!=(u|0))}}function Ee(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0,We=0,Le=0,Qe=0,tt=0,Ze=0;tt=I,I=I+64|0,G=tt+52|0,k=tt+48|0,ae=tt+28|0,We=tt+24|0,Le=tt+20|0,Qe=tt,A=n[o>>2]|0,m=A,l=A+((n[l>>2]|0)-m>>2<<2)|0,A=o+4|0,d=n[A>>2]|0,B=o+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[u>>2],n[A>>2]=(n[A>>2]|0)+4;break}CP(o,l,d,l+4|0),l>>>0<=u>>>0&&(u=(n[A>>2]|0)>>>0>u>>>0?u+4|0:u),n[l>>2]=n[u>>2]}else{A=(d-m>>2)+1|0,d=O(o)|0,d>>>0>>0&&sn(o),M=n[o>>2]|0,_=(n[B>>2]|0)-M|0,m=_>>1,Py(Qe,_>>2>>>0>>1>>>0?m>>>0>>0?A:m:d,l-M>>2,o+8|0),M=Qe+8|0,A=n[M>>2]|0,m=Qe+12|0,_=n[m>>2]|0,B=_,T=A;do if((A|0)==(_|0)){if(_=Qe+4|0,A=n[_>>2]|0,Ze=n[Qe>>2]|0,d=Ze,A>>>0<=Ze>>>0){A=B-d>>1,A=A|0?A:1,Py(ae,A,A>>>2,n[Qe+16>>2]|0),n[We>>2]=n[_>>2],n[Le>>2]=n[M>>2],n[k>>2]=n[We>>2],n[G>>2]=n[Le>>2],o2(ae,k,G),A=n[Qe>>2]|0,n[Qe>>2]=n[ae>>2],n[ae>>2]=A,A=ae+4|0,Ze=n[_>>2]|0,n[_>>2]=n[A>>2],n[A>>2]=Ze,A=ae+8|0,Ze=n[M>>2]|0,n[M>>2]=n[A>>2],n[A>>2]=Ze,A=ae+12|0,Ze=n[m>>2]|0,n[m>>2]=n[A>>2],n[A>>2]=Ze,xy(ae),A=n[M>>2]|0;break}m=A,B=((m-d>>2)+1|0)/-2|0,k=A+(B<<2)|0,d=T-m|0,m=d>>2,m&&(Q2(k|0,A|0,d|0)|0,A=n[_>>2]|0),Ze=k+(m<<2)|0,n[M>>2]=Ze,n[_>>2]=A+(B<<2),A=Ze}while(!1);n[A>>2]=n[u>>2],n[M>>2]=(n[M>>2]|0)+4,l=wP(o,Qe,l)|0,xy(Qe)}while(!1);return I=tt,l|0}function Oe(o){o=o|0;var l=0;do{if(l=o+984|0,s[l>>0]|0)break;s[l>>0]=1,h[o+504>>2]=y(ce),o=n[o+944>>2]|0}while(o|0)}function gt(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-4-A|0)>>>2)<<2)),Et(u))}function yt(o){return o=o|0,n[o+944>>2]|0}function Dt(o){o=o|0,Bi(o,(n[o+964>>2]|0)!=0,2832),Oe(o)}function tr(o){return o=o|0,(s[o+984>>0]|0)!=0|0}function fn(o,l){o=o|0,l=l|0,EYe(o,l,400)|0&&(Qr(o|0,l|0,400)|0,Oe(o))}function li(o){o=o|0;var l=Xe;return l=y(h[o+44>>2]),o=Mt(l)|0,y(o?y(0):l)}function Gi(o){o=o|0;var l=Xe;return l=y(h[o+48>>2]),Mt(l)|0&&(l=s[(n[o+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function Tn(o,l){o=o|0,l=l|0,n[o+980>>2]=l}function Ga(o){return o=o|0,n[o+980>>2]|0}function gy(o,l){o=o|0,l=l|0;var u=0;u=o+4|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function X1(o){return o=o|0,n[o+4>>2]|0}function Do(o,l){o=o|0,l=l|0;var u=0;u=o+8|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function dy(o){return o=o|0,n[o+8>>2]|0}function Ch(o,l){o=o|0,l=l|0;var u=0;u=o+12|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function $1(o){return o=o|0,n[o+12>>2]|0}function bo(o,l){o=o|0,l=l|0;var u=0;u=o+16|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function wh(o){return o=o|0,n[o+16>>2]|0}function Bh(o,l){o=o|0,l=l|0;var u=0;u=o+20|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function du(o){return o=o|0,n[o+20>>2]|0}function vh(o,l){o=o|0,l=l|0;var u=0;u=o+24|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function Rg(o){return o=o|0,n[o+24>>2]|0}function Fg(o,l){o=o|0,l=l|0;var u=0;u=o+28|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function Ng(o){return o=o|0,n[o+28>>2]|0}function my(o,l){o=o|0,l=l|0;var u=0;u=o+32|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function mf(o){return o=o|0,n[o+32>>2]|0}function Po(o,l){o=o|0,l=l|0;var u=0;u=o+36|0,(n[u>>2]|0)!=(l|0)&&(n[u>>2]=l,Oe(o))}function Dl(o){return o=o|0,n[o+36>>2]|0}function Sh(o,l){o=o|0,l=y(l);var u=0;u=o+40|0,y(h[u>>2])!=l&&(h[u>>2]=l,Oe(o))}function Og(o,l){o=o|0,l=y(l);var u=0;u=o+44|0,y(h[u>>2])!=l&&(h[u>>2]=l,Oe(o))}function bl(o,l){o=o|0,l=y(l);var u=0;u=o+48|0,y(h[u>>2])!=l&&(h[u>>2]=l,Oe(o))}function Pl(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+52|0,d=o+56|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function yy(o,l){o=o|0,l=y(l);var u=0,A=0;A=o+52|0,u=o+56|0,y(h[A>>2])==l&&(n[u>>2]|0)==2||(h[A>>2]=l,A=Mt(l)|0,n[u>>2]=A?3:2,Oe(o))}function HA(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+52|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function Ey(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=(m^1)&1,d=o+132+(l<<3)|0,l=o+132+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function Iy(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=m?0:2,d=o+132+(l<<3)|0,l=o+132+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function jA(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=l+132+(u<<3)|0,l=n[A+4>>2]|0,u=o,n[u>>2]=n[A>>2],n[u+4>>2]=l}function qA(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=(m^1)&1,d=o+60+(l<<3)|0,l=o+60+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function Y(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=m?0:2,d=o+60+(l<<3)|0,l=o+60+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function xt(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=l+60+(u<<3)|0,l=n[A+4>>2]|0,u=o,n[u>>2]=n[A>>2],n[u+4>>2]=l}function GA(o,l){o=o|0,l=l|0;var u=0;u=o+60+(l<<3)+4|0,(n[u>>2]|0)!=3&&(h[o+60+(l<<3)>>2]=y(ce),n[u>>2]=3,Oe(o))}function xo(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=(m^1)&1,d=o+204+(l<<3)|0,l=o+204+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function yf(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=m?0:2,d=o+204+(l<<3)|0,l=o+204+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function mt(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=l+204+(u<<3)|0,l=n[A+4>>2]|0,u=o,n[u>>2]=n[A>>2],n[u+4>>2]=l}function mu(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0,m=0;m=Mt(u)|0,A=(m^1)&1,d=o+276+(l<<3)|0,l=o+276+(l<<3)+4|0,m|y(h[d>>2])==u&&(n[l>>2]|0)==(A|0)||(h[d>>2]=u,n[l>>2]=A,Oe(o))}function Cy(o,l){return o=o|0,l=l|0,y(h[o+276+(l<<3)>>2])}function Lg(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+348|0,d=o+352|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function e2(o,l){o=o|0,l=y(l);var u=0,A=0;A=o+348|0,u=o+352|0,y(h[A>>2])==l&&(n[u>>2]|0)==2||(h[A>>2]=l,A=Mt(l)|0,n[u>>2]=A?3:2,Oe(o))}function Dh(o){o=o|0;var l=0;l=o+352|0,(n[l>>2]|0)!=3&&(h[o+348>>2]=y(ce),n[l>>2]=3,Oe(o))}function ur(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+348|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function Zi(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+356|0,d=o+360|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function Ef(o,l){o=o|0,l=y(l);var u=0,A=0;A=o+356|0,u=o+360|0,y(h[A>>2])==l&&(n[u>>2]|0)==2||(h[A>>2]=l,A=Mt(l)|0,n[u>>2]=A?3:2,Oe(o))}function Wa(o){o=o|0;var l=0;l=o+360|0,(n[l>>2]|0)!=3&&(h[o+356>>2]=y(ce),n[l>>2]=3,Oe(o))}function Mg(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+356|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function yu(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+364|0,d=o+368|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function If(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=m?0:2,A=o+364|0,d=o+368|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function wt(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+364|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function di(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+372|0,d=o+376|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function WA(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=m?0:2,A=o+372|0,d=o+376|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function Ya(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+372|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function pa(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+380|0,d=o+384|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function Va(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=m?0:2,A=o+380|0,d=o+384|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function _g(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+380|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function bh(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=(m^1)&1,A=o+388|0,d=o+392|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function Ug(o,l){o=o|0,l=y(l);var u=0,A=0,d=0,m=0;m=Mt(l)|0,u=m?0:2,A=o+388|0,d=o+392|0,m|y(h[A>>2])==l&&(n[d>>2]|0)==(u|0)||(h[A>>2]=l,n[d>>2]=u,Oe(o))}function wy(o,l){o=o|0,l=l|0;var u=0,A=0;A=l+388|0,u=n[A+4>>2]|0,l=o,n[l>>2]=n[A>>2],n[l+4>>2]=u}function YA(o,l){o=o|0,l=y(l);var u=0;u=o+396|0,y(h[u>>2])!=l&&(h[u>>2]=l,Oe(o))}function Hg(o){return o=o|0,y(h[o+396>>2])}function Eu(o){return o=o|0,y(h[o+400>>2])}function Iu(o){return o=o|0,y(h[o+404>>2])}function Cf(o){return o=o|0,y(h[o+408>>2])}function Ns(o){return o=o|0,y(h[o+412>>2])}function Cu(o){return o=o|0,y(h[o+416>>2])}function qn(o){return o=o|0,y(h[o+420>>2])}function ss(o,l){switch(o=o|0,l=l|0,Bi(o,(l|0)<6,2918),l|0){case 0:{l=(n[o+496>>2]|0)==2?5:4;break}case 2:{l=(n[o+496>>2]|0)==2?4:5;break}default:}return y(h[o+424+(l<<2)>>2])}function ki(o,l){switch(o=o|0,l=l|0,Bi(o,(l|0)<6,2918),l|0){case 0:{l=(n[o+496>>2]|0)==2?5:4;break}case 2:{l=(n[o+496>>2]|0)==2?4:5;break}default:}return y(h[o+448+(l<<2)>>2])}function VA(o,l){switch(o=o|0,l=l|0,Bi(o,(l|0)<6,2918),l|0){case 0:{l=(n[o+496>>2]|0)==2?5:4;break}case 2:{l=(n[o+496>>2]|0)==2?4:5;break}default:}return y(h[o+472+(l<<2)>>2])}function wf(o,l){o=o|0,l=l|0;var u=0,A=Xe;return u=n[o+4>>2]|0,(u|0)==(n[l+4>>2]|0)?u?(A=y(h[o>>2]),o=y(se(y(A-y(h[l>>2]))))>2]=0,n[A+4>>2]=0,n[A+8>>2]=0,fu(A|0,o|0,l|0,0),Qo(o,3,(s[A+11>>0]|0)<0?n[A>>2]|0:A,u),jYe(A),I=u}function os(o,l,u,A){o=y(o),l=y(l),u=u|0,A=A|0;var d=Xe;o=y(o*l),d=y(A_(o,y(1)));do if(mn(d,y(0))|0)o=y(o-d);else{if(o=y(o-d),mn(d,y(1))|0){o=y(o+y(1));break}if(u){o=y(o+y(1));break}A||(d>y(.5)?d=y(1):(A=mn(d,y(.5))|0,d=y(A?1:0)),o=y(o+d))}while(!1);return y(o/l)}function xl(o,l,u,A,d,m,B,k,T,_,M,G,ae){o=o|0,l=y(l),u=u|0,A=y(A),d=d|0,m=y(m),B=B|0,k=y(k),T=y(T),_=y(_),M=y(M),G=y(G),ae=ae|0;var We=0,Le=Xe,Qe=Xe,tt=Xe,Ze=Xe,ct=Xe,He=Xe;return T>2]),Le!=y(0))?(tt=y(os(l,Le,0,0)),Ze=y(os(A,Le,0,0)),Qe=y(os(m,Le,0,0)),Le=y(os(k,Le,0,0))):(Qe=m,tt=l,Le=k,Ze=A),(d|0)==(o|0)?We=mn(Qe,tt)|0:We=0,(B|0)==(u|0)?ae=mn(Le,Ze)|0:ae=0,!We&&(ct=y(l-M),!(ko(o,ct,T)|0))&&!(Bf(o,ct,d,T)|0)?We=vf(o,ct,d,m,T)|0:We=1,!ae&&(He=y(A-G),!(ko(u,He,_)|0))&&!(Bf(u,He,B,_)|0)?ae=vf(u,He,B,k,_)|0:ae=1,ae=We&ae),ae|0}function ko(o,l,u){return o=o|0,l=y(l),u=y(u),(o|0)==1?o=mn(l,u)|0:o=0,o|0}function Bf(o,l,u,A){return o=o|0,l=y(l),u=u|0,A=y(A),(o|0)==2&(u|0)==0?l>=A?o=1:o=mn(l,A)|0:o=0,o|0}function vf(o,l,u,A,d){return o=o|0,l=y(l),u=u|0,A=y(A),d=y(d),(o|0)==2&(u|0)==2&A>l?d<=l?o=1:o=mn(l,d)|0:o=0,o|0}function kl(o,l,u,A,d,m,B,k,T,_,M){o=o|0,l=y(l),u=y(u),A=A|0,d=d|0,m=m|0,B=y(B),k=y(k),T=T|0,_=_|0,M=M|0;var G=0,ae=0,We=0,Le=0,Qe=Xe,tt=Xe,Ze=0,ct=0,He=0,Ge=0,Lt=0,qr=0,fr=0,$t=0,Tr=0,Hr=0,cr=0,Hn=Xe,Fo=Xe,No=Xe,Oo=0,$a=0;cr=I,I=I+160|0,$t=cr+152|0,fr=cr+120|0,qr=cr+104|0,He=cr+72|0,Le=cr+56|0,Lt=cr+8|0,ct=cr,Ge=(n[2279]|0)+1|0,n[2279]=Ge,Tr=o+984|0,s[Tr>>0]|0&&(n[o+512>>2]|0)!=(n[2278]|0)?Ze=4:(n[o+516>>2]|0)==(A|0)?Hr=0:Ze=4,(Ze|0)==4&&(n[o+520>>2]=0,n[o+924>>2]=-1,n[o+928>>2]=-1,h[o+932>>2]=y(-1),h[o+936>>2]=y(-1),Hr=1);e:do if(n[o+964>>2]|0)if(Qe=y(yn(o,2,B)),tt=y(yn(o,0,B)),G=o+916|0,No=y(h[G>>2]),Fo=y(h[o+920>>2]),Hn=y(h[o+932>>2]),xl(d,l,m,u,n[o+924>>2]|0,No,n[o+928>>2]|0,Fo,Hn,y(h[o+936>>2]),Qe,tt,M)|0)Ze=22;else if(We=n[o+520>>2]|0,!We)Ze=21;else for(ae=0;;){if(G=o+524+(ae*24|0)|0,Hn=y(h[G>>2]),Fo=y(h[o+524+(ae*24|0)+4>>2]),No=y(h[o+524+(ae*24|0)+16>>2]),xl(d,l,m,u,n[o+524+(ae*24|0)+8>>2]|0,Hn,n[o+524+(ae*24|0)+12>>2]|0,Fo,No,y(h[o+524+(ae*24|0)+20>>2]),Qe,tt,M)|0){Ze=22;break e}if(ae=ae+1|0,ae>>>0>=We>>>0){Ze=21;break}}else{if(T){if(G=o+916|0,!(mn(y(h[G>>2]),l)|0)){Ze=21;break}if(!(mn(y(h[o+920>>2]),u)|0)){Ze=21;break}if((n[o+924>>2]|0)!=(d|0)){Ze=21;break}G=(n[o+928>>2]|0)==(m|0)?G:0,Ze=22;break}if(We=n[o+520>>2]|0,!We)Ze=21;else for(ae=0;;){if(G=o+524+(ae*24|0)|0,mn(y(h[G>>2]),l)|0&&mn(y(h[o+524+(ae*24|0)+4>>2]),u)|0&&(n[o+524+(ae*24|0)+8>>2]|0)==(d|0)&&(n[o+524+(ae*24|0)+12>>2]|0)==(m|0)){Ze=22;break e}if(ae=ae+1|0,ae>>>0>=We>>>0){Ze=21;break}}}while(!1);do if((Ze|0)==21)s[11697]|0?(G=0,Ze=28):(G=0,Ze=31);else if((Ze|0)==22){if(ae=(s[11697]|0)!=0,!((G|0)!=0&(Hr^1)))if(ae){Ze=28;break}else{Ze=31;break}Le=G+16|0,n[o+908>>2]=n[Le>>2],We=G+20|0,n[o+912>>2]=n[We>>2],(s[11698]|0)==0|ae^1||(n[ct>>2]=wu(Ge)|0,n[ct+4>>2]=Ge,Qo(o,4,2972,ct),ae=n[o+972>>2]|0,ae|0&&op[ae&127](o),d=ha(d,T)|0,m=ha(m,T)|0,$a=+y(h[Le>>2]),Oo=+y(h[We>>2]),n[Lt>>2]=d,n[Lt+4>>2]=m,E[Lt+8>>3]=+l,E[Lt+16>>3]=+u,E[Lt+24>>3]=$a,E[Lt+32>>3]=Oo,n[Lt+40>>2]=_,Qo(o,4,2989,Lt))}while(!1);return(Ze|0)==28&&(ae=wu(Ge)|0,n[Le>>2]=ae,n[Le+4>>2]=Ge,n[Le+8>>2]=Hr?3047:11699,Qo(o,4,3038,Le),ae=n[o+972>>2]|0,ae|0&&op[ae&127](o),Lt=ha(d,T)|0,Ze=ha(m,T)|0,n[He>>2]=Lt,n[He+4>>2]=Ze,E[He+8>>3]=+l,E[He+16>>3]=+u,n[He+24>>2]=_,Qo(o,4,3049,He),Ze=31),(Ze|0)==31&&(Os(o,l,u,A,d,m,B,k,T,M),s[11697]|0&&(ae=n[2279]|0,Lt=wu(ae)|0,n[qr>>2]=Lt,n[qr+4>>2]=ae,n[qr+8>>2]=Hr?3047:11699,Qo(o,4,3083,qr),ae=n[o+972>>2]|0,ae|0&&op[ae&127](o),Lt=ha(d,T)|0,qr=ha(m,T)|0,Oo=+y(h[o+908>>2]),$a=+y(h[o+912>>2]),n[fr>>2]=Lt,n[fr+4>>2]=qr,E[fr+8>>3]=Oo,E[fr+16>>3]=$a,n[fr+24>>2]=_,Qo(o,4,3092,fr)),n[o+516>>2]=A,G||(ae=o+520|0,G=n[ae>>2]|0,(G|0)==16&&(s[11697]|0&&Qo(o,4,3124,$t),n[ae>>2]=0,G=0),T?G=o+916|0:(n[ae>>2]=G+1,G=o+524+(G*24|0)|0),h[G>>2]=l,h[G+4>>2]=u,n[G+8>>2]=d,n[G+12>>2]=m,n[G+16>>2]=n[o+908>>2],n[G+20>>2]=n[o+912>>2],G=0)),T&&(n[o+416>>2]=n[o+908>>2],n[o+420>>2]=n[o+912>>2],s[o+985>>0]=1,s[Tr>>0]=0),n[2279]=(n[2279]|0)+-1,n[o+512>>2]=n[2278],I=cr,Hr|(G|0)==0|0}function yn(o,l,u){o=o|0,l=l|0,u=y(u);var A=Xe;return A=y(J(o,l,u)),y(A+y(re(o,l,u)))}function Qo(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=I,I=I+16|0,d=m,n[d>>2]=A,o?A=n[o+976>>2]|0:A=0,kh(A,o,l,u,d),I=m}function wu(o){return o=o|0,(o>>>0>60?3201:3201+(60-o)|0)|0}function ha(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;return d=I,I=I+32|0,u=d+12|0,A=d,n[u>>2]=n[254],n[u+4>>2]=n[255],n[u+8>>2]=n[256],n[A>>2]=n[257],n[A+4>>2]=n[258],n[A+8>>2]=n[259],(o|0)>2?o=11699:o=n[(l?A:u)+(o<<2)>>2]|0,I=d,o|0}function Os(o,l,u,A,d,m,B,k,T,_){o=o|0,l=y(l),u=y(u),A=A|0,d=d|0,m=m|0,B=y(B),k=y(k),T=T|0,_=_|0;var M=0,G=0,ae=0,We=0,Le=Xe,Qe=Xe,tt=Xe,Ze=Xe,ct=Xe,He=Xe,Ge=Xe,Lt=0,qr=0,fr=0,$t=Xe,Tr=Xe,Hr=0,cr=Xe,Hn=0,Fo=0,No=0,Oo=0,$a=0,Vh=0,Kh=0,dc=0,Jh=0,Ff=0,Nf=0,zh=0,Zh=0,Xh=0,on=0,mc=0,$h=0,ku=0,e0=Xe,t0=Xe,Of=Xe,Lf=Xe,Qu=Xe,lo=0,Ml=0,ya=0,yc=0,lp=0,cp=Xe,Mf=Xe,up=Xe,fp=Xe,co=Xe,Us=Xe,Ec=0,Wn=Xe,Ap=Xe,Lo=Xe,Tu=Xe,Mo=Xe,Ru=Xe,pp=0,hp=0,Fu=Xe,uo=Xe,Ic=0,gp=0,dp=0,mp=0,Fr=Xe,ui=0,Hs=0,_o=0,fo=0,Mr=0,Ar=0,Cc=0,zt=Xe,yp=0,vi=0;Cc=I,I=I+16|0,lo=Cc+12|0,Ml=Cc+8|0,ya=Cc+4|0,yc=Cc,Bi(o,(d|0)==0|(Mt(l)|0)^1,3326),Bi(o,(m|0)==0|(Mt(u)|0)^1,3406),Hs=ft(o,A)|0,n[o+496>>2]=Hs,Mr=dr(2,Hs)|0,Ar=dr(0,Hs)|0,h[o+440>>2]=y(J(o,Mr,B)),h[o+444>>2]=y(re(o,Mr,B)),h[o+428>>2]=y(J(o,Ar,B)),h[o+436>>2]=y(re(o,Ar,B)),h[o+464>>2]=y(Br(o,Mr)),h[o+468>>2]=y(_n(o,Mr)),h[o+452>>2]=y(Br(o,Ar)),h[o+460>>2]=y(_n(o,Ar)),h[o+488>>2]=y(mi(o,Mr,B)),h[o+492>>2]=y(Bs(o,Mr,B)),h[o+476>>2]=y(mi(o,Ar,B)),h[o+484>>2]=y(Bs(o,Ar,B));do if(n[o+964>>2]|0)zA(o,l,u,d,m,B,k);else{if(_o=o+948|0,fo=(n[o+952>>2]|0)-(n[_o>>2]|0)>>2,!fo){dP(o,l,u,d,m,B,k);break}if(!T&&t2(o,l,u,d,m,B,k)|0)break;ee(o),mc=o+508|0,s[mc>>0]=0,Mr=dr(n[o+4>>2]|0,Hs)|0,Ar=Sy(Mr,Hs)|0,ui=de(Mr)|0,$h=n[o+8>>2]|0,gp=o+28|0,ku=(n[gp>>2]|0)!=0,Mo=ui?B:k,Fu=ui?k:B,e0=y(Th(o,Mr,B)),t0=y(r2(o,Mr,B)),Le=y(Th(o,Ar,B)),Ru=y(Ka(o,Mr,B)),uo=y(Ka(o,Ar,B)),fr=ui?d:m,Ic=ui?m:d,Fr=ui?Ru:uo,ct=ui?uo:Ru,Tu=y(yn(o,2,B)),Ze=y(yn(o,0,B)),Qe=y(y(Xr(o+364|0,B))-Fr),tt=y(y(Xr(o+380|0,B))-Fr),He=y(y(Xr(o+372|0,k))-ct),Ge=y(y(Xr(o+388|0,k))-ct),Of=ui?Qe:He,Lf=ui?tt:Ge,Tu=y(l-Tu),l=y(Tu-Fr),Mt(l)|0?Fr=l:Fr=y($n(y(Ad(l,tt)),Qe)),Ap=y(u-Ze),l=y(Ap-ct),Mt(l)|0?Lo=l:Lo=y($n(y(Ad(l,Ge)),He)),Qe=ui?Fr:Lo,Wn=ui?Lo:Fr;e:do if((fr|0)==1)for(A=0,G=0;;){if(M=ws(o,G)|0,!A)y(ZA(M))>y(0)&&y(Rh(M))>y(0)?A=M:A=0;else if(n2(M)|0){We=0;break e}if(G=G+1|0,G>>>0>=fo>>>0){We=A;break}}else We=0;while(!1);Lt=We+500|0,qr=We+504|0,A=0,M=0,l=y(0),ae=0;do{if(G=n[(n[_o>>2]|0)+(ae<<2)>>2]|0,(n[G+36>>2]|0)==1)Dy(G),s[G+985>>0]=1,s[G+984>>0]=0;else{Sf(G),T&&xh(G,ft(G,Hs)|0,Qe,Wn,Fr);do if((n[G+24>>2]|0)!=1)if((G|0)==(We|0)){n[Lt>>2]=n[2278],h[qr>>2]=y(0);break}else{mP(o,G,Fr,d,Lo,Fr,Lo,m,Hs,_);break}else M|0&&(n[M+960>>2]=G),n[G+960>>2]=0,M=G,A=A|0?A:G;while(!1);Us=y(h[G+504>>2]),l=y(l+y(Us+y(yn(G,Mr,Fr))))}ae=ae+1|0}while((ae|0)!=(fo|0));for(No=l>Qe,Ec=ku&((fr|0)==2&No)?1:fr,Hn=(Ic|0)==1,$a=Hn&(T^1),Vh=(Ec|0)==1,Kh=(Ec|0)==2,dc=976+(Mr<<2)|0,Jh=(Ic|2|0)==2,Xh=Hn&(ku^1),Ff=1040+(Ar<<2)|0,Nf=1040+(Mr<<2)|0,zh=976+(Ar<<2)|0,Zh=(Ic|0)!=1,No=ku&((fr|0)!=0&No),Fo=o+976|0,Hn=Hn^1,l=Qe,Hr=0,Oo=0,Us=y(0),Qu=y(0);;){e:do if(Hr>>>0>>0)for(qr=n[_o>>2]|0,ae=0,Ge=y(0),He=y(0),tt=y(0),Qe=y(0),G=0,M=0,We=Hr;;){if(Lt=n[qr+(We<<2)>>2]|0,(n[Lt+36>>2]|0)!=1&&(n[Lt+940>>2]=Oo,(n[Lt+24>>2]|0)!=1)){if(Ze=y(yn(Lt,Mr,Fr)),on=n[dc>>2]|0,u=y(Xr(Lt+380+(on<<3)|0,Mo)),ct=y(h[Lt+504>>2]),u=y(Ad(u,ct)),u=y($n(y(Xr(Lt+364+(on<<3)|0,Mo)),u)),ku&(ae|0)!=0&y(Ze+y(He+u))>l){m=ae,Ze=Ge,fr=We;break e}Ze=y(Ze+u),u=y(He+Ze),Ze=y(Ge+Ze),n2(Lt)|0&&(tt=y(tt+y(ZA(Lt))),Qe=y(Qe-y(ct*y(Rh(Lt))))),M|0&&(n[M+960>>2]=Lt),n[Lt+960>>2]=0,ae=ae+1|0,M=Lt,G=G|0?G:Lt}else Ze=Ge,u=He;if(We=We+1|0,We>>>0>>0)Ge=Ze,He=u;else{m=ae,fr=We;break}}else m=0,Ze=y(0),tt=y(0),Qe=y(0),G=0,fr=Hr;while(!1);on=tt>y(0)&tty(0)&QeLf&((Mt(Lf)|0)^1))l=Lf,on=51;else if(s[(n[Fo>>2]|0)+3>>0]|0)on=51;else{if($t!=y(0)&&y(ZA(o))!=y(0)){on=53;break}l=Ze,on=53}while(!1);if((on|0)==51&&(on=0,Mt(l)|0?on=53:(Tr=y(l-Ze),cr=l)),(on|0)==53&&(on=0,Ze>2]|0,We=Try(0),He=y(Tr/$t),tt=y(0),Ze=y(0),l=y(0),M=G;do u=y(Xr(M+380+(ae<<3)|0,Mo)),Qe=y(Xr(M+364+(ae<<3)|0,Mo)),Qe=y(Ad(u,y($n(Qe,y(h[M+504>>2]))))),We?(u=y(Qe*y(Rh(M))),u!=y(-0)&&(zt=y(Qe-y(ct*u)),cp=y(Gn(M,Mr,zt,cr,Fr)),zt!=cp)&&(tt=y(tt-y(cp-Qe)),l=y(l+u))):Lt&&(Mf=y(ZA(M)),Mf!=y(0))&&(zt=y(Qe+y(He*Mf)),up=y(Gn(M,Mr,zt,cr,Fr)),zt!=up)&&(tt=y(tt-y(up-Qe)),Ze=y(Ze-Mf)),M=n[M+960>>2]|0;while(M|0);if(l=y(Ge+l),Qe=y(Tr+tt),lp)l=y(0);else{ct=y($t+Ze),We=n[dc>>2]|0,Lt=Qey(0),ct=y(Qe/ct),l=y(0);do{zt=y(Xr(G+380+(We<<3)|0,Mo)),tt=y(Xr(G+364+(We<<3)|0,Mo)),tt=y(Ad(zt,y($n(tt,y(h[G+504>>2]))))),Lt?(zt=y(tt*y(Rh(G))),Qe=y(-zt),zt!=y(-0)?(zt=y(He*Qe),Qe=y(Gn(G,Mr,y(tt+(qr?Qe:zt)),cr,Fr))):Qe=tt):ae&&(fp=y(ZA(G)),fp!=y(0))?Qe=y(Gn(G,Mr,y(tt+y(ct*fp)),cr,Fr)):Qe=tt,l=y(l-y(Qe-tt)),Ze=y(yn(G,Mr,Fr)),u=y(yn(G,Ar,Fr)),Qe=y(Qe+Ze),h[Ml>>2]=Qe,n[yc>>2]=1,tt=y(h[G+396>>2]);e:do if(Mt(tt)|0){M=Mt(Wn)|0;do if(!M){if(No|(oo(G,Ar,Wn)|0|Hn)||(as(o,G)|0)!=4||(n[(Ql(G,Ar)|0)+4>>2]|0)==3||(n[(Tl(G,Ar)|0)+4>>2]|0)==3)break;h[lo>>2]=Wn,n[ya>>2]=1;break e}while(!1);if(oo(G,Ar,Wn)|0){M=n[G+992+(n[zh>>2]<<2)>>2]|0,zt=y(u+y(Xr(M,Wn))),h[lo>>2]=zt,M=Zh&(n[M+4>>2]|0)==2,n[ya>>2]=((Mt(zt)|0|M)^1)&1;break}else{h[lo>>2]=Wn,n[ya>>2]=M?0:2;break}}else zt=y(Qe-Ze),$t=y(zt/tt),zt=y(tt*zt),n[ya>>2]=1,h[lo>>2]=y(u+(ui?$t:zt));while(!1);Bu(G,Mr,cr,Fr,yc,Ml),Bu(G,Ar,Wn,Fr,ya,lo);do if(!(oo(G,Ar,Wn)|0)&&(as(o,G)|0)==4){if((n[(Ql(G,Ar)|0)+4>>2]|0)==3){M=0;break}M=(n[(Tl(G,Ar)|0)+4>>2]|0)!=3}else M=0;while(!1);zt=y(h[Ml>>2]),$t=y(h[lo>>2]),yp=n[yc>>2]|0,vi=n[ya>>2]|0,kl(G,ui?zt:$t,ui?$t:zt,Hs,ui?yp:vi,ui?vi:yp,Fr,Lo,T&(M^1),3488,_)|0,s[mc>>0]=s[mc>>0]|s[G+508>>0],G=n[G+960>>2]|0}while(G|0)}}else l=y(0);if(l=y(Tr+l),vi=l>0]=vi|c[mc>>0],Kh&l>y(0)?(M=n[dc>>2]|0,n[o+364+(M<<3)+4>>2]|0&&(co=y(Xr(o+364+(M<<3)|0,Mo)),co>=y(0))?Qe=y($n(y(0),y(co-y(cr-l)))):Qe=y(0)):Qe=l,Lt=Hr>>>0>>0,Lt){We=n[_o>>2]|0,ae=Hr,M=0;do G=n[We+(ae<<2)>>2]|0,n[G+24>>2]|0||(M=((n[(Ql(G,Mr)|0)+4>>2]|0)==3&1)+M|0,M=M+((n[(Tl(G,Mr)|0)+4>>2]|0)==3&1)|0),ae=ae+1|0;while((ae|0)!=(fr|0));M?(Ze=y(0),u=y(0)):on=101}else on=101;e:do if((on|0)==101)switch(on=0,$h|0){case 1:{M=0,Ze=y(Qe*y(.5)),u=y(0);break e}case 2:{M=0,Ze=Qe,u=y(0);break e}case 3:{if(m>>>0<=1){M=0,Ze=y(0),u=y(0);break e}u=y((m+-1|0)>>>0),M=0,Ze=y(0),u=y(y($n(Qe,y(0)))/u);break e}case 5:{u=y(Qe/y((m+1|0)>>>0)),M=0,Ze=u;break e}case 4:{u=y(Qe/y(m>>>0)),M=0,Ze=y(u*y(.5));break e}default:{M=0,Ze=y(0),u=y(0);break e}}while(!1);if(l=y(e0+Ze),Lt){tt=y(Qe/y(M|0)),ae=n[_o>>2]|0,G=Hr,Qe=y(0);do{M=n[ae+(G<<2)>>2]|0;e:do if((n[M+36>>2]|0)!=1){switch(n[M+24>>2]|0){case 1:{if(ga(M,Mr)|0){if(!T)break e;zt=y(XA(M,Mr,cr)),zt=y(zt+y(Br(o,Mr))),zt=y(zt+y(J(M,Mr,Fr))),h[M+400+(n[Nf>>2]<<2)>>2]=zt;break e}break}case 0:if(vi=(n[(Ql(M,Mr)|0)+4>>2]|0)==3,zt=y(tt+l),l=vi?zt:l,T&&(vi=M+400+(n[Nf>>2]<<2)|0,h[vi>>2]=y(l+y(h[vi>>2]))),vi=(n[(Tl(M,Mr)|0)+4>>2]|0)==3,zt=y(tt+l),l=vi?zt:l,$a){zt=y(u+y(yn(M,Mr,Fr))),Qe=Wn,l=y(l+y(zt+y(h[M+504>>2])));break e}else{l=y(l+y(u+y($A(M,Mr,Fr)))),Qe=y($n(Qe,y($A(M,Ar,Fr))));break e}default:}T&&(zt=y(Ze+y(Br(o,Mr))),vi=M+400+(n[Nf>>2]<<2)|0,h[vi>>2]=y(zt+y(h[vi>>2])))}while(!1);G=G+1|0}while((G|0)!=(fr|0))}else Qe=y(0);if(u=y(t0+l),Jh?Ze=y(y(Gn(o,Ar,y(uo+Qe),Fu,B))-uo):Ze=Wn,tt=y(y(Gn(o,Ar,y(uo+(Xh?Wn:Qe)),Fu,B))-uo),Lt&T){G=Hr;do{ae=n[(n[_o>>2]|0)+(G<<2)>>2]|0;do if((n[ae+36>>2]|0)!=1){if((n[ae+24>>2]|0)==1){if(ga(ae,Ar)|0){if(zt=y(XA(ae,Ar,Wn)),zt=y(zt+y(Br(o,Ar))),zt=y(zt+y(J(ae,Ar,Fr))),M=n[Ff>>2]|0,h[ae+400+(M<<2)>>2]=zt,!(Mt(zt)|0))break}else M=n[Ff>>2]|0;zt=y(Br(o,Ar)),h[ae+400+(M<<2)>>2]=y(zt+y(J(ae,Ar,Fr)));break}M=as(o,ae)|0;do if((M|0)==4){if((n[(Ql(ae,Ar)|0)+4>>2]|0)==3){on=139;break}if((n[(Tl(ae,Ar)|0)+4>>2]|0)==3){on=139;break}if(oo(ae,Ar,Wn)|0){l=Le;break}yp=n[ae+908+(n[dc>>2]<<2)>>2]|0,n[lo>>2]=yp,l=y(h[ae+396>>2]),vi=Mt(l)|0,Qe=(n[S>>2]=yp,y(h[S>>2])),vi?l=tt:(Tr=y(yn(ae,Ar,Fr)),zt=y(Qe/l),l=y(l*Qe),l=y(Tr+(ui?zt:l))),h[Ml>>2]=l,h[lo>>2]=y(y(yn(ae,Mr,Fr))+Qe),n[ya>>2]=1,n[yc>>2]=1,Bu(ae,Mr,cr,Fr,ya,lo),Bu(ae,Ar,Wn,Fr,yc,Ml),l=y(h[lo>>2]),Tr=y(h[Ml>>2]),zt=ui?l:Tr,l=ui?Tr:l,vi=((Mt(zt)|0)^1)&1,kl(ae,zt,l,Hs,vi,((Mt(l)|0)^1)&1,Fr,Lo,1,3493,_)|0,l=Le}else on=139;while(!1);e:do if((on|0)==139){on=0,l=y(Ze-y($A(ae,Ar,Fr)));do if((n[(Ql(ae,Ar)|0)+4>>2]|0)==3){if((n[(Tl(ae,Ar)|0)+4>>2]|0)!=3)break;l=y(Le+y($n(y(0),y(l*y(.5)))));break e}while(!1);if((n[(Tl(ae,Ar)|0)+4>>2]|0)==3){l=Le;break}if((n[(Ql(ae,Ar)|0)+4>>2]|0)==3){l=y(Le+y($n(y(0),l)));break}switch(M|0){case 1:{l=Le;break e}case 2:{l=y(Le+y(l*y(.5)));break e}default:{l=y(Le+l);break e}}}while(!1);zt=y(Us+l),vi=ae+400+(n[Ff>>2]<<2)|0,h[vi>>2]=y(zt+y(h[vi>>2]))}while(!1);G=G+1|0}while((G|0)!=(fr|0))}if(Us=y(Us+tt),Qu=y($n(Qu,u)),m=Oo+1|0,fr>>>0>=fo>>>0)break;l=cr,Hr=fr,Oo=m}do if(T){if(M=m>>>0>1,!M&&!(WL(o)|0))break;if(!(Mt(Wn)|0)){l=y(Wn-Us);e:do switch(n[o+12>>2]|0){case 3:{Le=y(Le+l),He=y(0);break}case 2:{Le=y(Le+y(l*y(.5))),He=y(0);break}case 4:{Wn>Us?He=y(l/y(m>>>0)):He=y(0);break}case 7:if(Wn>Us){Le=y(Le+y(l/y(m<<1>>>0))),He=y(l/y(m>>>0)),He=M?He:y(0);break e}else{Le=y(Le+y(l*y(.5))),He=y(0);break e}case 6:{He=y(l/y(Oo>>>0)),He=Wn>Us&M?He:y(0);break}default:He=y(0)}while(!1);if(m|0)for(Lt=1040+(Ar<<2)|0,qr=976+(Ar<<2)|0,We=0,G=0;;){e:do if(G>>>0>>0)for(Qe=y(0),tt=y(0),l=y(0),ae=G;;){M=n[(n[_o>>2]|0)+(ae<<2)>>2]|0;do if((n[M+36>>2]|0)!=1&&!(n[M+24>>2]|0)){if((n[M+940>>2]|0)!=(We|0))break e;if(YL(M,Ar)|0&&(zt=y(h[M+908+(n[qr>>2]<<2)>>2]),l=y($n(l,y(zt+y(yn(M,Ar,Fr)))))),(as(o,M)|0)!=5)break;co=y(Wg(M)),co=y(co+y(J(M,0,Fr))),zt=y(h[M+912>>2]),zt=y(y(zt+y(yn(M,0,Fr)))-co),co=y($n(tt,co)),zt=y($n(Qe,zt)),Qe=zt,tt=co,l=y($n(l,y(co+zt)))}while(!1);if(M=ae+1|0,M>>>0>>0)ae=M;else{ae=M;break}}else tt=y(0),l=y(0),ae=G;while(!1);if(ct=y(He+l),u=Le,Le=y(Le+ct),G>>>0>>0){Ze=y(u+tt),M=G;do{G=n[(n[_o>>2]|0)+(M<<2)>>2]|0;e:do if((n[G+36>>2]|0)!=1&&!(n[G+24>>2]|0))switch(as(o,G)|0){case 1:{zt=y(u+y(J(G,Ar,Fr))),h[G+400+(n[Lt>>2]<<2)>>2]=zt;break e}case 3:{zt=y(y(Le-y(re(G,Ar,Fr)))-y(h[G+908+(n[qr>>2]<<2)>>2])),h[G+400+(n[Lt>>2]<<2)>>2]=zt;break e}case 2:{zt=y(u+y(y(ct-y(h[G+908+(n[qr>>2]<<2)>>2]))*y(.5))),h[G+400+(n[Lt>>2]<<2)>>2]=zt;break e}case 4:{if(zt=y(u+y(J(G,Ar,Fr))),h[G+400+(n[Lt>>2]<<2)>>2]=zt,oo(G,Ar,Wn)|0||(ui?(Qe=y(h[G+908>>2]),l=y(Qe+y(yn(G,Mr,Fr))),tt=ct):(tt=y(h[G+912>>2]),tt=y(tt+y(yn(G,Ar,Fr))),l=ct,Qe=y(h[G+908>>2])),mn(l,Qe)|0&&mn(tt,y(h[G+912>>2]))|0))break e;kl(G,l,tt,Hs,1,1,Fr,Lo,1,3501,_)|0;break e}case 5:{h[G+404>>2]=y(y(Ze-y(Wg(G)))+y(XA(G,0,Wn)));break e}default:break e}while(!1);M=M+1|0}while((M|0)!=(ae|0))}if(We=We+1|0,(We|0)==(m|0))break;G=ae}}}while(!1);if(h[o+908>>2]=y(Gn(o,2,Tu,B,B)),h[o+912>>2]=y(Gn(o,0,Ap,k,B)),Ec|0&&(pp=n[o+32>>2]|0,hp=(Ec|0)==2,!(hp&(pp|0)!=2))?hp&(pp|0)==2&&(l=y(Ru+cr),l=y($n(y(Ad(l,y(Yg(o,Mr,Qu,Mo)))),Ru)),on=198):(l=y(Gn(o,Mr,Qu,Mo,B)),on=198),(on|0)==198&&(h[o+908+(n[976+(Mr<<2)>>2]<<2)>>2]=l),Ic|0&&(dp=n[o+32>>2]|0,mp=(Ic|0)==2,!(mp&(dp|0)!=2))?mp&(dp|0)==2&&(l=y(uo+Wn),l=y($n(y(Ad(l,y(Yg(o,Ar,y(uo+Us),Fu)))),uo)),on=204):(l=y(Gn(o,Ar,y(uo+Us),Fu,B)),on=204),(on|0)==204&&(h[o+908+(n[976+(Ar<<2)>>2]<<2)>>2]=l),T){if((n[gp>>2]|0)==2){G=976+(Ar<<2)|0,ae=1040+(Ar<<2)|0,M=0;do We=ws(o,M)|0,n[We+24>>2]|0||(yp=n[G>>2]|0,zt=y(h[o+908+(yp<<2)>>2]),vi=We+400+(n[ae>>2]<<2)|0,zt=y(zt-y(h[vi>>2])),h[vi>>2]=y(zt-y(h[We+908+(yp<<2)>>2]))),M=M+1|0;while((M|0)!=(fo|0))}if(A|0){M=ui?Ec:d;do VL(o,A,Fr,M,Lo,Hs,_),A=n[A+960>>2]|0;while(A|0)}if(M=(Mr|2|0)==3,G=(Ar|2|0)==3,M|G){A=0;do ae=n[(n[_o>>2]|0)+(A<<2)>>2]|0,(n[ae+36>>2]|0)!=1&&(M&&i2(o,ae,Mr),G&&i2(o,ae,Ar)),A=A+1|0;while((A|0)!=(fo|0))}}}while(!1);I=Cc}function Ph(o,l){o=o|0,l=y(l);var u=0;ja(o,l>=y(0),3147),u=l==y(0),h[o+4>>2]=u?y(0):l}function KA(o,l,u,A){o=o|0,l=y(l),u=y(u),A=A|0;var d=Xe,m=Xe,B=0,k=0,T=0;n[2278]=(n[2278]|0)+1,Sf(o),oo(o,2,l)|0?(d=y(Xr(n[o+992>>2]|0,l)),T=1,d=y(d+y(yn(o,2,l)))):(d=y(Xr(o+380|0,l)),d>=y(0)?T=2:(T=((Mt(l)|0)^1)&1,d=l)),oo(o,0,u)|0?(m=y(Xr(n[o+996>>2]|0,u)),k=1,m=y(m+y(yn(o,0,l)))):(m=y(Xr(o+388|0,u)),m>=y(0)?k=2:(k=((Mt(u)|0)^1)&1,m=u)),B=o+976|0,kl(o,d,m,A,T,k,l,u,1,3189,n[B>>2]|0)|0&&(xh(o,n[o+496>>2]|0,l,u,l),JA(o,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),s[11696]|0)&&jg(o,7)}function Sf(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0;k=I,I=I+32|0,B=k+24|0,m=k+16|0,A=k+8|0,d=k,u=0;do l=o+380+(u<<3)|0,n[o+380+(u<<3)+4>>2]|0&&(T=l,_=n[T+4>>2]|0,M=A,n[M>>2]=n[T>>2],n[M+4>>2]=_,M=o+364+(u<<3)|0,_=n[M+4>>2]|0,T=d,n[T>>2]=n[M>>2],n[T+4>>2]=_,n[m>>2]=n[A>>2],n[m+4>>2]=n[A+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],wf(m,B)|0)||(l=o+348+(u<<3)|0),n[o+992+(u<<2)>>2]=l,u=u+1|0;while((u|0)!=2);I=k}function oo(o,l,u){o=o|0,l=l|0,u=y(u);var A=0;switch(o=n[o+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[o+4>>2]|0){case 0:case 3:{o=0;break}case 1:{y(h[o>>2])>2])>2]|0){case 2:{l=y(y(y(h[o>>2])*l)/y(100));break}case 1:{l=y(h[o>>2]);break}default:l=y(ce)}return y(l)}function xh(o,l,u,A,d){o=o|0,l=l|0,u=y(u),A=y(A),d=y(d);var m=0,B=Xe;l=n[o+944>>2]|0?l:1,m=dr(n[o+4>>2]|0,l)|0,l=Sy(m,l)|0,u=y(yP(o,m,u)),A=y(yP(o,l,A)),B=y(u+y(J(o,m,d))),h[o+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,u=y(u+y(re(o,m,d))),h[o+400+(n[1e3+(m<<2)>>2]<<2)>>2]=u,u=y(A+y(J(o,l,d))),h[o+400+(n[1040+(l<<2)>>2]<<2)>>2]=u,d=y(A+y(re(o,l,d))),h[o+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function JA(o,l,u,A){o=o|0,l=y(l),u=y(u),A=y(A);var d=0,m=0,B=Xe,k=Xe,T=0,_=0,M=Xe,G=0,ae=Xe,We=Xe,Le=Xe,Qe=Xe;if(l!=y(0)&&(d=o+400|0,Qe=y(h[d>>2]),m=o+404|0,Le=y(h[m>>2]),G=o+416|0,We=y(h[G>>2]),_=o+420|0,B=y(h[_>>2]),ae=y(Qe+u),M=y(Le+A),A=y(ae+We),k=y(M+B),T=(n[o+988>>2]|0)==1,h[d>>2]=y(os(Qe,l,0,T)),h[m>>2]=y(os(Le,l,0,T)),u=y(A_(y(We*l),y(1))),mn(u,y(0))|0?m=0:m=(mn(u,y(1))|0)^1,u=y(A_(y(B*l),y(1))),mn(u,y(0))|0?d=0:d=(mn(u,y(1))|0)^1,Qe=y(os(A,l,T&m,T&(m^1))),h[G>>2]=y(Qe-y(os(ae,l,0,T))),Qe=y(os(k,l,T&d,T&(d^1))),h[_>>2]=y(Qe-y(os(M,l,0,T))),m=(n[o+952>>2]|0)-(n[o+948>>2]|0)>>2,m|0)){d=0;do JA(ws(o,d)|0,l,ae,M),d=d+1|0;while((d|0)!=(m|0))}}function By(o,l,u,A,d){switch(o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,u|0){case 5:case 0:{o=WX(n[489]|0,A,d)|0;break}default:o=MYe(A,d)|0}return o|0}function Gg(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;d=I,I=I+16|0,m=d,n[m>>2]=A,kh(o,0,l,u,m),I=d}function kh(o,l,u,A,d){if(o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,o=o|0?o:956,A$[n[o+8>>2]&1](o,l,u,A,d)|0,(u|0)==5)Nt();else return}function hc(o,l,u){o=o|0,l=l|0,u=u|0,s[o+l>>0]=u&1}function vy(o,l){o=o|0,l=l|0;var u=0,A=0;n[o>>2]=0,n[o+4>>2]=0,n[o+8>>2]=0,u=l+4|0,A=(n[u>>2]|0)-(n[l>>2]|0)>>2,A|0&&(Qh(o,A),kt(o,n[l>>2]|0,n[u>>2]|0,A))}function Qh(o,l){o=o|0,l=l|0;var u=0;if((O(o)|0)>>>0>>0&&sn(o),l>>>0>1073741823)Nt();else{u=Jt(l<<2)|0,n[o+4>>2]=u,n[o>>2]=u,n[o+8>>2]=u+(l<<2);return}}function kt(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,A=o+4|0,o=u-l|0,(o|0)>0&&(Qr(n[A>>2]|0,l|0,o|0)|0,n[A>>2]=(n[A>>2]|0)+(o>>>2<<2))}function O(o){return o=o|0,1073741823}function J(o,l,u){return o=o|0,l=l|0,u=y(u),de(l)|0&&n[o+96>>2]|0?o=o+92|0:o=kn(o+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(Ke(o,u))}function re(o,l,u){return o=o|0,l=l|0,u=y(u),de(l)|0&&n[o+104>>2]|0?o=o+100|0:o=kn(o+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(Ke(o,u))}function de(o){return o=o|0,(o|1|0)==3|0}function Ke(o,l){return o=o|0,l=y(l),(n[o+4>>2]|0)==3?l=y(0):l=y(Xr(o,l)),y(l)}function ft(o,l){return o=o|0,l=l|0,o=n[o>>2]|0,(o|0?o:(l|0)>1?l:1)|0}function dr(o,l){o=o|0,l=l|0;var u=0;e:do if((l|0)==2){switch(o|0){case 2:{o=3;break e}case 3:break;default:{u=4;break e}}o=2}else u=4;while(!1);return o|0}function Br(o,l){o=o|0,l=l|0;var u=Xe;return de(l)|0&&n[o+312>>2]|0&&(u=y(h[o+308>>2]),u>=y(0))||(u=y($n(y(h[(kn(o+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(u)}function _n(o,l){o=o|0,l=l|0;var u=Xe;return de(l)|0&&n[o+320>>2]|0&&(u=y(h[o+316>>2]),u>=y(0))||(u=y($n(y(h[(kn(o+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(u)}function mi(o,l,u){o=o|0,l=l|0,u=y(u);var A=Xe;return de(l)|0&&n[o+240>>2]|0&&(A=y(Xr(o+236|0,u)),A>=y(0))||(A=y($n(y(Xr(kn(o+204|0,n[1040+(l<<2)>>2]|0,992)|0,u)),y(0)))),y(A)}function Bs(o,l,u){o=o|0,l=l|0,u=y(u);var A=Xe;return de(l)|0&&n[o+248>>2]|0&&(A=y(Xr(o+244|0,u)),A>=y(0))||(A=y($n(y(Xr(kn(o+204|0,n[1e3+(l<<2)>>2]|0,992)|0,u)),y(0)))),y(A)}function zA(o,l,u,A,d,m,B){o=o|0,l=y(l),u=y(u),A=A|0,d=d|0,m=y(m),B=y(B);var k=Xe,T=Xe,_=Xe,M=Xe,G=Xe,ae=Xe,We=0,Le=0,Qe=0;Qe=I,I=I+16|0,We=Qe,Le=o+964|0,Bi(o,(n[Le>>2]|0)!=0,3519),k=y(Ka(o,2,l)),T=y(Ka(o,0,l)),_=y(yn(o,2,l)),M=y(yn(o,0,l)),Mt(l)|0?G=l:G=y($n(y(0),y(y(l-_)-k))),Mt(u)|0?ae=u:ae=y($n(y(0),y(y(u-M)-T))),(A|0)==1&(d|0)==1?(h[o+908>>2]=y(Gn(o,2,y(l-_),m,m)),l=y(Gn(o,0,y(u-M),B,m))):(p$[n[Le>>2]&1](We,o,G,A,ae,d),G=y(k+y(h[We>>2])),ae=y(l-_),h[o+908>>2]=y(Gn(o,2,(A|2|0)==2?G:ae,m,m)),ae=y(T+y(h[We+4>>2])),l=y(u-M),l=y(Gn(o,0,(d|2|0)==2?ae:l,B,m))),h[o+912>>2]=l,I=Qe}function dP(o,l,u,A,d,m,B){o=o|0,l=y(l),u=y(u),A=A|0,d=d|0,m=y(m),B=y(B);var k=Xe,T=Xe,_=Xe,M=Xe;_=y(Ka(o,2,m)),k=y(Ka(o,0,m)),M=y(yn(o,2,m)),T=y(yn(o,0,m)),l=y(l-M),h[o+908>>2]=y(Gn(o,2,(A|2|0)==2?_:l,m,m)),u=y(u-T),h[o+912>>2]=y(Gn(o,0,(d|2|0)==2?k:u,B,m))}function t2(o,l,u,A,d,m,B){o=o|0,l=y(l),u=y(u),A=A|0,d=d|0,m=y(m),B=y(B);var k=0,T=Xe,_=Xe;return k=(A|0)==2,!(l<=y(0)&k)&&!(u<=y(0)&(d|0)==2)&&!((A|0)==1&(d|0)==1)?o=0:(T=y(yn(o,0,m)),_=y(yn(o,2,m)),k=l>2]=y(Gn(o,2,k?y(0):l,m,m)),l=y(u-T),k=u>2]=y(Gn(o,0,k?y(0):l,B,m)),o=1),o|0}function Sy(o,l){return o=o|0,l=l|0,Vg(o)|0?o=dr(2,l)|0:o=0,o|0}function Th(o,l,u){return o=o|0,l=l|0,u=y(u),u=y(mi(o,l,u)),y(u+y(Br(o,l)))}function r2(o,l,u){return o=o|0,l=l|0,u=y(u),u=y(Bs(o,l,u)),y(u+y(_n(o,l)))}function Ka(o,l,u){o=o|0,l=l|0,u=y(u);var A=Xe;return A=y(Th(o,l,u)),y(A+y(r2(o,l,u)))}function n2(o){return o=o|0,n[o+24>>2]|0?o=0:y(ZA(o))!=y(0)?o=1:o=y(Rh(o))!=y(0),o|0}function ZA(o){o=o|0;var l=Xe;if(n[o+944>>2]|0){if(l=y(h[o+44>>2]),Mt(l)|0)return l=y(h[o+40>>2]),o=l>y(0)&((Mt(l)|0)^1),y(o?l:y(0))}else l=y(0);return y(l)}function Rh(o){o=o|0;var l=Xe,u=0,A=Xe;do if(n[o+944>>2]|0){if(l=y(h[o+48>>2]),Mt(l)|0){if(u=s[(n[o+976>>2]|0)+2>>0]|0,!(u<<24>>24)&&(A=y(h[o+40>>2]),A>24?y(1):y(0)}}else l=y(0);while(!1);return y(l)}function Dy(o){o=o|0;var l=0,u=0;if(Xy(o+400|0,0,540)|0,s[o+985>>0]=1,ee(o),u=_i(o)|0,u|0){l=o+948|0,o=0;do Dy(n[(n[l>>2]|0)+(o<<2)>>2]|0),o=o+1|0;while((o|0)!=(u|0))}}function mP(o,l,u,A,d,m,B,k,T,_){o=o|0,l=l|0,u=y(u),A=A|0,d=y(d),m=y(m),B=y(B),k=k|0,T=T|0,_=_|0;var M=0,G=Xe,ae=0,We=0,Le=Xe,Qe=Xe,tt=0,Ze=Xe,ct=0,He=Xe,Ge=0,Lt=0,qr=0,fr=0,$t=0,Tr=0,Hr=0,cr=0,Hn=0,Fo=0;Hn=I,I=I+16|0,qr=Hn+12|0,fr=Hn+8|0,$t=Hn+4|0,Tr=Hn,cr=dr(n[o+4>>2]|0,T)|0,Ge=de(cr)|0,G=y(Xr(KL(l)|0,Ge?m:B)),Lt=oo(l,2,m)|0,Hr=oo(l,0,B)|0;do if(!(Mt(G)|0)&&!(Mt(Ge?u:d)|0)){if(M=l+504|0,!(Mt(y(h[M>>2]))|0)&&(!(s2(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[M>>2]=y($n(G,y(Ka(l,cr,m))))}else ae=7;while(!1);do if((ae|0)==7){if(ct=Ge^1,!(ct|Lt^1)){B=y(Xr(n[l+992>>2]|0,m)),h[l+504>>2]=y($n(B,y(Ka(l,2,m))));break}if(!(Ge|Hr^1)){B=y(Xr(n[l+996>>2]|0,B)),h[l+504>>2]=y($n(B,y(Ka(l,0,m))));break}h[qr>>2]=y(ce),h[fr>>2]=y(ce),n[$t>>2]=0,n[Tr>>2]=0,Ze=y(yn(l,2,m)),He=y(yn(l,0,m)),Lt?(Le=y(Ze+y(Xr(n[l+992>>2]|0,m))),h[qr>>2]=Le,n[$t>>2]=1,We=1):(We=0,Le=y(ce)),Hr?(G=y(He+y(Xr(n[l+996>>2]|0,B))),h[fr>>2]=G,n[Tr>>2]=1,M=1):(M=0,G=y(ce)),ae=n[o+32>>2]|0,Ge&(ae|0)==2?ae=2:Mt(Le)|0&&!(Mt(u)|0)&&(h[qr>>2]=u,n[$t>>2]=2,We=2,Le=u),!((ae|0)==2&ct)&&Mt(G)|0&&!(Mt(d)|0)&&(h[fr>>2]=d,n[Tr>>2]=2,M=2,G=d),Qe=y(h[l+396>>2]),tt=Mt(Qe)|0;do if(tt)ae=We;else{if((We|0)==1&ct){h[fr>>2]=y(y(Le-Ze)/Qe),n[Tr>>2]=1,M=1,ae=1;break}Ge&(M|0)==1?(h[qr>>2]=y(Qe*y(G-He)),n[$t>>2]=1,M=1,ae=1):ae=We}while(!1);Fo=Mt(u)|0,We=(as(o,l)|0)!=4,!(Ge|Lt|((A|0)!=1|Fo)|(We|(ae|0)==1))&&(h[qr>>2]=u,n[$t>>2]=1,!tt)&&(h[fr>>2]=y(y(u-Ze)/Qe),n[Tr>>2]=1,M=1),!(Hr|ct|((k|0)!=1|(Mt(d)|0))|(We|(M|0)==1))&&(h[fr>>2]=d,n[Tr>>2]=1,!tt)&&(h[qr>>2]=y(Qe*y(d-He)),n[$t>>2]=1),Bu(l,2,m,m,$t,qr),Bu(l,0,B,m,Tr,fr),u=y(h[qr>>2]),d=y(h[fr>>2]),kl(l,u,d,T,n[$t>>2]|0,n[Tr>>2]|0,m,B,0,3565,_)|0,B=y(h[l+908+(n[976+(cr<<2)>>2]<<2)>>2]),h[l+504>>2]=y($n(B,y(Ka(l,cr,m))))}while(!1);n[l+500>>2]=n[2278],I=Hn}function Gn(o,l,u,A,d){return o=o|0,l=l|0,u=y(u),A=y(A),d=y(d),A=y(Yg(o,l,u,A)),y($n(A,y(Ka(o,l,d))))}function as(o,l){return o=o|0,l=l|0,l=l+20|0,l=n[(n[l>>2]|0?l:o+16|0)>>2]|0,(l|0)==5&&Vg(n[o+4>>2]|0)|0&&(l=1),l|0}function Ql(o,l){return o=o|0,l=l|0,de(l)|0&&n[o+96>>2]|0?l=4:l=n[1040+(l<<2)>>2]|0,o+60+(l<<3)|0}function Tl(o,l){return o=o|0,l=l|0,de(l)|0&&n[o+104>>2]|0?l=5:l=n[1e3+(l<<2)>>2]|0,o+60+(l<<3)|0}function Bu(o,l,u,A,d,m){switch(o=o|0,l=l|0,u=y(u),A=y(A),d=d|0,m=m|0,u=y(Xr(o+380+(n[976+(l<<2)>>2]<<3)|0,u)),u=y(u+y(yn(o,l,A))),n[d>>2]|0){case 2:case 1:{d=Mt(u)|0,A=y(h[m>>2]),h[m>>2]=d|A>2]=2,h[m>>2]=u);break}default:}}function ga(o,l){return o=o|0,l=l|0,o=o+132|0,de(l)|0&&n[(kn(o,4,948)|0)+4>>2]|0?o=1:o=(n[(kn(o,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,o|0}function XA(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0;return o=o+132|0,de(l)|0&&(A=kn(o,4,948)|0,(n[A+4>>2]|0)!=0)?d=4:(A=kn(o,n[1040+(l<<2)>>2]|0,948)|0,n[A+4>>2]|0?d=4:u=y(0)),(d|0)==4&&(u=y(Xr(A,u))),y(u)}function $A(o,l,u){o=o|0,l=l|0,u=y(u);var A=Xe;return A=y(h[o+908+(n[976+(l<<2)>>2]<<2)>>2]),A=y(A+y(J(o,l,u))),y(A+y(re(o,l,u)))}function WL(o){o=o|0;var l=0,u=0,A=0;e:do if(Vg(n[o+4>>2]|0)|0)l=0;else if((n[o+16>>2]|0)!=5)if(u=_i(o)|0,!u)l=0;else for(l=0;;){if(A=ws(o,l)|0,!(n[A+24>>2]|0)&&(n[A+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=u>>>0){l=0;break}}else l=1;while(!1);return l|0}function YL(o,l){o=o|0,l=l|0;var u=Xe;return u=y(h[o+908+(n[976+(l<<2)>>2]<<2)>>2]),u>=y(0)&((Mt(u)|0)^1)|0}function Wg(o){o=o|0;var l=Xe,u=0,A=0,d=0,m=0,B=0,k=0,T=Xe;if(u=n[o+968>>2]|0,u)T=y(h[o+908>>2]),l=y(h[o+912>>2]),l=y(l$[u&0](o,T,l)),Bi(o,(Mt(l)|0)^1,3573);else{m=_i(o)|0;do if(m|0){for(u=0,d=0;;){if(A=ws(o,d)|0,n[A+940>>2]|0){B=8;break}if((n[A+24>>2]|0)!=1)if(k=(as(o,A)|0)==5,k){u=A;break}else u=u|0?u:A;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!u)break;return l=y(Wg(u)),y(l+y(h[u+404>>2]))}while(!1);l=y(h[o+912>>2])}return y(l)}function Yg(o,l,u,A){o=o|0,l=l|0,u=y(u),A=y(A);var d=Xe,m=0;return Vg(l)|0?(l=1,m=3):de(l)|0?(l=0,m=3):(A=y(ce),d=y(ce)),(m|0)==3&&(d=y(Xr(o+364+(l<<3)|0,A)),A=y(Xr(o+380+(l<<3)|0,A))),m=A=y(0)&((Mt(A)|0)^1)),u=m?A:u,m=d>=y(0)&((Mt(d)|0)^1)&u>2]|0,m)|0,Le=Sy(tt,m)|0,Qe=de(tt)|0,G=y(yn(l,2,u)),ae=y(yn(l,0,u)),oo(l,2,u)|0?k=y(G+y(Xr(n[l+992>>2]|0,u))):ga(l,2)|0&&by(l,2)|0?(k=y(h[o+908>>2]),T=y(Br(o,2)),T=y(k-y(T+y(_n(o,2)))),k=y(XA(l,2,u)),k=y(Gn(l,2,y(T-y(k+y(Fh(l,2,u)))),u,u))):k=y(ce),oo(l,0,d)|0?T=y(ae+y(Xr(n[l+996>>2]|0,d))):ga(l,0)|0&&by(l,0)|0?(T=y(h[o+912>>2]),ct=y(Br(o,0)),ct=y(T-y(ct+y(_n(o,0)))),T=y(XA(l,0,d)),T=y(Gn(l,0,y(ct-y(T+y(Fh(l,0,d)))),d,u))):T=y(ce),_=Mt(k)|0,M=Mt(T)|0;do if(_^M&&(We=y(h[l+396>>2]),!(Mt(We)|0)))if(_){k=y(G+y(y(T-ae)*We));break}else{ct=y(ae+y(y(k-G)/We)),T=M?ct:T;break}while(!1);M=Mt(k)|0,_=Mt(T)|0,M|_&&(He=(M^1)&1,A=u>y(0)&((A|0)!=0&M),k=Qe?k:A?u:k,kl(l,k,T,m,Qe?He:A?2:He,M&(_^1)&1,k,T,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(yn(l,2,u))),T=y(h[l+912>>2]),T=y(T+y(yn(l,0,u)))),kl(l,k,T,m,1,1,k,T,1,3635,B)|0,by(l,tt)|0&&!(ga(l,tt)|0)?(He=n[976+(tt<<2)>>2]|0,ct=y(h[o+908+(He<<2)>>2]),ct=y(ct-y(h[l+908+(He<<2)>>2])),ct=y(ct-y(_n(o,tt))),ct=y(ct-y(re(l,tt,u))),ct=y(ct-y(Fh(l,tt,Qe?u:d))),h[l+400+(n[1040+(tt<<2)>>2]<<2)>>2]=ct):Ze=21;do if((Ze|0)==21){if(!(ga(l,tt)|0)&&(n[o+8>>2]|0)==1){He=n[976+(tt<<2)>>2]|0,ct=y(h[o+908+(He<<2)>>2]),ct=y(y(ct-y(h[l+908+(He<<2)>>2]))*y(.5)),h[l+400+(n[1040+(tt<<2)>>2]<<2)>>2]=ct;break}!(ga(l,tt)|0)&&(n[o+8>>2]|0)==2&&(He=n[976+(tt<<2)>>2]|0,ct=y(h[o+908+(He<<2)>>2]),ct=y(ct-y(h[l+908+(He<<2)>>2])),h[l+400+(n[1040+(tt<<2)>>2]<<2)>>2]=ct)}while(!1);by(l,Le)|0&&!(ga(l,Le)|0)?(He=n[976+(Le<<2)>>2]|0,ct=y(h[o+908+(He<<2)>>2]),ct=y(ct-y(h[l+908+(He<<2)>>2])),ct=y(ct-y(_n(o,Le))),ct=y(ct-y(re(l,Le,u))),ct=y(ct-y(Fh(l,Le,Qe?d:u))),h[l+400+(n[1040+(Le<<2)>>2]<<2)>>2]=ct):Ze=30;do if((Ze|0)==30&&!(ga(l,Le)|0)){if((as(o,l)|0)==2){He=n[976+(Le<<2)>>2]|0,ct=y(h[o+908+(He<<2)>>2]),ct=y(y(ct-y(h[l+908+(He<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Le<<2)>>2]<<2)>>2]=ct;break}He=(as(o,l)|0)==3,He^(n[o+28>>2]|0)==2&&(He=n[976+(Le<<2)>>2]|0,ct=y(h[o+908+(He<<2)>>2]),ct=y(ct-y(h[l+908+(He<<2)>>2])),h[l+400+(n[1040+(Le<<2)>>2]<<2)>>2]=ct)}while(!1)}function i2(o,l,u){o=o|0,l=l|0,u=u|0;var A=Xe,d=0;d=n[976+(u<<2)>>2]|0,A=y(h[l+908+(d<<2)>>2]),A=y(y(h[o+908+(d<<2)>>2])-A),A=y(A-y(h[l+400+(n[1040+(u<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(u<<2)>>2]<<2)>>2]=A}function Vg(o){return o=o|0,(o|1|0)==1|0}function KL(o){o=o|0;var l=Xe;switch(n[o+56>>2]|0){case 0:case 3:{l=y(h[o+40>>2]),l>y(0)&((Mt(l)|0)^1)?o=s[(n[o+976>>2]|0)+2>>0]|0?1056:992:o=1056;break}default:o=o+52|0}return o|0}function s2(o,l){return o=o|0,l=l|0,(s[o+l>>0]|0)!=0|0}function by(o,l){return o=o|0,l=l|0,o=o+132|0,de(l)|0&&n[(kn(o,5,948)|0)+4>>2]|0?o=1:o=(n[(kn(o,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,o|0}function Fh(o,l,u){o=o|0,l=l|0,u=y(u);var A=0,d=0;return o=o+132|0,de(l)|0&&(A=kn(o,5,948)|0,(n[A+4>>2]|0)!=0)?d=4:(A=kn(o,n[1e3+(l<<2)>>2]|0,948)|0,n[A+4>>2]|0?d=4:u=y(0)),(d|0)==4&&(u=y(Xr(A,u))),y(u)}function yP(o,l,u){return o=o|0,l=l|0,u=y(u),ga(o,l)|0?u=y(XA(o,l,u)):u=y(-y(Fh(o,l,u))),y(u)}function EP(o){return o=y(o),h[S>>2]=o,n[S>>2]|0|0}function Py(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>1073741823)Nt();else{d=Jt(l<<2)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<2)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<2)}function IP(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function xy(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-4-l|0)>>>2)<<2)),o=n[o>>2]|0,o|0&&Et(o)}function CP(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;if(B=o+4|0,k=n[B>>2]|0,d=k-A|0,m=d>>2,o=l+(m<<2)|0,o>>>0>>0){A=k;do n[A>>2]=n[o>>2],o=o+4|0,A=(n[B>>2]|0)+4|0,n[B>>2]=A;while(o>>>0>>0)}m|0&&Q2(k+(0-m<<2)|0,l|0,d|0)|0}function wP(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0;return k=l+4|0,T=n[k>>2]|0,d=n[o>>2]|0,B=u,m=B-d|0,A=T+(0-(m>>2)<<2)|0,n[k>>2]=A,(m|0)>0&&Qr(A|0,d|0,m|0)|0,d=o+4|0,m=l+8|0,A=(n[d>>2]|0)-B|0,(A|0)>0&&(Qr(n[m>>2]|0,u|0,A|0)|0,n[m>>2]=(n[m>>2]|0)+(A>>>2<<2)),B=n[o>>2]|0,n[o>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=o+8|0,u=l+12|0,o=n[B>>2]|0,n[B>>2]=n[u>>2],n[u>>2]=o,n[l>>2]=n[k>>2],T|0}function o2(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[u>>2]|0,(B|0)!=(m|0)){d=o+8|0,u=((m+-4-B|0)>>>2)+1|0,o=B,A=n[d>>2]|0;do n[A>>2]=n[o>>2],A=(n[d>>2]|0)+4|0,n[d>>2]=A,o=o+4|0;while((o|0)!=(m|0));n[l>>2]=B+(u<<2)}}function a2(){fa()}function BP(){var o=0;return o=Jt(4)|0,l2(o),o|0}function l2(o){o=o|0,n[o>>2]=pc()|0}function vP(o){o=o|0,o|0&&(Kg(o),Et(o))}function Kg(o){o=o|0,st(n[o>>2]|0)}function JL(o,l,u){o=o|0,l=l|0,u=u|0,hc(n[o>>2]|0,l,u)}function ky(o,l){o=o|0,l=y(l),Ph(n[o>>2]|0,l)}function Qy(o,l){return o=o|0,l=l|0,s2(n[o>>2]|0,l)|0}function Ty(){var o=0;return o=Jt(8)|0,Jg(o,0),o|0}function Jg(o,l){o=o|0,l=l|0,l?l=Aa(n[l>>2]|0)|0:l=is()|0,n[o>>2]=l,n[o+4>>2]=0,Tn(l,o)}function Ry(o){o=o|0;var l=0;return l=Jt(8)|0,Jg(l,o),l|0}function zg(o){o=o|0,o|0&&(Fy(o),Et(o))}function Fy(o){o=o|0;var l=0;fc(n[o>>2]|0),l=o+4|0,o=n[l>>2]|0,n[l>>2]=0,o|0&&(Df(o),Et(o))}function Df(o){o=o|0,bf(o)}function bf(o){o=o|0,o=n[o>>2]|0,o|0&&Oa(o|0)}function c2(o){return o=o|0,Ga(o)|0}function u2(o){o=o|0;var l=0,u=0;u=o+4|0,l=n[u>>2]|0,n[u>>2]=0,l|0&&(Df(l),Et(l)),Ac(n[o>>2]|0)}function Ny(o,l){o=o|0,l=l|0,fn(n[o>>2]|0,n[l>>2]|0)}function zL(o,l){o=o|0,l=l|0,vh(n[o>>2]|0,l)}function ZL(o,l,u){o=o|0,l=l|0,u=+u,Ey(n[o>>2]|0,l,y(u))}function Oy(o,l,u){o=o|0,l=l|0,u=+u,Iy(n[o>>2]|0,l,y(u))}function f2(o,l){o=o|0,l=l|0,Ch(n[o>>2]|0,l)}function A2(o,l){o=o|0,l=l|0,bo(n[o>>2]|0,l)}function xr(o,l){o=o|0,l=l|0,Bh(n[o>>2]|0,l)}function ao(o,l){o=o|0,l=l|0,gy(n[o>>2]|0,l)}function Xi(o,l){o=o|0,l=l|0,Fg(n[o>>2]|0,l)}function Ls(o,l){o=o|0,l=l|0,Do(n[o>>2]|0,l)}function ep(o,l,u){o=o|0,l=l|0,u=+u,qA(n[o>>2]|0,l,y(u))}function p2(o,l,u){o=o|0,l=l|0,u=+u,Y(n[o>>2]|0,l,y(u))}function vs(o,l){o=o|0,l=l|0,GA(n[o>>2]|0,l)}function Ly(o,l){o=o|0,l=l|0,my(n[o>>2]|0,l)}function Nh(o,l){o=o|0,l=l|0,Po(n[o>>2]|0,l)}function Zg(o,l){o=o|0,l=+l,Sh(n[o>>2]|0,y(l))}function Oh(o,l){o=o|0,l=+l,Pl(n[o>>2]|0,y(l))}function h2(o,l){o=o|0,l=+l,yy(n[o>>2]|0,y(l))}function g2(o,l){o=o|0,l=+l,Og(n[o>>2]|0,y(l))}function d2(o,l){o=o|0,l=+l,bl(n[o>>2]|0,y(l))}function m2(o,l){o=o|0,l=+l,Lg(n[o>>2]|0,y(l))}function Pf(o,l){o=o|0,l=+l,e2(n[o>>2]|0,y(l))}function sr(o){o=o|0,Dh(n[o>>2]|0)}function My(o,l){o=o|0,l=+l,Zi(n[o>>2]|0,y(l))}function y2(o,l){o=o|0,l=+l,Ef(n[o>>2]|0,y(l))}function gc(o){o=o|0,Wa(n[o>>2]|0)}function xf(o,l){o=o|0,l=+l,yu(n[o>>2]|0,y(l))}function Xg(o,l){o=o|0,l=+l,If(n[o>>2]|0,y(l))}function $g(o,l){o=o|0,l=+l,di(n[o>>2]|0,y(l))}function E2(o,l){o=o|0,l=+l,WA(n[o>>2]|0,y(l))}function I2(o,l){o=o|0,l=+l,pa(n[o>>2]|0,y(l))}function vu(o,l){o=o|0,l=+l,Va(n[o>>2]|0,y(l))}function ed(o,l){o=o|0,l=+l,bh(n[o>>2]|0,y(l))}function C2(o,l){o=o|0,l=+l,Ug(n[o>>2]|0,y(l))}function _y(o,l){o=o|0,l=+l,YA(n[o>>2]|0,y(l))}function Su(o,l,u){o=o|0,l=l|0,u=+u,mu(n[o>>2]|0,l,y(u))}function Uy(o,l,u){o=o|0,l=l|0,u=+u,xo(n[o>>2]|0,l,y(u))}function td(o,l,u){o=o|0,l=l|0,u=+u,yf(n[o>>2]|0,l,y(u))}function rd(o){return o=o|0,Rg(n[o>>2]|0)|0}function To(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;A=I,I=I+16|0,d=A,jA(d,n[l>>2]|0,u),Ss(o,d),I=A}function Ss(o,l){o=o|0,l=l|0,Rl(o,n[l+4>>2]|0,+y(h[l>>2]))}function Rl(o,l,u){o=o|0,l=l|0,u=+u,n[o>>2]=l,E[o+8>>3]=u}function Hy(o){return o=o|0,$1(n[o>>2]|0)|0}function da(o){return o=o|0,wh(n[o>>2]|0)|0}function SP(o){return o=o|0,du(n[o>>2]|0)|0}function Lh(o){return o=o|0,X1(n[o>>2]|0)|0}function w2(o){return o=o|0,Ng(n[o>>2]|0)|0}function XL(o){return o=o|0,dy(n[o>>2]|0)|0}function DP(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;A=I,I=I+16|0,d=A,xt(d,n[l>>2]|0,u),Ss(o,d),I=A}function bP(o){return o=o|0,mf(n[o>>2]|0)|0}function jy(o){return o=o|0,Dl(n[o>>2]|0)|0}function B2(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,HA(A,n[l>>2]|0),Ss(o,A),I=u}function Mh(o){return o=o|0,+ +y(li(n[o>>2]|0))}function PP(o){return o=o|0,+ +y(Gi(n[o>>2]|0))}function xP(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,ur(A,n[l>>2]|0),Ss(o,A),I=u}function nd(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,Mg(A,n[l>>2]|0),Ss(o,A),I=u}function $L(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,wt(A,n[l>>2]|0),Ss(o,A),I=u}function eM(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,Ya(A,n[l>>2]|0),Ss(o,A),I=u}function kP(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,_g(A,n[l>>2]|0),Ss(o,A),I=u}function QP(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,wy(A,n[l>>2]|0),Ss(o,A),I=u}function tp(o){return o=o|0,+ +y(Hg(n[o>>2]|0))}function tM(o,l){return o=o|0,l=l|0,+ +y(Cy(n[o>>2]|0,l))}function rM(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;A=I,I=I+16|0,d=A,mt(d,n[l>>2]|0,u),Ss(o,d),I=A}function Du(o,l,u){o=o|0,l=l|0,u=u|0,lr(n[o>>2]|0,n[l>>2]|0,u)}function nM(o,l){o=o|0,l=l|0,df(n[o>>2]|0,n[l>>2]|0)}function TP(o){return o=o|0,_i(n[o>>2]|0)|0}function iM(o){return o=o|0,o=yt(n[o>>2]|0)|0,o?o=c2(o)|0:o=0,o|0}function RP(o,l){return o=o|0,l=l|0,o=ws(n[o>>2]|0,l)|0,o?o=c2(o)|0:o=0,o|0}function kf(o,l){o=o|0,l=l|0;var u=0,A=0;A=Jt(4)|0,FP(A,l),u=o+4|0,l=n[u>>2]|0,n[u>>2]=A,l|0&&(Df(l),Et(l)),St(n[o>>2]|0,1)}function FP(o,l){o=o|0,l=l|0,lM(o,l)}function sM(o,l,u,A,d,m){o=o|0,l=l|0,u=y(u),A=A|0,d=y(d),m=m|0;var B=0,k=0;B=I,I=I+16|0,k=B,NP(k,Ga(l)|0,+u,A,+d,m),h[o>>2]=y(+E[k>>3]),h[o+4>>2]=y(+E[k+8>>3]),I=B}function NP(o,l,u,A,d,m){o=o|0,l=l|0,u=+u,A=A|0,d=+d,m=m|0;var B=0,k=0,T=0,_=0,M=0;B=I,I=I+32|0,M=B+8|0,_=B+20|0,T=B,k=B+16|0,E[M>>3]=u,n[_>>2]=A,E[T>>3]=d,n[k>>2]=m,qy(o,n[l+4>>2]|0,M,_,T,k),I=B}function qy(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0;var B=0,k=0;B=I,I=I+16|0,k=B,Nl(k),l=Ms(l)|0,OP(o,l,+E[u>>3],n[A>>2]|0,+E[d>>3],n[m>>2]|0),Ol(k),I=B}function Ms(o){return o=o|0,n[o>>2]|0}function OP(o,l,u,A,d,m){o=o|0,l=l|0,u=+u,A=A|0,d=+d,m=m|0;var B=0;B=ma(v2()|0)|0,u=+Ja(u),A=Gy(A)|0,d=+Ja(d),oM(o,Jn(0,B|0,l|0,+u,A|0,+d,Gy(m)|0)|0)}function v2(){var o=0;return s[7608]|0||(D2(9120),o=7608,n[o>>2]=1,n[o+4>>2]=0),9120}function ma(o){return o=o|0,n[o+8>>2]|0}function Ja(o){return o=+o,+ +Qf(o)}function Gy(o){return o=o|0,id(o)|0}function oM(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;d=I,I=I+32|0,u=d,A=l,A&1?(za(u,0),Me(A|0,u|0)|0,S2(o,u),aM(u)):(n[o>>2]=n[l>>2],n[o+4>>2]=n[l+4>>2],n[o+8>>2]=n[l+8>>2],n[o+12>>2]=n[l+12>>2]),I=d}function za(o,l){o=o|0,l=l|0,bu(o,l),n[o+8>>2]=0,s[o+24>>0]=0}function S2(o,l){o=o|0,l=l|0,l=l+8|0,n[o>>2]=n[l>>2],n[o+4>>2]=n[l+4>>2],n[o+8>>2]=n[l+8>>2],n[o+12>>2]=n[l+12>>2]}function aM(o){o=o|0,s[o+24>>0]=0}function bu(o,l){o=o|0,l=l|0,n[o>>2]=l}function id(o){return o=o|0,o|0}function Qf(o){return o=+o,+o}function D2(o){o=o|0,Ro(o,b2()|0,4)}function b2(){return 1064}function Ro(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u,n[o+8>>2]=qi(l|0,u+1|0)|0}function lM(o,l){o=o|0,l=l|0,l=n[l>>2]|0,n[o>>2]=l,cu(l|0)}function LP(o){o=o|0;var l=0,u=0;u=o+4|0,l=n[u>>2]|0,n[u>>2]=0,l|0&&(Df(l),Et(l)),St(n[o>>2]|0,0)}function MP(o){o=o|0,Dt(n[o>>2]|0)}function Wy(o){return o=o|0,tr(n[o>>2]|0)|0}function cM(o,l,u,A){o=o|0,l=+l,u=+u,A=A|0,KA(n[o>>2]|0,y(l),y(u),A)}function uM(o){return o=o|0,+ +y(Eu(n[o>>2]|0))}function v(o){return o=o|0,+ +y(Cf(n[o>>2]|0))}function D(o){return o=o|0,+ +y(Iu(n[o>>2]|0))}function Q(o){return o=o|0,+ +y(Ns(n[o>>2]|0))}function H(o){return o=o|0,+ +y(Cu(n[o>>2]|0))}function V(o){return o=o|0,+ +y(qn(n[o>>2]|0))}function ne(o,l){o=o|0,l=l|0,E[o>>3]=+y(Eu(n[l>>2]|0)),E[o+8>>3]=+y(Cf(n[l>>2]|0)),E[o+16>>3]=+y(Iu(n[l>>2]|0)),E[o+24>>3]=+y(Ns(n[l>>2]|0)),E[o+32>>3]=+y(Cu(n[l>>2]|0)),E[o+40>>3]=+y(qn(n[l>>2]|0))}function Se(o,l){return o=o|0,l=l|0,+ +y(ss(n[o>>2]|0,l))}function Ue(o,l){return o=o|0,l=l|0,+ +y(ki(n[o>>2]|0,l))}function At(o,l){return o=o|0,l=l|0,+ +y(VA(n[o>>2]|0,l))}function Gt(){return Qn()|0}function vr(){Lr(),Xt(),zn(),yi(),Za(),$e()}function Lr(){vqe(11713,4938,1)}function Xt(){q6e(10448)}function zn(){v6e(10408)}function yi(){Vje(10324)}function Za(){tHe(10096)}function $e(){qe(9132)}function qe(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0,We=0,Le=0,Qe=0,tt=0,Ze=0,ct=0,He=0,Ge=0,Lt=0,qr=0,fr=0,$t=0,Tr=0,Hr=0,cr=0,Hn=0,Fo=0,No=0,Oo=0,$a=0,Vh=0,Kh=0,dc=0,Jh=0,Ff=0,Nf=0,zh=0,Zh=0,Xh=0,on=0,mc=0,$h=0,ku=0,e0=0,t0=0,Of=0,Lf=0,Qu=0,lo=0,Ml=0,ya=0,yc=0,lp=0,cp=0,Mf=0,up=0,fp=0,co=0,Us=0,Ec=0,Wn=0,Ap=0,Lo=0,Tu=0,Mo=0,Ru=0,pp=0,hp=0,Fu=0,uo=0,Ic=0,gp=0,dp=0,mp=0,Fr=0,ui=0,Hs=0,_o=0,fo=0,Mr=0,Ar=0,Cc=0;l=I,I=I+672|0,u=l+656|0,Cc=l+648|0,Ar=l+640|0,Mr=l+632|0,fo=l+624|0,_o=l+616|0,Hs=l+608|0,ui=l+600|0,Fr=l+592|0,mp=l+584|0,dp=l+576|0,gp=l+568|0,Ic=l+560|0,uo=l+552|0,Fu=l+544|0,hp=l+536|0,pp=l+528|0,Ru=l+520|0,Mo=l+512|0,Tu=l+504|0,Lo=l+496|0,Ap=l+488|0,Wn=l+480|0,Ec=l+472|0,Us=l+464|0,co=l+456|0,fp=l+448|0,up=l+440|0,Mf=l+432|0,cp=l+424|0,lp=l+416|0,yc=l+408|0,ya=l+400|0,Ml=l+392|0,lo=l+384|0,Qu=l+376|0,Lf=l+368|0,Of=l+360|0,t0=l+352|0,e0=l+344|0,ku=l+336|0,$h=l+328|0,mc=l+320|0,on=l+312|0,Xh=l+304|0,Zh=l+296|0,zh=l+288|0,Nf=l+280|0,Ff=l+272|0,Jh=l+264|0,dc=l+256|0,Kh=l+248|0,Vh=l+240|0,$a=l+232|0,Oo=l+224|0,No=l+216|0,Fo=l+208|0,Hn=l+200|0,cr=l+192|0,Hr=l+184|0,Tr=l+176|0,$t=l+168|0,fr=l+160|0,qr=l+152|0,Lt=l+144|0,Ge=l+136|0,He=l+128|0,ct=l+120|0,Ze=l+112|0,tt=l+104|0,Qe=l+96|0,Le=l+88|0,We=l+80|0,ae=l+72|0,G=l+64|0,M=l+56|0,_=l+48|0,T=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,A=l,ht(o,3646),Zt(o,3651,2)|0,Sr(o,3665,2)|0,Xn(o,3682,18)|0,n[Cc>>2]=19,n[Cc+4>>2]=0,n[u>>2]=n[Cc>>2],n[u+4>>2]=n[Cc+4>>2],kr(o,3690,u)|0,n[Ar>>2]=1,n[Ar+4>>2]=0,n[u>>2]=n[Ar>>2],n[u+4>>2]=n[Ar+4>>2],Rn(o,3696,u)|0,n[Mr>>2]=2,n[Mr+4>>2]=0,n[u>>2]=n[Mr>>2],n[u+4>>2]=n[Mr+4>>2],Un(o,3706,u)|0,n[fo>>2]=1,n[fo+4>>2]=0,n[u>>2]=n[fo>>2],n[u+4>>2]=n[fo+4>>2],zr(o,3722,u)|0,n[_o>>2]=2,n[_o+4>>2]=0,n[u>>2]=n[_o>>2],n[u+4>>2]=n[_o+4>>2],zr(o,3734,u)|0,n[Hs>>2]=3,n[Hs+4>>2]=0,n[u>>2]=n[Hs>>2],n[u+4>>2]=n[Hs+4>>2],Un(o,3753,u)|0,n[ui>>2]=4,n[ui+4>>2]=0,n[u>>2]=n[ui>>2],n[u+4>>2]=n[ui+4>>2],Un(o,3769,u)|0,n[Fr>>2]=5,n[Fr+4>>2]=0,n[u>>2]=n[Fr>>2],n[u+4>>2]=n[Fr+4>>2],Un(o,3783,u)|0,n[mp>>2]=6,n[mp+4>>2]=0,n[u>>2]=n[mp>>2],n[u+4>>2]=n[mp+4>>2],Un(o,3796,u)|0,n[dp>>2]=7,n[dp+4>>2]=0,n[u>>2]=n[dp>>2],n[u+4>>2]=n[dp+4>>2],Un(o,3813,u)|0,n[gp>>2]=8,n[gp+4>>2]=0,n[u>>2]=n[gp>>2],n[u+4>>2]=n[gp+4>>2],Un(o,3825,u)|0,n[Ic>>2]=3,n[Ic+4>>2]=0,n[u>>2]=n[Ic>>2],n[u+4>>2]=n[Ic+4>>2],zr(o,3843,u)|0,n[uo>>2]=4,n[uo+4>>2]=0,n[u>>2]=n[uo>>2],n[u+4>>2]=n[uo+4>>2],zr(o,3853,u)|0,n[Fu>>2]=9,n[Fu+4>>2]=0,n[u>>2]=n[Fu>>2],n[u+4>>2]=n[Fu+4>>2],Un(o,3870,u)|0,n[hp>>2]=10,n[hp+4>>2]=0,n[u>>2]=n[hp>>2],n[u+4>>2]=n[hp+4>>2],Un(o,3884,u)|0,n[pp>>2]=11,n[pp+4>>2]=0,n[u>>2]=n[pp>>2],n[u+4>>2]=n[pp+4>>2],Un(o,3896,u)|0,n[Ru>>2]=1,n[Ru+4>>2]=0,n[u>>2]=n[Ru>>2],n[u+4>>2]=n[Ru+4>>2],ci(o,3907,u)|0,n[Mo>>2]=2,n[Mo+4>>2]=0,n[u>>2]=n[Mo>>2],n[u+4>>2]=n[Mo+4>>2],ci(o,3915,u)|0,n[Tu>>2]=3,n[Tu+4>>2]=0,n[u>>2]=n[Tu>>2],n[u+4>>2]=n[Tu+4>>2],ci(o,3928,u)|0,n[Lo>>2]=4,n[Lo+4>>2]=0,n[u>>2]=n[Lo>>2],n[u+4>>2]=n[Lo+4>>2],ci(o,3948,u)|0,n[Ap>>2]=5,n[Ap+4>>2]=0,n[u>>2]=n[Ap>>2],n[u+4>>2]=n[Ap+4>>2],ci(o,3960,u)|0,n[Wn>>2]=6,n[Wn+4>>2]=0,n[u>>2]=n[Wn>>2],n[u+4>>2]=n[Wn+4>>2],ci(o,3974,u)|0,n[Ec>>2]=7,n[Ec+4>>2]=0,n[u>>2]=n[Ec>>2],n[u+4>>2]=n[Ec+4>>2],ci(o,3983,u)|0,n[Us>>2]=20,n[Us+4>>2]=0,n[u>>2]=n[Us>>2],n[u+4>>2]=n[Us+4>>2],kr(o,3999,u)|0,n[co>>2]=8,n[co+4>>2]=0,n[u>>2]=n[co>>2],n[u+4>>2]=n[co+4>>2],ci(o,4012,u)|0,n[fp>>2]=9,n[fp+4>>2]=0,n[u>>2]=n[fp>>2],n[u+4>>2]=n[fp+4>>2],ci(o,4022,u)|0,n[up>>2]=21,n[up+4>>2]=0,n[u>>2]=n[up>>2],n[u+4>>2]=n[up+4>>2],kr(o,4039,u)|0,n[Mf>>2]=10,n[Mf+4>>2]=0,n[u>>2]=n[Mf>>2],n[u+4>>2]=n[Mf+4>>2],ci(o,4053,u)|0,n[cp>>2]=11,n[cp+4>>2]=0,n[u>>2]=n[cp>>2],n[u+4>>2]=n[cp+4>>2],ci(o,4065,u)|0,n[lp>>2]=12,n[lp+4>>2]=0,n[u>>2]=n[lp>>2],n[u+4>>2]=n[lp+4>>2],ci(o,4084,u)|0,n[yc>>2]=13,n[yc+4>>2]=0,n[u>>2]=n[yc>>2],n[u+4>>2]=n[yc+4>>2],ci(o,4097,u)|0,n[ya>>2]=14,n[ya+4>>2]=0,n[u>>2]=n[ya>>2],n[u+4>>2]=n[ya+4>>2],ci(o,4117,u)|0,n[Ml>>2]=15,n[Ml+4>>2]=0,n[u>>2]=n[Ml>>2],n[u+4>>2]=n[Ml+4>>2],ci(o,4129,u)|0,n[lo>>2]=16,n[lo+4>>2]=0,n[u>>2]=n[lo>>2],n[u+4>>2]=n[lo+4>>2],ci(o,4148,u)|0,n[Qu>>2]=17,n[Qu+4>>2]=0,n[u>>2]=n[Qu>>2],n[u+4>>2]=n[Qu+4>>2],ci(o,4161,u)|0,n[Lf>>2]=18,n[Lf+4>>2]=0,n[u>>2]=n[Lf>>2],n[u+4>>2]=n[Lf+4>>2],ci(o,4181,u)|0,n[Of>>2]=5,n[Of+4>>2]=0,n[u>>2]=n[Of>>2],n[u+4>>2]=n[Of+4>>2],zr(o,4196,u)|0,n[t0>>2]=6,n[t0+4>>2]=0,n[u>>2]=n[t0>>2],n[u+4>>2]=n[t0+4>>2],zr(o,4206,u)|0,n[e0>>2]=7,n[e0+4>>2]=0,n[u>>2]=n[e0>>2],n[u+4>>2]=n[e0+4>>2],zr(o,4217,u)|0,n[ku>>2]=3,n[ku+4>>2]=0,n[u>>2]=n[ku>>2],n[u+4>>2]=n[ku+4>>2],Pu(o,4235,u)|0,n[$h>>2]=1,n[$h+4>>2]=0,n[u>>2]=n[$h>>2],n[u+4>>2]=n[$h+4>>2],fM(o,4251,u)|0,n[mc>>2]=4,n[mc+4>>2]=0,n[u>>2]=n[mc>>2],n[u+4>>2]=n[mc+4>>2],Pu(o,4263,u)|0,n[on>>2]=5,n[on+4>>2]=0,n[u>>2]=n[on>>2],n[u+4>>2]=n[on+4>>2],Pu(o,4279,u)|0,n[Xh>>2]=6,n[Xh+4>>2]=0,n[u>>2]=n[Xh>>2],n[u+4>>2]=n[Xh+4>>2],Pu(o,4293,u)|0,n[Zh>>2]=7,n[Zh+4>>2]=0,n[u>>2]=n[Zh>>2],n[u+4>>2]=n[Zh+4>>2],Pu(o,4306,u)|0,n[zh>>2]=8,n[zh+4>>2]=0,n[u>>2]=n[zh>>2],n[u+4>>2]=n[zh+4>>2],Pu(o,4323,u)|0,n[Nf>>2]=9,n[Nf+4>>2]=0,n[u>>2]=n[Nf>>2],n[u+4>>2]=n[Nf+4>>2],Pu(o,4335,u)|0,n[Ff>>2]=2,n[Ff+4>>2]=0,n[u>>2]=n[Ff>>2],n[u+4>>2]=n[Ff+4>>2],fM(o,4353,u)|0,n[Jh>>2]=12,n[Jh+4>>2]=0,n[u>>2]=n[Jh>>2],n[u+4>>2]=n[Jh+4>>2],sd(o,4363,u)|0,n[dc>>2]=1,n[dc+4>>2]=0,n[u>>2]=n[dc>>2],n[u+4>>2]=n[dc+4>>2],rp(o,4376,u)|0,n[Kh>>2]=2,n[Kh+4>>2]=0,n[u>>2]=n[Kh>>2],n[u+4>>2]=n[Kh+4>>2],rp(o,4388,u)|0,n[Vh>>2]=13,n[Vh+4>>2]=0,n[u>>2]=n[Vh>>2],n[u+4>>2]=n[Vh+4>>2],sd(o,4402,u)|0,n[$a>>2]=14,n[$a+4>>2]=0,n[u>>2]=n[$a>>2],n[u+4>>2]=n[$a+4>>2],sd(o,4411,u)|0,n[Oo>>2]=15,n[Oo+4>>2]=0,n[u>>2]=n[Oo>>2],n[u+4>>2]=n[Oo+4>>2],sd(o,4421,u)|0,n[No>>2]=16,n[No+4>>2]=0,n[u>>2]=n[No>>2],n[u+4>>2]=n[No+4>>2],sd(o,4433,u)|0,n[Fo>>2]=17,n[Fo+4>>2]=0,n[u>>2]=n[Fo>>2],n[u+4>>2]=n[Fo+4>>2],sd(o,4446,u)|0,n[Hn>>2]=18,n[Hn+4>>2]=0,n[u>>2]=n[Hn>>2],n[u+4>>2]=n[Hn+4>>2],sd(o,4458,u)|0,n[cr>>2]=3,n[cr+4>>2]=0,n[u>>2]=n[cr>>2],n[u+4>>2]=n[cr+4>>2],rp(o,4471,u)|0,n[Hr>>2]=1,n[Hr+4>>2]=0,n[u>>2]=n[Hr>>2],n[u+4>>2]=n[Hr+4>>2],_P(o,4486,u)|0,n[Tr>>2]=10,n[Tr+4>>2]=0,n[u>>2]=n[Tr>>2],n[u+4>>2]=n[Tr+4>>2],Pu(o,4496,u)|0,n[$t>>2]=11,n[$t+4>>2]=0,n[u>>2]=n[$t>>2],n[u+4>>2]=n[$t+4>>2],Pu(o,4508,u)|0,n[fr>>2]=3,n[fr+4>>2]=0,n[u>>2]=n[fr>>2],n[u+4>>2]=n[fr+4>>2],fM(o,4519,u)|0,n[qr>>2]=4,n[qr+4>>2]=0,n[u>>2]=n[qr>>2],n[u+4>>2]=n[qr+4>>2],TOe(o,4530,u)|0,n[Lt>>2]=19,n[Lt+4>>2]=0,n[u>>2]=n[Lt>>2],n[u+4>>2]=n[Lt+4>>2],ROe(o,4542,u)|0,n[Ge>>2]=12,n[Ge+4>>2]=0,n[u>>2]=n[Ge>>2],n[u+4>>2]=n[Ge+4>>2],FOe(o,4554,u)|0,n[He>>2]=13,n[He+4>>2]=0,n[u>>2]=n[He>>2],n[u+4>>2]=n[He+4>>2],NOe(o,4568,u)|0,n[ct>>2]=2,n[ct+4>>2]=0,n[u>>2]=n[ct>>2],n[u+4>>2]=n[ct+4>>2],OOe(o,4578,u)|0,n[Ze>>2]=20,n[Ze+4>>2]=0,n[u>>2]=n[Ze>>2],n[u+4>>2]=n[Ze+4>>2],LOe(o,4587,u)|0,n[tt>>2]=22,n[tt+4>>2]=0,n[u>>2]=n[tt>>2],n[u+4>>2]=n[tt+4>>2],kr(o,4602,u)|0,n[Qe>>2]=23,n[Qe+4>>2]=0,n[u>>2]=n[Qe>>2],n[u+4>>2]=n[Qe+4>>2],kr(o,4619,u)|0,n[Le>>2]=14,n[Le+4>>2]=0,n[u>>2]=n[Le>>2],n[u+4>>2]=n[Le+4>>2],MOe(o,4629,u)|0,n[We>>2]=1,n[We+4>>2]=0,n[u>>2]=n[We>>2],n[u+4>>2]=n[We+4>>2],_Oe(o,4637,u)|0,n[ae>>2]=4,n[ae+4>>2]=0,n[u>>2]=n[ae>>2],n[u+4>>2]=n[ae+4>>2],rp(o,4653,u)|0,n[G>>2]=5,n[G+4>>2]=0,n[u>>2]=n[G>>2],n[u+4>>2]=n[G+4>>2],rp(o,4669,u)|0,n[M>>2]=6,n[M+4>>2]=0,n[u>>2]=n[M>>2],n[u+4>>2]=n[M+4>>2],rp(o,4686,u)|0,n[_>>2]=7,n[_+4>>2]=0,n[u>>2]=n[_>>2],n[u+4>>2]=n[_+4>>2],rp(o,4701,u)|0,n[T>>2]=8,n[T+4>>2]=0,n[u>>2]=n[T>>2],n[u+4>>2]=n[T+4>>2],rp(o,4719,u)|0,n[k>>2]=9,n[k+4>>2]=0,n[u>>2]=n[k>>2],n[u+4>>2]=n[k+4>>2],rp(o,4736,u)|0,n[B>>2]=21,n[B+4>>2]=0,n[u>>2]=n[B>>2],n[u+4>>2]=n[B+4>>2],UOe(o,4754,u)|0,n[m>>2]=2,n[m+4>>2]=0,n[u>>2]=n[m>>2],n[u+4>>2]=n[m+4>>2],_P(o,4772,u)|0,n[d>>2]=3,n[d+4>>2]=0,n[u>>2]=n[d>>2],n[u+4>>2]=n[d+4>>2],_P(o,4790,u)|0,n[A>>2]=4,n[A+4>>2]=0,n[u>>2]=n[A>>2],n[u+4>>2]=n[A+4>>2],_P(o,4808,u)|0,I=l}function ht(o,l){o=o|0,l=l|0;var u=0;u=Y8e()|0,n[o>>2]=u,V8e(u,l),Gh(n[o>>2]|0)}function Zt(o,l,u){return o=o|0,l=l|0,u=u|0,T8e(o,Bn(l)|0,u,0),o|0}function Sr(o,l,u){return o=o|0,l=l|0,u=u|0,d8e(o,Bn(l)|0,u,0),o|0}function Xn(o,l,u){return o=o|0,l=l|0,u=u|0,r8e(o,Bn(l)|0,u,0),o|0}function kr(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],U3e(o,l,d),I=A,o|0}function Rn(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],C3e(o,l,d),I=A,o|0}function Un(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],s3e(o,l,d),I=A,o|0}function zr(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],q4e(o,l,d),I=A,o|0}function ci(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],b4e(o,l,d),I=A,o|0}function Pu(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],f4e(o,l,d),I=A,o|0}function fM(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],JUe(o,l,d),I=A,o|0}function sd(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],CUe(o,l,d),I=A,o|0}function rp(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],sUe(o,l,d),I=A,o|0}function _P(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],q_e(o,l,d),I=A,o|0}function TOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],b_e(o,l,d),I=A,o|0}function ROe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],f_e(o,l,d),I=A,o|0}function FOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],zMe(o,l,d),I=A,o|0}function NOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],NMe(o,l,d),I=A,o|0}function OOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],yMe(o,l,d),I=A,o|0}function LOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tMe(o,l,d),I=A,o|0}function MOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_Le(o,l,d),I=A,o|0}function _Oe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],CLe(o,l,d),I=A,o|0}function UOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],HOe(o,l,d),I=A,o|0}function HOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jOe(o,u,d,1),I=A}function Bn(o){return o=o|0,o|0}function jOe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=AM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=qOe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,GOe(m,A)|0,A),I=d}function AM(){var o=0,l=0;if(s[7616]|0||(jz(9136),gr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9136)|0)){o=9136,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));jz(9136)}return 9136}function qOe(o){return o=o|0,0}function GOe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=AM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Hz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(VOe(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function vn(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0;var B=0,k=0,T=0,_=0,M=0,G=0,ae=0,We=0;B=I,I=I+32|0,ae=B+24|0,G=B+20|0,T=B+16|0,M=B+12|0,_=B+8|0,k=B+4|0,We=B,n[G>>2]=l,n[T>>2]=u,n[M>>2]=A,n[_>>2]=d,n[k>>2]=m,m=o+28|0,n[We>>2]=n[m>>2],n[ae>>2]=n[We>>2],WOe(o+24|0,ae,G,M,_,T,k)|0,n[m>>2]=n[n[m>>2]>>2],I=B}function WOe(o,l,u,A,d,m,B){return o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,B=B|0,o=YOe(l)|0,l=Jt(24)|0,Uz(l+4|0,n[u>>2]|0,n[A>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[o>>2],n[o>>2]=l,l|0}function YOe(o){return o=o|0,n[o>>2]|0}function Uz(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,n[o>>2]=l,n[o+4>>2]=u,n[o+8>>2]=A,n[o+12>>2]=d,n[o+16>>2]=m}function yr(o,l){return o=o|0,l=l|0,l|o|0}function Hz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function VOe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=KOe(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,JOe(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Hz(m,A,u),n[T>>2]=(n[T>>2]|0)+12,zOe(o,k),ZOe(k),I=_;return}}function KOe(o){return o=o|0,357913941}function JOe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function zOe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function ZOe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function jz(o){o=o|0,eLe(o)}function XOe(o){o=o|0,$Oe(o+24|0)}function Ur(o){return o=o|0,n[o>>2]|0}function $Oe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function eLe(o){o=o|0;var l=0;l=en()|0,tn(o,2,3,l,tLe()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function en(){return 9228}function tLe(){return 1140}function rLe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;return u=I,I=I+16|0,A=u+8|0,d=u,m=nLe(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],l=iLe(l,A)|0,I=u,l|0}function tn(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,n[o>>2]=l,n[o+4>>2]=u,n[o+8>>2]=A,n[o+12>>2]=d,n[o+16>>2]=m}function nLe(o){return o=o|0,(n[(AM()|0)+24>>2]|0)+(o*12|0)|0}function iLe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;return d=I,I=I+48|0,A=d,u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),ap[u&31](A,o),A=sLe(A)|0,I=d,A|0}function sLe(o){o=o|0;var l=0,u=0,A=0,d=0;return d=I,I=I+32|0,l=d+12|0,u=d,A=pM(qz()|0)|0,A?(hM(l,A),gM(u,l),oLe(o,u),o=dM(l)|0):o=aLe(o)|0,I=d,o|0}function qz(){var o=0;return s[7632]|0||(mLe(9184),gr(25,9184,U|0)|0,o=7632,n[o>>2]=1,n[o+4>>2]=0),9184}function pM(o){return o=o|0,n[o+36>>2]|0}function hM(o,l){o=o|0,l=l|0,n[o>>2]=l,n[o+4>>2]=o,n[o+8>>2]=0}function gM(o,l){o=o|0,l=l|0,n[o>>2]=n[l>>2],n[o+4>>2]=n[l+4>>2],n[o+8>>2]=0}function oLe(o,l){o=o|0,l=l|0,fLe(l,o,o+8|0,o+16|0,o+24|0,o+32|0,o+40|0)|0}function dM(o){return o=o|0,n[(n[o+4>>2]|0)+8>>2]|0}function aLe(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0,T=0;T=I,I=I+16|0,u=T+4|0,A=T,d=Fl(8)|0,m=d,B=Jt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[o>>2],k=k+4|0,o=o+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Jt(8)|0,B=n[l>>2]|0,n[A>>2]=0,n[u>>2]=n[A>>2],Gz(k,B,u),n[d>>2]=k,I=T,m|0}function Gz(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,u=Jt(16)|0,n[u+4>>2]=0,n[u+8>>2]=0,n[u>>2]=1092,n[u+12>>2]=l,n[o+4>>2]=u}function lLe(o){o=o|0,Zy(o),Et(o)}function cLe(o){o=o|0,o=n[o+12>>2]|0,o|0&&Et(o)}function uLe(o){o=o|0,Et(o)}function fLe(o,l,u,A,d,m,B){return o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,B=B|0,m=ALe(n[o>>2]|0,l,u,A,d,m,B)|0,B=o+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function ALe(o,l,u,A,d,m,B){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,B=B|0;var k=0,T=0;return k=I,I=I+16|0,T=k,Nl(T),o=Ms(o)|0,B=pLe(o,+E[l>>3],+E[u>>3],+E[A>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,Ol(T),I=k,B|0}function pLe(o,l,u,A,d,m,B){o=o|0,l=+l,u=+u,A=+A,d=+d,m=+m,B=+B;var k=0;return k=ma(hLe()|0)|0,l=+Ja(l),u=+Ja(u),A=+Ja(A),d=+Ja(d),m=+Ja(m),io(0,k|0,o|0,+l,+u,+A,+d,+m,+ +Ja(B))|0}function hLe(){var o=0;return s[7624]|0||(gLe(9172),o=7624,n[o>>2]=1,n[o+4>>2]=0),9172}function gLe(o){o=o|0,Ro(o,dLe()|0,6)}function dLe(){return 1112}function mLe(o){o=o|0,_h(o)}function yLe(o){o=o|0,Wz(o+24|0),Yz(o+16|0)}function Wz(o){o=o|0,ILe(o)}function Yz(o){o=o|0,ELe(o)}function ELe(o){o=o|0;var l=0,u=0;if(l=n[o>>2]|0,l|0)do u=l,l=n[l>>2]|0,Et(u);while(l|0);n[o>>2]=0}function ILe(o){o=o|0;var l=0,u=0;if(l=n[o>>2]|0,l|0)do u=l,l=n[l>>2]|0,Et(u);while(l|0);n[o>>2]=0}function _h(o){o=o|0;var l=0;n[o+16>>2]=0,n[o+20>>2]=0,l=o+24|0,n[l>>2]=0,n[o+28>>2]=l,n[o+36>>2]=0,s[o+40>>0]=0,s[o+41>>0]=0}function CLe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],wLe(o,u,d,0),I=A}function wLe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=mM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=BLe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,vLe(m,A)|0,A),I=d}function mM(){var o=0,l=0;if(s[7640]|0||(Kz(9232),gr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9232)|0)){o=9232,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));Kz(9232)}return 9232}function BLe(o){return o=o|0,0}function vLe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=mM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Vz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(SLe(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function Vz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function SLe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=DLe(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,bLe(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Vz(m,A,u),n[T>>2]=(n[T>>2]|0)+12,PLe(o,k),xLe(k),I=_;return}}function DLe(o){return o=o|0,357913941}function bLe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function PLe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function xLe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function Kz(o){o=o|0,TLe(o)}function kLe(o){o=o|0,QLe(o+24|0)}function QLe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function TLe(o){o=o|0;var l=0;l=en()|0,tn(o,2,1,l,RLe()|0,3),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function RLe(){return 1144}function FLe(o,l,u,A,d){o=o|0,l=l|0,u=+u,A=+A,d=d|0;var m=0,B=0,k=0,T=0;m=I,I=I+16|0,B=m+8|0,k=m,T=NLe(o)|0,o=n[T+4>>2]|0,n[k>>2]=n[T>>2],n[k+4>>2]=o,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],OLe(l,B,u,A,d),I=m}function NLe(o){return o=o|0,(n[(mM()|0)+24>>2]|0)+(o*12|0)|0}function OLe(o,l,u,A,d){o=o|0,l=l|0,u=+u,A=+A,d=d|0;var m=0,B=0,k=0,T=0,_=0;_=I,I=I+16|0,B=_+2|0,k=_+1|0,T=_,m=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(m=n[(n[o>>2]|0)+m>>2]|0),Tf(B,u),u=+Rf(B,u),Tf(k,A),A=+Rf(k,A),np(T,d),T=ip(T,d)|0,c$[m&1](o,u,A,T),I=_}function Tf(o,l){o=o|0,l=+l}function Rf(o,l){return o=o|0,l=+l,+ +MLe(l)}function np(o,l){o=o|0,l=l|0}function ip(o,l){return o=o|0,l=l|0,LLe(l)|0}function LLe(o){return o=o|0,o|0}function MLe(o){return o=+o,+o}function _Le(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ULe(o,u,d,1),I=A}function ULe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=yM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=HLe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,jLe(m,A)|0,A),I=d}function yM(){var o=0,l=0;if(s[7648]|0||(zz(9268),gr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9268)|0)){o=9268,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));zz(9268)}return 9268}function HLe(o){return o=o|0,0}function jLe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=yM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Jz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(qLe(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function Jz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function qLe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=GLe(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,WLe(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Jz(m,A,u),n[T>>2]=(n[T>>2]|0)+12,YLe(o,k),VLe(k),I=_;return}}function GLe(o){return o=o|0,357913941}function WLe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function YLe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function VLe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function zz(o){o=o|0,zLe(o)}function KLe(o){o=o|0,JLe(o+24|0)}function JLe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function zLe(o){o=o|0;var l=0;l=en()|0,tn(o,2,4,l,ZLe()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function ZLe(){return 1160}function XLe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;return u=I,I=I+16|0,A=u+8|0,d=u,m=$Le(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],l=eMe(l,A)|0,I=u,l|0}function $Le(o){return o=o|0,(n[(yM()|0)+24>>2]|0)+(o*12|0)|0}function eMe(o,l){o=o|0,l=l|0;var u=0;return u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),Zz(hd[u&31](o)|0)|0}function Zz(o){return o=o|0,o&1|0}function tMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rMe(o,u,d,0),I=A}function rMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=EM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=nMe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,iMe(m,A)|0,A),I=d}function EM(){var o=0,l=0;if(s[7656]|0||($z(9304),gr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9304)|0)){o=9304,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));$z(9304)}return 9304}function nMe(o){return o=o|0,0}function iMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=EM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Xz(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(sMe(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function Xz(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function sMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=oMe(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,aMe(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],Xz(m,A,u),n[T>>2]=(n[T>>2]|0)+12,lMe(o,k),cMe(k),I=_;return}}function oMe(o){return o=o|0,357913941}function aMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function lMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function cMe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function $z(o){o=o|0,AMe(o)}function uMe(o){o=o|0,fMe(o+24|0)}function fMe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function AMe(o){o=o|0;var l=0;l=en()|0,tn(o,2,5,l,pMe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function pMe(){return 1164}function hMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,d=A+8|0,m=A,B=gMe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],dMe(l,d,u),I=A}function gMe(o){return o=o|0,(n[(EM()|0)+24>>2]|0)+(o*12|0)|0}function dMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),Uh(d,u),u=Hh(d,u)|0,ap[A&31](o,u),jh(d),I=m}function Uh(o,l){o=o|0,l=l|0,mMe(o,l)}function Hh(o,l){return o=o|0,l=l|0,o|0}function jh(o){o=o|0,Df(o)}function mMe(o,l){o=o|0,l=l|0,IM(o,l)}function IM(o,l){o=o|0,l=l|0,n[o>>2]=l}function yMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],EMe(o,u,d,0),I=A}function EMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=CM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=IMe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,CMe(m,A)|0,A),I=d}function CM(){var o=0,l=0;if(s[7664]|0||(tZ(9340),gr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9340)|0)){o=9340,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));tZ(9340)}return 9340}function IMe(o){return o=o|0,0}function CMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=CM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],eZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(wMe(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function eZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function wMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=BMe(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,vMe(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],eZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,SMe(o,k),DMe(k),I=_;return}}function BMe(o){return o=o|0,357913941}function vMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function SMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function DMe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function tZ(o){o=o|0,xMe(o)}function bMe(o){o=o|0,PMe(o+24|0)}function PMe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function xMe(o){o=o|0;var l=0;l=en()|0,tn(o,2,4,l,kMe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function kMe(){return 1180}function QMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=TMe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],u=RMe(l,d,u)|0,I=A,u|0}function TMe(o){return o=o|0,(n[(CM()|0)+24>>2]|0)+(o*12|0)|0}function RMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;return m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),od(d,u),d=ad(d,u)|0,d=UP(m_[A&15](o,d)|0)|0,I=m,d|0}function od(o,l){o=o|0,l=l|0}function ad(o,l){return o=o|0,l=l|0,FMe(l)|0}function UP(o){return o=o|0,o|0}function FMe(o){return o=o|0,o|0}function NMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],OMe(o,u,d,0),I=A}function OMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=wM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=LMe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,MMe(m,A)|0,A),I=d}function wM(){var o=0,l=0;if(s[7672]|0||(nZ(9376),gr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9376)|0)){o=9376,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));nZ(9376)}return 9376}function LMe(o){return o=o|0,0}function MMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=wM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],rZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(_Me(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function rZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function _Me(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=UMe(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,HMe(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],rZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,jMe(o,k),qMe(k),I=_;return}}function UMe(o){return o=o|0,357913941}function HMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function jMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function qMe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function nZ(o){o=o|0,YMe(o)}function GMe(o){o=o|0,WMe(o+24|0)}function WMe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function YMe(o){o=o|0;var l=0;l=en()|0,tn(o,2,5,l,iZ()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function iZ(){return 1196}function VMe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;return u=I,I=I+16|0,A=u+8|0,d=u,m=KMe(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],l=JMe(l,A)|0,I=u,l|0}function KMe(o){return o=o|0,(n[(wM()|0)+24>>2]|0)+(o*12|0)|0}function JMe(o,l){o=o|0,l=l|0;var u=0;return u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),UP(hd[u&31](o)|0)|0}function zMe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZMe(o,u,d,1),I=A}function ZMe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=BM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=XMe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,$Me(m,A)|0,A),I=d}function BM(){var o=0,l=0;if(s[7680]|0||(oZ(9412),gr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9412)|0)){o=9412,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));oZ(9412)}return 9412}function XMe(o){return o=o|0,0}function $Me(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=BM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],sZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(e_e(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function sZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function e_e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=t_e(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,r_e(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],sZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,n_e(o,k),i_e(k),I=_;return}}function t_e(o){return o=o|0,357913941}function r_e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function n_e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function i_e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function oZ(o){o=o|0,a_e(o)}function s_e(o){o=o|0,o_e(o+24|0)}function o_e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function a_e(o){o=o|0;var l=0;l=en()|0,tn(o,2,6,l,aZ()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function aZ(){return 1200}function l_e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;return u=I,I=I+16|0,A=u+8|0,d=u,m=c_e(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],l=u_e(l,A)|0,I=u,l|0}function c_e(o){return o=o|0,(n[(BM()|0)+24>>2]|0)+(o*12|0)|0}function u_e(o,l){o=o|0,l=l|0;var u=0;return u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),HP(hd[u&31](o)|0)|0}function HP(o){return o=o|0,o|0}function f_e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],A_e(o,u,d,0),I=A}function A_e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=vM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=p_e(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,h_e(m,A)|0,A),I=d}function vM(){var o=0,l=0;if(s[7688]|0||(cZ(9448),gr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9448)|0)){o=9448,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));cZ(9448)}return 9448}function p_e(o){return o=o|0,0}function h_e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=vM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],lZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(g_e(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function lZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function g_e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=d_e(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,m_e(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],lZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,y_e(o,k),E_e(k),I=_;return}}function d_e(o){return o=o|0,357913941}function m_e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function y_e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function E_e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function cZ(o){o=o|0,w_e(o)}function I_e(o){o=o|0,C_e(o+24|0)}function C_e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function w_e(o){o=o|0;var l=0;l=en()|0,tn(o,2,6,l,uZ()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function uZ(){return 1204}function B_e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,d=A+8|0,m=A,B=v_e(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],S_e(l,d,u),I=A}function v_e(o){return o=o|0,(n[(vM()|0)+24>>2]|0)+(o*12|0)|0}function S_e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),SM(d,u),d=DM(d,u)|0,ap[A&31](o,d),I=m}function SM(o,l){o=o|0,l=l|0}function DM(o,l){return o=o|0,l=l|0,D_e(l)|0}function D_e(o){return o=o|0,o|0}function b_e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],P_e(o,u,d,0),I=A}function P_e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=bM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=x_e(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,k_e(m,A)|0,A),I=d}function bM(){var o=0,l=0;if(s[7696]|0||(AZ(9484),gr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9484)|0)){o=9484,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));AZ(9484)}return 9484}function x_e(o){return o=o|0,0}function k_e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=bM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],fZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(Q_e(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function fZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function Q_e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=T_e(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,R_e(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],fZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,F_e(o,k),N_e(k),I=_;return}}function T_e(o){return o=o|0,357913941}function R_e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function F_e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function N_e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function AZ(o){o=o|0,M_e(o)}function O_e(o){o=o|0,L_e(o+24|0)}function L_e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function M_e(o){o=o|0;var l=0;l=en()|0,tn(o,2,1,l,__e()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function __e(){return 1212}function U_e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;d=I,I=I+16|0,m=d+8|0,B=d,k=H_e(o)|0,o=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=o,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],j_e(l,m,u,A),I=d}function H_e(o){return o=o|0,(n[(bM()|0)+24>>2]|0)+(o*12|0)|0}function j_e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;k=I,I=I+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(d=n[(n[o>>2]|0)+d>>2]|0),SM(m,u),m=DM(m,u)|0,od(B,A),B=ad(B,A)|0,F2[d&15](o,m,B),I=k}function q_e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],G_e(o,u,d,1),I=A}function G_e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=PM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=W_e(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,Y_e(m,A)|0,A),I=d}function PM(){var o=0,l=0;if(s[7704]|0||(hZ(9520),gr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9520)|0)){o=9520,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));hZ(9520)}return 9520}function W_e(o){return o=o|0,0}function Y_e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=PM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],pZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(V_e(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function pZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function V_e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=K_e(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,J_e(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],pZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,z_e(o,k),Z_e(k),I=_;return}}function K_e(o){return o=o|0,357913941}function J_e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function z_e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function Z_e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function hZ(o){o=o|0,eUe(o)}function X_e(o){o=o|0,$_e(o+24|0)}function $_e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function eUe(o){o=o|0;var l=0;l=en()|0,tn(o,2,1,l,tUe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function tUe(){return 1224}function rUe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;return d=I,I=I+16|0,m=d+8|0,B=d,k=nUe(o)|0,o=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=o,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],A=+iUe(l,m,u),I=d,+A}function nUe(o){return o=o|0,(n[(PM()|0)+24>>2]|0)+(o*12|0)|0}function iUe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),np(d,u),d=ip(d,u)|0,B=+Qf(+f$[A&7](o,d)),I=m,+B}function sUe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oUe(o,u,d,1),I=A}function oUe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=xM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=aUe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,lUe(m,A)|0,A),I=d}function xM(){var o=0,l=0;if(s[7712]|0||(dZ(9556),gr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9556)|0)){o=9556,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));dZ(9556)}return 9556}function aUe(o){return o=o|0,0}function lUe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=xM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],gZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(cUe(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function gZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function cUe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=uUe(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,fUe(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],gZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,AUe(o,k),pUe(k),I=_;return}}function uUe(o){return o=o|0,357913941}function fUe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function AUe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function pUe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function dZ(o){o=o|0,dUe(o)}function hUe(o){o=o|0,gUe(o+24|0)}function gUe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function dUe(o){o=o|0;var l=0;l=en()|0,tn(o,2,5,l,mUe()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function mUe(){return 1232}function yUe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=EUe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],u=+IUe(l,d),I=A,+u}function EUe(o){return o=o|0,(n[(xM()|0)+24>>2]|0)+(o*12|0)|0}function IUe(o,l){o=o|0,l=l|0;var u=0;return u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),+ +Qf(+u$[u&15](o))}function CUe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],wUe(o,u,d,1),I=A}function wUe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=kM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=BUe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,vUe(m,A)|0,A),I=d}function kM(){var o=0,l=0;if(s[7720]|0||(yZ(9592),gr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9592)|0)){o=9592,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));yZ(9592)}return 9592}function BUe(o){return o=o|0,0}function vUe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=kM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],mZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(SUe(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function mZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function SUe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=DUe(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,bUe(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],mZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,PUe(o,k),xUe(k),I=_;return}}function DUe(o){return o=o|0,357913941}function bUe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function PUe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function xUe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function yZ(o){o=o|0,TUe(o)}function kUe(o){o=o|0,QUe(o+24|0)}function QUe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function TUe(o){o=o|0;var l=0;l=en()|0,tn(o,2,7,l,RUe()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function RUe(){return 1276}function FUe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;return u=I,I=I+16|0,A=u+8|0,d=u,m=NUe(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],l=OUe(l,A)|0,I=u,l|0}function NUe(o){return o=o|0,(n[(kM()|0)+24>>2]|0)+(o*12|0)|0}function OUe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;return d=I,I=I+16|0,A=d,u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),ap[u&31](A,o),A=EZ(A)|0,I=d,A|0}function EZ(o){o=o|0;var l=0,u=0,A=0,d=0;return d=I,I=I+32|0,l=d+12|0,u=d,A=pM(IZ()|0)|0,A?(hM(l,A),gM(u,l),LUe(o,u),o=dM(l)|0):o=MUe(o)|0,I=d,o|0}function IZ(){var o=0;return s[7736]|0||(KUe(9640),gr(25,9640,U|0)|0,o=7736,n[o>>2]=1,n[o+4>>2]=0),9640}function LUe(o,l){o=o|0,l=l|0,jUe(l,o,o+8|0)|0}function MUe(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0;return u=I,I=I+16|0,d=u+4|0,B=u,A=Fl(8)|0,l=A,k=Jt(16)|0,n[k>>2]=n[o>>2],n[k+4>>2]=n[o+4>>2],n[k+8>>2]=n[o+8>>2],n[k+12>>2]=n[o+12>>2],m=l+4|0,n[m>>2]=k,o=Jt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],QM(o,m,d),n[A>>2]=o,I=u,l|0}function QM(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,u=Jt(16)|0,n[u+4>>2]=0,n[u+8>>2]=0,n[u>>2]=1244,n[u+12>>2]=l,n[o+4>>2]=u}function _Ue(o){o=o|0,Zy(o),Et(o)}function UUe(o){o=o|0,o=n[o+12>>2]|0,o|0&&Et(o)}function HUe(o){o=o|0,Et(o)}function jUe(o,l,u){return o=o|0,l=l|0,u=u|0,l=qUe(n[o>>2]|0,l,u)|0,u=o+4|0,n[(n[u>>2]|0)+8>>2]=l,n[(n[u>>2]|0)+8>>2]|0}function qUe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;return A=I,I=I+16|0,d=A,Nl(d),o=Ms(o)|0,u=GUe(o,n[l>>2]|0,+E[u>>3])|0,Ol(d),I=A,u|0}function GUe(o,l,u){o=o|0,l=l|0,u=+u;var A=0;return A=ma(WUe()|0)|0,l=Gy(l)|0,lu(0,A|0,o|0,l|0,+ +Ja(u))|0}function WUe(){var o=0;return s[7728]|0||(YUe(9628),o=7728,n[o>>2]=1,n[o+4>>2]=0),9628}function YUe(o){o=o|0,Ro(o,VUe()|0,2)}function VUe(){return 1264}function KUe(o){o=o|0,_h(o)}function JUe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],zUe(o,u,d,1),I=A}function zUe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=TM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=ZUe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,XUe(m,A)|0,A),I=d}function TM(){var o=0,l=0;if(s[7744]|0||(wZ(9684),gr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9684)|0)){o=9684,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));wZ(9684)}return 9684}function ZUe(o){return o=o|0,0}function XUe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=TM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],CZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):($Ue(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function CZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function $Ue(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=e4e(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,t4e(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],CZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,r4e(o,k),n4e(k),I=_;return}}function e4e(o){return o=o|0,357913941}function t4e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function r4e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function n4e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function wZ(o){o=o|0,o4e(o)}function i4e(o){o=o|0,s4e(o+24|0)}function s4e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function o4e(o){o=o|0;var l=0;l=en()|0,tn(o,2,5,l,a4e()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function a4e(){return 1280}function l4e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=c4e(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],u=u4e(l,d,u)|0,I=A,u|0}function c4e(o){return o=o|0,(n[(TM()|0)+24>>2]|0)+(o*12|0)|0}function u4e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return B=I,I=I+32|0,d=B,m=B+16|0,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),np(m,u),m=ip(m,u)|0,F2[A&15](d,o,m),m=EZ(d)|0,I=B,m|0}function f4e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],A4e(o,u,d,1),I=A}function A4e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=RM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=p4e(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,h4e(m,A)|0,A),I=d}function RM(){var o=0,l=0;if(s[7752]|0||(vZ(9720),gr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9720)|0)){o=9720,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));vZ(9720)}return 9720}function p4e(o){return o=o|0,0}function h4e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=RM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],BZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(g4e(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function BZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function g4e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=d4e(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,m4e(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],BZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,y4e(o,k),E4e(k),I=_;return}}function d4e(o){return o=o|0,357913941}function m4e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function y4e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function E4e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function vZ(o){o=o|0,w4e(o)}function I4e(o){o=o|0,C4e(o+24|0)}function C4e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function w4e(o){o=o|0;var l=0;l=en()|0,tn(o,2,8,l,B4e()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function B4e(){return 1288}function v4e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;return u=I,I=I+16|0,A=u+8|0,d=u,m=S4e(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],l=D4e(l,A)|0,I=u,l|0}function S4e(o){return o=o|0,(n[(RM()|0)+24>>2]|0)+(o*12|0)|0}function D4e(o,l){o=o|0,l=l|0;var u=0;return u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),id(hd[u&31](o)|0)|0}function b4e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],P4e(o,u,d,0),I=A}function P4e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=FM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=x4e(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,k4e(m,A)|0,A),I=d}function FM(){var o=0,l=0;if(s[7760]|0||(DZ(9756),gr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9756)|0)){o=9756,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));DZ(9756)}return 9756}function x4e(o){return o=o|0,0}function k4e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=FM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],SZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(Q4e(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function SZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function Q4e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=T4e(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,R4e(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],SZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,F4e(o,k),N4e(k),I=_;return}}function T4e(o){return o=o|0,357913941}function R4e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function F4e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function N4e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function DZ(o){o=o|0,M4e(o)}function O4e(o){o=o|0,L4e(o+24|0)}function L4e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function M4e(o){o=o|0;var l=0;l=en()|0,tn(o,2,8,l,_4e()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function _4e(){return 1292}function U4e(o,l,u){o=o|0,l=l|0,u=+u;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,d=A+8|0,m=A,B=H4e(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],j4e(l,d,u),I=A}function H4e(o){return o=o|0,(n[(FM()|0)+24>>2]|0)+(o*12|0)|0}function j4e(o,l,u){o=o|0,l=l|0,u=+u;var A=0,d=0,m=0;m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),Tf(d,u),u=+Rf(d,u),a$[A&31](o,u),I=m}function q4e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],G4e(o,u,d,0),I=A}function G4e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=NM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=W4e(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,Y4e(m,A)|0,A),I=d}function NM(){var o=0,l=0;if(s[7768]|0||(PZ(9792),gr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9792)|0)){o=9792,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));PZ(9792)}return 9792}function W4e(o){return o=o|0,0}function Y4e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=NM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],bZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(V4e(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function bZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function V4e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=K4e(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,J4e(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],bZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,z4e(o,k),Z4e(k),I=_;return}}function K4e(o){return o=o|0,357913941}function J4e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function z4e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function Z4e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function PZ(o){o=o|0,e3e(o)}function X4e(o){o=o|0,$4e(o+24|0)}function $4e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function e3e(o){o=o|0;var l=0;l=en()|0,tn(o,2,1,l,t3e()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function t3e(){return 1300}function r3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=+A;var d=0,m=0,B=0,k=0;d=I,I=I+16|0,m=d+8|0,B=d,k=n3e(o)|0,o=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=o,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],i3e(l,m,u,A),I=d}function n3e(o){return o=o|0,(n[(NM()|0)+24>>2]|0)+(o*12|0)|0}function i3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=+A;var d=0,m=0,B=0,k=0;k=I,I=I+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(d=n[(n[o>>2]|0)+d>>2]|0),np(m,u),m=ip(m,u)|0,Tf(B,A),A=+Rf(B,A),g$[d&15](o,m,A),I=k}function s3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],o3e(o,u,d,0),I=A}function o3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=OM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=a3e(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,l3e(m,A)|0,A),I=d}function OM(){var o=0,l=0;if(s[7776]|0||(kZ(9828),gr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9828)|0)){o=9828,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));kZ(9828)}return 9828}function a3e(o){return o=o|0,0}function l3e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=OM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],xZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(c3e(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function xZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function c3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=u3e(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,f3e(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],xZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,A3e(o,k),p3e(k),I=_;return}}function u3e(o){return o=o|0,357913941}function f3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function A3e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function p3e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function kZ(o){o=o|0,d3e(o)}function h3e(o){o=o|0,g3e(o+24|0)}function g3e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function d3e(o){o=o|0;var l=0;l=en()|0,tn(o,2,7,l,m3e()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function m3e(){return 1312}function y3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,d=A+8|0,m=A,B=E3e(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],I3e(l,d,u),I=A}function E3e(o){return o=o|0,(n[(OM()|0)+24>>2]|0)+(o*12|0)|0}function I3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),np(d,u),d=ip(d,u)|0,ap[A&31](o,d),I=m}function C3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],w3e(o,u,d,0),I=A}function w3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=LM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=B3e(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,v3e(m,A)|0,A),I=d}function LM(){var o=0,l=0;if(s[7784]|0||(TZ(9864),gr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9864)|0)){o=9864,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));TZ(9864)}return 9864}function B3e(o){return o=o|0,0}function v3e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=LM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],QZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(S3e(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function QZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function S3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=D3e(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,b3e(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],QZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,P3e(o,k),x3e(k),I=_;return}}function D3e(o){return o=o|0,357913941}function b3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function P3e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function x3e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function TZ(o){o=o|0,T3e(o)}function k3e(o){o=o|0,Q3e(o+24|0)}function Q3e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function T3e(o){o=o|0;var l=0;l=en()|0,tn(o,2,8,l,R3e()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function R3e(){return 1320}function F3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,d=A+8|0,m=A,B=N3e(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],O3e(l,d,u),I=A}function N3e(o){return o=o|0,(n[(LM()|0)+24>>2]|0)+(o*12|0)|0}function O3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),L3e(d,u),d=M3e(d,u)|0,ap[A&31](o,d),I=m}function L3e(o,l){o=o|0,l=l|0}function M3e(o,l){return o=o|0,l=l|0,_3e(l)|0}function _3e(o){return o=o|0,o|0}function U3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],H3e(o,u,d,0),I=A}function H3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=MM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=j3e(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,q3e(m,A)|0,A),I=d}function MM(){var o=0,l=0;if(s[7792]|0||(FZ(9900),gr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9900)|0)){o=9900,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));FZ(9900)}return 9900}function j3e(o){return o=o|0,0}function q3e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=MM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],RZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(G3e(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function RZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function G3e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=W3e(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,Y3e(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],RZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,V3e(o,k),K3e(k),I=_;return}}function W3e(o){return o=o|0,357913941}function Y3e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function V3e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function K3e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function FZ(o){o=o|0,Z3e(o)}function J3e(o){o=o|0,z3e(o+24|0)}function z3e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function Z3e(o){o=o|0;var l=0;l=en()|0,tn(o,2,22,l,X3e()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function X3e(){return 1344}function $3e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0;u=I,I=I+16|0,A=u+8|0,d=u,m=e8e(o)|0,o=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=o,n[A>>2]=n[d>>2],n[A+4>>2]=n[d+4>>2],t8e(l,A),I=u}function e8e(o){return o=o|0,(n[(MM()|0)+24>>2]|0)+(o*12|0)|0}function t8e(o,l){o=o|0,l=l|0;var u=0;u=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(u=n[(n[o>>2]|0)+u>>2]|0),op[u&127](o)}function r8e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=_M()|0,o=n8e(u)|0,vn(m,l,d,o,i8e(u,A)|0,A)}function _M(){var o=0,l=0;if(s[7800]|0||(OZ(9936),gr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9936)|0)){o=9936,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));OZ(9936)}return 9936}function n8e(o){return o=o|0,o|0}function i8e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,T=_M()|0,B=T+24|0,l=yr(l,4)|0,n[m>>2]=l,u=T+28|0,A=n[u>>2]|0,A>>>0<(n[T+32>>2]|0)>>>0?(NZ(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(s8e(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function NZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function s8e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=o8e(o)|0,A>>>0>>0)sn(o);else{T=n[o>>2]|0,M=(n[o+8>>2]|0)-T|0,_=M>>2,a8e(d,M>>3>>>0>>1>>>0?_>>>0>>0?B:_:A,(n[m>>2]|0)-T>>3,o+8|0),B=d+8|0,NZ(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,l8e(o,d),c8e(d),I=k;return}}function o8e(o){return o=o|0,536870911}function a8e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Jt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function l8e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function c8e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&Et(o)}function OZ(o){o=o|0,A8e(o)}function u8e(o){o=o|0,f8e(o+24|0)}function f8e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function A8e(o){o=o|0;var l=0;l=en()|0,tn(o,1,23,l,uZ()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function p8e(o,l){o=o|0,l=l|0,g8e(n[(h8e(o)|0)>>2]|0,l)}function h8e(o){return o=o|0,(n[(_M()|0)+24>>2]|0)+(o<<3)|0}function g8e(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,SM(A,l),l=DM(A,l)|0,op[o&127](l),I=u}function d8e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=UM()|0,o=m8e(u)|0,vn(m,l,d,o,y8e(u,A)|0,A)}function UM(){var o=0,l=0;if(s[7808]|0||(MZ(9972),gr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Ur(9972)|0)){o=9972,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));MZ(9972)}return 9972}function m8e(o){return o=o|0,o|0}function y8e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,T=UM()|0,B=T+24|0,l=yr(l,4)|0,n[m>>2]=l,u=T+28|0,A=n[u>>2]|0,A>>>0<(n[T+32>>2]|0)>>>0?(LZ(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(E8e(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function LZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function E8e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=I8e(o)|0,A>>>0>>0)sn(o);else{T=n[o>>2]|0,M=(n[o+8>>2]|0)-T|0,_=M>>2,C8e(d,M>>3>>>0>>1>>>0?_>>>0>>0?B:_:A,(n[m>>2]|0)-T>>3,o+8|0),B=d+8|0,LZ(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,w8e(o,d),B8e(d),I=k;return}}function I8e(o){return o=o|0,536870911}function C8e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Jt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function w8e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function B8e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&Et(o)}function MZ(o){o=o|0,D8e(o)}function v8e(o){o=o|0,S8e(o+24|0)}function S8e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function D8e(o){o=o|0;var l=0;l=en()|0,tn(o,1,9,l,b8e()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function b8e(){return 1348}function P8e(o,l){return o=o|0,l=l|0,k8e(n[(x8e(o)|0)>>2]|0,l)|0}function x8e(o){return o=o|0,(n[(UM()|0)+24>>2]|0)+(o<<3)|0}function k8e(o,l){o=o|0,l=l|0;var u=0,A=0;return u=I,I=I+16|0,A=u,_Z(A,l),l=UZ(A,l)|0,l=UP(hd[o&31](l)|0)|0,I=u,l|0}function _Z(o,l){o=o|0,l=l|0}function UZ(o,l){return o=o|0,l=l|0,Q8e(l)|0}function Q8e(o){return o=o|0,o|0}function T8e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=HM()|0,o=R8e(u)|0,vn(m,l,d,o,F8e(u,A)|0,A)}function HM(){var o=0,l=0;if(s[7816]|0||(jZ(10008),gr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Ur(10008)|0)){o=10008,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));jZ(10008)}return 10008}function R8e(o){return o=o|0,o|0}function F8e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,T=HM()|0,B=T+24|0,l=yr(l,4)|0,n[m>>2]=l,u=T+28|0,A=n[u>>2]|0,A>>>0<(n[T+32>>2]|0)>>>0?(HZ(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(N8e(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function HZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function N8e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=O8e(o)|0,A>>>0>>0)sn(o);else{T=n[o>>2]|0,M=(n[o+8>>2]|0)-T|0,_=M>>2,L8e(d,M>>3>>>0>>1>>>0?_>>>0>>0?B:_:A,(n[m>>2]|0)-T>>3,o+8|0),B=d+8|0,HZ(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,M8e(o,d),_8e(d),I=k;return}}function O8e(o){return o=o|0,536870911}function L8e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Jt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function M8e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function _8e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&Et(o)}function jZ(o){o=o|0,j8e(o)}function U8e(o){o=o|0,H8e(o+24|0)}function H8e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function j8e(o){o=o|0;var l=0;l=en()|0,tn(o,1,15,l,iZ()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function q8e(o){return o=o|0,W8e(n[(G8e(o)|0)>>2]|0)|0}function G8e(o){return o=o|0,(n[(HM()|0)+24>>2]|0)+(o<<3)|0}function W8e(o){return o=o|0,UP(tx[o&7]()|0)|0}function Y8e(){var o=0;return s[7832]|0||(eHe(10052),gr(25,10052,U|0)|0,o=7832,n[o>>2]=1,n[o+4>>2]=0),10052}function V8e(o,l){o=o|0,l=l|0,n[o>>2]=K8e()|0,n[o+4>>2]=J8e()|0,n[o+12>>2]=l,n[o+8>>2]=z8e()|0,n[o+32>>2]=2}function K8e(){return 11709}function J8e(){return 1188}function z8e(){return jP()|0}function Z8e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(qh(A,896)|0)==512?u|0&&(X8e(u),Et(u)):l|0&&(Fy(l),Et(l))}function qh(o,l){return o=o|0,l=l|0,l&o|0}function X8e(o){o=o|0,o=n[o+4>>2]|0,o|0&&Wh(o)}function jP(){var o=0;return s[7824]|0||(n[2511]=$8e()|0,n[2512]=0,o=7824,n[o>>2]=1,n[o+4>>2]=0),10044}function $8e(){return 0}function eHe(o){o=o|0,_h(o)}function tHe(o){o=o|0;var l=0,u=0,A=0,d=0,m=0;l=I,I=I+32|0,u=l+24|0,m=l+16|0,d=l+8|0,A=l,rHe(o,4827),nHe(o,4834,3)|0,iHe(o,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[u>>2]=n[m>>2],n[u+4>>2]=n[m+4>>2],sHe(o,4841,u)|0,n[d>>2]=1,n[d+4>>2]=0,n[u>>2]=n[d>>2],n[u+4>>2]=n[d+4>>2],oHe(o,4871,u)|0,n[A>>2]=10,n[A+4>>2]=0,n[u>>2]=n[A>>2],n[u+4>>2]=n[A+4>>2],aHe(o,4891,u)|0,I=l}function rHe(o,l){o=o|0,l=l|0;var u=0;u=_je()|0,n[o>>2]=u,Uje(u,l),Gh(n[o>>2]|0)}function nHe(o,l,u){return o=o|0,l=l|0,u=u|0,Bje(o,Bn(l)|0,u,0),o|0}function iHe(o,l,u){return o=o|0,l=l|0,u=u|0,lje(o,Bn(l)|0,u,0),o|0}function sHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],qHe(o,l,d),I=A,o|0}function oHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vHe(o,l,d),I=A,o|0}function aHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=n[u+4>>2]|0,n[m>>2]=n[u>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],lHe(o,l,d),I=A,o|0}function lHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],cHe(o,u,d,1),I=A}function cHe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=jM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=uHe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,fHe(m,A)|0,A),I=d}function jM(){var o=0,l=0;if(s[7840]|0||(GZ(10100),gr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Ur(10100)|0)){o=10100,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));GZ(10100)}return 10100}function uHe(o){return o=o|0,0}function fHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=jM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],qZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(AHe(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function qZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function AHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=pHe(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,hHe(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],qZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,gHe(o,k),dHe(k),I=_;return}}function pHe(o){return o=o|0,357913941}function hHe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function gHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function dHe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function GZ(o){o=o|0,EHe(o)}function mHe(o){o=o|0,yHe(o+24|0)}function yHe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function EHe(o){o=o|0;var l=0;l=en()|0,tn(o,2,6,l,IHe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function IHe(){return 1364}function CHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;return A=I,I=I+16|0,d=A+8|0,m=A,B=wHe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],u=BHe(l,d,u)|0,I=A,u|0}function wHe(o){return o=o|0,(n[(jM()|0)+24>>2]|0)+(o*12|0)|0}function BHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;return m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),np(d,u),d=ip(d,u)|0,d=Zz(m_[A&15](o,d)|0)|0,I=m,d|0}function vHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],SHe(o,u,d,0),I=A}function SHe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=qM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=DHe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,bHe(m,A)|0,A),I=d}function qM(){var o=0,l=0;if(s[7848]|0||(YZ(10136),gr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Ur(10136)|0)){o=10136,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));YZ(10136)}return 10136}function DHe(o){return o=o|0,0}function bHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=qM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],WZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(PHe(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function WZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function PHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=xHe(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,kHe(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],WZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,QHe(o,k),THe(k),I=_;return}}function xHe(o){return o=o|0,357913941}function kHe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function QHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function THe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function YZ(o){o=o|0,NHe(o)}function RHe(o){o=o|0,FHe(o+24|0)}function FHe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function NHe(o){o=o|0;var l=0;l=en()|0,tn(o,2,9,l,OHe()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function OHe(){return 1372}function LHe(o,l,u){o=o|0,l=l|0,u=+u;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,d=A+8|0,m=A,B=MHe(o)|0,o=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=o,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_He(l,d,u),I=A}function MHe(o){return o=o|0,(n[(qM()|0)+24>>2]|0)+(o*12|0)|0}function _He(o,l,u){o=o|0,l=l|0,u=+u;var A=0,d=0,m=0,B=Xe;m=I,I=I+16|0,d=m,A=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(A=n[(n[o>>2]|0)+A>>2]|0),UHe(d,u),B=y(HHe(d,u)),o$[A&1](o,B),I=m}function UHe(o,l){o=o|0,l=+l}function HHe(o,l){return o=o|0,l=+l,y(jHe(l))}function jHe(o){return o=+o,y(o)}function qHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,d=A+8|0,m=A,k=n[u>>2]|0,B=n[u+4>>2]|0,u=Bn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],GHe(o,u,d,0),I=A}function GHe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0,T=0,_=0,M=0;d=I,I=I+32|0,m=d+16|0,M=d+8|0,k=d,_=n[u>>2]|0,T=n[u+4>>2]|0,B=n[o>>2]|0,o=GM()|0,n[M>>2]=_,n[M+4>>2]=T,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],u=WHe(m)|0,n[k>>2]=_,n[k+4>>2]=T,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],vn(B,l,o,u,YHe(m,A)|0,A),I=d}function GM(){var o=0,l=0;if(s[7856]|0||(KZ(10172),gr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Ur(10172)|0)){o=10172,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));KZ(10172)}return 10172}function WHe(o){return o=o|0,0}function YHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0;return M=I,I=I+32|0,d=M+24|0,B=M+16|0,k=M,T=M+8|0,m=n[o>>2]|0,A=n[o+4>>2]|0,n[k>>2]=m,n[k+4>>2]=A,G=GM()|0,_=G+24|0,o=yr(l,4)|0,n[T>>2]=o,l=G+28|0,u=n[l>>2]|0,u>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=A,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],VZ(u,d,o),o=(n[l>>2]|0)+12|0,n[l>>2]=o):(VHe(_,k,T),o=n[l>>2]|0),I=M,((o-(n[_>>2]|0)|0)/12|0)+-1|0}function VZ(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=n[l+4>>2]|0,n[o>>2]=n[l>>2],n[o+4>>2]=A,n[o+8>>2]=u}function VHe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;if(_=I,I=I+48|0,A=_+32|0,B=_+24|0,k=_,T=o+4|0,d=(((n[T>>2]|0)-(n[o>>2]|0)|0)/12|0)+1|0,m=KHe(o)|0,m>>>0>>0)sn(o);else{M=n[o>>2]|0,ae=((n[o+8>>2]|0)-M|0)/12|0,G=ae<<1,JHe(k,ae>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[T>>2]|0)-M|0)/12|0,o+8|0),T=k+8|0,m=n[T>>2]|0,d=n[l+4>>2]|0,u=n[u>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[A>>2]=n[B>>2],n[A+4>>2]=n[B+4>>2],VZ(m,A,u),n[T>>2]=(n[T>>2]|0)+12,zHe(o,k),ZHe(k),I=_;return}}function KHe(o){return o=o|0,357913941}function JHe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>357913941)Nt();else{d=Jt(l*12|0)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u*12|0)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l*12|0)}function zHe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function ZHe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~(((A+-12-l|0)>>>0)/12|0)*12|0)),o=n[o>>2]|0,o|0&&Et(o)}function KZ(o){o=o|0,eje(o)}function XHe(o){o=o|0,$He(o+24|0)}function $He(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~(((l+-12-A|0)>>>0)/12|0)*12|0)),Et(u))}function eje(o){o=o|0;var l=0;l=en()|0,tn(o,2,3,l,tje()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function tje(){return 1380}function rje(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;d=I,I=I+16|0,m=d+8|0,B=d,k=nje(o)|0,o=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=o,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],ije(l,m,u,A),I=d}function nje(o){return o=o|0,(n[(GM()|0)+24>>2]|0)+(o*12|0)|0}function ije(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;k=I,I=I+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,o=o+(l>>1)|0,l&1&&(d=n[(n[o>>2]|0)+d>>2]|0),np(m,u),m=ip(m,u)|0,sje(B,A),B=oje(B,A)|0,F2[d&15](o,m,B),I=k}function sje(o,l){o=o|0,l=l|0}function oje(o,l){return o=o|0,l=l|0,aje(l)|0}function aje(o){return o=o|0,(o|0)!=0|0}function lje(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=WM()|0,o=cje(u)|0,vn(m,l,d,o,uje(u,A)|0,A)}function WM(){var o=0,l=0;if(s[7864]|0||(zZ(10208),gr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Ur(10208)|0)){o=10208,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));zZ(10208)}return 10208}function cje(o){return o=o|0,o|0}function uje(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,T=WM()|0,B=T+24|0,l=yr(l,4)|0,n[m>>2]=l,u=T+28|0,A=n[u>>2]|0,A>>>0<(n[T+32>>2]|0)>>>0?(JZ(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(fje(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function JZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function fje(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=Aje(o)|0,A>>>0>>0)sn(o);else{T=n[o>>2]|0,M=(n[o+8>>2]|0)-T|0,_=M>>2,pje(d,M>>3>>>0>>1>>>0?_>>>0>>0?B:_:A,(n[m>>2]|0)-T>>3,o+8|0),B=d+8|0,JZ(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,hje(o,d),gje(d),I=k;return}}function Aje(o){return o=o|0,536870911}function pje(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Jt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function hje(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function gje(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&Et(o)}function zZ(o){o=o|0,yje(o)}function dje(o){o=o|0,mje(o+24|0)}function mje(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function yje(o){o=o|0;var l=0;l=en()|0,tn(o,1,24,l,Eje()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function Eje(){return 1392}function Ije(o,l){o=o|0,l=l|0,wje(n[(Cje(o)|0)>>2]|0,l)}function Cje(o){return o=o|0,(n[(WM()|0)+24>>2]|0)+(o<<3)|0}function wje(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,_Z(A,l),l=UZ(A,l)|0,op[o&127](l),I=u}function Bje(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=YM()|0,o=vje(u)|0,vn(m,l,d,o,Sje(u,A)|0,A)}function YM(){var o=0,l=0;if(s[7872]|0||(XZ(10244),gr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Ur(10244)|0)){o=10244,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));XZ(10244)}return 10244}function vje(o){return o=o|0,o|0}function Sje(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,T=YM()|0,B=T+24|0,l=yr(l,4)|0,n[m>>2]=l,u=T+28|0,A=n[u>>2]|0,A>>>0<(n[T+32>>2]|0)>>>0?(ZZ(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(Dje(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function ZZ(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function Dje(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=bje(o)|0,A>>>0>>0)sn(o);else{T=n[o>>2]|0,M=(n[o+8>>2]|0)-T|0,_=M>>2,Pje(d,M>>3>>>0>>1>>>0?_>>>0>>0?B:_:A,(n[m>>2]|0)-T>>3,o+8|0),B=d+8|0,ZZ(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,xje(o,d),kje(d),I=k;return}}function bje(o){return o=o|0,536870911}function Pje(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Jt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function xje(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function kje(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&Et(o)}function XZ(o){o=o|0,Rje(o)}function Qje(o){o=o|0,Tje(o+24|0)}function Tje(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function Rje(o){o=o|0;var l=0;l=en()|0,tn(o,1,16,l,Fje()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function Fje(){return 1400}function Nje(o){return o=o|0,Lje(n[(Oje(o)|0)>>2]|0)|0}function Oje(o){return o=o|0,(n[(YM()|0)+24>>2]|0)+(o<<3)|0}function Lje(o){return o=o|0,Mje(tx[o&7]()|0)|0}function Mje(o){return o=o|0,o|0}function _je(){var o=0;return s[7880]|0||(Yje(10280),gr(25,10280,U|0)|0,o=7880,n[o>>2]=1,n[o+4>>2]=0),10280}function Uje(o,l){o=o|0,l=l|0,n[o>>2]=Hje()|0,n[o+4>>2]=jje()|0,n[o+12>>2]=l,n[o+8>>2]=qje()|0,n[o+32>>2]=4}function Hje(){return 11711}function jje(){return 1356}function qje(){return jP()|0}function Gje(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(qh(A,896)|0)==512?u|0&&(Wje(u),Et(u)):l|0&&(Kg(l),Et(l))}function Wje(o){o=o|0,o=n[o+4>>2]|0,o|0&&Wh(o)}function Yje(o){o=o|0,_h(o)}function Vje(o){o=o|0,Kje(o,4920),Jje(o)|0,zje(o)|0}function Kje(o,l){o=o|0,l=l|0;var u=0;u=IZ()|0,n[o>>2]=u,m6e(u,l),Gh(n[o>>2]|0)}function Jje(o){o=o|0;var l=0;return l=n[o>>2]|0,ld(l,a6e()|0),o|0}function zje(o){o=o|0;var l=0;return l=n[o>>2]|0,ld(l,Zje()|0),o|0}function Zje(){var o=0;return s[7888]|0||($Z(10328),gr(53,10328,U|0)|0,o=7888,n[o>>2]=1,n[o+4>>2]=0),Ur(10328)|0||$Z(10328),10328}function ld(o,l){o=o|0,l=l|0,vn(o,0,l,0,0,0)}function $Z(o){o=o|0,e6e(o),cd(o,10)}function Xje(o){o=o|0,$je(o+24|0)}function $je(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function e6e(o){o=o|0;var l=0;l=en()|0,tn(o,5,1,l,i6e()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function t6e(o,l,u){o=o|0,l=l|0,u=+u,r6e(o,l,u)}function cd(o,l){o=o|0,l=l|0,n[o+20>>2]=l}function r6e(o,l,u){o=o|0,l=l|0,u=+u;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+16|0,m=A+8|0,k=A+13|0,d=A,B=A+12|0,np(k,l),n[m>>2]=ip(k,l)|0,Tf(B,u),E[d>>3]=+Rf(B,u),n6e(o,m,d),I=A}function n6e(o,l,u){o=o|0,l=l|0,u=u|0,Rl(o+8|0,n[l>>2]|0,+E[u>>3]),s[o+24>>0]=1}function i6e(){return 1404}function s6e(o,l){return o=o|0,l=+l,o6e(o,l)|0}function o6e(o,l){o=o|0,l=+l;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return A=I,I=I+16|0,m=A+4|0,B=A+8|0,k=A,d=Fl(8)|0,u=d,T=Jt(16)|0,np(m,o),o=ip(m,o)|0,Tf(B,l),Rl(T,o,+Rf(B,l)),B=u+4|0,n[B>>2]=T,o=Jt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],QM(o,B,m),n[d>>2]=o,I=A,u|0}function a6e(){var o=0;return s[7896]|0||(eX(10364),gr(54,10364,U|0)|0,o=7896,n[o>>2]=1,n[o+4>>2]=0),Ur(10364)|0||eX(10364),10364}function eX(o){o=o|0,u6e(o),cd(o,55)}function l6e(o){o=o|0,c6e(o+24|0)}function c6e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function u6e(o){o=o|0;var l=0;l=en()|0,tn(o,5,4,l,h6e()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function f6e(o){o=o|0,A6e(o)}function A6e(o){o=o|0,p6e(o)}function p6e(o){o=o|0,tX(o+8|0),s[o+24>>0]=1}function tX(o){o=o|0,n[o>>2]=0,E[o+8>>3]=0}function h6e(){return 1424}function g6e(){return d6e()|0}function d6e(){var o=0,l=0,u=0,A=0,d=0,m=0,B=0;return l=I,I=I+16|0,d=l+4|0,B=l,u=Fl(8)|0,o=u,A=Jt(16)|0,tX(A),m=o+4|0,n[m>>2]=A,A=Jt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],QM(A,m,d),n[u>>2]=A,I=l,o|0}function m6e(o,l){o=o|0,l=l|0,n[o>>2]=y6e()|0,n[o+4>>2]=E6e()|0,n[o+12>>2]=l,n[o+8>>2]=I6e()|0,n[o+32>>2]=5}function y6e(){return 11710}function E6e(){return 1416}function I6e(){return qP()|0}function C6e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(qh(A,896)|0)==512?u|0&&(w6e(u),Et(u)):l|0&&Et(l)}function w6e(o){o=o|0,o=n[o+4>>2]|0,o|0&&Wh(o)}function qP(){var o=0;return s[7904]|0||(n[2600]=B6e()|0,n[2601]=0,o=7904,n[o>>2]=1,n[o+4>>2]=0),10400}function B6e(){return n[357]|0}function v6e(o){o=o|0,S6e(o,4926),D6e(o)|0}function S6e(o,l){o=o|0,l=l|0;var u=0;u=qz()|0,n[o>>2]=u,L6e(u,l),Gh(n[o>>2]|0)}function D6e(o){o=o|0;var l=0;return l=n[o>>2]|0,ld(l,b6e()|0),o|0}function b6e(){var o=0;return s[7912]|0||(rX(10412),gr(56,10412,U|0)|0,o=7912,n[o>>2]=1,n[o+4>>2]=0),Ur(10412)|0||rX(10412),10412}function rX(o){o=o|0,k6e(o),cd(o,57)}function P6e(o){o=o|0,x6e(o+24|0)}function x6e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function k6e(o){o=o|0;var l=0;l=en()|0,tn(o,5,5,l,F6e()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function Q6e(o){o=o|0,T6e(o)}function T6e(o){o=o|0,R6e(o)}function R6e(o){o=o|0;var l=0,u=0;l=o+8|0,u=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(u|0));s[o+56>>0]=1}function F6e(){return 1432}function N6e(){return O6e()|0}function O6e(){var o=0,l=0,u=0,A=0,d=0,m=0,B=0,k=0;B=I,I=I+16|0,o=B+4|0,l=B,u=Fl(8)|0,A=u,d=Jt(48)|0,m=d,k=m+48|0;do n[m>>2]=0,m=m+4|0;while((m|0)<(k|0));return m=A+4|0,n[m>>2]=d,k=Jt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[o>>2]=n[l>>2],Gz(k,m,o),n[u>>2]=k,I=B,A|0}function L6e(o,l){o=o|0,l=l|0,n[o>>2]=M6e()|0,n[o+4>>2]=_6e()|0,n[o+12>>2]=l,n[o+8>>2]=U6e()|0,n[o+32>>2]=6}function M6e(){return 11704}function _6e(){return 1436}function U6e(){return qP()|0}function H6e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(qh(A,896)|0)==512?u|0&&(j6e(u),Et(u)):l|0&&Et(l)}function j6e(o){o=o|0,o=n[o+4>>2]|0,o|0&&Wh(o)}function q6e(o){o=o|0,G6e(o,4933),W6e(o)|0,Y6e(o)|0}function G6e(o,l){o=o|0,l=l|0;var u=0;u=dqe()|0,n[o>>2]=u,mqe(u,l),Gh(n[o>>2]|0)}function W6e(o){o=o|0;var l=0;return l=n[o>>2]|0,ld(l,oqe()|0),o|0}function Y6e(o){o=o|0;var l=0;return l=n[o>>2]|0,ld(l,V6e()|0),o|0}function V6e(){var o=0;return s[7920]|0||(nX(10452),gr(58,10452,U|0)|0,o=7920,n[o>>2]=1,n[o+4>>2]=0),Ur(10452)|0||nX(10452),10452}function nX(o){o=o|0,z6e(o),cd(o,1)}function K6e(o){o=o|0,J6e(o+24|0)}function J6e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function z6e(o){o=o|0;var l=0;l=en()|0,tn(o,5,1,l,eqe()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function Z6e(o,l,u){o=o|0,l=+l,u=+u,X6e(o,l,u)}function X6e(o,l,u){o=o|0,l=+l,u=+u;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+32|0,m=A+8|0,k=A+17|0,d=A,B=A+16|0,Tf(k,l),E[m>>3]=+Rf(k,l),Tf(B,u),E[d>>3]=+Rf(B,u),$6e(o,m,d),I=A}function $6e(o,l,u){o=o|0,l=l|0,u=u|0,iX(o+8|0,+E[l>>3],+E[u>>3]),s[o+24>>0]=1}function iX(o,l,u){o=o|0,l=+l,u=+u,E[o>>3]=l,E[o+8>>3]=u}function eqe(){return 1472}function tqe(o,l){return o=+o,l=+l,rqe(o,l)|0}function rqe(o,l){o=+o,l=+l;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return A=I,I=I+16|0,B=A+4|0,k=A+8|0,T=A,d=Fl(8)|0,u=d,m=Jt(16)|0,Tf(B,o),o=+Rf(B,o),Tf(k,l),iX(m,o,+Rf(k,l)),k=u+4|0,n[k>>2]=m,m=Jt(8)|0,k=n[k>>2]|0,n[T>>2]=0,n[B>>2]=n[T>>2],sX(m,k,B),n[d>>2]=m,I=A,u|0}function sX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,u=Jt(16)|0,n[u+4>>2]=0,n[u+8>>2]=0,n[u>>2]=1452,n[u+12>>2]=l,n[o+4>>2]=u}function nqe(o){o=o|0,Zy(o),Et(o)}function iqe(o){o=o|0,o=n[o+12>>2]|0,o|0&&Et(o)}function sqe(o){o=o|0,Et(o)}function oqe(){var o=0;return s[7928]|0||(oX(10488),gr(59,10488,U|0)|0,o=7928,n[o>>2]=1,n[o+4>>2]=0),Ur(10488)|0||oX(10488),10488}function oX(o){o=o|0,cqe(o),cd(o,60)}function aqe(o){o=o|0,lqe(o+24|0)}function lqe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function cqe(o){o=o|0;var l=0;l=en()|0,tn(o,5,6,l,pqe()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function uqe(o){o=o|0,fqe(o)}function fqe(o){o=o|0,Aqe(o)}function Aqe(o){o=o|0,aX(o+8|0),s[o+24>>0]=1}function aX(o){o=o|0,n[o>>2]=0,n[o+4>>2]=0,n[o+8>>2]=0,n[o+12>>2]=0}function pqe(){return 1492}function hqe(){return gqe()|0}function gqe(){var o=0,l=0,u=0,A=0,d=0,m=0,B=0;return l=I,I=I+16|0,d=l+4|0,B=l,u=Fl(8)|0,o=u,A=Jt(16)|0,aX(A),m=o+4|0,n[m>>2]=A,A=Jt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],sX(A,m,d),n[u>>2]=A,I=l,o|0}function dqe(){var o=0;return s[7936]|0||(Bqe(10524),gr(25,10524,U|0)|0,o=7936,n[o>>2]=1,n[o+4>>2]=0),10524}function mqe(o,l){o=o|0,l=l|0,n[o>>2]=yqe()|0,n[o+4>>2]=Eqe()|0,n[o+12>>2]=l,n[o+8>>2]=Iqe()|0,n[o+32>>2]=7}function yqe(){return 11700}function Eqe(){return 1484}function Iqe(){return qP()|0}function Cqe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(qh(A,896)|0)==512?u|0&&(wqe(u),Et(u)):l|0&&Et(l)}function wqe(o){o=o|0,o=n[o+4>>2]|0,o|0&&Wh(o)}function Bqe(o){o=o|0,_h(o)}function vqe(o,l,u){o=o|0,l=l|0,u=u|0,o=Bn(l)|0,l=Sqe(u)|0,u=Dqe(u,0)|0,rGe(o,l,u,VM()|0,0)}function Sqe(o){return o=o|0,o|0}function Dqe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,T=VM()|0,B=T+24|0,l=yr(l,4)|0,n[m>>2]=l,u=T+28|0,A=n[u>>2]|0,A>>>0<(n[T+32>>2]|0)>>>0?(cX(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(Rqe(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function VM(){var o=0,l=0;if(s[7944]|0||(lX(10568),gr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Ur(10568)|0)){o=10568,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));lX(10568)}return 10568}function lX(o){o=o|0,xqe(o)}function bqe(o){o=o|0,Pqe(o+24|0)}function Pqe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function xqe(o){o=o|0;var l=0;l=en()|0,tn(o,1,17,l,aZ()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function kqe(o){return o=o|0,Tqe(n[(Qqe(o)|0)>>2]|0)|0}function Qqe(o){return o=o|0,(n[(VM()|0)+24>>2]|0)+(o<<3)|0}function Tqe(o){return o=o|0,HP(tx[o&7]()|0)|0}function cX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function Rqe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=Fqe(o)|0,A>>>0>>0)sn(o);else{T=n[o>>2]|0,M=(n[o+8>>2]|0)-T|0,_=M>>2,Nqe(d,M>>3>>>0>>1>>>0?_>>>0>>0?B:_:A,(n[m>>2]|0)-T>>3,o+8|0),B=d+8|0,cX(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,Oqe(o,d),Lqe(d),I=k;return}}function Fqe(o){return o=o|0,536870911}function Nqe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Jt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function Oqe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function Lqe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&Et(o)}function Mqe(){_qe()}function _qe(){Uqe(10604)}function Uqe(o){o=o|0,Hqe(o,4955)}function Hqe(o,l){o=o|0,l=l|0;var u=0;u=jqe()|0,n[o>>2]=u,qqe(u,l),Gh(n[o>>2]|0)}function jqe(){var o=0;return s[7952]|0||(Xqe(10612),gr(25,10612,U|0)|0,o=7952,n[o>>2]=1,n[o+4>>2]=0),10612}function qqe(o,l){o=o|0,l=l|0,n[o>>2]=Vqe()|0,n[o+4>>2]=Kqe()|0,n[o+12>>2]=l,n[o+8>>2]=Jqe()|0,n[o+32>>2]=8}function Gh(o){o=o|0;var l=0,u=0;l=I,I=I+16|0,u=l,Yy()|0,n[u>>2]=o,Gqe(10608,u),I=l}function Yy(){return s[11714]|0||(n[2652]=0,gr(62,10608,U|0)|0,s[11714]=1),10608}function Gqe(o,l){o=o|0,l=l|0;var u=0;u=Jt(8)|0,n[u+4>>2]=n[l>>2],n[u>>2]=n[o>>2],n[o>>2]=u}function Wqe(o){o=o|0,Yqe(o)}function Yqe(o){o=o|0;var l=0,u=0;if(l=n[o>>2]|0,l|0)do u=l,l=n[l>>2]|0,Et(u);while(l|0);n[o>>2]=0}function Vqe(){return 11715}function Kqe(){return 1496}function Jqe(){return jP()|0}function zqe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(qh(A,896)|0)==512?u|0&&(Zqe(u),Et(u)):l|0&&Et(l)}function Zqe(o){o=o|0,o=n[o+4>>2]|0,o|0&&Wh(o)}function Xqe(o){o=o|0,_h(o)}function $qe(o,l){o=o|0,l=l|0;var u=0,A=0;Yy()|0,u=n[2652]|0;e:do if(u|0){for(;A=n[u+4>>2]|0,!(A|0&&!(GX(KM(A)|0,o)|0));)if(u=n[u>>2]|0,!u)break e;eGe(A,l)}while(!1)}function KM(o){return o=o|0,n[o+12>>2]|0}function eGe(o,l){o=o|0,l=l|0;var u=0;o=o+36|0,u=n[o>>2]|0,u|0&&(Df(u),Et(u)),u=Jt(4)|0,FP(u,l),n[o>>2]=u}function JM(){return s[11716]|0||(n[2664]=0,gr(63,10656,U|0)|0,s[11716]=1),10656}function uX(){var o=0;return s[11717]|0?o=n[2665]|0:(tGe(),n[2665]=1504,s[11717]=1,o=1504),o|0}function tGe(){s[11740]|0||(s[11718]=yr(yr(8,0)|0,0)|0,s[11719]=yr(yr(0,0)|0,0)|0,s[11720]=yr(yr(0,16)|0,0)|0,s[11721]=yr(yr(8,0)|0,0)|0,s[11722]=yr(yr(0,0)|0,0)|0,s[11723]=yr(yr(8,0)|0,0)|0,s[11724]=yr(yr(0,0)|0,0)|0,s[11725]=yr(yr(8,0)|0,0)|0,s[11726]=yr(yr(0,0)|0,0)|0,s[11727]=yr(yr(8,0)|0,0)|0,s[11728]=yr(yr(0,0)|0,0)|0,s[11729]=yr(yr(0,0)|0,32)|0,s[11730]=yr(yr(0,0)|0,32)|0,s[11740]=1)}function fX(){return 1572}function rGe(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,T=0,_=0,M=0;m=I,I=I+32|0,M=m+16|0,_=m+12|0,T=m+8|0,k=m+4|0,B=m,n[M>>2]=o,n[_>>2]=l,n[T>>2]=u,n[k>>2]=A,n[B>>2]=d,JM()|0,nGe(10656,M,_,T,k,B),I=m}function nGe(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0;var B=0;B=Jt(24)|0,Uz(B+4|0,n[l>>2]|0,n[u>>2]|0,n[A>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[o>>2],n[o>>2]=B}function AX(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0,We=0,Le=0,Qe=0,tt=0,Ze=0,ct=0;if(ct=I,I=I+32|0,Le=ct+20|0,Qe=ct+8|0,tt=ct+4|0,Ze=ct,l=n[l>>2]|0,l|0){We=Le+4|0,T=Le+8|0,_=Qe+4|0,M=Qe+8|0,G=Qe+8|0,ae=Le+8|0;do{if(B=l+4|0,k=zM(B)|0,k|0){if(d=P2(k)|0,n[Le>>2]=0,n[We>>2]=0,n[T>>2]=0,A=(x2(k)|0)+1|0,iGe(Le,A),A|0)for(;A=A+-1|0,xu(Qe,n[d>>2]|0),m=n[We>>2]|0,m>>>0<(n[ae>>2]|0)>>>0?(n[m>>2]=n[Qe>>2],n[We>>2]=(n[We>>2]|0)+4):ZM(Le,Qe),A;)d=d+4|0;A=k2(k)|0,n[Qe>>2]=0,n[_>>2]=0,n[M>>2]=0;e:do if(n[A>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?sGe(Qe,A):(n[d>>2]=n[A>>2],n[_>>2]=(n[_>>2]|0)+4),A=A+4|0,!(n[A>>2]|0))break e;d=n[_>>2]|0,m=n[G>>2]|0}while(!1);n[tt>>2]=GP(B)|0,n[Ze>>2]=Ur(k)|0,oGe(u,o,tt,Ze,Le,Qe),XM(Qe),sp(Le)}l=n[l>>2]|0}while(l|0)}I=ct}function zM(o){return o=o|0,n[o+12>>2]|0}function P2(o){return o=o|0,n[o+12>>2]|0}function x2(o){return o=o|0,n[o+16>>2]|0}function iGe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;d=I,I=I+32|0,u=d,A=n[o>>2]|0,(n[o+8>>2]|0)-A>>2>>>0>>0&&(IX(u,l,(n[o+4>>2]|0)-A>>2,o+8|0),CX(o,u),wX(u)),I=d}function ZM(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0;if(B=I,I=I+32|0,u=B,A=o+4|0,d=((n[A>>2]|0)-(n[o>>2]|0)>>2)+1|0,m=EX(o)|0,m>>>0>>0)sn(o);else{k=n[o>>2]|0,_=(n[o+8>>2]|0)-k|0,T=_>>1,IX(u,_>>2>>>0>>1>>>0?T>>>0>>0?d:T:m,(n[A>>2]|0)-k>>2,o+8|0),m=u+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,CX(o,u),wX(u),I=B;return}}function k2(o){return o=o|0,n[o+8>>2]|0}function sGe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0;if(B=I,I=I+32|0,u=B,A=o+4|0,d=((n[A>>2]|0)-(n[o>>2]|0)>>2)+1|0,m=yX(o)|0,m>>>0>>0)sn(o);else{k=n[o>>2]|0,_=(n[o+8>>2]|0)-k|0,T=_>>1,SGe(u,_>>2>>>0>>1>>>0?T>>>0>>0?d:T:m,(n[A>>2]|0)-k>>2,o+8|0),m=u+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,DGe(o,u),bGe(u),I=B;return}}function GP(o){return o=o|0,n[o>>2]|0}function oGe(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,aGe(o,l,u,A,d,m)}function XM(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-4-A|0)>>>2)<<2)),Et(u))}function sp(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-4-A|0)>>>2)<<2)),Et(u))}function aGe(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0;var B=0,k=0,T=0,_=0,M=0,G=0;B=I,I=I+48|0,M=B+40|0,k=B+32|0,G=B+24|0,T=B+12|0,_=B,Nl(k),o=Ms(o)|0,n[G>>2]=n[l>>2],u=n[u>>2]|0,A=n[A>>2]|0,$M(T,d),lGe(_,m),n[M>>2]=n[G>>2],cGe(o,M,u,A,T,_),XM(_),sp(T),Ol(k),I=B}function $M(o,l){o=o|0,l=l|0;var u=0,A=0;n[o>>2]=0,n[o+4>>2]=0,n[o+8>>2]=0,u=l+4|0,A=(n[u>>2]|0)-(n[l>>2]|0)>>2,A|0&&(BGe(o,A),vGe(o,n[l>>2]|0,n[u>>2]|0,A))}function lGe(o,l){o=o|0,l=l|0;var u=0,A=0;n[o>>2]=0,n[o+4>>2]=0,n[o+8>>2]=0,u=l+4|0,A=(n[u>>2]|0)-(n[l>>2]|0)>>2,A|0&&(CGe(o,A),wGe(o,n[l>>2]|0,n[u>>2]|0,A))}function cGe(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0;var B=0,k=0,T=0,_=0,M=0,G=0;B=I,I=I+32|0,M=B+28|0,G=B+24|0,k=B+12|0,T=B,_=ma(uGe()|0)|0,n[G>>2]=n[l>>2],n[M>>2]=n[G>>2],l=ud(M)|0,u=pX(u)|0,A=e_(A)|0,n[k>>2]=n[d>>2],M=d+4|0,n[k+4>>2]=n[M>>2],G=d+8|0,n[k+8>>2]=n[G>>2],n[G>>2]=0,n[M>>2]=0,n[d>>2]=0,d=t_(k)|0,n[T>>2]=n[m>>2],M=m+4|0,n[T+4>>2]=n[M>>2],G=m+8|0,n[T+8>>2]=n[G>>2],n[G>>2]=0,n[M>>2]=0,n[m>>2]=0,uu(0,_|0,o|0,l|0,u|0,A|0,d|0,fGe(T)|0)|0,XM(T),sp(k),I=B}function uGe(){var o=0;return s[7968]|0||(EGe(10708),o=7968,n[o>>2]=1,n[o+4>>2]=0),10708}function ud(o){return o=o|0,gX(o)|0}function pX(o){return o=o|0,hX(o)|0}function e_(o){return o=o|0,HP(o)|0}function t_(o){return o=o|0,pGe(o)|0}function fGe(o){return o=o|0,AGe(o)|0}function AGe(o){o=o|0;var l=0,u=0,A=0;if(A=(n[o+4>>2]|0)-(n[o>>2]|0)|0,u=A>>2,A=Fl(A+4|0)|0,n[A>>2]=u,u|0){l=0;do n[A+4+(l<<2)>>2]=hX(n[(n[o>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(u|0))}return A|0}function hX(o){return o=o|0,o|0}function pGe(o){o=o|0;var l=0,u=0,A=0;if(A=(n[o+4>>2]|0)-(n[o>>2]|0)|0,u=A>>2,A=Fl(A+4|0)|0,n[A>>2]=u,u|0){l=0;do n[A+4+(l<<2)>>2]=gX((n[o>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(u|0))}return A|0}function gX(o){o=o|0;var l=0,u=0,A=0,d=0;return d=I,I=I+32|0,l=d+12|0,u=d,A=pM(dX()|0)|0,A?(hM(l,A),gM(u,l),JWe(o,u),o=dM(l)|0):o=hGe(o)|0,I=d,o|0}function dX(){var o=0;return s[7960]|0||(yGe(10664),gr(25,10664,U|0)|0,o=7960,n[o>>2]=1,n[o+4>>2]=0),10664}function hGe(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0;return u=I,I=I+16|0,d=u+4|0,B=u,A=Fl(8)|0,l=A,k=Jt(4)|0,n[k>>2]=n[o>>2],m=l+4|0,n[m>>2]=k,o=Jt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],mX(o,m,d),n[A>>2]=o,I=u,l|0}function mX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,u=Jt(16)|0,n[u+4>>2]=0,n[u+8>>2]=0,n[u>>2]=1656,n[u+12>>2]=l,n[o+4>>2]=u}function gGe(o){o=o|0,Zy(o),Et(o)}function dGe(o){o=o|0,o=n[o+12>>2]|0,o|0&&Et(o)}function mGe(o){o=o|0,Et(o)}function yGe(o){o=o|0,_h(o)}function EGe(o){o=o|0,Ro(o,IGe()|0,5)}function IGe(){return 1676}function CGe(o,l){o=o|0,l=l|0;var u=0;if((yX(o)|0)>>>0>>0&&sn(o),l>>>0>1073741823)Nt();else{u=Jt(l<<2)|0,n[o+4>>2]=u,n[o>>2]=u,n[o+8>>2]=u+(l<<2);return}}function wGe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,A=o+4|0,o=u-l|0,(o|0)>0&&(Qr(n[A>>2]|0,l|0,o|0)|0,n[A>>2]=(n[A>>2]|0)+(o>>>2<<2))}function yX(o){return o=o|0,1073741823}function BGe(o,l){o=o|0,l=l|0;var u=0;if((EX(o)|0)>>>0>>0&&sn(o),l>>>0>1073741823)Nt();else{u=Jt(l<<2)|0,n[o+4>>2]=u,n[o>>2]=u,n[o+8>>2]=u+(l<<2);return}}function vGe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,A=o+4|0,o=u-l|0,(o|0)>0&&(Qr(n[A>>2]|0,l|0,o|0)|0,n[A>>2]=(n[A>>2]|0)+(o>>>2<<2))}function EX(o){return o=o|0,1073741823}function SGe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>1073741823)Nt();else{d=Jt(l<<2)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<2)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<2)}function DGe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function bGe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-4-l|0)>>>2)<<2)),o=n[o>>2]|0,o|0&&Et(o)}function IX(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>1073741823)Nt();else{d=Jt(l<<2)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<2)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<2)}function CX(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function wX(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-4-l|0)>>>2)<<2)),o=n[o>>2]|0,o|0&&Et(o)}function PGe(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0,We=0,Le=0,Qe=0;if(Qe=I,I=I+32|0,M=Qe+20|0,G=Qe+12|0,_=Qe+16|0,ae=Qe+4|0,We=Qe,Le=Qe+8|0,k=uX()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(T=n[k+8>>2]|0,k=n[k+4>>2]|0;xu(M,B),xGe(o,M,k,T),m=m+4|0,B=n[m>>2]|0,B;)T=T+1|0,k=k+1|0;if(m=fX()|0,B=n[m>>2]|0,B|0)do xu(M,B),n[G>>2]=n[m+4>>2],kGe(l,M,G),m=m+8|0,B=n[m>>2]|0;while(B|0);if(m=n[(Yy()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,xu(M,n[(Vy(l)|0)>>2]|0),n[G>>2]=KM(l)|0,QGe(u,M,G),m=n[m>>2]|0;while(m|0);if(xu(_,0),m=JM()|0,n[M>>2]=n[_>>2],AX(M,m,d),m=n[(Yy()|0)>>2]|0,m|0){o=M+4|0,l=M+8|0,u=M+8|0;do{if(T=n[m+4>>2]|0,xu(G,n[(Vy(T)|0)>>2]|0),TGe(ae,BX(T)|0),B=n[ae>>2]|0,B|0){n[M>>2]=0,n[o>>2]=0,n[l>>2]=0;do xu(We,n[(Vy(n[B+4>>2]|0)|0)>>2]|0),k=n[o>>2]|0,k>>>0<(n[u>>2]|0)>>>0?(n[k>>2]=n[We>>2],n[o>>2]=(n[o>>2]|0)+4):ZM(M,We),B=n[B>>2]|0;while(B|0);RGe(A,G,M),sp(M)}n[Le>>2]=n[G>>2],_=vX(T)|0,n[M>>2]=n[Le>>2],AX(M,_,d),Yz(ae),m=n[m>>2]|0}while(m|0)}I=Qe}function xGe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,WGe(o,l,u,A)}function kGe(o,l,u){o=o|0,l=l|0,u=u|0,GGe(o,l,u)}function Vy(o){return o=o|0,o|0}function QGe(o,l,u){o=o|0,l=l|0,u=u|0,UGe(o,l,u)}function BX(o){return o=o|0,o+16|0}function TGe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;if(m=I,I=I+16|0,d=m+8|0,u=m,n[o>>2]=0,A=n[l>>2]|0,n[d>>2]=A,n[u>>2]=o,u=_Ge(u)|0,A|0){if(A=Jt(12)|0,B=(SX(d)|0)+4|0,o=n[B+4>>2]|0,l=A+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=o,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)o=A;else for(l=A;o=Jt(12)|0,T=(SX(d)|0)+4|0,k=n[T+4>>2]|0,B=o+4|0,n[B>>2]=n[T>>2],n[B+4>>2]=k,n[l>>2]=o,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=o;n[o>>2]=n[u>>2],n[u>>2]=A}I=m}function RGe(o,l,u){o=o|0,l=l|0,u=u|0,FGe(o,l,u)}function vX(o){return o=o|0,o+24|0}function FGe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+32|0,B=A+24|0,d=A+16|0,k=A+12|0,m=A,Nl(d),o=Ms(o)|0,n[k>>2]=n[l>>2],$M(m,u),n[B>>2]=n[k>>2],NGe(o,B,m),sp(m),Ol(d),I=A}function NGe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=I,I=I+32|0,B=A+16|0,k=A+12|0,d=A,m=ma(OGe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=ud(B)|0,n[d>>2]=n[u>>2],B=u+4|0,n[d+4>>2]=n[B>>2],k=u+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[u>>2]=0,Fs(0,m|0,o|0,l|0,t_(d)|0)|0,sp(d),I=A}function OGe(){var o=0;return s[7976]|0||(LGe(10720),o=7976,n[o>>2]=1,n[o+4>>2]=0),10720}function LGe(o){o=o|0,Ro(o,MGe()|0,2)}function MGe(){return 1732}function _Ge(o){return o=o|0,n[o>>2]|0}function SX(o){return o=o|0,n[o>>2]|0}function UGe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+32|0,m=A+16|0,d=A+8|0,B=A,Nl(d),o=Ms(o)|0,n[B>>2]=n[l>>2],u=n[u>>2]|0,n[m>>2]=n[B>>2],DX(o,m,u),Ol(d),I=A}function DX(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+16|0,m=A+4|0,B=A,d=ma(HGe()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=ud(m)|0,Fs(0,d|0,o|0,l|0,pX(u)|0)|0,I=A}function HGe(){var o=0;return s[7984]|0||(jGe(10732),o=7984,n[o>>2]=1,n[o+4>>2]=0),10732}function jGe(o){o=o|0,Ro(o,qGe()|0,2)}function qGe(){return 1744}function GGe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;A=I,I=I+32|0,m=A+16|0,d=A+8|0,B=A,Nl(d),o=Ms(o)|0,n[B>>2]=n[l>>2],u=n[u>>2]|0,n[m>>2]=n[B>>2],DX(o,m,u),Ol(d),I=A}function WGe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;d=I,I=I+32|0,B=d+16|0,m=d+8|0,k=d,Nl(m),o=Ms(o)|0,n[k>>2]=n[l>>2],u=s[u>>0]|0,A=s[A>>0]|0,n[B>>2]=n[k>>2],YGe(o,B,u,A),Ol(m),I=d}function YGe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;d=I,I=I+16|0,B=d+4|0,k=d,m=ma(VGe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=ud(B)|0,u=Ky(u)|0,Mi(0,m|0,o|0,l|0,u|0,Ky(A)|0)|0,I=d}function VGe(){var o=0;return s[7992]|0||(JGe(10744),o=7992,n[o>>2]=1,n[o+4>>2]=0),10744}function Ky(o){return o=o|0,KGe(o)|0}function KGe(o){return o=o|0,o&255|0}function JGe(o){o=o|0,Ro(o,zGe()|0,3)}function zGe(){return 1756}function ZGe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;switch(ae=I,I=I+32|0,k=ae+8|0,T=ae+4|0,_=ae+20|0,M=ae,IM(o,0),A=KWe(l)|0,n[k>>2]=0,G=k+4|0,n[G>>2]=0,n[k+8>>2]=0,A<<24>>24){case 0:{s[_>>0]=0,XGe(T,u,_),WP(o,T)|0,bf(T);break}case 8:{G=a_(l)|0,s[_>>0]=8,xu(M,n[G+4>>2]|0),$Ge(T,u,_,M,G+8|0),WP(o,T)|0,bf(T);break}case 9:{if(m=a_(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,xu(T,n[d>>2]|0),A=n[G>>2]|0,A>>>0<(n[B>>2]|0)>>>0?(n[A>>2]=n[T>>2],n[G>>2]=(n[G>>2]|0)+4):ZM(k,T),l;)d=d+4|0;s[_>>0]=9,xu(M,n[m+8>>2]|0),e5e(T,u,_,M,k),WP(o,T)|0,bf(T);break}default:G=a_(l)|0,s[_>>0]=A,xu(M,n[G+4>>2]|0),t5e(T,u,_,M),WP(o,T)|0,bf(T)}sp(k),I=ae}function XGe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;A=I,I=I+16|0,d=A,Nl(d),l=Ms(l)|0,h5e(o,l,s[u>>0]|0),Ol(d),I=A}function WP(o,l){o=o|0,l=l|0;var u=0;return u=n[o>>2]|0,u|0&&Oa(u|0),n[o>>2]=n[l>>2],n[l>>2]=0,o|0}function $Ge(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,T=0;m=I,I=I+32|0,k=m+16|0,B=m+8|0,T=m,Nl(B),l=Ms(l)|0,u=s[u>>0]|0,n[T>>2]=n[A>>2],d=n[d>>2]|0,n[k>>2]=n[T>>2],u5e(o,l,u,k,d),Ol(B),I=m}function e5e(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,T=0,_=0;m=I,I=I+32|0,T=m+24|0,B=m+16|0,_=m+12|0,k=m,Nl(B),l=Ms(l)|0,u=s[u>>0]|0,n[_>>2]=n[A>>2],$M(k,d),n[T>>2]=n[_>>2],o5e(o,l,u,T,k),sp(k),Ol(B),I=m}function t5e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;d=I,I=I+32|0,B=d+16|0,m=d+8|0,k=d,Nl(m),l=Ms(l)|0,u=s[u>>0]|0,n[k>>2]=n[A>>2],n[B>>2]=n[k>>2],r5e(o,l,u,B),Ol(m),I=d}function r5e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0,B=0,k=0;d=I,I=I+16|0,m=d+4|0,k=d,B=ma(n5e()|0)|0,u=Ky(u)|0,n[k>>2]=n[A>>2],n[m>>2]=n[k>>2],YP(o,Fs(0,B|0,l|0,u|0,ud(m)|0)|0),I=d}function n5e(){var o=0;return s[8e3]|0||(i5e(10756),o=8e3,n[o>>2]=1,n[o+4>>2]=0),10756}function YP(o,l){o=o|0,l=l|0,IM(o,l)}function i5e(o){o=o|0,Ro(o,s5e()|0,2)}function s5e(){return 1772}function o5e(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,T=0,_=0;m=I,I=I+32|0,T=m+16|0,_=m+12|0,B=m,k=ma(a5e()|0)|0,u=Ky(u)|0,n[_>>2]=n[A>>2],n[T>>2]=n[_>>2],A=ud(T)|0,n[B>>2]=n[d>>2],T=d+4|0,n[B+4>>2]=n[T>>2],_=d+8|0,n[B+8>>2]=n[_>>2],n[_>>2]=0,n[T>>2]=0,n[d>>2]=0,YP(o,Mi(0,k|0,l|0,u|0,A|0,t_(B)|0)|0),sp(B),I=m}function a5e(){var o=0;return s[8008]|0||(l5e(10768),o=8008,n[o>>2]=1,n[o+4>>2]=0),10768}function l5e(o){o=o|0,Ro(o,c5e()|0,3)}function c5e(){return 1784}function u5e(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,T=0;m=I,I=I+16|0,k=m+4|0,T=m,B=ma(f5e()|0)|0,u=Ky(u)|0,n[T>>2]=n[A>>2],n[k>>2]=n[T>>2],A=ud(k)|0,YP(o,Mi(0,B|0,l|0,u|0,A|0,e_(d)|0)|0),I=m}function f5e(){var o=0;return s[8016]|0||(A5e(10780),o=8016,n[o>>2]=1,n[o+4>>2]=0),10780}function A5e(o){o=o|0,Ro(o,p5e()|0,3)}function p5e(){return 1800}function h5e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;A=ma(g5e()|0)|0,YP(o,dn(0,A|0,l|0,Ky(u)|0)|0)}function g5e(){var o=0;return s[8024]|0||(d5e(10792),o=8024,n[o>>2]=1,n[o+4>>2]=0),10792}function d5e(o){o=o|0,Ro(o,m5e()|0,1)}function m5e(){return 1816}function y5e(){E5e(),I5e(),C5e()}function E5e(){n[2702]=e$(65536)|0}function I5e(){H5e(10856)}function C5e(){w5e(10816)}function w5e(o){o=o|0,B5e(o,5044),v5e(o)|0}function B5e(o,l){o=o|0,l=l|0;var u=0;u=dX()|0,n[o>>2]=u,N5e(u,l),Gh(n[o>>2]|0)}function v5e(o){o=o|0;var l=0;return l=n[o>>2]|0,ld(l,S5e()|0),o|0}function S5e(){var o=0;return s[8032]|0||(bX(10820),gr(64,10820,U|0)|0,o=8032,n[o>>2]=1,n[o+4>>2]=0),Ur(10820)|0||bX(10820),10820}function bX(o){o=o|0,P5e(o),cd(o,25)}function D5e(o){o=o|0,b5e(o+24|0)}function b5e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function P5e(o){o=o|0;var l=0;l=en()|0,tn(o,5,18,l,T5e()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function x5e(o,l){o=o|0,l=l|0,k5e(o,l)}function k5e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;u=I,I=I+16|0,A=u,d=u+4|0,od(d,l),n[A>>2]=ad(d,l)|0,Q5e(o,A),I=u}function Q5e(o,l){o=o|0,l=l|0,PX(o+4|0,n[l>>2]|0),s[o+8>>0]=1}function PX(o,l){o=o|0,l=l|0,n[o>>2]=l}function T5e(){return 1824}function R5e(o){return o=o|0,F5e(o)|0}function F5e(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0;return u=I,I=I+16|0,d=u+4|0,B=u,A=Fl(8)|0,l=A,k=Jt(4)|0,od(d,o),PX(k,ad(d,o)|0),m=l+4|0,n[m>>2]=k,o=Jt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],mX(o,m,d),n[A>>2]=o,I=u,l|0}function Fl(o){o=o|0;var l=0,u=0;return o=o+7&-8,o>>>0<=32768&&(l=n[2701]|0,o>>>0<=(65536-l|0)>>>0)?(u=(n[2702]|0)+l|0,n[2701]=l+o,o=u):(o=e$(o+8|0)|0,n[o>>2]=n[2703],n[2703]=o,o=o+8|0),o|0}function N5e(o,l){o=o|0,l=l|0,n[o>>2]=O5e()|0,n[o+4>>2]=L5e()|0,n[o+12>>2]=l,n[o+8>>2]=M5e()|0,n[o+32>>2]=9}function O5e(){return 11744}function L5e(){return 1832}function M5e(){return qP()|0}function _5e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(qh(A,896)|0)==512?u|0&&(U5e(u),Et(u)):l|0&&Et(l)}function U5e(o){o=o|0,o=n[o+4>>2]|0,o|0&&Wh(o)}function H5e(o){o=o|0,j5e(o,5052),q5e(o)|0,G5e(o,5058,26)|0,W5e(o,5069,1)|0,Y5e(o,5077,10)|0,V5e(o,5087,19)|0,K5e(o,5094,27)|0}function j5e(o,l){o=o|0,l=l|0;var u=0;u=UWe()|0,n[o>>2]=u,HWe(u,l),Gh(n[o>>2]|0)}function q5e(o){o=o|0;var l=0;return l=n[o>>2]|0,ld(l,DWe()|0),o|0}function G5e(o,l,u){return o=o|0,l=l|0,u=u|0,lWe(o,Bn(l)|0,u,0),o|0}function W5e(o,l,u){return o=o|0,l=l|0,u=u|0,V9e(o,Bn(l)|0,u,0),o|0}function Y5e(o,l,u){return o=o|0,l=l|0,u=u|0,S9e(o,Bn(l)|0,u,0),o|0}function V5e(o,l,u){return o=o|0,l=l|0,u=u|0,u9e(o,Bn(l)|0,u,0),o|0}function xX(o,l){o=o|0,l=l|0;var u=0,A=0;e:for(;;){for(u=n[2703]|0;;){if((u|0)==(l|0))break e;if(A=n[u>>2]|0,n[2703]=A,!u)u=A;else break}Et(u)}n[2701]=o}function K5e(o,l,u){return o=o|0,l=l|0,u=u|0,J5e(o,Bn(l)|0,u,0),o|0}function J5e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=r_()|0,o=z5e(u)|0,vn(m,l,d,o,Z5e(u,A)|0,A)}function r_(){var o=0,l=0;if(s[8040]|0||(QX(10860),gr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Ur(10860)|0)){o=10860,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));QX(10860)}return 10860}function z5e(o){return o=o|0,o|0}function Z5e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,T=r_()|0,B=T+24|0,l=yr(l,4)|0,n[m>>2]=l,u=T+28|0,A=n[u>>2]|0,A>>>0<(n[T+32>>2]|0)>>>0?(kX(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(X5e(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function kX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function X5e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=$5e(o)|0,A>>>0>>0)sn(o);else{T=n[o>>2]|0,M=(n[o+8>>2]|0)-T|0,_=M>>2,e9e(d,M>>3>>>0>>1>>>0?_>>>0>>0?B:_:A,(n[m>>2]|0)-T>>3,o+8|0),B=d+8|0,kX(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,t9e(o,d),r9e(d),I=k;return}}function $5e(o){return o=o|0,536870911}function e9e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Jt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function t9e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function r9e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&Et(o)}function QX(o){o=o|0,s9e(o)}function n9e(o){o=o|0,i9e(o+24|0)}function i9e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function s9e(o){o=o|0;var l=0;l=en()|0,tn(o,1,11,l,o9e()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function o9e(){return 1840}function a9e(o,l,u){o=o|0,l=l|0,u=u|0,c9e(n[(l9e(o)|0)>>2]|0,l,u)}function l9e(o){return o=o|0,(n[(r_()|0)+24>>2]|0)+(o<<3)|0}function c9e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;A=I,I=I+16|0,m=A+1|0,d=A,od(m,l),l=ad(m,l)|0,od(d,u),u=ad(d,u)|0,ap[o&31](l,u),I=A}function u9e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=n_()|0,o=f9e(u)|0,vn(m,l,d,o,A9e(u,A)|0,A)}function n_(){var o=0,l=0;if(s[8048]|0||(RX(10896),gr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Ur(10896)|0)){o=10896,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));RX(10896)}return 10896}function f9e(o){return o=o|0,o|0}function A9e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,T=n_()|0,B=T+24|0,l=yr(l,4)|0,n[m>>2]=l,u=T+28|0,A=n[u>>2]|0,A>>>0<(n[T+32>>2]|0)>>>0?(TX(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(p9e(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function TX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function p9e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=h9e(o)|0,A>>>0>>0)sn(o);else{T=n[o>>2]|0,M=(n[o+8>>2]|0)-T|0,_=M>>2,g9e(d,M>>3>>>0>>1>>>0?_>>>0>>0?B:_:A,(n[m>>2]|0)-T>>3,o+8|0),B=d+8|0,TX(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,d9e(o,d),m9e(d),I=k;return}}function h9e(o){return o=o|0,536870911}function g9e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Jt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function d9e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function m9e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&Et(o)}function RX(o){o=o|0,I9e(o)}function y9e(o){o=o|0,E9e(o+24|0)}function E9e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function I9e(o){o=o|0;var l=0;l=en()|0,tn(o,1,11,l,C9e()|0,1),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function C9e(){return 1852}function w9e(o,l){return o=o|0,l=l|0,v9e(n[(B9e(o)|0)>>2]|0,l)|0}function B9e(o){return o=o|0,(n[(n_()|0)+24>>2]|0)+(o<<3)|0}function v9e(o,l){o=o|0,l=l|0;var u=0,A=0;return u=I,I=I+16|0,A=u,od(A,l),l=ad(A,l)|0,l=HP(hd[o&31](l)|0)|0,I=u,l|0}function S9e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=i_()|0,o=D9e(u)|0,vn(m,l,d,o,b9e(u,A)|0,A)}function i_(){var o=0,l=0;if(s[8056]|0||(NX(10932),gr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Ur(10932)|0)){o=10932,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));NX(10932)}return 10932}function D9e(o){return o=o|0,o|0}function b9e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,T=i_()|0,B=T+24|0,l=yr(l,4)|0,n[m>>2]=l,u=T+28|0,A=n[u>>2]|0,A>>>0<(n[T+32>>2]|0)>>>0?(FX(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(P9e(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function FX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function P9e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=x9e(o)|0,A>>>0>>0)sn(o);else{T=n[o>>2]|0,M=(n[o+8>>2]|0)-T|0,_=M>>2,k9e(d,M>>3>>>0>>1>>>0?_>>>0>>0?B:_:A,(n[m>>2]|0)-T>>3,o+8|0),B=d+8|0,FX(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,Q9e(o,d),T9e(d),I=k;return}}function x9e(o){return o=o|0,536870911}function k9e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Jt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function Q9e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function T9e(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&Et(o)}function NX(o){o=o|0,N9e(o)}function R9e(o){o=o|0,F9e(o+24|0)}function F9e(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function N9e(o){o=o|0;var l=0;l=en()|0,tn(o,1,7,l,O9e()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function O9e(){return 1860}function L9e(o,l,u){return o=o|0,l=l|0,u=u|0,_9e(n[(M9e(o)|0)>>2]|0,l,u)|0}function M9e(o){return o=o|0,(n[(i_()|0)+24>>2]|0)+(o<<3)|0}function _9e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0;return A=I,I=I+32|0,B=A+12|0,m=A+8|0,k=A,T=A+16|0,d=A+4|0,U9e(T,l),H9e(k,T,l),Uh(d,u),u=Hh(d,u)|0,n[B>>2]=n[k>>2],F2[o&15](m,B,u),u=j9e(m)|0,bf(m),jh(d),I=A,u|0}function U9e(o,l){o=o|0,l=l|0}function H9e(o,l,u){o=o|0,l=l|0,u=u|0,q9e(o,u)}function j9e(o){return o=o|0,Ms(o)|0}function q9e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0;d=I,I=I+16|0,u=d,A=l,A&1?(G9e(u,0),Me(A|0,u|0)|0,W9e(o,u),Y9e(u)):n[o>>2]=n[l>>2],I=d}function G9e(o,l){o=o|0,l=l|0,bu(o,l),n[o+4>>2]=0,s[o+8>>0]=0}function W9e(o,l){o=o|0,l=l|0,n[o>>2]=n[l+4>>2]}function Y9e(o){o=o|0,s[o+8>>0]=0}function V9e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=s_()|0,o=K9e(u)|0,vn(m,l,d,o,J9e(u,A)|0,A)}function s_(){var o=0,l=0;if(s[8064]|0||(LX(10968),gr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Ur(10968)|0)){o=10968,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));LX(10968)}return 10968}function K9e(o){return o=o|0,o|0}function J9e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,T=s_()|0,B=T+24|0,l=yr(l,4)|0,n[m>>2]=l,u=T+28|0,A=n[u>>2]|0,A>>>0<(n[T+32>>2]|0)>>>0?(OX(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(z9e(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function OX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function z9e(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=Z9e(o)|0,A>>>0>>0)sn(o);else{T=n[o>>2]|0,M=(n[o+8>>2]|0)-T|0,_=M>>2,X9e(d,M>>3>>>0>>1>>>0?_>>>0>>0?B:_:A,(n[m>>2]|0)-T>>3,o+8|0),B=d+8|0,OX(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,$9e(o,d),eWe(d),I=k;return}}function Z9e(o){return o=o|0,536870911}function X9e(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Jt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function $9e(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function eWe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&Et(o)}function LX(o){o=o|0,nWe(o)}function tWe(o){o=o|0,rWe(o+24|0)}function rWe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function nWe(o){o=o|0;var l=0;l=en()|0,tn(o,1,1,l,iWe()|0,5),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function iWe(){return 1872}function sWe(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,aWe(n[(oWe(o)|0)>>2]|0,l,u,A,d,m)}function oWe(o){return o=o|0,(n[(s_()|0)+24>>2]|0)+(o<<3)|0}function aWe(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0;var B=0,k=0,T=0,_=0,M=0,G=0;B=I,I=I+32|0,k=B+16|0,T=B+12|0,_=B+8|0,M=B+4|0,G=B,Uh(k,l),l=Hh(k,l)|0,Uh(T,u),u=Hh(T,u)|0,Uh(_,A),A=Hh(_,A)|0,Uh(M,d),d=Hh(M,d)|0,Uh(G,m),m=Hh(G,m)|0,s$[o&1](l,u,A,d,m),jh(G),jh(M),jh(_),jh(T),jh(k),I=B}function lWe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;m=n[o>>2]|0,d=o_()|0,o=cWe(u)|0,vn(m,l,d,o,uWe(u,A)|0,A)}function o_(){var o=0,l=0;if(s[8072]|0||(_X(11004),gr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Ur(11004)|0)){o=11004,l=o+36|0;do n[o>>2]=0,o=o+4|0;while((o|0)<(l|0));_X(11004)}return 11004}function cWe(o){return o=o|0,o|0}function uWe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0,k=0,T=0;return k=I,I=I+16|0,d=k,m=k+4|0,n[d>>2]=o,T=o_()|0,B=T+24|0,l=yr(l,4)|0,n[m>>2]=l,u=T+28|0,A=n[u>>2]|0,A>>>0<(n[T+32>>2]|0)>>>0?(MX(A,o,l),l=(n[u>>2]|0)+8|0,n[u>>2]=l):(fWe(B,d,m),l=n[u>>2]|0),I=k,(l-(n[B>>2]|0)>>3)+-1|0}function MX(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,n[o+4>>2]=u}function fWe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0;if(k=I,I=I+32|0,d=k,m=o+4|0,B=((n[m>>2]|0)-(n[o>>2]|0)>>3)+1|0,A=AWe(o)|0,A>>>0>>0)sn(o);else{T=n[o>>2]|0,M=(n[o+8>>2]|0)-T|0,_=M>>2,pWe(d,M>>3>>>0>>1>>>0?_>>>0>>0?B:_:A,(n[m>>2]|0)-T>>3,o+8|0),B=d+8|0,MX(n[B>>2]|0,n[l>>2]|0,n[u>>2]|0),n[B>>2]=(n[B>>2]|0)+8,hWe(o,d),gWe(d),I=k;return}}function AWe(o){return o=o|0,536870911}function pWe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0;n[o+12>>2]=0,n[o+16>>2]=A;do if(l)if(l>>>0>536870911)Nt();else{d=Jt(l<<3)|0;break}else d=0;while(!1);n[o>>2]=d,A=d+(u<<3)|0,n[o+8>>2]=A,n[o+4>>2]=A,n[o+12>>2]=d+(l<<3)}function hWe(o,l){o=o|0,l=l|0;var u=0,A=0,d=0,m=0,B=0;A=n[o>>2]|0,B=o+4|0,m=l+4|0,d=(n[B>>2]|0)-A|0,u=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=u,(d|0)>0?(Qr(u|0,A|0,d|0)|0,A=m,u=n[m>>2]|0):A=m,m=n[o>>2]|0,n[o>>2]=u,n[A>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=o+8|0,B=l+12|0,o=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=o,n[l>>2]=n[A>>2]}function gWe(o){o=o|0;var l=0,u=0,A=0;l=n[o+4>>2]|0,u=o+8|0,A=n[u>>2]|0,(A|0)!=(l|0)&&(n[u>>2]=A+(~((A+-8-l|0)>>>3)<<3)),o=n[o>>2]|0,o|0&&Et(o)}function _X(o){o=o|0,yWe(o)}function dWe(o){o=o|0,mWe(o+24|0)}function mWe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function yWe(o){o=o|0;var l=0;l=en()|0,tn(o,1,12,l,EWe()|0,2),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function EWe(){return 1896}function IWe(o,l,u){o=o|0,l=l|0,u=u|0,wWe(n[(CWe(o)|0)>>2]|0,l,u)}function CWe(o){return o=o|0,(n[(o_()|0)+24>>2]|0)+(o<<3)|0}function wWe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;A=I,I=I+16|0,m=A+4|0,d=A,BWe(m,l),l=vWe(m,l)|0,Uh(d,u),u=Hh(d,u)|0,ap[o&31](l,u),jh(d),I=A}function BWe(o,l){o=o|0,l=l|0}function vWe(o,l){return o=o|0,l=l|0,SWe(l)|0}function SWe(o){return o=o|0,o|0}function DWe(){var o=0;return s[8080]|0||(UX(11040),gr(70,11040,U|0)|0,o=8080,n[o>>2]=1,n[o+4>>2]=0),Ur(11040)|0||UX(11040),11040}function UX(o){o=o|0,xWe(o),cd(o,71)}function bWe(o){o=o|0,PWe(o+24|0)}function PWe(o){o=o|0;var l=0,u=0,A=0;u=n[o>>2]|0,A=u,u|0&&(o=o+4|0,l=n[o>>2]|0,(l|0)!=(u|0)&&(n[o>>2]=l+(~((l+-8-A|0)>>>3)<<3)),Et(u))}function xWe(o){o=o|0;var l=0;l=en()|0,tn(o,5,7,l,RWe()|0,0),n[o+24>>2]=0,n[o+28>>2]=0,n[o+32>>2]=0}function kWe(o){o=o|0,QWe(o)}function QWe(o){o=o|0,TWe(o)}function TWe(o){o=o|0,s[o+8>>0]=1}function RWe(){return 1936}function FWe(){return NWe()|0}function NWe(){var o=0,l=0,u=0,A=0,d=0,m=0,B=0;return l=I,I=I+16|0,d=l+4|0,B=l,u=Fl(8)|0,o=u,m=o+4|0,n[m>>2]=Jt(1)|0,A=Jt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],OWe(A,m,d),n[u>>2]=A,I=l,o|0}function OWe(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]=l,u=Jt(16)|0,n[u+4>>2]=0,n[u+8>>2]=0,n[u>>2]=1916,n[u+12>>2]=l,n[o+4>>2]=u}function LWe(o){o=o|0,Zy(o),Et(o)}function MWe(o){o=o|0,o=n[o+12>>2]|0,o|0&&Et(o)}function _We(o){o=o|0,Et(o)}function UWe(){var o=0;return s[8088]|0||(VWe(11076),gr(25,11076,U|0)|0,o=8088,n[o>>2]=1,n[o+4>>2]=0),11076}function HWe(o,l){o=o|0,l=l|0,n[o>>2]=jWe()|0,n[o+4>>2]=qWe()|0,n[o+12>>2]=l,n[o+8>>2]=GWe()|0,n[o+32>>2]=10}function jWe(){return 11745}function qWe(){return 1940}function GWe(){return jP()|0}function WWe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,(qh(A,896)|0)==512?u|0&&(YWe(u),Et(u)):l|0&&Et(l)}function YWe(o){o=o|0,o=n[o+4>>2]|0,o|0&&Wh(o)}function VWe(o){o=o|0,_h(o)}function xu(o,l){o=o|0,l=l|0,n[o>>2]=l}function a_(o){return o=o|0,n[o>>2]|0}function KWe(o){return o=o|0,s[n[o>>2]>>0]|0}function JWe(o,l){o=o|0,l=l|0;var u=0,A=0;u=I,I=I+16|0,A=u,n[A>>2]=n[o>>2],zWe(l,A)|0,I=u}function zWe(o,l){o=o|0,l=l|0;var u=0;return u=ZWe(n[o>>2]|0,l)|0,l=o+4|0,n[(n[l>>2]|0)+8>>2]=u,n[(n[l>>2]|0)+8>>2]|0}function ZWe(o,l){o=o|0,l=l|0;var u=0,A=0;return u=I,I=I+16|0,A=u,Nl(A),o=Ms(o)|0,l=XWe(o,n[l>>2]|0)|0,Ol(A),I=u,l|0}function Nl(o){o=o|0,n[o>>2]=n[2701],n[o+4>>2]=n[2703]}function XWe(o,l){o=o|0,l=l|0;var u=0;return u=ma($We()|0)|0,dn(0,u|0,o|0,e_(l)|0)|0}function Ol(o){o=o|0,xX(n[o>>2]|0,n[o+4>>2]|0)}function $We(){var o=0;return s[8096]|0||(eYe(11120),o=8096,n[o>>2]=1,n[o+4>>2]=0),11120}function eYe(o){o=o|0,Ro(o,tYe()|0,1)}function tYe(){return 1948}function rYe(){nYe()}function nYe(){var o=0,l=0,u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0,We=0,Le=0,Qe=0;if(Le=I,I=I+16|0,M=Le+4|0,G=Le,aa(65536,10804,n[2702]|0,10812),u=uX()|0,l=n[u>>2]|0,o=n[l>>2]|0,o|0)for(A=n[u+8>>2]|0,u=n[u+4>>2]|0;hf(o|0,c[u>>0]|0|0,s[A>>0]|0),l=l+4|0,o=n[l>>2]|0,o;)A=A+1|0,u=u+1|0;if(o=fX()|0,l=n[o>>2]|0,l|0)do LA(l|0,n[o+4>>2]|0),o=o+8|0,l=n[o>>2]|0;while(l|0);LA(iYe()|0,5167),_=Yy()|0,o=n[_>>2]|0;e:do if(o|0){do sYe(n[o+4>>2]|0),o=n[o>>2]|0;while(o|0);if(o=n[_>>2]|0,o|0){T=_;do{for(;d=o,o=n[o>>2]|0,d=n[d+4>>2]|0,!!(oYe(d)|0);)if(n[G>>2]=T,n[M>>2]=n[G>>2],aYe(_,M)|0,!o)break e;if(lYe(d),T=n[T>>2]|0,l=HX(d)|0,m=Li()|0,B=I,I=I+((1*(l<<2)|0)+15&-16)|0,k=I,I=I+((1*(l<<2)|0)+15&-16)|0,l=n[(BX(d)|0)>>2]|0,l|0)for(u=B,A=k;n[u>>2]=n[(Vy(n[l+4>>2]|0)|0)>>2],n[A>>2]=n[l+8>>2],l=n[l>>2]|0,l;)u=u+4|0,A=A+4|0;Qe=Vy(d)|0,l=cYe(d)|0,u=HX(d)|0,A=uYe(d)|0,ac(Qe|0,l|0,B|0,k|0,u|0,A|0,KM(d)|0),OA(m|0)}while(o|0)}}while(!1);if(o=n[(JM()|0)>>2]|0,o|0)do Qe=o+4|0,_=zM(Qe)|0,d=k2(_)|0,m=P2(_)|0,B=(x2(_)|0)+1|0,k=VP(_)|0,T=jX(Qe)|0,_=Ur(_)|0,M=GP(Qe)|0,G=l_(Qe)|0,Au(0,d|0,m|0,B|0,k|0,T|0,_|0,M|0,G|0,c_(Qe)|0),o=n[o>>2]|0;while(o|0);o=n[(Yy()|0)>>2]|0;e:do if(o|0){t:for(;;){if(l=n[o+4>>2]|0,l|0&&(ae=n[(Vy(l)|0)>>2]|0,We=n[(vX(l)|0)>>2]|0,We|0)){u=We;do{l=u+4|0,A=zM(l)|0;r:do if(A|0)switch(Ur(A)|0){case 0:break t;case 4:case 3:case 2:{k=k2(A)|0,T=P2(A)|0,_=(x2(A)|0)+1|0,M=VP(A)|0,G=Ur(A)|0,Qe=GP(l)|0,Au(ae|0,k|0,T|0,_|0,M|0,0,G|0,Qe|0,l_(l)|0,c_(l)|0);break r}case 1:{B=k2(A)|0,k=P2(A)|0,T=(x2(A)|0)+1|0,_=VP(A)|0,M=jX(l)|0,G=Ur(A)|0,Qe=GP(l)|0,Au(ae|0,B|0,k|0,T|0,_|0,M|0,G|0,Qe|0,l_(l)|0,c_(l)|0);break r}case 5:{_=k2(A)|0,M=P2(A)|0,G=(x2(A)|0)+1|0,Qe=VP(A)|0,Au(ae|0,_|0,M|0,G|0,Qe|0,fYe(A)|0,Ur(A)|0,0,0,0);break r}default:break r}while(!1);u=n[u>>2]|0}while(u|0)}if(o=n[o>>2]|0,!o)break e}Nt()}while(!1);ve(),I=Le}function iYe(){return 11703}function sYe(o){o=o|0,s[o+40>>0]=0}function oYe(o){return o=o|0,(s[o+40>>0]|0)!=0|0}function aYe(o,l){return o=o|0,l=l|0,l=AYe(l)|0,o=n[l>>2]|0,n[l>>2]=n[o>>2],Et(o),n[l>>2]|0}function lYe(o){o=o|0,s[o+40>>0]=1}function HX(o){return o=o|0,n[o+20>>2]|0}function cYe(o){return o=o|0,n[o+8>>2]|0}function uYe(o){return o=o|0,n[o+32>>2]|0}function VP(o){return o=o|0,n[o+4>>2]|0}function jX(o){return o=o|0,n[o+4>>2]|0}function l_(o){return o=o|0,n[o+8>>2]|0}function c_(o){return o=o|0,n[o+16>>2]|0}function fYe(o){return o=o|0,n[o+20>>2]|0}function AYe(o){return o=o|0,n[o>>2]|0}function KP(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0,We=0,Le=0,Qe=0,tt=0,Ze=0,ct=0,He=0,Ge=0,Lt=0;Lt=I,I=I+16|0,ae=Lt;do if(o>>>0<245){if(_=o>>>0<11?16:o+11&-8,o=_>>>3,G=n[2783]|0,u=G>>>o,u&3|0)return l=(u&1^1)+o|0,o=11172+(l<<1<<2)|0,u=o+8|0,A=n[u>>2]|0,d=A+8|0,m=n[d>>2]|0,(o|0)==(m|0)?n[2783]=G&~(1<>2]=o,n[u>>2]=m),Ge=l<<3,n[A+4>>2]=Ge|3,Ge=A+Ge+4|0,n[Ge>>2]=n[Ge>>2]|1,Ge=d,I=Lt,Ge|0;if(M=n[2785]|0,_>>>0>M>>>0){if(u|0)return l=2<>>12&16,l=l>>>B,u=l>>>5&8,l=l>>>u,d=l>>>2&4,l=l>>>d,o=l>>>1&2,l=l>>>o,A=l>>>1&1,A=(u|B|d|o|A)+(l>>>A)|0,l=11172+(A<<1<<2)|0,o=l+8|0,d=n[o>>2]|0,B=d+8|0,u=n[B>>2]|0,(l|0)==(u|0)?(o=G&~(1<>2]=l,n[o>>2]=u,o=G),m=(A<<3)-_|0,n[d+4>>2]=_|3,A=d+_|0,n[A+4>>2]=m|1,n[A+m>>2]=m,M|0&&(d=n[2788]|0,l=M>>>3,u=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=o|l,l=u,o=u+8|0),n[o>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=u),n[2785]=m,n[2788]=A,Ge=B,I=Lt,Ge|0;if(k=n[2784]|0,k){if(u=(k&0-k)+-1|0,B=u>>>12&16,u=u>>>B,m=u>>>5&8,u=u>>>m,T=u>>>2&4,u=u>>>T,A=u>>>1&2,u=u>>>A,o=u>>>1&1,o=n[11436+((m|B|T|A|o)+(u>>>o)<<2)>>2]|0,u=(n[o+4>>2]&-8)-_|0,A=n[o+16+(((n[o+16>>2]|0)==0&1)<<2)>>2]|0,!A)T=o,m=u;else{do B=(n[A+4>>2]&-8)-_|0,T=B>>>0>>0,u=T?B:u,o=T?A:o,A=n[A+16+(((n[A+16>>2]|0)==0&1)<<2)>>2]|0;while(A|0);T=o,m=u}if(B=T+_|0,T>>>0>>0){d=n[T+24>>2]|0,l=n[T+12>>2]|0;do if((l|0)==(T|0)){if(o=T+20|0,l=n[o>>2]|0,!l&&(o=T+16|0,l=n[o>>2]|0,!l)){u=0;break}for(;;){if(u=l+20|0,A=n[u>>2]|0,A|0){l=A,o=u;continue}if(u=l+16|0,A=n[u>>2]|0,A)l=A,o=u;else break}n[o>>2]=0,u=l}else u=n[T+8>>2]|0,n[u+12>>2]=l,n[l+8>>2]=u,u=l;while(!1);do if(d|0){if(l=n[T+28>>2]|0,o=11436+(l<<2)|0,(T|0)==(n[o>>2]|0)){if(n[o>>2]=u,!u){n[2784]=k&~(1<>2]|0)!=(T|0)&1)<<2)>>2]=u,!u)break;n[u+24>>2]=d,l=n[T+16>>2]|0,l|0&&(n[u+16>>2]=l,n[l+24>>2]=u),l=n[T+20>>2]|0,l|0&&(n[u+20>>2]=l,n[l+24>>2]=u)}while(!1);return m>>>0<16?(Ge=m+_|0,n[T+4>>2]=Ge|3,Ge=T+Ge+4|0,n[Ge>>2]=n[Ge>>2]|1):(n[T+4>>2]=_|3,n[B+4>>2]=m|1,n[B+m>>2]=m,M|0&&(A=n[2788]|0,l=M>>>3,u=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=G|l,l=u,o=u+8|0),n[o>>2]=A,n[l+12>>2]=A,n[A+8>>2]=l,n[A+12>>2]=u),n[2785]=m,n[2788]=B),Ge=T+8|0,I=Lt,Ge|0}else G=_}else G=_}else G=_}else if(o>>>0<=4294967231)if(o=o+11|0,_=o&-8,T=n[2784]|0,T){A=0-_|0,o=o>>>8,o?_>>>0>16777215?k=31:(G=(o+1048320|0)>>>16&8,He=o<>>16&4,He=He<>>16&2,k=14-(M|G|k)+(He<>>15)|0,k=_>>>(k+7|0)&1|k<<1):k=0,u=n[11436+(k<<2)>>2]|0;e:do if(!u)u=0,o=0,He=57;else for(o=0,B=_<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[u+4>>2]&-8)-_|0,d>>>0>>0)if(d)o=u,A=d;else{o=u,A=0,d=u,He=61;break e}if(d=n[u+20>>2]|0,u=n[u+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(u|0)?m:d,d=(u|0)==0,d){u=m,He=57;break}else B=B<<((d^1)&1)}while(!1);if((He|0)==57){if((u|0)==0&(o|0)==0){if(o=2<>>12&16,G=G>>>B,m=G>>>5&8,G=G>>>m,k=G>>>2&4,G=G>>>k,M=G>>>1&2,G=G>>>M,u=G>>>1&1,o=0,u=n[11436+((m|B|k|M|u)+(G>>>u)<<2)>>2]|0}u?(d=u,He=61):(k=o,B=A)}if((He|0)==61)for(;;)if(He=0,u=(n[d+4>>2]&-8)-_|0,G=u>>>0>>0,u=G?u:A,o=G?d:o,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)A=u,He=61;else{k=o,B=u;break}if(k|0&&B>>>0<((n[2785]|0)-_|0)>>>0){if(m=k+_|0,k>>>0>=m>>>0)return Ge=0,I=Lt,Ge|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(o=k+20|0,l=n[o>>2]|0,!l&&(o=k+16|0,l=n[o>>2]|0,!l)){l=0;break}for(;;){if(u=l+20|0,A=n[u>>2]|0,A|0){l=A,o=u;continue}if(u=l+16|0,A=n[u>>2]|0,A)l=A,o=u;else break}n[o>>2]=0}else Ge=n[k+8>>2]|0,n[Ge+12>>2]=l,n[l+8>>2]=Ge;while(!1);do if(d){if(o=n[k+28>>2]|0,u=11436+(o<<2)|0,(k|0)==(n[u>>2]|0)){if(n[u>>2]=l,!l){A=T&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){A=T;break}n[l+24>>2]=d,o=n[k+16>>2]|0,o|0&&(n[l+16>>2]=o,n[o+24>>2]=l),o=n[k+20>>2]|0,o&&(n[l+20>>2]=o,n[o+24>>2]=l),A=T}else A=T;while(!1);do if(B>>>0>=16){if(n[k+4>>2]=_|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){u=11172+(l<<1<<2)|0,o=n[2783]|0,l=1<>2]|0):(n[2783]=o|l,l=u,o=u+8|0),n[o>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=u;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(He=(l+1048320|0)>>>16&8,Ge=l<>>16&4,Ge=Ge<>>16&2,l=14-(ct|He|l)+(Ge<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,u=11436+(l<<2)|0,n[m+28>>2]=l,o=m+16|0,n[o+4>>2]=0,n[o>>2]=0,o=1<>2]=m,n[m+24>>2]=u,n[m+12>>2]=m,n[m+8>>2]=m;break}for(o=B<<((l|0)==31?0:25-(l>>>1)|0),u=n[u>>2]|0;;){if((n[u+4>>2]&-8|0)==(B|0)){He=97;break}if(A=u+16+(o>>>31<<2)|0,l=n[A>>2]|0,l)o=o<<1,u=l;else{He=96;break}}if((He|0)==96){n[A>>2]=m,n[m+24>>2]=u,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((He|0)==97){He=u+8|0,Ge=n[He>>2]|0,n[Ge+12>>2]=m,n[He>>2]=m,n[m+8>>2]=Ge,n[m+12>>2]=u,n[m+24>>2]=0;break}}else Ge=B+_|0,n[k+4>>2]=Ge|3,Ge=k+Ge+4|0,n[Ge>>2]=n[Ge>>2]|1;while(!1);return Ge=k+8|0,I=Lt,Ge|0}else G=_}else G=_;else G=-1;while(!1);if(u=n[2785]|0,u>>>0>=G>>>0)return l=u-G|0,o=n[2788]|0,l>>>0>15?(Ge=o+G|0,n[2788]=Ge,n[2785]=l,n[Ge+4>>2]=l|1,n[Ge+l>>2]=l,n[o+4>>2]=G|3):(n[2785]=0,n[2788]=0,n[o+4>>2]=u|3,Ge=o+u+4|0,n[Ge>>2]=n[Ge>>2]|1),Ge=o+8|0,I=Lt,Ge|0;if(B=n[2786]|0,B>>>0>G>>>0)return ct=B-G|0,n[2786]=ct,Ge=n[2789]|0,He=Ge+G|0,n[2789]=He,n[He+4>>2]=ct|1,n[Ge+4>>2]=G|3,Ge=Ge+8|0,I=Lt,Ge|0;if(n[2901]|0?o=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,o=ae&-16^1431655768,n[ae>>2]=o,n[2901]=o,o=4096),k=G+48|0,T=G+47|0,m=o+T|0,d=0-o|0,_=m&d,_>>>0<=G>>>0||(o=n[2893]|0,o|0&&(M=n[2891]|0,ae=M+_|0,ae>>>0<=M>>>0|ae>>>0>o>>>0)))return Ge=0,I=Lt,Ge|0;e:do if(n[2894]&4)l=0,He=133;else{u=n[2789]|0;t:do if(u){for(A=11580;o=n[A>>2]|0,!(o>>>0<=u>>>0&&(Qe=A+4|0,(o+(n[Qe>>2]|0)|0)>>>0>u>>>0));)if(o=n[A+8>>2]|0,o)A=o;else{He=118;break t}if(l=m-B&d,l>>>0<2147483647)if(o=Yh(l|0)|0,(o|0)==((n[A>>2]|0)+(n[Qe>>2]|0)|0)){if((o|0)!=-1){B=l,m=o,He=135;break e}}else A=o,He=126;else l=0}else He=118;while(!1);do if((He|0)==118)if(u=Yh(0)|0,(u|0)!=-1&&(l=u,We=n[2902]|0,Le=We+-1|0,l=(Le&l|0?(Le+l&0-We)-l|0:0)+_|0,We=n[2891]|0,Le=l+We|0,l>>>0>G>>>0&l>>>0<2147483647)){if(Qe=n[2893]|0,Qe|0&&Le>>>0<=We>>>0|Le>>>0>Qe>>>0){l=0;break}if(o=Yh(l|0)|0,(o|0)==(u|0)){B=l,m=u,He=135;break e}else A=o,He=126}else l=0;while(!1);do if((He|0)==126){if(u=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(A|0)!=-1)))if((A|0)==-1){l=0;break}else{B=l,m=A,He=135;break e}if(o=n[2903]|0,o=T-l+o&0-o,o>>>0>=2147483647){B=l,m=A,He=135;break e}if((Yh(o|0)|0)==-1){Yh(u|0)|0,l=0;break}else{B=o+l|0,m=A,He=135;break e}}while(!1);n[2894]=n[2894]|4,He=133}while(!1);if((He|0)==133&&_>>>0<2147483647&&(ct=Yh(_|0)|0,Qe=Yh(0)|0,tt=Qe-ct|0,Ze=tt>>>0>(G+40|0)>>>0,!((ct|0)==-1|Ze^1|ct>>>0>>0&((ct|0)!=-1&(Qe|0)!=-1)^1))&&(B=Ze?tt:l,m=ct,He=135),(He|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),T=n[2789]|0;do if(T){for(l=11580;;){if(o=n[l>>2]|0,u=l+4|0,A=n[u>>2]|0,(m|0)==(o+A|0)){He=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((He|0)==145&&!(n[l+12>>2]&8|0)&&T>>>0>>0&T>>>0>=o>>>0){n[u>>2]=A+B,Ge=T+8|0,Ge=Ge&7|0?0-Ge&7:0,He=T+Ge|0,Ge=(n[2786]|0)+(B-Ge)|0,n[2789]=He,n[2786]=Ge,n[He+4>>2]=Ge|1,n[He+Ge+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),u=m+B|0,l=11580;;){if((n[l>>2]|0)==(u|0)){He=153;break}if(o=n[l+8>>2]|0,o)l=o;else break}if((He|0)==153&&!(n[l+12>>2]&8|0)){n[l>>2]=m,M=l+4|0,n[M>>2]=(n[M>>2]|0)+B,M=m+8|0,M=m+(M&7|0?0-M&7:0)|0,l=u+8|0,l=u+(l&7|0?0-l&7:0)|0,_=M+G|0,k=l-M-G|0,n[M+4>>2]=G|3;do if((l|0)!=(T|0)){if((l|0)==(n[2788]|0)){Ge=(n[2785]|0)+k|0,n[2785]=Ge,n[2788]=_,n[_+4>>2]=Ge|1,n[_+Ge>>2]=Ge;break}if(o=n[l+4>>2]|0,(o&3|0)==1){B=o&-8,A=o>>>3;e:do if(o>>>0<256)if(o=n[l+8>>2]|0,u=n[l+12>>2]|0,(u|0)==(o|0)){n[2783]=n[2783]&~(1<>2]=u,n[u+8>>2]=o;break}else{m=n[l+24>>2]|0,o=n[l+12>>2]|0;do if((o|0)==(l|0)){if(A=l+16|0,u=A+4|0,o=n[u>>2]|0,!o)if(o=n[A>>2]|0,o)u=A;else{o=0;break}for(;;){if(A=o+20|0,d=n[A>>2]|0,d|0){o=d,u=A;continue}if(A=o+16|0,d=n[A>>2]|0,d)o=d,u=A;else break}n[u>>2]=0}else Ge=n[l+8>>2]|0,n[Ge+12>>2]=o,n[o+8>>2]=Ge;while(!1);if(!m)break;u=n[l+28>>2]|0,A=11436+(u<<2)|0;do if((l|0)!=(n[A>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=o,!o)break e}else{if(n[A>>2]=o,o|0)break;n[2784]=n[2784]&~(1<>2]=m,u=l+16|0,A=n[u>>2]|0,A|0&&(n[o+16>>2]=A,n[A+24>>2]=o),u=n[u+4>>2]|0,!u)break;n[o+20>>2]=u,n[u+24>>2]=o}while(!1);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[_+4>>2]=d|1,n[_+d>>2]=d,l=d>>>3,d>>>0<256){u=11172+(l<<1<<2)|0,o=n[2783]|0,l=1<>2]|0):(n[2783]=o|l,l=u,o=u+8|0),n[o>>2]=_,n[l+12>>2]=_,n[_+8>>2]=l,n[_+12>>2]=u;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}He=(l+1048320|0)>>>16&8,Ge=l<>>16&4,Ge=Ge<>>16&2,l=14-(ct|He|l)+(Ge<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(!1);if(A=11436+(l<<2)|0,n[_+28>>2]=l,o=_+16|0,n[o+4>>2]=0,n[o>>2]=0,o=n[2784]|0,u=1<>2]=_,n[_+24>>2]=A,n[_+12>>2]=_,n[_+8>>2]=_;break}for(o=d<<((l|0)==31?0:25-(l>>>1)|0),u=n[A>>2]|0;;){if((n[u+4>>2]&-8|0)==(d|0)){He=194;break}if(A=u+16+(o>>>31<<2)|0,l=n[A>>2]|0,l)o=o<<1,u=l;else{He=193;break}}if((He|0)==193){n[A>>2]=_,n[_+24>>2]=u,n[_+12>>2]=_,n[_+8>>2]=_;break}else if((He|0)==194){He=u+8|0,Ge=n[He>>2]|0,n[Ge+12>>2]=_,n[He>>2]=_,n[_+8>>2]=Ge,n[_+12>>2]=u,n[_+24>>2]=0;break}}else Ge=(n[2786]|0)+k|0,n[2786]=Ge,n[2789]=_,n[_+4>>2]=Ge|1;while(!1);return Ge=M+8|0,I=Lt,Ge|0}for(l=11580;o=n[l>>2]|0,!(o>>>0<=T>>>0&&(Ge=o+(n[l+4>>2]|0)|0,Ge>>>0>T>>>0));)l=n[l+8>>2]|0;d=Ge+-47|0,o=d+8|0,o=d+(o&7|0?0-o&7:0)|0,d=T+16|0,o=o>>>0>>0?T:o,l=o+8|0,u=m+8|0,u=u&7|0?0-u&7:0,He=m+u|0,u=B+-40-u|0,n[2789]=He,n[2786]=u,n[He+4>>2]=u|1,n[He+u+4>>2]=40,n[2790]=n[2905],u=o+4|0,n[u>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=o+24|0;do He=l,l=l+4|0,n[l>>2]=7;while((He+8|0)>>>0>>0);if((o|0)!=(T|0)){if(m=o-T|0,n[u>>2]=n[u>>2]&-2,n[T+4>>2]=m|1,n[o>>2]=m,l=m>>>3,m>>>0<256){u=11172+(l<<1<<2)|0,o=n[2783]|0,l=1<>2]|0):(n[2783]=o|l,l=u,o=u+8|0),n[o>>2]=T,n[l+12>>2]=T,n[T+8>>2]=l,n[T+12>>2]=u;break}if(l=m>>>8,l?m>>>0>16777215?u=31:(He=(l+1048320|0)>>>16&8,Ge=l<>>16&4,Ge=Ge<>>16&2,u=14-(ct|He|u)+(Ge<>>15)|0,u=m>>>(u+7|0)&1|u<<1):u=0,A=11436+(u<<2)|0,n[T+28>>2]=u,n[T+20>>2]=0,n[d>>2]=0,l=n[2784]|0,o=1<>2]=T,n[T+24>>2]=A,n[T+12>>2]=T,n[T+8>>2]=T;break}for(o=m<<((u|0)==31?0:25-(u>>>1)|0),u=n[A>>2]|0;;){if((n[u+4>>2]&-8|0)==(m|0)){He=216;break}if(A=u+16+(o>>>31<<2)|0,l=n[A>>2]|0,l)o=o<<1,u=l;else{He=215;break}}if((He|0)==215){n[A>>2]=T,n[T+24>>2]=u,n[T+12>>2]=T,n[T+8>>2]=T;break}else if((He|0)==216){He=u+8|0,Ge=n[He>>2]|0,n[Ge+12>>2]=T,n[He>>2]=T,n[T+8>>2]=Ge,n[T+12>>2]=u,n[T+24>>2]=0;break}}}else{Ge=n[2787]|0,(Ge|0)==0|m>>>0>>0&&(n[2787]=m),n[2895]=m,n[2896]=B,n[2898]=0,n[2792]=n[2901],n[2791]=-1,l=0;do Ge=11172+(l<<1<<2)|0,n[Ge+12>>2]=Ge,n[Ge+8>>2]=Ge,l=l+1|0;while((l|0)!=32);Ge=m+8|0,Ge=Ge&7|0?0-Ge&7:0,He=m+Ge|0,Ge=B+-40-Ge|0,n[2789]=He,n[2786]=Ge,n[He+4>>2]=Ge|1,n[He+Ge+4>>2]=40,n[2790]=n[2905]}while(!1);if(l=n[2786]|0,l>>>0>G>>>0)return ct=l-G|0,n[2786]=ct,Ge=n[2789]|0,He=Ge+G|0,n[2789]=He,n[He+4>>2]=ct|1,n[Ge+4>>2]=G|3,Ge=Ge+8|0,I=Lt,Ge|0}return n[(Jy()|0)>>2]=12,Ge=0,I=Lt,Ge|0}function JP(o){o=o|0;var l=0,u=0,A=0,d=0,m=0,B=0,k=0,T=0;if(o){u=o+-8|0,d=n[2787]|0,o=n[o+-4>>2]|0,l=o&-8,T=u+l|0;do if(o&1)k=u,B=u;else{if(A=n[u>>2]|0,!(o&3)||(B=u+(0-A)|0,m=A+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(o=T+4|0,l=n[o>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[o>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(u=A>>>3,A>>>0<256)if(o=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(o|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=o,k=B,l=m;break}d=n[B+24>>2]|0,o=n[B+12>>2]|0;do if((o|0)==(B|0)){if(u=B+16|0,l=u+4|0,o=n[l>>2]|0,!o)if(o=n[u>>2]|0,o)l=u;else{o=0;break}for(;;){if(u=o+20|0,A=n[u>>2]|0,A|0){o=A,l=u;continue}if(u=o+16|0,A=n[u>>2]|0,A)o=A,l=u;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=o,n[o+8>>2]=k;while(!1);if(d){if(l=n[B+28>>2]|0,u=11436+(l<<2)|0,(B|0)==(n[u>>2]|0)){if(n[u>>2]=o,!o){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=o,!o){k=B,l=m;break}n[o+24>>2]=d,l=B+16|0,u=n[l>>2]|0,u|0&&(n[o+16>>2]=u,n[u+24>>2]=o),l=n[l+4>>2]|0,l?(n[o+20>>2]=l,n[l+24>>2]=o,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(!1);if(!(B>>>0>=T>>>0)&&(o=T+4|0,A=n[o>>2]|0,!!(A&1))){if(A&2)n[o>>2]=A&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(o=n[2788]|0,(T|0)==(n[2789]|0)){if(T=(n[2786]|0)+l|0,n[2786]=T,n[2789]=k,n[k+4>>2]=T|1,(k|0)!=(o|0))return;n[2788]=0,n[2785]=0;return}if((T|0)==(o|0)){T=(n[2785]|0)+l|0,n[2785]=T,n[2788]=B,n[k+4>>2]=T|1,n[B+T>>2]=T;return}d=(A&-8)+l|0,u=A>>>3;do if(A>>>0<256)if(l=n[T+8>>2]|0,o=n[T+12>>2]|0,(o|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=o,n[o+8>>2]=l;break}else{m=n[T+24>>2]|0,o=n[T+12>>2]|0;do if((o|0)==(T|0)){if(u=T+16|0,l=u+4|0,o=n[l>>2]|0,!o)if(o=n[u>>2]|0,o)l=u;else{u=0;break}for(;;){if(u=o+20|0,A=n[u>>2]|0,A|0){o=A,l=u;continue}if(u=o+16|0,A=n[u>>2]|0,A)o=A,l=u;else break}n[l>>2]=0,u=o}else u=n[T+8>>2]|0,n[u+12>>2]=o,n[o+8>>2]=u,u=o;while(!1);if(m|0){if(o=n[T+28>>2]|0,l=11436+(o<<2)|0,(T|0)==(n[l>>2]|0)){if(n[l>>2]=u,!u){n[2784]=n[2784]&~(1<>2]|0)!=(T|0)&1)<<2)>>2]=u,!u)break;n[u+24>>2]=m,o=T+16|0,l=n[o>>2]|0,l|0&&(n[u+16>>2]=l,n[l+24>>2]=u),o=n[o+4>>2]|0,o|0&&(n[u+20>>2]=o,n[o+24>>2]=u)}}while(!1);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(o=d>>>3,d>>>0<256){u=11172+(o<<1<<2)|0,l=n[2783]|0,o=1<>2]|0):(n[2783]=l|o,o=u,l=u+8|0),n[l>>2]=k,n[o+12>>2]=k,n[k+8>>2]=o,n[k+12>>2]=u;return}o=d>>>8,o?d>>>0>16777215?o=31:(B=(o+1048320|0)>>>16&8,T=o<>>16&4,T=T<>>16&2,o=14-(m|B|o)+(T<>>15)|0,o=d>>>(o+7|0)&1|o<<1):o=0,A=11436+(o<<2)|0,n[k+28>>2]=o,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,u=1<>>1)|0),u=n[A>>2]|0;;){if((n[u+4>>2]&-8|0)==(d|0)){o=73;break}if(A=u+16+(l>>>31<<2)|0,o=n[A>>2]|0,o)l=l<<1,u=o;else{o=72;break}}if((o|0)==72){n[A>>2]=k,n[k+24>>2]=u,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((o|0)==73){B=u+8|0,T=n[B>>2]|0,n[T+12>>2]=k,n[B>>2]=k,n[k+8>>2]=T,n[k+12>>2]=u,n[k+24>>2]=0;break}}else n[2784]=l|u,n[A>>2]=k,n[k+24>>2]=A,n[k+12>>2]=k,n[k+8>>2]=k;while(!1);if(T=(n[2791]|0)+-1|0,n[2791]=T,!T)o=11588;else return;for(;o=n[o>>2]|0,o;)o=o+8|0;n[2791]=-1}}}function pYe(){return 11628}function hYe(o){o=o|0;var l=0,u=0;return l=I,I=I+16|0,u=l,n[u>>2]=mYe(n[o+60>>2]|0)|0,o=zP(hu(6,u|0)|0)|0,I=l,o|0}function qX(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0,We=0;G=I,I=I+48|0,_=G+16|0,m=G,d=G+32|0,k=o+28|0,A=n[k>>2]|0,n[d>>2]=A,T=o+20|0,A=(n[T>>2]|0)-A|0,n[d+4>>2]=A,n[d+8>>2]=l,n[d+12>>2]=u,A=A+u|0,B=o+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=zP(Ma(146,m|0)|0)|0;e:do if((A|0)!=(m|0)){for(l=2;!((m|0)<0);)if(A=A-m|0,We=n[d+4>>2]|0,ae=m>>>0>We>>>0,d=ae?d+8|0:d,l=(ae<<31>>31)+l|0,We=m-(ae?We:0)|0,n[d>>2]=(n[d>>2]|0)+We,ae=d+4|0,n[ae>>2]=(n[ae>>2]|0)-We,n[_>>2]=n[B>>2],n[_+4>>2]=d,n[_+8>>2]=l,m=zP(Ma(146,_|0)|0)|0,(A|0)==(m|0)){M=3;break e}n[o+16>>2]=0,n[k>>2]=0,n[T>>2]=0,n[o>>2]=n[o>>2]|32,(l|0)==2?u=0:u=u-(n[d+4>>2]|0)|0}else M=3;while(!1);return(M|0)==3&&(We=n[o+44>>2]|0,n[o+16>>2]=We+(n[o+48>>2]|0),n[k>>2]=We,n[T>>2]=We),I=G,u|0}function gYe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;return d=I,I=I+32|0,m=d,A=d+20|0,n[m>>2]=n[o+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=A,n[m+16>>2]=u,(zP(La(140,m|0)|0)|0)<0?(n[A>>2]=-1,o=-1):o=n[A>>2]|0,I=d,o|0}function zP(o){return o=o|0,o>>>0>4294963200&&(n[(Jy()|0)>>2]=0-o,o=-1),o|0}function Jy(){return(dYe()|0)+64|0}function dYe(){return u_()|0}function u_(){return 2084}function mYe(o){return o=o|0,o|0}function yYe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;return d=I,I=I+32|0,A=d,n[o+36>>2]=1,!(n[o>>2]&64|0)&&(n[A>>2]=n[o+60>>2],n[A+4>>2]=21523,n[A+8>>2]=d+16,so(54,A|0)|0)&&(s[o+75>>0]=-1),A=qX(o,l,u)|0,I=d,A|0}function GX(o,l){o=o|0,l=l|0;var u=0,A=0;if(u=s[o>>0]|0,A=s[l>>0]|0,!(u<<24>>24)||u<<24>>24!=A<<24>>24)o=A;else{do o=o+1|0,l=l+1|0,u=s[o>>0]|0,A=s[l>>0]|0;while(!(!(u<<24>>24)||u<<24>>24!=A<<24>>24));o=A}return(u&255)-(o&255)|0}function EYe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0;e:do if(!u)o=0;else{for(;A=s[o>>0]|0,d=s[l>>0]|0,A<<24>>24==d<<24>>24;)if(u=u+-1|0,u)o=o+1|0,l=l+1|0;else{o=0;break e}o=(A&255)-(d&255)|0}while(!1);return o|0}function WX(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0,We=0,Le=0,Qe=0;Qe=I,I=I+224|0,M=Qe+120|0,G=Qe+80|0,We=Qe,Le=Qe+136|0,A=G,d=A+40|0;do n[A>>2]=0,A=A+4|0;while((A|0)<(d|0));return n[M>>2]=n[u>>2],(f_(0,l,M,We,G)|0)<0?u=-1:((n[o+76>>2]|0)>-1?ae=IYe(o)|0:ae=0,u=n[o>>2]|0,_=u&32,(s[o+74>>0]|0)<1&&(n[o>>2]=u&-33),A=o+48|0,n[A>>2]|0?u=f_(o,l,M,We,G)|0:(d=o+44|0,m=n[d>>2]|0,n[d>>2]=Le,B=o+28|0,n[B>>2]=Le,k=o+20|0,n[k>>2]=Le,n[A>>2]=80,T=o+16|0,n[T>>2]=Le+80,u=f_(o,l,M,We,G)|0,m&&(ex[n[o+36>>2]&7](o,0,0)|0,u=n[k>>2]|0?u:-1,n[d>>2]=m,n[A>>2]=0,n[T>>2]=0,n[B>>2]=0,n[k>>2]=0)),A=n[o>>2]|0,n[o>>2]=A|_,ae|0&&CYe(o),u=A&32|0?-1:u),I=Qe,u|0}function f_(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0,We=0,Le=0,Qe=0,tt=0,Ze=0,ct=0,He=0,Ge=0,Lt=0,qr=0,fr=0,$t=0,Tr=0,Hr=0,cr=0;cr=I,I=I+64|0,fr=cr+16|0,$t=cr,Lt=cr+24|0,Tr=cr+8|0,Hr=cr+20|0,n[fr>>2]=l,ct=(o|0)!=0,He=Lt+40|0,Ge=He,Lt=Lt+39|0,qr=Tr+4|0,B=0,m=0,M=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(Jy()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(!1);if(B=s[l>>0]|0,B<<24>>24)k=l;else{Ze=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Ze=9;break t}case 0:{B=k;break t}default:}tt=k+1|0,n[fr>>2]=tt,B=s[tt>>0]|0,k=tt}t:do if((Ze|0)==9)for(;;){if(Ze=0,(s[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[fr>>2]=k,(s[k>>0]|0)==37)Ze=9;else break}while(!1);if(B=B-l|0,ct&&Ds(o,l,B),B|0){l=k;continue}T=k+1|0,B=(s[T>>0]|0)+-48|0,B>>>0<10?(tt=(s[k+2>>0]|0)==36,Qe=tt?B:-1,M=tt?1:M,T=tt?k+3|0:T):Qe=-1,n[fr>>2]=T,B=s[T>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(_=0,G=B;;){if(B=1<>2]=T,B=s[T>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;G=B}else _=0;while(!1);if(B<<24>>24==42){if(k=T+1|0,B=(s[k>>0]|0)+-48|0,B>>>0<10&&(s[T+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[A+((s[k>>0]|0)+-48<<3)>>2]|0,M=1,T=T+3|0;else{if(M|0){m=-1;break}ct?(M=(n[u>>2]|0)+3&-4,B=n[M>>2]|0,n[u>>2]=M+4,M=0,T=k):(B=0,M=0,T=k)}n[fr>>2]=T,tt=(B|0)<0,B=tt?0-B|0:B,_=tt?_|8192:_}else{if(B=YX(fr)|0,(B|0)<0){m=-1;break}T=n[fr>>2]|0}do if((s[T>>0]|0)==46){if((s[T+1>>0]|0)!=42){n[fr>>2]=T+1,k=YX(fr)|0,T=n[fr>>2]|0;break}if(G=T+2|0,k=(s[G>>0]|0)+-48|0,k>>>0<10&&(s[T+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[A+((s[G>>0]|0)+-48<<3)>>2]|0,T=T+4|0,n[fr>>2]=T;break}if(M|0){m=-1;break e}ct?(tt=(n[u>>2]|0)+3&-4,k=n[tt>>2]|0,n[u>>2]=tt+4):k=0,n[fr>>2]=G,T=G}else k=-1;while(!1);for(Le=0;;){if(((s[T>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(tt=T+1|0,n[fr>>2]=tt,G=s[(s[T>>0]|0)+-65+(5178+(Le*58|0))>>0]|0,ae=G&255,(ae+-1|0)>>>0<8)Le=ae,T=tt;else break}if(!(G<<24>>24)){m=-1;break}We=(Qe|0)>-1;do if(G<<24>>24==19)if(We){m=-1;break e}else Ze=49;else{if(We){n[d+(Qe<<2)>>2]=ae,We=A+(Qe<<3)|0,Qe=n[We+4>>2]|0,Ze=$t,n[Ze>>2]=n[We>>2],n[Ze+4>>2]=Qe,Ze=49;break}if(!ct){m=0;break e}VX($t,ae,u)}while(!1);if((Ze|0)==49&&(Ze=0,!ct)){B=0,l=tt;continue}T=s[T>>0]|0,T=(Le|0)!=0&(T&15|0)==3?T&-33:T,We=_&-65537,Qe=_&8192|0?We:_;t:do switch(T|0){case 110:switch((Le&255)<<24>>24){case 0:{n[n[$t>>2]>>2]=m,B=0,l=tt;continue e}case 1:{n[n[$t>>2]>>2]=m,B=0,l=tt;continue e}case 2:{B=n[$t>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=tt;continue e}case 3:{a[n[$t>>2]>>1]=m,B=0,l=tt;continue e}case 4:{s[n[$t>>2]>>0]=m,B=0,l=tt;continue e}case 6:{n[n[$t>>2]>>2]=m,B=0,l=tt;continue e}case 7:{B=n[$t>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=tt;continue e}default:{B=0,l=tt;continue e}}case 112:{T=120,k=k>>>0>8?k:8,l=Qe|8,Ze=61;break}case 88:case 120:{l=Qe,Ze=61;break}case 111:{T=$t,l=n[T>>2]|0,T=n[T+4>>2]|0,ae=BYe(l,T,He)|0,We=Ge-ae|0,_=0,G=5642,k=(Qe&8|0)==0|(k|0)>(We|0)?k:We+1|0,We=Qe,Ze=67;break}case 105:case 100:if(T=$t,l=n[T>>2]|0,T=n[T+4>>2]|0,(T|0)<0){l=ZP(0,0,l|0,T|0)|0,T=ye,_=$t,n[_>>2]=l,n[_+4>>2]=T,_=1,G=5642,Ze=66;break t}else{_=(Qe&2049|0)!=0&1,G=Qe&2048|0?5643:Qe&1|0?5644:5642,Ze=66;break t}case 117:{T=$t,_=0,G=5642,l=n[T>>2]|0,T=n[T+4>>2]|0,Ze=66;break}case 99:{s[Lt>>0]=n[$t>>2],l=Lt,_=0,G=5642,ae=He,T=1,k=We;break}case 109:{T=vYe(n[(Jy()|0)>>2]|0)|0,Ze=71;break}case 115:{T=n[$t>>2]|0,T=T|0?T:5652,Ze=71;break}case 67:{n[Tr>>2]=n[$t>>2],n[qr>>2]=0,n[$t>>2]=Tr,ae=-1,T=Tr,Ze=75;break}case 83:{l=n[$t>>2]|0,k?(ae=k,T=l,Ze=75):(_s(o,32,B,0,Qe),l=0,Ze=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=DYe(o,+E[$t>>3],B,k,Qe,T)|0,l=tt;continue e}default:_=0,G=5642,ae=He,T=k,k=Qe}while(!1);t:do if((Ze|0)==61)Qe=$t,Le=n[Qe>>2]|0,Qe=n[Qe+4>>2]|0,ae=wYe(Le,Qe,He,T&32)|0,G=(l&8|0)==0|(Le|0)==0&(Qe|0)==0,_=G?0:2,G=G?5642:5642+(T>>4)|0,We=l,l=Le,T=Qe,Ze=67;else if((Ze|0)==66)ae=zy(l,T,He)|0,We=Qe,Ze=67;else if((Ze|0)==71)Ze=0,Qe=SYe(T,0,k)|0,Le=(Qe|0)==0,l=T,_=0,G=5642,ae=Le?T+k|0:Qe,T=Le?k:Qe-T|0,k=We;else if((Ze|0)==75){for(Ze=0,G=T,l=0,k=0;_=n[G>>2]|0,!(!_||(k=KX(Hr,_)|0,(k|0)<0|k>>>0>(ae-l|0)>>>0));)if(l=k+l|0,ae>>>0>l>>>0)G=G+4|0;else break;if((k|0)<0){m=-1;break e}if(_s(o,32,B,l,Qe),!l)l=0,Ze=84;else for(_=0;;){if(k=n[T>>2]|0,!k){Ze=84;break t}if(k=KX(Hr,k)|0,_=k+_|0,(_|0)>(l|0)){Ze=84;break t}if(Ds(o,Hr,k),_>>>0>=l>>>0){Ze=84;break}else T=T+4|0}}while(!1);if((Ze|0)==67)Ze=0,T=(l|0)!=0|(T|0)!=0,Qe=(k|0)!=0|T,T=((T^1)&1)+(Ge-ae)|0,l=Qe?ae:He,ae=He,T=Qe?(k|0)>(T|0)?k:T:k,k=(k|0)>-1?We&-65537:We;else if((Ze|0)==84){Ze=0,_s(o,32,B,l,Qe^8192),B=(B|0)>(l|0)?B:l,l=tt;continue}Le=ae-l|0,We=(T|0)<(Le|0)?Le:T,Qe=We+_|0,B=(B|0)<(Qe|0)?Qe:B,_s(o,32,B,Qe,k),Ds(o,G,_),_s(o,48,B,Qe,k^65536),_s(o,48,We,Le,0),Ds(o,l,Le),_s(o,32,B,Qe,k^8192),l=tt}e:do if((Ze|0)==87&&!o)if(!M)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(VX(A+(m<<3)|0,l,u),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(!1);return I=cr,m|0}function IYe(o){return o=o|0,0}function CYe(o){o=o|0}function Ds(o,l,u){o=o|0,l=l|0,u=u|0,n[o>>2]&32||NYe(l,u,o)|0}function YX(o){o=o|0;var l=0,u=0,A=0;if(u=n[o>>2]|0,A=(s[u>>0]|0)+-48|0,A>>>0<10){l=0;do l=A+(l*10|0)|0,u=u+1|0,n[o>>2]=u,A=(s[u>>0]|0)+-48|0;while(A>>>0<10)}else l=0;return l|0}function VX(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{A=(n[u>>2]|0)+3&-4,l=n[A>>2]|0,n[u>>2]=A+4,n[o>>2]=l;break e}case 10:{A=(n[u>>2]|0)+3&-4,l=n[A>>2]|0,n[u>>2]=A+4,A=o,n[A>>2]=l,n[A+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{A=(n[u>>2]|0)+3&-4,l=n[A>>2]|0,n[u>>2]=A+4,A=o,n[A>>2]=l,n[A+4>>2]=0;break e}case 12:{A=(n[u>>2]|0)+7&-8,l=A,d=n[l>>2]|0,l=n[l+4>>2]|0,n[u>>2]=A+8,A=o,n[A>>2]=d,n[A+4>>2]=l;break e}case 13:{d=(n[u>>2]|0)+3&-4,A=n[d>>2]|0,n[u>>2]=d+4,A=(A&65535)<<16>>16,d=o,n[d>>2]=A,n[d+4>>2]=((A|0)<0)<<31>>31;break e}case 14:{d=(n[u>>2]|0)+3&-4,A=n[d>>2]|0,n[u>>2]=d+4,d=o,n[d>>2]=A&65535,n[d+4>>2]=0;break e}case 15:{d=(n[u>>2]|0)+3&-4,A=n[d>>2]|0,n[u>>2]=d+4,A=(A&255)<<24>>24,d=o,n[d>>2]=A,n[d+4>>2]=((A|0)<0)<<31>>31;break e}case 16:{d=(n[u>>2]|0)+3&-4,A=n[d>>2]|0,n[u>>2]=d+4,d=o,n[d>>2]=A&255,n[d+4>>2]=0;break e}case 17:{d=(n[u>>2]|0)+7&-8,m=+E[d>>3],n[u>>2]=d+8,E[o>>3]=m;break e}case 18:{d=(n[u>>2]|0)+7&-8,m=+E[d>>3],n[u>>2]=d+8,E[o>>3]=m;break e}default:break e}while(!1);while(!1)}function wYe(o,l,u,A){if(o=o|0,l=l|0,u=u|0,A=A|0,!((o|0)==0&(l|0)==0))do u=u+-1|0,s[u>>0]=c[5694+(o&15)>>0]|0|A,o=XP(o|0,l|0,4)|0,l=ye;while(!((o|0)==0&(l|0)==0));return u|0}function BYe(o,l,u){if(o=o|0,l=l|0,u=u|0,!((o|0)==0&(l|0)==0))do u=u+-1|0,s[u>>0]=o&7|48,o=XP(o|0,l|0,3)|0,l=ye;while(!((o|0)==0&(l|0)==0));return u|0}function zy(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;if(l>>>0>0|(l|0)==0&o>>>0>4294967295){for(;A=g_(o|0,l|0,10,0)|0,u=u+-1|0,s[u>>0]=A&255|48,A=o,o=h_(o|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&A>>>0>4294967295;)l=ye;l=o}else l=o;if(l)for(;u=u+-1|0,s[u>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return u|0}function vYe(o){return o=o|0,QYe(o,n[(kYe()|0)+188>>2]|0)|0}function SYe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;m=l&255,A=(u|0)!=0;e:do if(A&(o&3|0)!=0)for(d=l&255;;){if((s[o>>0]|0)==d<<24>>24){B=6;break e}if(o=o+1|0,u=u+-1|0,A=(u|0)!=0,!(A&(o&3|0)!=0)){B=5;break}}else B=5;while(!1);(B|0)==5&&(A?B=6:u=0);e:do if((B|0)==6&&(d=l&255,(s[o>>0]|0)!=d<<24>>24)){A=_e(m,16843009)|0;t:do if(u>>>0>3){for(;m=n[o>>2]^A,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(o=o+4|0,u=u+-4|0,u>>>0<=3){B=11;break t}}else B=11;while(!1);if((B|0)==11&&!u){u=0;break}for(;;){if((s[o>>0]|0)==d<<24>>24)break e;if(o=o+1|0,u=u+-1|0,!u){u=0;break}}}while(!1);return(u|0?o:0)|0}function _s(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0;if(B=I,I=I+256|0,m=B,(u|0)>(A|0)&(d&73728|0)==0){if(d=u-A|0,Xy(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=u-A|0;do Ds(o,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}Ds(o,m,d)}I=B}function KX(o,l){return o=o|0,l=l|0,o?o=PYe(o,l,0)|0:o=0,o|0}function DYe(o,l,u,A,d,m){o=o|0,l=+l,u=u|0,A=A|0,d=d|0,m=m|0;var B=0,k=0,T=0,_=0,M=0,G=0,ae=0,We=0,Le=0,Qe=0,tt=0,Ze=0,ct=0,He=0,Ge=0,Lt=0,qr=0,fr=0,$t=0,Tr=0,Hr=0,cr=0,Hn=0;Hn=I,I=I+560|0,T=Hn+8|0,tt=Hn,cr=Hn+524|0,Hr=cr,_=Hn+512|0,n[tt>>2]=0,Tr=_+12|0,JX(l)|0,(ye|0)<0?(l=-l,fr=1,qr=5659):(fr=(d&2049|0)!=0&1,qr=d&2048|0?5662:d&1|0?5665:5660),JX(l)|0,$t=ye&2146435072;do if($t>>>0<2146435072|($t|0)==2146435072&!1){if(We=+bYe(l,tt)*2,B=We!=0,B&&(n[tt>>2]=(n[tt>>2]|0)+-1),ct=m|32,(ct|0)==97){Le=m&32,ae=Le|0?qr+9|0:qr,G=fr|2,B=12-A|0;do if(A>>>0>11|(B|0)==0)l=We;else{l=8;do B=B+-1|0,l=l*16;while(B|0);if((s[ae>>0]|0)==45){l=-(l+(-We-l));break}else{l=We+l-l;break}}while(!1);k=n[tt>>2]|0,B=(k|0)<0?0-k|0:k,B=zy(B,((B|0)<0)<<31>>31,Tr)|0,(B|0)==(Tr|0)&&(B=_+11|0,s[B>>0]=48),s[B+-1>>0]=(k>>31&2)+43,M=B+-2|0,s[M>>0]=m+15,_=(A|0)<1,T=(d&8|0)==0,B=cr;do $t=~~l,k=B+1|0,s[B>>0]=c[5694+$t>>0]|Le,l=(l-+($t|0))*16,(k-Hr|0)==1&&!(T&(_&l==0))?(s[k>>0]=46,B=B+2|0):B=k;while(l!=0);$t=B-Hr|0,Hr=Tr-M|0,Tr=(A|0)!=0&($t+-2|0)<(A|0)?A+2|0:$t,B=Hr+G+Tr|0,_s(o,32,u,B,d),Ds(o,ae,G),_s(o,48,u,B,d^65536),Ds(o,cr,$t),_s(o,48,Tr-$t|0,0,0),Ds(o,M,Hr),_s(o,32,u,B,d^8192);break}k=(A|0)<0?6:A,B?(B=(n[tt>>2]|0)+-28|0,n[tt>>2]=B,l=We*268435456):(l=We,B=n[tt>>2]|0),$t=(B|0)<0?T:T+288|0,T=$t;do Ge=~~l>>>0,n[T>>2]=Ge,T=T+4|0,l=(l-+(Ge>>>0))*1e9;while(l!=0);if((B|0)>0)for(_=$t,G=T;;){if(M=(B|0)<29?B:29,B=G+-4|0,B>>>0>=_>>>0){T=0;do He=t$(n[B>>2]|0,0,M|0)|0,He=p_(He|0,ye|0,T|0,0)|0,Ge=ye,Ze=g_(He|0,Ge|0,1e9,0)|0,n[B>>2]=Ze,T=h_(He|0,Ge|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=_>>>0);T&&(_=_+-4|0,n[_>>2]=T)}for(T=G;!(T>>>0<=_>>>0);)if(B=T+-4|0,!(n[B>>2]|0))T=B;else break;if(B=(n[tt>>2]|0)-M|0,n[tt>>2]=B,(B|0)>0)G=T;else break}else _=$t;if((B|0)<0){A=((k+25|0)/9|0)+1|0,Qe=(ct|0)==102;do{if(Le=0-B|0,Le=(Le|0)<9?Le:9,_>>>0>>0){M=(1<>>Le,ae=0,B=_;do Ge=n[B>>2]|0,n[B>>2]=(Ge>>>Le)+ae,ae=_e(Ge&M,G)|0,B=B+4|0;while(B>>>0>>0);B=n[_>>2]|0?_:_+4|0,ae?(n[T>>2]=ae,_=B,B=T+4|0):(_=B,B=T)}else _=n[_>>2]|0?_:_+4|0,B=T;T=Qe?$t:_,T=(B-T>>2|0)>(A|0)?T+(A<<2)|0:B,B=(n[tt>>2]|0)+Le|0,n[tt>>2]=B}while((B|0)<0);B=_,A=T}else B=_,A=T;if(Ge=$t,B>>>0>>0){if(T=(Ge-B>>2)*9|0,M=n[B>>2]|0,M>>>0>=10){_=10;do _=_*10|0,T=T+1|0;while(M>>>0>=_>>>0)}}else T=0;if(Qe=(ct|0)==103,Ze=(k|0)!=0,_=k-((ct|0)!=102?T:0)+((Ze&Qe)<<31>>31)|0,(_|0)<(((A-Ge>>2)*9|0)+-9|0)){if(_=_+9216|0,Le=$t+4+(((_|0)/9|0)+-1024<<2)|0,_=((_|0)%9|0)+1|0,(_|0)<9){M=10;do M=M*10|0,_=_+1|0;while((_|0)!=9)}else M=10;if(G=n[Le>>2]|0,ae=(G>>>0)%(M>>>0)|0,_=(Le+4|0)==(A|0),_&(ae|0)==0)_=Le;else if(We=((G>>>0)/(M>>>0)|0)&1|0?9007199254740994:9007199254740992,He=(M|0)/2|0,l=ae>>>0>>0?.5:_&(ae|0)==(He|0)?1:1.5,fr&&(He=(s[qr>>0]|0)==45,l=He?-l:l,We=He?-We:We),_=G-ae|0,n[Le>>2]=_,We+l!=We){if(He=_+M|0,n[Le>>2]=He,He>>>0>999999999)for(T=Le;_=T+-4|0,n[T>>2]=0,_>>>0>>0&&(B=B+-4|0,n[B>>2]=0),He=(n[_>>2]|0)+1|0,n[_>>2]=He,He>>>0>999999999;)T=_;else _=Le;if(T=(Ge-B>>2)*9|0,G=n[B>>2]|0,G>>>0>=10){M=10;do M=M*10|0,T=T+1|0;while(G>>>0>=M>>>0)}}else _=Le;_=_+4|0,_=A>>>0>_>>>0?_:A,He=B}else _=A,He=B;for(ct=_;;){if(ct>>>0<=He>>>0){tt=0;break}if(B=ct+-4|0,!(n[B>>2]|0))ct=B;else{tt=1;break}}A=0-T|0;do if(Qe)if(B=((Ze^1)&1)+k|0,(B|0)>(T|0)&(T|0)>-5?(M=m+-1|0,k=B+-1-T|0):(M=m+-2|0,k=B+-1|0),B=d&8,B)Le=B;else{if(tt&&(Lt=n[ct+-4>>2]|0,(Lt|0)!=0))if((Lt>>>0)%10|0)_=0;else{_=0,B=10;do B=B*10|0,_=_+1|0;while(!((Lt>>>0)%(B>>>0)|0|0))}else _=9;if(B=((ct-Ge>>2)*9|0)+-9|0,(M|32|0)==102){Le=B-_|0,Le=(Le|0)>0?Le:0,k=(k|0)<(Le|0)?k:Le,Le=0;break}else{Le=B+T-_|0,Le=(Le|0)>0?Le:0,k=(k|0)<(Le|0)?k:Le,Le=0;break}}else M=m,Le=d&8;while(!1);if(Qe=k|Le,G=(Qe|0)!=0&1,ae=(M|32|0)==102,ae)Ze=0,B=(T|0)>0?T:0;else{if(B=(T|0)<0?A:T,B=zy(B,((B|0)<0)<<31>>31,Tr)|0,_=Tr,(_-B|0)<2)do B=B+-1|0,s[B>>0]=48;while((_-B|0)<2);s[B+-1>>0]=(T>>31&2)+43,B=B+-2|0,s[B>>0]=M,Ze=B,B=_-B|0}if(B=fr+1+k+G+B|0,_s(o,32,u,B,d),Ds(o,qr,fr),_s(o,48,u,B,d^65536),ae){M=He>>>0>$t>>>0?$t:He,Le=cr+9|0,G=Le,ae=cr+8|0,_=M;do{if(T=zy(n[_>>2]|0,0,Le)|0,(_|0)==(M|0))(T|0)==(Le|0)&&(s[ae>>0]=48,T=ae);else if(T>>>0>cr>>>0){Xy(cr|0,48,T-Hr|0)|0;do T=T+-1|0;while(T>>>0>cr>>>0)}Ds(o,T,G-T|0),_=_+4|0}while(_>>>0<=$t>>>0);if(Qe|0&&Ds(o,5710,1),_>>>0>>0&(k|0)>0)for(;;){if(T=zy(n[_>>2]|0,0,Le)|0,T>>>0>cr>>>0){Xy(cr|0,48,T-Hr|0)|0;do T=T+-1|0;while(T>>>0>cr>>>0)}if(Ds(o,T,(k|0)<9?k:9),_=_+4|0,T=k+-9|0,_>>>0>>0&(k|0)>9)k=T;else{k=T;break}}_s(o,48,k+9|0,9,0)}else{if(Qe=tt?ct:He+4|0,(k|0)>-1){tt=cr+9|0,Le=(Le|0)==0,A=tt,G=0-Hr|0,ae=cr+8|0,M=He;do{T=zy(n[M>>2]|0,0,tt)|0,(T|0)==(tt|0)&&(s[ae>>0]=48,T=ae);do if((M|0)==(He|0)){if(_=T+1|0,Ds(o,T,1),Le&(k|0)<1){T=_;break}Ds(o,5710,1),T=_}else{if(T>>>0<=cr>>>0)break;Xy(cr|0,48,T+G|0)|0;do T=T+-1|0;while(T>>>0>cr>>>0)}while(!1);Hr=A-T|0,Ds(o,T,(k|0)>(Hr|0)?Hr:k),k=k-Hr|0,M=M+4|0}while(M>>>0>>0&(k|0)>-1)}_s(o,48,k+18|0,18,0),Ds(o,Ze,Tr-Ze|0)}_s(o,32,u,B,d^8192)}else cr=(m&32|0)!=0,B=fr+3|0,_s(o,32,u,B,d&-65537),Ds(o,qr,fr),Ds(o,l!=l|!1?cr?5686:5690:cr?5678:5682,3),_s(o,32,u,B,d^8192);while(!1);return I=Hn,((B|0)<(u|0)?u:B)|0}function JX(o){o=+o;var l=0;return E[S>>3]=o,l=n[S>>2]|0,ye=n[S+4>>2]|0,l|0}function bYe(o,l){return o=+o,l=l|0,+ +zX(o,l)}function zX(o,l){o=+o,l=l|0;var u=0,A=0,d=0;switch(E[S>>3]=o,u=n[S>>2]|0,A=n[S+4>>2]|0,d=XP(u|0,A|0,52)|0,d&2047){case 0:{o!=0?(o=+zX(o*18446744073709552e3,l),u=(n[l>>2]|0)+-64|0):u=0,n[l>>2]=u;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[S>>2]=u,n[S+4>>2]=A&-2146435073|1071644672,o=+E[S>>3]}return+o}function PYe(o,l,u){o=o|0,l=l|0,u=u|0;do if(o){if(l>>>0<128){s[o>>0]=l,o=1;break}if(!(n[n[(xYe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){s[o>>0]=l,o=1;break}else{n[(Jy()|0)>>2]=84,o=-1;break}if(l>>>0<2048){s[o>>0]=l>>>6|192,s[o+1>>0]=l&63|128,o=2;break}if(l>>>0<55296|(l&-8192|0)==57344){s[o>>0]=l>>>12|224,s[o+1>>0]=l>>>6&63|128,s[o+2>>0]=l&63|128,o=3;break}if((l+-65536|0)>>>0<1048576){s[o>>0]=l>>>18|240,s[o+1>>0]=l>>>12&63|128,s[o+2>>0]=l>>>6&63|128,s[o+3>>0]=l&63|128,o=4;break}else{n[(Jy()|0)>>2]=84,o=-1;break}}else o=1;while(!1);return o|0}function xYe(){return u_()|0}function kYe(){return u_()|0}function QYe(o,l){o=o|0,l=l|0;var u=0,A=0;for(A=0;;){if((c[5712+A>>0]|0)==(o|0)){o=2;break}if(u=A+1|0,(u|0)==87){u=5800,A=87,o=5;break}else A=u}if((o|0)==2&&(A?(u=5800,o=5):u=5800),(o|0)==5)for(;;){do o=u,u=u+1|0;while(s[o>>0]|0);if(A=A+-1|0,A)o=5;else break}return TYe(u,n[l+20>>2]|0)|0}function TYe(o,l){return o=o|0,l=l|0,RYe(o,l)|0}function RYe(o,l){return o=o|0,l=l|0,l?l=FYe(n[l>>2]|0,n[l+4>>2]|0,o)|0:l=0,(l|0?l:o)|0}function FYe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0;ae=(n[o>>2]|0)+1794895138|0,m=fd(n[o+8>>2]|0,ae)|0,A=fd(n[o+12>>2]|0,ae)|0,d=fd(n[o+16>>2]|0,ae)|0;e:do if(m>>>0>>2>>>0&&(G=l-(m<<2)|0,A>>>0>>0&d>>>0>>0)&&!((d|A)&3|0)){for(G=A>>>2,M=d>>>2,_=0;;){if(k=m>>>1,T=_+k|0,B=T<<1,d=B+G|0,A=fd(n[o+(d<<2)>>2]|0,ae)|0,d=fd(n[o+(d+1<<2)>>2]|0,ae)|0,!(d>>>0>>0&A>>>0<(l-d|0)>>>0)){A=0;break e}if(s[o+(d+A)>>0]|0){A=0;break e}if(A=GX(u,o+d|0)|0,!A)break;if(A=(A|0)<0,(m|0)==1){A=0;break e}else _=A?_:T,m=A?k:m-k|0}A=B+M|0,d=fd(n[o+(A<<2)>>2]|0,ae)|0,A=fd(n[o+(A+1<<2)>>2]|0,ae)|0,A>>>0>>0&d>>>0<(l-A|0)>>>0?A=s[o+(A+d)>>0]|0?0:o+A|0:A=0}else A=0;while(!1);return A|0}function fd(o,l){o=o|0,l=l|0;var u=0;return u=i$(o|0)|0,(l|0?u:o)|0}function NYe(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0,k=0;A=u+16|0,d=n[A>>2]|0,d?m=5:OYe(u)|0?A=0:(d=n[A>>2]|0,m=5);e:do if((m|0)==5){if(k=u+20|0,B=n[k>>2]|0,A=B,(d-B|0)>>>0>>0){A=ex[n[u+36>>2]&7](u,o,l)|0;break}t:do if((s[u+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=o;break t}if(d=B+-1|0,(s[o+d>>0]|0)==10)break;B=d}if(A=ex[n[u+36>>2]&7](u,o,B)|0,A>>>0>>0)break e;m=B,d=o+B|0,l=l-B|0,A=n[k>>2]|0}else m=0,d=o;while(!1);Qr(A|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,A=m+l|0}while(!1);return A|0}function OYe(o){o=o|0;var l=0,u=0;return l=o+74|0,u=s[l>>0]|0,s[l>>0]=u+255|u,l=n[o>>2]|0,l&8?(n[o>>2]=l|32,o=-1):(n[o+8>>2]=0,n[o+4>>2]=0,u=n[o+44>>2]|0,n[o+28>>2]=u,n[o+20>>2]=u,n[o+16>>2]=u+(n[o+48>>2]|0),o=0),o|0}function $n(o,l){o=y(o),l=y(l);var u=0,A=0;u=ZX(o)|0;do if((u&2147483647)>>>0<=2139095040){if(A=ZX(l)|0,(A&2147483647)>>>0<=2139095040)if((A^u|0)<0){o=(u|0)<0?l:o;break}else{o=o>2]=o,n[S>>2]|0|0}function Ad(o,l){o=y(o),l=y(l);var u=0,A=0;u=XX(o)|0;do if((u&2147483647)>>>0<=2139095040){if(A=XX(l)|0,(A&2147483647)>>>0<=2139095040)if((A^u|0)<0){o=(u|0)<0?o:l;break}else{o=o>2]=o,n[S>>2]|0|0}function A_(o,l){o=y(o),l=y(l);var u=0,A=0,d=0,m=0,B=0,k=0,T=0,_=0;m=(h[S>>2]=o,n[S>>2]|0),k=(h[S>>2]=l,n[S>>2]|0),u=m>>>23&255,B=k>>>23&255,T=m&-2147483648,d=k<<1;e:do if(d|0&&!((u|0)==255|((LYe(l)|0)&2147483647)>>>0>2139095040)){if(A=m<<1,A>>>0<=d>>>0)return l=y(o*y(0)),y((A|0)==(d|0)?l:o);if(u)A=m&8388607|8388608;else{if(u=m<<9,(u|0)>-1){A=u,u=0;do u=u+-1|0,A=A<<1;while((A|0)>-1)}else u=0;A=m<<1-u}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=A-k|0,m=(d|0)>-1;t:do if((u|0)>(B|0)){for(;;){if(m)if(d)A=d;else break;if(A=A<<1,u=u+-1|0,d=A-k|0,m=(d|0)>-1,(u|0)<=(B|0))break t}l=y(o*y(0));break e}while(!1);if(m)if(d)A=d;else{l=y(o*y(0));break}if(A>>>0<8388608)do A=A<<1,u=u+-1|0;while(A>>>0<8388608);(u|0)>0?u=A+-8388608|u<<23:u=A>>>(1-u|0),l=(n[S>>2]=u|T,y(h[S>>2]))}else _=3;while(!1);return(_|0)==3&&(l=y(o*l),l=y(l/l)),y(l)}function LYe(o){return o=y(o),h[S>>2]=o,n[S>>2]|0|0}function MYe(o,l){return o=o|0,l=l|0,WX(n[582]|0,o,l)|0}function sn(o){o=o|0,Nt()}function Zy(o){o=o|0}function _Ye(o,l){return o=o|0,l=l|0,0}function UYe(o){return o=o|0,($X(o+4|0)|0)==-1?(op[n[(n[o>>2]|0)+8>>2]&127](o),o=1):o=0,o|0}function $X(o){o=o|0;var l=0;return l=n[o>>2]|0,n[o>>2]=l+-1,l+-1|0}function Wh(o){o=o|0,UYe(o)|0&&HYe(o)}function HYe(o){o=o|0;var l=0;l=o+8|0,n[l>>2]|0&&($X(l)|0)!=-1||op[n[(n[o>>2]|0)+16>>2]&127](o)}function Jt(o){o=o|0;var l=0;for(l=o|0?o:1;o=KP(l)|0,!(o|0);){if(o=qYe()|0,!o){o=0;break}h$[o&0]()}return o|0}function e$(o){return o=o|0,Jt(o)|0}function Et(o){o=o|0,JP(o)}function jYe(o){o=o|0,(s[o+11>>0]|0)<0&&Et(n[o>>2]|0)}function qYe(){var o=0;return o=n[2923]|0,n[2923]=o+0,o|0}function GYe(){}function ZP(o,l,u,A){return o=o|0,l=l|0,u=u|0,A=A|0,A=l-A-(u>>>0>o>>>0|0)>>>0,ye=A,o-u>>>0|0|0}function p_(o,l,u,A){return o=o|0,l=l|0,u=u|0,A=A|0,u=o+u>>>0,ye=l+A+(u>>>0>>0|0)>>>0,u|0|0}function Xy(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0,B=0;if(m=o+u|0,l=l&255,(u|0)>=67){for(;o&3;)s[o>>0]=l,o=o+1|0;for(A=m&-4|0,d=A-64|0,B=l|l<<8|l<<16|l<<24;(o|0)<=(d|0);)n[o>>2]=B,n[o+4>>2]=B,n[o+8>>2]=B,n[o+12>>2]=B,n[o+16>>2]=B,n[o+20>>2]=B,n[o+24>>2]=B,n[o+28>>2]=B,n[o+32>>2]=B,n[o+36>>2]=B,n[o+40>>2]=B,n[o+44>>2]=B,n[o+48>>2]=B,n[o+52>>2]=B,n[o+56>>2]=B,n[o+60>>2]=B,o=o+64|0;for(;(o|0)<(A|0);)n[o>>2]=B,o=o+4|0}for(;(o|0)<(m|0);)s[o>>0]=l,o=o+1|0;return m-u|0}function t$(o,l,u){return o=o|0,l=l|0,u=u|0,(u|0)<32?(ye=l<>>32-u,o<>>u,o>>>u|(l&(1<>>u-32|0)}function Qr(o,l,u){o=o|0,l=l|0,u=u|0;var A=0,d=0,m=0;if((u|0)>=8192)return MA(o|0,l|0,u|0)|0;if(m=o|0,d=o+u|0,(o&3)==(l&3)){for(;o&3;){if(!u)return m|0;s[o>>0]=s[l>>0]|0,o=o+1|0,l=l+1|0,u=u-1|0}for(u=d&-4|0,A=u-64|0;(o|0)<=(A|0);)n[o>>2]=n[l>>2],n[o+4>>2]=n[l+4>>2],n[o+8>>2]=n[l+8>>2],n[o+12>>2]=n[l+12>>2],n[o+16>>2]=n[l+16>>2],n[o+20>>2]=n[l+20>>2],n[o+24>>2]=n[l+24>>2],n[o+28>>2]=n[l+28>>2],n[o+32>>2]=n[l+32>>2],n[o+36>>2]=n[l+36>>2],n[o+40>>2]=n[l+40>>2],n[o+44>>2]=n[l+44>>2],n[o+48>>2]=n[l+48>>2],n[o+52>>2]=n[l+52>>2],n[o+56>>2]=n[l+56>>2],n[o+60>>2]=n[l+60>>2],o=o+64|0,l=l+64|0;for(;(o|0)<(u|0);)n[o>>2]=n[l>>2],o=o+4|0,l=l+4|0}else for(u=d-4|0;(o|0)<(u|0);)s[o>>0]=s[l>>0]|0,s[o+1>>0]=s[l+1>>0]|0,s[o+2>>0]=s[l+2>>0]|0,s[o+3>>0]=s[l+3>>0]|0,o=o+4|0,l=l+4|0;for(;(o|0)<(d|0);)s[o>>0]=s[l>>0]|0,o=o+1|0,l=l+1|0;return m|0}function r$(o){o=o|0;var l=0;return l=s[N+(o&255)>>0]|0,(l|0)<8?l|0:(l=s[N+(o>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=s[N+(o>>16&255)>>0]|0,(l|0)<8?l+16|0:(s[N+(o>>>24)>>0]|0)+24|0))}function n$(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0;var m=0,B=0,k=0,T=0,_=0,M=0,G=0,ae=0,We=0,Le=0;if(M=o,T=l,_=T,B=u,ae=A,k=ae,!_)return m=(d|0)!=0,k?m?(n[d>>2]=o|0,n[d+4>>2]=l&0,ae=0,d=0,ye=ae,d|0):(ae=0,d=0,ye=ae,d|0):(m&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),ae=0,d=(M>>>0)/(B>>>0)>>>0,ye=ae,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(b(k|0)|0)-(b(_|0)|0)|0,m>>>0<=31){G=m+1|0,k=31-m|0,l=m-31>>31,B=G,o=M>>>(G>>>0)&l|_<>>(G>>>0)&l,m=0,k=M<>2]=o|0,n[d+4>>2]=T|l&0,ae=0,d=0,ye=ae,d|0):(ae=0,d=0,ye=ae,d|0)}if(m=B-1|0,m&B|0){k=(b(B|0)|0)+33-(b(_|0)|0)|0,Le=64-k|0,G=32-k|0,T=G>>31,We=k-32|0,l=We>>31,B=k,o=G-1>>31&_>>>(We>>>0)|(_<>>(k>>>0))&l,l=l&_>>>(k>>>0),m=M<>>(We>>>0))&T|M<>31;break}return d|0&&(n[d>>2]=m&M,n[d+4>>2]=0),(B|0)==1?(We=T|l&0,Le=o|0|0,ye=We,Le|0):(Le=r$(B|0)|0,We=_>>>(Le>>>0)|0,Le=_<<32-Le|M>>>(Le>>>0)|0,ye=We,Le|0)}else{if(m)return d|0&&(n[d>>2]=(_>>>0)%(B>>>0),n[d+4>>2]=0),We=0,Le=(_>>>0)/(B>>>0)>>>0,ye=We,Le|0;if(!M)return d|0&&(n[d>>2]=0,n[d+4>>2]=(_>>>0)%(k>>>0)),We=0,Le=(_>>>0)/(k>>>0)>>>0,ye=We,Le|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=o|0,n[d+4>>2]=m&_|l&0),We=0,Le=_>>>((r$(k|0)|0)>>>0),ye=We,Le|0;if(m=(b(k|0)|0)-(b(_|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,o=_<>>(l>>>0),l=_>>>(l>>>0),m=0,k=M<>2]=o|0,n[d+4>>2]=T|l&0,We=0,Le=0,ye=We,Le|0):(We=0,Le=0,ye=We,Le|0)}while(!1);if(!B)_=k,T=0,k=0;else{G=u|0|0,M=ae|A&0,_=p_(G|0,M|0,-1,-1)|0,u=ye,T=k,k=0;do A=T,T=m>>>31|T<<1,m=k|m<<1,A=o<<1|A>>>31|0,ae=o>>>31|l<<1|0,ZP(_|0,u|0,A|0,ae|0)|0,Le=ye,We=Le>>31|((Le|0)<0?-1:0)<<1,k=We&1,o=ZP(A|0,ae|0,We&G|0,(((Le|0)<0?-1:0)>>31|((Le|0)<0?-1:0)<<1)&M|0)|0,l=ye,B=B-1|0;while(B|0);_=T,T=0}return B=0,d|0&&(n[d>>2]=o,n[d+4>>2]=l),We=(m|0)>>>31|(_|B)<<1|(B<<1|m>>>31)&0|T,Le=(m<<1|0)&-2|k,ye=We,Le|0}function h_(o,l,u,A){return o=o|0,l=l|0,u=u|0,A=A|0,n$(o,l,u,A,0)|0}function Yh(o){o=o|0;var l=0,u=0;return u=o+15&-16|0,l=n[C>>2]|0,o=l+u|0,(u|0)>0&(o|0)<(l|0)|(o|0)<0?(oe()|0,pu(12),-1):(n[C>>2]=o,(o|0)>($()|0)&&!(Z()|0)?(n[C>>2]=l,pu(12),-1):l|0)}function Q2(o,l,u){o=o|0,l=l|0,u=u|0;var A=0;if((l|0)<(o|0)&(o|0)<(l+u|0)){for(A=o,l=l+u|0,o=o+u|0;(u|0)>0;)o=o-1|0,l=l-1|0,u=u-1|0,s[o>>0]=s[l>>0]|0;o=A}else Qr(o,l,u)|0;return o|0}function g_(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0;var d=0,m=0;return m=I,I=I+16|0,d=m|0,n$(o,l,u,A,d)|0,I=m,ye=n[d+4>>2]|0,n[d>>2]|0|0}function i$(o){return o=o|0,(o&255)<<24|(o>>8&255)<<16|(o>>16&255)<<8|o>>>24|0}function WYe(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,s$[o&1](l|0,u|0,A|0,d|0,m|0)}function YYe(o,l,u){o=o|0,l=l|0,u=y(u),o$[o&1](l|0,y(u))}function VYe(o,l,u){o=o|0,l=l|0,u=+u,a$[o&31](l|0,+u)}function KYe(o,l,u,A){return o=o|0,l=l|0,u=y(u),A=y(A),y(l$[o&0](l|0,y(u),y(A)))}function JYe(o,l){o=o|0,l=l|0,op[o&127](l|0)}function zYe(o,l,u){o=o|0,l=l|0,u=u|0,ap[o&31](l|0,u|0)}function ZYe(o,l){return o=o|0,l=l|0,hd[o&31](l|0)|0}function XYe(o,l,u,A,d){o=o|0,l=l|0,u=+u,A=+A,d=d|0,c$[o&1](l|0,+u,+A,d|0)}function $Ye(o,l,u,A){o=o|0,l=l|0,u=+u,A=+A,RVe[o&1](l|0,+u,+A)}function eVe(o,l,u,A){return o=o|0,l=l|0,u=u|0,A=A|0,ex[o&7](l|0,u|0,A|0)|0}function tVe(o,l,u,A){return o=o|0,l=l|0,u=u|0,A=A|0,+FVe[o&1](l|0,u|0,A|0)}function rVe(o,l){return o=o|0,l=l|0,+u$[o&15](l|0)}function nVe(o,l,u){return o=o|0,l=l|0,u=+u,NVe[o&1](l|0,+u)|0}function iVe(o,l,u){return o=o|0,l=l|0,u=u|0,m_[o&15](l|0,u|0)|0}function sVe(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=+A,d=+d,m=m|0,OVe[o&1](l|0,u|0,+A,+d,m|0)}function oVe(o,l,u,A,d,m,B){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,B=B|0,LVe[o&1](l|0,u|0,A|0,d|0,m|0,B|0)}function aVe(o,l,u){return o=o|0,l=l|0,u=u|0,+f$[o&7](l|0,u|0)}function lVe(o){return o=o|0,tx[o&7]()|0}function cVe(o,l,u,A,d,m){return o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,A$[o&1](l|0,u|0,A|0,d|0,m|0)|0}function uVe(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=+d,MVe[o&1](l|0,u|0,A|0,+d)}function fVe(o,l,u,A,d,m,B){o=o|0,l=l|0,u=u|0,A=y(A),d=d|0,m=y(m),B=B|0,p$[o&1](l|0,u|0,y(A),d|0,y(m),B|0)}function AVe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,F2[o&15](l|0,u|0,A|0)}function pVe(o){o=o|0,h$[o&0]()}function hVe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=+A,g$[o&15](l|0,u|0,+A)}function gVe(o,l,u){return o=o|0,l=+l,u=+u,_Ve[o&1](+l,+u)|0}function dVe(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,y_[o&15](l|0,u|0,A|0,d|0)}function mVe(o,l,u,A,d){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,F(0)}function yVe(o,l){o=o|0,l=y(l),F(1)}function Xa(o,l){o=o|0,l=+l,F(2)}function EVe(o,l,u){return o=o|0,l=y(l),u=y(u),F(3),Xe}function wr(o){o=o|0,F(4)}function T2(o,l){o=o|0,l=l|0,F(5)}function Ll(o){return o=o|0,F(6),0}function IVe(o,l,u,A){o=o|0,l=+l,u=+u,A=A|0,F(7)}function CVe(o,l,u){o=o|0,l=+l,u=+u,F(8)}function wVe(o,l,u){return o=o|0,l=l|0,u=u|0,F(9),0}function BVe(o,l,u){return o=o|0,l=l|0,u=u|0,F(10),0}function pd(o){return o=o|0,F(11),0}function vVe(o,l){return o=o|0,l=+l,F(12),0}function R2(o,l){return o=o|0,l=l|0,F(13),0}function SVe(o,l,u,A,d){o=o|0,l=l|0,u=+u,A=+A,d=d|0,F(14)}function DVe(o,l,u,A,d,m){o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,m=m|0,F(15)}function d_(o,l){return o=o|0,l=l|0,F(16),0}function bVe(){return F(17),0}function PVe(o,l,u,A,d){return o=o|0,l=l|0,u=u|0,A=A|0,d=d|0,F(18),0}function xVe(o,l,u,A){o=o|0,l=l|0,u=u|0,A=+A,F(19)}function kVe(o,l,u,A,d,m){o=o|0,l=l|0,u=y(u),A=A|0,d=y(d),m=m|0,F(20)}function $P(o,l,u){o=o|0,l=l|0,u=u|0,F(21)}function QVe(){F(22)}function $y(o,l,u){o=o|0,l=l|0,u=+u,F(23)}function TVe(o,l){return o=+o,l=+l,F(24),0}function eE(o,l,u,A){o=o|0,l=l|0,u=u|0,A=A|0,F(25)}var s$=[mVe,PGe],o$=[yVe,ky],a$=[Xa,Zg,Oh,h2,g2,d2,m2,Pf,My,y2,xf,Xg,$g,E2,I2,vu,ed,C2,_y,Xa,Xa,Xa,Xa,Xa,Xa,Xa,Xa,Xa,Xa,Xa,Xa,Xa],l$=[EVe],op=[wr,Zy,lLe,cLe,uLe,_Ue,UUe,HUe,nqe,iqe,sqe,gGe,dGe,mGe,LWe,MWe,_We,vl,zg,u2,sr,gc,LP,MP,XOe,yLe,kLe,KLe,uMe,bMe,GMe,s_e,I_e,O_e,X_e,hUe,kUe,i4e,I4e,O4e,X4e,h3e,k3e,J3e,u8e,v8e,U8e,vP,mHe,RHe,XHe,dje,Qje,Xje,l6e,f6e,P6e,Q6e,K6e,aqe,uqe,bqe,Wqe,Wz,D5e,n9e,y9e,R9e,tWe,dWe,bWe,kWe,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr,wr],ap=[T2,Ny,zL,f2,A2,xr,ao,Xi,Ls,vs,Ly,Nh,B2,xP,nd,$L,eM,kP,QP,nM,kf,ne,$3e,p8e,Ije,x5e,$qe,xX,T2,T2,T2,T2],hd=[Ll,hYe,Ry,rd,Hy,da,SP,Lh,w2,XL,bP,jy,TP,iM,Wy,q8e,Nje,kqe,R5e,Fl,Ll,Ll,Ll,Ll,Ll,Ll,Ll,Ll,Ll,Ll,Ll,Ll],c$=[IVe,cM],RVe=[CVe,Z6e],ex=[wVe,qX,gYe,yYe,QMe,l4e,CHe,L9e],FVe=[BVe,rUe],u$=[pd,Mh,PP,tp,uM,v,D,Q,H,V,pd,pd,pd,pd,pd,pd],NVe=[vVe,s6e],m_=[R2,_Ye,RP,rLe,XLe,VMe,l_e,FUe,v4e,P8e,Qy,w9e,R2,R2,R2,R2],OVe=[SVe,FLe],LVe=[DVe,sWe],f$=[d_,tM,Se,Ue,At,yUe,d_,d_],tx=[bVe,Gt,Ty,BP,g6e,N6e,hqe,FWe],A$=[PVe,By],MVe=[xVe,r3e],p$=[kVe,sM],F2=[$P,To,DP,rM,Du,hMe,B_e,y3e,F3e,JL,ZGe,a9e,IWe,$P,$P,$P],h$=[QVe],g$=[$y,ZL,Oy,ep,p2,Su,Uy,td,U4e,LHe,t6e,$y,$y,$y,$y,$y],_Ve=[TVe,tqe],y_=[eE,U_e,Z8e,rje,Gje,C6e,H6e,Cqe,zqe,_5e,WWe,eE,eE,eE,eE,eE];return{_llvm_bswap_i32:i$,dynCall_idd:gVe,dynCall_i:lVe,_i64Subtract:ZP,___udivdi3:h_,dynCall_vif:YYe,setThrew:ua,dynCall_viii:AVe,_bitshift64Lshr:XP,_bitshift64Shl:t$,dynCall_vi:JYe,dynCall_viiddi:sVe,dynCall_diii:tVe,dynCall_iii:iVe,_memset:Xy,_sbrk:Yh,_memcpy:Qr,__GLOBAL__sub_I_Yoga_cpp:a2,dynCall_vii:zYe,___uremdi3:g_,dynCall_vid:VYe,stackAlloc:Ha,_nbind_init:rYe,getTempRet0:UA,dynCall_di:rVe,dynCall_iid:nVe,setTempRet0:_A,_i64Add:p_,dynCall_fiff:KYe,dynCall_iiii:eVe,_emscripten_get_global_libc:pYe,dynCall_viid:hVe,dynCall_viiid:uVe,dynCall_viififi:fVe,dynCall_ii:ZYe,__GLOBAL__sub_I_Binding_cc:y5e,dynCall_viiii:dVe,dynCall_iiiiii:cVe,stackSave:gf,dynCall_viiiii:WYe,__GLOBAL__sub_I_nbind_cc:vr,dynCall_vidd:$Ye,_free:JP,runPostSets:GYe,dynCall_viiiiii:oVe,establishStackSpace:wn,_memmove:Q2,stackRestore:cc,_malloc:KP,__GLOBAL__sub_I_common_cc:Mqe,dynCall_viddi:XYe,dynCall_dii:aVe,dynCall_v:pVe}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function s(){for(var p=0;p<3;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];s();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` -If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(s){r=s(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var Rm=L((rhr,LDe)=>{"use strict";var IPt=NDe(),CPt=ODe(),CW=!1,wW=null;CPt({},function(t,e){if(!CW){if(CW=!0,t)throw t;wW=e}});if(!CW)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");LDe.exports=IPt(wW.bind,wW.lib)});var vW=L((nhr,BW)=>{"use strict";var MDe=t=>Number.isNaN(t)?!1:t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141);BW.exports=MDe;BW.exports.default=MDe});var UDe=L((ihr,_De)=>{"use strict";_De.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var $S=L((shr,SW)=>{"use strict";var wPt=vk(),BPt=vW(),vPt=UDe(),HDe=t=>{if(typeof t!="string"||t.length===0||(t=wPt(t),t.length===0))return 0;t=t.replace(vPt()," ");let e=0;for(let r=0;r=127&&s<=159||s>=768&&s<=879||(s>65535&&r++,e+=BPt(s)?2:1)}return e};SW.exports=HDe;SW.exports.default=HDe});var bW=L((ohr,DW)=>{"use strict";var SPt=$S(),jDe=t=>{let e=0;for(let r of t.split(` -`))e=Math.max(e,SPt(r));return e};DW.exports=jDe;DW.exports.default=jDe});var qDe=L(eD=>{"use strict";var DPt=eD&&eD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(eD,"__esModule",{value:!0});var bPt=DPt(bW()),PW={};eD.default=t=>{if(t.length===0)return{width:0,height:0};if(PW[t])return PW[t];let e=bPt.default(t),r=t.split(` -`).length;return PW[t]={width:e,height:r},{width:e,height:r}}});var GDe=L(tD=>{"use strict";var PPt=tD&&tD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(tD,"__esModule",{value:!0});var bn=PPt(Rm()),xPt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?bn.default.POSITION_TYPE_ABSOLUTE:bn.default.POSITION_TYPE_RELATIVE)},kPt=(t,e)=>{"marginLeft"in e&&t.setMargin(bn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(bn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(bn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(bn.default.EDGE_BOTTOM,e.marginBottom||0)},QPt=(t,e)=>{"paddingLeft"in e&&t.setPadding(bn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(bn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(bn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(bn.default.EDGE_BOTTOM,e.paddingBottom||0)},TPt=(t,e)=>{var r;"flexGrow"in e&&t.setFlexGrow((r=e.flexGrow)!==null&&r!==void 0?r:0),"flexShrink"in e&&t.setFlexShrink(typeof e.flexShrink=="number"?e.flexShrink:1),"flexDirection"in e&&(e.flexDirection==="row"&&t.setFlexDirection(bn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(bn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(bn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(bn.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in e&&(typeof e.flexBasis=="number"?t.setFlexBasis(e.flexBasis):typeof e.flexBasis=="string"?t.setFlexBasisPercent(Number.parseInt(e.flexBasis,10)):t.setFlexBasis(NaN)),"alignItems"in e&&((e.alignItems==="stretch"||!e.alignItems)&&t.setAlignItems(bn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(bn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(bn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(bn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(bn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(bn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(bn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(bn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(bn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(bn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(bn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(bn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(bn.default.JUSTIFY_SPACE_AROUND))},RPt=(t,e)=>{var r,s;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((s=e.minHeight)!==null&&s!==void 0?s:0))},FPt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?bn.default.DISPLAY_FLEX:bn.default.DISPLAY_NONE)},NPt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(bn.default.EDGE_TOP,r),t.setBorder(bn.default.EDGE_BOTTOM,r),t.setBorder(bn.default.EDGE_LEFT,r),t.setBorder(bn.default.EDGE_RIGHT,r)}};tD.default=(t,e={})=>{xPt(t,e),kPt(t,e),QPt(t,e),TPt(t,e),RPt(t,e),FPt(t,e),NPt(t,e)}});var VDe=L((chr,YDe)=>{"use strict";var rD=$S(),OPt=vk(),LPt=pk(),kW=new Set(["\x1B","\x9B"]),MPt=39,WDe=t=>`${kW.values().next().value}[${t}m`,_Pt=t=>t.split(" ").map(e=>rD(e)),xW=(t,e,r)=>{let s=[...e],a=!1,n=rD(OPt(t[t.length-1]));for(let[c,f]of s.entries()){let p=rD(f);if(n+p<=r?t[t.length-1]+=f:(t.push(f),n=0),kW.has(f))a=!0;else if(a&&f==="m"){a=!1;continue}a||(n+=p,n===r&&c0&&t.length>1&&(t[t.length-2]+=t.pop())},UPt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(rD(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},HPt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let s="",a="",n,c=_Pt(t),f=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(f[f.length-1]=f[f.length-1].trimLeft());let E=rD(f[f.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(f.push(""),E=0),(E>0||r.trim===!1)&&(f[f.length-1]+=" ",E++)),r.hard&&c[p]>e){let C=e-E,S=1+Math.floor((c[p]-C-1)/e);Math.floor((c[p]-1)/e)e&&E>0&&c[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){xW(f,h,e);continue}f[f.length-1]+=h}r.trim!==!1&&(f=f.map(UPt)),s=f.join(` -`);for(let[p,h]of[...s].entries()){if(a+=h,kW.has(h)){let C=parseFloat(/\d[^m]*/.exec(s.slice(p,p+4)));n=C===MPt?null:C}let E=LPt.codes.get(Number(n));n&&E&&(s[p+1]===` -`?a+=WDe(E):h===` -`&&(a+=WDe(n)))}return a};YDe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` -`).split(` -`).map(s=>HPt(s,e,r)).join(` -`)});var zDe=L((uhr,JDe)=>{"use strict";var KDe="[\uD800-\uDBFF][\uDC00-\uDFFF]",jPt=t=>t&&t.exact?new RegExp(`^${KDe}$`):new RegExp(KDe,"g");JDe.exports=jPt});var QW=L((fhr,ebe)=>{"use strict";var qPt=vW(),GPt=zDe(),ZDe=pk(),$De=["\x1B","\x9B"],OF=t=>`${$De[0]}[${t}m`,XDe=(t,e,r)=>{let s=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let c=ZDe.codes.get(parseInt(a,10));if(c){let f=t.indexOf(c.toString());f>=0?t.splice(f,1):s.push(OF(e?c:n))}else if(e){s.push(OF(0));break}else s.push(OF(n))}if(e&&(s=s.filter((a,n)=>s.indexOf(a)===n),r!==void 0)){let a=OF(ZDe.codes.get(parseInt(r,10)));s=s.reduce((n,c)=>c===a?[c,...n]:[...n,c],[])}return s.join("")};ebe.exports=(t,e,r)=>{let s=[...t.normalize()],a=[];r=typeof r=="number"?r:s.length;let n=!1,c,f=0,p="";for(let[h,E]of s.entries()){let C=!1;if($De.includes(E)){let S=/\d[^m]*/.exec(t.slice(h,h+18));c=S&&S.length>0?S[0]:void 0,fe&&f<=r)p+=E;else if(f===e&&!n&&c!==void 0)p=XDe(a);else if(f>=r){p+=XDe(a,!0,c);break}}return p}});var rbe=L((Ahr,tbe)=>{"use strict";var X0=QW(),WPt=$S();function LF(t,e,r){if(t.charAt(e)===" ")return e;for(let s=1;s<=3;s++)if(r){if(t.charAt(e+s)===" ")return e+s}else if(t.charAt(e-s)===" ")return e-s;return e}tbe.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:s,space:a,preferTruncationOnSpace:n}=r,c="\u2026",f=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return c;let p=WPt(t);if(p<=e)return t;if(s==="start"){if(n){let h=LF(t,p-e+1,!0);return c+X0(t,h,p).trim()}return a===!0&&(c+=" ",f=2),c+X0(t,p-e+f,p)}if(s==="middle"){a===!0&&(c=" "+c+" ",f=3);let h=Math.floor(e/2);if(n){let E=LF(t,h),C=LF(t,p-(e-h)+1,!0);return X0(t,0,E)+c+X0(t,C,p).trim()}return X0(t,0,h)+c+X0(t,p-(e-h)+f,p)}if(s==="end"){if(n){let h=LF(t,e-1);return X0(t,0,h)+c}return a===!0&&(c=" "+c,f=2),X0(t,0,e-f)+c}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${s}`)}});var RW=L(nD=>{"use strict";var nbe=nD&&nD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nD,"__esModule",{value:!0});var YPt=nbe(VDe()),VPt=nbe(rbe()),TW={};nD.default=(t,e,r)=>{let s=t+String(e)+String(r);if(TW[s])return TW[s];let a=t;if(r==="wrap"&&(a=YPt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=VPt.default(t,e,{position:n})}return TW[s]=a,a}});var NW=L(FW=>{"use strict";Object.defineProperty(FW,"__esModule",{value:!0});var ibe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let s="";r.nodeName==="#text"?s=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(s=ibe(r)),s.length>0&&typeof r.internal_transform=="function"&&(s=r.internal_transform(s))),e+=s}return e};FW.default=ibe});var OW=L(xi=>{"use strict";var iD=xi&&xi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xi,"__esModule",{value:!0});xi.setTextNodeValue=xi.createTextNode=xi.setStyle=xi.setAttribute=xi.removeChildNode=xi.insertBeforeNode=xi.appendChildNode=xi.createNode=xi.TEXT_NAME=void 0;var KPt=iD(Rm()),sbe=iD(qDe()),JPt=iD(GDe()),zPt=iD(RW()),ZPt=iD(NW());xi.TEXT_NAME="#text";xi.createNode=t=>{var e;let r={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:t==="ink-virtual-text"?void 0:KPt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(XPt.bind(null,r))),r};xi.appendChildNode=(t,e)=>{var r;e.parentNode&&xi.removeChildNode(e.parentNode,e),e.parentNode=t,t.childNodes.push(e),e.yogaNode&&((r=t.yogaNode)===null||r===void 0||r.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&MF(t)};xi.insertBeforeNode=(t,e,r)=>{var s,a;e.parentNode&&xi.removeChildNode(e.parentNode,e),e.parentNode=t;let n=t.childNodes.indexOf(r);if(n>=0){t.childNodes.splice(n,0,e),e.yogaNode&&((s=t.yogaNode)===null||s===void 0||s.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&MF(t)};xi.removeChildNode=(t,e)=>{var r,s;e.yogaNode&&((s=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||s===void 0||s.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&MF(t)};xi.setAttribute=(t,e,r)=>{t.attributes[e]=r};xi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&JPt.default(t.yogaNode,e)};xi.createTextNode=t=>{let e={nodeName:"#text",nodeValue:t,yogaNode:void 0,parentNode:null,style:{}};return xi.setTextNodeValue(e,t),e};var XPt=function(t,e){var r,s;let a=t.nodeName==="#text"?t.nodeValue:ZPt.default(t),n=sbe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let c=(s=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&s!==void 0?s:"wrap",f=zPt.default(a,e,c);return sbe.default(f)},obe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:obe(t.parentNode)},MF=t=>{let e=obe(t);e?.markDirty()};xi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,MF(t)}});var fbe=L(sD=>{"use strict";var ube=sD&&sD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(sD,"__esModule",{value:!0});var abe=yW(),$Pt=ube(xDe()),lbe=ube(Rm()),ta=OW(),cbe=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};sD.default=$Pt.default({schedulePassiveEffects:abe.unstable_scheduleCallback,cancelPassiveEffects:abe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>null,preparePortalMount:()=>null,clearContainer:()=>!1,shouldDeprioritizeSubtree:()=>!1,resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,s=e==="ink-text"||e==="ink-virtual-text";return r===s?t:{isInsideText:s}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,s)=>{if(s.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&s.isInsideText?"ink-virtual-text":t,n=ta.createNode(a);for(let[c,f]of Object.entries(e))c!=="children"&&(c==="style"?ta.setStyle(n,f):c==="internal_transform"?n.internal_transform=f:c==="internal_static"?n.internal_static=!0:ta.setAttribute(n,c,f));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return ta.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{ta.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{ta.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(lbe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(lbe.default.DISPLAY_FLEX)},appendInitialChild:ta.appendChildNode,appendChild:ta.appendChildNode,insertBefore:ta.insertBeforeNode,finalizeInitialChildren:(t,e,r,s)=>(t.internal_static&&(s.isStaticDirty=!0,s.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:ta.appendChildNode,insertInContainerBefore:ta.insertBeforeNode,removeChildFromContainer:(t,e)=>{ta.removeChildNode(t,e),cbe(e.yogaNode)},prepareUpdate:(t,e,r,s,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},c=Object.keys(s);for(let f of c)if(s[f]!==r[f]){if(f==="style"&&typeof s.style=="object"&&typeof r.style=="object"){let h=s.style,E=r.style,C=Object.keys(h);for(let S of C){if(S==="borderStyle"||S==="borderColor"){if(typeof n.style!="object"){let P={};n.style=P}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[S]!==E[S]){if(typeof n.style!="object"){let P={};n.style=P}n.style[S]=h[S]}}continue}n[f]=s[f]}return n},commitUpdate:(t,e)=>{for(let[r,s]of Object.entries(e))r!=="children"&&(r==="style"?ta.setStyle(t,s):r==="internal_transform"?t.internal_transform=s:r==="internal_static"?t.internal_static=!0:ta.setAttribute(t,r,s))},commitTextUpdate:(t,e,r)=>{ta.setTextNodeValue(t,r)},removeChild:(t,e)=>{ta.removeChildNode(t,e),cbe(e.yogaNode)}})});var pbe=L((mhr,Abe)=>{"use strict";Abe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let s=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(s,r.indent.repeat(e))}});var hbe=L(oD=>{"use strict";var ext=oD&&oD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(oD,"__esModule",{value:!0});var _F=ext(Rm());oD.default=t=>t.getComputedWidth()-t.getComputedPadding(_F.default.EDGE_LEFT)-t.getComputedPadding(_F.default.EDGE_RIGHT)-t.getComputedBorder(_F.default.EDGE_LEFT)-t.getComputedBorder(_F.default.EDGE_RIGHT)});var gbe=L((Ehr,txt)=>{txt.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var mbe=L((Ihr,LW)=>{"use strict";var dbe=gbe();LW.exports=dbe;LW.exports.default=dbe});var MW=L(lD=>{"use strict";var rxt=lD&&lD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(lD,"__esModule",{value:!0});var aD=rxt(kE()),nxt=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,ixt=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,UF=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);lD.default=(t,e,r)=>{if(!e)return t;if(e in aD.default){let a=UF(e,r);return aD.default[a](t)}if(e.startsWith("#")){let a=UF("hex",r);return aD.default[a](e)(t)}if(e.startsWith("ansi")){let a=ixt.exec(e);if(!a)return t;let n=UF(a[1],r),c=Number(a[2]);return aD.default[n](c)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=nxt.exec(e);if(!a)return t;let n=UF(a[1],r),c=Number(a[2]),f=Number(a[3]),p=Number(a[4]);return aD.default[n](c,f,p)(t)}return t}});var Ebe=L(cD=>{"use strict";var ybe=cD&&cD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cD,"__esModule",{value:!0});var sxt=ybe(mbe()),_W=ybe(MW());cD.default=(t,e,r,s)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),c=r.style.borderColor,f=sxt.default[r.style.borderStyle],p=_W.default(f.topLeft+f.horizontal.repeat(a-2)+f.topRight,c,"foreground"),h=(_W.default(f.vertical,c,"foreground")+` -`).repeat(n-2),E=_W.default(f.bottomLeft+f.horizontal.repeat(a-2)+f.bottomRight,c,"foreground");s.write(t,e,p,{transformers:[]}),s.write(t,e+1,h,{transformers:[]}),s.write(t+a-1,e+1,h,{transformers:[]}),s.write(t,e+n-1,E,{transformers:[]})}}});var Cbe=L(uD=>{"use strict";var Fm=uD&&uD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(uD,"__esModule",{value:!0});var oxt=Fm(Rm()),axt=Fm(bW()),lxt=Fm(pbe()),cxt=Fm(RW()),uxt=Fm(hbe()),fxt=Fm(NW()),Axt=Fm(Ebe()),pxt=(t,e)=>{var r;let s=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(s){let a=s.getComputedLeft(),n=s.getComputedTop();e=` -`.repeat(n)+lxt.default(e,a)}return e},Ibe=(t,e,r)=>{var s;let{offsetX:a=0,offsetY:n=0,transformers:c=[],skipStaticElements:f}=r;if(f&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===oxt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),C=c;if(typeof t.internal_transform=="function"&&(C=[t.internal_transform,...c]),t.nodeName==="ink-text"){let S=fxt.default(t);if(S.length>0){let P=axt.default(S),I=uxt.default(p);if(P>I){let R=(s=t.style.textWrap)!==null&&s!==void 0?s:"wrap";S=cxt.default(S,I,R)}S=pxt(t,S),e.write(h,E,S,{transformers:C})}return}if(t.nodeName==="ink-box"&&Axt.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let S of t.childNodes)Ibe(S,e,{offsetX:h,offsetY:E,transformers:C,skipStaticElements:f})}};uD.default=Ibe});var vbe=L(fD=>{"use strict";var Bbe=fD&&fD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(fD,"__esModule",{value:!0});var wbe=Bbe(QW()),hxt=Bbe($S()),UW=class{constructor(e){this.writes=[];let{width:r,height:s}=e;this.width=r,this.height=s}write(e,r,s,a){let{transformers:n}=a;s&&this.writes.push({x:e,y:r,text:s,transformers:n})}get(){let e=[];for(let s=0;ss.trimRight()).join(` -`),height:e.length}}};fD.default=UW});var bbe=L(AD=>{"use strict";var HW=AD&&AD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(AD,"__esModule",{value:!0});var gxt=HW(Rm()),Sbe=HW(Cbe()),Dbe=HW(vbe());AD.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,gxt.default.DIRECTION_LTR);let s=new Dbe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});Sbe.default(t,s,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new Dbe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),Sbe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:c}=s.get();return{output:n,outputHeight:c,staticOutput:a?`${a.get().output} -`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var Qbe=L((Dhr,kbe)=>{"use strict";var Pbe=Ie("stream"),xbe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],jW={},dxt=t=>{let e=new Pbe.PassThrough,r=new Pbe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let s=new console.Console(e,r);for(let a of xbe)jW[a]=console[a],console[a]=s[a];return()=>{for(let a of xbe)console[a]=jW[a];jW={}}};kbe.exports=dxt});var GW=L(qW=>{"use strict";Object.defineProperty(qW,"__esModule",{value:!0});qW.default=new WeakMap});var YW=L(WW=>{"use strict";Object.defineProperty(WW,"__esModule",{value:!0});var mxt=hn(),Tbe=mxt.createContext({exit:()=>{}});Tbe.displayName="InternalAppContext";WW.default=Tbe});var KW=L(VW=>{"use strict";Object.defineProperty(VW,"__esModule",{value:!0});var yxt=hn(),Rbe=yxt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});Rbe.displayName="InternalStdinContext";VW.default=Rbe});var zW=L(JW=>{"use strict";Object.defineProperty(JW,"__esModule",{value:!0});var Ext=hn(),Fbe=Ext.createContext({stdout:void 0,write:()=>{}});Fbe.displayName="InternalStdoutContext";JW.default=Fbe});var XW=L(ZW=>{"use strict";Object.defineProperty(ZW,"__esModule",{value:!0});var Ixt=hn(),Nbe=Ixt.createContext({stderr:void 0,write:()=>{}});Nbe.displayName="InternalStderrContext";ZW.default=Nbe});var HF=L($W=>{"use strict";Object.defineProperty($W,"__esModule",{value:!0});var Cxt=hn(),Obe=Cxt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{},focus:()=>{}});Obe.displayName="InternalFocusContext";$W.default=Obe});var Mbe=L((Rhr,Lbe)=>{"use strict";var wxt=/[|\\{}()[\]^$+*?.-]/g;Lbe.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(wxt,"\\$&")}});var jbe=L((Fhr,Hbe)=>{"use strict";var Bxt=Mbe(),vxt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",Ube=[].concat(Ie("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));Ube.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var eY=class t{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=t.nodeInternals()),"cwd"in e||(e.cwd=vxt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,Sxt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...Ube]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` -`)),!/^\s*at /.test(e[0])&&/^\s*at /.test(e[1])&&(e=e.slice(1));let s=!1,a=null,n=[];return e.forEach(c=>{if(c=c.replace(/\\/g,"/"),this._internals.some(p=>p.test(c)))return;let f=/^\s*at /.test(c);s?c=c.trimEnd().replace(/^(\s+)at /,"$1"):(c=c.trim(),f&&(c=c.slice(3))),c=c.replace(`${this._cwd}/`,""),c&&(f?(a&&(n.push(a),a=null),n.push(c)):(s=!0,a=c))}),n.map(c=>`${r}${c} -`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:s}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=s,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:s,stackTraceLimit:a}=Error;Error.prepareStackTrace=(f,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:c}=n;return Object.assign(Error,{prepareStackTrace:s,stackTraceLimit:a}),c}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let s={line:r.getLineNumber(),column:r.getColumnNumber()};_be(s,r.getFileName(),this._cwd),r.isConstructor()&&(s.constructor=!0),r.isEval()&&(s.evalOrigin=r.getEvalOrigin()),r.isNative()&&(s.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(s.type=a);let n=r.getFunctionName();n&&(s.function=n);let c=r.getMethodName();return c&&n!==c&&(s.method=c),s}parseLine(e){let r=e&&e.match(Dxt);if(!r)return null;let s=r[1]==="new",a=r[2],n=r[3],c=r[4],f=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],C=r[9],S=r[10]==="native",P=r[11]===")",I,R={};if(E&&(R.line=Number(E)),C&&(R.column=Number(C)),P&&h){let N=0;for(let U=h.length-1;U>0;U--)if(h.charAt(U)===")")N++;else if(h.charAt(U)==="("&&h.charAt(U-1)===" "&&(N--,N===-1&&h.charAt(U-1)===" ")){let W=h.slice(0,U-1);h=h.slice(U+1),a+=` (${W}`;break}}if(a){let N=a.match(bxt);N&&(a=N[1],I=N[2])}return _be(R,h,this._cwd),s&&(R.constructor=!0),n&&(R.evalOrigin=n,R.evalLine=f,R.evalColumn=p,R.evalFile=c&&c.replace(/\\/g,"/")),S&&(R.native=!0),a&&(R.function=a),I&&a!==I&&(R.method=I),R}};function _be(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function Sxt(t){if(t.length===0)return[];let e=t.map(r=>Bxt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var Dxt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),bxt=/^(.*?) \[as (.*?)\]$/;Hbe.exports=eY});var Gbe=L((Nhr,qbe)=>{"use strict";qbe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var Ybe=L((Ohr,Wbe)=>{"use strict";var Pxt=Gbe(),xxt=(t,e)=>{let r=[],s=t-e,a=t+e;for(let n=s;n<=a;n++)r.push(n);return r};Wbe.exports=(t,e,r)=>{if(typeof t!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");if(t=Pxt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},xxt(e,r.around).filter(s=>t[s-1]!==void 0).map(s=>({line:s,value:t[s-1]}))}});var jF=L(nf=>{"use strict";var kxt=nf&&nf.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),Qxt=nf&&nf.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),Txt=nf&&nf.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&kxt(e,t,r);return Qxt(e,t),e},Rxt=nf&&nf.__rest||function(t,e){var r={};for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&e.indexOf(s)<0&&(r[s]=t[s]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,s=Object.getOwnPropertySymbols(t);a{var{children:r}=t,s=Rxt(t,["children"]);let a=Object.assign(Object.assign({},s),{marginLeft:s.marginLeft||s.marginX||s.margin||0,marginRight:s.marginRight||s.marginX||s.margin||0,marginTop:s.marginTop||s.marginY||s.margin||0,marginBottom:s.marginBottom||s.marginY||s.margin||0,paddingLeft:s.paddingLeft||s.paddingX||s.padding||0,paddingRight:s.paddingRight||s.paddingX||s.padding||0,paddingTop:s.paddingTop||s.paddingY||s.padding||0,paddingBottom:s.paddingBottom||s.paddingY||s.padding||0});return Vbe.default.createElement("ink-box",{ref:e,style:a},r)});tY.displayName="Box";tY.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};nf.default=tY});var iY=L(pD=>{"use strict";var rY=pD&&pD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pD,"__esModule",{value:!0});var Fxt=rY(hn()),yw=rY(kE()),Kbe=rY(MW()),nY=({color:t,backgroundColor:e,dimColor:r,bold:s,italic:a,underline:n,strikethrough:c,inverse:f,wrap:p,children:h})=>{if(h==null)return null;let E=C=>(r&&(C=yw.default.dim(C)),t&&(C=Kbe.default(C,t,"foreground")),e&&(C=Kbe.default(C,e,"background")),s&&(C=yw.default.bold(C)),a&&(C=yw.default.italic(C)),n&&(C=yw.default.underline(C)),c&&(C=yw.default.strikethrough(C)),f&&(C=yw.default.inverse(C)),C);return Fxt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};nY.displayName="Text";nY.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};pD.default=nY});var Xbe=L(sf=>{"use strict";var Nxt=sf&&sf.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),Oxt=sf&&sf.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),Lxt=sf&&sf.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&Nxt(e,t,r);return Oxt(e,t),e},hD=sf&&sf.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(sf,"__esModule",{value:!0});var Jbe=Lxt(Ie("fs")),Rs=hD(hn()),zbe=hD(jbe()),Mxt=hD(Ybe()),th=hD(jF()),hA=hD(iY()),Zbe=new zbe.default({cwd:process.cwd(),internals:zbe.default.nodeInternals()}),_xt=({error:t})=>{let e=t.stack?t.stack.split(` -`).slice(1):void 0,r=e?Zbe.parseLine(e[0]):void 0,s,a=0;if(r?.file&&r?.line&&Jbe.existsSync(r.file)){let n=Jbe.readFileSync(r.file,"utf8");if(s=Mxt.default(n,r.line),s)for(let{line:c}of s)a=Math.max(a,String(c).length)}return Rs.default.createElement(th.default,{flexDirection:"column",padding:1},Rs.default.createElement(th.default,null,Rs.default.createElement(hA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),Rs.default.createElement(hA.default,null," ",t.message)),r&&Rs.default.createElement(th.default,{marginTop:1},Rs.default.createElement(hA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&s&&Rs.default.createElement(th.default,{marginTop:1,flexDirection:"column"},s.map(({line:n,value:c})=>Rs.default.createElement(th.default,{key:n},Rs.default.createElement(th.default,{width:a+1},Rs.default.createElement(hA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),Rs.default.createElement(hA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+c)))),t.stack&&Rs.default.createElement(th.default,{marginTop:1,flexDirection:"column"},t.stack.split(` -`).slice(1).map(n=>{let c=Zbe.parseLine(n);return c?Rs.default.createElement(th.default,{key:n},Rs.default.createElement(hA.default,{dimColor:!0},"- "),Rs.default.createElement(hA.default,{dimColor:!0,bold:!0},c.function),Rs.default.createElement(hA.default,{dimColor:!0,color:"gray"}," ","(",c.file,":",c.line,":",c.column,")")):Rs.default.createElement(th.default,{key:n},Rs.default.createElement(hA.default,{dimColor:!0},"- "),Rs.default.createElement(hA.default,{dimColor:!0,bold:!0},n))})))};sf.default=_xt});var ePe=L(of=>{"use strict";var Uxt=of&&of.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),Hxt=of&&of.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),jxt=of&&of.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&Uxt(e,t,r);return Hxt(e,t),e},Om=of&&of.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(of,"__esModule",{value:!0});var Nm=jxt(hn()),$be=Om(oW()),qxt=Om(YW()),Gxt=Om(KW()),Wxt=Om(zW()),Yxt=Om(XW()),Vxt=Om(HF()),Kxt=Om(Xbe()),Jxt=" ",zxt="\x1B[Z",Zxt="\x1B",qF=class extends Nm.PureComponent{constructor(){super(...arguments),this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=e=>{let{stdin:r}=this.props;if(!this.isRawModeSupported())throw r===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(r.setEncoding("utf8"),e){this.rawModeEnabledCount===0&&(r.addListener("data",this.handleInput),r.resume(),r.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount===0&&(r.setRawMode(!1),r.removeListener("data",this.handleInput),r.pause())},this.handleInput=e=>{e===""&&this.props.exitOnCtrlC&&this.handleExit(),e===Zxt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===Jxt&&this.focusNext(),e===zxt&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focus=e=>{this.setState(r=>r.focusables.some(a=>a?.id===e)?{activeFocusId:e}:r)},this.focusNext=()=>{this.setState(e=>{var r;let s=(r=e.focusables[0])===null||r===void 0?void 0:r.id;return{activeFocusId:this.findNextFocusable(e)||s}})},this.focusPrevious=()=>{this.setState(e=>{var r;let s=(r=e.focusables[e.focusables.length-1])===null||r===void 0?void 0:r.id;return{activeFocusId:this.findPreviousFocusable(e)||s}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(s=>{let a=s.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...s.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(s=>s.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(s=>s.id!==e?s:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(s=>s.id!==e?s:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{var r;let s=e.focusables.findIndex(a=>a.id===e.activeFocusId);for(let a=s+1;a{var r;let s=e.focusables.findIndex(a=>a.id===e.activeFocusId);for(let a=s-1;a>=0;a--)if(!((r=e.focusables[a])===null||r===void 0)&&r.isActive)return e.focusables[a].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return Nm.default.createElement(qxt.default.Provider,{value:{exit:this.handleExit}},Nm.default.createElement(Gxt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},Nm.default.createElement(Wxt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},Nm.default.createElement(Yxt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},Nm.default.createElement(Vxt.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious,focus:this.focus}},this.state.error?Nm.default.createElement(Kxt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){$be.default.hide(this.props.stdout)}componentWillUnmount(){$be.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};of.default=qF;qF.displayName="InternalApp"});var nPe=L(af=>{"use strict";var Xxt=af&&af.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),$xt=af&&af.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ekt=af&&af.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&Xxt(e,t,r);return $xt(e,t),e},lf=af&&af.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(af,"__esModule",{value:!0});var tkt=lf(hn()),tPe=V8(),rkt=lf(fDe()),nkt=lf(tW()),ikt=lf(mDe()),skt=lf(EDe()),sY=lf(fbe()),okt=lf(bbe()),akt=lf(sW()),lkt=lf(Qbe()),ckt=ekt(OW()),ukt=lf(GW()),fkt=lf(ePe()),Ew=process.env.CI==="false"?!1:ikt.default,rPe=()=>{},oY=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:s,staticOutput:a}=okt.default(this.rootNode,this.options.stdout.columns||80),n=a&&a!==` -`;if(this.options.debug){n&&(this.fullStaticOutput+=a),this.options.stdout.write(this.fullStaticOutput+r);return}if(Ew){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),s>=this.options.stdout.rows){this.options.stdout.write(nkt.default.clearTerminal+this.fullStaticOutput+r),this.lastOutput=r;return}n&&(this.log.clear(),this.options.stdout.write(a),this.log(r)),!n&&r!==this.lastOutput&&this.throttledLog(r),this.lastOutput=r},skt.default(this),this.options=e,this.rootNode=ckt.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:tPe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=rkt.default.create(e.stdout),this.throttledLog=e.debug?this.log:tPe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=sY.default.createContainer(this.rootNode,0,!1,null),this.unsubscribeExit=akt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),Ew||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=tkt.default.createElement(fkt.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},e);sY.default.updateContainer(r,this.container,null,rPe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(Ew){this.options.stdout.write(e);return}this.log.clear(),this.options.stdout.write(e),this.log(this.lastOutput)}}writeToStderr(e){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(e),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(Ew){this.options.stderr.write(e);return}this.log.clear(),this.options.stderr.write(e),this.log(this.lastOutput)}}unmount(e){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),Ew?this.options.stdout.write(this.lastOutput+` -`):this.options.debug||this.log.done(),this.isUnmounted=!0,sY.default.updateContainer(null,this.container,null,rPe),ukt.default.delete(this.options.stdout),e instanceof Error?this.rejectExitPromise(e):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((e,r)=>{this.resolveExitPromise=e,this.rejectExitPromise=r})),this.exitPromise}clear(){!Ew&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=lkt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};af.default=oY});var sPe=L(gD=>{"use strict";var iPe=gD&&gD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(gD,"__esModule",{value:!0});var Akt=iPe(nPe()),GF=iPe(GW()),pkt=Ie("stream"),hkt=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},gkt(e)),s=dkt(r.stdout,()=>new Akt.default(r));return s.render(t),{rerender:s.render,unmount:()=>s.unmount(),waitUntilExit:s.waitUntilExit,cleanup:()=>GF.default.delete(r.stdout),clear:s.clear}};gD.default=hkt;var gkt=(t={})=>t instanceof pkt.Stream?{stdout:t,stdin:process.stdin}:t,dkt=(t,e)=>{let r;return GF.default.has(t)?r=GF.default.get(t):(r=e(),GF.default.set(t,r)),r}});var aPe=L(rh=>{"use strict";var mkt=rh&&rh.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r),Object.defineProperty(t,s,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),ykt=rh&&rh.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),Ekt=rh&&rh.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&mkt(e,t,r);return ykt(e,t),e};Object.defineProperty(rh,"__esModule",{value:!0});var dD=Ekt(hn()),oPe=t=>{let{items:e,children:r,style:s}=t,[a,n]=dD.useState(0),c=dD.useMemo(()=>e.slice(a),[e,a]);dD.useLayoutEffect(()=>{n(e.length)},[e.length]);let f=c.map((h,E)=>r(h,a+E)),p=dD.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},s),[s]);return dD.default.createElement("ink-box",{internal_static:!0,style:p},f)};oPe.displayName="Static";rh.default=oPe});var cPe=L(mD=>{"use strict";var Ikt=mD&&mD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(mD,"__esModule",{value:!0});var Ckt=Ikt(hn()),lPe=({children:t,transform:e})=>t==null?null:Ckt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);lPe.displayName="Transform";mD.default=lPe});var fPe=L(yD=>{"use strict";var wkt=yD&&yD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(yD,"__esModule",{value:!0});var Bkt=wkt(hn()),uPe=({count:t=1})=>Bkt.default.createElement("ink-text",null,` -`.repeat(t));uPe.displayName="Newline";yD.default=uPe});var hPe=L(ED=>{"use strict";var APe=ED&&ED.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ED,"__esModule",{value:!0});var vkt=APe(hn()),Skt=APe(jF()),pPe=()=>vkt.default.createElement(Skt.default,{flexGrow:1});pPe.displayName="Spacer";ED.default=pPe});var WF=L(ID=>{"use strict";var Dkt=ID&&ID.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ID,"__esModule",{value:!0});var bkt=hn(),Pkt=Dkt(KW()),xkt=()=>bkt.useContext(Pkt.default);ID.default=xkt});var dPe=L(CD=>{"use strict";var kkt=CD&&CD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CD,"__esModule",{value:!0});var gPe=hn(),Qkt=kkt(WF()),Tkt=(t,e={})=>{let{stdin:r,setRawMode:s,internal_exitOnCtrlC:a}=Qkt.default();gPe.useEffect(()=>{if(e.isActive!==!1)return s(!0),()=>{s(!1)}},[e.isActive,s]),gPe.useEffect(()=>{if(e.isActive===!1)return;let n=c=>{let f=String(c),p={upArrow:f==="\x1B[A",downArrow:f==="\x1B[B",leftArrow:f==="\x1B[D",rightArrow:f==="\x1B[C",pageDown:f==="\x1B[6~",pageUp:f==="\x1B[5~",return:f==="\r",escape:f==="\x1B",ctrl:!1,shift:!1,tab:f===" "||f==="\x1B[Z",backspace:f==="\b",delete:f==="\x7F"||f==="\x1B[3~",meta:!1};f<=""&&!p.return&&(f=String.fromCharCode(f.charCodeAt(0)+97-1),p.ctrl=!0),f.startsWith("\x1B")&&(f=f.slice(1),p.meta=!0);let h=f>="A"&&f<="Z",E=f>="\u0410"&&f<="\u042F";f.length===1&&(h||E)&&(p.shift=!0),p.tab&&f==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(f=""),(!(f==="c"&&p.ctrl)||!a)&&t(f,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};CD.default=Tkt});var mPe=L(wD=>{"use strict";var Rkt=wD&&wD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wD,"__esModule",{value:!0});var Fkt=hn(),Nkt=Rkt(YW()),Okt=()=>Fkt.useContext(Nkt.default);wD.default=Okt});var yPe=L(BD=>{"use strict";var Lkt=BD&&BD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(BD,"__esModule",{value:!0});var Mkt=hn(),_kt=Lkt(zW()),Ukt=()=>Mkt.useContext(_kt.default);BD.default=Ukt});var EPe=L(vD=>{"use strict";var Hkt=vD&&vD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(vD,"__esModule",{value:!0});var jkt=hn(),qkt=Hkt(XW()),Gkt=()=>jkt.useContext(qkt.default);vD.default=Gkt});var CPe=L(DD=>{"use strict";var IPe=DD&&DD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(DD,"__esModule",{value:!0});var SD=hn(),Wkt=IPe(HF()),Ykt=IPe(WF()),Vkt=({isActive:t=!0,autoFocus:e=!1,id:r}={})=>{let{isRawModeSupported:s,setRawMode:a}=Ykt.default(),{activeId:n,add:c,remove:f,activate:p,deactivate:h,focus:E}=SD.useContext(Wkt.default),C=SD.useMemo(()=>r??Math.random().toString().slice(2,7),[r]);return SD.useEffect(()=>(c(C,{autoFocus:e}),()=>{f(C)}),[C,e]),SD.useEffect(()=>{t?p(C):h(C)},[t,C]),SD.useEffect(()=>{if(!(!s||!t))return a(!0),()=>{a(!1)}},[t]),{isFocused:!!C&&n===C,focus:E}};DD.default=Vkt});var wPe=L(bD=>{"use strict";var Kkt=bD&&bD.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(bD,"__esModule",{value:!0});var Jkt=hn(),zkt=Kkt(HF()),Zkt=()=>{let t=Jkt.useContext(zkt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious,focus:t.focus}};bD.default=Zkt});var BPe=L(aY=>{"use strict";Object.defineProperty(aY,"__esModule",{value:!0});aY.default=t=>{var e,r,s,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(s=t.yogaNode)===null||s===void 0?void 0:s.getComputedHeight())!==null&&a!==void 0?a:0}}});var Vc=L(Eo=>{"use strict";Object.defineProperty(Eo,"__esModule",{value:!0});var Xkt=sPe();Object.defineProperty(Eo,"render",{enumerable:!0,get:function(){return Xkt.default}});var $kt=jF();Object.defineProperty(Eo,"Box",{enumerable:!0,get:function(){return $kt.default}});var eQt=iY();Object.defineProperty(Eo,"Text",{enumerable:!0,get:function(){return eQt.default}});var tQt=aPe();Object.defineProperty(Eo,"Static",{enumerable:!0,get:function(){return tQt.default}});var rQt=cPe();Object.defineProperty(Eo,"Transform",{enumerable:!0,get:function(){return rQt.default}});var nQt=fPe();Object.defineProperty(Eo,"Newline",{enumerable:!0,get:function(){return nQt.default}});var iQt=hPe();Object.defineProperty(Eo,"Spacer",{enumerable:!0,get:function(){return iQt.default}});var sQt=dPe();Object.defineProperty(Eo,"useInput",{enumerable:!0,get:function(){return sQt.default}});var oQt=mPe();Object.defineProperty(Eo,"useApp",{enumerable:!0,get:function(){return oQt.default}});var aQt=WF();Object.defineProperty(Eo,"useStdin",{enumerable:!0,get:function(){return aQt.default}});var lQt=yPe();Object.defineProperty(Eo,"useStdout",{enumerable:!0,get:function(){return lQt.default}});var cQt=EPe();Object.defineProperty(Eo,"useStderr",{enumerable:!0,get:function(){return cQt.default}});var uQt=CPe();Object.defineProperty(Eo,"useFocus",{enumerable:!0,get:function(){return uQt.default}});var fQt=wPe();Object.defineProperty(Eo,"useFocusManager",{enumerable:!0,get:function(){return fQt.default}});var AQt=BPe();Object.defineProperty(Eo,"measureElement",{enumerable:!0,get:function(){return AQt.default}})});var cY={};Vt(cY,{Gem:()=>lY});var vPe,Lm,lY,YF=Ct(()=>{vPe=et(Vc()),Lm=et(hn()),lY=(0,Lm.memo)(({active:t})=>{let e=(0,Lm.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,Lm.useMemo)(()=>t?"green":"yellow",[t]);return Lm.default.createElement(vPe.Text,{color:r},e)})});var DPe={};Vt(DPe,{useKeypress:()=>Mm});function Mm({active:t},e,r){let{stdin:s}=(0,SPe.useStdin)(),a=(0,VF.useCallback)((n,c)=>e(n,c),r);(0,VF.useEffect)(()=>{if(!(!t||!s))return s.on("keypress",a),()=>{s.off("keypress",a)}},[t,a,s])}var SPe,VF,PD=Ct(()=>{SPe=et(Vc()),VF=et(hn())});var PPe={};Vt(PPe,{FocusRequest:()=>bPe,useFocusRequest:()=>uY});var bPe,uY,fY=Ct(()=>{PD();bPe=(r=>(r.BEFORE="before",r.AFTER="after",r))(bPe||{}),uY=function({active:t},e,r){Mm({active:t},(s,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var xPe={};Vt(xPe,{useListInput:()=>xD});var xD,KF=Ct(()=>{PD();xD=function(t,e,{active:r,minus:s,plus:a,set:n,loop:c=!0}){Mm({active:r},(f,p)=>{let h=e.indexOf(t);switch(p.name){case s:{let E=h-1;if(c){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(c){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,c])}});var JF={};Vt(JF,{ScrollableItems:()=>pQt});var $0,ml,pQt,zF=Ct(()=>{$0=et(Vc()),ml=et(hn());fY();KF();pQt=({active:t=!0,children:e=[],radius:r=10,size:s=1,loop:a=!0,onFocusRequest:n,willReachEnd:c})=>{let f=N=>{if(N.key===null)throw new Error("Expected all children to have a key");return N.key},p=ml.default.Children.map(e,N=>f(N)),h=p[0],[E,C]=(0,ml.useState)(h),S=p.indexOf(E);(0,ml.useEffect)(()=>{p.includes(E)||C(h)},[e]),(0,ml.useEffect)(()=>{c&&S>=p.length-2&&c()},[S]),uY({active:t&&!!n},N=>{n?.(N)},[n]),xD(E,p,{active:t,minus:"up",plus:"down",set:C,loop:a});let P=S-r,I=S+r;I>p.length&&(P-=I-p.length,I=p.length),P<0&&(I+=-P,P=0),I>=p.length&&(I=p.length-1);let R=[];for(let N=P;N<=I;++N){let U=p[N],W=t&&U===E;R.push(ml.default.createElement($0.Box,{key:U,height:s},ml.default.createElement($0.Box,{marginLeft:1,marginRight:1},ml.default.createElement($0.Text,null,W?ml.default.createElement($0.Text,{color:"cyan",bold:!0},">"):" ")),ml.default.createElement($0.Box,null,ml.default.cloneElement(e[N],{active:W}))))}return ml.default.createElement($0.Box,{flexDirection:"column",width:"100%"},R)}});var kPe,nh,QPe,AY,TPe,pY=Ct(()=>{kPe=et(Vc()),nh=et(hn()),QPe=Ie("readline"),AY=nh.default.createContext(null),TPe=({children:t})=>{let{stdin:e,setRawMode:r}=(0,kPe.useStdin)();(0,nh.useEffect)(()=>{r&&r(!0),e&&(0,QPe.emitKeypressEvents)(e)},[e,r]);let[s,a]=(0,nh.useState)(new Map),n=(0,nh.useMemo)(()=>({getAll:()=>s,get:c=>s.get(c),set:(c,f)=>a(new Map([...s,[c,f]]))}),[s,a]);return nh.default.createElement(AY.Provider,{value:n,children:t})}});var hY={};Vt(hY,{useMinistore:()=>hQt});function hQt(t,e){let r=(0,ZF.useContext)(AY);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let s=(0,ZF.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,s]}var ZF,gY=Ct(()=>{ZF=et(hn());pY()});var $F={};Vt($F,{renderForm:()=>gQt});async function gQt(t,e,{stdin:r,stdout:s,stderr:a}){let n,c=p=>{let{exit:h}=(0,XF.useApp)();Mm({active:!0},(E,C)=>{C.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:f}=(0,XF.render)(dY.default.createElement(TPe,null,dY.default.createElement(t,{...e,useSubmit:c})),{stdin:r,stdout:s,stderr:a});return await f(),n}var XF,dY,eN=Ct(()=>{XF=et(Vc()),dY=et(hn());pY();PD()});var OPe=L(kD=>{"use strict";Object.defineProperty(kD,"__esModule",{value:!0});kD.UncontrolledTextInput=void 0;var FPe=hn(),mY=hn(),RPe=Vc(),_m=kE(),NPe=({value:t,placeholder:e="",focus:r=!0,mask:s,highlightPastedText:a=!1,showCursor:n=!0,onChange:c,onSubmit:f})=>{let[{cursorOffset:p,cursorWidth:h},E]=mY.useState({cursorOffset:(t||"").length,cursorWidth:0});mY.useEffect(()=>{E(R=>{if(!r||!n)return R;let N=t||"";return R.cursorOffset>N.length-1?{cursorOffset:N.length,cursorWidth:0}:R})},[t,r,n]);let C=a?h:0,S=s?s.repeat(t.length):t,P=S,I=e?_m.grey(e):void 0;if(n&&r){I=e.length>0?_m.inverse(e[0])+_m.grey(e.slice(1)):_m.inverse(" "),P=S.length>0?"":_m.inverse(" ");let R=0;for(let N of S)R>=p-C&&R<=p?P+=_m.inverse(N):P+=N,R++;S.length>0&&p===S.length&&(P+=_m.inverse(" "))}return RPe.useInput((R,N)=>{if(N.upArrow||N.downArrow||N.ctrl&&R==="c"||N.tab||N.shift&&N.tab)return;if(N.return){f&&f(t);return}let U=p,W=t,te=0;N.leftArrow?n&&U--:N.rightArrow?n&&U++:N.backspace||N.delete?p>0&&(W=t.slice(0,p-1)+t.slice(p,t.length),U--):(W=t.slice(0,p)+R+t.slice(p,t.length),U+=R.length,R.length>1&&(te=R.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:te}),W!==t&&c(W)},{isActive:r}),FPe.createElement(RPe.Text,null,e?S.length>0?P:I:P)};kD.default=NPe;kD.UncontrolledTextInput=({initialValue:t="",...e})=>{let[r,s]=mY.useState(t);return FPe.createElement(NPe,Object.assign({},e,{value:r,onChange:s}))}});var _Pe={};Vt(_Pe,{Pad:()=>yY});var LPe,MPe,yY,EY=Ct(()=>{LPe=et(Vc()),MPe=et(hn()),yY=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return MPe.default.createElement(LPe.Text,{dimColor:!e},r)}});var UPe={};Vt(UPe,{ItemOptions:()=>dQt});var TD,eg,dQt,HPe=Ct(()=>{TD=et(Vc()),eg=et(hn());KF();YF();EY();dQt=function({active:t,skewer:e,options:r,value:s,onChange:a,sizes:n=[]}){let c=r.filter(({label:p})=>!!p).map(({value:p})=>p),f=r.findIndex(p=>p.value===s&&p.label!="");return xD(s,c,{active:t,minus:"left",plus:"right",set:a}),eg.default.createElement(eg.default.Fragment,null,r.map(({label:p},h)=>{let E=h===f,C=n[h]-1||0,S=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),P=Math.max(0,C-S.length-2);return p?eg.default.createElement(TD.Box,{key:p,width:C,marginLeft:1},eg.default.createElement(TD.Text,{wrap:"truncate"},eg.default.createElement(lY,{active:E})," ",p),e?eg.default.createElement(yY,{active:t,length:P}):null):eg.default.createElement(TD.Box,{key:`spacer-${h}`,width:C,marginLeft:1})}))}});var rxe=L((Ugr,txe)=>{var kY;txe.exports=()=>(typeof kY>"u"&&(kY=Ie("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),kY)});var Bxe=L((fdr,wxe)=>{var _Y=Symbol("arg flag"),Kc=class t extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,t.prototype)}};function JD(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:s=!1}={}){if(!t)throw new Kc("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},c={};for(let f of Object.keys(t)){if(!f)throw new Kc("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(f[0]!=="-")throw new Kc(`argument key must start with '-' but found: '${f}'`,"ARG_CONFIG_NONOPT_KEY");if(f.length===1)throw new Kc(`argument key must have a name; singular '-' keys are not allowed: ${f}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[f]=="string"){n[f]=t[f];continue}let p=t[f],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(C,S,P=[])=>(P.push(E(C,S,P[P.length-1])),P),h=E===Boolean||E[_Y]===!0}else if(typeof p=="function")h=p===Boolean||p[_Y]===!0;else throw new Kc(`type missing or not a function or valid array type: ${f}`,"ARG_CONFIG_VAD_TYPE");if(f[1]!=="-"&&f.length>2)throw new Kc(`short argument keys (with a single hyphen) must have only one character: ${f}`,"ARG_CONFIG_SHORTOPT_TOOLONG");c[f]=[p,h]}for(let f=0,p=e.length;f0){a._=a._.concat(e.slice(f));break}if(h==="--"){a._=a._.concat(e.slice(f+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(C=>`-${C}`);for(let C=0;C1&&e[f+1][0]==="-"&&!(e[f+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(N===Number||typeof BigInt<"u"&&N===BigInt))){let W=P===R?"":` (alias for ${R})`;throw new Kc(`option requires argument: ${P}${W}`,"ARG_MISSING_REQUIRED_LONGARG")}a[R]=N(e[f+1],R,a[R]),++f}else a[R]=N(I,R,a[R])}}else a._.push(h)}return a}JD.flag=t=>(t[_Y]=!0,t);JD.COUNT=JD.flag((t,e,r)=>(r||0)+1);JD.ArgError=Kc;wxe.exports=JD});var Qxe=L((Hdr,kxe)=>{var qY;kxe.exports=()=>(typeof qY>"u"&&(qY=Ie("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),qY)});var Oxe=L((JY,zY)=>{(function(t){JY&&typeof JY=="object"&&typeof zY<"u"?zY.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window<"u"?window.isWindows=t():typeof global<"u"?global.isWindows=t():typeof self<"u"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var Uxe=L((_mr,_xe)=>{"use strict";ZY.ifExists=mTt;var Dw=Ie("util"),Jc=Ie("path"),Lxe=Oxe(),hTt=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,gTt={createPwshFile:!0,createCmdFile:Lxe(),fs:Ie("fs")},dTt=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function Mxe(t){let e={...gTt,...t},r=e.fs;return e.fs_={chmod:r.chmod?Dw.promisify(r.chmod):async()=>{},mkdir:Dw.promisify(r.mkdir),readFile:Dw.promisify(r.readFile),stat:Dw.promisify(r.stat),unlink:Dw.promisify(r.unlink),writeFile:Dw.promisify(r.writeFile)},e}async function ZY(t,e,r){let s=Mxe(r);await s.fs_.stat(t),await ETt(t,e,s)}function mTt(t,e,r){return ZY(t,e,r).catch(()=>{})}function yTt(t,e){return e.fs_.unlink(t).catch(()=>{})}async function ETt(t,e,r){let s=await vTt(t,r);return await ITt(e,r),CTt(t,e,s,r)}function ITt(t,e){return e.fs_.mkdir(Jc.dirname(t),{recursive:!0})}function CTt(t,e,r,s){let a=Mxe(s),n=[{generator:bTt,extension:""}];return a.createCmdFile&&n.push({generator:DTt,extension:".cmd"}),a.createPwshFile&&n.push({generator:PTt,extension:".ps1"}),Promise.all(n.map(c=>STt(t,e+c.extension,r,c.generator,a)))}function wTt(t,e){return yTt(t,e)}function BTt(t,e){return xTt(t,e)}async function vTt(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(hTt);if(!a){let n=Jc.extname(t).toLowerCase();return{program:dTt.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function STt(t,e,r,s,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",c=[r.additionalArgs,n].filter(f=>f).join(" ");return a=Object.assign({},a,{prog:r.program,args:c}),await wTt(e,a),await a.fs_.writeFile(e,s(t,e,a),"utf8"),BTt(e,a)}function DTt(t,e,r){let a=Jc.relative(Jc.dirname(e),t).split("/").join("\\"),n=Jc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,c,f=r.prog,p=r.args||"",h=XY(r.nodePath).win32;f?(c=`"%~dp0\\${f}.exe"`,a=n):(f=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",C=h?`@SET NODE_PATH=${h}\r -`:"";return c?C+=`@IF EXIST ${c} (\r - ${c} ${p} ${a} ${E}%*\r -) ELSE (\r - @SETLOCAL\r - @SET PATHEXT=%PATHEXT:;.JS;=;%\r - ${f} ${p} ${a} ${E}%*\r -)\r -`:C+=`@${f} ${p} ${a} ${E}%*\r -`,C}function bTt(t,e,r){let s=Jc.relative(Jc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;s=s.split("\\").join("/");let c=Jc.isAbsolute(s)?`"${s}"`:`"$basedir/${s}"`,f=r.args||"",p=XY(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,s=c):(a=c,f="",s="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",E=`#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") - -case \`uname\` in - *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;; -esac - -`,C=r.nodePath?`export NODE_PATH="${p}" -`:"";return n?E+=`${C}if [ -x ${n} ]; then - exec ${n} ${f} ${s} ${h}"$@" -else - exec ${a} ${f} ${s} ${h}"$@" -fi -`:E+=`${C}${a} ${f} ${s} ${h}"$@" -exit $? -`,E}function PTt(t,e,r){let s=Jc.relative(Jc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,c;s=s.split("\\").join("/");let f=Jc.isAbsolute(s)?`"${s}"`:`"$basedir/${s}"`,p=r.args||"",h=XY(r.nodePath),E=h.win32,C=h.posix;n?(c=`"$basedir/${r.prog}$exe"`,s=f):(n=f,p="",s="");let S=r.progArgs?`${r.progArgs.join(" ")} `:"",P=`#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -${r.nodePath?`$env_node_path=$env:NODE_PATH -$env:NODE_PATH="${E}" -`:""}if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -}`;return r.nodePath&&(P+=` else { - $env:NODE_PATH="${C}" -}`),c?P+=` -$ret=0 -if (Test-Path ${c}) { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & ${c} ${p} ${s} ${S}$args - } else { - & ${c} ${p} ${s} ${S}$args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & ${n} ${p} ${s} ${S}$args - } else { - & ${n} ${p} ${s} ${S}$args - } - $ret=$LASTEXITCODE -} -${r.nodePath?`$env:NODE_PATH=$env_node_path -`:""}exit $ret -`:P+=` -# Support pipeline input -if ($MyInvocation.ExpectingInput) { - $input | & ${n} ${p} ${s} ${S}$args -} else { - & ${n} ${p} ${s} ${S}$args -} -${r.nodePath?`$env:NODE_PATH=$env_node_path -`:""}exit $LASTEXITCODE -`,P}function xTt(t,e){return e.fs_.chmod(t,493)}function XY(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(Jc.delimiter):Array.from(t),r={};for(let s=0;s`/mnt/${f.toLowerCase()}`):e[s];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[s]={win32:a,posix:n}}return r}_xe.exports=ZY});var AV=L((oEr,oke)=>{oke.exports=Ie("stream")});var uke=L((aEr,cke)=>{"use strict";function ake(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,s)}return r}function sRt(t){for(var e=1;e0?this.tail.next=s:this.head=s,this.tail=s,++this.length}},{key:"unshift",value:function(r){var s={data:r,next:this.head};this.length===0&&(this.tail=s),this.head=s,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var s=this.head,a=""+s.data;s=s.next;)a+=r+s.data;return a}},{key:"concat",value:function(r){if(this.length===0)return hN.alloc(0);for(var s=hN.allocUnsafe(r>>>0),a=this.head,n=0;a;)ARt(a.data,s,n),n+=a.data.length,a=a.next;return s}},{key:"consume",value:function(r,s){var a;return rc.length?c.length:r;if(f===c.length?n+=c:n+=c.slice(0,r),r-=f,r===0){f===c.length?(++a,s.next?this.head=s.next:this.head=this.tail=null):(this.head=s,s.data=c.slice(f));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var s=hN.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(s),r-=a.data.length;a=a.next;){var c=a.data,f=r>c.length?c.length:r;if(c.copy(s,s.length-r,0,f),r-=f,r===0){f===c.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=c.slice(f));break}++n}return this.length-=n,s}},{key:fRt,value:function(r,s){return pV(this,sRt({},s,{depth:0,customInspect:!1}))}}]),t}()});var gV=L((lEr,Ake)=>{"use strict";function pRt(t,e){var r=this,s=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return s||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(hV,this,t)):process.nextTick(hV,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(n){!e&&n?r._writableState?r._writableState.errorEmitted?process.nextTick(gN,r):(r._writableState.errorEmitted=!0,process.nextTick(fke,r,n)):process.nextTick(fke,r,n):e?(process.nextTick(gN,r),e(n)):process.nextTick(gN,r)}),this)}function fke(t,e){hV(t,e),gN(t)}function gN(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function hRt(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function hV(t,e){t.emit("error",e)}function gRt(t,e){var r=t._readableState,s=t._writableState;r&&r.autoDestroy||s&&s.autoDestroy?t.destroy(e):t.emit("error",e)}Ake.exports={destroy:pRt,undestroy:hRt,errorOrDestroy:gRt}});var ag=L((cEr,gke)=>{"use strict";var hke={};function Zc(t,e,r){r||(r=Error);function s(n,c,f){return typeof e=="string"?e:e(n,c,f)}class a extends r{constructor(c,f,p){super(s(c,f,p))}}a.prototype.name=r.name,a.prototype.code=t,hke[t]=a}function pke(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(s=>String(s)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function dRt(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function mRt(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function yRt(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}Zc("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);Zc("ERR_INVALID_ARG_TYPE",function(t,e,r){let s;typeof e=="string"&&dRt(e,"not ")?(s="must not be",e=e.replace(/^not /,"")):s="must be";let a;if(mRt(t," argument"))a=`The ${t} ${s} ${pke(e,"type")}`;else{let n=yRt(t,".")?"property":"argument";a=`The "${t}" ${n} ${s} ${pke(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);Zc("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");Zc("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});Zc("ERR_STREAM_PREMATURE_CLOSE","Premature close");Zc("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});Zc("ERR_MULTIPLE_CALLBACK","Callback called multiple times");Zc("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");Zc("ERR_STREAM_WRITE_AFTER_END","write after end");Zc("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);Zc("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);Zc("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");gke.exports.codes=hke});var dV=L((uEr,dke)=>{"use strict";var ERt=ag().codes.ERR_INVALID_OPT_VALUE;function IRt(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function CRt(t,e,r,s){var a=IRt(e,s,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=s?r:"highWaterMark";throw new ERt(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}dke.exports={getHighWaterMark:CRt}});var mke=L((fEr,mV)=>{typeof Object.create=="function"?mV.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:mV.exports=function(e,r){if(r){e.super_=r;var s=function(){};s.prototype=r.prototype,e.prototype=new s,e.prototype.constructor=e}}});var lg=L((AEr,EV)=>{try{if(yV=Ie("util"),typeof yV.inherits!="function")throw"";EV.exports=yV.inherits}catch{EV.exports=mke()}var yV});var Eke=L((pEr,yke)=>{yke.exports=Ie("util").deprecate});var wV=L((hEr,Ske)=>{"use strict";Ske.exports=Ki;function Cke(t){var e=this;this.next=null,this.entry=null,this.finish=function(){KRt(e,t)}}var Qw;Ki.WritableState=ab;var wRt={deprecate:Eke()},wke=AV(),mN=Ie("buffer").Buffer,BRt=global.Uint8Array||function(){};function vRt(t){return mN.from(t)}function SRt(t){return mN.isBuffer(t)||t instanceof BRt}var CV=gV(),DRt=dV(),bRt=DRt.getHighWaterMark,cg=ag().codes,PRt=cg.ERR_INVALID_ARG_TYPE,xRt=cg.ERR_METHOD_NOT_IMPLEMENTED,kRt=cg.ERR_MULTIPLE_CALLBACK,QRt=cg.ERR_STREAM_CANNOT_PIPE,TRt=cg.ERR_STREAM_DESTROYED,RRt=cg.ERR_STREAM_NULL_VALUES,FRt=cg.ERR_STREAM_WRITE_AFTER_END,NRt=cg.ERR_UNKNOWN_ENCODING,Tw=CV.errorOrDestroy;lg()(Ki,wke);function ORt(){}function ab(t,e,r){Qw=Qw||Wm(),t=t||{},typeof r!="boolean"&&(r=e instanceof Qw),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=bRt(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var s=t.decodeStrings===!1;this.decodeStrings=!s,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){qRt(e,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new Cke(this)}ab.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(ab.prototype,"buffer",{get:wRt.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var dN;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(dN=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ki,Symbol.hasInstance,{value:function(e){return dN.call(this,e)?!0:this!==Ki?!1:e&&e._writableState instanceof ab}})):dN=function(e){return e instanceof this};function Ki(t){Qw=Qw||Wm();var e=this instanceof Qw;if(!e&&!dN.call(Ki,this))return new Ki(t);this._writableState=new ab(t,this,e),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final)),wke.call(this)}Ki.prototype.pipe=function(){Tw(this,new QRt)};function LRt(t,e){var r=new FRt;Tw(t,r),process.nextTick(e,r)}function MRt(t,e,r,s){var a;return r===null?a=new RRt:typeof r!="string"&&!e.objectMode&&(a=new PRt("chunk",["string","Buffer"],r)),a?(Tw(t,a),process.nextTick(s,a),!1):!0}Ki.prototype.write=function(t,e,r){var s=this._writableState,a=!1,n=!s.objectMode&&SRt(t);return n&&!mN.isBuffer(t)&&(t=vRt(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=s.defaultEncoding),typeof r!="function"&&(r=ORt),s.ending?LRt(this,r):(n||MRt(this,s,t,r))&&(s.pendingcb++,a=URt(this,s,n,t,e,r)),a};Ki.prototype.cork=function(){this._writableState.corked++};Ki.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&Bke(this,t))};Ki.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new NRt(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Ki.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function _Rt(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=mN.from(e,r)),e}Object.defineProperty(Ki.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function URt(t,e,r,s,a,n){if(!r){var c=_Rt(e,s,a);s!==c&&(r=!0,a="buffer",s=c)}var f=e.objectMode?1:s.length;e.length+=f;var p=e.length{"use strict";var JRt=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};bke.exports=yA;var Dke=SV(),vV=wV();lg()(yA,Dke);for(BV=JRt(vV.prototype),yN=0;yN{var IN=Ie("buffer"),ch=IN.Buffer;function Pke(t,e){for(var r in t)e[r]=t[r]}ch.from&&ch.alloc&&ch.allocUnsafe&&ch.allocUnsafeSlow?xke.exports=IN:(Pke(IN,DV),DV.Buffer=Rw);function Rw(t,e,r){return ch(t,e,r)}Pke(ch,Rw);Rw.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return ch(t,e,r)};Rw.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var s=ch(t);return e!==void 0?typeof r=="string"?s.fill(e,r):s.fill(e):s.fill(0),s};Rw.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return ch(t)};Rw.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return IN.SlowBuffer(t)}});var xV=L(Tke=>{"use strict";var PV=kke().Buffer,Qke=PV.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function XRt(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function $Rt(t){var e=XRt(t);if(typeof e!="string"&&(PV.isEncoding===Qke||!Qke(t)))throw new Error("Unknown encoding: "+t);return e||t}Tke.StringDecoder=lb;function lb(t){this.encoding=$Rt(t);var e;switch(this.encoding){case"utf16le":this.text=sFt,this.end=oFt,e=4;break;case"utf8":this.fillLast=rFt,e=4;break;case"base64":this.text=aFt,this.end=lFt,e=3;break;default:this.write=cFt,this.end=uFt;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=PV.allocUnsafe(e)}lb.prototype.write=function(t){if(t.length===0)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),e===void 0)return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r>5===6?2:t>>4===14?3:t>>3===30?4:t>>6===2?-1:-2}function eFt(t,e,r){var s=e.length-1;if(s=0?(a>0&&(t.lastNeed=a-1),a):--s=0?(a>0&&(t.lastNeed=a-2),a):--s=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function tFt(t,e,r){if((e[0]&192)!==128)return t.lastNeed=0,"\uFFFD";if(t.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return t.lastNeed=1,"\uFFFD";if(t.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return t.lastNeed=2,"\uFFFD"}}function rFt(t){var e=this.lastTotal-this.lastNeed,r=tFt(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function nFt(t,e){var r=eFt(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var s=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,s),t.toString("utf8",e,s)}function iFt(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function sFt(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var s=r.charCodeAt(r.length-1);if(s>=55296&&s<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function oFt(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function aFt(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function lFt(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function cFt(t){return t.toString(this.encoding)}function uFt(t){return t&&t.length?this.write(t):""}});var CN=L((mEr,Nke)=>{"use strict";var Rke=ag().codes.ERR_STREAM_PREMATURE_CLOSE;function fFt(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,s=new Array(r),a=0;a{"use strict";var wN;function ug(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var hFt=CN(),fg=Symbol("lastResolve"),Ym=Symbol("lastReject"),ub=Symbol("error"),BN=Symbol("ended"),Vm=Symbol("lastPromise"),kV=Symbol("handlePromise"),Km=Symbol("stream");function Ag(t,e){return{value:t,done:e}}function gFt(t){var e=t[fg];if(e!==null){var r=t[Km].read();r!==null&&(t[Vm]=null,t[fg]=null,t[Ym]=null,e(Ag(r,!1)))}}function dFt(t){process.nextTick(gFt,t)}function mFt(t,e){return function(r,s){t.then(function(){if(e[BN]){r(Ag(void 0,!0));return}e[kV](r,s)},s)}}var yFt=Object.getPrototypeOf(function(){}),EFt=Object.setPrototypeOf((wN={get stream(){return this[Km]},next:function(){var e=this,r=this[ub];if(r!==null)return Promise.reject(r);if(this[BN])return Promise.resolve(Ag(void 0,!0));if(this[Km].destroyed)return new Promise(function(c,f){process.nextTick(function(){e[ub]?f(e[ub]):c(Ag(void 0,!0))})});var s=this[Vm],a;if(s)a=new Promise(mFt(s,this));else{var n=this[Km].read();if(n!==null)return Promise.resolve(Ag(n,!1));a=new Promise(this[kV])}return this[Vm]=a,a}},ug(wN,Symbol.asyncIterator,function(){return this}),ug(wN,"return",function(){var e=this;return new Promise(function(r,s){e[Km].destroy(null,function(a){if(a){s(a);return}r(Ag(void 0,!0))})})}),wN),yFt),IFt=function(e){var r,s=Object.create(EFt,(r={},ug(r,Km,{value:e,writable:!0}),ug(r,fg,{value:null,writable:!0}),ug(r,Ym,{value:null,writable:!0}),ug(r,ub,{value:null,writable:!0}),ug(r,BN,{value:e._readableState.endEmitted,writable:!0}),ug(r,kV,{value:function(n,c){var f=s[Km].read();f?(s[Vm]=null,s[fg]=null,s[Ym]=null,n(Ag(f,!1))):(s[fg]=n,s[Ym]=c)},writable:!0}),r));return s[Vm]=null,hFt(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=s[Ym];n!==null&&(s[Vm]=null,s[fg]=null,s[Ym]=null,n(a)),s[ub]=a;return}var c=s[fg];c!==null&&(s[Vm]=null,s[fg]=null,s[Ym]=null,c(Ag(void 0,!0))),s[BN]=!0}),e.on("readable",dFt.bind(null,s)),s};Oke.exports=IFt});var Hke=L((EEr,Uke)=>{"use strict";function Mke(t,e,r,s,a,n,c){try{var f=t[n](c),p=f.value}catch(h){r(h);return}f.done?e(p):Promise.resolve(p).then(s,a)}function CFt(t){return function(){var e=this,r=arguments;return new Promise(function(s,a){var n=t.apply(e,r);function c(p){Mke(n,s,a,c,f,"next",p)}function f(p){Mke(n,s,a,c,f,"throw",p)}c(void 0)})}}function _ke(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,s)}return r}function wFt(t){for(var e=1;e{"use strict";Zke.exports=Pn;var Fw;Pn.ReadableState=Wke;var IEr=Ie("events").EventEmitter,Gke=function(e,r){return e.listeners(r).length},Ab=AV(),vN=Ie("buffer").Buffer,DFt=global.Uint8Array||function(){};function bFt(t){return vN.from(t)}function PFt(t){return vN.isBuffer(t)||t instanceof DFt}var QV=Ie("util"),ln;QV&&QV.debuglog?ln=QV.debuglog("stream"):ln=function(){};var xFt=uke(),MV=gV(),kFt=dV(),QFt=kFt.getHighWaterMark,SN=ag().codes,TFt=SN.ERR_INVALID_ARG_TYPE,RFt=SN.ERR_STREAM_PUSH_AFTER_EOF,FFt=SN.ERR_METHOD_NOT_IMPLEMENTED,NFt=SN.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,Nw,TV,RV;lg()(Pn,Ab);var fb=MV.errorOrDestroy,FV=["error","close","destroy","pause","resume"];function OFt(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]}function Wke(t,e,r){Fw=Fw||Wm(),t=t||{},typeof r!="boolean"&&(r=e instanceof Fw),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=QFt(this,t,"readableHighWaterMark",r),this.buffer=new xFt,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(Nw||(Nw=xV().StringDecoder),this.decoder=new Nw(t.encoding),this.encoding=t.encoding)}function Pn(t){if(Fw=Fw||Wm(),!(this instanceof Pn))return new Pn(t);var e=this instanceof Fw;this._readableState=new Wke(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),Ab.call(this)}Object.defineProperty(Pn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}});Pn.prototype.destroy=MV.destroy;Pn.prototype._undestroy=MV.undestroy;Pn.prototype._destroy=function(t,e){e(t)};Pn.prototype.push=function(t,e){var r=this._readableState,s;return r.objectMode?s=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=vN.from(t,e),e=""),s=!0),Yke(this,t,e,!1,s)};Pn.prototype.unshift=function(t){return Yke(this,t,null,!0,!1)};function Yke(t,e,r,s,a){ln("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,_Ft(t,n);else{var c;if(a||(c=LFt(n,e)),c)fb(t,c);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==vN.prototype&&(e=bFt(e)),s)n.endEmitted?fb(t,new NFt):NV(t,n,e,!0);else if(n.ended)fb(t,new RFt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?NV(t,n,e,!1):LV(t,n)):NV(t,n,e,!1)}else s||(n.reading=!1,LV(t,n))}return!n.ended&&(n.length=jke?t=jke:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function qke(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=MFt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}Pn.prototype.read=function(t){ln("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return ln("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?OV(this):DN(this),null;if(t=qke(t,e),t===0&&e.ended)return e.length===0&&OV(this),null;var s=e.needReadable;ln("need readable",s),(e.length===0||e.length-t0?a=Jke(t,e):a=null,a===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&OV(this)),a!==null&&this.emit("data",a),a};function _Ft(t,e){if(ln("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?DN(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Vke(t)))}}function DN(t){var e=t._readableState;ln("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(ln("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(Vke,t))}function Vke(t){var e=t._readableState;ln("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,_V(t)}function LV(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(UFt,t,e))}function UFt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&zke(s.pipes,t)!==-1)&&!h&&(ln("false write response, pause",s.awaitDrain),s.awaitDrain++),r.pause())}function S(N){ln("onerror",N),R(),t.removeListener("error",S),Gke(t,"error")===0&&fb(t,N)}OFt(t,"error",S);function P(){t.removeListener("finish",I),R()}t.once("close",P);function I(){ln("onfinish"),t.removeListener("close",P),R()}t.once("finish",I);function R(){ln("unpipe"),r.unpipe(t)}return t.emit("pipe",r),s.flowing||(ln("pipe resume"),r.resume()),t};function HFt(t){return function(){var r=t._readableState;ln("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&Gke(t,"data")&&(r.flowing=!0,_V(t))}}Pn.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var s=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,s.flowing!==!1&&this.resume()):t==="readable"&&!s.endEmitted&&!s.readableListening&&(s.readableListening=s.needReadable=!0,s.flowing=!1,s.emittedReadable=!1,ln("on readable",s.length,s.reading),s.length?DN(this):s.reading||process.nextTick(jFt,this)),r};Pn.prototype.addListener=Pn.prototype.on;Pn.prototype.removeListener=function(t,e){var r=Ab.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(Kke,this),r};Pn.prototype.removeAllListeners=function(t){var e=Ab.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(Kke,this),e};function Kke(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function jFt(t){ln("readable nexttick read 0"),t.read(0)}Pn.prototype.resume=function(){var t=this._readableState;return t.flowing||(ln("resume"),t.flowing=!t.readableListening,qFt(this,t)),t.paused=!1,this};function qFt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(GFt,t,e))}function GFt(t,e){ln("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),_V(t),e.flowing&&!e.reading&&t.read(0)}Pn.prototype.pause=function(){return ln("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(ln("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function _V(t){var e=t._readableState;for(ln("flow",e.flowing);e.flowing&&t.read()!==null;);}Pn.prototype.wrap=function(t){var e=this,r=this._readableState,s=!1;t.on("end",function(){if(ln("wrapped end"),r.decoder&&!r.ended){var c=r.decoder.end();c&&c.length&&e.push(c)}e.push(null)}),t.on("data",function(c){if(ln("wrapped data"),r.decoder&&(c=r.decoder.write(c)),!(r.objectMode&&c==null)&&!(!r.objectMode&&(!c||!c.length))){var f=e.push(c);f||(s=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(f){return function(){return t[f].apply(t,arguments)}}(a));for(var n=0;n=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function OV(t){var e=t._readableState;ln("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(WFt,e,t))}function WFt(t,e){if(ln("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}typeof Symbol=="function"&&(Pn.from=function(t,e){return RV===void 0&&(RV=Hke()),RV(Pn,t,e)});function zke(t,e){for(var r=0,s=t.length;r{"use strict";$ke.exports=uh;var bN=ag().codes,YFt=bN.ERR_METHOD_NOT_IMPLEMENTED,VFt=bN.ERR_MULTIPLE_CALLBACK,KFt=bN.ERR_TRANSFORM_ALREADY_TRANSFORMING,JFt=bN.ERR_TRANSFORM_WITH_LENGTH_0,PN=Wm();lg()(uh,PN);function zFt(t,e){var r=this._transformState;r.transforming=!1;var s=r.writecb;if(s===null)return this.emit("error",new VFt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),s(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";tQe.exports=pb;var eQe=UV();lg()(pb,eQe);function pb(t){if(!(this instanceof pb))return new pb(t);eQe.call(this,t)}pb.prototype._transform=function(t,e,r){r(null,t)}});var aQe=L((vEr,oQe)=>{"use strict";var HV;function XFt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var sQe=ag().codes,$Ft=sQe.ERR_MISSING_ARGS,eNt=sQe.ERR_STREAM_DESTROYED;function nQe(t){if(t)throw t}function tNt(t){return t.setHeader&&typeof t.abort=="function"}function rNt(t,e,r,s){s=XFt(s);var a=!1;t.on("close",function(){a=!0}),HV===void 0&&(HV=CN()),HV(t,{readable:e,writable:r},function(c){if(c)return s(c);a=!0,s()});var n=!1;return function(c){if(!a&&!n){if(n=!0,tNt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();s(c||new eNt("pipe"))}}}function iQe(t){t()}function nNt(t,e){return t.pipe(e)}function iNt(t){return!t.length||typeof t[t.length-1]!="function"?nQe:t.pop()}function sNt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return rNt(c,p,h,function(E){a||(a=E),E&&n.forEach(iQe),!p&&(n.forEach(iQe),s(a))})});return e.reduce(nNt)}oQe.exports=sNt});var Ow=L((Xc,gb)=>{var hb=Ie("stream");process.env.READABLE_STREAM==="disable"&&hb?(gb.exports=hb.Readable,Object.assign(gb.exports,hb),gb.exports.Stream=hb):(Xc=gb.exports=SV(),Xc.Stream=hb||Xc,Xc.Readable=Xc,Xc.Writable=wV(),Xc.Duplex=Wm(),Xc.Transform=UV(),Xc.PassThrough=rQe(),Xc.finished=CN(),Xc.pipeline=aQe())});var uQe=L((SEr,cQe)=>{"use strict";var{Buffer:uf}=Ie("buffer"),lQe=Symbol.for("BufferList");function wi(t){if(!(this instanceof wi))return new wi(t);wi._init.call(this,t)}wi._init=function(e){Object.defineProperty(this,lQe,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};wi.prototype._new=function(e){return new wi(e)};wi.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let s=0;sthis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};wi.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};wi.prototype.copy=function(e,r,s,a){if((typeof s!="number"||s<0)&&(s=0),(typeof a!="number"||a>this.length)&&(a=this.length),s>=this.length||a<=0)return e||uf.alloc(0);let n=!!e,c=this._offset(s),f=a-s,p=f,h=n&&r||0,E=c[1];if(s===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:uf.concat(this._bufs,this.length);for(let C=0;CS)this._bufs[C].copy(e,h,E),h+=S;else{this._bufs[C].copy(e,h,E,E+p),h+=S;break}p-=S,E&&(E=0)}return e.length>h?e.slice(0,h):e};wi.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let s=this._offset(e),a=this._offset(r),n=this._bufs.slice(s[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),s[1]!==0&&(n[0]=n[0].slice(s[1])),this._new(n)};wi.prototype.toString=function(e,r,s){return this.slice(r,s).toString(e)};wi.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};wi.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let s=this._offset(e),a=s[0],n=s[1];for(;a=t.length){let p=c.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=c.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};wi.prototype._match=function(t,e){if(this.length-t{"use strict";var jV=Ow().Duplex,oNt=lg(),db=uQe();function na(t){if(!(this instanceof na))return new na(t);if(typeof t=="function"){this._callback=t;let e=function(s){this._callback&&(this._callback(s),this._callback=null)}.bind(this);this.on("pipe",function(s){s.on("error",e)}),this.on("unpipe",function(s){s.removeListener("error",e)}),t=null}db._init.call(this,t),jV.call(this)}oNt(na,jV);Object.assign(na.prototype,db.prototype);na.prototype._new=function(e){return new na(e)};na.prototype._write=function(e,r,s){this._appendBuffer(e),typeof s=="function"&&s()};na.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};na.prototype.end=function(e){jV.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};na.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};na.prototype._isBufferList=function(e){return e instanceof na||e instanceof db||na.isBufferList(e)};na.isBufferList=db.isBufferList;xN.exports=na;xN.exports.BufferListStream=na;xN.exports.BufferList=db});var WV=L(Mw=>{var aNt=Buffer.alloc,lNt="0000000000000000000",cNt="7777777777777777777",AQe=48,pQe=Buffer.from("ustar\0","binary"),uNt=Buffer.from("00","binary"),fNt=Buffer.from("ustar ","binary"),ANt=Buffer.from(" \0","binary"),pNt=parseInt("7777",8),mb=257,GV=263,hNt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},gNt=function(t){switch(t){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null},dNt=function(t){switch(t){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0},hQe=function(t,e,r,s){for(;re?cNt.slice(0,e)+" ":lNt.slice(0,e-t.length)+t+" "};function mNt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],s=t.length-1;s>0;s--){var a=t[s];e?r.push(a):r.push(255-a)}var n=0,c=r.length;for(s=0;s=Math.pow(10,r)&&r++,e+r+t};Mw.decodeLongPath=function(t,e){return Lw(t,0,t.length,e)};Mw.encodePax=function(t){var e="";t.name&&(e+=qV(" path="+t.name+` -`)),t.linkname&&(e+=qV(" linkpath="+t.linkname+` -`));var r=t.pax;if(r)for(var s in r)e+=qV(" "+s+"="+r[s]+` -`);return Buffer.from(e)};Mw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;s+=s?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(s)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(pg(t.mode&pNt,6),100),e.write(pg(t.uid,6),108),e.write(pg(t.gid,6),116),e.write(pg(t.size,11),124),e.write(pg(t.mtime.getTime()/1e3|0,11),136),e[156]=AQe+dNt(t.type),t.linkname&&e.write(t.linkname,157),pQe.copy(e,mb),uNt.copy(e,GV),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(pg(t.devmajor||0,6),329),e.write(pg(t.devminor||0,6),337),s&&e.write(s,345),e.write(pg(gQe(e),6),148),e)};Mw.decode=function(t,e,r){var s=t[156]===0?0:t[156]-AQe,a=Lw(t,0,100,e),n=hg(t,100,8),c=hg(t,108,8),f=hg(t,116,8),p=hg(t,124,12),h=hg(t,136,12),E=gNt(s),C=t[157]===0?null:Lw(t,157,100,e),S=Lw(t,265,32),P=Lw(t,297,32),I=hg(t,329,8),R=hg(t,337,8),N=gQe(t);if(N===8*32)return null;if(N!==hg(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(pQe.compare(t,mb,mb+6)===0)t[345]&&(a=Lw(t,345,155,e)+"/"+a);else if(!(fNt.compare(t,mb,mb+6)===0&&ANt.compare(t,GV,GV+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return s===0&&a&&a[a.length-1]==="/"&&(s=5),{name:a,mode:n,uid:c,gid:f,size:p,mtime:new Date(1e3*h),type:E,linkname:C,uname:S,gname:P,devmajor:I,devminor:R}}});var wQe=L((PEr,CQe)=>{var mQe=Ie("util"),yNt=fQe(),yb=WV(),yQe=Ow().Writable,EQe=Ow().PassThrough,IQe=function(){},dQe=function(t){return t&=511,t&&512-t},ENt=function(t,e){var r=new kN(t,e);return r.end(),r},INt=function(t,e){return e.path&&(t.name=e.path),e.linkpath&&(t.linkname=e.linkpath),e.size&&(t.size=parseInt(e.size,10)),t.pax=e,t},kN=function(t,e){this._parent=t,this.offset=e,EQe.call(this,{autoDestroy:!1})};mQe.inherits(kN,EQe);kN.prototype.destroy=function(t){this._parent.destroy(t)};var fh=function(t){if(!(this instanceof fh))return new fh(t);yQe.call(this,t),t=t||{},this._offset=0,this._buffer=yNt(),this._missing=0,this._partial=!1,this._onparse=IQe,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,s=function(){e._continue()},a=function(S){if(e._locked=!1,S)return e.destroy(S);e._stream||s()},n=function(){e._stream=null;var S=dQe(e._header.size);S?e._parse(S,c):e._parse(512,C),e._locked||s()},c=function(){e._buffer.consume(dQe(e._header.size)),e._parse(512,C),s()},f=function(){var S=e._header.size;e._paxGlobal=yb.decodePax(r.slice(0,S)),r.consume(S),n()},p=function(){var S=e._header.size;e._pax=yb.decodePax(r.slice(0,S)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(S),n()},h=function(){var S=e._header.size;this._gnuLongPath=yb.decodeLongPath(r.slice(0,S),t.filenameEncoding),r.consume(S),n()},E=function(){var S=e._header.size;this._gnuLongLinkPath=yb.decodeLongPath(r.slice(0,S),t.filenameEncoding),r.consume(S),n()},C=function(){var S=e._offset,P;try{P=e._header=yb.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(I){e.emit("error",I)}if(r.consume(512),!P){e._parse(512,C),s();return}if(P.type==="gnu-long-path"){e._parse(P.size,h),s();return}if(P.type==="gnu-long-link-path"){e._parse(P.size,E),s();return}if(P.type==="pax-global-header"){e._parse(P.size,f),s();return}if(P.type==="pax-header"){e._parse(P.size,p),s();return}if(e._gnuLongPath&&(P.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(P.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=P=INt(P,e._pax),e._pax=null),e._locked=!0,!P.size||P.type==="directory"){e._parse(512,C),e.emit("entry",P,ENt(e,S),a);return}e._stream=new kN(e,S),e.emit("entry",P,e._stream,a),e._parse(P.size,n),s()};this._onheader=C,this._parse(512,C)};mQe.inherits(fh,yQe);fh.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};fh.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};fh.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=IQe,this._overflow?this._write(this._overflow,void 0,t):t()}};fh.prototype._write=function(t,e,r){if(!this._destroyed){var s=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(c=t.slice(n),t=t.slice(0,n)),s?s.end(t):a.append(t),this._overflow=c,this._onparse()}};fh.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};CQe.exports=fh});var vQe=L((xEr,BQe)=>{BQe.exports=Ie("fs").constants||Ie("constants")});var xQe=L((kEr,PQe)=>{var _w=vQe(),SQe=vH(),TN=lg(),CNt=Buffer.alloc,DQe=Ow().Readable,Uw=Ow().Writable,wNt=Ie("string_decoder").StringDecoder,QN=WV(),BNt=parseInt("755",8),vNt=parseInt("644",8),bQe=CNt(1024),VV=function(){},YV=function(t,e){e&=511,e&&t.push(bQe.slice(0,512-e))};function SNt(t){switch(t&_w.S_IFMT){case _w.S_IFBLK:return"block-device";case _w.S_IFCHR:return"character-device";case _w.S_IFDIR:return"directory";case _w.S_IFIFO:return"fifo";case _w.S_IFLNK:return"symlink"}return"file"}var RN=function(t){Uw.call(this),this.written=0,this._to=t,this._destroyed=!1};TN(RN,Uw);RN.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};RN.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var FN=function(){Uw.call(this),this.linkname="",this._decoder=new wNt("utf-8"),this._destroyed=!1};TN(FN,Uw);FN.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};FN.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var Eb=function(){Uw.call(this),this._destroyed=!1};TN(Eb,Uw);Eb.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};Eb.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var EA=function(t){if(!(this instanceof EA))return new EA(t);DQe.call(this,t),this._drain=VV,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};TN(EA,DQe);EA.prototype.entry=function(t,e,r){if(this._stream)throw new Error("already piping an entry");if(!(this._finalized||this._destroyed)){typeof e=="function"&&(r=e,e=null),r||(r=VV);var s=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=SNt(t.mode)),t.mode||(t.mode=t.type==="directory"?BNt:vNt),t.uid||(t.uid=0),t.gid||(t.gid=0),t.mtime||(t.mtime=new Date),typeof e=="string"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){t.size=e.length,this._encode(t);var a=this.push(e);return YV(s,t.size),a?process.nextTick(r):this._drain=r,new Eb}if(t.type==="symlink"&&!t.linkname){var n=new FN;return SQe(n,function(f){if(f)return s.destroy(),r(f);t.linkname=n.linkname,s._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new Eb;var c=new RN(this);return this._stream=c,SQe(c,function(f){if(s._stream=null,f)return s.destroy(),r(f);if(c.written!==t.size)return s.destroy(),r(new Error("size mismatch"));YV(s,t.size),s._finalizing&&s.finalize(),r()}),c}};EA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(bQe),this.push(null))};EA.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())};EA.prototype._encode=function(t){if(!t.pax){var e=QN.encode(t);if(e){this.push(e);return}}this._encodePax(t)};EA.prototype._encodePax=function(t){var e=QN.encodePax({name:t.name,linkname:t.linkname,pax:t.pax}),r={name:"PaxHeader",mode:t.mode,uid:t.uid,gid:t.gid,size:e.length,mtime:t.mtime,type:"pax-header",linkname:t.linkname&&"PaxHeader",uname:t.uname,gname:t.gname,devmajor:t.devmajor,devminor:t.devminor};this.push(QN.encode(r)),this.push(e),YV(this,e.length),r.size=t.size,r.type=t.type,this.push(QN.encode(r))};EA.prototype._read=function(t){var e=this._drain;this._drain=VV,e()};PQe.exports=EA});var kQe=L(KV=>{KV.extract=wQe();KV.pack=xQe()});var qQe=L(Ra=>{"use strict";var MNt=Ra&&Ra.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ra,"__esModule",{value:!0});Ra.Minipass=Ra.isWritable=Ra.isReadable=Ra.isStream=void 0;var MQe=typeof process=="object"&&process?process:{stdout:null,stderr:null},o7=Ie("node:events"),jQe=MNt(Ie("node:stream")),_Nt=Ie("node:string_decoder"),UNt=t=>!!t&&typeof t=="object"&&(t instanceof qN||t instanceof jQe.default||(0,Ra.isReadable)(t)||(0,Ra.isWritable)(t));Ra.isStream=UNt;var HNt=t=>!!t&&typeof t=="object"&&t instanceof o7.EventEmitter&&typeof t.pipe=="function"&&t.pipe!==jQe.default.Writable.prototype.pipe;Ra.isReadable=HNt;var jNt=t=>!!t&&typeof t=="object"&&t instanceof o7.EventEmitter&&typeof t.write=="function"&&typeof t.end=="function";Ra.isWritable=jNt;var Ah=Symbol("EOF"),ph=Symbol("maybeEmitEnd"),gg=Symbol("emittedEnd"),LN=Symbol("emittingEnd"),Ib=Symbol("emittedError"),MN=Symbol("closed"),_Qe=Symbol("read"),_N=Symbol("flush"),UQe=Symbol("flushChunk"),ff=Symbol("encoding"),jw=Symbol("decoder"),Zs=Symbol("flowing"),Cb=Symbol("paused"),qw=Symbol("resume"),Xs=Symbol("buffer"),Ta=Symbol("pipes"),$s=Symbol("bufferLength"),e7=Symbol("bufferPush"),UN=Symbol("bufferShift"),ia=Symbol("objectMode"),rs=Symbol("destroyed"),t7=Symbol("error"),r7=Symbol("emitData"),HQe=Symbol("emitEnd"),n7=Symbol("emitEnd2"),CA=Symbol("async"),i7=Symbol("abort"),HN=Symbol("aborted"),wb=Symbol("signal"),Jm=Symbol("dataListeners"),nc=Symbol("discarded"),Bb=t=>Promise.resolve().then(t),qNt=t=>t(),GNt=t=>t==="end"||t==="finish"||t==="prefinish",WNt=t=>t instanceof ArrayBuffer||!!t&&typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,YNt=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),jN=class{src;dest;opts;ondrain;constructor(e,r,s){this.src=e,this.dest=r,this.opts=s,this.ondrain=()=>e[qw](),this.dest.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(e){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},s7=class extends jN{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,s){super(e,r,s),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}},VNt=t=>!!t.objectMode,KNt=t=>!t.objectMode&&!!t.encoding&&t.encoding!=="buffer",qN=class extends o7.EventEmitter{[Zs]=!1;[Cb]=!1;[Ta]=[];[Xs]=[];[ia];[ff];[CA];[jw];[Ah]=!1;[gg]=!1;[LN]=!1;[MN]=!1;[Ib]=null;[$s]=0;[rs]=!1;[wb];[HN]=!1;[Jm]=0;[nc]=!1;writable=!0;readable=!0;constructor(...e){let r=e[0]||{};if(super(),r.objectMode&&typeof r.encoding=="string")throw new TypeError("Encoding and objectMode may not be used together");VNt(r)?(this[ia]=!0,this[ff]=null):KNt(r)?(this[ff]=r.encoding,this[ia]=!1):(this[ia]=!1,this[ff]=null),this[CA]=!!r.async,this[jw]=this[ff]?new _Nt.StringDecoder(this[ff]):null,r&&r.debugExposeBuffer===!0&&Object.defineProperty(this,"buffer",{get:()=>this[Xs]}),r&&r.debugExposePipes===!0&&Object.defineProperty(this,"pipes",{get:()=>this[Ta]});let{signal:s}=r;s&&(this[wb]=s,s.aborted?this[i7]():s.addEventListener("abort",()=>this[i7]()))}get bufferLength(){return this[$s]}get encoding(){return this[ff]}set encoding(e){throw new Error("Encoding must be set at instantiation time")}setEncoding(e){throw new Error("Encoding must be set at instantiation time")}get objectMode(){return this[ia]}set objectMode(e){throw new Error("objectMode must be set at instantiation time")}get async(){return this[CA]}set async(e){this[CA]=this[CA]||!!e}[i7](){this[HN]=!0,this.emit("abort",this[wb]?.reason),this.destroy(this[wb]?.reason)}get aborted(){return this[HN]}set aborted(e){}write(e,r,s){if(this[HN])return!1;if(this[Ah])throw new Error("write after end");if(this[rs])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(s=r,r="utf8"),r||(r="utf8");let a=this[CA]?Bb:qNt;if(!this[ia]&&!Buffer.isBuffer(e)){if(YNt(e))e=Buffer.from(e.buffer,e.byteOffset,e.byteLength);else if(WNt(e))e=Buffer.from(e);else if(typeof e!="string")throw new Error("Non-contiguous data written to non-objectMode stream")}return this[ia]?(this[Zs]&&this[$s]!==0&&this[_N](!0),this[Zs]?this.emit("data",e):this[e7](e),this[$s]!==0&&this.emit("readable"),s&&a(s),this[Zs]):e.length?(typeof e=="string"&&!(r===this[ff]&&!this[jw]?.lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ff]&&(e=this[jw].write(e)),this[Zs]&&this[$s]!==0&&this[_N](!0),this[Zs]?this.emit("data",e):this[e7](e),this[$s]!==0&&this.emit("readable"),s&&a(s),this[Zs]):(this[$s]!==0&&this.emit("readable"),s&&a(s),this[Zs])}read(e){if(this[rs])return null;if(this[nc]=!1,this[$s]===0||e===0||e&&e>this[$s])return this[ph](),null;this[ia]&&(e=null),this[Xs].length>1&&!this[ia]&&(this[Xs]=[this[ff]?this[Xs].join(""):Buffer.concat(this[Xs],this[$s])]);let r=this[_Qe](e||null,this[Xs][0]);return this[ph](),r}[_Qe](e,r){if(this[ia])this[UN]();else{let s=r;e===s.length||e===null?this[UN]():typeof s=="string"?(this[Xs][0]=s.slice(e),r=s.slice(0,e),this[$s]-=e):(this[Xs][0]=s.subarray(e),r=s.subarray(0,e),this[$s]-=e)}return this.emit("data",r),!this[Xs].length&&!this[Ah]&&this.emit("drain"),r}end(e,r,s){return typeof e=="function"&&(s=e,e=void 0),typeof r=="function"&&(s=r,r="utf8"),e!==void 0&&this.write(e,r),s&&this.once("end",s),this[Ah]=!0,this.writable=!1,(this[Zs]||!this[Cb])&&this[ph](),this}[qw](){this[rs]||(!this[Jm]&&!this[Ta].length&&(this[nc]=!0),this[Cb]=!1,this[Zs]=!0,this.emit("resume"),this[Xs].length?this[_N]():this[Ah]?this[ph]():this.emit("drain"))}resume(){return this[qw]()}pause(){this[Zs]=!1,this[Cb]=!0,this[nc]=!1}get destroyed(){return this[rs]}get flowing(){return this[Zs]}get paused(){return this[Cb]}[e7](e){this[ia]?this[$s]+=1:this[$s]+=e.length,this[Xs].push(e)}[UN](){return this[ia]?this[$s]-=1:this[$s]-=this[Xs][0].length,this[Xs].shift()}[_N](e=!1){do;while(this[UQe](this[UN]())&&this[Xs].length);!e&&!this[Xs].length&&!this[Ah]&&this.emit("drain")}[UQe](e){return this.emit("data",e),this[Zs]}pipe(e,r){if(this[rs])return e;this[nc]=!1;let s=this[gg];return r=r||{},e===MQe.stdout||e===MQe.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,s?r.end&&e.end():(this[Ta].push(r.proxyErrors?new s7(this,e,r):new jN(this,e,r)),this[CA]?Bb(()=>this[qw]()):this[qw]()),e}unpipe(e){let r=this[Ta].find(s=>s.dest===e);r&&(this[Ta].length===1?(this[Zs]&&this[Jm]===0&&(this[Zs]=!1),this[Ta]=[]):this[Ta].splice(this[Ta].indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let s=super.on(e,r);if(e==="data")this[nc]=!1,this[Jm]++,!this[Ta].length&&!this[Zs]&&this[qw]();else if(e==="readable"&&this[$s]!==0)super.emit("readable");else if(GNt(e)&&this[gg])super.emit(e),this.removeAllListeners(e);else if(e==="error"&&this[Ib]){let a=r;this[CA]?Bb(()=>a.call(this,this[Ib])):a.call(this,this[Ib])}return s}removeListener(e,r){return this.off(e,r)}off(e,r){let s=super.off(e,r);return e==="data"&&(this[Jm]=this.listeners("data").length,this[Jm]===0&&!this[nc]&&!this[Ta].length&&(this[Zs]=!1)),s}removeAllListeners(e){let r=super.removeAllListeners(e);return(e==="data"||e===void 0)&&(this[Jm]=0,!this[nc]&&!this[Ta].length&&(this[Zs]=!1)),r}get emittedEnd(){return this[gg]}[ph](){!this[LN]&&!this[gg]&&!this[rs]&&this[Xs].length===0&&this[Ah]&&(this[LN]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[MN]&&this.emit("close"),this[LN]=!1)}emit(e,...r){let s=r[0];if(e!=="error"&&e!=="close"&&e!==rs&&this[rs])return!1;if(e==="data")return!this[ia]&&!s?!1:this[CA]?(Bb(()=>this[r7](s)),!0):this[r7](s);if(e==="end")return this[HQe]();if(e==="close"){if(this[MN]=!0,!this[gg]&&!this[rs])return!1;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[Ib]=s,super.emit(t7,s);let n=!this[wb]||this.listeners("error").length?super.emit("error",s):!1;return this[ph](),n}else if(e==="resume"){let n=super.emit("resume");return this[ph](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,...r);return this[ph](),a}[r7](e){for(let s of this[Ta])s.dest.write(e)===!1&&this.pause();let r=this[nc]?!1:super.emit("data",e);return this[ph](),r}[HQe](){return this[gg]?!1:(this[gg]=!0,this.readable=!1,this[CA]?(Bb(()=>this[n7]()),!0):this[n7]())}[n7](){if(this[jw]){let r=this[jw].end();if(r){for(let s of this[Ta])s.dest.write(r);this[nc]||super.emit("data",r)}}for(let r of this[Ta])r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}async collect(){let e=Object.assign([],{dataLength:0});this[ia]||(e.dataLength=0);let r=this.promise();return this.on("data",s=>{e.push(s),this[ia]||(e.dataLength+=s.length)}),await r,e}async concat(){if(this[ia])throw new Error("cannot concat in objectMode");let e=await this.collect();return this[ff]?e.join(""):Buffer.concat(e,e.dataLength)}async promise(){return new Promise((e,r)=>{this.on(rs,()=>r(new Error("stream destroyed"))),this.on("error",s=>r(s)),this.on("end",()=>e())})}[Symbol.asyncIterator](){this[nc]=!1;let e=!1,r=async()=>(this.pause(),e=!0,{value:void 0,done:!0});return{next:()=>{if(e)return r();let a=this.read();if(a!==null)return Promise.resolve({done:!1,value:a});if(this[Ah])return r();let n,c,f=C=>{this.off("data",p),this.off("end",h),this.off(rs,E),r(),c(C)},p=C=>{this.off("error",f),this.off("end",h),this.off(rs,E),this.pause(),n({value:C,done:!!this[Ah]})},h=()=>{this.off("error",f),this.off("data",p),this.off(rs,E),r(),n({done:!0,value:void 0})},E=()=>f(new Error("stream destroyed"));return new Promise((C,S)=>{c=S,n=C,this.once(rs,E),this.once("error",f),this.once("end",h),this.once("data",p)})},throw:r,return:r,[Symbol.asyncIterator](){return this}}}[Symbol.iterator](){this[nc]=!1;let e=!1,r=()=>(this.pause(),this.off(t7,r),this.off(rs,r),this.off("end",r),e=!0,{done:!0,value:void 0}),s=()=>{if(e)return r();let a=this.read();return a===null?r():{done:!1,value:a}};return this.once("end",r),this.once(t7,r),this.once(rs,r),{next:s,throw:r,return:r,[Symbol.iterator](){return this}}}destroy(e){if(this[rs])return e?this.emit("error",e):this.emit(rs),this;this[rs]=!0,this[nc]=!0,this[Xs].length=0,this[$s]=0;let r=this;return typeof r.close=="function"&&!this[MN]&&r.close(),e?this.emit("error",e):this.emit(rs),this}static get isStream(){return Ra.isStream}};Ra.Minipass=qN});var YQe=L((ZEr,wA)=>{"use strict";var Sb=Ie("crypto"),{Minipass:JNt}=qQe(),l7=["sha512","sha384","sha256"],u7=["sha512"],zNt=/^[a-z0-9+/]+(?:=?=?)$/i,ZNt=/^([a-z0-9]+)-([^?]+)([?\S*]*)$/,XNt=/^([a-z0-9]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)?$/,$Nt=/^[\x21-\x7E]+$/,Db=t=>t?.length?`?${t.join("?")}`:"",c7=class extends JNt{#t;#r;#i;constructor(e){super(),this.size=0,this.opts=e,this.#e(),e?.algorithms?this.algorithms=[...e.algorithms]:this.algorithms=[...u7],this.algorithm!==null&&!this.algorithms.includes(this.algorithm)&&this.algorithms.push(this.algorithm),this.hashes=this.algorithms.map(Sb.createHash)}#e(){this.sri=this.opts?.integrity?ic(this.opts?.integrity,this.opts):null,this.expectedSize=this.opts?.size,this.sri?this.sri.isHash?(this.goodSri=!0,this.algorithm=this.sri.algorithm):(this.goodSri=!this.sri.isEmpty(),this.algorithm=this.sri.pickAlgorithm(this.opts)):this.algorithm=null,this.digests=this.goodSri?this.sri[this.algorithm]:null,this.optString=Db(this.opts?.options)}on(e,r){return e==="size"&&this.#r?r(this.#r):e==="integrity"&&this.#t?r(this.#t):e==="verified"&&this.#i?r(this.#i):super.on(e,r)}emit(e,r){return e==="end"&&this.#n(),super.emit(e,r)}write(e){return this.size+=e.length,this.hashes.forEach(r=>r.update(e)),super.write(e)}#n(){this.goodSri||this.#e();let e=ic(this.hashes.map((s,a)=>`${this.algorithms[a]}-${s.digest("base64")}${this.optString}`).join(" "),this.opts),r=this.goodSri&&e.match(this.sri,this.opts);if(typeof this.expectedSize=="number"&&this.size!==this.expectedSize){let s=new Error(`stream size mismatch when checking ${this.sri}. - Wanted: ${this.expectedSize} - Found: ${this.size}`);s.code="EBADSIZE",s.found=this.size,s.expected=this.expectedSize,s.sri=this.sri,this.emit("error",s)}else if(this.sri&&!r){let s=new Error(`${this.sri} integrity checksum failed when using ${this.algorithm}: wanted ${this.digests} but got ${e}. (${this.size} bytes)`);s.code="EINTEGRITY",s.found=e,s.expected=this.digests,s.algorithm=this.algorithm,s.sri=this.sri,this.emit("error",s)}else this.#r=this.size,this.emit("size",this.size),this.#t=e,this.emit("integrity",e),r&&(this.#i=r,this.emit("verified",r))}},hh=class{get isHash(){return!0}constructor(e,r){let s=r?.strict;this.source=e.trim(),this.digest="",this.algorithm="",this.options=[];let a=this.source.match(s?XNt:ZNt);if(!a||s&&!l7.includes(a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];n&&(this.options=n.slice(1).split("?"))}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}match(e,r){let s=ic(e,r);if(!s)return!1;if(s.isIntegrity){let a=s.pickAlgorithm(r,[this.algorithm]);if(!a)return!1;let n=s[a].find(c=>c.digest===this.digest);return n||!1}return s.digest===this.digest?s:!1}toString(e){return e?.strict&&!(l7.includes(this.algorithm)&&this.digest.match(zNt)&&this.options.every(r=>r.match($Nt)))?"":`${this.algorithm}-${this.digest}${Db(this.options)}`}};function GQe(t,e,r,s){let a=t!=="",n=!1,c="",f=s.length-1;for(let h=0;hs[a].find(c=>n.digest===c.digest)))throw new Error("hashes do not match, cannot update integrity")}else this[a]=s[a]}match(e,r){let s=ic(e,r);if(!s)return!1;let a=s.pickAlgorithm(r,Object.keys(this));return!!a&&this[a]&&s[a]&&this[a].find(n=>s[a].find(c=>n.digest===c.digest))||!1}pickAlgorithm(e,r){let s=e?.pickAlgorithm||aOt,a=Object.keys(this).filter(n=>r?.length?r.includes(n):!0);return a.length?a.reduce((n,c)=>s(n,c)||n):null}};wA.exports.parse=ic;function ic(t,e){if(!t)return null;if(typeof t=="string")return a7(t,e);if(t.algorithm&&t.digest){let r=new zm;return r[t.algorithm]=[t],a7(vb(r,e),e)}else return a7(vb(t,e),e)}function a7(t,e){if(e?.single)return new hh(t,e);let r=t.trim().split(/\s+/).reduce((s,a)=>{let n=new hh(a,e);if(n.algorithm&&n.digest){let c=n.algorithm;s[c]||(s[c]=[]),s[c].push(n)}return s},new zm);return r.isEmpty()?null:r}wA.exports.stringify=vb;function vb(t,e){return t.algorithm&&t.digest?hh.prototype.toString.call(t,e):typeof t=="string"?vb(ic(t,e),e):zm.prototype.toString.call(t,e)}wA.exports.fromHex=eOt;function eOt(t,e,r){let s=Db(r?.options);return ic(`${e}-${Buffer.from(t,"hex").toString("base64")}${s}`,r)}wA.exports.fromData=tOt;function tOt(t,e){let r=e?.algorithms||[...u7],s=Db(e?.options);return r.reduce((a,n)=>{let c=Sb.createHash(n).update(t).digest("base64"),f=new hh(`${n}-${c}${s}`,e);if(f.algorithm&&f.digest){let p=f.algorithm;a[p]||(a[p]=[]),a[p].push(f)}return a},new zm)}wA.exports.fromStream=rOt;function rOt(t,e){let r=f7(e);return new Promise((s,a)=>{t.pipe(r),t.on("error",a),r.on("error",a);let n;r.on("integrity",c=>{n=c}),r.on("end",()=>s(n)),r.resume()})}wA.exports.checkData=nOt;function nOt(t,e,r){if(e=ic(e,r),!e||!Object.keys(e).length){if(r?.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let s=e.pickAlgorithm(r),a=Sb.createHash(s).update(t).digest("base64"),n=ic({algorithm:s,digest:a}),c=n.match(e,r);if(r=r||{},c||!r.error)return c;if(typeof r.size=="number"&&t.length!==r.size){let f=new Error(`data size mismatch when checking ${e}. - Wanted: ${r.size} - Found: ${t.length}`);throw f.code="EBADSIZE",f.found=t.length,f.expected=r.size,f.sri=e,f}else{let f=new Error(`Integrity checksum failed when using ${s}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw f.code="EINTEGRITY",f.found=n,f.expected=e,f.algorithm=s,f.sri=e,f}}wA.exports.checkStream=iOt;function iOt(t,e,r){if(r=r||Object.create(null),r.integrity=e,e=ic(e,r),!e||!Object.keys(e).length)return Promise.reject(Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"}));let s=f7(r);return new Promise((a,n)=>{t.pipe(s),t.on("error",n),s.on("error",n);let c;s.on("verified",f=>{c=f}),s.on("end",()=>a(c)),s.resume()})}wA.exports.integrityStream=f7;function f7(t=Object.create(null)){return new c7(t)}wA.exports.create=sOt;function sOt(t){let e=t?.algorithms||[...u7],r=Db(t?.options),s=e.map(Sb.createHash);return{update:function(a,n){return s.forEach(c=>c.update(a,n)),this},digest:function(){return e.reduce((n,c)=>{let f=s.shift().digest("base64"),p=new hh(`${c}-${f}${r}`,t);if(p.algorithm&&p.digest){let h=p.algorithm;n[h]||(n[h]=[]),n[h].push(p)}return n},new zm)}}}var oOt=Sb.getHashes(),WQe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>oOt.includes(t));function aOt(t,e){return WQe.indexOf(t.toLowerCase())>=WQe.indexOf(e.toLowerCase())?t:e}});var A7=L(dg=>{"use strict";Object.defineProperty(dg,"__esModule",{value:!0});dg.Signature=dg.Envelope=void 0;dg.Envelope={fromJSON(t){return{payload:GN(t.payload)?Buffer.from(VQe(t.payload)):Buffer.alloc(0),payloadType:GN(t.payloadType)?globalThis.String(t.payloadType):"",signatures:globalThis.Array.isArray(t?.signatures)?t.signatures.map(e=>dg.Signature.fromJSON(e)):[]}},toJSON(t){let e={};return t.payload.length!==0&&(e.payload=KQe(t.payload)),t.payloadType!==""&&(e.payloadType=t.payloadType),t.signatures?.length&&(e.signatures=t.signatures.map(r=>dg.Signature.toJSON(r))),e}};dg.Signature={fromJSON(t){return{sig:GN(t.sig)?Buffer.from(VQe(t.sig)):Buffer.alloc(0),keyid:GN(t.keyid)?globalThis.String(t.keyid):""}},toJSON(t){let e={};return t.sig.length!==0&&(e.sig=KQe(t.sig)),t.keyid!==""&&(e.keyid=t.keyid),e}};function VQe(t){return Uint8Array.from(globalThis.Buffer.from(t,"base64"))}function KQe(t){return globalThis.Buffer.from(t).toString("base64")}function GN(t){return t!=null}});var zQe=L(WN=>{"use strict";Object.defineProperty(WN,"__esModule",{value:!0});WN.Timestamp=void 0;WN.Timestamp={fromJSON(t){return{seconds:JQe(t.seconds)?globalThis.String(t.seconds):"0",nanos:JQe(t.nanos)?globalThis.Number(t.nanos):0}},toJSON(t){let e={};return t.seconds!=="0"&&(e.seconds=t.seconds),t.nanos!==0&&(e.nanos=Math.round(t.nanos)),e}};function JQe(t){return t!=null}});var Gw=L(_r=>{"use strict";Object.defineProperty(_r,"__esModule",{value:!0});_r.TimeRange=_r.X509CertificateChain=_r.SubjectAlternativeName=_r.X509Certificate=_r.DistinguishedName=_r.ObjectIdentifierValuePair=_r.ObjectIdentifier=_r.PublicKeyIdentifier=_r.PublicKey=_r.RFC3161SignedTimestamp=_r.LogId=_r.MessageSignature=_r.HashOutput=_r.SubjectAlternativeNameType=_r.PublicKeyDetails=_r.HashAlgorithm=void 0;_r.hashAlgorithmFromJSON=XQe;_r.hashAlgorithmToJSON=$Qe;_r.publicKeyDetailsFromJSON=eTe;_r.publicKeyDetailsToJSON=tTe;_r.subjectAlternativeNameTypeFromJSON=rTe;_r.subjectAlternativeNameTypeToJSON=nTe;var lOt=zQe(),El;(function(t){t[t.HASH_ALGORITHM_UNSPECIFIED=0]="HASH_ALGORITHM_UNSPECIFIED",t[t.SHA2_256=1]="SHA2_256",t[t.SHA2_384=2]="SHA2_384",t[t.SHA2_512=3]="SHA2_512",t[t.SHA3_256=4]="SHA3_256",t[t.SHA3_384=5]="SHA3_384"})(El||(_r.HashAlgorithm=El={}));function XQe(t){switch(t){case 0:case"HASH_ALGORITHM_UNSPECIFIED":return El.HASH_ALGORITHM_UNSPECIFIED;case 1:case"SHA2_256":return El.SHA2_256;case 2:case"SHA2_384":return El.SHA2_384;case 3:case"SHA2_512":return El.SHA2_512;case 4:case"SHA3_256":return El.SHA3_256;case 5:case"SHA3_384":return El.SHA3_384;default:throw new globalThis.Error("Unrecognized enum value "+t+" for enum HashAlgorithm")}}function $Qe(t){switch(t){case El.HASH_ALGORITHM_UNSPECIFIED:return"HASH_ALGORITHM_UNSPECIFIED";case El.SHA2_256:return"SHA2_256";case El.SHA2_384:return"SHA2_384";case El.SHA2_512:return"SHA2_512";case El.SHA3_256:return"SHA3_256";case El.SHA3_384:return"SHA3_384";default:throw new globalThis.Error("Unrecognized enum value "+t+" for enum HashAlgorithm")}}var rn;(function(t){t[t.PUBLIC_KEY_DETAILS_UNSPECIFIED=0]="PUBLIC_KEY_DETAILS_UNSPECIFIED",t[t.PKCS1_RSA_PKCS1V5=1]="PKCS1_RSA_PKCS1V5",t[t.PKCS1_RSA_PSS=2]="PKCS1_RSA_PSS",t[t.PKIX_RSA_PKCS1V5=3]="PKIX_RSA_PKCS1V5",t[t.PKIX_RSA_PSS=4]="PKIX_RSA_PSS",t[t.PKIX_RSA_PKCS1V15_2048_SHA256=9]="PKIX_RSA_PKCS1V15_2048_SHA256",t[t.PKIX_RSA_PKCS1V15_3072_SHA256=10]="PKIX_RSA_PKCS1V15_3072_SHA256",t[t.PKIX_RSA_PKCS1V15_4096_SHA256=11]="PKIX_RSA_PKCS1V15_4096_SHA256",t[t.PKIX_RSA_PSS_2048_SHA256=16]="PKIX_RSA_PSS_2048_SHA256",t[t.PKIX_RSA_PSS_3072_SHA256=17]="PKIX_RSA_PSS_3072_SHA256",t[t.PKIX_RSA_PSS_4096_SHA256=18]="PKIX_RSA_PSS_4096_SHA256",t[t.PKIX_ECDSA_P256_HMAC_SHA_256=6]="PKIX_ECDSA_P256_HMAC_SHA_256",t[t.PKIX_ECDSA_P256_SHA_256=5]="PKIX_ECDSA_P256_SHA_256",t[t.PKIX_ECDSA_P384_SHA_384=12]="PKIX_ECDSA_P384_SHA_384",t[t.PKIX_ECDSA_P521_SHA_512=13]="PKIX_ECDSA_P521_SHA_512",t[t.PKIX_ED25519=7]="PKIX_ED25519",t[t.PKIX_ED25519_PH=8]="PKIX_ED25519_PH",t[t.LMS_SHA256=14]="LMS_SHA256",t[t.LMOTS_SHA256=15]="LMOTS_SHA256"})(rn||(_r.PublicKeyDetails=rn={}));function eTe(t){switch(t){case 0:case"PUBLIC_KEY_DETAILS_UNSPECIFIED":return rn.PUBLIC_KEY_DETAILS_UNSPECIFIED;case 1:case"PKCS1_RSA_PKCS1V5":return rn.PKCS1_RSA_PKCS1V5;case 2:case"PKCS1_RSA_PSS":return rn.PKCS1_RSA_PSS;case 3:case"PKIX_RSA_PKCS1V5":return rn.PKIX_RSA_PKCS1V5;case 4:case"PKIX_RSA_PSS":return rn.PKIX_RSA_PSS;case 9:case"PKIX_RSA_PKCS1V15_2048_SHA256":return rn.PKIX_RSA_PKCS1V15_2048_SHA256;case 10:case"PKIX_RSA_PKCS1V15_3072_SHA256":return rn.PKIX_RSA_PKCS1V15_3072_SHA256;case 11:case"PKIX_RSA_PKCS1V15_4096_SHA256":return rn.PKIX_RSA_PKCS1V15_4096_SHA256;case 16:case"PKIX_RSA_PSS_2048_SHA256":return rn.PKIX_RSA_PSS_2048_SHA256;case 17:case"PKIX_RSA_PSS_3072_SHA256":return rn.PKIX_RSA_PSS_3072_SHA256;case 18:case"PKIX_RSA_PSS_4096_SHA256":return rn.PKIX_RSA_PSS_4096_SHA256;case 6:case"PKIX_ECDSA_P256_HMAC_SHA_256":return rn.PKIX_ECDSA_P256_HMAC_SHA_256;case 5:case"PKIX_ECDSA_P256_SHA_256":return rn.PKIX_ECDSA_P256_SHA_256;case 12:case"PKIX_ECDSA_P384_SHA_384":return rn.PKIX_ECDSA_P384_SHA_384;case 13:case"PKIX_ECDSA_P521_SHA_512":return rn.PKIX_ECDSA_P521_SHA_512;case 7:case"PKIX_ED25519":return rn.PKIX_ED25519;case 8:case"PKIX_ED25519_PH":return rn.PKIX_ED25519_PH;case 14:case"LMS_SHA256":return rn.LMS_SHA256;case 15:case"LMOTS_SHA256":return rn.LMOTS_SHA256;default:throw new globalThis.Error("Unrecognized enum value "+t+" for enum PublicKeyDetails")}}function tTe(t){switch(t){case rn.PUBLIC_KEY_DETAILS_UNSPECIFIED:return"PUBLIC_KEY_DETAILS_UNSPECIFIED";case rn.PKCS1_RSA_PKCS1V5:return"PKCS1_RSA_PKCS1V5";case rn.PKCS1_RSA_PSS:return"PKCS1_RSA_PSS";case rn.PKIX_RSA_PKCS1V5:return"PKIX_RSA_PKCS1V5";case rn.PKIX_RSA_PSS:return"PKIX_RSA_PSS";case rn.PKIX_RSA_PKCS1V15_2048_SHA256:return"PKIX_RSA_PKCS1V15_2048_SHA256";case rn.PKIX_RSA_PKCS1V15_3072_SHA256:return"PKIX_RSA_PKCS1V15_3072_SHA256";case rn.PKIX_RSA_PKCS1V15_4096_SHA256:return"PKIX_RSA_PKCS1V15_4096_SHA256";case rn.PKIX_RSA_PSS_2048_SHA256:return"PKIX_RSA_PSS_2048_SHA256";case rn.PKIX_RSA_PSS_3072_SHA256:return"PKIX_RSA_PSS_3072_SHA256";case rn.PKIX_RSA_PSS_4096_SHA256:return"PKIX_RSA_PSS_4096_SHA256";case rn.PKIX_ECDSA_P256_HMAC_SHA_256:return"PKIX_ECDSA_P256_HMAC_SHA_256";case rn.PKIX_ECDSA_P256_SHA_256:return"PKIX_ECDSA_P256_SHA_256";case rn.PKIX_ECDSA_P384_SHA_384:return"PKIX_ECDSA_P384_SHA_384";case rn.PKIX_ECDSA_P521_SHA_512:return"PKIX_ECDSA_P521_SHA_512";case rn.PKIX_ED25519:return"PKIX_ED25519";case rn.PKIX_ED25519_PH:return"PKIX_ED25519_PH";case rn.LMS_SHA256:return"LMS_SHA256";case rn.LMOTS_SHA256:return"LMOTS_SHA256";default:throw new globalThis.Error("Unrecognized enum value "+t+" for enum PublicKeyDetails")}}var BA;(function(t){t[t.SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED=0]="SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED",t[t.EMAIL=1]="EMAIL",t[t.URI=2]="URI",t[t.OTHER_NAME=3]="OTHER_NAME"})(BA||(_r.SubjectAlternativeNameType=BA={}));function rTe(t){switch(t){case 0:case"SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED":return BA.SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED;case 1:case"EMAIL":return BA.EMAIL;case 2:case"URI":return BA.URI;case 3:case"OTHER_NAME":return BA.OTHER_NAME;default:throw new globalThis.Error("Unrecognized enum value "+t+" for enum SubjectAlternativeNameType")}}function nTe(t){switch(t){case BA.SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED:return"SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED";case BA.EMAIL:return"EMAIL";case BA.URI:return"URI";case BA.OTHER_NAME:return"OTHER_NAME";default:throw new globalThis.Error("Unrecognized enum value "+t+" for enum SubjectAlternativeNameType")}}_r.HashOutput={fromJSON(t){return{algorithm:ys(t.algorithm)?XQe(t.algorithm):0,digest:ys(t.digest)?Buffer.from(Zm(t.digest)):Buffer.alloc(0)}},toJSON(t){let e={};return t.algorithm!==0&&(e.algorithm=$Qe(t.algorithm)),t.digest.length!==0&&(e.digest=Xm(t.digest)),e}};_r.MessageSignature={fromJSON(t){return{messageDigest:ys(t.messageDigest)?_r.HashOutput.fromJSON(t.messageDigest):void 0,signature:ys(t.signature)?Buffer.from(Zm(t.signature)):Buffer.alloc(0)}},toJSON(t){let e={};return t.messageDigest!==void 0&&(e.messageDigest=_r.HashOutput.toJSON(t.messageDigest)),t.signature.length!==0&&(e.signature=Xm(t.signature)),e}};_r.LogId={fromJSON(t){return{keyId:ys(t.keyId)?Buffer.from(Zm(t.keyId)):Buffer.alloc(0)}},toJSON(t){let e={};return t.keyId.length!==0&&(e.keyId=Xm(t.keyId)),e}};_r.RFC3161SignedTimestamp={fromJSON(t){return{signedTimestamp:ys(t.signedTimestamp)?Buffer.from(Zm(t.signedTimestamp)):Buffer.alloc(0)}},toJSON(t){let e={};return t.signedTimestamp.length!==0&&(e.signedTimestamp=Xm(t.signedTimestamp)),e}};_r.PublicKey={fromJSON(t){return{rawBytes:ys(t.rawBytes)?Buffer.from(Zm(t.rawBytes)):void 0,keyDetails:ys(t.keyDetails)?eTe(t.keyDetails):0,validFor:ys(t.validFor)?_r.TimeRange.fromJSON(t.validFor):void 0}},toJSON(t){let e={};return t.rawBytes!==void 0&&(e.rawBytes=Xm(t.rawBytes)),t.keyDetails!==0&&(e.keyDetails=tTe(t.keyDetails)),t.validFor!==void 0&&(e.validFor=_r.TimeRange.toJSON(t.validFor)),e}};_r.PublicKeyIdentifier={fromJSON(t){return{hint:ys(t.hint)?globalThis.String(t.hint):""}},toJSON(t){let e={};return t.hint!==""&&(e.hint=t.hint),e}};_r.ObjectIdentifier={fromJSON(t){return{id:globalThis.Array.isArray(t?.id)?t.id.map(e=>globalThis.Number(e)):[]}},toJSON(t){let e={};return t.id?.length&&(e.id=t.id.map(r=>Math.round(r))),e}};_r.ObjectIdentifierValuePair={fromJSON(t){return{oid:ys(t.oid)?_r.ObjectIdentifier.fromJSON(t.oid):void 0,value:ys(t.value)?Buffer.from(Zm(t.value)):Buffer.alloc(0)}},toJSON(t){let e={};return t.oid!==void 0&&(e.oid=_r.ObjectIdentifier.toJSON(t.oid)),t.value.length!==0&&(e.value=Xm(t.value)),e}};_r.DistinguishedName={fromJSON(t){return{organization:ys(t.organization)?globalThis.String(t.organization):"",commonName:ys(t.commonName)?globalThis.String(t.commonName):""}},toJSON(t){let e={};return t.organization!==""&&(e.organization=t.organization),t.commonName!==""&&(e.commonName=t.commonName),e}};_r.X509Certificate={fromJSON(t){return{rawBytes:ys(t.rawBytes)?Buffer.from(Zm(t.rawBytes)):Buffer.alloc(0)}},toJSON(t){let e={};return t.rawBytes.length!==0&&(e.rawBytes=Xm(t.rawBytes)),e}};_r.SubjectAlternativeName={fromJSON(t){return{type:ys(t.type)?rTe(t.type):0,identity:ys(t.regexp)?{$case:"regexp",regexp:globalThis.String(t.regexp)}:ys(t.value)?{$case:"value",value:globalThis.String(t.value)}:void 0}},toJSON(t){let e={};return t.type!==0&&(e.type=nTe(t.type)),t.identity?.$case==="regexp"?e.regexp=t.identity.regexp:t.identity?.$case==="value"&&(e.value=t.identity.value),e}};_r.X509CertificateChain={fromJSON(t){return{certificates:globalThis.Array.isArray(t?.certificates)?t.certificates.map(e=>_r.X509Certificate.fromJSON(e)):[]}},toJSON(t){let e={};return t.certificates?.length&&(e.certificates=t.certificates.map(r=>_r.X509Certificate.toJSON(r))),e}};_r.TimeRange={fromJSON(t){return{start:ys(t.start)?ZQe(t.start):void 0,end:ys(t.end)?ZQe(t.end):void 0}},toJSON(t){let e={};return t.start!==void 0&&(e.start=t.start.toISOString()),t.end!==void 0&&(e.end=t.end.toISOString()),e}};function Zm(t){return Uint8Array.from(globalThis.Buffer.from(t,"base64"))}function Xm(t){return globalThis.Buffer.from(t).toString("base64")}function cOt(t){let e=(globalThis.Number(t.seconds)||0)*1e3;return e+=(t.nanos||0)/1e6,new globalThis.Date(e)}function ZQe(t){return t instanceof globalThis.Date?t:typeof t=="string"?new globalThis.Date(t):cOt(lOt.Timestamp.fromJSON(t))}function ys(t){return t!=null}});var p7=L(Es=>{"use strict";Object.defineProperty(Es,"__esModule",{value:!0});Es.TransparencyLogEntry=Es.InclusionPromise=Es.InclusionProof=Es.Checkpoint=Es.KindVersion=void 0;var iTe=Gw();Es.KindVersion={fromJSON(t){return{kind:Fa(t.kind)?globalThis.String(t.kind):"",version:Fa(t.version)?globalThis.String(t.version):""}},toJSON(t){let e={};return t.kind!==""&&(e.kind=t.kind),t.version!==""&&(e.version=t.version),e}};Es.Checkpoint={fromJSON(t){return{envelope:Fa(t.envelope)?globalThis.String(t.envelope):""}},toJSON(t){let e={};return t.envelope!==""&&(e.envelope=t.envelope),e}};Es.InclusionProof={fromJSON(t){return{logIndex:Fa(t.logIndex)?globalThis.String(t.logIndex):"0",rootHash:Fa(t.rootHash)?Buffer.from(YN(t.rootHash)):Buffer.alloc(0),treeSize:Fa(t.treeSize)?globalThis.String(t.treeSize):"0",hashes:globalThis.Array.isArray(t?.hashes)?t.hashes.map(e=>Buffer.from(YN(e))):[],checkpoint:Fa(t.checkpoint)?Es.Checkpoint.fromJSON(t.checkpoint):void 0}},toJSON(t){let e={};return t.logIndex!=="0"&&(e.logIndex=t.logIndex),t.rootHash.length!==0&&(e.rootHash=VN(t.rootHash)),t.treeSize!=="0"&&(e.treeSize=t.treeSize),t.hashes?.length&&(e.hashes=t.hashes.map(r=>VN(r))),t.checkpoint!==void 0&&(e.checkpoint=Es.Checkpoint.toJSON(t.checkpoint)),e}};Es.InclusionPromise={fromJSON(t){return{signedEntryTimestamp:Fa(t.signedEntryTimestamp)?Buffer.from(YN(t.signedEntryTimestamp)):Buffer.alloc(0)}},toJSON(t){let e={};return t.signedEntryTimestamp.length!==0&&(e.signedEntryTimestamp=VN(t.signedEntryTimestamp)),e}};Es.TransparencyLogEntry={fromJSON(t){return{logIndex:Fa(t.logIndex)?globalThis.String(t.logIndex):"0",logId:Fa(t.logId)?iTe.LogId.fromJSON(t.logId):void 0,kindVersion:Fa(t.kindVersion)?Es.KindVersion.fromJSON(t.kindVersion):void 0,integratedTime:Fa(t.integratedTime)?globalThis.String(t.integratedTime):"0",inclusionPromise:Fa(t.inclusionPromise)?Es.InclusionPromise.fromJSON(t.inclusionPromise):void 0,inclusionProof:Fa(t.inclusionProof)?Es.InclusionProof.fromJSON(t.inclusionProof):void 0,canonicalizedBody:Fa(t.canonicalizedBody)?Buffer.from(YN(t.canonicalizedBody)):Buffer.alloc(0)}},toJSON(t){let e={};return t.logIndex!=="0"&&(e.logIndex=t.logIndex),t.logId!==void 0&&(e.logId=iTe.LogId.toJSON(t.logId)),t.kindVersion!==void 0&&(e.kindVersion=Es.KindVersion.toJSON(t.kindVersion)),t.integratedTime!=="0"&&(e.integratedTime=t.integratedTime),t.inclusionPromise!==void 0&&(e.inclusionPromise=Es.InclusionPromise.toJSON(t.inclusionPromise)),t.inclusionProof!==void 0&&(e.inclusionProof=Es.InclusionProof.toJSON(t.inclusionProof)),t.canonicalizedBody.length!==0&&(e.canonicalizedBody=VN(t.canonicalizedBody)),e}};function YN(t){return Uint8Array.from(globalThis.Buffer.from(t,"base64"))}function VN(t){return globalThis.Buffer.from(t).toString("base64")}function Fa(t){return t!=null}});var h7=L($c=>{"use strict";Object.defineProperty($c,"__esModule",{value:!0});$c.Bundle=$c.VerificationMaterial=$c.TimestampVerificationData=void 0;var sTe=A7(),vA=Gw(),oTe=p7();$c.TimestampVerificationData={fromJSON(t){return{rfc3161Timestamps:globalThis.Array.isArray(t?.rfc3161Timestamps)?t.rfc3161Timestamps.map(e=>vA.RFC3161SignedTimestamp.fromJSON(e)):[]}},toJSON(t){let e={};return t.rfc3161Timestamps?.length&&(e.rfc3161Timestamps=t.rfc3161Timestamps.map(r=>vA.RFC3161SignedTimestamp.toJSON(r))),e}};$c.VerificationMaterial={fromJSON(t){return{content:mg(t.publicKey)?{$case:"publicKey",publicKey:vA.PublicKeyIdentifier.fromJSON(t.publicKey)}:mg(t.x509CertificateChain)?{$case:"x509CertificateChain",x509CertificateChain:vA.X509CertificateChain.fromJSON(t.x509CertificateChain)}:mg(t.certificate)?{$case:"certificate",certificate:vA.X509Certificate.fromJSON(t.certificate)}:void 0,tlogEntries:globalThis.Array.isArray(t?.tlogEntries)?t.tlogEntries.map(e=>oTe.TransparencyLogEntry.fromJSON(e)):[],timestampVerificationData:mg(t.timestampVerificationData)?$c.TimestampVerificationData.fromJSON(t.timestampVerificationData):void 0}},toJSON(t){let e={};return t.content?.$case==="publicKey"?e.publicKey=vA.PublicKeyIdentifier.toJSON(t.content.publicKey):t.content?.$case==="x509CertificateChain"?e.x509CertificateChain=vA.X509CertificateChain.toJSON(t.content.x509CertificateChain):t.content?.$case==="certificate"&&(e.certificate=vA.X509Certificate.toJSON(t.content.certificate)),t.tlogEntries?.length&&(e.tlogEntries=t.tlogEntries.map(r=>oTe.TransparencyLogEntry.toJSON(r))),t.timestampVerificationData!==void 0&&(e.timestampVerificationData=$c.TimestampVerificationData.toJSON(t.timestampVerificationData)),e}};$c.Bundle={fromJSON(t){return{mediaType:mg(t.mediaType)?globalThis.String(t.mediaType):"",verificationMaterial:mg(t.verificationMaterial)?$c.VerificationMaterial.fromJSON(t.verificationMaterial):void 0,content:mg(t.messageSignature)?{$case:"messageSignature",messageSignature:vA.MessageSignature.fromJSON(t.messageSignature)}:mg(t.dsseEnvelope)?{$case:"dsseEnvelope",dsseEnvelope:sTe.Envelope.fromJSON(t.dsseEnvelope)}:void 0}},toJSON(t){let e={};return t.mediaType!==""&&(e.mediaType=t.mediaType),t.verificationMaterial!==void 0&&(e.verificationMaterial=$c.VerificationMaterial.toJSON(t.verificationMaterial)),t.content?.$case==="messageSignature"?e.messageSignature=vA.MessageSignature.toJSON(t.content.messageSignature):t.content?.$case==="dsseEnvelope"&&(e.dsseEnvelope=sTe.Envelope.toJSON(t.content.dsseEnvelope)),e}};function mg(t){return t!=null}});var g7=L(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});Fi.ClientTrustConfig=Fi.SigningConfig=Fi.TrustedRoot=Fi.CertificateAuthority=Fi.TransparencyLogInstance=void 0;var Il=Gw();Fi.TransparencyLogInstance={fromJSON(t){return{baseUrl:sa(t.baseUrl)?globalThis.String(t.baseUrl):"",hashAlgorithm:sa(t.hashAlgorithm)?(0,Il.hashAlgorithmFromJSON)(t.hashAlgorithm):0,publicKey:sa(t.publicKey)?Il.PublicKey.fromJSON(t.publicKey):void 0,logId:sa(t.logId)?Il.LogId.fromJSON(t.logId):void 0,checkpointKeyId:sa(t.checkpointKeyId)?Il.LogId.fromJSON(t.checkpointKeyId):void 0}},toJSON(t){let e={};return t.baseUrl!==""&&(e.baseUrl=t.baseUrl),t.hashAlgorithm!==0&&(e.hashAlgorithm=(0,Il.hashAlgorithmToJSON)(t.hashAlgorithm)),t.publicKey!==void 0&&(e.publicKey=Il.PublicKey.toJSON(t.publicKey)),t.logId!==void 0&&(e.logId=Il.LogId.toJSON(t.logId)),t.checkpointKeyId!==void 0&&(e.checkpointKeyId=Il.LogId.toJSON(t.checkpointKeyId)),e}};Fi.CertificateAuthority={fromJSON(t){return{subject:sa(t.subject)?Il.DistinguishedName.fromJSON(t.subject):void 0,uri:sa(t.uri)?globalThis.String(t.uri):"",certChain:sa(t.certChain)?Il.X509CertificateChain.fromJSON(t.certChain):void 0,validFor:sa(t.validFor)?Il.TimeRange.fromJSON(t.validFor):void 0}},toJSON(t){let e={};return t.subject!==void 0&&(e.subject=Il.DistinguishedName.toJSON(t.subject)),t.uri!==""&&(e.uri=t.uri),t.certChain!==void 0&&(e.certChain=Il.X509CertificateChain.toJSON(t.certChain)),t.validFor!==void 0&&(e.validFor=Il.TimeRange.toJSON(t.validFor)),e}};Fi.TrustedRoot={fromJSON(t){return{mediaType:sa(t.mediaType)?globalThis.String(t.mediaType):"",tlogs:globalThis.Array.isArray(t?.tlogs)?t.tlogs.map(e=>Fi.TransparencyLogInstance.fromJSON(e)):[],certificateAuthorities:globalThis.Array.isArray(t?.certificateAuthorities)?t.certificateAuthorities.map(e=>Fi.CertificateAuthority.fromJSON(e)):[],ctlogs:globalThis.Array.isArray(t?.ctlogs)?t.ctlogs.map(e=>Fi.TransparencyLogInstance.fromJSON(e)):[],timestampAuthorities:globalThis.Array.isArray(t?.timestampAuthorities)?t.timestampAuthorities.map(e=>Fi.CertificateAuthority.fromJSON(e)):[]}},toJSON(t){let e={};return t.mediaType!==""&&(e.mediaType=t.mediaType),t.tlogs?.length&&(e.tlogs=t.tlogs.map(r=>Fi.TransparencyLogInstance.toJSON(r))),t.certificateAuthorities?.length&&(e.certificateAuthorities=t.certificateAuthorities.map(r=>Fi.CertificateAuthority.toJSON(r))),t.ctlogs?.length&&(e.ctlogs=t.ctlogs.map(r=>Fi.TransparencyLogInstance.toJSON(r))),t.timestampAuthorities?.length&&(e.timestampAuthorities=t.timestampAuthorities.map(r=>Fi.CertificateAuthority.toJSON(r))),e}};Fi.SigningConfig={fromJSON(t){return{mediaType:sa(t.mediaType)?globalThis.String(t.mediaType):"",caUrl:sa(t.caUrl)?globalThis.String(t.caUrl):"",oidcUrl:sa(t.oidcUrl)?globalThis.String(t.oidcUrl):"",tlogUrls:globalThis.Array.isArray(t?.tlogUrls)?t.tlogUrls.map(e=>globalThis.String(e)):[],tsaUrls:globalThis.Array.isArray(t?.tsaUrls)?t.tsaUrls.map(e=>globalThis.String(e)):[]}},toJSON(t){let e={};return t.mediaType!==""&&(e.mediaType=t.mediaType),t.caUrl!==""&&(e.caUrl=t.caUrl),t.oidcUrl!==""&&(e.oidcUrl=t.oidcUrl),t.tlogUrls?.length&&(e.tlogUrls=t.tlogUrls),t.tsaUrls?.length&&(e.tsaUrls=t.tsaUrls),e}};Fi.ClientTrustConfig={fromJSON(t){return{mediaType:sa(t.mediaType)?globalThis.String(t.mediaType):"",trustedRoot:sa(t.trustedRoot)?Fi.TrustedRoot.fromJSON(t.trustedRoot):void 0,signingConfig:sa(t.signingConfig)?Fi.SigningConfig.fromJSON(t.signingConfig):void 0}},toJSON(t){let e={};return t.mediaType!==""&&(e.mediaType=t.mediaType),t.trustedRoot!==void 0&&(e.trustedRoot=Fi.TrustedRoot.toJSON(t.trustedRoot)),t.signingConfig!==void 0&&(e.signingConfig=Fi.SigningConfig.toJSON(t.signingConfig)),e}};function sa(t){return t!=null}});var cTe=L(Vr=>{"use strict";Object.defineProperty(Vr,"__esModule",{value:!0});Vr.Input=Vr.Artifact=Vr.ArtifactVerificationOptions_ObserverTimestampOptions=Vr.ArtifactVerificationOptions_TlogIntegratedTimestampOptions=Vr.ArtifactVerificationOptions_TimestampAuthorityOptions=Vr.ArtifactVerificationOptions_CtlogOptions=Vr.ArtifactVerificationOptions_TlogOptions=Vr.ArtifactVerificationOptions=Vr.PublicKeyIdentities=Vr.CertificateIdentities=Vr.CertificateIdentity=void 0;var aTe=h7(),yg=Gw(),lTe=g7();Vr.CertificateIdentity={fromJSON(t){return{issuer:gi(t.issuer)?globalThis.String(t.issuer):"",san:gi(t.san)?yg.SubjectAlternativeName.fromJSON(t.san):void 0,oids:globalThis.Array.isArray(t?.oids)?t.oids.map(e=>yg.ObjectIdentifierValuePair.fromJSON(e)):[]}},toJSON(t){let e={};return t.issuer!==""&&(e.issuer=t.issuer),t.san!==void 0&&(e.san=yg.SubjectAlternativeName.toJSON(t.san)),t.oids?.length&&(e.oids=t.oids.map(r=>yg.ObjectIdentifierValuePair.toJSON(r))),e}};Vr.CertificateIdentities={fromJSON(t){return{identities:globalThis.Array.isArray(t?.identities)?t.identities.map(e=>Vr.CertificateIdentity.fromJSON(e)):[]}},toJSON(t){let e={};return t.identities?.length&&(e.identities=t.identities.map(r=>Vr.CertificateIdentity.toJSON(r))),e}};Vr.PublicKeyIdentities={fromJSON(t){return{publicKeys:globalThis.Array.isArray(t?.publicKeys)?t.publicKeys.map(e=>yg.PublicKey.fromJSON(e)):[]}},toJSON(t){let e={};return t.publicKeys?.length&&(e.publicKeys=t.publicKeys.map(r=>yg.PublicKey.toJSON(r))),e}};Vr.ArtifactVerificationOptions={fromJSON(t){return{signers:gi(t.certificateIdentities)?{$case:"certificateIdentities",certificateIdentities:Vr.CertificateIdentities.fromJSON(t.certificateIdentities)}:gi(t.publicKeys)?{$case:"publicKeys",publicKeys:Vr.PublicKeyIdentities.fromJSON(t.publicKeys)}:void 0,tlogOptions:gi(t.tlogOptions)?Vr.ArtifactVerificationOptions_TlogOptions.fromJSON(t.tlogOptions):void 0,ctlogOptions:gi(t.ctlogOptions)?Vr.ArtifactVerificationOptions_CtlogOptions.fromJSON(t.ctlogOptions):void 0,tsaOptions:gi(t.tsaOptions)?Vr.ArtifactVerificationOptions_TimestampAuthorityOptions.fromJSON(t.tsaOptions):void 0,integratedTsOptions:gi(t.integratedTsOptions)?Vr.ArtifactVerificationOptions_TlogIntegratedTimestampOptions.fromJSON(t.integratedTsOptions):void 0,observerOptions:gi(t.observerOptions)?Vr.ArtifactVerificationOptions_ObserverTimestampOptions.fromJSON(t.observerOptions):void 0}},toJSON(t){let e={};return t.signers?.$case==="certificateIdentities"?e.certificateIdentities=Vr.CertificateIdentities.toJSON(t.signers.certificateIdentities):t.signers?.$case==="publicKeys"&&(e.publicKeys=Vr.PublicKeyIdentities.toJSON(t.signers.publicKeys)),t.tlogOptions!==void 0&&(e.tlogOptions=Vr.ArtifactVerificationOptions_TlogOptions.toJSON(t.tlogOptions)),t.ctlogOptions!==void 0&&(e.ctlogOptions=Vr.ArtifactVerificationOptions_CtlogOptions.toJSON(t.ctlogOptions)),t.tsaOptions!==void 0&&(e.tsaOptions=Vr.ArtifactVerificationOptions_TimestampAuthorityOptions.toJSON(t.tsaOptions)),t.integratedTsOptions!==void 0&&(e.integratedTsOptions=Vr.ArtifactVerificationOptions_TlogIntegratedTimestampOptions.toJSON(t.integratedTsOptions)),t.observerOptions!==void 0&&(e.observerOptions=Vr.ArtifactVerificationOptions_ObserverTimestampOptions.toJSON(t.observerOptions)),e}};Vr.ArtifactVerificationOptions_TlogOptions={fromJSON(t){return{threshold:gi(t.threshold)?globalThis.Number(t.threshold):0,performOnlineVerification:gi(t.performOnlineVerification)?globalThis.Boolean(t.performOnlineVerification):!1,disable:gi(t.disable)?globalThis.Boolean(t.disable):!1}},toJSON(t){let e={};return t.threshold!==0&&(e.threshold=Math.round(t.threshold)),t.performOnlineVerification!==!1&&(e.performOnlineVerification=t.performOnlineVerification),t.disable!==!1&&(e.disable=t.disable),e}};Vr.ArtifactVerificationOptions_CtlogOptions={fromJSON(t){return{threshold:gi(t.threshold)?globalThis.Number(t.threshold):0,disable:gi(t.disable)?globalThis.Boolean(t.disable):!1}},toJSON(t){let e={};return t.threshold!==0&&(e.threshold=Math.round(t.threshold)),t.disable!==!1&&(e.disable=t.disable),e}};Vr.ArtifactVerificationOptions_TimestampAuthorityOptions={fromJSON(t){return{threshold:gi(t.threshold)?globalThis.Number(t.threshold):0,disable:gi(t.disable)?globalThis.Boolean(t.disable):!1}},toJSON(t){let e={};return t.threshold!==0&&(e.threshold=Math.round(t.threshold)),t.disable!==!1&&(e.disable=t.disable),e}};Vr.ArtifactVerificationOptions_TlogIntegratedTimestampOptions={fromJSON(t){return{threshold:gi(t.threshold)?globalThis.Number(t.threshold):0,disable:gi(t.disable)?globalThis.Boolean(t.disable):!1}},toJSON(t){let e={};return t.threshold!==0&&(e.threshold=Math.round(t.threshold)),t.disable!==!1&&(e.disable=t.disable),e}};Vr.ArtifactVerificationOptions_ObserverTimestampOptions={fromJSON(t){return{threshold:gi(t.threshold)?globalThis.Number(t.threshold):0,disable:gi(t.disable)?globalThis.Boolean(t.disable):!1}},toJSON(t){let e={};return t.threshold!==0&&(e.threshold=Math.round(t.threshold)),t.disable!==!1&&(e.disable=t.disable),e}};Vr.Artifact={fromJSON(t){return{data:gi(t.artifactUri)?{$case:"artifactUri",artifactUri:globalThis.String(t.artifactUri)}:gi(t.artifact)?{$case:"artifact",artifact:Buffer.from(uOt(t.artifact))}:gi(t.artifactDigest)?{$case:"artifactDigest",artifactDigest:yg.HashOutput.fromJSON(t.artifactDigest)}:void 0}},toJSON(t){let e={};return t.data?.$case==="artifactUri"?e.artifactUri=t.data.artifactUri:t.data?.$case==="artifact"?e.artifact=fOt(t.data.artifact):t.data?.$case==="artifactDigest"&&(e.artifactDigest=yg.HashOutput.toJSON(t.data.artifactDigest)),e}};Vr.Input={fromJSON(t){return{artifactTrustRoot:gi(t.artifactTrustRoot)?lTe.TrustedRoot.fromJSON(t.artifactTrustRoot):void 0,artifactVerificationOptions:gi(t.artifactVerificationOptions)?Vr.ArtifactVerificationOptions.fromJSON(t.artifactVerificationOptions):void 0,bundle:gi(t.bundle)?aTe.Bundle.fromJSON(t.bundle):void 0,artifact:gi(t.artifact)?Vr.Artifact.fromJSON(t.artifact):void 0}},toJSON(t){let e={};return t.artifactTrustRoot!==void 0&&(e.artifactTrustRoot=lTe.TrustedRoot.toJSON(t.artifactTrustRoot)),t.artifactVerificationOptions!==void 0&&(e.artifactVerificationOptions=Vr.ArtifactVerificationOptions.toJSON(t.artifactVerificationOptions)),t.bundle!==void 0&&(e.bundle=aTe.Bundle.toJSON(t.bundle)),t.artifact!==void 0&&(e.artifact=Vr.Artifact.toJSON(t.artifact)),e}};function uOt(t){return Uint8Array.from(globalThis.Buffer.from(t,"base64"))}function fOt(t){return globalThis.Buffer.from(t).toString("base64")}function gi(t){return t!=null}});var bb=L(eu=>{"use strict";var AOt=eu&&eu.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),Ww=eu&&eu.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&AOt(e,t,r)};Object.defineProperty(eu,"__esModule",{value:!0});Ww(A7(),eu);Ww(h7(),eu);Ww(Gw(),eu);Ww(p7(),eu);Ww(g7(),eu);Ww(cTe(),eu)});var KN=L(Cl=>{"use strict";Object.defineProperty(Cl,"__esModule",{value:!0});Cl.BUNDLE_V03_MEDIA_TYPE=Cl.BUNDLE_V03_LEGACY_MEDIA_TYPE=Cl.BUNDLE_V02_MEDIA_TYPE=Cl.BUNDLE_V01_MEDIA_TYPE=void 0;Cl.isBundleWithCertificateChain=pOt;Cl.isBundleWithPublicKey=hOt;Cl.isBundleWithMessageSignature=gOt;Cl.isBundleWithDsseEnvelope=dOt;Cl.BUNDLE_V01_MEDIA_TYPE="application/vnd.dev.sigstore.bundle+json;version=0.1";Cl.BUNDLE_V02_MEDIA_TYPE="application/vnd.dev.sigstore.bundle+json;version=0.2";Cl.BUNDLE_V03_LEGACY_MEDIA_TYPE="application/vnd.dev.sigstore.bundle+json;version=0.3";Cl.BUNDLE_V03_MEDIA_TYPE="application/vnd.dev.sigstore.bundle.v0.3+json";function pOt(t){return t.verificationMaterial.content.$case==="x509CertificateChain"}function hOt(t){return t.verificationMaterial.content.$case==="publicKey"}function gOt(t){return t.content.$case==="messageSignature"}function dOt(t){return t.content.$case==="dsseEnvelope"}});var fTe=L(zN=>{"use strict";Object.defineProperty(zN,"__esModule",{value:!0});zN.toMessageSignatureBundle=yOt;zN.toDSSEBundle=EOt;var mOt=bb(),JN=KN();function yOt(t){return{mediaType:t.certificateChain?JN.BUNDLE_V02_MEDIA_TYPE:JN.BUNDLE_V03_MEDIA_TYPE,content:{$case:"messageSignature",messageSignature:{messageDigest:{algorithm:mOt.HashAlgorithm.SHA2_256,digest:t.digest},signature:t.signature}},verificationMaterial:uTe(t)}}function EOt(t){return{mediaType:t.certificateChain?JN.BUNDLE_V02_MEDIA_TYPE:JN.BUNDLE_V03_MEDIA_TYPE,content:{$case:"dsseEnvelope",dsseEnvelope:IOt(t)},verificationMaterial:uTe(t)}}function IOt(t){return{payloadType:t.artifactType,payload:t.artifact,signatures:[COt(t)]}}function COt(t){return{keyid:t.keyHint||"",sig:t.signature}}function uTe(t){return{content:wOt(t),tlogEntries:[],timestampVerificationData:{rfc3161Timestamps:[]}}}function wOt(t){return t.certificate?t.certificateChain?{$case:"x509CertificateChain",x509CertificateChain:{certificates:[{rawBytes:t.certificate}]}}:{$case:"certificate",certificate:{rawBytes:t.certificate}}:{$case:"publicKey",publicKey:{hint:t.keyHint||""}}}});var m7=L(ZN=>{"use strict";Object.defineProperty(ZN,"__esModule",{value:!0});ZN.ValidationError=void 0;var d7=class extends Error{constructor(e,r){super(e),this.fields=r}};ZN.ValidationError=d7});var y7=L($m=>{"use strict";Object.defineProperty($m,"__esModule",{value:!0});$m.assertBundle=BOt;$m.assertBundleV01=ATe;$m.isBundleV01=vOt;$m.assertBundleV02=SOt;$m.assertBundleLatest=DOt;var XN=m7();function BOt(t){let e=$N(t);if(e.length>0)throw new XN.ValidationError("invalid bundle",e)}function ATe(t){let e=[];if(e.push(...$N(t)),e.push(...bOt(t)),e.length>0)throw new XN.ValidationError("invalid v0.1 bundle",e)}function vOt(t){try{return ATe(t),!0}catch{return!1}}function SOt(t){let e=[];if(e.push(...$N(t)),e.push(...pTe(t)),e.length>0)throw new XN.ValidationError("invalid v0.2 bundle",e)}function DOt(t){let e=[];if(e.push(...$N(t)),e.push(...pTe(t)),e.push(...POt(t)),e.length>0)throw new XN.ValidationError("invalid bundle",e)}function $N(t){let e=[];if((t.mediaType===void 0||!t.mediaType.match(/^application\/vnd\.dev\.sigstore\.bundle\+json;version=\d\.\d/)&&!t.mediaType.match(/^application\/vnd\.dev\.sigstore\.bundle\.v\d\.\d\+json/))&&e.push("mediaType"),t.content===void 0)e.push("content");else switch(t.content.$case){case"messageSignature":t.content.messageSignature.messageDigest===void 0?e.push("content.messageSignature.messageDigest"):t.content.messageSignature.messageDigest.digest.length===0&&e.push("content.messageSignature.messageDigest.digest"),t.content.messageSignature.signature.length===0&&e.push("content.messageSignature.signature");break;case"dsseEnvelope":t.content.dsseEnvelope.payload.length===0&&e.push("content.dsseEnvelope.payload"),t.content.dsseEnvelope.signatures.length!==1?e.push("content.dsseEnvelope.signatures"):t.content.dsseEnvelope.signatures[0].sig.length===0&&e.push("content.dsseEnvelope.signatures[0].sig");break}if(t.verificationMaterial===void 0)e.push("verificationMaterial");else{if(t.verificationMaterial.content===void 0)e.push("verificationMaterial.content");else switch(t.verificationMaterial.content.$case){case"x509CertificateChain":t.verificationMaterial.content.x509CertificateChain.certificates.length===0&&e.push("verificationMaterial.content.x509CertificateChain.certificates"),t.verificationMaterial.content.x509CertificateChain.certificates.forEach((r,s)=>{r.rawBytes.length===0&&e.push(`verificationMaterial.content.x509CertificateChain.certificates[${s}].rawBytes`)});break;case"certificate":t.verificationMaterial.content.certificate.rawBytes.length===0&&e.push("verificationMaterial.content.certificate.rawBytes");break}t.verificationMaterial.tlogEntries===void 0?e.push("verificationMaterial.tlogEntries"):t.verificationMaterial.tlogEntries.length>0&&t.verificationMaterial.tlogEntries.forEach((r,s)=>{r.logId===void 0&&e.push(`verificationMaterial.tlogEntries[${s}].logId`),r.kindVersion===void 0&&e.push(`verificationMaterial.tlogEntries[${s}].kindVersion`)})}return e}function bOt(t){let e=[];return t.verificationMaterial&&t.verificationMaterial.tlogEntries?.length>0&&t.verificationMaterial.tlogEntries.forEach((r,s)=>{r.inclusionPromise===void 0&&e.push(`verificationMaterial.tlogEntries[${s}].inclusionPromise`)}),e}function pTe(t){let e=[];return t.verificationMaterial&&t.verificationMaterial.tlogEntries?.length>0&&t.verificationMaterial.tlogEntries.forEach((r,s)=>{r.inclusionProof===void 0?e.push(`verificationMaterial.tlogEntries[${s}].inclusionProof`):r.inclusionProof.checkpoint===void 0&&e.push(`verificationMaterial.tlogEntries[${s}].inclusionProof.checkpoint`)}),e}function POt(t){let e=[];return t.verificationMaterial?.content?.$case==="x509CertificateChain"&&e.push("verificationMaterial.content.$case"),e}});var gTe=L(SA=>{"use strict";Object.defineProperty(SA,"__esModule",{value:!0});SA.envelopeToJSON=SA.envelopeFromJSON=SA.bundleToJSON=SA.bundleFromJSON=void 0;var eO=bb(),hTe=KN(),E7=y7(),xOt=t=>{let e=eO.Bundle.fromJSON(t);switch(e.mediaType){case hTe.BUNDLE_V01_MEDIA_TYPE:(0,E7.assertBundleV01)(e);break;case hTe.BUNDLE_V02_MEDIA_TYPE:(0,E7.assertBundleV02)(e);break;default:(0,E7.assertBundleLatest)(e);break}return e};SA.bundleFromJSON=xOt;var kOt=t=>eO.Bundle.toJSON(t);SA.bundleToJSON=kOt;var QOt=t=>eO.Envelope.fromJSON(t);SA.envelopeFromJSON=QOt;var TOt=t=>eO.Envelope.toJSON(t);SA.envelopeToJSON=TOt});var xb=L(Zr=>{"use strict";Object.defineProperty(Zr,"__esModule",{value:!0});Zr.isBundleV01=Zr.assertBundleV02=Zr.assertBundleV01=Zr.assertBundleLatest=Zr.assertBundle=Zr.envelopeToJSON=Zr.envelopeFromJSON=Zr.bundleToJSON=Zr.bundleFromJSON=Zr.ValidationError=Zr.isBundleWithPublicKey=Zr.isBundleWithMessageSignature=Zr.isBundleWithDsseEnvelope=Zr.isBundleWithCertificateChain=Zr.BUNDLE_V03_MEDIA_TYPE=Zr.BUNDLE_V03_LEGACY_MEDIA_TYPE=Zr.BUNDLE_V02_MEDIA_TYPE=Zr.BUNDLE_V01_MEDIA_TYPE=Zr.toMessageSignatureBundle=Zr.toDSSEBundle=void 0;var dTe=fTe();Object.defineProperty(Zr,"toDSSEBundle",{enumerable:!0,get:function(){return dTe.toDSSEBundle}});Object.defineProperty(Zr,"toMessageSignatureBundle",{enumerable:!0,get:function(){return dTe.toMessageSignatureBundle}});var Eg=KN();Object.defineProperty(Zr,"BUNDLE_V01_MEDIA_TYPE",{enumerable:!0,get:function(){return Eg.BUNDLE_V01_MEDIA_TYPE}});Object.defineProperty(Zr,"BUNDLE_V02_MEDIA_TYPE",{enumerable:!0,get:function(){return Eg.BUNDLE_V02_MEDIA_TYPE}});Object.defineProperty(Zr,"BUNDLE_V03_LEGACY_MEDIA_TYPE",{enumerable:!0,get:function(){return Eg.BUNDLE_V03_LEGACY_MEDIA_TYPE}});Object.defineProperty(Zr,"BUNDLE_V03_MEDIA_TYPE",{enumerable:!0,get:function(){return Eg.BUNDLE_V03_MEDIA_TYPE}});Object.defineProperty(Zr,"isBundleWithCertificateChain",{enumerable:!0,get:function(){return Eg.isBundleWithCertificateChain}});Object.defineProperty(Zr,"isBundleWithDsseEnvelope",{enumerable:!0,get:function(){return Eg.isBundleWithDsseEnvelope}});Object.defineProperty(Zr,"isBundleWithMessageSignature",{enumerable:!0,get:function(){return Eg.isBundleWithMessageSignature}});Object.defineProperty(Zr,"isBundleWithPublicKey",{enumerable:!0,get:function(){return Eg.isBundleWithPublicKey}});var ROt=m7();Object.defineProperty(Zr,"ValidationError",{enumerable:!0,get:function(){return ROt.ValidationError}});var tO=gTe();Object.defineProperty(Zr,"bundleFromJSON",{enumerable:!0,get:function(){return tO.bundleFromJSON}});Object.defineProperty(Zr,"bundleToJSON",{enumerable:!0,get:function(){return tO.bundleToJSON}});Object.defineProperty(Zr,"envelopeFromJSON",{enumerable:!0,get:function(){return tO.envelopeFromJSON}});Object.defineProperty(Zr,"envelopeToJSON",{enumerable:!0,get:function(){return tO.envelopeToJSON}});var Pb=y7();Object.defineProperty(Zr,"assertBundle",{enumerable:!0,get:function(){return Pb.assertBundle}});Object.defineProperty(Zr,"assertBundleLatest",{enumerable:!0,get:function(){return Pb.assertBundleLatest}});Object.defineProperty(Zr,"assertBundleV01",{enumerable:!0,get:function(){return Pb.assertBundleV01}});Object.defineProperty(Zr,"assertBundleV02",{enumerable:!0,get:function(){return Pb.assertBundleV02}});Object.defineProperty(Zr,"isBundleV01",{enumerable:!0,get:function(){return Pb.isBundleV01}})});var kb=L(nO=>{"use strict";Object.defineProperty(nO,"__esModule",{value:!0});nO.ByteStream=void 0;var I7=class extends Error{},rO=class t{constructor(e){this.start=0,e?(this.buf=e,this.view=Buffer.from(e)):(this.buf=new ArrayBuffer(0),this.view=Buffer.from(this.buf))}get buffer(){return this.view.subarray(0,this.start)}get length(){return this.view.byteLength}get position(){return this.start}seek(e){this.start=e}slice(e,r){let s=e+r;if(s>this.length)throw new I7("request past end of buffer");return this.view.subarray(e,s)}appendChar(e){this.ensureCapacity(1),this.view[this.start]=e,this.start+=1}appendUint16(e){this.ensureCapacity(2);let r=new Uint16Array([e]),s=new Uint8Array(r.buffer);this.view[this.start]=s[1],this.view[this.start+1]=s[0],this.start+=2}appendUint24(e){this.ensureCapacity(3);let r=new Uint32Array([e]),s=new Uint8Array(r.buffer);this.view[this.start]=s[2],this.view[this.start+1]=s[1],this.view[this.start+2]=s[0],this.start+=3}appendView(e){this.ensureCapacity(e.length),this.view.set(e,this.start),this.start+=e.length}getBlock(e){if(e<=0)return Buffer.alloc(0);if(this.start+e>this.view.length)throw new Error("request past end of buffer");let r=this.view.subarray(this.start,this.start+e);return this.start+=e,r}getUint8(){return this.getBlock(1)[0]}getUint16(){let e=this.getBlock(2);return e[0]<<8|e[1]}ensureCapacity(e){if(this.start+e>this.view.byteLength){let r=t.BLOCK_SIZE+(e>t.BLOCK_SIZE?e:0);this.realloc(this.view.byteLength+r)}}realloc(e){let r=new ArrayBuffer(e),s=Buffer.from(r);s.set(this.view),this.buf=r,this.view=s}};nO.ByteStream=rO;rO.BLOCK_SIZE=1024});var iO=L(Yw=>{"use strict";Object.defineProperty(Yw,"__esModule",{value:!0});Yw.ASN1TypeError=Yw.ASN1ParseError=void 0;var C7=class extends Error{};Yw.ASN1ParseError=C7;var w7=class extends Error{};Yw.ASN1TypeError=w7});var yTe=L(sO=>{"use strict";Object.defineProperty(sO,"__esModule",{value:!0});sO.decodeLength=FOt;sO.encodeLength=NOt;var mTe=iO();function FOt(t){let e=t.getUint8();if(!(e&128))return e;let r=e&127;if(r>6)throw new mTe.ASN1ParseError("length exceeds 6 byte limit");let s=0;for(let a=0;a0n;)r.unshift(Number(e&255n)),e=e>>8n;return Buffer.from([128|r.length,...r])}});var ITe=L(Ig=>{"use strict";Object.defineProperty(Ig,"__esModule",{value:!0});Ig.parseInteger=MOt;Ig.parseStringASCII=ETe;Ig.parseTime=_Ot;Ig.parseOID=UOt;Ig.parseBoolean=HOt;Ig.parseBitString=jOt;var OOt=/^(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\.\d{3})?Z$/,LOt=/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\.\d{3})?Z$/;function MOt(t){let e=0,r=t.length,s=t[e],a=s>127,n=a?255:0;for(;s==n&&++e=50?1900:2e3,s[1]=a.toString()}return new Date(`${s[1]}-${s[2]}-${s[3]}T${s[4]}:${s[5]}:${s[6]}Z`)}function UOt(t){let e=0,r=t.length,s=t[e++],a=Math.floor(s/40),n=s%40,c=`${a}.${n}`,f=0;for(;e=f;--p)a.push(c>>p&1)}return a}});var wTe=L(oO=>{"use strict";Object.defineProperty(oO,"__esModule",{value:!0});oO.ASN1Tag=void 0;var CTe=iO(),ey={BOOLEAN:1,INTEGER:2,BIT_STRING:3,OCTET_STRING:4,OBJECT_IDENTIFIER:6,SEQUENCE:16,SET:17,PRINTABLE_STRING:19,UTC_TIME:23,GENERALIZED_TIME:24},B7={UNIVERSAL:0,APPLICATION:1,CONTEXT_SPECIFIC:2,PRIVATE:3},v7=class{constructor(e){if(this.number=e&31,this.constructed=(e&32)===32,this.class=e>>6,this.number===31)throw new CTe.ASN1ParseError("long form tags not supported");if(this.class===B7.UNIVERSAL&&this.number===0)throw new CTe.ASN1ParseError("unsupported tag 0x00")}isUniversal(){return this.class===B7.UNIVERSAL}isContextSpecific(e){let r=this.class===B7.CONTEXT_SPECIFIC;return e!==void 0?r&&this.number===e:r}isBoolean(){return this.isUniversal()&&this.number===ey.BOOLEAN}isInteger(){return this.isUniversal()&&this.number===ey.INTEGER}isBitString(){return this.isUniversal()&&this.number===ey.BIT_STRING}isOctetString(){return this.isUniversal()&&this.number===ey.OCTET_STRING}isOID(){return this.isUniversal()&&this.number===ey.OBJECT_IDENTIFIER}isUTCTime(){return this.isUniversal()&&this.number===ey.UTC_TIME}isGeneralizedTime(){return this.isUniversal()&&this.number===ey.GENERALIZED_TIME}toDER(){return this.number|(this.constructed?32:0)|this.class<<6}};oO.ASN1Tag=v7});var DTe=L(lO=>{"use strict";Object.defineProperty(lO,"__esModule",{value:!0});lO.ASN1Obj=void 0;var S7=kb(),ty=iO(),vTe=yTe(),Vw=ITe(),qOt=wTe(),aO=class{constructor(e,r,s){this.tag=e,this.value=r,this.subs=s}static parseBuffer(e){return STe(new S7.ByteStream(e))}toDER(){let e=new S7.ByteStream;if(this.subs.length>0)for(let a of this.subs)e.appendView(a.toDER());else e.appendView(this.value);let r=e.buffer,s=new S7.ByteStream;return s.appendChar(this.tag.toDER()),s.appendView((0,vTe.encodeLength)(r.length)),s.appendView(r),s.buffer}toBoolean(){if(!this.tag.isBoolean())throw new ty.ASN1TypeError("not a boolean");return(0,Vw.parseBoolean)(this.value)}toInteger(){if(!this.tag.isInteger())throw new ty.ASN1TypeError("not an integer");return(0,Vw.parseInteger)(this.value)}toOID(){if(!this.tag.isOID())throw new ty.ASN1TypeError("not an OID");return(0,Vw.parseOID)(this.value)}toDate(){switch(!0){case this.tag.isUTCTime():return(0,Vw.parseTime)(this.value,!0);case this.tag.isGeneralizedTime():return(0,Vw.parseTime)(this.value,!1);default:throw new ty.ASN1TypeError("not a date")}}toBitString(){if(!this.tag.isBitString())throw new ty.ASN1TypeError("not a bit string");return(0,Vw.parseBitString)(this.value)}};lO.ASN1Obj=aO;function STe(t){let e=new qOt.ASN1Tag(t.getUint8()),r=(0,vTe.decodeLength)(t),s=t.slice(t.position,r),a=t.position,n=[];if(e.constructed)n=BTe(t,r);else if(e.isOctetString())try{n=BTe(t,r)}catch{}return n.length===0&&t.seek(a+r),new aO(e,s,n)}function BTe(t,e){let r=t.position+e;if(r>t.length)throw new ty.ASN1ParseError("invalid length");let s=[];for(;t.position{"use strict";Object.defineProperty(cO,"__esModule",{value:!0});cO.ASN1Obj=void 0;var GOt=DTe();Object.defineProperty(cO,"ASN1Obj",{enumerable:!0,get:function(){return GOt.ASN1Obj}})});var Kw=L(Cg=>{"use strict";var WOt=Cg&&Cg.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Cg,"__esModule",{value:!0});Cg.createPublicKey=YOt;Cg.digest=VOt;Cg.verify=KOt;Cg.bufferEqual=JOt;var Qb=WOt(Ie("crypto"));function YOt(t,e="spki"){return typeof t=="string"?Qb.default.createPublicKey(t):Qb.default.createPublicKey({key:t,format:"der",type:e})}function VOt(t,...e){let r=Qb.default.createHash(t);for(let s of e)r.update(s);return r.digest()}function KOt(t,e,r,s){try{return Qb.default.verify(s,t,e,r)}catch{return!1}}function JOt(t,e){try{return Qb.default.timingSafeEqual(t,e)}catch{return!1}}});var bTe=L(D7=>{"use strict";Object.defineProperty(D7,"__esModule",{value:!0});D7.preAuthEncoding=ZOt;var zOt="DSSEv1";function ZOt(t,e){let r=[zOt,t.length,t,e.length,""].join(" ");return Buffer.concat([Buffer.from(r,"ascii"),e])}});var kTe=L(fO=>{"use strict";Object.defineProperty(fO,"__esModule",{value:!0});fO.base64Encode=XOt;fO.base64Decode=$Ot;var PTe="base64",xTe="utf-8";function XOt(t){return Buffer.from(t,xTe).toString(PTe)}function $Ot(t){return Buffer.from(t,PTe).toString(xTe)}});var QTe=L(P7=>{"use strict";Object.defineProperty(P7,"__esModule",{value:!0});P7.canonicalize=b7;function b7(t){let e="";if(t===null||typeof t!="object"||t.toJSON!=null)e+=JSON.stringify(t);else if(Array.isArray(t)){e+="[";let r=!0;t.forEach(s=>{r||(e+=","),r=!1,e+=b7(s)}),e+="]"}else{e+="{";let r=!0;Object.keys(t).sort().forEach(s=>{r||(e+=","),r=!1,e+=JSON.stringify(s),e+=":",e+=b7(t[s])}),e+="}"}return e}});var x7=L(AO=>{"use strict";Object.defineProperty(AO,"__esModule",{value:!0});AO.toDER=rLt;AO.fromDER=nLt;var eLt=/-----BEGIN (.*)-----/,tLt=/-----END (.*)-----/;function rLt(t){let e="";return t.split(` -`).forEach(r=>{r.match(eLt)||r.match(tLt)||(e+=r)}),Buffer.from(e,"base64")}function nLt(t,e="CERTIFICATE"){let s=t.toString("base64").match(/.{1,64}/g)||"";return[`-----BEGIN ${e}-----`,...s,`-----END ${e}-----`].join(` -`).concat(` -`)}});var pO=L(Jw=>{"use strict";Object.defineProperty(Jw,"__esModule",{value:!0});Jw.SHA2_HASH_ALGOS=Jw.ECDSA_SIGNATURE_ALGOS=void 0;Jw.ECDSA_SIGNATURE_ALGOS={"1.2.840.10045.4.3.1":"sha224","1.2.840.10045.4.3.2":"sha256","1.2.840.10045.4.3.3":"sha384","1.2.840.10045.4.3.4":"sha512"};Jw.SHA2_HASH_ALGOS={"2.16.840.1.101.3.4.2.1":"sha256","2.16.840.1.101.3.4.2.2":"sha384","2.16.840.1.101.3.4.2.3":"sha512"}});var Q7=L(hO=>{"use strict";Object.defineProperty(hO,"__esModule",{value:!0});hO.RFC3161TimestampVerificationError=void 0;var k7=class extends Error{};hO.RFC3161TimestampVerificationError=k7});var RTe=L(DA=>{"use strict";var iLt=DA&&DA.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),sLt=DA&&DA.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),oLt=DA&&DA.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&iLt(e,t,r);return sLt(e,t),e};Object.defineProperty(DA,"__esModule",{value:!0});DA.TSTInfo=void 0;var TTe=oLt(Kw()),aLt=pO(),lLt=Q7(),T7=class{constructor(e){this.root=e}get version(){return this.root.subs[0].toInteger()}get genTime(){return this.root.subs[4].toDate()}get messageImprintHashAlgorithm(){let e=this.messageImprintObj.subs[0].subs[0].toOID();return aLt.SHA2_HASH_ALGOS[e]}get messageImprintHashedMessage(){return this.messageImprintObj.subs[1].value}get raw(){return this.root.toDER()}verify(e){let r=TTe.digest(this.messageImprintHashAlgorithm,e);if(!TTe.bufferEqual(r,this.messageImprintHashedMessage))throw new lLt.RFC3161TimestampVerificationError("message imprint does not match artifact")}get messageImprintObj(){return this.root.subs[2]}};DA.TSTInfo=T7});var NTe=L(bA=>{"use strict";var cLt=bA&&bA.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),uLt=bA&&bA.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),fLt=bA&&bA.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&cLt(e,t,r);return uLt(e,t),e};Object.defineProperty(bA,"__esModule",{value:!0});bA.RFC3161Timestamp=void 0;var ALt=uO(),R7=fLt(Kw()),FTe=pO(),Tb=Q7(),pLt=RTe(),hLt="1.2.840.113549.1.7.2",gLt="1.2.840.113549.1.9.16.1.4",dLt="1.2.840.113549.1.9.4",F7=class t{constructor(e){this.root=e}static parse(e){let r=ALt.ASN1Obj.parseBuffer(e);return new t(r)}get status(){return this.pkiStatusInfoObj.subs[0].toInteger()}get contentType(){return this.contentTypeObj.toOID()}get eContentType(){return this.eContentTypeObj.toOID()}get signingTime(){return this.tstInfo.genTime}get signerIssuer(){return this.signerSidObj.subs[0].value}get signerSerialNumber(){return this.signerSidObj.subs[1].value}get signerDigestAlgorithm(){let e=this.signerDigestAlgorithmObj.subs[0].toOID();return FTe.SHA2_HASH_ALGOS[e]}get signatureAlgorithm(){let e=this.signatureAlgorithmObj.subs[0].toOID();return FTe.ECDSA_SIGNATURE_ALGOS[e]}get signatureValue(){return this.signatureValueObj.value}get tstInfo(){return new pLt.TSTInfo(this.eContentObj.subs[0].subs[0])}verify(e,r){if(!this.timeStampTokenObj)throw new Tb.RFC3161TimestampVerificationError("timeStampToken is missing");if(this.contentType!==hLt)throw new Tb.RFC3161TimestampVerificationError(`incorrect content type: ${this.contentType}`);if(this.eContentType!==gLt)throw new Tb.RFC3161TimestampVerificationError(`incorrect encapsulated content type: ${this.eContentType}`);this.tstInfo.verify(e),this.verifyMessageDigest(),this.verifySignature(r)}verifyMessageDigest(){let e=R7.digest(this.signerDigestAlgorithm,this.tstInfo.raw),r=this.messageDigestAttributeObj.subs[1].subs[0].value;if(!R7.bufferEqual(e,r))throw new Tb.RFC3161TimestampVerificationError("signed data does not match tstInfo")}verifySignature(e){let r=this.signedAttrsObj.toDER();if(r[0]=49,!R7.verify(r,e,this.signatureValue,this.signatureAlgorithm))throw new Tb.RFC3161TimestampVerificationError("signature verification failed")}get pkiStatusInfoObj(){return this.root.subs[0]}get timeStampTokenObj(){return this.root.subs[1]}get contentTypeObj(){return this.timeStampTokenObj.subs[0]}get signedDataObj(){return this.timeStampTokenObj.subs.find(r=>r.tag.isContextSpecific(0)).subs[0]}get encapContentInfoObj(){return this.signedDataObj.subs[2]}get signerInfosObj(){let e=this.signedDataObj;return e.subs[e.subs.length-1]}get signerInfoObj(){return this.signerInfosObj.subs[0]}get eContentTypeObj(){return this.encapContentInfoObj.subs[0]}get eContentObj(){return this.encapContentInfoObj.subs[1]}get signedAttrsObj(){return this.signerInfoObj.subs.find(r=>r.tag.isContextSpecific(0))}get messageDigestAttributeObj(){return this.signedAttrsObj.subs.find(r=>r.subs[0].tag.isOID()&&r.subs[0].toOID()===dLt)}get signerSidObj(){return this.signerInfoObj.subs[1]}get signerDigestAlgorithmObj(){return this.signerInfoObj.subs[2]}get signatureAlgorithmObj(){return this.signerInfoObj.subs[4]}get signatureValueObj(){return this.signerInfoObj.subs[5]}};bA.RFC3161Timestamp=F7});var OTe=L(gO=>{"use strict";Object.defineProperty(gO,"__esModule",{value:!0});gO.RFC3161Timestamp=void 0;var mLt=NTe();Object.defineProperty(gO,"RFC3161Timestamp",{enumerable:!0,get:function(){return mLt.RFC3161Timestamp}})});var MTe=L(PA=>{"use strict";var yLt=PA&&PA.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),ELt=PA&&PA.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ILt=PA&&PA.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&yLt(e,t,r);return ELt(e,t),e};Object.defineProperty(PA,"__esModule",{value:!0});PA.SignedCertificateTimestamp=void 0;var CLt=ILt(Kw()),LTe=kb(),N7=class t{constructor(e){this.version=e.version,this.logID=e.logID,this.timestamp=e.timestamp,this.extensions=e.extensions,this.hashAlgorithm=e.hashAlgorithm,this.signatureAlgorithm=e.signatureAlgorithm,this.signature=e.signature}get datetime(){return new Date(Number(this.timestamp.readBigInt64BE()))}get algorithm(){switch(this.hashAlgorithm){case 0:return"none";case 1:return"md5";case 2:return"sha1";case 3:return"sha224";case 4:return"sha256";case 5:return"sha384";case 6:return"sha512";default:return"unknown"}}verify(e,r){let s=new LTe.ByteStream;return s.appendChar(this.version),s.appendChar(0),s.appendView(this.timestamp),s.appendUint16(1),s.appendView(e),s.appendUint16(this.extensions.byteLength),this.extensions.byteLength>0&&s.appendView(this.extensions),CLt.verify(s.buffer,r,this.signature,this.algorithm)}static parse(e){let r=new LTe.ByteStream(e),s=r.getUint8(),a=r.getBlock(32),n=r.getBlock(8),c=r.getUint16(),f=r.getBlock(c),p=r.getUint8(),h=r.getUint8(),E=r.getUint16(),C=r.getBlock(E);if(r.position!==e.length)throw new Error("SCT buffer length mismatch");return new t({version:s,logID:a,timestamp:n,extensions:f,hashAlgorithm:p,signatureAlgorithm:h,signature:C})}};PA.SignedCertificateTimestamp=N7});var j7=L(oa=>{"use strict";Object.defineProperty(oa,"__esModule",{value:!0});oa.X509SCTExtension=oa.X509SubjectKeyIDExtension=oa.X509AuthorityKeyIDExtension=oa.X509SubjectAlternativeNameExtension=oa.X509KeyUsageExtension=oa.X509BasicConstraintsExtension=oa.X509Extension=void 0;var wLt=kb(),BLt=MTe(),gh=class{constructor(e){this.root=e}get oid(){return this.root.subs[0].toOID()}get critical(){return this.root.subs.length===3?this.root.subs[1].toBoolean():!1}get value(){return this.extnValueObj.value}get valueObj(){return this.extnValueObj}get extnValueObj(){return this.root.subs[this.root.subs.length-1]}};oa.X509Extension=gh;var O7=class extends gh{get isCA(){return this.sequence.subs[0]?.toBoolean()??!1}get pathLenConstraint(){return this.sequence.subs.length>1?this.sequence.subs[1].toInteger():void 0}get sequence(){return this.extnValueObj.subs[0]}};oa.X509BasicConstraintsExtension=O7;var L7=class extends gh{get digitalSignature(){return this.bitString[0]===1}get keyCertSign(){return this.bitString[5]===1}get crlSign(){return this.bitString[6]===1}get bitString(){return this.extnValueObj.subs[0].toBitString()}};oa.X509KeyUsageExtension=L7;var M7=class extends gh{get rfc822Name(){return this.findGeneralName(1)?.value.toString("ascii")}get uri(){return this.findGeneralName(6)?.value.toString("ascii")}otherName(e){let r=this.findGeneralName(0);return r===void 0||r.subs[0].toOID()!==e?void 0:r.subs[1].subs[0].value.toString("ascii")}findGeneralName(e){return this.generalNames.find(r=>r.tag.isContextSpecific(e))}get generalNames(){return this.extnValueObj.subs[0].subs}};oa.X509SubjectAlternativeNameExtension=M7;var _7=class extends gh{get keyIdentifier(){return this.findSequenceMember(0)?.value}findSequenceMember(e){return this.sequence.subs.find(r=>r.tag.isContextSpecific(e))}get sequence(){return this.extnValueObj.subs[0]}};oa.X509AuthorityKeyIDExtension=_7;var U7=class extends gh{get keyIdentifier(){return this.extnValueObj.subs[0].value}};oa.X509SubjectKeyIDExtension=U7;var H7=class extends gh{constructor(e){super(e)}get signedCertificateTimestamps(){let e=this.extnValueObj.subs[0].value,r=new wLt.ByteStream(e),s=r.getUint16()+2,a=[];for(;r.position{"use strict";var vLt=sc&&sc.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),SLt=sc&&sc.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),UTe=sc&&sc.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&vLt(e,t,r);return SLt(e,t),e};Object.defineProperty(sc,"__esModule",{value:!0});sc.X509Certificate=sc.EXTENSION_OID_SCT=void 0;var DLt=uO(),_Te=UTe(Kw()),bLt=pO(),PLt=UTe(x7()),ry=j7(),xLt="2.5.29.14",kLt="2.5.29.15",QLt="2.5.29.17",TLt="2.5.29.19",RLt="2.5.29.35";sc.EXTENSION_OID_SCT="1.3.6.1.4.1.11129.2.4.2";var q7=class t{constructor(e){this.root=e}static parse(e){let r=typeof e=="string"?PLt.toDER(e):e,s=DLt.ASN1Obj.parseBuffer(r);return new t(s)}get tbsCertificate(){return this.tbsCertificateObj}get version(){return`v${(this.versionObj.subs[0].toInteger()+BigInt(1)).toString()}`}get serialNumber(){return this.serialNumberObj.value}get notBefore(){return this.validityObj.subs[0].toDate()}get notAfter(){return this.validityObj.subs[1].toDate()}get issuer(){return this.issuerObj.value}get subject(){return this.subjectObj.value}get publicKey(){return this.subjectPublicKeyInfoObj.toDER()}get signatureAlgorithm(){let e=this.signatureAlgorithmObj.subs[0].toOID();return bLt.ECDSA_SIGNATURE_ALGOS[e]}get signatureValue(){return this.signatureValueObj.value.subarray(1)}get subjectAltName(){let e=this.extSubjectAltName;return e?.uri||e?.rfc822Name}get extensions(){return this.extensionsObj?.subs[0]?.subs||[]}get extKeyUsage(){let e=this.findExtension(kLt);return e?new ry.X509KeyUsageExtension(e):void 0}get extBasicConstraints(){let e=this.findExtension(TLt);return e?new ry.X509BasicConstraintsExtension(e):void 0}get extSubjectAltName(){let e=this.findExtension(QLt);return e?new ry.X509SubjectAlternativeNameExtension(e):void 0}get extAuthorityKeyID(){let e=this.findExtension(RLt);return e?new ry.X509AuthorityKeyIDExtension(e):void 0}get extSubjectKeyID(){let e=this.findExtension(xLt);return e?new ry.X509SubjectKeyIDExtension(e):void 0}get extSCT(){let e=this.findExtension(sc.EXTENSION_OID_SCT);return e?new ry.X509SCTExtension(e):void 0}get isCA(){let e=this.extBasicConstraints?.isCA||!1;return this.extKeyUsage?e&&this.extKeyUsage.keyCertSign:e}extension(e){let r=this.findExtension(e);return r?new ry.X509Extension(r):void 0}verify(e){let r=e?.publicKey||this.publicKey,s=_Te.createPublicKey(r);return _Te.verify(this.tbsCertificate.toDER(),s,this.signatureValue,this.signatureAlgorithm)}validForDate(e){return this.notBefore<=e&&e<=this.notAfter}equals(e){return this.root.toDER().equals(e.root.toDER())}clone(){let e=this.root.toDER(),r=Buffer.alloc(e.length);return e.copy(r),t.parse(r)}findExtension(e){return this.extensions.find(r=>r.subs[0].toOID()===e)}get tbsCertificateObj(){return this.root.subs[0]}get signatureAlgorithmObj(){return this.root.subs[1]}get signatureValueObj(){return this.root.subs[2]}get versionObj(){return this.tbsCertificateObj.subs[0]}get serialNumberObj(){return this.tbsCertificateObj.subs[1]}get issuerObj(){return this.tbsCertificateObj.subs[3]}get validityObj(){return this.tbsCertificateObj.subs[4]}get subjectObj(){return this.tbsCertificateObj.subs[5]}get subjectPublicKeyInfoObj(){return this.tbsCertificateObj.subs[6]}get extensionsObj(){return this.tbsCertificateObj.subs.find(e=>e.tag.isContextSpecific(3))}};sc.X509Certificate=q7});var qTe=L(wg=>{"use strict";Object.defineProperty(wg,"__esModule",{value:!0});wg.X509SCTExtension=wg.X509Certificate=wg.EXTENSION_OID_SCT=void 0;var jTe=HTe();Object.defineProperty(wg,"EXTENSION_OID_SCT",{enumerable:!0,get:function(){return jTe.EXTENSION_OID_SCT}});Object.defineProperty(wg,"X509Certificate",{enumerable:!0,get:function(){return jTe.X509Certificate}});var FLt=j7();Object.defineProperty(wg,"X509SCTExtension",{enumerable:!0,get:function(){return FLt.X509SCTExtension}})});var wl=L(Kn=>{"use strict";var NLt=Kn&&Kn.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),OLt=Kn&&Kn.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),Rb=Kn&&Kn.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&NLt(e,t,r);return OLt(e,t),e};Object.defineProperty(Kn,"__esModule",{value:!0});Kn.X509SCTExtension=Kn.X509Certificate=Kn.EXTENSION_OID_SCT=Kn.ByteStream=Kn.RFC3161Timestamp=Kn.pem=Kn.json=Kn.encoding=Kn.dsse=Kn.crypto=Kn.ASN1Obj=void 0;var LLt=uO();Object.defineProperty(Kn,"ASN1Obj",{enumerable:!0,get:function(){return LLt.ASN1Obj}});Kn.crypto=Rb(Kw());Kn.dsse=Rb(bTe());Kn.encoding=Rb(kTe());Kn.json=Rb(QTe());Kn.pem=Rb(x7());var MLt=OTe();Object.defineProperty(Kn,"RFC3161Timestamp",{enumerable:!0,get:function(){return MLt.RFC3161Timestamp}});var _Lt=kb();Object.defineProperty(Kn,"ByteStream",{enumerable:!0,get:function(){return _Lt.ByteStream}});var G7=qTe();Object.defineProperty(Kn,"EXTENSION_OID_SCT",{enumerable:!0,get:function(){return G7.EXTENSION_OID_SCT}});Object.defineProperty(Kn,"X509Certificate",{enumerable:!0,get:function(){return G7.X509Certificate}});Object.defineProperty(Kn,"X509SCTExtension",{enumerable:!0,get:function(){return G7.X509SCTExtension}})});var GTe=L(W7=>{"use strict";Object.defineProperty(W7,"__esModule",{value:!0});W7.extractJWTSubject=HLt;var ULt=wl();function HLt(t){let e=t.split(".",3),r=JSON.parse(ULt.encoding.base64Decode(e[1]));switch(r.iss){case"https://accounts.google.com":case"https://oauth2.sigstore.dev/auth":return r.email;default:return r.sub}}});var WTe=L((NIr,jLt)=>{jLt.exports={name:"@sigstore/sign",version:"3.1.0",description:"Sigstore signing library",main:"dist/index.js",types:"dist/index.d.ts",scripts:{clean:"shx rm -rf dist *.tsbuildinfo",build:"tsc --build",test:"jest"},files:["dist"],author:"bdehamer@github.com",license:"Apache-2.0",repository:{type:"git",url:"git+https://github.com/sigstore/sigstore-js.git"},bugs:{url:"https://github.com/sigstore/sigstore-js/issues"},homepage:"https://github.com/sigstore/sigstore-js/tree/main/packages/sign#readme",publishConfig:{provenance:!0},devDependencies:{"@sigstore/jest":"^0.0.0","@sigstore/mock":"^0.10.0","@sigstore/rekor-types":"^3.0.0","@types/make-fetch-happen":"^10.0.4","@types/promise-retry":"^1.1.6"},dependencies:{"@sigstore/bundle":"^3.1.0","@sigstore/core":"^2.0.0","@sigstore/protobuf-specs":"^0.4.0","make-fetch-happen":"^14.0.2","proc-log":"^5.0.0","promise-retry":"^2.0.1"},engines:{node:"^18.17.0 || >=20.5.0"}}});var VTe=L(zw=>{"use strict";var qLt=zw&&zw.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(zw,"__esModule",{value:!0});zw.getUserAgent=void 0;var YTe=qLt(Ie("os")),GLt=()=>{let t=WTe().version,e=process.version,r=YTe.default.platform(),s=YTe.default.arch();return`sigstore-js/${t} (Node ${e}) (${r}/${s})`};zw.getUserAgent=GLt});var Bg=L(Ji=>{"use strict";var WLt=Ji&&Ji.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),YLt=Ji&&Ji.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),KTe=Ji&&Ji.__importStar||function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var s=[];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(s[s.length]=a);return s},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var s=t(e),a=0;a{"use strict";Object.defineProperty(dO,"__esModule",{value:!0});dO.BaseBundleBuilder=void 0;var Y7=class{constructor(e){this.signer=e.signer,this.witnesses=e.witnesses}async create(e){let r=await this.prepare(e).then(f=>this.signer.sign(f)),s=await this.package(e,r),a=await Promise.all(this.witnesses.map(f=>f.testify(s.content,VLt(r.key)))),n=[],c=[];return a.forEach(({tlogEntries:f,rfc3161Timestamps:p})=>{n.push(...f??[]),c.push(...p??[])}),s.verificationMaterial.tlogEntries=n,s.verificationMaterial.timestampVerificationData={rfc3161Timestamps:c},s}async prepare(e){return e.data}};dO.BaseBundleBuilder=Y7;function VLt(t){switch(t.$case){case"publicKey":return t.publicKey;case"x509Certificate":return t.certificate}}});var J7=L(xA=>{"use strict";var KLt=xA&&xA.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),JLt=xA&&xA.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),zLt=xA&&xA.__importStar||function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var s=[];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(s[s.length]=a);return s},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var s=t(e),a=0;a{"use strict";Object.defineProperty(mO,"__esModule",{value:!0});mO.DSSEBundleBuilder=void 0;var $Lt=Bg(),eMt=V7(),tMt=J7(),z7=class extends eMt.BaseBundleBuilder{constructor(e){super(e),this.certificateChain=e.certificateChain??!1}async prepare(e){let r=zTe(e);return $Lt.dsse.preAuthEncoding(r.type,r.data)}async package(e,r){return(0,tMt.toDSSEBundle)(zTe(e),r,this.certificateChain)}};mO.DSSEBundleBuilder=z7;function zTe(t){return{...t,type:t.type??""}}});var XTe=L(yO=>{"use strict";Object.defineProperty(yO,"__esModule",{value:!0});yO.MessageSignatureBundleBuilder=void 0;var rMt=V7(),nMt=J7(),Z7=class extends rMt.BaseBundleBuilder{constructor(e){super(e)}async package(e,r){return(0,nMt.toMessageSignatureBundle)(e,r)}};yO.MessageSignatureBundleBuilder=Z7});var $Te=L(Zw=>{"use strict";Object.defineProperty(Zw,"__esModule",{value:!0});Zw.MessageSignatureBundleBuilder=Zw.DSSEBundleBuilder=void 0;var iMt=ZTe();Object.defineProperty(Zw,"DSSEBundleBuilder",{enumerable:!0,get:function(){return iMt.DSSEBundleBuilder}});var sMt=XTe();Object.defineProperty(Zw,"MessageSignatureBundleBuilder",{enumerable:!0,get:function(){return sMt.MessageSignatureBundleBuilder}})});var IO=L(EO=>{"use strict";Object.defineProperty(EO,"__esModule",{value:!0});EO.HTTPError=void 0;var X7=class extends Error{constructor({status:e,message:r,location:s}){super(`(${e}) ${r}`),this.statusCode=e,this.location=s}};EO.HTTPError=X7});var Xw=L(Nb=>{"use strict";Object.defineProperty(Nb,"__esModule",{value:!0});Nb.InternalError=void 0;Nb.internalError=aMt;var oMt=IO(),CO=class extends Error{constructor({code:e,message:r,cause:s}){super(r),this.name=this.constructor.name,this.cause=s,this.code=e}};Nb.InternalError=CO;function aMt(t,e,r){throw t instanceof oMt.HTTPError&&(r+=` - ${t.message}`),new CO({code:e,message:r,cause:t})}});var wO=L((WIr,eRe)=>{eRe.exports=fetch});var tRe=L($w=>{"use strict";var lMt=$w&&$w.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty($w,"__esModule",{value:!0});$w.CIContextProvider=void 0;var cMt=lMt(wO()),uMt=[fMt,AMt],$7=class{constructor(e="sigstore"){this.audience=e}async getToken(){return Promise.any(uMt.map(e=>e(this.audience))).catch(()=>Promise.reject("CI: no tokens available"))}};$w.CIContextProvider=$7;async function fMt(t){if(!process.env.ACTIONS_ID_TOKEN_REQUEST_URL||!process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN)return Promise.reject("no token available");let e=new URL(process.env.ACTIONS_ID_TOKEN_REQUEST_URL);return e.searchParams.append("audience",t),(await(0,cMt.default)(e.href,{retry:2,headers:{Accept:"application/json",Authorization:`Bearer ${process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN}`}})).json().then(s=>s.value)}async function AMt(){return process.env.SIGSTORE_ID_TOKEN?process.env.SIGSTORE_ID_TOKEN:Promise.reject("no token available")}});var rRe=L(BO=>{"use strict";Object.defineProperty(BO,"__esModule",{value:!0});BO.CIContextProvider=void 0;var pMt=tRe();Object.defineProperty(BO,"CIContextProvider",{enumerable:!0,get:function(){return pMt.CIContextProvider}})});var iRe=L((KIr,nRe)=>{var hMt=Symbol("proc-log.meta");nRe.exports={META:hMt,output:{LEVELS:["standard","error","buffer","flush"],KEYS:{standard:"standard",error:"error",buffer:"buffer",flush:"flush"},standard:function(...t){return process.emit("output","standard",...t)},error:function(...t){return process.emit("output","error",...t)},buffer:function(...t){return process.emit("output","buffer",...t)},flush:function(...t){return process.emit("output","flush",...t)}},log:{LEVELS:["notice","error","warn","info","verbose","http","silly","timing","pause","resume"],KEYS:{notice:"notice",error:"error",warn:"warn",info:"info",verbose:"verbose",http:"http",silly:"silly",timing:"timing",pause:"pause",resume:"resume"},error:function(...t){return process.emit("log","error",...t)},notice:function(...t){return process.emit("log","notice",...t)},warn:function(...t){return process.emit("log","warn",...t)},info:function(...t){return process.emit("log","info",...t)},verbose:function(...t){return process.emit("log","verbose",...t)},http:function(...t){return process.emit("log","http",...t)},silly:function(...t){return process.emit("log","silly",...t)},timing:function(...t){return process.emit("log","timing",...t)},pause:function(){return process.emit("log","pause")},resume:function(){return process.emit("log","resume")}},time:{LEVELS:["start","end"],KEYS:{start:"start",end:"end"},start:function(t,e){process.emit("time","start",t);function r(){return process.emit("time","end",t)}if(typeof e=="function"){let s=e();return s&&s.finally?s.finally(r):(r(),s)}return r},end:function(t){return process.emit("time","end",t)}},input:{LEVELS:["start","end","read"],KEYS:{start:"start",end:"end",read:"read"},start:function(t){process.emit("input","start");function e(){return process.emit("input","end")}if(typeof t=="function"){let r=t();return r&&r.finally?r.finally(e):(e(),r)}return e},end:function(){return process.emit("input","end")},read:function(...t){let e,r,s=new Promise((a,n)=>{e=a,r=n});return process.emit("input","read",e,r,...t),s}}}});var aRe=L((JIr,oRe)=>{"use strict";function sRe(t,e){for(let r in e)Object.defineProperty(t,r,{value:e[r],enumerable:!0,configurable:!0});return t}function gMt(t,e,r){if(!t||typeof t=="string")throw new TypeError("Please pass an Error to err-code");r||(r={}),typeof e=="object"&&(r=e,e=void 0),e!=null&&(r.code=e);try{return sRe(t,r)}catch{r.message=t.message,r.stack=t.stack;let a=function(){};return a.prototype=Object.create(Object.getPrototypeOf(t)),sRe(new a,r)}}oRe.exports=gMt});var cRe=L((zIr,lRe)=>{function tu(t,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(t)),this._timeouts=t,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}lRe.exports=tu;tu.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts};tu.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null};tu.prototype.retry=function(t){if(this._timeout&&clearTimeout(this._timeout),!t)return!1;var e=new Date().getTime();if(t&&e-this._operationStart>=this._maxRetryTime)return this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(t);var r=this._timeouts.shift();if(r===void 0)if(this._cachedTimeouts)this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),r=this._timeouts.shift();else return!1;var s=this,a=setTimeout(function(){s._attempts++,s._operationTimeoutCb&&(s._timeout=setTimeout(function(){s._operationTimeoutCb(s._attempts)},s._operationTimeout),s._options.unref&&s._timeout.unref()),s._fn(s._attempts)},r);return this._options.unref&&a.unref(),!0};tu.prototype.attempt=function(t,e){this._fn=t,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var r=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){r._operationTimeoutCb()},r._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};tu.prototype.try=function(t){console.log("Using RetryOperation.try() is deprecated"),this.attempt(t)};tu.prototype.start=function(t){console.log("Using RetryOperation.start() is deprecated"),this.attempt(t)};tu.prototype.start=tu.prototype.try;tu.prototype.errors=function(){return this._errors};tu.prototype.attempts=function(){return this._attempts};tu.prototype.mainError=function(){if(this._errors.length===0)return null;for(var t={},e=null,r=0,s=0;s=r&&(e=a,r=c)}return e}});var uRe=L(ny=>{var dMt=cRe();ny.operation=function(t){var e=ny.timeouts(t);return new dMt(e,{forever:t&&t.forever,unref:t&&t.unref,maxRetryTime:t&&t.maxRetryTime})};ny.timeouts=function(t){if(t instanceof Array)return[].concat(t);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var r in t)e[r]=t[r];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var s=[],a=0;a{fRe.exports=uRe()});var gRe=L(($Ir,hRe)=>{"use strict";var mMt=aRe(),yMt=ARe(),EMt=Object.prototype.hasOwnProperty;function pRe(t){return t&&t.code==="EPROMISERETRY"&&EMt.call(t,"retried")}function IMt(t,e){var r,s;return typeof t=="object"&&typeof e=="function"&&(r=e,e=t,t=r),s=yMt.operation(e),new Promise(function(a,n){s.attempt(function(c){Promise.resolve().then(function(){return t(function(f){throw pRe(f)&&(f=f.retried),mMt(new Error("Retrying"),"EPROMISERETRY",{retried:f})},c)}).then(a,function(f){pRe(f)&&(f=f.retried,s.retry(f||new Error))||n(f)})})})}hRe.exports=IMt});var vO=L(Ob=>{"use strict";var mRe=Ob&&Ob.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ob,"__esModule",{value:!0});Ob.fetchWithRetry=TMt;var CMt=Ie("http2"),wMt=mRe(wO()),dRe=iRe(),BMt=mRe(gRe()),vMt=Bg(),SMt=IO(),{HTTP2_HEADER_LOCATION:DMt,HTTP2_HEADER_CONTENT_TYPE:bMt,HTTP2_HEADER_USER_AGENT:PMt,HTTP_STATUS_INTERNAL_SERVER_ERROR:xMt,HTTP_STATUS_TOO_MANY_REQUESTS:kMt,HTTP_STATUS_REQUEST_TIMEOUT:QMt}=CMt.constants;async function TMt(t,e){return(0,BMt.default)(async(r,s)=>{let a=e.method||"POST",n={[PMt]:vMt.ua.getUserAgent(),...e.headers},c=await(0,wMt.default)(t,{method:a,headers:n,body:e.body,timeout:e.timeout,retry:!1}).catch(f=>(dRe.log.http("fetch",`${a} ${t} attempt ${s} failed with ${f}`),r(f)));if(c.ok)return c;{let f=await RMt(c);if(dRe.log.http("fetch",`${a} ${t} attempt ${s} failed with ${c.status}`),FMt(c.status))return r(f);throw f}},NMt(e.retry))}var RMt=async t=>{let e=t.statusText,r=t.headers.get(DMt)||void 0;if(t.headers.get(bMt)?.includes("application/json"))try{e=(await t.json()).message||e}catch{}return new SMt.HTTPError({status:t.status,message:e,location:r})},FMt=t=>[QMt,kMt].includes(t)||t>=xMt,NMt=t=>typeof t=="boolean"?{retries:t?1:0}:typeof t=="number"?{retries:t}:{retries:0,...t}});var yRe=L(SO=>{"use strict";Object.defineProperty(SO,"__esModule",{value:!0});SO.Fulcio=void 0;var OMt=vO(),eK=class{constructor(e){this.options=e}async createSigningCertificate(e){let{baseURL:r,retry:s,timeout:a}=this.options,n=`${r}/api/v2/signingCert`;return(await(0,OMt.fetchWithRetry)(n,{headers:{"Content-Type":"application/json"},body:JSON.stringify(e),timeout:a,retry:s})).json()}};SO.Fulcio=eK});var ERe=L(DO=>{"use strict";Object.defineProperty(DO,"__esModule",{value:!0});DO.CAClient=void 0;var LMt=Xw(),MMt=yRe(),tK=class{constructor(e){this.fulcio=new MMt.Fulcio({baseURL:e.fulcioBaseURL,retry:e.retry,timeout:e.timeout})}async createSigningCertificate(e,r,s){let a=_Mt(e,r,s);try{let n=await this.fulcio.createSigningCertificate(a);return(n.signedCertificateEmbeddedSct?n.signedCertificateEmbeddedSct:n.signedCertificateDetachedSct).chain.certificates}catch(n){(0,LMt.internalError)(n,"CA_CREATE_SIGNING_CERTIFICATE_ERROR","error creating signing certificate")}}};DO.CAClient=tK;function _Mt(t,e,r){return{credentials:{oidcIdentityToken:t},publicKeyRequest:{publicKey:{algorithm:"ECDSA",content:e},proofOfPossession:r.toString("base64")}}}});var CRe=L(e1=>{"use strict";var UMt=e1&&e1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e1,"__esModule",{value:!0});e1.EphemeralSigner=void 0;var IRe=UMt(Ie("crypto")),HMt="ec",jMt="P-256",rK=class{constructor(){this.keypair=IRe.default.generateKeyPairSync(HMt,{namedCurve:jMt})}async sign(e){let r=IRe.default.sign(null,e,this.keypair.privateKey),s=this.keypair.publicKey.export({format:"pem",type:"spki"}).toString("ascii");return{signature:r,key:{$case:"publicKey",publicKey:s}}}};e1.EphemeralSigner=rK});var wRe=L(iy=>{"use strict";Object.defineProperty(iy,"__esModule",{value:!0});iy.FulcioSigner=iy.DEFAULT_FULCIO_URL=void 0;var nK=Xw(),qMt=Bg(),GMt=ERe(),WMt=CRe();iy.DEFAULT_FULCIO_URL="https://fulcio.sigstore.dev";var iK=class{constructor(e){this.ca=new GMt.CAClient({...e,fulcioBaseURL:e.fulcioBaseURL||iy.DEFAULT_FULCIO_URL}),this.identityProvider=e.identityProvider,this.keyHolder=e.keyHolder||new WMt.EphemeralSigner}async sign(e){let r=await this.getIdentityToken(),s;try{s=qMt.oidc.extractJWTSubject(r)}catch(f){throw new nK.InternalError({code:"IDENTITY_TOKEN_PARSE_ERROR",message:`invalid identity token: ${r}`,cause:f})}let a=await this.keyHolder.sign(Buffer.from(s));if(a.key.$case!=="publicKey")throw new nK.InternalError({code:"CA_CREATE_SIGNING_CERTIFICATE_ERROR",message:"unexpected format for signing key"});let n=await this.ca.createSigningCertificate(r,a.key.publicKey,a.signature);return{signature:(await this.keyHolder.sign(e)).signature,key:{$case:"x509Certificate",certificate:n[0]}}}async getIdentityToken(){try{return await this.identityProvider.getToken()}catch(e){throw new nK.InternalError({code:"IDENTITY_TOKEN_READ_ERROR",message:"error retrieving identity token",cause:e})}}};iy.FulcioSigner=iK});var vRe=L(t1=>{"use strict";Object.defineProperty(t1,"__esModule",{value:!0});t1.FulcioSigner=t1.DEFAULT_FULCIO_URL=void 0;var BRe=wRe();Object.defineProperty(t1,"DEFAULT_FULCIO_URL",{enumerable:!0,get:function(){return BRe.DEFAULT_FULCIO_URL}});Object.defineProperty(t1,"FulcioSigner",{enumerable:!0,get:function(){return BRe.FulcioSigner}})});var bRe=L(bO=>{"use strict";Object.defineProperty(bO,"__esModule",{value:!0});bO.Rekor=void 0;var SRe=vO(),sK=class{constructor(e){this.options=e}async createEntry(e){let{baseURL:r,timeout:s,retry:a}=this.options,n=`${r}/api/v1/log/entries`,f=await(await(0,SRe.fetchWithRetry)(n,{headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(e),timeout:s,retry:a})).json();return DRe(f)}async getEntry(e){let{baseURL:r,timeout:s,retry:a}=this.options,n=`${r}/api/v1/log/entries/${e}`,f=await(await(0,SRe.fetchWithRetry)(n,{method:"GET",headers:{Accept:"application/json"},timeout:s,retry:a})).json();return DRe(f)}};bO.Rekor=sK;function DRe(t){let e=Object.entries(t);if(e.length!=1)throw new Error("Received multiple entries in Rekor response");let[r,s]=e[0];return{...s,uuid:r}}});var xRe=L(PO=>{"use strict";Object.defineProperty(PO,"__esModule",{value:!0});PO.TLogClient=void 0;var PRe=Xw(),YMt=IO(),VMt=bRe(),oK=class{constructor(e){this.fetchOnConflict=e.fetchOnConflict??!1,this.rekor=new VMt.Rekor({baseURL:e.rekorBaseURL,retry:e.retry,timeout:e.timeout})}async createEntry(e){let r;try{r=await this.rekor.createEntry(e)}catch(s){if(KMt(s)&&this.fetchOnConflict){let a=s.location.split("/").pop()||"";try{r=await this.rekor.getEntry(a)}catch(n){(0,PRe.internalError)(n,"TLOG_FETCH_ENTRY_ERROR","error fetching tlog entry")}}else(0,PRe.internalError)(s,"TLOG_CREATE_ENTRY_ERROR","error creating tlog entry")}return r}};PO.TLogClient=oK;function KMt(t){return t instanceof YMt.HTTPError&&t.statusCode===409&&t.location!==void 0}});var kRe=L(aK=>{"use strict";Object.defineProperty(aK,"__esModule",{value:!0});aK.toProposedEntry=zMt;var JMt=xb(),vg=Bg(),Lb="sha256";function zMt(t,e,r="dsse"){switch(t.$case){case"dsseEnvelope":return r==="intoto"?$Mt(t.dsseEnvelope,e):XMt(t.dsseEnvelope,e);case"messageSignature":return ZMt(t.messageSignature,e)}}function ZMt(t,e){let r=t.messageDigest.digest.toString("hex"),s=t.signature.toString("base64"),a=vg.encoding.base64Encode(e);return{apiVersion:"0.0.1",kind:"hashedrekord",spec:{data:{hash:{algorithm:Lb,value:r}},signature:{content:s,publicKey:{content:a}}}}}function XMt(t,e){let r=JSON.stringify((0,JMt.envelopeToJSON)(t)),s=vg.encoding.base64Encode(e);return{apiVersion:"0.0.1",kind:"dsse",spec:{proposedContent:{envelope:r,verifiers:[s]}}}}function $Mt(t,e){let r=vg.crypto.digest(Lb,t.payload).toString("hex"),s=e_t(t,e),a=vg.encoding.base64Encode(t.payload.toString("base64")),n=vg.encoding.base64Encode(t.signatures[0].sig.toString("base64")),c=t.signatures[0].keyid,f=vg.encoding.base64Encode(e),p={payloadType:t.payloadType,payload:a,signatures:[{sig:n,publicKey:f}]};return c.length>0&&(p.signatures[0].keyid=c),{apiVersion:"0.0.2",kind:"intoto",spec:{content:{envelope:p,hash:{algorithm:Lb,value:s},payloadHash:{algorithm:Lb,value:r}}}}}function e_t(t,e){let r={payloadType:t.payloadType,payload:t.payload.toString("base64"),signatures:[{sig:t.signatures[0].sig.toString("base64"),publicKey:e}]};return t.signatures[0].keyid.length>0&&(r.signatures[0].keyid=t.signatures[0].keyid),vg.crypto.digest(Lb,vg.json.canonicalize(r)).toString("hex")}});var QRe=L(sy=>{"use strict";Object.defineProperty(sy,"__esModule",{value:!0});sy.RekorWitness=sy.DEFAULT_REKOR_URL=void 0;var t_t=Bg(),r_t=xRe(),n_t=kRe();sy.DEFAULT_REKOR_URL="https://rekor.sigstore.dev";var lK=class{constructor(e){this.entryType=e.entryType,this.tlog=new r_t.TLogClient({...e,rekorBaseURL:e.rekorBaseURL||sy.DEFAULT_REKOR_URL})}async testify(e,r){let s=(0,n_t.toProposedEntry)(e,r,this.entryType),a=await this.tlog.createEntry(s);return i_t(a)}};sy.RekorWitness=lK;function i_t(t){let e=Buffer.from(t.logID,"hex"),r=t_t.encoding.base64Decode(t.body),s=JSON.parse(r),a=t?.verification?.signedEntryTimestamp?s_t(t.verification.signedEntryTimestamp):void 0,n=t?.verification?.inclusionProof?o_t(t.verification.inclusionProof):void 0;return{tlogEntries:[{logIndex:t.logIndex.toString(),logId:{keyId:e},integratedTime:t.integratedTime.toString(),kindVersion:{kind:s.kind,version:s.apiVersion},inclusionPromise:a,inclusionProof:n,canonicalizedBody:Buffer.from(t.body,"base64")}]}}function s_t(t){return{signedEntryTimestamp:Buffer.from(t,"base64")}}function o_t(t){return{logIndex:t.logIndex.toString(),treeSize:t.treeSize.toString(),rootHash:Buffer.from(t.rootHash,"hex"),hashes:t.hashes.map(e=>Buffer.from(e,"hex")),checkpoint:{envelope:t.checkpoint}}}});var TRe=L(xO=>{"use strict";Object.defineProperty(xO,"__esModule",{value:!0});xO.TimestampAuthority=void 0;var a_t=vO(),cK=class{constructor(e){this.options=e}async createTimestamp(e){let{baseURL:r,timeout:s,retry:a}=this.options,n=`${r}/api/v1/timestamp`;return(await(0,a_t.fetchWithRetry)(n,{headers:{"Content-Type":"application/json"},body:JSON.stringify(e),timeout:s,retry:a})).buffer()}};xO.TimestampAuthority=cK});var FRe=L(kO=>{"use strict";Object.defineProperty(kO,"__esModule",{value:!0});kO.TSAClient=void 0;var l_t=Xw(),c_t=TRe(),u_t=Bg(),RRe="sha256",uK=class{constructor(e){this.tsa=new c_t.TimestampAuthority({baseURL:e.tsaBaseURL,retry:e.retry,timeout:e.timeout})}async createTimestamp(e){let r={artifactHash:u_t.crypto.digest(RRe,e).toString("base64"),hashAlgorithm:RRe};try{return await this.tsa.createTimestamp(r)}catch(s){(0,l_t.internalError)(s,"TSA_CREATE_TIMESTAMP_ERROR","error creating timestamp")}}};kO.TSAClient=uK});var NRe=L(QO=>{"use strict";Object.defineProperty(QO,"__esModule",{value:!0});QO.TSAWitness=void 0;var f_t=FRe(),fK=class{constructor(e){this.tsa=new f_t.TSAClient({tsaBaseURL:e.tsaBaseURL,retry:e.retry,timeout:e.timeout})}async testify(e){let r=A_t(e);return{rfc3161Timestamps:[{signedTimestamp:await this.tsa.createTimestamp(r)}]}}};QO.TSAWitness=fK;function A_t(t){switch(t.$case){case"dsseEnvelope":return t.dsseEnvelope.signatures[0].sig;case"messageSignature":return t.messageSignature.signature}}});var LRe=L(Sg=>{"use strict";Object.defineProperty(Sg,"__esModule",{value:!0});Sg.TSAWitness=Sg.RekorWitness=Sg.DEFAULT_REKOR_URL=void 0;var ORe=QRe();Object.defineProperty(Sg,"DEFAULT_REKOR_URL",{enumerable:!0,get:function(){return ORe.DEFAULT_REKOR_URL}});Object.defineProperty(Sg,"RekorWitness",{enumerable:!0,get:function(){return ORe.RekorWitness}});var p_t=NRe();Object.defineProperty(Sg,"TSAWitness",{enumerable:!0,get:function(){return p_t.TSAWitness}})});var pK=L(Is=>{"use strict";Object.defineProperty(Is,"__esModule",{value:!0});Is.TSAWitness=Is.RekorWitness=Is.DEFAULT_REKOR_URL=Is.FulcioSigner=Is.DEFAULT_FULCIO_URL=Is.CIContextProvider=Is.InternalError=Is.MessageSignatureBundleBuilder=Is.DSSEBundleBuilder=void 0;var MRe=$Te();Object.defineProperty(Is,"DSSEBundleBuilder",{enumerable:!0,get:function(){return MRe.DSSEBundleBuilder}});Object.defineProperty(Is,"MessageSignatureBundleBuilder",{enumerable:!0,get:function(){return MRe.MessageSignatureBundleBuilder}});var h_t=Xw();Object.defineProperty(Is,"InternalError",{enumerable:!0,get:function(){return h_t.InternalError}});var g_t=rRe();Object.defineProperty(Is,"CIContextProvider",{enumerable:!0,get:function(){return g_t.CIContextProvider}});var _Re=vRe();Object.defineProperty(Is,"DEFAULT_FULCIO_URL",{enumerable:!0,get:function(){return _Re.DEFAULT_FULCIO_URL}});Object.defineProperty(Is,"FulcioSigner",{enumerable:!0,get:function(){return _Re.FulcioSigner}});var AK=LRe();Object.defineProperty(Is,"DEFAULT_REKOR_URL",{enumerable:!0,get:function(){return AK.DEFAULT_REKOR_URL}});Object.defineProperty(Is,"RekorWitness",{enumerable:!0,get:function(){return AK.RekorWitness}});Object.defineProperty(Is,"TSAWitness",{enumerable:!0,get:function(){return AK.TSAWitness}})});var HRe=L(Mb=>{"use strict";var URe=Mb&&Mb.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Mb,"__esModule",{value:!0});Mb.appDataPath=m_t;var d_t=URe(Ie("os")),r1=URe(Ie("path"));function m_t(t){let e=d_t.default.homedir();switch(process.platform){case"darwin":{let r=r1.default.join(e,"Library","Application Support");return r1.default.join(r,t)}case"win32":{let r=process.env.LOCALAPPDATA||r1.default.join(e,"AppData","Local");return r1.default.join(r,t,"Data")}default:{let r=process.env.XDG_DATA_HOME||r1.default.join(e,".local","share");return r1.default.join(r,t)}}}});var kA=L(Bl=>{"use strict";Object.defineProperty(Bl,"__esModule",{value:!0});Bl.UnsupportedAlgorithmError=Bl.CryptoError=Bl.LengthOrHashMismatchError=Bl.UnsignedMetadataError=Bl.RepositoryError=Bl.ValueError=void 0;var hK=class extends Error{};Bl.ValueError=hK;var _b=class extends Error{};Bl.RepositoryError=_b;var gK=class extends _b{};Bl.UnsignedMetadataError=gK;var dK=class extends _b{};Bl.LengthOrHashMismatchError=dK;var TO=class extends Error{};Bl.CryptoError=TO;var mK=class extends TO{};Bl.UnsupportedAlgorithmError=mK});var qRe=L(Dg=>{"use strict";Object.defineProperty(Dg,"__esModule",{value:!0});Dg.isDefined=y_t;Dg.isObject=jRe;Dg.isStringArray=E_t;Dg.isObjectArray=I_t;Dg.isStringRecord=C_t;Dg.isObjectRecord=w_t;function y_t(t){return t!==void 0}function jRe(t){return typeof t=="object"&&t!==null}function E_t(t){return Array.isArray(t)&&t.every(e=>typeof e=="string")}function I_t(t){return Array.isArray(t)&&t.every(jRe)}function C_t(t){return typeof t=="object"&&t!==null&&Object.keys(t).every(e=>typeof e=="string")&&Object.values(t).every(e=>typeof e=="string")}function w_t(t){return typeof t=="object"&&t!==null&&Object.keys(t).every(e=>typeof e=="string")&&Object.values(t).every(e=>typeof e=="object"&&e!==null)}});var EK=L((yCr,YRe)=>{var GRe=",",B_t=":",v_t="[",S_t="]",D_t="{",b_t="}";function yK(t){let e=[];if(typeof t=="string")e.push(WRe(t));else if(typeof t=="boolean")e.push(JSON.stringify(t));else if(Number.isInteger(t))e.push(JSON.stringify(t));else if(t===null)e.push(JSON.stringify(t));else if(Array.isArray(t)){e.push(v_t);let r=!0;t.forEach(s=>{r||e.push(GRe),r=!1,e.push(yK(s))}),e.push(S_t)}else if(typeof t=="object"){e.push(D_t);let r=!0;Object.keys(t).sort().forEach(s=>{r||e.push(GRe),r=!1,e.push(WRe(s)),e.push(B_t),e.push(yK(t[s]))}),e.push(b_t)}else throw new TypeError("cannot encode "+t.toString());return e.join("")}function WRe(t){return'"'+t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'}YRe.exports={canonicalize:yK}});var VRe=L(n1=>{"use strict";var P_t=n1&&n1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(n1,"__esModule",{value:!0});n1.verifySignature=void 0;var x_t=EK(),k_t=P_t(Ie("crypto")),Q_t=(t,e,r)=>{let s=Buffer.from((0,x_t.canonicalize)(t));return k_t.default.verify(void 0,s,e,Buffer.from(r,"hex"))};n1.verifySignature=Q_t});var Af=L(ru=>{"use strict";var T_t=ru&&ru.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),R_t=ru&&ru.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),KRe=ru&&ru.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&T_t(e,t,r);return R_t(e,t),e};Object.defineProperty(ru,"__esModule",{value:!0});ru.crypto=ru.guard=void 0;ru.guard=KRe(qRe());ru.crypto=KRe(VRe())});var oy=L(dh=>{"use strict";var F_t=dh&&dh.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(dh,"__esModule",{value:!0});dh.Signed=dh.MetadataKind=void 0;dh.isMetadataKind=O_t;var N_t=F_t(Ie("util")),Ub=kA(),IK=Af(),JRe=["1","0","31"],CK;(function(t){t.Root="root",t.Timestamp="timestamp",t.Snapshot="snapshot",t.Targets="targets"})(CK||(dh.MetadataKind=CK={}));function O_t(t){return typeof t=="string"&&Object.values(CK).includes(t)}var wK=class t{constructor(e){this.specVersion=e.specVersion||JRe.join(".");let r=this.specVersion.split(".");if(!(r.length===2||r.length===3)||!r.every(s=>L_t(s)))throw new Ub.ValueError("Failed to parse specVersion");if(r[0]!=JRe[0])throw new Ub.ValueError("Unsupported specVersion");this.expires=e.expires,this.version=e.version,this.unrecognizedFields=e.unrecognizedFields||{}}equals(e){return e instanceof t?this.specVersion===e.specVersion&&this.expires===e.expires&&this.version===e.version&&N_t.default.isDeepStrictEqual(this.unrecognizedFields,e.unrecognizedFields):!1}isExpired(e){return e||(e=new Date),e>=new Date(this.expires)}static commonFieldsFromJSON(e){let{spec_version:r,expires:s,version:a,...n}=e;if(IK.guard.isDefined(r)){if(typeof r!="string")throw new TypeError("spec_version must be a string")}else throw new Ub.ValueError("spec_version is not defined");if(IK.guard.isDefined(s)){if(typeof s!="string")throw new TypeError("expires must be a string")}else throw new Ub.ValueError("expires is not defined");if(IK.guard.isDefined(a)){if(typeof a!="number")throw new TypeError("version must be a number")}else throw new Ub.ValueError("version is not defined");return{specVersion:r,expires:s,version:a,unrecognizedFields:n}}};dh.Signed=wK;function L_t(t){return!isNaN(Number(t))}});var Hb=L(Pg=>{"use strict";var zRe=Pg&&Pg.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Pg,"__esModule",{value:!0});Pg.TargetFile=Pg.MetaFile=void 0;var ZRe=zRe(Ie("crypto")),FO=zRe(Ie("util")),bg=kA(),RO=Af(),BK=class t{constructor(e){if(e.version<=0)throw new bg.ValueError("Metafile version must be at least 1");e.length!==void 0&&XRe(e.length),this.version=e.version,this.length=e.length,this.hashes=e.hashes,this.unrecognizedFields=e.unrecognizedFields||{}}equals(e){return e instanceof t?this.version===e.version&&this.length===e.length&&FO.default.isDeepStrictEqual(this.hashes,e.hashes)&&FO.default.isDeepStrictEqual(this.unrecognizedFields,e.unrecognizedFields):!1}verify(e){if(this.length!==void 0&&e.length!==this.length)throw new bg.LengthOrHashMismatchError(`Expected length ${this.length} but got ${e.length}`);this.hashes&&Object.entries(this.hashes).forEach(([r,s])=>{let a;try{a=ZRe.default.createHash(r)}catch{throw new bg.LengthOrHashMismatchError(`Hash algorithm ${r} not supported`)}let n=a.update(e).digest("hex");if(n!==s)throw new bg.LengthOrHashMismatchError(`Expected hash ${s} but got ${n}`)})}toJSON(){let e={version:this.version,...this.unrecognizedFields};return this.length!==void 0&&(e.length=this.length),this.hashes&&(e.hashes=this.hashes),e}static fromJSON(e){let{version:r,length:s,hashes:a,...n}=e;if(typeof r!="number")throw new TypeError("version must be a number");if(RO.guard.isDefined(s)&&typeof s!="number")throw new TypeError("length must be a number");if(RO.guard.isDefined(a)&&!RO.guard.isStringRecord(a))throw new TypeError("hashes must be string keys and values");return new t({version:r,length:s,hashes:a,unrecognizedFields:n})}};Pg.MetaFile=BK;var vK=class t{constructor(e){XRe(e.length),this.length=e.length,this.path=e.path,this.hashes=e.hashes,this.unrecognizedFields=e.unrecognizedFields||{}}get custom(){let e=this.unrecognizedFields.custom;return!e||Array.isArray(e)||typeof e!="object"?{}:e}equals(e){return e instanceof t?this.length===e.length&&this.path===e.path&&FO.default.isDeepStrictEqual(this.hashes,e.hashes)&&FO.default.isDeepStrictEqual(this.unrecognizedFields,e.unrecognizedFields):!1}async verify(e){let r=0,s=Object.keys(this.hashes).reduce((a,n)=>{try{a[n]=ZRe.default.createHash(n)}catch{throw new bg.LengthOrHashMismatchError(`Hash algorithm ${n} not supported`)}return a},{});for await(let a of e)r+=a.length,Object.values(s).forEach(n=>{n.update(a)});if(r!==this.length)throw new bg.LengthOrHashMismatchError(`Expected length ${this.length} but got ${r}`);Object.entries(s).forEach(([a,n])=>{let c=this.hashes[a],f=n.digest("hex");if(f!==c)throw new bg.LengthOrHashMismatchError(`Expected hash ${c} but got ${f}`)})}toJSON(){return{length:this.length,hashes:this.hashes,...this.unrecognizedFields}}static fromJSON(e,r){let{length:s,hashes:a,...n}=r;if(typeof s!="number")throw new TypeError("length must be a number");if(!RO.guard.isStringRecord(a))throw new TypeError("hashes must have string keys and values");return new t({length:s,path:e,hashes:a,unrecognizedFields:n})}};Pg.TargetFile=vK;function XRe(t){if(t<0)throw new bg.ValueError("Length must be at least 0")}});var $Re=L(SK=>{"use strict";Object.defineProperty(SK,"__esModule",{value:!0});SK.encodeOIDString=__t;var M_t=6;function __t(t){let e=t.split("."),r=parseInt(e[0],10)*40+parseInt(e[1],10),s=[];e.slice(2).forEach(n=>{let c=U_t(parseInt(n,10));s.push(...c)});let a=Buffer.from([r,...s]);return Buffer.from([M_t,a.length,...a])}function U_t(t){let e=[],r=0;for(;t>0;)e.unshift(t&127|r),t>>=7,r=128;return e}});var nFe=L(qb=>{"use strict";var H_t=qb&&qb.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(qb,"__esModule",{value:!0});qb.getPublicKey=W_t;var i1=H_t(Ie("crypto")),jb=kA(),DK=$Re(),NO=48,eFe=3,tFe=0,j_t="1.3.101.112",q_t="1.2.840.10045.2.1",G_t="1.2.840.10045.3.1.7",bK="-----BEGIN PUBLIC KEY-----";function W_t(t){switch(t.keyType){case"rsa":return Y_t(t);case"ed25519":return V_t(t);case"ecdsa":case"ecdsa-sha2-nistp256":case"ecdsa-sha2-nistp384":return K_t(t);default:throw new jb.UnsupportedAlgorithmError(`Unsupported key type: ${t.keyType}`)}}function Y_t(t){if(!t.keyVal.startsWith(bK))throw new jb.CryptoError("Invalid key format");let e=i1.default.createPublicKey(t.keyVal);switch(t.scheme){case"rsassa-pss-sha256":return{key:e,padding:i1.default.constants.RSA_PKCS1_PSS_PADDING};default:throw new jb.UnsupportedAlgorithmError(`Unsupported RSA scheme: ${t.scheme}`)}}function V_t(t){let e;if(t.keyVal.startsWith(bK))e=i1.default.createPublicKey(t.keyVal);else{if(!rFe(t.keyVal))throw new jb.CryptoError("Invalid key format");e=i1.default.createPublicKey({key:J_t.hexToDER(t.keyVal),format:"der",type:"spki"})}return{key:e}}function K_t(t){let e;if(t.keyVal.startsWith(bK))e=i1.default.createPublicKey(t.keyVal);else{if(!rFe(t.keyVal))throw new jb.CryptoError("Invalid key format");e=i1.default.createPublicKey({key:z_t.hexToDER(t.keyVal),format:"der",type:"spki"})}return{key:e}}var J_t={hexToDER:t=>{let e=Buffer.from(t,"hex"),r=(0,DK.encodeOIDString)(j_t),s=Buffer.concat([Buffer.concat([Buffer.from([NO]),Buffer.from([r.length]),r]),Buffer.concat([Buffer.from([eFe]),Buffer.from([e.length+1]),Buffer.from([tFe]),e])]);return Buffer.concat([Buffer.from([NO]),Buffer.from([s.length]),s])}},z_t={hexToDER:t=>{let e=Buffer.from(t,"hex"),r=Buffer.concat([Buffer.from([eFe]),Buffer.from([e.length+1]),Buffer.from([tFe]),e]),s=Buffer.concat([(0,DK.encodeOIDString)(q_t),(0,DK.encodeOIDString)(G_t)]),a=Buffer.concat([Buffer.from([NO]),Buffer.from([s.length]),s]);return Buffer.concat([Buffer.from([NO]),Buffer.from([a.length+r.length]),a,r])}},rFe=t=>/^[0-9a-fA-F]+$/.test(t)});var OO=L(s1=>{"use strict";var Z_t=s1&&s1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(s1,"__esModule",{value:!0});s1.Key=void 0;var iFe=Z_t(Ie("util")),Gb=kA(),sFe=Af(),X_t=nFe(),PK=class t{constructor(e){let{keyID:r,keyType:s,scheme:a,keyVal:n,unrecognizedFields:c}=e;this.keyID=r,this.keyType=s,this.scheme=a,this.keyVal=n,this.unrecognizedFields=c||{}}verifySignature(e){let r=e.signatures[this.keyID];if(!r)throw new Gb.UnsignedMetadataError("no signature for key found in metadata");if(!this.keyVal.public)throw new Gb.UnsignedMetadataError("no public key found");let s=(0,X_t.getPublicKey)({keyType:this.keyType,scheme:this.scheme,keyVal:this.keyVal.public}),a=e.signed.toJSON();try{if(!sFe.crypto.verifySignature(a,s,r.sig))throw new Gb.UnsignedMetadataError(`failed to verify ${this.keyID} signature`)}catch(n){throw n instanceof Gb.UnsignedMetadataError?n:new Gb.UnsignedMetadataError(`failed to verify ${this.keyID} signature`)}}equals(e){return e instanceof t?this.keyID===e.keyID&&this.keyType===e.keyType&&this.scheme===e.scheme&&iFe.default.isDeepStrictEqual(this.keyVal,e.keyVal)&&iFe.default.isDeepStrictEqual(this.unrecognizedFields,e.unrecognizedFields):!1}toJSON(){return{keytype:this.keyType,scheme:this.scheme,keyval:this.keyVal,...this.unrecognizedFields}}static fromJSON(e,r){let{keytype:s,scheme:a,keyval:n,...c}=r;if(typeof s!="string")throw new TypeError("keytype must be a string");if(typeof a!="string")throw new TypeError("scheme must be a string");if(!sFe.guard.isStringRecord(n))throw new TypeError("keyval must be a string record");return new t({keyID:e,keyType:s,scheme:a,keyVal:n,unrecognizedFields:c})}};s1.Key=PK});var uFe=L((DCr,cFe)=>{"use strict";cFe.exports=aFe;function aFe(t,e,r){t instanceof RegExp&&(t=oFe(t,r)),e instanceof RegExp&&(e=oFe(e,r));var s=lFe(t,e,r);return s&&{start:s[0],end:s[1],pre:r.slice(0,s[0]),body:r.slice(s[0]+t.length,s[1]),post:r.slice(s[1]+e.length)}}function oFe(t,e){var r=e.match(t);return r?r[0]:null}aFe.range=lFe;function lFe(t,e,r){var s,a,n,c,f,p=r.indexOf(t),h=r.indexOf(e,p+1),E=p;if(p>=0&&h>0){for(s=[],n=r.length;E>=0&&!f;)E==p?(s.push(E),p=r.indexOf(t,E+1)):s.length==1?f=[s.pop(),h]:(a=s.pop(),a=0?p:h;s.length&&(f=[n,c])}return f}});var yFe=L((bCr,mFe)=>{var fFe=uFe();mFe.exports=tUt;var AFe="\0SLASH"+Math.random()+"\0",pFe="\0OPEN"+Math.random()+"\0",kK="\0CLOSE"+Math.random()+"\0",hFe="\0COMMA"+Math.random()+"\0",gFe="\0PERIOD"+Math.random()+"\0";function xK(t){return parseInt(t,10)==t?parseInt(t,10):t.charCodeAt(0)}function $_t(t){return t.split("\\\\").join(AFe).split("\\{").join(pFe).split("\\}").join(kK).split("\\,").join(hFe).split("\\.").join(gFe)}function eUt(t){return t.split(AFe).join("\\").split(pFe).join("{").split(kK).join("}").split(hFe).join(",").split(gFe).join(".")}function dFe(t){if(!t)return[""];var e=[],r=fFe("{","}",t);if(!r)return t.split(",");var s=r.pre,a=r.body,n=r.post,c=s.split(",");c[c.length-1]+="{"+a+"}";var f=dFe(n);return n.length&&(c[c.length-1]+=f.shift(),c.push.apply(c,f)),e.push.apply(e,c),e}function tUt(t){return t?(t.substr(0,2)==="{}"&&(t="\\{\\}"+t.substr(2)),Wb($_t(t),!0).map(eUt)):[]}function rUt(t){return"{"+t+"}"}function nUt(t){return/^-?0\d/.test(t)}function iUt(t,e){return t<=e}function sUt(t,e){return t>=e}function Wb(t,e){var r=[],s=fFe("{","}",t);if(!s)return[t];var a=s.pre,n=s.post.length?Wb(s.post,!1):[""];if(/\$$/.test(s.pre))for(var c=0;c=0;if(!E&&!C)return s.post.match(/,.*\}/)?(t=s.pre+"{"+s.body+kK+s.post,Wb(t)):[t];var S;if(E)S=s.body.split(/\.\./);else if(S=dFe(s.body),S.length===1&&(S=Wb(S[0],!1).map(rUt),S.length===1))return n.map(function(Ce){return s.pre+S[0]+Ce});var P;if(E){var I=xK(S[0]),R=xK(S[1]),N=Math.max(S[0].length,S[1].length),U=S.length==3?Math.abs(xK(S[2])):1,W=iUt,te=R0){var pe=new Array(me+1).join("0");Ae<0?ce="-"+pe+ce.slice(1):ce=pe+ce}}P.push(ce)}}else{P=[];for(var Be=0;Be{"use strict";Object.defineProperty(LO,"__esModule",{value:!0});LO.assertValidPattern=void 0;var oUt=1024*64,aUt=t=>{if(typeof t!="string")throw new TypeError("invalid pattern");if(t.length>oUt)throw new TypeError("pattern is too long")};LO.assertValidPattern=aUt});var CFe=L(MO=>{"use strict";Object.defineProperty(MO,"__esModule",{value:!0});MO.parseClass=void 0;var lUt={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},Yb=t=>t.replace(/[[\]\\-]/g,"\\$&"),cUt=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),IFe=t=>t.join(""),uUt=(t,e)=>{let r=e;if(t.charAt(r)!=="[")throw new Error("not in a brace expression");let s=[],a=[],n=r+1,c=!1,f=!1,p=!1,h=!1,E=r,C="";e:for(;nC?s.push(Yb(C)+"-"+Yb(R)):R===C&&s.push(Yb(R)),C="",n++;continue}if(t.startsWith("-]",n+1)){s.push(Yb(R+"-")),n+=2;continue}if(t.startsWith("-",n+1)){C=R,n+=2;continue}s.push(Yb(R)),n++}if(E{"use strict";Object.defineProperty(_O,"__esModule",{value:!0});_O.unescape=void 0;var fUt=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/\[([^\/\\])\]/g,"$1"):t.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1");_O.unescape=fUt});var RK=L(qO=>{"use strict";Object.defineProperty(qO,"__esModule",{value:!0});qO.AST=void 0;var AUt=CFe(),HO=UO(),pUt=new Set(["!","?","+","*","@"]),wFe=t=>pUt.has(t),hUt="(?!(?:^|/)\\.\\.?(?:$|/))",jO="(?!\\.)",gUt=new Set(["[","."]),dUt=new Set(["..","."]),mUt=new Set("().*{}+?[]^$\\!"),yUt=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),TK="[^/]",BFe=TK+"*?",vFe=TK+"+?",QK=class t{type;#t;#r;#i=!1;#e=[];#n;#o;#l;#a=!1;#s;#c;#f=!1;constructor(e,r,s={}){this.type=e,e&&(this.#r=!0),this.#n=r,this.#t=this.#n?this.#n.#t:this,this.#s=this.#t===this?s:this.#t.#s,this.#l=this.#t===this?[]:this.#t.#l,e==="!"&&!this.#t.#a&&this.#l.push(this),this.#o=this.#n?this.#n.#e.length:0}get hasMagic(){if(this.#r!==void 0)return this.#r;for(let e of this.#e)if(typeof e!="string"&&(e.type||e.hasMagic))return this.#r=!0;return this.#r}toString(){return this.#c!==void 0?this.#c:this.type?this.#c=this.type+"("+this.#e.map(e=>String(e)).join("|")+")":this.#c=this.#e.map(e=>String(e)).join("")}#p(){if(this!==this.#t)throw new Error("should only call on root");if(this.#a)return this;this.toString(),this.#a=!0;let e;for(;e=this.#l.pop();){if(e.type!=="!")continue;let r=e,s=r.#n;for(;s;){for(let a=r.#o+1;!s.type&&atypeof r=="string"?r:r.toJSON()):[this.type,...this.#e.map(r=>r.toJSON())];return this.isStart()&&!this.type&&e.unshift([]),this.isEnd()&&(this===this.#t||this.#t.#a&&this.#n?.type==="!")&&e.push({}),e}isStart(){if(this.#t===this)return!0;if(!this.#n?.isStart())return!1;if(this.#o===0)return!0;let e=this.#n;for(let r=0;r{let[I,R,N,U]=typeof P=="string"?t.#h(P,this.#r,p):P.toRegExpSource(e);return this.#r=this.#r||N,this.#i=this.#i||U,I}).join(""),E="";if(this.isStart()&&typeof this.#e[0]=="string"&&!(this.#e.length===1&&dUt.has(this.#e[0]))){let I=gUt,R=r&&I.has(h.charAt(0))||h.startsWith("\\.")&&I.has(h.charAt(2))||h.startsWith("\\.\\.")&&I.has(h.charAt(4)),N=!r&&!e&&I.has(h.charAt(0));E=R?hUt:N?jO:""}let C="";return this.isEnd()&&this.#t.#a&&this.#n?.type==="!"&&(C="(?:$|\\/)"),[E+h+C,(0,HO.unescape)(h),this.#r=!!this.#r,this.#i]}let s=this.type==="*"||this.type==="+",a=this.type==="!"?"(?:(?!(?:":"(?:",n=this.#A(r);if(this.isStart()&&this.isEnd()&&!n&&this.type!=="!"){let p=this.toString();return this.#e=[p],this.type=null,this.#r=void 0,[p,(0,HO.unescape)(this.toString()),!1,!1]}let c=!s||e||r||!jO?"":this.#A(!0);c===n&&(c=""),c&&(n=`(?:${n})(?:${c})*?`);let f="";if(this.type==="!"&&this.#f)f=(this.isStart()&&!r?jO:"")+vFe;else{let p=this.type==="!"?"))"+(this.isStart()&&!r&&!e?jO:"")+BFe+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&c?")":this.type==="*"&&c?")?":`)${this.type}`;f=a+n+p}return[f,(0,HO.unescape)(n),this.#r=!!this.#r,this.#i]}#A(e){return this.#e.map(r=>{if(typeof r=="string")throw new Error("string type in extglob ast??");let[s,a,n,c]=r.toRegExpSource(e);return this.#i=this.#i||c,s}).filter(r=>!(this.isStart()&&this.isEnd())||!!r).join("|")}static#h(e,r,s=!1){let a=!1,n="",c=!1;for(let f=0;f{"use strict";Object.defineProperty(GO,"__esModule",{value:!0});GO.escape=void 0;var EUt=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/[?*()[\]]/g,"[$&]"):t.replace(/[?*()[\]\\]/g,"\\$&");GO.escape=EUt});var QFe=L(pr=>{"use strict";var IUt=pr&&pr.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pr,"__esModule",{value:!0});pr.unescape=pr.escape=pr.AST=pr.Minimatch=pr.match=pr.makeRe=pr.braceExpand=pr.defaults=pr.filter=pr.GLOBSTAR=pr.sep=pr.minimatch=void 0;var CUt=IUt(yFe()),WO=EFe(),bFe=RK(),wUt=FK(),BUt=UO(),vUt=(t,e,r={})=>((0,WO.assertValidPattern)(e),!r.nocomment&&e.charAt(0)==="#"?!1:new ay(e,r).match(t));pr.minimatch=vUt;var SUt=/^\*+([^+@!?\*\[\(]*)$/,DUt=t=>e=>!e.startsWith(".")&&e.endsWith(t),bUt=t=>e=>e.endsWith(t),PUt=t=>(t=t.toLowerCase(),e=>!e.startsWith(".")&&e.toLowerCase().endsWith(t)),xUt=t=>(t=t.toLowerCase(),e=>e.toLowerCase().endsWith(t)),kUt=/^\*+\.\*+$/,QUt=t=>!t.startsWith(".")&&t.includes("."),TUt=t=>t!=="."&&t!==".."&&t.includes("."),RUt=/^\.\*+$/,FUt=t=>t!=="."&&t!==".."&&t.startsWith("."),NUt=/^\*+$/,OUt=t=>t.length!==0&&!t.startsWith("."),LUt=t=>t.length!==0&&t!=="."&&t!=="..",MUt=/^\?+([^+@!?\*\[\(]*)?$/,_Ut=([t,e=""])=>{let r=PFe([t]);return e?(e=e.toLowerCase(),s=>r(s)&&s.toLowerCase().endsWith(e)):r},UUt=([t,e=""])=>{let r=xFe([t]);return e?(e=e.toLowerCase(),s=>r(s)&&s.toLowerCase().endsWith(e)):r},HUt=([t,e=""])=>{let r=xFe([t]);return e?s=>r(s)&&s.endsWith(e):r},jUt=([t,e=""])=>{let r=PFe([t]);return e?s=>r(s)&&s.endsWith(e):r},PFe=([t])=>{let e=t.length;return r=>r.length===e&&!r.startsWith(".")},xFe=([t])=>{let e=t.length;return r=>r.length===e&&r!=="."&&r!==".."},kFe=typeof process=="object"&&process?typeof process.env=="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",SFe={win32:{sep:"\\"},posix:{sep:"/"}};pr.sep=kFe==="win32"?SFe.win32.sep:SFe.posix.sep;pr.minimatch.sep=pr.sep;pr.GLOBSTAR=Symbol("globstar **");pr.minimatch.GLOBSTAR=pr.GLOBSTAR;var qUt="[^/]",GUt=qUt+"*?",WUt="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",YUt="(?:(?!(?:\\/|^)\\.).)*?",VUt=(t,e={})=>r=>(0,pr.minimatch)(r,t,e);pr.filter=VUt;pr.minimatch.filter=pr.filter;var nu=(t,e={})=>Object.assign({},t,e),KUt=t=>{if(!t||typeof t!="object"||!Object.keys(t).length)return pr.minimatch;let e=pr.minimatch;return Object.assign((s,a,n={})=>e(s,a,nu(t,n)),{Minimatch:class extends e.Minimatch{constructor(a,n={}){super(a,nu(t,n))}static defaults(a){return e.defaults(nu(t,a)).Minimatch}},AST:class extends e.AST{constructor(a,n,c={}){super(a,n,nu(t,c))}static fromGlob(a,n={}){return e.AST.fromGlob(a,nu(t,n))}},unescape:(s,a={})=>e.unescape(s,nu(t,a)),escape:(s,a={})=>e.escape(s,nu(t,a)),filter:(s,a={})=>e.filter(s,nu(t,a)),defaults:s=>e.defaults(nu(t,s)),makeRe:(s,a={})=>e.makeRe(s,nu(t,a)),braceExpand:(s,a={})=>e.braceExpand(s,nu(t,a)),match:(s,a,n={})=>e.match(s,a,nu(t,n)),sep:e.sep,GLOBSTAR:pr.GLOBSTAR})};pr.defaults=KUt;pr.minimatch.defaults=pr.defaults;var JUt=(t,e={})=>((0,WO.assertValidPattern)(t),e.nobrace||!/\{(?:(?!\{).)*\}/.test(t)?[t]:(0,CUt.default)(t));pr.braceExpand=JUt;pr.minimatch.braceExpand=pr.braceExpand;var zUt=(t,e={})=>new ay(t,e).makeRe();pr.makeRe=zUt;pr.minimatch.makeRe=pr.makeRe;var ZUt=(t,e,r={})=>{let s=new ay(e,r);return t=t.filter(a=>s.match(a)),s.options.nonull&&!t.length&&t.push(e),t};pr.match=ZUt;pr.minimatch.match=pr.match;var DFe=/[?*]|[+@!]\(.*?\)|\[|\]/,XUt=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),ay=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(e,r={}){(0,WO.assertValidPattern)(e),r=r||{},this.options=r,this.pattern=e,this.platform=r.platform||kFe,this.isWindows=this.platform==="win32",this.windowsPathsNoEscape=!!r.windowsPathsNoEscape||r.allowWindowsEscape===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!r.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!r.nonegate,this.comment=!1,this.empty=!1,this.partial=!!r.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=r.windowsNoMagicRoot!==void 0?r.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let e of this.set)for(let r of e)if(typeof r!="string")return!0;return!1}debug(...e){}make(){let e=this.pattern,r=this.options;if(!r.nocomment&&e.charAt(0)==="#"){this.comment=!0;return}if(!e){this.empty=!0;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],r.debug&&(this.debug=(...n)=>console.error(...n)),this.debug(this.pattern,this.globSet);let s=this.globSet.map(n=>this.slashSplit(n));this.globParts=this.preprocess(s),this.debug(this.pattern,this.globParts);let a=this.globParts.map((n,c,f)=>{if(this.isWindows&&this.windowsNoMagicRoot){let p=n[0]===""&&n[1]===""&&(n[2]==="?"||!DFe.test(n[2]))&&!DFe.test(n[3]),h=/^[a-z]:/i.test(n[0]);if(p)return[...n.slice(0,4),...n.slice(4).map(E=>this.parse(E))];if(h)return[n[0],...n.slice(1).map(E=>this.parse(E))]}return n.map(p=>this.parse(p))});if(this.debug(this.pattern,a),this.set=a.filter(n=>n.indexOf(!1)===-1),this.isWindows)for(let n=0;n=2?(e=this.firstPhasePreProcess(e),e=this.secondPhasePreProcess(e)):r>=1?e=this.levelOneOptimize(e):e=this.adjascentGlobstarOptimize(e),e}adjascentGlobstarOptimize(e){return e.map(r=>{let s=-1;for(;(s=r.indexOf("**",s+1))!==-1;){let a=s;for(;r[a+1]==="**";)a++;a!==s&&r.splice(s,a-s)}return r})}levelOneOptimize(e){return e.map(r=>(r=r.reduce((s,a)=>{let n=s[s.length-1];return a==="**"&&n==="**"?s:a===".."&&n&&n!==".."&&n!=="."&&n!=="**"?(s.pop(),s):(s.push(a),s)},[]),r.length===0?[""]:r))}levelTwoFileOptimize(e){Array.isArray(e)||(e=this.slashSplit(e));let r=!1;do{if(r=!1,!this.preserveMultipleSlashes){for(let a=1;aa&&s.splice(a+1,c-a);let f=s[a+1],p=s[a+2],h=s[a+3];if(f!==".."||!p||p==="."||p===".."||!h||h==="."||h==="..")continue;r=!0,s.splice(a,1);let E=s.slice(0);E[a]="**",e.push(E),a--}if(!this.preserveMultipleSlashes){for(let c=1;cr.length)}partsMatch(e,r,s=!1){let a=0,n=0,c=[],f="";for(;ate?r=r.slice(ie):te>ie&&(e=e.slice(te)))}}let{optimizationLevel:n=1}=this.options;n>=2&&(e=this.levelTwoFileOptimize(e)),this.debug("matchOne",this,{file:e,pattern:r}),this.debug("matchOne",e.length,r.length);for(var c=0,f=0,p=e.length,h=r.length;c>> no match, partial?`,e,S,r,P),S===p))}let R;if(typeof E=="string"?(R=C===E,this.debug("string match",E,C,R)):(R=E.test(C),this.debug("pattern match",E,C,R)),!R)return!1}if(c===p&&f===h)return!0;if(c===p)return s;if(f===h)return c===p-1&&e[c]==="";throw new Error("wtf?")}braceExpand(){return(0,pr.braceExpand)(this.pattern,this.options)}parse(e){(0,WO.assertValidPattern)(e);let r=this.options;if(e==="**")return pr.GLOBSTAR;if(e==="")return"";let s,a=null;(s=e.match(NUt))?a=r.dot?LUt:OUt:(s=e.match(SUt))?a=(r.nocase?r.dot?xUt:PUt:r.dot?bUt:DUt)(s[1]):(s=e.match(MUt))?a=(r.nocase?r.dot?UUt:_Ut:r.dot?HUt:jUt)(s):(s=e.match(kUt))?a=r.dot?TUt:QUt:(s=e.match(RUt))&&(a=FUt);let n=bFe.AST.fromGlob(e,this.options).toMMPattern();return a&&typeof n=="object"&&Reflect.defineProperty(n,"test",{value:a}),n}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let e=this.set;if(!e.length)return this.regexp=!1,this.regexp;let r=this.options,s=r.noglobstar?GUt:r.dot?WUt:YUt,a=new Set(r.nocase?["i"]:[]),n=e.map(p=>{let h=p.map(E=>{if(E instanceof RegExp)for(let C of E.flags.split(""))a.add(C);return typeof E=="string"?XUt(E):E===pr.GLOBSTAR?pr.GLOBSTAR:E._src});return h.forEach((E,C)=>{let S=h[C+1],P=h[C-1];E!==pr.GLOBSTAR||P===pr.GLOBSTAR||(P===void 0?S!==void 0&&S!==pr.GLOBSTAR?h[C+1]="(?:\\/|"+s+"\\/)?"+S:h[C]=s:S===void 0?h[C-1]=P+"(?:\\/|"+s+")?":S!==pr.GLOBSTAR&&(h[C-1]=P+"(?:\\/|\\/"+s+"\\/)"+S,h[C+1]=pr.GLOBSTAR))}),h.filter(E=>E!==pr.GLOBSTAR).join("/")}).join("|"),[c,f]=e.length>1?["(?:",")"]:["",""];n="^"+c+n+f+"$",this.negate&&(n="^(?!"+n+").+$");try{this.regexp=new RegExp(n,[...a].join(""))}catch{this.regexp=!1}return this.regexp}slashSplit(e){return this.preserveMultipleSlashes?e.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(e)?["",...e.split(/\/+/)]:e.split(/\/+/)}match(e,r=this.partial){if(this.debug("match",e,this.pattern),this.comment)return!1;if(this.empty)return e==="";if(e==="/"&&r)return!0;let s=this.options;this.isWindows&&(e=e.split("\\").join("/"));let a=this.slashSplit(e);this.debug(this.pattern,"split",a);let n=this.set;this.debug(this.pattern,"set",n);let c=a[a.length-1];if(!c)for(let f=a.length-2;!c&&f>=0;f--)c=a[f];for(let f=0;f{"use strict";var TFe=iu&&iu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iu,"__esModule",{value:!0});iu.SuccinctRoles=iu.DelegatedRole=iu.Role=iu.TOP_LEVEL_ROLE_NAMES=void 0;var RFe=TFe(Ie("crypto")),r4t=QFe(),YO=TFe(Ie("util")),VO=kA(),ly=Af();iu.TOP_LEVEL_ROLE_NAMES=["root","targets","snapshot","timestamp"];var Vb=class t{constructor(e){let{keyIDs:r,threshold:s,unrecognizedFields:a}=e;if(n4t(r))throw new VO.ValueError("duplicate key IDs found");if(s<1)throw new VO.ValueError("threshold must be at least 1");this.keyIDs=r,this.threshold=s,this.unrecognizedFields=a||{}}equals(e){return e instanceof t?this.threshold===e.threshold&&YO.default.isDeepStrictEqual(this.keyIDs,e.keyIDs)&&YO.default.isDeepStrictEqual(this.unrecognizedFields,e.unrecognizedFields):!1}toJSON(){return{keyids:this.keyIDs,threshold:this.threshold,...this.unrecognizedFields}}static fromJSON(e){let{keyids:r,threshold:s,...a}=e;if(!ly.guard.isStringArray(r))throw new TypeError("keyids must be an array");if(typeof s!="number")throw new TypeError("threshold must be a number");return new t({keyIDs:r,threshold:s,unrecognizedFields:a})}};iu.Role=Vb;function n4t(t){return new Set(t).size!==t.length}var NK=class t extends Vb{constructor(e){super(e);let{name:r,terminating:s,paths:a,pathHashPrefixes:n}=e;if(this.name=r,this.terminating=s,e.paths&&e.pathHashPrefixes)throw new VO.ValueError("paths and pathHashPrefixes are mutually exclusive");this.paths=a,this.pathHashPrefixes=n}equals(e){return e instanceof t?super.equals(e)&&this.name===e.name&&this.terminating===e.terminating&&YO.default.isDeepStrictEqual(this.paths,e.paths)&&YO.default.isDeepStrictEqual(this.pathHashPrefixes,e.pathHashPrefixes):!1}isDelegatedPath(e){if(this.paths)return this.paths.some(r=>s4t(e,r));if(this.pathHashPrefixes){let s=RFe.default.createHash("sha256").update(e).digest("hex");return this.pathHashPrefixes.some(a=>s.startsWith(a))}return!1}toJSON(){let e={...super.toJSON(),name:this.name,terminating:this.terminating};return this.paths&&(e.paths=this.paths),this.pathHashPrefixes&&(e.path_hash_prefixes=this.pathHashPrefixes),e}static fromJSON(e){let{keyids:r,threshold:s,name:a,terminating:n,paths:c,path_hash_prefixes:f,...p}=e;if(!ly.guard.isStringArray(r))throw new TypeError("keyids must be an array of strings");if(typeof s!="number")throw new TypeError("threshold must be a number");if(typeof a!="string")throw new TypeError("name must be a string");if(typeof n!="boolean")throw new TypeError("terminating must be a boolean");if(ly.guard.isDefined(c)&&!ly.guard.isStringArray(c))throw new TypeError("paths must be an array of strings");if(ly.guard.isDefined(f)&&!ly.guard.isStringArray(f))throw new TypeError("path_hash_prefixes must be an array of strings");return new t({keyIDs:r,threshold:s,name:a,terminating:n,paths:c,pathHashPrefixes:f,unrecognizedFields:p})}};iu.DelegatedRole=NK;var i4t=(t,e)=>t.map((r,s)=>[r,e[s]]);function s4t(t,e){let r=t.split("/"),s=e.split("/");return s.length!=r.length?!1:i4t(r,s).every(([a,n])=>(0,r4t.minimatch)(a,n))}var OK=class t extends Vb{constructor(e){super(e);let{bitLength:r,namePrefix:s}=e;if(r<=0||r>32)throw new VO.ValueError("bitLength must be between 1 and 32");this.bitLength=r,this.namePrefix=s,this.numberOfBins=Math.pow(2,r),this.suffixLen=(this.numberOfBins-1).toString(16).length}equals(e){return e instanceof t?super.equals(e)&&this.bitLength===e.bitLength&&this.namePrefix===e.namePrefix:!1}getRoleForTarget(e){let a=RFe.default.createHash("sha256").update(e).digest().subarray(0,4),n=32-this.bitLength,f=(a.readUInt32BE()>>>n).toString(16).padStart(this.suffixLen,"0");return`${this.namePrefix}-${f}`}*getRoles(){for(let e=0;e{"use strict";var o4t=o1&&o1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(o1,"__esModule",{value:!0});o1.Root=void 0;var FFe=o4t(Ie("util")),MK=oy(),NFe=kA(),a4t=OO(),KO=LK(),JO=Af(),_K=class t extends MK.Signed{constructor(e){if(super(e),this.type=MK.MetadataKind.Root,this.keys=e.keys||{},this.consistentSnapshot=e.consistentSnapshot??!0,!e.roles)this.roles=KO.TOP_LEVEL_ROLE_NAMES.reduce((r,s)=>({...r,[s]:new KO.Role({keyIDs:[],threshold:1})}),{});else{let r=new Set(Object.keys(e.roles));if(!KO.TOP_LEVEL_ROLE_NAMES.every(s=>r.has(s)))throw new NFe.ValueError("missing top-level role");this.roles=e.roles}}addKey(e,r){if(!this.roles[r])throw new NFe.ValueError(`role ${r} does not exist`);this.roles[r].keyIDs.includes(e.keyID)||this.roles[r].keyIDs.push(e.keyID),this.keys[e.keyID]=e}equals(e){return e instanceof t?super.equals(e)&&this.consistentSnapshot===e.consistentSnapshot&&FFe.default.isDeepStrictEqual(this.keys,e.keys)&&FFe.default.isDeepStrictEqual(this.roles,e.roles):!1}toJSON(){return{_type:this.type,spec_version:this.specVersion,version:this.version,expires:this.expires,keys:l4t(this.keys),roles:c4t(this.roles),consistent_snapshot:this.consistentSnapshot,...this.unrecognizedFields}}static fromJSON(e){let{unrecognizedFields:r,...s}=MK.Signed.commonFieldsFromJSON(e),{keys:a,roles:n,consistent_snapshot:c,...f}=r;if(typeof c!="boolean")throw new TypeError("consistent_snapshot must be a boolean");return new t({...s,keys:u4t(a),roles:f4t(n),consistentSnapshot:c,unrecognizedFields:f})}};o1.Root=_K;function l4t(t){return Object.entries(t).reduce((e,[r,s])=>({...e,[r]:s.toJSON()}),{})}function c4t(t){return Object.entries(t).reduce((e,[r,s])=>({...e,[r]:s.toJSON()}),{})}function u4t(t){let e;if(JO.guard.isDefined(t)){if(!JO.guard.isObjectRecord(t))throw new TypeError("keys must be an object");e=Object.entries(t).reduce((r,[s,a])=>({...r,[s]:a4t.Key.fromJSON(s,a)}),{})}return e}function f4t(t){let e;if(JO.guard.isDefined(t)){if(!JO.guard.isObjectRecord(t))throw new TypeError("roles must be an object");e=Object.entries(t).reduce((r,[s,a])=>({...r,[s]:KO.Role.fromJSON(a)}),{})}return e}});var jK=L(zO=>{"use strict";Object.defineProperty(zO,"__esModule",{value:!0});zO.Signature=void 0;var HK=class t{constructor(e){let{keyID:r,sig:s}=e;this.keyID=r,this.sig=s}toJSON(){return{keyid:this.keyID,sig:this.sig}}static fromJSON(e){let{keyid:r,sig:s}=e;if(typeof r!="string")throw new TypeError("keyid must be a string");if(typeof s!="string")throw new TypeError("sig must be a string");return new t({keyID:r,sig:s})}};zO.Signature=HK});var WK=L(a1=>{"use strict";var A4t=a1&&a1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(a1,"__esModule",{value:!0});a1.Snapshot=void 0;var p4t=A4t(Ie("util")),qK=oy(),LFe=Hb(),OFe=Af(),GK=class t extends qK.Signed{constructor(e){super(e),this.type=qK.MetadataKind.Snapshot,this.meta=e.meta||{"targets.json":new LFe.MetaFile({version:1})}}equals(e){return e instanceof t?super.equals(e)&&p4t.default.isDeepStrictEqual(this.meta,e.meta):!1}toJSON(){return{_type:this.type,meta:h4t(this.meta),spec_version:this.specVersion,version:this.version,expires:this.expires,...this.unrecognizedFields}}static fromJSON(e){let{unrecognizedFields:r,...s}=qK.Signed.commonFieldsFromJSON(e),{meta:a,...n}=r;return new t({...s,meta:g4t(a),unrecognizedFields:n})}};a1.Snapshot=GK;function h4t(t){return Object.entries(t).reduce((e,[r,s])=>({...e,[r]:s.toJSON()}),{})}function g4t(t){let e;if(OFe.guard.isDefined(t))if(OFe.guard.isObjectRecord(t))e=Object.entries(t).reduce((r,[s,a])=>({...r,[s]:LFe.MetaFile.fromJSON(a)}),{});else throw new TypeError("meta field is malformed");return e}});var MFe=L(l1=>{"use strict";var d4t=l1&&l1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(l1,"__esModule",{value:!0});l1.Delegations=void 0;var ZO=d4t(Ie("util")),m4t=kA(),y4t=OO(),YK=LK(),XO=Af(),VK=class t{constructor(e){if(this.keys=e.keys,this.unrecognizedFields=e.unrecognizedFields||{},e.roles&&Object.keys(e.roles).some(r=>YK.TOP_LEVEL_ROLE_NAMES.includes(r)))throw new m4t.ValueError("Delegated role name conflicts with top-level role name");this.succinctRoles=e.succinctRoles,this.roles=e.roles}equals(e){return e instanceof t?ZO.default.isDeepStrictEqual(this.keys,e.keys)&&ZO.default.isDeepStrictEqual(this.roles,e.roles)&&ZO.default.isDeepStrictEqual(this.unrecognizedFields,e.unrecognizedFields)&&ZO.default.isDeepStrictEqual(this.succinctRoles,e.succinctRoles):!1}*rolesForTarget(e){if(this.roles)for(let r of Object.values(this.roles))r.isDelegatedPath(e)&&(yield{role:r.name,terminating:r.terminating});else this.succinctRoles&&(yield{role:this.succinctRoles.getRoleForTarget(e),terminating:!0})}toJSON(){let e={keys:E4t(this.keys),...this.unrecognizedFields};return this.roles?e.roles=I4t(this.roles):this.succinctRoles&&(e.succinct_roles=this.succinctRoles.toJSON()),e}static fromJSON(e){let{keys:r,roles:s,succinct_roles:a,...n}=e,c;return XO.guard.isObject(a)&&(c=YK.SuccinctRoles.fromJSON(a)),new t({keys:C4t(r),roles:w4t(s),unrecognizedFields:n,succinctRoles:c})}};l1.Delegations=VK;function E4t(t){return Object.entries(t).reduce((e,[r,s])=>({...e,[r]:s.toJSON()}),{})}function I4t(t){return Object.values(t).map(e=>e.toJSON())}function C4t(t){if(!XO.guard.isObjectRecord(t))throw new TypeError("keys is malformed");return Object.entries(t).reduce((e,[r,s])=>({...e,[r]:y4t.Key.fromJSON(r,s)}),{})}function w4t(t){let e;if(XO.guard.isDefined(t)){if(!XO.guard.isObjectArray(t))throw new TypeError("roles is malformed");e=t.reduce((r,s)=>{let a=YK.DelegatedRole.fromJSON(s);return{...r,[a.name]:a}},{})}return e}});var zK=L(c1=>{"use strict";var B4t=c1&&c1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(c1,"__esModule",{value:!0});c1.Targets=void 0;var _Fe=B4t(Ie("util")),KK=oy(),v4t=MFe(),S4t=Hb(),$O=Af(),JK=class t extends KK.Signed{constructor(e){super(e),this.type=KK.MetadataKind.Targets,this.targets=e.targets||{},this.delegations=e.delegations}addTarget(e){this.targets[e.path]=e}equals(e){return e instanceof t?super.equals(e)&&_Fe.default.isDeepStrictEqual(this.targets,e.targets)&&_Fe.default.isDeepStrictEqual(this.delegations,e.delegations):!1}toJSON(){let e={_type:this.type,spec_version:this.specVersion,version:this.version,expires:this.expires,targets:D4t(this.targets),...this.unrecognizedFields};return this.delegations&&(e.delegations=this.delegations.toJSON()),e}static fromJSON(e){let{unrecognizedFields:r,...s}=KK.Signed.commonFieldsFromJSON(e),{targets:a,delegations:n,...c}=r;return new t({...s,targets:b4t(a),delegations:P4t(n),unrecognizedFields:c})}};c1.Targets=JK;function D4t(t){return Object.entries(t).reduce((e,[r,s])=>({...e,[r]:s.toJSON()}),{})}function b4t(t){let e;if($O.guard.isDefined(t))if($O.guard.isObjectRecord(t))e=Object.entries(t).reduce((r,[s,a])=>({...r,[s]:S4t.TargetFile.fromJSON(s,a)}),{});else throw new TypeError("targets must be an object");return e}function P4t(t){let e;if($O.guard.isDefined(t))if($O.guard.isObject(t))e=v4t.Delegations.fromJSON(t);else throw new TypeError("delegations must be an object");return e}});var eJ=L(eL=>{"use strict";Object.defineProperty(eL,"__esModule",{value:!0});eL.Timestamp=void 0;var ZK=oy(),UFe=Hb(),XK=Af(),$K=class t extends ZK.Signed{constructor(e){super(e),this.type=ZK.MetadataKind.Timestamp,this.snapshotMeta=e.snapshotMeta||new UFe.MetaFile({version:1})}equals(e){return e instanceof t?super.equals(e)&&this.snapshotMeta.equals(e.snapshotMeta):!1}toJSON(){return{_type:this.type,spec_version:this.specVersion,version:this.version,expires:this.expires,meta:{"snapshot.json":this.snapshotMeta.toJSON()},...this.unrecognizedFields}}static fromJSON(e){let{unrecognizedFields:r,...s}=ZK.Signed.commonFieldsFromJSON(e),{meta:a,...n}=r;return new t({...s,snapshotMeta:x4t(a),unrecognizedFields:n})}};eL.Timestamp=$K;function x4t(t){let e;if(XK.guard.isDefined(t)){let r=t["snapshot.json"];if(!XK.guard.isDefined(r)||!XK.guard.isObject(r))throw new TypeError("missing snapshot.json in meta");e=UFe.MetaFile.fromJSON(r)}return e}});var jFe=L(f1=>{"use strict";var k4t=f1&&f1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(f1,"__esModule",{value:!0});f1.Metadata=void 0;var Q4t=EK(),HFe=k4t(Ie("util")),u1=oy(),Kb=kA(),T4t=UK(),R4t=jK(),F4t=WK(),N4t=zK(),O4t=eJ(),tJ=Af(),rJ=class t{constructor(e,r,s){this.signed=e,this.signatures=r||{},this.unrecognizedFields=s||{}}sign(e,r=!0){let s=Buffer.from((0,Q4t.canonicalize)(this.signed.toJSON())),a=e(s);r||(this.signatures={}),this.signatures[a.keyID]=a}verifyDelegate(e,r){let s,a={};switch(this.signed.type){case u1.MetadataKind.Root:a=this.signed.keys,s=this.signed.roles[e];break;case u1.MetadataKind.Targets:if(!this.signed.delegations)throw new Kb.ValueError(`No delegations found for ${e}`);a=this.signed.delegations.keys,this.signed.delegations.roles?s=this.signed.delegations.roles[e]:this.signed.delegations.succinctRoles&&this.signed.delegations.succinctRoles.isDelegatedRole(e)&&(s=this.signed.delegations.succinctRoles);break;default:throw new TypeError("invalid metadata type")}if(!s)throw new Kb.ValueError(`no delegation found for ${e}`);let n=new Set;if(s.keyIDs.forEach(c=>{let f=a[c];if(f)try{f.verifySignature(r),n.add(f.keyID)}catch{}}),n.sizer.toJSON()),signed:this.signed.toJSON(),...this.unrecognizedFields}}static fromJSON(e,r){let{signed:s,signatures:a,...n}=r;if(!tJ.guard.isDefined(s)||!tJ.guard.isObject(s))throw new TypeError("signed is not defined");if(e!==s._type)throw new Kb.ValueError(`expected '${e}', got ${s._type}`);if(!tJ.guard.isObjectArray(a))throw new TypeError("signatures is not an array");let c;switch(e){case u1.MetadataKind.Root:c=T4t.Root.fromJSON(s);break;case u1.MetadataKind.Timestamp:c=O4t.Timestamp.fromJSON(s);break;case u1.MetadataKind.Snapshot:c=F4t.Snapshot.fromJSON(s);break;case u1.MetadataKind.Targets:c=N4t.Targets.fromJSON(s);break;default:throw new TypeError("invalid metadata type")}let f={};return a.forEach(p=>{let h=R4t.Signature.fromJSON(p);if(f[h.keyID])throw new Kb.ValueError(`multiple signatures found for keyid: ${h.keyID}`);f[h.keyID]=h}),new t(c,f,n)}};f1.Metadata=rJ});var tL=L(Ni=>{"use strict";Object.defineProperty(Ni,"__esModule",{value:!0});Ni.Timestamp=Ni.Targets=Ni.Snapshot=Ni.Signature=Ni.Root=Ni.Metadata=Ni.Key=Ni.TargetFile=Ni.MetaFile=Ni.ValueError=Ni.MetadataKind=void 0;var L4t=oy();Object.defineProperty(Ni,"MetadataKind",{enumerable:!0,get:function(){return L4t.MetadataKind}});var M4t=kA();Object.defineProperty(Ni,"ValueError",{enumerable:!0,get:function(){return M4t.ValueError}});var qFe=Hb();Object.defineProperty(Ni,"MetaFile",{enumerable:!0,get:function(){return qFe.MetaFile}});Object.defineProperty(Ni,"TargetFile",{enumerable:!0,get:function(){return qFe.TargetFile}});var _4t=OO();Object.defineProperty(Ni,"Key",{enumerable:!0,get:function(){return _4t.Key}});var U4t=jFe();Object.defineProperty(Ni,"Metadata",{enumerable:!0,get:function(){return U4t.Metadata}});var H4t=UK();Object.defineProperty(Ni,"Root",{enumerable:!0,get:function(){return H4t.Root}});var j4t=jK();Object.defineProperty(Ni,"Signature",{enumerable:!0,get:function(){return j4t.Signature}});var q4t=WK();Object.defineProperty(Ni,"Snapshot",{enumerable:!0,get:function(){return q4t.Snapshot}});var G4t=zK();Object.defineProperty(Ni,"Targets",{enumerable:!0,get:function(){return G4t.Targets}});var W4t=eJ();Object.defineProperty(Ni,"Timestamp",{enumerable:!0,get:function(){return W4t.Timestamp}})});var WFe=L((WCr,GFe)=>{var A1=1e3,p1=A1*60,h1=p1*60,cy=h1*24,Y4t=cy*7,V4t=cy*365.25;GFe.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return K4t(t);if(r==="number"&&isFinite(t))return e.long?z4t(t):J4t(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function K4t(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),s=(e[2]||"ms").toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return r*V4t;case"weeks":case"week":case"w":return r*Y4t;case"days":case"day":case"d":return r*cy;case"hours":case"hour":case"hrs":case"hr":case"h":return r*h1;case"minutes":case"minute":case"mins":case"min":case"m":return r*p1;case"seconds":case"second":case"secs":case"sec":case"s":return r*A1;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function J4t(t){var e=Math.abs(t);return e>=cy?Math.round(t/cy)+"d":e>=h1?Math.round(t/h1)+"h":e>=p1?Math.round(t/p1)+"m":e>=A1?Math.round(t/A1)+"s":t+"ms"}function z4t(t){var e=Math.abs(t);return e>=cy?rL(t,e,cy,"day"):e>=h1?rL(t,e,h1,"hour"):e>=p1?rL(t,e,p1,"minute"):e>=A1?rL(t,e,A1,"second"):t+" ms"}function rL(t,e,r,s){var a=e>=r*1.5;return Math.round(t/r)+" "+s+(a?"s":"")}});var nJ=L((YCr,YFe)=>{function Z4t(t){r.debug=r,r.default=r,r.coerce=p,r.disable=c,r.enable=a,r.enabled=f,r.humanize=WFe(),r.destroy=h,Object.keys(t).forEach(E=>{r[E]=t[E]}),r.names=[],r.skips=[],r.formatters={};function e(E){let C=0;for(let S=0;S{if(ce==="%%")return"%";ie++;let pe=r.formatters[me];if(typeof pe=="function"){let Be=N[ie];ce=pe.call(U,Be),N.splice(ie,1),ie--}return ce}),r.formatArgs.call(U,N),(U.log||r.log).apply(U,N)}return R.namespace=E,R.useColors=r.useColors(),R.color=r.selectColor(E),R.extend=s,R.destroy=r.destroy,Object.defineProperty(R,"enabled",{enumerable:!0,configurable:!1,get:()=>S!==null?S:(P!==r.namespaces&&(P=r.namespaces,I=r.enabled(E)),I),set:N=>{S=N}}),typeof r.init=="function"&&r.init(R),R}function s(E,C){let S=r(this.namespace+(typeof C>"u"?":":C)+E);return S.log=this.log,S}function a(E){r.save(E),r.namespaces=E,r.names=[],r.skips=[];let C=(typeof E=="string"?E:"").trim().replace(" ",",").split(",").filter(Boolean);for(let S of C)S[0]==="-"?r.skips.push(S.slice(1)):r.names.push(S)}function n(E,C){let S=0,P=0,I=-1,R=0;for(;S"-"+C)].join(",");return r.enable(""),E}function f(E){for(let C of r.skips)if(n(E,C))return!1;for(let C of r.names)if(n(E,C))return!0;return!1}function p(E){return E instanceof Error?E.stack||E.message:E}function h(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.enable(r.load()),r}YFe.exports=Z4t});var VFe=L((oc,nL)=>{oc.formatArgs=$4t;oc.save=e3t;oc.load=t3t;oc.useColors=X4t;oc.storage=r3t();oc.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();oc.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function X4t(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function $4t(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+nL.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,s=0;t[0].replace(/%[a-zA-Z%]/g,a=>{a!=="%%"&&(r++,a==="%c"&&(s=r))}),t.splice(s,0,e)}oc.log=console.debug||console.log||(()=>{});function e3t(t){try{t?oc.storage.setItem("debug",t):oc.storage.removeItem("debug")}catch{}}function t3t(){let t;try{t=oc.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}function r3t(){try{return localStorage}catch{}}nL.exports=nJ()(oc);var{formatters:n3t}=nL.exports;n3t.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var JFe=L((eo,sL)=>{var i3t=Ie("tty"),iL=Ie("util");eo.init=f3t;eo.log=l3t;eo.formatArgs=o3t;eo.save=c3t;eo.load=u3t;eo.useColors=s3t;eo.destroy=iL.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");eo.colors=[6,2,3,4,5,1];try{let t=Ie("supports-color");t&&(t.stderr||t).level>=2&&(eo.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}eo.inspectOpts=Object.keys(process.env).filter(t=>/^debug_/i.test(t)).reduce((t,e)=>{let r=e.substring(6).toLowerCase().replace(/_([a-z])/g,(a,n)=>n.toUpperCase()),s=process.env[e];return/^(yes|on|true|enabled)$/i.test(s)?s=!0:/^(no|off|false|disabled)$/i.test(s)?s=!1:s==="null"?s=null:s=Number(s),t[r]=s,t},{});function s3t(){return"colors"in eo.inspectOpts?!!eo.inspectOpts.colors:i3t.isatty(process.stderr.fd)}function o3t(t){let{namespace:e,useColors:r}=this;if(r){let s=this.color,a="\x1B[3"+(s<8?s:"8;5;"+s),n=` ${a};1m${e} \x1B[0m`;t[0]=n+t[0].split(` -`).join(` -`+n),t.push(a+"m+"+sL.exports.humanize(this.diff)+"\x1B[0m")}else t[0]=a3t()+e+" "+t[0]}function a3t(){return eo.inspectOpts.hideDate?"":new Date().toISOString()+" "}function l3t(...t){return process.stderr.write(iL.formatWithOptions(eo.inspectOpts,...t)+` -`)}function c3t(t){t?process.env.DEBUG=t:delete process.env.DEBUG}function u3t(){return process.env.DEBUG}function f3t(t){t.inspectOpts={};let e=Object.keys(eo.inspectOpts);for(let r=0;re.trim()).join(" ")};KFe.O=function(t){return this.inspectOpts.colors=this.useColors,iL.inspect(t,this.inspectOpts)}});var sJ=L((VCr,iJ)=>{typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?iJ.exports=VFe():iJ.exports=JFe()});var aL=L(zi=>{"use strict";Object.defineProperty(zi,"__esModule",{value:!0});zi.DownloadHTTPError=zi.DownloadLengthMismatchError=zi.DownloadError=zi.ExpiredMetadataError=zi.EqualVersionError=zi.BadVersionError=zi.RepositoryError=zi.PersistError=zi.RuntimeError=zi.ValueError=void 0;var oJ=class extends Error{};zi.ValueError=oJ;var aJ=class extends Error{};zi.RuntimeError=aJ;var lJ=class extends Error{};zi.PersistError=lJ;var Jb=class extends Error{};zi.RepositoryError=Jb;var oL=class extends Jb{};zi.BadVersionError=oL;var cJ=class extends oL{};zi.EqualVersionError=cJ;var uJ=class extends Jb{};zi.ExpiredMetadataError=uJ;var zb=class extends Error{};zi.DownloadError=zb;var fJ=class extends zb{};zi.DownloadLengthMismatchError=fJ;var AJ=class extends zb{constructor(e,r){super(e),this.statusCode=r}};zi.DownloadHTTPError=AJ});var ZFe=L(g1=>{"use strict";var hJ=g1&&g1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(g1,"__esModule",{value:!0});g1.withTempFile=void 0;var pJ=hJ(Ie("fs/promises")),A3t=hJ(Ie("os")),zFe=hJ(Ie("path")),p3t=async t=>h3t(async e=>t(zFe.default.join(e,"tempfile")));g1.withTempFile=p3t;var h3t=async t=>{let e=await pJ.default.realpath(A3t.default.tmpdir()),r=await pJ.default.mkdtemp(e+zFe.default.sep);try{return await t(r)}finally{await pJ.default.rm(r,{force:!0,recursive:!0,maxRetries:3})}}});var dJ=L(xg=>{"use strict";var cL=xg&&xg.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xg,"__esModule",{value:!0});xg.DefaultFetcher=xg.BaseFetcher=void 0;var g3t=cL(sJ()),XFe=cL(Ie("fs")),d3t=cL(wO()),m3t=cL(Ie("util")),$Fe=aL(),y3t=ZFe(),E3t=(0,g3t.default)("tuf:fetch"),lL=class{async downloadFile(e,r,s){return(0,y3t.withTempFile)(async a=>{let n=await this.fetch(e),c=0,f=XFe.default.createWriteStream(a);try{for await(let p of n){let h=Buffer.from(p);if(c+=h.length,c>r)throw new $Fe.DownloadLengthMismatchError("Max length reached");await I3t(f,h)}}finally{await m3t.default.promisify(f.close).bind(f)()}return s(a)})}async downloadBytes(e,r){return this.downloadFile(e,r,async s=>{let a=XFe.default.createReadStream(s),n=[];for await(let c of a)n.push(c);return Buffer.concat(n)})}};xg.BaseFetcher=lL;var gJ=class extends lL{constructor(e={}){super(),this.timeout=e.timeout,this.retry=e.retry}async fetch(e){E3t("GET %s",e);let r=await(0,d3t.default)(e,{timeout:this.timeout,retry:this.retry});if(!r.ok||!r?.body)throw new $Fe.DownloadHTTPError("Failed to download",r.status);return r.body}};xg.DefaultFetcher=gJ;var I3t=async(t,e)=>new Promise((r,s)=>{t.write(e,a=>{a&&s(a),r(!0)})})});var eNe=L(uL=>{"use strict";Object.defineProperty(uL,"__esModule",{value:!0});uL.defaultConfig=void 0;uL.defaultConfig={maxRootRotations:256,maxDelegations:32,rootMaxLength:512e3,timestampMaxLength:16384,snapshotMaxLength:2e6,targetsMaxLength:5e6,prefixTargetsWithHash:!0,fetchTimeout:1e5,fetchRetries:void 0,fetchRetry:2}});var tNe=L(fL=>{"use strict";Object.defineProperty(fL,"__esModule",{value:!0});fL.TrustedMetadataStore=void 0;var Cs=tL(),Hi=aL(),mJ=class{constructor(e){this.trustedSet={},this.referenceTime=new Date,this.loadTrustedRoot(e)}get root(){if(!this.trustedSet.root)throw new ReferenceError("No trusted root metadata");return this.trustedSet.root}get timestamp(){return this.trustedSet.timestamp}get snapshot(){return this.trustedSet.snapshot}get targets(){return this.trustedSet.targets}getRole(e){return this.trustedSet[e]}updateRoot(e){let r=JSON.parse(e.toString("utf8")),s=Cs.Metadata.fromJSON(Cs.MetadataKind.Root,r);if(s.signed.type!=Cs.MetadataKind.Root)throw new Hi.RepositoryError(`Expected 'root', got ${s.signed.type}`);if(this.root.verifyDelegate(Cs.MetadataKind.Root,s),s.signed.version!=this.root.signed.version+1)throw new Hi.BadVersionError(`Expected version ${this.root.signed.version+1}, got ${s.signed.version}`);return s.verifyDelegate(Cs.MetadataKind.Root,s),this.trustedSet.root=s,s}updateTimestamp(e){if(this.snapshot)throw new Hi.RuntimeError("Cannot update timestamp after snapshot");if(this.root.signed.isExpired(this.referenceTime))throw new Hi.ExpiredMetadataError("Final root.json is expired");let r=JSON.parse(e.toString("utf8")),s=Cs.Metadata.fromJSON(Cs.MetadataKind.Timestamp,r);if(s.signed.type!=Cs.MetadataKind.Timestamp)throw new Hi.RepositoryError(`Expected 'timestamp', got ${s.signed.type}`);if(this.root.verifyDelegate(Cs.MetadataKind.Timestamp,s),this.timestamp){if(s.signed.version{let p=n.signed.meta[c];if(!p)throw new Hi.RepositoryError(`Missing file ${c} in new snapshot`);if(p.version{"use strict";Object.defineProperty(yJ,"__esModule",{value:!0});yJ.join=w3t;var C3t=Ie("url");function w3t(t,e){return new C3t.URL(B3t(t)+v3t(e)).toString()}function B3t(t){return t.endsWith("/")?t:t+"/"}function v3t(t){return t.startsWith("/")?t.slice(1):t}});var nNe=L(su=>{"use strict";var S3t=su&&su.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),D3t=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),CJ=su&&su.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.prototype.hasOwnProperty.call(t,r)&&S3t(e,t,r);return D3t(e,t),e},b3t=su&&su.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(su,"__esModule",{value:!0});su.Updater=void 0;var QA=tL(),P3t=b3t(sJ()),d1=CJ(Ie("fs")),AL=CJ(Ie("path")),x3t=eNe(),uy=aL(),k3t=dJ(),Q3t=tNe(),Zb=CJ(rNe()),EJ=(0,P3t.default)("tuf:cache"),IJ=class{constructor(e){let{metadataDir:r,metadataBaseUrl:s,targetDir:a,targetBaseUrl:n,fetcher:c,config:f}=e;this.dir=r,this.metadataBaseUrl=s,this.targetDir=a,this.targetBaseUrl=n,this.forceCache=e.forceCache??!1;let p=this.loadLocalMetadata(QA.MetadataKind.Root);this.trustedSet=new Q3t.TrustedMetadataStore(p),this.config={...x3t.defaultConfig,...f},this.fetcher=c||new k3t.DefaultFetcher({timeout:this.config.fetchTimeout,retry:this.config.fetchRetries??this.config.fetchRetry})}async refresh(){if(this.forceCache)try{await this.loadTimestamp({checkRemote:!1})}catch{await this.loadRoot(),await this.loadTimestamp()}else await this.loadRoot(),await this.loadTimestamp();await this.loadSnapshot(),await this.loadTargets(QA.MetadataKind.Targets,QA.MetadataKind.Root)}async getTargetInfo(e){return this.trustedSet.targets||await this.refresh(),this.preorderDepthFirstWalk(e)}async downloadTarget(e,r,s){let a=r||this.generateTargetPath(e);if(!s){if(!this.targetBaseUrl)throw new uy.ValueError("Target base URL not set");s=this.targetBaseUrl}let n=e.path;if(this.trustedSet.root.signed.consistentSnapshot&&this.config.prefixTargetsWithHash){let p=Object.values(e.hashes),{dir:h,base:E}=AL.parse(n),C=`${p[0]}.${E}`;n=h?`${h}/${C}`:C}let f=Zb.join(s,n);return await this.fetcher.downloadFile(f,e.length,async p=>{await e.verify(d1.createReadStream(p)),EJ("WRITE %s",a),d1.copyFileSync(p,a)}),a}async findCachedTarget(e,r){r||(r=this.generateTargetPath(e));try{if(d1.existsSync(r))return await e.verify(d1.createReadStream(r)),r}catch{return}}loadLocalMetadata(e){let r=AL.join(this.dir,`${e}.json`);return EJ("READ %s",r),d1.readFileSync(r)}async loadRoot(){let r=this.trustedSet.root.signed.version+1,s=r+this.config.maxRootRotations;for(let a=r;a0;){let{roleName:a,parentRoleName:n}=r.pop();if(s.has(a))continue;let c=(await this.loadTargets(a,n))?.signed;if(!c)continue;let f=c.targets?.[e];if(f)return f;if(s.add(a),c.delegations){let p=[],h=c.delegations.rolesForTarget(e);for(let{role:E,terminating:C}of h)if(p.push({roleName:E,parentRoleName:a}),C){r.splice(0);break}p.reverse(),r.push(...p)}}}generateTargetPath(e){if(!this.targetDir)throw new uy.ValueError("Target directory not set");let r=encodeURIComponent(e.path);return AL.join(this.targetDir,r)}persistMetadata(e,r){let s=encodeURIComponent(e);try{let a=AL.join(this.dir,`${s}.json`);EJ("WRITE %s",a),d1.writeFileSync(a,r.toString("utf8"))}catch(a){throw new uy.PersistError(`Failed to persist metadata ${s} error: ${a}`)}}};su.Updater=IJ});var iNe=L(kg=>{"use strict";Object.defineProperty(kg,"__esModule",{value:!0});kg.Updater=kg.BaseFetcher=kg.TargetFile=void 0;var T3t=tL();Object.defineProperty(kg,"TargetFile",{enumerable:!0,get:function(){return T3t.TargetFile}});var R3t=dJ();Object.defineProperty(kg,"BaseFetcher",{enumerable:!0,get:function(){return R3t.BaseFetcher}});var F3t=nNe();Object.defineProperty(kg,"Updater",{enumerable:!0,get:function(){return F3t.Updater}})});var BJ=L(pL=>{"use strict";Object.defineProperty(pL,"__esModule",{value:!0});pL.TUFError=void 0;var wJ=class extends Error{constructor({code:e,message:r,cause:s}){super(r),this.code=e,this.cause=s,this.name=this.constructor.name}};pL.TUFError=wJ});var sNe=L(Xb=>{"use strict";var N3t=Xb&&Xb.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Xb,"__esModule",{value:!0});Xb.readTarget=L3t;var O3t=N3t(Ie("fs")),hL=BJ();async function L3t(t,e){let r=await M3t(t,e);return new Promise((s,a)=>{O3t.default.readFile(r,"utf-8",(n,c)=>{n?a(new hL.TUFError({code:"TUF_READ_TARGET_ERROR",message:`error reading target ${r}`,cause:n})):s(c)})})}async function M3t(t,e){let r;try{r=await t.getTargetInfo(e)}catch(a){throw new hL.TUFError({code:"TUF_REFRESH_METADATA_ERROR",message:"error refreshing TUF metadata",cause:a})}if(!r)throw new hL.TUFError({code:"TUF_FIND_TARGET_ERROR",message:`target ${e} not found`});let s=await t.findCachedTarget(r);if(!s)try{s=await t.downloadTarget(r)}catch(a){throw new hL.TUFError({code:"TUF_DOWNLOAD_TARGET_ERROR",message:`error downloading target ${s}`,cause:a})}return s}});var oNe=L((iwr,_3t)=>{_3t.exports={"https://tuf-repo-cdn.sigstore.dev":{"root.json":"ewogInNpZ25hdHVyZXMiOiBbCiAgewogICAia2V5aWQiOiAiNmYyNjAwODlkNTkyM2RhZjIwMTY2Y2E2NTdjNTQzYWY2MTgzNDZhYjk3MTg4NGE5OTk2MmIwMTk4OGJiZTBjMyIsCiAgICJzaWciOiAiMzA0NjAyMjEwMDhhYjFmNmYxN2Q0ZjllNmQ3ZGNmMWM4ODkxMmI2YjUzY2MxMDM4ODY0NGFlMWYwOWJjMzdhMDgyY2QwNjAwM2UwMjIxMDBlMTQ1ZWY0YzdiNzgyZDRlODEwN2I1MzQzN2U2NjlkMDQ3Njg5MmNlOTk5OTAzYWUzM2QxNDQ0ODM2Njk5NmU3IgogIH0sCiAgewogICAia2V5aWQiOiAiZTcxYTU0ZDU0MzgzNWJhODZhZGFkOTQ2MDM3OWM3NjQxZmI4NzI2ZDE2NGVhNzY2ODAxYTFjNTIyYWJhN2VhMiIsCiAgICJzaWciOiAiMzA0NTAyMjEwMGM3NjhiMmY4NmRhOTk1NjkwMTljMTYwYTA4MWRhNTRhZTM2YzM0YzBhMzEyMGQzY2I2OWI1M2I3ZDExMzc1OGUwMjIwNGY2NzE1MThmNjE3YjIwZDQ2NTM3ZmFlNmMzYjYzYmFlODkxM2Y0ZjE5NjIxNTYxMDVjYzRmMDE5YWMzNWM2YSIKICB9LAogIHsKICAgImtleWlkIjogIjIyZjRjYWVjNmQ4ZTZmOTU1NWFmNjZiM2Q0YzNjYjA2YTNiYjIzZmRjN2UzOWM5MTZjNjFmNDYyZTZmNTJiMDYiLAogICAic2lnIjogIjMwNDUwMjIxMDBiNDQzNGU2OTk1ZDM2OGQyM2U3NDc1OWFjZDBjYjkwMTNjODNhNWQzNTExZjBmOTk3ZWM1NGM0NTZhZTQzNTBhMDIyMDE1YjBlMjY1ZDE4MmQyYjYxZGM3NGUxNTVkOThiM2MzZmJlNTY0YmEwNTI4NmFhMTRjOGRmMDJjOWI3NTY1MTYiCiAgfSwKICB7CiAgICJrZXlpZCI6ICI2MTY0MzgzODEyNWI0NDBiNDBkYjY5NDJmNWNiNWEzMWMwZGMwNDM2ODMxNmViMmFhYTU4Yjk1OTA0YTU4MjIyIiwKICAgInNpZyI6ICIzMDQ1MDIyMTAwODJjNTg0MTFkOTg5ZWI5Zjg2MTQxMDg1N2Q0MjM4MTU5MGVjOTQyNGRiZGFhNTFlNzhlZDEzNTE1NDMxOTA0ZTAyMjAxMTgxODVkYTZhNmMyOTQ3MTMxYzE3Nzk3ZTJiYjc2MjBjZTI2ZTVmMzAxZDFjZWFjNWYyYTdlNThmOWRjZjJlIgogIH0sCiAgewogICAia2V5aWQiOiAiYTY4N2U1YmY0ZmFiODJiMGVlNThkNDZlMDVjOTUzNTE0NWEyYzlhZmI0NThmNDNkNDJiNDVjYTBmZGNlMmE3MCIsCiAgICJzaWciOiAiMzA0NjAyMjEwMGM3ODUxMzg1NGNhZTljMzJlYWE2Yjg4ZTE4OTEyZjQ4MDA2YzI3NTdhMjU4ZjkxNzMxMmNhYmE3NTk0OGViOWUwMjIxMDBkOWUxYjRjZTBhZGZlOWZkMmUyMTQ4ZDdmYTI3YTJmNDBiYTExMjJiZDY5ZGE3NjEyZDhkMTc3NmIwMTNjOTFkIgogIH0sCiAgewogICAia2V5aWQiOiAiZmRmYTgzYTA3YjVhODM1ODliODdkZWQ0MWY3N2YzOWQyMzJhZDkxZjdjY2U1Mjg2OGRhY2QwNmJhMDg5ODQ5ZiIsCiAgICJzaWciOiAiMzA0NTAyMjA1NjQ4M2EyZDVkOWVhOWNlYzZlMTFlYWRmYjMzYzQ4NGI2MTQyOThmYWNhMTVhY2YxYzQzMWIxMWVkN2Y3MzRjMDIyMTAwZDBjMWQ3MjZhZjkyYTg3ZTRlNjY0NTljYTVhZGYzOGEwNWI0NGUxZjk0MzE4NDIzZjk1NGJhZThiY2E1YmIyZSIKICB9LAogIHsKICAgImtleWlkIjogImUyZjU5YWNiOTQ4ODUxOTQwN2UxOGNiZmM5MzI5NTEwYmUwM2MwNGFjYTk5MjlkMmYwMzAxMzQzZmVjODU1MjMiLAogICAic2lnIjogIjMwNDYwMjIxMDBkMDA0ZGU4ODAyNGMzMmRjNTY1M2E5ZjQ4NDNjZmM1MjE1NDI3MDQ4YWQ5NjAwZDJjZjljOTY5ZTZlZGZmM2QyMDIyMTAwZDllYmI3OThmNWZjNjZhZjEwODk5ZGVjZTAxNGE4NjI4Y2NmM2M1NDAyY2Q0YTQyNzAyMDc0NzJmOGY2ZTcxMiIKICB9LAogIHsKICAgImtleWlkIjogIjNjMzQ0YWEwNjhmZDRjYzRlODdkYzUwYjYxMmMwMjQzMWZiYzc3MWU5NTAwMzk5MzY4M2EyYjBiZjI2MGNmMGUiLAogICAic2lnIjogIjMwNDYwMjIxMDBiN2IwOTk5NmM0NWNhMmQ0YjA1NjAzZTU2YmFlZmEyOTcxOGEwYjcxMTQ3Y2Y4YzZlNjYzNDliYWE2MTQ3N2RmMDIyMTAwYzRkYTgwYzcxN2I0ZmE3YmJhMGZkNWM3MmRhOGEwNDk5MzU4YjAxMzU4YjIzMDlmNDFkMTQ1NmVhMWU3ZTFkOSIKICB9LAogIHsKICAgImtleWlkIjogImVjODE2Njk3MzRlMDE3OTk2YzViODVmM2QwMmMzZGUxZGQ0NjM3YTE1MjAxOWZlMWFmMTI1ZDJmOTM2OGI5NWUiLAogICAic2lnIjogIjMwNDYwMjIxMDBiZTk3ODJjMzA3NDRlNDExYTgyZmE4NWI1MTM4ZDYwMWNlMTQ4YmMxOTI1OGFlYzY0ZTdlYzI0NDc4ZjM4ODEyMDIyMTAwY2FlZjYzZGNhZjFhNGI5YTUwMGQzYmQwZTNmMTY0ZWMxOGYxYjYzZDdhOTQ2MGQ5YWNhYjEwNjZkYjBmMDE2ZCIKICB9LAogIHsKICAgImtleWlkIjogIjFlMWQ2NWNlOThiMTBhZGRhZDQ3NjRmZWJmN2RkYTJkMDQzNmIzZDNhMzg5MzU3OWMwZGRkYWVhMjBlNTQ4NDkiLAogICAic2lnIjogIjMwNDUwMjIwNzQ2ZWMzZjg1MzRjZTU1NTMxZDBkMDFmZjY0OTY0ZWY0NDBkMWU3ZDJjNGMxNDI0MDliOGU5NzY5ZjFhZGE2ZjAyMjEwMGUzYjkyOWZjZDkzZWExOGZlYWEwODI1ODg3YTcyMTA0ODk4NzlhNjY3ODBjMDdhODNmNGJkNDZlMmYwOWFiM2IiCiAgfQogXSwKICJzaWduZWQiOiB7CiAgIl90eXBlIjogInJvb3QiLAogICJjb25zaXN0ZW50X3NuYXBzaG90IjogdHJ1ZSwKICAiZXhwaXJlcyI6ICIyMDI1LTAyLTE5VDA4OjA0OjMyWiIsCiAgImtleXMiOiB7CiAgICIyMmY0Y2FlYzZkOGU2Zjk1NTVhZjY2YjNkNGMzY2IwNmEzYmIyM2ZkYzdlMzljOTE2YzYxZjQ2MmU2ZjUyYjA2IjogewogICAgImtleWlkX2hhc2hfYWxnb3JpdGhtcyI6IFsKICAgICAic2hhMjU2IiwKICAgICAic2hhNTEyIgogICAgXSwKICAgICJrZXl0eXBlIjogImVjZHNhIiwKICAgICJrZXl2YWwiOiB7CiAgICAgInB1YmxpYyI6ICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFekJ6Vk9tSENQb2pNVkxTSTM2NFdpaVY4TlByRFxuNklnUnhWbGlza3ovdit5M0pFUjVtY1ZHY09ObGlEY1dNQzVKMmxmSG1qUE5QaGI0SDd4bThMemZTQT09XG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1cbiIKICAgIH0sCiAgICAic2NoZW1lIjogImVjZHNhLXNoYTItbmlzdHAyNTYiLAogICAgIngtdHVmLW9uLWNpLWtleW93bmVyIjogIkBzYW50aWFnb3RvcnJlcyIKICAgfSwKICAgIjYxNjQzODM4MTI1YjQ0MGI0MGRiNjk0MmY1Y2I1YTMxYzBkYzA0MzY4MzE2ZWIyYWFhNThiOTU5MDRhNTgyMjIiOiB7CiAgICAia2V5aWRfaGFzaF9hbGdvcml0aG1zIjogWwogICAgICJzaGEyNTYiLAogICAgICJzaGE1MTIiCiAgICBdLAogICAgImtleXR5cGUiOiAiZWNkc2EiLAogICAgImtleXZhbCI6IHsKICAgICAicHVibGljIjogIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVpbmlrU3NBUW1Za05lSDVlWXEvQ25JekxhYWNPXG54bFNhYXdRRE93cUt5L3RDcXhxNXh4UFNKYzIxSzRXSWhzOUd5T2tLZnp1ZVkzR0lMemNNSlo0Y1d3PT1cbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIgogICAgfSwKICAgICJzY2hlbWUiOiAiZWNkc2Etc2hhMi1uaXN0cDI1NiIsCiAgICAieC10dWYtb24tY2kta2V5b3duZXIiOiAiQGJvYmNhbGxhd2F5IgogICB9LAogICAiNmYyNjAwODlkNTkyM2RhZjIwMTY2Y2E2NTdjNTQzYWY2MTgzNDZhYjk3MTg4NGE5OTk2MmIwMTk4OGJiZTBjMyI6IHsKICAgICJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCiAgICAgInNoYTI1NiIsCiAgICAgInNoYTUxMiIKICAgIF0sCiAgICAia2V5dHlwZSI6ICJlY2RzYSIsCiAgICAia2V5dmFsIjogewogICAgICJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXk4WEtzbWhCWURJOEpjMEd3ekJ4ZUtheDBjbTVcblNUS0VVNjVIUEZ1blVuNDFzVDhwaTBGak00SWtIei9ZVW13bUxVTzBXdDdseGhqNkJrTElLNHFZQXc9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCiAgICB9LAogICAgInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKICAgICJ4LXR1Zi1vbi1jaS1rZXlvd25lciI6ICJAZGxvcmVuYyIKICAgfSwKICAgIjcyNDdmMGRiYWQ4NWIxNDdlMTg2M2JhZGU3NjEyNDNjYzc4NWRjYjdhYTQxMGU3MTA1ZGQzZDJiNjFhMzZkMmMiOiB7CiAgICAia2V5aWRfaGFzaF9hbGdvcml0aG1zIjogWwogICAgICJzaGEyNTYiLAogICAgICJzaGE1MTIiCiAgICBdLAogICAgImtleXR5cGUiOiAiZWNkc2EiLAogICAgImtleXZhbCI6IHsKICAgICAicHVibGljIjogIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVXUmlHcjUraiszSjVTc0grWnRyNW5FMkgyd083XG5CVituTzNzOTNnTGNhMThxVE96SFkxb1d5QUdEeWtNU3NHVFVCU3Q5RCtBbjBLZktzRDJtZlNNNDJRPT1cbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIgogICAgfSwKICAgICJzY2hlbWUiOiAiZWNkc2Etc2hhMi1uaXN0cDI1NiIsCiAgICAieC10dWYtb24tY2ktb25saW5lLXVyaSI6ICJnY3BrbXM6Ly9wcm9qZWN0cy9zaWdzdG9yZS1yb290LXNpZ25pbmcvbG9jYXRpb25zL2dsb2JhbC9rZXlSaW5ncy9yb290L2NyeXB0b0tleXMvdGltZXN0YW1wIgogICB9LAogICAiYTY4N2U1YmY0ZmFiODJiMGVlNThkNDZlMDVjOTUzNTE0NWEyYzlhZmI0NThmNDNkNDJiNDVjYTBmZGNlMmE3MCI6IHsKICAgICJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCiAgICAgInNoYTI1NiIsCiAgICAgInNoYTUxMiIKICAgIF0sCiAgICAia2V5dHlwZSI6ICJlY2RzYSIsCiAgICAia2V5dmFsIjogewogICAgICJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTBnaHJoOTJMdzFZcjNpZEdWNVdxQ3RNREI4Q3hcbitEOGhkQzR3MlpMTklwbFZSb1ZHTHNrWWEzZ2hlTXlPamlKOGtQaTE1YVEyLy83UCtvajdVdkpQR3c9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCiAgICB9LAogICAgInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKICAgICJ4LXR1Zi1vbi1jaS1rZXlvd25lciI6ICJAam9zaHVhZ2wiCiAgIH0sCiAgICJlNzFhNTRkNTQzODM1YmE4NmFkYWQ5NDYwMzc5Yzc2NDFmYjg3MjZkMTY0ZWE3NjY4MDFhMWM1MjJhYmE3ZWEyIjogewogICAgImtleWlkX2hhc2hfYWxnb3JpdGhtcyI6IFsKICAgICAic2hhMjU2IiwKICAgICAic2hhNTEyIgogICAgXSwKICAgICJrZXl0eXBlIjogImVjZHNhIiwKICAgICJrZXl2YWwiOiB7CiAgICAgInB1YmxpYyI6ICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFRVhzejNTWlhGYjhqTVY0Mmo2cEpseWpialI4S1xuTjNCd29jZXhxNkxNSWI1cXNXS09RdkxOMTZOVWVmTGM0SHN3T291bVJzVlZhYWpTcFFTNmZvYmtSdz09XG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1cbiIKICAgIH0sCiAgICAic2NoZW1lIjogImVjZHNhLXNoYTItbmlzdHAyNTYiLAogICAgIngtdHVmLW9uLWNpLWtleW93bmVyIjogIkBtbm02NzgiCiAgIH0KICB9LAogICJyb2xlcyI6IHsKICAgInJvb3QiOiB7CiAgICAia2V5aWRzIjogWwogICAgICI2ZjI2MDA4OWQ1OTIzZGFmMjAxNjZjYTY1N2M1NDNhZjYxODM0NmFiOTcxODg0YTk5OTYyYjAxOTg4YmJlMGMzIiwKICAgICAiZTcxYTU0ZDU0MzgzNWJhODZhZGFkOTQ2MDM3OWM3NjQxZmI4NzI2ZDE2NGVhNzY2ODAxYTFjNTIyYWJhN2VhMiIsCiAgICAgIjIyZjRjYWVjNmQ4ZTZmOTU1NWFmNjZiM2Q0YzNjYjA2YTNiYjIzZmRjN2UzOWM5MTZjNjFmNDYyZTZmNTJiMDYiLAogICAgICI2MTY0MzgzODEyNWI0NDBiNDBkYjY5NDJmNWNiNWEzMWMwZGMwNDM2ODMxNmViMmFhYTU4Yjk1OTA0YTU4MjIyIiwKICAgICAiYTY4N2U1YmY0ZmFiODJiMGVlNThkNDZlMDVjOTUzNTE0NWEyYzlhZmI0NThmNDNkNDJiNDVjYTBmZGNlMmE3MCIKICAgIF0sCiAgICAidGhyZXNob2xkIjogMwogICB9LAogICAic25hcHNob3QiOiB7CiAgICAia2V5aWRzIjogWwogICAgICI3MjQ3ZjBkYmFkODViMTQ3ZTE4NjNiYWRlNzYxMjQzY2M3ODVkY2I3YWE0MTBlNzEwNWRkM2QyYjYxYTM2ZDJjIgogICAgXSwKICAgICJ0aHJlc2hvbGQiOiAxLAogICAgIngtdHVmLW9uLWNpLWV4cGlyeS1wZXJpb2QiOiAzNjUwLAogICAgIngtdHVmLW9uLWNpLXNpZ25pbmctcGVyaW9kIjogMzY1CiAgIH0sCiAgICJ0YXJnZXRzIjogewogICAgImtleWlkcyI6IFsKICAgICAiNmYyNjAwODlkNTkyM2RhZjIwMTY2Y2E2NTdjNTQzYWY2MTgzNDZhYjk3MTg4NGE5OTk2MmIwMTk4OGJiZTBjMyIsCiAgICAgImU3MWE1NGQ1NDM4MzViYTg2YWRhZDk0NjAzNzljNzY0MWZiODcyNmQxNjRlYTc2NjgwMWExYzUyMmFiYTdlYTIiLAogICAgICIyMmY0Y2FlYzZkOGU2Zjk1NTVhZjY2YjNkNGMzY2IwNmEzYmIyM2ZkYzdlMzljOTE2YzYxZjQ2MmU2ZjUyYjA2IiwKICAgICAiNjE2NDM4MzgxMjViNDQwYjQwZGI2OTQyZjVjYjVhMzFjMGRjMDQzNjgzMTZlYjJhYWE1OGI5NTkwNGE1ODIyMiIsCiAgICAgImE2ODdlNWJmNGZhYjgyYjBlZTU4ZDQ2ZTA1Yzk1MzUxNDVhMmM5YWZiNDU4ZjQzZDQyYjQ1Y2EwZmRjZTJhNzAiCiAgICBdLAogICAgInRocmVzaG9sZCI6IDMKICAgfSwKICAgInRpbWVzdGFtcCI6IHsKICAgICJrZXlpZHMiOiBbCiAgICAgIjcyNDdmMGRiYWQ4NWIxNDdlMTg2M2JhZGU3NjEyNDNjYzc4NWRjYjdhYTQxMGU3MTA1ZGQzZDJiNjFhMzZkMmMiCiAgICBdLAogICAgInRocmVzaG9sZCI6IDEsCiAgICAieC10dWYtb24tY2ktZXhwaXJ5LXBlcmlvZCI6IDcsCiAgICAieC10dWYtb24tY2ktc2lnbmluZy1wZXJpb2QiOiA0CiAgIH0KICB9LAogICJzcGVjX3ZlcnNpb24iOiAiMS4wIiwKICAidmVyc2lvbiI6IDEwLAogICJ4LXR1Zi1vbi1jaS1leHBpcnktcGVyaW9kIjogMTgyLAogICJ4LXR1Zi1vbi1jaS1zaWduaW5nLXBlcmlvZCI6IDMxCiB9Cn0=",targets:{"trusted_root.json":"ewogICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRldi5zaWdzdG9yZS50cnVzdGVkcm9vdCtqc29uO3ZlcnNpb249MC4xIiwKICAidGxvZ3MiOiBbCiAgICB7CiAgICAgICJiYXNlVXJsIjogImh0dHBzOi8vcmVrb3Iuc2lnc3RvcmUuZGV2IiwKICAgICAgImhhc2hBbGdvcml0aG0iOiAiU0hBMl8yNTYiLAogICAgICAicHVibGljS2V5IjogewogICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUyRzJZKzJ0YWJkVFY1QmNHaUJJeDBhOWZBRndya0JibUxTR3RrczRMM3FYNnlZWTB6dWZCbmhDOFVyL2l5NTVHaFdQLzlBL2JZMkxoQzMwTTkrUll0dz09IiwKICAgICAgICAia2V5RGV0YWlscyI6ICJQS0lYX0VDRFNBX1AyNTZfU0hBXzI1NiIsCiAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgInN0YXJ0IjogIjIwMjEtMDEtMTJUMTE6NTM6MjcuMDAwWiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJsb2dJZCI6IHsKICAgICAgICAia2V5SWQiOiAid05JOWF0UUdseitWV2ZPNkxSeWdINFFVZlkvOFc0UkZ3aVQ1aTVXUmdCMD0iCiAgICAgIH0KICAgIH0KICBdLAogICJjZXJ0aWZpY2F0ZUF1dGhvcml0aWVzIjogWwogICAgewogICAgICAic3ViamVjdCI6IHsKICAgICAgICAib3JnYW5pemF0aW9uIjogInNpZ3N0b3JlLmRldiIsCiAgICAgICAgImNvbW1vbk5hbWUiOiAic2lnc3RvcmUiCiAgICAgIH0sCiAgICAgICJ1cmkiOiAiaHR0cHM6Ly9mdWxjaW8uc2lnc3RvcmUuZGV2IiwKICAgICAgImNlcnRDaGFpbiI6IHsKICAgICAgICAiY2VydGlmaWNhdGVzIjogWwogICAgICAgICAgewogICAgICAgICAgICAicmF3Qnl0ZXMiOiAiTUlJQitEQ0NBWDZnQXdJQkFnSVROVmtEWm9DaW9mUERzeTdkZm02Z2VMYnVoekFLQmdncWhrak9QUVFEQXpBcU1SVXdFd1lEVlFRS0V3eHphV2R6ZEc5eVpTNWtaWFl4RVRBUEJnTlZCQU1UQ0hOcFozTjBiM0psTUI0WERUSXhNRE13TnpBek1qQXlPVm9YRFRNeE1ESXlNekF6TWpBeU9Wb3dLakVWTUJNR0ExVUVDaE1NYzJsbmMzUnZjbVV1WkdWMk1SRXdEd1lEVlFRREV3aHphV2R6ZEc5eVpUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQkxTeUE3SWk1aytwTk84WkVXWTB5bGVtV0Rvd09rTmEza0wrR1pFNVo1R1dlaEw5L0E5YlJOQTNSYnJzWjVpMEpjYXN0YVJMN1NwNWZwL2pENWR4cWMvVWRUVm5sdlMxNmFuKzJZZnN3ZS9RdUxvbFJVQ3JjT0UyKzJpQTUrdHpkNk5tTUdRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0hRWURWUjBPQkJZRUZNakZIUUJCbWlRcE1sRWs2dzJ1U3UxS0J0UHNNQjhHQTFVZEl3UVlNQmFBRk1qRkhRQkJtaVFwTWxFazZ3MnVTdTFLQnRQc01Bb0dDQ3FHU000OUJBTURBMmdBTUdVQ01IOGxpV0pmTXVpNnZYWEJoakRnWTRNd3NsbU4vVEp4VmUvODNXckZvbXdtTmYwNTZ5MVg0OEY5YzRtM2Ezb3pYQUl4QUtqUmF5NS9hai9qc0tLR0lrbVFhdGpJOHV1cEhyLytDeEZ2YUpXbXBZcU5rTERHUlUrOW9yemg1aEkyUnJjdWFRPT0iCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgInN0YXJ0IjogIjIwMjEtMDMtMDdUMDM6MjA6MjkuMDAwWiIsCiAgICAgICAgImVuZCI6ICIyMDIyLTEyLTMxVDIzOjU5OjU5Ljk5OVoiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzdWJqZWN0IjogewogICAgICAgICJvcmdhbml6YXRpb24iOiAic2lnc3RvcmUuZGV2IiwKICAgICAgICAiY29tbW9uTmFtZSI6ICJzaWdzdG9yZSIKICAgICAgfSwKICAgICAgInVyaSI6ICJodHRwczovL2Z1bGNpby5zaWdzdG9yZS5kZXYiLAogICAgICAiY2VydENoYWluIjogewogICAgICAgICJjZXJ0aWZpY2F0ZXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNSUlDR2pDQ0FhR2dBd0lCQWdJVUFMblZpVmZuVTBickphc21Sa0hybi9VbmZhUXdDZ1lJS29aSXpqMEVBd013S2pFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNUkV3RHdZRFZRUURFd2h6YVdkemRHOXlaVEFlRncweU1qQTBNVE15TURBMk1UVmFGdzB6TVRFd01EVXhNelUyTlRoYU1EY3hGVEFUQmdOVkJBb1RESE5wWjNOMGIzSmxMbVJsZGpFZU1Cd0dBMVVFQXhNVmMybG5jM1J2Y21VdGFXNTBaWEp0WldScFlYUmxNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRThSVlMveXNIK05PdnVEWnlQSVp0aWxnVUY5TmxhcllwQWQ5SFAxdkJCSDFVNUNWNzdMU1M3czBaaUg0bkU3SHY3cHRTNkx2dlIvU1RrNzk4TFZnTXpMbEo0SGVJZkYzdEhTYWV4TGNZcFNBU3Ixa1MwTi9SZ0JKei85aldDaVhubzNzd2VUQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0V3WURWUjBsQkF3d0NnWUlLd1lCQlFVSEF3TXdFZ1lEVlIwVEFRSC9CQWd3QmdFQi93SUJBREFkQmdOVkhRNEVGZ1FVMzlQcHoxWWtFWmI1cU5qcEtGV2l4aTRZWkQ4d0h3WURWUjBqQkJnd0ZvQVVXTUFlWDVGRnBXYXBlc3lRb1pNaTBDckZ4Zm93Q2dZSUtvWkl6ajBFQXdNRFp3QXdaQUl3UENzUUs0RFlpWllEUElhRGk1SEZLbmZ4WHg2QVNTVm1FUmZzeW5ZQmlYMlg2U0pSblpVODQvOURaZG5GdnZ4bUFqQk90NlFwQmxjNEovMER4dmtUQ3FwY2x2emlMNkJDQ1BuamRsSUIzUHUzQnhzUG15Z1VZN0lpMnpiZENkbGlpb3c9IgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgInJhd0J5dGVzIjogIk1JSUI5ekNDQVh5Z0F3SUJBZ0lVQUxaTkFQRmR4SFB3amVEbG9Ed3lZQ2hBTy80d0NnWUlLb1pJemowRUF3TXdLakVWTUJNR0ExVUVDaE1NYzJsbmMzUnZjbVV1WkdWMk1SRXdEd1lEVlFRREV3aHphV2R6ZEc5eVpUQWVGdzB5TVRFd01EY3hNelUyTlRsYUZ3MHpNVEV3TURVeE16VTJOVGhhTUNveEZUQVRCZ05WQkFvVERITnBaM04wYjNKbExtUmxkakVSTUE4R0ExVUVBeE1JYzJsbmMzUnZjbVV3ZGpBUUJnY3Foa2pPUFFJQkJnVXJnUVFBSWdOaUFBVDdYZUZUNHJiM1BRR3dTNElhanRMazMvT2xucGdhbmdhQmNsWXBzWUJyNWkrNHluQjA3Y2ViM0xQME9JT1pkeGV4WDY5YzVpVnV5SlJRK0h6MDV5aStVRjN1QldBbEhwaVM1c2gwK0gyR0hFN1NYcmsxRUM1bTFUcjE5TDlnZzkyall6QmhNQTRHQTFVZER3RUIvd1FFQXdJQkJqQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01CMEdBMVVkRGdRV0JCUll3QjVma1VXbFpxbDZ6SkNoa3lMUUtzWEYrakFmQmdOVkhTTUVHREFXZ0JSWXdCNWZrVVdsWnFsNnpKQ2hreUxRS3NYRitqQUtCZ2dxaGtqT1BRUURBd05wQURCbUFqRUFqMW5IZVhacCsxM05XQk5hK0VEc0RQOEcxV1dnMXRDTVdQL1dIUHFwYVZvMGpoc3dlTkZaZ1NzMGVFN3dZSTRxQWpFQTJXQjlvdDk4c0lrb0YzdlpZZGQzL1Z0V0I1YjlUTk1lYTdJeC9zdEo1VGZjTExlQUJMRTRCTkpPc1E0dm5CSEoiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgInN0YXJ0IjogIjIwMjItMDQtMTNUMjA6MDY6MTUuMDAwWiIKICAgICAgfQogICAgfQogIF0sCiAgImN0bG9ncyI6IFsKICAgIHsKICAgICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9jdGZlLnNpZ3N0b3JlLmRldi90ZXN0IiwKICAgICAgImhhc2hBbGdvcml0aG0iOiAiU0hBMl8yNTYiLAogICAgICAicHVibGljS2V5IjogewogICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUViZndSK1JKdWRYc2NnUkJScEtYMVhGRHkzUHl1ZER4ei9TZm5SaTFmVDhla3BmQmQyTzF1b3o3anIzWjhuS3p4QTY5RVVRK2VGQ0ZJM3pldWJQV1U3dz09IiwKICAgICAgICAia2V5RGV0YWlscyI6ICJQS0lYX0VDRFNBX1AyNTZfU0hBXzI1NiIsCiAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgInN0YXJ0IjogIjIwMjEtMDMtMTRUMDA6MDA6MDAuMDAwWiIsCiAgICAgICAgICAiZW5kIjogIjIwMjItMTAtMzFUMjM6NTk6NTkuOTk5WiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJsb2dJZCI6IHsKICAgICAgICAia2V5SWQiOiAiQ0dDUzhDaFMvMmhGMGRGcko0U2NSV2NZckJZOXd6alNiZWE4SWdZMmIzST0iCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJiYXNlVXJsIjogImh0dHBzOi8vY3RmZS5zaWdzdG9yZS5kZXYvMjAyMiIsCiAgICAgICJoYXNoQWxnb3JpdGhtIjogIlNIQTJfMjU2IiwKICAgICAgInB1YmxpY0tleSI6IHsKICAgICAgICAicmF3Qnl0ZXMiOiAiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaVBTbEZpMENtRlRmRWpDVXFGOUh1Q0VjWVhOS0FhWWFsSUptQlo4eXllelBqVHFoeHJLQnBNbmFvY1Z0TEpCSTFlTTN1WG5RelFHQUpkSjRnczlGeXc9PSIsCiAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICJ2YWxpZEZvciI6IHsKICAgICAgICAgICJzdGFydCI6ICIyMDIyLTEwLTIwVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgfQogICAgICB9LAogICAgICAibG9nSWQiOiB7CiAgICAgICAgImtleUlkIjogIjNUMHdhc2JIRVRKakdSNGNtV2MzQXFKS1hyamVQSzMvaDRweWdDOHA3bzQ9IgogICAgICB9CiAgICB9CiAgXSwKICAidGltZXN0YW1wQXV0aG9yaXRpZXMiOiBbCiAgICB7CiAgICAgICJzdWJqZWN0IjogewogICAgICAgICJvcmdhbml6YXRpb24iOiAiR2l0SHViLCBJbmMuIiwKICAgICAgICAiY29tbW9uTmFtZSI6ICJJbnRlcm5hbCBTZXJ2aWNlcyBSb290IgogICAgICB9LAogICAgICAiY2VydENoYWluIjogewogICAgICAgICJjZXJ0aWZpY2F0ZXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNSUlCM0RDQ0FXS2dBd0lCQWdJVWNoa05zSDM2WGEwNGIxTHFJYytxcjlEVmVjTXdDZ1lJS29aSXpqMEVBd013TWpFVk1CTUdBMVVFQ2hNTVIybDBTSFZpTENCSmJtTXVNUmt3RndZRFZRUURFeEJVVTBFZ2FXNTBaWEp0WldScFlYUmxNQjRYRFRJek1EUXhOREF3TURBd01Gb1hEVEkwTURReE16QXdNREF3TUZvd01qRVZNQk1HQTFVRUNoTU1SMmwwU0hWaUxDQkpibU11TVJrd0Z3WURWUVFERXhCVVUwRWdWR2x0WlhOMFlXMXdhVzVuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFVUQ1Wk5iU3FZTWQ2cjhxcE9PRVg5aWJHblpUOUdzdVhPaHIvZjhVOUZKdWdCR0V4S1lwNDBPVUxTMGVyalpXN3hWOXhWNTJObkpmNU9lRHE0ZTVaS3FOV01GUXdEZ1lEVlIwUEFRSC9CQVFEQWdlQU1CTUdBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUlNQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqQkJnd0ZvQVVhVzFSdWRPZ1Z0MGxlcVkwV0tZYnVQcjQ3d0F3Q2dZSUtvWkl6ajBFQXdNRGFBQXdaUUl3YlVIOUh2RDRlakNaSk9XUW5xQWxrcVVSbGx2dTlNOCtWcUxiaVJLK3pTZlpDWndzaWxqUm44TVFRUlNrWEVFNUFqRUFnK1Z4cXRvamZWZnU4RGh6emhDeDlHS0VUYkpIYjE5aVY3Mm1NS1ViREFGbXpaNmJROGI1NFpiOHRpZHk1YVdlIgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgInJhd0J5dGVzIjogIk1JSUNFRENDQVpXZ0F3SUJBZ0lVWDhaTzVRWFA3dk40ZE1RNWU5c1UzbnViOE9nd0NnWUlLb1pJemowRUF3TXdPREVWTUJNR0ExVUVDaE1NUjJsMFNIVmlMQ0JKYm1NdU1SOHdIUVlEVlFRREV4WkpiblJsY201aGJDQlRaWEoyYVdObGN5QlNiMjkwTUI0WERUSXpNRFF4TkRBd01EQXdNRm9YRFRJNE1EUXhNakF3TURBd01Gb3dNakVWTUJNR0ExVUVDaE1NUjJsMFNIVmlMQ0JKYm1NdU1Sa3dGd1lEVlFRREV4QlVVMEVnYVc1MFpYSnRaV1JwWVhSbE1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFdk1MWS9kVFZidklKWUFOQXVzekV3Sm5RRTFsbGZ0eW55TUtJTWhoNDhIbXFiVnI1eWd5YnpzTFJMVktiQldPZFoyMWFlSnorZ1ppeXRaZXRxY3lGOVdsRVI1TkVNZjZKVjdaTm9qUXB4SHE0UkhHb0dTY2VRdi9xdlRpWnhFREtvMll3WkRBT0JnTlZIUThCQWY4RUJBTUNBUVl3RWdZRFZSMFRBUUgvQkFnd0JnRUIvd0lCQURBZEJnTlZIUTRFRmdRVWFXMVJ1ZE9nVnQwbGVxWTBXS1lidVByNDd3QXdId1lEVlIwakJCZ3dGb0FVOU5ZWWxvYm5BRzRjMC9xanh5SC9scS93eitRd0NnWUlLb1pJemowRUF3TURhUUF3WmdJeEFLMUIxODV5Z0NySVlGbElzM0dqc3dqbndTTUc2TFk4d29MVmRha0tEWnhWYThmOGNxTXMxRGhjeEowKzA5dzk1UUl4QU8rdEJ6Wms3dmpVSjlpSmdENFI2WldUeFFXS3FObTc0ak85OW8rbzlzdjRGSS9TWlRaVEZ5TW4wSUpFSGRObXlBPT0iCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAicmF3Qnl0ZXMiOiAiTUlJQjlEQ0NBWHFnQXdJQkFnSVVhL0pBa2RVaks0SlV3c3F0YWlSSkdXaHFMU293Q2dZSUtvWkl6ajBFQXdNd09ERVZNQk1HQTFVRUNoTU1SMmwwU0hWaUxDQkpibU11TVI4d0hRWURWUVFERXhaSmJuUmxjbTVoYkNCVFpYSjJhV05sY3lCU2IyOTBNQjRYRFRJek1EUXhOREF3TURBd01Gb1hEVE16TURReE1UQXdNREF3TUZvd09ERVZNQk1HQTFVRUNoTU1SMmwwU0hWaUxDQkpibU11TVI4d0hRWURWUVFERXhaSmJuUmxjbTVoYkNCVFpYSjJhV05sY3lCU2IyOTBNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRWY5akZBWHh6NGt4NjhBSFJNT2tGQmhmbERjTVR2emFYejR4L0ZDY1hqSi8xcUVLb24vcVBJR25hVVJza0R0eU5iTkRPcGVKVERERnF0NDhpTVBybnpweDZJWndxZW1mVUpONHhCRVpmemErcFl0L2l5b2QrOXRacjIwUlJXU3YvbzBVd1F6QU9CZ05WSFE4QkFmOEVCQU1DQVFZd0VnWURWUjBUQVFIL0JBZ3dCZ0VCL3dJQkFqQWRCZ05WSFE0RUZnUVU5TllZbG9ibkFHNGMwL3FqeHlIL2xxL3d6K1F3Q2dZSUtvWkl6ajBFQXdNRGFBQXdaUUl4QUxaTFo4QmdSWHpLeExNTU45VklsTytlNGhyQm5OQmdGN3R6N0hucm93djJOZXRaRXJJQUNLRnltQmx2V0R2dE1BSXdaTytraTZzc1ExYnNabzk4TzhtRUFmMk5aN2lpQ2dERFUwVndqZWNvNnp5ZWgwekJUczkvN2dWNkFITlE1M3hEIgogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgInZhbGlkRm9yIjogewogICAgICAgICJzdGFydCI6ICIyMDIzLTA0LTE0VDAwOjAwOjAwLjAwMFoiCiAgICAgIH0KICAgIH0KICBdCn0K","registry.npmjs.org%2Fkeys.json":"ewogICAgImtleXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAia2V5SWQiOiAiU0hBMjU2OmpsM2J3c3d1ODBQampva0NnaDBvMnc1YzJVNExoUUFFNTdnajljejFrekEiLAogICAgICAgICAgICAia2V5VXNhZ2UiOiAibnBtOnNpZ25hdHVyZXMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTFPbGIzek1BRkZ4WEtIaUlrUU81Y0ozWWhsNWk2VVBwK0lodXRlQkpidUhjQTVVb2dLbzBFV3RsV3dXNktTYUtvVE5FWUw3SmxDUWlWbmtoQmt0VWdnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIxOTk5LTAxLTAxVDAwOjAwOjAwLjAwMFoiLAogICAgICAgICAgICAgICAgICAgICJlbmQiOiAiMjAyNS0wMS0yOVQwMDowMDowMC4wMDBaIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJrZXlJZCI6ICJTSEEyNTY6amwzYndzd3U4MFBqam9rQ2doMG8ydzVjMlU0TGhRQUU1N2dqOWN6MWt6QSIsCiAgICAgICAgICAgICJrZXlVc2FnZSI6ICJucG06YXR0ZXN0YXRpb25zIiwKICAgICAgICAgICAgInB1YmxpY0tleSI6IHsKICAgICAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUxT2xiM3pNQUZGeFhLSGlJa1FPNWNKM1lobDVpNlVQcCtJaHV0ZUJKYnVIY0E1VW9nS28wRVd0bFd3VzZLU2FLb1RORVlMN0psQ1FpVm5raEJrdFVnZz09IiwKICAgICAgICAgICAgICAgICJrZXlEZXRhaWxzIjogIlBLSVhfRUNEU0FfUDI1Nl9TSEFfMjU2IiwKICAgICAgICAgICAgICAgICJ2YWxpZEZvciI6IHsKICAgICAgICAgICAgICAgICAgICAic3RhcnQiOiAiMjAyMi0xMi0wMVQwMDowMDowMC4wMDBaIiwKICAgICAgICAgICAgICAgICAgICAiZW5kIjogIjIwMjUtMDEtMjlUMDA6MDA6MDAuMDAwWiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAia2V5SWQiOiAiU0hBMjU2OkRoUTh3UjVBUEJ2RkhMRi8rVGMrQVl2UE9kVHBjSURxT2h4c0JIUndDN1UiLAogICAgICAgICAgICAia2V5VXNhZ2UiOiAibnBtOnNpZ25hdHVyZXMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVk2WWE3VysrN2FVUHp2TVRyZXpINlljeDNjK0hPS1lDY05HeWJKWlNDSnEvZmQ3UWE4dXVBS3RkSWtVUXRRaUVLRVJoQW1FNWxNTUpoUDhPa0RPYTJnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIyMDI1LTAxLTEzVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgImtleUlkIjogIlNIQTI1NjpEaFE4d1I1QVBCdkZITEYvK1RjK0FZdlBPZFRwY0lEcU9oeHNCSFJ3QzdVIiwKICAgICAgICAgICAgImtleVVzYWdlIjogIm5wbTphdHRlc3RhdGlvbnMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVk2WWE3VysrN2FVUHp2TVRyZXpINlljeDNjK0hPS1lDY05HeWJKWlNDSnEvZmQ3UWE4dXVBS3RkSWtVUXRRaUVLRVJoQW1FNWxNTUpoUDhPa0RPYTJnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIyMDI1LTAxLTEzVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICBdCn0K"}}}});var lNe=L(m1=>{"use strict";var aNe=m1&&m1.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(m1,"__esModule",{value:!0});m1.TUFClient=void 0;var Qg=aNe(Ie("fs")),$b=aNe(Ie("path")),U3t=iNe(),H3t=gL(),j3t=sNe(),SJ="targets",vJ=class{constructor(e){let r=new URL(e.mirrorURL),s=encodeURIComponent(r.host+r.pathname.replace(/\/$/,"")),a=$b.default.join(e.cachePath,s);q3t(a),G3t({cachePath:a,mirrorURL:e.mirrorURL,tufRootPath:e.rootPath,forceInit:e.forceInit}),this.updater=W3t({mirrorURL:e.mirrorURL,cachePath:a,forceCache:e.forceCache,retry:e.retry,timeout:e.timeout})}async refresh(){return this.updater.refresh()}getTarget(e){return(0,j3t.readTarget)(this.updater,e)}};m1.TUFClient=vJ;function q3t(t){let e=$b.default.join(t,SJ);Qg.default.existsSync(t)||Qg.default.mkdirSync(t,{recursive:!0}),Qg.default.existsSync(e)||Qg.default.mkdirSync(e)}function G3t({cachePath:t,mirrorURL:e,tufRootPath:r,forceInit:s}){let a=$b.default.join(t,"root.json");if(!Qg.default.existsSync(a)||s)if(r)Qg.default.copyFileSync(r,a);else{let c=oNe()[e];if(!c)throw new H3t.TUFError({code:"TUF_INIT_CACHE_ERROR",message:`No root.json found for mirror: ${e}`});Qg.default.writeFileSync(a,Buffer.from(c["root.json"],"base64")),Object.entries(c.targets).forEach(([f,p])=>{Qg.default.writeFileSync($b.default.join(t,SJ,f),Buffer.from(p,"base64"))})}}function W3t(t){let e={fetchTimeout:t.timeout,fetchRetry:t.retry};return new U3t.Updater({metadataBaseUrl:t.mirrorURL,targetBaseUrl:`${t.mirrorURL}/targets`,metadataDir:t.cachePath,targetDir:$b.default.join(t.cachePath,SJ),forceCache:t.forceCache,config:e})}});var gL=L(mh=>{"use strict";Object.defineProperty(mh,"__esModule",{value:!0});mh.TUFError=mh.DEFAULT_MIRROR_URL=void 0;mh.getTrustedRoot=$3t;mh.initTUF=e8t;var Y3t=bb(),V3t=HRe(),K3t=lNe();mh.DEFAULT_MIRROR_URL="https://tuf-repo-cdn.sigstore.dev";var J3t="sigstore-js",z3t={retries:2},Z3t=5e3,X3t="trusted_root.json";async function $3t(t={}){let r=await cNe(t).getTarget(X3t);return Y3t.TrustedRoot.fromJSON(JSON.parse(r))}async function e8t(t={}){let e=cNe(t);return e.refresh().then(()=>e)}function cNe(t){return new K3t.TUFClient({cachePath:t.cachePath||(0,V3t.appDataPath)(J3t),rootPath:t.rootPath,mirrorURL:t.mirrorURL||mh.DEFAULT_MIRROR_URL,retry:t.retry??z3t,timeout:t.timeout??Z3t,forceCache:t.forceCache??!1,forceInit:t.forceInit??t.force??!1})}var t8t=BJ();Object.defineProperty(mh,"TUFError",{enumerable:!0,get:function(){return t8t.TUFError}})});var uNe=L(dL=>{"use strict";Object.defineProperty(dL,"__esModule",{value:!0});dL.DSSESignatureContent=void 0;var eP=wl(),DJ=class{constructor(e){this.env=e}compareDigest(e){return eP.crypto.bufferEqual(e,eP.crypto.digest("sha256",this.env.payload))}compareSignature(e){return eP.crypto.bufferEqual(e,this.signature)}verifySignature(e){return eP.crypto.verify(this.preAuthEncoding,e,this.signature)}get signature(){return this.env.signatures.length>0?this.env.signatures[0].sig:Buffer.from("")}get preAuthEncoding(){return eP.dsse.preAuthEncoding(this.env.payloadType,this.env.payload)}};dL.DSSESignatureContent=DJ});var fNe=L(mL=>{"use strict";Object.defineProperty(mL,"__esModule",{value:!0});mL.MessageSignatureContent=void 0;var bJ=wl(),PJ=class{constructor(e,r){this.signature=e.signature,this.messageDigest=e.messageDigest.digest,this.artifact=r}compareSignature(e){return bJ.crypto.bufferEqual(e,this.signature)}compareDigest(e){return bJ.crypto.bufferEqual(e,this.messageDigest)}verifySignature(e){return bJ.crypto.verify(this.artifact,e,this.signature)}};mL.MessageSignatureContent=PJ});var pNe=L(yL=>{"use strict";Object.defineProperty(yL,"__esModule",{value:!0});yL.toSignedEntity=i8t;yL.signatureContent=ANe;var xJ=wl(),r8t=uNe(),n8t=fNe();function i8t(t,e){let{tlogEntries:r,timestampVerificationData:s}=t.verificationMaterial,a=[];for(let n of r)a.push({$case:"transparency-log",tlogEntry:n});for(let n of s?.rfc3161Timestamps??[])a.push({$case:"timestamp-authority",timestamp:xJ.RFC3161Timestamp.parse(n.signedTimestamp)});return{signature:ANe(t,e),key:s8t(t),tlogEntries:r,timestamps:a}}function ANe(t,e){switch(t.content.$case){case"dsseEnvelope":return new r8t.DSSESignatureContent(t.content.dsseEnvelope);case"messageSignature":return new n8t.MessageSignatureContent(t.content.messageSignature,e)}}function s8t(t){switch(t.verificationMaterial.content.$case){case"publicKey":return{$case:"public-key",hint:t.verificationMaterial.content.publicKey.hint};case"x509CertificateChain":return{$case:"certificate",certificate:xJ.X509Certificate.parse(t.verificationMaterial.content.x509CertificateChain.certificates[0].rawBytes)};case"certificate":return{$case:"certificate",certificate:xJ.X509Certificate.parse(t.verificationMaterial.content.certificate.rawBytes)}}}});var Co=L(y1=>{"use strict";Object.defineProperty(y1,"__esModule",{value:!0});y1.PolicyError=y1.VerificationError=void 0;var EL=class extends Error{constructor({code:e,message:r,cause:s}){super(r),this.code=e,this.cause=s,this.name=this.constructor.name}},kJ=class extends EL{};y1.VerificationError=kJ;var QJ=class extends EL{};y1.PolicyError=QJ});var hNe=L(IL=>{"use strict";Object.defineProperty(IL,"__esModule",{value:!0});IL.filterCertAuthorities=o8t;IL.filterTLogAuthorities=a8t;function o8t(t,e){return t.filter(r=>r.validFor.start<=e.start&&r.validFor.end>=e.end)}function a8t(t,e){return t.filter(r=>e.logID&&!r.logID.equals(e.logID)?!1:r.validFor.start<=e.targetDate&&e.targetDate<=r.validFor.end)}});var Ay=L(fy=>{"use strict";Object.defineProperty(fy,"__esModule",{value:!0});fy.filterTLogAuthorities=fy.filterCertAuthorities=void 0;fy.toTrustMaterial=c8t;var TJ=wl(),tP=bb(),l8t=Co(),RJ=new Date(0),FJ=new Date(864e13),mNe=hNe();Object.defineProperty(fy,"filterCertAuthorities",{enumerable:!0,get:function(){return mNe.filterCertAuthorities}});Object.defineProperty(fy,"filterTLogAuthorities",{enumerable:!0,get:function(){return mNe.filterTLogAuthorities}});function c8t(t,e){let r=typeof e=="function"?e:u8t(e);return{certificateAuthorities:t.certificateAuthorities.map(dNe),timestampAuthorities:t.timestampAuthorities.map(dNe),tlogs:t.tlogs.map(gNe),ctlogs:t.ctlogs.map(gNe),publicKey:r}}function gNe(t){let e=t.publicKey.keyDetails,r=e===tP.PublicKeyDetails.PKCS1_RSA_PKCS1V5||e===tP.PublicKeyDetails.PKIX_RSA_PKCS1V5||e===tP.PublicKeyDetails.PKIX_RSA_PKCS1V15_2048_SHA256||e===tP.PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256||e===tP.PublicKeyDetails.PKIX_RSA_PKCS1V15_4096_SHA256?"pkcs1":"spki";return{logID:t.logId.keyId,publicKey:TJ.crypto.createPublicKey(t.publicKey.rawBytes,r),validFor:{start:t.publicKey.validFor?.start||RJ,end:t.publicKey.validFor?.end||FJ}}}function dNe(t){return{certChain:t.certChain.certificates.map(e=>TJ.X509Certificate.parse(e.rawBytes)),validFor:{start:t.validFor?.start||RJ,end:t.validFor?.end||FJ}}}function u8t(t){return e=>{let r=(t||{})[e];if(!r)throw new l8t.VerificationError({code:"PUBLIC_KEY_ERROR",message:`key not found: ${e}`});return{publicKey:TJ.crypto.createPublicKey(r.rawBytes),validFor:s=>(r.validFor?.start||RJ)<=s&&(r.validFor?.end||FJ)>=s}}}});var NJ=L(rP=>{"use strict";Object.defineProperty(rP,"__esModule",{value:!0});rP.CertificateChainVerifier=void 0;rP.verifyCertificateChain=A8t;var py=Co(),f8t=Ay();function A8t(t,e){let r=(0,f8t.filterCertAuthorities)(e,{start:t.notBefore,end:t.notAfter}),s;for(let a of r)try{return new CL({trustedCerts:a.certChain,untrustedCert:t}).verify()}catch(n){s=n}throw new py.VerificationError({code:"CERTIFICATE_ERROR",message:"Failed to verify certificate chain",cause:s})}var CL=class{constructor(e){this.untrustedCert=e.untrustedCert,this.trustedCerts=e.trustedCerts,this.localCerts=p8t([...e.trustedCerts,e.untrustedCert])}verify(){let e=this.sort();return this.checkPath(e),e}sort(){let e=this.untrustedCert,r=this.buildPaths(e);if(r=r.filter(a=>a.some(n=>this.trustedCerts.includes(n))),r.length===0)throw new py.VerificationError({code:"CERTIFICATE_ERROR",message:"no trusted certificate path found"});let s=r.reduce((a,n)=>a.length{if(s&&a.extSubjectKeyID){a.extSubjectKeyID.keyIdentifier.equals(s)&&r.push(a);return}a.subject.equals(e.issuer)&&r.push(a)}),r=r.filter(a=>{try{return e.verify(a)}catch{return!1}}),r)}checkPath(e){if(e.length<1)throw new py.VerificationError({code:"CERTIFICATE_ERROR",message:"certificate chain must contain at least one certificate"});if(!e.slice(1).every(s=>s.isCA))throw new py.VerificationError({code:"CERTIFICATE_ERROR",message:"intermediate certificate is not a CA"});for(let s=e.length-2;s>=0;s--)if(!e[s].issuer.equals(e[s+1].subject))throw new py.VerificationError({code:"CERTIFICATE_ERROR",message:"incorrect certificate name chaining"});for(let s=0;s{"use strict";Object.defineProperty(OJ,"__esModule",{value:!0});OJ.verifySCTs=d8t;var wL=wl(),h8t=Co(),g8t=Ay();function d8t(t,e,r){let s,a=t.clone();for(let p=0;p{if(!(0,g8t.filterTLogAuthorities)(r,{logID:p.logID,targetDate:p.datetime}).some(C=>p.verify(n.buffer,C.publicKey)))throw new h8t.VerificationError({code:"CERTIFICATE_ERROR",message:"SCT verification failed"});return p.logID})}});var INe=L(BL=>{"use strict";Object.defineProperty(BL,"__esModule",{value:!0});BL.verifyPublicKey=w8t;BL.verifyCertificate=B8t;var m8t=wl(),ENe=Co(),y8t=NJ(),E8t=yNe(),I8t="1.3.6.1.4.1.57264.1.1",C8t="1.3.6.1.4.1.57264.1.8";function w8t(t,e,r){let s=r.publicKey(t);return e.forEach(a=>{if(!s.validFor(a))throw new ENe.VerificationError({code:"PUBLIC_KEY_ERROR",message:`Public key is not valid for timestamp: ${a.toISOString()}`})}),{key:s.publicKey}}function B8t(t,e,r){let s=(0,y8t.verifyCertificateChain)(t,r.certificateAuthorities);if(!e.every(n=>s.every(c=>c.validForDate(n))))throw new ENe.VerificationError({code:"CERTIFICATE_ERROR",message:"certificate is not valid or expired at the specified date"});return{scts:(0,E8t.verifySCTs)(s[0],s[1],r.ctlogs),signer:v8t(s[0])}}function v8t(t){let e,r=t.extension(C8t);r?e=r.valueObj.subs?.[0]?.value.toString("ascii"):e=t.extension(I8t)?.value.toString("ascii");let s={extensions:{issuer:e},subjectAlternativeName:t.subjectAltName};return{key:m8t.crypto.createPublicKey(t.publicKey),identity:s}}});var wNe=L(vL=>{"use strict";Object.defineProperty(vL,"__esModule",{value:!0});vL.verifySubjectAlternativeName=S8t;vL.verifyExtensions=D8t;var CNe=Co();function S8t(t,e){if(e===void 0||!e.match(t))throw new CNe.PolicyError({code:"UNTRUSTED_SIGNER_ERROR",message:`certificate identity error - expected ${t}, got ${e}`})}function D8t(t,e={}){let r;for(r in t)if(e[r]!==t[r])throw new CNe.PolicyError({code:"UNTRUSTED_SIGNER_ERROR",message:`invalid certificate extension - expected ${r}=${t[r]}, got ${r}=${e[r]}`})}});var BNe=L(HJ=>{"use strict";Object.defineProperty(HJ,"__esModule",{value:!0});HJ.verifyCheckpoint=x8t;var MJ=wl(),E1=Co(),b8t=Ay(),LJ=` - -`,P8t=/\u2014 (\S+) (\S+)\n/g;function x8t(t,e){let r=(0,b8t.filterTLogAuthorities)(e,{targetDate:new Date(Number(t.integratedTime)*1e3)}),s=t.inclusionProof,a=_J.fromString(s.checkpoint.envelope),n=UJ.fromString(a.note);if(!k8t(a,r))throw new E1.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"invalid checkpoint signature"});if(!MJ.crypto.bufferEqual(n.logHash,s.rootHash))throw new E1.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"root hash mismatch"})}function k8t(t,e){let r=Buffer.from(t.note,"utf-8");return t.signatures.every(s=>{let a=e.find(n=>MJ.crypto.bufferEqual(n.logID.subarray(0,4),s.keyHint));return a?MJ.crypto.verify(r,a.publicKey,s.signature):!1})}var _J=class t{constructor(e,r){this.note=e,this.signatures=r}static fromString(e){if(!e.includes(LJ))throw new E1.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"missing checkpoint separator"});let r=e.indexOf(LJ),s=e.slice(0,r+1),n=e.slice(r+LJ.length).matchAll(P8t),c=Array.from(n,f=>{let[,p,h]=f,E=Buffer.from(h,"base64");if(E.length<5)throw new E1.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"malformed checkpoint signature"});return{name:p,keyHint:E.subarray(0,4),signature:E.subarray(4)}});if(c.length===0)throw new E1.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"no signatures found in checkpoint"});return new t(s,c)}},UJ=class t{constructor(e,r,s,a){this.origin=e,this.logSize=r,this.logHash=s,this.rest=a}static fromString(e){let r=e.trimEnd().split(` -`);if(r.length<3)throw new E1.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"too few lines in checkpoint header"});let s=r[0],a=BigInt(r[1]),n=Buffer.from(r[2],"base64"),c=r.slice(3);return new t(s,a,n,c)}}});var vNe=L(WJ=>{"use strict";Object.defineProperty(WJ,"__esModule",{value:!0});WJ.verifyMerkleInclusion=R8t;var GJ=wl(),jJ=Co(),Q8t=Buffer.from([0]),T8t=Buffer.from([1]);function R8t(t){let e=t.inclusionProof,r=BigInt(e.logIndex),s=BigInt(e.treeSize);if(r<0n||r>=s)throw new jJ.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:`invalid index: ${r}`});let{inner:a,border:n}=F8t(r,s);if(e.hashes.length!==a+n)throw new jJ.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"invalid hash count"});let c=e.hashes.slice(0,a),f=e.hashes.slice(a),p=U8t(t.canonicalizedBody),h=O8t(N8t(p,c,r),f);if(!GJ.crypto.bufferEqual(h,e.rootHash))throw new jJ.VerificationError({code:"TLOG_INCLUSION_PROOF_ERROR",message:"calculated root hash does not match inclusion proof"})}function F8t(t,e){let r=L8t(t,e),s=M8t(t>>BigInt(r));return{inner:r,border:s}}function N8t(t,e,r){return e.reduce((s,a,n)=>r>>BigInt(n)&BigInt(1)?qJ(a,s):qJ(s,a),t)}function O8t(t,e){return e.reduce((r,s)=>qJ(s,r),t)}function L8t(t,e){return _8t(t^e-BigInt(1))}function M8t(t){return t.toString(2).split("1").length-1}function _8t(t){return t===0n?0:t.toString(2).length}function qJ(t,e){return GJ.crypto.digest("sha256",T8t,t,e)}function U8t(t){return GJ.crypto.digest("sha256",Q8t,t)}});var DNe=L(YJ=>{"use strict";Object.defineProperty(YJ,"__esModule",{value:!0});YJ.verifyTLogSET=q8t;var SNe=wl(),H8t=Co(),j8t=Ay();function q8t(t,e){if(!(0,j8t.filterTLogAuthorities)(e,{logID:t.logId.keyId,targetDate:new Date(Number(t.integratedTime)*1e3)}).some(a=>{let n=G8t(t),c=Buffer.from(SNe.json.canonicalize(n),"utf8"),f=t.inclusionPromise.signedEntryTimestamp;return SNe.crypto.verify(c,a.publicKey,f)}))throw new H8t.VerificationError({code:"TLOG_INCLUSION_PROMISE_ERROR",message:"inclusion promise could not be verified"})}function G8t(t){let{integratedTime:e,logIndex:r,logId:s,canonicalizedBody:a}=t;return{body:a.toString("base64"),integratedTime:Number(e),logIndex:Number(r),logID:s.keyId.toString("hex")}}});var bNe=L(JJ=>{"use strict";Object.defineProperty(JJ,"__esModule",{value:!0});JJ.verifyRFC3161Timestamp=V8t;var VJ=wl(),KJ=Co(),W8t=NJ(),Y8t=Ay();function V8t(t,e,r){let s=t.signingTime;if(r=(0,Y8t.filterCertAuthorities)(r,{start:s,end:s}),r=J8t(r,{serialNumber:t.signerSerialNumber,issuer:t.signerIssuer}),!r.some(n=>{try{return K8t(t,e,n),!0}catch{return!1}}))throw new KJ.VerificationError({code:"TIMESTAMP_ERROR",message:"timestamp could not be verified"})}function K8t(t,e,r){let[s,...a]=r.certChain,n=VJ.crypto.createPublicKey(s.publicKey),c=t.signingTime;try{new W8t.CertificateChainVerifier({untrustedCert:s,trustedCerts:a}).verify()}catch{throw new KJ.VerificationError({code:"TIMESTAMP_ERROR",message:"invalid certificate chain"})}if(!r.certChain.every(p=>p.validForDate(c)))throw new KJ.VerificationError({code:"TIMESTAMP_ERROR",message:"timestamp was signed with an expired certificate"});t.verify(e,n)}function J8t(t,e){return t.filter(r=>r.certChain.length>0&&VJ.crypto.bufferEqual(r.certChain[0].serialNumber,e.serialNumber)&&VJ.crypto.bufferEqual(r.certChain[0].issuer,e.issuer))}});var PNe=L(SL=>{"use strict";Object.defineProperty(SL,"__esModule",{value:!0});SL.verifyTSATimestamp=tHt;SL.verifyTLogTimestamp=rHt;var z8t=Co(),Z8t=BNe(),X8t=vNe(),$8t=DNe(),eHt=bNe();function tHt(t,e,r){return(0,eHt.verifyRFC3161Timestamp)(t,e,r),{type:"timestamp-authority",logID:t.signerSerialNumber,timestamp:t.signingTime}}function rHt(t,e){let r=!1;if(nHt(t)&&((0,$8t.verifyTLogSET)(t,e),r=!0),iHt(t)&&((0,X8t.verifyMerkleInclusion)(t),(0,Z8t.verifyCheckpoint)(t,e),r=!0),!r)throw new z8t.VerificationError({code:"TLOG_MISSING_INCLUSION_ERROR",message:"inclusion could not be verified"});return{type:"transparency-log",logID:t.logId.keyId,timestamp:new Date(Number(t.integratedTime)*1e3)}}function nHt(t){return t.inclusionPromise!==void 0}function iHt(t){return t.inclusionProof!==void 0}});var xNe=L(zJ=>{"use strict";Object.defineProperty(zJ,"__esModule",{value:!0});zJ.verifyDSSETLogBody=sHt;var DL=Co();function sHt(t,e){switch(t.apiVersion){case"0.0.1":return oHt(t,e);default:throw new DL.VerificationError({code:"TLOG_BODY_ERROR",message:`unsupported dsse version: ${t.apiVersion}`})}}function oHt(t,e){if(t.spec.signatures?.length!==1)throw new DL.VerificationError({code:"TLOG_BODY_ERROR",message:"signature count mismatch"});let r=t.spec.signatures[0].signature;if(!e.compareSignature(Buffer.from(r,"base64")))throw new DL.VerificationError({code:"TLOG_BODY_ERROR",message:"tlog entry signature mismatch"});let s=t.spec.payloadHash?.value||"";if(!e.compareDigest(Buffer.from(s,"hex")))throw new DL.VerificationError({code:"TLOG_BODY_ERROR",message:"DSSE payload hash mismatch"})}});var kNe=L(XJ=>{"use strict";Object.defineProperty(XJ,"__esModule",{value:!0});XJ.verifyHashedRekordTLogBody=aHt;var ZJ=Co();function aHt(t,e){switch(t.apiVersion){case"0.0.1":return lHt(t,e);default:throw new ZJ.VerificationError({code:"TLOG_BODY_ERROR",message:`unsupported hashedrekord version: ${t.apiVersion}`})}}function lHt(t,e){let r=t.spec.signature.content||"";if(!e.compareSignature(Buffer.from(r,"base64")))throw new ZJ.VerificationError({code:"TLOG_BODY_ERROR",message:"signature mismatch"});let s=t.spec.data.hash?.value||"";if(!e.compareDigest(Buffer.from(s,"hex")))throw new ZJ.VerificationError({code:"TLOG_BODY_ERROR",message:"digest mismatch"})}});var QNe=L($J=>{"use strict";Object.defineProperty($J,"__esModule",{value:!0});$J.verifyIntotoTLogBody=cHt;var bL=Co();function cHt(t,e){switch(t.apiVersion){case"0.0.2":return uHt(t,e);default:throw new bL.VerificationError({code:"TLOG_BODY_ERROR",message:`unsupported intoto version: ${t.apiVersion}`})}}function uHt(t,e){if(t.spec.content.envelope.signatures?.length!==1)throw new bL.VerificationError({code:"TLOG_BODY_ERROR",message:"signature count mismatch"});let r=fHt(t.spec.content.envelope.signatures[0].sig);if(!e.compareSignature(Buffer.from(r,"base64")))throw new bL.VerificationError({code:"TLOG_BODY_ERROR",message:"tlog entry signature mismatch"});let s=t.spec.content.payloadHash?.value||"";if(!e.compareDigest(Buffer.from(s,"hex")))throw new bL.VerificationError({code:"TLOG_BODY_ERROR",message:"DSSE payload hash mismatch"})}function fHt(t){return Buffer.from(t,"base64").toString("utf-8")}});var RNe=L(ez=>{"use strict";Object.defineProperty(ez,"__esModule",{value:!0});ez.verifyTLogBody=gHt;var TNe=Co(),AHt=xNe(),pHt=kNe(),hHt=QNe();function gHt(t,e){let{kind:r,version:s}=t.kindVersion,a=JSON.parse(t.canonicalizedBody.toString("utf8"));if(r!==a.kind||s!==a.apiVersion)throw new TNe.VerificationError({code:"TLOG_BODY_ERROR",message:`kind/version mismatch - expected: ${r}/${s}, received: ${a.kind}/${a.apiVersion}`});switch(a.kind){case"dsse":return(0,AHt.verifyDSSETLogBody)(a,e);case"intoto":return(0,hHt.verifyIntotoTLogBody)(a,e);case"hashedrekord":return(0,pHt.verifyHashedRekordTLogBody)(a,e);default:throw new TNe.VerificationError({code:"TLOG_BODY_ERROR",message:`unsupported kind: ${r}`})}}});var MNe=L(PL=>{"use strict";Object.defineProperty(PL,"__esModule",{value:!0});PL.Verifier=void 0;var dHt=Ie("util"),I1=Co(),FNe=INe(),NNe=wNe(),ONe=PNe(),mHt=RNe(),tz=class{constructor(e,r={}){this.trustMaterial=e,this.options={ctlogThreshold:r.ctlogThreshold??1,tlogThreshold:r.tlogThreshold??1,tsaThreshold:r.tsaThreshold??0}}verify(e,r){let s=this.verifyTimestamps(e),a=this.verifySigningKey(e,s);return this.verifyTLogs(e),this.verifySignature(e,a),r&&this.verifyPolicy(r,a.identity||{}),a}verifyTimestamps(e){let r=0,s=0,a=e.timestamps.map(n=>{switch(n.$case){case"timestamp-authority":return s++,(0,ONe.verifyTSATimestamp)(n.timestamp,e.signature.signature,this.trustMaterial.timestampAuthorities);case"transparency-log":return r++,(0,ONe.verifyTLogTimestamp)(n.tlogEntry,this.trustMaterial.tlogs)}});if(LNe(a))throw new I1.VerificationError({code:"TIMESTAMP_ERROR",message:"duplicate timestamp"});if(rn.timestamp)}verifySigningKey({key:e},r){switch(e.$case){case"public-key":return(0,FNe.verifyPublicKey)(e.hint,r,this.trustMaterial);case"certificate":{let s=(0,FNe.verifyCertificate)(e.certificate,r,this.trustMaterial);if(LNe(s.scts))throw new I1.VerificationError({code:"CERTIFICATE_ERROR",message:"duplicate SCT"});if(s.scts.length(0,mHt.verifyTLogBody)(s,e))}verifySignature(e,r){if(!e.signature.verifySignature(r.key))throw new I1.VerificationError({code:"SIGNATURE_ERROR",message:"signature verification failed"})}verifyPolicy(e,r){e.subjectAlternativeName&&(0,NNe.verifySubjectAlternativeName)(e.subjectAlternativeName,r.subjectAlternativeName),e.extensions&&(0,NNe.verifyExtensions)(e.extensions,r.extensions)}};PL.Verifier=tz;function LNe(t){for(let e=0;e{"use strict";Object.defineProperty(ou,"__esModule",{value:!0});ou.Verifier=ou.toTrustMaterial=ou.VerificationError=ou.PolicyError=ou.toSignedEntity=void 0;var yHt=pNe();Object.defineProperty(ou,"toSignedEntity",{enumerable:!0,get:function(){return yHt.toSignedEntity}});var _Ne=Co();Object.defineProperty(ou,"PolicyError",{enumerable:!0,get:function(){return _Ne.PolicyError}});Object.defineProperty(ou,"VerificationError",{enumerable:!0,get:function(){return _Ne.VerificationError}});var EHt=Ay();Object.defineProperty(ou,"toTrustMaterial",{enumerable:!0,get:function(){return EHt.toTrustMaterial}});var IHt=MNe();Object.defineProperty(ou,"Verifier",{enumerable:!0,get:function(){return IHt.Verifier}})});var UNe=L(Na=>{"use strict";Object.defineProperty(Na,"__esModule",{value:!0});Na.DEFAULT_TIMEOUT=Na.DEFAULT_RETRY=void 0;Na.createBundleBuilder=BHt;Na.createKeyFinder=vHt;Na.createVerificationPolicy=SHt;var CHt=wl(),C1=pK(),wHt=xL();Na.DEFAULT_RETRY={retries:2};Na.DEFAULT_TIMEOUT=5e3;function BHt(t,e){let r={signer:DHt(e),witnesses:PHt(e)};switch(t){case"messageSignature":return new C1.MessageSignatureBundleBuilder(r);case"dsseEnvelope":return new C1.DSSEBundleBuilder({...r,certificateChain:e.legacyCompatibility})}}function vHt(t){return e=>{let r=t(e);if(!r)throw new wHt.VerificationError({code:"PUBLIC_KEY_ERROR",message:`key not found: ${e}`});return{publicKey:CHt.crypto.createPublicKey(r),validFor:()=>!0}}}function SHt(t){let e={},r=t.certificateIdentityEmail||t.certificateIdentityURI;return r&&(e.subjectAlternativeName=r),t.certificateIssuer&&(e.extensions={issuer:t.certificateIssuer}),e}function DHt(t){return new C1.FulcioSigner({fulcioBaseURL:t.fulcioURL,identityProvider:t.identityProvider||bHt(t),retry:t.retry??Na.DEFAULT_RETRY,timeout:t.timeout??Na.DEFAULT_TIMEOUT})}function bHt(t){let e=t.identityToken;return e?{getToken:()=>Promise.resolve(e)}:new C1.CIContextProvider("sigstore")}function PHt(t){let e=[];return xHt(t)&&e.push(new C1.RekorWitness({rekorBaseURL:t.rekorURL,entryType:t.legacyCompatibility?"intoto":"dsse",fetchOnConflict:!1,retry:t.retry??Na.DEFAULT_RETRY,timeout:t.timeout??Na.DEFAULT_TIMEOUT})),kHt(t)&&e.push(new C1.TSAWitness({tsaBaseURL:t.tsaServerURL,retry:t.retry??Na.DEFAULT_RETRY,timeout:t.timeout??Na.DEFAULT_TIMEOUT})),e}function xHt(t){return t.tlogUpload!==!1}function kHt(t){return t.tsaServerURL!==void 0}});var qNe=L(au=>{"use strict";var QHt=au&&au.__createBinding||(Object.create?function(t,e,r,s){s===void 0&&(s=r);var a=Object.getOwnPropertyDescriptor(e,r);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,s,a)}:function(t,e,r,s){s===void 0&&(s=r),t[s]=e[r]}),THt=au&&au.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),HNe=au&&au.__importStar||function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var s=[];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(s[s.length]=a);return s},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var s=t(e),a=0;aa.verify(t,s))}async function jNe(t={}){let e=await RHt.getTrustedRoot({mirrorURL:t.tufMirrorURL,rootPath:t.tufRootPath,cachePath:t.tufCachePath,forceCache:t.tufForceCache,retry:t.retry??w1.DEFAULT_RETRY,timeout:t.timeout??w1.DEFAULT_TIMEOUT}),r=t.keySelector?w1.createKeyFinder(t.keySelector):void 0,s=(0,rz.toTrustMaterial)(e,r),a={ctlogThreshold:t.ctLogThreshold,tlogThreshold:t.tlogThreshold},n=new rz.Verifier(s,a),c=w1.createVerificationPolicy(t);return{verify:(f,p)=>{let h=(0,nz.bundleFromJSON)(f),E=(0,rz.toSignedEntity)(h,p);n.verify(E,c)}}}});var WNe=L(Oi=>{"use strict";Object.defineProperty(Oi,"__esModule",{value:!0});Oi.verify=Oi.sign=Oi.createVerifier=Oi.attest=Oi.VerificationError=Oi.PolicyError=Oi.TUFError=Oi.InternalError=Oi.DEFAULT_REKOR_URL=Oi.DEFAULT_FULCIO_URL=Oi.ValidationError=void 0;var LHt=xb();Object.defineProperty(Oi,"ValidationError",{enumerable:!0,get:function(){return LHt.ValidationError}});var iz=pK();Object.defineProperty(Oi,"DEFAULT_FULCIO_URL",{enumerable:!0,get:function(){return iz.DEFAULT_FULCIO_URL}});Object.defineProperty(Oi,"DEFAULT_REKOR_URL",{enumerable:!0,get:function(){return iz.DEFAULT_REKOR_URL}});Object.defineProperty(Oi,"InternalError",{enumerable:!0,get:function(){return iz.InternalError}});var MHt=gL();Object.defineProperty(Oi,"TUFError",{enumerable:!0,get:function(){return MHt.TUFError}});var GNe=xL();Object.defineProperty(Oi,"PolicyError",{enumerable:!0,get:function(){return GNe.PolicyError}});Object.defineProperty(Oi,"VerificationError",{enumerable:!0,get:function(){return GNe.VerificationError}});var kL=qNe();Object.defineProperty(Oi,"attest",{enumerable:!0,get:function(){return kL.attest}});Object.defineProperty(Oi,"createVerifier",{enumerable:!0,get:function(){return kL.createVerifier}});Object.defineProperty(Oi,"sign",{enumerable:!0,get:function(){return kL.sign}});Object.defineProperty(Oi,"verify",{enumerable:!0,get:function(){return kL.verify}})});var IOe=L((Fvr,EOe)=>{var Kjt=Y4();function Jjt(t){return Kjt(t)?void 0:t}EOe.exports=Jjt});var wOe=L((Nvr,COe)=>{var zjt=QT(),Zjt=w5(),Xjt=D5(),$jt=Im(),e6t=Vd(),t6t=IOe(),r6t=dG(),n6t=C5(),i6t=1,s6t=2,o6t=4,a6t=r6t(function(t,e){var r={};if(t==null)return r;var s=!1;e=zjt(e,function(n){return n=$jt(n,t),s||(s=n.length>1),n}),e6t(t,n6t(t),r),s&&(r=Zjt(r,i6t|s6t|o6t,t6t));for(var a=e.length;a--;)Xjt(r,e[a]);return r});COe.exports=a6t});bt();Ve();bt();var bOe=Ie("child_process"),POe=et(Rd());Wt();var $I=new Map([]);var $v={};Vt($v,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>ar,getCli:()=>XCe,getDynamicLibs:()=>ZCe,getPluginConfiguration:()=>tC,openWorkspace:()=>eC,pluginCommands:()=>$I,runExit:()=>KR});Wt();var ut=class extends ot{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new nt("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ve();bt();Wt();var ar=class extends nt{constructor(e,r){let s=K.relative(e,r),a=K.join(e,Ht.fileName);super(`This command can only be run from within a workspace of your project (${s} isn't a workspace of ${a}).`)}};Ve();bt();rA();Bc();wv();Wt();var mwt=et(Ai());Ul();var ZCe=()=>new Map([["@yarnpkg/cli",$v],["@yarnpkg/core",Xv],["@yarnpkg/fslib",U2],["@yarnpkg/libzip",Iv],["@yarnpkg/parsers",K2],["@yarnpkg/shell",Dv],["clipanion",oB],["semver",mwt],["typanion",Ia]]);Ve();async function eC(t,e){let{project:r,workspace:s}=await Tt.find(t,e);if(!s)throw new ar(r.cwd,e);return s}Ve();bt();rA();Bc();wv();Wt();var d6t=et(Ai());Ul();var Y5={};Vt(Y5,{AddCommand:()=>sC,BinCommand:()=>oC,CacheCleanCommand:()=>aC,ClipanionCommand:()=>pC,ConfigCommand:()=>fC,ConfigGetCommand:()=>lC,ConfigSetCommand:()=>cC,ConfigUnsetCommand:()=>uC,DedupeCommand:()=>AC,EntryCommand:()=>gC,ExecCommand:()=>mC,ExplainCommand:()=>IC,ExplainPeerRequirementsCommand:()=>yC,HelpCommand:()=>hC,InfoCommand:()=>CC,LinkCommand:()=>BC,NodeCommand:()=>vC,PluginCheckCommand:()=>SC,PluginImportCommand:()=>PC,PluginImportSourcesCommand:()=>xC,PluginListCommand:()=>DC,PluginRemoveCommand:()=>kC,PluginRuntimeCommand:()=>QC,RebuildCommand:()=>TC,RemoveCommand:()=>RC,RunCommand:()=>NC,RunIndexCommand:()=>FC,SetResolutionCommand:()=>OC,SetVersionCommand:()=>EC,SetVersionSourcesCommand:()=>bC,UnlinkCommand:()=>LC,UpCommand:()=>MC,VersionCommand:()=>dC,WhyCommand:()=>_C,WorkspaceCommand:()=>GC,WorkspacesListCommand:()=>qC,YarnCommand:()=>wC,dedupeUtils:()=>iF,default:()=>ASt,suggestUtils:()=>Xu});var xBe=et(Rd());Ve();Ve();Ve();Wt();var _1e=et(nS());Ul();var Xu={};Vt(Xu,{Modifier:()=>d5,Strategy:()=>tF,Target:()=>iS,WorkspaceModifier:()=>F1e,applyModifier:()=>L1t,extractDescriptorFromPath:()=>m5,extractRangeModifier:()=>N1e,fetchDescriptorFrom:()=>y5,findProjectDescriptors:()=>M1e,getModifier:()=>sS,getSuggestedDescriptors:()=>oS,makeWorkspaceDescriptor:()=>L1e,toWorkspaceModifier:()=>O1e});Ve();Ve();bt();var g5=et(Ai()),N1t="workspace:",iS=(s=>(s.REGULAR="dependencies",s.DEVELOPMENT="devDependencies",s.PEER="peerDependencies",s))(iS||{}),d5=(s=>(s.CARET="^",s.TILDE="~",s.EXACT="",s))(d5||{}),F1e=(s=>(s.CARET="^",s.TILDE="~",s.EXACT="*",s))(F1e||{}),tF=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(tF||{});function sS(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var O1t=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function N1e(t,{project:e}){let r=t.match(O1t);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function L1t(t,e){let{protocol:r,source:s,params:a,selector:n}=q.parseRange(t.range);return g5.default.valid(n)&&(n=`${e}${t.range}`),q.makeDescriptor(t,q.makeRange({protocol:r,source:s,params:a,selector:n}))}function O1e(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function L1e(t,e){return q.makeDescriptor(t.anchoredDescriptor,`${N1t}${O1e(e)}`)}async function M1e(t,{project:e,target:r}){let s=new Map,a=n=>{let c=s.get(n.descriptorHash);return c||s.set(n.descriptorHash,c={descriptor:n,locators:[]}),c};for(let n of e.workspaces)if(r==="peerDependencies"){let c=n.manifest.peerDependencies.get(t.identHash);c!==void 0&&a(c).locators.push(n.anchoredLocator)}else{let c=n.manifest.dependencies.get(t.identHash),f=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?f!==void 0?a(f).locators.push(n.anchoredLocator):c!==void 0&&a(c).locators.push(n.anchoredLocator):c!==void 0?a(c).locators.push(n.anchoredLocator):f!==void 0&&a(f).locators.push(n.anchoredLocator)}return s}async function m5(t,{cwd:e,workspace:r}){return await _1t(async s=>{K.isAbsolute(t)||(t=K.relative(r.cwd,K.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await y5(q.makeIdent(null,"archive"),t,{project:r.project,cache:s,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let c=new Yi,f=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:s,fetcher:p,report:c,resolver:f},E=f.bindDescriptor(n,r.anchoredLocator,h),C=q.convertDescriptorToLocator(E),S=await p.fetch(C,h),P=await Ht.find(S.prefixPath,{baseFs:S.packageFs});if(!P.name)throw new Error("Target path doesn't have a name");return q.makeDescriptor(P.name,t)})}function M1t(t){if(t.range==="unknown")return{type:"resolve",range:"latest"};if(Or.validRange(t.range))return{type:"fixed",range:t.range};if(Up.test(t.range))return{type:"resolve",range:t.range};let e=t.range.match(/^(?:jsr:|npm:)(.*)/);if(!e)return{type:"fixed",range:t.range};let[,r]=e,s=`${q.stringifyIdent(t)}@`;return r.startsWith(s)&&(r=r.slice(s.length)),Or.validRange(r)?{type:"fixed",range:t.range}:Up.test(r)?{type:"resolve",range:t.range}:{type:"fixed",range:t.range}}async function oS(t,{project:e,workspace:r,cache:s,target:a,fixed:n,modifier:c,strategies:f,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let h=!n||t.range==="unknown"?M1t(t):{type:"fixed",range:t.range};if(h.type==="fixed")return{suggestions:[{descriptor:t,name:`Use ${q.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let E=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,C=[],S=[],P=async I=>{try{await I()}catch(R){S.push(R)}};for(let I of f){if(C.length>=p)break;switch(I){case"keep":await P(async()=>{E&&C.push({descriptor:E,name:`Keep ${q.prettyDescriptor(e.configuration,E)}`,reason:"(no changes)"})});break;case"reuse":await P(async()=>{for(let{descriptor:R,locators:N}of(await M1e(t,{project:e,target:a})).values()){if(N.length===1&&N[0].locatorHash===r.anchoredLocator.locatorHash&&f.includes("keep"))continue;let U=`(originally used by ${q.prettyLocator(e.configuration,N[0])}`;U+=N.length>1?` and ${N.length-1} other${N.length>2?"s":""})`:")",C.push({descriptor:R,name:`Reuse ${q.prettyDescriptor(e.configuration,R)}`,reason:U})}});break;case"cache":await P(async()=>{for(let R of e.storedDescriptors.values())R.identHash===t.identHash&&C.push({descriptor:R,name:`Reuse ${q.prettyDescriptor(e.configuration,R)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await P(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let R=e.tryWorkspaceByIdent(t);if(R===null)return;let N=L1e(R,c);C.push({descriptor:N,name:`Attach ${q.prettyDescriptor(e.configuration,N)}`,reason:`(local workspace at ${he.pretty(e.configuration,R.relativeCwd,he.Type.PATH)})`})});break;case"latest":{let R=e.configuration.get("enableNetwork"),N=e.configuration.get("enableOfflineMode");await P(async()=>{if(a==="peerDependencies")C.push({descriptor:q.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!R&&!N)C.push({descriptor:null,name:"Resolve from latest",reason:he.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let U=await y5(t,h.range,{project:e,cache:s,workspace:r,modifier:c});U&&C.push({descriptor:U,name:`Use ${q.prettyDescriptor(e.configuration,U)}`,reason:`(resolved from ${N?"the cache":"latest"})`})}})}break}}return{suggestions:C.slice(0,p),rejections:S.slice(0,p)}}async function y5(t,e,{project:r,cache:s,workspace:a,preserveModifier:n=!0,modifier:c}){let f=r.configuration.normalizeDependency(q.makeDescriptor(t,e)),p=new Yi,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),C={project:r,fetcher:h,cache:s,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},S={...C,resolver:E,fetchOptions:C},P=E.bindDescriptor(f,a.anchoredLocator,S),I=await E.getCandidates(P,{},S);if(I.length===0)return null;let R=I[0],{protocol:N,source:U,params:W,selector:te}=q.parseRange(q.convertToManifestRange(R.reference));if(N===r.configuration.get("defaultProtocol")&&(N=null),g5.default.valid(te)){let ie=te;if(typeof c<"u")te=c+te;else if(n!==!1){let me=typeof n=="string"?n:f.range;te=N1e(me,{project:r})+te}let Ae=q.makeDescriptor(R,q.makeRange({protocol:N,source:U,params:W,selector:te}));(await E.getCandidates(r.configuration.normalizeDependency(Ae),{},S)).length!==1&&(te=ie)}return q.makeDescriptor(R,q.makeRange({protocol:N,source:U,params:W,selector:te}))}async function _1t(t){return await le.mktempPromise(async e=>{let r=ze.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Jr(e,{configuration:r,check:!1,immutable:!1}))})}var sC=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=ge.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=ge.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=ge.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=ge.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=ge.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=ge.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:po(ec)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.Rest()}static{this.paths=[["add"]]}static{this.usage=ot.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"],["Add a local package (gzipped tarball format) to the current workspace","$0 add local-package-name@file:../path/to/local-package-name-v0.1.2.tgz"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState({restoreResolutions:!1});let c=this.fixed,f=r.isInteractive({interactive:this.interactive,stdout:this.context.stdout}),p=f||r.get("preferReuse"),h=sS(this,s),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(W=>typeof W<"u"),C=f?1/0:1,S=W=>{let te=q.tryParseDescriptor(W.slice(4));return te?te.range==="unknown"?q.makeDescriptor(te,`jsr:${q.stringifyIdent(te)}@latest`):q.makeDescriptor(te,`jsr:${te.range}`):null},P=await Promise.all(this.packages.map(async W=>{let te=W.match(/^\.{0,2}\//)?await m5(W,{cwd:this.context.cwd,workspace:a}):W.startsWith("jsr:")?S(W):q.tryParseDescriptor(W),ie=W.match(/^(https?:|git@github)/);if(ie)throw new nt(`It seems you are trying to add a package using a ${he.pretty(r,`${ie[0]}...`,he.Type.RANGE)} url; we now require package names to be explicitly specified. -Try running the command again with the package name prefixed: ${he.pretty(r,"yarn add",he.Type.CODE)} ${he.pretty(r,q.makeDescriptor(q.makeIdent(null,"my-package"),`${ie[0]}...`),he.Type.DESCRIPTOR)}`);if(!te)throw new nt(`The ${he.pretty(r,W,he.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let Ae=U1t(a,te,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(Ae.map(async me=>{let pe=await oS(te,{project:s,workspace:a,cache:n,fixed:c,target:me,modifier:h,strategies:E,maxResults:C});return{request:te,suggestedDescriptors:pe,target:me}}))})).then(W=>W.flat()),I=await uA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async W=>{for(let{request:te,suggestedDescriptors:{suggestions:ie,rejections:Ae}}of P)if(ie.filter(me=>me.descriptor!==null).length===0){let[me]=Ae;if(typeof me>"u")throw new Error("Assertion failed: Expected an error to have been set");s.configuration.get("enableNetwork")?W.reportError(27,`${q.prettyDescriptor(r,te)} can't be resolved to a satisfying range`):W.reportError(27,`${q.prettyDescriptor(r,te)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),W.reportSeparator(),W.reportExceptionOnce(me)}});if(I.hasErrors())return I.exitCode();let R=!1,N=[],U=[];for(let{suggestedDescriptors:{suggestions:W},target:te}of P){let ie,Ae=W.filter(Be=>Be.descriptor!==null),ce=Ae[0].descriptor,me=Ae.every(Be=>q.areDescriptorsEqual(Be.descriptor,ce));Ae.length===1||me?ie=ce:(R=!0,{answer:ie}=await(0,_1e.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:W.map(({descriptor:Be,name:Ce,reason:g})=>Be?{name:Ce,hint:g,descriptor:Be}:{name:Ce,hint:g,disabled:!0}),onCancel:()=>process.exit(130),result(Be){return this.find(Be,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let pe=a.manifest[te].get(ie.identHash);(typeof pe>"u"||pe.descriptorHash!==ie.descriptorHash)&&(a.manifest[te].set(ie.identHash,ie),this.optional&&(te==="dependencies"?a.manifest.ensureDependencyMeta({...ie,range:"unknown"}).optional=!0:te==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...ie,range:"unknown"}).optional=!0)),typeof pe>"u"?N.push([a,te,ie,E]):U.push([a,te,pe,ie]))}return await r.triggerMultipleHooks(W=>W.afterWorkspaceDependencyAddition,N),await r.triggerMultipleHooks(W=>W.afterWorkspaceDependencyReplacement,U),R&&this.context.stdout.write(` -`),await s.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};function U1t(t,e,{dev:r,peer:s,preferDev:a,optional:n}){let c=t.manifest.dependencies.has(e.identHash),f=t.manifest.devDependencies.has(e.identHash),p=t.manifest.peerDependencies.has(e.identHash);if((r||s)&&c)throw new nt(`Package "${q.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!s&&p)throw new nt(`Package "${q.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(n&&f)throw new nt(`Package "${q.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(n&&!s&&p)throw new nt(`Package "${q.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||a)&&n)throw new nt(`Package "${q.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return s&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:f?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ve();Ve();Wt();var oC=class extends ut{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=ge.String({required:!1})}static{this.paths=[["bin"]]}static{this.usage=ot.Usage({description:"get the path to a binary script",details:` - When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \`-v,--verbose\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary. - - When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive. - `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,locator:a}=await Tt.find(r,this.context.cwd);if(await s.restoreInstallState(),this.name){let f=(await In.getPackageAccessibleBinaries(a,{project:s})).get(this.name);if(!f)throw new nt(`Couldn't find a binary named "${this.name}" for package "${q.prettyLocator(r,a)}"`);let[,p]=f;return this.context.stdout.write(`${p} -`),0}return(await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async c=>{let f=await In.getPackageAccessibleBinaries(a,{project:s}),h=Array.from(f.keys()).reduce((E,C)=>Math.max(E,C.length),0);for(let[E,[C,S]]of f)c.reportJson({name:E,source:q.stringifyIdent(C),path:S});if(this.verbose)for(let[E,[C]]of f)c.reportInfo(null,`${E.padEnd(h," ")} ${q.prettyLocator(r,C)}`);else for(let E of f.keys())c.reportInfo(null,E)})).exitCode()}};Ve();bt();Wt();var aC=class extends ut{constructor(){super(...arguments);this.mirror=ge.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=ge.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}static{this.paths=[["cache","clean"],["cache","clear"]]}static{this.usage=ot.Usage({description:"remove the shared cache files",details:` - This command will remove all the files from the cache. - `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);if(!r.get("enableCacheClean"))throw new nt("Cache cleaning is currently disabled. To enable it, set `enableCacheClean: true` in your configuration file. Note: Cache cleaning is typically not required and should be avoided when using Zero-Installs.");let s=await Jr.find(r);return(await Ot.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&s.mirrorCwd!==null,c=!this.mirror;n&&(await le.removePromise(s.mirrorCwd),await r.triggerHook(f=>f.cleanGlobalArtifacts,r)),c&&await le.removePromise(s.cwd)})).exitCode()}};Ve();Wt();var H1e=et(aS()),E5=Ie("util"),lC=class extends ut{constructor(){super(...arguments);this.why=ge.Boolean("--why",!1,{description:"Print the explanation for why a setting has its value"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=ge.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=ge.String()}static{this.paths=[["config","get"]]}static{this.usage=ot.Usage({description:"read a configuration settings",details:` - This command will print a configuration setting. - - Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \`--no-redacted\` to get the untransformed value. - `,examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration",`yarn config get 'npmScopes["my-company"].npmRegistryServer'`],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),s=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(s)>"u")throw new nt(`Couldn't find a configuration settings named "${s}"`);let c=r.getSpecial(s,{hideSecrets:!this.unsafe,getNativePaths:!0}),f=je.convertMapsToIndexableObjects(c),p=a?(0,H1e.default)(f,a):f,h=await Ot.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async E=>{E.reportJson(p)});if(!this.json){if(typeof p=="string")return this.context.stdout.write(`${p} -`),h.exitCode();E5.inspect.styles.name="cyan",this.context.stdout.write(`${(0,E5.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} -`)}return h.exitCode()}};Ve();Wt();var Q2e=et(B5()),T2e=et(aS()),R2e=et(v5()),S5=Ie("util"),cC=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String();this.value=ge.String()}static{this.paths=[["config","set"]]}static{this.usage=ot.Usage({description:"change a configuration settings",details:` - This command will set a configuration setting. - - When used without the \`--json\` flag, it can only set a simple configuration setting (a string, a number, or a boolean). - - When used with the \`--json\` flag, it can set both simple and complex configuration settings, including Arrays and Objects. - `,examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",`yarn config set unsafeHttpWhitelist --json '["*.example.com", "example.com"]'`],["Set a complex configuration setting (an Object) using the `--json` flag",`yarn config set packageExtensions --json '{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }'`],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",`yarn config set 'npmRegistries["//npm.example.com"].npmAuthToken' "ffffffff-ffff-ffff-ffff-ffffffffffff"`]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),s=()=>{if(!r.projectCwd)throw new nt("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new nt(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new nt("This setting only affects the file it's in, and thus cannot be set from the CLI");let f=this.json?JSON.parse(this.value):this.value;await(this.home?I=>ze.updateHomeConfiguration(I):I=>ze.updateConfiguration(s(),I))(I=>{if(n){let R=(0,Q2e.default)(I);return(0,R2e.default)(R,this.name,f),R}else return{...I,[a]:f}});let E=(await ze.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),C=je.convertMapsToIndexableObjects(E),S=n?(0,T2e.default)(C,n):C;return(await Ot.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async I=>{S5.inspect.styles.name="cyan",I.reportInfo(0,`Successfully set ${this.name} to ${(0,S5.inspect)(S,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Ve();Wt();var G2e=et(B5()),W2e=et(L2e()),Y2e=et(b5()),uC=class extends ut{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String()}static{this.paths=[["config","unset"]]}static{this.usage=ot.Usage({description:"unset a configuration setting",details:` - This command will unset a configuration setting. - `,examples:[["Unset a simple configuration setting","yarn config unset initScope"],["Unset a complex configuration setting","yarn config unset packageExtensions"],["Unset a nested configuration setting","yarn config unset npmScopes.company.npmRegistryServer"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),s=()=>{if(!r.projectCwd)throw new nt("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new nt(`Couldn't find a configuration settings named "${a}"`);let f=this.home?h=>ze.updateHomeConfiguration(h):h=>ze.updateConfiguration(s(),h);return(await Ot.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await f(C=>{if(!(0,W2e.default)(C,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,C;let S=n?(0,G2e.default)(C):{...C};return(0,Y2e.default)(S,this.name),S}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Ve();bt();Wt();var nF=Ie("util"),fC=class extends ut{constructor(){super(...arguments);this.noDefaults=ge.Boolean("--no-defaults",!1,{description:"Omit the default values from the display"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.verbose=ge.Boolean("-v,--verbose",{hidden:!0});this.why=ge.Boolean("--why",{hidden:!0});this.names=ge.Rest()}static{this.paths=[["config"]]}static{this.usage=ot.Usage({description:"display the current configuration",details:` - This command prints the current active configuration settings. - `,examples:[["Print the active configuration settings","$0 config"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins,{strict:!1}),s=await vI({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(s!==null)return s;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,c=await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async f=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)f.reportError(34,`Invalid configuration key "${p}" in ${h}`);f.reportSeparator()}if(this.json)for(let p of a){if(this.noDefaults&&!r.sources.has(p))continue;let h=r.settings.get(p);typeof h>"u"&&f.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),C=r.sources.get(p)??"",S=C&&C[0]!=="<"?ue.fromPortablePath(C):C;f.reportJson({key:p,effective:E,source:S,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let C of a){if(this.noDefaults&&!r.sources.has(C))continue;let S=r.settings.get(C),P=r.sources.get(C)??"",I=r.getSpecial(C,{hideSecrets:!0,getNativePaths:!0}),R={Description:{label:"Description",value:he.tuple(he.Type.MARKDOWN,{text:S.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:he.tuple(P[0]==="<"?he.Type.CODE:he.Type.PATH,P)}};h[C]={value:he.tuple(he.Type.CODE,C),children:R};let N=(U,W)=>{for(let[te,ie]of W)if(ie instanceof Map){let Ae={};U[te]={children:Ae},N(Ae,ie)}else U[te]={label:te,value:he.tuple(he.Type.NO_HINT,(0,nF.inspect)(ie,p))}};I instanceof Map?N(R,I):R.Value={label:"Value",value:he.tuple(he.Type.NO_HINT,(0,nF.inspect)(I,p))}}a.length!==1&&(n=void 0),Qs.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let f=a[0],p=(0,nF.inspect)(r.getSpecial(f,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` -`),this.context.stdout.write(`${p} -`)}return c.exitCode()}};Ve();Wt();Ul();var iF={};Vt(iF,{Strategy:()=>lS,acceptedStrategies:()=>wvt,dedupe:()=>P5});Ve();Ve();var V2e=et(Sa()),lS=(e=>(e.HIGHEST="highest",e))(lS||{}),wvt=new Set(Object.values(lS)),Bvt={highest:async(t,e,{resolver:r,fetcher:s,resolveOptions:a,fetchOptions:n})=>{let c=new Map;for(let[p,h]of t.storedResolutions){let E=t.storedDescriptors.get(p);if(typeof E>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);je.getSetWithDefault(c,E.identHash).add(h)}let f=new Map(je.mapAndFilter(t.storedDescriptors.values(),p=>q.isVirtualDescriptor(p)?je.mapAndFilter.skip:[p.descriptorHash,je.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=f.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let E=t.storedResolutions.get(p.descriptorHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let C=t.originalPackages.get(E);if(typeof C>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let S=r.getResolutionDependencies(p,a),P=Object.fromEntries(await je.allSettledSafe(Object.entries(S).map(async([te,ie])=>{let Ae=f.get(ie.descriptorHash);if(typeof Ae>"u")throw new Error(`Assertion failed: The descriptor (${ie.descriptorHash}) should have been registered`);let ce=await Ae.promise;if(!ce)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,ce.updatedPackage]})));if(e.length&&!V2e.default.isMatch(q.stringifyIdent(p),e)||!r.shouldPersistResolution(C,a))return C;let I=c.get(p.identHash);if(typeof I>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(I.size===1)return C;let R=[...I].map(te=>{let ie=t.originalPackages.get(te);if(typeof ie>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return ie}),N=await r.getSatisfying(p,P,R,a),U=N.locators?.[0];if(typeof U>"u"||!N.sorted)return C;let W=t.originalPackages.get(U.locatorHash);if(typeof W>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return W}).then(async S=>{let P=await t.preparePackage(S,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:C,updatedPackage:S,resolvedPackage:P})}).catch(S=>{h.reject(S)})}return[...f.values()].map(p=>p.promise)}};async function P5(t,{strategy:e,patterns:r,cache:s,report:a}){let{configuration:n}=t,c=new Yi,f=n.makeResolver(),p=n.makeFetcher(),h={cache:s,checksums:t.storedChecksums,fetcher:p,project:t,report:c,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:f,report:c,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let C=Bvt[e],S=await C(t,r,{resolver:f,resolveOptions:E,fetcher:p,fetchOptions:h}),P=ho.progressViaCounter(S.length);await a.reportProgress(P);let I=0;await Promise.all(S.map(U=>U.then(W=>{if(W===null||W.currentPackage.locatorHash===W.updatedPackage.locatorHash)return;I++;let{descriptor:te,currentPackage:ie,updatedPackage:Ae}=W;a.reportInfo(0,`${q.prettyDescriptor(n,te)} can be deduped from ${q.prettyLocator(n,ie)} to ${q.prettyLocator(n,Ae)}`),a.reportJson({descriptor:q.stringifyDescriptor(te),currentResolution:q.stringifyLocator(ie),updatedResolution:q.stringifyLocator(Ae)}),t.storedResolutions.set(te.descriptorHash,Ae.locatorHash)}).finally(()=>P.tick())));let R;switch(I){case 0:R="No packages";break;case 1:R="One package";break;default:R=`${I} packages`}let N=he.pretty(n,e,he.Type.CODE);return a.reportInfo(0,`${R} can be deduped using the ${N} strategy`),I})}var AC=class extends ut{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:po(lS)});this.check=ge.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:po(ec)});this.patterns=ge.Rest()}static{this.paths=[["dedupe"]]}static{this.usage=ot.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s}=await Tt.find(r,this.context.cwd),a=await Jr.find(r);await s.restoreInstallState({restoreResolutions:!1});let n=0,c=await Ot.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async f=>{n=await P5(s,{strategy:this.strategy,patterns:this.patterns,cache:a,report:f})});return c.hasErrors()?c.exitCode():this.check?n?1:0:await s.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Ve();Wt();var pC=class extends ut{static{this.paths=[["--clipanion=definitions"]]}async execute(){let{plugins:e}=await ze.find(this.context.cwd,this.context.plugins),r=[];for(let c of e){let{commands:f}=c[1];if(f){let h=wa.from(f).definitions();r.push([c[0],h])}}let s=this.cli.definitions(),a=(c,f)=>c.split(" ").slice(1).join()===f.split(" ").slice(1).join(),n=K2e()["@yarnpkg/builder"].bundles.standard;for(let c of r){let f=c[1];for(let p of f)s.find(h=>a(h.path,p.path)).plugin={name:c[0],isDefault:n.includes(c[0])}}this.context.stdout.write(`${JSON.stringify(s,null,2)} -`)}};var hC=class extends ut{static{this.paths=[["help"],["--help"],["-h"]]}async execute(){this.context.stdout.write(this.cli.usage(null))}};Ve();bt();Wt();var gC=class extends ut{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!q.tryParseIdent(this.leadingArgument)){let r=K.resolve(this.context.cwd,ue.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ve();var dC=class extends ut{static{this.paths=[["-v"],["--version"]]}async execute(){this.context.stdout.write(`${un||""} -`)}};Ve();Ve();Wt();var mC=class extends ut{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.Proxy()}static{this.paths=[["exec"]]}static{this.usage=ot.Usage({description:"execute a shell script",details:` - This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell. - - It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). - `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,locator:a}=await Tt.find(r,this.context.cwd);return await s.restoreInstallState(),await In.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:s})}};Ve();Wt();Ul();var yC=class extends ut{constructor(){super(...arguments);this.hash=ge.String({required:!1,validator:qx(IE(),[X2(/^p[0-9a-f]{5}$/)])})}static{this.paths=[["explain","peer-requirements"]]}static{this.usage=ot.Usage({description:"explain a set of peer requirements",details:` - A peer requirement represents all peer requests that a subject must satisfy when providing a requested package to requesters. - - When the hash argument is specified, this command prints a detailed explanation of the peer requirement corresponding to the hash and whether it is satisfied or not. - - When used without arguments, this command lists all peer requirements and the corresponding hash that can be used to get detailed information about a given requirement. - - **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\`yarn explain peer-requirements\`). - `,examples:[["Explain the corresponding peer requirement for a hash","$0 explain peer-requirements p1a4ed"],["List all peer requirements","$0 explain peer-requirements"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s}=await Tt.find(r,this.context.cwd);return await s.restoreInstallState({restoreResolutions:!1}),await s.applyLightResolution(),typeof this.hash<"u"?await Svt(this.hash,s,{stdout:this.context.stdout}):await Dvt(s,{stdout:this.context.stdout})}};async function Svt(t,e,r){let s=e.peerRequirementNodes.get(t);if(typeof s>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);let a=new Set,n=p=>a.has(p.requester.locatorHash)?{value:he.tuple(he.Type.DEPENDENT,{locator:p.requester,descriptor:p.descriptor}),children:p.children.size>0?[{value:he.tuple(he.Type.NO_HINT,"...")}]:[]}:(a.add(p.requester.locatorHash),{value:he.tuple(he.Type.DEPENDENT,{locator:p.requester,descriptor:p.descriptor}),children:Object.fromEntries(Array.from(p.children.values(),h=>[q.stringifyLocator(h.requester),n(h)]))}),c=e.peerWarnings.find(p=>p.hash===t);return(await Ot.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async p=>{let h=he.mark(e.configuration),E=c?h.Cross:h.Check;if(p.reportInfo(0,`Package ${he.pretty(e.configuration,s.subject,he.Type.LOCATOR)} is requested to provide ${he.pretty(e.configuration,s.ident,he.Type.IDENT)} by its descendants`),p.reportSeparator(),p.reportInfo(0,he.pretty(e.configuration,s.subject,he.Type.LOCATOR)),Qs.emitTree({children:Object.fromEntries(Array.from(s.requests.values(),C=>[q.stringifyLocator(C.requester),n(C)]))},{configuration:e.configuration,stdout:r.stdout,json:!1}),p.reportSeparator(),s.provided.range==="missing:"){let C=c?"":" , but all peer requests are optional";p.reportInfo(0,`${E} Package ${he.pretty(e.configuration,s.subject,he.Type.LOCATOR)} does not provide ${he.pretty(e.configuration,s.ident,he.Type.IDENT)}${C}.`)}else{let C=e.storedResolutions.get(s.provided.descriptorHash);if(!C)throw new Error("Assertion failed: Expected the descriptor to be registered");let S=e.storedPackages.get(C);if(!S)throw new Error("Assertion failed: Expected the package to be registered");p.reportInfo(0,`${E} Package ${he.pretty(e.configuration,s.subject,he.Type.LOCATOR)} provides ${he.pretty(e.configuration,s.ident,he.Type.IDENT)} with version ${q.prettyReference(e.configuration,S.version??"0.0.0")}, ${c?"which does not satisfy all requests.":"which satisfies all requests"}`),c?.type===3&&(c.range?p.reportInfo(0,` The combined requested range is ${he.pretty(e.configuration,c.range,he.Type.RANGE)}`):p.reportInfo(0," Unfortunately, the requested ranges have no overlap"))}})).exitCode()}async function Dvt(t,e){return(await Ot.start({configuration:t.configuration,stdout:e.stdout,includeFooter:!1,includePrefix:!1},async s=>{let a=he.mark(t.configuration),n=je.sortMap(t.peerRequirementNodes,[([,c])=>q.stringifyLocator(c.subject),([,c])=>q.stringifyIdent(c.ident)]);for(let[,c]of n.values()){if(!c.root)continue;let f=t.peerWarnings.find(E=>E.hash===c.hash),p=[...q.allPeerRequests(c)],h;if(p.length>2?h=` and ${p.length-1} other dependencies`:p.length===2?h=" and 1 other dependency":h="",c.provided.range!=="missing:"){let E=t.storedResolutions.get(c.provided.descriptorHash);if(!E)throw new Error("Assertion failed: Expected the resolution to have been registered");let C=t.storedPackages.get(E);if(!C)throw new Error("Assertion failed: Expected the provided package to have been registered");let S=`${he.pretty(t.configuration,c.hash,he.Type.CODE)} \u2192 ${f?a.Cross:a.Check} ${q.prettyLocator(t.configuration,c.subject)} provides ${q.prettyLocator(t.configuration,C)} to ${q.prettyLocator(t.configuration,p[0].requester)}${h}`;f?s.reportWarning(0,S):s.reportInfo(0,S)}else{let E=`${he.pretty(t.configuration,c.hash,he.Type.CODE)} \u2192 ${f?a.Cross:a.Check} ${q.prettyLocator(t.configuration,c.subject)} doesn't provide ${q.prettyIdent(t.configuration,c.ident)} to ${q.prettyLocator(t.configuration,p[0].requester)}${h}`;f?s.reportWarning(0,E):s.reportInfo(0,E)}}})).exitCode()}Ve();Wt();Ul();Ve();Ve();bt();Wt();var J2e=et(Ai()),EC=class extends ut{constructor(){super(...arguments);this.useYarnPath=ge.Boolean("--yarn-path",{description:"Set the yarnPath setting even if the version can be accessed by Corepack"});this.onlyIfNeeded=ge.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=ge.String()}static{this.paths=[["set","version"]]}static{this.usage=ot.Usage({description:"lock the Yarn version used by the project",details:"\n This command will set a specific release of Yarn to be used by Corepack: https://nodejs.org/api/corepack.html.\n\n By default it only will set the `packageManager` field at the root of your project, but if the referenced release cannot be represented this way, if you already have `yarnPath` configured, or if you set the `--yarn-path` command line flag, then the release will also be downloaded from the Yarn GitHub repository, stored inside your project, and referenced via the `yarnPath` settings from your project `.yarnrc.yml` file.\n\n A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\n\n The version specifier can be:\n\n - a tag:\n - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\n - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\n - `classic` -> the most recent classic (`^0.x || ^1.x`) release\n\n - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\n\n - a semver version (e.g. `2.4.1`, `1.22.1`)\n\n - a local file referenced through either a relative or absolute path\n\n - `self` -> the version used to invoke the command\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest canary release from the Yarn repository","$0 set version canary"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download the most recent Yarn 3 build","$0 set version 3.x"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"],["Use a release from the local filesystem","$0 set version ./yarn.cjs"],["Use a release from a URL","$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js"],["Download the version used to invoke the command","$0 set version self"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let f=r.sources.get("yarnPath");if(!f)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(K.contains(p,f))return 0}let s=()=>{if(typeof un>"u")throw new nt("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(f,p)=>({version:p,url:f.replace(/\{\}/g,p)});if(this.version==="self")a={url:s(),version:un??"self"};else if(this.version==="latest"||this.version==="berry"||this.version==="stable")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await cS(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await cS(r,"canary"));else if(this.version==="classic")a={url:"https://classic.yarnpkg.com/latest.js",version:"classic"};else if(this.version.match(/^https?:/))a={url:this.version,version:"remote"};else if(this.version.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.version))a={url:`file://${K.resolve(ue.toPortablePath(this.version))}`,version:"file"};else if(Or.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(Or.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(Or.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await bvt(r,this.version));else throw new nt(`Invalid version descriptor "${this.version}"`);return(await Ot.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async f=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(f.reportInfo(0,`Retrieving ${he.pretty(r,a.url,he.Type.PATH)}`),await le.readFilePromise(a.url.slice(h.length))):(f.reportInfo(0,`Downloading ${he.pretty(r,a.url,he.Type.URL)}`),await An.get(a.url,{configuration:r}))};await x5(r,a.version,p,{report:f,useYarnPath:this.useYarnPath})})).exitCode()}};async function bvt(t,e){let s=(await An.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>Or.satisfiesWithPrereleases(a,e));if(s.length===0)throw new nt(`No matching release found for range ${he.pretty(t,e,he.Type.RANGE)}.`);return s[0]}async function cS(t,e){let r=await An.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new nt(`Tag ${he.pretty(t,e,he.Type.RANGE)} not found`);return r.latest[e]}async function x5(t,e,r,{report:s,useYarnPath:a}){let n,c=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await c();await le.mktempPromise(async ie=>{let Ae=K.join(ie,"yarn.cjs");await le.writeFilePromise(Ae,te);let{stdout:ce}=await Gr.execvp(process.execPath,[ue.fromPortablePath(Ae),"--version"],{cwd:ie,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=ce.trim(),!J2e.default.valid(e))throw new Error(`Invalid semver version. ${he.pretty(t,"yarn --version",he.Type.CODE)} returned: -${e}`)})}let f=t.projectCwd??t.startingCwd,p=K.resolve(f,".yarn/releases"),h=K.resolve(p,`yarn-${e}.cjs`),E=K.relative(t.startingCwd,h),C=je.isTaggedYarnVersion(e),S=t.get("yarnPath"),P=!C,I=P||!!S||!!a;if(a===!1){if(P)throw new Yt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");I=!1}else!I&&!process.env.COREPACK_ROOT&&(s.reportWarning(0,`You don't seem to have ${he.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${he.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),I=!0);if(I){let te=await c();s.reportInfo(0,`Saving the new release in ${he.pretty(t,E,"magenta")}`),await le.removePromise(K.dirname(h)),await le.mkdirPromise(K.dirname(h),{recursive:!0}),await le.writeFilePromise(h,te,{mode:493}),await ze.updateConfiguration(f,{yarnPath:K.relative(f,h)})}else await le.removePromise(K.dirname(h)),await ze.updateConfiguration(f,{yarnPath:ze.deleteProperty});let R=await Ht.tryFind(f)||new Ht;R.packageManager=`yarn@${C?e:await cS(t,"stable")}`;let N={};R.exportTo(N);let U=K.join(f,Ht.fileName),W=`${JSON.stringify(N,null,R.indent)} -`;return await le.changeFilePromise(U,W,{automaticNewlines:!0}),{bundleVersion:e}}function z2e(t){return Dr[zx(t)]}var Pvt=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?

(?:.(?!##))+)/gs;async function xvt(t){let r=`https://repo.yarnpkg.com/${je.isTaggedYarnVersion(un)?un:await cS(t,"canary")}/packages/docusaurus/docs/advanced/01-general-reference/error-codes.mdx`,s=await An.get(r,{configuration:t});return new Map(Array.from(s.toString().matchAll(Pvt),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=z2e(a.code);if(a.name!==n)throw new Error(`Assertion failed: Invalid error code data: Expected "${a.name}" to be named "${n}"`);return[a.code,a.details]}))}var IC=class extends ut{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:$2(IE(),[X2(/^YN[0-9]{4}$/)])});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["explain"]]}static{this.usage=ot.Usage({description:"explain an error code",details:` - When the code argument is specified, this command prints its name and its details. - - When used without arguments, this command lists all error codes and their names. - `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let s=z2e(this.code),a=he.pretty(r,s,he.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),f=(await xvt(r)).get(this.code),p=typeof f<"u"?he.jsonOrPretty(this.json,r,he.tuple(he.Type.MARKDOWN,{text:f,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. - -You can help us by editing this page on GitHub \u{1F642}: -${he.jsonOrPretty(this.json,r,he.tuple(he.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/docusaurus/docs/advanced/01-general-reference/error-codes.mdx"))} -`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:s,details:p})} -`):this.context.stdout.write(`${n} - -${p} -`)}else{let s={children:je.mapAndFilter(Object.entries(Dr),([a,n])=>Number.isNaN(Number(a))?je.mapAndFilter.skip:{label:Vf(Number(a)),value:he.tuple(he.Type.CODE,n)})};Qs.emitTree(s,{configuration:r,stdout:this.context.stdout,json:this.json})}}};Ve();bt();Wt();var Z2e=et(Sa()),CC=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=ge.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=ge.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=ge.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=ge.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=ge.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=ge.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}static{this.paths=[["info"]]}static{this.usage=ot.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);if(!a&&!this.all)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState();let c=new Set(this.extra);this.cache&&c.add("cache"),this.dependents&&c.add("dependents"),this.manifest&&c.add("manifest");let f=(ie,{recursive:Ae})=>{let ce=ie.anchoredLocator.locatorHash,me=new Map,pe=[ce];for(;pe.length>0;){let Be=pe.shift();if(me.has(Be))continue;let Ce=s.storedPackages.get(Be);if(typeof Ce>"u")throw new Error("Assertion failed: Expected the package to be registered");if(me.set(Be,Ce),q.isVirtualLocator(Ce)&&pe.push(q.devirtualizeLocator(Ce).locatorHash),!(!Ae&&Be!==ce))for(let g of Ce.dependencies.values()){let we=s.storedResolutions.get(g.descriptorHash);if(typeof we>"u")throw new Error("Assertion failed: Expected the resolution to be registered");pe.push(we)}}return me.values()},p=({recursive:ie})=>{let Ae=new Map;for(let ce of s.workspaces)for(let me of f(ce,{recursive:ie}))Ae.set(me.locatorHash,me);return Ae.values()},h=({all:ie,recursive:Ae})=>ie&&Ae?s.storedPackages.values():ie?p({recursive:Ae}):f(a,{recursive:Ae}),E=({all:ie,recursive:Ae})=>{let ce=h({all:ie,recursive:Ae}),me=this.patterns.map(Ce=>{let g=q.parseLocator(Ce),we=Z2e.default.makeRe(q.stringifyIdent(g)),ye=q.isVirtualLocator(g),fe=ye?q.devirtualizeLocator(g):g;return se=>{let X=q.stringifyIdent(se);if(!we.test(X))return!1;if(g.reference==="unknown")return!0;let De=q.isVirtualLocator(se),Re=De?q.devirtualizeLocator(se):se;return!(ye&&De&&g.reference!==se.reference||fe.reference!==Re.reference)}}),pe=je.sortMap([...ce],Ce=>q.stringifyLocator(Ce));return{selection:pe.filter(Ce=>me.length===0||me.some(g=>g(Ce))),sortedLookup:pe}},{selection:C,sortedLookup:S}=E({all:this.all,recursive:this.recursive});if(C.length===0)throw new nt("No package matched your request");let P=new Map;if(this.dependents)for(let ie of S)for(let Ae of ie.dependencies.values()){let ce=s.storedResolutions.get(Ae.descriptorHash);if(typeof ce>"u")throw new Error("Assertion failed: Expected the resolution to be registered");je.getArrayWithDefault(P,ce).push(ie)}let I=new Map;for(let ie of S){if(!q.isVirtualLocator(ie))continue;let Ae=q.devirtualizeLocator(ie);je.getArrayWithDefault(I,Ae.locatorHash).push(ie)}let R={},N={children:R},U=r.makeFetcher(),W={project:s,fetcher:U,cache:n,checksums:s.storedChecksums,report:new Yi,cacheOptions:{skipIntegrityCheck:!0}},te=[async(ie,Ae,ce)=>{if(!Ae.has("manifest"))return;let me=await U.fetch(ie,W),pe;try{pe=await Ht.find(me.prefixPath,{baseFs:me.packageFs})}finally{me.releaseFs?.()}ce("Manifest",{License:he.tuple(he.Type.NO_HINT,pe.license),Homepage:he.tuple(he.Type.URL,pe.raw.homepage??null)})},async(ie,Ae,ce)=>{if(!Ae.has("cache"))return;let me=s.storedChecksums.get(ie.locatorHash)??null,pe=n.getLocatorPath(ie,me),Be;if(pe!==null)try{Be=await le.statPromise(pe)}catch{}let Ce=typeof Be<"u"?[Be.size,he.Type.SIZE]:void 0;ce("Cache",{Checksum:he.tuple(he.Type.NO_HINT,me),Path:he.tuple(he.Type.PATH,pe),Size:Ce})}];for(let ie of C){let Ae=q.isVirtualLocator(ie);if(!this.virtuals&&Ae)continue;let ce={},me={value:[ie,he.Type.LOCATOR],children:ce};if(R[q.stringifyLocator(ie)]=me,this.nameOnly){delete me.children;continue}let pe=I.get(ie.locatorHash);typeof pe<"u"&&(ce.Instances={label:"Instances",value:he.tuple(he.Type.NUMBER,pe.length)}),ce.Version={label:"Version",value:he.tuple(he.Type.NO_HINT,ie.version)};let Be=(g,we)=>{let ye={};if(ce[g]=ye,Array.isArray(we))ye.children=we.map(fe=>({value:fe}));else{let fe={};ye.children=fe;for(let[se,X]of Object.entries(we))typeof X>"u"||(fe[se]={label:se,value:X})}};if(!Ae){for(let g of te)await g(ie,c,Be);await r.triggerHook(g=>g.fetchPackageInfo,ie,c,Be)}ie.bin.size>0&&!Ae&&Be("Exported Binaries",[...ie.bin.keys()].map(g=>he.tuple(he.Type.PATH,g)));let Ce=P.get(ie.locatorHash);typeof Ce<"u"&&Ce.length>0&&Be("Dependents",Ce.map(g=>he.tuple(he.Type.LOCATOR,g))),ie.dependencies.size>0&&!Ae&&Be("Dependencies",[...ie.dependencies.values()].map(g=>{let we=s.storedResolutions.get(g.descriptorHash),ye=typeof we<"u"?s.storedPackages.get(we)??null:null;return he.tuple(he.Type.RESOLUTION,{descriptor:g,locator:ye})})),ie.peerDependencies.size>0&&Ae&&Be("Peer dependencies",[...ie.peerDependencies.values()].map(g=>{let we=ie.dependencies.get(g.identHash),ye=typeof we<"u"?s.storedResolutions.get(we.descriptorHash)??null:null,fe=ye!==null?s.storedPackages.get(ye)??null:null;return he.tuple(he.Type.RESOLUTION,{descriptor:g,locator:fe})}))}Qs.emitTree(N,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Ve();bt();Bc();var sF=et(Rd());Wt();var k5=et(Ai());Ul();var kvt=[{selector:t=>t===-1,name:"nodeLinker",value:"node-modules"},{selector:t=>t!==-1&&t<8,name:"enableGlobalCache",value:!1},{selector:t=>t!==-1&&t<8,name:"compressionLevel",value:"mixed"}],wC=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=ge.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=ge.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.refreshLockfile=ge.Boolean("--refresh-lockfile",{description:"Refresh the package metadata stored in the lockfile"});this.checkCache=ge.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"});this.checkResolutions=ge.Boolean("--check-resolutions",{description:"Validates that the package resolutions are coherent"});this.inlineBuilds=ge.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:po(ec)});this.cacheFolder=ge.String("--cache-folder",{hidden:!0});this.frozenLockfile=ge.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=ge.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=ge.Boolean("--non-interactive",{hidden:!0});this.preferOffline=ge.Boolean("--prefer-offline",{hidden:!0});this.production=ge.Boolean("--production",{hidden:!0});this.registry=ge.String("--registry",{hidden:!0});this.silent=ge.Boolean("--silent",{hidden:!0});this.networkTimeout=ge.String("--network-timeout",{hidden:!0})}static{this.paths=[["install"],ot.Default]}static{this.usage=ot.Usage({description:"install the project dependencies",details:"\n This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of `cacheFolder` in `yarn config` to see where the cache files are stored).\n\n - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the `.pnp.cjs` file you might know).\n\n - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your `.pnp.cjs` file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n If the `--immutable` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the `immutablePatterns` configuration setting). For backward compatibility we offer an alias under the name of `--frozen-lockfile`, but it will be removed in a later release.\n\n If the `--immutable-cache` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n If the `--refresh-lockfile` option is set, Yarn will keep the same resolution for the packages currently in the lockfile but will refresh their metadata. If used together with `--immutable`, it can validate that the lockfile information are consistent. This flag is enabled by default when Yarn detects it runs within a pull request context.\n\n If the `--check-cache` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n If the `--inline-builds` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n ",examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let s=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await vI({configuration:r,stdout:this.context.stdout},[{option:this.ignoreEngines,message:"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",error:!sF.default.VERCEL},{option:this.registry,message:"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file"},{option:this.preferOffline,message:"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",error:!sF.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!s},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!sF.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new nt(`${he.pretty(r,"--immutable",he.Type.CODE)} and ${he.pretty(r,"--immutable-cache",he.Type.CODE)} cannot be used with ${he.pretty(r,"--mode=update-lockfile",he.Type.CODE)}`);let c=(this.immutable??r.get("enableImmutableInstalls"))&&!n,f=this.immutableCache&&!n;if(r.projectCwd!==null){let R=await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{let U=!1;await Rvt(r,c)&&(N.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await Tvt(r,c)&&(N.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),U=!0),U&&N.reportSeparator()});if(R.hasErrors())return R.exitCode()}if(r.projectCwd!==null){let R=await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{if(ze.telemetry?.isNew)ze.telemetry.commitTips(),N.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),N.reportInfo(65,`Run ${he.pretty(r,"yarn config set --home enableTelemetry 0",he.Type.CODE)} to disable`),N.reportSeparator();else if(ze.telemetry?.shouldShowTips){let U=await An.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let W=null;if(un!==null){let ie=k5.default.prerelease(un)?"canary":"stable",Ae=U.latest[ie];k5.default.gt(Ae,un)&&(W=[ie,Ae])}if(W)ze.telemetry.commitTips(),N.reportInfo(88,`${he.applyStyle(r,`A new ${W[0]} version of Yarn is available:`,he.Style.BOLD)} ${q.prettyReference(r,W[1])}!`),N.reportInfo(88,`Upgrade now by running ${he.pretty(r,`yarn set version ${W[1]}`,he.Type.CODE)}`),N.reportSeparator();else{let te=ze.telemetry.selectTip(U.tips);te&&(N.reportInfo(89,he.pretty(r,te.message,he.Type.MARKDOWN_INLINE)),te.url&&N.reportInfo(89,`Learn more at ${te.url}`),N.reportSeparator())}}}});if(R.hasErrors())return R.exitCode()}let{project:p,workspace:h}=await Tt.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let R=await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{let U={};for(let W of kvt)W.selector(E)&&typeof r.sources.get(W.name)>"u"&&(r.use("",{[W.name]:W.value},p.cwd,{overwrite:!0}),U[W.name]=W.value);Object.keys(U).length>0&&(await ze.updateConfiguration(p.cwd,U),N.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),N.reportSeparator())});if(R.hasErrors())return R.exitCode()}let C=await Jr.find(r,{immutable:f,check:this.checkCache});if(!h)throw new ar(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let S=r.get("enableHardenedMode");S&&typeof r.sources.get("enableHardenedMode")>"u"&&await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async R=>{R.reportWarning(0,"Yarn detected that the current workflow is executed from a public pull request. For safety the hardened mode has been enabled."),R.reportWarning(0,`It will prevent malicious lockfile manipulations, in exchange for a slower install time. You can opt-out if necessary; check our ${he.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),R.reportSeparator()}),(this.refreshLockfile??S)&&(p.lockfileNeedsRefresh=!0);let P=this.checkResolutions??S;return(await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async R=>{await p.install({cache:C,report:R,immutable:c,checkResolutions:P,mode:this.mode})})).exitCode()}},Qvt="<<<<<<<";async function Tvt(t,e){if(!t.projectCwd)return!1;let r=K.join(t.projectCwd,Er.lockfile);if(!await le.existsPromise(r)||!(await le.readFilePromise(r,"utf8")).includes(Qvt))return!1;if(e)throw new Yt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Gr.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Gr.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Gr.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new Yt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async f=>{let p=await Gr.execvp("git",["show",`${f}:./${Er.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new Yt(83,`Git returned an error when trying to access the lockfile content in ${f}`);try{return cs(p.stdout)}catch{throw new Yt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(f=>!!f.__metadata);for(let f of n){if(f.__metadata.version<7)for(let p of Object.keys(f)){if(p==="__metadata")continue;let h=q.parseDescriptor(p,!0),E=t.normalizeDependency(h),C=q.stringifyDescriptor(E);C!==p&&(f[C]=f[p],delete f[p])}for(let p of Object.keys(f)){if(p==="__metadata")continue;let h=f[p].checksum;typeof h>"u"||h.includes("/")||(f[p].checksum=`${f.__metadata.cacheKey}/${h}`)}}let c=Object.assign({},...n);c.__metadata.version=`${Math.min(...n.map(f=>parseInt(f.__metadata.version??0)))}`,c.__metadata.cacheKey="merged";for(let[f,p]of Object.entries(c))typeof p=="string"&&delete c[f];return await le.changeFilePromise(r,il(c),{automaticNewlines:!0}),!0}async function Rvt(t,e){if(!t.projectCwd)return!1;let r=[],s=K.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await ze.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let c=n.filter(f=>{if(!f.path)return!0;let p=K.resolve(t.projectCwd,f.path),h=hv.has(f.spec)&&K.contains(s,p);return h&&r.push(p),!h});return c.length===0?ze.deleteProperty:c.length===n.length?n:c}},{immutable:e})?(await Promise.all(r.map(async n=>{await le.removePromise(n)})),!0):!1}Ve();bt();Wt();var BC=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target projects to the current one"});this.private=ge.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target projects to the current one"});this.relative=ge.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destinations=ge.Rest()}static{this.paths=[["link"]]}static{this.usage=ot.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register one or more remote workspaces for use in the current project","$0 link ~/ts-loader ~/jest"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState({restoreResolutions:!1});let c=s.topLevelWorkspace,f=[];for(let p of this.destinations){let h=K.resolve(this.context.cwd,ue.toPortablePath(p)),E=await ze.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:C,workspace:S}=await Tt.find(E,h);if(s.cwd===C.cwd)throw new nt(`Invalid destination '${p}'; Can't link the project to itself`);if(!S)throw new ar(C.cwd,h);if(this.all){let P=!1;for(let I of C.workspaces)I.manifest.name&&(!I.manifest.private||this.private)&&(f.push(I),P=!0);if(!P)throw new nt(`No workspace found to be linked in the target project: ${p}`)}else{if(!S.manifest.name)throw new nt(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(S.manifest.private&&!this.private)throw new nt(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);f.push(S)}}for(let p of f){let h=q.stringifyIdent(p.anchoredLocator),E=this.relative?K.relative(s.cwd,p.cwd):p.cwd;c.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await s.installWithNewReport({stdout:this.context.stdout},{cache:n})}};Wt();var vC=class extends ut{constructor(){super(...arguments);this.args=ge.Proxy()}static{this.paths=[["node"]]}static{this.usage=ot.Usage({description:"run node with the hook already setup",details:` - This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). - - The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version. - `,examples:[["Run a Node script","$0 node ./my-script.js"]]})}async execute(){return this.cli.run(["exec","node",...this.args])}};Ve();Wt();var SC=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["plugin","check"]]}static{this.usage=ot.Usage({category:"Plugin-related commands",description:"find all third-party plugins that differ from their own spec",details:` - Check only the plugins from https. - - If this command detects any plugin differences in the CI environment, it will throw an error. - `,examples:[["find all third-party plugins that differ from their own spec","$0 plugin check"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),s=await ze.findRcFiles(this.context.cwd);return(await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let c of s)if(c.data?.plugins)for(let f of c.data.plugins){if(!f.checksum||!f.spec.match(/^https?:/))continue;let p=await An.get(f.spec,{configuration:r}),h=Nn.makeHash(p);if(f.checksum===h)continue;let E=he.pretty(r,f.path,he.Type.PATH),C=he.pretty(r,f.spec,he.Type.URL),S=`${E} is different from the file provided by ${C}`;n.reportJson({...f,newChecksum:h}),n.reportError(0,S)}})).exitCode()}};Ve();Ve();bt();Wt();var rBe=Ie("os");Ve();bt();Wt();var X2e=Ie("os");Ve();Bc();Wt();var Fvt="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function vm(t,e){let r=await An.get(Fvt,{configuration:t}),s=cs(r.toString());return Object.fromEntries(Object.entries(s).filter(([a,n])=>!e||Or.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var DC=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["plugin","list"]]}static{this.usage=ot.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);return(await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await vm(r,un);for(let[c,{experimental:f,...p}]of Object.entries(n)){let h=c;f&&(h+=" [experimental]"),a.reportJson({name:c,experimental:f,...p}),a.reportInfo(null,h)}})).exitCode()}};var Nvt=/^[0-9]+$/,Ovt=process.platform==="win32";function $2e(t){return Nvt.test(t)?`pull/${t}/head`:t}var Lvt=({repository:t,branch:e},r)=>[["git","init",ue.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",$2e(e)],["git","reset","--hard","FETCH_HEAD"]],Mvt=({branch:t})=>[["git","fetch","origin","--depth=1",$2e(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],_vt=({plugins:t,noMinify:e},r,s)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",K.resolve(s,a)])),...e?["--no-minify"]:[],"|"],[Ovt?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",ue.fromPortablePath(r),"|"]],bC=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=ge.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"If set, the bundle will be built but not added to the project"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=ge.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}static{this.paths=[["set","version","from","sources"]]}static{this.usage=ot.Usage({description:"build Yarn from master",details:` - This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project. - - By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \`--skip-plugins\` flag. - `,examples:[["Build Yarn from master","$0 set version from sources"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s}=await Tt.find(r,this.context.cwd),a=typeof this.installPath<"u"?K.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):K.resolve(ue.toPortablePath((0,X2e.tmpdir)()),"yarnpkg-sources",Nn.makeHash(this.repository).slice(0,6));return(await Ot.start({configuration:r,stdout:this.context.stdout},async c=>{await Q5(this,{configuration:r,report:c,target:a}),c.reportSeparator(),c.reportInfo(0,"Building a fresh bundle"),c.reportSeparator();let f=await Gr.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=K.join(a,`packages/yarnpkg-cli/bundles/yarn-${f.stdout.trim()}.js`);le.existsSync(p)||(await uS(_vt(this,p,a),{configuration:r,context:this.context,target:a}),c.reportSeparator());let h=await le.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await x5(r,null,async()=>h,{report:c});this.skipPlugins||await Uvt(this,E,{project:s,report:c,target:a})}})).exitCode()}};async function uS(t,{configuration:e,context:r,target:s}){for(let[a,...n]of t){let c=n[n.length-1]==="|";if(c&&n.pop(),c)await Gr.pipevp(a,n,{cwd:s,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${he.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} -`);try{await Gr.execvp(a,n,{cwd:s,strict:!0})}catch(f){throw r.stdout.write(f.stdout||f.stack),f}}}}async function Q5(t,{configuration:e,report:r,target:s}){let a=!1;if(!t.force&&le.existsSync(K.join(s,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await uS(Mvt(t),{configuration:e,context:t.context,target:s}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await le.removePromise(s),await le.mkdirPromise(s,{recursive:!0}),await uS(Lvt(t,s),{configuration:e,context:t.context,target:s}))}async function Uvt(t,e,{project:r,report:s,target:a}){let n=await vm(r.configuration,e),c=new Set(Object.keys(n));for(let f of r.configuration.plugins.keys())c.has(f)&&await T5(f,t,{project:r,report:s,target:a})}Ve();Ve();bt();Wt();var eBe=et(Ai()),tBe=Ie("vm");var PC=class extends ut{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}static{this.paths=[["plugin","import"]]}static{this.usage=ot.Usage({category:"Plugin-related commands",description:"download a plugin",details:` - This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations. - - Three types of plugin references are accepted: - - - If the plugin is stored within the Yarn repository, it can be referenced by name. - - Third-party plugins can be referenced directly through their public urls. - - Local plugins can be referenced by their path on the disk. - - If the \`--no-checksum\` option is set, Yarn will no longer care if the plugin is modified. - - Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \`@yarnpkg/builder\` package). - `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);return(await Ot.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await Tt.find(r,this.context.cwd),c,f;if(this.name.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.name)){let p=K.resolve(this.context.cwd,ue.toPortablePath(this.name));a.reportInfo(0,`Reading ${he.pretty(r,p,he.Type.PATH)}`),c=K.relative(n.cwd,p),f=await le.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new URL(this.name)}catch{throw new Yt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}c=this.name,p=this.name}else{let h=q.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!eBe.default.valid(h.reference))throw new Yt(0,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let E=q.stringifyIdent(h),C=await vm(r,un);if(!Object.hasOwn(C,E)){let S=`Couldn't find a plugin named ${q.prettyIdent(r,h)} on the remote registry. -`;throw r.plugins.has(E)?S+=`A plugin named ${q.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:S+=`Note that only the plugins referenced on our website (${he.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",he.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${he.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",he.Type.URL)}).`,new Yt(51,S)}c=E,p=C[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):un!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${un}/`))}a.reportInfo(0,`Downloading ${he.pretty(r,p,"green")}`),f=await An.get(p,{configuration:r})}await R5(c,f,{checksum:this.checksum,project:n,report:a})})).exitCode()}};async function R5(t,e,{checksum:r=!0,project:s,report:a}){let{configuration:n}=s,c={},f={exports:c};(0,tBe.runInNewContext)(e.toString(),{module:f,exports:c});let h=`.yarn/plugins/${f.exports.name}.cjs`,E=K.resolve(s.cwd,h);a.reportInfo(0,`Saving the new plugin in ${he.pretty(n,h,"magenta")}`),await le.mkdirPromise(K.dirname(E),{recursive:!0}),await le.writeFilePromise(E,e);let C={path:h,spec:t};r&&(C.checksum=Nn.makeHash(e)),await ze.addPlugin(s.cwd,[C])}var Hvt=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],xC=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=ge.String()}static{this.paths=[["plugin","import","from","sources"]]}static{this.usage=ot.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` - This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations. - - The plugins can be referenced by their short name if sourced from the official Yarn repository. - `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),s=typeof this.installPath<"u"?K.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):K.resolve(ue.toPortablePath((0,rBe.tmpdir)()),"yarnpkg-sources",Nn.makeHash(this.repository).slice(0,6));return(await Ot.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:c}=await Tt.find(r,this.context.cwd),f=q.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=q.stringifyIdent(f),h=await vm(r,un);if(!Object.hasOwn(h,p))throw new Yt(51,`Couldn't find a plugin named "${p}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let E=p;await Q5(this,{configuration:r,report:n,target:s}),await T5(E,this,{project:c,report:n,target:s})})).exitCode()}};async function T5(t,{context:e,noMinify:r},{project:s,report:a,target:n}){let c=t.replace(/@yarnpkg\//,""),{configuration:f}=s;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${c}`),a.reportSeparator(),await uS(Hvt({pluginName:c,noMinify:r},n),{configuration:f,context:e,target:n}),a.reportSeparator();let p=K.resolve(n,`packages/${c}/bundles/${t}.js`),h=await le.readFilePromise(p);await R5(t,h,{project:s,report:a})}Ve();bt();Wt();var kC=class extends ut{constructor(){super(...arguments);this.name=ge.String()}static{this.paths=[["plugin","remove"]]}static{this.usage=ot.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` - This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration. - - **Note:** The plugins have to be referenced by their name property, which can be obtained using the \`yarn plugin runtime\` command. Shorthands are not allowed. - `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s}=await Tt.find(r,this.context.cwd);return(await Ot.start({configuration:r,stdout:this.context.stdout},async n=>{let c=this.name,f=q.parseIdent(c);if(!r.plugins.has(c))throw new nt(`${q.prettyIdent(r,f)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${c}.cjs`,h=K.resolve(s.cwd,p);le.existsSync(h)&&(n.reportInfo(0,`Removing ${he.pretty(r,p,he.Type.PATH)}...`),await le.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await ze.updateConfiguration(s.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let C=E.filter(S=>S.path!==p);return C.length===0?ze.deleteProperty:C.length===E.length?E:C}})})).exitCode()}};Ve();Wt();var QC=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["plugin","runtime"]]}static{this.usage=ot.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` - This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins. - `,examples:[["List the currently active plugins","$0 plugin runtime"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);return(await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let c=this.context.plugins.plugins.has(n),f=n;c&&(f+=" [builtin]"),a.reportJson({name:n,builtin:c}),a.reportInfo(null,`${f}`)}})).exitCode()}};Ve();Ve();Wt();var TC=class extends ut{constructor(){super(...arguments);this.idents=ge.Rest()}static{this.paths=[["rebuild"]]}static{this.usage=ot.Usage({description:"rebuild the project's native packages",details:` - This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again. - - Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future). - - By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory. - `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);let c=new Set;for(let f of this.idents)c.add(q.parseIdent(f).identHash);if(await s.restoreInstallState({restoreResolutions:!1}),await s.resolveEverything({cache:n,report:new Yi}),c.size>0)for(let f of s.storedPackages.values())c.has(f.identHash)&&(s.storedBuildState.delete(f.locatorHash),s.skippedBuilds.delete(f.locatorHash));else s.storedBuildState.clear(),s.skippedBuilds.clear();return await s.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};Ve();Ve();Ve();Wt();var F5=et(Sa());Ul();var RC=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:po(ec)});this.patterns=ge.Rest()}static{this.paths=[["remove"]]}static{this.usage=ot.Usage({description:"remove dependencies from the project",details:` - This command will remove the packages matching the specified patterns from the current workspace. - - If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: - - - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run. - - - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. - - This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them. - `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState({restoreResolutions:!1});let c=this.all?s.workspaces:[a],f=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let I of this.patterns){let R=!1,N=q.parseIdent(I);for(let U of c){let W=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,F5.default)(W,I))U.manifest.peerDependenciesMeta.delete(te),h=!0,R=!0;for(let te of f){let ie=U.manifest.getForScope(te),Ae=[...ie.values()].map(ce=>q.stringifyIdent(ce));for(let ce of(0,F5.default)(Ae,q.stringifyIdent(N))){let{identHash:me}=q.parseIdent(ce),pe=ie.get(me);if(typeof pe>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(me),E.push([U,te,pe]),h=!0,R=!0}}}R||p.push(I)}let C=p.length>1?"Patterns":"Pattern",S=p.length>1?"don't":"doesn't",P=this.all?"any":"this";if(p.length>0)throw new nt(`${C} ${he.prettyList(r,p,he.Type.CODE)} ${S} match any packages referenced by ${P} workspace`);return h?(await r.triggerMultipleHooks(I=>I.afterWorkspaceDependencyRemoval,E),await s.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};Ve();Ve();Wt();var nBe=Ie("util"),FC=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["run"]]}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);return(await Ot.start({configuration:r,stdout:this.context.stdout,json:this.json},async c=>{let f=a.manifest.scripts,p=je.sortMap(f.keys(),C=>C),h={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},E=p.reduce((C,S)=>Math.max(C,S.length),0);for(let[C,S]of f.entries())c.reportInfo(null,`${C.padEnd(E," ")} ${(0,nBe.inspect)(S,h)}`),c.reportJson({name:C,script:S})})).exitCode()}};Ve();Ve();Wt();var NC=class extends ut{constructor(){super(...arguments);this.inspect=ge.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=ge.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=ge.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=ge.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.require=ge.String("--require",{description:"Forwarded to the underlying Node process when executing a binary"});this.silent=ge.Boolean("--silent",{hidden:!0});this.scriptName=ge.String();this.args=ge.Proxy()}static{this.paths=[["run"]]}static{this.usage=ot.Usage({description:"run a script defined in the package.json",details:` - This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace: - - - If the \`scripts\` field from your local package.json contains a matching script name, its definition will get executed. - - - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed. - - - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed. - - Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax). - `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a,locator:n}=await Tt.find(r,this.context.cwd);await s.restoreInstallState();let c=this.topLevel?s.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await In.hasPackageScript(c,this.scriptName,{project:s}))return await In.executePackageScript(c,this.scriptName,this.args,{project:s,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let f=await In.getPackageAccessibleBinaries(c,{project:s});if(f.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await In.executePackageAccessibleBinary(c,this.scriptName,this.args,{cwd:this.context.cwd,project:s,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:f})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(s.workspaces.map(async C=>C.manifest.scripts.has(this.scriptName)?C:null))).filter(C=>C!==null);if(E.length===1)return await In.executeWorkspaceScript(E[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new nt(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${q.prettyLocator(r,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new nt(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${q.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new nt("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[E,C]of $I)for(let S of C)if(h.length>=S.length&&JSON.stringify(h.slice(0,S.length))===JSON.stringify(S))throw new nt(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${E} plugin. You can install it with "yarn plugin import ${E}".`);throw new nt(`Couldn't find a script named "${this.scriptName}".`)}}};Ve();Ve();Wt();var OC=class extends ut{constructor(){super(...arguments);this.descriptor=ge.String();this.resolution=ge.String()}static{this.paths=[["set","resolution"]]}static{this.usage=ot.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, edit the `resolutions` field in your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 npm:1.5.0"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);if(await s.restoreInstallState({restoreResolutions:!1}),!a)throw new ar(s.cwd,this.context.cwd);let c=q.parseDescriptor(this.descriptor,!0),f=q.makeDescriptor(c,this.resolution);return s.storedDescriptors.set(c.descriptorHash,c),s.storedDescriptors.set(f.descriptorHash,f),s.resolutionAliases.set(c.descriptorHash,f.descriptorHash),await s.installWithNewReport({stdout:this.context.stdout},{cache:n})}};Ve();bt();Wt();var iBe=et(Sa()),LC=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=ge.Rest()}static{this.paths=[["unlink"]]}static{this.usage=ot.Usage({description:"disconnect the local project from another one",details:` - This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments. - `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);let c=s.topLevelWorkspace,f=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of c.manifest.resolutions)h.startsWith("portal:")&&f.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=K.resolve(this.context.cwd,ue.toPortablePath(p));if(je.isPathLike(p)){let E=await ze.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:C,workspace:S}=await Tt.find(E,h);if(!S)throw new ar(C.cwd,h);if(this.all){for(let P of C.workspaces)P.manifest.name&&f.add(q.stringifyIdent(P.anchoredLocator));if(f.size===0)throw new nt("No workspace found to be unlinked in the target project")}else{if(!S.manifest.name)throw new nt("The target workspace doesn't have a name and thus cannot be unlinked");f.add(q.stringifyIdent(S.anchoredLocator))}}else{let E=[...c.manifest.resolutions.map(({pattern:C})=>C.descriptor.fullName)];for(let C of(0,iBe.default)(E,p))f.add(C)}}return c.manifest.resolutions=c.manifest.resolutions.filter(({pattern:p})=>!f.has(p.descriptor.fullName)),await s.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};Ve();Ve();Ve();Wt();var sBe=et(nS()),N5=et(Sa());Ul();var MC=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:po(ec)});this.patterns=ge.Rest()}static{this.paths=[["up"]]}static{this.usage=ot.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]})}static{this.schema=[tB("recursive",Wf.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})]}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState({restoreResolutions:!1});let c=[...s.storedDescriptors.values()],f=c.map(E=>q.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(q.parseDescriptor(E).range!=="unknown")throw new nt("Ranges aren't allowed when using --recursive");for(let C of(0,N5.default)(f,E)){let S=q.parseIdent(C);p.add(S.identHash)}}let h=c.filter(E=>p.has(E.identHash));for(let E of h)s.storedDescriptors.delete(E.descriptorHash),s.storedResolutions.delete(E.descriptorHash);return await s.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState({restoreResolutions:!1});let c=this.fixed,f=r.isInteractive({interactive:this.interactive,stdout:this.context.stdout}),p=sS(this,s),h=f?["keep","reuse","project","latest"]:["project","latest"],E=[],C=[];for(let N of this.patterns){let U=!1,W=q.parseDescriptor(N),te=q.stringifyIdent(W);for(let ie of s.workspaces)for(let Ae of["dependencies","devDependencies"]){let me=[...ie.manifest.getForScope(Ae).values()].map(Be=>q.stringifyIdent(Be)),pe=te==="*"?me:(0,N5.default)(me,te);for(let Be of pe){let Ce=q.parseIdent(Be),g=ie.manifest[Ae].get(Ce.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let we=q.makeDescriptor(Ce,W.range);E.push(Promise.resolve().then(async()=>[ie,Ae,g,await oS(we,{project:s,workspace:ie,cache:n,target:Ae,fixed:c,modifier:p,strategies:h})])),U=!0}}U||C.push(N)}if(C.length>1)throw new nt(`Patterns ${he.prettyList(r,C,he.Type.CODE)} don't match any packages referenced by any workspace`);if(C.length>0)throw new nt(`Pattern ${he.prettyList(r,C,he.Type.CODE)} doesn't match any packages referenced by any workspace`);let S=await Promise.all(E),P=await uA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async N=>{for(let[,,U,{suggestions:W,rejections:te}]of S){let ie=W.filter(Ae=>Ae.descriptor!==null);if(ie.length===0){let[Ae]=te;if(typeof Ae>"u")throw new Error("Assertion failed: Expected an error to have been set");let ce=this.cli.error(Ae);s.configuration.get("enableNetwork")?N.reportError(27,`${q.prettyDescriptor(r,U)} can't be resolved to a satisfying range - -${ce}`):N.reportError(27,`${q.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) - -${ce}`)}else ie.length>1&&!f&&N.reportError(27,`${q.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(P.hasErrors())return P.exitCode();let I=!1,R=[];for(let[N,U,,{suggestions:W}]of S){let te,ie=W.filter(pe=>pe.descriptor!==null),Ae=ie[0].descriptor,ce=ie.every(pe=>q.areDescriptorsEqual(pe.descriptor,Ae));ie.length===1||ce?te=Ae:(I=!0,{answer:te}=await(0,sBe.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${q.prettyWorkspace(r,N)} \u276F ${U}?`,choices:W.map(({descriptor:pe,name:Be,reason:Ce})=>pe?{name:Be,hint:Ce,descriptor:pe}:{name:Be,hint:Ce,disabled:!0}),onCancel:()=>process.exit(130),result(pe){return this.find(pe,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let me=N.manifest[U].get(te.identHash);if(typeof me>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(me.descriptorHash!==te.descriptorHash)N.manifest[U].set(te.identHash,te),R.push([N,U,me,te]);else{let pe=r.makeResolver(),Be={project:s,resolver:pe},Ce=r.normalizeDependency(me),g=pe.bindDescriptor(Ce,N.anchoredLocator,Be);s.forgetResolution(g)}}return await r.triggerMultipleHooks(N=>N.afterWorkspaceDependencyReplacement,R),I&&this.context.stdout.write(` -`),await s.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Ve();Ve();Ve();Wt();var _C=class extends ut{constructor(){super(...arguments);this.recursive=ge.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=ge.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=ge.String()}static{this.paths=[["why"]]}static{this.usage=ot.Usage({description:"display the reason why a package is needed",details:` - This command prints the exact reasons why a package appears in the dependency tree. - - If \`-R,--recursive\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree. - `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState();let n=q.parseIdent(this.package).identHash,c=this.recursive?qvt(s,n,{configuration:r,peers:this.peers}):jvt(s,n,{configuration:r,peers:this.peers});Qs.emitTree(c,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};function jvt(t,e,{configuration:r,peers:s}){let a=je.sortMap(t.storedPackages.values(),f=>q.stringifyLocator(f)),n={},c={children:n};for(let f of a){let p={};for(let E of f.dependencies.values()){if(!s&&f.peerDependencies.has(E.identHash))continue;let C=t.storedResolutions.get(E.descriptorHash);if(!C)throw new Error("Assertion failed: The resolution should have been registered");let S=t.storedPackages.get(C);if(!S)throw new Error("Assertion failed: The package should have been registered");if(S.identHash!==e)continue;{let I=q.stringifyLocator(f);n[I]={value:[f,he.Type.LOCATOR],children:p}}let P=q.stringifyLocator(S);p[P]={value:[{descriptor:E,locator:S},he.Type.DEPENDENT]}}}return c}function qvt(t,e,{configuration:r,peers:s}){let a=je.sortMap(t.workspaces,S=>q.stringifyLocator(S.anchoredLocator)),n=new Set,c=new Set,f=S=>{if(n.has(S.locatorHash))return c.has(S.locatorHash);if(n.add(S.locatorHash),S.identHash===e)return c.add(S.locatorHash),!0;let P=!1;S.identHash===e&&(P=!0);for(let I of S.dependencies.values()){if(!s&&S.peerDependencies.has(I.identHash))continue;let R=t.storedResolutions.get(I.descriptorHash);if(!R)throw new Error("Assertion failed: The resolution should have been registered");let N=t.storedPackages.get(R);if(!N)throw new Error("Assertion failed: The package should have been registered");f(N)&&(P=!0)}return P&&c.add(S.locatorHash),P};for(let S of a)f(S.anchoredPackage);let p=new Set,h={},E={children:h},C=(S,P,I)=>{if(!c.has(S.locatorHash))return;let R=I!==null?he.tuple(he.Type.DEPENDENT,{locator:S,descriptor:I}):he.tuple(he.Type.LOCATOR,S),N={},U={value:R,children:N},W=q.stringifyLocator(S);if(P[W]=U,!(I!==null&&t.tryWorkspaceByLocator(S))&&!p.has(S.locatorHash)){p.add(S.locatorHash);for(let te of S.dependencies.values()){if(!s&&S.peerDependencies.has(te.identHash))continue;let ie=t.storedResolutions.get(te.descriptorHash);if(!ie)throw new Error("Assertion failed: The resolution should have been registered");let Ae=t.storedPackages.get(ie);if(!Ae)throw new Error("Assertion failed: The package should have been registered");C(Ae,N,te)}}};for(let S of a)C(S.anchoredPackage,h,null);return E}Ve();var W5={};Vt(W5,{GitFetcher:()=>AS,GitResolver:()=>pS,default:()=>uSt,gitUtils:()=>Qa});Ve();bt();var Qa={};Vt(Qa,{TreeishProtocols:()=>fS,clone:()=>G5,fetchBase:()=>bBe,fetchChangedFiles:()=>PBe,fetchChangedWorkspaces:()=>lSt,fetchRoot:()=>DBe,isGitUrl:()=>jC,lsRemote:()=>SBe,normalizeLocator:()=>aSt,normalizeRepoUrl:()=>UC,resolveUrl:()=>q5,splitRepoUrl:()=>G0,validateRepoUrl:()=>j5});Ve();bt();Wt();var wBe=et(EBe()),BBe=et(c6()),HC=et(Ie("querystring")),U5=et(Ai());function _5(t,e,r){let s=t.indexOf(r);return t.lastIndexOf(e,s>-1?s:1/0)}function IBe(t){try{return new URL(t)}catch{return}}function sSt(t){let e=_5(t,"@","#"),r=_5(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),_5(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function CBe(t){return IBe(t)||IBe(sSt(t))}function UC(t,{git:e=!1}={}){if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/|git:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){let r=CBe(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function vBe(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var oSt=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],fS=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(fS||{});function jC(t){return t?oSt.some(e=>!!t.match(e)):!1}function G0(t){t=UC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),s=t.slice(e+1);if(s.match(/^[a-z]+=/)){let a=HC.default.parse(s);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(fS).find(p=>Object.hasOwn(a,p)),[c,f]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(fS))delete a[p];return{repo:r,treeish:{protocol:c,request:f},extra:a}}else{let a=s.indexOf(":"),[n,c]=a===-1?[null,s]:[s.slice(0,a),s.slice(a+1)];return{repo:r,treeish:{protocol:n,request:c},extra:{}}}}function aSt(t){return q.makeLocator(t,UC(t.reference))}function j5(t,{configuration:e}){let r=UC(t,{git:!0});if(!An.getNetworkSettings(`https://${(0,wBe.default)(r).resource}`,{configuration:e}).enableNetwork)throw new Yt(80,`Request to '${r}' has been blocked because of your configuration settings`);return r}async function SBe(t,e){let r=j5(t,{configuration:e}),s=await H5("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:vBe()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,c;for(;(c=n.exec(s.stdout))!==null;)a.set(c[2],c[1]);return a}async function q5(t,e){let{repo:r,treeish:{protocol:s,request:a},extra:n}=G0(t),c=await SBe(r,e),f=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return HC.default.stringify({...n,commit:E})}case"head":{let C=c.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof C>"u")throw new Error(`Unknown head ("${E}")`);return HC.default.stringify({...n,commit:C})}case"tag":{let C=c.get(`refs/tags/${E}`);if(typeof C>"u")throw new Error(`Unknown tag ("${E}")`);return HC.default.stringify({...n,commit:C})}case"semver":{let C=Or.validRange(E);if(!C)throw new Error(`Invalid range ("${E}")`);let S=new Map([...c.entries()].filter(([I])=>I.startsWith("refs/tags/")).map(([I,R])=>[U5.default.parse(I.slice(10)),R]).filter(I=>I[0]!==null)),P=U5.default.maxSatisfying([...S.keys()],C);if(P===null)throw new Error(`No matching range ("${E}")`);return HC.default.stringify({...n,commit:S.get(P)})}case null:{let C;if((C=p("commit",E))!==null||(C=p("tag",E))!==null||(C=p("head",E))!==null)return C;throw E.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,E)=>{try{return f(h,E)}catch{return null}};return UC(`${r}#${f(s,a)}`)}async function G5(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:s,request:a}}=G0(t);if(s!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=j5(r,{configuration:e}),c=await le.mktempPromise(),f={cwd:c,env:vBe()};return await H5("cloning the repository",["clone","-c core.autocrlf=false",n,ue.fromPortablePath(c)],f,{configuration:e,normalizedRepoUrl:n}),await H5("switching branch",["checkout",`${a}`],f,{configuration:e,normalizedRepoUrl:n}),c})}async function DBe(t){let e,r=t;do{if(e=r,await le.existsPromise(K.join(e,".git")))return e;r=K.dirname(e)}while(r!==e);return null}async function bBe(t,{baseRefs:e}){if(e.length===0)throw new nt("Can't run this command with zero base refs specified.");let r=[];for(let f of e){let{code:p}=await Gr.execvp("git",["merge-base",f,"HEAD"],{cwd:t});p===0&&r.push(f)}if(r.length===0)throw new nt(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:s}=await Gr.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=s.trim(),{stdout:n}=await Gr.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),c=n.trim();return{hash:a,title:c}}async function PBe(t,{base:e,project:r}){let s=je.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Gr.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>K.resolve(t,ue.toPortablePath(h))),{stdout:c}=await Gr.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),f=c.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>K.resolve(t,ue.toPortablePath(h))),p=[...new Set([...n,...f].sort())];return s?p.filter(h=>!K.relative(r.cwd,h).match(s)):p}async function lSt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new nt("This command can only be run from within a Yarn project");let r=[K.resolve(e.cwd,Er.lockfile),K.resolve(e.cwd,e.configuration.get("cacheFolder")),K.resolve(e.cwd,e.configuration.get("installStatePath")),K.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(c=>c.populateYarnPaths,e,c=>{c!=null&&r.push(c)});let s=await DBe(e.configuration.projectCwd);if(s==null)throw new nt("This command can only be run on Git repositories");let a=await bBe(s,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await PBe(s,{base:a.hash,project:e});return new Set(je.mapAndFilter(n,c=>{let f=e.tryWorkspaceByFilePath(c);return f===null?je.mapAndFilter.skip:r.some(p=>c.startsWith(p))?je.mapAndFilter.skip:f}))}async function H5(t,e,r,{configuration:s,normalizedRepoUrl:a}){try{return await Gr.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Gr.ExecError))throw n;let c=n.reportExtra,f=n.stderr.toString();throw new Yt(1,`Failed ${t}`,p=>{p.reportError(1,` ${he.prettyField(s,{label:"Repository URL",value:he.tuple(he.Type.URL,a)})}`);for(let h of f.matchAll(/^(.+?): (.*)$/gm)){let[,E,C]=h;E=E.toLowerCase();let S=E==="error"?"Error":`${(0,BBe.default)(E)} Error`;p.reportError(1,` ${he.prettyField(s,{label:S,value:he.tuple(he.Type.NO_HINT,C)})}`)}c?.(p)})}}var AS=class{supports(e,r){return jC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,s);let n={...r,checksums:a},c=await this.downloadHosted(e,n);if(c!==null)return c;let[f,p,h]=await r.cache.fetchPackageFromCache(e,s,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${q.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:f,releaseFs:p,prefixPath:q.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(s=>s.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let s=G0(e.reference),a=await G5(e.reference,r.project.configuration),n=K.resolve(a,s.extra.cwd??vt.dot),c=K.join(n,"package.tgz");await In.prepareExternalProject(n,c,{configuration:r.project.configuration,report:r.report,workspace:s.extra.workspace,locator:e});let f=await le.readFilePromise(c);return await je.releaseAfterUseAsync(async()=>await gs.convertToZip(f,{configuration:r.project.configuration,prefixPath:q.getIdentVendorPath(e),stripComponents:1}))}};Ve();Ve();var pS=class{supportsDescriptor(e,r){return jC(e.range)}supportsLocator(e,r){return jC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){let a=await q5(e.range,s.project.configuration);return[q.makeLocator(e,a)]}async getSatisfying(e,r,s,a){let n=G0(e.range);return{locators:s.filter(f=>{if(f.identHash!==e.identHash)return!1;let p=G0(f.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let s=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Ht.find(s.prefixPath,{baseFs:s.packageFs}),s.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var cSt={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:"STRING",isArray:!0,isNullable:!1,default:["master","origin/master","upstream/master","main","origin/main","upstream/main"]},changesetIgnorePatterns:{description:"Array of glob patterns; files matching them will be ignored when fetching the changed files",type:"STRING",default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:"NUMBER",default:2}},fetchers:[AS],resolvers:[pS]};var uSt=cSt;Wt();var qC=class extends ut{constructor(){super(...arguments);this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.noPrivate=ge.Boolean("--no-private",{description:"Exclude workspaces that have the private field set to true"});this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["workspaces","list"]]}static{this.usage=ot.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project.\n\n - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\n\n - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s}=await Tt.find(r,this.context.cwd);return(await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let c=this.since?await Qa.fetchChangedWorkspaces({ref:this.since,project:s}):s.workspaces,f=new Set(c);if(this.recursive)for(let p of[...c].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)f.add(h);for(let p of f){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let C=new Set,S=new Set;for(let P of Ht.hardDependencies)for(let[I,R]of h.getForScope(P)){let N=s.tryWorkspaceByDescriptor(R);N===null?s.workspacesByIdent.has(I)&&S.add(R):C.add(N)}E={workspaceDependencies:Array.from(C).map(P=>P.relativeCwd),mismatchedWorkspaceDependencies:Array.from(S).map(P=>q.stringifyDescriptor(P))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?q.stringifyIdent(h.name):null,...E})}})).exitCode()}};Ve();Ve();Wt();var GC=class extends ut{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.Proxy()}static{this.paths=[["workspace"]]}static{this.usage=ot.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` - This command will run a given sub-command on a single workspace. - `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);let n=s.workspaces,c=new Map(n.map(p=>[q.stringifyIdent(p.anchoredLocator),p])),f=c.get(this.workspaceName);if(f===void 0){let p=Array.from(c.keys()).sort();throw new nt(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: - - ${p.join(` - - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:f.cwd})}};var fSt={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:"BOOLEAN",default:xBe.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:"STRING",values:["^","~",""],default:"^"},preferReuse:{description:"If true, `yarn add` will attempt to reuse the most common dependency range in other workspaces.",type:"BOOLEAN",default:!1}},commands:[aC,lC,cC,uC,OC,bC,EC,qC,pC,hC,gC,dC,sC,oC,fC,AC,mC,yC,IC,CC,wC,BC,LC,vC,SC,xC,PC,kC,DC,QC,TC,RC,FC,NC,MC,_C,GC]},ASt=fSt;var Z5={};Vt(Z5,{default:()=>hSt});Ve();var Qt={optional:!0},V5=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:Qt,zenObservable:Qt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:Qt,zenObservable:Qt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{"supports-color":Qt}}],["got@<11",{dependencies:{"@types/responselike":"^1.0.0","@types/keyv":"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{"@types/keyv":"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{"vscode-jsonrpc":"^5.0.1","vscode-languageserver-protocol":"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{"postcss-html":Qt,"postcss-jsx":Qt,"postcss-less":Qt,"postcss-markdown":Qt,"postcss-scss":Qt}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{"tiny-warning":"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:Qt}}],["snowpack@>=3.3.0",{dependencies:{"node-gyp":"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:Qt}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@<=0.5.2",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:Qt,"vue-template-compiler":Qt}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:Qt,"utf-8-validate":Qt}}],["react-portal@<4.2.2",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{"babel-polyfill":"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{"cross-spawn":"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{"prop-types":"^15.7.2"}}],["@rebass/forms@*",{dependencies:{"@styled-system/should-forward-prop":"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":Qt,"vuetify-loader":Qt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":Qt}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":Qt}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":Qt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:Qt}}],["consolidate@<=0.16.0",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:Qt,tinyliquid:Qt,"liquid-node":Qt,jade:Qt,"then-jade":Qt,dust:Qt,"dustjs-helpers":Qt,"dustjs-linkedin":Qt,swig:Qt,"swig-templates":Qt,"razor-tmpl":Qt,atpl:Qt,liquor:Qt,twig:Qt,ejs:Qt,eco:Qt,jazz:Qt,jqtpl:Qt,hamljs:Qt,hamlet:Qt,whiskers:Qt,"haml-coffee":Qt,"hogan.js":Qt,templayed:Qt,handlebars:Qt,underscore:Qt,lodash:Qt,pug:Qt,"then-pug":Qt,qejs:Qt,walrus:Qt,mustache:Qt,just:Qt,ect:Qt,mote:Qt,toffee:Qt,dot:Qt,"bracket-template":Qt,ractive:Qt,nunjucks:Qt,htmling:Qt,"babel-core":Qt,plates:Qt,"react-dom":Qt,react:Qt,"arc-templates":Qt,vash:Qt,slm:Qt,marko:Qt,teacup:Qt,"coffee-script":Qt,squirrelly:Qt,twing:Qt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":Qt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":Qt,vue:Qt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:Qt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:Qt}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":Qt,"webpack-command":Qt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":Qt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":Qt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:Qt,jimp:Qt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":Qt,"eslint-import-resolver-typescript":Qt,"eslint-import-resolver-webpack":Qt,"@typescript-eslint/parser":Qt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":Qt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":Qt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x <10.0.2",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.7"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:Qt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:Qt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{"vue-template-compiler":"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{"@parcel/core":"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{"@parcel/core":"*"}}],["parcel@*",{peerDependenciesMeta:{"@parcel/core":Qt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@<5.0.0",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:Qt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:Qt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:Qt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":Qt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}],["vite-plugin-vuetify@<=1.0.2",{peerDependencies:{vue:"^3.0.0"}}],["webpack-plugin-vuetify@<=2.0.1",{peerDependencies:{vue:"^3.2.6"}}],["eslint-import-resolver-vite@<2.0.1",{dependencies:{debug:"^4.3.4",resolve:"^1.22.8"}}],["notistack@^3.0.0",{dependencies:{csstype:"^3.0.10"}}],["@fastify/type-provider-typebox@^5.0.0",{peerDependencies:{fastify:"^5.0.0"}}],["@fastify/type-provider-typebox@^4.0.0",{peerDependencies:{fastify:"^4.0.0"}}]];var K5;function kBe(){return typeof K5>"u"&&(K5=Ie("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),K5}var J5;function QBe(){return typeof J5>"u"&&(J5=Ie("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),J5}var z5;function TBe(){return typeof z5>"u"&&(z5=Ie("zlib").brotliDecompressSync(Buffer.from("m9XmPqMRsZ7bFo1U5CxexdgYepcdMsrcAbbqv7/rCXGM7SZhmJ2jPScITf1tA+qxuDFE8KC9mQaCs84ftss/pB0UrlDfSS52Q7rXyYIcHbrGG2egYMqC8FFfnNfZVLU+4ZieJEVLu1qxY0MYkbD8opX7TYstjKzqxwBObq8HUIQwogljOgs72xyCrxj0q79cf/hN2Ys/0fU6gkRgxFedikACuQLS4lvO/N5NpZ85m+BdO3c5VplDLMcfEDt6umRCbfM16uxnqUKPvPFg/qtuzzId3SjAxZFoZRqK3pdtWt/C+VU6+zuX09NsoBs3MwobpU1yyoXZnzA1EmiMRS5GfJeLxV51/jSXrfgTWr1af9hwKvqCfSVHiQuk+uO/N16Cror2c1QlthM7WkS/86azhK3b47PG6f5TAJVtrK7g+zlR2boyKBV+QkdOXcfBDrI8yCciS3LktLb+d3gopE3R1QYFN1QWdQtrso2qK3+OTVYpTdPAfICTe9//3y/1+6mixIob4kfOI1WT3DxyD2ZuR06a6RPOPlftc/bZeqWqUtoqSetJlgP0AOBsOOeWqkpKJDtgP25CmIz+ZAo8+zwb3wI5ZD/0a7Qb7Q8Ag8HkWzhVQqzLFksA/nKSsR6hEu4tymzAQcZUDV4D2f17NbNSreHMVG0D1Knfa5n//prG6IzFVH7GSdEZn+1eEohVH5hmz6wxnj0biDxnMlq0fHQ2v7ogu8tEBnHaJICmVgLINf+jr4b/AVtDfPSZWelMen+u+pT60nu+9LrK0z0L/oyvC+kDtsi13AdC/i6pd29uB/1alOsA0Kc6N0wICwzbHkBQGJ94pBZ5TyKj7lzzUQ5CYn3Xp/cLhrJ2GpBakWmkymfeKcX2Vy2QEDcIxnju2369rf+l+H7E96GzyVs0gyDzUD0ipfKdmd7LN80sxjSiau/0PX2e7EMt4hNqThHEad9B1L44EDU1ZyFL+QJ0n1v7McxqupfO9zYGEBGJ0XxHdZmWuNKcV+0WJmzGd4y1qu3RfbunEBAQgZyBUWwjoXAwxk2XVRjBAy1jWcGsnb/Tu2oRKUbqGxHjFxUihoreyXW2M2ZnxkQYPfCorcVYq7rnrfuUV1ZYBNakboTPj+b+PLaIyFVsA5nmcP8ZS23WpTvTnSog5wfhixjwbRCqUZs5CmhOL9EgGmgj/26ysZ0jCMvtwDK2F7UktN2QnwoB1S1oLmpPmOrFf/CT8ITb/UkMLLqMjdVY/y/EH/MtrH9VkMaxM7mf8v/TkuD1ov5CqEgw9xvc/+8UXQ/+Idb2isH35w98+skf/i3b72L4ElozP8Dyc9wbdJcY70N/9F9PVz4uSI/nhcrSt21q/fpyf6UbWyso4Ds08/rSPGAcAJs8sBMCYualxyZxlLqfQnp9jYxdy/TQVs6vYmnTgEERAfmtB2No5xf8eqN4yCWgmnR91NQZQ4CmYCqijiU983mMTgUPedf8L8/XiCu9jbsDMIARuL0a0MZlq7lU2nxB8T+N/F7EFutvEuWhxf3XFlS0KcKMiAbpPy3gv/6r+NIQcVkdlqicBgiYOnzr6FjwJVz+QQxpM+uMAIW4F13oWQzNh95KZlI9LOFocgrLUo8g+i+ZNTor6ypk+7O/PlsJ9WsFhRgnLuNv5P2Isk25gqT6i2tMopOL1+RQcnRBuKZ06E8Ri4/BOrY/bQ4GAZPE+LXKsS5jTYjEl5jHNgnm+kjV9trqJ4C9pcDVxTWux8uovsXQUEYh9BP+NR07OqmcjOsakIEI/xofJioScCLW09tzJAVwZwgbQtVnkX3x8H1sI2y8Hs4AiQYfXRNklTmb9mn9RgbJl2yf19aSzCGZqFq79dXW791Na6an1ydMUb/LNp5HdEZkkmTAdP7EPMC563MSh6zxa+Bz5hMDuNq43JYIRJRIWCuNWvM1xTjf8XaHnVPKElBLyFDMJyWiSAElJ0FJVA++8CIBc8ItAWrxhecW+tOoGq4yReF6Dcz615ifhRWLpIOaf8WTs3zUcjEBS1JEXbIByQhm6+oAoTb3QPkok35qz9L2c/mp5WEuCJgerL5QCxMXUWHBJ80t+LevvZ65pBkFa72ITFw4oGQ05TynQJyDjU1AqBylBAdTE9uIflWo0b+xSUCJ9Ty3GlCggfasdT0PX/ue3w16GUfU+QVQddTm9XiY2Bckz2tKt2il7oUIGBRa7Ft5qJfrRIK3mVs9QsDo9higyTz0N9jmILeRhROdecjV44DDZzYnJNryISvfdIq2x4c2/8e2UXrlRm303TE6kxkQ/0kylxgtsQimZ/nb6jUaggIXXN+F2vyIqMGIuJXQR8yzdFIHknqeWFDgsdvcftmkZyWojcZc+ZFY4rua8nU3XuMNchfTDpBbrjMXsJGonJ+vKX0sZbNcoakrr9c9i+bj6uf6f4yNDdaiXLRhJrlh5zmfbkOGQkosfTqWYgpEKdYx2Kxfb+ZDz4Ufteybj63LzVc7oklSvXHh5Nab4+b8DeoXZihVLRZRCBJuj0J6zk3PtbkjaEH3sD3j6hHhwmufk+pBoGYd9qCJEFL21AmLzzHHktN9jW7GSpe1p91X10Bm5/Dhxo3BNex+EtiAFD3dTK0NcvT58F0IFIQIhgLP6s1MX8wofvtnPX1PQ/bLAwNP+ulKiokjXruRYKzTErNjFrvX5n6QD7oiRbOs3OQUswDgOxzcd+WwGZH1ONZJLEKk2T4VGPrrdkN9ncxP/oQ8UFvRbI7zGVrpNjlniCHT6nYmp7SlDcZ1XmS7tm9CXTMumh89LnaNuF3/wPVa/NLSE195Ntstwz1V2ZLc/sULMGaL4gdF3src9sR1Fh33/xiS3qOrJQlLpy2luR0/y+0q0RnVBBBe4yi4ueiNOdNAq/pR8JehYiEiu7YVJJcGBNBHlCOREQviO39dwxTxdulwW+UOO+OrXOskQ/csaLPIKxUOUHktlUtch/SkuaV5QD2G4vweAaCoSxMZ8k9jagIRR/irArsMUBBkvwQBZj1NYclQ1WtdeoYsd38CObL/DJksETohDEy6ZCixViSEPvNKiV1SSCwIiVk0dPGwTZxeNwPoA0BDhYNc4tIkej3DcTHVTS8W1vYFlURRUS4k2naQ5xI0fseTRBHJQ3WJ6Tn45afc9k9VffnLeTH+Kdd9X9Rnont4E39i8pr21YM+umrbIBTB8Ex2jNapeDYMPaeXACP6jpZnFy8NEyG2AF+Ega5vkvKIWjidXnkItArCkmeU63Fx+eg8KiP95JfLbUQus2hJTKPeGTz9b9A0TJtnTVcdJW15L/+3ZIOQ3jeoFsEuB9IGzxFY52ntO1vJvNdPQMJhXkvTNcRYz7Qz6l09rNUNGbfVNOW7tQgzdp42/0sZtnFW0+64nFJ127Niq3QLT8vwHYw3kOplK43u3yllVjU+RYv76vu3JMghXWGsSB0u3ESlir8CjF5ZIflzQoMn0xbP3qWknhPYHTAfu11TcndM/gV+npAK5/yKkwjnzWs5UXGXJHwAFo1FU99jtfiDBlqk9Xmq1YKsy7YkB5nOmw6dy9mjCqYT72Nz9S4+BsTCObdH/e/YZR3MzUt/j/sjQMujqJNOqABq9wAJCDwn/vwSbELgikVGYviA89VqCQjLBkWsMBf7qNjRT3hPXMbT+DM+fsTUEgPlFV5oq2qzdgZ6uAb0yK/szd/zKqTdSC0GlgQ//otU9TAFEtm4moY7QTBAIb2YdPBQAqhW1LevpeqAvf9tku0fT+IfpA8fDsqAOAQxGbPa0YLgAOIZRFlh3WHrFyBDcFLdrSJP+9Ikfv1V16ukcQt9i8sBbU/+m0SAUsjdTq6mtQfoeI7xPWpsP+1vTo73Rz8VnYLmgxaDWgOuNmD8+vxzpyCIC1upRk0+Wd7Z0smljU7G9IdJYlY5vyGTyzRkkN88RMEm9OKFJ4IHwBxzcQtMNeMUwwUATphdaafYwiPK8NptzFLY0dUIAFj2UVoHzUBmmTP1mWCmKvvesqnrG3hj+FHkfjO3nN+MaWXgorgAAA6K9IXTUD1+uwaqHXsEALRgD82K6GVuzjQznaC89QI2B34wNf1dPIwydDO38xCsAKCdf19/ePn1xejxPZgLmzLlTLvloYWMde1luC66/CFwUdwGF5iJ4QIAM5jvbl94r6EYr52H2W12SlcjAHBSzoVjusrp7UZh18Z/J+vwjQccSS/JBNE2b1adygAAyNgJ5P+bqz5+CPu24bqx6Gjcz84IAtVx2VEyBJTqrocOCI9I7r4vD7cz9L3AGZ6DBzEu36w6fQsAkN2IsmzCZWMxqbMTE75ymnyFiK09l327D2K9sywTANigkEkmLwTn4RqDiPxpy5HKA4aeYqbSoi0AUAKsGA5go3ZXjR0qpUsAoMWolyNxzyiIPZ+qsEM7QDgbHW9WJWwBADq5800tDEPPiPa6ialFj0uNAEDJEC4am4A/oPGPxmDmXdikl4cLKa8CgG7265rxY/wjtmbutfwJ6M9Mer8dKHyeZkalbAEA49jkE8MATNz+qKwsMOlGAEC+lkvGJh0ds/j5uNtg3tilTY+NTe/JnqF4N6uSDACAHKQP1Lht8vSzU7iEyzPjut2EPs/Y38IspIepXm+8s+bS2w8QPd+8ONuavlmV3gIAJLA8T+O2x6fBKOJyYweNq/YsVtd2SjETADgxiwkX4POo7fsmuHnc8rCP05hqlnABgBq023MivCisNnZRtK+sru0oXAIAK+fRHim5pkf85kL/YfPLQ/xReQkXAChjtR0XhfDJaiOHaB9ZXctR2AQARsyesDkUv0deoTWmffvT4f6SYAUA6+xXzrX3Smi6X8zthH22b/w19LM0XlWqr0rjAgAWs1Wq4T6AhPsAVGoEAAa5PpwVKjiHWlfJ2TZJf63FjF8SUG6KBOOL9A4PW3qOHE295pQyfVPIvxcJeU+CKduBk6Q+a2BAVtKhf4QnHrHLFpj6sNDUDvhCfNPmtn4pdDSUkHE1wPPrF1UvkQS/L1S52Zv0Sb/r9YK+jx51oWU+i39Owb1p4MDw3LcwvjpMvtDXPEWBlLcw4DNpOOC8f11nKez61/hc4txssbudIo5lL+aszAI1EiiSfkCetqOyBs4trCbou3jqJZ4diL4zvDnDBRgP+086X66Tvj3JOY1rJwmj/sJrubDrVb32PWhOs6BN+sJXQ+6nOZJTgPRg4PWz8sp/wWI3wsGBQoSU6tr0dWOkrwhDNCN5mfGAM5vfnawcoCdm2CdzIN0r72XbbDWqjom1cMjYh229sPnvzWLZAaSiQR3bSL1XjCwFH1wa4ZmmLeiaD4xutxAZfzu0FwMUkXTsvb7SX7TLM4zwjGg+HbjiaRWI92lgwaxTyKgiXbnThL9j7uBDihzuMULvXXes0e9x7PwRK+6mBLGD9z7PAt7b7va1J2EHu/zZfZ6JPoQVd849MZCk3RJOxd5Nsxi+O0lUD4Pochlk5+4naG1j6yiVRKBPobLOad//hDECeD1ORiB9M37JsSxMC6yAkKEdy7S1aRmXRGrLECneqByM8iQ8x6d71F1uhkYUi3WEjh/A9Yw//HCidh7pl7XD8vEkuN/f7XQ3+fhmSfR/9fHkNcRp4qCD13IGIBIAsQXtoDUnASJc+5H5f7YWufNDdZ3SiHJqVvKw8K1RNB/4mJi3YzQP47nmN2cw2BH4yKk+zk7wcLx2bVzeS773YW/7nMg8DMlWZGeYPJ8lYLzOnN4o/0fk9Fb9upq1yXbRyN7iDSRnOnj+kn3vLjHbn3NmA2tRwcfVd/KHGxPybUwcg9e742hY/XBtEgCQYe9Qh8t8fte6aEo1Lt7a9rryutsDxLxo0o9/lhdL/GMs9n3cCxZiuv3as0lchJm9dQGckDBOT/R+y2ft/W/eswB4NFnsqcrBTerQmx0BTPclttiZPF+ctHerFc2RW9MJzpuGOShqyTLCNsCjhPV3EtMF8nVQf2TL6GzI6EphQEjQgG6JrtMu/0zWg2e97o/uoTIf4ipUvVVM0KYey+VkMCWrFynVZh/hpTTXcm3+EV7yX7W6Ehrz8KON4P9MrENJx2msYomlnUT80OrH6Y1+KEfOWn8KyenbZuHQkjBZcDAx5+J64Aj6TSooLJw3anwLeZGOQeSSPXLe6dVY7MF7HhAl2HU9fwES3l2dLETAm5btht91AwjpdUoQghLn7RhAIRWFRVWJa2Jtc0Tm+dHRGiAvx6wG/OCGa7BsWuJ6U3LwfOzSY5qNsj3Qpt6+JyEhflEfl2YZ7jhjJ3y+3ehNh4IBG4eEmVuhYdlx/EQQvnVDqC5Lodj7NWEXjMFyT14tjF768alhticUJrdl3w6P7cKsF4rhxIKWxOSELDHpzaBPR0EgNZlKdZrSiJfPGaWK++nvRxwoo0gt4maZU1CAx33oq3e+NirCq8K514FHpLc0jbti5KzNlr3ttdqoSeYKrOsq+jS0w4q5Z2AMeYnbAgCra8oCHFF0wJ/PTdXUMVyIdTRhS8cJZVr5dTMliVhKm9/TZduaYLTA346l+ILCTo1es+CVq/f+2MU+XuX47AuupenBsoFCNMV/2ywHjCr2flEAWipfnI46tqmjq81ytF7IWoydKyHCSI4ew+k4+ATvUzq2buldaR6SAI4VKAMyMT7zkBkAMB00NLbwmtJqj2k7NAGAqHKufA41DAksWEk7A33esJTuBprShiAOZCMOdd72+E7b1umdzQCSOsdaB3BxZgCAIhUUSdbxYbW7MfnSRjQBAOeidlz5FgodFOhlNAn2jcFu6KmERUygbnHGMpnfdLZ+KTEVgF9WExaIcJy8hr/tp7Y+ofIvp0nKjrUMZqLMAMAsmaCWuxWW9dpVpoxoAgBXKtOVhyhPGCAhWFJty3Ija39F5udrAvbBC+QD+d2Qpx5Dhfh+FqLgzUW10AwAWChUQzuhruPOnJ3rUZXMdgmhZDvzdRCfX1UCN4/l/wPrk1X0qHN3KbpjTKBihdxy04nZgZFKr7EcDqvvSSpivzg7QGxmssgfLo5KZRV1TZtdbR+k3S/kYjTNfDUZyWrcFtxkiVhetaWfvcxumYBgVeSozNkvIgSbt+L/2Cl6TuiPToNFUi3gzvnWRxo0ES1a/Wjq0Zc47dikmBBXXE4/cj/BEnTUGU8vsXsssBsmrEbCzB27QqDQGPdcgFpmIb3VQSk9zfTyXFlADILp0V5qUnuHn2SAu8QszfXheW/UnD34sJXHTECWUYQhLc5QozwqlP1qnYO/j2pQmGU03C06s3d2EjlIdLNuy+Z0X9GIUUWCXDpwtAPYI/zXrF26ADyEpyyj5o5bn4GKoyNdkhskDGYenTTQ+fRqo0EL0yIqcAfyVOvo2jq3CjCRKOLgRzv8NZ30rd0sMLzpKrIwt866C8KrAes6AeYvDWFOdG2WjV8dNiG2wUyaYIU3T/cDo3COPFw8EPEFcIZAcCNE6BpH0CBPxefguDvpbTKPZF5TYE+uaLtxvaIUB3bIQI6/yK34JNzrQt1az5ucZEtXCMlBED4lW3rAfndm6l/kCGLzwMc1jaGqJo9VNR0VIO4dMQMAo+m4cpFwrKQXPzW3czk7Vehrc4bS6j+UCQBQhrljlDaOxR/+L+5R2jt6Tz+GWNGIJbKP1cd9mk9gzEk9hjdUxnNNvHTW4dOvtRS4MRoQDFpUwYuR+pe67JmTNfNtDqx7LG4zNLjh8a/7i6F+adgW4ci+DW1Ilf9ok+1zg/3+lfN6pK5X6QelSexeWGj2JnH1ym6sQa173zvfno297vUcHC6hAoTC/3enX+ej+9JNHu5RQubQD4++jHOK2fiK8Df3A4QC1LZSDmK46S0VdPvZ8VSJnWHbWlJDsshRGb3dyRkMr3d8VnqqBEcrMSKUyBqMsk6yUayfov2tM+rgwqxlrsiFu4pvawUNfFtcuWrc8FmGXzmz8Vn5LxfzeQoLfUX/JWNR9xC9tZZamjtBesX5eUAqtw7rpFfDcdbgXsMcsICLg6iqrNnoDTf4umgefPn5ZdXLAEaKmKr9K2jWq3EjfHsxMwBg48Ul4dwopQnV1GzvwQsXaQIAGfxz3b1L+LfNKAGAuxiMqmZyB+AYNU1XTRJXly88AYU39jt8cP2yet2jRRzcU6scgDEiEryUmuE0/9XcsZcfId18ZowZMT1Pn3IAxpBI9rrhhqfOkyl7L398ZNuIPH7ElH1o1LGcrV7PCOR1IzMAwAuoc0mYU0VR8SZmewtvuEATAGjx8Jyr7ndZRRabBAAakrqa1eFyutex5al/HR9+Pg/51BPSD406ljMQA8pRvJ9nBgCMQyre6J1RTDLuzPw1pAsbjcEeOqQ1rdTmu87PE3XTX6L5Gyznwp9PhH9fPkpGQ8UNREgtj619rgZb/3wPFNQVbHc/a4jvwl/8oBKYjqAA6N6ujHBoGb4ATrvhNBnDILjc0CJKnveWTCZsDPoCAtX87ot1zaqQIOzniFoY5+YhQw5B2c/phhnSAZA9ApFkx0IJ7sCLThlPpxnHyv9oR13WpgPR4gUqXIl2N4nXnTkJrp58Eu4njBlKzTOEZg8IxnUq8+sqOnQo9N2SE6jdRZ1z/fsQ3CJqNvCck7DRQdc3RveF/dc5mlOPI8T4uL+oz+Z8sJ9wZo/NELlDNct9N677yFvr2oYCQ3/83EfWnj06lnR27o268AYQhVTPo3RYYPpkhgyVUD50TQGcbIPBCGxagjGtFBjceJbYSX958r3v5q3JbgoA8LXamYl9ce+UOusgjorz1/LGw/LsWuxIqVZLUflBNNzqe8wfBnngUekITgge65Xj6xD8Ero1H/HAEgzxiww6j8ZB7I9hA4PQLxy2xTCSF3tJ/60ye1nRAiEhHZjEwgdaaD7HdmaDiTG4HD0ArtUhToud4pjcKlanIcEUD7j13JTtBA9u040VgeqfcMoXejWyk7YDcHR0TNJsYM2cyGylQEg654jKROckKeaXtByXo7DqAQhhd+e41CpRPIm6zoUBBU30L6veKGoHUvVujt12wrswKY0GCX7BAJ1ePs85euedVbtDdCFD6u6HVpjhIAJuyalS4D2EoUBc+OfKne64AHj8o92ql+v1XqI15bZv54pNU+xgh2zxoFup3vOQ40Jgk6wnrxfKqgVYJ8SCL5iRzYqxfYJEKQ6I4V7umobUg1tBdDZCI6wYso5GIsPj5aztuwBIib7SFoG3neHuUIkB0omw3HgYMqAVKWPKX3j0zEOeXOXa53uihs/cCwK2zTUdWfmdaBXGvP2ca3oubeEUEhTjUTjLD469sBTbSoNat4Q6NAHDoLn1d7TVHjJAmwfrggxygS3ojqv4siKiccTvzqizQ/sT37uxiPOJBH54kEryjipahqC4WYQ3Ztrduw39FZkaL80/Kl1M7mFa0VRxRoxS2hASYUpIdRLxT54CSsaACskZURcD6T7DueOjXevevtHYqtG2ZT+lHHVdNiMYIjJ4fu/nmbJp1zaOCONKPSKaP8J95Ije8V4Dnzyb3018HkdmaFbKBJDZMrXEB/VBy2mXVnq8WJSTK8CQuWPax3x8N3IdHtP+nKkRuXSj644Hnl38rAj9tk+2VVRuWRjNa1nsrvymeydN2VmUP4vo65rVvUozV8g+vFK0Pl3TTFjraGzjnpqnYj8fEn7y8xRGCb8o0PpJFDvkn5OOcISVLmQL98k0v89Y4snCvN8eEeM3lT34MjVzW2tBDx823AnRhLHF+wMcfn1USCfNH/y2+Nkmud//9f0xIbj11Zu5Zj4+4VjnVY/3brOKzwL+ejBmAOA47WPUljHF/2vcrorTjC9qauGcdjWqnl4Xqn61TABAfHiRvtpVT/BXt6udWv7G98iwegCujaC1eL1yhl59ATcUPRL3AaIOA+I5uupJcT1P8HWp2/hzT0Sgulz3jhhpRAGwRce+/k0LmNKMTfgx0HDnnYCoD4hwwcoVOwxDBCUhRKsQoCSRhCue2/9c9F4/djN/iU8vqQQAu2W7NleXuELigy7hrrH0ugYBzkBDFOm6hLH5gmTFDrY922J2jrjyFiDRWEKvovHJtvocMB+GdcfEc26nXAIxds31Zvyjgg9jDEkcu356cP45FQyWQ/2Xr9D3uuWTcP5rnCe2ZJ0E+rAzmSuB7q8l5kKexhJKIEgrqufzwt4z0Ma+6Z2Tc87Mxal5/108FsEkt5OMAUkkyPVYQvnEFI//BZi8mLGfYTCJKmKnPSOjj6PKKtrk9r4yTzXtIoLNfgCFXbO64O3y2dHOc0mB/cn4z5fkuA4VivPPReLcHVz8e0Cn05dLt14MyJdAU5yPV1oQSPcU194ylCH1I3Xt+oTMx7XGZgDuxpWddWvXNDuvgrl5OdL1SFnrVEM9U/0qfyz+6vo/VODmhzpDG/dFXZtJ7jTriHeSCKPhhLO5/uYBuSfw1POp6E8u60XdpKOROkyUcoWjqimnNyHhPDDdV1/7ND2Bh/7aiuxpFbYlYhwZNrk3v2ylTvyNsFmfuRontBwiqKx329Zob7jLYDIb9PrG+AWk4nN4QAF3naK32CroJjFK0dzBGBdbhqGvOwlO4Bqc2B+K8vMn9SgTYKOTXQpGthMF0aJQHsdrTiN+fG+eK6bKky6CiukeqBgoB0KYhl0ngc3MWhYQhR6ULDmmmrqvURCguRGH+xUW59GyJPI78e38CbKxEQpOnYlmZUheRl8+5Orw0KnDEZXpMdVzYEcr8V95gf54U3cS7adnQVQm9yAR5pkyblumE52RaVLbIouY4WxcNzoLJraAqsbN7CUaEyQRtqm83YVxgTXFBNPk2z9SfS/2mTSulgEfWUOYmQEfiAaWnX+P0ezKFz1BzO/T9SX4B8Sm7NUmDnbHI74izpe3Dq/k2jqvsxNBX7keI1eux798aA+Ee3pag6xpPDa7uIun6dXBDb9xrdpAFa1TYvlj/3iacVrXUYInG3OQv5lASKQr6Ok3CWTOFrkE3Ab4lFR8hbY0DZsgpiXw3Ic8YccFXomJeuZ+zNjq4CmlxYhcXQnrgtpWb2S+JXEp5JHh9APA4IjKN4hdm0qnHRzhSFfJCcOkg/RinGMzwtgNDahb4H/uNWjrIexsVRC9uYlMT3CCWCLeq12rSi3BlAQrnIAdFhL2INatBUy7ruc1TE+6eZ2XkZ/C6d6+CJrwouvF0ghjWDogxPbgxotmr56iGJoKnuwNF/VWHb037trPU+K8a9PCmGGWrqdiVkSOISAAc7D91xXG8Svq43DBvltxo/jeFylAbMWcCDXDm0rM6DbyRvFtLzAazwd/SPi1x5/NHyxHgX5VESDDn1tRHXzSlbjz2ulMvtv9Dp+Ic6KQZ3edNwa+9iZsx7kIwYF4aRfPuiAwhoYbkgvhVzlgwfF3Z5tX5KgmwkDs6AQdqyuZv1U3sFzdM7UxaJQ6JM5ELO+d+/k6PEylnYrwSOBlurpS2rECSHSp8S5Sbrm9jweZ44BxmkOBY4P5BmhH1PRRkCRcXYG91K0JRzOD/B1vQCcHf//8atBI/HuWuilLAbut+HwOMwBwqaIhe73RUkx4vCmUs4j6ALwz2cUa21NgLwszAYDj7hk5AvfEbG4HnKsavV0z2HZTPwBwNCiFQ3kIus/yxQ2assWZAi2zvyzAEU2C3XdnMwLHq7+vztaFd9UtqeZAqkKXkjoBs2vNdgByZS2cA1XNs70DCmO/0wQp1xWZZFWF8W3oy6uDaQnLF/YRxHk4rtJAAui5f4zymPhhpt+bgyGzSZdePfx3cSoXJIAuErW2pSJav7eSO0FL2bOd0eNgTenDatV0qcMQm4q085gBgJZgp6OlHCwNuT4pJjv46ZFji8t1ho8XaAIABIPsmTYL/HWV3harXQv7AQAWvtqIyuK3dJ+Cj9PGMb7K/JvB5xoGYzzTeucCQeXKMYa5Jh9EzhnyD3aGdQvU/FS1qMnjkPpyqtBQbX+HZgCANU1TteXcz9EMPZ0a78Xu1gxoX41fMf9Gx5SxOfgyF43WlePpTPS7KysCZeKjhxfH8OR2QZTGU8btjQNsDjEviJ5zZ659N/5Cs3tCTKjmg9XhwU2AieBC2CpJAc9MszqjvkvHbiHW4L7rMM9qMRXNBirYkwJvjoctYaKk80gNWxIUK2xDd1rykGGMhRq2glXBCIanrVbE4ctMSCncz7rDmN8J8+7xEr+37HpwPbbLV7DuIoUNODXiuNOYAYAdqqXg3NFSErZEqkops7NsF4dEt0pzJgBg3t6nyOT+ujWUO3o/HWboODheW/ZPjzH7Y2vJl5Vf1yz6cJxee134g1HHKtqNR06Yb1afnVoMAHh1fMz7KJmMuovLqpY/VRzDP+iqbrVar9VPSZxLCflzMZyzGDZ8juE3iuEfdIFWywg4UAxhvkt7H3Vz2Nmijfg10C3pDCGbW5HkGR033VTgXud+mVEqiPa0FRwBokdONicFMVWtN2cDyUBXkaaL5B06Dqt35stna5O88Hr68+Z+0vHQeOL7mZXCPby/RztHkz1eoTOcHLwcfGzDjP9lqtKlou5FzABAt+Kmy07cqDp8+QpF+lRyz702fCBvwQM5RRMAiMkiog3HhpH3/YCarpVzwsDVzQUBQNA83tWEAQVHZpGCKOs9UgWB0sS0CoJt+jEqKJxR4KigJF3udZC6mslAYLpqlIKwZZRLawYKHLe1OAacLM8+C5yT/b4tcDp1RVdidcVxOsa8Vfh2fiRZ4tPLrNuhQJAAyu8f42gdo2Z48/uSo/P29+J71n4oGiSAghLF0zoExPPe086JT6uNadoIQf+UfWOXtuWPNasWv/o8ZgCguhluxCuXg+UWd3uW2hGf5Yq3s0gTAMDia0wbFX5SKZfmYVwWGgQAHXyMEWXhV+k+Ar+tjd34iPkX4kOGQRqfp70XJHXkjm/sJ/ruOb4mSeuYnTfjCWFvoEcG4BwfnEtpFvRelrlGIum4+DYYBA7AtEQyHmxHxTHP/CVxmr/Sp7QXobUx4qP+rGJRXehvjg/uZD3fs2M5+cf7E5+fOPC8KOzGyYE0ZYwhuF0MBVh+MePAVk05a3djJn7kqrUyvLsOroqbM46Z+nM6JvdaGsEjVfwqoN2SfHc135EyJUq88XZEIX8I5nbsDEklYj4fVQqmNM/LjlmbbOv7O+qij/N1bqYrmUIugDHNlrEKYJjRKVYXlHSPdfyGYRC+RPqs64u/jo2ougiKUNbbpI+Db/x2xXsz0rs6VPAcqFgWBi/RYfXDhM5Ens0FyhIjELEM6DiViir7E6DJ9dNP4HqWVSnodz119e7ebZ8KbVAEGh++0g/ApiYn5VRNSkMFBkNiOgyUXPxXrPkCEEh32BdBNi3O8TCdjh1Kx36Mgtx2wdrve3T5Tblwg3Dy+gFH1Y8bEJ4Y8CpF3f2ifCSfFN4eSp3qgkZwRVzRWFGKT6KmfJbumRyGcIXhjcutiG3UCPipFIo5tES/QJQ4o5fA1zjdnptOZ6UTfGNOqVAk55iL3/7V9vAJgEzoLJTAOcpesyuSLJ9+IW+7q3ToWSR3w5Y1jIGVKSSunuyIIgcV81NlP/hsnTQRh8qFuSJCUR//D4NH89aIdvtqj5KNjOeCsW9jtsu+p9no9a8geJI1GJXPffb0anRpeUfz4mHRTMBWKl2PDpgKGxjEFyPzEZovmYVbBJqzI/RTaIuAbGwW7lIsDnvF2tLp7Hu1b3qfcsk+/G3PLnDBtaF3JHFxcZZjXgxceGu9ILgKdVl711k70N7xjW3vWAcAGE3Dl1+jmMZYWowjir3aY4c8NRZirPY0Ev1+E7PCsPpUUrFDWx5UL3Rodd/wKDQrtaeR5aVhbA3ILyE3ZJhjvRLYnEuAOyGwKzeB1SZsOJCWaGuT/p5rkM+b8QSzB+lVCEqxH0kxZyEM08yz5OVyjGpfkg0zhcnqroQ1mRg3mTReLxNIU9elAcNGtsPJ5lXSDFeEIunTdwmY2MhZ8LoROcH35TLh3OplkQ6JJnwA1CB9d6SN0ThG3scVgT6N+LHBf3cmMBRjqZn7XbXIGemgb/Xk8bt/mx5VZe42eAID680ptynUQBNR9Rf8HbSWhuPaSJA7qG83SvHE4ZU8OEZqIpGXZ2GlaMKbIbq4uiDYovInRvGODQYcpAO4zgeB4dnzqV7jSqHt230tB5CUBEsE9/4cJkpF0SBAh3k35zXTHvCenvz1Ud2TezFEu6rBNFZnsbQrAZqU7ErkypRSf6XKqPZigpk+a+0vsVaED2D3JhRNwxIY2pE+dvJNX6SJNv8AiFzDxFryAUsX4o48r+31f43Yzj4WI6eSDCeJu+GPFvJDu133wd1RnUutlzOH90ntQT/X7R/amKrLW7A0s7jEKi1VMJ5La3AvXzgwxMrp+bww7wFh1HKN3Xhvv+lKLFWQ4sUEOD0zd8CG7eucPfHjJI21YN1vyB1iSH3wVqtyGD321FZKYMEewOQgYKGh26SN3RxAK4uhux5ehCjaQ3GjyCMS4cIeECSG9Ami/Bv5lzzDc4SKixDRO7muxtyUi7xbSGtZIACJ1BYtKuVj8nKICZEkv6tAB0p5TtJpK/9/XVrKVqIC5Gn5Gl+0A2Rp6qk+LbeXn8lN20x2VCwnMxjORdqIQiITNmlKN5I4thKV3Ze3OPhGP46gumAIlPrjldf1dBKZVqhtblr7/oNQt+T9uE7exCNrEZu9oghu1pbzbmo/SpgGJQZbzXpocaLCH1LDy+GH68PkYGdP4CubBJyQ1g6E90ERC3NTSp0QBu/GHRqDgqyK3V2j9dxCEcVLFpXzSIB7on3SnT1kN8WtZr7ekIrjZi5f0VjZ7TRFA2LXcUfw+v714j3uPV07vb6V+Guqzup7wTfa5UOr6bDQ1T3NbY5CGPvUfib/szeX2BjA7h6u+ioHp1/cw2IrfMVok9S9Z7yhpsnxkOmq8Xo0MV1RmRf8bpBvDNH6cgLW961Vv5SeD4Jpn5HEoPWpbBq9Bpna680qtL7lTEt5D8J1k+uhkho8aCcB6XQ2X8v3eZNlMhvyPqR7PLF2hJCMfG8uj+rFeMWAK3akFPtO/o/VbnP2iGtkR7/rWe7ck92lDvk8q6oXiA3cZktHYFYSaLq/Wd2Evot7Yw3RHQToOu7B9UKkrATgIggmR6iaaXml2a1gHX2n548XA7GA0NQHEl1jZVE8ujv65YK5p+tg0LLvdzacpN/toxn+ebxUhZ9WrxYP/6fr9Dd/3jKT9qPcwb0ZHjwa/vmHOeZ72aED+8NvjT7aj4YMnL9DKEMLCLsQsf5EarQaDzcmTWgys8xKOyFBrbcOon9JCV+wNpa53kzxvzJ5O7bVGIgO402v5IAgHbO+6RUbSNbEWEGK5hXuh+Ctu9QahUtfNk/FnItXny1lltmcqOehqOIVT1blWCfzlpMrYeA2qZwB3KGKD+QmDdOALt20yVYVTB5tTj2+GmMDy7xkk08/ezZRHkiu8F0SYN6kOz01gIVGhx4PnxMBNNZ19oSmZ0G7FbhqlOWIIN2tq4hR3nQRsLN+eWFM6eCpGpYrQ5lDB1p4wKcLgCNRIbYX1syQAvEl1a7llGiQmb6ECq/7/nV3Xt89iAoMLWoQN9mTtC42bTObuALCdRI0FV310Ea36gJCuyQ4X4E50iOCXlEIKYZ45eU7UrnNCS17WqO8MCAmY/Yand6v9O4d4kmT7ZC6qk2ekv8GIkgTdUVpWwTWFjLkaZ6q9fkiCDJsYM825A3DCEUh5hZUZGJFNwjUOTlKo3HuGa4aRV7sQlx3cjhkPGRIchPPtePHjmm8Ip2DZR/q5o86FVBaF5Sk9XumrXpwRZPTIQ8bJxNId0kTDy1nEIPjmvYo3kUVH3D7CVqAmawsvm8JH2Z8KLO8/ycLE/DBQ4WvxhWo0Pph5K98UQLfVWZ/UytitHvuWl11gNnpSwBMZijoDMvuarjMIyi2buz2w3nFt2lpdsU17X3m7DfPdSAU9ozBqxNBx8mWf4WzrW5IfaqvHR+vH+6YsTi6rz0tLf4aYgt3gu05+/SiYYq5pqhILfws18fN2XL7xjVL8jw9EWjAFXcAuix8blRIvBCOgrr//dB0izhF6Q4oWfD+aK30NB7cqT/Opn3kXl2QFB4JyrpPrPt0JPzeIdIfbzbr/hE9plcxZZnOkVdFV/zSp8FxdslyWpjEPNJJXZ1ePgtW8Q+fbzcSjnd79KdsHHypr2ZwICYguSrAJJFHlydIA6Ttjc067yPgP6S3LV3rdJuwzy3VURPPHcEuBE9RKTDdFVjDOea4iMrycYG+WNjo2W4TIQg4t+3bQ0kjB2yZ4EE1MQaEyWQTd7kBeL8RFGoyLWXUR5C3g+NeYxfCxVsIvZVoBp9HFHTUJCbXacDeU4pAR7s52EfaGGusTdyg4bF2zu/jkG6jO2B4phg6J6GFn4PPaNgei5xBroUV92Oj5wuQfwYpJO3/plgv5Y0r80XSsnGEXuAWiWmZmY1lsQ8US4K1dYzPRcTy5Jlxw4fYlmKuVWTRbRMYKmuw1I33DmDEq1P8VP92Od4QKQnw9hFYWJPYbHR0xKSftb2WMjZ8tBAxQRPsko2tgFd8fyI6MCWnUbiNYeCpRs+YHAIoP5A+IMw7ilfD67stGzBQbPe0rkPkdzvafekGuhsTZkCc1If+8DSkV43eb9zvJrl1ePyIq5kn1iSK48mmVI5s6WKnHAb87PJYKWmHAK/LiVmO1GT1IDxFSZpp6kLIrQ7z8uqWdiM1+HzjCOwrqHqwKVQCrrOeaQZV3Cn2NWhvzqwXdibTusuLztkgAGUlBxHXhPHbYl7s4t/uGwwBytV2qw66lXlF+tFiQG8sAr/l2+r8X+oPmPxVda9IVEtMFPehuoD+szcvsVuBjanjPfYXvZ1sY08gp19W6SxEGa5MH9kyBEfRetwvbGSqFojHD2jSJn5jmQ3OFTtWNPaj6WgL4LGDmfRvLGMwm5o3lTJkx2kAkCf27T4iS0PfW7p0PeQeHjoPZ90eKsPWr9dxgOSg7PKMbAB5+v0/X3SUGA8BZjFKz+g1kLfK4vgHtHa9G7ODeBAEKJ7NZ+pZtitnlTsDdSbUu3PeQvYjt8EhRO0QBPg22kUkFv+JRStiXAXYTTqYAjjf+cCyqr7UJcxbMM371xP4jigI4Kub0l4rz7G2iqZkzSvv47XPVqmV/l/qyRaVUsyrWGaB8Foer1e7OepmcSpQxfAbod3dnOIX4z27UQXtQgJobSIkWYTYZkjCAP37uo9WcCNqL9w4NRW40ADhRMYBmRub96mtPmEO9KOezoayE3UFzDVvk8YxLZha/Bzt9LXEfY5sF/FVyV4e+iHBKpbaCoIB/I7Ntfnf+qFO6ZQlYjH5ecDmKYSk61/ngM7IN9BaZKepxqwDSNsMK7eQ/gnoyGTVPFcPQgoPz7GMBocsvBftsYYjogrg5iLJtK+2TCKSnAt8VEF6h8ypqi4A7HaAjqhK8eQZOfi9fjaw35vff2n6/3Hy5fs4iRuaT43Vwu+NN/BLTk6tyTyTsd6o3OFwet5g6ojRzhtMnS3peiBHGEcGtg2GVTrJWp2gIFIs5KPyrAophV8Onw+qo/HH+YrmB6vkPieGt7VPry2xQCKnJ+lVCQrgZd0AQMCqvBgQp+mYcCLJzoVtart15zDIVzi0momismLW61a7tTrqbvnlGgR2GxHMECE3111MlUkwFXYtx1vcYe3fbYFXXPoPAKAoMCf2s2xwctbtusDZ1cPHEXsrhg3/zviTN7gbp4AtQqyGI8COwAUt782BS/OxOwDrfsN2AABVtfQvvN+Hai79m45zarWdRnmo7b48HqADqqPphAJOcVWmE6TrpjEPAGAPOIiNuy1QkZ2ZPlALnj0c0LW8YUJQOzVQI7Hs7nij+oX37OGikkz/Wu24Xl39/yx0G2C/WP7edwTWwENB1ZgUIXWF4/F+Hr/JnytTZk0+iu+3VNsAqsF0OLj5/sh79nCxF2bkfPhkWvtMijpO7Xf5R9kf4nyPCXtlFsb3H7YCf10Rc171fYX4MvixfNsA9tosnsxd4BIi9GaGT9iv+W53tfpIK2XugXoVRKRQcdx53QCAj68BNFTUdcqnmZ0LqS3ukg5q5isckmNHUVkxdEhOiVRJXISuGBHtETFhrrvIs0ngCmrX4y0mW/s3YzC3S/8BgF4cqD32EwR0ZN2mDHppiwcL+sT+RgXMwSnAcSFsTduP80FQBb4rDv49Ge9DKs6aW2psI90rV4gcAt7Eced1AQDnKIrYj0f8uwKmfu8wMr+ex/at+DweCrbC59l7ZD2HUL4oysJnurkIaug40ygE01hSAAAwASJFtvhpiPUHId5mMwgZ6lpROiDZvVwHAFBCCGOLuZhnvWQqIkz3JdKaxm5xUzevRXZkZY2929k7imOvtveTwVj3lH3OvBEvfIB4tw9/pcogEIS51MV2nLx6pta2ufndi5N/XyuzHOp4tX07VU0OQJPa84WmSZDrrfWbtTcfv/T39LPko+c1rF7YEz9rM6U1rF96M59g9cktVllRpsCqYhx3PjcAsAqrGUXBMKXcZPANOTGTJeUMraxbO2swl+LlKxzaRURxdsUEzquwS5GzJE5olHIeIgAQaVnLCVY9BRMda0k5d/1pC0gNvOwfANA6kA2xHyfxZ0FOob30iIXKxTmcqD8XxRNkr+jI0nuOA5Q5l/Jq2URemRf4ru8IkTdlT1JNaolgiwm6GXecj6Cx55gVt7BVgStP9CpJzZzxZDKMpraMBPF149VfuDk5W+JGpq7KhshgFoHBMTY8t4SruiUqOBuCgtuPmODsnl5BFd3SdTQ73pZ8fnYEBJfWAo1wYJhoYDrBwFRigU2n1YOJBAYIBC6Vl740850tyXxjgoDL/nFsp8JEAHMIANYhIQCe+XZ6Ki4wtj9z4s37J596qh8oJuSRpUTYdqvLqsl1IUNgMbGRMMVQqerjwIoOBIvhvCkAwLkOnN3usRMeBy7stGOP+bpL3ptAVFwl49CpoGt7WR4AcBwjboIWbqo65luDaW/ux0yvmj+YTumfhIntczgdVuwSmAxrg0FquqAGm9CpGElDj+MzoaBJj1s1e8vq2PD8Ub2HA5/0xTXL6K5pu/r9MM/tLnWJod96/hO400WAK2z3904HZ8b1HBMZXTWZkKNVzTR4IrD65o26AQALhQp4AbG8mTGwc8Xd5VXAeQsBSI0FsgDUVRK44G+FVjUhAgAtQ+sCJ9jUbPh1vDfcvcq/u15rNNB14z8A4DLk6XV+vLY4F6t5HHCxBfFN67IRXJ6mvw0U11QrpXisIL3DrfdWpyz1CcoU42Cq6+fWA06z7mHXSHJldz1Bkhc25j3eTjWa2gGAlJE0ZPmG5u00UW83EtQFOSsNCaSuMQ8AcA48R8Oh45ZVgdmyMih2uCIF5pZlo6wCC7EG1KjAVndAsbwg4+KWFd314aQ4TlpwPkNrbKkHhuodKaKYFRv6GbIfc/DTIS/9MrZTgbEBVOVonNhbndOIfBT6ofxW+ho/Rk89QuxZWDnKVkL8bABfj2PvaSj90uinomMD2POweJQ+Be/a1Cs42xFUIjL6yvFiE2NViUHkDnHced0AwLTOPzTImzsFZKTtprPxkryFUOjqikroqCpQTJVErdB9TYgAQEPQ4oYTrGru8jzeG2ZV+zfX4LSW/gMAWhl0k/3EBfraag4BBtTFkzBTRYeW3rOkWslLmQW+pPdhq706C5QyfZhgboceEvIzWO9lEqQ/ZO9xT/HNeinsY643vp+BGEBexdfzbQAABp/qaNw2vRWCquO3vPmnlM4CUVXQ3ZaB1pHCzA0IZ/H5u0IIma4MsYIQth1nEYuQ0CoWEwAA0w7bVYgUzJcJKp0cm5hka1dmMgCz4uQadgCA2UKsWExpLWFdNnMDYE1LvDGwFmySEogbcIxKHHj06/lwe8wpUMf+TymTqZT6cQlfVbGD4QS7nmACn+6OoP3enWfJG24ruwwvWxvb68HL+c16gt2TNasMXmaRIQBw0wgS+ynUJluos5PourUM3SwnJ0+i6Jh8vnMBH/+0qCq7K1ACAtXukEDFAHoaEAEAAARd7lPLiAJJU3vVf9PRNLE6vfgfABhAc5D5sxXKqv6W3tzG39LG2/hb36bb5EtKrTsBavpEC4MXLK+L+eAi1n/VrN8H+SC7f/79K/05bxVuEMRc/u+Ca6A8krSyN+q8ZhSj3vrcZL3BMXZZjEh+4pkDr12cFHsL/559wPd/sIUbHivH/4Z5/tj48SgOcLjTe8v3zOSy2/2M/gD9GkMWsVtTdyTVvg+3W6uwXhxk1FmId6QMP/uZeku8OJb5sRrrttOGRRDG+lpD88P7L10woNhld50dJssC2L3OGDzF47ApDuFpTp8CAII2lRzF8nnl43Csejuv2TTXrZuiCoipt3LVOC0PABikV4MhsqosnJsXcqNaGTOB3Fwn21xB7shpsLqgtLcrKqoQbBdOMXxwF9rGKrzKaemo3h+DlyEn+EL3F9zk7rf19d/HjKBNRb3EHooiBcy33plc/Tq+s+a6zu92p3tcZQgAjDX4ErKRamcBDryZOGA15vzu1LqhQJ9MYfDu3aUOAXV1EvABnDIihDlXeK67OE1OtL0glpV/vEGwZDDsxn8AYCRou9f8WQRwqr+tN5f4C228xF9cW+ZKN5RiEvjuRGUEldYn6Vt6kYQpp0tCIGG2M1CioNRuuxtMQ+kqZyxYIdOdZe0AQFgFBdiWL2IhA6bbLuIhJbK0klBFVWCVpjwAgOXhVVVBBTZuakC27IxTIAme7VmQXt6QEkijCio1Ltwj4zaUKHzkPcM5RXxjvU0t/cBQqSFFqKKiiIIb/jhTMe8lrqmdy2oNoAJD4wToKYbsWyW9Ofg7we/ImDz9CLE/XaFI8Oi10pejA7vfHCY/l9oawP52tWFpigZrOPMgp/nE2huTszl7klaVCKxzoloEDgCk2x8faoc3NwRE0HbZXL8sZyH17dVYFBuoUp1EWUDHRgR6xv+f6y66tlSUkduLpmZr/6Z3ZEMdTFfjPwAwIDTXNH+2QtTUn9Ob2/hb2ngbf+vadq70glDzAu6AcGy/akkqsE1/TKEItTbUb1F8oT/nBx9PzPQmWmTCtfG1dm8LcVdwF5g4UxQft+VK5Nvoj208DiQ8dQu3/atIawDmRPJ43jNDVrWAFTJ0OAJEYJGQzpeDGKkybTYd5mukPmldavVcjb4/dyfi/gLd/Ozoq0tIKBWjJy2eLim1ITyuoX2Edm7GMqOichceVrfRhypP98e5uOAaIt1SMlMZ2IhIq6e3SphC+I/h0nbG27Ai2dMU2mYYBoNsoANzwdjT0gvkUj0hNRpsDGuJBYmO1C7D5OPki6qP4mLe/obk8oiOTLSuUWjYBtLtYyCHeyA5Tw3tYSJItv1hitwsHaSGHT2dNhvkLxqYUw9Hu7C9CIQD18omTNkPwc1IQXEGbuS07nkzR6JsqXjCoNSB/tnqWkLsaDcUAmA8z86JiEM/Ni+SODFvBxi1gEAWZHLIlnoB1VkBkOBrf239cXXlpVD8c2NFej6ddl8uARiyiGrmQ9Hka+APe1xY9NRUTfwzLfv6FcD5A6WEtXxtbID+ymrVY9/J4iwNREZjukGdhjkX8hGsswGUWk7vnC9l7ibCX6ASP04eueRlIMD4qCzdpyeVoe+2oS3Uyi7xW4CtNYNLneV35GHLjDUvqWAwFviZPsYXKd3Uqh3A9GlyAfPGM0WbZ5+eTm8XiG9bTN+ULlK8BXWhTt9eX0xw6fmhzbNPz7XywsmFvyOUfKx3j5Wv9QMd33Kp0ouJJv36ePfA/bGqXGotwjghbiLn9s4bFtrzcNYh5vdx9wS8PmsHjblJ8rX0ORBx4SCS1KvrdExAQ9xPWeNmlEJnwqBsif2jfm+PyTxBNaN3rYpFkTQK+0rrGNAOxWV/wBCJ0kwgxiXHwLVoG8NTIrrxMiIcUDX6olm6hzE3XbRZFf1Psjqff6ujR29sTcPei1pgfGRzvgAqIHDToyngNbDbYTzaHmDsZMwrhVALcC6VHdMmJNirZ+h4+Aqx1qof3sHNn848n6ekkUKtk4gQdIA2AD2rUSVwMTGA95YBHeotFyOYhipzN3srWpDN6Iflf14z5Ob9ObbbRt2rWegh7JrzO+k0WiiO3AYhqgJrXDZ2t8iMcJNlDZRCMV8DndlBfACGGHAiLJcZtnQk7PVJE6jP8ceelv9dOzC53kfXG+wBAH1T9CXY8UBfmYmhWLzTo5rAMblPkTRKEaBgtZkotQhQ7LLEKNFqfgwbPtog3XsLUMN2ClDrVbGAADVaNwDlEhNsrXS6Fh2BW9tuLbBiz44n5lsQyCo5cbubMgQ5d85YKiOkr0f5k9PV5zqcONcoRMnJkGJoUL1q4RSvmp3aVQeS0lXTQxLDB3tHSL1gYmoFOfhhlYFVoBnIPzXLs4M6sfAJNaRCERBjfr4x17J5b7xCQllj2FP/auE0VrHLhG4qKin4El9AiQ9IcW4M8pntZMUtXK5iTkRlzvjn7m0nwtCCXVkoqCIlK6MULVW0ja07CkDffd/ZVrm6DRDZeDQv+PL2Pp6XH5qd5BLchhHXRrowk70ZsWolmlycHZeoRNFvkmOKUHKbe+0bYAslGi3kgZycD86ZfTZmRG4vKBRMphUh1Fh9Fyxz3n5RsXa4Fg9wYMTpDx4t5qxHiwKc9GSKY51QEz8zu/ENXOaQh+f8YjWU34kzjdUuErVYbcqaQkD6BQqcfSpwev9ejYSyePgOtL5aFtgex6x8BCSSdarUMGq9tUM+h7pXYPAnPvxK/trfumJ1bVjGnipf9E19v5hwCkD6GkwAgIDA0KbHTMcJyqIElfmfNAhW0nXG7kKw5twCNhvBunaR2DIAlxHBWm6unYoAAIgDcKLFgUb0ddjaX3MDHDhqAAgAcgPyiv0YByqrMdO9MjKCLhXFyfWXFHSblSYEBzYKdrKXAAVHZQbsqWAE3rVVYFw1hFuLXOXsbizkapuNJcPbVzcNEAFAlmDqdN/2OGovNz01d7tgMgPJVU6FTCfNhAAAF8As2rgpAgylZ3bHfVXaGDx7r5hsZmUQhwMzqBE7mFVjglV1DsU4rHmlNPXnfG4FjY7fKtQNoFpGYwS66swnSb8lOekLqzlu++bV36rWDWBfvdqocZ33hBvhXyZ3r8G/Gvvp1d8mlzydVnUtBMW2bB4ObwAT5g2gVoMJAKBewCzTwzOGq2ZRAqr4HwQm2HQoY1SflfFGpgGCtzGSVHhyqa2mhdv52no9+aJxO0zx0cU1B1GL+QH6viaAAEAH/LX5A+GHWrPCAHcFsZJY9ojfZZZ68VGlgozuYRGP1v5ZE1vnlIRkfUa71ybJ9dO1uT3X5/5+4usJ2R6uGEEGCTDhlSIelpNdDXBgDfkhCBXLMqgScP45B8E35l8YsGcK4Fw7QxJghRXQANhjyxkDshs+AACXENSWw0JPISL192ZMEJPWDZvfcaNoUgUWr8my5pPkuicgZwfXzWjenE2FgLkUZ0UjcwqkCxvDOpLUmfI84zmoYq4lrtJtYlvE0Rg2OJGLBAwb6zDa3AKN0xtp9MFLGD3+0V35Odcp3O5aBh7+rXbNUcL9weBlnWkPdwtovF19Mk3c9umJgmBvNLbXy/I4RKcX1VEid0n29ti6Wru6riQeoFgn7W2ZsDdAig0mAEBqgOnh6eMB1GUAyrXvEuyg9owogT3MgADAXpZECI9aJAoAqCAKw4hoGqCovAslO1ssU2z+xIvrKK6WagMAKHdsYcxmqYUBGtQ1dLmFHLASXdRstJktG2pqLXHrVu9Km2j6dKTaNSRecmGA9qR1RQ8ybuAEjYHGvy5OlEYDp5devkvTF9419AjUSoOS5RqG+RsheEFXiOU99MAgRldcPnYA8spa/hAAHFTSddLyHYfI69FHjjvfTtr1GStXaUzA5sw2rd/bwkxqm3uXVrj2bTNHsIXt+zFbJgi2cKeKY9tlsEVYYQ+eGGyzT6kR88DR5/KUvrhw0VS4vVLkuHwZmhvWJcb9+vDTWxjn+VWHK/kX/SoUq3XqR0HBGTPh2QLmpsEEANhq4LoN9XPvOoKU+F8UBOnUn1Glx5gGAh7XSBLxrEWiAIAPYtCMiINxvTWehk9Wqi4xuspxDTzbEA8ATDcorOHi3J3Pg4quWM3oQAuaOJv+nCho05SaGjfypyDOlHa9bu2tZMVZa/9jA26ti1vDuy4Gt11HeEMwHM276IdGeBEfuyWDSxogAoBbgzdj++6Wwc3W3N0ddJriKpdNi1hptqqGbxb5nHT+/YIBNdzO2JKvoMZaZqCCOhrZIxV0H4OYKdDNGrFJoAbFpivYPtPh8zIXnWTb4NoMHX9Ry20AdRga5LxjHugH46M3mZujv7QGO7LVx3JrfbcB7NhWfIaTEPDHbemR6f1aLg16p7axgc96WnvDbFfX3mDZOmlPyYQ9BnxoMAEAfAGmwtNHAXhn/kkD4OGGbFt7xj6AHWZANMAelkQQj1wkCgDwIKrDiGiM3q4BivTrJaIktTL/gMNFewCAKzU3zCRFgIYLM84tHjj8KvxqvSnhc7TxCk/L23TBjwvXHiotEtbfKvw5+lkkFSKsNf9Thf0xxbdyL0dmfhsdeZV96q/qm31cL/cESbWfcYgVSXcZmWQwLWX/OcrSNJ3jpCS+0D1+A3c9q/MHX0J4ghoN41Frez4G87xwUEUa3SS4QtPiGQjKX3b3V3oW8PrArxQTyNmt9IIQV8IZNPPN+xiDR7jOYBlumI9m+ndavwQK8ml2TBDE7KrwJRJLIrn933ZRANS++RXGPp5aMdhSrynKLZVl246VVuF28T/3Hn5NBXZYO3PdwK5YwbGAq7bkp0NM8ZZ8AABTuwjFcFc0An8wqrLx71lPM8Nb7ER+vOdplI0sAMBin1K76Ch1eqH2yGZ2Lu3EDKrTZYurZ3nk8Y3q4OOG8SVdqLdVwHYO1puo1IsrUjqt6k1Phhu+CwaMh00+Km9c85JuEr71c6VVc6coTDYFApkwkL5KBMBGkf7cdn4lfi756Ou6Iy5S8+ndlkiwa9w/tg7BPXed8XgIXq2t5KXgpeNnDGFXYCAtFKodFqHWisX+NAQAQNKCjEjHjDI6QG/rdRLRB9bgS/YaTXsAQN9mECdZpIQpcB+s8gqBTWC2tJk4uAlsR0uMy9xNswksRi6FG5OXWJJ+ZU+6uIlKLJ8pQMyjuLRZO127IrQ5dg/uumPEImCZvK/Lml4CluX7+axh4z38jDODyjDNmCHlRwt7m+xaULzsS+/TFP+b2XbHspvwWjdkEDxXhn/+BvDZ6YmXQQ6sjdKFuQiUIcsugueudKltySz0EOPMn0RzN0l5hU0iIj7H5H1Gz+NIo14fqzygBDhyqr6EhzVel9pnCR4A5ye8oyUn4drLXgFM3DSeijXfhN5+ndLoizM2fjpdAmKqvn+Snqv+DW0Rk5GiKkcF03T2GfKlFk7koDmkTRmuCo6N/+zDxA9a0gLghsGHa3f7GzHXnwufk7RCTgAGCjS113fL3VyubGSz8C9VH+J/TK/wlYbHe0XiOoCssAqQhVkOS85pjRk2/zek1zm94jq4saDT5fWk/ic7uyhNxQaIu7LyxeJbA2YtXN1P8V+fA+oqF+5lf1IrZOQoEtY1WkB4fxbUSPoEY/6uc8T/1/ZhckpcKWjvprk6wVs6sg3IUODu0ZONHFcd5ZLmswfUJMfvlsiykJf3jDY0f+sAYIYjjho0sQ2dX8JZIXw89IAQsCMyZnx3zb0lYgpPOEjADm2GTHmEMGSyRfXChbWO2QPb1UZmJNavM3IH52+cZz5oByzl+TwmeeBoGVT4zh2AHcEd2CTOq5zP2JnU9ZIhEU3pEacXOubXNmPYT9Iyrz2PkZDbaY4WD/ht8sKMY9q9r4QvYas9aWviMNFJ7+q9aTPy/dt0kK9cnAfMlygmIvIQnsU/inaR6Tqd2tTz6bImJEJrFGYCwef/j8G584jsg7cSkZ1JF7UcWR22TCVpWf993SKBcqVNaP6vE2h0aYGTARq0Jjksjoe12bjEw032fDSJyPo4Bj9xi9L9O1yaT3PfAikuJrNzdXzglixr6TVyW9QzWhZk588b3VhVCbcC4xJTFxmnmDpX3GLqAY5jTDVTGFTkj1k0gaF7sdGOfOKJtC34HbEThv/ggIetpwlCFx6rmTp37GbqgujyqYuM7QyKgtJjP1OXKRb0zm/d6pY/XjR1aeJHUxcST5o6pzcy2PGmqQ5+/GnqIRKPmmph8ampSxavyhWCsQWKjmflDxIyLTn48a5yuvCMFxofIbGbU486JeA8t6yE1FZkNQufzUtrjxxFUZqkrRb2bTiFNhiUFOkCkzvjRVs3+aQn9s+dK3UXPLHo6UEST47bcLYJGx5JyYXpCWpTCk4rYnqgJwpNKUPiECRAmoNrbKSqfJtl4GbRdC1ZtfiNNVsnc5QVV2ZQiC+Z7KDjcoTZG7RxejediCl9yz/pDuqIWIO7v8c6o26FgDWcOKdW2qUNpk5wVqZ7ptFicadaSggAbPUME2/Blh11ariFwULd92UWmY1TY4TgZCMXELL7gAFASrd5nTm20qrowm2O0CZ0+fa8hEMp+VDfYeNfM73HtRrCU936vdKrvZ2nniDHEYbSlRIGzTajAABaAClphug+jeeCBFabf1QPM439WLly2aO58otQF1wCtUUMYVdgIk0EbBsR5Jmiu9MQAADJ1WMSuftRfQBU7eskAt2jRClNewAAeuaMqUxS2Iv5w5rVDXyc3mTjs7QxG59lTLGZgghu8cozqD3JijALFJ0U7Ukv0uFieJ16c5d/rCI8scluSbvbRFbhssluR6vflGlG6h44PE0v1L1aehIANKeQjcJSuwGgBUFNleVrp+PcBWxq45x6tt0YTNtUh6kya7DVlNJMCAAwAcZVyHWi8K1gynpm50IIyLOxByE6BoFriBHrxHhNcgY6eZNjNMYb9XN/jvYv8QwfriF/EQKegg4B6o66JycYhQ3/gt8TNnbp1ww6pQJB/iMzP1UdAlQoyG9/mDg3Ka+NJbtD+ZDoVVWZIP+3VeaOqpnlsf2PBdz2cZHwYETZAuOijAIAzNGsbHlXe4jpul6Isq3L6V9z+S53FV57s2dYur2pDXToHok04xKlpSclUQCAWtQQRD3ZgTpUnE1s0KhLewDAZF57QdJ1rqUPcxgOh3Kc2TpUDsTnTYZ6SZ26LYJIdt3145JnScv+tSRc8pb7FhtjgQf6vRj++ubchl+5sg5v9gEyLz1kYmWXk62IXeBlOdlNA7fTXAIA3BXC3dAN7g4qlnMQpmH+jUrIe5qxR/047jpiuT7FOGsrJx0bGcfNGL68lS4nhNEu+gAA5vImDjGNuCyDjgTaXTWQggSvl7IAAHABIkrMhex5e3g6EjGxmeQN2beiyFIsMcXT9hZ3iuyPG+xLwkZ0je1mWAbOHxQNfKQpTmx6utzIWX3CX3kE3jpVnVXcTXJZCUe/tcVqnzf82BTL1RHGinX5gk01owAAG7FypjoLb2AATgBlas80DSjLDDQENMWSNAH2VG67rHZ9nrYUejhRlKgUI1qpTGTGF3BJr5fDAwCcXlAK+1EKkkWrqewEvULy2BZrcEF5WZuGkObGuuqUfsEkKmkb9kSXnAomtUSlWMAa3PdzsXaHIWs4UdUo7dmdYd2c+PANkUj5mKNI0finPMZ+7Q5msZJbXywQAmte7Cnnh4AIx+4TS5oJIjFCTBcDy+MV4BASLz0JALBuJLJcajcA4MoQFrF8LJ1nmNgilrLejmU3h9yVoTCYvedGEsw0EgIAmCQ5IpvLtrRwFBa7UcG6ui3NGr1awncZ2ga+y4QwofRV11jkIzgc831wRyDcOfZ9wuF8ujaslSif6D1qlWhvh0erDpx815boU9Cr1KLjboNFyIRZ7GvDwHIUp6MAAAr20U0nSOBQBuBlksIR2mzXma6B0G67BToSoavmSDqPxezCtWtGuM/7f56GAACIsTlRYnxOZSIXyZlr1AYAeD1DEM6oqJj9aA7ScNpM7RakydliXc/yg6hZLqUDyUu6a/3qPrPClqjkqmgU9+kSttRiwKbAu9ie6H6RzVoltjmJKhJMBLfdpUCIcDlsFAMRicNDGRAxu/QkAKAiJHFZajcA0L1Iiqf7kq4xPKBUc8cMpKp2VgRSHNZiQgDg4oTUauPSAlHOYKZRT5Qgo9K2IKOGsPluuPIquJia7Nufg4G3vbzgle+an/rvjhIrkkdV8vSiyY9lgfZxkXAaK9ey5KKIAgDcpWVv9UHkSpghSn0tAS+jlbvU2vmzK/RObXBA79VIJ85ccydtbi5QRKe03cTCKVGigz/+PQ67vqfziSqw0toAQFIrt7eSTrjssPD1jSVsyFzDbt8UKhDfeknToq27Ma/VLILrCknIq1vdzfGkfZYf9ZBRkydeukarr4LTHYTj3U7fmBxSsz48bCRP1SNCuQWUAMCm2Vm6GwDqgOI+9x4Jq+Fm7uL3eAcFCoZBm/3YTPOXj3u/dodfCq9c7Sr9478LSSSCQ4BKAPnt8RFmePFS/GQXvScfH5UKAPnP/GhWjT2uNvJPhw2292QYi3DRA5VSAAABI9UbVTFgYAs7yjNoOSDSoKFslJSKOlgwcduCqmxaW6QsEoh8IsEsxgMAOUAVkBcEcwY0HxcY4dbg8Ddo5thf+Or2EaYtZpAaF1cr2j59eY/k8Naz34seqeGRQSO5bhwydxXC3YniHBMA4ASoiwakl6g5B2F5DHDHQOZqZ6YHyJWuHE6sOcdQmIotHwvYqf/lXd/fFAn/IrGkC+jKzMsKG72neWn9SgIMsZb0gFdVW3Mn8JjlLAAAywXOwHDZ61tZUxJXozMvs129AjtniVWVBoJQcfffVak6ZognkNVP0rE+MijVuHUtoVZ7UQkaA41/VZxg8FE/kVvCOfkeIhEmfDpSQocNvw/f8R4uGSfp859wPXeh6nPW+BNxc6zfmDBuANxFcVoKAOAKDfUecH0lwJr9vJReqfpsVeMvb9s02OAtTaQ9wIUHXWM8bJOTKS9s3l1+DE6Zs0mUO5/eFUA99zqJEK7rFSaF3oZ4AEB0V1IlN8J+jBxRODTKapqeY73IUFli805CgE9geLP0VnmSFnsYwPK13nD62MBJa2QKhKCqeZcDUHUPeuq1xJBt7MI8D3lu+yBlRJuYz75QuY4eDVN/v/mwJRiiwrOMep/u1Qw7Boqcn6jpOpjfhm/FvzwPNuLtrWabFcXgVWG9nBXG/FP3N5slV1GFVP2BcohbSVCoXrdT3gNr7w3KIMOut9BvxuXNTe3gami2d2hgW7A8QabjNRuaaAkZkGmRFSH76GMMtFKFF6VJ4Uk/YIv/iZQooCIDM7pFPSQzdF2/py+WDSQo9rU0Q+FWmX3+t1DKAxY3EyLKkl0CC6AJmtF4eRiEqgChrTDnsh09afuxJ9csBnUPYVk35msPV7WwyOp94BCpCvT7TvyTaqY33Lgq5XAIY5butFhBbjePXBgoRYpxNObIQbCz3csteRS/Y0EWHXc/4gp8MA6BCw/mcqvz8y4kSiAYbIJFhjzwzQ5mXg7Fgl1oFHSKB1FRQ8hxY/qFJ8RHJz0PfDInOMJNxcuVPWiQ7nfORkOaaKIRaKEL8U5h3cf9ad3HCa378I+OqNf707oPi3wrHIAew+4tfQMpqChw+0EvGZ7pow/ub0BNi5yLvx78hDIKKaXMOUxKEKYekUoU7gfrPoYWiBUR9j45q3jGPQsjh1z+aRO6Bjnjwzj8El9kRqyraAuDfhWNNQ5YuDmIVjteui6G2rVJChUNWOnidyteR21FVirTNPBOzlnqOQjmclsbhdH3SMKeoktqZ2QQN9OLakubJS8mIGcB6ZArqOPhJXwgFqOiuycvMyMcatrFJ2bLsKAkuMb6VQkBgNzKzcTMqga1eAGOsqz4cJdkgqKo+DSXZQdoUfENL38INKIyXfvk4erResTmPg3OhDBdBdj6neA1KyFTSxVNuut6XZv8wHE1H3xq5dEiRPGueZJ5Rcc973b8I5quLGvS5D43j6or2+R3nrqKnGvVGOqyeEDPD+BhmkwoL3CfTRF7Xy7xm3cRKhw82Kq1Pj/QfJWv0EPRiRbc7pTb4/FqWa1QYWdkMWH25IuiwN7lKAAA+xirKBDL0plFqEz+p7pvwFjp323tmUvrTwFczQxcAVxkSa7FQzfvAgAYCrfHiaZu5oNNxKFVidrrH3hHarggHgCwJBNl/lh7wezEKrysprWgqMLYkiX7du5JjKm9txJqr4mT1QxYuElUS9aFnrwhZ5MowM5E9BI4tkOgBoAT9bA6MclJo376/N/FYJSFy3Vtq9Pg7S4nEwDUZ0hNt6dijFSLjECcqns/By5c2VhxF0+UCkZbvbdr/l1EouPM7GRskga1MrxBptUsW21kOsMgpAZZyLlWnmwdqBH3a7xpiG2Or1z4XkcTYqL/hS6wEvOvVTF07bUi4dtd3LLXvdMoAIAd2XU6zZlKsiLAHY7bzur25s9ce/WXdtUGLrSrSnJxZtT9L14AwIgCS8SKibYoXIui2cQJTTG5BwBUkFlhUuoWP76pxp15Fmfyxt44BDPx6BBTS+2gpaP33O0xtsjH/u0dqSy6UrDhOtScTxxBQE3QhCgWxrJtPUglqWpkgJrdNmjmlsoEgA2EHFMdGkoQpICMiMBd70UycRc2MGvGYVenseu8jVaekEL8m87+AEIM8TtT5989vD9lOjZNbhqj8EIG707iqQ6t03YLLYYNTCkFABigpbpRrAF3odnps31ZQGus2EALOkrSgirxAgAGpi7aBZ1NHG7oS+4BAJ2y1DAplvwRTS9zEkQoPjdccYBcT79lBR7BfaDZv/E1qef/onV5e7KR/4/t5Pf0CzxQ+7+qPP1X9c3e17palAmNWjQBAEBUmGFzFJrYQS3VgFvoNTviIgDHfqowrVLB+DuZ89x+zu953TiSprj7L+uPO6uJPq+ykAMAwGhd3JJaGW1w8H+vYfXZpBdaAIAx+qZyuU4FDIaSBpx5o+tY6ysxMbXW16qJ1Ky7ir2RUMZ/T91WKEiT+YGjqL2fzz/hHILfaDlBfarPwwjhnUJLzm0XUgCAKtpWcUMPQxQHvSiOAIvWO0s3smfOL+MtDQuD0SJZ9hxfazCqOwGEaWJ5FwDYwWhcnFF0nEtLProykWAVXhQPAHDxO2UX1g2yB9WH9CYXH6ONBXysKSXi6/R3hO8yBBKo1cO62lMDdm6yBduZ2N4ApBwCGgaoOGw0l0/T/10MRq3AQdc2HYG8Xk4mANC3EM1tTzlZJK0wAs60sUxy4AJruYqsxlS0gppaSAgATGX59QrWroVjGumTixk0g3y31hdazoZb69vzNuQgxIbqyVTFeM7P+6EhF+CDRh6WG1wf8aE4lFQvVYwDFc3u36vTOeHtZ1Txj6ejAAAqHpVTX52cnsoEVDNxVTzzzJl/fWTlSgZjZOWMpmPYogCkcRcAwDY0BXKiaaaBlhOpxqpE9wPu/46kuCAeAPBKpmW6WJ08zIO+UIzW9O52o2RlLbHTzeQlNag5JhUWmJ3idbsKocmKUyj+t1EQOpJQLMML/fhSJRT3GnpuonCa23qVCFY4nxVWO+eES6PG/5PwV5JjFG7dsa2eQapKy8kEAKEbUrvbU3EbqfZ1DYpXwKHZijtb5BQxUUMhAMCrZcrpY3WczSBNPaNmkLaZLTJIrwkhk/HEninzMcz0nzcDTo/z2RgbWqo9Z7SJof1NQSycOWQ6SokUAEDreTj+aCM/Bim1SwLejgZ1eTeyo9Kb1chc3cWVuZ8pf51qVt20ijFR9yzwAgADdCsuygvaOvGcqcSH6r7VcArxAMBokSx+dgOFsgjDmpOoZFrk4+IqZD0cqFoKDc2yK2ooeL9eyzEOKIvgHULLrn0MflgNbjpRfbQkAbSgwnAK0XaYCiUZ/UPfWNntSHdWoUwAKC0SGHV0sLKDq762BIrdk9PYYeP5CxDvGAte8KL06EJC/1ygT2p9ANGGeH50zxuWpP5ojzHlEiqVIw0J+tOCHkYMZ4pvPTVWKQUAWBXij8Z7YJBSqQbcheYyaARKHBiAcBqgS7wAQICKizJDn4fqM59YXMdiPAAQQBUQFgRzBjQfFxgx1eCE77oT8aG1hn+95Xg+xvMXOaKLqezwhuK7lqc/qjx4YZa9HELc2NV1mT1F6MFFEwDAQMRt0IMacEC98/td9tQ8eRs4/GBSFZlDFMve1d00hqHsblKeWYuQ8FFBMdFaXny6/Jou6idliJ+l3XXWcr3WLGpPXXl5UI4NLWx4V8qNCa14+0nhSQkOEAKyd3GFiuo18uLGPC+8MGFqQrFj3kmpv67078hXk0stMi2+frECpzezP5xLzKqmaqr+BIwIAHlx0mWje/pBvMGCHABgKMRMgbHMHJOxRSGZoLLmvMLsI3mdZhYAQEVB8pTposztl6cjSUFspm4WH/1BKVsPVEEcQaWYe6LeHZzl1vpL29NBmCA2NVDrsLRGsA60Uofd2c0BR4OG3DvDvOoIWsBXqc8/KWXy6td56555jDWs9IKBNcgXZK0vttHbZw6L7aiJj0RqozCEw6v8WHSlmhJqSqRATNPjaCEl9KYqiKQ73l9EeRL00EAN3JG8B59DKynocr5jPTlSDj6WNkLiMEHZhGxGciDWQnd3go42qClbafoELdPTDKM+/PrHeW+Iw/tdlTu5vqxiVkqanOxXrlg9QVTfbdZysCRR6mYUAEAaARNohgUb1yYPJIVYNgHFLe4B1Ecxhi+XUo0zYqzdTqFdJCR8VF0j2qqN9Ezkg8Mkz2lYRF/L5PHRJp2uINr+hcNcT/RitpEddkKCh4aWVF3zLjXuXw4XTpe/KzfMNa6xwnwF58PaMBxDV0J+hKulnP6E252B+GxGD6U1Ert8FwDQhkHX8iPOnlG09fitJ2NRl2heeaMiTXRDPABgubJ8pQA2f8ICOpHC7tuRaXaYWygUb0dWXCARUGjejnK7Rt8MEGfsNzI1hCLFC0MgQ0BY5XgRU5MCyrcqE6eQko8PxIWUprVwkrL/pFCltM0XM0RKN3Xb2WPgTkOZADAgmNCi7pFBpg2Cqw3NMP+tdLTGyu48xidts5kQAHA53Y0gi23jPAUNdu3MONCwwrPHCw0JBjEpaJXpMtsRJaPsxNklyHI7eR6H+EyAFr+Wu1tt+t7CSZCs/r/ONq6YFQWqy4bqrYWpLdVSUwspAADFht6u04NaSe5T0RpQ5HuGETJrbi5gZQYBsMQLACyomOgGejrYU4n1xIuDldwDAJr07YFSVPQzFfQdrKC5A146CsG4RnTvQch3ggndi56+BzucCEwxwnndLnYfcElnIhsD7AwjcGUO7aN2GZtrQe0xRteBuq7ddhf+saFMAHALdK1FNZuBa+sGTUCphKGE9aQzzU53X4hSIQDQYIW4+iXXwQkyPbSiHrDIHnuw4wd7MHkyMNDhKrwhI9zDMe6C+OWIeUU66f88q+/5bW7dywGKJYYbYCkFACAwoaGjCxYFSTgRSEC5uQUnMwggJV4AoFF7WjR34OQTl+u6GA8ACGwBZLCYUyD5eAHV7zrQDF7gSAHQnu60i91p7NkG57E7n9gb3yRlBYFnVZ0DJdhGB0owrpauzG3XaTVwoUwAoBYNGLV0sHKDraU9FQquNhPfk9rG91ypqz/kOwT2Ff2wRbbifQr3p/RAgEhX/K4dAJNcD2hetJu2v4D6iES54v9LDbPOdVxpeGK4AJRSAAAAkeoFrAgEwNzcgMkMNuASLwBQ4ERFj2Z9C5NPHLAW4wEAESz5Ixpc0Gxo9DqIUKyDlO8LiF/T1n/2LCb8d+qfvfXzbgzq18A/vhj2xwCb7fLg95bz4BvVQeTDRAPfs50lK1CV+dDjBRMAYJZ2qrlhmsbZkYMtCwKQBbuE1bV75mcPPbrSByhaGu+r6q74MPzus25ffqCBnb4/swfE/1X++1BdqH41n57m2UV39mbKtBUa2mmbMo3pijBXLQnXETtN1rJbid0/qYtdNeobpJrXZAEACO6JN86opJvmSq6FXDqt6U59KTfLta0uNqRy3fe3l9E7xFJQxtJ6l5XlmwRl3FqUsjiR5/hA8mtVILxavKcfPQIzjR8zj6aU0NEUTq9YsFYCk4oaMWHNAbo0owAArgLCMdMz3fQbIcYmoPTE498wUXHN1csxAqmtFVQVYBekfFwGOzu1EwAIaI62uZxooaSCmmx1baLjCXe16l0UDwBM42vzP+c+S4rv0ZvT+KnCeCoMky8lrfE+wV/o7xv8lSlwh7fNvHCDt6hPxC3ekBPogDfibDrhjTmjzngztdu6sDq3oEwAqGKgk0bt4WGdKgd7GXRPCcU3pWykNMvNhACAJeBgC5e+hhWkArOyM1uuUIZptsCztwaaxTKI7YL2wm6yA8/1mfYPU3HjUuX1KQBnOHmBh/jMaqX+RvfOlLzGFyswVv/5nL+qwNpM09lQw1qYyv3LNLWUAgBQtGHq9EzXU+FMjE4ApdqfxL9n9oXJmpsjaq4W5B2kK+oCAAInIjqQ2unBmkoswqGsG+YS8QBAffvuICOXfWTvG9vkQmal8dMDHYybhpAOtnwH6OB6noLlW6xwckiCBU4vEsHwLvLqlxUipK5Eqiy5bXfAVCB3xgqbPjjaSZ3GT5erYy7mJPexY9tc83aj0UwmAKgPafrsqfd4u5kxCHwVTEoOXDSdkWJlivj2HlSaEAB4pvs7qADXNEPvQYaZdI7HwY6zdXAiCB3E1JznlOvllt0FxUOllxDdpDdXOB5bcZf9EyOGg9qlFABAB0CqB+UqkAd0bs4AZwZ5KC3qAgA+ELKIIPOJAqcUDwBMt+3DwhFADSZsdgrqHsYnHwss+W6wGTwghcCyITCnXeRuq6UdwSsTyWPjVv6TwOTENNl4g/AptNhBapOVjAWtZrcn3FAslgkABRanFo1XEGybnj8GlxCBkjV2ui/HdD9v/xrmsdqFjZTKBItmxfcSFEjigQDRrfhdewJmzdTXA9cuZRLtdCWyFf/LTuD5Jbfu9VpBi2EDU0oBABboSL3ZSWiBYsAdK8CCys0JRGZwARZ1AYAFOyrqvcdZiHwiwSzGAwA5MAKoAB85c+CyMWl88l1gMbhBsP/ga70JnBvwnJXpxVHhNbLd7ylG7fI9tRH4kDISAKY4gQate1Cx0nMYOyWmaQiB4cRZeURPolI7P5cY/UImFqe7Ptx3/mWSDm4C7Hlb3c4bwRCm6nPMAqbyj/fYoyx8Pw9W77Z5aBpW6sERWsYBCUkKeAXWLb65e3yvxWCRRWniEIzl7Qhf+rFTQr83mCUQtK1DrWnuwj82gX2cp0vK7f0a1a075sa4iCnp6FqsoRcVp9w98OxdpKHRn9KNK15VN3oEIzK7mIWuGWyVGuwGfH58x4KvDEIVM0FsFm8AgAZKzNwfK7L4dlFptgaVQf58X62yzAIAREdJlnTZznr7jw+6Pg3I4MydDgg9ICaG9wtI+lDr5R2brvFXBIEa4LFH1uJN5c04CEpJNg2d7DKdYo6NJnEgQMyzHVxKb9MEHa7ZW3tum9WxwijycNI0itQ3Tseox9mncAd3S9gKAAvg4Bnm8X2a85Vj852EwM6fX+PDqV2BaNC+L6ymBfnXy8rqC87WjZkp7GZJFwDoQGpBlNOxqx5QLjFd5xYHWdoDAHgoTxQohRMl2pWp/K6jBeWweQh21aMmGNsDM+swNzJw/yeYg+Hu8zVkjX+fYAocLnMQbIvFSa/aQg4ul2NGsexGKwqOblKi7ehmSjQe3Wzy20e35cUyAcDF5RmyattdanbQoEvjVCWcnnK8G+okCgGAnj2LpRmWQ8kVbNGZZfbQjsahpsg+HeLVEBA0midLc2eZLlBPJYeBwipvDhNL8B2sGeN2zkTsBPCbzBUA3k8zd8L5lf4BFAVeedXP+pya8zsaJwb9TGdSFwCQVIIoH5oY6ANyKjFlvHYQyT0A4BhVOFAKG5d0tLP8igqaDUJ5BxOGj1YfboqJfR5AB4FPSAB/fLBY0OHfW24JjfDS9pawJex8oti6E0lAtu5ZyUa27l3JSLZGKbstXjTAYpkAIDpOsWpYczY/GMiSKPMIuL37Qk/vHbvJxvCCOa4rQwAHxDJztFHfg4iyvb9wI4iMts1BTpQ5UHo49E7S3c/QD0Annn/AwVGYJm4FgAUF8Qzz+J76M3cZZcEisIDOzQVkZrAAFXUBgAIpiwwyn2ium2I8AABwRA/B8CZofHxssLIPARG8979uBxVQPFzcElzhpa13YUso+USxdXskAdm6c5KNbN1zkpFs3efsNnnRaBXLBADRMc2qYc1cfjCQKVFmF57dD83ptfkYPWNU0zVv76h7ErsCwMKnSJNzAFH4eD4jhDIktZVbYwT3W+YdReCT0BUAFmjG08zt698j/RelKpAHVG7OAGYGeSgu6gIAPhCySCDyieK6FOMBgAYjegA6bDb5hixcNhaNL/tgsMPrkauPZ5Hh/xTVx9cy8jhHMpzD47/4Fx99uptiNG6wG0M4Wxt16Kmzte735N/vgqq3BxDt4vuLXcuP+m5O/KrHNQOEt3e3r3MTR7zVhdiXtWt+OywrmazPDUA93Fd82qtWXlzDyREPXF0sFF2rpHiSRAqkm9O0vnks6JXW0auyN3kfrYqZzW01yFo6JSEMGEDoBHISrfXXnaGBn2PjjPi+NnGstVVr1s/TIu6iYgQ+YbAPYGN56wZnTGXU89pAVxIAAudXACJYLd7u5Hvn3hQsXE/1FcZ4gX0WQHXr/hQ/PRI6rf9AIZYYkUnwuCN2bL5AhOglScUiRHdVXGRT9J9hTa0H+dZKTgIfURn9ZCuJxD1q+feF48pEzVHxf6ZtDotC6aiPBpTXnYNmibyhxiWQ16hJGk2TTk5j49pcHznrISXLcPjoXjyL7qO12v4raIhVQOLpe8qCLLNZZPeMTX6tkvcoY1N+3Lg+clEl6S7CRFWURYeLjv0yT9uU/urrwkbNt+Ms+ysCjcAKz7N1tc6uFqHVQYvQoX32t/je8bVtNyQQP6rWCrvAa/vDNeWZ7nnOsDUxfEVIgQxzPmSaC5kFfrecfUoKW/lHUhGY0xBayFMsQBzRTW9d/5m3qdcTVj9/h9BZWAf9ScJkpocTjamoWmXZOJMEhuMGgWpWHGmUyE9msihjgijVMayAsVUeG8zpC7L6YqEHGeBIIiJpAW808RWYRE6HofNLAmKkXFs70Nxl/70AMe1jfUm+wKJJxLalbtlCU+ABmc2IWeVjgVYyuIh+SrLeyQ9DXUScL8SpKUA+bTEtCIgKOa3jvWSVu0B/3AqoqHepvrEA3nB0LSQxy3dMX8RpZJ5BSUMAqYumdWepHnuI/XQewBJXXw2mrjhzjlCehsGI6MSKvXqaNFQvncKU+fAmGIGsBHNDlRBk1eaU+3Gvu/yN+g7BRp1z0FUQkPXkZRjxEzE3VLJZQcFsxoJ5aAtb/zLKbBpk6aQYjInSGrQlnrnzuvOfOYV5qjQtT0XJd5oq+pYJmV39gxMgLlB9uLT9vNhCMpk7A9PJeasWPBbOUlxIJEBqorrIesY35MkdxrFj9WrFDCDCkeyg7Je92OW05tDhKwiEnIWGwKkRpXURVNugtDIoMtm/XAKxpYZnzkT0YYnwxifqwmBJbqW0PtTNZvDU3te/d6b0Pt0X6kNuuKGHIxKDnyDu2Nq9Y3DYcPzDEtHiWZFDck++iCdgE9esQsy40FLokvtZ61HRKCrLTUIfBssNEEmHqbqfik6yMHX2w3v8hqGXdqyQjp0LDb8qhT7G/2Nvu73a78QS+5pYL6H5r9inSqjp8DJNqLnqoP7NvdlQMYSs0W3lopkwOX8O678qIepfbHXEH+ZGCq6yLd6yUA98mJLRse4/6Keyoa+zBb+bnzYhVeddHdxu6zBFhgxX6d63qeoJ6K4wu/seG7C+x49C6HWkkMTli+C1RBMSUdnmAiFYPRAPDHtUHqLPeReao6lgFEeI3EhzfReP1gjC8KlrdklHZoSX7Bj1W0Jnj7Ymv5tnADH3FDh+nVIytDyo1grvA0Do1k1IpVgE7nU8bFBDGRZD69nFSy3UvJf1OWwFrIhmWt90NtqgBDvj0fNHycyDc9QRRGvvgGUshqGtX42vAsO4tSt1DvJQ6UkBEIc+aXWOTVa99+WbOxDhMwRyYCZY7zYk3oihjI4Bj3kL7zfJ+BKQWzHwKH3DpQTdqeg7ED9yoRnQNJDCf7jcillJGhJxBYjYAdKwAaBsJ18S6D9nXmo4/0Lh+nPA8d9ZmIKPXeTN3dBwYB9C0UZp3KYoqKdEXz9k9zMNeD/9a0DyAwKKOmik5CAYeynb8raKJhY0Hc1g6fuEgWwmDO1mktqcDtBQXN5nqXnccYk8F1vfqQz7LE8mGKhHfkgsgwrUyHhBBdQO9F0QmHPB9MQU/YoUL/aNBXi5wPbup2Oa7DLrnACEWxzoLQ9QcTySOhYFZXvgQXcG8zE6q7xukivOOz8H44YT7rJJikywt0kwt1viT6vxy5oDz83yTouI78Z9Ux4EDbiWewhiI0fXSWVKSd+nUSdo2ZnBazv9m/rI9l1cH06KAswFolWytH4qZgmUJoE+lawZcgBlmXclXECDeU123a198j4H7Sq6GWUOTmj6tmqPJxGlopoSbbSo04Ci+jsTiUrROSNhs29ox7p2O98gnnrWh0S6UopfF8fRVZG6/o0nMEt8YpJH0iYKH3oXtdURpgo+zZI0pOnsWBZ5ha+gCftYn2KLHKSbUFQMC49QBm31FifBBwFENHeL0iTllYE5hRs57GbQ0LCI/z+gc5v+qZGBUY9HHYBU100FmUDfBVpn2QrLNamEbNhNWA+ynkyYvoLkZw1HdlmJ0dBB4ZhdmB/+DXVx3/Te3NZymCwMGM4MACcAvRGom6bwE2eKhIqHYVOtV2TgmoQDYw3qHl2HwrD+tM2+1ULm12r5nr4QjRzihyLnP4/edfJtsQWxdvD9YyfJxv/OeGDXhlF0x59Xv+UVvZm9XWFedVoyfQH2I0ztSxo20r1ZKcNmYXJC6PmIRwpNZp9S6lYVLsiUe5jR7JE35OFk1Ozsgojavt1k1ER7IohaZnd7lG8tmreZuYf2C43UlDQOfKx3WICBfv2VmUMjfcmdMTRyJOZ+KZGQ1eolpSWsOZ4qVm/qTnxP/6pP528flWdyglLkU5m6vnxPWUUFAptK2lE3ulEYfoiUlKlzR2TZ4EbuZDYDZwBYRfpZzvraIWXfTgZGt9t5YGE4435gov8/AwAC69pNBjLaXTJwe7sSckCDL15JSOvAiswKkb8HZr4YSLFd4EOchsPx6SL4efP+zAj6uIh2tqyebeyKLeqWraPrvGNyalt0n0tqRy99JfD5NOIPi4QCuTSTZyCZN0z+k9JewzvYJKhG7Kvkb+C/VPzjt3To9L7d5CPHfeXJembyomMU6pqBrBpcPgBncB8GdHkXgBPdZwEt7v4AnFtN0Hgz+wBM4RpYtPUuANO+Bhal2K0/DeT3zp9CPzGBb5MOCQhmi0oUuC4oHJzeUqkCV1gI22uNUzTGm2htZcG/r5QHAIYtTE5JBObnIiy/e4LVSVwaKCltZzKRuLu3rqBNp/eIkDZylGZ5iKMqoI01UReLUOSCj7DIgoEucKMXV4qKb6PKqT8HAj1Djqx/H3a5Fs8Gi2FZ+QVnERFZbSKHHHUN4TdjKApEeG9djAnBN8VfZPXMWsKxZZFvEb/SfJZOfvylx66TqaA2UjxdEG3TyEsSoUQtvZGkAxmzSov9x5toHtyz8+LXAiW68vpsbSnysrUogBb735H6ym8QdV5goZgU/qlQSMj3zjAIVzuFlfZP67IzcKUqA9hWiySaQiksO6PW6oZFO+vkQXcTKJX+asdnsYO7k2364jUgyVxH4jyuT3jl4jOFaOd4PCYixU28cAzA9kxmxEccZ5W+vgP7GIguiEjJc8x5CBsyX2gGQXvtHjQN7C3qAzjYxrKe0y+8RXAt7c4qEQixhKmPGUrUVqHR1/z8iMlni/EVOA29I+fINkuIQEDH59HwqBSfmitPhR/PM0RfBOLM/nyc0Nog1BON5D3QWzrGkMLaEbEkwqTR+V8f3y5gv+n0zn5M850OGBtfAApiQVsVfwwXEJVCH4WQTAl/5dvKHUF8UwJeSWeMRFdgUTnArtnOOdusnXNyWne2c153bnJid8ad2TK4GVI/a0jjrGKyxNhJQC/g6u+U5vLvFLv+O8c+gM7ufQGdYZ+ANyA0BBLy/OULODoFRJg6VoJwIUpx1Q5ZlDeqYRIVFgcTza1wmBQ7Iff+Oo6b7nq0qyjgQSqJSbUwnrDfOQaHtLm1/1GHd/PueSO0kCCUiSxb2Meps4Bad7mIfw39a1lJi0VlI765sx+ESHyMMyLHtuOD0QTK2yLayTMT3spDbUne9K0rp5iUA6XTrEpMk0tzs16wkk8oZzMhe8OHHoWA0sJIJsVXdjWnatsyay3IZRzCeqwY671Eza1dvLGVDCRJOfQDe0TMcB+sHoNJQemqQa2jjXaNyVlbGbtDQ4rfXSh8VfcN6N4xFR1rcp5Z4Jn9OCXcM9NGjSWbZIrBesmF1/iN86BGWmtvuQKJcpVGyYqbTdqAscRuR7cAD1d0p9z5TtnBGAYDRwqt+9ySNJvONDrn2TsDj3pWzmhQWN9R2oF27vxz1ZstYWeyUfI8qFMm5r4MDo+Ctsr+87qX0hum3GVWMnQlG4XCKSnql5PcV/e1RK0sW6K3/viVL6QqwJZkrPRasrNa1YLJxCg+GZMCM0dGRTYrUwDWo88FEaDCcG70apOyr8mXjNXqk7Fa3i6NKI7DKxNmJAwVrMlqh+XWSFHUOrAlVO+1ZGKWliI9qia9ymoJ2UHZqqmWJNZPLdFzQEZDk2Q45f4dufuyS8o1FRlzScWW+ZMeT7YpV1TIuaDiCIr7ur3KycRbtD+jTZyQbYnxmJKzKZThW4vzhdl9lTFufS6uqRIakE5ZNJACeJEQBS5xGgvljbLLN12Dk46bL0dx8TVwgfyy8XfXztmllhRfw7TpInvu/If6SrqmIuEr9krZsr8Ejc0Ts7hEvkwtsUEfGUterwtS5J98OfW5N1wzR8RbUgdCYq9GpuZvp5gHNEM5lZAFJCgJXbElXuiGByUFsMUl/yzkL4nILR4EgzmP4SVD9vyBVOu+ppTAacGj+v65MAWLr55QTV9kMTCfw+GiTCPM25vmGY/4E9+yD9T4hx4XX8pG/iT80Mx8Svng1YFTYKHgtXYqFz4CoTLA647tVU4I7tyfqyMsZX3XHfbFqSVtvZbbn9Hy/ORLoKNYofGbgo28BLeJapnGfgPig6vMrYu9okWpg2IzOyG3fiXpFeW834Q9yuNjJRF0nRjE0fZ7vv05MmviuhRP1dQP13cpQY3Ikf2AJU6UujIlOM5LzEXAi7QYN+iv1OL4Jgwau3Tresb39peHUu+2w591fvm9jY/Ivs5d2VHqqf694D4e9Hb1JnH3/Sx7XOag75knrm9oEFkEfZOChrCJy6RxVY+mUo/OKE6M34npq4GyF8enXlZf1ZBQSj4p8X1PA7hdkMREmnEgCa4iE8CU/Bp4oVCI5sKRaYp+tlQKweAJoJHwJpU7fHwOEQmhk/ntgyLZIGJB6ASXF5aWA6pT76qitdCeKT2QTYcFbffZ1s/7pqnywq3rWziqIKyvGnWIqlexPNQ1nJ+UP3vNTEIzjQksk/Lvy7DvKzGlLMBK/bC2AFjt2Ce+g0kg8gXdVfVW2wk7bstlfOjQAniWAA5wENiA6eLHcmubmEzvObFM+m6z77tB2qlNNcF/EKZWYU4Ty5gjOB0uBgt0GiGcofPoxOJgI0rc4oZRvCWB88saKH8wK6IFCRf4WgmuKMa9kg85JXjvEFKptgC+bQC2ADkDIISw06Li6lgbBlzSOcTlSitaDvhmAdyg0eFisQYARUSlXyPXgqGZdImceg/s3rWzr6sweDPYfqBVDKbaAvh6ACJtg0lTqSZk3mJbZmQmr1qDjAD2hwMGW7fRK77mUitexpHlc1msfthDomF11HS+hC7iq4IvNJhUmg+ONqc8l5R0QmPL89cKWUdTS3zxP8T6bgBB/DPok2JZOob4BOVxrENbnShM98RMysmfaXwqnbBlKYEO54w9X4wABB1OY8eOc3zWgkCodEEh5HqSqJ+aWLVmE//JKkBVrlqdjiJD+Wp9ukD451E7eM/As1ZCpOO7NaSZ13mh8fqGkFptLBwQ5uZ/4mXwf+K7Z8hvL8UmOHxZ0xWokU6fXq0BbuFfC/Lcxv2btgYYUW/YWLekvdmoKxN6qXV8qmEZdfj9d+CAzJudUy91O1bu4og01lJkTOTFHFHRO9frAEkHTzydVJwAQFDCC5wh2TOK6+enMTnXwVNK5RvCOWAFB5I94RgXL4ALTyk1CHLVgmKpIH301fWB8ibto2hKqRhhxQbECESYwtmTffMwaPV5lDDippaKi6GcQVjSBboYG0AODD2g5xXgTQWzKvPV/4IUDNQtRxdMrVYCNU3lT7ZZT3nzCBBAYK8F8DEFjD3RHvLw3sIdSE0GBuhXAELBWbdzUzbxq1A+aYWnYEt7PIxyZgF61g81yJa18fRK+hEl8ifpxh+Piz/xC5QFTuGaOZJsaXYINUAved54PjbeFwUHS5w8kc28cYfGno4OJizliCkGweF0sazgAkhMF/MPxIfj6tWUe+Ve4CTZW2Azf+zx2dM5o8ufVzqdYIoJazr/+HB8sFhuUAJCZw7nm388giN/2eLT4QIzfDocTofzD0ekw8VwASqIMQUxBZ+gEsJMUTv36ivJg5fgcdKsCT6/7IFI7IlGfM7ZE0JF1ndZeh1c50uDytl1k5Gj+UagknbzWfiVteODp9prGD3Fgtek4I65leMugso978cunBIfI8221n9WdL51XyAVAoOdDcc23YDZPt2muhvoS+NhdIbUuylyusTq9HIafR4dP/1zwFurCzmnm6r14eC5Z5cyFG3Icp8oOmLk9xGiQ7ePyOWRv+CFxXxKHhWR9JXwYAj7aqzQy2HtFX4CAKDzUwop3Kj9nAr+BK8I6QgKQipCA4GIAB9BB09owkQtPHUtCgy3wfSvtCzG6sABoxRV4mtaLOZW1Nyhj+Xady2aLyn/yRJcP86JBX2JRXWvHh5fH0N0QTujs5anK1eD9TgfRhJQi3zDL8/hC/kPvW/l0yvzFWOuT7dGZWE4gdFVMT1mTkbBjApPlBihJORJxsYKbxSo6b8r2Ow9WrA3aoEFmxxLGinRqEjEp+FR0ClQN39bcNyzsT3m73wUWguBiACg+/yVXFrBKv9tCbcXUq5bz8Dppkjpq75IvmROd0fGWVSgyQXYJlmjUdOIYIfAQnCCHm64d9LUPqk6KO1NlLGPsiaBGjNqkikJxKGnpx6dEHNlRT7MBRZL1psDk4eR2gN+RXt4M6hZye2qt1iP3xyAkHb6qv2eABhSnUVPIfAUM0JHPAIAFsrs8V0BTIRzxLwph/SN1g9OfWku8e3rCXY36mYvCj41ooH7Y57cpc0s10f4Oc2+Fox36Xv2+QVnCiQEv17N4zMZZAhE/Z2259iqT2baI2Y86YwnA5225+mCdNl5YZKJpQNe8P2HzwAAL1Yz46XcICq45KiUaLaHEzNHIPyZX5f0fY21m899lfmKUfwwUbdx8cGO0E3mvTfUPUOIkNO9FDKA0ViJSQCz4h5bhvuCY2foju96LsPldrCrolih55QtV4rMRHaruo43hCnaOeKBljBczeXNkUm4E7CsEIgnWTyJHry2askAXIS+mt0TV/xV0QAA3W6/ay9u9c1uGkW+QTRnPMqcZXmIyAVr+mn7Ka8ERWFD/moxtAiEQoBTP4OmsArmMYz1Dmmyrt2cwUc0XF2mzHWHC8EeB12GF6FpolsFosagKaJ7Kz2/GlVi3QJxYC+R9Wslt/w6S03FSVwT7eXXXUpy9k0sEZAwcQZXhNsDTWX0SRffyIprm1dJhFynuhD2ObfW3jn50W86OT0J/r4XmCHpKqLHyQLjhhIcnVySdhY7Xv75xrapwWY/MFfwPTn1wjSgsSxdUgmDk7C9WAeMI8kjil2onrJLbrrkSXrasCGQ8p422/I3YfAiXoqnYd6LptEZDxLPS808G7YlzW3RG9ETZ50DN7Z7uevubJaamvpOn0qjdovkBBN3hkq8pcTk+Gv4L82LZQ6aETE7bBQJEB1takIqYVyKUPYZpkT/pbNOZ19smJMNSmTURiiK77wKlZvYu8LmXmQFWP7zwaDaHbgNzBdgNBa+vHgA4TtnwO9I5N2RXI7etwscg7GFisbJi5v6o+68k5pPCiuvaIPwvkjbzOn1smMR7lzRyUKHhGFpzmdRTfOTpKiTOng3ehoHW/5UFM2LkgUg2wgnbcjAmsh+y0zQJj03oA8HJVNColAPYW9cVszdrRntOO2c5OBNqqitHOD1ZP0TiiX+noPLDLTMsx+7FtpmpgUFUsK6clkVK5bnQTn0Dv1WRcoj5qmhf4DN6jPP0xBt/Kk2X5KxA7NmWjs+MBe/zQNFbF+2jvwy0QdG5m6jmaIAHigFhb5LobPU1/My/2TeurS61yasvwNNbVkdM8AgMPSx4oL0yRm1DPqYaWP63AR9vGtb+myCPnW3eX0OQV96Wre+GYK+EK1p3xzJm08RJniX4vz88O5aiH5EegRIWr1q7VMNjO4zY8TcR51Wb8Qp2sQwKeNCUcCG4X1Am0kK0Tfqpw5vLMnjBpLS7ZRUhu7wds3dlAu2/vlaiS6Q/s06h11CjxfxcaoUKzCcx45U9M900Flq4HaXoAEArBWC8LFJcl1vnB1BVAxuZnq9EbNEZ97cDDQ71cG+pUPMXnXtbE1DyZ3rkt0yPYWECgcR1x/UAEKmjYFkAgh3bQukI4DY3eZBLgLIPa0bNEUAmWhNoQH1On103C3+/K2r3vy17GFlcQub/XBW/focHAPICc6nUOAtQ3c/c2JLbrAERGZM0Lpy5F5igG4U8Nm8JoFojvsJL5M/y/zJAHjAg30e2srcWH5yx7VFylr1i2/ZzhZZkrIYSUIDZXLX2ofdKejVbE8P4SFaX9/O4HZ1/5+JuqXnUwfAtqGpuWHvC5xKQ0eqsoJAsLsJ5iBBYXlCAABvQdDJPcQYEAE6/9QOxDm1HaptpH1tL3YO6dAW+UAo1ji6WQ7UFbV/zRmoMWnr20fCpvF1ydcO72AMXxTviK93PFn74/M6cGg8L/4SUpNwwwPRWhMu4PzSBYGIvWfrCpnu+n43ONzQ3Zk/fJxmIOd9zufJ6nSP42x+nd7qB5jucv+YfcTQ3eHW2gCAuvGwtluFwQ2NkS/Ma2h+IvCbm8DcRuNyNZM9JfrMp/dmxbB/MPpW/vz0ri5dSwg03CgdFRnOih9cfEaCwD2nghM13EJ79R6hw220qMI4jTskJhIFOD6fLOn4CFxLB6rZBCJOikDM14zAhHtkDEHA73ediZn8qdYFg0kQ4veVe19nci5/dxNv9XfesugnyIdnOfOolbWxdO+x8K1Vh8mlxMtx05pL1G4i/gr+QYsdFK67TfrGLgV42nwEXlFA9qYaxEUB7WxqQTYU0N2mPOSWHqb8u92V6GFQv9ceTMFqXm4COKQ+yKsinh6LwZ/fAazWf6039dGtZH7/MZKprOkc4TOTLuBLVfOmjzX1OmDHkiQ/OfIHQN0bgVLX+JCYnHC/XhKS89DfbylLpxaALXq63RR6Hdaro05eyxyGixAO65PR7mY9V0iC3Lq3+x/10KBo9f65U0d+L020uPWOAMCdZaK9f9zrNROd+W3UJ4r16UbfnQqvELGaJe3VUPbXoL435ou+fzNxmkn96ZH3j6aQDix1jykaDGOGvv77oexh4UAmz9433Levmf0wG8+yc6l+DfW6db9XyeWvUveUTUiElu5dbconDnSvsKUKocJjqNTjN758m/v0EXl8NLp4fXpIEAHEFMfGE7oDWrlkQZ/Po2J1VRArAoi/nWy42Rbc8Y4AYEqLTvX3eoct7H7EEQV4rpTn0+DYhyu9ubVjWDPvhLU93kHs9bVwewDDhEv3POHt7LGDRL1L0ACARGKYBOcEJ1mFAcHdW6wN66vDMP3M9kxypRPQQ2XF95PTbu1g7aAt3TVPpRVEdmvJtLx081zfBkemU3w0Uyg7mi4hTVzCFr/uzbuyorQR+sOJaNI07YfeeCT+kO2QLDmbIkdBEaZZpTRxoZ2VJSZ8ixPahjMTfYjn1Bi4QxzlmOtyJo7SQ0nOqP2mKz8K6wO0v+3Pr9NmPctarUhmuybxustm3pwRt4U3XZ23xYB1Z4R598GfZWqGGhJXuTMCJ81CrgIuYGVuQH+t+y6oquVLm7wRNB5Kfw1Vg79mfCcKSFEWhPkO/nnQUa02yaStZCVle9twrJ0Qn4Dhxto9COnri5l3buRlSuCV5bDJScQkAbjcNSmWWj3oYJk0yZQvJT2/YoagJNO8d/cqfIpqvRSPdPTw/q0DPyDbIx0/oj8ryM9Ds/3se5JEONLqIfNfN39k/Sck41nltNPfT0eoWWoPvei5O1J3JG98l5d9XQGUrR9v8skdAU7/eDAwfzoVp5zDWL2qlHR4aw0o8xu4LBIWahVb3xrdY3U/rMBWW4UtkX/t2SJneC67unXOuL+WoV1QW2HXVnhQhqqJjdg0x5CoNpEtDZYzkGCh3XN2HcRyloIBAGyjZyaQbK+kpmKBskLNjj9sMKQJt9Nfk5iD6/O2BpoLa9i3hZhb1u5sB5recV6G2WOcbhayR3AGVuZ84Jasy52B7bR5rhq+5EIHY66O0WTgohNr0IytX6Pzn82lO5Pj4DZsqvvqF8pX1zgFiy92MTHTzFutXSjP6x5yRUiLdglda9JV3UKRebjnO3O8mtGEpg/3+tEWO3VSNBow98QxxFRb6m20rTF2V87GETJu/3C7EHanrSdKhGFw6Drh8Lpt5O4VoHiq6lPWdtQeZNdK5Fq7t2Ta/Onm3XzLZJhmXUetz7pM473r3/Ngxg6mfyDu6tqBuzn/46ZaAFIxCGd9OcrrmQYTWPdQ6dPvOO9Q0t6ah/IO7L8LxFEuvNyh4ui4VjpUqozjPGlAi/csEW1L4/ItJQ2VKu2Mg8B8bHLA9tT+XQ5Yu4vapWamWn/HXTGuEHKBdyV0gx7Y/UkDu+2QsKaBE1obNge4UevCHgK3afPYa77EvisIsP0oeZ21jY99atCOjxomXbp0CP+OIWojqOah3Fc7Ptw/Z3ucENRt/oTu7V+vrfvwL12zwA83rNQMBY2qkXr/G3dWIWGVfxfTxztWnIgF3Qx0hVxWDgrycMt53Ic8bV9QpwxBN51OGAAJdzqUMDFzgus1jJCss4fjQBjzMsTCEmx1+J/glnge3v0i/ZfWfw4TOuUAQxzSbfWEESzdc7GSf3e/tP7kMmE8lx2Wl1djmpDsuaxofeylk6uRUn3P1RV5tNF2FWgLuwcrvA3FcqgXDhDeeYIVIwH0q+sBcAQQNh+zntA1UIklhWbD7yHBWap9aHcHnhhGrEhHADAHFh6fG2SEI2Depj46r1hfr1+DC9+b5DUeRxlWorgfhYRAMTaueIhzxT0/o6CzeikYAHAO09k6zM1ce5VbOtGX6elmfqFunYzSZhGXeP2rvM5fp0VfMhH8iM/q++1T7zMjvNLGq77GtxUk5DTfShc7jXcuFq6k43LugpTtTrRgek3BNL21eW56lasMjDrLYDU3SbC9jPVqgJY4HGSATI2eZLxRHbt76J1qdswjQLGsioHIpQDFrGJh3KvDTkap6ncWW5yMUvOqdmYgRz8fz2wcR7ggYxe/Mf8ezLRz5+feSh19zQ78H1WkPNGOi6anWzbV9/zsswMAk1/Q/VF98LP7ICi2MyMGYfjyXAhXD6sz6vCuonwvt542Mj555mIAAMChF1qextCbMMFWgUSZzEe8Rfl8ggcp2D2LwQAAtBRQO8uqF+1sWr0zizuC3k5tXhPILbh+HSVoS67dAQIq5C6RIMNwQSwKMts2xq4d2cJ1mBrbYpPrMFPugu3u/kzaGVfH40XaSyfWs8XIu7wHu/IWsyVMufQn27tMau6ga1x301FEXmuXIwQAxw10rHIPz16kU2L9m4XS43t+FHCiNbi5tmKRgbbA9njZDVzi6B4ciK5t/7hoiNNs61UswkRfkbzRjkI6qg6T6MnT0woyu9LDg+E04AAAo1L/lBYm1eFtXpcwhQVRMKu36Z/L0e6S8NcLzQCAHbxFVOf2qLdiZIvlbZPOPxcWvFYdelcBR9XHNIC3+x1pAqzc6qcoJNXHR1LHgFptk2FAt3aZRtKY3+kgU4v3PT4YH5zcB2nkYFbzITgYih0dyWBcLPhsSKW+xwgmdCR40FllwEcX+NJyK6u/Ny4Pq3uUDxmwakvVBZUl0ar0jg1OPT748z/OHsb/N/QQW9nIqaS3xGeLozO2Yyn+Ox4zRMoVSJtBkrPcc41GIJFzgg0JpPWYdqUkl/Dk6MYxkbRJ0R49xencyZ+rwXV7A2EPl5nuLHAKByZQnnzpVkSyLpUMC0mLF52VOIkbmrJGjkDz7L1zUEh1VSRcHkOHXeXRrfZg8Kqu/FXXmgdU9+F5BFDfAGg8oRRQiSWFvsZNz7EX3MH5QnUv0RfGkhhx4yYBwA648h99YCxDF+aPC+EPPYOfz7YgOd5X0PveM+rnVYeeYebN0cFxLgYo0g1OKQwAOGhLxAazAn7dt/Vi8HdjwvO58/2vN28eex/g8+Ojzpg247mlzEXvHnkO6L1a8EQ7mfp8u5/bWN0WlsEAgI39HLsAKop0yqZxASEmnDHa2W0gvVbnDSTEqcfGHDMkZFK1s3iyid4ZXRAUAPWp2hjUFdQ3aFvQCNS3dhfQPCT66OqAGiRQ5y6DOcKBipTffBT4V5EN8S5pI0F7K92zQnQrUZwLAACcQMfuCAUwxwRFAmky5mwAzjB0xaAaDWEAgGuB6dJXy3HhN4tWbBccuAUPWpzq88QDSdSwuxugUbdjErpyuS4HNpTVcZApjmzAm8g1tDJT1zcCMSfrMk0o53EXprXK6ZjtDN0tnOX0No8dDiMJiZwlbBZib0wpsucGBtOlUcUMkHY8pLbtZ85Ff0GLW/5oYkm7Pl3J69NPs3ToB6fyNeec9ryRFkyjVxU/1ESapHn/HPpfIC3o6n9ga0B8t9HjaA9if1aBk/pt4n+TiT735J/uB3VtBZPBIkgcUvRt0pdw6AhxfiTbW7rS6i0Fccd6MLiqtSpbzKHBdWEVpsteyZ60f949yLPd1qduuSEK6fUajgI732mg7x6Rp2bP0XQOkKoGHAAg1WDQ+gULBjAKcXgas9qGGoCZze6MgYOGF5oBADS+XdmTpX9ZZ8zdYMOdsu6PDaT7tgadK8jorY1RBeDgbuQUNALs/qQlV4WRuG8Oc0NX2hojAt3VtphVkLvlLpjNTZoAO7LR7wUGJnmwLdDBXcYrNlgHnSB2E2KjLytsEcnWsp6eAjtzQe09gimCqhiCtU5lH5p5rUk+7voUhTcSAACmfN3EglP5WnlOf27UCaZ0UsUcJ2xFwWDKc8rFcC3HRzHQ67vA9PmIDZJumwMbnsrj0q1kxpdKJ4bs7Uusd8EMVYbh4AeBcP2f1BeHe7wGrdFkwRHt/Qx55GI5gxWbgWpnOx/NFqHnzk+1WF51H55HAHUGAMcKsjtgicWFdsHqgYvOLvrqAhXcYFQIPP99BACpoF3nP86CkwxzmD/qgrRs07u/vQ323ixbI/agZ9BkHWPhszOz3saCo5WDCphmCX3yYwMFR3umwTg3yf5t+GKKnbBsVgwbwAunu6/dLAk6eI2PfesKE3IlhU6A6alZGhR4mEJn2spewVO9EtdXbbp+gK4Z+3EXxK0rn2diuop4UpXBlfOT7Mm/h6Cq0fCpGuuCMNbAF7p/jYPNjVNqtzTO9tehdaLuTGqKWI/mxerjx3dlUfrb5k8odZ1dOCA31SR72qON0BuV4sZAXYnwU4lz9CbIK8JUKrKxzJD+YO7Oky2gbI0QVFciRHRbGSAg2tYFLCboQMbADgNOGTuGA3AZMyzCwdv87k1rgz9fVet7FU8S37rZz0jeHI13tRAAADiCauidCSjYENwrDie6eznGPAIgwzy3Ik4l4u+cDwYArJHeLoO/ZsFXM9MXCsX2ksMtMR6I0nKmQs/QV1ex+/DEyp00dHCZL6fjXiinUkYIFPIPNA1amWFD07Z1GQqaznCGoV3lmDsOqzyj1gvshC+x9kJUtSvFNERh640iMJCmOSAAyBpMkR9uGtracfuXbjBpy3JaUBlrMTbobns8d6AspjsSlGq2fyGCDHptvWnCvR+8hVdHMfZe4B/tXTon74qzugFIVLmic3EAANPLWhhy6W39XtL1Kk7XkgFdwRCzThHvaGbvgMQ2mQEAYoHB/g7Gl+D9uTjpH85JOXCH0iWXx3YEFZ0YPCv/rkHMVGspCbhJJq93UxmzBuS+K4UHptfubw2IJiNREcTE2mgaZK11cQ1IFGNwHwNj2dFgGFjiwaMDlr7HpDTIbhYPoggKubBEAXNb6rnxXRTZi0SnUHGq6qIOZjB9TR8BwGWBHRuP3d2sEKfuYjkNJiTjBSYNpHlXi5IJMMvLZWoJ3F07FVYBW26NtmuA1bX3225gDrUVVzd8jD6GKqe/rwqbW/B0BaH6A/X5+EICqPQAZE/IC9RiSaOn6fdQ4CJWFGgHo1SMqOhHALAEVzePfb1wB+OrgtQR8jmSTztL6bmcWLsArN9kc/XJY/fymgogbeUQAcMxz8eHnEnBGSwGAwDmfDqppmw9FWflwCmGc1X0volr9L5s5epn8vDVXuXB7Wm1jhZvVbGz5oM7/7t41favd++//fife+PD3MryGqE8eqfrGCrC1vDB7aZ/Jj9PVR/kUeB2m8EAgJRUAHv1BZwFvDTisim1C8yoPm+X4DZq2M8WlqjduRnQFAvJHOgbHTN6omAI7TLbDu+ESIwBc0iswXZYhcRmeSwLJG8Y8JXWufUDI4SzT0KlhiRtLyp+0u0OgVAdPDHMSMk4Q9tKq2OnGdr2uYJ2wIa93fI3DnPv6nAqeikTPYcfLgoDAIb0jrULqgA4l+I0rJTSalOfFzZoqCJsKjkXzc4FS7U7A1/8jPmyBi0YIQNxUlZm5phMVFqXZYMxGMOK4KacnS03uBOHdmuIJKcuHB6x6+9g/D+JsaX5lBZm/39/j/8BVLxy5pQarOp6I7QZFKo5IACAF+yJgSgmmpY0t2GFC5O2vOonjfFUSzB+8x6dl2D0ridY/z1EBbpiPJESKuiKNp4zHpeJV1HaBb6qAHTmZ6n4siYOSKIZD8NOmtL85JCj6wOtrwr2ybvCwo5Ar5pOAIDeYV/7mU784ZCoHIV+GR/CRFAPL9QOkByvHi0ghWdbBWq7yQwA8BKc7Zq2awCd4mMsAXTX/rkIcq8O3WNAdbUxvgEc3o3GDW2l7f7CeVOm7zgk3l1x0tbmHHAu1uXOwNa6C6kaZKrjGgVtZIpwggMOGOKuExMM5m64Kva/S+2MIbeM2f/f7xOhDQ/hwMsKWoSAas4DIeP62yK48qKaWhA5E0E3ypPl7xxgd6EAAGAO5GTzF3oa4lWVIJureE1ZSKJ9gdE10jjWongKGO9lJOVl/K7j/0W2bPvn+3Drf/Zg87cglrtXhSH+2u/j0eUE7tWHMJcWaev2ACFeKY0v4G8qGK5IOHMcvGEE309e79B28qscVtOAbHFUaAOitQzRWqgzcreZh7mtc89zi6zkIcitFNX5YABAHCa1VsHVm7mfqbPScKjh5fSCJH6tof9L+vv6uPWpryoJez6948M7VDedwe7TOwHYhCk4RqbQefQ028JPLQoDANJshCnrC6QDEhlxk46XAWtX6F3y8EFvrx6bRWbI/jU5A8tPcj0p92AAXOiEgF35XByxkDaGPYFYaetC9OB0RKwhYyAwVztJYvvdSNHjYmFPSMd/1inf0e94n36o999UHX7hvMxf+DFpaAZJ3DixlIcp9LeMkGwUlMDanPg3KPO7yidJvXHRM51hTgHm9AInwyWcx+nMtBcqprbQmQJxFAy6LLhGeoPfhZO3f3drbiY7O0+F6cwFJCihz3gfqmBuzgkDAManVVXL1tXYpdNM9sAMYNaEc5WLtbH2WZ03Ja1vath3ho1Nj5U2c1LV4B8WnIWoF+VQRBDGQbpSlMZe4NcU9Pwkb6gkkW/4w626ZtNJwsEQdJ2MuILsWTAF+mmyLvkD+FT+CcF6KjzIcWIF5ilc6IJsyy2DtpA2ZtGEttJty8KAtobuwiJCLrYdoNWgy7Wfs07s6sR67kNHNlTFkhFVIa+nUsRxKatAcw2McVFk5JJyeDqwp7p/rgAy8tsj+Dacpol4U+wY6DLrnxx0Pb68nYJ8ncLtWIvG1B0GdtEiNxu4Ga4L5IueC4oTC5idcW0bZsYWTy0ryP5e2hp2cR5588OvEuHeENRY/wd+gaeeWYu7vt+IW9mpx3H7/vE7nuFhh6dJ+hk2kGmcJwG+Yk+Lvxl6ssISfPkkku8QOKj9bMCC7cFvaZVAmUU44kCP7Tdfq9qV891AIPcirduHo/6FQM3C2UuI4Qe31FqOBmirjr3x0zsV+kUTqjOZFwuDbuIKErqcOddRgcA6615enHLHxd9maKDSF+uQPaWw02DtBsA17AAAIOxl9IuZQF9ANG5hrBOGxau3Ds9laKfwrYVmAEDEYKWKtjEI0hybAQVV/k1ABbXo0dJb2PNMkRdq8FUIc1daCFT4O4pxSx8/pYAf4JsBfOwui/DSrWrz4QlTBfEuVG+mVeWU7jNJwikAyk/rmxAKeqxL1NmGIQZwGCLsNhDndxRmvD/xE9jxX0Em4e73sSWhh7P/UEamG5x4W2wVR7nLnBdCOY4OkEOCxoXFAzAs1rNuYJuXVRYH2Bo3o4sgxzUGvOEiSxYAgK4x+f3x3g1u4To23FBX5jLZFCCOdYlRsSBvuwsldYCCrctVvNUSqzKuu+huF3KJtkUBkcvY2ieDPHbXY6TNDx+1z2YeTbjH/MG3u/tP3t5A/wy4kmwmZlNnR2+6fL7RrqjgVRaDAQAHFWxtaf0arm1WDEsK+X08a/PeNZbeF5+plr2+qoPbC3VOiNj21DhtJ3xTgatiR1OHtQK8YYNSXQBn85waBY0UJGsxGADAU4HwKgwG4Zvav9S7h5W2GH/Wx6FtviD4bl9sWIfRqM0p3N+B4TXUzU8Tvn9uHpmlQtxcqqJUtOIL5K16mGwnjg2HwpsiPhLsuo/p1Gmy5zIOKmiKih501YqKtFY9Zks2r674l5Mza8zV7P863Tf9qtocqqPvE6lvjPrvCS1CMmE85aWQGrogSERZGWnwxbZFrsMXGYOMKVxaynMOkIZspgcpn3msxvlWVvKtohruZL0wb4X8xZvQnmjBHQnbn27dMz0hEymQuGkAAEgWuJLWucyEOwpcDxe8bQQ65z4DAv3L8HOVd6+0qapgMxgAoDoVj11e10Hum0khZx63RBlVYu9UoXc9FWP4V/rqwNxExZVhNBwmZ4xMXmr2uQPtqhZKpcMMCzk5YuzpqLIyZ0DHsXU5BzruMIbzIM93DtDNlfLSdmhvG5CbxYlMRh0qOZYj5Y0h9smmUJVcsr1kdH1xdH1BdH0F0/X9dM02mim1eKOrJJrWiHLGyPaS0vUZdE3+c+J5S7f30zWf0lipRTpdicw5hwyG4EoTp/9qFFmowXUrqi5sIiXctrUgMitgEAtqjckGxMs5boKPauDcUn0a/JfNhvXuDr4Hth6qifu+cVjpsFpX6iP3w9nvMn6kutByExbVhJ/SNdOO1gJeZW7Ipz1W63zQxB3qwdoy9QaEqu1fHYVp/Gri/e6KOHn7adnAtAi3ntbhfA55EzzG5r6tk7c3peumADcvDO4wx//BTx/GbV8WDUzICZdkaFU7CrP6JMwdz94juFSDGQBwDIQWOtqAIWCtRslNnxn72RjpHylrpqZuJwPkxJqzqbCayr+75zVt6F1bMjW7qUSonjXO4tTpGIfMuaAslMgqbJIlP2Bm969s0afumU7bAed16vPQ6SSm8SMlNftvpt+Mmw2nHGGvCborDTRX6dNlr4W9nW1iVBqhGcmkU4A2Gq3amskcNO6zLjO9ch6iMdtdmGFtckZ0mOYE5IzPCZ6LoC0XLYITAySH69ALMfFlhbuGeCLrUadDt5NafUkVYwhKMQ1kR7Cb/NYmobmmBQAAg9HqJrcvITR7xNXIdIMYXChxB3mqLjG+CTQzXYuypekkgxbM5WrNbLSKL7k7CcEVq+4TXaVAcEXxfv1VZIJr7Kpivz64q731t+j/Fxo6l8QIL0AqRH8oQycvx+/ti+LoD5fGF//K4BOdT1Yb8CgTLB5c9sU2rQo9fS9Zv5v0uBAGAKS1WgHVuqarUe6NRjxCD9nr4mDgFzx87jRotXJwk1ITO8lV8B6phnXYS26ttapiQR29G6EPQ7wOgYkwAMBeAjIGjbaqORvgdN6Yw+tAsxWdUlS1ZPAoxBvmXbMYhSy9IR2dHGXcIZnaSWWxi+2kFg1KnaO+r8BbDTTHOuoT5q3GgHmUd57xSvpd47IX3BH6VLs8AABMo+bIMw2h5KDQgxg6JFMtVfJcSzSkn8s7O2XgdJK6JNZxbPf2VNhIrowqR00+TzroSXgd8Ow9j0LFHxkENkjCCHH3c37FPxcyK55oXS4AT2IMF3LnYmkCraLRXlmdKsfGsf7aJNoDp86UOoRHKpFVj9CtMhGNV41v1z/Inrll6QkVUakZbHOlPsi+t8gW2cecWnZ+LXuP9xKXaWc20ZiarTdyKmqGIQ4Npo737xDE9oXNWSS7bS1UBDtljaVFqqtMN96CufIkFnfH/qEKeZWz79wQNuQeUjkaBevufHF3x8nbKxaCFaypYbP3sUqpw3upuIfcR6oMd7uS83UAgOOKihhxJWXDcGXL1sMKctqZjvBq77lmAMCh+HRlW8IKTLYNV3r+X9/993aUoiTOkxT3rkDf3vyf+XuFrwKNetwKyrpbi5mL37uyfI+gu584vL2CPe/n9g+p6/ZK8lvvL3EGM65h3/n1lmjHmG0isu15X9ayVBOu+jMGSQa0yt4MjT/WLyP8nRLDJohSyuqdyXQLbtsN3kKBXbnbsBcUwXUig4O+uJwa787kARZ0EhHv5qIqNOjMg3MoFZH9V8Zg/DBPs/CTuGHgzR/VuAAADLa3/89oo68mV82D8cMcdAYuGgxG4o/DGhMACMt6j7LLU24G1vG294qtNL7OfjOxwkKXmXQVeJVKlN78UIqW05eszbSYwoX3iqAYXTQcCwAU1La2n53dhxUUOnr9O4hC1cNOsw+D3wAYL3TwmZFby4HQKCDI5I42+6Nm1egSFC+FAQA76O4ZhAAT9Gf3tufFyMuWvCbCx9+TPLq9NFjpDvZQvyLUayethS3ExXjkYr+CDltjn14/3tf6LDEPuU4fn5X2XBW3C81zF0yq4vZsDN4xtBZ0z60dAmu9qhaDAQAHh3ZnugtsGKG037Oa3r3Pll+Um9J8FkLXqs9zIUE7JZ1hrVzH3ESFbkDuvmPK9p+Z9uwH3aN7PJsq7vVNr12XGsSZ3Lp8MJNv/FXyVLkgXg3kCdsYXxvy3OoXX850St4uxuDLZMcoU4ADlJ7dZIrLY4PKISiTN6zw7qa+92GMz65grmcc0HEk+/cx+B5Jn4K/N4xmuXFldyOqsWn6kHCt0FcFP9XBzfcT+/kBXXUCnGLACoHI1sX/zqsV63KPoYQG1g3964Dbhv7VEmevBynsEMJs6aIH+A3YOQBjKIwXewqwhifIscrtDAY/vx2l+b0oHJ5DMsSJtRjMVe8PXU/djVB7XIFAzhYMeDSyuV3urD1142583+I32Z2NWc03BJI4Oo3ew1QLpql0kLYoFInsqzpYe/No6WJL4Dn5wZcML+kXj4sOt7LX9Ql5wU7+r0+eDSRPhFs9+kwzH0bC+4Q/pBCV/N9j99bG99MjXrah7FP888CcJRPL5hfHSwJBMXaHLgSlY4N0IzjVaoznicLGGehOWry0qR25IAwAcBzqHb7OglNVikjl5MVzhY6KDK8zL7uBMjNd8DkvInPTuZHbgrBoZ4BVas3fgLW0C8KuDiXagLW3bQy7loB1pH5h53pMxDpdY+cXvM5ujwPEprnO7qFLy+ZA27RDtFRDm6MjtVeBMuxHcppXmih/rS/rLcCctbfx7yMZ15v9SO74SiPnMQEAa8bfNMjlhDct5Rrvgenh+qeDXJqkLpj94kBMsHnaGi9trhsow2krprBQZvO9NzVDoivLjG2I855042Qv6qQGo5Mhh5/5ML3dtLnZge3OzGyH0JQryQo0I7gZxjW+LYQ5bWI52VmIp0k+Fmsz5PMLxRNdcW9QX9qJWIyVee04ez8dcvZGUVGVvkcKMONiZ7PfKgVm1xRcRheGApmY50MVnO7FYADAjApUp76gawCRPM8MvUGNnpbApPWVbtlHOz/R/mwbDbp1IG1Gf58TPI8RcnXELe94+9Qy08Ba1iXV6/hQ8iYuQwrQHxlA4H66IqtX5VibvGGOfThx5zD6y/G3a2GBG7kie5xiOfR6yhlFqJxXonHYV6G/PExfYCdvz6UDXYQ76syf6CFdhsdA9dW/5O0PcpEcBK+0WAEAKAHI6R1yhaEkiIUzSGr1TAM6BRAwz9VrsGQF6akykJ2bZD9B3YJnA0JEpG8MvbBYURHtVuglUAxXw2cQsVxJkYFwfS4Bu3CvEnywDFItJBPx10XMrDpvIz6qaOmFgXLEJ0wGmFVVHqhfDkdWnZysI+WchhO1CRrFpYYEtq/TaYqODxGZ5eqjqZUd7umoAICUu/DDgfPwtM0T27J+eeck+c1z4by4mQ3luluLQfW9RMBL2We4wPOaxnCciCR2ktU8FNj8Er/D/o/SH4be//bMaS23l3LG1IsVvXbULkuH3GzimLOp7o4iiFRRyXgWYAgi1VFKg+lm6J+s7cfOJnpd4D9SHW5RGABQBzTowDdhpnLYEjyPoZfC056d5+5GrnjrSvjmcHgxcZWt3DCg+GSGZM59b1DisTPZymsJIQfrklWuU38nU/qHYCyk1MgTCcO92bNlGD2Ewz/FffCn4E7Y9xMfuroecun6/G5w9+qUsx7/BdRn/2A/gOe49gdftOrTCi8BqAHSb1fOQydWHq5SsmL5ejYbTp5uaGQG1FxuBAYw5SccEFU98jfgGwcWPaqaSnh8TDp6BK7k+eWFeP++s3kQ6PK7sSSwZOMFX1iH5+gSOPi9XH+6b3Y/cBe/Njjxd3h9Lub2VIfg7m/Wkp+fFaehNuqdqY7ORDGO8ewz/p9h5vPT4qo55YurCjzaLX8STLKf3ya4xZamKR30krko8TSYZDFNOu0u7rmLOqZigLFAU5AvYd9lS8pn7Ic+RzyBW5/D3K5n5gsjJ6Lt2NBHfV5KuWVZWr71XOmHmOFbXqFzXlvpmWjWXY6UoLYL+SJh09cnt+Q3hubO8COP6War8uqA+M9XqMh1l2+vFpfL4TU4H7gWB1cBfE7g+UFteZ7vI05o+u3xUsP9UZK3bgCNNCoAAI0D6NY76sWwwgYZaQyKByN1wjQ1oHfxTuXzPe7tCgq3GAwAMFRgKBN+05NcZkfAmOepBTipzpueqSzvJEXPhN9wHt9IQGs3tlLAJ5EEH6A72McDtjmqTJBB2bEBO1WKjpk1YIdWdMvCgB2NYi6sDNhrt25EiT9gb/afYgEQx7Vvp94/l4lQs3y6CpjUYRYL6FszcVtDtcmxChhMZolEADDXAGfpIG4dgHO/+42ekjghnfPv9q0OWvv8q/5UZR8eYx/f3Bvb+L6w7/pON2u7fbO85b0+3MlVn3053tMWO4O5xmTC1TofFrnRPXjqV+QxerGjYvs5jkrsR0f07/RUYf0w5vURO62d6WOAT+g4YLNWNuULi6qrWhCPU+jskS+PeK7S4LlRhzWPfrpIJ9ILzzZo5yfpZcvwbpisaQijY3lrQK64Oq/nkHdP3AUr4aEYG/qyG18xuJYrb+j2zYsdi1sFzZjG586pDdm9b/ZVu28Ca8fKT3aktXL+4rMD4H4jsyPodkZvG7OjPnfMKFeh/TmbB1kgnkauWMd0NbZUxN/JXs5nzij+XXnBF2UTNX/7m3YL63UvByhLwwXhxY7E6cOb7J8rx/4V9POIDU/l+xnxOsT4TbQn6svnbM8VFhiirzobqG7CMllCe++j7cI3F2l9Fnpwe67vKl14wWIFACDG2yl0vCDbVVBV5mBCT8efBwLEyqMvkagiXnxaGABgxJsqw98xPJ0dgTkzzxVnlhvJ2jP0dummQxlAX+Xm2ef5idunR18xMJThcjCJIR0Cbqf687AUB0F1F29XYG9sDGpV4AjbgoYKnMQX0HSLaEPrRhmJjq0BI2ANl+jKA/LuN0k3zNWcDWcUnDBQ+h7AOTO5krUrz+cekJFCPLOL/0THPo/AKTDmixuvK0vq9Ulp3dBwnWkOLa/4R9nkfs4U+aMIo00vYzBL1SeYrb3XoZplSZPq1Mvt2iUSAcDShVxM8UOzkFaK9Q8CpveiHw20NW0tlmkafNyGfV41X7yO/PcUnp3XZ+c1DM43ifNdG/8MbPHaM7ctvH7Bfe58+qy89rq+m+ziscCOY86oWkGDYscthaWA1uVBK5rxV1p9XuVEpti6T79c8Tg7i9Gl/YPz9uvXa4xrQ7a9TcBvPdn3rNsxnjiOveaCMABAc/iioafZem8NEzrTrSm8MECeZ+JARW/YPKvz4gUe8cSeqK0GiQz5/ETRF6Y8InJsl0NmmKSmSUfPzGTmhZOJe7MtW4OchAbDdjJnvzG7bfu2xQH21EJsOTxPXp8nr2ExvnyIdPR26W1/eH5x+D6ensGb1zDs4OA6HwX4qryTBV9CT8HeStOs6KvOZqiL3kwhONHhH+b156T7iGeuqDX6s9CDb73cd5M5wHONCgCAF8CWip1N5zMV2J7S4Pq0qkRnTa1mH8XLjT6SpoF5dvCLXtcnl02dqpxH8t42gwEAvps8UZ92+ka2PkQKETOT9WOHRTjexQxntaCiMg97QDODWT2nPlXwjN+Y1fcVA0N5UfojCuMOSN76sUtoaYQkcZ5DsGRjMJweBbcIz226ZcYtwteaC7MqsHXtG6sALNASsNAEKkiqDCJpMGIJVNt96k6qusBNfp1x5rVkx2sHMvorxoZ/qfU/87VzW1T9Hqi2arYe58Xt4n/WAYCthkgunYswtQKy/iD02p+bEGyVpIofsiQOxfsnBW7rgr8iQaruFF3BbUh3SrUU7SwapCkq//ZDm2P8bd+VPw8n6NvuWj/1sZt6S3d2UOFzb/eMqosIfIhLKXYsxK2UBuOkVa1BZePpFoUBAO4YpoHRVhcsm4VdjefJ6W2KNzo7b6NS9I7T7Znw9o7D1lSeBafbBFm3W5CCM9Ayh2ZhH8yWdrkwmG2D4Qbcon3bPnDLNmLRzKJzqCt5Ps+lYuchzZfhu/7UP+Hl9g2YZmXOe1PfTU4BaSxWAADSzb7uLTXPFd7aGLxG8e7Ka2P60duYUxPgqIYwAGCKfdsWB6xcYPA2Rt4dkd5MZR4xM4ArA7QKq0uxr+YniqC4snpAsQ2CdBewJYTHQbA4DzigBqeqmNkYj/Ex+gWHh1HKDCfiYt/YBnFjC9iDgqriRCmDN7KbvaEhH7bV4/9o8iqpt0UijZeK23fqXPbwbLEu9l5qH4qOLfxsXPvOyZqOi7ptV29mkEylzceyh1rHKduSdPqEVtt98zl85h7vsomK8+M9/w++WIvOoaq8J3yCf7UYvCR8OKm+lE/yGH2CB+m5Dv6JidLoIU/mh/hiOQXtjzhatQ85YkdsD7v/8VPmJEog7ZUKj2jCxvO6LsXNCcLK7+niPQryHDEdafxurmo3xH/8VbK/jwV5rg03y/tvC9T1Rd8JKI2usEZSQgV1ss8+gJtjtpcD","base64")).toString()),z5}var RBe=new Map([[q.makeIdent(null,"fsevents").identHash,kBe],[q.makeIdent(null,"resolve").identHash,QBe],[q.makeIdent(null,"typescript").identHash,TBe]]),pSt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,s]of V5)e(q.parseDescriptor(r,!0),s)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let s=q.parseIdent(e.slice(r.length)),a=RBe.get(s.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,s)=>typeof RBe.get(t.identHash)>"u"?t:q.makeDescriptor(t,q.makeRange({protocol:"patch:",source:q.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},hSt=pSt;var g9={};Vt(g9,{ConstraintsCheckCommand:()=>XC,ConstraintsQueryCommand:()=>zC,ConstraintsSourceCommand:()=>ZC,default:()=>HSt});Ve();Ve();gS();var YC=class{constructor(e){this.project=e}createEnvironment(){let e=new WC(["cwd","ident"]),r=new WC(["workspace","type","ident"]),s=new WC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,c=new Map;for(let f of this.project.storedPackages.values()){let p=Array.from(f.peerDependencies.values(),h=>[q.stringifyIdent(h),h.range]);n.set(f.locatorHash,{workspace:null,ident:q.stringifyIdent(f),version:f.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>f.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>f.peerDependenciesMeta.get(h)?.optional===!0))})}for(let f of this.project.storedPackages.values()){let p=n.get(f.locatorHash);p.dependencies=new Map(Array.from(f.dependencies.values(),h=>{let E=this.project.storedResolutions.get(h.descriptorHash);if(typeof E>"u")throw new Error("Assertion failed: The resolution should have been registered");let C=n.get(E);if(typeof C>"u")throw new Error("Assertion failed: The package should have been registered");return[q.stringifyIdent(h),C]})),p.dependencies.delete(p.ident)}for(let f of this.project.workspaces){let p=q.stringifyIdent(f.anchoredLocator),h=f.manifest.exportTo({}),E=n.get(f.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let C=(R,N,{caller:U=ps.getCaller()}={})=>{let W=hS(R),te=je.getMapWithDefault(a.manifestUpdates,f.cwd),ie=je.getMapWithDefault(te,W),Ae=je.getSetWithDefault(ie,N);U!==null&&Ae.add(U)},S=R=>C(R,void 0,{caller:ps.getCaller()}),P=R=>{je.getArrayWithDefault(a.reportedErrors,f.cwd).push(R)},I=e.insert({cwd:f.relativeCwd,ident:p,manifest:h,pkg:E,set:C,unset:S,error:P});c.set(f,I);for(let R of Ht.allDependencies)for(let N of f.manifest[R].values()){let U=q.stringifyIdent(N),W=()=>{C([R,U],void 0,{caller:ps.getCaller()})},te=Ae=>{C([R,U],Ae,{caller:ps.getCaller()})},ie=null;if(R!=="peerDependencies"&&(R!=="dependencies"||!f.manifest.devDependencies.has(N.identHash))){let Ae=f.anchoredPackage.dependencies.get(N.identHash);if(Ae){if(typeof Ae>"u")throw new Error("Assertion failed: The dependency should have been registered");let ce=this.project.storedResolutions.get(Ae.descriptorHash);if(typeof ce>"u")throw new Error("Assertion failed: The resolution should have been registered");let me=n.get(ce);if(typeof me>"u")throw new Error("Assertion failed: The package should have been registered");ie=me}}r.insert({workspace:I,ident:U,range:N.range,type:R,resolution:ie,update:te,delete:W,error:P})}}for(let f of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(f);if(!p)continue;let h=c.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(f.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");E.workspace=h}return{workspaces:e,dependencies:r,packages:s,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},s=await this.project.loadUserConfig();return s?.constraints?(await s.constraints(r),e.result):null}};Ve();Ve();Wt();var zC=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.String()}static{this.paths=[["constraints","query"]]}static{this.usage=ot.Usage({category:"Constraints-related commands",description:"query the constraints fact database",details:` - This command will output all matches to the given prolog query. - `,examples:[["List all dependencies throughout the workspace","yarn constraints query 'workspace_has_dependency(_, DependencyName, _, _).'"]]})}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(ES(),yS)),s=await ze.find(this.context.cwd,this.context.plugins),{project:a}=await Tt.find(s,this.context.cwd),n=await r.find(a),c=this.query;return c.endsWith(".")||(c=`${c}.`),(await Ot.start({configuration:s,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(c)){let E=Array.from(Object.entries(h)),C=E.length,S=E.reduce((P,[I])=>Math.max(P,I.length),0);for(let P=0;P(ES(),yS)),s=await ze.find(this.context.cwd,this.context.plugins),{project:a}=await Tt.find(s,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};Ve();Ve();Wt();gS();var XC=class extends ut{constructor(){super(...arguments);this.fix=ge.Boolean("--fix",!1,{description:"Attempt to automatically fix unambiguous issues, following a multi-pass process"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["constraints"]]}static{this.usage=ot.Usage({category:"Constraints-related commands",description:"check that the project constraints are met",details:` - This command will run constraints on your project and emit errors for each one that is found but isn't met. If any error is emitted the process will exit with a non-zero exit code. - - If the \`--fix\` flag is used, Yarn will attempt to automatically fix the issues the best it can, following a multi-pass process (with a maximum of 10 iterations). Some ambiguous patterns cannot be autofixed, in which case you'll have to manually specify the right resolution. - - For more information as to how to write constraints, please consult our dedicated page on our website: https://yarnpkg.com/features/constraints. - `,examples:[["Check that all constraints are satisfied","yarn constraints"],["Autofix all unmet constraints","yarn constraints --fix"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s}=await Tt.find(r,this.context.cwd);await s.restoreInstallState();let a=await s.loadUserConfig(),n;if(a?.constraints)n=new YC(s);else{let{Constraints:h}=await Promise.resolve().then(()=>(ES(),yS));n=await h.find(s)}let c,f=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:C,remainingErrors:S}=oF(s,E,{fix:this.fix}),P=[];for(let[I,R]of C){let N=I.manifest.indent;I.manifest=new Ht,I.manifest.indent=N,I.manifest.load(R),P.push(I.persistManifest())}if(await Promise.all(P),!(C.size>0&&h>1)){c=UBe(S,{configuration:r}),f=!1,p=!0;for(let[,I]of S)for(let R of I)R.fixable?f=!0:p=!1}}if(c.children.length===0)return 0;if(f){let h=p?`Those errors can all be fixed by running ${he.pretty(r,"yarn constraints --fix",he.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${he.pretty(r,"yarn constraints --fix",he.Type.CODE)}`;await Ot.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return c.children=je.sortMap(c.children,h=>h.value[1]),Qs.emitTree(c,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};gS();var USt={configuration:{enableConstraintsChecks:{description:"If true, constraints will run during installs",type:"BOOLEAN",default:!1},constraintsPath:{description:"The path of the constraints file.",type:"ABSOLUTE_PATH",default:"./constraints.pro"}},commands:[zC,ZC,XC],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),s;if(r?.constraints)s=new YC(t);else{let{Constraints:c}=await Promise.resolve().then(()=>(ES(),yS));s=await c.find(t)}let a=await s.process();if(!a)return;let{remainingErrors:n}=oF(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[c,f]of n)for(let p of f)e(84,`${he.pretty(t.configuration,c.anchoredLocator,he.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${he.pretty(t.configuration,"yarn constraints",he.Type.CODE)} for more details`)}}},HSt=USt;var d9={};Vt(d9,{CreateCommand:()=>$C,DlxCommand:()=>ew,default:()=>qSt});Ve();Wt();var $C=class extends ut{constructor(){super(...arguments);this.pkg=ge.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}static{this.paths=[["create"]]}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let s=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=q.parseDescriptor(s),n=a.name.match(/^create(-|$)/)?a:a.scope?q.makeIdent(a.scope,`create-${a.name}`):q.makeIdent(null,`create-${a.name}`),c=q.stringifyIdent(n);return a.range!=="unknown"&&(c+=`@${a.range}`),this.cli.run(["dlx",...r,c,...this.args])}};Ve();Ve();bt();Wt();var ew=class extends ut{constructor(){super(...arguments);this.packages=ge.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}static{this.paths=[["dlx"]]}static{this.usage=ot.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-vite to scaffold a new Vite project","yarn dlx create-vite"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]})}async execute(){return ze.telemetry=null,await le.mktempPromise(async r=>{let s=K.join(r,`dlx-${process.pid}`);await le.mkdirPromise(s),await le.writeFilePromise(K.join(s,"package.json"),`{} -`),await le.writeFilePromise(K.join(s,"yarn.lock"),"");let a=K.join(s,".yarnrc.yml"),n=await ze.findProjectCwd(this.context.cwd),f={enableGlobalCache:!(await ze.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Vf(68),level:he.LogLevel.Discard}]},p=n!==null?K.join(n,".yarnrc.yml"):null;p!==null&&le.existsSync(p)?(await le.copyFilePromise(p,a),await ze.updateConfiguration(s,N=>{let U=je.toMerged(N,f);return Array.isArray(N.plugins)&&(U.plugins=N.plugins.map(W=>{let te=typeof W=="string"?W:W.path,ie=ue.isAbsolute(te)?te:ue.resolve(ue.fromPortablePath(n),te);return typeof W=="string"?ie:{path:ie,spec:W.spec}})),U})):await le.writeJsonPromise(a,f);let h=this.packages??[this.command],E=q.parseDescriptor(this.command).name,C=await this.cli.run(["add","--fixed","--",...h],{cwd:s,quiet:this.quiet});if(C!==0)return C;this.quiet||this.context.stdout.write(` -`);let S=await ze.find(s,this.context.plugins),{project:P,workspace:I}=await Tt.find(S,s);if(I===null)throw new ar(P.cwd,s);await P.restoreInstallState();let R=await In.getWorkspaceAccessibleBinaries(I);return R.has(E)===!1&&R.size===1&&typeof this.packages>"u"&&(E=Array.from(R)[0][0]),await In.executeWorkspaceAccessibleBinary(I,E,this.args,{packageAccessibleBinaries:R,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};var jSt={commands:[$C,ew]},qSt=jSt;var E9={};Vt(E9,{ExecFetcher:()=>CS,ExecResolver:()=>wS,default:()=>YSt,execUtils:()=>uF});Ve();Ve();bt();var fA="exec:";var uF={};Vt(uF,{loadGeneratorFile:()=>IS,makeLocator:()=>y9,makeSpec:()=>Ave,parseSpec:()=>m9});Ve();bt();function m9(t){let{params:e,selector:r}=q.parseRange(t),s=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?q.parseLocator(e.locator):null,path:s}}function Ave({parentLocator:t,path:e,generatorHash:r,protocol:s}){let a=t!==null?{locator:q.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return q.makeRange({protocol:s,source:e,selector:e,params:{...n,...a}})}function y9(t,{parentLocator:e,path:r,generatorHash:s,protocol:a}){return q.makeLocator(t,Ave({parentLocator:e,path:r,generatorHash:s,protocol:a}))}async function IS(t,e,r){let{parentLocator:s,path:a}=q.parseFileStyleRange(t,{protocol:e}),n=K.isAbsolute(a)?{packageFs:new Sn(vt.root),prefixPath:vt.dot,localPath:vt.root}:await r.fetcher.fetch(s,r),c=n.localPath?{packageFs:new Sn(vt.root),prefixPath:K.relative(vt.root,n.localPath)}:n;n!==c&&n.releaseFs&&n.releaseFs();let f=c.packageFs,p=K.join(c.prefixPath,a);return await f.readFilePromise(p,"utf8")}var CS=class{supports(e,r){return!!e.reference.startsWith(fA)}getLocalPath(e,r){let{parentLocator:s,path:a}=q.parseFileStyleRange(e.reference,{protocol:fA});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(s,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:q.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:c}}async fetchFromDisk(e,r){let s=await IS(e.reference,fA,r);return le.mktempPromise(async a=>{let n=K.join(a,"generator.js");return await le.writeFilePromise(n,s),le.mktempPromise(async c=>{if(await this.generatePackage(c,e,n,r),!le.existsSync(K.join(c,"build")))throw new Error("The script should have generated a build directory");return await gs.makeArchiveFromDirectory(K.join(c,"build"),{prefixPath:q.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,s,a){return await le.mktempPromise(async n=>{let c=await In.makeScriptEnv({project:a.project,binFolder:n}),f=K.join(e,"runtime.js");return await le.mktempPromise(async p=>{let h=K.join(p,"buildfile.log"),E=K.join(e,"generator"),C=K.join(e,"build");await le.mkdirPromise(E),await le.mkdirPromise(C);let S={tempDir:ue.fromPortablePath(E),buildDir:ue.fromPortablePath(C),locator:q.stringifyLocator(r)};await le.writeFilePromise(f,` - // Expose 'Module' as a global variable - Object.defineProperty(global, 'Module', { - get: () => require('module'), - configurable: true, - enumerable: false, - }); - - // Expose non-hidden built-in modules as global variables - for (const name of Module.builtinModules.filter((name) => name !== 'module' && !name.startsWith('_'))) { - Object.defineProperty(global, name, { - get: () => require(name), - configurable: true, - enumerable: false, - }); - } - - // Expose the 'execEnv' global variable - Object.defineProperty(global, 'execEnv', { - value: { - ...${JSON.stringify(S)}, - }, - enumerable: true, - }); - `);let P=c.NODE_OPTIONS||"",I=/\s*--require\s+\S*\.pnp\.c?js\s*/g;P=P.replace(I," ").trim(),c.NODE_OPTIONS=P;let{stdout:R,stderr:N}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${q.stringifyLocator(r)}) -`,prefix:q.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Gr.pipevp(process.execPath,["--require",ue.fromPortablePath(f),ue.fromPortablePath(s),q.stringifyIdent(r)],{cwd:e,env:c,stdin:null,stdout:R,stderr:N});if(U!==0)throw le.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${he.pretty(a.project.configuration,h,he.Type.PATH)})`)})})}};Ve();Ve();var GSt=2,wS=class{supportsDescriptor(e,r){return!!e.range.startsWith(fA)}supportsLocator(e,r){return!!e.reference.startsWith(fA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){return q.bindDescriptor(e,{locator:q.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){if(!s.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=m9(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let c=await IS(q.makeRange({protocol:fA,source:a,selector:a,params:{locator:q.stringifyLocator(n)}}),fA,s.fetchOptions),f=Nn.makeHash(`${GSt}`,c).slice(0,6);return[y9(e,{parentLocator:n,path:a,generatorHash:f,protocol:fA})]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let s=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Ht.find(s.prefixPath,{baseFs:s.packageFs}),s.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var WSt={fetchers:[CS],resolvers:[wS]},YSt=WSt;var C9={};Vt(C9,{FileFetcher:()=>DS,FileResolver:()=>bS,TarballFileFetcher:()=>PS,TarballFileResolver:()=>xS,default:()=>JSt,fileUtils:()=>Pm});Ve();bt();var tw=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,BS=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,ts="file:";var Pm={};Vt(Pm,{fetchArchiveFromLocator:()=>SS,makeArchiveFromLocator:()=>fF,makeBufferFromLocator:()=>I9,makeLocator:()=>rw,makeSpec:()=>pve,parseSpec:()=>vS});Ve();bt();function vS(t){let{params:e,selector:r}=q.parseRange(t),s=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?q.parseLocator(e.locator):null,path:s}}function pve({parentLocator:t,path:e,hash:r,protocol:s}){let a=t!==null?{locator:q.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return q.makeRange({protocol:s,source:e,selector:e,params:{...n,...a}})}function rw(t,{parentLocator:e,path:r,hash:s,protocol:a}){return q.makeLocator(t,pve({parentLocator:e,path:r,hash:s,protocol:a}))}async function SS(t,e){let{parentLocator:r,path:s}=q.parseFileStyleRange(t.reference,{protocol:ts}),a=K.isAbsolute(s)?{packageFs:new Sn(vt.root),prefixPath:vt.dot,localPath:vt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new Sn(vt.root),prefixPath:K.relative(vt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let c=n.packageFs,f=K.join(n.prefixPath,s);return await je.releaseAfterUseAsync(async()=>await c.readFilePromise(f),n.releaseFs)}async function fF(t,{protocol:e,fetchOptions:r,inMemory:s=!1}){let{parentLocator:a,path:n}=q.parseFileStyleRange(t.reference,{protocol:e}),c=K.isAbsolute(n)?{packageFs:new Sn(vt.root),prefixPath:vt.dot,localPath:vt.root}:await r.fetcher.fetch(a,r),f=c.localPath?{packageFs:new Sn(vt.root),prefixPath:K.relative(vt.root,c.localPath)}:c;c!==f&&c.releaseFs&&c.releaseFs();let p=f.packageFs,h=K.join(f.prefixPath,n);return await je.releaseAfterUseAsync(async()=>await gs.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:q.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:s}),f.releaseFs)}async function I9(t,{protocol:e,fetchOptions:r}){return(await fF(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var DS=class{supports(e,r){return!!e.reference.startsWith(ts)}getLocalPath(e,r){let{parentLocator:s,path:a}=q.parseFileStyleRange(e.reference,{protocol:ts});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(s,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${q.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:q.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:c}}async fetchFromDisk(e,r){return fF(e,{protocol:ts,fetchOptions:r})}};Ve();Ve();var VSt=2,bS=class{supportsDescriptor(e,r){return e.range.match(tw)?!0:!!e.range.startsWith(ts)}supportsLocator(e,r){return!!e.reference.startsWith(ts)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){return tw.test(e.range)&&(e=q.makeDescriptor(e,`${ts}${e.range}`)),q.bindDescriptor(e,{locator:q.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){if(!s.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=vS(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let c=await I9(q.makeLocator(e,q.makeRange({protocol:ts,source:a,selector:a,params:{locator:q.stringifyLocator(n)}})),{protocol:ts,fetchOptions:s.fetchOptions}),f=Nn.makeHash(`${VSt}`,c).slice(0,6);return[rw(e,{parentLocator:n,path:a,hash:f,protocol:ts})]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let s=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Ht.find(s.prefixPath,{baseFs:s.packageFs}),s.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ve();var PS=class{supports(e,r){return BS.test(e.reference)?!!e.reference.startsWith(ts):!1}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${q.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:q.getIdentVendorPath(e),checksum:c}}async fetchFromDisk(e,r){let s=await SS(e,r);return await gs.convertToZip(s,{configuration:r.project.configuration,prefixPath:q.getIdentVendorPath(e),stripComponents:1})}};Ve();Ve();Ve();var xS=class{supportsDescriptor(e,r){return BS.test(e.range)?!!(e.range.startsWith(ts)||tw.test(e.range)):!1}supportsLocator(e,r){return BS.test(e.reference)?!!e.reference.startsWith(ts):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){return tw.test(e.range)&&(e=q.makeDescriptor(e,`${ts}${e.range}`)),q.bindDescriptor(e,{locator:q.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){if(!s.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=vS(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let c=rw(e,{parentLocator:n,path:a,hash:"",protocol:ts}),f=await SS(c,s.fetchOptions),p=Nn.makeHash(f).slice(0,6);return[rw(e,{parentLocator:n,path:a,hash:p,protocol:ts})]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let s=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Ht.find(s.prefixPath,{baseFs:s.packageFs}),s.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var KSt={fetchers:[PS,DS],resolvers:[xS,bS]},JSt=KSt;var v9={};Vt(v9,{GithubFetcher:()=>kS,default:()=>ZSt,githubUtils:()=>AF});Ve();bt();var AF={};Vt(AF,{invalidGithubUrlMessage:()=>dve,isGithubUrl:()=>w9,parseGithubUrl:()=>B9});var hve=et(Ie("querystring")),gve=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function w9(t){return t?gve.some(e=>!!t.match(e)):!1}function B9(t){let e;for(let f of gve)if(e=t.match(f),e)break;if(!e)throw new Error(dve(t));let[,r,s,a,n="master"]=e,{commit:c}=hve.default.parse(n);return n=c||n.replace(/[^:]*:/,""),{auth:r,username:s,reponame:a,treeish:n}}function dve(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var kS=class{supports(e,r){return!!w9(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${q.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:q.getIdentVendorPath(e),checksum:c}}async fetchFromNetwork(e,r){let s=await An.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await le.mktempPromise(async a=>{let n=new Sn(a);await gs.extractArchiveTo(s,n,{stripComponents:1});let c=Qa.splitRepoUrl(e.reference),f=K.join(a,"package.tgz");await In.prepareExternalProject(a,f,{configuration:r.project.configuration,report:r.report,workspace:c.extra.workspace,locator:e});let p=await le.readFilePromise(f);return await gs.convertToZip(p,{configuration:r.project.configuration,prefixPath:q.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:s,username:a,reponame:n,treeish:c}=B9(e.reference);return`https://${s?`${s}@`:""}github.com/${a}/${n}/archive/${c}.tar.gz`}};var zSt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let s=new kS;if(!s.supports(e,r))return null;try{return await s.fetch(e,r)}catch{return null}}}},ZSt=zSt;var S9={};Vt(S9,{TarballHttpFetcher:()=>TS,TarballHttpResolver:()=>RS,default:()=>$St});Ve();function QS(t){let e;try{e=new URL(t)}catch{return!1}return!(e.protocol!=="http:"&&e.protocol!=="https:"||!e.pathname.match(/(\.tar\.gz|\.tgz|\/[^.]+)$/))}var TS=class{supports(e,r){return QS(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${q.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:q.getIdentVendorPath(e),checksum:c}}async fetchFromNetwork(e,r){let s=await An.get(e.reference,{configuration:r.project.configuration});return await gs.convertToZip(s,{configuration:r.project.configuration,prefixPath:q.getIdentVendorPath(e),stripComponents:1})}};Ve();Ve();var RS=class{supportsDescriptor(e,r){return QS(e.range)}supportsLocator(e,r){return QS(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){return[q.convertDescriptorToLocator(e)]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let s=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Ht.find(s.prefixPath,{baseFs:s.packageFs}),s.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var XSt={fetchers:[TS],resolvers:[RS]},$St=XSt;var D9={};Vt(D9,{InitCommand:()=>J0,InitInitializerCommand:()=>nw,default:()=>tDt});Wt();Ve();Ve();bt();Wt();var J0=class extends ut{constructor(){super(...arguments);this.private=ge.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=ge.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=ge.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.name=ge.String("-n,--name",{description:"Initialize a package with the given name"});this.usev2=ge.Boolean("-2",!1,{hidden:!0});this.yes=ge.Boolean("-y,--yes",{hidden:!0})}static{this.paths=[["init"]]}static{this.usage=ot.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),s=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return s!==null?await this.executeProxy(r,s):await this.executeRegular(r)}async executeProxy(r,s){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new nt("Cannot use the --install flag from within a project subdirectory");le.existsSync(this.context.cwd)||await le.mkdirPromise(this.context.cwd,{recursive:!0});let a=K.join(this.context.cwd,Er.lockfile);le.existsSync(a)||await le.writeFilePromise(a,"");let n=await this.cli.run(["set","version",s],{quiet:!0});if(n!==0)return n;let c=[];return this.private&&c.push("-p"),this.workspace&&c.push("-w"),this.name&&c.push(`-n=${this.name}`),this.yes&&c.push("-y"),await le.mktempPromise(async f=>{let{code:p}=await Gr.pipevp("yarn",["init",...c],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await In.makeScriptEnv({binFolder:f})});return p})}async initialize(){}async executeRegular(r){let s=null;try{s=(await Tt.find(r,this.context.cwd)).project}catch{s=null}le.existsSync(this.context.cwd)||await le.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Ht.tryFind(this.context.cwd),n=a??new Ht,c=Object.fromEntries(r.get("initFields").entries());n.load(c),n.name=n.name??q.makeIdent(r.get("initScope"),this.name??K.basename(this.context.cwd)),n.packageManager=un&&je.isTaggedYarnVersion(un)?`yarn@${un}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await le.mkdirPromise(K.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let f={};n.exportTo(f);let p=K.join(this.context.cwd,Ht.fileName);await le.changeFilePromise(p,`${JSON.stringify(f,null,2)} -`,{automaticNewlines:!0});let h=[p],E=K.join(this.context.cwd,"README.md");if(le.existsSync(E)||(await le.writeFilePromise(E,`# ${q.stringifyIdent(n.name)} -`),h.push(E)),!s||s.cwd===this.context.cwd){let C=K.join(this.context.cwd,Er.lockfile);le.existsSync(C)||(await le.writeFilePromise(C,""),h.push(C));let P=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# Whether you use PnP or not, the node_modules folder is often used to store","# build artifacts that should be gitignored","node_modules","","# Swap the comments on the following lines if you wish to use zero-installs","# In that case, don't forget to run `yarn config set enableGlobalCache false`!","# Documentation here: https://yarnpkg.com/features/caching#zero-installs","","#!.yarn/cache",".pnp.*"].map(Ae=>`${Ae} -`).join(""),I=K.join(this.context.cwd,".gitignore");le.existsSync(I)||(await le.writeFilePromise(I,P),h.push(I));let N=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(Ae=>`${Ae} -`).join(""),U=K.join(this.context.cwd,".gitattributes");le.existsSync(U)||(await le.writeFilePromise(U,N),h.push(U));let W={"*":{charset:"utf-8",endOfLine:"lf",indentSize:2,indentStyle:"space",insertFinalNewline:!0}};je.mergeIntoTarget(W,r.get("initEditorConfig"));let te=`root = true -`;for(let[Ae,ce]of Object.entries(W)){te+=` -[${Ae}] -`;for(let[me,pe]of Object.entries(ce)){let Be=me.replace(/[A-Z]/g,Ce=>`_${Ce.toLowerCase()}`);te+=`${Be} = ${pe} -`}}let ie=K.join(this.context.cwd,".editorconfig");le.existsSync(ie)||(await le.writeFilePromise(ie,te),h.push(ie)),await this.cli.run(["install"],{quiet:!0}),await this.initialize(),le.existsSync(K.join(this.context.cwd,".git"))||(await Gr.execvp("git",["init"],{cwd:this.context.cwd}),await Gr.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Gr.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};var nw=class extends J0{constructor(){super(...arguments);this.initializer=ge.String();this.argv=ge.Proxy()}static{this.paths=[["init"]]}async initialize(){this.context.stdout.write(` -`),await this.cli.run(["dlx",this.initializer,...this.argv],{quiet:!0})}};var eDt={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:"STRING",default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:"MAP",valueDefinition:{description:"",type:"ANY"}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:"MAP",valueDefinition:{description:"",type:"ANY"}}},commands:[J0,nw]},tDt=eDt;var IY={};Vt(IY,{SearchCommand:()=>Iw,UpgradeInteractiveCommand:()=>Cw,default:()=>yQt});Ve();var yve=et(Ie("os"));function iw({stdout:t}){if(yve.default.endianness()==="BE")throw new Error("Interactive commands cannot be used on big-endian systems because ink depends on yoga-layout-prebuilt which only supports little-endian architectures");if(!t.isTTY)throw new Error("Interactive commands can only be used inside a TTY environment")}Wt();var kSe=et(G9()),W9={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},Xbt=(0,kSe.default)(W9.appId,W9.apiKey).initIndex(W9.indexName),Y9=async(t,e=0)=>await Xbt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var QD=["regular","dev","peer"],Iw=class extends ut{static{this.paths=[["search"]]}static{this.usage=ot.Usage({category:"Interactive commands",description:"open the search interface",details:` - This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. - `,examples:[["Open the search window","yarn search"]]})}async execute(){iw(this.context);let{Gem:e}=await Promise.resolve().then(()=>(YF(),cY)),{ScrollableItems:r}=await Promise.resolve().then(()=>(zF(),JF)),{useKeypress:s}=await Promise.resolve().then(()=>(PD(),DPe)),{useMinistore:a}=await Promise.resolve().then(()=>(gY(),hY)),{renderForm:n}=await Promise.resolve().then(()=>(eN(),$F)),{default:c}=await Promise.resolve().then(()=>et(OPe())),{Box:f,Text:p}=await Promise.resolve().then(()=>et(Vc())),{default:h,useEffect:E,useState:C}=await Promise.resolve().then(()=>et(hn())),S=await ze.find(this.context.cwd,this.context.plugins),P=()=>h.createElement(f,{flexDirection:"row"},h.createElement(f,{flexDirection:"column",width:48},h.createElement(f,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(f,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(f,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(f,{flexDirection:"column"},h.createElement(f,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(f,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),I=()=>h.createElement(h.Fragment,null,h.createElement(f,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(f,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(f,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),R=()=>h.createElement(f,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),N=({hit:pe,active:Be})=>{let[Ce,g]=a(pe.name,null);s({active:Be},(fe,se)=>{if(se.name!=="space")return;if(!Ce){g(QD[0]);return}let X=QD.indexOf(Ce)+1;X===QD.length?g(null):g(QD[X])},[Ce,g]);let we=q.parseIdent(pe.name),ye=q.prettyIdent(S,we);return h.createElement(f,null,h.createElement(f,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},ye)),h.createElement(f,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},pe.owner.name)),h.createElement(f,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},pe.version)),h.createElement(f,{width:16,marginLeft:1},h.createElement(p,null,pe.humanDownloadsLast30Days)))},U=({name:pe,active:Be})=>{let[Ce]=a(pe,null),g=q.parseIdent(pe);return h.createElement(f,null,h.createElement(f,{width:47},h.createElement(p,{bold:!0}," - ",q.prettyIdent(S,g))),QD.map(we=>h.createElement(f,{key:we,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:Ce===we})," ",h.createElement(p,{bold:!0},we)))))},W=()=>h.createElement(f,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),ie=await n(({useSubmit:pe})=>{let Be=a();pe(Be);let Ce=Array.from(Be.keys()).filter(j=>Be.get(j)!==null),[g,we]=C(""),[ye,fe]=C(0),[se,X]=C([]),De=j=>{j.match(/\t| /)||we(j)},Re=async()=>{fe(0);let j=await Y9(g);j.query===g&&X(j.hits)},dt=async()=>{let j=await Y9(g,ye+1);j.query===g&&j.page-1===ye&&(fe(j.page),X([...se,...j.hits]))};return E(()=>{g?Re():X([])},[g]),h.createElement(f,{flexDirection:"column"},h.createElement(P,null),h.createElement(f,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(f,{width:41},h.createElement(c,{value:g,onChange:De,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(I,null)),se.length?h.createElement(r,{radius:2,loop:!1,children:se.map(j=>h.createElement(N,{key:j.name,hit:j,active:!1})),willReachEnd:dt}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(f,{flexDirection:"row",marginTop:1},h.createElement(f,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(R,null)),Ce.length?Ce.map(j=>h.createElement(U,{key:j,name:j,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(W,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ie>"u")return 1;let Ae=Array.from(ie.keys()).filter(pe=>ie.get(pe)==="regular"),ce=Array.from(ie.keys()).filter(pe=>ie.get(pe)==="dev"),me=Array.from(ie.keys()).filter(pe=>ie.get(pe)==="peer");return Ae.length&&await this.cli.run(["add",...Ae]),ce.length&&await this.cli.run(["add","--dev",...ce]),me&&await this.cli.run(["add","--peer",...me]),0}};Ve();Wt();fG();var qPe=et(Ai()),jPe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/;function GPe(t,e){return t.length>0?[t.slice(0,e)].concat(GPe(t.slice(e),e)):[]}var Cw=class extends ut{static{this.paths=[["upgrade-interactive"]]}static{this.usage=ot.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` - This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. - `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]})}async execute(){iw(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(HPe(),UPe)),{Pad:r}=await Promise.resolve().then(()=>(EY(),_Pe)),{ScrollableItems:s}=await Promise.resolve().then(()=>(zF(),JF)),{useMinistore:a}=await Promise.resolve().then(()=>(gY(),hY)),{renderForm:n}=await Promise.resolve().then(()=>(eN(),$F)),{Box:c,Text:f}=await Promise.resolve().then(()=>et(Vc())),{default:p,useEffect:h,useRef:E,useState:C}=await Promise.resolve().then(()=>et(hn())),S=await ze.find(this.context.cwd,this.context.plugins),{project:P,workspace:I}=await Tt.find(S,this.context.cwd),R=await Jr.find(S);if(!I)throw new ar(P.cwd,this.context.cwd);await P.restoreInstallState({restoreResolutions:!1});let N=this.context.stdout.rows-7,U=(we,ye)=>{let fe=cCe(we,ye),se="";for(let X of fe)X.added?se+=he.pretty(S,X.value,"green"):X.removed||(se+=X.value);return se},W=(we,ye)=>{if(we===ye)return ye;let fe=q.parseRange(we),se=q.parseRange(ye),X=fe.selector.match(jPe),De=se.selector.match(jPe);if(!X||!De)return U(we,ye);let Re=["gray","red","yellow","green","magenta"],dt=null,j="";for(let rt=1;rt{let se=await Xu.fetchDescriptorFrom(we,fe,{project:P,cache:R,preserveModifier:ye,workspace:I});return se!==null?se.range:we.range},ie=async we=>{let ye=qPe.default.valid(we.range)?`^${we.range}`:we.range,[fe,se]=await Promise.all([te(we,we.range,ye).catch(()=>null),te(we,we.range,"latest").catch(()=>null)]),X=[{value:null,label:we.range}];return fe&&fe!==we.range?X.push({value:fe,label:W(we.range,fe)}):X.push({value:null,label:""}),se&&se!==fe&&se!==we.range?X.push({value:se,label:W(we.range,se)}):X.push({value:null,label:""}),X},Ae=()=>p.createElement(c,{flexDirection:"row"},p.createElement(c,{flexDirection:"column",width:49},p.createElement(c,{marginLeft:1},p.createElement(f,null,"Press ",p.createElement(f,{bold:!0,color:"cyanBright"},""),"/",p.createElement(f,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(c,{marginLeft:1},p.createElement(f,null,"Press ",p.createElement(f,{bold:!0,color:"cyanBright"},""),"/",p.createElement(f,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(c,{flexDirection:"column"},p.createElement(c,{marginLeft:1},p.createElement(f,null,"Press ",p.createElement(f,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(c,{marginLeft:1},p.createElement(f,null,"Press ",p.createElement(f,{bold:!0,color:"cyanBright"},"")," to abort.")))),ce=()=>p.createElement(c,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(c,{width:50},p.createElement(f,{bold:!0},p.createElement(f,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(c,{width:17},p.createElement(f,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(c,{width:17},p.createElement(f,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(c,{width:17},p.createElement(f,{bold:!0,underline:!0,color:"gray"},"Latest"))),me=({active:we,descriptor:ye,suggestions:fe})=>{let[se,X]=a(ye.descriptorHash,null),De=q.stringifyIdent(ye),Re=Math.max(0,45-De.length);return p.createElement(p.Fragment,null,p.createElement(c,null,p.createElement(c,{width:45},p.createElement(f,{bold:!0},q.prettyIdent(S,ye)),p.createElement(r,{active:we,length:Re})),p.createElement(e,{active:we,options:fe,value:se,skewer:!0,onChange:X,sizes:[17,17,17]})))},pe=({dependencies:we})=>{let[ye,fe]=C(we.map(()=>null)),se=E(!0),X=async De=>{let Re=await ie(De);return Re.filter(dt=>dt.label!=="").length<=1?null:{descriptor:De,suggestions:Re}};return h(()=>()=>{se.current=!1},[]),h(()=>{let De=Math.trunc(N*1.75),Re=we.slice(0,De),dt=we.slice(De),j=GPe(dt,N),rt=Re.map(X).reduce(async(Fe,Ne)=>{await Fe;let Pe=await Ne;Pe!==null&&se.current&&fe(Ye=>{let ke=Ye.findIndex(_e=>_e===null),it=[...Ye];return it[ke]=Pe,it})},Promise.resolve());j.reduce((Fe,Ne)=>Promise.all(Ne.map(Pe=>Promise.resolve().then(()=>X(Pe)))).then(async Pe=>{Pe=Pe.filter(Ye=>Ye!==null),await Fe,se.current&&fe(Ye=>{let ke=Ye.findIndex(it=>it===null);return Ye.slice(0,ke).concat(Pe).concat(Ye.slice(ke+Pe.length))})}),rt).then(()=>{se.current&&fe(Fe=>Fe.filter(Ne=>Ne!==null))})},[]),ye.length?p.createElement(s,{radius:N>>1,children:ye.map((De,Re)=>De!==null?p.createElement(me,{key:Re,active:!1,descriptor:De.descriptor,suggestions:De.suggestions}):p.createElement(f,{key:Re},"Loading..."))}):p.createElement(f,null,"No upgrades found")},Ce=await n(({useSubmit:we})=>{we(a());let ye=new Map;for(let se of P.workspaces)for(let X of["dependencies","devDependencies"])for(let De of se.manifest[X].values())P.tryWorkspaceByDescriptor(De)===null&&(De.range.startsWith("link:")||ye.set(De.descriptorHash,De));let fe=je.sortMap(ye.values(),se=>q.stringifyDescriptor(se));return p.createElement(c,{flexDirection:"column"},p.createElement(Ae,null),p.createElement(ce,null),p.createElement(pe,{dependencies:fe}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Ce>"u")return 1;let g=!1;for(let we of P.workspaces)for(let ye of["dependencies","devDependencies"]){let fe=we.manifest[ye];for(let se of fe.values()){let X=Ce.get(se.descriptorHash);typeof X<"u"&&X!==null&&(fe.set(se.identHash,q.makeDescriptor(se,X)),g=!0)}}return g?await P.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:R}):0}};var mQt={commands:[Iw,Cw]},yQt=mQt;var wY={};Vt(wY,{default:()=>wQt});Ve();var RD="jsr:";Ve();Ve();function ww(t){let e=t.range.slice(4);if(Or.validRange(e))return q.makeDescriptor(t,`npm:${q.stringifyIdent(q.wrapIdentIntoScope(t,"jsr"))}@${e}`);let r=q.tryParseDescriptor(e,!0);if(r!==null)return q.makeDescriptor(t,`npm:${q.stringifyIdent(q.wrapIdentIntoScope(r,"jsr"))}@${r.range}`);throw new Error(`Invalid range: ${t.range}`)}function Bw(t){return q.makeLocator(q.wrapIdentIntoScope(t,"jsr"),`npm:${t.reference.slice(4)}`)}function CY(t){return q.makeLocator(q.unwrapIdentFromScope(t,"jsr"),`jsr:${t.reference.slice(4)}`)}var tN=class{supports(e,r){return e.reference.startsWith(RD)}getLocalPath(e,r){let s=Bw(e);return r.fetcher.getLocalPath(s,r)}fetch(e,r){let s=Bw(e);return r.fetcher.fetch(s,r)}};var rN=class{supportsDescriptor(e,r){return!!e.range.startsWith(RD)}supportsLocator(e,r){return!!e.reference.startsWith(RD)}shouldPersistResolution(e,r){let s=Bw(e);return r.resolver.shouldPersistResolution(s,r)}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{inner:ww(e)}}async getCandidates(e,r,s){let a=s.project.configuration.normalizeDependency(ww(e));return(await s.resolver.getCandidates(a,r,s)).map(c=>CY(c))}async getSatisfying(e,r,s,a){let n=a.project.configuration.normalizeDependency(ww(e));return a.resolver.getSatisfying(n,r,s,a)}async resolve(e,r){let s=Bw(e),a=await r.resolver.resolve(s,r);return{...a,...CY(a)}}};var EQt=["dependencies","devDependencies","peerDependencies"];function IQt(t,e){for(let r of EQt)for(let s of t.manifest.getForScope(r).values()){if(!s.range.startsWith("jsr:"))continue;let a=ww(s),n=r==="dependencies"?q.makeDescriptor(s,"unknown"):null,c=n!==null&&t.manifest.ensureDependencyMeta(n).optional?"optionalDependencies":r;e[c][q.stringifyIdent(s)]=a.range}}var CQt={hooks:{beforeWorkspacePacking:IQt},resolvers:[rN],fetchers:[tN]},wQt=CQt;var BY={};Vt(BY,{LinkFetcher:()=>FD,LinkResolver:()=>ND,PortalFetcher:()=>OD,PortalResolver:()=>LD,default:()=>vQt});Ve();bt();var ih="portal:",sh="link:";var FD=class{supports(e,r){return!!e.reference.startsWith(sh)}getLocalPath(e,r){let{parentLocator:s,path:a}=q.parseFileStyleRange(e.reference,{protocol:sh});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(s,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let{parentLocator:s,path:a}=q.parseFileStyleRange(e.reference,{protocol:sh}),n=K.isAbsolute(a)?{packageFs:new Sn(vt.root),prefixPath:vt.dot,localPath:vt.root}:await r.fetcher.fetch(s,r),c=n.localPath?{packageFs:new Sn(vt.root),prefixPath:K.relative(vt.root,n.localPath),localPath:vt.root}:n;n!==c&&n.releaseFs&&n.releaseFs();let f=c.packageFs,p=K.resolve(c.localPath??c.packageFs.getRealPath(),c.prefixPath,a);return n.localPath?{packageFs:new Sn(p,{baseFs:f}),releaseFs:c.releaseFs,prefixPath:vt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new jf(p,{baseFs:f}),releaseFs:c.releaseFs,prefixPath:vt.dot,discardFromLookup:!0}}};Ve();bt();var ND=class{supportsDescriptor(e,r){return!!e.range.startsWith(sh)}supportsLocator(e,r){return!!e.reference.startsWith(sh)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){return q.bindDescriptor(e,{locator:q.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){let a=e.range.slice(sh.length);return[q.makeLocator(e,`${sh}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ve();bt();var OD=class{supports(e,r){return!!e.reference.startsWith(ih)}getLocalPath(e,r){let{parentLocator:s,path:a}=q.parseFileStyleRange(e.reference,{protocol:ih});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(s,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let{parentLocator:s,path:a}=q.parseFileStyleRange(e.reference,{protocol:ih}),n=K.isAbsolute(a)?{packageFs:new Sn(vt.root),prefixPath:vt.dot,localPath:vt.root}:await r.fetcher.fetch(s,r),c=n.localPath?{packageFs:new Sn(vt.root),prefixPath:K.relative(vt.root,n.localPath),localPath:vt.root}:n;n!==c&&n.releaseFs&&n.releaseFs();let f=c.packageFs,p=K.resolve(c.localPath??c.packageFs.getRealPath(),c.prefixPath,a);return n.localPath?{packageFs:new Sn(p,{baseFs:f}),releaseFs:c.releaseFs,prefixPath:vt.dot,localPath:p}:{packageFs:new jf(p,{baseFs:f}),releaseFs:c.releaseFs,prefixPath:vt.dot}}};Ve();Ve();bt();var LD=class{supportsDescriptor(e,r){return!!e.range.startsWith(ih)}supportsLocator(e,r){return!!e.reference.startsWith(ih)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){return q.bindDescriptor(e,{locator:q.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){let a=e.range.slice(ih.length);return[q.makeLocator(e,`${ih}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let s=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Ht.find(s.prefixPath,{baseFs:s.packageFs}),s.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var BQt={fetchers:[FD,OD],resolvers:[ND,LD]},vQt=BQt;var oV={};Vt(oV,{NodeModulesLinker:()=>XD,NodeModulesMode:()=>rV,PnpLooseLinker:()=>$D,default:()=>HTt});bt();Ve();bt();bt();var SY=(t,e)=>`${t}@${e}`,WPe=(t,e)=>{let r=e.indexOf("#"),s=r>=0?e.substring(r+1):e;return SY(t,s)};var VPe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),s=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:s,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},c;n.debugLevel>=0&&(c=Date.now());let f=QQt(t,n),p=!1,h=0;do{let E=DY(f,[f],new Set([f.locator]),new Map,n);p=E.anotherRoundNeeded||E.isGraphChanged,n.fastLookupPossible=!1,h++}while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-c}ms, rounds: ${h}`),n.debugLevel>=1){let E=MD(f);if(DY(f,[f],new Set([f.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: -${E}, next tree: -${MD(f)}`);let S=KPe(f);if(S)throw new Error(`${S}, after hoisting finished: -${MD(f)}`)}return n.debugLevel>=2&&console.log(MD(f)),TQt(f)},SQt=t=>{let e=t[t.length-1],r=new Map,s=new Set,a=n=>{if(!s.has(n)){s.add(n);for(let c of n.hoistedDependencies.values())r.set(c.name,c);for(let c of n.dependencies.values())n.peerNames.has(c.name)||a(c)}};return a(e),r},DQt=t=>{let e=t[t.length-1],r=new Map,s=new Set,a=new Set,n=(c,f)=>{if(s.has(c))return;s.add(c);for(let h of c.hoistedDependencies.values())if(!f.has(h.name)){let E;for(let C of t)E=C.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of c.dependencies.values())p.add(h.name);for(let h of c.dependencies.values())c.peerNames.has(h.name)||n(h,p)};return n(e,a),r},YPe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:s,ident:a,locator:n,dependencies:c,originalDependencies:f,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:C,hoistPriority:S,dependencyKind:P,hoistedFrom:I,hoistedTo:R}=e,N={name:r,references:new Set(s),ident:a,locator:n,dependencies:new Map(c),originalDependencies:new Map(f),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:C,hoistPriority:S,dependencyKind:P,hoistedFrom:new Map(I),hoistedTo:new Map(R)},U=N.dependencies.get(r);return U&&U.ident==N.ident&&N.dependencies.set(r,N),t.dependencies.set(N.name,N),N},bQt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let s=Array.from(e.keys());s.sort((a,n)=>{let c=e.get(a),f=e.get(n);if(f.hoistPriority!==c.hoistPriority)return f.hoistPriority-c.hoistPriority;{let p=c.dependents.size+c.peerDependents.size;return f.dependents.size+f.peerDependents.size-p}});for(let a of s){let n=a.substring(0,a.indexOf("@",1)),c=a.substring(n.length+1);if(!t.peerNames.has(n)){let f=r.get(n);f||(f=[],r.set(n,f)),f.indexOf(c)<0&&f.push(c)}}return r},vY=t=>{let e=new Set,r=(s,a=new Set)=>{if(!a.has(s)){a.add(s);for(let n of s.peerNames)if(!t.peerNames.has(n)){let c=t.dependencies.get(n);c&&!e.has(c)&&r(c,a)}e.add(s)}};for(let s of t.dependencies.values())t.peerNames.has(s.name)||r(s);return e},DY=(t,e,r,s,a,n=new Set)=>{let c=e[e.length-1];if(n.has(c))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(c);let f=RQt(c),p=bQt(c,f),h=t==c?new Map:a.fastLookupPossible?SQt(e):DQt(e),E,C=!1,S=!1,P=new Map(Array.from(p.entries()).map(([R,N])=>[R,N[0]])),I=new Map;do{let R=kQt(t,e,r,h,P,p,s,I,a);R.isGraphChanged&&(S=!0),R.anotherRoundNeeded&&(C=!0),E=!1;for(let[N,U]of p)U.length>1&&!c.dependencies.has(N)&&(P.delete(N),U.shift(),P.set(N,U[0]),E=!0)}while(E);for(let R of c.dependencies.values())if(!c.peerNames.has(R.name)&&!r.has(R.locator)){r.add(R.locator);let N=DY(t,[...e,R],r,I,a);N.isGraphChanged&&(S=!0),N.anotherRoundNeeded&&(C=!0),r.delete(R.locator)}return{anotherRoundNeeded:C,isGraphChanged:S}},PQt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},xQt=(t,e,r,s,a,n,c,f,{outputReason:p,fastLookupPossible:h})=>{let E,C=null,S=new Set;p&&(E=`${Array.from(e).map(N=>Io(N)).join("\u2192")}`);let P=r[r.length-1],R=!(s.ident===P.ident);if(p&&!R&&(C="- self-reference"),R&&(R=s.dependencyKind!==1,p&&!R&&(C="- workspace")),R&&s.dependencyKind===2&&(R=!PQt(s),p&&!R&&(C="- external soft link with unhoisted dependencies")),R&&(R=!t.peerNames.has(s.name),p&&!R&&(C=`- cannot shadow peer: ${Io(t.originalDependencies.get(s.name).locator)} at ${E}`)),R){let N=!1,U=a.get(s.name);if(N=!U||U.ident===s.ident,p&&!N&&(C=`- filled by: ${Io(U.locator)} at ${E}`),N)for(let W=r.length-1;W>=1;W--){let ie=r[W].dependencies.get(s.name);if(ie&&ie.ident!==s.ident){N=!1;let Ae=f.get(P);Ae||(Ae=new Set,f.set(P,Ae)),Ae.add(s.name),p&&(C=`- filled by ${Io(ie.locator)} at ${r.slice(0,W).map(ce=>Io(ce.locator)).join("\u2192")}`);break}}R=N}if(R&&(R=n.get(s.name)===s.ident,p&&!R&&(C=`- filled by: ${Io(c.get(s.name)[0])} at ${E}`)),R){let N=!0,U=new Set(s.peerNames);for(let W=r.length-1;W>=1;W--){let te=r[W];for(let ie of U){if(te.peerNames.has(ie)&&te.originalDependencies.has(ie))continue;let Ae=te.dependencies.get(ie);Ae&&t.dependencies.get(ie)!==Ae&&(W===r.length-1?S.add(Ae):(S=null,N=!1,p&&(C=`- peer dependency ${Io(Ae.locator)} from parent ${Io(te.locator)} was not hoisted to ${E}`))),U.delete(ie)}if(!N)break}R=N}if(R&&!h)for(let N of s.hoistedDependencies.values()){let U=a.get(N.name)||t.dependencies.get(N.name);if(!U||N.ident!==U.ident){R=!1,p&&(C=`- previously hoisted dependency mismatch, needed: ${Io(N.locator)}, available: ${Io(U?.locator)}`);break}}return S!==null&&S.size>0?{isHoistable:2,dependsOn:S,reason:C}:{isHoistable:R?0:1,reason:C}},nN=t=>`${t.name}@${t.locator}`,kQt=(t,e,r,s,a,n,c,f,p)=>{let h=e[e.length-1],E=new Set,C=!1,S=!1,P=(U,W,te,ie,Ae)=>{if(E.has(ie))return;let ce=[...W,nN(ie)],me=[...te,nN(ie)],pe=new Map,Be=new Map;for(let fe of vY(ie)){let se=xQt(h,r,[h,...U,ie],fe,s,a,n,f,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(Be.set(fe,se),se.isHoistable===2)for(let X of se.dependsOn){let De=pe.get(X.name)||new Set;De.add(fe.name),pe.set(X.name,De)}}let Ce=new Set,g=(fe,se,X)=>{if(!Ce.has(fe)){Ce.add(fe),Be.set(fe,{isHoistable:1,reason:X});for(let De of pe.get(fe.name)||[])g(ie.dependencies.get(De),se,p.debugLevel>=2?`- peer dependency ${Io(fe.locator)} from parent ${Io(ie.locator)} was not hoisted`:"")}};for(let[fe,se]of Be)se.isHoistable===1&&g(fe,se,se.reason);let we=!1;for(let fe of Be.keys())if(!Ce.has(fe)){S=!0;let se=c.get(ie);se&&se.has(fe.name)&&(C=!0),we=!0,ie.dependencies.delete(fe.name),ie.hoistedDependencies.set(fe.name,fe),ie.reasons.delete(fe.name);let X=h.dependencies.get(fe.name);if(p.debugLevel>=2){let De=Array.from(W).concat([ie.locator]).map(dt=>Io(dt)).join("\u2192"),Re=h.hoistedFrom.get(fe.name);Re||(Re=[],h.hoistedFrom.set(fe.name,Re)),Re.push(De),ie.hoistedTo.set(fe.name,Array.from(e).map(dt=>Io(dt.locator)).join("\u2192"))}if(!X)h.ident!==fe.ident&&(h.dependencies.set(fe.name,fe),Ae.add(fe));else for(let De of fe.references)X.references.add(De)}if(ie.dependencyKind===2&&we&&(C=!0),p.check){let fe=KPe(t);if(fe)throw new Error(`${fe}, after hoisting dependencies of ${[h,...U,ie].map(se=>Io(se.locator)).join("\u2192")}: -${MD(t)}`)}let ye=vY(ie);for(let fe of ye)if(Ce.has(fe)){let se=Be.get(fe);if((a.get(fe.name)===fe.ident||!ie.reasons.has(fe.name))&&se.isHoistable!==0&&ie.reasons.set(fe.name,se.reason),!fe.isHoistBorder&&me.indexOf(nN(fe))<0){E.add(ie);let De=YPe(ie,fe);P([...U,ie],ce,me,De,R),E.delete(ie)}}},I,R=new Set(vY(h)),N=Array.from(e).map(U=>nN(U));do{I=R,R=new Set;for(let U of I){if(U.locator===h.locator||U.isHoistBorder)continue;let W=YPe(h,U);P([],Array.from(r),N,W,R)}}while(R.size>0);return{anotherRoundNeeded:C,isGraphChanged:S}},KPe=t=>{let e=[],r=new Set,s=new Set,a=(n,c,f)=>{if(r.has(n)||(r.add(n),s.has(n)))return;let p=new Map(c);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let E=p.get(h.name),C=()=>`${Array.from(s).concat([n]).map(S=>Io(S.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let S=c.get(h.name);(S!==E||!S||S.ident!==h.ident)&&e.push(`${C()} - broken peer promise: expected ${h.ident} but found ${S&&S.ident}`)}else{let S=f.hoistedFrom.get(n.name),P=n.hoistedTo.get(h.name),I=`${S?` hoisted from ${S.join(", ")}`:""}`,R=`${P?` hoisted to ${P}`:""}`,N=`${C()}${I}`;E?E.ident!==h.ident&&e.push(`${N} - broken require promise for ${h.name}${R}: expected ${h.ident}, but found: ${E.ident}`):e.push(`${N} - broken require promise: no required dependency ${h.name}${R} found`)}}s.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);s.delete(n)};return a(t,t.dependencies,t),e.join(` -`)},QQt=(t,e)=>{let{identName:r,name:s,reference:a,peerNames:n}=t,c={name:s,references:new Set([a]),locator:SY(r,a),ident:WPe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},f=new Map([[t,c]]),p=(h,E)=>{let C=f.get(h),S=!!C;if(!C){let{name:P,identName:I,reference:R,peerNames:N,hoistPriority:U,dependencyKind:W}=h,te=e.hoistingLimits.get(E.locator);C={name:P,references:new Set([R]),locator:SY(I,R),ident:WPe(I,R),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(N),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(P):!1,hoistPriority:U||0,dependencyKind:W||0,hoistedFrom:new Map,hoistedTo:new Map},f.set(h,C)}if(E.dependencies.set(h.name,C),E.originalDependencies.set(h.name,C),S){let P=new Set,I=R=>{if(!P.has(R)){P.add(R),R.decoupled=!1;for(let N of R.dependencies.values())R.peerNames.has(N.name)||I(N)}};I(C)}else for(let P of h.dependencies)p(P,C)};for(let h of t.dependencies)p(h,c);return c},bY=t=>t.substring(0,t.indexOf("@",1)),TQt=t=>{let e={name:t.name,identName:bY(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),s=(a,n,c)=>{let f=r.has(a),p;if(n===a)p=c;else{let{name:h,references:E,locator:C}=a;p={name:h,identName:bY(C),references:E,dependencies:new Set}}if(c.dependencies.add(p),!f){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||s(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())s(a,t,e);return e},RQt=t=>{let e=new Map,r=new Set([t]),s=c=>`${c.name}@${c.ident}`,a=c=>{let f=s(c),p=e.get(f);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(f,p)),p},n=(c,f)=>{let p=!!r.has(f);if(a(f).dependents.add(c.ident),!p){r.add(f);for(let E of f.dependencies.values()){let C=a(E);C.hoistPriority=Math.max(C.hoistPriority,E.hoistPriority),f.peerNames.has(E.name)?C.peerDependents.add(f.ident):n(f,E)}}};for(let c of t.dependencies.values())t.peerNames.has(c.name)||n(t,c);return e},Io=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let s=t.substring(e+1);if(s==="workspace:.")return".";if(s){let a=(s.indexOf("#")>0?s.split("#")[1]:s).replace("npm:","");return s.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`};var MD=t=>{let e=0,r=(a,n,c="")=>{if(e>5e4||n.has(a))return"";e++;let f=Array.from(a.dependencies.values()).sort((h,E)=>h.name===E.name?0:h.name>E.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(S!==E.name?`a:${E.name}:`:"")+Io(E.locator)+(C?` ${C}`:"")} -`,p+=r(E,n,`${c}${h5e4?` -Tree is too large, part of the tree has been dunped -`:"")};var _D=(s=>(s.WORKSPACES="workspaces",s.DEPENDENCIES="dependencies",s.NONE="none",s))(_D||{}),JPe="node_modules",tg="$wsroot$";var UD=(t,e)=>{let{packageTree:r,hoistingLimits:s,errors:a,preserveSymlinksRequired:n}=NQt(t,e),c=null;if(a.length===0){let f=VPe(r,{hoistingLimits:s});c=LQt(t,f,e)}return{tree:c,errors:a,preserveSymlinksRequired:n}},gA=t=>`${t.name}@${t.reference}`,xY=t=>{let e=new Map;for(let[r,s]of t.entries())if(!s.dirList){let a=e.get(s.locator);a||(a={target:s.target,linkType:s.linkType,locations:[],aliases:s.aliases},e.set(s.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((s,a)=>{let n=s.split(K.delimiter).length,c=a.split(K.delimiter).length;return a===s?0:n!==c?c-n:a>s?1:-1});return e},zPe=(t,e)=>{let r=q.isVirtualLocator(t)?q.devirtualizeLocator(t):t,s=q.isVirtualLocator(e)?q.devirtualizeLocator(e):e;return q.areLocatorsEqual(r,s)},PY=(t,e,r,s)=>{if(t.linkType!=="SOFT")return!1;let a=ue.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return K.contains(s,a)===null},FQt=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let s=ue.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},c=t.getDependencyTreeRoots(),f=new Map,p=new Set,h=(S,P)=>{let I=gA(S);if(p.has(I))return;p.add(I);let R=t.getPackageInformation(S);if(R){let N=P?gA(P):"";if(gA(S)!==N&&R.linkType==="SOFT"&&!S.reference.startsWith("link:")&&!PY(R,S,t,s)){let U=ZPe(R,S,t);(!f.get(U)||S.reference.startsWith("workspace:"))&&f.set(U,S)}for(let[U,W]of R.packageDependencies)W!==null&&(R.packagePeers.has(U)||h(t.getLocator(U,W),S))}};for(let S of c)h(S,null);let E=s.split(K.sep);for(let S of f.values()){let P=t.getPackageInformation(S),R=ue.toPortablePath(P.packageLocation.slice(0,-1)).split(K.sep).slice(E.length),N=n;for(let U of R){let W=N.children.get(U);W||(W={children:new Map},N.children.set(U,W)),N=W}N.workspaceLocator=S}let C=(S,P)=>{if(S.workspaceLocator){let I=gA(P),R=a.get(I);R||(R=new Set,a.set(I,R)),R.add(S.workspaceLocator)}for(let I of S.children.values())C(I,S.workspaceLocator||P)};for(let S of n.children.values())C(S,n.workspaceLocator);return a},NQt=(t,e)=>{let r=[],s=!1,a=new Map,n=FQt(t),c=t.getPackageInformation(t.topLevel);if(c===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let f=t.findPackageLocator(c.packageLocation);if(f===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=ue.toPortablePath(c.packageLocation.slice(0,-1)),h={name:f.name,identName:f.name,reference:f.reference,peerNames:c.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,C=(P,I)=>`${gA(I)}:${P}`,S=(P,I,R,N,U,W,te,ie)=>{let Ae=C(P,R),ce=E.get(Ae),me=!!ce;!me&&R.name===f.name&&R.reference===f.reference&&(ce=h,E.set(Ae,h));let pe=PY(I,R,t,p);if(!ce){let fe=0;pe?fe=2:I.linkType==="SOFT"&&R.name.endsWith(tg)&&(fe=1),ce={name:P,identName:R.name,reference:R.reference,dependencies:new Set,peerNames:fe===1?new Set:I.packagePeers,dependencyKind:fe},E.set(Ae,ce)}let Be;if(pe?Be=2:U.linkType==="SOFT"?Be=1:Be=0,ce.hoistPriority=Math.max(ce.hoistPriority||0,Be),ie&&!pe){let fe=gA({name:N.identName,reference:N.reference}),se=a.get(fe)||new Set;a.set(fe,se),se.add(ce.name)}let Ce=new Map(I.packageDependencies);if(e.project){let fe=e.project.workspacesByCwd.get(ue.toPortablePath(I.packageLocation.slice(0,-1)));if(fe){let se=new Set([...Array.from(fe.manifest.peerDependencies.values(),X=>q.stringifyIdent(X)),...Array.from(fe.manifest.peerDependenciesMeta.keys())]);for(let X of se)Ce.has(X)||(Ce.set(X,W.get(X)||null),ce.peerNames.add(X))}}let g=gA({name:R.name.replace(tg,""),reference:R.reference}),we=n.get(g);if(we)for(let fe of we)Ce.set(`${fe.name}${tg}`,fe.reference);(I!==U||I.linkType!=="SOFT"||!pe&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&N.dependencies.add(ce);let ye=R!==f&&I.linkType==="SOFT"&&!R.name.endsWith(tg)&&!pe;if(!me&&!ye){let fe=new Map;for(let[se,X]of Ce)if(X!==null){let De=t.getLocator(se,X),Re=t.getLocator(se.replace(tg,""),X),dt=t.getPackageInformation(Re);if(dt===null)throw new Error("Assertion failed: Expected the package to have been registered");let j=PY(dt,De,t,p);if(e.validateExternalSoftLinks&&e.project&&j){dt.packageDependencies.size>0&&(s=!0);for(let[Ye,ke]of dt.packageDependencies)if(ke!==null){let it=q.parseLocator(Array.isArray(ke)?`${ke[0]}@${ke[1]}`:`${Ye}@${ke}`);if(gA(it)!==gA(De)){let _e=Ce.get(Ye);if(_e){let x=q.parseLocator(Array.isArray(_e)?`${_e[0]}@${_e[1]}`:`${Ye}@${_e}`);zPe(x,it)||r.push({messageName:71,text:`Cannot link ${q.prettyIdent(e.project.configuration,q.parseIdent(De.name))} into ${q.prettyLocator(e.project.configuration,q.parseLocator(`${R.name}@${R.reference}`))} dependency ${q.prettyLocator(e.project.configuration,it)} conflicts with parent dependency ${q.prettyLocator(e.project.configuration,x)}`})}else{let x=fe.get(Ye);if(x){let w=x.target,b=q.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${Ye}@${w}`);zPe(b,it)||r.push({messageName:71,text:`Cannot link ${q.prettyIdent(e.project.configuration,q.parseIdent(De.name))} into ${q.prettyLocator(e.project.configuration,q.parseLocator(`${R.name}@${R.reference}`))} dependency ${q.prettyLocator(e.project.configuration,it)} conflicts with dependency ${q.prettyLocator(e.project.configuration,b)} from sibling portal ${q.prettyIdent(e.project.configuration,q.parseIdent(x.portal.name))}`})}else fe.set(Ye,{target:it.reference,portal:De})}}}}let rt=e.hoistingLimitsByCwd?.get(te),Fe=j?te:K.relative(p,ue.toPortablePath(dt.packageLocation))||vt.dot,Ne=e.hoistingLimitsByCwd?.get(Fe);S(se,dt,De,ce,I,Ce,Fe,rt==="dependencies"||Ne==="dependencies"||Ne==="workspaces")}}};return S(f.name,c,f,h,c,c.packageDependencies,vt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:s}};function ZPe(t,e,r){let s=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return ue.toPortablePath(s||t.packageLocation)}function OQt(t,e,r){let s=e.getLocator(t.name.replace(tg,""),t.reference),a=e.getPackageInformation(s);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:ue.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:ZPe(a,t,e)}}var LQt=(t,e,r)=>{let s=new Map,a=(E,C,S)=>{let{linkType:P,target:I}=OQt(E,t,r);return{locator:gA(E),nodePath:C,target:I,linkType:P,aliases:S}},n=E=>{let[C,S]=E.split("/");return S?{scope:C,name:S}:{scope:null,name:C}},c=new Set,f=(E,C,S)=>{if(c.has(E))return;c.add(E);let P=Array.from(E.references).sort().join("#");for(let I of E.dependencies){let R=Array.from(I.references).sort().join("#");if(I.identName===E.identName.replace(tg,"")&&R===P)continue;let N=Array.from(I.references).sort(),U={name:I.identName,reference:N[0]},{name:W,scope:te}=n(I.name),ie=te?[te,W]:[W],Ae=K.join(C,JPe),ce=K.join(Ae,...ie),me=`${S}/${U.name}`,pe=a(U,S,N.slice(1)),Be=!1;if(pe.linkType==="SOFT"&&r.project){let Ce=r.project.workspacesByCwd.get(pe.target.slice(0,-1));Be=!!(Ce&&!Ce.manifest.name)}if(!I.name.endsWith(tg)&&!Be){let Ce=s.get(ce);if(Ce){if(Ce.dirList)throw new Error(`Assertion failed: ${ce} cannot merge dir node with leaf node`);{let ye=q.parseLocator(Ce.locator),fe=q.parseLocator(pe.locator);if(Ce.linkType!==pe.linkType)throw new Error(`Assertion failed: ${ce} cannot merge nodes with different link types ${Ce.nodePath}/${q.stringifyLocator(ye)} and ${S}/${q.stringifyLocator(fe)}`);if(ye.identHash!==fe.identHash)throw new Error(`Assertion failed: ${ce} cannot merge nodes with different idents ${Ce.nodePath}/${q.stringifyLocator(ye)} and ${S}/s${q.stringifyLocator(fe)}`);pe.aliases=[...pe.aliases,...Ce.aliases,q.parseLocator(Ce.locator).reference]}}s.set(ce,pe);let g=ce.split("/"),we=g.indexOf(JPe);for(let ye=g.length-1;we>=0&&ye>we;ye--){let fe=ue.toPortablePath(g.slice(0,ye).join(K.sep)),se=g[ye],X=s.get(fe);if(!X)s.set(fe,{dirList:new Set([se])});else if(X.dirList){if(X.dirList.has(se))break;X.dirList.add(se)}}}f(I,pe.linkType==="SOFT"?pe.target:ce,me)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return s.set(h,p),f(e,h,""),s};Ve();Ve();bt();bt();rA();Bc();var KY={};Vt(KY,{PnpInstaller:()=>jm,PnpLinker:()=>ig,UnplugCommand:()=>Sw,default:()=>pTt,getPnpPath:()=>sg,jsInstallUtils:()=>mA,pnpUtils:()=>ZD,quotePathIfNeeded:()=>Nxe});bt();var Fxe=Ie("url");Ve();Ve();bt();bt();var XPe={DEFAULT:{collapsed:!1,next:{"*":"DEFAULT"}},TOP_LEVEL:{collapsed:!1,next:{fallbackExclusionList:"FALLBACK_EXCLUSION_LIST",packageRegistryData:"PACKAGE_REGISTRY_DATA","*":"DEFAULT"}},FALLBACK_EXCLUSION_LIST:{collapsed:!1,next:{"*":"FALLBACK_EXCLUSION_ENTRIES"}},FALLBACK_EXCLUSION_ENTRIES:{collapsed:!0,next:{"*":"FALLBACK_EXCLUSION_DATA"}},FALLBACK_EXCLUSION_DATA:{collapsed:!0,next:{"*":"DEFAULT"}},PACKAGE_REGISTRY_DATA:{collapsed:!1,next:{"*":"PACKAGE_REGISTRY_ENTRIES"}},PACKAGE_REGISTRY_ENTRIES:{collapsed:!0,next:{"*":"PACKAGE_STORE_DATA"}},PACKAGE_STORE_DATA:{collapsed:!1,next:{"*":"PACKAGE_STORE_ENTRIES"}},PACKAGE_STORE_ENTRIES:{collapsed:!0,next:{"*":"PACKAGE_INFORMATION_DATA"}},PACKAGE_INFORMATION_DATA:{collapsed:!1,next:{packageDependencies:"PACKAGE_DEPENDENCIES","*":"DEFAULT"}},PACKAGE_DEPENDENCIES:{collapsed:!1,next:{"*":"PACKAGE_DEPENDENCY"}},PACKAGE_DEPENDENCY:{collapsed:!0,next:{"*":"DEFAULT"}}};function MQt(t,e,r){let s="";s+="[";for(let a=0,n=t.length;a"u"||(f!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=iN(p,h,e,r).replace(/^ +/g,""),f+=1)}return a+="}",a}function HQt(t,e,r){let s=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ -`;let c=0;for(let f=0,p=s.length;f"u"||(c!==0&&(n+=",",n+=` -`),n+=a,n+=JSON.stringify(h),n+=": ",n+=iN(h,E,e,a).replace(/^ +/g,""),c+=1)}return c!==0&&(n+=` -`),n+=r,n+="}",n}function iN(t,e,r,s){let{next:a}=XPe[r],n=a[t]||a["*"];return $Pe(e,n,s)}function $Pe(t,e,r){let{collapsed:s}=XPe[e];return Array.isArray(t)?s?MQt(t,e,r):_Qt(t,e,r):typeof t=="object"&&t!==null?s?UQt(t,e,r):HQt(t,e,r):JSON.stringify(t)}function exe(t){return $Pe(t,"TOP_LEVEL","")}function HD(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let s=[];for(let n of e)s.push(r.map(c=>n(c)));let a=r.map((n,c)=>c);return a.sort((n,c)=>{for(let f of s){let p=f[n]f[c]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function jQt(t){let e=new Map,r=HD(t.fallbackExclusionList||[],[({name:s,reference:a})=>s,({name:s,reference:a})=>a]);for(let{name:s,reference:a}of r){let n=e.get(s);typeof n>"u"&&e.set(s,n=new Set),n.add(a)}return Array.from(e).map(([s,a])=>[s,Array.from(a)])}function qQt(t){return HD(t.fallbackPool||[],([e])=>e)}function GQt(t){let e=[],r=t.dependencyTreeRoots.find(s=>t.packageRegistry.get(s.name)?.get(s.reference)?.packageLocation==="./");for(let[s,a]of HD(t.packageRegistry,([n])=>n===null?"0":`1${n}`)){if(s===null)continue;let n=[];e.push([s,n]);for(let[c,{packageLocation:f,packageDependencies:p,packagePeers:h,linkType:E,discardFromLookup:C}]of HD(a,([S])=>S===null?"0":`1${S}`)){if(c===null)continue;let S=[];s!==null&&c!==null&&!p.has(s)&&S.push([s,c]);for(let[U,W]of p)S.push([U,W]);let P=HD(S,([U])=>U),I=h&&h.size>0?Array.from(h):void 0,N={packageLocation:f,packageDependencies:P,packagePeers:I,linkType:E,discardFromLookup:C||void 0};n.push([c,N]),r&&s===r.name&&c===r.reference&&e.unshift([null,[[null,N]]])}}return e}function jD(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,pnpZipBackend:t.pnpZipBackend,fallbackExclusionList:jQt(t),fallbackPool:qQt(t),packageRegistryData:GQt(t)}}var nxe=et(rxe());function ixe(t,e){return[t?`${t} -`:"",`/* eslint-disable */ -`,`// @ts-nocheck -`,`"use strict"; -`,` -`,e,` -`,(0,nxe.default)()].join("")}function WQt(t){return JSON.stringify(t,null,2)}function YQt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ -`)}'`}function VQt(t){return[`const RAW_RUNTIME_STATE = -`,`${YQt(exe(t))}; - -`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { -`,` return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); -`,`} -`].join("")}function KQt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { -`,` const fs = require('fs'); -`,` const path = require('path'); -`,` const pnpDataFilepath = path.resolve(__dirname, ${JSON.stringify(Er.pnpData)}); -`,` return hydrateRuntimeState(JSON.parse(fs.readFileSync(pnpDataFilepath, 'utf8')), {basePath: basePath || __dirname}); -`,`} -`].join("")}function sxe(t){let e=jD(t),r=VQt(e);return ixe(t.shebang,r)}function oxe(t){let e=jD(t),r=KQt(),s=ixe(t.shebang,r);return{dataFile:WQt(e),loaderFile:s}}bt();function QY(t,{basePath:e}){let r=ue.toPortablePath(e),s=K.resolve(r),a=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,n=new Map,c=new Map(t.packageRegistryData.map(([C,S])=>[C,new Map(S.map(([P,I])=>{if(C===null!=(P===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let R=I.discardFromLookup??!1,N={name:C,reference:P},U=n.get(I.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&R,R||(U.locator=N)):n.set(I.packageLocation,{locator:N,discardFromLookup:R});let W=null;return[P,{packageDependencies:new Map(I.packageDependencies),packagePeers:new Set(I.packagePeers),linkType:I.linkType,discardFromLookup:R,get packageLocation(){return W||(W=K.join(s,I.packageLocation))}}]}))])),f=new Map(t.fallbackExclusionList.map(([C,S])=>[C,new Set(S)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:f,pnpZipBackend:t.pnpZipBackend,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:c}}bt();bt();var ah=Ie("module"),Hm=Ie("url"),HY=Ie("util");var ra=Ie("url");var uxe=et(Ie("assert"));var TY=Array.isArray,qD=JSON.stringify,GD=Object.getOwnPropertyNames,Um=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),RY=(t,e)=>RegExp.prototype.exec.call(t,e),FY=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),rg=(t,...e)=>String.prototype.endsWith.apply(t,e),NY=(t,...e)=>String.prototype.includes.apply(t,e),OY=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),WD=(t,...e)=>String.prototype.indexOf.apply(t,e),axe=(t,...e)=>String.prototype.replace.apply(t,e),ng=(t,...e)=>String.prototype.slice.apply(t,e),dA=(t,...e)=>String.prototype.startsWith.apply(t,e),lxe=Map,cxe=JSON.parse;function YD(t,e,r){return class extends r{constructor(...s){super(e(...s)),this.code=t,this.name=`${r.name} [${t}]`}}}var fxe=YD("ERR_PACKAGE_IMPORT_NOT_DEFINED",(t,e,r)=>`Package import specifier "${t}" is not defined${e?` in package ${e}package.json`:""} imported from ${r}`,TypeError),LY=YD("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),Axe=YD("ERR_INVALID_PACKAGE_TARGET",(t,e,r,s=!1,a=void 0)=>{let n=typeof r=="string"&&!s&&r.length&&!dA(r,"./");return e==="."?((0,uxe.default)(s===!1),`Invalid "exports" main target ${qD(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${s?"imports":"exports"}" target ${qD(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),VD=YD("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),pxe=YD("ERR_PACKAGE_PATH_NOT_EXPORTED",(t,e,r=void 0)=>e==="."?`No "exports" main defined in ${t}package.json${r?` imported from ${r}`:""}`:`Package subpath '${e}' is not defined by "exports" in ${t}package.json${r?` imported from ${r}`:""}`,Error);var oN=Ie("url");function hxe(t,e){let r=Object.create(null);for(let s=0;se):t+e}KD(r,t,s,c,a)}RY(dxe,ng(t,2))!==null&&KD(r,t,s,c,a);let p=new URL(t,s),h=p.pathname,E=new URL(".",s).pathname;if(dA(h,E)||KD(r,t,s,c,a),e==="")return p;if(RY(dxe,e)!==null){let C=n?axe(r,"*",()=>e):r+e;ZQt(C,s,c,a)}return n?new URL(FY(mxe,p.href,()=>e)):new URL(e,p)}function $Qt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function vw(t,e,r,s,a,n,c,f){if(typeof e=="string")return XQt(e,r,s,t,a,n,c,f);if(TY(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:s===-1||t.length>e.length?-1:e.length>t.length?1:0}function eTt(t,e,r){if(typeof t=="string"||TY(t))return!0;if(typeof t!="object"||t===null)return!1;let s=GD(t),a=!1,n=0;for(let c=0;c=h.length&&rg(e,C)&&Exe(n,h)===1&&OY(h,"*")===E&&(n=h,c=ng(e,E,e.length-C.length))}}if(n){let p=r[n],h=vw(t,p,c,n,s,!0,!1,a);return h==null&&MY(e,t,s),h}MY(e,t,s)}function Cxe({name:t,base:e,conditions:r,readFileSyncFn:s}){if(t==="#"||dA(t,"#/")||rg(t,"/")){let c="is not a valid internal imports specifier name";throw new LY(t,c,(0,ra.fileURLToPath)(e))}let a,n=gxe(e,s);if(n.exists){a=(0,ra.pathToFileURL)(n.pjsonPath);let c=n.imports;if(c)if(Um(c,t)&&!NY(t,"*")){let f=vw(a,c[t],"",t,e,!1,!0,r);if(f!=null)return f}else{let f="",p,h=GD(c);for(let E=0;E=C.length&&rg(t,P)&&Exe(f,C)===1&&OY(C,"*")===S&&(f=C,p=ng(t,S,t.length-P.length))}}if(f){let E=c[f],C=vw(a,E,p,f,e,!0,!0,r);if(C!=null)return C}}}zQt(t,a,e)}bt();var rTt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function ms(t,e,r={},s){s??=rTt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:s},pnpCode:{...a,value:t},data:{...a,value:r}})}function cf(t){return ue.normalize(ue.fromPortablePath(t))}var Sxe=et(Bxe());function Dxe(t){return nTt(),UY[t]}var UY;function nTt(){UY||(UY={"--conditions":[],...vxe(iTt()),...vxe(process.execArgv)})}function vxe(t){return(0,Sxe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function iTt(){let t=[],e=sTt(process.env.NODE_OPTIONS||"",t);return t.length,e}function sTt(t,e){let r=[],s=!1,a=!0;for(let n=0;nparseInt(t,10)),bxe=yl>19||yl===19&&oh>=2||yl===18&&oh>=13,pdr=yl===20&&oh<6||yl===19&&oh>=3,hdr=yl>19||yl===19&&oh>=6,gdr=yl>=21||yl===20&&oh>=10||yl===18&&oh>=19,ddr=yl>=21||yl===20&&oh>=10||yl===18&&oh>=20,mdr=yl>=22;function Pxe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>ue.fromPortablePath(Ao.resolveVirtual(ue.toPortablePath(e)))),bxe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function jY(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,s=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,c=/\/$/,f=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Fe of["react-scripts","gatsby"]){let Ne=t.packageRegistry.get(Fe);if(Ne)for(let Pe of Ne.keys()){if(Pe===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Fe,reference:Pe})}}let{ignorePattern:C,packageRegistry:S,packageLocatorsByLocations:P}=t;function I(Fe,Ne){return{fn:Fe,args:Ne,error:null,result:null}}function R(Fe){let Ne=process.stderr?.hasColors?.()??process.stdout.isTTY,Pe=(it,_e)=>`\x1B[${it}m${_e}\x1B[0m`,Ye=Fe.error;console.error(Ye?Pe("31;1",`\u2716 ${Fe.error?.message.replace(/\n.*/s,"")}`):Pe("33;1","\u203C Resolution")),Fe.args.length>0&&console.error();for(let it of Fe.args)console.error(` ${Pe("37;1","In \u2190")} ${(0,HY.inspect)(it,{colors:Ne,compact:!0})}`);Fe.result&&(console.error(),console.error(` ${Pe("37;1","Out \u2192")} ${(0,HY.inspect)(Fe.result,{colors:Ne,compact:!0})}`));let ke=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(ke.length>0){console.error();for(let it of ke)console.error(` ${Pe("38;5;244",it)}`)}console.error()}function N(Fe,Ne){if(e.allowDebug===!1)return Ne;if(Number.isFinite(s)){if(s>=2)return(...Pe)=>{let Ye=I(Fe,Pe);try{return Ye.result=Ne(...Pe)}catch(ke){throw Ye.error=ke}finally{R(Ye)}};if(s>=1)return(...Pe)=>{try{return Ne(...Pe)}catch(Ye){let ke=I(Fe,Pe);throw ke.error=Ye,R(ke),Ye}}}return Ne}function U(Fe){let Ne=g(Fe);if(!Ne)throw ms("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return Ne}function W(Fe){if(Fe.name===null)return!0;for(let Ne of t.dependencyTreeRoots)if(Ne.name===Fe.name&&Ne.reference===Fe.reference)return!0;return!1}let te=new Set(["node","require",...Dxe("--conditions")]);function ie(Fe,Ne=te,Pe){let Ye=fe(K.join(Fe,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(Ye===null)throw ms("INTERNAL",`The locator that owns the "${Fe}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ke}=U(Ye),it=K.join(ke,Er.manifest);if(!e.fakeFs.existsSync(it))return null;let _e=JSON.parse(e.fakeFs.readFileSync(it,"utf8"));if(_e.exports==null)return null;let x=K.contains(ke,Fe);if(x===null)throw ms("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");x!=="."&&!f.test(x)&&(x=`./${x}`);try{let w=Ixe({packageJSONUrl:(0,Hm.pathToFileURL)(ue.fromPortablePath(it)),packageSubpath:x,exports:_e.exports,base:Pe?(0,Hm.pathToFileURL)(ue.fromPortablePath(Pe)):null,conditions:Ne});return ue.toPortablePath((0,Hm.fileURLToPath)(w))}catch(w){throw ms("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:cf(Fe),locator:Ye,pkgJson:_e,subpath:cf(x),conditions:Ne},w.code)}}function Ae(Fe,Ne,{extensions:Pe}){let Ye;try{Ne.push(Fe),Ye=e.fakeFs.statSync(Fe)}catch{}if(Ye&&!Ye.isDirectory())return e.fakeFs.realpathSync(Fe);if(Ye&&Ye.isDirectory()){let ke;try{ke=JSON.parse(e.fakeFs.readFileSync(K.join(Fe,Er.manifest),"utf8"))}catch{}let it;if(ke&&ke.main&&(it=K.resolve(Fe,ke.main)),it&&it!==Fe){let _e=Ae(it,Ne,{extensions:Pe});if(_e!==null)return _e}}for(let ke=0,it=Pe.length;ke{let x=JSON.stringify(_e.name);if(Ye.has(x))return;Ye.add(x);let w=we(_e);for(let b of w)if(U(b).packagePeers.has(Fe))ke(b);else{let F=Pe.get(b.name);typeof F>"u"&&Pe.set(b.name,F=new Set),F.add(b.reference)}};ke(Ne);let it=[];for(let _e of[...Pe.keys()].sort())for(let x of[...Pe.get(_e)].sort())it.push({name:_e,reference:x});return it}function fe(Fe,{resolveIgnored:Ne=!1,includeDiscardFromLookup:Pe=!1}={}){if(pe(Fe)&&!Ne)return null;let Ye=K.relative(t.basePath,Fe);Ye.match(n)||(Ye=`./${Ye}`),Ye.endsWith("/")||(Ye=`${Ye}/`);do{let ke=P.get(Ye);if(typeof ke>"u"||ke.discardFromLookup&&!Pe){Ye=Ye.substring(0,Ye.lastIndexOf("/",Ye.length-2)+1);continue}return ke.locator}while(Ye!=="");return null}function se(Fe){try{return e.fakeFs.readFileSync(ue.toPortablePath(Fe),"utf8")}catch(Ne){if(Ne.code==="ENOENT")return;throw Ne}}function X(Fe,Ne,{considerBuiltins:Pe=!0}={}){if(Fe.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Fe==="pnpapi")return ue.toPortablePath(e.pnpapiResolution);if(Pe&&(0,ah.isBuiltin)(Fe))return null;let Ye=cf(Fe),ke=Ne&&cf(Ne);if(Ne&&pe(Ne)&&(!K.isAbsolute(Fe)||fe(Fe)===null)){let x=me(Fe,Ne);if(x===!1)throw ms("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) - -Require request: "${Ye}" -Required by: ${ke} -`,{request:Ye,issuer:ke});return ue.toPortablePath(x)}let it,_e=Fe.match(a);if(_e){if(!Ne)throw ms("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:Ye,issuer:ke});let[,x,w]=_e,b=fe(Ne);if(!b){let Te=me(Fe,Ne);if(Te===!1)throw ms("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). - -Require path: "${Ye}" -Required by: ${ke} -`,{request:Ye,issuer:ke});return ue.toPortablePath(Te)}let F=U(b).packageDependencies.get(x),z=null;if(F==null&&b.name!==null){let Te=t.fallbackExclusionList.get(b.name);if(!Te||!Te.has(b.reference)){for(let It=0,qt=h.length;ItW(lt))?Z=ms("MISSING_PEER_DEPENDENCY",`${b.name} tried to access ${x} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==Ye?` (via "${Ye}")`:""} -Required by: ${b.name}@${b.reference} (via ${ke}) -${Te.map(lt=>`Ancestor breaking the chain: ${lt.name}@${lt.reference} -`).join("")} -`,{request:Ye,issuer:ke,issuerLocator:Object.assign({},b),dependencyName:x,brokenAncestors:Te}):Z=ms("MISSING_PEER_DEPENDENCY",`${b.name} tried to access ${x} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==Ye?` (via "${Ye}")`:""} -Required by: ${b.name}@${b.reference} (via ${ke}) - -${Te.map(lt=>`Ancestor breaking the chain: ${lt.name}@${lt.reference} -`).join("")} -`,{request:Ye,issuer:ke,issuerLocator:Object.assign({},b),dependencyName:x,brokenAncestors:Te})}else F===void 0&&(!Pe&&(0,ah.isBuiltin)(Fe)?W(b)?Z=ms("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==Ye?` (via "${Ye}")`:""} -Required by: ${ke} -`,{request:Ye,issuer:ke,dependencyName:x}):Z=ms("UNDECLARED_DEPENDENCY",`${b.name} tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in ${b.name}'s dependencies, this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==Ye?` (via "${Ye}")`:""} -Required by: ${ke} -`,{request:Ye,issuer:ke,issuerLocator:Object.assign({},b),dependencyName:x}):W(b)?Z=ms("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==Ye?` (via "${Ye}")`:""} -Required by: ${ke} -`,{request:Ye,issuer:ke,dependencyName:x}):Z=ms("UNDECLARED_DEPENDENCY",`${b.name} tried to access ${x}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==Ye?` (via "${Ye}")`:""} -Required by: ${b.name}@${b.reference} (via ${ke}) -`,{request:Ye,issuer:ke,issuerLocator:Object.assign({},b),dependencyName:x}));if(F==null){if(z===null||Z===null)throw Z||new Error("Assertion failed: Expected an error to have been set");F=z;let Te=Z.message.replace(/\n.*/g,"");Z.message=Te,!E.has(Te)&&s!==0&&(E.add(Te),process.emitWarning(Z))}let $=Array.isArray(F)?{name:F[0],reference:F[1]}:{name:x,reference:F},oe=U($);if(!oe.packageLocation)throw ms("MISSING_DEPENDENCY",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. - -Required package: ${$.name}@${$.reference}${$.name!==Ye?` (via "${Ye}")`:""} -Required by: ${b.name}@${b.reference} (via ${ke}) -`,{request:Ye,issuer:ke,dependencyLocator:Object.assign({},$)});let xe=oe.packageLocation;w?it=K.join(xe,w):it=xe}else if(K.isAbsolute(Fe))it=K.normalize(Fe);else{if(!Ne)throw ms("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:Ye,issuer:ke});let x=K.resolve(Ne);Ne.match(c)?it=K.normalize(K.join(x,Fe)):it=K.normalize(K.join(K.dirname(x),Fe))}return K.normalize(it)}function De(Fe,Ne,Pe=te,Ye){if(n.test(Fe))return Ne;let ke=ie(Ne,Pe,Ye);return ke?K.normalize(ke):Ne}function Re(Fe,{extensions:Ne=Object.keys(ah.Module._extensions)}={}){let Pe=[],Ye=Ae(Fe,Pe,{extensions:Ne});if(Ye)return K.normalize(Ye);{Pxe(Pe.map(_e=>ue.fromPortablePath(_e)));let ke=cf(Fe),it=fe(Fe);if(it){let{packageLocation:_e}=U(it),x=!0;try{e.fakeFs.accessSync(_e)}catch(w){if(w?.code==="ENOENT")x=!1;else{let b=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw ms("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${b}). - -Missing package: ${it.name}@${it.reference} -Expected package location: ${cf(_e)} -`,{unqualifiedPath:ke,extensions:Ne})}}if(!x){let w=_e.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw ms("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} - -Missing package: ${it.name}@${it.reference} -Expected package location: ${cf(_e)} -`,{unqualifiedPath:ke,extensions:Ne})}}throw ms("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. - -Source path: ${ke} -${Pe.map(_e=>`Not found: ${cf(_e)} -`).join("")}`,{unqualifiedPath:ke,extensions:Ne})}}function dt(Fe,Ne,Pe){if(!Ne)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let Ye=Cxe({name:Fe,base:(0,Hm.pathToFileURL)(ue.fromPortablePath(Ne)),conditions:Pe.conditions??te,readFileSyncFn:se});if(Ye instanceof URL)return Re(ue.toPortablePath((0,Hm.fileURLToPath)(Ye)),{extensions:Pe.extensions});if(Ye.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return j(Ye,Ne,Pe)}function j(Fe,Ne,Pe={}){try{if(Fe.startsWith("#"))return dt(Fe,Ne,Pe);let{considerBuiltins:Ye,extensions:ke,conditions:it}=Pe,_e=X(Fe,Ne,{considerBuiltins:Ye});if(Fe==="pnpapi")return _e;if(_e===null)return null;let x=()=>Ne!==null?pe(Ne):!1,w=(!Ye||!(0,ah.isBuiltin)(Fe))&&!x()?De(Fe,_e,it,Ne):_e;return Re(w,{extensions:ke})}catch(Ye){throw Object.hasOwn(Ye,"pnpCode")&&Object.assign(Ye.data,{request:cf(Fe),issuer:Ne&&cf(Ne)}),Ye}}function rt(Fe){let Ne=K.normalize(Fe),Pe=Ao.resolveVirtual(Ne);return Pe!==Ne?Pe:null}return{VERSIONS:Be,topLevel:Ce,getLocator:(Fe,Ne)=>Array.isArray(Ne)?{name:Ne[0],reference:Ne[1]}:{name:Fe,reference:Ne},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Fe=[];for(let[Ne,Pe]of S)for(let Ye of Pe.keys())Ne!==null&&Ye!==null&&Fe.push({name:Ne,reference:Ye});return Fe},getPackageInformation:Fe=>{let Ne=g(Fe);if(Ne===null)return null;let Pe=ue.fromPortablePath(Ne.packageLocation);return{...Ne,packageLocation:Pe}},findPackageLocator:Fe=>fe(ue.toPortablePath(Fe)),resolveToUnqualified:N("resolveToUnqualified",(Fe,Ne,Pe)=>{let Ye=Ne!==null?ue.toPortablePath(Ne):null,ke=X(ue.toPortablePath(Fe),Ye,Pe);return ke===null?null:ue.fromPortablePath(ke)}),resolveUnqualified:N("resolveUnqualified",(Fe,Ne)=>ue.fromPortablePath(Re(ue.toPortablePath(Fe),Ne))),resolveRequest:N("resolveRequest",(Fe,Ne,Pe)=>{let Ye=Ne!==null?ue.toPortablePath(Ne):null,ke=j(ue.toPortablePath(Fe),Ye,Pe);return ke===null?null:ue.fromPortablePath(ke)}),resolveVirtual:N("resolveVirtual",Fe=>{let Ne=rt(ue.toPortablePath(Fe));return Ne!==null?ue.fromPortablePath(Ne):null})}}bt();var xxe=(t,e,r)=>{let s=jD(t),a=QY(s,{basePath:e}),n=ue.join(e,Er.pnpCjs);return jY(a,{fakeFs:r,pnpapiResolution:n})};var GY=et(Qxe());Wt();var mA={};Vt(mA,{checkManifestCompatibility:()=>Txe,extractBuildRequest:()=>aN,getExtractHint:()=>WY,hasBindingGyp:()=>YY});Ve();bt();function Txe(t){return q.isPackageCompatible(t,ps.getArchitectureSet())}function aN(t,e,r,{configuration:s}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${q.prettyLocator(s,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`)}:r&&r.built===!1?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${q.prettyLocator(s,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!s.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${q.prettyLocator(s,t)} lists build scripts, but all build scripts have been disabled.`)}:Txe(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${q.prettyLocator(s,t)} The ${ps.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var aTt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function WY(t){return t.packageFs.getExtractHint({relevantExtensions:aTt})}function YY(t){let e=K.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var ZD={};Vt(ZD,{getUnpluggedPath:()=>zD});Ve();bt();function zD(t,{configuration:e}){return K.resolve(e.get("pnpUnpluggedFolder"),q.slugifyLocator(t))}var lTt=new Set([q.makeIdent(null,"open").identHash,q.makeIdent(null,"opn").identHash]),ig=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let s=sg(r.project).cjs;if(!le.existsSync(s))throw new nt(`The project in ${he.pretty(r.project.configuration,`${r.project.cwd}/package.json`,he.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=je.getFactoryWithDefault(this.pnpCache,s,()=>je.dynamicRequire(s,{cachingStrategy:je.CachingStrategy.FsTime})),n={name:q.stringifyIdent(e),reference:e.reference},c=a.getPackageInformation(n);if(!c)throw new nt(`Couldn't find ${q.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return ue.toPortablePath(c.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let s=sg(r.project).cjs;if(!le.existsSync(s))return null;let n=je.getFactoryWithDefault(this.pnpCache,s,()=>je.dynamicRequire(s,{cachingStrategy:je.CachingStrategy.FsTime})).findPackageLocator(ue.fromPortablePath(e));return n?q.makeLocator(q.parseIdent(n.name),n.reference):null}makeInstaller(e){return new jm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},jm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new je.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,s){let a=q.stringifyIdent(e),n=e.reference,c=!!this.opts.project.tryWorkspaceByLocator(e),f=q.isVirtualLocator(e),p=e.peerDependencies.size>0&&!f,h=!p&&!c,E=!p&&e.linkType!=="SOFT",C,S;if(h||E){let te=f?q.devirtualizeLocator(e):e;C=this.customData.store.get(te.locatorHash),typeof C>"u"&&(C=await cTt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,C)),C.manifest.type==="module"&&(this.isESMLoaderRequired=!0),S=this.opts.project.getDependencyMeta(te,e.version)}let P=h?aN(e,C,S,{configuration:this.opts.project.configuration}):null,I=E?await this.unplugPackageIfNeeded(e,C,r,S,s):r.packageFs;if(K.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let R=K.resolve(I.getRealPath(),r.prefixPath),N=VY(this.opts.project.cwd,R),U=new Map,W=new Set;if(f){for(let te of e.peerDependencies.values())U.set(q.stringifyIdent(te),null),W.add(q.stringifyIdent(te));if(!c){let te=q.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:VY(this.opts.project.cwd,Ao.resolveVirtual(R)),locator:te})}}return je.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:N,packageDependencies:U,packagePeers:W,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:R,buildRequest:P}}async attachInternalDependencies(e,r){let s=this.getPackageInformation(e);for(let[a,n]of r){let c=q.areIdentsEqual(a,n)?n.reference:[q.stringifyIdent(n),n.reference];s.packageDependencies.set(q.stringifyIdent(a),c)}}async attachExternalDependents(e,r){for(let s of r)this.getDiskInformation(s).packageDependencies.set(q.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=sg(this.opts.project);if(this.isEsmEnabled()||await le.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await le.removePromise(e.cjs),await le.removePromise(e.data),await le.removePromise(e.esmLoader),await le.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:C,location:S}of this.virtualTemplates.values())je.getMapWithDefault(this.packageRegistry,q.stringifyIdent(C)).set(C.reference,{packageLocation:S,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});let r=this.opts.project.configuration.get("pnpFallbackMode"),s=this.opts.project.workspaces.map(({anchoredLocator:C})=>({name:q.stringifyIdent(C),reference:C.reference})),a=r!=="none",n=[],c=new Map,f=je.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang"),E=this.opts.project.configuration.get("pnpZipBackend");if(r==="dependencies-only")for(let C of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(C)&&n.push({name:q.stringifyIdent(C),reference:C.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:s,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:c,ignorePattern:f,pnpZipBackend:E,packageRegistry:p,shebang:h}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=sg(this.opts.project),s=await this.locateNodeModules(e.ignorePattern);if(s.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of s)await le.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=sxe(e);await le.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await le.removePromise(r.data)}else{let{dataFile:n,loaderFile:c}=oxe(e);await le.changeFilePromise(r.cjs,c,{automaticNewlines:!0,mode:493}),await le.changeFilePromise(r.data,n,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await le.changeFilePromise(r.esmLoader,(0,GY.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await le.removePromise(a);else for(let n of await le.readdirPromise(a)){let c=K.resolve(a,n);this.unpluggedPaths.has(c)||await le.removePromise(c)}}async locateNodeModules(e){let r=[],s=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=K.join(a.cwd,"node_modules");if(s&&s.test(K.relative(this.opts.project.cwd,a.cwd))||!le.existsSync(n))continue;let c=await le.readdirPromise(n,{withFileTypes:!0}),f=c.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(f.length===c.length)r.push(n);else for(let p of f)r.push(K.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,s,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,s,n):s.packageFs}shouldBeUnplugged(e,r,s){return typeof s.unplugged<"u"?s.unplugged:lTt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(aN(e,r,s,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,s){let a=zD(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new Hf(a,{baseFs:r.packageFs,pathUtils:K}):(this.unpluggedPaths.add(a),s.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=K.join(a,r.prefixPath,".ready");await le.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await le.mkdirPromise(a,{recursive:!0}),await le.copyPromise(a,vt.dot,{baseFs:r.packageFs,overwrite:!1}),await le.writeFilePromise(n,""))})),new Sn(a))}getPackageInformation(e){let r=q.stringifyIdent(e),s=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${q.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(s);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${q.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=je.getMapWithDefault(this.packageRegistry,"@@disk"),s=VY(this.opts.project.cwd,e);return je.getFactoryWithDefault(r,s,()=>({packageLocation:s,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function VY(t,e){let r=K.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function cTt(t){let e=await Ht.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Ht,r=new Set(["preinstall","install","postinstall"]);for(let s of e.scripts.keys())r.has(s)||e.scripts.delete(s);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:WY(t),hasBindingGyp:YY(t)}}}Ve();Ve();Wt();var Rxe=et(Sa());var Sw=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}static{this.paths=[["unplug"]]}static{this.usage=ot.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new nt("This command can only be used if the `nodeLinker` option is set to `pnp`");await s.restoreInstallState();let c=new Set(this.patterns),f=this.patterns.map(P=>{let I=q.parseDescriptor(P),R=I.range!=="unknown"?I:q.makeDescriptor(I,"*");if(!Or.validRange(R.range))throw new nt(`The range of the descriptor patterns must be a valid semver range (${q.prettyDescriptor(r,R)})`);return N=>{let U=q.stringifyIdent(N);return!Rxe.default.isMatch(U,q.stringifyIdent(R))||N.version&&!Or.satisfiesWithPrereleases(N.version,R.range)?!1:(c.delete(P),!0)}}),p=()=>{let P=[];for(let I of s.storedPackages.values())!s.tryWorkspaceByLocator(I)&&!q.isVirtualLocator(I)&&f.some(R=>R(I))&&P.push(I);return P},h=P=>{let I=new Set,R=[],N=(U,W)=>{if(I.has(U.locatorHash))return;let te=!!s.tryWorkspaceByLocator(U);if(!(W>0&&!this.recursive&&te)&&(I.add(U.locatorHash),!s.tryWorkspaceByLocator(U)&&f.some(ie=>ie(U))&&R.push(U),!(W>0&&!this.recursive)))for(let ie of U.dependencies.values()){let Ae=s.storedResolutions.get(ie.descriptorHash);if(!Ae)throw new Error("Assertion failed: The resolution should have been registered");let ce=s.storedPackages.get(Ae);if(!ce)throw new Error("Assertion failed: The package should have been registered");N(ce,W+1)}};for(let U of P)N(U.anchoredPackage,0);return R},E,C;if(this.all&&this.recursive?(E=p(),C="the project"):this.all?(E=h(s.workspaces),C="any workspace"):(E=h([a]),C="this workspace"),c.size>1)throw new nt(`Patterns ${he.prettyList(r,c,he.Type.CODE)} don't match any packages referenced by ${C}`);if(c.size>0)throw new nt(`Pattern ${he.prettyList(r,c,he.Type.CODE)} doesn't match any packages referenced by ${C}`);E=je.sortMap(E,P=>q.stringifyLocator(P));let S=await Ot.start({configuration:r,stdout:this.context.stdout,json:this.json},async P=>{for(let I of E){let R=I.version??"unknown",N=s.topLevelWorkspace.manifest.ensureDependencyMeta(q.makeDescriptor(I,R));N.unplugged=!0,P.reportInfo(0,`Will unpack ${q.prettyLocator(r,I)} to ${he.pretty(r,zD(I,{configuration:r}),he.Type.PATH)}`),P.reportJson({locator:q.stringifyLocator(I),version:R})}await s.topLevelWorkspace.persistManifest(),this.json||P.reportSeparator()});return S.hasErrors()?S.exitCode():await s.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};var sg=t=>({cjs:K.join(t.cwd,Er.pnpCjs),data:K.join(t.cwd,Er.pnpData),esmLoader:K.join(t.cwd,Er.pnpEsmLoader)}),Nxe=t=>/\s/.test(t)?JSON.stringify(t):t;async function uTt(t,e,r){let s=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(s," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n||void 0;return}let c=sg(t),f=`--require ${Nxe(ue.fromPortablePath(c.cjs))}`;le.existsSync(c.esmLoader)&&(f=`${f} --experimental-loader ${(0,Fxe.pathToFileURL)(ue.fromPortablePath(c.esmLoader)).href}`),le.existsSync(c.cjs)&&(e.NODE_OPTIONS=n?`${f} ${n}`:f)}async function fTt(t,e){let r=sg(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var ATt={hooks:{populateYarnPaths:fTt,setupScriptEnvironment:uTt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},minizip:{description:"Whether Yarn should use minizip to extract archives",type:"BOOLEAN",default:!1},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"STRING",default:[],isArray:!0},pnpZipBackend:{description:"Whether to use the experimental js implementation for the ZipFS",type:"STRING",values:["libzip","js"],default:"libzip"},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[ig],commands:[Sw]},pTt=ATt;var qxe=et(Uxe());Wt();var tV=et(Ie("crypto")),Gxe=et(Ie("fs")),Wxe=1,Ri="node_modules",lN=".bin",Yxe=".yarn-state.yml",kTt=1e3,rV=(s=>(s.CLASSIC="classic",s.HARDLINKS_LOCAL="hardlinks-local",s.HARDLINKS_GLOBAL="hardlinks-global",s))(rV||{}),XD=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let s=r.project.tryWorkspaceByLocator(e);if(s)return s.cwd;let a=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await eV(r.project,{unrollAliases:!0}));if(a===null)throw new nt("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(q.stringifyLocator(e));if(!n){let p=new nt(`Couldn't find ${q.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let c=n.locations.sort((p,h)=>p.split(K.sep).length-h.split(K.sep).length),f=K.join(r.project.configuration.startingCwd,Ri);return c.find(p=>K.contains(f,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let s=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await eV(r.project,{unrollAliases:!0}));if(s===null)return null;let{locationRoot:a,segments:n}=cN(K.resolve(e),{skipPrefix:r.project.cwd}),c=s.locationTree.get(a);if(!c)return null;let f=c.locator;for(let p of n){if(c=c.children.get(p),!c)break;f=c.locator||f}return q.parseLocator(f)}makeInstaller(e){return new $Y(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},$Y=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let s=K.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await QTt(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!q.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,c=new Set;n.has(q.stringifyIdent(e))||n.set(q.stringifyIdent(e),e.reference);let f=e;if(q.isVirtualLocator(e)){f=q.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(q.stringifyIdent(E),null),c.add(q.stringifyIdent(E))}let p={packageLocation:`${ue.fromPortablePath(s)}/`,packageDependencies:n,packagePeers:c,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(f.locatorHash,h),{packageLocation:s,buildRequest:null}}async attachInternalDependencies(e,r){let s=this.localStore.get(e.locatorHash);if(typeof s>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let c=q.areIdentsEqual(a,n)?n.reference:[q.stringifyIdent(n),n.reference];s.pnpNode.packageDependencies.set(q.stringifyIdent(a),c)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new Ao({baseFs:new tA({maxOpenFiles:80,readOnlyArchives:!0})}),r=await eV(this.opts.project),s=this.opts.project.configuration.get("nmMode");(r===null||s!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:s,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(S=>{let P=this.opts.project.configuration.get("nmHoistingLimits");try{P=je.validateEnum(_D,S.manifest.installConfig?.hoistingLimits??P)}catch{let I=q.prettyWorkspace(this.opts.project.configuration,S);this.opts.report.reportWarning(57,`${I}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(_D).join(", ")}, using default: "${P}"`)}return[S.relativeCwd,P]})),n=new Map(this.opts.project.workspaces.map(S=>{let P=this.opts.project.configuration.get("nmSelfReferences");return P=S.manifest.installConfig?.selfReferences??P,[S.relativeCwd,P]})),c={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(S,P)=>Array.isArray(P)?{name:P[0],reference:P[1]}:{name:S,reference:P},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(S=>{let P=S.anchoredLocator;return{name:q.stringifyIdent(P),reference:P.reference}}),getPackageInformation:S=>{let P=S.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:q.makeLocator(q.parseIdent(S.name),S.reference),I=this.localStore.get(P.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return I.pnpNode},findPackageLocator:S=>{let P=this.opts.project.tryWorkspaceByCwd(ue.toPortablePath(S));if(P!==null){let I=P.anchoredLocator;return{name:q.stringifyIdent(I),reference:I.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:S=>ue.fromPortablePath(Ao.resolveVirtual(ue.toPortablePath(S)))},{tree:f,errors:p,preserveSymlinksRequired:h}=UD(c,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!f){for(let{messageName:S,text:P}of p)this.opts.report.reportError(S,P);return}let E=xY(f);await MTt(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async S=>{let P=q.parseLocator(S),I=this.localStore.get(P.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the slot to exist");return I.customPackageData.manifest}});let C=[];for(let[S,P]of E.entries()){if(Jxe(S))continue;let I=q.parseLocator(S),R=this.localStore.get(I.locatorHash);if(typeof R>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(R.pkg))continue;let N=mA.extractBuildRequest(R.pkg,R.customPackageData,R.dependencyMeta,{configuration:this.opts.project.configuration});N&&C.push({buildLocations:P.locations,locator:I,buildRequest:N})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${he.pretty(this.opts.project.configuration,"--preserve-symlinks",he.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:C}}};async function QTt(t,e){let r=await Ht.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Ht,s=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())s.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:mA.hasBindingGyp(e)}}}async function TTt(t,e,r,s,{installChangedByUser:a}){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will -`,n+=`# cause your node_modules installation to become invalidated. -`,n+=` -`,n+=`__metadata: -`,n+=` version: ${Wxe} -`,n+=` nmMode: ${s.value} -`;let c=Array.from(e.keys()).sort(),f=q.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let E of c){let C=e.get(E);n+=` -`,n+=`${JSON.stringify(E)}: -`,n+=` locations: -`;for(let S of C.locations){let P=K.contains(t.cwd,S);if(P===null)throw new Error(`Assertion failed: Expected the path to be within the project (${S})`);n+=` - ${JSON.stringify(P)} -`}if(C.aliases.length>0){n+=` aliases: -`;for(let S of C.aliases)n+=` - ${JSON.stringify(S)} -`}if(E===f&&r.size>0){n+=` bin: -`;for(let[S,P]of r){let I=K.contains(t.cwd,S);if(I===null)throw new Error(`Assertion failed: Expected the path to be within the project (${S})`);n+=` ${JSON.stringify(I)}: -`;for(let[R,N]of P){let U=K.relative(K.join(S,Ri),N);n+=` ${JSON.stringify(R)}: ${JSON.stringify(U)} -`}}}}let p=t.cwd,h=K.join(p,Ri,Yxe);a&&await le.removePromise(h),await le.changeFilePromise(h,n,{automaticNewlines:!0})}async function eV(t,{unrollAliases:e=!1}={}){let r=t.cwd,s=K.join(r,Ri,Yxe),a;try{a=await le.statPromise(s)}catch{}if(!a)return null;let n=cs(await le.readFilePromise(s,"utf8"));if(n.__metadata.version>Wxe)return null;let c=n.__metadata.nmMode||"classic",f=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let C=E.locations.map(P=>K.join(r,P)),S=E.bin;if(S)for(let[P,I]of Object.entries(S)){let R=K.join(r,ue.toPortablePath(P)),N=je.getMapWithDefault(p,R);for(let[U,W]of Object.entries(I))N.set(U,ue.toPortablePath([R,Ri,W].join(K.sep)))}if(f.set(h,{target:vt.dot,linkType:"HARD",locations:C,aliases:E.aliases||[]}),e&&E.aliases)for(let P of E.aliases){let{scope:I,name:R}=q.parseLocator(h),N=q.makeLocator(q.makeIdent(I,R),P),U=q.stringifyLocator(N);f.set(U,{target:vt.dot,linkType:"HARD",locations:C,aliases:[]})}}return{locatorMap:f,binSymlinks:p,locationTree:Vxe(f,{skipPrefix:t.cwd}),nmMode:c,mtimeMs:a.mtimeMs}}var bw=async(t,e)=>{if(t.split(K.sep).indexOf(Ri)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{let r;if(!e.innerLoop&&(r=await le.lstatPromise(t),!r.isDirectory()&&!r.isSymbolicLink()||r.isSymbolicLink()&&!e.isWorkspaceDir)){await le.unlinkPromise(t);return}let s=await le.readdirPromise(t,{withFileTypes:!0});for(let n of s){let c=K.join(t,n.name);n.isDirectory()?(n.name!==Ri||e&&e.innerLoop)&&await bw(c,{innerLoop:!0,contentsOnly:!1}):await le.unlinkPromise(c)}let a=!e.innerLoop&&e.isWorkspaceDir&&r?.isSymbolicLink();!e.contentsOnly&&!a&&await le.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},Hxe=4,cN=(t,{skipPrefix:e})=>{let r=K.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let s=r.split(K.sep).filter(p=>p!==""),a=s.indexOf(Ri),n=s.slice(0,a).join(K.sep),c=K.join(e,n),f=s.slice(a);return{locationRoot:c,segments:f}},Vxe=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let s=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&K.contains(e,n.target)!==null){let f=je.getFactoryWithDefault(r,n.target,s);f.locator=a,f.linkType=n.linkType}for(let c of n.locations){let{locationRoot:f,segments:p}=cN(c,{skipPrefix:e}),h=je.getFactoryWithDefault(r,f,s);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let s;try{s=await le.lstatPromise(t)}catch{}if(!s||s.isDirectory()){await le.symlinkPromise(t,e,"junction");return}}await le.symlinkPromise(K.relative(K.dirname(e),t),e)};async function Kxe(t,e,r){let s=K.join(t,`${tV.default.randomBytes(16).toString("hex")}.tmp`);try{await le.writeFilePromise(s,r);try{await le.linkPromise(s,e)}catch{}}finally{await le.unlinkPromise(s)}}async function RTt({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:s,baseFs:a,nmMode:n}){if(r.kind==="file"){if(n.value==="hardlinks-global"&&s&&r.digest){let f=K.join(s,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await le.statPromise(f);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs{await le.mkdirPromise(t,{recursive:!0});let f=async(E=vt.dot)=>{let C=K.join(e,E),S=await r.readdirPromise(C,{withFileTypes:!0}),P=new Map;for(let I of S){let R=K.join(E,I.name),N,U=K.join(C,I.name);if(I.isFile()){if(N={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let W=await Nn.checksumFile(U,{baseFs:r,algorithm:"sha1"});N.digest=W}}else if(I.isDirectory())N={kind:"directory"};else if(I.isSymbolicLink())N={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(P.set(R,N),I.isDirectory()&&R!==Ri){let W=await f(R);for(let[te,ie]of W)P.set(te,ie)}}return P},p;if(a.value==="hardlinks-global"&&s&&c){let E=K.join(s,c.substring(0,2),`${c.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await le.readFilePromise(E,"utf8"))))}catch{p=await f()}}else p=await f();let h=!1;for(let[E,C]of p){let S=K.join(e,E),P=K.join(t,E);if(C.kind==="directory")await le.mkdirPromise(P,{recursive:!0});else if(C.kind==="file"){let I=C.mtimeMs;await RTt({srcPath:S,dstPath:P,entry:C,nmMode:a,baseFs:r,globalHardlinksStore:s}),C.mtimeMs!==I&&(h=!0)}else C.kind==="symlink"&&await nV(K.resolve(K.dirname(P),C.symlinkTo),P,n)}if(a.value==="hardlinks-global"&&s&&h&&c){let E=K.join(s,c.substring(0,2),`${c.substring(2)}.json`);await le.removePromise(E),await Kxe(s,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function NTt(t,e,r,s){let a=new Map,n=new Map,c=new Map,f=!1,p=(h,E,C,S,P)=>{let I=!0,R=K.join(h,E),N=new Set;if(E===Ri||E.startsWith("@")){let W;try{W=le.statSync(R)}catch{}I=!!W,W?W.mtimeMs>r?(f=!0,N=new Set(le.readdirSync(R))):N=new Set(C.children.get(E).children.keys()):f=!0;let te=e.get(h);if(te){let ie=K.join(h,Ri,lN),Ae;try{Ae=le.statSync(ie)}catch{}if(!Ae)f=!0;else if(Ae.mtimeMs>r){f=!0;let ce=new Set(le.readdirSync(ie)),me=new Map;n.set(h,me);for(let[pe,Be]of te)ce.has(pe)&&me.set(pe,Be)}else n.set(h,te)}}else I=P.has(E);let U=C.children.get(E);if(I){let{linkType:W,locator:te}=U,ie={children:new Map,linkType:W,locator:te};if(S.children.set(E,ie),te){let Ae=je.getSetWithDefault(c,te);Ae.add(R),c.set(te,Ae)}for(let Ae of U.children.keys())p(R,Ae,U,ie,N)}else U.locator&&s.storedBuildState.delete(q.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:C,locator:S}=E,P={children:new Map,linkType:C,locator:S};if(a.set(h,P),S){let I=je.getSetWithDefault(c,E.locator);I.add(h),c.set(E.locator,I)}E.children.has(Ri)&&p(h,Ri,E,P,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:c,installChangedByUser:f}}function Jxe(t){let e=q.parseDescriptor(t);return q.isVirtualDescriptor(e)&&(e=q.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function OTt(t,e,r,{loadManifest:s}){let a=new Map;for(let[f,{locations:p}]of t){let h=Jxe(f)?null:await s(f,p[0]),E=new Map;if(h)for(let[C,S]of h.bin){let P=K.join(p[0],S);S!==""&&le.existsSync(P)&&E.set(C,S)}a.set(f,E)}let n=new Map,c=(f,p,h)=>{let E=new Map,C=K.contains(r,f);if(h.locator&&C!==null){let S=a.get(h.locator);for(let[P,I]of S){let R=K.join(f,ue.toPortablePath(I));E.set(P,R)}for(let[P,I]of h.children){let R=K.join(f,P),N=c(R,R,I);N.size>0&&n.set(f,new Map([...n.get(f)||new Map,...N]))}}else for(let[S,P]of h.children){let I=c(K.join(f,S),p,P);for(let[R,N]of I)E.set(R,N)}return E};for(let[f,p]of e){let h=c(f,f,p);h.size>0&&n.set(f,new Map([...n.get(f)||new Map,...h]))}return n}var jxe=(t,e)=>{if(!t||!e)return t===e;let r=q.parseLocator(t);q.isVirtualLocator(r)&&(r=q.devirtualizeLocator(r));let s=q.parseLocator(e);return q.isVirtualLocator(s)&&(s=q.devirtualizeLocator(s)),q.areLocatorsEqual(r,s)};function iV(t){return K.join(t.get("globalFolder"),"store")}function LTt(t,e){let r=s=>{let a=s.split(K.sep),n=a.lastIndexOf(Ri);if(n<0||n==a.length-1)throw new Error(`Assertion failed. Path is outside of any node_modules package ${s}`);return a.slice(0,n+(a[n+1].startsWith("@")?3:2)).join(K.sep)};for(let s of t.values())for(let[a,n]of s)e.has(r(n))&&s.delete(a)}async function MTt(t,e,{baseFs:r,project:s,report:a,loadManifest:n,realLocatorChecksums:c}){let f=K.join(s.cwd,Ri),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:C}=NTt(t.locationTree,t.binSymlinks,t.mtimeMs,s),S=Vxe(e,{skipPrefix:s.cwd}),P=[],I=async({srcDir:Be,dstDir:Ce,linkType:g,globalHardlinksStore:we,nmMode:ye,windowsLinkType:fe,packageChecksum:se})=>{let X=(async()=>{try{g==="SOFT"?(await le.mkdirPromise(K.dirname(Ce),{recursive:!0}),await nV(K.resolve(Be),Ce,fe)):await FTt(Ce,Be,{baseFs:r,globalHardlinksStore:we,nmMode:ye,windowsLinkType:fe,packageChecksum:se})}catch(De){throw De.message=`While persisting ${Be} -> ${Ce} ${De.message}`,De}finally{ie.tick()}})().then(()=>P.splice(P.indexOf(X),1));P.push(X),P.length>Hxe&&await Promise.race(P)},R=async(Be,Ce,g)=>{let we=(async()=>{let ye=async(fe,se,X)=>{try{X.innerLoop||await le.mkdirPromise(se,{recursive:!0});let De=await le.readdirPromise(fe,{withFileTypes:!0});for(let Re of De){if(!X.innerLoop&&Re.name===lN)continue;let dt=K.join(fe,Re.name),j=K.join(se,Re.name);Re.isDirectory()?(Re.name!==Ri||X&&X.innerLoop)&&(await le.mkdirPromise(j,{recursive:!0}),await ye(dt,j,{...X,innerLoop:!0})):me.value==="hardlinks-local"||me.value==="hardlinks-global"?await le.linkPromise(dt,j):await le.copyFilePromise(dt,j,Gxe.default.constants.COPYFILE_FICLONE)}}catch(De){throw X.innerLoop||(De.message=`While cloning ${fe} -> ${se} ${De.message}`),De}finally{X.innerLoop||ie.tick()}};await ye(Be,Ce,g)})().then(()=>P.splice(P.indexOf(we),1));P.push(we),P.length>Hxe&&await Promise.race(P)},N=async(Be,Ce,g)=>{if(g)for(let[we,ye]of Ce.children){let fe=g.children.get(we);await N(K.join(Be,we),ye,fe)}else{Ce.children.has(Ri)&&await bw(K.join(Be,Ri),{contentsOnly:!1});let we=K.basename(Be)===Ri&&p.has(K.join(K.dirname(Be)));await bw(Be,{contentsOnly:Be===f,isWorkspaceDir:we})}};for(let[Be,Ce]of p){let g=S.get(Be);for(let[we,ye]of Ce.children){if(we===".")continue;let fe=g&&g.children.get(we),se=K.join(Be,we);await N(se,ye,fe)}}let U=async(Be,Ce,g)=>{if(g){jxe(Ce.locator,g.locator)||await bw(Be,{contentsOnly:Ce.linkType==="HARD"});for(let[we,ye]of Ce.children){let fe=g.children.get(we);await U(K.join(Be,we),ye,fe)}}else{Ce.children.has(Ri)&&await bw(K.join(Be,Ri),{contentsOnly:!0});let we=K.basename(Be)===Ri&&S.has(K.join(K.dirname(Be)));await bw(Be,{contentsOnly:Ce.linkType==="HARD",isWorkspaceDir:we})}};for(let[Be,Ce]of S){let g=p.get(Be);for(let[we,ye]of Ce.children){if(we===".")continue;let fe=g&&g.children.get(we);await U(K.join(Be,we),ye,fe)}}let W=new Map,te=[];for(let[Be,Ce]of E)for(let g of Ce){let{locationRoot:we,segments:ye}=cN(g,{skipPrefix:s.cwd}),fe=S.get(we),se=we;if(fe){for(let X of ye)if(se=K.join(se,X),fe=fe.children.get(X),!fe)break;if(fe){let X=jxe(fe.locator,Be),De=e.get(fe.locator),Re=De.target,dt=se,j=De.linkType;if(X)W.has(Re)||W.set(Re,dt);else if(Re!==dt){let rt=q.parseLocator(fe.locator);q.isVirtualLocator(rt)&&(rt=q.devirtualizeLocator(rt)),te.push({srcDir:Re,dstDir:dt,linkType:j,realLocatorHash:rt.locatorHash})}}}}for(let[Be,{locations:Ce}]of e.entries())for(let g of Ce){let{locationRoot:we,segments:ye}=cN(g,{skipPrefix:s.cwd}),fe=p.get(we),se=S.get(we),X=we,De=e.get(Be),Re=q.parseLocator(Be);q.isVirtualLocator(Re)&&(Re=q.devirtualizeLocator(Re));let dt=Re.locatorHash,j=De.target,rt=g;if(j===rt)continue;let Fe=De.linkType;for(let Ne of ye)se=se.children.get(Ne);if(!fe)te.push({srcDir:j,dstDir:rt,linkType:Fe,realLocatorHash:dt});else for(let Ne of ye)if(X=K.join(X,Ne),fe=fe.children.get(Ne),!fe){te.push({srcDir:j,dstDir:rt,linkType:Fe,realLocatorHash:dt});break}}let ie=ho.progressViaCounter(te.length),Ae=a.reportProgress(ie),ce=s.configuration.get("nmMode"),me={value:ce},pe=s.configuration.get("winLinkType");try{let Be=me.value==="hardlinks-global"?`${iV(s.configuration)}/v1`:null;if(Be&&!await le.existsPromise(Be)){await le.mkdirpPromise(Be);for(let g=0;g<256;g++)await le.mkdirPromise(K.join(Be,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!W.has(g.srcDir))&&(W.set(g.srcDir,g.dstDir),await I({...g,globalHardlinksStore:Be,nmMode:me,windowsLinkType:pe,packageChecksum:c.get(g.realLocatorHash)||null}));await Promise.all(P),P.length=0;for(let g of te){let we=W.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==we&&await R(we,g.dstDir,{nmMode:me})}await Promise.all(P),await le.mkdirPromise(f,{recursive:!0}),LTt(h,new Set(te.map(g=>g.dstDir)));let Ce=await OTt(e,S,s.cwd,{loadManifest:n});await _Tt(h,Ce,s.cwd,pe),await TTt(s,e,Ce,me,{installChangedByUser:C}),ce=="hardlinks-global"&&me.value=="hardlinks-local"&&a.reportWarningOnce(74,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{Ae.stop()}}async function _Tt(t,e,r,s){for(let a of t.keys()){if(K.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);if(!e.has(a)){let n=K.join(a,Ri,lN);await le.removePromise(n)}}for(let[a,n]of e){if(K.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let c=K.join(a,Ri,lN),f=t.get(a)||new Map;await le.mkdirPromise(c,{recursive:!0});for(let p of f.keys())n.has(p)||(await le.removePromise(K.join(c,p)),process.platform==="win32"&&await le.removePromise(K.join(c,`${p}.cmd`)));for(let[p,h]of n){let E=f.get(p),C=K.join(c,p);E!==h&&(process.platform==="win32"?await(0,qxe.default)(ue.fromPortablePath(h),ue.fromPortablePath(C),{createPwshFile:!1}):(await le.removePromise(C),await nV(h,C,s),K.contains(r,await le.realpathPromise(h))!==null&&await le.chmodPromise(h,493)))}}}Ve();bt();rA();var $D=class extends ig{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new sV(r)}},sV=class extends jm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let s=new Ao({baseFs:new tA({maxOpenFiles:80,readOnlyArchives:!0})}),a=xxe(r,this.opts.project.cwd,s),{tree:n,errors:c}=UD(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:C,text:S}of c)this.opts.report.reportError(C,S);return}let f=new Map;r.fallbackPool=f;let p=(C,S)=>{let P=q.parseLocator(S.locator),I=q.stringifyIdent(P);I===C?f.set(C,P.reference):f.set(C,[I,P.reference])},h=K.join(this.opts.project.cwd,Er.nodeModules),E=n.get(h);if(!(typeof E>"u")){if("target"in E)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let C of E.dirList){let S=K.join(h,C),P=n.get(S);if(typeof P>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in P)p(C,P);else for(let I of P.dirList){let R=K.join(S,I),N=n.get(R);if(typeof N>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in N)p(`${C}/${I}`,N);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var UTt={hooks:{cleanGlobalArtifacts:async t=>{let e=iV(t);await le.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevents packages to be hoisted past specific levels",type:"STRING",values:["workspaces","dependencies","none"],default:"none"},nmMode:{description:"Defines in which measure Yarn must use hardlinks and symlinks when generated `node_modules` directories.",type:"STRING",values:["classic","hardlinks-local","hardlinks-global"],default:"classic"},nmSelfReferences:{description:"Defines whether the linker should generate self-referencing symlinks for workspaces.",type:"BOOLEAN",default:!0}},linkers:[XD,$D]},HTt=UTt;var oz={};Vt(oz,{NpmHttpFetcher:()=>rb,NpmRemapResolver:()=>nb,NpmSemverFetcher:()=>lh,NpmSemverResolver:()=>ib,NpmTagResolver:()=>sb,default:()=>ZHt,npmConfigUtils:()=>hi,npmHttpUtils:()=>an,npmPublishUtils:()=>B1});Ve();var nke=et(Ai());var oi="npm:";var an={};Vt(an,{AuthType:()=>eke,customPackageError:()=>qm,del:()=>tRt,get:()=>Gm,getIdentUrl:()=>uN,getPackageMetadata:()=>kw,handleInvalidAuthenticationError:()=>og,post:()=>$Tt,put:()=>eRt});Ve();Ve();bt();var cV=et(nS()),Xxe=et(mG()),$xe=et(Ai());var hi={};Vt(hi,{RegistryType:()=>zxe,getAuditRegistry:()=>jTt,getAuthConfiguration:()=>lV,getDefaultRegistry:()=>eb,getPublishRegistry:()=>qTt,getRegistryConfiguration:()=>Zxe,getScopeConfiguration:()=>aV,getScopeRegistry:()=>Pw,normalizeRegistry:()=>zc});var zxe=(s=>(s.AUDIT_REGISTRY="npmAuditRegistry",s.FETCH_REGISTRY="npmRegistryServer",s.PUBLISH_REGISTRY="npmPublishRegistry",s))(zxe||{});function zc(t){return t.replace(/\/$/,"")}function jTt({configuration:t}){return eb({configuration:t,type:"npmAuditRegistry"})}function qTt(t,{configuration:e}){return t.publishConfig?.registry?zc(t.publishConfig.registry):t.name?Pw(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):eb({configuration:e,type:"npmPublishRegistry"})}function Pw(t,{configuration:e,type:r="npmRegistryServer"}){let s=aV(t,{configuration:e});if(s===null)return eb({configuration:e,type:r});let a=s.get(r);return a===null?eb({configuration:e,type:r}):zc(a)}function eb({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return zc(r!==null?r:t.get("npmRegistryServer"))}function Zxe(t,{configuration:e}){let r=e.get("npmRegistries"),s=zc(t),a=r.get(s);if(typeof a<"u")return a;let n=r.get(s.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}var GTt=new Map([["npmRegistryServer","https://npm.jsr.io/"]]);function aV(t,{configuration:e}){if(t===null)return null;let s=e.get("npmScopes").get(t);return s||(t==="jsr"?GTt:null)}function lV(t,{configuration:e,ident:r}){let s=r&&aV(r.scope,{configuration:e});return s?.get("npmAuthIdent")||s?.get("npmAuthToken")?s:Zxe(t,{configuration:e})||e}var eke=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(eke||{});async function og(t,{attemptedAs:e,registry:r,headers:s,configuration:a}){if(AN(t))throw new Yt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new Yt(41,`Invalid authentication (${typeof e!="string"?`as ${await nRt(r,s,{configuration:a})}`:`attempted as ${e}`})`)}function qm(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${he.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function uN(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var tke=new Map,WTt=new Map;async function YTt(t){return await je.getFactoryWithDefault(tke,t,async()=>{let e=null;try{e=await le.readJsonPromise(t)}catch{}return e})}async function VTt(t,e,{configuration:r,cached:s,registry:a,headers:n,version:c,...f}){return await je.getFactoryWithDefault(WTt,t,async()=>await Gm(uN(e),{...f,customErrorMessage:qm,configuration:r,registry:a,ident:e,headers:{...n,"If-None-Match":s?.etag,"If-Modified-Since":s?.lastModified},wrapNetworkRequest:async p=>async()=>{let h=await p();if(h.statusCode===304){if(s===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...h,body:s.metadata}}let E=JTt(JSON.parse(h.body.toString())),C={metadata:E,etag:h.headers.etag,lastModified:h.headers["last-modified"]};return tke.set(t,Promise.resolve(C)),Promise.resolve().then(async()=>{let S=`${t}-${process.pid}.tmp`;await le.mkdirPromise(K.dirname(S),{recursive:!0}),await le.writeJsonPromise(S,C,{compact:!0}),await le.renamePromise(S,t)}).catch(()=>{}),{...h,body:E}}}))}function KTt(t){return t.scope!==null?`@${t.scope}-${t.name}-${t.scope.length}`:t.name}async function kw(t,{cache:e,project:r,registry:s,headers:a,version:n,...c}){let{configuration:f}=r;s=tb(f,{ident:t,registry:s});let p=ZTt(f,s),h=K.join(p,`${KTt(t)}.json`),E=null;if(!r.lockfileNeedsRefresh&&(E=await YTt(h),E)){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(f.get("enableOfflineMode")){let C=structuredClone(E.metadata),S=new Set;if(e){for(let I of Object.keys(C.versions)){let R=q.makeLocator(t,`npm:${I}`),N=e.getLocatorMirrorPath(R);(!N||!le.existsSync(N))&&(delete C.versions[I],S.add(I))}let P=C["dist-tags"].latest;if(S.has(P)){let I=Object.keys(E.metadata.versions).sort($xe.default.compare),R=I.indexOf(P);for(;S.has(I[R])&&R>=0;)R-=1;R>=0?C["dist-tags"].latest=I[R]:delete C["dist-tags"].latest}}return C}}return await VTt(h,t,{...c,configuration:f,cached:E,registry:s,headers:a,version:n})}var rke=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function JTt(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,Xxe.default)(r,rke)]))}}var zTt=Nn.makeHash(...rke).slice(0,6);function ZTt(t,e){let r=XTt(t),s=new URL(e);return K.join(r,zTt,s.hostname)}function XTt(t){return K.join(t.get("globalFolder"),"metadata/npm")}async function Gm(t,{configuration:e,headers:r,ident:s,authType:a,registry:n,...c}){n=tb(e,{ident:s,registry:n}),s&&s.scope&&typeof a>"u"&&(a=1);let f=await fN(n,{authType:a,configuration:e,ident:s});f&&(r={...r,authorization:f});try{return await An.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...c})}catch(p){throw await og(p,{registry:n,configuration:e,headers:r}),p}}async function $Tt(t,e,{attemptedAs:r,configuration:s,headers:a,ident:n,authType:c=3,registry:f,otp:p,...h}){f=tb(s,{ident:n,registry:f});let E=await fN(f,{authType:c,configuration:s,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...xw(p)});try{return await An.post(f+t,e,{configuration:s,headers:a,...h})}catch(C){if(!AN(C)||p)throw await og(C,{attemptedAs:r,registry:f,configuration:s,headers:a}),C;p=await uV(C,{configuration:s});let S={...a,...xw(p)};try{return await An.post(`${f}${t}`,e,{configuration:s,headers:S,...h})}catch(P){throw await og(P,{attemptedAs:r,registry:f,configuration:s,headers:a}),P}}}async function eRt(t,e,{attemptedAs:r,configuration:s,headers:a,ident:n,authType:c=3,registry:f,otp:p,...h}){f=tb(s,{ident:n,registry:f});let E=await fN(f,{authType:c,configuration:s,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...xw(p)});try{return await An.put(f+t,e,{configuration:s,headers:a,...h})}catch(C){if(!AN(C))throw await og(C,{attemptedAs:r,registry:f,configuration:s,headers:a}),C;p=await uV(C,{configuration:s});let S={...a,...xw(p)};try{return await An.put(`${f}${t}`,e,{configuration:s,headers:S,...h})}catch(P){throw await og(P,{attemptedAs:r,registry:f,configuration:s,headers:a}),P}}}async function tRt(t,{attemptedAs:e,configuration:r,headers:s,ident:a,authType:n=3,registry:c,otp:f,...p}){c=tb(r,{ident:a,registry:c});let h=await fN(c,{authType:n,configuration:r,ident:a});h&&(s={...s,authorization:h}),f&&(s={...s,...xw(f)});try{return await An.del(c+t,{configuration:r,headers:s,...p})}catch(E){if(!AN(E)||f)throw await og(E,{attemptedAs:e,registry:c,configuration:r,headers:s}),E;f=await uV(E,{configuration:r});let C={...s,...xw(f)};try{return await An.del(`${c}${t}`,{configuration:r,headers:C,...p})}catch(S){throw await og(S,{attemptedAs:e,registry:c,configuration:r,headers:s}),S}}}function tb(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return Pw(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return zc(r)}async function fN(t,{authType:e=2,configuration:r,ident:s}){let a=lV(t,{configuration:r,ident:s}),n=rRt(a,e);if(!n)return null;let c=await r.reduceHook(f=>f.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:s});if(c)return c;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let f=a.get("npmAuthIdent");return f.includes(":")?`Basic ${Buffer.from(f).toString("base64")}`:`Basic ${f}`}if(n&&e!==1)throw new Yt(33,"No authentication configured for request");return null}function rRt(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function nRt(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await An.get(new URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function uV(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Ot.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,he.pretty(e,"$1",he.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&ps.openUrl){let{openNow:c}=await(0,cV.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});c&&(await ps.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(` -`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:s}=await(0,cV.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` -`),s}function AN(t){if(t.originalError?.name!=="HTTPError")return!1;try{return(t.originalError?.response.headers["www-authenticate"].split(/,\s*/).map(r=>r.toLowerCase())).includes("otp")}catch{return!1}}function xw(t){return{"npm-otp":t}}var rb=class{supports(e,r){if(!e.reference.startsWith(oi))return!1;let{selector:s,params:a}=q.parseRange(e.reference);return!(!nke.default.valid(s)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${q.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:q.getIdentVendorPath(e),checksum:c}}async fetchFromNetwork(e,r){let{params:s}=q.parseRange(e.reference);if(s===null||typeof s.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await Gm(s.__archiveUrl,{customErrorMessage:qm,configuration:r.project.configuration,ident:e});return await gs.convertToZip(a,{configuration:r.project.configuration,prefixPath:q.getIdentVendorPath(e),stripComponents:1})}};Ve();var nb=class{supportsDescriptor(e,r){return!(!e.range.startsWith(oi)||!q.tryParseDescriptor(e.range.slice(oi.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){let s=r.project.configuration.normalizeDependency(q.parseDescriptor(e.range.slice(oi.length),!0));return r.resolver.getResolutionDependencies(s,r)}async getCandidates(e,r,s){let a=s.project.configuration.normalizeDependency(q.parseDescriptor(e.range.slice(oi.length),!0));return await s.resolver.getCandidates(a,r,s)}async getSatisfying(e,r,s,a){let n=a.project.configuration.normalizeDependency(q.parseDescriptor(e.range.slice(oi.length),!0));return a.resolver.getSatisfying(n,r,s,a)}resolve(e,r){throw new Error("Unreachable")}};Ve();Ve();var ike=et(Ai());var lh=class t{supports(e,r){if(!e.reference.startsWith(oi))return!1;let s=new URL(e.reference);return!(!ike.default.valid(s.pathname)||s.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${q.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:q.getIdentVendorPath(e),checksum:c}}async fetchFromNetwork(e,r){let s;try{s=await Gm(t.getLocatorUrl(e),{customErrorMessage:qm,configuration:r.project.configuration,ident:e})}catch{s=await Gm(t.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:qm,configuration:r.project.configuration,ident:e})}return await gs.convertToZip(s,{configuration:r.project.configuration,prefixPath:q.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:s}){let a=Pw(e.scope,{configuration:s}),n=t.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),a=a.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===a+n||r===a+n.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=Or.clean(e.reference.slice(oi.length));if(r===null)throw new Yt(10,"The npm semver resolver got selected, but the version isn't semver");return`${uN(e)}/-/${e.name}-${r}.tgz`}};Ve();Ve();Ve();var fV=et(Ai());var pN=q.makeIdent(null,"node-gyp"),iRt=/\b(node-gyp|prebuild-install)\b/,ib=class{supportsDescriptor(e,r){return e.range.startsWith(oi)?!!Or.validRange(e.range.slice(oi.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(oi))return!1;let{selector:s}=q.parseRange(e.reference);return!!fV.default.valid(s)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){let a=Or.validRange(e.range.slice(oi.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(oi.length)}`);let n=await kw(e,{cache:s.fetchOptions?.cache,project:s.project,version:fV.default.valid(a.raw)?a.raw:void 0}),c=je.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new Or.SemVer(h);if(a.test(E))return E}catch{}return je.mapAndFilter.skip}),f=c.filter(h=>!n.versions[h.raw].deprecated),p=f.length>0?f:c;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=q.makeLocator(e,`${oi}${h.raw}`),C=n.versions[h.raw].dist.tarball;return lh.isConventionalTarballUrl(E,C,{configuration:s.project.configuration})?E:q.bindLocator(E,{__archiveUrl:C})})}async getSatisfying(e,r,s,a){let n=Or.validRange(e.range.slice(oi.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(oi.length)}`);return{locators:je.mapAndFilter(s,p=>{if(p.identHash!==e.identHash)return je.mapAndFilter.skip;let h=q.tryParseRange(p.reference,{requireProtocol:oi});if(!h)return je.mapAndFilter.skip;let E=new Or.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:je.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:s}=q.parseRange(e.reference),a=Or.clean(s);if(a===null)throw new Yt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await kw(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new Yt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new Yt(16,`Registry failed to return reference "${a}"`);let c=new Ht;if(c.load(n.versions[a]),!c.dependencies.has(pN.identHash)&&!c.peerDependencies.has(pN.identHash)){for(let f of c.scripts.values())if(f.match(iRt)){c.dependencies.set(pN.identHash,q.makeDescriptor(pN,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:c.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(c.dependencies),peerDependencies:c.peerDependencies,dependenciesMeta:c.dependenciesMeta,peerDependenciesMeta:c.peerDependenciesMeta,bin:c.bin}}};Ve();Ve();var ske=et(Ai());var sb=class{supportsDescriptor(e,r){return!(!e.range.startsWith(oi)||!Up.test(e.range.slice(oi.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){let a=e.range.slice(oi.length),n=await kw(e,{cache:s.fetchOptions?.cache,project:s.project});if(!Object.hasOwn(n,"dist-tags"))throw new Yt(15,'Registry returned invalid data - missing "dist-tags" field');let c=n["dist-tags"];if(!Object.hasOwn(c,a))throw new Yt(16,`Registry failed to return tag "${a}"`);let f=c[a],p=q.makeLocator(e,`${oi}${f}`),h=n.versions[f].dist.tarball;return lh.isConventionalTarballUrl(p,h,{configuration:s.project.configuration})?[p]:[q.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,s,a){let n=[];for(let c of s){if(c.identHash!==e.identHash)continue;let f=q.tryParseRange(c.reference,{requireProtocol:oi});if(!(!f||!ske.default.valid(f.selector))){if(f.params?.__archiveUrl){let p=q.makeRange({protocol:oi,selector:f.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(q.makeDescriptor(e,p),r,a);if(c.reference!==h.reference)continue}n.push(c)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var B1={};Vt(B1,{getGitHead:()=>JHt,getPublishAccess:()=>JNe,getReadmeContent:()=>zNe,makePublishBody:()=>KHt});Ve();Ve();bt();var $V={};Vt($V,{PackCommand:()=>Hw,default:()=>LNt,packUtils:()=>IA});Ve();Ve();Ve();bt();Wt();var IA={};Vt(IA,{genPackList:()=>ON,genPackStream:()=>XV,genPackageManifest:()=>OQe,hasPackScripts:()=>zV,prepareForPack:()=>ZV});Ve();bt();var JV=et(Sa()),FQe=et(kQe()),NQe=Ie("zlib"),DNt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],bNt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function zV(t){return!!(In.hasWorkspaceScript(t,"prepack")||In.hasWorkspaceScript(t,"postpack"))}async function ZV(t,{report:e},r){await In.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let s=K.join(t.cwd,Ht.fileName);await le.existsPromise(s)&&await t.manifest.loadFile(s,{baseFs:le}),await r()}finally{await In.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function XV(t,e){typeof e>"u"&&(e=await ON(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(K.normalize(n));for(let n of t.manifest.bin.values())r.add(K.normalize(n));let s=FQe.default.pack();process.nextTick(async()=>{for(let n of e){let c=K.normalize(n),f=K.resolve(t.cwd,c),p=K.join("package",c),h=await le.lstatPromise(f),E={name:p,mtime:new Date(fi.SAFE_TIME*1e3)},C=r.has(c)?493:420,S,P,I=new Promise((N,U)=>{S=N,P=U}),R=N=>{N?P(N):S()};if(h.isFile()){let N;c==="package.json"?N=Buffer.from(JSON.stringify(await OQe(t),null,2)):N=await le.readFilePromise(f),s.entry({...E,mode:C,type:"file"},N,R)}else h.isSymbolicLink()?s.entry({...E,mode:C,type:"symlink",linkname:await le.readlinkPromise(f)},R):R(new Error(`Unsupported file type ${h.mode} for ${ue.fromPortablePath(c)}`));await I}s.finalize()});let a=(0,NQe.createGzip)();return s.pipe(a),a}async function OQe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function ON(t){let e=t.project,r=e.configuration,s={accept:[],reject:[]};for(let C of bNt)s.reject.push(C);for(let C of DNt)s.accept.push(C);s.reject.push(r.get("rcFilename"));let a=C=>{if(C===null||!C.startsWith(`${t.cwd}/`))return;let S=K.relative(t.cwd,C),P=K.resolve(vt.root,S);s.reject.push(P)};a(K.resolve(e.cwd,Er.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(C=>C.populateYarnPaths,e,C=>{a(C)});for(let C of e.workspaces){let S=K.relative(t.cwd,C.cwd);S!==""&&!S.match(/^(\.\.)?\//)&&s.reject.push(`/${S}`)}let n={accept:[],reject:[]},c=t.manifest.publishConfig?.main??t.manifest.main,f=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;c!=null&&n.accept.push(K.resolve(vt.root,c)),f!=null&&n.accept.push(K.resolve(vt.root,f)),typeof p=="string"&&n.accept.push(K.resolve(vt.root,p));for(let C of h.values())n.accept.push(K.resolve(vt.root,C));if(p instanceof Map)for(let[C,S]of p.entries())n.accept.push(K.resolve(vt.root,C)),typeof S=="string"&&n.accept.push(K.resolve(vt.root,S));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let C of t.manifest.files)LQe(n.accept,C,{cwd:vt.root})}return await PNt(t.cwd,{hasExplicitFileList:E,globalList:s,ignoreList:n})}async function PNt(t,{hasExplicitFileList:e,globalList:r,ignoreList:s}){let a=[],n=new jf(t),c=[[vt.root,[s]]];for(;c.length>0;){let[f,p]=c.pop(),h=await n.lstatPromise(f);if(!TQe(f,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(f),C=!1,S=!1;if(!e||f!==vt.root)for(let R of E)C=C||R===".gitignore",S=S||R===".npmignore";let P=S?await QQe(n,f,".npmignore"):C?await QQe(n,f,".gitignore"):null,I=P!==null?[P].concat(p):p;TQe(f,{globalList:r,ignoreLists:p})&&(I=[...p,{accept:[],reject:["**/*"]}]);for(let R of E)c.push([K.resolve(f,R),I])}else(h.isFile()||h.isSymbolicLink())&&a.push(K.relative(vt.root,f))}return a.sort()}async function QQe(t,e,r){let s={accept:[],reject:[]},a=await t.readFilePromise(K.join(e,r),"utf8");for(let n of a.split(/\n/g))LQe(s.reject,n,{cwd:e});return s}function xNt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=K.resolve(e,t)),r&&(t=`!${t}`),t}function LQe(t,e,{cwd:r}){let s=e.trim();s===""||s[0]==="#"||t.push(xNt(s,{cwd:r}))}function TQe(t,{globalList:e,ignoreLists:r}){let s=NN(t,e.accept);if(s!==0)return s===2;let a=NN(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let c=NN(t,n.accept);if(c!==0)return c===2;let f=NN(t,n.reject);if(f!==0)return f===1}return!1}function NN(t,e){let r=e,s=[];for(let a=0;a{await ZV(a,{report:p},async()=>{p.reportJson({base:ue.fromPortablePath(a.cwd)});let h=await ON(a);for(let E of h)p.reportInfo(null,ue.fromPortablePath(E)),p.reportJson({location:ue.fromPortablePath(E)});if(!this.dryRun){let E=await XV(a,h);await le.mkdirPromise(K.dirname(c),{recursive:!0});let C=le.createWriteStream(c);E.pipe(C),await new Promise(S=>{C.on("finish",S)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${he.pretty(r,c,he.Type.PATH)}`),p.reportJson({output:ue.fromPortablePath(c)}))})).exitCode()}};function kNt(t,{workspace:e}){let r=t.replace("%s",QNt(e)).replace("%v",TNt(e));return ue.toPortablePath(r)}function QNt(t){return t.manifest.name!==null?q.slugifyIdent(t.manifest.name):"package"}function TNt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var RNt=["dependencies","devDependencies","peerDependencies"],FNt="workspace:",NNt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let s of RNt)for(let a of t.manifest.getForScope(s).values()){let n=r.tryWorkspaceByDescriptor(a),c=q.parseRange(a.range);if(c.protocol===FNt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new Yt(21,`${q.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let f;q.areDescriptorsEqual(a,n.anchoredDescriptor)||c.selector==="*"?f=n.manifest.version??"0.0.0":c.selector==="~"||c.selector==="^"?f=`${c.selector}${n.manifest.version??"0.0.0"}`:f=c.selector;let p=s==="dependencies"?q.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":s;e[h][q.stringifyIdent(a)]=f}}},ONt={hooks:{beforeWorkspacePacking:NNt},commands:[Hw]},LNt=ONt;var KNe=et(YQe());Ve();var YNe=et(WNe()),{env:Bt}=process,_Ht="application/vnd.in-toto+json",UHt="https://in-toto.io/Statement/v0.1",HHt="https://in-toto.io/Statement/v1",jHt="https://slsa.dev/provenance/v0.2",qHt="https://slsa.dev/provenance/v1",GHt="https://github.com/actions/runner",WHt="https://slsa-framework.github.io/github-actions-buildtypes/workflow/v1",YHt="https://github.com/npm/cli/gitlab",VHt="v0alpha1",VNe=async(t,e)=>{let r;if(Bt.GITHUB_ACTIONS){if(!Bt.ACTIONS_ID_TOKEN_REQUEST_URL)throw new Yt(91,'Provenance generation in GitHub Actions requires "write" access to the "id-token" permission');let s=(Bt.GITHUB_WORKFLOW_REF||"").replace(`${Bt.GITHUB_REPOSITORY}/`,""),a=s.indexOf("@"),n=s.slice(0,a),c=s.slice(a+1);r={_type:HHt,subject:t,predicateType:qHt,predicate:{buildDefinition:{buildType:WHt,externalParameters:{workflow:{ref:c,repository:`${Bt.GITHUB_SERVER_URL}/${Bt.GITHUB_REPOSITORY}`,path:n}},internalParameters:{github:{event_name:Bt.GITHUB_EVENT_NAME,repository_id:Bt.GITHUB_REPOSITORY_ID,repository_owner_id:Bt.GITHUB_REPOSITORY_OWNER_ID}},resolvedDependencies:[{uri:`git+${Bt.GITHUB_SERVER_URL}/${Bt.GITHUB_REPOSITORY}@${Bt.GITHUB_REF}`,digest:{gitCommit:Bt.GITHUB_SHA}}]},runDetails:{builder:{id:`${GHt}/${Bt.RUNNER_ENVIRONMENT}`},metadata:{invocationId:`${Bt.GITHUB_SERVER_URL}/${Bt.GITHUB_REPOSITORY}/actions/runs/${Bt.GITHUB_RUN_ID}/attempts/${Bt.GITHUB_RUN_ATTEMPT}`}}}}}else if(Bt.GITLAB_CI){if(!Bt.SIGSTORE_ID_TOKEN)throw new Yt(91,`Provenance generation in GitLab CI requires "SIGSTORE_ID_TOKEN" with "sigstore" audience to be present in "id_tokens". For more info see: -https://docs.gitlab.com/ee/ci/secrets/id_token_authentication.html`);r={_type:UHt,subject:t,predicateType:jHt,predicate:{buildType:`${YHt}/${VHt}`,builder:{id:`${Bt.CI_PROJECT_URL}/-/runners/${Bt.CI_RUNNER_ID}`},invocation:{configSource:{uri:`git+${Bt.CI_PROJECT_URL}`,digest:{sha1:Bt.CI_COMMIT_SHA},entryPoint:Bt.CI_JOB_NAME},parameters:{CI:Bt.CI,CI_API_GRAPHQL_URL:Bt.CI_API_GRAPHQL_URL,CI_API_V4_URL:Bt.CI_API_V4_URL,CI_BUILD_BEFORE_SHA:Bt.CI_BUILD_BEFORE_SHA,CI_BUILD_ID:Bt.CI_BUILD_ID,CI_BUILD_NAME:Bt.CI_BUILD_NAME,CI_BUILD_REF:Bt.CI_BUILD_REF,CI_BUILD_REF_NAME:Bt.CI_BUILD_REF_NAME,CI_BUILD_REF_SLUG:Bt.CI_BUILD_REF_SLUG,CI_BUILD_STAGE:Bt.CI_BUILD_STAGE,CI_COMMIT_BEFORE_SHA:Bt.CI_COMMIT_BEFORE_SHA,CI_COMMIT_BRANCH:Bt.CI_COMMIT_BRANCH,CI_COMMIT_REF_NAME:Bt.CI_COMMIT_REF_NAME,CI_COMMIT_REF_PROTECTED:Bt.CI_COMMIT_REF_PROTECTED,CI_COMMIT_REF_SLUG:Bt.CI_COMMIT_REF_SLUG,CI_COMMIT_SHA:Bt.CI_COMMIT_SHA,CI_COMMIT_SHORT_SHA:Bt.CI_COMMIT_SHORT_SHA,CI_COMMIT_TIMESTAMP:Bt.CI_COMMIT_TIMESTAMP,CI_COMMIT_TITLE:Bt.CI_COMMIT_TITLE,CI_CONFIG_PATH:Bt.CI_CONFIG_PATH,CI_DEFAULT_BRANCH:Bt.CI_DEFAULT_BRANCH,CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX:Bt.CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX,CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX:Bt.CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX,CI_DEPENDENCY_PROXY_SERVER:Bt.CI_DEPENDENCY_PROXY_SERVER,CI_DEPENDENCY_PROXY_USER:Bt.CI_DEPENDENCY_PROXY_USER,CI_JOB_ID:Bt.CI_JOB_ID,CI_JOB_NAME:Bt.CI_JOB_NAME,CI_JOB_NAME_SLUG:Bt.CI_JOB_NAME_SLUG,CI_JOB_STAGE:Bt.CI_JOB_STAGE,CI_JOB_STARTED_AT:Bt.CI_JOB_STARTED_AT,CI_JOB_URL:Bt.CI_JOB_URL,CI_NODE_TOTAL:Bt.CI_NODE_TOTAL,CI_PAGES_DOMAIN:Bt.CI_PAGES_DOMAIN,CI_PAGES_URL:Bt.CI_PAGES_URL,CI_PIPELINE_CREATED_AT:Bt.CI_PIPELINE_CREATED_AT,CI_PIPELINE_ID:Bt.CI_PIPELINE_ID,CI_PIPELINE_IID:Bt.CI_PIPELINE_IID,CI_PIPELINE_SOURCE:Bt.CI_PIPELINE_SOURCE,CI_PIPELINE_URL:Bt.CI_PIPELINE_URL,CI_PROJECT_CLASSIFICATION_LABEL:Bt.CI_PROJECT_CLASSIFICATION_LABEL,CI_PROJECT_DESCRIPTION:Bt.CI_PROJECT_DESCRIPTION,CI_PROJECT_ID:Bt.CI_PROJECT_ID,CI_PROJECT_NAME:Bt.CI_PROJECT_NAME,CI_PROJECT_NAMESPACE:Bt.CI_PROJECT_NAMESPACE,CI_PROJECT_NAMESPACE_ID:Bt.CI_PROJECT_NAMESPACE_ID,CI_PROJECT_PATH:Bt.CI_PROJECT_PATH,CI_PROJECT_PATH_SLUG:Bt.CI_PROJECT_PATH_SLUG,CI_PROJECT_REPOSITORY_LANGUAGES:Bt.CI_PROJECT_REPOSITORY_LANGUAGES,CI_PROJECT_ROOT_NAMESPACE:Bt.CI_PROJECT_ROOT_NAMESPACE,CI_PROJECT_TITLE:Bt.CI_PROJECT_TITLE,CI_PROJECT_URL:Bt.CI_PROJECT_URL,CI_PROJECT_VISIBILITY:Bt.CI_PROJECT_VISIBILITY,CI_REGISTRY:Bt.CI_REGISTRY,CI_REGISTRY_IMAGE:Bt.CI_REGISTRY_IMAGE,CI_REGISTRY_USER:Bt.CI_REGISTRY_USER,CI_RUNNER_DESCRIPTION:Bt.CI_RUNNER_DESCRIPTION,CI_RUNNER_ID:Bt.CI_RUNNER_ID,CI_RUNNER_TAGS:Bt.CI_RUNNER_TAGS,CI_SERVER_HOST:Bt.CI_SERVER_HOST,CI_SERVER_NAME:Bt.CI_SERVER_NAME,CI_SERVER_PORT:Bt.CI_SERVER_PORT,CI_SERVER_PROTOCOL:Bt.CI_SERVER_PROTOCOL,CI_SERVER_REVISION:Bt.CI_SERVER_REVISION,CI_SERVER_SHELL_SSH_HOST:Bt.CI_SERVER_SHELL_SSH_HOST,CI_SERVER_SHELL_SSH_PORT:Bt.CI_SERVER_SHELL_SSH_PORT,CI_SERVER_URL:Bt.CI_SERVER_URL,CI_SERVER_VERSION:Bt.CI_SERVER_VERSION,CI_SERVER_VERSION_MAJOR:Bt.CI_SERVER_VERSION_MAJOR,CI_SERVER_VERSION_MINOR:Bt.CI_SERVER_VERSION_MINOR,CI_SERVER_VERSION_PATCH:Bt.CI_SERVER_VERSION_PATCH,CI_TEMPLATE_REGISTRY_HOST:Bt.CI_TEMPLATE_REGISTRY_HOST,GITLAB_CI:Bt.GITLAB_CI,GITLAB_FEATURES:Bt.GITLAB_FEATURES,GITLAB_USER_ID:Bt.GITLAB_USER_ID,GITLAB_USER_LOGIN:Bt.GITLAB_USER_LOGIN,RUNNER_GENERATE_ARTIFACTS_METADATA:Bt.RUNNER_GENERATE_ARTIFACTS_METADATA},environment:{name:Bt.CI_RUNNER_DESCRIPTION,architecture:Bt.CI_RUNNER_EXECUTABLE_ARCH,server:Bt.CI_SERVER_URL,project:Bt.CI_PROJECT_PATH,job:{id:Bt.CI_JOB_ID},pipeline:{id:Bt.CI_PIPELINE_ID,ref:Bt.CI_CONFIG_PATH}}},metadata:{buildInvocationId:`${Bt.CI_JOB_URL}`,completeness:{parameters:!0,environment:!0,materials:!1},reproducible:!1},materials:[{uri:`git+${Bt.CI_PROJECT_URL}`,digest:{sha1:Bt.CI_COMMIT_SHA}}]}}}else throw new Yt(91,"Provenance generation is only supported in GitHub Actions and GitLab CI");return YNe.attest(Buffer.from(JSON.stringify(r)),_Ht,e)};async function KHt(t,e,{access:r,tag:s,registry:a,gitHead:n,provenance:c}){let f=t.manifest.name,p=t.manifest.version,h=q.stringifyIdent(f),E=KNe.default.fromData(e,{algorithms:["sha1","sha512"]}),C=r??JNe(t,f),S=await zNe(t),P=await IA.genPackageManifest(t),I=`${h}-${p}.tgz`,R=new URL(`${zc(a)}/${h}/-/${I}`),N={[I]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}};if(c){let U={name:`pkg:npm/${h.replace(/^@/,"%40")}@${p}`,digest:{sha512:E.sha512[0].hexDigest()}},W=await VNe([U]),te=JSON.stringify(W);N[`${h}-${p}.sigstore`]={content_type:W.mediaType,data:te,length:te.length}}return{_id:h,_attachments:N,name:h,access:C,"dist-tags":{[s]:p},versions:{[p]:{...P,_id:`${h}@${p}`,name:h,version:p,gitHead:n,dist:{shasum:E.sha1[0].hexDigest(),integrity:E.sha512[0].toString(),tarball:R.toString()}}},readme:S}}async function JHt(t){try{let{stdout:e}=await Gr.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function JNe(t,e){let r=t.project.configuration;return t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?t.manifest.publishConfig.access:r.get("npmPublishAccess")!==null?r.get("npmPublishAccess"):e.scope?"restricted":"public"}async function zNe(t){let e=ue.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${q.stringifyIdent(r)} -`;try{a=await le.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var sz={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"BOOLEAN",default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:"SECRET",default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:"SECRET",default:null}},ZNe={npmAuditRegistry:{description:"Registry to query for audit reports",type:"STRING",default:null},npmPublishRegistry:{description:"Registry to push packages to",type:"STRING",default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"STRING",default:"https://registry.yarnpkg.com"}},zHt={configuration:{...sz,...ZNe,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...sz,...ZNe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:zc,valueDefinition:{description:"",type:"SHAPE",properties:{...sz}}}},fetchers:[rb,lh],resolvers:[nb,ib,sb]},ZHt=zHt;var gz={};Vt(gz,{NpmAuditCommand:()=>S1,NpmInfoCommand:()=>D1,NpmLoginCommand:()=>b1,NpmLogoutCommand:()=>x1,NpmPublishCommand:()=>k1,NpmTagAddCommand:()=>T1,NpmTagListCommand:()=>Q1,NpmTagRemoveCommand:()=>R1,NpmWhoamiCommand:()=>F1,default:()=>ijt,npmAuditTypes:()=>sP,npmAuditUtils:()=>QL});Ve();Ve();Wt();var fz=et(Sa());Ul();var sP={};Vt(sP,{Environment:()=>nP,Severity:()=>iP});var nP=(s=>(s.All="all",s.Production="production",s.Development="development",s))(nP||{}),iP=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(iP||{});var QL={};Vt(QL,{allSeverities:()=>v1,getPackages:()=>uz,getReportTree:()=>lz,getSeverityInclusions:()=>az,getTopLevelDependencies:()=>cz});Ve();var XNe=et(Ai());var v1=["info","low","moderate","high","critical"];function az(t){if(typeof t>"u")return new Set(v1);let e=v1.indexOf(t),r=v1.slice(e);return new Set(r)}function lz(t){let e={},r={children:e};for(let[s,a]of je.sortMap(Object.entries(t),n=>n[0]))for(let n of je.sortMap(a,c=>`${c.id}`))e[`${s}/${n.id}`]={value:he.tuple(he.Type.IDENT,q.parseIdent(s)),children:{ID:typeof n.id<"u"&&{label:"ID",value:he.tuple(he.Type.ID,n.id)},Issue:{label:"Issue",value:he.tuple(he.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:he.tuple(he.Type.URL,n.url)},Severity:{label:"Severity",value:he.tuple(he.Type.NO_HINT,n.severity)},"Vulnerable Versions":{label:"Vulnerable Versions",value:he.tuple(he.Type.RANGE,n.vulnerable_versions)},"Tree Versions":{label:"Tree Versions",children:[...n.versions].sort(XNe.default.compare).map(c=>({value:he.tuple(he.Type.REFERENCE,c)}))},Dependents:{label:"Dependents",children:je.sortMap(n.dependents,c=>q.stringifyLocator(c)).map(c=>({value:he.tuple(he.Type.LOCATOR,c)}))}}};return r}function cz(t,e,{all:r,environment:s}){let a=[],n=r?t.workspaces:[e],c=["all","production"].includes(s),f=["all","development"].includes(s);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!f:!c)||a.push({workspace:p,dependency:h});return a}function uz(t,e,{recursive:r}){let s=new Map,a=new Set,n=[],c=(f,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let E=t.storedPackages.get(h);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");if(q.ensureDevirtualizedLocator(E).reference.startsWith("npm:")&&E.version!==null){let S=q.stringifyIdent(E),P=je.getMapWithDefault(s,S);je.getArrayWithDefault(P,E.version).push(f)}if(r)for(let S of E.dependencies.values())n.push([E,S])};for(let{workspace:f,dependency:p}of e)n.push([f.anchoredLocator,p]);for(;n.length>0;){let[f,p]=n.shift();c(f,p)}return s}var S1=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=ge.String("--environment","all",{description:"Which environments to cover",validator:po(nP)});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.noDeprecations=ge.Boolean("--no-deprecations",!1,{description:"Don't warn about deprecated packages"});this.severity=ge.String("--severity","info",{description:"Minimal severity requested for packages to be displayed",validator:po(iP)});this.excludes=ge.Array("--exclude",[],{description:"Array of glob patterns of packages to exclude from audit"});this.ignores=ge.Array("--ignore",[],{description:"Array of glob patterns of advisory ID's to ignore in the audit report"})}static{this.paths=[["npm","audit"]]}static{this.usage=ot.Usage({description:"perform a vulnerability audit against the installed packages",details:` - This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths). - - For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`. - - Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${v1.map(r=>`\`${r}\``).join(", ")}. - - If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages. - - If certain packages produce false positives for a particular environment, the \`--exclude\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \`npmAuditExcludePackages\` option. - - If particular advisories are needed to be ignored, the \`--ignore\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \`npmAuditIgnoreAdvisories\` option. - - To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why package\` to get more information as to who depends on them. - `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"],["Exclude certain packages","yarn npm audit --exclude package1 --exclude package2"],["Ignore specific advisories","yarn npm audit --ignore 1234567 --ignore 7654321"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState();let n=cz(s,a,{all:this.all,environment:this.environment}),c=uz(s,n,{recursive:this.recursive}),f=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[N,U]of c)f.some(W=>fz.default.isMatch(N,W))||(p[N]=[...U.keys()]);let h=hi.getAuditRegistry({configuration:r}),E,C=await uA.start({configuration:r,stdout:this.context.stdout},async()=>{let N=an.post("/-/npm/v1/security/advisories/bulk",p,{authType:an.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([te,ie])=>{let Ae=await an.getPackageMetadata(q.parseIdent(te),{project:s});return je.mapAndFilter(ie,ce=>{let{deprecated:me}=Ae.versions[ce];return me?[te,ce,me]:je.mapAndFilter.skip})})),W=await N;for(let[te,ie,Ae]of U.flat(1))Object.hasOwn(W,te)&&W[te].some(ce=>Or.satisfiesWithPrereleases(ie,ce.vulnerable_versions))||(W[te]??=[],W[te].push({id:`${te} (deprecation)`,title:(typeof Ae=="string"?Ae:"").trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:ie}));E=W});if(C.hasErrors())return C.exitCode();let S=az(this.severity),P=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),I=Object.create(null);for(let[N,U]of Object.entries(E)){let W=U.filter(te=>!fz.default.isMatch(`${te.id}`,P)&&S.has(te.severity));W.length>0&&(I[N]=W.map(te=>{let ie=c.get(N);if(typeof ie>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let Ae=[...ie.keys()].filter(me=>Or.satisfiesWithPrereleases(me,te.vulnerable_versions)),ce=new Map;for(let me of Ae)for(let pe of ie.get(me))ce.set(pe.locatorHash,pe);return{...te,versions:Ae,dependents:[...ce.values()]}}))}let R=Object.keys(I).length>0;return R?(Qs.emitTree(lz(I),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ot.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async N=>{N.reportInfo(1,"No audit suggestions")}),R?1:0)}};Ve();Ve();bt();Wt();var Az=et(Ai()),pz=Ie("util"),D1=class extends ut{constructor(){super(...arguments);this.fields=ge.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=ge.Rest()}static{this.paths=[["npm","info"]]}static{this.usage=ot.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command fetches information about a package from the npm registry and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react@16.12.0","yarn npm info react@16.12.0"],["Show all available information about react@next","yarn npm info react@next"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s}=await Tt.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],c=!1,f=await Ot.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let E;if(h==="."){let ie=s.topLevelWorkspace;if(!ie.manifest.name)throw new nt(`Missing ${he.pretty(r,"name",he.Type.CODE)} field in ${ue.fromPortablePath(K.join(ie.cwd,Er.manifest))}`);E=q.makeDescriptor(ie.manifest.name,"unknown")}else E=q.parseDescriptor(h);let C=an.getIdentUrl(E),S=hz(await an.get(C,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:an.customPackageError})),P=Object.keys(S.versions).sort(Az.default.compareLoose),R=S["dist-tags"].latest||P[P.length-1],N=Or.validRange(E.range);if(N){let ie=Az.default.maxSatisfying(P,N);ie!==null?R=ie:(p.reportWarning(0,`Unmet range ${q.prettyRange(r,E.range)}; falling back to the latest version`),c=!0)}else Object.hasOwn(S["dist-tags"],E.range)?R=S["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${q.prettyRange(r,E.range)}; falling back to the latest version`),c=!0);let U=S.versions[R],W={...S,...U,version:R,versions:P},te;if(a!==null){te={};for(let ie of a){let Ae=W[ie];if(typeof Ae<"u")te[ie]=Ae;else{p.reportWarning(1,`The ${he.pretty(r,ie,he.Type.CODE)} field doesn't exist inside ${q.prettyIdent(r,E)}'s information`),c=!0;continue}}}else this.json||(delete W.dist,delete W.readme,delete W.users),te=W;p.reportJson(te),this.json||n.push(te)}});pz.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||c)&&this.context.stdout.write(` -`),this.context.stdout.write(`${(0,pz.inspect)(p,{depth:1/0,colors:!0,compact:!1})} -`);return f.exitCode()}};function hz(t){if(Array.isArray(t)){let e=[];for(let r of t)r=hz(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let s=hz(t[r]);s&&(e[r]=s)}return e}else return t||null}Ve();Ve();Wt();var $Ne=et(nS()),b1=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Login to the publish registry"});this.alwaysAuth=ge.Boolean("--always-auth",{description:"Set the npmAlwaysAuth configuration"})}static{this.paths=[["npm","login"]]}static{this.usage=ot.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),s=await TL({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ot.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let c=await ejt({configuration:r,registry:s,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),f=await XHt(s,c,r);return await $Ht(s,f,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};async function TL({scope:t,publish:e,configuration:r,cwd:s}){return t&&e?hi.getScopeRegistry(t,{configuration:r,type:hi.RegistryType.PUBLISH_REGISTRY}):t?hi.getScopeRegistry(t,{configuration:r}):e?hi.getPublishRegistry((await eC(r,s)).manifest,{configuration:r}):hi.getDefaultRegistry({configuration:r})}async function XHt(t,e,r){let s=`/-/user/org.couchdb.user:${encodeURIComponent(e.name)}`,a={_id:`org.couchdb.user:${e.name}`,name:e.name,password:e.password,type:"user",roles:[],date:new Date().toISOString()},n={attemptedAs:e.name,configuration:r,registry:t,jsonResponse:!0,authType:an.AuthType.NO_AUTH};try{return(await an.put(s,a,n)).token}catch(E){if(!(E.originalError?.name==="HTTPError"&&E.originalError?.response.statusCode===409))throw E}let c={...n,authType:an.AuthType.NO_AUTH,headers:{authorization:`Basic ${Buffer.from(`${e.name}:${e.password}`).toString("base64")}`}},f=await an.get(s,c);for(let[E,C]of Object.entries(f))(!a[E]||E==="roles")&&(a[E]=C);let p=`${s}/-rev/${a._rev}`;return(await an.put(p,a,c)).token}async function $Ht(t,e,{alwaysAuth:r,scope:s}){let a=c=>f=>{let p=je.isIndexableObject(f)?f:{},h=p[c],E=je.isIndexableObject(h)?h:{};return{...p,[c]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=s?{npmScopes:a(s)}:{npmRegistries:a(t)};return await ze.updateHomeConfiguration(n)}async function ejt({configuration:t,registry:e,report:r,stdin:s,stdout:a}){r.reportInfo(0,`Logging in to ${he.pretty(t,e,he.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let c=await(0,$Ne.prompt)([{type:"input",name:"name",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:s,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:s,stdout:a}]);return r.reportSeparator(),c}Ve();Ve();Wt();var P1=new Set(["npmAuthIdent","npmAuthToken"]),x1=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=ge.Boolean("-A,--all",!1,{description:"Logout of all registries"})}static{this.paths=[["npm","logout"]]}static{this.usage=ot.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),s=async()=>{let n=await TL({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),c=await ze.find(this.context.cwd,this.context.plugins),f=q.makeIdent(this.scope??null,"pkg");return!hi.getAuthConfiguration(n,{configuration:c,ident:f}).get("npmAuthToken")};return(await Ot.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await rjt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await eOe("npmScopes",this.scope),await s()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let c=await TL({configuration:r,cwd:this.context.cwd,publish:this.publish});await eOe("npmRegistries",c),await s()?n.reportInfo(0,`Successfully logged out from ${c}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};function tjt(t,e){let r=t[e];if(!je.isIndexableObject(r))return!1;let s=new Set(Object.keys(r));if([...P1].every(n=>!s.has(n)))return!1;for(let n of P1)s.delete(n);if(s.size===0)return t[e]=void 0,!0;let a={...r};for(let n of P1)delete a[n];return t[e]=a,!0}async function rjt(){let t=e=>{let r=!1,s=je.isIndexableObject(e)?{...e}:{};s.npmAuthToken&&(delete s.npmAuthToken,r=!0);for(let a of Object.keys(s))tjt(s,a)&&(r=!0);if(Object.keys(s).length!==0)return r?s:e};return await ze.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function eOe(t,e){return await ze.updateHomeConfiguration({[t]:r=>{let s=je.isIndexableObject(r)?r:{};if(!Object.hasOwn(s,e))return r;let a=s[e],n=je.isIndexableObject(a)?a:{},c=new Set(Object.keys(n));if([...P1].every(p=>!c.has(p)))return r;for(let p of P1)c.delete(p);if(c.size===0)return Object.keys(s).length===1?void 0:{...s,[e]:void 0};let f={};for(let p of P1)f[p]=void 0;return{...s,[e]:{...n,...f}}}})}Ve();Wt();var k1=class extends ut{constructor(){super(...arguments);this.access=ge.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=ge.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=ge.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=ge.String("--otp",{description:"The OTP token to use with the command"});this.provenance=ge.Boolean("--provenance",!1,{description:"Generate provenance for the package. Only available in GitHub Actions and GitLab CI. Can be set globally through the `npmPublishProvenance` setting or the `YARN_NPM_CONFIG_PROVENANCE` environment variable, or per-package through the `publishConfig.provenance` field in package.json."})}static{this.paths=[["npm","publish"]]}static{this.usage=ot.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overridden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);if(a.manifest.private)throw new nt("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new nt("Workspaces must have valid names and versions to be published on an external registry");await s.restoreInstallState();let n=a.manifest.name,c=a.manifest.version,f=hi.getPublishRegistry(a.manifest,{configuration:r});return(await Ot.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let E=await an.get(an.getIdentUrl(n),{configuration:r,registry:f,ident:n,jsonResponse:!0});if(!Object.hasOwn(E,"versions"))throw new Yt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(E.versions,c)){h.reportWarning(0,`Registry already knows about version ${c}; skipping.`);return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await In.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await IA.prepareForPack(a,{report:h},async()=>{let E=await IA.genPackList(a);for(let N of E)h.reportInfo(null,N);let C=await IA.genPackStream(a,E),S=await je.bufferStream(C),P=await B1.getGitHead(a.cwd),I=!1;a.manifest.publishConfig&&"provenance"in a.manifest.publishConfig?(I=!!a.manifest.publishConfig.provenance,I?h.reportInfo(null,"Generating provenance statement because `publishConfig.provenance` field is set."):h.reportInfo(null,"Skipping provenance statement because `publishConfig.provenance` field is set to false.")):this.provenance?(I=!0,h.reportInfo(null,"Generating provenance statement because `--provenance` flag is set.")):r.get("npmPublishProvenance")&&(I=!0,h.reportInfo(null,"Generating provenance statement because `npmPublishProvenance` setting is set."));let R=await B1.makePublishBody(a,S,{access:this.access,tag:this.tag,registry:f,gitHead:P,provenance:I});await an.put(an.getIdentUrl(n),R,{configuration:r,registry:f,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};Ve();Wt();var tOe=et(Ai());Ve();bt();Wt();var Q1=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String({required:!1})}static{this.paths=[["npm","tag","list"]]}static{this.usage=ot.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` - This command will list all tags of a package from the npm registry. - - If the package is not specified, Yarn will default to the current workspace. - `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n;if(typeof this.package<"u")n=q.parseIdent(this.package);else{if(!a)throw new ar(s.cwd,this.context.cwd);if(!a.manifest.name)throw new nt(`Missing 'name' field in ${ue.fromPortablePath(K.join(a.cwd,Er.manifest))}`);n=a.manifest.name}let c=await oP(n,r),p={children:je.sortMap(Object.entries(c),([h])=>h).map(([h,E])=>({value:he.tuple(he.Type.RESOLUTION,{descriptor:q.makeDescriptor(n,h),locator:q.makeLocator(n,E)})}))};return Qs.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};async function oP(t,e){let r=`/-/package${an.getIdentUrl(t)}/dist-tags`;return an.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:an.customPackageError})}var T1=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}static{this.paths=[["npm","tag","add"]]}static{this.usage=ot.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` - This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten. - `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);let n=q.parseDescriptor(this.package,!0),c=n.range;if(!tOe.default.valid(c))throw new nt(`The range ${he.pretty(r,n.range,he.Type.RANGE)} must be a valid semver version`);let f=hi.getPublishRegistry(a.manifest,{configuration:r}),p=he.pretty(r,n,he.Type.IDENT),h=he.pretty(r,c,he.Type.RANGE),E=he.pretty(r,this.tag,he.Type.CODE);return(await Ot.start({configuration:r,stdout:this.context.stdout},async S=>{let P=await oP(n,r);Object.hasOwn(P,this.tag)&&P[this.tag]===c&&S.reportWarning(0,`Tag ${E} is already set to version ${h}`);let I=`/-/package${an.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await an.put(I,c,{configuration:r,registry:f,ident:n,jsonRequest:!0,jsonResponse:!0}),S.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};Ve();Wt();var R1=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}static{this.paths=[["npm","tag","remove"]]}static{this.usage=ot.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` - This command will remove a tag from a package from the npm registry. - `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]})}async execute(){if(this.tag==="latest")throw new nt("The 'latest' tag cannot be removed.");let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);let n=q.parseIdent(this.package),c=hi.getPublishRegistry(a.manifest,{configuration:r}),f=he.pretty(r,this.tag,he.Type.CODE),p=he.pretty(r,n,he.Type.IDENT),h=await oP(n,r);if(!Object.hasOwn(h,this.tag))throw new nt(`${f} is not a tag of package ${p}`);return(await Ot.start({configuration:r,stdout:this.context.stdout},async C=>{let S=`/-/package${an.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await an.del(S,{configuration:r,registry:c,ident:n,jsonResponse:!0}),C.reportInfo(0,`Tag ${f} removed from package ${p}`)})).exitCode()}};Ve();Ve();Wt();var F1=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Print username for the publish registry"})}static{this.paths=[["npm","whoami"]]}static{this.usage=ot.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),s;return this.scope&&this.publish?s=hi.getScopeRegistry(this.scope,{configuration:r,type:hi.RegistryType.PUBLISH_REGISTRY}):this.scope?s=hi.getScopeRegistry(this.scope,{configuration:r}):this.publish?s=hi.getPublishRegistry((await eC(r,this.context.cwd)).manifest,{configuration:r}):s=hi.getDefaultRegistry({configuration:r}),(await Ot.start({configuration:r,stdout:this.context.stdout},async n=>{let c;try{c=await an.get("/-/whoami",{configuration:r,registry:s,authType:an.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?q.makeIdent(this.scope,""):void 0})}catch(f){if(f.response?.statusCode===401||f.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw f}n.reportInfo(0,c.username)})).exitCode()}};var njt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmPublishProvenance:{description:"Whether to generate provenance for the published packages",type:"BOOLEAN",default:!1},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[S1,D1,b1,x1,k1,T1,Q1,R1,F1]},ijt=njt;var wz={};Vt(wz,{PatchCommand:()=>U1,PatchCommitCommand:()=>_1,PatchFetcher:()=>fP,PatchResolver:()=>AP,default:()=>wjt,patchUtils:()=>hy});Ve();Ve();bt();rA();var hy={};Vt(hy,{applyPatchFile:()=>FL,diffFolders:()=>Iz,ensureUnpatchedDescriptor:()=>dz,ensureUnpatchedLocator:()=>OL,extractPackageToDisk:()=>Ez,extractPatchFlags:()=>lOe,isParentRequired:()=>yz,isPatchDescriptor:()=>NL,isPatchLocator:()=>Tg,loadPatchFiles:()=>uP,makeDescriptor:()=>LL,makeLocator:()=>mz,makePatchHash:()=>Cz,parseDescriptor:()=>lP,parseLocator:()=>cP,parsePatchFile:()=>aP,unpatchDescriptor:()=>Ejt,unpatchLocator:()=>Ijt});Ve();bt();Ve();bt();var sjt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function N1(t){return K.relative(vt.root,K.resolve(vt.root,ue.toPortablePath(t)))}function ojt(t){let e=t.trim().match(sjt);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var ajt=420,ljt=493;var rOe=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),cjt=t=>({header:ojt(t),parts:[]}),ujt={"@":"header","-":"deletion","+":"insertion"," ":"context","\\":"pragma",undefined:"context"};function fjt(t){let e=[],r=rOe(),s="parsing header",a=null,n=null;function c(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function f(){c(),e.push(r),r=rOe()}for(let p=0;p0?"patch":"mode change",W=null;switch(U){case"rename":{if(!E||!C)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:s,fromPath:N1(E),toPath:N1(C)}),W=C}break;case"file deletion":{let te=a||I;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:s,hunk:N&&N[0]||null,path:N1(te),mode:RL(p),hash:S})}break;case"file creation":{let te=n||R;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:s,hunk:N&&N[0]||null,path:N1(te),mode:RL(h),hash:P})}break;case"patch":case"mode change":W=R||n;break;default:je.assertNever(U);break}W&&c&&f&&c!==f&&e.push({type:"mode change",semverExclusivity:s,path:N1(W),oldMode:RL(c),newMode:RL(f)}),W&&N&&N.length&&e.push({type:"patch",semverExclusivity:s,path:N1(W),hunks:N,beforeHash:S,afterHash:P})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function RL(t){let e=parseInt(t,8)&511;if(e!==ajt&&e!==ljt)throw new Error(`Unexpected file mode string: ${t}`);return e}function aP(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),Ajt(fjt(e))}function pjt(t){let e=0,r=0;for(let{type:s,lines:a}of t.parts)switch(s){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:je.assertNever(s);break}if(e!==t.header.original.length||r!==t.header.patched.length){let s=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${s(t.header.original.length)} ${s(t.header.patched.length)} @@, got @@ ${s(e)} ${s(r)} @@)`)}}Ve();bt();var O1=class extends Error{constructor(r,s){super(`Cannot apply hunk #${r+1}`);this.hunk=s}};async function L1(t,e,r){let s=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,s.atime,s.mtime)}async function FL(t,{baseFs:e=new Yn,dryRun:r=!1,version:s=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&s!==null&&!Or.satisfiesWithPrereleases(s,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await L1(e,K.dirname(a.path),async()=>{await e.unlinkPromise(a.path)});break;case"rename":if(r){if(!e.existsSync(a.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${a.fromPath}`)}else await L1(e,K.dirname(a.fromPath),async()=>{await L1(e,K.dirname(a.toPath),async()=>{await L1(e,a.fromPath,async()=>(await e.movePromise(a.fromPath,a.toPath),a.toPath))})});break;case"file creation":if(r){if(e.existsSync(a.path))throw new Error(`Trying to create a file that already exists: ${a.path}`)}else{let n=a.hunk?a.hunk.parts[0].lines.join(` -`)+(a.hunk.parts[0].noNewlineAtEndOfFile?"":` -`):"";await e.mkdirpPromise(K.dirname(a.path),{chmod:493,utimes:[fi.SAFE_TIME,fi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,fi.SAFE_TIME,fi.SAFE_TIME)}break;case"patch":await L1(e,a.path,async()=>{await djt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let c=(await e.statPromise(a.path)).mode;if(nOe(a.newMode)!==nOe(c))continue;await L1(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:je.assertNever(a);break}}function nOe(t){return(t&64)>0}function iOe(t){return t.replace(/\s+$/,"")}function gjt(t,e){return iOe(t)===iOe(e)}async function djt({hunks:t,path:e},{baseFs:r,dryRun:s=!1}){let a=await r.statSync(e).mode,c=(await r.readFileSync(e,"utf8")).split(/\n/),f=[],p=0,h=0;for(let C of t){let S=Math.max(h,C.header.patched.start+p),P=Math.max(0,S-h),I=Math.max(0,c.length-S-C.header.original.length),R=Math.max(P,I),N=0,U=0,W=null;for(;N<=R;){if(N<=P&&(U=S-N,W=sOe(C,c,U),W!==null)){N=-N;break}if(N<=I&&(U=S+N,W=sOe(C,c,U),W!==null))break;N+=1}if(W===null)throw new O1(t.indexOf(C),C);f.push(W),p+=N,h=U+C.header.original.length}if(s)return;let E=0;for(let C of f)for(let S of C)switch(S.type){case"splice":{let P=S.index+E;c.splice(P,S.numToDelete,...S.linesToInsert),E+=S.linesToInsert.length-S.numToDelete}break;case"pop":c.pop();break;case"push":c.push(S.line);break;default:je.assertNever(S);break}await r.writeFilePromise(e,c.join(` -`),{mode:a})}function sOe(t,e,r){let s=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let c=e[r];if(c==null||!gjt(c,n))return null;r+=1}a.type==="deletion"&&(s.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&s.push({type:"push",line:""}))}break;case"insertion":s.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&s.push({type:"pop"});break;default:je.assertNever(a.type);break}return s}var yjt=/^builtin<([^>]+)>$/;function M1(t,e){let{protocol:r,source:s,selector:a,params:n}=q.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(s===null)throw new Error("Patch locators must explicitly define their source");let c=a?a.split(/&/).map(E=>ue.toPortablePath(E)):[],f=n&&typeof n.locator=="string"?q.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(s);return{parentLocator:f,sourceItem:h,patchPaths:c,sourceVersion:p}}function NL(t){return t.range.startsWith("patch:")}function Tg(t){return t.reference.startsWith("patch:")}function lP(t){let{sourceItem:e,...r}=M1(t.range,q.parseDescriptor);return{...r,sourceDescriptor:e}}function cP(t){let{sourceItem:e,...r}=M1(t.reference,q.parseLocator);return{...r,sourceLocator:e}}function Ejt(t){let{sourceItem:e}=M1(t.range,q.parseDescriptor);return e}function Ijt(t){let{sourceItem:e}=M1(t.reference,q.parseLocator);return e}function dz(t){if(!NL(t))return t;let{sourceItem:e}=M1(t.range,q.parseDescriptor);return e}function OL(t){if(!Tg(t))return t;let{sourceItem:e}=M1(t.reference,q.parseLocator);return e}function oOe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:s,patchHash:a},n){let c=t!==null?{locator:q.stringifyLocator(t)}:{},f=typeof s<"u"?{version:s}:{},p=typeof a<"u"?{hash:a}:{};return q.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...f,...p,...c}})}function LL(t,{parentLocator:e,sourceDescriptor:r,patchPaths:s}){return q.makeDescriptor(t,oOe({parentLocator:e,sourceItem:r,patchPaths:s},q.stringifyDescriptor))}function mz(t,{parentLocator:e,sourcePackage:r,patchPaths:s,patchHash:a}){return q.makeLocator(t,oOe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:s,patchHash:a},q.stringifyLocator))}function aOe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:s},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let c=a.match(yjt);return c!==null?s(c[1]):a.startsWith("~/")?r(a.slice(2)):K.isAbsolute(a)?t(a):e(a)}function lOe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function yz(t){return aOe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function uP(t,e,r){let s=t!==null?await r.fetcher.fetch(t,r):null,a=s&&s.localPath?{packageFs:new Sn(vt.root),prefixPath:K.relative(vt.root,s.localPath)}:s;s&&s!==a&&s.releaseFs&&s.releaseFs();let n=await je.releaseAfterUseAsync(async()=>await Promise.all(e.map(async c=>{let f=lOe(c),p=await aOe({onAbsolute:async h=>await le.readFilePromise(h,"utf8"),onRelative:async h=>{if(a===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await a.packageFs.readFilePromise(K.join(a.prefixPath,h),"utf8")},onProject:async h=>await le.readFilePromise(K.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},c);return{...f,source:p}})));for(let c of n)typeof c.source=="string"&&(c.source=c.source.replace(/\r\n?/g,` -`));return n}async function Ez(t,{cache:e,project:r}){let s=r.storedPackages.get(t.locatorHash);if(typeof s>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=OL(t),n=r.storedChecksums,c=new Yi,f=await le.mktempPromise(),p=K.join(f,"source"),h=K.join(f,"user"),E=K.join(f,".yarn-patch.json"),C=r.configuration.makeFetcher(),S=[];try{let P,I;if(t.locatorHash===a.locatorHash){let R=await C.fetch(t,{cache:e,project:r,fetcher:C,checksums:n,report:c});S.push(()=>R.releaseFs?.()),P=R,I=R}else P=await C.fetch(t,{cache:e,project:r,fetcher:C,checksums:n,report:c}),S.push(()=>P.releaseFs?.()),I=await C.fetch(t,{cache:e,project:r,fetcher:C,checksums:n,report:c}),S.push(()=>I.releaseFs?.());await Promise.all([le.copyPromise(p,P.prefixPath,{baseFs:P.packageFs}),le.copyPromise(h,I.prefixPath,{baseFs:I.packageFs}),le.writeJsonPromise(E,{locator:q.stringifyLocator(t),version:s.version})])}finally{for(let P of S)P()}return le.detachTemp(f),h}async function Iz(t,e){let r=ue.fromPortablePath(t).replace(/\\/g,"/"),s=ue.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Gr.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,s],{cwd:ue.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""}});if(n.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. -The following error was reported by 'git': -${n}`);let c=r.startsWith("/")?f=>f.slice(1):f=>f;return a.replace(new RegExp(`(a|b)(${je.escapeRegExp(`/${c(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${je.escapeRegExp(`/${c(s)}/`)}`,"g"),"$1/").replace(new RegExp(je.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(je.escapeRegExp(`${s}/`),"g"),"")}function Cz(t,e){let r=[];for(let{source:s}of t){if(s===null)continue;let a=aP(s);for(let n of a){let{semverExclusivity:c,...f}=n;c!==null&&e!==null&&!Or.satisfiesWithPrereleases(e,c)||r.push(JSON.stringify(f))}}return Nn.makeHash(`${3}`,...r).slice(0,6)}Ve();function cOe(t,{configuration:e,report:r}){for(let s of t.parts)for(let a of s.lines)switch(s.type){case"context":r.reportInfo(null,` ${he.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${he.pretty(e,a,he.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${he.pretty(e,a,he.Type.ADDED)}`);break;default:je.assertNever(s.type)}}var fP=class{supports(e,r){return!!Tg(e)}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${q.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:q.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:c}}async patchPackage(e,r){let{parentLocator:s,sourceLocator:a,sourceVersion:n,patchPaths:c}=cP(e),f=await uP(s,c,r),p=await le.mktempPromise(),h=K.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),C=q.getIdentVendorPath(e),S=new hs(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await je.releaseAfterUseAsync(async()=>{await S.copyPromise(C,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),S.saveAndClose();for(let{source:P,optional:I}of f){if(P===null)continue;let R=new hs(h,{level:r.project.configuration.get("compressionLevel")}),N=new Sn(K.resolve(vt.root,C),{baseFs:R});try{await FL(aP(P),{baseFs:N,version:n})}catch(U){if(!(U instanceof O1))throw U;let W=r.project.configuration.get("enableInlineHunks"),te=!W&&!I?" (set enableInlineHunks for details)":"",ie=`${q.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,Ae=ce=>{W&&cOe(U.hunk,{configuration:r.project.configuration,report:ce})};if(R.discardAndClose(),I){r.report.reportWarningOnce(66,ie,{reportExtra:Ae});continue}else throw new Yt(66,ie,Ae)}R.saveAndClose()}return new hs(h,{level:r.project.configuration.get("compressionLevel")})}};Ve();var AP=class{supportsDescriptor(e,r){return!!NL(e)}supportsLocator(e,r){return!!Tg(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,s){let{patchPaths:a}=lP(e);return a.every(n=>!yz(n))?e:q.bindDescriptor(e,{locator:q.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:s}=lP(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(s)}}async getCandidates(e,r,s){if(!s.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=lP(e),c=await uP(a,n,s.fetchOptions),f=r.sourceDescriptor;if(typeof f>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=Cz(c,f.version);return[mz(e,{parentLocator:a,sourcePackage:f,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);return{locators:s.filter(c=>c.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:s}=cP(e);return{...await r.resolver.resolve(s,r),...e}}};Ve();bt();Wt();var _1=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.String()}static{this.paths=[["patch-commit"]]}static{this.usage=ot.Usage({description:"generate a patch out of a directory",details:"\n By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\n\n Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState();let n=K.resolve(this.context.cwd,ue.toPortablePath(this.patchFolder)),c=K.join(n,"../source"),f=K.join(n,"../.yarn-patch.json");if(!le.existsSync(c))throw new nt("The argument folder didn't get created by 'yarn patch'");let p=await Iz(c,n),h=await le.readJsonPromise(f),E=q.parseLocator(h.locator,!0);if(!s.storedPackages.has(E.locatorHash))throw new nt("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let C=r.get("patchFolder"),S=K.join(C,`${q.slugifyLocator(E)}.patch`);await le.mkdirPromise(C,{recursive:!0}),await le.writeFilePromise(S,p);let P=[],I=new Map;for(let R of s.storedPackages.values()){if(q.isVirtualLocator(R))continue;let N=R.dependencies.get(E.identHash);if(!N)continue;let U=q.ensureDevirtualizedDescriptor(N),W=dz(U),te=s.storedResolutions.get(W.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!s.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let Ae=s.tryWorkspaceByLocator(R);if(Ae)P.push(Ae);else{let ce=s.originalPackages.get(R.locatorHash);if(!ce)throw new Error("Assertion failed: Expected the original package to have been registered");let me=ce.dependencies.get(N.identHash);if(!me)throw new Error("Assertion failed: Expected the original dependency to have been registered");I.set(me.descriptorHash,me)}}for(let R of P)for(let N of Ht.hardDependencies){let U=R.manifest[N].get(E.identHash);if(!U)continue;let W=LL(U,{parentLocator:null,sourceDescriptor:q.convertLocatorToDescriptor(E),patchPaths:[K.join(Er.home,K.relative(s.cwd,S))]});R.manifest[N].set(U.identHash,W)}for(let R of I.values()){let N=LL(R,{parentLocator:null,sourceDescriptor:q.convertLocatorToDescriptor(E),patchPaths:[K.join(Er.home,K.relative(s.cwd,S))]});s.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:q.stringifyIdent(N),description:R.range}},reference:N.range})}await s.persist()}};Ve();bt();Wt();var U1=class extends ut{constructor(){super(...arguments);this.update=ge.Boolean("-u,--update",!1,{description:"Reapply local patches that already apply to this packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String()}static{this.paths=[["patch"]]}static{this.usage=ot.Usage({description:"prepare a package for patching",details:"\n This command will cause a package to be extracted in a temporary directory intended to be editable at will.\n\n Once you're done with your changes, run `yarn patch-commit -s path` (with `path` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\n\n Calling the command when you already have a patch won't import it by default (in other words, the default behavior is to reset existing patches). However, adding the `-u,--update` flag will import any current patch.\n "})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState();let c=q.parseLocator(this.package);if(c.reference==="unknown"){let f=je.mapAndFilter([...s.storedPackages.values()],p=>p.identHash!==c.identHash?je.mapAndFilter.skip:q.isVirtualLocator(p)?je.mapAndFilter.skip:Tg(p)!==this.update?je.mapAndFilter.skip:p);if(f.length===0)throw new nt("No package found in the project for the given locator");if(f.length>1)throw new nt(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): -${f.map(p=>` -- ${q.prettyLocator(r,p)}`).join("")}`);c=f[0]}if(!s.storedPackages.has(c.locatorHash))throw new nt("No package found in the project for the given locator");await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async f=>{let p=OL(c),h=await Ez(c,{cache:n,project:s});f.reportJson({locator:q.stringifyLocator(p),path:ue.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";f.reportInfo(0,`Package ${q.prettyLocator(r,p)} got extracted with success${E}!`),f.reportInfo(0,`You can now edit the following folder: ${he.pretty(r,ue.fromPortablePath(h),"magenta")}`),f.reportInfo(0,`Once you are done run ${he.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${ue.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};var Cjt={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:"BOOLEAN",default:!1},patchFolder:{description:"Folder where the patch files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/patches"}},commands:[_1,U1],fetchers:[fP],resolvers:[AP]},wjt=Cjt;var Sz={};Vt(Sz,{PnpmLinker:()=>pP,default:()=>Pjt});Ve();bt();Wt();var pP=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let s=this.getCustomDataKey(),a=r.project.linkersCustomData.get(s);if(!a)throw new nt(`The project in ${he.pretty(r.project.configuration,`${r.project.cwd}/package.json`,he.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new nt(`Couldn't find ${q.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let s=this.getCustomDataKey(),a=r.project.linkersCustomData.get(s);if(!a)throw new nt(`The project in ${he.pretty(r.project.configuration,`${r.project.cwd}/package.json`,he.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let c=e,f=e;do{f=c,c=K.dirname(f);let p=a.locatorByPath.get(f);if(p)return p}while(c!==f);return null}makeInstaller(e){return new Bz(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},Bz=class{constructor(e){this.opts=e;this.asyncActions=new je.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=ax(le,{indexPath:K.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,s){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,s);case"HARD":return this.installPackageHard(e,r,s)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,s){let a=K.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?K.join(a,Er.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,s){let a=vjt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,q.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),s.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await le.mkdirPromise(n,{recursive:!0}),await le.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let f=q.isVirtualLocator(e)?q.devirtualizeLocator(e):e,p={manifest:await Ht.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Ht,misc:{hasBindingGyp:mA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(f,e.version),E=mA.extractBuildRequest(e,p,h,{configuration:this.opts.project.configuration});return{packageLocation:n,buildRequest:E}}async attachInternalDependencies(e,r){if(this.opts.project.configuration.get("nodeLinker")!=="pnpm"||!uOe(e,{project:this.opts.project}))return;let s=this.customData.pathsByLocator.get(e.locatorHash);if(typeof s>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${q.stringifyLocator(e)})`);let{dependenciesLocation:a}=s;a&&this.asyncActions.reduce(e.locatorHash,async n=>{await le.mkdirPromise(a,{recursive:!0});let c=await Sjt(a),f=new Map(c),p=[n],h=(C,S)=>{let P=S;uOe(S,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),P=q.devirtualizeLocator(S));let I=this.customData.pathsByLocator.get(P.locatorHash);if(typeof I>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${q.stringifyLocator(S)})`);let R=q.stringifyIdent(C),N=K.join(a,R),U=K.relative(K.dirname(N),I.packageLocation),W=f.get(R);f.delete(R),p.push(Promise.resolve().then(async()=>{if(W){if(W.isSymbolicLink()&&await le.readlinkPromise(N)===U)return;await le.removePromise(N)}await le.mkdirpPromise(K.dirname(N)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await le.symlinkPromise(I.packageLocation,N,"junction"):await le.symlinkPromise(U,N)}))},E=!1;for(let[C,S]of r)C.identHash===e.identHash&&(E=!0),h(C,S);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(q.convertLocatorToDescriptor(e),e),p.push(Djt(a,f)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=fOe(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await le.removePromise(e);else{let r;try{r=new Set(await le.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:s}of this.customData.pathsByLocator.values()){if(!s)continue;let a=K.contains(e,s);if(a===null)continue;let[n]=a.split(K.sep);r.delete(n)}await Promise.all([...r].map(async s=>{await le.removePromise(K.join(e,s))}))}return await this.asyncActions.wait(),await vz(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await vz(Bjt(this.opts.project)),{customData:this.customData}}};function Bjt(t){return K.join(t.cwd,Er.nodeModules)}function fOe(t){return t.configuration.get("pnpmStoreFolder")}function vjt(t,{project:e}){let r=q.slugifyLocator(t),s=fOe(e),a=K.join(s,r,"package"),n=K.join(s,r,Er.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function uOe(t,{project:e}){return!q.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function Sjt(t){let e=new Map,r=[];try{r=await le.readdirPromise(t,{withFileTypes:!0})}catch(s){if(s.code!=="ENOENT")throw s}try{for(let s of r)if(!s.name.startsWith("."))if(s.name.startsWith("@")){let a=await le.readdirPromise(K.join(t,s.name),{withFileTypes:!0});if(a.length===0)e.set(s.name,s);else for(let n of a)e.set(`${s.name}/${n.name}`,n)}else e.set(s.name,s)}catch(s){if(s.code!=="ENOENT")throw s}return e}async function Djt(t,e){let r=[],s=new Set;for(let a of e.keys()){r.push(le.removePromise(K.join(t,a)));let n=q.tryParseIdent(a)?.scope;n&&s.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...s].map(a=>vz(K.join(t,a)))))}async function vz(t){try{await le.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var bjt={configuration:{pnpmStoreFolder:{description:"By default, the store is stored in the 'node_modules/.store' of the project. Sometimes in CI scenario's it is convenient to store this in a different location so it can be cached and reused.",type:"ABSOLUTE_PATH",default:"./node_modules/.store"}},linkers:[pP]},Pjt=bjt;var Tz={};Vt(Tz,{StageCommand:()=>H1,default:()=>_jt,stageUtils:()=>_L});Ve();bt();Wt();Ve();bt();var _L={};Vt(_L,{ActionType:()=>Dz,checkConsensus:()=>ML,expandDirectory:()=>xz,findConsensus:()=>kz,findVcsRoot:()=>bz,genCommitMessage:()=>Qz,getCommitPrefix:()=>AOe,isYarnFile:()=>Pz});bt();var Dz=(n=>(n[n.CREATE=0]="CREATE",n[n.DELETE=1]="DELETE",n[n.ADD=2]="ADD",n[n.REMOVE=3]="REMOVE",n[n.MODIFY=4]="MODIFY",n))(Dz||{});async function bz(t,{marker:e}){do if(!le.existsSync(K.join(t,e)))t=K.dirname(t);else return t;while(t!=="/");return null}function Pz(t,{roots:e,names:r}){if(r.has(K.basename(t)))return!0;do if(!e.has(t))t=K.dirname(t);else return!0;while(t!=="/");return!1}function xz(t){let e=[],r=[t];for(;r.length>0;){let s=r.pop(),a=le.readdirSync(s);for(let n of a){let c=K.resolve(s,n);le.lstatSync(c).isDirectory()?r.push(c):e.push(c)}}return e}function ML(t,e){let r=0,s=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:s+=1);return r>=s}function kz(t){let e=ML(t,/^(\w\(\w+\):\s*)?\w+s/),r=ML(t,/^(\w\(\w+\):\s*)?[A-Z]/),s=ML(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:s}}function AOe(t){return t.useComponent?"chore(yarn): ":""}var xjt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function Qz(t,e){let r=AOe(t),s=[],a=e.slice().sort((n,c)=>n[0]-c[0]);for(;a.length>0;){let[n,c]=a.shift(),f=xjt.get(n);t.useUpperCase&&s.length===0&&(f=`${f[0].toUpperCase()}${f.slice(1)}`),t.useThirdPerson&&(f+="s");let p=[c];for(;a.length>0&&a[0][0]===n;){let[,E]=a.shift();p.push(E)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),s.push(`${f} ${h}`)}return`${r}${s.join(", ")}`}var kjt="Commit generated via `yarn stage`",Qjt=11;async function pOe(t){let{code:e,stdout:r}=await Gr.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function Tjt(t,e){let r=[],s=e.filter(h=>K.basename(h.path)==="package.json");for(let{action:h,path:E}of s){let C=K.relative(t,E);if(h===4){let S=await pOe(t),{stdout:P}=await Gr.execvp("git",["show",`${S}:${C}`],{cwd:t,strict:!0}),I=await Ht.fromText(P),R=await Ht.fromFile(E),N=new Map([...R.dependencies,...R.devDependencies]),U=new Map([...I.dependencies,...I.devDependencies]);for(let[W,te]of U){let ie=q.stringifyIdent(te),Ae=N.get(W);Ae?Ae.range!==te.range&&r.push([4,`${ie} to ${Ae.range}`]):r.push([3,ie])}for(let[W,te]of N)U.has(W)||r.push([2,q.stringifyIdent(te)])}else if(h===0){let S=await Ht.fromFile(E);S.name?r.push([0,q.stringifyIdent(S.name)]):r.push([0,"a package"])}else if(h===1){let S=await pOe(t),{stdout:P}=await Gr.execvp("git",["show",`${S}:${C}`],{cwd:t,strict:!0}),I=await Ht.fromText(P);I.name?r.push([1,q.stringifyIdent(I.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Gr.execvp("git",["log",`-${Qjt}`,"--pretty=format:%s"],{cwd:t}),c=a===0?n.split(/\n/g).filter(h=>h!==""):[],f=kz(c);return Qz(f,r)}var Rjt={0:[" A ","?? "],4:[" M "],1:[" D "]},Fjt={0:["A "],4:["M "],1:["D "]},hOe={async findRoot(t){return await bz(t,{marker:".git"})},async filterChanges(t,e,r,s){let{stdout:a}=await Gr.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),c=s?.staged?Fjt:Rjt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=K.resolve(t,p.slice(3));if(!s?.staged&&h==="?? "&&p.endsWith("/"))return xz(E).map(C=>({action:0,path:C}));{let S=[0,4,1].find(P=>c[P].includes(h));return S!==void 0?[{action:S,path:E}]:[]}})).filter(p=>Pz(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await Tjt(t,e)},async makeStage(t,e){let r=e.map(s=>ue.fromPortablePath(s.path));await Gr.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let s=e.map(a=>ue.fromPortablePath(a.path));await Gr.execvp("git",["add","-N","--",...s],{cwd:t,strict:!0}),await Gr.execvp("git",["commit","-m",`${r} - -${kjt} -`,"--",...s],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(s=>ue.fromPortablePath(s.path));await Gr.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var Njt=[hOe],H1=class extends ut{constructor(){super(...arguments);this.commit=ge.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=ge.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=ge.Boolean("-u,--update",!1,{hidden:!0})}static{this.paths=[["stage"]]}static{this.usage=ot.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s}=await Tt.find(r,this.context.cwd),{driver:a,root:n}=await Ojt(s.cwd),c=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(C=>C.populateYarnPaths,s,C=>{c.push(C)});let f=new Set;for(let C of c)for(let S of Ljt(n,C))f.add(S);let p=new Set([r.get("rcFilename"),Er.lockfile,Er.manifest]),h=await a.filterChanges(n,f,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} -`);else for(let C of h)this.context.stdout.write(`${ue.fromPortablePath(C.path)} -`);else if(this.reset){let C=await a.filterChanges(n,f,p,{staged:!0});C.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,C)}else h.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,h,E):(await a.makeStage(n,h),this.context.stdout.write(E))}};async function Ojt(t){let e=null,r=null;for(let s of Njt)if((r=await s.findRoot(t))!==null){e=s;break}if(e===null||r===null)throw new nt("No stage driver has been found for your current project");return{driver:e,root:r}}function Ljt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let s;try{s=le.statSync(e)}catch{break}if(s.isSymbolicLink())e=K.resolve(K.dirname(e),le.readlinkSync(e));else break}return r}var Mjt={commands:[H1]},_jt=Mjt;var Rz={};Vt(Rz,{default:()=>Vjt});Ve();Ve();bt();var mOe=et(Ai());Ve();var gOe=et(G9()),Ujt="e8e1bd300d860104bb8c58453ffa1eb4",Hjt="OFCNCOG2CU",dOe=async(t,e)=>{let r=q.stringifyIdent(t),a=jjt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},jjt=t=>(0,gOe.default)(Hjt,Ujt,{requester:{async send(r){try{let s=await An.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:s.body,isTimedOut:!1,status:s.statusCode}}catch(s){return{content:s.response.body,isTimedOut:!1,status:s.response.statusCode}}}}});var yOe=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,qjt=async(t,e,r,s)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??(le.existsSync(K.join(t.cwd,"tsconfig.json"))||le.existsSync(K.join(a.cwd,"tsconfig.json")))))return;let f=n.makeResolver(),p={project:a,resolver:f,report:new Yi};if(!await dOe(r,n))return;let E=yOe(r),C=q.parseRange(r.range).selector;if(!Or.validRange(C)){let N=n.normalizeDependency(r),U=await f.getCandidates(N,{},p);C=q.parseRange(U[0].reference).selector}let S=mOe.default.coerce(C);if(S===null)return;let P=`${Xu.Modifier.CARET}${S.major}`,I=q.makeDescriptor(q.makeIdent("types",E),P),R=je.mapAndFind(a.workspaces,N=>{let U=N.manifest.dependencies.get(r.identHash)?.descriptorHash,W=N.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&W!==r.descriptorHash)return je.mapAndFind.skip;let te=[];for(let ie of Ht.allDependencies){let Ae=N.manifest[ie].get(I.identHash);typeof Ae>"u"||te.push([ie,Ae])}return te.length===0?je.mapAndFind.skip:te});if(typeof R<"u")for(let[N,U]of R)t.manifest[N].set(U.identHash,U);else{try{let N=n.normalizeDependency(I);if((await f.getCandidates(N,{},p)).length===0)return}catch{return}t.manifest[Xu.Target.DEVELOPMENT].set(I.identHash,I)}},Gjt=async(t,e,r)=>{if(r.scope==="types")return;let{project:s}=t,{configuration:a}=s;if(!(a.get("tsEnableAutoTypes")??(le.existsSync(K.join(t.cwd,"tsconfig.json"))||le.existsSync(K.join(s.cwd,"tsconfig.json")))))return;let c=yOe(r),f=q.makeIdent("types",c);for(let p of Ht.allDependencies)typeof t.manifest[p].get(f.identHash)>"u"||t.manifest[p].delete(f.identHash)},Wjt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},Yjt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:qjt,afterWorkspaceDependencyRemoval:Gjt,beforeWorkspacePacking:Wjt}},Vjt=Yjt;var Mz={};Vt(Mz,{VersionApplyCommand:()=>Y1,VersionCheckCommand:()=>V1,VersionCommand:()=>K1,default:()=>A6t,versionUtils:()=>W1});Ve();Ve();Wt();var W1={};Vt(W1,{Decision:()=>q1,applyPrerelease:()=>vOe,applyReleases:()=>Lz,applyStrategy:()=>HL,clearVersionFiles:()=>Fz,getUndecidedDependentWorkspaces:()=>gP,getUndecidedWorkspaces:()=>UL,openVersionFile:()=>G1,requireMoreDecisions:()=>c6t,resolveVersionFiles:()=>hP,suggestStrategy:()=>Oz,updateVersionFiles:()=>Nz,validateReleaseDecision:()=>j1});Ve();bt();Bc();Wt();var BOe=et(wOe()),TA=et(Ai()),l6t=/^(>=|[~^]|)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/,q1=(c=>(c.UNDECIDED="undecided",c.DECLINE="decline",c.MAJOR="major",c.MINOR="minor",c.PATCH="patch",c.PRERELEASE="prerelease",c))(q1||{});function j1(t){let e=TA.default.valid(t);return e||je.validateEnum((0,BOe.default)(q1,"UNDECIDED"),t)}async function hP(t,{prerelease:e=null}={}){let r=new Map,s=t.configuration.get("deferredVersionFolder");if(!le.existsSync(s))return r;let a=await le.readdirPromise(s);for(let n of a){if(!n.endsWith(".yml"))continue;let c=K.join(s,n),f=await le.readFilePromise(c,"utf8"),p=cs(f);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let C=q.parseIdent(h),S=t.tryWorkspaceByIdent(C);if(S===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${K.basename(c)} references ${h})`);if(S.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${q.prettyLocator(t.configuration,S.anchoredLocator)})`);let P=S.manifest.raw.stableVersion??S.manifest.version,I=r.get(S),R=HL(P,j1(E));if(R===null)throw new Error(`Assertion failed: Expected ${P} to support being bumped via strategy ${E}`);let N=typeof I<"u"?TA.default.gt(R,I)?R:I:R;r.set(S,N)}}return e&&(r=new Map([...r].map(([n,c])=>[n,vOe(c,{current:n.manifest.version,prerelease:e})]))),r}async function Fz(t){let e=t.configuration.get("deferredVersionFolder");le.existsSync(e)&&await le.removePromise(e)}async function Nz(t,e){let r=new Set(e),s=t.configuration.get("deferredVersionFolder");if(!le.existsSync(s))return;let a=await le.readdirPromise(s);for(let n of a){if(!n.endsWith(".yml"))continue;let c=K.join(s,n),f=await le.readFilePromise(c,"utf8"),p=cs(f),h=p?.releases;if(h){for(let E of Object.keys(h)){let C=q.parseIdent(E),S=t.tryWorkspaceByIdent(C);(S===null||r.has(S))&&delete p.releases[E]}Object.keys(p.releases).length>0?await le.changeFilePromise(c,il(new il.PreserveOrdering(p))):await le.unlinkPromise(c)}}}async function G1(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new nt("This command can only be run from within a Yarn project");let s=await Qa.fetchRoot(r.projectCwd),a=s!==null?await Qa.fetchBase(s,{baseRefs:r.get("changesetBaseRefs")}):null,n=s!==null?await Qa.fetchChangedFiles(s,{base:a.hash,project:t}):[],c=r.get("deferredVersionFolder"),f=n.filter(P=>K.contains(c,P)!==null);if(f.length>1)throw new nt(`Your current branch contains multiple versioning files; this isn't supported: -- ${f.map(P=>ue.fromPortablePath(P)).join(` -- `)}`);let p=new Set(je.mapAndFilter(n,P=>{let I=t.tryWorkspaceByFilePath(P);return I===null?je.mapAndFilter.skip:I}));if(f.length===0&&p.size===0&&!e)return null;let h=f.length===1?f[0]:K.join(c,`${Nn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=le.existsSync(h)?await le.readFilePromise(h,"utf8"):"{}",C=cs(E),S=new Map;for(let P of C.declined||[]){let I=q.parseIdent(P),R=t.getWorkspaceByIdent(I);S.set(R,"decline")}for(let[P,I]of Object.entries(C.releases||{})){let R=q.parseIdent(P),N=t.getWorkspaceByIdent(R);S.set(N,j1(I))}return{project:t,root:s,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(P=>P.manifest.version!==null)),releases:S,async saveAll(){let P={},I=[],R=[];for(let N of t.workspaces){if(N.manifest.version===null)continue;let U=q.stringifyIdent(N.anchoredLocator),W=S.get(N);W==="decline"?I.push(U):typeof W<"u"?P[U]=j1(W):p.has(N)&&R.push(U)}await le.mkdirPromise(K.dirname(h),{recursive:!0}),await le.changeFilePromise(h,il(new il.PreserveOrdering({releases:Object.keys(P).length>0?P:void 0,declined:I.length>0?I:void 0,undecided:R.length>0?R:void 0})))}}}function c6t(t){return UL(t).size>0||gP(t).length>0}function UL(t){let e=new Set;for(let r of t.changedWorkspaces)r.manifest.version!==null&&(t.releases.has(r)||e.add(r));return e}function gP(t,{include:e=new Set}={}){let r=[],s=new Map(je.mapAndFilter([...t.releases],([n,c])=>c==="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(je.mapAndFilter([...t.releases],([n,c])=>c!=="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||s.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let c of Ht.hardDependencies)for(let f of n.manifest.getForScope(c).values()){let p=t.project.tryWorkspaceByDescriptor(f);p!==null&&s.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function Oz(t,e){let r=TA.default.clean(e);for(let s of Object.values(q1))if(s!=="undecided"&&s!=="decline"&&TA.default.inc(t,s)===r)return s;return null}function HL(t,e){if(TA.default.valid(e))return e;if(t===null)throw new nt(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!TA.default.valid(t))throw new nt(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=TA.default.inc(t,e);if(r===null)throw new nt(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function Lz(t,e,{report:r,exact:s}){let a=new Map;for(let n of t.workspaces)for(let c of Ht.allDependencies)for(let f of n.manifest[c].values()){let p=t.tryWorkspaceByDescriptor(f);if(p===null||!e.has(p))continue;je.getArrayWithDefault(a,p).push([n,c,f.identHash])}for(let[n,c]of e){let f=n.manifest.version;n.manifest.version=c,TA.default.prerelease(c)===null?delete n.manifest.raw.stableVersion:n.manifest.raw.stableVersion||(n.manifest.raw.stableVersion=f);let p=n.manifest.name!==null?q.stringifyIdent(n.manifest.name):null;r.reportInfo(0,`${q.prettyLocator(t.configuration,n.anchoredLocator)}: Bumped to ${c}`),r.reportJson({cwd:ue.fromPortablePath(n.cwd),ident:p,oldVersion:f,newVersion:c});let h=a.get(n);if(!(typeof h>"u"))for(let[E,C,S]of h){let P=E.manifest[C].get(S);if(typeof P>"u")throw new Error("Assertion failed: The dependency should have existed");let I=P.range,R=!1;if(I.startsWith(Ei.protocol)&&(I=I.slice(Ei.protocol.length),R=!0,I===n.relativeCwd))continue;let N=I.match(l6t);if(!N){r.reportWarning(0,`Couldn't auto-upgrade range ${I} (in ${q.prettyLocator(t.configuration,E.anchoredLocator)})`);continue}let U=s?`${c}`:`${N[1]}${c}`;R&&(U=`${Ei.protocol}${U}`);let W=q.makeDescriptor(P,U);E.manifest[C].set(S,W)}}}var u6t=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function vOe(t,{current:e,prerelease:r}){let s=new TA.default.SemVer(e),a=s.prerelease.slice(),n=[];s.prerelease=[],s.format()!==t&&(a.length=0);let c=!0,f=r.split(/\./g);for(let p of f){let h=u6t.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():c=!1;else{let E=c?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),c=!1)}}return s.prerelease&&(s.prerelease=[]),`${t}-${n.join(".")}`}var Y1=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=ge.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=ge.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.exact=ge.Boolean("--exact",!1,{description:"Use the exact version of each package, removes any range. Useful for nightly releases where the range might match another version."});this.recursive=ge.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["version","apply"]]}static{this.usage=ot.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` - This command will apply the deferred version changes and remove their definitions from the repository. - - Note that if \`--prerelease\` is set, the given prerelease identifier (by default \`rc.%n\`) will be used on all new versions and the version definitions will be kept as-is. - - By default only the current workspace will be bumped, but you can configure this behavior by using one of: - - - \`--recursive\` to also apply the version bump on its dependencies - - \`--all\` to apply the version bump on all packages in the repository - - Note that this command will also update the \`workspace:\` references across all your local workspaces, thus ensuring that they keep referring to the same workspaces even after the version bump. - `,examples:[["Apply the version change to the local workspace","yarn version apply"],["Apply the version change to all the workspaces in the local workspace","yarn version apply --all"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);if(!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState({restoreResolutions:!1});let c=await Ot.start({configuration:r,json:this.json,stdout:this.context.stdout},async f=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await hP(s,{prerelease:p}),E=new Map;if(this.all)E=h;else{let C=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let S of C){let P=h.get(S);typeof P<"u"&&E.set(S,P)}}if(E.size===0){let C=h.size>0?" Did you want to add --all?":"";f.reportWarning(0,`The current workspace doesn't seem to require a version bump.${C}`);return}Lz(s,E,{report:f,exact:this.exact}),this.dryRun||(p||(this.all?await Fz(s):await Nz(s,[...E.keys()])),f.reportSeparator())});return this.dryRun||c.hasErrors()?c.exitCode():await s.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};Ve();bt();Wt();var jL=et(Ai());var V1=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}static{this.paths=[["version","check"]]}static{this.usage=ot.Usage({category:"Release-related commands",description:"check that all the relevant packages have been bumped",details:"\n **Warning:** This command currently requires Git.\n\n This command will check that all the packages covered by the files listed in argument have been properly bumped or declined to bump.\n\n In the case of a bump, the check will also cover transitive packages - meaning that should `Foo` be bumped, a package `Bar` depending on `Foo` will require a decision as to whether `Bar` will need to be bumped. This check doesn't cross packages that have declined to bump.\n\n In case no arguments are passed to the function, the list of modified files will be generated by comparing the HEAD against `master`.\n ",examples:[["Check whether the modified packages need a bump","yarn version check"]]})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){iw(this.context);let{Gem:r}=await Promise.resolve().then(()=>(YF(),cY)),{ScrollableItems:s}=await Promise.resolve().then(()=>(zF(),JF)),{FocusRequest:a}=await Promise.resolve().then(()=>(fY(),PPe)),{useListInput:n}=await Promise.resolve().then(()=>(KF(),xPe)),{renderForm:c}=await Promise.resolve().then(()=>(eN(),$F)),{Box:f,Text:p}=await Promise.resolve().then(()=>et(Vc())),{default:h,useCallback:E,useState:C}=await Promise.resolve().then(()=>et(hn())),S=await ze.find(this.context.cwd,this.context.plugins),{project:P,workspace:I}=await Tt.find(S,this.context.cwd);if(!I)throw new ar(P.cwd,this.context.cwd);await P.restoreInstallState();let R=await G1(P);if(R===null||R.releaseRoots.size===0)return 0;if(R.root===null)throw new nt("This command can only be run on Git repositories");let N=()=>h.createElement(f,{flexDirection:"row",paddingBottom:1},h.createElement(f,{flexDirection:"column",width:60},h.createElement(f,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(f,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(f,{flexDirection:"column"},h.createElement(f,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(f,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:me,active:pe,decision:Be,setDecision:Ce})=>{let g=me.manifest.raw.stableVersion??me.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${q.prettyLocator(S,me.anchoredLocator)})`);if(jL.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let we=["undecided","decline","patch","minor","major"];n(Be,we,{active:pe,minus:"left",plus:"right",set:Ce});let ye=Be==="undecided"?h.createElement(p,{color:"yellow"},g):Be==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},jL.default.valid(Be)?Be:jL.default.inc(g,Be)));return h.createElement(f,{flexDirection:"column"},h.createElement(f,null,h.createElement(p,null,q.prettyLocator(S,me.anchoredLocator)," - ",ye)),h.createElement(f,null,we.map(fe=>h.createElement(f,{key:fe,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:fe===Be})," ",fe)))))},W=me=>{let pe=new Set(R.releaseRoots),Be=new Map([...me].filter(([Ce])=>pe.has(Ce)));for(;;){let Ce=gP({project:R.project,releases:Be}),g=!1;if(Ce.length>0){for(let[we]of Ce)if(!pe.has(we)){pe.add(we),g=!0;let ye=me.get(we);typeof ye<"u"&&Be.set(we,ye)}}if(!g)break}return{relevantWorkspaces:pe,relevantReleases:Be}},te=()=>{let[me,pe]=C(()=>new Map(R.releases)),Be=E((Ce,g)=>{let we=new Map(me);g!=="undecided"?we.set(Ce,g):we.delete(Ce);let{relevantReleases:ye}=W(we);pe(ye)},[me,pe]);return[me,Be]},ie=({workspaces:me,releases:pe})=>{let Be=[];Be.push(`${me.size} total`);let Ce=0,g=0;for(let we of me){let ye=pe.get(we);typeof ye>"u"?g+=1:ye!=="decline"&&(Ce+=1)}return Be.push(`${Ce} release${Ce===1?"":"s"}`),Be.push(`${g} remaining`),h.createElement(p,{color:"yellow"},Be.join(", "))},ce=await c(({useSubmit:me})=>{let[pe,Be]=te();me(pe);let{relevantWorkspaces:Ce}=W(pe),g=new Set([...Ce].filter(se=>!R.releaseRoots.has(se))),[we,ye]=C(0),fe=E(se=>{switch(se){case a.BEFORE:ye(we-1);break;case a.AFTER:ye(we+1);break}},[we,ye]);return h.createElement(f,{flexDirection:"column"},h.createElement(N,null),h.createElement(f,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(f,{flexDirection:"column",marginTop:1,paddingLeft:2},[...R.changedFiles].map(se=>h.createElement(f,{key:se},h.createElement(p,null,h.createElement(p,{color:"grey"},ue.fromPortablePath(R.root)),ue.sep,ue.relative(ue.fromPortablePath(R.root),ue.fromPortablePath(se)))))),R.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(f,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(f,{marginTop:1},h.createElement(ie,{workspaces:R.releaseRoots,releases:pe})):null,h.createElement(f,{marginTop:1,flexDirection:"column"},h.createElement(s,{active:we%2===0,radius:1,size:2,onFocusRequest:fe},[...R.releaseRoots].map(se=>h.createElement(U,{key:se.cwd,workspace:se,decision:pe.get(se)||"undecided",setDecision:X=>Be(se,X)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(f,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(f,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(f,{marginTop:1},h.createElement(ie,{workspaces:g,releases:pe})):null,h.createElement(f,{marginTop:1,flexDirection:"column"},h.createElement(s,{active:we%2===1,radius:2,size:2,onFocusRequest:fe},[...g].map(se=>h.createElement(U,{key:se.cwd,workspace:se,decision:pe.get(se)||"undecided",setDecision:X=>Be(se,X)}))))):null)},{versionFile:R},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ce>"u")return 1;R.releases.clear();for(let[me,pe]of ce)R.releases.set(me,pe);await R.saveAll()}async executeStandard(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);return await s.restoreInstallState(),(await Ot.start({configuration:r,stdout:this.context.stdout},async c=>{let f=await G1(s);if(f===null||f.releaseRoots.size===0)return;if(f.root===null)throw new nt("This command can only be run on Git repositories");if(c.reportInfo(0,`Your PR was started right after ${he.pretty(r,f.baseHash.slice(0,7),"yellow")} ${he.pretty(r,f.baseTitle,"magenta")}`),f.changedFiles.size>0){c.reportInfo(0,"You have changed the following files since then:"),c.reportSeparator();for(let S of f.changedFiles)c.reportInfo(null,`${he.pretty(r,ue.fromPortablePath(f.root),"gray")}${ue.sep}${ue.relative(ue.fromPortablePath(f.root),ue.fromPortablePath(S))}`)}let p=!1,h=!1,E=UL(f);if(E.size>0){p||c.reportSeparator();for(let S of E)c.reportError(0,`${q.prettyLocator(r,S.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let C=gP(f);for(let[S,P]of C)h||c.reportSeparator(),c.reportError(0,`${q.prettyLocator(r,S.anchoredLocator)} doesn't have a release strategy attached, but depends on ${q.prettyWorkspace(r,P)} which is planned for release.`),h=!0;(p||h)&&(c.reportSeparator(),c.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),c.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};Ve();Wt();var qL=et(Ai());var K1=class extends ut{constructor(){super(...arguments);this.deferred=ge.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=ge.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=ge.String()}static{this.paths=[["version"]]}static{this.usage=ot.Usage({category:"Release-related commands",description:"apply a new version to the current package",details:"\n This command will bump the version number for the given package, following the specified strategy:\n\n - If `major`, the first number from the semver range will be increased (`X.0.0`).\n - If `minor`, the second number from the semver range will be increased (`0.X.0`).\n - If `patch`, the third number from the semver range will be increased (`0.0.X`).\n - If prefixed by `pre` (`premajor`, ...), a `-0` suffix will be set (`0.0.0-0`).\n - If `prerelease`, the suffix will be increased (`0.0.0-X`); the third number from the semver range will also be increased if there was no suffix in the previous version.\n - If `decline`, the nonce will be increased for `yarn version check` to pass without version bump.\n - If a valid semver range, it will be used as new version.\n - If unspecified, Yarn will ask you for guidance.\n\n For more information about the `--deferred` flag, consult our documentation (https://yarnpkg.com/features/release-workflow#deferred-versioning).\n ",examples:[["Immediately bump the version to the next major","yarn version major"],["Prepare the version to be bumped to the next major","yarn version major --deferred"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd);if(!a)throw new ar(s.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let c=qL.default.valid(this.strategy),f=this.strategy==="decline",p;if(c)if(a.manifest.version!==null){let E=Oz(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!f){if(E===null)throw new nt("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof E!="string"||!qL.default.valid(E))throw new nt(`Can't bump the version (${E}) if it's not valid semver`)}p=j1(this.strategy)}if(!n){let C=(await hP(s)).get(a);if(typeof C<"u"&&p!=="decline"){let S=HL(a.manifest.version,p);if(qL.default.lt(S,C))throw new nt(`Can't bump the version to one that would be lower than the current deferred one (${C})`)}}let h=await G1(s,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};var f6t={configuration:{deferredVersionFolder:{description:"Folder where are stored the versioning files",type:"ABSOLUTE_PATH",default:"./.yarn/versions"},preferDeferredVersions:{description:"If true, running `yarn version` will assume the `--deferred` flag unless `--immediate` is set",type:"BOOLEAN",default:!1}},commands:[Y1,V1,K1]},A6t=f6t;var _z={};Vt(_z,{WorkspacesFocusCommand:()=>J1,WorkspacesForeachCommand:()=>Z1,default:()=>g6t});Ve();Ve();Wt();var J1=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=ge.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=ge.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=ge.Rest()}static{this.paths=[["workspaces","focus"]]}static{this.usage=ot.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd),n=await Jr.find(r);await s.restoreInstallState({restoreResolutions:!1});let c;if(this.all)c=new Set(s.workspaces);else if(this.workspaces.length===0){if(!a)throw new ar(s.cwd,this.context.cwd);c=new Set([a])}else c=new Set(this.workspaces.map(f=>s.getWorkspaceByIdent(q.parseIdent(f))));for(let f of c)for(let p of this.production?["dependencies"]:Ht.hardDependencies)for(let h of f.manifest.getForScope(p).values()){let E=s.tryWorkspaceByDescriptor(h);E!==null&&c.add(E)}for(let f of s.workspaces)c.has(f)?this.production&&f.manifest.devDependencies.clear():(f.manifest.installConfig=f.manifest.installConfig||{},f.manifest.installConfig.selfReferences=!1,f.manifest.dependencies.clear(),f.manifest.devDependencies.clear(),f.manifest.peerDependencies.clear(),f.manifest.scripts.clear());return await s.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};Ve();Ve();Ve();Wt();var z1=et(Sa()),DOe=et(Od());Ul();var Z1=class extends ut{constructor(){super(...arguments);this.from=ge.Array("--from",{description:"An array of glob pattern idents or paths from which to base any recursion"});this.all=ge.Boolean("-A,--all",{description:"Run the command on all workspaces of a project"});this.recursive=ge.Boolean("-R,--recursive",{description:"Run the command on the current workspace and all of its recursive dependencies"});this.worktree=ge.Boolean("-W,--worktree",{description:"Run the command on all workspaces of the current worktree"});this.verbose=ge.Counter("-v,--verbose",{description:"Increase level of logging verbosity up to 2 times"});this.parallel=ge.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=ge.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=ge.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:mU([po(["unlimited"]),$2(dU(),[EU(),yU(1)])])});this.topological=ge.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=ge.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=ge.Array("--include",[],{description:"An array of glob pattern idents or paths; only matching workspaces will be traversed"});this.exclude=ge.Array("--exclude",[],{description:"An array of glob pattern idents or paths; matching workspaces won't be traversed"});this.publicOnly=ge.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.dryRun=ge.Boolean("-n,--dry-run",{description:"Print the commands that would be run, without actually running them"});this.commandName=ge.String();this.args=ge.Proxy()}static{this.paths=[["workspaces","foreach"]]}static{this.usage=ot.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them. You can also use the `--no-private` flag to avoid running the command in private workspaces.\n\n The `-v,--verbose` flag can be passed up to twice: once to prefix output lines with the originating workspace's name, and again to include start/finish/timing log lines. Maximum verbosity is enabled by default in terminal environments.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish all packages","yarn workspaces foreach -A --no-private npm publish --tolerate-republish"],["Run the build script on all descendant packages","yarn workspaces foreach -A run build"],["Run the build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -Apt run build"],["Run the build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -Rpt --from '{workspace-a,workspace-b}' run build"]]})}static{this.schema=[tB("all",Wf.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),IU(["all","recursive","since","worktree"],{missingIf:"undefined"})]}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:s,workspace:a}=await Tt.find(r,this.context.cwd);if(!this.all&&!a)throw new ar(s.cwd,this.context.cwd);await s.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),c=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new nt("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let f=Ce=>{this.dryRun&&this.context.stdout.write(`${Ce} -`)},p=()=>{let Ce=this.from.map(g=>z1.default.matcher(g));return s.workspaces.filter(g=>{let we=q.stringifyIdent(g.anchoredLocator),ye=g.relativeCwd;return Ce.some(fe=>fe(we)||fe(ye))})},h=[];if(this.since?(f("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await Qa.fetchChangedWorkspaces({ref:this.since,project:s}))):this.from?(f("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(f("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(f("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(f("Option --all is set; selecting all workspaces"),h=[...s.workspaces]),this.dryRun&&!this.all){for(let Ce of h)f(` -- ${Ce.relativeCwd} - ${q.prettyLocator(r,Ce.anchoredLocator)}`);h.length>0&&f("")}let E;if(this.recursive?this.since?(f("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(Ce=>[...Ce.getRecursiveWorkspaceDependents()]).flat())):(f("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(Ce=>[...Ce.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(f("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(Ce=>[...Ce.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let Ce of E)f(` -- ${Ce.relativeCwd} - ${q.prettyLocator(r,Ce.anchoredLocator)}`);let C=[],S=!1;if(c?.includes(":")){for(let Ce of s.workspaces)if(Ce.manifest.scripts.has(c)&&(S=!S,S===!1))break}for(let Ce of h){if(c&&!Ce.manifest.scripts.has(c)&&!S&&!(await In.getWorkspaceAccessibleBinaries(Ce)).has(c)){f(`Excluding ${Ce.relativeCwd} because it doesn't have a "${c}" script`);continue}if(!(c===r.env.npm_lifecycle_event&&Ce.cwd===a.cwd)){if(this.include.length>0&&!z1.default.isMatch(q.stringifyIdent(Ce.anchoredLocator),this.include)&&!z1.default.isMatch(Ce.relativeCwd,this.include)){f(`Excluding ${Ce.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(z1.default.isMatch(q.stringifyIdent(Ce.anchoredLocator),this.exclude)||z1.default.isMatch(Ce.relativeCwd,this.exclude))){f(`Excluding ${Ce.relativeCwd} because it matches the --exclude filter`);continue}if(this.publicOnly&&Ce.manifest.private===!0){f(`Excluding ${Ce.relativeCwd} because it's a private workspace and --no-private was set`);continue}C.push(Ce)}}if(this.dryRun)return 0;let P=this.verbose??(this.context.stdout.isTTY?1/0:0),I=P>0,R=P>1,N=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(ps.availableParallelism()/2):1,U=N===1?!1:this.parallel,W=U?this.interlaced:!0,te=(0,DOe.default)(N),ie=new Map,Ae=new Set,ce=0,me=null,pe=!1,Be=await Ot.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async Ce=>{let g=async(we,{commandIndex:ye})=>{if(pe)return-1;!U&&R&&ye>1&&Ce.reportSeparator();let fe=p6t(we,{configuration:r,label:I,commandIndex:ye}),[se,X]=SOe(Ce,{prefix:fe,interlaced:W}),[De,Re]=SOe(Ce,{prefix:fe,interlaced:W});try{R&&Ce.reportInfo(null,`${fe?`${fe} `:""}Process started`);let dt=Date.now(),j=await this.cli.run([this.commandName,...this.args],{cwd:we.cwd,stdout:se,stderr:De})||0;se.end(),De.end(),await X,await Re;let rt=Date.now();if(R){let Fe=r.get("enableTimers")?`, completed in ${he.pretty(r,rt-dt,he.Type.DURATION)}`:"";Ce.reportInfo(null,`${fe?`${fe} `:""}Process exited (exit code ${j})${Fe}`)}return j===130&&(pe=!0,me=j),j}catch(dt){throw se.end(),De.end(),await X,await Re,dt}};for(let we of C)ie.set(we.anchoredLocator.locatorHash,we);for(;ie.size>0&&!Ce.hasErrors();){let we=[];for(let[X,De]of ie){if(Ae.has(De.anchoredDescriptor.descriptorHash))continue;let Re=!0;if(this.topological||this.topologicalDev){let dt=this.topologicalDev?new Map([...De.manifest.dependencies,...De.manifest.devDependencies]):De.manifest.dependencies;for(let j of dt.values()){let rt=s.tryWorkspaceByDescriptor(j);if(Re=rt===null||!ie.has(rt.anchoredLocator.locatorHash),!Re)break}}if(Re&&(Ae.add(De.anchoredDescriptor.descriptorHash),we.push(te(async()=>{let dt=await g(De,{commandIndex:++ce});return ie.delete(X),Ae.delete(De.anchoredDescriptor.descriptorHash),{workspace:De,exitCode:dt}})),!U))break}if(we.length===0){let X=Array.from(ie.values()).map(De=>q.prettyLocator(r,De.anchoredLocator)).join(", ");Ce.reportError(3,`Dependency cycle detected (${X})`);return}let ye=await Promise.all(we);ye.forEach(({workspace:X,exitCode:De})=>{De!==0&&Ce.reportError(0,`The command failed in workspace ${q.prettyLocator(r,X.anchoredLocator)} with exit code ${De}`)});let se=ye.map(X=>X.exitCode).find(X=>X!==0);(this.topological||this.topologicalDev)&&typeof se<"u"&&Ce.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return me!==null?me:Be.exitCode()}};function SOe(t,{prefix:e,interlaced:r}){let s=t.createStreamReporter(e),a=new je.DefaultStream;a.pipe(s,{end:!1}),a.on("finish",()=>{s.end()});let n=new Promise(f=>{s.on("finish",()=>{f(a.active)})});if(r)return[a,n];let c=new je.BufferStream;return c.pipe(a,{end:!1}),c.on("finish",()=>{a.end()}),[c,n]}function p6t(t,{configuration:e,commandIndex:r,label:s}){if(!s)return null;let n=`[${q.stringifyIdent(t.anchoredLocator)}]:`,c=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],f=c[r%c.length];return he.pretty(e,n,f)}var h6t={commands:[J1,Z1]},g6t=h6t;var tC=()=>({modules:new Map([["@yarnpkg/cli",$v],["@yarnpkg/core",Xv],["@yarnpkg/fslib",U2],["@yarnpkg/libzip",Iv],["@yarnpkg/parsers",K2],["@yarnpkg/shell",Dv],["clipanion",oB],["semver",d6t],["typanion",Ia],["@yarnpkg/plugin-essentials",Y5],["@yarnpkg/plugin-compat",Z5],["@yarnpkg/plugin-constraints",g9],["@yarnpkg/plugin-dlx",d9],["@yarnpkg/plugin-exec",E9],["@yarnpkg/plugin-file",C9],["@yarnpkg/plugin-git",W5],["@yarnpkg/plugin-github",v9],["@yarnpkg/plugin-http",S9],["@yarnpkg/plugin-init",D9],["@yarnpkg/plugin-interactive-tools",IY],["@yarnpkg/plugin-jsr",wY],["@yarnpkg/plugin-link",BY],["@yarnpkg/plugin-nm",oV],["@yarnpkg/plugin-npm",oz],["@yarnpkg/plugin-npm-cli",gz],["@yarnpkg/plugin-pack",$V],["@yarnpkg/plugin-patch",wz],["@yarnpkg/plugin-pnp",KY],["@yarnpkg/plugin-pnpm",Sz],["@yarnpkg/plugin-stage",Tz],["@yarnpkg/plugin-typescript",Rz],["@yarnpkg/plugin-version",Mz],["@yarnpkg/plugin-workspace-tools",_z]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-jsr","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function xOe({cwd:t,pluginConfiguration:e}){let r=new wa({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:un??""});return Object.assign(r,{defaultContext:{...wa.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function m6t(t){if(je.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,s=">=18.12.0";if(Or.satisfiesWithPrereleases(r,s))return!0;let a=new nt(`This tool requires a Node version compatible with ${s} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return wa.defaultContext.stdout.write(t.error(a)),!1}async function kOe({selfPath:t,pluginConfiguration:e}){return await ze.find(ue.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function y6t(t,e,{yarnPath:r}){if(!le.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let s={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,bOe.execFileSync)(process.execPath,[ue.fromPortablePath(r),...e],s)}catch(a){return a.status??1}return 0}function E6t(t,e){let r=null,s=e;return e.length>=2&&e[0]==="--cwd"?(r=ue.toPortablePath(e[1]),s=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=ue.toPortablePath(e[0].slice(6)),s=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=ue.toPortablePath(e[e.length-1]),s=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?K.resolve(r):K.cwd(),s}function I6t(t,{configuration:e}){if(!e.get("enableTelemetry")||POe.isCI||!process.stdout.isTTY)return;ze.telemetry=new XI(e,"puba9cdc10ec5790a2cf4969dd413a47270");let s=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())$I.has(a.match(s)?.[1]??"")&&ze.telemetry?.reportPluginName(a);t.binaryVersion&&ze.telemetry.reportVersion(t.binaryVersion)}function QOe(t,{configuration:e}){for(let r of e.plugins.values())for(let s of r.commands||[])t.register(s)}async function C6t(t,e,{selfPath:r,pluginConfiguration:s}){if(!m6t(t))return 1;let a=await kOe({selfPath:r,pluginConfiguration:s}),n=a.get("yarnPath"),c=a.get("ignorePath");if(n&&!c)return y6t(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let f=E6t(t,e);I6t(t,{configuration:a}),QOe(t,{configuration:a});let p=t.process(f,t.defaultContext);return p.help||ze.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function XCe({cwd:t=K.cwd(),pluginConfiguration:e=tC()}={}){let r=xOe({cwd:t,pluginConfiguration:e}),s=await kOe({pluginConfiguration:e,selfPath:null});return QOe(r,{configuration:s}),r}async function KR(t,{cwd:e=K.cwd(),selfPath:r,pluginConfiguration:s}){let a=xOe({cwd:e,pluginConfiguration:s});function n(){wa.defaultContext.stdout.write(`ERROR: Yarn is terminating due to an unexpected empty event loop. -Please report this issue at https://github.com/yarnpkg/berry/issues.`)}process.once("beforeExit",n);try{process.exitCode=42,process.exitCode=await C6t(a,t,{selfPath:r,pluginConfiguration:s})}catch(c){wa.defaultContext.stdout.write(a.error(c)),process.exitCode=1}finally{process.off("beforeExit",n),await le.rmtempPromise()}}KR(process.argv.slice(2),{cwd:K.cwd(),selfPath:ue.toPortablePath(ue.resolve(process.argv[1])),pluginConfiguration:tC()});})(); -/** - @license - Copyright (c) 2015, Rebecca Turner - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - */ -/** - @license - Copyright Node.js contributors. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. -*/ -/** - @license - The MIT License (MIT) - - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ -/** - @license - Copyright Joyent, Inc. and other Node contributors. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to permit - persons to whom the Software is furnished to do so, subject to the - following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN - NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -/*! Bundled license information: - -is-number/index.js: - (*! - * is-number - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Released under the MIT License. - *) - -to-regex-range/index.js: - (*! - * to-regex-range - * - * Copyright (c) 2015-present, Jon Schlinkert. - * Released under the MIT License. - *) - -fill-range/index.js: - (*! - * fill-range - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Licensed under the MIT License. - *) - -is-extglob/index.js: - (*! - * is-extglob - * - * Copyright (c) 2014-2016, Jon Schlinkert. - * Licensed under the MIT License. - *) - -is-glob/index.js: - (*! - * is-glob - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - *) - -queue-microtask/index.js: - (*! queue-microtask. MIT License. Feross Aboukhadijeh *) - -run-parallel/index.js: - (*! run-parallel. MIT License. Feross Aboukhadijeh *) - -git-url-parse/lib/index.js: - (*! - * buildToken - * Builds OAuth token prefix (helper function) - * - * @name buildToken - * @function - * @param {GitUrl} obj The parsed Git url object. - * @return {String} token prefix - *) - -object-assign/index.js: - (* - object-assign - (c) Sindre Sorhus - @license MIT - *) - -react/cjs/react.production.min.js: - (** @license React v17.0.2 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *) - -scheduler/cjs/scheduler.production.min.js: - (** @license React v0.20.2 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *) - -react-reconciler/cjs/react-reconciler.production.min.js: - (** @license React v0.26.2 - * react-reconciler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *) - -is-windows/index.js: - (*! - * is-windows - * - * Copyright © 2015-2018, Jon Schlinkert. - * Released under the MIT License. - *) -*/ diff --git a/.yarnrc.yml b/.yarnrc.yml deleted file mode 100644 index b3708d7c3..000000000 --- a/.yarnrc.yml +++ /dev/null @@ -1,15 +0,0 @@ -compressionLevel: mixed - -enableGlobalCache: false - -logFilters: - - level: discard - pattern: "*(pde6dc), which doesn't satisfy what react-scripts*" - - level: discard - pattern: "*(p6f2bc), which doesn't satisfy what react-identicons*" - - level: discard - pattern: "*(pca8b0), which doesn't satisfy what react-identicons*" - -nodeLinker: node-modules - -yarnPath: .yarn/releases/yarn-4.9.2.cjs diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 2add1d197..000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,37 +0,0 @@ -## Contribution Guidelines - -👉 Please start by reading our guidelines here: https://kleros.gitbook.io/docs/contribution-guidelines/overview - -## Opening an issue - -You should usually open an issue in the following situations: - -- Report an error you can’t solve yourself -- Discuss a high-level topic or idea (for example, community, vision or policies) -- Propose a new feature or other project idea - -### Tips for communicating on issues: - -- **If you see an open issue that you want to tackle,** comment on the issue to let people know you’re on it. That way, people are less likely to duplicate your work. -- **If an issue was opened a while ago,** it’s possible that it’s being addressed somewhere else, or has already been resolved, so comment to ask for confirmation before starting work. -- **If you opened an issue, but figured out the answer later on your own,** comment on the issue to let people know, then close the issue. Even documenting that outcome is a contribution to the project. - -## Opening a pull request - -You should usually open a pull request in the following situations: - -- Submit trivial fixes (for example, a typo, a broken link or an obvious error). -- Start work on a contribution that was already asked for, or that you’ve already discussed, in an issue. - -A pull request doesn’t have to represent finished work. It’s usually better to open a _draft_ pull request early on, so others can watch or give feedback on your progress. Just mark it as a “WIP” (Work in Progress) in the subject line. You can always add more commits later. - -As a contributor who is not an organization member, here’s how to submit a pull request: - -- **Fork the repository** and clone it locally. Connect your local to the original repository by adding it as a remote. Pull in changes from this repository often so that you stay up to date so that when you submit your pull request, merge conflicts will be less likely. -- **Create a branch** for your edits. -- **Reference any relevant issues** or supporting documentation in your PR (for example, “Closes #37.”) -- **Include screenshots of the before and after** if your changes include differences in HTML/CSS. Drag and drop the images into the body of your pull request. -- **Test your changes!** Run your changes against any existing tests if they exist and create new ones when needed. Whether tests exist or not, make sure your changes don’t break the existing project. -- **Contribute in the style of the project** to the best of your abilities. This may mean using indents, semi-colons or comments differently than you would in your own repository, but makes it easier for the maintainer to merge, others to understand and maintain in the future. - -If you are an organization member, a branch can be created directly in this repository, there is no need to fork it. diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 51ffd05a0..000000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Kleros - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index 9ff56aaa0..000000000 --- a/README.md +++ /dev/null @@ -1,195 +0,0 @@ - - -

- Kleros v2 -

- -

- OpenSSF Scorecard - Security Rating - Quality Gate Status - Bugs - Reliability Rating - Maintainability Rating -
- Unit testing - Conventional Commits - Commitizen Friendly - Styled with Prettier -
- GitPoap badge -

- ---- - -## Deployments - -##### ⛓️ [Contracts addresses](contracts/README.md#deployments) - -##### 🗃️ [Subgraph endpoints](subgraph/README.md#deployments) - -##### ⚖️ [Web frontend](web/README.md#court-deployments) - -## Content - -| Package | Description | -| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **[bots](/bots)** | Automation of the on-chain upkeep of the smart contracts. Anyone willing to spend some gas may run these bots and contribute to the upkeep operations. | -| **[contracts](/contracts)** | Smart contracts of the arbitration protocol. | -| **[kleros-app](/kleros-app)** | Library of React hooks and utilities shared by the Kleros frontend apps. | -| **[kleros-sdk](/kleros-sdk)** | SDK which facilitates the creation of arbitrable applications, the interactions with the arbitrator, the rendering of the dispute and evidence information. | -| **[subgraph](/subgraph)** | The indexing layer. | -| **[web](/web)** | The court frontend intended for the jurors and parties in a dispute. | - -## Contributing - -### Prerequisites - -- Install NodeJS 16: - - on Red Hat Linux: `sudo dnf module install nodejs:16` - - on Ubuntu Linux: `sudo snap install node --classic` - - on MacOS via [brew](https://brew.sh/): `brew install node` -- Install Yarn v1.22: `npm install -g yarn` - - Then [upgrade](https://yarnpkg.com/getting-started/install#updating-to-the-latest-versions) Yarn to v3: `yarn set version berry` -- Install Volta.sh: `curl https://get.volta.sh | bash` -- Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) to run the local graph node. -- Shell utilities: [jq](https://stedolan.github.io/jq/), [yq](https://mikefarah.gitbook.io/yq/) - - on Red Hat Linux: `sudo dnf install jq yq` - - on Ubuntu Linux: `sudo snap install jq yq` - - on MacOS via [brew](https://brew.sh/): `brew install jq yq` - -### Install the dependencies - -```bash -$ yarn install - -# Foundry libraries -$ git submodule update --init --recursive -j 4 -``` - -### [Hardhat CLI auto-completion](https://hardhat.org/guides/shorthand.html) (optional) - -```bash -$ npm i -g hardhat-shorthand - -$ hardhat-completion install -✔ Which Shell do you use ? · bash -✔ We will install completion to ~/.bashrc, is it ok ? (y/N) · true - -$ exec bash -``` - -### Full Stack Local Deployment - -Run the commands below from the top-level folder. Alternatively, it is possible to `cd` into the relevant package first and then call yarn without `workspace @kleros/xxxx`. - -#### Shortcut using tmux - -If you have **[tmux](https://github.com/tmux/tmux/wiki)** installed, you can get started quickly with a single command. - -```bash -$ yarn local-stack -``` - -![terminal](/docs/local-stack-2.png) - -#### Shell 1 - Local RPC with Contracts Deployed - -```bash -$ yarn workspace @kleros/kleros-v2-contracts start-local -... -Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/ - -``` - -⏳ Wait until deployment is complete. - -#### Shell 2 - Local Graph Node - -```bash -$ yarn workspace @kleros/kleros-v2-subgraph start-local-indexer -... -graph-node-graph-node-1 | INFO Successfully connected to IPFS node at: http://ipfs:5001/ -graph-node-graph-node-1 | INFO Pool successfully connected to Postgres, pool: main, shard: primary, component: Store -... -graph-node-graph-node-1 | INFO Connected to Ethereum, capabilities: archive, traces, network_version: 31337, provider: mainnet-rpc-0 -``` - -⏳ Wait until the graph service is ready. - -#### Shell 3 - Subgraph Rebuild and Local Deploy - -:warning: This step modifies `subgraph.yaml` and creates a backup file. See further down on how to restore it. - -```bash -$ yarn workspace @kleros/kleros-v2-subgraph rebuild-deploy:local -... -✔ Upload subgraph to IPFS - -Build completed: QmZVaZQ9qcXPia9YnFEKk7D1dEDHbfyDiJi1sqJ6E1NydB - -Deployed to http://localhost:8000/subgraphs/name/kleros/kleros-v2-core-local/graphql - -Subgraph endpoints: -Queries (HTTP): http://localhost:8000/subgraphs/name/kleros/kleros-v2-core-local -``` - -#### Shell 4 - Frontend Pointing to the Local Subgraph - -```bash -yarn workspace @kleros/kleros-v2-web generate -✔ Parse Configuration -✔ Generate outputs -✔ Validating plugins -✔ Resolving contracts -✔ Running plugins -✔ Writing to src/hooks/contracts/generated.ts - -$ yarn workspace @kleros/kleros-v2-web start-local -Server running at http://localhost:1234 -✨ Built in 2.35s -``` - -### Redeploying - -```bash -# Contracts -$ yarn workspace @kleros/kleros-v2-contracts deploy-local - -# Subgraph -$ yarn workspace @kleros/kleros-v2-subgraph rebuild-deploy:local - -``` - -### Simulating Arbitration Activity - -```bash -$ yarn workspace @kleros/kleros-v2-contracts simulate-local - -``` - -### Stopping - -Just press `Ctrl + c` in each terminal. - -#### Docker containers and data removal - -`yarn workspace @kleros/kleros-v2-subgraph stop-local-indexer` - -#### Restoring subgraph.yaml - -##### From a backup file - -Every versions were saved as `subgraph.yaml.bak.`. - -##### Based on the ArbitrumGoerli deployment artifacts - -`yarn workspace @kleros/kleros-v2-subgraph update` - -##### Based on the last commit - -`git restore subgraph.yaml` diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 233b5398d..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,6 +0,0 @@ -# Security Policy - -## Reporting a Vulnerability - -You can privately disclose vulnerabilities to us at any time, by sending an email to clement@kleros.io and contact@kleros.io. -We can then discuss the best way to handle things on a case by case basis. diff --git a/bots/README.md b/bots/README.md deleted file mode 100644 index fc8f49825..000000000 --- a/bots/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# @kleros/kleros-v2-bots - -🚧 ⚖️ 🚧 diff --git a/commitlint.config.js b/commitlint.config.js deleted file mode 100644 index 69b1ed0c7..000000000 --- a/commitlint.config.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - /* - * Resolve and load @commitlint/config-conventional from node_modules. - * Referenced packages must be installed - */ - extends: ["@commitlint/config-conventional"], - /* - * Any rules defined here will override rules from @commitlint/config-conventional - */ - rules: { - "body-leading-blank": [2, "always"], - "footer-leading-blank": [2, "always"], - }, - /* - * Custom URL to show upon failure - */ - helpUrl: "https://github.com/conventional-changelog/commitlint/#what-is-commitlint", -}; diff --git a/contracts/.env.example b/contracts/.env.example deleted file mode 100644 index a82240696..000000000 --- a/contracts/.env.example +++ /dev/null @@ -1,27 +0,0 @@ -PRIVATE_KEY=0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1 - -INFURA_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 - -# Testing -REPORT_GAS=true - -# There seems to be a bug with hardhat-deploy's implementation of etherscan-verify -# If ETHERSCAN_API_KEY is set, it overrides any hardhat configuration. -ETHERSCAN_API_KEY_FIX=ABC123ABC123ABC123ABC123ABC123ABC1 -ARBISCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 -GNOSISSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 - -# For the bots -LOG_LEVEL=debug -SUBGRAPH_URL=https://api.studio.thegraph.com/query/61738/kleros-v2-core-devnet/version/latest -LOGTAIL_TOKEN_KEEPER_BOT=ABC123ABC123ABC123ABC -LOGTAIL_TOKEN_RELAYER_BOT=ABC123ABC123ABC123ABC -LOGTAIL_TOKEN_DISPUTOR_BOT=ABC123ABC123ABC123ABC -HEARTBEAT_URL_KEEPER_BOT=https://uptime.betterstack.com/api/v1/heartbeat/ABC123ABC123ABC123ABC -SHUTTER_API=testnet -SHUTTER_API_KEY= -DISPUTES_TO_SKIP= - -# Optionally for debugging -# TENDERLY_USERNAME=your_username -# TENDERLY_PROJECT=your_project diff --git a/contracts/.eslintignore b/contracts/.eslintignore deleted file mode 100644 index 85f5562af..000000000 --- a/contracts/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -artifacts -cache -coverage diff --git a/contracts/.npmignore b/contracts/.npmignore deleted file mode 100644 index ac1207574..000000000 --- a/contracts/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -# NOP, just force npm to disregard .gitignore -# https://docs.npmjs.com/cli/v9/using-npm/developers#keeping-files-out-of-your-package - -.env* -.flaskenv* -!.env.project -!.env.vault \ No newline at end of file diff --git a/contracts/.npmrc b/contracts/.npmrc deleted file mode 100644 index af941b49c..000000000 --- a/contracts/.npmrc +++ /dev/null @@ -1 +0,0 @@ -sign-git-tag=true diff --git a/contracts/.prettierignore b/contracts/.prettierignore deleted file mode 100644 index f268596e5..000000000 --- a/contracts/.prettierignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules -artifacts -cache -coverage* -gasReporterOutput.json diff --git a/contracts/.solcover.js b/contracts/.solcover.js deleted file mode 100644 index 46bc39e3c..000000000 --- a/contracts/.solcover.js +++ /dev/null @@ -1,25 +0,0 @@ -/* eslint-disable node/no-extraneous-require */ - -const shell = require("shelljs"); - -// The environment variables are loaded in hardhat.config.ts - -module.exports = { - istanbulReporter: ["lcov"], - configureYulOptimizer: true, - irMinimum: true, - onCompileComplete: async function (_config) { - await run("typechain"); - }, - onIstanbulComplete: async function (_config) { - // We need to do this because solcover generates bespoke artifacts. - shell.rm("-rf", "./artifacts"); - shell.rm("-rf", "./typechain"); - }, - skipFiles: ["test", "token", "kleros-v1", "proxy/mock", "gateway/mock", "rng/mock"], - mocha: { - timeout: 20000, - grep: "@skip-on-coverage", // Find everything with this tag - invert: true, // Run the grep's inverse set. - }, -}; diff --git a/contracts/.solhint.json b/contracts/.solhint.json deleted file mode 100644 index 465b9a041..000000000 --- a/contracts/.solhint.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "extends": "solhint:recommended", - "plugins": [ - "prettier" - ], - "rules": { - "compiler-version": [ - "error", - "^0.8.0" - ], - "func-visibility": [ - "warn", - { - "ignoreConstructors": true - } - ], - "prettier/prettier": "warn", - "max-line-length": "off", - "check-send-result": "off", - "not-rely-on-time": "off", - "multiple-sends": "off", - "quotes": "warn" - } -} diff --git a/contracts/.solhintignore b/contracts/.solhintignore deleted file mode 100644 index 78ecf992e..000000000 --- a/contracts/.solhintignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -src/**/mock/*.sol diff --git a/contracts/.yarnrc.yml b/contracts/.yarnrc.yml deleted file mode 100644 index c6e883c59..000000000 --- a/contracts/.yarnrc.yml +++ /dev/null @@ -1,2 +0,0 @@ -nodeLinker: node-modules - diff --git a/contracts/CHANGELOG.md b/contracts/CHANGELOG.md deleted file mode 100644 index 2e61786fb..000000000 --- a/contracts/CHANGELOG.md +++ /dev/null @@ -1,167 +0,0 @@ -# Changelog - -All notable changes to this package will be documented in this file. - -The format is based on [Common Changelog](https://common-changelog.org/). - -## [0.13.0] - 2025-08-07 (Not published yet) - -### Changed - -- **Breaking:** Stake the juror's PNK rewards instead of transferring them out ([#2099](https://github.com/kleros/kleros-v2/issues/2099)) -- **Breaking:** Replace `require()` with `revert()` and custom errors outside KlerosCore for consistency and smaller bytecode ([#2084](https://github.com/kleros/kleros-v2/issues/2084)) -- **Breaking:** Rename the interface from `RNG` to `IRNG` ([#2054](https://github.com/kleros/kleros-v2/issues/2054)) -- **Breaking:** Remove the `_block` parameter from `IRNG.requestRandomness()` and `IRNG.receiveRandomness()`, not needed for the primary VRF-based RNG ([#2054](https://github.com/kleros/kleros-v2/issues/2054)) -- **Breaking:** Rename `governor` to `owner` in order to comply with the lightweight ownership standard [ERC-5313](https://eipsinsight.com/ercs/erc-5313) ([#2112](https://github.com/kleros/kleros-v2/issues/2112)) -- **Breaking:** Apply the penalties to the stakes in the Sortition Tree ([#2107](https://github.com/kleros/kleros-v2/issues/2107)) -- **Breaking:** Make `SortitionModule.getJurorBalance().stakedInCourt` include the penalties ([#2107](https://github.com/kleros/kleros-v2/issues/2107)) -- Make `IDisputeKit.draw()` and `ISortitionModule.draw()` return the court ID from which the juror was drawn ([#2107](https://github.com/kleros/kleros-v2/issues/2107)) -- Rename `SortitionModule.setJurorInactive()` to `SortitionModule.forcedUnstakeAllCourts()` ([#2107](https://github.com/kleros/kleros-v2/issues/2107)) -- Make the primary VRF-based RNG fall back to `BlockhashRNG` if the VRF request is not fulfilled within a timeout ([#2054](https://github.com/kleros/kleros-v2/issues/2054)) -- Authenticate the calls to the RNGs to prevent 3rd parties from depleting the Chainlink VRF subscription funds ([#2054](https://github.com/kleros/kleros-v2/issues/2054)) -- Use `block.timestamp` rather than `block.number` for `BlockhashRNG` for better reliability on Arbitrum as block production is sporadic depending on network conditions. ([#2054](https://github.com/kleros/kleros-v2/issues/2054)) -- Replace the `bytes32 _key` parameter in `SortitionTrees.createTree()` and `SortitionTrees.draw()` by `uint96 courtID` ([#2113](https://github.com/kleros/kleros-v2/issues/2113)) -- Extract the sortition sum trees logic into a library `SortitionTrees` ([#2113](https://github.com/kleros/kleros-v2/issues/2113)) -- Make `IDisputeKit.getDegreeOfCoherenceReward()` multi-dimensional so different calculations may be applied to PNK rewards, fee rewards and PNK penalties (future-proofing) ([#2090](https://github.com/kleros/kleros-v2/issues/2090)) -- Consolidate the constant `ALPHA_DIVISOR` with `ONE_BASIS_POINTS` ([#2090](https://github.com/kleros/kleros-v2/issues/2090)) -- Set the Hardhat Solidity version to v0.8.30 and enable the IR pipeline ([#2069](https://github.com/kleros/kleros-v2/issues/2069)) -- Set the Foundry Solidity version to v0.8.30 and enable the IR pipeline ([#2073](https://github.com/kleros/kleros-v2/issues/2073)) -- Widen the allowed solc version to any v0.8.x for the interfaces only ([#2083](https://github.com/kleros/kleros-v2/issues/2083)) -- Bump `hardhat` to v2.26.2 ([#2069](https://github.com/kleros/kleros-v2/issues/2069)) -- Bump `@kleros/vea-contracts` to v0.7.0 ([#2073](https://github.com/kleros/kleros-v2/issues/2073)) - -### Added - -- **Breaking:** Add a new field `drawnJurorFromCourtIDs` to the `Round` struct in `KlerosCoreBase` and `KlerosCoreUniversity` ([#2107](https://github.com/kleros/kleros-v2/issues/2107)) -- **Breaking:** Add a new state variable `jumpDisputeKitID` to the `DisputeKitClassicBase` contract ([#2114](https://github.com/kleros/kleros-v2/issues/2114)) -- **Breaking:** Add a parameter `_recoveryCommit` to the event `DisputeKitShutter.CommitCastShutter` ([#2100](https://github.com/kleros/kleros-v2/issues/2100)) -- **Breaking:** Add a storage variable `recoveryCommitments` to `DisputeKitShutter` ([#2100](https://github.com/kleros/kleros-v2/issues/2100)) -- Allow the Shutter commitment to be recovered by the juror using only the salt and the choice, without having to provide the justification ([#2100](https://github.com/kleros/kleros-v2/issues/2100)) -- Allow the dispute kits to force an early court jump and to override the number of votes after an appeal (future-proofing) ([#2110](https://github.com/kleros/kleros-v2/issues/2110)) -- Allow the dispute kits to specify which new dispute kit to use when a court jump occurs ([#2114](https://github.com/kleros/kleros-v2/issues/2114)) -- Allow stake changes to by-pass delayed stakes when initiated by the SortitionModule by setting the `_noDelay` parameter to `true` in `SortitionModule.validateStake()` ([#2107](https://github.com/kleros/kleros-v2/issues/2107)) - -### Fixed - -- Do not pass to Voting period if all the commits are cast because it breaks the current Shutter auto-reveal process. ([#2085](https://github.com/kleros/kleros-v2/issues/2085)) - -## [0.12.0] - 2025-08-05 - -### Changed - -- **Breaking:** Make `viem` a peer dependency, it should be provided by the consuming package ([`4594536`](https://github.com/kleros/kleros-v2/commit/4594536c)) - -### Added - -- Add helper function `getDisputeKitsViem` to retrieve a deployment's available dispute kit infos including their capabilities (`isShutter`, `isGated`) ([`5a81f9e`](https://github.com/kleros/kleros-v2/commit/5a81f9ec)) - -## [0.11.0] - 2025-08-02 - -### Changed - -- **Breaking:** Add an extra wNative parameter to the initializer of `KlerosCoreBase` and `DisputeKitBase` and their descendants ([#2041](https://github.com/kleros/kleros-v2/issues/2041)) -- **Breaking:** Add an extra wNative parameter to the constructor of `KlerosGovernor` ([#2041](https://github.com/kleros/kleros-v2/issues/2041)) -- **Breaking:** Upgrade Mainnet Beta to v0.11.0 ([`ea9dcc95`](https://github.com/kleros/kleros-v2/commit/ea9dcc95)) -- **Breaking:** Upgrade Devnet and Testnet to v0.11.0 ([`b9e847d`](https://github.com/kleros/kleros-v2/commit/b9e847d9)) -- Fallback to sending wETH if sending ETH fails ([#2041](https://github.com/kleros/kleros-v2/issues/2041)) -- Automate `SortitionModule.withdrawLeftoverPNK()` using the keeper bot ([`97ba58a`](https://github.com/kleros/kleros-v2/commit/97ba58a)) -- Upgrade Testnet to v0.10.0 ([#2058](https://github.com/kleros/kleros-v2/issues/2058)) -- Support the Gated and Shutter Gated dispute kits by the keeper bot ([`026fe83`](https://github.com/kleros/kleros-v2/commit/026fe83)) -- Support the Gated and Shutter Gated dispute kits by the contracts getter tests ([`2166ee0`](https://github.com/kleros/kleros-v2/commit/2166ee0)) -- Draw jurors with a more number of iterations to account for ineligible jurors by the keeper bot ([`6eb5bc6`](https://github.com/kleros/kleros-v2/commit/6eb5bc6)) -- Bump `@shutter-network/shutter-sdk` to 0.0.2 ([#2049](https://github.com/kleros/kleros-v2/issues/2049)) - -### Added - -- **Breaking:** Add new dispute kits to Mainnet Beta: Shutter, Gated, Gated Shutter ([`ea9dcc95`](https://github.com/kleros/kleros-v2/commit/ea9dcc95)) -- **Breaking:** Add new dispute kits to Testnet: Shutter, Gated, Gated Shutter ([`b9e847d`](https://github.com/kleros/kleros-v2/commit/b9e847d9)) - -### Fixed - -- Do not push address(0) in `DisputeKitBase.round.votes` during `draw()` when there is no staked juror in the court ([#2059](https://github.com/kleros/kleros-v2/issues/2059)) -- Reduce Neo core contract size below limit by 144 bytes by extracting internal functions for repeated code and by making the `appealPeriod()` view external. ([`4a84534`](https://github.com/kleros/kleros-v2/commit/4a845346)) - -## [0.10.0] - 2025-07-20 - -### Changed - -- **Breaking:** Redeploy the Devnet contracts ([`b8a2a15`](https://github.com/kleros/kleros-v2/commit/b8a2a15)) -- **Breaking:** Update the Devnet contract artifacts, add getter for the new Shutter, Gated and Gated Shutter dispute kits ([`5ef5f23`](https://github.com/kleros/kleros-v2/commit/5ef5f23)) -- **Breaking**: Make `KlerosCoreBase.draw()` return the number of drawn jurors ([`54d83a7`](https://github.com/kleros/kleros-v2/commit/54d83a7)) -- **Breaking**: Make `SortitionModule.penalizeStake()` return `(uint256 pnkBalance, uint256 availablePenalty)` ([#2004](https://github.com/kleros/kleros-v2/issues/2004)) -- **Breaking**: Split SortitionModuleBase.setStake() into 2 functions: `validateStake()` and `setStake()` ([#2004](https://github.com/kleros/kleros-v2/issues/2004)) -- Avoid unnecessary calls `KlerosCoreBase.draw()` by the keeper bot when no juror is available ([`54d83a7`](https://github.com/kleros/kleros-v2/commit/54d83a7)) -- Migrate the contracts verification tooling to the etherscan v2 API ([`b8a2a15`](https://github.com/kleros/kleros-v2/commit/b8a2a15)) -- Bump contract Solidity version to v0.8.28 ([`6e535cc`](https://github.com/kleros/kleros-v2/commit/6e535cc)) -- Bump contract dependencies, `hardhat` to v2.26.0 `node` to v20, `yarn` to 4.9.2 ([`6e535cc`](https://github.com/kleros/kleros-v2/commit/6e535cc)) -- Deprecate struct field `SortitionModuleBase.SortitionSumTree.alreadyTransferred` ([#2004](https://github.com/kleros/kleros-v2/issues/2004)) -- Deprecate state variable `SortitionModuleBase.latestDelayedStakeIndex` ([#2004](https://github.com/kleros/kleros-v2/issues/2004)) - -### Added - -- Add Gated dispute kit with support a dynamic token address for the Gated dispute kit using the dispute `extraData` ([#2045](https://github.com/kleros/kleros-v2/issues/2045)) -- Add Shutter Gated dispute kit ([#2045](https://github.com/kleros/kleros-v2/issues/2045)) -- Add public functions to `SortitionModuleBase` `getJurorLeftoverPNK(address _juror)` and `withdrawLeftoverPNK(address _account)` ([#2004](https://github.com/kleros/kleros-v2/issues/2004)) -- Add a permissioned function to KlerosCoreBase `transferBySortitionModule(address _account, uint256 _amount)` -- Add a public boolean `DisputeKitBase.coreDisputeIDToActive` keyed by `coreDisputeID` ([#2039](https://github.com/kleros/kleros-v2/issues/2039)) -- Support for the Shutter API token by the keeper bot using the environment variable `SHUTTER_API_KEY` ([`f999611`](https://github.com/kleros/kleros-v2/commit/f999611)) - -### Removed - -- Remove instant staking logic ([#2004](https://github.com/kleros/kleros-v2/issues/2004)) -- Remove the parameter `_alreadyTransferred` to the staking functions. No external interfaces impact. ([#2004](https://github.com/kleros/kleros-v2/issues/2004)) - -### Fixed - -- Do not prevent a juror from being drawn if their entire stake is already locked ([#2004](https://github.com/kleros/kleros-v2/issues/2004)) -- Prevent stake corruption when delayed stakes move existing stakes to another court and juror is drawn ([#2004](https://github.com/kleros/kleros-v2/issues/2004)) -- Ensure that a dispute does belong to the right dispute kit ([#2039](https://github.com/kleros/kleros-v2/issues/2039)) -- Reset `dispute.jumped` in dispute kit `createDispute()` ([#2039](https://github.com/kleros/kleros-v2/issues/2039)) - -## [0.9.4] - 2025-06-23 - -### Changed - -- Upgrade the Beta contracts ([`a72c450`](https://github.com/kleros/kleros-v2/commit/a72c450)) -- Upgrade the Testnet contracts ([`05c5b3d`](https://github.com/kleros/kleros-v2/commit/05c5b3d)) -- Upgrade the Devnet contracts ([`019cfd9`](https://github.com/kleros/kleros-v2/commit/019cfd9)) - -### Added - -- Add a view function `KlerosCoreBase.getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round)` -- Add a public boolean `DisputeKitBase.alreadyDrawn` keyed by `localDisputeID`, `localRoundID` and `drawnAddress` - -### Fixed - -- Stop calling `getRoundInfo()` from the mutating function `DisputeKitBase._postDrawCheck()` ([`524a2dc`](https://github.com/kleros/kleros-v2/commit/524a2dc)) -- Restore the broken dispute kit storage layout on Testnet ([`1d2e62a`](https://github.com/kleros/kleros-v2/commit/1d2e62a)) -- Fix a typo in SafeERC20.sol ([#1960](https://github.com/kleros/kleros-v2/issues/1960)) - -### Uncategorized - -## [0.9.3] - 2025-04-18 - -### Changed - -- **Breaking change**: Bundle the package for both CJS and ESM, it changes the package entry point ([`c132303`](https://github.com/kleros/kleros-v2/commit/c132303)) -- Pass the commit and appeal periods quicker when possible ([#1955](https://github.com/kleros/kleros-v2/issues/1955)) - -### Added - -- Add contracts getter for Viem ([`1aeb0a2`](https://github.com/kleros/kleros-v2/commit/1aeb0a2)) -- Add contract getter for EtherJS, export deployment files ([`692c83f`](https://github.com/kleros/kleros-v2/commit/692c83f)) -- New DisputeKitBase view function `isAppealFunded()` ([#1955](https://github.com/kleros/kleros-v2/issues/1955)) - -### Fixed - -- Fix typo in custom error `StakingNotPossibleInThisCourt` ([#1956](https://github.com/kleros/kleros-v2/issues/1956)) - -## [0.8.1] - 2025-04-10 - -[0.13.0]: https://github.com/kleros/kleros-v2/releases/tag/@kleros%2Fkleros-v2-contracts@0.13.0 -[0.12.0]: https://github.com/kleros/kleros-v2/releases/tag/@kleros%2Fkleros-v2-contracts@0.12.0 -[0.11.0]: https://github.com/kleros/kleros-v2/releases/tag/@kleros%2Fkleros-v2-contracts@0.11.0 -[0.10.0]: https://github.com/kleros/kleros-v2/releases/tag/@kleros%2Fkleros-v2-contracts@0.10.0 -[0.9.4]: https://github.com/kleros/kleros-v2/releases/tag/@kleros%2Fkleros-v2-contracts@0.9.4 -[0.9.3]: https://github.com/kleros/kleros-v2/releases/tag/@kleros%2Fkleros-v2-contracts@0.9.3 -[0.8.1]: https://github.com/kleros/kleros-v2/releases/tag/@kleros%2Fkleros-v2-contracts@0.8.1 diff --git a/contracts/DEVNET_REDEPLOY.md b/contracts/DEVNET_REDEPLOY.md deleted file mode 100644 index 19f9b7ae3..000000000 --- a/contracts/DEVNET_REDEPLOY.md +++ /dev/null @@ -1,109 +0,0 @@ -## Clean up of the old artifacts - -The following contracts have been preserved: - -- The University contracts (out-of-scope for now) -- The ERC20 tokens and their faucets (unchanged): PinakionV2, PNK, PNKFaucet, DAI, DAIFaucet, WETH, WETHFaucet -- The RNG contracts (unchanged): RandomizerOracle, BlockHashRNG, ChainlinkRNG, ChainlinkVRFCoordinator (mock) -- KlerosV2NeoEarlyUser (unchanged, for Neo devnet) - -```shell -rm deployments/arbitrumSepoliaDevnet/DisputeKitClassic.json -rm deployments/arbitrumSepoliaDevnet/DisputeKitClassic_Implementation.json -rm deployments/arbitrumSepoliaDevnet/DisputeKitClassic_Proxy.json -rm deployments/arbitrumSepoliaDevnet/DisputeKitGated_Implementation.json -rm deployments/arbitrumSepoliaDevnet/DisputeKitGated_Proxy.json -rm deployments/arbitrumSepoliaDevnet/DisputeKitGated.json -rm deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter_Implementation.json -rm deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter_Proxy.json -rm deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter.json -rm deployments/arbitrumSepoliaDevnet/DisputeKitShutter.json -rm deployments/arbitrumSepoliaDevnet/DisputeKitShutter_Implementation.json -rm deployments/arbitrumSepoliaDevnet/DisputeKitShutter_Proxy.json -rm deployments/arbitrumSepoliaDevnet/DisputeResolver.json -rm deployments/arbitrumSepoliaDevnet/DisputeResolverRuler.json -rm deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry.json -rm deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry_Implementation.json -rm deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry_Proxy.json -rm deployments/arbitrumSepoliaDevnet/EvidenceModule.json -rm deployments/arbitrumSepoliaDevnet/EvidenceModule_Implementation.json -rm deployments/arbitrumSepoliaDevnet/EvidenceModule_Proxy.json -rm deployments/arbitrumSepoliaDevnet/KlerosCore.json -rm deployments/arbitrumSepoliaDevnet/KlerosCoreRuler.json -rm deployments/arbitrumSepoliaDevnet/KlerosCoreRuler_Implementation.json -rm deployments/arbitrumSepoliaDevnet/KlerosCoreRuler_Proxy.json -rm deployments/arbitrumSepoliaDevnet/KlerosCoreSnapshotProxy.json -rm deployments/arbitrumSepoliaDevnet/KlerosCore_Implementation.json -rm deployments/arbitrumSepoliaDevnet/KlerosCore_Proxy.json -rm deployments/arbitrumSepoliaDevnet/PolicyRegistry.json -rm deployments/arbitrumSepoliaDevnet/PolicyRegistry_Implementation.json -rm deployments/arbitrumSepoliaDevnet/PolicyRegistry_Proxy.json -rm deployments/arbitrumSepoliaDevnet/SortitionModule.json -rm deployments/arbitrumSepoliaDevnet/SortitionModule_Implementation.json -rm deployments/arbitrumSepoliaDevnet/SortitionModule_Proxy.json -``` - -## Contracts Deployment - DRY RUN - -Shell 1: fork node - -```shell -anvil --fork-url https://sepolia-rollup.arbitrum.io/rpc -``` - -Shell 2: deployer - -```shell -export ARBITRUM_SEPOLIA_RPC=http://127.0.0.1:8545 - -yarn clean -yarn deploy --network arbitrumSepoliaDevnet --tags Resolver -yarn deploy --network arbitrumSepoliaDevnet --tags ArbitrationRuler - -unset ARBITRUM_SEPOLIA_RPC -``` - -:warning: Remember to delete all the deployed artifacts after each dry run. - -## Contracts Deployment - LIVE - -```shell -yarn clean -yarn deploy --network arbitrumSepoliaDevnet --tags Resolver -yarn deploy --network arbitrumSepoliaDevnet --tags ArbitrationRuler - -# Contracts verification, marking proxies -yarn etherscan-verify --network arbitrumSepoliaDevnet -yarn etherscan-verify-proxies - -# Docs update -./scripts/populateReadme.sh -``` - -## Courts structure and policies configuration - -```shell -yarn hardhat populate:courts --from v2_devnet --network arbitrumSepoliaDevnet - -yarn hardhat populate:policy-registry --from v2_devnet --network arbitrumSepoliaDevnet -``` - -## Contracts SDK - -### Refresh the artifacts - -```shell -# Viem artifacts -yarn viem:generate-devnet - -# Hardhat artifacts -yarn export:devnet -``` - -### Update the contract helpers - -If there are new or removed contracts, edit the contract helpers in: - -- `scripts/utils/contracts.ts` (Hardhat runtime) -- `deployments/contractsEthers.ts` (pure EthersJS) -- `deployments/contractsViem.ts` (pure Viem) diff --git a/contracts/README.md b/contracts/README.md deleted file mode 100644 index 4f5d6d657..000000000 --- a/contracts/README.md +++ /dev/null @@ -1,296 +0,0 @@ -# @kleros/kleros-v2-contracts - -Smart contracts for Kleros v2 - -## Deployments - -Refresh the list of deployed contracts by running `./scripts/generateDeploymentsMarkdown.sh` or `./scripts/populateReadme.sh`. - -### V2 Neo (prelaunch) - -#### Arbitrum One - -- [BlockHashRNG](https://arbiscan.io/address/0x39D123fc4cFD24EA5bB76195f9ecFE1f0DF35b0B) -- [ChainlinkRNG](https://arbiscan.io/address/0x897d83a7d5F23555eFA15e1BE297d5503522cbA3) -- [DisputeKitClassicNeo: proxy](https://arbiscan.io/address/0x70B464be85A547144C72485eBa2577E5D3A45421), [implementation](https://arbiscan.io/address/0x371Aa4B1AE5b5f9422f3Ff1d105029AAd1D319BC) -- [DisputeKitGatedNeo: proxy](https://arbiscan.io/address/0xaE1eed20C125B739b64c948820C61F809ad9a925), [implementation](https://arbiscan.io/address/0xEA7863E6dE863e8E6d037D8693ad5dA45Db7790a) -- [DisputeKitGatedShutterNeo: proxy](https://arbiscan.io/address/0x788330092B9704809C19858E39EB9Ac402c2E47b), [implementation](https://arbiscan.io/address/0xb12EB4c0716d3A9861a9AC471c6CdDB808d61b32) -- [DisputeKitShutterNeo: proxy](https://arbiscan.io/address/0x9D3e3f1765744c2a1BC6F6088549770444BBC768), [implementation](https://arbiscan.io/address/0xF3103B46403A0bBd4551648BFb29BCC2b8783947) -- [DisputeResolverNeo](https://arbiscan.io/address/0xb5526D022962A1fFf6eD32C93e8b714c901F4323) -- [DisputeResolverRulerNeo](https://arbiscan.io/address/0xb3a5FdEAF461c42caCe148e978e6FBCa97bE6140) -- [DisputeTemplateRegistry: proxy](https://arbiscan.io/address/0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2), [implementation](https://arbiscan.io/address/0x57EfD43DAfCeb6C58Df57932b2B299f46fef5c87) -- [EvidenceModule: proxy](https://arbiscan.io/address/0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3), [implementation](https://arbiscan.io/address/0xA502A3942abCF8e71FBD87ed442B39b798b192C8) -- [KlerosCoreNeo: proxy](https://arbiscan.io/address/0x991d2df165670b9cac3B022f4B68D65b664222ea), [implementation](https://arbiscan.io/address/0xC1210493804eEF123096F9581Ee82B915150E54c) -- [KlerosCoreRulerNeo: proxy](https://arbiscan.io/address/0xc0169e0B19aE02ac4fADD689260CF038726DFE13), [implementation](https://arbiscan.io/address/0x85093b5EDa4F2e2E2fEDae34Da91239D6a08e324) -- [KlerosCoreSnapshotProxy](https://arbiscan.io/address/0xEF719a5B3352F607e6C4E17b7e0cDAd8322fEC95) -- [KlerosV2NeoEarlyUser](https://arbiscan.io/address/0xfE34a72c55e512601E7d491A9c5b36373cE34d63) -- [Pinakion](https://arbiscan.io/address/0x330bD769382cFc6d50175903434CCC8D206DCAE5) -- [PolicyRegistry: proxy](https://arbiscan.io/address/0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c), [implementation](https://arbiscan.io/address/0xf7EE0Cd4E33C832DC05fB359896Add6E14E96C28) -- [RandomizerRNG: proxy](https://arbiscan.io/address/0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3), [implementation](https://arbiscan.io/address/0xF1a7Cd3115F5852966430f8E3877D2221F074A2e) -- [SortitionModuleNeo: proxy](https://arbiscan.io/address/0x21A9402aDb818744B296e1d1BE58C804118DC03D), [implementation](https://arbiscan.io/address/0x3f6D0daeD166b64FCfBb9bc7c9E26423c6C08eEE) -- [TransactionBatcher](https://arbiscan.io/address/0xBC5ef8d9ad307154447AE148c088f083d2dEa4eF) - -### Official Testnet - -#### Arbitrum Sepolia - -- [BlockHashRNG](https://sepolia.arbiscan.io/address/0x0298a3EFa6Faf90865725E2b48Cf0F66e5d52754) -- [ChainlinkRNG](https://sepolia.arbiscan.io/address/0xAd5cCc93429e3A977c273cEeD106Ef16A69EAf79) -- [DAI](https://sepolia.arbiscan.io/address/0xc34aeFEa232956542C5b2f2EE55fD5c378B35c03) -- [DAIFaucet](https://sepolia.arbiscan.io/address/0x1Fa58B52326488D62A406E71DBaD839560e810fF) -- [DisputeKitClassic: proxy](https://sepolia.arbiscan.io/address/0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94), [implementation](https://sepolia.arbiscan.io/address/0xA122856B3B4C5fBcA129088af3CEb204509805f0) -- [DisputeKitGated: proxy](https://sepolia.arbiscan.io/address/0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed), [implementation](https://sepolia.arbiscan.io/address/0x2d1b63C9638ed62875256676C665a7ec14D7663C) -- [DisputeKitGatedShutter: proxy](https://sepolia.arbiscan.io/address/0x936231010462458ebaA45dDc422A5940C08a474C), [implementation](https://sepolia.arbiscan.io/address/0x3a06272f2FEEC12B0FB5F3FF82688c0F06808bE7) -- [DisputeKitShutter: proxy](https://sepolia.arbiscan.io/address/0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa), [implementation](https://sepolia.arbiscan.io/address/0xca04F97fc0Df83E25e585893F5A12fb0AebEC27d) -- [DisputeResolver](https://sepolia.arbiscan.io/address/0xed31bEE8b1F7cE89E93033C0d3B2ccF4cEb27652) -- [DisputeTemplateRegistry: proxy](https://sepolia.arbiscan.io/address/0xe763d31Cb096B4bc7294012B78FC7F148324ebcb), [implementation](https://sepolia.arbiscan.io/address/0xf97791DA66e0A8Ff8Ee4908872CfCAcc641829Ec) -- [EvidenceModule: proxy](https://sepolia.arbiscan.io/address/0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397), [implementation](https://sepolia.arbiscan.io/address/0xC4e64e6E949936a18269937FC1e18cb11E3db14D) -- [KlerosCore: proxy](https://sepolia.arbiscan.io/address/0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479), [implementation](https://sepolia.arbiscan.io/address/0x02F607722749CECd32db07AA0b0755281FE9D13c) -- [KlerosCoreSnapshotProxy](https://sepolia.arbiscan.io/address/0xd74e61A4dB9C6c3F2C97b62a319aE194f616858C) -- [PinakionV2](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) -- [PNKFaucet](https://sepolia.arbiscan.io/address/0x9f6ffc13B685A68ae359fCA128dfE776458Df464) -- [PolicyRegistry: proxy](https://sepolia.arbiscan.io/address/0x2668c46A14af8997417138B064ca1bEB70769585), [implementation](https://sepolia.arbiscan.io/address/0x7CC8E0787e381aE159C4d3e137f20f9203313D41) -- [RandomizerRNG: proxy](https://sepolia.arbiscan.io/address/0x51a97ad9F0aA818e75819da3cA20CAc319580627), [implementation](https://sepolia.arbiscan.io/address/0x1237F02bBeFDAEA20cE3A66aCAe458C4106Ae203) -- [SortitionModule: proxy](https://sepolia.arbiscan.io/address/0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD), [implementation](https://sepolia.arbiscan.io/address/0x0C872eeF07030107b53eaD15bb7dD7E6FBCA2b83) -- [TransactionBatcher](https://sepolia.arbiscan.io/address/0x35f93986950804ac1F93519BF68C2a7Dd776db0E) -- [WETH](https://sepolia.arbiscan.io/address/0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511) -- [WETHFaucet](https://sepolia.arbiscan.io/address/0x922B84134e41BC5c9EDE7D5EFCE22Ba3D0e71835) - -#### Sepolia - -- [PinakionV2](https://sepolia.etherscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5) - -#### Chiado - -- [ArbitrableExample](https://gnosis-chiado.blockscout.com/address/0x438ca5337AE771dF926B7f4fDE1A21D72a315bDC) -- [DisputeResolver](https://gnosis-chiado.blockscout.com/address/0x5f79737f65320bA12440aA88087281cC8e71A781) -- [DisputeTemplateRegistry](https://gnosis-chiado.blockscout.com/address/0xA55D4b90c1F8D1fD0408232bF6FA498dD6786385) -- [ForeignGatewayOnGnosis](https://gnosis-chiado.blockscout.com/address/0x2824bdcc752b1272D56A84be03A74Ee856C06e43) -- [SortitionSumTreeFactory](https://gnosis-chiado.blockscout.com/address/0xc7e3BF90299f6BD9FA7c3703837A9CAbB5743636) -- [TokenBridge](https://gnosis-chiado.blockscout.com/address/0xbb3c86f9918C3C1d83668fA84e79E876d147fFf2) -- [WETH](https://gnosis-chiado.blockscout.com/address/0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8) -- [WETHFaucet](https://gnosis-chiado.blockscout.com/address/0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F) -- [WPNKFaucet](https://gnosis-chiado.blockscout.com/address/0x5898aeE045A25B276369914c3448B72a41758B2c) -- [WrappedPinakionV2](https://gnosis-chiado.blockscout.com/address/0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd) -- [xKlerosLiquidV2](https://gnosis-chiado.blockscout.com/address/0x34E520dc1d2Db660113b64724e14CEdCD01Ee879) - -### Devnet - -#### Arbitrum Sepolia - -- [ArbitrableExample](https://sepolia.arbiscan.io/address/0x3Eae72F076c68F5c354C73abC33EAA291ef1b2Fa) -- [BlockHashRNG](https://sepolia.arbiscan.io/address/0x56d6d65Fe202232714794B5D5e4ed9894466Ee01) -- [ChainlinkRNG](https://sepolia.arbiscan.io/address/0x7e40f5aC809521654A9c17e442F2a0a5a4d890FA) -- [DAI](https://sepolia.arbiscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5) -- [DAIFaucet](https://sepolia.arbiscan.io/address/0xB5b39A1bcD2D7097A8824B3cC18Ebd2dFb0D9B5E) -- [DisputeKitClassic: proxy](https://sepolia.arbiscan.io/address/0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1), [implementation](https://sepolia.arbiscan.io/address/0xc4cC0274E55a9818f8cF42640B1De61d269425ad) -- [DisputeKitClassicUniversity: proxy](https://sepolia.arbiscan.io/address/0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5), [implementation](https://sepolia.arbiscan.io/address/0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B) -- [DisputeKitGated: proxy](https://sepolia.arbiscan.io/address/0x677dA30B4b27D129354DdA1e219Bcc86802132d1), [implementation](https://sepolia.arbiscan.io/address/0xA27EedcEA916BC1ab91720cE70c56666E854F55e) -- [DisputeKitGatedShutter: proxy](https://sepolia.arbiscan.io/address/0xd86b84eb36Cd48f3f384b4490F255b494385F429), [implementation](https://sepolia.arbiscan.io/address/0x56199F9E5C0ef9251A251a41597A971141199EDF) -- [DisputeKitShutter: proxy](https://sepolia.arbiscan.io/address/0xfE0a958bc744Bb9E224E1822625B53134ac5CB69), [implementation](https://sepolia.arbiscan.io/address/0x6582CE0FdB29B5673E6650e34728C784BafB2139) -- [DisputeResolver](https://sepolia.arbiscan.io/address/0x71f8537e925C753Fe88DA7e69Ae423f9f3a9A292) -- [DisputeResolverRuler](https://sepolia.arbiscan.io/address/0xAEB1bbaE58125BA5F32349c69e4274d15dfD6EC3) -- [DisputeResolverUniversity](https://sepolia.arbiscan.io/address/0x2Aa1a94307E772BeE42E9EfbD137b1053F1fCfd4) -- [DisputeTemplateRegistry: proxy](https://sepolia.arbiscan.io/address/0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f), [implementation](https://sepolia.arbiscan.io/address/0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1) -- [EvidenceModule: proxy](https://sepolia.arbiscan.io/address/0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49), [implementation](https://sepolia.arbiscan.io/address/0x450Aa35da0ad8B282C5d910254055651417C2200) -- [KlerosCore: proxy](https://sepolia.arbiscan.io/address/0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9), [implementation](https://sepolia.arbiscan.io/address/0xaBf1AA1D08F98ED800938B1B086d0904c5BF4f0E) -- [KlerosCoreRuler: proxy](https://sepolia.arbiscan.io/address/0x0630e4248a17b506809009F5D88E2f5bEE584c83), [implementation](https://sepolia.arbiscan.io/address/0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF) -- [KlerosCoreSnapshotProxy](https://sepolia.arbiscan.io/address/0xF924ac62b20901914c101Fa089Da1FB6A0585138) -- [KlerosCoreUniversity: proxy](https://sepolia.arbiscan.io/address/0x5AB37F38778Bc175852fA353056591D91c744ce6), [implementation](https://sepolia.arbiscan.io/address/0xF74DaBfC5F5dbdBD07636637204d9C35326D2906) -- [KlerosV2NeoEarlyUser](https://sepolia.arbiscan.io/address/0x0d60Ff8bbCF49Bc5352328E7E28e141834d7750F) -- [PinakionV2](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) -- [PNKFaucet](https://sepolia.arbiscan.io/address/0x7EFE468003Ad6A858b5350CDE0A67bBED58739dD) -- [PolicyRegistry: proxy](https://sepolia.arbiscan.io/address/0xd8681dBF525ecBda2F799BFddB96840065075e8A), [implementation](https://sepolia.arbiscan.io/address/0x472846F88D1356bb483a88f97B55026654Fc5deD) -- [SortitionModule: proxy](https://sepolia.arbiscan.io/address/0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663), [implementation](https://sepolia.arbiscan.io/address/0x8a26445989c944C58503275ad87Ab4d7b17d4F1e) -- [SortitionModuleUniversity: proxy](https://sepolia.arbiscan.io/address/0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79), [implementation](https://sepolia.arbiscan.io/address/0x5CAD621D69E0535422aCFaCC0017bC32beC7A486) -- [TransactionBatcher](https://sepolia.arbiscan.io/address/0x35f93986950804ac1F93519BF68C2a7Dd776db0E) -- [WETH](https://sepolia.arbiscan.io/address/0x3829A2486d53ee984a0ca2D76552715726b77138) -- [WETHFaucet](https://sepolia.arbiscan.io/address/0x6F8C10E0030aDf5B8030a5E282F026ADdB6525fd) - -#### Sepolia - -- [PinakionV2](https://sepolia.etherscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5) - -#### Chiado - -- [ArbitrableExample](https://gnosis-chiado.blockscout.com/address/0xB56A23b396E0eae85414Ce5815da448ba529Cb4A) -- [DisputeResolver](https://gnosis-chiado.blockscout.com/address/0x16f20604a51Ac1e68c9aAd1C0E53e951B62CC1Cb) -- [DisputeTemplateRegistry](https://gnosis-chiado.blockscout.com/address/0x96E49552669ea81B8E9cE8694F7E4A55D8bFb957) -- [ForeignGatewayOnGnosis: proxy](https://gnosis-chiado.blockscout.com/address/0x078dAd05373d19d7fd6829735b765F12242a4300), [implementation](https://gnosis-chiado.blockscout.com/address/0xA4096fDA5291D5bbDD5Ed0D6CF2AF98229168Ace) -- [WETH](https://gnosis-chiado.blockscout.com/address/0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8) -- [WETHFaucet](https://gnosis-chiado.blockscout.com/address/0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F) -- [WPNKFaucet](https://gnosis-chiado.blockscout.com/address/0x5898aeE045A25B276369914c3448B72a41758B2c) -- [WrappedPinakionV2](https://gnosis-chiado.blockscout.com/address/0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd) - -## Getting Started - -### Install the Dependencies - -```bash -yarn install -``` - -### Run Tests - -```bash -yarn test -``` - -### Compile the Contracts - -```bash -yarn build -``` - -### Run Linter on Files - -```bash -yarn lint -``` - -### Fix Linter Issues on Files - -```bash -yarn fix -``` - -### Deploy Instructions - -**NOTICE:** the commands below work only if you are inside the `contracts/` directory. - -#### 0. Set the Environment Variables - -Copy `.env.example` file as `.env` and edit it accordingly. - -```bash -cp .env.example .env -``` - -The following env vars are required: - -- `PRIVATE_KEY`: the private key of the deployer account used for the testnets. -- `MAINNET_PRIVATE_KEY`: the private key of the deployer account used for Mainnet. -- `INFURA_API_KEY`: the API key for infura. - -The ones below are optional: - -- `ETHERSCAN_API_KEY`: to verify the source of the newly deployed contracts on **Etherscan**. -- `ARBISCAN_API_KEY`: to verify the source of the newly deployed contracts on **Arbitrum**. -- `GNOSISSCAN_API_KEY`: to verify the source of the newly deployed contracts on **Gnosis chain**. - -#### 1. Update the Constructor Parameters (optional) - -If some of the constructor parameters (such as the Meta Evidence) needs to change, you need to update the files in the `deploy/` directory. - -#### 2. Deploy to a Local Network - -The complete deployment is multi-chain, so a deployment to the local network can only simulate either the Home chain or the Foreign chain. - -**Shell 1: the node** - -```bash -yarn hardhat node --tags nothing -``` - -**Shell 2: the deploy script** - -```bash -yarn deploy --network localhost --tags -``` - -#### 3. Deploy to Public Testnets - -```bash -# ArbitrumSepolia to Chiado -yarn deploy --network arbitrumSepolia --tags Arbitration -yarn deploy --network arbitrumSepolia --tags Resolver -yarn deploy --network chiado --tags ForeignGatewayOnGnosis -yarn deploy --network chiado --tags KlerosLiquidOnGnosis -yarn deploy --network chiado --tags ForeignArbitrable -yarn deploy --network arbitrumSepolia --tags HomeGatewayToGnosis - -# Sepolia -yarn deploy --network sepolia --tags ForeignGatewayOnEthereum -yarn deploy --network sepolia --tags ForeignArbitrable -yarn deploy --network arbitrumSepolia --tags HomeGatewayToEthereum -``` - -The deployed addresses should be displayed to the screen after the deployment is complete. If you missed them, you can always go to the `deployments/` directory and look for the respective file. - -#### 4. Deploy a Devnet on Public Testnets - -Same steps as above but append `Devnet` to the `--network` parameter. - -#### Running Test Fixtures - -**Shell 1: the node** - -```bash -yarn hardhat node --tags Arbitration,VeaMock -``` - -**Shell 2: the test scripts** - -```bash -yarn test --network localhost -``` - -#### 4. Verify the Source Code - -This must be done for each network separately. - -```bash -# explorer -yarn etherscan-verify --network -yarn etherscan-verify-proxies - -# sourcify -yarn sourcify --network - -``` - -## Ad-hoc procedures - -### Populating the policy registry and courts - -The policy registry and courts configuration can be found in `config/policies.*.json` and `config/courts.*.json`. - -#### 1/ Export the registry data from V1 - -```bash -for network in mainnet gnosischain -do - yarn hardhat run scripts/getPoliciesV1.ts --network $network | tee config/policies.v1.$network.json - yarn hardhat run scripts/getCourtsV1.ts --network $network | tee config/courts.v1.$network.json -done -``` - -#### 2/ Import the data to V2 - Public Testnet - -```bash -yarn hardhat populate:courts --from v2_testnet --max-number-of-courts 3 --network arbitrumSepolia -yarn hardhat populate:policy-registry --from v2_testnet --network arbitrumSepolia -``` - -### Generate deployment artifacts for existing contracts - -#### Usage - -```bash -scripts/generateDeploymentArtifact.sh
-``` - -#### Example: WETH on Gnosis chain - -```bash -scripts/generateDeploymentArtifact.sh gnosischain 0xf8d1677c8a0c961938bf2f9adc3f3cfda759a9d9 > deployments/gnosischain/WETH.json -``` - -### Push the contracts to a Tenderly project - -Ensure that your `$TENDERLY_PROJECT` and `$TENDERLY_USERNAME` is set correctly in `.env`. - -```bash -yarn tenderly-verify --network sepolia -yarn tenderly-verify --network arbitrumSepolia -``` diff --git a/contracts/README.md.template b/contracts/README.md.template deleted file mode 100644 index 0c4594d35..000000000 --- a/contracts/README.md.template +++ /dev/null @@ -1,182 +0,0 @@ -# @kleros/kleros-v2-contracts - -Smart contracts for Kleros v2 - -## Deployments - -Refresh the list of deployed contracts by running `./scripts/generateDeploymentsMarkdown.sh` or `./scripts/populateReadme.sh`. - -$deployments - -## Getting Started - -### Install the Dependencies - -```bash -yarn install -``` - -### Run Tests - -```bash -yarn test -``` - -### Compile the Contracts - -```bash -yarn build -``` - -### Run Linter on Files - -```bash -yarn lint -``` - -### Fix Linter Issues on Files - -```bash -yarn fix -``` - -### Deploy Instructions - -**NOTICE:** the commands below work only if you are inside the `contracts/` directory. - -#### 0. Set the Environment Variables - -Copy `.env.example` file as `.env` and edit it accordingly. - -```bash -cp .env.example .env -``` - -The following env vars are required: - -- `PRIVATE_KEY`: the private key of the deployer account used for the testnets. -- `MAINNET_PRIVATE_KEY`: the private key of the deployer account used for Mainnet. -- `INFURA_API_KEY`: the API key for infura. - -The ones below are optional: - -- `ETHERSCAN_API_KEY`: to verify the source of the newly deployed contracts on **Etherscan**. -- `ARBISCAN_API_KEY`: to verify the source of the newly deployed contracts on **Arbitrum**. -- `GNOSISSCAN_API_KEY`: to verify the source of the newly deployed contracts on **Gnosis chain**. - -#### 1. Update the Constructor Parameters (optional) - -If some of the constructor parameters (such as the Meta Evidence) needs to change, you need to update the files in the `deploy/` directory. - -#### 2. Deploy to a Local Network - -The complete deployment is multi-chain, so a deployment to the local network can only simulate either the Home chain or the Foreign chain. - -**Shell 1: the node** - -```bash -yarn hardhat node --tags nothing -``` - -**Shell 2: the deploy script** - -```bash -yarn deploy --network localhost --tags -``` - -#### 3. Deploy to Public Testnets - -```bash -# ArbitrumSepolia to Chiado -yarn deploy --network arbitrumSepolia --tags Arbitration -yarn deploy --network arbitrumSepolia --tags Resolver -yarn deploy --network chiado --tags ForeignGatewayOnGnosis -yarn deploy --network chiado --tags KlerosLiquidOnGnosis -yarn deploy --network chiado --tags ForeignArbitrable -yarn deploy --network arbitrumSepolia --tags HomeGatewayToGnosis - -# Sepolia -yarn deploy --network sepolia --tags ForeignGatewayOnEthereum -yarn deploy --network sepolia --tags ForeignArbitrable -yarn deploy --network arbitrumSepolia --tags HomeGatewayToEthereum -``` - -The deployed addresses should be displayed to the screen after the deployment is complete. If you missed them, you can always go to the `deployments/` directory and look for the respective file. - -#### 4. Deploy a Devnet on Public Testnets - -Same steps as above but append `Devnet` to the `--network` parameter. - -#### Running Test Fixtures - -**Shell 1: the node** - -```bash -yarn hardhat node --tags Arbitration,VeaMock -``` - -**Shell 2: the test scripts** - -```bash -yarn test --network localhost -``` - -#### 4. Verify the Source Code - -This must be done for each network separately. - -```bash -# explorer -yarn etherscan-verify --network -yarn etherscan-verify-proxies - -# sourcify -yarn sourcify --network - -``` - -## Ad-hoc procedures - -### Populating the policy registry and courts - -The policy registry and courts configuration can be found in `config/policies.*.json` and `config/courts.*.json`. - -#### 1/ Export the registry data from V1 - -```bash -for network in mainnet gnosischain -do - yarn hardhat run scripts/getPoliciesV1.ts --network $network | tee config/policies.v1.$network.json - yarn hardhat run scripts/getCourtsV1.ts --network $network | tee config/courts.v1.$network.json -done -``` - -#### 2/ Import the data to V2 - Public Testnet - -```bash -yarn hardhat populate:courts --from v2_testnet --max-number-of-courts 3 --network arbitrumSepolia -yarn hardhat populate:policy-registry --from v2_testnet --network arbitrumSepolia -``` - -### Generate deployment artifacts for existing contracts - -#### Usage - -```bash -scripts/generateDeploymentArtifact.sh
-``` - -#### Example: WETH on Gnosis chain - -```bash -scripts/generateDeploymentArtifact.sh gnosischain 0xf8d1677c8a0c961938bf2f9adc3f3cfda759a9d9 > deployments/gnosischain/WETH.json -``` - -### Push the contracts to a Tenderly project - -Ensure that your `$TENDERLY_PROJECT` and `$TENDERLY_USERNAME` is set correctly in `.env`. - -```bash -yarn tenderly-verify --network sepolia -yarn tenderly-verify --network arbitrumSepolia -``` diff --git a/contracts/config/courts.v1.gnosischain.json b/contracts/config/courts.v1.gnosischain.json deleted file mode 100644 index f18c2de85..000000000 --- a/contracts/config/courts.v1.gnosischain.json +++ /dev/null @@ -1,272 +0,0 @@ -[ - { - "id": 0, - "parent": 0, - "hiddenVotes": true, - "minStake": "1600000000000000000000", - "alpha": "10000", - "feeForJuror": "13000000000000000000", - "jurorsForCourtJump": "511", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "id": 1, - "parent": 0, - "hiddenVotes": false, - "minStake": "1600000000000000000000", - "alpha": "5000", - "feeForJuror": "6400000000000000000", - "jurorsForCourtJump": "14", - "timesPerPeriod": [ - 140400, - 291600, - 291600, - 194400 - ] - }, - { - "id": 2, - "parent": 0, - "hiddenVotes": false, - "minStake": "5800000000000000000000", - "alpha": "5000", - "feeForJuror": "19000000000000000000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 3, - "parent": 2, - "hiddenVotes": false, - "minStake": "5800000000000000000000", - "alpha": "1800", - "feeForJuror": "8200000000000000000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 4, - "parent": 2, - "hiddenVotes": false, - "minStake": "5800000000000000000000", - "alpha": "1800", - "feeForJuror": "8200000000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 5, - "parent": 2, - "hiddenVotes": false, - "minStake": "5800000000000000000000", - "alpha": "1800", - "feeForJuror": "8200000000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 6, - "parent": 2, - "hiddenVotes": false, - "minStake": "5800000000000000000000", - "alpha": "2200", - "feeForJuror": "10000000000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 7, - "parent": 2, - "hiddenVotes": false, - "minStake": "5800000000000000000000", - "alpha": "2200", - "feeForJuror": "10000000000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 8, - "parent": 2, - "hiddenVotes": false, - "minStake": "5800000000000000000000", - "alpha": "2800", - "feeForJuror": "13000000000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 9, - "parent": 2, - "hiddenVotes": false, - "minStake": "5800000000000000000000", - "alpha": "2800", - "feeForJuror": "13000000000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 10, - "parent": 2, - "hiddenVotes": false, - "minStake": "5800000000000000000000", - "alpha": "2800", - "feeForJuror": "13000000000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 11, - "parent": 2, - "hiddenVotes": false, - "minStake": "5800000000000000000000", - "alpha": "2800", - "feeForJuror": "13000000000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 12, - "parent": 0, - "hiddenVotes": false, - "minStake": "7400000000000000000000", - "alpha": "5000", - "feeForJuror": "30000000000000000000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 13, - "parent": 12, - "hiddenVotes": false, - "minStake": "7400000000000000000000", - "alpha": "5000", - "feeForJuror": "30000000000000000000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 14, - "parent": 12, - "hiddenVotes": false, - "minStake": "7400000000000000000000", - "alpha": "5000", - "feeForJuror": "30000000000000000000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 15, - "parent": 0, - "hiddenVotes": true, - "minStake": "3300000000000000000000", - "alpha": "5000", - "feeForJuror": "13000000000000000000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "id": 16, - "parent": 15, - "hiddenVotes": false, - "minStake": "3300000000000000000000", - "alpha": "2400", - "feeForJuror": "6400000000000000000", - "jurorsForCourtJump": "30", - "timesPerPeriod": [ - 140400, - 291600, - 291600, - 194400 - ] - }, - { - "id": 17, - "parent": 15, - "hiddenVotes": false, - "minStake": "3300000000000000000000", - "alpha": "4250", - "feeForJuror": "15000000000000000000", - "jurorsForCourtJump": "15", - "timesPerPeriod": [ - 108000, - 216000, - 216000, - 216000 - ] - } -] diff --git a/contracts/config/courts.v1.mainnet.json b/contracts/config/courts.v1.mainnet.json deleted file mode 100644 index 6d5559ba6..000000000 --- a/contracts/config/courts.v1.mainnet.json +++ /dev/null @@ -1,362 +0,0 @@ -[ - { - "id": 0, - "parent": 0, - "hiddenVotes": false, - "minStake": "1700000000000000000000", - "alpha": "10000", - "feeForJuror": "16000000000000000", - "jurorsForCourtJump": "511", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "id": 1, - "parent": 0, - "hiddenVotes": false, - "minStake": "5000000000000000000000", - "alpha": "5000", - "feeForJuror": "20000000000000000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "id": 2, - "parent": 1, - "hiddenVotes": false, - "minStake": "5000000000000000000000", - "alpha": "3900", - "feeForJuror": "11000000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 151200, - 324000, - 324000, - 302400 - ] - }, - { - "id": 3, - "parent": 2, - "hiddenVotes": false, - "minStake": "10000000000000000000000", - "alpha": "5000", - "feeForJuror": "70000000000000000", - "jurorsForCourtJump": "47", - "timesPerPeriod": [ - 367200, - 626400, - 626400, - 604800 - ] - }, - { - "id": 4, - "parent": 1, - "hiddenVotes": false, - "minStake": "23000000000000000000000", - "alpha": "5000", - "feeForJuror": "79000000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "id": 5, - "parent": 0, - "hiddenVotes": false, - "minStake": "14000000000000000000000", - "alpha": "3250", - "feeForJuror": "100000000000000000", - "jurorsForCourtJump": "15", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "id": 6, - "parent": 0, - "hiddenVotes": false, - "minStake": "3900000000000000000000", - "alpha": "5000", - "feeForJuror": "36000000000000000", - "jurorsForCourtJump": "3", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "id": 7, - "parent": 0, - "hiddenVotes": false, - "minStake": "14000000000000000000000", - "alpha": "3250", - "feeForJuror": "100000000000000000", - "jurorsForCourtJump": "3", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "id": 8, - "parent": 0, - "hiddenVotes": false, - "minStake": "1700000000000000000000", - "alpha": "4000", - "feeForJuror": "4500000000000000", - "jurorsForCourtJump": "255", - "timesPerPeriod": [ - 140400, - 291600, - 291600, - 194400 - ] - }, - { - "id": 9, - "parent": 0, - "hiddenVotes": false, - "minStake": "4600000000000000000000", - "alpha": "5000", - "feeForJuror": "25000000000000000", - "jurorsForCourtJump": "30", - "timesPerPeriod": [ - 140400, - 291600, - 291600, - 194400 - ] - }, - { - "id": 10, - "parent": 0, - "hiddenVotes": false, - "minStake": "3800000000000000000000", - "alpha": "5000", - "feeForJuror": "25000000000000000", - "jurorsForCourtJump": "64", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 38800 - ] - }, - { - "id": 11, - "parent": 10, - "hiddenVotes": false, - "minStake": "4700000000000000000000", - "alpha": "5000", - "feeForJuror": "31000000000000000", - "jurorsForCourtJump": "32", - "timesPerPeriod": [ - 367200, - 626400, - 626400, - 604800 - ] - }, - { - "id": 12, - "parent": 9, - "hiddenVotes": false, - "minStake": "4600000000000000000000", - "alpha": "4100", - "feeForJuror": "25000000000000000", - "jurorsForCourtJump": "30", - "timesPerPeriod": [ - 210660, - 437400, - 437400, - 291600 - ] - }, - { - "id": 13, - "parent": 6, - "hiddenVotes": false, - "minStake": "3900000000000000000000", - "alpha": "4000", - "feeForJuror": "28000000000000000", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 14, - "parent": 6, - "hiddenVotes": false, - "minStake": "3900000000000000000000", - "alpha": "4000", - "feeForJuror": "28000000000000000", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 15, - "parent": 6, - "hiddenVotes": false, - "minStake": "3900000000000000000000", - "alpha": "4000", - "feeForJuror": "28000000000000000", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 16, - "parent": 6, - "hiddenVotes": false, - "minStake": "3900000000000000000000", - "alpha": "4000", - "feeForJuror": "29000000000000000", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 17, - "parent": 6, - "hiddenVotes": false, - "minStake": "3900000000000000000000", - "alpha": "4000", - "feeForJuror": "29000000000000000", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 18, - "parent": 6, - "hiddenVotes": false, - "minStake": "3900000000000000000000", - "alpha": "4300", - "feeForJuror": "31000000000000000", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 19, - "parent": 6, - "hiddenVotes": false, - "minStake": "3900000000000000000000", - "alpha": "4300", - "feeForJuror": "31000000000000000", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 20, - "parent": 6, - "hiddenVotes": false, - "minStake": "3900000000000000000000", - "alpha": "4300", - "feeForJuror": "31000000000000000", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 21, - "parent": 6, - "hiddenVotes": false, - "minStake": "3900000000000000000000", - "alpha": "4300", - "feeForJuror": "31000000000000000", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "id": 22, - "parent": 0, - "hiddenVotes": true, - "minStake": "2300000000000000000000", - "alpha": "10000", - "feeForJuror": "15000000000000000", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "id": 23, - "parent": 0, - "hiddenVotes": false, - "minStake": "16000000000000000000000", - "alpha": "5000", - "feeForJuror": "25000000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 540000, - 437400, - 437400, - 291600 - ] - } -] diff --git a/contracts/config/courts.v2.devnet.json b/contracts/config/courts.v2.devnet.json deleted file mode 100644 index 69a8a591f..000000000 --- a/contracts/config/courts.v2.devnet.json +++ /dev/null @@ -1,98 +0,0 @@ -[ - { - "name": "General Court", - "id": 1, - "parent": 0, - "hiddenVotes": true, - "minStake": "1500000000000000000", - "alpha": "5000", - "feeForJuror": "100000000000", - "jurorsForCourtJump": "511", - "timesPerPeriod": [ - 120, - 240, - 240, - 600 - ] - }, - { - "name": "Curation", - "id": 2, - "parent": 1, - "hiddenVotes": false, - "minStake": "2000000000000000000", - "alpha": "3100", - "feeForJuror": "100000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 120, - 240, - 240, - 600 - ] - }, - { - "name": "English Language", - "id": 3, - "parent": 1, - "hiddenVotes": false, - "minStake": "2000000000000000000", - "alpha": "5000", - "feeForJuror": "100000000000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 120, - 240, - 240, - 600 - ] - }, - { - "name": "Corte de Disputas de Consumo y Vecindad", - "id": 4, - "parent": 1, - "hiddenVotes": false, - "minStake": "2000000000000000000", - "alpha": "5000", - "feeForJuror": "100000000000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 120, - 240, - 240, - 600 - ] - }, - { - "name": "Oracle Court", - "id": 5, - "parent": 1, - "hiddenVotes": false, - "minStake": "2000000000000000000", - "alpha": "5000", - "feeForJuror": "100000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 120, - 240, - 240, - 600 - ] - }, - { - "name": "Automated Curation", - "id": 6, - "parent": 2, - "hiddenVotes": false, - "minStake": "2000000000000000000", - "alpha": "3100", - "feeForJuror": "100000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 120, - 240, - 240, - 600 - ] - } -] diff --git a/contracts/config/courts.v2.mainnet.json b/contracts/config/courts.v2.mainnet.json deleted file mode 100644 index db7ec6b98..000000000 --- a/contracts/config/courts.v2.mainnet.json +++ /dev/null @@ -1,498 +0,0 @@ -[ - { - "name": "General Court", - "id": 1, - "parent": 1, - "hiddenVotes": true, - "minStake": "2300000000000000000000", - "feeForJuror": "5000000000000000", - "alpha": "10000", - "jurorsForCourtJump": "511", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "name": "Blockchain", - "id": 2, - "parent": 1, - "hiddenVotes": false, - "minStake": "7000000000000000000000", - "feeForJuror": "6900000000000000", - "alpha": "5000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "name": "Non-Technical", - "id": 3, - "parent": 2, - "hiddenVotes": false, - "minStake": "7000000000000000000000", - "feeForJuror": "3000000000000000", - "alpha": "3333", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 151200, - 324000, - 324000, - 302400 - ] - }, - { - "name": "Token Listing", - "id": 4, - "parent": 3, - "hiddenVotes": false, - "minStake": "70000000000000000000000", - "feeForJuror": "64000000000000000", - "alpha": "5000", - "jurorsForCourtJump": "47", - "timesPerPeriod": [ - 367200, - 626400, - 626400, - 604800 - ] - }, - { - "name": "Technical", - "id": 5, - "parent": 2, - "hiddenVotes": false, - "minStake": "33000000000000000000000", - "feeForJuror": "33000000000000000", - "alpha": "5000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "name": "Marketing Services", - "id": 6, - "parent": 1, - "hiddenVotes": false, - "minStake": "7800000000000000000000", - "feeForJuror": "6200000000000000", - "alpha": "5000", - "jurorsForCourtJump": "15", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "name": "English Language", - "id": 7, - "parent": 1, - "hiddenVotes": false, - "minStake": "9000000000000000000000", - "feeForJuror": "7400000000000000", - "alpha": "5000", - "jurorsForCourtJump": "3", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "name": "Video Production", - "id": 8, - "parent": 1, - "hiddenVotes": false, - "minStake": "7500000000000000000000", - "feeForJuror": "6200000000000000", - "alpha": "5000", - "jurorsForCourtJump": "3", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "name": "Onboarding", - "id": 9, - "parent": 1, - "hiddenVotes": false, - "minStake": "2300000000000000000000", - "feeForJuror": "700000000000000", - "alpha": "1300", - "jurorsForCourtJump": "255", - "timesPerPeriod": [ - 140400, - 291600, - 291600, - 194400 - ] - }, - { - "name": "Curation", - "id": 10, - "parent": 1, - "hiddenVotes": false, - "minStake": "2600000000000000000000", - "feeForJuror": "2400000000000000", - "alpha": "5000", - "jurorsForCourtJump": "30", - "timesPerPeriod": [ - 140400, - 291600, - 291600, - 194400 - ] - }, - { - "name": "Data Analysis", - "id": 11, - "parent": 1, - "hiddenVotes": false, - "minStake": "15000000000000000000000", - "feeForJuror": "18000000000000000", - "alpha": "5000", - "jurorsForCourtJump": "64", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "name": "Statistical Modeling", - "id": 12, - "parent": 11, - "hiddenVotes": false, - "minStake": "19000000000000000000000", - "feeForJuror": "19000000000000000", - "alpha": "5000", - "jurorsForCourtJump": "32", - "timesPerPeriod": [ - 367200, - 626400, - 626400, - 604800 - ] - }, - { - "name": "Curation (Medium)", - "id": 13, - "parent": 10, - "hiddenVotes": false, - "minStake": "2900000000000000000000", - "feeForJuror": "2300000000000000", - "alpha": "5000", - "jurorsForCourtJump": "30", - "timesPerPeriod": [ - 210660, - 437400, - 437400, - 291600 - ] - }, - { - "name": "Spanish-English Translation", - "id": 14, - "parent": 7, - "hiddenVotes": false, - "minStake": "9000000000000000000000", - "feeForJuror": "3100000000000000", - "alpha": "1500", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "name": "French-English Translation", - "id": 15, - "parent": 7, - "hiddenVotes": false, - "minStake": "9000000000000000000000", - "feeForJuror": "3100000000000000", - "alpha": "1500", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "name": "Portuguese-English Translation", - "id": 16, - "parent": 7, - "hiddenVotes": false, - "minStake": "9000000000000000000000", - "feeForJuror": "3100000000000000", - "alpha": "1500", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "name": "German-English Translation", - "id": 17, - "parent": 7, - "hiddenVotes": false, - "minStake": "9000000000000000000000", - "feeForJuror": "3900000000000000", - "alpha": "1800", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "name": "Russian-English Translation", - "id": 18, - "parent": 7, - "hiddenVotes": false, - "minStake": "9000000000000000000000", - "feeForJuror": "3900000000000000", - "alpha": "1800", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "name": "Korean-English Translation", - "id": 19, - "parent": 7, - "hiddenVotes": false, - "minStake": "9000000000000000000000", - "feeForJuror": "5000000000000000", - "alpha": "2300", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "name": "Japanese-English Translation", - "id": 20, - "parent": 7, - "hiddenVotes": false, - "minStake": "9000000000000000000000", - "feeForJuror": "5000000000000000", - "alpha": "2300", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "name": "Turkish-English Translation", - "id": 21, - "parent": 7, - "hiddenVotes": false, - "minStake": "9000000000000000000000", - "feeForJuror": "5000000000000000", - "alpha": "2300", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "name": "Chinese-English Translation", - "id": 22, - "parent": 7, - "hiddenVotes": false, - "minStake": "9000000000000000000000", - "feeForJuror": "5000000000000000", - "alpha": "2300", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "name": "Corte General en Español", - "id": 23, - "parent": 1, - "hiddenVotes": false, - "minStake": "5100000000000000000000", - "feeForJuror": "5000000000000000", - "alpha": "10000", - "jurorsForCourtJump": "128", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "name": "Humanity Court", - "id": 24, - "parent": 1, - "hiddenVotes": false, - "minStake": "5300000000000000000000", - "feeForJuror": "2400000000000000", - "alpha": "2500", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 540000, - 437400, - 437400, - 291600 - ] - }, - { - "name": "Development Court", - "id": 25, - "parent": 1, - "hiddenVotes": false, - "minStake": "9500000000000000000000", - "feeForJuror": "11000000000000000", - "alpha": "5000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "name": "Solidity Court", - "id": 26, - "parent": 25, - "hiddenVotes": false, - "minStake": "9500000000000000000000", - "feeForJuror": "11000000000000000", - "alpha": "5000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "name": "Javascript Court", - "id": 27, - "parent": 25, - "hiddenVotes": false, - "minStake": "9500000000000000000000", - "feeForJuror": "11000000000000000", - "alpha": "5000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 280800, - 437400, - 437400, - 291600 - ] - }, - { - "name": "Corte de Curación en Español", - "id": 28, - "parent": 23, - "hiddenVotes": false, - "minStake": "5100000000000000000000", - "feeForJuror": "2400000000000000", - "alpha": "2500", - "jurorsForCourtJump": "30", - "timesPerPeriod": [ - 140400, - 291600, - 291600, - 194400 - ] - }, - { - "name": "Corte de Disputas de Consumo y Vecindad", - "id": 29, - "parent": 23, - "hiddenVotes": false, - "minStake": "8400000000000000000000", - "feeForJuror": "5400000000000000", - "alpha": "5000", - "jurorsForCourtJump": "15", - "timesPerPeriod": [ - 21600, - 216000, - 216000, - 216000 - ] - }, - { - "name": "Oracle Court", - "id": 30, - "parent": 1, - "hiddenVotes": false, - "minStake": "5000000000000000000000", - "feeForJuror": "6900000000000000", - "alpha": "5000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 280800, - 583200, - 583200, - 388800 - ] - }, - { - "name": "Automated Curation", - "id": 31, - "parent": 10, - "hiddenVotes": false, - "minStake": "2600000000000000000000", - "alpha": "290", - "feeForJuror": "170000000000000", - "jurorsForCourtJump": "3", - "timesPerPeriod": [ - 140400, - 291600, - 291600, - 194400 - ] - } -] diff --git a/contracts/config/courts.v2.testnet.json b/contracts/config/courts.v2.testnet.json deleted file mode 100644 index 1c15a017c..000000000 --- a/contracts/config/courts.v2.testnet.json +++ /dev/null @@ -1,82 +0,0 @@ -[ - { - "name": "General Court", - "id": 1, - "parent": 0, - "hiddenVotes": true, - "minStake": "150000000000000000000", - "alpha": "5000", - "feeForJuror": "10000000000000", - "jurorsForCourtJump": "511", - "timesPerPeriod": [ - 43200, - 43200, - 43200, - 43200 - ] - }, - { - "name": "Curation", - "id": 2, - "parent": 1, - "hiddenVotes": false, - "minStake": "200000000000000000000", - "alpha": "3100", - "feeForJuror": "10000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 43200, - 43200, - 43200, - 43200 - ] - }, - { - "name": "English Language", - "id": 3, - "parent": 1, - "hiddenVotes": false, - "minStake": "200000000000000000000", - "alpha": "5000", - "feeForJuror": "10000000000000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 43200, - 43200, - 43200, - 43200 - ] - }, - { - "name": "Corte de Disputas de Consumo y Vecindad", - "id": 4, - "parent": 1, - "hiddenVotes": false, - "minStake": "200000000000000000000", - "alpha": "5000", - "feeForJuror": "10000000000000", - "jurorsForCourtJump": "63", - "timesPerPeriod": [ - 43200, - 43200, - 43200, - 43200 - ] - }, - { - "name": "Oracle Court", - "id": 5, - "parent": 1, - "hiddenVotes": false, - "minStake": "200000000000000000000", - "alpha": "5000", - "feeForJuror": "10000000000000", - "jurorsForCourtJump": "31", - "timesPerPeriod": [ - 43200, - 43200, - 43200, - 43200 - ] - } -] diff --git a/contracts/config/policies.v1.gnosischain.json b/contracts/config/policies.v1.gnosischain.json deleted file mode 100644 index a56e9e219..000000000 --- a/contracts/config/policies.v1.gnosischain.json +++ /dev/null @@ -1,145 +0,0 @@ -[ - { - "name": "xDai General Court", - "description": "**Court Purpose:**\n\nThe General court exists as the top court in the hierarchy. All appeals made in subcourts will make their way to the General Court.", - "summary": "**Guidelines:**\n - All policies of a court also apply to all of its child subcourts.\n - Jurors should cast their vote with a suitable verification.\n - Jurors should not rule in favor of a side who have engaged in immoral activities (example: rule reject on “revenge porn” images even if they would otherwise fit into the category).\n - “Refuse to arbitrate” should be used for disputes where both sides of the dispute have engaged in activities which are immoral (ex: refuse to rule on an assassination market dispute).\n Immoral activities include: Murder, slavery, rape, violence, theft and perjury.\n - Rulings should be made based on the “state of the world” at the time a dispute was created. (Ex: in a dispute concerning membership of a smart contract on a curated list of “bug free” contracts, jurors should not take into account changes made to the contract after the dispute is raised.) In particular, jurors should base their rulings on court policies and arbitrable application primary documents as they exist at the time of the creation of the dispute, disregarding later modifications.\n - To ensure fairness to jurors who vote at different times within a voting period, jurors should disregard any evidence that is both 1) submitted after the end of the evidence period of the initial round of a dispute AND 2) cannot be reasonably considered to have been readily, publicly available to jurors. Jurors may, however, consider arguments that are submitted later that are based upon existing evidence and/or information which a juror considering the case during the evidence period of the initial round could reasonably have been expected to find themselves. (Ex: a party submits a new photo of a damaged product in an insurance case after the evidence period; this photo should not be considered by jurors. Ex: in a dispute over whether a token satisfies the criteria of a curated list of ERC20 tokens, an argument that reminds jurors of a definitional element of the ERC20 standard is submitted; this is publicly available and can be considered by jurors. Ex: in a dispute over whether a token satisfies a decentralization criterion for an exchange listing, an argument that invokes the distribution of tokens over different Ethereum addresses, as publicly available from sites such as Etherscan, can be considered by jurors.)\n - When considering an appeal of a case that has originated in a lower court, jurors should consider whether 1) evaluating the case requires specialized skills which jurors in the appellate court cannot be expected to have (ex: evaluating the quality of an English to Korean translation when knowledge of Korean is not a requirement of the appellate court) and 2) whether there is evidence that an attack was performed against this case in the lower court (ex: bribes, p+epsilon attacks, 51% attacks, etc). If there is no evidence of an attack AND appellate court jurors cannot be reasonably expected to have the required skills to independently evaluate the case, jurors should vote to uphold the lower court ruling. Evidence related to the presence of attacks on Kleros should be considered by jurors even if it would otherwise violate the above points on evidence admissibility.\n - Jurors should attempt to interpret disputes according to the “spirit of the dispute” unless the arbitrable contract or the policies of the subcourt state otherwise.\n - Jurors should interpret disputes without assuming the existence of gods, spirits or other supernatural beings unless the arbitrable contract or the policies of the subcourt state otherwise.", - "court": 0, - "uri": "/ipfs/QmTsPLwhozEqjWnYKsnamZiJW47LFT7LzkQhKw5ygQxqyH/xDai-General-Court-Policy.json" - }, - { - "name": "xDai Curation", - "description": "**Court purpose:** \n\n In this court, jurors will solve micro-tasks related to curation or content moderation, such as for social media, when requirements for inclusion are relatively straightforward. Higher effort cases, requiring application of more nuanced rules should be placed in other courts but might arrive in this court upon appeal.", - "summary": "", - "requiredSkills": "No particular skills are required.", - "court": 1, - "uri": "/ipfs/QmWQDgtUWALrnCgakAAoFWdX1P7iDGmr5imZLZzyYtPqcE/xDai-Curation-Court-Policy.json" - }, - { - "name": "xDai English Language", - "description": "**Court purpose:** \n\n In this court, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n - Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to be accepted unless a target audience is specifically mentioned in the contract.", - "requiredSkills": "This court requires an advanced level of English. Jurors who are not native English speakers are advised to stake into this court only if they have C1+ level of English.\n\nThe following tests evaluates a C1 level: Cambridge Advanced (CAE), BEC Higher, BULATS score 75+, CLB/CELPIP 8+, CAEL 70+, IELTS level 7, TOEFL 110+, TOEIC score 880+.", - "court": 2, - "uri": "/ipfs/QmPLD9Zj8aZj5sVH9WcsHXbARR3RfRnEwHRrVeDM8AbPLt/xDai-English-Language-Court-Policy.json" - }, - { - "name": "xDai Spanish-English Translation", - "description": "**Court purpose:** \n\n In this court, jurors will solve disputes involving the quality of translations between Spanish and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Spanish. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Spanish for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or Mexican/Argentinian/European Spanish.", - "court": 3, - "uri": "/ipfs/QmXJbzzuKQQVa7PFrwhb8r4in1yy1sRRQseCZ6g8EZWpHZ/xDai-Spanish-English-Language-Court-Policy.json" - }, - { - "name": "xDai French-English Translation", - "description": "**Court purpose:** \n\n In this court, jurors will solve disputes involving the quality of translations between French and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and French. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and French for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or European/Québécois French.", - "court": 4, - "uri": "/ipfs/QmUYsy6mVozbGn885ssCk3LKC8iXT363RwY7DH3QuRCu1Y/xDai-French-English-Language-Court-Policy.json" - }, - { - "name": "xDai Portuguese-English Translation", - "description": "**Court purpose:** \n\n In this court, jurors will solve disputes involving the quality of translations between Portuguese and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Portuguese. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Portuguese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or Brazilian/European Portuguese.", - "court": 5, - "uri": "/ipfs/QmRZviKJzgkr6AyxcAULjnoQArt5DvNPssvEzVNxHjAUzb/xDai-Portuguese-English-Language-Court-Policy.json" - }, - { - "name": "xDai German-English Translation", - "description": "**Court purpose:** \n\n In this court, jurors will solve disputes involving the quality of translations between German and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and German. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and German for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 6, - "uri": "/ipfs/Qmf6hiaVdzHHVV5jAp7AM6MA9EHLoAtVbbDnFDhPqwU4TL/xDai-German-English-Language-Court-Policy.json" - }, - { - "name": "xDai Russian-English Translation", - "description": "**Court purpose:** \n\n In this court, jurors will solve disputes involving the quality of translations between Russian and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Russian. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Russian for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 7, - "uri": "/ipfs/QmViD1v5PBkYwtAeWiLktDZtBVCRvDd3LrLSzQ7TTEsTtb/xDai-Russian-English-Language-Court-Policy.json" - }, - { - "name": "xDai Korean-English Translation", - "description": "**Court purpose:** \n\n In this court, jurors will solve disputes involving the quality of translations between Korean and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Korean. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Korean for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 8, - "uri": "/ipfs/QmZZaTxzkJsWd1JTKvSQsBPBSDWbPc5og6By7Vx8F7Wcdt/xDai-Korean-English-Language-Court-Policy.json" - }, - { - "name": "xDai Japanese-English Translation", - "description": "**Court purpose:** \n\n In this court, jurors will solve disputes involving the quality of translations between Japanese and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Japanese. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Japanese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 9, - "uri": "/ipfs/QmWqxZhKFyR17JYU4GwXtumMinfACtw9z2r9cXumVcUbek/xDai-Japanese-English-Language-Court-Policy.json" - }, - { - "name": "xDai Turkish-English Translation", - "description": "**Court purpose:** \n\n In this court, jurors will solve disputes involving the quality of translations between Turkish and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Turkish. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Turkish for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 10, - "uri": "/ipfs/QmZxbiUdvC9CwsTiLGhqnnYYBUJNFp28ZNFWJfhSXFXY8K/xDai-Turkish-English-Language-Court-Policy.json" - }, - { - "name": "xDai Chinese-English Translation", - "description": "**Court purpose:** \n\n In this court, jurors will solve disputes involving the quality of translations between Chinese and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Chinese (written in simplified characters). While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Chinese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 11, - "uri": "/ipfs/QmTERr8X73QTnTXNDMSWew2znWYWrcgvFWTUbEJeXPXmBU/xDai-Chinese-English-Language-Court-Policy.json" - }, - { - "name": "xDai Development Court", - "description": "**Court purpose:** \n\n In this court, jurors will solve disputes involving the respect of specifications given by the client.", - "summary": "**Example** \n\n Developper does not respect indentation, does not name variables explicitly or has not made a clear file structure. In such cases, jurors should refuse the proposal made by the developer.", - "requiredSkills": "This court requires a good level of programmation. Jurors who are not intermediate developers are advised to stake into this court only if they have some basics of low-level programming languages, ​​algorithmic and knowledge of good practices of development.", - "court": 12, - "uri": "/ipfs/QmbgUL2iv9XH3jui7xdLBXp2Hqe4VqGnNkK7PnAorJ8XQa/xDai-Development-Court-Policy.json" - }, - { - "name": "xDai Solidity Court", - "description": "**Court purpose:** \n\n If the disputed code is of significant size (> 500 code lines), parties in the dispute should point out specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.", - "summary": "", - "requiredSkills": "This court requires a good level of solidity. Jurors who are not solidity intermediate developers are advised to stake into this court only if they also know how to make relatively simple contracts, know the main solidity hacks and can compute the complexity of simple functions.", - "court": 13, - "uri": "/ipfs/QmQbyk1qnD4e4MQrwSr6a21w2t82YJEMxU3F7QTYKkxuNS/xDai-Solidity-Court-Policy.json" - }, - { - "name": "xDai Javascript Court", - "description": "**Court purpose:** \n\n If the disputed code is of significant size (> 700 code lines), parties in the dispute should point out specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.", - "summary": "", - "requiredSkills": "This court requires a good level of javascript. Jurors who are not javascript intermediate developers are advised to stake into this court only if they know the main frameworks/libraries (ExpressJs, React, EthersJs…) and be comfortable with testing, APIs or languages to interact with databases.", - "court": 14, - "uri": "/ipfs/Qme15AUfpvLX3iwEtqswe26PQHMmKnF4eWGywBPqbkdqcD/xDai-Javascript-Court-Policy.json" - }, - { - "name": "Corte General en Español", - "description": "**Propósito de la Corte** \n\n La Corte General en Español sirve como corte de uso múltiple para todo tipo de disputas que requieran un alto nivel de conocimiento del español para ser evaluadas. Los casos resueltos por cortes más especializadas que requieran conocimientos de español además de otras habilidades pueden ser revisados en esta corte tras el proceso de apelación.", - "summary": "**Políticas:** \n\n Además del requisito de que los jurados tengan un nivel suficiente de español, esta corte debe tener la misma política que la Corte General de Kleros en xDai(xDai General Court).", - "requiredSkills": "**Habilidades Requeridas:** \n\n Este tribunal requiere un nivel avanzado de español. Los miembros del jurado deben poder leer la evidencia y proporcionar una justificación adecuada en español sobre una amplia gama de temas.", - "court": 15, - "uri": "/ipfs/QmNotPsy4BKY2kxRqbWchCTJrgGMqnQrxfE5b5Jd63A7rj/xDai-Spanish-General-Court-Policy.json" - }, - { - "name": "Corte de Curación en Español", - "description": "**Propósito de la Corte** \n\n En esta corte, los miembros del jurado resuelven microtareas relacionadas con la curación o la moderación de contenido, como para redes sociales, cuando los requisitos son relativamente sencillos. Los casos de mayor esfuerzo, que requieren la aplicación de reglas con mayores matices, deben presentarse en otras cortes, pero pueden llegar a este tribunal en caso de apelación.", - "summary": "", - "requiredSkills": "**Habilidades Requeridas:** \n\n Este tribunal requiere un nivel avanzado de español. Los miembros del jurado deben poder leer la evidencia y proporcionar una justificación adecuada en español sobre una amplia gama de temas.", - "court": 16, - "uri": "/ipfs/QmQeHpuaL9RViwKnPNRMCAbPakdPSDefBmhPpMAi45vRLS/xDai-Spanish-Curation-Court-Policy.json" - }, - { - "name": "Blockchain No Técnica", - "description": "", - "summary": "", - "requiredSkills": "**Habilidades Requeridas:** \n\n Los jurados no necesitan un conocimiento profundo de blockchain ni habilidades de programación. Pero necesitan conocimiento para leer exploradores de blockchain, buscar criptoactivos listados en exchanges, entender cómo verificar una transacción y analizar datos on-chain.", - "court": 17, - "uri": "/ipfs/QmVxh7KmFrimGz6WMvLMRXZhwQFDoj28KEYLTpYoUTGwAj/xDai-Blockchain-No-Tecnica-Policy.json" - } -] diff --git a/contracts/config/policies.v1.gnosischain/xDai-Chinese-English-Language-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-Chinese-English-Language-Court-Policy.json deleted file mode 100644 index 2a3e45e09..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-Chinese-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai Chinese-English Translation", - "description": "**Court purpose** \n\n In this court, jurors will solve disputes involving the quality of translations between Chinese and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Chinese (written in simplified characters). While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Chinese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-Curation-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-Curation-Court-Policy.json deleted file mode 100644 index 1dc000d2b..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-Curation-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai Curation", - "description": "**Court purpose** \n\n In this court, jurors will solve micro-tasks related to curation or content moderation, such as for social media, when requirements for inclusion are relatively straightforward. Higher effort cases, requiring application of more nuanced rules should be placed in other courts but might arrive in this court upon appeal.", - "summary": "", - "requiredSkills": "No particular skills are required." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-Development-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-Development-Court-Policy.json deleted file mode 100644 index 846f431cf..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-Development-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai Development Court", - "description": "**Court purpose** \n\n In this court, jurors will solve disputes involving the respect of specifications given by the client.", - "summary": "**Example** \n\n Developper does not respect indentation, does not name variables explicitly or has not made a clear file structure. In such cases, jurors should refuse the proposal made by the developer.", - "requiredSkills": "This court requires a good level of programmation. Jurors who are not intermediate developers are advised to stake into this court only if they have some basics of low-level programming languages, ​​algorithmic and knowledge of good practices of development." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-English-Language-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-English-Language-Court-Policy.json deleted file mode 100644 index 6a7c0534d..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai English Language", - "description": "**Court purpose** \n\n In this court, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to be accepted unless a target audience is specifically mentioned in the contract.", - "requiredSkills": "This court requires an advanced level of English. Jurors who are not native English speakers are advised to stake into this court only if they have C1+ level of English.\n\nThe following tests evaluates a C1 level: Cambridge Advanced (CAE), BEC Higher, BULATS score 75+, CLB/CELPIP 8+, CAEL 70+, IELTS level 7, TOEFL 110+, TOEIC score 880+." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-French-English-Language-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-French-English-Language-Court-Policy.json deleted file mode 100644 index 94e4f157e..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-French-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai French-English Translation", - "description": "**Court purpose** \n\n In this court, jurors will solve disputes involving the quality of translations between French and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and French. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and French for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or European/Québécois French." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-General-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-General-Court-Policy.json deleted file mode 100644 index d1e2ecca2..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-General-Court-Policy.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "xDai General Court", - "description": "**Court Purpose**\n\nThe General court exists as the top court in the hierarchy. All appeals made in subcourts will make their way to the General Court.", - "summary": "**Guidelines:**\n All policies of a court also apply to all of its child subcourts.\n Jurors should cast their vote with a suitable verification.\n Jurors should not rule in favor of a side who have engaged in immoral activities (example: rule reject on “revenge porn” images even if they would otherwise fit into the category).\n “Refuse to arbitrate” should be used for disputes where both sides of the dispute have engaged in activities which are immoral (ex: refuse to rule on an assassination market dispute).\n Immoral activities include: Murder, slavery, rape, violence, theft and perjury.\n Rulings should be made based on the “state of the world” at the time a dispute was created. (Ex: in a dispute concerning membership of a smart contract on a curated list of “bug free” contracts, jurors should not take into account changes made to the contract after the dispute is raised.) In particular, jurors should base their rulings on court policies and arbitrable application primary documents as they exist at the time of the creation of the dispute, disregarding later modifications.\n To ensure fairness to jurors who vote at different times within a voting period, jurors should disregard any evidence that is both 1) submitted after the end of the evidence period of the initial round of a dispute AND 2) cannot be reasonably considered to have been readily, publicly available to jurors. Jurors may, however, consider arguments that are submitted later that are based upon existing evidence and/or information which a juror considering the case during the evidence period of the initial round could reasonably have been expected to find themselves. (Ex: a party submits a new photo of a damaged product in an insurance case after the evidence period; this photo should not be considered by jurors. Ex: in a dispute over whether a token satisfies the criteria of a curated list of ERC20 tokens, an argument that reminds jurors of a definitional element of the ERC20 standard is submitted; this is publicly available and can be considered by jurors. Ex: in a dispute over whether a token satisfies a decentralization criterion for an exchange listing, an argument that invokes the distribution of tokens over different Ethereum addresses, as publicly available from sites such as Etherscan, can be considered by jurors.)\n When considering an appeal of a case that has originated in a lower court, jurors should consider whether 1) evaluating the case requires specialized skills which jurors in the appellate court cannot be expected to have (ex: evaluating the quality of an English to Korean translation when knowledge of Korean is not a requirement of the appellate court) and 2) whether there is evidence that an attack was performed against this case in the lower court (ex: bribes, p+epsilon attacks, 51% attacks, etc). If there is no evidence of an attack AND appellate court jurors cannot be reasonably expected to have the required skills to independently evaluate the case, jurors should vote to uphold the lower court ruling. Evidence related to the presence of attacks on Kleros should be considered by jurors even if it would otherwise violate the above points on evidence admissibility.\n Jurors should attempt to interpret disputes according to the “spirit of the dispute” unless the arbitrable contract or the policies of the subcourt state otherwise.\n Jurors should interpret disputes without assuming the existence of gods, spirits or other supernatural beings unless the arbitrable contract or the policies of the subcourt state otherwise." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-German-English-Language-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-German-English-Language-Court-Policy.json deleted file mode 100644 index 2cd24791e..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-German-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai German-English Translation", - "description": "**Court purpose** \n\n In this court, jurors will solve disputes involving the quality of translations between German and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and German. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and German for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-Japanese-English-Language-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-Japanese-English-Language-Court-Policy.json deleted file mode 100644 index d076cf98c..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-Japanese-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai Japanese-English Translation", - "description": "**Court purpose** \n\n In this court, jurors will solve disputes involving the quality of translations between Japanese and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Japanese. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Japanese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-Javascript-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-Javascript-Court-Policy.json deleted file mode 100644 index dfd328fce..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-Javascript-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai Javascript Court", - "description": "**Court purpose** \n\n If the disputed code is of significant size (> 700 code lines), parties in the dispute should point out specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.", - "summary": "", - "requiredSkills": "This court requires a good level of javascript. Jurors who are not javascript intermediate developers are advised to stake into this court only if they know the main frameworks/libraries (ExpressJs, React, EthersJs…) and be comfortable with testing, APIs or languages to interact with databases." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-Korean-English-Language-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-Korean-English-Language-Court-Policy.json deleted file mode 100644 index 2f8ee9c29..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-Korean-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai Korean-English Translation", - "description": "**Court purpose** \n\n In this court, jurors will solve disputes involving the quality of translations between Korean and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Korean. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Korean for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-Portuguese-English-Language-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-Portuguese-English-Language-Court-Policy.json deleted file mode 100644 index 472a5f1c3..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-Portuguese-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai Portuguese-English Translation", - "description": "**Court purpose** \n\n In this court, jurors will solve disputes involving the quality of translations between Portuguese and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Portuguese. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Portuguese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or Brazilian/European Portuguese." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-Russian-English-Language-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-Russian-English-Language-Court-Policy.json deleted file mode 100644 index abecec2bb..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-Russian-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai Russian-English Translation", - "description": "**Court purpose** \n\n In this court, jurors will solve disputes involving the quality of translations between Russian and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Russian. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Russian for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-Solidity-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-Solidity-Court-Policy.json deleted file mode 100644 index fdf065dd8..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-Solidity-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai Solidity Court", - "description": "**Court purpose** \n\n If the disputed code is of significant size (> 500 code lines), parties in the dispute should point out specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.", - "summary": "", - "requiredSkills": "This court requires a good level of solidity. Jurors who are not solidity intermediate developers are advised to stake into this court only if they also know how to make relatively simple contracts, know the main solidity hacks and can compute the complexity of simple functions." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-Spanish-English-Language-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-Spanish-English-Language-Court-Policy.json deleted file mode 100644 index a186f863f..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-Spanish-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai Spanish-English Translation", - "description": "**Court purpose** \n\n In this court, jurors will solve disputes involving the quality of translations between Spanish and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Spanish. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Spanish for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or Mexican/Argentinian/European Spanish." -} diff --git a/contracts/config/policies.v1.gnosischain/xDai-Turkish-English-Language-Court-Policy.json b/contracts/config/policies.v1.gnosischain/xDai-Turkish-English-Language-Court-Policy.json deleted file mode 100644 index df49116bc..000000000 --- a/contracts/config/policies.v1.gnosischain/xDai-Turkish-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xDai Turkish-English Translation", - "description": "**Court purpose** \n\n In this court, jurors will solve disputes involving the quality of translations between Turkish and English.", - "summary": "", - "requiredSkills": "Jurors in this court should have a strong command of both English and Turkish. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Turkish for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English." -} diff --git a/contracts/config/policies.v1.mainnet.json b/contracts/config/policies.v1.mainnet.json deleted file mode 100644 index a23d06b2b..000000000 --- a/contracts/config/policies.v1.mainnet.json +++ /dev/null @@ -1,191 +0,0 @@ -[ - { - "name": "General Court", - "description": "**Court Purpose:**\n\nThe General court exists as the top court in the hierarchy. All appeals made in subcourts will make their way to the General Court.", - "summary": "**Guidelines:**\n - All policies of a court also apply to all of its child subcourts.\n - Jurors should cast their vote with a suitable verification.\n - Jurors should not rule in favor of a side who have engaged in immoral activities (example: rule reject on “revenge porn” images even if they would otherwise fit into the category).\n - “Refuse to arbitrate” should be used for disputes where both sides of the dispute have engaged in activities which are immoral (ex: refuse to rule on an assassination market dispute).\n Immoral activities include: Murder, slavery, rape, violence, theft and perjury.\n - Rulings should be made based on the “state of the world” at the time a dispute was created. (Ex: in a dispute concerning membership of a smart contract on a curated list of “bug free” contracts, jurors should not take into account changes made to the contract after the dispute is raised.) In particular, jurors should base their rulings on court policies and arbitrable application primary documents as they exist at the time of the creation of the dispute, disregarding later modifications.\n - To ensure fairness to jurors who vote at different times within a voting period, jurors should disregard any evidence that is both 1) submitted after the end of the evidence period of the initial round of a dispute AND 2) cannot be reasonably considered to have been readily, publicly available to jurors. Jurors may, however, consider arguments that are submitted later that are based upon existing evidence and/or information which a juror considering the case during the evidence period of the initial round could reasonably have been expected to find themselves. (Ex: a party submits a new photo of a damaged product in an insurance case after the evidence period; this photo should not be considered by jurors. Ex: in a dispute over whether a token satisfies the criteria of a curated list of ERC20 tokens, an argument that reminds jurors of a definitional element of the ERC20 standard is submitted; this is publicly available and can be considered by jurors. Ex: in a dispute over whether a token satisfies a decentralization criterion for an exchange listing, an argument that invokes the distribution of tokens over different Ethereum addresses, as publicly available from sites such as Etherscan, can be considered by jurors.)\n - When considering an appeal of a case that has originated in a lower court, jurors should consider whether 1) evaluating the case requires specialized skills which jurors in the appellate court cannot be expected to have (ex: evaluating the quality of an English to Korean translation when knowledge of Korean is not a requirement of the appellate court) and 2) whether there is evidence that an attack was performed against this case in the lower court (ex: bribes, p+epsilon attacks, 51% attacks, etc). If there is no evidence of an attack AND appellate court jurors cannot be reasonably expected to have the required skills to independently evaluate the case, jurors should vote to uphold the lower court ruling. Evidence related to the presence of attacks on Kleros should be considered by jurors even if it would otherwise violate the above points on evidence admissibility.\n - Jurors should attempt to interpret disputes according to the “spirit of the dispute” unless the arbitrable contract or the policies of the subcourt state otherwise.\n - Jurors should interpret disputes without assuming the existence of gods, spirits or other supernatural beings unless the arbitrable contract or the policies of the subcourt state otherwise.", - "court": 0, - "uri": "/ipfs/Qmd1TMEbtic3TSonu5dfqa5k3aSrjxRGY8oJH3ruGgazRB" - }, - { - "name": "Blockchain", - "description": "**Court Purpose:**\n\nThis is the blockchain community subcourt. Disputes in this subcourt should be those that require that jurors have an understanding of the broad blockchain ecosystem. Cases in this court may come from varying aspects of the ecosystem and could also be from lower courts that have been appealed. For example, a case in the Token Curated Registry could arrive here on appeal.\n", - "summary": "", - "court": 1, - "uri": "/ipfs/QmYMdCkb7WULmiK6aQrgsayGG3VYisQwsHSLC3TLkzEHCm" - }, - { - "name": "Non-Technical", - "description": "**Court Purpose:**\n\nThis subcourt is for small non-technical blockchain disputes. It is used for disputes on challenged tokens from Kleros Token² Curated Registry Dapp, Cryptoasset Transfer and Exchange Listing agreement escrow disputes. This can include:\n\n- **Token² Curated Registry**: A curated list of verified tokens submitted by users. This includes, logo, token name, contract address and ticker. \n\n- **Cryptoasset Transfer Escrow**: This escrow can be used by users to safely and securely transfer cryptoassets between two parties, even if one cryptoasset is on a chain other than Ethereum. Funds are locked in a smart contract until the other party has complied with the agreement or a dispute is brought. An example use case could be transferring ETH for BTC P2P without knowledge of the other party. You deposit ETH into the escrow, the other party sends BTC and you release ETH.\n\n- **Exchange Listing Agreement Escrow**: This escrow can be used to delegate listing of tokens to token listing agents. A reward is paid to the agent if the token is appropriately listed on the agreed upon exchange.\n\n**Example:**\n\n- Someone submits the PNK token with the address “0x87c260900c391559fd2816c9fbf078de37e2f520”. Someone challenges the listing as incorrect as the real PNK address is “0x93ed3fbe21207ec2e8f2d3c3de6e058cb73bc04d”.\n\n- Parties make a contract to exchange 1 BTC for 30 ETH. After the deadline agreed in the contract, the address of the BTC buyer still hasn’t been credited.\n\n- Contractor agreed to list clients token or coin in both USD and DAI pairings but did not deliver USD.", - "summary": "**Policies:** \n\n- In escrow disputes involving privacy coins where “view key’s” are needed, those should be provided as evidence before the end of the evidence period. ", - "requiredSkills": "Jurors do not need a deep blockchain technical knowledge or coding skills but do need the ability to read blockchain explorers, look at cryptoassets listed on exchanges, understand how to verify a transaction and cross reference on-chain data. ", - "court": 2, - "uri": "/ipfs/QmdJYHubLGQCt2GxpJch2riSYVxZzDC4cBg2mNPXuiY6rX" - }, - { - "name": "Token Listing", - "description": "**Court Purpose:**\n\nThis court serves as the final validation for token listing for verified projects listing on the Ethfinex Exchange using Kleros’ Token Curated List Dapp.\nThis is a high level, high stake court requiring deep blockchain knowledge, legal experience and / or a knowledge of exchange listings in general. Jurors are required to stake a large amount of PNK and should only do so if they are confident in the above capabilities.", - "summary": "[Ethfinex Court Policy](https://cdn.kleros.link/ipfs/QmVzwEBpGsbFY3UgyjA3SxgGXx3r5gFGynNpaoXkp6jenu/Ethfinex%20Court%20Policy.pdf)", - "court": 3, - "uri": "/ipfs/QmeyojE13mcQtWqQQddYypafDRChVND8z6dcHLbaarmbbx" - }, - { - "name": "Technical", - "description": "**Court Purpose:**\n\nThis court serves to arbitrate blockchain disputes of a technical nature. This can include:\n\n- Verifying that a smart contract meets a defined standard. \n\n- Verifying that a proposed contract call is the technical translation of a decision taken by governance.\n\n**Example:**\n\n- A dispute on whether or not a token should be given a badge indicating that it satisfies ERC20. \n\n- A dispute on whether or not a proposed Kleros governor call matches the decision which has been voted through governance.", - "summary": "**Policies:** \n\n- Disputes in this subcourt should only be of technical nature. ", - "requiredSkills": "A high understanding of blockchain technology, smart contract, solidity language and Ethereum ABI is required.", - "court": 4, - "uri": "/ipfs/QmcBjGYfmKmkpYc8HYkaiBa9ot2eoWAa2Mhfef7i7QKd5H" - }, - { - "name": "Marketing Services", - "description": "**Court Purpose:**\n\nIn this court, jurors will solve disputes on quality of paid marketing services including but not exclusive to sponsored articles, social media promotion and PR writing.\n\n**Example**\n\n- Marketing company promised to publish article on Cointelegraph and subsequently list on Google news, neither of these things happened.", - "summary": "**Policies:** \n\n- It is the responsibility of the marketing contractor to prove that the service has been delivered. This should be done by providing evidence.", - "requiredSkills": "A high level of reading and writing comprehension, data corroboration and web search.", - "court": 5, - "uri": "/ipfs/QmbSwJ4acdQP9EF6DfDU6czaG8ePha3eyvcSpPgAR8tPZ4" - }, - { - "name": "English Language", - "description": "**Court Purpose:**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example:**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "This subcourt requires an advanced level of English. Jurors who are not native English speakers are advised to stake into this court only if they have C1+ level of English.The following tests evaluates a C1 level: Cambridge Advanced (CAE), BEC Higher, BULATS score 75+, CLB/CELPIP 8+, CAEL 70+, IELTS level 7, TOEFL 110+, TOEIC score 880+.", - "court": 6, - "uri": "/ipfs/QmSn2RJX7a4BQ8rDtfvKLjKQSC3eHWjayPTSkFo3QMbjBx" - }, - { - "name": "Video Production", - "description": "**Court Purpose:**\n\nThis court is for disputes on video production created through agreements in the Kleros escrow. This included editing quality, resolution and final deliverable format.\n\n**Example:**\n\n- Freelancer did not complete video project as agreed in contract. Agreement stated video should be of 1min 30 seconds long but was only 59 seconds.", - "summary": "**Policies:**\n\n- If the video is longer than 1h, parties in the dispute should draw attention to certain sections of the video that do not meet the requirements of the agreement.", - "requiredSkills": "Knowledge of video editing programs / encoding standards and editing procedures. Ability to check resolutions, durations and visual branding on platforms such as YouTube, Vimeo etc.", - "court": 7, - "uri": "/ipfs/QmXvtokEk3qPiB2WPXXUpd4xCoAr5xeceS1n4BHHqNpP7p" - }, - { - "name": "Onboarding", - "description": "**Court Purpose:**\n\n- Allow new jurors to get a feel of Kleros by solving a variety of small disputes.\n- Allow projects considering Kleros use to have some disputes solved with Kleros in order to compare Kleros results with other methods.", - "summary": "**Policies:** \n\n- Disputes should be relatively simple. They should require less than 1 hour to solve.", - "requiredSkills": "No particular skills are required.", - "court": 8, - "uri": "/ipfs/QmbC7uhDEC33V8zyp8u6xozuD3GwtMp4Eaw25EzscEJk3R/Bce1VQaKwHGhMXxqgsmzJLH79ngeP4c57hGBeQQmSCZmPJcgrq4jBj3eFuMsgXuJhfYCXbARyNDx8oNvgusd9pDLjt" - }, - { - "name": "Curation", - "description": "**Court purpose:** \n\n In this court, jurors will solve micro-tasks related to curation or content moderation, such as for social media, when requirements for inclusion are relatively straightforward. Higher effort cases, requiring application of more nuanced rules should be placed in other courts but might arrive in this court upon appeal.", - "summary": "", - "requiredSkills": "No particular skills are required.", - "court": 9, - "uri": "/ipfs/QmWcf4mgnPyxUVbRMKmNjx9pzk3scQRg8bVbNjDdfgh2Nq" - }, - { - "name": "Data Analysis", - "description": "", - "summary": "", - "requiredSkills": "Jurors should be comfortable dealing with data sets, particularly in being able to understand the context of the data from the structure of the data set, and in estimating what percentage of entries are unusable/would need to be cleaned.", - "court": 10, - "uri": "/ipfs/Qmb3r65GXcoWfkpb6m3mnzgCyTyz7dk59UaY4iW6eTKkqJ" - }, - { - "name": "Statistical Modeling", - "description": "", - "summary": "", - "requiredSkills": "Jurors should be comfortable dealing with data sets. Furthermore, jurors should have a background in statistics equivalent to (at minimum) a university statistics course, and they should be able to analyze the assumptions taken in the creation of statistical models.", - "court": 11, - "uri": "/ipfs/QmSu7HxnTmQQz23EPTAMv7oF1NsBM752mEEytCDrgdoAUx" - }, - { - "name": "Curation (Medium)", - "description": "**Court purpose:** \n\n In this court, jurors will solve tasks of “medium difficulty” related to curation or content moderation. Here requirements to be analyzed can be more complicated than those of the micro-tasks in the Curation court; however, much higher effort cases should still be placed in other courts, but might arrive in this court upon appeal.", - "summary": "", - "requiredSkills": "No particular skills are required.", - "court": 12, - "uri": "/ipfs/QmeGQ5pq7eDcS3NmKXyPsRFLEXd9pJe3MHKdDviy3buDce" - }, - { - "name": "Spanish-English Translation", - "description": "**Court Purpose:**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example:**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Spanish. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Spanish for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or Mexican/Argentinian/European Spanish.", - "court": 13, - "uri": "/ipfs/QmY79fya7FQAzvhjzS6S5w9N8TkXZTQ5TSajqdC26VVK6L" - }, - { - "name": "French-English Translation", - "description": "**Court Purpose:**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example:**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and French. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and French for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or European/Québécois French.", - "court": 14, - "uri": "/ipfs/QmQtCrG1EQzLiboYtQ15oWYstPrBUgftBUHmhUSZGk3jWc" - }, - { - "name": "Portuguese-English Translation", - "description": "**Court Purpose:**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example:**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Portuguese. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Portuguese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or Brazilian/European Portuguese.", - "court": 15, - "uri": "/ipfs/QmYdR9v8LzYnw9pT4ZCcWyoivFMPNyQcBFXgCW3PZRSMCF" - }, - { - "name": "German-English Translation", - "description": "**Court Purpose:**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example:**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and German. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and German for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 16, - "uri": "/ipfs/QmcqBRYin9Ug4YX7ysGf65xDjAQecuRzWp7nSucGvBcpwP" - }, - { - "name": "Russian-English Translation", - "description": "**Court Purpose:**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example:**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Russian. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Russian for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 17, - "uri": "/ipfs/QmXoSvQJCW4HVjB6vreL8YwXj2HHJSpwNzroMkojos7p6c" - }, - { - "name": "Korean-English Translation", - "description": "**Court Purpose:**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example:**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Korean. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Korean for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 18, - "uri": "/ipfs/QmUJGjgDCX9Bsn5fL6ZAZdXRLke3Pbdhwo312hJSewsKwg" - }, - { - "name": "Japanese-English Translation", - "description": "**Court Purpose:**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example:**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Japanese. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Japanese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 19, - "uri": "/ipfs/QmWQ5NCSjZM8NK3quv72wcD7nbs9MfMxWajYnUgrZRAWch" - }, - { - "name": "Turkish-English Translation", - "description": "**Court Purpose:**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example:**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Turkish. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Turkish for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 20, - "uri": "/ipfs/QmNSpBnACohhHwSpqg5nG8ZVxED2B4pMiputfZqZdbZvuc" - }, - { - "name": "Chinese-English Translation", - "description": "**Court Purpose:**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example:**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Chinese (written in simplified characters). While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Chinese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 21, - "uri": "/ipfs/QmbuTx2dcWGSqGo7ykMhMDbvs6oM1AcbC8LvbfAQohup25" - }, - { - "name": "Corte General en Español", - "description": "**Propósito de la Corte:**\n\nLa Corte General en Español sirve como corte de uso múltiple para todo tipo de disputas que requieran un alto nivel de conocimiento del español para ser evaluadas. Los casos resueltos por cortes más especializadas que requieran conocimientos de español además de otras habilidades pueden ser revisados en esta corte tras el proceso de apelación.", - "summary": "**Políticas:**\n\nAdemás del requisito de que los jurados tengan un nivel suficiente de español, esta corte debe tener la misma política que la Corte General de Kleros.", - "requiredSkills": "**Habilidades Requeridas:**\n\nEste tribunal requiere un nivel avanzado de español. Los miembros del jurado deben poder leer la evidencia y proporcionar una justificación adecuada en español sobre una amplia gama de temas.", - "court": 22, - "uri": "/ipfs/QmRPz626unSwc7fxo3ikoZzXmCpVm5EHfiSz2bfErCsHti" - }, - { - "name": "Humanity Court", - "description": "**Court Purpose:**\n\nIn this court jurors will judge disputes related to establishing Sybil resistant lists of unique human identities, particularly for the Proof of Humanity protocol.\n\n", - "summary": "", - "requiredSkills": "Jurors should be capable of reasonably evaluating whether a proposed submission consisting of photo and video evidence corresponds to a unique human being, eventually making use of supplementary information that might be provided as evidence by relevant parties.", - "court": 23, - "uri": "/ipfs/QmQKEJbyw89Qh5AurQ4kvidCSr32ihQUdAQZ646cPkJV34" - } -] diff --git a/contracts/config/policies.v1.mainnet/Blockchain-Court-Policy.json b/contracts/config/policies.v1.mainnet/Blockchain-Court-Policy.json deleted file mode 100644 index 1c7a1d732..000000000 --- a/contracts/config/policies.v1.mainnet/Blockchain-Court-Policy.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Blockchain", - "description": "**Court Purpose:**\n\nThis is the blockchain community subcourt. Disputes in this subcourt should be those that require that jurors have an understanding of the broad blockchain ecosystem. Cases in this court may come from varying aspects of the ecosystem and could also be from lower courts that have been appealed. For example, a case in the Token Curated Registry could arrive here on appeal.\n", - "summary": "" -} diff --git a/contracts/config/policies.v1.mainnet/Chinese-English-Language-Court-Policy.json b/contracts/config/policies.v1.mainnet/Chinese-English-Language-Court-Policy.json deleted file mode 100644 index 362063f22..000000000 --- a/contracts/config/policies.v1.mainnet/Chinese-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Chinese-English Translation", - "description": "**Court Purpose**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Chinese (written in simplified characters). While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Chinese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English." -} diff --git a/contracts/config/policies.v1.mainnet/Curation-Court-Policy.json b/contracts/config/policies.v1.mainnet/Curation-Court-Policy.json deleted file mode 100644 index 9f4a8a5b7..000000000 --- a/contracts/config/policies.v1.mainnet/Curation-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Curation", - "description": "**Court purpose** \n\n: In this court, jurors will solve micro-tasks related to curation or content moderation, such as for social media, when requirements for inclusion are relatively straightforward. Higher effort cases, requiring application of more nuanced rules should be placed in other courts but might arrive in this court upon appeal.", - "summary": "", - "requiredSkills": "No particular skills are required." -} diff --git a/contracts/config/policies.v1.mainnet/Curation-Medium-Court-Policy.json b/contracts/config/policies.v1.mainnet/Curation-Medium-Court-Policy.json deleted file mode 100644 index d289a3eef..000000000 --- a/contracts/config/policies.v1.mainnet/Curation-Medium-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Curation (Medium)", - "description": "**Court purpose** \n\n: In this court, jurors will solve tasks of “medium difficulty” related to curation or content moderation. Here requirements to be analyzed can be more complicated than those of the micro-tasks in the Curation court; however, much higher effort cases should still be placed in other courts, but might arrive in this court upon appeal.", - "summary": "", - "requiredSkills": "No particular skills are required." -} diff --git a/contracts/config/policies.v1.mainnet/Data-Analysis-Court-Policy.json b/contracts/config/policies.v1.mainnet/Data-Analysis-Court-Policy.json deleted file mode 100644 index b3ad10f73..000000000 --- a/contracts/config/policies.v1.mainnet/Data-Analysis-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Data Analysis", - "description": "", - "summary": "", - "requiredSkills": "Jurors should be comfortable dealing with data sets, particularly in being able to understand the context of the data from the structure of the data set, and in estimating what percentage of entries are unusable/would need to be cleaned." -} diff --git a/contracts/config/policies.v1.mainnet/English-Language-Court-Policy.json b/contracts/config/policies.v1.mainnet/English-Language-Court-Policy.json deleted file mode 100644 index f157776cd..000000000 --- a/contracts/config/policies.v1.mainnet/English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "English Language", - "description": "**Court Purpose**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "This subcourt requires an advanced level of English. Jurors who are not native English speakers are advised to stake into this court only if they have C1+ level of English.The following tests evaluates a C1 level: Cambridge Advanced (CAE), BEC Higher, BULATS score 75+, CLB/CELPIP 8+, CAEL 70+, IELTS level 7, TOEFL 110+, TOEIC score 880+." -} diff --git a/contracts/config/policies.v1.mainnet/French-English-Language-Court-Policy.json b/contracts/config/policies.v1.mainnet/French-English-Language-Court-Policy.json deleted file mode 100644 index 3ef9275a9..000000000 --- a/contracts/config/policies.v1.mainnet/French-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "French-English Translation", - "description": "**Court Purpose**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and French. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and French for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or European/Québécois French." -} diff --git a/contracts/config/policies.v1.mainnet/General-Court-Policy.json b/contracts/config/policies.v1.mainnet/General-Court-Policy.json deleted file mode 100644 index 7b26e0856..000000000 --- a/contracts/config/policies.v1.mainnet/General-Court-Policy.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "General Court", - "description": "**Court Purpose**\n\nThe General court exists as the top court in the hierarchy. All appeals made in subcourts will make their way to the General Court.", - "summary": "**Guidelines:**\n All policies of a court also apply to all of its child subcourts.\n Jurors should cast their vote with a suitable verification.\n Jurors should not rule in favor of a side who have engaged in immoral activities (example: rule reject on “revenge porn” images even if they would otherwise fit into the category).\n “Refuse to arbitrate” should be used for disputes where both sides of the dispute have engaged in activities which are immoral (ex: refuse to rule on an assassination market dispute).\n Immoral activities include: Murder, slavery, rape, violence, theft and perjury.\n Rulings should be made based on the “state of the world” at the time a dispute was created. (Ex: in a dispute concerning membership of a smart contract on a curated list of “bug free” contracts, jurors should not take into account changes made to the contract after the dispute is raised.) In particular, jurors should base their rulings on court policies and arbitrable application primary documents as they exist at the time of the creation of the dispute, disregarding later modifications.\n To ensure fairness to jurors who vote at different times within a voting period, jurors should disregard any evidence that is both 1) submitted after the end of the evidence period of the initial round of a dispute AND 2) cannot be reasonably considered to have been readily, publicly available to jurors. Jurors may, however, consider arguments that are submitted later that are based upon existing evidence and/or information which a juror considering the case during the evidence period of the initial round could reasonably have been expected to find themselves. (Ex: a party submits a new photo of a damaged product in an insurance case after the evidence period; this photo should not be considered by jurors. Ex: in a dispute over whether a token satisfies the criteria of a curated list of ERC20 tokens, an argument that reminds jurors of a definitional element of the ERC20 standard is submitted; this is publicly available and can be considered by jurors. Ex: in a dispute over whether a token satisfies a decentralization criterion for an exchange listing, an argument that invokes the distribution of tokens over different Ethereum addresses, as publicly available from sites such as Etherscan, can be considered by jurors.)\n When considering an appeal of a case that has originated in a lower court, jurors should consider whether 1) evaluating the case requires specialized skills which jurors in the appellate court cannot be expected to have (ex: evaluating the quality of an English to Korean translation when knowledge of Korean is not a requirement of the appellate court) and 2) whether there is evidence that an attack was performed against this case in the lower court (ex: bribes, p+epsilon attacks, 51% attacks, etc). If there is no evidence of an attack AND appellate court jurors cannot be reasonably expected to have the required skills to independently evaluate the case, jurors should vote to uphold the lower court ruling. Evidence related to the presence of attacks on Kleros should be considered by jurors even if it would otherwise violate the above points on evidence admissibility.\n Jurors should attempt to interpret disputes according to the “spirit of the dispute” unless the arbitrable contract or the policies of the subcourt state otherwise.\n Jurors should interpret disputes without assuming the existence of gods, spirits or other supernatural beings unless the arbitrable contract or the policies of the subcourt state otherwise." -} diff --git a/contracts/config/policies.v1.mainnet/German-English-Language-Court-Policy.json b/contracts/config/policies.v1.mainnet/German-English-Language-Court-Policy.json deleted file mode 100644 index f81a9b7b9..000000000 --- a/contracts/config/policies.v1.mainnet/German-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "German-English Translation", - "description": "**Court Purpose**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and German. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and German for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English." -} diff --git a/contracts/config/policies.v1.mainnet/Humanity-Court-Policy.json b/contracts/config/policies.v1.mainnet/Humanity-Court-Policy.json deleted file mode 100644 index fc912b14a..000000000 --- a/contracts/config/policies.v1.mainnet/Humanity-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Humanity Court", - "description": "**Court Purpose**\n\nIn this court jurors will judge disputes related to establishing Sybil resistant lists of unique human identities, particularly for the Proof of Humanity protocol.\n\n", - "summary": "", - "requiredSkills": "Jurors should be capable of reasonably evaluating whether a proposed submission consisting of photo and video evidence corresponds to a unique human being, eventually making use of supplementary information that might be provided as evidence by relevant parties." -} diff --git a/contracts/config/policies.v1.mainnet/Japanese-English-Language-Court-Policy.json b/contracts/config/policies.v1.mainnet/Japanese-English-Language-Court-Policy.json deleted file mode 100644 index 47bfad15b..000000000 --- a/contracts/config/policies.v1.mainnet/Japanese-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Japanese-English Translation", - "description": "**Court Purpose**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Japanese. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Japanese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English." -} diff --git a/contracts/config/policies.v1.mainnet/Korean-English-Language-Court-Policy.json b/contracts/config/policies.v1.mainnet/Korean-English-Language-Court-Policy.json deleted file mode 100644 index dc889628b..000000000 --- a/contracts/config/policies.v1.mainnet/Korean-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Korean-English Translation", - "description": "**Court Purpose**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Korean. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Korean for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English." -} diff --git a/contracts/config/policies.v1.mainnet/Marketing-Services-Court-Policy.json b/contracts/config/policies.v1.mainnet/Marketing-Services-Court-Policy.json deleted file mode 100644 index 3ccb7105f..000000000 --- a/contracts/config/policies.v1.mainnet/Marketing-Services-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Marketing Services", - "description": "**Court Purpose**\n\nIn this court, jurors will solve disputes on quality of paid marketing services including but not exclusive to sponsored articles, social media promotion and PR writing.\n\n**Example**\n\n- Marketing company promised to publish article on Cointelegraph and subsequently list on Google news, neither of these things happened.", - "summary": "**Policies:** \n\n- It is the responsibility of the marketing contractor to prove that the service has been delivered. This should be done by providing evidence.", - "requiredSkills": "A high level of reading and writing comprehension, data corroboration and web search." -} diff --git a/contracts/config/policies.v1.mainnet/Non-Technical-Court-Policy.json b/contracts/config/policies.v1.mainnet/Non-Technical-Court-Policy.json deleted file mode 100644 index ccd9e5692..000000000 --- a/contracts/config/policies.v1.mainnet/Non-Technical-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Non-Technical", - "description": "**Court Purpose**\n\nThis subcourt is for small non-technical blockchain disputes. It is used for disputes on challenged tokens from Kleros Token² Curated Registry Dapp, Cryptoasset Transfer and Exchange Listing agreement escrow disputes. This can include:\n\n- **Token² Curated Registry**: A curated list of verified tokens submitted by users. This includes, logo, token name, contract address and ticker. \n\n- **Cryptoasset Transfer Escrow**: This escrow can be used by users to safely and securely transfer cryptoassets between two parties, even if one cryptoasset is on a chain other than Ethereum. Funds are locked in a smart contract until the other party has complied with the agreement or a dispute is brought. An example use case could be transferring ETH for BTC P2P without knowledge of the other party. You deposit ETH into the escrow, the other party sends BTC and you release ETH.\n\n- **Exchange Listing Agreement Escrow**: This escrow can be used to delegate listing of tokens to token listing agents. A reward is paid to the agent if the token is appropriately listed on the agreed upon exchange.\n\n**Example**\n\n- Someone submits the PNK token with the address “0x87c260900c391559fd2816c9fbf078de37e2f520”. Someone challenges the listing as incorrect as the real PNK address is “0x93ed3fbe21207ec2e8f2d3c3de6e058cb73bc04d”.\n\n- Parties make a contract to exchange 1 BTC for 30 ETH. After the deadline agreed in the contract, the address of the BTC buyer still hasn’t been credited.\n\n- Contractor agreed to list clients token or coin in both USD and DAI pairings but did not deliver USD.", - "summary": "**Policies:** \n\n- In escrow disputes involving privacy coins where “view key’s” are needed, those should be provided as evidence before the end of the evidence period. ", - "requiredSkills": "Jurors do not need a deep blockchain technical knowledge or coding skills but do need the ability to read blockchain explorers, look at cryptoassets listed on exchanges, understand how to verify a transaction and cross reference on-chain data. " -} diff --git a/contracts/config/policies.v1.mainnet/Onboarding-Court-Policy.json b/contracts/config/policies.v1.mainnet/Onboarding-Court-Policy.json deleted file mode 100644 index f2aaa3ee7..000000000 --- a/contracts/config/policies.v1.mainnet/Onboarding-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Onboarding", - "description": "**Court Purpose**\n\n- Allow new jurors to get a feel of Kleros by solving a variety of small disputes.\n- Allow projects considering Kleros use to have some disputes solved with Kleros in order to compare Kleros results with other methods.", - "summary": "**Policies:** \n\n- Disputes should be relatively simple. They should require less than 1 hour to solve.", - "requiredSkills": "No particular skills are required." -} diff --git a/contracts/config/policies.v1.mainnet/Portuguese-English-Language-Court-Policy.json b/contracts/config/policies.v1.mainnet/Portuguese-English-Language-Court-Policy.json deleted file mode 100644 index e8af98acc..000000000 --- a/contracts/config/policies.v1.mainnet/Portuguese-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Portuguese-English Translation", - "description": "**Court Purpose**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Portuguese. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Portuguese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or Brazilian/European Portuguese." -} diff --git a/contracts/config/policies.v1.mainnet/Russian-English-Language-Court-Policy.json b/contracts/config/policies.v1.mainnet/Russian-English-Language-Court-Policy.json deleted file mode 100644 index dd2d00d50..000000000 --- a/contracts/config/policies.v1.mainnet/Russian-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Russian-English Translation", - "description": "**Court Purpose**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Russian. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Russian for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English." -} diff --git a/contracts/config/policies.v1.mainnet/Spanish-English-Language-Court-Policy.json b/contracts/config/policies.v1.mainnet/Spanish-English-Language-Court-Policy.json deleted file mode 100644 index 57c370a00..000000000 --- a/contracts/config/policies.v1.mainnet/Spanish-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Spanish-English Translation", - "description": "**Court Purpose**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Spanish. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Spanish for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or Mexican/Argentinian/European Spanish." -} diff --git a/contracts/config/policies.v1.mainnet/Spanish-General-Court-Policy.json b/contracts/config/policies.v1.mainnet/Spanish-General-Court-Policy.json deleted file mode 100644 index 08a2dec88..000000000 --- a/contracts/config/policies.v1.mainnet/Spanish-General-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Corte General en Español", - "description": "**Propósito de la Corte**\n\nLa Corte General en Español sirve como corte de uso múltiple para todo tipo de disputas que requieran un alto nivel de conocimiento del español para ser evaluadas. Los casos resueltos por cortes más especializadas que requieran conocimientos de español además de otras habilidades pueden ser revisados en esta corte tras el proceso de apelación.", - "summary": "**Políticas:**\n\nAdemás del requisito de que los jurados tengan un nivel suficiente de español, esta corte debe tener la misma política que la Corte General de Kleros.", - "requiredSkills": "**Habilidades Requeridas:**\n\nEste tribunal requiere un nivel avanzado de español. Los miembros del jurado deben poder leer la evidencia y proporcionar una justificación adecuada en español sobre una amplia gama de temas." -} diff --git a/contracts/config/policies.v1.mainnet/Statistical-Modeling-Court-Policy.json b/contracts/config/policies.v1.mainnet/Statistical-Modeling-Court-Policy.json deleted file mode 100644 index d65cadd31..000000000 --- a/contracts/config/policies.v1.mainnet/Statistical-Modeling-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Statistical Modeling", - "description": "", - "summary": "", - "requiredSkills": "Jurors should be comfortable dealing with data sets. Furthermore, jurors should have a background in statistics equivalent to (at minimum) a university statistics course, and they should be able to analyze the assumptions taken in the creation of statistical models." -} diff --git a/contracts/config/policies.v1.mainnet/Technical-Court-Policy.json b/contracts/config/policies.v1.mainnet/Technical-Court-Policy.json deleted file mode 100644 index f9cac9f62..000000000 --- a/contracts/config/policies.v1.mainnet/Technical-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Technical", - "description": "**Court Purpose**\n\nThis court serves to arbitrate blockchain disputes of a technical nature. This can include:\n\n- Verifying that a smart contract meets a defined standard. \n\n- Verifying that a proposed contract call is the technical translation of a decision taken by governance.\n\n**Example**\n\n- A dispute on whether or not a token should be given a badge indicating that it satisfies ERC20. \n\n- A dispute on whether or not a proposed Kleros governor call matches the decision which has been voted through governance.", - "summary": "**Policies:** \n\n- Disputes in this subcourt should only be of technical nature. ", - "requiredSkills": "A high understanding of blockchain technology, smart contract, solidity language and Ethereum ABI is required." -} diff --git a/contracts/config/policies.v1.mainnet/Token-Listing-Court-Policy.json b/contracts/config/policies.v1.mainnet/Token-Listing-Court-Policy.json deleted file mode 100644 index 8204e77bf..000000000 --- a/contracts/config/policies.v1.mainnet/Token-Listing-Court-Policy.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Token Listing", - "description": "This court serves as the final validation for token listing for verified projects listing on the Ethfinex Exchange using Kleros’ Token Curated List Dapp.\nThis is a high level, high stake court requiring deep blockchain knowledge, legal experience and / or a knowledge of exchange listings in general. Jurors are required to stake a large amount of PNK and should only do so if they are confident in the above capabilities.", - "summary": "[Ethfinex Court Policy](https://cdn.kleros.link/ipfs/QmVzwEBpGsbFY3UgyjA3SxgGXx3r5gFGynNpaoXkp6jenu/Ethfinex%20Court%20Policy.pdf)" -} diff --git a/contracts/config/policies.v1.mainnet/Turkish-English-Language-Court-Policy.json b/contracts/config/policies.v1.mainnet/Turkish-English-Language-Court-Policy.json deleted file mode 100644 index aae67e36c..000000000 --- a/contracts/config/policies.v1.mainnet/Turkish-English-Language-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Turkish-English Translation", - "description": "**Court Purpose**\n\nIn this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "summary": "**Policies:**\n\n- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Turkish. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Turkish for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English." -} diff --git a/contracts/config/policies.v1.mainnet/Video-Production-Court-Policy.json b/contracts/config/policies.v1.mainnet/Video-Production-Court-Policy.json deleted file mode 100644 index 167d0afb0..000000000 --- a/contracts/config/policies.v1.mainnet/Video-Production-Court-Policy.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Video Production", - "description": "**Court Purpose**\n\nThis court is for disputes on video production created through agreements in the Kleros escrow. This included editing quality, resolution and final deliverable format.\n\n**Example**\n\n- Freelancer did not complete video project as agreed in contract. Agreement stated video should be of 1min 30 seconds long but was only 59 seconds.", - "summary": "**Policies:**\n\n- If the video is longer than 1h, parties in the dispute should draw attention to certain sections of the video that do not meet the requirements of the agreement.", - "requiredSkills": "Knowledge of video editing programs / encoding standards and editing procedures. Ability to check resolutions, durations and visual branding on platforms such as YouTube, Vimeo etc." -} diff --git a/contracts/config/policies.v2.devnet.json b/contracts/config/policies.v2.devnet.json deleted file mode 100644 index 811587df6..000000000 --- a/contracts/config/policies.v2.devnet.json +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "name": "General Court", - "purpose": "The General court exists as the top court in the hierarchy.\n\nAll appeals made in subcourts will make their way to the General Court.", - "rules": "- All policies of a court also apply to all of its child subcourts.\n - Jurors should cast their vote with a suitable verification.\n - Jurors should not rule in favor of a side who have engaged in immoral activities (example: rule reject on “revenge porn” images even if they would otherwise fit into the category).\n - “Refuse to arbitrate” should be used for disputes where both sides of the dispute have engaged in activities which are immoral (ex: refuse to rule on an assassination market dispute).\n Immoral activities include: Murder, slavery, rape, violence, theft and perjury.\n - Rulings should be made based on the “state of the world” at the time a dispute was created. (Ex: in a dispute concerning membership of a smart contract on a curated list of “bug free” contracts, jurors should not take into account changes made to the contract after the dispute is raised.) In particular, jurors should base their rulings on court policies and arbitrable application primary documents as they exist at the time of the creation of the dispute, disregarding later modifications.\n - To ensure fairness to jurors who vote at different times within a voting period, jurors should disregard any evidence that is both 1) submitted after the end of the evidence period of the initial round of a dispute AND 2) cannot be reasonably considered to have been readily, publicly available to jurors. Jurors may, however, consider arguments that are submitted later that are based upon existing evidence and/or information which a juror considering the case during the evidence period of the initial round could reasonably have been expected to find themselves. (Ex: a party submits a new photo of a damaged product in an insurance case after the evidence period; this photo should not be considered by jurors. Ex: in a dispute over whether a token satisfies the criteria of a curated list of ERC20 tokens, an argument that reminds jurors of a definitional element of the ERC20 standard is submitted; this is publicly available and can be considered by jurors. Ex: in a dispute over whether a token satisfies a decentralization criterion for an exchange listing, an argument that invokes the distribution of tokens over different Ethereum addresses, as publicly available from sites such as Etherscan, can be considered by jurors.)\n - When considering an appeal of a case that has originated in a lower court, jurors should consider whether 1) evaluating the case requires specialized skills which jurors in the appellate court cannot be expected to have (ex: evaluating the quality of an English to Korean translation when knowledge of Korean is not a requirement of the appellate court) and 2) whether there is evidence that an attack was performed against this case in the lower court (ex: bribes, p+epsilon attacks, 51% attacks, etc). If there is no evidence of an attack AND appellate court jurors cannot be reasonably expected to have the required skills to independently evaluate the case, jurors should vote to uphold the lower court ruling. Evidence related to the presence of attacks on Kleros should be considered by jurors even if it would otherwise violate the above points on evidence admissibility.\n - Jurors should attempt to interpret disputes according to the “spirit of the dispute” unless the arbitrable contract or the policies of the subcourt state otherwise.\n - Jurors should interpret disputes without assuming the existence of gods, spirits or other supernatural beings unless the arbitrable contract or the policies of the subcourt state otherwise.", - "court": 1, - "uri": "/ipfs/QmRDYF4su41noCb447vp9iMicCYfT2a2eXg4wPC3DVR58b" - }, - { - "name": "Curation", - "purpose": "In this court, jurors will solve micro-tasks related to curation or content moderation, such as for social media, when requirements for inclusion are relatively straightforward. Higher effort cases, requiring application of more nuanced rules should be placed in other courts but might arrive in this court upon appeal.", - "rules": "", - "requiredSkills": "No particular skills are required.", - "court": 2, - "uri": "/ipfs/QmPpey7rFbPi25Djcb4ppcGaxR4pojLgpGW2jhUvKxvE5q" - }, - { - "name": "English Language", - "purpose": "In this court, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n - Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "rules": "- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to be accepted unless a target audience is specifically mentioned in the contract.", - "requiredSkills": "This court requires an advanced level of English. Jurors who are not native English speakers are advised to stake into this court only if they have C1+ level of English.\n\nThe following tests evaluates a C1 level: Cambridge Advanced (CAE), BEC Higher, BULATS score 75+, CLB/CELPIP 8+, CAEL 70+, IELTS level 7, TOEFL 110+, TOEIC score 880+.", - "court": 3, - "uri": "/ipfs/QmcMU8hG1UsgEPVykcZFTefeizBux8QPunZAXXTv7KF5B8" - }, - { - "name": "Corte de Disputas de Consumo y Vecindad", - "purpose": "Esta corte está destinada a resolver una amplia variedad de disputas de complejidad baja a moderada, principalmente de carácter civil y comercial. La misma actúa como tribunal subsidiario para los casos en los que no exista otra corte más especializada o aplicable. Su alcance incluye, pero no se limita a:\n- Conflictos contractuales.\n- Reclamos por daños y perjuicios.\n- Reclamos de defensa del consumidor entre usuarios y empresas.", - "rules": "", - "requiredSkills": "- Familiaridad con los [derechos básicos del consumidor](https://buenosaires.gob.ar/principales-derechos-de-los-consumidores).\n- Comprensión de las prácticas comunes en entornos digitales y descentralizados.\n- Capacidad para evaluar de manera crítica y objetiva la autenticidad y relevancia de las pruebas presentadas.", - "court": 4, - "uri": "/ipfs/QmdfPa7UZxc7iVquQWiTmmRG3n6RSkwN16aXFeK7XyLvjr" - }, - { - "name": "Oracle", - "purpose": "The Oracle Court is designed to resolve disputes related to reporting real-world events, including but not limited to those originating from prediction markets.", - "rules": "The following rules are subsidiary and will apply only if no contrary provisions are outlined in the primary document or other rules or sources relevant to resolving the specific question. In such cases, jurors should adhere to these standard guidelines for resolution.\n### Refuse to Arbitrate\n\nThe following questions must resolve as \"Refuse to Arbitrate\":\n\n**1. Invalid answers:** Questions in which none of the answers are valid.\n\n*Refuse to Arbitrate: A Prediction Market question: \"Which movie will win the Best Picture award at the 2024 Oscars Academy Awards?\" with outcomes \"Barbie\" and \"Poor Things\" (the actual winner was \"Oppenheimer\").*\n\n**2. Multiple outcomes:** Questions in which multiple outcomes are valid, unless the question allows multiple correct answers. In a multiple choice question in which only one correct answer is allowed, the fact that multiple outcomes could be valid at the same time does not make the question invalid if only one of those outcomes occurs.\n\n*Valid:​ A Prediction Market multiple choice question that allows more than one answer: \"What team will reach the semi-finals of Copa America 2021?\" with answers \"Brazil,\" \"Argentina,\" \"Uruguay,\" and \"Colombia\" (all of them except Uruguay reached the semi-finals).*\n\n*Refuse to Arbitrate: A Prediction Market multiple choice question in which only one correct answer is allowed: \"Who will be the Time person of the year 1937?\" with answers \"Chiang Kai-shek\" and \"Soong Mei-ling\" (they got the prize jointly).*\n\n**3. Prohibited questions:** Questions that directly incentivize immoral violent actions (such as murder, rape or unjust imprisonment) which could likely be performed by any participant.\n\n*Refuse to Arbitrate: A Prediction Market question: Will Donald Trump be alive on 01/12/2024? (Anyone could bet on \"No\" and kill him for a guaranteed profit. Anyone could bet on \"Yes\" to effectively put a bounty on his head).*\n\n*Refuse to Arbitrate: A Prediction Market question: Will Hera be a victim of swatting in 2024? (Anyone could falsely call the emergency services on him in order to win the bet)*\n\nThis must not prevent questions:\n\n* Whose topics are violent events not caused by human beings.\n\n*Valid:​ A Prediction Market question: How many people will die from COVID19 in 2024? (Viruses don't use prediction markets).*\n\n* Whose main source of uncertainty is not related to a potential violent action.\n\n*Valid:​ A Prediction Market question: Will Trump win the 2020 US presidential election? (The main source of uncertainty is the vote of US citizens, not a potential murder of a presidential candidate).*\n\n* Which could give an incentive only to specific participants to commit an immoral violent action, but are in practice unlikely.\n\n*Valid:​ A Prediction Market question: Will the US be engaged in a military conflict with a UN member state in 2024? (It's unlikely for the US to declare war in order to win a bet on this market).*\n\n*Valid:​ Will Derek Chauvin go to jail for the murder of George Flyod? (It's unlikely that the jurors would collude to make a wrong verdict in order to win this market).*\n\n### Default assumptions\n\nUnless stated otherwise, the following assumptions must be made:\n\n**4. Entities:** Entities are assumed to reference the most obvious entity with that name, taking the context of the question into account.\n\n*Example: A Prediction Market question: \"Will Michael Jordan receive the 2021 Turing award?\" refers to the computer scientist Michael I. Jordan whereas \"How many points will Michael Jordan score in the FIBA Americas Championship?\" refers to Michael J. Jordan, the basketball player.*\n\n**5. Units:** In case units are omitted, they are assumed to be the units which are the most often used in this particular situation.\n\n*Example: A Prediction Market question: \"Will a NFT be sold for more than one million in 2021?\" will be interpreted as \"Will a NFT be sold for more than 1,000,000 USD in 2021?\".*\n\n**6. Rounding rule:** If no specific rounding method is given, values are to be rounded to the nearest proposed value, unit or range. Unless otherwise stated, roundings are done middle toward 0. If no proposed rule, value, or unit is provided, the value shall default to the most commonly used standard in the specific context.\n\n*Example: In a Prediction Market question with outcomes -100, 0 and 100. 77->100, 50->0, -50 -> 0.*\n\n*Example: In a Prediction Market question with outcomes A: 0-2, B: 3-5 and C: 6+. 1->A, 8->C, 5.5->B.*\n\n*Example: In the Prediction Market question \"What percentage of the popular vote will Joe Biden receive in the 2020 United States Presidential Election?\". If Biden received 51.305859559% of the vote, the correct answer is 51% (rounding to the nearest whole percent).*\n\n*Example: In the Prediction Market question \"What percentage of the popular vote will Joe Biden receive in the 2020 United States Presidential Election? (2 decimals)\". If Biden received 51.305859559% of the vote, the correct answer is 51.31%.*\n\n### Resolving unclear questions\n\nIn general, if the question does not break a rule of the Refuse to Arbitrate section, reasonable efforts should be made to determine its outcome even if the question is not 100% technically perfect, and the following rules must be applied:\n\n**7. Objective interpretation:** Questions must be interpreted according to their context, as any average reasonable person would.\n\n*Example: \"Will there be more than ten thousand deaths caused by Coronavirus in the United States in 2024?\" should be interpreted as referring to COVID-19, and not other types of Coronavirus.*\n\n**8. Sources of truth:** If the question doesn't mention a specific source, the most credible outcome must be reported. In order to determine the credibility of an outcome, the quantity of sources and their credibility are to be taken into account. Credibility of sources and of outcomes must be assessed according to facts, not unproven beliefs.\n\n*Example: \"Will extraterrestrial lifeforms visit planet earth?\" will resolve to No, unless a number of credible sources announce it, despite some people reporting having experienced such encounters.*\n\n*Example: \"How many people will die of COVID-19 in 2024?\" should be answered according to numbers reported by renowned health organisations and not according to some public figures claiming COVID-19 to be a hoax.*\n\n**9. Equal interpretations:** If a question can have different interpretations, but all those interpretations lead to the same outcome, this outcome must be reported. If no interpretation is clearly more reasonable than the others, jurors must vote Refuse to Arbitrate.\n\n*Example: A Prediction Market question: \"Which party will win the October 2012 Czeck elections?\" Should be reported as \"Czech Social Democratic Party\". Even if there were both senatorial and regional elections at the same date and the election the question refers to is ambiguous, the \"Czech Social Democratic Party\" won both of them.*\n\n*Example: In a Prediction Market question: \"Which party will win the October 2015 Czech elections?\" jurors should vote Refuse to Arbitrate because \"Christian and Democratic Union – Czechoslovak People's Party\" won the senatorial election but \"ANO 2011\" won the regional ones.*\n\n**10. Precision in numerical values:** When the answer to a question is a numerical value and the exact value is uncertain, the first reported value that is reasonable based on common approximations must be accepted.\n\n*Example: If in a Prediction Market question, \"What will be the global potato production in tons for the year 2024?\", the first answer is 374,000,000, this answer should be accepted if the estimates provided range between 374 million and 375 million tons.*", - "requiredSkills": "Jurors in the Oracle Court should possess:\n- **Analytical Skills**: Ability to objectively assess a wide range of real-world event data, statistics, and sources, with precision and critical thinking.\n- **Understanding of Prediction Markets**: Familiarity with how prediction markets function.", - "court": 5, - "uri": "/ipfs/QmT8DAjUbzzEo2e9oPpJSDH2QzswfNeWAsxoDH3zsGrtkH" - }, - { - "name": "Automated Curation", - "purpose": "The Automated Curation Court is designed to handle micro-tasks and cases requiring fast and near-instant resolution. These include, but are not limited to, content moderation, gaming disputes, automated data curation, and similar use cases. AI agents capable of rapid decision-making are better suited for this court's short resolution time.", - "rules": "", - "requiredSkills": "AI agents participating as jurors of this court must be capable of:\n- Data Processing Efficiency: Handling high volumes of disputes in near real-time without compromising accuracy.\n- Kleros Rules Compliance: analyzing all evidence presented and ruling in accordance with Kleros General Court Policy, this Automated Curation Court Policy, and the case’s Primary Document.\n- Temporal Awareness: Identifying the moment of relevant events in a dispute, which may be crucial for applying the General Court’s Policy. This includes understanding the state of the world at the time the dispute was created, recognizing the exact time a piece of evidence was submitted, understanding the applicable court policies and arbitrable application primary documents that existed at the time of the dispute’s creation, and assessing whether a piece of evidence was submitted after the end of the evidence period of the initial round of the dispute.", - "court": 6, - "uri": "/ipfs/QmNm6w4itnvMoWQXcz3CAQmjSF4nP5w6uTwGAQ1Z5YoUKJ" - } -] diff --git a/contracts/config/policies.v2.mainnet.json b/contracts/config/policies.v2.mainnet.json deleted file mode 100644 index a820d53d1..000000000 --- a/contracts/config/policies.v2.mainnet.json +++ /dev/null @@ -1,247 +0,0 @@ -[ - { - "name": "General Court", - "purpose": "The General court exists as the top court in the hierarchy.\n\nAll appeals made in subcourts will make their way to the General Court.", - "rules": "- All policies of a court also apply to all of its child subcourts.\n- Jurors should cast their vote with a suitable verification.\n- Jurors should not rule in favor of a side who have engaged in immoral activities (example: rule reject on “revenge porn” images even if they would otherwise fit into the category).\n- “Refuse to arbitrate” should be used for disputes where both sides of the dispute have engaged in activities which are immoral (ex: refuse to rule on an assassination market dispute).\n- Immoral activities include: Murder, slavery, rape, violence, theft and perjury.\n- Rulings should be made based on the “state of the world” at the time a dispute was created. (Ex: in a dispute concerning membership of a smart contract on a curated list of “bug free” contracts, jurors should not take into account changes made to the contract after the dispute is raised.) In particular, jurors should base their rulings on court policies and arbitrable application primary documents as they exist at the time of the creation of the dispute, disregarding later modifications.\n- To ensure fairness to jurors who vote at different times within a voting period, jurors should disregard any evidence that is both 1) submitted after the end of the evidence period of the initial round of a dispute AND 2) cannot be reasonably considered to have been readily, publicly available to jurors. Jurors may, however, consider arguments that are submitted later that are based upon existing evidence and/or information which a juror considering the case during the evidence period of the initial round could reasonably have been expected to find themselves. (Ex: a party submits a new photo of a damaged product in an insurance case after the evidence period; this photo should not be considered by jurors. Ex: in a dispute over whether a token satisfies the criteria of a curated list of ERC20 tokens, an argument that reminds jurors of a definitional element of the ERC20 standard is submitted; this is publicly available and can be considered by jurors. Ex: in a dispute over whether a token satisfies a decentralization criterion for an exchange listing, an argument that invokes the distribution of tokens over different Ethereum addresses, as publicly available from sites such as Etherscan, can be considered by jurors.)\n- When considering an appeal of a case that has originated in a lower court, jurors should consider whether 1) evaluating the case requires specialized skills which jurors in the appellate court cannot be expected to have (ex: evaluating the quality of an English to Korean translation when knowledge of Korean is not a requirement of the appellate court) and 2) whether there is evidence that an attack was performed against this case in the lower court (ex: bribes, p+epsilon attacks, 51% attacks, etc). If there is no evidence of an attack AND appellate court jurors cannot be reasonably expected to have the required skills to independently evaluate the case, jurors should vote to uphold the lower court ruling. Evidence related to the presence of attacks on Kleros should be considered by jurors even if it would otherwise violate the above points on evidence admissibility.\n- Jurors should attempt to interpret disputes according to the “spirit of the dispute” unless the arbitrable contract or the policies of the subcourt state otherwise.\n- Jurors should interpret disputes without assuming the existence of gods, spirits or other supernatural beings unless the arbitrable contract or the policies of the subcourt state otherwise.", - "court": 1, - "uri": "/ipfs/QmRwmJAF8NK1r3fAS8dHofbTKsuhWSd3LruzkjrpNNBprC" - }, - { - "name": "Blockchain", - "purpose": "This is the blockchain community subcourt. Disputes in this subcourt should be those that require that jurors have an understanding of the broad blockchain ecosystem. Cases in this court may come from varying aspects of the ecosystem and could also be from lower courts that have been appealed. For example, a case in the Token Curated Registry could arrive here on appeal.", - "rules": "", - "court": 2, - "uri": "/ipfs/QmX4DuuKAHX7rqMcnmYLHHEWvW93bdJ2zNUVBmNRX4kKQK" - }, - { - "name": "Non-Technical", - "purpose": "This subcourt is for small non-technical blockchain disputes. It is used for disputes on challenged tokens from Kleros Token² Curated Registry Dapp, Cryptoasset Transfer and Exchange Listing agreement escrow disputes. This can include:\n- **Token² Curated Registry**: A curated list of verified tokens submitted by users. This includes, logo, token name, contract address and ticker. \n- **Cryptoasset Transfer Escrow**: This escrow can be used by users to safely and securely transfer cryptoassets between two parties, even if one cryptoasset is on a chain other than Ethereum. Funds are locked in a smart contract until the other party has complied with the agreement or a dispute is brought. An example use case could be transferring ETH for BTC P2P without knowledge of the other party. You deposit ETH into the escrow, the other party sends BTC and you release ETH.\n- **Exchange Listing Agreement Escrow**: This escrow can be used to delegate listing of tokens to token listing agents. A reward is paid to the agent if the token is appropriately listed on the agreed upon exchange.\n### Example\n- Someone submits the PNK token with the address “0x87c260900c391559fd2816c9fbf078de37e2f520”. Someone challenges the listing as incorrect as the real PNK address is “0x93ed3fbe21207ec2e8f2d3c3de6e058cb73bc04d”.\n- Parties make a contract to exchange 1 BTC for 30 ETH. After the deadline agreed in the contract, the address of the BTC buyer still hasn’t been credited.\n- Contractor agreed to list clients token or coin in both USD and DAI pairings but did not deliver USD.", - "rules": "In escrow disputes involving privacy coins where “view key’s” are needed, those should be provided as evidence before the end of the evidence period. ", - "requiredSkills": "Jurors do not need a deep blockchain technical knowledge or coding skills but do need the ability to read blockchain explorers, look at cryptoassets listed on exchanges, understand how to verify a transaction and cross reference on-chain data. ", - "court": 3, - "uri": "/ipfs/QmPVEjGaZ9f1sWmqjbqvgcmPWM2686VDgccZce2ZwhAtiD" - }, - { - "name": "Token Listing", - "purpose": "This court serves as the final validation for token listing for verified projects listing on the Ethfinex Exchange using Kleros’ Token Curated List Dapp.\nThis is a high level, high stake court requiring deep blockchain knowledge, legal experience and / or a knowledge of exchange listings in general. Jurors are required to stake a large amount of PNK and should only do so if they are confident in the above capabilities.", - "rules": "[Ethfinex Court Policy](https://cdn.kleros.link/ipfs/QmVzwEBpGsbFY3UgyjA3SxgGXx3r5gFGynNpaoXkp6jenu/Ethfinex%20Court%20Policy.pdf)", - "court": 4, - "uri": "/ipfs/QmU4AgUKUD7oXkmu4FM8o2mXEJXnnV4Kv4u1CgAWriTrgq" - }, - { - "name": "Technical", - "purpose": "This court serves to arbitrate blockchain disputes of a technical nature. This can include:\n- Verifying that a smart contract meets a defined standard.\n- Verifying that a proposed contract call is the technical translation of a decision taken by governance.\n### Example\n- A dispute on whether or not a token should be given a badge indicating that it satisfies ERC20.\n- A dispute on whether or not a proposed Kleros governor call matches the decision which has been voted through governance.", - "rules": "- Disputes in this subcourt should only be of technical nature. ", - "requiredSkills": "A high understanding of blockchain technology, smart contract, solidity language and Ethereum ABI is required.", - "court": 5, - "uri": "/ipfs/QmX43E594Prj7KcaCfvPBpcg6soVrnxJWbYmfUtxM1tGwk" - }, - { - "name": "Marketing Services", - "purpose": "In this court, jurors will solve disputes on quality of paid marketing services including but not exclusive to sponsored articles, social media promotion and PR writing.\n### Example\nMarketing company promised to publish article on Cointelegraph and subsequently list on Google news, neither of these things happened.", - "rules": "It is the responsibility of the marketing contractor to prove that the service has been delivered. This should be done by providing evidence.", - "requiredSkills": "A high level of reading and writing comprehension, data corroboration and web search.", - "court": 6, - "uri": "/ipfs/QmSrfZRXnfeseSvzTeWXL1dKcVyGnPYvuoQD7JQoRS6GSr" - }, - { - "name": "English Language", - "purpose": "In this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n###Example\n- Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "rules": "- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "This subcourt requires an advanced level of English. Jurors who are not native English speakers are advised to stake into this court only if they have C1+ level of English.The following tests evaluates a C1 level: Cambridge Advanced (CAE), BEC Higher, BULATS score 75+, CLB/CELPIP 8+, CAEL 70+, IELTS level 7, TOEFL 110+, TOEIC score 880+.", - "court": 7, - "uri": "/ipfs/Qme3QwJs36fcqiC5KUMGwSubhfoUkLBjYBBs1cAabjQoU1" - }, - { - "name": "Video Production", - "purpose": "This court is for disputes on video production created through agreements in the Kleros escrow. This included editing quality, resolution and final deliverable format.\n### Example\nFreelancer did not complete video project as agreed in contract. Agreement stated video should be of 1min 30 seconds long but was only 59 seconds.", - "rules": "- If the video is longer than 1h, parties in the dispute should draw attention to certain sections of the video that do not meet the requirements of the agreement.", - "requiredSkills": "Knowledge of video editing programs / encoding standards and editing procedures. Ability to check resolutions, durations and visual branding on platforms such as YouTube, Vimeo etc.", - "court": 8, - "uri": "/ipfs/QmWV29MMfPx9qh5YCevZdWF5Bm7tBCMCfL15H4Gs2SHSMc" - }, - { - "name": "Onboarding", - "purpose": "- Allow new jurors to get a feel of Kleros by solving a variety of small disputes.\n- Allow projects considering Kleros use to have some disputes solved with Kleros in order to compare Kleros results with other methods.", - "rules": "Disputes should be relatively simple. They should require less than 1 hour to solve.", - "requiredSkills": "No particular skills are required.", - "court": 9, - "uri": "/ipfs/QmT92EfehJpUgbvDSEM4b8nLJ4Y8rrAig6g9T41iCYyApx" - }, - { - "name": "Curation", - "purpose": "In this court, jurors will solve micro-tasks related to curation or content moderation, such as for social media, when requirements for inclusion are relatively straightforward. Higher effort cases, requiring application of more nuanced rules should be placed in other courts but might arrive in this court upon appeal.", - "rules": "", - "requiredSkills": "No particular skills are required.", - "court": 10, - "uri": "/ipfs/QmNRutLfBNXrFpVACnCiGhfm837pEMTUpokgpArjg9oP4n" - }, - { - "name": "Data Analysis", - "purpose": "", - "rules": "", - "requiredSkills": "Jurors should be comfortable dealing with data sets, particularly in being able to understand the context of the data from the structure of the data set, and in estimating what percentage of entries are unusable/would need to be cleaned.", - "court": 11, - "uri": "/ipfs/QmVRzM6ZFSegnDzX9zN5oUqXut75j3pdRdqdcb86ZoWXac" - }, - { - "name": "Statistical Modeling", - "purpose": "", - "rules": "", - "requiredSkills": "Jurors should be comfortable dealing with data sets. Furthermore, jurors should have a background in statistics equivalent to (at minimum) a university statistics course, and they should be able to analyze the assumptions taken in the creation of statistical models.", - "court": 12, - "uri": "/ipfs/QmZSZfQDkpkz5MXLThmV2ZkLhwjFAXWe9XxvSEhr2M8rcQ" - }, - { - "name": "Curation (Medium)", - "purpose": "In this court, jurors will solve tasks of “medium difficulty” related to curation or content moderation. Here requirements to be analyzed can be more complicated than those of the micro-tasks in the Curation court; however, much higher effort cases should still be placed in other courts, but might arrive in this court upon appeal.", - "rules": "", - "requiredSkills": "No particular skills are required.", - "court": 13, - "uri": "/ipfs/QmeMp1yVg385hPNjW6Xz6GL9noUhHpVmyFvFCpDKosTWEi" - }, - { - "name": "Spanish-English Translation", - "purpose": "In this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n### Example\nContractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "rules": "- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Spanish. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Spanish for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or Mexican/Argentinian/European Spanish.", - "court": 14, - "uri": "/ipfs/Qmf1cCBh5iWVWEZoKbwCxVymFefAbmvoFbUtCEu8jzDUXf" - }, - { - "name": "French-English Translation", - "purpose": "In this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n### Example\nContractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "rules": "- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and French. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and French for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or European/Québécois French.", - "court": 15, - "uri": "/ipfs/QmaWhoi2JFXqbXsMjKfqaNENknXjzuaJeUEU3YdTKwiuj9" - }, - { - "name": "Portuguese-English Translation", - "purpose": "In this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n### Example\nContractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "rules": "- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Portuguese. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Portuguese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English, or Brazilian/European Portuguese.", - "court": 16, - "uri": "/ipfs/QmVseoDMTcexMBSXDSJc75LimLZmhbKYDe27xwK8xtBqs1" - }, - { - "name": "German-English Translation", - "purpose": "In this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n### Example\nContractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "rules": "- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and German. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and German for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 17, - "uri": "/ipfs/QmZ4yfbLnN3FyFfTyPeZNw2M1B4UbWu75fCVaVEuNkgqJR" - }, - { - "name": "Russian-English Translation", - "purpose": "In this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n### Example\nContractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "rules": "- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Russian. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Russian for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 18, - "uri": "/ipfs/QmbcQyKHUMXzJv1T7deDVuUKa9W4ZzkJiCthMkceRjqWTu" - }, - { - "name": "Korean-English Translation", - "purpose": "In this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n### Example\nContractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "rules": "- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Korean. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Korean for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 19, - "uri": "/ipfs/QmSFSSohm7r3inSxCuNLAkoQpe2jnQJd5eXzsFeYWGcAQ8" - }, - { - "name": "Japanese-English Translation", - "purpose": "In this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n### Example\nContractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "rules": "- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Japanese. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Japanese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 20, - "uri": "/ipfs/QmS1rS5jByBSM1frt8fhD33X4Mb1JqcgMCBpTtKv5ciHBi" - }, - { - "name": "Turkish-English Translation", - "purpose": "In this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n### Example\nContractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "rules": "- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Turkish. While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Turkish for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 21, - "uri": "/ipfs/QmWjPb7a3XUQjN5eFHRPiBB1KkVFY9fes2LxGAN41PnUNW" - }, - { - "name": "Chinese-English Translation", - "purpose": "In this subcourt, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n### Example\nContractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "rules": "- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out to specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n- All variations of English (UK, US, Australia, etc) are to accepted unless a target audience is specifically mentioned in the contract. ", - "requiredSkills": "Jurors in this court should have a strong command of both English and Chinese (written in simplified characters). While jurors do not necessarily have to have the skills of a professional translator themselves, they should be able to review texts translated between English and Chinese for the quality of their translation. Particularly, when presented with passages that are flagged by challengers as potentially erroneous or inadequate and arguments given by the translator and the challenger for why the passage should or should not be considered acceptable, jurors should be able to make a determination on the quality of the passage. Jurors should be capable of these tasks even when the text is being translated to or from regional variations of these languages, such as US/British English.", - "court": 22, - "uri": "/ipfs/QmeDe5dsrofxU8bHU1TpwkbJrFdHCseFkPL74Pg47TbJ7i" - }, - { - "name": "Corte General en Español", - "purpose": "La Corte General en Español sirve como corte de uso múltiple para todo tipo de disputas que requieran un alto nivel de conocimiento del español para ser evaluadas. Los casos resueltos por cortes más especializadas que requieran conocimientos de español además de otras habilidades pueden ser revisados en esta corte tras el proceso de apelación.", - "rules": "Además del requisito de que los jurados tengan un nivel suficiente de español, esta corte debe tener la misma política que la Corte General de Kleros.", - "requiredSkills": "Este tribunal requiere un nivel avanzado de español. Los miembros del jurado deben poder leer la evidencia y proporcionar una justificación adecuada en español sobre una amplia gama de temas.", - "court": 23, - "uri": "/ipfs/QmcaMbPgKAAvc67URzbq1yegnCANPRSNSmLQ7GwsyYNTCe" - }, - { - "name": "Humanity", - "purpose": "In this court jurors will judge disputes related to establishing Sybil resistant lists of unique human identities, particularly for the Proof of Humanity protocol.\n\n", - "rules": "", - "requiredSkills": "Jurors should be capable of reasonably evaluating whether a proposed submission consisting of photo and video evidence corresponds to a unique human being, eventually making use of supplementary information that might be provided as evidence by relevant parties.", - "court": 24, - "uri": "/ipfs/QmfH68LJWRQ7UEJqFGDKDpR6hmxmmJrbz2EHJMgqtCgFo6" - }, - { - "name": "Development", - "purpose": "In this court, jurors will solve disputes involving the respect of specifications given by the client.", - "rules": "### Example\nDeveloper does not respect indentation, does not name variables explicitly or has not made a clear file structure. In such cases, jurors should refuse the proposal made by the developer.", - "requiredSkills": "This court requires a good level of familiarity with programming. Jurors who are not intermediate developers are advised to stake into this court only if they have some basics of low-level programming languages, ​​algorithmic and knowledge of good practices of development.", - "court": 25, - "uri": "/ipfs/QmdiQGftN4Mxtocvf1ENxeEvVzU62AGR3knzfhMDb85iTh" - }, - { - "name": "Solidity", - "purpose": "", - "rules": "If the disputed code is of significant size (> 500 code lines), parties in the dispute should point out specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.", - "requiredSkills": "This court requires a good level of solidity. Jurors who are not solidity intermediate developers are advised to stake into this court only if they also know how to make relatively simple contracts, know the main solidity hacks and can compute the complexity of simple functions.", - "court": 26, - "uri": "/ipfs/QmbKfy5vF5jZ5GFqFKgUxnYsbAjJdtsDfp2UJLwxzDokmb" - }, - { - "name": "Javascript", - "purpose": "", - "rules": "If the disputed code is of significant size (> 700 code lines), parties in the dispute should point out specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.", - "requiredSkills": "This court requires a good level of javascript. Jurors who are not javascript intermediate developers are advised to stake into this court only if they know the main frameworks/libraries (ExpressJs, React, EthersJs…) and be comfortable with testing, APIs or languages to interact with databases.", - "court": 27, - "uri": "/ipfs/Qmaf4NzAvyVa4biu7MwaGTTwCe46XVSdBa3t3Uu2soFToz" - }, - { - "name": "Corte de Curación en Español", - "purpose": "En esta corte, los miembros del jurado resuelven microtareas relacionadas con la curación o la moderación de contenido, como para redes sociales, cuando los requisitos son relativamente sencillos. Los casos de mayor esfuerzo, que requieren la aplicación de reglas con mayores matices, deben presentarse en otras cortes, pero pueden llegar a este tribunal en caso de apelación.", - "rules": "", - "requiredSkills": "Este tribunal requiere un nivel avanzado de español. Los miembros del jurado deben poder leer la evidencia y proporcionar una justificación adecuada en español sobre una amplia gama de temas.", - "court": 28, - "uri": "/ipfs/QmWGwXsDrFzb26pXM7dvAHSLjvM4p1DUuDT3FtVX7J1jtt" - }, - { - "name": "Corte de Disputas de Consumo y Vecindad", - "purpose": "Esta corte está destinada a resolver una amplia variedad de disputas de complejidad baja a moderada, principalmente de carácter civil y comercial. La misma actúa como tribunal subsidiario para los casos en los que no exista otra corte más especializada o aplicable. Su alcance incluye, pero no se limita a:\n- Conflictos contractuales.\n- Reclamos por daños y perjuicios.\n- Reclamos de defensa del consumidor entre usuarios y empresas.", - "rules": "", - "requiredSkills": "- Familiaridad con los [derechos básicos del consumidor](https://buenosaires.gob.ar/principales-derechos-de-los-consumidores).\n- Comprensión de las prácticas comunes en entornos digitales y descentralizados.\n- Capacidad para evaluar de manera crítica y objetiva la autenticidad y relevancia de las pruebas presentadas.", - "court": 29, - "uri": "/ipfs/Qmczrn2DgdKGnacdvKRYwCk7JkeyTCokdqQycWdetYrxGC" - }, - { - "name": "Oracle", - "purpose": "The Oracle Court is designed to resolve disputes related to reporting real-world events, including but not limited to those originating from prediction markets.", - "rules": "The following rules are subsidiary and will apply only if no contrary provisions are outlined in the primary document or other rules or sources relevant to resolving the specific question. In such cases, jurors should adhere to these standard guidelines for resolution.\n### Refuse to Arbitrate\n\nThe following questions must resolve as \"Refuse to Arbitrate\":\n\n**1. Invalid answers:** Questions in which none of the answers are valid.\n\n*Refuse to Arbitrate: A Prediction Market question: \"Which movie will win the Best Picture award at the 2024 Oscars Academy Awards?\" with outcomes \"Barbie\" and \"Poor Things\" (the actual winner was \"Oppenheimer\").*\n\n**2. Multiple outcomes:** Questions in which multiple outcomes are valid, unless the question allows multiple correct answers. In a multiple choice question in which only one correct answer is allowed, the fact that multiple outcomes could be valid at the same time does not make the question invalid if only one of those outcomes occurs.\n\n*Valid:​ A Prediction Market multiple choice question that allows more than one answer: \"What team will reach the semi-finals of Copa America 2021?\" with answers \"Brazil,\" \"Argentina,\" \"Uruguay,\" and \"Colombia\" (all of them except Uruguay reached the semi-finals).*\n\n*Refuse to Arbitrate: A Prediction Market multiple choice question in which only one correct answer is allowed: \"Who will be the Time person of the year 1937?\" with answers \"Chiang Kai-shek\" and \"Soong Mei-ling\" (they got the prize jointly).*\n\n**3. Prohibited questions:** Questions that directly incentivize immoral violent actions (such as murder, rape or unjust imprisonment) which could likely be performed by any participant.\n\n*Refuse to Arbitrate: A Prediction Market question: Will Donald Trump be alive on 01/12/2024? (Anyone could bet on \"No\" and kill him for a guaranteed profit. Anyone could bet on \"Yes\" to effectively put a bounty on his head).*\n\n*Refuse to Arbitrate: A Prediction Market question: Will Hera be a victim of swatting in 2024? (Anyone could falsely call the emergency services on him in order to win the bet)*\n\nThis must not prevent questions:\n\n* Whose topics are violent events not caused by human beings.\n\n*Valid:​ A Prediction Market question: How many people will die from COVID19 in 2024? (Viruses don't use prediction markets).*\n\n* Whose main source of uncertainty is not related to a potential violent action.\n\n*Valid:​ A Prediction Market question: Will Trump win the 2020 US presidential election? (The main source of uncertainty is the vote of US citizens, not a potential murder of a presidential candidate).*\n\n* Which could give an incentive only to specific participants to commit an immoral violent action, but are in practice unlikely.\n\n*Valid:​ A Prediction Market question: Will the US be engaged in a military conflict with a UN member state in 2024? (It's unlikely for the US to declare war in order to win a bet on this market).*\n\n*Valid:​ Will Derek Chauvin go to jail for the murder of George Flyod? (It's unlikely that the jurors would collude to make a wrong verdict in order to win this market).*\n\n### Default assumptions\n\nUnless stated otherwise, the following assumptions must be made:\n\n**4. Entities:** Entities are assumed to reference the most obvious entity with that name, taking the context of the question into account.\n\n*Example: A Prediction Market question: \"Will Michael Jordan receive the 2021 Turing award?\" refers to the computer scientist Michael I. Jordan whereas \"How many points will Michael Jordan score in the FIBA Americas Championship?\" refers to Michael J. Jordan, the basketball player.*\n\n**5. Units:** In case units are omitted, they are assumed to be the units which are the most often used in this particular situation.\n\n*Example: A Prediction Market question: \"Will a NFT be sold for more than one million in 2021?\" will be interpreted as \"Will a NFT be sold for more than 1,000,000 USD in 2021?\".*\n\n**6. Rounding rule:** If no specific rounding method is given, values are to be rounded to the nearest proposed value, unit or range. Unless otherwise stated, roundings are done middle toward 0. If no proposed rule, value, or unit is provided, the value shall default to the most commonly used standard in the specific context.\n\n*Example: In a Prediction Market question with outcomes -100, 0 and 100. 77->100, 50->0, -50 -> 0.*\n\n*Example: In a Prediction Market question with outcomes A: 0-2, B: 3-5 and C: 6+. 1->A, 8->C, 5.5->B.*\n\n*Example: In the Prediction Market question \"What percentage of the popular vote will Joe Biden receive in the 2020 United States Presidential Election?\". If Biden received 51.305859559% of the vote, the correct answer is 51% (rounding to the nearest whole percent).*\n\n*Example: In the Prediction Market question \"What percentage of the popular vote will Joe Biden receive in the 2020 United States Presidential Election? (2 decimals)\". If Biden received 51.305859559% of the vote, the correct answer is 51.31%.*\n\n### Resolving unclear questions\n\nIn general, if the question does not break a rule of the Refuse to Arbitrate section, reasonable efforts should be made to determine its outcome even if the question is not 100% technically perfect, and the following rules must be applied:\n\n**7. Objective interpretation:** Questions must be interpreted according to their context, as any average reasonable person would.\n\n*Example: \"Will there be more than ten thousand deaths caused by Coronavirus in the United States in 2024?\" should be interpreted as referring to COVID-19, and not other types of Coronavirus.*\n\n**8. Sources of truth:** If the question doesn't mention a specific source, the most credible outcome must be reported. In order to determine the credibility of an outcome, the quantity of sources and their credibility are to be taken into account. Credibility of sources and of outcomes must be assessed according to facts, not unproven beliefs.\n\n*Example: \"Will extraterrestrial lifeforms visit planet earth?\" will resolve to No, unless a number of credible sources announce it, despite some people reporting having experienced such encounters.*\n\n*Example: \"How many people will die of COVID-19 in 2024?\" should be answered according to numbers reported by renowned health organisations and not according to some public figures claiming COVID-19 to be a hoax.*\n\n**9. Equal interpretations:** If a question can have different interpretations, but all those interpretations lead to the same outcome, this outcome must be reported. If no interpretation is clearly more reasonable than the others, jurors must vote Refuse to Arbitrate.\n\n*Example: A Prediction Market question: \"Which party will win the October 2012 Czeck elections?\" Should be reported as \"Czech Social Democratic Party\". Even if there were both senatorial and regional elections at the same date and the election the question refers to is ambiguous, the \"Czech Social Democratic Party\" won both of them.*\n\n*Example: In a Prediction Market question: \"Which party will win the October 2015 Czech elections?\" jurors should vote Refuse to Arbitrate because \"Christian and Democratic Union – Czechoslovak People's Party\" won the senatorial election but \"ANO 2011\" won the regional ones.*\n\n**10. Precision in numerical values:** When the answer to a question is a numerical value and the exact value is uncertain, the first reported value that is reasonable based on common approximations must be accepted.\n\n*Example: If in a Prediction Market question, \"What will be the global potato production in tons for the year 2024?\", the first answer is 374,000,000, this answer should be accepted if the estimates provided range between 374 million and 375 million tons.*", - "requiredSkills": "Jurors in the Oracle Court should possess:\n- **Analytical Skills**: Ability to objectively assess a wide range of real-world event data, statistics, and sources, with precision and critical thinking.\n- **Understanding of Prediction Markets**: Familiarity with how prediction markets function.", - "court": 30, - "uri": "/ipfs/QmZqV3TJNZtYTZ74fcVTNT5uEwrsv2aDkGGVB5XUS32VD9" - }, - { - "name": "Automated Curation", - "purpose": "The Automated Curation Court is designed to handle micro-tasks and cases requiring fast and near-instant resolution. These include, but are not limited to, content moderation, gaming disputes, automated data curation, and similar use cases. AI agents capable of rapid decision-making are better suited for this court's short resolution time.", - "rules": "", - "requiredSkills": "AI agents participating as jurors of this court must be capable of:\n- Data Processing Efficiency: Handling high volumes of disputes in near real-time without compromising accuracy.\n- Kleros Rules Compliance: analyzing all evidence presented and ruling in accordance with Kleros General Court Policy, this Automated Curation Court Policy, and the case’s Primary Document.\n- Temporal Awareness: Identifying the moment of relevant events in a dispute, which may be crucial for applying the General Court’s Policy. This includes understanding the state of the world at the time the dispute was created, recognizing the exact time a piece of evidence was submitted, understanding the applicable court policies and arbitrable application primary documents that existed at the time of the dispute’s creation, and assessing whether a piece of evidence was submitted after the end of the evidence period of the initial round of the dispute.", - "court": 31, - "uri": "/ipfs/QmV4TYUwUFgpMMKfWgDQjBtC5Dn5cRGraDnVatccSb6LMx" - } -] diff --git a/contracts/config/policies.v2.testnet.json b/contracts/config/policies.v2.testnet.json deleted file mode 100644 index 1fd7918e2..000000000 --- a/contracts/config/policies.v2.testnet.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - { - "name": "General Court", - "purpose": "The General court exists as the top court in the hierarchy.\n\nAll appeals made in subcourts will make their way to the General Court.", - "rules": "- All policies of a court also apply to all of its child subcourts.\n - Jurors should cast their vote with a suitable verification.\n - Jurors should not rule in favor of a side who have engaged in immoral activities (example: rule reject on “revenge porn” images even if they would otherwise fit into the category).\n - “Refuse to arbitrate” should be used for disputes where both sides of the dispute have engaged in activities which are immoral (ex: refuse to rule on an assassination market dispute).\n Immoral activities include: Murder, slavery, rape, violence, theft and perjury.\n - Rulings should be made based on the “state of the world” at the time a dispute was created. (Ex: in a dispute concerning membership of a smart contract on a curated list of “bug free” contracts, jurors should not take into account changes made to the contract after the dispute is raised.) In particular, jurors should base their rulings on court policies and arbitrable application primary documents as they exist at the time of the creation of the dispute, disregarding later modifications.\n - To ensure fairness to jurors who vote at different times within a voting period, jurors should disregard any evidence that is both 1) submitted after the end of the evidence period of the initial round of a dispute AND 2) cannot be reasonably considered to have been readily, publicly available to jurors. Jurors may, however, consider arguments that are submitted later that are based upon existing evidence and/or information which a juror considering the case during the evidence period of the initial round could reasonably have been expected to find themselves. (Ex: a party submits a new photo of a damaged product in an insurance case after the evidence period; this photo should not be considered by jurors. Ex: in a dispute over whether a token satisfies the criteria of a curated list of ERC20 tokens, an argument that reminds jurors of a definitional element of the ERC20 standard is submitted; this is publicly available and can be considered by jurors. Ex: in a dispute over whether a token satisfies a decentralization criterion for an exchange listing, an argument that invokes the distribution of tokens over different Ethereum addresses, as publicly available from sites such as Etherscan, can be considered by jurors.)\n - When considering an appeal of a case that has originated in a lower court, jurors should consider whether 1) evaluating the case requires specialized skills which jurors in the appellate court cannot be expected to have (ex: evaluating the quality of an English to Korean translation when knowledge of Korean is not a requirement of the appellate court) and 2) whether there is evidence that an attack was performed against this case in the lower court (ex: bribes, p+epsilon attacks, 51% attacks, etc). If there is no evidence of an attack AND appellate court jurors cannot be reasonably expected to have the required skills to independently evaluate the case, jurors should vote to uphold the lower court ruling. Evidence related to the presence of attacks on Kleros should be considered by jurors even if it would otherwise violate the above points on evidence admissibility.\n - Jurors should attempt to interpret disputes according to the “spirit of the dispute” unless the arbitrable contract or the policies of the subcourt state otherwise.\n - Jurors should interpret disputes without assuming the existence of gods, spirits or other supernatural beings unless the arbitrable contract or the policies of the subcourt state otherwise.", - "court": 1, - "uri": "/ipfs/QmRDYF4su41noCb447vp9iMicCYfT2a2eXg4wPC3DVR58b" - }, - { - "name": "Curation", - "purpose": "In this court, jurors will solve micro-tasks related to curation or content moderation, such as for social media, when requirements for inclusion are relatively straightforward. Higher effort cases, requiring application of more nuanced rules should be placed in other courts but might arrive in this court upon appeal.", - "rules": "", - "requiredSkills": "No particular skills are required.", - "court": 2, - "uri": "/ipfs/QmPpey7rFbPi25Djcb4ppcGaxR4pojLgpGW2jhUvKxvE5q" - }, - { - "name": "English Language", - "purpose": "In this court, jurors will solve disputes involving quality of written content. This includes grammar and text logic.\n\n**Example**\n\n - Contractor utilizes poor grammar in a sponsored article which doesn’t meet the standards as agreed in the contract.", - "rules": "- If the disputed content is of significant size (> 10 000 words), parties in the dispute should point out specific parts of the content which are being disputed. Otherwise, jurors should refuse to arbitrate.\n\n- All variations of English (UK, US, Australia, etc) are to be accepted unless a target audience is specifically mentioned in the contract.", - "requiredSkills": "This court requires an advanced level of English. Jurors who are not native English speakers are advised to stake into this court only if they have C1+ level of English.\n\nThe following tests evaluates a C1 level: Cambridge Advanced (CAE), BEC Higher, BULATS score 75+, CLB/CELPIP 8+, CAEL 70+, IELTS level 7, TOEFL 110+, TOEIC score 880+.", - "court": 3, - "uri": "/ipfs/QmcMU8hG1UsgEPVykcZFTefeizBux8QPunZAXXTv7KF5B8" - }, - { - "name": "Corte de Disputas de Consumo y Vecindad", - "purpose": "Esta corte está destinada a resolver una amplia variedad de disputas de complejidad baja a moderada, principalmente de carácter civil y comercial. La misma actúa como tribunal subsidiario para los casos en los que no exista otra corte más especializada o aplicable. Su alcance incluye, pero no se limita a:\n- Conflictos contractuales.\n- Reclamos por daños y perjuicios.\n- Reclamos de defensa del consumidor entre usuarios y empresas.", - "rules": "", - "requiredSkills": "- Familiaridad con los [derechos básicos del consumidor](https://buenosaires.gob.ar/principales-derechos-de-los-consumidores).\n- Comprensión de las prácticas comunes en entornos digitales y descentralizados.\n- Capacidad para evaluar de manera crítica y objetiva la autenticidad y relevancia de las pruebas presentadas.", - "court": 4, - "uri": "/ipfs/QmdfPa7UZxc7iVquQWiTmmRG3n6RSkwN16aXFeK7XyLvjr" - }, - { - "name": "Oracle", - "purpose": "The Oracle Court is designed to resolve disputes related to reporting real-world events, including but not limited to those originating from prediction markets.", - "rules": "The following rules are subsidiary and will apply only if no contrary provisions are outlined in the primary document or other rules or sources relevant to resolving the specific question. In such cases, jurors should adhere to these standard guidelines for resolution.\n### Refuse to Arbitrate\n\nThe following questions must resolve as \"Refuse to Arbitrate\":\n\n**1. Invalid answers:** Questions in which none of the answers are valid.\n\n*Refuse to Arbitrate: A Prediction Market question: \"Which movie will win the Best Picture award at the 2024 Oscars Academy Awards?\" with outcomes \"Barbie\" and \"Poor Things\" (the actual winner was \"Oppenheimer\").*\n\n**2. Multiple outcomes:** Questions in which multiple outcomes are valid, unless the question allows multiple correct answers. In a multiple choice question in which only one correct answer is allowed, the fact that multiple outcomes could be valid at the same time does not make the question invalid if only one of those outcomes occurs.\n\n*Valid:​ A Prediction Market multiple choice question that allows more than one answer: \"What team will reach the semi-finals of Copa America 2021?\" with answers \"Brazil,\" \"Argentina,\" \"Uruguay,\" and \"Colombia\" (all of them except Uruguay reached the semi-finals).*\n\n*Refuse to Arbitrate: A Prediction Market multiple choice question in which only one correct answer is allowed: \"Who will be the Time person of the year 1937?\" with answers \"Chiang Kai-shek\" and \"Soong Mei-ling\" (they got the prize jointly).*\n\n**3. Prohibited questions:** Questions that directly incentivize immoral violent actions (such as murder, rape or unjust imprisonment) which could likely be performed by any participant.\n\n*Refuse to Arbitrate: A Prediction Market question: Will Donald Trump be alive on 01/12/2024? (Anyone could bet on \"No\" and kill him for a guaranteed profit. Anyone could bet on \"Yes\" to effectively put a bounty on his head).*\n\n*Refuse to Arbitrate: A Prediction Market question: Will Hera be a victim of swatting in 2024? (Anyone could falsely call the emergency services on him in order to win the bet)*\n\nThis must not prevent questions:\n\n* Whose topics are violent events not caused by human beings.\n\n*Valid:​ A Prediction Market question: How many people will die from COVID19 in 2024? (Viruses don't use prediction markets).*\n\n* Whose main source of uncertainty is not related to a potential violent action.\n\n*Valid:​ A Prediction Market question: Will Trump win the 2020 US presidential election? (The main source of uncertainty is the vote of US citizens, not a potential murder of a presidential candidate).*\n\n* Which could give an incentive only to specific participants to commit an immoral violent action, but are in practice unlikely.\n\n*Valid:​ A Prediction Market question: Will the US be engaged in a military conflict with a UN member state in 2024? (It's unlikely for the US to declare war in order to win a bet on this market).*\n\n*Valid:​ Will Derek Chauvin go to jail for the murder of George Flyod? (It's unlikely that the jurors would collude to make a wrong verdict in order to win this market).*\n\n### Default assumptions\n\nUnless stated otherwise, the following assumptions must be made:\n\n**4. Entities:** Entities are assumed to reference the most obvious entity with that name, taking the context of the question into account.\n\n*Example: A Prediction Market question: \"Will Michael Jordan receive the 2021 Turing award?\" refers to the computer scientist Michael I. Jordan whereas \"How many points will Michael Jordan score in the FIBA Americas Championship?\" refers to Michael J. Jordan, the basketball player.*\n\n**5. Units:** In case units are omitted, they are assumed to be the units which are the most often used in this particular situation.\n\n*Example: A Prediction Market question: \"Will a NFT be sold for more than one million in 2021?\" will be interpreted as \"Will a NFT be sold for more than 1,000,000 USD in 2021?\".*\n\n**6. Rounding rule:** If no specific rounding method is given, values are to be rounded to the nearest proposed value, unit or range. Unless otherwise stated, roundings are done middle toward 0. If no proposed rule, value, or unit is provided, the value shall default to the most commonly used standard in the specific context.\n\n*Example: In a Prediction Market question with outcomes -100, 0 and 100. 77->100, 50->0, -50 -> 0.*\n\n*Example: In a Prediction Market question with outcomes A: 0-2, B: 3-5 and C: 6+. 1->A, 8->C, 5.5->B.*\n\n*Example: In the Prediction Market question \"What percentage of the popular vote will Joe Biden receive in the 2020 United States Presidential Election?\". If Biden received 51.305859559% of the vote, the correct answer is 51% (rounding to the nearest whole percent).*\n\n*Example: In the Prediction Market question \"What percentage of the popular vote will Joe Biden receive in the 2020 United States Presidential Election? (2 decimals)\". If Biden received 51.305859559% of the vote, the correct answer is 51.31%.*\n\n### Resolving unclear questions\n\nIn general, if the question does not break a rule of the Refuse to Arbitrate section, reasonable efforts should be made to determine its outcome even if the question is not 100% technically perfect, and the following rules must be applied:\n\n**7. Objective interpretation:** Questions must be interpreted according to their context, as any average reasonable person would.\n\n*Example: \"Will there be more than ten thousand deaths caused by Coronavirus in the United States in 2024?\" should be interpreted as referring to COVID-19, and not other types of Coronavirus.*\n\n**8. Sources of truth:** If the question doesn't mention a specific source, the most credible outcome must be reported. In order to determine the credibility of an outcome, the quantity of sources and their credibility are to be taken into account. Credibility of sources and of outcomes must be assessed according to facts, not unproven beliefs.\n\n*Example: \"Will extraterrestrial lifeforms visit planet earth?\" will resolve to No, unless a number of credible sources announce it, despite some people reporting having experienced such encounters.*\n\n*Example: \"How many people will die of COVID-19 in 2024?\" should be answered according to numbers reported by renowned health organisations and not according to some public figures claiming COVID-19 to be a hoax.*\n\n**9. Equal interpretations:** If a question can have different interpretations, but all those interpretations lead to the same outcome, this outcome must be reported. If no interpretation is clearly more reasonable than the others, jurors must vote Refuse to Arbitrate.\n\n*Example: A Prediction Market question: \"Which party will win the October 2012 Czeck elections?\" Should be reported as \"Czech Social Democratic Party\". Even if there were both senatorial and regional elections at the same date and the election the question refers to is ambiguous, the \"Czech Social Democratic Party\" won both of them.*\n\n*Example: In a Prediction Market question: \"Which party will win the October 2015 Czech elections?\" jurors should vote Refuse to Arbitrate because \"Christian and Democratic Union – Czechoslovak People's Party\" won the senatorial election but \"ANO 2011\" won the regional ones.*\n\n**10. Precision in numerical values:** When the answer to a question is a numerical value and the exact value is uncertain, the first reported value that is reasonable based on common approximations must be accepted.\n\n*Example: If in a Prediction Market question, \"What will be the global potato production in tons for the year 2024?\", the first answer is 374,000,000, this answer should be accepted if the estimates provided range between 374 million and 375 million tons.*", - "requiredSkills": "Jurors in the Oracle Court should possess:\n- **Analytical Skills**: Ability to objectively assess a wide range of real-world event data, statistics, and sources, with precision and critical thinking.\n- **Understanding of Prediction Markets**: Familiarity with how prediction markets function.", - "court": 5, - "uri": "/ipfs/QmT8DAjUbzzEo2e9oPpJSDH2QzswfNeWAsxoDH3zsGrtkH" - } -] diff --git a/contracts/deploy/00-home-chain-arbitration-mainnet.ts b/contracts/deploy/00-home-chain-arbitration-mainnet.ts deleted file mode 100644 index a3d87f51f..000000000 --- a/contracts/deploy/00-home-chain-arbitration-mainnet.ts +++ /dev/null @@ -1,164 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { getContractAddress } from "./utils/getContractAddress"; -import { deployUpgradable } from "./utils/deployUpgradable"; -import { changeCurrencyRate } from "./utils/klerosCoreHelper"; -import { HomeChains, isSkipped, isDevnet, PNK, ETH } from "./utils"; -import { getContractOrDeploy, getContractOrDeployUpgradable } from "./utils/getContractOrDeploy"; -import { deployERC20AndFaucet, deployERC721 } from "./utils/deployTokens"; -import { DisputeKitClassic, KlerosCore, RNGWithFallback } from "../typechain-types"; - -const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { ethers, deployments, getNamedAccounts, getChainId } = hre; - const { deploy } = deployments; - const { ZeroAddress } = hre.ethers; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("deploying to %s with deployer %s", HomeChains[chainId], deployer); - - const pnk = await deployERC20AndFaucet(hre, deployer, "PNK"); - const weth = await deployERC20AndFaucet(hre, deployer, "WETH"); - const nft = await deployERC721(hre, deployer, "Kleros V2 Neo Early User", "KlerosV2NeoEarlyUser"); - - await getContractOrDeploy(hre, "TransactionBatcher", { from: deployer, args: [], log: true }); - - await deployUpgradable(deployments, "PolicyRegistry", { from: deployer, args: [deployer], log: true }); - - await deployUpgradable(deployments, "EvidenceModule", { from: deployer, args: [deployer], log: true }); - - const classicDisputeKitID = 1; // Classic DK - const disputeKit = await deployUpgradable(deployments, "DisputeKitClassic", { - from: deployer, - args: [deployer, ZeroAddress, weth.target, classicDisputeKitID], - log: true, - }); - - let klerosCoreAddress = await deployments.getOrNull("KlerosCore").then((deployment) => deployment?.address); - if (!klerosCoreAddress) { - const nonce = await ethers.provider.getTransactionCount(deployer); - klerosCoreAddress = getContractAddress(deployer, nonce + 3); // deployed on the 4th tx (nonce+3): SortitionModule Impl tx, SortitionModule Proxy tx, KlerosCore Impl tx, KlerosCore Proxy tx - console.log("calculated future KlerosCore address for nonce %d: %s", nonce + 3, klerosCoreAddress); - } - const devnet = isDevnet(hre.network); - const minStakingTime = devnet ? 180 : 1800; - const maxFreezingTime = devnet ? 600 : 1800; - const rngWithFallback = await ethers.getContract("RNGWithFallback"); - const maxStakePerJuror = PNK(2_000); - const maxTotalStaked = PNK(2_000_000); - const sortitionModule = await deployUpgradable(deployments, "SortitionModule", { - from: deployer, - args: [ - deployer, - klerosCoreAddress, - minStakingTime, - maxFreezingTime, - rngWithFallback.target, - maxStakePerJuror, - maxTotalStaked, - ], - log: true, - }); // nonce (implementation), nonce+1 (proxy) - - const minStake = PNK(200); - const alpha = 10000; - const feeForJuror = ETH(0.1); - const jurorsForCourtJump = 256; - const klerosCore = await deployUpgradable(deployments, "KlerosCore", { - from: deployer, - args: [ - deployer, - deployer, - pnk.target, - ZeroAddress, // jurorProsecutionModule is not implemented yet - disputeKit.address, - false, - [minStake, alpha, feeForJuror, jurorsForCourtJump], - [0, 0, 0, 10], // evidencePeriod, commitPeriod, votePeriod, appealPeriod - ethers.toBeHex(5), // Extra data for sortition module will return the default value of K - sortitionModule.address, - weth.target, - nft.target, - ], - log: true, - }); // nonce+2 (implementation), nonce+3 (proxy) - - // disputeKit.changeCore() only if necessary - const disputeKitContract = await hre.ethers.getContract("DisputeKitClassic"); - const currentCore = await disputeKitContract.core(); - if (currentCore !== klerosCore.address) { - console.log(`disputeKit.changeCore(${klerosCore.address})`); - await disputeKitContract.changeCore(klerosCore.address); - } - - // rngWithFallback.changeConsumer() only if necessary - const rngConsumer = await rngWithFallback.consumer(); - if (rngConsumer !== sortitionModule.address) { - console.log(`rngWithFallback.changeConsumer(${sortitionModule.address})`); - await rngWithFallback.changeConsumer(sortitionModule.address); - } - - const core = await hre.ethers.getContract("KlerosCore"); - try { - await changeCurrencyRate(core, await weth.getAddress(), true, 1, 1); - } catch (e) { - console.error("failed to change currency rates:", e); - } - - const disputeTemplateRegistry = await getContractOrDeployUpgradable(hre, "DisputeTemplateRegistry", { - from: deployer, - args: [deployer], - log: true, - }); - - const resolver = await deploy("DisputeResolver", { - from: deployer, - args: [core.target, disputeTemplateRegistry.target], - log: true, - }); - console.log(`core.changeArbitrableWhitelistEnabled(true)`); - await core.changeArbitrableWhitelistEnabled(true); - console.log(`core.changeArbitrableWhitelist(${resolver.address}, true)`); - await core.changeArbitrableWhitelist(resolver.address, true); - - // Extra dispute kits - const disputeKitShutter = await deployUpgradable(deployments, "DisputeKitShutter", { - from: deployer, - args: [deployer, core.target, weth.target, classicDisputeKitID], - log: true, - }); - await core.addNewDisputeKit(disputeKitShutter.address); - const disputeKitShutterID = (await core.getDisputeKitsLength()) - 1n; - - const disputeKitGated = await deployUpgradable(deployments, "DisputeKitGated", { - from: deployer, - args: [deployer, core.target, weth.target, classicDisputeKitID], - log: true, - }); - await core.addNewDisputeKit(disputeKitGated.address); - const disputeKitGatedID = (await core.getDisputeKitsLength()) - 1n; - - const disputeKitGatedShutter = await deployUpgradable(deployments, "DisputeKitGatedShutter", { - from: deployer, - args: [deployer, core.target, weth.target, disputeKitShutterID], // Does not jump to DKClassic - log: true, - }); - await core.addNewDisputeKit(disputeKitGatedShutter.address); - const disputeKitGatedShutterID = (await core.getDisputeKitsLength()) - 1n; - - // Snapshot proxy - await deploy("KlerosCoreSnapshotProxy", { - from: deployer, - args: [deployer, core.target], - log: true, - }); -}; - -deployArbitration.tags = ["ArbitrationMainnet"]; -deployArbitration.dependencies = ["ChainlinkRNG"]; -deployArbitration.skip = async ({ network }) => { - return isSkipped(network, !HomeChains[network.config.chainId ?? 0]); -}; - -export default deployArbitration; diff --git a/contracts/deploy/00-home-chain-arbitration-ruler.ts b/contracts/deploy/00-home-chain-arbitration-ruler.ts deleted file mode 100644 index a9077dbe6..000000000 --- a/contracts/deploy/00-home-chain-arbitration-ruler.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { deployUpgradable } from "./utils/deployUpgradable"; -import { HomeChains, isSkipped } from "./utils"; -import { deployERC20AndFaucet } from "./utils/deployTokens"; -import { KlerosCoreRuler } from "../typechain-types"; -import { getContractOrDeploy, getContractOrDeployUpgradable } from "./utils/getContractOrDeploy"; -import { changeCurrencyRate } from "./utils/klerosCoreHelper"; - -const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { deployments, getNamedAccounts, getChainId } = hre; - const { deploy } = deployments; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("deploying to %s with deployer %s", HomeChains[chainId], deployer); - - const pnk = await deployERC20AndFaucet(hre, deployer, "PNK"); - const dai = await deployERC20AndFaucet(hre, deployer, "DAI"); - const weth = await deployERC20AndFaucet(hre, deployer, "WETH"); - - await getContractOrDeploy(hre, "TransactionBatcher", { from: deployer, args: [], log: true }); - - const minStake = 0; - const alpha = 10000; - const feeForJuror = 10n ** 17n; - const jurorsForCourtJump = 16; - await deployUpgradable(deployments, "KlerosCoreRuler", { - from: deployer, - args: [ - deployer, // owner - pnk.target, - [minStake, alpha, feeForJuror, jurorsForCourtJump], - ], - log: true, - }); - const core = await hre.ethers.getContract("KlerosCoreRuler"); - - try { - await changeCurrencyRate(core, await pnk.getAddress(), true, 12225583, 12); - await changeCurrencyRate(core, await dai.getAddress(), true, 60327783, 11); - await changeCurrencyRate(core, await weth.getAddress(), true, 1, 1); - } catch (e) { - console.error("failed to change currency rates:", e); - } - - const disputeTemplateRegistry = await getContractOrDeployUpgradable(hre, "DisputeTemplateRegistry", { - from: deployer, - args: [deployer], - log: true, - }); - - await deploy("DisputeResolverRuler", { - from: deployer, - args: [core.target, disputeTemplateRegistry.target], - log: true, - }); -}; - -deployArbitration.tags = ["ArbitrationRuler"]; -deployArbitration.skip = async ({ network }) => { - return isSkipped(network, !HomeChains[network.config.chainId ?? 0]); -}; - -export default deployArbitration; diff --git a/contracts/deploy/00-home-chain-arbitration-university.ts b/contracts/deploy/00-home-chain-arbitration-university.ts deleted file mode 100644 index 2aa5f747b..000000000 --- a/contracts/deploy/00-home-chain-arbitration-university.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { getContractAddress } from "./utils/getContractAddress"; -import { deployUpgradable } from "./utils/deployUpgradable"; -import { changeCurrencyRate } from "./utils/klerosCoreHelper"; -import { ETH, HomeChains, PNK, isSkipped } from "./utils"; -import { deployERC20AndFaucet } from "./utils/deployTokens"; -import { DisputeKitClassic, KlerosCoreUniversity } from "../typechain-types"; -import { getContractOrDeploy, getContractOrDeployUpgradable } from "./utils/getContractOrDeploy"; - -const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { ethers, deployments, getNamedAccounts, getChainId } = hre; - const { deploy } = deployments; - const { ZeroAddress } = hre.ethers; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("deploying to %s with deployer %s", HomeChains[chainId], deployer); - - const pnk = await deployERC20AndFaucet(hre, deployer, "PNK"); - const dai = await deployERC20AndFaucet(hre, deployer, "DAI"); - const weth = await deployERC20AndFaucet(hre, deployer, "WETH"); - - await getContractOrDeploy(hre, "TransactionBatcher", { from: deployer, args: [], log: true }); - - const disputeKit = await deployUpgradable(deployments, "DisputeKitClassicUniversity", { - from: deployer, - contract: "DisputeKitClassic", - args: [deployer, ZeroAddress, weth.target], - log: true, - }); - - let klerosCoreAddress = await deployments.getOrNull("KlerosCoreUniversity").then((deployment) => deployment?.address); - if (!klerosCoreAddress) { - const nonce = await ethers.provider.getTransactionCount(deployer); - klerosCoreAddress = getContractAddress(deployer, nonce + 3); // deployed on the 4th tx (nonce+3): SortitionModule Impl tx, SortitionModule Proxy tx, KlerosCore Impl tx, KlerosCore Proxy tx - console.log("calculated future KlerosCoreUniversity address for nonce %d: %s", nonce + 3, klerosCoreAddress); - } - const sortitionModule = await deployUpgradable(deployments, "SortitionModuleUniversity", { - from: deployer, - args: [deployer, klerosCoreAddress], - log: true, - }); // nonce (implementation), nonce+1 (proxy) - - const minStake = PNK(200); - const alpha = 10000; - const feeForJuror = ETH(0.1); - const jurorsForCourtJump = 256; - const klerosCore = await deployUpgradable(deployments, "KlerosCoreUniversity", { - from: deployer, - args: [ - deployer, // owner - deployer, // instructor - pnk.target, - ZeroAddress, // KlerosCore is configured later - disputeKit.address, - false, - [minStake, alpha, feeForJuror, jurorsForCourtJump], - [0, 0, 0, 10], // evidencePeriod, commitPeriod, votePeriod, appealPeriod - sortitionModule.address, - ], - log: true, - }); // nonce+2 (implementation), nonce+3 (proxy) - - // disputeKit.changeCore() only if necessary - const disputeKitContract = await ethers.getContract("DisputeKitClassicUniversity"); - const currentCore = await disputeKitContract.core(); - if (currentCore !== klerosCore.address) { - console.log(`disputeKit.changeCore(${klerosCore.address})`); - await disputeKitContract.changeCore(klerosCore.address); - } - - const core = await hre.ethers.getContract("KlerosCoreUniversity"); - try { - await changeCurrencyRate(core, await pnk.getAddress(), true, 12225583, 12); - await changeCurrencyRate(core, await dai.getAddress(), true, 60327783, 11); - await changeCurrencyRate(core, await weth.getAddress(), true, 1, 1); - } catch (e) { - console.error("Failed to change currency rates for token, with error:", e); - } - - const disputeTemplateRegistry = await getContractOrDeployUpgradable(hre, "DisputeTemplateRegistry", { - from: deployer, - args: [deployer], - log: true, - }); - - await deploy("DisputeResolverUniversity", { - from: deployer, - contract: "DisputeResolver", - args: [core.target, disputeTemplateRegistry.target], - log: true, - }); -}; - -deployArbitration.tags = ["ArbitrationUniversity"]; -deployArbitration.skip = async ({ network }) => { - return isSkipped(network, !HomeChains[network.config.chainId ?? 0]); -}; - -export default deployArbitration; diff --git a/contracts/deploy/00-home-chain-arbitration.ts b/contracts/deploy/00-home-chain-arbitration.ts deleted file mode 100644 index 1c4c29695..000000000 --- a/contracts/deploy/00-home-chain-arbitration.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { getContractAddress } from "./utils/getContractAddress"; -import { deployUpgradable } from "./utils/deployUpgradable"; -import { changeCurrencyRate } from "./utils/klerosCoreHelper"; -import { HomeChains, isSkipped, isDevnet, PNK, ETH, Courts } from "./utils"; -import { getContractOrDeploy, getContractOrDeployUpgradable } from "./utils/getContractOrDeploy"; -import { deployERC20AndFaucet } from "./utils/deployTokens"; -import { DisputeKitClassic, KlerosCore, RNGWithFallback } from "../typechain-types"; - -const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { ethers, deployments, getNamedAccounts, getChainId } = hre; - const { deploy } = deployments; - const { ZeroAddress } = hre.ethers; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("deploying to %s with deployer %s", HomeChains[chainId], deployer); - - const pnk = await deployERC20AndFaucet(hre, deployer, "PNK"); - const dai = await deployERC20AndFaucet(hre, deployer, "DAI"); - const weth = await deployERC20AndFaucet(hre, deployer, "WETH"); - - await getContractOrDeploy(hre, "TransactionBatcher", { from: deployer, args: [], log: true }); - - await getContractOrDeployUpgradable(hre, "PolicyRegistry", { from: deployer, args: [deployer], log: true }); - - await getContractOrDeployUpgradable(hre, "EvidenceModule", { from: deployer, args: [deployer], log: true }); - - await deployUpgradable(deployments, "DisputeTemplateRegistry", { - from: deployer, - args: [deployer], - log: true, - }); - - const classicDisputeKitID = 1; // Classic DK - const disputeKit = await deployUpgradable(deployments, "DisputeKitClassic", { - from: deployer, - args: [deployer, ZeroAddress, weth.target, classicDisputeKitID], - log: true, - }); - - let klerosCoreAddress = await deployments.getOrNull("KlerosCore").then((deployment) => deployment?.address); - if (!klerosCoreAddress) { - const nonce = await ethers.provider.getTransactionCount(deployer); - klerosCoreAddress = getContractAddress(deployer, nonce + 3); // deployed on the 4th tx (nonce+3): SortitionModule Impl tx, SortitionModule Proxy tx, KlerosCore Impl tx, KlerosCore Proxy tx - console.log("calculated future KlerosCore address for nonce %d: %s", nonce + 3, klerosCoreAddress); - } - const devnet = isDevnet(hre.network); - const minStakingTime = devnet ? 180 : 1800; - const maxFreezingTime = devnet ? 600 : 1800; - const rngWithFallback = await ethers.getContract("RNGWithFallback"); - const sortitionModule = await deployUpgradable(deployments, "SortitionModule", { - from: deployer, - args: [ - deployer, - klerosCoreAddress, - minStakingTime, - maxFreezingTime, - rngWithFallback.target, - ethers.MaxUint256, // maxStakePerJuror - ethers.MaxUint256, // maxTotalStaked - ], - log: true, - }); // nonce (implementation), nonce+1 (proxy) - - const minStake = PNK(200); - const alpha = 10000; - const feeForJuror = ETH(0.1); - const jurorsForCourtJump = 256; - const klerosCore = await deployUpgradable(deployments, "KlerosCore", { - from: deployer, - args: [ - deployer, - deployer, - pnk.target, - ZeroAddress, // KlerosCore is configured later - disputeKit.address, - false, - [minStake, alpha, feeForJuror, jurorsForCourtJump], - [0, 0, 0, 10], // evidencePeriod, commitPeriod, votePeriod, appealPeriod - ethers.toBeHex(5), // Extra data for sortition module will return the default value of K - sortitionModule.address, - weth.target, - ZeroAddress, // jurorNft - ], - log: true, - }); // nonce+2 (implementation), nonce+3 (proxy) - - // disputeKit.changeCore() only if necessary - const disputeKitContract = await ethers.getContract("DisputeKitClassic"); - const currentCore = await disputeKitContract.core(); - if (currentCore !== klerosCore.address) { - console.log(`disputeKit.changeCore(${klerosCore.address})`); - await disputeKitContract.changeCore(klerosCore.address); - } - - // rngWithFallback.changeConsumer() only if necessary - const rngConsumer = await rngWithFallback.consumer(); - if (rngConsumer !== sortitionModule.address) { - console.log(`rngWithFallback.changeConsumer(${sortitionModule.address})`); - await rngWithFallback.changeConsumer(sortitionModule.address); - } - - const core = await hre.ethers.getContract("KlerosCore"); - try { - await changeCurrencyRate(core, await pnk.getAddress(), true, 12225583, 12); - await changeCurrencyRate(core, await dai.getAddress(), true, 60327783, 11); - await changeCurrencyRate(core, await weth.getAddress(), true, 1, 1); - } catch (e) { - console.error("failed to change currency rates:", e); - } - - // Extra dispute kits - const disputeKitShutter = await deployUpgradable(deployments, "DisputeKitShutter", { - from: deployer, - args: [deployer, core.target, weth.target, classicDisputeKitID], - log: true, - }); - await core.addNewDisputeKit(disputeKitShutter.address); - const disputeKitShutterID = (await core.getDisputeKitsLength()) - 1n; - await core.enableDisputeKits(Courts.GENERAL, [disputeKitShutterID], true); // enable disputeKitShutter on the General Court - - const disputeKitGated = await deployUpgradable(deployments, "DisputeKitGated", { - from: deployer, - args: [deployer, core.target, weth.target, classicDisputeKitID], - log: true, - }); - await core.addNewDisputeKit(disputeKitGated.address); - const disputeKitGatedID = (await core.getDisputeKitsLength()) - 1n; - await core.enableDisputeKits(Courts.GENERAL, [disputeKitGatedID], true); // enable disputeKitGated on the General Court - - const disputeKitGatedShutter = await deployUpgradable(deployments, "DisputeKitGatedShutter", { - from: deployer, - args: [deployer, core.target, weth.target, disputeKitShutterID], // Does not jump to DKClassic - log: true, - }); - await core.addNewDisputeKit(disputeKitGatedShutter.address); - const disputeKitGatedShutterID = (await core.getDisputeKitsLength()) - 1n; - await core.enableDisputeKits(Courts.GENERAL, [disputeKitGatedShutterID], true); // enable disputeKitGatedShutter on the General Court - - // Snapshot proxy - await deploy("KlerosCoreSnapshotProxy", { - from: deployer, - args: [deployer, core.target], - log: true, - }); -}; - -deployArbitration.tags = ["Arbitration"]; -deployArbitration.dependencies = ["ChainlinkRNG"]; -deployArbitration.skip = async ({ network }) => { - return isSkipped(network, !HomeChains[network.config.chainId ?? 0]); -}; - -export default deployArbitration; diff --git a/contracts/deploy/00-home-chain-resolver.ts b/contracts/deploy/00-home-chain-resolver.ts deleted file mode 100644 index 64d3431f6..000000000 --- a/contracts/deploy/00-home-chain-resolver.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { HomeChains, isSkipped } from "./utils"; -import { getContractOrDeploy } from "./utils/getContractOrDeploy"; - -const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { deployments, getNamedAccounts, getChainId } = hre; - const { deploy } = deployments; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("deploying to %s with deployer %s", HomeChains[chainId], deployer); - - const klerosCore = await deployments.get("KlerosCore"); - const disputeTemplateRegistry = await deployments.get("DisputeTemplateRegistry"); - - await getContractOrDeploy(hre, "DisputeResolver", { - from: deployer, - args: [klerosCore.address, disputeTemplateRegistry.address], - log: true, - }); -}; - -deployArbitration.tags = ["Resolver"]; -deployArbitration.dependencies = ["Arbitration"]; -deployArbitration.skip = async ({ network }) => { - return isSkipped(network, !HomeChains[network.config.chainId ?? 0]); -}; - -export default deployArbitration; diff --git a/contracts/deploy/00-rng-chainlink.ts b/contracts/deploy/00-rng-chainlink.ts deleted file mode 100644 index 78a1c5e87..000000000 --- a/contracts/deploy/00-rng-chainlink.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { HomeChains, isSkipped } from "./utils"; -import { getContractOrDeploy } from "./utils/getContractOrDeploy"; -import { RNGWithFallback } from "../typechain-types"; - -const deployRng: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { getNamedAccounts, getChainId, ethers } = hre; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()) as unknown as HomeChains; // Checked at runtime by skip() - console.log("deploying to %s with deployer %s", HomeChains[chainId], deployer); - - const KEY_HASHES = { - // https://docs.chain.link/vrf/v2-5/supported-networks#arbitrum-mainnet - [HomeChains.ARBITRUM_ONE]: { - 2: "0x9e9e46732b32662b9adc6f3abdf6c5e926a666d174a4d6b8e39c4cca76a38897", - 30: "0x8472ba59cf7134dfe321f4d61a430c4857e8b19cdd5230b09952a92671c24409", - 150: "0xe9f223d7d83ec85c4f78042a4845af3a1c8df7757b4997b815ce4b8d07aca68c", - }, - // https://docs.chain.link/vrf/v2-5/supported-networks#arbitrum-sepolia-testnet - [HomeChains.ARBITRUM_SEPOLIA]: { - 150: "0x1770bdc7eec7771f7ba4ffd640f34260d7f095b79c92d34a5b2551d6f6cfd2be", - }, - [HomeChains.HARDHAT]: { - 0: "0x0000000000000000000000000000000000000000000000000000000000000000", - }, - }; - - const SUBSCRIPTION_ID = { - [HomeChains.ARBITRUM_ONE]: "66240499937595191069677958665918759554657443303079118766000192000140992834352", - [HomeChains.ARBITRUM_SEPOLIA]: "38502597312983100069991953687934627561654236680431968938019951490339399569548", - [HomeChains.HARDHAT]: "0x0000000000000000000000000000000000000000000000000000000000000001", - }; - - function getKeyHash({ gasPrice }: { gasPrice: keyof (typeof KEY_HASHES)[HomeChains.ARBITRUM_ONE] }): string { - const validGasPrices = Object.keys(KEY_HASHES[HomeChains.ARBITRUM_ONE]).map(Number); - if (!validGasPrices.includes(gasPrice)) { - throw new Error(`Invalid gas price ${gasPrice}. Valid values are: ${validGasPrices.join(", ")}`); - } - if (chainId == HomeChains.HARDHAT) return KEY_HASHES[chainId][0]; - if (chainId == HomeChains.ARBITRUM_ONE) return KEY_HASHES[chainId][gasPrice]; - if (chainId == HomeChains.ARBITRUM_SEPOLIA) return KEY_HASHES[chainId][150]; - throw new Error(`Unknown chainId ${chainId}`); - } - - const ChainlinkVRFCoordinator = await getContractOrDeploy(hre, "ChainlinkVRFCoordinator", { - from: deployer, - contract: "ChainlinkVRFCoordinatorV2Mock", - args: [], - log: true, - }); - - const keyHash = getKeyHash({ gasPrice: 30 }); - const subscriptionId = SUBSCRIPTION_ID[chainId]; - const requestConfirmations = 200; // between 1 and 200 L2 blocks - const callbackGasLimit = 100000; - - const oldRng = await ethers.getContractOrNull("ChainlinkRNG"); - if (!oldRng) { - console.log("Register this Chainlink consumer here: http://vrf.chain.link/"); - } - - const rng = await getContractOrDeploy(hre, "ChainlinkRNG", { - from: deployer, - args: [ - deployer, - deployer, // The consumer is configured as the RNGWithFallback later - ChainlinkVRFCoordinator.target, - keyHash, - subscriptionId, - requestConfirmations, - callbackGasLimit, - ], - log: true, - }); - - const fallbackTimeoutSeconds = 30 * 60; // 30 minutes - await getContractOrDeploy(hre, "RNGWithFallback", { - from: deployer, - args: [ - deployer, - deployer, // The consumer is configured as the SortitionModule later - fallbackTimeoutSeconds, - rng.target, - ], - log: true, - }); - - // rng.changeConsumer() only if necessary - const rngWithFallback = await ethers.getContract("RNGWithFallback"); - const rngConsumer = await rng.consumer(); - if (rngConsumer !== rngWithFallback.target) { - console.log(`rng.changeConsumer(${rngWithFallback.target})`); - await rng.changeConsumer(rngWithFallback.target); - } -}; - -deployRng.tags = ["ChainlinkRNG"]; -deployRng.skip = async ({ network }) => { - return isSkipped(network, !HomeChains[network.config.chainId ?? 0]); -}; - -export default deployRng; diff --git a/contracts/deploy/00-rng-randomizer.ts b/contracts/deploy/00-rng-randomizer.ts deleted file mode 100644 index 8413b39f6..000000000 --- a/contracts/deploy/00-rng-randomizer.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { HomeChains, isSkipped } from "./utils"; -import { getContractOrDeploy } from "./utils/getContractOrDeploy"; -import { RNGWithFallback } from "../typechain-types"; - -const deployRng: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { getNamedAccounts, getChainId, ethers } = hre; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()) as unknown as HomeChains; // Checked at runtime by skip() - console.log("deploying to %s with deployer %s", HomeChains[chainId], deployer); - - // Randomizer.ai: https://randomizer.ai/docs#addresses - const randomizerOracle = await getContractOrDeploy(hre, "RandomizerOracle", { - from: deployer, - contract: "RandomizerMock", // The mock is deployed only on the Hardhat network - args: [], - log: true, - }); - - const rng = await getContractOrDeploy(hre, "RandomizerRNG", { - from: deployer, - args: [ - deployer, - deployer, // The consumer is configured as the RNGWithFallback later - randomizerOracle.target, - ], - log: true, - }); - - const fallbackTimeoutSeconds = 30 * 60; // 30 minutes - await getContractOrDeploy(hre, "RNGWithFallback", { - from: deployer, - args: [ - deployer, - deployer, // The consumer is configured as the SortitionModule later - fallbackTimeoutSeconds, - rng.target, - ], - log: true, - }); - - // rng.changeConsumer() only if necessary - const rngWithFallback = await ethers.getContract("RNGWithFallback"); - const rngConsumer = await rng.consumer(); - if (rngConsumer !== rngWithFallback.target) { - console.log(`rng.changeConsumer(${rngWithFallback.target})`); - await rng.changeConsumer(rngWithFallback.target); - } -}; - -deployRng.tags = ["RandomizerRNG"]; -deployRng.skip = async ({ network }) => { - return isSkipped(network, !HomeChains[network.config.chainId ?? 0]); -}; - -export default deployRng; diff --git a/contracts/deploy/01-foreign-gateway-on-ethereum.ts b/contracts/deploy/01-foreign-gateway-on-ethereum.ts deleted file mode 100644 index 4c85a3fdb..000000000 --- a/contracts/deploy/01-foreign-gateway-on-ethereum.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { HardhatRuntimeEnvironment, HttpNetworkConfig } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { getContractAddress } from "./utils/getContractAddress"; -import { KlerosCore__factory } from "../typechain-types"; -import { Courts, ForeignChains, isSkipped } from "./utils"; -import { deployUpgradable } from "./utils/deployUpgradable"; - -const deployForeignGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { ethers, deployments, getNamedAccounts, getChainId, config } = hre; - const { execute } = deployments; - const { zeroPadValue, toBeHex } = ethers; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("deploying to chainId %s with deployer %s", chainId, deployer); - - // Hack to predict the deployment address on the home chain. - // TODO: use deterministic deployments - const network = config.networks[hre.network.name]; - const homeNetwork = config.networks[network.companionNetworks.home] as HttpNetworkConfig; - const homeChainProvider = new ethers.JsonRpcProvider(homeNetwork.url); - let nonce = await homeChainProvider.getTransactionCount(deployer); - nonce += 1; // HomeGatewayToEthereum Proxy deploy tx will be the 2nd tx after this on its home network, so we add 1 to the current nonce. - const homeGatewayAddress = getContractAddress(deployer, nonce); - console.log("calculated future HomeGatewayToEthereum address for nonce %d: %s", nonce, homeGatewayAddress); - - const veaOutbox = await deployments.get("VeaOutboxArbToEthDevnet"); - console.log("using VeaOutboxArbToEthDevnet at %s", veaOutbox.address); - - const homeChainId = (await homeChainProvider.getNetwork()).chainId; - const homeChainIdAsBytes32 = zeroPadValue(toBeHex(homeChainId), 32); - await deployUpgradable(deployments, "ForeignGatewayOnEthereum", { - from: deployer, - contract: "ForeignGateway", - args: [deployer, veaOutbox.address, homeChainIdAsBytes32, homeGatewayAddress], - gasLimit: 4000000, - log: true, - }); - - // TODO: disable the gateway until fully initialized with the correct fees OR allow disputeCreators to add funds again if necessary. - const coreDeployment = await hre.companionNetworks.home.deployments.get("KlerosCore"); - const core = await KlerosCore__factory.connect(coreDeployment.address, homeChainProvider); - // TODO: set up the correct fees for the FORKING_COURT - const fee = (await core.courts(Courts.GENERAL)).feeForJuror; - await execute("ForeignGatewayOnEthereum", { from: deployer, log: true }, "changeCourtJurorFee", Courts.GENERAL, fee); - // TODO: set up the correct fees for the lower courts -}; - -deployForeignGateway.tags = ["ForeignGatewayOnEthereum"]; -deployForeignGateway.skip = async ({ network }) => { - return isSkipped(network, !ForeignChains[network.config.chainId ?? 0]); -}; - -export default deployForeignGateway; diff --git a/contracts/deploy/01-foreign-gateway-on-gnosis.ts b/contracts/deploy/01-foreign-gateway-on-gnosis.ts deleted file mode 100644 index e0ab6861f..000000000 --- a/contracts/deploy/01-foreign-gateway-on-gnosis.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { parseUnits } from "ethers"; -import { BigNumber } from "@ethersproject/bignumber"; -import { HardhatRuntimeEnvironment, HttpNetworkConfig } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { getContractAddress } from "./utils/getContractAddress"; -import { KlerosCore__factory } from "../typechain-types"; -import { Courts, ForeignChains, isSkipped } from "./utils"; -import { deployUpgradable } from "./utils/deployUpgradable"; - -const ONE_GWEI = BigNumber.from(parseUnits("1", "gwei")); - -const deployForeignGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { ethers, deployments, getNamedAccounts, getChainId, config } = hre; - const { deploy, execute } = deployments; - const { zeroPadValue, toBeHex } = ethers; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("deploying to chainId %s with deployer %s", chainId, deployer); - - // Hack to predict the deployment address on the home chain. - // TODO: use deterministic deployments - const network = config.networks[hre.network.name]; - const homeNetwork = config.networks[network.companionNetworks.home] as HttpNetworkConfig; - const homeChainProvider = new ethers.JsonRpcProvider(homeNetwork.url); - let nonce = await homeChainProvider.getTransactionCount(deployer); - nonce += 1; // HomeGatewayToEthereum Proxy deploy tx will be the 2nd tx after this on its home network, so we add 1 to the current nonce. - const homeGatewayAddress = getContractAddress(deployer, nonce); // HomeGateway deploy tx will be the next tx home network - console.log("calculated future HomeGatewayToEthereum address for nonce %d: %s", nonce, homeGatewayAddress); - - const veaOutbox = await deployments.get("VeaOutboxArbToGnosisDevnet"); - console.log("using VeaOutboxArbToGnosisDevnet at %s", veaOutbox.address); - - const homeChainId = (await homeChainProvider.getNetwork()).chainId; - const homeChainIdAsBytes32 = zeroPadValue(toBeHex(homeChainId), 32); - await deployUpgradable(deployments, "ForeignGatewayOnGnosis", { - from: deployer, - contract: "ForeignGateway", - args: [deployer, veaOutbox.address, homeChainIdAsBytes32, homeGatewayAddress], - maxFeePerGas: ONE_GWEI, - maxPriorityFeePerGas: ONE_GWEI, - log: true, - }); - - // TODO: disable the gateway until fully initialized with the correct fees OR allow disputeCreators to add funds again if necessary. - const coreDeployment = await hre.companionNetworks.home.deployments.get("KlerosCore"); - const core = await KlerosCore__factory.connect(coreDeployment.address, homeChainProvider); - // TODO: set up the correct fees for the FORKING_COURT - const fee = (await core.courts(Courts.GENERAL)).feeForJuror; - await execute("ForeignGatewayOnGnosis", { from: deployer, log: true }, "changeCourtJurorFee", Courts.GENERAL, fee); - // TODO: set up the correct fees for the lower courts -}; - -deployForeignGateway.tags = ["ForeignGatewayOnGnosis"]; -deployForeignGateway.skip = async ({ network }) => { - return isSkipped(network, !ForeignChains[network.config.chainId ?? 0]); -}; - -export default deployForeignGateway; diff --git a/contracts/deploy/02-home-gateway-to-ethereum.ts b/contracts/deploy/02-home-gateway-to-ethereum.ts deleted file mode 100644 index 84cf1550c..000000000 --- a/contracts/deploy/02-home-gateway-to-ethereum.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { ethers } from "hardhat"; -import { HardhatChain, HomeChains, isSkipped } from "./utils"; -import { deployUpgradable } from "./utils/deployUpgradable"; - -// TODO: use deterministic deployments - -const deployHomeGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { deployments, getNamedAccounts, getChainId } = hre; - const { deploy } = deployments; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("deploying to chainId %s with deployer %s", chainId, deployer); - - const veaInbox = await deployments.get("VeaInboxArbToEthDevnet"); - const klerosCore = await deployments.get("KlerosCore"); - - const foreignGateway = await hre.companionNetworks.foreignSepolia.deployments.get("ForeignGatewayOnEthereum"); - const foreignChainId = Number(await hre.companionNetworks.foreignSepolia.getChainId()); - const foreignChainName = await hre.companionNetworks.foreignSepolia.deployments.getNetworkName(); - console.log("using ForeignGateway %s on chainId %s (%s)", foreignGateway.address, foreignChainId, foreignChainName); - - await deployUpgradable(deployments, "HomeGatewayToEthereum", { - from: deployer, - contract: "HomeGateway", - args: [ - deployer, - klerosCore.address, - veaInbox.address, - foreignChainId, - foreignGateway.address, - ethers.ZeroAddress, // feeToken is ETH - ], - log: true, - }); // nonce+0 -}; - -deployHomeGateway.tags = ["HomeGatewayToEthereum"]; -deployHomeGateway.skip = async ({ network }) => { - const chainId = network.config.chainId ?? 0; - return isSkipped(network, !HomeChains[chainId] || HardhatChain[chainId] !== undefined); -}; - -export default deployHomeGateway; diff --git a/contracts/deploy/02-home-gateway-to-gnosis.ts b/contracts/deploy/02-home-gateway-to-gnosis.ts deleted file mode 100644 index c86ec8442..000000000 --- a/contracts/deploy/02-home-gateway-to-gnosis.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { HardhatChain, HomeChains, isSkipped } from "./utils"; -import { deployUpgradable } from "./utils/deployUpgradable"; - -// TODO: use deterministic deployments - -const deployHomeGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { deployments, getNamedAccounts, getChainId } = hre; - const { deploy } = deployments; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("deploying to chainId %s with deployer %s", chainId, deployer); - - const veaInbox = await deployments.get("VeaInboxArbToGnosisDevnet"); - const klerosCore = await deployments.get("KlerosCore"); - const dai = await deployments.get("DAI"); - - const foreignGateway = await hre.companionNetworks.foreignChiado.deployments.get("ForeignGatewayOnGnosis"); - const foreignChainId = Number(await hre.companionNetworks.foreignChiado.getChainId()); - const foreignChainName = await hre.companionNetworks.foreignChiado.deployments.getNetworkName(); - console.log("using ForeignGateway %s on chainId %s (%s)", foreignGateway.address, foreignChainId, foreignChainName); - - await deployUpgradable(deployments, "HomeGatewayToGnosis", { - from: deployer, - contract: "HomeGateway", - args: [deployer, klerosCore.address, veaInbox.address, foreignChainId, foreignGateway.address, dai.address], - log: true, - }); // nonce+0 -}; - -deployHomeGateway.tags = ["HomeGatewayToGnosis"]; -deployHomeGateway.skip = async ({ network }) => { - const chainId = network.config.chainId ?? 0; - return isSkipped(network, !HomeChains[chainId] || HardhatChain[chainId] !== undefined); -}; - -export default deployHomeGateway; diff --git a/contracts/deploy/03-vea-mock.ts b/contracts/deploy/03-vea-mock.ts deleted file mode 100644 index 2a59bbaa6..000000000 --- a/contracts/deploy/03-vea-mock.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { getContractAddress } from "./utils/getContractAddress"; -import { KlerosCore__factory } from "../typechain-types"; -import disputeTemplate from "../test/fixtures/DisputeTemplate.simple.json"; -import { Courts, HardhatChain, isSkipped } from "./utils"; -import { deployUpgradable } from "./utils/deployUpgradable"; - -// TODO: use deterministic deployments - -const deployHomeGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { ethers, deployments, getNamedAccounts } = hre; - const { deploy, execute } = deployments; - const { zeroPadValue, toBeHex } = ethers; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - console.log("deploying to chainId %s with deployer %s", HardhatChain.HARDHAT, deployer); - - const klerosCore = await deployments.get("KlerosCore"); - - const vea = await deploy("VeaMock", { - from: deployer, - log: true, - }); - - let nonce = await ethers.provider.getTransactionCount(deployer); - nonce += 3; // deployed on the 4th tx (nonce+3): SortitionModule Impl tx, SortitionModule Proxy tx, KlerosCore Impl tx, KlerosCore Proxy tx - const homeGatewayAddress = getContractAddress(deployer, nonce); - console.log("calculated future HomeGatewayToEthereum address for nonce %d: %s", nonce, homeGatewayAddress); - - const homeChainIdAsBytes32 = zeroPadValue(toBeHex(HardhatChain.HARDHAT), 32); - const foreignGateway = await deployUpgradable(deployments, "ForeignGatewayOnEthereum", { - from: deployer, - contract: "ForeignGateway", - args: [deployer, vea.address, homeChainIdAsBytes32, homeGatewayAddress], - gasLimit: 4000000, - log: true, - }); // nonce (implementation), nonce+1 (proxy) - console.log("foreignGateway.address: ", foreignGateway.address); - - await deployUpgradable(deployments, "HomeGatewayToEthereum", { - from: deployer, - contract: "HomeGateway", - args: [ - deployer, - klerosCore.address, - vea.address, - HardhatChain.HARDHAT, - foreignGateway.address, - ethers.ZeroAddress, // feeToken - // Confirm that using ZeroAddress here is intentional and safe for the intended use case. - ], - gasLimit: 4000000, - log: true, - }); // nonce+2 (implementation), nonce+3 (proxy) - - // TODO: disable the gateway until fully initialized with the correct fees OR allow disputeCreators to add funds again if necessary. - const signer = (await hre.ethers.getSigners())[0]; - const core = KlerosCore__factory.connect(klerosCore.address, signer); - // TODO: set up the correct fees for the FORKING_COURT - const fee = (await core.courts(Courts.GENERAL)).feeForJuror; - await execute( - "ForeignGatewayOnEthereum", - { from: deployer, gasLimit: 4000000, log: true }, - "changeCourtJurorFee", - Courts.GENERAL, - fee - ); - // TODO: set up the correct fees for the lower courts - - const disputeTemplateRegistry = await deployUpgradable(deployments, "DisputeTemplateRegistry", { - from: deployer, - args: [deployer], - log: true, - }); - - // TODO: debug why this extraData fails but "0x00" works - // const extraData = - // "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"; // General court, 3 jurors - const extraData = "0x00"; - await deploy("ArbitrableExample", { - from: deployer, - args: [ - foreignGateway.address, - disputeTemplate, - "disputeTemplateMapping: TODO", - extraData, - disputeTemplateRegistry.address, - ethers.ZeroAddress, - ], - log: true, - }); -}; - -deployHomeGateway.tags = ["VeaMock"]; -deployHomeGateway.skip = async ({ network }) => { - return isSkipped(network, HardhatChain[network.config.chainId ?? 0] === undefined); -}; - -export default deployHomeGateway; diff --git a/contracts/deploy/04-foreign-arbitrable.ts b/contracts/deploy/04-foreign-arbitrable.ts deleted file mode 100644 index 1a773a854..000000000 --- a/contracts/deploy/04-foreign-arbitrable.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { parseUnits } from "ethers"; -import disputeTemplate from "../test/fixtures/DisputeTemplate.simple.json"; -import { ForeignChains, isSkipped } from "./utils"; -import { BigNumber } from "@ethersproject/bignumber"; - -const foreignGatewayArtifactByChain = new Map([ - [ForeignChains.ETHEREUM_MAINNET, "ForeignGatewayOnEthereum"], - [ForeignChains.ETHEREUM_SEPOLIA, "ForeignGatewayOnEthereum"], - [ForeignChains.GNOSIS_MAINNET, "ForeignGatewayOnGnosis"], - [ForeignChains.GNOSIS_CHIADO, "ForeignGatewayOnGnosis"], -]); - -const ONE_GWEI = BigNumber.from(parseUnits("1", "gwei")); - -const deployForeignGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { ethers, deployments, getNamedAccounts, getChainId, config } = hre; - const { deploy, execute } = deployments; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("deploying to chainId %s with deployer %s", chainId, deployer); - - const foreignGatewayArtifact = foreignGatewayArtifactByChain.get(chainId) ?? ethers.ZeroAddress; - const foreignGateway = await deployments.get(foreignGatewayArtifact); - console.log("using foreign gateway: %s", foreignGatewayArtifact); - - const extraData = - "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"; // General court, 3 jurors - const weth = await deployments.get("WETH"); - - const disputeTemplateRegistry = await deploy("DisputeTemplateRegistry", { - from: deployer, - args: [], - log: true, - }); - - await deploy("ArbitrableExample", { - from: deployer, - args: [ - foreignGateway.address, - disputeTemplate, - "disputeTemplateMapping: TODO", - extraData, - disputeTemplateRegistry.address, - weth.address, - ], - log: true, - }); - - await deploy("DisputeResolver", { - from: deployer, - args: [foreignGateway.address, disputeTemplateRegistry.address], - log: true, - maxFeePerGas: ONE_GWEI, - maxPriorityFeePerGas: ONE_GWEI, - }); -}; - -deployForeignGateway.tags = ["ForeignArbitrable"]; -deployForeignGateway.skip = async ({ network }) => { - return isSkipped(network, !ForeignChains[network.config.chainId ?? 0]); -}; - -export default deployForeignGateway; diff --git a/contracts/deploy/04-klerosliquid-to-v2-gnosis.ts b/contracts/deploy/04-klerosliquid-to-v2-gnosis.ts deleted file mode 100644 index 7fd87c946..000000000 --- a/contracts/deploy/04-klerosliquid-to-v2-gnosis.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { parseUnits, parseEther } from "ethers"; -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import disputeTemplate from "../test/fixtures/DisputeTemplate.simple.json"; -import { ForeignChains, isSkipped } from "./utils"; -import { BigNumber } from "@ethersproject/bignumber"; - -const wrappedPNKByChain = new Map([ - [ForeignChains.GNOSIS_MAINNET, "0xcb3231aBA3b451343e0Fddfc45883c842f223846"], -]); - -const ONE_GWEI = BigNumber.from(parseUnits("1", "gwei")); - -const deployKlerosLiquid: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { ethers, deployments, getNamedAccounts, getChainId } = hre; - const { deploy, execute } = deployments; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("deploying to chainId %s with deployer %s", chainId, deployer); - - if (!wrappedPNKByChain.get(chainId)) { - const wPnk = await deploy("WrappedPinakionV2", { - from: deployer, - log: true, - maxFeePerGas: ONE_GWEI, - maxPriorityFeePerGas: ONE_GWEI, - }); - - wrappedPNKByChain.set(ForeignChains[ForeignChains[chainId]], wPnk.address); - - await deploy("WPNKFaucet", { - from: deployer, - contract: "Faucet", - args: [wPnk.address], - log: true, - maxFeePerGas: ONE_GWEI, - maxPriorityFeePerGas: ONE_GWEI, - }); - } - - const wPnkAddress = wrappedPNKByChain.get(ForeignChains[ForeignChains[chainId]]); - const rng = ethers.ZeroAddress; - const minStakingTime = 99999999; - const maxFreezingTime = 0; - const minStake = parseEther("9999999"); - const alpha = 10000; - const feeForJuror = 0; - const jurorsForCourtJump = 9999999; - const sortitionSumTreeK = 3; - const foreignGateway = await deployments.get("ForeignGatewayOnGnosis"); - const extraData = - "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"; // General court, 3 jurors - const weth = await deployments.get("WETH"); - - console.log("using: \nwPNK at %s, \nForeignGateway at %s", wPnkAddress, foreignGateway.address, weth.address); - - const sortitionSumTreeLibrary = await deploy("SortitionSumTreeFactory", { - from: deployer, - log: true, - maxFeePerGas: ONE_GWEI, - maxPriorityFeePerGas: ONE_GWEI, - }); - - const xKlerosLiquidV2 = await deploy("xKlerosLiquidV2", { - from: deployer, - log: true, - libraries: { - SortitionSumTreeFactory: sortitionSumTreeLibrary.address, - }, - maxFeePerGas: ONE_GWEI, - maxPriorityFeePerGas: ONE_GWEI, - }); - - await execute( - "xKlerosLiquidV2", - { - from: deployer, - log: true, - maxFeePerGas: ONE_GWEI, - maxPriorityFeePerGas: ONE_GWEI, - }, - "initialize", - deployer, - wPnkAddress, - rng, - minStakingTime, - maxFreezingTime, - false, - [minStake, alpha, feeForJuror, jurorsForCourtJump], // minStake, alpha, feeForJuror, jurorsForCourtJump - [0, 0, 0, 0], // evidencePeriod, commitPeriod, votePeriod, appealPeriod - sortitionSumTreeK, - foreignGateway.address - ); - - // const xKlerosLiquidV2 = await deployments.get("xKlerosLiquidV2"); - const disputeTemplateRegistry = await deployments.get("DisputeTemplateRegistry"); - await deploy("ArbitrableExample", { - from: deployer, - args: [ - xKlerosLiquidV2.address, - 0, - disputeTemplate, - "disputeTemplateMapping: TODO", - extraData, - disputeTemplateRegistry.address, - weth.address, - ], - log: true, - maxFeePerGas: ONE_GWEI, - maxPriorityFeePerGas: ONE_GWEI, - }); -}; - -// TODO: mock deployment on the hardhat network -// const xPinakionByChain = new Map([ -// [ForeignChains.GNOSIS_MAINNET, "0x37b60f4E9A31A64cCc0024dce7D0fD07eAA0F7B3"], -// [ForeignChains.GNOSIS_CHIADO, "0x00"], -// ]); -// const tokenBridgeByChain = new Map([ -// [ForeignChains.GNOSIS_MAINNET, "0xf6A78083ca3e2a662D6dd1703c939c8aCE2e268d"], -// [ForeignChains.GNOSIS_CHIADO, "0xbb3c86f9918C3C1d83668fA84e79E876d147fFf2"], -// ]); -// const hardhatDeployer = () => { -// // TODO: deploy mocks for xPinakion and tokenBridge for Hardhat network -// // const xPnk = await deployments.get("WPNK"); -// const xPnk = xPinakionByChain[chainId]; -// const tokenBridge = tokenBridgeByChain[chainId]; -// const wPnk = await deploy("WrappedPinakionV2", { -// from: deployer, -// log: true, -// }); - -// await execute( -// "WrappedPinakionV2", -// { from: deployer, log: true }, -// "initialize", -// "Staking PNK on xDai", -// "stPNK", -// xPnk, -// tokenBridge -// ); -// }; - -deployKlerosLiquid.tags = ["KlerosLiquidOnGnosis"]; -deployKlerosLiquid.skip = async ({ network }) => { - return isSkipped(network, !ForeignChains[network.config.chainId ?? 0]); -}; - -export default deployKlerosLiquid; diff --git a/contracts/deploy/change-arbitrable-dispute-template.ts b/contracts/deploy/change-arbitrable-dispute-template.ts deleted file mode 100644 index 8b41ce2d2..000000000 --- a/contracts/deploy/change-arbitrable-dispute-template.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { ArbitrableExample } from "../typechain-types"; -import { EventLog } from "ethers"; - -const deployResolver: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { ethers } = hre; - - const template = `{ - "$schema": "../NewDisputeTemplate.schema.json", - "title": "Proof of Humanity Registration Request", - "description": "A request to register the specified entry to a list of provable humans.", - "question": "Should the request to register be accepted?", - "answers": [ - { - "title": "Yes", - "description": "Accept the request to register the entry." - }, - { - "title": "No", - "description": "Deny the request." - } - ], - "policyURI": "/ipfs/QmXDiiBAizCPoLqHvcfTzuMT7uvFEe1j3s4TgoWWd4k5np/proof-of-humanity-registry-policy-v1.3.pdf", - "frontendUrl": "https://app.proofofhumanity.id/profile/%s", - "arbitrableChainID": "1", - "arbitrableAddress": "0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb", - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", - "category": "Curated Lists", - "specification": "KIP88" - }`; - - const arbitrable = await ethers.getContract("ArbitrableExample"); - let tx = await (await arbitrable.changeDisputeTemplate(template, "disputeTemplateMapping: TODO")).wait(); - tx?.logs?.forEach((event) => { - if (event instanceof EventLog) console.log("event: %O", event.args); - }); -}; - -deployResolver.tags = ["ArbitrableDisputeTemplate"]; - -export default deployResolver; diff --git a/contracts/deploy/change-sortition-module-rng.ts b/contracts/deploy/change-sortition-module-rng.ts deleted file mode 100644 index 986e408ec..000000000 --- a/contracts/deploy/change-sortition-module-rng.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { HomeChains, isSkipped } from "./utils"; -import { ethers } from "hardhat"; -import { ChainlinkRNG, SortitionModule } from "../typechain-types"; - -const task: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { getNamedAccounts, getChainId } = hre; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()) as unknown as HomeChains; // Checked at runtime by skip() - console.log("deploying to %s with deployer %s", HomeChains[chainId], deployer); - - const chainlinkRng = await ethers.getContract("ChainlinkRNG"); - const sortitionModule = await ethers.getContract("SortitionModule"); - - console.log(`chainlinkRng.changeConsumer(${sortitionModule.target})`); - await chainlinkRng.changeConsumer(sortitionModule.target); - - console.log(`sortitionModule.changeRandomNumberGenerator(${chainlinkRng.target})`); - await sortitionModule.changeRandomNumberGenerator(chainlinkRng.target); -}; - -task.tags = ["ChangeSortitionModuleRNG"]; -task.skip = async ({ network }) => { - return isSkipped(network, !HomeChains[network.config.chainId ?? 0]); -}; - -export default task; diff --git a/contracts/deploy/fix1148.ts b/contracts/deploy/fix1148.ts deleted file mode 100644 index fc3cde36e..000000000 --- a/contracts/deploy/fix1148.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { DisputeKitClassic, KlerosCore, SortitionModule } from "../typechain-types"; -import assert from "node:assert"; -import { HomeChains, isSkipped } from "./utils"; - -const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { ethers, deployments, getNamedAccounts, getChainId } = hre; - const { deploy, execute } = deployments; - const { ZeroAddress } = ethers; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("deploying to %s with deployer %s", HomeChains[chainId], deployer); - - const klerosCore = (await ethers.getContract("KlerosCore")) as KlerosCore; - const oldDisputeKit = (await ethers.getContract("DisputeKitClassic")) as DisputeKitClassic; - const oldDisputeKitAddress = await oldDisputeKit.getAddress(); - - await deploy("DisputeKitClassic", { - from: deployer, - args: [deployer, ZeroAddress], - log: true, - }); - - const newDisputeKit = (await ethers.getContract("DisputeKitClassic")) as DisputeKitClassic; - const newDisputeKitAddress = await newDisputeKit.getAddress(); - await execute("DisputeKitClassic", { from: deployer, log: true }, "changeCore", await klerosCore.getAddress()); - await execute("KlerosCore", { from: deployer, log: true }, "addNewDisputeKit", await newDisputeKit.getAddress(), 0); - - const oldDisputeKitId = 1; - const newDisputeKitId = 2; - - assert( - await klerosCore.disputeKits(oldDisputeKitId).then((dk) => dk === oldDisputeKitAddress), - `wrong dispute kit id ${oldDisputeKitId}` - ); - assert( - await klerosCore.disputeKits(newDisputeKitId).then((dk) => dk === newDisputeKitAddress), - `wrong dispute kit id ${newDisputeKitId}` - ); - - await execute("KlerosCore", { from: deployer, log: true }, "enableDisputeKits", 1, [newDisputeKitId], true); // enable the new dispute kit in court 1 - await execute("KlerosCore", { from: deployer, log: true }, "enableDisputeKits", 2, [newDisputeKitId], true); // enable the new dispute kit in court 2 - await execute("KlerosCore", { from: deployer, log: true }, "enableDisputeKits", 3, [newDisputeKitId], true); // enable the new dispute kit in court 3 - - // Cannot disable the old DK because of https://github.com/kleros/kleros-v2/blob/d9adb8f54e8164eb01880296b4dd62b74cad3a0e/contracts/src/arbitration/KlerosCore.sol#L452 - // Does not seem correct - // await execute("KlerosCore", { from: deployer, log: true }, "enableDisputeKits", 1, [oldDisputeKitId], false); // disable the old dispute kit -}; - -deployArbitration.tags = ["Fix1148"]; -deployArbitration.skip = async ({ network }) => { - return isSkipped(network, !HomeChains[network.config.chainId ?? 0]); -}; - -export default deployArbitration; diff --git a/contracts/deploy/upgrade-all.ts b/contracts/deploy/upgrade-all.ts deleted file mode 100644 index 572ed7187..000000000 --- a/contracts/deploy/upgrade-all.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { DeployFunction } from "hardhat-deploy/types"; -import { prompt, print } from "gluegun"; -import { deployUpgradable } from "./utils/deployUpgradable"; -import { HomeChains, isSkipped } from "./utils"; -import { getContractNamesFromNetwork } from "../scripts/utils/contracts"; - -const { bold } = print.colors; - -const deployUpgradeAll: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { deployments, getNamedAccounts, getChainId } = hre; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; - const chainId = Number(await getChainId()); - console.log("upgrading on %s with deployer %s", HomeChains[chainId], deployer); - - const { - disputeKitClassic, - disputeKitShutter, - disputeKitGated, - disputeKitGatedShutter, - disputeTemplateRegistry, - evidence, - core, - policyRegistry, - sortition, - } = await getContractNamesFromNetwork(hre); - - console.log("disputeKitClassic", disputeKitClassic); - console.log("disputeKitShutter", disputeKitShutter); - console.log("disputeKitGated", disputeKitGated); - console.log("disputeKitGatedShutter", disputeKitGatedShutter); - - const upgrade = async (contractName: string, initializer: string, args: any[]) => { - try { - print.highlight(`🔍 Validating upgrade of ${bold(contractName)}`); - - let compareStorageOptions = { contract: contractName } as any; - await hre.run("compare-storage", compareStorageOptions); - print.newline(); - print.highlight(`💣 Upgrading ${bold(contractName)}`); - const { confirm } = await prompt.ask({ - type: "confirm", - name: "confirm", - message: "Are you sure you want to proceed?", - }); - if (!confirm) { - print.info("Operation cancelled by user."); - return; - } - print.info(`Upgrading ${contractName}...`); - - await deployUpgradable(deployments, contractName, { - newImplementation: contractName, - initializer, - from: deployer, - args, // Warning: do not reinitialize existing state variables, only the new ones - }); - print.info(`Verifying ${contractName} on Etherscan...`); - await hre.run("etherscan-verify", { contractName: `${contractName}_Implementation` }); - } catch (err) { - console.error(err); - throw err; - } - }; - - const wETH = await deployments.get("WETH"); - - await upgrade(disputeKitClassic, "reinitialize", [wETH.address]); - await upgrade(disputeKitShutter, "reinitialize", [wETH.address]); - await upgrade(disputeKitGated, "reinitialize", [wETH.address]); - await upgrade(disputeKitGatedShutter, "reinitialize", [wETH.address]); - await upgrade(disputeTemplateRegistry, "reinitialize", []); - await upgrade(evidence, "reinitialize", []); - await upgrade(core, "reinitialize", [wETH.address]); - await upgrade(policyRegistry, "reinitialize", []); - await upgrade(sortition, "reinitialize", []); -}; - -deployUpgradeAll.tags = ["UpgradeAll"]; -deployUpgradeAll.skip = async ({ network }) => { - return isSkipped(network, !HomeChains[network.config.chainId ?? 0]); -}; - -export default deployUpgradeAll; diff --git a/contracts/deploy/utils/deployTokens.ts b/contracts/deploy/utils/deployTokens.ts deleted file mode 100644 index 3e6222f99..000000000 --- a/contracts/deploy/utils/deployTokens.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Contract } from "ethers"; -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { getContractOrDeploy } from "./getContractOrDeploy"; -import { isMainnet } from "."; - -export const deployERC20AndFaucet = async ( - hre: HardhatRuntimeEnvironment, - deployer: string, - ticker: string, - faucetFundingAmount: bigint = hre.ethers.parseUnits("100000") -): Promise => { - const erc20 = await deployERC20(hre, deployer, ticker); - if (!isMainnet(hre.network)) { - await deployFaucet(hre, deployer, ticker, erc20, faucetFundingAmount); - } - return erc20; -}; - -export const deployERC20 = async ( - hre: HardhatRuntimeEnvironment, - deployer: string, - ticker: string -): Promise => { - return await getContractOrDeploy(hre, ticker, { - from: deployer, - contract: "TestERC20", - args: [ticker, ticker], - log: true, - }); -}; - -export const deployFaucet = async ( - hre: HardhatRuntimeEnvironment, - deployer: string, - ticker: string, - erc20: Contract, - faucetFundingAmount: bigint -): Promise => { - const faucet = await getContractOrDeploy(hre, `${ticker}Faucet`, { - from: deployer, - contract: "Faucet", - args: [erc20.target], - log: true, - }); - - const faucetBalance = await erc20.balanceOf(faucet.target); - const deployerBalance = await erc20.balanceOf(deployer); - if (deployerBalance >= faucetFundingAmount && faucetBalance < faucetFundingAmount / 5n) { - // Fund the faucet if deployer has enough tokens and if the faucet has less than 20% of the faucetFundingAmount - console.log(`funding ${ticker}Faucet with ${faucetFundingAmount}`); - await erc20.transfer(faucet.target, faucetFundingAmount); - } -}; - -export const deployERC721 = async ( - hre: HardhatRuntimeEnvironment, - deployer: string, - name: string, - ticker: string -): Promise => { - return getContractOrDeploy(hre, ticker, { - from: deployer, - contract: "TestERC721", - args: [name, ticker], - log: true, - }); -}; - -export const deployERC1155 = async ( - hre: HardhatRuntimeEnvironment, - deployer: string, - name: string, - ticker: string -): Promise => { - return getContractOrDeploy(hre, ticker, { - from: deployer, - contract: "TestERC1155", - args: [], - log: true, - }); -}; diff --git a/contracts/deploy/utils/deployUpgradable.ts b/contracts/deploy/utils/deployUpgradable.ts deleted file mode 100644 index 932afd816..000000000 --- a/contracts/deploy/utils/deployUpgradable.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { - DeployResult, - DeployOptions, - DeploymentsExtension, - DeployOptionsBase, - ProxyOptions, -} from "hardhat-deploy/types"; - -// Rationale: https://github.com/kleros/kleros-v2/pull/1214#issue-1879116629 -function proxyOptions(proxyContract: string): ProxyOptions { - return { - proxyContract, - proxyArgs: ["{implementation}", "{data}"], - checkProxyAdmin: false, // Not relevant for UUPSProxy - checkABIConflict: false, // Not relevant for UUPSProxy - upgradeFunction: { - methodName: "upgradeToAndCall", - upgradeArgs: ["{implementation}", "{data}"], - }, - }; -} - -export type DeployUpgradableOptions = { - newImplementation?: string; - initializer?: string; - proxyAlias?: string; -} & DeployOptionsBase; - -/** - * Deploy a contract with an upgradable proxy - * NOTE: This function assumes the existence of a proxy contract with the name `${proxy}Proxy`, if there is none add the option `proxyAlias: "UUPSProxy"` - * @param deployments - The deployments extension - * @param proxy - The name of the proxy contract - * @param options - The options for the deployment - * @returns The deployment result - */ -export const deployUpgradable = async ( - deployments: DeploymentsExtension, - proxy: string, - options: DeployUpgradableOptions -): Promise => { - const { deploy } = deployments; - const { - newImplementation, - initializer, - args: initializerArgs, - proxy: proxyOverrides, - proxyAlias, - ...otherOptions - } = options; - - const methodName = initializer ?? "initialize"; - const args = initializerArgs ?? []; - - const contract: Partial = newImplementation - ? { - contract: newImplementation, - } - : {}; - - const implementationName: Partial = newImplementation - ? { - implementationName: newImplementation + "_Implementation", - } - : {}; - - const fullOptions: DeployOptions = { - ...otherOptions, - ...contract, - proxy: { - ...proxyOptions(proxyAlias ?? `${proxy}Proxy`), - ...implementationName, - ...((proxyOverrides as ProxyOptions) ?? {}), - execute: { - init: { - methodName, - args, - }, - onUpgrade: { - methodName, - args, - }, - }, - }, - }; - - // console.debug("fullOptions: ", JSON.stringify(fullOptions)); - return deploy(proxy, fullOptions); -}; diff --git a/contracts/deploy/utils/getContractAddress.ts b/contracts/deploy/utils/getContractAddress.ts deleted file mode 100644 index bfad406d3..000000000 --- a/contracts/deploy/utils/getContractAddress.ts +++ /dev/null @@ -1,12 +0,0 @@ -const { BN, Address, toChecksumAddress } = require("ethereumjs-util"); - -/** - * Gets the address of a soon to be deployed contract. - * @param {string} deployer The address of the deployer account. - * @param {number|BN} nonce The current nonce for the deployer account. - * @return {string} The address of a contract if it is deployed in the next transaction sent by the deployer account. - */ -export const getContractAddress = (deployer, nonce) => { - const deployAddress = Address.generate(Address.fromString(deployer), new BN(String(nonce))); - return toChecksumAddress(deployAddress.toString()); -}; diff --git a/contracts/deploy/utils/getContractOrDeploy.ts b/contracts/deploy/utils/getContractOrDeploy.ts deleted file mode 100644 index 1bcb46177..000000000 --- a/contracts/deploy/utils/getContractOrDeploy.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { DeployOptions } from "hardhat-deploy/types"; -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { deployUpgradable } from "./deployUpgradable"; -import { Contract } from "ethers"; - -export const getContractOrDeploy = async ( - hre: HardhatRuntimeEnvironment, - contractName: string, - options: DeployOptions -): Promise => { - let contract = await hre.ethers.getContractOrNull(contractName); - if (!contract) { - console.log(`contract ${contractName} not deployed, deploying now...`); - await hre.deployments.deploy(contractName, options); - contract = await hre.ethers.getContract(contractName); - } else { - console.log(`contract ${contractName} already deployed`); - } - return contract; -}; - -export const getContractOrDeployUpgradable = async ( - hre: HardhatRuntimeEnvironment, - contractName: string, - options: DeployOptions -): Promise => { - let contract = await hre.ethers.getContractOrNull(contractName); - if (!contract) { - console.log(`contract ${contractName} not deployed, deploying as upgradable now...`); - await deployUpgradable(hre.deployments, contractName, options); - contract = await hre.ethers.getContract(contractName); - } else { - console.log(`contract ${contractName} already deployed`); - } - return contract; -}; diff --git a/contracts/deploy/utils/index.ts b/contracts/deploy/utils/index.ts deleted file mode 100644 index bb14bf0fd..000000000 --- a/contracts/deploy/utils/index.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { ethers } from "ethers"; -import { Network } from "hardhat/types"; - -// TODO: derive this from hardhat.config and make it rely on viem/chains - -export enum HardhatChain { - HARDHAT = 31337, -} - -export enum HomeChains { - ARBITRUM_ONE = 42161, - ARBITRUM_SEPOLIA = 421614, - HARDHAT = HardhatChain.HARDHAT, -} - -export enum ForeignChains { - ETHEREUM_MAINNET = 1, - ETHEREUM_SEPOLIA = 11155111, - GNOSIS_MAINNET = 100, - GNOSIS_CHIADO = 10200, - HARDHAT = HardhatChain.HARDHAT, -} - -export enum Courts { - FORKING = 0, - GENERAL = 1, -} - -export const isMainnet = (network: Network) => network.tags.production ?? false; -export const isDevnet = (network: Network) => network.name.endsWith("Devnet"); - -export const isSkipped = async (network: Network, skip: boolean) => { - if (skip) { - console.error(`Error: incompatible network ${network.name} for this deployment script`); - return true; - } - return false; -}; - -export const PNK = (n: number) => ethers.parseUnits(String(n)); -export const ETH = (n: number) => ethers.parseUnits(String(n)); diff --git a/contracts/deploy/utils/klerosCoreHelper.ts b/contracts/deploy/utils/klerosCoreHelper.ts deleted file mode 100644 index 3325652a3..000000000 --- a/contracts/deploy/utils/klerosCoreHelper.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { KlerosCore, KlerosCoreRuler, KlerosCoreUniversity } from "../../typechain-types"; -import { BigNumberish, toBigInt } from "ethers"; - -export const changeCurrencyRate = async ( - core: KlerosCore | KlerosCoreRuler | KlerosCoreUniversity, - erc20: string, - accepted: boolean, - rateInEth: BigNumberish, - rateDecimals: BigNumberish -) => { - const pnkRate = await core.currencyRates(erc20); - if (pnkRate.feePaymentAccepted !== accepted) { - console.log(`core.changeAcceptedFeeTokens(${erc20}, ${accepted})`); - const tx = await core.changeAcceptedFeeTokens(erc20, accepted); - await tx.wait(); - } - if (pnkRate.rateInEth !== toBigInt(rateInEth) || pnkRate.rateDecimals !== rateDecimals) { - console.log(`core.changeCurrencyRates(${erc20}, ${rateInEth}, ${rateDecimals})`); - const tx = await core.changeCurrencyRates(erc20, rateInEth, rateDecimals); - await tx.wait(); - } -}; diff --git a/contracts/deployments/arbitrum.ts b/contracts/deployments/arbitrum.ts deleted file mode 100644 index 2b5d6eb3f..000000000 --- a/contracts/deployments/arbitrum.ts +++ /dev/null @@ -1,26347 +0,0 @@ -export default { - name: "arbitrum", - chainId: "42161", - contracts: { - BlockHashRNG: { - address: "0x39D123fc4cFD24EA5bB76195f9ecFE1f0DF35b0B", - abi: [ - { - inputs: [ - { - internalType: "uint256", - name: "block", - type: "uint256", - }, - ], - name: "randomNumbers", - outputs: [ - { - internalType: "uint256", - name: "number", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_block", - type: "uint256", - }, - ], - name: "receiveRandomness", - outputs: [ - { - internalType: "uint256", - name: "randomNumber", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_block", - type: "uint256", - }, - ], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - ChainlinkRNG: { - address: "0x897d83a7d5F23555eFA15e1BE297d5503522cbA3", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "address", - name: "_sortitionModule", - type: "address", - }, - { - internalType: "address", - name: "_vrfCoordinator", - type: "address", - }, - { - internalType: "bytes32", - name: "_keyHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "_subscriptionId", - type: "uint256", - }, - { - internalType: "uint16", - name: "_requestConfirmations", - type: "uint16", - }, - { - internalType: "uint32", - name: "_callbackGasLimit", - type: "uint32", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "have", - type: "address", - }, - { - internalType: "address", - name: "want", - type: "address", - }, - ], - name: "OnlyCoordinatorCanFulfill", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "have", - type: "address", - }, - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "coordinator", - type: "address", - }, - ], - name: "OnlyOwnerOrCoordinator", - type: "error", - }, - { - inputs: [], - name: "ZeroAddress", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "vrfCoordinator", - type: "address", - }, - ], - name: "CoordinatorSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "OwnershipTransferRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "randomWord", - type: "uint256", - }, - ], - name: "RequestFulfilled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "RequestSent", - type: "event", - }, - { - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "callbackGasLimit", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "_callbackGasLimit", - type: "uint32", - }, - ], - name: "changeCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_keyHash", - type: "bytes32", - }, - ], - name: "changeKeyHash", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint16", - name: "_requestConfirmations", - type: "uint16", - }, - ], - name: "changeRequestConfirmations", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_sortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_subscriptionId", - type: "uint256", - }, - ], - name: "changeSubscriptionId", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_vrfCoordinator", - type: "address", - }, - ], - name: "changeVrfCoordinator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "keyHash", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastRequestId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "randomNumbers", - outputs: [ - { - internalType: "uint256", - name: "number", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "randomWords", - type: "uint256[]", - }, - ], - name: "rawFulfillRandomWords", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "receiveRandomness", - outputs: [ - { - internalType: "uint256", - name: "randomNumber", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "requestConfirmations", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "s_vrfCoordinator", - outputs: [ - { - internalType: "contract IVRFCoordinatorV2Plus", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_vrfCoordinator", - type: "address", - }, - ], - name: "setCoordinator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "sortitionModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "subscriptionId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - ChainlinkVRFCoordinator: { - address: "0x3C0Ca683b403E37668AE3DC4FB62F4B29B6f7a3e", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "blockhashStore", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "uint256", - name: "internalBalance", - type: "uint256", - }, - { - internalType: "uint256", - name: "externalBalance", - type: "uint256", - }, - ], - name: "BalanceInvariantViolated", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNum", - type: "uint256", - }, - ], - name: "BlockhashNotInStore", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "coordinatorAddress", - type: "address", - }, - ], - name: "CoordinatorAlreadyRegistered", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "coordinatorAddress", - type: "address", - }, - ], - name: "CoordinatorNotRegistered", - type: "error", - }, - { - inputs: [], - name: "FailedToSendNative", - type: "error", - }, - { - inputs: [], - name: "FailedToTransferLink", - type: "error", - }, - { - inputs: [ - { - internalType: "uint32", - name: "have", - type: "uint32", - }, - { - internalType: "uint32", - name: "want", - type: "uint32", - }, - ], - name: "GasLimitTooBig", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "gasPrice", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxGas", - type: "uint256", - }, - ], - name: "GasPriceExceeded", - type: "error", - }, - { - inputs: [], - name: "IncorrectCommitment", - type: "error", - }, - { - inputs: [], - name: "IndexOutOfRange", - type: "error", - }, - { - inputs: [], - name: "InsufficientBalance", - type: "error", - }, - { - inputs: [], - name: "InvalidCalldata", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "InvalidConsumer", - type: "error", - }, - { - inputs: [], - name: "InvalidExtraArgsTag", - type: "error", - }, - { - inputs: [ - { - internalType: "int256", - name: "linkWei", - type: "int256", - }, - ], - name: "InvalidLinkWeiPrice", - type: "error", - }, - { - inputs: [ - { - internalType: "uint8", - name: "premiumPercentage", - type: "uint8", - }, - { - internalType: "uint8", - name: "max", - type: "uint8", - }, - ], - name: "InvalidPremiumPercentage", - type: "error", - }, - { - inputs: [ - { - internalType: "uint16", - name: "have", - type: "uint16", - }, - { - internalType: "uint16", - name: "min", - type: "uint16", - }, - { - internalType: "uint16", - name: "max", - type: "uint16", - }, - ], - name: "InvalidRequestConfirmations", - type: "error", - }, - { - inputs: [], - name: "InvalidSubscription", - type: "error", - }, - { - inputs: [], - name: "LinkAlreadySet", - type: "error", - }, - { - inputs: [ - { - internalType: "uint32", - name: "flatFeeLinkDiscountPPM", - type: "uint32", - }, - { - internalType: "uint32", - name: "flatFeeNativePPM", - type: "uint32", - }, - ], - name: "LinkDiscountTooHigh", - type: "error", - }, - { - inputs: [], - name: "LinkNotSet", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "have", - type: "uint256", - }, - { - internalType: "uint32", - name: "max", - type: "uint32", - }, - ], - name: "MsgDataTooBig", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "proposedOwner", - type: "address", - }, - ], - name: "MustBeRequestedOwner", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "MustBeSubOwner", - type: "error", - }, - { - inputs: [], - name: "NoCorrespondingRequest", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - ], - name: "NoSuchProvingKey", - type: "error", - }, - { - inputs: [ - { - internalType: "uint32", - name: "have", - type: "uint32", - }, - { - internalType: "uint32", - name: "want", - type: "uint32", - }, - ], - name: "NumWordsTooBig", - type: "error", - }, - { - inputs: [], - name: "OnlyCallableFromLink", - type: "error", - }, - { - inputs: [], - name: "PaymentTooLarge", - type: "error", - }, - { - inputs: [], - name: "PendingRequestExists", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - ], - name: "ProvingKeyAlreadyRegistered", - type: "error", - }, - { - inputs: [], - name: "Reentrant", - type: "error", - }, - { - inputs: [], - name: "TooManyConsumers", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint16", - name: "minimumRequestConfirmations", - type: "uint16", - }, - { - indexed: false, - internalType: "uint32", - name: "maxGasLimit", - type: "uint32", - }, - { - indexed: false, - internalType: "uint32", - name: "stalenessSeconds", - type: "uint32", - }, - { - indexed: false, - internalType: "uint32", - name: "gasAfterPaymentCalculation", - type: "uint32", - }, - { - indexed: false, - internalType: "int256", - name: "fallbackWeiPerUnitLink", - type: "int256", - }, - { - indexed: false, - internalType: "uint32", - name: "fulfillmentFlatFeeNativePPM", - type: "uint32", - }, - { - indexed: false, - internalType: "uint32", - name: "fulfillmentFlatFeeLinkDiscountPPM", - type: "uint32", - }, - { - indexed: false, - internalType: "uint8", - name: "nativePremiumPercentage", - type: "uint8", - }, - { - indexed: false, - internalType: "uint8", - name: "linkPremiumPercentage", - type: "uint8", - }, - ], - name: "ConfigSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "coordinatorAddress", - type: "address", - }, - ], - name: "CoordinatorDeregistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "coordinatorAddress", - type: "address", - }, - ], - name: "CoordinatorRegistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "fallbackWeiPerUnitLink", - type: "int256", - }, - ], - name: "FallbackWeiPerUnitLinkUsed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "FundsRecovered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "newCoordinator", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "MigrationCompleted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "NativeFundsRecovered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "OwnershipTransferRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint64", - name: "maxGas", - type: "uint64", - }, - ], - name: "ProvingKeyDeregistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint64", - name: "maxGas", - type: "uint64", - }, - ], - name: "ProvingKeyRegistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "outputSeed", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint96", - name: "payment", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "nativePayment", - type: "bool", - }, - { - indexed: false, - internalType: "bool", - name: "success", - type: "bool", - }, - { - indexed: false, - internalType: "bool", - name: "onlyPremium", - type: "bool", - }, - ], - name: "RandomWordsFulfilled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "preSeed", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "minimumRequestConfirmations", - type: "uint16", - }, - { - indexed: false, - internalType: "uint32", - name: "callbackGasLimit", - type: "uint32", - }, - { - indexed: false, - internalType: "uint32", - name: "numWords", - type: "uint32", - }, - { - indexed: false, - internalType: "bytes", - name: "extraArgs", - type: "bytes", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "RandomWordsRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amountLink", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amountNative", - type: "uint256", - }, - ], - name: "SubscriptionCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "SubscriptionConsumerAdded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "SubscriptionConsumerRemoved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "SubscriptionCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "oldBalance", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newBalance", - type: "uint256", - }, - ], - name: "SubscriptionFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "oldNativeBalance", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newNativeBalance", - type: "uint256", - }, - ], - name: "SubscriptionFundedWithNative", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "SubscriptionOwnerTransferRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "SubscriptionOwnerTransferred", - type: "event", - }, - { - inputs: [], - name: "BLOCKHASH_STORE", - outputs: [ - { - internalType: "contract BlockhashStoreInterface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LINK", - outputs: [ - { - internalType: "contract LinkTokenInterface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LINK_NATIVE_FEED", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAX_CONSUMERS", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAX_NUM_WORDS", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAX_REQUEST_CONFIRMATIONS", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "acceptSubscriptionOwnerTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "addConsumer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "cancelSubscription", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "createSubscription", - outputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "deregisterMigratableCoordinator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "publicProvingKey", - type: "uint256[2]", - }, - ], - name: "deregisterProvingKey", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "uint256[2]", - name: "pk", - type: "uint256[2]", - }, - { - internalType: "uint256[2]", - name: "gamma", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "c", - type: "uint256", - }, - { - internalType: "uint256", - name: "s", - type: "uint256", - }, - { - internalType: "uint256", - name: "seed", - type: "uint256", - }, - { - internalType: "address", - name: "uWitness", - type: "address", - }, - { - internalType: "uint256[2]", - name: "cGammaWitness", - type: "uint256[2]", - }, - { - internalType: "uint256[2]", - name: "sHashWitness", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "zInv", - type: "uint256", - }, - ], - internalType: "struct VRF.Proof", - name: "proof", - type: "tuple", - }, - { - components: [ - { - internalType: "uint64", - name: "blockNum", - type: "uint64", - }, - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "uint32", - name: "callbackGasLimit", - type: "uint32", - }, - { - internalType: "uint32", - name: "numWords", - type: "uint32", - }, - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "bytes", - name: "extraArgs", - type: "bytes", - }, - ], - internalType: "struct VRFTypes.RequestCommitmentV2Plus", - name: "rc", - type: "tuple", - }, - { - internalType: "bool", - name: "onlyPremium", - type: "bool", - }, - ], - name: "fulfillRandomWords", - outputs: [ - { - internalType: "uint96", - name: "payment", - type: "uint96", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "fundSubscriptionWithNative", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "startIndex", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxCount", - type: "uint256", - }, - ], - name: "getActiveSubscriptionIds", - outputs: [ - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "getSubscription", - outputs: [ - { - internalType: "uint96", - name: "balance", - type: "uint96", - }, - { - internalType: "uint96", - name: "nativeBalance", - type: "uint96", - }, - { - internalType: "uint64", - name: "reqCount", - type: "uint64", - }, - { - internalType: "address", - name: "subOwner", - type: "address", - }, - { - internalType: "address[]", - name: "consumers", - type: "address[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "publicKey", - type: "uint256[2]", - }, - ], - name: "hashOfKey", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "newCoordinator", - type: "address", - }, - ], - name: "migrate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "onTokenTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "ownerCancelSubscription", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "pendingRequestExists", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "recoverFunds", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "to", - type: "address", - }, - ], - name: "recoverNativeFunds", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "registerMigratableCoordinator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "publicProvingKey", - type: "uint256[2]", - }, - { - internalType: "uint64", - name: "maxGas", - type: "uint64", - }, - ], - name: "registerProvingKey", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "removeConsumer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "uint16", - name: "requestConfirmations", - type: "uint16", - }, - { - internalType: "uint32", - name: "callbackGasLimit", - type: "uint32", - }, - { - internalType: "uint32", - name: "numWords", - type: "uint32", - }, - { - internalType: "bytes", - name: "extraArgs", - type: "bytes", - }, - ], - internalType: "struct VRFV2PlusClient.RandomWordsRequest", - name: "req", - type: "tuple", - }, - ], - name: "requestRandomWords", - outputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "requestSubscriptionOwnerTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "s_config", - outputs: [ - { - internalType: "uint16", - name: "minimumRequestConfirmations", - type: "uint16", - }, - { - internalType: "uint32", - name: "maxGasLimit", - type: "uint32", - }, - { - internalType: "bool", - name: "reentrancyLock", - type: "bool", - }, - { - internalType: "uint32", - name: "stalenessSeconds", - type: "uint32", - }, - { - internalType: "uint32", - name: "gasAfterPaymentCalculation", - type: "uint32", - }, - { - internalType: "uint32", - name: "fulfillmentFlatFeeNativePPM", - type: "uint32", - }, - { - internalType: "uint32", - name: "fulfillmentFlatFeeLinkDiscountPPM", - type: "uint32", - }, - { - internalType: "uint8", - name: "nativePremiumPercentage", - type: "uint8", - }, - { - internalType: "uint8", - name: "linkPremiumPercentage", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "s_currentSubNonce", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "s_fallbackWeiPerUnitLink", - outputs: [ - { - internalType: "int256", - name: "", - type: "int256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "s_provingKeyHashes", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "s_provingKeys", - outputs: [ - { - internalType: "bool", - name: "exists", - type: "bool", - }, - { - internalType: "uint64", - name: "maxGas", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "s_requestCommitments", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "s_totalBalance", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "s_totalNativeBalance", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint16", - name: "minimumRequestConfirmations", - type: "uint16", - }, - { - internalType: "uint32", - name: "maxGasLimit", - type: "uint32", - }, - { - internalType: "uint32", - name: "stalenessSeconds", - type: "uint32", - }, - { - internalType: "uint32", - name: "gasAfterPaymentCalculation", - type: "uint32", - }, - { - internalType: "int256", - name: "fallbackWeiPerUnitLink", - type: "int256", - }, - { - internalType: "uint32", - name: "fulfillmentFlatFeeNativePPM", - type: "uint32", - }, - { - internalType: "uint32", - name: "fulfillmentFlatFeeLinkDiscountPPM", - type: "uint32", - }, - { - internalType: "uint8", - name: "nativePremiumPercentage", - type: "uint8", - }, - { - internalType: "uint8", - name: "linkPremiumPercentage", - type: "uint8", - }, - ], - name: "setConfig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "link", - type: "address", - }, - { - internalType: "address", - name: "linkNativeFeed", - type: "address", - }, - ], - name: "setLINKAndLINKNativeFeed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - ], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "recipient", - type: "address", - }, - ], - name: "withdrawNative", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DAI: { - address: "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", - abi: [ - { - 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: "usr", - type: "address", - }, - ], - name: "Deny", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "usr", - type: "address", - }, - ], - name: "Rely", - 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", - }, - { - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "PERMIT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "burn", - 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: "address", - name: "usr", - type: "address", - }, - ], - name: "deny", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "deploymentChainId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - 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: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "usr", - type: "address", - }, - ], - name: "rely", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - 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: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "wards", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - DisputeKitClassic: { - address: "0x70B464be85A547144C72485eBa2577E5D3A45421", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitClassic_Implementation: { - address: "0x371Aa4B1AE5b5f9422f3Ff1d105029AAd1D319BC", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitClassic_Proxy: { - address: "0x70B464be85A547144C72485eBa2577E5D3A45421", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeKitGated: { - address: "0xaE1eed20C125B739b64c948820C61F809ad9a925", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "extraDataToTokenInfo", - outputs: [ - { - internalType: "address", - name: "tokenGate", - type: "address", - }, - { - internalType: "bool", - name: "isERC1155", - type: "bool", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitGatedShutter: { - address: "0x788330092B9704809C19858E39EB9Ac402c2E47b", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "CommitCastShutter", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitGatedShutter_Implementation: { - address: "0xb12EB4c0716d3A9861a9AC471c6CdDB808d61b32", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "CommitCastShutter", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitGatedShutter_Proxy: { - address: "0x788330092B9704809C19858E39EB9Ac402c2E47b", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeKitGated_Implementation: { - address: "0xEA7863E6dE863e8E6d037D8693ad5dA45Db7790a", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "extraDataToTokenInfo", - outputs: [ - { - internalType: "address", - name: "tokenGate", - type: "address", - }, - { - internalType: "bool", - name: "isERC1155", - type: "bool", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitGated_Proxy: { - address: "0xaE1eed20C125B739b64c948820C61F809ad9a925", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeKitShutter: { - address: "0x9D3e3f1765744c2a1BC6F6088549770444BBC768", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "CommitCastShutter", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitShutter_Implementation: { - address: "0xF3103B46403A0bBd4551648BFb29BCC2b8783947", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "CommitCastShutter", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitShutter_Proxy: { - address: "0x9D3e3f1765744c2a1BC6F6088549770444BBC768", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeResolver: { - address: "0xb5526D022962A1fFf6eD32C93e8b714c901F4323", - abi: [ - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_templateUri", - type: "string", - }, - ], - name: "DisputeRequest", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - inputs: [], - name: "arbitrator", - outputs: [ - { - internalType: "contract IArbitratorV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "arbitratorDisputeIDToLocalID", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "string", - name: "_disputeTemplate", - type: "string", - }, - { - internalType: "string", - name: "_disputeTemplateDataMappings", - type: "string", - }, - { - internalType: "uint256", - name: "_numberOfRulingOptions", - type: "uint256", - }, - ], - name: "createDisputeForTemplate", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "string", - name: "_disputeTemplateUri", - type: "string", - }, - { - internalType: "uint256", - name: "_numberOfRulingOptions", - type: "uint256", - }, - ], - name: "createDisputeForTemplateUri", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "bytes", - name: "arbitratorExtraData", - type: "bytes", - }, - { - internalType: "bool", - name: "isRuled", - type: "bool", - }, - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "uint256", - name: "numberOfRulingOptions", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templateRegistry", - outputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - DisputeResolverRuler: { - address: "0xb3a5FdEAF461c42caCe148e978e6FBCa97bE6140", - abi: [ - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_templateUri", - type: "string", - }, - ], - name: "DisputeRequest", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - inputs: [], - name: "arbitrator", - outputs: [ - { - internalType: "contract IArbitratorV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "arbitratorDisputeIDToLocalID", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "string", - name: "_disputeTemplate", - type: "string", - }, - { - internalType: "string", - name: "_disputeTemplateDataMappings", - type: "string", - }, - { - internalType: "uint256", - name: "_numberOfRulingOptions", - type: "uint256", - }, - ], - name: "createDisputeForTemplate", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "string", - name: "_disputeTemplateUri", - type: "string", - }, - { - internalType: "uint256", - name: "_numberOfRulingOptions", - type: "uint256", - }, - ], - name: "createDisputeForTemplateUri", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "bytes", - name: "arbitratorExtraData", - type: "bytes", - }, - { - internalType: "bool", - name: "isRuled", - type: "bool", - }, - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "uint256", - name: "numberOfRulingOptions", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templateRegistry", - outputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - DisputeTemplateRegistry: { - address: "0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: true, - internalType: "string", - name: "_templateTag", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_templateData", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "DisputeTemplate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "_templateTag", - type: "string", - }, - { - internalType: "string", - name: "_templateData", - type: "string", - }, - { - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "setDisputeTemplate", - outputs: [ - { - internalType: "uint256", - name: "templateId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templates", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - 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: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeTemplateRegistry_Implementation: { - address: "0x57EfD43DAfCeb6C58Df57932b2B299f46fef5c87", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: true, - internalType: "string", - name: "_templateTag", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_templateData", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "DisputeTemplate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "_templateTag", - type: "string", - }, - { - internalType: "string", - name: "_templateData", - type: "string", - }, - { - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "setDisputeTemplate", - outputs: [ - { - internalType: "uint256", - name: "templateId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templates", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - ], - }, - DisputeTemplateRegistry_Proxy: { - address: "0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - EvidenceModule: { - address: "0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_party", - type: "address", - }, - { - indexed: false, - internalType: "string", - name: "_evidence", - type: "string", - }, - ], - name: "Evidence", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - internalType: "string", - name: "_evidence", - type: "string", - }, - ], - name: "submitEvidence", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - EvidenceModule_Implementation: { - address: "0xA502A3942abCF8e71FBD87ed442B39b798b192C8", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_party", - type: "address", - }, - { - indexed: false, - internalType: "string", - name: "_evidence", - type: "string", - }, - ], - name: "Evidence", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - internalType: "string", - name: "_evidence", - type: "string", - }, - ], - name: "submitEvidence", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - EvidenceModule_Proxy: { - address: "0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - KlerosCore: { - address: "0x991d2df165670b9cac3B022f4B68D65b664222ea", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "AppealFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "AppealPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "ArbitrableNotWhitelisted", - type: "error", - }, - { - inputs: [], - name: "ArbitrationFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "CannotDisableClassicDK", - type: "error", - }, - { - inputs: [], - name: "CommitPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "DisputeKitNotSupportedByCourt", - type: "error", - }, - { - inputs: [], - name: "DisputeKitOnly", - type: "error", - }, - { - inputs: [], - name: "DisputeNotAppealable", - type: "error", - }, - { - inputs: [], - name: "DisputePeriodIsFinal", - type: "error", - }, - { - inputs: [], - name: "DisputeStillDrawing", - type: "error", - }, - { - inputs: [], - name: "EvidenceNotPassedAndNotAppeal", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [], - name: "GovernorOnly", - type: "error", - }, - { - inputs: [], - name: "GuardianOrGovernorOnly", - type: "error", - }, - { - inputs: [], - name: "InvalidDisputKitParent", - type: "error", - }, - { - inputs: [], - name: "InvalidForkingCourtAsParent", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "MinStakeLowerThanParentCourt", - type: "error", - }, - { - inputs: [], - name: "MustSupportDisputeKitClassic", - type: "error", - }, - { - inputs: [], - name: "NotEligibleForStaking", - type: "error", - }, - { - inputs: [], - name: "NotEvidencePeriod", - type: "error", - }, - { - inputs: [], - name: "NotExecutionPeriod", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "RulingAlreadyExecuted", - type: "error", - }, - { - inputs: [], - name: "SortitionModuleOnly", - type: "error", - }, - { - inputs: [], - name: "StakingInTooManyCourts", - type: "error", - }, - { - inputs: [], - name: "StakingLessThanCourtMinStake", - type: "error", - }, - { - inputs: [], - name: "StakingMoreThanMaxStakePerJuror", - type: "error", - }, - { - inputs: [], - name: "StakingMoreThanMaxTotalStaked", - type: "error", - }, - { - inputs: [], - name: "StakingNotPossibleInThisCourt", - type: "error", - }, - { - inputs: [], - name: "StakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "StakingZeroWhenNoStake", - type: "error", - }, - { - inputs: [], - name: "TokenNotAccepted", - type: "error", - }, - { - inputs: [], - name: "TransferFailed", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - inputs: [], - name: "UnstakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "UnsuccessfulCall", - type: "error", - }, - { - inputs: [], - name: "UnsupportedDisputeKit", - type: "error", - }, - { - inputs: [], - name: "VotePeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "WhenNotPausedOnly", - type: "error", - }, - { - inputs: [], - name: "WhenPausedOnly", - type: "error", - }, - { - inputs: [], - name: "WrongDisputeKitIndex", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - { - indexed: true, - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "AcceptedFeeToken", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealDecision", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealPossible", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "CourtCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_fromCourtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint96", - name: "_toCourtID", - type: "uint96", - }, - ], - name: "CourtJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtModified", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "DisputeKitCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "DisputeKitEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_fromDisputeKitID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_toDisputeKitID", - type: "uint256", - }, - ], - name: "DisputeKitJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "Draw", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_pnkAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "LeftoverRewardSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - indexed: false, - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - indexed: false, - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "NewCurrencyRate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "enum KlerosCoreBase.Period", - name: "_period", - type: "uint8", - }, - ], - name: "NewPeriod", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_degreeOfCoherency", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "_pnkAmount", - type: "int256", - }, - { - indexed: false, - internalType: "int256", - name: "_feeAmount", - type: "int256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "TokenAndETHShift", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Unpaused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealPeriod", - outputs: [ - { - internalType: "uint256", - name: "start", - type: "uint256", - }, - { - internalType: "uint256", - name: "end", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "arbitrableWhitelist", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_arbitrable", - type: "address", - }, - { - internalType: "bool", - name: "_allowed", - type: "bool", - }, - ], - name: "changeArbitrableWhitelist", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_guardian", - type: "address", - }, - ], - name: "changeGuardian", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC721", - name: "_jurorNft", - type: "address", - }, - ], - name: "changeJurorNft", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract ISortitionModule", - name: "_sortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_toToken", - type: "address", - }, - { - internalType: "uint256", - name: "_amountInEth", - type: "uint256", - }, - ], - name: "convertEthToTokenAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "courts", - outputs: [ - { - internalType: "uint96", - name: "parent", - type: "uint96", - }, - { - internalType: "bool", - name: "hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "bool", - name: "disabled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "bytes", - name: "_sortitionExtraData", - type: "bytes", - }, - { - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "currencyRates", - outputs: [ - { - internalType: "bool", - name: "feePaymentAccepted", - type: "bool", - }, - { - internalType: "uint64", - name: "rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "rateDecimals", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputeKits", - outputs: [ - { - internalType: "contract IDisputeKit", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "contract IArbitrableV2", - name: "arbitrated", - type: "address", - }, - { - internalType: "enum KlerosCoreBase.Period", - name: "period", - type: "uint8", - }, - { - internalType: "bool", - name: "ruled", - type: "bool", - }, - { - internalType: "uint256", - name: "lastPeriodChange", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "uint256", - name: "nbDrawnJurors", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256[]", - name: "_disputeKitIDs", - type: "uint256[]", - }, - { - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDisputeKitsLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getPnkAtStakePerJuror", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "disputeKitID", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkAtStakePerJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalFeesForJurors", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "repartitions", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkPenalties", - type: "uint256", - }, - { - internalType: "address[]", - name: "drawnJurors", - type: "address[]", - }, - { - internalType: "uint256", - name: "sumFeeRewardPaid", - type: "uint256", - }, - { - internalType: "uint256", - name: "sumPnkRewardPaid", - type: "uint256", - }, - { - internalType: "contract IERC20", - name: "feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "drawIterations", - type: "uint256", - }, - ], - internalType: "struct KlerosCoreBase.Round", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getTimesPerPeriod", - outputs: [ - { - internalType: "uint256[4]", - name: "timesPerPeriod", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "guardian", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "address", - name: "_guardian", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - { - internalType: "contract IDisputeKit", - name: "_disputeKit", - type: "address", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256[4]", - name: "_courtParameters", - type: "uint256[4]", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "bytes", - name: "_sortitionExtraData", - type: "bytes", - }, - { - internalType: "contract ISortitionModule", - name: "_sortitionModuleAddress", - type: "address", - }, - { - internalType: "contract IERC721", - name: "_jurorNft", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "isDisputeKitJumping", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - ], - name: "isSupported", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "jurorNft", - outputs: [ - { - internalType: "contract IERC721", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "jurorProsecutionModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - 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: "pinakion", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "sortitionModule", - outputs: [ - { - internalType: "contract ISortitionModule", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "transferBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "unpause", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - KlerosCoreRuler: { - address: "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "AppealFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "ArbitrationFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "DisputeNotAppealable", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [], - name: "GovernorOnly", - type: "error", - }, - { - inputs: [], - name: "GovernorOrInstructorOnly", - type: "error", - }, - { - inputs: [], - name: "InvalidForkingCourtAsParent", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NoRulerSet", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "RulerOnly", - type: "error", - }, - { - inputs: [], - name: "RulingAlreadyExecuted", - type: "error", - }, - { - inputs: [], - name: "RulingModeNotSet", - type: "error", - }, - { - inputs: [], - name: "TokenNotAccepted", - type: "error", - }, - { - inputs: [], - name: "TransferFailed", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - inputs: [], - name: "UnsuccessfulCall", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - { - indexed: true, - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "AcceptedFeeToken", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealDecision", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealPossible", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "enum KlerosCoreRuler.RulingMode", - name: "mode", - type: "uint8", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "tied", - type: "bool", - }, - { - indexed: false, - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - name: "AutoRuled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_fromCourtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint96", - name: "_toCourtID", - type: "uint96", - }, - ], - name: "CourtJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtModified", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_pnkAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "LeftoverRewardSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - indexed: false, - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - indexed: false, - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "NewCurrencyRate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "enum KlerosCoreRuler.Period", - name: "_period", - type: "uint8", - }, - ], - name: "NewPeriod", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "_oldRuler", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "_newRuler", - type: "address", - }, - ], - name: "RulerChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - components: [ - { - internalType: "enum KlerosCoreRuler.RulingMode", - name: "rulingMode", - type: "uint8", - }, - { - internalType: "uint256", - name: "presetRuling", - type: "uint256", - }, - { - internalType: "bool", - name: "presetTied", - type: "bool", - }, - { - internalType: "bool", - name: "presetOverridden", - type: "bool", - }, - ], - indexed: false, - internalType: "struct KlerosCoreRuler.RulerSettings", - name: "_settings", - type: "tuple", - }, - ], - name: "RulerSettingsChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_degreeOfCoherency", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "_pnkAmount", - type: "int256", - }, - { - indexed: false, - internalType: "int256", - name: "_feeAmount", - type: "int256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "TokenAndETHShift", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - { - internalType: "bool", - name: "_jump", - type: "bool", - }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "bool", - name: "_jump", - type: "bool", - }, - ], - name: "appealCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - internalType: "address", - name: "_newRuler", - type: "address", - }, - ], - name: "changeRuler", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - internalType: "uint256", - name: "_presetRuling", - type: "uint256", - }, - { - internalType: "bool", - name: "_presetTied", - type: "bool", - }, - { - internalType: "bool", - name: "_presetOverridden", - type: "bool", - }, - ], - name: "changeRulingModeToAutomaticPreset", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "changeRulingModeToAutomaticRandom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "changeRulingModeToManual", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_toToken", - type: "address", - }, - { - internalType: "uint256", - name: "_amountInEth", - type: "uint256", - }, - ], - name: "convertEthToTokenAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "courts", - outputs: [ - { - internalType: "uint96", - name: "parent", - type: "uint96", - }, - { - internalType: "bool", - name: "hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "bool", - name: "disabled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "currencyRates", - outputs: [ - { - internalType: "bool", - name: "feePaymentAccepted", - type: "bool", - }, - { - internalType: "uint64", - name: "rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "rateDecimals", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "contract IArbitrableV2", - name: "arbitrated", - type: "address", - }, - { - internalType: "enum KlerosCoreRuler.Period", - name: "period", - type: "uint8", - }, - { - internalType: "bool", - name: "ruled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getNextDisputeID", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "totalFeesForJurors", - type: "uint256", - }, - { - internalType: "uint256", - name: "sumFeeRewardPaid", - type: "uint256", - }, - { - internalType: "contract IERC20", - name: "feeToken", - type: "address", - }, - ], - internalType: "struct KlerosCoreRuler.Round", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getTimesPerPeriod", - outputs: [ - { - internalType: "uint256[4]", - name: "timesPerPeriod", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - { - internalType: "uint256[4]", - name: "_courtParameters", - type: "uint256[4]", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pinakion", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "arbitrable", - type: "address", - }, - ], - name: "rulers", - outputs: [ - { - internalType: "address", - name: "ruler", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - name: "rulingResults", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "arbitrable", - type: "address", - }, - ], - name: "settings", - outputs: [ - { - internalType: "enum KlerosCoreRuler.RulingMode", - name: "rulingMode", - type: "uint8", - }, - { - internalType: "uint256", - name: "presetRuling", - type: "uint256", - }, - { - internalType: "bool", - name: "presetTied", - type: "bool", - }, - { - internalType: "bool", - name: "presetOverridden", - type: "bool", - }, - ], - stateMutability: "view", - 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: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - KlerosCoreRuler_Implementation: { - address: "0x85093b5EDa4F2e2E2fEDae34Da91239D6a08e324", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "AppealFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "ArbitrationFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "DisputeNotAppealable", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [], - name: "GovernorOnly", - type: "error", - }, - { - inputs: [], - name: "GovernorOrInstructorOnly", - type: "error", - }, - { - inputs: [], - name: "InvalidForkingCourtAsParent", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NoRulerSet", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "RulerOnly", - type: "error", - }, - { - inputs: [], - name: "RulingAlreadyExecuted", - type: "error", - }, - { - inputs: [], - name: "RulingModeNotSet", - type: "error", - }, - { - inputs: [], - name: "TokenNotAccepted", - type: "error", - }, - { - inputs: [], - name: "TransferFailed", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - inputs: [], - name: "UnsuccessfulCall", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - { - indexed: true, - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "AcceptedFeeToken", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealDecision", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealPossible", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "enum KlerosCoreRuler.RulingMode", - name: "mode", - type: "uint8", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "tied", - type: "bool", - }, - { - indexed: false, - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - name: "AutoRuled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_fromCourtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint96", - name: "_toCourtID", - type: "uint96", - }, - ], - name: "CourtJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtModified", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_pnkAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "LeftoverRewardSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - indexed: false, - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - indexed: false, - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "NewCurrencyRate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "enum KlerosCoreRuler.Period", - name: "_period", - type: "uint8", - }, - ], - name: "NewPeriod", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "_oldRuler", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "_newRuler", - type: "address", - }, - ], - name: "RulerChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - components: [ - { - internalType: "enum KlerosCoreRuler.RulingMode", - name: "rulingMode", - type: "uint8", - }, - { - internalType: "uint256", - name: "presetRuling", - type: "uint256", - }, - { - internalType: "bool", - name: "presetTied", - type: "bool", - }, - { - internalType: "bool", - name: "presetOverridden", - type: "bool", - }, - ], - indexed: false, - internalType: "struct KlerosCoreRuler.RulerSettings", - name: "_settings", - type: "tuple", - }, - ], - name: "RulerSettingsChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_degreeOfCoherency", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "_pnkAmount", - type: "int256", - }, - { - indexed: false, - internalType: "int256", - name: "_feeAmount", - type: "int256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "TokenAndETHShift", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - { - internalType: "bool", - name: "_jump", - type: "bool", - }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "bool", - name: "_jump", - type: "bool", - }, - ], - name: "appealCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - internalType: "address", - name: "_newRuler", - type: "address", - }, - ], - name: "changeRuler", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - internalType: "uint256", - name: "_presetRuling", - type: "uint256", - }, - { - internalType: "bool", - name: "_presetTied", - type: "bool", - }, - { - internalType: "bool", - name: "_presetOverridden", - type: "bool", - }, - ], - name: "changeRulingModeToAutomaticPreset", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "changeRulingModeToAutomaticRandom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "changeRulingModeToManual", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_toToken", - type: "address", - }, - { - internalType: "uint256", - name: "_amountInEth", - type: "uint256", - }, - ], - name: "convertEthToTokenAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "courts", - outputs: [ - { - internalType: "uint96", - name: "parent", - type: "uint96", - }, - { - internalType: "bool", - name: "hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "bool", - name: "disabled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "currencyRates", - outputs: [ - { - internalType: "bool", - name: "feePaymentAccepted", - type: "bool", - }, - { - internalType: "uint64", - name: "rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "rateDecimals", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "contract IArbitrableV2", - name: "arbitrated", - type: "address", - }, - { - internalType: "enum KlerosCoreRuler.Period", - name: "period", - type: "uint8", - }, - { - internalType: "bool", - name: "ruled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getNextDisputeID", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "totalFeesForJurors", - type: "uint256", - }, - { - internalType: "uint256", - name: "sumFeeRewardPaid", - type: "uint256", - }, - { - internalType: "contract IERC20", - name: "feeToken", - type: "address", - }, - ], - internalType: "struct KlerosCoreRuler.Round", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getTimesPerPeriod", - outputs: [ - { - internalType: "uint256[4]", - name: "timesPerPeriod", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - { - internalType: "uint256[4]", - name: "_courtParameters", - type: "uint256[4]", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pinakion", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "arbitrable", - type: "address", - }, - ], - name: "rulers", - outputs: [ - { - internalType: "address", - name: "ruler", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - name: "rulingResults", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "arbitrable", - type: "address", - }, - ], - name: "settings", - outputs: [ - { - internalType: "enum KlerosCoreRuler.RulingMode", - name: "rulingMode", - type: "uint8", - }, - { - internalType: "uint256", - name: "presetRuling", - type: "uint256", - }, - { - internalType: "bool", - name: "presetTied", - type: "bool", - }, - { - internalType: "bool", - name: "presetOverridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - ], - }, - KlerosCoreRuler_Proxy: { - address: "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - KlerosCoreSnapshotProxy: { - address: "0xEF719a5B3352F607e6C4E17b7e0cDAd8322fEC95", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract IKlerosCore", - name: "_core", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IKlerosCore", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract IKlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - KlerosCore_Implementation: { - address: "0xC1210493804eEF123096F9581Ee82B915150E54c", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "AppealFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "AppealPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "ArbitrableNotWhitelisted", - type: "error", - }, - { - inputs: [], - name: "ArbitrationFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "CannotDisableClassicDK", - type: "error", - }, - { - inputs: [], - name: "CommitPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "DisputeKitNotSupportedByCourt", - type: "error", - }, - { - inputs: [], - name: "DisputeKitOnly", - type: "error", - }, - { - inputs: [], - name: "DisputeNotAppealable", - type: "error", - }, - { - inputs: [], - name: "DisputePeriodIsFinal", - type: "error", - }, - { - inputs: [], - name: "DisputeStillDrawing", - type: "error", - }, - { - inputs: [], - name: "EvidenceNotPassedAndNotAppeal", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [], - name: "GovernorOnly", - type: "error", - }, - { - inputs: [], - name: "GuardianOrGovernorOnly", - type: "error", - }, - { - inputs: [], - name: "InvalidDisputKitParent", - type: "error", - }, - { - inputs: [], - name: "InvalidForkingCourtAsParent", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "MinStakeLowerThanParentCourt", - type: "error", - }, - { - inputs: [], - name: "MustSupportDisputeKitClassic", - type: "error", - }, - { - inputs: [], - name: "NotEligibleForStaking", - type: "error", - }, - { - inputs: [], - name: "NotEvidencePeriod", - type: "error", - }, - { - inputs: [], - name: "NotExecutionPeriod", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "RulingAlreadyExecuted", - type: "error", - }, - { - inputs: [], - name: "SortitionModuleOnly", - type: "error", - }, - { - inputs: [], - name: "StakingInTooManyCourts", - type: "error", - }, - { - inputs: [], - name: "StakingLessThanCourtMinStake", - type: "error", - }, - { - inputs: [], - name: "StakingMoreThanMaxStakePerJuror", - type: "error", - }, - { - inputs: [], - name: "StakingMoreThanMaxTotalStaked", - type: "error", - }, - { - inputs: [], - name: "StakingNotPossibleInThisCourt", - type: "error", - }, - { - inputs: [], - name: "StakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "StakingZeroWhenNoStake", - type: "error", - }, - { - inputs: [], - name: "TokenNotAccepted", - type: "error", - }, - { - inputs: [], - name: "TransferFailed", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - inputs: [], - name: "UnstakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "UnsuccessfulCall", - type: "error", - }, - { - inputs: [], - name: "UnsupportedDisputeKit", - type: "error", - }, - { - inputs: [], - name: "VotePeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "WhenNotPausedOnly", - type: "error", - }, - { - inputs: [], - name: "WhenPausedOnly", - type: "error", - }, - { - inputs: [], - name: "WrongDisputeKitIndex", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - { - indexed: true, - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "AcceptedFeeToken", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealDecision", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealPossible", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "CourtCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_fromCourtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint96", - name: "_toCourtID", - type: "uint96", - }, - ], - name: "CourtJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtModified", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "DisputeKitCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "DisputeKitEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_fromDisputeKitID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_toDisputeKitID", - type: "uint256", - }, - ], - name: "DisputeKitJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "Draw", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_pnkAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "LeftoverRewardSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - indexed: false, - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - indexed: false, - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "NewCurrencyRate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "enum KlerosCoreBase.Period", - name: "_period", - type: "uint8", - }, - ], - name: "NewPeriod", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_degreeOfCoherency", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "_pnkAmount", - type: "int256", - }, - { - indexed: false, - internalType: "int256", - name: "_feeAmount", - type: "int256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "TokenAndETHShift", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Unpaused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealPeriod", - outputs: [ - { - internalType: "uint256", - name: "start", - type: "uint256", - }, - { - internalType: "uint256", - name: "end", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "arbitrableWhitelist", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_arbitrable", - type: "address", - }, - { - internalType: "bool", - name: "_allowed", - type: "bool", - }, - ], - name: "changeArbitrableWhitelist", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_guardian", - type: "address", - }, - ], - name: "changeGuardian", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC721", - name: "_jurorNft", - type: "address", - }, - ], - name: "changeJurorNft", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract ISortitionModule", - name: "_sortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_toToken", - type: "address", - }, - { - internalType: "uint256", - name: "_amountInEth", - type: "uint256", - }, - ], - name: "convertEthToTokenAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "courts", - outputs: [ - { - internalType: "uint96", - name: "parent", - type: "uint96", - }, - { - internalType: "bool", - name: "hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "bool", - name: "disabled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "bytes", - name: "_sortitionExtraData", - type: "bytes", - }, - { - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "currencyRates", - outputs: [ - { - internalType: "bool", - name: "feePaymentAccepted", - type: "bool", - }, - { - internalType: "uint64", - name: "rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "rateDecimals", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputeKits", - outputs: [ - { - internalType: "contract IDisputeKit", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "contract IArbitrableV2", - name: "arbitrated", - type: "address", - }, - { - internalType: "enum KlerosCoreBase.Period", - name: "period", - type: "uint8", - }, - { - internalType: "bool", - name: "ruled", - type: "bool", - }, - { - internalType: "uint256", - name: "lastPeriodChange", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "uint256", - name: "nbDrawnJurors", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256[]", - name: "_disputeKitIDs", - type: "uint256[]", - }, - { - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDisputeKitsLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getPnkAtStakePerJuror", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "disputeKitID", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkAtStakePerJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalFeesForJurors", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "repartitions", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkPenalties", - type: "uint256", - }, - { - internalType: "address[]", - name: "drawnJurors", - type: "address[]", - }, - { - internalType: "uint256", - name: "sumFeeRewardPaid", - type: "uint256", - }, - { - internalType: "uint256", - name: "sumPnkRewardPaid", - type: "uint256", - }, - { - internalType: "contract IERC20", - name: "feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "drawIterations", - type: "uint256", - }, - ], - internalType: "struct KlerosCoreBase.Round", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getTimesPerPeriod", - outputs: [ - { - internalType: "uint256[4]", - name: "timesPerPeriod", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "guardian", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "address", - name: "_guardian", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - { - internalType: "contract IDisputeKit", - name: "_disputeKit", - type: "address", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256[4]", - name: "_courtParameters", - type: "uint256[4]", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "bytes", - name: "_sortitionExtraData", - type: "bytes", - }, - { - internalType: "contract ISortitionModule", - name: "_sortitionModuleAddress", - type: "address", - }, - { - internalType: "contract IERC721", - name: "_jurorNft", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "isDisputeKitJumping", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - ], - name: "isSupported", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "jurorNft", - outputs: [ - { - internalType: "contract IERC721", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "jurorProsecutionModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - 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: "pinakion", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "sortitionModule", - outputs: [ - { - internalType: "contract ISortitionModule", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "transferBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "unpause", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - KlerosCore_Proxy: { - address: "0x991d2df165670b9cac3B022f4B68D65b664222ea", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - KlerosV2NeoEarlyUser: { - address: "0xfE34a72c55e512601E7d491A9c5b36373cE34d63", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - 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: "newMinter", - type: "address", - }, - ], - name: "EventMinterAdded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldMinter", - type: "address", - }, - ], - name: "EventMinterRemoved", - 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: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "minter", - type: "address", - }, - ], - name: "addMinter", - outputs: [], - stateMutability: "nonpayable", - 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: "account", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "burn", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - ], - name: "burnBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "cid", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "getApproved", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getNumMinted", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - 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: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "isOwnerOf", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "cid", - type: "uint256", - }, - ], - name: "mint", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "cidArr", - type: "uint256[]", - }, - ], - name: "mintBatch", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "minters", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - 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: [ - { - internalType: "address", - name: "minter", - type: "address", - }, - ], - name: "removeMinter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - 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: "string", - name: "newName", - type: "string", - }, - ], - name: "setName", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "newSymbol", - type: "string", - }, - ], - name: "setSymbol", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bool", - name: "transferable", - type: "bool", - }, - ], - name: "setTransferable", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "newURI", - type: "string", - }, - ], - name: "setURI", - 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: "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: "transferable", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - PNK: { - address: "0x330bD769382cFc6d50175903434CCC8D206DCAE5", - abi: [ - { - 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: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - 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: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - 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: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - PNKFaucet: { - address: "0x0000000000000000000000000000000000000000", - abi: [ - { - inputs: [ - { - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "balance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "withdrewAlready", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - Pinakion: { - address: "0x330bD769382cFc6d50175903434CCC8D206DCAE5", - abi: [ - { - 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: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - 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: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - 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: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - PolicyRegistry: { - address: "0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_courtName", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_policy", - type: "string", - }, - ], - name: "PolicyUpdate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "policies", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - internalType: "string", - name: "_courtName", - type: "string", - }, - { - internalType: "string", - name: "_policy", - type: "string", - }, - ], - name: "setPolicy", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - PolicyRegistry_Implementation: { - address: "0xf7EE0Cd4E33C832DC05fB359896Add6E14E96C28", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_courtName", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_policy", - type: "string", - }, - ], - name: "PolicyUpdate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "policies", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - internalType: "string", - name: "_courtName", - type: "string", - }, - { - internalType: "string", - name: "_policy", - type: "string", - }, - ], - name: "setPolicy", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - PolicyRegistry_Proxy: { - address: "0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - RandomizerOracle: { - address: "0x5b8bB80f2d72D0C85caB8fB169e8170A05C94bAF", - abi: [], - }, - RandomizerRNG: { - address: "0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "callbackGasLimit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IRandomizer", - name: "_randomizer", - type: "address", - }, - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "randomNumbers", - outputs: [ - { - internalType: "uint256", - name: "number", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomizer", - outputs: [ - { - internalType: "contract IRandomizer", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_id", - type: "uint256", - }, - { - internalType: "bytes32", - name: "_value", - type: "bytes32", - }, - ], - name: "randomizerCallback", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "randomizerWithdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "receiveRandomness", - outputs: [ - { - internalType: "uint256", - name: "randomNumber", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "requester", - type: "address", - }, - ], - name: "requesterToID", - outputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_callbackGasLimit", - type: "uint256", - }, - ], - name: "setCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_randomizer", - type: "address", - }, - ], - name: "setRandomizer", - 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: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - RandomizerRNG_Implementation: { - address: "0xF1a7Cd3115F5852966430f8E3877D2221F074A2e", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "callbackGasLimit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IRandomizer", - name: "_randomizer", - type: "address", - }, - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "randomNumbers", - outputs: [ - { - internalType: "uint256", - name: "number", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomizer", - outputs: [ - { - internalType: "contract IRandomizer", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_id", - type: "uint256", - }, - { - internalType: "bytes32", - name: "_value", - type: "bytes32", - }, - ], - name: "randomizerCallback", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "randomizerWithdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "receiveRandomness", - outputs: [ - { - internalType: "uint256", - name: "randomNumber", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "requester", - type: "address", - }, - ], - name: "requesterToID", - outputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_callbackGasLimit", - type: "uint256", - }, - ], - name: "setCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_randomizer", - type: "address", - }, - ], - name: "setRandomizer", - 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", - }, - ], - }, - RandomizerRNG_Proxy: { - address: "0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - SortitionModule: { - address: "0x21A9402aDb818744B296e1d1BE58C804118DC03D", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "LeftoverPNK", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "LeftoverPNKWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "enum ISortitionModule.Phase", - name: "_phase", - type: "uint8", - }, - ], - name: "NewPhase", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "StakeDelayed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_unlock", - type: "bool", - }, - ], - name: "StakeLocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amountAllCourts", - type: "uint256", - }, - ], - name: "StakeSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_maxDrawingTime", - type: "uint256", - }, - ], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_maxStakePerJuror", - type: "uint256", - }, - ], - name: "changeMaxStakePerJuror", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_maxTotalStaked", - type: "uint256", - }, - ], - name: "changeMaxTotalStaked", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_minStakingTime", - type: "uint256", - }, - ], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract RNG", - name: "_rng", - type: "address", - }, - { - internalType: "uint256", - name: "_rngLookahead", - type: "uint256", - }, - ], - name: "changeRandomNumberGenerator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "delayedStakeReadIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delayedStakeWriteIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "delayedStakes", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "bool", - name: "alreadyTransferred", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "disputesWithoutJurors", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "executeDelayedStakes", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getJurorBalance", - outputs: [ - { - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalLocked", - type: "uint256", - }, - { - internalType: "uint256", - name: "stakedInCourt", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbCourts", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorCourtIDs", - outputs: [ - { - internalType: "uint96[]", - name: "", - type: "uint96[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorLeftoverPNK", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "uint256", - name: "_minStakingTime", - type: "uint256", - }, - { - internalType: "uint256", - name: "_maxDrawingTime", - type: "uint256", - }, - { - internalType: "contract RNG", - name: "_rng", - type: "address", - }, - { - internalType: "uint256", - name: "_rngLookahead", - type: "uint256", - }, - { - internalType: "uint256", - name: "_maxStakePerJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_maxTotalStaked", - type: "uint256", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize4", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "isJurorStaked", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "jurors", - outputs: [ - { - internalType: "uint256", - name: "stakedPnk", - type: "uint256", - }, - { - internalType: "uint256", - name: "lockedPnk", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastPhaseChange", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "jurorAccount", - type: "address", - }, - { - internalType: "uint96", - name: "courtId", - type: "uint96", - }, - ], - name: "latestDelayedStakeIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "maxDrawingTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "maxStakePerJuror", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "maxTotalStaked", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "minStakingTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_randomNumber", - type: "uint256", - }, - ], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "passPhase", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "penalizeStake", - outputs: [ - { - internalType: "uint256", - name: "pnkBalance", - type: "uint256", - }, - { - internalType: "uint256", - name: "availablePenalty", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "phase", - outputs: [ - { - internalType: "enum ISortitionModule.Phase", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomNumber", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomNumberRequestBlock", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rng", - outputs: [ - { - internalType: "contract RNG", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rngLookahead", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "_pnkWithdrawal", - type: "uint256", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_ID", - type: "bytes32", - }, - ], - name: "stakeOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "stakeOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalStaked", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "unlockStake", - 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: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "validateStake", - outputs: [ - { - internalType: "uint256", - name: "pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkWithdrawal", - type: "uint256", - }, - { - internalType: "enum StakingResult", - name: "stakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "withdrawLeftoverPNK", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - SortitionModule_Implementation: { - address: "0x3f6D0daeD166b64FCfBb9bc7c9E26423c6C08eEE", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "LeftoverPNK", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "LeftoverPNKWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "enum ISortitionModule.Phase", - name: "_phase", - type: "uint8", - }, - ], - name: "NewPhase", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "StakeDelayed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_unlock", - type: "bool", - }, - ], - name: "StakeLocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amountAllCourts", - type: "uint256", - }, - ], - name: "StakeSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_maxDrawingTime", - type: "uint256", - }, - ], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_maxStakePerJuror", - type: "uint256", - }, - ], - name: "changeMaxStakePerJuror", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_maxTotalStaked", - type: "uint256", - }, - ], - name: "changeMaxTotalStaked", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_minStakingTime", - type: "uint256", - }, - ], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract RNG", - name: "_rng", - type: "address", - }, - { - internalType: "uint256", - name: "_rngLookahead", - type: "uint256", - }, - ], - name: "changeRandomNumberGenerator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "delayedStakeReadIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delayedStakeWriteIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "delayedStakes", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "bool", - name: "alreadyTransferred", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "disputesWithoutJurors", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "executeDelayedStakes", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getJurorBalance", - outputs: [ - { - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalLocked", - type: "uint256", - }, - { - internalType: "uint256", - name: "stakedInCourt", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbCourts", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorCourtIDs", - outputs: [ - { - internalType: "uint96[]", - name: "", - type: "uint96[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorLeftoverPNK", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "uint256", - name: "_minStakingTime", - type: "uint256", - }, - { - internalType: "uint256", - name: "_maxDrawingTime", - type: "uint256", - }, - { - internalType: "contract RNG", - name: "_rng", - type: "address", - }, - { - internalType: "uint256", - name: "_rngLookahead", - type: "uint256", - }, - { - internalType: "uint256", - name: "_maxStakePerJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_maxTotalStaked", - type: "uint256", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize4", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "isJurorStaked", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "jurors", - outputs: [ - { - internalType: "uint256", - name: "stakedPnk", - type: "uint256", - }, - { - internalType: "uint256", - name: "lockedPnk", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastPhaseChange", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "jurorAccount", - type: "address", - }, - { - internalType: "uint96", - name: "courtId", - type: "uint96", - }, - ], - name: "latestDelayedStakeIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "maxDrawingTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "maxStakePerJuror", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "maxTotalStaked", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "minStakingTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_randomNumber", - type: "uint256", - }, - ], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "passPhase", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "penalizeStake", - outputs: [ - { - internalType: "uint256", - name: "pnkBalance", - type: "uint256", - }, - { - internalType: "uint256", - name: "availablePenalty", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "phase", - outputs: [ - { - internalType: "enum ISortitionModule.Phase", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomNumber", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomNumberRequestBlock", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rng", - outputs: [ - { - internalType: "contract RNG", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rngLookahead", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "_pnkWithdrawal", - type: "uint256", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_ID", - type: "bytes32", - }, - ], - name: "stakeOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "stakeOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalStaked", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "unlockStake", - 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: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "validateStake", - outputs: [ - { - internalType: "uint256", - name: "pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkWithdrawal", - type: "uint256", - }, - { - internalType: "enum StakingResult", - name: "stakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "withdrawLeftoverPNK", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - SortitionModule_Proxy: { - address: "0x21A9402aDb818744B296e1d1BE58C804118DC03D", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - TransactionBatcher: { - address: "0xBC5ef8d9ad307154447AE148c088f083d2dEa4eF", - abi: [ - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "datas", - type: "bytes[]", - }, - ], - name: "batchSend", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "datas", - type: "bytes[]", - }, - ], - name: "batchSendUnchecked", - outputs: [], - stateMutability: "payable", - type: "function", - }, - ], - }, - WETH: { - address: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_logic", - type: "address", - }, - { - internalType: "address", - name: "admin_", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "payable", - 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: "implementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "admin_", - 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: "implementation_", - 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", - }, - ], - }, - }, -} as const; diff --git a/contracts/deployments/arbitrum/.chainId b/contracts/deployments/arbitrum/.chainId deleted file mode 100644 index 1395ca74e..000000000 --- a/contracts/deployments/arbitrum/.chainId +++ /dev/null @@ -1 +0,0 @@ -42161 diff --git a/contracts/deployments/arbitrum/BlockHashRNG.json b/contracts/deployments/arbitrum/BlockHashRNG.json deleted file mode 100644 index 643e13451..000000000 --- a/contracts/deployments/arbitrum/BlockHashRNG.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "address": "0x39D123fc4cFD24EA5bB76195f9ecFE1f0DF35b0B", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "block", - "type": "uint256" - } - ], - "name": "randomNumbers", - "outputs": [ - { - "internalType": "uint256", - "name": "number", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "receiveRandomness", - "outputs": [ - { - "internalType": "uint256", - "name": "randomNumber", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "requestRandomness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x6ef5328c567093fa94fc10f1b23dd73f62b533aaa2ceaaa676ae2e2a15adc83b", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x39D123fc4cFD24EA5bB76195f9ecFE1f0DF35b0B", - "transactionIndex": 3, - "gasUsed": "224305", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xf88fbe2248f81d28c062b7380dcc474fb084e579a3766bc6ce77f5649187078b", - "transactionHash": "0x6ef5328c567093fa94fc10f1b23dd73f62b533aaa2ceaaa676ae2e2a15adc83b", - "logs": [], - "blockNumber": 278824880, - "cumulativeGasUsed": "584927", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"randomNumbers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"receiveRandomness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"requestRandomness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Cl\\u00e9ment Lesaege - \",\"details\":\"Random Number Generator returning the blockhash with a fallback behaviour. In case no one called it within the 256 blocks, it returns the previous blockhash. This contract must be used when returning 0 is a worse failure mode than returning another blockhash. Allows saving the random number for use in the future. It allows the contract to still access the blockhash even after 256 blocks.\",\"kind\":\"dev\",\"methods\":{\"receiveRandomness(uint256)\":{\"details\":\"Return the random number. If it has not been saved and is still computable compute it.\",\"params\":{\"_block\":\"Block the random number is linked to.\"},\"returns\":{\"randomNumber\":\"The random number or 0 if it is not ready or has not been requested.\"}},\"requestRandomness(uint256)\":{\"details\":\"Request a random number.\",\"params\":{\"_block\":\"Block the random number is linked to.\"}}},\"title\":\"Random Number Generator using blockhash with fallback.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rng/BlockhashRNG.sol\":\"BlockHashRNG\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/rng/BlockhashRNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./RNG.sol\\\";\\n\\n/// @title Random Number Generator using blockhash with fallback.\\n/// @author Cl\\u00e9ment Lesaege - \\n/// @dev\\n/// Random Number Generator returning the blockhash with a fallback behaviour.\\n/// In case no one called it within the 256 blocks, it returns the previous blockhash.\\n/// This contract must be used when returning 0 is a worse failure mode than returning another blockhash.\\n/// Allows saving the random number for use in the future. It allows the contract to still access the blockhash even after 256 blocks.\\ncontract BlockHashRNG is RNG {\\n mapping(uint256 block => uint256 number) public randomNumbers; // randomNumbers[block] is the random number for this block, 0 otherwise.\\n\\n /// @dev Request a random number.\\n /// @param _block Block the random number is linked to.\\n function requestRandomness(uint256 _block) external override {\\n // nop\\n }\\n\\n /// @dev Return the random number. If it has not been saved and is still computable compute it.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber The random number or 0 if it is not ready or has not been requested.\\n function receiveRandomness(uint256 _block) external override returns (uint256 randomNumber) {\\n randomNumber = randomNumbers[_block];\\n if (randomNumber != 0) {\\n return randomNumber;\\n }\\n\\n if (_block < block.number) {\\n // The random number is not already set and can be.\\n if (blockhash(_block) != 0x0) {\\n // Normal case.\\n randomNumber = uint256(blockhash(_block));\\n } else {\\n // The contract was not called in time. Fallback to returning previous blockhash.\\n randomNumber = uint256(blockhash(block.number - 1));\\n }\\n }\\n randomNumbers[_block] = randomNumber;\\n }\\n}\\n\",\"keccak256\":\"0xb2ae9b40700c5915c1cbe57dde68486b669cfea1fdfec18d5b42ffbde44031de\",\"license\":\"MIT\"},\"src/rng/RNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\ninterface RNG {\\n /// @dev Request a random number.\\n /// @param _block Block linked to the request.\\n function requestRandomness(uint256 _block) external;\\n\\n /// @dev Receive the random number.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber Random Number. If the number is not ready or has not been required 0 instead.\\n function receiveRandomness(uint256 _block) external returns (uint256 randomNumber);\\n}\\n\",\"keccak256\":\"0xf92e0cf768afefc5cc6ef786c263b67dd00c021aa5753213dbbc33014adb68c5\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50610169806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806313cf9054146100465780635257cd901461006b5780637363ae1f1461008b575b600080fd5b6100596100543660046100f3565b61009e565b60405190815260200160405180910390f35b6100596100793660046100f3565b60006020819052908152604090205481565b61009c6100993660046100f3565b50565b005b60008181526020819052604090205480156100b857919050565b438210156100de578140156100cf575080406100de565b6100da60014361010c565b4090505b60009182526020829052604090912081905590565b60006020828403121561010557600080fd5b5035919050565b8181038181111561012d57634e487b7160e01b600052601160045260246000fd5b9291505056fea26469706673582212208af4d57cc9727b11cb8cd9b8e8dca8477db4c383e58db8f1fbccf103ef66318d64736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806313cf9054146100465780635257cd901461006b5780637363ae1f1461008b575b600080fd5b6100596100543660046100f3565b61009e565b60405190815260200160405180910390f35b6100596100793660046100f3565b60006020819052908152604090205481565b61009c6100993660046100f3565b50565b005b60008181526020819052604090205480156100b857919050565b438210156100de578140156100cf575080406100de565b6100da60014361010c565b4090505b60009182526020829052604090912081905590565b60006020828403121561010557600080fd5b5035919050565b8181038181111561012d57634e487b7160e01b600052601160045260246000fd5b9291505056fea26469706673582212208af4d57cc9727b11cb8cd9b8e8dca8477db4c383e58db8f1fbccf103ef66318d64736f6c63430008180033", - "devdoc": { - "author": "Clément Lesaege - ", - "details": "Random Number Generator returning the blockhash with a fallback behaviour. In case no one called it within the 256 blocks, it returns the previous blockhash. This contract must be used when returning 0 is a worse failure mode than returning another blockhash. Allows saving the random number for use in the future. It allows the contract to still access the blockhash even after 256 blocks.", - "kind": "dev", - "methods": { - "receiveRandomness(uint256)": { - "details": "Return the random number. If it has not been saved and is still computable compute it.", - "params": { - "_block": "Block the random number is linked to." - }, - "returns": { - "randomNumber": "The random number or 0 if it is not ready or has not been requested." - } - }, - "requestRandomness(uint256)": { - "details": "Request a random number.", - "params": { - "_block": "Block the random number is linked to." - } - } - }, - "title": "Random Number Generator using blockhash with fallback.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 34790, - "contract": "src/rng/BlockhashRNG.sol:BlockHashRNG", - "label": "randomNumbers", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrum/ChainlinkRNG.json b/contracts/deployments/arbitrum/ChainlinkRNG.json deleted file mode 100644 index 694e7396e..000000000 --- a/contracts/deployments/arbitrum/ChainlinkRNG.json +++ /dev/null @@ -1,749 +0,0 @@ -{ - "address": "0x897d83a7d5F23555eFA15e1BE297d5503522cbA3", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_sortitionModule", - "type": "address" - }, - { - "internalType": "address", - "name": "_vrfCoordinator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_keyHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_subscriptionId", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "_requestConfirmations", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "_callbackGasLimit", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "have", - "type": "address" - }, - { - "internalType": "address", - "name": "want", - "type": "address" - } - ], - "name": "OnlyCoordinatorCanFulfill", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "have", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "coordinator", - "type": "address" - } - ], - "name": "OnlyOwnerOrCoordinator", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "vrfCoordinator", - "type": "address" - } - ], - "name": "CoordinatorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "randomWord", - "type": "uint256" - } - ], - "name": "RequestFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "name": "RequestSent", - "type": "event" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "callbackGasLimit", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_callbackGasLimit", - "type": "uint32" - } - ], - "name": "changeCallbackGasLimit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_keyHash", - "type": "bytes32" - } - ], - "name": "changeKeyHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_requestConfirmations", - "type": "uint16" - } - ], - "name": "changeRequestConfirmations", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_subscriptionId", - "type": "uint256" - } - ], - "name": "changeSubscriptionId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_vrfCoordinator", - "type": "address" - } - ], - "name": "changeVrfCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keyHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastRequestId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "name": "randomNumbers", - "outputs": [ - { - "internalType": "uint256", - "name": "number", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "randomWords", - "type": "uint256[]" - } - ], - "name": "rawFulfillRandomWords", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "receiveRandomness", - "outputs": [ - { - "internalType": "uint256", - "name": "randomNumber", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "requestConfirmations", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "requestRandomness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "s_vrfCoordinator", - "outputs": [ - { - "internalType": "contract IVRFCoordinatorV2Plus", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_vrfCoordinator", - "type": "address" - } - ], - "name": "setCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "subscriptionId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xe836e09161f9bedd5874f29ca3869b3c274962e386177b13dedf159b3baec588", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x897d83a7d5F23555eFA15e1BE297d5503522cbA3", - "transactionIndex": 1, - "gasUsed": "1048593", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x2a5ba9c10406df82a46799081e8833ecaab8682bddbdce9c30b891706649721f", - "transactionHash": "0xe836e09161f9bedd5874f29ca3869b3c274962e386177b13dedf159b3baec588", - "logs": [], - "blockNumber": 283670668, - "cumulativeGasUsed": "1048593", - "status": 1, - "byzantium": true - }, - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0xf97f4df75117a78c1A5a0DBb814Af92458539FB4", - "0xe9f223d7d83ec85c4f78042a4845af3a1c8df7757b4997b815ce4b8d07aca68c", - "66240499937595191069677958665918759554657443303079118766000192000140992834352", - 200, - 100000 - ], - "numDeployments": 1, - "solcInputHash": "409820253ec776b564318c3061b7e926", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_sortitionModule\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vrfCoordinator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_keyHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_subscriptionId\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"_requestConfirmations\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"_callbackGasLimit\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"have\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"want\",\"type\":\"address\"}],\"name\":\"OnlyCoordinatorCanFulfill\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"have\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"coordinator\",\"type\":\"address\"}],\"name\":\"OnlyOwnerOrCoordinator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"vrfCoordinator\",\"type\":\"address\"}],\"name\":\"CoordinatorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"randomWord\",\"type\":\"uint256\"}],\"name\":\"RequestFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"RequestSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"callbackGasLimit\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_callbackGasLimit\",\"type\":\"uint32\"}],\"name\":\"changeCallbackGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_keyHash\",\"type\":\"bytes32\"}],\"name\":\"changeKeyHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_requestConfirmations\",\"type\":\"uint16\"}],\"name\":\"changeRequestConfirmations\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sortitionModule\",\"type\":\"address\"}],\"name\":\"changeSortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_subscriptionId\",\"type\":\"uint256\"}],\"name\":\"changeSubscriptionId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vrfCoordinator\",\"type\":\"address\"}],\"name\":\"changeVrfCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keyHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastRequestId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"randomNumbers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"randomWords\",\"type\":\"uint256[]\"}],\"name\":\"rawFulfillRandomWords\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"receiveRandomness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestConfirmations\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"requestRandomness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_vrfCoordinator\",\"outputs\":[{\"internalType\":\"contract IVRFCoordinatorV2Plus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vrfCoordinator\",\"type\":\"address\"}],\"name\":\"setCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sortitionModule\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subscriptionId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RequestFulfilled(uint256,uint256)\":{\"params\":{\"randomWord\":\"The random value answering the request.\",\"requestId\":\"The ID of the request\"}},\"RequestSent(uint256)\":{\"details\":\"Emitted when a request is sent to the VRF Coordinator\",\"params\":{\"requestId\":\"The ID of the request\"}}},\"kind\":\"dev\",\"methods\":{\"changeCallbackGasLimit(uint32)\":{\"details\":\"Changes the callback gas limit of the contract.\",\"params\":{\"_callbackGasLimit\":\"The new callback gas limit.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the governor of the contract.\",\"params\":{\"_governor\":\"The new governor.\"}},\"changeKeyHash(bytes32)\":{\"details\":\"Changes the key hash of the contract.\",\"params\":{\"_keyHash\":\"The new key hash.\"}},\"changeRequestConfirmations(uint16)\":{\"details\":\"Changes the request confirmations of the contract.\",\"params\":{\"_requestConfirmations\":\"The new request confirmations.\"}},\"changeSortitionModule(address)\":{\"details\":\"Changes the sortition module of the contract.\",\"params\":{\"_sortitionModule\":\"The new sortition module.\"}},\"changeSubscriptionId(uint256)\":{\"details\":\"Changes the subscription ID of the contract.\",\"params\":{\"_subscriptionId\":\"The new subscription ID.\"}},\"changeVrfCoordinator(address)\":{\"details\":\"Changes the VRF Coordinator of the contract.\",\"params\":{\"_vrfCoordinator\":\"The new VRF Coordinator.\"}},\"constructor\":{\"details\":\"Constructor, initializing the implementation to reduce attack surface.https://docs.chain.link/vrf/v2-5/subscription/get-a-random-number\",\"params\":{\"_callbackGasLimit\":\"The limit for how much gas to use for the callback request to the contract's fulfillRandomWords() function.\",\"_governor\":\"The Governor of the contract.\",\"_keyHash\":\"The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job).\",\"_requestConfirmations\":\"How many confirmations the Chainlink node should wait before responding.\",\"_sortitionModule\":\"The address of the SortitionModule contract.\",\"_subscriptionId\":\"The unique identifier of the subscription used for funding requests.\",\"_vrfCoordinator\":\"The address of the VRFCoordinator contract.\"}},\"receiveRandomness(uint256)\":{\"details\":\"Return the random number.\",\"returns\":{\"randomNumber\":\"The random number or 0 if it is not ready or has not been requested.\"}},\"requestRandomness(uint256)\":{\"details\":\"Request a random number. SortitionModule only.\"}},\"title\":\"Random Number Generator that uses Chainlink VRF v2.5 https://blog.chain.link/introducing-vrf-v2-5/\",\"version\":1},\"userdoc\":{\"events\":{\"RequestFulfilled(uint256,uint256)\":{\"notice\":\"Emitted when a request has been fulfilled.\"}},\"kind\":\"user\",\"methods\":{\"acceptOwnership()\":{\"notice\":\"Allows an ownership transfer to be completed by the recipient.\"},\"owner()\":{\"notice\":\"Get the current owner\"},\"setCoordinator(address)\":{\"notice\":\"Sets the VRF Coordinator addressThis method should only be callable by the coordinator or contract owner\"},\"transferOwnership(address)\":{\"notice\":\"Allows an owner to begin transferring ownership to a new address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rng/ChainlinkRNG.sol\":\"ChainlinkRNG\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(address newOwner) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\",\"keccak256\":\"0xdcb0e9135ddbe71ee27ba99fa06656960c66c964cf2ecb29696da1c1427d9861\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(address to) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(address to) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x2422a055657a87e98be61f8f31abb1824ec50fd0f73949f4e3c6ac877efb6da8\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(address recipient) external;\\n\\n function acceptOwnership() external;\\n}\\n\",\"keccak256\":\"0x885de72b7b4e4f1bf8ba817a3f2bcc37fd9022d342c4ce76782151c30122d767\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport {IVRFCoordinatorV2Plus} from \\\"./interfaces/IVRFCoordinatorV2Plus.sol\\\";\\nimport {IVRFMigratableConsumerV2Plus} from \\\"./interfaces/IVRFMigratableConsumerV2Plus.sol\\\";\\nimport {ConfirmedOwner} from \\\"../../shared/access/ConfirmedOwner.sol\\\";\\n\\n/** ****************************************************************************\\n * @notice Interface for contracts using VRF randomness\\n * *****************************************************************************\\n * @dev PURPOSE\\n *\\n * @dev Reggie the Random Oracle (not his real job) wants to provide randomness\\n * @dev to Vera the verifier in such a way that Vera can be sure he's not\\n * @dev making his output up to suit himself. Reggie provides Vera a public key\\n * @dev to which he knows the secret key. Each time Vera provides a seed to\\n * @dev Reggie, he gives back a value which is computed completely\\n * @dev deterministically from the seed and the secret key.\\n *\\n * @dev Reggie provides a proof by which Vera can verify that the output was\\n * @dev correctly computed once Reggie tells it to her, but without that proof,\\n * @dev the output is indistinguishable to her from a uniform random sample\\n * @dev from the output space.\\n *\\n * @dev The purpose of this contract is to make it easy for unrelated contracts\\n * @dev to talk to Vera the verifier about the work Reggie is doing, to provide\\n * @dev simple access to a verifiable source of randomness. It ensures 2 things:\\n * @dev 1. The fulfillment came from the VRFCoordinatorV2Plus.\\n * @dev 2. The consumer contract implements fulfillRandomWords.\\n * *****************************************************************************\\n * @dev USAGE\\n *\\n * @dev Calling contracts must inherit from VRFConsumerBaseV2Plus, and can\\n * @dev initialize VRFConsumerBaseV2Plus's attributes in their constructor as\\n * @dev shown:\\n *\\n * @dev contract VRFConsumerV2Plus is VRFConsumerBaseV2Plus {\\n * @dev constructor(, address _vrfCoordinator, address _subOwner)\\n * @dev VRFConsumerBaseV2Plus(_vrfCoordinator, _subOwner) public {\\n * @dev \\n * @dev }\\n * @dev }\\n *\\n * @dev The oracle will have given you an ID for the VRF keypair they have\\n * @dev committed to (let's call it keyHash). Create a subscription, fund it\\n * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface\\n * @dev subscription management functions).\\n * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations,\\n * @dev callbackGasLimit, numWords, extraArgs),\\n * @dev see (IVRFCoordinatorV2Plus for a description of the arguments).\\n *\\n * @dev Once the VRFCoordinatorV2Plus has received and validated the oracle's response\\n * @dev to your request, it will call your contract's fulfillRandomWords method.\\n *\\n * @dev The randomness argument to fulfillRandomWords is a set of random words\\n * @dev generated from your requestId and the blockHash of the request.\\n *\\n * @dev If your contract could have concurrent requests open, you can use the\\n * @dev requestId returned from requestRandomWords to track which response is associated\\n * @dev with which randomness request.\\n * @dev See \\\"SECURITY CONSIDERATIONS\\\" for principles to keep in mind,\\n * @dev if your contract could have multiple requests in flight simultaneously.\\n *\\n * @dev Colliding `requestId`s are cryptographically impossible as long as seeds\\n * @dev differ.\\n *\\n * *****************************************************************************\\n * @dev SECURITY CONSIDERATIONS\\n *\\n * @dev A method with the ability to call your fulfillRandomness method directly\\n * @dev could spoof a VRF response with any random value, so it's critical that\\n * @dev it cannot be directly called by anything other than this base contract\\n * @dev (specifically, by the VRFConsumerBaseV2Plus.rawFulfillRandomness method).\\n *\\n * @dev For your users to trust that your contract's random behavior is free\\n * @dev from malicious interference, it's best if you can write it so that all\\n * @dev behaviors implied by a VRF response are executed *during* your\\n * @dev fulfillRandomness method. If your contract must store the response (or\\n * @dev anything derived from it) and use it later, you must ensure that any\\n * @dev user-significant behavior which depends on that stored value cannot be\\n * @dev manipulated by a subsequent VRF request.\\n *\\n * @dev Similarly, both miners and the VRF oracle itself have some influence\\n * @dev over the order in which VRF responses appear on the blockchain, so if\\n * @dev your contract could have multiple VRF requests in flight simultaneously,\\n * @dev you must ensure that the order in which the VRF responses arrive cannot\\n * @dev be used to manipulate your contract's user-significant behavior.\\n *\\n * @dev Since the block hash of the block which contains the requestRandomness\\n * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful\\n * @dev miner could, in principle, fork the blockchain to evict the block\\n * @dev containing the request, forcing the request to be included in a\\n * @dev different block with a different hash, and therefore a different input\\n * @dev to the VRF. However, such an attack would incur a substantial economic\\n * @dev cost. This cost scales with the number of blocks the VRF oracle waits\\n * @dev until it calls responds to a request. It is for this reason that\\n * @dev that you can signal to an oracle you'd like them to wait longer before\\n * @dev responding to the request (however this is not enforced in the contract\\n * @dev and so remains effective only in the case of unmodified oracle software).\\n */\\nabstract contract VRFConsumerBaseV2Plus is IVRFMigratableConsumerV2Plus, ConfirmedOwner {\\n error OnlyCoordinatorCanFulfill(address have, address want);\\n error OnlyOwnerOrCoordinator(address have, address owner, address coordinator);\\n error ZeroAddress();\\n\\n // s_vrfCoordinator should be used by consumers to make requests to vrfCoordinator\\n // so that coordinator reference is updated after migration\\n IVRFCoordinatorV2Plus public s_vrfCoordinator;\\n\\n /**\\n * @param _vrfCoordinator address of VRFCoordinator contract\\n */\\n constructor(address _vrfCoordinator) ConfirmedOwner(msg.sender) {\\n if (_vrfCoordinator == address(0)) {\\n revert ZeroAddress();\\n }\\n s_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator);\\n }\\n\\n /**\\n * @notice fulfillRandomness handles the VRF response. Your contract must\\n * @notice implement it. See \\\"SECURITY CONSIDERATIONS\\\" above for important\\n * @notice principles to keep in mind when implementing your fulfillRandomness\\n * @notice method.\\n *\\n * @dev VRFConsumerBaseV2Plus expects its subcontracts to have a method with this\\n * @dev signature, and will call it once it has verified the proof\\n * @dev associated with the randomness. (It is triggered via a call to\\n * @dev rawFulfillRandomness, below.)\\n *\\n * @param requestId The Id initially returned by requestRandomness\\n * @param randomWords the VRF output expanded to the requested number of words\\n */\\n // solhint-disable-next-line chainlink-solidity/prefix-internal-functions-with-underscore\\n function fulfillRandomWords(uint256 requestId, uint256[] calldata randomWords) internal virtual;\\n\\n // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF\\n // proof. rawFulfillRandomness then calls fulfillRandomness, after validating\\n // the origin of the call\\n function rawFulfillRandomWords(uint256 requestId, uint256[] calldata randomWords) external {\\n if (msg.sender != address(s_vrfCoordinator)) {\\n revert OnlyCoordinatorCanFulfill(msg.sender, address(s_vrfCoordinator));\\n }\\n fulfillRandomWords(requestId, randomWords);\\n }\\n\\n /**\\n * @inheritdoc IVRFMigratableConsumerV2Plus\\n */\\n function setCoordinator(address _vrfCoordinator) external override onlyOwnerOrCoordinator {\\n if (_vrfCoordinator == address(0)) {\\n revert ZeroAddress();\\n }\\n s_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator);\\n\\n emit CoordinatorSet(_vrfCoordinator);\\n }\\n\\n modifier onlyOwnerOrCoordinator() {\\n if (msg.sender != owner() && msg.sender != address(s_vrfCoordinator)) {\\n revert OnlyOwnerOrCoordinator(msg.sender, owner(), address(s_vrfCoordinator));\\n }\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x0c92838396c5abe72754ebeae526a0434dd53fdaf63e6b98111aebd6114cfcc2\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFCoordinatorV2Plus.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {VRFV2PlusClient} from \\\"../libraries/VRFV2PlusClient.sol\\\";\\nimport {IVRFSubscriptionV2Plus} from \\\"./IVRFSubscriptionV2Plus.sol\\\";\\n\\n// Interface that enables consumers of VRFCoordinatorV2Plus to be future-proof for upgrades\\n// This interface is supported by subsequent versions of VRFCoordinatorV2Plus\\ninterface IVRFCoordinatorV2Plus is IVRFSubscriptionV2Plus {\\n /**\\n * @notice Request a set of random words.\\n * @param req - a struct containing following fields for randomness request:\\n * keyHash - Corresponds to a particular oracle job which uses\\n * that key for generating the VRF proof. Different keyHash's have different gas price\\n * ceilings, so you can select a specific one to bound your maximum per request cost.\\n * subId - The ID of the VRF subscription. Must be funded\\n * with the minimum subscription balance required for the selected keyHash.\\n * requestConfirmations - How many blocks you'd like the\\n * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS\\n * for why you may want to request more. The acceptable range is\\n * [minimumRequestBlockConfirmations, 200].\\n * callbackGasLimit - How much gas you'd like to receive in your\\n * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords\\n * may be slightly less than this amount because of gas used calling the function\\n * (argument decoding etc.), so you may need to request slightly more than you expect\\n * to have inside fulfillRandomWords. The acceptable range is\\n * [0, maxGasLimit]\\n * numWords - The number of uint256 random values you'd like to receive\\n * in your fulfillRandomWords callback. Note these numbers are expanded in a\\n * secure way by the VRFCoordinator from a single random value supplied by the oracle.\\n * extraArgs - abi-encoded extra args\\n * @return requestId - A unique identifier of the request. Can be used to match\\n * a request to a response in fulfillRandomWords.\\n */\\n function requestRandomWords(VRFV2PlusClient.RandomWordsRequest calldata req) external returns (uint256 requestId);\\n}\\n\",\"keccak256\":\"0x7dca2a64690ddd95ee05e422e1f61e7c1d701aaf5be1390ae12e9bd144266c36\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFMigratableConsumerV2Plus.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @notice The IVRFMigratableConsumerV2Plus interface defines the\\n/// @notice method required to be implemented by all V2Plus consumers.\\n/// @dev This interface is designed to be used in VRFConsumerBaseV2Plus.\\ninterface IVRFMigratableConsumerV2Plus {\\n event CoordinatorSet(address vrfCoordinator);\\n\\n /// @notice Sets the VRF Coordinator address\\n /// @notice This method should only be callable by the coordinator or contract owner\\n function setCoordinator(address vrfCoordinator) external;\\n}\\n\",\"keccak256\":\"0x8be8744e3b8380dc85354cf110e8caef8f394266e79120ad675a7da835ed2a85\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFSubscriptionV2Plus.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @notice The IVRFSubscriptionV2Plus interface defines the subscription\\n/// @notice related methods implemented by the V2Plus coordinator.\\ninterface IVRFSubscriptionV2Plus {\\n /**\\n * @notice Add a consumer to a VRF subscription.\\n * @param subId - ID of the subscription\\n * @param consumer - New consumer which can use the subscription\\n */\\n function addConsumer(uint256 subId, address consumer) external;\\n\\n /**\\n * @notice Remove a consumer from a VRF subscription.\\n * @param subId - ID of the subscription\\n * @param consumer - Consumer to remove from the subscription\\n */\\n function removeConsumer(uint256 subId, address consumer) external;\\n\\n /**\\n * @notice Cancel a subscription\\n * @param subId - ID of the subscription\\n * @param to - Where to send the remaining LINK to\\n */\\n function cancelSubscription(uint256 subId, address to) external;\\n\\n /**\\n * @notice Accept subscription owner transfer.\\n * @param subId - ID of the subscription\\n * @dev will revert if original owner of subId has\\n * not requested that msg.sender become the new owner.\\n */\\n function acceptSubscriptionOwnerTransfer(uint256 subId) external;\\n\\n /**\\n * @notice Request subscription owner transfer.\\n * @param subId - ID of the subscription\\n * @param newOwner - proposed new owner of the subscription\\n */\\n function requestSubscriptionOwnerTransfer(uint256 subId, address newOwner) external;\\n\\n /**\\n * @notice Create a VRF subscription.\\n * @return subId - A unique subscription id.\\n * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer.\\n * @dev Note to fund the subscription with LINK, use transferAndCall. For example\\n * @dev LINKTOKEN.transferAndCall(\\n * @dev address(COORDINATOR),\\n * @dev amount,\\n * @dev abi.encode(subId));\\n * @dev Note to fund the subscription with Native, use fundSubscriptionWithNative. Be sure\\n * @dev to send Native with the call, for example:\\n * @dev COORDINATOR.fundSubscriptionWithNative{value: amount}(subId);\\n */\\n function createSubscription() external returns (uint256 subId);\\n\\n /**\\n * @notice Get a VRF subscription.\\n * @param subId - ID of the subscription\\n * @return balance - LINK balance of the subscription in juels.\\n * @return nativeBalance - native balance of the subscription in wei.\\n * @return reqCount - Requests count of subscription.\\n * @return owner - owner of the subscription.\\n * @return consumers - list of consumer address which are able to use this subscription.\\n */\\n function getSubscription(\\n uint256 subId\\n )\\n external\\n view\\n returns (uint96 balance, uint96 nativeBalance, uint64 reqCount, address owner, address[] memory consumers);\\n\\n /*\\n * @notice Check to see if there exists a request commitment consumers\\n * for all consumers and keyhashes for a given sub.\\n * @param subId - ID of the subscription\\n * @return true if there exists at least one unfulfilled request for the subscription, false\\n * otherwise.\\n */\\n function pendingRequestExists(uint256 subId) external view returns (bool);\\n\\n /**\\n * @notice Paginate through all active VRF subscriptions.\\n * @param startIndex index of the subscription to start from\\n * @param maxCount maximum number of subscriptions to return, 0 to return all\\n * @dev the order of IDs in the list is **not guaranteed**, therefore, if making successive calls, one\\n * @dev should consider keeping the blockheight constant to ensure a holistic picture of the contract state\\n */\\n function getActiveSubscriptionIds(uint256 startIndex, uint256 maxCount) external view returns (uint256[] memory);\\n\\n /**\\n * @notice Fund a subscription with native.\\n * @param subId - ID of the subscription\\n * @notice This method expects msg.value to be greater than or equal to 0.\\n */\\n function fundSubscriptionWithNative(uint256 subId) external payable;\\n}\\n\",\"keccak256\":\"0x85b348297ce36794e3bf97a47c001fc216bd0ee243e91514a7b395f3fcd189b0\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/libraries/VRFV2PlusClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n// End consumer library.\\nlibrary VRFV2PlusClient {\\n // extraArgs will evolve to support new features\\n bytes4 public constant EXTRA_ARGS_V1_TAG = bytes4(keccak256(\\\"VRF ExtraArgsV1\\\"));\\n struct ExtraArgsV1 {\\n bool nativePayment;\\n }\\n\\n struct RandomWordsRequest {\\n bytes32 keyHash;\\n uint256 subId;\\n uint16 requestConfirmations;\\n uint32 callbackGasLimit;\\n uint32 numWords;\\n bytes extraArgs;\\n }\\n\\n function _argsToBytes(ExtraArgsV1 memory extraArgs) internal pure returns (bytes memory bts) {\\n return abi.encodeWithSelector(EXTRA_ARGS_V1_TAG, extraArgs);\\n }\\n}\\n\",\"keccak256\":\"0x839ad7a737ef18147b518b4ec3cbaf4a49dc994db65cf8369ed4e69d169a98a6\",\"license\":\"MIT\"},\"src/rng/ChainlinkRNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport {VRFConsumerBaseV2Plus, IVRFCoordinatorV2Plus} from \\\"@chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus.sol\\\";\\nimport {VRFV2PlusClient} from \\\"@chainlink/contracts/src/v0.8/vrf/dev/libraries/VRFV2PlusClient.sol\\\";\\n\\nimport \\\"./RNG.sol\\\";\\n\\n/// @title Random Number Generator that uses Chainlink VRF v2.5\\n/// https://blog.chain.link/introducing-vrf-v2-5/\\ncontract ChainlinkRNG is RNG, VRFConsumerBaseV2Plus {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The address that can withdraw funds.\\n address public sortitionModule; // The address of the SortitionModule.\\n bytes32 public keyHash; // The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job).\\n uint256 public subscriptionId; // The unique identifier of the subscription used for funding requests.\\n uint16 public requestConfirmations; // How many confirmations the Chainlink node should wait before responding.\\n // 22 bytes remaining in slot\\n uint32 public callbackGasLimit; // Gas limit for the Chainlink callback.\\n uint256 public lastRequestId; // The last request ID.\\n mapping(uint256 requestId => uint256 number) public randomNumbers; // randomNumbers[requestID] is the random number for this request id, 0 otherwise.\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a request is sent to the VRF Coordinator\\n /// @param requestId The ID of the request\\n event RequestSent(uint256 indexed requestId);\\n\\n /// Emitted when a request has been fulfilled.\\n /// @param requestId The ID of the request\\n /// @param randomWord The random value answering the request.\\n event RequestFulfilled(uint256 indexed requestId, uint256 randomWord);\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Governor only\\\");\\n _;\\n }\\n\\n modifier onlyBySortitionModule() {\\n require(sortitionModule == msg.sender, \\\"SortitionModule only\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n /// @param _governor The Governor of the contract.\\n /// @param _sortitionModule The address of the SortitionModule contract.\\n /// @param _vrfCoordinator The address of the VRFCoordinator contract.\\n /// @param _keyHash The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job).\\n /// @param _subscriptionId The unique identifier of the subscription used for funding requests.\\n /// @param _requestConfirmations How many confirmations the Chainlink node should wait before responding.\\n /// @param _callbackGasLimit The limit for how much gas to use for the callback request to the contract's fulfillRandomWords() function.\\n /// @dev https://docs.chain.link/vrf/v2-5/subscription/get-a-random-number\\n constructor(\\n address _governor,\\n address _sortitionModule,\\n address _vrfCoordinator,\\n bytes32 _keyHash,\\n uint256 _subscriptionId,\\n uint16 _requestConfirmations,\\n uint32 _callbackGasLimit\\n ) VRFConsumerBaseV2Plus(_vrfCoordinator) {\\n governor = _governor;\\n sortitionModule = _sortitionModule;\\n keyHash = _keyHash;\\n subscriptionId = _subscriptionId;\\n requestConfirmations = _requestConfirmations;\\n callbackGasLimit = _callbackGasLimit;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor of the contract.\\n /// @param _governor The new governor.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the sortition module of the contract.\\n /// @param _sortitionModule The new sortition module.\\n function changeSortitionModule(address _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Changes the VRF Coordinator of the contract.\\n /// @param _vrfCoordinator The new VRF Coordinator.\\n function changeVrfCoordinator(address _vrfCoordinator) external onlyByGovernor {\\n s_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator);\\n emit CoordinatorSet(_vrfCoordinator);\\n }\\n\\n /// @dev Changes the key hash of the contract.\\n /// @param _keyHash The new key hash.\\n function changeKeyHash(bytes32 _keyHash) external onlyByGovernor {\\n keyHash = _keyHash;\\n }\\n\\n /// @dev Changes the subscription ID of the contract.\\n /// @param _subscriptionId The new subscription ID.\\n function changeSubscriptionId(uint256 _subscriptionId) external onlyByGovernor {\\n subscriptionId = _subscriptionId;\\n }\\n\\n /// @dev Changes the request confirmations of the contract.\\n /// @param _requestConfirmations The new request confirmations.\\n function changeRequestConfirmations(uint16 _requestConfirmations) external onlyByGovernor {\\n requestConfirmations = _requestConfirmations;\\n }\\n\\n /// @dev Changes the callback gas limit of the contract.\\n /// @param _callbackGasLimit The new callback gas limit.\\n function changeCallbackGasLimit(uint32 _callbackGasLimit) external onlyByGovernor {\\n callbackGasLimit = _callbackGasLimit;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Request a random number. SortitionModule only.\\n function requestRandomness(uint256 /*_block*/) external override onlyBySortitionModule {\\n // Will revert if subscription is not set and funded.\\n uint256 requestId = s_vrfCoordinator.requestRandomWords(\\n VRFV2PlusClient.RandomWordsRequest({\\n keyHash: keyHash,\\n subId: subscriptionId,\\n requestConfirmations: requestConfirmations,\\n callbackGasLimit: callbackGasLimit,\\n numWords: 1,\\n extraArgs: VRFV2PlusClient._argsToBytes(\\n // Set nativePayment to true to pay for VRF requests with ETH instead of LINK\\n VRFV2PlusClient.ExtraArgsV1({nativePayment: true})\\n )\\n })\\n );\\n lastRequestId = requestId;\\n emit RequestSent(requestId);\\n }\\n\\n /// @dev Callback function called by the VRF Coordinator when the random value is generated.\\n /// @param _requestId The ID of the request.\\n /// @param _randomWords The random values answering the request.\\n function fulfillRandomWords(uint256 _requestId, uint256[] calldata _randomWords) internal override {\\n // Access control is handled by the parent VRFCoordinator.rawFulfillRandomWords()\\n randomNumbers[_requestId] = _randomWords[0];\\n emit RequestFulfilled(_requestId, _randomWords[0]);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Return the random number.\\n /// @return randomNumber The random number or 0 if it is not ready or has not been requested.\\n function receiveRandomness(uint256 /*_block*/) external view override returns (uint256 randomNumber) {\\n randomNumber = randomNumbers[lastRequestId];\\n }\\n}\\n\",\"keccak256\":\"0xf132cbbbbb47a4f11c248fab30212a3dd3e7b20b1bc5b543ff21b6d291367dc8\",\"license\":\"MIT\"},\"src/rng/RNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\ninterface RNG {\\n /// @dev Request a random number.\\n /// @param _block Block linked to the request.\\n function requestRandomness(uint256 _block) external;\\n\\n /// @dev Receive the random number.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber Random Number. If the number is not ready or has not been required 0 instead.\\n function receiveRandomness(uint256 _block) external returns (uint256 randomNumber);\\n}\\n\",\"keccak256\":\"0xf92e0cf768afefc5cc6ef786c263b67dd00c021aa5753213dbbc33014adb68c5\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b5060405162000f6038038062000f6083398101604081905262000034916200022d565b8433806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000165565b5050506001600160a01b038116620000ea5760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b03199081166001600160a01b03938416179091556003805482169983169990991790985560048054909816961695909517909555600591909155600655506007805461ffff90931665ffffffffffff19909316929092176201000063ffffffff90921691909102179055620002c5565b336001600160a01b03821603620001bf5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03811681146200022857600080fd5b919050565b600080600080600080600060e0888a0312156200024957600080fd5b620002548862000210565b9650620002646020890162000210565b9550620002746040890162000210565b9450606088015193506080880151925060a088015161ffff811681146200029a57600080fd5b60c089015190925063ffffffff81168114620002b557600080fd5b8091505092959891949750929550565b610c8b80620002d56000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806379ba5097116100c3578063e4c0aaf41161007c578063e4c0aaf4146102e5578063e86a51cb146102f8578063f2fde38b1461030b578063f50d390d1461031e578063f9f5dd9114610331578063fc2a88c31461034457600080fd5b806379ba5097146102725780638da5cb5b1461027a5780638ea981171461028b5780639eccacf61461029e578063b0049637146102b1578063b0fb162f146102c457600080fd5b80632e1daf2f116101155780632e1daf2f146101fd5780632f68f4821461021057806339b1e245146102235780635257cd901461023657806361728f39146102565780637363ae1f1461025f57600080fd5b806309c1ba2e146101525780630c340a241461016e57806313cf9054146101995780631fe543e3146101bd57806324f74697146101d2575b600080fd5b61015b60065481565b6040519081526020015b60405180910390f35b600354610181906001600160a01b031681565b6040516001600160a01b039091168152602001610165565b61015b6101a7366004610a4f565b5060085460009081526009602052604090205490565b6101d06101cb366004610a68565b61034d565b005b6007546101e89062010000900463ffffffff1681565b60405163ffffffff9091168152602001610165565b600454610181906001600160a01b031681565b6101d061021e366004610a4f565b6103a2565b6101d0610231366004610a4f565b6103d1565b61015b610244366004610a4f565b60096020526000908152604090205481565b61015b60055481565b6101d061026d366004610a4f565b610400565b6101d061055b565b6000546001600160a01b0316610181565b6101d0610299366004610ae7565b610605565b600254610181906001600160a01b031681565b6101d06102bf366004610ae7565b6106f7565b6007546102d29061ffff1681565b60405161ffff9091168152602001610165565b6101d06102f3366004610ae7565b610743565b6101d0610306366004610b17565b61078f565b6101d0610319366004610ae7565b6107dd565b6101d061032c366004610b3d565b6107f1565b6101d061033f366004610ae7565b610833565b61015b60085481565b6002546001600160a01b031633146103925760025460405163073e64fd60e21b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b61039d83838361085d565b505050565b6003546001600160a01b031633146103cc5760405162461bcd60e51b815260040161038990610b61565b600555565b6003546001600160a01b031633146103fb5760405162461bcd60e51b815260040161038990610b61565b600655565b6004546001600160a01b031633146104515760405162461bcd60e51b8152602060048201526014602482015273536f72746974696f6e4d6f64756c65206f6e6c7960601b6044820152606401610389565b6002546040805160c081018252600554815260065460208083019190915260075461ffff81168385015262010000900463ffffffff16606083015260016080830181905283519182019093529182526000926001600160a01b031691639b1c385e919060a08201906104c2906108e6565b8152506040518263ffffffff1660e01b81526004016104e19190610b88565b6020604051808303816000875af1158015610500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105249190610c26565b600881905560405190915081907f0cd21a41891ff04ecd9a8754bec97e2fb85d2a4e7694329d4dc364c796f23d0690600090a25050565b6001546001600160a01b031633146105ae5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610389565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000546001600160a01b0316331480159061062b57506002546001600160a01b03163314155b1561067c57336106436000546001600160a01b031690565b60025460405163061db9c160e01b81526001600160a01b0393841660048201529183166024830152919091166044820152606401610389565b6001600160a01b0381166106a35760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd1a6a14209a385a964d036e404cb5cfb71f4000cdb03c9366292430787261be69060200160405180910390a150565b6003546001600160a01b031633146107215760405162461bcd60e51b815260040161038990610b61565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461076d5760405162461bcd60e51b815260040161038990610b61565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146107b95760405162461bcd60e51b815260040161038990610b61565b6007805463ffffffff909216620100000265ffffffff000019909216919091179055565b6107e5610957565b6107ee816109ac565b50565b6003546001600160a01b0316331461081b5760405162461bcd60e51b815260040161038990610b61565b6007805461ffff191661ffff92909216919091179055565b6003546001600160a01b031633146106a35760405162461bcd60e51b815260040161038990610b61565b8181600081811061087057610870610c3f565b905060200201356009600085815260200190815260200160002081905550827f5c69e7026b653d8606b5613bb00fd8c4b0504b1cbe8db600c406faac180924d5838360008181106108c3576108c3610c3f565b905060200201356040516108d991815260200190565b60405180910390a2505050565b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa8260405160240161091f91511515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915292915050565b6000546001600160a01b031633146109aa5760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610389565b565b336001600160a01b038216036109fe5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103a3930b739b332b9103a379039b2b63360491b6044820152606401610389565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610a6157600080fd5b5035919050565b600080600060408486031215610a7d57600080fd5b83359250602084013567ffffffffffffffff80821115610a9c57600080fd5b818601915086601f830112610ab057600080fd5b813581811115610abf57600080fd5b8760208260051b8501011115610ad457600080fd5b6020830194508093505050509250925092565b600060208284031215610af957600080fd5b81356001600160a01b0381168114610b1057600080fd5b9392505050565b600060208284031215610b2957600080fd5b813563ffffffff81168114610b1057600080fd5b600060208284031215610b4f57600080fd5b813561ffff81168114610b1057600080fd5b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b60006020808352835160208401526020840151604084015261ffff6040850151166060840152606084015163ffffffff80821660808601528060808701511660a0860152505060a084015160c08085015280518060e086015260005b81811015610c015782810184015186820161010001528301610be4565b506101009250600083828701015282601f19601f830116860101935050505092915050565b600060208284031215610c3857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212201c20e67178fd79424f46cb830b3496516dfa70ea88c1d07b59de6b70b0f17ca764736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806379ba5097116100c3578063e4c0aaf41161007c578063e4c0aaf4146102e5578063e86a51cb146102f8578063f2fde38b1461030b578063f50d390d1461031e578063f9f5dd9114610331578063fc2a88c31461034457600080fd5b806379ba5097146102725780638da5cb5b1461027a5780638ea981171461028b5780639eccacf61461029e578063b0049637146102b1578063b0fb162f146102c457600080fd5b80632e1daf2f116101155780632e1daf2f146101fd5780632f68f4821461021057806339b1e245146102235780635257cd901461023657806361728f39146102565780637363ae1f1461025f57600080fd5b806309c1ba2e146101525780630c340a241461016e57806313cf9054146101995780631fe543e3146101bd57806324f74697146101d2575b600080fd5b61015b60065481565b6040519081526020015b60405180910390f35b600354610181906001600160a01b031681565b6040516001600160a01b039091168152602001610165565b61015b6101a7366004610a4f565b5060085460009081526009602052604090205490565b6101d06101cb366004610a68565b61034d565b005b6007546101e89062010000900463ffffffff1681565b60405163ffffffff9091168152602001610165565b600454610181906001600160a01b031681565b6101d061021e366004610a4f565b6103a2565b6101d0610231366004610a4f565b6103d1565b61015b610244366004610a4f565b60096020526000908152604090205481565b61015b60055481565b6101d061026d366004610a4f565b610400565b6101d061055b565b6000546001600160a01b0316610181565b6101d0610299366004610ae7565b610605565b600254610181906001600160a01b031681565b6101d06102bf366004610ae7565b6106f7565b6007546102d29061ffff1681565b60405161ffff9091168152602001610165565b6101d06102f3366004610ae7565b610743565b6101d0610306366004610b17565b61078f565b6101d0610319366004610ae7565b6107dd565b6101d061032c366004610b3d565b6107f1565b6101d061033f366004610ae7565b610833565b61015b60085481565b6002546001600160a01b031633146103925760025460405163073e64fd60e21b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b61039d83838361085d565b505050565b6003546001600160a01b031633146103cc5760405162461bcd60e51b815260040161038990610b61565b600555565b6003546001600160a01b031633146103fb5760405162461bcd60e51b815260040161038990610b61565b600655565b6004546001600160a01b031633146104515760405162461bcd60e51b8152602060048201526014602482015273536f72746974696f6e4d6f64756c65206f6e6c7960601b6044820152606401610389565b6002546040805160c081018252600554815260065460208083019190915260075461ffff81168385015262010000900463ffffffff16606083015260016080830181905283519182019093529182526000926001600160a01b031691639b1c385e919060a08201906104c2906108e6565b8152506040518263ffffffff1660e01b81526004016104e19190610b88565b6020604051808303816000875af1158015610500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105249190610c26565b600881905560405190915081907f0cd21a41891ff04ecd9a8754bec97e2fb85d2a4e7694329d4dc364c796f23d0690600090a25050565b6001546001600160a01b031633146105ae5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610389565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000546001600160a01b0316331480159061062b57506002546001600160a01b03163314155b1561067c57336106436000546001600160a01b031690565b60025460405163061db9c160e01b81526001600160a01b0393841660048201529183166024830152919091166044820152606401610389565b6001600160a01b0381166106a35760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd1a6a14209a385a964d036e404cb5cfb71f4000cdb03c9366292430787261be69060200160405180910390a150565b6003546001600160a01b031633146107215760405162461bcd60e51b815260040161038990610b61565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461076d5760405162461bcd60e51b815260040161038990610b61565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146107b95760405162461bcd60e51b815260040161038990610b61565b6007805463ffffffff909216620100000265ffffffff000019909216919091179055565b6107e5610957565b6107ee816109ac565b50565b6003546001600160a01b0316331461081b5760405162461bcd60e51b815260040161038990610b61565b6007805461ffff191661ffff92909216919091179055565b6003546001600160a01b031633146106a35760405162461bcd60e51b815260040161038990610b61565b8181600081811061087057610870610c3f565b905060200201356009600085815260200190815260200160002081905550827f5c69e7026b653d8606b5613bb00fd8c4b0504b1cbe8db600c406faac180924d5838360008181106108c3576108c3610c3f565b905060200201356040516108d991815260200190565b60405180910390a2505050565b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa8260405160240161091f91511515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915292915050565b6000546001600160a01b031633146109aa5760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610389565b565b336001600160a01b038216036109fe5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103a3930b739b332b9103a379039b2b63360491b6044820152606401610389565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610a6157600080fd5b5035919050565b600080600060408486031215610a7d57600080fd5b83359250602084013567ffffffffffffffff80821115610a9c57600080fd5b818601915086601f830112610ab057600080fd5b813581811115610abf57600080fd5b8760208260051b8501011115610ad457600080fd5b6020830194508093505050509250925092565b600060208284031215610af957600080fd5b81356001600160a01b0381168114610b1057600080fd5b9392505050565b600060208284031215610b2957600080fd5b813563ffffffff81168114610b1057600080fd5b600060208284031215610b4f57600080fd5b813561ffff81168114610b1057600080fd5b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b60006020808352835160208401526020840151604084015261ffff6040850151166060840152606084015163ffffffff80821660808601528060808701511660a0860152505060a084015160c08085015280518060e086015260005b81811015610c015782810184015186820161010001528301610be4565b506101009250600083828701015282601f19601f830116860101935050505092915050565b600060208284031215610c3857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212201c20e67178fd79424f46cb830b3496516dfa70ea88c1d07b59de6b70b0f17ca764736f6c63430008180033", - "devdoc": { - "events": { - "RequestFulfilled(uint256,uint256)": { - "params": { - "randomWord": "The random value answering the request.", - "requestId": "The ID of the request" - } - }, - "RequestSent(uint256)": { - "details": "Emitted when a request is sent to the VRF Coordinator", - "params": { - "requestId": "The ID of the request" - } - } - }, - "kind": "dev", - "methods": { - "changeCallbackGasLimit(uint32)": { - "details": "Changes the callback gas limit of the contract.", - "params": { - "_callbackGasLimit": "The new callback gas limit." - } - }, - "changeGovernor(address)": { - "details": "Changes the governor of the contract.", - "params": { - "_governor": "The new governor." - } - }, - "changeKeyHash(bytes32)": { - "details": "Changes the key hash of the contract.", - "params": { - "_keyHash": "The new key hash." - } - }, - "changeRequestConfirmations(uint16)": { - "details": "Changes the request confirmations of the contract.", - "params": { - "_requestConfirmations": "The new request confirmations." - } - }, - "changeSortitionModule(address)": { - "details": "Changes the sortition module of the contract.", - "params": { - "_sortitionModule": "The new sortition module." - } - }, - "changeSubscriptionId(uint256)": { - "details": "Changes the subscription ID of the contract.", - "params": { - "_subscriptionId": "The new subscription ID." - } - }, - "changeVrfCoordinator(address)": { - "details": "Changes the VRF Coordinator of the contract.", - "params": { - "_vrfCoordinator": "The new VRF Coordinator." - } - }, - "constructor": { - "details": "Constructor, initializing the implementation to reduce attack surface.https://docs.chain.link/vrf/v2-5/subscription/get-a-random-number", - "params": { - "_callbackGasLimit": "The limit for how much gas to use for the callback request to the contract's fulfillRandomWords() function.", - "_governor": "The Governor of the contract.", - "_keyHash": "The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job).", - "_requestConfirmations": "How many confirmations the Chainlink node should wait before responding.", - "_sortitionModule": "The address of the SortitionModule contract.", - "_subscriptionId": "The unique identifier of the subscription used for funding requests.", - "_vrfCoordinator": "The address of the VRFCoordinator contract." - } - }, - "receiveRandomness(uint256)": { - "details": "Return the random number.", - "returns": { - "randomNumber": "The random number or 0 if it is not ready or has not been requested." - } - }, - "requestRandomness(uint256)": { - "details": "Request a random number. SortitionModule only." - } - }, - "title": "Random Number Generator that uses Chainlink VRF v2.5 https://blog.chain.link/introducing-vrf-v2-5/", - "version": 1 - }, - "userdoc": { - "events": { - "RequestFulfilled(uint256,uint256)": { - "notice": "Emitted when a request has been fulfilled." - } - }, - "kind": "user", - "methods": { - "acceptOwnership()": { - "notice": "Allows an ownership transfer to be completed by the recipient." - }, - "owner()": { - "notice": "Get the current owner" - }, - "setCoordinator(address)": { - "notice": "Sets the VRF Coordinator addressThis method should only be callable by the coordinator or contract owner" - }, - "transferOwnership(address)": { - "notice": "Allows an owner to begin transferring ownership to a new address." - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 29, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "s_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 31, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "s_pendingOwner", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 231, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "s_vrfCoordinator", - "offset": 0, - "slot": "2", - "type": "t_contract(IVRFCoordinatorV2Plus)380" - }, - { - "astId": 35404, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "governor", - "offset": 0, - "slot": "3", - "type": "t_address" - }, - { - "astId": 35406, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "sortitionModule", - "offset": 0, - "slot": "4", - "type": "t_address" - }, - { - "astId": 35408, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "keyHash", - "offset": 0, - "slot": "5", - "type": "t_bytes32" - }, - { - "astId": 35410, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "subscriptionId", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 35412, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "requestConfirmations", - "offset": 0, - "slot": "7", - "type": "t_uint16" - }, - { - "astId": 35414, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "callbackGasLimit", - "offset": 2, - "slot": "7", - "type": "t_uint32" - }, - { - "astId": 35416, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "lastRequestId", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 35420, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "randomNumbers", - "offset": 0, - "slot": "9", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_contract(IVRFCoordinatorV2Plus)380": { - "encoding": "inplace", - "label": "contract IVRFCoordinatorV2Plus", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint16": { - "encoding": "inplace", - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - } - } - } -} diff --git a/contracts/deployments/arbitrum/ChainlinkVRFCoordinator.json b/contracts/deployments/arbitrum/ChainlinkVRFCoordinator.json deleted file mode 100644 index 1c7b0579a..000000000 --- a/contracts/deployments/arbitrum/ChainlinkVRFCoordinator.json +++ /dev/null @@ -1,1753 +0,0 @@ -{ - "address": "0x3C0Ca683b403E37668AE3DC4FB62F4B29B6f7a3e", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "blockhashStore", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "internalBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "externalBalance", - "type": "uint256" - } - ], - "name": "BalanceInvariantViolated", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNum", - "type": "uint256" - } - ], - "name": "BlockhashNotInStore", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "coordinatorAddress", - "type": "address" - } - ], - "name": "CoordinatorAlreadyRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "coordinatorAddress", - "type": "address" - } - ], - "name": "CoordinatorNotRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "FailedToSendNative", - "type": "error" - }, - { - "inputs": [], - "name": "FailedToTransferLink", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "have", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "want", - "type": "uint32" - } - ], - "name": "GasLimitTooBig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGas", - "type": "uint256" - } - ], - "name": "GasPriceExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectCommitment", - "type": "error" - }, - { - "inputs": [], - "name": "IndexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "InsufficientBalance", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidCalldata", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "InvalidConsumer", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidExtraArgsTag", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "linkWei", - "type": "int256" - } - ], - "name": "InvalidLinkWeiPrice", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "premiumPercentage", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "max", - "type": "uint8" - } - ], - "name": "InvalidPremiumPercentage", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "have", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "min", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "max", - "type": "uint16" - } - ], - "name": "InvalidRequestConfirmations", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidSubscription", - "type": "error" - }, - { - "inputs": [], - "name": "LinkAlreadySet", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "flatFeeLinkDiscountPPM", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "flatFeeNativePPM", - "type": "uint32" - } - ], - "name": "LinkDiscountTooHigh", - "type": "error" - }, - { - "inputs": [], - "name": "LinkNotSet", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "have", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "max", - "type": "uint32" - } - ], - "name": "MsgDataTooBig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "MustBeRequestedOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "MustBeSubOwner", - "type": "error" - }, - { - "inputs": [], - "name": "NoCorrespondingRequest", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - } - ], - "name": "NoSuchProvingKey", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "have", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "want", - "type": "uint32" - } - ], - "name": "NumWordsTooBig", - "type": "error" - }, - { - "inputs": [], - "name": "OnlyCallableFromLink", - "type": "error" - }, - { - "inputs": [], - "name": "PaymentTooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "PendingRequestExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - } - ], - "name": "ProvingKeyAlreadyRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "Reentrant", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyConsumers", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "minimumRequestConfirmations", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxGasLimit", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "stalenessSeconds", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "gasAfterPaymentCalculation", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "int256", - "name": "fallbackWeiPerUnitLink", - "type": "int256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "fulfillmentFlatFeeNativePPM", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "fulfillmentFlatFeeLinkDiscountPPM", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "nativePremiumPercentage", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "linkPremiumPercentage", - "type": "uint8" - } - ], - "name": "ConfigSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "coordinatorAddress", - "type": "address" - } - ], - "name": "CoordinatorDeregistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "coordinatorAddress", - "type": "address" - } - ], - "name": "CoordinatorRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "fallbackWeiPerUnitLink", - "type": "int256" - } - ], - "name": "FallbackWeiPerUnitLinkUsed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsRecovered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newCoordinator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "MigrationCompleted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "NativeFundsRecovered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "maxGas", - "type": "uint64" - } - ], - "name": "ProvingKeyDeregistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "maxGas", - "type": "uint64" - } - ], - "name": "ProvingKeyRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "outputSeed", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "payment", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "nativePayment", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "onlyPremium", - "type": "bool" - } - ], - "name": "RandomWordsFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "preSeed", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "minimumRequestConfirmations", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "callbackGasLimit", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "numWords", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "extraArgs", - "type": "bytes" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RandomWordsRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountLink", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountNative", - "type": "uint256" - } - ], - "name": "SubscriptionCanceled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "SubscriptionConsumerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "SubscriptionConsumerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "SubscriptionCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldBalance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newBalance", - "type": "uint256" - } - ], - "name": "SubscriptionFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldNativeBalance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newNativeBalance", - "type": "uint256" - } - ], - "name": "SubscriptionFundedWithNative", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "SubscriptionOwnerTransferRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "SubscriptionOwnerTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "BLOCKHASH_STORE", - "outputs": [ - { - "internalType": "contract BlockhashStoreInterface", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LINK", - "outputs": [ - { - "internalType": "contract LinkTokenInterface", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LINK_NATIVE_FEED", - "outputs": [ - { - "internalType": "contract AggregatorV3Interface", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_CONSUMERS", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_NUM_WORDS", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_REQUEST_CONFIRMATIONS", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "acceptSubscriptionOwnerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "addConsumer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "cancelSubscription", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "createSubscription", - "outputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "deregisterMigratableCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "publicProvingKey", - "type": "uint256[2]" - } - ], - "name": "deregisterProvingKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256[2]", - "name": "pk", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "gamma", - "type": "uint256[2]" - }, - { - "internalType": "uint256", - "name": "c", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "s", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "seed", - "type": "uint256" - }, - { - "internalType": "address", - "name": "uWitness", - "type": "address" - }, - { - "internalType": "uint256[2]", - "name": "cGammaWitness", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "sHashWitness", - "type": "uint256[2]" - }, - { - "internalType": "uint256", - "name": "zInv", - "type": "uint256" - } - ], - "internalType": "struct VRF.Proof", - "name": "proof", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint64", - "name": "blockNum", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "callbackGasLimit", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numWords", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "extraArgs", - "type": "bytes" - } - ], - "internalType": "struct VRFTypes.RequestCommitmentV2Plus", - "name": "rc", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "onlyPremium", - "type": "bool" - } - ], - "name": "fulfillRandomWords", - "outputs": [ - { - "internalType": "uint96", - "name": "payment", - "type": "uint96" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "fundSubscriptionWithNative", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "startIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxCount", - "type": "uint256" - } - ], - "name": "getActiveSubscriptionIds", - "outputs": [ - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "getSubscription", - "outputs": [ - { - "internalType": "uint96", - "name": "balance", - "type": "uint96" - }, - { - "internalType": "uint96", - "name": "nativeBalance", - "type": "uint96" - }, - { - "internalType": "uint64", - "name": "reqCount", - "type": "uint64" - }, - { - "internalType": "address", - "name": "subOwner", - "type": "address" - }, - { - "internalType": "address[]", - "name": "consumers", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "publicKey", - "type": "uint256[2]" - } - ], - "name": "hashOfKey", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "newCoordinator", - "type": "address" - } - ], - "name": "migrate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onTokenTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "ownerCancelSubscription", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "pendingRequestExists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "recoverFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "to", - "type": "address" - } - ], - "name": "recoverNativeFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "registerMigratableCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "publicProvingKey", - "type": "uint256[2]" - }, - { - "internalType": "uint64", - "name": "maxGas", - "type": "uint64" - } - ], - "name": "registerProvingKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "removeConsumer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "requestConfirmations", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "callbackGasLimit", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numWords", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "extraArgs", - "type": "bytes" - } - ], - "internalType": "struct VRFV2PlusClient.RandomWordsRequest", - "name": "req", - "type": "tuple" - } - ], - "name": "requestRandomWords", - "outputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "requestSubscriptionOwnerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "s_config", - "outputs": [ - { - "internalType": "uint16", - "name": "minimumRequestConfirmations", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "maxGasLimit", - "type": "uint32" - }, - { - "internalType": "bool", - "name": "reentrancyLock", - "type": "bool" - }, - { - "internalType": "uint32", - "name": "stalenessSeconds", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "gasAfterPaymentCalculation", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "fulfillmentFlatFeeNativePPM", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "fulfillmentFlatFeeLinkDiscountPPM", - "type": "uint32" - }, - { - "internalType": "uint8", - "name": "nativePremiumPercentage", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "linkPremiumPercentage", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "s_currentSubNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "s_fallbackWeiPerUnitLink", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "s_provingKeyHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "s_provingKeys", - "outputs": [ - { - "internalType": "bool", - "name": "exists", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "maxGas", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "s_requestCommitments", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "s_totalBalance", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "s_totalNativeBalance", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "minimumRequestConfirmations", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "maxGasLimit", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "stalenessSeconds", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "gasAfterPaymentCalculation", - "type": "uint32" - }, - { - "internalType": "int256", - "name": "fallbackWeiPerUnitLink", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "fulfillmentFlatFeeNativePPM", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "fulfillmentFlatFeeLinkDiscountPPM", - "type": "uint32" - }, - { - "internalType": "uint8", - "name": "nativePremiumPercentage", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "linkPremiumPercentage", - "type": "uint8" - } - ], - "name": "setConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "link", - "type": "address" - }, - { - "internalType": "address", - "name": "linkNativeFeed", - "type": "address" - } - ], - "name": "setLINKAndLINKNativeFeed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "recipient", - "type": "address" - } - ], - "name": "withdrawNative", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ] -} diff --git a/contracts/deployments/arbitrum/DAI.json b/contracts/deployments/arbitrum/DAI.json deleted file mode 100644 index a7e7b954c..000000000 --- a/contracts/deployments/arbitrum/DAI.json +++ /dev/null @@ -1,501 +0,0 @@ -{ - "address": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", - "abi": [ - { - "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": "usr", - "type": "address" - } - ], - "name": "Deny", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "usr", - "type": "address" - } - ], - "name": "Rely", - "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" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "burn", - "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": "address", - "name": "usr", - "type": "address" - } - ], - "name": "deny", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "deploymentChainId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "usr", - "type": "address" - } - ], - "name": "rely", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "wards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ] -} diff --git a/contracts/deployments/arbitrum/DisputeKitClassic.json b/contracts/deployments/arbitrum/DisputeKitClassic.json deleted file mode 100644 index 31c3cb61e..000000000 --- a/contracts/deployments/arbitrum/DisputeKitClassic.json +++ /dev/null @@ -1,1210 +0,0 @@ -{ - "address": "0x70B464be85A547144C72485eBa2577E5D3A45421", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0xd259302573f9813ae47fc2f9b011f616f4be126418e783b38dd925f204d906fc", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x70B464be85A547144C72485eBa2577E5D3A45421", - "transactionIndex": 3, - "gasUsed": "370687", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000004000000000000000000000000000000000000000000400000000800000000000000000000000000000000", - "blockHash": "0x9ef5590771fb4a09e609e46729eb2f307ec8c215acedbd827de6d56b3a8f2577", - "transactionHash": "0xd259302573f9813ae47fc2f9b011f616f4be126418e783b38dd925f204d906fc", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 272063168, - "transactionHash": "0xd259302573f9813ae47fc2f9b011f616f4be126418e783b38dd925f204d906fc", - "address": "0x70B464be85A547144C72485eBa2577E5D3A45421", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 9, - "blockHash": "0x9ef5590771fb4a09e609e46729eb2f307ec8c215acedbd827de6d56b3a8f2577" - } - ], - "blockNumber": 272063168, - "cumulativeGasUsed": "1689314", - "status": 1, - "byzantium": true - }, - "args": [ - "0xAF0325dbBFa812a574743Bb5A085266D31e3e03a", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 3, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Workaround to get meaningful names for the proxy contracts Otherwise all the contracts are called `UUPSProxy` on the chain explorers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitClassicNeoProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220eea8f233cb9fa7bae3071b9ec684aad8d8ce0e9da5dee492e9eceaf08691ee9a64736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220eea8f233cb9fa7bae3071b9ec684aad8d8ce0e9da5dee492e9eceaf08691ee9a64736f6c634300081c0033", - "execute": { - "methodName": "reinitialize", - "args": [ - "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1" - ] - }, - "implementation": "0x371Aa4B1AE5b5f9422f3Ff1d105029AAd1D319BC", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Workaround to get meaningful names for the proxy contracts Otherwise all the contracts are called `UUPSProxy` on the chain explorers", - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/DisputeKitClassic_Implementation.json b/contracts/deployments/arbitrum/DisputeKitClassic_Implementation.json deleted file mode 100644 index c8d5c2f3b..000000000 --- a/contracts/deployments/arbitrum/DisputeKitClassic_Implementation.json +++ /dev/null @@ -1,1852 +0,0 @@ -{ - "address": "0x371Aa4B1AE5b5f9422f3Ff1d105029AAd1D319BC", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x4b4f029f6b84bc9f9837ae9772fc5346d2180800e0cb9c438d0cc48a50b0d351", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x371Aa4B1AE5b5f9422f3Ff1d105029AAd1D319BC", - "transactionIndex": 1, - "gasUsed": "3901523", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000800000000000000000000000080000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xe9e88b748f3360750a3cb17ef664e7c7690b241730adac47b9be0313181a449c", - "transactionHash": "0x4b4f029f6b84bc9f9837ae9772fc5346d2180800e0cb9c438d0cc48a50b0d351", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 364034049, - "transactionHash": "0x4b4f029f6b84bc9f9837ae9772fc5346d2180800e0cb9c438d0cc48a50b0d351", - "address": "0x371Aa4B1AE5b5f9422f3Ff1d105029AAd1D319BC", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 0, - "blockHash": "0xe9e88b748f3360750a3cb17ef664e7c7690b241730adac47b9be0313181a449c" - } - ], - "blockNumber": 364034049, - "cumulativeGasUsed": "3901523", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"name\":\"alreadyDrawn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getLocalDisputeRoundID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localDisputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"hashVote\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"isAppealFunded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleDrawPerJuror\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"getLocalDisputeRoundID(uint256,uint256)\":{\"details\":\"Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\"},\"returns\":{\"localDisputeID\":\"The ID of the dispute in the Dispute Kit.\",\"localRoundID\":\"The ID of the round in the Dispute Kit.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Returns the number of rounds in a dispute.\",\"params\":{\"_localDisputeID\":\"The ID of the dispute in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of rounds in the dispute.\"}},\"getVoteInfo(uint256,uint256,uint256)\":{\"details\":\"Returns the vote information for a given vote ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The address of the juror who cast the vote.\",\"commit\":\"The commit of the vote.\"}},\"hashVote(uint256,uint256,string)\":{\"details\":\"Computes the hash of a vote using ABI encodingThe unused parameters may be used by overriding contracts.\",\"params\":{\"_choice\":\"The choice being voted for\",\"_justification\":\"The justification for the vote\",\"_salt\":\"A random salt for commitment\"},\"returns\":{\"_0\":\"bytes32 The hash of the encoded vote parameters\"}},\"initialize(address,address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isAppealFunded(uint256)\":{\"details\":\"Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"Whether the appeal funding is finished.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"DisputeKitClassic Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitClassic.sol\":\"DisputeKitClassic\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassic.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {DisputeKitClassicBase, KlerosCore} from \\\"./DisputeKitClassicBase.sol\\\";\\n\\n/// @title DisputeKitClassic\\n/// Dispute kit implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitClassic is DisputeKitClassicBase {\\n string public constant override version = \\\"0.12.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(address _governor, KlerosCore _core, address _wNative) external reinitializer(1) {\\n __DisputeKitClassicBase_initialize(_governor, _core, _wNative);\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(9) {\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0xfe30d2fa9e1f882d77900894c0b4389e38f91b937e3c095f87bf255488cefd8b\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassicBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore, KlerosCoreBase, IDisputeKit, ISortitionModule} from \\\"../KlerosCore.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {SafeSend} from \\\"../../libraries/SafeSend.sol\\\";\\n\\n/// @title DisputeKitClassicBase\\n/// Abstract Dispute kit classic implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\nabstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable {\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default.\\n mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool)))\\n public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading.\\n mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function __DisputeKitClassicBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n dispute.jumped = false; // Possibly true if this DK has jumped in a previous round.\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n coreDisputeIDToActive[_coreDisputeID] = true;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[localRoundID];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n if (drawnAddress == address(0)) {\\n // Sortition can return 0 address if no one has staked yet.\\n return drawnAddress;\\n }\\n\\n if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true;\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash.\\n function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n }\\n\\n function _castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender);\\n }\\n\\n function _castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification,\\n address _juror\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n bytes32 voteHash = hashVote(_choice, _salt, _justification);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == _juror, \\\"The juror has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == voteHash,\\n \\\"The vote hash must match the commitment in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n } // Workaround stack too deep\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.safeSend(amount, wNative);\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @dev The unused parameters may be used by overriding contracts.\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(_choice, _salt));\\n }\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length;\\n\\n return round.totalVoted == expectedTotalVoted;\\n }\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) {\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n // Uses block.timestamp from the current tx when called by the core contract.\\n return (fundedChoices.length == 0 &&\\n block.timestamp - appealPeriodStart >=\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT);\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n /// @dev Returns the number of rounds in a dispute.\\n /// @param _localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return The number of rounds in the dispute.\\n function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) {\\n return disputes[_localDisputeID].rounds.length;\\n }\\n\\n /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @return localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return localRoundID The ID of the round in the Dispute Kit.\\n function getLocalDisputeRoundID(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID\\n ) external view returns (uint256 localDisputeID, uint256 localRoundID) {\\n localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID];\\n }\\n\\n /// @dev Returns the vote information for a given vote ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @param _voteID The ID of the vote.\\n /// @return account The address of the juror who cast the vote.\\n /// @return commit The commit of the vote.\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts.\\n /// minStake is checked directly during staking process however it's possible for the juror to get drawn\\n /// while having < minStake if it is later increased by governance.\\n /// This issue is expected and harmless.\\n /// @param _round The round in which the juror is being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return result Whether the address passes the check or not.\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view virtual returns (bool result) {\\n if (singleDrawPerJuror) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n result = !alreadyDrawn[localDisputeID][localRoundID][_juror];\\n } else {\\n result = true;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc418b9a76802db5d16819836734ecff8b76d5f37101819aee6fd1844dfe21dd9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516143f36100fc600039600081816118130152818161183c0152611a3401526143f36000f3fe6080604052600436106102205760003560e01c80636d4cd8ea1161012e578063c0c53b8b116100ab578063f2f4eb261161006f578063f2f4eb2614610718578063f32ab92714610738578063f7e7d1fd1461076d578063f8abee101461078d578063fc6f8f16146107bd57600080fd5b8063c0c53b8b14610698578063d2b8035a146106b8578063da3beb8c146106d8578063e349ad301461058a578063e4c0aaf4146106f857600080fd5b8063a7cc08fe116100f2578063a7cc08fe146105e0578063b34bfaa81461062c578063b6ede54014610642578063ba66fde714610662578063be4676041461068257600080fd5b80636d4cd8ea1461054a578063751accd01461056a578063796490f91461058a5780637c04034e146105a05780638e426460146105c057600080fd5b80634b2f0ea0116101bc5780635a155ccd116101805780635a155ccd1461044f5780635c92e2f61461049057806365540b96146104b0578063675926f6146104dd57806369f3f041146104fd57600080fd5b80634b2f0ea0146103a45780634f1ef286146103b957806352d1902d146103cc57806354fd4d50146103e1578063564a565d1461042057600080fd5b80630855bbe9146102255780630baa64d11461025a5780630c340a241461027a5780631200aabc146102b25780631c3db16d146102ed5780631cc3423a1461032a5780632621b9a21461034a5780632d68efc914610364578063362c347914610384575b600080fd5b34801561023157600080fd5b50610245610240366004613814565b6107dd565b60405190151581526020015b60405180910390f35b34801561026657600080fd5b50610245610275366004613814565b6108a5565b34801561028657600080fd5b5060005461029a906001600160a01b031681565b6040516001600160a01b039091168152602001610251565b3480156102be57600080fd5b506102df6102cd366004613814565b60036020526000908152604090205481565b604051908152602001610251565b3480156102f957600080fd5b5061030d610308366004613814565b61091c565b604080519384529115156020840152151590820152606001610251565b34801561033657600080fd5b506102df6103453660046138d7565b610a8a565b34801561035657600080fd5b506004546102459060ff1681565b34801561037057600080fd5b5060075461029a906001600160a01b031681565b34801561039057600080fd5b506102df61039f36600461393b565b610aba565b6103b76103b2366004613978565b610f6f565b005b6103b76103c736600461399a565b6117ff565b3480156103d857600080fd5b506102df611a27565b3480156103ed57600080fd5b50610413604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102519190613a39565b34801561042c57600080fd5b5061044061043b366004613814565b611a85565b60405161025193929190613a4c565b34801561045b57600080fd5b5061024561046a366004613a6d565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b34801561049c57600080fd5b506103b76104ab366004613af1565b611b4b565b3480156104bc57600080fd5b506104d06104cb366004613814565b611b57565b6040516102519190613b43565b3480156104e957600080fd5b506102df6104f8366004613b86565b611c1b565b34801561050957600080fd5b5061051d610518366004613bc1565b611d5e565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610251565b34801561055657600080fd5b50610245610565366004613814565b611e16565b34801561057657600080fd5b506103b7610585366004613bed565b611f99565b34801561059657600080fd5b506102df61271081565b3480156105ac57600080fd5b506103b76105bb366004613c2f565b612065565b3480156105cc57600080fd5b506103b76105db366004613cb7565b61207c565b3480156105ec57600080fd5b506106006105fb366004613bc1565b6120c8565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610251565b34801561063857600080fd5b506102df614e2081565b34801561064e57600080fd5b506103b761065d366004613cd4565b61218e565b34801561066e57600080fd5b5061024561067d366004613bc1565b612381565b34801561068e57600080fd5b506102df61138881565b3480156106a457600080fd5b506103b76106b3366004613d5d565b61241c565b3480156106c457600080fd5b5061029a6106d3366004613978565b6124e6565b3480156106e457600080fd5b506102df6106f3366004613978565b612835565b34801561070457600080fd5b506103b7610713366004613cb7565b612988565b34801561072457600080fd5b5060015461029a906001600160a01b031681565b34801561074457600080fd5b50610758610753366004613978565b6129d4565b60408051928352602083019190915201610251565b34801561077957600080fd5b506103b7610788366004613cb7565b612a26565b34801561079957600080fd5b506102456107a8366004613814565b60066020526000908152604090205460ff1681565b3480156107c957600080fd5b506102df6107d8366004613814565b612af8565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa15801561082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084e9190613d9d565b91509150600061085d85611b57565b90508051600014801561089c575061271061138861087b8585613dd7565b6108859190613dea565b61088f9190613e01565b6108998442613dd7565b10155b95945050505050565b6000818152600360205260408120546002805483929081106108c9576108c9613e23565b600091825260208220600590910201805490925082906108eb90600190613dd7565b815481106108fb576108fb613e23565b60009182526020909120600c90910201805460059091015414949350505050565b600080600080600260036000878152602001908152602001600020548154811061094857610948613e23565b6000918252602082206005909102018054909250829061096a90600190613dd7565b8154811061097a5761097a613e23565b60009182526020909120600c90910201600381015460ff1694509050836109a55780600101546109a8565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190613e65565b5090935060049250610a2b915050565b816004811115610a3d57610a3d613ece565b03610a80576000610a4d88611b57565b90508051600103610a7e5780600081518110610a6b57610a6b613e23565b6020026020010151965060009550600194505b505b5050509193909250565b604080516020808201869052818301859052825180830384018152606090920190925280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2c9190613e65565b50935050505080610b845760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfb9190613ee4565b15610c395760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610b7b565b60008681526006602052604090205460ff16610c675760405162461bcd60e51b8152600401610b7b90613eff565b600086815260036020526040812054600280549091908110610c8b57610c8b613e23565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610cbf57610cbf613e23565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3e9190613f36565b5050600087815260078401602052604090205490915060ff16610d88576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ecd565b808603610dfd576000868152600683016020526040902054610dab576000610df6565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610dec9190613dea565b610df69190613e01565b9450610ecd565b600081815260078301602052604090205460ff16610ecd5781600601600083600a01600181548110610e3157610e31613e23565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610e6757610e67613e23565b9060005260206000200154815260200190815260200160002054610e8b9190613f72565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610ec09190613dea565b610eca9190613e01565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610f6357600754610f14906001600160a01b038a811691889116612b24565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051610f5a929190918252602082015260400190565b60405180910390a45b50505050949350505050565b600082815260036020526040902054600280548492908110610f9357610f93613e23565b600091825260209091206002600590920201015460ff1615610fc75760405162461bcd60e51b8152600401610b7b90613f85565b600083815260036020526040812054600280549091908110610feb57610feb613e23565b90600052602060002090600502019050806001015483111561104f5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610b7b565b60008481526006602052604090205460ff1661107d5760405162461bcd60e51b8152600401610b7b90613eff565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee9190613d9d565b9150915081421015801561110157508042105b6111465760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610b7b565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190613f36565b505090508681036111c0576127109150611241565b6127106113886111d08686613dd7565b6111da9190613dea565b6111e49190613e01565b6111ee8542613dd7565b1061123b5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610b7b565b614e2091505b8454600090869061125490600190613dd7565b8154811061126457611264613e23565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190613fbc565b6112f19190613dd7565b60008a815260078401602052604090205490915060ff16156113555760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610b7b565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa15801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190613fbc565b905060006127106113d48784613dea565b6113de9190613e01565b6113e89083613f72565b60008c8152600686016020526040812054919250908211156114995760008c815260068601602052604090205434906114219084613dd7565b116114465760008c81526006860160205260409020546114419083613dd7565b611448565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f85604051611490929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906114c5908490613f72565b909155505060008c8152600686016020526040812080548392906114ea908490613f72565b909155505060008c815260068601602052604090205482116115bc5760008c81526006860160205260408120546009870180549192909161152c908490613f72565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156117c7578285600901546115d99190613dd7565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164b9190613ee4565b156116645760028a01805460ff19166001179055611747565b895460038b016000611677876001613f72565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b81526004016116f291815260200190565b602060405180830381865afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190613fbc565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016117949392919061400f565b6000604051808303818588803b1580156117ad57600080fd5b505af11580156117c1573d6000803e3d6000fd5b50505050505b803411156117f0576117f06117dc8234613dd7565b6007543391906001600160a01b0316612b24565b50505050505050505050505050565b61180882612c0f565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061188657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661187a60008051602061439e8339815191525490565b6001600160a01b031614155b156118a45760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118fe575060408051601f3d908101601f191682019092526118fb91810190613fbc565b60015b61192657604051630c76093760e01b81526001600160a01b0383166004820152602401610b7b565b60008051602061439e833981519152811461195757604051632a87526960e21b815260048101829052602401610b7b565b60008051602061439e8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611a22576000836001600160a01b0316836040516119be91906140a9565b600060405180830381855af49150503d80600081146119f9576040519150601f19603f3d011682016040523d82523d6000602084013e6119fe565b606091505b5050905080611a20576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a725760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061439e83398151915290565b60028181548110611a9557600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611ac890613fd5565b80601f0160208091040260200160405190810160405280929190818152602001828054611af490613fd5565b8015611b415780601f10611b1657610100808354040283529160200191611b41565b820191906000526020600020905b815481529060010190602001808311611b2457829003601f168201915b5050505050905083565b611a2084848484612c3c565b6000818152600360205260408120546002805460609392908110611b7d57611b7d613e23565b60009182526020822060059091020180549092508290611b9f90600190613dd7565b81548110611baf57611baf613e23565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c0d57602002820191906000526020600020905b815481526020019060010190808311611bf9575b505050505092505050919050565b600085815260036020526040812054600280548392908110611c3f57611c3f613e23565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611c7357611c73613e23565b90600052602060002090600c02016000018681548110611c9557611c95613e23565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d179190613f36565b506003850154919350915060ff168015611d3b57508183600201541480611d3b5750805b15611d4e5761271094505050505061089c565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611d8f57611d8f613e23565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611dc357611dc3613e23565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611e3a57611e3a613e23565b60009182526020822060059091020180549092508290611e5c90600190613dd7565b81548110611e6c57611e6c613e23565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190613e65565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015611f46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6a91906140c5565b5050505050915050600081611f80578354611f86565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b03163314611fc35760405162461bcd60e51b8152600401610b7b90614131565b6000836001600160a01b03168383604051611fde91906140a9565b60006040518083038185875af1925050503d806000811461201b576040519150601f19603f3d011682016040523d82523d6000602084013e612020565b606091505b5050905080611a205760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610b7b565b61207486868686868633612f9f565b505050505050565b6000546001600160a01b031633146120a65760405162461bcd60e51b8152600401610b7b90614131565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a815260200190815260200160002054815481106120f6576120f6613e23565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061212a5761212a613e23565b90600052602060002090600c0201600001878154811061214c5761214c613e23565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146121b85760405162461bcd60e51b8152600401610b7b90614173565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad201612243858783614205565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156122a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ca9190613fbc565b6122d49190613dd7565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab581089061236f908a908a908a906142c4565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106123a5576123a5613e23565b600091825260208083208784526003600590930201918201905260408220548154919350839181106123d9576123d9613e23565b90600052602060002090600c020160000184815481106123fb576123fb613e23565b600091825260209091206004909102016003015460ff169695505050505050565b600160006124286136d0565b8054909150600160401b900460ff168061244f575080546001600160401b03808416911610155b1561246c5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556124988585856136f4565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146125135760405162461bcd60e51b8152600401610b7b90614173565b60008381526003602052604090205460028054859290811061253757612537613e23565b600091825260209091206002600590920201015460ff161561256b5760405162461bcd60e51b8152600401610b7b90613f85565b600084815260036020526040812054600280549192918390811061259157612591613e23565b60009182526020822060059091020180549092506125b190600190613dd7565b905060008260000182815481106125ca576125ca613e23565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561262f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265391906142fa565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156126a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c69190613e65565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561272a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274e91906142fa565b98506001600160a01b03891661276a575050505050505061282e565b612775848c8b61373b565b1561282157604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612826565b600098505b505050505050505b5092915050565b60008281526003602052604081205460028054839290811061285957612859613e23565b6000918252602080832086845260036005909302019182019052604082205481549193508391811061288d5761288d613e23565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa1580156128ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129109190613f36565b509150915082600401546000148061293f57508015801561293f57506000828152600284016020526040902054155b15612951576000945050505050612982565b80156129665750506004015491506129829050565b5060009081526002909101602052604090205491506129829050565b92915050565b6000546001600160a01b031633146129b25760405162461bcd60e51b8152600401610b7b90614131565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526003602052604081205460028054919291839081106129fa576129fa613e23565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612a326136d0565b8054909150600160401b900460ff1680612a59575080546001600160401b03808416911610155b15612a765760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612b0d57612b0d613e23565b600091825260209091206005909102015492915050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015612b5357505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b8e57600080fd5b505af1158015612ba2573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612c395760405162461bcd60e51b8152600401610b7b90614131565b50565b600084815260036020526040902054600280548692908110612c6057612c60613e23565b600091825260209091206002600590920201015460ff1615612c945760405162461bcd60e51b8152600401610b7b90613f85565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d029190613e65565b5090935060019250612d12915050565b816004811115612d2457612d24613ece565b14612d815760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610b7b565b82612dbe5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610b7b565b60008681526006602052604090205460ff16612dec5760405162461bcd60e51b8152600401610b7b90613eff565b600086815260036020526040812054600280549091908110612e1057612e10613e23565b60009182526020822060059091020180549092508290612e3290600190613dd7565b81548110612e4257612e42613e23565b90600052602060002090600c0201905060005b86811015612f38573382898984818110612e7157612e71613e23565b9050602002013581548110612e8857612e88613e23565b60009182526020909120600490910201546001600160a01b031614612eef5760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610b7b565b8582898984818110612f0357612f03613e23565b9050602002013581548110612f1a57612f1a613e23565b60009182526020909120600160049092020181019190915501612e55565b5086869050816005016000828254612f509190613f72565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890612f8d908b908b908b90614349565b60405180910390a35050505050505050565b600087815260036020526040902054600280548992908110612fc357612fc3613e23565b600091825260209091206002600590920201015460ff1615612ff75760405162461bcd60e51b8152600401610b7b90613f85565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130659190613e65565b5090935060029250613075915050565b81600481111561308757613087613ece565b146130e25760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610b7b565b866131245760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610b7b565b60008981526006602052604090205460ff166131525760405162461bcd60e51b8152600401610b7b90613eff565b60008981526003602052604081205460028054909190811061317657613176613e23565b9060005260206000209060050201905080600101548711156131d15760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610b7b565b805460009082906131e490600190613dd7565b815481106131f4576131f4613e23565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d90613239908f9060040190815260200190565b60a060405180830381865afa158015613256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327a9190613e65565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156132d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f991906140c5565b5050505050915050600061330e8b8b8b610a8a565b905060005b8c811015613595576001600160a01b038916858f8f8481811061333857613338613e23565b905060200201358154811061334f5761334f613e23565b60009182526020909120600490910201546001600160a01b0316146133b65760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610b7b565b8215806133fd575081858f8f848181106133d2576133d2613e23565b90506020020135815481106133e9576133e9613e23565b906000526020600020906004020160010154145b61347d5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610b7b565b848e8e8381811061349057613490613e23565b90506020020135815481106134a7576134a7613e23565b600091825260209091206003600490920201015460ff16156135005760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610b7b565b8b858f8f8481811061351457613514613e23565b905060200201358154811061352b5761352b613e23565b60009182526020909120600260049092020101556001858f8f8481811061355457613554613e23565b905060200201358154811061356b5761356b613e23565b60009182526020909120600490910201600301805460ff1916911515919091179055600101613313565b5050506004820180548b92506000906135af908490613f72565b90915550506000888152600282016020526040812080548b92906135d4908490613f72565b90915550506001810154880361360357600381015460ff16156135fe5760038101805460ff191690555b61367c565b60018101546000908152600282016020526040808220548a83529120540361364557600381015460ff166135fe5760038101805460ff1916600117905561367c565b60018101546000908152600282016020526040808220548a8352912054111561367c576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b6040516136bb9392919061436d565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6136fc6137d3565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60045460009060ff16156137c957600083815260036020526040812054600280549192918390811061376f5761376f613e23565b600091825260208220600590910201805490925061378f90600190613dd7565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610ab3915050565b5060019392505050565b6137db6137fa565b6137f857604051631afcd79f60e31b815260040160405180910390fd5b565b60006138046136d0565b54600160401b900460ff16919050565b60006020828403121561382657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261385457600080fd5b8135602083016000806001600160401b038411156138745761387461382d565b50604051601f19601f85018116603f011681018181106001600160401b03821117156138a2576138a261382d565b6040528381529050808284018710156138ba57600080fd5b838360208301376000602085830101528094505050505092915050565b6000806000606084860312156138ec57600080fd5b833592506020840135915060408401356001600160401b0381111561391057600080fd5b61391c86828701613843565b9150509250925092565b6001600160a01b0381168114612c3957600080fd5b6000806000806080858703121561395157600080fd5b84359350602085013561396381613926565b93969395505050506040820135916060013590565b6000806040838503121561398b57600080fd5b50508035926020909101359150565b600080604083850312156139ad57600080fd5b82356139b881613926565b915060208301356001600160401b038111156139d357600080fd5b6139df85828601613843565b9150509250929050565b60005b83811015613a045781810151838201526020016139ec565b50506000910152565b60008151808452613a258160208601602086016139e9565b601f01601f19169290920160200192915050565b602081526000610ab36020830184613a0d565b838152821515602082015260606040820152600061089c6060830184613a0d565b600080600060608486031215613a8257600080fd5b83359250602084013591506040840135613a9b81613926565b809150509250925092565b60008083601f840112613ab857600080fd5b5081356001600160401b03811115613acf57600080fd5b6020830191508360208260051b8501011115613aea57600080fd5b9250929050565b60008060008060608587031215613b0757600080fd5b8435935060208501356001600160401b03811115613b2457600080fd5b613b3087828801613aa6565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613b7b578351835260209384019390920191600101613b5d565b509095945050505050565b600080600080600060a08688031215613b9e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613bd657600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613c0257600080fd5b8335613c0d81613926565b92506020840135915060408401356001600160401b0381111561391057600080fd5b60008060008060008060a08789031215613c4857600080fd5b8635955060208701356001600160401b03811115613c6557600080fd5b613c7189828a01613aa6565b909650945050604087013592506060870135915060808701356001600160401b03811115613c9e57600080fd5b613caa89828a01613843565b9150509295509295509295565b600060208284031215613cc957600080fd5b8135610ab381613926565b600080600080600060808688031215613cec57600080fd5b853594506020860135935060408601356001600160401b03811115613d1057600080fd5b8601601f81018813613d2157600080fd5b80356001600160401b03811115613d3757600080fd5b886020828401011115613d4957600080fd5b959894975060200195606001359392505050565b600080600060608486031215613d7257600080fd5b8335613d7d81613926565b92506020840135613d8d81613926565b91506040840135613a9b81613926565b60008060408385031215613db057600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b8181038181111561298257612982613dc1565b808202811582820484141761298257612982613dc1565b600082613e1e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80516001600160601b0381168114613e5057600080fd5b919050565b80518015158114613e5057600080fd5b600080600080600060a08688031215613e7d57600080fd5b613e8686613e39565b94506020860151613e9681613926565b604087015190945060058110613eab57600080fd5b9250613eb960608701613e55565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613ef657600080fd5b610ab382613e55565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b600080600060608486031215613f4b57600080fd5b83519250613f5b60208501613e55565b9150613f6960408501613e55565b90509250925092565b8082018082111561298257612982613dc1565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b600060208284031215613fce57600080fd5b5051919050565b600181811c90821680613fe957607f821691505b60208210810361400957634e487b7160e01b600052602260045260246000fd5b50919050565b83815282602082015260606040820152600080835461402d81613fd5565b806060860152600182166000811461404c57600181146140685761409c565b60ff1983166080870152608082151560051b870101935061409c565b86600052602060002060005b8381101561409357815488820160800152600190910190602001614074565b87016080019450505b5091979650505050505050565b600082516140bb8184602087016139e9565b9190910192915050565b600080600080600080600060e0888a0312156140e057600080fd5b6140e988613e39565b96506140f760208901613e55565b604089015160608a015160808b015160a08c015193995091975095509350915061412360c08901613e55565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611a2257806000526020600020601f840160051c810160208510156141de5750805b601f840160051c820191505b818110156141fe57600081556001016141ea565b5050505050565b6001600160401b0383111561421c5761421c61382d565b6142308361422a8354613fd5565b836141b7565b6000601f841160018114614264576000851561424c5750838201355b600019600387901b1c1916600186901b1783556141fe565b600083815260209020601f19861690835b828110156142955786850135825560209485019460019092019101614275565b50868210156142b25760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561430c57600080fd5b8151610ab381613926565b81835260006001600160fb1b0383111561433057600080fd5b8260051b80836020870137939093016020019392505050565b60408152600061435d604083018587614317565b9050826020830152949350505050565b604081526000614381604083018587614317565b82810360208401526143938185613a0d565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212205273a7fd5d9b74f6a10c8e8ff9173490991e595b881e9a1f0a7986976eaa245264736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102205760003560e01c80636d4cd8ea1161012e578063c0c53b8b116100ab578063f2f4eb261161006f578063f2f4eb2614610718578063f32ab92714610738578063f7e7d1fd1461076d578063f8abee101461078d578063fc6f8f16146107bd57600080fd5b8063c0c53b8b14610698578063d2b8035a146106b8578063da3beb8c146106d8578063e349ad301461058a578063e4c0aaf4146106f857600080fd5b8063a7cc08fe116100f2578063a7cc08fe146105e0578063b34bfaa81461062c578063b6ede54014610642578063ba66fde714610662578063be4676041461068257600080fd5b80636d4cd8ea1461054a578063751accd01461056a578063796490f91461058a5780637c04034e146105a05780638e426460146105c057600080fd5b80634b2f0ea0116101bc5780635a155ccd116101805780635a155ccd1461044f5780635c92e2f61461049057806365540b96146104b0578063675926f6146104dd57806369f3f041146104fd57600080fd5b80634b2f0ea0146103a45780634f1ef286146103b957806352d1902d146103cc57806354fd4d50146103e1578063564a565d1461042057600080fd5b80630855bbe9146102255780630baa64d11461025a5780630c340a241461027a5780631200aabc146102b25780631c3db16d146102ed5780631cc3423a1461032a5780632621b9a21461034a5780632d68efc914610364578063362c347914610384575b600080fd5b34801561023157600080fd5b50610245610240366004613814565b6107dd565b60405190151581526020015b60405180910390f35b34801561026657600080fd5b50610245610275366004613814565b6108a5565b34801561028657600080fd5b5060005461029a906001600160a01b031681565b6040516001600160a01b039091168152602001610251565b3480156102be57600080fd5b506102df6102cd366004613814565b60036020526000908152604090205481565b604051908152602001610251565b3480156102f957600080fd5b5061030d610308366004613814565b61091c565b604080519384529115156020840152151590820152606001610251565b34801561033657600080fd5b506102df6103453660046138d7565b610a8a565b34801561035657600080fd5b506004546102459060ff1681565b34801561037057600080fd5b5060075461029a906001600160a01b031681565b34801561039057600080fd5b506102df61039f36600461393b565b610aba565b6103b76103b2366004613978565b610f6f565b005b6103b76103c736600461399a565b6117ff565b3480156103d857600080fd5b506102df611a27565b3480156103ed57600080fd5b50610413604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102519190613a39565b34801561042c57600080fd5b5061044061043b366004613814565b611a85565b60405161025193929190613a4c565b34801561045b57600080fd5b5061024561046a366004613a6d565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b34801561049c57600080fd5b506103b76104ab366004613af1565b611b4b565b3480156104bc57600080fd5b506104d06104cb366004613814565b611b57565b6040516102519190613b43565b3480156104e957600080fd5b506102df6104f8366004613b86565b611c1b565b34801561050957600080fd5b5061051d610518366004613bc1565b611d5e565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610251565b34801561055657600080fd5b50610245610565366004613814565b611e16565b34801561057657600080fd5b506103b7610585366004613bed565b611f99565b34801561059657600080fd5b506102df61271081565b3480156105ac57600080fd5b506103b76105bb366004613c2f565b612065565b3480156105cc57600080fd5b506103b76105db366004613cb7565b61207c565b3480156105ec57600080fd5b506106006105fb366004613bc1565b6120c8565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610251565b34801561063857600080fd5b506102df614e2081565b34801561064e57600080fd5b506103b761065d366004613cd4565b61218e565b34801561066e57600080fd5b5061024561067d366004613bc1565b612381565b34801561068e57600080fd5b506102df61138881565b3480156106a457600080fd5b506103b76106b3366004613d5d565b61241c565b3480156106c457600080fd5b5061029a6106d3366004613978565b6124e6565b3480156106e457600080fd5b506102df6106f3366004613978565b612835565b34801561070457600080fd5b506103b7610713366004613cb7565b612988565b34801561072457600080fd5b5060015461029a906001600160a01b031681565b34801561074457600080fd5b50610758610753366004613978565b6129d4565b60408051928352602083019190915201610251565b34801561077957600080fd5b506103b7610788366004613cb7565b612a26565b34801561079957600080fd5b506102456107a8366004613814565b60066020526000908152604090205460ff1681565b3480156107c957600080fd5b506102df6107d8366004613814565b612af8565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa15801561082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084e9190613d9d565b91509150600061085d85611b57565b90508051600014801561089c575061271061138861087b8585613dd7565b6108859190613dea565b61088f9190613e01565b6108998442613dd7565b10155b95945050505050565b6000818152600360205260408120546002805483929081106108c9576108c9613e23565b600091825260208220600590910201805490925082906108eb90600190613dd7565b815481106108fb576108fb613e23565b60009182526020909120600c90910201805460059091015414949350505050565b600080600080600260036000878152602001908152602001600020548154811061094857610948613e23565b6000918252602082206005909102018054909250829061096a90600190613dd7565b8154811061097a5761097a613e23565b60009182526020909120600c90910201600381015460ff1694509050836109a55780600101546109a8565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190613e65565b5090935060049250610a2b915050565b816004811115610a3d57610a3d613ece565b03610a80576000610a4d88611b57565b90508051600103610a7e5780600081518110610a6b57610a6b613e23565b6020026020010151965060009550600194505b505b5050509193909250565b604080516020808201869052818301859052825180830384018152606090920190925280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2c9190613e65565b50935050505080610b845760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfb9190613ee4565b15610c395760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610b7b565b60008681526006602052604090205460ff16610c675760405162461bcd60e51b8152600401610b7b90613eff565b600086815260036020526040812054600280549091908110610c8b57610c8b613e23565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610cbf57610cbf613e23565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3e9190613f36565b5050600087815260078401602052604090205490915060ff16610d88576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ecd565b808603610dfd576000868152600683016020526040902054610dab576000610df6565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610dec9190613dea565b610df69190613e01565b9450610ecd565b600081815260078301602052604090205460ff16610ecd5781600601600083600a01600181548110610e3157610e31613e23565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610e6757610e67613e23565b9060005260206000200154815260200190815260200160002054610e8b9190613f72565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610ec09190613dea565b610eca9190613e01565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610f6357600754610f14906001600160a01b038a811691889116612b24565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051610f5a929190918252602082015260400190565b60405180910390a45b50505050949350505050565b600082815260036020526040902054600280548492908110610f9357610f93613e23565b600091825260209091206002600590920201015460ff1615610fc75760405162461bcd60e51b8152600401610b7b90613f85565b600083815260036020526040812054600280549091908110610feb57610feb613e23565b90600052602060002090600502019050806001015483111561104f5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610b7b565b60008481526006602052604090205460ff1661107d5760405162461bcd60e51b8152600401610b7b90613eff565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee9190613d9d565b9150915081421015801561110157508042105b6111465760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610b7b565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190613f36565b505090508681036111c0576127109150611241565b6127106113886111d08686613dd7565b6111da9190613dea565b6111e49190613e01565b6111ee8542613dd7565b1061123b5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610b7b565b614e2091505b8454600090869061125490600190613dd7565b8154811061126457611264613e23565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190613fbc565b6112f19190613dd7565b60008a815260078401602052604090205490915060ff16156113555760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610b7b565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa15801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190613fbc565b905060006127106113d48784613dea565b6113de9190613e01565b6113e89083613f72565b60008c8152600686016020526040812054919250908211156114995760008c815260068601602052604090205434906114219084613dd7565b116114465760008c81526006860160205260409020546114419083613dd7565b611448565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f85604051611490929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906114c5908490613f72565b909155505060008c8152600686016020526040812080548392906114ea908490613f72565b909155505060008c815260068601602052604090205482116115bc5760008c81526006860160205260408120546009870180549192909161152c908490613f72565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156117c7578285600901546115d99190613dd7565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164b9190613ee4565b156116645760028a01805460ff19166001179055611747565b895460038b016000611677876001613f72565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b81526004016116f291815260200190565b602060405180830381865afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190613fbc565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016117949392919061400f565b6000604051808303818588803b1580156117ad57600080fd5b505af11580156117c1573d6000803e3d6000fd5b50505050505b803411156117f0576117f06117dc8234613dd7565b6007543391906001600160a01b0316612b24565b50505050505050505050505050565b61180882612c0f565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061188657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661187a60008051602061439e8339815191525490565b6001600160a01b031614155b156118a45760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118fe575060408051601f3d908101601f191682019092526118fb91810190613fbc565b60015b61192657604051630c76093760e01b81526001600160a01b0383166004820152602401610b7b565b60008051602061439e833981519152811461195757604051632a87526960e21b815260048101829052602401610b7b565b60008051602061439e8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611a22576000836001600160a01b0316836040516119be91906140a9565b600060405180830381855af49150503d80600081146119f9576040519150601f19603f3d011682016040523d82523d6000602084013e6119fe565b606091505b5050905080611a20576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a725760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061439e83398151915290565b60028181548110611a9557600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611ac890613fd5565b80601f0160208091040260200160405190810160405280929190818152602001828054611af490613fd5565b8015611b415780601f10611b1657610100808354040283529160200191611b41565b820191906000526020600020905b815481529060010190602001808311611b2457829003601f168201915b5050505050905083565b611a2084848484612c3c565b6000818152600360205260408120546002805460609392908110611b7d57611b7d613e23565b60009182526020822060059091020180549092508290611b9f90600190613dd7565b81548110611baf57611baf613e23565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c0d57602002820191906000526020600020905b815481526020019060010190808311611bf9575b505050505092505050919050565b600085815260036020526040812054600280548392908110611c3f57611c3f613e23565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611c7357611c73613e23565b90600052602060002090600c02016000018681548110611c9557611c95613e23565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d179190613f36565b506003850154919350915060ff168015611d3b57508183600201541480611d3b5750805b15611d4e5761271094505050505061089c565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611d8f57611d8f613e23565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611dc357611dc3613e23565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611e3a57611e3a613e23565b60009182526020822060059091020180549092508290611e5c90600190613dd7565b81548110611e6c57611e6c613e23565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190613e65565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015611f46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6a91906140c5565b5050505050915050600081611f80578354611f86565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b03163314611fc35760405162461bcd60e51b8152600401610b7b90614131565b6000836001600160a01b03168383604051611fde91906140a9565b60006040518083038185875af1925050503d806000811461201b576040519150601f19603f3d011682016040523d82523d6000602084013e612020565b606091505b5050905080611a205760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610b7b565b61207486868686868633612f9f565b505050505050565b6000546001600160a01b031633146120a65760405162461bcd60e51b8152600401610b7b90614131565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a815260200190815260200160002054815481106120f6576120f6613e23565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061212a5761212a613e23565b90600052602060002090600c0201600001878154811061214c5761214c613e23565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146121b85760405162461bcd60e51b8152600401610b7b90614173565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad201612243858783614205565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156122a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ca9190613fbc565b6122d49190613dd7565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab581089061236f908a908a908a906142c4565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106123a5576123a5613e23565b600091825260208083208784526003600590930201918201905260408220548154919350839181106123d9576123d9613e23565b90600052602060002090600c020160000184815481106123fb576123fb613e23565b600091825260209091206004909102016003015460ff169695505050505050565b600160006124286136d0565b8054909150600160401b900460ff168061244f575080546001600160401b03808416911610155b1561246c5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556124988585856136f4565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146125135760405162461bcd60e51b8152600401610b7b90614173565b60008381526003602052604090205460028054859290811061253757612537613e23565b600091825260209091206002600590920201015460ff161561256b5760405162461bcd60e51b8152600401610b7b90613f85565b600084815260036020526040812054600280549192918390811061259157612591613e23565b60009182526020822060059091020180549092506125b190600190613dd7565b905060008260000182815481106125ca576125ca613e23565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561262f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265391906142fa565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156126a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c69190613e65565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561272a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274e91906142fa565b98506001600160a01b03891661276a575050505050505061282e565b612775848c8b61373b565b1561282157604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612826565b600098505b505050505050505b5092915050565b60008281526003602052604081205460028054839290811061285957612859613e23565b6000918252602080832086845260036005909302019182019052604082205481549193508391811061288d5761288d613e23565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa1580156128ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129109190613f36565b509150915082600401546000148061293f57508015801561293f57506000828152600284016020526040902054155b15612951576000945050505050612982565b80156129665750506004015491506129829050565b5060009081526002909101602052604090205491506129829050565b92915050565b6000546001600160a01b031633146129b25760405162461bcd60e51b8152600401610b7b90614131565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526003602052604081205460028054919291839081106129fa576129fa613e23565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612a326136d0565b8054909150600160401b900460ff1680612a59575080546001600160401b03808416911610155b15612a765760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612b0d57612b0d613e23565b600091825260209091206005909102015492915050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015612b5357505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b8e57600080fd5b505af1158015612ba2573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612c395760405162461bcd60e51b8152600401610b7b90614131565b50565b600084815260036020526040902054600280548692908110612c6057612c60613e23565b600091825260209091206002600590920201015460ff1615612c945760405162461bcd60e51b8152600401610b7b90613f85565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d029190613e65565b5090935060019250612d12915050565b816004811115612d2457612d24613ece565b14612d815760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610b7b565b82612dbe5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610b7b565b60008681526006602052604090205460ff16612dec5760405162461bcd60e51b8152600401610b7b90613eff565b600086815260036020526040812054600280549091908110612e1057612e10613e23565b60009182526020822060059091020180549092508290612e3290600190613dd7565b81548110612e4257612e42613e23565b90600052602060002090600c0201905060005b86811015612f38573382898984818110612e7157612e71613e23565b9050602002013581548110612e8857612e88613e23565b60009182526020909120600490910201546001600160a01b031614612eef5760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610b7b565b8582898984818110612f0357612f03613e23565b9050602002013581548110612f1a57612f1a613e23565b60009182526020909120600160049092020181019190915501612e55565b5086869050816005016000828254612f509190613f72565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890612f8d908b908b908b90614349565b60405180910390a35050505050505050565b600087815260036020526040902054600280548992908110612fc357612fc3613e23565b600091825260209091206002600590920201015460ff1615612ff75760405162461bcd60e51b8152600401610b7b90613f85565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130659190613e65565b5090935060029250613075915050565b81600481111561308757613087613ece565b146130e25760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610b7b565b866131245760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610b7b565b60008981526006602052604090205460ff166131525760405162461bcd60e51b8152600401610b7b90613eff565b60008981526003602052604081205460028054909190811061317657613176613e23565b9060005260206000209060050201905080600101548711156131d15760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610b7b565b805460009082906131e490600190613dd7565b815481106131f4576131f4613e23565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d90613239908f9060040190815260200190565b60a060405180830381865afa158015613256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327a9190613e65565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156132d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f991906140c5565b5050505050915050600061330e8b8b8b610a8a565b905060005b8c811015613595576001600160a01b038916858f8f8481811061333857613338613e23565b905060200201358154811061334f5761334f613e23565b60009182526020909120600490910201546001600160a01b0316146133b65760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610b7b565b8215806133fd575081858f8f848181106133d2576133d2613e23565b90506020020135815481106133e9576133e9613e23565b906000526020600020906004020160010154145b61347d5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610b7b565b848e8e8381811061349057613490613e23565b90506020020135815481106134a7576134a7613e23565b600091825260209091206003600490920201015460ff16156135005760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610b7b565b8b858f8f8481811061351457613514613e23565b905060200201358154811061352b5761352b613e23565b60009182526020909120600260049092020101556001858f8f8481811061355457613554613e23565b905060200201358154811061356b5761356b613e23565b60009182526020909120600490910201600301805460ff1916911515919091179055600101613313565b5050506004820180548b92506000906135af908490613f72565b90915550506000888152600282016020526040812080548b92906135d4908490613f72565b90915550506001810154880361360357600381015460ff16156135fe5760038101805460ff191690555b61367c565b60018101546000908152600282016020526040808220548a83529120540361364557600381015460ff166135fe5760038101805460ff1916600117905561367c565b60018101546000908152600282016020526040808220548a8352912054111561367c576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b6040516136bb9392919061436d565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6136fc6137d3565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60045460009060ff16156137c957600083815260036020526040812054600280549192918390811061376f5761376f613e23565b600091825260208220600590910201805490925061378f90600190613dd7565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610ab3915050565b5060019392505050565b6137db6137fa565b6137f857604051631afcd79f60e31b815260040160405180910390fd5b565b60006138046136d0565b54600160401b900460ff16919050565b60006020828403121561382657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261385457600080fd5b8135602083016000806001600160401b038411156138745761387461382d565b50604051601f19601f85018116603f011681018181106001600160401b03821117156138a2576138a261382d565b6040528381529050808284018710156138ba57600080fd5b838360208301376000602085830101528094505050505092915050565b6000806000606084860312156138ec57600080fd5b833592506020840135915060408401356001600160401b0381111561391057600080fd5b61391c86828701613843565b9150509250925092565b6001600160a01b0381168114612c3957600080fd5b6000806000806080858703121561395157600080fd5b84359350602085013561396381613926565b93969395505050506040820135916060013590565b6000806040838503121561398b57600080fd5b50508035926020909101359150565b600080604083850312156139ad57600080fd5b82356139b881613926565b915060208301356001600160401b038111156139d357600080fd5b6139df85828601613843565b9150509250929050565b60005b83811015613a045781810151838201526020016139ec565b50506000910152565b60008151808452613a258160208601602086016139e9565b601f01601f19169290920160200192915050565b602081526000610ab36020830184613a0d565b838152821515602082015260606040820152600061089c6060830184613a0d565b600080600060608486031215613a8257600080fd5b83359250602084013591506040840135613a9b81613926565b809150509250925092565b60008083601f840112613ab857600080fd5b5081356001600160401b03811115613acf57600080fd5b6020830191508360208260051b8501011115613aea57600080fd5b9250929050565b60008060008060608587031215613b0757600080fd5b8435935060208501356001600160401b03811115613b2457600080fd5b613b3087828801613aa6565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613b7b578351835260209384019390920191600101613b5d565b509095945050505050565b600080600080600060a08688031215613b9e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613bd657600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613c0257600080fd5b8335613c0d81613926565b92506020840135915060408401356001600160401b0381111561391057600080fd5b60008060008060008060a08789031215613c4857600080fd5b8635955060208701356001600160401b03811115613c6557600080fd5b613c7189828a01613aa6565b909650945050604087013592506060870135915060808701356001600160401b03811115613c9e57600080fd5b613caa89828a01613843565b9150509295509295509295565b600060208284031215613cc957600080fd5b8135610ab381613926565b600080600080600060808688031215613cec57600080fd5b853594506020860135935060408601356001600160401b03811115613d1057600080fd5b8601601f81018813613d2157600080fd5b80356001600160401b03811115613d3757600080fd5b886020828401011115613d4957600080fd5b959894975060200195606001359392505050565b600080600060608486031215613d7257600080fd5b8335613d7d81613926565b92506020840135613d8d81613926565b91506040840135613a9b81613926565b60008060408385031215613db057600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b8181038181111561298257612982613dc1565b808202811582820484141761298257612982613dc1565b600082613e1e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80516001600160601b0381168114613e5057600080fd5b919050565b80518015158114613e5057600080fd5b600080600080600060a08688031215613e7d57600080fd5b613e8686613e39565b94506020860151613e9681613926565b604087015190945060058110613eab57600080fd5b9250613eb960608701613e55565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613ef657600080fd5b610ab382613e55565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b600080600060608486031215613f4b57600080fd5b83519250613f5b60208501613e55565b9150613f6960408501613e55565b90509250925092565b8082018082111561298257612982613dc1565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b600060208284031215613fce57600080fd5b5051919050565b600181811c90821680613fe957607f821691505b60208210810361400957634e487b7160e01b600052602260045260246000fd5b50919050565b83815282602082015260606040820152600080835461402d81613fd5565b806060860152600182166000811461404c57600181146140685761409c565b60ff1983166080870152608082151560051b870101935061409c565b86600052602060002060005b8381101561409357815488820160800152600190910190602001614074565b87016080019450505b5091979650505050505050565b600082516140bb8184602087016139e9565b9190910192915050565b600080600080600080600060e0888a0312156140e057600080fd5b6140e988613e39565b96506140f760208901613e55565b604089015160608a015160808b015160a08c015193995091975095509350915061412360c08901613e55565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611a2257806000526020600020601f840160051c810160208510156141de5750805b601f840160051c820191505b818110156141fe57600081556001016141ea565b5050505050565b6001600160401b0383111561421c5761421c61382d565b6142308361422a8354613fd5565b836141b7565b6000601f841160018114614264576000851561424c5750838201355b600019600387901b1c1916600186901b1783556141fe565b600083815260209020601f19861690835b828110156142955786850135825560209485019460019092019101614275565b50868210156142b25760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561430c57600080fd5b8151610ab381613926565b81835260006001600160fb1b0383111561433057600080fd5b8260051b80836020870137939093016020019392505050565b60408152600061435d604083018587614317565b9050826020830152949350505050565b604081526000614381604083018587614317565b82810360208401526143938185613a0d565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212205273a7fd5d9b74f6a10c8e8ff9173490991e595b881e9a1f0a7986976eaa245264736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "getLocalDisputeRoundID(uint256,uint256)": { - "details": "Returns the local dispute ID and round ID for a given core dispute ID and core round ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core." - }, - "returns": { - "localDisputeID": "The ID of the dispute in the Dispute Kit.", - "localRoundID": "The ID of the round in the Dispute Kit." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Returns the number of rounds in a dispute.", - "params": { - "_localDisputeID": "The ID of the dispute in the Dispute Kit." - }, - "returns": { - "_0": "The number of rounds in the dispute." - } - }, - "getVoteInfo(uint256,uint256,uint256)": { - "details": "Returns the vote information for a given vote ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The address of the juror who cast the vote.", - "commit": "The commit of the vote." - } - }, - "hashVote(uint256,uint256,string)": { - "details": "Computes the hash of a vote using ABI encodingThe unused parameters may be used by overriding contracts.", - "params": { - "_choice": "The choice being voted for", - "_justification": "The justification for the vote", - "_salt": "A random salt for commitment" - }, - "returns": { - "_0": "bytes32 The hash of the encoded vote parameters" - } - }, - "initialize(address,address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isAppealFunded(uint256)": { - "details": "Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "Whether the appeal funding is finished." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "DisputeKitClassic Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 21704, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 21707, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)11133" - }, - { - "astId": 21711, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)21643_storage)dyn_storage" - }, - { - "astId": 21715, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21717, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "singleDrawPerJuror", - "offset": 0, - "slot": "4", - "type": "t_bool" - }, - { - "astId": 21725, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "alreadyDrawn", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))" - }, - { - "astId": 21729, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "coreDisputeIDToActive", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 21731, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "wNative", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)21643_storage)dyn_storage": { - "base": "t_struct(Dispute)21643_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)21681_storage)dyn_storage": { - "base": "t_struct(Round)21681_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)21690_storage)dyn_storage": { - "base": "t_struct(Vote)21690_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)11133": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(uint256 => mapping(address => bool)))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)21643_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Dispute", - "members": [ - { - "astId": 21632, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)21681_storage)dyn_storage" - }, - { - "astId": 21634, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 21636, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 21640, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21642, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)21681_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Round", - "members": [ - { - "astId": 21647, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)21690_storage)dyn_storage" - }, - { - "astId": 21649, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 21653, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21655, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 21657, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 21659, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 21663, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21667, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 21673, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 21675, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 21678, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 21680, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)21690_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Vote", - "members": [ - { - "astId": 21683, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 21685, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 21687, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 21689, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrum/DisputeKitClassic_Proxy.json b/contracts/deployments/arbitrum/DisputeKitClassic_Proxy.json deleted file mode 100644 index bfc0c7eae..000000000 --- a/contracts/deployments/arbitrum/DisputeKitClassic_Proxy.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "address": "0x70B464be85A547144C72485eBa2577E5D3A45421", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xd259302573f9813ae47fc2f9b011f616f4be126418e783b38dd925f204d906fc", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x70B464be85A547144C72485eBa2577E5D3A45421", - "transactionIndex": 3, - "gasUsed": "370687", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000004000000000000000000000000000000000000000000400000000800000000000000000000000000000000", - "blockHash": "0x9ef5590771fb4a09e609e46729eb2f307ec8c215acedbd827de6d56b3a8f2577", - "transactionHash": "0xd259302573f9813ae47fc2f9b011f616f4be126418e783b38dd925f204d906fc", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 272063168, - "transactionHash": "0xd259302573f9813ae47fc2f9b011f616f4be126418e783b38dd925f204d906fc", - "address": "0x70B464be85A547144C72485eBa2577E5D3A45421", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 9, - "blockHash": "0x9ef5590771fb4a09e609e46729eb2f307ec8c215acedbd827de6d56b3a8f2577" - } - ], - "blockNumber": 272063168, - "cumulativeGasUsed": "1689314", - "status": 1, - "byzantium": true - }, - "args": [ - "0xAF0325dbBFa812a574743Bb5A085266D31e3e03a", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Workaround to get meaningful names for the proxy contracts Otherwise all the contracts are called `UUPSProxy` on the chain explorers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitClassicNeoProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212201794998342bb1cd2ef0f3a37df1807bf3e7ce8cccf145231219f8598e7a8b2c664736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212201794998342bb1cd2ef0f3a37df1807bf3e7ce8cccf145231219f8598e7a8b2c664736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Workaround to get meaningful names for the proxy contracts Otherwise all the contracts are called `UUPSProxy` on the chain explorers", - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/DisputeKitGated.json b/contracts/deployments/arbitrum/DisputeKitGated.json deleted file mode 100644 index eefc6616b..000000000 --- a/contracts/deployments/arbitrum/DisputeKitGated.json +++ /dev/null @@ -1,1240 +0,0 @@ -{ - "address": "0xaE1eed20C125B739b64c948820C61F809ad9a925", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "extraDataToTokenInfo", - "outputs": [ - { - "internalType": "address", - "name": "tokenGate", - "type": "address" - }, - { - "internalType": "bool", - "name": "isERC1155", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x2df70cb0e77da4f9e5f9c0799df57f4584279e3eada9a226a6a049ec8d7d0897", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xaE1eed20C125B739b64c948820C61F809ad9a925", - "transactionIndex": 9, - "gasUsed": "228501", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000020000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xcac1900c875542795826e4e2f892aad5de97bfffd195bb789ac244df2c5b4f29", - "transactionHash": "0x2df70cb0e77da4f9e5f9c0799df57f4584279e3eada9a226a6a049ec8d7d0897", - "logs": [ - { - "transactionIndex": 9, - "blockNumber": 364034429, - "transactionHash": "0x2df70cb0e77da4f9e5f9c0799df57f4584279e3eada9a226a6a049ec8d7d0897", - "address": "0xaE1eed20C125B739b64c948820C61F809ad9a925", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 3, - "blockHash": "0xcac1900c875542795826e4e2f892aad5de97bfffd195bb789ac244df2c5b4f29" - } - ], - "blockNumber": 364034429, - "cumulativeGasUsed": "1192860", - "status": 1, - "byzantium": true - }, - "args": [ - "0xEA7863E6dE863e8E6d037D8693ad5dA45Db7790a", - "0xc0c53b8b000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000991d2df165670b9cac3b022f4b68d65b664222ea00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1" - ], - "numDeployments": 1, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitGatedProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220996d130d61aaeb26a9d0d04a99b8d31e12de6834d2200a693f04efa432fb1da264736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220996d130d61aaeb26a9d0d04a99b8d31e12de6834d2200a693f04efa432fb1da264736f6c634300081c0033", - "execute": { - "methodName": "initialize", - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1" - ] - }, - "implementation": "0xEA7863E6dE863e8E6d037D8693ad5dA45Db7790a", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/DisputeKitGatedShutter.json b/contracts/deployments/arbitrum/DisputeKitGatedShutter.json deleted file mode 100644 index 5017da8e8..000000000 --- a/contracts/deployments/arbitrum/DisputeKitGatedShutter.json +++ /dev/null @@ -1,1314 +0,0 @@ -{ - "address": "0x788330092B9704809C19858E39EB9Ac402c2E47b", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "CommitCastShutter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "castCommitShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVoteShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x2fa78e2ff0776968dd343541316038adf2b361d51d423989f38975bf9f9d1141", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x788330092B9704809C19858E39EB9Ac402c2E47b", - "transactionIndex": 4, - "gasUsed": "228419", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000800000000000000000080000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x41216ca34b46131cdfbdacb6eb99ce2aeae86cb1c8ed38f1b71e4d1d8eb8d302", - "transactionHash": "0x2fa78e2ff0776968dd343541316038adf2b361d51d423989f38975bf9f9d1141", - "logs": [ - { - "transactionIndex": 4, - "blockNumber": 364034451, - "transactionHash": "0x2fa78e2ff0776968dd343541316038adf2b361d51d423989f38975bf9f9d1141", - "address": "0x788330092B9704809C19858E39EB9Ac402c2E47b", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 2, - "blockHash": "0x41216ca34b46131cdfbdacb6eb99ce2aeae86cb1c8ed38f1b71e4d1d8eb8d302" - } - ], - "blockNumber": 364034451, - "cumulativeGasUsed": "441843", - "status": 1, - "byzantium": true - }, - "args": [ - "0xb12EB4c0716d3A9861a9AC471c6CdDB808d61b32", - "0xc0c53b8b000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000991d2df165670b9cac3b022f4b68d65b664222ea00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1" - ], - "numDeployments": 1, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitGatedShutterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122014335073f133775bc3d53bdbd73e5b08fc775962b3f58fb9a922739829545a1f64736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122014335073f133775bc3d53bdbd73e5b08fc775962b3f58fb9a922739829545a1f64736f6c634300081c0033", - "execute": { - "methodName": "initialize", - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1" - ] - }, - "implementation": "0xb12EB4c0716d3A9861a9AC471c6CdDB808d61b32", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/DisputeKitGatedShutter_Implementation.json b/contracts/deployments/arbitrum/DisputeKitGatedShutter_Implementation.json deleted file mode 100644 index 09c042717..000000000 --- a/contracts/deployments/arbitrum/DisputeKitGatedShutter_Implementation.json +++ /dev/null @@ -1,1975 +0,0 @@ -{ - "address": "0xb12EB4c0716d3A9861a9AC471c6CdDB808d61b32", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "CommitCastShutter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "castCommitShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVoteShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x92cdc20c7dc734658ecd517e152a4609cddb83ecc1148b0e3aaa04914dff749f", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xb12EB4c0716d3A9861a9AC471c6CdDB808d61b32", - "transactionIndex": 1, - "gasUsed": "4170135", - "logsBloom": "0x00000000000000000000000000000000100000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x8a6ce2400d0f5ada9d21362a41283917162913719c7678683daaf363c7c8a665", - "transactionHash": "0x92cdc20c7dc734658ecd517e152a4609cddb83ecc1148b0e3aaa04914dff749f", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 364034443, - "transactionHash": "0x92cdc20c7dc734658ecd517e152a4609cddb83ecc1148b0e3aaa04914dff749f", - "address": "0xb12EB4c0716d3A9861a9AC471c6CdDB808d61b32", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 0, - "blockHash": "0x8a6ce2400d0f5ada9d21362a41283917162913719c7678683daaf363c7c8a665" - } - ], - "blockNumber": 364034443, - "cumulativeGasUsed": "4170135", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_identity\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_encryptedVote\",\"type\":\"bytes\"}],\"name\":\"CommitCastShutter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"name\":\"alreadyDrawn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_identity\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_encryptedVote\",\"type\":\"bytes\"}],\"name\":\"castCommitShutter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVoteShutter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getLocalDisputeRoundID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localDisputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"hashVote\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"isAppealFunded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleDrawPerJuror\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"CommitCastShutter(uint256,address,bytes32,bytes32,bytes)\":{\"details\":\"Emitted when a vote is cast.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_encryptedVote\":\"The Shutter encrypted vote.\",\"_identity\":\"The Shutter identity used for encryption.\",\"_juror\":\"The address of the juror casting the vote commitment.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castCommitShutter(uint256,uint256[],bytes32,bytes32,bytes)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash including the justification.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_encryptedVote\":\"The Shutter encrypted vote.\",\"_identity\":\"The Shutter identity used for encryption.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"getLocalDisputeRoundID(uint256,uint256)\":{\"details\":\"Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\"},\"returns\":{\"localDisputeID\":\"The ID of the dispute in the Dispute Kit.\",\"localRoundID\":\"The ID of the round in the Dispute Kit.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Returns the number of rounds in a dispute.\",\"params\":{\"_localDisputeID\":\"The ID of the dispute in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of rounds in the dispute.\"}},\"getVoteInfo(uint256,uint256,uint256)\":{\"details\":\"Returns the vote information for a given vote ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The address of the juror who cast the vote.\",\"commit\":\"The commit of the vote.\"}},\"hashVote(uint256,uint256,string)\":{\"details\":\"Computes the hash of a vote using ABI encoding\",\"params\":{\"_choice\":\"The choice being voted for\",\"_justification\":\"The justification for the vote\",\"_salt\":\"A random salt for commitment\"},\"returns\":{\"_0\":\"bytes32 The hash of the encoded vote parameters\"}},\"initialize(address,address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isAppealFunded(uint256)\":{\"details\":\"Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"Whether the appeal funding is finished.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"DisputeKitGatedShutter Added functionality: shielded voting. Dispute kit implementation adapted from DisputeKitClassic - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitGatedShutter.sol\":\"DisputeKitGatedShutter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassicBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore, KlerosCoreBase, IDisputeKit, ISortitionModule} from \\\"../KlerosCore.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {SafeSend} from \\\"../../libraries/SafeSend.sol\\\";\\n\\n/// @title DisputeKitClassicBase\\n/// Abstract Dispute kit classic implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\nabstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable {\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default.\\n mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool)))\\n public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading.\\n mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function __DisputeKitClassicBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n dispute.jumped = false; // Possibly true if this DK has jumped in a previous round.\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n coreDisputeIDToActive[_coreDisputeID] = true;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[localRoundID];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n if (drawnAddress == address(0)) {\\n // Sortition can return 0 address if no one has staked yet.\\n return drawnAddress;\\n }\\n\\n if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true;\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash.\\n function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n }\\n\\n function _castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender);\\n }\\n\\n function _castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification,\\n address _juror\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n bytes32 voteHash = hashVote(_choice, _salt, _justification);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == _juror, \\\"The juror has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == voteHash,\\n \\\"The vote hash must match the commitment in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n } // Workaround stack too deep\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.safeSend(amount, wNative);\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @dev The unused parameters may be used by overriding contracts.\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(_choice, _salt));\\n }\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length;\\n\\n return round.totalVoted == expectedTotalVoted;\\n }\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) {\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n // Uses block.timestamp from the current tx when called by the core contract.\\n return (fundedChoices.length == 0 &&\\n block.timestamp - appealPeriodStart >=\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT);\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n /// @dev Returns the number of rounds in a dispute.\\n /// @param _localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return The number of rounds in the dispute.\\n function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) {\\n return disputes[_localDisputeID].rounds.length;\\n }\\n\\n /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @return localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return localRoundID The ID of the round in the Dispute Kit.\\n function getLocalDisputeRoundID(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID\\n ) external view returns (uint256 localDisputeID, uint256 localRoundID) {\\n localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID];\\n }\\n\\n /// @dev Returns the vote information for a given vote ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @param _voteID The ID of the vote.\\n /// @return account The address of the juror who cast the vote.\\n /// @return commit The commit of the vote.\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts.\\n /// minStake is checked directly during staking process however it's possible for the juror to get drawn\\n /// while having < minStake if it is later increased by governance.\\n /// This issue is expected and harmless.\\n /// @param _round The round in which the juror is being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return result Whether the address passes the check or not.\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view virtual returns (bool result) {\\n if (singleDrawPerJuror) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n result = !alreadyDrawn[localDisputeID][localRoundID][_juror];\\n } else {\\n result = true;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc418b9a76802db5d16819836734ecff8b76d5f37101819aee6fd1844dfe21dd9\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitGatedShutter.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {DisputeKitClassicBase, KlerosCore} from \\\"./DisputeKitClassicBase.sol\\\";\\n\\ninterface IBalanceHolder {\\n /// @dev Returns the number of tokens in `owner` account.\\n /// @dev Compatible with ERC-20 and ERC-721.\\n /// @param owner The address of the owner.\\n /// @return balance The number of tokens in `owner` account.\\n function balanceOf(address owner) external view returns (uint256 balance);\\n}\\n\\ninterface IBalanceHolderERC1155 {\\n /// @dev Returns the balance of an ERC-1155 token.\\n /// @param account The address of the token holder\\n /// @param id ID of the token\\n /// @return The token balance\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n}\\n\\n/// @title DisputeKitGatedShutter\\n/// Added functionality: shielded voting.\\n/// Dispute kit implementation adapted from DisputeKitClassic\\n/// - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitGatedShutter is DisputeKitClassicBase {\\n string public constant override version = \\\"0.12.0\\\";\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a vote is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _commit The commitment hash.\\n /// @param _identity The Shutter identity used for encryption.\\n /// @param _encryptedVote The Shutter encrypted vote.\\n event CommitCastShutter(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n bytes32 indexed _commit,\\n bytes32 _identity,\\n bytes _encryptedVote\\n );\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(address _governor, KlerosCore _core, address _wNative) external reinitializer(1) {\\n __DisputeKitClassicBase_initialize(_governor, _core, _wNative);\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(9) {\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash including the justification.\\n /// @param _identity The Shutter identity used for encryption.\\n /// @param _encryptedVote The Shutter encrypted vote.\\n function castCommitShutter(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit,\\n bytes32 _identity,\\n bytes calldata _encryptedVote\\n ) external notJumped(_coreDisputeID) {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n emit CommitCastShutter(_coreDisputeID, msg.sender, _commit, _identity, _encryptedVote);\\n }\\n\\n function castVoteShutter(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n address juror = dispute.rounds[dispute.rounds.length - 1].votes[_voteIDs[0]].account;\\n\\n // _castVote() ensures that all the _voteIDs do belong to `juror`\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, juror);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure override returns (bytes32) {\\n bytes32 justificationHash = keccak256(bytes(_justification));\\n return keccak256(abi.encode(_choice, _salt, justificationHash));\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Extracts token gating information from the extra data.\\n /// @param _extraData The extra data bytes array with the following encoding:\\n /// - bytes 0-31: uint96 courtID, not used here\\n /// - bytes 32-63: uint256 minJurors, not used here\\n /// - bytes 64-95: uint256 disputeKitID, not used here\\n /// - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160)\\n /// - bytes 128-159: uint256 tokenId\\n /// @return tokenGate The address of the token contract used for gating access.\\n /// @return isERC1155 True if the token is an ERC-1155, false for ERC-20/ERC-721.\\n /// @return tokenId The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721).\\n function _extraDataToTokenInfo(\\n bytes memory _extraData\\n ) internal pure returns (address tokenGate, bool isERC1155, uint256 tokenId) {\\n // Need at least 160 bytes to safely read the parameters\\n if (_extraData.length < 160) return (address(0), false, 0);\\n\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let packedTokenGateIsERC1155 := mload(add(_extraData, 0x80)) // 4th parameter at offset 128\\n tokenId := mload(add(_extraData, 0xA0)) // 5th parameter at offset 160 (moved up)\\n\\n // Unpack address from lower 160 bits and bool from bit 160\\n tokenGate := and(packedTokenGateIsERC1155, 0xffffffffffffffffffffffffffffffffffffffff)\\n isERC1155 := and(shr(160, packedTokenGateIsERC1155), 1)\\n }\\n }\\n\\n /// @inheritdoc DisputeKitClassicBase\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view override returns (bool) {\\n if (!super._postDrawCheck(_round, _coreDisputeID, _juror)) return false;\\n\\n // Get the local dispute and extract token info from extraData\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n (address tokenGate, bool isERC1155, uint256 tokenId) = _extraDataToTokenInfo(dispute.extraData);\\n\\n // If no token gate is specified, allow all jurors\\n if (tokenGate == address(0)) return true;\\n\\n // Check juror's token balance\\n if (isERC1155) {\\n return IBalanceHolderERC1155(tokenGate).balanceOf(_juror, tokenId) > 0;\\n } else {\\n return IBalanceHolder(tokenGate).balanceOf(_juror) > 0;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa2b7c8f0af04be5a41d5e0a3a97b359867f6e79eb98da2303d33317fe147faef\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161489e6100fc60003960008181611937015281816119600152611b4f015261489e6000f3fe6080604052600436106102465760003560e01c80636d4cd8ea11610139578063be467604116100b6578063e4c0aaf41161007a578063e4c0aaf414610753578063f2f4eb2614610773578063f32ab92714610793578063f7e7d1fd146107c8578063f8abee10146107e8578063fc6f8f161461081857600080fd5b8063be467604146106dd578063c0c53b8b146106f3578063d2b8035a14610713578063da3beb8c14610733578063e349ad30146105c557600080fd5b80638f06f112116100fd5780638f06f1121461061b578063a7cc08fe1461063b578063b34bfaa814610687578063b6ede5401461069d578063ba66fde7146106bd57600080fd5b80636d4cd8ea14610585578063751accd0146105a5578063796490f9146105c55780637c04034e146105db5780638e426460146105fb57600080fd5b80634b2f0ea0116101c75780635a155ccd1161018b5780635a155ccd1461048a5780635c92e2f6146104cb57806365540b96146104eb578063675926f61461051857806369f3f0411461053857600080fd5b80634b2f0ea0146103e15780634f1ef286146103f457806352d1902d1461040757806354fd4d501461041c578063564a565d1461045b57600080fd5b80631c3db16d1161020e5780631c3db16d1461032a5780631cc3423a146103675780632621b9a2146103875780632d68efc9146103a1578063362c3479146103c157600080fd5b80630855bbe91461024b57806309cc41b8146102805780630baa64d1146102a25780630c340a24146102c25780631200aabc146102ef575b600080fd5b34801561025757600080fd5b5061026b610266366004613bfc565b610838565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004613ca1565b610900565b005b3480156102ae57600080fd5b5061026b6102bd366004613bfc565b6109be565b3480156102ce57600080fd5b506000546102e2906001600160a01b031681565b6040516102779190613d31565b3480156102fb57600080fd5b5061031c61030a366004613bfc565b60036020526000908152604090205481565b604051908152602001610277565b34801561033657600080fd5b5061034a610345366004613bfc565b610a35565b604080519384529115156020840152151590820152606001610277565b34801561037357600080fd5b5061031c610382366004613def565b610ba3565b34801561039357600080fd5b5060045461026b9060ff1681565b3480156103ad57600080fd5b506007546102e2906001600160a01b031681565b3480156103cd57600080fd5b5061031c6103dc366004613e53565b610be3565b6102a06103ef366004613e90565b611093565b6102a0610402366004613eb2565b611923565b34801561041357600080fd5b5061031c611b42565b34801561042857600080fd5b5061044e604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102779190613f51565b34801561046757600080fd5b5061047b610476366004613bfc565b611ba0565b60405161027793929190613f64565b34801561049657600080fd5b5061026b6104a5366004613f85565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104d757600080fd5b506102a06104e6366004613fbe565b611c66565b3480156104f757600080fd5b5061050b610506366004613bfc565b611c72565b6040516102779190614010565b34801561052457600080fd5b5061031c610533366004614053565b611d36565b34801561054457600080fd5b5061055861055336600461408e565b611e79565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610277565b34801561059157600080fd5b5061026b6105a0366004613bfc565b611f31565b3480156105b157600080fd5b506102a06105c03660046140ba565b6120b4565b3480156105d157600080fd5b5061031c61271081565b3480156105e757600080fd5b506102a06105f63660046140fc565b612180565b34801561060757600080fd5b506102a0610616366004614184565b612197565b34801561062757600080fd5b506102a06106363660046140fc565b6121e3565b34801561064757600080fd5b5061065b61065636600461408e565b6122a9565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610277565b34801561069357600080fd5b5061031c614e2081565b3480156106a957600080fd5b506102a06106b83660046141a1565b61236f565b3480156106c957600080fd5b5061026b6106d836600461408e565b612562565b3480156106e957600080fd5b5061031c61138881565b3480156106ff57600080fd5b506102a061070e3660046141fb565b6125fd565b34801561071f57600080fd5b506102e261072e366004613e90565b6126c7565b34801561073f57600080fd5b5061031c61074e366004613e90565b612a16565b34801561075f57600080fd5b506102a061076e366004614184565b612b69565b34801561077f57600080fd5b506001546102e2906001600160a01b031681565b34801561079f57600080fd5b506107b36107ae366004613e90565b612bb5565b60408051928352602083019190915201610277565b3480156107d457600080fd5b506102a06107e3366004614184565b612c07565b3480156107f457600080fd5b5061026b610803366004613bfc565b60066020526000908152604090205460ff1681565b34801561082457600080fd5b5061031c610833366004613bfc565b612cd9565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa158015610885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a9919061423b565b9150915060006108b885611c72565b9050805160001480156108f757506127106113886108d68585614275565b6108e09190614288565b6108ea919061429f565b6108f48442614275565b10155b95945050505050565b600087815260036020526040902054600280548992908110610924576109246142c1565b600091825260209091206002600590920201015460ff16156109615760405162461bcd60e51b8152600401610958906142d7565b60405180910390fd5b61096d88888888612d05565b84336001600160a01b0316897fbc1efa6396a4ba1a755245703b38c48fbe744ab5117d9f09f47d26ffc1df999e8787876040516109ac93929190614337565b60405180910390a45050505050505050565b6000818152600360205260408120546002805483929081106109e2576109e26142c1565b60009182526020822060059091020180549092508290610a0490600190614275565b81548110610a1457610a146142c1565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610a6157610a616142c1565b60009182526020822060059091020180549092508290610a8390600190614275565b81548110610a9357610a936142c1565b60009182526020909120600c90910201600381015460ff169450905083610abe578060010154610ac1565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b34919061437d565b5090935060049250610b44915050565b816004811115610b5657610b566143e6565b03610b99576000610b6688611c72565b90508051600103610b975780600081518110610b8457610b846142c1565b6020026020010151965060009550600194505b505b5050509193909250565b80516020808301919091206040805180840187905280820186905260608082019390935281518082039093018352608001905280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c55919061437d565b50935050505080610ca85760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e00000000006044820152606401610958565b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f91906143fc565b15610d5d5760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610958565b60008681526006602052604090205460ff16610d8b5760405162461bcd60e51b815260040161095890614417565b600086815260036020526040812054600280549091908110610daf57610daf6142c1565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610de357610de36142c1565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e62919061444e565b5050600087815260078401602052604090205490915060ff16610eac576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ff1565b808603610f21576000868152600683016020526040902054610ecf576000610f1a565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610f109190614288565b610f1a919061429f565b9450610ff1565b600081815260078301602052604090205460ff16610ff15781600601600083600a01600181548110610f5557610f556142c1565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610f8b57610f8b6142c1565b9060005260206000200154815260200190815260200160002054610faf919061448a565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610fe49190614288565b610fee919061429f565b94505b6001600160a01b03881660009081526008830160209081526040808320898452909152812055841561108757600754611038906001600160a01b038a811691889116613068565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae898960405161107e929190918252602082015260400190565b60405180910390a45b50505050949350505050565b6000828152600360205260409020546002805484929081106110b7576110b76142c1565b600091825260209091206002600590920201015460ff16156110eb5760405162461bcd60e51b8152600401610958906142d7565b60008381526003602052604081205460028054909190811061110f5761110f6142c1565b9060005260206000209060050201905080600101548311156111735760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610958565b60008481526006602052604090205460ff166111a15760405162461bcd60e51b815260040161095890614417565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156111ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611212919061423b565b9150915081421015801561122557508042105b61126a5760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610958565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156112ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf919061444e565b505090508681036112e4576127109150611365565b6127106113886112f48686614275565b6112fe9190614288565b611308919061429f565b6113128542614275565b1061135f5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610958565b614e2091505b8454600090869061137890600190614275565b81548110611388576113886142c1565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b919061449d565b6114159190614275565b60008a815260078401602052604090205490915060ff16156114795760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610958565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e7919061449d565b905060006127106114f88784614288565b611502919061429f565b61150c908361448a565b60008c8152600686016020526040812054919250908211156115bd5760008c815260068601602052604090205434906115459084614275565b1161156a5760008c81526006860160205260409020546115659083614275565b61156c565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516115b4929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906115e990849061448a565b909155505060008c81526006860160205260408120805483929061160e90849061448a565b909155505060008c815260068601602052604090205482116116e05760008c81526006860160205260408120546009870180549192909161165090849061448a565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156118eb578285600901546116fd9190614275565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa15801561174b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176f91906143fc565b156117885760028a01805460ff1916600117905561186b565b895460038b01600061179b87600161448a565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161181691815260200190565b602060405180830381865afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611857919061449d565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016118b8939291906144f0565b6000604051808303818588803b1580156118d157600080fd5b505af11580156118e5573d6000803e3d6000fd5b50505050505b80341115611914576119146119008234614275565b6007543391906001600160a01b0316613068565b50505050505050505050505050565b61192c82613153565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119aa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661199e6000805160206148498339815191525490565b6001600160a01b031614155b156119c85760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a22575060408051601f3d908101601f19168201909252611a1f9181019061449d565b60015b611a415781604051630c76093760e01b81526004016109589190613d31565b6000805160206148498339815191528114611a7257604051632a87526960e21b815260048101829052602401610958565b6000805160206148498339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611b3d576000836001600160a01b031683604051611ad9919061458a565b600060405180830381855af49150503d8060008114611b14576040519150601f19603f3d011682016040523d82523d6000602084013e611b19565b606091505b5050905080611b3b576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b8d5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061484983398151915290565b60028181548110611bb057600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611be3906144b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0f906144b6565b8015611c5c5780601f10611c3157610100808354040283529160200191611c5c565b820191906000526020600020905b815481529060010190602001808311611c3f57829003601f168201915b5050505050905083565b611b3b84848484612d05565b6000818152600360205260408120546002805460609392908110611c9857611c986142c1565b60009182526020822060059091020180549092508290611cba90600190614275565b81548110611cca57611cca6142c1565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611d2857602002820191906000526020600020905b815481526020019060010190808311611d14575b505050505092505050919050565b600085815260036020526040812054600280548392908110611d5a57611d5a6142c1565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611d8e57611d8e6142c1565b90600052602060002090600c02016000018681548110611db057611db06142c1565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e32919061444e565b506003850154919350915060ff168015611e5657508183600201541480611e565750805b15611e69576127109450505050506108f7565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611eaa57611eaa6142c1565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611ede57611ede6142c1565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611f5557611f556142c1565b60009182526020822060059091020180549092508290611f7790600190614275565b81548110611f8757611f876142c1565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611fe2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612006919061437d565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208591906145a6565b505050505091505060008161209b5783546120a1565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b031633146120de5760405162461bcd60e51b815260040161095890614612565b6000836001600160a01b031683836040516120f9919061458a565b60006040518083038185875af1925050503d8060008114612136576040519150601f19603f3d011682016040523d82523d6000602084013e61213b565b606091505b5050905080611b3b5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610958565b61218f86868686868633613180565b505050505050565b6000546001600160a01b031633146121c15760405162461bcd60e51b815260040161095890614612565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600086815260036020526040812054600280549091908110612207576122076142c1565b6000918252602082206005909102018054909250829061222990600190614275565b81548110612239576122396142c1565b90600052602060002090600c02016000018787600081811061225d5761225d6142c1565b9050602002013581548110612274576122746142c1565b60009182526020909120600490910201546001600160a01b0316905061229f88888888888887613180565b5050505050505050565b60008060008060006002600360008a815260200190815260200160002054815481106122d7576122d76142c1565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061230b5761230b6142c1565b90600052602060002090600c0201600001878154811061232d5761232d6142c1565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146123995760405162461bcd60e51b815260040161095890614654565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2016124248587836146e6565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab919061449d565b6124b59190614275565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab5810890612550908a908a908a90614337565b60405180910390a25050505050505050565b600083815260036020526040812054600280548392908110612586576125866142c1565b600091825260208083208784526003600590930201918201905260408220548154919350839181106125ba576125ba6142c1565b90600052602060002090600c020160000184815481106125dc576125dc6142c1565b600091825260209091206004909102016003015460ff169695505050505050565b600160006126096138b1565b8054909150600160401b900460ff1680612630575080546001600160401b03808416911610155b1561264d5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556126798585856138d5565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146126f45760405162461bcd60e51b815260040161095890614654565b600083815260036020526040902054600280548592908110612718576127186142c1565b600091825260209091206002600590920201015460ff161561274c5760405162461bcd60e51b8152600401610958906142d7565b6000848152600360205260408120546002805491929183908110612772576127726142c1565b600091825260208220600590910201805490925061279290600190614275565b905060008260000182815481106127ab576127ab6142c1565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283491906147a5565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a7919061437d565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561290b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292f91906147a5565b98506001600160a01b03891661294b5750505050505050612a0f565b612956848c8b61391c565b15612a0257604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612a07565b600098505b505050505050505b5092915050565b600082815260036020526040812054600280548392908110612a3a57612a3a6142c1565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612a6e57612a6e6142c1565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af1919061444e565b5091509150826004015460001480612b20575080158015612b2057506000828152600284016020526040902054155b15612b32576000945050505050612b63565b8015612b47575050600401549150612b639050565b506000908152600290910160205260409020549150612b639050565b92915050565b6000546001600160a01b03163314612b935760405162461bcd60e51b815260040161095890614612565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546002805491929183908110612bdb57612bdb6142c1565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612c136138b1565b8054909150600160401b900460ff1680612c3a575080546001600160401b03808416911610155b15612c575760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612cee57612cee6142c1565b600091825260209091206005909102015492915050565b600084815260036020526040902054600280548692908110612d2957612d296142c1565b600091825260209091206002600590920201015460ff1615612d5d5760405162461bcd60e51b8152600401610958906142d7565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcb919061437d565b5090935060019250612ddb915050565b816004811115612ded57612ded6143e6565b14612e4a5760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610958565b82612e875760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610958565b60008681526006602052604090205460ff16612eb55760405162461bcd60e51b815260040161095890614417565b600086815260036020526040812054600280549091908110612ed957612ed96142c1565b60009182526020822060059091020180549092508290612efb90600190614275565b81548110612f0b57612f0b6142c1565b90600052602060002090600c0201905060005b86811015613001573382898984818110612f3a57612f3a6142c1565b9050602002013581548110612f5157612f516142c1565b60009182526020909120600490910201546001600160a01b031614612fb85760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610958565b8582898984818110612fcc57612fcc6142c1565b9050602002013581548110612fe357612fe36142c1565b60009182526020909120600160049092020181019190915501612f1e565b5086869050816005016000828254613019919061448a565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890613056908b908b908b906147f4565b60405180910390a35050505050505050565b6040516001600160a01b0384169083156108fc029084906000818181858888f193505050501561309757505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130d257600080fd5b505af11580156130e6573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b15801561313657600080fd5b505af115801561314a573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461317d5760405162461bcd60e51b815260040161095890614612565b50565b6000878152600360205260409020546002805489929081106131a4576131a46142c1565b600091825260209091206002600590920201015460ff16156131d85760405162461bcd60e51b8152600401610958906142d7565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613246919061437d565b5090935060029250613256915050565b816004811115613268576132686143e6565b146132c35760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610958565b866133055760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610958565b60008981526006602052604090205460ff166133335760405162461bcd60e51b815260040161095890614417565b600089815260036020526040812054600280549091908110613357576133576142c1565b9060005260206000209060050201905080600101548711156133b25760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610958565b805460009082906133c590600190614275565b815481106133d5576133d56142c1565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d9061341a908f9060040190815260200190565b60a060405180830381865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b919061437d565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156134b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134da91906145a6565b505050505091505060006134ef8b8b8b610ba3565b905060005b8c811015613776576001600160a01b038916858f8f84818110613519576135196142c1565b9050602002013581548110613530576135306142c1565b60009182526020909120600490910201546001600160a01b0316146135975760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610958565b8215806135de575081858f8f848181106135b3576135b36142c1565b90506020020135815481106135ca576135ca6142c1565b906000526020600020906004020160010154145b61365e5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610958565b848e8e83818110613671576136716142c1565b9050602002013581548110613688576136886142c1565b600091825260209091206003600490920201015460ff16156136e15760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610958565b8b858f8f848181106136f5576136f56142c1565b905060200201358154811061370c5761370c6142c1565b60009182526020909120600260049092020101556001858f8f84818110613735576137356142c1565b905060200201358154811061374c5761374c6142c1565b60009182526020909120600490910201600301805460ff19169115159190911790556001016134f4565b5050506004820180548b925060009061379090849061448a565b90915550506000888152600282016020526040812080548b92906137b590849061448a565b9091555050600181015488036137e457600381015460ff16156137df5760038101805460ff191690555b61385d565b60018101546000908152600282016020526040808220548a83529120540361382657600381015460ff166137df5760038101805460ff1916600117905561385d565b60018101546000908152600282016020526040808220548a8352912054111561385d576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b60405161389c93929190614818565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6138dd613ade565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b6000613929848484613b05565b61393557506000610bdc565b600083815260036020526040812054600280549192918390811061395b5761395b6142c1565b906000526020600020906005020190506000806000613a05846004018054613982906144b6565b80601f01602080910402602001604051908101604052809291908181526020018280546139ae906144b6565b80156139fb5780601f106139d0576101008083540402835291602001916139fb565b820191906000526020600020905b8154815290600101906020018083116139de57829003601f168201915b5050505050613b9d565b919450925090506001600160a01b038316613a2857600195505050505050610bdc565b8115613aaf57604051627eeac760e11b81526001600160a01b038881166004830152602482018390526000919085169062fdd58e906044015b602060405180830381865afa158015613a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa2919061449d565b1195505050505050610bdc565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190613a61908b90600401613d31565b613ae6613be2565b613b0357604051631afcd79f60e31b815260040160405180910390fd5b565b60045460009060ff1615613b93576000838152600360205260408120546002805491929183908110613b3957613b396142c1565b6000918252602082206005909102018054909250613b5990600190614275565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610bdc915050565b5060019392505050565b600080600060a084511015613bba57506000915081905080613bdb565b505050608081015160a0808301516001600160a01b0383169290911c600116905b9193909250565b6000613bec6138b1565b54600160401b900460ff16919050565b600060208284031215613c0e57600080fd5b5035919050565b60008083601f840112613c2757600080fd5b5081356001600160401b03811115613c3e57600080fd5b6020830191508360208260051b8501011115613c5957600080fd5b9250929050565b60008083601f840112613c7257600080fd5b5081356001600160401b03811115613c8957600080fd5b602083019150836020828501011115613c5957600080fd5b600080600080600080600060a0888a031215613cbc57600080fd5b8735965060208801356001600160401b03811115613cd957600080fd5b613ce58a828b01613c15565b909750955050604088013593506060880135925060808801356001600160401b03811115613d1257600080fd5b613d1e8a828b01613c60565b989b979a50959850939692959293505050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613d6c57600080fd5b8135602083016000806001600160401b03841115613d8c57613d8c613d45565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613dba57613dba613d45565b604052838152905080828401871015613dd257600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613e0457600080fd5b833592506020840135915060408401356001600160401b03811115613e2857600080fd5b613e3486828701613d5b565b9150509250925092565b6001600160a01b038116811461317d57600080fd5b60008060008060808587031215613e6957600080fd5b843593506020850135613e7b81613e3e565b93969395505050506040820135916060013590565b60008060408385031215613ea357600080fd5b50508035926020909101359150565b60008060408385031215613ec557600080fd5b8235613ed081613e3e565b915060208301356001600160401b03811115613eeb57600080fd5b613ef785828601613d5b565b9150509250929050565b60005b83811015613f1c578181015183820152602001613f04565b50506000910152565b60008151808452613f3d816020860160208601613f01565b601f01601f19169290920160200192915050565b602081526000610bdc6020830184613f25565b83815282151560208201526060604082015260006108f76060830184613f25565b600080600060608486031215613f9a57600080fd5b83359250602084013591506040840135613fb381613e3e565b809150509250925092565b60008060008060608587031215613fd457600080fd5b8435935060208501356001600160401b03811115613ff157600080fd5b613ffd87828801613c15565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b8181101561404857835183526020938401939092019160010161402a565b509095945050505050565b600080600080600060a0868803121561406b57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000606084860312156140a357600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156140cf57600080fd5b83356140da81613e3e565b92506020840135915060408401356001600160401b03811115613e2857600080fd5b60008060008060008060a0878903121561411557600080fd5b8635955060208701356001600160401b0381111561413257600080fd5b61413e89828a01613c15565b909650945050604087013592506060870135915060808701356001600160401b0381111561416b57600080fd5b61417789828a01613d5b565b9150509295509295509295565b60006020828403121561419657600080fd5b8135610bdc81613e3e565b6000806000806000608086880312156141b957600080fd5b853594506020860135935060408601356001600160401b038111156141dd57600080fd5b6141e988828901613c60565b96999598509660600135949350505050565b60008060006060848603121561421057600080fd5b833561421b81613e3e565b9250602084013561422b81613e3e565b91506040840135613fb381613e3e565b6000806040838503121561424e57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115612b6357612b6361425f565b8082028115828204841417612b6357612b6361425f565b6000826142bc57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006108f760408301848661430e565b80516001600160601b038116811461436857600080fd5b919050565b8051801515811461436857600080fd5b600080600080600060a0868803121561439557600080fd5b61439e86614351565b945060208601516143ae81613e3e565b6040870151909450600581106143c357600080fd5b92506143d16060870161436d565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561440e57600080fd5b610bdc8261436d565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b60008060006060848603121561446357600080fd5b835192506144736020850161436d565b91506144816040850161436d565b90509250925092565b80820180821115612b6357612b6361425f565b6000602082840312156144af57600080fd5b5051919050565b600181811c908216806144ca57607f821691505b6020821081036144ea57634e487b7160e01b600052602260045260246000fd5b50919050565b83815282602082015260606040820152600080835461450e816144b6565b806060860152600182166000811461452d57600181146145495761457d565b60ff1983166080870152608082151560051b870101935061457d565b86600052602060002060005b8381101561457457815488820160800152600190910190602001614555565b87016080019450505b5091979650505050505050565b6000825161459c818460208701613f01565b9190910192915050565b600080600080600080600060e0888a0312156145c157600080fd5b6145ca88614351565b96506145d86020890161436d565b604089015160608a015160808b015160a08c015193995091975095509350915061460460c0890161436d565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611b3d57806000526020600020601f840160051c810160208510156146bf5750805b601f840160051c820191505b818110156146df57600081556001016146cb565b5050505050565b6001600160401b038311156146fd576146fd613d45565b6147118361470b83546144b6565b83614698565b6000601f841160018114614745576000851561472d5750838201355b600019600387901b1c1916600186901b1783556146df565b600083815260209020601f19861690835b828110156147765786850135825560209485019460019092019101614756565b50868210156147935760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156147b757600080fd5b8151610bdc81613e3e565b81835260006001600160fb1b038311156147db57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006148086040830185876147c2565b9050826020830152949350505050565b60408152600061482c6040830185876147c2565b828103602084015261483e8185613f25565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220cd5d3742f8c0524170b60f04c4a752d412f4c6d549337356905de2b1c28294eb64736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102465760003560e01c80636d4cd8ea11610139578063be467604116100b6578063e4c0aaf41161007a578063e4c0aaf414610753578063f2f4eb2614610773578063f32ab92714610793578063f7e7d1fd146107c8578063f8abee10146107e8578063fc6f8f161461081857600080fd5b8063be467604146106dd578063c0c53b8b146106f3578063d2b8035a14610713578063da3beb8c14610733578063e349ad30146105c557600080fd5b80638f06f112116100fd5780638f06f1121461061b578063a7cc08fe1461063b578063b34bfaa814610687578063b6ede5401461069d578063ba66fde7146106bd57600080fd5b80636d4cd8ea14610585578063751accd0146105a5578063796490f9146105c55780637c04034e146105db5780638e426460146105fb57600080fd5b80634b2f0ea0116101c75780635a155ccd1161018b5780635a155ccd1461048a5780635c92e2f6146104cb57806365540b96146104eb578063675926f61461051857806369f3f0411461053857600080fd5b80634b2f0ea0146103e15780634f1ef286146103f457806352d1902d1461040757806354fd4d501461041c578063564a565d1461045b57600080fd5b80631c3db16d1161020e5780631c3db16d1461032a5780631cc3423a146103675780632621b9a2146103875780632d68efc9146103a1578063362c3479146103c157600080fd5b80630855bbe91461024b57806309cc41b8146102805780630baa64d1146102a25780630c340a24146102c25780631200aabc146102ef575b600080fd5b34801561025757600080fd5b5061026b610266366004613bfc565b610838565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004613ca1565b610900565b005b3480156102ae57600080fd5b5061026b6102bd366004613bfc565b6109be565b3480156102ce57600080fd5b506000546102e2906001600160a01b031681565b6040516102779190613d31565b3480156102fb57600080fd5b5061031c61030a366004613bfc565b60036020526000908152604090205481565b604051908152602001610277565b34801561033657600080fd5b5061034a610345366004613bfc565b610a35565b604080519384529115156020840152151590820152606001610277565b34801561037357600080fd5b5061031c610382366004613def565b610ba3565b34801561039357600080fd5b5060045461026b9060ff1681565b3480156103ad57600080fd5b506007546102e2906001600160a01b031681565b3480156103cd57600080fd5b5061031c6103dc366004613e53565b610be3565b6102a06103ef366004613e90565b611093565b6102a0610402366004613eb2565b611923565b34801561041357600080fd5b5061031c611b42565b34801561042857600080fd5b5061044e604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102779190613f51565b34801561046757600080fd5b5061047b610476366004613bfc565b611ba0565b60405161027793929190613f64565b34801561049657600080fd5b5061026b6104a5366004613f85565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104d757600080fd5b506102a06104e6366004613fbe565b611c66565b3480156104f757600080fd5b5061050b610506366004613bfc565b611c72565b6040516102779190614010565b34801561052457600080fd5b5061031c610533366004614053565b611d36565b34801561054457600080fd5b5061055861055336600461408e565b611e79565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610277565b34801561059157600080fd5b5061026b6105a0366004613bfc565b611f31565b3480156105b157600080fd5b506102a06105c03660046140ba565b6120b4565b3480156105d157600080fd5b5061031c61271081565b3480156105e757600080fd5b506102a06105f63660046140fc565b612180565b34801561060757600080fd5b506102a0610616366004614184565b612197565b34801561062757600080fd5b506102a06106363660046140fc565b6121e3565b34801561064757600080fd5b5061065b61065636600461408e565b6122a9565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610277565b34801561069357600080fd5b5061031c614e2081565b3480156106a957600080fd5b506102a06106b83660046141a1565b61236f565b3480156106c957600080fd5b5061026b6106d836600461408e565b612562565b3480156106e957600080fd5b5061031c61138881565b3480156106ff57600080fd5b506102a061070e3660046141fb565b6125fd565b34801561071f57600080fd5b506102e261072e366004613e90565b6126c7565b34801561073f57600080fd5b5061031c61074e366004613e90565b612a16565b34801561075f57600080fd5b506102a061076e366004614184565b612b69565b34801561077f57600080fd5b506001546102e2906001600160a01b031681565b34801561079f57600080fd5b506107b36107ae366004613e90565b612bb5565b60408051928352602083019190915201610277565b3480156107d457600080fd5b506102a06107e3366004614184565b612c07565b3480156107f457600080fd5b5061026b610803366004613bfc565b60066020526000908152604090205460ff1681565b34801561082457600080fd5b5061031c610833366004613bfc565b612cd9565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa158015610885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a9919061423b565b9150915060006108b885611c72565b9050805160001480156108f757506127106113886108d68585614275565b6108e09190614288565b6108ea919061429f565b6108f48442614275565b10155b95945050505050565b600087815260036020526040902054600280548992908110610924576109246142c1565b600091825260209091206002600590920201015460ff16156109615760405162461bcd60e51b8152600401610958906142d7565b60405180910390fd5b61096d88888888612d05565b84336001600160a01b0316897fbc1efa6396a4ba1a755245703b38c48fbe744ab5117d9f09f47d26ffc1df999e8787876040516109ac93929190614337565b60405180910390a45050505050505050565b6000818152600360205260408120546002805483929081106109e2576109e26142c1565b60009182526020822060059091020180549092508290610a0490600190614275565b81548110610a1457610a146142c1565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610a6157610a616142c1565b60009182526020822060059091020180549092508290610a8390600190614275565b81548110610a9357610a936142c1565b60009182526020909120600c90910201600381015460ff169450905083610abe578060010154610ac1565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b34919061437d565b5090935060049250610b44915050565b816004811115610b5657610b566143e6565b03610b99576000610b6688611c72565b90508051600103610b975780600081518110610b8457610b846142c1565b6020026020010151965060009550600194505b505b5050509193909250565b80516020808301919091206040805180840187905280820186905260608082019390935281518082039093018352608001905280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c55919061437d565b50935050505080610ca85760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e00000000006044820152606401610958565b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f91906143fc565b15610d5d5760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610958565b60008681526006602052604090205460ff16610d8b5760405162461bcd60e51b815260040161095890614417565b600086815260036020526040812054600280549091908110610daf57610daf6142c1565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610de357610de36142c1565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e62919061444e565b5050600087815260078401602052604090205490915060ff16610eac576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ff1565b808603610f21576000868152600683016020526040902054610ecf576000610f1a565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610f109190614288565b610f1a919061429f565b9450610ff1565b600081815260078301602052604090205460ff16610ff15781600601600083600a01600181548110610f5557610f556142c1565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610f8b57610f8b6142c1565b9060005260206000200154815260200190815260200160002054610faf919061448a565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610fe49190614288565b610fee919061429f565b94505b6001600160a01b03881660009081526008830160209081526040808320898452909152812055841561108757600754611038906001600160a01b038a811691889116613068565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae898960405161107e929190918252602082015260400190565b60405180910390a45b50505050949350505050565b6000828152600360205260409020546002805484929081106110b7576110b76142c1565b600091825260209091206002600590920201015460ff16156110eb5760405162461bcd60e51b8152600401610958906142d7565b60008381526003602052604081205460028054909190811061110f5761110f6142c1565b9060005260206000209060050201905080600101548311156111735760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610958565b60008481526006602052604090205460ff166111a15760405162461bcd60e51b815260040161095890614417565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156111ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611212919061423b565b9150915081421015801561122557508042105b61126a5760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610958565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156112ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf919061444e565b505090508681036112e4576127109150611365565b6127106113886112f48686614275565b6112fe9190614288565b611308919061429f565b6113128542614275565b1061135f5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610958565b614e2091505b8454600090869061137890600190614275565b81548110611388576113886142c1565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b919061449d565b6114159190614275565b60008a815260078401602052604090205490915060ff16156114795760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610958565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e7919061449d565b905060006127106114f88784614288565b611502919061429f565b61150c908361448a565b60008c8152600686016020526040812054919250908211156115bd5760008c815260068601602052604090205434906115459084614275565b1161156a5760008c81526006860160205260409020546115659083614275565b61156c565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516115b4929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906115e990849061448a565b909155505060008c81526006860160205260408120805483929061160e90849061448a565b909155505060008c815260068601602052604090205482116116e05760008c81526006860160205260408120546009870180549192909161165090849061448a565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156118eb578285600901546116fd9190614275565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa15801561174b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176f91906143fc565b156117885760028a01805460ff1916600117905561186b565b895460038b01600061179b87600161448a565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161181691815260200190565b602060405180830381865afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611857919061449d565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016118b8939291906144f0565b6000604051808303818588803b1580156118d157600080fd5b505af11580156118e5573d6000803e3d6000fd5b50505050505b80341115611914576119146119008234614275565b6007543391906001600160a01b0316613068565b50505050505050505050505050565b61192c82613153565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119aa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661199e6000805160206148498339815191525490565b6001600160a01b031614155b156119c85760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a22575060408051601f3d908101601f19168201909252611a1f9181019061449d565b60015b611a415781604051630c76093760e01b81526004016109589190613d31565b6000805160206148498339815191528114611a7257604051632a87526960e21b815260048101829052602401610958565b6000805160206148498339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611b3d576000836001600160a01b031683604051611ad9919061458a565b600060405180830381855af49150503d8060008114611b14576040519150601f19603f3d011682016040523d82523d6000602084013e611b19565b606091505b5050905080611b3b576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b8d5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061484983398151915290565b60028181548110611bb057600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611be3906144b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0f906144b6565b8015611c5c5780601f10611c3157610100808354040283529160200191611c5c565b820191906000526020600020905b815481529060010190602001808311611c3f57829003601f168201915b5050505050905083565b611b3b84848484612d05565b6000818152600360205260408120546002805460609392908110611c9857611c986142c1565b60009182526020822060059091020180549092508290611cba90600190614275565b81548110611cca57611cca6142c1565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611d2857602002820191906000526020600020905b815481526020019060010190808311611d14575b505050505092505050919050565b600085815260036020526040812054600280548392908110611d5a57611d5a6142c1565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611d8e57611d8e6142c1565b90600052602060002090600c02016000018681548110611db057611db06142c1565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e32919061444e565b506003850154919350915060ff168015611e5657508183600201541480611e565750805b15611e69576127109450505050506108f7565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611eaa57611eaa6142c1565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611ede57611ede6142c1565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611f5557611f556142c1565b60009182526020822060059091020180549092508290611f7790600190614275565b81548110611f8757611f876142c1565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611fe2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612006919061437d565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208591906145a6565b505050505091505060008161209b5783546120a1565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b031633146120de5760405162461bcd60e51b815260040161095890614612565b6000836001600160a01b031683836040516120f9919061458a565b60006040518083038185875af1925050503d8060008114612136576040519150601f19603f3d011682016040523d82523d6000602084013e61213b565b606091505b5050905080611b3b5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610958565b61218f86868686868633613180565b505050505050565b6000546001600160a01b031633146121c15760405162461bcd60e51b815260040161095890614612565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600086815260036020526040812054600280549091908110612207576122076142c1565b6000918252602082206005909102018054909250829061222990600190614275565b81548110612239576122396142c1565b90600052602060002090600c02016000018787600081811061225d5761225d6142c1565b9050602002013581548110612274576122746142c1565b60009182526020909120600490910201546001600160a01b0316905061229f88888888888887613180565b5050505050505050565b60008060008060006002600360008a815260200190815260200160002054815481106122d7576122d76142c1565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061230b5761230b6142c1565b90600052602060002090600c0201600001878154811061232d5761232d6142c1565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146123995760405162461bcd60e51b815260040161095890614654565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2016124248587836146e6565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab919061449d565b6124b59190614275565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab5810890612550908a908a908a90614337565b60405180910390a25050505050505050565b600083815260036020526040812054600280548392908110612586576125866142c1565b600091825260208083208784526003600590930201918201905260408220548154919350839181106125ba576125ba6142c1565b90600052602060002090600c020160000184815481106125dc576125dc6142c1565b600091825260209091206004909102016003015460ff169695505050505050565b600160006126096138b1565b8054909150600160401b900460ff1680612630575080546001600160401b03808416911610155b1561264d5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556126798585856138d5565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146126f45760405162461bcd60e51b815260040161095890614654565b600083815260036020526040902054600280548592908110612718576127186142c1565b600091825260209091206002600590920201015460ff161561274c5760405162461bcd60e51b8152600401610958906142d7565b6000848152600360205260408120546002805491929183908110612772576127726142c1565b600091825260208220600590910201805490925061279290600190614275565b905060008260000182815481106127ab576127ab6142c1565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283491906147a5565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a7919061437d565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561290b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292f91906147a5565b98506001600160a01b03891661294b5750505050505050612a0f565b612956848c8b61391c565b15612a0257604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612a07565b600098505b505050505050505b5092915050565b600082815260036020526040812054600280548392908110612a3a57612a3a6142c1565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612a6e57612a6e6142c1565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af1919061444e565b5091509150826004015460001480612b20575080158015612b2057506000828152600284016020526040902054155b15612b32576000945050505050612b63565b8015612b47575050600401549150612b639050565b506000908152600290910160205260409020549150612b639050565b92915050565b6000546001600160a01b03163314612b935760405162461bcd60e51b815260040161095890614612565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546002805491929183908110612bdb57612bdb6142c1565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612c136138b1565b8054909150600160401b900460ff1680612c3a575080546001600160401b03808416911610155b15612c575760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612cee57612cee6142c1565b600091825260209091206005909102015492915050565b600084815260036020526040902054600280548692908110612d2957612d296142c1565b600091825260209091206002600590920201015460ff1615612d5d5760405162461bcd60e51b8152600401610958906142d7565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcb919061437d565b5090935060019250612ddb915050565b816004811115612ded57612ded6143e6565b14612e4a5760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610958565b82612e875760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610958565b60008681526006602052604090205460ff16612eb55760405162461bcd60e51b815260040161095890614417565b600086815260036020526040812054600280549091908110612ed957612ed96142c1565b60009182526020822060059091020180549092508290612efb90600190614275565b81548110612f0b57612f0b6142c1565b90600052602060002090600c0201905060005b86811015613001573382898984818110612f3a57612f3a6142c1565b9050602002013581548110612f5157612f516142c1565b60009182526020909120600490910201546001600160a01b031614612fb85760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610958565b8582898984818110612fcc57612fcc6142c1565b9050602002013581548110612fe357612fe36142c1565b60009182526020909120600160049092020181019190915501612f1e565b5086869050816005016000828254613019919061448a565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890613056908b908b908b906147f4565b60405180910390a35050505050505050565b6040516001600160a01b0384169083156108fc029084906000818181858888f193505050501561309757505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130d257600080fd5b505af11580156130e6573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b15801561313657600080fd5b505af115801561314a573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461317d5760405162461bcd60e51b815260040161095890614612565b50565b6000878152600360205260409020546002805489929081106131a4576131a46142c1565b600091825260209091206002600590920201015460ff16156131d85760405162461bcd60e51b8152600401610958906142d7565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613246919061437d565b5090935060029250613256915050565b816004811115613268576132686143e6565b146132c35760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610958565b866133055760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610958565b60008981526006602052604090205460ff166133335760405162461bcd60e51b815260040161095890614417565b600089815260036020526040812054600280549091908110613357576133576142c1565b9060005260206000209060050201905080600101548711156133b25760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610958565b805460009082906133c590600190614275565b815481106133d5576133d56142c1565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d9061341a908f9060040190815260200190565b60a060405180830381865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b919061437d565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156134b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134da91906145a6565b505050505091505060006134ef8b8b8b610ba3565b905060005b8c811015613776576001600160a01b038916858f8f84818110613519576135196142c1565b9050602002013581548110613530576135306142c1565b60009182526020909120600490910201546001600160a01b0316146135975760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610958565b8215806135de575081858f8f848181106135b3576135b36142c1565b90506020020135815481106135ca576135ca6142c1565b906000526020600020906004020160010154145b61365e5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610958565b848e8e83818110613671576136716142c1565b9050602002013581548110613688576136886142c1565b600091825260209091206003600490920201015460ff16156136e15760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610958565b8b858f8f848181106136f5576136f56142c1565b905060200201358154811061370c5761370c6142c1565b60009182526020909120600260049092020101556001858f8f84818110613735576137356142c1565b905060200201358154811061374c5761374c6142c1565b60009182526020909120600490910201600301805460ff19169115159190911790556001016134f4565b5050506004820180548b925060009061379090849061448a565b90915550506000888152600282016020526040812080548b92906137b590849061448a565b9091555050600181015488036137e457600381015460ff16156137df5760038101805460ff191690555b61385d565b60018101546000908152600282016020526040808220548a83529120540361382657600381015460ff166137df5760038101805460ff1916600117905561385d565b60018101546000908152600282016020526040808220548a8352912054111561385d576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b60405161389c93929190614818565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6138dd613ade565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b6000613929848484613b05565b61393557506000610bdc565b600083815260036020526040812054600280549192918390811061395b5761395b6142c1565b906000526020600020906005020190506000806000613a05846004018054613982906144b6565b80601f01602080910402602001604051908101604052809291908181526020018280546139ae906144b6565b80156139fb5780601f106139d0576101008083540402835291602001916139fb565b820191906000526020600020905b8154815290600101906020018083116139de57829003601f168201915b5050505050613b9d565b919450925090506001600160a01b038316613a2857600195505050505050610bdc565b8115613aaf57604051627eeac760e11b81526001600160a01b038881166004830152602482018390526000919085169062fdd58e906044015b602060405180830381865afa158015613a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa2919061449d565b1195505050505050610bdc565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190613a61908b90600401613d31565b613ae6613be2565b613b0357604051631afcd79f60e31b815260040160405180910390fd5b565b60045460009060ff1615613b93576000838152600360205260408120546002805491929183908110613b3957613b396142c1565b6000918252602082206005909102018054909250613b5990600190614275565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610bdc915050565b5060019392505050565b600080600060a084511015613bba57506000915081905080613bdb565b505050608081015160a0808301516001600160a01b0383169290911c600116905b9193909250565b6000613bec6138b1565b54600160401b900460ff16919050565b600060208284031215613c0e57600080fd5b5035919050565b60008083601f840112613c2757600080fd5b5081356001600160401b03811115613c3e57600080fd5b6020830191508360208260051b8501011115613c5957600080fd5b9250929050565b60008083601f840112613c7257600080fd5b5081356001600160401b03811115613c8957600080fd5b602083019150836020828501011115613c5957600080fd5b600080600080600080600060a0888a031215613cbc57600080fd5b8735965060208801356001600160401b03811115613cd957600080fd5b613ce58a828b01613c15565b909750955050604088013593506060880135925060808801356001600160401b03811115613d1257600080fd5b613d1e8a828b01613c60565b989b979a50959850939692959293505050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613d6c57600080fd5b8135602083016000806001600160401b03841115613d8c57613d8c613d45565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613dba57613dba613d45565b604052838152905080828401871015613dd257600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613e0457600080fd5b833592506020840135915060408401356001600160401b03811115613e2857600080fd5b613e3486828701613d5b565b9150509250925092565b6001600160a01b038116811461317d57600080fd5b60008060008060808587031215613e6957600080fd5b843593506020850135613e7b81613e3e565b93969395505050506040820135916060013590565b60008060408385031215613ea357600080fd5b50508035926020909101359150565b60008060408385031215613ec557600080fd5b8235613ed081613e3e565b915060208301356001600160401b03811115613eeb57600080fd5b613ef785828601613d5b565b9150509250929050565b60005b83811015613f1c578181015183820152602001613f04565b50506000910152565b60008151808452613f3d816020860160208601613f01565b601f01601f19169290920160200192915050565b602081526000610bdc6020830184613f25565b83815282151560208201526060604082015260006108f76060830184613f25565b600080600060608486031215613f9a57600080fd5b83359250602084013591506040840135613fb381613e3e565b809150509250925092565b60008060008060608587031215613fd457600080fd5b8435935060208501356001600160401b03811115613ff157600080fd5b613ffd87828801613c15565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b8181101561404857835183526020938401939092019160010161402a565b509095945050505050565b600080600080600060a0868803121561406b57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000606084860312156140a357600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156140cf57600080fd5b83356140da81613e3e565b92506020840135915060408401356001600160401b03811115613e2857600080fd5b60008060008060008060a0878903121561411557600080fd5b8635955060208701356001600160401b0381111561413257600080fd5b61413e89828a01613c15565b909650945050604087013592506060870135915060808701356001600160401b0381111561416b57600080fd5b61417789828a01613d5b565b9150509295509295509295565b60006020828403121561419657600080fd5b8135610bdc81613e3e565b6000806000806000608086880312156141b957600080fd5b853594506020860135935060408601356001600160401b038111156141dd57600080fd5b6141e988828901613c60565b96999598509660600135949350505050565b60008060006060848603121561421057600080fd5b833561421b81613e3e565b9250602084013561422b81613e3e565b91506040840135613fb381613e3e565b6000806040838503121561424e57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115612b6357612b6361425f565b8082028115828204841417612b6357612b6361425f565b6000826142bc57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006108f760408301848661430e565b80516001600160601b038116811461436857600080fd5b919050565b8051801515811461436857600080fd5b600080600080600060a0868803121561439557600080fd5b61439e86614351565b945060208601516143ae81613e3e565b6040870151909450600581106143c357600080fd5b92506143d16060870161436d565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561440e57600080fd5b610bdc8261436d565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b60008060006060848603121561446357600080fd5b835192506144736020850161436d565b91506144816040850161436d565b90509250925092565b80820180821115612b6357612b6361425f565b6000602082840312156144af57600080fd5b5051919050565b600181811c908216806144ca57607f821691505b6020821081036144ea57634e487b7160e01b600052602260045260246000fd5b50919050565b83815282602082015260606040820152600080835461450e816144b6565b806060860152600182166000811461452d57600181146145495761457d565b60ff1983166080870152608082151560051b870101935061457d565b86600052602060002060005b8381101561457457815488820160800152600190910190602001614555565b87016080019450505b5091979650505050505050565b6000825161459c818460208701613f01565b9190910192915050565b600080600080600080600060e0888a0312156145c157600080fd5b6145ca88614351565b96506145d86020890161436d565b604089015160608a015160808b015160a08c015193995091975095509350915061460460c0890161436d565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611b3d57806000526020600020601f840160051c810160208510156146bf5750805b601f840160051c820191505b818110156146df57600081556001016146cb565b5050505050565b6001600160401b038311156146fd576146fd613d45565b6147118361470b83546144b6565b83614698565b6000601f841160018114614745576000851561472d5750838201355b600019600387901b1c1916600186901b1783556146df565b600083815260209020601f19861690835b828110156147765786850135825560209485019460019092019101614756565b50868210156147935760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156147b757600080fd5b8151610bdc81613e3e565b81835260006001600160fb1b038311156147db57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006148086040830185876147c2565b9050826020830152949350505050565b60408152600061482c6040830185876147c2565b828103602084015261483e8185613f25565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220cd5d3742f8c0524170b60f04c4a752d412f4c6d549337356905de2b1c28294eb64736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "CommitCastShutter(uint256,address,bytes32,bytes32,bytes)": { - "details": "Emitted when a vote is cast.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_encryptedVote": "The Shutter encrypted vote.", - "_identity": "The Shutter identity used for encryption.", - "_juror": "The address of the juror casting the vote commitment." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castCommitShutter(uint256,uint256[],bytes32,bytes32,bytes)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash including the justification.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_encryptedVote": "The Shutter encrypted vote.", - "_identity": "The Shutter identity used for encryption.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "getLocalDisputeRoundID(uint256,uint256)": { - "details": "Returns the local dispute ID and round ID for a given core dispute ID and core round ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core." - }, - "returns": { - "localDisputeID": "The ID of the dispute in the Dispute Kit.", - "localRoundID": "The ID of the round in the Dispute Kit." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Returns the number of rounds in a dispute.", - "params": { - "_localDisputeID": "The ID of the dispute in the Dispute Kit." - }, - "returns": { - "_0": "The number of rounds in the dispute." - } - }, - "getVoteInfo(uint256,uint256,uint256)": { - "details": "Returns the vote information for a given vote ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The address of the juror who cast the vote.", - "commit": "The commit of the vote." - } - }, - "hashVote(uint256,uint256,string)": { - "details": "Computes the hash of a vote using ABI encoding", - "params": { - "_choice": "The choice being voted for", - "_justification": "The justification for the vote", - "_salt": "A random salt for commitment" - }, - "returns": { - "_0": "bytes32 The hash of the encoded vote parameters" - } - }, - "initialize(address,address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isAppealFunded(uint256)": { - "details": "Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "Whether the appeal funding is finished." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "DisputeKitGatedShutter Added functionality: shielded voting. Dispute kit implementation adapted from DisputeKitClassic - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 21704, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 21707, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)11133" - }, - { - "astId": 21711, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)21643_storage)dyn_storage" - }, - { - "astId": 21715, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21717, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "singleDrawPerJuror", - "offset": 0, - "slot": "4", - "type": "t_bool" - }, - { - "astId": 21725, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "alreadyDrawn", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))" - }, - { - "astId": 21729, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "coreDisputeIDToActive", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 21731, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "wNative", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)21643_storage)dyn_storage": { - "base": "t_struct(Dispute)21643_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)21681_storage)dyn_storage": { - "base": "t_struct(Round)21681_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)21690_storage)dyn_storage": { - "base": "t_struct(Vote)21690_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)11133": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(uint256 => mapping(address => bool)))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)21643_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Dispute", - "members": [ - { - "astId": 21632, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)21681_storage)dyn_storage" - }, - { - "astId": 21634, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 21636, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 21640, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21642, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)21681_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Round", - "members": [ - { - "astId": 21647, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)21690_storage)dyn_storage" - }, - { - "astId": 21649, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 21653, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21655, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 21657, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 21659, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 21663, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21667, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 21673, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 21675, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 21678, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 21680, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)21690_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Vote", - "members": [ - { - "astId": 21683, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 21685, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 21687, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 21689, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrum/DisputeKitGatedShutter_Proxy.json b/contracts/deployments/arbitrum/DisputeKitGatedShutter_Proxy.json deleted file mode 100644 index b31e1c28a..000000000 --- a/contracts/deployments/arbitrum/DisputeKitGatedShutter_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x788330092B9704809C19858E39EB9Ac402c2E47b", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x2fa78e2ff0776968dd343541316038adf2b361d51d423989f38975bf9f9d1141", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x788330092B9704809C19858E39EB9Ac402c2E47b", - "transactionIndex": 4, - "gasUsed": "228419", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000800000000000000000080000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x41216ca34b46131cdfbdacb6eb99ce2aeae86cb1c8ed38f1b71e4d1d8eb8d302", - "transactionHash": "0x2fa78e2ff0776968dd343541316038adf2b361d51d423989f38975bf9f9d1141", - "logs": [ - { - "transactionIndex": 4, - "blockNumber": 364034451, - "transactionHash": "0x2fa78e2ff0776968dd343541316038adf2b361d51d423989f38975bf9f9d1141", - "address": "0x788330092B9704809C19858E39EB9Ac402c2E47b", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 2, - "blockHash": "0x41216ca34b46131cdfbdacb6eb99ce2aeae86cb1c8ed38f1b71e4d1d8eb8d302" - } - ], - "blockNumber": 364034451, - "cumulativeGasUsed": "441843", - "status": 1, - "byzantium": true - }, - "args": [ - "0xb12EB4c0716d3A9861a9AC471c6CdDB808d61b32", - "0xc0c53b8b000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000991d2df165670b9cac3b022f4b68d65b664222ea00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1" - ], - "numDeployments": 1, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitGatedShutterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122014335073f133775bc3d53bdbd73e5b08fc775962b3f58fb9a922739829545a1f64736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122014335073f133775bc3d53bdbd73e5b08fc775962b3f58fb9a922739829545a1f64736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/DisputeKitGated_Implementation.json b/contracts/deployments/arbitrum/DisputeKitGated_Implementation.json deleted file mode 100644 index e038a35fb..000000000 --- a/contracts/deployments/arbitrum/DisputeKitGated_Implementation.json +++ /dev/null @@ -1,1892 +0,0 @@ -{ - "address": "0xEA7863E6dE863e8E6d037D8693ad5dA45Db7790a", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "extraDataToTokenInfo", - "outputs": [ - { - "internalType": "address", - "name": "tokenGate", - "type": "address" - }, - { - "internalType": "bool", - "name": "isERC1155", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x86256e18136ffa7e75a436e99b4619608bc89fba418263ab52b8ce371a6a40d8", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xEA7863E6dE863e8E6d037D8693ad5dA45Db7790a", - "transactionIndex": 6, - "gasUsed": "4056168", - "logsBloom": "0x00000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xb1d2130d5bdd50bbdf7153f0c5269bbbf6ac62ba63415c605c07d51038355d52", - "transactionHash": "0x86256e18136ffa7e75a436e99b4619608bc89fba418263ab52b8ce371a6a40d8", - "logs": [ - { - "transactionIndex": 6, - "blockNumber": 364034421, - "transactionHash": "0x86256e18136ffa7e75a436e99b4619608bc89fba418263ab52b8ce371a6a40d8", - "address": "0xEA7863E6dE863e8E6d037D8693ad5dA45Db7790a", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 9, - "blockHash": "0xb1d2130d5bdd50bbdf7153f0c5269bbbf6ac62ba63415c605c07d51038355d52" - } - ], - "blockNumber": 364034421, - "cumulativeGasUsed": "4410841", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"name\":\"alreadyDrawn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"extraDataToTokenInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"tokenGate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isERC1155\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getLocalDisputeRoundID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localDisputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"hashVote\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"isAppealFunded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleDrawPerJuror\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"extraDataToTokenInfo(bytes)\":{\"details\":\"Extracts token gating information from the extra data.\",\"params\":{\"_extraData\":\"The extra data bytes array with the following encoding: - bytes 0-31: uint96 courtID, not used here - bytes 32-63: uint256 minJurors, not used here - bytes 64-95: uint256 disputeKitID, not used here - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160) - bytes 128-159: uint256 tokenId\"},\"returns\":{\"isERC1155\":\"True if the token is an ERC-1155, false for ERC-20/ERC-721.\",\"tokenGate\":\"The address of the token contract used for gating access.\",\"tokenId\":\"The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721).\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"getLocalDisputeRoundID(uint256,uint256)\":{\"details\":\"Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\"},\"returns\":{\"localDisputeID\":\"The ID of the dispute in the Dispute Kit.\",\"localRoundID\":\"The ID of the round in the Dispute Kit.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Returns the number of rounds in a dispute.\",\"params\":{\"_localDisputeID\":\"The ID of the dispute in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of rounds in the dispute.\"}},\"getVoteInfo(uint256,uint256,uint256)\":{\"details\":\"Returns the vote information for a given vote ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The address of the juror who cast the vote.\",\"commit\":\"The commit of the vote.\"}},\"hashVote(uint256,uint256,string)\":{\"details\":\"Computes the hash of a vote using ABI encodingThe unused parameters may be used by overriding contracts.\",\"params\":{\"_choice\":\"The choice being voted for\",\"_justification\":\"The justification for the vote\",\"_salt\":\"A random salt for commitment\"},\"returns\":{\"_0\":\"bytes32 The hash of the encoded vote parameters\"}},\"initialize(address,address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isAppealFunded(uint256)\":{\"details\":\"Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"Whether the appeal funding is finished.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"DisputeKitGated Dispute kit implementation adapted from DisputeKitClassic - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitGated.sol\":\"DisputeKitGated\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassicBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore, KlerosCoreBase, IDisputeKit, ISortitionModule} from \\\"../KlerosCore.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {SafeSend} from \\\"../../libraries/SafeSend.sol\\\";\\n\\n/// @title DisputeKitClassicBase\\n/// Abstract Dispute kit classic implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\nabstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable {\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default.\\n mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool)))\\n public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading.\\n mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function __DisputeKitClassicBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n dispute.jumped = false; // Possibly true if this DK has jumped in a previous round.\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n coreDisputeIDToActive[_coreDisputeID] = true;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[localRoundID];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n if (drawnAddress == address(0)) {\\n // Sortition can return 0 address if no one has staked yet.\\n return drawnAddress;\\n }\\n\\n if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true;\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash.\\n function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n }\\n\\n function _castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender);\\n }\\n\\n function _castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification,\\n address _juror\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n bytes32 voteHash = hashVote(_choice, _salt, _justification);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == _juror, \\\"The juror has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == voteHash,\\n \\\"The vote hash must match the commitment in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n } // Workaround stack too deep\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.safeSend(amount, wNative);\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @dev The unused parameters may be used by overriding contracts.\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(_choice, _salt));\\n }\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length;\\n\\n return round.totalVoted == expectedTotalVoted;\\n }\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) {\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n // Uses block.timestamp from the current tx when called by the core contract.\\n return (fundedChoices.length == 0 &&\\n block.timestamp - appealPeriodStart >=\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT);\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n /// @dev Returns the number of rounds in a dispute.\\n /// @param _localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return The number of rounds in the dispute.\\n function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) {\\n return disputes[_localDisputeID].rounds.length;\\n }\\n\\n /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @return localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return localRoundID The ID of the round in the Dispute Kit.\\n function getLocalDisputeRoundID(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID\\n ) external view returns (uint256 localDisputeID, uint256 localRoundID) {\\n localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID];\\n }\\n\\n /// @dev Returns the vote information for a given vote ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @param _voteID The ID of the vote.\\n /// @return account The address of the juror who cast the vote.\\n /// @return commit The commit of the vote.\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts.\\n /// minStake is checked directly during staking process however it's possible for the juror to get drawn\\n /// while having < minStake if it is later increased by governance.\\n /// This issue is expected and harmless.\\n /// @param _round The round in which the juror is being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return result Whether the address passes the check or not.\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view virtual returns (bool result) {\\n if (singleDrawPerJuror) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n result = !alreadyDrawn[localDisputeID][localRoundID][_juror];\\n } else {\\n result = true;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc418b9a76802db5d16819836734ecff8b76d5f37101819aee6fd1844dfe21dd9\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitGated.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {DisputeKitClassicBase, KlerosCore} from \\\"./DisputeKitClassicBase.sol\\\";\\n\\ninterface IBalanceHolder {\\n /// @dev Returns the number of tokens in `owner` account.\\n /// @dev Compatible with ERC-20 and ERC-721.\\n /// @param owner The address of the owner.\\n /// @return balance The number of tokens in `owner` account.\\n function balanceOf(address owner) external view returns (uint256 balance);\\n}\\n\\ninterface IBalanceHolderERC1155 {\\n /// @dev Returns the balance of an ERC-1155 token.\\n /// @param account The address of the token holder\\n /// @param id ID of the token\\n /// @return The token balance\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n}\\n\\n/// @title DisputeKitGated\\n/// Dispute kit implementation adapted from DisputeKitClassic\\n/// - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitGated is DisputeKitClassicBase {\\n string public constant override version = \\\"0.12.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(address _governor, KlerosCore _core, address _wNative) external reinitializer(1) {\\n __DisputeKitClassicBase_initialize(_governor, _core, _wNative);\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(9) {\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Extracts token gating information from the extra data.\\n /// @param _extraData The extra data bytes array with the following encoding:\\n /// - bytes 0-31: uint96 courtID, not used here\\n /// - bytes 32-63: uint256 minJurors, not used here\\n /// - bytes 64-95: uint256 disputeKitID, not used here\\n /// - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160)\\n /// - bytes 128-159: uint256 tokenId\\n /// @return tokenGate The address of the token contract used for gating access.\\n /// @return isERC1155 True if the token is an ERC-1155, false for ERC-20/ERC-721.\\n /// @return tokenId The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721).\\n function extraDataToTokenInfo(\\n bytes memory _extraData\\n ) public pure returns (address tokenGate, bool isERC1155, uint256 tokenId) {\\n // Need at least 160 bytes to safely read the parameters\\n if (_extraData.length < 160) return (address(0), false, 0);\\n\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let packedTokenGateIsERC1155 := mload(add(_extraData, 0x80)) // 4th parameter at offset 128\\n tokenId := mload(add(_extraData, 0xA0)) // 5th parameter at offset 160 (moved up)\\n\\n // Unpack address from lower 160 bits and bool from bit 160\\n tokenGate := and(packedTokenGateIsERC1155, 0xffffffffffffffffffffffffffffffffffffffff)\\n isERC1155 := and(shr(160, packedTokenGateIsERC1155), 1)\\n }\\n }\\n\\n /// @inheritdoc DisputeKitClassicBase\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view override returns (bool) {\\n if (!super._postDrawCheck(_round, _coreDisputeID, _juror)) return false;\\n\\n // Get the local dispute and extract token info from extraData\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n (address tokenGate, bool isERC1155, uint256 tokenId) = extraDataToTokenInfo(dispute.extraData);\\n\\n // If no token gate is specified, allow all jurors\\n if (tokenGate == address(0)) return true;\\n\\n // Check juror's token balance\\n if (isERC1155) {\\n return IBalanceHolderERC1155(tokenGate).balanceOf(_juror, tokenId) > 0;\\n } else {\\n return IBalanceHolder(tokenGate).balanceOf(_juror) > 0;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x449beea4cdeceb81cfc053987fd39c2f552fe3f5da03384c623b167f91f9307b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516146966100fc60003960008181611868015281816118910152611a8001526146966000f3fe60806040526004361061023b5760003560e01c8063751accd01161012e578063d2b8035a116100ab578063f2f4eb261161006f578063f2f4eb261461076d578063f32ab9271461078d578063f7e7d1fd146107c2578063f8abee10146107e2578063fc6f8f161461081257600080fd5b8063d2b8035a146106c8578063da3beb8c146106e8578063e349ad301461059a578063e4c0aaf414610708578063ec7b23fb1461072857600080fd5b8063b34bfaa8116100f2578063b34bfaa81461063c578063b6ede54014610652578063ba66fde714610672578063be46760414610692578063c0c53b8b146106a857600080fd5b8063751accd01461057a578063796490f91461059a5780637c04034e146105b05780638e426460146105d0578063a7cc08fe146105f057600080fd5b80634f1ef286116101bc5780635c92e2f6116101805780635c92e2f6146104a057806365540b96146104c0578063675926f6146104ed57806369f3f0411461050d5780636d4cd8ea1461055a57600080fd5b80634f1ef286146103c957806352d1902d146103dc57806354fd4d50146103f1578063564a565d146104305780635a155ccd1461045f57600080fd5b80631cc3423a116102035780631cc3423a1461033a5780632621b9a21461035a5780632d68efc914610374578063362c3479146103945780634b2f0ea0146103b457600080fd5b80630855bbe9146102405780630baa64d1146102755780630c340a24146102955780631200aabc146102c25780631c3db16d146102fd575b600080fd5b34801561024c57600080fd5b5061026061025b366004613a67565b610832565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610260610290366004613a67565b6108fa565b3480156102a157600080fd5b506000546102b5906001600160a01b031681565b60405161026c9190613a80565b3480156102ce57600080fd5b506102ef6102dd366004613a67565b60036020526000908152604090205481565b60405190815260200161026c565b34801561030957600080fd5b5061031d610318366004613a67565b610971565b60408051938452911515602084015215159082015260600161026c565b34801561034657600080fd5b506102ef610355366004613b3e565b610adf565b34801561036657600080fd5b506004546102609060ff1681565b34801561038057600080fd5b506007546102b5906001600160a01b031681565b3480156103a057600080fd5b506102ef6103af366004613ba2565b610b0f565b6103c76103c2366004613bdf565b610fc4565b005b6103c76103d7366004613c01565b611854565b3480156103e857600080fd5b506102ef611a73565b3480156103fd57600080fd5b50610423604051806040016040528060068152602001650302e31322e360d41b81525081565b60405161026c9190613ca0565b34801561043c57600080fd5b5061045061044b366004613a67565b611ad1565b60405161026c93929190613cb3565b34801561046b57600080fd5b5061026061047a366004613cd4565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104ac57600080fd5b506103c76104bb366004613d58565b611b97565b3480156104cc57600080fd5b506104e06104db366004613a67565b611ba3565b60405161026c9190613daa565b3480156104f957600080fd5b506102ef610508366004613ded565b611c67565b34801561051957600080fd5b5061052d610528366004613e28565b611daa565b604080519687529415156020870152938501929092526060840152608083015260a082015260c00161026c565b34801561056657600080fd5b50610260610575366004613a67565b611e62565b34801561058657600080fd5b506103c7610595366004613e54565b611fe5565b3480156105a657600080fd5b506102ef61271081565b3480156105bc57600080fd5b506103c76105cb366004613e96565b6120b1565b3480156105dc57600080fd5b506103c76105eb366004613f1e565b6120c8565b3480156105fc57600080fd5b5061061061060b366004613e28565b612114565b604080516001600160a01b0390951685526020850193909352918301521515606082015260800161026c565b34801561064857600080fd5b506102ef614e2081565b34801561065e57600080fd5b506103c761066d366004613f3b565b6121da565b34801561067e57600080fd5b5061026061068d366004613e28565b6123cd565b34801561069e57600080fd5b506102ef61138881565b3480156106b457600080fd5b506103c76106c3366004613fc4565b612468565b3480156106d457600080fd5b506102b56106e3366004613bdf565b612532565b3480156106f457600080fd5b506102ef610703366004613bdf565b612881565b34801561071457600080fd5b506103c7610723366004613f1e565b6129d4565b34801561073457600080fd5b50610748610743366004614004565b612a20565b604080516001600160a01b03909416845291151560208401529082015260600161026c565b34801561077957600080fd5b506001546102b5906001600160a01b031681565b34801561079957600080fd5b506107ad6107a8366004613bdf565b612a65565b6040805192835260208301919091520161026c565b3480156107ce57600080fd5b506103c76107dd366004613f1e565b612ab7565b3480156107ee57600080fd5b506102606107fd366004613a67565b60066020526000908152604090205460ff1681565b34801561081e57600080fd5b506102ef61082d366004613a67565b612b89565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a39190614040565b9150915060006108b285611ba3565b9050805160001480156108f157506127106113886108d0858561407a565b6108da919061408d565b6108e491906140a4565b6108ee844261407a565b10155b95945050505050565b60008181526003602052604081205460028054839290811061091e5761091e6140c6565b600091825260208220600590910201805490925082906109409060019061407a565b81548110610950576109506140c6565b60009182526020909120600c90910201805460059091015414949350505050565b600080600080600260036000878152602001908152602001600020548154811061099d5761099d6140c6565b600091825260208220600590910201805490925082906109bf9060019061407a565b815481106109cf576109cf6140c6565b60009182526020909120600c90910201600381015460ff1694509050836109fa5780600101546109fd565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a709190614108565b5090935060049250610a80915050565b816004811115610a9257610a92614171565b03610ad5576000610aa288611ba3565b90508051600103610ad35780600081518110610ac057610ac06140c6565b6020026020010151965060009550600194505b505b5050509193909250565b604080516020808201869052818301859052825180830384018152606090920190925280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b819190614108565b50935050505080610bd95760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c509190614187565b15610c8e5760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610bd0565b60008681526006602052604090205460ff16610cbc5760405162461bcd60e51b8152600401610bd0906141a2565b600086815260036020526040812054600280549091908110610ce057610ce06140c6565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610d1457610d146140c6565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9391906141d9565b5050600087815260078401602052604090205490915060ff16610ddd576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610f22565b808603610e52576000868152600683016020526040902054610e00576000610e4b565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610e41919061408d565b610e4b91906140a4565b9450610f22565b600081815260078301602052604090205460ff16610f225781600601600083600a01600181548110610e8657610e866140c6565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610ebc57610ebc6140c6565b9060005260206000200154815260200190815260200160002054610ee09190614215565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610f15919061408d565b610f1f91906140a4565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610fb857600754610f69906001600160a01b038a811691889116612bb5565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051610faf929190918252602082015260400190565b60405180910390a45b50505050949350505050565b600082815260036020526040902054600280548492908110610fe857610fe86140c6565b600091825260209091206002600590920201015460ff161561101c5760405162461bcd60e51b8152600401610bd090614228565b600083815260036020526040812054600280549091908110611040576110406140c6565b9060005260206000209060050201905080600101548311156110a45760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610bd0565b60008481526006602052604090205460ff166110d25760405162461bcd60e51b8152600401610bd0906141a2565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111439190614040565b9150915081421015801561115657508042105b61119b5760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610bd0565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120091906141d9565b50509050868103611215576127109150611296565b612710611388611225868661407a565b61122f919061408d565b61123991906140a4565b611243854261407a565b106112905760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610bd0565b614e2091505b845460009086906112a99060019061407a565b815481106112b9576112b96140c6565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c919061425f565b611346919061407a565b60008a815260078401602052604090205490915060ff16156113aa5760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610bd0565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156113f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611418919061425f565b90506000612710611429878461408d565b61143391906140a4565b61143d9083614215565b60008c8152600686016020526040812054919250908211156114ee5760008c81526006860160205260409020543490611476908461407a565b1161149b5760008c8152600686016020526040902054611496908361407a565b61149d565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516114e5929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f84529091528120805483929061151a908490614215565b909155505060008c81526006860160205260408120805483929061153f908490614215565b909155505060008c815260068601602052604090205482116116115760008c815260068601602052604081205460098701805491929091611581908490614215565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a8501546001101561181c5782856009015461162e919061407a565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa15801561167c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a09190614187565b156116b95760028a01805460ff1916600117905561179c565b895460038b0160006116cc876001614215565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161174791815260200190565b602060405180830381865afa158015611764573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611788919061425f565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016117e9939291906142b2565b6000604051808303818588803b15801561180257600080fd5b505af1158015611816573d6000803e3d6000fd5b50505050505b8034111561184557611845611831823461407a565b6007543391906001600160a01b0316612bb5565b50505050505050505050505050565b61185d82612ca0565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806118db57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118cf6000805160206146418339815191525490565b6001600160a01b031614155b156118f95760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611953575060408051601f3d908101601f191682019092526119509181019061425f565b60015b6119725781604051630c76093760e01b8152600401610bd09190613a80565b60008051602061464183398151915281146119a357604051632a87526960e21b815260048101829052602401610bd0565b6000805160206146418339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611a6e576000836001600160a01b031683604051611a0a919061434c565b600060405180830381855af49150503d8060008114611a45576040519150601f19603f3d011682016040523d82523d6000602084013e611a4a565b606091505b5050905080611a6c576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611abe5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061464183398151915290565b60028181548110611ae157600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611b1490614278565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4090614278565b8015611b8d5780601f10611b6257610100808354040283529160200191611b8d565b820191906000526020600020905b815481529060010190602001808311611b7057829003601f168201915b5050505050905083565b611a6c84848484612ccd565b6000818152600360205260408120546002805460609392908110611bc957611bc96140c6565b60009182526020822060059091020180549092508290611beb9060019061407a565b81548110611bfb57611bfb6140c6565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c5957602002820191906000526020600020905b815481526020019060010190808311611c45575b505050505092505050919050565b600085815260036020526040812054600280548392908110611c8b57611c8b6140c6565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611cbf57611cbf6140c6565b90600052602060002090600c02016000018681548110611ce157611ce16140c6565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6391906141d9565b506003850154919350915060ff168015611d8757508183600201541480611d875750805b15611d9a576127109450505050506108f1565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611ddb57611ddb6140c6565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611e0f57611e0f6140c6565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611e8657611e866140c6565b60009182526020822060059091020180549092508290611ea89060019061407a565b81548110611eb857611eb86140c6565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190614108565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb69190614368565b5050505050915050600081611fcc578354611fd2565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b0316331461200f5760405162461bcd60e51b8152600401610bd0906143d4565b6000836001600160a01b0316838360405161202a919061434c565b60006040518083038185875af1925050503d8060008114612067576040519150601f19603f3d011682016040523d82523d6000602084013e61206c565b606091505b5050905080611a6c5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610bd0565b6120c086868686868633613030565b505050505050565b6000546001600160a01b031633146120f25760405162461bcd60e51b8152600401610bd0906143d4565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a81526020019081526020016000205481548110612142576121426140c6565b600091825260208083208a8452600360059093020191820190526040822054815491935083918110612176576121766140c6565b90600052602060002090600c02016000018781548110612198576121986140c6565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146122045760405162461bcd60e51b8152600401610bd090614416565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad20161228f8587836144a8565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156122f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612316919061425f565b612320919061407a565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab58108906123bb908a908a908a90614567565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106123f1576123f16140c6565b60009182526020808320878452600360059093020191820190526040822054815491935083918110612425576124256140c6565b90600052602060002090600c02016000018481548110612447576124476140c6565b600091825260209091206004909102016003015460ff169695505050505050565b60016000612474613761565b8054909150600160401b900460ff168061249b575080546001600160401b03808416911610155b156124b85760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556124e4858585613785565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b0316331461255f5760405162461bcd60e51b8152600401610bd090614416565b600083815260036020526040902054600280548592908110612583576125836140c6565b600091825260209091206002600590920201015460ff16156125b75760405162461bcd60e51b8152600401610bd090614228565b60008481526003602052604081205460028054919291839081106125dd576125dd6140c6565b60009182526020822060059091020180549092506125fd9060019061407a565b90506000826000018281548110612616576126166140c6565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561267b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269f919061459d565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156126ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127129190614108565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa158015612776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279a919061459d565b98506001600160a01b0389166127b6575050505050505061287a565b6127c1848c8b6137cc565b1561286d57604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612872565b600098505b505050505050505b5092915050565b6000828152600360205260408120546002805483929081106128a5576128a56140c6565b600091825260208083208684526003600590930201918201905260408220548154919350839181106128d9576128d96140c6565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295c91906141d9565b509150915082600401546000148061298b57508015801561298b57506000828152600284016020526040902054155b1561299d5760009450505050506129ce565b80156129b25750506004015491506129ce9050565b5060009081526002909101602052604090205491506129ce9050565b92915050565b6000546001600160a01b031633146129fe5760405162461bcd60e51b8152600401610bd0906143d4565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600060a084511015612a3d57506000915081905080612a5e565b505050608081015160a0808301516001600160a01b0383169290911c600116905b9193909250565b6000828152600360205260408120546002805491929183908110612a8b57612a8b6140c6565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612ac3613761565b8054909150600160401b900460ff1680612aea575080546001600160401b03808416911610155b15612b075760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612b9e57612b9e6140c6565b600091825260209091206005909102015492915050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015612be457505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c1f57600080fd5b505af1158015612c33573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b158015612c8357600080fd5b505af1158015612c97573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612cca5760405162461bcd60e51b8152600401610bd0906143d4565b50565b600084815260036020526040902054600280548692908110612cf157612cf16140c6565b600091825260209091206002600590920201015460ff1615612d255760405162461bcd60e51b8152600401610bd090614228565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d939190614108565b5090935060019250612da3915050565b816004811115612db557612db5614171565b14612e125760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610bd0565b82612e4f5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610bd0565b60008681526006602052604090205460ff16612e7d5760405162461bcd60e51b8152600401610bd0906141a2565b600086815260036020526040812054600280549091908110612ea157612ea16140c6565b60009182526020822060059091020180549092508290612ec39060019061407a565b81548110612ed357612ed36140c6565b90600052602060002090600c0201905060005b86811015612fc9573382898984818110612f0257612f026140c6565b9050602002013581548110612f1957612f196140c6565b60009182526020909120600490910201546001600160a01b031614612f805760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610bd0565b8582898984818110612f9457612f946140c6565b9050602002013581548110612fab57612fab6140c6565b60009182526020909120600160049092020181019190915501612ee6565b5086869050816005016000828254612fe19190614215565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f089061301e908b908b908b906145ec565b60405180910390a35050505050505050565b600087815260036020526040902054600280548992908110613054576130546140c6565b600091825260209091206002600590920201015460ff16156130885760405162461bcd60e51b8152600401610bd090614228565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f69190614108565b5090935060029250613106915050565b81600481111561311857613118614171565b146131735760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610bd0565b866131b55760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610bd0565b60008981526006602052604090205460ff166131e35760405162461bcd60e51b8152600401610bd0906141a2565b600089815260036020526040812054600280549091908110613207576132076140c6565b9060005260206000209060050201905080600101548711156132625760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610bd0565b805460009082906132759060019061407a565b81548110613285576132856140c6565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d906132ca908f9060040190815260200190565b60a060405180830381865afa1580156132e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330b9190614108565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015613366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338a9190614368565b5050505050915050600061339f8b8b8b610adf565b905060005b8c811015613626576001600160a01b038916858f8f848181106133c9576133c96140c6565b90506020020135815481106133e0576133e06140c6565b60009182526020909120600490910201546001600160a01b0316146134475760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610bd0565b82158061348e575081858f8f84818110613463576134636140c6565b905060200201358154811061347a5761347a6140c6565b906000526020600020906004020160010154145b61350e5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610bd0565b848e8e83818110613521576135216140c6565b9050602002013581548110613538576135386140c6565b600091825260209091206003600490920201015460ff16156135915760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610bd0565b8b858f8f848181106135a5576135a56140c6565b90506020020135815481106135bc576135bc6140c6565b60009182526020909120600260049092020101556001858f8f848181106135e5576135e56140c6565b90506020020135815481106135fc576135fc6140c6565b60009182526020909120600490910201600301805460ff19169115159190911790556001016133a4565b5050506004820180548b9250600090613640908490614215565b90915550506000888152600282016020526040812080548b9290613665908490614215565b90915550506001810154880361369457600381015460ff161561368f5760038101805460ff191690555b61370d565b60018101546000908152600282016020526040808220548a8352912054036136d657600381015460ff1661368f5760038101805460ff1916600117905561370d565b60018101546000908152600282016020526040808220548a8352912054111561370d576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b60405161374c93929190614610565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b61378d61398e565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60006137d98484846139b5565b6137e557506000610b08565b600083815260036020526040812054600280549192918390811061380b5761380b6140c6565b9060005260206000209060050201905060008060006138b584600401805461383290614278565b80601f016020809104026020016040519081016040528092919081815260200182805461385e90614278565b80156138ab5780601f10613880576101008083540402835291602001916138ab565b820191906000526020600020905b81548152906001019060200180831161388e57829003601f168201915b5050505050612a20565b919450925090506001600160a01b0383166138d857600195505050505050610b08565b811561395f57604051627eeac760e11b81526001600160a01b038881166004830152602482018390526000919085169062fdd58e906044015b602060405180830381865afa15801561392e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613952919061425f565b1195505050505050610b08565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190613911908b90600401613a80565b613996613a4d565b6139b357604051631afcd79f60e31b815260040160405180910390fd5b565b60045460009060ff1615613a435760008381526003602052604081205460028054919291839081106139e9576139e96140c6565b6000918252602082206005909102018054909250613a099060019061407a565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610b08915050565b5060019392505050565b6000613a57613761565b54600160401b900460ff16919050565b600060208284031215613a7957600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613abb57600080fd5b8135602083016000806001600160401b03841115613adb57613adb613a94565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613b0957613b09613a94565b604052838152905080828401871015613b2157600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613b5357600080fd5b833592506020840135915060408401356001600160401b03811115613b7757600080fd5b613b8386828701613aaa565b9150509250925092565b6001600160a01b0381168114612cca57600080fd5b60008060008060808587031215613bb857600080fd5b843593506020850135613bca81613b8d565b93969395505050506040820135916060013590565b60008060408385031215613bf257600080fd5b50508035926020909101359150565b60008060408385031215613c1457600080fd5b8235613c1f81613b8d565b915060208301356001600160401b03811115613c3a57600080fd5b613c4685828601613aaa565b9150509250929050565b60005b83811015613c6b578181015183820152602001613c53565b50506000910152565b60008151808452613c8c816020860160208601613c50565b601f01601f19169290920160200192915050565b602081526000610b086020830184613c74565b83815282151560208201526060604082015260006108f16060830184613c74565b600080600060608486031215613ce957600080fd5b83359250602084013591506040840135613d0281613b8d565b809150509250925092565b60008083601f840112613d1f57600080fd5b5081356001600160401b03811115613d3657600080fd5b6020830191508360208260051b8501011115613d5157600080fd5b9250929050565b60008060008060608587031215613d6e57600080fd5b8435935060208501356001600160401b03811115613d8b57600080fd5b613d9787828801613d0d565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613de2578351835260209384019390920191600101613dc4565b509095945050505050565b600080600080600060a08688031215613e0557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613e3d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e6957600080fd5b8335613e7481613b8d565b92506020840135915060408401356001600160401b03811115613b7757600080fd5b60008060008060008060a08789031215613eaf57600080fd5b8635955060208701356001600160401b03811115613ecc57600080fd5b613ed889828a01613d0d565b909650945050604087013592506060870135915060808701356001600160401b03811115613f0557600080fd5b613f1189828a01613aaa565b9150509295509295509295565b600060208284031215613f3057600080fd5b8135610b0881613b8d565b600080600080600060808688031215613f5357600080fd5b853594506020860135935060408601356001600160401b03811115613f7757600080fd5b8601601f81018813613f8857600080fd5b80356001600160401b03811115613f9e57600080fd5b886020828401011115613fb057600080fd5b959894975060200195606001359392505050565b600080600060608486031215613fd957600080fd5b8335613fe481613b8d565b92506020840135613ff481613b8d565b91506040840135613d0281613b8d565b60006020828403121561401657600080fd5b81356001600160401b0381111561402c57600080fd5b61403884828501613aaa565b949350505050565b6000806040838503121561405357600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b818103818111156129ce576129ce614064565b80820281158282048414176129ce576129ce614064565b6000826140c157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80516001600160601b03811681146140f357600080fd5b919050565b805180151581146140f357600080fd5b600080600080600060a0868803121561412057600080fd5b614129866140dc565b9450602086015161413981613b8d565b60408701519094506005811061414e57600080fd5b925061415c606087016140f8565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561419957600080fd5b610b08826140f8565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b6000806000606084860312156141ee57600080fd5b835192506141fe602085016140f8565b915061420c604085016140f8565b90509250925092565b808201808211156129ce576129ce614064565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b60006020828403121561427157600080fd5b5051919050565b600181811c9082168061428c57607f821691505b6020821081036142ac57634e487b7160e01b600052602260045260246000fd5b50919050565b8381528260208201526060604082015260008083546142d081614278565b80606086015260018216600081146142ef576001811461430b5761433f565b60ff1983166080870152608082151560051b870101935061433f565b86600052602060002060005b8381101561433657815488820160800152600190910190602001614317565b87016080019450505b5091979650505050505050565b6000825161435e818460208701613c50565b9190910192915050565b600080600080600080600060e0888a03121561438357600080fd5b61438c886140dc565b965061439a602089016140f8565b604089015160608a015160808b015160a08c01519399509197509550935091506143c660c089016140f8565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611a6e57806000526020600020601f840160051c810160208510156144815750805b601f840160051c820191505b818110156144a1576000815560010161448d565b5050505050565b6001600160401b038311156144bf576144bf613a94565b6144d3836144cd8354614278565b8361445a565b6000601f84116001811461450757600085156144ef5750838201355b600019600387901b1c1916600186901b1783556144a1565b600083815260209020601f19861690835b828110156145385786850135825560209485019460019092019101614518565b50868210156145555760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156145af57600080fd5b8151610b0881613b8d565b81835260006001600160fb1b038311156145d357600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006146006040830185876145ba565b9050826020830152949350505050565b6040815260006146246040830185876145ba565b82810360208401526146368185613c74565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220809532e74c527307f7c4fb23228698c888252ec20a2012cf6adf507c53468b9f64736f6c634300081c0033", - "deployedBytecode": "0x60806040526004361061023b5760003560e01c8063751accd01161012e578063d2b8035a116100ab578063f2f4eb261161006f578063f2f4eb261461076d578063f32ab9271461078d578063f7e7d1fd146107c2578063f8abee10146107e2578063fc6f8f161461081257600080fd5b8063d2b8035a146106c8578063da3beb8c146106e8578063e349ad301461059a578063e4c0aaf414610708578063ec7b23fb1461072857600080fd5b8063b34bfaa8116100f2578063b34bfaa81461063c578063b6ede54014610652578063ba66fde714610672578063be46760414610692578063c0c53b8b146106a857600080fd5b8063751accd01461057a578063796490f91461059a5780637c04034e146105b05780638e426460146105d0578063a7cc08fe146105f057600080fd5b80634f1ef286116101bc5780635c92e2f6116101805780635c92e2f6146104a057806365540b96146104c0578063675926f6146104ed57806369f3f0411461050d5780636d4cd8ea1461055a57600080fd5b80634f1ef286146103c957806352d1902d146103dc57806354fd4d50146103f1578063564a565d146104305780635a155ccd1461045f57600080fd5b80631cc3423a116102035780631cc3423a1461033a5780632621b9a21461035a5780632d68efc914610374578063362c3479146103945780634b2f0ea0146103b457600080fd5b80630855bbe9146102405780630baa64d1146102755780630c340a24146102955780631200aabc146102c25780631c3db16d146102fd575b600080fd5b34801561024c57600080fd5b5061026061025b366004613a67565b610832565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610260610290366004613a67565b6108fa565b3480156102a157600080fd5b506000546102b5906001600160a01b031681565b60405161026c9190613a80565b3480156102ce57600080fd5b506102ef6102dd366004613a67565b60036020526000908152604090205481565b60405190815260200161026c565b34801561030957600080fd5b5061031d610318366004613a67565b610971565b60408051938452911515602084015215159082015260600161026c565b34801561034657600080fd5b506102ef610355366004613b3e565b610adf565b34801561036657600080fd5b506004546102609060ff1681565b34801561038057600080fd5b506007546102b5906001600160a01b031681565b3480156103a057600080fd5b506102ef6103af366004613ba2565b610b0f565b6103c76103c2366004613bdf565b610fc4565b005b6103c76103d7366004613c01565b611854565b3480156103e857600080fd5b506102ef611a73565b3480156103fd57600080fd5b50610423604051806040016040528060068152602001650302e31322e360d41b81525081565b60405161026c9190613ca0565b34801561043c57600080fd5b5061045061044b366004613a67565b611ad1565b60405161026c93929190613cb3565b34801561046b57600080fd5b5061026061047a366004613cd4565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104ac57600080fd5b506103c76104bb366004613d58565b611b97565b3480156104cc57600080fd5b506104e06104db366004613a67565b611ba3565b60405161026c9190613daa565b3480156104f957600080fd5b506102ef610508366004613ded565b611c67565b34801561051957600080fd5b5061052d610528366004613e28565b611daa565b604080519687529415156020870152938501929092526060840152608083015260a082015260c00161026c565b34801561056657600080fd5b50610260610575366004613a67565b611e62565b34801561058657600080fd5b506103c7610595366004613e54565b611fe5565b3480156105a657600080fd5b506102ef61271081565b3480156105bc57600080fd5b506103c76105cb366004613e96565b6120b1565b3480156105dc57600080fd5b506103c76105eb366004613f1e565b6120c8565b3480156105fc57600080fd5b5061061061060b366004613e28565b612114565b604080516001600160a01b0390951685526020850193909352918301521515606082015260800161026c565b34801561064857600080fd5b506102ef614e2081565b34801561065e57600080fd5b506103c761066d366004613f3b565b6121da565b34801561067e57600080fd5b5061026061068d366004613e28565b6123cd565b34801561069e57600080fd5b506102ef61138881565b3480156106b457600080fd5b506103c76106c3366004613fc4565b612468565b3480156106d457600080fd5b506102b56106e3366004613bdf565b612532565b3480156106f457600080fd5b506102ef610703366004613bdf565b612881565b34801561071457600080fd5b506103c7610723366004613f1e565b6129d4565b34801561073457600080fd5b50610748610743366004614004565b612a20565b604080516001600160a01b03909416845291151560208401529082015260600161026c565b34801561077957600080fd5b506001546102b5906001600160a01b031681565b34801561079957600080fd5b506107ad6107a8366004613bdf565b612a65565b6040805192835260208301919091520161026c565b3480156107ce57600080fd5b506103c76107dd366004613f1e565b612ab7565b3480156107ee57600080fd5b506102606107fd366004613a67565b60066020526000908152604090205460ff1681565b34801561081e57600080fd5b506102ef61082d366004613a67565b612b89565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a39190614040565b9150915060006108b285611ba3565b9050805160001480156108f157506127106113886108d0858561407a565b6108da919061408d565b6108e491906140a4565b6108ee844261407a565b10155b95945050505050565b60008181526003602052604081205460028054839290811061091e5761091e6140c6565b600091825260208220600590910201805490925082906109409060019061407a565b81548110610950576109506140c6565b60009182526020909120600c90910201805460059091015414949350505050565b600080600080600260036000878152602001908152602001600020548154811061099d5761099d6140c6565b600091825260208220600590910201805490925082906109bf9060019061407a565b815481106109cf576109cf6140c6565b60009182526020909120600c90910201600381015460ff1694509050836109fa5780600101546109fd565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a709190614108565b5090935060049250610a80915050565b816004811115610a9257610a92614171565b03610ad5576000610aa288611ba3565b90508051600103610ad35780600081518110610ac057610ac06140c6565b6020026020010151965060009550600194505b505b5050509193909250565b604080516020808201869052818301859052825180830384018152606090920190925280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b819190614108565b50935050505080610bd95760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c509190614187565b15610c8e5760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610bd0565b60008681526006602052604090205460ff16610cbc5760405162461bcd60e51b8152600401610bd0906141a2565b600086815260036020526040812054600280549091908110610ce057610ce06140c6565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610d1457610d146140c6565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9391906141d9565b5050600087815260078401602052604090205490915060ff16610ddd576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610f22565b808603610e52576000868152600683016020526040902054610e00576000610e4b565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610e41919061408d565b610e4b91906140a4565b9450610f22565b600081815260078301602052604090205460ff16610f225781600601600083600a01600181548110610e8657610e866140c6565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610ebc57610ebc6140c6565b9060005260206000200154815260200190815260200160002054610ee09190614215565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610f15919061408d565b610f1f91906140a4565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610fb857600754610f69906001600160a01b038a811691889116612bb5565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051610faf929190918252602082015260400190565b60405180910390a45b50505050949350505050565b600082815260036020526040902054600280548492908110610fe857610fe86140c6565b600091825260209091206002600590920201015460ff161561101c5760405162461bcd60e51b8152600401610bd090614228565b600083815260036020526040812054600280549091908110611040576110406140c6565b9060005260206000209060050201905080600101548311156110a45760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610bd0565b60008481526006602052604090205460ff166110d25760405162461bcd60e51b8152600401610bd0906141a2565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111439190614040565b9150915081421015801561115657508042105b61119b5760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610bd0565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120091906141d9565b50509050868103611215576127109150611296565b612710611388611225868661407a565b61122f919061408d565b61123991906140a4565b611243854261407a565b106112905760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610bd0565b614e2091505b845460009086906112a99060019061407a565b815481106112b9576112b96140c6565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c919061425f565b611346919061407a565b60008a815260078401602052604090205490915060ff16156113aa5760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610bd0565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156113f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611418919061425f565b90506000612710611429878461408d565b61143391906140a4565b61143d9083614215565b60008c8152600686016020526040812054919250908211156114ee5760008c81526006860160205260409020543490611476908461407a565b1161149b5760008c8152600686016020526040902054611496908361407a565b61149d565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516114e5929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f84529091528120805483929061151a908490614215565b909155505060008c81526006860160205260408120805483929061153f908490614215565b909155505060008c815260068601602052604090205482116116115760008c815260068601602052604081205460098701805491929091611581908490614215565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a8501546001101561181c5782856009015461162e919061407a565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa15801561167c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a09190614187565b156116b95760028a01805460ff1916600117905561179c565b895460038b0160006116cc876001614215565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161174791815260200190565b602060405180830381865afa158015611764573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611788919061425f565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016117e9939291906142b2565b6000604051808303818588803b15801561180257600080fd5b505af1158015611816573d6000803e3d6000fd5b50505050505b8034111561184557611845611831823461407a565b6007543391906001600160a01b0316612bb5565b50505050505050505050505050565b61185d82612ca0565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806118db57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118cf6000805160206146418339815191525490565b6001600160a01b031614155b156118f95760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611953575060408051601f3d908101601f191682019092526119509181019061425f565b60015b6119725781604051630c76093760e01b8152600401610bd09190613a80565b60008051602061464183398151915281146119a357604051632a87526960e21b815260048101829052602401610bd0565b6000805160206146418339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611a6e576000836001600160a01b031683604051611a0a919061434c565b600060405180830381855af49150503d8060008114611a45576040519150601f19603f3d011682016040523d82523d6000602084013e611a4a565b606091505b5050905080611a6c576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611abe5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061464183398151915290565b60028181548110611ae157600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611b1490614278565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4090614278565b8015611b8d5780601f10611b6257610100808354040283529160200191611b8d565b820191906000526020600020905b815481529060010190602001808311611b7057829003601f168201915b5050505050905083565b611a6c84848484612ccd565b6000818152600360205260408120546002805460609392908110611bc957611bc96140c6565b60009182526020822060059091020180549092508290611beb9060019061407a565b81548110611bfb57611bfb6140c6565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c5957602002820191906000526020600020905b815481526020019060010190808311611c45575b505050505092505050919050565b600085815260036020526040812054600280548392908110611c8b57611c8b6140c6565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611cbf57611cbf6140c6565b90600052602060002090600c02016000018681548110611ce157611ce16140c6565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6391906141d9565b506003850154919350915060ff168015611d8757508183600201541480611d875750805b15611d9a576127109450505050506108f1565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611ddb57611ddb6140c6565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611e0f57611e0f6140c6565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611e8657611e866140c6565b60009182526020822060059091020180549092508290611ea89060019061407a565b81548110611eb857611eb86140c6565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190614108565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb69190614368565b5050505050915050600081611fcc578354611fd2565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b0316331461200f5760405162461bcd60e51b8152600401610bd0906143d4565b6000836001600160a01b0316838360405161202a919061434c565b60006040518083038185875af1925050503d8060008114612067576040519150601f19603f3d011682016040523d82523d6000602084013e61206c565b606091505b5050905080611a6c5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610bd0565b6120c086868686868633613030565b505050505050565b6000546001600160a01b031633146120f25760405162461bcd60e51b8152600401610bd0906143d4565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a81526020019081526020016000205481548110612142576121426140c6565b600091825260208083208a8452600360059093020191820190526040822054815491935083918110612176576121766140c6565b90600052602060002090600c02016000018781548110612198576121986140c6565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146122045760405162461bcd60e51b8152600401610bd090614416565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad20161228f8587836144a8565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156122f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612316919061425f565b612320919061407a565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab58108906123bb908a908a908a90614567565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106123f1576123f16140c6565b60009182526020808320878452600360059093020191820190526040822054815491935083918110612425576124256140c6565b90600052602060002090600c02016000018481548110612447576124476140c6565b600091825260209091206004909102016003015460ff169695505050505050565b60016000612474613761565b8054909150600160401b900460ff168061249b575080546001600160401b03808416911610155b156124b85760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556124e4858585613785565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b0316331461255f5760405162461bcd60e51b8152600401610bd090614416565b600083815260036020526040902054600280548592908110612583576125836140c6565b600091825260209091206002600590920201015460ff16156125b75760405162461bcd60e51b8152600401610bd090614228565b60008481526003602052604081205460028054919291839081106125dd576125dd6140c6565b60009182526020822060059091020180549092506125fd9060019061407a565b90506000826000018281548110612616576126166140c6565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561267b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269f919061459d565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156126ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127129190614108565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa158015612776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279a919061459d565b98506001600160a01b0389166127b6575050505050505061287a565b6127c1848c8b6137cc565b1561286d57604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612872565b600098505b505050505050505b5092915050565b6000828152600360205260408120546002805483929081106128a5576128a56140c6565b600091825260208083208684526003600590930201918201905260408220548154919350839181106128d9576128d96140c6565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295c91906141d9565b509150915082600401546000148061298b57508015801561298b57506000828152600284016020526040902054155b1561299d5760009450505050506129ce565b80156129b25750506004015491506129ce9050565b5060009081526002909101602052604090205491506129ce9050565b92915050565b6000546001600160a01b031633146129fe5760405162461bcd60e51b8152600401610bd0906143d4565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600060a084511015612a3d57506000915081905080612a5e565b505050608081015160a0808301516001600160a01b0383169290911c600116905b9193909250565b6000828152600360205260408120546002805491929183908110612a8b57612a8b6140c6565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612ac3613761565b8054909150600160401b900460ff1680612aea575080546001600160401b03808416911610155b15612b075760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612b9e57612b9e6140c6565b600091825260209091206005909102015492915050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015612be457505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c1f57600080fd5b505af1158015612c33573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b158015612c8357600080fd5b505af1158015612c97573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612cca5760405162461bcd60e51b8152600401610bd0906143d4565b50565b600084815260036020526040902054600280548692908110612cf157612cf16140c6565b600091825260209091206002600590920201015460ff1615612d255760405162461bcd60e51b8152600401610bd090614228565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d939190614108565b5090935060019250612da3915050565b816004811115612db557612db5614171565b14612e125760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610bd0565b82612e4f5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610bd0565b60008681526006602052604090205460ff16612e7d5760405162461bcd60e51b8152600401610bd0906141a2565b600086815260036020526040812054600280549091908110612ea157612ea16140c6565b60009182526020822060059091020180549092508290612ec39060019061407a565b81548110612ed357612ed36140c6565b90600052602060002090600c0201905060005b86811015612fc9573382898984818110612f0257612f026140c6565b9050602002013581548110612f1957612f196140c6565b60009182526020909120600490910201546001600160a01b031614612f805760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610bd0565b8582898984818110612f9457612f946140c6565b9050602002013581548110612fab57612fab6140c6565b60009182526020909120600160049092020181019190915501612ee6565b5086869050816005016000828254612fe19190614215565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f089061301e908b908b908b906145ec565b60405180910390a35050505050505050565b600087815260036020526040902054600280548992908110613054576130546140c6565b600091825260209091206002600590920201015460ff16156130885760405162461bcd60e51b8152600401610bd090614228565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f69190614108565b5090935060029250613106915050565b81600481111561311857613118614171565b146131735760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610bd0565b866131b55760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610bd0565b60008981526006602052604090205460ff166131e35760405162461bcd60e51b8152600401610bd0906141a2565b600089815260036020526040812054600280549091908110613207576132076140c6565b9060005260206000209060050201905080600101548711156132625760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610bd0565b805460009082906132759060019061407a565b81548110613285576132856140c6565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d906132ca908f9060040190815260200190565b60a060405180830381865afa1580156132e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330b9190614108565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015613366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338a9190614368565b5050505050915050600061339f8b8b8b610adf565b905060005b8c811015613626576001600160a01b038916858f8f848181106133c9576133c96140c6565b90506020020135815481106133e0576133e06140c6565b60009182526020909120600490910201546001600160a01b0316146134475760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610bd0565b82158061348e575081858f8f84818110613463576134636140c6565b905060200201358154811061347a5761347a6140c6565b906000526020600020906004020160010154145b61350e5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610bd0565b848e8e83818110613521576135216140c6565b9050602002013581548110613538576135386140c6565b600091825260209091206003600490920201015460ff16156135915760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610bd0565b8b858f8f848181106135a5576135a56140c6565b90506020020135815481106135bc576135bc6140c6565b60009182526020909120600260049092020101556001858f8f848181106135e5576135e56140c6565b90506020020135815481106135fc576135fc6140c6565b60009182526020909120600490910201600301805460ff19169115159190911790556001016133a4565b5050506004820180548b9250600090613640908490614215565b90915550506000888152600282016020526040812080548b9290613665908490614215565b90915550506001810154880361369457600381015460ff161561368f5760038101805460ff191690555b61370d565b60018101546000908152600282016020526040808220548a8352912054036136d657600381015460ff1661368f5760038101805460ff1916600117905561370d565b60018101546000908152600282016020526040808220548a8352912054111561370d576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b60405161374c93929190614610565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b61378d61398e565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60006137d98484846139b5565b6137e557506000610b08565b600083815260036020526040812054600280549192918390811061380b5761380b6140c6565b9060005260206000209060050201905060008060006138b584600401805461383290614278565b80601f016020809104026020016040519081016040528092919081815260200182805461385e90614278565b80156138ab5780601f10613880576101008083540402835291602001916138ab565b820191906000526020600020905b81548152906001019060200180831161388e57829003601f168201915b5050505050612a20565b919450925090506001600160a01b0383166138d857600195505050505050610b08565b811561395f57604051627eeac760e11b81526001600160a01b038881166004830152602482018390526000919085169062fdd58e906044015b602060405180830381865afa15801561392e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613952919061425f565b1195505050505050610b08565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190613911908b90600401613a80565b613996613a4d565b6139b357604051631afcd79f60e31b815260040160405180910390fd5b565b60045460009060ff1615613a435760008381526003602052604081205460028054919291839081106139e9576139e96140c6565b6000918252602082206005909102018054909250613a099060019061407a565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610b08915050565b5060019392505050565b6000613a57613761565b54600160401b900460ff16919050565b600060208284031215613a7957600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613abb57600080fd5b8135602083016000806001600160401b03841115613adb57613adb613a94565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613b0957613b09613a94565b604052838152905080828401871015613b2157600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613b5357600080fd5b833592506020840135915060408401356001600160401b03811115613b7757600080fd5b613b8386828701613aaa565b9150509250925092565b6001600160a01b0381168114612cca57600080fd5b60008060008060808587031215613bb857600080fd5b843593506020850135613bca81613b8d565b93969395505050506040820135916060013590565b60008060408385031215613bf257600080fd5b50508035926020909101359150565b60008060408385031215613c1457600080fd5b8235613c1f81613b8d565b915060208301356001600160401b03811115613c3a57600080fd5b613c4685828601613aaa565b9150509250929050565b60005b83811015613c6b578181015183820152602001613c53565b50506000910152565b60008151808452613c8c816020860160208601613c50565b601f01601f19169290920160200192915050565b602081526000610b086020830184613c74565b83815282151560208201526060604082015260006108f16060830184613c74565b600080600060608486031215613ce957600080fd5b83359250602084013591506040840135613d0281613b8d565b809150509250925092565b60008083601f840112613d1f57600080fd5b5081356001600160401b03811115613d3657600080fd5b6020830191508360208260051b8501011115613d5157600080fd5b9250929050565b60008060008060608587031215613d6e57600080fd5b8435935060208501356001600160401b03811115613d8b57600080fd5b613d9787828801613d0d565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613de2578351835260209384019390920191600101613dc4565b509095945050505050565b600080600080600060a08688031215613e0557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613e3d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e6957600080fd5b8335613e7481613b8d565b92506020840135915060408401356001600160401b03811115613b7757600080fd5b60008060008060008060a08789031215613eaf57600080fd5b8635955060208701356001600160401b03811115613ecc57600080fd5b613ed889828a01613d0d565b909650945050604087013592506060870135915060808701356001600160401b03811115613f0557600080fd5b613f1189828a01613aaa565b9150509295509295509295565b600060208284031215613f3057600080fd5b8135610b0881613b8d565b600080600080600060808688031215613f5357600080fd5b853594506020860135935060408601356001600160401b03811115613f7757600080fd5b8601601f81018813613f8857600080fd5b80356001600160401b03811115613f9e57600080fd5b886020828401011115613fb057600080fd5b959894975060200195606001359392505050565b600080600060608486031215613fd957600080fd5b8335613fe481613b8d565b92506020840135613ff481613b8d565b91506040840135613d0281613b8d565b60006020828403121561401657600080fd5b81356001600160401b0381111561402c57600080fd5b61403884828501613aaa565b949350505050565b6000806040838503121561405357600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b818103818111156129ce576129ce614064565b80820281158282048414176129ce576129ce614064565b6000826140c157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80516001600160601b03811681146140f357600080fd5b919050565b805180151581146140f357600080fd5b600080600080600060a0868803121561412057600080fd5b614129866140dc565b9450602086015161413981613b8d565b60408701519094506005811061414e57600080fd5b925061415c606087016140f8565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561419957600080fd5b610b08826140f8565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b6000806000606084860312156141ee57600080fd5b835192506141fe602085016140f8565b915061420c604085016140f8565b90509250925092565b808201808211156129ce576129ce614064565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b60006020828403121561427157600080fd5b5051919050565b600181811c9082168061428c57607f821691505b6020821081036142ac57634e487b7160e01b600052602260045260246000fd5b50919050565b8381528260208201526060604082015260008083546142d081614278565b80606086015260018216600081146142ef576001811461430b5761433f565b60ff1983166080870152608082151560051b870101935061433f565b86600052602060002060005b8381101561433657815488820160800152600190910190602001614317565b87016080019450505b5091979650505050505050565b6000825161435e818460208701613c50565b9190910192915050565b600080600080600080600060e0888a03121561438357600080fd5b61438c886140dc565b965061439a602089016140f8565b604089015160608a015160808b015160a08c01519399509197509550935091506143c660c089016140f8565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611a6e57806000526020600020601f840160051c810160208510156144815750805b601f840160051c820191505b818110156144a1576000815560010161448d565b5050505050565b6001600160401b038311156144bf576144bf613a94565b6144d3836144cd8354614278565b8361445a565b6000601f84116001811461450757600085156144ef5750838201355b600019600387901b1c1916600186901b1783556144a1565b600083815260209020601f19861690835b828110156145385786850135825560209485019460019092019101614518565b50868210156145555760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156145af57600080fd5b8151610b0881613b8d565b81835260006001600160fb1b038311156145d357600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006146006040830185876145ba565b9050826020830152949350505050565b6040815260006146246040830185876145ba565b82810360208401526146368185613c74565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220809532e74c527307f7c4fb23228698c888252ec20a2012cf6adf507c53468b9f64736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "extraDataToTokenInfo(bytes)": { - "details": "Extracts token gating information from the extra data.", - "params": { - "_extraData": "The extra data bytes array with the following encoding: - bytes 0-31: uint96 courtID, not used here - bytes 32-63: uint256 minJurors, not used here - bytes 64-95: uint256 disputeKitID, not used here - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160) - bytes 128-159: uint256 tokenId" - }, - "returns": { - "isERC1155": "True if the token is an ERC-1155, false for ERC-20/ERC-721.", - "tokenGate": "The address of the token contract used for gating access.", - "tokenId": "The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721)." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "getLocalDisputeRoundID(uint256,uint256)": { - "details": "Returns the local dispute ID and round ID for a given core dispute ID and core round ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core." - }, - "returns": { - "localDisputeID": "The ID of the dispute in the Dispute Kit.", - "localRoundID": "The ID of the round in the Dispute Kit." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Returns the number of rounds in a dispute.", - "params": { - "_localDisputeID": "The ID of the dispute in the Dispute Kit." - }, - "returns": { - "_0": "The number of rounds in the dispute." - } - }, - "getVoteInfo(uint256,uint256,uint256)": { - "details": "Returns the vote information for a given vote ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The address of the juror who cast the vote.", - "commit": "The commit of the vote." - } - }, - "hashVote(uint256,uint256,string)": { - "details": "Computes the hash of a vote using ABI encodingThe unused parameters may be used by overriding contracts.", - "params": { - "_choice": "The choice being voted for", - "_justification": "The justification for the vote", - "_salt": "A random salt for commitment" - }, - "returns": { - "_0": "bytes32 The hash of the encoded vote parameters" - } - }, - "initialize(address,address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isAppealFunded(uint256)": { - "details": "Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "Whether the appeal funding is finished." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "DisputeKitGated Dispute kit implementation adapted from DisputeKitClassic - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 21704, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 21707, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)11133" - }, - { - "astId": 21711, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)21643_storage)dyn_storage" - }, - { - "astId": 21715, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21717, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "singleDrawPerJuror", - "offset": 0, - "slot": "4", - "type": "t_bool" - }, - { - "astId": 21725, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "alreadyDrawn", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))" - }, - { - "astId": 21729, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "coreDisputeIDToActive", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 21731, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "wNative", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)21643_storage)dyn_storage": { - "base": "t_struct(Dispute)21643_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)21681_storage)dyn_storage": { - "base": "t_struct(Round)21681_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)21690_storage)dyn_storage": { - "base": "t_struct(Vote)21690_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)11133": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(uint256 => mapping(address => bool)))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)21643_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Dispute", - "members": [ - { - "astId": 21632, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)21681_storage)dyn_storage" - }, - { - "astId": 21634, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 21636, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 21640, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21642, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)21681_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Round", - "members": [ - { - "astId": 21647, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)21690_storage)dyn_storage" - }, - { - "astId": 21649, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 21653, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21655, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 21657, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 21659, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 21663, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21667, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 21673, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 21675, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 21678, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 21680, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)21690_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Vote", - "members": [ - { - "astId": 21683, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 21685, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 21687, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 21689, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrum/DisputeKitGated_Proxy.json b/contracts/deployments/arbitrum/DisputeKitGated_Proxy.json deleted file mode 100644 index 79f6b003c..000000000 --- a/contracts/deployments/arbitrum/DisputeKitGated_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0xaE1eed20C125B739b64c948820C61F809ad9a925", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x2df70cb0e77da4f9e5f9c0799df57f4584279e3eada9a226a6a049ec8d7d0897", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xaE1eed20C125B739b64c948820C61F809ad9a925", - "transactionIndex": 9, - "gasUsed": "228501", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000020000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xcac1900c875542795826e4e2f892aad5de97bfffd195bb789ac244df2c5b4f29", - "transactionHash": "0x2df70cb0e77da4f9e5f9c0799df57f4584279e3eada9a226a6a049ec8d7d0897", - "logs": [ - { - "transactionIndex": 9, - "blockNumber": 364034429, - "transactionHash": "0x2df70cb0e77da4f9e5f9c0799df57f4584279e3eada9a226a6a049ec8d7d0897", - "address": "0xaE1eed20C125B739b64c948820C61F809ad9a925", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 3, - "blockHash": "0xcac1900c875542795826e4e2f892aad5de97bfffd195bb789ac244df2c5b4f29" - } - ], - "blockNumber": 364034429, - "cumulativeGasUsed": "1192860", - "status": 1, - "byzantium": true - }, - "args": [ - "0xEA7863E6dE863e8E6d037D8693ad5dA45Db7790a", - "0xc0c53b8b000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000991d2df165670b9cac3b022f4b68d65b664222ea00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1" - ], - "numDeployments": 1, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitGatedProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220996d130d61aaeb26a9d0d04a99b8d31e12de6834d2200a693f04efa432fb1da264736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220996d130d61aaeb26a9d0d04a99b8d31e12de6834d2200a693f04efa432fb1da264736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/DisputeKitShutter.json b/contracts/deployments/arbitrum/DisputeKitShutter.json deleted file mode 100644 index 4ddf89ea8..000000000 --- a/contracts/deployments/arbitrum/DisputeKitShutter.json +++ /dev/null @@ -1,1314 +0,0 @@ -{ - "address": "0x9D3e3f1765744c2a1BC6F6088549770444BBC768", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "CommitCastShutter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "castCommitShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVoteShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x7fb022ef5148ef65adf5cc9ec618ab3d0616fb03926747c95480100ff27a449c", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x9D3e3f1765744c2a1BC6F6088549770444BBC768", - "transactionIndex": 15, - "gasUsed": "228435", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x6e1577e8f55bfadd354f05189cb9c1efbdd2ba0fd0ead54646ddfeca11ab7344", - "transactionHash": "0x7fb022ef5148ef65adf5cc9ec618ab3d0616fb03926747c95480100ff27a449c", - "logs": [ - { - "transactionIndex": 15, - "blockNumber": 364034407, - "transactionHash": "0x7fb022ef5148ef65adf5cc9ec618ab3d0616fb03926747c95480100ff27a449c", - "address": "0x9D3e3f1765744c2a1BC6F6088549770444BBC768", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 17, - "blockHash": "0x6e1577e8f55bfadd354f05189cb9c1efbdd2ba0fd0ead54646ddfeca11ab7344" - } - ], - "blockNumber": 364034407, - "cumulativeGasUsed": "2231063", - "status": 1, - "byzantium": true - }, - "args": [ - "0xF3103B46403A0bBd4551648BFb29BCC2b8783947", - "0xc0c53b8b000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000991d2df165670b9cac3b022f4b68d65b664222ea00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1" - ], - "numDeployments": 1, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitShutterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220b9dc2002a96470cf50e49e7a537fe7864644f7b84f7c205df33e04752d2c158364736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220b9dc2002a96470cf50e49e7a537fe7864644f7b84f7c205df33e04752d2c158364736f6c634300081c0033", - "execute": { - "methodName": "initialize", - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1" - ] - }, - "implementation": "0xF3103B46403A0bBd4551648BFb29BCC2b8783947", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/DisputeKitShutter_Implementation.json b/contracts/deployments/arbitrum/DisputeKitShutter_Implementation.json deleted file mode 100644 index cb346ec82..000000000 --- a/contracts/deployments/arbitrum/DisputeKitShutter_Implementation.json +++ /dev/null @@ -1,1975 +0,0 @@ -{ - "address": "0xF3103B46403A0bBd4551648BFb29BCC2b8783947", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "CommitCastShutter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "castCommitShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVoteShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x3d3ff835a513465848b6b68e883f4a7d8910b0a302e6a057727d19c1b7c00429", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xF3103B46403A0bBd4551648BFb29BCC2b8783947", - "transactionIndex": 4, - "gasUsed": "4056317", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000200000000000000000000000800000000000000000000000080000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x5f0d86132f55f7222b038c454d9ea6ce063f1c302f75dfdaf7f4eaa298a1a9bb", - "transactionHash": "0x3d3ff835a513465848b6b68e883f4a7d8910b0a302e6a057727d19c1b7c00429", - "logs": [ - { - "transactionIndex": 4, - "blockNumber": 364034399, - "transactionHash": "0x3d3ff835a513465848b6b68e883f4a7d8910b0a302e6a057727d19c1b7c00429", - "address": "0xF3103B46403A0bBd4551648BFb29BCC2b8783947", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 2, - "blockHash": "0x5f0d86132f55f7222b038c454d9ea6ce063f1c302f75dfdaf7f4eaa298a1a9bb" - } - ], - "blockNumber": 364034399, - "cumulativeGasUsed": "4261331", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_identity\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_encryptedVote\",\"type\":\"bytes\"}],\"name\":\"CommitCastShutter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"name\":\"alreadyDrawn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_identity\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_encryptedVote\",\"type\":\"bytes\"}],\"name\":\"castCommitShutter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVoteShutter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getLocalDisputeRoundID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localDisputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"hashVote\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"isAppealFunded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleDrawPerJuror\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"CommitCastShutter(uint256,address,bytes32,bytes32,bytes)\":{\"details\":\"Emitted when a vote is cast.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_encryptedVote\":\"The Shutter encrypted vote.\",\"_identity\":\"The Shutter identity used for encryption.\",\"_juror\":\"The address of the juror casting the vote commitment.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castCommitShutter(uint256,uint256[],bytes32,bytes32,bytes)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash including the justification.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_encryptedVote\":\"The Shutter encrypted vote.\",\"_identity\":\"The Shutter identity used for encryption.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"getLocalDisputeRoundID(uint256,uint256)\":{\"details\":\"Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\"},\"returns\":{\"localDisputeID\":\"The ID of the dispute in the Dispute Kit.\",\"localRoundID\":\"The ID of the round in the Dispute Kit.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Returns the number of rounds in a dispute.\",\"params\":{\"_localDisputeID\":\"The ID of the dispute in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of rounds in the dispute.\"}},\"getVoteInfo(uint256,uint256,uint256)\":{\"details\":\"Returns the vote information for a given vote ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The address of the juror who cast the vote.\",\"commit\":\"The commit of the vote.\"}},\"hashVote(uint256,uint256,string)\":{\"details\":\"Computes the hash of a vote using ABI encoding\",\"params\":{\"_choice\":\"The choice being voted for\",\"_justification\":\"The justification for the vote\",\"_salt\":\"A random salt for commitment\"},\"returns\":{\"_0\":\"bytes32 The hash of the encoded vote parameters\"}},\"initialize(address,address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isAppealFunded(uint256)\":{\"details\":\"Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"Whether the appeal funding is finished.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"DisputeKitShutter Added functionality: shielded voting. Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitShutter.sol\":\"DisputeKitShutter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassicBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore, KlerosCoreBase, IDisputeKit, ISortitionModule} from \\\"../KlerosCore.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {SafeSend} from \\\"../../libraries/SafeSend.sol\\\";\\n\\n/// @title DisputeKitClassicBase\\n/// Abstract Dispute kit classic implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\nabstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable {\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default.\\n mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool)))\\n public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading.\\n mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function __DisputeKitClassicBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n dispute.jumped = false; // Possibly true if this DK has jumped in a previous round.\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n coreDisputeIDToActive[_coreDisputeID] = true;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[localRoundID];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n if (drawnAddress == address(0)) {\\n // Sortition can return 0 address if no one has staked yet.\\n return drawnAddress;\\n }\\n\\n if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true;\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash.\\n function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n }\\n\\n function _castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender);\\n }\\n\\n function _castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification,\\n address _juror\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n bytes32 voteHash = hashVote(_choice, _salt, _justification);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == _juror, \\\"The juror has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == voteHash,\\n \\\"The vote hash must match the commitment in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n } // Workaround stack too deep\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.safeSend(amount, wNative);\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @dev The unused parameters may be used by overriding contracts.\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(_choice, _salt));\\n }\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length;\\n\\n return round.totalVoted == expectedTotalVoted;\\n }\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) {\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n // Uses block.timestamp from the current tx when called by the core contract.\\n return (fundedChoices.length == 0 &&\\n block.timestamp - appealPeriodStart >=\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT);\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n /// @dev Returns the number of rounds in a dispute.\\n /// @param _localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return The number of rounds in the dispute.\\n function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) {\\n return disputes[_localDisputeID].rounds.length;\\n }\\n\\n /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @return localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return localRoundID The ID of the round in the Dispute Kit.\\n function getLocalDisputeRoundID(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID\\n ) external view returns (uint256 localDisputeID, uint256 localRoundID) {\\n localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID];\\n }\\n\\n /// @dev Returns the vote information for a given vote ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @param _voteID The ID of the vote.\\n /// @return account The address of the juror who cast the vote.\\n /// @return commit The commit of the vote.\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts.\\n /// minStake is checked directly during staking process however it's possible for the juror to get drawn\\n /// while having < minStake if it is later increased by governance.\\n /// This issue is expected and harmless.\\n /// @param _round The round in which the juror is being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return result Whether the address passes the check or not.\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view virtual returns (bool result) {\\n if (singleDrawPerJuror) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n result = !alreadyDrawn[localDisputeID][localRoundID][_juror];\\n } else {\\n result = true;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc418b9a76802db5d16819836734ecff8b76d5f37101819aee6fd1844dfe21dd9\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitShutter.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {DisputeKitClassicBase, KlerosCore} from \\\"./DisputeKitClassicBase.sol\\\";\\n\\n/// @title DisputeKitShutter\\n/// Added functionality: shielded voting.\\n/// Dispute kit implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitShutter is DisputeKitClassicBase {\\n string public constant override version = \\\"0.12.0\\\";\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a vote is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _commit The commitment hash.\\n /// @param _identity The Shutter identity used for encryption.\\n /// @param _encryptedVote The Shutter encrypted vote.\\n event CommitCastShutter(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n bytes32 indexed _commit,\\n bytes32 _identity,\\n bytes _encryptedVote\\n );\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(address _governor, KlerosCore _core, address _wNative) external reinitializer(1) {\\n __DisputeKitClassicBase_initialize(_governor, _core, _wNative);\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(9) {\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash including the justification.\\n /// @param _identity The Shutter identity used for encryption.\\n /// @param _encryptedVote The Shutter encrypted vote.\\n function castCommitShutter(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit,\\n bytes32 _identity,\\n bytes calldata _encryptedVote\\n ) external notJumped(_coreDisputeID) {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n emit CommitCastShutter(_coreDisputeID, msg.sender, _commit, _identity, _encryptedVote);\\n }\\n\\n function castVoteShutter(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n address juror = dispute.rounds[dispute.rounds.length - 1].votes[_voteIDs[0]].account;\\n\\n // _castVote() ensures that all the _voteIDs do belong to `juror`\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, juror);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure override returns (bytes32) {\\n bytes32 justificationHash = keccak256(bytes(_justification));\\n return keccak256(abi.encode(_choice, _salt, justificationHash));\\n }\\n}\\n\",\"keccak256\":\"0x22667ae7b4db6a3290463f2f42df92136c4f91190665a2f14523f05e1bbc50c5\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516146976100fc600039600081816119420152818161196b0152611b6301526146976000f3fe6080604052600436106102465760003560e01c80636d4cd8ea11610139578063be467604116100b6578063e4c0aaf41161007a578063e4c0aaf41461075e578063f2f4eb261461077e578063f32ab9271461079e578063f7e7d1fd146107d3578063f8abee10146107f3578063fc6f8f161461082357600080fd5b8063be467604146106e8578063c0c53b8b146106fe578063d2b8035a1461071e578063da3beb8c1461073e578063e349ad30146105d057600080fd5b80638f06f112116100fd5780638f06f11214610626578063a7cc08fe14610646578063b34bfaa814610692578063b6ede540146106a8578063ba66fde7146106c857600080fd5b80636d4cd8ea14610590578063751accd0146105b0578063796490f9146105d05780637c04034e146105e65780638e4264601461060657600080fd5b80634b2f0ea0116101c75780635a155ccd1161018b5780635a155ccd146104955780635c92e2f6146104d657806365540b96146104f6578063675926f61461052357806369f3f0411461054357600080fd5b80634b2f0ea0146103ec5780634f1ef286146103ff57806352d1902d1461041257806354fd4d5014610427578063564a565d1461046657600080fd5b80631c3db16d1161020e5780631c3db16d146103355780631cc3423a146103725780632621b9a2146103925780632d68efc9146103ac578063362c3479146103cc57600080fd5b80630855bbe91461024b57806309cc41b8146102805780630baa64d1146102a25780630c340a24146102c25780631200aabc146102fa575b600080fd5b34801561025757600080fd5b5061026b610266366004613a09565b610843565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004613aae565b61090b565b005b3480156102ae57600080fd5b5061026b6102bd366004613a09565b6109c9565b3480156102ce57600080fd5b506000546102e2906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b34801561030657600080fd5b50610327610315366004613a09565b60036020526000908152604090205481565b604051908152602001610277565b34801561034157600080fd5b50610355610350366004613a09565b610a40565b604080519384529115156020840152151590820152606001610277565b34801561037e57600080fd5b5061032761038d366004613be8565b610bae565b34801561039e57600080fd5b5060045461026b9060ff1681565b3480156103b857600080fd5b506007546102e2906001600160a01b031681565b3480156103d857600080fd5b506103276103e7366004613c4c565b610bee565b6102a06103fa366004613c89565b61109e565b6102a061040d366004613cab565b61192e565b34801561041e57600080fd5b50610327611b56565b34801561043357600080fd5b50610459604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102779190613d4a565b34801561047257600080fd5b50610486610481366004613a09565b611bb4565b60405161027793929190613d5d565b3480156104a157600080fd5b5061026b6104b0366004613d7e565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104e257600080fd5b506102a06104f1366004613db7565b611c7a565b34801561050257600080fd5b50610516610511366004613a09565b611c86565b6040516102779190613e09565b34801561052f57600080fd5b5061032761053e366004613e4c565b611d4a565b34801561054f57600080fd5b5061056361055e366004613e87565b611e8d565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610277565b34801561059c57600080fd5b5061026b6105ab366004613a09565b611f45565b3480156105bc57600080fd5b506102a06105cb366004613eb3565b6120c8565b3480156105dc57600080fd5b5061032761271081565b3480156105f257600080fd5b506102a0610601366004613ef5565b612194565b34801561061257600080fd5b506102a0610621366004613f7d565b6121ab565b34801561063257600080fd5b506102a0610641366004613ef5565b6121f7565b34801561065257600080fd5b50610666610661366004613e87565b6122bd565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610277565b34801561069e57600080fd5b50610327614e2081565b3480156106b457600080fd5b506102a06106c3366004613f9a565b612383565b3480156106d457600080fd5b5061026b6106e3366004613e87565b612576565b3480156106f457600080fd5b5061032761138881565b34801561070a57600080fd5b506102a0610719366004613ff4565b612611565b34801561072a57600080fd5b506102e2610739366004613c89565b6126db565b34801561074a57600080fd5b50610327610759366004613c89565b612a2a565b34801561076a57600080fd5b506102a0610779366004613f7d565b612b7d565b34801561078a57600080fd5b506001546102e2906001600160a01b031681565b3480156107aa57600080fd5b506107be6107b9366004613c89565b612bc9565b60408051928352602083019190915201610277565b3480156107df57600080fd5b506102a06107ee366004613f7d565b612c1b565b3480156107ff57600080fd5b5061026b61080e366004613a09565b60066020526000908152604090205460ff1681565b34801561082f57600080fd5b5061032761083e366004613a09565b612ced565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa158015610890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b49190614034565b9150915060006108c385611c86565b90508051600014801561090257506127106113886108e1858561406e565b6108eb9190614081565b6108f59190614098565b6108ff844261406e565b10155b95945050505050565b60008781526003602052604090205460028054899290811061092f5761092f6140ba565b600091825260209091206002600590920201015460ff161561096c5760405162461bcd60e51b8152600401610963906140d0565b60405180910390fd5b61097888888888612d19565b84336001600160a01b0316897fbc1efa6396a4ba1a755245703b38c48fbe744ab5117d9f09f47d26ffc1df999e8787876040516109b793929190614130565b60405180910390a45050505050505050565b6000818152600360205260408120546002805483929081106109ed576109ed6140ba565b60009182526020822060059091020180549092508290610a0f9060019061406e565b81548110610a1f57610a1f6140ba565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610a6c57610a6c6140ba565b60009182526020822060059091020180549092508290610a8e9060019061406e565b81548110610a9e57610a9e6140ba565b60009182526020909120600c90910201600381015460ff169450905083610ac9578060010154610acc565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f9190614176565b5090935060049250610b4f915050565b816004811115610b6157610b616141df565b03610ba4576000610b7188611c86565b90508051600103610ba25780600081518110610b8f57610b8f6140ba565b6020026020010151965060009550600194505b505b5050509193909250565b80516020808301919091206040805180840187905280820186905260608082019390935281518082039093018352608001905280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c609190614176565b50935050505080610cb35760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e00000000006044820152606401610963565b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a91906141f5565b15610d685760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610963565b60008681526006602052604090205460ff16610d965760405162461bcd60e51b815260040161096390614210565b600086815260036020526040812054600280549091908110610dba57610dba6140ba565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610dee57610dee6140ba565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d9190614247565b5050600087815260078401602052604090205490915060ff16610eb7576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ffc565b808603610f2c576000868152600683016020526040902054610eda576000610f25565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610f1b9190614081565b610f259190614098565b9450610ffc565b600081815260078301602052604090205460ff16610ffc5781600601600083600a01600181548110610f6057610f606140ba565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610f9657610f966140ba565b9060005260206000200154815260200190815260200160002054610fba9190614283565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610fef9190614081565b610ff99190614098565b94505b6001600160a01b03881660009081526008830160209081526040808320898452909152812055841561109257600754611043906001600160a01b038a81169188911661307c565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051611089929190918252602082015260400190565b60405180910390a45b50505050949350505050565b6000828152600360205260409020546002805484929081106110c2576110c26140ba565b600091825260209091206002600590920201015460ff16156110f65760405162461bcd60e51b8152600401610963906140d0565b60008381526003602052604081205460028054909190811061111a5761111a6140ba565b90600052602060002090600502019050806001015483111561117e5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610963565b60008481526006602052604090205460ff166111ac5760405162461bcd60e51b815260040161096390614210565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156111f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121d9190614034565b9150915081421015801561123057508042105b6112755760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610963565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190614247565b505090508681036112ef576127109150611370565b6127106113886112ff868661406e565b6113099190614081565b6113139190614098565b61131d854261406e565b1061136a5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610963565b614e2091505b845460009086906113839060019061406e565b81548110611393576113936140ba565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114169190614296565b611420919061406e565b60008a815260078401602052604090205490915060ff16156114845760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610963565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f29190614296565b905060006127106115038784614081565b61150d9190614098565b6115179083614283565b60008c8152600686016020526040812054919250908211156115c85760008c81526006860160205260409020543490611550908461406e565b116115755760008c8152600686016020526040902054611570908361406e565b611577565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516115bf929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906115f4908490614283565b909155505060008c815260068601602052604081208054839290611619908490614283565b909155505060008c815260068601602052604090205482116116eb5760008c81526006860160205260408120546009870180549192909161165b908490614283565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156118f657828560090154611708919061406e565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177a91906141f5565b156117935760028a01805460ff19166001179055611876565b895460038b0160006117a6876001614283565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161182191815260200190565b602060405180830381865afa15801561183e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118629190614296565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016118c3939291906142e9565b6000604051808303818588803b1580156118dc57600080fd5b505af11580156118f0573d6000803e3d6000fd5b50505050505b8034111561191f5761191f61190b823461406e565b6007543391906001600160a01b031661307c565b50505050505050505050505050565b61193782613167565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119b557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119a96000805160206146428339815191525490565b6001600160a01b031614155b156119d35760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a2d575060408051601f3d908101601f19168201909252611a2a91810190614296565b60015b611a5557604051630c76093760e01b81526001600160a01b0383166004820152602401610963565b6000805160206146428339815191528114611a8657604051632a87526960e21b815260048101829052602401610963565b6000805160206146428339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611b51576000836001600160a01b031683604051611aed9190614383565b600060405180830381855af49150503d8060008114611b28576040519150601f19603f3d011682016040523d82523d6000602084013e611b2d565b606091505b5050905080611b4f576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ba15760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061464283398151915290565b60028181548110611bc457600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611bf7906142af565b80601f0160208091040260200160405190810160405280929190818152602001828054611c23906142af565b8015611c705780601f10611c4557610100808354040283529160200191611c70565b820191906000526020600020905b815481529060010190602001808311611c5357829003601f168201915b5050505050905083565b611b4f84848484612d19565b6000818152600360205260408120546002805460609392908110611cac57611cac6140ba565b60009182526020822060059091020180549092508290611cce9060019061406e565b81548110611cde57611cde6140ba565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611d3c57602002820191906000526020600020905b815481526020019060010190808311611d28575b505050505092505050919050565b600085815260036020526040812054600280548392908110611d6e57611d6e6140ba565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611da257611da26140ba565b90600052602060002090600c02016000018681548110611dc457611dc46140ba565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e469190614247565b506003850154919350915060ff168015611e6a57508183600201541480611e6a5750805b15611e7d57612710945050505050610902565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611ebe57611ebe6140ba565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611ef257611ef26140ba565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611f6957611f696140ba565b60009182526020822060059091020180549092508290611f8b9060019061406e565b81548110611f9b57611f9b6140ba565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201a9190614176565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612099919061439f565b50505050509150506000816120af5783546120b5565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b031633146120f25760405162461bcd60e51b81526004016109639061440b565b6000836001600160a01b0316838360405161210d9190614383565b60006040518083038185875af1925050503d806000811461214a576040519150601f19603f3d011682016040523d82523d6000602084013e61214f565b606091505b5050905080611b4f5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610963565b6121a386868686868633613194565b505050505050565b6000546001600160a01b031633146121d55760405162461bcd60e51b81526004016109639061440b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008681526003602052604081205460028054909190811061221b5761221b6140ba565b6000918252602082206005909102018054909250829061223d9060019061406e565b8154811061224d5761224d6140ba565b90600052602060002090600c020160000187876000818110612271576122716140ba565b9050602002013581548110612288576122886140ba565b60009182526020909120600490910201546001600160a01b031690506122b388888888888887613194565b5050505050505050565b60008060008060006002600360008a815260200190815260200160002054815481106122eb576122eb6140ba565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061231f5761231f6140ba565b90600052602060002090600c02016000018781548110612341576123416140ba565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146123ad5760405162461bcd60e51b81526004016109639061444d565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2016124388587836144df565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa15801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf9190614296565b6124c9919061406e565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab5810890612564908a908a908a90614130565b60405180910390a25050505050505050565b60008381526003602052604081205460028054839290811061259a5761259a6140ba565b600091825260208083208784526003600590930201918201905260408220548154919350839181106125ce576125ce6140ba565b90600052602060002090600c020160000184815481106125f0576125f06140ba565b600091825260209091206004909102016003015460ff169695505050505050565b6001600061261d6138c5565b8054909150600160401b900460ff1680612644575080546001600160401b03808416911610155b156126615760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561268d8585856138e9565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146127085760405162461bcd60e51b81526004016109639061444d565b60008381526003602052604090205460028054859290811061272c5761272c6140ba565b600091825260209091206002600590920201015460ff16156127605760405162461bcd60e51b8152600401610963906140d0565b6000848152600360205260408120546002805491929183908110612786576127866140ba565b60009182526020822060059091020180549092506127a69060019061406e565b905060008260000182815481106127bf576127bf6140ba565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612824573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612848919061459e565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bb9190614176565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561291f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612943919061459e565b98506001600160a01b03891661295f5750505050505050612a23565b61296a848c8b613930565b15612a1657604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612a1b565b600098505b505050505050505b5092915050565b600082815260036020526040812054600280548392908110612a4e57612a4e6140ba565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612a8257612a826140ba565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b059190614247565b5091509150826004015460001480612b34575080158015612b3457506000828152600284016020526040902054155b15612b46576000945050505050612b77565b8015612b5b575050600401549150612b779050565b506000908152600290910160205260409020549150612b779050565b92915050565b6000546001600160a01b03163314612ba75760405162461bcd60e51b81526004016109639061440b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546002805491929183908110612bef57612bef6140ba565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612c276138c5565b8054909150600160401b900460ff1680612c4e575080546001600160401b03808416911610155b15612c6b5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612d0257612d026140ba565b600091825260209091206005909102015492915050565b600084815260036020526040902054600280548692908110612d3d57612d3d6140ba565b600091825260209091206002600590920201015460ff1615612d715760405162461bcd60e51b8152600401610963906140d0565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddf9190614176565b5090935060019250612def915050565b816004811115612e0157612e016141df565b14612e5e5760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610963565b82612e9b5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610963565b60008681526006602052604090205460ff16612ec95760405162461bcd60e51b815260040161096390614210565b600086815260036020526040812054600280549091908110612eed57612eed6140ba565b60009182526020822060059091020180549092508290612f0f9060019061406e565b81548110612f1f57612f1f6140ba565b90600052602060002090600c0201905060005b86811015613015573382898984818110612f4e57612f4e6140ba565b9050602002013581548110612f6557612f656140ba565b60009182526020909120600490910201546001600160a01b031614612fcc5760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610963565b8582898984818110612fe057612fe06140ba565b9050602002013581548110612ff757612ff76140ba565b60009182526020909120600160049092020181019190915501612f32565b508686905081600501600082825461302d9190614283565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f089061306a908b908b908b906145ed565b60405180910390a35050505050505050565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050156130ab57505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130e657600080fd5b505af11580156130fa573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b15801561314a57600080fd5b505af115801561315e573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146131915760405162461bcd60e51b81526004016109639061440b565b50565b6000878152600360205260409020546002805489929081106131b8576131b86140ba565b600091825260209091206002600590920201015460ff16156131ec5760405162461bcd60e51b8152600401610963906140d0565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325a9190614176565b509093506002925061326a915050565b81600481111561327c5761327c6141df565b146132d75760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610963565b866133195760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610963565b60008981526006602052604090205460ff166133475760405162461bcd60e51b815260040161096390614210565b60008981526003602052604081205460028054909190811061336b5761336b6140ba565b9060005260206000209060050201905080600101548711156133c65760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610963565b805460009082906133d99060019061406e565b815481106133e9576133e96140ba565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d9061342e908f9060040190815260200190565b60a060405180830381865afa15801561344b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346f9190614176565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156134ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ee919061439f565b505050505091505060006135038b8b8b610bae565b905060005b8c81101561378a576001600160a01b038916858f8f8481811061352d5761352d6140ba565b9050602002013581548110613544576135446140ba565b60009182526020909120600490910201546001600160a01b0316146135ab5760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610963565b8215806135f2575081858f8f848181106135c7576135c76140ba565b90506020020135815481106135de576135de6140ba565b906000526020600020906004020160010154145b6136725760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610963565b848e8e83818110613685576136856140ba565b905060200201358154811061369c5761369c6140ba565b600091825260209091206003600490920201015460ff16156136f55760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610963565b8b858f8f84818110613709576137096140ba565b9050602002013581548110613720576137206140ba565b60009182526020909120600260049092020101556001858f8f84818110613749576137496140ba565b9050602002013581548110613760576137606140ba565b60009182526020909120600490910201600301805460ff1916911515919091179055600101613508565b5050506004820180548b92506000906137a4908490614283565b90915550506000888152600282016020526040812080548b92906137c9908490614283565b9091555050600181015488036137f857600381015460ff16156137f35760038101805460ff191690555b613871565b60018101546000908152600282016020526040808220548a83529120540361383a57600381015460ff166137f35760038101805460ff19166001179055613871565b60018101546000908152600282016020526040808220548a83529120541115613871576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b6040516138b093929190614611565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6138f16139c8565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60045460009060ff16156139be576000838152600360205260408120546002805491929183908110613964576139646140ba565b60009182526020822060059091020180549092506139849060019061406e565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610be7915050565b5060019392505050565b6139d06139ef565b6139ed57604051631afcd79f60e31b815260040160405180910390fd5b565b60006139f96138c5565b54600160401b900460ff16919050565b600060208284031215613a1b57600080fd5b5035919050565b60008083601f840112613a3457600080fd5b5081356001600160401b03811115613a4b57600080fd5b6020830191508360208260051b8501011115613a6657600080fd5b9250929050565b60008083601f840112613a7f57600080fd5b5081356001600160401b03811115613a9657600080fd5b602083019150836020828501011115613a6657600080fd5b600080600080600080600060a0888a031215613ac957600080fd5b8735965060208801356001600160401b03811115613ae657600080fd5b613af28a828b01613a22565b909750955050604088013593506060880135925060808801356001600160401b03811115613b1f57600080fd5b613b2b8a828b01613a6d565b989b979a50959850939692959293505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613b6557600080fd5b8135602083016000806001600160401b03841115613b8557613b85613b3e565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613bb357613bb3613b3e565b604052838152905080828401871015613bcb57600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613bfd57600080fd5b833592506020840135915060408401356001600160401b03811115613c2157600080fd5b613c2d86828701613b54565b9150509250925092565b6001600160a01b038116811461319157600080fd5b60008060008060808587031215613c6257600080fd5b843593506020850135613c7481613c37565b93969395505050506040820135916060013590565b60008060408385031215613c9c57600080fd5b50508035926020909101359150565b60008060408385031215613cbe57600080fd5b8235613cc981613c37565b915060208301356001600160401b03811115613ce457600080fd5b613cf085828601613b54565b9150509250929050565b60005b83811015613d15578181015183820152602001613cfd565b50506000910152565b60008151808452613d36816020860160208601613cfa565b601f01601f19169290920160200192915050565b602081526000610be76020830184613d1e565b83815282151560208201526060604082015260006109026060830184613d1e565b600080600060608486031215613d9357600080fd5b83359250602084013591506040840135613dac81613c37565b809150509250925092565b60008060008060608587031215613dcd57600080fd5b8435935060208501356001600160401b03811115613dea57600080fd5b613df687828801613a22565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613e41578351835260209384019390920191600101613e23565b509095945050505050565b600080600080600060a08688031215613e6457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613e9c57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613ec857600080fd5b8335613ed381613c37565b92506020840135915060408401356001600160401b03811115613c2157600080fd5b60008060008060008060a08789031215613f0e57600080fd5b8635955060208701356001600160401b03811115613f2b57600080fd5b613f3789828a01613a22565b909650945050604087013592506060870135915060808701356001600160401b03811115613f6457600080fd5b613f7089828a01613b54565b9150509295509295509295565b600060208284031215613f8f57600080fd5b8135610be781613c37565b600080600080600060808688031215613fb257600080fd5b853594506020860135935060408601356001600160401b03811115613fd657600080fd5b613fe288828901613a6d565b96999598509660600135949350505050565b60008060006060848603121561400957600080fd5b833561401481613c37565b9250602084013561402481613c37565b91506040840135613dac81613c37565b6000806040838503121561404757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115612b7757612b77614058565b8082028115828204841417612b7757612b77614058565b6000826140b557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b838152604060208201526000610902604083018486614107565b80516001600160601b038116811461416157600080fd5b919050565b8051801515811461416157600080fd5b600080600080600060a0868803121561418e57600080fd5b6141978661414a565b945060208601516141a781613c37565b6040870151909450600581106141bc57600080fd5b92506141ca60608701614166565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561420757600080fd5b610be782614166565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b60008060006060848603121561425c57600080fd5b8351925061426c60208501614166565b915061427a60408501614166565b90509250925092565b80820180821115612b7757612b77614058565b6000602082840312156142a857600080fd5b5051919050565b600181811c908216806142c357607f821691505b6020821081036142e357634e487b7160e01b600052602260045260246000fd5b50919050565b838152826020820152606060408201526000808354614307816142af565b8060608601526001821660008114614326576001811461434257614376565b60ff1983166080870152608082151560051b8701019350614376565b86600052602060002060005b8381101561436d5781548882016080015260019091019060200161434e565b87016080019450505b5091979650505050505050565b60008251614395818460208701613cfa565b9190910192915050565b600080600080600080600060e0888a0312156143ba57600080fd5b6143c38861414a565b96506143d160208901614166565b604089015160608a015160808b015160a08c01519399509197509550935091506143fd60c08901614166565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611b5157806000526020600020601f840160051c810160208510156144b85750805b601f840160051c820191505b818110156144d857600081556001016144c4565b5050505050565b6001600160401b038311156144f6576144f6613b3e565b61450a8361450483546142af565b83614491565b6000601f84116001811461453e57600085156145265750838201355b600019600387901b1c1916600186901b1783556144d8565b600083815260209020601f19861690835b8281101561456f578685013582556020948501946001909201910161454f565b508682101561458c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156145b057600080fd5b8151610be781613c37565b81835260006001600160fb1b038311156145d457600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006146016040830185876145bb565b9050826020830152949350505050565b6040815260006146256040830185876145bb565b82810360208401526146378185613d1e565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212204611969b7846b8f8df4dbeb55dc71bd009ee535c528de4a12223b6d97dbc9de164736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102465760003560e01c80636d4cd8ea11610139578063be467604116100b6578063e4c0aaf41161007a578063e4c0aaf41461075e578063f2f4eb261461077e578063f32ab9271461079e578063f7e7d1fd146107d3578063f8abee10146107f3578063fc6f8f161461082357600080fd5b8063be467604146106e8578063c0c53b8b146106fe578063d2b8035a1461071e578063da3beb8c1461073e578063e349ad30146105d057600080fd5b80638f06f112116100fd5780638f06f11214610626578063a7cc08fe14610646578063b34bfaa814610692578063b6ede540146106a8578063ba66fde7146106c857600080fd5b80636d4cd8ea14610590578063751accd0146105b0578063796490f9146105d05780637c04034e146105e65780638e4264601461060657600080fd5b80634b2f0ea0116101c75780635a155ccd1161018b5780635a155ccd146104955780635c92e2f6146104d657806365540b96146104f6578063675926f61461052357806369f3f0411461054357600080fd5b80634b2f0ea0146103ec5780634f1ef286146103ff57806352d1902d1461041257806354fd4d5014610427578063564a565d1461046657600080fd5b80631c3db16d1161020e5780631c3db16d146103355780631cc3423a146103725780632621b9a2146103925780632d68efc9146103ac578063362c3479146103cc57600080fd5b80630855bbe91461024b57806309cc41b8146102805780630baa64d1146102a25780630c340a24146102c25780631200aabc146102fa575b600080fd5b34801561025757600080fd5b5061026b610266366004613a09565b610843565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004613aae565b61090b565b005b3480156102ae57600080fd5b5061026b6102bd366004613a09565b6109c9565b3480156102ce57600080fd5b506000546102e2906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b34801561030657600080fd5b50610327610315366004613a09565b60036020526000908152604090205481565b604051908152602001610277565b34801561034157600080fd5b50610355610350366004613a09565b610a40565b604080519384529115156020840152151590820152606001610277565b34801561037e57600080fd5b5061032761038d366004613be8565b610bae565b34801561039e57600080fd5b5060045461026b9060ff1681565b3480156103b857600080fd5b506007546102e2906001600160a01b031681565b3480156103d857600080fd5b506103276103e7366004613c4c565b610bee565b6102a06103fa366004613c89565b61109e565b6102a061040d366004613cab565b61192e565b34801561041e57600080fd5b50610327611b56565b34801561043357600080fd5b50610459604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102779190613d4a565b34801561047257600080fd5b50610486610481366004613a09565b611bb4565b60405161027793929190613d5d565b3480156104a157600080fd5b5061026b6104b0366004613d7e565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104e257600080fd5b506102a06104f1366004613db7565b611c7a565b34801561050257600080fd5b50610516610511366004613a09565b611c86565b6040516102779190613e09565b34801561052f57600080fd5b5061032761053e366004613e4c565b611d4a565b34801561054f57600080fd5b5061056361055e366004613e87565b611e8d565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610277565b34801561059c57600080fd5b5061026b6105ab366004613a09565b611f45565b3480156105bc57600080fd5b506102a06105cb366004613eb3565b6120c8565b3480156105dc57600080fd5b5061032761271081565b3480156105f257600080fd5b506102a0610601366004613ef5565b612194565b34801561061257600080fd5b506102a0610621366004613f7d565b6121ab565b34801561063257600080fd5b506102a0610641366004613ef5565b6121f7565b34801561065257600080fd5b50610666610661366004613e87565b6122bd565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610277565b34801561069e57600080fd5b50610327614e2081565b3480156106b457600080fd5b506102a06106c3366004613f9a565b612383565b3480156106d457600080fd5b5061026b6106e3366004613e87565b612576565b3480156106f457600080fd5b5061032761138881565b34801561070a57600080fd5b506102a0610719366004613ff4565b612611565b34801561072a57600080fd5b506102e2610739366004613c89565b6126db565b34801561074a57600080fd5b50610327610759366004613c89565b612a2a565b34801561076a57600080fd5b506102a0610779366004613f7d565b612b7d565b34801561078a57600080fd5b506001546102e2906001600160a01b031681565b3480156107aa57600080fd5b506107be6107b9366004613c89565b612bc9565b60408051928352602083019190915201610277565b3480156107df57600080fd5b506102a06107ee366004613f7d565b612c1b565b3480156107ff57600080fd5b5061026b61080e366004613a09565b60066020526000908152604090205460ff1681565b34801561082f57600080fd5b5061032761083e366004613a09565b612ced565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa158015610890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b49190614034565b9150915060006108c385611c86565b90508051600014801561090257506127106113886108e1858561406e565b6108eb9190614081565b6108f59190614098565b6108ff844261406e565b10155b95945050505050565b60008781526003602052604090205460028054899290811061092f5761092f6140ba565b600091825260209091206002600590920201015460ff161561096c5760405162461bcd60e51b8152600401610963906140d0565b60405180910390fd5b61097888888888612d19565b84336001600160a01b0316897fbc1efa6396a4ba1a755245703b38c48fbe744ab5117d9f09f47d26ffc1df999e8787876040516109b793929190614130565b60405180910390a45050505050505050565b6000818152600360205260408120546002805483929081106109ed576109ed6140ba565b60009182526020822060059091020180549092508290610a0f9060019061406e565b81548110610a1f57610a1f6140ba565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610a6c57610a6c6140ba565b60009182526020822060059091020180549092508290610a8e9060019061406e565b81548110610a9e57610a9e6140ba565b60009182526020909120600c90910201600381015460ff169450905083610ac9578060010154610acc565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f9190614176565b5090935060049250610b4f915050565b816004811115610b6157610b616141df565b03610ba4576000610b7188611c86565b90508051600103610ba25780600081518110610b8f57610b8f6140ba565b6020026020010151965060009550600194505b505b5050509193909250565b80516020808301919091206040805180840187905280820186905260608082019390935281518082039093018352608001905280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c609190614176565b50935050505080610cb35760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e00000000006044820152606401610963565b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a91906141f5565b15610d685760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610963565b60008681526006602052604090205460ff16610d965760405162461bcd60e51b815260040161096390614210565b600086815260036020526040812054600280549091908110610dba57610dba6140ba565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610dee57610dee6140ba565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d9190614247565b5050600087815260078401602052604090205490915060ff16610eb7576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ffc565b808603610f2c576000868152600683016020526040902054610eda576000610f25565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610f1b9190614081565b610f259190614098565b9450610ffc565b600081815260078301602052604090205460ff16610ffc5781600601600083600a01600181548110610f6057610f606140ba565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610f9657610f966140ba565b9060005260206000200154815260200190815260200160002054610fba9190614283565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610fef9190614081565b610ff99190614098565b94505b6001600160a01b03881660009081526008830160209081526040808320898452909152812055841561109257600754611043906001600160a01b038a81169188911661307c565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051611089929190918252602082015260400190565b60405180910390a45b50505050949350505050565b6000828152600360205260409020546002805484929081106110c2576110c26140ba565b600091825260209091206002600590920201015460ff16156110f65760405162461bcd60e51b8152600401610963906140d0565b60008381526003602052604081205460028054909190811061111a5761111a6140ba565b90600052602060002090600502019050806001015483111561117e5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610963565b60008481526006602052604090205460ff166111ac5760405162461bcd60e51b815260040161096390614210565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156111f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121d9190614034565b9150915081421015801561123057508042105b6112755760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610963565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190614247565b505090508681036112ef576127109150611370565b6127106113886112ff868661406e565b6113099190614081565b6113139190614098565b61131d854261406e565b1061136a5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610963565b614e2091505b845460009086906113839060019061406e565b81548110611393576113936140ba565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114169190614296565b611420919061406e565b60008a815260078401602052604090205490915060ff16156114845760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610963565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f29190614296565b905060006127106115038784614081565b61150d9190614098565b6115179083614283565b60008c8152600686016020526040812054919250908211156115c85760008c81526006860160205260409020543490611550908461406e565b116115755760008c8152600686016020526040902054611570908361406e565b611577565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516115bf929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906115f4908490614283565b909155505060008c815260068601602052604081208054839290611619908490614283565b909155505060008c815260068601602052604090205482116116eb5760008c81526006860160205260408120546009870180549192909161165b908490614283565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156118f657828560090154611708919061406e565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177a91906141f5565b156117935760028a01805460ff19166001179055611876565b895460038b0160006117a6876001614283565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161182191815260200190565b602060405180830381865afa15801561183e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118629190614296565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016118c3939291906142e9565b6000604051808303818588803b1580156118dc57600080fd5b505af11580156118f0573d6000803e3d6000fd5b50505050505b8034111561191f5761191f61190b823461406e565b6007543391906001600160a01b031661307c565b50505050505050505050505050565b61193782613167565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119b557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119a96000805160206146428339815191525490565b6001600160a01b031614155b156119d35760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a2d575060408051601f3d908101601f19168201909252611a2a91810190614296565b60015b611a5557604051630c76093760e01b81526001600160a01b0383166004820152602401610963565b6000805160206146428339815191528114611a8657604051632a87526960e21b815260048101829052602401610963565b6000805160206146428339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611b51576000836001600160a01b031683604051611aed9190614383565b600060405180830381855af49150503d8060008114611b28576040519150601f19603f3d011682016040523d82523d6000602084013e611b2d565b606091505b5050905080611b4f576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ba15760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061464283398151915290565b60028181548110611bc457600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611bf7906142af565b80601f0160208091040260200160405190810160405280929190818152602001828054611c23906142af565b8015611c705780601f10611c4557610100808354040283529160200191611c70565b820191906000526020600020905b815481529060010190602001808311611c5357829003601f168201915b5050505050905083565b611b4f84848484612d19565b6000818152600360205260408120546002805460609392908110611cac57611cac6140ba565b60009182526020822060059091020180549092508290611cce9060019061406e565b81548110611cde57611cde6140ba565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611d3c57602002820191906000526020600020905b815481526020019060010190808311611d28575b505050505092505050919050565b600085815260036020526040812054600280548392908110611d6e57611d6e6140ba565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611da257611da26140ba565b90600052602060002090600c02016000018681548110611dc457611dc46140ba565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e469190614247565b506003850154919350915060ff168015611e6a57508183600201541480611e6a5750805b15611e7d57612710945050505050610902565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611ebe57611ebe6140ba565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611ef257611ef26140ba565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611f6957611f696140ba565b60009182526020822060059091020180549092508290611f8b9060019061406e565b81548110611f9b57611f9b6140ba565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201a9190614176565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612099919061439f565b50505050509150506000816120af5783546120b5565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b031633146120f25760405162461bcd60e51b81526004016109639061440b565b6000836001600160a01b0316838360405161210d9190614383565b60006040518083038185875af1925050503d806000811461214a576040519150601f19603f3d011682016040523d82523d6000602084013e61214f565b606091505b5050905080611b4f5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610963565b6121a386868686868633613194565b505050505050565b6000546001600160a01b031633146121d55760405162461bcd60e51b81526004016109639061440b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008681526003602052604081205460028054909190811061221b5761221b6140ba565b6000918252602082206005909102018054909250829061223d9060019061406e565b8154811061224d5761224d6140ba565b90600052602060002090600c020160000187876000818110612271576122716140ba565b9050602002013581548110612288576122886140ba565b60009182526020909120600490910201546001600160a01b031690506122b388888888888887613194565b5050505050505050565b60008060008060006002600360008a815260200190815260200160002054815481106122eb576122eb6140ba565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061231f5761231f6140ba565b90600052602060002090600c02016000018781548110612341576123416140ba565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146123ad5760405162461bcd60e51b81526004016109639061444d565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2016124388587836144df565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa15801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf9190614296565b6124c9919061406e565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab5810890612564908a908a908a90614130565b60405180910390a25050505050505050565b60008381526003602052604081205460028054839290811061259a5761259a6140ba565b600091825260208083208784526003600590930201918201905260408220548154919350839181106125ce576125ce6140ba565b90600052602060002090600c020160000184815481106125f0576125f06140ba565b600091825260209091206004909102016003015460ff169695505050505050565b6001600061261d6138c5565b8054909150600160401b900460ff1680612644575080546001600160401b03808416911610155b156126615760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561268d8585856138e9565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146127085760405162461bcd60e51b81526004016109639061444d565b60008381526003602052604090205460028054859290811061272c5761272c6140ba565b600091825260209091206002600590920201015460ff16156127605760405162461bcd60e51b8152600401610963906140d0565b6000848152600360205260408120546002805491929183908110612786576127866140ba565b60009182526020822060059091020180549092506127a69060019061406e565b905060008260000182815481106127bf576127bf6140ba565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612824573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612848919061459e565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bb9190614176565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561291f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612943919061459e565b98506001600160a01b03891661295f5750505050505050612a23565b61296a848c8b613930565b15612a1657604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612a1b565b600098505b505050505050505b5092915050565b600082815260036020526040812054600280548392908110612a4e57612a4e6140ba565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612a8257612a826140ba565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b059190614247565b5091509150826004015460001480612b34575080158015612b3457506000828152600284016020526040902054155b15612b46576000945050505050612b77565b8015612b5b575050600401549150612b779050565b506000908152600290910160205260409020549150612b779050565b92915050565b6000546001600160a01b03163314612ba75760405162461bcd60e51b81526004016109639061440b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546002805491929183908110612bef57612bef6140ba565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612c276138c5565b8054909150600160401b900460ff1680612c4e575080546001600160401b03808416911610155b15612c6b5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612d0257612d026140ba565b600091825260209091206005909102015492915050565b600084815260036020526040902054600280548692908110612d3d57612d3d6140ba565b600091825260209091206002600590920201015460ff1615612d715760405162461bcd60e51b8152600401610963906140d0565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddf9190614176565b5090935060019250612def915050565b816004811115612e0157612e016141df565b14612e5e5760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610963565b82612e9b5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610963565b60008681526006602052604090205460ff16612ec95760405162461bcd60e51b815260040161096390614210565b600086815260036020526040812054600280549091908110612eed57612eed6140ba565b60009182526020822060059091020180549092508290612f0f9060019061406e565b81548110612f1f57612f1f6140ba565b90600052602060002090600c0201905060005b86811015613015573382898984818110612f4e57612f4e6140ba565b9050602002013581548110612f6557612f656140ba565b60009182526020909120600490910201546001600160a01b031614612fcc5760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610963565b8582898984818110612fe057612fe06140ba565b9050602002013581548110612ff757612ff76140ba565b60009182526020909120600160049092020181019190915501612f32565b508686905081600501600082825461302d9190614283565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f089061306a908b908b908b906145ed565b60405180910390a35050505050505050565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050156130ab57505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130e657600080fd5b505af11580156130fa573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b15801561314a57600080fd5b505af115801561315e573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146131915760405162461bcd60e51b81526004016109639061440b565b50565b6000878152600360205260409020546002805489929081106131b8576131b86140ba565b600091825260209091206002600590920201015460ff16156131ec5760405162461bcd60e51b8152600401610963906140d0565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325a9190614176565b509093506002925061326a915050565b81600481111561327c5761327c6141df565b146132d75760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610963565b866133195760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610963565b60008981526006602052604090205460ff166133475760405162461bcd60e51b815260040161096390614210565b60008981526003602052604081205460028054909190811061336b5761336b6140ba565b9060005260206000209060050201905080600101548711156133c65760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610963565b805460009082906133d99060019061406e565b815481106133e9576133e96140ba565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d9061342e908f9060040190815260200190565b60a060405180830381865afa15801561344b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346f9190614176565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156134ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ee919061439f565b505050505091505060006135038b8b8b610bae565b905060005b8c81101561378a576001600160a01b038916858f8f8481811061352d5761352d6140ba565b9050602002013581548110613544576135446140ba565b60009182526020909120600490910201546001600160a01b0316146135ab5760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610963565b8215806135f2575081858f8f848181106135c7576135c76140ba565b90506020020135815481106135de576135de6140ba565b906000526020600020906004020160010154145b6136725760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610963565b848e8e83818110613685576136856140ba565b905060200201358154811061369c5761369c6140ba565b600091825260209091206003600490920201015460ff16156136f55760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610963565b8b858f8f84818110613709576137096140ba565b9050602002013581548110613720576137206140ba565b60009182526020909120600260049092020101556001858f8f84818110613749576137496140ba565b9050602002013581548110613760576137606140ba565b60009182526020909120600490910201600301805460ff1916911515919091179055600101613508565b5050506004820180548b92506000906137a4908490614283565b90915550506000888152600282016020526040812080548b92906137c9908490614283565b9091555050600181015488036137f857600381015460ff16156137f35760038101805460ff191690555b613871565b60018101546000908152600282016020526040808220548a83529120540361383a57600381015460ff166137f35760038101805460ff19166001179055613871565b60018101546000908152600282016020526040808220548a83529120541115613871576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b6040516138b093929190614611565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6138f16139c8565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60045460009060ff16156139be576000838152600360205260408120546002805491929183908110613964576139646140ba565b60009182526020822060059091020180549092506139849060019061406e565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610be7915050565b5060019392505050565b6139d06139ef565b6139ed57604051631afcd79f60e31b815260040160405180910390fd5b565b60006139f96138c5565b54600160401b900460ff16919050565b600060208284031215613a1b57600080fd5b5035919050565b60008083601f840112613a3457600080fd5b5081356001600160401b03811115613a4b57600080fd5b6020830191508360208260051b8501011115613a6657600080fd5b9250929050565b60008083601f840112613a7f57600080fd5b5081356001600160401b03811115613a9657600080fd5b602083019150836020828501011115613a6657600080fd5b600080600080600080600060a0888a031215613ac957600080fd5b8735965060208801356001600160401b03811115613ae657600080fd5b613af28a828b01613a22565b909750955050604088013593506060880135925060808801356001600160401b03811115613b1f57600080fd5b613b2b8a828b01613a6d565b989b979a50959850939692959293505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613b6557600080fd5b8135602083016000806001600160401b03841115613b8557613b85613b3e565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613bb357613bb3613b3e565b604052838152905080828401871015613bcb57600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613bfd57600080fd5b833592506020840135915060408401356001600160401b03811115613c2157600080fd5b613c2d86828701613b54565b9150509250925092565b6001600160a01b038116811461319157600080fd5b60008060008060808587031215613c6257600080fd5b843593506020850135613c7481613c37565b93969395505050506040820135916060013590565b60008060408385031215613c9c57600080fd5b50508035926020909101359150565b60008060408385031215613cbe57600080fd5b8235613cc981613c37565b915060208301356001600160401b03811115613ce457600080fd5b613cf085828601613b54565b9150509250929050565b60005b83811015613d15578181015183820152602001613cfd565b50506000910152565b60008151808452613d36816020860160208601613cfa565b601f01601f19169290920160200192915050565b602081526000610be76020830184613d1e565b83815282151560208201526060604082015260006109026060830184613d1e565b600080600060608486031215613d9357600080fd5b83359250602084013591506040840135613dac81613c37565b809150509250925092565b60008060008060608587031215613dcd57600080fd5b8435935060208501356001600160401b03811115613dea57600080fd5b613df687828801613a22565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613e41578351835260209384019390920191600101613e23565b509095945050505050565b600080600080600060a08688031215613e6457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613e9c57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613ec857600080fd5b8335613ed381613c37565b92506020840135915060408401356001600160401b03811115613c2157600080fd5b60008060008060008060a08789031215613f0e57600080fd5b8635955060208701356001600160401b03811115613f2b57600080fd5b613f3789828a01613a22565b909650945050604087013592506060870135915060808701356001600160401b03811115613f6457600080fd5b613f7089828a01613b54565b9150509295509295509295565b600060208284031215613f8f57600080fd5b8135610be781613c37565b600080600080600060808688031215613fb257600080fd5b853594506020860135935060408601356001600160401b03811115613fd657600080fd5b613fe288828901613a6d565b96999598509660600135949350505050565b60008060006060848603121561400957600080fd5b833561401481613c37565b9250602084013561402481613c37565b91506040840135613dac81613c37565b6000806040838503121561404757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115612b7757612b77614058565b8082028115828204841417612b7757612b77614058565b6000826140b557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b838152604060208201526000610902604083018486614107565b80516001600160601b038116811461416157600080fd5b919050565b8051801515811461416157600080fd5b600080600080600060a0868803121561418e57600080fd5b6141978661414a565b945060208601516141a781613c37565b6040870151909450600581106141bc57600080fd5b92506141ca60608701614166565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561420757600080fd5b610be782614166565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b60008060006060848603121561425c57600080fd5b8351925061426c60208501614166565b915061427a60408501614166565b90509250925092565b80820180821115612b7757612b77614058565b6000602082840312156142a857600080fd5b5051919050565b600181811c908216806142c357607f821691505b6020821081036142e357634e487b7160e01b600052602260045260246000fd5b50919050565b838152826020820152606060408201526000808354614307816142af565b8060608601526001821660008114614326576001811461434257614376565b60ff1983166080870152608082151560051b8701019350614376565b86600052602060002060005b8381101561436d5781548882016080015260019091019060200161434e565b87016080019450505b5091979650505050505050565b60008251614395818460208701613cfa565b9190910192915050565b600080600080600080600060e0888a0312156143ba57600080fd5b6143c38861414a565b96506143d160208901614166565b604089015160608a015160808b015160a08c01519399509197509550935091506143fd60c08901614166565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611b5157806000526020600020601f840160051c810160208510156144b85750805b601f840160051c820191505b818110156144d857600081556001016144c4565b5050505050565b6001600160401b038311156144f6576144f6613b3e565b61450a8361450483546142af565b83614491565b6000601f84116001811461453e57600085156145265750838201355b600019600387901b1c1916600186901b1783556144d8565b600083815260209020601f19861690835b8281101561456f578685013582556020948501946001909201910161454f565b508682101561458c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156145b057600080fd5b8151610be781613c37565b81835260006001600160fb1b038311156145d457600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006146016040830185876145bb565b9050826020830152949350505050565b6040815260006146256040830185876145bb565b82810360208401526146378185613d1e565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212204611969b7846b8f8df4dbeb55dc71bd009ee535c528de4a12223b6d97dbc9de164736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "CommitCastShutter(uint256,address,bytes32,bytes32,bytes)": { - "details": "Emitted when a vote is cast.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_encryptedVote": "The Shutter encrypted vote.", - "_identity": "The Shutter identity used for encryption.", - "_juror": "The address of the juror casting the vote commitment." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castCommitShutter(uint256,uint256[],bytes32,bytes32,bytes)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash including the justification.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_encryptedVote": "The Shutter encrypted vote.", - "_identity": "The Shutter identity used for encryption.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "getLocalDisputeRoundID(uint256,uint256)": { - "details": "Returns the local dispute ID and round ID for a given core dispute ID and core round ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core." - }, - "returns": { - "localDisputeID": "The ID of the dispute in the Dispute Kit.", - "localRoundID": "The ID of the round in the Dispute Kit." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Returns the number of rounds in a dispute.", - "params": { - "_localDisputeID": "The ID of the dispute in the Dispute Kit." - }, - "returns": { - "_0": "The number of rounds in the dispute." - } - }, - "getVoteInfo(uint256,uint256,uint256)": { - "details": "Returns the vote information for a given vote ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The address of the juror who cast the vote.", - "commit": "The commit of the vote." - } - }, - "hashVote(uint256,uint256,string)": { - "details": "Computes the hash of a vote using ABI encoding", - "params": { - "_choice": "The choice being voted for", - "_justification": "The justification for the vote", - "_salt": "A random salt for commitment" - }, - "returns": { - "_0": "bytes32 The hash of the encoded vote parameters" - } - }, - "initialize(address,address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isAppealFunded(uint256)": { - "details": "Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "Whether the appeal funding is finished." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "DisputeKitShutter Added functionality: shielded voting. Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 21704, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 21707, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)11133" - }, - { - "astId": 21711, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)21643_storage)dyn_storage" - }, - { - "astId": 21715, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21717, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "singleDrawPerJuror", - "offset": 0, - "slot": "4", - "type": "t_bool" - }, - { - "astId": 21725, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "alreadyDrawn", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))" - }, - { - "astId": 21729, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "coreDisputeIDToActive", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 21731, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "wNative", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)21643_storage)dyn_storage": { - "base": "t_struct(Dispute)21643_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)21681_storage)dyn_storage": { - "base": "t_struct(Round)21681_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)21690_storage)dyn_storage": { - "base": "t_struct(Vote)21690_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)11133": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(uint256 => mapping(address => bool)))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)21643_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Dispute", - "members": [ - { - "astId": 21632, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)21681_storage)dyn_storage" - }, - { - "astId": 21634, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 21636, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 21640, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21642, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)21681_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Round", - "members": [ - { - "astId": 21647, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)21690_storage)dyn_storage" - }, - { - "astId": 21649, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 21653, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21655, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 21657, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 21659, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 21663, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 21667, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 21673, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 21675, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 21678, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 21680, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)21690_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Vote", - "members": [ - { - "astId": 21683, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 21685, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 21687, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 21689, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrum/DisputeKitShutter_Proxy.json b/contracts/deployments/arbitrum/DisputeKitShutter_Proxy.json deleted file mode 100644 index 5190f773d..000000000 --- a/contracts/deployments/arbitrum/DisputeKitShutter_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x9D3e3f1765744c2a1BC6F6088549770444BBC768", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x7fb022ef5148ef65adf5cc9ec618ab3d0616fb03926747c95480100ff27a449c", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x9D3e3f1765744c2a1BC6F6088549770444BBC768", - "transactionIndex": 15, - "gasUsed": "228435", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x6e1577e8f55bfadd354f05189cb9c1efbdd2ba0fd0ead54646ddfeca11ab7344", - "transactionHash": "0x7fb022ef5148ef65adf5cc9ec618ab3d0616fb03926747c95480100ff27a449c", - "logs": [ - { - "transactionIndex": 15, - "blockNumber": 364034407, - "transactionHash": "0x7fb022ef5148ef65adf5cc9ec618ab3d0616fb03926747c95480100ff27a449c", - "address": "0x9D3e3f1765744c2a1BC6F6088549770444BBC768", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 17, - "blockHash": "0x6e1577e8f55bfadd354f05189cb9c1efbdd2ba0fd0ead54646ddfeca11ab7344" - } - ], - "blockNumber": 364034407, - "cumulativeGasUsed": "2231063", - "status": 1, - "byzantium": true - }, - "args": [ - "0xF3103B46403A0bBd4551648BFb29BCC2b8783947", - "0xc0c53b8b000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000991d2df165670b9cac3b022f4b68d65b664222ea00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1" - ], - "numDeployments": 1, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitShutterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220b9dc2002a96470cf50e49e7a537fe7864644f7b84f7c205df33e04752d2c158364736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220b9dc2002a96470cf50e49e7a537fe7864644f7b84f7c205df33e04752d2c158364736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/DisputeResolver.json b/contracts/deployments/arbitrum/DisputeResolver.json deleted file mode 100644 index 3f2f457ae..000000000 --- a/contracts/deployments/arbitrum/DisputeResolver.json +++ /dev/null @@ -1,522 +0,0 @@ -{ - "address": "0xb5526D022962A1fFf6eD32C93e8b714c901F4323", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateUri", - "type": "string" - } - ], - "name": "DisputeRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "arbitratorDisputeIDToLocalID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - } - ], - "name": "changeArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "name": "changeTemplateRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplate", - "type": "string" - }, - { - "internalType": "string", - "name": "_disputeTemplateDataMappings", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplateUri", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplateUri", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "bytes", - "name": "arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "isRuled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numberOfRulingOptions", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templateRegistry", - "outputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x31858b192f3efb673fbb83a4fc627c7813a0f7c49f426c627ab7477727f925d3", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xb5526D022962A1fFf6eD32C93e8b714c901F4323", - "transactionIndex": 2, - "gasUsed": "1523128", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa074596c02c8018797fdb3db47e7398f7a135f54120d7942bad487b987363cb3", - "transactionHash": "0x31858b192f3efb673fbb83a4fc627c7813a0f7c49f426c627ab7477727f925d3", - "logs": [], - "blockNumber": 272063364, - "cumulativeGasUsed": "1773126", - "status": 1, - "byzantium": true - }, - "args": [ - "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateUri\",\"type\":\"string\"}],\"name\":\"DisputeRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"arbitratorDisputeIDToLocalID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"}],\"name\":\"changeArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplate\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateDataMappings\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateUri\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplateUri\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isRuled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRulingOptions\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DisputeRequest(address,uint256,uint256,uint256,string)\":{\"details\":\"To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\",\"params\":{\"_arbitrator\":\"The arbitrator of the contract.\",\"_arbitratorDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_externalDisputeID\":\"An identifier created outside Kleros by the protocol requesting arbitration.\",\"_templateId\":\"The identifier of the dispute template. Should not be used with _templateUri.\",\"_templateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrator\":\"The arbitrator giving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor.\",\"params\":{\"_governor\":\"The address of the new governor.\"}},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_arbitrator\":\"Target global arbitrator for any disputes.\"}},\"createDisputeForTemplate(bytes,string,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplate\":\"Dispute template.\",\"_disputeTemplateDataMappings\":\"The data mappings.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"createDisputeForTemplateUri(bytes,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"rule(uint256,uint256)\":{\"details\":\"To be called by the arbitrator of the dispute, to declare the winning ruling.\",\"params\":{\"_arbitratorDisputeID\":\"ID of the dispute in arbitrator contract.\",\"_ruling\":\"The ruling choice of the arbitration.\"}}},\"title\":\"DisputeResolver DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/arbitrables/DisputeResolver.sol\":\"DisputeResolver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/arbitration/arbitrables/DisputeResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitrableV2.sol\\\";\\nimport \\\"../interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\npragma solidity 0.8.24;\\n\\n/// @title DisputeResolver\\n/// DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\\ncontract DisputeResolver is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeStruct {\\n bytes arbitratorExtraData; // Extra data for the dispute.\\n bool isRuled; // True if the dispute has been ruled.\\n uint256 ruling; // Ruling given to the dispute.\\n uint256 numberOfRulingOptions; // The number of choices the arbitrator can give.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor.\\n IArbitratorV2 public arbitrator; // The arbitrator.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n DisputeStruct[] public disputes; // Local disputes.\\n mapping(uint256 => uint256) public arbitratorDisputeIDToLocalID; // Maps arbitrator-side dispute IDs to local dispute IDs.\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator Target global arbitrator for any disputes.\\n constructor(IArbitratorV2 _arbitrator, IDisputeTemplateRegistry _templateRegistry) {\\n governor = msg.sender;\\n arbitrator = _arbitrator;\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n governor = _governor;\\n }\\n\\n function changeArbitrator(IArbitratorV2 _arbitrator) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n arbitrator = _arbitrator;\\n }\\n\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplate Dispute template.\\n /// @param _disputeTemplateDataMappings The data mappings.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplate(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return\\n _createDispute(\\n _arbitratorExtraData,\\n _disputeTemplate,\\n _disputeTemplateDataMappings,\\n \\\"\\\",\\n _numberOfRulingOptions\\n );\\n }\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplateUri(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return _createDispute(_arbitratorExtraData, \\\"\\\", \\\"\\\", _disputeTemplateUri, _numberOfRulingOptions);\\n }\\n\\n /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling.\\n /// @param _arbitratorDisputeID ID of the dispute in arbitrator contract.\\n /// @param _ruling The ruling choice of the arbitration.\\n function rule(uint256 _arbitratorDisputeID, uint256 _ruling) external override {\\n uint256 localDisputeID = arbitratorDisputeIDToLocalID[_arbitratorDisputeID];\\n DisputeStruct storage dispute = disputes[localDisputeID];\\n require(msg.sender == address(arbitrator), \\\"Only the arbitrator can execute this.\\\");\\n require(_ruling <= dispute.numberOfRulingOptions, \\\"Invalid ruling.\\\");\\n require(!dispute.isRuled, \\\"This dispute has been ruled already.\\\");\\n\\n dispute.isRuled = true;\\n dispute.ruling = _ruling;\\n\\n emit Ruling(IArbitratorV2(msg.sender), _arbitratorDisputeID, dispute.ruling);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n function _createDispute(\\n bytes calldata _arbitratorExtraData,\\n string memory _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n string memory _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) internal virtual returns (uint256 arbitratorDisputeID) {\\n require(_numberOfRulingOptions > 1, \\\"Should be at least 2 ruling options.\\\");\\n\\n arbitratorDisputeID = arbitrator.createDispute{value: msg.value}(_numberOfRulingOptions, _arbitratorExtraData);\\n uint256 localDisputeID = disputes.length;\\n disputes.push(\\n DisputeStruct({\\n arbitratorExtraData: _arbitratorExtraData,\\n isRuled: false,\\n ruling: 0,\\n numberOfRulingOptions: _numberOfRulingOptions\\n })\\n );\\n arbitratorDisputeIDToLocalID[arbitratorDisputeID] = localDisputeID;\\n uint256 templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _disputeTemplate, _disputeTemplateDataMappings);\\n emit DisputeRequest(arbitrator, arbitratorDisputeID, localDisputeID, templateId, _disputeTemplateUri);\\n }\\n}\\n\",\"keccak256\":\"0xee61f409399f0e66be187def6fcbe2e23717475b2b752d913dfac0a32c7dca1a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0xe841a4fe8ec109ce17dde4457bf1583c8b499109b05887c53a49a3207fc6e80b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xa4dc6b958197adead238de4246cd04e7389c3dc1b9f968acd10985f8fc5b74cf\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0xb46ff71c32a524a865fe8ca99d94c9daeb690bc9d7d49d963a45b06f60af19f3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50604051610ed7380380610ed783398101604081905261002f91610083565b600080546001600160a01b03199081163317909155600180546001600160a01b03948516908316179055600280549290931691161790556100bd565b6001600160a01b038116811461008057600080fd5b50565b6000806040838503121561009657600080fd5b82516100a18161006b565b60208401519092506100b28161006b565b809150509250929050565b610e0b806100cc6000396000f3fe60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108bb565b610231565b005b34801561010c57600080fd5b506100fe61011b3660046108f5565b6103d1565b34801561012c57600080fd5b5061014061013b366004610919565b61041d565b6040516100d59493929190610978565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109f0565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a7a565b61055a565b3480156101d057600080fd5b506101836101df366004610919565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c3660046108f5565b6105b9565b34801561021d57600080fd5b506100fe61022c3660046108f5565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b88565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610b9e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610be0565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610be0565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610b9e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610b9e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906106e59086908c908c90600401610c1a565b60206040518083038185885af1158015610703573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107289190610c50565b600380546040805160a06020601f8d018190040282018101909252608081018b8152949550919382918c908c90819085018382808284376000920182905250938552505050602080830182905260408301829052606090920187905283546001810185559381522081519192600402019081906107a59082610cba565b5060208281015160018301805460ff19169115159190911790556040808401516002808501919091556060909401516003909301929092556000858152600491829052828120859055925491516312a6505d60e21b81526001600160a01b0390921691634a9941749161081c918b918b9101610d7a565b6020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190610c50565b60015460405191925084916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186906108a790869086908b90610db6565b60405180910390a350509695505050505050565b600080604083850312156108ce57600080fd5b50508035926020909101359150565b6001600160a01b03811681146108f257600080fd5b50565b60006020828403121561090757600080fd5b8135610912816108dd565b9392505050565b60006020828403121561092b57600080fd5b5035919050565b6000815180845260005b818110156109585760208185018101518683018201520161093c565b506000602082860101526020601f19601f83011685010191505092915050565b60808152600061098b6080830187610932565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109b957600080fd5b50813567ffffffffffffffff8111156109d157600080fd5b6020830191508360208285010111156109e957600080fd5b9250929050565b600080600080600060608688031215610a0857600080fd5b853567ffffffffffffffff80821115610a2057600080fd5b610a2c89838a016109a7565b90975095506020880135915080821115610a4557600080fd5b50610a52888289016109a7565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610a9357600080fd5b863567ffffffffffffffff80821115610aab57600080fd5b610ab78a838b016109a7565b90985096506020890135915080821115610ad057600080fd5b610adc8a838b016109a7565b90965094506040890135915080821115610af557600080fd5b818901915089601f830112610b0957600080fd5b813581811115610b1b57610b1b610a64565b604051601f8201601f19908116603f01168101908382118183101715610b4357610b43610a64565b816040528281528c6020848701011115610b5c57600080fd5b826020860160208301376000602084830101528096505050505050606087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610bf457607f821691505b602082108103610c1457634e487b7160e01b600052602260045260246000fd5b50919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215610c6257600080fd5b5051919050565b601f821115610cb5576000816000526020600020601f850160051c81016020861015610c925750805b601f850160051c820191505b81811015610cb157828155600101610c9e565b5050505b505050565b815167ffffffffffffffff811115610cd457610cd4610a64565b610ce881610ce28454610be0565b84610c69565b602080601f831160018114610d1d5760008415610d055750858301515b600019600386901b1c1916600185901b178555610cb1565b600085815260208120601f198616915b82811015610d4c57888601518255948401946001909101908401610d2d565b5085821015610d6a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006060820152608060208201526000610d9b6080830185610932565b8281036040840152610dad8185610932565b95945050505050565b838152826020820152606060408201526000610dad606083018461093256fea264697066735822122028e3f1561d663e8479b35f936c2645829463b01bf5fedd3e120b732867bda19a64736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108bb565b610231565b005b34801561010c57600080fd5b506100fe61011b3660046108f5565b6103d1565b34801561012c57600080fd5b5061014061013b366004610919565b61041d565b6040516100d59493929190610978565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109f0565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a7a565b61055a565b3480156101d057600080fd5b506101836101df366004610919565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c3660046108f5565b6105b9565b34801561021d57600080fd5b506100fe61022c3660046108f5565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b88565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610b9e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610be0565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610be0565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610b9e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610b9e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906106e59086908c908c90600401610c1a565b60206040518083038185885af1158015610703573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107289190610c50565b600380546040805160a06020601f8d018190040282018101909252608081018b8152949550919382918c908c90819085018382808284376000920182905250938552505050602080830182905260408301829052606090920187905283546001810185559381522081519192600402019081906107a59082610cba565b5060208281015160018301805460ff19169115159190911790556040808401516002808501919091556060909401516003909301929092556000858152600491829052828120859055925491516312a6505d60e21b81526001600160a01b0390921691634a9941749161081c918b918b9101610d7a565b6020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190610c50565b60015460405191925084916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186906108a790869086908b90610db6565b60405180910390a350509695505050505050565b600080604083850312156108ce57600080fd5b50508035926020909101359150565b6001600160a01b03811681146108f257600080fd5b50565b60006020828403121561090757600080fd5b8135610912816108dd565b9392505050565b60006020828403121561092b57600080fd5b5035919050565b6000815180845260005b818110156109585760208185018101518683018201520161093c565b506000602082860101526020601f19601f83011685010191505092915050565b60808152600061098b6080830187610932565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109b957600080fd5b50813567ffffffffffffffff8111156109d157600080fd5b6020830191508360208285010111156109e957600080fd5b9250929050565b600080600080600060608688031215610a0857600080fd5b853567ffffffffffffffff80821115610a2057600080fd5b610a2c89838a016109a7565b90975095506020880135915080821115610a4557600080fd5b50610a52888289016109a7565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610a9357600080fd5b863567ffffffffffffffff80821115610aab57600080fd5b610ab78a838b016109a7565b90985096506020890135915080821115610ad057600080fd5b610adc8a838b016109a7565b90965094506040890135915080821115610af557600080fd5b818901915089601f830112610b0957600080fd5b813581811115610b1b57610b1b610a64565b604051601f8201601f19908116603f01168101908382118183101715610b4357610b43610a64565b816040528281528c6020848701011115610b5c57600080fd5b826020860160208301376000602084830101528096505050505050606087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610bf457607f821691505b602082108103610c1457634e487b7160e01b600052602260045260246000fd5b50919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215610c6257600080fd5b5051919050565b601f821115610cb5576000816000526020600020601f850160051c81016020861015610c925750805b601f850160051c820191505b81811015610cb157828155600101610c9e565b5050505b505050565b815167ffffffffffffffff811115610cd457610cd4610a64565b610ce881610ce28454610be0565b84610c69565b602080601f831160018114610d1d5760008415610d055750858301515b600019600386901b1c1916600185901b178555610cb1565b600085815260208120601f198616915b82811015610d4c57888601518255948401946001909101908401610d2d565b5085821015610d6a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006060820152608060208201526000610d9b6080830185610932565b8281036040840152610dad8185610932565b95945050505050565b838152826020820152606060408201526000610dad606083018461093256fea264697066735822122028e3f1561d663e8479b35f936c2645829463b01bf5fedd3e120b732867bda19a64736f6c63430008180033", - "devdoc": { - "events": { - "DisputeRequest(address,uint256,uint256,uint256,string)": { - "details": "To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.", - "params": { - "_arbitrator": "The arbitrator of the contract.", - "_arbitratorDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_externalDisputeID": "An identifier created outside Kleros by the protocol requesting arbitration.", - "_templateId": "The identifier of the dispute template. Should not be used with _templateUri.", - "_templateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrator": "The arbitrator giving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor.", - "params": { - "_governor": "The address of the new governor." - } - }, - "constructor": { - "details": "Constructor", - "params": { - "_arbitrator": "Target global arbitrator for any disputes." - } - }, - "createDisputeForTemplate(bytes,string,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplate": "Dispute template.", - "_disputeTemplateDataMappings": "The data mappings.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "createDisputeForTemplateUri(bytes,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "rule(uint256,uint256)": { - "details": "To be called by the arbitrator of the dispute, to declare the winning ruling.", - "params": { - "_arbitratorDisputeID": "ID of the dispute in arbitrator contract.", - "_ruling": "The ruling choice of the arbitration." - } - } - }, - "title": "DisputeResolver DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 14991, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 14994, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitrator", - "offset": 0, - "slot": "1", - "type": "t_contract(IArbitratorV2)23044" - }, - { - "astId": 14997, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "templateRegistry", - "offset": 0, - "slot": "2", - "type": "t_contract(IDisputeTemplateRegistry)23215" - }, - { - "astId": 15001, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "disputes", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(DisputeStruct)14989_storage)dyn_storage" - }, - { - "astId": 15005, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitratorDisputeIDToLocalID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(DisputeStruct)14989_storage)dyn_storage": { - "base": "t_struct(DisputeStruct)14989_storage", - "encoding": "dynamic_array", - "label": "struct DisputeResolver.DisputeStruct[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IArbitratorV2)23044": { - "encoding": "inplace", - "label": "contract IArbitratorV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeTemplateRegistry)23215": { - "encoding": "inplace", - "label": "contract IDisputeTemplateRegistry", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeStruct)14989_storage": { - "encoding": "inplace", - "label": "struct DisputeResolver.DisputeStruct", - "members": [ - { - "astId": 14982, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitratorExtraData", - "offset": 0, - "slot": "0", - "type": "t_bytes_storage" - }, - { - "astId": 14984, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "isRuled", - "offset": 0, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 14986, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "ruling", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 14988, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "numberOfRulingOptions", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrum/DisputeResolverRuler.json b/contracts/deployments/arbitrum/DisputeResolverRuler.json deleted file mode 100644 index b5d45949a..000000000 --- a/contracts/deployments/arbitrum/DisputeResolverRuler.json +++ /dev/null @@ -1,522 +0,0 @@ -{ - "address": "0xb3a5FdEAF461c42caCe148e978e6FBCa97bE6140", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateUri", - "type": "string" - } - ], - "name": "DisputeRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "arbitratorDisputeIDToLocalID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - } - ], - "name": "changeArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "name": "changeTemplateRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplate", - "type": "string" - }, - { - "internalType": "string", - "name": "_disputeTemplateDataMappings", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplateUri", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplateUri", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "bytes", - "name": "arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "isRuled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numberOfRulingOptions", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templateRegistry", - "outputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x1112abdc3f57ddc211ca722c574b81b13aa01739793e0cf023c8a7fcf6d373fe", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xb3a5FdEAF461c42caCe148e978e6FBCa97bE6140", - "transactionIndex": 2, - "gasUsed": "915878", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1094f4f08b0e0a3bec164918a7059f883e0cd6a0a501a3490e65cc12df718df3", - "transactionHash": "0x1112abdc3f57ddc211ca722c574b81b13aa01739793e0cf023c8a7fcf6d373fe", - "logs": [], - "blockNumber": 286701355, - "cumulativeGasUsed": "979461", - "status": 1, - "byzantium": true - }, - "args": [ - "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", - "0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2" - ], - "numDeployments": 1, - "solcInputHash": "6c34f81616194abf0f5b1c9c283b9294", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateUri\",\"type\":\"string\"}],\"name\":\"DisputeRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"arbitratorDisputeIDToLocalID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"}],\"name\":\"changeArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplate\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateDataMappings\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateUri\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplateUri\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isRuled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRulingOptions\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DisputeRequest(address,uint256,uint256,uint256,string)\":{\"details\":\"To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\",\"params\":{\"_arbitrator\":\"The arbitrator of the contract.\",\"_arbitratorDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_externalDisputeID\":\"An identifier created outside Kleros by the protocol requesting arbitration.\",\"_templateId\":\"The identifier of the dispute template. Should not be used with _templateUri.\",\"_templateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrator\":\"The arbitrator giving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor.\",\"params\":{\"_governor\":\"The address of the new governor.\"}},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_arbitrator\":\"Target global arbitrator for any disputes.\"}},\"createDisputeForTemplate(bytes,string,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplate\":\"Dispute template.\",\"_disputeTemplateDataMappings\":\"The data mappings.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"createDisputeForTemplateUri(bytes,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"rule(uint256,uint256)\":{\"details\":\"To be called by the arbitrator of the dispute, to declare the winning ruling.\",\"params\":{\"_arbitratorDisputeID\":\"ID of the dispute in arbitrator contract.\",\"_ruling\":\"The ruling choice of the arbitration.\"}}},\"title\":\"DisputeResolverRuler It extends DisputeResolver for testing purposes of the automatic ruling modes. The arbitrator disputeID must be known before dispute creation, otherwise the dispute cannot be retrieved during the immediate call to rule().\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/devtools/DisputeResolverRuler.sol\":\"DisputeResolverRuler\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/arbitration/arbitrables/DisputeResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitrableV2.sol\\\";\\nimport \\\"../interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\npragma solidity 0.8.24;\\n\\n/// @title DisputeResolver\\n/// DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\\ncontract DisputeResolver is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeStruct {\\n bytes arbitratorExtraData; // Extra data for the dispute.\\n bool isRuled; // True if the dispute has been ruled.\\n uint256 ruling; // Ruling given to the dispute.\\n uint256 numberOfRulingOptions; // The number of choices the arbitrator can give.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor.\\n IArbitratorV2 public arbitrator; // The arbitrator.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n DisputeStruct[] public disputes; // Local disputes.\\n mapping(uint256 => uint256) public arbitratorDisputeIDToLocalID; // Maps arbitrator-side dispute IDs to local dispute IDs.\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator Target global arbitrator for any disputes.\\n constructor(IArbitratorV2 _arbitrator, IDisputeTemplateRegistry _templateRegistry) {\\n governor = msg.sender;\\n arbitrator = _arbitrator;\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n governor = _governor;\\n }\\n\\n function changeArbitrator(IArbitratorV2 _arbitrator) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n arbitrator = _arbitrator;\\n }\\n\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplate Dispute template.\\n /// @param _disputeTemplateDataMappings The data mappings.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplate(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return\\n _createDispute(\\n _arbitratorExtraData,\\n _disputeTemplate,\\n _disputeTemplateDataMappings,\\n \\\"\\\",\\n _numberOfRulingOptions\\n );\\n }\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplateUri(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return _createDispute(_arbitratorExtraData, \\\"\\\", \\\"\\\", _disputeTemplateUri, _numberOfRulingOptions);\\n }\\n\\n /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling.\\n /// @param _arbitratorDisputeID ID of the dispute in arbitrator contract.\\n /// @param _ruling The ruling choice of the arbitration.\\n function rule(uint256 _arbitratorDisputeID, uint256 _ruling) external override {\\n uint256 localDisputeID = arbitratorDisputeIDToLocalID[_arbitratorDisputeID];\\n DisputeStruct storage dispute = disputes[localDisputeID];\\n require(msg.sender == address(arbitrator), \\\"Only the arbitrator can execute this.\\\");\\n require(_ruling <= dispute.numberOfRulingOptions, \\\"Invalid ruling.\\\");\\n require(!dispute.isRuled, \\\"This dispute has been ruled already.\\\");\\n\\n dispute.isRuled = true;\\n dispute.ruling = _ruling;\\n\\n emit Ruling(IArbitratorV2(msg.sender), _arbitratorDisputeID, dispute.ruling);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n function _createDispute(\\n bytes calldata _arbitratorExtraData,\\n string memory _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n string memory _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) internal virtual returns (uint256 arbitratorDisputeID) {\\n require(_numberOfRulingOptions > 1, \\\"Should be at least 2 ruling options.\\\");\\n\\n arbitratorDisputeID = arbitrator.createDispute{value: msg.value}(_numberOfRulingOptions, _arbitratorExtraData);\\n uint256 localDisputeID = disputes.length;\\n disputes.push(\\n DisputeStruct({\\n arbitratorExtraData: _arbitratorExtraData,\\n isRuled: false,\\n ruling: 0,\\n numberOfRulingOptions: _numberOfRulingOptions\\n })\\n );\\n arbitratorDisputeIDToLocalID[arbitratorDisputeID] = localDisputeID;\\n uint256 templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _disputeTemplate, _disputeTemplateDataMappings);\\n emit DisputeRequest(arbitrator, arbitratorDisputeID, localDisputeID, templateId, _disputeTemplateUri);\\n }\\n}\\n\",\"keccak256\":\"0xee61f409399f0e66be187def6fcbe2e23717475b2b752d913dfac0a32c7dca1a\",\"license\":\"MIT\"},\"src/arbitration/devtools/DisputeResolverRuler.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n\\nimport {DisputeResolver, IArbitratorV2, IDisputeTemplateRegistry} from \\\"../arbitrables/DisputeResolver.sol\\\";\\n\\npragma solidity 0.8.24;\\n\\ninterface IKlerosCoreRulerFragment {\\n function getNextDisputeID() external view returns (uint256);\\n}\\n\\n/// @title DisputeResolverRuler\\n/// It extends DisputeResolver for testing purposes of the automatic ruling modes.\\n/// The arbitrator disputeID must be known before dispute creation, otherwise the dispute cannot be retrieved during the immediate call to rule().\\ncontract DisputeResolverRuler is DisputeResolver {\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator Target global arbitrator for any disputes.\\n constructor(\\n IArbitratorV2 _arbitrator,\\n IDisputeTemplateRegistry _templateRegistry\\n ) DisputeResolver(_arbitrator, _templateRegistry) {\\n governor = msg.sender;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function _createDispute(\\n bytes calldata _arbitratorExtraData,\\n string memory _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n string memory _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) internal override returns (uint256 arbitratorDisputeID) {\\n require(_numberOfRulingOptions > 1, \\\"Should be at least 2 ruling options.\\\");\\n\\n uint256 localDisputeID = disputes.length;\\n DisputeStruct storage dispute = disputes.push();\\n dispute.arbitratorExtraData = _arbitratorExtraData;\\n dispute.numberOfRulingOptions = _numberOfRulingOptions;\\n\\n // Keep track of the upcoming dispute ID before dispute creation, so rule() can be called immediately after.\\n arbitratorDisputeID = IKlerosCoreRulerFragment(address(arbitrator)).getNextDisputeID();\\n arbitratorDisputeIDToLocalID[arbitratorDisputeID] = localDisputeID;\\n uint256 templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _disputeTemplate, _disputeTemplateDataMappings);\\n emit DisputeRequest(arbitrator, arbitratorDisputeID, localDisputeID, templateId, _disputeTemplateUri);\\n\\n arbitrator.createDispute{value: msg.value}(_numberOfRulingOptions, _arbitratorExtraData);\\n }\\n}\\n\",\"keccak256\":\"0x310d715738bcb1210bb6094787f6c6cc8032664f9484e2137106474b749ff273\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0xe841a4fe8ec109ce17dde4457bf1583c8b499109b05887c53a49a3207fc6e80b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xa4dc6b958197adead238de4246cd04e7389c3dc1b9f968acd10985f8fc5b74cf\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0xb46ff71c32a524a865fe8ca99d94c9daeb690bc9d7d49d963a45b06f60af19f3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50604051610eee380380610eee83398101604081905261002f9161008b565b60008054600180546001600160a01b03199081166001600160a01b0396871617909155600280548216949095169390931790935591811633918216171790556100c5565b6001600160a01b038116811461008857600080fd5b50565b6000806040838503121561009e57600080fd5b82516100a981610073565b60208401519092506100ba81610073565b809150509250929050565b610e1a806100d46000396000f3fe60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108c9565b610231565b005b34801561010c57600080fd5b506100fe61011b366004610903565b6103d1565b34801561012c57600080fd5b5061014061013b366004610927565b61041d565b6040516100d59493929190610986565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109fe565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a88565b61055a565b3480156101d057600080fd5b506101836101df366004610927565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c366004610903565b6105b9565b34801561021d57600080fd5b506100fe61022c366004610903565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b96565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610bac565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610bee565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610bee565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610bac565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610bac565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60038054600181018255600091909152600481027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01806106f1898b83610c79565b50600381018490556001546040805163db8a173b60e01b815290516001600160a01b039092169163db8a173b916004808201926020929091908290030181865afa158015610743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107679190610d3a565b600081815260046020819052604080832086905560025490516312a6505d60e21b815293965091926001600160a01b0390921691634a994174916107af918c918c9101610d53565b6020604051808303816000875af11580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f29190610d3a565b60015460405191925085916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e271869061083a90879086908c90610d8f565b60405180910390a360015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906108789089908f908f90600401610dae565b60206040518083038185885af1158015610896573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108bb9190610d3a565b505050509695505050505050565b600080604083850312156108dc57600080fd5b50508035926020909101359150565b6001600160a01b038116811461090057600080fd5b50565b60006020828403121561091557600080fd5b8135610920816108eb565b9392505050565b60006020828403121561093957600080fd5b5035919050565b6000815180845260005b818110156109665760208185018101518683018201520161094a565b506000602082860101526020601f19601f83011685010191505092915050565b6080815260006109996080830187610940565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109c757600080fd5b50813567ffffffffffffffff8111156109df57600080fd5b6020830191508360208285010111156109f757600080fd5b9250929050565b600080600080600060608688031215610a1657600080fd5b853567ffffffffffffffff80821115610a2e57600080fd5b610a3a89838a016109b5565b90975095506020880135915080821115610a5357600080fd5b50610a60888289016109b5565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610aa157600080fd5b863567ffffffffffffffff80821115610ab957600080fd5b610ac58a838b016109b5565b90985096506020890135915080821115610ade57600080fd5b610aea8a838b016109b5565b90965094506040890135915080821115610b0357600080fd5b818901915089601f830112610b1757600080fd5b813581811115610b2957610b29610a72565b604051601f8201601f19908116603f01168101908382118183101715610b5157610b51610a72565b816040528281528c6020848701011115610b6a57600080fd5b826020860160208301376000602084830101528096505050505050606087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610c0257607f821691505b602082108103610c2257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610c74576000816000526020600020601f850160051c81016020861015610c515750805b601f850160051c820191505b81811015610c7057828155600101610c5d565b5050505b505050565b67ffffffffffffffff831115610c9157610c91610a72565b610ca583610c9f8354610bee565b83610c28565b6000601f841160018114610cd95760008515610cc15750838201355b600019600387901b1c1916600186901b178355610d33565b600083815260209020601f19861690835b82811015610d0a5786850135825560209485019460019092019101610cea565b5086821015610d275760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060208284031215610d4c57600080fd5b5051919050565b6060815260006060820152608060208201526000610d746080830185610940565b8281036040840152610d868185610940565b95945050505050565b838152826020820152606060408201526000610d866060830184610940565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea26469706673582212205a8e65d1dfc327ea0f1f71dae2dae97c38359baa8ee8493fab431b5809c2307a64736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108c9565b610231565b005b34801561010c57600080fd5b506100fe61011b366004610903565b6103d1565b34801561012c57600080fd5b5061014061013b366004610927565b61041d565b6040516100d59493929190610986565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109fe565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a88565b61055a565b3480156101d057600080fd5b506101836101df366004610927565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c366004610903565b6105b9565b34801561021d57600080fd5b506100fe61022c366004610903565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b96565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610bac565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610bee565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610bee565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610bac565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610bac565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60038054600181018255600091909152600481027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01806106f1898b83610c79565b50600381018490556001546040805163db8a173b60e01b815290516001600160a01b039092169163db8a173b916004808201926020929091908290030181865afa158015610743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107679190610d3a565b600081815260046020819052604080832086905560025490516312a6505d60e21b815293965091926001600160a01b0390921691634a994174916107af918c918c9101610d53565b6020604051808303816000875af11580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f29190610d3a565b60015460405191925085916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e271869061083a90879086908c90610d8f565b60405180910390a360015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906108789089908f908f90600401610dae565b60206040518083038185885af1158015610896573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108bb9190610d3a565b505050509695505050505050565b600080604083850312156108dc57600080fd5b50508035926020909101359150565b6001600160a01b038116811461090057600080fd5b50565b60006020828403121561091557600080fd5b8135610920816108eb565b9392505050565b60006020828403121561093957600080fd5b5035919050565b6000815180845260005b818110156109665760208185018101518683018201520161094a565b506000602082860101526020601f19601f83011685010191505092915050565b6080815260006109996080830187610940565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109c757600080fd5b50813567ffffffffffffffff8111156109df57600080fd5b6020830191508360208285010111156109f757600080fd5b9250929050565b600080600080600060608688031215610a1657600080fd5b853567ffffffffffffffff80821115610a2e57600080fd5b610a3a89838a016109b5565b90975095506020880135915080821115610a5357600080fd5b50610a60888289016109b5565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610aa157600080fd5b863567ffffffffffffffff80821115610ab957600080fd5b610ac58a838b016109b5565b90985096506020890135915080821115610ade57600080fd5b610aea8a838b016109b5565b90965094506040890135915080821115610b0357600080fd5b818901915089601f830112610b1757600080fd5b813581811115610b2957610b29610a72565b604051601f8201601f19908116603f01168101908382118183101715610b5157610b51610a72565b816040528281528c6020848701011115610b6a57600080fd5b826020860160208301376000602084830101528096505050505050606087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610c0257607f821691505b602082108103610c2257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610c74576000816000526020600020601f850160051c81016020861015610c515750805b601f850160051c820191505b81811015610c7057828155600101610c5d565b5050505b505050565b67ffffffffffffffff831115610c9157610c91610a72565b610ca583610c9f8354610bee565b83610c28565b6000601f841160018114610cd95760008515610cc15750838201355b600019600387901b1c1916600186901b178355610d33565b600083815260209020601f19861690835b82811015610d0a5786850135825560209485019460019092019101610cea565b5086821015610d275760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600060208284031215610d4c57600080fd5b5051919050565b6060815260006060820152608060208201526000610d746080830185610940565b8281036040840152610d868185610940565b95945050505050565b838152826020820152606060408201526000610d866060830184610940565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea26469706673582212205a8e65d1dfc327ea0f1f71dae2dae97c38359baa8ee8493fab431b5809c2307a64736f6c63430008180033", - "devdoc": { - "events": { - "DisputeRequest(address,uint256,uint256,uint256,string)": { - "details": "To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.", - "params": { - "_arbitrator": "The arbitrator of the contract.", - "_arbitratorDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_externalDisputeID": "An identifier created outside Kleros by the protocol requesting arbitration.", - "_templateId": "The identifier of the dispute template. Should not be used with _templateUri.", - "_templateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrator": "The arbitrator giving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor.", - "params": { - "_governor": "The address of the new governor." - } - }, - "constructor": { - "details": "Constructor", - "params": { - "_arbitrator": "Target global arbitrator for any disputes." - } - }, - "createDisputeForTemplate(bytes,string,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplate": "Dispute template.", - "_disputeTemplateDataMappings": "The data mappings.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "createDisputeForTemplateUri(bytes,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "rule(uint256,uint256)": { - "details": "To be called by the arbitrator of the dispute, to declare the winning ruling.", - "params": { - "_arbitratorDisputeID": "ID of the dispute in arbitrator contract.", - "_ruling": "The ruling choice of the arbitration." - } - } - }, - "title": "DisputeResolverRuler It extends DisputeResolver for testing purposes of the automatic ruling modes. The arbitrator disputeID must be known before dispute creation, otherwise the dispute cannot be retrieved during the immediate call to rule().", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 15541, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 15544, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "arbitrator", - "offset": 0, - "slot": "1", - "type": "t_contract(IArbitratorV2)21857" - }, - { - "astId": 15547, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "templateRegistry", - "offset": 0, - "slot": "2", - "type": "t_contract(IDisputeTemplateRegistry)22028" - }, - { - "astId": 15551, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "disputes", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(DisputeStruct)15539_storage)dyn_storage" - }, - { - "astId": 15555, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "arbitratorDisputeIDToLocalID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(DisputeStruct)15539_storage)dyn_storage": { - "base": "t_struct(DisputeStruct)15539_storage", - "encoding": "dynamic_array", - "label": "struct DisputeResolver.DisputeStruct[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IArbitratorV2)21857": { - "encoding": "inplace", - "label": "contract IArbitratorV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeTemplateRegistry)22028": { - "encoding": "inplace", - "label": "contract IDisputeTemplateRegistry", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeStruct)15539_storage": { - "encoding": "inplace", - "label": "struct DisputeResolver.DisputeStruct", - "members": [ - { - "astId": 15532, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "arbitratorExtraData", - "offset": 0, - "slot": "0", - "type": "t_bytes_storage" - }, - { - "astId": 15534, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "isRuled", - "offset": 0, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 15536, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "ruling", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 15538, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "numberOfRulingOptions", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrum/DisputeTemplateRegistry.json b/contracts/deployments/arbitrum/DisputeTemplateRegistry.json deleted file mode 100644 index 4e5470eca..000000000 --- a/contracts/deployments/arbitrum/DisputeTemplateRegistry.json +++ /dev/null @@ -1,299 +0,0 @@ -{ - "address": "0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "DisputeTemplate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "setDisputeTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "templateId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templates", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "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": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x5dca20bf0f91cac286b8550a1431f5df523599ba2940e5b99b377d8abede9720", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2", - "transactionIndex": 19, - "gasUsed": "380009", - "logsBloom": "0x00000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000004000000000000000000000000000000000000000000", - "blockHash": "0xe0292fb12b680dd0be51cb110aac65972d0fc6c26744782e368735aa496482cc", - "transactionHash": "0x5dca20bf0f91cac286b8550a1431f5df523599ba2940e5b99b377d8abede9720", - "logs": [ - { - "transactionIndex": 19, - "blockNumber": 272063329, - "transactionHash": "0x5dca20bf0f91cac286b8550a1431f5df523599ba2940e5b99b377d8abede9720", - "address": "0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 237, - "blockHash": "0xe0292fb12b680dd0be51cb110aac65972d0fc6c26744782e368735aa496482cc" - } - ], - "blockNumber": 272063329, - "cumulativeGasUsed": "14853054", - "status": 1, - "byzantium": true - }, - "args": [ - "0x57EfD43DAfCeb6C58Df57932b2B299f46fef5c87", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeTemplateRegistryProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220677e943f9d34953f9ff6f8c97da0b7a4317d9f65361d9eade87930e19a594d4264736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220677e943f9d34953f9ff6f8c97da0b7a4317d9f65361d9eade87930e19a594d4264736f6c63430008180033", - "execute": { - "methodName": "initialize", - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59" - ] - }, - "implementation": "0x57EfD43DAfCeb6C58Df57932b2B299f46fef5c87", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/DisputeTemplateRegistry_Implementation.json b/contracts/deployments/arbitrum/DisputeTemplateRegistry_Implementation.json deleted file mode 100644 index e8100c7c6..000000000 --- a/contracts/deployments/arbitrum/DisputeTemplateRegistry_Implementation.json +++ /dev/null @@ -1,400 +0,0 @@ -{ - "address": "0x57EfD43DAfCeb6C58Df57932b2B299f46fef5c87", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "DisputeTemplate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "setDisputeTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "templateId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templates", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "transactionHash": "0xb30d787cd00260e1a283592ae874afc7abc01499ef7f97b6c89c604eb5a07948", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x57EfD43DAfCeb6C58Df57932b2B299f46fef5c87", - "transactionIndex": 2, - "gasUsed": "980209", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000800000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd7765587214aeea42b020462049f2b9cedead6e1d9a20028c2b8efd50656fb5b", - "transactionHash": "0xb30d787cd00260e1a283592ae874afc7abc01499ef7f97b6c89c604eb5a07948", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 272063313, - "transactionHash": "0xb30d787cd00260e1a283592ae874afc7abc01499ef7f97b6c89c604eb5a07948", - "address": "0x57EfD43DAfCeb6C58Df57932b2B299f46fef5c87", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 3, - "blockHash": "0xd7765587214aeea42b020462049f2b9cedead6e1d9a20028c2b8efd50656fb5b" - } - ], - "blockNumber": 272063313, - "cumulativeGasUsed": "1140433", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"_templateTag\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"DisputeTemplate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_templateTag\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"setDisputeTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"templateId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A contract to maintain a registry of dispute templates.\",\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"DisputeTemplate(uint256,string,string,string)\":{\"details\":\"To be emitted when a new dispute template is created.\",\"params\":{\"_templateData\":\"The template data.\",\"_templateDataMappings\":\"The data mappings.\",\"_templateId\":\"The identifier of the dispute template.\",\"_templateTag\":\"An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor of the contract.\",\"params\":{\"_governor\":\"The new governor.\"}},\"constructor\":{\"details\":\"Constructor, initializing the implementation to reduce attack surface.\"},\"initialize(address)\":{\"details\":\"Initializer\",\"params\":{\"_governor\":\"Governor of the contract.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setDisputeTemplate(string,string,string)\":{\"details\":\"Registers a new dispute template.\",\"params\":{\"_templateData\":\"The data of the template.\",\"_templateDataMappings\":\"The data mappings of the template.\",\"_templateTag\":\"The tag of the template (optional).\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"governor\":{\"details\":\"The governor of the contract.\"},\"templates\":{\"details\":\"The number of templates.\"}},\"title\":\"Dispute Template Registry\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}],\"InvalidImplementation(address)\":[{\"notice\":\"The `implementation` is not UUPS-compliant\"}]},\"events\":{\"Upgraded(address)\":{\"notice\":\"Emitted when the `implementation` has been successfully upgraded.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/DisputeTemplateRegistry.sol\":\"DisputeTemplateRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/arbitration/DisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport \\\"../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\nimport \\\"./interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\n/// @title Dispute Template Registry\\n/// @dev A contract to maintain a registry of dispute templates.\\ncontract DisputeTemplateRegistry is IDisputeTemplateRegistry, UUPSProxiable, Initializable {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev The governor of the contract.\\n address public governor;\\n\\n /// @dev The number of templates.\\n uint256 public templates;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Governor only\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer\\n /// @param _governor Governor of the contract.\\n function initialize(address _governor) external reinitializer(1) {\\n governor = _governor;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Changes the governor of the contract.\\n /// @param _governor The new governor.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Registers a new dispute template.\\n /// @param _templateTag The tag of the template (optional).\\n /// @param _templateData The data of the template.\\n /// @param _templateDataMappings The data mappings of the template.\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId) {\\n templateId = templates++;\\n emit DisputeTemplate(templateId, _templateTag, _templateData, _templateDataMappings);\\n }\\n}\\n\",\"keccak256\":\"0xb6898a1fa7ec85c1aa12f4cb5b7a5407ab2a9105c36d6f08c77982982672758a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0xb46ff71c32a524a865fe8ca99d94c9daeb690bc9d7d49d963a45b06f60af19f3\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x560ea64115636ecd6b3596248817125551c038ce1648019fde3cbe02d9759a30\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxiable\\n * @author Simon Malatrait \\n * @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n * The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n *\\n * IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n * This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSProxiable` with a custom implementation of upgrades.\\n *\\n * The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\n */\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /**\\n * Emitted when the `implementation` has been successfully upgraded.\\n * @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n */\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /**\\n * @dev The call is from an unauthorized context.\\n */\\n error UUPSUnauthorizedCallContext();\\n\\n /**\\n * @dev The storage `slot` is unsupported as a UUID.\\n */\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Storage variable of the proxiable contract address.\\n * It is used to check whether or not the current call is from the proxy.\\n */\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n * @dev Called by {upgradeToAndCall}.\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Upgrade mechanism including access control and UUPS-compliance.\\n * @param newImplementation Address of the new implementation contract.\\n * @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n *\\n * @dev Reverts if the execution is not performed via delegatecall or the execution\\n * context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n /* Check that the execution is being performed through a delegatecall call and that the execution context is\\n a proxy contract with an implementation (as defined in ERC1967) pointing to self. */\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the if statement.\\n */\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5956855046cdda7aa45f44e379ef45323af7266c44c817d1266d8b32d52b0e22\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516108d66100fc600039600081816101d1015281816101fa01526103f701526108d66000f3fe6080604052600436106100605760003560e01c80630c340a24146100655780633a283d7d146100a25780634a994174146100c65780634f1ef286146100e657806352d1902d146100fb578063c4d66de814610110578063e4c0aaf414610130575b600080fd5b34801561007157600080fd5b50600054610085906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ae57600080fd5b506100b860015481565b604051908152602001610099565b3480156100d257600080fd5b506100b86100e136600461065e565b610150565b6100f96100f4366004610702565b6101bd565b005b34801561010757600080fd5b506100b86103ea565b34801561011c57600080fd5b506100f961012b366004610764565b610448565b34801561013c57600080fd5b506100f961014b366004610764565b610532565b60018054600091826101618361077f565b9190505590508360405161017591906107ca565b6040518091039020817ef7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff992485856040516101ae929190610812565b60405180910390a39392505050565b6101c68261057e565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061024457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102386000805160206108818339815191525490565b6001600160a01b031614155b156102625760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156102bc575060408051601f3d908101601f191682019092526102b991810190610840565b60015b6102e957604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b600080516020610881833981519152811461031a57604051632a87526960e21b8152600481018290526024016102e0565b6000805160206108818339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156103e5576000836001600160a01b03168360405161038191906107ca565b600060405180830381855af49150503d80600081146103bc576040519150601f19603f3d011682016040523d82523d6000602084013e6103c1565b606091505b50509050806103e3576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104355760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061088183398151915290565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806104925750805467ffffffffffffffff808416911610155b156104af5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b67ffffffffffffffff841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6000546001600160a01b0316331461055c5760405162461bcd60e51b81526004016102e090610859565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146105a85760405162461bcd60e51b81526004016102e090610859565b50565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156105dc576105dc6105ab565b604051601f8501601f19908116603f01168101908282118183101715610604576106046105ab565b8160405280935085815286868601111561061d57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261064857600080fd5b610657838335602085016105c1565b9392505050565b60008060006060848603121561067357600080fd5b833567ffffffffffffffff8082111561068b57600080fd5b61069787838801610637565b945060208601359150808211156106ad57600080fd5b6106b987838801610637565b935060408601359150808211156106cf57600080fd5b506106dc86828701610637565b9150509250925092565b80356001600160a01b03811681146106fd57600080fd5b919050565b6000806040838503121561071557600080fd5b61071e836106e6565b9150602083013567ffffffffffffffff81111561073a57600080fd5b8301601f8101851361074b57600080fd5b61075a858235602084016105c1565b9150509250929050565b60006020828403121561077657600080fd5b610657826106e6565b60006001820161079f57634e487b7160e01b600052601160045260246000fd5b5060010190565b60005b838110156107c15781810151838201526020016107a9565b50506000910152565b600082516107dc8184602087016107a6565b9190910192915050565b600081518084526107fe8160208601602086016107a6565b601f01601f19169290920160200192915050565b60408152600061082560408301856107e6565b828103602084015261083781856107e6565b95945050505050565b60006020828403121561085257600080fd5b5051919050565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b60408201526060019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220977df6a0b32ff9f925b16c822cbefa6381b9d1bcdec0a17337085ad8366f688b64736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100605760003560e01c80630c340a24146100655780633a283d7d146100a25780634a994174146100c65780634f1ef286146100e657806352d1902d146100fb578063c4d66de814610110578063e4c0aaf414610130575b600080fd5b34801561007157600080fd5b50600054610085906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ae57600080fd5b506100b860015481565b604051908152602001610099565b3480156100d257600080fd5b506100b86100e136600461065e565b610150565b6100f96100f4366004610702565b6101bd565b005b34801561010757600080fd5b506100b86103ea565b34801561011c57600080fd5b506100f961012b366004610764565b610448565b34801561013c57600080fd5b506100f961014b366004610764565b610532565b60018054600091826101618361077f565b9190505590508360405161017591906107ca565b6040518091039020817ef7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff992485856040516101ae929190610812565b60405180910390a39392505050565b6101c68261057e565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061024457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102386000805160206108818339815191525490565b6001600160a01b031614155b156102625760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156102bc575060408051601f3d908101601f191682019092526102b991810190610840565b60015b6102e957604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b600080516020610881833981519152811461031a57604051632a87526960e21b8152600481018290526024016102e0565b6000805160206108818339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156103e5576000836001600160a01b03168360405161038191906107ca565b600060405180830381855af49150503d80600081146103bc576040519150601f19603f3d011682016040523d82523d6000602084013e6103c1565b606091505b50509050806103e3576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104355760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061088183398151915290565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806104925750805467ffffffffffffffff808416911610155b156104af5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b67ffffffffffffffff841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6000546001600160a01b0316331461055c5760405162461bcd60e51b81526004016102e090610859565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146105a85760405162461bcd60e51b81526004016102e090610859565b50565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156105dc576105dc6105ab565b604051601f8501601f19908116603f01168101908282118183101715610604576106046105ab565b8160405280935085815286868601111561061d57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261064857600080fd5b610657838335602085016105c1565b9392505050565b60008060006060848603121561067357600080fd5b833567ffffffffffffffff8082111561068b57600080fd5b61069787838801610637565b945060208601359150808211156106ad57600080fd5b6106b987838801610637565b935060408601359150808211156106cf57600080fd5b506106dc86828701610637565b9150509250925092565b80356001600160a01b03811681146106fd57600080fd5b919050565b6000806040838503121561071557600080fd5b61071e836106e6565b9150602083013567ffffffffffffffff81111561073a57600080fd5b8301601f8101851361074b57600080fd5b61075a858235602084016105c1565b9150509250929050565b60006020828403121561077657600080fd5b610657826106e6565b60006001820161079f57634e487b7160e01b600052601160045260246000fd5b5060010190565b60005b838110156107c15781810151838201526020016107a9565b50506000910152565b600082516107dc8184602087016107a6565b9190910192915050565b600081518084526107fe8160208601602086016107a6565b601f01601f19169290920160200192915050565b60408152600061082560408301856107e6565b828103602084015261083781856107e6565b95945050505050565b60006020828403121561085257600080fd5b5051919050565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b60408201526060019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220977df6a0b32ff9f925b16c822cbefa6381b9d1bcdec0a17337085ad8366f688b64736f6c63430008180033", - "devdoc": { - "details": "A contract to maintain a registry of dispute templates.", - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "DisputeTemplate(uint256,string,string,string)": { - "details": "To be emitted when a new dispute template is created.", - "params": { - "_templateData": "The template data.", - "_templateDataMappings": "The data mappings.", - "_templateId": "The identifier of the dispute template.", - "_templateTag": "An optional tag for the dispute template, such as \"registration\" or \"removal\"." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor of the contract.", - "params": { - "_governor": "The new governor." - } - }, - "constructor": { - "details": "Constructor, initializing the implementation to reduce attack surface." - }, - "initialize(address)": { - "details": "Initializer", - "params": { - "_governor": "Governor of the contract." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setDisputeTemplate(string,string,string)": { - "details": "Registers a new dispute template.", - "params": { - "_templateData": "The data of the template.", - "_templateDataMappings": "The data mappings of the template.", - "_templateTag": "The tag of the template (optional)." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "governor": { - "details": "The governor of the contract." - }, - "templates": { - "details": "The number of templates." - } - }, - "title": "Dispute Template Registry", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ], - "InvalidImplementation(address)": [ - { - "notice": "The `implementation` is not UUPS-compliant" - } - ] - }, - "events": { - "Upgraded(address)": { - "notice": "Emitted when the `implementation` has been successfully upgraded." - } - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 6884, - "contract": "src/arbitration/DisputeTemplateRegistry.sol:DisputeTemplateRegistry", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6887, - "contract": "src/arbitration/DisputeTemplateRegistry.sol:DisputeTemplateRegistry", - "label": "templates", - "offset": 0, - "slot": "1", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrum/DisputeTemplateRegistry_Proxy.json b/contracts/deployments/arbitrum/DisputeTemplateRegistry_Proxy.json deleted file mode 100644 index b398c42e7..000000000 --- a/contracts/deployments/arbitrum/DisputeTemplateRegistry_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x5dca20bf0f91cac286b8550a1431f5df523599ba2940e5b99b377d8abede9720", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2", - "transactionIndex": 19, - "gasUsed": "380009", - "logsBloom": "0x00000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000004000000000000000000000000000000000000000000", - "blockHash": "0xe0292fb12b680dd0be51cb110aac65972d0fc6c26744782e368735aa496482cc", - "transactionHash": "0x5dca20bf0f91cac286b8550a1431f5df523599ba2940e5b99b377d8abede9720", - "logs": [ - { - "transactionIndex": 19, - "blockNumber": 272063329, - "transactionHash": "0x5dca20bf0f91cac286b8550a1431f5df523599ba2940e5b99b377d8abede9720", - "address": "0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 237, - "blockHash": "0xe0292fb12b680dd0be51cb110aac65972d0fc6c26744782e368735aa496482cc" - } - ], - "blockNumber": 272063329, - "cumulativeGasUsed": "14853054", - "status": 1, - "byzantium": true - }, - "args": [ - "0x57EfD43DAfCeb6C58Df57932b2B299f46fef5c87", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeTemplateRegistryProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220677e943f9d34953f9ff6f8c97da0b7a4317d9f65361d9eade87930e19a594d4264736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220677e943f9d34953f9ff6f8c97da0b7a4317d9f65361d9eade87930e19a594d4264736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/EvidenceModule.json b/contracts/deployments/arbitrum/EvidenceModule.json deleted file mode 100644 index 578aa4b09..000000000 --- a/contracts/deployments/arbitrum/EvidenceModule.json +++ /dev/null @@ -1,274 +0,0 @@ -{ - "address": "0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_party", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "_evidence", - "type": "string" - } - ], - "name": "Evidence", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_evidence", - "type": "string" - } - ], - "name": "submitEvidence", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x2bc8a01e82dccd7083b5195c3e8cab2b3d5a1f7ac95a162c81e0f6801b5c5b70", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3", - "transactionIndex": 3, - "gasUsed": "366311", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000008000080100000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7e2d9da6677d008068faf9339fe4e662ff7806ca1f41666125e8fec1295fda29", - "transactionHash": "0x2bc8a01e82dccd7083b5195c3e8cab2b3d5a1f7ac95a162c81e0f6801b5c5b70", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 272063086, - "transactionHash": "0x2bc8a01e82dccd7083b5195c3e8cab2b3d5a1f7ac95a162c81e0f6801b5c5b70", - "address": "0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 5, - "blockHash": "0x7e2d9da6677d008068faf9339fe4e662ff7806ca1f41666125e8fec1295fda29" - } - ], - "blockNumber": 272063086, - "cumulativeGasUsed": "658598", - "status": 1, - "byzantium": true - }, - "args": [ - "0xE22500Fa27f696d06702367246bd17Bd2C8a4c5d", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 2, - "solcInputHash": "3becf00d91b882372d51b0fc9f6a5781", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"EvidenceModuleProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x8edb830825d7fe8ef85d445b087fac3b41f626cd7d5b40ea583c3cba21528687\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0xc3e0b18f846a62cc6c274680fc10014d1267885f8eefc6767292d3e174a081c0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220f7c42d679ff13810d84897a3cbbb7e45ef2c7b94a533d7db8e3a61c374c817ee64736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220f7c42d679ff13810d84897a3cbbb7e45ef2c7b94a533d7db8e3a61c374c817ee64736f6c63430008180033", - "execute": { - "methodName": "initialize2", - "args": [] - }, - "implementation": "0xA502A3942abCF8e71FBD87ed442B39b798b192C8", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/EvidenceModule_Implementation.json b/contracts/deployments/arbitrum/EvidenceModule_Implementation.json deleted file mode 100644 index 45ceb2b01..000000000 --- a/contracts/deployments/arbitrum/EvidenceModule_Implementation.json +++ /dev/null @@ -1,352 +0,0 @@ -{ - "address": "0xA502A3942abCF8e71FBD87ed442B39b798b192C8", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_party", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "_evidence", - "type": "string" - } - ], - "name": "Evidence", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_evidence", - "type": "string" - } - ], - "name": "submitEvidence", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x7b5ebb6885b55a76e43e220d0ac460bd89babee613a2107d7fbfeff33af226d6", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xA502A3942abCF8e71FBD87ed442B39b798b192C8", - "transactionIndex": 1, - "gasUsed": "736209", - "logsBloom": "0x00000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800010000000000000000000080000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xc96ccd0e204fea83876cf3e31f859ce8cec9089197707e4b42baa9c0e3112a16", - "transactionHash": "0x7b5ebb6885b55a76e43e220d0ac460bd89babee613a2107d7fbfeff33af226d6", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 337009545, - "transactionHash": "0x7b5ebb6885b55a76e43e220d0ac460bd89babee613a2107d7fbfeff33af226d6", - "address": "0xA502A3942abCF8e71FBD87ed442B39b798b192C8", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 0, - "blockHash": "0xc96ccd0e204fea83876cf3e31f859ce8cec9089197707e4b42baa9c0e3112a16" - } - ], - "blockNumber": 337009545, - "cumulativeGasUsed": "736209", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "3becf00d91b882372d51b0fc9f6a5781", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_party\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_evidence\",\"type\":\"string\"}],\"name\":\"Evidence\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_evidence\",\"type\":\"string\"}],\"name\":\"submitEvidence\",\"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\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Evidence(uint256,address,string)\":{\"details\":\"To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations).\",\"params\":{\"_evidence\":\"Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\",\"_externalDisputeID\":\"Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right external dispute ID.\",\"_party\":\"The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initialize(address)\":{\"details\":\"Initializer.\",\"params\":{\"_governor\":\"The governor's address.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"submitEvidence(uint256,string)\":{\"details\":\"Submits evidence for a dispute.\",\"params\":{\"_evidence\":\"Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\",\"_externalDisputeID\":\"Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right evidence group ID.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"Evidence Module\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/evidence/EvidenceModule.sol\":\"EvidenceModule\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/arbitration/evidence/EvidenceModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"../interfaces/IArbitratorV2.sol\\\";\\nimport \\\"../interfaces/IEvidence.sol\\\";\\nimport \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/// @title Evidence Module\\ncontract EvidenceModule is IEvidence, Initializable, UUPSProxiable {\\n string public constant override version = \\\"0.8.0\\\";\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor of the contract.\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n function initialize(address _governor) external reinitializer(1) {\\n governor = _governor;\\n }\\n\\n function initialize2() external reinitializer(2) {\\n // NOP\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /**\\n * @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n /// @dev Submits evidence for a dispute.\\n /// @param _externalDisputeID Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right evidence group ID.\\n /// @param _evidence Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\\n function submitEvidence(uint256 _externalDisputeID, string calldata _evidence) external {\\n emit Evidence(_externalDisputeID, msg.sender, _evidence);\\n }\\n}\\n\",\"keccak256\":\"0xedf978718e5d349c5a39747e2c4da253a1d8b73588c4118b74b39c324ba471fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0xe841a4fe8ec109ce17dde4457bf1583c8b499109b05887c53a49a3207fc6e80b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xa4dc6b958197adead238de4246cd04e7389c3dc1b9f968acd10985f8fc5b74cf\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IEvidence.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title IEvidence\\ninterface IEvidence {\\n /// @dev To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations).\\n /// @param _externalDisputeID Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right external dispute ID.\\n /// @param _party The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party.\\n /// @param _evidence Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\\n event Evidence(uint256 indexed _externalDisputeID, address indexed _party, string _evidence);\\n}\\n\",\"keccak256\":\"0xa881a6604ffe43044edee5a789363e19b78af854092fe1e322d75a140150714c\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x560ea64115636ecd6b3596248817125551c038ce1648019fde3cbe02d9759a30\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa8bb02ed2b2fc165296226762299c2ee3328f2a0c6e90c6fe7029fa5b01d0b60\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516108ff6100fc6000396000818161024a01528181610273015261047001526108ff6000f3fe6080604052600436106100605760003560e01c80630c340a2414610065578063472abf68146100a25780634f1ef286146100b957806352d1902d146100cc57806354fd4d50146100ef578063a6a7f0eb1461012d578063c4d66de81461014d575b600080fd5b34801561007157600080fd5b50600054610085906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ae57600080fd5b506100b761016d565b005b6100b76100c736600461068e565b610236565b3480156100d857600080fd5b506100e1610463565b604051908152602001610099565b3480156100fb57600080fd5b50610120604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100999190610774565b34801561013957600080fd5b506100b76101483660046107a7565b6104c1565b34801561015957600080fd5b506100b7610168366004610823565b61050a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff16806101b75750805467ffffffffffffffff808416911610155b156101d45760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff8316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b61023f826105f4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806102bd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102b16000805160206108aa8339815191525490565b6001600160a01b031614155b156102db5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610335575060408051601f3d908101601f1916820190925261033291810190610845565b60015b61036257604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206108aa833981519152811461039357604051632a87526960e21b815260048101829052602401610359565b6000805160206108aa8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a281511561045e576000836001600160a01b0316836040516103fa919061085e565b600060405180830381855af49150503d8060008114610435576040519150601f19603f3d011682016040523d82523d6000602084013e61043a565b606091505b505090508061045c576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104ae5760405163703e46dd60e11b815260040160405180910390fd5b506000805160206108aa83398151915290565b336001600160a01b0316837f39935cf45244bc296a03d6aef1cf17779033ee27090ce9c68d432367ce10699684846040516104fd92919061087a565b60405180910390a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105545750805467ffffffffffffffff808416911610155b156105715760405162dc149f60e41b815260040160405180910390fd5b8054600160401b67ffffffffffffffff841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6000546001600160a01b031633146106595760405162461bcd60e51b815260206004820152602260248201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6044820152613c9760f11b6064820152608401610359565b50565b80356001600160a01b038116811461067357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156106a157600080fd5b6106aa8361065c565b9150602083013567ffffffffffffffff808211156106c757600080fd5b818501915085601f8301126106db57600080fd5b8135818111156106ed576106ed610678565b604051601f8201601f19908116603f0116810190838211818310171561071557610715610678565b8160405282815288602084870101111561072e57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b8381101561076b578181015183820152602001610753565b50506000910152565b6020815260008251806020840152610793816040850160208701610750565b601f01601f19169190910160400192915050565b6000806000604084860312156107bc57600080fd5b83359250602084013567ffffffffffffffff808211156107db57600080fd5b818601915086601f8301126107ef57600080fd5b8135818111156107fe57600080fd5b87602082850101111561081057600080fd5b6020830194508093505050509250925092565b60006020828403121561083557600080fd5b61083e8261065c565b9392505050565b60006020828403121561085757600080fd5b5051919050565b60008251610870818460208701610750565b9190910192915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220e8029341a85fe4ec5c46a752df03395b1ee6ff03774364e24047c608189c4ceb64736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100605760003560e01c80630c340a2414610065578063472abf68146100a25780634f1ef286146100b957806352d1902d146100cc57806354fd4d50146100ef578063a6a7f0eb1461012d578063c4d66de81461014d575b600080fd5b34801561007157600080fd5b50600054610085906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ae57600080fd5b506100b761016d565b005b6100b76100c736600461068e565b610236565b3480156100d857600080fd5b506100e1610463565b604051908152602001610099565b3480156100fb57600080fd5b50610120604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100999190610774565b34801561013957600080fd5b506100b76101483660046107a7565b6104c1565b34801561015957600080fd5b506100b7610168366004610823565b61050a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff16806101b75750805467ffffffffffffffff808416911610155b156101d45760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff8316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b61023f826105f4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806102bd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102b16000805160206108aa8339815191525490565b6001600160a01b031614155b156102db5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610335575060408051601f3d908101601f1916820190925261033291810190610845565b60015b61036257604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206108aa833981519152811461039357604051632a87526960e21b815260048101829052602401610359565b6000805160206108aa8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a281511561045e576000836001600160a01b0316836040516103fa919061085e565b600060405180830381855af49150503d8060008114610435576040519150601f19603f3d011682016040523d82523d6000602084013e61043a565b606091505b505090508061045c576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104ae5760405163703e46dd60e11b815260040160405180910390fd5b506000805160206108aa83398151915290565b336001600160a01b0316837f39935cf45244bc296a03d6aef1cf17779033ee27090ce9c68d432367ce10699684846040516104fd92919061087a565b60405180910390a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105545750805467ffffffffffffffff808416911610155b156105715760405162dc149f60e41b815260040160405180910390fd5b8054600160401b67ffffffffffffffff841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6000546001600160a01b031633146106595760405162461bcd60e51b815260206004820152602260248201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6044820152613c9760f11b6064820152608401610359565b50565b80356001600160a01b038116811461067357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156106a157600080fd5b6106aa8361065c565b9150602083013567ffffffffffffffff808211156106c757600080fd5b818501915085601f8301126106db57600080fd5b8135818111156106ed576106ed610678565b604051601f8201601f19908116603f0116810190838211818310171561071557610715610678565b8160405282815288602084870101111561072e57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b8381101561076b578181015183820152602001610753565b50506000910152565b6020815260008251806020840152610793816040850160208701610750565b601f01601f19169190910160400192915050565b6000806000604084860312156107bc57600080fd5b83359250602084013567ffffffffffffffff808211156107db57600080fd5b818601915086601f8301126107ef57600080fd5b8135818111156107fe57600080fd5b87602082850101111561081057600080fd5b6020830194508093505050509250925092565b60006020828403121561083557600080fd5b61083e8261065c565b9392505050565b60006020828403121561085757600080fd5b5051919050565b60008251610870818460208701610750565b9190910192915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220e8029341a85fe4ec5c46a752df03395b1ee6ff03774364e24047c608189c4ceb64736f6c63430008180033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "Evidence(uint256,address,string)": { - "details": "To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations).", - "params": { - "_evidence": "Stringified evidence object, example: '{\"name\" : \"Justification\", \"description\" : \"Description\", \"fileURI\" : \"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\"}'.", - "_externalDisputeID": "Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right external dispute ID.", - "_party": "The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "initialize(address)": { - "details": "Initializer.", - "params": { - "_governor": "The governor's address." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "submitEvidence(uint256,string)": { - "details": "Submits evidence for a dispute.", - "params": { - "_evidence": "Stringified evidence object, example: '{\"name\" : \"Justification\", \"description\" : \"Description\", \"fileURI\" : \"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\"}'.", - "_externalDisputeID": "Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right evidence group ID." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "Evidence Module", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 21337, - "contract": "src/arbitration/evidence/EvidenceModule.sol:EvidenceModule", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - } -} diff --git a/contracts/deployments/arbitrum/EvidenceModule_Proxy.json b/contracts/deployments/arbitrum/EvidenceModule_Proxy.json deleted file mode 100644 index e92870b8b..000000000 --- a/contracts/deployments/arbitrum/EvidenceModule_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x2bc8a01e82dccd7083b5195c3e8cab2b3d5a1f7ac95a162c81e0f6801b5c5b70", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3", - "transactionIndex": 3, - "gasUsed": "366311", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000008000080100000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7e2d9da6677d008068faf9339fe4e662ff7806ca1f41666125e8fec1295fda29", - "transactionHash": "0x2bc8a01e82dccd7083b5195c3e8cab2b3d5a1f7ac95a162c81e0f6801b5c5b70", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 272063086, - "transactionHash": "0x2bc8a01e82dccd7083b5195c3e8cab2b3d5a1f7ac95a162c81e0f6801b5c5b70", - "address": "0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 5, - "blockHash": "0x7e2d9da6677d008068faf9339fe4e662ff7806ca1f41666125e8fec1295fda29" - } - ], - "blockNumber": 272063086, - "cumulativeGasUsed": "658598", - "status": 1, - "byzantium": true - }, - "args": [ - "0xE22500Fa27f696d06702367246bd17Bd2C8a4c5d", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"EvidenceModuleProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206156b4d247e9775a938a1d5238ff9222ccea78aa0d46323980701cdafc6c1e2d64736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206156b4d247e9775a938a1d5238ff9222ccea78aa0d46323980701cdafc6c1e2d64736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/KlerosCore.json b/contracts/deployments/arbitrum/KlerosCore.json deleted file mode 100644 index 457f0f011..000000000 --- a/contracts/deployments/arbitrum/KlerosCore.json +++ /dev/null @@ -1,2144 +0,0 @@ -{ - "address": "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "AppealPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrableNotWhitelisted", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "CannotDisableClassicDK", - "type": "error" - }, - { - "inputs": [], - "name": "CommitPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitNotSupportedByCourt", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitOnly", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "DisputePeriodIsFinal", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeStillDrawing", - "type": "error" - }, - { - "inputs": [], - "name": "EvidenceNotPassedAndNotAppeal", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GuardianOrGovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDisputKitParent", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "MinStakeLowerThanParentCourt", - "type": "error" - }, - { - "inputs": [], - "name": "MustSupportDisputeKitClassic", - "type": "error" - }, - { - "inputs": [], - "name": "NotEligibleForStaking", - "type": "error" - }, - { - "inputs": [], - "name": "NotEvidencePeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotExecutionPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "SortitionModuleOnly", - "type": "error" - }, - { - "inputs": [], - "name": "StakingInTooManyCourts", - "type": "error" - }, - { - "inputs": [], - "name": "StakingLessThanCourtMinStake", - "type": "error" - }, - { - "inputs": [], - "name": "StakingMoreThanMaxStakePerJuror", - "type": "error" - }, - { - "inputs": [], - "name": "StakingMoreThanMaxTotalStaked", - "type": "error" - }, - { - "inputs": [], - "name": "StakingNotPossibleInThisCourt", - "type": "error" - }, - { - "inputs": [], - "name": "StakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "StakingZeroWhenNoStake", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnstakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "inputs": [], - "name": "UnsupportedDisputeKit", - "type": "error" - }, - { - "inputs": [], - "name": "VotePeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "WhenNotPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WhenPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WrongDisputeKitIndex", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "DisputeKitCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "DisputeKitEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_fromDisputeKitID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_toDisputeKitID", - "type": "uint256" - } - ], - "name": "DisputeKitJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "Draw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreBase.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "addNewDisputeKit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "arbitrableWhitelist", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arbitrable", - "type": "address" - }, - { - "internalType": "bool", - "name": "_allowed", - "type": "bool" - } - ], - "name": "changeArbitrableWhitelist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_guardian", - "type": "address" - } - ], - "name": "changeGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC721", - "name": "_jurorNft", - "type": "address" - } - ], - "name": "changeJurorNft", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - } - ], - "name": "changeJurorProsecutionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputeKits", - "outputs": [ - { - "internalType": "contract IDisputeKit", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreBase.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "lastPeriodChange", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "uint256", - "name": "nbDrawnJurors", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256[]", - "name": "_disputeKitIDs", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "enableDisputeKits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputeKitsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getPnkAtStakePerJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "disputeKitID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkAtStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVotes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "repartitions", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkPenalties", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "drawnJurors", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumPnkRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "drawIterations", - "type": "uint256" - } - ], - "internalType": "struct KlerosCoreBase.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "guardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - }, - { - "internalType": "contract IDisputeKit", - "name": "_disputeKit", - "type": "address" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModuleAddress", - "type": "address" - }, - { - "internalType": "contract IERC721", - "name": "_jurorNft", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "isDisputeKitJumping", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - } - ], - "name": "isSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorNft", - "outputs": [ - { - "internalType": "contract IERC721", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorProsecutionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "passPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "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": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStakeBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "contract ISortitionModule", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0xe0d0da9c80fafb30319b9c919ab8275b1da2ef99da6587539f66e37851e13dbf", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "transactionIndex": 2, - "gasUsed": "836960", - "logsBloom": "0x00000002000200000000000020000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000040000000000000000000000000000420000000000000010000800402000000000000008000000000000000000000000000000000800000000000080000000000080000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000200000000004000000000000000060000000001001000000800000000000000000000000000000000000000000000000", - "blockHash": "0xf23b464db7b5abe21dc62ed552eeede438bad3ac2d3294e5863198cead1cf247", - "transactionHash": "0xe0d0da9c80fafb30319b9c919ab8275b1da2ef99da6587539f66e37851e13dbf", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 272063254, - "transactionHash": "0xe0d0da9c80fafb30319b9c919ab8275b1da2ef99da6587539f66e37851e13dbf", - "address": "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "topics": [ - "0x44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb2", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x00000000000000000000000070b464be85a547144c72485eba2577e5d3a45421" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0xf23b464db7b5abe21dc62ed552eeede438bad3ac2d3294e5863198cead1cf247" - }, - { - "transactionIndex": 2, - "blockNumber": 272063254, - "transactionHash": "0xe0d0da9c80fafb30319b9c919ab8275b1da2ef99da6587539f66e37851e13dbf", - "address": "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "topics": [ - "0x3475f0ed7216dd7d453db663a1c3024e4f36cc925521d54edb9d13e022cbee3d", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 2, - "blockHash": "0xf23b464db7b5abe21dc62ed552eeede438bad3ac2d3294e5863198cead1cf247" - }, - { - "transactionIndex": 2, - "blockNumber": 272063254, - "transactionHash": "0xe0d0da9c80fafb30319b9c919ab8275b1da2ef99da6587539f66e37851e13dbf", - "address": "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "topics": [ - "0xb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc79", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001" - ], - "data": "0x", - "logIndex": 3, - "blockHash": "0xf23b464db7b5abe21dc62ed552eeede438bad3ac2d3294e5863198cead1cf247" - }, - { - "transactionIndex": 2, - "blockNumber": 272063254, - "transactionHash": "0xe0d0da9c80fafb30319b9c919ab8275b1da2ef99da6587539f66e37851e13dbf", - "address": "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000002", - "logIndex": 4, - "blockHash": "0xf23b464db7b5abe21dc62ed552eeede438bad3ac2d3294e5863198cead1cf247" - } - ], - "blockNumber": 272063254, - "cumulativeGasUsed": "918567", - "status": 1, - "byzantium": true - }, - "args": [ - "0x17c39AB53A7072b167A74a85D47b30385c98ae89", - "0x2c053739000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000330bd769382cfc6d50175903434ccc8d206dcae5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b464be85a547144c72485eba2577e5d3a45421000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000022000000000000000000000000021a9402adb818744b296e1d1be58c804118dc03d000000000000000000000000fe34a72c55e512601e7d491a9c5b36373ce34d6300000000000000000000000000000000000000000000000000000000000000010500000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 3, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"KlerosCoreNeoProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212201c5acfa5298e951819678eb1ad6657fd09ee38510bab3bc500b837f47242febc64736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212201c5acfa5298e951819678eb1ad6657fd09ee38510bab3bc500b837f47242febc64736f6c634300081c0033", - "execute": { - "methodName": "reinitialize", - "args": [ - "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1" - ] - }, - "implementation": "0xC1210493804eEF123096F9581Ee82B915150E54c", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/KlerosCoreRuler.json b/contracts/deployments/arbitrum/KlerosCoreRuler.json deleted file mode 100644 index 9fd6d468f..000000000 --- a/contracts/deployments/arbitrum/KlerosCoreRuler.json +++ /dev/null @@ -1,1602 +0,0 @@ -{ - "address": "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOrInstructorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NoRulerSet", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulerOnly", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "RulingModeNotSet", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum KlerosCoreRuler.RulingMode", - "name": "mode", - "type": "uint8" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "name": "AutoRuled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreRuler.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_oldRuler", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_newRuler", - "type": "address" - } - ], - "name": "RulerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "components": [ - { - "internalType": "enum KlerosCoreRuler.RulingMode", - "name": "rulingMode", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "presetRuling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "presetTied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "presetOverridden", - "type": "bool" - } - ], - "indexed": false, - "internalType": "struct KlerosCoreRuler.RulerSettings", - "name": "_settings", - "type": "tuple" - } - ], - "name": "RulerSettingsChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "_jump", - "type": "bool" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_jump", - "type": "bool" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "internalType": "address", - "name": "_newRuler", - "type": "address" - } - ], - "name": "changeRuler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_presetRuling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_presetTied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_presetOverridden", - "type": "bool" - } - ], - "name": "changeRulingModeToAutomaticPreset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "changeRulingModeToAutomaticRandom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "changeRulingModeToManual", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreRuler.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getNextDisputeID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - } - ], - "internalType": "struct KlerosCoreRuler.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "arbitrable", - "type": "address" - } - ], - "name": "rulers", - "outputs": [ - { - "internalType": "address", - "name": "ruler", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "name": "rulingResults", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "arbitrable", - "type": "address" - } - ], - "name": "settings", - "outputs": [ - { - "internalType": "enum KlerosCoreRuler.RulingMode", - "name": "rulingMode", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "presetRuling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "presetTied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "presetOverridden", - "type": "bool" - } - ], - "stateMutability": "view", - "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": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x467a826ff2b4ec23bed9936441307123e1609acf8ce0cf70f4fffe7c2d25671f", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", - "transactionIndex": 2, - "gasUsed": "314451", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000100004000000000000000000000000000060008000000000000000000000000220000000000000000000800000080000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000060000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x905e9059a1f41a82e3c5c67e027ff256285596bc1cef98acdbd330f043a8a44d", - "transactionHash": "0x467a826ff2b4ec23bed9936441307123e1609acf8ce0cf70f4fffe7c2d25671f", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 286701284, - "transactionHash": "0x467a826ff2b4ec23bed9936441307123e1609acf8ce0cf70f4fffe7c2d25671f", - "address": "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", - "topics": [ - "0x0c907a651f88974ed0d9423aacc8b998c40eedf39920e2c3bdae0adcc486a761", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 0, - "blockHash": "0x905e9059a1f41a82e3c5c67e027ff256285596bc1cef98acdbd330f043a8a44d" - }, - { - "transactionIndex": 2, - "blockNumber": 286701284, - "transactionHash": "0x467a826ff2b4ec23bed9936441307123e1609acf8ce0cf70f4fffe7c2d25671f", - "address": "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 1, - "blockHash": "0x905e9059a1f41a82e3c5c67e027ff256285596bc1cef98acdbd330f043a8a44d" - } - ], - "blockNumber": 286701284, - "cumulativeGasUsed": "348983", - "status": 1, - "byzantium": true - }, - "args": [ - "0x85093b5EDa4F2e2E2fEDae34Da91239D6a08e324", - "0x05d3177d000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000330bd769382cfc6d50175903434ccc8d206dcae500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000010" - ], - "numDeployments": 1, - "solcInputHash": "072c3d36aa3704de09a27a044cf00231", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"KlerosCoreRulerProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212205e24db8a42d0caaa77ce845dfb341502dc3b700c5ccf0c51c4cf914535a4a64564736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212205e24db8a42d0caaa77ce845dfb341502dc3b700c5ccf0c51c4cf914535a4a64564736f6c63430008180033", - "execute": { - "methodName": "initialize", - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0x330bD769382cFc6d50175903434CCC8D206DCAE5", - [ - 0, - 10000, - "100000000000000000", - 16 - ] - ] - }, - "implementation": "0x85093b5EDa4F2e2E2fEDae34Da91239D6a08e324", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/KlerosCoreRuler_Implementation.json b/contracts/deployments/arbitrum/KlerosCoreRuler_Implementation.json deleted file mode 100644 index 5461d6c22..000000000 --- a/contracts/deployments/arbitrum/KlerosCoreRuler_Implementation.json +++ /dev/null @@ -1,2221 +0,0 @@ -{ - "address": "0x85093b5EDa4F2e2E2fEDae34Da91239D6a08e324", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOrInstructorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NoRulerSet", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulerOnly", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "RulingModeNotSet", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum KlerosCoreRuler.RulingMode", - "name": "mode", - "type": "uint8" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "name": "AutoRuled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreRuler.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_oldRuler", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_newRuler", - "type": "address" - } - ], - "name": "RulerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "components": [ - { - "internalType": "enum KlerosCoreRuler.RulingMode", - "name": "rulingMode", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "presetRuling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "presetTied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "presetOverridden", - "type": "bool" - } - ], - "indexed": false, - "internalType": "struct KlerosCoreRuler.RulerSettings", - "name": "_settings", - "type": "tuple" - } - ], - "name": "RulerSettingsChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "_jump", - "type": "bool" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_jump", - "type": "bool" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "internalType": "address", - "name": "_newRuler", - "type": "address" - } - ], - "name": "changeRuler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_presetRuling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_presetTied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_presetOverridden", - "type": "bool" - } - ], - "name": "changeRulingModeToAutomaticPreset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "changeRulingModeToAutomaticRandom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "changeRulingModeToManual", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreRuler.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getNextDisputeID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - } - ], - "internalType": "struct KlerosCoreRuler.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "arbitrable", - "type": "address" - } - ], - "name": "rulers", - "outputs": [ - { - "internalType": "address", - "name": "ruler", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "name": "rulingResults", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "arbitrable", - "type": "address" - } - ], - "name": "settings", - "outputs": [ - { - "internalType": "enum KlerosCoreRuler.RulingMode", - "name": "rulingMode", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "presetRuling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "presetTied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "presetOverridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "transactionHash": "0xf4d87406caaf352d4a0c65a9f9963300a2e4fd4f762ca428155ac8c93e11ce48", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x85093b5EDa4F2e2E2fEDae34Da91239D6a08e324", - "transactionIndex": 5, - "gasUsed": "2957987", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x86b9c352bef894ed240b7fca2b89945fd86b54ea9672c8843a8061568921982b", - "transactionHash": "0xf4d87406caaf352d4a0c65a9f9963300a2e4fd4f762ca428155ac8c93e11ce48", - "logs": [ - { - "transactionIndex": 5, - "blockNumber": 286701267, - "transactionHash": "0xf4d87406caaf352d4a0c65a9f9963300a2e4fd4f762ca428155ac8c93e11ce48", - "address": "0x85093b5EDa4F2e2E2fEDae34Da91239D6a08e324", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 50, - "blockHash": "0x86b9c352bef894ed240b7fca2b89945fd86b54ea9672c8843a8061568921982b" - } - ], - "blockNumber": 286701267, - "cumulativeGasUsed": "4476604", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "6c34f81616194abf0f5b1c9c283b9294", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AppealFeesNotEnough\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ArbitrationFeesNotEnough\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeNotAppealable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GovernorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GovernorOrInstructorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidForkingCourtAsParent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoRulerSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RulerOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RulingAlreadyExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RulingModeNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsuccessfulCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"AcceptedFeeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"AppealDecision\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"AppealPossible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum KlerosCoreRuler.RulingMode\",\"name\":\"mode\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"name\":\"AutoRuled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"CourtCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_fromCourtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_toCourtID\",\"type\":\"uint96\"}],\"name\":\"CourtJump\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"CourtModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_pnkAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"LeftoverRewardSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"NewCurrencyRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum KlerosCoreRuler.Period\",\"name\":\"_period\",\"type\":\"uint8\"}],\"name\":\"NewPeriod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldRuler\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newRuler\",\"type\":\"address\"}],\"name\":\"RulerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum KlerosCoreRuler.RulingMode\",\"name\":\"rulingMode\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"presetRuling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"presetTied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"presetOverridden\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct KlerosCoreRuler.RulerSettings\",\"name\":\"_settings\",\"type\":\"tuple\"}],\"name\":\"RulerSettingsChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_degreeOfCoherency\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_pnkAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_feeAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"TokenAndETHShift\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_jump\",\"type\":\"bool\"}],\"name\":\"appeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_jump\",\"type\":\"bool\"}],\"name\":\"appealCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"changeAcceptedFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"changeCourtParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"changeCurrencyRates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_pinakion\",\"type\":\"address\"}],\"name\":\"changePinakion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newRuler\",\"type\":\"address\"}],\"name\":\"changeRuler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_presetRuling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_presetTied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"_presetOverridden\",\"type\":\"bool\"}],\"name\":\"changeRulingModeToAutomaticPreset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"changeRulingModeToAutomaticRandom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"changeRulingModeToManual\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountInEth\",\"type\":\"uint256\"}],\"name\":\"convertEthToTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"courts\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"createCourt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"currencyRates\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"feePaymentAccepted\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"rateInEth\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"rateDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"courtID\",\"type\":\"uint96\"},{\"internalType\":\"contract IArbitrableV2\",\"name\":\"arbitrated\",\"type\":\"address\"},{\"internalType\":\"enum KlerosCoreRuler.Period\",\"name\":\"period\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"ruled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"name\":\"executeRuling\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextDisputeID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalFeesForJurors\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sumFeeRewardPaid\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"internalType\":\"struct KlerosCoreRuler.Round\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"getTimesPerPeriod\",\"outputs\":[{\"internalType\":\"uint256[4]\",\"name\":\"timesPerPeriod\",\"type\":\"uint256[4]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_pinakion\",\"type\":\"address\"},{\"internalType\":\"uint256[4]\",\"name\":\"_courtParameters\",\"type\":\"uint256[4]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pinakion\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitrableV2\",\"name\":\"arbitrable\",\"type\":\"address\"}],\"name\":\"rulers\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"ruler\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"name\":\"rulingResults\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitrableV2\",\"name\":\"arbitrable\",\"type\":\"address\"}],\"name\":\"settings\",\"outputs\":[{\"internalType\":\"enum KlerosCoreRuler.RulingMode\",\"name\":\"rulingMode\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"presetRuling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"presetTied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"presetOverridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"AcceptedFeeToken(address,bool)\":{\"details\":\"To be emitted when an ERC20 token is added or removed as a method to pay fees.\",\"params\":{\"_accepted\":\"Whether the token is accepted or not.\",\"_token\":\"The ERC20 token.\"}},\"DisputeCreation(uint256,address)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_arbitrable\":\"The contract which created the dispute.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"NewCurrencyRate(address,uint64,uint8)\":{\"details\":\"To be emitted when the fee for a particular ERC20 token is updated.\",\"params\":{\"_feeToken\":\"The ERC20 token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrable\":\"The arbitrable receiving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}},\"Upgraded(address)\":{\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"appeal(uint256,uint256,bytes,bool)\":{\"details\":\"Appeals the ruling of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_jump\":\"Whether to jump to the parent court or not.\"}},\"appealCost(uint256,bool)\":{\"details\":\"Gets the cost of appealing a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_jump\":\"Whether to jump to the parent court or not.\"},\"returns\":{\"cost\":\"The appeal cost.\"}},\"arbitrationCost(bytes)\":{\"details\":\"Compute the cost of arbitration denominated in ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\"},\"returns\":{\"cost\":\"The arbitration cost in ETH.\"}},\"arbitrationCost(bytes,address)\":{\"details\":\"Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeToken\":\"The ERC20 token used to pay fees.\"},\"returns\":{\"cost\":\"The arbitration cost in `_feeToken`.\"}},\"changeAcceptedFeeTokens(address,bool)\":{\"details\":\"Changes the supported fee tokens.\",\"params\":{\"_accepted\":\"Whether the token is supported or not as a method of fee payment.\",\"_feeToken\":\"The fee token.\"}},\"changeCurrencyRates(address,uint64,uint8)\":{\"details\":\"Changes the currency rate of a fee token.\",\"params\":{\"_feeToken\":\"The fee token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"changePinakion(address)\":{\"details\":\"Changes the `pinakion` storage variable.\",\"params\":{\"_pinakion\":\"The new value for the `pinakion` storage variable.\"}},\"constructor\":{\"details\":\"Constructor, initializing the implementation to reduce attack surface.\"},\"createCourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4])\":{\"details\":\"Creates a court under a specified parent court.\",\"params\":{\"_alpha\":\"The `alpha` property value of the court.\",\"_feeForJuror\":\"The `feeForJuror` property value of the court.\",\"_hiddenVotes\":\"The `hiddenVotes` property value of the court.\",\"_jurorsForCourtJump\":\"The `jurorsForCourtJump` property value of the court.\",\"_minStake\":\"The `minStake` property value of the court.\",\"_parent\":\"The `parent` property value of the court.\",\"_timesPerPeriod\":\"The `timesPerPeriod` property value of the court.\"}},\"createDispute(uint256,bytes)\":{\"details\":\"Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"createDispute(uint256,bytes,address,uint256)\":{\"details\":\"Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeAmount\":\"Amount of the ERC20 token used to pay fees.\",\"_feeToken\":\"The ERC20 token used to pay fees.\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"execute(uint256,uint256)\":{\"details\":\"Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_round\":\"The appeal round.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"executeRuling(uint256,uint256,bool,bool)\":{\"details\":\"Executes a specified dispute's ruling.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"getNumberOfVotes(uint256)\":{\"details\":\"Gets the number of votes permitted for the specified dispute in the latest round.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"initialize(address,address,uint256[4])\":{\"details\":\"Initializer (constructor equivalent for upgradable contracts).\",\"params\":{\"_courtParameters\":\"Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\",\"_governor\":\"The governor's address.\",\"_pinakion\":\"The address of the token contract.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"title\":\"KlerosCoreRuler Core arbitrator contract for development and testing purposes.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}],\"InvalidImplementation(address)\":[{\"notice\":\"The `implementation` is not UUPS-compliant\"}]},\"events\":{\"Upgraded(address)\":{\"notice\":\"Emitted when the `implementation` has been successfully upgraded.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/devtools/KlerosCoreRuler.sol\":\"KlerosCoreRuler\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/arbitration/devtools/KlerosCoreRuler.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitratorV2.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../../libraries/SafeERC20.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreRuler\\n/// Core arbitrator contract for development and testing purposes.\\ncontract KlerosCoreRuler is IArbitratorV2, UUPSProxiable, Initializable {\\n using SafeERC20 for IERC20;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum RulingMode {\\n uninitialized,\\n manual, // executeRuling() is called manually.\\n automaticRandom, // The ruling is given randomly automatically.\\n automaticPreset // The ruling is given automatically with a preset value.\\n }\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct RulerSettings {\\n RulingMode rulingMode; // The ruling mode of the arbitrator.\\n uint256 presetRuling; // The ruling to give in case of automatic ruling mode.\\n bool presetTied; // Whether the ruling is tied or not.\\n bool presetOverridden; // Whether the ruling is overridden or not.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n struct RulingResult {\\n uint256 ruling;\\n bool tied;\\n bool overridden;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n IERC20 public pinakion; // The Pinakion token contract.\\n Court[] public courts; // The courts.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n mapping(IArbitrableV2 arbitrable => address ruler) public rulers; // The ruler of each arbitrable contract.\\n mapping(IArbitrableV2 arbitrable => RulerSettings) public settings; // The settings of each arbitrable contract.\\n mapping(uint256 disputeID => RulingResult) public rulingResults; // The ruling results of each dispute.\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event CourtCreated(\\n uint256 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event AutoRuled(\\n IArbitrableV2 indexed _arbitrable,\\n RulingMode indexed mode,\\n uint256 indexed _disputeID,\\n uint256 _ruling,\\n bool tied,\\n bool overridden\\n );\\n event RulerSettingsChanged(IArbitrableV2 indexed _arbitrable, RulerSettings _settings);\\n event RulerChanged(IArbitrableV2 indexed _arbitrable, address indexed _oldRuler, address indexed _newRuler);\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n function initialize(\\n address _governor,\\n IERC20 _pinakion,\\n uint256[4] memory _courtParameters\\n ) external reinitializer(1) {\\n governor = _governor;\\n pinakion = _pinakion;\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = false;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = [0, 0, 0, 0];\\n\\n emit CourtCreated(\\n 1,\\n court.parent,\\n court.hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n court.timesPerPeriod\\n );\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /* @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n courtID,\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function changeRulingModeToManual(IArbitrableV2 _arbitrable) external {\\n if (rulers[_arbitrable] == address(0)) rulers[_arbitrable] = msg.sender;\\n if (rulers[_arbitrable] != msg.sender) revert RulerOnly();\\n\\n delete settings[_arbitrable];\\n RulerSettings storage arbitratedSettings = settings[_arbitrable];\\n arbitratedSettings.rulingMode = RulingMode.manual;\\n emit RulerSettingsChanged(_arbitrable, arbitratedSettings);\\n }\\n\\n function changeRulingModeToAutomaticRandom(IArbitrableV2 _arbitrable) external {\\n if (rulers[_arbitrable] == address(0)) rulers[_arbitrable] = msg.sender;\\n if (rulers[_arbitrable] != msg.sender) revert RulerOnly();\\n\\n delete settings[_arbitrable];\\n RulerSettings storage arbitratedSettings = settings[_arbitrable];\\n arbitratedSettings.rulingMode = RulingMode.automaticRandom;\\n emit RulerSettingsChanged(_arbitrable, arbitratedSettings);\\n }\\n\\n function changeRulingModeToAutomaticPreset(\\n IArbitrableV2 _arbitrable,\\n uint256 _presetRuling,\\n bool _presetTied,\\n bool _presetOverridden\\n ) external {\\n if (rulers[_arbitrable] == address(0)) rulers[_arbitrable] = msg.sender;\\n if (rulers[_arbitrable] != msg.sender) revert RulerOnly();\\n\\n delete settings[_arbitrable];\\n RulerSettings storage arbitratedSettings = settings[_arbitrable];\\n arbitratedSettings.rulingMode = RulingMode.automaticPreset;\\n arbitratedSettings.presetRuling = _presetRuling;\\n arbitratedSettings.presetTied = _presetTied;\\n arbitratedSettings.presetOverridden = _presetOverridden;\\n emit RulerSettingsChanged(_arbitrable, arbitratedSettings);\\n }\\n\\n function changeRuler(IArbitrableV2 _arbitrable, address _newRuler) external {\\n if (rulers[_arbitrable] != msg.sender) revert RulerOnly();\\n rulers[_arbitrable] = _newRuler;\\n emit RulerChanged(_arbitrable, msg.sender, _newRuler);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal returns (uint256 disputeID) {\\n (uint96 courtID, , ) = _unpackExtraData(_extraData);\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n\\n Round storage round = dispute.rounds.push();\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n _autoRule(disputeID, _numberOfChoices);\\n\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n function _autoRule(uint256 _disputeID, uint256 _numberOfChoices) internal {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 roundID = dispute.rounds.length - 1;\\n RulerSettings storage arbitratedSettings = settings[dispute.arbitrated];\\n if (arbitratedSettings.rulingMode == RulingMode.uninitialized) revert RulingModeNotSet();\\n if (arbitratedSettings.rulingMode == RulingMode.manual) {\\n // NOP\\n } else if (arbitratedSettings.rulingMode == RulingMode.automaticPreset) {\\n emit AutoRuled(\\n dispute.arbitrated,\\n RulingMode.automaticPreset,\\n _disputeID,\\n arbitratedSettings.presetRuling,\\n arbitratedSettings.presetTied,\\n arbitratedSettings.presetOverridden\\n );\\n this.executeRuling(\\n _disputeID,\\n arbitratedSettings.presetRuling,\\n arbitratedSettings.presetTied,\\n arbitratedSettings.presetOverridden\\n );\\n this.execute(_disputeID, roundID);\\n } else if (arbitratedSettings.rulingMode == RulingMode.automaticRandom) {\\n uint256 pseudoRandomNumber = uint256(keccak256(abi.encodePacked(blockhash(block.number - 1)))) %\\n _numberOfChoices; // Not secure but it's just a dev tool for testing, sue me\\n bool tied = pseudoRandomNumber & 4 == 0;\\n bool overridden = pseudoRandomNumber & 2 == 0;\\n emit AutoRuled(\\n dispute.arbitrated,\\n RulingMode.automaticRandom,\\n _disputeID,\\n pseudoRandomNumber,\\n tied,\\n overridden\\n );\\n this.executeRuling(_disputeID, pseudoRandomNumber, tied, overridden);\\n this.execute(_disputeID, roundID);\\n }\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _jump Whether to jump to the parent court or not.\\n function appeal(\\n uint256 _disputeID,\\n uint256 _numberOfChoices,\\n bytes memory /*_extraData*/,\\n bool _jump\\n ) external payable {\\n if (msg.value < appealCost(_disputeID, _jump)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (rulers[dispute.arbitrated] != msg.sender) revert RulerOnly();\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n uint96 newCourtID = dispute.courtID;\\n\\n if (_jump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n\\n Round storage extraRound = dispute.rounds.push();\\n extraRound.totalFeesForJurors = msg.value;\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n\\n _autoRule(_disputeID, _numberOfChoices);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n function execute(uint256 _disputeID, uint256 _round) external {\\n Dispute storage dispute = disputes[_disputeID];\\n address account = rulers[dispute.arbitrated];\\n if (account == address(0)) revert NoRulerSet();\\n\\n // Transfer the fees back to the ruler\\n Round storage round = dispute.rounds[_round];\\n uint256 feeReward = round.totalFeesForJurors;\\n round.sumFeeRewardPaid += feeReward;\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(account).send(feeReward);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(account, feeReward);\\n }\\n emit TokenAndETHShift(account, _disputeID, _round, 1, int256(0), int256(feeReward), round.feeToken);\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID, uint256 _ruling, bool tied, bool overridden) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n if (msg.sender != rulers[dispute.arbitrated] && msg.sender != address(this)) revert RulerOnly();\\n\\n rulingResults[_disputeID] = RulingResult(_ruling, tied, overridden);\\n dispute.ruled = true;\\n dispute.arbitrated.rule(_disputeID, _ruling);\\n\\n emit Ruling(dispute.arbitrated, _disputeID, _ruling);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _unpackExtraData(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _jump Whether to jump to the parent court or not.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID, bool _jump) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n uint256 nbVotes = round.totalFeesForJurors / court.feeForJuror;\\n if (_jump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n RulingResult storage rulingResult = rulingResults[_disputeID];\\n return (rulingResult.ruling, rulingResult.tied, rulingResult.overridden);\\n }\\n\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n function getNextDisputeID() external view returns (uint256) {\\n return disputes.length;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n return dispute.rounds[dispute.rounds.length - 1].totalFeesForJurors / court.feeForJuror;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _unpackExtraData(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GovernorOrInstructorOnly();\\n error RulerOnly();\\n error NoRulerSet();\\n error RulingModeNotSet();\\n error UnsuccessfulCall();\\n error InvalidForkingCourtAsParent();\\n error ArbitrationFeesNotEnough();\\n error TokenNotAccepted();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error RulingAlreadyExecuted();\\n error TransferFailed();\\n}\\n\",\"keccak256\":\"0xb8a370ce083224d6aa6e3eefe1f2c5ef8bbc10f3d957277e09fa5d9b10607afe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0xe841a4fe8ec109ce17dde4457bf1583c8b499109b05887c53a49a3207fc6e80b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xa4dc6b958197adead238de4246cd04e7389c3dc1b9f968acd10985f8fc5b74cf\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x5bbda7c304b3681b90feae33be694d04dc129edd60e1d07cb593b895fdc9cd4e\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x3e39adb9cdd9f86b0defc8f6e1223533d86f82c804e186193f729c32c10161b1\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x560ea64115636ecd6b3596248817125551c038ce1648019fde3cbe02d9759a30\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxiable\\n * @author Simon Malatrait \\n * @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n * The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n *\\n * IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n * This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSProxiable` with a custom implementation of upgrades.\\n *\\n * The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\n */\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /**\\n * Emitted when the `implementation` has been successfully upgraded.\\n * @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n */\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /**\\n * @dev The call is from an unauthorized context.\\n */\\n error UUPSUnauthorizedCallContext();\\n\\n /**\\n * @dev The storage `slot` is unsupported as a UUID.\\n */\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Storage variable of the proxiable contract address.\\n * It is used to check whether or not the current call is from the proxy.\\n */\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n * @dev Called by {upgradeToAndCall}.\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Upgrade mechanism including access control and UUPS-compliance.\\n * @param newImplementation Address of the new implementation contract.\\n * @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n *\\n * @dev Reverts if the execution is not performed via delegatecall or the execution\\n * context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n /* Check that the execution is being performed through a delegatecall call and that the execution context is\\n a proxy contract with an implementation (as defined in ERC1967) pointing to self. */\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the if statement.\\n */\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5956855046cdda7aa45f44e379ef45323af7266c44c817d1266d8b32d52b0e22\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000d9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff1615620000765760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b0390811614620000d65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161336562000103600039600081816113350152818161135e015261155b01526133656000f3fe6080604052600436106101e95760003560e01c8063564a565d11610113578063d98493f6116100ab578063e6d49cdf1161006f578063e6d49cdf14610727578063f6506db414610767578063f7434ea914610787578063fbf405b0146107a7578063fc6f8f16146107c757600080fd5b8063d98493f614610665578063d9ee095f14610685578063db8a173b14610698578063e2373ab3146106ad578063e4c0aaf41461070757600080fd5b8063564a565d146105175780636736b70c14610547578063751accd0146105675780637934c0be1461058757806382d02237146105a757806386541b24146105c75780638a9bb02a146105e7578063c13517e114610632578063c71f42531461064557600080fd5b80632177470c116101865780632177470c146103ec578063379f0a171461040c5780633cfd118414610442578063405d51ae1461046f57806343818d661461048f57806347cdcc1d146104af5780634f1ef286146104cf57806352d1902d146104e25780635601eaea146104f757600080fd5b8062f5822c146101ee57806301fcf74d146102105780630219da791461024357806305d3177d146102b65780630c340a24146102d65780630e3993a41461030e5780631860592b1461032e5780631c3db16d1461034e5780631f5a0dd21461038b575b600080fd5b3480156101fa57600080fd5b5061020e610209366004612900565b6107e7565b005b34801561021c57600080fd5b5061023061022b366004612932565b610834565b6040519081526020015b60405180910390f35b34801561024f57600080fd5b5061028e61025e366004612900565b60046020526000908152604090205460ff808216916001600160401b0361010082041691600160481b9091041683565b6040805193151584526001600160401b03909216602084015260ff169082015260600161023a565b3480156102c257600080fd5b5061020e6102d13660046129e5565b610990565b3480156102e257600080fd5b506000546102f6906001600160a01b031681565b6040516001600160a01b03909116815260200161023a565b34801561031a57600080fd5b5061020e610329366004612900565b610be9565b34801561033a57600080fd5b50610230610349366004612a2d565b610cf4565b34801561035a57600080fd5b5061036e610369366004612a59565b610d4e565b60408051938452911515602084015215159082015260600161023a565b34801561039757600080fd5b506103ab6103a6366004612a59565b610d78565b604080516001600160601b0390981688529515156020880152948601939093526060850191909152608084015260a0830152151560c082015260e00161023a565b3480156103f857600080fd5b5061020e610407366004612a72565b610dd7565b34801561041857600080fd5b506102f6610427366004612900565b6005602052600090815260409020546001600160a01b031681565b34801561044e57600080fd5b5061046261045d366004612ad8565b610f9f565b60405161023a9190612b16565b34801561047b57600080fd5b5061020e61048a366004612b24565b611009565b34801561049b57600080fd5b5061020e6104aa366004612900565b6111c9565b3480156104bb57600080fd5b5061020e6104ca366004612b92565b61128e565b61020e6104dd366004612c4c565b611321565b3480156104ee57600080fd5b5061023061154e565b34801561050357600080fd5b5061020e610512366004612c9b565b6115ac565b34801561052357600080fd5b50610537610532366004612a59565b61171e565b60405161023a9493929190612ce7565b34801561055357600080fd5b5061020e610562366004612d24565b611773565b34801561057357600080fd5b5061020e610582366004612d5c565b611884565b34801561059357600080fd5b5061020e6105a2366004612db4565b61192e565b3480156105b357600080fd5b5061020e6105c2366004612de2565b6119ad565b3480156105d357600080fd5b5061020e6105e2366004612b24565b611a6a565b3480156105f357600080fd5b50610607610602366004612c9b565b611b5e565b604080518251815260208084015190820152918101516001600160a01b03169082015260600161023a565b610230610640366004612e3f565b611c0b565b34801561065157600080fd5b50610230610660366004612a59565b611c43565b34801561067157600080fd5b50610230610680366004612eb7565b611ced565b61020e610693366004612f02565b611d32565b3480156106a457600080fd5b50600354610230565b3480156106b957600080fd5b506106f76106c8366004612900565b60066020526000908152604090208054600182015460029092015460ff91821692918181169161010090041684565b60405161023a9493929190612f69565b34801561071357600080fd5b5061020e610722366004612900565b611f7f565b34801561073357600080fd5b5061036e610742366004612a59565b6007602052600090815260409020805460019091015460ff8082169161010090041683565b34801561077357600080fd5b50610230610782366004612f94565b611fcc565b34801561079357600080fd5b506102306107a2366004612ffa565b6120b0565b3480156107b357600080fd5b506001546102f6906001600160a01b031681565b3480156107d357600080fd5b506102306107e2366004612a59565b6120fc565b6000546001600160a01b031633146108125760405163c383977560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000806003848154811061084a5761084a61302e565b60009182526020822060026003909202019081018054919350906108709060019061305a565b815481106108805761088061302e565b6000918252602082208454600280546003909402909201945090916001600160601b039091169081106108b5576108b561302e565b90600052602060002090600b020190506000816004015483600001546108db9190613083565b9050851561095e5783546001600160601b031660001901610905576001600160ff1b039450610986565b610910816002613097565b61091b9060016130ae565b82546002805490916001600160601b031690811061093b5761093b61302e565b90600052602060002090600b0201600401546109579190613097565b9450610986565b610969816002613097565b6109749060016130ae565b82600401546109839190613097565b94505b5050505092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806109d9575080546001600160401b03808416911610155b156109f65760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155600080546001600160a01b038088166001600160a01b0319928316178355600180549188169190921617815560028054818452808201909155600b9101027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160601b031916815590604051908082528060200260200182016040528015610aaf578160200160208202803683370190505b508051610ac691600184019160209091019061280d565b50805460ff60601b19168155835160028201556020808501516003830155604080860151600480850191909155606080880151600586015582516080810184526000808252948101859052928301849052820192909252610b2c91600684019190612858565b50805484516020860151604080880151606089015191516001600160601b038616956001957f0c907a651f88974ed0d9423aacc8b998c40eedf39920e2c3bdae0adcc486a76195610b9295600160601b90930460ff1694919390929060068b01906130c1565b60405180910390a350805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001600160a01b0381811660009081526005602052604090205416610c31576001600160a01b038116600090815260056020526040902080546001600160a01b031916331790555b6001600160a01b03818116600090815260056020526040902054163314610c6b576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b0381166000908152600660205260408120805460ff191680825560018083019390935560028201805461ffff19169055909190829082805b0217905550816001600160a01b03167ffe3754ab712090753cf700ac7b99f8a5e0f9c69b698312c2cfd0236b852f83f482604051610ce8919061311d565b60405180910390a25050565b6001600160a01b03821660009081526004602052604081205461010081046001600160401b031690610d3190600160481b900460ff16600a613246565b610d3b9084613097565b610d459190613083565b90505b92915050565b6000818152600760205260409020805460019091015460ff808216916101009004165b9193909250565b60028181548110610d8857600080fd5b60009182526020909120600b9091020180546002820154600383015460048401546005850154600a909501546001600160601b038516965060ff600160601b9095048516959394929391921687565b600060038581548110610dec57610dec61302e565b906000526020600020906003020190508060010160019054906101000a900460ff1615610e2c5760405163c977f8d360e01b815260040160405180910390fd5b8054600160601b90046001600160a01b03908116600090815260056020526040902054163314801590610e5f5750333014155b15610e7d576040516301627e2760e61b815260040160405180910390fd5b60408051606081018252858152841515602080830191825285151583850190815260008a815260079092529084902092518355905160019283018054925161ffff1990931691151561ff001990811692909217610100931515840217905591840180549092161790558154905163188d362b60e11b81526004810187905260248101869052600160601b9091046001600160a01b03169063311a6c5690604401600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b50508254604051878152889350600160601b9091046001600160a01b031691507f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a35050505050565b610fa761288b565b6002826001600160601b031681548110610fc357610fc361302e565b6000918252602090912060408051608081019182905292600b029091016006019060049082845b815481526020019060010190808311610fea5750505050509050919050565b6000546001600160a01b031633146110345760405163c383977560e01b815260040160405180910390fd5b6001600160601b03871661105b57604051631ef4f64960e01b815260040160405180910390fd5b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600b82020180546001600160601b0319166001600160601b038b1617815590916040519080825280602002602001820160405280156110d4578160200160208202803683370190505b5080516110eb91600184019160209091019061280d565b50805460ff60601b1916600160601b89151502178155600281018790556003810186905560048082018690556005820185905561112e90600683019085906128a9565b506002896001600160601b03168154811061114b5761114b61302e565b600091825260208083206001600b909302018201805492830181558352909120018290556040516001600160601b038a169083907f0c907a651f88974ed0d9423aacc8b998c40eedf39920e2c3bdae0adcc486a761906111b6908c908c908c908c908c908c90613255565b60405180910390a3505050505050505050565b6001600160a01b0381811660009081526005602052604090205416611211576001600160a01b038116600090815260056020526040902080546001600160a01b031916331790555b6001600160a01b0381811660009081526005602052604090205416331461124b576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b0381166000908152600660205260408120805460ff19168082556001808301939093556002808301805461ffff19169055919283919083610caa565b6001600160a01b038281166000908152600560205260409020541633146112c8576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b0382811660008181526005602052604080822080546001600160a01b0319169486169485179055513392917ff512a4524e61d860055823df1f2a5f33de24eb2a03dc3de501015ad501d4e36f91a45050565b61132a8261212b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113a857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661139c6000805160206133108339815191525490565b6001600160a01b031614155b156113c65760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611420575060408051601f3d908101601f1916820190925261141d91810190613288565b60015b61144d57604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b600080516020613310833981519152811461147e57604051632a87526960e21b815260048101829052602401611444565b6000805160206133108339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611549576000836001600160a01b0316836040516114e591906132a1565b600060405180830381855af49150503d8060008114611520576040519150601f19603f3d011682016040523d82523d6000602084013e611525565b606091505b5050905080611547576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115995760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061331083398151915290565b6000600383815481106115c1576115c161302e565b60009182526020808320600390920290910180546001600160a01b03600160601b90910481168452600590925260409092205491925016806116165760405163f4612fe560e01b815260040160405180910390fd5b600082600201848154811061162d5761162d61302e565b906000526020600020906003020190506000816000015490508082600101600082825461165a91906130ae565b909155505060028201546001600160a01b031661169c576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050506116b7565b60028201546116b5906001600160a01b03168483612159565b505b60028201546040805160018152600060208201529081018390526001600160a01b03918216606082015286918891908616907f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e79060800160405180910390a4505050505050565b6003818154811061172e57600080fd5b6000918252602090912060039091020180546001909101546001600160601b0382169250600160601b9091046001600160a01b03169060ff8082169161010090041684565b6001600160a01b03848116600090815260056020526040902054166117bb576001600160a01b038416600090815260056020526040902080546001600160a01b031916331790555b6001600160a01b038481166000908152600560205260409020541633146117f5576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b03841660008181526006602052604090819020805460028201805460ff1990921660031783556001830188905561ffff1990911686151561ff001916176101008615150217905590519091907ffe3754ab712090753cf700ac7b99f8a5e0f9c69b698312c2cfd0236b852f83f49061187590849061311d565b60405180910390a25050505050565b6000546001600160a01b031633146118af5760405163c383977560e01b815260040160405180910390fd5b6000836001600160a01b031683836040516118ca91906132a1565b60006040518083038185875af1925050503d8060008114611907576040519150601f19603f3d011682016040523d82523d6000602084013e61190c565b606091505b5050905080611547576040516322092f2f60e11b815260040160405180910390fd5b6000546001600160a01b031633146119595760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f541615e167511d757a7067a700eb54431b256bb458dfdce0ac58bf2ed0aefd4491a35050565b6000546001600160a01b031633146119d85760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038316600081815260046020908152604091829020805469ffffffffffffffffff0019166101006001600160401b03881690810260ff60481b191691909117600160481b60ff8816908102919091179092558351908152918201527fe6996b7f03e9bd02228b99d3d946932e3197f505f60542c4cfbc919441d8a4e6910160405180910390a2505050565b6000546001600160a01b03163314611a955760405163c383977560e01b815260040160405180910390fd5b60006002886001600160601b031681548110611ab357611ab361302e565b60009182526020909120600b9091020160028101879055805460ff60601b1916600160601b8915150217815560038101869055600480820186905560058201859055909150611b0890600683019084906128a9565b50876001600160601b03167f709b1f5fda58af9a4f52dacd1ec404840a8148455700cce155a2bd8cf127ef1a888888888888604051611b4c96959493929190613255565b60405180910390a25050505050505050565b611b8b6040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b60038381548110611b9e57611b9e61302e565b90600052602060002090600302016002018281548110611bc057611bc061302e565b6000918252602091829020604080516060810182526003909302909101805483526001810154938301939093526002909201546001600160a01b031691810191909152905092915050565b6000611c16826120b0565b341015611c3657604051630e3360f160e21b815260040160405180910390fd5b610d458383600034612222565b60008060038381548110611c5957611c5961302e565b600091825260208220600390910201805460028054929450916001600160601b03909116908110611c8c57611c8c61302e565b90600052602060002090600b0201905080600401548260020160018460020180549050611cb9919061305a565b81548110611cc957611cc961302e565b906000526020600020906003020160000154611ce59190613083565b949350505050565b6000611ce58261034986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120b092505050565b611d3c8482610834565b341015611d5c57604051633191f8f160e01b815260040160405180910390fd5b600060038581548110611d7157611d7161302e565b6000918252602080832060039092029091018054600160601b90046001600160a01b0390811684526005909252604090922054919250163314611dc7576040516301627e2760e61b815260040160405180910390fd5b6003600182015460ff166004811115611de257611de2612cbd565b14611e00576040516337cdefcb60e21b815260040160405180910390fd5b80546001600160601b03168215611eb2576002816001600160601b031681548110611e2d57611e2d61302e565b60009182526020909120600b909102015482546001600160601b039182169250168114611eb257815460028301546001600160601b0390911690611e739060019061305a565b6040516001600160601b038416815288907f736e3f52761298c8c0823e1ebf482ed3c5ecb304f743d2d91a7c006e8e8d7a1f9060200160405180910390a45b81546001600160601b0319166001600160601b0382161782556001808301805460ff191690556002830180549182018155600090815260208120346003909302019182558354604051600160601b9091046001600160a01b03169189917f9c9b64db9e130f48381bf697abf638e73117dbfbfd7a4484f2da3ba188f4187d9190a3867f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b916000604051611f6491906132d0565b60405180910390a2611f768787612317565b50505050505050565b6000546001600160a01b03163314611faa5760405163c383977560e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526004602052604081205460ff166120055760405163e51cf7bf60e01b815260040160405180910390fd5b612010858585611ced565b82101561203057604051630e3360f160e21b815260040160405180910390fd5b6120456001600160a01b0384163330856126bc565b612062576040516312171d8360e31b815260040160405180910390fd5b6120a68686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506122229050565b9695505050505050565b60008060006120be84612798565b5091509150806002836001600160601b0316815481106120e0576120e061302e565b90600052602060002090600b020160040154611ce59190613097565b6000600382815481106121115761211161302e565b600091825260209091206002600390920201015492915050565b6000546001600160a01b031633146121565760405163c383977560e01b815260040160405180910390fd5b50565b6040516001600160a01b03838116602483015260448201839052600091829182919087169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516121b691906132a1565b6000604051808303816000865af19150503d80600081146121f3576040519150601f19603f3d011682016040523d82523d6000602084013e6121f8565b606091505b50915091508180156120a65750805115806120a65750808060200190518101906120a691906132de565b60008061222e85612798565b505060038054600180820183556001600160601b03841633600160601b02177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8385029081019182557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d018054928301815560009081526020902091909302018681556002810180546001600160a01b0319166001600160a01b038a16179055909450919250906122df8489612317565b604051339085907f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a3505050949350505050565b60006003838154811061232c5761232c61302e565b90600052602060002090600302019050600060018260020180549050612352919061305a565b8254600160601b90046001600160a01b03166000908152600660205260408120919250815460ff16600381111561238b5761238b612cbd565b036123a95760405163d8f2465160e01b815260040160405180910390fd5b6001815460ff1660038111156123c1576123c1612cbd565b146126b5576003815460ff1660038111156123de576123de612cbd565b0361252d578460038454600184015460028501546040805192835260ff80831615156020850152610100909204909116151590820152600160601b9091046001600160a01b0316907f45c27c7ea7135714f09b069efa7497d57c38017d4e919c5535ba31dbd5b597e69060600160405180910390a46001810154600282015460405163085dd1c360e21b815260048101889052602481019290925260ff8082161515604484015261010090910416151560648201523090632177470c90608401600060405180830381600087803b1580156124b857600080fd5b505af11580156124cc573d6000803e3d6000fd5b5050604051632b00f57560e11b81526004810188905260248101859052309250635601eaea9150604401600060405180830381600087803b15801561251057600080fd5b505af1158015612524573d6000803e3d6000fd5b505050506126b5565b6002815460ff16600381111561254557612545612cbd565b036126b55760008461255860014361305a565b6040805191406020830152016040516020818303038152906040528051906020012060001c61258791906132fb565b90506004811615600280831615908890875460408051878152861515602082015285151591810191909152600160601b9091046001600160a01b0316907f45c27c7ea7135714f09b069efa7497d57c38017d4e919c5535ba31dbd5b597e69060600160405180910390a460405163085dd1c360e21b81526004810189905260248101849052821515604482015281151560648201523090632177470c90608401600060405180830381600087803b15801561264157600080fd5b505af1158015612655573d6000803e3d6000fd5b5050604051632b00f57560e11b8152600481018b905260248101889052309250635601eaea9150604401600060405180830381600087803b15801561269957600080fd5b505af11580156126ad573d6000803e3d6000fd5b505050505050505b5050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b1790525161272191906132a1565b6000604051808303816000865af19150503d806000811461275e576040519150601f19603f3d011682016040523d82523d6000602084013e612763565b606091505b509150915081801561278d57508051158061278d57508080602001905181019061278d91906132de565b979650505050505050565b600080600060408451106127fe575050506020810151604082015160608301516001600160601b03831615806127d957506002546001600160601b03841610155b156127e357600192505b816000036127f057600391505b806127f9575060015b610d71565b50600193600393508492509050565b828054828255906000526020600020908101928215612848579160200282015b8281111561284857825182559160200191906001019061282d565b506128549291506128d6565b5090565b8260048101928215612848579160200282015b82811115612848578251829060ff1690559160200191906001019061286b565b60405180608001604052806004906020820280368337509192915050565b8260048101928215612848579160200282018281111561284857825182559160200191906001019061282d565b5b8082111561285457600081556001016128d7565b6001600160a01b038116811461215657600080fd5b60006020828403121561291257600080fd5b813561291d816128eb565b9392505050565b801515811461215657600080fd5b6000806040838503121561294557600080fd5b82359150602083013561295781612924565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261298957600080fd5b604051608081018181106001600160401b03821117156129ab576129ab612962565b6040528060808401858111156129c057600080fd5b845b818110156129da5780358352602092830192016129c2565b509195945050505050565b600080600060c084860312156129fa57600080fd5b8335612a05816128eb565b92506020840135612a15816128eb565b9150612a248560408601612978565b90509250925092565b60008060408385031215612a4057600080fd5b8235612a4b816128eb565b946020939093013593505050565b600060208284031215612a6b57600080fd5b5035919050565b60008060008060808587031215612a8857600080fd5b84359350602085013592506040850135612aa181612924565b91506060850135612ab181612924565b939692955090935050565b80356001600160601b0381168114612ad357600080fd5b919050565b600060208284031215612aea57600080fd5b610d4582612abc565b8060005b6004811015611547578151845260209384019390910190600101612af7565b60808101610d488284612af3565b6000806000806000806000610140888a031215612b4057600080fd5b612b4988612abc565b96506020880135612b5981612924565b955060408801359450606088013593506080880135925060a08801359150612b848960c08a01612978565b905092959891949750929550565b60008060408385031215612ba557600080fd5b8235612bb0816128eb565b91506020830135612957816128eb565b600082601f830112612bd157600080fd5b81356001600160401b0380821115612beb57612beb612962565b604051601f8301601f19908116603f01168101908282118183101715612c1357612c13612962565b81604052838152866020858801011115612c2c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612c5f57600080fd5b8235612c6a816128eb565b915060208301356001600160401b03811115612c8557600080fd5b612c9185828601612bc0565b9150509250929050565b60008060408385031215612cae57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b60058110612ce357612ce3612cbd565b9052565b6001600160601b03851681526001600160a01b038416602082015260808101612d136040830185612cd3565b821515606083015295945050505050565b60008060008060808587031215612d3a57600080fd5b8435612d45816128eb565b9350602085013592506040850135612aa181612924565b600080600060608486031215612d7157600080fd5b8335612d7c816128eb565b92506020840135915060408401356001600160401b03811115612d9e57600080fd5b612daa86828701612bc0565b9150509250925092565b60008060408385031215612dc757600080fd5b8235612dd2816128eb565b9150602083013561295781612924565b600080600060608486031215612df757600080fd5b8335612e02816128eb565b925060208401356001600160401b0381168114612e1e57600080fd5b9150604084013560ff81168114612e3457600080fd5b809150509250925092565b60008060408385031215612e5257600080fd5b8235915060208301356001600160401b03811115612c8557600080fd5b60008083601f840112612e8157600080fd5b5081356001600160401b03811115612e9857600080fd5b602083019150836020828501011115612eb057600080fd5b9250929050565b600080600060408486031215612ecc57600080fd5b83356001600160401b03811115612ee257600080fd5b612eee86828701612e6f565b9094509250506020840135612e34816128eb565b60008060008060808587031215612f1857600080fd5b843593506020850135925060408501356001600160401b03811115612f3c57600080fd5b612f4887828801612bc0565b9250506060850135612ab181612924565b60048110612ce357612ce3612cbd565b60808101612f778287612f59565b602082019490945291151560408301521515606090910152919050565b600080600080600060808688031215612fac57600080fd5b8535945060208601356001600160401b03811115612fc957600080fd5b612fd588828901612e6f565b9095509350506040860135612fe9816128eb565b949793965091946060013592915050565b60006020828403121561300c57600080fd5b81356001600160401b0381111561302257600080fd5b611ce584828501612bc0565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610d4857610d48613044565b634e487b7160e01b600052601260045260246000fd5b6000826130925761309261306d565b500490565b8082028115828204841417610d4857610d48613044565b80820180821115610d4857610d48613044565b6000610120820190508715158252602087602084015286604084015285606084015284608084015260a083018460005b600481101561310e578154835291830191600191820191016130f1565b50505050979650505050505050565b60006080820190506131338260ff855416612f59565b60018301546020830152600283015460ff81161515604084015260ff8160081c16151560608401525092915050565b600181815b8085111561319d57816000190482111561318357613183613044565b8085161561319057918102915b93841c9390800290613167565b509250929050565b6000826131b457506001610d48565b816131c157506000610d48565b81600181146131d757600281146131e1576131fd565b6001915050610d48565b60ff8411156131f2576131f2613044565b50506001821b610d48565b5060208310610133831016604e8410600b8410161715613220575081810a610d48565b61322a8383613162565b806000190482111561323e5761323e613044565b029392505050565b6000610d4560ff8416836131a5565b600061012082019050871515825286602083015285604083015284606083015283608083015261278d60a0830184612af3565b60006020828403121561329a57600080fd5b5051919050565b6000825160005b818110156132c257602081860181015185830152016132a8565b506000920191825250919050565b60208101610d488284612cd3565b6000602082840312156132f057600080fd5b815161291d81612924565b60008261330a5761330a61306d565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212204bcdc26480adc94ceb9c089d1af202275da9840934fdb8dead13e3defee11c1164736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106101e95760003560e01c8063564a565d11610113578063d98493f6116100ab578063e6d49cdf1161006f578063e6d49cdf14610727578063f6506db414610767578063f7434ea914610787578063fbf405b0146107a7578063fc6f8f16146107c757600080fd5b8063d98493f614610665578063d9ee095f14610685578063db8a173b14610698578063e2373ab3146106ad578063e4c0aaf41461070757600080fd5b8063564a565d146105175780636736b70c14610547578063751accd0146105675780637934c0be1461058757806382d02237146105a757806386541b24146105c75780638a9bb02a146105e7578063c13517e114610632578063c71f42531461064557600080fd5b80632177470c116101865780632177470c146103ec578063379f0a171461040c5780633cfd118414610442578063405d51ae1461046f57806343818d661461048f57806347cdcc1d146104af5780634f1ef286146104cf57806352d1902d146104e25780635601eaea146104f757600080fd5b8062f5822c146101ee57806301fcf74d146102105780630219da791461024357806305d3177d146102b65780630c340a24146102d65780630e3993a41461030e5780631860592b1461032e5780631c3db16d1461034e5780631f5a0dd21461038b575b600080fd5b3480156101fa57600080fd5b5061020e610209366004612900565b6107e7565b005b34801561021c57600080fd5b5061023061022b366004612932565b610834565b6040519081526020015b60405180910390f35b34801561024f57600080fd5b5061028e61025e366004612900565b60046020526000908152604090205460ff808216916001600160401b0361010082041691600160481b9091041683565b6040805193151584526001600160401b03909216602084015260ff169082015260600161023a565b3480156102c257600080fd5b5061020e6102d13660046129e5565b610990565b3480156102e257600080fd5b506000546102f6906001600160a01b031681565b6040516001600160a01b03909116815260200161023a565b34801561031a57600080fd5b5061020e610329366004612900565b610be9565b34801561033a57600080fd5b50610230610349366004612a2d565b610cf4565b34801561035a57600080fd5b5061036e610369366004612a59565b610d4e565b60408051938452911515602084015215159082015260600161023a565b34801561039757600080fd5b506103ab6103a6366004612a59565b610d78565b604080516001600160601b0390981688529515156020880152948601939093526060850191909152608084015260a0830152151560c082015260e00161023a565b3480156103f857600080fd5b5061020e610407366004612a72565b610dd7565b34801561041857600080fd5b506102f6610427366004612900565b6005602052600090815260409020546001600160a01b031681565b34801561044e57600080fd5b5061046261045d366004612ad8565b610f9f565b60405161023a9190612b16565b34801561047b57600080fd5b5061020e61048a366004612b24565b611009565b34801561049b57600080fd5b5061020e6104aa366004612900565b6111c9565b3480156104bb57600080fd5b5061020e6104ca366004612b92565b61128e565b61020e6104dd366004612c4c565b611321565b3480156104ee57600080fd5b5061023061154e565b34801561050357600080fd5b5061020e610512366004612c9b565b6115ac565b34801561052357600080fd5b50610537610532366004612a59565b61171e565b60405161023a9493929190612ce7565b34801561055357600080fd5b5061020e610562366004612d24565b611773565b34801561057357600080fd5b5061020e610582366004612d5c565b611884565b34801561059357600080fd5b5061020e6105a2366004612db4565b61192e565b3480156105b357600080fd5b5061020e6105c2366004612de2565b6119ad565b3480156105d357600080fd5b5061020e6105e2366004612b24565b611a6a565b3480156105f357600080fd5b50610607610602366004612c9b565b611b5e565b604080518251815260208084015190820152918101516001600160a01b03169082015260600161023a565b610230610640366004612e3f565b611c0b565b34801561065157600080fd5b50610230610660366004612a59565b611c43565b34801561067157600080fd5b50610230610680366004612eb7565b611ced565b61020e610693366004612f02565b611d32565b3480156106a457600080fd5b50600354610230565b3480156106b957600080fd5b506106f76106c8366004612900565b60066020526000908152604090208054600182015460029092015460ff91821692918181169161010090041684565b60405161023a9493929190612f69565b34801561071357600080fd5b5061020e610722366004612900565b611f7f565b34801561073357600080fd5b5061036e610742366004612a59565b6007602052600090815260409020805460019091015460ff8082169161010090041683565b34801561077357600080fd5b50610230610782366004612f94565b611fcc565b34801561079357600080fd5b506102306107a2366004612ffa565b6120b0565b3480156107b357600080fd5b506001546102f6906001600160a01b031681565b3480156107d357600080fd5b506102306107e2366004612a59565b6120fc565b6000546001600160a01b031633146108125760405163c383977560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000806003848154811061084a5761084a61302e565b60009182526020822060026003909202019081018054919350906108709060019061305a565b815481106108805761088061302e565b6000918252602082208454600280546003909402909201945090916001600160601b039091169081106108b5576108b561302e565b90600052602060002090600b020190506000816004015483600001546108db9190613083565b9050851561095e5783546001600160601b031660001901610905576001600160ff1b039450610986565b610910816002613097565b61091b9060016130ae565b82546002805490916001600160601b031690811061093b5761093b61302e565b90600052602060002090600b0201600401546109579190613097565b9450610986565b610969816002613097565b6109749060016130ae565b82600401546109839190613097565b94505b5050505092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806109d9575080546001600160401b03808416911610155b156109f65760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155600080546001600160a01b038088166001600160a01b0319928316178355600180549188169190921617815560028054818452808201909155600b9101027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160601b031916815590604051908082528060200260200182016040528015610aaf578160200160208202803683370190505b508051610ac691600184019160209091019061280d565b50805460ff60601b19168155835160028201556020808501516003830155604080860151600480850191909155606080880151600586015582516080810184526000808252948101859052928301849052820192909252610b2c91600684019190612858565b50805484516020860151604080880151606089015191516001600160601b038616956001957f0c907a651f88974ed0d9423aacc8b998c40eedf39920e2c3bdae0adcc486a76195610b9295600160601b90930460ff1694919390929060068b01906130c1565b60405180910390a350805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001600160a01b0381811660009081526005602052604090205416610c31576001600160a01b038116600090815260056020526040902080546001600160a01b031916331790555b6001600160a01b03818116600090815260056020526040902054163314610c6b576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b0381166000908152600660205260408120805460ff191680825560018083019390935560028201805461ffff19169055909190829082805b0217905550816001600160a01b03167ffe3754ab712090753cf700ac7b99f8a5e0f9c69b698312c2cfd0236b852f83f482604051610ce8919061311d565b60405180910390a25050565b6001600160a01b03821660009081526004602052604081205461010081046001600160401b031690610d3190600160481b900460ff16600a613246565b610d3b9084613097565b610d459190613083565b90505b92915050565b6000818152600760205260409020805460019091015460ff808216916101009004165b9193909250565b60028181548110610d8857600080fd5b60009182526020909120600b9091020180546002820154600383015460048401546005850154600a909501546001600160601b038516965060ff600160601b9095048516959394929391921687565b600060038581548110610dec57610dec61302e565b906000526020600020906003020190508060010160019054906101000a900460ff1615610e2c5760405163c977f8d360e01b815260040160405180910390fd5b8054600160601b90046001600160a01b03908116600090815260056020526040902054163314801590610e5f5750333014155b15610e7d576040516301627e2760e61b815260040160405180910390fd5b60408051606081018252858152841515602080830191825285151583850190815260008a815260079092529084902092518355905160019283018054925161ffff1990931691151561ff001990811692909217610100931515840217905591840180549092161790558154905163188d362b60e11b81526004810187905260248101869052600160601b9091046001600160a01b03169063311a6c5690604401600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b50508254604051878152889350600160601b9091046001600160a01b031691507f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a35050505050565b610fa761288b565b6002826001600160601b031681548110610fc357610fc361302e565b6000918252602090912060408051608081019182905292600b029091016006019060049082845b815481526020019060010190808311610fea5750505050509050919050565b6000546001600160a01b031633146110345760405163c383977560e01b815260040160405180910390fd5b6001600160601b03871661105b57604051631ef4f64960e01b815260040160405180910390fd5b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600b82020180546001600160601b0319166001600160601b038b1617815590916040519080825280602002602001820160405280156110d4578160200160208202803683370190505b5080516110eb91600184019160209091019061280d565b50805460ff60601b1916600160601b89151502178155600281018790556003810186905560048082018690556005820185905561112e90600683019085906128a9565b506002896001600160601b03168154811061114b5761114b61302e565b600091825260208083206001600b909302018201805492830181558352909120018290556040516001600160601b038a169083907f0c907a651f88974ed0d9423aacc8b998c40eedf39920e2c3bdae0adcc486a761906111b6908c908c908c908c908c908c90613255565b60405180910390a3505050505050505050565b6001600160a01b0381811660009081526005602052604090205416611211576001600160a01b038116600090815260056020526040902080546001600160a01b031916331790555b6001600160a01b0381811660009081526005602052604090205416331461124b576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b0381166000908152600660205260408120805460ff19168082556001808301939093556002808301805461ffff19169055919283919083610caa565b6001600160a01b038281166000908152600560205260409020541633146112c8576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b0382811660008181526005602052604080822080546001600160a01b0319169486169485179055513392917ff512a4524e61d860055823df1f2a5f33de24eb2a03dc3de501015ad501d4e36f91a45050565b61132a8261212b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113a857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661139c6000805160206133108339815191525490565b6001600160a01b031614155b156113c65760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611420575060408051601f3d908101601f1916820190925261141d91810190613288565b60015b61144d57604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b600080516020613310833981519152811461147e57604051632a87526960e21b815260048101829052602401611444565b6000805160206133108339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611549576000836001600160a01b0316836040516114e591906132a1565b600060405180830381855af49150503d8060008114611520576040519150601f19603f3d011682016040523d82523d6000602084013e611525565b606091505b5050905080611547576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115995760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061331083398151915290565b6000600383815481106115c1576115c161302e565b60009182526020808320600390920290910180546001600160a01b03600160601b90910481168452600590925260409092205491925016806116165760405163f4612fe560e01b815260040160405180910390fd5b600082600201848154811061162d5761162d61302e565b906000526020600020906003020190506000816000015490508082600101600082825461165a91906130ae565b909155505060028201546001600160a01b031661169c576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050506116b7565b60028201546116b5906001600160a01b03168483612159565b505b60028201546040805160018152600060208201529081018390526001600160a01b03918216606082015286918891908616907f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e79060800160405180910390a4505050505050565b6003818154811061172e57600080fd5b6000918252602090912060039091020180546001909101546001600160601b0382169250600160601b9091046001600160a01b03169060ff8082169161010090041684565b6001600160a01b03848116600090815260056020526040902054166117bb576001600160a01b038416600090815260056020526040902080546001600160a01b031916331790555b6001600160a01b038481166000908152600560205260409020541633146117f5576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b03841660008181526006602052604090819020805460028201805460ff1990921660031783556001830188905561ffff1990911686151561ff001916176101008615150217905590519091907ffe3754ab712090753cf700ac7b99f8a5e0f9c69b698312c2cfd0236b852f83f49061187590849061311d565b60405180910390a25050505050565b6000546001600160a01b031633146118af5760405163c383977560e01b815260040160405180910390fd5b6000836001600160a01b031683836040516118ca91906132a1565b60006040518083038185875af1925050503d8060008114611907576040519150601f19603f3d011682016040523d82523d6000602084013e61190c565b606091505b5050905080611547576040516322092f2f60e11b815260040160405180910390fd5b6000546001600160a01b031633146119595760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f541615e167511d757a7067a700eb54431b256bb458dfdce0ac58bf2ed0aefd4491a35050565b6000546001600160a01b031633146119d85760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038316600081815260046020908152604091829020805469ffffffffffffffffff0019166101006001600160401b03881690810260ff60481b191691909117600160481b60ff8816908102919091179092558351908152918201527fe6996b7f03e9bd02228b99d3d946932e3197f505f60542c4cfbc919441d8a4e6910160405180910390a2505050565b6000546001600160a01b03163314611a955760405163c383977560e01b815260040160405180910390fd5b60006002886001600160601b031681548110611ab357611ab361302e565b60009182526020909120600b9091020160028101879055805460ff60601b1916600160601b8915150217815560038101869055600480820186905560058201859055909150611b0890600683019084906128a9565b50876001600160601b03167f709b1f5fda58af9a4f52dacd1ec404840a8148455700cce155a2bd8cf127ef1a888888888888604051611b4c96959493929190613255565b60405180910390a25050505050505050565b611b8b6040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b60038381548110611b9e57611b9e61302e565b90600052602060002090600302016002018281548110611bc057611bc061302e565b6000918252602091829020604080516060810182526003909302909101805483526001810154938301939093526002909201546001600160a01b031691810191909152905092915050565b6000611c16826120b0565b341015611c3657604051630e3360f160e21b815260040160405180910390fd5b610d458383600034612222565b60008060038381548110611c5957611c5961302e565b600091825260208220600390910201805460028054929450916001600160601b03909116908110611c8c57611c8c61302e565b90600052602060002090600b0201905080600401548260020160018460020180549050611cb9919061305a565b81548110611cc957611cc961302e565b906000526020600020906003020160000154611ce59190613083565b949350505050565b6000611ce58261034986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120b092505050565b611d3c8482610834565b341015611d5c57604051633191f8f160e01b815260040160405180910390fd5b600060038581548110611d7157611d7161302e565b6000918252602080832060039092029091018054600160601b90046001600160a01b0390811684526005909252604090922054919250163314611dc7576040516301627e2760e61b815260040160405180910390fd5b6003600182015460ff166004811115611de257611de2612cbd565b14611e00576040516337cdefcb60e21b815260040160405180910390fd5b80546001600160601b03168215611eb2576002816001600160601b031681548110611e2d57611e2d61302e565b60009182526020909120600b909102015482546001600160601b039182169250168114611eb257815460028301546001600160601b0390911690611e739060019061305a565b6040516001600160601b038416815288907f736e3f52761298c8c0823e1ebf482ed3c5ecb304f743d2d91a7c006e8e8d7a1f9060200160405180910390a45b81546001600160601b0319166001600160601b0382161782556001808301805460ff191690556002830180549182018155600090815260208120346003909302019182558354604051600160601b9091046001600160a01b03169189917f9c9b64db9e130f48381bf697abf638e73117dbfbfd7a4484f2da3ba188f4187d9190a3867f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b916000604051611f6491906132d0565b60405180910390a2611f768787612317565b50505050505050565b6000546001600160a01b03163314611faa5760405163c383977560e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526004602052604081205460ff166120055760405163e51cf7bf60e01b815260040160405180910390fd5b612010858585611ced565b82101561203057604051630e3360f160e21b815260040160405180910390fd5b6120456001600160a01b0384163330856126bc565b612062576040516312171d8360e31b815260040160405180910390fd5b6120a68686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506122229050565b9695505050505050565b60008060006120be84612798565b5091509150806002836001600160601b0316815481106120e0576120e061302e565b90600052602060002090600b020160040154611ce59190613097565b6000600382815481106121115761211161302e565b600091825260209091206002600390920201015492915050565b6000546001600160a01b031633146121565760405163c383977560e01b815260040160405180910390fd5b50565b6040516001600160a01b03838116602483015260448201839052600091829182919087169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516121b691906132a1565b6000604051808303816000865af19150503d80600081146121f3576040519150601f19603f3d011682016040523d82523d6000602084013e6121f8565b606091505b50915091508180156120a65750805115806120a65750808060200190518101906120a691906132de565b60008061222e85612798565b505060038054600180820183556001600160601b03841633600160601b02177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8385029081019182557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d018054928301815560009081526020902091909302018681556002810180546001600160a01b0319166001600160a01b038a16179055909450919250906122df8489612317565b604051339085907f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a3505050949350505050565b60006003838154811061232c5761232c61302e565b90600052602060002090600302019050600060018260020180549050612352919061305a565b8254600160601b90046001600160a01b03166000908152600660205260408120919250815460ff16600381111561238b5761238b612cbd565b036123a95760405163d8f2465160e01b815260040160405180910390fd5b6001815460ff1660038111156123c1576123c1612cbd565b146126b5576003815460ff1660038111156123de576123de612cbd565b0361252d578460038454600184015460028501546040805192835260ff80831615156020850152610100909204909116151590820152600160601b9091046001600160a01b0316907f45c27c7ea7135714f09b069efa7497d57c38017d4e919c5535ba31dbd5b597e69060600160405180910390a46001810154600282015460405163085dd1c360e21b815260048101889052602481019290925260ff8082161515604484015261010090910416151560648201523090632177470c90608401600060405180830381600087803b1580156124b857600080fd5b505af11580156124cc573d6000803e3d6000fd5b5050604051632b00f57560e11b81526004810188905260248101859052309250635601eaea9150604401600060405180830381600087803b15801561251057600080fd5b505af1158015612524573d6000803e3d6000fd5b505050506126b5565b6002815460ff16600381111561254557612545612cbd565b036126b55760008461255860014361305a565b6040805191406020830152016040516020818303038152906040528051906020012060001c61258791906132fb565b90506004811615600280831615908890875460408051878152861515602082015285151591810191909152600160601b9091046001600160a01b0316907f45c27c7ea7135714f09b069efa7497d57c38017d4e919c5535ba31dbd5b597e69060600160405180910390a460405163085dd1c360e21b81526004810189905260248101849052821515604482015281151560648201523090632177470c90608401600060405180830381600087803b15801561264157600080fd5b505af1158015612655573d6000803e3d6000fd5b5050604051632b00f57560e11b8152600481018b905260248101889052309250635601eaea9150604401600060405180830381600087803b15801561269957600080fd5b505af11580156126ad573d6000803e3d6000fd5b505050505050505b5050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b1790525161272191906132a1565b6000604051808303816000865af19150503d806000811461275e576040519150601f19603f3d011682016040523d82523d6000602084013e612763565b606091505b509150915081801561278d57508051158061278d57508080602001905181019061278d91906132de565b979650505050505050565b600080600060408451106127fe575050506020810151604082015160608301516001600160601b03831615806127d957506002546001600160601b03841610155b156127e357600192505b816000036127f057600391505b806127f9575060015b610d71565b50600193600393508492509050565b828054828255906000526020600020908101928215612848579160200282015b8281111561284857825182559160200191906001019061282d565b506128549291506128d6565b5090565b8260048101928215612848579160200282015b82811115612848578251829060ff1690559160200191906001019061286b565b60405180608001604052806004906020820280368337509192915050565b8260048101928215612848579160200282018281111561284857825182559160200191906001019061282d565b5b8082111561285457600081556001016128d7565b6001600160a01b038116811461215657600080fd5b60006020828403121561291257600080fd5b813561291d816128eb565b9392505050565b801515811461215657600080fd5b6000806040838503121561294557600080fd5b82359150602083013561295781612924565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261298957600080fd5b604051608081018181106001600160401b03821117156129ab576129ab612962565b6040528060808401858111156129c057600080fd5b845b818110156129da5780358352602092830192016129c2565b509195945050505050565b600080600060c084860312156129fa57600080fd5b8335612a05816128eb565b92506020840135612a15816128eb565b9150612a248560408601612978565b90509250925092565b60008060408385031215612a4057600080fd5b8235612a4b816128eb565b946020939093013593505050565b600060208284031215612a6b57600080fd5b5035919050565b60008060008060808587031215612a8857600080fd5b84359350602085013592506040850135612aa181612924565b91506060850135612ab181612924565b939692955090935050565b80356001600160601b0381168114612ad357600080fd5b919050565b600060208284031215612aea57600080fd5b610d4582612abc565b8060005b6004811015611547578151845260209384019390910190600101612af7565b60808101610d488284612af3565b6000806000806000806000610140888a031215612b4057600080fd5b612b4988612abc565b96506020880135612b5981612924565b955060408801359450606088013593506080880135925060a08801359150612b848960c08a01612978565b905092959891949750929550565b60008060408385031215612ba557600080fd5b8235612bb0816128eb565b91506020830135612957816128eb565b600082601f830112612bd157600080fd5b81356001600160401b0380821115612beb57612beb612962565b604051601f8301601f19908116603f01168101908282118183101715612c1357612c13612962565b81604052838152866020858801011115612c2c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612c5f57600080fd5b8235612c6a816128eb565b915060208301356001600160401b03811115612c8557600080fd5b612c9185828601612bc0565b9150509250929050565b60008060408385031215612cae57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b60058110612ce357612ce3612cbd565b9052565b6001600160601b03851681526001600160a01b038416602082015260808101612d136040830185612cd3565b821515606083015295945050505050565b60008060008060808587031215612d3a57600080fd5b8435612d45816128eb565b9350602085013592506040850135612aa181612924565b600080600060608486031215612d7157600080fd5b8335612d7c816128eb565b92506020840135915060408401356001600160401b03811115612d9e57600080fd5b612daa86828701612bc0565b9150509250925092565b60008060408385031215612dc757600080fd5b8235612dd2816128eb565b9150602083013561295781612924565b600080600060608486031215612df757600080fd5b8335612e02816128eb565b925060208401356001600160401b0381168114612e1e57600080fd5b9150604084013560ff81168114612e3457600080fd5b809150509250925092565b60008060408385031215612e5257600080fd5b8235915060208301356001600160401b03811115612c8557600080fd5b60008083601f840112612e8157600080fd5b5081356001600160401b03811115612e9857600080fd5b602083019150836020828501011115612eb057600080fd5b9250929050565b600080600060408486031215612ecc57600080fd5b83356001600160401b03811115612ee257600080fd5b612eee86828701612e6f565b9094509250506020840135612e34816128eb565b60008060008060808587031215612f1857600080fd5b843593506020850135925060408501356001600160401b03811115612f3c57600080fd5b612f4887828801612bc0565b9250506060850135612ab181612924565b60048110612ce357612ce3612cbd565b60808101612f778287612f59565b602082019490945291151560408301521515606090910152919050565b600080600080600060808688031215612fac57600080fd5b8535945060208601356001600160401b03811115612fc957600080fd5b612fd588828901612e6f565b9095509350506040860135612fe9816128eb565b949793965091946060013592915050565b60006020828403121561300c57600080fd5b81356001600160401b0381111561302257600080fd5b611ce584828501612bc0565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610d4857610d48613044565b634e487b7160e01b600052601260045260246000fd5b6000826130925761309261306d565b500490565b8082028115828204841417610d4857610d48613044565b80820180821115610d4857610d48613044565b6000610120820190508715158252602087602084015286604084015285606084015284608084015260a083018460005b600481101561310e578154835291830191600191820191016130f1565b50505050979650505050505050565b60006080820190506131338260ff855416612f59565b60018301546020830152600283015460ff81161515604084015260ff8160081c16151560608401525092915050565b600181815b8085111561319d57816000190482111561318357613183613044565b8085161561319057918102915b93841c9390800290613167565b509250929050565b6000826131b457506001610d48565b816131c157506000610d48565b81600181146131d757600281146131e1576131fd565b6001915050610d48565b60ff8411156131f2576131f2613044565b50506001821b610d48565b5060208310610133831016604e8410600b8410161715613220575081810a610d48565b61322a8383613162565b806000190482111561323e5761323e613044565b029392505050565b6000610d4560ff8416836131a5565b600061012082019050871515825286602083015285604083015284606083015283608083015261278d60a0830184612af3565b60006020828403121561329a57600080fd5b5051919050565b6000825160005b818110156132c257602081860181015185830152016132a8565b506000920191825250919050565b60208101610d488284612cd3565b6000602082840312156132f057600080fd5b815161291d81612924565b60008261330a5761330a61306d565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212204bcdc26480adc94ceb9c089d1af202275da9840934fdb8dead13e3defee11c1164736f6c63430008180033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "AcceptedFeeToken(address,bool)": { - "details": "To be emitted when an ERC20 token is added or removed as a method to pay fees.", - "params": { - "_accepted": "Whether the token is accepted or not.", - "_token": "The ERC20 token." - } - }, - "DisputeCreation(uint256,address)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_arbitrable": "The contract which created the dispute.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "NewCurrencyRate(address,uint64,uint8)": { - "details": "To be emitted when the fee for a particular ERC20 token is updated.", - "params": { - "_feeToken": "The ERC20 token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrable": "The arbitrable receiving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - }, - "Upgraded(address)": { - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "appeal(uint256,uint256,bytes,bool)": { - "details": "Appeals the ruling of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute.", - "_jump": "Whether to jump to the parent court or not." - } - }, - "appealCost(uint256,bool)": { - "details": "Gets the cost of appealing a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute.", - "_jump": "Whether to jump to the parent court or not." - }, - "returns": { - "cost": "The appeal cost." - } - }, - "arbitrationCost(bytes)": { - "details": "Compute the cost of arbitration denominated in ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes)." - }, - "returns": { - "cost": "The arbitration cost in ETH." - } - }, - "arbitrationCost(bytes,address)": { - "details": "Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeToken": "The ERC20 token used to pay fees." - }, - "returns": { - "cost": "The arbitration cost in `_feeToken`." - } - }, - "changeAcceptedFeeTokens(address,bool)": { - "details": "Changes the supported fee tokens.", - "params": { - "_accepted": "Whether the token is supported or not as a method of fee payment.", - "_feeToken": "The fee token." - } - }, - "changeCurrencyRates(address,uint64,uint8)": { - "details": "Changes the currency rate of a fee token.", - "params": { - "_feeToken": "The fee token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "changePinakion(address)": { - "details": "Changes the `pinakion` storage variable.", - "params": { - "_pinakion": "The new value for the `pinakion` storage variable." - } - }, - "constructor": { - "details": "Constructor, initializing the implementation to reduce attack surface." - }, - "createCourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4])": { - "details": "Creates a court under a specified parent court.", - "params": { - "_alpha": "The `alpha` property value of the court.", - "_feeForJuror": "The `feeForJuror` property value of the court.", - "_hiddenVotes": "The `hiddenVotes` property value of the court.", - "_jurorsForCourtJump": "The `jurorsForCourtJump` property value of the court.", - "_minStake": "The `minStake` property value of the court.", - "_parent": "The `parent` property value of the court.", - "_timesPerPeriod": "The `timesPerPeriod` property value of the court." - } - }, - "createDispute(uint256,bytes)": { - "details": "Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "createDispute(uint256,bytes,address,uint256)": { - "details": "Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeAmount": "Amount of the ERC20 token used to pay fees.", - "_feeToken": "The ERC20 token used to pay fees.", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "execute(uint256,uint256)": { - "details": "Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.", - "params": { - "_disputeID": "The ID of the dispute.", - "_round": "The appeal round." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "executeRuling(uint256,uint256,bool,bool)": { - "details": "Executes a specified dispute's ruling.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "getNumberOfVotes(uint256)": { - "details": "Gets the number of votes permitted for the specified dispute in the latest round.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "initialize(address,address,uint256[4])": { - "details": "Initializer (constructor equivalent for upgradable contracts).", - "params": { - "_courtParameters": "Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).", - "_governor": "The governor's address.", - "_pinakion": "The address of the token contract." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "title": "KlerosCoreRuler Core arbitrator contract for development and testing purposes.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ], - "InvalidImplementation(address)": [ - { - "notice": "The `implementation` is not UUPS-compliant" - } - ] - }, - "events": { - "Upgraded(address)": { - "notice": "Emitted when the `implementation` has been successfully upgraded." - } - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 16346, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 16349, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "pinakion", - "offset": 0, - "slot": "1", - "type": "t_contract(IERC20)1755" - }, - { - "astId": 16353, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "courts", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Court)16297_storage)dyn_storage" - }, - { - "astId": 16357, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "disputes", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(Dispute)16312_storage)dyn_storage" - }, - { - "astId": 16363, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "currencyRates", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_contract(IERC20)1755,t_struct(CurrencyRate)16327_storage)" - }, - { - "astId": 16368, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "rulers", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_contract(IArbitrableV2)21759,t_address)" - }, - { - "astId": 16374, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "settings", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_contract(IArbitrableV2)21759,t_struct(RulerSettings)16275_storage)" - }, - { - "astId": 16379, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "rulingResults", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_struct(RulingResult)16334_storage)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Court)16297_storage)dyn_storage": { - "base": "t_struct(Court)16297_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreRuler.Court[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Dispute)16312_storage)dyn_storage": { - "base": "t_struct(Dispute)16312_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreRuler.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)16320_storage)dyn_storage": { - "base": "t_struct(Round)16320_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreRuler.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)4_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[4]", - "numberOfBytes": "128" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IArbitrableV2)21759": { - "encoding": "inplace", - "label": "contract IArbitrableV2", - "numberOfBytes": "20" - }, - "t_contract(IERC20)1755": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_enum(Period)16265": { - "encoding": "inplace", - "label": "enum KlerosCoreRuler.Period", - "numberOfBytes": "1" - }, - "t_enum(RulingMode)16259": { - "encoding": "inplace", - "label": "enum KlerosCoreRuler.RulingMode", - "numberOfBytes": "1" - }, - "t_mapping(t_contract(IArbitrableV2)21759,t_address)": { - "encoding": "mapping", - "key": "t_contract(IArbitrableV2)21759", - "label": "mapping(contract IArbitrableV2 => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_contract(IArbitrableV2)21759,t_struct(RulerSettings)16275_storage)": { - "encoding": "mapping", - "key": "t_contract(IArbitrableV2)21759", - "label": "mapping(contract IArbitrableV2 => struct KlerosCoreRuler.RulerSettings)", - "numberOfBytes": "32", - "value": "t_struct(RulerSettings)16275_storage" - }, - "t_mapping(t_contract(IERC20)1755,t_struct(CurrencyRate)16327_storage)": { - "encoding": "mapping", - "key": "t_contract(IERC20)1755", - "label": "mapping(contract IERC20 => struct KlerosCoreRuler.CurrencyRate)", - "numberOfBytes": "32", - "value": "t_struct(CurrencyRate)16327_storage" - }, - "t_mapping(t_uint256,t_struct(RulingResult)16334_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => struct KlerosCoreRuler.RulingResult)", - "numberOfBytes": "32", - "value": "t_struct(RulingResult)16334_storage" - }, - "t_struct(Court)16297_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreRuler.Court", - "members": [ - { - "astId": 16277, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "parent", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 16279, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "hiddenVotes", - "offset": 12, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 16282, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "children", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 16284, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "minStake", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 16286, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "alpha", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 16288, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "feeForJuror", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 16290, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "jurorsForCourtJump", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 16294, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "timesPerPeriod", - "offset": 0, - "slot": "6", - "type": "t_array(t_uint256)4_storage" - }, - { - "astId": 16296, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "disabled", - "offset": 0, - "slot": "10", - "type": "t_bool" - } - ], - "numberOfBytes": "352" - }, - "t_struct(CurrencyRate)16327_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreRuler.CurrencyRate", - "members": [ - { - "astId": 16322, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "feePaymentAccepted", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 16324, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "rateInEth", - "offset": 1, - "slot": "0", - "type": "t_uint64" - }, - { - "astId": 16326, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "rateDecimals", - "offset": 9, - "slot": "0", - "type": "t_uint8" - } - ], - "numberOfBytes": "32" - }, - "t_struct(Dispute)16312_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreRuler.Dispute", - "members": [ - { - "astId": 16299, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "courtID", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 16302, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "arbitrated", - "offset": 12, - "slot": "0", - "type": "t_contract(IArbitrableV2)21759" - }, - { - "astId": 16305, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "period", - "offset": 0, - "slot": "1", - "type": "t_enum(Period)16265" - }, - { - "astId": 16307, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "ruled", - "offset": 1, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 16311, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "rounds", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Round)16320_storage)dyn_storage" - } - ], - "numberOfBytes": "96" - }, - "t_struct(Round)16320_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreRuler.Round", - "members": [ - { - "astId": 16314, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "totalFeesForJurors", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 16316, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "sumFeeRewardPaid", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 16319, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "feeToken", - "offset": 0, - "slot": "2", - "type": "t_contract(IERC20)1755" - } - ], - "numberOfBytes": "96" - }, - "t_struct(RulerSettings)16275_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreRuler.RulerSettings", - "members": [ - { - "astId": 16268, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "rulingMode", - "offset": 0, - "slot": "0", - "type": "t_enum(RulingMode)16259" - }, - { - "astId": 16270, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "presetRuling", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 16272, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "presetTied", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 16274, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "presetOverridden", - "offset": 1, - "slot": "2", - "type": "t_bool" - } - ], - "numberOfBytes": "96" - }, - "t_struct(RulingResult)16334_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreRuler.RulingResult", - "members": [ - { - "astId": 16329, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "ruling", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 16331, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "tied", - "offset": 0, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 16333, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "overridden", - "offset": 1, - "slot": "1", - "type": "t_bool" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/arbitrum/KlerosCoreRuler_Proxy.json b/contracts/deployments/arbitrum/KlerosCoreRuler_Proxy.json deleted file mode 100644 index 89a258aaa..000000000 --- a/contracts/deployments/arbitrum/KlerosCoreRuler_Proxy.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "address": "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x467a826ff2b4ec23bed9936441307123e1609acf8ce0cf70f4fffe7c2d25671f", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", - "transactionIndex": 2, - "gasUsed": "314451", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000100004000000000000000000000000000060008000000000000000000000000220000000000000000000800000080000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000060000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x905e9059a1f41a82e3c5c67e027ff256285596bc1cef98acdbd330f043a8a44d", - "transactionHash": "0x467a826ff2b4ec23bed9936441307123e1609acf8ce0cf70f4fffe7c2d25671f", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 286701284, - "transactionHash": "0x467a826ff2b4ec23bed9936441307123e1609acf8ce0cf70f4fffe7c2d25671f", - "address": "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", - "topics": [ - "0x0c907a651f88974ed0d9423aacc8b998c40eedf39920e2c3bdae0adcc486a761", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 0, - "blockHash": "0x905e9059a1f41a82e3c5c67e027ff256285596bc1cef98acdbd330f043a8a44d" - }, - { - "transactionIndex": 2, - "blockNumber": 286701284, - "transactionHash": "0x467a826ff2b4ec23bed9936441307123e1609acf8ce0cf70f4fffe7c2d25671f", - "address": "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 1, - "blockHash": "0x905e9059a1f41a82e3c5c67e027ff256285596bc1cef98acdbd330f043a8a44d" - } - ], - "blockNumber": 286701284, - "cumulativeGasUsed": "348983", - "status": 1, - "byzantium": true - }, - "args": [ - "0x85093b5EDa4F2e2E2fEDae34Da91239D6a08e324", - "0x05d3177d000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000330bd769382cfc6d50175903434ccc8d206dcae500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000010" - ], - "numDeployments": 1, - "solcInputHash": "072c3d36aa3704de09a27a044cf00231", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"KlerosCoreRulerProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212205e24db8a42d0caaa77ce845dfb341502dc3b700c5ccf0c51c4cf914535a4a64564736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212205e24db8a42d0caaa77ce845dfb341502dc3b700c5ccf0c51c4cf914535a4a64564736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/KlerosCoreSnapshotProxy.json b/contracts/deployments/arbitrum/KlerosCoreSnapshotProxy.json deleted file mode 100644 index 69426d3f2..000000000 --- a/contracts/deployments/arbitrum/KlerosCoreSnapshotProxy.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "address": "0xEF719a5B3352F607e6C4E17b7e0cDAd8322fEC95", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract IKlerosCore", - "name": "_core", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IKlerosCore", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract IKlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x9519002826064774768f0756c58d55c3f908265e0437de0cb6794f193df7bab4", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xEF719a5B3352F607e6C4E17b7e0cDAd8322fEC95", - "transactionIndex": 2, - "gasUsed": "381513", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x377819384e975cdff6f1207252d20ff63dae97c6e6f5e30a0ef4c0690e05362e", - "transactionHash": "0x9519002826064774768f0756c58d55c3f908265e0437de0cb6794f193df7bab4", - "logs": [], - "blockNumber": 303002159, - "cumulativeGasUsed": "1057838", - "status": 1, - "byzantium": true - }, - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0x991d2df165670b9cac3B022f4B68D65b664222ea" - ], - "numDeployments": 1, - "solcInputHash": "ede3f7f4426109631936df3b8acee8f2", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract IKlerosCore\",\"name\":\"_core\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalStaked\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IKlerosCore\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract IKlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"balanceOf(address)\":{\"details\":\"Returns the amount of PNK staked in KlerosV2 for a particular address. Note: Proxy doesn't need to differentiate between courts so we pass 0 as courtID.\",\"params\":{\"_account\":\"The address to query.\"},\"returns\":{\"totalStaked\":\"Total amount staked in V2 by the address.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_core\":\"KlerosCore to read the balance from.\",\"_governor\":\"The governor of the contract.\"}}},\"title\":\"KlerosCoreSnapshotProxy Proxy contract for V2 that exposes staked PNK with balanceOf() function for Snapshot voting.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/view/KlerosCoreSnapshotProxy.sol\":\"KlerosCoreSnapshotProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake,\\n bool _alreadyTransferred\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(address _account, uint256 _relativeAmount) external;\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n}\\n\",\"keccak256\":\"0x18a4ff126bb51e7b5b0e3fbff7cf0dbbcfff7195ad79307e69cdbc9226e63502\",\"license\":\"MIT\"},\"src/arbitration/view/KlerosCoreSnapshotProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport {ISortitionModule} from \\\"../interfaces/ISortitionModule.sol\\\";\\n\\ninterface IKlerosCore {\\n function sortitionModule() external view returns (ISortitionModule);\\n}\\n\\n/// @title KlerosCoreSnapshotProxy\\n/// Proxy contract for V2 that exposes staked PNK with balanceOf() function for Snapshot voting.\\ncontract KlerosCoreSnapshotProxy {\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n IKlerosCore public core;\\n address public governor;\\n string public constant name = \\\"Staked Pinakion\\\";\\n string public constant symbol = \\\"stPNK\\\";\\n uint8 public constant decimals = 18;\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _governor The governor of the contract.\\n /// @param _core KlerosCore to read the balance from.\\n constructor(address _governor, IKlerosCore _core) {\\n governor = _governor;\\n core = _core;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(IKlerosCore _core) external onlyByGovernor {\\n core = _core;\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Returns the amount of PNK staked in KlerosV2 for a particular address.\\n /// Note: Proxy doesn't need to differentiate between courts so we pass 0 as courtID.\\n /// @param _account The address to query.\\n /// @return totalStaked Total amount staked in V2 by the address.\\n function balanceOf(address _account) external view returns (uint256 totalStaked) {\\n (totalStaked, , , ) = core.sortitionModule().getJurorBalance(_account, 0);\\n }\\n}\\n\",\"keccak256\":\"0xf9516838d21bc8b4d8776d8d8b0b17d46ebb3d0940c055c09944f7f35adfd99d\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x5bbda7c304b3681b90feae33be694d04dc129edd60e1d07cb593b895fdc9cd4e\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161053338038061053383398101604081905261002f91610078565b600180546001600160a01b039384166001600160a01b031991821617909155600080549290931691161790556100b2565b6001600160a01b038116811461007557600080fd5b50565b6000806040838503121561008b57600080fd5b825161009681610060565b60208401519092506100a781610060565b809150509250929050565b610472806100c16000396000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c806306fdde031461007d5780630c340a24146100c1578063313ce567146100ec57806370a08231146101065780638e4264601461012757806395d89b411461013c578063e4c0aaf414610160578063f2f4eb2614610173575b600080fd5b6100ab6040518060400160405280600f81526020016e29ba30b5b2b2102834b730b5b4b7b760891b81525081565b6040516100b8919061031c565b60405180910390f35b6001546100d4906001600160a01b031681565b6040516001600160a01b0390911681526020016100b8565b6100f4601281565b60405160ff90911681526020016100b8565b610119610114366004610383565b610186565b6040519081526020016100b8565b61013a610135366004610383565b61027b565b005b6100ab604051806040016040528060058152602001647374504e4b60d81b81525081565b61013a61016e366004610383565b6102d0565b6000546100d4906001600160a01b031681565b60008060009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fe91906103a7565b604051631a383be960e31b81526001600160a01b03848116600483015260006024830152919091169063d1c1df4890604401608060405180830381865afa15801561024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027191906103c4565b5091949350505050565b6001546001600160a01b031633146102ae5760405162461bcd60e51b81526004016102a5906103fa565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146102fa5760405162461bcd60e51b81526004016102a5906103fa565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006020808352835180602085015260005b8181101561034a5785810183015185820160400152820161032e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461038057600080fd5b50565b60006020828403121561039557600080fd5b81356103a08161036b565b9392505050565b6000602082840312156103b957600080fd5b81516103a08161036b565b600080600080608085870312156103da57600080fd5b505082516020840151604085015160609095015191969095509092509050565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b60608201526080019056fea2646970667358221220ae7b8da51562210a09a90e77fc37c7a9669fa0ff5f919ec51b43ac365aace78464736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c806306fdde031461007d5780630c340a24146100c1578063313ce567146100ec57806370a08231146101065780638e4264601461012757806395d89b411461013c578063e4c0aaf414610160578063f2f4eb2614610173575b600080fd5b6100ab6040518060400160405280600f81526020016e29ba30b5b2b2102834b730b5b4b7b760891b81525081565b6040516100b8919061031c565b60405180910390f35b6001546100d4906001600160a01b031681565b6040516001600160a01b0390911681526020016100b8565b6100f4601281565b60405160ff90911681526020016100b8565b610119610114366004610383565b610186565b6040519081526020016100b8565b61013a610135366004610383565b61027b565b005b6100ab604051806040016040528060058152602001647374504e4b60d81b81525081565b61013a61016e366004610383565b6102d0565b6000546100d4906001600160a01b031681565b60008060009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fe91906103a7565b604051631a383be960e31b81526001600160a01b03848116600483015260006024830152919091169063d1c1df4890604401608060405180830381865afa15801561024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027191906103c4565b5091949350505050565b6001546001600160a01b031633146102ae5760405162461bcd60e51b81526004016102a5906103fa565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146102fa5760405162461bcd60e51b81526004016102a5906103fa565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006020808352835180602085015260005b8181101561034a5785810183015185820160400152820161032e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461038057600080fd5b50565b60006020828403121561039557600080fd5b81356103a08161036b565b9392505050565b6000602082840312156103b957600080fd5b81516103a08161036b565b600080600080608085870312156103da57600080fd5b505082516020840151604085015160609095015191969095509092509050565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b60608201526080019056fea2646970667358221220ae7b8da51562210a09a90e77fc37c7a9669fa0ff5f919ec51b43ac365aace78464736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": { - "balanceOf(address)": { - "details": "Returns the amount of PNK staked in KlerosV2 for a particular address. Note: Proxy doesn't need to differentiate between courts so we pass 0 as courtID.", - "params": { - "_account": "The address to query." - }, - "returns": { - "totalStaked": "Total amount staked in V2 by the address." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "details": "Constructor", - "params": { - "_core": "KlerosCore to read the balance from.", - "_governor": "The governor of the contract." - } - } - }, - "title": "KlerosCoreSnapshotProxy Proxy contract for V2 that exposes staked PNK with balanceOf() function for Snapshot voting.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 216, - "contract": "src/arbitration/view/KlerosCoreSnapshotProxy.sol:KlerosCoreSnapshotProxy", - "label": "core", - "offset": 0, - "slot": "0", - "type": "t_contract(IKlerosCore)212" - }, - { - "astId": 218, - "contract": "src/arbitration/view/KlerosCoreSnapshotProxy.sol:KlerosCoreSnapshotProxy", - "label": "governor", - "offset": 0, - "slot": "1", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_contract(IKlerosCore)212": { - "encoding": "inplace", - "label": "contract IKlerosCore", - "numberOfBytes": "20" - } - } - } -} diff --git a/contracts/deployments/arbitrum/KlerosCore_Implementation.json b/contracts/deployments/arbitrum/KlerosCore_Implementation.json deleted file mode 100644 index 46bc67163..000000000 --- a/contracts/deployments/arbitrum/KlerosCore_Implementation.json +++ /dev/null @@ -1,2979 +0,0 @@ -{ - "address": "0xC1210493804eEF123096F9581Ee82B915150E54c", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "AppealPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrableNotWhitelisted", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "CannotDisableClassicDK", - "type": "error" - }, - { - "inputs": [], - "name": "CommitPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitNotSupportedByCourt", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitOnly", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "DisputePeriodIsFinal", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeStillDrawing", - "type": "error" - }, - { - "inputs": [], - "name": "EvidenceNotPassedAndNotAppeal", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GuardianOrGovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDisputKitParent", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "MinStakeLowerThanParentCourt", - "type": "error" - }, - { - "inputs": [], - "name": "MustSupportDisputeKitClassic", - "type": "error" - }, - { - "inputs": [], - "name": "NotEligibleForStaking", - "type": "error" - }, - { - "inputs": [], - "name": "NotEvidencePeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotExecutionPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "SortitionModuleOnly", - "type": "error" - }, - { - "inputs": [], - "name": "StakingInTooManyCourts", - "type": "error" - }, - { - "inputs": [], - "name": "StakingLessThanCourtMinStake", - "type": "error" - }, - { - "inputs": [], - "name": "StakingMoreThanMaxStakePerJuror", - "type": "error" - }, - { - "inputs": [], - "name": "StakingMoreThanMaxTotalStaked", - "type": "error" - }, - { - "inputs": [], - "name": "StakingNotPossibleInThisCourt", - "type": "error" - }, - { - "inputs": [], - "name": "StakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "StakingZeroWhenNoStake", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnstakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "inputs": [], - "name": "UnsupportedDisputeKit", - "type": "error" - }, - { - "inputs": [], - "name": "VotePeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "WhenNotPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WhenPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WrongDisputeKitIndex", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "DisputeKitCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "DisputeKitEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_fromDisputeKitID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_toDisputeKitID", - "type": "uint256" - } - ], - "name": "DisputeKitJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "Draw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreBase.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "addNewDisputeKit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "arbitrableWhitelist", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arbitrable", - "type": "address" - }, - { - "internalType": "bool", - "name": "_allowed", - "type": "bool" - } - ], - "name": "changeArbitrableWhitelist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_guardian", - "type": "address" - } - ], - "name": "changeGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC721", - "name": "_jurorNft", - "type": "address" - } - ], - "name": "changeJurorNft", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - } - ], - "name": "changeJurorProsecutionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputeKits", - "outputs": [ - { - "internalType": "contract IDisputeKit", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreBase.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "lastPeriodChange", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "uint256", - "name": "nbDrawnJurors", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256[]", - "name": "_disputeKitIDs", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "enableDisputeKits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputeKitsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getPnkAtStakePerJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "disputeKitID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkAtStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVotes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "repartitions", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkPenalties", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "drawnJurors", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumPnkRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "drawIterations", - "type": "uint256" - } - ], - "internalType": "struct KlerosCoreBase.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "guardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - }, - { - "internalType": "contract IDisputeKit", - "name": "_disputeKit", - "type": "address" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModuleAddress", - "type": "address" - }, - { - "internalType": "contract IERC721", - "name": "_jurorNft", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "isDisputeKitJumping", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - } - ], - "name": "isSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorNft", - "outputs": [ - { - "internalType": "contract IERC721", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorProsecutionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "passPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "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": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStakeBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "contract ISortitionModule", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xd9c5f763c1dcbbf614793dc5ebef833d080e5ef31171e8cbdbda56e787982c28", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xC1210493804eEF123096F9581Ee82B915150E54c", - "transactionIndex": 3, - "gasUsed": "5475085", - "logsBloom": "0x00000000000000000800000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000001000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x2903f253c5a923b6e7dd48d732b4ef152501bf05e1632869d3bf4b16ee0662e0", - "transactionHash": "0xd9c5f763c1dcbbf614793dc5ebef833d080e5ef31171e8cbdbda56e787982c28", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 364034123, - "transactionHash": "0xd9c5f763c1dcbbf614793dc5ebef833d080e5ef31171e8cbdbda56e787982c28", - "address": "0xC1210493804eEF123096F9581Ee82B915150E54c", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 1, - "blockHash": "0x2903f253c5a923b6e7dd48d732b4ef152501bf05e1632869d3bf4b16ee0662e0" - } - ], - "blockNumber": 364034123, - "cumulativeGasUsed": "5530512", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 3, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AppealFeesNotEnough\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AppealPeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ArbitrableNotWhitelisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ArbitrationFeesNotEnough\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotDisableClassicDK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitPeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeKitNotSupportedByCourt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeKitOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeNotAppealable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputePeriodIsFinal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeStillDrawing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EvidenceNotPassedAndNotAppeal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GovernorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GuardianOrGovernorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDisputKitParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidForkingCourtAsParent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinStakeLowerThanParentCourt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustSupportDisputeKitClassic\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEligibleForStaking\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEvidencePeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotExecutionPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RulingAlreadyExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SortitionModuleOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingInTooManyCourts\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingLessThanCourtMinStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingMoreThanMaxStakePerJuror\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingMoreThanMaxTotalStaked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingNotPossibleInThisCourt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingZeroWhenNoStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnstakingTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsuccessfulCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedDisputeKit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VotePeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WhenNotPausedOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WhenPausedOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongDisputeKitIndex\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"AcceptedFeeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"AppealDecision\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"AppealPossible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_supportedDisputeKits\",\"type\":\"uint256[]\"}],\"name\":\"CourtCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_fromCourtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_toCourtID\",\"type\":\"uint96\"}],\"name\":\"CourtJump\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"CourtModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeKitID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IDisputeKit\",\"name\":\"_disputeKitAddress\",\"type\":\"address\"}],\"name\":\"DisputeKitCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeKitID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_enable\",\"type\":\"bool\"}],\"name\":\"DisputeKitEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_fromDisputeKitID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_toDisputeKitID\",\"type\":\"uint256\"}],\"name\":\"DisputeKitJump\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"Draw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_pnkAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"LeftoverRewardSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"NewCurrencyRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum KlerosCoreBase.Period\",\"name\":\"_period\",\"type\":\"uint8\"}],\"name\":\"NewPeriod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_degreeOfCoherency\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_pnkAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_feeAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"TokenAndETHShift\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IDisputeKit\",\"name\":\"_disputeKitAddress\",\"type\":\"address\"}],\"name\":\"addNewDisputeKit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"appeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"appealCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"appealPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"arbitrableWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"changeAcceptedFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_allowed\",\"type\":\"bool\"}],\"name\":\"changeArbitrableWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"changeCourtParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"changeCurrencyRates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"}],\"name\":\"changeGuardian\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC721\",\"name\":\"_jurorNft\",\"type\":\"address\"}],\"name\":\"changeJurorNft\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jurorProsecutionModule\",\"type\":\"address\"}],\"name\":\"changeJurorProsecutionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_pinakion\",\"type\":\"address\"}],\"name\":\"changePinakion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISortitionModule\",\"name\":\"_sortitionModule\",\"type\":\"address\"}],\"name\":\"changeSortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountInEth\",\"type\":\"uint256\"}],\"name\":\"convertEthToTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"courts\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"internalType\":\"bytes\",\"name\":\"_sortitionExtraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256[]\",\"name\":\"_supportedDisputeKits\",\"type\":\"uint256[]\"}],\"name\":\"createCourt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"currencyRates\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"feePaymentAccepted\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"rateInEth\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"rateDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputeKits\",\"outputs\":[{\"internalType\":\"contract IDisputeKit\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"courtID\",\"type\":\"uint96\"},{\"internalType\":\"contract IArbitrableV2\",\"name\":\"arbitrated\",\"type\":\"address\"},{\"internalType\":\"enum KlerosCoreBase.Period\",\"name\":\"period\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"ruled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"lastPeriodChange\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_iterations\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nbDrawnJurors\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256[]\",\"name\":\"_disputeKitIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"_enable\",\"type\":\"bool\"}],\"name\":\"enableDisputeKits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_iterations\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"executeRuling\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDisputeKitsLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"getPnkAtStakePerJuror\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"disputeKitID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pnkAtStakePerJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalFeesForJurors\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"repartitions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pnkPenalties\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"drawnJurors\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"sumFeeRewardPaid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sumPnkRewardPaid\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"drawIterations\",\"type\":\"uint256\"}],\"internalType\":\"struct KlerosCoreBase.Round\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"getTimesPerPeriod\",\"outputs\":[{\"internalType\":\"uint256[4]\",\"name\":\"timesPerPeriod\",\"type\":\"uint256[4]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_pinakion\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_jurorProsecutionModule\",\"type\":\"address\"},{\"internalType\":\"contract IDisputeKit\",\"name\":\"_disputeKit\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256[4]\",\"name\":\"_courtParameters\",\"type\":\"uint256[4]\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"internalType\":\"bytes\",\"name\":\"_sortitionExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract ISortitionModule\",\"name\":\"_sortitionModuleAddress\",\"type\":\"address\"},{\"internalType\":\"contract IERC721\",\"name\":\"_jurorNft\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"isDisputeKitJumping\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_disputeKitID\",\"type\":\"uint256\"}],\"name\":\"isSupported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jurorNft\",\"outputs\":[{\"internalType\":\"contract IERC721\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jurorProsecutionModule\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"passPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"pinakion\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"setStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"setStakeBySortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sortitionModule\",\"outputs\":[{\"internalType\":\"contract ISortitionModule\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferBySortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"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\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"AcceptedFeeToken(address,bool)\":{\"details\":\"To be emitted when an ERC20 token is added or removed as a method to pay fees.\",\"params\":{\"_accepted\":\"Whether the token is accepted or not.\",\"_token\":\"The ERC20 token.\"}},\"DisputeCreation(uint256,address)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_arbitrable\":\"The contract which created the dispute.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"NewCurrencyRate(address,uint64,uint8)\":{\"details\":\"To be emitted when the fee for a particular ERC20 token is updated.\",\"params\":{\"_feeToken\":\"The ERC20 token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrable\":\"The arbitrable receiving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"addNewDisputeKit(address)\":{\"details\":\"Add a new supported dispute kit module to the court.\",\"params\":{\"_disputeKitAddress\":\"The address of the dispute kit contract.\"}},\"appeal(uint256,uint256,bytes)\":{\"details\":\"Appeals the ruling of a specified dispute. Note: Access restricted to the Dispute Kit for this `disputeID`.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_extraData\":\"Extradata for the dispute. Can be required during court jump.\",\"_numberOfChoices\":\"Number of choices for the dispute. Can be required during court jump.\"}},\"appealCost(uint256)\":{\"details\":\"Gets the cost of appealing a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"cost\":\"The appeal cost.\"}},\"appealPeriod(uint256)\":{\"details\":\"Gets the start and the end of a specified dispute's current appeal period.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"end\":\"The end of the appeal period.\",\"start\":\"The start of the appeal period.\"}},\"arbitrationCost(bytes)\":{\"details\":\"Compute the cost of arbitration denominated in ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\"},\"returns\":{\"cost\":\"The arbitration cost in ETH.\"}},\"arbitrationCost(bytes,address)\":{\"details\":\"Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeToken\":\"The ERC20 token used to pay fees.\"},\"returns\":{\"cost\":\"The arbitration cost in `_feeToken`.\"}},\"changeAcceptedFeeTokens(address,bool)\":{\"details\":\"Changes the supported fee tokens.\",\"params\":{\"_accepted\":\"Whether the token is supported or not as a method of fee payment.\",\"_feeToken\":\"The fee token.\"}},\"changeArbitrableWhitelist(address,bool)\":{\"details\":\"Adds or removes an arbitrable from whitelist.\",\"params\":{\"_allowed\":\"Whether add or remove permission.\",\"_arbitrable\":\"Arbitrable address.\"}},\"changeCurrencyRates(address,uint64,uint8)\":{\"details\":\"Changes the currency rate of a fee token.\",\"params\":{\"_feeToken\":\"The fee token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"changeGuardian(address)\":{\"details\":\"Changes the `guardian` storage variable.\",\"params\":{\"_guardian\":\"The new value for the `guardian` storage variable.\"}},\"changeJurorNft(address)\":{\"details\":\"Changes the `jurorNft` storage variable.\",\"params\":{\"_jurorNft\":\"The new value for the `jurorNft` storage variable.\"}},\"changeJurorProsecutionModule(address)\":{\"details\":\"Changes the `jurorProsecutionModule` storage variable.\",\"params\":{\"_jurorProsecutionModule\":\"The new value for the `jurorProsecutionModule` storage variable.\"}},\"changePinakion(address)\":{\"details\":\"Changes the `pinakion` storage variable.\",\"params\":{\"_pinakion\":\"The new value for the `pinakion` storage variable.\"}},\"changeSortitionModule(address)\":{\"details\":\"Changes the `_sortitionModule` storage variable. Note that the new module should be initialized for all courts.\",\"params\":{\"_sortitionModule\":\"The new value for the `sortitionModule` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createCourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],bytes,uint256[])\":{\"details\":\"Creates a court under a specified parent court.\",\"params\":{\"_alpha\":\"The `alpha` property value of the court.\",\"_feeForJuror\":\"The `feeForJuror` property value of the court.\",\"_hiddenVotes\":\"The `hiddenVotes` property value of the court.\",\"_jurorsForCourtJump\":\"The `jurorsForCourtJump` property value of the court.\",\"_minStake\":\"The `minStake` property value of the court.\",\"_parent\":\"The `parent` property value of the court.\",\"_sortitionExtraData\":\"Extra data for sortition module.\",\"_supportedDisputeKits\":\"Indexes of dispute kits that this court will support.\",\"_timesPerPeriod\":\"The `timesPerPeriod` property value of the court.\"}},\"createDispute(uint256,bytes)\":{\"details\":\"Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"createDispute(uint256,bytes,address,uint256)\":{\"details\":\"Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeAmount\":\"Amount of the ERC20 token used to pay fees.\",\"_feeToken\":\"The ERC20 token used to pay fees.\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws jurors for the dispute. Can be called in parts.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_iterations\":\"The number of iterations to run.\"},\"returns\":{\"nbDrawnJurors\":\"The total number of jurors drawn in the round.\"}},\"enableDisputeKits(uint96,uint256[],bool)\":{\"details\":\"Adds/removes court's support for specified dispute kits.\",\"params\":{\"_courtID\":\"The ID of the court.\",\"_disputeKitIDs\":\"The IDs of dispute kits which support should be added/removed.\",\"_enable\":\"Whether add or remove the dispute kits from the court.\"}},\"execute(uint256,uint256,uint256)\":{\"details\":\"Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts. Note: Reward distributions are forbidden during pause.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_iterations\":\"The number of iterations to run.\",\"_round\":\"The appeal round.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"executeRuling(uint256)\":{\"details\":\"Executes a specified dispute's ruling.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Gets the number of rounds for a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"_0\":\"The number of rounds.\"}},\"getNumberOfVotes(uint256)\":{\"details\":\"Gets the number of votes permitted for the specified dispute in the latest round.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"getPnkAtStakePerJuror(uint256,uint256)\":{\"details\":\"Gets the PNK at stake per juror for a specified dispute and round.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_round\":\"The round to get the info for.\"},\"returns\":{\"_0\":\"pnkAtStakePerJuror The PNK at stake per juror.\"}},\"getRoundInfo(uint256,uint256)\":{\"details\":\"Gets the round info for a specified dispute and round.This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_round\":\"The round to get the info for.\"},\"returns\":{\"_0\":\"round The round info.\"}},\"getTimesPerPeriod(uint96)\":{\"details\":\"Gets the timesPerPeriod array for a given court.\",\"params\":{\"_courtID\":\"The ID of the court to get the times from.\"},\"returns\":{\"timesPerPeriod\":\"The timesPerPeriod array for the given court.\"}},\"initialize(address,address,address,address,address,bool,uint256[4],uint256[4],bytes,address,address,address)\":{\"details\":\"Initializer (constructor equivalent for upgradable contracts).\",\"params\":{\"_courtParameters\":\"Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\",\"_disputeKit\":\"The address of the default dispute kit.\",\"_governor\":\"The governor's address.\",\"_guardian\":\"The guardian's address.\",\"_hiddenVotes\":\"The `hiddenVotes` property value of the general court.\",\"_jurorNft\":\"NFT contract to vet the jurors.\",\"_jurorProsecutionModule\":\"The address of the juror prosecution module.\",\"_pinakion\":\"The address of the token contract.\",\"_sortitionExtraData\":\"The extra data for sortition module.\",\"_sortitionModuleAddress\":\"The sortition module responsible for sortition of the jurors.\",\"_timesPerPeriod\":\"The `timesPerPeriod` property value of the general court.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isDisputeKitJumping(uint256)\":{\"details\":\"Returns true if the dispute kit will be switched to a parent DK.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"_0\":\"Whether DK will be switched or not.\"}},\"isSupported(uint96,uint256)\":{\"details\":\"Checks if a given dispute kit is supported by a given court.\",\"params\":{\"_courtID\":\"The ID of the court to check the support for.\",\"_disputeKitID\":\"The ID of the dispute kit to check the support for.\"},\"returns\":{\"_0\":\"Whether the dispute kit is supported or not.\"}},\"passPeriod(uint256)\":{\"details\":\"Passes the period of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"pause()\":{\"details\":\"Pause staking and reward execution. Can only be done by guardian or governor.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setStake(uint96,uint256)\":{\"details\":\"Sets the caller's stake in a court. Note: Staking and unstaking is forbidden during pause.\",\"params\":{\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake. Note that the existing delayed stake will be nullified as non-relevant.\"}},\"setStakeBySortitionModule(address,uint96,uint256)\":{\"details\":\"Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\",\"params\":{\"_account\":\"The account whose stake is being set.\",\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake.\"}},\"transferBySortitionModule(address,uint256)\":{\"details\":\"Transfers PNK to the juror by SortitionModule.\",\"params\":{\"_account\":\"The account of the juror whose PNK to transfer.\",\"_amount\":\"The amount to transfer.\"}},\"unpause()\":{\"details\":\"Unpause staking and reward execution. Can only be done by governor.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"KlerosCoreNeo Core arbitrator contract for Kleros v2. Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/KlerosCoreNeo.sol\":\"KlerosCoreNeo\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity >=0.6.2;\\n\\nimport {IERC165} from \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC-721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\\n * a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC-721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or\\n * {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\\n * a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the address zero.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf78f05f3b8c9f75570e85300d7b4600d7f6f6a198449273f31d44c1641adb46f\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreNeo.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20, OnError, StakingResult} from \\\"./KlerosCoreBase.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC721/IERC721.sol\\\";\\n\\n/// @title KlerosCoreNeo\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCoreNeo is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n mapping(address => bool) public arbitrableWhitelist; // Arbitrable whitelist.\\n IERC721 public jurorNft; // Eligible jurors NFT.\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _jurorNft NFT contract to vet the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n IERC721 _jurorNft,\\n address _wNative\\n ) external reinitializer(2) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n jurorNft = _jurorNft;\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Changes the `jurorNft` storage variable.\\n /// @param _jurorNft The new value for the `jurorNft` storage variable.\\n function changeJurorNft(IERC721 _jurorNft) external onlyByGovernor {\\n jurorNft = _jurorNft;\\n }\\n\\n /// @dev Adds or removes an arbitrable from whitelist.\\n /// @param _arbitrable Arbitrable address.\\n /// @param _allowed Whether add or remove permission.\\n function changeArbitrableWhitelist(address _arbitrable, bool _allowed) external onlyByGovernor {\\n arbitrableWhitelist[_arbitrable] = _allowed;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// Note: Staking and unstaking is forbidden during pause.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external override whenNotPaused {\\n if (jurorNft.balanceOf(msg.sender) == 0) revert NotEligibleForStaking();\\n super._setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal override returns (uint256 disputeID) {\\n if (!arbitrableWhitelist[msg.sender]) revert ArbitrableNotWhitelisted();\\n return super._createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure override {\\n super._stakingFailed(_onError, _result);\\n if (_result == StakingResult.CannotStakeMoreThanMaxStakePerJuror) revert StakingMoreThanMaxStakePerJuror();\\n if (_result == StakingResult.CannotStakeMoreThanMaxTotalStaked) revert StakingMoreThanMaxTotalStaked();\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error NotEligibleForStaking();\\n error StakingMoreThanMaxStakePerJuror();\\n error StakingMoreThanMaxTotalStaked();\\n error ArbitrableNotWhitelisted();\\n}\\n\",\"keccak256\":\"0xd5657fa7b1a8dd650b55b3e6c9ff750cd776504c0f1877071ed6a8c329ca4b9a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615fe46100fc600039600081816119f601528181611a1f0152611c140152615fe46000f3fe6080604052600436106103005760003560e01c806382d0223711610191578063c71f4253116100e2578063f6506db411610090578063f6506db414610a43578063f7434ea914610a63578063f7e7d1fd14610a83578063fbf405b014610aa3578063fc6f8f1614610ac3578063fca31d6d14610ae3578063fe4037e614610b03578063fe524c3914610b2357600080fd5b8063c71f42531461096e578063cf0c38f81461098e578063d07368bd146109ae578063d2b8035a146109ce578063d4d1d76a146109ee578063d98493f614610a03578063e4c0aaf414610a2357600080fd5b8063acdbf51d1161013f578063acdbf51d14610883578063afe15cfb146108a3578063b0049637146108d8578063b44d573c146108f8578063c13517e114610928578063c258bb191461093b578063c35699021461095b57600080fd5b806382d02237146107a15780638456cb59146107c157806386541b24146107d657806386cdecef146107f65780638a9bb02a146108165780638bb0487514610843578063a072b86c1461086357600080fd5b80632e2e936a1161025657806352d1902d1161020457806352d1902d1461068257806354fd4d5014610697578063564a565d146106d657806359ec827e146107075780635c975abb14610727578063751accd0146107415780637717a6e8146107615780637934c0be1461078157600080fd5b80632e2e936a146105ad5780632fcb4f04146105cd5780633cfd1184146105ed5780633f4ba83a1461061a57806342c37fa31461062f578063452a93201461064f5780634f1ef2861461066f57600080fd5b806319b81529116102b357806319b815291461045a5780631c3db16d1461048a5780631d7e6892146104c75780631f5a0dd2146104e75780632d29a47b146105485780632d68efc9146105685780632e1daf2f1461058d57600080fd5b8062f5822c146103055780630219da79146103275780630761c14d1461039f5780630b7414bc146103bf5780630c340a24146103df578063115d53761461040c5780631860592b1461042c575b600080fd5b34801561031157600080fd5b50610325610320366004615102565b610b43565b005b34801561033357600080fd5b50610372610342366004615102565b60086020526000908152604090205460ff808216916001600160401b0361010082041691600160481b9091041683565b6040805193151584526001600160401b03909216602084015260ff16908201526060015b60405180910390f35b3480156103ab57600080fd5b506103256103ba36600461513d565b610b90565b3480156103cb57600080fd5b506103256103da366004615253565b610bce565b3480156103eb57600080fd5b506000546103ff906001600160a01b031681565b60405161039691906152b4565b34801561041857600080fd5b506103256104273660046152c8565b610cff565b34801561043857600080fd5b5061044c6104473660046152e1565b6112cc565b604051908152602001610396565b34801561046657600080fd5b5061047a6104753660046152c8565b611326565b6040519015158152602001610396565b34801561049657600080fd5b506104aa6104a53660046152c8565b61141f565b604080519384529115156020840152151590820152606001610396565b3480156104d357600080fd5b506103256104e236600461530d565b611520565b3480156104f357600080fd5b506105076105023660046152c8565b611576565b604080516001600160601b0390981688529515156020880152948601939093526060850191909152608084015260a0830152151560c082015260e001610396565b34801561055457600080fd5b50610325610563366004615346565b6115d5565b34801561057457600080fd5b506009546103ff9061010090046001600160a01b031681565b34801561059957600080fd5b506004546103ff906001600160a01b031681565b3480156105b957600080fd5b50600b546103ff906001600160a01b031681565b3480156105d957600080fd5b506103256105e8366004615102565b611861565b3480156105f957600080fd5b5061060d610608366004615372565b6118ae565b60405161039691906153b0565b34801561062657600080fd5b50610325611918565b34801561063b57600080fd5b5061032561064a3660046152e1565b61199b565b34801561065b57600080fd5b506001546103ff906001600160a01b031681565b61032561067d36600461542d565b6119e2565b34801561068e57600080fd5b5061044c611c07565b3480156106a357600080fd5b506106c9604051806040016040528060068152602001650302e31302e360d41b81525081565b60405161039691906154cc565b3480156106e257600080fd5b506106f66106f13660046152c8565b611c65565b604051610396959493929190615517565b34801561071357600080fd5b5061044c6107223660046152c8565b611cc1565b34801561073357600080fd5b5060095461047a9060ff1681565b34801561074d57600080fd5b5061032561075c366004615556565b611e16565b34801561076d57600080fd5b5061032561077c3660046155ae565b611ec0565b34801561078d57600080fd5b5061032561079c36600461530d565b611f82565b3480156107ad57600080fd5b506103256107bc3660046155ca565b612001565b3480156107cd57600080fd5b506103256120be565b3480156107e257600080fd5b506103256107f1366004615689565b61215e565b34801561080257600080fd5b5061044c6108113660046156f7565b61233b565b34801561082257600080fd5b506108366108313660046156f7565b61238c565b604051610396919061575e565b34801561084f57600080fd5b5061032561085e3660046152c8565b612518565b34801561086f57600080fd5b5061032561087e366004615804565b61267d565b34801561088f57600080fd5b506103ff61089e3660046152c8565b6129b5565b3480156108af57600080fd5b506108c36108be3660046152c8565b6129df565b60408051928352602083019190915201610396565b3480156108e457600080fd5b506103256108f3366004615102565b612a8b565b34801561090457600080fd5b5061047a610913366004615102565b600a6020526000908152604090205460ff1681565b61044c6109363660046158c8565b612ad8565b34801561094757600080fd5b50610325610956366004615102565b612b10565b6103256109693660046158f8565b612b5d565b34801561097a57600080fd5b5061044c6109893660046152c8565b613022565b34801561099a57600080fd5b506003546103ff906001600160a01b031681565b3480156109ba57600080fd5b506103256109c9366004615102565b61308a565b3480156109da57600080fd5b5061044c6109e93660046156f7565b613133565b3480156109fa57600080fd5b5060065461044c565b348015610a0f57600080fd5b5061044c610a1e366004615979565b613452565b348015610a2f57600080fd5b50610325610a3e366004615102565b61349f565b348015610a4f57600080fd5b5061044c610a5e3660046159c4565b6134ec565b348015610a6f57600080fd5b5061044c610a7e366004615a2a565b6135d0565b348015610a8f57600080fd5b50610325610a9e366004615102565b61361c565b348015610aaf57600080fd5b506002546103ff906001600160a01b031681565b348015610acf57600080fd5b5061044c610ade3660046152c8565b6136f3565b348015610aef57600080fd5b50610325610afe366004615a5e565b613722565b348015610b0f57600080fd5b50610325610b1e366004615102565b613818565b348015610b2f57600080fd5b5061047a610b3e3660046155ae565b613865565b6000546001600160a01b03163314610b6e5760405163c383977560e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314610bbb57604051639d6cab9960e01b815260040160405180910390fd5b610bc883838360016138ad565b50505050565b6000546001600160a01b03163314610bf95760405163c383977560e01b815260040160405180910390fd5b60005b8251811015610bc8578115610c9857828181518110610c1d57610c1d615b5a565b602002602001015160001480610c5057506006548351849083908110610c4557610c45615b5a565b602002602001015110155b15610c6e57604051633d58a98960e11b815260040160405180910390fd5b610c9384848381518110610c8457610c84615b5a565b60200260200101516001613b29565b610cf7565b6001838281518110610cac57610cac615b5a565b602002602001015103610cd2576040516356d111fd60e11b815260040160405180910390fd5b610cf784848381518110610ce857610ce8615b5a565b60200260200101516000613b29565b600101610bfc565b600060078281548110610d1457610d14615b5a565b600091825260208220600490910201805460058054929450916001600160601b03909116908110610d4757610d47615b5a565b6000918252602082206003850154600c909202019250610d6990600190615b86565b90506000836003018281548110610d8257610d82615b5a565b600091825260208220600b909102019150600185015460ff166004811115610dac57610dac6154df565b03610e875781158015610dfb57506001840154600684019060ff166004811115610dd857610dd86154df565b60048110610de857610de8615b5a565b01546002850154610df99042615b86565b105b15610e1957604051633e9727df60e01b815260040160405180910390fd5b6003810154600682015414610e41576040516309e4486b60e41b815260040160405180910390fd5b8254600160601b900460ff16610e58576002610e5b565b60015b60018086018054909160ff1990911690836004811115610e7d57610e7d6154df565b021790555061127e565b60018085015460ff166004811115610ea157610ea16154df565b03610fb1576001840154600684019060ff166004811115610ec457610ec46154df565b60048110610ed457610ed4615b5a565b01546002850154610ee59042615b86565b108015610f7c57506006816000015481548110610f0457610f04615b5a565b600091825260209091200154604051630baa64d160e01b8152600481018790526001600160a01b0390911690630baa64d190602401602060405180830381865afa158015610f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7a9190615b99565b155b15610f9a57604051634dfa578560e11b815260040160405180910390fd5b6001808501805460029260ff199091169083610e7d565b6002600185015460ff166004811115610fcc57610fcc6154df565b0361111a576001840154600684019060ff166004811115610fef57610fef6154df565b60048110610fff57610fff615b5a565b015460028501546110109042615b86565b1080156110a75750600681600001548154811061102f5761102f615b5a565b6000918252602090912001546040516336a66c7560e11b8152600481018790526001600160a01b0390911690636d4cd8ea90602401602060405180830381865afa158015611081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a59190615b99565b155b156110c557604051631988dead60e31b815260040160405180910390fd5b600184018054600360ff199091161790558354604051600160601b9091046001600160a01b03169086907fa5d41b970d849372be1da1481ffd78d162bfe57a7aa2fe4e5fb73481fa5ac24f90600090a361127e565b6003600185015460ff166004811115611135576111356154df565b03611245576001840154600684019060ff166004811115611158576111586154df565b6004811061116857611168615b5a565b015460028501546111799042615b86565b1080156112105750600681600001548154811061119857611198615b5a565b600091825260209091200154604051630855bbe960e01b8152600481018790526001600160a01b0390911690630855bbe990602401602060405180830381865afa1580156111ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120e9190615b99565b155b1561122e57604051632f4dfd8760e01b815260040160405180910390fd5b6001808501805460049260ff199091169083610e7d565b6004600185015460ff166004811115611260576112606154df565b0361127e576040516307f38c8f60e11b815260040160405180910390fd5b426002850155600184015460405186917f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b91916112bd9160ff1690615bb6565b60405180910390a25050505050565b6001600160a01b03821660009081526008602052604081205461010081046001600160401b03169061130990600160481b900460ff16600a615cab565b6113139084615cba565b61131d9190615ce7565b90505b92915050565b6000806007838154811061133c5761133c615b5a565b600091825260208220600360049092020190810180549193509061136290600190615b86565b8154811061137257611372615b5a565b600091825260208220845460058054600b909402909201945090916001600160601b039091169081106113a7576113a7615b5a565b90600052602060002090600c020190508060050154826003015410156113d257506000949350505050565b80546005805490916001600160601b03169081106113f2576113f2615b5a565b6000918252602080832094548352600a600c9092029094010190925250604090205460ff16159392505050565b6000806000806007858154811061143857611438615b5a565b600091825260208220600360049092020190810180549193509061145e90600190615b86565b8154811061146e5761146e615b5a565b90600052602060002090600b020190506000600682600001548154811061149757611497615b5a565b600091825260209091200154604051631c3db16d60e01b8152600481018990526001600160a01b0390911691508190631c3db16d90602401606060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615cfb565b9199909850909650945050505050565b6000546001600160a01b0316331461154b5760405163c383977560e01b815260040160405180910390fd5b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6005818154811061158657600080fd5b60009182526020909120600c9091020180546002820154600383015460048401546005850154600b909501546001600160601b038516965060ff600160601b9095048516959394929391921687565b60095460ff16156115f957604051636f1dac1d60e01b815260040160405180910390fd5b6000806007858154811061160f5761160f615b5a565b600091825260209091206004918202019150600182015460ff16600481111561163a5761163a6154df565b1461165857604051638794ce4b60e01b815260040160405180910390fd5b80600301848154811061166d5761166d615b5a565b6000918252602082206004600b909202019081015490935091506116918483615d34565b60058401546006850154600286015492935090916000906116b3908390615ce7565b905060008660010154905060008060068960000154815481106116d8576116d8615b5a565b60009182526020909120015460405163368efae360e21b8152600481018e9052602481018d90526001600160a01b039091169150819063da3beb8c90604401602060405180830381865afa158015611734573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117589190615d47565b91505080600003611774578386111561176f578395505b611794565b61177f846002615cba565b86111561179457611791846002615cba565b95505b60048801869055865b8681101561184057848110156117f6576117ef6040518061010001604052808e81526020018d815260200184815260200187815260200186815260200185815260200188815260200183815250613bb1565b9550611838565b6118386040518061010001604052808e81526020018d81526020018481526020018781526020018681526020018581526020018881526020018381525061405f565b60010161179d565b508488600501541461185457600588018590555b5050505050505050505050565b6000546001600160a01b0316331461188c5760405163c383977560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6118b6615032565b6005826001600160601b0316815481106118d2576118d2615b5a565b6000918252602090912060408051608081019182905292600c029091016006019060049082845b8154815260200190600101908083116118f95750505050509050919050565b6000546001600160a01b031633146119435760405163c383977560e01b815260040160405180910390fd5b60095460ff166119665760405163b4143dc760e01b815260040160405180910390fd5b6009805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6004546001600160a01b031633146119c657604051639d6cab9960e01b815260040160405180910390fd5b6002546119dd906001600160a01b0316838361445c565b505050565b6119eb8261451f565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a6957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a5d600080516020615f8f8339815191525490565b6001600160a01b031614155b15611a875760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611ae1575060408051601f3d908101601f19168201909252611ade91810190615d47565b60015b611b095781604051630c76093760e01b8152600401611b0091906152b4565b60405180910390fd5b600080516020615f8f8339815191528114611b3a57604051632a87526960e21b815260048101829052602401611b00565b600080516020615f8f8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156119dd576000836001600160a01b031683604051611ba19190615d60565b600060405180830381855af49150503d8060008114611bdc576040519150601f19603f3d011682016040523d82523d6000602084013e611be1565b606091505b5050905080610bc8576040516339b21b5d60e11b815260040160405180910390fd5b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c525760405163703e46dd60e11b815260040160405180910390fd5b50600080516020615f8f83398151915290565b60078181548110611c7557600080fd5b60009182526020909120600490910201805460018201546002909201546001600160601b0382169350600160601b9091046001600160a01b03169160ff80821692610100909204169085565b60008060078381548110611cd757611cd7615b5a565b6000918252602082206003600490920201908101805491935090611cfd90600190615b86565b81548110611d0d57611d0d615b5a565b600091825260208220845460058054600b909402909201945090916001600160601b03909116908110611d4257611d42615b5a565b90600052602060002090600c020190508060050154826003015410611de15782546001600160601b031660001901611d83576001600160ff1b039350611e0e565b6003820154611d93906002615cba565b611d9e906001615d34565b81546005805490916001600160601b0316908110611dbe57611dbe615b5a565b90600052602060002090600c020160040154611dda9190615cba565b9350611e0e565b6003820154611df1906002615cba565b611dfc906001615d34565b8160040154611e0b9190615cba565b93505b505050919050565b6000546001600160a01b03163314611e415760405163c383977560e01b815260040160405180910390fd5b6000836001600160a01b03168383604051611e5c9190615d60565b60006040518083038185875af1925050503d8060008114611e99576040519150601f19603f3d011682016040523d82523d6000602084013e611e9e565b606091505b5050905080610bc8576040516322092f2f60e11b815260040160405180910390fd5b60095460ff1615611ee457604051636f1dac1d60e01b815260040160405180910390fd5b600b546040516370a0823160e01b81526001600160a01b03909116906370a0823190611f149033906004016152b4565b602060405180830381865afa158015611f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f559190615d47565b600003611f75576040516326b551e560e11b815260040160405180910390fd5b6119dd33838360006138ad565b6000546001600160a01b03163314611fad5760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f541615e167511d757a7067a700eb54431b256bb458dfdce0ac58bf2ed0aefd4491a35050565b6000546001600160a01b0316331461202c5760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038316600081815260086020908152604091829020805469ffffffffffffffffff0019166101006001600160401b03881690810260ff60481b191691909117600160481b60ff8816908102919091179092558351908152918201527fe6996b7f03e9bd02228b99d3d946932e3197f505f60542c4cfbc919441d8a4e6910160405180910390a2505050565b6001546001600160a01b031633148015906120e457506000546001600160a01b03163314155b1561210257604051636b29334f60e01b815260040160405180910390fd5b60095460ff161561212657604051636f1dac1d60e01b815260040160405180910390fd5b6009805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6000546001600160a01b031633146121895760405163c383977560e01b815260040160405180910390fd5b60006005886001600160601b0316815481106121a7576121a7615b5a565b90600052602060002090600c0201905060016001600160601b0316886001600160601b031614158015612209575080546005805488926001600160601b03169081106121f5576121f5615b5a565b90600052602060002090600c020160020154115b1561222757604051639717078960e01b815260040160405180910390fd5b60005b60018201548110156122a25786600583600101838154811061224e5761224e615b5a565b90600052602060002001548154811061226957612269615b5a565b90600052602060002090600c020160020154101561229a57604051639717078960e01b815260040160405180910390fd5b60010161222a565b5060028101869055805460ff60601b1916600160601b88151502178155600381018590556004808201859055600582018490556122e59060068301908490615050565b50876001600160601b03167f709b1f5fda58af9a4f52dacd1ec404840a8148455700cce155a2bd8cf127ef1a88888888888860405161232996959493929190615d7c565b60405180910390a25050505050505050565b60006007838154811061235057612350615b5a565b9060005260206000209060040201600301828154811061237257612372615b5a565b90600052602060002090600b020160010154905092915050565b6123f260405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6007838154811061240557612405615b5a565b9060005260206000209060040201600301828154811061242757612427615b5a565b90600052602060002090600b020160405180610160016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682018054806020026020016040519081016040528092919081815260200182805480156124d657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124b8575b5050509183525050600782015460208201526008820154604082015260098201546001600160a01b03166060820152600a909101546080909101529392505050565b60006007828154811061252d5761252d615b5a565b600091825260209091206004918202019150600182015460ff166004811115612558576125586154df565b1461257657604051638794ce4b60e01b815260040160405180910390fd5b6001810154610100900460ff16156125a15760405163c977f8d360e01b815260040160405180910390fd5b60006125ac8361141f565b505060018301805461010061ff001990911617905582546040518281529192508491600160601b9091046001600160a01b0316907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a3815460405163188d362b60e11b81526004810185905260248101839052600160601b9091046001600160a01b03169063311a6c56906044015b600060405180830381600087803b15801561266057600080fd5b505af1158015612674573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146126a85760405163c383977560e01b815260040160405180910390fd5b8660058a6001600160601b0316815481106126c5576126c5615b5a565b90600052602060002090600c02016002015411156126f657604051639717078960e01b815260040160405180910390fd5b80516000036127185760405163402585f560e01b815260040160405180910390fd5b6001600160601b03891661273f57604051631ef4f64960e01b815260040160405180910390fd5b60058054600181018255600091825290600c82027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905b83518110156128015783818151811061279257612792615b5a565b6020026020010151600014806127c5575060065484518590839081106127ba576127ba615b5a565b602002602001015110155b156127e357604051633d58a98960e11b815260040160405180910390fd5b6127f983858381518110610c8457610c84615b5a565b600101612777565b5060016000908152600a8201602052604090205460ff16612835576040516306351b3d60e31b815260040160405180910390fd5b80546001600160601b0319166001600160601b038c16178155604080516000815260208101918290525161286d91600184019161508e565b50805460ff60601b1916600160601b8b15150217815560028101899055600381018890556004808201889055600582018790556128b09060068301908790615050565b50600480546040516311de995760e21b81526001600160a01b039091169163477a655c916128e2918691899101615daf565b600060405180830381600087803b1580156128fc57600080fd5b505af1158015612910573d6000803e3d6000fd5b5050505060058b6001600160601b03168154811061293057612930615b5a565b600091825260208083206001600c909302018201805492830181558352909120018290556040516001600160601b03808d1691908416907f550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee6906129a0908e908e908e908e908e908e908d90615dc8565b60405180910390a35050505050505050505050565b600681815481106129c557600080fd5b6000918252602090912001546001600160a01b0316905081565b6000806000600784815481106129f7576129f7615b5a565b6000918252602090912060049091020190506003600182015460ff166004811115612a2457612a246154df565b03612a7c576002810154815460058054929550916001600160601b03909116908110612a5257612a52615b5a565b600091825260209091206009600c9092020101546002820154612a759190615d34565b9150612a85565b60009250600091505b50915091565b6000546001600160a01b03163314612ab65760405163c383977560e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000612ae3826135d0565b341015612b0357604051630e3360f160e21b815260040160405180910390fd5b61131d838360003461454d565b6000546001600160a01b03163314612b3b5760405163c383977560e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b612b6683611cc1565b341015612b8657604051633191f8f160e01b815260040160405180910390fd5b600060078481548110612b9b57612b9b615b5a565b6000918252602090912060049091020190506003600182015460ff166004811115612bc857612bc86154df565b14612be6576040516337cdefcb60e21b815260040160405180910390fd5b60038101805460009190612bfc90600190615b86565b81548110612c0c57612c0c615b5a565b90600052602060002090600b020190506006816000015481548110612c3357612c33615b5a565b6000918252602090912001546001600160a01b03163314612c675760405163065f245f60e01b815260040160405180910390fd5b8154815460038401805460018101825560009182526020909120600580546001600160601b0390951694600b9093029091019184908110612caa57612caa615b5a565b90600052602060002090600c020160050154846003015410612db3576005836001600160601b031681548110612ce257612ce2615b5a565b60009182526020909120600c9091020154600580546001600160601b0390921694509084908110612d1557612d15615b5a565b60009182526020808320858452600a600c90930201919091019052604090205460ff16612d4157600191505b84546001600160601b03848116911614612db357845460038601546001600160601b0390911690612d7490600190615b86565b6040516001600160601b03861681528a907f736e3f52761298c8c0823e1ebf482ed3c5ecb304f743d2d91a7c006e8e8d7a1f9060200160405180910390a45b84546001600160601b0319166001600160601b038416908117865560018601805460ff1916905542600287015560058054600092908110612df657612df6615b5a565b90600052602060002090600c02019050806004015434612e169190615ce7565b8260030181905550612e3081600201548260030154614592565b60018084019190915534600284015583835560045460038801546001600160a01b039091169163d09f392d918c91612e6791615b86565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b158015612ea557600080fd5b505af1158015612eb9573d6000803e3d6000fd5b505086548454149150612f9f90505784546003870154612edb90600190615b86565b83546040519081528b907fcbe7939a71f0b369c7471d760a0a99b60b7bb010ee0406cba8a46679d1ea77569060200160405180910390a46006826000015481548110612f2957612f29615b5a565b60009182526020909120015460038301546040516302dbb79560e61b81526001600160a01b039092169163b6ede54091612f6c918d918d918d9190600401615e45565b600060405180830381600087803b158015612f8657600080fd5b505af1158015612f9a573d6000803e3d6000fd5b505050505b8554604051600160601b9091046001600160a01b0316908a907f9c9b64db9e130f48381bf697abf638e73117dbfbfd7a4484f2da3ba188f4187d90600090a3887f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b91600060405161300f9190615bb6565b60405180910390a2505050505050505050565b6000806007838154811061303857613038615b5a565b9060005260206000209060040201905080600301600182600301805490506130609190615b86565b8154811061307057613070615b5a565b90600052602060002090600b020160030154915050919050565b6000546001600160a01b031633146130b55760405163c383977560e01b815260040160405180910390fd5b6006805460018101825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f810180546001600160a01b0319166001600160a01b0385169081179091556040519192909183917f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a35050565b6000806007848154811061314957613149615b5a565b9060005260206000209060040201905060006001826003018054905061316f9190615b86565b9050600082600301828154811061318857613188615b5a565b600091825260208220600b909102019150600184015460ff1660048111156131b2576131b26154df565b146131d057604051638285c4ef60e01b815260040160405180910390fd5b600060068260000154815481106131e9576131e9615b5a565b6000918252602082200154600a8401546001600160a01b039091169250905b878110801561321e575060038401546006850154105b156134265760006001600160a01b03841663d2b8035a8b8461323f81615e75565b955061324b9087615d34565b6040516001600160e01b031960e085901b168152600481019290925260248201526044016020604051808303816000875af115801561328e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b29190615e8e565b90506001600160a01b0381166132c85750613208565b6004805460018701546040516310f0b12f60e11b81526001600160a01b03909216926321e1625e926132fe928692909101615eab565b600060405180830381600087803b15801561331857600080fd5b505af115801561332c573d6000803e3d6000fd5b50505060068601546040518c92506001600160a01b038416917f6119cf536152c11e0a9a6c22f3953ce4ecc93ee54fa72ffa326ffabded21509b91613379918b8252602082015260400190565b60405180910390a36006850180546001810182556000828152602090200180546001600160a01b0319166001600160a01b03841617905560038601549054036134205760048054604051632e96bc2360e11b81529182018c9052602482018890526001600160a01b031690635d2d784690604401600060405180830381600087803b15801561340757600080fd5b505af115801561341b573d6000803e3d6000fd5b505050505b50613208565b8084600a01600082825461343a9190615d34565b90915550505060069092015494505050505092915050565b60006134978261044786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135d092505050565b949350505050565b6000546001600160a01b031633146134ca5760405163c383977560e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526008602052604081205460ff166135255760405163e51cf7bf60e01b815260040160405180910390fd5b613530858585613452565b82101561355057604051630e3360f160e21b815260040160405180910390fd5b6135656001600160a01b0384163330856145a1565b613582576040516312171d8360e31b815260040160405180910390fd5b6135c68686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925087915061454d9050565b9695505050505050565b60008060006135de8461467d565b5091509150806005836001600160601b03168154811061360057613600615b5a565b90600052602060002090600c0201600401546134979190615cba565b60066000613628614704565b8054909150600160401b900460ff168061364f575080546001600160401b03808416911610155b1561366c5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff19909216821717825560098054610100600160a81b0319166101006001600160a01b03871602179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b60006007828154811061370857613708615b5a565b600091825260209091206003600490920201015492915050565b6002600061372e614704565b8054909150600160401b900460ff1680613755575080546001600160401b03808416911610155b156137725760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556137a68e8e8e8e8e8e8e8e8e8e8d614728565b600b80546001600160a01b0319166001600160a01b038616179055805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050505050505050505050565b6000546001600160a01b031633146138435760405163c383977560e01b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60006005836001600160601b03168154811061388357613883615b5a565b60009182526020808320948352600c91909102909301600a0190925250604090205460ff16919050565b60006001600160601b03841615806138d057506005546001600160601b03851610155b156138e8576138e0826005614a6b565b506000613497565b821580159061392357506005846001600160601b03168154811061390e5761390e615b5a565b90600052602060002090600c02016002015483105b15613933576138e0826006614a6b565b600480546040516303d9595760e31b81526001600160a01b03888116938201939093526001600160601b03871660248201526044810186905260009283928392911690631ecacab8906064016060604051808303816000875af115801561399e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c29190615ec4565b9194509250905060008160098111156139dd576139dd6154df565b141580156139fd575060018160098111156139fa576139fa6154df565b14155b15613a1857613a0c8582614a6b565b60009350505050613497565b6001816009811115613a2c57613a2c6154df565b03613a3d5760019350505050613497565b8215613a6a57600254613a5b906001600160a01b03168930866145a1565b613a6a57613a0c856002614a6b565b8115613a9657600254613a87906001600160a01b0316898461445c565b613a9657613a0c856003614a6b565b600480546040516355601d6960e11b81526001600160a01b038b8116938201939093526001600160601b038a16602482015260448101869052606481018590526084810189905291169063aac03ad29060a401600060405180830381600087803b158015613b0357600080fd5b505af1158015613b17573d6000803e3d6000fd5b5060019b9a5050505050505050505050565b806005846001600160601b031681548110613b4657613b46615b5a565b60009182526020808320868452600c92909202909101600a0190526040808220805460ff19169315159390931790925590518215159184916001600160601b038716917fb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc7991a4505050565b6000806007836000015181548110613bcb57613bcb615b5a565b90600052602060002090600402019050600081600301846020015181548110613bf657613bf6615b5a565b90600052602060002090600b0201905060006006826000015481548110613c1f57613c1f615b5a565b60009182526020808320919091015487519188015160e089015160808a015160a08b01516040516333ac937b60e11b8152600481019690965260248601939093526044850191909152606484015260848301526001600160a01b03169250829063675926f69060a401602060405180830381865afa158015613ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc99190615d47565b9050612710811115613cda57506127105b6000612710613ce98382615b86565b8560010154613cf89190615cba565b613d029190615ce7565b90506000846006018860e0015181548110613d1f57613d1f615b5a565b6000918252602090912001546004805460405163965af6c760e01b81526001600160a01b03938416945092169163965af6c791613d60918591879101615eab565b600060405180830381600087803b158015613d7a57600080fd5b505af1158015613d8e573d6000803e3d6000fd5b505060048054604051633c85b79360e21b8152600094508493506001600160a01b039091169163f216de4c91613dc8918791899101615eab565b60408051808303816000875af1158015613de6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e0a9190615ef7565b91509150808a60c001818151613e209190615d34565b90525060208a01518a516001600160a01b0385167f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e788613e5f86615f1b565b60098d0154604051613e819392916000916001600160a01b0390911690615f37565b60405180910390a4811580613f165750895160208b015160e08c015160405163ba66fde760e01b81526004810193909352602483019190915260448201526001600160a01b0387169063ba66fde790606401602060405180830381865afa158015613ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f149190615b99565b155b15613f7d576004805460405163b5d69e9960e01b81526001600160a01b039091169163b5d69e9991613f4a918791016152b4565b600060405180830381600087803b158015613f6457600080fd5b505af1158015613f78573d6000803e3d6000fd5b505050505b60018a60600151613f8e9190615b86565b8a60e00151148015613fa2575060408a0151155b1561404c5760098701546000546002890154613fcb926001600160a01b03908116921690614ad9565b60005460c08b0151600254613fee926001600160a01b039182169291169061445c565b5060208a01518a5160c08c015160028a015460098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf49361404393909290916001600160a01b0390911690615f5b565b60405180910390a35b50505060c0909601519695505050505050565b6000600782600001518154811061407857614078615b5a565b906000526020600020906004020190506000816003018360200151815481106140a3576140a3615b5a565b90600052602060002090600b02019050600060068260000154815481106140cc576140cc615b5a565b6000918252602080832090910154865191870151606088015160e08901516001600160a01b039093169550859363675926f69390929161410b91615f7a565b60808a015160a08b01516040516001600160e01b031960e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401602060405180830381865afa15801561416b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061418f9190615d47565b90506127108111156141a057506127105b60008360060186606001518760e001516141ba9190615f7a565b815481106141ca576141ca615b5a565b600091825260208220015460018601546001600160a01b0390911692506141f19084614592565b6004805460405163965af6c760e01b81529293506001600160a01b03169163965af6c791614223918691869101615eab565b600060405180830381600087803b15801561423d57600080fd5b505af1158015614251573d6000803e3d6000fd5b50505050600061427488604001518960c0015161426e9190615ce7565b85614592565b90508086600801600082825461428a9190615d34565b9250508190555060006142b0896040015188600201546142aa9190615ce7565b86614592565b9050808760070160008282546142c69190615d34565b90915550506002546142e2906001600160a01b0316858461445c565b5060098701546142fc906001600160a01b03168583614ad9565b6020890151895160098901546040516001600160a01b03888116927f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e79261434c928c928a928a9290911690615f37565b60405180910390a46001896060015160026143679190615cba565b6143719190615b86565b8960e001510361445157600087600801548a60c001516143919190615b86565b90506000886007015489600201546143a99190615b86565b9050811515806143b857508015155b156118545781156143e2576000546002546143e0916001600160a01b0391821691168461445c565b505b8015614407576009890154600054614407916001600160a01b03908116911683614ad9565b60208b01518b5160098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf4916129a091879187916001600160a01b0390911690615f5b565b505050505050505050565b6000806000856001600160a01b0316858560405160240161447e929190615eab565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516144b39190615d60565b6000604051808303816000865af19150503d80600081146144f0576040519150601f19603f3d011682016040523d82523d6000602084013e6144f5565b606091505b50915091508180156135c65750805115806135c65750808060200190518101906135c69190615b99565b6000546001600160a01b0316331461454a5760405163c383977560e01b815260040160405180910390fd5b50565b336000908152600a602052604081205460ff1661457d57604051630407618360e31b815260040160405180910390fd5b61458985858585614b1c565b95945050505050565b60006127106113138385615cba565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516146069190615d60565b6000604051808303816000865af19150503d8060008114614643576040519150601f19603f3d011682016040523d82523d6000602084013e614648565b606091505b50915091508180156146725750805115806146725750808060200190518101906146729190615b99565b979650505050505050565b600080600060408451106146f2575050506020810151604082015160608301516001600160601b03831615806146be57506005546001600160601b03841610155b156146c857600192505b816000036146d557600391505b8015806146e457506006548110155b156146ed575060015b6146fd565b506001915060039050815b9193909250565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b614730614df7565b600080546001600160a01b03199081166001600160a01b038e81169190911783556001805483168e83161781556002805484168e84161781556003805485168e851617905560048054851688851617905560098054610100600160a81b031916610100888616021790556006805481875291820190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40018054909316918b1691821790925560405190927f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a36005805460010181556000908152600480546040516311de995760e21b81526001600160a01b039091169263477a655c9261483b92889101615daf565b600060405180830381600087803b15801561485557600080fd5b505af1158015614869573d6000803e3d6000fd5b5050600580546001810182556000918252600c027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160601b0319168155604080518381526020810190915290935091505080516148d791600184019160209091019061508e565b50805460ff60601b1916600160601b8815150217815585516002820155602086015160038201556040860151600480830191909155606087015160058301556149269060068301908790615050565b50600480546040516311de995760e21b81526001600160a01b039091169163477a655c9161495991600191899101615daf565b600060405180830381600087803b15801561497357600080fd5b505af1158015614987573d6000803e3d6000fd5b5060009250600191506149979050565b6040519080825280602002602001820160405280156149c0578160200160208202803683370190505b5090506001816000815181106149d8576149d8615b5a565b602090810291909101015281546001600160601b031660017f550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee68a8a600060200201518b600160200201518c600260200201518d600360200201518d89604051614a479796959493929190615dc8565b60405180910390a3614a5c6001806001613b29565b50505050505050505050505050565b614a758282614e1e565b6007816009811115614a8957614a896154df565b03614aa757604051636590e91560e01b815260040160405180910390fd5b6008816009811115614abb57614abb6154df565b03611c03576040516358859f1d60e01b815260040160405180910390fd5b6001600160a01b038316614b08576009546119dd906001600160a01b0384811691849161010090910416614f67565b610bc86001600160a01b038416838361445c565b6000806000614b2a8661467d565b92505091506005826001600160601b031681548110614b4b57614b4b615b5a565b60009182526020808320848452600a600c90930201919091019052604090205460ff16614b8b5760405163b34eb75d60e01b815260040160405180910390fd5b600780546001810182556000918252600160601b33026001600160601b03851617600482027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6888101918255427fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a909101556006805492965090929184908110614c1657614c16615b5a565b6000918252602082200154600580546001600160a01b039092169350906001600160601b038716908110614c4c57614c4c615b5a565b60009182526020808320600387018054600181018255908552918420600c909302019350600b0201906001600160a01b038a1615614c9757614c928a84600401546112cc565b614c9d565b82600401545b9050614ca9818a615ce7565b600380840191909155868355600284015490840154614cc89190614592565b6001830155600282018990556009820180546001600160a01b0319166001600160a01b038c8116919091179091556004805460405163d09f392d60e01b81529182018b9052600060248301529091169063d09f392d90604401600060405180830381600087803b158015614d3b57600080fd5b505af1158015614d4f573d6000803e3d6000fd5b50505050836001600160a01b031663b6ede540898e8e86600301546040518563ffffffff1660e01b8152600401614d899493929190615e45565b600060405180830381600087803b158015614da357600080fd5b505af1158015614db7573d6000803e3d6000fd5b50506040513392508a91507f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a350505050505050949350505050565b614dff615018565b614e1c57604051631afcd79f60e31b815260040160405180910390fd5b565b6001826001811115614e3257614e326154df565b03614e3b575050565b6002816009811115614e4f57614e4f6154df565b03614e6d57604051630f323ed960e11b815260040160405180910390fd5b6003816009811115614e8157614e816154df565b03614e9f5760405163e45e13a360e01b815260040160405180910390fd5b6004816009811115614eb357614eb36154df565b03614ed157604051631d91d0ed60e31b815260040160405180910390fd5b6005816009811115614ee557614ee56154df565b03614f0357604051637c84af5160e01b815260040160405180910390fd5b6006816009811115614f1757614f176154df565b03614f3557604051630caac6b360e31b815260040160405180910390fd5b6009816009811115614f4957614f496154df565b03611c0357604051633e57962f60e21b815260040160405180910390fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015614f9657505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015614fd157600080fd5b505af1158015614fe5573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038516935063a9059cbb9250612646915086908690600401615eab565b6000615022614704565b54600160401b900460ff16919050565b60405180608001604052806004906020820280368337509192915050565b826004810192821561507e579160200282015b8281111561507e578251825591602001919060010190615063565b5061508a9291506150c8565b5090565b82805482825590600052602060002090810192821561507e579160200282018281111561507e578251825591602001919060010190615063565b5b8082111561508a57600081556001016150c9565b6001600160a01b038116811461454a57600080fd5b80356150fd816150dd565b919050565b60006020828403121561511457600080fd5b813561511f816150dd565b9392505050565b80356001600160601b03811681146150fd57600080fd5b60008060006060848603121561515257600080fd5b833561515d816150dd565b925061516b60208501615126565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156151ba576151ba61517c565b604052919050565b600082601f8301126151d357600080fd5b81356001600160401b038111156151ec576151ec61517c565b8060051b6151fc60208201615192565b9182526020818501810192908101908684111561521857600080fd5b6020860192505b838310156135c657823582526020928301929091019061521f565b801515811461454a57600080fd5b80356150fd8161523a565b60008060006060848603121561526857600080fd5b61527184615126565b925060208401356001600160401b0381111561528c57600080fd5b615298868287016151c2565b92505060408401356152a98161523a565b809150509250925092565b6001600160a01b0391909116815260200190565b6000602082840312156152da57600080fd5b5035919050565b600080604083850312156152f457600080fd5b82356152ff816150dd565b946020939093013593505050565b6000806040838503121561532057600080fd5b823561532b816150dd565b9150602083013561533b8161523a565b809150509250929050565b60008060006060848603121561535b57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561538457600080fd5b61131d82615126565b8060005b6004811015610bc8578151845260209384019390910190600101615391565b60808101611320828461538d565b600082601f8301126153cf57600080fd5b81356001600160401b038111156153e8576153e861517c565b6153fb601f8201601f1916602001615192565b81815284602083860101111561541057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561544057600080fd5b823561544b816150dd565b915060208301356001600160401b0381111561546657600080fd5b615472858286016153be565b9150509250929050565b60005b8381101561549757818101518382015260200161547f565b50506000910152565b600081518084526154b881602086016020860161547c565b601f01601f19169290920160200192915050565b60208152600061131d60208301846154a0565b634e487b7160e01b600052602160045260246000fd5b6005811061551357634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03861681526001600160a01b038516602082015260a0810161554360408301866154f5565b9215156060820152608001529392505050565b60008060006060848603121561556b57600080fd5b8335615576816150dd565b92506020840135915060408401356001600160401b0381111561559857600080fd5b6155a4868287016153be565b9150509250925092565b600080604083850312156155c157600080fd5b6152ff83615126565b6000806000606084860312156155df57600080fd5b83356155ea816150dd565b925060208401356001600160401b038116811461560657600080fd5b9150604084013560ff811681146152a957600080fd5b600082601f83011261562d57600080fd5b604051608081016001600160401b038111828210171561564f5761564f61517c565b60405280608084018581111561566457600080fd5b845b8181101561567e578035835260209283019201615666565b509195945050505050565b6000806000806000806000610140888a0312156156a557600080fd5b6156ae88615126565b965060208801356156be8161523a565b955060408801359450606088013593506080880135925060a088013591506156e98960c08a0161561c565b905092959891949750929550565b6000806040838503121561570a57600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b828110156157545781516001600160a01b031686526020958601959091019060010161572d565b5093949350505050565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c0820152600060c083015161016060e08401526157b8610180840182615719565b905060e08401516101008401526101008401516101208401526101208401516157ed6101408501826001600160a01b03169052565b506101408401516101608401528091505092915050565b60008060008060008060008060006101808a8c03121561582357600080fd5b61582c8a615126565b985060208a013561583c8161523a565b975060408a0135965060608a0135955060808a0135945060a08a013593506158678b60c08c0161561c565b92506101408a01356001600160401b0381111561588357600080fd5b61588f8c828d016153be565b9250506101608a01356001600160401b038111156158ac57600080fd5b6158b88c828d016151c2565b9150509295985092959850929598565b600080604083850312156158db57600080fd5b8235915060208301356001600160401b0381111561546657600080fd5b60008060006060848603121561590d57600080fd5b833592506020840135915060408401356001600160401b0381111561559857600080fd5b60008083601f84011261594357600080fd5b5081356001600160401b0381111561595a57600080fd5b60208301915083602082850101111561597257600080fd5b9250929050565b60008060006040848603121561598e57600080fd5b83356001600160401b038111156159a457600080fd5b6159b086828701615931565b90945092505060208401356152a9816150dd565b6000806000806000608086880312156159dc57600080fd5b8535945060208601356001600160401b038111156159f957600080fd5b615a0588828901615931565b9095509350506040860135615a19816150dd565b949793965091946060013592915050565b600060208284031215615a3c57600080fd5b81356001600160401b03811115615a5257600080fd5b613497848285016153be565b6000806000806000806000806000806000806102408d8f031215615a8157600080fd5b615a8a8d6150f2565b9b50615a9860208e016150f2565b9a50615aa660408e016150f2565b9950615ab460608e016150f2565b9850615ac260808e016150f2565b9750615ad060a08e01615248565b9650615adf8e60c08f0161561c565b9550615aef8e6101408f0161561c565b94506001600160401b036101c08e01351115615b0a57600080fd5b615b1b8e6101c08f01358f016153be565b9350615b2a6101e08e016150f2565b9250615b396102008e016150f2565b9150615b486102208e016150f2565b90509295989b509295989b509295989b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561132057611320615b70565b600060208284031215615bab57600080fd5b815161511f8161523a565b6020810161132082846154f5565b6001815b6001841115615bff57808504811115615be357615be3615b70565b6001841615615bf157908102905b60019390931c928002615bc8565b935093915050565b600082615c1657506001611320565b81615c2357506000611320565b8160018114615c395760028114615c4357615c5f565b6001915050611320565b60ff841115615c5457615c54615b70565b50506001821b611320565b5060208310610133831016604e8410600b8410161715615c82575081810a611320565b615c8f6000198484615bc4565b8060001904821115615ca357615ca3615b70565b029392505050565b600061131d60ff841683615c07565b808202811582820484141761132057611320615b70565b634e487b7160e01b600052601260045260246000fd5b600082615cf657615cf6615cd1565b500490565b600080600060608486031215615d1057600080fd5b83516020850151909350615d238161523a565b60408501519092506152a98161523a565b8082018082111561132057611320615b70565b600060208284031215615d5957600080fd5b5051919050565b60008251615d7281846020870161547c565b9190910192915050565b600061012082019050871515825286602083015285604083015284606083015283608083015261467260a083018461538d565b82815260406020820152600061349760408301846154a0565b600061014082018915158352886020840152876040840152866060840152856080840152615df960a084018661538d565b610140610120840152835190819052602084019061016084019060005b81811015615e34578351835260209384019390920191600101615e16565b50909b9a5050505050505050505050565b848152836020820152608060408201526000615e6460808301856154a0565b905082606083015295945050505050565b600060018201615e8757615e87615b70565b5060010190565b600060208284031215615ea057600080fd5b815161511f816150dd565b6001600160a01b03929092168252602082015260400190565b600080600060608486031215615ed957600080fd5b8351602085015160408601519194509250600a81106152a957600080fd5b60008060408385031215615f0a57600080fd5b505080516020909101519092909150565b6000600160ff1b8201615f3057615f30615b70565b5060000390565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091526001600160a01b0316604082015260600190565b600082615f8957615f89615cd1565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122004d0e8698d556c8622b85aecf09450b7bc71e8101fe95c2464a140be1c6fb1b364736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106103005760003560e01c806382d0223711610191578063c71f4253116100e2578063f6506db411610090578063f6506db414610a43578063f7434ea914610a63578063f7e7d1fd14610a83578063fbf405b014610aa3578063fc6f8f1614610ac3578063fca31d6d14610ae3578063fe4037e614610b03578063fe524c3914610b2357600080fd5b8063c71f42531461096e578063cf0c38f81461098e578063d07368bd146109ae578063d2b8035a146109ce578063d4d1d76a146109ee578063d98493f614610a03578063e4c0aaf414610a2357600080fd5b8063acdbf51d1161013f578063acdbf51d14610883578063afe15cfb146108a3578063b0049637146108d8578063b44d573c146108f8578063c13517e114610928578063c258bb191461093b578063c35699021461095b57600080fd5b806382d02237146107a15780638456cb59146107c157806386541b24146107d657806386cdecef146107f65780638a9bb02a146108165780638bb0487514610843578063a072b86c1461086357600080fd5b80632e2e936a1161025657806352d1902d1161020457806352d1902d1461068257806354fd4d5014610697578063564a565d146106d657806359ec827e146107075780635c975abb14610727578063751accd0146107415780637717a6e8146107615780637934c0be1461078157600080fd5b80632e2e936a146105ad5780632fcb4f04146105cd5780633cfd1184146105ed5780633f4ba83a1461061a57806342c37fa31461062f578063452a93201461064f5780634f1ef2861461066f57600080fd5b806319b81529116102b357806319b815291461045a5780631c3db16d1461048a5780631d7e6892146104c75780631f5a0dd2146104e75780632d29a47b146105485780632d68efc9146105685780632e1daf2f1461058d57600080fd5b8062f5822c146103055780630219da79146103275780630761c14d1461039f5780630b7414bc146103bf5780630c340a24146103df578063115d53761461040c5780631860592b1461042c575b600080fd5b34801561031157600080fd5b50610325610320366004615102565b610b43565b005b34801561033357600080fd5b50610372610342366004615102565b60086020526000908152604090205460ff808216916001600160401b0361010082041691600160481b9091041683565b6040805193151584526001600160401b03909216602084015260ff16908201526060015b60405180910390f35b3480156103ab57600080fd5b506103256103ba36600461513d565b610b90565b3480156103cb57600080fd5b506103256103da366004615253565b610bce565b3480156103eb57600080fd5b506000546103ff906001600160a01b031681565b60405161039691906152b4565b34801561041857600080fd5b506103256104273660046152c8565b610cff565b34801561043857600080fd5b5061044c6104473660046152e1565b6112cc565b604051908152602001610396565b34801561046657600080fd5b5061047a6104753660046152c8565b611326565b6040519015158152602001610396565b34801561049657600080fd5b506104aa6104a53660046152c8565b61141f565b604080519384529115156020840152151590820152606001610396565b3480156104d357600080fd5b506103256104e236600461530d565b611520565b3480156104f357600080fd5b506105076105023660046152c8565b611576565b604080516001600160601b0390981688529515156020880152948601939093526060850191909152608084015260a0830152151560c082015260e001610396565b34801561055457600080fd5b50610325610563366004615346565b6115d5565b34801561057457600080fd5b506009546103ff9061010090046001600160a01b031681565b34801561059957600080fd5b506004546103ff906001600160a01b031681565b3480156105b957600080fd5b50600b546103ff906001600160a01b031681565b3480156105d957600080fd5b506103256105e8366004615102565b611861565b3480156105f957600080fd5b5061060d610608366004615372565b6118ae565b60405161039691906153b0565b34801561062657600080fd5b50610325611918565b34801561063b57600080fd5b5061032561064a3660046152e1565b61199b565b34801561065b57600080fd5b506001546103ff906001600160a01b031681565b61032561067d36600461542d565b6119e2565b34801561068e57600080fd5b5061044c611c07565b3480156106a357600080fd5b506106c9604051806040016040528060068152602001650302e31302e360d41b81525081565b60405161039691906154cc565b3480156106e257600080fd5b506106f66106f13660046152c8565b611c65565b604051610396959493929190615517565b34801561071357600080fd5b5061044c6107223660046152c8565b611cc1565b34801561073357600080fd5b5060095461047a9060ff1681565b34801561074d57600080fd5b5061032561075c366004615556565b611e16565b34801561076d57600080fd5b5061032561077c3660046155ae565b611ec0565b34801561078d57600080fd5b5061032561079c36600461530d565b611f82565b3480156107ad57600080fd5b506103256107bc3660046155ca565b612001565b3480156107cd57600080fd5b506103256120be565b3480156107e257600080fd5b506103256107f1366004615689565b61215e565b34801561080257600080fd5b5061044c6108113660046156f7565b61233b565b34801561082257600080fd5b506108366108313660046156f7565b61238c565b604051610396919061575e565b34801561084f57600080fd5b5061032561085e3660046152c8565b612518565b34801561086f57600080fd5b5061032561087e366004615804565b61267d565b34801561088f57600080fd5b506103ff61089e3660046152c8565b6129b5565b3480156108af57600080fd5b506108c36108be3660046152c8565b6129df565b60408051928352602083019190915201610396565b3480156108e457600080fd5b506103256108f3366004615102565b612a8b565b34801561090457600080fd5b5061047a610913366004615102565b600a6020526000908152604090205460ff1681565b61044c6109363660046158c8565b612ad8565b34801561094757600080fd5b50610325610956366004615102565b612b10565b6103256109693660046158f8565b612b5d565b34801561097a57600080fd5b5061044c6109893660046152c8565b613022565b34801561099a57600080fd5b506003546103ff906001600160a01b031681565b3480156109ba57600080fd5b506103256109c9366004615102565b61308a565b3480156109da57600080fd5b5061044c6109e93660046156f7565b613133565b3480156109fa57600080fd5b5060065461044c565b348015610a0f57600080fd5b5061044c610a1e366004615979565b613452565b348015610a2f57600080fd5b50610325610a3e366004615102565b61349f565b348015610a4f57600080fd5b5061044c610a5e3660046159c4565b6134ec565b348015610a6f57600080fd5b5061044c610a7e366004615a2a565b6135d0565b348015610a8f57600080fd5b50610325610a9e366004615102565b61361c565b348015610aaf57600080fd5b506002546103ff906001600160a01b031681565b348015610acf57600080fd5b5061044c610ade3660046152c8565b6136f3565b348015610aef57600080fd5b50610325610afe366004615a5e565b613722565b348015610b0f57600080fd5b50610325610b1e366004615102565b613818565b348015610b2f57600080fd5b5061047a610b3e3660046155ae565b613865565b6000546001600160a01b03163314610b6e5760405163c383977560e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314610bbb57604051639d6cab9960e01b815260040160405180910390fd5b610bc883838360016138ad565b50505050565b6000546001600160a01b03163314610bf95760405163c383977560e01b815260040160405180910390fd5b60005b8251811015610bc8578115610c9857828181518110610c1d57610c1d615b5a565b602002602001015160001480610c5057506006548351849083908110610c4557610c45615b5a565b602002602001015110155b15610c6e57604051633d58a98960e11b815260040160405180910390fd5b610c9384848381518110610c8457610c84615b5a565b60200260200101516001613b29565b610cf7565b6001838281518110610cac57610cac615b5a565b602002602001015103610cd2576040516356d111fd60e11b815260040160405180910390fd5b610cf784848381518110610ce857610ce8615b5a565b60200260200101516000613b29565b600101610bfc565b600060078281548110610d1457610d14615b5a565b600091825260208220600490910201805460058054929450916001600160601b03909116908110610d4757610d47615b5a565b6000918252602082206003850154600c909202019250610d6990600190615b86565b90506000836003018281548110610d8257610d82615b5a565b600091825260208220600b909102019150600185015460ff166004811115610dac57610dac6154df565b03610e875781158015610dfb57506001840154600684019060ff166004811115610dd857610dd86154df565b60048110610de857610de8615b5a565b01546002850154610df99042615b86565b105b15610e1957604051633e9727df60e01b815260040160405180910390fd5b6003810154600682015414610e41576040516309e4486b60e41b815260040160405180910390fd5b8254600160601b900460ff16610e58576002610e5b565b60015b60018086018054909160ff1990911690836004811115610e7d57610e7d6154df565b021790555061127e565b60018085015460ff166004811115610ea157610ea16154df565b03610fb1576001840154600684019060ff166004811115610ec457610ec46154df565b60048110610ed457610ed4615b5a565b01546002850154610ee59042615b86565b108015610f7c57506006816000015481548110610f0457610f04615b5a565b600091825260209091200154604051630baa64d160e01b8152600481018790526001600160a01b0390911690630baa64d190602401602060405180830381865afa158015610f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7a9190615b99565b155b15610f9a57604051634dfa578560e11b815260040160405180910390fd5b6001808501805460029260ff199091169083610e7d565b6002600185015460ff166004811115610fcc57610fcc6154df565b0361111a576001840154600684019060ff166004811115610fef57610fef6154df565b60048110610fff57610fff615b5a565b015460028501546110109042615b86565b1080156110a75750600681600001548154811061102f5761102f615b5a565b6000918252602090912001546040516336a66c7560e11b8152600481018790526001600160a01b0390911690636d4cd8ea90602401602060405180830381865afa158015611081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a59190615b99565b155b156110c557604051631988dead60e31b815260040160405180910390fd5b600184018054600360ff199091161790558354604051600160601b9091046001600160a01b03169086907fa5d41b970d849372be1da1481ffd78d162bfe57a7aa2fe4e5fb73481fa5ac24f90600090a361127e565b6003600185015460ff166004811115611135576111356154df565b03611245576001840154600684019060ff166004811115611158576111586154df565b6004811061116857611168615b5a565b015460028501546111799042615b86565b1080156112105750600681600001548154811061119857611198615b5a565b600091825260209091200154604051630855bbe960e01b8152600481018790526001600160a01b0390911690630855bbe990602401602060405180830381865afa1580156111ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120e9190615b99565b155b1561122e57604051632f4dfd8760e01b815260040160405180910390fd5b6001808501805460049260ff199091169083610e7d565b6004600185015460ff166004811115611260576112606154df565b0361127e576040516307f38c8f60e11b815260040160405180910390fd5b426002850155600184015460405186917f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b91916112bd9160ff1690615bb6565b60405180910390a25050505050565b6001600160a01b03821660009081526008602052604081205461010081046001600160401b03169061130990600160481b900460ff16600a615cab565b6113139084615cba565b61131d9190615ce7565b90505b92915050565b6000806007838154811061133c5761133c615b5a565b600091825260208220600360049092020190810180549193509061136290600190615b86565b8154811061137257611372615b5a565b600091825260208220845460058054600b909402909201945090916001600160601b039091169081106113a7576113a7615b5a565b90600052602060002090600c020190508060050154826003015410156113d257506000949350505050565b80546005805490916001600160601b03169081106113f2576113f2615b5a565b6000918252602080832094548352600a600c9092029094010190925250604090205460ff16159392505050565b6000806000806007858154811061143857611438615b5a565b600091825260208220600360049092020190810180549193509061145e90600190615b86565b8154811061146e5761146e615b5a565b90600052602060002090600b020190506000600682600001548154811061149757611497615b5a565b600091825260209091200154604051631c3db16d60e01b8152600481018990526001600160a01b0390911691508190631c3db16d90602401606060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190615cfb565b9199909850909650945050505050565b6000546001600160a01b0316331461154b5760405163c383977560e01b815260040160405180910390fd5b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6005818154811061158657600080fd5b60009182526020909120600c9091020180546002820154600383015460048401546005850154600b909501546001600160601b038516965060ff600160601b9095048516959394929391921687565b60095460ff16156115f957604051636f1dac1d60e01b815260040160405180910390fd5b6000806007858154811061160f5761160f615b5a565b600091825260209091206004918202019150600182015460ff16600481111561163a5761163a6154df565b1461165857604051638794ce4b60e01b815260040160405180910390fd5b80600301848154811061166d5761166d615b5a565b6000918252602082206004600b909202019081015490935091506116918483615d34565b60058401546006850154600286015492935090916000906116b3908390615ce7565b905060008660010154905060008060068960000154815481106116d8576116d8615b5a565b60009182526020909120015460405163368efae360e21b8152600481018e9052602481018d90526001600160a01b039091169150819063da3beb8c90604401602060405180830381865afa158015611734573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117589190615d47565b91505080600003611774578386111561176f578395505b611794565b61177f846002615cba565b86111561179457611791846002615cba565b95505b60048801869055865b8681101561184057848110156117f6576117ef6040518061010001604052808e81526020018d815260200184815260200187815260200186815260200185815260200188815260200183815250613bb1565b9550611838565b6118386040518061010001604052808e81526020018d81526020018481526020018781526020018681526020018581526020018881526020018381525061405f565b60010161179d565b508488600501541461185457600588018590555b5050505050505050505050565b6000546001600160a01b0316331461188c5760405163c383977560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6118b6615032565b6005826001600160601b0316815481106118d2576118d2615b5a565b6000918252602090912060408051608081019182905292600c029091016006019060049082845b8154815260200190600101908083116118f95750505050509050919050565b6000546001600160a01b031633146119435760405163c383977560e01b815260040160405180910390fd5b60095460ff166119665760405163b4143dc760e01b815260040160405180910390fd5b6009805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6004546001600160a01b031633146119c657604051639d6cab9960e01b815260040160405180910390fd5b6002546119dd906001600160a01b0316838361445c565b505050565b6119eb8261451f565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a6957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a5d600080516020615f8f8339815191525490565b6001600160a01b031614155b15611a875760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611ae1575060408051601f3d908101601f19168201909252611ade91810190615d47565b60015b611b095781604051630c76093760e01b8152600401611b0091906152b4565b60405180910390fd5b600080516020615f8f8339815191528114611b3a57604051632a87526960e21b815260048101829052602401611b00565b600080516020615f8f8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156119dd576000836001600160a01b031683604051611ba19190615d60565b600060405180830381855af49150503d8060008114611bdc576040519150601f19603f3d011682016040523d82523d6000602084013e611be1565b606091505b5050905080610bc8576040516339b21b5d60e11b815260040160405180910390fd5b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c525760405163703e46dd60e11b815260040160405180910390fd5b50600080516020615f8f83398151915290565b60078181548110611c7557600080fd5b60009182526020909120600490910201805460018201546002909201546001600160601b0382169350600160601b9091046001600160a01b03169160ff80821692610100909204169085565b60008060078381548110611cd757611cd7615b5a565b6000918252602082206003600490920201908101805491935090611cfd90600190615b86565b81548110611d0d57611d0d615b5a565b600091825260208220845460058054600b909402909201945090916001600160601b03909116908110611d4257611d42615b5a565b90600052602060002090600c020190508060050154826003015410611de15782546001600160601b031660001901611d83576001600160ff1b039350611e0e565b6003820154611d93906002615cba565b611d9e906001615d34565b81546005805490916001600160601b0316908110611dbe57611dbe615b5a565b90600052602060002090600c020160040154611dda9190615cba565b9350611e0e565b6003820154611df1906002615cba565b611dfc906001615d34565b8160040154611e0b9190615cba565b93505b505050919050565b6000546001600160a01b03163314611e415760405163c383977560e01b815260040160405180910390fd5b6000836001600160a01b03168383604051611e5c9190615d60565b60006040518083038185875af1925050503d8060008114611e99576040519150601f19603f3d011682016040523d82523d6000602084013e611e9e565b606091505b5050905080610bc8576040516322092f2f60e11b815260040160405180910390fd5b60095460ff1615611ee457604051636f1dac1d60e01b815260040160405180910390fd5b600b546040516370a0823160e01b81526001600160a01b03909116906370a0823190611f149033906004016152b4565b602060405180830381865afa158015611f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f559190615d47565b600003611f75576040516326b551e560e11b815260040160405180910390fd5b6119dd33838360006138ad565b6000546001600160a01b03163314611fad5760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f541615e167511d757a7067a700eb54431b256bb458dfdce0ac58bf2ed0aefd4491a35050565b6000546001600160a01b0316331461202c5760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038316600081815260086020908152604091829020805469ffffffffffffffffff0019166101006001600160401b03881690810260ff60481b191691909117600160481b60ff8816908102919091179092558351908152918201527fe6996b7f03e9bd02228b99d3d946932e3197f505f60542c4cfbc919441d8a4e6910160405180910390a2505050565b6001546001600160a01b031633148015906120e457506000546001600160a01b03163314155b1561210257604051636b29334f60e01b815260040160405180910390fd5b60095460ff161561212657604051636f1dac1d60e01b815260040160405180910390fd5b6009805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6000546001600160a01b031633146121895760405163c383977560e01b815260040160405180910390fd5b60006005886001600160601b0316815481106121a7576121a7615b5a565b90600052602060002090600c0201905060016001600160601b0316886001600160601b031614158015612209575080546005805488926001600160601b03169081106121f5576121f5615b5a565b90600052602060002090600c020160020154115b1561222757604051639717078960e01b815260040160405180910390fd5b60005b60018201548110156122a25786600583600101838154811061224e5761224e615b5a565b90600052602060002001548154811061226957612269615b5a565b90600052602060002090600c020160020154101561229a57604051639717078960e01b815260040160405180910390fd5b60010161222a565b5060028101869055805460ff60601b1916600160601b88151502178155600381018590556004808201859055600582018490556122e59060068301908490615050565b50876001600160601b03167f709b1f5fda58af9a4f52dacd1ec404840a8148455700cce155a2bd8cf127ef1a88888888888860405161232996959493929190615d7c565b60405180910390a25050505050505050565b60006007838154811061235057612350615b5a565b9060005260206000209060040201600301828154811061237257612372615b5a565b90600052602060002090600b020160010154905092915050565b6123f260405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6007838154811061240557612405615b5a565b9060005260206000209060040201600301828154811061242757612427615b5a565b90600052602060002090600b020160405180610160016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682018054806020026020016040519081016040528092919081815260200182805480156124d657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124b8575b5050509183525050600782015460208201526008820154604082015260098201546001600160a01b03166060820152600a909101546080909101529392505050565b60006007828154811061252d5761252d615b5a565b600091825260209091206004918202019150600182015460ff166004811115612558576125586154df565b1461257657604051638794ce4b60e01b815260040160405180910390fd5b6001810154610100900460ff16156125a15760405163c977f8d360e01b815260040160405180910390fd5b60006125ac8361141f565b505060018301805461010061ff001990911617905582546040518281529192508491600160601b9091046001600160a01b0316907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a3815460405163188d362b60e11b81526004810185905260248101839052600160601b9091046001600160a01b03169063311a6c56906044015b600060405180830381600087803b15801561266057600080fd5b505af1158015612674573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146126a85760405163c383977560e01b815260040160405180910390fd5b8660058a6001600160601b0316815481106126c5576126c5615b5a565b90600052602060002090600c02016002015411156126f657604051639717078960e01b815260040160405180910390fd5b80516000036127185760405163402585f560e01b815260040160405180910390fd5b6001600160601b03891661273f57604051631ef4f64960e01b815260040160405180910390fd5b60058054600181018255600091825290600c82027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905b83518110156128015783818151811061279257612792615b5a565b6020026020010151600014806127c5575060065484518590839081106127ba576127ba615b5a565b602002602001015110155b156127e357604051633d58a98960e11b815260040160405180910390fd5b6127f983858381518110610c8457610c84615b5a565b600101612777565b5060016000908152600a8201602052604090205460ff16612835576040516306351b3d60e31b815260040160405180910390fd5b80546001600160601b0319166001600160601b038c16178155604080516000815260208101918290525161286d91600184019161508e565b50805460ff60601b1916600160601b8b15150217815560028101899055600381018890556004808201889055600582018790556128b09060068301908790615050565b50600480546040516311de995760e21b81526001600160a01b039091169163477a655c916128e2918691899101615daf565b600060405180830381600087803b1580156128fc57600080fd5b505af1158015612910573d6000803e3d6000fd5b5050505060058b6001600160601b03168154811061293057612930615b5a565b600091825260208083206001600c909302018201805492830181558352909120018290556040516001600160601b03808d1691908416907f550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee6906129a0908e908e908e908e908e908e908d90615dc8565b60405180910390a35050505050505050505050565b600681815481106129c557600080fd5b6000918252602090912001546001600160a01b0316905081565b6000806000600784815481106129f7576129f7615b5a565b6000918252602090912060049091020190506003600182015460ff166004811115612a2457612a246154df565b03612a7c576002810154815460058054929550916001600160601b03909116908110612a5257612a52615b5a565b600091825260209091206009600c9092020101546002820154612a759190615d34565b9150612a85565b60009250600091505b50915091565b6000546001600160a01b03163314612ab65760405163c383977560e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000612ae3826135d0565b341015612b0357604051630e3360f160e21b815260040160405180910390fd5b61131d838360003461454d565b6000546001600160a01b03163314612b3b5760405163c383977560e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b612b6683611cc1565b341015612b8657604051633191f8f160e01b815260040160405180910390fd5b600060078481548110612b9b57612b9b615b5a565b6000918252602090912060049091020190506003600182015460ff166004811115612bc857612bc86154df565b14612be6576040516337cdefcb60e21b815260040160405180910390fd5b60038101805460009190612bfc90600190615b86565b81548110612c0c57612c0c615b5a565b90600052602060002090600b020190506006816000015481548110612c3357612c33615b5a565b6000918252602090912001546001600160a01b03163314612c675760405163065f245f60e01b815260040160405180910390fd5b8154815460038401805460018101825560009182526020909120600580546001600160601b0390951694600b9093029091019184908110612caa57612caa615b5a565b90600052602060002090600c020160050154846003015410612db3576005836001600160601b031681548110612ce257612ce2615b5a565b60009182526020909120600c9091020154600580546001600160601b0390921694509084908110612d1557612d15615b5a565b60009182526020808320858452600a600c90930201919091019052604090205460ff16612d4157600191505b84546001600160601b03848116911614612db357845460038601546001600160601b0390911690612d7490600190615b86565b6040516001600160601b03861681528a907f736e3f52761298c8c0823e1ebf482ed3c5ecb304f743d2d91a7c006e8e8d7a1f9060200160405180910390a45b84546001600160601b0319166001600160601b038416908117865560018601805460ff1916905542600287015560058054600092908110612df657612df6615b5a565b90600052602060002090600c02019050806004015434612e169190615ce7565b8260030181905550612e3081600201548260030154614592565b60018084019190915534600284015583835560045460038801546001600160a01b039091169163d09f392d918c91612e6791615b86565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b158015612ea557600080fd5b505af1158015612eb9573d6000803e3d6000fd5b505086548454149150612f9f90505784546003870154612edb90600190615b86565b83546040519081528b907fcbe7939a71f0b369c7471d760a0a99b60b7bb010ee0406cba8a46679d1ea77569060200160405180910390a46006826000015481548110612f2957612f29615b5a565b60009182526020909120015460038301546040516302dbb79560e61b81526001600160a01b039092169163b6ede54091612f6c918d918d918d9190600401615e45565b600060405180830381600087803b158015612f8657600080fd5b505af1158015612f9a573d6000803e3d6000fd5b505050505b8554604051600160601b9091046001600160a01b0316908a907f9c9b64db9e130f48381bf697abf638e73117dbfbfd7a4484f2da3ba188f4187d90600090a3887f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b91600060405161300f9190615bb6565b60405180910390a2505050505050505050565b6000806007838154811061303857613038615b5a565b9060005260206000209060040201905080600301600182600301805490506130609190615b86565b8154811061307057613070615b5a565b90600052602060002090600b020160030154915050919050565b6000546001600160a01b031633146130b55760405163c383977560e01b815260040160405180910390fd5b6006805460018101825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f810180546001600160a01b0319166001600160a01b0385169081179091556040519192909183917f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a35050565b6000806007848154811061314957613149615b5a565b9060005260206000209060040201905060006001826003018054905061316f9190615b86565b9050600082600301828154811061318857613188615b5a565b600091825260208220600b909102019150600184015460ff1660048111156131b2576131b26154df565b146131d057604051638285c4ef60e01b815260040160405180910390fd5b600060068260000154815481106131e9576131e9615b5a565b6000918252602082200154600a8401546001600160a01b039091169250905b878110801561321e575060038401546006850154105b156134265760006001600160a01b03841663d2b8035a8b8461323f81615e75565b955061324b9087615d34565b6040516001600160e01b031960e085901b168152600481019290925260248201526044016020604051808303816000875af115801561328e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b29190615e8e565b90506001600160a01b0381166132c85750613208565b6004805460018701546040516310f0b12f60e11b81526001600160a01b03909216926321e1625e926132fe928692909101615eab565b600060405180830381600087803b15801561331857600080fd5b505af115801561332c573d6000803e3d6000fd5b50505060068601546040518c92506001600160a01b038416917f6119cf536152c11e0a9a6c22f3953ce4ecc93ee54fa72ffa326ffabded21509b91613379918b8252602082015260400190565b60405180910390a36006850180546001810182556000828152602090200180546001600160a01b0319166001600160a01b03841617905560038601549054036134205760048054604051632e96bc2360e11b81529182018c9052602482018890526001600160a01b031690635d2d784690604401600060405180830381600087803b15801561340757600080fd5b505af115801561341b573d6000803e3d6000fd5b505050505b50613208565b8084600a01600082825461343a9190615d34565b90915550505060069092015494505050505092915050565b60006134978261044786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135d092505050565b949350505050565b6000546001600160a01b031633146134ca5760405163c383977560e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526008602052604081205460ff166135255760405163e51cf7bf60e01b815260040160405180910390fd5b613530858585613452565b82101561355057604051630e3360f160e21b815260040160405180910390fd5b6135656001600160a01b0384163330856145a1565b613582576040516312171d8360e31b815260040160405180910390fd5b6135c68686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925087915061454d9050565b9695505050505050565b60008060006135de8461467d565b5091509150806005836001600160601b03168154811061360057613600615b5a565b90600052602060002090600c0201600401546134979190615cba565b60066000613628614704565b8054909150600160401b900460ff168061364f575080546001600160401b03808416911610155b1561366c5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff19909216821717825560098054610100600160a81b0319166101006001600160a01b03871602179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b60006007828154811061370857613708615b5a565b600091825260209091206003600490920201015492915050565b6002600061372e614704565b8054909150600160401b900460ff1680613755575080546001600160401b03808416911610155b156137725760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556137a68e8e8e8e8e8e8e8e8e8e8d614728565b600b80546001600160a01b0319166001600160a01b038616179055805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050505050505050505050565b6000546001600160a01b031633146138435760405163c383977560e01b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60006005836001600160601b03168154811061388357613883615b5a565b60009182526020808320948352600c91909102909301600a0190925250604090205460ff16919050565b60006001600160601b03841615806138d057506005546001600160601b03851610155b156138e8576138e0826005614a6b565b506000613497565b821580159061392357506005846001600160601b03168154811061390e5761390e615b5a565b90600052602060002090600c02016002015483105b15613933576138e0826006614a6b565b600480546040516303d9595760e31b81526001600160a01b03888116938201939093526001600160601b03871660248201526044810186905260009283928392911690631ecacab8906064016060604051808303816000875af115801561399e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c29190615ec4565b9194509250905060008160098111156139dd576139dd6154df565b141580156139fd575060018160098111156139fa576139fa6154df565b14155b15613a1857613a0c8582614a6b565b60009350505050613497565b6001816009811115613a2c57613a2c6154df565b03613a3d5760019350505050613497565b8215613a6a57600254613a5b906001600160a01b03168930866145a1565b613a6a57613a0c856002614a6b565b8115613a9657600254613a87906001600160a01b0316898461445c565b613a9657613a0c856003614a6b565b600480546040516355601d6960e11b81526001600160a01b038b8116938201939093526001600160601b038a16602482015260448101869052606481018590526084810189905291169063aac03ad29060a401600060405180830381600087803b158015613b0357600080fd5b505af1158015613b17573d6000803e3d6000fd5b5060019b9a5050505050505050505050565b806005846001600160601b031681548110613b4657613b46615b5a565b60009182526020808320868452600c92909202909101600a0190526040808220805460ff19169315159390931790925590518215159184916001600160601b038716917fb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc7991a4505050565b6000806007836000015181548110613bcb57613bcb615b5a565b90600052602060002090600402019050600081600301846020015181548110613bf657613bf6615b5a565b90600052602060002090600b0201905060006006826000015481548110613c1f57613c1f615b5a565b60009182526020808320919091015487519188015160e089015160808a015160a08b01516040516333ac937b60e11b8152600481019690965260248601939093526044850191909152606484015260848301526001600160a01b03169250829063675926f69060a401602060405180830381865afa158015613ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc99190615d47565b9050612710811115613cda57506127105b6000612710613ce98382615b86565b8560010154613cf89190615cba565b613d029190615ce7565b90506000846006018860e0015181548110613d1f57613d1f615b5a565b6000918252602090912001546004805460405163965af6c760e01b81526001600160a01b03938416945092169163965af6c791613d60918591879101615eab565b600060405180830381600087803b158015613d7a57600080fd5b505af1158015613d8e573d6000803e3d6000fd5b505060048054604051633c85b79360e21b8152600094508493506001600160a01b039091169163f216de4c91613dc8918791899101615eab565b60408051808303816000875af1158015613de6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e0a9190615ef7565b91509150808a60c001818151613e209190615d34565b90525060208a01518a516001600160a01b0385167f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e788613e5f86615f1b565b60098d0154604051613e819392916000916001600160a01b0390911690615f37565b60405180910390a4811580613f165750895160208b015160e08c015160405163ba66fde760e01b81526004810193909352602483019190915260448201526001600160a01b0387169063ba66fde790606401602060405180830381865afa158015613ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f149190615b99565b155b15613f7d576004805460405163b5d69e9960e01b81526001600160a01b039091169163b5d69e9991613f4a918791016152b4565b600060405180830381600087803b158015613f6457600080fd5b505af1158015613f78573d6000803e3d6000fd5b505050505b60018a60600151613f8e9190615b86565b8a60e00151148015613fa2575060408a0151155b1561404c5760098701546000546002890154613fcb926001600160a01b03908116921690614ad9565b60005460c08b0151600254613fee926001600160a01b039182169291169061445c565b5060208a01518a5160c08c015160028a015460098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf49361404393909290916001600160a01b0390911690615f5b565b60405180910390a35b50505060c0909601519695505050505050565b6000600782600001518154811061407857614078615b5a565b906000526020600020906004020190506000816003018360200151815481106140a3576140a3615b5a565b90600052602060002090600b02019050600060068260000154815481106140cc576140cc615b5a565b6000918252602080832090910154865191870151606088015160e08901516001600160a01b039093169550859363675926f69390929161410b91615f7a565b60808a015160a08b01516040516001600160e01b031960e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401602060405180830381865afa15801561416b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061418f9190615d47565b90506127108111156141a057506127105b60008360060186606001518760e001516141ba9190615f7a565b815481106141ca576141ca615b5a565b600091825260208220015460018601546001600160a01b0390911692506141f19084614592565b6004805460405163965af6c760e01b81529293506001600160a01b03169163965af6c791614223918691869101615eab565b600060405180830381600087803b15801561423d57600080fd5b505af1158015614251573d6000803e3d6000fd5b50505050600061427488604001518960c0015161426e9190615ce7565b85614592565b90508086600801600082825461428a9190615d34565b9250508190555060006142b0896040015188600201546142aa9190615ce7565b86614592565b9050808760070160008282546142c69190615d34565b90915550506002546142e2906001600160a01b0316858461445c565b5060098701546142fc906001600160a01b03168583614ad9565b6020890151895160098901546040516001600160a01b03888116927f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e79261434c928c928a928a9290911690615f37565b60405180910390a46001896060015160026143679190615cba565b6143719190615b86565b8960e001510361445157600087600801548a60c001516143919190615b86565b90506000886007015489600201546143a99190615b86565b9050811515806143b857508015155b156118545781156143e2576000546002546143e0916001600160a01b0391821691168461445c565b505b8015614407576009890154600054614407916001600160a01b03908116911683614ad9565b60208b01518b5160098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf4916129a091879187916001600160a01b0390911690615f5b565b505050505050505050565b6000806000856001600160a01b0316858560405160240161447e929190615eab565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516144b39190615d60565b6000604051808303816000865af19150503d80600081146144f0576040519150601f19603f3d011682016040523d82523d6000602084013e6144f5565b606091505b50915091508180156135c65750805115806135c65750808060200190518101906135c69190615b99565b6000546001600160a01b0316331461454a5760405163c383977560e01b815260040160405180910390fd5b50565b336000908152600a602052604081205460ff1661457d57604051630407618360e31b815260040160405180910390fd5b61458985858585614b1c565b95945050505050565b60006127106113138385615cba565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516146069190615d60565b6000604051808303816000865af19150503d8060008114614643576040519150601f19603f3d011682016040523d82523d6000602084013e614648565b606091505b50915091508180156146725750805115806146725750808060200190518101906146729190615b99565b979650505050505050565b600080600060408451106146f2575050506020810151604082015160608301516001600160601b03831615806146be57506005546001600160601b03841610155b156146c857600192505b816000036146d557600391505b8015806146e457506006548110155b156146ed575060015b6146fd565b506001915060039050815b9193909250565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b614730614df7565b600080546001600160a01b03199081166001600160a01b038e81169190911783556001805483168e83161781556002805484168e84161781556003805485168e851617905560048054851688851617905560098054610100600160a81b031916610100888616021790556006805481875291820190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40018054909316918b1691821790925560405190927f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a36005805460010181556000908152600480546040516311de995760e21b81526001600160a01b039091169263477a655c9261483b92889101615daf565b600060405180830381600087803b15801561485557600080fd5b505af1158015614869573d6000803e3d6000fd5b5050600580546001810182556000918252600c027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160601b0319168155604080518381526020810190915290935091505080516148d791600184019160209091019061508e565b50805460ff60601b1916600160601b8815150217815585516002820155602086015160038201556040860151600480830191909155606087015160058301556149269060068301908790615050565b50600480546040516311de995760e21b81526001600160a01b039091169163477a655c9161495991600191899101615daf565b600060405180830381600087803b15801561497357600080fd5b505af1158015614987573d6000803e3d6000fd5b5060009250600191506149979050565b6040519080825280602002602001820160405280156149c0578160200160208202803683370190505b5090506001816000815181106149d8576149d8615b5a565b602090810291909101015281546001600160601b031660017f550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee68a8a600060200201518b600160200201518c600260200201518d600360200201518d89604051614a479796959493929190615dc8565b60405180910390a3614a5c6001806001613b29565b50505050505050505050505050565b614a758282614e1e565b6007816009811115614a8957614a896154df565b03614aa757604051636590e91560e01b815260040160405180910390fd5b6008816009811115614abb57614abb6154df565b03611c03576040516358859f1d60e01b815260040160405180910390fd5b6001600160a01b038316614b08576009546119dd906001600160a01b0384811691849161010090910416614f67565b610bc86001600160a01b038416838361445c565b6000806000614b2a8661467d565b92505091506005826001600160601b031681548110614b4b57614b4b615b5a565b60009182526020808320848452600a600c90930201919091019052604090205460ff16614b8b5760405163b34eb75d60e01b815260040160405180910390fd5b600780546001810182556000918252600160601b33026001600160601b03851617600482027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6888101918255427fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a909101556006805492965090929184908110614c1657614c16615b5a565b6000918252602082200154600580546001600160a01b039092169350906001600160601b038716908110614c4c57614c4c615b5a565b60009182526020808320600387018054600181018255908552918420600c909302019350600b0201906001600160a01b038a1615614c9757614c928a84600401546112cc565b614c9d565b82600401545b9050614ca9818a615ce7565b600380840191909155868355600284015490840154614cc89190614592565b6001830155600282018990556009820180546001600160a01b0319166001600160a01b038c8116919091179091556004805460405163d09f392d60e01b81529182018b9052600060248301529091169063d09f392d90604401600060405180830381600087803b158015614d3b57600080fd5b505af1158015614d4f573d6000803e3d6000fd5b50505050836001600160a01b031663b6ede540898e8e86600301546040518563ffffffff1660e01b8152600401614d899493929190615e45565b600060405180830381600087803b158015614da357600080fd5b505af1158015614db7573d6000803e3d6000fd5b50506040513392508a91507f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a350505050505050949350505050565b614dff615018565b614e1c57604051631afcd79f60e31b815260040160405180910390fd5b565b6001826001811115614e3257614e326154df565b03614e3b575050565b6002816009811115614e4f57614e4f6154df565b03614e6d57604051630f323ed960e11b815260040160405180910390fd5b6003816009811115614e8157614e816154df565b03614e9f5760405163e45e13a360e01b815260040160405180910390fd5b6004816009811115614eb357614eb36154df565b03614ed157604051631d91d0ed60e31b815260040160405180910390fd5b6005816009811115614ee557614ee56154df565b03614f0357604051637c84af5160e01b815260040160405180910390fd5b6006816009811115614f1757614f176154df565b03614f3557604051630caac6b360e31b815260040160405180910390fd5b6009816009811115614f4957614f496154df565b03611c0357604051633e57962f60e21b815260040160405180910390fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015614f9657505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015614fd157600080fd5b505af1158015614fe5573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038516935063a9059cbb9250612646915086908690600401615eab565b6000615022614704565b54600160401b900460ff16919050565b60405180608001604052806004906020820280368337509192915050565b826004810192821561507e579160200282015b8281111561507e578251825591602001919060010190615063565b5061508a9291506150c8565b5090565b82805482825590600052602060002090810192821561507e579160200282018281111561507e578251825591602001919060010190615063565b5b8082111561508a57600081556001016150c9565b6001600160a01b038116811461454a57600080fd5b80356150fd816150dd565b919050565b60006020828403121561511457600080fd5b813561511f816150dd565b9392505050565b80356001600160601b03811681146150fd57600080fd5b60008060006060848603121561515257600080fd5b833561515d816150dd565b925061516b60208501615126565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156151ba576151ba61517c565b604052919050565b600082601f8301126151d357600080fd5b81356001600160401b038111156151ec576151ec61517c565b8060051b6151fc60208201615192565b9182526020818501810192908101908684111561521857600080fd5b6020860192505b838310156135c657823582526020928301929091019061521f565b801515811461454a57600080fd5b80356150fd8161523a565b60008060006060848603121561526857600080fd5b61527184615126565b925060208401356001600160401b0381111561528c57600080fd5b615298868287016151c2565b92505060408401356152a98161523a565b809150509250925092565b6001600160a01b0391909116815260200190565b6000602082840312156152da57600080fd5b5035919050565b600080604083850312156152f457600080fd5b82356152ff816150dd565b946020939093013593505050565b6000806040838503121561532057600080fd5b823561532b816150dd565b9150602083013561533b8161523a565b809150509250929050565b60008060006060848603121561535b57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561538457600080fd5b61131d82615126565b8060005b6004811015610bc8578151845260209384019390910190600101615391565b60808101611320828461538d565b600082601f8301126153cf57600080fd5b81356001600160401b038111156153e8576153e861517c565b6153fb601f8201601f1916602001615192565b81815284602083860101111561541057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561544057600080fd5b823561544b816150dd565b915060208301356001600160401b0381111561546657600080fd5b615472858286016153be565b9150509250929050565b60005b8381101561549757818101518382015260200161547f565b50506000910152565b600081518084526154b881602086016020860161547c565b601f01601f19169290920160200192915050565b60208152600061131d60208301846154a0565b634e487b7160e01b600052602160045260246000fd5b6005811061551357634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03861681526001600160a01b038516602082015260a0810161554360408301866154f5565b9215156060820152608001529392505050565b60008060006060848603121561556b57600080fd5b8335615576816150dd565b92506020840135915060408401356001600160401b0381111561559857600080fd5b6155a4868287016153be565b9150509250925092565b600080604083850312156155c157600080fd5b6152ff83615126565b6000806000606084860312156155df57600080fd5b83356155ea816150dd565b925060208401356001600160401b038116811461560657600080fd5b9150604084013560ff811681146152a957600080fd5b600082601f83011261562d57600080fd5b604051608081016001600160401b038111828210171561564f5761564f61517c565b60405280608084018581111561566457600080fd5b845b8181101561567e578035835260209283019201615666565b509195945050505050565b6000806000806000806000610140888a0312156156a557600080fd5b6156ae88615126565b965060208801356156be8161523a565b955060408801359450606088013593506080880135925060a088013591506156e98960c08a0161561c565b905092959891949750929550565b6000806040838503121561570a57600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b828110156157545781516001600160a01b031686526020958601959091019060010161572d565b5093949350505050565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c0820152600060c083015161016060e08401526157b8610180840182615719565b905060e08401516101008401526101008401516101208401526101208401516157ed6101408501826001600160a01b03169052565b506101408401516101608401528091505092915050565b60008060008060008060008060006101808a8c03121561582357600080fd5b61582c8a615126565b985060208a013561583c8161523a565b975060408a0135965060608a0135955060808a0135945060a08a013593506158678b60c08c0161561c565b92506101408a01356001600160401b0381111561588357600080fd5b61588f8c828d016153be565b9250506101608a01356001600160401b038111156158ac57600080fd5b6158b88c828d016151c2565b9150509295985092959850929598565b600080604083850312156158db57600080fd5b8235915060208301356001600160401b0381111561546657600080fd5b60008060006060848603121561590d57600080fd5b833592506020840135915060408401356001600160401b0381111561559857600080fd5b60008083601f84011261594357600080fd5b5081356001600160401b0381111561595a57600080fd5b60208301915083602082850101111561597257600080fd5b9250929050565b60008060006040848603121561598e57600080fd5b83356001600160401b038111156159a457600080fd5b6159b086828701615931565b90945092505060208401356152a9816150dd565b6000806000806000608086880312156159dc57600080fd5b8535945060208601356001600160401b038111156159f957600080fd5b615a0588828901615931565b9095509350506040860135615a19816150dd565b949793965091946060013592915050565b600060208284031215615a3c57600080fd5b81356001600160401b03811115615a5257600080fd5b613497848285016153be565b6000806000806000806000806000806000806102408d8f031215615a8157600080fd5b615a8a8d6150f2565b9b50615a9860208e016150f2565b9a50615aa660408e016150f2565b9950615ab460608e016150f2565b9850615ac260808e016150f2565b9750615ad060a08e01615248565b9650615adf8e60c08f0161561c565b9550615aef8e6101408f0161561c565b94506001600160401b036101c08e01351115615b0a57600080fd5b615b1b8e6101c08f01358f016153be565b9350615b2a6101e08e016150f2565b9250615b396102008e016150f2565b9150615b486102208e016150f2565b90509295989b509295989b509295989b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561132057611320615b70565b600060208284031215615bab57600080fd5b815161511f8161523a565b6020810161132082846154f5565b6001815b6001841115615bff57808504811115615be357615be3615b70565b6001841615615bf157908102905b60019390931c928002615bc8565b935093915050565b600082615c1657506001611320565b81615c2357506000611320565b8160018114615c395760028114615c4357615c5f565b6001915050611320565b60ff841115615c5457615c54615b70565b50506001821b611320565b5060208310610133831016604e8410600b8410161715615c82575081810a611320565b615c8f6000198484615bc4565b8060001904821115615ca357615ca3615b70565b029392505050565b600061131d60ff841683615c07565b808202811582820484141761132057611320615b70565b634e487b7160e01b600052601260045260246000fd5b600082615cf657615cf6615cd1565b500490565b600080600060608486031215615d1057600080fd5b83516020850151909350615d238161523a565b60408501519092506152a98161523a565b8082018082111561132057611320615b70565b600060208284031215615d5957600080fd5b5051919050565b60008251615d7281846020870161547c565b9190910192915050565b600061012082019050871515825286602083015285604083015284606083015283608083015261467260a083018461538d565b82815260406020820152600061349760408301846154a0565b600061014082018915158352886020840152876040840152866060840152856080840152615df960a084018661538d565b610140610120840152835190819052602084019061016084019060005b81811015615e34578351835260209384019390920191600101615e16565b50909b9a5050505050505050505050565b848152836020820152608060408201526000615e6460808301856154a0565b905082606083015295945050505050565b600060018201615e8757615e87615b70565b5060010190565b600060208284031215615ea057600080fd5b815161511f816150dd565b6001600160a01b03929092168252602082015260400190565b600080600060608486031215615ed957600080fd5b8351602085015160408601519194509250600a81106152a957600080fd5b60008060408385031215615f0a57600080fd5b505080516020909101519092909150565b6000600160ff1b8201615f3057615f30615b70565b5060000390565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091526001600160a01b0316604082015260600190565b600082615f8957615f89615cd1565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122004d0e8698d556c8622b85aecf09450b7bc71e8101fe95c2464a140be1c6fb1b364736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "AcceptedFeeToken(address,bool)": { - "details": "To be emitted when an ERC20 token is added or removed as a method to pay fees.", - "params": { - "_accepted": "Whether the token is accepted or not.", - "_token": "The ERC20 token." - } - }, - "DisputeCreation(uint256,address)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_arbitrable": "The contract which created the dispute.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "NewCurrencyRate(address,uint64,uint8)": { - "details": "To be emitted when the fee for a particular ERC20 token is updated.", - "params": { - "_feeToken": "The ERC20 token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrable": "The arbitrable receiving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "addNewDisputeKit(address)": { - "details": "Add a new supported dispute kit module to the court.", - "params": { - "_disputeKitAddress": "The address of the dispute kit contract." - } - }, - "appeal(uint256,uint256,bytes)": { - "details": "Appeals the ruling of a specified dispute. Note: Access restricted to the Dispute Kit for this `disputeID`.", - "params": { - "_disputeID": "The ID of the dispute.", - "_extraData": "Extradata for the dispute. Can be required during court jump.", - "_numberOfChoices": "Number of choices for the dispute. Can be required during court jump." - } - }, - "appealCost(uint256)": { - "details": "Gets the cost of appealing a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "cost": "The appeal cost." - } - }, - "appealPeriod(uint256)": { - "details": "Gets the start and the end of a specified dispute's current appeal period.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "end": "The end of the appeal period.", - "start": "The start of the appeal period." - } - }, - "arbitrationCost(bytes)": { - "details": "Compute the cost of arbitration denominated in ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes)." - }, - "returns": { - "cost": "The arbitration cost in ETH." - } - }, - "arbitrationCost(bytes,address)": { - "details": "Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeToken": "The ERC20 token used to pay fees." - }, - "returns": { - "cost": "The arbitration cost in `_feeToken`." - } - }, - "changeAcceptedFeeTokens(address,bool)": { - "details": "Changes the supported fee tokens.", - "params": { - "_accepted": "Whether the token is supported or not as a method of fee payment.", - "_feeToken": "The fee token." - } - }, - "changeArbitrableWhitelist(address,bool)": { - "details": "Adds or removes an arbitrable from whitelist.", - "params": { - "_allowed": "Whether add or remove permission.", - "_arbitrable": "Arbitrable address." - } - }, - "changeCurrencyRates(address,uint64,uint8)": { - "details": "Changes the currency rate of a fee token.", - "params": { - "_feeToken": "The fee token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "changeGuardian(address)": { - "details": "Changes the `guardian` storage variable.", - "params": { - "_guardian": "The new value for the `guardian` storage variable." - } - }, - "changeJurorNft(address)": { - "details": "Changes the `jurorNft` storage variable.", - "params": { - "_jurorNft": "The new value for the `jurorNft` storage variable." - } - }, - "changeJurorProsecutionModule(address)": { - "details": "Changes the `jurorProsecutionModule` storage variable.", - "params": { - "_jurorProsecutionModule": "The new value for the `jurorProsecutionModule` storage variable." - } - }, - "changePinakion(address)": { - "details": "Changes the `pinakion` storage variable.", - "params": { - "_pinakion": "The new value for the `pinakion` storage variable." - } - }, - "changeSortitionModule(address)": { - "details": "Changes the `_sortitionModule` storage variable. Note that the new module should be initialized for all courts.", - "params": { - "_sortitionModule": "The new value for the `sortitionModule` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createCourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],bytes,uint256[])": { - "details": "Creates a court under a specified parent court.", - "params": { - "_alpha": "The `alpha` property value of the court.", - "_feeForJuror": "The `feeForJuror` property value of the court.", - "_hiddenVotes": "The `hiddenVotes` property value of the court.", - "_jurorsForCourtJump": "The `jurorsForCourtJump` property value of the court.", - "_minStake": "The `minStake` property value of the court.", - "_parent": "The `parent` property value of the court.", - "_sortitionExtraData": "Extra data for sortition module.", - "_supportedDisputeKits": "Indexes of dispute kits that this court will support.", - "_timesPerPeriod": "The `timesPerPeriod` property value of the court." - } - }, - "createDispute(uint256,bytes)": { - "details": "Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "createDispute(uint256,bytes,address,uint256)": { - "details": "Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeAmount": "Amount of the ERC20 token used to pay fees.", - "_feeToken": "The ERC20 token used to pay fees.", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws jurors for the dispute. Can be called in parts.", - "params": { - "_disputeID": "The ID of the dispute.", - "_iterations": "The number of iterations to run." - }, - "returns": { - "nbDrawnJurors": "The total number of jurors drawn in the round." - } - }, - "enableDisputeKits(uint96,uint256[],bool)": { - "details": "Adds/removes court's support for specified dispute kits.", - "params": { - "_courtID": "The ID of the court.", - "_disputeKitIDs": "The IDs of dispute kits which support should be added/removed.", - "_enable": "Whether add or remove the dispute kits from the court." - } - }, - "execute(uint256,uint256,uint256)": { - "details": "Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts. Note: Reward distributions are forbidden during pause.", - "params": { - "_disputeID": "The ID of the dispute.", - "_iterations": "The number of iterations to run.", - "_round": "The appeal round." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "executeRuling(uint256)": { - "details": "Executes a specified dispute's ruling.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Gets the number of rounds for a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "_0": "The number of rounds." - } - }, - "getNumberOfVotes(uint256)": { - "details": "Gets the number of votes permitted for the specified dispute in the latest round.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "getPnkAtStakePerJuror(uint256,uint256)": { - "details": "Gets the PNK at stake per juror for a specified dispute and round.", - "params": { - "_disputeID": "The ID of the dispute.", - "_round": "The round to get the info for." - }, - "returns": { - "_0": "pnkAtStakePerJuror The PNK at stake per juror." - } - }, - "getRoundInfo(uint256,uint256)": { - "details": "Gets the round info for a specified dispute and round.This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.", - "params": { - "_disputeID": "The ID of the dispute.", - "_round": "The round to get the info for." - }, - "returns": { - "_0": "round The round info." - } - }, - "getTimesPerPeriod(uint96)": { - "details": "Gets the timesPerPeriod array for a given court.", - "params": { - "_courtID": "The ID of the court to get the times from." - }, - "returns": { - "timesPerPeriod": "The timesPerPeriod array for the given court." - } - }, - "initialize(address,address,address,address,address,bool,uint256[4],uint256[4],bytes,address,address,address)": { - "details": "Initializer (constructor equivalent for upgradable contracts).", - "params": { - "_courtParameters": "Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).", - "_disputeKit": "The address of the default dispute kit.", - "_governor": "The governor's address.", - "_guardian": "The guardian's address.", - "_hiddenVotes": "The `hiddenVotes` property value of the general court.", - "_jurorNft": "NFT contract to vet the jurors.", - "_jurorProsecutionModule": "The address of the juror prosecution module.", - "_pinakion": "The address of the token contract.", - "_sortitionExtraData": "The extra data for sortition module.", - "_sortitionModuleAddress": "The sortition module responsible for sortition of the jurors.", - "_timesPerPeriod": "The `timesPerPeriod` property value of the general court.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isDisputeKitJumping(uint256)": { - "details": "Returns true if the dispute kit will be switched to a parent DK.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "_0": "Whether DK will be switched or not." - } - }, - "isSupported(uint96,uint256)": { - "details": "Checks if a given dispute kit is supported by a given court.", - "params": { - "_courtID": "The ID of the court to check the support for.", - "_disputeKitID": "The ID of the dispute kit to check the support for." - }, - "returns": { - "_0": "Whether the dispute kit is supported or not." - } - }, - "passPeriod(uint256)": { - "details": "Passes the period of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "pause()": { - "details": "Pause staking and reward execution. Can only be done by guardian or governor." - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setStake(uint96,uint256)": { - "details": "Sets the caller's stake in a court. Note: Staking and unstaking is forbidden during pause.", - "params": { - "_courtID": "The ID of the court.", - "_newStake": "The new stake. Note that the existing delayed stake will be nullified as non-relevant." - } - }, - "setStakeBySortitionModule(address,uint96,uint256)": { - "details": "Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.", - "params": { - "_account": "The account whose stake is being set.", - "_courtID": "The ID of the court.", - "_newStake": "The new stake." - } - }, - "transferBySortitionModule(address,uint256)": { - "details": "Transfers PNK to the juror by SortitionModule.", - "params": { - "_account": "The account of the juror whose PNK to transfer.", - "_amount": "The amount to transfer." - } - }, - "unpause()": { - "details": "Unpause staking and reward execution. Can only be done by governor." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "KlerosCoreNeo Core arbitrator contract for Kleros v2. Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 11279, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 11281, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "guardian", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 11284, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "pinakion", - "offset": 0, - "slot": "2", - "type": "t_contract(IERC20)2923" - }, - { - "astId": 11286, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "jurorProsecutionModule", - "offset": 0, - "slot": "3", - "type": "t_address" - }, - { - "astId": 11289, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "sortitionModule", - "offset": 0, - "slot": "4", - "type": "t_contract(ISortitionModule)26449" - }, - { - "astId": 11293, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "courts", - "offset": 0, - "slot": "5", - "type": "t_array(t_struct(Court)11198_storage)dyn_storage" - }, - { - "astId": 11297, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "disputeKits", - "offset": 0, - "slot": "6", - "type": "t_array(t_contract(IDisputeKit)26259)dyn_storage" - }, - { - "astId": 11301, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "disputes", - "offset": 0, - "slot": "7", - "type": "t_array(t_struct(Dispute)11215_storage)dyn_storage" - }, - { - "astId": 11307, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "currencyRates", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_contract(IERC20)2923,t_struct(CurrencyRate)11264_storage)" - }, - { - "astId": 11309, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "paused", - "offset": 0, - "slot": "9", - "type": "t_bool" - }, - { - "astId": 11311, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "wNative", - "offset": 1, - "slot": "9", - "type": "t_address" - }, - { - "astId": 14870, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "arbitrableWhitelist", - "offset": 0, - "slot": "10", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 14873, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "jurorNft", - "offset": 0, - "slot": "11", - "type": "t_contract(IERC721)4069" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "base": "t_address", - "encoding": "dynamic_array", - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_contract(IDisputeKit)26259)dyn_storage": { - "base": "t_contract(IDisputeKit)26259", - "encoding": "dynamic_array", - "label": "contract IDisputeKit[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Court)11198_storage)dyn_storage": { - "base": "t_struct(Court)11198_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreBase.Court[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Dispute)11215_storage)dyn_storage": { - "base": "t_struct(Dispute)11215_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)11240_storage)dyn_storage": { - "base": "t_struct(Round)11240_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)4_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[4]", - "numberOfBytes": "128" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IArbitrableV2)26008": { - "encoding": "inplace", - "label": "contract IArbitrableV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeKit)26259": { - "encoding": "inplace", - "label": "contract IDisputeKit", - "numberOfBytes": "20" - }, - "t_contract(IERC20)2923": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_contract(IERC721)4069": { - "encoding": "inplace", - "label": "contract IERC721", - "numberOfBytes": "20" - }, - "t_contract(ISortitionModule)26449": { - "encoding": "inplace", - "label": "contract ISortitionModule", - "numberOfBytes": "20" - }, - "t_enum(Period)11172": { - "encoding": "inplace", - "label": "enum KlerosCoreBase.Period", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_contract(IERC20)2923,t_struct(CurrencyRate)11264_storage)": { - "encoding": "mapping", - "key": "t_contract(IERC20)2923", - "label": "mapping(contract IERC20 => struct KlerosCoreBase.CurrencyRate)", - "numberOfBytes": "32", - "value": "t_struct(CurrencyRate)11264_storage" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_struct(Court)11198_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreBase.Court", - "members": [ - { - "astId": 11174, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "parent", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 11176, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "hiddenVotes", - "offset": 12, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 11179, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "children", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 11181, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "minStake", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 11183, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "alpha", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 11185, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "feeForJuror", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 11187, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "jurorsForCourtJump", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 11191, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "timesPerPeriod", - "offset": 0, - "slot": "6", - "type": "t_array(t_uint256)4_storage" - }, - { - "astId": 11195, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "supportedDisputeKits", - "offset": 0, - "slot": "10", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 11197, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "disabled", - "offset": 0, - "slot": "11", - "type": "t_bool" - } - ], - "numberOfBytes": "384" - }, - "t_struct(CurrencyRate)11264_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreBase.CurrencyRate", - "members": [ - { - "astId": 11259, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "feePaymentAccepted", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 11261, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "rateInEth", - "offset": 1, - "slot": "0", - "type": "t_uint64" - }, - { - "astId": 11263, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "rateDecimals", - "offset": 9, - "slot": "0", - "type": "t_uint8" - } - ], - "numberOfBytes": "32" - }, - "t_struct(Dispute)11215_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreBase.Dispute", - "members": [ - { - "astId": 11200, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "courtID", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 11203, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "arbitrated", - "offset": 12, - "slot": "0", - "type": "t_contract(IArbitrableV2)26008" - }, - { - "astId": 11206, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "period", - "offset": 0, - "slot": "1", - "type": "t_enum(Period)11172" - }, - { - "astId": 11208, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "ruled", - "offset": 1, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 11210, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "lastPeriodChange", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 11214, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "rounds", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(Round)11240_storage)dyn_storage" - } - ], - "numberOfBytes": "128" - }, - "t_struct(Round)11240_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreBase.Round", - "members": [ - { - "astId": 11217, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "disputeKitID", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 11219, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "pnkAtStakePerJuror", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 11221, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "totalFeesForJurors", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 11223, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "nbVotes", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 11225, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "repartitions", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 11227, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "pnkPenalties", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 11230, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "drawnJurors", - "offset": 0, - "slot": "6", - "type": "t_array(t_address)dyn_storage" - }, - { - "astId": 11232, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "sumFeeRewardPaid", - "offset": 0, - "slot": "7", - "type": "t_uint256" - }, - { - "astId": 11234, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "sumPnkRewardPaid", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 11237, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "feeToken", - "offset": 0, - "slot": "9", - "type": "t_contract(IERC20)2923" - }, - { - "astId": 11239, - "contract": "src/arbitration/KlerosCoreNeo.sol:KlerosCoreNeo", - "label": "drawIterations", - "offset": 0, - "slot": "10", - "type": "t_uint256" - } - ], - "numberOfBytes": "352" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/arbitrum/KlerosCore_Proxy.json b/contracts/deployments/arbitrum/KlerosCore_Proxy.json deleted file mode 100644 index cd78726b2..000000000 --- a/contracts/deployments/arbitrum/KlerosCore_Proxy.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "address": "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xe0d0da9c80fafb30319b9c919ab8275b1da2ef99da6587539f66e37851e13dbf", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "transactionIndex": 2, - "gasUsed": "836960", - "logsBloom": "0x00000002000200000000000020000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000040000000000000000000000000000420000000000000010000800402000000000000008000000000000000000000000000000000800000000000080000000000080000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000200000000004000000000000000060000000001001000000800000000000000000000000000000000000000000000000", - "blockHash": "0xf23b464db7b5abe21dc62ed552eeede438bad3ac2d3294e5863198cead1cf247", - "transactionHash": "0xe0d0da9c80fafb30319b9c919ab8275b1da2ef99da6587539f66e37851e13dbf", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 272063254, - "transactionHash": "0xe0d0da9c80fafb30319b9c919ab8275b1da2ef99da6587539f66e37851e13dbf", - "address": "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "topics": [ - "0x44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb2", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x00000000000000000000000070b464be85a547144c72485eba2577e5d3a45421" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0xf23b464db7b5abe21dc62ed552eeede438bad3ac2d3294e5863198cead1cf247" - }, - { - "transactionIndex": 2, - "blockNumber": 272063254, - "transactionHash": "0xe0d0da9c80fafb30319b9c919ab8275b1da2ef99da6587539f66e37851e13dbf", - "address": "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "topics": [ - "0x3475f0ed7216dd7d453db663a1c3024e4f36cc925521d54edb9d13e022cbee3d", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 2, - "blockHash": "0xf23b464db7b5abe21dc62ed552eeede438bad3ac2d3294e5863198cead1cf247" - }, - { - "transactionIndex": 2, - "blockNumber": 272063254, - "transactionHash": "0xe0d0da9c80fafb30319b9c919ab8275b1da2ef99da6587539f66e37851e13dbf", - "address": "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "topics": [ - "0xb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc79", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001" - ], - "data": "0x", - "logIndex": 3, - "blockHash": "0xf23b464db7b5abe21dc62ed552eeede438bad3ac2d3294e5863198cead1cf247" - }, - { - "transactionIndex": 2, - "blockNumber": 272063254, - "transactionHash": "0xe0d0da9c80fafb30319b9c919ab8275b1da2ef99da6587539f66e37851e13dbf", - "address": "0x991d2df165670b9cac3B022f4B68D65b664222ea", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000002", - "logIndex": 4, - "blockHash": "0xf23b464db7b5abe21dc62ed552eeede438bad3ac2d3294e5863198cead1cf247" - } - ], - "blockNumber": 272063254, - "cumulativeGasUsed": "918567", - "status": 1, - "byzantium": true - }, - "args": [ - "0x17c39AB53A7072b167A74a85D47b30385c98ae89", - "0x2c053739000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000330bd769382cfc6d50175903434ccc8d206dcae5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b464be85a547144c72485eba2577e5d3a45421000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000022000000000000000000000000021a9402adb818744b296e1d1be58c804118dc03d000000000000000000000000fe34a72c55e512601e7d491a9c5b36373ce34d6300000000000000000000000000000000000000000000000000000000000000010500000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"KlerosCoreNeoProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206184205afef335e3929cbe6d07c51961f33c4cbe24e68a0b19e4f7ab6df6903064736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206184205afef335e3929cbe6d07c51961f33c4cbe24e68a0b19e4f7ab6df6903064736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/KlerosV2NeoEarlyUser.json b/contracts/deployments/arbitrum/KlerosV2NeoEarlyUser.json deleted file mode 100644 index 6557302a1..000000000 --- a/contracts/deployments/arbitrum/KlerosV2NeoEarlyUser.json +++ /dev/null @@ -1,723 +0,0 @@ -{ - "address": "0xfE34a72c55e512601E7d491A9c5b36373cE34d63", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "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": "newMinter", - "type": "address" - } - ], - "name": "EventMinterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldMinter", - "type": "address" - } - ], - "name": "EventMinterRemoved", - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "minter", - "type": "address" - } - ], - "name": "addMinter", - "outputs": [], - "stateMutability": "nonpayable", - "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": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "burnBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "cid", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getNumMinted", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "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": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "isOwnerOf", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "cid", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "cidArr", - "type": "uint256[]" - } - ], - "name": "mintBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "minters", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "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": [ - { - "internalType": "address", - "name": "minter", - "type": "address" - } - ], - "name": "removeMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "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": "string", - "name": "newName", - "type": "string" - } - ], - "name": "setName", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "newSymbol", - "type": "string" - } - ], - "name": "setSymbol", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "transferable", - "type": "bool" - } - ], - "name": "setTransferable", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "newURI", - "type": "string" - } - ], - "name": "setURI", - "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": "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": "transferable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ] -} diff --git a/contracts/deployments/arbitrum/PNK.json b/contracts/deployments/arbitrum/PNK.json deleted file mode 120000 index 3bc687fa7..000000000 --- a/contracts/deployments/arbitrum/PNK.json +++ /dev/null @@ -1 +0,0 @@ -Pinakion.json \ No newline at end of file diff --git a/contracts/deployments/arbitrum/PNKFaucet.json b/contracts/deployments/arbitrum/PNKFaucet.json deleted file mode 100644 index f880395bc..000000000 --- a/contracts/deployments/arbitrum/PNKFaucet.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "address": "0x0000000000000000000000000000000000000000", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "amount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "changeAmount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "request", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "withdrewAlready", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ] -} diff --git a/contracts/deployments/arbitrum/Pinakion.json b/contracts/deployments/arbitrum/Pinakion.json deleted file mode 100644 index 2fab003bd..000000000 --- a/contracts/deployments/arbitrum/Pinakion.json +++ /dev/null @@ -1,280 +0,0 @@ -{ - "address": "0x330bD769382cFc6d50175903434CCC8D206DCAE5", - "abi": [ - { - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "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": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ] -} diff --git a/contracts/deployments/arbitrum/PolicyRegistry.json b/contracts/deployments/arbitrum/PolicyRegistry.json deleted file mode 100644 index b0d9a0bb4..000000000 --- a/contracts/deployments/arbitrum/PolicyRegistry.json +++ /dev/null @@ -1,311 +0,0 @@ -{ - "address": "0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_courtName", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_policy", - "type": "string" - } - ], - "name": "PolicyUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "policies", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_courtName", - "type": "string" - }, - { - "internalType": "string", - "name": "_policy", - "type": "string" - } - ], - "name": "setPolicy", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x9673ba78958940e617dbf7e4c3fb79c23df574f7dac9979638387b38e9eb82ad", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c", - "transactionIndex": 2, - "gasUsed": "353404", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000088000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000008000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x813d680f913ac698f1004b8ecaef18f96f7f7962ac9103391c6ced97cf9039db", - "transactionHash": "0x9673ba78958940e617dbf7e4c3fb79c23df574f7dac9979638387b38e9eb82ad", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 272063037, - "transactionHash": "0x9673ba78958940e617dbf7e4c3fb79c23df574f7dac9979638387b38e9eb82ad", - "address": "0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x813d680f913ac698f1004b8ecaef18f96f7f7962ac9103391c6ced97cf9039db" - } - ], - "blockNumber": 272063037, - "cumulativeGasUsed": "448355", - "status": 1, - "byzantium": true - }, - "args": [ - "0x15E5964C7751dF8563eA4bC000301582C79BC454", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 2, - "solcInputHash": "3becf00d91b882372d51b0fc9f6a5781", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"PolicyRegistryProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x8edb830825d7fe8ef85d445b087fac3b41f626cd7d5b40ea583c3cba21528687\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0xc3e0b18f846a62cc6c274680fc10014d1267885f8eefc6767292d3e174a081c0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122043d3f208f41a2b0235b1f7fb49b19f47c8dc193649734f6affb15445be74913164736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122043d3f208f41a2b0235b1f7fb49b19f47c8dc193649734f6affb15445be74913164736f6c63430008180033", - "execute": { - "methodName": "initialize2", - "args": [] - }, - "implementation": "0xf7EE0Cd4E33C832DC05fB359896Add6E14E96C28", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/PolicyRegistry_Implementation.json b/contracts/deployments/arbitrum/PolicyRegistry_Implementation.json deleted file mode 100644 index c12e72de8..000000000 --- a/contracts/deployments/arbitrum/PolicyRegistry_Implementation.json +++ /dev/null @@ -1,422 +0,0 @@ -{ - "address": "0xf7EE0Cd4E33C832DC05fB359896Add6E14E96C28", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_courtName", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_policy", - "type": "string" - } - ], - "name": "PolicyUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "policies", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_courtName", - "type": "string" - }, - { - "internalType": "string", - "name": "_policy", - "type": "string" - } - ], - "name": "setPolicy", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x59d9270bdd89ba9e63e465d4479d348374be88171baa8ae8b36add3791280941", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xf7EE0Cd4E33C832DC05fB359896Add6E14E96C28", - "transactionIndex": 13, - "gasUsed": "1018766", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800010000000000000000000080000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000020000000000000000000000000000000000000000", - "blockHash": "0x894906b5785fe65b1f448a3ca394fdbd8b81d724e93ee27af6b342a17e91c43d", - "transactionHash": "0x59d9270bdd89ba9e63e465d4479d348374be88171baa8ae8b36add3791280941", - "logs": [ - { - "transactionIndex": 13, - "blockNumber": 337009849, - "transactionHash": "0x59d9270bdd89ba9e63e465d4479d348374be88171baa8ae8b36add3791280941", - "address": "0xf7EE0Cd4E33C832DC05fB359896Add6E14E96C28", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 20, - "blockHash": "0x894906b5785fe65b1f448a3ca394fdbd8b81d724e93ee27af6b342a17e91c43d" - } - ], - "blockNumber": 337009849, - "cumulativeGasUsed": "2994581", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "3becf00d91b882372d51b0fc9f6a5781", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_courtName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_policy\",\"type\":\"string\"}],\"name\":\"PolicyUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"policies\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_courtName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_policy\",\"type\":\"string\"}],\"name\":\"setPolicy\",\"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\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A contract to maintain a policy for each court.\",\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"PolicyUpdate(uint256,string,string)\":{\"details\":\"Emitted when a policy is updated.\",\"params\":{\"_courtID\":\"The ID of the policy's court.\",\"_courtName\":\"The name of the policy's court.\",\"_policy\":\"The URI of the policy JSON.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initialize(address)\":{\"details\":\"Constructs the `PolicyRegistry` contract.\",\"params\":{\"_governor\":\"The governor's address.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setPolicy(uint256,string,string)\":{\"details\":\"Sets the policy for the specified court.\",\"params\":{\"_courtID\":\"The ID of the specified court.\",\"_courtName\":\"The name of the specified court.\",\"_policy\":\"The URI of the policy JSON.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"PolicyRegistry\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/PolicyRegistry.sol\":\"PolicyRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/arbitration/PolicyRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport \\\"../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/// @title PolicyRegistry\\n/// @dev A contract to maintain a policy for each court.\\ncontract PolicyRegistry is UUPSProxiable, Initializable {\\n string public constant override version = \\\"0.8.0\\\";\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a policy is updated.\\n /// @param _courtID The ID of the policy's court.\\n /// @param _courtName The name of the policy's court.\\n /// @param _policy The URI of the policy JSON.\\n event PolicyUpdate(uint256 indexed _courtID, string _courtName, string _policy);\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor;\\n mapping(uint256 => string) public policies;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n /// @dev Requires that the sender is the governor.\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"No allowed: governor only\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Constructs the `PolicyRegistry` contract.\\n /// @param _governor The governor's address.\\n function initialize(address _governor) external reinitializer(1) {\\n governor = _governor;\\n }\\n\\n function initialize2() external reinitializer(2) {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the policy for the specified court.\\n /// @param _courtID The ID of the specified court.\\n /// @param _courtName The name of the specified court.\\n /// @param _policy The URI of the policy JSON.\\n function setPolicy(uint256 _courtID, string calldata _courtName, string calldata _policy) external onlyByGovernor {\\n policies[_courtID] = _policy;\\n emit PolicyUpdate(_courtID, _courtName, policies[_courtID]);\\n }\\n}\\n\",\"keccak256\":\"0x3616d00a695cf960373d73a56d727fba4988a6c67f4e9084d1aab18f6db72e73\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x560ea64115636ecd6b3596248817125551c038ce1648019fde3cbe02d9759a30\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa8bb02ed2b2fc165296226762299c2ee3328f2a0c6e90c6fe7029fa5b01d0b60\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610cb66100fc6000396000818161029e015281816102c701526104c40152610cb66000f3fe6080604052600436106100765760003560e01c80630c340a241461007b578063472abf68146100b85780634f1ef286146100cf57806352d1902d146100e257806354fd4d5014610105578063bdf7378014610143578063c4d66de814610163578063d3e8948314610183578063e4c0aaf4146101a3575b600080fd5b34801561008757600080fd5b5060005461009b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100c457600080fd5b506100cd6101c3565b005b6100cd6100dd3660046107db565b61028a565b3480156100ee57600080fd5b506100f76104b7565b6040519081526020016100af565b34801561011157600080fd5b50610136604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100af91906108c0565b34801561014f57600080fd5b506100cd61015e36600461093b565b610515565b34801561016f57600080fd5b506100cd61017e3660046109b4565b6105ae565b34801561018f57600080fd5b5061013661019e3660046109d6565b610696565b3480156101af57600080fd5b506100cd6101be3660046109b4565b610730565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff168061020c575080546001600160401b03808416911610155b156102295760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6102938261077c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061031157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610305600080516020610c618339815191525490565b6001600160a01b031614155b1561032f5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610389575060408051601f3d908101601f19168201909252610386918101906109ef565b60015b6103b657604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b600080516020610c6183398151915281146103e757604051632a87526960e21b8152600481018290526024016103ad565b600080516020610c618339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156104b2576000836001600160a01b03168360405161044e9190610a08565b600060405180830381855af49150503d8060008114610489576040519150601f19603f3d011682016040523d82523d6000602084013e61048e565b606091505b50509050806104b0576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105025760405163703e46dd60e11b815260040160405180910390fd5b50600080516020610c6183398151915290565b6000546001600160a01b0316331461053f5760405162461bcd60e51b81526004016103ad90610a24565b6000858152600160205260409020610558828483610ae1565b50847f61f7110245e82eddd3b134d1e1607420d4a4dcdab30f5abdbbc9c3485b5dd2a48585600160008a815260200190815260200160002060405161059f93929190610ba1565b60405180910390a25050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105f7575080546001600160401b03808416911610155b156106145760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600160205260009081526040902080546106af90610a57565b80601f01602080910402602001604051908101604052809291908181526020018280546106db90610a57565b80156107285780601f106106fd57610100808354040283529160200191610728565b820191906000526020600020905b81548152906001019060200180831161070b57829003601f168201915b505050505081565b6000546001600160a01b0316331461075a5760405162461bcd60e51b81526004016103ad90610a24565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146107a65760405162461bcd60e51b81526004016103ad90610a24565b50565b80356001600160a01b03811681146107c057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156107ee57600080fd5b6107f7836107a9565b915060208301356001600160401b038082111561081357600080fd5b818501915085601f83011261082757600080fd5b813581811115610839576108396107c5565b604051601f8201601f19908116603f01168101908382118183101715610861576108616107c5565b8160405282815288602084870101111561087a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156108b757818101518382015260200161089f565b50506000910152565b60208152600082518060208401526108df81604085016020870161089c565b601f01601f19169190910160400192915050565b60008083601f84011261090557600080fd5b5081356001600160401b0381111561091c57600080fd5b60208301915083602082850101111561093457600080fd5b9250929050565b60008060008060006060868803121561095357600080fd5b8535945060208601356001600160401b038082111561097157600080fd5b61097d89838a016108f3565b9096509450604088013591508082111561099657600080fd5b506109a3888289016108f3565b969995985093965092949392505050565b6000602082840312156109c657600080fd5b6109cf826107a9565b9392505050565b6000602082840312156109e857600080fd5b5035919050565b600060208284031215610a0157600080fd5b5051919050565b60008251610a1a81846020870161089c565b9190910192915050565b6020808252601990820152784e6f20616c6c6f7765643a20676f7665726e6f72206f6e6c7960381b604082015260600190565b600181811c90821680610a6b57607f821691505b602082108103610a8b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156104b2576000816000526020600020601f850160051c81016020861015610aba5750805b601f850160051c820191505b81811015610ad957828155600101610ac6565b505050505050565b6001600160401b03831115610af857610af86107c5565b610b0c83610b068354610a57565b83610a91565b6000601f841160018114610b405760008515610b285750838201355b600019600387901b1c1916600186901b178355610b9a565b600083815260209020601f19861690835b82811015610b715786850135825560209485019460019092019101610b51565b5086821015610b8e5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60408152826040820152828460608301376000606084830101526000601f19601f85011682016020606084830301602085015260008554610be181610a57565b8060608601526080600180841660008114610c035760018114610c1f57610c4f565b60ff1985166080890152608084151560051b8901019550610c4f565b8a600052602060002060005b85811015610c465781548a8201860152908301908801610c2b565b89016080019650505b50939b9a505050505050505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220daf17c4b96da6ae73cf27c808d549557e5bcc5ff14feeae77520de70bd7269c864736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100765760003560e01c80630c340a241461007b578063472abf68146100b85780634f1ef286146100cf57806352d1902d146100e257806354fd4d5014610105578063bdf7378014610143578063c4d66de814610163578063d3e8948314610183578063e4c0aaf4146101a3575b600080fd5b34801561008757600080fd5b5060005461009b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100c457600080fd5b506100cd6101c3565b005b6100cd6100dd3660046107db565b61028a565b3480156100ee57600080fd5b506100f76104b7565b6040519081526020016100af565b34801561011157600080fd5b50610136604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100af91906108c0565b34801561014f57600080fd5b506100cd61015e36600461093b565b610515565b34801561016f57600080fd5b506100cd61017e3660046109b4565b6105ae565b34801561018f57600080fd5b5061013661019e3660046109d6565b610696565b3480156101af57600080fd5b506100cd6101be3660046109b4565b610730565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff168061020c575080546001600160401b03808416911610155b156102295760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6102938261077c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061031157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610305600080516020610c618339815191525490565b6001600160a01b031614155b1561032f5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610389575060408051601f3d908101601f19168201909252610386918101906109ef565b60015b6103b657604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b600080516020610c6183398151915281146103e757604051632a87526960e21b8152600481018290526024016103ad565b600080516020610c618339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156104b2576000836001600160a01b03168360405161044e9190610a08565b600060405180830381855af49150503d8060008114610489576040519150601f19603f3d011682016040523d82523d6000602084013e61048e565b606091505b50509050806104b0576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105025760405163703e46dd60e11b815260040160405180910390fd5b50600080516020610c6183398151915290565b6000546001600160a01b0316331461053f5760405162461bcd60e51b81526004016103ad90610a24565b6000858152600160205260409020610558828483610ae1565b50847f61f7110245e82eddd3b134d1e1607420d4a4dcdab30f5abdbbc9c3485b5dd2a48585600160008a815260200190815260200160002060405161059f93929190610ba1565b60405180910390a25050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105f7575080546001600160401b03808416911610155b156106145760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600160205260009081526040902080546106af90610a57565b80601f01602080910402602001604051908101604052809291908181526020018280546106db90610a57565b80156107285780601f106106fd57610100808354040283529160200191610728565b820191906000526020600020905b81548152906001019060200180831161070b57829003601f168201915b505050505081565b6000546001600160a01b0316331461075a5760405162461bcd60e51b81526004016103ad90610a24565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146107a65760405162461bcd60e51b81526004016103ad90610a24565b50565b80356001600160a01b03811681146107c057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156107ee57600080fd5b6107f7836107a9565b915060208301356001600160401b038082111561081357600080fd5b818501915085601f83011261082757600080fd5b813581811115610839576108396107c5565b604051601f8201601f19908116603f01168101908382118183101715610861576108616107c5565b8160405282815288602084870101111561087a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156108b757818101518382015260200161089f565b50506000910152565b60208152600082518060208401526108df81604085016020870161089c565b601f01601f19169190910160400192915050565b60008083601f84011261090557600080fd5b5081356001600160401b0381111561091c57600080fd5b60208301915083602082850101111561093457600080fd5b9250929050565b60008060008060006060868803121561095357600080fd5b8535945060208601356001600160401b038082111561097157600080fd5b61097d89838a016108f3565b9096509450604088013591508082111561099657600080fd5b506109a3888289016108f3565b969995985093965092949392505050565b6000602082840312156109c657600080fd5b6109cf826107a9565b9392505050565b6000602082840312156109e857600080fd5b5035919050565b600060208284031215610a0157600080fd5b5051919050565b60008251610a1a81846020870161089c565b9190910192915050565b6020808252601990820152784e6f20616c6c6f7765643a20676f7665726e6f72206f6e6c7960381b604082015260600190565b600181811c90821680610a6b57607f821691505b602082108103610a8b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156104b2576000816000526020600020601f850160051c81016020861015610aba5750805b601f850160051c820191505b81811015610ad957828155600101610ac6565b505050505050565b6001600160401b03831115610af857610af86107c5565b610b0c83610b068354610a57565b83610a91565b6000601f841160018114610b405760008515610b285750838201355b600019600387901b1c1916600186901b178355610b9a565b600083815260209020601f19861690835b82811015610b715786850135825560209485019460019092019101610b51565b5086821015610b8e5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60408152826040820152828460608301376000606084830101526000601f19601f85011682016020606084830301602085015260008554610be181610a57565b8060608601526080600180841660008114610c035760018114610c1f57610c4f565b60ff1985166080890152608084151560051b8901019550610c4f565b8a600052602060002060005b85811015610c465781548a8201860152908301908801610c2b565b89016080019650505b50939b9a505050505050505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220daf17c4b96da6ae73cf27c808d549557e5bcc5ff14feeae77520de70bd7269c864736f6c63430008180033", - "devdoc": { - "details": "A contract to maintain a policy for each court.", - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "PolicyUpdate(uint256,string,string)": { - "details": "Emitted when a policy is updated.", - "params": { - "_courtID": "The ID of the policy's court.", - "_courtName": "The name of the policy's court.", - "_policy": "The URI of the policy JSON." - } - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "initialize(address)": { - "details": "Constructs the `PolicyRegistry` contract.", - "params": { - "_governor": "The governor's address." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setPolicy(uint256,string,string)": { - "details": "Sets the policy for the specified court.", - "params": { - "_courtID": "The ID of the specified court.", - "_courtName": "The name of the specified court.", - "_policy": "The URI of the policy JSON." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "PolicyRegistry", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 13698, - "contract": "src/arbitration/PolicyRegistry.sol:PolicyRegistry", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 13702, - "contract": "src/arbitration/PolicyRegistry.sol:PolicyRegistry", - "label": "policies", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_string_storage)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_string_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => string)", - "numberOfBytes": "32", - "value": "t_string_storage" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrum/PolicyRegistry_Proxy.json b/contracts/deployments/arbitrum/PolicyRegistry_Proxy.json deleted file mode 100644 index 933403b17..000000000 --- a/contracts/deployments/arbitrum/PolicyRegistry_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x9673ba78958940e617dbf7e4c3fb79c23df574f7dac9979638387b38e9eb82ad", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c", - "transactionIndex": 2, - "gasUsed": "353404", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000088000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000008000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x813d680f913ac698f1004b8ecaef18f96f7f7962ac9103391c6ced97cf9039db", - "transactionHash": "0x9673ba78958940e617dbf7e4c3fb79c23df574f7dac9979638387b38e9eb82ad", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 272063037, - "transactionHash": "0x9673ba78958940e617dbf7e4c3fb79c23df574f7dac9979638387b38e9eb82ad", - "address": "0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x813d680f913ac698f1004b8ecaef18f96f7f7962ac9103391c6ced97cf9039db" - } - ], - "blockNumber": 272063037, - "cumulativeGasUsed": "448355", - "status": 1, - "byzantium": true - }, - "args": [ - "0x15E5964C7751dF8563eA4bC000301582C79BC454", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"PolicyRegistryProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212203b3fd7b58d814daf56e8a98b5f03d35c3e25bc365afd21a0aa80ee883c5d3f1264736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212203b3fd7b58d814daf56e8a98b5f03d35c3e25bc365afd21a0aa80ee883c5d3f1264736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/RandomizerOracle.json b/contracts/deployments/arbitrum/RandomizerOracle.json deleted file mode 100644 index b345d104e..000000000 --- a/contracts/deployments/arbitrum/RandomizerOracle.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "address": "0x5b8bB80f2d72D0C85caB8fB169e8170A05C94bAF", - "abi": [] -} diff --git a/contracts/deployments/arbitrum/RandomizerRNG.json b/contracts/deployments/arbitrum/RandomizerRNG.json deleted file mode 100644 index 96fbbb05c..000000000 --- a/contracts/deployments/arbitrum/RandomizerRNG.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "address": "0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "callbackGasLimit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IRandomizer", - "name": "_randomizer", - "type": "address" - }, - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "name": "randomNumbers", - "outputs": [ - { - "internalType": "uint256", - "name": "number", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomizer", - "outputs": [ - { - "internalType": "contract IRandomizer", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_value", - "type": "bytes32" - } - ], - "name": "randomizerCallback", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "randomizerWithdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "receiveRandomness", - "outputs": [ - { - "internalType": "uint256", - "name": "randomNumber", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "requestRandomness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - } - ], - "name": "requesterToID", - "outputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_callbackGasLimit", - "type": "uint256" - } - ], - "name": "setCallbackGasLimit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_randomizer", - "type": "address" - } - ], - "name": "setRandomizer", - "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": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x2aa9e7ceedeff87f9029f63cdd19f7faa5b9e1dbddbb43d54ec0178cfa0ecf47", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3", - "transactionIndex": 11, - "gasUsed": "420417", - "logsBloom": "0x00000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000200000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xddff904a7835f247225000014a5301fa9462a1fd8f68da0f0dcdc3a9c70d34c8", - "transactionHash": "0x2aa9e7ceedeff87f9029f63cdd19f7faa5b9e1dbddbb43d54ec0178cfa0ecf47", - "logs": [ - { - "transactionIndex": 11, - "blockNumber": 272063118, - "transactionHash": "0x2aa9e7ceedeff87f9029f63cdd19f7faa5b9e1dbddbb43d54ec0178cfa0ecf47", - "address": "0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 37, - "blockHash": "0xddff904a7835f247225000014a5301fa9462a1fd8f68da0f0dcdc3a9c70d34c8" - } - ], - "blockNumber": 272063118, - "cumulativeGasUsed": "3366631", - "status": 1, - "byzantium": true - }, - "args": [ - "0xF1a7Cd3115F5852966430f8E3877D2221F074A2e", - "0x485cc9550000000000000000000000005b8bb80f2d72d0c85cab8fb169e8170a05c94baf000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"RandomizerRNGProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206e4bfb3b93f88c05da2e7790f3420dc92a7e92440e2c63e66223920b337be18264736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206e4bfb3b93f88c05da2e7790f3420dc92a7e92440e2c63e66223920b337be18264736f6c63430008180033", - "execute": { - "methodName": "initialize", - "args": [ - "0x5b8bB80f2d72D0C85caB8fB169e8170A05C94bAF", - "0xf1C7c037891525E360C59f708739Ac09A7670c59" - ] - }, - "implementation": "0xF1a7Cd3115F5852966430f8E3877D2221F074A2e", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/RandomizerRNG_Implementation.json b/contracts/deployments/arbitrum/RandomizerRNG_Implementation.json deleted file mode 100644 index 18fbcd074..000000000 --- a/contracts/deployments/arbitrum/RandomizerRNG_Implementation.json +++ /dev/null @@ -1,533 +0,0 @@ -{ - "address": "0xF1a7Cd3115F5852966430f8E3877D2221F074A2e", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "callbackGasLimit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IRandomizer", - "name": "_randomizer", - "type": "address" - }, - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "name": "randomNumbers", - "outputs": [ - { - "internalType": "uint256", - "name": "number", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomizer", - "outputs": [ - { - "internalType": "contract IRandomizer", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_value", - "type": "bytes32" - } - ], - "name": "randomizerCallback", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "randomizerWithdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "receiveRandomness", - "outputs": [ - { - "internalType": "uint256", - "name": "randomNumber", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "requestRandomness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - } - ], - "name": "requesterToID", - "outputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_callbackGasLimit", - "type": "uint256" - } - ], - "name": "setCallbackGasLimit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_randomizer", - "type": "address" - } - ], - "name": "setRandomizer", - "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" - } - ], - "transactionHash": "0xa3e2215009913f71ca45453989465da40afe272f20c76b3f960fa0ac8315df16", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xF1a7Cd3115F5852966430f8E3877D2221F074A2e", - "transactionIndex": 1, - "gasUsed": "1153296", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004100000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xba092d35a051cde13ed281dd7d2491a5312ae73995780f9c5440e6c4c64d5d79", - "transactionHash": "0xa3e2215009913f71ca45453989465da40afe272f20c76b3f960fa0ac8315df16", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 272063103, - "transactionHash": "0xa3e2215009913f71ca45453989465da40afe272f20c76b3f960fa0ac8315df16", - "address": "0xF1a7Cd3115F5852966430f8E3877D2221F074A2e", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 0, - "blockHash": "0xba092d35a051cde13ed281dd7d2491a5312ae73995780f9c5440e6c4c64d5d79" - } - ], - "blockNumber": 272063103, - "cumulativeGasUsed": "1153296", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"callbackGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRandomizer\",\"name\":\"_randomizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"randomNumbers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomizer\",\"outputs\":[{\"internalType\":\"contract IRandomizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_value\",\"type\":\"bytes32\"}],\"name\":\"randomizerCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"randomizerWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"receiveRandomness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"requestRandomness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"}],\"name\":\"requesterToID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_callbackGasLimit\",\"type\":\"uint256\"}],\"name\":\"setCallbackGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_randomizer\",\"type\":\"address\"}],\"name\":\"setRandomizer\",\"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\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor of the contract.\",\"params\":{\"_governor\":\"The new governor.\"}},\"constructor\":{\"details\":\"Constructor, initializing the implementation to reduce attack surface.\"},\"initialize(address,address)\":{\"details\":\"Initializer\",\"params\":{\"_governor\":\"Governor of the contract.\",\"_randomizer\":\"Randomizer contract.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"randomizerCallback(uint256,bytes32)\":{\"details\":\"Callback function called by the randomizer contract when the random value is generated.\"},\"randomizerWithdraw(uint256)\":{\"details\":\"Allows the governor to withdraw randomizer funds.\",\"params\":{\"_amount\":\"Amount to withdraw in wei.\"}},\"receiveRandomness(uint256)\":{\"details\":\"Return the random number.\",\"returns\":{\"randomNumber\":\"The random number or 0 if it is not ready or has not been requested.\"}},\"requestRandomness(uint256)\":{\"details\":\"Request a random number. The id of the request is tied to the sender.\"},\"setCallbackGasLimit(uint256)\":{\"details\":\"Change the Randomizer callback gas limit.\",\"params\":{\"_callbackGasLimit\":\"the new limit.\"}},\"setRandomizer(address)\":{\"details\":\"Change the Randomizer address.\",\"params\":{\"_randomizer\":\"the new Randomizer address.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"title\":\"Random Number Generator that uses Randomizer.ai https://randomizer.ai/\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}],\"InvalidImplementation(address)\":[{\"notice\":\"The `implementation` is not UUPS-compliant\"}]},\"events\":{\"Upgraded(address)\":{\"notice\":\"Emitted when the `implementation` has been successfully upgraded.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rng/RandomizerRNG.sol\":\"RandomizerRNG\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x560ea64115636ecd6b3596248817125551c038ce1648019fde3cbe02d9759a30\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxiable\\n * @author Simon Malatrait \\n * @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n * The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n *\\n * IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n * This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSProxiable` with a custom implementation of upgrades.\\n *\\n * The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\n */\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /**\\n * Emitted when the `implementation` has been successfully upgraded.\\n * @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n */\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /**\\n * @dev The call is from an unauthorized context.\\n */\\n error UUPSUnauthorizedCallContext();\\n\\n /**\\n * @dev The storage `slot` is unsupported as a UUID.\\n */\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Storage variable of the proxiable contract address.\\n * It is used to check whether or not the current call is from the proxy.\\n */\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n * @dev Called by {upgradeToAndCall}.\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Upgrade mechanism including access control and UUPS-compliance.\\n * @param newImplementation Address of the new implementation contract.\\n * @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n *\\n * @dev Reverts if the execution is not performed via delegatecall or the execution\\n * context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n /* Check that the execution is being performed through a delegatecall call and that the execution context is\\n a proxy contract with an implementation (as defined in ERC1967) pointing to self. */\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the if statement.\\n */\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5956855046cdda7aa45f44e379ef45323af7266c44c817d1266d8b32d52b0e22\",\"license\":\"MIT\"},\"src/rng/IRandomizer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n// Randomizer protocol interface\\ninterface IRandomizer {\\n function request(uint256 callbackGasLimit) external returns (uint256);\\n\\n function clientWithdrawTo(address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xc2f92fb0decde8e9c09b1617ff58fae69b052ad1e8aa4a4fed25867b6bb329c1\",\"license\":\"MIT\"},\"src/rng/RNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\ninterface RNG {\\n /// @dev Request a random number.\\n /// @param _block Block linked to the request.\\n function requestRandomness(uint256 _block) external;\\n\\n /// @dev Receive the random number.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber Random Number. If the number is not ready or has not been required 0 instead.\\n function receiveRandomness(uint256 _block) external returns (uint256 randomNumber);\\n}\\n\",\"keccak256\":\"0xf92e0cf768afefc5cc6ef786c263b67dd00c021aa5753213dbbc33014adb68c5\",\"license\":\"MIT\"},\"src/rng/RandomizerRNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./RNG.sol\\\";\\nimport \\\"./IRandomizer.sol\\\";\\nimport \\\"../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/// @title Random Number Generator that uses Randomizer.ai\\n/// https://randomizer.ai/\\ncontract RandomizerRNG is RNG, UUPSProxiable, Initializable {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The address that can withdraw funds.\\n uint256 public callbackGasLimit; // Gas limit for the randomizer callback\\n IRandomizer public randomizer; // Randomizer address.\\n mapping(uint256 requestId => uint256 number) public randomNumbers; // randomNumbers[requestID] is the random number for this request id, 0 otherwise.\\n mapping(address requester => uint256 requestId) public requesterToID; // Maps the requester to his latest request ID.\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Governor only\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer\\n /// @param _randomizer Randomizer contract.\\n /// @param _governor Governor of the contract.\\n function initialize(IRandomizer _randomizer, address _governor) external reinitializer(1) {\\n randomizer = _randomizer;\\n governor = _governor;\\n callbackGasLimit = 50000;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /**\\n * @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Changes the governor of the contract.\\n /// @param _governor The new governor.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Change the Randomizer callback gas limit.\\n /// @param _callbackGasLimit the new limit.\\n function setCallbackGasLimit(uint256 _callbackGasLimit) external onlyByGovernor {\\n callbackGasLimit = _callbackGasLimit;\\n }\\n\\n /// @dev Change the Randomizer address.\\n /// @param _randomizer the new Randomizer address.\\n function setRandomizer(address _randomizer) external onlyByGovernor {\\n randomizer = IRandomizer(_randomizer);\\n }\\n\\n /// @dev Allows the governor to withdraw randomizer funds.\\n /// @param _amount Amount to withdraw in wei.\\n function randomizerWithdraw(uint256 _amount) external onlyByGovernor {\\n randomizer.clientWithdrawTo(msg.sender, _amount);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Request a random number. The id of the request is tied to the sender.\\n function requestRandomness(uint256 /*_block*/) external override {\\n uint256 id = randomizer.request(callbackGasLimit);\\n requesterToID[msg.sender] = id;\\n }\\n\\n /// @dev Callback function called by the randomizer contract when the random value is generated.\\n function randomizerCallback(uint256 _id, bytes32 _value) external {\\n require(msg.sender == address(randomizer), \\\"Randomizer only\\\");\\n randomNumbers[_id] = uint256(_value);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Return the random number.\\n /// @return randomNumber The random number or 0 if it is not ready or has not been requested.\\n function receiveRandomness(uint256 /*_block*/) external view override returns (uint256 randomNumber) {\\n // Get the latest request ID for this requester.\\n uint256 id = requesterToID[msg.sender];\\n randomNumber = randomNumbers[id];\\n }\\n}\\n\",\"keccak256\":\"0x84d5dc50531aac4976948b2898b44630febefd95b54fdeee026190ba675a57dc\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610b396100fc600039600081816104a1015281816104ca01526106c20152610b396000f3fe6080604052600436106100c85760003560e01c806352d1902d1161007a57806352d1902d146101ec57806371d4b00b146102015780637363ae1f1461022e578063767bcab51461024e5780638a54942f1461026e578063e4c0aaf41461028e578063ebe93caf146102ae578063f10fb584146102ce57600080fd5b80630c340a24146100cd57806313cf90541461010a57806324f7469714610154578063485cc9551461016a5780634e07c9391461018c5780634f1ef286146101ac5780635257cd90146101bf575b600080fd5b3480156100d957600080fd5b506000546100ed906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561011657600080fd5b506101466101253660046108ed565b50336000908152600460209081526040808320548352600390915290205490565b604051908152602001610101565b34801561016057600080fd5b5061014660015481565b34801561017657600080fd5b5061018a61018536600461091b565b6102ee565b005b34801561019857600080fd5b5061018a6101a73660046108ed565b6103f3565b61018a6101ba36600461096a565b61048d565b3480156101cb57600080fd5b506101466101da3660046108ed565b60036020526000908152604090205481565b3480156101f857600080fd5b506101466106b5565b34801561020d57600080fd5b5061014661021c366004610a2e565b60046020526000908152604090205481565b34801561023a57600080fd5b5061018a6102493660046108ed565b610713565b34801561025a57600080fd5b5061018a610269366004610a2e565b61079b565b34801561027a57600080fd5b5061018a6102893660046108ed565b6107e7565b34801561029a57600080fd5b5061018a6102a9366004610a2e565b610816565b3480156102ba57600080fd5b5061018a6102c9366004610a52565b610862565b3480156102da57600080fd5b506002546100ed906001600160a01b031681565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806103385750805467ffffffffffffffff808416911610155b156103555760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff8316908117600160401b178255600280546001600160a01b038781166001600160a01b031992831617909255600080549287169290911691909117905561c350600155815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6000546001600160a01b031633146104265760405162461bcd60e51b815260040161041d90610a74565b60405180910390fd5b600254604051632465f8f560e01b8152336004820152602481018390526001600160a01b0390911690632465f8f590604401600060405180830381600087803b15801561047257600080fd5b505af1158015610486573d6000803e3d6000fd5b5050505050565b610496826108c0565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061051457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610508600080516020610ae48339815191525490565b6001600160a01b031614155b156105325760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561058c575060408051601f3d908101601f1916820190925261058991810190610a9b565b60015b6105b457604051630c76093760e01b81526001600160a01b038316600482015260240161041d565b600080516020610ae483398151915281146105e557604051632a87526960e21b81526004810182905260240161041d565b600080516020610ae48339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156106b0576000836001600160a01b03168360405161064c9190610ab4565b600060405180830381855af49150503d8060008114610687576040519150601f19603f3d011682016040523d82523d6000602084013e61068c565b606091505b50509050806106ae576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107005760405163703e46dd60e11b815260040160405180910390fd5b50600080516020610ae483398151915290565b60025460015460405163d845a4b360e01b815260048101919091526000916001600160a01b03169063d845a4b3906024016020604051808303816000875af1158015610763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107879190610a9b565b336000908152600460205260409020555050565b6000546001600160a01b031633146107c55760405162461bcd60e51b815260040161041d90610a74565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108115760405162461bcd60e51b815260040161041d90610a74565b600155565b6000546001600160a01b031633146108405760405162461bcd60e51b815260040161041d90610a74565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146108ae5760405162461bcd60e51b815260206004820152600f60248201526e52616e646f6d697a6572206f6e6c7960881b604482015260640161041d565b60009182526003602052604090912055565b6000546001600160a01b031633146108ea5760405162461bcd60e51b815260040161041d90610a74565b50565b6000602082840312156108ff57600080fd5b5035919050565b6001600160a01b03811681146108ea57600080fd5b6000806040838503121561092e57600080fd5b823561093981610906565b9150602083013561094981610906565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561097d57600080fd5b823561098881610906565b9150602083013567ffffffffffffffff808211156109a557600080fd5b818501915085601f8301126109b957600080fd5b8135818111156109cb576109cb610954565b604051601f8201601f19908116603f011681019083821181831017156109f3576109f3610954565b81604052828152886020848701011115610a0c57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208284031215610a4057600080fd5b8135610a4b81610906565b9392505050565b60008060408385031215610a6557600080fd5b50508035926020909101359150565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b600060208284031215610aad57600080fd5b5051919050565b6000825160005b81811015610ad55760208186018101518583015201610abb565b50600092019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220721afbaa690caa7b92bcb9018e5c4d2ecece02ca01c80c470d74bec052f7ae9264736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100c85760003560e01c806352d1902d1161007a57806352d1902d146101ec57806371d4b00b146102015780637363ae1f1461022e578063767bcab51461024e5780638a54942f1461026e578063e4c0aaf41461028e578063ebe93caf146102ae578063f10fb584146102ce57600080fd5b80630c340a24146100cd57806313cf90541461010a57806324f7469714610154578063485cc9551461016a5780634e07c9391461018c5780634f1ef286146101ac5780635257cd90146101bf575b600080fd5b3480156100d957600080fd5b506000546100ed906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561011657600080fd5b506101466101253660046108ed565b50336000908152600460209081526040808320548352600390915290205490565b604051908152602001610101565b34801561016057600080fd5b5061014660015481565b34801561017657600080fd5b5061018a61018536600461091b565b6102ee565b005b34801561019857600080fd5b5061018a6101a73660046108ed565b6103f3565b61018a6101ba36600461096a565b61048d565b3480156101cb57600080fd5b506101466101da3660046108ed565b60036020526000908152604090205481565b3480156101f857600080fd5b506101466106b5565b34801561020d57600080fd5b5061014661021c366004610a2e565b60046020526000908152604090205481565b34801561023a57600080fd5b5061018a6102493660046108ed565b610713565b34801561025a57600080fd5b5061018a610269366004610a2e565b61079b565b34801561027a57600080fd5b5061018a6102893660046108ed565b6107e7565b34801561029a57600080fd5b5061018a6102a9366004610a2e565b610816565b3480156102ba57600080fd5b5061018a6102c9366004610a52565b610862565b3480156102da57600080fd5b506002546100ed906001600160a01b031681565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806103385750805467ffffffffffffffff808416911610155b156103555760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff8316908117600160401b178255600280546001600160a01b038781166001600160a01b031992831617909255600080549287169290911691909117905561c350600155815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6000546001600160a01b031633146104265760405162461bcd60e51b815260040161041d90610a74565b60405180910390fd5b600254604051632465f8f560e01b8152336004820152602481018390526001600160a01b0390911690632465f8f590604401600060405180830381600087803b15801561047257600080fd5b505af1158015610486573d6000803e3d6000fd5b5050505050565b610496826108c0565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061051457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610508600080516020610ae48339815191525490565b6001600160a01b031614155b156105325760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561058c575060408051601f3d908101601f1916820190925261058991810190610a9b565b60015b6105b457604051630c76093760e01b81526001600160a01b038316600482015260240161041d565b600080516020610ae483398151915281146105e557604051632a87526960e21b81526004810182905260240161041d565b600080516020610ae48339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156106b0576000836001600160a01b03168360405161064c9190610ab4565b600060405180830381855af49150503d8060008114610687576040519150601f19603f3d011682016040523d82523d6000602084013e61068c565b606091505b50509050806106ae576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107005760405163703e46dd60e11b815260040160405180910390fd5b50600080516020610ae483398151915290565b60025460015460405163d845a4b360e01b815260048101919091526000916001600160a01b03169063d845a4b3906024016020604051808303816000875af1158015610763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107879190610a9b565b336000908152600460205260409020555050565b6000546001600160a01b031633146107c55760405162461bcd60e51b815260040161041d90610a74565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108115760405162461bcd60e51b815260040161041d90610a74565b600155565b6000546001600160a01b031633146108405760405162461bcd60e51b815260040161041d90610a74565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146108ae5760405162461bcd60e51b815260206004820152600f60248201526e52616e646f6d697a6572206f6e6c7960881b604482015260640161041d565b60009182526003602052604090912055565b6000546001600160a01b031633146108ea5760405162461bcd60e51b815260040161041d90610a74565b50565b6000602082840312156108ff57600080fd5b5035919050565b6001600160a01b03811681146108ea57600080fd5b6000806040838503121561092e57600080fd5b823561093981610906565b9150602083013561094981610906565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561097d57600080fd5b823561098881610906565b9150602083013567ffffffffffffffff808211156109a557600080fd5b818501915085601f8301126109b957600080fd5b8135818111156109cb576109cb610954565b604051601f8201601f19908116603f011681019083821181831017156109f3576109f3610954565b81604052828152886020848701011115610a0c57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208284031215610a4057600080fd5b8135610a4b81610906565b9392505050565b60008060408385031215610a6557600080fd5b50508035926020909101359150565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b600060208284031215610aad57600080fd5b5051919050565b6000825160005b81811015610ad55760208186018101518583015201610abb565b50600092019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220721afbaa690caa7b92bcb9018e5c4d2ecece02ca01c80c470d74bec052f7ae9264736f6c63430008180033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor of the contract.", - "params": { - "_governor": "The new governor." - } - }, - "constructor": { - "details": "Constructor, initializing the implementation to reduce attack surface." - }, - "initialize(address,address)": { - "details": "Initializer", - "params": { - "_governor": "Governor of the contract.", - "_randomizer": "Randomizer contract." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "randomizerCallback(uint256,bytes32)": { - "details": "Callback function called by the randomizer contract when the random value is generated." - }, - "randomizerWithdraw(uint256)": { - "details": "Allows the governor to withdraw randomizer funds.", - "params": { - "_amount": "Amount to withdraw in wei." - } - }, - "receiveRandomness(uint256)": { - "details": "Return the random number.", - "returns": { - "randomNumber": "The random number or 0 if it is not ready or has not been requested." - } - }, - "requestRandomness(uint256)": { - "details": "Request a random number. The id of the request is tied to the sender." - }, - "setCallbackGasLimit(uint256)": { - "details": "Change the Randomizer callback gas limit.", - "params": { - "_callbackGasLimit": "the new limit." - } - }, - "setRandomizer(address)": { - "details": "Change the Randomizer address.", - "params": { - "_randomizer": "the new Randomizer address." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "title": "Random Number Generator that uses Randomizer.ai https://randomizer.ai/", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ], - "InvalidImplementation(address)": [ - { - "notice": "The `implementation` is not UUPS-compliant" - } - ] - }, - "events": { - "Upgraded(address)": { - "notice": "Emitted when the `implementation` has been successfully upgraded." - } - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 34952, - "contract": "src/rng/RandomizerRNG.sol:RandomizerRNG", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 34954, - "contract": "src/rng/RandomizerRNG.sol:RandomizerRNG", - "label": "callbackGasLimit", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 34957, - "contract": "src/rng/RandomizerRNG.sol:RandomizerRNG", - "label": "randomizer", - "offset": 0, - "slot": "2", - "type": "t_contract(IRandomizer)34880" - }, - { - "astId": 34961, - "contract": "src/rng/RandomizerRNG.sol:RandomizerRNG", - "label": "randomNumbers", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 34965, - "contract": "src/rng/RandomizerRNG.sol:RandomizerRNG", - "label": "requesterToID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_address,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_contract(IRandomizer)34880": { - "encoding": "inplace", - "label": "contract IRandomizer", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrum/RandomizerRNG_Proxy.json b/contracts/deployments/arbitrum/RandomizerRNG_Proxy.json deleted file mode 100644 index a18214647..000000000 --- a/contracts/deployments/arbitrum/RandomizerRNG_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x2aa9e7ceedeff87f9029f63cdd19f7faa5b9e1dbddbb43d54ec0178cfa0ecf47", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3", - "transactionIndex": 11, - "gasUsed": "420417", - "logsBloom": "0x00000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000200000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xddff904a7835f247225000014a5301fa9462a1fd8f68da0f0dcdc3a9c70d34c8", - "transactionHash": "0x2aa9e7ceedeff87f9029f63cdd19f7faa5b9e1dbddbb43d54ec0178cfa0ecf47", - "logs": [ - { - "transactionIndex": 11, - "blockNumber": 272063118, - "transactionHash": "0x2aa9e7ceedeff87f9029f63cdd19f7faa5b9e1dbddbb43d54ec0178cfa0ecf47", - "address": "0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 37, - "blockHash": "0xddff904a7835f247225000014a5301fa9462a1fd8f68da0f0dcdc3a9c70d34c8" - } - ], - "blockNumber": 272063118, - "cumulativeGasUsed": "3366631", - "status": 1, - "byzantium": true - }, - "args": [ - "0xF1a7Cd3115F5852966430f8E3877D2221F074A2e", - "0x485cc9550000000000000000000000005b8bb80f2d72d0c85cab8fb169e8170a05c94baf000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"RandomizerRNGProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206e4bfb3b93f88c05da2e7790f3420dc92a7e92440e2c63e66223920b337be18264736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206e4bfb3b93f88c05da2e7790f3420dc92a7e92440e2c63e66223920b337be18264736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/SortitionModule.json b/contracts/deployments/arbitrum/SortitionModule.json deleted file mode 100644 index 2416168ed..000000000 --- a/contracts/deployments/arbitrum/SortitionModule.json +++ /dev/null @@ -1,1181 +0,0 @@ -{ - "address": "0x21A9402aDb818744B296e1d1BE58C804118DC03D", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNK", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNKWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ISortitionModule.Phase", - "name": "_phase", - "type": "uint8" - } - ], - "name": "NewPhase", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeDelayed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_unlock", - "type": "bool" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amountAllCourts", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - } - ], - "name": "changeMaxDrawingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxStakePerJuror", - "type": "uint256" - } - ], - "name": "changeMaxStakePerJuror", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxTotalStaked", - "type": "uint256" - } - ], - "name": "changeMaxTotalStaked", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - } - ], - "name": "changeMinStakingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "changeRandomNumberGenerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDisputeHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createTree", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeReadIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeWriteIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "delayedStakes", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "alreadyTransferred", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputesWithoutJurors", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "executeDelayedStakes", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getJurorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalLocked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakedInCourt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbCourts", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorCourtIDs", - "outputs": [ - { - "internalType": "uint96[]", - "name": "", - "type": "uint96[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorLeftoverPNK", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - }, - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxTotalStaked", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize4", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "isJurorStaked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "jurors", - "outputs": [ - { - "internalType": "uint256", - "name": "stakedPnk", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lockedPnk", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPhaseChange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "jurorAccount", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtId", - "type": "uint96" - } - ], - "name": "latestDelayedStakeIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "lockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxDrawingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxStakePerJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxTotalStaked", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minStakingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_randomNumber", - "type": "uint256" - } - ], - "name": "notifyRandomNumber", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "passPhase", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "penalizeStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availablePenalty", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "phase", - "outputs": [ - { - "internalType": "enum ISortitionModule.Phase", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "postDrawHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumberRequestBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rng", - "outputs": [ - { - "internalType": "contract RNG", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rngLookahead", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "setJurorInactive", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_ID", - "type": "bytes32" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalStaked", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "unlockStake", - "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": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "validateStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "enum StakingResult", - "name": "stakingResult", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "withdrawLeftoverPNK", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x64c943ff11d3c7afafa6d5520c093d07d2f79e518e6adf9d3a72081fd937c7c3", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x21A9402aDb818744B296e1d1BE58C804118DC03D", - "transactionIndex": 7, - "gasUsed": "595244", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd0b7f441a69fe8a34febf4998ba3ad138790bfba81f486df83208c393801a7ba", - "transactionHash": "0x64c943ff11d3c7afafa6d5520c093d07d2f79e518e6adf9d3a72081fd937c7c3", - "logs": [ - { - "transactionIndex": 7, - "blockNumber": 272063201, - "transactionHash": "0x64c943ff11d3c7afafa6d5520c093d07d2f79e518e6adf9d3a72081fd937c7c3", - "address": "0x21A9402aDb818744B296e1d1BE58C804118DC03D", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000002", - "logIndex": 18, - "blockHash": "0xd0b7f441a69fe8a34febf4998ba3ad138790bfba81f486df83208c393801a7ba" - } - ], - "blockNumber": 272063201, - "cumulativeGasUsed": "1884235", - "status": 1, - "byzantium": true - }, - "args": [ - "0x7E13f295536FD6c48Ba792CFdEF691d592Fa0851", - "0x498c752c000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000991d2df165670b9cac3b022f4b68d65b664222ea00000000000000000000000000000000000000000000000000000000000007080000000000000000000000000000000000000000000000000000000000000708000000000000000000000000044afe0069c0fd641bc5f90d9a4218ef0b2fa9d3000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000006c6b935b8bbd40000000000000000000000000000000000000000000000001a784379d99db42000000" - ], - "numDeployments": 3, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"SortitionModuleNeoProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122064d5540e7436cff4f68d038f9f28acc385d8590bbe5021a0288171123c7a73ee64736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122064d5540e7436cff4f68d038f9f28acc385d8590bbe5021a0288171123c7a73ee64736f6c634300081c0033", - "execute": { - "methodName": "initialize4", - "args": [] - }, - "implementation": "0x3f6D0daeD166b64FCfBb9bc7c9E26423c6C08eEE", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/SortitionModule_Implementation.json b/contracts/deployments/arbitrum/SortitionModule_Implementation.json deleted file mode 100644 index a75dc39b1..000000000 --- a/contracts/deployments/arbitrum/SortitionModule_Implementation.json +++ /dev/null @@ -1,1780 +0,0 @@ -{ - "address": "0x3f6D0daeD166b64FCfBb9bc7c9E26423c6C08eEE", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNK", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNKWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ISortitionModule.Phase", - "name": "_phase", - "type": "uint8" - } - ], - "name": "NewPhase", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeDelayed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_unlock", - "type": "bool" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amountAllCourts", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - } - ], - "name": "changeMaxDrawingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxStakePerJuror", - "type": "uint256" - } - ], - "name": "changeMaxStakePerJuror", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxTotalStaked", - "type": "uint256" - } - ], - "name": "changeMaxTotalStaked", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - } - ], - "name": "changeMinStakingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "changeRandomNumberGenerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDisputeHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createTree", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeReadIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeWriteIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "delayedStakes", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "alreadyTransferred", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputesWithoutJurors", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "executeDelayedStakes", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getJurorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalLocked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakedInCourt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbCourts", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorCourtIDs", - "outputs": [ - { - "internalType": "uint96[]", - "name": "", - "type": "uint96[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorLeftoverPNK", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - }, - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxTotalStaked", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize4", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "isJurorStaked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "jurors", - "outputs": [ - { - "internalType": "uint256", - "name": "stakedPnk", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lockedPnk", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPhaseChange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "jurorAccount", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtId", - "type": "uint96" - } - ], - "name": "latestDelayedStakeIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "lockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxDrawingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxStakePerJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxTotalStaked", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minStakingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_randomNumber", - "type": "uint256" - } - ], - "name": "notifyRandomNumber", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "passPhase", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "penalizeStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availablePenalty", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "phase", - "outputs": [ - { - "internalType": "enum ISortitionModule.Phase", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "postDrawHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumberRequestBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rng", - "outputs": [ - { - "internalType": "contract RNG", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rngLookahead", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "setJurorInactive", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_ID", - "type": "bytes32" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalStaked", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "unlockStake", - "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": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "validateStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "enum StakingResult", - "name": "stakingResult", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "withdrawLeftoverPNK", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xf808ec232c9ed34d0b4c7b88423890abf9e95d0d6b59dbec094a75cd6440dc7e", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x3f6D0daeD166b64FCfBb9bc7c9E26423c6C08eEE", - "transactionIndex": 1, - "gasUsed": "2887253", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000020000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x44f9adb9508a182d9cb7240f320a284933dee7fc57cd0afc36a8f192e9f503a1", - "transactionHash": "0xf808ec232c9ed34d0b4c7b88423890abf9e95d0d6b59dbec094a75cd6440dc7e", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 364034221, - "transactionHash": "0xf808ec232c9ed34d0b4c7b88423890abf9e95d0d6b59dbec094a75cd6440dc7e", - "address": "0x3f6D0daeD166b64FCfBb9bc7c9E26423c6C08eEE", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 0, - "blockHash": "0x44f9adb9508a182d9cb7240f320a284933dee7fc57cd0afc36a8f192e9f503a1" - } - ], - "blockNumber": 364034221, - "cumulativeGasUsed": "2887253", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 3, - "solcInputHash": "dce986e4165bcb9f133699e2fcc4a531", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LeftoverPNK\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LeftoverPNKWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum ISortitionModule.Phase\",\"name\":\"_phase\",\"type\":\"uint8\"}],\"name\":\"NewPhase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"StakeDelayed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_unlock\",\"type\":\"bool\"}],\"name\":\"StakeLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amountAllCourts\",\"type\":\"uint256\"}],\"name\":\"StakeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDrawingTime\",\"type\":\"uint256\"}],\"name\":\"changeMaxDrawingTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxStakePerJuror\",\"type\":\"uint256\"}],\"name\":\"changeMaxStakePerJuror\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxTotalStaked\",\"type\":\"uint256\"}],\"name\":\"changeMaxTotalStaked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minStakingTime\",\"type\":\"uint256\"}],\"name\":\"changeMinStakingTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract RNG\",\"name\":\"_rng\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rngLookahead\",\"type\":\"uint256\"}],\"name\":\"changeRandomNumberGenerator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"createDisputeHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createTree\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedStakeReadIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedStakeWriteIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedStakes\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"alreadyTransferred\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputesWithoutJurors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_iterations\",\"type\":\"uint256\"}],\"name\":\"executeDelayedStakes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"getJurorBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stakedInCourt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbCourts\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"getJurorCourtIDs\",\"outputs\":[{\"internalType\":\"uint96[]\",\"name\":\"\",\"type\":\"uint96[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"getJurorLeftoverPNK\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minStakingTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxDrawingTime\",\"type\":\"uint256\"},{\"internalType\":\"contract RNG\",\"name\":\"_rng\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rngLookahead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxStakePerJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxTotalStaked\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize4\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"isJurorStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"jurors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stakedPnk\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lockedPnk\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPhaseChange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"jurorAccount\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"courtId\",\"type\":\"uint96\"}],\"name\":\"latestDelayedStakeIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"}],\"name\":\"lockStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDrawingTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxStakePerJuror\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTotalStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minStakingTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_randomNumber\",\"type\":\"uint256\"}],\"name\":\"notifyRandomNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"passPhase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"}],\"name\":\"penalizeStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pnkBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availablePenalty\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"phase\",\"outputs\":[{\"internalType\":\"enum ISortitionModule.Phase\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"postDrawHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomNumberRequestBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rng\",\"outputs\":[{\"internalType\":\"contract RNG\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rngLookahead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setJurorInactive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_pnkDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pnkWithdrawal\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"setStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_ID\",\"type\":\"bytes32\"}],\"name\":\"stakeOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"stakeOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"}],\"name\":\"unlockStake\",\"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\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"validateStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pnkDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pnkWithdrawal\",\"type\":\"uint256\"},{\"internalType\":\"enum StakingResult\",\"name\":\"stakingResult\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"withdrawLeftoverPNK\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A factory of trees that keeps track of staked values for sortition.\",\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"LeftoverPNK(address,uint256)\":{\"details\":\"Emitted when leftover PNK is available.\",\"params\":{\"_account\":\"The account of the juror.\",\"_amount\":\"The amount of PNK available.\"}},\"LeftoverPNKWithdrawn(address,uint256)\":{\"details\":\"Emitted when leftover PNK is withdrawn.\",\"params\":{\"_account\":\"The account of the juror withdrawing PNK.\",\"_amount\":\"The amount of PNK withdrawn.\"}},\"StakeDelayed(address,uint96,uint256)\":{\"params\":{\"_address\":\"The address of the juror.\",\"_amount\":\"The amount of tokens staked in the court.\",\"_courtID\":\"The ID of the court.\"}},\"StakeLocked(address,uint256,bool)\":{\"params\":{\"_address\":\"The address of the juror.\",\"_relativeAmount\":\"The amount of tokens locked.\",\"_unlock\":\"Whether the stake is locked or unlocked.\"}},\"StakeSet(address,uint256,uint256,uint256)\":{\"params\":{\"_address\":\"The address of the juror.\",\"_amount\":\"The amount of tokens staked in the court.\",\"_amountAllCourts\":\"The amount of tokens staked in all courts.\",\"_courtID\":\"The ID of the court.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor of the contract.\",\"params\":{\"_governor\":\"The new governor.\"}},\"changeMaxDrawingTime(uint256)\":{\"details\":\"Changes the `maxDrawingTime` storage variable.\",\"params\":{\"_maxDrawingTime\":\"The new value for the `maxDrawingTime` storage variable.\"}},\"changeMinStakingTime(uint256)\":{\"details\":\"Changes the `minStakingTime` storage variable.\",\"params\":{\"_minStakingTime\":\"The new value for the `minStakingTime` storage variable.\"}},\"changeRandomNumberGenerator(address,uint256)\":{\"details\":\"Changes the `_rng` and `_rngLookahead` storage variables.\",\"params\":{\"_rng\":\"The new value for the `RNGenerator` storage variable.\",\"_rngLookahead\":\"The new value for the `rngLookahead` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createTree(bytes32,bytes)\":{\"details\":\"Create a sortition sum tree at the specified key.\",\"params\":{\"_extraData\":\"Extra data that contains the number of children each node in the tree should have.\",\"_key\":\"The key of the new tree.\"}},\"draw(bytes32,uint256,uint256)\":{\"details\":\"Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0.\",\"params\":{\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\",\"_key\":\"The key of the tree.\",\"_nonce\":\"Nonce to hash with random number.\"},\"returns\":{\"drawnAddress\":\"The drawn address. `O(k * log_k(n))` where `k` is the maximum number of children per node in the tree, and `n` is the maximum number of nodes ever appended.\"}},\"executeDelayedStakes(uint256)\":{\"details\":\"Executes the next delayed stakes.\",\"params\":{\"_iterations\":\"The number of delayed stakes to execute.\"}},\"getJurorCourtIDs(address)\":{\"details\":\"Gets the court identifiers where a specific `_juror` has staked.\",\"params\":{\"_juror\":\"The address of the juror.\"}},\"initialize(address,address,uint256,uint256,address,uint256,uint256,uint256)\":{\"details\":\"Initializer (constructor equivalent for upgradable contracts).\",\"params\":{\"_core\":\"The KlerosCore.\",\"_governor\":\"The governor.\",\"_maxDrawingTime\":\"Time after which the drawing phase can be switched\",\"_maxStakePerJuror\":\"The maximum amount of PNK a juror can stake in a court.\",\"_maxTotalStaked\":\"The maximum amount of PNK that can be staked in all courts.\",\"_minStakingTime\":\"Minimal time to stake\",\"_rng\":\"The random number generator.\",\"_rngLookahead\":\"Lookahead value for rng.\"}},\"notifyRandomNumber(uint256)\":{\"details\":\"Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase().\",\"params\":{\"_randomNumber\":\"Random number returned by RNG contract.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setJurorInactive(address)\":{\"details\":\"Unstakes the inactive juror from all courts. `O(n * (p * log_k(j)) )` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\",\"params\":{\"_account\":\"The juror to unstake.\"}},\"setStake(address,uint96,uint256,uint256,uint256)\":{\"details\":\"Update the state of the stakes, called by KC at the end of setStake flow. `O(n + p * log_k(j))` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\",\"params\":{\"_account\":\"The address of the juror.\",\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake.\",\"_pnkDeposit\":\"The amount of PNK to be deposited.\",\"_pnkWithdrawal\":\"The amount of PNK to be withdrawn.\"}},\"stakeOf(address,uint96)\":{\"details\":\"Get the stake of a juror in a court.\",\"params\":{\"_courtID\":\"The ID of the court.\",\"_juror\":\"The address of the juror.\"},\"returns\":{\"_0\":\"value The stake of the juror in the court.\"}},\"stakeOf(bytes32,bytes32)\":{\"details\":\"Get the stake of a juror in a court.\",\"params\":{\"_ID\":\"The stake path ID, corresponding to a juror.\",\"_key\":\"The key of the tree, corresponding to a court.\"},\"returns\":{\"_0\":\"The stake of the juror in the court.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"validateStake(address,uint96,uint256)\":{\"details\":\"Validate the specified juror's new stake for a court. Note: no state changes should be made when returning stakingResult != Successful, otherwise delayed stakes might break invariants.\",\"params\":{\"_account\":\"The address of the juror.\",\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake.\"},\"returns\":{\"pnkDeposit\":\"The amount of PNK to be deposited.\",\"pnkWithdrawal\":\"The amount of PNK to be withdrawn.\",\"stakingResult\":\"The result of the staking operation.\"}},\"withdrawLeftoverPNK(address)\":{\"details\":\"Gives back the locked PNKs in case the juror fully unstaked earlier. Note that since locked and staked PNK are async it is possible for the juror to have positive staked PNK balance while having 0 stake in courts and 0 locked tokens (eg. when the juror fully unstaked during dispute and later got his tokens unlocked). In this case the juror can use this function to withdraw the leftover tokens. Also note that if the juror has some leftover PNK while not fully unstaked he'll have to manually unstake from all courts to trigger this function.\",\"params\":{\"_account\":\"The juror whose PNK to withdraw.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"SortitionModuleNeo\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"events\":{\"StakeDelayed(address,uint96,uint256)\":{\"notice\":\"Emitted when a juror's stake is delayed.\"},\"StakeLocked(address,uint256,bool)\":{\"notice\":\"Emitted when a juror's stake is locked.\"},\"StakeSet(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when a juror stakes in a court.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/SortitionModuleNeo.sol\":\"SortitionModuleNeo\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/SortitionModuleBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore} from \\\"./KlerosCore.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {RNG} from \\\"../rng/RNG.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title SortitionModuleBase\\n/// @dev A factory of trees that keeps track of staked values for sortition.\\nabstract contract SortitionModuleBase is ISortitionModule, Initializable, UUPSProxiable {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct SortitionSumTree {\\n uint256 K; // The maximum number of children per node.\\n // We use this to keep track of vacant positions in the tree after removing a leaf. This is for keeping the tree as balanced as possible without spending gas on moving nodes around.\\n uint256[] stack;\\n uint256[] nodes;\\n // Two-way mapping of IDs to node indexes. Note that node index 0 is reserved for the root node, and means the ID does not have a node.\\n mapping(bytes32 => uint256) IDsToNodeIndexes;\\n mapping(uint256 => bytes32) nodeIndexesToIDs;\\n }\\n\\n struct DelayedStake {\\n address account; // The address of the juror.\\n uint96 courtID; // The ID of the court.\\n uint256 stake; // The new stake.\\n bool alreadyTransferred; // DEPRECATED. True if tokens were already transferred before delayed stake's execution.\\n }\\n\\n struct Juror {\\n uint96[] courtIDs; // The IDs of courts where the juror's stake path ends. A stake path is a path from the general court to a court the juror directly staked in using `_setStake`.\\n uint256 stakedPnk; // The juror's total amount of tokens staked in subcourts. Reflects actual pnk balance.\\n uint256 lockedPnk; // The juror's total amount of tokens locked in disputes.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The core arbitrator contract.\\n Phase public phase; // The current phase.\\n uint256 public minStakingTime; // The time after which the phase can be switched to Drawing if there are open disputes.\\n uint256 public maxDrawingTime; // The time after which the phase can be switched back to Staking.\\n uint256 public lastPhaseChange; // The last time the phase was changed.\\n uint256 public randomNumberRequestBlock; // Number of the block when RNG request was made.\\n uint256 public disputesWithoutJurors; // The number of disputes that have not finished drawing jurors.\\n RNG public rng; // The random number generator.\\n uint256 public randomNumber; // Random number returned by RNG.\\n uint256 public rngLookahead; // Minimal block distance between requesting and obtaining a random number.\\n uint256 public delayedStakeWriteIndex; // The index of the last `delayedStake` item that was written to the array. 0 index is skipped.\\n uint256 public delayedStakeReadIndex; // The index of the next `delayedStake` item that should be processed. Starts at 1 because 0 index is skipped.\\n mapping(bytes32 treeHash => SortitionSumTree) sortitionSumTrees; // The mapping trees by keys.\\n mapping(address account => Juror) public jurors; // The jurors.\\n mapping(uint256 => DelayedStake) public delayedStakes; // Stores the stakes that were changed during Drawing phase, to update them when the phase is switched to Staking.\\n mapping(address jurorAccount => mapping(uint96 courtId => uint256)) public latestDelayedStakeIndex; // DEPRECATED. Maps the juror to its latest delayed stake. If there is already a delayed stake for this juror then it'll be replaced. latestDelayedStakeIndex[juror][courtID].\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @notice Emitted when a juror stakes in a court.\\n /// @param _address The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _amount The amount of tokens staked in the court.\\n /// @param _amountAllCourts The amount of tokens staked in all courts.\\n event StakeSet(address indexed _address, uint256 _courtID, uint256 _amount, uint256 _amountAllCourts);\\n\\n /// @notice Emitted when a juror's stake is delayed.\\n /// @param _address The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _amount The amount of tokens staked in the court.\\n event StakeDelayed(address indexed _address, uint96 indexed _courtID, uint256 _amount);\\n\\n /// @notice Emitted when a juror's stake is locked.\\n /// @param _address The address of the juror.\\n /// @param _relativeAmount The amount of tokens locked.\\n /// @param _unlock Whether the stake is locked or unlocked.\\n event StakeLocked(address indexed _address, uint256 _relativeAmount, bool _unlock);\\n\\n /// @dev Emitted when leftover PNK is available.\\n /// @param _account The account of the juror.\\n /// @param _amount The amount of PNK available.\\n event LeftoverPNK(address indexed _account, uint256 _amount);\\n\\n /// @dev Emitted when leftover PNK is withdrawn.\\n /// @param _account The account of the juror withdrawing PNK.\\n /// @param _amount The amount of PNK withdrawn.\\n event LeftoverPNKWithdrawn(address indexed _account, uint256 _amount);\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __SortitionModuleBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n uint256 _minStakingTime,\\n uint256 _maxDrawingTime,\\n RNG _rng,\\n uint256 _rngLookahead\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n minStakingTime = _minStakingTime;\\n maxDrawingTime = _maxDrawingTime;\\n lastPhaseChange = block.timestamp;\\n rng = _rng;\\n rngLookahead = _rngLookahead;\\n delayedStakeReadIndex = 1;\\n }\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(governor) == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor of the contract.\\n /// @param _governor The new governor.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `minStakingTime` storage variable.\\n /// @param _minStakingTime The new value for the `minStakingTime` storage variable.\\n function changeMinStakingTime(uint256 _minStakingTime) external onlyByGovernor {\\n minStakingTime = _minStakingTime;\\n }\\n\\n /// @dev Changes the `maxDrawingTime` storage variable.\\n /// @param _maxDrawingTime The new value for the `maxDrawingTime` storage variable.\\n function changeMaxDrawingTime(uint256 _maxDrawingTime) external onlyByGovernor {\\n maxDrawingTime = _maxDrawingTime;\\n }\\n\\n /// @dev Changes the `_rng` and `_rngLookahead` storage variables.\\n /// @param _rng The new value for the `RNGenerator` storage variable.\\n /// @param _rngLookahead The new value for the `rngLookahead` storage variable.\\n function changeRandomNumberGenerator(RNG _rng, uint256 _rngLookahead) external onlyByGovernor {\\n rng = _rng;\\n rngLookahead = _rngLookahead;\\n if (phase == Phase.generating) {\\n rng.requestRandomness(block.number + rngLookahead);\\n randomNumberRequestBlock = block.number;\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function passPhase() external {\\n if (phase == Phase.staking) {\\n require(\\n block.timestamp - lastPhaseChange >= minStakingTime,\\n \\\"The minimum staking time has not passed yet.\\\"\\n );\\n require(disputesWithoutJurors > 0, \\\"There are no disputes that need jurors.\\\");\\n rng.requestRandomness(block.number + rngLookahead);\\n randomNumberRequestBlock = block.number;\\n phase = Phase.generating;\\n } else if (phase == Phase.generating) {\\n randomNumber = rng.receiveRandomness(randomNumberRequestBlock + rngLookahead);\\n require(randomNumber != 0, \\\"Random number is not ready yet\\\");\\n phase = Phase.drawing;\\n } else if (phase == Phase.drawing) {\\n require(\\n disputesWithoutJurors == 0 || block.timestamp - lastPhaseChange >= maxDrawingTime,\\n \\\"There are still disputes without jurors and the maximum drawing time has not passed yet.\\\"\\n );\\n phase = Phase.staking;\\n }\\n\\n lastPhaseChange = block.timestamp;\\n emit NewPhase(phase);\\n }\\n\\n /// @dev Create a sortition sum tree at the specified key.\\n /// @param _key The key of the new tree.\\n /// @param _extraData Extra data that contains the number of children each node in the tree should have.\\n function createTree(bytes32 _key, bytes memory _extraData) external override onlyByCore {\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n uint256 K = _extraDataToTreeK(_extraData);\\n require(tree.K == 0, \\\"Tree already exists.\\\");\\n require(K > 1, \\\"K must be greater than one.\\\");\\n tree.K = K;\\n tree.nodes.push(0);\\n }\\n\\n /// @dev Executes the next delayed stakes.\\n /// @param _iterations The number of delayed stakes to execute.\\n function executeDelayedStakes(uint256 _iterations) external {\\n require(phase == Phase.staking, \\\"Should be in Staking phase.\\\");\\n require(delayedStakeWriteIndex >= delayedStakeReadIndex, \\\"No delayed stake to execute.\\\");\\n\\n uint256 actualIterations = (delayedStakeReadIndex + _iterations) - 1 > delayedStakeWriteIndex\\n ? (delayedStakeWriteIndex - delayedStakeReadIndex) + 1\\n : _iterations;\\n uint256 newDelayedStakeReadIndex = delayedStakeReadIndex + actualIterations;\\n\\n for (uint256 i = delayedStakeReadIndex; i < newDelayedStakeReadIndex; i++) {\\n DelayedStake storage delayedStake = delayedStakes[i];\\n core.setStakeBySortitionModule(delayedStake.account, delayedStake.courtID, delayedStake.stake);\\n delete delayedStakes[i];\\n }\\n delayedStakeReadIndex = newDelayedStakeReadIndex;\\n }\\n\\n function createDisputeHook(uint256 /*_disputeID*/, uint256 /*_roundID*/) external override onlyByCore {\\n disputesWithoutJurors++;\\n }\\n\\n function postDrawHook(uint256 /*_disputeID*/, uint256 /*_roundID*/) external override onlyByCore {\\n disputesWithoutJurors--;\\n }\\n\\n /// @dev Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase().\\n /// @param _randomNumber Random number returned by RNG contract.\\n function notifyRandomNumber(uint256 _randomNumber) public override {}\\n\\n /// @dev Validate the specified juror's new stake for a court.\\n /// Note: no state changes should be made when returning stakingResult != Successful, otherwise delayed stakes might break invariants.\\n /// @param _account The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// @return pnkDeposit The amount of PNK to be deposited.\\n /// @return pnkWithdrawal The amount of PNK to be withdrawn.\\n /// @return stakingResult The result of the staking operation.\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external override onlyByCore returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) {\\n (pnkDeposit, pnkWithdrawal, stakingResult) = _validateStake(_account, _courtID, _newStake);\\n }\\n\\n function _validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) internal virtual returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) {\\n Juror storage juror = jurors[_account];\\n uint256 currentStake = stakeOf(_account, _courtID);\\n\\n uint256 nbCourts = juror.courtIDs.length;\\n if (currentStake == 0 && nbCourts >= MAX_STAKE_PATHS) {\\n return (0, 0, StakingResult.CannotStakeInMoreCourts); // Prevent staking beyond MAX_STAKE_PATHS but unstaking is always allowed.\\n }\\n\\n if (currentStake == 0 && _newStake == 0) {\\n return (0, 0, StakingResult.CannotStakeZeroWhenNoStake); // Forbid staking 0 amount when current stake is 0 to avoid flaky behaviour.\\n }\\n\\n if (phase != Phase.staking) {\\n // Store the stake change as delayed, to be applied when the phase switches back to Staking.\\n DelayedStake storage delayedStake = delayedStakes[++delayedStakeWriteIndex];\\n delayedStake.account = _account;\\n delayedStake.courtID = _courtID;\\n delayedStake.stake = _newStake;\\n emit StakeDelayed(_account, _courtID, _newStake);\\n return (pnkDeposit, pnkWithdrawal, StakingResult.Delayed);\\n }\\n\\n // Current phase is Staking: set stakes.\\n if (_newStake >= currentStake) {\\n pnkDeposit = _newStake - currentStake;\\n } else {\\n pnkWithdrawal = currentStake - _newStake;\\n // Ensure locked tokens remain in the contract. They can only be released during Execution.\\n uint256 possibleWithdrawal = juror.stakedPnk > juror.lockedPnk ? juror.stakedPnk - juror.lockedPnk : 0;\\n if (pnkWithdrawal > possibleWithdrawal) {\\n pnkWithdrawal = possibleWithdrawal;\\n }\\n }\\n return (pnkDeposit, pnkWithdrawal, StakingResult.Successful);\\n }\\n\\n /// @dev Update the state of the stakes, called by KC at the end of setStake flow.\\n /// `O(n + p * log_k(j))` where\\n /// `n` is the number of courts the juror has staked in,\\n /// `p` is the depth of the court tree,\\n /// `k` is the minimum number of children per node of one of these courts' sortition sum tree,\\n /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\\n /// @param _account The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _pnkDeposit The amount of PNK to be deposited.\\n /// @param _pnkWithdrawal The amount of PNK to be withdrawn.\\n /// @param _newStake The new stake.\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external override onlyByCore {\\n _setStake(_account, _courtID, _pnkDeposit, _pnkWithdrawal, _newStake);\\n }\\n\\n function _setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) internal virtual {\\n Juror storage juror = jurors[_account];\\n if (_pnkDeposit > 0) {\\n uint256 currentStake = stakeOf(_account, _courtID);\\n if (currentStake == 0) {\\n juror.courtIDs.push(_courtID);\\n }\\n // Increase juror's balance by deposited amount.\\n juror.stakedPnk += _pnkDeposit;\\n } else {\\n juror.stakedPnk -= _pnkWithdrawal;\\n if (_newStake == 0) {\\n // Cleanup\\n for (uint256 i = juror.courtIDs.length; i > 0; i--) {\\n if (juror.courtIDs[i - 1] == _courtID) {\\n juror.courtIDs[i - 1] = juror.courtIDs[juror.courtIDs.length - 1];\\n juror.courtIDs.pop();\\n break;\\n }\\n }\\n }\\n }\\n\\n // Update the sortition sum tree.\\n bytes32 stakePathID = _accountAndCourtIDToStakePathID(_account, _courtID);\\n bool finished = false;\\n uint96 currenCourtID = _courtID;\\n while (!finished) {\\n // Tokens are also implicitly staked in parent courts through sortition module to increase the chance of being drawn.\\n _set(bytes32(uint256(currenCourtID)), _newStake, stakePathID);\\n if (currenCourtID == GENERAL_COURT) {\\n finished = true;\\n } else {\\n (currenCourtID, , , , , , ) = core.courts(currenCourtID); // Get the parent court.\\n }\\n }\\n emit StakeSet(_account, _courtID, _newStake, juror.stakedPnk);\\n }\\n\\n function lockStake(address _account, uint256 _relativeAmount) external override onlyByCore {\\n jurors[_account].lockedPnk += _relativeAmount;\\n emit StakeLocked(_account, _relativeAmount, false);\\n }\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external override onlyByCore {\\n Juror storage juror = jurors[_account];\\n juror.lockedPnk -= _relativeAmount;\\n emit StakeLocked(_account, _relativeAmount, true);\\n\\n uint256 amount = getJurorLeftoverPNK(_account);\\n if (amount > 0) {\\n emit LeftoverPNK(_account, amount);\\n }\\n }\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external override onlyByCore returns (uint256 pnkBalance, uint256 availablePenalty) {\\n Juror storage juror = jurors[_account];\\n uint256 stakedPnk = juror.stakedPnk;\\n\\n if (stakedPnk >= _relativeAmount) {\\n availablePenalty = _relativeAmount;\\n juror.stakedPnk -= _relativeAmount;\\n } else {\\n availablePenalty = stakedPnk;\\n juror.stakedPnk = 0;\\n }\\n\\n pnkBalance = juror.stakedPnk;\\n return (pnkBalance, availablePenalty);\\n }\\n\\n /// @dev Unstakes the inactive juror from all courts.\\n /// `O(n * (p * log_k(j)) )` where\\n /// `n` is the number of courts the juror has staked in,\\n /// `p` is the depth of the court tree,\\n /// `k` is the minimum number of children per node of one of these courts' sortition sum tree,\\n /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\\n /// @param _account The juror to unstake.\\n function setJurorInactive(address _account) external override onlyByCore {\\n uint96[] memory courtIDs = getJurorCourtIDs(_account);\\n for (uint256 j = courtIDs.length; j > 0; j--) {\\n core.setStakeBySortitionModule(_account, courtIDs[j - 1], 0);\\n }\\n }\\n\\n /// @dev Gives back the locked PNKs in case the juror fully unstaked earlier.\\n /// Note that since locked and staked PNK are async it is possible for the juror to have positive staked PNK balance\\n /// while having 0 stake in courts and 0 locked tokens (eg. when the juror fully unstaked during dispute and later got his tokens unlocked).\\n /// In this case the juror can use this function to withdraw the leftover tokens.\\n /// Also note that if the juror has some leftover PNK while not fully unstaked he'll have to manually unstake from all courts to trigger this function.\\n /// @param _account The juror whose PNK to withdraw.\\n function withdrawLeftoverPNK(address _account) external override {\\n // Can withdraw the leftover PNK if fully unstaked, has no tokens locked and has positive balance.\\n // This withdrawal can't be triggered by calling setStake() in KlerosCore because current stake is technically 0, thus it is done via separate function.\\n uint256 amount = getJurorLeftoverPNK(_account);\\n require(amount > 0, \\\"Not eligible for withdrawal.\\\");\\n jurors[_account].stakedPnk = 0;\\n core.transferBySortitionModule(_account, amount);\\n emit LeftoverPNKWithdrawn(_account, amount);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Draw an ID from a tree using a number.\\n /// Note that this function reverts if the sum of all values in the tree is 0.\\n /// @param _key The key of the tree.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _nonce Nonce to hash with random number.\\n /// @return drawnAddress The drawn address.\\n /// `O(k * log_k(n))` where\\n /// `k` is the maximum number of children per node in the tree,\\n /// and `n` is the maximum number of nodes ever appended.\\n function draw(\\n bytes32 _key,\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) public view override returns (address drawnAddress) {\\n require(phase == Phase.drawing, \\\"Wrong phase.\\\");\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n\\n if (tree.nodes[0] == 0) {\\n return address(0); // No jurors staked.\\n }\\n\\n uint256 currentDrawnNumber = uint256(keccak256(abi.encodePacked(randomNumber, _coreDisputeID, _nonce))) %\\n tree.nodes[0];\\n\\n // While it still has children\\n uint256 treeIndex = 0;\\n while ((tree.K * treeIndex) + 1 < tree.nodes.length) {\\n for (uint256 i = 1; i <= tree.K; i++) {\\n // Loop over children.\\n uint256 nodeIndex = (tree.K * treeIndex) + i;\\n uint256 nodeValue = tree.nodes[nodeIndex];\\n\\n if (currentDrawnNumber >= nodeValue) {\\n // Go to the next child.\\n currentDrawnNumber -= nodeValue;\\n } else {\\n // Pick this child.\\n treeIndex = nodeIndex;\\n break;\\n }\\n }\\n }\\n drawnAddress = _stakePathIDToAccount(tree.nodeIndexesToIDs[treeIndex]);\\n }\\n\\n /// @dev Get the stake of a juror in a court.\\n /// @param _juror The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @return value The stake of the juror in the court.\\n function stakeOf(address _juror, uint96 _courtID) public view returns (uint256) {\\n bytes32 stakePathID = _accountAndCourtIDToStakePathID(_juror, _courtID);\\n return stakeOf(bytes32(uint256(_courtID)), stakePathID);\\n }\\n\\n /// @dev Get the stake of a juror in a court.\\n /// @param _key The key of the tree, corresponding to a court.\\n /// @param _ID The stake path ID, corresponding to a juror.\\n /// @return The stake of the juror in the court.\\n function stakeOf(bytes32 _key, bytes32 _ID) public view returns (uint256) {\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n uint treeIndex = tree.IDsToNodeIndexes[_ID];\\n if (treeIndex == 0) {\\n return 0;\\n }\\n return tree.nodes[treeIndex];\\n }\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n )\\n external\\n view\\n override\\n returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts)\\n {\\n Juror storage juror = jurors[_juror];\\n totalStaked = juror.stakedPnk;\\n totalLocked = juror.lockedPnk;\\n stakedInCourt = stakeOf(_juror, _courtID);\\n nbCourts = juror.courtIDs.length;\\n }\\n\\n /// @dev Gets the court identifiers where a specific `_juror` has staked.\\n /// @param _juror The address of the juror.\\n function getJurorCourtIDs(address _juror) public view override returns (uint96[] memory) {\\n return jurors[_juror].courtIDs;\\n }\\n\\n function isJurorStaked(address _juror) external view override returns (bool) {\\n return jurors[_juror].stakedPnk > 0;\\n }\\n\\n function getJurorLeftoverPNK(address _juror) public view override returns (uint256) {\\n Juror storage juror = jurors[_juror];\\n if (juror.courtIDs.length == 0 && juror.lockedPnk == 0) {\\n return juror.stakedPnk;\\n } else {\\n return 0;\\n }\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Update all the parents of a node.\\n /// @param _key The key of the tree to update.\\n /// @param _treeIndex The index of the node to start from.\\n /// @param _plusOrMinus Whether to add (true) or substract (false).\\n /// @param _value The value to add or substract.\\n /// `O(log_k(n))` where\\n /// `k` is the maximum number of children per node in the tree,\\n /// and `n` is the maximum number of nodes ever appended.\\n function _updateParents(bytes32 _key, uint256 _treeIndex, bool _plusOrMinus, uint256 _value) private {\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n\\n uint256 parentIndex = _treeIndex;\\n while (parentIndex != 0) {\\n parentIndex = (parentIndex - 1) / tree.K;\\n tree.nodes[parentIndex] = _plusOrMinus\\n ? tree.nodes[parentIndex] + _value\\n : tree.nodes[parentIndex] - _value;\\n }\\n }\\n\\n /// @dev Retrieves a juror's address from the stake path ID.\\n /// @param _stakePathID The stake path ID to unpack.\\n /// @return account The account.\\n function _stakePathIDToAccount(bytes32 _stakePathID) internal pure returns (address account) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let ptr := mload(0x40)\\n for {\\n let i := 0x00\\n } lt(i, 0x14) {\\n i := add(i, 0x01)\\n } {\\n mstore8(add(add(ptr, 0x0c), i), byte(i, _stakePathID))\\n }\\n account := mload(ptr)\\n }\\n }\\n\\n function _extraDataToTreeK(bytes memory _extraData) internal pure returns (uint256 K) {\\n if (_extraData.length >= 32) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n K := mload(add(_extraData, 0x20))\\n }\\n } else {\\n K = DEFAULT_K;\\n }\\n }\\n\\n /// @dev Set a value in a tree.\\n /// @param _key The key of the tree.\\n /// @param _value The new value.\\n /// @param _ID The ID of the value.\\n /// `O(log_k(n))` where\\n /// `k` is the maximum number of children per node in the tree,\\n /// and `n` is the maximum number of nodes ever appended.\\n function _set(bytes32 _key, uint256 _value, bytes32 _ID) internal {\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n uint256 treeIndex = tree.IDsToNodeIndexes[_ID];\\n\\n if (treeIndex == 0) {\\n // No existing node.\\n if (_value != 0) {\\n // Non zero value.\\n // Append.\\n // Add node.\\n if (tree.stack.length == 0) {\\n // No vacant spots.\\n // Get the index and append the value.\\n treeIndex = tree.nodes.length;\\n tree.nodes.push(_value);\\n\\n // Potentially append a new node and make the parent a sum node.\\n if (treeIndex != 1 && (treeIndex - 1) % tree.K == 0) {\\n // Is first child.\\n uint256 parentIndex = treeIndex / tree.K;\\n bytes32 parentID = tree.nodeIndexesToIDs[parentIndex];\\n uint256 newIndex = treeIndex + 1;\\n tree.nodes.push(tree.nodes[parentIndex]);\\n delete tree.nodeIndexesToIDs[parentIndex];\\n tree.IDsToNodeIndexes[parentID] = newIndex;\\n tree.nodeIndexesToIDs[newIndex] = parentID;\\n }\\n } else {\\n // Some vacant spot.\\n // Pop the stack and append the value.\\n treeIndex = tree.stack[tree.stack.length - 1];\\n tree.stack.pop();\\n tree.nodes[treeIndex] = _value;\\n }\\n\\n // Add label.\\n tree.IDsToNodeIndexes[_ID] = treeIndex;\\n tree.nodeIndexesToIDs[treeIndex] = _ID;\\n\\n _updateParents(_key, treeIndex, true, _value);\\n }\\n } else {\\n // Existing node.\\n if (_value == 0) {\\n // Zero value.\\n // Remove.\\n // Remember value and set to 0.\\n uint256 value = tree.nodes[treeIndex];\\n tree.nodes[treeIndex] = 0;\\n\\n // Push to stack.\\n tree.stack.push(treeIndex);\\n\\n // Clear label.\\n delete tree.IDsToNodeIndexes[_ID];\\n delete tree.nodeIndexesToIDs[treeIndex];\\n\\n _updateParents(_key, treeIndex, false, value);\\n } else if (_value != tree.nodes[treeIndex]) {\\n // New, non zero value.\\n // Set.\\n bool plusOrMinus = tree.nodes[treeIndex] <= _value;\\n uint256 plusOrMinusValue = plusOrMinus\\n ? _value - tree.nodes[treeIndex]\\n : tree.nodes[treeIndex] - _value;\\n tree.nodes[treeIndex] = _value;\\n\\n _updateParents(_key, treeIndex, plusOrMinus, plusOrMinusValue);\\n }\\n }\\n }\\n\\n /// @dev Packs an account and a court ID into a stake path ID.\\n /// @param _account The address of the juror to pack.\\n /// @param _courtID The court ID to pack.\\n /// @return stakePathID The stake path ID.\\n function _accountAndCourtIDToStakePathID(\\n address _account,\\n uint96 _courtID\\n ) internal pure returns (bytes32 stakePathID) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let ptr := mload(0x40)\\n for {\\n let i := 0x00\\n } lt(i, 0x14) {\\n i := add(i, 0x01)\\n } {\\n mstore8(add(ptr, i), byte(add(0x0c, i), _account))\\n }\\n for {\\n let i := 0x14\\n } lt(i, 0x20) {\\n i := add(i, 0x01)\\n } {\\n mstore8(add(ptr, i), byte(i, _courtID))\\n }\\n stakePathID := mload(ptr)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x550f0c0bea80f7457f76f50e27dfa1b8632fe9eb28d4e57f8b2bed9a10a31696\",\"license\":\"MIT\"},\"src/arbitration/SortitionModuleNeo.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {SortitionModuleBase, KlerosCore, RNG, StakingResult} from \\\"./SortitionModuleBase.sol\\\";\\n\\n/// @title SortitionModuleNeo\\n/// @dev A factory of trees that keeps track of staked values for sortition.\\ncontract SortitionModuleNeo is SortitionModuleBase {\\n string public constant override version = \\\"0.9.0\\\";\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public maxStakePerJuror;\\n uint256 public maxTotalStaked;\\n uint256 public totalStaked;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor.\\n /// @param _core The KlerosCore.\\n /// @param _minStakingTime Minimal time to stake\\n /// @param _maxDrawingTime Time after which the drawing phase can be switched\\n /// @param _rng The random number generator.\\n /// @param _rngLookahead Lookahead value for rng.\\n /// @param _maxStakePerJuror The maximum amount of PNK a juror can stake in a court.\\n /// @param _maxTotalStaked The maximum amount of PNK that can be staked in all courts.\\n function initialize(\\n address _governor,\\n KlerosCore _core,\\n uint256 _minStakingTime,\\n uint256 _maxDrawingTime,\\n RNG _rng,\\n uint256 _rngLookahead,\\n uint256 _maxStakePerJuror,\\n uint256 _maxTotalStaked\\n ) external reinitializer(2) {\\n __SortitionModuleBase_initialize(_governor, _core, _minStakingTime, _maxDrawingTime, _rng, _rngLookahead);\\n maxStakePerJuror = _maxStakePerJuror;\\n maxTotalStaked = _maxTotalStaked;\\n }\\n\\n function initialize4() external reinitializer(4) {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n function changeMaxStakePerJuror(uint256 _maxStakePerJuror) external onlyByGovernor {\\n maxStakePerJuror = _maxStakePerJuror;\\n }\\n\\n function changeMaxTotalStaked(uint256 _maxTotalStaked) external onlyByGovernor {\\n maxTotalStaked = _maxTotalStaked;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function _validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) internal override onlyByCore returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) {\\n uint256 currentStake = stakeOf(_account, _courtID);\\n bool stakeIncrease = _newStake > currentStake;\\n uint256 stakeChange = stakeIncrease ? _newStake - currentStake : currentStake - _newStake;\\n Juror storage juror = jurors[_account];\\n if (stakeIncrease) {\\n if (juror.stakedPnk + stakeChange > maxStakePerJuror) {\\n return (0, 0, StakingResult.CannotStakeMoreThanMaxStakePerJuror);\\n }\\n if (totalStaked + stakeChange > maxTotalStaked) {\\n return (0, 0, StakingResult.CannotStakeMoreThanMaxTotalStaked);\\n }\\n }\\n if (phase == Phase.staking) {\\n if (stakeIncrease) {\\n totalStaked += stakeChange;\\n } else {\\n totalStaked -= stakeChange;\\n }\\n }\\n (pnkDeposit, pnkWithdrawal, stakingResult) = super._validateStake(_account, _courtID, _newStake);\\n }\\n}\\n\",\"keccak256\":\"0xf30bee4c2c9e6b428ba484184f8e5a8de99b1d07f44c5f526f0204d774c388b5\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"},\"src/rng/RNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\ninterface RNG {\\n /// @dev Request a random number.\\n /// @param _block Block linked to the request.\\n function requestRandomness(uint256 _block) external;\\n\\n /// @dev Receive the random number.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber Random Number. If the number is not ready or has not been required 0 instead.\\n function receiveRandomness(uint256 _block) external returns (uint256 randomNumber);\\n}\\n\",\"keccak256\":\"0x0f6a8fb72ed7e5a602dc0aaf4f3a037ba9f1765b79b6320604ff810d578af2cf\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516131d16100fc600039600081816115510152818161157a015261177201526131d16000f3fe6080604052600436106102a95760003560e01c80637dc38f1411610165578063c1572618116100cc578063dca5f6b011610085578063dca5f6b014610826578063dd5e5cb514610872578063e4c0aaf414610892578063e534710d146108b2578063f216de4c146108ea578063f2f4eb261461090a578063f6b4d82d1461092a57600080fd5b8063c157261814610765578063caeb50ed1461077b578063ccbac9f514610790578063d09f392d146107a6578063d1c1df48146107c6578063d605787b1461080657600080fd5b8063a2473cc11161011e578063a2473cc1146106ab578063aac03ad2146106cb578063b1c9fe6e146106eb578063b5d69e9914610719578063b888adfa14610739578063c057eca71461074f57600080fd5b80637dc38f14146105ff578063817b1cd214610615578063823cfd701461062b5780638d3771bb1461064b578063965af6c71461066b5780639fbb56f11461068b57600080fd5b8063498c752c1161021457806354fd4d50116101cd57806354fd4d50146104ea57806356acb050146105285780635a68c1541461053e5780635d2d7846146105545780636624192f1461057457806369f45877146105bf57806376fa9fc5146105df57600080fd5b8063498c752c146104355780634c70a0d6146104555780634dbbebbc146104755780634f1ef2861461049557806352d1902d146104a8578063543f8a36146104bd57600080fd5b80631ecacab8116102665780631ecacab81461037257806321e1625e146103a157806321ea9b3f146103c157806323f61de4146103df57806335975f4a146103f5578063477a655c1461041557600080fd5b806303432744146102ae57806306dfc967146102d75780630b274f2e146102f95780630c340a241461030e5780630e083ec9146103465780631b92bbbe1461035c575b600080fd5b3480156102ba57600080fd5b506102c460065481565b6040519081526020015b60405180910390f35b3480156102e357600080fd5b506102f76102f2366004612aed565b6109b8565b005b34801561030557600080fd5b506102f76109f0565b34801561031a57600080fd5b5060005461032e906001600160a01b031681565b6040516001600160a01b0390911681526020016102ce565b34801561035257600080fd5b506102c4600a5481565b34801561036857600080fd5b506102c460035481565b34801561037e57600080fd5b5061039261038d366004612b30565b610dc3565b6040516102ce93929190612b87565b3480156103ad57600080fd5b506102f76103bc366004612bb3565b610e0e565b3480156103cd57600080fd5b506102f76103dc366004612aed565b50565b3480156103eb57600080fd5b506102c460105481565b34801561040157600080fd5b506102f7610410366004612aed565b610eb1565b34801561042157600080fd5b506102f7610430366004612c82565b61109d565b34801561044157600080fd5b506102f7610450366004612cc8565b611194565b34801561046157600080fd5b5061032e610470366004612d40565b611270565b34801561048157600080fd5b506102f7610490366004612bb3565b611454565b6102f76104a3366004612d6c565b61153d565b3480156104b457600080fd5b506102c4611765565b3480156104c957600080fd5b506104dd6104d8366004612da5565b6117c3565b6040516102ce9190612dc2565b3480156104f657600080fd5b5061051b604051806040016040528060058152602001640302e392e360dc1b81525081565b6040516102ce9190612e32565b34801561053457600080fd5b506102c4600b5481565b34801561054a57600080fd5b506102c460115481565b34801561056057600080fd5b506102f761056f366004612e65565b611861565b34801561058057600080fd5b506105af61058f366004612da5565b6001600160a01b03166000908152600d6020526040902060010154151590565b60405190151581526020016102ce565b3480156105cb57600080fd5b506102f76105da366004612da5565b6118a4565b3480156105eb57600080fd5b506102c46105fa366004612e65565b6119bb565b34801561060b57600080fd5b506102c460095481565b34801561062157600080fd5b506102c460125481565b34801561063757600080fd5b506102f7610646366004612aed565b611a16565b34801561065757600080fd5b506102f7610666366004612aed565b611a45565b34801561067757600080fd5b506102f7610686366004612bb3565b611a74565b34801561069757600080fd5b506102c46106a6366004612da5565b611b70565b3480156106b757600080fd5b506102c46106c6366004612e87565b611bb1565b3480156106d757600080fd5b506102f76106e6366004612ec0565b611bdb565b3480156106f757600080fd5b5060015461070c90600160a01b900460ff1681565b6040516102ce9190612f11565b34801561072557600080fd5b506102f7610734366004612da5565b611c19565b34801561074557600080fd5b506102c460045481565b34801561075b57600080fd5b506102c460025481565b34801561077157600080fd5b506102c460055481565b34801561078757600080fd5b506102f7611cf9565b34801561079c57600080fd5b506102c460085481565b3480156107b257600080fd5b506102f76107c1366004612e65565b611daa565b3480156107d257600080fd5b506107e66107e1366004612e87565b611de4565b6040805194855260208501939093529183015260608201526080016102ce565b34801561081257600080fd5b5060075461032e906001600160a01b031681565b34801561083257600080fd5b5061085d610841366004612da5565b600d602052600090815260409020600181015460029091015482565b604080519283526020830191909152016102ce565b34801561087e57600080fd5b506102f761088d366004612aed565b611e23565b34801561089e57600080fd5b506102f76108ad366004612da5565b611e52565b3480156108be57600080fd5b506102c46108cd366004612e87565b600f60209081526000928352604080842090915290825290205481565b3480156108f657600080fd5b5061085d610905366004612bb3565b611e9e565b34801561091657600080fd5b5060015461032e906001600160a01b031681565b34801561093657600080fd5b50610984610945366004612aed565b600e602052600090815260409020805460018201546002909201546001600160a01b03821692600160a01b9092046001600160601b0316919060ff1684565b604080516001600160a01b0390951685526001600160601b03909316602085015291830152151560608201526080016102ce565b6000546001600160a01b031633146109eb5760405162461bcd60e51b81526004016109e290612f2b565b60405180910390fd5b601055565b6000600154600160a01b900460ff166002811115610a1057610a10612b71565b03610b7e57600254600454610a259042612f83565b1015610a885760405162461bcd60e51b815260206004820152602c60248201527f546865206d696e696d756d207374616b696e672074696d6520686173206e6f7460448201526b103830b9b9b2b2103cb2ba1760a11b60648201526084016109e2565b600060065411610aea5760405162461bcd60e51b815260206004820152602760248201527f546865726520617265206e6f2064697370757465732074686174206e65656420604482015266353ab937b9399760c91b60648201526084016109e2565b6007546009546001600160a01b0390911690637363ae1f90610b0c9043612f96565b6040518263ffffffff1660e01b8152600401610b2a91815260200190565b600060405180830381600087803b158015610b4457600080fd5b505af1158015610b58573d6000803e3d6000fd5b505043600555505060018054819060ff60a01b1916600160a01b825b0217905550610d78565b60018054600160a01b900460ff166002811115610b9d57610b9d612b71565b03610c95576007546009546005546001600160a01b03909216916313cf905491610bc691612f96565b6040518263ffffffff1660e01b8152600401610be491815260200190565b6020604051808303816000875af1158015610c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c279190612fa9565b6008819055600003610c7b5760405162461bcd60e51b815260206004820152601e60248201527f52616e646f6d206e756d626572206973206e6f7420726561647920796574000060448201526064016109e2565b600180546002919060ff60a01b1916600160a01b83610b74565b6002600154600160a01b900460ff166002811115610cb557610cb5612b71565b03610d78576006541580610cd75750600354600454610cd49042612f83565b10155b610d6a5760405162461bcd60e51b815260206004820152605860248201527f546865726520617265207374696c6c20646973707574657320776974686f757460448201527f206a75726f727320616e6420746865206d6178696d756d2064726177696e67206064820152773a34b6b2903430b9903737ba103830b9b9b2b2103cb2ba1760411b608482015260a4016109e2565b6001805460ff60a01b191690555b426004556001546040517f31f72b44f546d9e7eaec13f65636997665e15f134a81c82924f568f5c0d07b9391610db991600160a01b90910460ff1690612f11565b60405180910390a1565b600154600090819081906001600160a01b03163314610df45760405162461bcd60e51b81526004016109e290612fc2565b610dff868686611f2c565b91989097509095509350505050565b6001546001600160a01b03163314610e385760405162461bcd60e51b81526004016109e290612fc2565b6001600160a01b0382166000908152600d602052604081206002018054839290610e63908490612f96565b909155505060408051828152600060208201526001600160a01b038416917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b091015b60405180910390a25050565b6000600154600160a01b900460ff166002811115610ed157610ed1612b71565b14610f1e5760405162461bcd60e51b815260206004820152601b60248201527f53686f756c6420626520696e205374616b696e672070686173652e000000000060448201526064016109e2565b600b54600a541015610f725760405162461bcd60e51b815260206004820152601c60248201527f4e6f2064656c61796564207374616b6520746f20657865637574652e0000000060448201526064016109e2565b6000600a54600183600b54610f879190612f96565b610f919190612f83565b11610f9c5781610fb7565b600b54600a54610fac9190612f83565b610fb7906001612f96565b9050600081600b54610fc99190612f96565b600b549091505b81811015611095576000818152600e602052604090819020600180548254918301549351630761c14d60e01b815292936001600160a01b0391821693630761c14d9361103393811692600160a01b9091046001600160601b031691600401613006565b600060405180830381600087803b15801561104d57600080fd5b505af1158015611061573d6000803e3d6000fd5b5050506000838152600e60205260408120818155600180820192909255600201805460ff191690559092019150610fd09050565b50600b555050565b6001546001600160a01b031633146110c75760405162461bcd60e51b81526004016109e290612fc2565b6000828152600c60205260408120906110df83612087565b8254909150156111285760405162461bcd60e51b81526020600482015260146024820152732a3932b29030b63932b0b23c9032bc34b9ba399760611b60448201526064016109e2565b600181116111785760405162461bcd60e51b815260206004820152601b60248201527f4b206d7573742062652067726561746572207468616e206f6e652e000000000060448201526064016109e2565b8155600201805460018101825560009182526020822001555050565b600260006111a06120a3565b8054909150600160401b900460ff16806111c7575080546001600160401b03808416911610155b156111e45760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556112138a8a8a8a8a8a6120c7565b60108490556011839055805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050505050565b60006002600154600160a01b900460ff16600281111561129257611292612b71565b146112ce5760405162461bcd60e51b815260206004820152600c60248201526b2bb937b73390383430b9b29760a11b60448201526064016109e2565b6000848152600c60205260408120600281018054919290916112f2576112f2613030565b906000526020600020015460000361130e57600091505061144d565b60008160020160008154811061132657611326613030565b90600052602060002001546008548686604051602001611359939291909283526020830191909152604082015260600190565b6040516020818303038152906040528051906020012060001c61137c919061305c565b905060005b60028301548354611393908390613070565b61139e906001612f96565b101561142d5760015b83548111611427576000818386600001546113c29190613070565b6113cc9190612f96565b905060008560020182815481106113e5576113e5613030565b9060005260206000200154905080851061140a576114038186612f83565b9450611412565b509150611427565b5050808061141f90613087565b9150506113a7565b50611381565b600081815260048401602052604090205461144790612127565b93505050505b9392505050565b6000546001600160a01b0316331461147e5760405162461bcd60e51b81526004016109e290612f2b565b600780546001600160a01b0319166001600160a01b038416179055600981905560018054600160a01b900460ff1660028111156114bd576114bd612b71565b03611539576007546009546001600160a01b0390911690637363ae1f906114e49043612f96565b6040518263ffffffff1660e01b815260040161150291815260200190565b600060405180830381600087803b15801561151c57600080fd5b505af1158015611530573d6000803e3d6000fd5b50504360055550505b5050565b61154682612152565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806115c457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115b860008051602061317c8339815191525490565b6001600160a01b031614155b156115e25760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561163c575060408051601f3d908101601f1916820190925261163991810190612fa9565b60015b61166457604051630c76093760e01b81526001600160a01b03831660048201526024016109e2565b60008051602061317c833981519152811461169557604051632a87526960e21b8152600481018290526024016109e2565b60008051602061317c8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611760576000836001600160a01b0316836040516116fc91906130a0565b600060405180830381855af49150503d8060008114611737576040519150601f19603f3d011682016040523d82523d6000602084013e61173c565b606091505b505090508061175e576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117b05760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061317c83398151915290565b6001600160a01b0381166000908152600d602090815260409182902080548351818402810184019094528084526060939283018282801561185557602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116118125790505b50505050509050919050565b6001546001600160a01b0316331461188b5760405162461bcd60e51b81526004016109e290612fc2565b6006805490600061189b836130bc565b91905055505050565b60006118af82611b70565b9050600081116119015760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656c696769626c6520666f72207769746864726177616c2e0000000060448201526064016109e2565b6001600160a01b038281166000818152600d6020526040808220600190810192909255905490516342c37fa360e01b8152600481019290925260248201849052909116906342c37fa390604401600060405180830381600087803b15801561196857600080fd5b505af115801561197c573d6000803e3d6000fd5b50505050816001600160a01b03167f71bb1b604559acc3db697ccf2aa4228d727cd5b133d6ffa419518d51c117c95c82604051610ea591815260200190565b6000828152600c60209081526040808320848452600381019092528220548083036119eb57600092505050611a10565b816002018181548110611a0057611a00613030565b9060005260206000200154925050505b92915050565b6000546001600160a01b03163314611a405760405162461bcd60e51b81526004016109e290612f2b565b600255565b6000546001600160a01b03163314611a6f5760405162461bcd60e51b81526004016109e290612f2b565b601155565b6001546001600160a01b03163314611a9e5760405162461bcd60e51b81526004016109e290612fc2565b6001600160a01b0382166000908152600d6020526040812060028101805491928492611acb908490612f83565b909155505060408051838152600160208201526001600160a01b038516917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b0910160405180910390a26000611b1f84611b70565b9050801561175e57836001600160a01b03167f819a3744490c627e221b71743857691f9c23bf56a1ecc5351f886cfd4c3187d982604051611b6291815260200190565b60405180910390a250505050565b6001600160a01b0381166000908152600d602052604081208054158015611b9957506002810154155b15611ba8576001015492915050565b50600092915050565b600080611bbe848461217c565b9050611bd36001600160601b038416826119bb565b949350505050565b6001546001600160a01b03163314611c055760405162461bcd60e51b81526004016109e290612fc2565b611c1285858585856121c4565b5050505050565b6001546001600160a01b03163314611c435760405162461bcd60e51b81526004016109e290612fc2565b6000611c4e826117c3565b80519091505b801561176057600180546001600160a01b031690630761c14d9085908590611c7c9086612f83565b81518110611c8c57611c8c613030565b602002602001015160006040518463ffffffff1660e01b8152600401611cb493929190613006565b600060405180830381600087803b158015611cce57600080fd5b505af1158015611ce2573d6000803e3d6000fd5b505050508080611cf1906130bc565b915050611c54565b60046000611d056120a3565b8054909150600160401b900460ff1680611d2c575080546001600160401b03808416911610155b15611d495760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6001546001600160a01b03163314611dd45760405162461bcd60e51b81526004016109e290612fc2565b6006805490600061189b83613087565b6001600160a01b0382166000908152600d6020526040812060018101546002820154909290918190611e168787611bb1565b9054949793965094505050565b6000546001600160a01b03163314611e4d5760405162461bcd60e51b81526004016109e290612f2b565b600355565b6000546001600160a01b03163314611e7c5760405162461bcd60e51b81526004016109e290612f2b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460009081906001600160a01b03163314611ecd5760405162461bcd60e51b81526004016109e290612fc2565b6001600160a01b0384166000908152600d602052604090206001810154848110611f135784925084826001016000828254611f089190612f83565b90915550611f1e9050565b600060018301559150815b506001015491509250929050565b600154600090819081906001600160a01b03163314611f5d5760405162461bcd60e51b81526004016109e290612fc2565b6000611f698787611bb1565b9050808511600081611f8457611f7f8784612f83565b611f8e565b611f8e8388612f83565b6001600160a01b038a166000908152600d60205260409020909150821561200757601054828260010154611fc29190612f96565b1115611fdc5760008060079650965096505050505061207e565b60115482601254611fed9190612f96565b11156120075760008060089650965096505050505061207e565b6000600154600160a01b900460ff16600281111561202757612027612b71565b0361206757821561204f5781601260008282546120449190612f96565b909155506120679050565b81601260008282546120619190612f83565b90915550505b6120728a8a8a6124fa565b91985096509450505050505b93509350939050565b6000602082511061209a57506020015190565b5060065b919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6120cf61269c565b600080546001600160a01b03199081166001600160a01b039889161790915560018054821696881696909617865560029490945560039290925542600455600780549093169416939093179055600991909155600b55565b600060405160005b601481101561214a5783811a81600c8401015360010161212f565b505192915050565b6000546001600160a01b031633146103dc5760405162461bcd60e51b81526004016109e290612f2b565b600060405160005b601481101561219f578481600c011a81830153600101612184565b5060145b60208110156121bb5783811a818301536001016121a3565b50519392505050565b6001600160a01b0385166000908152600d6020526040902083156122535760006121ee8787611bb1565b905080600003612233578154600180820184556000848152602090206002830401805491909216600c026101000a6001600160601b0381810219909216918916021790555b848260010160008282546122479190612f96565b909155506123ca915050565b828160010160008282546122679190612f83565b909155505060008290036123ca5780545b80156123c8576001600160601b03861682612294600184612f83565b815481106122a4576122a4613030565b600091825260209091206002820401546001909116600c026101000a90046001600160601b0316036123b657815482906122e090600190612f83565b815481106122f0576122f0613030565b600091825260209091206002820401546001918216600c026101000a90046001600160601b03169083906123249084612f83565b8154811061233457612334613030565b9060005260206000209060029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b0316021790555081600001805480612380576123806130d3565b60008281526020902060026000199092019182040180546001600160601b03600c60018516026101000a021916905590556123c8565b806123c0816130bc565b915050612278565b505b60006123d6878761217c565b90506000865b81612494576123f56001600160601b03821686856126c3565b6000196001600160601b0382160161241057600191506123dc565b600154604051630fad06e960e11b81526001600160601b03831660048201526001600160a01b0390911690631f5a0dd29060240160e060405180830381865afa158015612461573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248591906130f9565b509495506123dc945050505050565b6001840154604080516001600160601b038b16815260208101889052908101919091526001600160a01b038a16907f70ca4ec64687bf265f39041896f3dbf10b9f650503cb38f2b3569fdce7489c369060600160405180910390a2505050505050505050565b6001600160a01b0383166000908152600d6020526040812081908190816125218888611bb1565b825490915081158015612535575060048110155b1561254d57600080600495509550955050505061207e565b81158015612559575086155b1561257157600080600995509550955050505061207e565b6000600154600160a01b900460ff16600281111561259157612591612b71565b1461262c576000600e6000600a600081546125ab90613087565b9182905550815260208082019290925260409081016000206001600160601b038c16600160a01b81026001600160a01b038f169081178355600183018d905592518c8152919450927fa59837f9df3fb816613d84e8fefe31ec8d6e67ff43df6533e3f793a3f53aade9910160405180910390a3506001935061207e92505050565b8187106126445761263d8288612f83565b955061268c565b61264e8783612f83565b94506000836002015484600101541161266857600061267c565b8360020154846001015461267c9190612f83565b90508086111561268a578095505b505b5060009250505093509350939050565b6126a4612a16565b6126c157604051631afcd79f60e31b815260040160405180910390fd5b565b6000838152600c6020908152604080832084845260038101909252822054909181900361289057831561288b5760018201546000036127de57506002810180546001808201835560009283526020909220810185905590811480159061273d57508154612731600183612f83565b61273b919061305c565b155b156127d95781546000906127519083613167565b6000818152600485016020526040812054919250612770846001612f96565b90508460020185600201848154811061278b5761278b613030565b60009182526020808320909101548354600181018555938352818320909301929092559384526004860180825260408086208690558486526003880183528086208490559285529052909120555b612859565b6001808301805490916127f091612f83565b8154811061280057612800613030565b9060005260206000200154905081600101805480612820576128206130d3565b600190038181906000526020600020016000905590558382600201828154811061284c5761284c613030565b6000918252602090912001555b6000838152600383016020908152604080832084905583835260048501909152902083905561288b8582600187612a30565b611c12565b8360000361292e5760008260020182815481106128af576128af613030565b9060005260206000200154905060008360020183815481106128d3576128d3613030565b6000918252602080832090910192909255600180860180549182018155825282822001849055858152600385018252604080822082905584825260048601909252908120819055612928908790849084612a30565b50611c12565b81600201818154811061294357612943613030565b90600052602060002001548414611c125760008483600201838154811061296c5761296c613030565b9060005260206000200154111590506000816129b2578584600201848154811061299857612998613030565b90600052602060002001546129ad9190612f83565b6129dd565b8360020183815481106129c7576129c7613030565b9060005260206000200154866129dd9190612f83565b9050858460020184815481106129f5576129f5613030565b600091825260209091200155612a0d87848484612a30565b50505050505050565b6000612a206120a3565b54600160401b900460ff16919050565b6000848152600c60205260409020835b8015612ae5578154612a53600183612f83565b612a5d9190613167565b905083612a945782826002018281548110612a7a57612a7a613030565b9060005260206000200154612a8f9190612f83565b612abf565b82826002018281548110612aaa57612aaa613030565b9060005260206000200154612abf9190612f96565b826002018281548110612ad457612ad4613030565b600091825260209091200155612a40565b505050505050565b600060208284031215612aff57600080fd5b5035919050565b6001600160a01b03811681146103dc57600080fd5b6001600160601b03811681146103dc57600080fd5b600080600060608486031215612b4557600080fd5b8335612b5081612b06565b92506020840135612b6081612b1b565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b8381526020810183905260608101600a8310612ba557612ba5612b71565b826040830152949350505050565b60008060408385031215612bc657600080fd5b8235612bd181612b06565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612c0657600080fd5b81356001600160401b03811115612c1f57612c1f612bdf565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612c4d57612c4d612bdf565b604052818152838201602001851015612c6557600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612c9557600080fd5b8235915060208301356001600160401b03811115612cb257600080fd5b612cbe85828601612bf5565b9150509250929050565b600080600080600080600080610100898b031215612ce557600080fd5b8835612cf081612b06565b97506020890135612d0081612b06565b965060408901359550606089013594506080890135612d1e81612b06565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600080600060608486031215612d5557600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612d7f57600080fd5b8235612d8a81612b06565b915060208301356001600160401b03811115612cb257600080fd5b600060208284031215612db757600080fd5b813561144d81612b06565b602080825282518282018190526000918401906040840190835b81811015612e035783516001600160601b0316835260209384019390920191600101612ddc565b509095945050505050565b60005b83811015612e29578181015183820152602001612e11565b50506000910152565b6020815260008251806020840152612e51816040850160208701612e0e565b601f01601f19169190910160400192915050565b60008060408385031215612e7857600080fd5b50508035926020909101359150565b60008060408385031215612e9a57600080fd5b8235612ea581612b06565b91506020830135612eb581612b1b565b809150509250929050565b600080600080600060a08688031215612ed857600080fd5b8535612ee381612b06565b94506020860135612ef381612b1b565b94979496505050506040830135926060810135926080909101359150565b6020810160038310612f2557612f25612b71565b91905290565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a1057611a10612f6d565b80820180821115611a1057611a10612f6d565b600060208284031215612fbb57600080fd5b5051919050565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b6001600160a01b039390931683526001600160601b03919091166020830152604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60008261306b5761306b613046565b500690565b8082028115828204841417611a1057611a10612f6d565b60006001820161309957613099612f6d565b5060010190565b600082516130b2818460208701612e0e565b9190910192915050565b6000816130cb576130cb612f6d565b506000190190565b634e487b7160e01b600052603160045260246000fd5b8051801515811461209e57600080fd5b600080600080600080600060e0888a03121561311457600080fd5b875161311f81612b1b565b965061312d602089016130e9565b604089015160608a015160808b015160a08c015193995091975095509350915061315960c089016130e9565b905092959891949750929550565b60008261317657613176613046565b50049056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212209a929288a5ac23f35bff73c627572e378facda5250ad7cff62928f3d529469e064736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102a95760003560e01c80637dc38f1411610165578063c1572618116100cc578063dca5f6b011610085578063dca5f6b014610826578063dd5e5cb514610872578063e4c0aaf414610892578063e534710d146108b2578063f216de4c146108ea578063f2f4eb261461090a578063f6b4d82d1461092a57600080fd5b8063c157261814610765578063caeb50ed1461077b578063ccbac9f514610790578063d09f392d146107a6578063d1c1df48146107c6578063d605787b1461080657600080fd5b8063a2473cc11161011e578063a2473cc1146106ab578063aac03ad2146106cb578063b1c9fe6e146106eb578063b5d69e9914610719578063b888adfa14610739578063c057eca71461074f57600080fd5b80637dc38f14146105ff578063817b1cd214610615578063823cfd701461062b5780638d3771bb1461064b578063965af6c71461066b5780639fbb56f11461068b57600080fd5b8063498c752c1161021457806354fd4d50116101cd57806354fd4d50146104ea57806356acb050146105285780635a68c1541461053e5780635d2d7846146105545780636624192f1461057457806369f45877146105bf57806376fa9fc5146105df57600080fd5b8063498c752c146104355780634c70a0d6146104555780634dbbebbc146104755780634f1ef2861461049557806352d1902d146104a8578063543f8a36146104bd57600080fd5b80631ecacab8116102665780631ecacab81461037257806321e1625e146103a157806321ea9b3f146103c157806323f61de4146103df57806335975f4a146103f5578063477a655c1461041557600080fd5b806303432744146102ae57806306dfc967146102d75780630b274f2e146102f95780630c340a241461030e5780630e083ec9146103465780631b92bbbe1461035c575b600080fd5b3480156102ba57600080fd5b506102c460065481565b6040519081526020015b60405180910390f35b3480156102e357600080fd5b506102f76102f2366004612aed565b6109b8565b005b34801561030557600080fd5b506102f76109f0565b34801561031a57600080fd5b5060005461032e906001600160a01b031681565b6040516001600160a01b0390911681526020016102ce565b34801561035257600080fd5b506102c4600a5481565b34801561036857600080fd5b506102c460035481565b34801561037e57600080fd5b5061039261038d366004612b30565b610dc3565b6040516102ce93929190612b87565b3480156103ad57600080fd5b506102f76103bc366004612bb3565b610e0e565b3480156103cd57600080fd5b506102f76103dc366004612aed565b50565b3480156103eb57600080fd5b506102c460105481565b34801561040157600080fd5b506102f7610410366004612aed565b610eb1565b34801561042157600080fd5b506102f7610430366004612c82565b61109d565b34801561044157600080fd5b506102f7610450366004612cc8565b611194565b34801561046157600080fd5b5061032e610470366004612d40565b611270565b34801561048157600080fd5b506102f7610490366004612bb3565b611454565b6102f76104a3366004612d6c565b61153d565b3480156104b457600080fd5b506102c4611765565b3480156104c957600080fd5b506104dd6104d8366004612da5565b6117c3565b6040516102ce9190612dc2565b3480156104f657600080fd5b5061051b604051806040016040528060058152602001640302e392e360dc1b81525081565b6040516102ce9190612e32565b34801561053457600080fd5b506102c4600b5481565b34801561054a57600080fd5b506102c460115481565b34801561056057600080fd5b506102f761056f366004612e65565b611861565b34801561058057600080fd5b506105af61058f366004612da5565b6001600160a01b03166000908152600d6020526040902060010154151590565b60405190151581526020016102ce565b3480156105cb57600080fd5b506102f76105da366004612da5565b6118a4565b3480156105eb57600080fd5b506102c46105fa366004612e65565b6119bb565b34801561060b57600080fd5b506102c460095481565b34801561062157600080fd5b506102c460125481565b34801561063757600080fd5b506102f7610646366004612aed565b611a16565b34801561065757600080fd5b506102f7610666366004612aed565b611a45565b34801561067757600080fd5b506102f7610686366004612bb3565b611a74565b34801561069757600080fd5b506102c46106a6366004612da5565b611b70565b3480156106b757600080fd5b506102c46106c6366004612e87565b611bb1565b3480156106d757600080fd5b506102f76106e6366004612ec0565b611bdb565b3480156106f757600080fd5b5060015461070c90600160a01b900460ff1681565b6040516102ce9190612f11565b34801561072557600080fd5b506102f7610734366004612da5565b611c19565b34801561074557600080fd5b506102c460045481565b34801561075b57600080fd5b506102c460025481565b34801561077157600080fd5b506102c460055481565b34801561078757600080fd5b506102f7611cf9565b34801561079c57600080fd5b506102c460085481565b3480156107b257600080fd5b506102f76107c1366004612e65565b611daa565b3480156107d257600080fd5b506107e66107e1366004612e87565b611de4565b6040805194855260208501939093529183015260608201526080016102ce565b34801561081257600080fd5b5060075461032e906001600160a01b031681565b34801561083257600080fd5b5061085d610841366004612da5565b600d602052600090815260409020600181015460029091015482565b604080519283526020830191909152016102ce565b34801561087e57600080fd5b506102f761088d366004612aed565b611e23565b34801561089e57600080fd5b506102f76108ad366004612da5565b611e52565b3480156108be57600080fd5b506102c46108cd366004612e87565b600f60209081526000928352604080842090915290825290205481565b3480156108f657600080fd5b5061085d610905366004612bb3565b611e9e565b34801561091657600080fd5b5060015461032e906001600160a01b031681565b34801561093657600080fd5b50610984610945366004612aed565b600e602052600090815260409020805460018201546002909201546001600160a01b03821692600160a01b9092046001600160601b0316919060ff1684565b604080516001600160a01b0390951685526001600160601b03909316602085015291830152151560608201526080016102ce565b6000546001600160a01b031633146109eb5760405162461bcd60e51b81526004016109e290612f2b565b60405180910390fd5b601055565b6000600154600160a01b900460ff166002811115610a1057610a10612b71565b03610b7e57600254600454610a259042612f83565b1015610a885760405162461bcd60e51b815260206004820152602c60248201527f546865206d696e696d756d207374616b696e672074696d6520686173206e6f7460448201526b103830b9b9b2b2103cb2ba1760a11b60648201526084016109e2565b600060065411610aea5760405162461bcd60e51b815260206004820152602760248201527f546865726520617265206e6f2064697370757465732074686174206e65656420604482015266353ab937b9399760c91b60648201526084016109e2565b6007546009546001600160a01b0390911690637363ae1f90610b0c9043612f96565b6040518263ffffffff1660e01b8152600401610b2a91815260200190565b600060405180830381600087803b158015610b4457600080fd5b505af1158015610b58573d6000803e3d6000fd5b505043600555505060018054819060ff60a01b1916600160a01b825b0217905550610d78565b60018054600160a01b900460ff166002811115610b9d57610b9d612b71565b03610c95576007546009546005546001600160a01b03909216916313cf905491610bc691612f96565b6040518263ffffffff1660e01b8152600401610be491815260200190565b6020604051808303816000875af1158015610c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c279190612fa9565b6008819055600003610c7b5760405162461bcd60e51b815260206004820152601e60248201527f52616e646f6d206e756d626572206973206e6f7420726561647920796574000060448201526064016109e2565b600180546002919060ff60a01b1916600160a01b83610b74565b6002600154600160a01b900460ff166002811115610cb557610cb5612b71565b03610d78576006541580610cd75750600354600454610cd49042612f83565b10155b610d6a5760405162461bcd60e51b815260206004820152605860248201527f546865726520617265207374696c6c20646973707574657320776974686f757460448201527f206a75726f727320616e6420746865206d6178696d756d2064726177696e67206064820152773a34b6b2903430b9903737ba103830b9b9b2b2103cb2ba1760411b608482015260a4016109e2565b6001805460ff60a01b191690555b426004556001546040517f31f72b44f546d9e7eaec13f65636997665e15f134a81c82924f568f5c0d07b9391610db991600160a01b90910460ff1690612f11565b60405180910390a1565b600154600090819081906001600160a01b03163314610df45760405162461bcd60e51b81526004016109e290612fc2565b610dff868686611f2c565b91989097509095509350505050565b6001546001600160a01b03163314610e385760405162461bcd60e51b81526004016109e290612fc2565b6001600160a01b0382166000908152600d602052604081206002018054839290610e63908490612f96565b909155505060408051828152600060208201526001600160a01b038416917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b091015b60405180910390a25050565b6000600154600160a01b900460ff166002811115610ed157610ed1612b71565b14610f1e5760405162461bcd60e51b815260206004820152601b60248201527f53686f756c6420626520696e205374616b696e672070686173652e000000000060448201526064016109e2565b600b54600a541015610f725760405162461bcd60e51b815260206004820152601c60248201527f4e6f2064656c61796564207374616b6520746f20657865637574652e0000000060448201526064016109e2565b6000600a54600183600b54610f879190612f96565b610f919190612f83565b11610f9c5781610fb7565b600b54600a54610fac9190612f83565b610fb7906001612f96565b9050600081600b54610fc99190612f96565b600b549091505b81811015611095576000818152600e602052604090819020600180548254918301549351630761c14d60e01b815292936001600160a01b0391821693630761c14d9361103393811692600160a01b9091046001600160601b031691600401613006565b600060405180830381600087803b15801561104d57600080fd5b505af1158015611061573d6000803e3d6000fd5b5050506000838152600e60205260408120818155600180820192909255600201805460ff191690559092019150610fd09050565b50600b555050565b6001546001600160a01b031633146110c75760405162461bcd60e51b81526004016109e290612fc2565b6000828152600c60205260408120906110df83612087565b8254909150156111285760405162461bcd60e51b81526020600482015260146024820152732a3932b29030b63932b0b23c9032bc34b9ba399760611b60448201526064016109e2565b600181116111785760405162461bcd60e51b815260206004820152601b60248201527f4b206d7573742062652067726561746572207468616e206f6e652e000000000060448201526064016109e2565b8155600201805460018101825560009182526020822001555050565b600260006111a06120a3565b8054909150600160401b900460ff16806111c7575080546001600160401b03808416911610155b156111e45760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556112138a8a8a8a8a8a6120c7565b60108490556011839055805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050505050565b60006002600154600160a01b900460ff16600281111561129257611292612b71565b146112ce5760405162461bcd60e51b815260206004820152600c60248201526b2bb937b73390383430b9b29760a11b60448201526064016109e2565b6000848152600c60205260408120600281018054919290916112f2576112f2613030565b906000526020600020015460000361130e57600091505061144d565b60008160020160008154811061132657611326613030565b90600052602060002001546008548686604051602001611359939291909283526020830191909152604082015260600190565b6040516020818303038152906040528051906020012060001c61137c919061305c565b905060005b60028301548354611393908390613070565b61139e906001612f96565b101561142d5760015b83548111611427576000818386600001546113c29190613070565b6113cc9190612f96565b905060008560020182815481106113e5576113e5613030565b9060005260206000200154905080851061140a576114038186612f83565b9450611412565b509150611427565b5050808061141f90613087565b9150506113a7565b50611381565b600081815260048401602052604090205461144790612127565b93505050505b9392505050565b6000546001600160a01b0316331461147e5760405162461bcd60e51b81526004016109e290612f2b565b600780546001600160a01b0319166001600160a01b038416179055600981905560018054600160a01b900460ff1660028111156114bd576114bd612b71565b03611539576007546009546001600160a01b0390911690637363ae1f906114e49043612f96565b6040518263ffffffff1660e01b815260040161150291815260200190565b600060405180830381600087803b15801561151c57600080fd5b505af1158015611530573d6000803e3d6000fd5b50504360055550505b5050565b61154682612152565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806115c457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115b860008051602061317c8339815191525490565b6001600160a01b031614155b156115e25760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561163c575060408051601f3d908101601f1916820190925261163991810190612fa9565b60015b61166457604051630c76093760e01b81526001600160a01b03831660048201526024016109e2565b60008051602061317c833981519152811461169557604051632a87526960e21b8152600481018290526024016109e2565b60008051602061317c8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611760576000836001600160a01b0316836040516116fc91906130a0565b600060405180830381855af49150503d8060008114611737576040519150601f19603f3d011682016040523d82523d6000602084013e61173c565b606091505b505090508061175e576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117b05760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061317c83398151915290565b6001600160a01b0381166000908152600d602090815260409182902080548351818402810184019094528084526060939283018282801561185557602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116118125790505b50505050509050919050565b6001546001600160a01b0316331461188b5760405162461bcd60e51b81526004016109e290612fc2565b6006805490600061189b836130bc565b91905055505050565b60006118af82611b70565b9050600081116119015760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656c696769626c6520666f72207769746864726177616c2e0000000060448201526064016109e2565b6001600160a01b038281166000818152600d6020526040808220600190810192909255905490516342c37fa360e01b8152600481019290925260248201849052909116906342c37fa390604401600060405180830381600087803b15801561196857600080fd5b505af115801561197c573d6000803e3d6000fd5b50505050816001600160a01b03167f71bb1b604559acc3db697ccf2aa4228d727cd5b133d6ffa419518d51c117c95c82604051610ea591815260200190565b6000828152600c60209081526040808320848452600381019092528220548083036119eb57600092505050611a10565b816002018181548110611a0057611a00613030565b9060005260206000200154925050505b92915050565b6000546001600160a01b03163314611a405760405162461bcd60e51b81526004016109e290612f2b565b600255565b6000546001600160a01b03163314611a6f5760405162461bcd60e51b81526004016109e290612f2b565b601155565b6001546001600160a01b03163314611a9e5760405162461bcd60e51b81526004016109e290612fc2565b6001600160a01b0382166000908152600d6020526040812060028101805491928492611acb908490612f83565b909155505060408051838152600160208201526001600160a01b038516917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b0910160405180910390a26000611b1f84611b70565b9050801561175e57836001600160a01b03167f819a3744490c627e221b71743857691f9c23bf56a1ecc5351f886cfd4c3187d982604051611b6291815260200190565b60405180910390a250505050565b6001600160a01b0381166000908152600d602052604081208054158015611b9957506002810154155b15611ba8576001015492915050565b50600092915050565b600080611bbe848461217c565b9050611bd36001600160601b038416826119bb565b949350505050565b6001546001600160a01b03163314611c055760405162461bcd60e51b81526004016109e290612fc2565b611c1285858585856121c4565b5050505050565b6001546001600160a01b03163314611c435760405162461bcd60e51b81526004016109e290612fc2565b6000611c4e826117c3565b80519091505b801561176057600180546001600160a01b031690630761c14d9085908590611c7c9086612f83565b81518110611c8c57611c8c613030565b602002602001015160006040518463ffffffff1660e01b8152600401611cb493929190613006565b600060405180830381600087803b158015611cce57600080fd5b505af1158015611ce2573d6000803e3d6000fd5b505050508080611cf1906130bc565b915050611c54565b60046000611d056120a3565b8054909150600160401b900460ff1680611d2c575080546001600160401b03808416911610155b15611d495760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6001546001600160a01b03163314611dd45760405162461bcd60e51b81526004016109e290612fc2565b6006805490600061189b83613087565b6001600160a01b0382166000908152600d6020526040812060018101546002820154909290918190611e168787611bb1565b9054949793965094505050565b6000546001600160a01b03163314611e4d5760405162461bcd60e51b81526004016109e290612f2b565b600355565b6000546001600160a01b03163314611e7c5760405162461bcd60e51b81526004016109e290612f2b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460009081906001600160a01b03163314611ecd5760405162461bcd60e51b81526004016109e290612fc2565b6001600160a01b0384166000908152600d602052604090206001810154848110611f135784925084826001016000828254611f089190612f83565b90915550611f1e9050565b600060018301559150815b506001015491509250929050565b600154600090819081906001600160a01b03163314611f5d5760405162461bcd60e51b81526004016109e290612fc2565b6000611f698787611bb1565b9050808511600081611f8457611f7f8784612f83565b611f8e565b611f8e8388612f83565b6001600160a01b038a166000908152600d60205260409020909150821561200757601054828260010154611fc29190612f96565b1115611fdc5760008060079650965096505050505061207e565b60115482601254611fed9190612f96565b11156120075760008060089650965096505050505061207e565b6000600154600160a01b900460ff16600281111561202757612027612b71565b0361206757821561204f5781601260008282546120449190612f96565b909155506120679050565b81601260008282546120619190612f83565b90915550505b6120728a8a8a6124fa565b91985096509450505050505b93509350939050565b6000602082511061209a57506020015190565b5060065b919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6120cf61269c565b600080546001600160a01b03199081166001600160a01b039889161790915560018054821696881696909617865560029490945560039290925542600455600780549093169416939093179055600991909155600b55565b600060405160005b601481101561214a5783811a81600c8401015360010161212f565b505192915050565b6000546001600160a01b031633146103dc5760405162461bcd60e51b81526004016109e290612f2b565b600060405160005b601481101561219f578481600c011a81830153600101612184565b5060145b60208110156121bb5783811a818301536001016121a3565b50519392505050565b6001600160a01b0385166000908152600d6020526040902083156122535760006121ee8787611bb1565b905080600003612233578154600180820184556000848152602090206002830401805491909216600c026101000a6001600160601b0381810219909216918916021790555b848260010160008282546122479190612f96565b909155506123ca915050565b828160010160008282546122679190612f83565b909155505060008290036123ca5780545b80156123c8576001600160601b03861682612294600184612f83565b815481106122a4576122a4613030565b600091825260209091206002820401546001909116600c026101000a90046001600160601b0316036123b657815482906122e090600190612f83565b815481106122f0576122f0613030565b600091825260209091206002820401546001918216600c026101000a90046001600160601b03169083906123249084612f83565b8154811061233457612334613030565b9060005260206000209060029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b0316021790555081600001805480612380576123806130d3565b60008281526020902060026000199092019182040180546001600160601b03600c60018516026101000a021916905590556123c8565b806123c0816130bc565b915050612278565b505b60006123d6878761217c565b90506000865b81612494576123f56001600160601b03821686856126c3565b6000196001600160601b0382160161241057600191506123dc565b600154604051630fad06e960e11b81526001600160601b03831660048201526001600160a01b0390911690631f5a0dd29060240160e060405180830381865afa158015612461573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248591906130f9565b509495506123dc945050505050565b6001840154604080516001600160601b038b16815260208101889052908101919091526001600160a01b038a16907f70ca4ec64687bf265f39041896f3dbf10b9f650503cb38f2b3569fdce7489c369060600160405180910390a2505050505050505050565b6001600160a01b0383166000908152600d6020526040812081908190816125218888611bb1565b825490915081158015612535575060048110155b1561254d57600080600495509550955050505061207e565b81158015612559575086155b1561257157600080600995509550955050505061207e565b6000600154600160a01b900460ff16600281111561259157612591612b71565b1461262c576000600e6000600a600081546125ab90613087565b9182905550815260208082019290925260409081016000206001600160601b038c16600160a01b81026001600160a01b038f169081178355600183018d905592518c8152919450927fa59837f9df3fb816613d84e8fefe31ec8d6e67ff43df6533e3f793a3f53aade9910160405180910390a3506001935061207e92505050565b8187106126445761263d8288612f83565b955061268c565b61264e8783612f83565b94506000836002015484600101541161266857600061267c565b8360020154846001015461267c9190612f83565b90508086111561268a578095505b505b5060009250505093509350939050565b6126a4612a16565b6126c157604051631afcd79f60e31b815260040160405180910390fd5b565b6000838152600c6020908152604080832084845260038101909252822054909181900361289057831561288b5760018201546000036127de57506002810180546001808201835560009283526020909220810185905590811480159061273d57508154612731600183612f83565b61273b919061305c565b155b156127d95781546000906127519083613167565b6000818152600485016020526040812054919250612770846001612f96565b90508460020185600201848154811061278b5761278b613030565b60009182526020808320909101548354600181018555938352818320909301929092559384526004860180825260408086208690558486526003880183528086208490559285529052909120555b612859565b6001808301805490916127f091612f83565b8154811061280057612800613030565b9060005260206000200154905081600101805480612820576128206130d3565b600190038181906000526020600020016000905590558382600201828154811061284c5761284c613030565b6000918252602090912001555b6000838152600383016020908152604080832084905583835260048501909152902083905561288b8582600187612a30565b611c12565b8360000361292e5760008260020182815481106128af576128af613030565b9060005260206000200154905060008360020183815481106128d3576128d3613030565b6000918252602080832090910192909255600180860180549182018155825282822001849055858152600385018252604080822082905584825260048601909252908120819055612928908790849084612a30565b50611c12565b81600201818154811061294357612943613030565b90600052602060002001548414611c125760008483600201838154811061296c5761296c613030565b9060005260206000200154111590506000816129b2578584600201848154811061299857612998613030565b90600052602060002001546129ad9190612f83565b6129dd565b8360020183815481106129c7576129c7613030565b9060005260206000200154866129dd9190612f83565b9050858460020184815481106129f5576129f5613030565b600091825260209091200155612a0d87848484612a30565b50505050505050565b6000612a206120a3565b54600160401b900460ff16919050565b6000848152600c60205260409020835b8015612ae5578154612a53600183612f83565b612a5d9190613167565b905083612a945782826002018281548110612a7a57612a7a613030565b9060005260206000200154612a8f9190612f83565b612abf565b82826002018281548110612aaa57612aaa613030565b9060005260206000200154612abf9190612f96565b826002018281548110612ad457612ad4613030565b600091825260209091200155612a40565b505050505050565b600060208284031215612aff57600080fd5b5035919050565b6001600160a01b03811681146103dc57600080fd5b6001600160601b03811681146103dc57600080fd5b600080600060608486031215612b4557600080fd5b8335612b5081612b06565b92506020840135612b6081612b1b565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b8381526020810183905260608101600a8310612ba557612ba5612b71565b826040830152949350505050565b60008060408385031215612bc657600080fd5b8235612bd181612b06565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612c0657600080fd5b81356001600160401b03811115612c1f57612c1f612bdf565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612c4d57612c4d612bdf565b604052818152838201602001851015612c6557600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612c9557600080fd5b8235915060208301356001600160401b03811115612cb257600080fd5b612cbe85828601612bf5565b9150509250929050565b600080600080600080600080610100898b031215612ce557600080fd5b8835612cf081612b06565b97506020890135612d0081612b06565b965060408901359550606089013594506080890135612d1e81612b06565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600080600060608486031215612d5557600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612d7f57600080fd5b8235612d8a81612b06565b915060208301356001600160401b03811115612cb257600080fd5b600060208284031215612db757600080fd5b813561144d81612b06565b602080825282518282018190526000918401906040840190835b81811015612e035783516001600160601b0316835260209384019390920191600101612ddc565b509095945050505050565b60005b83811015612e29578181015183820152602001612e11565b50506000910152565b6020815260008251806020840152612e51816040850160208701612e0e565b601f01601f19169190910160400192915050565b60008060408385031215612e7857600080fd5b50508035926020909101359150565b60008060408385031215612e9a57600080fd5b8235612ea581612b06565b91506020830135612eb581612b1b565b809150509250929050565b600080600080600060a08688031215612ed857600080fd5b8535612ee381612b06565b94506020860135612ef381612b1b565b94979496505050506040830135926060810135926080909101359150565b6020810160038310612f2557612f25612b71565b91905290565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a1057611a10612f6d565b80820180821115611a1057611a10612f6d565b600060208284031215612fbb57600080fd5b5051919050565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b6001600160a01b039390931683526001600160601b03919091166020830152604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60008261306b5761306b613046565b500690565b8082028115828204841417611a1057611a10612f6d565b60006001820161309957613099612f6d565b5060010190565b600082516130b2818460208701612e0e565b9190910192915050565b6000816130cb576130cb612f6d565b506000190190565b634e487b7160e01b600052603160045260246000fd5b8051801515811461209e57600080fd5b600080600080600080600060e0888a03121561311457600080fd5b875161311f81612b1b565b965061312d602089016130e9565b604089015160608a015160808b015160a08c015193995091975095509350915061315960c089016130e9565b905092959891949750929550565b60008261317657613176613046565b50049056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212209a929288a5ac23f35bff73c627572e378facda5250ad7cff62928f3d529469e064736f6c634300081c0033", - "devdoc": { - "details": "A factory of trees that keeps track of staked values for sortition.", - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "LeftoverPNK(address,uint256)": { - "details": "Emitted when leftover PNK is available.", - "params": { - "_account": "The account of the juror.", - "_amount": "The amount of PNK available." - } - }, - "LeftoverPNKWithdrawn(address,uint256)": { - "details": "Emitted when leftover PNK is withdrawn.", - "params": { - "_account": "The account of the juror withdrawing PNK.", - "_amount": "The amount of PNK withdrawn." - } - }, - "StakeDelayed(address,uint96,uint256)": { - "params": { - "_address": "The address of the juror.", - "_amount": "The amount of tokens staked in the court.", - "_courtID": "The ID of the court." - } - }, - "StakeLocked(address,uint256,bool)": { - "params": { - "_address": "The address of the juror.", - "_relativeAmount": "The amount of tokens locked.", - "_unlock": "Whether the stake is locked or unlocked." - } - }, - "StakeSet(address,uint256,uint256,uint256)": { - "params": { - "_address": "The address of the juror.", - "_amount": "The amount of tokens staked in the court.", - "_amountAllCourts": "The amount of tokens staked in all courts.", - "_courtID": "The ID of the court." - } - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor of the contract.", - "params": { - "_governor": "The new governor." - } - }, - "changeMaxDrawingTime(uint256)": { - "details": "Changes the `maxDrawingTime` storage variable.", - "params": { - "_maxDrawingTime": "The new value for the `maxDrawingTime` storage variable." - } - }, - "changeMinStakingTime(uint256)": { - "details": "Changes the `minStakingTime` storage variable.", - "params": { - "_minStakingTime": "The new value for the `minStakingTime` storage variable." - } - }, - "changeRandomNumberGenerator(address,uint256)": { - "details": "Changes the `_rng` and `_rngLookahead` storage variables.", - "params": { - "_rng": "The new value for the `RNGenerator` storage variable.", - "_rngLookahead": "The new value for the `rngLookahead` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createTree(bytes32,bytes)": { - "details": "Create a sortition sum tree at the specified key.", - "params": { - "_extraData": "Extra data that contains the number of children each node in the tree should have.", - "_key": "The key of the new tree." - } - }, - "draw(bytes32,uint256,uint256)": { - "details": "Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0.", - "params": { - "_coreDisputeID": "Index of the dispute in Kleros Core.", - "_key": "The key of the tree.", - "_nonce": "Nonce to hash with random number." - }, - "returns": { - "drawnAddress": "The drawn address. `O(k * log_k(n))` where `k` is the maximum number of children per node in the tree, and `n` is the maximum number of nodes ever appended." - } - }, - "executeDelayedStakes(uint256)": { - "details": "Executes the next delayed stakes.", - "params": { - "_iterations": "The number of delayed stakes to execute." - } - }, - "getJurorCourtIDs(address)": { - "details": "Gets the court identifiers where a specific `_juror` has staked.", - "params": { - "_juror": "The address of the juror." - } - }, - "initialize(address,address,uint256,uint256,address,uint256,uint256,uint256)": { - "details": "Initializer (constructor equivalent for upgradable contracts).", - "params": { - "_core": "The KlerosCore.", - "_governor": "The governor.", - "_maxDrawingTime": "Time after which the drawing phase can be switched", - "_maxStakePerJuror": "The maximum amount of PNK a juror can stake in a court.", - "_maxTotalStaked": "The maximum amount of PNK that can be staked in all courts.", - "_minStakingTime": "Minimal time to stake", - "_rng": "The random number generator.", - "_rngLookahead": "Lookahead value for rng." - } - }, - "notifyRandomNumber(uint256)": { - "details": "Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase().", - "params": { - "_randomNumber": "Random number returned by RNG contract." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setJurorInactive(address)": { - "details": "Unstakes the inactive juror from all courts. `O(n * (p * log_k(j)) )` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.", - "params": { - "_account": "The juror to unstake." - } - }, - "setStake(address,uint96,uint256,uint256,uint256)": { - "details": "Update the state of the stakes, called by KC at the end of setStake flow. `O(n + p * log_k(j))` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.", - "params": { - "_account": "The address of the juror.", - "_courtID": "The ID of the court.", - "_newStake": "The new stake.", - "_pnkDeposit": "The amount of PNK to be deposited.", - "_pnkWithdrawal": "The amount of PNK to be withdrawn." - } - }, - "stakeOf(address,uint96)": { - "details": "Get the stake of a juror in a court.", - "params": { - "_courtID": "The ID of the court.", - "_juror": "The address of the juror." - }, - "returns": { - "_0": "value The stake of the juror in the court." - } - }, - "stakeOf(bytes32,bytes32)": { - "details": "Get the stake of a juror in a court.", - "params": { - "_ID": "The stake path ID, corresponding to a juror.", - "_key": "The key of the tree, corresponding to a court." - }, - "returns": { - "_0": "The stake of the juror in the court." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "validateStake(address,uint96,uint256)": { - "details": "Validate the specified juror's new stake for a court. Note: no state changes should be made when returning stakingResult != Successful, otherwise delayed stakes might break invariants.", - "params": { - "_account": "The address of the juror.", - "_courtID": "The ID of the court.", - "_newStake": "The new stake." - }, - "returns": { - "pnkDeposit": "The amount of PNK to be deposited.", - "pnkWithdrawal": "The amount of PNK to be withdrawn.", - "stakingResult": "The result of the staking operation." - } - }, - "withdrawLeftoverPNK(address)": { - "details": "Gives back the locked PNKs in case the juror fully unstaked earlier. Note that since locked and staked PNK are async it is possible for the juror to have positive staked PNK balance while having 0 stake in courts and 0 locked tokens (eg. when the juror fully unstaked during dispute and later got his tokens unlocked). In this case the juror can use this function to withdraw the leftover tokens. Also note that if the juror has some leftover PNK while not fully unstaked he'll have to manually unstake from all courts to trigger this function.", - "params": { - "_account": "The juror whose PNK to withdraw." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "SortitionModuleNeo", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "events": { - "StakeDelayed(address,uint96,uint256)": { - "notice": "Emitted when a juror's stake is delayed." - }, - "StakeLocked(address,uint256,bool)": { - "notice": "Emitted when a juror's stake is locked." - }, - "StakeSet(address,uint256,uint256,uint256)": { - "notice": "Emitted when a juror stakes in a court." - } - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 16677, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 16680, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)11133" - }, - { - "astId": 16683, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "phase", - "offset": 20, - "slot": "1", - "type": "t_enum(Phase)26305" - }, - { - "astId": 16685, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "minStakingTime", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 16687, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "maxDrawingTime", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 16689, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "lastPhaseChange", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 16691, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "randomNumberRequestBlock", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 16693, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "disputesWithoutJurors", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 16696, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "rng", - "offset": 0, - "slot": "7", - "type": "t_contract(RNG)35453" - }, - { - "astId": 16698, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "randomNumber", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 16700, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "rngLookahead", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 16702, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "delayedStakeWriteIndex", - "offset": 0, - "slot": "10", - "type": "t_uint256" - }, - { - "astId": 16704, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "delayedStakeReadIndex", - "offset": 0, - "slot": "11", - "type": "t_uint256" - }, - { - "astId": 16709, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "sortitionSumTrees", - "offset": 0, - "slot": "12", - "type": "t_mapping(t_bytes32,t_struct(SortitionSumTree)16658_storage)" - }, - { - "astId": 16714, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "jurors", - "offset": 0, - "slot": "13", - "type": "t_mapping(t_address,t_struct(Juror)16675_storage)" - }, - { - "astId": 16719, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "delayedStakes", - "offset": 0, - "slot": "14", - "type": "t_mapping(t_uint256,t_struct(DelayedStake)16667_storage)" - }, - { - "astId": 16725, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "latestDelayedStakeIndex", - "offset": 0, - "slot": "15", - "type": "t_mapping(t_address,t_mapping(t_uint96,t_uint256))" - }, - { - "astId": 18517, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "maxStakePerJuror", - "offset": 0, - "slot": "16", - "type": "t_uint256" - }, - { - "astId": 18519, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "maxTotalStaked", - "offset": 0, - "slot": "17", - "type": "t_uint256" - }, - { - "astId": 18521, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "totalStaked", - "offset": 0, - "slot": "18", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_array(t_uint96)dyn_storage": { - "base": "t_uint96", - "encoding": "dynamic_array", - "label": "uint96[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)11133": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_contract(RNG)35453": { - "encoding": "inplace", - "label": "contract RNG", - "numberOfBytes": "20" - }, - "t_enum(Phase)26305": { - "encoding": "inplace", - "label": "enum ISortitionModule.Phase", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint96,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint96 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint96,t_uint256)" - }, - "t_mapping(t_address,t_struct(Juror)16675_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct SortitionModuleBase.Juror)", - "numberOfBytes": "32", - "value": "t_struct(Juror)16675_storage" - }, - "t_mapping(t_bytes32,t_struct(SortitionSumTree)16658_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct SortitionModuleBase.SortitionSumTree)", - "numberOfBytes": "32", - "value": "t_struct(SortitionSumTree)16658_storage" - }, - "t_mapping(t_bytes32,t_uint256)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_uint256,t_bytes32)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bytes32)", - "numberOfBytes": "32", - "value": "t_bytes32" - }, - "t_mapping(t_uint256,t_struct(DelayedStake)16667_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => struct SortitionModuleBase.DelayedStake)", - "numberOfBytes": "32", - "value": "t_struct(DelayedStake)16667_storage" - }, - "t_mapping(t_uint96,t_uint256)": { - "encoding": "mapping", - "key": "t_uint96", - "label": "mapping(uint96 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DelayedStake)16667_storage": { - "encoding": "inplace", - "label": "struct SortitionModuleBase.DelayedStake", - "members": [ - { - "astId": 16660, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 16662, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "courtID", - "offset": 20, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 16664, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "stake", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 16666, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "alreadyTransferred", - "offset": 0, - "slot": "2", - "type": "t_bool" - } - ], - "numberOfBytes": "96" - }, - "t_struct(Juror)16675_storage": { - "encoding": "inplace", - "label": "struct SortitionModuleBase.Juror", - "members": [ - { - "astId": 16670, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "courtIDs", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint96)dyn_storage" - }, - { - "astId": 16672, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "stakedPnk", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 16674, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "lockedPnk", - "offset": 0, - "slot": "2", - "type": "t_uint256" - } - ], - "numberOfBytes": "96" - }, - "t_struct(SortitionSumTree)16658_storage": { - "encoding": "inplace", - "label": "struct SortitionModuleBase.SortitionSumTree", - "members": [ - { - "astId": 16643, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "K", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 16646, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "stack", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 16649, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "nodes", - "offset": 0, - "slot": "2", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 16653, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "IDsToNodeIndexes", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes32,t_uint256)" - }, - { - "astId": 16657, - "contract": "src/arbitration/SortitionModuleNeo.sol:SortitionModuleNeo", - "label": "nodeIndexesToIDs", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_bytes32)" - } - ], - "numberOfBytes": "160" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/arbitrum/SortitionModule_Proxy.json b/contracts/deployments/arbitrum/SortitionModule_Proxy.json deleted file mode 100644 index 692134e76..000000000 --- a/contracts/deployments/arbitrum/SortitionModule_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x21A9402aDb818744B296e1d1BE58C804118DC03D", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x64c943ff11d3c7afafa6d5520c093d07d2f79e518e6adf9d3a72081fd937c7c3", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x21A9402aDb818744B296e1d1BE58C804118DC03D", - "transactionIndex": 7, - "gasUsed": "595244", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd0b7f441a69fe8a34febf4998ba3ad138790bfba81f486df83208c393801a7ba", - "transactionHash": "0x64c943ff11d3c7afafa6d5520c093d07d2f79e518e6adf9d3a72081fd937c7c3", - "logs": [ - { - "transactionIndex": 7, - "blockNumber": 272063201, - "transactionHash": "0x64c943ff11d3c7afafa6d5520c093d07d2f79e518e6adf9d3a72081fd937c7c3", - "address": "0x21A9402aDb818744B296e1d1BE58C804118DC03D", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000002", - "logIndex": 18, - "blockHash": "0xd0b7f441a69fe8a34febf4998ba3ad138790bfba81f486df83208c393801a7ba" - } - ], - "blockNumber": 272063201, - "cumulativeGasUsed": "1884235", - "status": 1, - "byzantium": true - }, - "args": [ - "0x7E13f295536FD6c48Ba792CFdEF691d592Fa0851", - "0x498c752c000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000991d2df165670b9cac3b022f4b68d65b664222ea00000000000000000000000000000000000000000000000000000000000007080000000000000000000000000000000000000000000000000000000000000708000000000000000000000000044afe0069c0fd641bc5f90d9a4218ef0b2fa9d3000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000006c6b935b8bbd40000000000000000000000000000000000000000000000001a784379d99db42000000" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"SortitionModuleNeoProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212204bceea1b46a095339c0faa0cacdfde8401f8237d6ebe71f92eacd5fa95b7ec3864736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212204bceea1b46a095339c0faa0cacdfde8401f8237d6ebe71f92eacd5fa95b7ec3864736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/TransactionBatcher.json b/contracts/deployments/arbitrum/TransactionBatcher.json deleted file mode 100644 index 343ec6344..000000000 --- a/contracts/deployments/arbitrum/TransactionBatcher.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "address": "0xBC5ef8d9ad307154447AE148c088f083d2dEa4eF", - "abi": [ - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "datas", - "type": "bytes[]" - } - ], - "name": "batchSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "datas", - "type": "bytes[]" - } - ], - "name": "batchSendUnchecked", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "transactionHash": "0x50a763cdca3efd37d6f33e98d7ea345ef4f6ad821949aba64ca8ce2a06c8b06a", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xBC5ef8d9ad307154447AE148c088f083d2dEa4eF", - "transactionIndex": 4, - "gasUsed": "458947", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1bfe2ba4e8defa670819e72dbe2fbac4d9b7ea05cfbbdafe0335df02d9410842", - "transactionHash": "0x50a763cdca3efd37d6f33e98d7ea345ef4f6ad821949aba64ca8ce2a06c8b06a", - "logs": [], - "blockNumber": 235536061, - "cumulativeGasUsed": "1233814", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "036e2ca71d8ebdd78fd6317e15ba1f3c", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"datas\",\"type\":\"bytes[]\"}],\"name\":\"batchSend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"datas\",\"type\":\"bytes[]\"}],\"name\":\"batchSendUnchecked\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/TransactionBatcher.sol\":\"TransactionBatcher\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/utils/TransactionBatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// Adapted from https://github.com/daostack/web3-transaction-batcher/blob/1b88d2ea062f8f2d9fdfdf9bbe85d2bbef780151/contracts/Batcher.sol\\n\\ncontract TransactionBatcher {\\n\\n function batchSend(address[] memory targets, uint256[] memory values, bytes[] memory datas) public payable {\\n for (uint256 i = 0; i < targets.length; i++) {\\n (bool success,) = targets[i].call{value: values[i]}(datas[i]);\\n if (!success) revert('transaction failed'); // All the calls must succeed.\\n }\\n }\\n\\n function batchSendUnchecked(address[] memory targets, uint256[] memory values, bytes[] memory datas) public payable {\\n for (uint256 i = 0; i < targets.length; i++) {\\n targets[i].call{value: values[i]}(datas[i]); // Intentionally ignoring return value.\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1983237012c29ef487ca47d60b197eb30d5b072ffec3078685d43fcc5fcc10a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561000f575f80fd5b506105238061001d5f395ff3fe608060405260043610610028575f3560e01c8063a8f0802e1461002c578063cef591aa14610041575b5f80fd5b61003f61003a3660046103c4565b610054565b005b61003f61004f3660046103c4565b61015c565b5f5b8351811015610156575f848281518110610072576100726104ad565b60200260200101516001600160a01b0316848381518110610095576100956104ad565b60200260200101518484815181106100af576100af6104ad565b60200260200101516040516100c491906104c1565b5f6040518083038185875af1925050503d805f81146100fe576040519150601f19603f3d011682016040523d82523d5f602084013e610103565b606091505b505090508061014d5760405162461bcd60e51b81526020600482015260126024820152711d1c985b9cd858dd1a5bdb8819985a5b195960721b604482015260640160405180910390fd5b50600101610056565b50505050565b5f5b835181101561015657838181518110610179576101796104ad565b60200260200101516001600160a01b031683828151811061019c5761019c6104ad565b60200260200101518383815181106101b6576101b66104ad565b60200260200101516040516101cb91906104c1565b5f6040518083038185875af1925050503d805f8114610205576040519150601f19603f3d011682016040523d82523d5f602084013e61020a565b606091505b50505060010161015e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561025257610252610215565b604052919050565b5f67ffffffffffffffff82111561027357610273610215565b5060051b60200190565b5f82601f83011261028c575f80fd5b813560206102a161029c8361025a565b610229565b8083825260208201915060208460051b8701019350868411156102c2575f80fd5b602086015b848110156102de57803583529183019183016102c7565b509695505050505050565b5f601f83601f8401126102fa575f80fd5b8235602061030a61029c8361025a565b82815260059290921b85018101918181019087841115610328575f80fd5b8287015b848110156103b857803567ffffffffffffffff8082111561034b575f80fd5b818a0191508a603f83011261035e575f80fd5b8582013560408282111561037457610374610215565b610385828b01601f19168901610229565b92508183528c8183860101111561039a575f80fd5b8181850189850137505f90820187015284525091830191830161032c565b50979650505050505050565b5f805f606084860312156103d6575f80fd5b833567ffffffffffffffff808211156103ed575f80fd5b818601915086601f830112610400575f80fd5b8135602061041061029c8361025a565b82815260059290921b8401810191818101908a84111561042e575f80fd5b948201945b838610156104605785356001600160a01b0381168114610451575f80fd5b82529482019490820190610433565b97505087013592505080821115610475575f80fd5b6104818783880161027d565b93506040860135915080821115610496575f80fd5b506104a3868287016102e9565b9150509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82515f5b818110156104e057602081860181015185830152016104c6565b505f92019182525091905056fea264697066735822122089797200888ad757484ded7bc0ffbb0769e9e974d73188d61385b7f6675e9f2064736f6c63430008180033", - "deployedBytecode": "0x608060405260043610610028575f3560e01c8063a8f0802e1461002c578063cef591aa14610041575b5f80fd5b61003f61003a3660046103c4565b610054565b005b61003f61004f3660046103c4565b61015c565b5f5b8351811015610156575f848281518110610072576100726104ad565b60200260200101516001600160a01b0316848381518110610095576100956104ad565b60200260200101518484815181106100af576100af6104ad565b60200260200101516040516100c491906104c1565b5f6040518083038185875af1925050503d805f81146100fe576040519150601f19603f3d011682016040523d82523d5f602084013e610103565b606091505b505090508061014d5760405162461bcd60e51b81526020600482015260126024820152711d1c985b9cd858dd1a5bdb8819985a5b195960721b604482015260640160405180910390fd5b50600101610056565b50505050565b5f5b835181101561015657838181518110610179576101796104ad565b60200260200101516001600160a01b031683828151811061019c5761019c6104ad565b60200260200101518383815181106101b6576101b66104ad565b60200260200101516040516101cb91906104c1565b5f6040518083038185875af1925050503d805f8114610205576040519150601f19603f3d011682016040523d82523d5f602084013e61020a565b606091505b50505060010161015e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561025257610252610215565b604052919050565b5f67ffffffffffffffff82111561027357610273610215565b5060051b60200190565b5f82601f83011261028c575f80fd5b813560206102a161029c8361025a565b610229565b8083825260208201915060208460051b8701019350868411156102c2575f80fd5b602086015b848110156102de57803583529183019183016102c7565b509695505050505050565b5f601f83601f8401126102fa575f80fd5b8235602061030a61029c8361025a565b82815260059290921b85018101918181019087841115610328575f80fd5b8287015b848110156103b857803567ffffffffffffffff8082111561034b575f80fd5b818a0191508a603f83011261035e575f80fd5b8582013560408282111561037457610374610215565b610385828b01601f19168901610229565b92508183528c8183860101111561039a575f80fd5b8181850189850137505f90820187015284525091830191830161032c565b50979650505050505050565b5f805f606084860312156103d6575f80fd5b833567ffffffffffffffff808211156103ed575f80fd5b818601915086601f830112610400575f80fd5b8135602061041061029c8361025a565b82815260059290921b8401810191818101908a84111561042e575f80fd5b948201945b838610156104605785356001600160a01b0381168114610451575f80fd5b82529482019490820190610433565b97505087013592505080821115610475575f80fd5b6104818783880161027d565b93506040860135915080821115610496575f80fd5b506104a3868287016102e9565b9150509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82515f5b818110156104e057602081860181015185830152016104c6565b505f92019182525091905056fea264697066735822122089797200888ad757484ded7bc0ffbb0769e9e974d73188d61385b7f6675e9f2064736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrum/WETH.json b/contracts/deployments/arbitrum/WETH.json deleted file mode 100644 index ba8ed293b..000000000 --- a/contracts/deployments/arbitrum/WETH.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "address": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "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": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "admin_", - "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": "implementation_", - "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" - } - ] -} diff --git a/contracts/deployments/arbitrumSepolia.ts b/contracts/deployments/arbitrumSepolia.ts deleted file mode 100644 index 0bacd41a5..000000000 --- a/contracts/deployments/arbitrumSepolia.ts +++ /dev/null @@ -1,23286 +0,0 @@ -export default { - name: "arbitrumSepolia", - chainId: "421614", - contracts: { - BlockHashRNG: { - address: "0x0298a3EFa6Faf90865725E2b48Cf0F66e5d52754", - abi: [ - { - inputs: [ - { - internalType: "uint256", - name: "block", - type: "uint256", - }, - ], - name: "randomNumbers", - outputs: [ - { - internalType: "uint256", - name: "number", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_block", - type: "uint256", - }, - ], - name: "receiveRandomness", - outputs: [ - { - internalType: "uint256", - name: "randomNumber", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_block", - type: "uint256", - }, - ], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - ChainlinkRNG: { - address: "0xAd5cCc93429e3A977c273cEeD106Ef16A69EAf79", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "address", - name: "_sortitionModule", - type: "address", - }, - { - internalType: "address", - name: "_vrfCoordinator", - type: "address", - }, - { - internalType: "bytes32", - name: "_keyHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "_subscriptionId", - type: "uint256", - }, - { - internalType: "uint16", - name: "_requestConfirmations", - type: "uint16", - }, - { - internalType: "uint32", - name: "_callbackGasLimit", - type: "uint32", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "have", - type: "address", - }, - { - internalType: "address", - name: "want", - type: "address", - }, - ], - name: "OnlyCoordinatorCanFulfill", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "have", - type: "address", - }, - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "coordinator", - type: "address", - }, - ], - name: "OnlyOwnerOrCoordinator", - type: "error", - }, - { - inputs: [], - name: "ZeroAddress", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "vrfCoordinator", - type: "address", - }, - ], - name: "CoordinatorSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "OwnershipTransferRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "randomWord", - type: "uint256", - }, - ], - name: "RequestFulfilled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "RequestSent", - type: "event", - }, - { - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "callbackGasLimit", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "_callbackGasLimit", - type: "uint32", - }, - ], - name: "changeCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_keyHash", - type: "bytes32", - }, - ], - name: "changeKeyHash", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint16", - name: "_requestConfirmations", - type: "uint16", - }, - ], - name: "changeRequestConfirmations", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_sortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_subscriptionId", - type: "uint256", - }, - ], - name: "changeSubscriptionId", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_vrfCoordinator", - type: "address", - }, - ], - name: "changeVrfCoordinator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "keyHash", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastRequestId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "randomNumbers", - outputs: [ - { - internalType: "uint256", - name: "number", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "randomWords", - type: "uint256[]", - }, - ], - name: "rawFulfillRandomWords", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "receiveRandomness", - outputs: [ - { - internalType: "uint256", - name: "randomNumber", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "requestConfirmations", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "s_vrfCoordinator", - outputs: [ - { - internalType: "contract IVRFCoordinatorV2Plus", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_vrfCoordinator", - type: "address", - }, - ], - name: "setCoordinator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "sortitionModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "subscriptionId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - ChainlinkVRFCoordinator: { - address: "0x5CE8D5A2BC84beb22a398CCA51996F7930313D61", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "blockhashStore", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "uint256", - name: "internalBalance", - type: "uint256", - }, - { - internalType: "uint256", - name: "externalBalance", - type: "uint256", - }, - ], - name: "BalanceInvariantViolated", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNum", - type: "uint256", - }, - ], - name: "BlockhashNotInStore", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "coordinatorAddress", - type: "address", - }, - ], - name: "CoordinatorAlreadyRegistered", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "coordinatorAddress", - type: "address", - }, - ], - name: "CoordinatorNotRegistered", - type: "error", - }, - { - inputs: [], - name: "FailedToSendNative", - type: "error", - }, - { - inputs: [], - name: "FailedToTransferLink", - type: "error", - }, - { - inputs: [ - { - internalType: "uint32", - name: "have", - type: "uint32", - }, - { - internalType: "uint32", - name: "want", - type: "uint32", - }, - ], - name: "GasLimitTooBig", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "gasPrice", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxGas", - type: "uint256", - }, - ], - name: "GasPriceExceeded", - type: "error", - }, - { - inputs: [], - name: "IncorrectCommitment", - type: "error", - }, - { - inputs: [], - name: "IndexOutOfRange", - type: "error", - }, - { - inputs: [], - name: "InsufficientBalance", - type: "error", - }, - { - inputs: [], - name: "InvalidCalldata", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "InvalidConsumer", - type: "error", - }, - { - inputs: [], - name: "InvalidExtraArgsTag", - type: "error", - }, - { - inputs: [ - { - internalType: "int256", - name: "linkWei", - type: "int256", - }, - ], - name: "InvalidLinkWeiPrice", - type: "error", - }, - { - inputs: [ - { - internalType: "uint8", - name: "premiumPercentage", - type: "uint8", - }, - { - internalType: "uint8", - name: "max", - type: "uint8", - }, - ], - name: "InvalidPremiumPercentage", - type: "error", - }, - { - inputs: [ - { - internalType: "uint16", - name: "have", - type: "uint16", - }, - { - internalType: "uint16", - name: "min", - type: "uint16", - }, - { - internalType: "uint16", - name: "max", - type: "uint16", - }, - ], - name: "InvalidRequestConfirmations", - type: "error", - }, - { - inputs: [], - name: "InvalidSubscription", - type: "error", - }, - { - inputs: [], - name: "LinkAlreadySet", - type: "error", - }, - { - inputs: [ - { - internalType: "uint32", - name: "flatFeeLinkDiscountPPM", - type: "uint32", - }, - { - internalType: "uint32", - name: "flatFeeNativePPM", - type: "uint32", - }, - ], - name: "LinkDiscountTooHigh", - type: "error", - }, - { - inputs: [], - name: "LinkNotSet", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "have", - type: "uint256", - }, - { - internalType: "uint32", - name: "max", - type: "uint32", - }, - ], - name: "MsgDataTooBig", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "proposedOwner", - type: "address", - }, - ], - name: "MustBeRequestedOwner", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "MustBeSubOwner", - type: "error", - }, - { - inputs: [], - name: "NoCorrespondingRequest", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - ], - name: "NoSuchProvingKey", - type: "error", - }, - { - inputs: [ - { - internalType: "uint32", - name: "have", - type: "uint32", - }, - { - internalType: "uint32", - name: "want", - type: "uint32", - }, - ], - name: "NumWordsTooBig", - type: "error", - }, - { - inputs: [], - name: "OnlyCallableFromLink", - type: "error", - }, - { - inputs: [], - name: "PaymentTooLarge", - type: "error", - }, - { - inputs: [], - name: "PendingRequestExists", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - ], - name: "ProvingKeyAlreadyRegistered", - type: "error", - }, - { - inputs: [], - name: "Reentrant", - type: "error", - }, - { - inputs: [], - name: "TooManyConsumers", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint16", - name: "minimumRequestConfirmations", - type: "uint16", - }, - { - indexed: false, - internalType: "uint32", - name: "maxGasLimit", - type: "uint32", - }, - { - indexed: false, - internalType: "uint32", - name: "stalenessSeconds", - type: "uint32", - }, - { - indexed: false, - internalType: "uint32", - name: "gasAfterPaymentCalculation", - type: "uint32", - }, - { - indexed: false, - internalType: "int256", - name: "fallbackWeiPerUnitLink", - type: "int256", - }, - { - indexed: false, - internalType: "uint32", - name: "fulfillmentFlatFeeNativePPM", - type: "uint32", - }, - { - indexed: false, - internalType: "uint32", - name: "fulfillmentFlatFeeLinkDiscountPPM", - type: "uint32", - }, - { - indexed: false, - internalType: "uint8", - name: "nativePremiumPercentage", - type: "uint8", - }, - { - indexed: false, - internalType: "uint8", - name: "linkPremiumPercentage", - type: "uint8", - }, - ], - name: "ConfigSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "coordinatorAddress", - type: "address", - }, - ], - name: "CoordinatorDeregistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "coordinatorAddress", - type: "address", - }, - ], - name: "CoordinatorRegistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "fallbackWeiPerUnitLink", - type: "int256", - }, - ], - name: "FallbackWeiPerUnitLinkUsed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "FundsRecovered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "newCoordinator", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "MigrationCompleted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "NativeFundsRecovered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "OwnershipTransferRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint64", - name: "maxGas", - type: "uint64", - }, - ], - name: "ProvingKeyDeregistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint64", - name: "maxGas", - type: "uint64", - }, - ], - name: "ProvingKeyRegistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "outputSeed", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint96", - name: "payment", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "nativePayment", - type: "bool", - }, - { - indexed: false, - internalType: "bool", - name: "success", - type: "bool", - }, - { - indexed: false, - internalType: "bool", - name: "onlyPremium", - type: "bool", - }, - ], - name: "RandomWordsFulfilled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "preSeed", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "minimumRequestConfirmations", - type: "uint16", - }, - { - indexed: false, - internalType: "uint32", - name: "callbackGasLimit", - type: "uint32", - }, - { - indexed: false, - internalType: "uint32", - name: "numWords", - type: "uint32", - }, - { - indexed: false, - internalType: "bytes", - name: "extraArgs", - type: "bytes", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "RandomWordsRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amountLink", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amountNative", - type: "uint256", - }, - ], - name: "SubscriptionCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "SubscriptionConsumerAdded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "SubscriptionConsumerRemoved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "SubscriptionCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "oldBalance", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newBalance", - type: "uint256", - }, - ], - name: "SubscriptionFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "oldNativeBalance", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newNativeBalance", - type: "uint256", - }, - ], - name: "SubscriptionFundedWithNative", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "SubscriptionOwnerTransferRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "SubscriptionOwnerTransferred", - type: "event", - }, - { - inputs: [], - name: "BLOCKHASH_STORE", - outputs: [ - { - internalType: "contract BlockhashStoreInterface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LINK", - outputs: [ - { - internalType: "contract LinkTokenInterface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LINK_NATIVE_FEED", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAX_CONSUMERS", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAX_NUM_WORDS", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAX_REQUEST_CONFIRMATIONS", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "acceptSubscriptionOwnerTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "addConsumer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "cancelSubscription", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "createSubscription", - outputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "deregisterMigratableCoordinator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "publicProvingKey", - type: "uint256[2]", - }, - ], - name: "deregisterProvingKey", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "uint256[2]", - name: "pk", - type: "uint256[2]", - }, - { - internalType: "uint256[2]", - name: "gamma", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "c", - type: "uint256", - }, - { - internalType: "uint256", - name: "s", - type: "uint256", - }, - { - internalType: "uint256", - name: "seed", - type: "uint256", - }, - { - internalType: "address", - name: "uWitness", - type: "address", - }, - { - internalType: "uint256[2]", - name: "cGammaWitness", - type: "uint256[2]", - }, - { - internalType: "uint256[2]", - name: "sHashWitness", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "zInv", - type: "uint256", - }, - ], - internalType: "struct VRF.Proof", - name: "proof", - type: "tuple", - }, - { - components: [ - { - internalType: "uint64", - name: "blockNum", - type: "uint64", - }, - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "uint32", - name: "callbackGasLimit", - type: "uint32", - }, - { - internalType: "uint32", - name: "numWords", - type: "uint32", - }, - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "bytes", - name: "extraArgs", - type: "bytes", - }, - ], - internalType: "struct VRFTypes.RequestCommitmentV2Plus", - name: "rc", - type: "tuple", - }, - { - internalType: "bool", - name: "onlyPremium", - type: "bool", - }, - ], - name: "fulfillRandomWords", - outputs: [ - { - internalType: "uint96", - name: "payment", - type: "uint96", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "fundSubscriptionWithNative", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "startIndex", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxCount", - type: "uint256", - }, - ], - name: "getActiveSubscriptionIds", - outputs: [ - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "getSubscription", - outputs: [ - { - internalType: "uint96", - name: "balance", - type: "uint96", - }, - { - internalType: "uint96", - name: "nativeBalance", - type: "uint96", - }, - { - internalType: "uint64", - name: "reqCount", - type: "uint64", - }, - { - internalType: "address", - name: "subOwner", - type: "address", - }, - { - internalType: "address[]", - name: "consumers", - type: "address[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "publicKey", - type: "uint256[2]", - }, - ], - name: "hashOfKey", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "newCoordinator", - type: "address", - }, - ], - name: "migrate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "onTokenTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "ownerCancelSubscription", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "pendingRequestExists", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "recoverFunds", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "to", - type: "address", - }, - ], - name: "recoverNativeFunds", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "registerMigratableCoordinator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "publicProvingKey", - type: "uint256[2]", - }, - { - internalType: "uint64", - name: "maxGas", - type: "uint64", - }, - ], - name: "registerProvingKey", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "removeConsumer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "uint16", - name: "requestConfirmations", - type: "uint16", - }, - { - internalType: "uint32", - name: "callbackGasLimit", - type: "uint32", - }, - { - internalType: "uint32", - name: "numWords", - type: "uint32", - }, - { - internalType: "bytes", - name: "extraArgs", - type: "bytes", - }, - ], - internalType: "struct VRFV2PlusClient.RandomWordsRequest", - name: "req", - type: "tuple", - }, - ], - name: "requestRandomWords", - outputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "requestSubscriptionOwnerTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "s_config", - outputs: [ - { - internalType: "uint16", - name: "minimumRequestConfirmations", - type: "uint16", - }, - { - internalType: "uint32", - name: "maxGasLimit", - type: "uint32", - }, - { - internalType: "bool", - name: "reentrancyLock", - type: "bool", - }, - { - internalType: "uint32", - name: "stalenessSeconds", - type: "uint32", - }, - { - internalType: "uint32", - name: "gasAfterPaymentCalculation", - type: "uint32", - }, - { - internalType: "uint32", - name: "fulfillmentFlatFeeNativePPM", - type: "uint32", - }, - { - internalType: "uint32", - name: "fulfillmentFlatFeeLinkDiscountPPM", - type: "uint32", - }, - { - internalType: "uint8", - name: "nativePremiumPercentage", - type: "uint8", - }, - { - internalType: "uint8", - name: "linkPremiumPercentage", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "s_currentSubNonce", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "s_fallbackWeiPerUnitLink", - outputs: [ - { - internalType: "int256", - name: "", - type: "int256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "s_provingKeyHashes", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "s_provingKeys", - outputs: [ - { - internalType: "bool", - name: "exists", - type: "bool", - }, - { - internalType: "uint64", - name: "maxGas", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "s_requestCommitments", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "s_totalBalance", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "s_totalNativeBalance", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint16", - name: "minimumRequestConfirmations", - type: "uint16", - }, - { - internalType: "uint32", - name: "maxGasLimit", - type: "uint32", - }, - { - internalType: "uint32", - name: "stalenessSeconds", - type: "uint32", - }, - { - internalType: "uint32", - name: "gasAfterPaymentCalculation", - type: "uint32", - }, - { - internalType: "int256", - name: "fallbackWeiPerUnitLink", - type: "int256", - }, - { - internalType: "uint32", - name: "fulfillmentFlatFeeNativePPM", - type: "uint32", - }, - { - internalType: "uint32", - name: "fulfillmentFlatFeeLinkDiscountPPM", - type: "uint32", - }, - { - internalType: "uint8", - name: "nativePremiumPercentage", - type: "uint8", - }, - { - internalType: "uint8", - name: "linkPremiumPercentage", - type: "uint8", - }, - ], - name: "setConfig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "link", - type: "address", - }, - { - internalType: "address", - name: "linkNativeFeed", - type: "address", - }, - ], - name: "setLINKAndLINKNativeFeed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - ], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "recipient", - type: "address", - }, - ], - name: "withdrawNative", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DAI: { - address: "0xc34aeFEa232956542C5b2f2EE55fD5c378B35c03", - abi: [ - { - inputs: [ - { - internalType: "string", - name: "_name", - type: "string", - }, - { - internalType: "string", - name: "_symbol", - type: "string", - }, - ], - 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: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - 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: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - 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: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DAIFaucet: { - address: "0x1Fa58B52326488D62A406E71DBaD839560e810fF", - abi: [ - { - inputs: [ - { - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "balance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "withdrewAlready", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - DisputeKitClassic: { - address: "0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitClassic_Implementation: { - address: "0xA122856B3B4C5fBcA129088af3CEb204509805f0", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitClassic_Proxy: { - address: "0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeKitGated: { - address: "0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "extraDataToTokenInfo", - outputs: [ - { - internalType: "address", - name: "tokenGate", - type: "address", - }, - { - internalType: "bool", - name: "isERC1155", - type: "bool", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitGatedShutter: { - address: "0x936231010462458ebaA45dDc422A5940C08a474C", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "CommitCastShutter", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitGatedShutter_Implementation: { - address: "0x3a06272f2FEEC12B0FB5F3FF82688c0F06808bE7", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "CommitCastShutter", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitGatedShutter_Proxy: { - address: "0x936231010462458ebaA45dDc422A5940C08a474C", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeKitGated_Implementation: { - address: "0x2d1b63C9638ed62875256676C665a7ec14D7663C", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "extraDataToTokenInfo", - outputs: [ - { - internalType: "address", - name: "tokenGate", - type: "address", - }, - { - internalType: "bool", - name: "isERC1155", - type: "bool", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitGated_Proxy: { - address: "0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeKitShutter: { - address: "0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "CommitCastShutter", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitShutter_Implementation: { - address: "0xca04F97fc0Df83E25e585893F5A12fb0AebEC27d", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "CommitCastShutter", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitShutter_Proxy: { - address: "0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeResolver: { - address: "0xed31bEE8b1F7cE89E93033C0d3B2ccF4cEb27652", - abi: [ - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_templateUri", - type: "string", - }, - ], - name: "DisputeRequest", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - inputs: [], - name: "arbitrator", - outputs: [ - { - internalType: "contract IArbitratorV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "arbitratorDisputeIDToLocalID", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "string", - name: "_disputeTemplate", - type: "string", - }, - { - internalType: "string", - name: "_disputeTemplateDataMappings", - type: "string", - }, - { - internalType: "uint256", - name: "_numberOfRulingOptions", - type: "uint256", - }, - ], - name: "createDisputeForTemplate", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "string", - name: "_disputeTemplateUri", - type: "string", - }, - { - internalType: "uint256", - name: "_numberOfRulingOptions", - type: "uint256", - }, - ], - name: "createDisputeForTemplateUri", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "bytes", - name: "arbitratorExtraData", - type: "bytes", - }, - { - internalType: "bool", - name: "isRuled", - type: "bool", - }, - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "uint256", - name: "numberOfRulingOptions", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templateRegistry", - outputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - DisputeTemplateRegistry: { - address: "0xe763d31Cb096B4bc7294012B78FC7F148324ebcb", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: true, - internalType: "string", - name: "_templateTag", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_templateData", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "DisputeTemplate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "_templateTag", - type: "string", - }, - { - internalType: "string", - name: "_templateData", - type: "string", - }, - { - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "setDisputeTemplate", - outputs: [ - { - internalType: "uint256", - name: "templateId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templates", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeTemplateRegistry_Implementation: { - address: "0xf97791DA66e0A8Ff8Ee4908872CfCAcc641829Ec", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: true, - internalType: "string", - name: "_templateTag", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_templateData", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "DisputeTemplate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "_templateTag", - type: "string", - }, - { - internalType: "string", - name: "_templateData", - type: "string", - }, - { - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "setDisputeTemplate", - outputs: [ - { - internalType: "uint256", - name: "templateId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templates", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - DisputeTemplateRegistry_Proxy: { - address: "0xe763d31Cb096B4bc7294012B78FC7F148324ebcb", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - EvidenceModule: { - address: "0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_party", - type: "address", - }, - { - indexed: false, - internalType: "string", - name: "_evidence", - type: "string", - }, - ], - name: "Evidence", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - internalType: "string", - name: "_evidence", - type: "string", - }, - ], - name: "submitEvidence", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - EvidenceModule_Implementation: { - address: "0xC4e64e6E949936a18269937FC1e18cb11E3db14D", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_party", - type: "address", - }, - { - indexed: false, - internalType: "string", - name: "_evidence", - type: "string", - }, - ], - name: "Evidence", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - internalType: "string", - name: "_evidence", - type: "string", - }, - ], - name: "submitEvidence", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - EvidenceModule_Proxy: { - address: "0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - KlerosCore: { - address: "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "AppealFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "AppealPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "ArbitrationFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "CannotDisableClassicDK", - type: "error", - }, - { - inputs: [], - name: "CommitPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "DisputeKitNotSupportedByCourt", - type: "error", - }, - { - inputs: [], - name: "DisputeKitOnly", - type: "error", - }, - { - inputs: [], - name: "DisputeNotAppealable", - type: "error", - }, - { - inputs: [], - name: "DisputePeriodIsFinal", - type: "error", - }, - { - inputs: [], - name: "DisputeStillDrawing", - type: "error", - }, - { - inputs: [], - name: "EvidenceNotPassedAndNotAppeal", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [], - name: "GovernorOnly", - type: "error", - }, - { - inputs: [], - name: "GuardianOrGovernorOnly", - type: "error", - }, - { - inputs: [], - name: "InvalidDisputKitParent", - type: "error", - }, - { - inputs: [], - name: "InvalidForkingCourtAsParent", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "MinStakeLowerThanParentCourt", - type: "error", - }, - { - inputs: [], - name: "MustSupportDisputeKitClassic", - type: "error", - }, - { - inputs: [], - name: "NotEvidencePeriod", - type: "error", - }, - { - inputs: [], - name: "NotExecutionPeriod", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "RulingAlreadyExecuted", - type: "error", - }, - { - inputs: [], - name: "SortitionModuleOnly", - type: "error", - }, - { - inputs: [], - name: "StakingInTooManyCourts", - type: "error", - }, - { - inputs: [], - name: "StakingLessThanCourtMinStake", - type: "error", - }, - { - inputs: [], - name: "StakingNotPossibleInThisCourt", - type: "error", - }, - { - inputs: [], - name: "StakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "StakingZeroWhenNoStake", - type: "error", - }, - { - inputs: [], - name: "TokenNotAccepted", - type: "error", - }, - { - inputs: [], - name: "TransferFailed", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - inputs: [], - name: "UnstakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "UnsuccessfulCall", - type: "error", - }, - { - inputs: [], - name: "UnsupportedDisputeKit", - type: "error", - }, - { - inputs: [], - name: "VotePeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "WhenNotPausedOnly", - type: "error", - }, - { - inputs: [], - name: "WhenPausedOnly", - type: "error", - }, - { - inputs: [], - name: "WrongDisputeKitIndex", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - { - indexed: true, - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "AcceptedFeeToken", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealDecision", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealPossible", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "CourtCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_fromCourtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint96", - name: "_toCourtID", - type: "uint96", - }, - ], - name: "CourtJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtModified", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "DisputeKitCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "DisputeKitEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_fromDisputeKitID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_toDisputeKitID", - type: "uint256", - }, - ], - name: "DisputeKitJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "Draw", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_pnkAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "LeftoverRewardSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - indexed: false, - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - indexed: false, - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "NewCurrencyRate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "enum KlerosCoreBase.Period", - name: "_period", - type: "uint8", - }, - ], - name: "NewPeriod", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_degreeOfCoherency", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "_pnkAmount", - type: "int256", - }, - { - indexed: false, - internalType: "int256", - name: "_feeAmount", - type: "int256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "TokenAndETHShift", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Unpaused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealPeriod", - outputs: [ - { - internalType: "uint256", - name: "start", - type: "uint256", - }, - { - internalType: "uint256", - name: "end", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_guardian", - type: "address", - }, - ], - name: "changeGuardian", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract ISortitionModule", - name: "_sortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_toToken", - type: "address", - }, - { - internalType: "uint256", - name: "_amountInEth", - type: "uint256", - }, - ], - name: "convertEthToTokenAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "courts", - outputs: [ - { - internalType: "uint96", - name: "parent", - type: "uint96", - }, - { - internalType: "bool", - name: "hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "bool", - name: "disabled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "bytes", - name: "_sortitionExtraData", - type: "bytes", - }, - { - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "currencyRates", - outputs: [ - { - internalType: "bool", - name: "feePaymentAccepted", - type: "bool", - }, - { - internalType: "uint64", - name: "rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "rateDecimals", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputeKits", - outputs: [ - { - internalType: "contract IDisputeKit", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "contract IArbitrableV2", - name: "arbitrated", - type: "address", - }, - { - internalType: "enum KlerosCoreBase.Period", - name: "period", - type: "uint8", - }, - { - internalType: "bool", - name: "ruled", - type: "bool", - }, - { - internalType: "uint256", - name: "lastPeriodChange", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "uint256", - name: "nbDrawnJurors", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256[]", - name: "_disputeKitIDs", - type: "uint256[]", - }, - { - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDisputeKitsLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getPnkAtStakePerJuror", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "disputeKitID", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkAtStakePerJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalFeesForJurors", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "repartitions", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkPenalties", - type: "uint256", - }, - { - internalType: "address[]", - name: "drawnJurors", - type: "address[]", - }, - { - internalType: "uint256", - name: "sumFeeRewardPaid", - type: "uint256", - }, - { - internalType: "uint256", - name: "sumPnkRewardPaid", - type: "uint256", - }, - { - internalType: "contract IERC20", - name: "feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "drawIterations", - type: "uint256", - }, - ], - internalType: "struct KlerosCoreBase.Round", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getTimesPerPeriod", - outputs: [ - { - internalType: "uint256[4]", - name: "timesPerPeriod", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "guardian", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "address", - name: "_guardian", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - { - internalType: "contract IDisputeKit", - name: "_disputeKit", - type: "address", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256[4]", - name: "_courtParameters", - type: "uint256[4]", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "bytes", - name: "_sortitionExtraData", - type: "bytes", - }, - { - internalType: "contract ISortitionModule", - name: "_sortitionModuleAddress", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "isDisputeKitJumping", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - ], - name: "isSupported", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "jurorProsecutionModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - 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: "pinakion", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "sortitionModule", - outputs: [ - { - internalType: "contract ISortitionModule", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "transferBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "unpause", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - KlerosCoreSnapshotProxy: { - address: "0xd74e61A4dB9C6c3F2C97b62a319aE194f616858C", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract IKlerosCore", - name: "_core", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IKlerosCore", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract IKlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - KlerosCore_Implementation: { - address: "0x02F607722749CECd32db07AA0b0755281FE9D13c", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "AppealFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "AppealPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "ArbitrationFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "CannotDisableClassicDK", - type: "error", - }, - { - inputs: [], - name: "CommitPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "DisputeKitNotSupportedByCourt", - type: "error", - }, - { - inputs: [], - name: "DisputeKitOnly", - type: "error", - }, - { - inputs: [], - name: "DisputeNotAppealable", - type: "error", - }, - { - inputs: [], - name: "DisputePeriodIsFinal", - type: "error", - }, - { - inputs: [], - name: "DisputeStillDrawing", - type: "error", - }, - { - inputs: [], - name: "EvidenceNotPassedAndNotAppeal", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [], - name: "GovernorOnly", - type: "error", - }, - { - inputs: [], - name: "GuardianOrGovernorOnly", - type: "error", - }, - { - inputs: [], - name: "InvalidDisputKitParent", - type: "error", - }, - { - inputs: [], - name: "InvalidForkingCourtAsParent", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "MinStakeLowerThanParentCourt", - type: "error", - }, - { - inputs: [], - name: "MustSupportDisputeKitClassic", - type: "error", - }, - { - inputs: [], - name: "NotEvidencePeriod", - type: "error", - }, - { - inputs: [], - name: "NotExecutionPeriod", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "RulingAlreadyExecuted", - type: "error", - }, - { - inputs: [], - name: "SortitionModuleOnly", - type: "error", - }, - { - inputs: [], - name: "StakingInTooManyCourts", - type: "error", - }, - { - inputs: [], - name: "StakingLessThanCourtMinStake", - type: "error", - }, - { - inputs: [], - name: "StakingNotPossibleInThisCourt", - type: "error", - }, - { - inputs: [], - name: "StakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "StakingZeroWhenNoStake", - type: "error", - }, - { - inputs: [], - name: "TokenNotAccepted", - type: "error", - }, - { - inputs: [], - name: "TransferFailed", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - inputs: [], - name: "UnstakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "UnsuccessfulCall", - type: "error", - }, - { - inputs: [], - name: "UnsupportedDisputeKit", - type: "error", - }, - { - inputs: [], - name: "VotePeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "WhenNotPausedOnly", - type: "error", - }, - { - inputs: [], - name: "WhenPausedOnly", - type: "error", - }, - { - inputs: [], - name: "WrongDisputeKitIndex", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - { - indexed: true, - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "AcceptedFeeToken", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealDecision", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealPossible", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "CourtCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_fromCourtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint96", - name: "_toCourtID", - type: "uint96", - }, - ], - name: "CourtJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtModified", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "DisputeKitCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "DisputeKitEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_fromDisputeKitID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_toDisputeKitID", - type: "uint256", - }, - ], - name: "DisputeKitJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "Draw", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_pnkAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "LeftoverRewardSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - indexed: false, - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - indexed: false, - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "NewCurrencyRate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "enum KlerosCoreBase.Period", - name: "_period", - type: "uint8", - }, - ], - name: "NewPeriod", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_degreeOfCoherency", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "_pnkAmount", - type: "int256", - }, - { - indexed: false, - internalType: "int256", - name: "_feeAmount", - type: "int256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "TokenAndETHShift", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Unpaused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealPeriod", - outputs: [ - { - internalType: "uint256", - name: "start", - type: "uint256", - }, - { - internalType: "uint256", - name: "end", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_guardian", - type: "address", - }, - ], - name: "changeGuardian", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract ISortitionModule", - name: "_sortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_toToken", - type: "address", - }, - { - internalType: "uint256", - name: "_amountInEth", - type: "uint256", - }, - ], - name: "convertEthToTokenAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "courts", - outputs: [ - { - internalType: "uint96", - name: "parent", - type: "uint96", - }, - { - internalType: "bool", - name: "hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "bool", - name: "disabled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "bytes", - name: "_sortitionExtraData", - type: "bytes", - }, - { - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "currencyRates", - outputs: [ - { - internalType: "bool", - name: "feePaymentAccepted", - type: "bool", - }, - { - internalType: "uint64", - name: "rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "rateDecimals", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputeKits", - outputs: [ - { - internalType: "contract IDisputeKit", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "contract IArbitrableV2", - name: "arbitrated", - type: "address", - }, - { - internalType: "enum KlerosCoreBase.Period", - name: "period", - type: "uint8", - }, - { - internalType: "bool", - name: "ruled", - type: "bool", - }, - { - internalType: "uint256", - name: "lastPeriodChange", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "uint256", - name: "nbDrawnJurors", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256[]", - name: "_disputeKitIDs", - type: "uint256[]", - }, - { - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDisputeKitsLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getPnkAtStakePerJuror", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "disputeKitID", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkAtStakePerJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalFeesForJurors", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "repartitions", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkPenalties", - type: "uint256", - }, - { - internalType: "address[]", - name: "drawnJurors", - type: "address[]", - }, - { - internalType: "uint256", - name: "sumFeeRewardPaid", - type: "uint256", - }, - { - internalType: "uint256", - name: "sumPnkRewardPaid", - type: "uint256", - }, - { - internalType: "contract IERC20", - name: "feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "drawIterations", - type: "uint256", - }, - ], - internalType: "struct KlerosCoreBase.Round", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getTimesPerPeriod", - outputs: [ - { - internalType: "uint256[4]", - name: "timesPerPeriod", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "guardian", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "address", - name: "_guardian", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - { - internalType: "contract IDisputeKit", - name: "_disputeKit", - type: "address", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256[4]", - name: "_courtParameters", - type: "uint256[4]", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "bytes", - name: "_sortitionExtraData", - type: "bytes", - }, - { - internalType: "contract ISortitionModule", - name: "_sortitionModuleAddress", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "isDisputeKitJumping", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - ], - name: "isSupported", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "jurorProsecutionModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - 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: "pinakion", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "sortitionModule", - outputs: [ - { - internalType: "contract ISortitionModule", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "transferBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "unpause", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - KlerosCore_Proxy: { - address: "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - PNK: { - address: "0x34B944D42cAcfC8266955D07A80181D2054aa225", - abi: [ - { - 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: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - 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: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - 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: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - PNKFaucet: { - address: "0x9f6ffc13B685A68ae359fCA128dfE776458Df464", - abi: [ - { - inputs: [ - { - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "balance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "withdrewAlready", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - PinakionV2: { - address: "0x34B944D42cAcfC8266955D07A80181D2054aa225", - abi: [ - { - 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: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - 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: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - 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: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - PolicyRegistry: { - address: "0x2668c46A14af8997417138B064ca1bEB70769585", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_courtName", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_policy", - type: "string", - }, - ], - name: "PolicyUpdate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "policies", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - internalType: "string", - name: "_courtName", - type: "string", - }, - { - internalType: "string", - name: "_policy", - type: "string", - }, - ], - name: "setPolicy", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - PolicyRegistry_Implementation: { - address: "0x7CC8E0787e381aE159C4d3e137f20f9203313D41", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_courtName", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_policy", - type: "string", - }, - ], - name: "PolicyUpdate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "policies", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - internalType: "string", - name: "_courtName", - type: "string", - }, - { - internalType: "string", - name: "_policy", - type: "string", - }, - ], - name: "setPolicy", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - PolicyRegistry_Proxy: { - address: "0x2668c46A14af8997417138B064ca1bEB70769585", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - RandomizerOracle: { - address: "0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b", - abi: [], - }, - RandomizerRNG: { - address: "0x51a97ad9F0aA818e75819da3cA20CAc319580627", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "callbackGasLimit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IRandomizer", - name: "_randomizer", - type: "address", - }, - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "randomNumbers", - outputs: [ - { - internalType: "uint256", - name: "number", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomizer", - outputs: [ - { - internalType: "contract IRandomizer", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_id", - type: "uint256", - }, - { - internalType: "bytes32", - name: "_value", - type: "bytes32", - }, - ], - name: "randomizerCallback", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "randomizerWithdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "receiveRandomness", - outputs: [ - { - internalType: "uint256", - name: "randomNumber", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "requester", - type: "address", - }, - ], - name: "requesterToID", - outputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_callbackGasLimit", - type: "uint256", - }, - ], - name: "setCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_randomizer", - type: "address", - }, - ], - name: "setRandomizer", - 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: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - RandomizerRNG_Implementation: { - address: "0x1237F02bBeFDAEA20cE3A66aCAe458C4106Ae203", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "callbackGasLimit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IRandomizer", - name: "_randomizer", - type: "address", - }, - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "randomNumbers", - outputs: [ - { - internalType: "uint256", - name: "number", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomizer", - outputs: [ - { - internalType: "contract IRandomizer", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_id", - type: "uint256", - }, - { - internalType: "bytes32", - name: "_value", - type: "bytes32", - }, - ], - name: "randomizerCallback", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "randomizerWithdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "receiveRandomness", - outputs: [ - { - internalType: "uint256", - name: "randomNumber", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "requester", - type: "address", - }, - ], - name: "requesterToID", - outputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_callbackGasLimit", - type: "uint256", - }, - ], - name: "setCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_randomizer", - type: "address", - }, - ], - name: "setRandomizer", - 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", - }, - ], - }, - RandomizerRNG_Proxy: { - address: "0x51a97ad9F0aA818e75819da3cA20CAc319580627", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - SortitionModule: { - address: "0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "LeftoverPNK", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "LeftoverPNKWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "enum ISortitionModule.Phase", - name: "_phase", - type: "uint8", - }, - ], - name: "NewPhase", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "StakeDelayed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_unlock", - type: "bool", - }, - ], - name: "StakeLocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amountAllCourts", - type: "uint256", - }, - ], - name: "StakeSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_maxDrawingTime", - type: "uint256", - }, - ], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_minStakingTime", - type: "uint256", - }, - ], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract RNG", - name: "_rng", - type: "address", - }, - { - internalType: "uint256", - name: "_rngLookahead", - type: "uint256", - }, - ], - name: "changeRandomNumberGenerator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "delayedStakeReadIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delayedStakeWriteIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "delayedStakes", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "bool", - name: "alreadyTransferred", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "disputesWithoutJurors", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "executeDelayedStakes", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getJurorBalance", - outputs: [ - { - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalLocked", - type: "uint256", - }, - { - internalType: "uint256", - name: "stakedInCourt", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbCourts", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorCourtIDs", - outputs: [ - { - internalType: "uint96[]", - name: "", - type: "uint96[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorLeftoverPNK", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "uint256", - name: "_minStakingTime", - type: "uint256", - }, - { - internalType: "uint256", - name: "_maxDrawingTime", - type: "uint256", - }, - { - internalType: "contract RNG", - name: "_rng", - type: "address", - }, - { - internalType: "uint256", - name: "_rngLookahead", - type: "uint256", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize4", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "isJurorStaked", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "jurors", - outputs: [ - { - internalType: "uint256", - name: "stakedPnk", - type: "uint256", - }, - { - internalType: "uint256", - name: "lockedPnk", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastPhaseChange", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "jurorAccount", - type: "address", - }, - { - internalType: "uint96", - name: "courtId", - type: "uint96", - }, - ], - name: "latestDelayedStakeIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "maxDrawingTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "minStakingTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_randomNumber", - type: "uint256", - }, - ], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "passPhase", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "penalizeStake", - outputs: [ - { - internalType: "uint256", - name: "pnkBalance", - type: "uint256", - }, - { - internalType: "uint256", - name: "availablePenalty", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "phase", - outputs: [ - { - internalType: "enum ISortitionModule.Phase", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomNumber", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomNumberRequestBlock", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rng", - outputs: [ - { - internalType: "contract RNG", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rngLookahead", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "_pnkWithdrawal", - type: "uint256", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_ID", - type: "bytes32", - }, - ], - name: "stakeOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "stakeOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "unlockStake", - 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: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "validateStake", - outputs: [ - { - internalType: "uint256", - name: "pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkWithdrawal", - type: "uint256", - }, - { - internalType: "enum StakingResult", - name: "stakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "withdrawLeftoverPNK", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - SortitionModule_Implementation: { - address: "0x0C872eeF07030107b53eaD15bb7dD7E6FBCA2b83", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "LeftoverPNK", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "LeftoverPNKWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "enum ISortitionModule.Phase", - name: "_phase", - type: "uint8", - }, - ], - name: "NewPhase", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "StakeDelayed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_unlock", - type: "bool", - }, - ], - name: "StakeLocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amountAllCourts", - type: "uint256", - }, - ], - name: "StakeSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_maxDrawingTime", - type: "uint256", - }, - ], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_minStakingTime", - type: "uint256", - }, - ], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract RNG", - name: "_rng", - type: "address", - }, - { - internalType: "uint256", - name: "_rngLookahead", - type: "uint256", - }, - ], - name: "changeRandomNumberGenerator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "delayedStakeReadIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delayedStakeWriteIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "delayedStakes", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "bool", - name: "alreadyTransferred", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "disputesWithoutJurors", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "executeDelayedStakes", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getJurorBalance", - outputs: [ - { - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalLocked", - type: "uint256", - }, - { - internalType: "uint256", - name: "stakedInCourt", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbCourts", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorCourtIDs", - outputs: [ - { - internalType: "uint96[]", - name: "", - type: "uint96[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorLeftoverPNK", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "uint256", - name: "_minStakingTime", - type: "uint256", - }, - { - internalType: "uint256", - name: "_maxDrawingTime", - type: "uint256", - }, - { - internalType: "contract RNG", - name: "_rng", - type: "address", - }, - { - internalType: "uint256", - name: "_rngLookahead", - type: "uint256", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize4", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "isJurorStaked", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "jurors", - outputs: [ - { - internalType: "uint256", - name: "stakedPnk", - type: "uint256", - }, - { - internalType: "uint256", - name: "lockedPnk", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastPhaseChange", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "jurorAccount", - type: "address", - }, - { - internalType: "uint96", - name: "courtId", - type: "uint96", - }, - ], - name: "latestDelayedStakeIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "maxDrawingTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "minStakingTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_randomNumber", - type: "uint256", - }, - ], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "passPhase", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "penalizeStake", - outputs: [ - { - internalType: "uint256", - name: "pnkBalance", - type: "uint256", - }, - { - internalType: "uint256", - name: "availablePenalty", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "phase", - outputs: [ - { - internalType: "enum ISortitionModule.Phase", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomNumber", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomNumberRequestBlock", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rng", - outputs: [ - { - internalType: "contract RNG", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rngLookahead", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "_pnkWithdrawal", - type: "uint256", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_ID", - type: "bytes32", - }, - ], - name: "stakeOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "stakeOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "unlockStake", - 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: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "validateStake", - outputs: [ - { - internalType: "uint256", - name: "pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkWithdrawal", - type: "uint256", - }, - { - internalType: "enum StakingResult", - name: "stakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "withdrawLeftoverPNK", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - SortitionModule_Proxy: { - address: "0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - TransactionBatcher: { - address: "0x35f93986950804ac1F93519BF68C2a7Dd776db0E", - abi: [ - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "datas", - type: "bytes[]", - }, - ], - name: "batchSend", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "datas", - type: "bytes[]", - }, - ], - name: "batchSendUnchecked", - outputs: [], - stateMutability: "payable", - type: "function", - }, - ], - }, - WETH: { - address: "0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511", - abi: [ - { - inputs: [ - { - internalType: "string", - name: "_name", - type: "string", - }, - { - internalType: "string", - name: "_symbol", - type: "string", - }, - ], - 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: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - 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: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - 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: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - WETHFaucet: { - address: "0x922B84134e41BC5c9EDE7D5EFCE22Ba3D0e71835", - abi: [ - { - inputs: [ - { - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "balance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "withdrewAlready", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - VeaInboxArbToEthDevnet: { - address: "0xF6C5640de593fEf76129F1F1A863F7ddc65776C9", - abi: [ - { - inputs: [ - { - internalType: "uint256", - name: "_epochPeriod", - type: "uint256", - }, - { - internalType: "address", - name: "_veaOutboxArbToEth", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "_nodeData", - type: "bytes", - }, - ], - name: "MessageSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "_snapshot", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - indexed: false, - internalType: "uint64", - name: "_count", - type: "uint64", - }, - ], - name: "SnapshotSaved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_epochSent", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes32", - name: "_ticketId", - type: "bytes32", - }, - ], - name: "SnapshotSent", - type: "event", - }, - { - inputs: [], - name: "count", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_timestamp", - type: "uint256", - }, - ], - name: "epochAt", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochFinalized", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochNow", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "saveSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_to", - type: "address", - }, - { - internalType: "bytes4", - name: "_fnSelector", - type: "bytes4", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "sendMessage", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - components: [ - { - internalType: "bytes32", - name: "stateRoot", - type: "bytes32", - }, - { - internalType: "address", - name: "claimer", - type: "address", - }, - { - internalType: "uint32", - name: "timestampClaimed", - type: "uint32", - }, - { - internalType: "uint32", - name: "timestampVerification", - type: "uint32", - }, - { - internalType: "uint32", - name: "blocknumberVerification", - type: "uint32", - }, - { - internalType: "enum Party", - name: "honest", - type: "uint8", - }, - { - internalType: "address", - name: "challenger", - type: "address", - }, - ], - internalType: "struct Claim", - name: "_claim", - type: "tuple", - }, - ], - name: "sendSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - name: "snapshots", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "veaOutboxArbToEth", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - VeaInboxArbToEthTestnet: { - address: "0xE12daFE59Bc3A996362d54b37DFd2BA9279cAd06", - abi: [ - { - inputs: [ - { - internalType: "uint256", - name: "_epochPeriod", - type: "uint256", - }, - { - internalType: "address", - name: "_veaOutboxArbToEth", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "_nodeData", - type: "bytes", - }, - ], - name: "MessageSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "_snapshot", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - indexed: false, - internalType: "uint64", - name: "_count", - type: "uint64", - }, - ], - name: "SnapshotSaved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_epochSent", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes32", - name: "_ticketId", - type: "bytes32", - }, - ], - name: "SnapshotSent", - type: "event", - }, - { - inputs: [], - name: "count", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_timestamp", - type: "uint256", - }, - ], - name: "epochAt", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochFinalized", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochNow", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "saveSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_to", - type: "address", - }, - { - internalType: "bytes4", - name: "_fnSelector", - type: "bytes4", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "sendMessage", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - components: [ - { - internalType: "bytes32", - name: "stateRoot", - type: "bytes32", - }, - { - internalType: "address", - name: "claimer", - type: "address", - }, - { - internalType: "uint32", - name: "timestampClaimed", - type: "uint32", - }, - { - internalType: "uint32", - name: "timestampVerification", - type: "uint32", - }, - { - internalType: "uint32", - name: "blocknumberVerification", - type: "uint32", - }, - { - internalType: "enum Party", - name: "honest", - type: "uint8", - }, - { - internalType: "address", - name: "challenger", - type: "address", - }, - ], - internalType: "struct Claim", - name: "_claim", - type: "tuple", - }, - ], - name: "sendSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - name: "snapshots", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "veaOutboxArbToEth", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - VeaInboxArbToGnosisDevnet: { - address: "0xF6286b9C6c7F1B33Ea976FA43434027c7b8421A7", - abi: [ - { - inputs: [ - { - internalType: "uint256", - name: "_epochPeriod", - type: "uint256", - }, - { - internalType: "address", - name: "_routerArbToGnosis", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "_nodeData", - type: "bytes", - }, - ], - name: "MessageSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "_snapshot", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - indexed: false, - internalType: "uint64", - name: "_count", - type: "uint64", - }, - ], - name: "SnapshotSaved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_epochSent", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes32", - name: "_ticketId", - type: "bytes32", - }, - ], - name: "SnapshotSent", - type: "event", - }, - { - inputs: [], - name: "count", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_timestamp", - type: "uint256", - }, - ], - name: "epochAt", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochFinalized", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochNow", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "routerArbToGnosis", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "saveSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_to", - type: "address", - }, - { - internalType: "bytes4", - name: "_fnSelector", - type: "bytes4", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "sendMessage", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - internalType: "uint256", - name: "_gasLimit", - type: "uint256", - }, - { - components: [ - { - internalType: "bytes32", - name: "stateRoot", - type: "bytes32", - }, - { - internalType: "address", - name: "claimer", - type: "address", - }, - { - internalType: "uint32", - name: "timestampClaimed", - type: "uint32", - }, - { - internalType: "uint32", - name: "timestampVerification", - type: "uint32", - }, - { - internalType: "uint32", - name: "blocknumberVerification", - type: "uint32", - }, - { - internalType: "enum Party", - name: "honest", - type: "uint8", - }, - { - internalType: "address", - name: "challenger", - type: "address", - }, - ], - internalType: "struct Claim", - name: "_claim", - type: "tuple", - }, - ], - name: "sendSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - name: "snapshots", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - VeaInboxArbToGnosisTestnet: { - address: "0x62403e9Fbac618301175C89fb21920e4FF235A6a", - abi: [ - { - inputs: [ - { - internalType: "uint256", - name: "_epochPeriod", - type: "uint256", - }, - { - internalType: "address", - name: "_routerArbToGnosis", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "_nodeData", - type: "bytes", - }, - ], - name: "MessageSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "_snapshot", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - indexed: false, - internalType: "uint64", - name: "_count", - type: "uint64", - }, - ], - name: "SnapshotSaved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_epochSent", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes32", - name: "_ticketId", - type: "bytes32", - }, - ], - name: "SnapshotSent", - type: "event", - }, - { - inputs: [], - name: "count", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_timestamp", - type: "uint256", - }, - ], - name: "epochAt", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochFinalized", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochNow", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "routerArbToGnosis", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "saveSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_to", - type: "address", - }, - { - internalType: "bytes4", - name: "_fnSelector", - type: "bytes4", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "sendMessage", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - internalType: "uint256", - name: "_gasLimit", - type: "uint256", - }, - { - components: [ - { - internalType: "bytes32", - name: "stateRoot", - type: "bytes32", - }, - { - internalType: "address", - name: "claimer", - type: "address", - }, - { - internalType: "uint32", - name: "timestampClaimed", - type: "uint32", - }, - { - internalType: "uint32", - name: "timestampVerification", - type: "uint32", - }, - { - internalType: "uint32", - name: "blocknumberVerification", - type: "uint32", - }, - { - internalType: "enum Party", - name: "honest", - type: "uint8", - }, - { - internalType: "address", - name: "challenger", - type: "address", - }, - ], - internalType: "struct Claim", - name: "_claim", - type: "tuple", - }, - ], - name: "sendSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - name: "snapshots", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - }, -} as const; diff --git a/contracts/deployments/arbitrumSepolia/.chainId b/contracts/deployments/arbitrumSepolia/.chainId deleted file mode 100644 index 357f9c751..000000000 --- a/contracts/deployments/arbitrumSepolia/.chainId +++ /dev/null @@ -1 +0,0 @@ -421614 diff --git a/contracts/deployments/arbitrumSepolia/BlockHashRNG.json b/contracts/deployments/arbitrumSepolia/BlockHashRNG.json deleted file mode 100644 index 79c21e096..000000000 --- a/contracts/deployments/arbitrumSepolia/BlockHashRNG.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "address": "0x0298a3EFa6Faf90865725E2b48Cf0F66e5d52754", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "block", - "type": "uint256" - } - ], - "name": "randomNumbers", - "outputs": [ - { - "internalType": "uint256", - "name": "number", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "receiveRandomness", - "outputs": [ - { - "internalType": "uint256", - "name": "randomNumber", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "requestRandomness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x4977e90ed984861e83438079b454ac095962773d9b0c43e0518644354dc3dd40", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x0298a3EFa6Faf90865725E2b48Cf0F66e5d52754", - "transactionIndex": 1, - "gasUsed": "141446", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3d5075badf7f3a8669b37392af7e8a663c98e999a40cce679fd132316ca66e4d", - "transactionHash": "0x4977e90ed984861e83438079b454ac095962773d9b0c43e0518644354dc3dd40", - "logs": [], - "blockNumber": 94823214, - "cumulativeGasUsed": "141446", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "464986207bfd65f93de9fcb4daa23259", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"randomNumbers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"receiveRandomness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"requestRandomness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Cl\\u00e9ment Lesaege - \",\"details\":\"Random Number Generator returning the blockhash with a fallback behaviour. In case no one called it within the 256 blocks, it returns the previous blockhash. This contract must be used when returning 0 is a worse failure mode than returning another blockhash. Allows saving the random number for use in the future. It allows the contract to still access the blockhash even after 256 blocks.\",\"kind\":\"dev\",\"methods\":{\"receiveRandomness(uint256)\":{\"details\":\"Return the random number. If it has not been saved and is still computable compute it.\",\"params\":{\"_block\":\"Block the random number is linked to.\"},\"returns\":{\"randomNumber\":\"The random number or 0 if it is not ready or has not been requested.\"}},\"requestRandomness(uint256)\":{\"details\":\"Request a random number.\",\"params\":{\"_block\":\"Block the random number is linked to.\"}}},\"title\":\"Random Number Generator using blockhash with fallback.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rng/BlockhashRNG.sol\":\"BlockHashRNG\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/rng/BlockhashRNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./RNG.sol\\\";\\n\\n/// @title Random Number Generator using blockhash with fallback.\\n/// @author Cl\\u00e9ment Lesaege - \\n/// @dev\\n/// Random Number Generator returning the blockhash with a fallback behaviour.\\n/// In case no one called it within the 256 blocks, it returns the previous blockhash.\\n/// This contract must be used when returning 0 is a worse failure mode than returning another blockhash.\\n/// Allows saving the random number for use in the future. It allows the contract to still access the blockhash even after 256 blocks.\\ncontract BlockHashRNG is RNG {\\n mapping(uint256 block => uint256 number) public randomNumbers; // randomNumbers[block] is the random number for this block, 0 otherwise.\\n\\n /// @dev Request a random number.\\n /// @param _block Block the random number is linked to.\\n function requestRandomness(uint256 _block) external override {\\n // nop\\n }\\n\\n /// @dev Return the random number. If it has not been saved and is still computable compute it.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber The random number or 0 if it is not ready or has not been requested.\\n function receiveRandomness(uint256 _block) external override returns (uint256 randomNumber) {\\n randomNumber = randomNumbers[_block];\\n if (randomNumber != 0) {\\n return randomNumber;\\n }\\n\\n if (_block < block.number) {\\n // The random number is not already set and can be.\\n if (blockhash(_block) != 0x0) {\\n // Normal case.\\n randomNumber = uint256(blockhash(_block));\\n } else {\\n // The contract was not called in time. Fallback to returning previous blockhash.\\n randomNumber = uint256(blockhash(block.number - 1));\\n }\\n }\\n randomNumbers[_block] = randomNumber;\\n }\\n}\\n\",\"keccak256\":\"0xb2ae9b40700c5915c1cbe57dde68486b669cfea1fdfec18d5b42ffbde44031de\",\"license\":\"MIT\"},\"src/rng/RNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\ninterface RNG {\\n /// @dev Request a random number.\\n /// @param _block Block linked to the request.\\n function requestRandomness(uint256 _block) external;\\n\\n /// @dev Receive the random number.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber Random Number. If the number is not ready or has not been required 0 instead.\\n function receiveRandomness(uint256 _block) external returns (uint256 randomNumber);\\n}\\n\",\"keccak256\":\"0xf92e0cf768afefc5cc6ef786c263b67dd00c021aa5753213dbbc33014adb68c5\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50610169806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806313cf9054146100465780635257cd901461006b5780637363ae1f1461008b575b600080fd5b6100596100543660046100f3565b61009e565b60405190815260200160405180910390f35b6100596100793660046100f3565b60006020819052908152604090205481565b61009c6100993660046100f3565b50565b005b60008181526020819052604090205480156100b857919050565b438210156100de578140156100cf575080406100de565b6100da60014361010c565b4090505b60009182526020829052604090912081905590565b60006020828403121561010557600080fd5b5035919050565b8181038181111561012d57634e487b7160e01b600052601160045260246000fd5b9291505056fea26469706673582212208af4d57cc9727b11cb8cd9b8e8dca8477db4c383e58db8f1fbccf103ef66318d64736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806313cf9054146100465780635257cd901461006b5780637363ae1f1461008b575b600080fd5b6100596100543660046100f3565b61009e565b60405190815260200160405180910390f35b6100596100793660046100f3565b60006020819052908152604090205481565b61009c6100993660046100f3565b50565b005b60008181526020819052604090205480156100b857919050565b438210156100de578140156100cf575080406100de565b6100da60014361010c565b4090505b60009182526020829052604090912081905590565b60006020828403121561010557600080fd5b5035919050565b8181038181111561012d57634e487b7160e01b600052601160045260246000fd5b9291505056fea26469706673582212208af4d57cc9727b11cb8cd9b8e8dca8477db4c383e58db8f1fbccf103ef66318d64736f6c63430008180033", - "devdoc": { - "author": "Clément Lesaege - ", - "details": "Random Number Generator returning the blockhash with a fallback behaviour. In case no one called it within the 256 blocks, it returns the previous blockhash. This contract must be used when returning 0 is a worse failure mode than returning another blockhash. Allows saving the random number for use in the future. It allows the contract to still access the blockhash even after 256 blocks.", - "kind": "dev", - "methods": { - "receiveRandomness(uint256)": { - "details": "Return the random number. If it has not been saved and is still computable compute it.", - "params": { - "_block": "Block the random number is linked to." - }, - "returns": { - "randomNumber": "The random number or 0 if it is not ready or has not been requested." - } - }, - "requestRandomness(uint256)": { - "details": "Request a random number.", - "params": { - "_block": "Block the random number is linked to." - } - } - }, - "title": "Random Number Generator using blockhash with fallback.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 34514, - "contract": "src/rng/BlockhashRNG.sol:BlockHashRNG", - "label": "randomNumbers", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/ChainlinkRNG.json b/contracts/deployments/arbitrumSepolia/ChainlinkRNG.json deleted file mode 100644 index d0d5dd139..000000000 --- a/contracts/deployments/arbitrumSepolia/ChainlinkRNG.json +++ /dev/null @@ -1,749 +0,0 @@ -{ - "address": "0xAd5cCc93429e3A977c273cEeD106Ef16A69EAf79", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_sortitionModule", - "type": "address" - }, - { - "internalType": "address", - "name": "_vrfCoordinator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_keyHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_subscriptionId", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "_requestConfirmations", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "_callbackGasLimit", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "have", - "type": "address" - }, - { - "internalType": "address", - "name": "want", - "type": "address" - } - ], - "name": "OnlyCoordinatorCanFulfill", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "have", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "coordinator", - "type": "address" - } - ], - "name": "OnlyOwnerOrCoordinator", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "vrfCoordinator", - "type": "address" - } - ], - "name": "CoordinatorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "randomWord", - "type": "uint256" - } - ], - "name": "RequestFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "name": "RequestSent", - "type": "event" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "callbackGasLimit", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_callbackGasLimit", - "type": "uint32" - } - ], - "name": "changeCallbackGasLimit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_keyHash", - "type": "bytes32" - } - ], - "name": "changeKeyHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_requestConfirmations", - "type": "uint16" - } - ], - "name": "changeRequestConfirmations", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_subscriptionId", - "type": "uint256" - } - ], - "name": "changeSubscriptionId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_vrfCoordinator", - "type": "address" - } - ], - "name": "changeVrfCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keyHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastRequestId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "name": "randomNumbers", - "outputs": [ - { - "internalType": "uint256", - "name": "number", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "randomWords", - "type": "uint256[]" - } - ], - "name": "rawFulfillRandomWords", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "receiveRandomness", - "outputs": [ - { - "internalType": "uint256", - "name": "randomNumber", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "requestConfirmations", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "requestRandomness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "s_vrfCoordinator", - "outputs": [ - { - "internalType": "contract IVRFCoordinatorV2Plus", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_vrfCoordinator", - "type": "address" - } - ], - "name": "setCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "subscriptionId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x40a4e8c98cb08f8cbfb734bbe1fdb551035cb3bce73044eba88b8bc2723ed44c", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xAd5cCc93429e3A977c273cEeD106Ef16A69EAf79", - "transactionIndex": 3, - "gasUsed": "1670556", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xcb374d845b9e5586106b1ae48e46d1e3cd94a0e059a21decb57ff5c08ba982d3", - "transactionHash": "0x40a4e8c98cb08f8cbfb734bbe1fdb551035cb3bce73044eba88b8bc2723ed44c", - "logs": [], - "blockNumber": 105821815, - "cumulativeGasUsed": "2209341", - "status": 1, - "byzantium": true - }, - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0x5CE8D5A2BC84beb22a398CCA51996F7930313D61", - "0x1770bdc7eec7771f7ba4ffd640f34260d7f095b79c92d34a5b2551d6f6cfd2be", - "38502597312983100069991953687934627561654236680431968938019951490339399569548", - 200, - 100000 - ], - "numDeployments": 1, - "solcInputHash": "409820253ec776b564318c3061b7e926", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_sortitionModule\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vrfCoordinator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_keyHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_subscriptionId\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"_requestConfirmations\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"_callbackGasLimit\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"have\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"want\",\"type\":\"address\"}],\"name\":\"OnlyCoordinatorCanFulfill\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"have\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"coordinator\",\"type\":\"address\"}],\"name\":\"OnlyOwnerOrCoordinator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"vrfCoordinator\",\"type\":\"address\"}],\"name\":\"CoordinatorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"randomWord\",\"type\":\"uint256\"}],\"name\":\"RequestFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"RequestSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"callbackGasLimit\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_callbackGasLimit\",\"type\":\"uint32\"}],\"name\":\"changeCallbackGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_keyHash\",\"type\":\"bytes32\"}],\"name\":\"changeKeyHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_requestConfirmations\",\"type\":\"uint16\"}],\"name\":\"changeRequestConfirmations\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sortitionModule\",\"type\":\"address\"}],\"name\":\"changeSortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_subscriptionId\",\"type\":\"uint256\"}],\"name\":\"changeSubscriptionId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vrfCoordinator\",\"type\":\"address\"}],\"name\":\"changeVrfCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keyHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastRequestId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"randomNumbers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"randomWords\",\"type\":\"uint256[]\"}],\"name\":\"rawFulfillRandomWords\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"receiveRandomness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestConfirmations\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"requestRandomness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_vrfCoordinator\",\"outputs\":[{\"internalType\":\"contract IVRFCoordinatorV2Plus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vrfCoordinator\",\"type\":\"address\"}],\"name\":\"setCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sortitionModule\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subscriptionId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RequestFulfilled(uint256,uint256)\":{\"params\":{\"randomWord\":\"The random value answering the request.\",\"requestId\":\"The ID of the request\"}},\"RequestSent(uint256)\":{\"details\":\"Emitted when a request is sent to the VRF Coordinator\",\"params\":{\"requestId\":\"The ID of the request\"}}},\"kind\":\"dev\",\"methods\":{\"changeCallbackGasLimit(uint32)\":{\"details\":\"Changes the callback gas limit of the contract.\",\"params\":{\"_callbackGasLimit\":\"The new callback gas limit.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the governor of the contract.\",\"params\":{\"_governor\":\"The new governor.\"}},\"changeKeyHash(bytes32)\":{\"details\":\"Changes the key hash of the contract.\",\"params\":{\"_keyHash\":\"The new key hash.\"}},\"changeRequestConfirmations(uint16)\":{\"details\":\"Changes the request confirmations of the contract.\",\"params\":{\"_requestConfirmations\":\"The new request confirmations.\"}},\"changeSortitionModule(address)\":{\"details\":\"Changes the sortition module of the contract.\",\"params\":{\"_sortitionModule\":\"The new sortition module.\"}},\"changeSubscriptionId(uint256)\":{\"details\":\"Changes the subscription ID of the contract.\",\"params\":{\"_subscriptionId\":\"The new subscription ID.\"}},\"changeVrfCoordinator(address)\":{\"details\":\"Changes the VRF Coordinator of the contract.\",\"params\":{\"_vrfCoordinator\":\"The new VRF Coordinator.\"}},\"constructor\":{\"details\":\"Constructor, initializing the implementation to reduce attack surface.https://docs.chain.link/vrf/v2-5/subscription/get-a-random-number\",\"params\":{\"_callbackGasLimit\":\"The limit for how much gas to use for the callback request to the contract's fulfillRandomWords() function.\",\"_governor\":\"The Governor of the contract.\",\"_keyHash\":\"The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job).\",\"_requestConfirmations\":\"How many confirmations the Chainlink node should wait before responding.\",\"_sortitionModule\":\"The address of the SortitionModule contract.\",\"_subscriptionId\":\"The unique identifier of the subscription used for funding requests.\",\"_vrfCoordinator\":\"The address of the VRFCoordinator contract.\"}},\"receiveRandomness(uint256)\":{\"details\":\"Return the random number.\",\"returns\":{\"randomNumber\":\"The random number or 0 if it is not ready or has not been requested.\"}},\"requestRandomness(uint256)\":{\"details\":\"Request a random number. SortitionModule only.\"}},\"title\":\"Random Number Generator that uses Chainlink VRF v2.5 https://blog.chain.link/introducing-vrf-v2-5/\",\"version\":1},\"userdoc\":{\"events\":{\"RequestFulfilled(uint256,uint256)\":{\"notice\":\"Emitted when a request has been fulfilled.\"}},\"kind\":\"user\",\"methods\":{\"acceptOwnership()\":{\"notice\":\"Allows an ownership transfer to be completed by the recipient.\"},\"owner()\":{\"notice\":\"Get the current owner\"},\"setCoordinator(address)\":{\"notice\":\"Sets the VRF Coordinator addressThis method should only be callable by the coordinator or contract owner\"},\"transferOwnership(address)\":{\"notice\":\"Allows an owner to begin transferring ownership to a new address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rng/ChainlinkRNG.sol\":\"ChainlinkRNG\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(address newOwner) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\",\"keccak256\":\"0xdcb0e9135ddbe71ee27ba99fa06656960c66c964cf2ecb29696da1c1427d9861\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(address to) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(address to) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x2422a055657a87e98be61f8f31abb1824ec50fd0f73949f4e3c6ac877efb6da8\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(address recipient) external;\\n\\n function acceptOwnership() external;\\n}\\n\",\"keccak256\":\"0x885de72b7b4e4f1bf8ba817a3f2bcc37fd9022d342c4ce76782151c30122d767\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport {IVRFCoordinatorV2Plus} from \\\"./interfaces/IVRFCoordinatorV2Plus.sol\\\";\\nimport {IVRFMigratableConsumerV2Plus} from \\\"./interfaces/IVRFMigratableConsumerV2Plus.sol\\\";\\nimport {ConfirmedOwner} from \\\"../../shared/access/ConfirmedOwner.sol\\\";\\n\\n/** ****************************************************************************\\n * @notice Interface for contracts using VRF randomness\\n * *****************************************************************************\\n * @dev PURPOSE\\n *\\n * @dev Reggie the Random Oracle (not his real job) wants to provide randomness\\n * @dev to Vera the verifier in such a way that Vera can be sure he's not\\n * @dev making his output up to suit himself. Reggie provides Vera a public key\\n * @dev to which he knows the secret key. Each time Vera provides a seed to\\n * @dev Reggie, he gives back a value which is computed completely\\n * @dev deterministically from the seed and the secret key.\\n *\\n * @dev Reggie provides a proof by which Vera can verify that the output was\\n * @dev correctly computed once Reggie tells it to her, but without that proof,\\n * @dev the output is indistinguishable to her from a uniform random sample\\n * @dev from the output space.\\n *\\n * @dev The purpose of this contract is to make it easy for unrelated contracts\\n * @dev to talk to Vera the verifier about the work Reggie is doing, to provide\\n * @dev simple access to a verifiable source of randomness. It ensures 2 things:\\n * @dev 1. The fulfillment came from the VRFCoordinatorV2Plus.\\n * @dev 2. The consumer contract implements fulfillRandomWords.\\n * *****************************************************************************\\n * @dev USAGE\\n *\\n * @dev Calling contracts must inherit from VRFConsumerBaseV2Plus, and can\\n * @dev initialize VRFConsumerBaseV2Plus's attributes in their constructor as\\n * @dev shown:\\n *\\n * @dev contract VRFConsumerV2Plus is VRFConsumerBaseV2Plus {\\n * @dev constructor(, address _vrfCoordinator, address _subOwner)\\n * @dev VRFConsumerBaseV2Plus(_vrfCoordinator, _subOwner) public {\\n * @dev \\n * @dev }\\n * @dev }\\n *\\n * @dev The oracle will have given you an ID for the VRF keypair they have\\n * @dev committed to (let's call it keyHash). Create a subscription, fund it\\n * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface\\n * @dev subscription management functions).\\n * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations,\\n * @dev callbackGasLimit, numWords, extraArgs),\\n * @dev see (IVRFCoordinatorV2Plus for a description of the arguments).\\n *\\n * @dev Once the VRFCoordinatorV2Plus has received and validated the oracle's response\\n * @dev to your request, it will call your contract's fulfillRandomWords method.\\n *\\n * @dev The randomness argument to fulfillRandomWords is a set of random words\\n * @dev generated from your requestId and the blockHash of the request.\\n *\\n * @dev If your contract could have concurrent requests open, you can use the\\n * @dev requestId returned from requestRandomWords to track which response is associated\\n * @dev with which randomness request.\\n * @dev See \\\"SECURITY CONSIDERATIONS\\\" for principles to keep in mind,\\n * @dev if your contract could have multiple requests in flight simultaneously.\\n *\\n * @dev Colliding `requestId`s are cryptographically impossible as long as seeds\\n * @dev differ.\\n *\\n * *****************************************************************************\\n * @dev SECURITY CONSIDERATIONS\\n *\\n * @dev A method with the ability to call your fulfillRandomness method directly\\n * @dev could spoof a VRF response with any random value, so it's critical that\\n * @dev it cannot be directly called by anything other than this base contract\\n * @dev (specifically, by the VRFConsumerBaseV2Plus.rawFulfillRandomness method).\\n *\\n * @dev For your users to trust that your contract's random behavior is free\\n * @dev from malicious interference, it's best if you can write it so that all\\n * @dev behaviors implied by a VRF response are executed *during* your\\n * @dev fulfillRandomness method. If your contract must store the response (or\\n * @dev anything derived from it) and use it later, you must ensure that any\\n * @dev user-significant behavior which depends on that stored value cannot be\\n * @dev manipulated by a subsequent VRF request.\\n *\\n * @dev Similarly, both miners and the VRF oracle itself have some influence\\n * @dev over the order in which VRF responses appear on the blockchain, so if\\n * @dev your contract could have multiple VRF requests in flight simultaneously,\\n * @dev you must ensure that the order in which the VRF responses arrive cannot\\n * @dev be used to manipulate your contract's user-significant behavior.\\n *\\n * @dev Since the block hash of the block which contains the requestRandomness\\n * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful\\n * @dev miner could, in principle, fork the blockchain to evict the block\\n * @dev containing the request, forcing the request to be included in a\\n * @dev different block with a different hash, and therefore a different input\\n * @dev to the VRF. However, such an attack would incur a substantial economic\\n * @dev cost. This cost scales with the number of blocks the VRF oracle waits\\n * @dev until it calls responds to a request. It is for this reason that\\n * @dev that you can signal to an oracle you'd like them to wait longer before\\n * @dev responding to the request (however this is not enforced in the contract\\n * @dev and so remains effective only in the case of unmodified oracle software).\\n */\\nabstract contract VRFConsumerBaseV2Plus is IVRFMigratableConsumerV2Plus, ConfirmedOwner {\\n error OnlyCoordinatorCanFulfill(address have, address want);\\n error OnlyOwnerOrCoordinator(address have, address owner, address coordinator);\\n error ZeroAddress();\\n\\n // s_vrfCoordinator should be used by consumers to make requests to vrfCoordinator\\n // so that coordinator reference is updated after migration\\n IVRFCoordinatorV2Plus public s_vrfCoordinator;\\n\\n /**\\n * @param _vrfCoordinator address of VRFCoordinator contract\\n */\\n constructor(address _vrfCoordinator) ConfirmedOwner(msg.sender) {\\n if (_vrfCoordinator == address(0)) {\\n revert ZeroAddress();\\n }\\n s_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator);\\n }\\n\\n /**\\n * @notice fulfillRandomness handles the VRF response. Your contract must\\n * @notice implement it. See \\\"SECURITY CONSIDERATIONS\\\" above for important\\n * @notice principles to keep in mind when implementing your fulfillRandomness\\n * @notice method.\\n *\\n * @dev VRFConsumerBaseV2Plus expects its subcontracts to have a method with this\\n * @dev signature, and will call it once it has verified the proof\\n * @dev associated with the randomness. (It is triggered via a call to\\n * @dev rawFulfillRandomness, below.)\\n *\\n * @param requestId The Id initially returned by requestRandomness\\n * @param randomWords the VRF output expanded to the requested number of words\\n */\\n // solhint-disable-next-line chainlink-solidity/prefix-internal-functions-with-underscore\\n function fulfillRandomWords(uint256 requestId, uint256[] calldata randomWords) internal virtual;\\n\\n // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF\\n // proof. rawFulfillRandomness then calls fulfillRandomness, after validating\\n // the origin of the call\\n function rawFulfillRandomWords(uint256 requestId, uint256[] calldata randomWords) external {\\n if (msg.sender != address(s_vrfCoordinator)) {\\n revert OnlyCoordinatorCanFulfill(msg.sender, address(s_vrfCoordinator));\\n }\\n fulfillRandomWords(requestId, randomWords);\\n }\\n\\n /**\\n * @inheritdoc IVRFMigratableConsumerV2Plus\\n */\\n function setCoordinator(address _vrfCoordinator) external override onlyOwnerOrCoordinator {\\n if (_vrfCoordinator == address(0)) {\\n revert ZeroAddress();\\n }\\n s_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator);\\n\\n emit CoordinatorSet(_vrfCoordinator);\\n }\\n\\n modifier onlyOwnerOrCoordinator() {\\n if (msg.sender != owner() && msg.sender != address(s_vrfCoordinator)) {\\n revert OnlyOwnerOrCoordinator(msg.sender, owner(), address(s_vrfCoordinator));\\n }\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x0c92838396c5abe72754ebeae526a0434dd53fdaf63e6b98111aebd6114cfcc2\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFCoordinatorV2Plus.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {VRFV2PlusClient} from \\\"../libraries/VRFV2PlusClient.sol\\\";\\nimport {IVRFSubscriptionV2Plus} from \\\"./IVRFSubscriptionV2Plus.sol\\\";\\n\\n// Interface that enables consumers of VRFCoordinatorV2Plus to be future-proof for upgrades\\n// This interface is supported by subsequent versions of VRFCoordinatorV2Plus\\ninterface IVRFCoordinatorV2Plus is IVRFSubscriptionV2Plus {\\n /**\\n * @notice Request a set of random words.\\n * @param req - a struct containing following fields for randomness request:\\n * keyHash - Corresponds to a particular oracle job which uses\\n * that key for generating the VRF proof. Different keyHash's have different gas price\\n * ceilings, so you can select a specific one to bound your maximum per request cost.\\n * subId - The ID of the VRF subscription. Must be funded\\n * with the minimum subscription balance required for the selected keyHash.\\n * requestConfirmations - How many blocks you'd like the\\n * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS\\n * for why you may want to request more. The acceptable range is\\n * [minimumRequestBlockConfirmations, 200].\\n * callbackGasLimit - How much gas you'd like to receive in your\\n * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords\\n * may be slightly less than this amount because of gas used calling the function\\n * (argument decoding etc.), so you may need to request slightly more than you expect\\n * to have inside fulfillRandomWords. The acceptable range is\\n * [0, maxGasLimit]\\n * numWords - The number of uint256 random values you'd like to receive\\n * in your fulfillRandomWords callback. Note these numbers are expanded in a\\n * secure way by the VRFCoordinator from a single random value supplied by the oracle.\\n * extraArgs - abi-encoded extra args\\n * @return requestId - A unique identifier of the request. Can be used to match\\n * a request to a response in fulfillRandomWords.\\n */\\n function requestRandomWords(VRFV2PlusClient.RandomWordsRequest calldata req) external returns (uint256 requestId);\\n}\\n\",\"keccak256\":\"0x7dca2a64690ddd95ee05e422e1f61e7c1d701aaf5be1390ae12e9bd144266c36\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFMigratableConsumerV2Plus.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @notice The IVRFMigratableConsumerV2Plus interface defines the\\n/// @notice method required to be implemented by all V2Plus consumers.\\n/// @dev This interface is designed to be used in VRFConsumerBaseV2Plus.\\ninterface IVRFMigratableConsumerV2Plus {\\n event CoordinatorSet(address vrfCoordinator);\\n\\n /// @notice Sets the VRF Coordinator address\\n /// @notice This method should only be callable by the coordinator or contract owner\\n function setCoordinator(address vrfCoordinator) external;\\n}\\n\",\"keccak256\":\"0x8be8744e3b8380dc85354cf110e8caef8f394266e79120ad675a7da835ed2a85\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFSubscriptionV2Plus.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @notice The IVRFSubscriptionV2Plus interface defines the subscription\\n/// @notice related methods implemented by the V2Plus coordinator.\\ninterface IVRFSubscriptionV2Plus {\\n /**\\n * @notice Add a consumer to a VRF subscription.\\n * @param subId - ID of the subscription\\n * @param consumer - New consumer which can use the subscription\\n */\\n function addConsumer(uint256 subId, address consumer) external;\\n\\n /**\\n * @notice Remove a consumer from a VRF subscription.\\n * @param subId - ID of the subscription\\n * @param consumer - Consumer to remove from the subscription\\n */\\n function removeConsumer(uint256 subId, address consumer) external;\\n\\n /**\\n * @notice Cancel a subscription\\n * @param subId - ID of the subscription\\n * @param to - Where to send the remaining LINK to\\n */\\n function cancelSubscription(uint256 subId, address to) external;\\n\\n /**\\n * @notice Accept subscription owner transfer.\\n * @param subId - ID of the subscription\\n * @dev will revert if original owner of subId has\\n * not requested that msg.sender become the new owner.\\n */\\n function acceptSubscriptionOwnerTransfer(uint256 subId) external;\\n\\n /**\\n * @notice Request subscription owner transfer.\\n * @param subId - ID of the subscription\\n * @param newOwner - proposed new owner of the subscription\\n */\\n function requestSubscriptionOwnerTransfer(uint256 subId, address newOwner) external;\\n\\n /**\\n * @notice Create a VRF subscription.\\n * @return subId - A unique subscription id.\\n * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer.\\n * @dev Note to fund the subscription with LINK, use transferAndCall. For example\\n * @dev LINKTOKEN.transferAndCall(\\n * @dev address(COORDINATOR),\\n * @dev amount,\\n * @dev abi.encode(subId));\\n * @dev Note to fund the subscription with Native, use fundSubscriptionWithNative. Be sure\\n * @dev to send Native with the call, for example:\\n * @dev COORDINATOR.fundSubscriptionWithNative{value: amount}(subId);\\n */\\n function createSubscription() external returns (uint256 subId);\\n\\n /**\\n * @notice Get a VRF subscription.\\n * @param subId - ID of the subscription\\n * @return balance - LINK balance of the subscription in juels.\\n * @return nativeBalance - native balance of the subscription in wei.\\n * @return reqCount - Requests count of subscription.\\n * @return owner - owner of the subscription.\\n * @return consumers - list of consumer address which are able to use this subscription.\\n */\\n function getSubscription(\\n uint256 subId\\n )\\n external\\n view\\n returns (uint96 balance, uint96 nativeBalance, uint64 reqCount, address owner, address[] memory consumers);\\n\\n /*\\n * @notice Check to see if there exists a request commitment consumers\\n * for all consumers and keyhashes for a given sub.\\n * @param subId - ID of the subscription\\n * @return true if there exists at least one unfulfilled request for the subscription, false\\n * otherwise.\\n */\\n function pendingRequestExists(uint256 subId) external view returns (bool);\\n\\n /**\\n * @notice Paginate through all active VRF subscriptions.\\n * @param startIndex index of the subscription to start from\\n * @param maxCount maximum number of subscriptions to return, 0 to return all\\n * @dev the order of IDs in the list is **not guaranteed**, therefore, if making successive calls, one\\n * @dev should consider keeping the blockheight constant to ensure a holistic picture of the contract state\\n */\\n function getActiveSubscriptionIds(uint256 startIndex, uint256 maxCount) external view returns (uint256[] memory);\\n\\n /**\\n * @notice Fund a subscription with native.\\n * @param subId - ID of the subscription\\n * @notice This method expects msg.value to be greater than or equal to 0.\\n */\\n function fundSubscriptionWithNative(uint256 subId) external payable;\\n}\\n\",\"keccak256\":\"0x85b348297ce36794e3bf97a47c001fc216bd0ee243e91514a7b395f3fcd189b0\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/libraries/VRFV2PlusClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n// End consumer library.\\nlibrary VRFV2PlusClient {\\n // extraArgs will evolve to support new features\\n bytes4 public constant EXTRA_ARGS_V1_TAG = bytes4(keccak256(\\\"VRF ExtraArgsV1\\\"));\\n struct ExtraArgsV1 {\\n bool nativePayment;\\n }\\n\\n struct RandomWordsRequest {\\n bytes32 keyHash;\\n uint256 subId;\\n uint16 requestConfirmations;\\n uint32 callbackGasLimit;\\n uint32 numWords;\\n bytes extraArgs;\\n }\\n\\n function _argsToBytes(ExtraArgsV1 memory extraArgs) internal pure returns (bytes memory bts) {\\n return abi.encodeWithSelector(EXTRA_ARGS_V1_TAG, extraArgs);\\n }\\n}\\n\",\"keccak256\":\"0x839ad7a737ef18147b518b4ec3cbaf4a49dc994db65cf8369ed4e69d169a98a6\",\"license\":\"MIT\"},\"src/rng/ChainlinkRNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport {VRFConsumerBaseV2Plus, IVRFCoordinatorV2Plus} from \\\"@chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus.sol\\\";\\nimport {VRFV2PlusClient} from \\\"@chainlink/contracts/src/v0.8/vrf/dev/libraries/VRFV2PlusClient.sol\\\";\\n\\nimport \\\"./RNG.sol\\\";\\n\\n/// @title Random Number Generator that uses Chainlink VRF v2.5\\n/// https://blog.chain.link/introducing-vrf-v2-5/\\ncontract ChainlinkRNG is RNG, VRFConsumerBaseV2Plus {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The address that can withdraw funds.\\n address public sortitionModule; // The address of the SortitionModule.\\n bytes32 public keyHash; // The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job).\\n uint256 public subscriptionId; // The unique identifier of the subscription used for funding requests.\\n uint16 public requestConfirmations; // How many confirmations the Chainlink node should wait before responding.\\n // 22 bytes remaining in slot\\n uint32 public callbackGasLimit; // Gas limit for the Chainlink callback.\\n uint256 public lastRequestId; // The last request ID.\\n mapping(uint256 requestId => uint256 number) public randomNumbers; // randomNumbers[requestID] is the random number for this request id, 0 otherwise.\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a request is sent to the VRF Coordinator\\n /// @param requestId The ID of the request\\n event RequestSent(uint256 indexed requestId);\\n\\n /// Emitted when a request has been fulfilled.\\n /// @param requestId The ID of the request\\n /// @param randomWord The random value answering the request.\\n event RequestFulfilled(uint256 indexed requestId, uint256 randomWord);\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Governor only\\\");\\n _;\\n }\\n\\n modifier onlyBySortitionModule() {\\n require(sortitionModule == msg.sender, \\\"SortitionModule only\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n /// @param _governor The Governor of the contract.\\n /// @param _sortitionModule The address of the SortitionModule contract.\\n /// @param _vrfCoordinator The address of the VRFCoordinator contract.\\n /// @param _keyHash The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job).\\n /// @param _subscriptionId The unique identifier of the subscription used for funding requests.\\n /// @param _requestConfirmations How many confirmations the Chainlink node should wait before responding.\\n /// @param _callbackGasLimit The limit for how much gas to use for the callback request to the contract's fulfillRandomWords() function.\\n /// @dev https://docs.chain.link/vrf/v2-5/subscription/get-a-random-number\\n constructor(\\n address _governor,\\n address _sortitionModule,\\n address _vrfCoordinator,\\n bytes32 _keyHash,\\n uint256 _subscriptionId,\\n uint16 _requestConfirmations,\\n uint32 _callbackGasLimit\\n ) VRFConsumerBaseV2Plus(_vrfCoordinator) {\\n governor = _governor;\\n sortitionModule = _sortitionModule;\\n keyHash = _keyHash;\\n subscriptionId = _subscriptionId;\\n requestConfirmations = _requestConfirmations;\\n callbackGasLimit = _callbackGasLimit;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor of the contract.\\n /// @param _governor The new governor.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the sortition module of the contract.\\n /// @param _sortitionModule The new sortition module.\\n function changeSortitionModule(address _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Changes the VRF Coordinator of the contract.\\n /// @param _vrfCoordinator The new VRF Coordinator.\\n function changeVrfCoordinator(address _vrfCoordinator) external onlyByGovernor {\\n s_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator);\\n emit CoordinatorSet(_vrfCoordinator);\\n }\\n\\n /// @dev Changes the key hash of the contract.\\n /// @param _keyHash The new key hash.\\n function changeKeyHash(bytes32 _keyHash) external onlyByGovernor {\\n keyHash = _keyHash;\\n }\\n\\n /// @dev Changes the subscription ID of the contract.\\n /// @param _subscriptionId The new subscription ID.\\n function changeSubscriptionId(uint256 _subscriptionId) external onlyByGovernor {\\n subscriptionId = _subscriptionId;\\n }\\n\\n /// @dev Changes the request confirmations of the contract.\\n /// @param _requestConfirmations The new request confirmations.\\n function changeRequestConfirmations(uint16 _requestConfirmations) external onlyByGovernor {\\n requestConfirmations = _requestConfirmations;\\n }\\n\\n /// @dev Changes the callback gas limit of the contract.\\n /// @param _callbackGasLimit The new callback gas limit.\\n function changeCallbackGasLimit(uint32 _callbackGasLimit) external onlyByGovernor {\\n callbackGasLimit = _callbackGasLimit;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Request a random number. SortitionModule only.\\n function requestRandomness(uint256 /*_block*/) external override onlyBySortitionModule {\\n // Will revert if subscription is not set and funded.\\n uint256 requestId = s_vrfCoordinator.requestRandomWords(\\n VRFV2PlusClient.RandomWordsRequest({\\n keyHash: keyHash,\\n subId: subscriptionId,\\n requestConfirmations: requestConfirmations,\\n callbackGasLimit: callbackGasLimit,\\n numWords: 1,\\n extraArgs: VRFV2PlusClient._argsToBytes(\\n // Set nativePayment to true to pay for VRF requests with ETH instead of LINK\\n VRFV2PlusClient.ExtraArgsV1({nativePayment: true})\\n )\\n })\\n );\\n lastRequestId = requestId;\\n emit RequestSent(requestId);\\n }\\n\\n /// @dev Callback function called by the VRF Coordinator when the random value is generated.\\n /// @param _requestId The ID of the request.\\n /// @param _randomWords The random values answering the request.\\n function fulfillRandomWords(uint256 _requestId, uint256[] calldata _randomWords) internal override {\\n // Access control is handled by the parent VRFCoordinator.rawFulfillRandomWords()\\n randomNumbers[_requestId] = _randomWords[0];\\n emit RequestFulfilled(_requestId, _randomWords[0]);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Return the random number.\\n /// @return randomNumber The random number or 0 if it is not ready or has not been requested.\\n function receiveRandomness(uint256 /*_block*/) external view override returns (uint256 randomNumber) {\\n randomNumber = randomNumbers[lastRequestId];\\n }\\n}\\n\",\"keccak256\":\"0xf132cbbbbb47a4f11c248fab30212a3dd3e7b20b1bc5b543ff21b6d291367dc8\",\"license\":\"MIT\"},\"src/rng/RNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\ninterface RNG {\\n /// @dev Request a random number.\\n /// @param _block Block linked to the request.\\n function requestRandomness(uint256 _block) external;\\n\\n /// @dev Receive the random number.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber Random Number. If the number is not ready or has not been required 0 instead.\\n function receiveRandomness(uint256 _block) external returns (uint256 randomNumber);\\n}\\n\",\"keccak256\":\"0xf92e0cf768afefc5cc6ef786c263b67dd00c021aa5753213dbbc33014adb68c5\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b5060405162000f6038038062000f6083398101604081905262000034916200022d565b8433806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000165565b5050506001600160a01b038116620000ea5760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b03199081166001600160a01b03938416179091556003805482169983169990991790985560048054909816961695909517909555600591909155600655506007805461ffff90931665ffffffffffff19909316929092176201000063ffffffff90921691909102179055620002c5565b336001600160a01b03821603620001bf5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03811681146200022857600080fd5b919050565b600080600080600080600060e0888a0312156200024957600080fd5b620002548862000210565b9650620002646020890162000210565b9550620002746040890162000210565b9450606088015193506080880151925060a088015161ffff811681146200029a57600080fd5b60c089015190925063ffffffff81168114620002b557600080fd5b8091505092959891949750929550565b610c8b80620002d56000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806379ba5097116100c3578063e4c0aaf41161007c578063e4c0aaf4146102e5578063e86a51cb146102f8578063f2fde38b1461030b578063f50d390d1461031e578063f9f5dd9114610331578063fc2a88c31461034457600080fd5b806379ba5097146102725780638da5cb5b1461027a5780638ea981171461028b5780639eccacf61461029e578063b0049637146102b1578063b0fb162f146102c457600080fd5b80632e1daf2f116101155780632e1daf2f146101fd5780632f68f4821461021057806339b1e245146102235780635257cd901461023657806361728f39146102565780637363ae1f1461025f57600080fd5b806309c1ba2e146101525780630c340a241461016e57806313cf9054146101995780631fe543e3146101bd57806324f74697146101d2575b600080fd5b61015b60065481565b6040519081526020015b60405180910390f35b600354610181906001600160a01b031681565b6040516001600160a01b039091168152602001610165565b61015b6101a7366004610a4f565b5060085460009081526009602052604090205490565b6101d06101cb366004610a68565b61034d565b005b6007546101e89062010000900463ffffffff1681565b60405163ffffffff9091168152602001610165565b600454610181906001600160a01b031681565b6101d061021e366004610a4f565b6103a2565b6101d0610231366004610a4f565b6103d1565b61015b610244366004610a4f565b60096020526000908152604090205481565b61015b60055481565b6101d061026d366004610a4f565b610400565b6101d061055b565b6000546001600160a01b0316610181565b6101d0610299366004610ae7565b610605565b600254610181906001600160a01b031681565b6101d06102bf366004610ae7565b6106f7565b6007546102d29061ffff1681565b60405161ffff9091168152602001610165565b6101d06102f3366004610ae7565b610743565b6101d0610306366004610b17565b61078f565b6101d0610319366004610ae7565b6107dd565b6101d061032c366004610b3d565b6107f1565b6101d061033f366004610ae7565b610833565b61015b60085481565b6002546001600160a01b031633146103925760025460405163073e64fd60e21b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b61039d83838361085d565b505050565b6003546001600160a01b031633146103cc5760405162461bcd60e51b815260040161038990610b61565b600555565b6003546001600160a01b031633146103fb5760405162461bcd60e51b815260040161038990610b61565b600655565b6004546001600160a01b031633146104515760405162461bcd60e51b8152602060048201526014602482015273536f72746974696f6e4d6f64756c65206f6e6c7960601b6044820152606401610389565b6002546040805160c081018252600554815260065460208083019190915260075461ffff81168385015262010000900463ffffffff16606083015260016080830181905283519182019093529182526000926001600160a01b031691639b1c385e919060a08201906104c2906108e6565b8152506040518263ffffffff1660e01b81526004016104e19190610b88565b6020604051808303816000875af1158015610500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105249190610c26565b600881905560405190915081907f0cd21a41891ff04ecd9a8754bec97e2fb85d2a4e7694329d4dc364c796f23d0690600090a25050565b6001546001600160a01b031633146105ae5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610389565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000546001600160a01b0316331480159061062b57506002546001600160a01b03163314155b1561067c57336106436000546001600160a01b031690565b60025460405163061db9c160e01b81526001600160a01b0393841660048201529183166024830152919091166044820152606401610389565b6001600160a01b0381166106a35760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd1a6a14209a385a964d036e404cb5cfb71f4000cdb03c9366292430787261be69060200160405180910390a150565b6003546001600160a01b031633146107215760405162461bcd60e51b815260040161038990610b61565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461076d5760405162461bcd60e51b815260040161038990610b61565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146107b95760405162461bcd60e51b815260040161038990610b61565b6007805463ffffffff909216620100000265ffffffff000019909216919091179055565b6107e5610957565b6107ee816109ac565b50565b6003546001600160a01b0316331461081b5760405162461bcd60e51b815260040161038990610b61565b6007805461ffff191661ffff92909216919091179055565b6003546001600160a01b031633146106a35760405162461bcd60e51b815260040161038990610b61565b8181600081811061087057610870610c3f565b905060200201356009600085815260200190815260200160002081905550827f5c69e7026b653d8606b5613bb00fd8c4b0504b1cbe8db600c406faac180924d5838360008181106108c3576108c3610c3f565b905060200201356040516108d991815260200190565b60405180910390a2505050565b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa8260405160240161091f91511515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915292915050565b6000546001600160a01b031633146109aa5760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610389565b565b336001600160a01b038216036109fe5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103a3930b739b332b9103a379039b2b63360491b6044820152606401610389565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610a6157600080fd5b5035919050565b600080600060408486031215610a7d57600080fd5b83359250602084013567ffffffffffffffff80821115610a9c57600080fd5b818601915086601f830112610ab057600080fd5b813581811115610abf57600080fd5b8760208260051b8501011115610ad457600080fd5b6020830194508093505050509250925092565b600060208284031215610af957600080fd5b81356001600160a01b0381168114610b1057600080fd5b9392505050565b600060208284031215610b2957600080fd5b813563ffffffff81168114610b1057600080fd5b600060208284031215610b4f57600080fd5b813561ffff81168114610b1057600080fd5b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b60006020808352835160208401526020840151604084015261ffff6040850151166060840152606084015163ffffffff80821660808601528060808701511660a0860152505060a084015160c08085015280518060e086015260005b81811015610c015782810184015186820161010001528301610be4565b506101009250600083828701015282601f19601f830116860101935050505092915050565b600060208284031215610c3857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212201c20e67178fd79424f46cb830b3496516dfa70ea88c1d07b59de6b70b0f17ca764736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806379ba5097116100c3578063e4c0aaf41161007c578063e4c0aaf4146102e5578063e86a51cb146102f8578063f2fde38b1461030b578063f50d390d1461031e578063f9f5dd9114610331578063fc2a88c31461034457600080fd5b806379ba5097146102725780638da5cb5b1461027a5780638ea981171461028b5780639eccacf61461029e578063b0049637146102b1578063b0fb162f146102c457600080fd5b80632e1daf2f116101155780632e1daf2f146101fd5780632f68f4821461021057806339b1e245146102235780635257cd901461023657806361728f39146102565780637363ae1f1461025f57600080fd5b806309c1ba2e146101525780630c340a241461016e57806313cf9054146101995780631fe543e3146101bd57806324f74697146101d2575b600080fd5b61015b60065481565b6040519081526020015b60405180910390f35b600354610181906001600160a01b031681565b6040516001600160a01b039091168152602001610165565b61015b6101a7366004610a4f565b5060085460009081526009602052604090205490565b6101d06101cb366004610a68565b61034d565b005b6007546101e89062010000900463ffffffff1681565b60405163ffffffff9091168152602001610165565b600454610181906001600160a01b031681565b6101d061021e366004610a4f565b6103a2565b6101d0610231366004610a4f565b6103d1565b61015b610244366004610a4f565b60096020526000908152604090205481565b61015b60055481565b6101d061026d366004610a4f565b610400565b6101d061055b565b6000546001600160a01b0316610181565b6101d0610299366004610ae7565b610605565b600254610181906001600160a01b031681565b6101d06102bf366004610ae7565b6106f7565b6007546102d29061ffff1681565b60405161ffff9091168152602001610165565b6101d06102f3366004610ae7565b610743565b6101d0610306366004610b17565b61078f565b6101d0610319366004610ae7565b6107dd565b6101d061032c366004610b3d565b6107f1565b6101d061033f366004610ae7565b610833565b61015b60085481565b6002546001600160a01b031633146103925760025460405163073e64fd60e21b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b61039d83838361085d565b505050565b6003546001600160a01b031633146103cc5760405162461bcd60e51b815260040161038990610b61565b600555565b6003546001600160a01b031633146103fb5760405162461bcd60e51b815260040161038990610b61565b600655565b6004546001600160a01b031633146104515760405162461bcd60e51b8152602060048201526014602482015273536f72746974696f6e4d6f64756c65206f6e6c7960601b6044820152606401610389565b6002546040805160c081018252600554815260065460208083019190915260075461ffff81168385015262010000900463ffffffff16606083015260016080830181905283519182019093529182526000926001600160a01b031691639b1c385e919060a08201906104c2906108e6565b8152506040518263ffffffff1660e01b81526004016104e19190610b88565b6020604051808303816000875af1158015610500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105249190610c26565b600881905560405190915081907f0cd21a41891ff04ecd9a8754bec97e2fb85d2a4e7694329d4dc364c796f23d0690600090a25050565b6001546001600160a01b031633146105ae5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610389565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000546001600160a01b0316331480159061062b57506002546001600160a01b03163314155b1561067c57336106436000546001600160a01b031690565b60025460405163061db9c160e01b81526001600160a01b0393841660048201529183166024830152919091166044820152606401610389565b6001600160a01b0381166106a35760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd1a6a14209a385a964d036e404cb5cfb71f4000cdb03c9366292430787261be69060200160405180910390a150565b6003546001600160a01b031633146107215760405162461bcd60e51b815260040161038990610b61565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461076d5760405162461bcd60e51b815260040161038990610b61565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146107b95760405162461bcd60e51b815260040161038990610b61565b6007805463ffffffff909216620100000265ffffffff000019909216919091179055565b6107e5610957565b6107ee816109ac565b50565b6003546001600160a01b0316331461081b5760405162461bcd60e51b815260040161038990610b61565b6007805461ffff191661ffff92909216919091179055565b6003546001600160a01b031633146106a35760405162461bcd60e51b815260040161038990610b61565b8181600081811061087057610870610c3f565b905060200201356009600085815260200190815260200160002081905550827f5c69e7026b653d8606b5613bb00fd8c4b0504b1cbe8db600c406faac180924d5838360008181106108c3576108c3610c3f565b905060200201356040516108d991815260200190565b60405180910390a2505050565b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa8260405160240161091f91511515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915292915050565b6000546001600160a01b031633146109aa5760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610389565b565b336001600160a01b038216036109fe5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103a3930b739b332b9103a379039b2b63360491b6044820152606401610389565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610a6157600080fd5b5035919050565b600080600060408486031215610a7d57600080fd5b83359250602084013567ffffffffffffffff80821115610a9c57600080fd5b818601915086601f830112610ab057600080fd5b813581811115610abf57600080fd5b8760208260051b8501011115610ad457600080fd5b6020830194508093505050509250925092565b600060208284031215610af957600080fd5b81356001600160a01b0381168114610b1057600080fd5b9392505050565b600060208284031215610b2957600080fd5b813563ffffffff81168114610b1057600080fd5b600060208284031215610b4f57600080fd5b813561ffff81168114610b1057600080fd5b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b60006020808352835160208401526020840151604084015261ffff6040850151166060840152606084015163ffffffff80821660808601528060808701511660a0860152505060a084015160c08085015280518060e086015260005b81811015610c015782810184015186820161010001528301610be4565b506101009250600083828701015282601f19601f830116860101935050505092915050565b600060208284031215610c3857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212201c20e67178fd79424f46cb830b3496516dfa70ea88c1d07b59de6b70b0f17ca764736f6c63430008180033", - "devdoc": { - "events": { - "RequestFulfilled(uint256,uint256)": { - "params": { - "randomWord": "The random value answering the request.", - "requestId": "The ID of the request" - } - }, - "RequestSent(uint256)": { - "details": "Emitted when a request is sent to the VRF Coordinator", - "params": { - "requestId": "The ID of the request" - } - } - }, - "kind": "dev", - "methods": { - "changeCallbackGasLimit(uint32)": { - "details": "Changes the callback gas limit of the contract.", - "params": { - "_callbackGasLimit": "The new callback gas limit." - } - }, - "changeGovernor(address)": { - "details": "Changes the governor of the contract.", - "params": { - "_governor": "The new governor." - } - }, - "changeKeyHash(bytes32)": { - "details": "Changes the key hash of the contract.", - "params": { - "_keyHash": "The new key hash." - } - }, - "changeRequestConfirmations(uint16)": { - "details": "Changes the request confirmations of the contract.", - "params": { - "_requestConfirmations": "The new request confirmations." - } - }, - "changeSortitionModule(address)": { - "details": "Changes the sortition module of the contract.", - "params": { - "_sortitionModule": "The new sortition module." - } - }, - "changeSubscriptionId(uint256)": { - "details": "Changes the subscription ID of the contract.", - "params": { - "_subscriptionId": "The new subscription ID." - } - }, - "changeVrfCoordinator(address)": { - "details": "Changes the VRF Coordinator of the contract.", - "params": { - "_vrfCoordinator": "The new VRF Coordinator." - } - }, - "constructor": { - "details": "Constructor, initializing the implementation to reduce attack surface.https://docs.chain.link/vrf/v2-5/subscription/get-a-random-number", - "params": { - "_callbackGasLimit": "The limit for how much gas to use for the callback request to the contract's fulfillRandomWords() function.", - "_governor": "The Governor of the contract.", - "_keyHash": "The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job).", - "_requestConfirmations": "How many confirmations the Chainlink node should wait before responding.", - "_sortitionModule": "The address of the SortitionModule contract.", - "_subscriptionId": "The unique identifier of the subscription used for funding requests.", - "_vrfCoordinator": "The address of the VRFCoordinator contract." - } - }, - "receiveRandomness(uint256)": { - "details": "Return the random number.", - "returns": { - "randomNumber": "The random number or 0 if it is not ready or has not been requested." - } - }, - "requestRandomness(uint256)": { - "details": "Request a random number. SortitionModule only." - } - }, - "title": "Random Number Generator that uses Chainlink VRF v2.5 https://blog.chain.link/introducing-vrf-v2-5/", - "version": 1 - }, - "userdoc": { - "events": { - "RequestFulfilled(uint256,uint256)": { - "notice": "Emitted when a request has been fulfilled." - } - }, - "kind": "user", - "methods": { - "acceptOwnership()": { - "notice": "Allows an ownership transfer to be completed by the recipient." - }, - "owner()": { - "notice": "Get the current owner" - }, - "setCoordinator(address)": { - "notice": "Sets the VRF Coordinator addressThis method should only be callable by the coordinator or contract owner" - }, - "transferOwnership(address)": { - "notice": "Allows an owner to begin transferring ownership to a new address." - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 29, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "s_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 31, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "s_pendingOwner", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 231, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "s_vrfCoordinator", - "offset": 0, - "slot": "2", - "type": "t_contract(IVRFCoordinatorV2Plus)380" - }, - { - "astId": 35404, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "governor", - "offset": 0, - "slot": "3", - "type": "t_address" - }, - { - "astId": 35406, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "sortitionModule", - "offset": 0, - "slot": "4", - "type": "t_address" - }, - { - "astId": 35408, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "keyHash", - "offset": 0, - "slot": "5", - "type": "t_bytes32" - }, - { - "astId": 35410, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "subscriptionId", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 35412, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "requestConfirmations", - "offset": 0, - "slot": "7", - "type": "t_uint16" - }, - { - "astId": 35414, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "callbackGasLimit", - "offset": 2, - "slot": "7", - "type": "t_uint32" - }, - { - "astId": 35416, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "lastRequestId", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 35420, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "randomNumbers", - "offset": 0, - "slot": "9", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_contract(IVRFCoordinatorV2Plus)380": { - "encoding": "inplace", - "label": "contract IVRFCoordinatorV2Plus", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint16": { - "encoding": "inplace", - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/ChainlinkVRFCoordinator.json b/contracts/deployments/arbitrumSepolia/ChainlinkVRFCoordinator.json deleted file mode 100644 index 0ad1f85b2..000000000 --- a/contracts/deployments/arbitrumSepolia/ChainlinkVRFCoordinator.json +++ /dev/null @@ -1,1753 +0,0 @@ -{ - "address": "0x5CE8D5A2BC84beb22a398CCA51996F7930313D61", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "blockhashStore", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "internalBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "externalBalance", - "type": "uint256" - } - ], - "name": "BalanceInvariantViolated", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNum", - "type": "uint256" - } - ], - "name": "BlockhashNotInStore", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "coordinatorAddress", - "type": "address" - } - ], - "name": "CoordinatorAlreadyRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "coordinatorAddress", - "type": "address" - } - ], - "name": "CoordinatorNotRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "FailedToSendNative", - "type": "error" - }, - { - "inputs": [], - "name": "FailedToTransferLink", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "have", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "want", - "type": "uint32" - } - ], - "name": "GasLimitTooBig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGas", - "type": "uint256" - } - ], - "name": "GasPriceExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectCommitment", - "type": "error" - }, - { - "inputs": [], - "name": "IndexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "InsufficientBalance", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidCalldata", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "InvalidConsumer", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidExtraArgsTag", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "linkWei", - "type": "int256" - } - ], - "name": "InvalidLinkWeiPrice", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "premiumPercentage", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "max", - "type": "uint8" - } - ], - "name": "InvalidPremiumPercentage", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "have", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "min", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "max", - "type": "uint16" - } - ], - "name": "InvalidRequestConfirmations", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidSubscription", - "type": "error" - }, - { - "inputs": [], - "name": "LinkAlreadySet", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "flatFeeLinkDiscountPPM", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "flatFeeNativePPM", - "type": "uint32" - } - ], - "name": "LinkDiscountTooHigh", - "type": "error" - }, - { - "inputs": [], - "name": "LinkNotSet", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "have", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "max", - "type": "uint32" - } - ], - "name": "MsgDataTooBig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "MustBeRequestedOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "MustBeSubOwner", - "type": "error" - }, - { - "inputs": [], - "name": "NoCorrespondingRequest", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - } - ], - "name": "NoSuchProvingKey", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "have", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "want", - "type": "uint32" - } - ], - "name": "NumWordsTooBig", - "type": "error" - }, - { - "inputs": [], - "name": "OnlyCallableFromLink", - "type": "error" - }, - { - "inputs": [], - "name": "PaymentTooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "PendingRequestExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - } - ], - "name": "ProvingKeyAlreadyRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "Reentrant", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyConsumers", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "minimumRequestConfirmations", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxGasLimit", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "stalenessSeconds", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "gasAfterPaymentCalculation", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "int256", - "name": "fallbackWeiPerUnitLink", - "type": "int256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "fulfillmentFlatFeeNativePPM", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "fulfillmentFlatFeeLinkDiscountPPM", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "nativePremiumPercentage", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "linkPremiumPercentage", - "type": "uint8" - } - ], - "name": "ConfigSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "coordinatorAddress", - "type": "address" - } - ], - "name": "CoordinatorDeregistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "coordinatorAddress", - "type": "address" - } - ], - "name": "CoordinatorRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "fallbackWeiPerUnitLink", - "type": "int256" - } - ], - "name": "FallbackWeiPerUnitLinkUsed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsRecovered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newCoordinator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "MigrationCompleted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "NativeFundsRecovered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "maxGas", - "type": "uint64" - } - ], - "name": "ProvingKeyDeregistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "maxGas", - "type": "uint64" - } - ], - "name": "ProvingKeyRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "outputSeed", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "payment", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "nativePayment", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "onlyPremium", - "type": "bool" - } - ], - "name": "RandomWordsFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "preSeed", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "minimumRequestConfirmations", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "callbackGasLimit", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "numWords", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "extraArgs", - "type": "bytes" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RandomWordsRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountLink", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountNative", - "type": "uint256" - } - ], - "name": "SubscriptionCanceled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "SubscriptionConsumerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "SubscriptionConsumerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "SubscriptionCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldBalance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newBalance", - "type": "uint256" - } - ], - "name": "SubscriptionFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldNativeBalance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newNativeBalance", - "type": "uint256" - } - ], - "name": "SubscriptionFundedWithNative", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "SubscriptionOwnerTransferRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "SubscriptionOwnerTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "BLOCKHASH_STORE", - "outputs": [ - { - "internalType": "contract BlockhashStoreInterface", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LINK", - "outputs": [ - { - "internalType": "contract LinkTokenInterface", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LINK_NATIVE_FEED", - "outputs": [ - { - "internalType": "contract AggregatorV3Interface", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_CONSUMERS", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_NUM_WORDS", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_REQUEST_CONFIRMATIONS", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "acceptSubscriptionOwnerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "addConsumer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "cancelSubscription", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "createSubscription", - "outputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "deregisterMigratableCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "publicProvingKey", - "type": "uint256[2]" - } - ], - "name": "deregisterProvingKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256[2]", - "name": "pk", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "gamma", - "type": "uint256[2]" - }, - { - "internalType": "uint256", - "name": "c", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "s", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "seed", - "type": "uint256" - }, - { - "internalType": "address", - "name": "uWitness", - "type": "address" - }, - { - "internalType": "uint256[2]", - "name": "cGammaWitness", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "sHashWitness", - "type": "uint256[2]" - }, - { - "internalType": "uint256", - "name": "zInv", - "type": "uint256" - } - ], - "internalType": "struct VRF.Proof", - "name": "proof", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint64", - "name": "blockNum", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "callbackGasLimit", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numWords", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "extraArgs", - "type": "bytes" - } - ], - "internalType": "struct VRFTypes.RequestCommitmentV2Plus", - "name": "rc", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "onlyPremium", - "type": "bool" - } - ], - "name": "fulfillRandomWords", - "outputs": [ - { - "internalType": "uint96", - "name": "payment", - "type": "uint96" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "fundSubscriptionWithNative", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "startIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxCount", - "type": "uint256" - } - ], - "name": "getActiveSubscriptionIds", - "outputs": [ - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "getSubscription", - "outputs": [ - { - "internalType": "uint96", - "name": "balance", - "type": "uint96" - }, - { - "internalType": "uint96", - "name": "nativeBalance", - "type": "uint96" - }, - { - "internalType": "uint64", - "name": "reqCount", - "type": "uint64" - }, - { - "internalType": "address", - "name": "subOwner", - "type": "address" - }, - { - "internalType": "address[]", - "name": "consumers", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "publicKey", - "type": "uint256[2]" - } - ], - "name": "hashOfKey", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "newCoordinator", - "type": "address" - } - ], - "name": "migrate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onTokenTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "ownerCancelSubscription", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "pendingRequestExists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "recoverFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "to", - "type": "address" - } - ], - "name": "recoverNativeFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "registerMigratableCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "publicProvingKey", - "type": "uint256[2]" - }, - { - "internalType": "uint64", - "name": "maxGas", - "type": "uint64" - } - ], - "name": "registerProvingKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "removeConsumer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "requestConfirmations", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "callbackGasLimit", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numWords", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "extraArgs", - "type": "bytes" - } - ], - "internalType": "struct VRFV2PlusClient.RandomWordsRequest", - "name": "req", - "type": "tuple" - } - ], - "name": "requestRandomWords", - "outputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "requestSubscriptionOwnerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "s_config", - "outputs": [ - { - "internalType": "uint16", - "name": "minimumRequestConfirmations", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "maxGasLimit", - "type": "uint32" - }, - { - "internalType": "bool", - "name": "reentrancyLock", - "type": "bool" - }, - { - "internalType": "uint32", - "name": "stalenessSeconds", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "gasAfterPaymentCalculation", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "fulfillmentFlatFeeNativePPM", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "fulfillmentFlatFeeLinkDiscountPPM", - "type": "uint32" - }, - { - "internalType": "uint8", - "name": "nativePremiumPercentage", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "linkPremiumPercentage", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "s_currentSubNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "s_fallbackWeiPerUnitLink", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "s_provingKeyHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "s_provingKeys", - "outputs": [ - { - "internalType": "bool", - "name": "exists", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "maxGas", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "s_requestCommitments", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "s_totalBalance", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "s_totalNativeBalance", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "minimumRequestConfirmations", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "maxGasLimit", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "stalenessSeconds", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "gasAfterPaymentCalculation", - "type": "uint32" - }, - { - "internalType": "int256", - "name": "fallbackWeiPerUnitLink", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "fulfillmentFlatFeeNativePPM", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "fulfillmentFlatFeeLinkDiscountPPM", - "type": "uint32" - }, - { - "internalType": "uint8", - "name": "nativePremiumPercentage", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "linkPremiumPercentage", - "type": "uint8" - } - ], - "name": "setConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "link", - "type": "address" - }, - { - "internalType": "address", - "name": "linkNativeFeed", - "type": "address" - } - ], - "name": "setLINKAndLINKNativeFeed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "recipient", - "type": "address" - } - ], - "name": "withdrawNative", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ] -} diff --git a/contracts/deployments/arbitrumSepolia/DAI.json b/contracts/deployments/arbitrumSepolia/DAI.json deleted file mode 100644 index c989bb132..000000000 --- a/contracts/deployments/arbitrumSepolia/DAI.json +++ /dev/null @@ -1,458 +0,0 @@ -{ - "address": "0xc34aeFEa232956542C5b2f2EE55fD5c378B35c03", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "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": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xf26e505115f57eeee85b2a1258a27f3560ce1d6dd0c8d5fdec02a38a90f68a0c", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xc34aeFEa232956542C5b2f2EE55fD5c378B35c03", - "transactionIndex": 1, - "gasUsed": "4834117", - "logsBloom": "0x00000020000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000400000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000040000000000000000000000000000002000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000100000000000000000", - "blockHash": "0xd28cc28660f187697c493cbcec57764f6912bd6042cb970f2fe51b74fc4fc6e9", - "transactionHash": "0xf26e505115f57eeee85b2a1258a27f3560ce1d6dd0c8d5fdec02a38a90f68a0c", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 3842783, - "transactionHash": "0xf26e505115f57eeee85b2a1258a27f3560ce1d6dd0c8d5fdec02a38a90f68a0c", - "address": "0xc34aeFEa232956542C5b2f2EE55fD5c378B35c03", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "logIndex": 0, - "blockHash": "0xd28cc28660f187697c493cbcec57764f6912bd6042cb970f2fe51b74fc4fc6e9" - } - ], - "blockNumber": 3842783, - "cumulativeGasUsed": "4834117", - "status": 1, - "byzantium": true - }, - "args": [ - "DAI", - "DAI" - ], - "numDeployments": 1, - "solcInputHash": "8e9cc2476be2df2a66044335eb796b9b", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/TestERC20.sol\":\"TestERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(address from, address to, uint256 amount) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(address owner, address spender, uint256 amount) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\"},\"src/token/TestERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\ncontract TestERC20 is ERC20 {\\n constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {\\n _mint(msg.sender, 1000000 ether);\\n }\\n}\\n\",\"keccak256\":\"0x9f67e6b63ca87e6c98b2986364ce16a747ce4098e9146fffb17ea13863c0b7e4\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b5060405162000c5838038062000c5883398101604081905262000034916200020a565b8181600362000044838262000302565b50600462000053828262000302565b505050620000723369d3c21bcecceda10000006200007a60201b60201c565b5050620003f6565b6001600160a01b038216620000d55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e99190620003ce565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016d57600080fd5b81516001600160401b03808211156200018a576200018a62000145565b604051601f8301601f19908116603f01168101908282118183101715620001b557620001b562000145565b81604052838152602092508683858801011115620001d257600080fd5b600091505b83821015620001f65785820183015181830184015290820190620001d7565b600093810190920192909252949350505050565b600080604083850312156200021e57600080fd5b82516001600160401b03808211156200023657600080fd5b62000244868387016200015b565b935060208501519150808211156200025b57600080fd5b506200026a858286016200015b565b9150509250929050565b600181811c908216806200028957607f821691505b602082108103620002aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200014057600081815260208120601f850160051c81016020861015620002d95750805b601f850160051c820191505b81811015620002fa57828155600101620002e5565b505050505050565b81516001600160401b038111156200031e576200031e62000145565b62000336816200032f845462000274565b84620002b0565b602080601f8311600181146200036e5760008415620003555750858301515b600019600386901b1c1916600185901b178555620002fa565b600085815260208120601f198616915b828110156200039f578886015182559484019460019091019084016200037e565b5085821015620003be5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620003f057634e487b7160e01b600052601160045260246000fd5b92915050565b61085280620004066000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea26469706673582212203a956e65a766c03ac95ae037cbdfb51b56810340c98132c2d2482405d386101b64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea26469706673582212203a956e65a766c03ac95ae037cbdfb51b56810340c98132c2d2482405d386101b64736f6c63430008120033", - "devdoc": { - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "decreaseAllowance(address,uint256)": { - "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." - }, - "increaseAllowance(address,uint256)": { - "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address." - }, - "name()": { - "details": "Returns the name of the token." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 128, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 134, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 136, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 138, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - }, - { - "astId": 140, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_symbol", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/DAIFaucet.json b/contracts/deployments/arbitrumSepolia/DAIFaucet.json deleted file mode 100644 index 5c5e31c1d..000000000 --- a/contracts/deployments/arbitrumSepolia/DAIFaucet.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "address": "0x1Fa58B52326488D62A406E71DBaD839560e810fF", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "amount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "changeAmount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "request", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "withdrewAlready", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x703c6d2439eb53f2dce47dc5a223e73a1e1399e3058a9fc2d375ff7818a9f7e6", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x1Fa58B52326488D62A406E71DBaD839560e810fF", - "transactionIndex": 1, - "gasUsed": "2769180", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3d50a6300d95258d1cdc93f2f0f6fd62d46e5be5926c545230fd95071dd07610", - "transactionHash": "0x703c6d2439eb53f2dce47dc5a223e73a1e1399e3058a9fc2d375ff7818a9f7e6", - "logs": [], - "blockNumber": 3842785, - "cumulativeGasUsed": "2769180", - "status": 1, - "byzantium": true - }, - "args": [ - "0xc34aeFEa232956542C5b2f2EE55fD5c378B35c03" - ], - "numDeployments": 1, - "solcInputHash": "4ee8a1f2013c130bec1668c5304bc76a", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"amount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"changeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"withdrewAlready\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/Faucet.sol\":\"Faucet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/token/Faucet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ncontract Faucet {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n IERC20 public token;\\n address public governor;\\n mapping(address => bool) public withdrewAlready;\\n uint256 public amount = 10_000 ether;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(governor) == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n constructor(IERC20 _token) {\\n token = _token;\\n governor = msg.sender;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n function changeGovernor(address _governor) public onlyByGovernor {\\n governor = _governor;\\n }\\n\\n function changeAmount(uint256 _amount) public onlyByGovernor {\\n amount = _amount;\\n }\\n\\n function withdraw() public onlyByGovernor {\\n token.transfer(governor, token.balanceOf(address(this)));\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function request() public {\\n require(\\n !withdrewAlready[msg.sender],\\n \\\"You have used this faucet already. If you need more tokens, please use another address.\\\"\\n );\\n token.transfer(msg.sender, amount);\\n withdrewAlready[msg.sender] = true;\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n function balance() public view returns (uint) {\\n return token.balanceOf(address(this));\\n }\\n}\\n\",\"keccak256\":\"0x3a54681cc304ccbfdb42215104b63809919a432ac5d3986d3021a11fcc7a1cc3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405269021e19e0c9bab240000060035534801561001e57600080fd5b5060405161065538038061065583398101604081905261003d9161006b565b600080546001600160a01b039092166001600160a01b0319928316179055600180549091163317905561009b565b60006020828403121561007d57600080fd5b81516001600160a01b038116811461009457600080fd5b9392505050565b6105ab806100aa6000396000f3fe608060405234801561001057600080fd5b50600436106100835760003560e01c80630c340a2414610088578063338cdca1146100b15780633ccfd60b146100bb5780635c320516146100c3578063aa8c217c146100d6578063b69ef8a8146100ed578063d61c40dc146100f5578063e4c0aaf414610128578063fc0c546a1461013b575b600080fd5b60015461009b906001600160a01b031681565b6040516100a8919061049b565b60405180910390f35b6100b961014e565b005b6100b961028f565b6100b96100d13660046104af565b6103a9565b6100df60035481565b6040519081526020016100a8565b6100df6103d8565b6101186101033660046104c8565b60026020526000908152604090205460ff1681565b60405190151581526020016100a8565b6100b96101363660046104c8565b61044f565b60005461009b906001600160a01b031681565b3360009081526002602052604090205460ff16156101f95760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a4015b60405180910390fd5b60005460035460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027291906104f8565b50336000908152600260205260409020805460ff19166001179055565b6001546001600160a01b031633146102b95760405162461bcd60e51b81526004016101f09061051a565b6000546001546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906102f690309060040161049b565b602060405180830381865afa158015610313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610337919061055c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a691906104f8565b50565b6001546001600160a01b031633146103d35760405162461bcd60e51b81526004016101f09061051a565b600355565b600080546040516370a0823160e01b81526001600160a01b03909116906370a082319061040990309060040161049b565b602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a919061055c565b905090565b6001546001600160a01b031633146104795760405162461bcd60e51b81526004016101f09061051a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0391909116815260200190565b6000602082840312156104c157600080fd5b5035919050565b6000602082840312156104da57600080fd5b81356001600160a01b03811681146104f157600080fd5b9392505050565b60006020828403121561050a57600080fd5b815180151581146104f157600080fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60006020828403121561056e57600080fd5b505191905056fea26469706673582212204f7fd812260eacd88f23b436eb40b4943480e914005f0a0f2738f0d3c9696a5964736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100835760003560e01c80630c340a2414610088578063338cdca1146100b15780633ccfd60b146100bb5780635c320516146100c3578063aa8c217c146100d6578063b69ef8a8146100ed578063d61c40dc146100f5578063e4c0aaf414610128578063fc0c546a1461013b575b600080fd5b60015461009b906001600160a01b031681565b6040516100a8919061049b565b60405180910390f35b6100b961014e565b005b6100b961028f565b6100b96100d13660046104af565b6103a9565b6100df60035481565b6040519081526020016100a8565b6100df6103d8565b6101186101033660046104c8565b60026020526000908152604090205460ff1681565b60405190151581526020016100a8565b6100b96101363660046104c8565b61044f565b60005461009b906001600160a01b031681565b3360009081526002602052604090205460ff16156101f95760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a4015b60405180910390fd5b60005460035460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027291906104f8565b50336000908152600260205260409020805460ff19166001179055565b6001546001600160a01b031633146102b95760405162461bcd60e51b81526004016101f09061051a565b6000546001546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906102f690309060040161049b565b602060405180830381865afa158015610313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610337919061055c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a691906104f8565b50565b6001546001600160a01b031633146103d35760405162461bcd60e51b81526004016101f09061051a565b600355565b600080546040516370a0823160e01b81526001600160a01b03909116906370a082319061040990309060040161049b565b602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a919061055c565b905090565b6001546001600160a01b031633146104795760405162461bcd60e51b81526004016101f09061051a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0391909116815260200190565b6000602082840312156104c157600080fd5b5035919050565b6000602082840312156104da57600080fd5b81356001600160a01b03811681146104f157600080fd5b9392505050565b60006020828403121561050a57600080fd5b815180151581146104f157600080fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60006020828403121561056e57600080fd5b505191905056fea26469706673582212204f7fd812260eacd88f23b436eb40b4943480e914005f0a0f2738f0d3c9696a5964736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 24559, - "contract": "src/token/Faucet.sol:Faucet", - "label": "token", - "offset": 0, - "slot": "0", - "type": "t_contract(IERC20)1042" - }, - { - "astId": 24561, - "contract": "src/token/Faucet.sol:Faucet", - "label": "governor", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 24565, - "contract": "src/token/Faucet.sol:Faucet", - "label": "withdrewAlready", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 24568, - "contract": "src/token/Faucet.sol:Faucet", - "label": "amount", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20)1042": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeKitClassic.json b/contracts/deployments/arbitrumSepolia/DisputeKitClassic.json deleted file mode 100644 index ed2c11a7b..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeKitClassic.json +++ /dev/null @@ -1,1209 +0,0 @@ -{ - "address": "0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0xa851c86c0cdd54d7e6b8439188b655cd8676307dc7c4cfa9b831f7b36463498e", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94", - "transactionIndex": 1, - "gasUsed": "203799", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xb34e46f2829db2ccafc48071a3a1955eda10f39f57d0d723dc3d0a94951b4e32", - "transactionHash": "0xa851c86c0cdd54d7e6b8439188b655cd8676307dc7c4cfa9b831f7b36463498e", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 95247789, - "transactionHash": "0xa851c86c0cdd54d7e6b8439188b655cd8676307dc7c4cfa9b831f7b36463498e", - "address": "0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0xb34e46f2829db2ccafc48071a3a1955eda10f39f57d0d723dc3d0a94951b4e32" - } - ], - "blockNumber": 95247789, - "cumulativeGasUsed": "203799", - "status": 1, - "byzantium": true - }, - "args": [ - "0xDb0B7908C46E2Bb08459bf9b3155b9bb8F8713E1", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 6, - "solcInputHash": "55ee2edfcfbef3e6f4c10ec53a4be5f5", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitClassicProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220c725b686c35c73323e89d3a1c5ad844b99f0379163dce99bcd79b25231551a8164736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220c725b686c35c73323e89d3a1c5ad844b99f0379163dce99bcd79b25231551a8164736f6c634300081c0033", - "execute": { - "methodName": "reinitialize", - "args": [ - "0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511" - ] - }, - "implementation": "0xA122856B3B4C5fBcA129088af3CEb204509805f0", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeKitClassic_Implementation.json b/contracts/deployments/arbitrumSepolia/DisputeKitClassic_Implementation.json deleted file mode 100644 index 38b42f0ad..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeKitClassic_Implementation.json +++ /dev/null @@ -1,1852 +0,0 @@ -{ - "address": "0xA122856B3B4C5fBcA129088af3CEb204509805f0", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xb878caa16800e96918f5ca3aaeb44cdca259a323bab5361890f1636a9c0e3058", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xA122856B3B4C5fBcA129088af3CEb204509805f0", - "transactionIndex": 3, - "gasUsed": "3883411", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004200000000000000000000000000000000000008000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x4ae9665c325c5698c84b8f40c63167b86a2b4a9bb344169cc44454c24f69b1b8", - "transactionHash": "0xb878caa16800e96918f5ca3aaeb44cdca259a323bab5361890f1636a9c0e3058", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 179580520, - "transactionHash": "0xb878caa16800e96918f5ca3aaeb44cdca259a323bab5361890f1636a9c0e3058", - "address": "0xA122856B3B4C5fBcA129088af3CEb204509805f0", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 4, - "blockHash": "0x4ae9665c325c5698c84b8f40c63167b86a2b4a9bb344169cc44454c24f69b1b8" - } - ], - "blockNumber": 179580520, - "cumulativeGasUsed": "4150165", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 6, - "solcInputHash": "726fe29d8d9c48c46571792cebc6e314", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"name\":\"alreadyDrawn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getLocalDisputeRoundID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localDisputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"hashVote\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"isAppealFunded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleDrawPerJuror\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"getLocalDisputeRoundID(uint256,uint256)\":{\"details\":\"Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\"},\"returns\":{\"localDisputeID\":\"The ID of the dispute in the Dispute Kit.\",\"localRoundID\":\"The ID of the round in the Dispute Kit.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Returns the number of rounds in a dispute.\",\"params\":{\"_localDisputeID\":\"The ID of the dispute in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of rounds in the dispute.\"}},\"getVoteInfo(uint256,uint256,uint256)\":{\"details\":\"Returns the vote information for a given vote ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The address of the juror who cast the vote.\",\"commit\":\"The commit of the vote.\"}},\"hashVote(uint256,uint256,string)\":{\"details\":\"Computes the hash of a vote using ABI encodingThe unused parameters may be used by overriding contracts.\",\"params\":{\"_choice\":\"The choice being voted for\",\"_justification\":\"The justification for the vote\",\"_salt\":\"A random salt for commitment\"},\"returns\":{\"_0\":\"bytes32 The hash of the encoded vote parameters\"}},\"initialize(address,address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isAppealFunded(uint256)\":{\"details\":\"Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"Whether the appeal funding is finished.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"DisputeKitClassic Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitClassic.sol\":\"DisputeKitClassic\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassic.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {DisputeKitClassicBase, KlerosCore} from \\\"./DisputeKitClassicBase.sol\\\";\\n\\n/// @title DisputeKitClassic\\n/// Dispute kit implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitClassic is DisputeKitClassicBase {\\n string public constant override version = \\\"0.12.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(address _governor, KlerosCore _core, address _wNative) external reinitializer(1) {\\n __DisputeKitClassicBase_initialize(_governor, _core, _wNative);\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(9) {\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0xfe30d2fa9e1f882d77900894c0b4389e38f91b937e3c095f87bf255488cefd8b\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassicBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore, KlerosCoreBase, IDisputeKit, ISortitionModule} from \\\"../KlerosCore.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {SafeSend} from \\\"../../libraries/SafeSend.sol\\\";\\n\\n/// @title DisputeKitClassicBase\\n/// Abstract Dispute kit classic implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\nabstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable {\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default.\\n mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool)))\\n public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading.\\n mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function __DisputeKitClassicBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n dispute.jumped = false; // Possibly true if this DK has jumped in a previous round.\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n coreDisputeIDToActive[_coreDisputeID] = true;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[localRoundID];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n if (drawnAddress == address(0)) {\\n // Sortition can return 0 address if no one has staked yet.\\n return drawnAddress;\\n }\\n\\n if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true;\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash.\\n function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n }\\n\\n function _castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender);\\n }\\n\\n function _castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification,\\n address _juror\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n bytes32 voteHash = hashVote(_choice, _salt, _justification);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == _juror, \\\"The juror has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == voteHash,\\n \\\"The vote hash must match the commitment in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n } // Workaround stack too deep\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.safeSend(amount, wNative);\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @dev The unused parameters may be used by overriding contracts.\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(_choice, _salt));\\n }\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length;\\n\\n return round.totalVoted == expectedTotalVoted;\\n }\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) {\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n // Uses block.timestamp from the current tx when called by the core contract.\\n return (fundedChoices.length == 0 &&\\n block.timestamp - appealPeriodStart >=\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT);\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n /// @dev Returns the number of rounds in a dispute.\\n /// @param _localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return The number of rounds in the dispute.\\n function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) {\\n return disputes[_localDisputeID].rounds.length;\\n }\\n\\n /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @return localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return localRoundID The ID of the round in the Dispute Kit.\\n function getLocalDisputeRoundID(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID\\n ) external view returns (uint256 localDisputeID, uint256 localRoundID) {\\n localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID];\\n }\\n\\n /// @dev Returns the vote information for a given vote ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @param _voteID The ID of the vote.\\n /// @return account The address of the juror who cast the vote.\\n /// @return commit The commit of the vote.\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts.\\n /// minStake is checked directly during staking process however it's possible for the juror to get drawn\\n /// while having < minStake if it is later increased by governance.\\n /// This issue is expected and harmless.\\n /// @param _round The round in which the juror is being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return result Whether the address passes the check or not.\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view virtual returns (bool result) {\\n if (singleDrawPerJuror) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n result = !alreadyDrawn[localDisputeID][localRoundID][_juror];\\n } else {\\n result = true;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc418b9a76802db5d16819836734ecff8b76d5f37101819aee6fd1844dfe21dd9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516143f36100fc600039600081816118130152818161183c0152611a3401526143f36000f3fe6080604052600436106102205760003560e01c80636d4cd8ea1161012e578063c0c53b8b116100ab578063f2f4eb261161006f578063f2f4eb2614610718578063f32ab92714610738578063f7e7d1fd1461076d578063f8abee101461078d578063fc6f8f16146107bd57600080fd5b8063c0c53b8b14610698578063d2b8035a146106b8578063da3beb8c146106d8578063e349ad301461058a578063e4c0aaf4146106f857600080fd5b8063a7cc08fe116100f2578063a7cc08fe146105e0578063b34bfaa81461062c578063b6ede54014610642578063ba66fde714610662578063be4676041461068257600080fd5b80636d4cd8ea1461054a578063751accd01461056a578063796490f91461058a5780637c04034e146105a05780638e426460146105c057600080fd5b80634b2f0ea0116101bc5780635a155ccd116101805780635a155ccd1461044f5780635c92e2f61461049057806365540b96146104b0578063675926f6146104dd57806369f3f041146104fd57600080fd5b80634b2f0ea0146103a45780634f1ef286146103b957806352d1902d146103cc57806354fd4d50146103e1578063564a565d1461042057600080fd5b80630855bbe9146102255780630baa64d11461025a5780630c340a241461027a5780631200aabc146102b25780631c3db16d146102ed5780631cc3423a1461032a5780632621b9a21461034a5780632d68efc914610364578063362c347914610384575b600080fd5b34801561023157600080fd5b50610245610240366004613814565b6107dd565b60405190151581526020015b60405180910390f35b34801561026657600080fd5b50610245610275366004613814565b6108a5565b34801561028657600080fd5b5060005461029a906001600160a01b031681565b6040516001600160a01b039091168152602001610251565b3480156102be57600080fd5b506102df6102cd366004613814565b60036020526000908152604090205481565b604051908152602001610251565b3480156102f957600080fd5b5061030d610308366004613814565b61091c565b604080519384529115156020840152151590820152606001610251565b34801561033657600080fd5b506102df6103453660046138d7565b610a8a565b34801561035657600080fd5b506004546102459060ff1681565b34801561037057600080fd5b5060075461029a906001600160a01b031681565b34801561039057600080fd5b506102df61039f36600461393b565b610aba565b6103b76103b2366004613978565b610f6f565b005b6103b76103c736600461399a565b6117ff565b3480156103d857600080fd5b506102df611a27565b3480156103ed57600080fd5b50610413604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102519190613a39565b34801561042c57600080fd5b5061044061043b366004613814565b611a85565b60405161025193929190613a4c565b34801561045b57600080fd5b5061024561046a366004613a6d565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b34801561049c57600080fd5b506103b76104ab366004613af1565b611b4b565b3480156104bc57600080fd5b506104d06104cb366004613814565b611b57565b6040516102519190613b43565b3480156104e957600080fd5b506102df6104f8366004613b86565b611c1b565b34801561050957600080fd5b5061051d610518366004613bc1565b611d5e565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610251565b34801561055657600080fd5b50610245610565366004613814565b611e16565b34801561057657600080fd5b506103b7610585366004613bed565b611f99565b34801561059657600080fd5b506102df61271081565b3480156105ac57600080fd5b506103b76105bb366004613c2f565b612065565b3480156105cc57600080fd5b506103b76105db366004613cb7565b61207c565b3480156105ec57600080fd5b506106006105fb366004613bc1565b6120c8565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610251565b34801561063857600080fd5b506102df614e2081565b34801561064e57600080fd5b506103b761065d366004613cd4565b61218e565b34801561066e57600080fd5b5061024561067d366004613bc1565b612381565b34801561068e57600080fd5b506102df61138881565b3480156106a457600080fd5b506103b76106b3366004613d5d565b61241c565b3480156106c457600080fd5b5061029a6106d3366004613978565b6124e6565b3480156106e457600080fd5b506102df6106f3366004613978565b612835565b34801561070457600080fd5b506103b7610713366004613cb7565b612988565b34801561072457600080fd5b5060015461029a906001600160a01b031681565b34801561074457600080fd5b50610758610753366004613978565b6129d4565b60408051928352602083019190915201610251565b34801561077957600080fd5b506103b7610788366004613cb7565b612a26565b34801561079957600080fd5b506102456107a8366004613814565b60066020526000908152604090205460ff1681565b3480156107c957600080fd5b506102df6107d8366004613814565b612af8565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa15801561082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084e9190613d9d565b91509150600061085d85611b57565b90508051600014801561089c575061271061138861087b8585613dd7565b6108859190613dea565b61088f9190613e01565b6108998442613dd7565b10155b95945050505050565b6000818152600360205260408120546002805483929081106108c9576108c9613e23565b600091825260208220600590910201805490925082906108eb90600190613dd7565b815481106108fb576108fb613e23565b60009182526020909120600c90910201805460059091015414949350505050565b600080600080600260036000878152602001908152602001600020548154811061094857610948613e23565b6000918252602082206005909102018054909250829061096a90600190613dd7565b8154811061097a5761097a613e23565b60009182526020909120600c90910201600381015460ff1694509050836109a55780600101546109a8565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190613e65565b5090935060049250610a2b915050565b816004811115610a3d57610a3d613ece565b03610a80576000610a4d88611b57565b90508051600103610a7e5780600081518110610a6b57610a6b613e23565b6020026020010151965060009550600194505b505b5050509193909250565b604080516020808201869052818301859052825180830384018152606090920190925280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2c9190613e65565b50935050505080610b845760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfb9190613ee4565b15610c395760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610b7b565b60008681526006602052604090205460ff16610c675760405162461bcd60e51b8152600401610b7b90613eff565b600086815260036020526040812054600280549091908110610c8b57610c8b613e23565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610cbf57610cbf613e23565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3e9190613f36565b5050600087815260078401602052604090205490915060ff16610d88576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ecd565b808603610dfd576000868152600683016020526040902054610dab576000610df6565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610dec9190613dea565b610df69190613e01565b9450610ecd565b600081815260078301602052604090205460ff16610ecd5781600601600083600a01600181548110610e3157610e31613e23565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610e6757610e67613e23565b9060005260206000200154815260200190815260200160002054610e8b9190613f72565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610ec09190613dea565b610eca9190613e01565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610f6357600754610f14906001600160a01b038a811691889116612b24565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051610f5a929190918252602082015260400190565b60405180910390a45b50505050949350505050565b600082815260036020526040902054600280548492908110610f9357610f93613e23565b600091825260209091206002600590920201015460ff1615610fc75760405162461bcd60e51b8152600401610b7b90613f85565b600083815260036020526040812054600280549091908110610feb57610feb613e23565b90600052602060002090600502019050806001015483111561104f5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610b7b565b60008481526006602052604090205460ff1661107d5760405162461bcd60e51b8152600401610b7b90613eff565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee9190613d9d565b9150915081421015801561110157508042105b6111465760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610b7b565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190613f36565b505090508681036111c0576127109150611241565b6127106113886111d08686613dd7565b6111da9190613dea565b6111e49190613e01565b6111ee8542613dd7565b1061123b5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610b7b565b614e2091505b8454600090869061125490600190613dd7565b8154811061126457611264613e23565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190613fbc565b6112f19190613dd7565b60008a815260078401602052604090205490915060ff16156113555760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610b7b565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa15801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190613fbc565b905060006127106113d48784613dea565b6113de9190613e01565b6113e89083613f72565b60008c8152600686016020526040812054919250908211156114995760008c815260068601602052604090205434906114219084613dd7565b116114465760008c81526006860160205260409020546114419083613dd7565b611448565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f85604051611490929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906114c5908490613f72565b909155505060008c8152600686016020526040812080548392906114ea908490613f72565b909155505060008c815260068601602052604090205482116115bc5760008c81526006860160205260408120546009870180549192909161152c908490613f72565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156117c7578285600901546115d99190613dd7565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164b9190613ee4565b156116645760028a01805460ff19166001179055611747565b895460038b016000611677876001613f72565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b81526004016116f291815260200190565b602060405180830381865afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190613fbc565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016117949392919061400f565b6000604051808303818588803b1580156117ad57600080fd5b505af11580156117c1573d6000803e3d6000fd5b50505050505b803411156117f0576117f06117dc8234613dd7565b6007543391906001600160a01b0316612b24565b50505050505050505050505050565b61180882612c0f565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061188657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661187a60008051602061439e8339815191525490565b6001600160a01b031614155b156118a45760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118fe575060408051601f3d908101601f191682019092526118fb91810190613fbc565b60015b61192657604051630c76093760e01b81526001600160a01b0383166004820152602401610b7b565b60008051602061439e833981519152811461195757604051632a87526960e21b815260048101829052602401610b7b565b60008051602061439e8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611a22576000836001600160a01b0316836040516119be91906140a9565b600060405180830381855af49150503d80600081146119f9576040519150601f19603f3d011682016040523d82523d6000602084013e6119fe565b606091505b5050905080611a20576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a725760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061439e83398151915290565b60028181548110611a9557600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611ac890613fd5565b80601f0160208091040260200160405190810160405280929190818152602001828054611af490613fd5565b8015611b415780601f10611b1657610100808354040283529160200191611b41565b820191906000526020600020905b815481529060010190602001808311611b2457829003601f168201915b5050505050905083565b611a2084848484612c3c565b6000818152600360205260408120546002805460609392908110611b7d57611b7d613e23565b60009182526020822060059091020180549092508290611b9f90600190613dd7565b81548110611baf57611baf613e23565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c0d57602002820191906000526020600020905b815481526020019060010190808311611bf9575b505050505092505050919050565b600085815260036020526040812054600280548392908110611c3f57611c3f613e23565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611c7357611c73613e23565b90600052602060002090600c02016000018681548110611c9557611c95613e23565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d179190613f36565b506003850154919350915060ff168015611d3b57508183600201541480611d3b5750805b15611d4e5761271094505050505061089c565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611d8f57611d8f613e23565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611dc357611dc3613e23565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611e3a57611e3a613e23565b60009182526020822060059091020180549092508290611e5c90600190613dd7565b81548110611e6c57611e6c613e23565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190613e65565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015611f46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6a91906140c5565b5050505050915050600081611f80578354611f86565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b03163314611fc35760405162461bcd60e51b8152600401610b7b90614131565b6000836001600160a01b03168383604051611fde91906140a9565b60006040518083038185875af1925050503d806000811461201b576040519150601f19603f3d011682016040523d82523d6000602084013e612020565b606091505b5050905080611a205760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610b7b565b61207486868686868633612f9f565b505050505050565b6000546001600160a01b031633146120a65760405162461bcd60e51b8152600401610b7b90614131565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a815260200190815260200160002054815481106120f6576120f6613e23565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061212a5761212a613e23565b90600052602060002090600c0201600001878154811061214c5761214c613e23565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146121b85760405162461bcd60e51b8152600401610b7b90614173565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad201612243858783614205565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156122a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ca9190613fbc565b6122d49190613dd7565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab581089061236f908a908a908a906142c4565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106123a5576123a5613e23565b600091825260208083208784526003600590930201918201905260408220548154919350839181106123d9576123d9613e23565b90600052602060002090600c020160000184815481106123fb576123fb613e23565b600091825260209091206004909102016003015460ff169695505050505050565b600160006124286136d0565b8054909150600160401b900460ff168061244f575080546001600160401b03808416911610155b1561246c5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556124988585856136f4565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146125135760405162461bcd60e51b8152600401610b7b90614173565b60008381526003602052604090205460028054859290811061253757612537613e23565b600091825260209091206002600590920201015460ff161561256b5760405162461bcd60e51b8152600401610b7b90613f85565b600084815260036020526040812054600280549192918390811061259157612591613e23565b60009182526020822060059091020180549092506125b190600190613dd7565b905060008260000182815481106125ca576125ca613e23565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561262f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265391906142fa565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156126a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c69190613e65565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561272a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274e91906142fa565b98506001600160a01b03891661276a575050505050505061282e565b612775848c8b61373b565b1561282157604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612826565b600098505b505050505050505b5092915050565b60008281526003602052604081205460028054839290811061285957612859613e23565b6000918252602080832086845260036005909302019182019052604082205481549193508391811061288d5761288d613e23565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa1580156128ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129109190613f36565b509150915082600401546000148061293f57508015801561293f57506000828152600284016020526040902054155b15612951576000945050505050612982565b80156129665750506004015491506129829050565b5060009081526002909101602052604090205491506129829050565b92915050565b6000546001600160a01b031633146129b25760405162461bcd60e51b8152600401610b7b90614131565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526003602052604081205460028054919291839081106129fa576129fa613e23565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612a326136d0565b8054909150600160401b900460ff1680612a59575080546001600160401b03808416911610155b15612a765760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612b0d57612b0d613e23565b600091825260209091206005909102015492915050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015612b5357505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b8e57600080fd5b505af1158015612ba2573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612c395760405162461bcd60e51b8152600401610b7b90614131565b50565b600084815260036020526040902054600280548692908110612c6057612c60613e23565b600091825260209091206002600590920201015460ff1615612c945760405162461bcd60e51b8152600401610b7b90613f85565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d029190613e65565b5090935060019250612d12915050565b816004811115612d2457612d24613ece565b14612d815760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610b7b565b82612dbe5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610b7b565b60008681526006602052604090205460ff16612dec5760405162461bcd60e51b8152600401610b7b90613eff565b600086815260036020526040812054600280549091908110612e1057612e10613e23565b60009182526020822060059091020180549092508290612e3290600190613dd7565b81548110612e4257612e42613e23565b90600052602060002090600c0201905060005b86811015612f38573382898984818110612e7157612e71613e23565b9050602002013581548110612e8857612e88613e23565b60009182526020909120600490910201546001600160a01b031614612eef5760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610b7b565b8582898984818110612f0357612f03613e23565b9050602002013581548110612f1a57612f1a613e23565b60009182526020909120600160049092020181019190915501612e55565b5086869050816005016000828254612f509190613f72565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890612f8d908b908b908b90614349565b60405180910390a35050505050505050565b600087815260036020526040902054600280548992908110612fc357612fc3613e23565b600091825260209091206002600590920201015460ff1615612ff75760405162461bcd60e51b8152600401610b7b90613f85565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130659190613e65565b5090935060029250613075915050565b81600481111561308757613087613ece565b146130e25760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610b7b565b866131245760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610b7b565b60008981526006602052604090205460ff166131525760405162461bcd60e51b8152600401610b7b90613eff565b60008981526003602052604081205460028054909190811061317657613176613e23565b9060005260206000209060050201905080600101548711156131d15760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610b7b565b805460009082906131e490600190613dd7565b815481106131f4576131f4613e23565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d90613239908f9060040190815260200190565b60a060405180830381865afa158015613256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327a9190613e65565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156132d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f991906140c5565b5050505050915050600061330e8b8b8b610a8a565b905060005b8c811015613595576001600160a01b038916858f8f8481811061333857613338613e23565b905060200201358154811061334f5761334f613e23565b60009182526020909120600490910201546001600160a01b0316146133b65760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610b7b565b8215806133fd575081858f8f848181106133d2576133d2613e23565b90506020020135815481106133e9576133e9613e23565b906000526020600020906004020160010154145b61347d5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610b7b565b848e8e8381811061349057613490613e23565b90506020020135815481106134a7576134a7613e23565b600091825260209091206003600490920201015460ff16156135005760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610b7b565b8b858f8f8481811061351457613514613e23565b905060200201358154811061352b5761352b613e23565b60009182526020909120600260049092020101556001858f8f8481811061355457613554613e23565b905060200201358154811061356b5761356b613e23565b60009182526020909120600490910201600301805460ff1916911515919091179055600101613313565b5050506004820180548b92506000906135af908490613f72565b90915550506000888152600282016020526040812080548b92906135d4908490613f72565b90915550506001810154880361360357600381015460ff16156135fe5760038101805460ff191690555b61367c565b60018101546000908152600282016020526040808220548a83529120540361364557600381015460ff166135fe5760038101805460ff1916600117905561367c565b60018101546000908152600282016020526040808220548a8352912054111561367c576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b6040516136bb9392919061436d565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6136fc6137d3565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60045460009060ff16156137c957600083815260036020526040812054600280549192918390811061376f5761376f613e23565b600091825260208220600590910201805490925061378f90600190613dd7565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610ab3915050565b5060019392505050565b6137db6137fa565b6137f857604051631afcd79f60e31b815260040160405180910390fd5b565b60006138046136d0565b54600160401b900460ff16919050565b60006020828403121561382657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261385457600080fd5b8135602083016000806001600160401b038411156138745761387461382d565b50604051601f19601f85018116603f011681018181106001600160401b03821117156138a2576138a261382d565b6040528381529050808284018710156138ba57600080fd5b838360208301376000602085830101528094505050505092915050565b6000806000606084860312156138ec57600080fd5b833592506020840135915060408401356001600160401b0381111561391057600080fd5b61391c86828701613843565b9150509250925092565b6001600160a01b0381168114612c3957600080fd5b6000806000806080858703121561395157600080fd5b84359350602085013561396381613926565b93969395505050506040820135916060013590565b6000806040838503121561398b57600080fd5b50508035926020909101359150565b600080604083850312156139ad57600080fd5b82356139b881613926565b915060208301356001600160401b038111156139d357600080fd5b6139df85828601613843565b9150509250929050565b60005b83811015613a045781810151838201526020016139ec565b50506000910152565b60008151808452613a258160208601602086016139e9565b601f01601f19169290920160200192915050565b602081526000610ab36020830184613a0d565b838152821515602082015260606040820152600061089c6060830184613a0d565b600080600060608486031215613a8257600080fd5b83359250602084013591506040840135613a9b81613926565b809150509250925092565b60008083601f840112613ab857600080fd5b5081356001600160401b03811115613acf57600080fd5b6020830191508360208260051b8501011115613aea57600080fd5b9250929050565b60008060008060608587031215613b0757600080fd5b8435935060208501356001600160401b03811115613b2457600080fd5b613b3087828801613aa6565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613b7b578351835260209384019390920191600101613b5d565b509095945050505050565b600080600080600060a08688031215613b9e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613bd657600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613c0257600080fd5b8335613c0d81613926565b92506020840135915060408401356001600160401b0381111561391057600080fd5b60008060008060008060a08789031215613c4857600080fd5b8635955060208701356001600160401b03811115613c6557600080fd5b613c7189828a01613aa6565b909650945050604087013592506060870135915060808701356001600160401b03811115613c9e57600080fd5b613caa89828a01613843565b9150509295509295509295565b600060208284031215613cc957600080fd5b8135610ab381613926565b600080600080600060808688031215613cec57600080fd5b853594506020860135935060408601356001600160401b03811115613d1057600080fd5b8601601f81018813613d2157600080fd5b80356001600160401b03811115613d3757600080fd5b886020828401011115613d4957600080fd5b959894975060200195606001359392505050565b600080600060608486031215613d7257600080fd5b8335613d7d81613926565b92506020840135613d8d81613926565b91506040840135613a9b81613926565b60008060408385031215613db057600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b8181038181111561298257612982613dc1565b808202811582820484141761298257612982613dc1565b600082613e1e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80516001600160601b0381168114613e5057600080fd5b919050565b80518015158114613e5057600080fd5b600080600080600060a08688031215613e7d57600080fd5b613e8686613e39565b94506020860151613e9681613926565b604087015190945060058110613eab57600080fd5b9250613eb960608701613e55565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613ef657600080fd5b610ab382613e55565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b600080600060608486031215613f4b57600080fd5b83519250613f5b60208501613e55565b9150613f6960408501613e55565b90509250925092565b8082018082111561298257612982613dc1565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b600060208284031215613fce57600080fd5b5051919050565b600181811c90821680613fe957607f821691505b60208210810361400957634e487b7160e01b600052602260045260246000fd5b50919050565b83815282602082015260606040820152600080835461402d81613fd5565b806060860152600182166000811461404c57600181146140685761409c565b60ff1983166080870152608082151560051b870101935061409c565b86600052602060002060005b8381101561409357815488820160800152600190910190602001614074565b87016080019450505b5091979650505050505050565b600082516140bb8184602087016139e9565b9190910192915050565b600080600080600080600060e0888a0312156140e057600080fd5b6140e988613e39565b96506140f760208901613e55565b604089015160608a015160808b015160a08c015193995091975095509350915061412360c08901613e55565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611a2257806000526020600020601f840160051c810160208510156141de5750805b601f840160051c820191505b818110156141fe57600081556001016141ea565b5050505050565b6001600160401b0383111561421c5761421c61382d565b6142308361422a8354613fd5565b836141b7565b6000601f841160018114614264576000851561424c5750838201355b600019600387901b1c1916600186901b1783556141fe565b600083815260209020601f19861690835b828110156142955786850135825560209485019460019092019101614275565b50868210156142b25760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561430c57600080fd5b8151610ab381613926565b81835260006001600160fb1b0383111561433057600080fd5b8260051b80836020870137939093016020019392505050565b60408152600061435d604083018587614317565b9050826020830152949350505050565b604081526000614381604083018587614317565b82810360208401526143938185613a0d565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212205273a7fd5d9b74f6a10c8e8ff9173490991e595b881e9a1f0a7986976eaa245264736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102205760003560e01c80636d4cd8ea1161012e578063c0c53b8b116100ab578063f2f4eb261161006f578063f2f4eb2614610718578063f32ab92714610738578063f7e7d1fd1461076d578063f8abee101461078d578063fc6f8f16146107bd57600080fd5b8063c0c53b8b14610698578063d2b8035a146106b8578063da3beb8c146106d8578063e349ad301461058a578063e4c0aaf4146106f857600080fd5b8063a7cc08fe116100f2578063a7cc08fe146105e0578063b34bfaa81461062c578063b6ede54014610642578063ba66fde714610662578063be4676041461068257600080fd5b80636d4cd8ea1461054a578063751accd01461056a578063796490f91461058a5780637c04034e146105a05780638e426460146105c057600080fd5b80634b2f0ea0116101bc5780635a155ccd116101805780635a155ccd1461044f5780635c92e2f61461049057806365540b96146104b0578063675926f6146104dd57806369f3f041146104fd57600080fd5b80634b2f0ea0146103a45780634f1ef286146103b957806352d1902d146103cc57806354fd4d50146103e1578063564a565d1461042057600080fd5b80630855bbe9146102255780630baa64d11461025a5780630c340a241461027a5780631200aabc146102b25780631c3db16d146102ed5780631cc3423a1461032a5780632621b9a21461034a5780632d68efc914610364578063362c347914610384575b600080fd5b34801561023157600080fd5b50610245610240366004613814565b6107dd565b60405190151581526020015b60405180910390f35b34801561026657600080fd5b50610245610275366004613814565b6108a5565b34801561028657600080fd5b5060005461029a906001600160a01b031681565b6040516001600160a01b039091168152602001610251565b3480156102be57600080fd5b506102df6102cd366004613814565b60036020526000908152604090205481565b604051908152602001610251565b3480156102f957600080fd5b5061030d610308366004613814565b61091c565b604080519384529115156020840152151590820152606001610251565b34801561033657600080fd5b506102df6103453660046138d7565b610a8a565b34801561035657600080fd5b506004546102459060ff1681565b34801561037057600080fd5b5060075461029a906001600160a01b031681565b34801561039057600080fd5b506102df61039f36600461393b565b610aba565b6103b76103b2366004613978565b610f6f565b005b6103b76103c736600461399a565b6117ff565b3480156103d857600080fd5b506102df611a27565b3480156103ed57600080fd5b50610413604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102519190613a39565b34801561042c57600080fd5b5061044061043b366004613814565b611a85565b60405161025193929190613a4c565b34801561045b57600080fd5b5061024561046a366004613a6d565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b34801561049c57600080fd5b506103b76104ab366004613af1565b611b4b565b3480156104bc57600080fd5b506104d06104cb366004613814565b611b57565b6040516102519190613b43565b3480156104e957600080fd5b506102df6104f8366004613b86565b611c1b565b34801561050957600080fd5b5061051d610518366004613bc1565b611d5e565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610251565b34801561055657600080fd5b50610245610565366004613814565b611e16565b34801561057657600080fd5b506103b7610585366004613bed565b611f99565b34801561059657600080fd5b506102df61271081565b3480156105ac57600080fd5b506103b76105bb366004613c2f565b612065565b3480156105cc57600080fd5b506103b76105db366004613cb7565b61207c565b3480156105ec57600080fd5b506106006105fb366004613bc1565b6120c8565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610251565b34801561063857600080fd5b506102df614e2081565b34801561064e57600080fd5b506103b761065d366004613cd4565b61218e565b34801561066e57600080fd5b5061024561067d366004613bc1565b612381565b34801561068e57600080fd5b506102df61138881565b3480156106a457600080fd5b506103b76106b3366004613d5d565b61241c565b3480156106c457600080fd5b5061029a6106d3366004613978565b6124e6565b3480156106e457600080fd5b506102df6106f3366004613978565b612835565b34801561070457600080fd5b506103b7610713366004613cb7565b612988565b34801561072457600080fd5b5060015461029a906001600160a01b031681565b34801561074457600080fd5b50610758610753366004613978565b6129d4565b60408051928352602083019190915201610251565b34801561077957600080fd5b506103b7610788366004613cb7565b612a26565b34801561079957600080fd5b506102456107a8366004613814565b60066020526000908152604090205460ff1681565b3480156107c957600080fd5b506102df6107d8366004613814565b612af8565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa15801561082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084e9190613d9d565b91509150600061085d85611b57565b90508051600014801561089c575061271061138861087b8585613dd7565b6108859190613dea565b61088f9190613e01565b6108998442613dd7565b10155b95945050505050565b6000818152600360205260408120546002805483929081106108c9576108c9613e23565b600091825260208220600590910201805490925082906108eb90600190613dd7565b815481106108fb576108fb613e23565b60009182526020909120600c90910201805460059091015414949350505050565b600080600080600260036000878152602001908152602001600020548154811061094857610948613e23565b6000918252602082206005909102018054909250829061096a90600190613dd7565b8154811061097a5761097a613e23565b60009182526020909120600c90910201600381015460ff1694509050836109a55780600101546109a8565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190613e65565b5090935060049250610a2b915050565b816004811115610a3d57610a3d613ece565b03610a80576000610a4d88611b57565b90508051600103610a7e5780600081518110610a6b57610a6b613e23565b6020026020010151965060009550600194505b505b5050509193909250565b604080516020808201869052818301859052825180830384018152606090920190925280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2c9190613e65565b50935050505080610b845760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfb9190613ee4565b15610c395760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610b7b565b60008681526006602052604090205460ff16610c675760405162461bcd60e51b8152600401610b7b90613eff565b600086815260036020526040812054600280549091908110610c8b57610c8b613e23565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610cbf57610cbf613e23565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3e9190613f36565b5050600087815260078401602052604090205490915060ff16610d88576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ecd565b808603610dfd576000868152600683016020526040902054610dab576000610df6565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610dec9190613dea565b610df69190613e01565b9450610ecd565b600081815260078301602052604090205460ff16610ecd5781600601600083600a01600181548110610e3157610e31613e23565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610e6757610e67613e23565b9060005260206000200154815260200190815260200160002054610e8b9190613f72565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610ec09190613dea565b610eca9190613e01565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610f6357600754610f14906001600160a01b038a811691889116612b24565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051610f5a929190918252602082015260400190565b60405180910390a45b50505050949350505050565b600082815260036020526040902054600280548492908110610f9357610f93613e23565b600091825260209091206002600590920201015460ff1615610fc75760405162461bcd60e51b8152600401610b7b90613f85565b600083815260036020526040812054600280549091908110610feb57610feb613e23565b90600052602060002090600502019050806001015483111561104f5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610b7b565b60008481526006602052604090205460ff1661107d5760405162461bcd60e51b8152600401610b7b90613eff565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee9190613d9d565b9150915081421015801561110157508042105b6111465760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610b7b565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190613f36565b505090508681036111c0576127109150611241565b6127106113886111d08686613dd7565b6111da9190613dea565b6111e49190613e01565b6111ee8542613dd7565b1061123b5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610b7b565b614e2091505b8454600090869061125490600190613dd7565b8154811061126457611264613e23565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190613fbc565b6112f19190613dd7565b60008a815260078401602052604090205490915060ff16156113555760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610b7b565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa15801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190613fbc565b905060006127106113d48784613dea565b6113de9190613e01565b6113e89083613f72565b60008c8152600686016020526040812054919250908211156114995760008c815260068601602052604090205434906114219084613dd7565b116114465760008c81526006860160205260409020546114419083613dd7565b611448565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f85604051611490929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906114c5908490613f72565b909155505060008c8152600686016020526040812080548392906114ea908490613f72565b909155505060008c815260068601602052604090205482116115bc5760008c81526006860160205260408120546009870180549192909161152c908490613f72565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156117c7578285600901546115d99190613dd7565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164b9190613ee4565b156116645760028a01805460ff19166001179055611747565b895460038b016000611677876001613f72565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b81526004016116f291815260200190565b602060405180830381865afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190613fbc565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016117949392919061400f565b6000604051808303818588803b1580156117ad57600080fd5b505af11580156117c1573d6000803e3d6000fd5b50505050505b803411156117f0576117f06117dc8234613dd7565b6007543391906001600160a01b0316612b24565b50505050505050505050505050565b61180882612c0f565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061188657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661187a60008051602061439e8339815191525490565b6001600160a01b031614155b156118a45760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118fe575060408051601f3d908101601f191682019092526118fb91810190613fbc565b60015b61192657604051630c76093760e01b81526001600160a01b0383166004820152602401610b7b565b60008051602061439e833981519152811461195757604051632a87526960e21b815260048101829052602401610b7b565b60008051602061439e8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611a22576000836001600160a01b0316836040516119be91906140a9565b600060405180830381855af49150503d80600081146119f9576040519150601f19603f3d011682016040523d82523d6000602084013e6119fe565b606091505b5050905080611a20576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a725760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061439e83398151915290565b60028181548110611a9557600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611ac890613fd5565b80601f0160208091040260200160405190810160405280929190818152602001828054611af490613fd5565b8015611b415780601f10611b1657610100808354040283529160200191611b41565b820191906000526020600020905b815481529060010190602001808311611b2457829003601f168201915b5050505050905083565b611a2084848484612c3c565b6000818152600360205260408120546002805460609392908110611b7d57611b7d613e23565b60009182526020822060059091020180549092508290611b9f90600190613dd7565b81548110611baf57611baf613e23565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c0d57602002820191906000526020600020905b815481526020019060010190808311611bf9575b505050505092505050919050565b600085815260036020526040812054600280548392908110611c3f57611c3f613e23565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611c7357611c73613e23565b90600052602060002090600c02016000018681548110611c9557611c95613e23565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d179190613f36565b506003850154919350915060ff168015611d3b57508183600201541480611d3b5750805b15611d4e5761271094505050505061089c565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611d8f57611d8f613e23565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611dc357611dc3613e23565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611e3a57611e3a613e23565b60009182526020822060059091020180549092508290611e5c90600190613dd7565b81548110611e6c57611e6c613e23565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190613e65565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015611f46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6a91906140c5565b5050505050915050600081611f80578354611f86565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b03163314611fc35760405162461bcd60e51b8152600401610b7b90614131565b6000836001600160a01b03168383604051611fde91906140a9565b60006040518083038185875af1925050503d806000811461201b576040519150601f19603f3d011682016040523d82523d6000602084013e612020565b606091505b5050905080611a205760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610b7b565b61207486868686868633612f9f565b505050505050565b6000546001600160a01b031633146120a65760405162461bcd60e51b8152600401610b7b90614131565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a815260200190815260200160002054815481106120f6576120f6613e23565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061212a5761212a613e23565b90600052602060002090600c0201600001878154811061214c5761214c613e23565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146121b85760405162461bcd60e51b8152600401610b7b90614173565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad201612243858783614205565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156122a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ca9190613fbc565b6122d49190613dd7565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab581089061236f908a908a908a906142c4565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106123a5576123a5613e23565b600091825260208083208784526003600590930201918201905260408220548154919350839181106123d9576123d9613e23565b90600052602060002090600c020160000184815481106123fb576123fb613e23565b600091825260209091206004909102016003015460ff169695505050505050565b600160006124286136d0565b8054909150600160401b900460ff168061244f575080546001600160401b03808416911610155b1561246c5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556124988585856136f4565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146125135760405162461bcd60e51b8152600401610b7b90614173565b60008381526003602052604090205460028054859290811061253757612537613e23565b600091825260209091206002600590920201015460ff161561256b5760405162461bcd60e51b8152600401610b7b90613f85565b600084815260036020526040812054600280549192918390811061259157612591613e23565b60009182526020822060059091020180549092506125b190600190613dd7565b905060008260000182815481106125ca576125ca613e23565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561262f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265391906142fa565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156126a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c69190613e65565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561272a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274e91906142fa565b98506001600160a01b03891661276a575050505050505061282e565b612775848c8b61373b565b1561282157604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612826565b600098505b505050505050505b5092915050565b60008281526003602052604081205460028054839290811061285957612859613e23565b6000918252602080832086845260036005909302019182019052604082205481549193508391811061288d5761288d613e23565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa1580156128ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129109190613f36565b509150915082600401546000148061293f57508015801561293f57506000828152600284016020526040902054155b15612951576000945050505050612982565b80156129665750506004015491506129829050565b5060009081526002909101602052604090205491506129829050565b92915050565b6000546001600160a01b031633146129b25760405162461bcd60e51b8152600401610b7b90614131565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526003602052604081205460028054919291839081106129fa576129fa613e23565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612a326136d0565b8054909150600160401b900460ff1680612a59575080546001600160401b03808416911610155b15612a765760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612b0d57612b0d613e23565b600091825260209091206005909102015492915050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015612b5357505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b8e57600080fd5b505af1158015612ba2573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612c395760405162461bcd60e51b8152600401610b7b90614131565b50565b600084815260036020526040902054600280548692908110612c6057612c60613e23565b600091825260209091206002600590920201015460ff1615612c945760405162461bcd60e51b8152600401610b7b90613f85565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d029190613e65565b5090935060019250612d12915050565b816004811115612d2457612d24613ece565b14612d815760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610b7b565b82612dbe5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610b7b565b60008681526006602052604090205460ff16612dec5760405162461bcd60e51b8152600401610b7b90613eff565b600086815260036020526040812054600280549091908110612e1057612e10613e23565b60009182526020822060059091020180549092508290612e3290600190613dd7565b81548110612e4257612e42613e23565b90600052602060002090600c0201905060005b86811015612f38573382898984818110612e7157612e71613e23565b9050602002013581548110612e8857612e88613e23565b60009182526020909120600490910201546001600160a01b031614612eef5760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610b7b565b8582898984818110612f0357612f03613e23565b9050602002013581548110612f1a57612f1a613e23565b60009182526020909120600160049092020181019190915501612e55565b5086869050816005016000828254612f509190613f72565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890612f8d908b908b908b90614349565b60405180910390a35050505050505050565b600087815260036020526040902054600280548992908110612fc357612fc3613e23565b600091825260209091206002600590920201015460ff1615612ff75760405162461bcd60e51b8152600401610b7b90613f85565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130659190613e65565b5090935060029250613075915050565b81600481111561308757613087613ece565b146130e25760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610b7b565b866131245760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610b7b565b60008981526006602052604090205460ff166131525760405162461bcd60e51b8152600401610b7b90613eff565b60008981526003602052604081205460028054909190811061317657613176613e23565b9060005260206000209060050201905080600101548711156131d15760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610b7b565b805460009082906131e490600190613dd7565b815481106131f4576131f4613e23565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d90613239908f9060040190815260200190565b60a060405180830381865afa158015613256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327a9190613e65565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156132d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f991906140c5565b5050505050915050600061330e8b8b8b610a8a565b905060005b8c811015613595576001600160a01b038916858f8f8481811061333857613338613e23565b905060200201358154811061334f5761334f613e23565b60009182526020909120600490910201546001600160a01b0316146133b65760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610b7b565b8215806133fd575081858f8f848181106133d2576133d2613e23565b90506020020135815481106133e9576133e9613e23565b906000526020600020906004020160010154145b61347d5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610b7b565b848e8e8381811061349057613490613e23565b90506020020135815481106134a7576134a7613e23565b600091825260209091206003600490920201015460ff16156135005760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610b7b565b8b858f8f8481811061351457613514613e23565b905060200201358154811061352b5761352b613e23565b60009182526020909120600260049092020101556001858f8f8481811061355457613554613e23565b905060200201358154811061356b5761356b613e23565b60009182526020909120600490910201600301805460ff1916911515919091179055600101613313565b5050506004820180548b92506000906135af908490613f72565b90915550506000888152600282016020526040812080548b92906135d4908490613f72565b90915550506001810154880361360357600381015460ff16156135fe5760038101805460ff191690555b61367c565b60018101546000908152600282016020526040808220548a83529120540361364557600381015460ff166135fe5760038101805460ff1916600117905561367c565b60018101546000908152600282016020526040808220548a8352912054111561367c576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b6040516136bb9392919061436d565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6136fc6137d3565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60045460009060ff16156137c957600083815260036020526040812054600280549192918390811061376f5761376f613e23565b600091825260208220600590910201805490925061378f90600190613dd7565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610ab3915050565b5060019392505050565b6137db6137fa565b6137f857604051631afcd79f60e31b815260040160405180910390fd5b565b60006138046136d0565b54600160401b900460ff16919050565b60006020828403121561382657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261385457600080fd5b8135602083016000806001600160401b038411156138745761387461382d565b50604051601f19601f85018116603f011681018181106001600160401b03821117156138a2576138a261382d565b6040528381529050808284018710156138ba57600080fd5b838360208301376000602085830101528094505050505092915050565b6000806000606084860312156138ec57600080fd5b833592506020840135915060408401356001600160401b0381111561391057600080fd5b61391c86828701613843565b9150509250925092565b6001600160a01b0381168114612c3957600080fd5b6000806000806080858703121561395157600080fd5b84359350602085013561396381613926565b93969395505050506040820135916060013590565b6000806040838503121561398b57600080fd5b50508035926020909101359150565b600080604083850312156139ad57600080fd5b82356139b881613926565b915060208301356001600160401b038111156139d357600080fd5b6139df85828601613843565b9150509250929050565b60005b83811015613a045781810151838201526020016139ec565b50506000910152565b60008151808452613a258160208601602086016139e9565b601f01601f19169290920160200192915050565b602081526000610ab36020830184613a0d565b838152821515602082015260606040820152600061089c6060830184613a0d565b600080600060608486031215613a8257600080fd5b83359250602084013591506040840135613a9b81613926565b809150509250925092565b60008083601f840112613ab857600080fd5b5081356001600160401b03811115613acf57600080fd5b6020830191508360208260051b8501011115613aea57600080fd5b9250929050565b60008060008060608587031215613b0757600080fd5b8435935060208501356001600160401b03811115613b2457600080fd5b613b3087828801613aa6565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613b7b578351835260209384019390920191600101613b5d565b509095945050505050565b600080600080600060a08688031215613b9e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613bd657600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613c0257600080fd5b8335613c0d81613926565b92506020840135915060408401356001600160401b0381111561391057600080fd5b60008060008060008060a08789031215613c4857600080fd5b8635955060208701356001600160401b03811115613c6557600080fd5b613c7189828a01613aa6565b909650945050604087013592506060870135915060808701356001600160401b03811115613c9e57600080fd5b613caa89828a01613843565b9150509295509295509295565b600060208284031215613cc957600080fd5b8135610ab381613926565b600080600080600060808688031215613cec57600080fd5b853594506020860135935060408601356001600160401b03811115613d1057600080fd5b8601601f81018813613d2157600080fd5b80356001600160401b03811115613d3757600080fd5b886020828401011115613d4957600080fd5b959894975060200195606001359392505050565b600080600060608486031215613d7257600080fd5b8335613d7d81613926565b92506020840135613d8d81613926565b91506040840135613a9b81613926565b60008060408385031215613db057600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b8181038181111561298257612982613dc1565b808202811582820484141761298257612982613dc1565b600082613e1e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80516001600160601b0381168114613e5057600080fd5b919050565b80518015158114613e5057600080fd5b600080600080600060a08688031215613e7d57600080fd5b613e8686613e39565b94506020860151613e9681613926565b604087015190945060058110613eab57600080fd5b9250613eb960608701613e55565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613ef657600080fd5b610ab382613e55565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b600080600060608486031215613f4b57600080fd5b83519250613f5b60208501613e55565b9150613f6960408501613e55565b90509250925092565b8082018082111561298257612982613dc1565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b600060208284031215613fce57600080fd5b5051919050565b600181811c90821680613fe957607f821691505b60208210810361400957634e487b7160e01b600052602260045260246000fd5b50919050565b83815282602082015260606040820152600080835461402d81613fd5565b806060860152600182166000811461404c57600181146140685761409c565b60ff1983166080870152608082151560051b870101935061409c565b86600052602060002060005b8381101561409357815488820160800152600190910190602001614074565b87016080019450505b5091979650505050505050565b600082516140bb8184602087016139e9565b9190910192915050565b600080600080600080600060e0888a0312156140e057600080fd5b6140e988613e39565b96506140f760208901613e55565b604089015160608a015160808b015160a08c015193995091975095509350915061412360c08901613e55565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611a2257806000526020600020601f840160051c810160208510156141de5750805b601f840160051c820191505b818110156141fe57600081556001016141ea565b5050505050565b6001600160401b0383111561421c5761421c61382d565b6142308361422a8354613fd5565b836141b7565b6000601f841160018114614264576000851561424c5750838201355b600019600387901b1c1916600186901b1783556141fe565b600083815260209020601f19861690835b828110156142955786850135825560209485019460019092019101614275565b50868210156142b25760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561430c57600080fd5b8151610ab381613926565b81835260006001600160fb1b0383111561433057600080fd5b8260051b80836020870137939093016020019392505050565b60408152600061435d604083018587614317565b9050826020830152949350505050565b604081526000614381604083018587614317565b82810360208401526143938185613a0d565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212205273a7fd5d9b74f6a10c8e8ff9173490991e595b881e9a1f0a7986976eaa245264736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "getLocalDisputeRoundID(uint256,uint256)": { - "details": "Returns the local dispute ID and round ID for a given core dispute ID and core round ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core." - }, - "returns": { - "localDisputeID": "The ID of the dispute in the Dispute Kit.", - "localRoundID": "The ID of the round in the Dispute Kit." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Returns the number of rounds in a dispute.", - "params": { - "_localDisputeID": "The ID of the dispute in the Dispute Kit." - }, - "returns": { - "_0": "The number of rounds in the dispute." - } - }, - "getVoteInfo(uint256,uint256,uint256)": { - "details": "Returns the vote information for a given vote ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The address of the juror who cast the vote.", - "commit": "The commit of the vote." - } - }, - "hashVote(uint256,uint256,string)": { - "details": "Computes the hash of a vote using ABI encodingThe unused parameters may be used by overriding contracts.", - "params": { - "_choice": "The choice being voted for", - "_justification": "The justification for the vote", - "_salt": "A random salt for commitment" - }, - "returns": { - "_0": "bytes32 The hash of the encoded vote parameters" - } - }, - "initialize(address,address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isAppealFunded(uint256)": { - "details": "Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "Whether the appeal funding is finished." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "DisputeKitClassic Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 6613, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6616, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)303" - }, - { - "astId": 6620, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)6552_storage)dyn_storage" - }, - { - "astId": 6624, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6626, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "singleDrawPerJuror", - "offset": 0, - "slot": "4", - "type": "t_bool" - }, - { - "astId": 6634, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "alreadyDrawn", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))" - }, - { - "astId": 6638, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "coreDisputeIDToActive", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6640, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "wNative", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)6552_storage)dyn_storage": { - "base": "t_struct(Dispute)6552_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)6590_storage)dyn_storage": { - "base": "t_struct(Round)6590_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)6599_storage)dyn_storage": { - "base": "t_struct(Vote)6599_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)303": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(uint256 => mapping(address => bool)))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)6552_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Dispute", - "members": [ - { - "astId": 6541, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)6590_storage)dyn_storage" - }, - { - "astId": 6543, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6545, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 6549, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6551, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)6590_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Round", - "members": [ - { - "astId": 6556, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)6599_storage)dyn_storage" - }, - { - "astId": 6558, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6562, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6564, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 6566, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 6568, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 6572, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6576, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6582, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 6584, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 6587, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 6589, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)6599_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Vote", - "members": [ - { - "astId": 6592, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6594, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 6596, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 6598, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeKitClassic_Proxy.json b/contracts/deployments/arbitrumSepolia/DisputeKitClassic_Proxy.json deleted file mode 100644 index 3b1bf19a4..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeKitClassic_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xa851c86c0cdd54d7e6b8439188b655cd8676307dc7c4cfa9b831f7b36463498e", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94", - "transactionIndex": 1, - "gasUsed": "203799", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xb34e46f2829db2ccafc48071a3a1955eda10f39f57d0d723dc3d0a94951b4e32", - "transactionHash": "0xa851c86c0cdd54d7e6b8439188b655cd8676307dc7c4cfa9b831f7b36463498e", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 95247789, - "transactionHash": "0xa851c86c0cdd54d7e6b8439188b655cd8676307dc7c4cfa9b831f7b36463498e", - "address": "0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0xb34e46f2829db2ccafc48071a3a1955eda10f39f57d0d723dc3d0a94951b4e32" - } - ], - "blockNumber": 95247789, - "cumulativeGasUsed": "203799", - "status": 1, - "byzantium": true - }, - "args": [ - "0xDb0B7908C46E2Bb08459bf9b3155b9bb8F8713E1", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitClassicProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212209138e100adbd3fe6a9a3438fe94aa8c15d5a5ba828eefa2eadc87e1958a90b6a64736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212209138e100adbd3fe6a9a3438fe94aa8c15d5a5ba828eefa2eadc87e1958a90b6a64736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeKitGated.json b/contracts/deployments/arbitrumSepolia/DisputeKitGated.json deleted file mode 100644 index a5a30bf5a..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeKitGated.json +++ /dev/null @@ -1,1238 +0,0 @@ -{ - "address": "0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "extraDataToTokenInfo", - "outputs": [ - { - "internalType": "address", - "name": "tokenGate", - "type": "address" - }, - { - "internalType": "bool", - "name": "isERC1155", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0xff42b4296deabcf5e0598aae751de91a9bfe74d88f6ed4fe82f4373877356ed2", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed", - "transactionIndex": 3, - "gasUsed": "199470", - "logsBloom": "0x00000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000800000000000000000400000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x6d6487daca86983ca793f5ef5bc7611b0083f34ce18bcb33c48ef1fc83d076be", - "transactionHash": "0xff42b4296deabcf5e0598aae751de91a9bfe74d88f6ed4fe82f4373877356ed2", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 178241316, - "transactionHash": "0xff42b4296deabcf5e0598aae751de91a9bfe74d88f6ed4fe82f4373877356ed2", - "address": "0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 5, - "blockHash": "0x6d6487daca86983ca793f5ef5bc7611b0083f34ce18bcb33c48ef1fc83d076be" - } - ], - "blockNumber": 178241316, - "cumulativeGasUsed": "358154", - "status": 1, - "byzantium": true - }, - "args": [ - "0x074837F8306faD19D4e6b1f3d2f98eA796c3f8a9", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000e8442307d36e9bf6ab27f1a009f95ce8e11c3479" - ], - "numDeployments": 2, - "solcInputHash": "55ee2edfcfbef3e6f4c10ec53a4be5f5", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitGatedProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220996d130d61aaeb26a9d0d04a99b8d31e12de6834d2200a693f04efa432fb1da264736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220996d130d61aaeb26a9d0d04a99b8d31e12de6834d2200a693f04efa432fb1da264736f6c634300081c0033", - "execute": { - "methodName": "reinitialize", - "args": [ - "0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511" - ] - }, - "implementation": "0x2d1b63C9638ed62875256676C665a7ec14D7663C", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeKitGatedShutter.json b/contracts/deployments/arbitrumSepolia/DisputeKitGatedShutter.json deleted file mode 100644 index 34bb783b7..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeKitGatedShutter.json +++ /dev/null @@ -1,1312 +0,0 @@ -{ - "address": "0x936231010462458ebaA45dDc422A5940C08a474C", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "CommitCastShutter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "castCommitShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVoteShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x437f13f63ba31dedefe7a91e9ec302ea649844a3a1cfcbb5b8c5602c23ae1f3f", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x936231010462458ebaA45dDc422A5940C08a474C", - "transactionIndex": 2, - "gasUsed": "199401", - "logsBloom": "0x00000000000000000100000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000400000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa1ce003b84a13937b1dce3f5ceea263df615e82cad05a83eb02b8dd4bc260f6b", - "transactionHash": "0x437f13f63ba31dedefe7a91e9ec302ea649844a3a1cfcbb5b8c5602c23ae1f3f", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 178241338, - "transactionHash": "0x437f13f63ba31dedefe7a91e9ec302ea649844a3a1cfcbb5b8c5602c23ae1f3f", - "address": "0x936231010462458ebaA45dDc422A5940C08a474C", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 5, - "blockHash": "0xa1ce003b84a13937b1dce3f5ceea263df615e82cad05a83eb02b8dd4bc260f6b" - } - ], - "blockNumber": 178241338, - "cumulativeGasUsed": "339904", - "status": 1, - "byzantium": true - }, - "args": [ - "0xbd64B87c8A1276c0B83042f3F9128f7994753836", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000e8442307d36e9bf6ab27f1a009f95ce8e11c3479" - ], - "numDeployments": 2, - "solcInputHash": "55ee2edfcfbef3e6f4c10ec53a4be5f5", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitGatedShutterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122014335073f133775bc3d53bdbd73e5b08fc775962b3f58fb9a922739829545a1f64736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122014335073f133775bc3d53bdbd73e5b08fc775962b3f58fb9a922739829545a1f64736f6c634300081c0033", - "execute": { - "methodName": "reinitialize", - "args": [ - "0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511" - ] - }, - "implementation": "0x3a06272f2FEEC12B0FB5F3FF82688c0F06808bE7", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeKitGatedShutter_Implementation.json b/contracts/deployments/arbitrumSepolia/DisputeKitGatedShutter_Implementation.json deleted file mode 100644 index 338cd9c0d..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeKitGatedShutter_Implementation.json +++ /dev/null @@ -1,1975 +0,0 @@ -{ - "address": "0x3a06272f2FEEC12B0FB5F3FF82688c0F06808bE7", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "CommitCastShutter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "castCommitShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVoteShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xf344ebf59e326184b97eb77140166a463c219e3f519bd3b812594f093850bd60", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x3a06272f2FEEC12B0FB5F3FF82688c0F06808bE7", - "transactionIndex": 2, - "gasUsed": "4143949", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000800000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000800000000000000000000000000000000", - "blockHash": "0xfda1776987479ec0fd4d94e8b6e5693908238e21301d59073a2dca8f41106c90", - "transactionHash": "0xf344ebf59e326184b97eb77140166a463c219e3f519bd3b812594f093850bd60", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 179580680, - "transactionHash": "0xf344ebf59e326184b97eb77140166a463c219e3f519bd3b812594f093850bd60", - "address": "0x3a06272f2FEEC12B0FB5F3FF82688c0F06808bE7", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 2, - "blockHash": "0xfda1776987479ec0fd4d94e8b6e5693908238e21301d59073a2dca8f41106c90" - } - ], - "blockNumber": 179580680, - "cumulativeGasUsed": "4239598", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "726fe29d8d9c48c46571792cebc6e314", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_identity\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_encryptedVote\",\"type\":\"bytes\"}],\"name\":\"CommitCastShutter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"name\":\"alreadyDrawn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_identity\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_encryptedVote\",\"type\":\"bytes\"}],\"name\":\"castCommitShutter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVoteShutter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getLocalDisputeRoundID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localDisputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"hashVote\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"isAppealFunded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleDrawPerJuror\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"CommitCastShutter(uint256,address,bytes32,bytes32,bytes)\":{\"details\":\"Emitted when a vote is cast.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_encryptedVote\":\"The Shutter encrypted vote.\",\"_identity\":\"The Shutter identity used for encryption.\",\"_juror\":\"The address of the juror casting the vote commitment.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castCommitShutter(uint256,uint256[],bytes32,bytes32,bytes)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash including the justification.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_encryptedVote\":\"The Shutter encrypted vote.\",\"_identity\":\"The Shutter identity used for encryption.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"getLocalDisputeRoundID(uint256,uint256)\":{\"details\":\"Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\"},\"returns\":{\"localDisputeID\":\"The ID of the dispute in the Dispute Kit.\",\"localRoundID\":\"The ID of the round in the Dispute Kit.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Returns the number of rounds in a dispute.\",\"params\":{\"_localDisputeID\":\"The ID of the dispute in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of rounds in the dispute.\"}},\"getVoteInfo(uint256,uint256,uint256)\":{\"details\":\"Returns the vote information for a given vote ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The address of the juror who cast the vote.\",\"commit\":\"The commit of the vote.\"}},\"hashVote(uint256,uint256,string)\":{\"details\":\"Computes the hash of a vote using ABI encoding\",\"params\":{\"_choice\":\"The choice being voted for\",\"_justification\":\"The justification for the vote\",\"_salt\":\"A random salt for commitment\"},\"returns\":{\"_0\":\"bytes32 The hash of the encoded vote parameters\"}},\"initialize(address,address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isAppealFunded(uint256)\":{\"details\":\"Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"Whether the appeal funding is finished.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"DisputeKitGatedShutter Added functionality: shielded voting. Dispute kit implementation adapted from DisputeKitClassic - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitGatedShutter.sol\":\"DisputeKitGatedShutter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassicBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore, KlerosCoreBase, IDisputeKit, ISortitionModule} from \\\"../KlerosCore.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {SafeSend} from \\\"../../libraries/SafeSend.sol\\\";\\n\\n/// @title DisputeKitClassicBase\\n/// Abstract Dispute kit classic implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\nabstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable {\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default.\\n mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool)))\\n public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading.\\n mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function __DisputeKitClassicBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n dispute.jumped = false; // Possibly true if this DK has jumped in a previous round.\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n coreDisputeIDToActive[_coreDisputeID] = true;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[localRoundID];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n if (drawnAddress == address(0)) {\\n // Sortition can return 0 address if no one has staked yet.\\n return drawnAddress;\\n }\\n\\n if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true;\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash.\\n function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n }\\n\\n function _castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender);\\n }\\n\\n function _castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification,\\n address _juror\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n bytes32 voteHash = hashVote(_choice, _salt, _justification);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == _juror, \\\"The juror has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == voteHash,\\n \\\"The vote hash must match the commitment in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n } // Workaround stack too deep\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.safeSend(amount, wNative);\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @dev The unused parameters may be used by overriding contracts.\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(_choice, _salt));\\n }\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length;\\n\\n return round.totalVoted == expectedTotalVoted;\\n }\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) {\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n // Uses block.timestamp from the current tx when called by the core contract.\\n return (fundedChoices.length == 0 &&\\n block.timestamp - appealPeriodStart >=\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT);\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n /// @dev Returns the number of rounds in a dispute.\\n /// @param _localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return The number of rounds in the dispute.\\n function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) {\\n return disputes[_localDisputeID].rounds.length;\\n }\\n\\n /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @return localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return localRoundID The ID of the round in the Dispute Kit.\\n function getLocalDisputeRoundID(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID\\n ) external view returns (uint256 localDisputeID, uint256 localRoundID) {\\n localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID];\\n }\\n\\n /// @dev Returns the vote information for a given vote ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @param _voteID The ID of the vote.\\n /// @return account The address of the juror who cast the vote.\\n /// @return commit The commit of the vote.\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts.\\n /// minStake is checked directly during staking process however it's possible for the juror to get drawn\\n /// while having < minStake if it is later increased by governance.\\n /// This issue is expected and harmless.\\n /// @param _round The round in which the juror is being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return result Whether the address passes the check or not.\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view virtual returns (bool result) {\\n if (singleDrawPerJuror) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n result = !alreadyDrawn[localDisputeID][localRoundID][_juror];\\n } else {\\n result = true;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc418b9a76802db5d16819836734ecff8b76d5f37101819aee6fd1844dfe21dd9\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitGatedShutter.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {DisputeKitClassicBase, KlerosCore} from \\\"./DisputeKitClassicBase.sol\\\";\\n\\ninterface IBalanceHolder {\\n /// @dev Returns the number of tokens in `owner` account.\\n /// @dev Compatible with ERC-20 and ERC-721.\\n /// @param owner The address of the owner.\\n /// @return balance The number of tokens in `owner` account.\\n function balanceOf(address owner) external view returns (uint256 balance);\\n}\\n\\ninterface IBalanceHolderERC1155 {\\n /// @dev Returns the balance of an ERC-1155 token.\\n /// @param account The address of the token holder\\n /// @param id ID of the token\\n /// @return The token balance\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n}\\n\\n/// @title DisputeKitGatedShutter\\n/// Added functionality: shielded voting.\\n/// Dispute kit implementation adapted from DisputeKitClassic\\n/// - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitGatedShutter is DisputeKitClassicBase {\\n string public constant override version = \\\"0.12.0\\\";\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a vote is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _commit The commitment hash.\\n /// @param _identity The Shutter identity used for encryption.\\n /// @param _encryptedVote The Shutter encrypted vote.\\n event CommitCastShutter(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n bytes32 indexed _commit,\\n bytes32 _identity,\\n bytes _encryptedVote\\n );\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(address _governor, KlerosCore _core, address _wNative) external reinitializer(1) {\\n __DisputeKitClassicBase_initialize(_governor, _core, _wNative);\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(9) {\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash including the justification.\\n /// @param _identity The Shutter identity used for encryption.\\n /// @param _encryptedVote The Shutter encrypted vote.\\n function castCommitShutter(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit,\\n bytes32 _identity,\\n bytes calldata _encryptedVote\\n ) external notJumped(_coreDisputeID) {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n emit CommitCastShutter(_coreDisputeID, msg.sender, _commit, _identity, _encryptedVote);\\n }\\n\\n function castVoteShutter(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n address juror = dispute.rounds[dispute.rounds.length - 1].votes[_voteIDs[0]].account;\\n\\n // _castVote() ensures that all the _voteIDs do belong to `juror`\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, juror);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure override returns (bytes32) {\\n bytes32 justificationHash = keccak256(bytes(_justification));\\n return keccak256(abi.encode(_choice, _salt, justificationHash));\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Extracts token gating information from the extra data.\\n /// @param _extraData The extra data bytes array with the following encoding:\\n /// - bytes 0-31: uint96 courtID, not used here\\n /// - bytes 32-63: uint256 minJurors, not used here\\n /// - bytes 64-95: uint256 disputeKitID, not used here\\n /// - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160)\\n /// - bytes 128-159: uint256 tokenId\\n /// @return tokenGate The address of the token contract used for gating access.\\n /// @return isERC1155 True if the token is an ERC-1155, false for ERC-20/ERC-721.\\n /// @return tokenId The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721).\\n function _extraDataToTokenInfo(\\n bytes memory _extraData\\n ) internal pure returns (address tokenGate, bool isERC1155, uint256 tokenId) {\\n // Need at least 160 bytes to safely read the parameters\\n if (_extraData.length < 160) return (address(0), false, 0);\\n\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let packedTokenGateIsERC1155 := mload(add(_extraData, 0x80)) // 4th parameter at offset 128\\n tokenId := mload(add(_extraData, 0xA0)) // 5th parameter at offset 160 (moved up)\\n\\n // Unpack address from lower 160 bits and bool from bit 160\\n tokenGate := and(packedTokenGateIsERC1155, 0xffffffffffffffffffffffffffffffffffffffff)\\n isERC1155 := and(shr(160, packedTokenGateIsERC1155), 1)\\n }\\n }\\n\\n /// @inheritdoc DisputeKitClassicBase\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view override returns (bool) {\\n if (!super._postDrawCheck(_round, _coreDisputeID, _juror)) return false;\\n\\n // Get the local dispute and extract token info from extraData\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n (address tokenGate, bool isERC1155, uint256 tokenId) = _extraDataToTokenInfo(dispute.extraData);\\n\\n // If no token gate is specified, allow all jurors\\n if (tokenGate == address(0)) return true;\\n\\n // Check juror's token balance\\n if (isERC1155) {\\n return IBalanceHolderERC1155(tokenGate).balanceOf(_juror, tokenId) > 0;\\n } else {\\n return IBalanceHolder(tokenGate).balanceOf(_juror) > 0;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa2b7c8f0af04be5a41d5e0a3a97b359867f6e79eb98da2303d33317fe147faef\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161489e6100fc60003960008181611937015281816119600152611b4f015261489e6000f3fe6080604052600436106102465760003560e01c80636d4cd8ea11610139578063be467604116100b6578063e4c0aaf41161007a578063e4c0aaf414610753578063f2f4eb2614610773578063f32ab92714610793578063f7e7d1fd146107c8578063f8abee10146107e8578063fc6f8f161461081857600080fd5b8063be467604146106dd578063c0c53b8b146106f3578063d2b8035a14610713578063da3beb8c14610733578063e349ad30146105c557600080fd5b80638f06f112116100fd5780638f06f1121461061b578063a7cc08fe1461063b578063b34bfaa814610687578063b6ede5401461069d578063ba66fde7146106bd57600080fd5b80636d4cd8ea14610585578063751accd0146105a5578063796490f9146105c55780637c04034e146105db5780638e426460146105fb57600080fd5b80634b2f0ea0116101c75780635a155ccd1161018b5780635a155ccd1461048a5780635c92e2f6146104cb57806365540b96146104eb578063675926f61461051857806369f3f0411461053857600080fd5b80634b2f0ea0146103e15780634f1ef286146103f457806352d1902d1461040757806354fd4d501461041c578063564a565d1461045b57600080fd5b80631c3db16d1161020e5780631c3db16d1461032a5780631cc3423a146103675780632621b9a2146103875780632d68efc9146103a1578063362c3479146103c157600080fd5b80630855bbe91461024b57806309cc41b8146102805780630baa64d1146102a25780630c340a24146102c25780631200aabc146102ef575b600080fd5b34801561025757600080fd5b5061026b610266366004613bfc565b610838565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004613ca1565b610900565b005b3480156102ae57600080fd5b5061026b6102bd366004613bfc565b6109be565b3480156102ce57600080fd5b506000546102e2906001600160a01b031681565b6040516102779190613d31565b3480156102fb57600080fd5b5061031c61030a366004613bfc565b60036020526000908152604090205481565b604051908152602001610277565b34801561033657600080fd5b5061034a610345366004613bfc565b610a35565b604080519384529115156020840152151590820152606001610277565b34801561037357600080fd5b5061031c610382366004613def565b610ba3565b34801561039357600080fd5b5060045461026b9060ff1681565b3480156103ad57600080fd5b506007546102e2906001600160a01b031681565b3480156103cd57600080fd5b5061031c6103dc366004613e53565b610be3565b6102a06103ef366004613e90565b611093565b6102a0610402366004613eb2565b611923565b34801561041357600080fd5b5061031c611b42565b34801561042857600080fd5b5061044e604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102779190613f51565b34801561046757600080fd5b5061047b610476366004613bfc565b611ba0565b60405161027793929190613f64565b34801561049657600080fd5b5061026b6104a5366004613f85565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104d757600080fd5b506102a06104e6366004613fbe565b611c66565b3480156104f757600080fd5b5061050b610506366004613bfc565b611c72565b6040516102779190614010565b34801561052457600080fd5b5061031c610533366004614053565b611d36565b34801561054457600080fd5b5061055861055336600461408e565b611e79565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610277565b34801561059157600080fd5b5061026b6105a0366004613bfc565b611f31565b3480156105b157600080fd5b506102a06105c03660046140ba565b6120b4565b3480156105d157600080fd5b5061031c61271081565b3480156105e757600080fd5b506102a06105f63660046140fc565b612180565b34801561060757600080fd5b506102a0610616366004614184565b612197565b34801561062757600080fd5b506102a06106363660046140fc565b6121e3565b34801561064757600080fd5b5061065b61065636600461408e565b6122a9565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610277565b34801561069357600080fd5b5061031c614e2081565b3480156106a957600080fd5b506102a06106b83660046141a1565b61236f565b3480156106c957600080fd5b5061026b6106d836600461408e565b612562565b3480156106e957600080fd5b5061031c61138881565b3480156106ff57600080fd5b506102a061070e3660046141fb565b6125fd565b34801561071f57600080fd5b506102e261072e366004613e90565b6126c7565b34801561073f57600080fd5b5061031c61074e366004613e90565b612a16565b34801561075f57600080fd5b506102a061076e366004614184565b612b69565b34801561077f57600080fd5b506001546102e2906001600160a01b031681565b34801561079f57600080fd5b506107b36107ae366004613e90565b612bb5565b60408051928352602083019190915201610277565b3480156107d457600080fd5b506102a06107e3366004614184565b612c07565b3480156107f457600080fd5b5061026b610803366004613bfc565b60066020526000908152604090205460ff1681565b34801561082457600080fd5b5061031c610833366004613bfc565b612cd9565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa158015610885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a9919061423b565b9150915060006108b885611c72565b9050805160001480156108f757506127106113886108d68585614275565b6108e09190614288565b6108ea919061429f565b6108f48442614275565b10155b95945050505050565b600087815260036020526040902054600280548992908110610924576109246142c1565b600091825260209091206002600590920201015460ff16156109615760405162461bcd60e51b8152600401610958906142d7565b60405180910390fd5b61096d88888888612d05565b84336001600160a01b0316897fbc1efa6396a4ba1a755245703b38c48fbe744ab5117d9f09f47d26ffc1df999e8787876040516109ac93929190614337565b60405180910390a45050505050505050565b6000818152600360205260408120546002805483929081106109e2576109e26142c1565b60009182526020822060059091020180549092508290610a0490600190614275565b81548110610a1457610a146142c1565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610a6157610a616142c1565b60009182526020822060059091020180549092508290610a8390600190614275565b81548110610a9357610a936142c1565b60009182526020909120600c90910201600381015460ff169450905083610abe578060010154610ac1565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b34919061437d565b5090935060049250610b44915050565b816004811115610b5657610b566143e6565b03610b99576000610b6688611c72565b90508051600103610b975780600081518110610b8457610b846142c1565b6020026020010151965060009550600194505b505b5050509193909250565b80516020808301919091206040805180840187905280820186905260608082019390935281518082039093018352608001905280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c55919061437d565b50935050505080610ca85760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e00000000006044820152606401610958565b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f91906143fc565b15610d5d5760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610958565b60008681526006602052604090205460ff16610d8b5760405162461bcd60e51b815260040161095890614417565b600086815260036020526040812054600280549091908110610daf57610daf6142c1565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610de357610de36142c1565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e62919061444e565b5050600087815260078401602052604090205490915060ff16610eac576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ff1565b808603610f21576000868152600683016020526040902054610ecf576000610f1a565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610f109190614288565b610f1a919061429f565b9450610ff1565b600081815260078301602052604090205460ff16610ff15781600601600083600a01600181548110610f5557610f556142c1565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610f8b57610f8b6142c1565b9060005260206000200154815260200190815260200160002054610faf919061448a565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610fe49190614288565b610fee919061429f565b94505b6001600160a01b03881660009081526008830160209081526040808320898452909152812055841561108757600754611038906001600160a01b038a811691889116613068565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae898960405161107e929190918252602082015260400190565b60405180910390a45b50505050949350505050565b6000828152600360205260409020546002805484929081106110b7576110b76142c1565b600091825260209091206002600590920201015460ff16156110eb5760405162461bcd60e51b8152600401610958906142d7565b60008381526003602052604081205460028054909190811061110f5761110f6142c1565b9060005260206000209060050201905080600101548311156111735760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610958565b60008481526006602052604090205460ff166111a15760405162461bcd60e51b815260040161095890614417565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156111ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611212919061423b565b9150915081421015801561122557508042105b61126a5760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610958565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156112ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf919061444e565b505090508681036112e4576127109150611365565b6127106113886112f48686614275565b6112fe9190614288565b611308919061429f565b6113128542614275565b1061135f5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610958565b614e2091505b8454600090869061137890600190614275565b81548110611388576113886142c1565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b919061449d565b6114159190614275565b60008a815260078401602052604090205490915060ff16156114795760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610958565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e7919061449d565b905060006127106114f88784614288565b611502919061429f565b61150c908361448a565b60008c8152600686016020526040812054919250908211156115bd5760008c815260068601602052604090205434906115459084614275565b1161156a5760008c81526006860160205260409020546115659083614275565b61156c565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516115b4929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906115e990849061448a565b909155505060008c81526006860160205260408120805483929061160e90849061448a565b909155505060008c815260068601602052604090205482116116e05760008c81526006860160205260408120546009870180549192909161165090849061448a565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156118eb578285600901546116fd9190614275565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa15801561174b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176f91906143fc565b156117885760028a01805460ff1916600117905561186b565b895460038b01600061179b87600161448a565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161181691815260200190565b602060405180830381865afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611857919061449d565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016118b8939291906144f0565b6000604051808303818588803b1580156118d157600080fd5b505af11580156118e5573d6000803e3d6000fd5b50505050505b80341115611914576119146119008234614275565b6007543391906001600160a01b0316613068565b50505050505050505050505050565b61192c82613153565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119aa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661199e6000805160206148498339815191525490565b6001600160a01b031614155b156119c85760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a22575060408051601f3d908101601f19168201909252611a1f9181019061449d565b60015b611a415781604051630c76093760e01b81526004016109589190613d31565b6000805160206148498339815191528114611a7257604051632a87526960e21b815260048101829052602401610958565b6000805160206148498339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611b3d576000836001600160a01b031683604051611ad9919061458a565b600060405180830381855af49150503d8060008114611b14576040519150601f19603f3d011682016040523d82523d6000602084013e611b19565b606091505b5050905080611b3b576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b8d5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061484983398151915290565b60028181548110611bb057600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611be3906144b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0f906144b6565b8015611c5c5780601f10611c3157610100808354040283529160200191611c5c565b820191906000526020600020905b815481529060010190602001808311611c3f57829003601f168201915b5050505050905083565b611b3b84848484612d05565b6000818152600360205260408120546002805460609392908110611c9857611c986142c1565b60009182526020822060059091020180549092508290611cba90600190614275565b81548110611cca57611cca6142c1565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611d2857602002820191906000526020600020905b815481526020019060010190808311611d14575b505050505092505050919050565b600085815260036020526040812054600280548392908110611d5a57611d5a6142c1565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611d8e57611d8e6142c1565b90600052602060002090600c02016000018681548110611db057611db06142c1565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e32919061444e565b506003850154919350915060ff168015611e5657508183600201541480611e565750805b15611e69576127109450505050506108f7565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611eaa57611eaa6142c1565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611ede57611ede6142c1565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611f5557611f556142c1565b60009182526020822060059091020180549092508290611f7790600190614275565b81548110611f8757611f876142c1565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611fe2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612006919061437d565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208591906145a6565b505050505091505060008161209b5783546120a1565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b031633146120de5760405162461bcd60e51b815260040161095890614612565b6000836001600160a01b031683836040516120f9919061458a565b60006040518083038185875af1925050503d8060008114612136576040519150601f19603f3d011682016040523d82523d6000602084013e61213b565b606091505b5050905080611b3b5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610958565b61218f86868686868633613180565b505050505050565b6000546001600160a01b031633146121c15760405162461bcd60e51b815260040161095890614612565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600086815260036020526040812054600280549091908110612207576122076142c1565b6000918252602082206005909102018054909250829061222990600190614275565b81548110612239576122396142c1565b90600052602060002090600c02016000018787600081811061225d5761225d6142c1565b9050602002013581548110612274576122746142c1565b60009182526020909120600490910201546001600160a01b0316905061229f88888888888887613180565b5050505050505050565b60008060008060006002600360008a815260200190815260200160002054815481106122d7576122d76142c1565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061230b5761230b6142c1565b90600052602060002090600c0201600001878154811061232d5761232d6142c1565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146123995760405162461bcd60e51b815260040161095890614654565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2016124248587836146e6565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab919061449d565b6124b59190614275565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab5810890612550908a908a908a90614337565b60405180910390a25050505050505050565b600083815260036020526040812054600280548392908110612586576125866142c1565b600091825260208083208784526003600590930201918201905260408220548154919350839181106125ba576125ba6142c1565b90600052602060002090600c020160000184815481106125dc576125dc6142c1565b600091825260209091206004909102016003015460ff169695505050505050565b600160006126096138b1565b8054909150600160401b900460ff1680612630575080546001600160401b03808416911610155b1561264d5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556126798585856138d5565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146126f45760405162461bcd60e51b815260040161095890614654565b600083815260036020526040902054600280548592908110612718576127186142c1565b600091825260209091206002600590920201015460ff161561274c5760405162461bcd60e51b8152600401610958906142d7565b6000848152600360205260408120546002805491929183908110612772576127726142c1565b600091825260208220600590910201805490925061279290600190614275565b905060008260000182815481106127ab576127ab6142c1565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283491906147a5565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a7919061437d565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561290b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292f91906147a5565b98506001600160a01b03891661294b5750505050505050612a0f565b612956848c8b61391c565b15612a0257604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612a07565b600098505b505050505050505b5092915050565b600082815260036020526040812054600280548392908110612a3a57612a3a6142c1565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612a6e57612a6e6142c1565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af1919061444e565b5091509150826004015460001480612b20575080158015612b2057506000828152600284016020526040902054155b15612b32576000945050505050612b63565b8015612b47575050600401549150612b639050565b506000908152600290910160205260409020549150612b639050565b92915050565b6000546001600160a01b03163314612b935760405162461bcd60e51b815260040161095890614612565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546002805491929183908110612bdb57612bdb6142c1565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612c136138b1565b8054909150600160401b900460ff1680612c3a575080546001600160401b03808416911610155b15612c575760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612cee57612cee6142c1565b600091825260209091206005909102015492915050565b600084815260036020526040902054600280548692908110612d2957612d296142c1565b600091825260209091206002600590920201015460ff1615612d5d5760405162461bcd60e51b8152600401610958906142d7565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcb919061437d565b5090935060019250612ddb915050565b816004811115612ded57612ded6143e6565b14612e4a5760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610958565b82612e875760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610958565b60008681526006602052604090205460ff16612eb55760405162461bcd60e51b815260040161095890614417565b600086815260036020526040812054600280549091908110612ed957612ed96142c1565b60009182526020822060059091020180549092508290612efb90600190614275565b81548110612f0b57612f0b6142c1565b90600052602060002090600c0201905060005b86811015613001573382898984818110612f3a57612f3a6142c1565b9050602002013581548110612f5157612f516142c1565b60009182526020909120600490910201546001600160a01b031614612fb85760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610958565b8582898984818110612fcc57612fcc6142c1565b9050602002013581548110612fe357612fe36142c1565b60009182526020909120600160049092020181019190915501612f1e565b5086869050816005016000828254613019919061448a565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890613056908b908b908b906147f4565b60405180910390a35050505050505050565b6040516001600160a01b0384169083156108fc029084906000818181858888f193505050501561309757505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130d257600080fd5b505af11580156130e6573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b15801561313657600080fd5b505af115801561314a573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461317d5760405162461bcd60e51b815260040161095890614612565b50565b6000878152600360205260409020546002805489929081106131a4576131a46142c1565b600091825260209091206002600590920201015460ff16156131d85760405162461bcd60e51b8152600401610958906142d7565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613246919061437d565b5090935060029250613256915050565b816004811115613268576132686143e6565b146132c35760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610958565b866133055760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610958565b60008981526006602052604090205460ff166133335760405162461bcd60e51b815260040161095890614417565b600089815260036020526040812054600280549091908110613357576133576142c1565b9060005260206000209060050201905080600101548711156133b25760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610958565b805460009082906133c590600190614275565b815481106133d5576133d56142c1565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d9061341a908f9060040190815260200190565b60a060405180830381865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b919061437d565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156134b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134da91906145a6565b505050505091505060006134ef8b8b8b610ba3565b905060005b8c811015613776576001600160a01b038916858f8f84818110613519576135196142c1565b9050602002013581548110613530576135306142c1565b60009182526020909120600490910201546001600160a01b0316146135975760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610958565b8215806135de575081858f8f848181106135b3576135b36142c1565b90506020020135815481106135ca576135ca6142c1565b906000526020600020906004020160010154145b61365e5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610958565b848e8e83818110613671576136716142c1565b9050602002013581548110613688576136886142c1565b600091825260209091206003600490920201015460ff16156136e15760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610958565b8b858f8f848181106136f5576136f56142c1565b905060200201358154811061370c5761370c6142c1565b60009182526020909120600260049092020101556001858f8f84818110613735576137356142c1565b905060200201358154811061374c5761374c6142c1565b60009182526020909120600490910201600301805460ff19169115159190911790556001016134f4565b5050506004820180548b925060009061379090849061448a565b90915550506000888152600282016020526040812080548b92906137b590849061448a565b9091555050600181015488036137e457600381015460ff16156137df5760038101805460ff191690555b61385d565b60018101546000908152600282016020526040808220548a83529120540361382657600381015460ff166137df5760038101805460ff1916600117905561385d565b60018101546000908152600282016020526040808220548a8352912054111561385d576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b60405161389c93929190614818565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6138dd613ade565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b6000613929848484613b05565b61393557506000610bdc565b600083815260036020526040812054600280549192918390811061395b5761395b6142c1565b906000526020600020906005020190506000806000613a05846004018054613982906144b6565b80601f01602080910402602001604051908101604052809291908181526020018280546139ae906144b6565b80156139fb5780601f106139d0576101008083540402835291602001916139fb565b820191906000526020600020905b8154815290600101906020018083116139de57829003601f168201915b5050505050613b9d565b919450925090506001600160a01b038316613a2857600195505050505050610bdc565b8115613aaf57604051627eeac760e11b81526001600160a01b038881166004830152602482018390526000919085169062fdd58e906044015b602060405180830381865afa158015613a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa2919061449d565b1195505050505050610bdc565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190613a61908b90600401613d31565b613ae6613be2565b613b0357604051631afcd79f60e31b815260040160405180910390fd5b565b60045460009060ff1615613b93576000838152600360205260408120546002805491929183908110613b3957613b396142c1565b6000918252602082206005909102018054909250613b5990600190614275565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610bdc915050565b5060019392505050565b600080600060a084511015613bba57506000915081905080613bdb565b505050608081015160a0808301516001600160a01b0383169290911c600116905b9193909250565b6000613bec6138b1565b54600160401b900460ff16919050565b600060208284031215613c0e57600080fd5b5035919050565b60008083601f840112613c2757600080fd5b5081356001600160401b03811115613c3e57600080fd5b6020830191508360208260051b8501011115613c5957600080fd5b9250929050565b60008083601f840112613c7257600080fd5b5081356001600160401b03811115613c8957600080fd5b602083019150836020828501011115613c5957600080fd5b600080600080600080600060a0888a031215613cbc57600080fd5b8735965060208801356001600160401b03811115613cd957600080fd5b613ce58a828b01613c15565b909750955050604088013593506060880135925060808801356001600160401b03811115613d1257600080fd5b613d1e8a828b01613c60565b989b979a50959850939692959293505050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613d6c57600080fd5b8135602083016000806001600160401b03841115613d8c57613d8c613d45565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613dba57613dba613d45565b604052838152905080828401871015613dd257600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613e0457600080fd5b833592506020840135915060408401356001600160401b03811115613e2857600080fd5b613e3486828701613d5b565b9150509250925092565b6001600160a01b038116811461317d57600080fd5b60008060008060808587031215613e6957600080fd5b843593506020850135613e7b81613e3e565b93969395505050506040820135916060013590565b60008060408385031215613ea357600080fd5b50508035926020909101359150565b60008060408385031215613ec557600080fd5b8235613ed081613e3e565b915060208301356001600160401b03811115613eeb57600080fd5b613ef785828601613d5b565b9150509250929050565b60005b83811015613f1c578181015183820152602001613f04565b50506000910152565b60008151808452613f3d816020860160208601613f01565b601f01601f19169290920160200192915050565b602081526000610bdc6020830184613f25565b83815282151560208201526060604082015260006108f76060830184613f25565b600080600060608486031215613f9a57600080fd5b83359250602084013591506040840135613fb381613e3e565b809150509250925092565b60008060008060608587031215613fd457600080fd5b8435935060208501356001600160401b03811115613ff157600080fd5b613ffd87828801613c15565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b8181101561404857835183526020938401939092019160010161402a565b509095945050505050565b600080600080600060a0868803121561406b57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000606084860312156140a357600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156140cf57600080fd5b83356140da81613e3e565b92506020840135915060408401356001600160401b03811115613e2857600080fd5b60008060008060008060a0878903121561411557600080fd5b8635955060208701356001600160401b0381111561413257600080fd5b61413e89828a01613c15565b909650945050604087013592506060870135915060808701356001600160401b0381111561416b57600080fd5b61417789828a01613d5b565b9150509295509295509295565b60006020828403121561419657600080fd5b8135610bdc81613e3e565b6000806000806000608086880312156141b957600080fd5b853594506020860135935060408601356001600160401b038111156141dd57600080fd5b6141e988828901613c60565b96999598509660600135949350505050565b60008060006060848603121561421057600080fd5b833561421b81613e3e565b9250602084013561422b81613e3e565b91506040840135613fb381613e3e565b6000806040838503121561424e57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115612b6357612b6361425f565b8082028115828204841417612b6357612b6361425f565b6000826142bc57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006108f760408301848661430e565b80516001600160601b038116811461436857600080fd5b919050565b8051801515811461436857600080fd5b600080600080600060a0868803121561439557600080fd5b61439e86614351565b945060208601516143ae81613e3e565b6040870151909450600581106143c357600080fd5b92506143d16060870161436d565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561440e57600080fd5b610bdc8261436d565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b60008060006060848603121561446357600080fd5b835192506144736020850161436d565b91506144816040850161436d565b90509250925092565b80820180821115612b6357612b6361425f565b6000602082840312156144af57600080fd5b5051919050565b600181811c908216806144ca57607f821691505b6020821081036144ea57634e487b7160e01b600052602260045260246000fd5b50919050565b83815282602082015260606040820152600080835461450e816144b6565b806060860152600182166000811461452d57600181146145495761457d565b60ff1983166080870152608082151560051b870101935061457d565b86600052602060002060005b8381101561457457815488820160800152600190910190602001614555565b87016080019450505b5091979650505050505050565b6000825161459c818460208701613f01565b9190910192915050565b600080600080600080600060e0888a0312156145c157600080fd5b6145ca88614351565b96506145d86020890161436d565b604089015160608a015160808b015160a08c015193995091975095509350915061460460c0890161436d565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611b3d57806000526020600020601f840160051c810160208510156146bf5750805b601f840160051c820191505b818110156146df57600081556001016146cb565b5050505050565b6001600160401b038311156146fd576146fd613d45565b6147118361470b83546144b6565b83614698565b6000601f841160018114614745576000851561472d5750838201355b600019600387901b1c1916600186901b1783556146df565b600083815260209020601f19861690835b828110156147765786850135825560209485019460019092019101614756565b50868210156147935760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156147b757600080fd5b8151610bdc81613e3e565b81835260006001600160fb1b038311156147db57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006148086040830185876147c2565b9050826020830152949350505050565b60408152600061482c6040830185876147c2565b828103602084015261483e8185613f25565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220cd5d3742f8c0524170b60f04c4a752d412f4c6d549337356905de2b1c28294eb64736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102465760003560e01c80636d4cd8ea11610139578063be467604116100b6578063e4c0aaf41161007a578063e4c0aaf414610753578063f2f4eb2614610773578063f32ab92714610793578063f7e7d1fd146107c8578063f8abee10146107e8578063fc6f8f161461081857600080fd5b8063be467604146106dd578063c0c53b8b146106f3578063d2b8035a14610713578063da3beb8c14610733578063e349ad30146105c557600080fd5b80638f06f112116100fd5780638f06f1121461061b578063a7cc08fe1461063b578063b34bfaa814610687578063b6ede5401461069d578063ba66fde7146106bd57600080fd5b80636d4cd8ea14610585578063751accd0146105a5578063796490f9146105c55780637c04034e146105db5780638e426460146105fb57600080fd5b80634b2f0ea0116101c75780635a155ccd1161018b5780635a155ccd1461048a5780635c92e2f6146104cb57806365540b96146104eb578063675926f61461051857806369f3f0411461053857600080fd5b80634b2f0ea0146103e15780634f1ef286146103f457806352d1902d1461040757806354fd4d501461041c578063564a565d1461045b57600080fd5b80631c3db16d1161020e5780631c3db16d1461032a5780631cc3423a146103675780632621b9a2146103875780632d68efc9146103a1578063362c3479146103c157600080fd5b80630855bbe91461024b57806309cc41b8146102805780630baa64d1146102a25780630c340a24146102c25780631200aabc146102ef575b600080fd5b34801561025757600080fd5b5061026b610266366004613bfc565b610838565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004613ca1565b610900565b005b3480156102ae57600080fd5b5061026b6102bd366004613bfc565b6109be565b3480156102ce57600080fd5b506000546102e2906001600160a01b031681565b6040516102779190613d31565b3480156102fb57600080fd5b5061031c61030a366004613bfc565b60036020526000908152604090205481565b604051908152602001610277565b34801561033657600080fd5b5061034a610345366004613bfc565b610a35565b604080519384529115156020840152151590820152606001610277565b34801561037357600080fd5b5061031c610382366004613def565b610ba3565b34801561039357600080fd5b5060045461026b9060ff1681565b3480156103ad57600080fd5b506007546102e2906001600160a01b031681565b3480156103cd57600080fd5b5061031c6103dc366004613e53565b610be3565b6102a06103ef366004613e90565b611093565b6102a0610402366004613eb2565b611923565b34801561041357600080fd5b5061031c611b42565b34801561042857600080fd5b5061044e604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102779190613f51565b34801561046757600080fd5b5061047b610476366004613bfc565b611ba0565b60405161027793929190613f64565b34801561049657600080fd5b5061026b6104a5366004613f85565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104d757600080fd5b506102a06104e6366004613fbe565b611c66565b3480156104f757600080fd5b5061050b610506366004613bfc565b611c72565b6040516102779190614010565b34801561052457600080fd5b5061031c610533366004614053565b611d36565b34801561054457600080fd5b5061055861055336600461408e565b611e79565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610277565b34801561059157600080fd5b5061026b6105a0366004613bfc565b611f31565b3480156105b157600080fd5b506102a06105c03660046140ba565b6120b4565b3480156105d157600080fd5b5061031c61271081565b3480156105e757600080fd5b506102a06105f63660046140fc565b612180565b34801561060757600080fd5b506102a0610616366004614184565b612197565b34801561062757600080fd5b506102a06106363660046140fc565b6121e3565b34801561064757600080fd5b5061065b61065636600461408e565b6122a9565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610277565b34801561069357600080fd5b5061031c614e2081565b3480156106a957600080fd5b506102a06106b83660046141a1565b61236f565b3480156106c957600080fd5b5061026b6106d836600461408e565b612562565b3480156106e957600080fd5b5061031c61138881565b3480156106ff57600080fd5b506102a061070e3660046141fb565b6125fd565b34801561071f57600080fd5b506102e261072e366004613e90565b6126c7565b34801561073f57600080fd5b5061031c61074e366004613e90565b612a16565b34801561075f57600080fd5b506102a061076e366004614184565b612b69565b34801561077f57600080fd5b506001546102e2906001600160a01b031681565b34801561079f57600080fd5b506107b36107ae366004613e90565b612bb5565b60408051928352602083019190915201610277565b3480156107d457600080fd5b506102a06107e3366004614184565b612c07565b3480156107f457600080fd5b5061026b610803366004613bfc565b60066020526000908152604090205460ff1681565b34801561082457600080fd5b5061031c610833366004613bfc565b612cd9565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa158015610885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a9919061423b565b9150915060006108b885611c72565b9050805160001480156108f757506127106113886108d68585614275565b6108e09190614288565b6108ea919061429f565b6108f48442614275565b10155b95945050505050565b600087815260036020526040902054600280548992908110610924576109246142c1565b600091825260209091206002600590920201015460ff16156109615760405162461bcd60e51b8152600401610958906142d7565b60405180910390fd5b61096d88888888612d05565b84336001600160a01b0316897fbc1efa6396a4ba1a755245703b38c48fbe744ab5117d9f09f47d26ffc1df999e8787876040516109ac93929190614337565b60405180910390a45050505050505050565b6000818152600360205260408120546002805483929081106109e2576109e26142c1565b60009182526020822060059091020180549092508290610a0490600190614275565b81548110610a1457610a146142c1565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610a6157610a616142c1565b60009182526020822060059091020180549092508290610a8390600190614275565b81548110610a9357610a936142c1565b60009182526020909120600c90910201600381015460ff169450905083610abe578060010154610ac1565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b34919061437d565b5090935060049250610b44915050565b816004811115610b5657610b566143e6565b03610b99576000610b6688611c72565b90508051600103610b975780600081518110610b8457610b846142c1565b6020026020010151965060009550600194505b505b5050509193909250565b80516020808301919091206040805180840187905280820186905260608082019390935281518082039093018352608001905280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c55919061437d565b50935050505080610ca85760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e00000000006044820152606401610958565b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f91906143fc565b15610d5d5760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610958565b60008681526006602052604090205460ff16610d8b5760405162461bcd60e51b815260040161095890614417565b600086815260036020526040812054600280549091908110610daf57610daf6142c1565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610de357610de36142c1565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e62919061444e565b5050600087815260078401602052604090205490915060ff16610eac576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ff1565b808603610f21576000868152600683016020526040902054610ecf576000610f1a565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610f109190614288565b610f1a919061429f565b9450610ff1565b600081815260078301602052604090205460ff16610ff15781600601600083600a01600181548110610f5557610f556142c1565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610f8b57610f8b6142c1565b9060005260206000200154815260200190815260200160002054610faf919061448a565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610fe49190614288565b610fee919061429f565b94505b6001600160a01b03881660009081526008830160209081526040808320898452909152812055841561108757600754611038906001600160a01b038a811691889116613068565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae898960405161107e929190918252602082015260400190565b60405180910390a45b50505050949350505050565b6000828152600360205260409020546002805484929081106110b7576110b76142c1565b600091825260209091206002600590920201015460ff16156110eb5760405162461bcd60e51b8152600401610958906142d7565b60008381526003602052604081205460028054909190811061110f5761110f6142c1565b9060005260206000209060050201905080600101548311156111735760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610958565b60008481526006602052604090205460ff166111a15760405162461bcd60e51b815260040161095890614417565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156111ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611212919061423b565b9150915081421015801561122557508042105b61126a5760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610958565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156112ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf919061444e565b505090508681036112e4576127109150611365565b6127106113886112f48686614275565b6112fe9190614288565b611308919061429f565b6113128542614275565b1061135f5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610958565b614e2091505b8454600090869061137890600190614275565b81548110611388576113886142c1565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b919061449d565b6114159190614275565b60008a815260078401602052604090205490915060ff16156114795760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610958565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e7919061449d565b905060006127106114f88784614288565b611502919061429f565b61150c908361448a565b60008c8152600686016020526040812054919250908211156115bd5760008c815260068601602052604090205434906115459084614275565b1161156a5760008c81526006860160205260409020546115659083614275565b61156c565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516115b4929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906115e990849061448a565b909155505060008c81526006860160205260408120805483929061160e90849061448a565b909155505060008c815260068601602052604090205482116116e05760008c81526006860160205260408120546009870180549192909161165090849061448a565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156118eb578285600901546116fd9190614275565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa15801561174b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176f91906143fc565b156117885760028a01805460ff1916600117905561186b565b895460038b01600061179b87600161448a565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161181691815260200190565b602060405180830381865afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611857919061449d565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016118b8939291906144f0565b6000604051808303818588803b1580156118d157600080fd5b505af11580156118e5573d6000803e3d6000fd5b50505050505b80341115611914576119146119008234614275565b6007543391906001600160a01b0316613068565b50505050505050505050505050565b61192c82613153565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119aa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661199e6000805160206148498339815191525490565b6001600160a01b031614155b156119c85760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a22575060408051601f3d908101601f19168201909252611a1f9181019061449d565b60015b611a415781604051630c76093760e01b81526004016109589190613d31565b6000805160206148498339815191528114611a7257604051632a87526960e21b815260048101829052602401610958565b6000805160206148498339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611b3d576000836001600160a01b031683604051611ad9919061458a565b600060405180830381855af49150503d8060008114611b14576040519150601f19603f3d011682016040523d82523d6000602084013e611b19565b606091505b5050905080611b3b576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b8d5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061484983398151915290565b60028181548110611bb057600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611be3906144b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0f906144b6565b8015611c5c5780601f10611c3157610100808354040283529160200191611c5c565b820191906000526020600020905b815481529060010190602001808311611c3f57829003601f168201915b5050505050905083565b611b3b84848484612d05565b6000818152600360205260408120546002805460609392908110611c9857611c986142c1565b60009182526020822060059091020180549092508290611cba90600190614275565b81548110611cca57611cca6142c1565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611d2857602002820191906000526020600020905b815481526020019060010190808311611d14575b505050505092505050919050565b600085815260036020526040812054600280548392908110611d5a57611d5a6142c1565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611d8e57611d8e6142c1565b90600052602060002090600c02016000018681548110611db057611db06142c1565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e32919061444e565b506003850154919350915060ff168015611e5657508183600201541480611e565750805b15611e69576127109450505050506108f7565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611eaa57611eaa6142c1565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611ede57611ede6142c1565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611f5557611f556142c1565b60009182526020822060059091020180549092508290611f7790600190614275565b81548110611f8757611f876142c1565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611fe2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612006919061437d565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208591906145a6565b505050505091505060008161209b5783546120a1565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b031633146120de5760405162461bcd60e51b815260040161095890614612565b6000836001600160a01b031683836040516120f9919061458a565b60006040518083038185875af1925050503d8060008114612136576040519150601f19603f3d011682016040523d82523d6000602084013e61213b565b606091505b5050905080611b3b5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610958565b61218f86868686868633613180565b505050505050565b6000546001600160a01b031633146121c15760405162461bcd60e51b815260040161095890614612565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600086815260036020526040812054600280549091908110612207576122076142c1565b6000918252602082206005909102018054909250829061222990600190614275565b81548110612239576122396142c1565b90600052602060002090600c02016000018787600081811061225d5761225d6142c1565b9050602002013581548110612274576122746142c1565b60009182526020909120600490910201546001600160a01b0316905061229f88888888888887613180565b5050505050505050565b60008060008060006002600360008a815260200190815260200160002054815481106122d7576122d76142c1565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061230b5761230b6142c1565b90600052602060002090600c0201600001878154811061232d5761232d6142c1565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146123995760405162461bcd60e51b815260040161095890614654565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2016124248587836146e6565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab919061449d565b6124b59190614275565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab5810890612550908a908a908a90614337565b60405180910390a25050505050505050565b600083815260036020526040812054600280548392908110612586576125866142c1565b600091825260208083208784526003600590930201918201905260408220548154919350839181106125ba576125ba6142c1565b90600052602060002090600c020160000184815481106125dc576125dc6142c1565b600091825260209091206004909102016003015460ff169695505050505050565b600160006126096138b1565b8054909150600160401b900460ff1680612630575080546001600160401b03808416911610155b1561264d5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556126798585856138d5565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146126f45760405162461bcd60e51b815260040161095890614654565b600083815260036020526040902054600280548592908110612718576127186142c1565b600091825260209091206002600590920201015460ff161561274c5760405162461bcd60e51b8152600401610958906142d7565b6000848152600360205260408120546002805491929183908110612772576127726142c1565b600091825260208220600590910201805490925061279290600190614275565b905060008260000182815481106127ab576127ab6142c1565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283491906147a5565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a7919061437d565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561290b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292f91906147a5565b98506001600160a01b03891661294b5750505050505050612a0f565b612956848c8b61391c565b15612a0257604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612a07565b600098505b505050505050505b5092915050565b600082815260036020526040812054600280548392908110612a3a57612a3a6142c1565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612a6e57612a6e6142c1565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af1919061444e565b5091509150826004015460001480612b20575080158015612b2057506000828152600284016020526040902054155b15612b32576000945050505050612b63565b8015612b47575050600401549150612b639050565b506000908152600290910160205260409020549150612b639050565b92915050565b6000546001600160a01b03163314612b935760405162461bcd60e51b815260040161095890614612565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546002805491929183908110612bdb57612bdb6142c1565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612c136138b1565b8054909150600160401b900460ff1680612c3a575080546001600160401b03808416911610155b15612c575760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612cee57612cee6142c1565b600091825260209091206005909102015492915050565b600084815260036020526040902054600280548692908110612d2957612d296142c1565b600091825260209091206002600590920201015460ff1615612d5d5760405162461bcd60e51b8152600401610958906142d7565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcb919061437d565b5090935060019250612ddb915050565b816004811115612ded57612ded6143e6565b14612e4a5760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610958565b82612e875760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610958565b60008681526006602052604090205460ff16612eb55760405162461bcd60e51b815260040161095890614417565b600086815260036020526040812054600280549091908110612ed957612ed96142c1565b60009182526020822060059091020180549092508290612efb90600190614275565b81548110612f0b57612f0b6142c1565b90600052602060002090600c0201905060005b86811015613001573382898984818110612f3a57612f3a6142c1565b9050602002013581548110612f5157612f516142c1565b60009182526020909120600490910201546001600160a01b031614612fb85760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610958565b8582898984818110612fcc57612fcc6142c1565b9050602002013581548110612fe357612fe36142c1565b60009182526020909120600160049092020181019190915501612f1e565b5086869050816005016000828254613019919061448a565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890613056908b908b908b906147f4565b60405180910390a35050505050505050565b6040516001600160a01b0384169083156108fc029084906000818181858888f193505050501561309757505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130d257600080fd5b505af11580156130e6573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b15801561313657600080fd5b505af115801561314a573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461317d5760405162461bcd60e51b815260040161095890614612565b50565b6000878152600360205260409020546002805489929081106131a4576131a46142c1565b600091825260209091206002600590920201015460ff16156131d85760405162461bcd60e51b8152600401610958906142d7565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613246919061437d565b5090935060029250613256915050565b816004811115613268576132686143e6565b146132c35760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610958565b866133055760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610958565b60008981526006602052604090205460ff166133335760405162461bcd60e51b815260040161095890614417565b600089815260036020526040812054600280549091908110613357576133576142c1565b9060005260206000209060050201905080600101548711156133b25760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610958565b805460009082906133c590600190614275565b815481106133d5576133d56142c1565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d9061341a908f9060040190815260200190565b60a060405180830381865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b919061437d565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156134b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134da91906145a6565b505050505091505060006134ef8b8b8b610ba3565b905060005b8c811015613776576001600160a01b038916858f8f84818110613519576135196142c1565b9050602002013581548110613530576135306142c1565b60009182526020909120600490910201546001600160a01b0316146135975760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610958565b8215806135de575081858f8f848181106135b3576135b36142c1565b90506020020135815481106135ca576135ca6142c1565b906000526020600020906004020160010154145b61365e5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610958565b848e8e83818110613671576136716142c1565b9050602002013581548110613688576136886142c1565b600091825260209091206003600490920201015460ff16156136e15760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610958565b8b858f8f848181106136f5576136f56142c1565b905060200201358154811061370c5761370c6142c1565b60009182526020909120600260049092020101556001858f8f84818110613735576137356142c1565b905060200201358154811061374c5761374c6142c1565b60009182526020909120600490910201600301805460ff19169115159190911790556001016134f4565b5050506004820180548b925060009061379090849061448a565b90915550506000888152600282016020526040812080548b92906137b590849061448a565b9091555050600181015488036137e457600381015460ff16156137df5760038101805460ff191690555b61385d565b60018101546000908152600282016020526040808220548a83529120540361382657600381015460ff166137df5760038101805460ff1916600117905561385d565b60018101546000908152600282016020526040808220548a8352912054111561385d576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b60405161389c93929190614818565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6138dd613ade565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b6000613929848484613b05565b61393557506000610bdc565b600083815260036020526040812054600280549192918390811061395b5761395b6142c1565b906000526020600020906005020190506000806000613a05846004018054613982906144b6565b80601f01602080910402602001604051908101604052809291908181526020018280546139ae906144b6565b80156139fb5780601f106139d0576101008083540402835291602001916139fb565b820191906000526020600020905b8154815290600101906020018083116139de57829003601f168201915b5050505050613b9d565b919450925090506001600160a01b038316613a2857600195505050505050610bdc565b8115613aaf57604051627eeac760e11b81526001600160a01b038881166004830152602482018390526000919085169062fdd58e906044015b602060405180830381865afa158015613a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa2919061449d565b1195505050505050610bdc565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190613a61908b90600401613d31565b613ae6613be2565b613b0357604051631afcd79f60e31b815260040160405180910390fd5b565b60045460009060ff1615613b93576000838152600360205260408120546002805491929183908110613b3957613b396142c1565b6000918252602082206005909102018054909250613b5990600190614275565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610bdc915050565b5060019392505050565b600080600060a084511015613bba57506000915081905080613bdb565b505050608081015160a0808301516001600160a01b0383169290911c600116905b9193909250565b6000613bec6138b1565b54600160401b900460ff16919050565b600060208284031215613c0e57600080fd5b5035919050565b60008083601f840112613c2757600080fd5b5081356001600160401b03811115613c3e57600080fd5b6020830191508360208260051b8501011115613c5957600080fd5b9250929050565b60008083601f840112613c7257600080fd5b5081356001600160401b03811115613c8957600080fd5b602083019150836020828501011115613c5957600080fd5b600080600080600080600060a0888a031215613cbc57600080fd5b8735965060208801356001600160401b03811115613cd957600080fd5b613ce58a828b01613c15565b909750955050604088013593506060880135925060808801356001600160401b03811115613d1257600080fd5b613d1e8a828b01613c60565b989b979a50959850939692959293505050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613d6c57600080fd5b8135602083016000806001600160401b03841115613d8c57613d8c613d45565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613dba57613dba613d45565b604052838152905080828401871015613dd257600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613e0457600080fd5b833592506020840135915060408401356001600160401b03811115613e2857600080fd5b613e3486828701613d5b565b9150509250925092565b6001600160a01b038116811461317d57600080fd5b60008060008060808587031215613e6957600080fd5b843593506020850135613e7b81613e3e565b93969395505050506040820135916060013590565b60008060408385031215613ea357600080fd5b50508035926020909101359150565b60008060408385031215613ec557600080fd5b8235613ed081613e3e565b915060208301356001600160401b03811115613eeb57600080fd5b613ef785828601613d5b565b9150509250929050565b60005b83811015613f1c578181015183820152602001613f04565b50506000910152565b60008151808452613f3d816020860160208601613f01565b601f01601f19169290920160200192915050565b602081526000610bdc6020830184613f25565b83815282151560208201526060604082015260006108f76060830184613f25565b600080600060608486031215613f9a57600080fd5b83359250602084013591506040840135613fb381613e3e565b809150509250925092565b60008060008060608587031215613fd457600080fd5b8435935060208501356001600160401b03811115613ff157600080fd5b613ffd87828801613c15565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b8181101561404857835183526020938401939092019160010161402a565b509095945050505050565b600080600080600060a0868803121561406b57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000606084860312156140a357600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156140cf57600080fd5b83356140da81613e3e565b92506020840135915060408401356001600160401b03811115613e2857600080fd5b60008060008060008060a0878903121561411557600080fd5b8635955060208701356001600160401b0381111561413257600080fd5b61413e89828a01613c15565b909650945050604087013592506060870135915060808701356001600160401b0381111561416b57600080fd5b61417789828a01613d5b565b9150509295509295509295565b60006020828403121561419657600080fd5b8135610bdc81613e3e565b6000806000806000608086880312156141b957600080fd5b853594506020860135935060408601356001600160401b038111156141dd57600080fd5b6141e988828901613c60565b96999598509660600135949350505050565b60008060006060848603121561421057600080fd5b833561421b81613e3e565b9250602084013561422b81613e3e565b91506040840135613fb381613e3e565b6000806040838503121561424e57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115612b6357612b6361425f565b8082028115828204841417612b6357612b6361425f565b6000826142bc57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006108f760408301848661430e565b80516001600160601b038116811461436857600080fd5b919050565b8051801515811461436857600080fd5b600080600080600060a0868803121561439557600080fd5b61439e86614351565b945060208601516143ae81613e3e565b6040870151909450600581106143c357600080fd5b92506143d16060870161436d565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561440e57600080fd5b610bdc8261436d565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b60008060006060848603121561446357600080fd5b835192506144736020850161436d565b91506144816040850161436d565b90509250925092565b80820180821115612b6357612b6361425f565b6000602082840312156144af57600080fd5b5051919050565b600181811c908216806144ca57607f821691505b6020821081036144ea57634e487b7160e01b600052602260045260246000fd5b50919050565b83815282602082015260606040820152600080835461450e816144b6565b806060860152600182166000811461452d57600181146145495761457d565b60ff1983166080870152608082151560051b870101935061457d565b86600052602060002060005b8381101561457457815488820160800152600190910190602001614555565b87016080019450505b5091979650505050505050565b6000825161459c818460208701613f01565b9190910192915050565b600080600080600080600060e0888a0312156145c157600080fd5b6145ca88614351565b96506145d86020890161436d565b604089015160608a015160808b015160a08c015193995091975095509350915061460460c0890161436d565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611b3d57806000526020600020601f840160051c810160208510156146bf5750805b601f840160051c820191505b818110156146df57600081556001016146cb565b5050505050565b6001600160401b038311156146fd576146fd613d45565b6147118361470b83546144b6565b83614698565b6000601f841160018114614745576000851561472d5750838201355b600019600387901b1c1916600186901b1783556146df565b600083815260209020601f19861690835b828110156147765786850135825560209485019460019092019101614756565b50868210156147935760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156147b757600080fd5b8151610bdc81613e3e565b81835260006001600160fb1b038311156147db57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006148086040830185876147c2565b9050826020830152949350505050565b60408152600061482c6040830185876147c2565b828103602084015261483e8185613f25565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220cd5d3742f8c0524170b60f04c4a752d412f4c6d549337356905de2b1c28294eb64736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "CommitCastShutter(uint256,address,bytes32,bytes32,bytes)": { - "details": "Emitted when a vote is cast.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_encryptedVote": "The Shutter encrypted vote.", - "_identity": "The Shutter identity used for encryption.", - "_juror": "The address of the juror casting the vote commitment." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castCommitShutter(uint256,uint256[],bytes32,bytes32,bytes)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash including the justification.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_encryptedVote": "The Shutter encrypted vote.", - "_identity": "The Shutter identity used for encryption.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "getLocalDisputeRoundID(uint256,uint256)": { - "details": "Returns the local dispute ID and round ID for a given core dispute ID and core round ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core." - }, - "returns": { - "localDisputeID": "The ID of the dispute in the Dispute Kit.", - "localRoundID": "The ID of the round in the Dispute Kit." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Returns the number of rounds in a dispute.", - "params": { - "_localDisputeID": "The ID of the dispute in the Dispute Kit." - }, - "returns": { - "_0": "The number of rounds in the dispute." - } - }, - "getVoteInfo(uint256,uint256,uint256)": { - "details": "Returns the vote information for a given vote ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The address of the juror who cast the vote.", - "commit": "The commit of the vote." - } - }, - "hashVote(uint256,uint256,string)": { - "details": "Computes the hash of a vote using ABI encoding", - "params": { - "_choice": "The choice being voted for", - "_justification": "The justification for the vote", - "_salt": "A random salt for commitment" - }, - "returns": { - "_0": "bytes32 The hash of the encoded vote parameters" - } - }, - "initialize(address,address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isAppealFunded(uint256)": { - "details": "Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "Whether the appeal funding is finished." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "DisputeKitGatedShutter Added functionality: shielded voting. Dispute kit implementation adapted from DisputeKitClassic - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 6613, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6616, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)303" - }, - { - "astId": 6620, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)6552_storage)dyn_storage" - }, - { - "astId": 6624, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6626, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "singleDrawPerJuror", - "offset": 0, - "slot": "4", - "type": "t_bool" - }, - { - "astId": 6634, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "alreadyDrawn", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))" - }, - { - "astId": 6638, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "coreDisputeIDToActive", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6640, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "wNative", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)6552_storage)dyn_storage": { - "base": "t_struct(Dispute)6552_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)6590_storage)dyn_storage": { - "base": "t_struct(Round)6590_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)6599_storage)dyn_storage": { - "base": "t_struct(Vote)6599_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)303": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(uint256 => mapping(address => bool)))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)6552_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Dispute", - "members": [ - { - "astId": 6541, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)6590_storage)dyn_storage" - }, - { - "astId": 6543, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6545, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 6549, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6551, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)6590_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Round", - "members": [ - { - "astId": 6556, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)6599_storage)dyn_storage" - }, - { - "astId": 6558, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6562, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6564, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 6566, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 6568, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 6572, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6576, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6582, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 6584, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 6587, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 6589, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)6599_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Vote", - "members": [ - { - "astId": 6592, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6594, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 6596, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 6598, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeKitGatedShutter_Proxy.json b/contracts/deployments/arbitrumSepolia/DisputeKitGatedShutter_Proxy.json deleted file mode 100644 index 48a45a61b..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeKitGatedShutter_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x936231010462458ebaA45dDc422A5940C08a474C", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x437f13f63ba31dedefe7a91e9ec302ea649844a3a1cfcbb5b8c5602c23ae1f3f", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x936231010462458ebaA45dDc422A5940C08a474C", - "transactionIndex": 2, - "gasUsed": "199401", - "logsBloom": "0x00000000000000000100000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000400000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa1ce003b84a13937b1dce3f5ceea263df615e82cad05a83eb02b8dd4bc260f6b", - "transactionHash": "0x437f13f63ba31dedefe7a91e9ec302ea649844a3a1cfcbb5b8c5602c23ae1f3f", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 178241338, - "transactionHash": "0x437f13f63ba31dedefe7a91e9ec302ea649844a3a1cfcbb5b8c5602c23ae1f3f", - "address": "0x936231010462458ebaA45dDc422A5940C08a474C", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 5, - "blockHash": "0xa1ce003b84a13937b1dce3f5ceea263df615e82cad05a83eb02b8dd4bc260f6b" - } - ], - "blockNumber": 178241338, - "cumulativeGasUsed": "339904", - "status": 1, - "byzantium": true - }, - "args": [ - "0xbd64B87c8A1276c0B83042f3F9128f7994753836", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000e8442307d36e9bf6ab27f1a009f95ce8e11c3479" - ], - "numDeployments": 1, - "solcInputHash": "74873d15f43e245d08be76d8560e80d9", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitGatedShutterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122014335073f133775bc3d53bdbd73e5b08fc775962b3f58fb9a922739829545a1f64736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122014335073f133775bc3d53bdbd73e5b08fc775962b3f58fb9a922739829545a1f64736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeKitGated_Implementation.json b/contracts/deployments/arbitrumSepolia/DisputeKitGated_Implementation.json deleted file mode 100644 index d8dee084e..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeKitGated_Implementation.json +++ /dev/null @@ -1,1892 +0,0 @@ -{ - "address": "0x2d1b63C9638ed62875256676C665a7ec14D7663C", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "extraDataToTokenInfo", - "outputs": [ - { - "internalType": "address", - "name": "tokenGate", - "type": "address" - }, - { - "internalType": "bool", - "name": "isERC1155", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x8ebd962a6af0559b118618288524e350870717540e1f5d9da1af03b66cb5502f", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x2d1b63C9638ed62875256676C665a7ec14D7663C", - "transactionIndex": 3, - "gasUsed": "4030479", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x07398b278c6600e2c45ecf2c8d71cf13f6e091728accedf42af22f56f9051e3d", - "transactionHash": "0x8ebd962a6af0559b118618288524e350870717540e1f5d9da1af03b66cb5502f", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 179580643, - "transactionHash": "0x8ebd962a6af0559b118618288524e350870717540e1f5d9da1af03b66cb5502f", - "address": "0x2d1b63C9638ed62875256676C665a7ec14D7663C", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 2, - "blockHash": "0x07398b278c6600e2c45ecf2c8d71cf13f6e091728accedf42af22f56f9051e3d" - } - ], - "blockNumber": 179580643, - "cumulativeGasUsed": "4456833", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "726fe29d8d9c48c46571792cebc6e314", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"name\":\"alreadyDrawn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"extraDataToTokenInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"tokenGate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isERC1155\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getLocalDisputeRoundID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localDisputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"hashVote\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"isAppealFunded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleDrawPerJuror\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"extraDataToTokenInfo(bytes)\":{\"details\":\"Extracts token gating information from the extra data.\",\"params\":{\"_extraData\":\"The extra data bytes array with the following encoding: - bytes 0-31: uint96 courtID, not used here - bytes 32-63: uint256 minJurors, not used here - bytes 64-95: uint256 disputeKitID, not used here - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160) - bytes 128-159: uint256 tokenId\"},\"returns\":{\"isERC1155\":\"True if the token is an ERC-1155, false for ERC-20/ERC-721.\",\"tokenGate\":\"The address of the token contract used for gating access.\",\"tokenId\":\"The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721).\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"getLocalDisputeRoundID(uint256,uint256)\":{\"details\":\"Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\"},\"returns\":{\"localDisputeID\":\"The ID of the dispute in the Dispute Kit.\",\"localRoundID\":\"The ID of the round in the Dispute Kit.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Returns the number of rounds in a dispute.\",\"params\":{\"_localDisputeID\":\"The ID of the dispute in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of rounds in the dispute.\"}},\"getVoteInfo(uint256,uint256,uint256)\":{\"details\":\"Returns the vote information for a given vote ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The address of the juror who cast the vote.\",\"commit\":\"The commit of the vote.\"}},\"hashVote(uint256,uint256,string)\":{\"details\":\"Computes the hash of a vote using ABI encodingThe unused parameters may be used by overriding contracts.\",\"params\":{\"_choice\":\"The choice being voted for\",\"_justification\":\"The justification for the vote\",\"_salt\":\"A random salt for commitment\"},\"returns\":{\"_0\":\"bytes32 The hash of the encoded vote parameters\"}},\"initialize(address,address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isAppealFunded(uint256)\":{\"details\":\"Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"Whether the appeal funding is finished.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"DisputeKitGated Dispute kit implementation adapted from DisputeKitClassic - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitGated.sol\":\"DisputeKitGated\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassicBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore, KlerosCoreBase, IDisputeKit, ISortitionModule} from \\\"../KlerosCore.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {SafeSend} from \\\"../../libraries/SafeSend.sol\\\";\\n\\n/// @title DisputeKitClassicBase\\n/// Abstract Dispute kit classic implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\nabstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable {\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default.\\n mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool)))\\n public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading.\\n mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function __DisputeKitClassicBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n dispute.jumped = false; // Possibly true if this DK has jumped in a previous round.\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n coreDisputeIDToActive[_coreDisputeID] = true;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[localRoundID];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n if (drawnAddress == address(0)) {\\n // Sortition can return 0 address if no one has staked yet.\\n return drawnAddress;\\n }\\n\\n if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true;\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash.\\n function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n }\\n\\n function _castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender);\\n }\\n\\n function _castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification,\\n address _juror\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n bytes32 voteHash = hashVote(_choice, _salt, _justification);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == _juror, \\\"The juror has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == voteHash,\\n \\\"The vote hash must match the commitment in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n } // Workaround stack too deep\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.safeSend(amount, wNative);\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @dev The unused parameters may be used by overriding contracts.\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(_choice, _salt));\\n }\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length;\\n\\n return round.totalVoted == expectedTotalVoted;\\n }\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) {\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n // Uses block.timestamp from the current tx when called by the core contract.\\n return (fundedChoices.length == 0 &&\\n block.timestamp - appealPeriodStart >=\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT);\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n /// @dev Returns the number of rounds in a dispute.\\n /// @param _localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return The number of rounds in the dispute.\\n function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) {\\n return disputes[_localDisputeID].rounds.length;\\n }\\n\\n /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @return localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return localRoundID The ID of the round in the Dispute Kit.\\n function getLocalDisputeRoundID(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID\\n ) external view returns (uint256 localDisputeID, uint256 localRoundID) {\\n localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID];\\n }\\n\\n /// @dev Returns the vote information for a given vote ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @param _voteID The ID of the vote.\\n /// @return account The address of the juror who cast the vote.\\n /// @return commit The commit of the vote.\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts.\\n /// minStake is checked directly during staking process however it's possible for the juror to get drawn\\n /// while having < minStake if it is later increased by governance.\\n /// This issue is expected and harmless.\\n /// @param _round The round in which the juror is being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return result Whether the address passes the check or not.\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view virtual returns (bool result) {\\n if (singleDrawPerJuror) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n result = !alreadyDrawn[localDisputeID][localRoundID][_juror];\\n } else {\\n result = true;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc418b9a76802db5d16819836734ecff8b76d5f37101819aee6fd1844dfe21dd9\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitGated.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {DisputeKitClassicBase, KlerosCore} from \\\"./DisputeKitClassicBase.sol\\\";\\n\\ninterface IBalanceHolder {\\n /// @dev Returns the number of tokens in `owner` account.\\n /// @dev Compatible with ERC-20 and ERC-721.\\n /// @param owner The address of the owner.\\n /// @return balance The number of tokens in `owner` account.\\n function balanceOf(address owner) external view returns (uint256 balance);\\n}\\n\\ninterface IBalanceHolderERC1155 {\\n /// @dev Returns the balance of an ERC-1155 token.\\n /// @param account The address of the token holder\\n /// @param id ID of the token\\n /// @return The token balance\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n}\\n\\n/// @title DisputeKitGated\\n/// Dispute kit implementation adapted from DisputeKitClassic\\n/// - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitGated is DisputeKitClassicBase {\\n string public constant override version = \\\"0.12.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(address _governor, KlerosCore _core, address _wNative) external reinitializer(1) {\\n __DisputeKitClassicBase_initialize(_governor, _core, _wNative);\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(9) {\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Extracts token gating information from the extra data.\\n /// @param _extraData The extra data bytes array with the following encoding:\\n /// - bytes 0-31: uint96 courtID, not used here\\n /// - bytes 32-63: uint256 minJurors, not used here\\n /// - bytes 64-95: uint256 disputeKitID, not used here\\n /// - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160)\\n /// - bytes 128-159: uint256 tokenId\\n /// @return tokenGate The address of the token contract used for gating access.\\n /// @return isERC1155 True if the token is an ERC-1155, false for ERC-20/ERC-721.\\n /// @return tokenId The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721).\\n function extraDataToTokenInfo(\\n bytes memory _extraData\\n ) public pure returns (address tokenGate, bool isERC1155, uint256 tokenId) {\\n // Need at least 160 bytes to safely read the parameters\\n if (_extraData.length < 160) return (address(0), false, 0);\\n\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let packedTokenGateIsERC1155 := mload(add(_extraData, 0x80)) // 4th parameter at offset 128\\n tokenId := mload(add(_extraData, 0xA0)) // 5th parameter at offset 160 (moved up)\\n\\n // Unpack address from lower 160 bits and bool from bit 160\\n tokenGate := and(packedTokenGateIsERC1155, 0xffffffffffffffffffffffffffffffffffffffff)\\n isERC1155 := and(shr(160, packedTokenGateIsERC1155), 1)\\n }\\n }\\n\\n /// @inheritdoc DisputeKitClassicBase\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view override returns (bool) {\\n if (!super._postDrawCheck(_round, _coreDisputeID, _juror)) return false;\\n\\n // Get the local dispute and extract token info from extraData\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n (address tokenGate, bool isERC1155, uint256 tokenId) = extraDataToTokenInfo(dispute.extraData);\\n\\n // If no token gate is specified, allow all jurors\\n if (tokenGate == address(0)) return true;\\n\\n // Check juror's token balance\\n if (isERC1155) {\\n return IBalanceHolderERC1155(tokenGate).balanceOf(_juror, tokenId) > 0;\\n } else {\\n return IBalanceHolder(tokenGate).balanceOf(_juror) > 0;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x449beea4cdeceb81cfc053987fd39c2f552fe3f5da03384c623b167f91f9307b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516146966100fc60003960008181611868015281816118910152611a8001526146966000f3fe60806040526004361061023b5760003560e01c8063751accd01161012e578063d2b8035a116100ab578063f2f4eb261161006f578063f2f4eb261461076d578063f32ab9271461078d578063f7e7d1fd146107c2578063f8abee10146107e2578063fc6f8f161461081257600080fd5b8063d2b8035a146106c8578063da3beb8c146106e8578063e349ad301461059a578063e4c0aaf414610708578063ec7b23fb1461072857600080fd5b8063b34bfaa8116100f2578063b34bfaa81461063c578063b6ede54014610652578063ba66fde714610672578063be46760414610692578063c0c53b8b146106a857600080fd5b8063751accd01461057a578063796490f91461059a5780637c04034e146105b05780638e426460146105d0578063a7cc08fe146105f057600080fd5b80634f1ef286116101bc5780635c92e2f6116101805780635c92e2f6146104a057806365540b96146104c0578063675926f6146104ed57806369f3f0411461050d5780636d4cd8ea1461055a57600080fd5b80634f1ef286146103c957806352d1902d146103dc57806354fd4d50146103f1578063564a565d146104305780635a155ccd1461045f57600080fd5b80631cc3423a116102035780631cc3423a1461033a5780632621b9a21461035a5780632d68efc914610374578063362c3479146103945780634b2f0ea0146103b457600080fd5b80630855bbe9146102405780630baa64d1146102755780630c340a24146102955780631200aabc146102c25780631c3db16d146102fd575b600080fd5b34801561024c57600080fd5b5061026061025b366004613a67565b610832565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610260610290366004613a67565b6108fa565b3480156102a157600080fd5b506000546102b5906001600160a01b031681565b60405161026c9190613a80565b3480156102ce57600080fd5b506102ef6102dd366004613a67565b60036020526000908152604090205481565b60405190815260200161026c565b34801561030957600080fd5b5061031d610318366004613a67565b610971565b60408051938452911515602084015215159082015260600161026c565b34801561034657600080fd5b506102ef610355366004613b3e565b610adf565b34801561036657600080fd5b506004546102609060ff1681565b34801561038057600080fd5b506007546102b5906001600160a01b031681565b3480156103a057600080fd5b506102ef6103af366004613ba2565b610b0f565b6103c76103c2366004613bdf565b610fc4565b005b6103c76103d7366004613c01565b611854565b3480156103e857600080fd5b506102ef611a73565b3480156103fd57600080fd5b50610423604051806040016040528060068152602001650302e31322e360d41b81525081565b60405161026c9190613ca0565b34801561043c57600080fd5b5061045061044b366004613a67565b611ad1565b60405161026c93929190613cb3565b34801561046b57600080fd5b5061026061047a366004613cd4565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104ac57600080fd5b506103c76104bb366004613d58565b611b97565b3480156104cc57600080fd5b506104e06104db366004613a67565b611ba3565b60405161026c9190613daa565b3480156104f957600080fd5b506102ef610508366004613ded565b611c67565b34801561051957600080fd5b5061052d610528366004613e28565b611daa565b604080519687529415156020870152938501929092526060840152608083015260a082015260c00161026c565b34801561056657600080fd5b50610260610575366004613a67565b611e62565b34801561058657600080fd5b506103c7610595366004613e54565b611fe5565b3480156105a657600080fd5b506102ef61271081565b3480156105bc57600080fd5b506103c76105cb366004613e96565b6120b1565b3480156105dc57600080fd5b506103c76105eb366004613f1e565b6120c8565b3480156105fc57600080fd5b5061061061060b366004613e28565b612114565b604080516001600160a01b0390951685526020850193909352918301521515606082015260800161026c565b34801561064857600080fd5b506102ef614e2081565b34801561065e57600080fd5b506103c761066d366004613f3b565b6121da565b34801561067e57600080fd5b5061026061068d366004613e28565b6123cd565b34801561069e57600080fd5b506102ef61138881565b3480156106b457600080fd5b506103c76106c3366004613fc4565b612468565b3480156106d457600080fd5b506102b56106e3366004613bdf565b612532565b3480156106f457600080fd5b506102ef610703366004613bdf565b612881565b34801561071457600080fd5b506103c7610723366004613f1e565b6129d4565b34801561073457600080fd5b50610748610743366004614004565b612a20565b604080516001600160a01b03909416845291151560208401529082015260600161026c565b34801561077957600080fd5b506001546102b5906001600160a01b031681565b34801561079957600080fd5b506107ad6107a8366004613bdf565b612a65565b6040805192835260208301919091520161026c565b3480156107ce57600080fd5b506103c76107dd366004613f1e565b612ab7565b3480156107ee57600080fd5b506102606107fd366004613a67565b60066020526000908152604090205460ff1681565b34801561081e57600080fd5b506102ef61082d366004613a67565b612b89565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a39190614040565b9150915060006108b285611ba3565b9050805160001480156108f157506127106113886108d0858561407a565b6108da919061408d565b6108e491906140a4565b6108ee844261407a565b10155b95945050505050565b60008181526003602052604081205460028054839290811061091e5761091e6140c6565b600091825260208220600590910201805490925082906109409060019061407a565b81548110610950576109506140c6565b60009182526020909120600c90910201805460059091015414949350505050565b600080600080600260036000878152602001908152602001600020548154811061099d5761099d6140c6565b600091825260208220600590910201805490925082906109bf9060019061407a565b815481106109cf576109cf6140c6565b60009182526020909120600c90910201600381015460ff1694509050836109fa5780600101546109fd565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a709190614108565b5090935060049250610a80915050565b816004811115610a9257610a92614171565b03610ad5576000610aa288611ba3565b90508051600103610ad35780600081518110610ac057610ac06140c6565b6020026020010151965060009550600194505b505b5050509193909250565b604080516020808201869052818301859052825180830384018152606090920190925280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b819190614108565b50935050505080610bd95760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c509190614187565b15610c8e5760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610bd0565b60008681526006602052604090205460ff16610cbc5760405162461bcd60e51b8152600401610bd0906141a2565b600086815260036020526040812054600280549091908110610ce057610ce06140c6565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610d1457610d146140c6565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9391906141d9565b5050600087815260078401602052604090205490915060ff16610ddd576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610f22565b808603610e52576000868152600683016020526040902054610e00576000610e4b565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610e41919061408d565b610e4b91906140a4565b9450610f22565b600081815260078301602052604090205460ff16610f225781600601600083600a01600181548110610e8657610e866140c6565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610ebc57610ebc6140c6565b9060005260206000200154815260200190815260200160002054610ee09190614215565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610f15919061408d565b610f1f91906140a4565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610fb857600754610f69906001600160a01b038a811691889116612bb5565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051610faf929190918252602082015260400190565b60405180910390a45b50505050949350505050565b600082815260036020526040902054600280548492908110610fe857610fe86140c6565b600091825260209091206002600590920201015460ff161561101c5760405162461bcd60e51b8152600401610bd090614228565b600083815260036020526040812054600280549091908110611040576110406140c6565b9060005260206000209060050201905080600101548311156110a45760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610bd0565b60008481526006602052604090205460ff166110d25760405162461bcd60e51b8152600401610bd0906141a2565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111439190614040565b9150915081421015801561115657508042105b61119b5760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610bd0565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120091906141d9565b50509050868103611215576127109150611296565b612710611388611225868661407a565b61122f919061408d565b61123991906140a4565b611243854261407a565b106112905760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610bd0565b614e2091505b845460009086906112a99060019061407a565b815481106112b9576112b96140c6565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c919061425f565b611346919061407a565b60008a815260078401602052604090205490915060ff16156113aa5760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610bd0565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156113f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611418919061425f565b90506000612710611429878461408d565b61143391906140a4565b61143d9083614215565b60008c8152600686016020526040812054919250908211156114ee5760008c81526006860160205260409020543490611476908461407a565b1161149b5760008c8152600686016020526040902054611496908361407a565b61149d565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516114e5929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f84529091528120805483929061151a908490614215565b909155505060008c81526006860160205260408120805483929061153f908490614215565b909155505060008c815260068601602052604090205482116116115760008c815260068601602052604081205460098701805491929091611581908490614215565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a8501546001101561181c5782856009015461162e919061407a565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa15801561167c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a09190614187565b156116b95760028a01805460ff1916600117905561179c565b895460038b0160006116cc876001614215565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161174791815260200190565b602060405180830381865afa158015611764573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611788919061425f565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016117e9939291906142b2565b6000604051808303818588803b15801561180257600080fd5b505af1158015611816573d6000803e3d6000fd5b50505050505b8034111561184557611845611831823461407a565b6007543391906001600160a01b0316612bb5565b50505050505050505050505050565b61185d82612ca0565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806118db57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118cf6000805160206146418339815191525490565b6001600160a01b031614155b156118f95760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611953575060408051601f3d908101601f191682019092526119509181019061425f565b60015b6119725781604051630c76093760e01b8152600401610bd09190613a80565b60008051602061464183398151915281146119a357604051632a87526960e21b815260048101829052602401610bd0565b6000805160206146418339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611a6e576000836001600160a01b031683604051611a0a919061434c565b600060405180830381855af49150503d8060008114611a45576040519150601f19603f3d011682016040523d82523d6000602084013e611a4a565b606091505b5050905080611a6c576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611abe5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061464183398151915290565b60028181548110611ae157600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611b1490614278565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4090614278565b8015611b8d5780601f10611b6257610100808354040283529160200191611b8d565b820191906000526020600020905b815481529060010190602001808311611b7057829003601f168201915b5050505050905083565b611a6c84848484612ccd565b6000818152600360205260408120546002805460609392908110611bc957611bc96140c6565b60009182526020822060059091020180549092508290611beb9060019061407a565b81548110611bfb57611bfb6140c6565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c5957602002820191906000526020600020905b815481526020019060010190808311611c45575b505050505092505050919050565b600085815260036020526040812054600280548392908110611c8b57611c8b6140c6565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611cbf57611cbf6140c6565b90600052602060002090600c02016000018681548110611ce157611ce16140c6565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6391906141d9565b506003850154919350915060ff168015611d8757508183600201541480611d875750805b15611d9a576127109450505050506108f1565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611ddb57611ddb6140c6565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611e0f57611e0f6140c6565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611e8657611e866140c6565b60009182526020822060059091020180549092508290611ea89060019061407a565b81548110611eb857611eb86140c6565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190614108565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb69190614368565b5050505050915050600081611fcc578354611fd2565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b0316331461200f5760405162461bcd60e51b8152600401610bd0906143d4565b6000836001600160a01b0316838360405161202a919061434c565b60006040518083038185875af1925050503d8060008114612067576040519150601f19603f3d011682016040523d82523d6000602084013e61206c565b606091505b5050905080611a6c5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610bd0565b6120c086868686868633613030565b505050505050565b6000546001600160a01b031633146120f25760405162461bcd60e51b8152600401610bd0906143d4565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a81526020019081526020016000205481548110612142576121426140c6565b600091825260208083208a8452600360059093020191820190526040822054815491935083918110612176576121766140c6565b90600052602060002090600c02016000018781548110612198576121986140c6565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146122045760405162461bcd60e51b8152600401610bd090614416565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad20161228f8587836144a8565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156122f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612316919061425f565b612320919061407a565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab58108906123bb908a908a908a90614567565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106123f1576123f16140c6565b60009182526020808320878452600360059093020191820190526040822054815491935083918110612425576124256140c6565b90600052602060002090600c02016000018481548110612447576124476140c6565b600091825260209091206004909102016003015460ff169695505050505050565b60016000612474613761565b8054909150600160401b900460ff168061249b575080546001600160401b03808416911610155b156124b85760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556124e4858585613785565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b0316331461255f5760405162461bcd60e51b8152600401610bd090614416565b600083815260036020526040902054600280548592908110612583576125836140c6565b600091825260209091206002600590920201015460ff16156125b75760405162461bcd60e51b8152600401610bd090614228565b60008481526003602052604081205460028054919291839081106125dd576125dd6140c6565b60009182526020822060059091020180549092506125fd9060019061407a565b90506000826000018281548110612616576126166140c6565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561267b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269f919061459d565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156126ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127129190614108565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa158015612776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279a919061459d565b98506001600160a01b0389166127b6575050505050505061287a565b6127c1848c8b6137cc565b1561286d57604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612872565b600098505b505050505050505b5092915050565b6000828152600360205260408120546002805483929081106128a5576128a56140c6565b600091825260208083208684526003600590930201918201905260408220548154919350839181106128d9576128d96140c6565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295c91906141d9565b509150915082600401546000148061298b57508015801561298b57506000828152600284016020526040902054155b1561299d5760009450505050506129ce565b80156129b25750506004015491506129ce9050565b5060009081526002909101602052604090205491506129ce9050565b92915050565b6000546001600160a01b031633146129fe5760405162461bcd60e51b8152600401610bd0906143d4565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600060a084511015612a3d57506000915081905080612a5e565b505050608081015160a0808301516001600160a01b0383169290911c600116905b9193909250565b6000828152600360205260408120546002805491929183908110612a8b57612a8b6140c6565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612ac3613761565b8054909150600160401b900460ff1680612aea575080546001600160401b03808416911610155b15612b075760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612b9e57612b9e6140c6565b600091825260209091206005909102015492915050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015612be457505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c1f57600080fd5b505af1158015612c33573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b158015612c8357600080fd5b505af1158015612c97573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612cca5760405162461bcd60e51b8152600401610bd0906143d4565b50565b600084815260036020526040902054600280548692908110612cf157612cf16140c6565b600091825260209091206002600590920201015460ff1615612d255760405162461bcd60e51b8152600401610bd090614228565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d939190614108565b5090935060019250612da3915050565b816004811115612db557612db5614171565b14612e125760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610bd0565b82612e4f5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610bd0565b60008681526006602052604090205460ff16612e7d5760405162461bcd60e51b8152600401610bd0906141a2565b600086815260036020526040812054600280549091908110612ea157612ea16140c6565b60009182526020822060059091020180549092508290612ec39060019061407a565b81548110612ed357612ed36140c6565b90600052602060002090600c0201905060005b86811015612fc9573382898984818110612f0257612f026140c6565b9050602002013581548110612f1957612f196140c6565b60009182526020909120600490910201546001600160a01b031614612f805760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610bd0565b8582898984818110612f9457612f946140c6565b9050602002013581548110612fab57612fab6140c6565b60009182526020909120600160049092020181019190915501612ee6565b5086869050816005016000828254612fe19190614215565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f089061301e908b908b908b906145ec565b60405180910390a35050505050505050565b600087815260036020526040902054600280548992908110613054576130546140c6565b600091825260209091206002600590920201015460ff16156130885760405162461bcd60e51b8152600401610bd090614228565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f69190614108565b5090935060029250613106915050565b81600481111561311857613118614171565b146131735760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610bd0565b866131b55760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610bd0565b60008981526006602052604090205460ff166131e35760405162461bcd60e51b8152600401610bd0906141a2565b600089815260036020526040812054600280549091908110613207576132076140c6565b9060005260206000209060050201905080600101548711156132625760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610bd0565b805460009082906132759060019061407a565b81548110613285576132856140c6565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d906132ca908f9060040190815260200190565b60a060405180830381865afa1580156132e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330b9190614108565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015613366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338a9190614368565b5050505050915050600061339f8b8b8b610adf565b905060005b8c811015613626576001600160a01b038916858f8f848181106133c9576133c96140c6565b90506020020135815481106133e0576133e06140c6565b60009182526020909120600490910201546001600160a01b0316146134475760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610bd0565b82158061348e575081858f8f84818110613463576134636140c6565b905060200201358154811061347a5761347a6140c6565b906000526020600020906004020160010154145b61350e5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610bd0565b848e8e83818110613521576135216140c6565b9050602002013581548110613538576135386140c6565b600091825260209091206003600490920201015460ff16156135915760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610bd0565b8b858f8f848181106135a5576135a56140c6565b90506020020135815481106135bc576135bc6140c6565b60009182526020909120600260049092020101556001858f8f848181106135e5576135e56140c6565b90506020020135815481106135fc576135fc6140c6565b60009182526020909120600490910201600301805460ff19169115159190911790556001016133a4565b5050506004820180548b9250600090613640908490614215565b90915550506000888152600282016020526040812080548b9290613665908490614215565b90915550506001810154880361369457600381015460ff161561368f5760038101805460ff191690555b61370d565b60018101546000908152600282016020526040808220548a8352912054036136d657600381015460ff1661368f5760038101805460ff1916600117905561370d565b60018101546000908152600282016020526040808220548a8352912054111561370d576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b60405161374c93929190614610565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b61378d61398e565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60006137d98484846139b5565b6137e557506000610b08565b600083815260036020526040812054600280549192918390811061380b5761380b6140c6565b9060005260206000209060050201905060008060006138b584600401805461383290614278565b80601f016020809104026020016040519081016040528092919081815260200182805461385e90614278565b80156138ab5780601f10613880576101008083540402835291602001916138ab565b820191906000526020600020905b81548152906001019060200180831161388e57829003601f168201915b5050505050612a20565b919450925090506001600160a01b0383166138d857600195505050505050610b08565b811561395f57604051627eeac760e11b81526001600160a01b038881166004830152602482018390526000919085169062fdd58e906044015b602060405180830381865afa15801561392e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613952919061425f565b1195505050505050610b08565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190613911908b90600401613a80565b613996613a4d565b6139b357604051631afcd79f60e31b815260040160405180910390fd5b565b60045460009060ff1615613a435760008381526003602052604081205460028054919291839081106139e9576139e96140c6565b6000918252602082206005909102018054909250613a099060019061407a565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610b08915050565b5060019392505050565b6000613a57613761565b54600160401b900460ff16919050565b600060208284031215613a7957600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613abb57600080fd5b8135602083016000806001600160401b03841115613adb57613adb613a94565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613b0957613b09613a94565b604052838152905080828401871015613b2157600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613b5357600080fd5b833592506020840135915060408401356001600160401b03811115613b7757600080fd5b613b8386828701613aaa565b9150509250925092565b6001600160a01b0381168114612cca57600080fd5b60008060008060808587031215613bb857600080fd5b843593506020850135613bca81613b8d565b93969395505050506040820135916060013590565b60008060408385031215613bf257600080fd5b50508035926020909101359150565b60008060408385031215613c1457600080fd5b8235613c1f81613b8d565b915060208301356001600160401b03811115613c3a57600080fd5b613c4685828601613aaa565b9150509250929050565b60005b83811015613c6b578181015183820152602001613c53565b50506000910152565b60008151808452613c8c816020860160208601613c50565b601f01601f19169290920160200192915050565b602081526000610b086020830184613c74565b83815282151560208201526060604082015260006108f16060830184613c74565b600080600060608486031215613ce957600080fd5b83359250602084013591506040840135613d0281613b8d565b809150509250925092565b60008083601f840112613d1f57600080fd5b5081356001600160401b03811115613d3657600080fd5b6020830191508360208260051b8501011115613d5157600080fd5b9250929050565b60008060008060608587031215613d6e57600080fd5b8435935060208501356001600160401b03811115613d8b57600080fd5b613d9787828801613d0d565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613de2578351835260209384019390920191600101613dc4565b509095945050505050565b600080600080600060a08688031215613e0557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613e3d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e6957600080fd5b8335613e7481613b8d565b92506020840135915060408401356001600160401b03811115613b7757600080fd5b60008060008060008060a08789031215613eaf57600080fd5b8635955060208701356001600160401b03811115613ecc57600080fd5b613ed889828a01613d0d565b909650945050604087013592506060870135915060808701356001600160401b03811115613f0557600080fd5b613f1189828a01613aaa565b9150509295509295509295565b600060208284031215613f3057600080fd5b8135610b0881613b8d565b600080600080600060808688031215613f5357600080fd5b853594506020860135935060408601356001600160401b03811115613f7757600080fd5b8601601f81018813613f8857600080fd5b80356001600160401b03811115613f9e57600080fd5b886020828401011115613fb057600080fd5b959894975060200195606001359392505050565b600080600060608486031215613fd957600080fd5b8335613fe481613b8d565b92506020840135613ff481613b8d565b91506040840135613d0281613b8d565b60006020828403121561401657600080fd5b81356001600160401b0381111561402c57600080fd5b61403884828501613aaa565b949350505050565b6000806040838503121561405357600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b818103818111156129ce576129ce614064565b80820281158282048414176129ce576129ce614064565b6000826140c157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80516001600160601b03811681146140f357600080fd5b919050565b805180151581146140f357600080fd5b600080600080600060a0868803121561412057600080fd5b614129866140dc565b9450602086015161413981613b8d565b60408701519094506005811061414e57600080fd5b925061415c606087016140f8565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561419957600080fd5b610b08826140f8565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b6000806000606084860312156141ee57600080fd5b835192506141fe602085016140f8565b915061420c604085016140f8565b90509250925092565b808201808211156129ce576129ce614064565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b60006020828403121561427157600080fd5b5051919050565b600181811c9082168061428c57607f821691505b6020821081036142ac57634e487b7160e01b600052602260045260246000fd5b50919050565b8381528260208201526060604082015260008083546142d081614278565b80606086015260018216600081146142ef576001811461430b5761433f565b60ff1983166080870152608082151560051b870101935061433f565b86600052602060002060005b8381101561433657815488820160800152600190910190602001614317565b87016080019450505b5091979650505050505050565b6000825161435e818460208701613c50565b9190910192915050565b600080600080600080600060e0888a03121561438357600080fd5b61438c886140dc565b965061439a602089016140f8565b604089015160608a015160808b015160a08c01519399509197509550935091506143c660c089016140f8565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611a6e57806000526020600020601f840160051c810160208510156144815750805b601f840160051c820191505b818110156144a1576000815560010161448d565b5050505050565b6001600160401b038311156144bf576144bf613a94565b6144d3836144cd8354614278565b8361445a565b6000601f84116001811461450757600085156144ef5750838201355b600019600387901b1c1916600186901b1783556144a1565b600083815260209020601f19861690835b828110156145385786850135825560209485019460019092019101614518565b50868210156145555760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156145af57600080fd5b8151610b0881613b8d565b81835260006001600160fb1b038311156145d357600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006146006040830185876145ba565b9050826020830152949350505050565b6040815260006146246040830185876145ba565b82810360208401526146368185613c74565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220809532e74c527307f7c4fb23228698c888252ec20a2012cf6adf507c53468b9f64736f6c634300081c0033", - "deployedBytecode": "0x60806040526004361061023b5760003560e01c8063751accd01161012e578063d2b8035a116100ab578063f2f4eb261161006f578063f2f4eb261461076d578063f32ab9271461078d578063f7e7d1fd146107c2578063f8abee10146107e2578063fc6f8f161461081257600080fd5b8063d2b8035a146106c8578063da3beb8c146106e8578063e349ad301461059a578063e4c0aaf414610708578063ec7b23fb1461072857600080fd5b8063b34bfaa8116100f2578063b34bfaa81461063c578063b6ede54014610652578063ba66fde714610672578063be46760414610692578063c0c53b8b146106a857600080fd5b8063751accd01461057a578063796490f91461059a5780637c04034e146105b05780638e426460146105d0578063a7cc08fe146105f057600080fd5b80634f1ef286116101bc5780635c92e2f6116101805780635c92e2f6146104a057806365540b96146104c0578063675926f6146104ed57806369f3f0411461050d5780636d4cd8ea1461055a57600080fd5b80634f1ef286146103c957806352d1902d146103dc57806354fd4d50146103f1578063564a565d146104305780635a155ccd1461045f57600080fd5b80631cc3423a116102035780631cc3423a1461033a5780632621b9a21461035a5780632d68efc914610374578063362c3479146103945780634b2f0ea0146103b457600080fd5b80630855bbe9146102405780630baa64d1146102755780630c340a24146102955780631200aabc146102c25780631c3db16d146102fd575b600080fd5b34801561024c57600080fd5b5061026061025b366004613a67565b610832565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610260610290366004613a67565b6108fa565b3480156102a157600080fd5b506000546102b5906001600160a01b031681565b60405161026c9190613a80565b3480156102ce57600080fd5b506102ef6102dd366004613a67565b60036020526000908152604090205481565b60405190815260200161026c565b34801561030957600080fd5b5061031d610318366004613a67565b610971565b60408051938452911515602084015215159082015260600161026c565b34801561034657600080fd5b506102ef610355366004613b3e565b610adf565b34801561036657600080fd5b506004546102609060ff1681565b34801561038057600080fd5b506007546102b5906001600160a01b031681565b3480156103a057600080fd5b506102ef6103af366004613ba2565b610b0f565b6103c76103c2366004613bdf565b610fc4565b005b6103c76103d7366004613c01565b611854565b3480156103e857600080fd5b506102ef611a73565b3480156103fd57600080fd5b50610423604051806040016040528060068152602001650302e31322e360d41b81525081565b60405161026c9190613ca0565b34801561043c57600080fd5b5061045061044b366004613a67565b611ad1565b60405161026c93929190613cb3565b34801561046b57600080fd5b5061026061047a366004613cd4565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104ac57600080fd5b506103c76104bb366004613d58565b611b97565b3480156104cc57600080fd5b506104e06104db366004613a67565b611ba3565b60405161026c9190613daa565b3480156104f957600080fd5b506102ef610508366004613ded565b611c67565b34801561051957600080fd5b5061052d610528366004613e28565b611daa565b604080519687529415156020870152938501929092526060840152608083015260a082015260c00161026c565b34801561056657600080fd5b50610260610575366004613a67565b611e62565b34801561058657600080fd5b506103c7610595366004613e54565b611fe5565b3480156105a657600080fd5b506102ef61271081565b3480156105bc57600080fd5b506103c76105cb366004613e96565b6120b1565b3480156105dc57600080fd5b506103c76105eb366004613f1e565b6120c8565b3480156105fc57600080fd5b5061061061060b366004613e28565b612114565b604080516001600160a01b0390951685526020850193909352918301521515606082015260800161026c565b34801561064857600080fd5b506102ef614e2081565b34801561065e57600080fd5b506103c761066d366004613f3b565b6121da565b34801561067e57600080fd5b5061026061068d366004613e28565b6123cd565b34801561069e57600080fd5b506102ef61138881565b3480156106b457600080fd5b506103c76106c3366004613fc4565b612468565b3480156106d457600080fd5b506102b56106e3366004613bdf565b612532565b3480156106f457600080fd5b506102ef610703366004613bdf565b612881565b34801561071457600080fd5b506103c7610723366004613f1e565b6129d4565b34801561073457600080fd5b50610748610743366004614004565b612a20565b604080516001600160a01b03909416845291151560208401529082015260600161026c565b34801561077957600080fd5b506001546102b5906001600160a01b031681565b34801561079957600080fd5b506107ad6107a8366004613bdf565b612a65565b6040805192835260208301919091520161026c565b3480156107ce57600080fd5b506103c76107dd366004613f1e565b612ab7565b3480156107ee57600080fd5b506102606107fd366004613a67565b60066020526000908152604090205460ff1681565b34801561081e57600080fd5b506102ef61082d366004613a67565b612b89565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a39190614040565b9150915060006108b285611ba3565b9050805160001480156108f157506127106113886108d0858561407a565b6108da919061408d565b6108e491906140a4565b6108ee844261407a565b10155b95945050505050565b60008181526003602052604081205460028054839290811061091e5761091e6140c6565b600091825260208220600590910201805490925082906109409060019061407a565b81548110610950576109506140c6565b60009182526020909120600c90910201805460059091015414949350505050565b600080600080600260036000878152602001908152602001600020548154811061099d5761099d6140c6565b600091825260208220600590910201805490925082906109bf9060019061407a565b815481106109cf576109cf6140c6565b60009182526020909120600c90910201600381015460ff1694509050836109fa5780600101546109fd565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a709190614108565b5090935060049250610a80915050565b816004811115610a9257610a92614171565b03610ad5576000610aa288611ba3565b90508051600103610ad35780600081518110610ac057610ac06140c6565b6020026020010151965060009550600194505b505b5050509193909250565b604080516020808201869052818301859052825180830384018152606090920190925280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b819190614108565b50935050505080610bd95760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c509190614187565b15610c8e5760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610bd0565b60008681526006602052604090205460ff16610cbc5760405162461bcd60e51b8152600401610bd0906141a2565b600086815260036020526040812054600280549091908110610ce057610ce06140c6565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610d1457610d146140c6565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9391906141d9565b5050600087815260078401602052604090205490915060ff16610ddd576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610f22565b808603610e52576000868152600683016020526040902054610e00576000610e4b565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610e41919061408d565b610e4b91906140a4565b9450610f22565b600081815260078301602052604090205460ff16610f225781600601600083600a01600181548110610e8657610e866140c6565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610ebc57610ebc6140c6565b9060005260206000200154815260200190815260200160002054610ee09190614215565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610f15919061408d565b610f1f91906140a4565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610fb857600754610f69906001600160a01b038a811691889116612bb5565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051610faf929190918252602082015260400190565b60405180910390a45b50505050949350505050565b600082815260036020526040902054600280548492908110610fe857610fe86140c6565b600091825260209091206002600590920201015460ff161561101c5760405162461bcd60e51b8152600401610bd090614228565b600083815260036020526040812054600280549091908110611040576110406140c6565b9060005260206000209060050201905080600101548311156110a45760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610bd0565b60008481526006602052604090205460ff166110d25760405162461bcd60e51b8152600401610bd0906141a2565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111439190614040565b9150915081421015801561115657508042105b61119b5760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610bd0565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120091906141d9565b50509050868103611215576127109150611296565b612710611388611225868661407a565b61122f919061408d565b61123991906140a4565b611243854261407a565b106112905760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610bd0565b614e2091505b845460009086906112a99060019061407a565b815481106112b9576112b96140c6565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c919061425f565b611346919061407a565b60008a815260078401602052604090205490915060ff16156113aa5760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610bd0565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156113f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611418919061425f565b90506000612710611429878461408d565b61143391906140a4565b61143d9083614215565b60008c8152600686016020526040812054919250908211156114ee5760008c81526006860160205260409020543490611476908461407a565b1161149b5760008c8152600686016020526040902054611496908361407a565b61149d565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516114e5929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f84529091528120805483929061151a908490614215565b909155505060008c81526006860160205260408120805483929061153f908490614215565b909155505060008c815260068601602052604090205482116116115760008c815260068601602052604081205460098701805491929091611581908490614215565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a8501546001101561181c5782856009015461162e919061407a565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa15801561167c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a09190614187565b156116b95760028a01805460ff1916600117905561179c565b895460038b0160006116cc876001614215565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161174791815260200190565b602060405180830381865afa158015611764573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611788919061425f565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016117e9939291906142b2565b6000604051808303818588803b15801561180257600080fd5b505af1158015611816573d6000803e3d6000fd5b50505050505b8034111561184557611845611831823461407a565b6007543391906001600160a01b0316612bb5565b50505050505050505050505050565b61185d82612ca0565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806118db57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118cf6000805160206146418339815191525490565b6001600160a01b031614155b156118f95760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611953575060408051601f3d908101601f191682019092526119509181019061425f565b60015b6119725781604051630c76093760e01b8152600401610bd09190613a80565b60008051602061464183398151915281146119a357604051632a87526960e21b815260048101829052602401610bd0565b6000805160206146418339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611a6e576000836001600160a01b031683604051611a0a919061434c565b600060405180830381855af49150503d8060008114611a45576040519150601f19603f3d011682016040523d82523d6000602084013e611a4a565b606091505b5050905080611a6c576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611abe5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061464183398151915290565b60028181548110611ae157600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611b1490614278565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4090614278565b8015611b8d5780601f10611b6257610100808354040283529160200191611b8d565b820191906000526020600020905b815481529060010190602001808311611b7057829003601f168201915b5050505050905083565b611a6c84848484612ccd565b6000818152600360205260408120546002805460609392908110611bc957611bc96140c6565b60009182526020822060059091020180549092508290611beb9060019061407a565b81548110611bfb57611bfb6140c6565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c5957602002820191906000526020600020905b815481526020019060010190808311611c45575b505050505092505050919050565b600085815260036020526040812054600280548392908110611c8b57611c8b6140c6565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611cbf57611cbf6140c6565b90600052602060002090600c02016000018681548110611ce157611ce16140c6565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6391906141d9565b506003850154919350915060ff168015611d8757508183600201541480611d875750805b15611d9a576127109450505050506108f1565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611ddb57611ddb6140c6565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611e0f57611e0f6140c6565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611e8657611e866140c6565b60009182526020822060059091020180549092508290611ea89060019061407a565b81548110611eb857611eb86140c6565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190614108565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb69190614368565b5050505050915050600081611fcc578354611fd2565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b0316331461200f5760405162461bcd60e51b8152600401610bd0906143d4565b6000836001600160a01b0316838360405161202a919061434c565b60006040518083038185875af1925050503d8060008114612067576040519150601f19603f3d011682016040523d82523d6000602084013e61206c565b606091505b5050905080611a6c5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610bd0565b6120c086868686868633613030565b505050505050565b6000546001600160a01b031633146120f25760405162461bcd60e51b8152600401610bd0906143d4565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a81526020019081526020016000205481548110612142576121426140c6565b600091825260208083208a8452600360059093020191820190526040822054815491935083918110612176576121766140c6565b90600052602060002090600c02016000018781548110612198576121986140c6565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146122045760405162461bcd60e51b8152600401610bd090614416565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad20161228f8587836144a8565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156122f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612316919061425f565b612320919061407a565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab58108906123bb908a908a908a90614567565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106123f1576123f16140c6565b60009182526020808320878452600360059093020191820190526040822054815491935083918110612425576124256140c6565b90600052602060002090600c02016000018481548110612447576124476140c6565b600091825260209091206004909102016003015460ff169695505050505050565b60016000612474613761565b8054909150600160401b900460ff168061249b575080546001600160401b03808416911610155b156124b85760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556124e4858585613785565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b0316331461255f5760405162461bcd60e51b8152600401610bd090614416565b600083815260036020526040902054600280548592908110612583576125836140c6565b600091825260209091206002600590920201015460ff16156125b75760405162461bcd60e51b8152600401610bd090614228565b60008481526003602052604081205460028054919291839081106125dd576125dd6140c6565b60009182526020822060059091020180549092506125fd9060019061407a565b90506000826000018281548110612616576126166140c6565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561267b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269f919061459d565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156126ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127129190614108565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa158015612776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279a919061459d565b98506001600160a01b0389166127b6575050505050505061287a565b6127c1848c8b6137cc565b1561286d57604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612872565b600098505b505050505050505b5092915050565b6000828152600360205260408120546002805483929081106128a5576128a56140c6565b600091825260208083208684526003600590930201918201905260408220548154919350839181106128d9576128d96140c6565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295c91906141d9565b509150915082600401546000148061298b57508015801561298b57506000828152600284016020526040902054155b1561299d5760009450505050506129ce565b80156129b25750506004015491506129ce9050565b5060009081526002909101602052604090205491506129ce9050565b92915050565b6000546001600160a01b031633146129fe5760405162461bcd60e51b8152600401610bd0906143d4565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600060a084511015612a3d57506000915081905080612a5e565b505050608081015160a0808301516001600160a01b0383169290911c600116905b9193909250565b6000828152600360205260408120546002805491929183908110612a8b57612a8b6140c6565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612ac3613761565b8054909150600160401b900460ff1680612aea575080546001600160401b03808416911610155b15612b075760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612b9e57612b9e6140c6565b600091825260209091206005909102015492915050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015612be457505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c1f57600080fd5b505af1158015612c33573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b158015612c8357600080fd5b505af1158015612c97573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612cca5760405162461bcd60e51b8152600401610bd0906143d4565b50565b600084815260036020526040902054600280548692908110612cf157612cf16140c6565b600091825260209091206002600590920201015460ff1615612d255760405162461bcd60e51b8152600401610bd090614228565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d939190614108565b5090935060019250612da3915050565b816004811115612db557612db5614171565b14612e125760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610bd0565b82612e4f5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610bd0565b60008681526006602052604090205460ff16612e7d5760405162461bcd60e51b8152600401610bd0906141a2565b600086815260036020526040812054600280549091908110612ea157612ea16140c6565b60009182526020822060059091020180549092508290612ec39060019061407a565b81548110612ed357612ed36140c6565b90600052602060002090600c0201905060005b86811015612fc9573382898984818110612f0257612f026140c6565b9050602002013581548110612f1957612f196140c6565b60009182526020909120600490910201546001600160a01b031614612f805760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610bd0565b8582898984818110612f9457612f946140c6565b9050602002013581548110612fab57612fab6140c6565b60009182526020909120600160049092020181019190915501612ee6565b5086869050816005016000828254612fe19190614215565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f089061301e908b908b908b906145ec565b60405180910390a35050505050505050565b600087815260036020526040902054600280548992908110613054576130546140c6565b600091825260209091206002600590920201015460ff16156130885760405162461bcd60e51b8152600401610bd090614228565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f69190614108565b5090935060029250613106915050565b81600481111561311857613118614171565b146131735760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610bd0565b866131b55760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610bd0565b60008981526006602052604090205460ff166131e35760405162461bcd60e51b8152600401610bd0906141a2565b600089815260036020526040812054600280549091908110613207576132076140c6565b9060005260206000209060050201905080600101548711156132625760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610bd0565b805460009082906132759060019061407a565b81548110613285576132856140c6565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d906132ca908f9060040190815260200190565b60a060405180830381865afa1580156132e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330b9190614108565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015613366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338a9190614368565b5050505050915050600061339f8b8b8b610adf565b905060005b8c811015613626576001600160a01b038916858f8f848181106133c9576133c96140c6565b90506020020135815481106133e0576133e06140c6565b60009182526020909120600490910201546001600160a01b0316146134475760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610bd0565b82158061348e575081858f8f84818110613463576134636140c6565b905060200201358154811061347a5761347a6140c6565b906000526020600020906004020160010154145b61350e5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610bd0565b848e8e83818110613521576135216140c6565b9050602002013581548110613538576135386140c6565b600091825260209091206003600490920201015460ff16156135915760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610bd0565b8b858f8f848181106135a5576135a56140c6565b90506020020135815481106135bc576135bc6140c6565b60009182526020909120600260049092020101556001858f8f848181106135e5576135e56140c6565b90506020020135815481106135fc576135fc6140c6565b60009182526020909120600490910201600301805460ff19169115159190911790556001016133a4565b5050506004820180548b9250600090613640908490614215565b90915550506000888152600282016020526040812080548b9290613665908490614215565b90915550506001810154880361369457600381015460ff161561368f5760038101805460ff191690555b61370d565b60018101546000908152600282016020526040808220548a8352912054036136d657600381015460ff1661368f5760038101805460ff1916600117905561370d565b60018101546000908152600282016020526040808220548a8352912054111561370d576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b60405161374c93929190614610565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b61378d61398e565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60006137d98484846139b5565b6137e557506000610b08565b600083815260036020526040812054600280549192918390811061380b5761380b6140c6565b9060005260206000209060050201905060008060006138b584600401805461383290614278565b80601f016020809104026020016040519081016040528092919081815260200182805461385e90614278565b80156138ab5780601f10613880576101008083540402835291602001916138ab565b820191906000526020600020905b81548152906001019060200180831161388e57829003601f168201915b5050505050612a20565b919450925090506001600160a01b0383166138d857600195505050505050610b08565b811561395f57604051627eeac760e11b81526001600160a01b038881166004830152602482018390526000919085169062fdd58e906044015b602060405180830381865afa15801561392e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613952919061425f565b1195505050505050610b08565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190613911908b90600401613a80565b613996613a4d565b6139b357604051631afcd79f60e31b815260040160405180910390fd5b565b60045460009060ff1615613a435760008381526003602052604081205460028054919291839081106139e9576139e96140c6565b6000918252602082206005909102018054909250613a099060019061407a565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610b08915050565b5060019392505050565b6000613a57613761565b54600160401b900460ff16919050565b600060208284031215613a7957600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613abb57600080fd5b8135602083016000806001600160401b03841115613adb57613adb613a94565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613b0957613b09613a94565b604052838152905080828401871015613b2157600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613b5357600080fd5b833592506020840135915060408401356001600160401b03811115613b7757600080fd5b613b8386828701613aaa565b9150509250925092565b6001600160a01b0381168114612cca57600080fd5b60008060008060808587031215613bb857600080fd5b843593506020850135613bca81613b8d565b93969395505050506040820135916060013590565b60008060408385031215613bf257600080fd5b50508035926020909101359150565b60008060408385031215613c1457600080fd5b8235613c1f81613b8d565b915060208301356001600160401b03811115613c3a57600080fd5b613c4685828601613aaa565b9150509250929050565b60005b83811015613c6b578181015183820152602001613c53565b50506000910152565b60008151808452613c8c816020860160208601613c50565b601f01601f19169290920160200192915050565b602081526000610b086020830184613c74565b83815282151560208201526060604082015260006108f16060830184613c74565b600080600060608486031215613ce957600080fd5b83359250602084013591506040840135613d0281613b8d565b809150509250925092565b60008083601f840112613d1f57600080fd5b5081356001600160401b03811115613d3657600080fd5b6020830191508360208260051b8501011115613d5157600080fd5b9250929050565b60008060008060608587031215613d6e57600080fd5b8435935060208501356001600160401b03811115613d8b57600080fd5b613d9787828801613d0d565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613de2578351835260209384019390920191600101613dc4565b509095945050505050565b600080600080600060a08688031215613e0557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613e3d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e6957600080fd5b8335613e7481613b8d565b92506020840135915060408401356001600160401b03811115613b7757600080fd5b60008060008060008060a08789031215613eaf57600080fd5b8635955060208701356001600160401b03811115613ecc57600080fd5b613ed889828a01613d0d565b909650945050604087013592506060870135915060808701356001600160401b03811115613f0557600080fd5b613f1189828a01613aaa565b9150509295509295509295565b600060208284031215613f3057600080fd5b8135610b0881613b8d565b600080600080600060808688031215613f5357600080fd5b853594506020860135935060408601356001600160401b03811115613f7757600080fd5b8601601f81018813613f8857600080fd5b80356001600160401b03811115613f9e57600080fd5b886020828401011115613fb057600080fd5b959894975060200195606001359392505050565b600080600060608486031215613fd957600080fd5b8335613fe481613b8d565b92506020840135613ff481613b8d565b91506040840135613d0281613b8d565b60006020828403121561401657600080fd5b81356001600160401b0381111561402c57600080fd5b61403884828501613aaa565b949350505050565b6000806040838503121561405357600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b818103818111156129ce576129ce614064565b80820281158282048414176129ce576129ce614064565b6000826140c157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80516001600160601b03811681146140f357600080fd5b919050565b805180151581146140f357600080fd5b600080600080600060a0868803121561412057600080fd5b614129866140dc565b9450602086015161413981613b8d565b60408701519094506005811061414e57600080fd5b925061415c606087016140f8565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561419957600080fd5b610b08826140f8565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b6000806000606084860312156141ee57600080fd5b835192506141fe602085016140f8565b915061420c604085016140f8565b90509250925092565b808201808211156129ce576129ce614064565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b60006020828403121561427157600080fd5b5051919050565b600181811c9082168061428c57607f821691505b6020821081036142ac57634e487b7160e01b600052602260045260246000fd5b50919050565b8381528260208201526060604082015260008083546142d081614278565b80606086015260018216600081146142ef576001811461430b5761433f565b60ff1983166080870152608082151560051b870101935061433f565b86600052602060002060005b8381101561433657815488820160800152600190910190602001614317565b87016080019450505b5091979650505050505050565b6000825161435e818460208701613c50565b9190910192915050565b600080600080600080600060e0888a03121561438357600080fd5b61438c886140dc565b965061439a602089016140f8565b604089015160608a015160808b015160a08c01519399509197509550935091506143c660c089016140f8565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611a6e57806000526020600020601f840160051c810160208510156144815750805b601f840160051c820191505b818110156144a1576000815560010161448d565b5050505050565b6001600160401b038311156144bf576144bf613a94565b6144d3836144cd8354614278565b8361445a565b6000601f84116001811461450757600085156144ef5750838201355b600019600387901b1c1916600186901b1783556144a1565b600083815260209020601f19861690835b828110156145385786850135825560209485019460019092019101614518565b50868210156145555760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156145af57600080fd5b8151610b0881613b8d565b81835260006001600160fb1b038311156145d357600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006146006040830185876145ba565b9050826020830152949350505050565b6040815260006146246040830185876145ba565b82810360208401526146368185613c74565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220809532e74c527307f7c4fb23228698c888252ec20a2012cf6adf507c53468b9f64736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "extraDataToTokenInfo(bytes)": { - "details": "Extracts token gating information from the extra data.", - "params": { - "_extraData": "The extra data bytes array with the following encoding: - bytes 0-31: uint96 courtID, not used here - bytes 32-63: uint256 minJurors, not used here - bytes 64-95: uint256 disputeKitID, not used here - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160) - bytes 128-159: uint256 tokenId" - }, - "returns": { - "isERC1155": "True if the token is an ERC-1155, false for ERC-20/ERC-721.", - "tokenGate": "The address of the token contract used for gating access.", - "tokenId": "The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721)." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "getLocalDisputeRoundID(uint256,uint256)": { - "details": "Returns the local dispute ID and round ID for a given core dispute ID and core round ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core." - }, - "returns": { - "localDisputeID": "The ID of the dispute in the Dispute Kit.", - "localRoundID": "The ID of the round in the Dispute Kit." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Returns the number of rounds in a dispute.", - "params": { - "_localDisputeID": "The ID of the dispute in the Dispute Kit." - }, - "returns": { - "_0": "The number of rounds in the dispute." - } - }, - "getVoteInfo(uint256,uint256,uint256)": { - "details": "Returns the vote information for a given vote ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The address of the juror who cast the vote.", - "commit": "The commit of the vote." - } - }, - "hashVote(uint256,uint256,string)": { - "details": "Computes the hash of a vote using ABI encodingThe unused parameters may be used by overriding contracts.", - "params": { - "_choice": "The choice being voted for", - "_justification": "The justification for the vote", - "_salt": "A random salt for commitment" - }, - "returns": { - "_0": "bytes32 The hash of the encoded vote parameters" - } - }, - "initialize(address,address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isAppealFunded(uint256)": { - "details": "Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "Whether the appeal funding is finished." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "DisputeKitGated Dispute kit implementation adapted from DisputeKitClassic - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 6613, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6616, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)303" - }, - { - "astId": 6620, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)6552_storage)dyn_storage" - }, - { - "astId": 6624, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6626, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "singleDrawPerJuror", - "offset": 0, - "slot": "4", - "type": "t_bool" - }, - { - "astId": 6634, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "alreadyDrawn", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))" - }, - { - "astId": 6638, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "coreDisputeIDToActive", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6640, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "wNative", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)6552_storage)dyn_storage": { - "base": "t_struct(Dispute)6552_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)6590_storage)dyn_storage": { - "base": "t_struct(Round)6590_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)6599_storage)dyn_storage": { - "base": "t_struct(Vote)6599_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)303": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(uint256 => mapping(address => bool)))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)6552_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Dispute", - "members": [ - { - "astId": 6541, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)6590_storage)dyn_storage" - }, - { - "astId": 6543, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6545, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 6549, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6551, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)6590_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Round", - "members": [ - { - "astId": 6556, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)6599_storage)dyn_storage" - }, - { - "astId": 6558, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6562, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6564, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 6566, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 6568, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 6572, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6576, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6582, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 6584, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 6587, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 6589, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)6599_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Vote", - "members": [ - { - "astId": 6592, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6594, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 6596, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 6598, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeKitGated_Proxy.json b/contracts/deployments/arbitrumSepolia/DisputeKitGated_Proxy.json deleted file mode 100644 index a34a76190..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeKitGated_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xff42b4296deabcf5e0598aae751de91a9bfe74d88f6ed4fe82f4373877356ed2", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed", - "transactionIndex": 3, - "gasUsed": "199470", - "logsBloom": "0x00000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000800000000000000000400000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x6d6487daca86983ca793f5ef5bc7611b0083f34ce18bcb33c48ef1fc83d076be", - "transactionHash": "0xff42b4296deabcf5e0598aae751de91a9bfe74d88f6ed4fe82f4373877356ed2", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 178241316, - "transactionHash": "0xff42b4296deabcf5e0598aae751de91a9bfe74d88f6ed4fe82f4373877356ed2", - "address": "0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 5, - "blockHash": "0x6d6487daca86983ca793f5ef5bc7611b0083f34ce18bcb33c48ef1fc83d076be" - } - ], - "blockNumber": 178241316, - "cumulativeGasUsed": "358154", - "status": 1, - "byzantium": true - }, - "args": [ - "0x074837F8306faD19D4e6b1f3d2f98eA796c3f8a9", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000e8442307d36e9bf6ab27f1a009f95ce8e11c3479" - ], - "numDeployments": 1, - "solcInputHash": "74873d15f43e245d08be76d8560e80d9", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitGatedProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220996d130d61aaeb26a9d0d04a99b8d31e12de6834d2200a693f04efa432fb1da264736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220996d130d61aaeb26a9d0d04a99b8d31e12de6834d2200a693f04efa432fb1da264736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeKitShutter.json b/contracts/deployments/arbitrumSepolia/DisputeKitShutter.json deleted file mode 100644 index 2d6bf4b69..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeKitShutter.json +++ /dev/null @@ -1,1312 +0,0 @@ -{ - "address": "0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "CommitCastShutter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "castCommitShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVoteShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x4991621447184cb4ee4f349d73f852ad6d564fced8a6e758965bafbd54676536", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa", - "transactionIndex": 1, - "gasUsed": "199311", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000040000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x855951ef271368e1735aa167bb95c3e131fa812546b24c29c3ed7b14e9dd4955", - "transactionHash": "0x4991621447184cb4ee4f349d73f852ad6d564fced8a6e758965bafbd54676536", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 178241295, - "transactionHash": "0x4991621447184cb4ee4f349d73f852ad6d564fced8a6e758965bafbd54676536", - "address": "0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x855951ef271368e1735aa167bb95c3e131fa812546b24c29c3ed7b14e9dd4955" - } - ], - "blockNumber": 178241295, - "cumulativeGasUsed": "199311", - "status": 1, - "byzantium": true - }, - "args": [ - "0x97a1DAAc5aF27383B2c2AB57d8974664A7fe4352", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000e8442307d36e9bf6ab27f1a009f95ce8e11c3479" - ], - "numDeployments": 2, - "solcInputHash": "55ee2edfcfbef3e6f4c10ec53a4be5f5", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitShutterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220b9dc2002a96470cf50e49e7a537fe7864644f7b84f7c205df33e04752d2c158364736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220b9dc2002a96470cf50e49e7a537fe7864644f7b84f7c205df33e04752d2c158364736f6c634300081c0033", - "execute": { - "methodName": "reinitialize", - "args": [ - "0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511" - ] - }, - "implementation": "0xca04F97fc0Df83E25e585893F5A12fb0AebEC27d", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeKitShutter_Implementation.json b/contracts/deployments/arbitrumSepolia/DisputeKitShutter_Implementation.json deleted file mode 100644 index e53e34b06..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeKitShutter_Implementation.json +++ /dev/null @@ -1,1975 +0,0 @@ -{ - "address": "0xca04F97fc0Df83E25e585893F5A12fb0AebEC27d", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "CommitCastShutter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "castCommitShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVoteShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x5b5c9c0c81b08aade7fbedd3e061c0cb62335e2af144c412e4f26230a129d15d", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xca04F97fc0Df83E25e585893F5A12fb0AebEC27d", - "transactionIndex": 1, - "gasUsed": "4030642", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000800000000000000000000000080000000000000000000004040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd3926df7e80ca22561a1dbb3afb1ff25b20cd6012d0244577d78b674b0772844", - "transactionHash": "0x5b5c9c0c81b08aade7fbedd3e061c0cb62335e2af144c412e4f26230a129d15d", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 179580573, - "transactionHash": "0x5b5c9c0c81b08aade7fbedd3e061c0cb62335e2af144c412e4f26230a129d15d", - "address": "0xca04F97fc0Df83E25e585893F5A12fb0AebEC27d", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 0, - "blockHash": "0xd3926df7e80ca22561a1dbb3afb1ff25b20cd6012d0244577d78b674b0772844" - } - ], - "blockNumber": 179580573, - "cumulativeGasUsed": "4030642", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "726fe29d8d9c48c46571792cebc6e314", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_identity\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_encryptedVote\",\"type\":\"bytes\"}],\"name\":\"CommitCastShutter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"name\":\"alreadyDrawn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_identity\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_encryptedVote\",\"type\":\"bytes\"}],\"name\":\"castCommitShutter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVoteShutter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getLocalDisputeRoundID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localDisputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"hashVote\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"isAppealFunded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleDrawPerJuror\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"CommitCastShutter(uint256,address,bytes32,bytes32,bytes)\":{\"details\":\"Emitted when a vote is cast.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_encryptedVote\":\"The Shutter encrypted vote.\",\"_identity\":\"The Shutter identity used for encryption.\",\"_juror\":\"The address of the juror casting the vote commitment.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castCommitShutter(uint256,uint256[],bytes32,bytes32,bytes)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash including the justification.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_encryptedVote\":\"The Shutter encrypted vote.\",\"_identity\":\"The Shutter identity used for encryption.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"getLocalDisputeRoundID(uint256,uint256)\":{\"details\":\"Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\"},\"returns\":{\"localDisputeID\":\"The ID of the dispute in the Dispute Kit.\",\"localRoundID\":\"The ID of the round in the Dispute Kit.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Returns the number of rounds in a dispute.\",\"params\":{\"_localDisputeID\":\"The ID of the dispute in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of rounds in the dispute.\"}},\"getVoteInfo(uint256,uint256,uint256)\":{\"details\":\"Returns the vote information for a given vote ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The address of the juror who cast the vote.\",\"commit\":\"The commit of the vote.\"}},\"hashVote(uint256,uint256,string)\":{\"details\":\"Computes the hash of a vote using ABI encoding\",\"params\":{\"_choice\":\"The choice being voted for\",\"_justification\":\"The justification for the vote\",\"_salt\":\"A random salt for commitment\"},\"returns\":{\"_0\":\"bytes32 The hash of the encoded vote parameters\"}},\"initialize(address,address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isAppealFunded(uint256)\":{\"details\":\"Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"Whether the appeal funding is finished.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"DisputeKitShutter Added functionality: shielded voting. Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitShutter.sol\":\"DisputeKitShutter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassicBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore, KlerosCoreBase, IDisputeKit, ISortitionModule} from \\\"../KlerosCore.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {SafeSend} from \\\"../../libraries/SafeSend.sol\\\";\\n\\n/// @title DisputeKitClassicBase\\n/// Abstract Dispute kit classic implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\nabstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable {\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default.\\n mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool)))\\n public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading.\\n mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function __DisputeKitClassicBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n dispute.jumped = false; // Possibly true if this DK has jumped in a previous round.\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n coreDisputeIDToActive[_coreDisputeID] = true;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[localRoundID];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n if (drawnAddress == address(0)) {\\n // Sortition can return 0 address if no one has staked yet.\\n return drawnAddress;\\n }\\n\\n if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true;\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash.\\n function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n }\\n\\n function _castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender);\\n }\\n\\n function _castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification,\\n address _juror\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n bytes32 voteHash = hashVote(_choice, _salt, _justification);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == _juror, \\\"The juror has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == voteHash,\\n \\\"The vote hash must match the commitment in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n } // Workaround stack too deep\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.safeSend(amount, wNative);\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @dev The unused parameters may be used by overriding contracts.\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(_choice, _salt));\\n }\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length;\\n\\n return round.totalVoted == expectedTotalVoted;\\n }\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) {\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n // Uses block.timestamp from the current tx when called by the core contract.\\n return (fundedChoices.length == 0 &&\\n block.timestamp - appealPeriodStart >=\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT);\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n /// @dev Returns the number of rounds in a dispute.\\n /// @param _localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return The number of rounds in the dispute.\\n function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) {\\n return disputes[_localDisputeID].rounds.length;\\n }\\n\\n /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @return localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return localRoundID The ID of the round in the Dispute Kit.\\n function getLocalDisputeRoundID(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID\\n ) external view returns (uint256 localDisputeID, uint256 localRoundID) {\\n localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID];\\n }\\n\\n /// @dev Returns the vote information for a given vote ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @param _voteID The ID of the vote.\\n /// @return account The address of the juror who cast the vote.\\n /// @return commit The commit of the vote.\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts.\\n /// minStake is checked directly during staking process however it's possible for the juror to get drawn\\n /// while having < minStake if it is later increased by governance.\\n /// This issue is expected and harmless.\\n /// @param _round The round in which the juror is being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return result Whether the address passes the check or not.\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view virtual returns (bool result) {\\n if (singleDrawPerJuror) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n result = !alreadyDrawn[localDisputeID][localRoundID][_juror];\\n } else {\\n result = true;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc418b9a76802db5d16819836734ecff8b76d5f37101819aee6fd1844dfe21dd9\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitShutter.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {DisputeKitClassicBase, KlerosCore} from \\\"./DisputeKitClassicBase.sol\\\";\\n\\n/// @title DisputeKitShutter\\n/// Added functionality: shielded voting.\\n/// Dispute kit implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitShutter is DisputeKitClassicBase {\\n string public constant override version = \\\"0.12.0\\\";\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a vote is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _commit The commitment hash.\\n /// @param _identity The Shutter identity used for encryption.\\n /// @param _encryptedVote The Shutter encrypted vote.\\n event CommitCastShutter(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n bytes32 indexed _commit,\\n bytes32 _identity,\\n bytes _encryptedVote\\n );\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(address _governor, KlerosCore _core, address _wNative) external reinitializer(1) {\\n __DisputeKitClassicBase_initialize(_governor, _core, _wNative);\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(9) {\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash including the justification.\\n /// @param _identity The Shutter identity used for encryption.\\n /// @param _encryptedVote The Shutter encrypted vote.\\n function castCommitShutter(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit,\\n bytes32 _identity,\\n bytes calldata _encryptedVote\\n ) external notJumped(_coreDisputeID) {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n emit CommitCastShutter(_coreDisputeID, msg.sender, _commit, _identity, _encryptedVote);\\n }\\n\\n function castVoteShutter(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n address juror = dispute.rounds[dispute.rounds.length - 1].votes[_voteIDs[0]].account;\\n\\n // _castVote() ensures that all the _voteIDs do belong to `juror`\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, juror);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure override returns (bytes32) {\\n bytes32 justificationHash = keccak256(bytes(_justification));\\n return keccak256(abi.encode(_choice, _salt, justificationHash));\\n }\\n}\\n\",\"keccak256\":\"0x22667ae7b4db6a3290463f2f42df92136c4f91190665a2f14523f05e1bbc50c5\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516146976100fc600039600081816119420152818161196b0152611b6301526146976000f3fe6080604052600436106102465760003560e01c80636d4cd8ea11610139578063be467604116100b6578063e4c0aaf41161007a578063e4c0aaf41461075e578063f2f4eb261461077e578063f32ab9271461079e578063f7e7d1fd146107d3578063f8abee10146107f3578063fc6f8f161461082357600080fd5b8063be467604146106e8578063c0c53b8b146106fe578063d2b8035a1461071e578063da3beb8c1461073e578063e349ad30146105d057600080fd5b80638f06f112116100fd5780638f06f11214610626578063a7cc08fe14610646578063b34bfaa814610692578063b6ede540146106a8578063ba66fde7146106c857600080fd5b80636d4cd8ea14610590578063751accd0146105b0578063796490f9146105d05780637c04034e146105e65780638e4264601461060657600080fd5b80634b2f0ea0116101c75780635a155ccd1161018b5780635a155ccd146104955780635c92e2f6146104d657806365540b96146104f6578063675926f61461052357806369f3f0411461054357600080fd5b80634b2f0ea0146103ec5780634f1ef286146103ff57806352d1902d1461041257806354fd4d5014610427578063564a565d1461046657600080fd5b80631c3db16d1161020e5780631c3db16d146103355780631cc3423a146103725780632621b9a2146103925780632d68efc9146103ac578063362c3479146103cc57600080fd5b80630855bbe91461024b57806309cc41b8146102805780630baa64d1146102a25780630c340a24146102c25780631200aabc146102fa575b600080fd5b34801561025757600080fd5b5061026b610266366004613a09565b610843565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004613aae565b61090b565b005b3480156102ae57600080fd5b5061026b6102bd366004613a09565b6109c9565b3480156102ce57600080fd5b506000546102e2906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b34801561030657600080fd5b50610327610315366004613a09565b60036020526000908152604090205481565b604051908152602001610277565b34801561034157600080fd5b50610355610350366004613a09565b610a40565b604080519384529115156020840152151590820152606001610277565b34801561037e57600080fd5b5061032761038d366004613be8565b610bae565b34801561039e57600080fd5b5060045461026b9060ff1681565b3480156103b857600080fd5b506007546102e2906001600160a01b031681565b3480156103d857600080fd5b506103276103e7366004613c4c565b610bee565b6102a06103fa366004613c89565b61109e565b6102a061040d366004613cab565b61192e565b34801561041e57600080fd5b50610327611b56565b34801561043357600080fd5b50610459604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102779190613d4a565b34801561047257600080fd5b50610486610481366004613a09565b611bb4565b60405161027793929190613d5d565b3480156104a157600080fd5b5061026b6104b0366004613d7e565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104e257600080fd5b506102a06104f1366004613db7565b611c7a565b34801561050257600080fd5b50610516610511366004613a09565b611c86565b6040516102779190613e09565b34801561052f57600080fd5b5061032761053e366004613e4c565b611d4a565b34801561054f57600080fd5b5061056361055e366004613e87565b611e8d565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610277565b34801561059c57600080fd5b5061026b6105ab366004613a09565b611f45565b3480156105bc57600080fd5b506102a06105cb366004613eb3565b6120c8565b3480156105dc57600080fd5b5061032761271081565b3480156105f257600080fd5b506102a0610601366004613ef5565b612194565b34801561061257600080fd5b506102a0610621366004613f7d565b6121ab565b34801561063257600080fd5b506102a0610641366004613ef5565b6121f7565b34801561065257600080fd5b50610666610661366004613e87565b6122bd565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610277565b34801561069e57600080fd5b50610327614e2081565b3480156106b457600080fd5b506102a06106c3366004613f9a565b612383565b3480156106d457600080fd5b5061026b6106e3366004613e87565b612576565b3480156106f457600080fd5b5061032761138881565b34801561070a57600080fd5b506102a0610719366004613ff4565b612611565b34801561072a57600080fd5b506102e2610739366004613c89565b6126db565b34801561074a57600080fd5b50610327610759366004613c89565b612a2a565b34801561076a57600080fd5b506102a0610779366004613f7d565b612b7d565b34801561078a57600080fd5b506001546102e2906001600160a01b031681565b3480156107aa57600080fd5b506107be6107b9366004613c89565b612bc9565b60408051928352602083019190915201610277565b3480156107df57600080fd5b506102a06107ee366004613f7d565b612c1b565b3480156107ff57600080fd5b5061026b61080e366004613a09565b60066020526000908152604090205460ff1681565b34801561082f57600080fd5b5061032761083e366004613a09565b612ced565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa158015610890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b49190614034565b9150915060006108c385611c86565b90508051600014801561090257506127106113886108e1858561406e565b6108eb9190614081565b6108f59190614098565b6108ff844261406e565b10155b95945050505050565b60008781526003602052604090205460028054899290811061092f5761092f6140ba565b600091825260209091206002600590920201015460ff161561096c5760405162461bcd60e51b8152600401610963906140d0565b60405180910390fd5b61097888888888612d19565b84336001600160a01b0316897fbc1efa6396a4ba1a755245703b38c48fbe744ab5117d9f09f47d26ffc1df999e8787876040516109b793929190614130565b60405180910390a45050505050505050565b6000818152600360205260408120546002805483929081106109ed576109ed6140ba565b60009182526020822060059091020180549092508290610a0f9060019061406e565b81548110610a1f57610a1f6140ba565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610a6c57610a6c6140ba565b60009182526020822060059091020180549092508290610a8e9060019061406e565b81548110610a9e57610a9e6140ba565b60009182526020909120600c90910201600381015460ff169450905083610ac9578060010154610acc565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f9190614176565b5090935060049250610b4f915050565b816004811115610b6157610b616141df565b03610ba4576000610b7188611c86565b90508051600103610ba25780600081518110610b8f57610b8f6140ba565b6020026020010151965060009550600194505b505b5050509193909250565b80516020808301919091206040805180840187905280820186905260608082019390935281518082039093018352608001905280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c609190614176565b50935050505080610cb35760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e00000000006044820152606401610963565b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a91906141f5565b15610d685760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610963565b60008681526006602052604090205460ff16610d965760405162461bcd60e51b815260040161096390614210565b600086815260036020526040812054600280549091908110610dba57610dba6140ba565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610dee57610dee6140ba565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d9190614247565b5050600087815260078401602052604090205490915060ff16610eb7576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ffc565b808603610f2c576000868152600683016020526040902054610eda576000610f25565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610f1b9190614081565b610f259190614098565b9450610ffc565b600081815260078301602052604090205460ff16610ffc5781600601600083600a01600181548110610f6057610f606140ba565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610f9657610f966140ba565b9060005260206000200154815260200190815260200160002054610fba9190614283565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610fef9190614081565b610ff99190614098565b94505b6001600160a01b03881660009081526008830160209081526040808320898452909152812055841561109257600754611043906001600160a01b038a81169188911661307c565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051611089929190918252602082015260400190565b60405180910390a45b50505050949350505050565b6000828152600360205260409020546002805484929081106110c2576110c26140ba565b600091825260209091206002600590920201015460ff16156110f65760405162461bcd60e51b8152600401610963906140d0565b60008381526003602052604081205460028054909190811061111a5761111a6140ba565b90600052602060002090600502019050806001015483111561117e5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610963565b60008481526006602052604090205460ff166111ac5760405162461bcd60e51b815260040161096390614210565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156111f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121d9190614034565b9150915081421015801561123057508042105b6112755760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610963565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190614247565b505090508681036112ef576127109150611370565b6127106113886112ff868661406e565b6113099190614081565b6113139190614098565b61131d854261406e565b1061136a5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610963565b614e2091505b845460009086906113839060019061406e565b81548110611393576113936140ba565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114169190614296565b611420919061406e565b60008a815260078401602052604090205490915060ff16156114845760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610963565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f29190614296565b905060006127106115038784614081565b61150d9190614098565b6115179083614283565b60008c8152600686016020526040812054919250908211156115c85760008c81526006860160205260409020543490611550908461406e565b116115755760008c8152600686016020526040902054611570908361406e565b611577565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516115bf929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906115f4908490614283565b909155505060008c815260068601602052604081208054839290611619908490614283565b909155505060008c815260068601602052604090205482116116eb5760008c81526006860160205260408120546009870180549192909161165b908490614283565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156118f657828560090154611708919061406e565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177a91906141f5565b156117935760028a01805460ff19166001179055611876565b895460038b0160006117a6876001614283565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161182191815260200190565b602060405180830381865afa15801561183e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118629190614296565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016118c3939291906142e9565b6000604051808303818588803b1580156118dc57600080fd5b505af11580156118f0573d6000803e3d6000fd5b50505050505b8034111561191f5761191f61190b823461406e565b6007543391906001600160a01b031661307c565b50505050505050505050505050565b61193782613167565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119b557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119a96000805160206146428339815191525490565b6001600160a01b031614155b156119d35760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a2d575060408051601f3d908101601f19168201909252611a2a91810190614296565b60015b611a5557604051630c76093760e01b81526001600160a01b0383166004820152602401610963565b6000805160206146428339815191528114611a8657604051632a87526960e21b815260048101829052602401610963565b6000805160206146428339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611b51576000836001600160a01b031683604051611aed9190614383565b600060405180830381855af49150503d8060008114611b28576040519150601f19603f3d011682016040523d82523d6000602084013e611b2d565b606091505b5050905080611b4f576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ba15760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061464283398151915290565b60028181548110611bc457600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611bf7906142af565b80601f0160208091040260200160405190810160405280929190818152602001828054611c23906142af565b8015611c705780601f10611c4557610100808354040283529160200191611c70565b820191906000526020600020905b815481529060010190602001808311611c5357829003601f168201915b5050505050905083565b611b4f84848484612d19565b6000818152600360205260408120546002805460609392908110611cac57611cac6140ba565b60009182526020822060059091020180549092508290611cce9060019061406e565b81548110611cde57611cde6140ba565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611d3c57602002820191906000526020600020905b815481526020019060010190808311611d28575b505050505092505050919050565b600085815260036020526040812054600280548392908110611d6e57611d6e6140ba565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611da257611da26140ba565b90600052602060002090600c02016000018681548110611dc457611dc46140ba565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e469190614247565b506003850154919350915060ff168015611e6a57508183600201541480611e6a5750805b15611e7d57612710945050505050610902565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611ebe57611ebe6140ba565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611ef257611ef26140ba565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611f6957611f696140ba565b60009182526020822060059091020180549092508290611f8b9060019061406e565b81548110611f9b57611f9b6140ba565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201a9190614176565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612099919061439f565b50505050509150506000816120af5783546120b5565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b031633146120f25760405162461bcd60e51b81526004016109639061440b565b6000836001600160a01b0316838360405161210d9190614383565b60006040518083038185875af1925050503d806000811461214a576040519150601f19603f3d011682016040523d82523d6000602084013e61214f565b606091505b5050905080611b4f5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610963565b6121a386868686868633613194565b505050505050565b6000546001600160a01b031633146121d55760405162461bcd60e51b81526004016109639061440b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008681526003602052604081205460028054909190811061221b5761221b6140ba565b6000918252602082206005909102018054909250829061223d9060019061406e565b8154811061224d5761224d6140ba565b90600052602060002090600c020160000187876000818110612271576122716140ba565b9050602002013581548110612288576122886140ba565b60009182526020909120600490910201546001600160a01b031690506122b388888888888887613194565b5050505050505050565b60008060008060006002600360008a815260200190815260200160002054815481106122eb576122eb6140ba565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061231f5761231f6140ba565b90600052602060002090600c02016000018781548110612341576123416140ba565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146123ad5760405162461bcd60e51b81526004016109639061444d565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2016124388587836144df565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa15801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf9190614296565b6124c9919061406e565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab5810890612564908a908a908a90614130565b60405180910390a25050505050505050565b60008381526003602052604081205460028054839290811061259a5761259a6140ba565b600091825260208083208784526003600590930201918201905260408220548154919350839181106125ce576125ce6140ba565b90600052602060002090600c020160000184815481106125f0576125f06140ba565b600091825260209091206004909102016003015460ff169695505050505050565b6001600061261d6138c5565b8054909150600160401b900460ff1680612644575080546001600160401b03808416911610155b156126615760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561268d8585856138e9565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146127085760405162461bcd60e51b81526004016109639061444d565b60008381526003602052604090205460028054859290811061272c5761272c6140ba565b600091825260209091206002600590920201015460ff16156127605760405162461bcd60e51b8152600401610963906140d0565b6000848152600360205260408120546002805491929183908110612786576127866140ba565b60009182526020822060059091020180549092506127a69060019061406e565b905060008260000182815481106127bf576127bf6140ba565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612824573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612848919061459e565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bb9190614176565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561291f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612943919061459e565b98506001600160a01b03891661295f5750505050505050612a23565b61296a848c8b613930565b15612a1657604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612a1b565b600098505b505050505050505b5092915050565b600082815260036020526040812054600280548392908110612a4e57612a4e6140ba565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612a8257612a826140ba565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b059190614247565b5091509150826004015460001480612b34575080158015612b3457506000828152600284016020526040902054155b15612b46576000945050505050612b77565b8015612b5b575050600401549150612b779050565b506000908152600290910160205260409020549150612b779050565b92915050565b6000546001600160a01b03163314612ba75760405162461bcd60e51b81526004016109639061440b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546002805491929183908110612bef57612bef6140ba565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612c276138c5565b8054909150600160401b900460ff1680612c4e575080546001600160401b03808416911610155b15612c6b5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612d0257612d026140ba565b600091825260209091206005909102015492915050565b600084815260036020526040902054600280548692908110612d3d57612d3d6140ba565b600091825260209091206002600590920201015460ff1615612d715760405162461bcd60e51b8152600401610963906140d0565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddf9190614176565b5090935060019250612def915050565b816004811115612e0157612e016141df565b14612e5e5760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610963565b82612e9b5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610963565b60008681526006602052604090205460ff16612ec95760405162461bcd60e51b815260040161096390614210565b600086815260036020526040812054600280549091908110612eed57612eed6140ba565b60009182526020822060059091020180549092508290612f0f9060019061406e565b81548110612f1f57612f1f6140ba565b90600052602060002090600c0201905060005b86811015613015573382898984818110612f4e57612f4e6140ba565b9050602002013581548110612f6557612f656140ba565b60009182526020909120600490910201546001600160a01b031614612fcc5760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610963565b8582898984818110612fe057612fe06140ba565b9050602002013581548110612ff757612ff76140ba565b60009182526020909120600160049092020181019190915501612f32565b508686905081600501600082825461302d9190614283565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f089061306a908b908b908b906145ed565b60405180910390a35050505050505050565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050156130ab57505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130e657600080fd5b505af11580156130fa573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b15801561314a57600080fd5b505af115801561315e573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146131915760405162461bcd60e51b81526004016109639061440b565b50565b6000878152600360205260409020546002805489929081106131b8576131b86140ba565b600091825260209091206002600590920201015460ff16156131ec5760405162461bcd60e51b8152600401610963906140d0565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325a9190614176565b509093506002925061326a915050565b81600481111561327c5761327c6141df565b146132d75760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610963565b866133195760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610963565b60008981526006602052604090205460ff166133475760405162461bcd60e51b815260040161096390614210565b60008981526003602052604081205460028054909190811061336b5761336b6140ba565b9060005260206000209060050201905080600101548711156133c65760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610963565b805460009082906133d99060019061406e565b815481106133e9576133e96140ba565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d9061342e908f9060040190815260200190565b60a060405180830381865afa15801561344b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346f9190614176565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156134ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ee919061439f565b505050505091505060006135038b8b8b610bae565b905060005b8c81101561378a576001600160a01b038916858f8f8481811061352d5761352d6140ba565b9050602002013581548110613544576135446140ba565b60009182526020909120600490910201546001600160a01b0316146135ab5760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610963565b8215806135f2575081858f8f848181106135c7576135c76140ba565b90506020020135815481106135de576135de6140ba565b906000526020600020906004020160010154145b6136725760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610963565b848e8e83818110613685576136856140ba565b905060200201358154811061369c5761369c6140ba565b600091825260209091206003600490920201015460ff16156136f55760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610963565b8b858f8f84818110613709576137096140ba565b9050602002013581548110613720576137206140ba565b60009182526020909120600260049092020101556001858f8f84818110613749576137496140ba565b9050602002013581548110613760576137606140ba565b60009182526020909120600490910201600301805460ff1916911515919091179055600101613508565b5050506004820180548b92506000906137a4908490614283565b90915550506000888152600282016020526040812080548b92906137c9908490614283565b9091555050600181015488036137f857600381015460ff16156137f35760038101805460ff191690555b613871565b60018101546000908152600282016020526040808220548a83529120540361383a57600381015460ff166137f35760038101805460ff19166001179055613871565b60018101546000908152600282016020526040808220548a83529120541115613871576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b6040516138b093929190614611565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6138f16139c8565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60045460009060ff16156139be576000838152600360205260408120546002805491929183908110613964576139646140ba565b60009182526020822060059091020180549092506139849060019061406e565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610be7915050565b5060019392505050565b6139d06139ef565b6139ed57604051631afcd79f60e31b815260040160405180910390fd5b565b60006139f96138c5565b54600160401b900460ff16919050565b600060208284031215613a1b57600080fd5b5035919050565b60008083601f840112613a3457600080fd5b5081356001600160401b03811115613a4b57600080fd5b6020830191508360208260051b8501011115613a6657600080fd5b9250929050565b60008083601f840112613a7f57600080fd5b5081356001600160401b03811115613a9657600080fd5b602083019150836020828501011115613a6657600080fd5b600080600080600080600060a0888a031215613ac957600080fd5b8735965060208801356001600160401b03811115613ae657600080fd5b613af28a828b01613a22565b909750955050604088013593506060880135925060808801356001600160401b03811115613b1f57600080fd5b613b2b8a828b01613a6d565b989b979a50959850939692959293505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613b6557600080fd5b8135602083016000806001600160401b03841115613b8557613b85613b3e565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613bb357613bb3613b3e565b604052838152905080828401871015613bcb57600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613bfd57600080fd5b833592506020840135915060408401356001600160401b03811115613c2157600080fd5b613c2d86828701613b54565b9150509250925092565b6001600160a01b038116811461319157600080fd5b60008060008060808587031215613c6257600080fd5b843593506020850135613c7481613c37565b93969395505050506040820135916060013590565b60008060408385031215613c9c57600080fd5b50508035926020909101359150565b60008060408385031215613cbe57600080fd5b8235613cc981613c37565b915060208301356001600160401b03811115613ce457600080fd5b613cf085828601613b54565b9150509250929050565b60005b83811015613d15578181015183820152602001613cfd565b50506000910152565b60008151808452613d36816020860160208601613cfa565b601f01601f19169290920160200192915050565b602081526000610be76020830184613d1e565b83815282151560208201526060604082015260006109026060830184613d1e565b600080600060608486031215613d9357600080fd5b83359250602084013591506040840135613dac81613c37565b809150509250925092565b60008060008060608587031215613dcd57600080fd5b8435935060208501356001600160401b03811115613dea57600080fd5b613df687828801613a22565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613e41578351835260209384019390920191600101613e23565b509095945050505050565b600080600080600060a08688031215613e6457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613e9c57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613ec857600080fd5b8335613ed381613c37565b92506020840135915060408401356001600160401b03811115613c2157600080fd5b60008060008060008060a08789031215613f0e57600080fd5b8635955060208701356001600160401b03811115613f2b57600080fd5b613f3789828a01613a22565b909650945050604087013592506060870135915060808701356001600160401b03811115613f6457600080fd5b613f7089828a01613b54565b9150509295509295509295565b600060208284031215613f8f57600080fd5b8135610be781613c37565b600080600080600060808688031215613fb257600080fd5b853594506020860135935060408601356001600160401b03811115613fd657600080fd5b613fe288828901613a6d565b96999598509660600135949350505050565b60008060006060848603121561400957600080fd5b833561401481613c37565b9250602084013561402481613c37565b91506040840135613dac81613c37565b6000806040838503121561404757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115612b7757612b77614058565b8082028115828204841417612b7757612b77614058565b6000826140b557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b838152604060208201526000610902604083018486614107565b80516001600160601b038116811461416157600080fd5b919050565b8051801515811461416157600080fd5b600080600080600060a0868803121561418e57600080fd5b6141978661414a565b945060208601516141a781613c37565b6040870151909450600581106141bc57600080fd5b92506141ca60608701614166565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561420757600080fd5b610be782614166565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b60008060006060848603121561425c57600080fd5b8351925061426c60208501614166565b915061427a60408501614166565b90509250925092565b80820180821115612b7757612b77614058565b6000602082840312156142a857600080fd5b5051919050565b600181811c908216806142c357607f821691505b6020821081036142e357634e487b7160e01b600052602260045260246000fd5b50919050565b838152826020820152606060408201526000808354614307816142af565b8060608601526001821660008114614326576001811461434257614376565b60ff1983166080870152608082151560051b8701019350614376565b86600052602060002060005b8381101561436d5781548882016080015260019091019060200161434e565b87016080019450505b5091979650505050505050565b60008251614395818460208701613cfa565b9190910192915050565b600080600080600080600060e0888a0312156143ba57600080fd5b6143c38861414a565b96506143d160208901614166565b604089015160608a015160808b015160a08c01519399509197509550935091506143fd60c08901614166565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611b5157806000526020600020601f840160051c810160208510156144b85750805b601f840160051c820191505b818110156144d857600081556001016144c4565b5050505050565b6001600160401b038311156144f6576144f6613b3e565b61450a8361450483546142af565b83614491565b6000601f84116001811461453e57600085156145265750838201355b600019600387901b1c1916600186901b1783556144d8565b600083815260209020601f19861690835b8281101561456f578685013582556020948501946001909201910161454f565b508682101561458c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156145b057600080fd5b8151610be781613c37565b81835260006001600160fb1b038311156145d457600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006146016040830185876145bb565b9050826020830152949350505050565b6040815260006146256040830185876145bb565b82810360208401526146378185613d1e565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212204611969b7846b8f8df4dbeb55dc71bd009ee535c528de4a12223b6d97dbc9de164736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102465760003560e01c80636d4cd8ea11610139578063be467604116100b6578063e4c0aaf41161007a578063e4c0aaf41461075e578063f2f4eb261461077e578063f32ab9271461079e578063f7e7d1fd146107d3578063f8abee10146107f3578063fc6f8f161461082357600080fd5b8063be467604146106e8578063c0c53b8b146106fe578063d2b8035a1461071e578063da3beb8c1461073e578063e349ad30146105d057600080fd5b80638f06f112116100fd5780638f06f11214610626578063a7cc08fe14610646578063b34bfaa814610692578063b6ede540146106a8578063ba66fde7146106c857600080fd5b80636d4cd8ea14610590578063751accd0146105b0578063796490f9146105d05780637c04034e146105e65780638e4264601461060657600080fd5b80634b2f0ea0116101c75780635a155ccd1161018b5780635a155ccd146104955780635c92e2f6146104d657806365540b96146104f6578063675926f61461052357806369f3f0411461054357600080fd5b80634b2f0ea0146103ec5780634f1ef286146103ff57806352d1902d1461041257806354fd4d5014610427578063564a565d1461046657600080fd5b80631c3db16d1161020e5780631c3db16d146103355780631cc3423a146103725780632621b9a2146103925780632d68efc9146103ac578063362c3479146103cc57600080fd5b80630855bbe91461024b57806309cc41b8146102805780630baa64d1146102a25780630c340a24146102c25780631200aabc146102fa575b600080fd5b34801561025757600080fd5b5061026b610266366004613a09565b610843565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004613aae565b61090b565b005b3480156102ae57600080fd5b5061026b6102bd366004613a09565b6109c9565b3480156102ce57600080fd5b506000546102e2906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b34801561030657600080fd5b50610327610315366004613a09565b60036020526000908152604090205481565b604051908152602001610277565b34801561034157600080fd5b50610355610350366004613a09565b610a40565b604080519384529115156020840152151590820152606001610277565b34801561037e57600080fd5b5061032761038d366004613be8565b610bae565b34801561039e57600080fd5b5060045461026b9060ff1681565b3480156103b857600080fd5b506007546102e2906001600160a01b031681565b3480156103d857600080fd5b506103276103e7366004613c4c565b610bee565b6102a06103fa366004613c89565b61109e565b6102a061040d366004613cab565b61192e565b34801561041e57600080fd5b50610327611b56565b34801561043357600080fd5b50610459604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102779190613d4a565b34801561047257600080fd5b50610486610481366004613a09565b611bb4565b60405161027793929190613d5d565b3480156104a157600080fd5b5061026b6104b0366004613d7e565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104e257600080fd5b506102a06104f1366004613db7565b611c7a565b34801561050257600080fd5b50610516610511366004613a09565b611c86565b6040516102779190613e09565b34801561052f57600080fd5b5061032761053e366004613e4c565b611d4a565b34801561054f57600080fd5b5061056361055e366004613e87565b611e8d565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610277565b34801561059c57600080fd5b5061026b6105ab366004613a09565b611f45565b3480156105bc57600080fd5b506102a06105cb366004613eb3565b6120c8565b3480156105dc57600080fd5b5061032761271081565b3480156105f257600080fd5b506102a0610601366004613ef5565b612194565b34801561061257600080fd5b506102a0610621366004613f7d565b6121ab565b34801561063257600080fd5b506102a0610641366004613ef5565b6121f7565b34801561065257600080fd5b50610666610661366004613e87565b6122bd565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610277565b34801561069e57600080fd5b50610327614e2081565b3480156106b457600080fd5b506102a06106c3366004613f9a565b612383565b3480156106d457600080fd5b5061026b6106e3366004613e87565b612576565b3480156106f457600080fd5b5061032761138881565b34801561070a57600080fd5b506102a0610719366004613ff4565b612611565b34801561072a57600080fd5b506102e2610739366004613c89565b6126db565b34801561074a57600080fd5b50610327610759366004613c89565b612a2a565b34801561076a57600080fd5b506102a0610779366004613f7d565b612b7d565b34801561078a57600080fd5b506001546102e2906001600160a01b031681565b3480156107aa57600080fd5b506107be6107b9366004613c89565b612bc9565b60408051928352602083019190915201610277565b3480156107df57600080fd5b506102a06107ee366004613f7d565b612c1b565b3480156107ff57600080fd5b5061026b61080e366004613a09565b60066020526000908152604090205460ff1681565b34801561082f57600080fd5b5061032761083e366004613a09565b612ced565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa158015610890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b49190614034565b9150915060006108c385611c86565b90508051600014801561090257506127106113886108e1858561406e565b6108eb9190614081565b6108f59190614098565b6108ff844261406e565b10155b95945050505050565b60008781526003602052604090205460028054899290811061092f5761092f6140ba565b600091825260209091206002600590920201015460ff161561096c5760405162461bcd60e51b8152600401610963906140d0565b60405180910390fd5b61097888888888612d19565b84336001600160a01b0316897fbc1efa6396a4ba1a755245703b38c48fbe744ab5117d9f09f47d26ffc1df999e8787876040516109b793929190614130565b60405180910390a45050505050505050565b6000818152600360205260408120546002805483929081106109ed576109ed6140ba565b60009182526020822060059091020180549092508290610a0f9060019061406e565b81548110610a1f57610a1f6140ba565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610a6c57610a6c6140ba565b60009182526020822060059091020180549092508290610a8e9060019061406e565b81548110610a9e57610a9e6140ba565b60009182526020909120600c90910201600381015460ff169450905083610ac9578060010154610acc565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f9190614176565b5090935060049250610b4f915050565b816004811115610b6157610b616141df565b03610ba4576000610b7188611c86565b90508051600103610ba25780600081518110610b8f57610b8f6140ba565b6020026020010151965060009550600194505b505b5050509193909250565b80516020808301919091206040805180840187905280820186905260608082019390935281518082039093018352608001905280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c609190614176565b50935050505080610cb35760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e00000000006044820152606401610963565b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a91906141f5565b15610d685760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610963565b60008681526006602052604090205460ff16610d965760405162461bcd60e51b815260040161096390614210565b600086815260036020526040812054600280549091908110610dba57610dba6140ba565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610dee57610dee6140ba565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d9190614247565b5050600087815260078401602052604090205490915060ff16610eb7576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ffc565b808603610f2c576000868152600683016020526040902054610eda576000610f25565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610f1b9190614081565b610f259190614098565b9450610ffc565b600081815260078301602052604090205460ff16610ffc5781600601600083600a01600181548110610f6057610f606140ba565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610f9657610f966140ba565b9060005260206000200154815260200190815260200160002054610fba9190614283565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610fef9190614081565b610ff99190614098565b94505b6001600160a01b03881660009081526008830160209081526040808320898452909152812055841561109257600754611043906001600160a01b038a81169188911661307c565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051611089929190918252602082015260400190565b60405180910390a45b50505050949350505050565b6000828152600360205260409020546002805484929081106110c2576110c26140ba565b600091825260209091206002600590920201015460ff16156110f65760405162461bcd60e51b8152600401610963906140d0565b60008381526003602052604081205460028054909190811061111a5761111a6140ba565b90600052602060002090600502019050806001015483111561117e5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610963565b60008481526006602052604090205460ff166111ac5760405162461bcd60e51b815260040161096390614210565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156111f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121d9190614034565b9150915081421015801561123057508042105b6112755760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610963565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190614247565b505090508681036112ef576127109150611370565b6127106113886112ff868661406e565b6113099190614081565b6113139190614098565b61131d854261406e565b1061136a5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610963565b614e2091505b845460009086906113839060019061406e565b81548110611393576113936140ba565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114169190614296565b611420919061406e565b60008a815260078401602052604090205490915060ff16156114845760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610963565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f29190614296565b905060006127106115038784614081565b61150d9190614098565b6115179083614283565b60008c8152600686016020526040812054919250908211156115c85760008c81526006860160205260409020543490611550908461406e565b116115755760008c8152600686016020526040902054611570908361406e565b611577565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516115bf929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906115f4908490614283565b909155505060008c815260068601602052604081208054839290611619908490614283565b909155505060008c815260068601602052604090205482116116eb5760008c81526006860160205260408120546009870180549192909161165b908490614283565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156118f657828560090154611708919061406e565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177a91906141f5565b156117935760028a01805460ff19166001179055611876565b895460038b0160006117a6876001614283565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161182191815260200190565b602060405180830381865afa15801561183e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118629190614296565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016118c3939291906142e9565b6000604051808303818588803b1580156118dc57600080fd5b505af11580156118f0573d6000803e3d6000fd5b50505050505b8034111561191f5761191f61190b823461406e565b6007543391906001600160a01b031661307c565b50505050505050505050505050565b61193782613167565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119b557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119a96000805160206146428339815191525490565b6001600160a01b031614155b156119d35760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a2d575060408051601f3d908101601f19168201909252611a2a91810190614296565b60015b611a5557604051630c76093760e01b81526001600160a01b0383166004820152602401610963565b6000805160206146428339815191528114611a8657604051632a87526960e21b815260048101829052602401610963565b6000805160206146428339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611b51576000836001600160a01b031683604051611aed9190614383565b600060405180830381855af49150503d8060008114611b28576040519150601f19603f3d011682016040523d82523d6000602084013e611b2d565b606091505b5050905080611b4f576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ba15760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061464283398151915290565b60028181548110611bc457600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611bf7906142af565b80601f0160208091040260200160405190810160405280929190818152602001828054611c23906142af565b8015611c705780601f10611c4557610100808354040283529160200191611c70565b820191906000526020600020905b815481529060010190602001808311611c5357829003601f168201915b5050505050905083565b611b4f84848484612d19565b6000818152600360205260408120546002805460609392908110611cac57611cac6140ba565b60009182526020822060059091020180549092508290611cce9060019061406e565b81548110611cde57611cde6140ba565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611d3c57602002820191906000526020600020905b815481526020019060010190808311611d28575b505050505092505050919050565b600085815260036020526040812054600280548392908110611d6e57611d6e6140ba565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611da257611da26140ba565b90600052602060002090600c02016000018681548110611dc457611dc46140ba565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e469190614247565b506003850154919350915060ff168015611e6a57508183600201541480611e6a5750805b15611e7d57612710945050505050610902565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611ebe57611ebe6140ba565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611ef257611ef26140ba565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611f6957611f696140ba565b60009182526020822060059091020180549092508290611f8b9060019061406e565b81548110611f9b57611f9b6140ba565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201a9190614176565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612099919061439f565b50505050509150506000816120af5783546120b5565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b031633146120f25760405162461bcd60e51b81526004016109639061440b565b6000836001600160a01b0316838360405161210d9190614383565b60006040518083038185875af1925050503d806000811461214a576040519150601f19603f3d011682016040523d82523d6000602084013e61214f565b606091505b5050905080611b4f5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610963565b6121a386868686868633613194565b505050505050565b6000546001600160a01b031633146121d55760405162461bcd60e51b81526004016109639061440b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008681526003602052604081205460028054909190811061221b5761221b6140ba565b6000918252602082206005909102018054909250829061223d9060019061406e565b8154811061224d5761224d6140ba565b90600052602060002090600c020160000187876000818110612271576122716140ba565b9050602002013581548110612288576122886140ba565b60009182526020909120600490910201546001600160a01b031690506122b388888888888887613194565b5050505050505050565b60008060008060006002600360008a815260200190815260200160002054815481106122eb576122eb6140ba565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061231f5761231f6140ba565b90600052602060002090600c02016000018781548110612341576123416140ba565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146123ad5760405162461bcd60e51b81526004016109639061444d565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2016124388587836144df565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa15801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf9190614296565b6124c9919061406e565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab5810890612564908a908a908a90614130565b60405180910390a25050505050505050565b60008381526003602052604081205460028054839290811061259a5761259a6140ba565b600091825260208083208784526003600590930201918201905260408220548154919350839181106125ce576125ce6140ba565b90600052602060002090600c020160000184815481106125f0576125f06140ba565b600091825260209091206004909102016003015460ff169695505050505050565b6001600061261d6138c5565b8054909150600160401b900460ff1680612644575080546001600160401b03808416911610155b156126615760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561268d8585856138e9565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146127085760405162461bcd60e51b81526004016109639061444d565b60008381526003602052604090205460028054859290811061272c5761272c6140ba565b600091825260209091206002600590920201015460ff16156127605760405162461bcd60e51b8152600401610963906140d0565b6000848152600360205260408120546002805491929183908110612786576127866140ba565b60009182526020822060059091020180549092506127a69060019061406e565b905060008260000182815481106127bf576127bf6140ba565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612824573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612848919061459e565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bb9190614176565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561291f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612943919061459e565b98506001600160a01b03891661295f5750505050505050612a23565b61296a848c8b613930565b15612a1657604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612a1b565b600098505b505050505050505b5092915050565b600082815260036020526040812054600280548392908110612a4e57612a4e6140ba565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612a8257612a826140ba565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b059190614247565b5091509150826004015460001480612b34575080158015612b3457506000828152600284016020526040902054155b15612b46576000945050505050612b77565b8015612b5b575050600401549150612b779050565b506000908152600290910160205260409020549150612b779050565b92915050565b6000546001600160a01b03163314612ba75760405162461bcd60e51b81526004016109639061440b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546002805491929183908110612bef57612bef6140ba565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612c276138c5565b8054909150600160401b900460ff1680612c4e575080546001600160401b03808416911610155b15612c6b5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612d0257612d026140ba565b600091825260209091206005909102015492915050565b600084815260036020526040902054600280548692908110612d3d57612d3d6140ba565b600091825260209091206002600590920201015460ff1615612d715760405162461bcd60e51b8152600401610963906140d0565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddf9190614176565b5090935060019250612def915050565b816004811115612e0157612e016141df565b14612e5e5760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610963565b82612e9b5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610963565b60008681526006602052604090205460ff16612ec95760405162461bcd60e51b815260040161096390614210565b600086815260036020526040812054600280549091908110612eed57612eed6140ba565b60009182526020822060059091020180549092508290612f0f9060019061406e565b81548110612f1f57612f1f6140ba565b90600052602060002090600c0201905060005b86811015613015573382898984818110612f4e57612f4e6140ba565b9050602002013581548110612f6557612f656140ba565b60009182526020909120600490910201546001600160a01b031614612fcc5760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610963565b8582898984818110612fe057612fe06140ba565b9050602002013581548110612ff757612ff76140ba565b60009182526020909120600160049092020181019190915501612f32565b508686905081600501600082825461302d9190614283565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f089061306a908b908b908b906145ed565b60405180910390a35050505050505050565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050156130ab57505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130e657600080fd5b505af11580156130fa573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b15801561314a57600080fd5b505af115801561315e573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146131915760405162461bcd60e51b81526004016109639061440b565b50565b6000878152600360205260409020546002805489929081106131b8576131b86140ba565b600091825260209091206002600590920201015460ff16156131ec5760405162461bcd60e51b8152600401610963906140d0565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325a9190614176565b509093506002925061326a915050565b81600481111561327c5761327c6141df565b146132d75760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610963565b866133195760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610963565b60008981526006602052604090205460ff166133475760405162461bcd60e51b815260040161096390614210565b60008981526003602052604081205460028054909190811061336b5761336b6140ba565b9060005260206000209060050201905080600101548711156133c65760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610963565b805460009082906133d99060019061406e565b815481106133e9576133e96140ba565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d9061342e908f9060040190815260200190565b60a060405180830381865afa15801561344b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346f9190614176565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156134ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ee919061439f565b505050505091505060006135038b8b8b610bae565b905060005b8c81101561378a576001600160a01b038916858f8f8481811061352d5761352d6140ba565b9050602002013581548110613544576135446140ba565b60009182526020909120600490910201546001600160a01b0316146135ab5760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610963565b8215806135f2575081858f8f848181106135c7576135c76140ba565b90506020020135815481106135de576135de6140ba565b906000526020600020906004020160010154145b6136725760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610963565b848e8e83818110613685576136856140ba565b905060200201358154811061369c5761369c6140ba565b600091825260209091206003600490920201015460ff16156136f55760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610963565b8b858f8f84818110613709576137096140ba565b9050602002013581548110613720576137206140ba565b60009182526020909120600260049092020101556001858f8f84818110613749576137496140ba565b9050602002013581548110613760576137606140ba565b60009182526020909120600490910201600301805460ff1916911515919091179055600101613508565b5050506004820180548b92506000906137a4908490614283565b90915550506000888152600282016020526040812080548b92906137c9908490614283565b9091555050600181015488036137f857600381015460ff16156137f35760038101805460ff191690555b613871565b60018101546000908152600282016020526040808220548a83529120540361383a57600381015460ff166137f35760038101805460ff19166001179055613871565b60018101546000908152600282016020526040808220548a83529120541115613871576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b6040516138b093929190614611565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6138f16139c8565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60045460009060ff16156139be576000838152600360205260408120546002805491929183908110613964576139646140ba565b60009182526020822060059091020180549092506139849060019061406e565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610be7915050565b5060019392505050565b6139d06139ef565b6139ed57604051631afcd79f60e31b815260040160405180910390fd5b565b60006139f96138c5565b54600160401b900460ff16919050565b600060208284031215613a1b57600080fd5b5035919050565b60008083601f840112613a3457600080fd5b5081356001600160401b03811115613a4b57600080fd5b6020830191508360208260051b8501011115613a6657600080fd5b9250929050565b60008083601f840112613a7f57600080fd5b5081356001600160401b03811115613a9657600080fd5b602083019150836020828501011115613a6657600080fd5b600080600080600080600060a0888a031215613ac957600080fd5b8735965060208801356001600160401b03811115613ae657600080fd5b613af28a828b01613a22565b909750955050604088013593506060880135925060808801356001600160401b03811115613b1f57600080fd5b613b2b8a828b01613a6d565b989b979a50959850939692959293505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613b6557600080fd5b8135602083016000806001600160401b03841115613b8557613b85613b3e565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613bb357613bb3613b3e565b604052838152905080828401871015613bcb57600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613bfd57600080fd5b833592506020840135915060408401356001600160401b03811115613c2157600080fd5b613c2d86828701613b54565b9150509250925092565b6001600160a01b038116811461319157600080fd5b60008060008060808587031215613c6257600080fd5b843593506020850135613c7481613c37565b93969395505050506040820135916060013590565b60008060408385031215613c9c57600080fd5b50508035926020909101359150565b60008060408385031215613cbe57600080fd5b8235613cc981613c37565b915060208301356001600160401b03811115613ce457600080fd5b613cf085828601613b54565b9150509250929050565b60005b83811015613d15578181015183820152602001613cfd565b50506000910152565b60008151808452613d36816020860160208601613cfa565b601f01601f19169290920160200192915050565b602081526000610be76020830184613d1e565b83815282151560208201526060604082015260006109026060830184613d1e565b600080600060608486031215613d9357600080fd5b83359250602084013591506040840135613dac81613c37565b809150509250925092565b60008060008060608587031215613dcd57600080fd5b8435935060208501356001600160401b03811115613dea57600080fd5b613df687828801613a22565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613e41578351835260209384019390920191600101613e23565b509095945050505050565b600080600080600060a08688031215613e6457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613e9c57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613ec857600080fd5b8335613ed381613c37565b92506020840135915060408401356001600160401b03811115613c2157600080fd5b60008060008060008060a08789031215613f0e57600080fd5b8635955060208701356001600160401b03811115613f2b57600080fd5b613f3789828a01613a22565b909650945050604087013592506060870135915060808701356001600160401b03811115613f6457600080fd5b613f7089828a01613b54565b9150509295509295509295565b600060208284031215613f8f57600080fd5b8135610be781613c37565b600080600080600060808688031215613fb257600080fd5b853594506020860135935060408601356001600160401b03811115613fd657600080fd5b613fe288828901613a6d565b96999598509660600135949350505050565b60008060006060848603121561400957600080fd5b833561401481613c37565b9250602084013561402481613c37565b91506040840135613dac81613c37565b6000806040838503121561404757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115612b7757612b77614058565b8082028115828204841417612b7757612b77614058565b6000826140b557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b838152604060208201526000610902604083018486614107565b80516001600160601b038116811461416157600080fd5b919050565b8051801515811461416157600080fd5b600080600080600060a0868803121561418e57600080fd5b6141978661414a565b945060208601516141a781613c37565b6040870151909450600581106141bc57600080fd5b92506141ca60608701614166565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561420757600080fd5b610be782614166565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b60008060006060848603121561425c57600080fd5b8351925061426c60208501614166565b915061427a60408501614166565b90509250925092565b80820180821115612b7757612b77614058565b6000602082840312156142a857600080fd5b5051919050565b600181811c908216806142c357607f821691505b6020821081036142e357634e487b7160e01b600052602260045260246000fd5b50919050565b838152826020820152606060408201526000808354614307816142af565b8060608601526001821660008114614326576001811461434257614376565b60ff1983166080870152608082151560051b8701019350614376565b86600052602060002060005b8381101561436d5781548882016080015260019091019060200161434e565b87016080019450505b5091979650505050505050565b60008251614395818460208701613cfa565b9190910192915050565b600080600080600080600060e0888a0312156143ba57600080fd5b6143c38861414a565b96506143d160208901614166565b604089015160608a015160808b015160a08c01519399509197509550935091506143fd60c08901614166565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611b5157806000526020600020601f840160051c810160208510156144b85750805b601f840160051c820191505b818110156144d857600081556001016144c4565b5050505050565b6001600160401b038311156144f6576144f6613b3e565b61450a8361450483546142af565b83614491565b6000601f84116001811461453e57600085156145265750838201355b600019600387901b1c1916600186901b1783556144d8565b600083815260209020601f19861690835b8281101561456f578685013582556020948501946001909201910161454f565b508682101561458c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156145b057600080fd5b8151610be781613c37565b81835260006001600160fb1b038311156145d457600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006146016040830185876145bb565b9050826020830152949350505050565b6040815260006146256040830185876145bb565b82810360208401526146378185613d1e565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212204611969b7846b8f8df4dbeb55dc71bd009ee535c528de4a12223b6d97dbc9de164736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "CommitCastShutter(uint256,address,bytes32,bytes32,bytes)": { - "details": "Emitted when a vote is cast.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_encryptedVote": "The Shutter encrypted vote.", - "_identity": "The Shutter identity used for encryption.", - "_juror": "The address of the juror casting the vote commitment." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castCommitShutter(uint256,uint256[],bytes32,bytes32,bytes)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash including the justification.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_encryptedVote": "The Shutter encrypted vote.", - "_identity": "The Shutter identity used for encryption.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "getLocalDisputeRoundID(uint256,uint256)": { - "details": "Returns the local dispute ID and round ID for a given core dispute ID and core round ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core." - }, - "returns": { - "localDisputeID": "The ID of the dispute in the Dispute Kit.", - "localRoundID": "The ID of the round in the Dispute Kit." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Returns the number of rounds in a dispute.", - "params": { - "_localDisputeID": "The ID of the dispute in the Dispute Kit." - }, - "returns": { - "_0": "The number of rounds in the dispute." - } - }, - "getVoteInfo(uint256,uint256,uint256)": { - "details": "Returns the vote information for a given vote ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The address of the juror who cast the vote.", - "commit": "The commit of the vote." - } - }, - "hashVote(uint256,uint256,string)": { - "details": "Computes the hash of a vote using ABI encoding", - "params": { - "_choice": "The choice being voted for", - "_justification": "The justification for the vote", - "_salt": "A random salt for commitment" - }, - "returns": { - "_0": "bytes32 The hash of the encoded vote parameters" - } - }, - "initialize(address,address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isAppealFunded(uint256)": { - "details": "Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "Whether the appeal funding is finished." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "DisputeKitShutter Added functionality: shielded voting. Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 6613, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6616, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)303" - }, - { - "astId": 6620, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)6552_storage)dyn_storage" - }, - { - "astId": 6624, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6626, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "singleDrawPerJuror", - "offset": 0, - "slot": "4", - "type": "t_bool" - }, - { - "astId": 6634, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "alreadyDrawn", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))" - }, - { - "astId": 6638, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "coreDisputeIDToActive", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6640, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "wNative", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)6552_storage)dyn_storage": { - "base": "t_struct(Dispute)6552_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)6590_storage)dyn_storage": { - "base": "t_struct(Round)6590_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)6599_storage)dyn_storage": { - "base": "t_struct(Vote)6599_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)303": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(uint256 => mapping(address => bool)))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)6552_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Dispute", - "members": [ - { - "astId": 6541, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)6590_storage)dyn_storage" - }, - { - "astId": 6543, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6545, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 6549, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6551, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)6590_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Round", - "members": [ - { - "astId": 6556, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)6599_storage)dyn_storage" - }, - { - "astId": 6558, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6562, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6564, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 6566, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 6568, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 6572, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6576, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6582, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 6584, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 6587, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 6589, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)6599_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Vote", - "members": [ - { - "astId": 6592, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6594, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 6596, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 6598, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeKitShutter_Proxy.json b/contracts/deployments/arbitrumSepolia/DisputeKitShutter_Proxy.json deleted file mode 100644 index 1eab55369..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeKitShutter_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x4991621447184cb4ee4f349d73f852ad6d564fced8a6e758965bafbd54676536", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa", - "transactionIndex": 1, - "gasUsed": "199311", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000040000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x855951ef271368e1735aa167bb95c3e131fa812546b24c29c3ed7b14e9dd4955", - "transactionHash": "0x4991621447184cb4ee4f349d73f852ad6d564fced8a6e758965bafbd54676536", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 178241295, - "transactionHash": "0x4991621447184cb4ee4f349d73f852ad6d564fced8a6e758965bafbd54676536", - "address": "0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x855951ef271368e1735aa167bb95c3e131fa812546b24c29c3ed7b14e9dd4955" - } - ], - "blockNumber": 178241295, - "cumulativeGasUsed": "199311", - "status": 1, - "byzantium": true - }, - "args": [ - "0x97a1DAAc5aF27383B2c2AB57d8974664A7fe4352", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000e8442307d36e9bf6ab27f1a009f95ce8e11c3479" - ], - "numDeployments": 1, - "solcInputHash": "74873d15f43e245d08be76d8560e80d9", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitShutterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220b9dc2002a96470cf50e49e7a537fe7864644f7b84f7c205df33e04752d2c158364736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220b9dc2002a96470cf50e49e7a537fe7864644f7b84f7c205df33e04752d2c158364736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeResolver.json b/contracts/deployments/arbitrumSepolia/DisputeResolver.json deleted file mode 100644 index a5a098ee0..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeResolver.json +++ /dev/null @@ -1,522 +0,0 @@ -{ - "address": "0xed31bEE8b1F7cE89E93033C0d3B2ccF4cEb27652", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateUri", - "type": "string" - } - ], - "name": "DisputeRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "arbitratorDisputeIDToLocalID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - } - ], - "name": "changeArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "name": "changeTemplateRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplate", - "type": "string" - }, - { - "internalType": "string", - "name": "_disputeTemplateDataMappings", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplateUri", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplateUri", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "bytes", - "name": "arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "isRuled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numberOfRulingOptions", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templateRegistry", - "outputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x7bf8850ada03cb9586b27e5f45fb25062c54e687e968ea5e57db3f0fca4c879d", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xed31bEE8b1F7cE89E93033C0d3B2ccF4cEb27652", - "transactionIndex": 1, - "gasUsed": "956135", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xda42cc4d3d1a1e470120662712d425a541751f2f34d789332cfb2a928ac6d0b1", - "transactionHash": "0x7bf8850ada03cb9586b27e5f45fb25062c54e687e968ea5e57db3f0fca4c879d", - "logs": [], - "blockNumber": 95251553, - "cumulativeGasUsed": "956135", - "status": 1, - "byzantium": true - }, - "args": [ - "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "0xe763d31Cb096B4bc7294012B78FC7F148324ebcb" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateUri\",\"type\":\"string\"}],\"name\":\"DisputeRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"arbitratorDisputeIDToLocalID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"}],\"name\":\"changeArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplate\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateDataMappings\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateUri\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplateUri\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isRuled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRulingOptions\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DisputeRequest(address,uint256,uint256,uint256,string)\":{\"details\":\"To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\",\"params\":{\"_arbitrator\":\"The arbitrator of the contract.\",\"_arbitratorDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_externalDisputeID\":\"An identifier created outside Kleros by the protocol requesting arbitration.\",\"_templateId\":\"The identifier of the dispute template. Should not be used with _templateUri.\",\"_templateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrator\":\"The arbitrator giving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor.\",\"params\":{\"_governor\":\"The address of the new governor.\"}},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_arbitrator\":\"Target global arbitrator for any disputes.\"}},\"createDisputeForTemplate(bytes,string,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplate\":\"Dispute template.\",\"_disputeTemplateDataMappings\":\"The data mappings.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"createDisputeForTemplateUri(bytes,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"rule(uint256,uint256)\":{\"details\":\"To be called by the arbitrator of the dispute, to declare the winning ruling.\",\"params\":{\"_arbitratorDisputeID\":\"ID of the dispute in arbitrator contract.\",\"_ruling\":\"The ruling choice of the arbitration.\"}}},\"title\":\"DisputeResolver DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/arbitrables/DisputeResolver.sol\":\"DisputeResolver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/arbitration/arbitrables/DisputeResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitrableV2.sol\\\";\\nimport \\\"../interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\npragma solidity 0.8.24;\\n\\n/// @title DisputeResolver\\n/// DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\\ncontract DisputeResolver is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeStruct {\\n bytes arbitratorExtraData; // Extra data for the dispute.\\n bool isRuled; // True if the dispute has been ruled.\\n uint256 ruling; // Ruling given to the dispute.\\n uint256 numberOfRulingOptions; // The number of choices the arbitrator can give.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor.\\n IArbitratorV2 public arbitrator; // The arbitrator.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n DisputeStruct[] public disputes; // Local disputes.\\n mapping(uint256 => uint256) public arbitratorDisputeIDToLocalID; // Maps arbitrator-side dispute IDs to local dispute IDs.\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator Target global arbitrator for any disputes.\\n constructor(IArbitratorV2 _arbitrator, IDisputeTemplateRegistry _templateRegistry) {\\n governor = msg.sender;\\n arbitrator = _arbitrator;\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n governor = _governor;\\n }\\n\\n function changeArbitrator(IArbitratorV2 _arbitrator) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n arbitrator = _arbitrator;\\n }\\n\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplate Dispute template.\\n /// @param _disputeTemplateDataMappings The data mappings.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplate(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return\\n _createDispute(\\n _arbitratorExtraData,\\n _disputeTemplate,\\n _disputeTemplateDataMappings,\\n \\\"\\\",\\n _numberOfRulingOptions\\n );\\n }\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplateUri(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return _createDispute(_arbitratorExtraData, \\\"\\\", \\\"\\\", _disputeTemplateUri, _numberOfRulingOptions);\\n }\\n\\n /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling.\\n /// @param _arbitratorDisputeID ID of the dispute in arbitrator contract.\\n /// @param _ruling The ruling choice of the arbitration.\\n function rule(uint256 _arbitratorDisputeID, uint256 _ruling) external override {\\n uint256 localDisputeID = arbitratorDisputeIDToLocalID[_arbitratorDisputeID];\\n DisputeStruct storage dispute = disputes[localDisputeID];\\n require(msg.sender == address(arbitrator), \\\"Only the arbitrator can execute this.\\\");\\n require(_ruling <= dispute.numberOfRulingOptions, \\\"Invalid ruling.\\\");\\n require(!dispute.isRuled, \\\"This dispute has been ruled already.\\\");\\n\\n dispute.isRuled = true;\\n dispute.ruling = _ruling;\\n\\n emit Ruling(IArbitratorV2(msg.sender), _arbitratorDisputeID, dispute.ruling);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n function _createDispute(\\n bytes calldata _arbitratorExtraData,\\n string memory _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n string memory _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) internal virtual returns (uint256 arbitratorDisputeID) {\\n require(_numberOfRulingOptions > 1, \\\"Should be at least 2 ruling options.\\\");\\n\\n arbitratorDisputeID = arbitrator.createDispute{value: msg.value}(_numberOfRulingOptions, _arbitratorExtraData);\\n uint256 localDisputeID = disputes.length;\\n disputes.push(\\n DisputeStruct({\\n arbitratorExtraData: _arbitratorExtraData,\\n isRuled: false,\\n ruling: 0,\\n numberOfRulingOptions: _numberOfRulingOptions\\n })\\n );\\n arbitratorDisputeIDToLocalID[arbitratorDisputeID] = localDisputeID;\\n uint256 templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _disputeTemplate, _disputeTemplateDataMappings);\\n emit DisputeRequest(arbitrator, arbitratorDisputeID, localDisputeID, templateId, _disputeTemplateUri);\\n }\\n}\\n\",\"keccak256\":\"0xee61f409399f0e66be187def6fcbe2e23717475b2b752d913dfac0a32c7dca1a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0xe841a4fe8ec109ce17dde4457bf1583c8b499109b05887c53a49a3207fc6e80b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xa4dc6b958197adead238de4246cd04e7389c3dc1b9f968acd10985f8fc5b74cf\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0xb46ff71c32a524a865fe8ca99d94c9daeb690bc9d7d49d963a45b06f60af19f3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50604051610ed7380380610ed783398101604081905261002f91610083565b600080546001600160a01b03199081163317909155600180546001600160a01b03948516908316179055600280549290931691161790556100bd565b6001600160a01b038116811461008057600080fd5b50565b6000806040838503121561009657600080fd5b82516100a18161006b565b60208401519092506100b28161006b565b809150509250929050565b610e0b806100cc6000396000f3fe60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108bb565b610231565b005b34801561010c57600080fd5b506100fe61011b3660046108f5565b6103d1565b34801561012c57600080fd5b5061014061013b366004610919565b61041d565b6040516100d59493929190610978565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109f0565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a7a565b61055a565b3480156101d057600080fd5b506101836101df366004610919565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c3660046108f5565b6105b9565b34801561021d57600080fd5b506100fe61022c3660046108f5565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b88565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610b9e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610be0565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610be0565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610b9e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610b9e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906106e59086908c908c90600401610c1a565b60206040518083038185885af1158015610703573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107289190610c50565b600380546040805160a06020601f8d018190040282018101909252608081018b8152949550919382918c908c90819085018382808284376000920182905250938552505050602080830182905260408301829052606090920187905283546001810185559381522081519192600402019081906107a59082610cba565b5060208281015160018301805460ff19169115159190911790556040808401516002808501919091556060909401516003909301929092556000858152600491829052828120859055925491516312a6505d60e21b81526001600160a01b0390921691634a9941749161081c918b918b9101610d7a565b6020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190610c50565b60015460405191925084916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186906108a790869086908b90610db6565b60405180910390a350509695505050505050565b600080604083850312156108ce57600080fd5b50508035926020909101359150565b6001600160a01b03811681146108f257600080fd5b50565b60006020828403121561090757600080fd5b8135610912816108dd565b9392505050565b60006020828403121561092b57600080fd5b5035919050565b6000815180845260005b818110156109585760208185018101518683018201520161093c565b506000602082860101526020601f19601f83011685010191505092915050565b60808152600061098b6080830187610932565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109b957600080fd5b50813567ffffffffffffffff8111156109d157600080fd5b6020830191508360208285010111156109e957600080fd5b9250929050565b600080600080600060608688031215610a0857600080fd5b853567ffffffffffffffff80821115610a2057600080fd5b610a2c89838a016109a7565b90975095506020880135915080821115610a4557600080fd5b50610a52888289016109a7565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610a9357600080fd5b863567ffffffffffffffff80821115610aab57600080fd5b610ab78a838b016109a7565b90985096506020890135915080821115610ad057600080fd5b610adc8a838b016109a7565b90965094506040890135915080821115610af557600080fd5b818901915089601f830112610b0957600080fd5b813581811115610b1b57610b1b610a64565b604051601f8201601f19908116603f01168101908382118183101715610b4357610b43610a64565b816040528281528c6020848701011115610b5c57600080fd5b826020860160208301376000602084830101528096505050505050606087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610bf457607f821691505b602082108103610c1457634e487b7160e01b600052602260045260246000fd5b50919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215610c6257600080fd5b5051919050565b601f821115610cb5576000816000526020600020601f850160051c81016020861015610c925750805b601f850160051c820191505b81811015610cb157828155600101610c9e565b5050505b505050565b815167ffffffffffffffff811115610cd457610cd4610a64565b610ce881610ce28454610be0565b84610c69565b602080601f831160018114610d1d5760008415610d055750858301515b600019600386901b1c1916600185901b178555610cb1565b600085815260208120601f198616915b82811015610d4c57888601518255948401946001909101908401610d2d565b5085821015610d6a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006060820152608060208201526000610d9b6080830185610932565b8281036040840152610dad8185610932565b95945050505050565b838152826020820152606060408201526000610dad606083018461093256fea264697066735822122028e3f1561d663e8479b35f936c2645829463b01bf5fedd3e120b732867bda19a64736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108bb565b610231565b005b34801561010c57600080fd5b506100fe61011b3660046108f5565b6103d1565b34801561012c57600080fd5b5061014061013b366004610919565b61041d565b6040516100d59493929190610978565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109f0565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a7a565b61055a565b3480156101d057600080fd5b506101836101df366004610919565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c3660046108f5565b6105b9565b34801561021d57600080fd5b506100fe61022c3660046108f5565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b88565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610b9e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610be0565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610be0565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610b9e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610b9e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906106e59086908c908c90600401610c1a565b60206040518083038185885af1158015610703573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107289190610c50565b600380546040805160a06020601f8d018190040282018101909252608081018b8152949550919382918c908c90819085018382808284376000920182905250938552505050602080830182905260408301829052606090920187905283546001810185559381522081519192600402019081906107a59082610cba565b5060208281015160018301805460ff19169115159190911790556040808401516002808501919091556060909401516003909301929092556000858152600491829052828120859055925491516312a6505d60e21b81526001600160a01b0390921691634a9941749161081c918b918b9101610d7a565b6020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190610c50565b60015460405191925084916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186906108a790869086908b90610db6565b60405180910390a350509695505050505050565b600080604083850312156108ce57600080fd5b50508035926020909101359150565b6001600160a01b03811681146108f257600080fd5b50565b60006020828403121561090757600080fd5b8135610912816108dd565b9392505050565b60006020828403121561092b57600080fd5b5035919050565b6000815180845260005b818110156109585760208185018101518683018201520161093c565b506000602082860101526020601f19601f83011685010191505092915050565b60808152600061098b6080830187610932565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109b957600080fd5b50813567ffffffffffffffff8111156109d157600080fd5b6020830191508360208285010111156109e957600080fd5b9250929050565b600080600080600060608688031215610a0857600080fd5b853567ffffffffffffffff80821115610a2057600080fd5b610a2c89838a016109a7565b90975095506020880135915080821115610a4557600080fd5b50610a52888289016109a7565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610a9357600080fd5b863567ffffffffffffffff80821115610aab57600080fd5b610ab78a838b016109a7565b90985096506020890135915080821115610ad057600080fd5b610adc8a838b016109a7565b90965094506040890135915080821115610af557600080fd5b818901915089601f830112610b0957600080fd5b813581811115610b1b57610b1b610a64565b604051601f8201601f19908116603f01168101908382118183101715610b4357610b43610a64565b816040528281528c6020848701011115610b5c57600080fd5b826020860160208301376000602084830101528096505050505050606087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610bf457607f821691505b602082108103610c1457634e487b7160e01b600052602260045260246000fd5b50919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215610c6257600080fd5b5051919050565b601f821115610cb5576000816000526020600020601f850160051c81016020861015610c925750805b601f850160051c820191505b81811015610cb157828155600101610c9e565b5050505b505050565b815167ffffffffffffffff811115610cd457610cd4610a64565b610ce881610ce28454610be0565b84610c69565b602080601f831160018114610d1d5760008415610d055750858301515b600019600386901b1c1916600185901b178555610cb1565b600085815260208120601f198616915b82811015610d4c57888601518255948401946001909101908401610d2d565b5085821015610d6a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006060820152608060208201526000610d9b6080830185610932565b8281036040840152610dad8185610932565b95945050505050565b838152826020820152606060408201526000610dad606083018461093256fea264697066735822122028e3f1561d663e8479b35f936c2645829463b01bf5fedd3e120b732867bda19a64736f6c63430008180033", - "devdoc": { - "events": { - "DisputeRequest(address,uint256,uint256,uint256,string)": { - "details": "To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.", - "params": { - "_arbitrator": "The arbitrator of the contract.", - "_arbitratorDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_externalDisputeID": "An identifier created outside Kleros by the protocol requesting arbitration.", - "_templateId": "The identifier of the dispute template. Should not be used with _templateUri.", - "_templateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrator": "The arbitrator giving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor.", - "params": { - "_governor": "The address of the new governor." - } - }, - "constructor": { - "details": "Constructor", - "params": { - "_arbitrator": "Target global arbitrator for any disputes." - } - }, - "createDisputeForTemplate(bytes,string,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplate": "Dispute template.", - "_disputeTemplateDataMappings": "The data mappings.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "createDisputeForTemplateUri(bytes,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "rule(uint256,uint256)": { - "details": "To be called by the arbitrator of the dispute, to declare the winning ruling.", - "params": { - "_arbitratorDisputeID": "ID of the dispute in arbitrator contract.", - "_ruling": "The ruling choice of the arbitration." - } - } - }, - "title": "DisputeResolver DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 14991, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 14994, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitrator", - "offset": 0, - "slot": "1", - "type": "t_contract(IArbitratorV2)23044" - }, - { - "astId": 14997, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "templateRegistry", - "offset": 0, - "slot": "2", - "type": "t_contract(IDisputeTemplateRegistry)23215" - }, - { - "astId": 15001, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "disputes", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(DisputeStruct)14989_storage)dyn_storage" - }, - { - "astId": 15005, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitratorDisputeIDToLocalID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(DisputeStruct)14989_storage)dyn_storage": { - "base": "t_struct(DisputeStruct)14989_storage", - "encoding": "dynamic_array", - "label": "struct DisputeResolver.DisputeStruct[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IArbitratorV2)23044": { - "encoding": "inplace", - "label": "contract IArbitratorV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeTemplateRegistry)23215": { - "encoding": "inplace", - "label": "contract IDisputeTemplateRegistry", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeStruct)14989_storage": { - "encoding": "inplace", - "label": "struct DisputeResolver.DisputeStruct", - "members": [ - { - "astId": 14982, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitratorExtraData", - "offset": 0, - "slot": "0", - "type": "t_bytes_storage" - }, - { - "astId": 14984, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "isRuled", - "offset": 0, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 14986, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "ruling", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 14988, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "numberOfRulingOptions", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeTemplateRegistry.json b/contracts/deployments/arbitrumSepolia/DisputeTemplateRegistry.json deleted file mode 100644 index 8e4718672..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeTemplateRegistry.json +++ /dev/null @@ -1,317 +0,0 @@ -{ - "address": "0xe763d31Cb096B4bc7294012B78FC7F148324ebcb", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "DisputeTemplate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "setDisputeTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "templateId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templates", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x78a54be6bb2374cbb6ef218babedcb18eaa5c1c8b917cc370e6ef8a0bffac7f0", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xe763d31Cb096B4bc7294012B78FC7F148324ebcb", - "transactionIndex": 1, - "gasUsed": "193742", - "logsBloom": "0x00000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x5aff43f61222fce0570e2d9f29fa1bcf5e7ddbe96b642327d680a02f4883c5dc", - "transactionHash": "0x78a54be6bb2374cbb6ef218babedcb18eaa5c1c8b917cc370e6ef8a0bffac7f0", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 95251543, - "transactionHash": "0x78a54be6bb2374cbb6ef218babedcb18eaa5c1c8b917cc370e6ef8a0bffac7f0", - "address": "0xe763d31Cb096B4bc7294012B78FC7F148324ebcb", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x5aff43f61222fce0570e2d9f29fa1bcf5e7ddbe96b642327d680a02f4883c5dc" - } - ], - "blockNumber": 95251543, - "cumulativeGasUsed": "193742", - "status": 1, - "byzantium": true - }, - "args": [ - "0x7283c07CC5224B20f431B1fa0E6d6db3cA02de34", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 2, - "solcInputHash": "acb39436d8539d1379a47e045a065e54", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeTemplateRegistryProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x8edb830825d7fe8ef85d445b087fac3b41f626cd7d5b40ea583c3cba21528687\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0xc3e0b18f846a62cc6c274680fc10014d1267885f8eefc6767292d3e174a081c0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220fc35bcfc81b847362e3b09f140cee679a071a646ec883e245b34a4cebe415b3464736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220fc35bcfc81b847362e3b09f140cee679a071a646ec883e245b34a4cebe415b3464736f6c63430008180033", - "execute": { - "methodName": "initialize2", - "args": [] - }, - "implementation": "0xf97791DA66e0A8Ff8Ee4908872CfCAcc641829Ec", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeTemplateRegistry_Implementation.json b/contracts/deployments/arbitrumSepolia/DisputeTemplateRegistry_Implementation.json deleted file mode 100644 index 1d584e08b..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeTemplateRegistry_Implementation.json +++ /dev/null @@ -1,423 +0,0 @@ -{ - "address": "0xf97791DA66e0A8Ff8Ee4908872CfCAcc641829Ec", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "DisputeTemplate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "setDisputeTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "templateId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templates", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x81094bcb02cdfbe03abe06cff23b68361d69bf3cc27d97a6fcb11cc322c759f4", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xf97791DA66e0A8Ff8Ee4908872CfCAcc641829Ec", - "transactionIndex": 1, - "gasUsed": "636291", - "logsBloom": "0x00000000000000000000000000000001000000000000000000000000000080000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd41f23f49bd948b47c425939bdd8fed42673bf0a54e49748aa17df3f8e45e147", - "transactionHash": "0x81094bcb02cdfbe03abe06cff23b68361d69bf3cc27d97a6fcb11cc322c759f4", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 139235123, - "transactionHash": "0x81094bcb02cdfbe03abe06cff23b68361d69bf3cc27d97a6fcb11cc322c759f4", - "address": "0xf97791DA66e0A8Ff8Ee4908872CfCAcc641829Ec", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 0, - "blockHash": "0xd41f23f49bd948b47c425939bdd8fed42673bf0a54e49748aa17df3f8e45e147" - } - ], - "blockNumber": 139235123, - "cumulativeGasUsed": "636291", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "acb39436d8539d1379a47e045a065e54", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"_templateTag\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"DisputeTemplate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_templateTag\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"setDisputeTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"templateId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A contract to maintain a registry of dispute templates.\",\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"DisputeTemplate(uint256,string,string,string)\":{\"details\":\"To be emitted when a new dispute template is created.\",\"params\":{\"_templateData\":\"The template data.\",\"_templateDataMappings\":\"The data mappings.\",\"_templateId\":\"The identifier of the dispute template.\",\"_templateTag\":\"An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor of the contract.\",\"params\":{\"_governor\":\"The new governor.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initialize(address)\":{\"details\":\"Initializer\",\"params\":{\"_governor\":\"Governor of the contract.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setDisputeTemplate(string,string,string)\":{\"details\":\"Registers a new dispute template.\",\"params\":{\"_templateData\":\"The data of the template.\",\"_templateDataMappings\":\"The data mappings of the template.\",\"_templateTag\":\"The tag of the template (optional).\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"governor\":{\"details\":\"The governor of the contract.\"},\"templates\":{\"details\":\"The number of templates.\"},\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"Dispute Template Registry\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/DisputeTemplateRegistry.sol\":\"DisputeTemplateRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/arbitration/DisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport \\\"../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\nimport \\\"./interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\n/// @title Dispute Template Registry\\n/// @dev A contract to maintain a registry of dispute templates.\\ncontract DisputeTemplateRegistry is IDisputeTemplateRegistry, UUPSProxiable, Initializable {\\n string public constant override version = \\\"0.8.0\\\";\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev The governor of the contract.\\n address public governor;\\n\\n /// @dev The number of templates.\\n uint256 public templates;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Governor only\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer\\n /// @param _governor Governor of the contract.\\n function initialize(address _governor) external reinitializer(1) {\\n governor = _governor;\\n }\\n\\n function initialize2() external reinitializer(2) {\\n // NOP\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Changes the governor of the contract.\\n /// @param _governor The new governor.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Registers a new dispute template.\\n /// @param _templateTag The tag of the template (optional).\\n /// @param _templateData The data of the template.\\n /// @param _templateDataMappings The data mappings of the template.\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId) {\\n templateId = templates++;\\n emit DisputeTemplate(templateId, _templateTag, _templateData, _templateDataMappings);\\n }\\n}\\n\",\"keccak256\":\"0x846514453223bb0f371180dd8b08b83c0b4a794e8cb915cac3321d3e1a5a26a8\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0xb46ff71c32a524a865fe8ca99d94c9daeb690bc9d7d49d963a45b06f60af19f3\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x560ea64115636ecd6b3596248817125551c038ce1648019fde3cbe02d9759a30\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa8bb02ed2b2fc165296226762299c2ee3328f2a0c6e90c6fe7029fa5b01d0b60\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610a146100fc600039600081816103010152818161032a01526105270152610a146000f3fe6080604052600436106100765760003560e01c80630c340a241461007b5780633a283d7d146100b8578063472abf68146100dc5780634a994174146100f35780634f1ef2861461011357806352d1902d1461012657806354fd4d501461013b578063c4d66de814610179578063e4c0aaf414610199575b600080fd5b34801561008757600080fd5b5060005461009b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100c457600080fd5b506100ce60015481565b6040519081526020016100af565b3480156100e857600080fd5b506100f16101b9565b005b3480156100ff57600080fd5b506100ce61010e36600461078b565b610280565b6100f161012136600461082e565b6102ed565b34801561013257600080fd5b506100ce61051a565b34801561014757600080fd5b5061016c604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100af91906108df565b34801561018557600080fd5b506100f16101943660046108f2565b610578565b3480156101a557600080fd5b506100f16101b43660046108f2565b610660565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff1680610202575080546001600160401b03808416911610155b1561021f5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b60018054600091826102918361090d565b919050559050836040516102a59190610934565b6040518091039020817ef7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff992485856040516102de929190610950565b60405180910390a39392505050565b6102f6826106ac565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061037457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166103686000805160206109bf8339815191525490565b6001600160a01b031614155b156103925760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156103ec575060408051601f3d908101601f191682019092526103e99181019061097e565b60015b61041957604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206109bf833981519152811461044a57604051632a87526960e21b815260048101829052602401610410565b6000805160206109bf8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115610515576000836001600160a01b0316836040516104b19190610934565b600060405180830381855af49150503d80600081146104ec576040519150601f19603f3d011682016040523d82523d6000602084013e6104f1565b606091505b5050905080610513576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105655760405163703e46dd60e11b815260040160405180910390fd5b506000805160206109bf83398151915290565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105c1575080546001600160401b03808416911610155b156105de5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6000546001600160a01b0316331461068a5760405162461bcd60e51b815260040161041090610997565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146106d65760405162461bcd60e51b815260040161041090610997565b50565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115610709576107096106d9565b604051601f8501601f19908116603f01168101908282118183101715610731576107316106d9565b8160405280935085815286868601111561074a57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261077557600080fd5b610784838335602085016106ef565b9392505050565b6000806000606084860312156107a057600080fd5b83356001600160401b03808211156107b757600080fd5b6107c387838801610764565b945060208601359150808211156107d957600080fd5b6107e587838801610764565b935060408601359150808211156107fb57600080fd5b5061080886828701610764565b9150509250925092565b80356001600160a01b038116811461082957600080fd5b919050565b6000806040838503121561084157600080fd5b61084a83610812565b915060208301356001600160401b0381111561086557600080fd5b8301601f8101851361087657600080fd5b610885858235602084016106ef565b9150509250929050565b60005b838110156108aa578181015183820152602001610892565b50506000910152565b600081518084526108cb81602086016020860161088f565b601f01601f19169290920160200192915050565b60208152600061078460208301846108b3565b60006020828403121561090457600080fd5b61078482610812565b60006001820161092d57634e487b7160e01b600052601160045260246000fd5b5060010190565b6000825161094681846020870161088f565b9190910192915050565b60408152600061096360408301856108b3565b828103602084015261097581856108b3565b95945050505050565b60006020828403121561099057600080fd5b5051919050565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b60408201526060019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122077c70451c86b4f0fa2f477a69ed75120b197b736aed325df40ecd8d281ec15a864736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100765760003560e01c80630c340a241461007b5780633a283d7d146100b8578063472abf68146100dc5780634a994174146100f35780634f1ef2861461011357806352d1902d1461012657806354fd4d501461013b578063c4d66de814610179578063e4c0aaf414610199575b600080fd5b34801561008757600080fd5b5060005461009b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100c457600080fd5b506100ce60015481565b6040519081526020016100af565b3480156100e857600080fd5b506100f16101b9565b005b3480156100ff57600080fd5b506100ce61010e36600461078b565b610280565b6100f161012136600461082e565b6102ed565b34801561013257600080fd5b506100ce61051a565b34801561014757600080fd5b5061016c604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100af91906108df565b34801561018557600080fd5b506100f16101943660046108f2565b610578565b3480156101a557600080fd5b506100f16101b43660046108f2565b610660565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff1680610202575080546001600160401b03808416911610155b1561021f5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b60018054600091826102918361090d565b919050559050836040516102a59190610934565b6040518091039020817ef7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff992485856040516102de929190610950565b60405180910390a39392505050565b6102f6826106ac565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061037457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166103686000805160206109bf8339815191525490565b6001600160a01b031614155b156103925760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156103ec575060408051601f3d908101601f191682019092526103e99181019061097e565b60015b61041957604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206109bf833981519152811461044a57604051632a87526960e21b815260048101829052602401610410565b6000805160206109bf8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115610515576000836001600160a01b0316836040516104b19190610934565b600060405180830381855af49150503d80600081146104ec576040519150601f19603f3d011682016040523d82523d6000602084013e6104f1565b606091505b5050905080610513576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105655760405163703e46dd60e11b815260040160405180910390fd5b506000805160206109bf83398151915290565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105c1575080546001600160401b03808416911610155b156105de5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6000546001600160a01b0316331461068a5760405162461bcd60e51b815260040161041090610997565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146106d65760405162461bcd60e51b815260040161041090610997565b50565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115610709576107096106d9565b604051601f8501601f19908116603f01168101908282118183101715610731576107316106d9565b8160405280935085815286868601111561074a57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261077557600080fd5b610784838335602085016106ef565b9392505050565b6000806000606084860312156107a057600080fd5b83356001600160401b03808211156107b757600080fd5b6107c387838801610764565b945060208601359150808211156107d957600080fd5b6107e587838801610764565b935060408601359150808211156107fb57600080fd5b5061080886828701610764565b9150509250925092565b80356001600160a01b038116811461082957600080fd5b919050565b6000806040838503121561084157600080fd5b61084a83610812565b915060208301356001600160401b0381111561086557600080fd5b8301601f8101851361087657600080fd5b610885858235602084016106ef565b9150509250929050565b60005b838110156108aa578181015183820152602001610892565b50506000910152565b600081518084526108cb81602086016020860161088f565b601f01601f19169290920160200192915050565b60208152600061078460208301846108b3565b60006020828403121561090457600080fd5b61078482610812565b60006001820161092d57634e487b7160e01b600052601160045260246000fd5b5060010190565b6000825161094681846020870161088f565b9190910192915050565b60408152600061096360408301856108b3565b828103602084015261097581856108b3565b95945050505050565b60006020828403121561099057600080fd5b5051919050565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b60408201526060019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122077c70451c86b4f0fa2f477a69ed75120b197b736aed325df40ecd8d281ec15a864736f6c63430008180033", - "devdoc": { - "details": "A contract to maintain a registry of dispute templates.", - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "DisputeTemplate(uint256,string,string,string)": { - "details": "To be emitted when a new dispute template is created.", - "params": { - "_templateData": "The template data.", - "_templateDataMappings": "The data mappings.", - "_templateId": "The identifier of the dispute template.", - "_templateTag": "An optional tag for the dispute template, such as \"registration\" or \"removal\"." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor of the contract.", - "params": { - "_governor": "The new governor." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "initialize(address)": { - "details": "Initializer", - "params": { - "_governor": "Governor of the contract." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setDisputeTemplate(string,string,string)": { - "details": "Registers a new dispute template.", - "params": { - "_templateData": "The data of the template.", - "_templateDataMappings": "The data mappings of the template.", - "_templateTag": "The tag of the template (optional)." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "governor": { - "details": "The governor of the contract." - }, - "templates": { - "details": "The number of templates." - }, - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "Dispute Template Registry", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 8294, - "contract": "src/arbitration/DisputeTemplateRegistry.sol:DisputeTemplateRegistry", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 8297, - "contract": "src/arbitration/DisputeTemplateRegistry.sol:DisputeTemplateRegistry", - "label": "templates", - "offset": 0, - "slot": "1", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/DisputeTemplateRegistry_Proxy.json b/contracts/deployments/arbitrumSepolia/DisputeTemplateRegistry_Proxy.json deleted file mode 100644 index 35034c61a..000000000 --- a/contracts/deployments/arbitrumSepolia/DisputeTemplateRegistry_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0xe763d31Cb096B4bc7294012B78FC7F148324ebcb", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x78a54be6bb2374cbb6ef218babedcb18eaa5c1c8b917cc370e6ef8a0bffac7f0", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xe763d31Cb096B4bc7294012B78FC7F148324ebcb", - "transactionIndex": 1, - "gasUsed": "193742", - "logsBloom": "0x00000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x5aff43f61222fce0570e2d9f29fa1bcf5e7ddbe96b642327d680a02f4883c5dc", - "transactionHash": "0x78a54be6bb2374cbb6ef218babedcb18eaa5c1c8b917cc370e6ef8a0bffac7f0", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 95251543, - "transactionHash": "0x78a54be6bb2374cbb6ef218babedcb18eaa5c1c8b917cc370e6ef8a0bffac7f0", - "address": "0xe763d31Cb096B4bc7294012B78FC7F148324ebcb", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x5aff43f61222fce0570e2d9f29fa1bcf5e7ddbe96b642327d680a02f4883c5dc" - } - ], - "blockNumber": 95251543, - "cumulativeGasUsed": "193742", - "status": 1, - "byzantium": true - }, - "args": [ - "0x7283c07CC5224B20f431B1fa0E6d6db3cA02de34", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeTemplateRegistryProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220677e943f9d34953f9ff6f8c97da0b7a4317d9f65361d9eade87930e19a594d4264736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220677e943f9d34953f9ff6f8c97da0b7a4317d9f65361d9eade87930e19a594d4264736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/EvidenceModule.json b/contracts/deployments/arbitrumSepolia/EvidenceModule.json deleted file mode 100644 index 876d7f1ca..000000000 --- a/contracts/deployments/arbitrumSepolia/EvidenceModule.json +++ /dev/null @@ -1,274 +0,0 @@ -{ - "address": "0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_party", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "_evidence", - "type": "string" - } - ], - "name": "Evidence", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_evidence", - "type": "string" - } - ], - "name": "submitEvidence", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x9b68f5d8657d7a2fcaab3327684238f02cf41afac6c673ed030a09d8a4a84f7c", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397", - "transactionIndex": 1, - "gasUsed": "201064", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000004000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x756b1e7c8af15e913d51c92bd1b0499888f6a7843f512450d46a0a46220acfae", - "transactionHash": "0x9b68f5d8657d7a2fcaab3327684238f02cf41afac6c673ed030a09d8a4a84f7c", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 95247733, - "transactionHash": "0x9b68f5d8657d7a2fcaab3327684238f02cf41afac6c673ed030a09d8a4a84f7c", - "address": "0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x756b1e7c8af15e913d51c92bd1b0499888f6a7843f512450d46a0a46220acfae" - } - ], - "blockNumber": 95247733, - "cumulativeGasUsed": "201064", - "status": 1, - "byzantium": true - }, - "args": [ - "0x63CF56e1c99E65E4a9eCDCC805F4735E016F2dc8", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 2, - "solcInputHash": "acb39436d8539d1379a47e045a065e54", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"EvidenceModuleProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x8edb830825d7fe8ef85d445b087fac3b41f626cd7d5b40ea583c3cba21528687\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0xc3e0b18f846a62cc6c274680fc10014d1267885f8eefc6767292d3e174a081c0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220f7c42d679ff13810d84897a3cbbb7e45ef2c7b94a533d7db8e3a61c374c817ee64736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220f7c42d679ff13810d84897a3cbbb7e45ef2c7b94a533d7db8e3a61c374c817ee64736f6c63430008180033", - "execute": { - "methodName": "initialize2", - "args": [] - }, - "implementation": "0xC4e64e6E949936a18269937FC1e18cb11E3db14D", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/EvidenceModule_Implementation.json b/contracts/deployments/arbitrumSepolia/EvidenceModule_Implementation.json deleted file mode 100644 index f4d8edd0b..000000000 --- a/contracts/deployments/arbitrumSepolia/EvidenceModule_Implementation.json +++ /dev/null @@ -1,352 +0,0 @@ -{ - "address": "0xC4e64e6E949936a18269937FC1e18cb11E3db14D", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_party", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "_evidence", - "type": "string" - } - ], - "name": "Evidence", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_evidence", - "type": "string" - } - ], - "name": "submitEvidence", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x945c6b6b6ad6d37482c3a8ebb542ae3dbd0337b2279388ffab424d6dacd78eea", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xC4e64e6E949936a18269937FC1e18cb11E3db14D", - "transactionIndex": 1, - "gasUsed": "576517", - "logsBloom": "0x00008000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x8bbf5d1c8f8eee29b8a19cc13bba4148cf03b0676bc7b699cfc9fff73ef5a66f", - "transactionHash": "0x945c6b6b6ad6d37482c3a8ebb542ae3dbd0337b2279388ffab424d6dacd78eea", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 139235174, - "transactionHash": "0x945c6b6b6ad6d37482c3a8ebb542ae3dbd0337b2279388ffab424d6dacd78eea", - "address": "0xC4e64e6E949936a18269937FC1e18cb11E3db14D", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 0, - "blockHash": "0x8bbf5d1c8f8eee29b8a19cc13bba4148cf03b0676bc7b699cfc9fff73ef5a66f" - } - ], - "blockNumber": 139235174, - "cumulativeGasUsed": "576517", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "acb39436d8539d1379a47e045a065e54", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_party\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_evidence\",\"type\":\"string\"}],\"name\":\"Evidence\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_evidence\",\"type\":\"string\"}],\"name\":\"submitEvidence\",\"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\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Evidence(uint256,address,string)\":{\"details\":\"To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations).\",\"params\":{\"_evidence\":\"Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\",\"_externalDisputeID\":\"Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right external dispute ID.\",\"_party\":\"The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initialize(address)\":{\"details\":\"Initializer.\",\"params\":{\"_governor\":\"The governor's address.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"submitEvidence(uint256,string)\":{\"details\":\"Submits evidence for a dispute.\",\"params\":{\"_evidence\":\"Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\",\"_externalDisputeID\":\"Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right evidence group ID.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"Evidence Module\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/evidence/EvidenceModule.sol\":\"EvidenceModule\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/arbitration/evidence/EvidenceModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"../interfaces/IArbitratorV2.sol\\\";\\nimport \\\"../interfaces/IEvidence.sol\\\";\\nimport \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/// @title Evidence Module\\ncontract EvidenceModule is IEvidence, Initializable, UUPSProxiable {\\n string public constant override version = \\\"0.8.0\\\";\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor of the contract.\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n function initialize(address _governor) external reinitializer(1) {\\n governor = _governor;\\n }\\n\\n function initialize2() external reinitializer(2) {\\n // NOP\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /**\\n * @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n /// @dev Submits evidence for a dispute.\\n /// @param _externalDisputeID Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right evidence group ID.\\n /// @param _evidence Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\\n function submitEvidence(uint256 _externalDisputeID, string calldata _evidence) external {\\n emit Evidence(_externalDisputeID, msg.sender, _evidence);\\n }\\n}\\n\",\"keccak256\":\"0xedf978718e5d349c5a39747e2c4da253a1d8b73588c4118b74b39c324ba471fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0xe841a4fe8ec109ce17dde4457bf1583c8b499109b05887c53a49a3207fc6e80b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xa4dc6b958197adead238de4246cd04e7389c3dc1b9f968acd10985f8fc5b74cf\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IEvidence.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title IEvidence\\ninterface IEvidence {\\n /// @dev To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations).\\n /// @param _externalDisputeID Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right external dispute ID.\\n /// @param _party The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party.\\n /// @param _evidence Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\\n event Evidence(uint256 indexed _externalDisputeID, address indexed _party, string _evidence);\\n}\\n\",\"keccak256\":\"0xa881a6604ffe43044edee5a789363e19b78af854092fe1e322d75a140150714c\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x560ea64115636ecd6b3596248817125551c038ce1648019fde3cbe02d9759a30\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa8bb02ed2b2fc165296226762299c2ee3328f2a0c6e90c6fe7029fa5b01d0b60\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516108ff6100fc6000396000818161024a01528181610273015261047001526108ff6000f3fe6080604052600436106100605760003560e01c80630c340a2414610065578063472abf68146100a25780634f1ef286146100b957806352d1902d146100cc57806354fd4d50146100ef578063a6a7f0eb1461012d578063c4d66de81461014d575b600080fd5b34801561007157600080fd5b50600054610085906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ae57600080fd5b506100b761016d565b005b6100b76100c736600461068e565b610236565b3480156100d857600080fd5b506100e1610463565b604051908152602001610099565b3480156100fb57600080fd5b50610120604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100999190610774565b34801561013957600080fd5b506100b76101483660046107a7565b6104c1565b34801561015957600080fd5b506100b7610168366004610823565b61050a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff16806101b75750805467ffffffffffffffff808416911610155b156101d45760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff8316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b61023f826105f4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806102bd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102b16000805160206108aa8339815191525490565b6001600160a01b031614155b156102db5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610335575060408051601f3d908101601f1916820190925261033291810190610845565b60015b61036257604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206108aa833981519152811461039357604051632a87526960e21b815260048101829052602401610359565b6000805160206108aa8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a281511561045e576000836001600160a01b0316836040516103fa919061085e565b600060405180830381855af49150503d8060008114610435576040519150601f19603f3d011682016040523d82523d6000602084013e61043a565b606091505b505090508061045c576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104ae5760405163703e46dd60e11b815260040160405180910390fd5b506000805160206108aa83398151915290565b336001600160a01b0316837f39935cf45244bc296a03d6aef1cf17779033ee27090ce9c68d432367ce10699684846040516104fd92919061087a565b60405180910390a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105545750805467ffffffffffffffff808416911610155b156105715760405162dc149f60e41b815260040160405180910390fd5b8054600160401b67ffffffffffffffff841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6000546001600160a01b031633146106595760405162461bcd60e51b815260206004820152602260248201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6044820152613c9760f11b6064820152608401610359565b50565b80356001600160a01b038116811461067357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156106a157600080fd5b6106aa8361065c565b9150602083013567ffffffffffffffff808211156106c757600080fd5b818501915085601f8301126106db57600080fd5b8135818111156106ed576106ed610678565b604051601f8201601f19908116603f0116810190838211818310171561071557610715610678565b8160405282815288602084870101111561072e57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b8381101561076b578181015183820152602001610753565b50506000910152565b6020815260008251806020840152610793816040850160208701610750565b601f01601f19169190910160400192915050565b6000806000604084860312156107bc57600080fd5b83359250602084013567ffffffffffffffff808211156107db57600080fd5b818601915086601f8301126107ef57600080fd5b8135818111156107fe57600080fd5b87602082850101111561081057600080fd5b6020830194508093505050509250925092565b60006020828403121561083557600080fd5b61083e8261065c565b9392505050565b60006020828403121561085757600080fd5b5051919050565b60008251610870818460208701610750565b9190910192915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220e8029341a85fe4ec5c46a752df03395b1ee6ff03774364e24047c608189c4ceb64736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100605760003560e01c80630c340a2414610065578063472abf68146100a25780634f1ef286146100b957806352d1902d146100cc57806354fd4d50146100ef578063a6a7f0eb1461012d578063c4d66de81461014d575b600080fd5b34801561007157600080fd5b50600054610085906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ae57600080fd5b506100b761016d565b005b6100b76100c736600461068e565b610236565b3480156100d857600080fd5b506100e1610463565b604051908152602001610099565b3480156100fb57600080fd5b50610120604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100999190610774565b34801561013957600080fd5b506100b76101483660046107a7565b6104c1565b34801561015957600080fd5b506100b7610168366004610823565b61050a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff16806101b75750805467ffffffffffffffff808416911610155b156101d45760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff8316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b61023f826105f4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806102bd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102b16000805160206108aa8339815191525490565b6001600160a01b031614155b156102db5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610335575060408051601f3d908101601f1916820190925261033291810190610845565b60015b61036257604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206108aa833981519152811461039357604051632a87526960e21b815260048101829052602401610359565b6000805160206108aa8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a281511561045e576000836001600160a01b0316836040516103fa919061085e565b600060405180830381855af49150503d8060008114610435576040519150601f19603f3d011682016040523d82523d6000602084013e61043a565b606091505b505090508061045c576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104ae5760405163703e46dd60e11b815260040160405180910390fd5b506000805160206108aa83398151915290565b336001600160a01b0316837f39935cf45244bc296a03d6aef1cf17779033ee27090ce9c68d432367ce10699684846040516104fd92919061087a565b60405180910390a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105545750805467ffffffffffffffff808416911610155b156105715760405162dc149f60e41b815260040160405180910390fd5b8054600160401b67ffffffffffffffff841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6000546001600160a01b031633146106595760405162461bcd60e51b815260206004820152602260248201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6044820152613c9760f11b6064820152608401610359565b50565b80356001600160a01b038116811461067357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156106a157600080fd5b6106aa8361065c565b9150602083013567ffffffffffffffff808211156106c757600080fd5b818501915085601f8301126106db57600080fd5b8135818111156106ed576106ed610678565b604051601f8201601f19908116603f0116810190838211818310171561071557610715610678565b8160405282815288602084870101111561072e57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b8381101561076b578181015183820152602001610753565b50506000910152565b6020815260008251806020840152610793816040850160208701610750565b601f01601f19169190910160400192915050565b6000806000604084860312156107bc57600080fd5b83359250602084013567ffffffffffffffff808211156107db57600080fd5b818601915086601f8301126107ef57600080fd5b8135818111156107fe57600080fd5b87602082850101111561081057600080fd5b6020830194508093505050509250925092565b60006020828403121561083557600080fd5b61083e8261065c565b9392505050565b60006020828403121561085757600080fd5b5051919050565b60008251610870818460208701610750565b9190910192915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220e8029341a85fe4ec5c46a752df03395b1ee6ff03774364e24047c608189c4ceb64736f6c63430008180033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "Evidence(uint256,address,string)": { - "details": "To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations).", - "params": { - "_evidence": "Stringified evidence object, example: '{\"name\" : \"Justification\", \"description\" : \"Description\", \"fileURI\" : \"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\"}'.", - "_externalDisputeID": "Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right external dispute ID.", - "_party": "The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "initialize(address)": { - "details": "Initializer.", - "params": { - "_governor": "The governor's address." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "submitEvidence(uint256,string)": { - "details": "Submits evidence for a dispute.", - "params": { - "_evidence": "Stringified evidence object, example: '{\"name\" : \"Justification\", \"description\" : \"Description\", \"fileURI\" : \"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\"}'.", - "_externalDisputeID": "Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right evidence group ID." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "Evidence Module", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 21480, - "contract": "src/arbitration/evidence/EvidenceModule.sol:EvidenceModule", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/EvidenceModule_Proxy.json b/contracts/deployments/arbitrumSepolia/EvidenceModule_Proxy.json deleted file mode 100644 index 19d03ac36..000000000 --- a/contracts/deployments/arbitrumSepolia/EvidenceModule_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x9b68f5d8657d7a2fcaab3327684238f02cf41afac6c673ed030a09d8a4a84f7c", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397", - "transactionIndex": 1, - "gasUsed": "201064", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000004000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x756b1e7c8af15e913d51c92bd1b0499888f6a7843f512450d46a0a46220acfae", - "transactionHash": "0x9b68f5d8657d7a2fcaab3327684238f02cf41afac6c673ed030a09d8a4a84f7c", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 95247733, - "transactionHash": "0x9b68f5d8657d7a2fcaab3327684238f02cf41afac6c673ed030a09d8a4a84f7c", - "address": "0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x756b1e7c8af15e913d51c92bd1b0499888f6a7843f512450d46a0a46220acfae" - } - ], - "blockNumber": 95247733, - "cumulativeGasUsed": "201064", - "status": 1, - "byzantium": true - }, - "args": [ - "0x63CF56e1c99E65E4a9eCDCC805F4735E016F2dc8", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"EvidenceModuleProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206156b4d247e9775a938a1d5238ff9222ccea78aa0d46323980701cdafc6c1e2d64736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206156b4d247e9775a938a1d5238ff9222ccea78aa0d46323980701cdafc6c1e2d64736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/KlerosCore.json b/contracts/deployments/arbitrumSepolia/KlerosCore.json deleted file mode 100644 index 412ddd1cd..000000000 --- a/contracts/deployments/arbitrumSepolia/KlerosCore.json +++ /dev/null @@ -1,2056 +0,0 @@ -{ - "address": "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "AppealPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "CannotDisableClassicDK", - "type": "error" - }, - { - "inputs": [], - "name": "CommitPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitNotSupportedByCourt", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitOnly", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "DisputePeriodIsFinal", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeStillDrawing", - "type": "error" - }, - { - "inputs": [], - "name": "EvidenceNotPassedAndNotAppeal", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GuardianOrGovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDisputKitParent", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "MinStakeLowerThanParentCourt", - "type": "error" - }, - { - "inputs": [], - "name": "MustSupportDisputeKitClassic", - "type": "error" - }, - { - "inputs": [], - "name": "NotEvidencePeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotExecutionPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "SortitionModuleOnly", - "type": "error" - }, - { - "inputs": [], - "name": "StakingInTooManyCourts", - "type": "error" - }, - { - "inputs": [], - "name": "StakingLessThanCourtMinStake", - "type": "error" - }, - { - "inputs": [], - "name": "StakingNotPossibleInThisCourt", - "type": "error" - }, - { - "inputs": [], - "name": "StakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "StakingZeroWhenNoStake", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnstakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "inputs": [], - "name": "UnsupportedDisputeKit", - "type": "error" - }, - { - "inputs": [], - "name": "VotePeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "WhenNotPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WhenPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WrongDisputeKitIndex", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "DisputeKitCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "DisputeKitEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_fromDisputeKitID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_toDisputeKitID", - "type": "uint256" - } - ], - "name": "DisputeKitJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "Draw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreBase.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "addNewDisputeKit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_guardian", - "type": "address" - } - ], - "name": "changeGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - } - ], - "name": "changeJurorProsecutionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputeKits", - "outputs": [ - { - "internalType": "contract IDisputeKit", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreBase.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "lastPeriodChange", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "uint256", - "name": "nbDrawnJurors", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256[]", - "name": "_disputeKitIDs", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "enableDisputeKits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputeKitsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getPnkAtStakePerJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "disputeKitID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkAtStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVotes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "repartitions", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkPenalties", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "drawnJurors", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumPnkRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "drawIterations", - "type": "uint256" - } - ], - "internalType": "struct KlerosCoreBase.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "guardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - }, - { - "internalType": "contract IDisputeKit", - "name": "_disputeKit", - "type": "address" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModuleAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "isDisputeKitJumping", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - } - ], - "name": "isSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorProsecutionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "passPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "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": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStakeBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "contract ISortitionModule", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0xf811a5f75eb3434b36c389d7ab5f9736ed78bf7f17970ad91e07934733076c7d", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "transactionIndex": 2, - "gasUsed": "611101", - "logsBloom": "0x00000000000000000000000020000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000040000000000000000001000000000000000000000000010040000000000000000008000000000020000000000000010000800402000000000000008000000000000000000000001000020000800000000000000000000000080000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000020000000000000000000000000000000004000000000000000060000000001001000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1872bcfb64e06c7b455f793d93e59e29d42887bccb2cf83b483a2a79bdb13487", - "transactionHash": "0xf811a5f75eb3434b36c389d7ab5f9736ed78bf7f17970ad91e07934733076c7d", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 95250346, - "transactionHash": "0xf811a5f75eb3434b36c389d7ab5f9736ed78bf7f17970ad91e07934733076c7d", - "address": "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "topics": [ - "0x44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb2", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000c38f115d001d3b5bbec5e8d44f78c7b61a27d94" - ], - "data": "0x", - "logIndex": 3, - "blockHash": "0x1872bcfb64e06c7b455f793d93e59e29d42887bccb2cf83b483a2a79bdb13487" - }, - { - "transactionIndex": 2, - "blockNumber": 95250346, - "transactionHash": "0xf811a5f75eb3434b36c389d7ab5f9736ed78bf7f17970ad91e07934733076c7d", - "address": "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "topics": [ - "0x3475f0ed7216dd7d453db663a1c3024e4f36cc925521d54edb9d13e022cbee3d", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 4, - "blockHash": "0x1872bcfb64e06c7b455f793d93e59e29d42887bccb2cf83b483a2a79bdb13487" - }, - { - "transactionIndex": 2, - "blockNumber": 95250346, - "transactionHash": "0xf811a5f75eb3434b36c389d7ab5f9736ed78bf7f17970ad91e07934733076c7d", - "address": "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "topics": [ - "0xb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc79", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001" - ], - "data": "0x", - "logIndex": 5, - "blockHash": "0x1872bcfb64e06c7b455f793d93e59e29d42887bccb2cf83b483a2a79bdb13487" - }, - { - "transactionIndex": 2, - "blockNumber": 95250346, - "transactionHash": "0xf811a5f75eb3434b36c389d7ab5f9736ed78bf7f17970ad91e07934733076c7d", - "address": "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 6, - "blockHash": "0x1872bcfb64e06c7b455f793d93e59e29d42887bccb2cf83b483a2a79bdb13487" - } - ], - "blockNumber": 95250346, - "cumulativeGasUsed": "696476", - "status": 1, - "byzantium": true - }, - "args": [ - "0x0766e4B8c4a3aAC9371a5A9D6119E8125Adcfd55", - "0x7b4f3cc5000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c5900000000000000000000000034b944d42cacfc8266955d07a80181d2054aa22500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c38f115d001d3b5bbec5e8d44f78c7b61a27d94000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000200000000000000000000000000baa5068f0bd1417046250a3ede2b1f27e31383bd00000000000000000000000000000000000000000000000000000000000000010500000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 5, - "solcInputHash": "55ee2edfcfbef3e6f4c10ec53a4be5f5", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"KlerosCoreProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122013d7994215e0250a3caf5a61db41d7e3f7d36bd4d6c352ddb4eb5213b4783ea264736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122013d7994215e0250a3caf5a61db41d7e3f7d36bd4d6c352ddb4eb5213b4783ea264736f6c634300081c0033", - "execute": { - "methodName": "reinitialize", - "args": [ - "0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511" - ] - }, - "implementation": "0x02F607722749CECd32db07AA0b0755281FE9D13c", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/KlerosCoreSnapshotProxy.json b/contracts/deployments/arbitrumSepolia/KlerosCoreSnapshotProxy.json deleted file mode 100644 index d24c1bea4..000000000 --- a/contracts/deployments/arbitrumSepolia/KlerosCoreSnapshotProxy.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "address": "0xd74e61A4dB9C6c3F2C97b62a319aE194f616858C", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract IKlerosCore", - "name": "_core", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IKlerosCore", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract IKlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x951a0309da4f71c199c36e0004ba7a67e1c68f4135942ee062040b6bf4edcf2f", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xd74e61A4dB9C6c3F2C97b62a319aE194f616858C", - "transactionIndex": 1, - "gasUsed": "363319", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa62b5ceb98b8de3cd5d3f142c7384221d1d823adb28dcc8c9ae7945f22542274", - "transactionHash": "0x951a0309da4f71c199c36e0004ba7a67e1c68f4135942ee062040b6bf4edcf2f", - "logs": [], - "blockNumber": 121346526, - "cumulativeGasUsed": "363319", - "status": 1, - "byzantium": true - }, - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479" - ], - "numDeployments": 1, - "solcInputHash": "ede3f7f4426109631936df3b8acee8f2", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract IKlerosCore\",\"name\":\"_core\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalStaked\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IKlerosCore\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract IKlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"balanceOf(address)\":{\"details\":\"Returns the amount of PNK staked in KlerosV2 for a particular address. Note: Proxy doesn't need to differentiate between courts so we pass 0 as courtID.\",\"params\":{\"_account\":\"The address to query.\"},\"returns\":{\"totalStaked\":\"Total amount staked in V2 by the address.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_core\":\"KlerosCore to read the balance from.\",\"_governor\":\"The governor of the contract.\"}}},\"title\":\"KlerosCoreSnapshotProxy Proxy contract for V2 that exposes staked PNK with balanceOf() function for Snapshot voting.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/view/KlerosCoreSnapshotProxy.sol\":\"KlerosCoreSnapshotProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake,\\n bool _alreadyTransferred\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(address _account, uint256 _relativeAmount) external;\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n}\\n\",\"keccak256\":\"0x18a4ff126bb51e7b5b0e3fbff7cf0dbbcfff7195ad79307e69cdbc9226e63502\",\"license\":\"MIT\"},\"src/arbitration/view/KlerosCoreSnapshotProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport {ISortitionModule} from \\\"../interfaces/ISortitionModule.sol\\\";\\n\\ninterface IKlerosCore {\\n function sortitionModule() external view returns (ISortitionModule);\\n}\\n\\n/// @title KlerosCoreSnapshotProxy\\n/// Proxy contract for V2 that exposes staked PNK with balanceOf() function for Snapshot voting.\\ncontract KlerosCoreSnapshotProxy {\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n IKlerosCore public core;\\n address public governor;\\n string public constant name = \\\"Staked Pinakion\\\";\\n string public constant symbol = \\\"stPNK\\\";\\n uint8 public constant decimals = 18;\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _governor The governor of the contract.\\n /// @param _core KlerosCore to read the balance from.\\n constructor(address _governor, IKlerosCore _core) {\\n governor = _governor;\\n core = _core;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(IKlerosCore _core) external onlyByGovernor {\\n core = _core;\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Returns the amount of PNK staked in KlerosV2 for a particular address.\\n /// Note: Proxy doesn't need to differentiate between courts so we pass 0 as courtID.\\n /// @param _account The address to query.\\n /// @return totalStaked Total amount staked in V2 by the address.\\n function balanceOf(address _account) external view returns (uint256 totalStaked) {\\n (totalStaked, , , ) = core.sortitionModule().getJurorBalance(_account, 0);\\n }\\n}\\n\",\"keccak256\":\"0xf9516838d21bc8b4d8776d8d8b0b17d46ebb3d0940c055c09944f7f35adfd99d\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x5bbda7c304b3681b90feae33be694d04dc129edd60e1d07cb593b895fdc9cd4e\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161053338038061053383398101604081905261002f91610078565b600180546001600160a01b039384166001600160a01b031991821617909155600080549290931691161790556100b2565b6001600160a01b038116811461007557600080fd5b50565b6000806040838503121561008b57600080fd5b825161009681610060565b60208401519092506100a781610060565b809150509250929050565b610472806100c16000396000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c806306fdde031461007d5780630c340a24146100c1578063313ce567146100ec57806370a08231146101065780638e4264601461012757806395d89b411461013c578063e4c0aaf414610160578063f2f4eb2614610173575b600080fd5b6100ab6040518060400160405280600f81526020016e29ba30b5b2b2102834b730b5b4b7b760891b81525081565b6040516100b8919061031c565b60405180910390f35b6001546100d4906001600160a01b031681565b6040516001600160a01b0390911681526020016100b8565b6100f4601281565b60405160ff90911681526020016100b8565b610119610114366004610383565b610186565b6040519081526020016100b8565b61013a610135366004610383565b61027b565b005b6100ab604051806040016040528060058152602001647374504e4b60d81b81525081565b61013a61016e366004610383565b6102d0565b6000546100d4906001600160a01b031681565b60008060009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fe91906103a7565b604051631a383be960e31b81526001600160a01b03848116600483015260006024830152919091169063d1c1df4890604401608060405180830381865afa15801561024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027191906103c4565b5091949350505050565b6001546001600160a01b031633146102ae5760405162461bcd60e51b81526004016102a5906103fa565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146102fa5760405162461bcd60e51b81526004016102a5906103fa565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006020808352835180602085015260005b8181101561034a5785810183015185820160400152820161032e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461038057600080fd5b50565b60006020828403121561039557600080fd5b81356103a08161036b565b9392505050565b6000602082840312156103b957600080fd5b81516103a08161036b565b600080600080608085870312156103da57600080fd5b505082516020840151604085015160609095015191969095509092509050565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b60608201526080019056fea2646970667358221220ae7b8da51562210a09a90e77fc37c7a9669fa0ff5f919ec51b43ac365aace78464736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c806306fdde031461007d5780630c340a24146100c1578063313ce567146100ec57806370a08231146101065780638e4264601461012757806395d89b411461013c578063e4c0aaf414610160578063f2f4eb2614610173575b600080fd5b6100ab6040518060400160405280600f81526020016e29ba30b5b2b2102834b730b5b4b7b760891b81525081565b6040516100b8919061031c565b60405180910390f35b6001546100d4906001600160a01b031681565b6040516001600160a01b0390911681526020016100b8565b6100f4601281565b60405160ff90911681526020016100b8565b610119610114366004610383565b610186565b6040519081526020016100b8565b61013a610135366004610383565b61027b565b005b6100ab604051806040016040528060058152602001647374504e4b60d81b81525081565b61013a61016e366004610383565b6102d0565b6000546100d4906001600160a01b031681565b60008060009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fe91906103a7565b604051631a383be960e31b81526001600160a01b03848116600483015260006024830152919091169063d1c1df4890604401608060405180830381865afa15801561024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027191906103c4565b5091949350505050565b6001546001600160a01b031633146102ae5760405162461bcd60e51b81526004016102a5906103fa565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146102fa5760405162461bcd60e51b81526004016102a5906103fa565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006020808352835180602085015260005b8181101561034a5785810183015185820160400152820161032e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461038057600080fd5b50565b60006020828403121561039557600080fd5b81356103a08161036b565b9392505050565b6000602082840312156103b957600080fd5b81516103a08161036b565b600080600080608085870312156103da57600080fd5b505082516020840151604085015160609095015191969095509092509050565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b60608201526080019056fea2646970667358221220ae7b8da51562210a09a90e77fc37c7a9669fa0ff5f919ec51b43ac365aace78464736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": { - "balanceOf(address)": { - "details": "Returns the amount of PNK staked in KlerosV2 for a particular address. Note: Proxy doesn't need to differentiate between courts so we pass 0 as courtID.", - "params": { - "_account": "The address to query." - }, - "returns": { - "totalStaked": "Total amount staked in V2 by the address." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "details": "Constructor", - "params": { - "_core": "KlerosCore to read the balance from.", - "_governor": "The governor of the contract." - } - } - }, - "title": "KlerosCoreSnapshotProxy Proxy contract for V2 that exposes staked PNK with balanceOf() function for Snapshot voting.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 216, - "contract": "src/arbitration/view/KlerosCoreSnapshotProxy.sol:KlerosCoreSnapshotProxy", - "label": "core", - "offset": 0, - "slot": "0", - "type": "t_contract(IKlerosCore)212" - }, - { - "astId": 218, - "contract": "src/arbitration/view/KlerosCoreSnapshotProxy.sol:KlerosCoreSnapshotProxy", - "label": "governor", - "offset": 0, - "slot": "1", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_contract(IKlerosCore)212": { - "encoding": "inplace", - "label": "contract IKlerosCore", - "numberOfBytes": "20" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/KlerosCore_Implementation.json b/contracts/deployments/arbitrumSepolia/KlerosCore_Implementation.json deleted file mode 100644 index 9f84f18ab..000000000 --- a/contracts/deployments/arbitrumSepolia/KlerosCore_Implementation.json +++ /dev/null @@ -1,2849 +0,0 @@ -{ - "address": "0x02F607722749CECd32db07AA0b0755281FE9D13c", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "AppealPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "CannotDisableClassicDK", - "type": "error" - }, - { - "inputs": [], - "name": "CommitPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitNotSupportedByCourt", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitOnly", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "DisputePeriodIsFinal", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeStillDrawing", - "type": "error" - }, - { - "inputs": [], - "name": "EvidenceNotPassedAndNotAppeal", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GuardianOrGovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDisputKitParent", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "MinStakeLowerThanParentCourt", - "type": "error" - }, - { - "inputs": [], - "name": "MustSupportDisputeKitClassic", - "type": "error" - }, - { - "inputs": [], - "name": "NotEvidencePeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotExecutionPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "SortitionModuleOnly", - "type": "error" - }, - { - "inputs": [], - "name": "StakingInTooManyCourts", - "type": "error" - }, - { - "inputs": [], - "name": "StakingLessThanCourtMinStake", - "type": "error" - }, - { - "inputs": [], - "name": "StakingNotPossibleInThisCourt", - "type": "error" - }, - { - "inputs": [], - "name": "StakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "StakingZeroWhenNoStake", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnstakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "inputs": [], - "name": "UnsupportedDisputeKit", - "type": "error" - }, - { - "inputs": [], - "name": "VotePeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "WhenNotPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WhenPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WrongDisputeKitIndex", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "DisputeKitCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "DisputeKitEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_fromDisputeKitID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_toDisputeKitID", - "type": "uint256" - } - ], - "name": "DisputeKitJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "Draw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreBase.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "addNewDisputeKit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_guardian", - "type": "address" - } - ], - "name": "changeGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - } - ], - "name": "changeJurorProsecutionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputeKits", - "outputs": [ - { - "internalType": "contract IDisputeKit", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreBase.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "lastPeriodChange", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "uint256", - "name": "nbDrawnJurors", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256[]", - "name": "_disputeKitIDs", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "enableDisputeKits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputeKitsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getPnkAtStakePerJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "disputeKitID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkAtStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVotes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "repartitions", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkPenalties", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "drawnJurors", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumPnkRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "drawIterations", - "type": "uint256" - } - ], - "internalType": "struct KlerosCoreBase.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "guardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - }, - { - "internalType": "contract IDisputeKit", - "name": "_disputeKit", - "type": "address" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModuleAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "isDisputeKitJumping", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - } - ], - "name": "isSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorProsecutionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "passPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "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": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStakeBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "contract ISortitionModule", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xdaddd52424ba1490e09360d58a1212288229c3121e70ee3a6f22135d07afbdd1", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x02F607722749CECd32db07AA0b0755281FE9D13c", - "transactionIndex": 2, - "gasUsed": "5292671", - "logsBloom": "0x00000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa55a3bec630c3202c7010b20dc588378dfd32656a84734d9964fe9a3f5aa951a", - "transactionHash": "0xdaddd52424ba1490e09360d58a1212288229c3121e70ee3a6f22135d07afbdd1", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 179580745, - "transactionHash": "0xdaddd52424ba1490e09360d58a1212288229c3121e70ee3a6f22135d07afbdd1", - "address": "0x02F607722749CECd32db07AA0b0755281FE9D13c", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 1, - "blockHash": "0xa55a3bec630c3202c7010b20dc588378dfd32656a84734d9964fe9a3f5aa951a" - } - ], - "blockNumber": 179580745, - "cumulativeGasUsed": "5354547", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 5, - "solcInputHash": "726fe29d8d9c48c46571792cebc6e314", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AppealFeesNotEnough\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AppealPeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ArbitrationFeesNotEnough\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotDisableClassicDK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitPeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeKitNotSupportedByCourt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeKitOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeNotAppealable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputePeriodIsFinal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeStillDrawing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EvidenceNotPassedAndNotAppeal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GovernorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GuardianOrGovernorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDisputKitParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidForkingCourtAsParent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinStakeLowerThanParentCourt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustSupportDisputeKitClassic\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEvidencePeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotExecutionPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RulingAlreadyExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SortitionModuleOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingInTooManyCourts\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingLessThanCourtMinStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingNotPossibleInThisCourt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingZeroWhenNoStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnstakingTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsuccessfulCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedDisputeKit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VotePeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WhenNotPausedOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WhenPausedOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongDisputeKitIndex\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"AcceptedFeeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"AppealDecision\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"AppealPossible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_supportedDisputeKits\",\"type\":\"uint256[]\"}],\"name\":\"CourtCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_fromCourtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_toCourtID\",\"type\":\"uint96\"}],\"name\":\"CourtJump\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"CourtModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeKitID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IDisputeKit\",\"name\":\"_disputeKitAddress\",\"type\":\"address\"}],\"name\":\"DisputeKitCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeKitID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_enable\",\"type\":\"bool\"}],\"name\":\"DisputeKitEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_fromDisputeKitID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_toDisputeKitID\",\"type\":\"uint256\"}],\"name\":\"DisputeKitJump\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"Draw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_pnkAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"LeftoverRewardSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"NewCurrencyRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum KlerosCoreBase.Period\",\"name\":\"_period\",\"type\":\"uint8\"}],\"name\":\"NewPeriod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_degreeOfCoherency\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_pnkAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_feeAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"TokenAndETHShift\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IDisputeKit\",\"name\":\"_disputeKitAddress\",\"type\":\"address\"}],\"name\":\"addNewDisputeKit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"appeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"appealCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"appealPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"changeAcceptedFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"changeCourtParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"changeCurrencyRates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"}],\"name\":\"changeGuardian\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jurorProsecutionModule\",\"type\":\"address\"}],\"name\":\"changeJurorProsecutionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_pinakion\",\"type\":\"address\"}],\"name\":\"changePinakion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISortitionModule\",\"name\":\"_sortitionModule\",\"type\":\"address\"}],\"name\":\"changeSortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountInEth\",\"type\":\"uint256\"}],\"name\":\"convertEthToTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"courts\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"internalType\":\"bytes\",\"name\":\"_sortitionExtraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256[]\",\"name\":\"_supportedDisputeKits\",\"type\":\"uint256[]\"}],\"name\":\"createCourt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"currencyRates\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"feePaymentAccepted\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"rateInEth\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"rateDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputeKits\",\"outputs\":[{\"internalType\":\"contract IDisputeKit\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"courtID\",\"type\":\"uint96\"},{\"internalType\":\"contract IArbitrableV2\",\"name\":\"arbitrated\",\"type\":\"address\"},{\"internalType\":\"enum KlerosCoreBase.Period\",\"name\":\"period\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"ruled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"lastPeriodChange\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_iterations\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nbDrawnJurors\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256[]\",\"name\":\"_disputeKitIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"_enable\",\"type\":\"bool\"}],\"name\":\"enableDisputeKits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_iterations\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"executeRuling\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDisputeKitsLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"getPnkAtStakePerJuror\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"disputeKitID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pnkAtStakePerJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalFeesForJurors\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"repartitions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pnkPenalties\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"drawnJurors\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"sumFeeRewardPaid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sumPnkRewardPaid\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"drawIterations\",\"type\":\"uint256\"}],\"internalType\":\"struct KlerosCoreBase.Round\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"getTimesPerPeriod\",\"outputs\":[{\"internalType\":\"uint256[4]\",\"name\":\"timesPerPeriod\",\"type\":\"uint256[4]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_pinakion\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_jurorProsecutionModule\",\"type\":\"address\"},{\"internalType\":\"contract IDisputeKit\",\"name\":\"_disputeKit\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256[4]\",\"name\":\"_courtParameters\",\"type\":\"uint256[4]\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"internalType\":\"bytes\",\"name\":\"_sortitionExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract ISortitionModule\",\"name\":\"_sortitionModuleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"isDisputeKitJumping\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_disputeKitID\",\"type\":\"uint256\"}],\"name\":\"isSupported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jurorProsecutionModule\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"passPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"pinakion\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"setStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"setStakeBySortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sortitionModule\",\"outputs\":[{\"internalType\":\"contract ISortitionModule\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferBySortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"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\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"AcceptedFeeToken(address,bool)\":{\"details\":\"To be emitted when an ERC20 token is added or removed as a method to pay fees.\",\"params\":{\"_accepted\":\"Whether the token is accepted or not.\",\"_token\":\"The ERC20 token.\"}},\"DisputeCreation(uint256,address)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_arbitrable\":\"The contract which created the dispute.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"NewCurrencyRate(address,uint64,uint8)\":{\"details\":\"To be emitted when the fee for a particular ERC20 token is updated.\",\"params\":{\"_feeToken\":\"The ERC20 token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrable\":\"The arbitrable receiving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"addNewDisputeKit(address)\":{\"details\":\"Add a new supported dispute kit module to the court.\",\"params\":{\"_disputeKitAddress\":\"The address of the dispute kit contract.\"}},\"appeal(uint256,uint256,bytes)\":{\"details\":\"Appeals the ruling of a specified dispute. Note: Access restricted to the Dispute Kit for this `disputeID`.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_extraData\":\"Extradata for the dispute. Can be required during court jump.\",\"_numberOfChoices\":\"Number of choices for the dispute. Can be required during court jump.\"}},\"appealCost(uint256)\":{\"details\":\"Gets the cost of appealing a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"cost\":\"The appeal cost.\"}},\"appealPeriod(uint256)\":{\"details\":\"Gets the start and the end of a specified dispute's current appeal period.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"end\":\"The end of the appeal period.\",\"start\":\"The start of the appeal period.\"}},\"arbitrationCost(bytes)\":{\"details\":\"Compute the cost of arbitration denominated in ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\"},\"returns\":{\"cost\":\"The arbitration cost in ETH.\"}},\"arbitrationCost(bytes,address)\":{\"details\":\"Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeToken\":\"The ERC20 token used to pay fees.\"},\"returns\":{\"cost\":\"The arbitration cost in `_feeToken`.\"}},\"changeAcceptedFeeTokens(address,bool)\":{\"details\":\"Changes the supported fee tokens.\",\"params\":{\"_accepted\":\"Whether the token is supported or not as a method of fee payment.\",\"_feeToken\":\"The fee token.\"}},\"changeCurrencyRates(address,uint64,uint8)\":{\"details\":\"Changes the currency rate of a fee token.\",\"params\":{\"_feeToken\":\"The fee token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"changeGuardian(address)\":{\"details\":\"Changes the `guardian` storage variable.\",\"params\":{\"_guardian\":\"The new value for the `guardian` storage variable.\"}},\"changeJurorProsecutionModule(address)\":{\"details\":\"Changes the `jurorProsecutionModule` storage variable.\",\"params\":{\"_jurorProsecutionModule\":\"The new value for the `jurorProsecutionModule` storage variable.\"}},\"changePinakion(address)\":{\"details\":\"Changes the `pinakion` storage variable.\",\"params\":{\"_pinakion\":\"The new value for the `pinakion` storage variable.\"}},\"changeSortitionModule(address)\":{\"details\":\"Changes the `_sortitionModule` storage variable. Note that the new module should be initialized for all courts.\",\"params\":{\"_sortitionModule\":\"The new value for the `sortitionModule` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createCourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],bytes,uint256[])\":{\"details\":\"Creates a court under a specified parent court.\",\"params\":{\"_alpha\":\"The `alpha` property value of the court.\",\"_feeForJuror\":\"The `feeForJuror` property value of the court.\",\"_hiddenVotes\":\"The `hiddenVotes` property value of the court.\",\"_jurorsForCourtJump\":\"The `jurorsForCourtJump` property value of the court.\",\"_minStake\":\"The `minStake` property value of the court.\",\"_parent\":\"The `parent` property value of the court.\",\"_sortitionExtraData\":\"Extra data for sortition module.\",\"_supportedDisputeKits\":\"Indexes of dispute kits that this court will support.\",\"_timesPerPeriod\":\"The `timesPerPeriod` property value of the court.\"}},\"createDispute(uint256,bytes)\":{\"details\":\"Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"createDispute(uint256,bytes,address,uint256)\":{\"details\":\"Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeAmount\":\"Amount of the ERC20 token used to pay fees.\",\"_feeToken\":\"The ERC20 token used to pay fees.\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws jurors for the dispute. Can be called in parts.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_iterations\":\"The number of iterations to run.\"},\"returns\":{\"nbDrawnJurors\":\"The total number of jurors drawn in the round.\"}},\"enableDisputeKits(uint96,uint256[],bool)\":{\"details\":\"Adds/removes court's support for specified dispute kits.\",\"params\":{\"_courtID\":\"The ID of the court.\",\"_disputeKitIDs\":\"The IDs of dispute kits which support should be added/removed.\",\"_enable\":\"Whether add or remove the dispute kits from the court.\"}},\"execute(uint256,uint256,uint256)\":{\"details\":\"Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts. Note: Reward distributions are forbidden during pause.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_iterations\":\"The number of iterations to run.\",\"_round\":\"The appeal round.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"executeRuling(uint256)\":{\"details\":\"Executes a specified dispute's ruling.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Gets the number of rounds for a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"_0\":\"The number of rounds.\"}},\"getNumberOfVotes(uint256)\":{\"details\":\"Gets the number of votes permitted for the specified dispute in the latest round.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"getPnkAtStakePerJuror(uint256,uint256)\":{\"details\":\"Gets the PNK at stake per juror for a specified dispute and round.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_round\":\"The round to get the info for.\"},\"returns\":{\"_0\":\"pnkAtStakePerJuror The PNK at stake per juror.\"}},\"getRoundInfo(uint256,uint256)\":{\"details\":\"Gets the round info for a specified dispute and round.This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_round\":\"The round to get the info for.\"},\"returns\":{\"_0\":\"round The round info.\"}},\"getTimesPerPeriod(uint96)\":{\"details\":\"Gets the timesPerPeriod array for a given court.\",\"params\":{\"_courtID\":\"The ID of the court to get the times from.\"},\"returns\":{\"timesPerPeriod\":\"The timesPerPeriod array for the given court.\"}},\"initialize(address,address,address,address,address,bool,uint256[4],uint256[4],bytes,address,address)\":{\"details\":\"Initializer (constructor equivalent for upgradable contracts).\",\"params\":{\"_courtParameters\":\"Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\",\"_disputeKit\":\"The address of the default dispute kit.\",\"_governor\":\"The governor's address.\",\"_guardian\":\"The guardian's address.\",\"_hiddenVotes\":\"The `hiddenVotes` property value of the general court.\",\"_jurorProsecutionModule\":\"The address of the juror prosecution module.\",\"_pinakion\":\"The address of the token contract.\",\"_sortitionExtraData\":\"The extra data for sortition module.\",\"_sortitionModuleAddress\":\"The sortition module responsible for sortition of the jurors.\",\"_timesPerPeriod\":\"The `timesPerPeriod` property value of the general court.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isDisputeKitJumping(uint256)\":{\"details\":\"Returns true if the dispute kit will be switched to a parent DK.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"_0\":\"Whether DK will be switched or not.\"}},\"isSupported(uint96,uint256)\":{\"details\":\"Checks if a given dispute kit is supported by a given court.\",\"params\":{\"_courtID\":\"The ID of the court to check the support for.\",\"_disputeKitID\":\"The ID of the dispute kit to check the support for.\"},\"returns\":{\"_0\":\"Whether the dispute kit is supported or not.\"}},\"passPeriod(uint256)\":{\"details\":\"Passes the period of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"pause()\":{\"details\":\"Pause staking and reward execution. Can only be done by guardian or governor.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setStake(uint96,uint256)\":{\"details\":\"Sets the caller's stake in a court.\",\"params\":{\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake. Note that the existing delayed stake will be nullified as non-relevant.\"}},\"setStakeBySortitionModule(address,uint96,uint256)\":{\"details\":\"Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\",\"params\":{\"_account\":\"The account whose stake is being set.\",\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake.\"}},\"transferBySortitionModule(address,uint256)\":{\"details\":\"Transfers PNK to the juror by SortitionModule.\",\"params\":{\"_account\":\"The account of the juror whose PNK to transfer.\",\"_amount\":\"The amount to transfer.\"}},\"unpause()\":{\"details\":\"Unpause staking and reward execution. Can only be done by governor.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"KlerosCore Core arbitrator contract for Kleros v2. Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/KlerosCore.sol\":\"KlerosCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615d166100fc600039600081816119be015281816119e70152611bdc0152615d166000f3fe6080604052600436106102d45760003560e01c80637934c0be1161017b578063c3569902116100d7578063e4c0aaf411610085578063e4c0aaf4146109a7578063f6506db4146109c7578063f7434ea9146109e7578063f7e7d1fd14610a07578063fbf405b014610a27578063fc6f8f1614610a47578063fe524c3914610a6757600080fd5b8063c3569902146108df578063c71f4253146108f2578063cf0c38f814610912578063d07368bd14610932578063d2b8035a14610952578063d4d1d76a14610972578063d98493f61461098757600080fd5b80638bb04875116101345780638bb04875146107f7578063a072b86c14610817578063acdbf51d14610837578063afe15cfb14610857578063b00496371461088c578063c13517e1146108ac578063c258bb19146108bf57600080fd5b80637934c0be1461073557806382d02237146107555780638456cb591461077557806386541b241461078a57806386cdecef146107aa5780638a9bb02a146107ca57600080fd5b80632e1daf2f1161023557806352d1902d116101e357806352d1902d1461063657806354fd4d501461064b578063564a565d1461068a57806359ec827e146106bb5780635c975abb146106db578063751accd0146106f55780637717a6e81461071557600080fd5b80632e1daf2f146105615780632fcb4f04146105815780633cfd1184146105a15780633f4ba83a146105ce57806342c37fa3146105e3578063452a9320146106035780634f1ef2861461062357600080fd5b80631860592b116102925780631860592b1461040057806319b815291461042e5780631c3db16d1461045e5780631f5a0dd21461049b5780632c053739146104fc5780632d29a47b1461051c5780632d68efc91461053c57600080fd5b8062f5822c146102d95780630219da79146102fb5780630761c14d146103735780630b7414bc146103935780630c340a24146103b3578063115d5376146103e0575b600080fd5b3480156102e557600080fd5b506102f96102f4366004614e43565b610a87565b005b34801561030757600080fd5b50610346610316366004614e43565b60086020526000908152604090205460ff808216916001600160401b0361010082041691600160481b9091041683565b6040805193151584526001600160401b03909216602084015260ff16908201526060015b60405180910390f35b34801561037f57600080fd5b506102f961038e366004614e7e565b610ad4565b34801561039f57600080fd5b506102f96103ae366004614f94565b610b12565b3480156103bf57600080fd5b506000546103d3906001600160a01b031681565b60405161036a9190614ff5565b3480156103ec57600080fd5b506102f96103fb366004615009565b610c43565b34801561040c57600080fd5b5061042061041b366004615022565b611210565b60405190815260200161036a565b34801561043a57600080fd5b5061044e610449366004615009565b61126a565b604051901515815260200161036a565b34801561046a57600080fd5b5061047e610479366004615009565b611363565b60408051938452911515602084015215159082015260600161036a565b3480156104a757600080fd5b506104bb6104b6366004615009565b611464565b604080516001600160601b0390981688529515156020880152948601939093526060850191909152608084015260a0830152151560c082015260e00161036a565b34801561050857600080fd5b506102f961051736600461512a565b6114c3565b34801561052857600080fd5b506102f9610537366004615217565b61159d565b34801561054857600080fd5b506009546103d39061010090046001600160a01b031681565b34801561056d57600080fd5b506004546103d3906001600160a01b031681565b34801561058d57600080fd5b506102f961059c366004614e43565b611829565b3480156105ad57600080fd5b506105c16105bc366004615243565b611876565b60405161036a9190615281565b3480156105da57600080fd5b506102f96118e0565b3480156105ef57600080fd5b506102f96105fe366004615022565b611963565b34801561060f57600080fd5b506001546103d3906001600160a01b031681565b6102f961063136600461528f565b6119aa565b34801561064257600080fd5b50610420611bcf565b34801561065757600080fd5b5061067d604051806040016040528060068152602001650302e31302e360d41b81525081565b60405161036a919061532e565b34801561069657600080fd5b506106aa6106a5366004615009565b611c2d565b60405161036a959493929190615379565b3480156106c757600080fd5b506104206106d6366004615009565b611c89565b3480156106e757600080fd5b5060095461044e9060ff1681565b34801561070157600080fd5b506102f96107103660046153b8565b611dde565b34801561072157600080fd5b506102f9610730366004615410565b611e88565b34801561074157600080fd5b506102f961075036600461542c565b611eb9565b34801561076157600080fd5b506102f9610770366004615465565b611f38565b34801561078157600080fd5b506102f9611ff5565b34801561079657600080fd5b506102f96107a53660046154b7565b612095565b3480156107b657600080fd5b506104206107c5366004615525565b612272565b3480156107d657600080fd5b506107ea6107e5366004615525565b6122c3565b60405161036a919061558c565b34801561080357600080fd5b506102f9610812366004615009565b61244f565b34801561082357600080fd5b506102f9610832366004615632565b6125b4565b34801561084357600080fd5b506103d3610852366004615009565b6128ec565b34801561086357600080fd5b50610877610872366004615009565b612916565b6040805192835260208301919091520161036a565b34801561089857600080fd5b506102f96108a7366004614e43565b6129c2565b6104206108ba3660046156f6565b612a0f565b3480156108cb57600080fd5b506102f96108da366004614e43565b612a47565b6102f96108ed366004615726565b612a94565b3480156108fe57600080fd5b5061042061090d366004615009565b612f59565b34801561091e57600080fd5b506003546103d3906001600160a01b031681565b34801561093e57600080fd5b506102f961094d366004614e43565b612fc1565b34801561095e57600080fd5b5061042061096d366004615525565b61306a565b34801561097e57600080fd5b50600654610420565b34801561099357600080fd5b506104206109a23660046157a7565b613389565b3480156109b357600080fd5b506102f96109c2366004614e43565b6133d6565b3480156109d357600080fd5b506104206109e23660046157f2565b613423565b3480156109f357600080fd5b50610420610a02366004615858565b613507565b348015610a1357600080fd5b506102f9610a22366004614e43565b613553565b348015610a3357600080fd5b506002546103d3906001600160a01b031681565b348015610a5357600080fd5b50610420610a62366004615009565b61362a565b348015610a7357600080fd5b5061044e610a82366004615410565b613659565b6000546001600160a01b03163314610ab25760405163c383977560e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314610aff57604051639d6cab9960e01b815260040160405180910390fd5b610b0c83838360016136a1565b50505050565b6000546001600160a01b03163314610b3d5760405163c383977560e01b815260040160405180910390fd5b60005b8251811015610b0c578115610bdc57828181518110610b6157610b6161588c565b602002602001015160001480610b9457506006548351849083908110610b8957610b8961588c565b602002602001015110155b15610bb257604051633d58a98960e11b815260040160405180910390fd5b610bd784848381518110610bc857610bc861588c565b6020026020010151600161391d565b610c3b565b6001838281518110610bf057610bf061588c565b602002602001015103610c16576040516356d111fd60e11b815260040160405180910390fd5b610c3b84848381518110610c2c57610c2c61588c565b6020026020010151600061391d565b600101610b40565b600060078281548110610c5857610c5861588c565b600091825260208220600490910201805460058054929450916001600160601b03909116908110610c8b57610c8b61588c565b6000918252602082206003850154600c909202019250610cad906001906158b8565b90506000836003018281548110610cc657610cc661588c565b600091825260208220600b909102019150600185015460ff166004811115610cf057610cf0615341565b03610dcb5781158015610d3f57506001840154600684019060ff166004811115610d1c57610d1c615341565b60048110610d2c57610d2c61588c565b01546002850154610d3d90426158b8565b105b15610d5d57604051633e9727df60e01b815260040160405180910390fd5b6003810154600682015414610d85576040516309e4486b60e41b815260040160405180910390fd5b8254600160601b900460ff16610d9c576002610d9f565b60015b60018086018054909160ff1990911690836004811115610dc157610dc1615341565b02179055506111c2565b60018085015460ff166004811115610de557610de5615341565b03610ef5576001840154600684019060ff166004811115610e0857610e08615341565b60048110610e1857610e1861588c565b01546002850154610e2990426158b8565b108015610ec057506006816000015481548110610e4857610e4861588c565b600091825260209091200154604051630baa64d160e01b8152600481018790526001600160a01b0390911690630baa64d190602401602060405180830381865afa158015610e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebe91906158cb565b155b15610ede57604051634dfa578560e11b815260040160405180910390fd5b6001808501805460029260ff199091169083610dc1565b6002600185015460ff166004811115610f1057610f10615341565b0361105e576001840154600684019060ff166004811115610f3357610f33615341565b60048110610f4357610f4361588c565b01546002850154610f5490426158b8565b108015610feb57506006816000015481548110610f7357610f7361588c565b6000918252602090912001546040516336a66c7560e11b8152600481018790526001600160a01b0390911690636d4cd8ea90602401602060405180830381865afa158015610fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe991906158cb565b155b1561100957604051631988dead60e31b815260040160405180910390fd5b600184018054600360ff199091161790558354604051600160601b9091046001600160a01b03169086907fa5d41b970d849372be1da1481ffd78d162bfe57a7aa2fe4e5fb73481fa5ac24f90600090a36111c2565b6003600185015460ff16600481111561107957611079615341565b03611189576001840154600684019060ff16600481111561109c5761109c615341565b600481106110ac576110ac61588c565b015460028501546110bd90426158b8565b108015611154575060068160000154815481106110dc576110dc61588c565b600091825260209091200154604051630855bbe960e01b8152600481018790526001600160a01b0390911690630855bbe990602401602060405180830381865afa15801561112e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115291906158cb565b155b1561117257604051632f4dfd8760e01b815260040160405180910390fd5b6001808501805460049260ff199091169083610dc1565b6004600185015460ff1660048111156111a4576111a4615341565b036111c2576040516307f38c8f60e11b815260040160405180910390fd5b426002850155600184015460405186917f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b91916112019160ff16906158e8565b60405180910390a25050505050565b6001600160a01b03821660009081526008602052604081205461010081046001600160401b03169061124d90600160481b900460ff16600a6159dd565b61125790846159ec565b6112619190615a19565b90505b92915050565b600080600783815481106112805761128061588c565b60009182526020822060036004909202019081018054919350906112a6906001906158b8565b815481106112b6576112b661588c565b600091825260208220845460058054600b909402909201945090916001600160601b039091169081106112eb576112eb61588c565b90600052602060002090600c0201905080600501548260030154101561131657506000949350505050565b80546005805490916001600160601b03169081106113365761133661588c565b6000918252602080832094548352600a600c9092029094010190925250604090205460ff16159392505050565b6000806000806007858154811061137c5761137c61588c565b60009182526020822060036004909202019081018054919350906113a2906001906158b8565b815481106113b2576113b261588c565b90600052602060002090600b02019050600060068260000154815481106113db576113db61588c565b600091825260209091200154604051631c3db16d60e01b8152600481018990526001600160a01b0390911691508190631c3db16d90602401606060405180830381865afa158015611430573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114549190615a2d565b9199909850909650945050505050565b6005818154811061147457600080fd5b60009182526020909120600c9091020180546002820154600383015460048401546005850154600b909501546001600160601b038516965060ff600160601b9095048516959394929391921687565b600160006114cf6139a5565b8054909150600160401b900460ff16806114f6575080546001600160401b03808416911610155b156115135760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556115478d8d8d8d8d8d8d8d8d8d8d6139c9565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050505050505050565b60095460ff16156115c157604051636f1dac1d60e01b815260040160405180910390fd5b600080600785815481106115d7576115d761588c565b600091825260209091206004918202019150600182015460ff16600481111561160257611602615341565b1461162057604051638794ce4b60e01b815260040160405180910390fd5b8060030184815481106116355761163561588c565b6000918252602082206004600b909202019081015490935091506116598483615a66565b600584015460068501546002860154929350909160009061167b908390615a19565b905060008660010154905060008060068960000154815481106116a0576116a061588c565b60009182526020909120015460405163368efae360e21b8152600481018e9052602481018d90526001600160a01b039091169150819063da3beb8c90604401602060405180830381865afa1580156116fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117209190615a79565b9150508060000361173c5783861115611737578395505b61175c565b6117478460026159ec565b86111561175c576117598460026159ec565b95505b60048801869055865b8681101561180857848110156117be576117b76040518061010001604052808e81526020018d815260200184815260200187815260200186815260200185815260200188815260200183815250613d0c565b9550611800565b6118006040518061010001604052808e81526020018d8152602001848152602001878152602001868152602001858152602001888152602001838152506141ba565b600101611765565b508488600501541461181c57600588018590555b5050505050505050505050565b6000546001600160a01b031633146118545760405163c383977560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61187e614d73565b6005826001600160601b03168154811061189a5761189a61588c565b6000918252602090912060408051608081019182905292600c029091016006019060049082845b8154815260200190600101908083116118c15750505050509050919050565b6000546001600160a01b0316331461190b5760405163c383977560e01b815260040160405180910390fd5b60095460ff1661192e5760405163b4143dc760e01b815260040160405180910390fd5b6009805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6004546001600160a01b0316331461198e57604051639d6cab9960e01b815260040160405180910390fd5b6002546119a5906001600160a01b031683836145b7565b505050565b6119b38261467a565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a3157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a25600080516020615cc18339815191525490565b6001600160a01b031614155b15611a4f5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611aa9575060408051601f3d908101601f19168201909252611aa691810190615a79565b60015b611ad15781604051630c76093760e01b8152600401611ac89190614ff5565b60405180910390fd5b600080516020615cc18339815191528114611b0257604051632a87526960e21b815260048101829052602401611ac8565b600080516020615cc18339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156119a5576000836001600160a01b031683604051611b699190615a92565b600060405180830381855af49150503d8060008114611ba4576040519150601f19603f3d011682016040523d82523d6000602084013e611ba9565b606091505b5050905080610b0c576040516339b21b5d60e11b815260040160405180910390fd5b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c1a5760405163703e46dd60e11b815260040160405180910390fd5b50600080516020615cc183398151915290565b60078181548110611c3d57600080fd5b60009182526020909120600490910201805460018201546002909201546001600160601b0382169350600160601b9091046001600160a01b03169160ff80821692610100909204169085565b60008060078381548110611c9f57611c9f61588c565b6000918252602082206003600490920201908101805491935090611cc5906001906158b8565b81548110611cd557611cd561588c565b600091825260208220845460058054600b909402909201945090916001600160601b03909116908110611d0a57611d0a61588c565b90600052602060002090600c020190508060050154826003015410611da95782546001600160601b031660001901611d4b576001600160ff1b039350611dd6565b6003820154611d5b9060026159ec565b611d66906001615a66565b81546005805490916001600160601b0316908110611d8657611d8661588c565b90600052602060002090600c020160040154611da291906159ec565b9350611dd6565b6003820154611db99060026159ec565b611dc4906001615a66565b8160040154611dd391906159ec565b93505b505050919050565b6000546001600160a01b03163314611e095760405163c383977560e01b815260040160405180910390fd5b6000836001600160a01b03168383604051611e249190615a92565b60006040518083038185875af1925050503d8060008114611e61576040519150601f19603f3d011682016040523d82523d6000602084013e611e66565b606091505b5050905080610b0c576040516322092f2f60e11b815260040160405180910390fd5b60095460ff1615611eac57604051636f1dac1d60e01b815260040160405180910390fd5b6119a533838360006136a1565b6000546001600160a01b03163314611ee45760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f541615e167511d757a7067a700eb54431b256bb458dfdce0ac58bf2ed0aefd4491a35050565b6000546001600160a01b03163314611f635760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038316600081815260086020908152604091829020805469ffffffffffffffffff0019166101006001600160401b03881690810260ff60481b191691909117600160481b60ff8816908102919091179092558351908152918201527fe6996b7f03e9bd02228b99d3d946932e3197f505f60542c4cfbc919441d8a4e6910160405180910390a2505050565b6001546001600160a01b0316331480159061201b57506000546001600160a01b03163314155b1561203957604051636b29334f60e01b815260040160405180910390fd5b60095460ff161561205d57604051636f1dac1d60e01b815260040160405180910390fd5b6009805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6000546001600160a01b031633146120c05760405163c383977560e01b815260040160405180910390fd5b60006005886001600160601b0316815481106120de576120de61588c565b90600052602060002090600c0201905060016001600160601b0316886001600160601b031614158015612140575080546005805488926001600160601b031690811061212c5761212c61588c565b90600052602060002090600c020160020154115b1561215e57604051639717078960e01b815260040160405180910390fd5b60005b60018201548110156121d9578660058360010183815481106121855761218561588c565b9060005260206000200154815481106121a0576121a061588c565b90600052602060002090600c02016002015410156121d157604051639717078960e01b815260040160405180910390fd5b600101612161565b5060028101869055805460ff60601b1916600160601b881515021781556003810185905560048082018590556005820184905561221c9060068301908490614d91565b50876001600160601b03167f709b1f5fda58af9a4f52dacd1ec404840a8148455700cce155a2bd8cf127ef1a88888888888860405161226096959493929190615aae565b60405180910390a25050505050505050565b6000600783815481106122875761228761588c565b906000526020600020906004020160030182815481106122a9576122a961588c565b90600052602060002090600b020160010154905092915050565b61232960405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6007838154811061233c5761233c61588c565b9060005260206000209060040201600301828154811061235e5761235e61588c565b90600052602060002090600b0201604051806101600160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820180548060200260200160405190810160405280929190818152602001828054801561240d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116123ef575b5050509183525050600782015460208201526008820154604082015260098201546001600160a01b03166060820152600a909101546080909101529392505050565b6000600782815481106124645761246461588c565b600091825260209091206004918202019150600182015460ff16600481111561248f5761248f615341565b146124ad57604051638794ce4b60e01b815260040160405180910390fd5b6001810154610100900460ff16156124d85760405163c977f8d360e01b815260040160405180910390fd5b60006124e383611363565b505060018301805461010061ff001990911617905582546040518281529192508491600160601b9091046001600160a01b0316907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a3815460405163188d362b60e11b81526004810185905260248101839052600160601b9091046001600160a01b03169063311a6c56906044015b600060405180830381600087803b15801561259757600080fd5b505af11580156125ab573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146125df5760405163c383977560e01b815260040160405180910390fd5b8660058a6001600160601b0316815481106125fc576125fc61588c565b90600052602060002090600c020160020154111561262d57604051639717078960e01b815260040160405180910390fd5b805160000361264f5760405163402585f560e01b815260040160405180910390fd5b6001600160601b03891661267657604051631ef4f64960e01b815260040160405180910390fd5b60058054600181018255600091825290600c82027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905b8351811015612738578381815181106126c9576126c961588c565b6020026020010151600014806126fc575060065484518590839081106126f1576126f161588c565b602002602001015110155b1561271a57604051633d58a98960e11b815260040160405180910390fd5b61273083858381518110610bc857610bc861588c565b6001016126ae565b5060016000908152600a8201602052604090205460ff1661276c576040516306351b3d60e31b815260040160405180910390fd5b80546001600160601b0319166001600160601b038c1617815560408051600081526020810191829052516127a4916001840191614dcf565b50805460ff60601b1916600160601b8b15150217815560028101899055600381018890556004808201889055600582018790556127e79060068301908790614d91565b50600480546040516311de995760e21b81526001600160a01b039091169163477a655c91612819918691899101615ae1565b600060405180830381600087803b15801561283357600080fd5b505af1158015612847573d6000803e3d6000fd5b5050505060058b6001600160601b0316815481106128675761286761588c565b600091825260208083206001600c909302018201805492830181558352909120018290556040516001600160601b03808d1691908416907f550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee6906128d7908e908e908e908e908e908e908d90615afa565b60405180910390a35050505050505050505050565b600681815481106128fc57600080fd5b6000918252602090912001546001600160a01b0316905081565b60008060006007848154811061292e5761292e61588c565b6000918252602090912060049091020190506003600182015460ff16600481111561295b5761295b615341565b036129b3576002810154815460058054929550916001600160601b039091169081106129895761298961588c565b600091825260209091206009600c90920201015460028201546129ac9190615a66565b91506129bc565b60009250600091505b50915091565b6000546001600160a01b031633146129ed5760405163c383977560e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000612a1a82613507565b341015612a3a57604051630e3360f160e21b815260040160405180910390fd5b61126183836000346146a8565b6000546001600160a01b03163314612a725760405163c383977560e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b612a9d83611c89565b341015612abd57604051633191f8f160e01b815260040160405180910390fd5b600060078481548110612ad257612ad261588c565b6000918252602090912060049091020190506003600182015460ff166004811115612aff57612aff615341565b14612b1d576040516337cdefcb60e21b815260040160405180910390fd5b60038101805460009190612b33906001906158b8565b81548110612b4357612b4361588c565b90600052602060002090600b020190506006816000015481548110612b6a57612b6a61588c565b6000918252602090912001546001600160a01b03163314612b9e5760405163065f245f60e01b815260040160405180910390fd5b8154815460038401805460018101825560009182526020909120600580546001600160601b0390951694600b9093029091019184908110612be157612be161588c565b90600052602060002090600c020160050154846003015410612cea576005836001600160601b031681548110612c1957612c1961588c565b60009182526020909120600c9091020154600580546001600160601b0390921694509084908110612c4c57612c4c61588c565b60009182526020808320858452600a600c90930201919091019052604090205460ff16612c7857600191505b84546001600160601b03848116911614612cea57845460038601546001600160601b0390911690612cab906001906158b8565b6040516001600160601b03861681528a907f736e3f52761298c8c0823e1ebf482ed3c5ecb304f743d2d91a7c006e8e8d7a1f9060200160405180910390a45b84546001600160601b0319166001600160601b038416908117865560018601805460ff1916905542600287015560058054600092908110612d2d57612d2d61588c565b90600052602060002090600c02019050806004015434612d4d9190615a19565b8260030181905550612d6781600201548260030154614983565b60018084019190915534600284015583835560045460038801546001600160a01b039091169163d09f392d918c91612d9e916158b8565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b158015612ddc57600080fd5b505af1158015612df0573d6000803e3d6000fd5b505086548454149150612ed690505784546003870154612e12906001906158b8565b83546040519081528b907fcbe7939a71f0b369c7471d760a0a99b60b7bb010ee0406cba8a46679d1ea77569060200160405180910390a46006826000015481548110612e6057612e6061588c565b60009182526020909120015460038301546040516302dbb79560e61b81526001600160a01b039092169163b6ede54091612ea3918d918d918d9190600401615b77565b600060405180830381600087803b158015612ebd57600080fd5b505af1158015612ed1573d6000803e3d6000fd5b505050505b8554604051600160601b9091046001600160a01b0316908a907f9c9b64db9e130f48381bf697abf638e73117dbfbfd7a4484f2da3ba188f4187d90600090a3887f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b916000604051612f4691906158e8565b60405180910390a2505050505050505050565b60008060078381548110612f6f57612f6f61588c565b906000526020600020906004020190508060030160018260030180549050612f9791906158b8565b81548110612fa757612fa761588c565b90600052602060002090600b020160030154915050919050565b6000546001600160a01b03163314612fec5760405163c383977560e01b815260040160405180910390fd5b6006805460018101825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f810180546001600160a01b0319166001600160a01b0385169081179091556040519192909183917f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a35050565b600080600784815481106130805761308061588c565b906000526020600020906004020190506000600182600301805490506130a691906158b8565b905060008260030182815481106130bf576130bf61588c565b600091825260208220600b909102019150600184015460ff1660048111156130e9576130e9615341565b1461310757604051638285c4ef60e01b815260040160405180910390fd5b600060068260000154815481106131205761312061588c565b6000918252602082200154600a8401546001600160a01b039091169250905b8781108015613155575060038401546006850154105b1561335d5760006001600160a01b03841663d2b8035a8b8461317681615ba7565b95506131829087615a66565b6040516001600160e01b031960e085901b168152600481019290925260248201526044016020604051808303816000875af11580156131c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e99190615bc0565b90506001600160a01b0381166131ff575061313f565b6004805460018701546040516310f0b12f60e11b81526001600160a01b03909216926321e1625e92613235928692909101615bdd565b600060405180830381600087803b15801561324f57600080fd5b505af1158015613263573d6000803e3d6000fd5b50505060068601546040518c92506001600160a01b038416917f6119cf536152c11e0a9a6c22f3953ce4ecc93ee54fa72ffa326ffabded21509b916132b0918b8252602082015260400190565b60405180910390a36006850180546001810182556000828152602090200180546001600160a01b0319166001600160a01b03841617905560038601549054036133575760048054604051632e96bc2360e11b81529182018c9052602482018890526001600160a01b031690635d2d784690604401600060405180830381600087803b15801561333e57600080fd5b505af1158015613352573d6000803e3d6000fd5b505050505b5061313f565b8084600a0160008282546133719190615a66565b90915550505060069092015494505050505092915050565b60006133ce8261041b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061350792505050565b949350505050565b6000546001600160a01b031633146134015760405163c383977560e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526008602052604081205460ff1661345c5760405163e51cf7bf60e01b815260040160405180910390fd5b613467858585613389565b82101561348757604051630e3360f160e21b815260040160405180910390fd5b61349c6001600160a01b038416333085614992565b6134b9576040516312171d8360e31b815260040160405180910390fd5b6134fd8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506146a89050565b9695505050505050565b600080600061351584614a6e565b5091509150806005836001600160601b0316815481106135375761353761588c565b90600052602060002090600c0201600401546133ce91906159ec565b6006600061355f6139a5565b8054909150600160401b900460ff1680613586575080546001600160401b03808416911610155b156135a35760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff19909216821717825560098054610100600160a81b0319166101006001600160a01b03871602179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b60006007828154811061363f5761363f61588c565b600091825260209091206003600490920201015492915050565b60006005836001600160601b0316815481106136775761367761588c565b60009182526020808320948352600c91909102909301600a0190925250604090205460ff16919050565b60006001600160601b03841615806136c457506005546001600160601b03851610155b156136dc576136d4826005614af5565b5060006133ce565b821580159061371757506005846001600160601b0316815481106137025761370261588c565b90600052602060002090600c02016002015483105b15613727576136d4826006614af5565b600480546040516303d9595760e31b81526001600160a01b03888116938201939093526001600160601b03871660248201526044810186905260009283928392911690631ecacab8906064016060604051808303816000875af1158015613792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b69190615bf6565b9194509250905060008160098111156137d1576137d1615341565b141580156137f1575060018160098111156137ee576137ee615341565b14155b1561380c576138008582614af5565b600093505050506133ce565b600181600981111561382057613820615341565b0361383157600193505050506133ce565b821561385e5760025461384f906001600160a01b0316893086614992565b61385e57613800856002614af5565b811561388a5760025461387b906001600160a01b031689846145b7565b61388a57613800856003614af5565b600480546040516355601d6960e11b81526001600160a01b038b8116938201939093526001600160601b038a16602482015260448101869052606481018590526084810189905291169063aac03ad29060a401600060405180830381600087803b1580156138f757600080fd5b505af115801561390b573d6000803e3d6000fd5b5060019b9a5050505050505050505050565b806005846001600160601b03168154811061393a5761393a61588c565b60009182526020808320868452600c92909202909101600a0190526040808220805460ff19169315159390931790925590518215159184916001600160601b038716917fb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc7991a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6139d1614c3e565b600080546001600160a01b03199081166001600160a01b038e81169190911783556001805483168e83161781556002805484168e84161781556003805485168e851617905560048054851688851617905560098054610100600160a81b031916610100888616021790556006805481875291820190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40018054909316918b1691821790925560405190927f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a36005805460010181556000908152600480546040516311de995760e21b81526001600160a01b039091169263477a655c92613adc92889101615ae1565b600060405180830381600087803b158015613af657600080fd5b505af1158015613b0a573d6000803e3d6000fd5b5050600580546001810182556000918252600c027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160601b031916815560408051838152602081019091529093509150508051613b78916001840191602090910190614dcf565b50805460ff60601b1916600160601b881515021781558551600282015560208601516003820155604086015160048083019190915560608701516005830155613bc79060068301908790614d91565b50600480546040516311de995760e21b81526001600160a01b039091169163477a655c91613bfa91600191899101615ae1565b600060405180830381600087803b158015613c1457600080fd5b505af1158015613c28573d6000803e3d6000fd5b506000925060019150613c389050565b604051908082528060200260200182016040528015613c61578160200160208202803683370190505b509050600181600081518110613c7957613c7961588c565b602090810291909101015281546001600160601b031660017f550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee68a8a600060200201518b600160200201518c600260200201518d600360200201518d89604051613ce89796959493929190615afa565b60405180910390a3613cfd600180600161391d565b50505050505050505050505050565b6000806007836000015181548110613d2657613d2661588c565b90600052602060002090600402019050600081600301846020015181548110613d5157613d5161588c565b90600052602060002090600b0201905060006006826000015481548110613d7a57613d7a61588c565b60009182526020808320919091015487519188015160e089015160808a015160a08b01516040516333ac937b60e11b8152600481019690965260248601939093526044850191909152606484015260848301526001600160a01b03169250829063675926f69060a401602060405180830381865afa158015613e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e249190615a79565b9050612710811115613e3557506127105b6000612710613e4483826158b8565b8560010154613e5391906159ec565b613e5d9190615a19565b90506000846006018860e0015181548110613e7a57613e7a61588c565b6000918252602090912001546004805460405163965af6c760e01b81526001600160a01b03938416945092169163965af6c791613ebb918591879101615bdd565b600060405180830381600087803b158015613ed557600080fd5b505af1158015613ee9573d6000803e3d6000fd5b505060048054604051633c85b79360e21b8152600094508493506001600160a01b039091169163f216de4c91613f23918791899101615bdd565b60408051808303816000875af1158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190615c29565b91509150808a60c001818151613f7b9190615a66565b90525060208a01518a516001600160a01b0385167f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e788613fba86615c4d565b60098d0154604051613fdc9392916000916001600160a01b0390911690615c69565b60405180910390a48115806140715750895160208b015160e08c015160405163ba66fde760e01b81526004810193909352602483019190915260448201526001600160a01b0387169063ba66fde790606401602060405180830381865afa15801561404b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061406f91906158cb565b155b156140d8576004805460405163b5d69e9960e01b81526001600160a01b039091169163b5d69e99916140a591879101614ff5565b600060405180830381600087803b1580156140bf57600080fd5b505af11580156140d3573d6000803e3d6000fd5b505050505b60018a606001516140e991906158b8565b8a60e001511480156140fd575060408a0151155b156141a75760098701546000546002890154614126926001600160a01b03908116921690614c65565b60005460c08b0151600254614149926001600160a01b03918216929116906145b7565b5060208a01518a5160c08c015160028a015460098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf49361419e93909290916001600160a01b0390911690615c8d565b60405180910390a35b50505060c0909601519695505050505050565b600060078260000151815481106141d3576141d361588c565b906000526020600020906004020190506000816003018360200151815481106141fe576141fe61588c565b90600052602060002090600b02019050600060068260000154815481106142275761422761588c565b6000918252602080832090910154865191870151606088015160e08901516001600160a01b039093169550859363675926f69390929161426691615cac565b60808a015160a08b01516040516001600160e01b031960e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401602060405180830381865afa1580156142c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ea9190615a79565b90506127108111156142fb57506127105b60008360060186606001518760e001516143159190615cac565b815481106143255761432561588c565b600091825260208220015460018601546001600160a01b03909116925061434c9084614983565b6004805460405163965af6c760e01b81529293506001600160a01b03169163965af6c79161437e918691869101615bdd565b600060405180830381600087803b15801561439857600080fd5b505af11580156143ac573d6000803e3d6000fd5b5050505060006143cf88604001518960c001516143c99190615a19565b85614983565b9050808660080160008282546143e59190615a66565b92505081905550600061440b896040015188600201546144059190615a19565b86614983565b9050808760070160008282546144219190615a66565b909155505060025461443d906001600160a01b031685846145b7565b506009870154614457906001600160a01b03168583614c65565b6020890151895160098901546040516001600160a01b03888116927f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e7926144a7928c928a928a9290911690615c69565b60405180910390a46001896060015160026144c291906159ec565b6144cc91906158b8565b8960e00151036145ac57600087600801548a60c001516144ec91906158b8565b905060008860070154896002015461450491906158b8565b90508115158061451357508015155b1561181c57811561453d5760005460025461453b916001600160a01b039182169116846145b7565b505b8015614562576009890154600054614562916001600160a01b03908116911683614c65565b60208b01518b5160098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf4916128d791879187916001600160a01b0390911690615c8d565b505050505050505050565b6000806000856001600160a01b031685856040516024016145d9929190615bdd565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161460e9190615a92565b6000604051808303816000865af19150503d806000811461464b576040519150601f19603f3d011682016040523d82523d6000602084013e614650565b606091505b50915091508180156134fd5750805115806134fd5750808060200190518101906134fd91906158cb565b6000546001600160a01b031633146146a55760405163c383977560e01b815260040160405180910390fd5b50565b60008060006146b686614a6e565b92505091506005826001600160601b0316815481106146d7576146d761588c565b60009182526020808320848452600a600c90930201919091019052604090205460ff166147175760405163b34eb75d60e01b815260040160405180910390fd5b600780546001810182556000918252600160601b33026001600160601b03851617600482027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6888101918255427fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a9091015560068054929650909291849081106147a2576147a261588c565b6000918252602082200154600580546001600160a01b039092169350906001600160601b0387169081106147d8576147d861588c565b60009182526020808320600387018054600181018255908552918420600c909302019350600b0201906001600160a01b038a16156148235761481e8a8460040154611210565b614829565b82600401545b9050614835818a615a19565b6003808401919091558683556002840154908401546148549190614983565b6001830155600282018990556009820180546001600160a01b0319166001600160a01b038c8116919091179091556004805460405163d09f392d60e01b81529182018b9052600060248301529091169063d09f392d90604401600060405180830381600087803b1580156148c757600080fd5b505af11580156148db573d6000803e3d6000fd5b50505050836001600160a01b031663b6ede540898e8e86600301546040518563ffffffff1660e01b81526004016149159493929190615b77565b600060405180830381600087803b15801561492f57600080fd5b505af1158015614943573d6000803e3d6000fd5b50506040513392508a91507f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a350505050505050949350505050565b600061271061125783856159ec565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516149f79190615a92565b6000604051808303816000865af19150503d8060008114614a34576040519150601f19603f3d011682016040523d82523d6000602084013e614a39565b606091505b5091509150818015614a63575080511580614a63575080806020019051810190614a6391906158cb565b979650505050505050565b60008060006040845110614ae3575050506020810151604082015160608301516001600160601b0383161580614aaf57506005546001600160601b03841610155b15614ab957600192505b81600003614ac657600391505b801580614ad557506006548110155b15614ade575060015b614aee565b506001915060039050815b9193909250565b6001826001811115614b0957614b09615341565b03614b12575050565b6002816009811115614b2657614b26615341565b03614b4457604051630f323ed960e11b815260040160405180910390fd5b6003816009811115614b5857614b58615341565b03614b765760405163e45e13a360e01b815260040160405180910390fd5b6004816009811115614b8a57614b8a615341565b03614ba857604051631d91d0ed60e31b815260040160405180910390fd5b6005816009811115614bbc57614bbc615341565b03614bda57604051637c84af5160e01b815260040160405180910390fd5b6006816009811115614bee57614bee615341565b03614c0c57604051630caac6b360e31b815260040160405180910390fd5b6009816009811115614c2057614c20615341565b03611bcb57604051633e57962f60e21b815260040160405180910390fd5b614c46614ca8565b614c6357604051631afcd79f60e31b815260040160405180910390fd5b565b6001600160a01b038316614c94576009546119a5906001600160a01b0384811691849161010090910416614cc2565b610b0c6001600160a01b03841683836145b7565b6000614cb26139a5565b54600160401b900460ff16919050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015614cf157505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015614d2c57600080fd5b505af1158015614d40573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038516935063a9059cbb925061257d915086908690600401615bdd565b60405180608001604052806004906020820280368337509192915050565b8260048101928215614dbf579160200282015b82811115614dbf578251825591602001919060010190614da4565b50614dcb929150614e09565b5090565b828054828255906000526020600020908101928215614dbf5791602002820182811115614dbf578251825591602001919060010190614da4565b5b80821115614dcb5760008155600101614e0a565b6001600160a01b03811681146146a557600080fd5b8035614e3e81614e1e565b919050565b600060208284031215614e5557600080fd5b8135614e6081614e1e565b9392505050565b80356001600160601b0381168114614e3e57600080fd5b600080600060608486031215614e9357600080fd5b8335614e9e81614e1e565b9250614eac60208501614e67565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614efb57614efb614ebd565b604052919050565b600082601f830112614f1457600080fd5b81356001600160401b03811115614f2d57614f2d614ebd565b8060051b614f3d60208201614ed3565b91825260208185018101929081019086841115614f5957600080fd5b6020860192505b838310156134fd578235825260209283019290910190614f60565b80151581146146a557600080fd5b8035614e3e81614f7b565b600080600060608486031215614fa957600080fd5b614fb284614e67565b925060208401356001600160401b03811115614fcd57600080fd5b614fd986828701614f03565b9250506040840135614fea81614f7b565b809150509250925092565b6001600160a01b0391909116815260200190565b60006020828403121561501b57600080fd5b5035919050565b6000806040838503121561503557600080fd5b823561504081614e1e565b946020939093013593505050565b600082601f83011261505f57600080fd5b604051608081016001600160401b038111828210171561508157615081614ebd565b60405280608084018581111561509657600080fd5b845b818110156150b0578035835260209283019201615098565b509195945050505050565b600082601f8301126150cc57600080fd5b81356001600160401b038111156150e5576150e5614ebd565b6150f8601f8201601f1916602001614ed3565b81815284602083860101111561510d57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060008060006102208c8e03121561514c57600080fd5b8b3561515781614e1e565b9a5060208c013561516781614e1e565b995061517560408d01614e33565b985061518360608d01614e33565b975061519160808d01614e33565b965061519f60a08d01614f89565b95506151ae8d60c08e0161504e565b94506151be8d6101408e0161504e565b93506101c08c01356001600160401b038111156151da57600080fd5b6151e68e828f016150bb565b9350506151f66101e08d01614e33565b91506152056102008d01614e33565b90509295989b509295989b9093969950565b60008060006060848603121561522c57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561525557600080fd5b61126182614e67565b8060005b6004811015610b0c578151845260209384019390910190600101615262565b60808101611264828461525e565b600080604083850312156152a257600080fd5b82356152ad81614e1e565b915060208301356001600160401b038111156152c857600080fd5b6152d4858286016150bb565b9150509250929050565b60005b838110156152f95781810151838201526020016152e1565b50506000910152565b6000815180845261531a8160208601602086016152de565b601f01601f19169290920160200192915050565b6020815260006112616020830184615302565b634e487b7160e01b600052602160045260246000fd5b6005811061537557634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03861681526001600160a01b038516602082015260a081016153a56040830186615357565b9215156060820152608001529392505050565b6000806000606084860312156153cd57600080fd5b83356153d881614e1e565b92506020840135915060408401356001600160401b038111156153fa57600080fd5b615406868287016150bb565b9150509250925092565b6000806040838503121561542357600080fd5b61504083614e67565b6000806040838503121561543f57600080fd5b823561544a81614e1e565b9150602083013561545a81614f7b565b809150509250929050565b60008060006060848603121561547a57600080fd5b833561548581614e1e565b925060208401356001600160401b03811681146154a157600080fd5b9150604084013560ff81168114614fea57600080fd5b6000806000806000806000610140888a0312156154d357600080fd5b6154dc88614e67565b965060208801356154ec81614f7b565b955060408801359450606088013593506080880135925060a088013591506155178960c08a0161504e565b905092959891949750929550565b6000806040838503121561553857600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b828110156155825781516001600160a01b031686526020958601959091019060010161555b565b5093949350505050565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c0820152600060c083015161016060e08401526155e6610180840182615547565b905060e084015161010084015261010084015161012084015261012084015161561b6101408501826001600160a01b03169052565b506101408401516101608401528091505092915050565b60008060008060008060008060006101808a8c03121561565157600080fd5b61565a8a614e67565b985060208a013561566a81614f7b565b975060408a0135965060608a0135955060808a0135945060a08a013593506156958b60c08c0161504e565b92506101408a01356001600160401b038111156156b157600080fd5b6156bd8c828d016150bb565b9250506101608a01356001600160401b038111156156da57600080fd5b6156e68c828d01614f03565b9150509295985092959850929598565b6000806040838503121561570957600080fd5b8235915060208301356001600160401b038111156152c857600080fd5b60008060006060848603121561573b57600080fd5b833592506020840135915060408401356001600160401b038111156153fa57600080fd5b60008083601f84011261577157600080fd5b5081356001600160401b0381111561578857600080fd5b6020830191508360208285010111156157a057600080fd5b9250929050565b6000806000604084860312156157bc57600080fd5b83356001600160401b038111156157d257600080fd5b6157de8682870161575f565b9094509250506020840135614fea81614e1e565b60008060008060006080868803121561580a57600080fd5b8535945060208601356001600160401b0381111561582757600080fd5b6158338882890161575f565b909550935050604086013561584781614e1e565b949793965091946060013592915050565b60006020828403121561586a57600080fd5b81356001600160401b0381111561588057600080fd5b6133ce848285016150bb565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115611264576112646158a2565b6000602082840312156158dd57600080fd5b8151614e6081614f7b565b602081016112648284615357565b6001815b600184111561593157808504811115615915576159156158a2565b600184161561592357908102905b60019390931c9280026158fa565b935093915050565b60008261594857506001611264565b8161595557506000611264565b816001811461596b576002811461597557615991565b6001915050611264565b60ff841115615986576159866158a2565b50506001821b611264565b5060208310610133831016604e8410600b84101617156159b4575081810a611264565b6159c160001984846158f6565b80600019048211156159d5576159d56158a2565b029392505050565b600061126160ff841683615939565b8082028115828204841417611264576112646158a2565b634e487b7160e01b600052601260045260246000fd5b600082615a2857615a28615a03565b500490565b600080600060608486031215615a4257600080fd5b83516020850151909350615a5581614f7b565b6040850151909250614fea81614f7b565b80820180821115611264576112646158a2565b600060208284031215615a8b57600080fd5b5051919050565b60008251615aa48184602087016152de565b9190910192915050565b6000610120820190508715158252866020830152856040830152846060830152836080830152614a6360a083018461525e565b8281526040602082015260006133ce6040830184615302565b600061014082018915158352886020840152876040840152866060840152856080840152615b2b60a084018661525e565b610140610120840152835190819052602084019061016084019060005b81811015615b66578351835260209384019390920191600101615b48565b50909b9a5050505050505050505050565b848152836020820152608060408201526000615b966080830185615302565b905082606083015295945050505050565b600060018201615bb957615bb96158a2565b5060010190565b600060208284031215615bd257600080fd5b8151614e6081614e1e565b6001600160a01b03929092168252602082015260400190565b600080600060608486031215615c0b57600080fd5b8351602085015160408601519194509250600a8110614fea57600080fd5b60008060408385031215615c3c57600080fd5b505080516020909101519092909150565b6000600160ff1b8201615c6257615c626158a2565b5060000390565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091526001600160a01b0316604082015260600190565b600082615cbb57615cbb615a03565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220a4155dec443a9c5d136f16c8c11bf35431e34b7e440060d5ff361d5e1f88354264736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102d45760003560e01c80637934c0be1161017b578063c3569902116100d7578063e4c0aaf411610085578063e4c0aaf4146109a7578063f6506db4146109c7578063f7434ea9146109e7578063f7e7d1fd14610a07578063fbf405b014610a27578063fc6f8f1614610a47578063fe524c3914610a6757600080fd5b8063c3569902146108df578063c71f4253146108f2578063cf0c38f814610912578063d07368bd14610932578063d2b8035a14610952578063d4d1d76a14610972578063d98493f61461098757600080fd5b80638bb04875116101345780638bb04875146107f7578063a072b86c14610817578063acdbf51d14610837578063afe15cfb14610857578063b00496371461088c578063c13517e1146108ac578063c258bb19146108bf57600080fd5b80637934c0be1461073557806382d02237146107555780638456cb591461077557806386541b241461078a57806386cdecef146107aa5780638a9bb02a146107ca57600080fd5b80632e1daf2f1161023557806352d1902d116101e357806352d1902d1461063657806354fd4d501461064b578063564a565d1461068a57806359ec827e146106bb5780635c975abb146106db578063751accd0146106f55780637717a6e81461071557600080fd5b80632e1daf2f146105615780632fcb4f04146105815780633cfd1184146105a15780633f4ba83a146105ce57806342c37fa3146105e3578063452a9320146106035780634f1ef2861461062357600080fd5b80631860592b116102925780631860592b1461040057806319b815291461042e5780631c3db16d1461045e5780631f5a0dd21461049b5780632c053739146104fc5780632d29a47b1461051c5780632d68efc91461053c57600080fd5b8062f5822c146102d95780630219da79146102fb5780630761c14d146103735780630b7414bc146103935780630c340a24146103b3578063115d5376146103e0575b600080fd5b3480156102e557600080fd5b506102f96102f4366004614e43565b610a87565b005b34801561030757600080fd5b50610346610316366004614e43565b60086020526000908152604090205460ff808216916001600160401b0361010082041691600160481b9091041683565b6040805193151584526001600160401b03909216602084015260ff16908201526060015b60405180910390f35b34801561037f57600080fd5b506102f961038e366004614e7e565b610ad4565b34801561039f57600080fd5b506102f96103ae366004614f94565b610b12565b3480156103bf57600080fd5b506000546103d3906001600160a01b031681565b60405161036a9190614ff5565b3480156103ec57600080fd5b506102f96103fb366004615009565b610c43565b34801561040c57600080fd5b5061042061041b366004615022565b611210565b60405190815260200161036a565b34801561043a57600080fd5b5061044e610449366004615009565b61126a565b604051901515815260200161036a565b34801561046a57600080fd5b5061047e610479366004615009565b611363565b60408051938452911515602084015215159082015260600161036a565b3480156104a757600080fd5b506104bb6104b6366004615009565b611464565b604080516001600160601b0390981688529515156020880152948601939093526060850191909152608084015260a0830152151560c082015260e00161036a565b34801561050857600080fd5b506102f961051736600461512a565b6114c3565b34801561052857600080fd5b506102f9610537366004615217565b61159d565b34801561054857600080fd5b506009546103d39061010090046001600160a01b031681565b34801561056d57600080fd5b506004546103d3906001600160a01b031681565b34801561058d57600080fd5b506102f961059c366004614e43565b611829565b3480156105ad57600080fd5b506105c16105bc366004615243565b611876565b60405161036a9190615281565b3480156105da57600080fd5b506102f96118e0565b3480156105ef57600080fd5b506102f96105fe366004615022565b611963565b34801561060f57600080fd5b506001546103d3906001600160a01b031681565b6102f961063136600461528f565b6119aa565b34801561064257600080fd5b50610420611bcf565b34801561065757600080fd5b5061067d604051806040016040528060068152602001650302e31302e360d41b81525081565b60405161036a919061532e565b34801561069657600080fd5b506106aa6106a5366004615009565b611c2d565b60405161036a959493929190615379565b3480156106c757600080fd5b506104206106d6366004615009565b611c89565b3480156106e757600080fd5b5060095461044e9060ff1681565b34801561070157600080fd5b506102f96107103660046153b8565b611dde565b34801561072157600080fd5b506102f9610730366004615410565b611e88565b34801561074157600080fd5b506102f961075036600461542c565b611eb9565b34801561076157600080fd5b506102f9610770366004615465565b611f38565b34801561078157600080fd5b506102f9611ff5565b34801561079657600080fd5b506102f96107a53660046154b7565b612095565b3480156107b657600080fd5b506104206107c5366004615525565b612272565b3480156107d657600080fd5b506107ea6107e5366004615525565b6122c3565b60405161036a919061558c565b34801561080357600080fd5b506102f9610812366004615009565b61244f565b34801561082357600080fd5b506102f9610832366004615632565b6125b4565b34801561084357600080fd5b506103d3610852366004615009565b6128ec565b34801561086357600080fd5b50610877610872366004615009565b612916565b6040805192835260208301919091520161036a565b34801561089857600080fd5b506102f96108a7366004614e43565b6129c2565b6104206108ba3660046156f6565b612a0f565b3480156108cb57600080fd5b506102f96108da366004614e43565b612a47565b6102f96108ed366004615726565b612a94565b3480156108fe57600080fd5b5061042061090d366004615009565b612f59565b34801561091e57600080fd5b506003546103d3906001600160a01b031681565b34801561093e57600080fd5b506102f961094d366004614e43565b612fc1565b34801561095e57600080fd5b5061042061096d366004615525565b61306a565b34801561097e57600080fd5b50600654610420565b34801561099357600080fd5b506104206109a23660046157a7565b613389565b3480156109b357600080fd5b506102f96109c2366004614e43565b6133d6565b3480156109d357600080fd5b506104206109e23660046157f2565b613423565b3480156109f357600080fd5b50610420610a02366004615858565b613507565b348015610a1357600080fd5b506102f9610a22366004614e43565b613553565b348015610a3357600080fd5b506002546103d3906001600160a01b031681565b348015610a5357600080fd5b50610420610a62366004615009565b61362a565b348015610a7357600080fd5b5061044e610a82366004615410565b613659565b6000546001600160a01b03163314610ab25760405163c383977560e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314610aff57604051639d6cab9960e01b815260040160405180910390fd5b610b0c83838360016136a1565b50505050565b6000546001600160a01b03163314610b3d5760405163c383977560e01b815260040160405180910390fd5b60005b8251811015610b0c578115610bdc57828181518110610b6157610b6161588c565b602002602001015160001480610b9457506006548351849083908110610b8957610b8961588c565b602002602001015110155b15610bb257604051633d58a98960e11b815260040160405180910390fd5b610bd784848381518110610bc857610bc861588c565b6020026020010151600161391d565b610c3b565b6001838281518110610bf057610bf061588c565b602002602001015103610c16576040516356d111fd60e11b815260040160405180910390fd5b610c3b84848381518110610c2c57610c2c61588c565b6020026020010151600061391d565b600101610b40565b600060078281548110610c5857610c5861588c565b600091825260208220600490910201805460058054929450916001600160601b03909116908110610c8b57610c8b61588c565b6000918252602082206003850154600c909202019250610cad906001906158b8565b90506000836003018281548110610cc657610cc661588c565b600091825260208220600b909102019150600185015460ff166004811115610cf057610cf0615341565b03610dcb5781158015610d3f57506001840154600684019060ff166004811115610d1c57610d1c615341565b60048110610d2c57610d2c61588c565b01546002850154610d3d90426158b8565b105b15610d5d57604051633e9727df60e01b815260040160405180910390fd5b6003810154600682015414610d85576040516309e4486b60e41b815260040160405180910390fd5b8254600160601b900460ff16610d9c576002610d9f565b60015b60018086018054909160ff1990911690836004811115610dc157610dc1615341565b02179055506111c2565b60018085015460ff166004811115610de557610de5615341565b03610ef5576001840154600684019060ff166004811115610e0857610e08615341565b60048110610e1857610e1861588c565b01546002850154610e2990426158b8565b108015610ec057506006816000015481548110610e4857610e4861588c565b600091825260209091200154604051630baa64d160e01b8152600481018790526001600160a01b0390911690630baa64d190602401602060405180830381865afa158015610e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebe91906158cb565b155b15610ede57604051634dfa578560e11b815260040160405180910390fd5b6001808501805460029260ff199091169083610dc1565b6002600185015460ff166004811115610f1057610f10615341565b0361105e576001840154600684019060ff166004811115610f3357610f33615341565b60048110610f4357610f4361588c565b01546002850154610f5490426158b8565b108015610feb57506006816000015481548110610f7357610f7361588c565b6000918252602090912001546040516336a66c7560e11b8152600481018790526001600160a01b0390911690636d4cd8ea90602401602060405180830381865afa158015610fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe991906158cb565b155b1561100957604051631988dead60e31b815260040160405180910390fd5b600184018054600360ff199091161790558354604051600160601b9091046001600160a01b03169086907fa5d41b970d849372be1da1481ffd78d162bfe57a7aa2fe4e5fb73481fa5ac24f90600090a36111c2565b6003600185015460ff16600481111561107957611079615341565b03611189576001840154600684019060ff16600481111561109c5761109c615341565b600481106110ac576110ac61588c565b015460028501546110bd90426158b8565b108015611154575060068160000154815481106110dc576110dc61588c565b600091825260209091200154604051630855bbe960e01b8152600481018790526001600160a01b0390911690630855bbe990602401602060405180830381865afa15801561112e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115291906158cb565b155b1561117257604051632f4dfd8760e01b815260040160405180910390fd5b6001808501805460049260ff199091169083610dc1565b6004600185015460ff1660048111156111a4576111a4615341565b036111c2576040516307f38c8f60e11b815260040160405180910390fd5b426002850155600184015460405186917f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b91916112019160ff16906158e8565b60405180910390a25050505050565b6001600160a01b03821660009081526008602052604081205461010081046001600160401b03169061124d90600160481b900460ff16600a6159dd565b61125790846159ec565b6112619190615a19565b90505b92915050565b600080600783815481106112805761128061588c565b60009182526020822060036004909202019081018054919350906112a6906001906158b8565b815481106112b6576112b661588c565b600091825260208220845460058054600b909402909201945090916001600160601b039091169081106112eb576112eb61588c565b90600052602060002090600c0201905080600501548260030154101561131657506000949350505050565b80546005805490916001600160601b03169081106113365761133661588c565b6000918252602080832094548352600a600c9092029094010190925250604090205460ff16159392505050565b6000806000806007858154811061137c5761137c61588c565b60009182526020822060036004909202019081018054919350906113a2906001906158b8565b815481106113b2576113b261588c565b90600052602060002090600b02019050600060068260000154815481106113db576113db61588c565b600091825260209091200154604051631c3db16d60e01b8152600481018990526001600160a01b0390911691508190631c3db16d90602401606060405180830381865afa158015611430573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114549190615a2d565b9199909850909650945050505050565b6005818154811061147457600080fd5b60009182526020909120600c9091020180546002820154600383015460048401546005850154600b909501546001600160601b038516965060ff600160601b9095048516959394929391921687565b600160006114cf6139a5565b8054909150600160401b900460ff16806114f6575080546001600160401b03808416911610155b156115135760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556115478d8d8d8d8d8d8d8d8d8d8d6139c9565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050505050505050565b60095460ff16156115c157604051636f1dac1d60e01b815260040160405180910390fd5b600080600785815481106115d7576115d761588c565b600091825260209091206004918202019150600182015460ff16600481111561160257611602615341565b1461162057604051638794ce4b60e01b815260040160405180910390fd5b8060030184815481106116355761163561588c565b6000918252602082206004600b909202019081015490935091506116598483615a66565b600584015460068501546002860154929350909160009061167b908390615a19565b905060008660010154905060008060068960000154815481106116a0576116a061588c565b60009182526020909120015460405163368efae360e21b8152600481018e9052602481018d90526001600160a01b039091169150819063da3beb8c90604401602060405180830381865afa1580156116fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117209190615a79565b9150508060000361173c5783861115611737578395505b61175c565b6117478460026159ec565b86111561175c576117598460026159ec565b95505b60048801869055865b8681101561180857848110156117be576117b76040518061010001604052808e81526020018d815260200184815260200187815260200186815260200185815260200188815260200183815250613d0c565b9550611800565b6118006040518061010001604052808e81526020018d8152602001848152602001878152602001868152602001858152602001888152602001838152506141ba565b600101611765565b508488600501541461181c57600588018590555b5050505050505050505050565b6000546001600160a01b031633146118545760405163c383977560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61187e614d73565b6005826001600160601b03168154811061189a5761189a61588c565b6000918252602090912060408051608081019182905292600c029091016006019060049082845b8154815260200190600101908083116118c15750505050509050919050565b6000546001600160a01b0316331461190b5760405163c383977560e01b815260040160405180910390fd5b60095460ff1661192e5760405163b4143dc760e01b815260040160405180910390fd5b6009805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6004546001600160a01b0316331461198e57604051639d6cab9960e01b815260040160405180910390fd5b6002546119a5906001600160a01b031683836145b7565b505050565b6119b38261467a565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a3157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a25600080516020615cc18339815191525490565b6001600160a01b031614155b15611a4f5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611aa9575060408051601f3d908101601f19168201909252611aa691810190615a79565b60015b611ad15781604051630c76093760e01b8152600401611ac89190614ff5565b60405180910390fd5b600080516020615cc18339815191528114611b0257604051632a87526960e21b815260048101829052602401611ac8565b600080516020615cc18339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156119a5576000836001600160a01b031683604051611b699190615a92565b600060405180830381855af49150503d8060008114611ba4576040519150601f19603f3d011682016040523d82523d6000602084013e611ba9565b606091505b5050905080610b0c576040516339b21b5d60e11b815260040160405180910390fd5b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c1a5760405163703e46dd60e11b815260040160405180910390fd5b50600080516020615cc183398151915290565b60078181548110611c3d57600080fd5b60009182526020909120600490910201805460018201546002909201546001600160601b0382169350600160601b9091046001600160a01b03169160ff80821692610100909204169085565b60008060078381548110611c9f57611c9f61588c565b6000918252602082206003600490920201908101805491935090611cc5906001906158b8565b81548110611cd557611cd561588c565b600091825260208220845460058054600b909402909201945090916001600160601b03909116908110611d0a57611d0a61588c565b90600052602060002090600c020190508060050154826003015410611da95782546001600160601b031660001901611d4b576001600160ff1b039350611dd6565b6003820154611d5b9060026159ec565b611d66906001615a66565b81546005805490916001600160601b0316908110611d8657611d8661588c565b90600052602060002090600c020160040154611da291906159ec565b9350611dd6565b6003820154611db99060026159ec565b611dc4906001615a66565b8160040154611dd391906159ec565b93505b505050919050565b6000546001600160a01b03163314611e095760405163c383977560e01b815260040160405180910390fd5b6000836001600160a01b03168383604051611e249190615a92565b60006040518083038185875af1925050503d8060008114611e61576040519150601f19603f3d011682016040523d82523d6000602084013e611e66565b606091505b5050905080610b0c576040516322092f2f60e11b815260040160405180910390fd5b60095460ff1615611eac57604051636f1dac1d60e01b815260040160405180910390fd5b6119a533838360006136a1565b6000546001600160a01b03163314611ee45760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f541615e167511d757a7067a700eb54431b256bb458dfdce0ac58bf2ed0aefd4491a35050565b6000546001600160a01b03163314611f635760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038316600081815260086020908152604091829020805469ffffffffffffffffff0019166101006001600160401b03881690810260ff60481b191691909117600160481b60ff8816908102919091179092558351908152918201527fe6996b7f03e9bd02228b99d3d946932e3197f505f60542c4cfbc919441d8a4e6910160405180910390a2505050565b6001546001600160a01b0316331480159061201b57506000546001600160a01b03163314155b1561203957604051636b29334f60e01b815260040160405180910390fd5b60095460ff161561205d57604051636f1dac1d60e01b815260040160405180910390fd5b6009805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6000546001600160a01b031633146120c05760405163c383977560e01b815260040160405180910390fd5b60006005886001600160601b0316815481106120de576120de61588c565b90600052602060002090600c0201905060016001600160601b0316886001600160601b031614158015612140575080546005805488926001600160601b031690811061212c5761212c61588c565b90600052602060002090600c020160020154115b1561215e57604051639717078960e01b815260040160405180910390fd5b60005b60018201548110156121d9578660058360010183815481106121855761218561588c565b9060005260206000200154815481106121a0576121a061588c565b90600052602060002090600c02016002015410156121d157604051639717078960e01b815260040160405180910390fd5b600101612161565b5060028101869055805460ff60601b1916600160601b881515021781556003810185905560048082018590556005820184905561221c9060068301908490614d91565b50876001600160601b03167f709b1f5fda58af9a4f52dacd1ec404840a8148455700cce155a2bd8cf127ef1a88888888888860405161226096959493929190615aae565b60405180910390a25050505050505050565b6000600783815481106122875761228761588c565b906000526020600020906004020160030182815481106122a9576122a961588c565b90600052602060002090600b020160010154905092915050565b61232960405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6007838154811061233c5761233c61588c565b9060005260206000209060040201600301828154811061235e5761235e61588c565b90600052602060002090600b0201604051806101600160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820180548060200260200160405190810160405280929190818152602001828054801561240d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116123ef575b5050509183525050600782015460208201526008820154604082015260098201546001600160a01b03166060820152600a909101546080909101529392505050565b6000600782815481106124645761246461588c565b600091825260209091206004918202019150600182015460ff16600481111561248f5761248f615341565b146124ad57604051638794ce4b60e01b815260040160405180910390fd5b6001810154610100900460ff16156124d85760405163c977f8d360e01b815260040160405180910390fd5b60006124e383611363565b505060018301805461010061ff001990911617905582546040518281529192508491600160601b9091046001600160a01b0316907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a3815460405163188d362b60e11b81526004810185905260248101839052600160601b9091046001600160a01b03169063311a6c56906044015b600060405180830381600087803b15801561259757600080fd5b505af11580156125ab573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146125df5760405163c383977560e01b815260040160405180910390fd5b8660058a6001600160601b0316815481106125fc576125fc61588c565b90600052602060002090600c020160020154111561262d57604051639717078960e01b815260040160405180910390fd5b805160000361264f5760405163402585f560e01b815260040160405180910390fd5b6001600160601b03891661267657604051631ef4f64960e01b815260040160405180910390fd5b60058054600181018255600091825290600c82027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905b8351811015612738578381815181106126c9576126c961588c565b6020026020010151600014806126fc575060065484518590839081106126f1576126f161588c565b602002602001015110155b1561271a57604051633d58a98960e11b815260040160405180910390fd5b61273083858381518110610bc857610bc861588c565b6001016126ae565b5060016000908152600a8201602052604090205460ff1661276c576040516306351b3d60e31b815260040160405180910390fd5b80546001600160601b0319166001600160601b038c1617815560408051600081526020810191829052516127a4916001840191614dcf565b50805460ff60601b1916600160601b8b15150217815560028101899055600381018890556004808201889055600582018790556127e79060068301908790614d91565b50600480546040516311de995760e21b81526001600160a01b039091169163477a655c91612819918691899101615ae1565b600060405180830381600087803b15801561283357600080fd5b505af1158015612847573d6000803e3d6000fd5b5050505060058b6001600160601b0316815481106128675761286761588c565b600091825260208083206001600c909302018201805492830181558352909120018290556040516001600160601b03808d1691908416907f550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee6906128d7908e908e908e908e908e908e908d90615afa565b60405180910390a35050505050505050505050565b600681815481106128fc57600080fd5b6000918252602090912001546001600160a01b0316905081565b60008060006007848154811061292e5761292e61588c565b6000918252602090912060049091020190506003600182015460ff16600481111561295b5761295b615341565b036129b3576002810154815460058054929550916001600160601b039091169081106129895761298961588c565b600091825260209091206009600c90920201015460028201546129ac9190615a66565b91506129bc565b60009250600091505b50915091565b6000546001600160a01b031633146129ed5760405163c383977560e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000612a1a82613507565b341015612a3a57604051630e3360f160e21b815260040160405180910390fd5b61126183836000346146a8565b6000546001600160a01b03163314612a725760405163c383977560e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b612a9d83611c89565b341015612abd57604051633191f8f160e01b815260040160405180910390fd5b600060078481548110612ad257612ad261588c565b6000918252602090912060049091020190506003600182015460ff166004811115612aff57612aff615341565b14612b1d576040516337cdefcb60e21b815260040160405180910390fd5b60038101805460009190612b33906001906158b8565b81548110612b4357612b4361588c565b90600052602060002090600b020190506006816000015481548110612b6a57612b6a61588c565b6000918252602090912001546001600160a01b03163314612b9e5760405163065f245f60e01b815260040160405180910390fd5b8154815460038401805460018101825560009182526020909120600580546001600160601b0390951694600b9093029091019184908110612be157612be161588c565b90600052602060002090600c020160050154846003015410612cea576005836001600160601b031681548110612c1957612c1961588c565b60009182526020909120600c9091020154600580546001600160601b0390921694509084908110612c4c57612c4c61588c565b60009182526020808320858452600a600c90930201919091019052604090205460ff16612c7857600191505b84546001600160601b03848116911614612cea57845460038601546001600160601b0390911690612cab906001906158b8565b6040516001600160601b03861681528a907f736e3f52761298c8c0823e1ebf482ed3c5ecb304f743d2d91a7c006e8e8d7a1f9060200160405180910390a45b84546001600160601b0319166001600160601b038416908117865560018601805460ff1916905542600287015560058054600092908110612d2d57612d2d61588c565b90600052602060002090600c02019050806004015434612d4d9190615a19565b8260030181905550612d6781600201548260030154614983565b60018084019190915534600284015583835560045460038801546001600160a01b039091169163d09f392d918c91612d9e916158b8565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b158015612ddc57600080fd5b505af1158015612df0573d6000803e3d6000fd5b505086548454149150612ed690505784546003870154612e12906001906158b8565b83546040519081528b907fcbe7939a71f0b369c7471d760a0a99b60b7bb010ee0406cba8a46679d1ea77569060200160405180910390a46006826000015481548110612e6057612e6061588c565b60009182526020909120015460038301546040516302dbb79560e61b81526001600160a01b039092169163b6ede54091612ea3918d918d918d9190600401615b77565b600060405180830381600087803b158015612ebd57600080fd5b505af1158015612ed1573d6000803e3d6000fd5b505050505b8554604051600160601b9091046001600160a01b0316908a907f9c9b64db9e130f48381bf697abf638e73117dbfbfd7a4484f2da3ba188f4187d90600090a3887f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b916000604051612f4691906158e8565b60405180910390a2505050505050505050565b60008060078381548110612f6f57612f6f61588c565b906000526020600020906004020190508060030160018260030180549050612f9791906158b8565b81548110612fa757612fa761588c565b90600052602060002090600b020160030154915050919050565b6000546001600160a01b03163314612fec5760405163c383977560e01b815260040160405180910390fd5b6006805460018101825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f810180546001600160a01b0319166001600160a01b0385169081179091556040519192909183917f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a35050565b600080600784815481106130805761308061588c565b906000526020600020906004020190506000600182600301805490506130a691906158b8565b905060008260030182815481106130bf576130bf61588c565b600091825260208220600b909102019150600184015460ff1660048111156130e9576130e9615341565b1461310757604051638285c4ef60e01b815260040160405180910390fd5b600060068260000154815481106131205761312061588c565b6000918252602082200154600a8401546001600160a01b039091169250905b8781108015613155575060038401546006850154105b1561335d5760006001600160a01b03841663d2b8035a8b8461317681615ba7565b95506131829087615a66565b6040516001600160e01b031960e085901b168152600481019290925260248201526044016020604051808303816000875af11580156131c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e99190615bc0565b90506001600160a01b0381166131ff575061313f565b6004805460018701546040516310f0b12f60e11b81526001600160a01b03909216926321e1625e92613235928692909101615bdd565b600060405180830381600087803b15801561324f57600080fd5b505af1158015613263573d6000803e3d6000fd5b50505060068601546040518c92506001600160a01b038416917f6119cf536152c11e0a9a6c22f3953ce4ecc93ee54fa72ffa326ffabded21509b916132b0918b8252602082015260400190565b60405180910390a36006850180546001810182556000828152602090200180546001600160a01b0319166001600160a01b03841617905560038601549054036133575760048054604051632e96bc2360e11b81529182018c9052602482018890526001600160a01b031690635d2d784690604401600060405180830381600087803b15801561333e57600080fd5b505af1158015613352573d6000803e3d6000fd5b505050505b5061313f565b8084600a0160008282546133719190615a66565b90915550505060069092015494505050505092915050565b60006133ce8261041b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061350792505050565b949350505050565b6000546001600160a01b031633146134015760405163c383977560e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526008602052604081205460ff1661345c5760405163e51cf7bf60e01b815260040160405180910390fd5b613467858585613389565b82101561348757604051630e3360f160e21b815260040160405180910390fd5b61349c6001600160a01b038416333085614992565b6134b9576040516312171d8360e31b815260040160405180910390fd5b6134fd8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506146a89050565b9695505050505050565b600080600061351584614a6e565b5091509150806005836001600160601b0316815481106135375761353761588c565b90600052602060002090600c0201600401546133ce91906159ec565b6006600061355f6139a5565b8054909150600160401b900460ff1680613586575080546001600160401b03808416911610155b156135a35760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff19909216821717825560098054610100600160a81b0319166101006001600160a01b03871602179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b60006007828154811061363f5761363f61588c565b600091825260209091206003600490920201015492915050565b60006005836001600160601b0316815481106136775761367761588c565b60009182526020808320948352600c91909102909301600a0190925250604090205460ff16919050565b60006001600160601b03841615806136c457506005546001600160601b03851610155b156136dc576136d4826005614af5565b5060006133ce565b821580159061371757506005846001600160601b0316815481106137025761370261588c565b90600052602060002090600c02016002015483105b15613727576136d4826006614af5565b600480546040516303d9595760e31b81526001600160a01b03888116938201939093526001600160601b03871660248201526044810186905260009283928392911690631ecacab8906064016060604051808303816000875af1158015613792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b69190615bf6565b9194509250905060008160098111156137d1576137d1615341565b141580156137f1575060018160098111156137ee576137ee615341565b14155b1561380c576138008582614af5565b600093505050506133ce565b600181600981111561382057613820615341565b0361383157600193505050506133ce565b821561385e5760025461384f906001600160a01b0316893086614992565b61385e57613800856002614af5565b811561388a5760025461387b906001600160a01b031689846145b7565b61388a57613800856003614af5565b600480546040516355601d6960e11b81526001600160a01b038b8116938201939093526001600160601b038a16602482015260448101869052606481018590526084810189905291169063aac03ad29060a401600060405180830381600087803b1580156138f757600080fd5b505af115801561390b573d6000803e3d6000fd5b5060019b9a5050505050505050505050565b806005846001600160601b03168154811061393a5761393a61588c565b60009182526020808320868452600c92909202909101600a0190526040808220805460ff19169315159390931790925590518215159184916001600160601b038716917fb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc7991a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6139d1614c3e565b600080546001600160a01b03199081166001600160a01b038e81169190911783556001805483168e83161781556002805484168e84161781556003805485168e851617905560048054851688851617905560098054610100600160a81b031916610100888616021790556006805481875291820190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40018054909316918b1691821790925560405190927f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a36005805460010181556000908152600480546040516311de995760e21b81526001600160a01b039091169263477a655c92613adc92889101615ae1565b600060405180830381600087803b158015613af657600080fd5b505af1158015613b0a573d6000803e3d6000fd5b5050600580546001810182556000918252600c027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160601b031916815560408051838152602081019091529093509150508051613b78916001840191602090910190614dcf565b50805460ff60601b1916600160601b881515021781558551600282015560208601516003820155604086015160048083019190915560608701516005830155613bc79060068301908790614d91565b50600480546040516311de995760e21b81526001600160a01b039091169163477a655c91613bfa91600191899101615ae1565b600060405180830381600087803b158015613c1457600080fd5b505af1158015613c28573d6000803e3d6000fd5b506000925060019150613c389050565b604051908082528060200260200182016040528015613c61578160200160208202803683370190505b509050600181600081518110613c7957613c7961588c565b602090810291909101015281546001600160601b031660017f550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee68a8a600060200201518b600160200201518c600260200201518d600360200201518d89604051613ce89796959493929190615afa565b60405180910390a3613cfd600180600161391d565b50505050505050505050505050565b6000806007836000015181548110613d2657613d2661588c565b90600052602060002090600402019050600081600301846020015181548110613d5157613d5161588c565b90600052602060002090600b0201905060006006826000015481548110613d7a57613d7a61588c565b60009182526020808320919091015487519188015160e089015160808a015160a08b01516040516333ac937b60e11b8152600481019690965260248601939093526044850191909152606484015260848301526001600160a01b03169250829063675926f69060a401602060405180830381865afa158015613e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e249190615a79565b9050612710811115613e3557506127105b6000612710613e4483826158b8565b8560010154613e5391906159ec565b613e5d9190615a19565b90506000846006018860e0015181548110613e7a57613e7a61588c565b6000918252602090912001546004805460405163965af6c760e01b81526001600160a01b03938416945092169163965af6c791613ebb918591879101615bdd565b600060405180830381600087803b158015613ed557600080fd5b505af1158015613ee9573d6000803e3d6000fd5b505060048054604051633c85b79360e21b8152600094508493506001600160a01b039091169163f216de4c91613f23918791899101615bdd565b60408051808303816000875af1158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190615c29565b91509150808a60c001818151613f7b9190615a66565b90525060208a01518a516001600160a01b0385167f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e788613fba86615c4d565b60098d0154604051613fdc9392916000916001600160a01b0390911690615c69565b60405180910390a48115806140715750895160208b015160e08c015160405163ba66fde760e01b81526004810193909352602483019190915260448201526001600160a01b0387169063ba66fde790606401602060405180830381865afa15801561404b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061406f91906158cb565b155b156140d8576004805460405163b5d69e9960e01b81526001600160a01b039091169163b5d69e99916140a591879101614ff5565b600060405180830381600087803b1580156140bf57600080fd5b505af11580156140d3573d6000803e3d6000fd5b505050505b60018a606001516140e991906158b8565b8a60e001511480156140fd575060408a0151155b156141a75760098701546000546002890154614126926001600160a01b03908116921690614c65565b60005460c08b0151600254614149926001600160a01b03918216929116906145b7565b5060208a01518a5160c08c015160028a015460098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf49361419e93909290916001600160a01b0390911690615c8d565b60405180910390a35b50505060c0909601519695505050505050565b600060078260000151815481106141d3576141d361588c565b906000526020600020906004020190506000816003018360200151815481106141fe576141fe61588c565b90600052602060002090600b02019050600060068260000154815481106142275761422761588c565b6000918252602080832090910154865191870151606088015160e08901516001600160a01b039093169550859363675926f69390929161426691615cac565b60808a015160a08b01516040516001600160e01b031960e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401602060405180830381865afa1580156142c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ea9190615a79565b90506127108111156142fb57506127105b60008360060186606001518760e001516143159190615cac565b815481106143255761432561588c565b600091825260208220015460018601546001600160a01b03909116925061434c9084614983565b6004805460405163965af6c760e01b81529293506001600160a01b03169163965af6c79161437e918691869101615bdd565b600060405180830381600087803b15801561439857600080fd5b505af11580156143ac573d6000803e3d6000fd5b5050505060006143cf88604001518960c001516143c99190615a19565b85614983565b9050808660080160008282546143e59190615a66565b92505081905550600061440b896040015188600201546144059190615a19565b86614983565b9050808760070160008282546144219190615a66565b909155505060025461443d906001600160a01b031685846145b7565b506009870154614457906001600160a01b03168583614c65565b6020890151895160098901546040516001600160a01b03888116927f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e7926144a7928c928a928a9290911690615c69565b60405180910390a46001896060015160026144c291906159ec565b6144cc91906158b8565b8960e00151036145ac57600087600801548a60c001516144ec91906158b8565b905060008860070154896002015461450491906158b8565b90508115158061451357508015155b1561181c57811561453d5760005460025461453b916001600160a01b039182169116846145b7565b505b8015614562576009890154600054614562916001600160a01b03908116911683614c65565b60208b01518b5160098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf4916128d791879187916001600160a01b0390911690615c8d565b505050505050505050565b6000806000856001600160a01b031685856040516024016145d9929190615bdd565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161460e9190615a92565b6000604051808303816000865af19150503d806000811461464b576040519150601f19603f3d011682016040523d82523d6000602084013e614650565b606091505b50915091508180156134fd5750805115806134fd5750808060200190518101906134fd91906158cb565b6000546001600160a01b031633146146a55760405163c383977560e01b815260040160405180910390fd5b50565b60008060006146b686614a6e565b92505091506005826001600160601b0316815481106146d7576146d761588c565b60009182526020808320848452600a600c90930201919091019052604090205460ff166147175760405163b34eb75d60e01b815260040160405180910390fd5b600780546001810182556000918252600160601b33026001600160601b03851617600482027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6888101918255427fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a9091015560068054929650909291849081106147a2576147a261588c565b6000918252602082200154600580546001600160a01b039092169350906001600160601b0387169081106147d8576147d861588c565b60009182526020808320600387018054600181018255908552918420600c909302019350600b0201906001600160a01b038a16156148235761481e8a8460040154611210565b614829565b82600401545b9050614835818a615a19565b6003808401919091558683556002840154908401546148549190614983565b6001830155600282018990556009820180546001600160a01b0319166001600160a01b038c8116919091179091556004805460405163d09f392d60e01b81529182018b9052600060248301529091169063d09f392d90604401600060405180830381600087803b1580156148c757600080fd5b505af11580156148db573d6000803e3d6000fd5b50505050836001600160a01b031663b6ede540898e8e86600301546040518563ffffffff1660e01b81526004016149159493929190615b77565b600060405180830381600087803b15801561492f57600080fd5b505af1158015614943573d6000803e3d6000fd5b50506040513392508a91507f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a350505050505050949350505050565b600061271061125783856159ec565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516149f79190615a92565b6000604051808303816000865af19150503d8060008114614a34576040519150601f19603f3d011682016040523d82523d6000602084013e614a39565b606091505b5091509150818015614a63575080511580614a63575080806020019051810190614a6391906158cb565b979650505050505050565b60008060006040845110614ae3575050506020810151604082015160608301516001600160601b0383161580614aaf57506005546001600160601b03841610155b15614ab957600192505b81600003614ac657600391505b801580614ad557506006548110155b15614ade575060015b614aee565b506001915060039050815b9193909250565b6001826001811115614b0957614b09615341565b03614b12575050565b6002816009811115614b2657614b26615341565b03614b4457604051630f323ed960e11b815260040160405180910390fd5b6003816009811115614b5857614b58615341565b03614b765760405163e45e13a360e01b815260040160405180910390fd5b6004816009811115614b8a57614b8a615341565b03614ba857604051631d91d0ed60e31b815260040160405180910390fd5b6005816009811115614bbc57614bbc615341565b03614bda57604051637c84af5160e01b815260040160405180910390fd5b6006816009811115614bee57614bee615341565b03614c0c57604051630caac6b360e31b815260040160405180910390fd5b6009816009811115614c2057614c20615341565b03611bcb57604051633e57962f60e21b815260040160405180910390fd5b614c46614ca8565b614c6357604051631afcd79f60e31b815260040160405180910390fd5b565b6001600160a01b038316614c94576009546119a5906001600160a01b0384811691849161010090910416614cc2565b610b0c6001600160a01b03841683836145b7565b6000614cb26139a5565b54600160401b900460ff16919050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015614cf157505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015614d2c57600080fd5b505af1158015614d40573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038516935063a9059cbb925061257d915086908690600401615bdd565b60405180608001604052806004906020820280368337509192915050565b8260048101928215614dbf579160200282015b82811115614dbf578251825591602001919060010190614da4565b50614dcb929150614e09565b5090565b828054828255906000526020600020908101928215614dbf5791602002820182811115614dbf578251825591602001919060010190614da4565b5b80821115614dcb5760008155600101614e0a565b6001600160a01b03811681146146a557600080fd5b8035614e3e81614e1e565b919050565b600060208284031215614e5557600080fd5b8135614e6081614e1e565b9392505050565b80356001600160601b0381168114614e3e57600080fd5b600080600060608486031215614e9357600080fd5b8335614e9e81614e1e565b9250614eac60208501614e67565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614efb57614efb614ebd565b604052919050565b600082601f830112614f1457600080fd5b81356001600160401b03811115614f2d57614f2d614ebd565b8060051b614f3d60208201614ed3565b91825260208185018101929081019086841115614f5957600080fd5b6020860192505b838310156134fd578235825260209283019290910190614f60565b80151581146146a557600080fd5b8035614e3e81614f7b565b600080600060608486031215614fa957600080fd5b614fb284614e67565b925060208401356001600160401b03811115614fcd57600080fd5b614fd986828701614f03565b9250506040840135614fea81614f7b565b809150509250925092565b6001600160a01b0391909116815260200190565b60006020828403121561501b57600080fd5b5035919050565b6000806040838503121561503557600080fd5b823561504081614e1e565b946020939093013593505050565b600082601f83011261505f57600080fd5b604051608081016001600160401b038111828210171561508157615081614ebd565b60405280608084018581111561509657600080fd5b845b818110156150b0578035835260209283019201615098565b509195945050505050565b600082601f8301126150cc57600080fd5b81356001600160401b038111156150e5576150e5614ebd565b6150f8601f8201601f1916602001614ed3565b81815284602083860101111561510d57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060008060006102208c8e03121561514c57600080fd5b8b3561515781614e1e565b9a5060208c013561516781614e1e565b995061517560408d01614e33565b985061518360608d01614e33565b975061519160808d01614e33565b965061519f60a08d01614f89565b95506151ae8d60c08e0161504e565b94506151be8d6101408e0161504e565b93506101c08c01356001600160401b038111156151da57600080fd5b6151e68e828f016150bb565b9350506151f66101e08d01614e33565b91506152056102008d01614e33565b90509295989b509295989b9093969950565b60008060006060848603121561522c57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561525557600080fd5b61126182614e67565b8060005b6004811015610b0c578151845260209384019390910190600101615262565b60808101611264828461525e565b600080604083850312156152a257600080fd5b82356152ad81614e1e565b915060208301356001600160401b038111156152c857600080fd5b6152d4858286016150bb565b9150509250929050565b60005b838110156152f95781810151838201526020016152e1565b50506000910152565b6000815180845261531a8160208601602086016152de565b601f01601f19169290920160200192915050565b6020815260006112616020830184615302565b634e487b7160e01b600052602160045260246000fd5b6005811061537557634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03861681526001600160a01b038516602082015260a081016153a56040830186615357565b9215156060820152608001529392505050565b6000806000606084860312156153cd57600080fd5b83356153d881614e1e565b92506020840135915060408401356001600160401b038111156153fa57600080fd5b615406868287016150bb565b9150509250925092565b6000806040838503121561542357600080fd5b61504083614e67565b6000806040838503121561543f57600080fd5b823561544a81614e1e565b9150602083013561545a81614f7b565b809150509250929050565b60008060006060848603121561547a57600080fd5b833561548581614e1e565b925060208401356001600160401b03811681146154a157600080fd5b9150604084013560ff81168114614fea57600080fd5b6000806000806000806000610140888a0312156154d357600080fd5b6154dc88614e67565b965060208801356154ec81614f7b565b955060408801359450606088013593506080880135925060a088013591506155178960c08a0161504e565b905092959891949750929550565b6000806040838503121561553857600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b828110156155825781516001600160a01b031686526020958601959091019060010161555b565b5093949350505050565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c0820152600060c083015161016060e08401526155e6610180840182615547565b905060e084015161010084015261010084015161012084015261012084015161561b6101408501826001600160a01b03169052565b506101408401516101608401528091505092915050565b60008060008060008060008060006101808a8c03121561565157600080fd5b61565a8a614e67565b985060208a013561566a81614f7b565b975060408a0135965060608a0135955060808a0135945060a08a013593506156958b60c08c0161504e565b92506101408a01356001600160401b038111156156b157600080fd5b6156bd8c828d016150bb565b9250506101608a01356001600160401b038111156156da57600080fd5b6156e68c828d01614f03565b9150509295985092959850929598565b6000806040838503121561570957600080fd5b8235915060208301356001600160401b038111156152c857600080fd5b60008060006060848603121561573b57600080fd5b833592506020840135915060408401356001600160401b038111156153fa57600080fd5b60008083601f84011261577157600080fd5b5081356001600160401b0381111561578857600080fd5b6020830191508360208285010111156157a057600080fd5b9250929050565b6000806000604084860312156157bc57600080fd5b83356001600160401b038111156157d257600080fd5b6157de8682870161575f565b9094509250506020840135614fea81614e1e565b60008060008060006080868803121561580a57600080fd5b8535945060208601356001600160401b0381111561582757600080fd5b6158338882890161575f565b909550935050604086013561584781614e1e565b949793965091946060013592915050565b60006020828403121561586a57600080fd5b81356001600160401b0381111561588057600080fd5b6133ce848285016150bb565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115611264576112646158a2565b6000602082840312156158dd57600080fd5b8151614e6081614f7b565b602081016112648284615357565b6001815b600184111561593157808504811115615915576159156158a2565b600184161561592357908102905b60019390931c9280026158fa565b935093915050565b60008261594857506001611264565b8161595557506000611264565b816001811461596b576002811461597557615991565b6001915050611264565b60ff841115615986576159866158a2565b50506001821b611264565b5060208310610133831016604e8410600b84101617156159b4575081810a611264565b6159c160001984846158f6565b80600019048211156159d5576159d56158a2565b029392505050565b600061126160ff841683615939565b8082028115828204841417611264576112646158a2565b634e487b7160e01b600052601260045260246000fd5b600082615a2857615a28615a03565b500490565b600080600060608486031215615a4257600080fd5b83516020850151909350615a5581614f7b565b6040850151909250614fea81614f7b565b80820180821115611264576112646158a2565b600060208284031215615a8b57600080fd5b5051919050565b60008251615aa48184602087016152de565b9190910192915050565b6000610120820190508715158252866020830152856040830152846060830152836080830152614a6360a083018461525e565b8281526040602082015260006133ce6040830184615302565b600061014082018915158352886020840152876040840152866060840152856080840152615b2b60a084018661525e565b610140610120840152835190819052602084019061016084019060005b81811015615b66578351835260209384019390920191600101615b48565b50909b9a5050505050505050505050565b848152836020820152608060408201526000615b966080830185615302565b905082606083015295945050505050565b600060018201615bb957615bb96158a2565b5060010190565b600060208284031215615bd257600080fd5b8151614e6081614e1e565b6001600160a01b03929092168252602082015260400190565b600080600060608486031215615c0b57600080fd5b8351602085015160408601519194509250600a8110614fea57600080fd5b60008060408385031215615c3c57600080fd5b505080516020909101519092909150565b6000600160ff1b8201615c6257615c626158a2565b5060000390565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091526001600160a01b0316604082015260600190565b600082615cbb57615cbb615a03565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220a4155dec443a9c5d136f16c8c11bf35431e34b7e440060d5ff361d5e1f88354264736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "AcceptedFeeToken(address,bool)": { - "details": "To be emitted when an ERC20 token is added or removed as a method to pay fees.", - "params": { - "_accepted": "Whether the token is accepted or not.", - "_token": "The ERC20 token." - } - }, - "DisputeCreation(uint256,address)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_arbitrable": "The contract which created the dispute.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "NewCurrencyRate(address,uint64,uint8)": { - "details": "To be emitted when the fee for a particular ERC20 token is updated.", - "params": { - "_feeToken": "The ERC20 token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrable": "The arbitrable receiving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "addNewDisputeKit(address)": { - "details": "Add a new supported dispute kit module to the court.", - "params": { - "_disputeKitAddress": "The address of the dispute kit contract." - } - }, - "appeal(uint256,uint256,bytes)": { - "details": "Appeals the ruling of a specified dispute. Note: Access restricted to the Dispute Kit for this `disputeID`.", - "params": { - "_disputeID": "The ID of the dispute.", - "_extraData": "Extradata for the dispute. Can be required during court jump.", - "_numberOfChoices": "Number of choices for the dispute. Can be required during court jump." - } - }, - "appealCost(uint256)": { - "details": "Gets the cost of appealing a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "cost": "The appeal cost." - } - }, - "appealPeriod(uint256)": { - "details": "Gets the start and the end of a specified dispute's current appeal period.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "end": "The end of the appeal period.", - "start": "The start of the appeal period." - } - }, - "arbitrationCost(bytes)": { - "details": "Compute the cost of arbitration denominated in ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes)." - }, - "returns": { - "cost": "The arbitration cost in ETH." - } - }, - "arbitrationCost(bytes,address)": { - "details": "Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeToken": "The ERC20 token used to pay fees." - }, - "returns": { - "cost": "The arbitration cost in `_feeToken`." - } - }, - "changeAcceptedFeeTokens(address,bool)": { - "details": "Changes the supported fee tokens.", - "params": { - "_accepted": "Whether the token is supported or not as a method of fee payment.", - "_feeToken": "The fee token." - } - }, - "changeCurrencyRates(address,uint64,uint8)": { - "details": "Changes the currency rate of a fee token.", - "params": { - "_feeToken": "The fee token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "changeGuardian(address)": { - "details": "Changes the `guardian` storage variable.", - "params": { - "_guardian": "The new value for the `guardian` storage variable." - } - }, - "changeJurorProsecutionModule(address)": { - "details": "Changes the `jurorProsecutionModule` storage variable.", - "params": { - "_jurorProsecutionModule": "The new value for the `jurorProsecutionModule` storage variable." - } - }, - "changePinakion(address)": { - "details": "Changes the `pinakion` storage variable.", - "params": { - "_pinakion": "The new value for the `pinakion` storage variable." - } - }, - "changeSortitionModule(address)": { - "details": "Changes the `_sortitionModule` storage variable. Note that the new module should be initialized for all courts.", - "params": { - "_sortitionModule": "The new value for the `sortitionModule` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createCourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],bytes,uint256[])": { - "details": "Creates a court under a specified parent court.", - "params": { - "_alpha": "The `alpha` property value of the court.", - "_feeForJuror": "The `feeForJuror` property value of the court.", - "_hiddenVotes": "The `hiddenVotes` property value of the court.", - "_jurorsForCourtJump": "The `jurorsForCourtJump` property value of the court.", - "_minStake": "The `minStake` property value of the court.", - "_parent": "The `parent` property value of the court.", - "_sortitionExtraData": "Extra data for sortition module.", - "_supportedDisputeKits": "Indexes of dispute kits that this court will support.", - "_timesPerPeriod": "The `timesPerPeriod` property value of the court." - } - }, - "createDispute(uint256,bytes)": { - "details": "Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "createDispute(uint256,bytes,address,uint256)": { - "details": "Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeAmount": "Amount of the ERC20 token used to pay fees.", - "_feeToken": "The ERC20 token used to pay fees.", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws jurors for the dispute. Can be called in parts.", - "params": { - "_disputeID": "The ID of the dispute.", - "_iterations": "The number of iterations to run." - }, - "returns": { - "nbDrawnJurors": "The total number of jurors drawn in the round." - } - }, - "enableDisputeKits(uint96,uint256[],bool)": { - "details": "Adds/removes court's support for specified dispute kits.", - "params": { - "_courtID": "The ID of the court.", - "_disputeKitIDs": "The IDs of dispute kits which support should be added/removed.", - "_enable": "Whether add or remove the dispute kits from the court." - } - }, - "execute(uint256,uint256,uint256)": { - "details": "Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts. Note: Reward distributions are forbidden during pause.", - "params": { - "_disputeID": "The ID of the dispute.", - "_iterations": "The number of iterations to run.", - "_round": "The appeal round." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "executeRuling(uint256)": { - "details": "Executes a specified dispute's ruling.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Gets the number of rounds for a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "_0": "The number of rounds." - } - }, - "getNumberOfVotes(uint256)": { - "details": "Gets the number of votes permitted for the specified dispute in the latest round.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "getPnkAtStakePerJuror(uint256,uint256)": { - "details": "Gets the PNK at stake per juror for a specified dispute and round.", - "params": { - "_disputeID": "The ID of the dispute.", - "_round": "The round to get the info for." - }, - "returns": { - "_0": "pnkAtStakePerJuror The PNK at stake per juror." - } - }, - "getRoundInfo(uint256,uint256)": { - "details": "Gets the round info for a specified dispute and round.This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.", - "params": { - "_disputeID": "The ID of the dispute.", - "_round": "The round to get the info for." - }, - "returns": { - "_0": "round The round info." - } - }, - "getTimesPerPeriod(uint96)": { - "details": "Gets the timesPerPeriod array for a given court.", - "params": { - "_courtID": "The ID of the court to get the times from." - }, - "returns": { - "timesPerPeriod": "The timesPerPeriod array for the given court." - } - }, - "initialize(address,address,address,address,address,bool,uint256[4],uint256[4],bytes,address,address)": { - "details": "Initializer (constructor equivalent for upgradable contracts).", - "params": { - "_courtParameters": "Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).", - "_disputeKit": "The address of the default dispute kit.", - "_governor": "The governor's address.", - "_guardian": "The guardian's address.", - "_hiddenVotes": "The `hiddenVotes` property value of the general court.", - "_jurorProsecutionModule": "The address of the juror prosecution module.", - "_pinakion": "The address of the token contract.", - "_sortitionExtraData": "The extra data for sortition module.", - "_sortitionModuleAddress": "The sortition module responsible for sortition of the jurors.", - "_timesPerPeriod": "The `timesPerPeriod` property value of the general court.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isDisputeKitJumping(uint256)": { - "details": "Returns true if the dispute kit will be switched to a parent DK.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "_0": "Whether DK will be switched or not." - } - }, - "isSupported(uint96,uint256)": { - "details": "Checks if a given dispute kit is supported by a given court.", - "params": { - "_courtID": "The ID of the court to check the support for.", - "_disputeKitID": "The ID of the dispute kit to check the support for." - }, - "returns": { - "_0": "Whether the dispute kit is supported or not." - } - }, - "passPeriod(uint256)": { - "details": "Passes the period of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "pause()": { - "details": "Pause staking and reward execution. Can only be done by guardian or governor." - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setStake(uint96,uint256)": { - "details": "Sets the caller's stake in a court.", - "params": { - "_courtID": "The ID of the court.", - "_newStake": "The new stake. Note that the existing delayed stake will be nullified as non-relevant." - } - }, - "setStakeBySortitionModule(address,uint96,uint256)": { - "details": "Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.", - "params": { - "_account": "The account whose stake is being set.", - "_courtID": "The ID of the court.", - "_newStake": "The new stake." - } - }, - "transferBySortitionModule(address,uint256)": { - "details": "Transfers PNK to the juror by SortitionModule.", - "params": { - "_account": "The account of the juror whose PNK to transfer.", - "_amount": "The amount to transfer." - } - }, - "unpause()": { - "details": "Unpause staking and reward execution. Can only be done by governor." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "KlerosCore Core arbitrator contract for Kleros v2. Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 449, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 451, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "guardian", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 454, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "pinakion", - "offset": 0, - "slot": "2", - "type": "t_contract(IERC20)77" - }, - { - "astId": 456, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "jurorProsecutionModule", - "offset": 0, - "slot": "3", - "type": "t_address" - }, - { - "astId": 459, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "sortitionModule", - "offset": 0, - "slot": "4", - "type": "t_contract(ISortitionModule)9946" - }, - { - "astId": 463, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "courts", - "offset": 0, - "slot": "5", - "type": "t_array(t_struct(Court)368_storage)dyn_storage" - }, - { - "astId": 467, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "disputeKits", - "offset": 0, - "slot": "6", - "type": "t_array(t_contract(IDisputeKit)9795)dyn_storage" - }, - { - "astId": 471, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "disputes", - "offset": 0, - "slot": "7", - "type": "t_array(t_struct(Dispute)385_storage)dyn_storage" - }, - { - "astId": 477, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "currencyRates", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_contract(IERC20)77,t_struct(CurrencyRate)434_storage)" - }, - { - "astId": 479, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "paused", - "offset": 0, - "slot": "9", - "type": "t_bool" - }, - { - "astId": 481, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "wNative", - "offset": 1, - "slot": "9", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "base": "t_address", - "encoding": "dynamic_array", - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_contract(IDisputeKit)9795)dyn_storage": { - "base": "t_contract(IDisputeKit)9795", - "encoding": "dynamic_array", - "label": "contract IDisputeKit[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Court)368_storage)dyn_storage": { - "base": "t_struct(Court)368_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreBase.Court[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Dispute)385_storage)dyn_storage": { - "base": "t_struct(Dispute)385_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)410_storage)dyn_storage": { - "base": "t_struct(Round)410_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)4_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[4]", - "numberOfBytes": "128" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IArbitrableV2)9544": { - "encoding": "inplace", - "label": "contract IArbitrableV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeKit)9795": { - "encoding": "inplace", - "label": "contract IDisputeKit", - "numberOfBytes": "20" - }, - "t_contract(IERC20)77": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_contract(ISortitionModule)9946": { - "encoding": "inplace", - "label": "contract ISortitionModule", - "numberOfBytes": "20" - }, - "t_enum(Period)342": { - "encoding": "inplace", - "label": "enum KlerosCoreBase.Period", - "numberOfBytes": "1" - }, - "t_mapping(t_contract(IERC20)77,t_struct(CurrencyRate)434_storage)": { - "encoding": "mapping", - "key": "t_contract(IERC20)77", - "label": "mapping(contract IERC20 => struct KlerosCoreBase.CurrencyRate)", - "numberOfBytes": "32", - "value": "t_struct(CurrencyRate)434_storage" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_struct(Court)368_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreBase.Court", - "members": [ - { - "astId": 344, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "parent", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 346, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "hiddenVotes", - "offset": 12, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 349, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "children", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 351, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "minStake", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 353, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "alpha", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 355, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "feeForJuror", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 357, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "jurorsForCourtJump", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 361, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "timesPerPeriod", - "offset": 0, - "slot": "6", - "type": "t_array(t_uint256)4_storage" - }, - { - "astId": 365, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "supportedDisputeKits", - "offset": 0, - "slot": "10", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 367, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "disabled", - "offset": 0, - "slot": "11", - "type": "t_bool" - } - ], - "numberOfBytes": "384" - }, - "t_struct(CurrencyRate)434_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreBase.CurrencyRate", - "members": [ - { - "astId": 429, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "feePaymentAccepted", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 431, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "rateInEth", - "offset": 1, - "slot": "0", - "type": "t_uint64" - }, - { - "astId": 433, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "rateDecimals", - "offset": 9, - "slot": "0", - "type": "t_uint8" - } - ], - "numberOfBytes": "32" - }, - "t_struct(Dispute)385_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreBase.Dispute", - "members": [ - { - "astId": 370, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "courtID", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 373, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "arbitrated", - "offset": 12, - "slot": "0", - "type": "t_contract(IArbitrableV2)9544" - }, - { - "astId": 376, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "period", - "offset": 0, - "slot": "1", - "type": "t_enum(Period)342" - }, - { - "astId": 378, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "ruled", - "offset": 1, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 380, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "lastPeriodChange", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 384, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "rounds", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(Round)410_storage)dyn_storage" - } - ], - "numberOfBytes": "128" - }, - "t_struct(Round)410_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreBase.Round", - "members": [ - { - "astId": 387, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "disputeKitID", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 389, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "pnkAtStakePerJuror", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 391, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "totalFeesForJurors", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 393, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "nbVotes", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 395, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "repartitions", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 397, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "pnkPenalties", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 400, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "drawnJurors", - "offset": 0, - "slot": "6", - "type": "t_array(t_address)dyn_storage" - }, - { - "astId": 402, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "sumFeeRewardPaid", - "offset": 0, - "slot": "7", - "type": "t_uint256" - }, - { - "astId": 404, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "sumPnkRewardPaid", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 407, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "feeToken", - "offset": 0, - "slot": "9", - "type": "t_contract(IERC20)77" - }, - { - "astId": 409, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "drawIterations", - "offset": 0, - "slot": "10", - "type": "t_uint256" - } - ], - "numberOfBytes": "352" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/KlerosCore_Proxy.json b/contracts/deployments/arbitrumSepolia/KlerosCore_Proxy.json deleted file mode 100644 index daa50745b..000000000 --- a/contracts/deployments/arbitrumSepolia/KlerosCore_Proxy.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "address": "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xf811a5f75eb3434b36c389d7ab5f9736ed78bf7f17970ad91e07934733076c7d", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "transactionIndex": 2, - "gasUsed": "611101", - "logsBloom": "0x00000000000000000000000020000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000040000000000000000001000000000000000000000000010040000000000000000008000000000020000000000000010000800402000000000000008000000000000000000000001000020000800000000000000000000000080000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000020000000000000000000000000000000004000000000000000060000000001001000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1872bcfb64e06c7b455f793d93e59e29d42887bccb2cf83b483a2a79bdb13487", - "transactionHash": "0xf811a5f75eb3434b36c389d7ab5f9736ed78bf7f17970ad91e07934733076c7d", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 95250346, - "transactionHash": "0xf811a5f75eb3434b36c389d7ab5f9736ed78bf7f17970ad91e07934733076c7d", - "address": "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "topics": [ - "0x44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb2", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000c38f115d001d3b5bbec5e8d44f78c7b61a27d94" - ], - "data": "0x", - "logIndex": 3, - "blockHash": "0x1872bcfb64e06c7b455f793d93e59e29d42887bccb2cf83b483a2a79bdb13487" - }, - { - "transactionIndex": 2, - "blockNumber": 95250346, - "transactionHash": "0xf811a5f75eb3434b36c389d7ab5f9736ed78bf7f17970ad91e07934733076c7d", - "address": "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "topics": [ - "0x3475f0ed7216dd7d453db663a1c3024e4f36cc925521d54edb9d13e022cbee3d", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 4, - "blockHash": "0x1872bcfb64e06c7b455f793d93e59e29d42887bccb2cf83b483a2a79bdb13487" - }, - { - "transactionIndex": 2, - "blockNumber": 95250346, - "transactionHash": "0xf811a5f75eb3434b36c389d7ab5f9736ed78bf7f17970ad91e07934733076c7d", - "address": "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "topics": [ - "0xb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc79", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001" - ], - "data": "0x", - "logIndex": 5, - "blockHash": "0x1872bcfb64e06c7b455f793d93e59e29d42887bccb2cf83b483a2a79bdb13487" - }, - { - "transactionIndex": 2, - "blockNumber": 95250346, - "transactionHash": "0xf811a5f75eb3434b36c389d7ab5f9736ed78bf7f17970ad91e07934733076c7d", - "address": "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 6, - "blockHash": "0x1872bcfb64e06c7b455f793d93e59e29d42887bccb2cf83b483a2a79bdb13487" - } - ], - "blockNumber": 95250346, - "cumulativeGasUsed": "696476", - "status": 1, - "byzantium": true - }, - "args": [ - "0x0766e4B8c4a3aAC9371a5A9D6119E8125Adcfd55", - "0x7b4f3cc5000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c5900000000000000000000000034b944d42cacfc8266955d07a80181d2054aa22500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c38f115d001d3b5bbec5e8d44f78c7b61a27d94000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000200000000000000000000000000baa5068f0bd1417046250a3ede2b1f27e31383bd00000000000000000000000000000000000000000000000000000000000000010500000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"KlerosCoreProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122085e549173d7216435e32cd3998e84d15db68396e4913f125fc39ce47c0997d8764736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122085e549173d7216435e32cd3998e84d15db68396e4913f125fc39ce47c0997d8764736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/PNK.json b/contracts/deployments/arbitrumSepolia/PNK.json deleted file mode 100644 index 5a97a10ee..000000000 --- a/contracts/deployments/arbitrumSepolia/PNK.json +++ /dev/null @@ -1,280 +0,0 @@ -{ - "address": "0x34B944D42cAcfC8266955D07A80181D2054aa225", - "abi": [ - { - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "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": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ] -} diff --git a/contracts/deployments/arbitrumSepolia/PNKFaucet.json b/contracts/deployments/arbitrumSepolia/PNKFaucet.json deleted file mode 100644 index bc24884f9..000000000 --- a/contracts/deployments/arbitrumSepolia/PNKFaucet.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "address": "0x9f6ffc13B685A68ae359fCA128dfE776458Df464", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "amount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "changeAmount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "request", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "withdrewAlready", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x9068f8e4c9858fd0ad2ef1834750aa591a7493a2c59d2a9bc94a8bc196a9c84d", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x9f6ffc13B685A68ae359fCA128dfE776458Df464", - "transactionIndex": 1, - "gasUsed": "450835", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x93a2a1d3710786af401913023f9809e4f0d07adc01b7bc7beb964697f92cc97a", - "transactionHash": "0x9068f8e4c9858fd0ad2ef1834750aa591a7493a2c59d2a9bc94a8bc196a9c84d", - "logs": [], - "blockNumber": 94816329, - "cumulativeGasUsed": "450835", - "status": 1, - "byzantium": true - }, - "args": [ - "0x34B944D42cAcfC8266955D07A80181D2054aa225" - ], - "numDeployments": 1, - "solcInputHash": "464986207bfd65f93de9fcb4daa23259", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"amount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"changeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"withdrewAlready\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/Faucet.sol\":\"Faucet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/token/Faucet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ncontract Faucet {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n IERC20 public token;\\n address public governor;\\n mapping(address => bool) public withdrewAlready;\\n uint256 public amount = 10_000 ether;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(governor) == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n constructor(IERC20 _token) {\\n token = _token;\\n governor = msg.sender;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n function changeGovernor(address _governor) public onlyByGovernor {\\n governor = _governor;\\n }\\n\\n function changeAmount(uint256 _amount) public onlyByGovernor {\\n amount = _amount;\\n }\\n\\n function withdraw() public onlyByGovernor {\\n token.transfer(governor, token.balanceOf(address(this)));\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function request() public {\\n require(\\n !withdrewAlready[msg.sender],\\n \\\"You have used this faucet already. If you need more tokens, please use another address.\\\"\\n );\\n token.transfer(msg.sender, amount);\\n withdrewAlready[msg.sender] = true;\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n function balance() public view returns (uint) {\\n return token.balanceOf(address(this));\\n }\\n}\\n\",\"keccak256\":\"0x5e9b22dbef41d5db3652078c815f7b219c330491976871392d65b40c85e2b5d8\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405269021e19e0c9bab240000060035534801561001e57600080fd5b5060405161065538038061065583398101604081905261003d9161006b565b600080546001600160a01b039092166001600160a01b0319928316179055600180549091163317905561009b565b60006020828403121561007d57600080fd5b81516001600160a01b038116811461009457600080fd5b9392505050565b6105ab806100aa6000396000f3fe608060405234801561001057600080fd5b50600436106100835760003560e01c80630c340a2414610088578063338cdca1146100b15780633ccfd60b146100bb5780635c320516146100c3578063aa8c217c146100d6578063b69ef8a8146100ed578063d61c40dc146100f5578063e4c0aaf414610128578063fc0c546a1461013b575b600080fd5b60015461009b906001600160a01b031681565b6040516100a8919061049b565b60405180910390f35b6100b961014e565b005b6100b961028f565b6100b96100d13660046104af565b6103a9565b6100df60035481565b6040519081526020016100a8565b6100df6103d8565b6101186101033660046104c8565b60026020526000908152604090205460ff1681565b60405190151581526020016100a8565b6100b96101363660046104c8565b61044f565b60005461009b906001600160a01b031681565b3360009081526002602052604090205460ff16156101f95760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a4015b60405180910390fd5b60005460035460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027291906104f8565b50336000908152600260205260409020805460ff19166001179055565b6001546001600160a01b031633146102b95760405162461bcd60e51b81526004016101f09061051a565b6000546001546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906102f690309060040161049b565b602060405180830381865afa158015610313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610337919061055c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a691906104f8565b50565b6001546001600160a01b031633146103d35760405162461bcd60e51b81526004016101f09061051a565b600355565b600080546040516370a0823160e01b81526001600160a01b03909116906370a082319061040990309060040161049b565b602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a919061055c565b905090565b6001546001600160a01b031633146104795760405162461bcd60e51b81526004016101f09061051a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0391909116815260200190565b6000602082840312156104c157600080fd5b5035919050565b6000602082840312156104da57600080fd5b81356001600160a01b03811681146104f157600080fd5b9392505050565b60006020828403121561050a57600080fd5b815180151581146104f157600080fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60006020828403121561056e57600080fd5b505191905056fea264697066735822122073ab1d460d89fd07d337489347f8a75fc558ee56deada473e378dc9dc706e0f564736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100835760003560e01c80630c340a2414610088578063338cdca1146100b15780633ccfd60b146100bb5780635c320516146100c3578063aa8c217c146100d6578063b69ef8a8146100ed578063d61c40dc146100f5578063e4c0aaf414610128578063fc0c546a1461013b575b600080fd5b60015461009b906001600160a01b031681565b6040516100a8919061049b565b60405180910390f35b6100b961014e565b005b6100b961028f565b6100b96100d13660046104af565b6103a9565b6100df60035481565b6040519081526020016100a8565b6100df6103d8565b6101186101033660046104c8565b60026020526000908152604090205460ff1681565b60405190151581526020016100a8565b6100b96101363660046104c8565b61044f565b60005461009b906001600160a01b031681565b3360009081526002602052604090205460ff16156101f95760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a4015b60405180910390fd5b60005460035460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027291906104f8565b50336000908152600260205260409020805460ff19166001179055565b6001546001600160a01b031633146102b95760405162461bcd60e51b81526004016101f09061051a565b6000546001546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906102f690309060040161049b565b602060405180830381865afa158015610313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610337919061055c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a691906104f8565b50565b6001546001600160a01b031633146103d35760405162461bcd60e51b81526004016101f09061051a565b600355565b600080546040516370a0823160e01b81526001600160a01b03909116906370a082319061040990309060040161049b565b602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a919061055c565b905090565b6001546001600160a01b031633146104795760405162461bcd60e51b81526004016101f09061051a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0391909116815260200190565b6000602082840312156104c157600080fd5b5035919050565b6000602082840312156104da57600080fd5b81356001600160a01b03811681146104f157600080fd5b9392505050565b60006020828403121561050a57600080fd5b815180151581146104f157600080fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60006020828403121561056e57600080fd5b505191905056fea264697066735822122073ab1d460d89fd07d337489347f8a75fc558ee56deada473e378dc9dc706e0f564736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 34934, - "contract": "src/token/Faucet.sol:Faucet", - "label": "token", - "offset": 0, - "slot": "0", - "type": "t_contract(IERC20)1229" - }, - { - "astId": 34936, - "contract": "src/token/Faucet.sol:Faucet", - "label": "governor", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 34940, - "contract": "src/token/Faucet.sol:Faucet", - "label": "withdrewAlready", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 34943, - "contract": "src/token/Faucet.sol:Faucet", - "label": "amount", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20)1229": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/PinakionV2.json b/contracts/deployments/arbitrumSepolia/PinakionV2.json deleted file mode 120000 index 0f29cb015..000000000 --- a/contracts/deployments/arbitrumSepolia/PinakionV2.json +++ /dev/null @@ -1 +0,0 @@ -PNK.json \ No newline at end of file diff --git a/contracts/deployments/arbitrumSepolia/PolicyRegistry.json b/contracts/deployments/arbitrumSepolia/PolicyRegistry.json deleted file mode 100644 index 746d5e0e0..000000000 --- a/contracts/deployments/arbitrumSepolia/PolicyRegistry.json +++ /dev/null @@ -1,311 +0,0 @@ -{ - "address": "0x2668c46A14af8997417138B064ca1bEB70769585", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_courtName", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_policy", - "type": "string" - } - ], - "name": "PolicyUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "policies", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_courtName", - "type": "string" - }, - { - "internalType": "string", - "name": "_policy", - "type": "string" - } - ], - "name": "setPolicy", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x7f78eab7fb4f44b83ff6e43b0df82a2620ea07420802ad9850aa1455b4ea6523", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x2668c46A14af8997417138B064ca1bEB70769585", - "transactionIndex": 3, - "gasUsed": "197468", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x2348915b1097de71e1dbd156433bb6e95fee3a218aa5dcfb053973e87944a8f1", - "transactionHash": "0x7f78eab7fb4f44b83ff6e43b0df82a2620ea07420802ad9850aa1455b4ea6523", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 95247698, - "transactionHash": "0x7f78eab7fb4f44b83ff6e43b0df82a2620ea07420802ad9850aa1455b4ea6523", - "address": "0x2668c46A14af8997417138B064ca1bEB70769585", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 2, - "blockHash": "0x2348915b1097de71e1dbd156433bb6e95fee3a218aa5dcfb053973e87944a8f1" - } - ], - "blockNumber": 95247698, - "cumulativeGasUsed": "352936", - "status": 1, - "byzantium": true - }, - "args": [ - "0xB958113f96950C7806d584eFBed964288d46a0B8", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 2, - "solcInputHash": "acb39436d8539d1379a47e045a065e54", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"PolicyRegistryProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x8edb830825d7fe8ef85d445b087fac3b41f626cd7d5b40ea583c3cba21528687\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0xc3e0b18f846a62cc6c274680fc10014d1267885f8eefc6767292d3e174a081c0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122043d3f208f41a2b0235b1f7fb49b19f47c8dc193649734f6affb15445be74913164736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122043d3f208f41a2b0235b1f7fb49b19f47c8dc193649734f6affb15445be74913164736f6c63430008180033", - "execute": { - "methodName": "initialize2", - "args": [] - }, - "implementation": "0x7CC8E0787e381aE159C4d3e137f20f9203313D41", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/PolicyRegistry_Implementation.json b/contracts/deployments/arbitrumSepolia/PolicyRegistry_Implementation.json deleted file mode 100644 index 483b4129e..000000000 --- a/contracts/deployments/arbitrumSepolia/PolicyRegistry_Implementation.json +++ /dev/null @@ -1,422 +0,0 @@ -{ - "address": "0x7CC8E0787e381aE159C4d3e137f20f9203313D41", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_courtName", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_policy", - "type": "string" - } - ], - "name": "PolicyUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "policies", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_courtName", - "type": "string" - }, - { - "internalType": "string", - "name": "_policy", - "type": "string" - } - ], - "name": "setPolicy", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x10f4c35a7b899fe6fadba9e18904d277cc224474e541b59906421066c66e7bb4", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x7CC8E0787e381aE159C4d3e137f20f9203313D41", - "transactionIndex": 3, - "gasUsed": "781799", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000800000000000000000000040080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000400000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x506689bf6b2c3385573a3d4c686989191a63f562f9dfbf18a00089afffdeaeb6", - "transactionHash": "0x10f4c35a7b899fe6fadba9e18904d277cc224474e541b59906421066c66e7bb4", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 139235279, - "transactionHash": "0x10f4c35a7b899fe6fadba9e18904d277cc224474e541b59906421066c66e7bb4", - "address": "0x7CC8E0787e381aE159C4d3e137f20f9203313D41", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 3, - "blockHash": "0x506689bf6b2c3385573a3d4c686989191a63f562f9dfbf18a00089afffdeaeb6" - } - ], - "blockNumber": 139235279, - "cumulativeGasUsed": "998041", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "acb39436d8539d1379a47e045a065e54", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_courtName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_policy\",\"type\":\"string\"}],\"name\":\"PolicyUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"policies\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_courtName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_policy\",\"type\":\"string\"}],\"name\":\"setPolicy\",\"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\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A contract to maintain a policy for each court.\",\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"PolicyUpdate(uint256,string,string)\":{\"details\":\"Emitted when a policy is updated.\",\"params\":{\"_courtID\":\"The ID of the policy's court.\",\"_courtName\":\"The name of the policy's court.\",\"_policy\":\"The URI of the policy JSON.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initialize(address)\":{\"details\":\"Constructs the `PolicyRegistry` contract.\",\"params\":{\"_governor\":\"The governor's address.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setPolicy(uint256,string,string)\":{\"details\":\"Sets the policy for the specified court.\",\"params\":{\"_courtID\":\"The ID of the specified court.\",\"_courtName\":\"The name of the specified court.\",\"_policy\":\"The URI of the policy JSON.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"PolicyRegistry\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/PolicyRegistry.sol\":\"PolicyRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/arbitration/PolicyRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport \\\"../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/// @title PolicyRegistry\\n/// @dev A contract to maintain a policy for each court.\\ncontract PolicyRegistry is UUPSProxiable, Initializable {\\n string public constant override version = \\\"0.8.0\\\";\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a policy is updated.\\n /// @param _courtID The ID of the policy's court.\\n /// @param _courtName The name of the policy's court.\\n /// @param _policy The URI of the policy JSON.\\n event PolicyUpdate(uint256 indexed _courtID, string _courtName, string _policy);\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor;\\n mapping(uint256 => string) public policies;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n /// @dev Requires that the sender is the governor.\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"No allowed: governor only\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Constructs the `PolicyRegistry` contract.\\n /// @param _governor The governor's address.\\n function initialize(address _governor) external reinitializer(1) {\\n governor = _governor;\\n }\\n\\n function initialize2() external reinitializer(2) {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the policy for the specified court.\\n /// @param _courtID The ID of the specified court.\\n /// @param _courtName The name of the specified court.\\n /// @param _policy The URI of the policy JSON.\\n function setPolicy(uint256 _courtID, string calldata _courtName, string calldata _policy) external onlyByGovernor {\\n policies[_courtID] = _policy;\\n emit PolicyUpdate(_courtID, _courtName, policies[_courtID]);\\n }\\n}\\n\",\"keccak256\":\"0x3616d00a695cf960373d73a56d727fba4988a6c67f4e9084d1aab18f6db72e73\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x560ea64115636ecd6b3596248817125551c038ce1648019fde3cbe02d9759a30\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa8bb02ed2b2fc165296226762299c2ee3328f2a0c6e90c6fe7029fa5b01d0b60\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610cb66100fc6000396000818161029e015281816102c701526104c40152610cb66000f3fe6080604052600436106100765760003560e01c80630c340a241461007b578063472abf68146100b85780634f1ef286146100cf57806352d1902d146100e257806354fd4d5014610105578063bdf7378014610143578063c4d66de814610163578063d3e8948314610183578063e4c0aaf4146101a3575b600080fd5b34801561008757600080fd5b5060005461009b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100c457600080fd5b506100cd6101c3565b005b6100cd6100dd3660046107db565b61028a565b3480156100ee57600080fd5b506100f76104b7565b6040519081526020016100af565b34801561011157600080fd5b50610136604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100af91906108c0565b34801561014f57600080fd5b506100cd61015e36600461093b565b610515565b34801561016f57600080fd5b506100cd61017e3660046109b4565b6105ae565b34801561018f57600080fd5b5061013661019e3660046109d6565b610696565b3480156101af57600080fd5b506100cd6101be3660046109b4565b610730565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff168061020c575080546001600160401b03808416911610155b156102295760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6102938261077c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061031157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610305600080516020610c618339815191525490565b6001600160a01b031614155b1561032f5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610389575060408051601f3d908101601f19168201909252610386918101906109ef565b60015b6103b657604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b600080516020610c6183398151915281146103e757604051632a87526960e21b8152600481018290526024016103ad565b600080516020610c618339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156104b2576000836001600160a01b03168360405161044e9190610a08565b600060405180830381855af49150503d8060008114610489576040519150601f19603f3d011682016040523d82523d6000602084013e61048e565b606091505b50509050806104b0576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105025760405163703e46dd60e11b815260040160405180910390fd5b50600080516020610c6183398151915290565b6000546001600160a01b0316331461053f5760405162461bcd60e51b81526004016103ad90610a24565b6000858152600160205260409020610558828483610ae1565b50847f61f7110245e82eddd3b134d1e1607420d4a4dcdab30f5abdbbc9c3485b5dd2a48585600160008a815260200190815260200160002060405161059f93929190610ba1565b60405180910390a25050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105f7575080546001600160401b03808416911610155b156106145760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600160205260009081526040902080546106af90610a57565b80601f01602080910402602001604051908101604052809291908181526020018280546106db90610a57565b80156107285780601f106106fd57610100808354040283529160200191610728565b820191906000526020600020905b81548152906001019060200180831161070b57829003601f168201915b505050505081565b6000546001600160a01b0316331461075a5760405162461bcd60e51b81526004016103ad90610a24565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146107a65760405162461bcd60e51b81526004016103ad90610a24565b50565b80356001600160a01b03811681146107c057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156107ee57600080fd5b6107f7836107a9565b915060208301356001600160401b038082111561081357600080fd5b818501915085601f83011261082757600080fd5b813581811115610839576108396107c5565b604051601f8201601f19908116603f01168101908382118183101715610861576108616107c5565b8160405282815288602084870101111561087a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156108b757818101518382015260200161089f565b50506000910152565b60208152600082518060208401526108df81604085016020870161089c565b601f01601f19169190910160400192915050565b60008083601f84011261090557600080fd5b5081356001600160401b0381111561091c57600080fd5b60208301915083602082850101111561093457600080fd5b9250929050565b60008060008060006060868803121561095357600080fd5b8535945060208601356001600160401b038082111561097157600080fd5b61097d89838a016108f3565b9096509450604088013591508082111561099657600080fd5b506109a3888289016108f3565b969995985093965092949392505050565b6000602082840312156109c657600080fd5b6109cf826107a9565b9392505050565b6000602082840312156109e857600080fd5b5035919050565b600060208284031215610a0157600080fd5b5051919050565b60008251610a1a81846020870161089c565b9190910192915050565b6020808252601990820152784e6f20616c6c6f7765643a20676f7665726e6f72206f6e6c7960381b604082015260600190565b600181811c90821680610a6b57607f821691505b602082108103610a8b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156104b2576000816000526020600020601f850160051c81016020861015610aba5750805b601f850160051c820191505b81811015610ad957828155600101610ac6565b505050505050565b6001600160401b03831115610af857610af86107c5565b610b0c83610b068354610a57565b83610a91565b6000601f841160018114610b405760008515610b285750838201355b600019600387901b1c1916600186901b178355610b9a565b600083815260209020601f19861690835b82811015610b715786850135825560209485019460019092019101610b51565b5086821015610b8e5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60408152826040820152828460608301376000606084830101526000601f19601f85011682016020606084830301602085015260008554610be181610a57565b8060608601526080600180841660008114610c035760018114610c1f57610c4f565b60ff1985166080890152608084151560051b8901019550610c4f565b8a600052602060002060005b85811015610c465781548a8201860152908301908801610c2b565b89016080019650505b50939b9a505050505050505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220daf17c4b96da6ae73cf27c808d549557e5bcc5ff14feeae77520de70bd7269c864736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100765760003560e01c80630c340a241461007b578063472abf68146100b85780634f1ef286146100cf57806352d1902d146100e257806354fd4d5014610105578063bdf7378014610143578063c4d66de814610163578063d3e8948314610183578063e4c0aaf4146101a3575b600080fd5b34801561008757600080fd5b5060005461009b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100c457600080fd5b506100cd6101c3565b005b6100cd6100dd3660046107db565b61028a565b3480156100ee57600080fd5b506100f76104b7565b6040519081526020016100af565b34801561011157600080fd5b50610136604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100af91906108c0565b34801561014f57600080fd5b506100cd61015e36600461093b565b610515565b34801561016f57600080fd5b506100cd61017e3660046109b4565b6105ae565b34801561018f57600080fd5b5061013661019e3660046109d6565b610696565b3480156101af57600080fd5b506100cd6101be3660046109b4565b610730565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff168061020c575080546001600160401b03808416911610155b156102295760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6102938261077c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061031157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610305600080516020610c618339815191525490565b6001600160a01b031614155b1561032f5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610389575060408051601f3d908101601f19168201909252610386918101906109ef565b60015b6103b657604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b600080516020610c6183398151915281146103e757604051632a87526960e21b8152600481018290526024016103ad565b600080516020610c618339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156104b2576000836001600160a01b03168360405161044e9190610a08565b600060405180830381855af49150503d8060008114610489576040519150601f19603f3d011682016040523d82523d6000602084013e61048e565b606091505b50509050806104b0576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105025760405163703e46dd60e11b815260040160405180910390fd5b50600080516020610c6183398151915290565b6000546001600160a01b0316331461053f5760405162461bcd60e51b81526004016103ad90610a24565b6000858152600160205260409020610558828483610ae1565b50847f61f7110245e82eddd3b134d1e1607420d4a4dcdab30f5abdbbc9c3485b5dd2a48585600160008a815260200190815260200160002060405161059f93929190610ba1565b60405180910390a25050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105f7575080546001600160401b03808416911610155b156106145760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600160205260009081526040902080546106af90610a57565b80601f01602080910402602001604051908101604052809291908181526020018280546106db90610a57565b80156107285780601f106106fd57610100808354040283529160200191610728565b820191906000526020600020905b81548152906001019060200180831161070b57829003601f168201915b505050505081565b6000546001600160a01b0316331461075a5760405162461bcd60e51b81526004016103ad90610a24565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146107a65760405162461bcd60e51b81526004016103ad90610a24565b50565b80356001600160a01b03811681146107c057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156107ee57600080fd5b6107f7836107a9565b915060208301356001600160401b038082111561081357600080fd5b818501915085601f83011261082757600080fd5b813581811115610839576108396107c5565b604051601f8201601f19908116603f01168101908382118183101715610861576108616107c5565b8160405282815288602084870101111561087a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156108b757818101518382015260200161089f565b50506000910152565b60208152600082518060208401526108df81604085016020870161089c565b601f01601f19169190910160400192915050565b60008083601f84011261090557600080fd5b5081356001600160401b0381111561091c57600080fd5b60208301915083602082850101111561093457600080fd5b9250929050565b60008060008060006060868803121561095357600080fd5b8535945060208601356001600160401b038082111561097157600080fd5b61097d89838a016108f3565b9096509450604088013591508082111561099657600080fd5b506109a3888289016108f3565b969995985093965092949392505050565b6000602082840312156109c657600080fd5b6109cf826107a9565b9392505050565b6000602082840312156109e857600080fd5b5035919050565b600060208284031215610a0157600080fd5b5051919050565b60008251610a1a81846020870161089c565b9190910192915050565b6020808252601990820152784e6f20616c6c6f7765643a20676f7665726e6f72206f6e6c7960381b604082015260600190565b600181811c90821680610a6b57607f821691505b602082108103610a8b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156104b2576000816000526020600020601f850160051c81016020861015610aba5750805b601f850160051c820191505b81811015610ad957828155600101610ac6565b505050505050565b6001600160401b03831115610af857610af86107c5565b610b0c83610b068354610a57565b83610a91565b6000601f841160018114610b405760008515610b285750838201355b600019600387901b1c1916600186901b178355610b9a565b600083815260209020601f19861690835b82811015610b715786850135825560209485019460019092019101610b51565b5086821015610b8e5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60408152826040820152828460608301376000606084830101526000601f19601f85011682016020606084830301602085015260008554610be181610a57565b8060608601526080600180841660008114610c035760018114610c1f57610c4f565b60ff1985166080890152608084151560051b8901019550610c4f565b8a600052602060002060005b85811015610c465781548a8201860152908301908801610c2b565b89016080019650505b50939b9a505050505050505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220daf17c4b96da6ae73cf27c808d549557e5bcc5ff14feeae77520de70bd7269c864736f6c63430008180033", - "devdoc": { - "details": "A contract to maintain a policy for each court.", - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "PolicyUpdate(uint256,string,string)": { - "details": "Emitted when a policy is updated.", - "params": { - "_courtID": "The ID of the policy's court.", - "_courtName": "The name of the policy's court.", - "_policy": "The URI of the policy JSON." - } - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "initialize(address)": { - "details": "Constructs the `PolicyRegistry` contract.", - "params": { - "_governor": "The governor's address." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setPolicy(uint256,string,string)": { - "details": "Sets the policy for the specified court.", - "params": { - "_courtID": "The ID of the specified court.", - "_courtName": "The name of the specified court.", - "_policy": "The URI of the policy JSON." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "PolicyRegistry", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 13671, - "contract": "src/arbitration/PolicyRegistry.sol:PolicyRegistry", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 13675, - "contract": "src/arbitration/PolicyRegistry.sol:PolicyRegistry", - "label": "policies", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_string_storage)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_string_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => string)", - "numberOfBytes": "32", - "value": "t_string_storage" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/PolicyRegistry_Proxy.json b/contracts/deployments/arbitrumSepolia/PolicyRegistry_Proxy.json deleted file mode 100644 index 86bcec356..000000000 --- a/contracts/deployments/arbitrumSepolia/PolicyRegistry_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x2668c46A14af8997417138B064ca1bEB70769585", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x7f78eab7fb4f44b83ff6e43b0df82a2620ea07420802ad9850aa1455b4ea6523", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x2668c46A14af8997417138B064ca1bEB70769585", - "transactionIndex": 3, - "gasUsed": "197468", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x2348915b1097de71e1dbd156433bb6e95fee3a218aa5dcfb053973e87944a8f1", - "transactionHash": "0x7f78eab7fb4f44b83ff6e43b0df82a2620ea07420802ad9850aa1455b4ea6523", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 95247698, - "transactionHash": "0x7f78eab7fb4f44b83ff6e43b0df82a2620ea07420802ad9850aa1455b4ea6523", - "address": "0x2668c46A14af8997417138B064ca1bEB70769585", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 2, - "blockHash": "0x2348915b1097de71e1dbd156433bb6e95fee3a218aa5dcfb053973e87944a8f1" - } - ], - "blockNumber": 95247698, - "cumulativeGasUsed": "352936", - "status": 1, - "byzantium": true - }, - "args": [ - "0xB958113f96950C7806d584eFBed964288d46a0B8", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"PolicyRegistryProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212203b3fd7b58d814daf56e8a98b5f03d35c3e25bc365afd21a0aa80ee883c5d3f1264736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212203b3fd7b58d814daf56e8a98b5f03d35c3e25bc365afd21a0aa80ee883c5d3f1264736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/RandomizerOracle.json b/contracts/deployments/arbitrumSepolia/RandomizerOracle.json deleted file mode 100644 index 0ed65f9d1..000000000 --- a/contracts/deployments/arbitrumSepolia/RandomizerOracle.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "address": "0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b", - "abi": [] -} diff --git a/contracts/deployments/arbitrumSepolia/RandomizerRNG.json b/contracts/deployments/arbitrumSepolia/RandomizerRNG.json deleted file mode 100644 index aac005482..000000000 --- a/contracts/deployments/arbitrumSepolia/RandomizerRNG.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "address": "0x51a97ad9F0aA818e75819da3cA20CAc319580627", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "callbackGasLimit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IRandomizer", - "name": "_randomizer", - "type": "address" - }, - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "name": "randomNumbers", - "outputs": [ - { - "internalType": "uint256", - "name": "number", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomizer", - "outputs": [ - { - "internalType": "contract IRandomizer", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_value", - "type": "bytes32" - } - ], - "name": "randomizerCallback", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "randomizerWithdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "receiveRandomness", - "outputs": [ - { - "internalType": "uint256", - "name": "randomNumber", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "requestRandomness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - } - ], - "name": "requesterToID", - "outputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_callbackGasLimit", - "type": "uint256" - } - ], - "name": "setCallbackGasLimit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_randomizer", - "type": "address" - } - ], - "name": "setRandomizer", - "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": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0xe0fe2993ab0e273014c24ca106df28efc31159a1f4176b22ed7428d36319dd6e", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x51a97ad9F0aA818e75819da3cA20CAc319580627", - "transactionIndex": 1, - "gasUsed": "246610", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000010000000000000000000000000000000", - "blockHash": "0xd05ed0e3d3eab93951fbec824a05e7d37364829cb69aa9be55b712daf562464d", - "transactionHash": "0xe0fe2993ab0e273014c24ca106df28efc31159a1f4176b22ed7428d36319dd6e", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 95247762, - "transactionHash": "0xe0fe2993ab0e273014c24ca106df28efc31159a1f4176b22ed7428d36319dd6e", - "address": "0x51a97ad9F0aA818e75819da3cA20CAc319580627", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0xd05ed0e3d3eab93951fbec824a05e7d37364829cb69aa9be55b712daf562464d" - } - ], - "blockNumber": 95247762, - "cumulativeGasUsed": "246610", - "status": 1, - "byzantium": true - }, - "args": [ - "0x1237F02bBeFDAEA20cE3A66aCAe458C4106Ae203", - "0x485cc955000000000000000000000000e775d7fde1d0d09ae627c0131040012ccbcc4b9b000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"RandomizerRNGProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206e4bfb3b93f88c05da2e7790f3420dc92a7e92440e2c63e66223920b337be18264736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206e4bfb3b93f88c05da2e7790f3420dc92a7e92440e2c63e66223920b337be18264736f6c63430008180033", - "execute": { - "methodName": "initialize", - "args": [ - "0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b", - "0xf1C7c037891525E360C59f708739Ac09A7670c59" - ] - }, - "implementation": "0x1237F02bBeFDAEA20cE3A66aCAe458C4106Ae203", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/RandomizerRNG_Implementation.json b/contracts/deployments/arbitrumSepolia/RandomizerRNG_Implementation.json deleted file mode 100644 index 91684d2cc..000000000 --- a/contracts/deployments/arbitrumSepolia/RandomizerRNG_Implementation.json +++ /dev/null @@ -1,533 +0,0 @@ -{ - "address": "0x1237F02bBeFDAEA20cE3A66aCAe458C4106Ae203", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "callbackGasLimit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IRandomizer", - "name": "_randomizer", - "type": "address" - }, - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "name": "randomNumbers", - "outputs": [ - { - "internalType": "uint256", - "name": "number", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomizer", - "outputs": [ - { - "internalType": "contract IRandomizer", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_value", - "type": "bytes32" - } - ], - "name": "randomizerCallback", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "randomizerWithdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "receiveRandomness", - "outputs": [ - { - "internalType": "uint256", - "name": "randomNumber", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "requestRandomness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "requester", - "type": "address" - } - ], - "name": "requesterToID", - "outputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_callbackGasLimit", - "type": "uint256" - } - ], - "name": "setCallbackGasLimit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_randomizer", - "type": "address" - } - ], - "name": "setRandomizer", - "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" - } - ], - "transactionHash": "0xc13384c7f2c7f5a33ad91024980d3ae6e9de2294021bf3854646942ed838af45", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x1237F02bBeFDAEA20cE3A66aCAe458C4106Ae203", - "transactionIndex": 2, - "gasUsed": "760072", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x65934baa2f318fc07a7bbad38561c5ee7c5a77328b41ac0bebf34cfab13ab297", - "transactionHash": "0xc13384c7f2c7f5a33ad91024980d3ae6e9de2294021bf3854646942ed838af45", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 95247751, - "transactionHash": "0xc13384c7f2c7f5a33ad91024980d3ae6e9de2294021bf3854646942ed838af45", - "address": "0x1237F02bBeFDAEA20cE3A66aCAe458C4106Ae203", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 3, - "blockHash": "0x65934baa2f318fc07a7bbad38561c5ee7c5a77328b41ac0bebf34cfab13ab297" - } - ], - "blockNumber": 95247751, - "cumulativeGasUsed": "943743", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"callbackGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRandomizer\",\"name\":\"_randomizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"randomNumbers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomizer\",\"outputs\":[{\"internalType\":\"contract IRandomizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_value\",\"type\":\"bytes32\"}],\"name\":\"randomizerCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"randomizerWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"receiveRandomness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"requestRandomness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"}],\"name\":\"requesterToID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_callbackGasLimit\",\"type\":\"uint256\"}],\"name\":\"setCallbackGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_randomizer\",\"type\":\"address\"}],\"name\":\"setRandomizer\",\"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\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor of the contract.\",\"params\":{\"_governor\":\"The new governor.\"}},\"constructor\":{\"details\":\"Constructor, initializing the implementation to reduce attack surface.\"},\"initialize(address,address)\":{\"details\":\"Initializer\",\"params\":{\"_governor\":\"Governor of the contract.\",\"_randomizer\":\"Randomizer contract.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"randomizerCallback(uint256,bytes32)\":{\"details\":\"Callback function called by the randomizer contract when the random value is generated.\"},\"randomizerWithdraw(uint256)\":{\"details\":\"Allows the governor to withdraw randomizer funds.\",\"params\":{\"_amount\":\"Amount to withdraw in wei.\"}},\"receiveRandomness(uint256)\":{\"details\":\"Return the random number.\",\"returns\":{\"randomNumber\":\"The random number or 0 if it is not ready or has not been requested.\"}},\"requestRandomness(uint256)\":{\"details\":\"Request a random number. The id of the request is tied to the sender.\"},\"setCallbackGasLimit(uint256)\":{\"details\":\"Change the Randomizer callback gas limit.\",\"params\":{\"_callbackGasLimit\":\"the new limit.\"}},\"setRandomizer(address)\":{\"details\":\"Change the Randomizer address.\",\"params\":{\"_randomizer\":\"the new Randomizer address.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"title\":\"Random Number Generator that uses Randomizer.ai https://randomizer.ai/\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}],\"InvalidImplementation(address)\":[{\"notice\":\"The `implementation` is not UUPS-compliant\"}]},\"events\":{\"Upgraded(address)\":{\"notice\":\"Emitted when the `implementation` has been successfully upgraded.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rng/RandomizerRNG.sol\":\"RandomizerRNG\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x560ea64115636ecd6b3596248817125551c038ce1648019fde3cbe02d9759a30\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxiable\\n * @author Simon Malatrait \\n * @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n * The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n *\\n * IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n * This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSProxiable` with a custom implementation of upgrades.\\n *\\n * The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\n */\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /**\\n * Emitted when the `implementation` has been successfully upgraded.\\n * @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n */\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /**\\n * @dev The call is from an unauthorized context.\\n */\\n error UUPSUnauthorizedCallContext();\\n\\n /**\\n * @dev The storage `slot` is unsupported as a UUID.\\n */\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Storage variable of the proxiable contract address.\\n * It is used to check whether or not the current call is from the proxy.\\n */\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n * @dev Called by {upgradeToAndCall}.\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Upgrade mechanism including access control and UUPS-compliance.\\n * @param newImplementation Address of the new implementation contract.\\n * @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n *\\n * @dev Reverts if the execution is not performed via delegatecall or the execution\\n * context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n /* Check that the execution is being performed through a delegatecall call and that the execution context is\\n a proxy contract with an implementation (as defined in ERC1967) pointing to self. */\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the if statement.\\n */\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5956855046cdda7aa45f44e379ef45323af7266c44c817d1266d8b32d52b0e22\",\"license\":\"MIT\"},\"src/rng/IRandomizer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n// Randomizer protocol interface\\ninterface IRandomizer {\\n function request(uint256 callbackGasLimit) external returns (uint256);\\n\\n function clientWithdrawTo(address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xc2f92fb0decde8e9c09b1617ff58fae69b052ad1e8aa4a4fed25867b6bb329c1\",\"license\":\"MIT\"},\"src/rng/RNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\ninterface RNG {\\n /// @dev Request a random number.\\n /// @param _block Block linked to the request.\\n function requestRandomness(uint256 _block) external;\\n\\n /// @dev Receive the random number.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber Random Number. If the number is not ready or has not been required 0 instead.\\n function receiveRandomness(uint256 _block) external returns (uint256 randomNumber);\\n}\\n\",\"keccak256\":\"0xf92e0cf768afefc5cc6ef786c263b67dd00c021aa5753213dbbc33014adb68c5\",\"license\":\"MIT\"},\"src/rng/RandomizerRNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./RNG.sol\\\";\\nimport \\\"./IRandomizer.sol\\\";\\nimport \\\"../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/// @title Random Number Generator that uses Randomizer.ai\\n/// https://randomizer.ai/\\ncontract RandomizerRNG is RNG, UUPSProxiable, Initializable {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The address that can withdraw funds.\\n uint256 public callbackGasLimit; // Gas limit for the randomizer callback\\n IRandomizer public randomizer; // Randomizer address.\\n mapping(uint256 requestId => uint256 number) public randomNumbers; // randomNumbers[requestID] is the random number for this request id, 0 otherwise.\\n mapping(address requester => uint256 requestId) public requesterToID; // Maps the requester to his latest request ID.\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Governor only\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer\\n /// @param _randomizer Randomizer contract.\\n /// @param _governor Governor of the contract.\\n function initialize(IRandomizer _randomizer, address _governor) external reinitializer(1) {\\n randomizer = _randomizer;\\n governor = _governor;\\n callbackGasLimit = 50000;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /**\\n * @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Changes the governor of the contract.\\n /// @param _governor The new governor.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Change the Randomizer callback gas limit.\\n /// @param _callbackGasLimit the new limit.\\n function setCallbackGasLimit(uint256 _callbackGasLimit) external onlyByGovernor {\\n callbackGasLimit = _callbackGasLimit;\\n }\\n\\n /// @dev Change the Randomizer address.\\n /// @param _randomizer the new Randomizer address.\\n function setRandomizer(address _randomizer) external onlyByGovernor {\\n randomizer = IRandomizer(_randomizer);\\n }\\n\\n /// @dev Allows the governor to withdraw randomizer funds.\\n /// @param _amount Amount to withdraw in wei.\\n function randomizerWithdraw(uint256 _amount) external onlyByGovernor {\\n randomizer.clientWithdrawTo(msg.sender, _amount);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Request a random number. The id of the request is tied to the sender.\\n function requestRandomness(uint256 /*_block*/) external override {\\n uint256 id = randomizer.request(callbackGasLimit);\\n requesterToID[msg.sender] = id;\\n }\\n\\n /// @dev Callback function called by the randomizer contract when the random value is generated.\\n function randomizerCallback(uint256 _id, bytes32 _value) external {\\n require(msg.sender == address(randomizer), \\\"Randomizer only\\\");\\n randomNumbers[_id] = uint256(_value);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Return the random number.\\n /// @return randomNumber The random number or 0 if it is not ready or has not been requested.\\n function receiveRandomness(uint256 /*_block*/) external view override returns (uint256 randomNumber) {\\n // Get the latest request ID for this requester.\\n uint256 id = requesterToID[msg.sender];\\n randomNumber = randomNumbers[id];\\n }\\n}\\n\",\"keccak256\":\"0x84d5dc50531aac4976948b2898b44630febefd95b54fdeee026190ba675a57dc\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610b396100fc600039600081816104a1015281816104ca01526106c20152610b396000f3fe6080604052600436106100c85760003560e01c806352d1902d1161007a57806352d1902d146101ec57806371d4b00b146102015780637363ae1f1461022e578063767bcab51461024e5780638a54942f1461026e578063e4c0aaf41461028e578063ebe93caf146102ae578063f10fb584146102ce57600080fd5b80630c340a24146100cd57806313cf90541461010a57806324f7469714610154578063485cc9551461016a5780634e07c9391461018c5780634f1ef286146101ac5780635257cd90146101bf575b600080fd5b3480156100d957600080fd5b506000546100ed906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561011657600080fd5b506101466101253660046108ed565b50336000908152600460209081526040808320548352600390915290205490565b604051908152602001610101565b34801561016057600080fd5b5061014660015481565b34801561017657600080fd5b5061018a61018536600461091b565b6102ee565b005b34801561019857600080fd5b5061018a6101a73660046108ed565b6103f3565b61018a6101ba36600461096a565b61048d565b3480156101cb57600080fd5b506101466101da3660046108ed565b60036020526000908152604090205481565b3480156101f857600080fd5b506101466106b5565b34801561020d57600080fd5b5061014661021c366004610a2e565b60046020526000908152604090205481565b34801561023a57600080fd5b5061018a6102493660046108ed565b610713565b34801561025a57600080fd5b5061018a610269366004610a2e565b61079b565b34801561027a57600080fd5b5061018a6102893660046108ed565b6107e7565b34801561029a57600080fd5b5061018a6102a9366004610a2e565b610816565b3480156102ba57600080fd5b5061018a6102c9366004610a52565b610862565b3480156102da57600080fd5b506002546100ed906001600160a01b031681565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806103385750805467ffffffffffffffff808416911610155b156103555760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff8316908117600160401b178255600280546001600160a01b038781166001600160a01b031992831617909255600080549287169290911691909117905561c350600155815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6000546001600160a01b031633146104265760405162461bcd60e51b815260040161041d90610a74565b60405180910390fd5b600254604051632465f8f560e01b8152336004820152602481018390526001600160a01b0390911690632465f8f590604401600060405180830381600087803b15801561047257600080fd5b505af1158015610486573d6000803e3d6000fd5b5050505050565b610496826108c0565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061051457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610508600080516020610ae48339815191525490565b6001600160a01b031614155b156105325760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561058c575060408051601f3d908101601f1916820190925261058991810190610a9b565b60015b6105b457604051630c76093760e01b81526001600160a01b038316600482015260240161041d565b600080516020610ae483398151915281146105e557604051632a87526960e21b81526004810182905260240161041d565b600080516020610ae48339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156106b0576000836001600160a01b03168360405161064c9190610ab4565b600060405180830381855af49150503d8060008114610687576040519150601f19603f3d011682016040523d82523d6000602084013e61068c565b606091505b50509050806106ae576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107005760405163703e46dd60e11b815260040160405180910390fd5b50600080516020610ae483398151915290565b60025460015460405163d845a4b360e01b815260048101919091526000916001600160a01b03169063d845a4b3906024016020604051808303816000875af1158015610763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107879190610a9b565b336000908152600460205260409020555050565b6000546001600160a01b031633146107c55760405162461bcd60e51b815260040161041d90610a74565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108115760405162461bcd60e51b815260040161041d90610a74565b600155565b6000546001600160a01b031633146108405760405162461bcd60e51b815260040161041d90610a74565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146108ae5760405162461bcd60e51b815260206004820152600f60248201526e52616e646f6d697a6572206f6e6c7960881b604482015260640161041d565b60009182526003602052604090912055565b6000546001600160a01b031633146108ea5760405162461bcd60e51b815260040161041d90610a74565b50565b6000602082840312156108ff57600080fd5b5035919050565b6001600160a01b03811681146108ea57600080fd5b6000806040838503121561092e57600080fd5b823561093981610906565b9150602083013561094981610906565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561097d57600080fd5b823561098881610906565b9150602083013567ffffffffffffffff808211156109a557600080fd5b818501915085601f8301126109b957600080fd5b8135818111156109cb576109cb610954565b604051601f8201601f19908116603f011681019083821181831017156109f3576109f3610954565b81604052828152886020848701011115610a0c57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208284031215610a4057600080fd5b8135610a4b81610906565b9392505050565b60008060408385031215610a6557600080fd5b50508035926020909101359150565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b600060208284031215610aad57600080fd5b5051919050565b6000825160005b81811015610ad55760208186018101518583015201610abb565b50600092019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220721afbaa690caa7b92bcb9018e5c4d2ecece02ca01c80c470d74bec052f7ae9264736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100c85760003560e01c806352d1902d1161007a57806352d1902d146101ec57806371d4b00b146102015780637363ae1f1461022e578063767bcab51461024e5780638a54942f1461026e578063e4c0aaf41461028e578063ebe93caf146102ae578063f10fb584146102ce57600080fd5b80630c340a24146100cd57806313cf90541461010a57806324f7469714610154578063485cc9551461016a5780634e07c9391461018c5780634f1ef286146101ac5780635257cd90146101bf575b600080fd5b3480156100d957600080fd5b506000546100ed906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561011657600080fd5b506101466101253660046108ed565b50336000908152600460209081526040808320548352600390915290205490565b604051908152602001610101565b34801561016057600080fd5b5061014660015481565b34801561017657600080fd5b5061018a61018536600461091b565b6102ee565b005b34801561019857600080fd5b5061018a6101a73660046108ed565b6103f3565b61018a6101ba36600461096a565b61048d565b3480156101cb57600080fd5b506101466101da3660046108ed565b60036020526000908152604090205481565b3480156101f857600080fd5b506101466106b5565b34801561020d57600080fd5b5061014661021c366004610a2e565b60046020526000908152604090205481565b34801561023a57600080fd5b5061018a6102493660046108ed565b610713565b34801561025a57600080fd5b5061018a610269366004610a2e565b61079b565b34801561027a57600080fd5b5061018a6102893660046108ed565b6107e7565b34801561029a57600080fd5b5061018a6102a9366004610a2e565b610816565b3480156102ba57600080fd5b5061018a6102c9366004610a52565b610862565b3480156102da57600080fd5b506002546100ed906001600160a01b031681565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806103385750805467ffffffffffffffff808416911610155b156103555760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff8316908117600160401b178255600280546001600160a01b038781166001600160a01b031992831617909255600080549287169290911691909117905561c350600155815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6000546001600160a01b031633146104265760405162461bcd60e51b815260040161041d90610a74565b60405180910390fd5b600254604051632465f8f560e01b8152336004820152602481018390526001600160a01b0390911690632465f8f590604401600060405180830381600087803b15801561047257600080fd5b505af1158015610486573d6000803e3d6000fd5b5050505050565b610496826108c0565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061051457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610508600080516020610ae48339815191525490565b6001600160a01b031614155b156105325760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561058c575060408051601f3d908101601f1916820190925261058991810190610a9b565b60015b6105b457604051630c76093760e01b81526001600160a01b038316600482015260240161041d565b600080516020610ae483398151915281146105e557604051632a87526960e21b81526004810182905260240161041d565b600080516020610ae48339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156106b0576000836001600160a01b03168360405161064c9190610ab4565b600060405180830381855af49150503d8060008114610687576040519150601f19603f3d011682016040523d82523d6000602084013e61068c565b606091505b50509050806106ae576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107005760405163703e46dd60e11b815260040160405180910390fd5b50600080516020610ae483398151915290565b60025460015460405163d845a4b360e01b815260048101919091526000916001600160a01b03169063d845a4b3906024016020604051808303816000875af1158015610763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107879190610a9b565b336000908152600460205260409020555050565b6000546001600160a01b031633146107c55760405162461bcd60e51b815260040161041d90610a74565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108115760405162461bcd60e51b815260040161041d90610a74565b600155565b6000546001600160a01b031633146108405760405162461bcd60e51b815260040161041d90610a74565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146108ae5760405162461bcd60e51b815260206004820152600f60248201526e52616e646f6d697a6572206f6e6c7960881b604482015260640161041d565b60009182526003602052604090912055565b6000546001600160a01b031633146108ea5760405162461bcd60e51b815260040161041d90610a74565b50565b6000602082840312156108ff57600080fd5b5035919050565b6001600160a01b03811681146108ea57600080fd5b6000806040838503121561092e57600080fd5b823561093981610906565b9150602083013561094981610906565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561097d57600080fd5b823561098881610906565b9150602083013567ffffffffffffffff808211156109a557600080fd5b818501915085601f8301126109b957600080fd5b8135818111156109cb576109cb610954565b604051601f8201601f19908116603f011681019083821181831017156109f3576109f3610954565b81604052828152886020848701011115610a0c57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208284031215610a4057600080fd5b8135610a4b81610906565b9392505050565b60008060408385031215610a6557600080fd5b50508035926020909101359150565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b600060208284031215610aad57600080fd5b5051919050565b6000825160005b81811015610ad55760208186018101518583015201610abb565b50600092019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220721afbaa690caa7b92bcb9018e5c4d2ecece02ca01c80c470d74bec052f7ae9264736f6c63430008180033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor of the contract.", - "params": { - "_governor": "The new governor." - } - }, - "constructor": { - "details": "Constructor, initializing the implementation to reduce attack surface." - }, - "initialize(address,address)": { - "details": "Initializer", - "params": { - "_governor": "Governor of the contract.", - "_randomizer": "Randomizer contract." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "randomizerCallback(uint256,bytes32)": { - "details": "Callback function called by the randomizer contract when the random value is generated." - }, - "randomizerWithdraw(uint256)": { - "details": "Allows the governor to withdraw randomizer funds.", - "params": { - "_amount": "Amount to withdraw in wei." - } - }, - "receiveRandomness(uint256)": { - "details": "Return the random number.", - "returns": { - "randomNumber": "The random number or 0 if it is not ready or has not been requested." - } - }, - "requestRandomness(uint256)": { - "details": "Request a random number. The id of the request is tied to the sender." - }, - "setCallbackGasLimit(uint256)": { - "details": "Change the Randomizer callback gas limit.", - "params": { - "_callbackGasLimit": "the new limit." - } - }, - "setRandomizer(address)": { - "details": "Change the Randomizer address.", - "params": { - "_randomizer": "the new Randomizer address." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "title": "Random Number Generator that uses Randomizer.ai https://randomizer.ai/", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ], - "InvalidImplementation(address)": [ - { - "notice": "The `implementation` is not UUPS-compliant" - } - ] - }, - "events": { - "Upgraded(address)": { - "notice": "Emitted when the `implementation` has been successfully upgraded." - } - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 34952, - "contract": "src/rng/RandomizerRNG.sol:RandomizerRNG", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 34954, - "contract": "src/rng/RandomizerRNG.sol:RandomizerRNG", - "label": "callbackGasLimit", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 34957, - "contract": "src/rng/RandomizerRNG.sol:RandomizerRNG", - "label": "randomizer", - "offset": 0, - "slot": "2", - "type": "t_contract(IRandomizer)34880" - }, - { - "astId": 34961, - "contract": "src/rng/RandomizerRNG.sol:RandomizerRNG", - "label": "randomNumbers", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 34965, - "contract": "src/rng/RandomizerRNG.sol:RandomizerRNG", - "label": "requesterToID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_address,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_contract(IRandomizer)34880": { - "encoding": "inplace", - "label": "contract IRandomizer", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/RandomizerRNG_Proxy.json b/contracts/deployments/arbitrumSepolia/RandomizerRNG_Proxy.json deleted file mode 100644 index a403b741f..000000000 --- a/contracts/deployments/arbitrumSepolia/RandomizerRNG_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x51a97ad9F0aA818e75819da3cA20CAc319580627", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xe0fe2993ab0e273014c24ca106df28efc31159a1f4176b22ed7428d36319dd6e", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x51a97ad9F0aA818e75819da3cA20CAc319580627", - "transactionIndex": 1, - "gasUsed": "246610", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000010000000000000000000000000000000", - "blockHash": "0xd05ed0e3d3eab93951fbec824a05e7d37364829cb69aa9be55b712daf562464d", - "transactionHash": "0xe0fe2993ab0e273014c24ca106df28efc31159a1f4176b22ed7428d36319dd6e", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 95247762, - "transactionHash": "0xe0fe2993ab0e273014c24ca106df28efc31159a1f4176b22ed7428d36319dd6e", - "address": "0x51a97ad9F0aA818e75819da3cA20CAc319580627", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0xd05ed0e3d3eab93951fbec824a05e7d37364829cb69aa9be55b712daf562464d" - } - ], - "blockNumber": 95247762, - "cumulativeGasUsed": "246610", - "status": 1, - "byzantium": true - }, - "args": [ - "0x1237F02bBeFDAEA20cE3A66aCAe458C4106Ae203", - "0x485cc955000000000000000000000000e775d7fde1d0d09ae627c0131040012ccbcc4b9b000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"RandomizerRNGProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206e4bfb3b93f88c05da2e7790f3420dc92a7e92440e2c63e66223920b337be18264736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212206e4bfb3b93f88c05da2e7790f3420dc92a7e92440e2c63e66223920b337be18264736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/SortitionModule.json b/contracts/deployments/arbitrumSepolia/SortitionModule.json deleted file mode 100644 index 9a021ba68..000000000 --- a/contracts/deployments/arbitrumSepolia/SortitionModule.json +++ /dev/null @@ -1,1106 +0,0 @@ -{ - "address": "0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNK", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNKWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ISortitionModule.Phase", - "name": "_phase", - "type": "uint8" - } - ], - "name": "NewPhase", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeDelayed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_unlock", - "type": "bool" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amountAllCourts", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - } - ], - "name": "changeMaxDrawingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - } - ], - "name": "changeMinStakingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "changeRandomNumberGenerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDisputeHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createTree", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeReadIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeWriteIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "delayedStakes", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "alreadyTransferred", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputesWithoutJurors", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "executeDelayedStakes", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getJurorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalLocked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakedInCourt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbCourts", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorCourtIDs", - "outputs": [ - { - "internalType": "uint96[]", - "name": "", - "type": "uint96[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorLeftoverPNK", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - }, - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize4", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "isJurorStaked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "jurors", - "outputs": [ - { - "internalType": "uint256", - "name": "stakedPnk", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lockedPnk", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPhaseChange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "jurorAccount", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtId", - "type": "uint96" - } - ], - "name": "latestDelayedStakeIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "lockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxDrawingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minStakingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_randomNumber", - "type": "uint256" - } - ], - "name": "notifyRandomNumber", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "passPhase", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "penalizeStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availablePenalty", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "phase", - "outputs": [ - { - "internalType": "enum ISortitionModule.Phase", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "postDrawHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumberRequestBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rng", - "outputs": [ - { - "internalType": "contract RNG", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rngLookahead", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "setJurorInactive", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_ID", - "type": "bytes32" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "unlockStake", - "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": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "validateStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "enum StakingResult", - "name": "stakingResult", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "withdrawLeftoverPNK", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x1341bcde150871b6c3001ef791e33bddac8b45de574894893c6b368a1781cb6f", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD", - "transactionIndex": 1, - "gasUsed": "362402", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000004000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000200000000000000000000000000000000000000000", - "blockHash": "0x41c539093428c7ae0b79faa03c59034892fbb49e23bcf3694ac26773e979b19b", - "transactionHash": "0x1341bcde150871b6c3001ef791e33bddac8b45de574894893c6b368a1781cb6f", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 95250316, - "transactionHash": "0x1341bcde150871b6c3001ef791e33bddac8b45de574894893c6b368a1781cb6f", - "address": "0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x41c539093428c7ae0b79faa03c59034892fbb49e23bcf3694ac26773e979b19b" - } - ], - "blockNumber": 95250316, - "cumulativeGasUsed": "362402", - "status": 1, - "byzantium": true - }, - "args": [ - "0xA418a7E63DC8Aa0F379487E4445f86543C16A0E9", - "0x54812d17000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000e8442307d36e9bf6ab27f1a009f95ce8e11c3479000000000000000000000000000000000000000000000000000000000000070800000000000000000000000000000000000000000000000000000000000007080000000000000000000000000298a3efa6faf90865725e2b48cf0f66e5d527540000000000000000000000000000000000000000000000000000000000000014" - ], - "numDeployments": 3, - "solcInputHash": "74873d15f43e245d08be76d8560e80d9", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"SortitionModuleProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220f2e3563554b18c2c9587081d72ef7797df12f887fb52d3ccfb244524903568c364736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220f2e3563554b18c2c9587081d72ef7797df12f887fb52d3ccfb244524903568c364736f6c634300081c0033", - "execute": { - "methodName": "initialize4", - "args": [] - }, - "implementation": "0x0C872eeF07030107b53eaD15bb7dD7E6FBCA2b83", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/SortitionModule_Implementation.json b/contracts/deployments/arbitrumSepolia/SortitionModule_Implementation.json deleted file mode 100644 index 28ba5f824..000000000 --- a/contracts/deployments/arbitrumSepolia/SortitionModule_Implementation.json +++ /dev/null @@ -1,1679 +0,0 @@ -{ - "address": "0x0C872eeF07030107b53eaD15bb7dD7E6FBCA2b83", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNK", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNKWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ISortitionModule.Phase", - "name": "_phase", - "type": "uint8" - } - ], - "name": "NewPhase", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeDelayed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_unlock", - "type": "bool" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amountAllCourts", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - } - ], - "name": "changeMaxDrawingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - } - ], - "name": "changeMinStakingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "changeRandomNumberGenerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDisputeHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createTree", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeReadIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeWriteIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "delayedStakes", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "alreadyTransferred", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputesWithoutJurors", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "executeDelayedStakes", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getJurorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalLocked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakedInCourt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbCourts", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorCourtIDs", - "outputs": [ - { - "internalType": "uint96[]", - "name": "", - "type": "uint96[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorLeftoverPNK", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - }, - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize4", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "isJurorStaked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "jurors", - "outputs": [ - { - "internalType": "uint256", - "name": "stakedPnk", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lockedPnk", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPhaseChange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "jurorAccount", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtId", - "type": "uint96" - } - ], - "name": "latestDelayedStakeIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "lockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxDrawingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minStakingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_randomNumber", - "type": "uint256" - } - ], - "name": "notifyRandomNumber", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "passPhase", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "penalizeStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availablePenalty", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "phase", - "outputs": [ - { - "internalType": "enum ISortitionModule.Phase", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "postDrawHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumberRequestBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rng", - "outputs": [ - { - "internalType": "contract RNG", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rngLookahead", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "setJurorInactive", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_ID", - "type": "bytes32" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "unlockStake", - "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": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "validateStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "enum StakingResult", - "name": "stakingResult", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "withdrawLeftoverPNK", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x351b6d405df45284ee5e84b3bcf3780db02d95a216094b161d2e578509b8cce4", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x0C872eeF07030107b53eaD15bb7dD7E6FBCA2b83", - "transactionIndex": 1, - "gasUsed": "2697945", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000800000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000008000000000000000000000000000000000000000000000000000", - "blockHash": "0x730a3e93247e55063212d836e0d0b5113b9a19f23730b8f2148712b5fd6e82ca", - "transactionHash": "0x351b6d405df45284ee5e84b3bcf3780db02d95a216094b161d2e578509b8cce4", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 178241757, - "transactionHash": "0x351b6d405df45284ee5e84b3bcf3780db02d95a216094b161d2e578509b8cce4", - "address": "0x0C872eeF07030107b53eaD15bb7dD7E6FBCA2b83", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 0, - "blockHash": "0x730a3e93247e55063212d836e0d0b5113b9a19f23730b8f2148712b5fd6e82ca" - } - ], - "blockNumber": 178241757, - "cumulativeGasUsed": "2697945", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 3, - "solcInputHash": "74873d15f43e245d08be76d8560e80d9", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LeftoverPNK\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LeftoverPNKWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum ISortitionModule.Phase\",\"name\":\"_phase\",\"type\":\"uint8\"}],\"name\":\"NewPhase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"StakeDelayed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_unlock\",\"type\":\"bool\"}],\"name\":\"StakeLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amountAllCourts\",\"type\":\"uint256\"}],\"name\":\"StakeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDrawingTime\",\"type\":\"uint256\"}],\"name\":\"changeMaxDrawingTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minStakingTime\",\"type\":\"uint256\"}],\"name\":\"changeMinStakingTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract RNG\",\"name\":\"_rng\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rngLookahead\",\"type\":\"uint256\"}],\"name\":\"changeRandomNumberGenerator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"createDisputeHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createTree\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedStakeReadIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedStakeWriteIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedStakes\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"alreadyTransferred\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputesWithoutJurors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_iterations\",\"type\":\"uint256\"}],\"name\":\"executeDelayedStakes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"getJurorBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stakedInCourt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbCourts\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"getJurorCourtIDs\",\"outputs\":[{\"internalType\":\"uint96[]\",\"name\":\"\",\"type\":\"uint96[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"getJurorLeftoverPNK\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minStakingTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxDrawingTime\",\"type\":\"uint256\"},{\"internalType\":\"contract RNG\",\"name\":\"_rng\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rngLookahead\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize4\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"isJurorStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"jurors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stakedPnk\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lockedPnk\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPhaseChange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"jurorAccount\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"courtId\",\"type\":\"uint96\"}],\"name\":\"latestDelayedStakeIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"}],\"name\":\"lockStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDrawingTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minStakingTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_randomNumber\",\"type\":\"uint256\"}],\"name\":\"notifyRandomNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"passPhase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"}],\"name\":\"penalizeStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pnkBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availablePenalty\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"phase\",\"outputs\":[{\"internalType\":\"enum ISortitionModule.Phase\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"postDrawHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomNumberRequestBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rng\",\"outputs\":[{\"internalType\":\"contract RNG\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rngLookahead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setJurorInactive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_pnkDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pnkWithdrawal\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"setStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_ID\",\"type\":\"bytes32\"}],\"name\":\"stakeOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"stakeOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"}],\"name\":\"unlockStake\",\"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\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"validateStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pnkDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pnkWithdrawal\",\"type\":\"uint256\"},{\"internalType\":\"enum StakingResult\",\"name\":\"stakingResult\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"withdrawLeftoverPNK\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A factory of trees that keeps track of staked values for sortition.\",\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"LeftoverPNK(address,uint256)\":{\"details\":\"Emitted when leftover PNK is available.\",\"params\":{\"_account\":\"The account of the juror.\",\"_amount\":\"The amount of PNK available.\"}},\"LeftoverPNKWithdrawn(address,uint256)\":{\"details\":\"Emitted when leftover PNK is withdrawn.\",\"params\":{\"_account\":\"The account of the juror withdrawing PNK.\",\"_amount\":\"The amount of PNK withdrawn.\"}},\"StakeDelayed(address,uint96,uint256)\":{\"params\":{\"_address\":\"The address of the juror.\",\"_amount\":\"The amount of tokens staked in the court.\",\"_courtID\":\"The ID of the court.\"}},\"StakeLocked(address,uint256,bool)\":{\"params\":{\"_address\":\"The address of the juror.\",\"_relativeAmount\":\"The amount of tokens locked.\",\"_unlock\":\"Whether the stake is locked or unlocked.\"}},\"StakeSet(address,uint256,uint256,uint256)\":{\"params\":{\"_address\":\"The address of the juror.\",\"_amount\":\"The amount of tokens staked in the court.\",\"_amountAllCourts\":\"The amount of tokens staked in all courts.\",\"_courtID\":\"The ID of the court.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor of the contract.\",\"params\":{\"_governor\":\"The new governor.\"}},\"changeMaxDrawingTime(uint256)\":{\"details\":\"Changes the `maxDrawingTime` storage variable.\",\"params\":{\"_maxDrawingTime\":\"The new value for the `maxDrawingTime` storage variable.\"}},\"changeMinStakingTime(uint256)\":{\"details\":\"Changes the `minStakingTime` storage variable.\",\"params\":{\"_minStakingTime\":\"The new value for the `minStakingTime` storage variable.\"}},\"changeRandomNumberGenerator(address,uint256)\":{\"details\":\"Changes the `_rng` and `_rngLookahead` storage variables.\",\"params\":{\"_rng\":\"The new value for the `RNGenerator` storage variable.\",\"_rngLookahead\":\"The new value for the `rngLookahead` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createTree(bytes32,bytes)\":{\"details\":\"Create a sortition sum tree at the specified key.\",\"params\":{\"_extraData\":\"Extra data that contains the number of children each node in the tree should have.\",\"_key\":\"The key of the new tree.\"}},\"draw(bytes32,uint256,uint256)\":{\"details\":\"Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0.\",\"params\":{\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\",\"_key\":\"The key of the tree.\",\"_nonce\":\"Nonce to hash with random number.\"},\"returns\":{\"drawnAddress\":\"The drawn address. `O(k * log_k(n))` where `k` is the maximum number of children per node in the tree, and `n` is the maximum number of nodes ever appended.\"}},\"executeDelayedStakes(uint256)\":{\"details\":\"Executes the next delayed stakes.\",\"params\":{\"_iterations\":\"The number of delayed stakes to execute.\"}},\"getJurorCourtIDs(address)\":{\"details\":\"Gets the court identifiers where a specific `_juror` has staked.\",\"params\":{\"_juror\":\"The address of the juror.\"}},\"initialize(address,address,uint256,uint256,address,uint256)\":{\"details\":\"Initializer (constructor equivalent for upgradable contracts).\",\"params\":{\"_core\":\"The KlerosCore.\",\"_governor\":\"The governor.\",\"_maxDrawingTime\":\"Time after which the drawing phase can be switched\",\"_minStakingTime\":\"Minimal time to stake\",\"_rng\":\"The random number generator.\",\"_rngLookahead\":\"Lookahead value for rng.\"}},\"notifyRandomNumber(uint256)\":{\"details\":\"Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase().\",\"params\":{\"_randomNumber\":\"Random number returned by RNG contract.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setJurorInactive(address)\":{\"details\":\"Unstakes the inactive juror from all courts. `O(n * (p * log_k(j)) )` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\",\"params\":{\"_account\":\"The juror to unstake.\"}},\"setStake(address,uint96,uint256,uint256,uint256)\":{\"details\":\"Update the state of the stakes, called by KC at the end of setStake flow. `O(n + p * log_k(j))` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\",\"params\":{\"_account\":\"The address of the juror.\",\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake.\",\"_pnkDeposit\":\"The amount of PNK to be deposited.\",\"_pnkWithdrawal\":\"The amount of PNK to be withdrawn.\"}},\"stakeOf(address,uint96)\":{\"details\":\"Get the stake of a juror in a court.\",\"params\":{\"_courtID\":\"The ID of the court.\",\"_juror\":\"The address of the juror.\"},\"returns\":{\"_0\":\"value The stake of the juror in the court.\"}},\"stakeOf(bytes32,bytes32)\":{\"details\":\"Get the stake of a juror in a court.\",\"params\":{\"_ID\":\"The stake path ID, corresponding to a juror.\",\"_key\":\"The key of the tree, corresponding to a court.\"},\"returns\":{\"_0\":\"The stake of the juror in the court.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"validateStake(address,uint96,uint256)\":{\"details\":\"Validate the specified juror's new stake for a court. Note: no state changes should be made when returning stakingResult != Successful, otherwise delayed stakes might break invariants.\",\"params\":{\"_account\":\"The address of the juror.\",\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake.\"},\"returns\":{\"pnkDeposit\":\"The amount of PNK to be deposited.\",\"pnkWithdrawal\":\"The amount of PNK to be withdrawn.\",\"stakingResult\":\"The result of the staking operation.\"}},\"withdrawLeftoverPNK(address)\":{\"details\":\"Gives back the locked PNKs in case the juror fully unstaked earlier. Note that since locked and staked PNK are async it is possible for the juror to have positive staked PNK balance while having 0 stake in courts and 0 locked tokens (eg. when the juror fully unstaked during dispute and later got his tokens unlocked). In this case the juror can use this function to withdraw the leftover tokens. Also note that if the juror has some leftover PNK while not fully unstaked he'll have to manually unstake from all courts to trigger this function.\",\"params\":{\"_account\":\"The juror whose PNK to withdraw.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"SortitionModule\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"events\":{\"StakeDelayed(address,uint96,uint256)\":{\"notice\":\"Emitted when a juror's stake is delayed.\"},\"StakeLocked(address,uint256,bool)\":{\"notice\":\"Emitted when a juror's stake is locked.\"},\"StakeSet(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when a juror stakes in a court.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/SortitionModule.sol\":\"SortitionModule\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.9.4\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress\\n );\\n }\\n\\n function initialize5() external reinitializer(5) {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0xd09847c220b2727d8e68ef98b0b7ae6e9f678637626b4265abd4ef4fca9411b9\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = (court.minStake * court.alpha) / ALPHA_DIVISOR;\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = (court.minStake * court.alpha) / ALPHA_DIVISOR;\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(governor).send(round.totalFeesForJurors);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(governor, round.totalFeesForJurors);\\n }\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = (round.pnkAtStakePerJuror * degreeOfCoherence) / ALPHA_DIVISOR;\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = ((_params.pnkPenaltiesInRound / _params.coherentCount) * degreeOfCoherence) / ALPHA_DIVISOR;\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = ((round.totalFeesForJurors / _params.coherentCount) * degreeOfCoherence) / ALPHA_DIVISOR;\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(account).send(feeReward);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(account, feeReward);\\n }\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(governor).send(leftoverFeeReward);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(governor, leftoverFeeReward);\\n }\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) public view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x03e225e6c6c144dcbc7db8641d46a3b7a43b6222b83ea8b15c4cde58ef2cadd2\",\"license\":\"MIT\"},\"src/arbitration/SortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {SortitionModuleBase, KlerosCore, RNG} from \\\"./SortitionModuleBase.sol\\\";\\n\\n/// @title SortitionModule\\n/// @dev A factory of trees that keeps track of staked values for sortition.\\ncontract SortitionModule is SortitionModuleBase {\\n string public constant override version = \\\"0.9.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor.\\n /// @param _core The KlerosCore.\\n /// @param _minStakingTime Minimal time to stake\\n /// @param _maxDrawingTime Time after which the drawing phase can be switched\\n /// @param _rng The random number generator.\\n /// @param _rngLookahead Lookahead value for rng.\\n function initialize(\\n address _governor,\\n KlerosCore _core,\\n uint256 _minStakingTime,\\n uint256 _maxDrawingTime,\\n RNG _rng,\\n uint256 _rngLookahead\\n ) external reinitializer(1) {\\n __SortitionModuleBase_initialize(_governor, _core, _minStakingTime, _maxDrawingTime, _rng, _rngLookahead);\\n }\\n\\n function initialize4() external reinitializer(4) {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view virtual override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0xc527c995e140a3092ed63f7a30043bd7f27190def9dd20499beeb4d8e009fb1c\",\"license\":\"MIT\"},\"src/arbitration/SortitionModuleBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore} from \\\"./KlerosCore.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {RNG} from \\\"../rng/RNG.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title SortitionModuleBase\\n/// @dev A factory of trees that keeps track of staked values for sortition.\\nabstract contract SortitionModuleBase is ISortitionModule, Initializable, UUPSProxiable {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct SortitionSumTree {\\n uint256 K; // The maximum number of children per node.\\n // We use this to keep track of vacant positions in the tree after removing a leaf. This is for keeping the tree as balanced as possible without spending gas on moving nodes around.\\n uint256[] stack;\\n uint256[] nodes;\\n // Two-way mapping of IDs to node indexes. Note that node index 0 is reserved for the root node, and means the ID does not have a node.\\n mapping(bytes32 => uint256) IDsToNodeIndexes;\\n mapping(uint256 => bytes32) nodeIndexesToIDs;\\n }\\n\\n struct DelayedStake {\\n address account; // The address of the juror.\\n uint96 courtID; // The ID of the court.\\n uint256 stake; // The new stake.\\n bool alreadyTransferred; // DEPRECATED. True if tokens were already transferred before delayed stake's execution.\\n }\\n\\n struct Juror {\\n uint96[] courtIDs; // The IDs of courts where the juror's stake path ends. A stake path is a path from the general court to a court the juror directly staked in using `_setStake`.\\n uint256 stakedPnk; // The juror's total amount of tokens staked in subcourts. Reflects actual pnk balance.\\n uint256 lockedPnk; // The juror's total amount of tokens locked in disputes.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The core arbitrator contract.\\n Phase public phase; // The current phase.\\n uint256 public minStakingTime; // The time after which the phase can be switched to Drawing if there are open disputes.\\n uint256 public maxDrawingTime; // The time after which the phase can be switched back to Staking.\\n uint256 public lastPhaseChange; // The last time the phase was changed.\\n uint256 public randomNumberRequestBlock; // Number of the block when RNG request was made.\\n uint256 public disputesWithoutJurors; // The number of disputes that have not finished drawing jurors.\\n RNG public rng; // The random number generator.\\n uint256 public randomNumber; // Random number returned by RNG.\\n uint256 public rngLookahead; // Minimal block distance between requesting and obtaining a random number.\\n uint256 public delayedStakeWriteIndex; // The index of the last `delayedStake` item that was written to the array. 0 index is skipped.\\n uint256 public delayedStakeReadIndex; // The index of the next `delayedStake` item that should be processed. Starts at 1 because 0 index is skipped.\\n mapping(bytes32 treeHash => SortitionSumTree) sortitionSumTrees; // The mapping trees by keys.\\n mapping(address account => Juror) public jurors; // The jurors.\\n mapping(uint256 => DelayedStake) public delayedStakes; // Stores the stakes that were changed during Drawing phase, to update them when the phase is switched to Staking.\\n mapping(address jurorAccount => mapping(uint96 courtId => uint256)) public latestDelayedStakeIndex; // DEPRECATED. Maps the juror to its latest delayed stake. If there is already a delayed stake for this juror then it'll be replaced. latestDelayedStakeIndex[juror][courtID].\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @notice Emitted when a juror stakes in a court.\\n /// @param _address The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _amount The amount of tokens staked in the court.\\n /// @param _amountAllCourts The amount of tokens staked in all courts.\\n event StakeSet(address indexed _address, uint256 _courtID, uint256 _amount, uint256 _amountAllCourts);\\n\\n /// @notice Emitted when a juror's stake is delayed.\\n /// @param _address The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _amount The amount of tokens staked in the court.\\n event StakeDelayed(address indexed _address, uint96 indexed _courtID, uint256 _amount);\\n\\n /// @notice Emitted when a juror's stake is locked.\\n /// @param _address The address of the juror.\\n /// @param _relativeAmount The amount of tokens locked.\\n /// @param _unlock Whether the stake is locked or unlocked.\\n event StakeLocked(address indexed _address, uint256 _relativeAmount, bool _unlock);\\n\\n /// @dev Emitted when leftover PNK is available.\\n /// @param _account The account of the juror.\\n /// @param _amount The amount of PNK available.\\n event LeftoverPNK(address indexed _account, uint256 _amount);\\n\\n /// @dev Emitted when leftover PNK is withdrawn.\\n /// @param _account The account of the juror withdrawing PNK.\\n /// @param _amount The amount of PNK withdrawn.\\n event LeftoverPNKWithdrawn(address indexed _account, uint256 _amount);\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __SortitionModuleBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n uint256 _minStakingTime,\\n uint256 _maxDrawingTime,\\n RNG _rng,\\n uint256 _rngLookahead\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n minStakingTime = _minStakingTime;\\n maxDrawingTime = _maxDrawingTime;\\n lastPhaseChange = block.timestamp;\\n rng = _rng;\\n rngLookahead = _rngLookahead;\\n delayedStakeReadIndex = 1;\\n }\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(governor) == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor of the contract.\\n /// @param _governor The new governor.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `minStakingTime` storage variable.\\n /// @param _minStakingTime The new value for the `minStakingTime` storage variable.\\n function changeMinStakingTime(uint256 _minStakingTime) external onlyByGovernor {\\n minStakingTime = _minStakingTime;\\n }\\n\\n /// @dev Changes the `maxDrawingTime` storage variable.\\n /// @param _maxDrawingTime The new value for the `maxDrawingTime` storage variable.\\n function changeMaxDrawingTime(uint256 _maxDrawingTime) external onlyByGovernor {\\n maxDrawingTime = _maxDrawingTime;\\n }\\n\\n /// @dev Changes the `_rng` and `_rngLookahead` storage variables.\\n /// @param _rng The new value for the `RNGenerator` storage variable.\\n /// @param _rngLookahead The new value for the `rngLookahead` storage variable.\\n function changeRandomNumberGenerator(RNG _rng, uint256 _rngLookahead) external onlyByGovernor {\\n rng = _rng;\\n rngLookahead = _rngLookahead;\\n if (phase == Phase.generating) {\\n rng.requestRandomness(block.number + rngLookahead);\\n randomNumberRequestBlock = block.number;\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function passPhase() external {\\n if (phase == Phase.staking) {\\n require(\\n block.timestamp - lastPhaseChange >= minStakingTime,\\n \\\"The minimum staking time has not passed yet.\\\"\\n );\\n require(disputesWithoutJurors > 0, \\\"There are no disputes that need jurors.\\\");\\n rng.requestRandomness(block.number + rngLookahead);\\n randomNumberRequestBlock = block.number;\\n phase = Phase.generating;\\n } else if (phase == Phase.generating) {\\n randomNumber = rng.receiveRandomness(randomNumberRequestBlock + rngLookahead);\\n require(randomNumber != 0, \\\"Random number is not ready yet\\\");\\n phase = Phase.drawing;\\n } else if (phase == Phase.drawing) {\\n require(\\n disputesWithoutJurors == 0 || block.timestamp - lastPhaseChange >= maxDrawingTime,\\n \\\"There are still disputes without jurors and the maximum drawing time has not passed yet.\\\"\\n );\\n phase = Phase.staking;\\n }\\n\\n lastPhaseChange = block.timestamp;\\n emit NewPhase(phase);\\n }\\n\\n /// @dev Create a sortition sum tree at the specified key.\\n /// @param _key The key of the new tree.\\n /// @param _extraData Extra data that contains the number of children each node in the tree should have.\\n function createTree(bytes32 _key, bytes memory _extraData) external override onlyByCore {\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n uint256 K = _extraDataToTreeK(_extraData);\\n require(tree.K == 0, \\\"Tree already exists.\\\");\\n require(K > 1, \\\"K must be greater than one.\\\");\\n tree.K = K;\\n tree.nodes.push(0);\\n }\\n\\n /// @dev Executes the next delayed stakes.\\n /// @param _iterations The number of delayed stakes to execute.\\n function executeDelayedStakes(uint256 _iterations) external {\\n require(phase == Phase.staking, \\\"Should be in Staking phase.\\\");\\n require(delayedStakeWriteIndex >= delayedStakeReadIndex, \\\"No delayed stake to execute.\\\");\\n\\n uint256 actualIterations = (delayedStakeReadIndex + _iterations) - 1 > delayedStakeWriteIndex\\n ? (delayedStakeWriteIndex - delayedStakeReadIndex) + 1\\n : _iterations;\\n uint256 newDelayedStakeReadIndex = delayedStakeReadIndex + actualIterations;\\n\\n for (uint256 i = delayedStakeReadIndex; i < newDelayedStakeReadIndex; i++) {\\n DelayedStake storage delayedStake = delayedStakes[i];\\n core.setStakeBySortitionModule(delayedStake.account, delayedStake.courtID, delayedStake.stake);\\n delete delayedStakes[i];\\n }\\n delayedStakeReadIndex = newDelayedStakeReadIndex;\\n }\\n\\n function createDisputeHook(uint256 /*_disputeID*/, uint256 /*_roundID*/) external override onlyByCore {\\n disputesWithoutJurors++;\\n }\\n\\n function postDrawHook(uint256 /*_disputeID*/, uint256 /*_roundID*/) external override onlyByCore {\\n disputesWithoutJurors--;\\n }\\n\\n /// @dev Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase().\\n /// @param _randomNumber Random number returned by RNG contract.\\n function notifyRandomNumber(uint256 _randomNumber) public override {}\\n\\n /// @dev Validate the specified juror's new stake for a court.\\n /// Note: no state changes should be made when returning stakingResult != Successful, otherwise delayed stakes might break invariants.\\n /// @param _account The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// @return pnkDeposit The amount of PNK to be deposited.\\n /// @return pnkWithdrawal The amount of PNK to be withdrawn.\\n /// @return stakingResult The result of the staking operation.\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external override onlyByCore returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) {\\n (pnkDeposit, pnkWithdrawal, stakingResult) = _validateStake(_account, _courtID, _newStake);\\n }\\n\\n function _validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) internal virtual returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) {\\n Juror storage juror = jurors[_account];\\n uint256 currentStake = stakeOf(_account, _courtID);\\n\\n uint256 nbCourts = juror.courtIDs.length;\\n if (currentStake == 0 && nbCourts >= MAX_STAKE_PATHS) {\\n return (0, 0, StakingResult.CannotStakeInMoreCourts); // Prevent staking beyond MAX_STAKE_PATHS but unstaking is always allowed.\\n }\\n\\n if (currentStake == 0 && _newStake == 0) {\\n return (0, 0, StakingResult.CannotStakeZeroWhenNoStake); // Forbid staking 0 amount when current stake is 0 to avoid flaky behaviour.\\n }\\n\\n if (phase != Phase.staking) {\\n // Store the stake change as delayed, to be applied when the phase switches back to Staking.\\n DelayedStake storage delayedStake = delayedStakes[++delayedStakeWriteIndex];\\n delayedStake.account = _account;\\n delayedStake.courtID = _courtID;\\n delayedStake.stake = _newStake;\\n emit StakeDelayed(_account, _courtID, _newStake);\\n return (pnkDeposit, pnkWithdrawal, StakingResult.Delayed);\\n }\\n\\n // Current phase is Staking: set stakes.\\n if (_newStake >= currentStake) {\\n pnkDeposit = _newStake - currentStake;\\n } else {\\n pnkWithdrawal = currentStake - _newStake;\\n // Ensure locked tokens remain in the contract. They can only be released during Execution.\\n uint256 possibleWithdrawal = juror.stakedPnk > juror.lockedPnk ? juror.stakedPnk - juror.lockedPnk : 0;\\n if (pnkWithdrawal > possibleWithdrawal) {\\n pnkWithdrawal = possibleWithdrawal;\\n }\\n }\\n return (pnkDeposit, pnkWithdrawal, StakingResult.Successful);\\n }\\n\\n /// @dev Update the state of the stakes, called by KC at the end of setStake flow.\\n /// `O(n + p * log_k(j))` where\\n /// `n` is the number of courts the juror has staked in,\\n /// `p` is the depth of the court tree,\\n /// `k` is the minimum number of children per node of one of these courts' sortition sum tree,\\n /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\\n /// @param _account The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _pnkDeposit The amount of PNK to be deposited.\\n /// @param _pnkWithdrawal The amount of PNK to be withdrawn.\\n /// @param _newStake The new stake.\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external override onlyByCore {\\n _setStake(_account, _courtID, _pnkDeposit, _pnkWithdrawal, _newStake);\\n }\\n\\n function _setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) internal virtual {\\n Juror storage juror = jurors[_account];\\n if (_pnkDeposit > 0) {\\n uint256 currentStake = stakeOf(_account, _courtID);\\n if (currentStake == 0) {\\n juror.courtIDs.push(_courtID);\\n }\\n // Increase juror's balance by deposited amount.\\n juror.stakedPnk += _pnkDeposit;\\n } else {\\n juror.stakedPnk -= _pnkWithdrawal;\\n if (_newStake == 0) {\\n // Cleanup\\n for (uint256 i = juror.courtIDs.length; i > 0; i--) {\\n if (juror.courtIDs[i - 1] == _courtID) {\\n juror.courtIDs[i - 1] = juror.courtIDs[juror.courtIDs.length - 1];\\n juror.courtIDs.pop();\\n break;\\n }\\n }\\n }\\n }\\n\\n // Update the sortition sum tree.\\n bytes32 stakePathID = _accountAndCourtIDToStakePathID(_account, _courtID);\\n bool finished = false;\\n uint96 currenCourtID = _courtID;\\n while (!finished) {\\n // Tokens are also implicitly staked in parent courts through sortition module to increase the chance of being drawn.\\n _set(bytes32(uint256(currenCourtID)), _newStake, stakePathID);\\n if (currenCourtID == GENERAL_COURT) {\\n finished = true;\\n } else {\\n (currenCourtID, , , , , , ) = core.courts(currenCourtID); // Get the parent court.\\n }\\n }\\n emit StakeSet(_account, _courtID, _newStake, juror.stakedPnk);\\n }\\n\\n function lockStake(address _account, uint256 _relativeAmount) external override onlyByCore {\\n jurors[_account].lockedPnk += _relativeAmount;\\n emit StakeLocked(_account, _relativeAmount, false);\\n }\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external override onlyByCore {\\n Juror storage juror = jurors[_account];\\n juror.lockedPnk -= _relativeAmount;\\n emit StakeLocked(_account, _relativeAmount, true);\\n\\n uint256 amount = getJurorLeftoverPNK(_account);\\n if (amount > 0) {\\n emit LeftoverPNK(_account, amount);\\n }\\n }\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external override onlyByCore returns (uint256 pnkBalance, uint256 availablePenalty) {\\n Juror storage juror = jurors[_account];\\n uint256 stakedPnk = juror.stakedPnk;\\n\\n if (stakedPnk >= _relativeAmount) {\\n availablePenalty = _relativeAmount;\\n juror.stakedPnk -= _relativeAmount;\\n } else {\\n availablePenalty = stakedPnk;\\n juror.stakedPnk = 0;\\n }\\n\\n pnkBalance = juror.stakedPnk;\\n return (pnkBalance, availablePenalty);\\n }\\n\\n /// @dev Unstakes the inactive juror from all courts.\\n /// `O(n * (p * log_k(j)) )` where\\n /// `n` is the number of courts the juror has staked in,\\n /// `p` is the depth of the court tree,\\n /// `k` is the minimum number of children per node of one of these courts' sortition sum tree,\\n /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\\n /// @param _account The juror to unstake.\\n function setJurorInactive(address _account) external override onlyByCore {\\n uint96[] memory courtIDs = getJurorCourtIDs(_account);\\n for (uint256 j = courtIDs.length; j > 0; j--) {\\n core.setStakeBySortitionModule(_account, courtIDs[j - 1], 0);\\n }\\n }\\n\\n /// @dev Gives back the locked PNKs in case the juror fully unstaked earlier.\\n /// Note that since locked and staked PNK are async it is possible for the juror to have positive staked PNK balance\\n /// while having 0 stake in courts and 0 locked tokens (eg. when the juror fully unstaked during dispute and later got his tokens unlocked).\\n /// In this case the juror can use this function to withdraw the leftover tokens.\\n /// Also note that if the juror has some leftover PNK while not fully unstaked he'll have to manually unstake from all courts to trigger this function.\\n /// @param _account The juror whose PNK to withdraw.\\n function withdrawLeftoverPNK(address _account) external override {\\n // Can withdraw the leftover PNK if fully unstaked, has no tokens locked and has positive balance.\\n // This withdrawal can't be triggered by calling setStake() in KlerosCore because current stake is technically 0, thus it is done via separate function.\\n uint256 amount = getJurorLeftoverPNK(_account);\\n require(amount > 0, \\\"Not eligible for withdrawal.\\\");\\n jurors[_account].stakedPnk = 0;\\n core.transferBySortitionModule(_account, amount);\\n emit LeftoverPNKWithdrawn(_account, amount);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Draw an ID from a tree using a number.\\n /// Note that this function reverts if the sum of all values in the tree is 0.\\n /// @param _key The key of the tree.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _nonce Nonce to hash with random number.\\n /// @return drawnAddress The drawn address.\\n /// `O(k * log_k(n))` where\\n /// `k` is the maximum number of children per node in the tree,\\n /// and `n` is the maximum number of nodes ever appended.\\n function draw(\\n bytes32 _key,\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) public view override returns (address drawnAddress) {\\n require(phase == Phase.drawing, \\\"Wrong phase.\\\");\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n\\n if (tree.nodes[0] == 0) {\\n return address(0); // No jurors staked.\\n }\\n\\n uint256 currentDrawnNumber = uint256(keccak256(abi.encodePacked(randomNumber, _coreDisputeID, _nonce))) %\\n tree.nodes[0];\\n\\n // While it still has children\\n uint256 treeIndex = 0;\\n while ((tree.K * treeIndex) + 1 < tree.nodes.length) {\\n for (uint256 i = 1; i <= tree.K; i++) {\\n // Loop over children.\\n uint256 nodeIndex = (tree.K * treeIndex) + i;\\n uint256 nodeValue = tree.nodes[nodeIndex];\\n\\n if (currentDrawnNumber >= nodeValue) {\\n // Go to the next child.\\n currentDrawnNumber -= nodeValue;\\n } else {\\n // Pick this child.\\n treeIndex = nodeIndex;\\n break;\\n }\\n }\\n }\\n drawnAddress = _stakePathIDToAccount(tree.nodeIndexesToIDs[treeIndex]);\\n }\\n\\n /// @dev Get the stake of a juror in a court.\\n /// @param _juror The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @return value The stake of the juror in the court.\\n function stakeOf(address _juror, uint96 _courtID) public view returns (uint256) {\\n bytes32 stakePathID = _accountAndCourtIDToStakePathID(_juror, _courtID);\\n return stakeOf(bytes32(uint256(_courtID)), stakePathID);\\n }\\n\\n /// @dev Get the stake of a juror in a court.\\n /// @param _key The key of the tree, corresponding to a court.\\n /// @param _ID The stake path ID, corresponding to a juror.\\n /// @return The stake of the juror in the court.\\n function stakeOf(bytes32 _key, bytes32 _ID) public view returns (uint256) {\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n uint treeIndex = tree.IDsToNodeIndexes[_ID];\\n if (treeIndex == 0) {\\n return 0;\\n }\\n return tree.nodes[treeIndex];\\n }\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n )\\n external\\n view\\n override\\n returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts)\\n {\\n Juror storage juror = jurors[_juror];\\n totalStaked = juror.stakedPnk;\\n totalLocked = juror.lockedPnk;\\n stakedInCourt = stakeOf(_juror, _courtID);\\n nbCourts = juror.courtIDs.length;\\n }\\n\\n /// @dev Gets the court identifiers where a specific `_juror` has staked.\\n /// @param _juror The address of the juror.\\n function getJurorCourtIDs(address _juror) public view override returns (uint96[] memory) {\\n return jurors[_juror].courtIDs;\\n }\\n\\n function isJurorStaked(address _juror) external view override returns (bool) {\\n return jurors[_juror].stakedPnk > 0;\\n }\\n\\n function getJurorLeftoverPNK(address _juror) public view override returns (uint256) {\\n Juror storage juror = jurors[_juror];\\n if (juror.courtIDs.length == 0 && juror.lockedPnk == 0) {\\n return juror.stakedPnk;\\n } else {\\n return 0;\\n }\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Update all the parents of a node.\\n /// @param _key The key of the tree to update.\\n /// @param _treeIndex The index of the node to start from.\\n /// @param _plusOrMinus Whether to add (true) or substract (false).\\n /// @param _value The value to add or substract.\\n /// `O(log_k(n))` where\\n /// `k` is the maximum number of children per node in the tree,\\n /// and `n` is the maximum number of nodes ever appended.\\n function _updateParents(bytes32 _key, uint256 _treeIndex, bool _plusOrMinus, uint256 _value) private {\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n\\n uint256 parentIndex = _treeIndex;\\n while (parentIndex != 0) {\\n parentIndex = (parentIndex - 1) / tree.K;\\n tree.nodes[parentIndex] = _plusOrMinus\\n ? tree.nodes[parentIndex] + _value\\n : tree.nodes[parentIndex] - _value;\\n }\\n }\\n\\n /// @dev Retrieves a juror's address from the stake path ID.\\n /// @param _stakePathID The stake path ID to unpack.\\n /// @return account The account.\\n function _stakePathIDToAccount(bytes32 _stakePathID) internal pure returns (address account) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let ptr := mload(0x40)\\n for {\\n let i := 0x00\\n } lt(i, 0x14) {\\n i := add(i, 0x01)\\n } {\\n mstore8(add(add(ptr, 0x0c), i), byte(i, _stakePathID))\\n }\\n account := mload(ptr)\\n }\\n }\\n\\n function _extraDataToTreeK(bytes memory _extraData) internal pure returns (uint256 K) {\\n if (_extraData.length >= 32) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n K := mload(add(_extraData, 0x20))\\n }\\n } else {\\n K = DEFAULT_K;\\n }\\n }\\n\\n /// @dev Set a value in a tree.\\n /// @param _key The key of the tree.\\n /// @param _value The new value.\\n /// @param _ID The ID of the value.\\n /// `O(log_k(n))` where\\n /// `k` is the maximum number of children per node in the tree,\\n /// and `n` is the maximum number of nodes ever appended.\\n function _set(bytes32 _key, uint256 _value, bytes32 _ID) internal {\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n uint256 treeIndex = tree.IDsToNodeIndexes[_ID];\\n\\n if (treeIndex == 0) {\\n // No existing node.\\n if (_value != 0) {\\n // Non zero value.\\n // Append.\\n // Add node.\\n if (tree.stack.length == 0) {\\n // No vacant spots.\\n // Get the index and append the value.\\n treeIndex = tree.nodes.length;\\n tree.nodes.push(_value);\\n\\n // Potentially append a new node and make the parent a sum node.\\n if (treeIndex != 1 && (treeIndex - 1) % tree.K == 0) {\\n // Is first child.\\n uint256 parentIndex = treeIndex / tree.K;\\n bytes32 parentID = tree.nodeIndexesToIDs[parentIndex];\\n uint256 newIndex = treeIndex + 1;\\n tree.nodes.push(tree.nodes[parentIndex]);\\n delete tree.nodeIndexesToIDs[parentIndex];\\n tree.IDsToNodeIndexes[parentID] = newIndex;\\n tree.nodeIndexesToIDs[newIndex] = parentID;\\n }\\n } else {\\n // Some vacant spot.\\n // Pop the stack and append the value.\\n treeIndex = tree.stack[tree.stack.length - 1];\\n tree.stack.pop();\\n tree.nodes[treeIndex] = _value;\\n }\\n\\n // Add label.\\n tree.IDsToNodeIndexes[_ID] = treeIndex;\\n tree.nodeIndexesToIDs[treeIndex] = _ID;\\n\\n _updateParents(_key, treeIndex, true, _value);\\n }\\n } else {\\n // Existing node.\\n if (_value == 0) {\\n // Zero value.\\n // Remove.\\n // Remember value and set to 0.\\n uint256 value = tree.nodes[treeIndex];\\n tree.nodes[treeIndex] = 0;\\n\\n // Push to stack.\\n tree.stack.push(treeIndex);\\n\\n // Clear label.\\n delete tree.IDsToNodeIndexes[_ID];\\n delete tree.nodeIndexesToIDs[treeIndex];\\n\\n _updateParents(_key, treeIndex, false, value);\\n } else if (_value != tree.nodes[treeIndex]) {\\n // New, non zero value.\\n // Set.\\n bool plusOrMinus = tree.nodes[treeIndex] <= _value;\\n uint256 plusOrMinusValue = plusOrMinus\\n ? _value - tree.nodes[treeIndex]\\n : tree.nodes[treeIndex] - _value;\\n tree.nodes[treeIndex] = _value;\\n\\n _updateParents(_key, treeIndex, plusOrMinus, plusOrMinusValue);\\n }\\n }\\n }\\n\\n /// @dev Packs an account and a court ID into a stake path ID.\\n /// @param _account The address of the juror to pack.\\n /// @param _courtID The court ID to pack.\\n /// @return stakePathID The stake path ID.\\n function _accountAndCourtIDToStakePathID(\\n address _account,\\n uint96 _courtID\\n ) internal pure returns (bytes32 stakePathID) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let ptr := mload(0x40)\\n for {\\n let i := 0x00\\n } lt(i, 0x14) {\\n i := add(i, 0x01)\\n } {\\n mstore8(add(ptr, i), byte(add(0x0c, i), _account))\\n }\\n for {\\n let i := 0x14\\n } lt(i, 0x20) {\\n i := add(i, 0x01)\\n } {\\n mstore8(add(ptr, i), byte(i, _courtID))\\n }\\n stakePathID := mload(ptr)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x550f0c0bea80f7457f76f50e27dfa1b8632fe9eb28d4e57f8b2bed9a10a31696\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"},\"src/rng/RNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\ninterface RNG {\\n /// @dev Request a random number.\\n /// @param _block Block linked to the request.\\n function requestRandomness(uint256 _block) external;\\n\\n /// @dev Receive the random number.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber Random Number. If the number is not ready or has not been required 0 instead.\\n function receiveRandomness(uint256 _block) external returns (uint256 randomNumber);\\n}\\n\",\"keccak256\":\"0x0f6a8fb72ed7e5a602dc0aaf4f3a037ba9f1765b79b6320604ff810d578af2cf\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612f3f6100fc60003960008181611389015281816113b201526115aa0152612f3f6000f3fe6080604052600436106102725760003560e01c80637dc38f141161014f578063caeb50ed116100c1578063dd5e5cb51161007a578063dd5e5cb5146107b9578063e4c0aaf4146107d9578063e534710d146107f9578063f216de4c14610831578063f2f4eb2614610851578063f6b4d82d1461087157600080fd5b8063caeb50ed146106c2578063ccbac9f5146106d7578063d09f392d146106ed578063d1c1df481461070d578063d605787b1461074d578063dca5f6b01461076d57600080fd5b8063aac03ad211610113578063aac03ad214610612578063b1c9fe6e14610632578063b5d69e9914610660578063b888adfa14610680578063c057eca714610696578063c1572618146106ac57600080fd5b80637dc38f141461057c578063823cfd7014610592578063965af6c7146105b25780639fbb56f1146105d2578063a2473cc1146105f257600080fd5b80634dbbebbc116101e857806354fd4d50116101ac57806354fd4d501461047d57806356acb050146104bb5780635d2d7846146104d15780636624192f146104f157806369f458771461053c57806376fa9fc51461055c57600080fd5b80634dbbebbc146103e85780634f1ef2861461040857806352d1902d1461041b578063543f8a361461043057806354812d171461045d57600080fd5b80631ecacab81161023a5780631ecacab81461031b57806321e1625e1461034a57806321ea9b3f1461036a57806335975f4a14610388578063477a655c146103a85780634c70a0d6146103c857600080fd5b806303432744146102775780630b274f2e146102a05780630c340a24146102b75780630e083ec9146102ef5780631b92bbbe14610305575b600080fd5b34801561028357600080fd5b5061028d60065481565b6040519081526020015b60405180910390f35b3480156102ac57600080fd5b506102b56108ff565b005b3480156102c357600080fd5b506000546102d7906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b3480156102fb57600080fd5b5061028d600a5481565b34801561031157600080fd5b5061028d60035481565b34801561032757600080fd5b5061033b610336366004612896565b610cd7565b604051610297939291906128ed565b34801561035657600080fd5b506102b5610365366004612919565b610d22565b34801561037657600080fd5b506102b5610385366004612945565b50565b34801561039457600080fd5b506102b56103a3366004612945565b610dc5565b3480156103b457600080fd5b506102b56103c3366004612a01565b610fb1565b3480156103d457600080fd5b506102d76103e3366004612a47565b6110a8565b3480156103f457600080fd5b506102b5610403366004612919565b61128c565b6102b5610416366004612a73565b611375565b34801561042757600080fd5b5061028d61159d565b34801561043c57600080fd5b5061045061044b366004612aac565b6115fb565b6040516102979190612ac9565b34801561046957600080fd5b506102b5610478366004612b15565b611699565b34801561048957600080fd5b506104ae604051806040016040528060058152602001640302e392e360dc1b81525081565b6040516102979190612ba0565b3480156104c757600080fd5b5061028d600b5481565b3480156104dd57600080fd5b506102b56104ec366004612bd3565b611769565b3480156104fd57600080fd5b5061052c61050c366004612aac565b6001600160a01b03166000908152600d6020526040902060010154151590565b6040519015158152602001610297565b34801561054857600080fd5b506102b5610557366004612aac565b6117ac565b34801561056857600080fd5b5061028d610577366004612bd3565b6118c3565b34801561058857600080fd5b5061028d60095481565b34801561059e57600080fd5b506102b56105ad366004612945565b61191e565b3480156105be57600080fd5b506102b56105cd366004612919565b61194d565b3480156105de57600080fd5b5061028d6105ed366004612aac565b611a49565b3480156105fe57600080fd5b5061028d61060d366004612bf5565b611a8a565b34801561061e57600080fd5b506102b561062d366004612c2e565b611ab4565b34801561063e57600080fd5b5060015461065390600160a01b900460ff1681565b6040516102979190612c7f565b34801561066c57600080fd5b506102b561067b366004612aac565b611af2565b34801561068c57600080fd5b5061028d60045481565b3480156106a257600080fd5b5061028d60025481565b3480156106b857600080fd5b5061028d60055481565b3480156106ce57600080fd5b506102b5611bd2565b3480156106e357600080fd5b5061028d60085481565b3480156106f957600080fd5b506102b5610708366004612bd3565b611c83565b34801561071957600080fd5b5061072d610728366004612bf5565b611cbd565b604080519485526020850193909352918301526060820152608001610297565b34801561075957600080fd5b506007546102d7906001600160a01b031681565b34801561077957600080fd5b506107a4610788366004612aac565b600d602052600090815260409020600181015460029091015482565b60408051928352602083019190915201610297565b3480156107c557600080fd5b506102b56107d4366004612945565b611cfc565b3480156107e557600080fd5b506102b56107f4366004612aac565b611d2b565b34801561080557600080fd5b5061028d610814366004612bf5565b600f60209081526000928352604080842090915290825290205481565b34801561083d57600080fd5b506107a461084c366004612919565b611d77565b34801561085d57600080fd5b506001546102d7906001600160a01b031681565b34801561087d57600080fd5b506108cb61088c366004612945565b600e602052600090815260409020805460018201546002909201546001600160a01b03821692600160a01b9092046001600160601b0316919060ff1684565b604080516001600160a01b0390951685526001600160601b0390931660208501529183015215156060820152608001610297565b6000600154600160a01b900460ff16600281111561091f5761091f6128d7565b03610a92576002546004546109349042612caf565b101561099c5760405162461bcd60e51b815260206004820152602c60248201527f546865206d696e696d756d207374616b696e672074696d6520686173206e6f7460448201526b103830b9b9b2b2103cb2ba1760a11b60648201526084015b60405180910390fd5b6000600654116109fe5760405162461bcd60e51b815260206004820152602760248201527f546865726520617265206e6f2064697370757465732074686174206e65656420604482015266353ab937b9399760c91b6064820152608401610993565b6007546009546001600160a01b0390911690637363ae1f90610a209043612cc2565b6040518263ffffffff1660e01b8152600401610a3e91815260200190565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b505043600555505060018054819060ff60a01b1916600160a01b825b0217905550610c8c565b60018054600160a01b900460ff166002811115610ab157610ab16128d7565b03610ba9576007546009546005546001600160a01b03909216916313cf905491610ada91612cc2565b6040518263ffffffff1660e01b8152600401610af891815260200190565b6020604051808303816000875af1158015610b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3b9190612cd5565b6008819055600003610b8f5760405162461bcd60e51b815260206004820152601e60248201527f52616e646f6d206e756d626572206973206e6f742072656164792079657400006044820152606401610993565b600180546002919060ff60a01b1916600160a01b83610a88565b6002600154600160a01b900460ff166002811115610bc957610bc96128d7565b03610c8c576006541580610beb5750600354600454610be89042612caf565b10155b610c7e5760405162461bcd60e51b815260206004820152605860248201527f546865726520617265207374696c6c20646973707574657320776974686f757460448201527f206a75726f727320616e6420746865206d6178696d756d2064726177696e67206064820152773a34b6b2903430b9903737ba103830b9b9b2b2103cb2ba1760411b608482015260a401610993565b6001805460ff60a01b191690555b426004556001546040517f31f72b44f546d9e7eaec13f65636997665e15f134a81c82924f568f5c0d07b9391610ccd91600160a01b90910460ff1690612c7f565b60405180910390a1565b600154600090819081906001600160a01b03163314610d085760405162461bcd60e51b815260040161099390612cee565b610d13868686611e05565b91989097509095509350505050565b6001546001600160a01b03163314610d4c5760405162461bcd60e51b815260040161099390612cee565b6001600160a01b0382166000908152600d602052604081206002018054839290610d77908490612cc2565b909155505060408051828152600060208201526001600160a01b038416917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b091015b60405180910390a25050565b6000600154600160a01b900460ff166002811115610de557610de56128d7565b14610e325760405162461bcd60e51b815260206004820152601b60248201527f53686f756c6420626520696e205374616b696e672070686173652e00000000006044820152606401610993565b600b54600a541015610e865760405162461bcd60e51b815260206004820152601c60248201527f4e6f2064656c61796564207374616b6520746f20657865637574652e000000006044820152606401610993565b6000600a54600183600b54610e9b9190612cc2565b610ea59190612caf565b11610eb05781610ecb565b600b54600a54610ec09190612caf565b610ecb906001612cc2565b9050600081600b54610edd9190612cc2565b600b549091505b81811015610fa9576000818152600e602052604090819020600180548254918301549351630761c14d60e01b815292936001600160a01b0391821693630761c14d93610f4793811692600160a01b9091046001600160601b031691600401612d32565b600060405180830381600087803b158015610f6157600080fd5b505af1158015610f75573d6000803e3d6000fd5b5050506000838152600e60205260408120818155600180820192909255600201805460ff191690559092019150610ee49050565b50600b555050565b6001546001600160a01b03163314610fdb5760405162461bcd60e51b815260040161099390612cee565b6000828152600c6020526040812090610ff383611fa8565b82549091501561103c5760405162461bcd60e51b81526020600482015260146024820152732a3932b29030b63932b0b23c9032bc34b9ba399760611b6044820152606401610993565b6001811161108c5760405162461bcd60e51b815260206004820152601b60248201527f4b206d7573742062652067726561746572207468616e206f6e652e00000000006044820152606401610993565b8155600201805460018101825560009182526020822001555050565b60006002600154600160a01b900460ff1660028111156110ca576110ca6128d7565b146111065760405162461bcd60e51b815260206004820152600c60248201526b2bb937b73390383430b9b29760a11b6044820152606401610993565b6000848152600c602052604081206002810180549192909161112a5761112a612d5c565b9060005260206000200154600003611146576000915050611285565b60008160020160008154811061115e5761115e612d5c565b90600052602060002001546008548686604051602001611191939291909283526020830191909152604082015260600190565b6040516020818303038152906040528051906020012060001c6111b49190612d88565b905060005b600283015483546111cb908390612d9c565b6111d6906001612cc2565b10156112655760015b8354811161125f576000818386600001546111fa9190612d9c565b6112049190612cc2565b9050600085600201828154811061121d5761121d612d5c565b906000526020600020015490508085106112425761123b8186612caf565b945061124a565b50915061125f565b5050808061125790612db3565b9150506111df565b506111b9565b600081815260048401602052604090205461127f90611fc4565b93505050505b9392505050565b6000546001600160a01b031633146112b65760405162461bcd60e51b815260040161099390612dcc565b600780546001600160a01b0319166001600160a01b038416179055600981905560018054600160a01b900460ff1660028111156112f5576112f56128d7565b03611371576007546009546001600160a01b0390911690637363ae1f9061131c9043612cc2565b6040518263ffffffff1660e01b815260040161133a91815260200190565b600060405180830381600087803b15801561135457600080fd5b505af1158015611368573d6000803e3d6000fd5b50504360055550505b5050565b61137e82611fef565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113fc57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113f0600080516020612eea8339815191525490565b6001600160a01b031614155b1561141a5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611474575060408051601f3d908101601f1916820190925261147191810190612cd5565b60015b61149c57604051630c76093760e01b81526001600160a01b0383166004820152602401610993565b600080516020612eea83398151915281146114cd57604051632a87526960e21b815260048101829052602401610993565b600080516020612eea8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611598576000836001600160a01b0316836040516115349190612e0e565b600060405180830381855af49150503d806000811461156f576040519150601f19603f3d011682016040523d82523d6000602084013e611574565b606091505b5050905080611596576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115e85760405163703e46dd60e11b815260040160405180910390fd5b50600080516020612eea83398151915290565b6001600160a01b0381166000908152600d602090815260409182902080548351818402810184019094528084526060939283018282801561168d57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b0104928301926001038202915080841161164a5790505b50505050509050919050565b600160006116a5612019565b8054909150600160401b900460ff16806116cc575080546001600160401b03808416911610155b156116e95760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561171888888888888861203d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050505050565b6001546001600160a01b031633146117935760405162461bcd60e51b815260040161099390612cee565b600680549060006117a383612e2a565b91905055505050565b60006117b782611a49565b9050600081116118095760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656c696769626c6520666f72207769746864726177616c2e000000006044820152606401610993565b6001600160a01b038281166000818152600d6020526040808220600190810192909255905490516342c37fa360e01b8152600481019290925260248201849052909116906342c37fa390604401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b50505050816001600160a01b03167f71bb1b604559acc3db697ccf2aa4228d727cd5b133d6ffa419518d51c117c95c82604051610db991815260200190565b6000828152600c60209081526040808320848452600381019092528220548083036118f357600092505050611918565b81600201818154811061190857611908612d5c565b9060005260206000200154925050505b92915050565b6000546001600160a01b031633146119485760405162461bcd60e51b815260040161099390612dcc565b600255565b6001546001600160a01b031633146119775760405162461bcd60e51b815260040161099390612cee565b6001600160a01b0382166000908152600d60205260408120600281018054919284926119a4908490612caf565b909155505060408051838152600160208201526001600160a01b038516917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b0910160405180910390a260006119f884611a49565b9050801561159657836001600160a01b03167f819a3744490c627e221b71743857691f9c23bf56a1ecc5351f886cfd4c3187d982604051611a3b91815260200190565b60405180910390a250505050565b6001600160a01b0381166000908152600d602052604081208054158015611a7257506002810154155b15611a81576001015492915050565b50600092915050565b600080611a97848461209d565b9050611aac6001600160601b038416826118c3565b949350505050565b6001546001600160a01b03163314611ade5760405162461bcd60e51b815260040161099390612cee565b611aeb85858585856120e5565b5050505050565b6001546001600160a01b03163314611b1c5760405162461bcd60e51b815260040161099390612cee565b6000611b27826115fb565b80519091505b801561159857600180546001600160a01b031690630761c14d9085908590611b559086612caf565b81518110611b6557611b65612d5c565b602002602001015160006040518463ffffffff1660e01b8152600401611b8d93929190612d32565b600060405180830381600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050508080611bca90612e2a565b915050611b2d565b60046000611bde612019565b8054909150600160401b900460ff1680611c05575080546001600160401b03808416911610155b15611c225760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6001546001600160a01b03163314611cad5760405162461bcd60e51b815260040161099390612cee565b600680549060006117a383612db3565b6001600160a01b0382166000908152600d6020526040812060018101546002820154909290918190611cef8787611a8a565b9054949793965094505050565b6000546001600160a01b03163314611d265760405162461bcd60e51b815260040161099390612dcc565b600355565b6000546001600160a01b03163314611d555760405162461bcd60e51b815260040161099390612dcc565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460009081906001600160a01b03163314611da65760405162461bcd60e51b815260040161099390612cee565b6001600160a01b0384166000908152600d602052604090206001810154848110611dec5784925084826001016000828254611de19190612caf565b90915550611df79050565b600060018301559150815b506001015491509250929050565b6001600160a01b0383166000908152600d602052604081208190819081611e2c8888611a8a565b825490915081158015611e40575060048110155b15611e58576000806004955095509550505050611f9f565b81158015611e64575086155b15611e7c576000806009955095509550505050611f9f565b6000600154600160a01b900460ff166002811115611e9c57611e9c6128d7565b14611f37576000600e6000600a60008154611eb690612db3565b9182905550815260208082019290925260409081016000206001600160601b038c16600160a01b81026001600160a01b038f169081178355600183018d905592518c8152919450927fa59837f9df3fb816613d84e8fefe31ec8d6e67ff43df6533e3f793a3f53aade9910160405180910390a35060019350611f9f92505050565b818710611f4f57611f488288612caf565b9550611f97565b611f598783612caf565b945060008360020154846001015411611f73576000611f87565b83600201548460010154611f879190612caf565b905080861115611f95578095505b505b506000925050505b93509350939050565b60006020825110611fbb57506020015190565b5060065b919050565b600060405160005b6014811015611fe75783811a81600c84010153600101611fcc565b505192915050565b6000546001600160a01b031633146103855760405162461bcd60e51b815260040161099390612dcc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b61204561241b565b600080546001600160a01b03199081166001600160a01b039889161790915560018054821696881696909617865560029490945560039290925542600455600780549093169416939093179055600991909155600b55565b600060405160005b60148110156120c0578481600c011a818301536001016120a5565b5060145b60208110156120dc5783811a818301536001016120c4565b50519392505050565b6001600160a01b0385166000908152600d60205260409020831561217457600061210f8787611a8a565b905080600003612154578154600180820184556000848152602090206002830401805491909216600c026101000a6001600160601b0381810219909216918916021790555b848260010160008282546121689190612cc2565b909155506122eb915050565b828160010160008282546121889190612caf565b909155505060008290036122eb5780545b80156122e9576001600160601b038616826121b5600184612caf565b815481106121c5576121c5612d5c565b600091825260209091206002820401546001909116600c026101000a90046001600160601b0316036122d7578154829061220190600190612caf565b8154811061221157612211612d5c565b600091825260209091206002820401546001918216600c026101000a90046001600160601b03169083906122459084612caf565b8154811061225557612255612d5c565b9060005260206000209060029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b03160217905550816000018054806122a1576122a1612e41565b60008281526020902060026000199092019182040180546001600160601b03600c60018516026101000a021916905590556122e9565b806122e181612e2a565b915050612199565b505b60006122f7878761209d565b90506000865b816123b5576123166001600160601b0382168685612442565b6000196001600160601b0382160161233157600191506122fd565b600154604051630fad06e960e11b81526001600160601b03831660048201526001600160a01b0390911690631f5a0dd29060240160e060405180830381865afa158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a69190612e67565b509495506122fd945050505050565b6001840154604080516001600160601b038b16815260208101889052908101919091526001600160a01b038a16907f70ca4ec64687bf265f39041896f3dbf10b9f650503cb38f2b3569fdce7489c369060600160405180910390a2505050505050505050565b612423612795565b61244057604051631afcd79f60e31b815260040160405180910390fd5b565b6000838152600c6020908152604080832084845260038101909252822054909181900361260f57831561260a57600182015460000361255d5750600281018054600180820183556000928352602090922081018590559081148015906124bc575081546124b0600183612caf565b6124ba9190612d88565b155b156125585781546000906124d09083612ed5565b60008181526004850160205260408120549192506124ef846001612cc2565b90508460020185600201848154811061250a5761250a612d5c565b60009182526020808320909101548354600181018555938352818320909301929092559384526004860180825260408086208690558486526003880183528086208490559285529052909120555b6125d8565b60018083018054909161256f91612caf565b8154811061257f5761257f612d5c565b906000526020600020015490508160010180548061259f5761259f612e41565b60019003818190600052602060002001600090559055838260020182815481106125cb576125cb612d5c565b6000918252602090912001555b6000838152600383016020908152604080832084905583835260048501909152902083905561260a85826001876127af565b611aeb565b836000036126ad57600082600201828154811061262e5761262e612d5c565b90600052602060002001549050600083600201838154811061265257612652612d5c565b60009182526020808320909101929092556001808601805491820181558252828220018490558581526003850182526040808220829055848252600486019092529081208190556126a79087908490846127af565b50611aeb565b8160020181815481106126c2576126c2612d5c565b90600052602060002001548414611aeb576000848360020183815481106126eb576126eb612d5c565b906000526020600020015411159050600081612731578584600201848154811061271757612717612d5c565b906000526020600020015461272c9190612caf565b61275c565b83600201838154811061274657612746612d5c565b90600052602060002001548661275c9190612caf565b90508584600201848154811061277457612774612d5c565b60009182526020909120015561278c878484846127af565b50505050505050565b600061279f612019565b54600160401b900460ff16919050565b6000848152600c60205260409020835b80156128645781546127d2600183612caf565b6127dc9190612ed5565b90508361281357828260020182815481106127f9576127f9612d5c565b906000526020600020015461280e9190612caf565b61283e565b8282600201828154811061282957612829612d5c565b906000526020600020015461283e9190612cc2565b82600201828154811061285357612853612d5c565b6000918252602090912001556127bf565b505050505050565b6001600160a01b038116811461038557600080fd5b6001600160601b038116811461038557600080fd5b6000806000606084860312156128ab57600080fd5b83356128b68161286c565b925060208401356128c681612881565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b8381526020810183905260608101600a831061290b5761290b6128d7565b826040830152949350505050565b6000806040838503121561292c57600080fd5b82356129378161286c565b946020939093013593505050565b60006020828403121561295757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261298557600080fd5b81356001600160401b0381111561299e5761299e61295e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156129cc576129cc61295e565b6040528181528382016020018510156129e457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612a1457600080fd5b8235915060208301356001600160401b03811115612a3157600080fd5b612a3d85828601612974565b9150509250929050565b600080600060608486031215612a5c57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612a8657600080fd5b8235612a918161286c565b915060208301356001600160401b03811115612a3157600080fd5b600060208284031215612abe57600080fd5b81356112858161286c565b602080825282518282018190526000918401906040840190835b81811015612b0a5783516001600160601b0316835260209384019390920191600101612ae3565b509095945050505050565b60008060008060008060c08789031215612b2e57600080fd5b8635612b398161286c565b95506020870135612b498161286c565b945060408701359350606087013592506080870135612b678161286c565b9598949750929591949360a090920135925050565b60005b83811015612b97578181015183820152602001612b7f565b50506000910152565b6020815260008251806020840152612bbf816040850160208701612b7c565b601f01601f19169190910160400192915050565b60008060408385031215612be657600080fd5b50508035926020909101359150565b60008060408385031215612c0857600080fd5b8235612c138161286c565b91506020830135612c2381612881565b809150509250929050565b600080600080600060a08688031215612c4657600080fd5b8535612c518161286c565b94506020860135612c6181612881565b94979496505050506040830135926060810135926080909101359150565b6020810160038310612c9357612c936128d7565b91905290565b634e487b7160e01b600052601160045260246000fd5b8181038181111561191857611918612c99565b8082018082111561191857611918612c99565b600060208284031215612ce757600080fd5b5051919050565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b6001600160a01b039390931683526001600160601b03919091166020830152604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612d9757612d97612d72565b500690565b808202811582820484141761191857611918612c99565b600060018201612dc557612dc5612c99565b5060010190565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60008251612e20818460208701612b7c565b9190910192915050565b600081612e3957612e39612c99565b506000190190565b634e487b7160e01b600052603160045260246000fd5b80518015158114611fbf57600080fd5b600080600080600080600060e0888a031215612e8257600080fd5b8751612e8d81612881565b9650612e9b60208901612e57565b604089015160608a015160808b015160a08c0151939950919750955093509150612ec760c08901612e57565b905092959891949750929550565b600082612ee457612ee4612d72565b50049056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212200186314699ae77a443609cfb006b9ef79adca12e964bddf2a243cc7bcac06f9264736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102725760003560e01c80637dc38f141161014f578063caeb50ed116100c1578063dd5e5cb51161007a578063dd5e5cb5146107b9578063e4c0aaf4146107d9578063e534710d146107f9578063f216de4c14610831578063f2f4eb2614610851578063f6b4d82d1461087157600080fd5b8063caeb50ed146106c2578063ccbac9f5146106d7578063d09f392d146106ed578063d1c1df481461070d578063d605787b1461074d578063dca5f6b01461076d57600080fd5b8063aac03ad211610113578063aac03ad214610612578063b1c9fe6e14610632578063b5d69e9914610660578063b888adfa14610680578063c057eca714610696578063c1572618146106ac57600080fd5b80637dc38f141461057c578063823cfd7014610592578063965af6c7146105b25780639fbb56f1146105d2578063a2473cc1146105f257600080fd5b80634dbbebbc116101e857806354fd4d50116101ac57806354fd4d501461047d57806356acb050146104bb5780635d2d7846146104d15780636624192f146104f157806369f458771461053c57806376fa9fc51461055c57600080fd5b80634dbbebbc146103e85780634f1ef2861461040857806352d1902d1461041b578063543f8a361461043057806354812d171461045d57600080fd5b80631ecacab81161023a5780631ecacab81461031b57806321e1625e1461034a57806321ea9b3f1461036a57806335975f4a14610388578063477a655c146103a85780634c70a0d6146103c857600080fd5b806303432744146102775780630b274f2e146102a05780630c340a24146102b75780630e083ec9146102ef5780631b92bbbe14610305575b600080fd5b34801561028357600080fd5b5061028d60065481565b6040519081526020015b60405180910390f35b3480156102ac57600080fd5b506102b56108ff565b005b3480156102c357600080fd5b506000546102d7906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b3480156102fb57600080fd5b5061028d600a5481565b34801561031157600080fd5b5061028d60035481565b34801561032757600080fd5b5061033b610336366004612896565b610cd7565b604051610297939291906128ed565b34801561035657600080fd5b506102b5610365366004612919565b610d22565b34801561037657600080fd5b506102b5610385366004612945565b50565b34801561039457600080fd5b506102b56103a3366004612945565b610dc5565b3480156103b457600080fd5b506102b56103c3366004612a01565b610fb1565b3480156103d457600080fd5b506102d76103e3366004612a47565b6110a8565b3480156103f457600080fd5b506102b5610403366004612919565b61128c565b6102b5610416366004612a73565b611375565b34801561042757600080fd5b5061028d61159d565b34801561043c57600080fd5b5061045061044b366004612aac565b6115fb565b6040516102979190612ac9565b34801561046957600080fd5b506102b5610478366004612b15565b611699565b34801561048957600080fd5b506104ae604051806040016040528060058152602001640302e392e360dc1b81525081565b6040516102979190612ba0565b3480156104c757600080fd5b5061028d600b5481565b3480156104dd57600080fd5b506102b56104ec366004612bd3565b611769565b3480156104fd57600080fd5b5061052c61050c366004612aac565b6001600160a01b03166000908152600d6020526040902060010154151590565b6040519015158152602001610297565b34801561054857600080fd5b506102b5610557366004612aac565b6117ac565b34801561056857600080fd5b5061028d610577366004612bd3565b6118c3565b34801561058857600080fd5b5061028d60095481565b34801561059e57600080fd5b506102b56105ad366004612945565b61191e565b3480156105be57600080fd5b506102b56105cd366004612919565b61194d565b3480156105de57600080fd5b5061028d6105ed366004612aac565b611a49565b3480156105fe57600080fd5b5061028d61060d366004612bf5565b611a8a565b34801561061e57600080fd5b506102b561062d366004612c2e565b611ab4565b34801561063e57600080fd5b5060015461065390600160a01b900460ff1681565b6040516102979190612c7f565b34801561066c57600080fd5b506102b561067b366004612aac565b611af2565b34801561068c57600080fd5b5061028d60045481565b3480156106a257600080fd5b5061028d60025481565b3480156106b857600080fd5b5061028d60055481565b3480156106ce57600080fd5b506102b5611bd2565b3480156106e357600080fd5b5061028d60085481565b3480156106f957600080fd5b506102b5610708366004612bd3565b611c83565b34801561071957600080fd5b5061072d610728366004612bf5565b611cbd565b604080519485526020850193909352918301526060820152608001610297565b34801561075957600080fd5b506007546102d7906001600160a01b031681565b34801561077957600080fd5b506107a4610788366004612aac565b600d602052600090815260409020600181015460029091015482565b60408051928352602083019190915201610297565b3480156107c557600080fd5b506102b56107d4366004612945565b611cfc565b3480156107e557600080fd5b506102b56107f4366004612aac565b611d2b565b34801561080557600080fd5b5061028d610814366004612bf5565b600f60209081526000928352604080842090915290825290205481565b34801561083d57600080fd5b506107a461084c366004612919565b611d77565b34801561085d57600080fd5b506001546102d7906001600160a01b031681565b34801561087d57600080fd5b506108cb61088c366004612945565b600e602052600090815260409020805460018201546002909201546001600160a01b03821692600160a01b9092046001600160601b0316919060ff1684565b604080516001600160a01b0390951685526001600160601b0390931660208501529183015215156060820152608001610297565b6000600154600160a01b900460ff16600281111561091f5761091f6128d7565b03610a92576002546004546109349042612caf565b101561099c5760405162461bcd60e51b815260206004820152602c60248201527f546865206d696e696d756d207374616b696e672074696d6520686173206e6f7460448201526b103830b9b9b2b2103cb2ba1760a11b60648201526084015b60405180910390fd5b6000600654116109fe5760405162461bcd60e51b815260206004820152602760248201527f546865726520617265206e6f2064697370757465732074686174206e65656420604482015266353ab937b9399760c91b6064820152608401610993565b6007546009546001600160a01b0390911690637363ae1f90610a209043612cc2565b6040518263ffffffff1660e01b8152600401610a3e91815260200190565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b505043600555505060018054819060ff60a01b1916600160a01b825b0217905550610c8c565b60018054600160a01b900460ff166002811115610ab157610ab16128d7565b03610ba9576007546009546005546001600160a01b03909216916313cf905491610ada91612cc2565b6040518263ffffffff1660e01b8152600401610af891815260200190565b6020604051808303816000875af1158015610b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3b9190612cd5565b6008819055600003610b8f5760405162461bcd60e51b815260206004820152601e60248201527f52616e646f6d206e756d626572206973206e6f742072656164792079657400006044820152606401610993565b600180546002919060ff60a01b1916600160a01b83610a88565b6002600154600160a01b900460ff166002811115610bc957610bc96128d7565b03610c8c576006541580610beb5750600354600454610be89042612caf565b10155b610c7e5760405162461bcd60e51b815260206004820152605860248201527f546865726520617265207374696c6c20646973707574657320776974686f757460448201527f206a75726f727320616e6420746865206d6178696d756d2064726177696e67206064820152773a34b6b2903430b9903737ba103830b9b9b2b2103cb2ba1760411b608482015260a401610993565b6001805460ff60a01b191690555b426004556001546040517f31f72b44f546d9e7eaec13f65636997665e15f134a81c82924f568f5c0d07b9391610ccd91600160a01b90910460ff1690612c7f565b60405180910390a1565b600154600090819081906001600160a01b03163314610d085760405162461bcd60e51b815260040161099390612cee565b610d13868686611e05565b91989097509095509350505050565b6001546001600160a01b03163314610d4c5760405162461bcd60e51b815260040161099390612cee565b6001600160a01b0382166000908152600d602052604081206002018054839290610d77908490612cc2565b909155505060408051828152600060208201526001600160a01b038416917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b091015b60405180910390a25050565b6000600154600160a01b900460ff166002811115610de557610de56128d7565b14610e325760405162461bcd60e51b815260206004820152601b60248201527f53686f756c6420626520696e205374616b696e672070686173652e00000000006044820152606401610993565b600b54600a541015610e865760405162461bcd60e51b815260206004820152601c60248201527f4e6f2064656c61796564207374616b6520746f20657865637574652e000000006044820152606401610993565b6000600a54600183600b54610e9b9190612cc2565b610ea59190612caf565b11610eb05781610ecb565b600b54600a54610ec09190612caf565b610ecb906001612cc2565b9050600081600b54610edd9190612cc2565b600b549091505b81811015610fa9576000818152600e602052604090819020600180548254918301549351630761c14d60e01b815292936001600160a01b0391821693630761c14d93610f4793811692600160a01b9091046001600160601b031691600401612d32565b600060405180830381600087803b158015610f6157600080fd5b505af1158015610f75573d6000803e3d6000fd5b5050506000838152600e60205260408120818155600180820192909255600201805460ff191690559092019150610ee49050565b50600b555050565b6001546001600160a01b03163314610fdb5760405162461bcd60e51b815260040161099390612cee565b6000828152600c6020526040812090610ff383611fa8565b82549091501561103c5760405162461bcd60e51b81526020600482015260146024820152732a3932b29030b63932b0b23c9032bc34b9ba399760611b6044820152606401610993565b6001811161108c5760405162461bcd60e51b815260206004820152601b60248201527f4b206d7573742062652067726561746572207468616e206f6e652e00000000006044820152606401610993565b8155600201805460018101825560009182526020822001555050565b60006002600154600160a01b900460ff1660028111156110ca576110ca6128d7565b146111065760405162461bcd60e51b815260206004820152600c60248201526b2bb937b73390383430b9b29760a11b6044820152606401610993565b6000848152600c602052604081206002810180549192909161112a5761112a612d5c565b9060005260206000200154600003611146576000915050611285565b60008160020160008154811061115e5761115e612d5c565b90600052602060002001546008548686604051602001611191939291909283526020830191909152604082015260600190565b6040516020818303038152906040528051906020012060001c6111b49190612d88565b905060005b600283015483546111cb908390612d9c565b6111d6906001612cc2565b10156112655760015b8354811161125f576000818386600001546111fa9190612d9c565b6112049190612cc2565b9050600085600201828154811061121d5761121d612d5c565b906000526020600020015490508085106112425761123b8186612caf565b945061124a565b50915061125f565b5050808061125790612db3565b9150506111df565b506111b9565b600081815260048401602052604090205461127f90611fc4565b93505050505b9392505050565b6000546001600160a01b031633146112b65760405162461bcd60e51b815260040161099390612dcc565b600780546001600160a01b0319166001600160a01b038416179055600981905560018054600160a01b900460ff1660028111156112f5576112f56128d7565b03611371576007546009546001600160a01b0390911690637363ae1f9061131c9043612cc2565b6040518263ffffffff1660e01b815260040161133a91815260200190565b600060405180830381600087803b15801561135457600080fd5b505af1158015611368573d6000803e3d6000fd5b50504360055550505b5050565b61137e82611fef565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113fc57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113f0600080516020612eea8339815191525490565b6001600160a01b031614155b1561141a5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611474575060408051601f3d908101601f1916820190925261147191810190612cd5565b60015b61149c57604051630c76093760e01b81526001600160a01b0383166004820152602401610993565b600080516020612eea83398151915281146114cd57604051632a87526960e21b815260048101829052602401610993565b600080516020612eea8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611598576000836001600160a01b0316836040516115349190612e0e565b600060405180830381855af49150503d806000811461156f576040519150601f19603f3d011682016040523d82523d6000602084013e611574565b606091505b5050905080611596576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115e85760405163703e46dd60e11b815260040160405180910390fd5b50600080516020612eea83398151915290565b6001600160a01b0381166000908152600d602090815260409182902080548351818402810184019094528084526060939283018282801561168d57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b0104928301926001038202915080841161164a5790505b50505050509050919050565b600160006116a5612019565b8054909150600160401b900460ff16806116cc575080546001600160401b03808416911610155b156116e95760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561171888888888888861203d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050505050565b6001546001600160a01b031633146117935760405162461bcd60e51b815260040161099390612cee565b600680549060006117a383612e2a565b91905055505050565b60006117b782611a49565b9050600081116118095760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656c696769626c6520666f72207769746864726177616c2e000000006044820152606401610993565b6001600160a01b038281166000818152600d6020526040808220600190810192909255905490516342c37fa360e01b8152600481019290925260248201849052909116906342c37fa390604401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b50505050816001600160a01b03167f71bb1b604559acc3db697ccf2aa4228d727cd5b133d6ffa419518d51c117c95c82604051610db991815260200190565b6000828152600c60209081526040808320848452600381019092528220548083036118f357600092505050611918565b81600201818154811061190857611908612d5c565b9060005260206000200154925050505b92915050565b6000546001600160a01b031633146119485760405162461bcd60e51b815260040161099390612dcc565b600255565b6001546001600160a01b031633146119775760405162461bcd60e51b815260040161099390612cee565b6001600160a01b0382166000908152600d60205260408120600281018054919284926119a4908490612caf565b909155505060408051838152600160208201526001600160a01b038516917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b0910160405180910390a260006119f884611a49565b9050801561159657836001600160a01b03167f819a3744490c627e221b71743857691f9c23bf56a1ecc5351f886cfd4c3187d982604051611a3b91815260200190565b60405180910390a250505050565b6001600160a01b0381166000908152600d602052604081208054158015611a7257506002810154155b15611a81576001015492915050565b50600092915050565b600080611a97848461209d565b9050611aac6001600160601b038416826118c3565b949350505050565b6001546001600160a01b03163314611ade5760405162461bcd60e51b815260040161099390612cee565b611aeb85858585856120e5565b5050505050565b6001546001600160a01b03163314611b1c5760405162461bcd60e51b815260040161099390612cee565b6000611b27826115fb565b80519091505b801561159857600180546001600160a01b031690630761c14d9085908590611b559086612caf565b81518110611b6557611b65612d5c565b602002602001015160006040518463ffffffff1660e01b8152600401611b8d93929190612d32565b600060405180830381600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050508080611bca90612e2a565b915050611b2d565b60046000611bde612019565b8054909150600160401b900460ff1680611c05575080546001600160401b03808416911610155b15611c225760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6001546001600160a01b03163314611cad5760405162461bcd60e51b815260040161099390612cee565b600680549060006117a383612db3565b6001600160a01b0382166000908152600d6020526040812060018101546002820154909290918190611cef8787611a8a565b9054949793965094505050565b6000546001600160a01b03163314611d265760405162461bcd60e51b815260040161099390612dcc565b600355565b6000546001600160a01b03163314611d555760405162461bcd60e51b815260040161099390612dcc565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460009081906001600160a01b03163314611da65760405162461bcd60e51b815260040161099390612cee565b6001600160a01b0384166000908152600d602052604090206001810154848110611dec5784925084826001016000828254611de19190612caf565b90915550611df79050565b600060018301559150815b506001015491509250929050565b6001600160a01b0383166000908152600d602052604081208190819081611e2c8888611a8a565b825490915081158015611e40575060048110155b15611e58576000806004955095509550505050611f9f565b81158015611e64575086155b15611e7c576000806009955095509550505050611f9f565b6000600154600160a01b900460ff166002811115611e9c57611e9c6128d7565b14611f37576000600e6000600a60008154611eb690612db3565b9182905550815260208082019290925260409081016000206001600160601b038c16600160a01b81026001600160a01b038f169081178355600183018d905592518c8152919450927fa59837f9df3fb816613d84e8fefe31ec8d6e67ff43df6533e3f793a3f53aade9910160405180910390a35060019350611f9f92505050565b818710611f4f57611f488288612caf565b9550611f97565b611f598783612caf565b945060008360020154846001015411611f73576000611f87565b83600201548460010154611f879190612caf565b905080861115611f95578095505b505b506000925050505b93509350939050565b60006020825110611fbb57506020015190565b5060065b919050565b600060405160005b6014811015611fe75783811a81600c84010153600101611fcc565b505192915050565b6000546001600160a01b031633146103855760405162461bcd60e51b815260040161099390612dcc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b61204561241b565b600080546001600160a01b03199081166001600160a01b039889161790915560018054821696881696909617865560029490945560039290925542600455600780549093169416939093179055600991909155600b55565b600060405160005b60148110156120c0578481600c011a818301536001016120a5565b5060145b60208110156120dc5783811a818301536001016120c4565b50519392505050565b6001600160a01b0385166000908152600d60205260409020831561217457600061210f8787611a8a565b905080600003612154578154600180820184556000848152602090206002830401805491909216600c026101000a6001600160601b0381810219909216918916021790555b848260010160008282546121689190612cc2565b909155506122eb915050565b828160010160008282546121889190612caf565b909155505060008290036122eb5780545b80156122e9576001600160601b038616826121b5600184612caf565b815481106121c5576121c5612d5c565b600091825260209091206002820401546001909116600c026101000a90046001600160601b0316036122d7578154829061220190600190612caf565b8154811061221157612211612d5c565b600091825260209091206002820401546001918216600c026101000a90046001600160601b03169083906122459084612caf565b8154811061225557612255612d5c565b9060005260206000209060029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b03160217905550816000018054806122a1576122a1612e41565b60008281526020902060026000199092019182040180546001600160601b03600c60018516026101000a021916905590556122e9565b806122e181612e2a565b915050612199565b505b60006122f7878761209d565b90506000865b816123b5576123166001600160601b0382168685612442565b6000196001600160601b0382160161233157600191506122fd565b600154604051630fad06e960e11b81526001600160601b03831660048201526001600160a01b0390911690631f5a0dd29060240160e060405180830381865afa158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a69190612e67565b509495506122fd945050505050565b6001840154604080516001600160601b038b16815260208101889052908101919091526001600160a01b038a16907f70ca4ec64687bf265f39041896f3dbf10b9f650503cb38f2b3569fdce7489c369060600160405180910390a2505050505050505050565b612423612795565b61244057604051631afcd79f60e31b815260040160405180910390fd5b565b6000838152600c6020908152604080832084845260038101909252822054909181900361260f57831561260a57600182015460000361255d5750600281018054600180820183556000928352602090922081018590559081148015906124bc575081546124b0600183612caf565b6124ba9190612d88565b155b156125585781546000906124d09083612ed5565b60008181526004850160205260408120549192506124ef846001612cc2565b90508460020185600201848154811061250a5761250a612d5c565b60009182526020808320909101548354600181018555938352818320909301929092559384526004860180825260408086208690558486526003880183528086208490559285529052909120555b6125d8565b60018083018054909161256f91612caf565b8154811061257f5761257f612d5c565b906000526020600020015490508160010180548061259f5761259f612e41565b60019003818190600052602060002001600090559055838260020182815481106125cb576125cb612d5c565b6000918252602090912001555b6000838152600383016020908152604080832084905583835260048501909152902083905561260a85826001876127af565b611aeb565b836000036126ad57600082600201828154811061262e5761262e612d5c565b90600052602060002001549050600083600201838154811061265257612652612d5c565b60009182526020808320909101929092556001808601805491820181558252828220018490558581526003850182526040808220829055848252600486019092529081208190556126a79087908490846127af565b50611aeb565b8160020181815481106126c2576126c2612d5c565b90600052602060002001548414611aeb576000848360020183815481106126eb576126eb612d5c565b906000526020600020015411159050600081612731578584600201848154811061271757612717612d5c565b906000526020600020015461272c9190612caf565b61275c565b83600201838154811061274657612746612d5c565b90600052602060002001548661275c9190612caf565b90508584600201848154811061277457612774612d5c565b60009182526020909120015561278c878484846127af565b50505050505050565b600061279f612019565b54600160401b900460ff16919050565b6000848152600c60205260409020835b80156128645781546127d2600183612caf565b6127dc9190612ed5565b90508361281357828260020182815481106127f9576127f9612d5c565b906000526020600020015461280e9190612caf565b61283e565b8282600201828154811061282957612829612d5c565b906000526020600020015461283e9190612cc2565b82600201828154811061285357612853612d5c565b6000918252602090912001556127bf565b505050505050565b6001600160a01b038116811461038557600080fd5b6001600160601b038116811461038557600080fd5b6000806000606084860312156128ab57600080fd5b83356128b68161286c565b925060208401356128c681612881565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b8381526020810183905260608101600a831061290b5761290b6128d7565b826040830152949350505050565b6000806040838503121561292c57600080fd5b82356129378161286c565b946020939093013593505050565b60006020828403121561295757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261298557600080fd5b81356001600160401b0381111561299e5761299e61295e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156129cc576129cc61295e565b6040528181528382016020018510156129e457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612a1457600080fd5b8235915060208301356001600160401b03811115612a3157600080fd5b612a3d85828601612974565b9150509250929050565b600080600060608486031215612a5c57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612a8657600080fd5b8235612a918161286c565b915060208301356001600160401b03811115612a3157600080fd5b600060208284031215612abe57600080fd5b81356112858161286c565b602080825282518282018190526000918401906040840190835b81811015612b0a5783516001600160601b0316835260209384019390920191600101612ae3565b509095945050505050565b60008060008060008060c08789031215612b2e57600080fd5b8635612b398161286c565b95506020870135612b498161286c565b945060408701359350606087013592506080870135612b678161286c565b9598949750929591949360a090920135925050565b60005b83811015612b97578181015183820152602001612b7f565b50506000910152565b6020815260008251806020840152612bbf816040850160208701612b7c565b601f01601f19169190910160400192915050565b60008060408385031215612be657600080fd5b50508035926020909101359150565b60008060408385031215612c0857600080fd5b8235612c138161286c565b91506020830135612c2381612881565b809150509250929050565b600080600080600060a08688031215612c4657600080fd5b8535612c518161286c565b94506020860135612c6181612881565b94979496505050506040830135926060810135926080909101359150565b6020810160038310612c9357612c936128d7565b91905290565b634e487b7160e01b600052601160045260246000fd5b8181038181111561191857611918612c99565b8082018082111561191857611918612c99565b600060208284031215612ce757600080fd5b5051919050565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b6001600160a01b039390931683526001600160601b03919091166020830152604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612d9757612d97612d72565b500690565b808202811582820484141761191857611918612c99565b600060018201612dc557612dc5612c99565b5060010190565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60008251612e20818460208701612b7c565b9190910192915050565b600081612e3957612e39612c99565b506000190190565b634e487b7160e01b600052603160045260246000fd5b80518015158114611fbf57600080fd5b600080600080600080600060e0888a031215612e8257600080fd5b8751612e8d81612881565b9650612e9b60208901612e57565b604089015160608a015160808b015160a08c0151939950919750955093509150612ec760c08901612e57565b905092959891949750929550565b600082612ee457612ee4612d72565b50049056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212200186314699ae77a443609cfb006b9ef79adca12e964bddf2a243cc7bcac06f9264736f6c634300081c0033", - "devdoc": { - "details": "A factory of trees that keeps track of staked values for sortition.", - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "LeftoverPNK(address,uint256)": { - "details": "Emitted when leftover PNK is available.", - "params": { - "_account": "The account of the juror.", - "_amount": "The amount of PNK available." - } - }, - "LeftoverPNKWithdrawn(address,uint256)": { - "details": "Emitted when leftover PNK is withdrawn.", - "params": { - "_account": "The account of the juror withdrawing PNK.", - "_amount": "The amount of PNK withdrawn." - } - }, - "StakeDelayed(address,uint96,uint256)": { - "params": { - "_address": "The address of the juror.", - "_amount": "The amount of tokens staked in the court.", - "_courtID": "The ID of the court." - } - }, - "StakeLocked(address,uint256,bool)": { - "params": { - "_address": "The address of the juror.", - "_relativeAmount": "The amount of tokens locked.", - "_unlock": "Whether the stake is locked or unlocked." - } - }, - "StakeSet(address,uint256,uint256,uint256)": { - "params": { - "_address": "The address of the juror.", - "_amount": "The amount of tokens staked in the court.", - "_amountAllCourts": "The amount of tokens staked in all courts.", - "_courtID": "The ID of the court." - } - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor of the contract.", - "params": { - "_governor": "The new governor." - } - }, - "changeMaxDrawingTime(uint256)": { - "details": "Changes the `maxDrawingTime` storage variable.", - "params": { - "_maxDrawingTime": "The new value for the `maxDrawingTime` storage variable." - } - }, - "changeMinStakingTime(uint256)": { - "details": "Changes the `minStakingTime` storage variable.", - "params": { - "_minStakingTime": "The new value for the `minStakingTime` storage variable." - } - }, - "changeRandomNumberGenerator(address,uint256)": { - "details": "Changes the `_rng` and `_rngLookahead` storage variables.", - "params": { - "_rng": "The new value for the `RNGenerator` storage variable.", - "_rngLookahead": "The new value for the `rngLookahead` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createTree(bytes32,bytes)": { - "details": "Create a sortition sum tree at the specified key.", - "params": { - "_extraData": "Extra data that contains the number of children each node in the tree should have.", - "_key": "The key of the new tree." - } - }, - "draw(bytes32,uint256,uint256)": { - "details": "Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0.", - "params": { - "_coreDisputeID": "Index of the dispute in Kleros Core.", - "_key": "The key of the tree.", - "_nonce": "Nonce to hash with random number." - }, - "returns": { - "drawnAddress": "The drawn address. `O(k * log_k(n))` where `k` is the maximum number of children per node in the tree, and `n` is the maximum number of nodes ever appended." - } - }, - "executeDelayedStakes(uint256)": { - "details": "Executes the next delayed stakes.", - "params": { - "_iterations": "The number of delayed stakes to execute." - } - }, - "getJurorCourtIDs(address)": { - "details": "Gets the court identifiers where a specific `_juror` has staked.", - "params": { - "_juror": "The address of the juror." - } - }, - "initialize(address,address,uint256,uint256,address,uint256)": { - "details": "Initializer (constructor equivalent for upgradable contracts).", - "params": { - "_core": "The KlerosCore.", - "_governor": "The governor.", - "_maxDrawingTime": "Time after which the drawing phase can be switched", - "_minStakingTime": "Minimal time to stake", - "_rng": "The random number generator.", - "_rngLookahead": "Lookahead value for rng." - } - }, - "notifyRandomNumber(uint256)": { - "details": "Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase().", - "params": { - "_randomNumber": "Random number returned by RNG contract." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setJurorInactive(address)": { - "details": "Unstakes the inactive juror from all courts. `O(n * (p * log_k(j)) )` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.", - "params": { - "_account": "The juror to unstake." - } - }, - "setStake(address,uint96,uint256,uint256,uint256)": { - "details": "Update the state of the stakes, called by KC at the end of setStake flow. `O(n + p * log_k(j))` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.", - "params": { - "_account": "The address of the juror.", - "_courtID": "The ID of the court.", - "_newStake": "The new stake.", - "_pnkDeposit": "The amount of PNK to be deposited.", - "_pnkWithdrawal": "The amount of PNK to be withdrawn." - } - }, - "stakeOf(address,uint96)": { - "details": "Get the stake of a juror in a court.", - "params": { - "_courtID": "The ID of the court.", - "_juror": "The address of the juror." - }, - "returns": { - "_0": "value The stake of the juror in the court." - } - }, - "stakeOf(bytes32,bytes32)": { - "details": "Get the stake of a juror in a court.", - "params": { - "_ID": "The stake path ID, corresponding to a juror.", - "_key": "The key of the tree, corresponding to a court." - }, - "returns": { - "_0": "The stake of the juror in the court." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "validateStake(address,uint96,uint256)": { - "details": "Validate the specified juror's new stake for a court. Note: no state changes should be made when returning stakingResult != Successful, otherwise delayed stakes might break invariants.", - "params": { - "_account": "The address of the juror.", - "_courtID": "The ID of the court.", - "_newStake": "The new stake." - }, - "returns": { - "pnkDeposit": "The amount of PNK to be deposited.", - "pnkWithdrawal": "The amount of PNK to be withdrawn.", - "stakingResult": "The result of the staking operation." - } - }, - "withdrawLeftoverPNK(address)": { - "details": "Gives back the locked PNKs in case the juror fully unstaked earlier. Note that since locked and staked PNK are async it is possible for the juror to have positive staked PNK balance while having 0 stake in courts and 0 locked tokens (eg. when the juror fully unstaked during dispute and later got his tokens unlocked). In this case the juror can use this function to withdraw the leftover tokens. Also note that if the juror has some leftover PNK while not fully unstaked he'll have to manually unstake from all courts to trigger this function.", - "params": { - "_account": "The juror whose PNK to withdraw." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "SortitionModule", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "events": { - "StakeDelayed(address,uint96,uint256)": { - "notice": "Emitted when a juror's stake is delayed." - }, - "StakeLocked(address,uint256,bool)": { - "notice": "Emitted when a juror's stake is locked." - }, - "StakeSet(address,uint256,uint256,uint256)": { - "notice": "Emitted when a juror stakes in a court." - } - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 16617, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 16620, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)11124" - }, - { - "astId": 16623, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "phase", - "offset": 20, - "slot": "1", - "type": "t_enum(Phase)26181" - }, - { - "astId": 16625, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "minStakingTime", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 16627, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "maxDrawingTime", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 16629, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "lastPhaseChange", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 16631, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "randomNumberRequestBlock", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 16633, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "disputesWithoutJurors", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 16636, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "rng", - "offset": 0, - "slot": "7", - "type": "t_contract(RNG)35283" - }, - { - "astId": 16638, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "randomNumber", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 16640, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "rngLookahead", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 16642, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "delayedStakeWriteIndex", - "offset": 0, - "slot": "10", - "type": "t_uint256" - }, - { - "astId": 16644, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "delayedStakeReadIndex", - "offset": 0, - "slot": "11", - "type": "t_uint256" - }, - { - "astId": 16649, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "sortitionSumTrees", - "offset": 0, - "slot": "12", - "type": "t_mapping(t_bytes32,t_struct(SortitionSumTree)16598_storage)" - }, - { - "astId": 16654, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "jurors", - "offset": 0, - "slot": "13", - "type": "t_mapping(t_address,t_struct(Juror)16615_storage)" - }, - { - "astId": 16659, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "delayedStakes", - "offset": 0, - "slot": "14", - "type": "t_mapping(t_uint256,t_struct(DelayedStake)16607_storage)" - }, - { - "astId": 16665, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "latestDelayedStakeIndex", - "offset": 0, - "slot": "15", - "type": "t_mapping(t_address,t_mapping(t_uint96,t_uint256))" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_array(t_uint96)dyn_storage": { - "base": "t_uint96", - "encoding": "dynamic_array", - "label": "uint96[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)11124": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_contract(RNG)35283": { - "encoding": "inplace", - "label": "contract RNG", - "numberOfBytes": "20" - }, - "t_enum(Phase)26181": { - "encoding": "inplace", - "label": "enum ISortitionModule.Phase", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint96,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint96 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint96,t_uint256)" - }, - "t_mapping(t_address,t_struct(Juror)16615_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct SortitionModuleBase.Juror)", - "numberOfBytes": "32", - "value": "t_struct(Juror)16615_storage" - }, - "t_mapping(t_bytes32,t_struct(SortitionSumTree)16598_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct SortitionModuleBase.SortitionSumTree)", - "numberOfBytes": "32", - "value": "t_struct(SortitionSumTree)16598_storage" - }, - "t_mapping(t_bytes32,t_uint256)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_uint256,t_bytes32)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bytes32)", - "numberOfBytes": "32", - "value": "t_bytes32" - }, - "t_mapping(t_uint256,t_struct(DelayedStake)16607_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => struct SortitionModuleBase.DelayedStake)", - "numberOfBytes": "32", - "value": "t_struct(DelayedStake)16607_storage" - }, - "t_mapping(t_uint96,t_uint256)": { - "encoding": "mapping", - "key": "t_uint96", - "label": "mapping(uint96 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DelayedStake)16607_storage": { - "encoding": "inplace", - "label": "struct SortitionModuleBase.DelayedStake", - "members": [ - { - "astId": 16600, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 16602, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "courtID", - "offset": 20, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 16604, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "stake", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 16606, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "alreadyTransferred", - "offset": 0, - "slot": "2", - "type": "t_bool" - } - ], - "numberOfBytes": "96" - }, - "t_struct(Juror)16615_storage": { - "encoding": "inplace", - "label": "struct SortitionModuleBase.Juror", - "members": [ - { - "astId": 16610, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "courtIDs", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint96)dyn_storage" - }, - { - "astId": 16612, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "stakedPnk", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 16614, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "lockedPnk", - "offset": 0, - "slot": "2", - "type": "t_uint256" - } - ], - "numberOfBytes": "96" - }, - "t_struct(SortitionSumTree)16598_storage": { - "encoding": "inplace", - "label": "struct SortitionModuleBase.SortitionSumTree", - "members": [ - { - "astId": 16583, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "K", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 16586, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "stack", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 16589, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "nodes", - "offset": 0, - "slot": "2", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 16593, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "IDsToNodeIndexes", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes32,t_uint256)" - }, - { - "astId": 16597, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "nodeIndexesToIDs", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_bytes32)" - } - ], - "numberOfBytes": "160" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/SortitionModule_Proxy.json b/contracts/deployments/arbitrumSepolia/SortitionModule_Proxy.json deleted file mode 100644 index 759852b40..000000000 --- a/contracts/deployments/arbitrumSepolia/SortitionModule_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x1341bcde150871b6c3001ef791e33bddac8b45de574894893c6b368a1781cb6f", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD", - "transactionIndex": 1, - "gasUsed": "362402", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000004000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000200000000000000000000000000000000000000000", - "blockHash": "0x41c539093428c7ae0b79faa03c59034892fbb49e23bcf3694ac26773e979b19b", - "transactionHash": "0x1341bcde150871b6c3001ef791e33bddac8b45de574894893c6b368a1781cb6f", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 95250316, - "transactionHash": "0x1341bcde150871b6c3001ef791e33bddac8b45de574894893c6b368a1781cb6f", - "address": "0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x41c539093428c7ae0b79faa03c59034892fbb49e23bcf3694ac26773e979b19b" - } - ], - "blockNumber": 95250316, - "cumulativeGasUsed": "362402", - "status": 1, - "byzantium": true - }, - "args": [ - "0xA418a7E63DC8Aa0F379487E4445f86543C16A0E9", - "0x54812d17000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000e8442307d36e9bf6ab27f1a009f95ce8e11c3479000000000000000000000000000000000000000000000000000000000000070800000000000000000000000000000000000000000000000000000000000007080000000000000000000000000298a3efa6faf90865725e2b48cf0f66e5d527540000000000000000000000000000000000000000000000000000000000000014" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"SortitionModuleProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220ceae34f8d0c3a8d9cda469aa0dab2c6865b82430654b42fa98d22bcc1559e71964736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220ceae34f8d0c3a8d9cda469aa0dab2c6865b82430654b42fa98d22bcc1559e71964736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/TransactionBatcher.json b/contracts/deployments/arbitrumSepolia/TransactionBatcher.json deleted file mode 100644 index 6372364e0..000000000 --- a/contracts/deployments/arbitrumSepolia/TransactionBatcher.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "address": "0x35f93986950804ac1F93519BF68C2a7Dd776db0E", - "abi": [ - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "datas", - "type": "bytes[]" - } - ], - "name": "batchSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "datas", - "type": "bytes[]" - } - ], - "name": "batchSendUnchecked", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "transactionHash": "0x3c4a6f233fda3dc940b9aba1e04ee5993b515e4834b73365c4cd613718db46b2", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x35f93986950804ac1F93519BF68C2a7Dd776db0E", - "transactionIndex": 2, - "gasUsed": "3685628", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xe9853220bdd1f19aee5024da03ad2d91d98090a74ab599bdcf2af279f02d9744", - "transactionHash": "0x3c4a6f233fda3dc940b9aba1e04ee5993b515e4834b73365c4cd613718db46b2", - "logs": [], - "blockNumber": 66236728, - "cumulativeGasUsed": "5055051", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "036e2ca71d8ebdd78fd6317e15ba1f3c", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"datas\",\"type\":\"bytes[]\"}],\"name\":\"batchSend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"datas\",\"type\":\"bytes[]\"}],\"name\":\"batchSendUnchecked\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/TransactionBatcher.sol\":\"TransactionBatcher\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/utils/TransactionBatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// Adapted from https://github.com/daostack/web3-transaction-batcher/blob/1b88d2ea062f8f2d9fdfdf9bbe85d2bbef780151/contracts/Batcher.sol\\n\\ncontract TransactionBatcher {\\n\\n function batchSend(address[] memory targets, uint256[] memory values, bytes[] memory datas) public payable {\\n for (uint256 i = 0; i < targets.length; i++) {\\n (bool success,) = targets[i].call{value: values[i]}(datas[i]);\\n if (!success) revert('transaction failed'); // All the calls must succeed.\\n }\\n }\\n\\n function batchSendUnchecked(address[] memory targets, uint256[] memory values, bytes[] memory datas) public payable {\\n for (uint256 i = 0; i < targets.length; i++) {\\n targets[i].call{value: values[i]}(datas[i]); // Intentionally ignoring return value.\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1983237012c29ef487ca47d60b197eb30d5b072ffec3078685d43fcc5fcc10a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561000f575f80fd5b506105238061001d5f395ff3fe608060405260043610610028575f3560e01c8063a8f0802e1461002c578063cef591aa14610041575b5f80fd5b61003f61003a3660046103c4565b610054565b005b61003f61004f3660046103c4565b61015c565b5f5b8351811015610156575f848281518110610072576100726104ad565b60200260200101516001600160a01b0316848381518110610095576100956104ad565b60200260200101518484815181106100af576100af6104ad565b60200260200101516040516100c491906104c1565b5f6040518083038185875af1925050503d805f81146100fe576040519150601f19603f3d011682016040523d82523d5f602084013e610103565b606091505b505090508061014d5760405162461bcd60e51b81526020600482015260126024820152711d1c985b9cd858dd1a5bdb8819985a5b195960721b604482015260640160405180910390fd5b50600101610056565b50505050565b5f5b835181101561015657838181518110610179576101796104ad565b60200260200101516001600160a01b031683828151811061019c5761019c6104ad565b60200260200101518383815181106101b6576101b66104ad565b60200260200101516040516101cb91906104c1565b5f6040518083038185875af1925050503d805f8114610205576040519150601f19603f3d011682016040523d82523d5f602084013e61020a565b606091505b50505060010161015e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561025257610252610215565b604052919050565b5f67ffffffffffffffff82111561027357610273610215565b5060051b60200190565b5f82601f83011261028c575f80fd5b813560206102a161029c8361025a565b610229565b8083825260208201915060208460051b8701019350868411156102c2575f80fd5b602086015b848110156102de57803583529183019183016102c7565b509695505050505050565b5f601f83601f8401126102fa575f80fd5b8235602061030a61029c8361025a565b82815260059290921b85018101918181019087841115610328575f80fd5b8287015b848110156103b857803567ffffffffffffffff8082111561034b575f80fd5b818a0191508a603f83011261035e575f80fd5b8582013560408282111561037457610374610215565b610385828b01601f19168901610229565b92508183528c8183860101111561039a575f80fd5b8181850189850137505f90820187015284525091830191830161032c565b50979650505050505050565b5f805f606084860312156103d6575f80fd5b833567ffffffffffffffff808211156103ed575f80fd5b818601915086601f830112610400575f80fd5b8135602061041061029c8361025a565b82815260059290921b8401810191818101908a84111561042e575f80fd5b948201945b838610156104605785356001600160a01b0381168114610451575f80fd5b82529482019490820190610433565b97505087013592505080821115610475575f80fd5b6104818783880161027d565b93506040860135915080821115610496575f80fd5b506104a3868287016102e9565b9150509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82515f5b818110156104e057602081860181015185830152016104c6565b505f92019182525091905056fea264697066735822122089797200888ad757484ded7bc0ffbb0769e9e974d73188d61385b7f6675e9f2064736f6c63430008180033", - "deployedBytecode": "0x608060405260043610610028575f3560e01c8063a8f0802e1461002c578063cef591aa14610041575b5f80fd5b61003f61003a3660046103c4565b610054565b005b61003f61004f3660046103c4565b61015c565b5f5b8351811015610156575f848281518110610072576100726104ad565b60200260200101516001600160a01b0316848381518110610095576100956104ad565b60200260200101518484815181106100af576100af6104ad565b60200260200101516040516100c491906104c1565b5f6040518083038185875af1925050503d805f81146100fe576040519150601f19603f3d011682016040523d82523d5f602084013e610103565b606091505b505090508061014d5760405162461bcd60e51b81526020600482015260126024820152711d1c985b9cd858dd1a5bdb8819985a5b195960721b604482015260640160405180910390fd5b50600101610056565b50505050565b5f5b835181101561015657838181518110610179576101796104ad565b60200260200101516001600160a01b031683828151811061019c5761019c6104ad565b60200260200101518383815181106101b6576101b66104ad565b60200260200101516040516101cb91906104c1565b5f6040518083038185875af1925050503d805f8114610205576040519150601f19603f3d011682016040523d82523d5f602084013e61020a565b606091505b50505060010161015e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561025257610252610215565b604052919050565b5f67ffffffffffffffff82111561027357610273610215565b5060051b60200190565b5f82601f83011261028c575f80fd5b813560206102a161029c8361025a565b610229565b8083825260208201915060208460051b8701019350868411156102c2575f80fd5b602086015b848110156102de57803583529183019183016102c7565b509695505050505050565b5f601f83601f8401126102fa575f80fd5b8235602061030a61029c8361025a565b82815260059290921b85018101918181019087841115610328575f80fd5b8287015b848110156103b857803567ffffffffffffffff8082111561034b575f80fd5b818a0191508a603f83011261035e575f80fd5b8582013560408282111561037457610374610215565b610385828b01601f19168901610229565b92508183528c8183860101111561039a575f80fd5b8181850189850137505f90820187015284525091830191830161032c565b50979650505050505050565b5f805f606084860312156103d6575f80fd5b833567ffffffffffffffff808211156103ed575f80fd5b818601915086601f830112610400575f80fd5b8135602061041061029c8361025a565b82815260059290921b8401810191818101908a84111561042e575f80fd5b948201945b838610156104605785356001600160a01b0381168114610451575f80fd5b82529482019490820190610433565b97505087013592505080821115610475575f80fd5b6104818783880161027d565b93506040860135915080821115610496575f80fd5b506104a3868287016102e9565b9150509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82515f5b818110156104e057602081860181015185830152016104c6565b505f92019182525091905056fea264697066735822122089797200888ad757484ded7bc0ffbb0769e9e974d73188d61385b7f6675e9f2064736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepolia/WETH.json b/contracts/deployments/arbitrumSepolia/WETH.json deleted file mode 100644 index ffa23293a..000000000 --- a/contracts/deployments/arbitrumSepolia/WETH.json +++ /dev/null @@ -1,458 +0,0 @@ -{ - "address": "0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "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": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xf91a0e7b9bf8d9f5e46432af0ed3dcf9b1fc0f35ed97e69201f5c92b6627f253", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511", - "transactionIndex": 1, - "gasUsed": "4834141", - "logsBloom": "0x00000020000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000001000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000200000000000000000000002000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x902e4567bed29221bff704416e5f67d81fb89baf362a63c9a23a5be31fd8f951", - "transactionHash": "0xf91a0e7b9bf8d9f5e46432af0ed3dcf9b1fc0f35ed97e69201f5c92b6627f253", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 3842792, - "transactionHash": "0xf91a0e7b9bf8d9f5e46432af0ed3dcf9b1fc0f35ed97e69201f5c92b6627f253", - "address": "0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "logIndex": 0, - "blockHash": "0x902e4567bed29221bff704416e5f67d81fb89baf362a63c9a23a5be31fd8f951" - } - ], - "blockNumber": 3842792, - "cumulativeGasUsed": "4834141", - "status": 1, - "byzantium": true - }, - "args": [ - "WETH", - "WETH" - ], - "numDeployments": 1, - "solcInputHash": "8e9cc2476be2df2a66044335eb796b9b", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/TestERC20.sol\":\"TestERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(address from, address to, uint256 amount) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(address owner, address spender, uint256 amount) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\"},\"src/token/TestERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\ncontract TestERC20 is ERC20 {\\n constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {\\n _mint(msg.sender, 1000000 ether);\\n }\\n}\\n\",\"keccak256\":\"0x9f67e6b63ca87e6c98b2986364ce16a747ce4098e9146fffb17ea13863c0b7e4\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b5060405162000c5838038062000c5883398101604081905262000034916200020a565b8181600362000044838262000302565b50600462000053828262000302565b505050620000723369d3c21bcecceda10000006200007a60201b60201c565b5050620003f6565b6001600160a01b038216620000d55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e99190620003ce565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016d57600080fd5b81516001600160401b03808211156200018a576200018a62000145565b604051601f8301601f19908116603f01168101908282118183101715620001b557620001b562000145565b81604052838152602092508683858801011115620001d257600080fd5b600091505b83821015620001f65785820183015181830184015290820190620001d7565b600093810190920192909252949350505050565b600080604083850312156200021e57600080fd5b82516001600160401b03808211156200023657600080fd5b62000244868387016200015b565b935060208501519150808211156200025b57600080fd5b506200026a858286016200015b565b9150509250929050565b600181811c908216806200028957607f821691505b602082108103620002aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200014057600081815260208120601f850160051c81016020861015620002d95750805b601f850160051c820191505b81811015620002fa57828155600101620002e5565b505050505050565b81516001600160401b038111156200031e576200031e62000145565b62000336816200032f845462000274565b84620002b0565b602080601f8311600181146200036e5760008415620003555750858301515b600019600386901b1c1916600185901b178555620002fa565b600085815260208120601f198616915b828110156200039f578886015182559484019460019091019084016200037e565b5085821015620003be5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620003f057634e487b7160e01b600052601160045260246000fd5b92915050565b61085280620004066000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea26469706673582212203a956e65a766c03ac95ae037cbdfb51b56810340c98132c2d2482405d386101b64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea26469706673582212203a956e65a766c03ac95ae037cbdfb51b56810340c98132c2d2482405d386101b64736f6c63430008120033", - "devdoc": { - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "decreaseAllowance(address,uint256)": { - "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." - }, - "increaseAllowance(address,uint256)": { - "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address." - }, - "name()": { - "details": "Returns the name of the token." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 128, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 134, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 136, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 138, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - }, - { - "astId": 140, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_symbol", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepolia/WETHFaucet.json b/contracts/deployments/arbitrumSepolia/WETHFaucet.json deleted file mode 100644 index 405063314..000000000 --- a/contracts/deployments/arbitrumSepolia/WETHFaucet.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "address": "0x922B84134e41BC5c9EDE7D5EFCE22Ba3D0e71835", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "amount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "changeAmount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "request", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "withdrewAlready", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xbfb4b10473c58ec57cdeb9470c1ec2e77f8e7f3a3b3fe0bef3b06f07bd415493", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x922B84134e41BC5c9EDE7D5EFCE22Ba3D0e71835", - "transactionIndex": 1, - "gasUsed": "2793705", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x9b0f884a08917ac9501a0154a2ba13a09449ceb5b34f40ebfd80b00a2fc74e09", - "transactionHash": "0xbfb4b10473c58ec57cdeb9470c1ec2e77f8e7f3a3b3fe0bef3b06f07bd415493", - "logs": [], - "blockNumber": 3842793, - "cumulativeGasUsed": "2793705", - "status": 1, - "byzantium": true - }, - "args": [ - "0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511" - ], - "numDeployments": 1, - "solcInputHash": "4ee8a1f2013c130bec1668c5304bc76a", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"amount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"changeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"withdrewAlready\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/Faucet.sol\":\"Faucet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/token/Faucet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ncontract Faucet {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n IERC20 public token;\\n address public governor;\\n mapping(address => bool) public withdrewAlready;\\n uint256 public amount = 10_000 ether;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(governor) == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n constructor(IERC20 _token) {\\n token = _token;\\n governor = msg.sender;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n function changeGovernor(address _governor) public onlyByGovernor {\\n governor = _governor;\\n }\\n\\n function changeAmount(uint256 _amount) public onlyByGovernor {\\n amount = _amount;\\n }\\n\\n function withdraw() public onlyByGovernor {\\n token.transfer(governor, token.balanceOf(address(this)));\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function request() public {\\n require(\\n !withdrewAlready[msg.sender],\\n \\\"You have used this faucet already. If you need more tokens, please use another address.\\\"\\n );\\n token.transfer(msg.sender, amount);\\n withdrewAlready[msg.sender] = true;\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n function balance() public view returns (uint) {\\n return token.balanceOf(address(this));\\n }\\n}\\n\",\"keccak256\":\"0x3a54681cc304ccbfdb42215104b63809919a432ac5d3986d3021a11fcc7a1cc3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405269021e19e0c9bab240000060035534801561001e57600080fd5b5060405161065538038061065583398101604081905261003d9161006b565b600080546001600160a01b039092166001600160a01b0319928316179055600180549091163317905561009b565b60006020828403121561007d57600080fd5b81516001600160a01b038116811461009457600080fd5b9392505050565b6105ab806100aa6000396000f3fe608060405234801561001057600080fd5b50600436106100835760003560e01c80630c340a2414610088578063338cdca1146100b15780633ccfd60b146100bb5780635c320516146100c3578063aa8c217c146100d6578063b69ef8a8146100ed578063d61c40dc146100f5578063e4c0aaf414610128578063fc0c546a1461013b575b600080fd5b60015461009b906001600160a01b031681565b6040516100a8919061049b565b60405180910390f35b6100b961014e565b005b6100b961028f565b6100b96100d13660046104af565b6103a9565b6100df60035481565b6040519081526020016100a8565b6100df6103d8565b6101186101033660046104c8565b60026020526000908152604090205460ff1681565b60405190151581526020016100a8565b6100b96101363660046104c8565b61044f565b60005461009b906001600160a01b031681565b3360009081526002602052604090205460ff16156101f95760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a4015b60405180910390fd5b60005460035460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027291906104f8565b50336000908152600260205260409020805460ff19166001179055565b6001546001600160a01b031633146102b95760405162461bcd60e51b81526004016101f09061051a565b6000546001546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906102f690309060040161049b565b602060405180830381865afa158015610313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610337919061055c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a691906104f8565b50565b6001546001600160a01b031633146103d35760405162461bcd60e51b81526004016101f09061051a565b600355565b600080546040516370a0823160e01b81526001600160a01b03909116906370a082319061040990309060040161049b565b602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a919061055c565b905090565b6001546001600160a01b031633146104795760405162461bcd60e51b81526004016101f09061051a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0391909116815260200190565b6000602082840312156104c157600080fd5b5035919050565b6000602082840312156104da57600080fd5b81356001600160a01b03811681146104f157600080fd5b9392505050565b60006020828403121561050a57600080fd5b815180151581146104f157600080fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60006020828403121561056e57600080fd5b505191905056fea26469706673582212204f7fd812260eacd88f23b436eb40b4943480e914005f0a0f2738f0d3c9696a5964736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100835760003560e01c80630c340a2414610088578063338cdca1146100b15780633ccfd60b146100bb5780635c320516146100c3578063aa8c217c146100d6578063b69ef8a8146100ed578063d61c40dc146100f5578063e4c0aaf414610128578063fc0c546a1461013b575b600080fd5b60015461009b906001600160a01b031681565b6040516100a8919061049b565b60405180910390f35b6100b961014e565b005b6100b961028f565b6100b96100d13660046104af565b6103a9565b6100df60035481565b6040519081526020016100a8565b6100df6103d8565b6101186101033660046104c8565b60026020526000908152604090205460ff1681565b60405190151581526020016100a8565b6100b96101363660046104c8565b61044f565b60005461009b906001600160a01b031681565b3360009081526002602052604090205460ff16156101f95760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a4015b60405180910390fd5b60005460035460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027291906104f8565b50336000908152600260205260409020805460ff19166001179055565b6001546001600160a01b031633146102b95760405162461bcd60e51b81526004016101f09061051a565b6000546001546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906102f690309060040161049b565b602060405180830381865afa158015610313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610337919061055c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a691906104f8565b50565b6001546001600160a01b031633146103d35760405162461bcd60e51b81526004016101f09061051a565b600355565b600080546040516370a0823160e01b81526001600160a01b03909116906370a082319061040990309060040161049b565b602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a919061055c565b905090565b6001546001600160a01b031633146104795760405162461bcd60e51b81526004016101f09061051a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0391909116815260200190565b6000602082840312156104c157600080fd5b5035919050565b6000602082840312156104da57600080fd5b81356001600160a01b03811681146104f157600080fd5b9392505050565b60006020828403121561050a57600080fd5b815180151581146104f157600080fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60006020828403121561056e57600080fd5b505191905056fea26469706673582212204f7fd812260eacd88f23b436eb40b4943480e914005f0a0f2738f0d3c9696a5964736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 24559, - "contract": "src/token/Faucet.sol:Faucet", - "label": "token", - "offset": 0, - "slot": "0", - "type": "t_contract(IERC20)1042" - }, - { - "astId": 24561, - "contract": "src/token/Faucet.sol:Faucet", - "label": "governor", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 24565, - "contract": "src/token/Faucet.sol:Faucet", - "label": "withdrewAlready", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 24568, - "contract": "src/token/Faucet.sol:Faucet", - "label": "amount", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20)1042": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet.ts b/contracts/deployments/arbitrumSepoliaDevnet.ts deleted file mode 100644 index bd581ea30..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet.ts +++ /dev/null @@ -1,33782 +0,0 @@ -export default { - name: "arbitrumSepoliaDevnet", - chainId: "421614", - contracts: { - ArbitrableExample: { - address: "0x3Eae72F076c68F5c354C73abC33EAA291ef1b2Fa", - abi: [ - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - internalType: "string", - name: "_templateData", - type: "string", - }, - { - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_weth", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "string", - name: "_action", - type: "string", - }, - ], - name: "Action", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_templateUri", - type: "string", - }, - ], - name: "DisputeRequest", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - inputs: [], - name: "arbitrator", - outputs: [ - { - internalType: "contract IArbitratorV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "arbitratorExtraData", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - ], - name: "changeArbitratorExtraData", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "_templateData", - type: "string", - }, - { - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "changeDisputeTemplate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "_action", - type: "string", - }, - { - internalType: "uint256", - name: "_feeInWeth", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "_action", - type: "string", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "bool", - name: "isRuled", - type: "bool", - }, - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "uint256", - name: "numberOfRulingOptions", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "externalIDtoLocalID", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templateId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "templateRegistry", - outputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "weth", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - BlockHashRNG: { - address: "0x56d6d65Fe202232714794B5D5e4ed9894466Ee01", - abi: [ - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "randomNumbers", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_block", - type: "uint256", - }, - ], - name: "receiveRandomness", - outputs: [ - { - internalType: "uint256", - name: "randomNumber", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_block", - type: "uint256", - }, - ], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - ChainlinkRNG: { - address: "0x7e40f5aC809521654A9c17e442F2a0a5a4d890FA", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "address", - name: "_sortitionModule", - type: "address", - }, - { - internalType: "address", - name: "_vrfCoordinator", - type: "address", - }, - { - internalType: "bytes32", - name: "_keyHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "_subscriptionId", - type: "uint256", - }, - { - internalType: "uint16", - name: "_requestConfirmations", - type: "uint16", - }, - { - internalType: "uint32", - name: "_callbackGasLimit", - type: "uint32", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "have", - type: "address", - }, - { - internalType: "address", - name: "want", - type: "address", - }, - ], - name: "OnlyCoordinatorCanFulfill", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "have", - type: "address", - }, - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "coordinator", - type: "address", - }, - ], - name: "OnlyOwnerOrCoordinator", - type: "error", - }, - { - inputs: [], - name: "ZeroAddress", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "vrfCoordinator", - type: "address", - }, - ], - name: "CoordinatorSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "OwnershipTransferRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "randomWord", - type: "uint256", - }, - ], - name: "RequestFulfilled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "RequestSent", - type: "event", - }, - { - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "callbackGasLimit", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "_callbackGasLimit", - type: "uint32", - }, - ], - name: "changeCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_keyHash", - type: "bytes32", - }, - ], - name: "changeKeyHash", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint16", - name: "_requestConfirmations", - type: "uint16", - }, - ], - name: "changeRequestConfirmations", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_sortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_subscriptionId", - type: "uint256", - }, - ], - name: "changeSubscriptionId", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_vrfCoordinator", - type: "address", - }, - ], - name: "changeVrfCoordinator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "keyHash", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastRequestId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "randomNumbers", - outputs: [ - { - internalType: "uint256", - name: "number", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "randomWords", - type: "uint256[]", - }, - ], - name: "rawFulfillRandomWords", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "receiveRandomness", - outputs: [ - { - internalType: "uint256", - name: "randomNumber", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "requestConfirmations", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "s_vrfCoordinator", - outputs: [ - { - internalType: "contract IVRFCoordinatorV2Plus", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_vrfCoordinator", - type: "address", - }, - ], - name: "setCoordinator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "sortitionModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "subscriptionId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - ChainlinkVRFCoordinator: { - address: "0x5CE8D5A2BC84beb22a398CCA51996F7930313D61", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "blockhashStore", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "uint256", - name: "internalBalance", - type: "uint256", - }, - { - internalType: "uint256", - name: "externalBalance", - type: "uint256", - }, - ], - name: "BalanceInvariantViolated", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNum", - type: "uint256", - }, - ], - name: "BlockhashNotInStore", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "coordinatorAddress", - type: "address", - }, - ], - name: "CoordinatorAlreadyRegistered", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "coordinatorAddress", - type: "address", - }, - ], - name: "CoordinatorNotRegistered", - type: "error", - }, - { - inputs: [], - name: "FailedToSendNative", - type: "error", - }, - { - inputs: [], - name: "FailedToTransferLink", - type: "error", - }, - { - inputs: [ - { - internalType: "uint32", - name: "have", - type: "uint32", - }, - { - internalType: "uint32", - name: "want", - type: "uint32", - }, - ], - name: "GasLimitTooBig", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "gasPrice", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxGas", - type: "uint256", - }, - ], - name: "GasPriceExceeded", - type: "error", - }, - { - inputs: [], - name: "IncorrectCommitment", - type: "error", - }, - { - inputs: [], - name: "IndexOutOfRange", - type: "error", - }, - { - inputs: [], - name: "InsufficientBalance", - type: "error", - }, - { - inputs: [], - name: "InvalidCalldata", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "InvalidConsumer", - type: "error", - }, - { - inputs: [], - name: "InvalidExtraArgsTag", - type: "error", - }, - { - inputs: [ - { - internalType: "int256", - name: "linkWei", - type: "int256", - }, - ], - name: "InvalidLinkWeiPrice", - type: "error", - }, - { - inputs: [ - { - internalType: "uint8", - name: "premiumPercentage", - type: "uint8", - }, - { - internalType: "uint8", - name: "max", - type: "uint8", - }, - ], - name: "InvalidPremiumPercentage", - type: "error", - }, - { - inputs: [ - { - internalType: "uint16", - name: "have", - type: "uint16", - }, - { - internalType: "uint16", - name: "min", - type: "uint16", - }, - { - internalType: "uint16", - name: "max", - type: "uint16", - }, - ], - name: "InvalidRequestConfirmations", - type: "error", - }, - { - inputs: [], - name: "InvalidSubscription", - type: "error", - }, - { - inputs: [], - name: "LinkAlreadySet", - type: "error", - }, - { - inputs: [ - { - internalType: "uint32", - name: "flatFeeLinkDiscountPPM", - type: "uint32", - }, - { - internalType: "uint32", - name: "flatFeeNativePPM", - type: "uint32", - }, - ], - name: "LinkDiscountTooHigh", - type: "error", - }, - { - inputs: [], - name: "LinkNotSet", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "have", - type: "uint256", - }, - { - internalType: "uint32", - name: "max", - type: "uint32", - }, - ], - name: "MsgDataTooBig", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "proposedOwner", - type: "address", - }, - ], - name: "MustBeRequestedOwner", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "MustBeSubOwner", - type: "error", - }, - { - inputs: [], - name: "NoCorrespondingRequest", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - ], - name: "NoSuchProvingKey", - type: "error", - }, - { - inputs: [ - { - internalType: "uint32", - name: "have", - type: "uint32", - }, - { - internalType: "uint32", - name: "want", - type: "uint32", - }, - ], - name: "NumWordsTooBig", - type: "error", - }, - { - inputs: [], - name: "OnlyCallableFromLink", - type: "error", - }, - { - inputs: [], - name: "PaymentTooLarge", - type: "error", - }, - { - inputs: [], - name: "PendingRequestExists", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - ], - name: "ProvingKeyAlreadyRegistered", - type: "error", - }, - { - inputs: [], - name: "Reentrant", - type: "error", - }, - { - inputs: [], - name: "TooManyConsumers", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint16", - name: "minimumRequestConfirmations", - type: "uint16", - }, - { - indexed: false, - internalType: "uint32", - name: "maxGasLimit", - type: "uint32", - }, - { - indexed: false, - internalType: "uint32", - name: "stalenessSeconds", - type: "uint32", - }, - { - indexed: false, - internalType: "uint32", - name: "gasAfterPaymentCalculation", - type: "uint32", - }, - { - indexed: false, - internalType: "int256", - name: "fallbackWeiPerUnitLink", - type: "int256", - }, - { - indexed: false, - internalType: "uint32", - name: "fulfillmentFlatFeeNativePPM", - type: "uint32", - }, - { - indexed: false, - internalType: "uint32", - name: "fulfillmentFlatFeeLinkDiscountPPM", - type: "uint32", - }, - { - indexed: false, - internalType: "uint8", - name: "nativePremiumPercentage", - type: "uint8", - }, - { - indexed: false, - internalType: "uint8", - name: "linkPremiumPercentage", - type: "uint8", - }, - ], - name: "ConfigSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "coordinatorAddress", - type: "address", - }, - ], - name: "CoordinatorDeregistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "coordinatorAddress", - type: "address", - }, - ], - name: "CoordinatorRegistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "fallbackWeiPerUnitLink", - type: "int256", - }, - ], - name: "FallbackWeiPerUnitLinkUsed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "FundsRecovered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "newCoordinator", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "MigrationCompleted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "NativeFundsRecovered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "OwnershipTransferRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint64", - name: "maxGas", - type: "uint64", - }, - ], - name: "ProvingKeyDeregistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint64", - name: "maxGas", - type: "uint64", - }, - ], - name: "ProvingKeyRegistered", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "outputSeed", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint96", - name: "payment", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "nativePayment", - type: "bool", - }, - { - indexed: false, - internalType: "bool", - name: "success", - type: "bool", - }, - { - indexed: false, - internalType: "bool", - name: "onlyPremium", - type: "bool", - }, - ], - name: "RandomWordsFulfilled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "preSeed", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint16", - name: "minimumRequestConfirmations", - type: "uint16", - }, - { - indexed: false, - internalType: "uint32", - name: "callbackGasLimit", - type: "uint32", - }, - { - indexed: false, - internalType: "uint32", - name: "numWords", - type: "uint32", - }, - { - indexed: false, - internalType: "bytes", - name: "extraArgs", - type: "bytes", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "RandomWordsRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amountLink", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amountNative", - type: "uint256", - }, - ], - name: "SubscriptionCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "SubscriptionConsumerAdded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "SubscriptionConsumerRemoved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "SubscriptionCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "oldBalance", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newBalance", - type: "uint256", - }, - ], - name: "SubscriptionFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "oldNativeBalance", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newNativeBalance", - type: "uint256", - }, - ], - name: "SubscriptionFundedWithNative", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "SubscriptionOwnerTransferRequested", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "SubscriptionOwnerTransferred", - type: "event", - }, - { - inputs: [], - name: "BLOCKHASH_STORE", - outputs: [ - { - internalType: "contract BlockhashStoreInterface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LINK", - outputs: [ - { - internalType: "contract LinkTokenInterface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LINK_NATIVE_FEED", - outputs: [ - { - internalType: "contract AggregatorV3Interface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAX_CONSUMERS", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAX_NUM_WORDS", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAX_REQUEST_CONFIRMATIONS", - outputs: [ - { - internalType: "uint16", - name: "", - type: "uint16", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "acceptSubscriptionOwnerTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "addConsumer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "cancelSubscription", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "createSubscription", - outputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "deregisterMigratableCoordinator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "publicProvingKey", - type: "uint256[2]", - }, - ], - name: "deregisterProvingKey", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "uint256[2]", - name: "pk", - type: "uint256[2]", - }, - { - internalType: "uint256[2]", - name: "gamma", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "c", - type: "uint256", - }, - { - internalType: "uint256", - name: "s", - type: "uint256", - }, - { - internalType: "uint256", - name: "seed", - type: "uint256", - }, - { - internalType: "address", - name: "uWitness", - type: "address", - }, - { - internalType: "uint256[2]", - name: "cGammaWitness", - type: "uint256[2]", - }, - { - internalType: "uint256[2]", - name: "sHashWitness", - type: "uint256[2]", - }, - { - internalType: "uint256", - name: "zInv", - type: "uint256", - }, - ], - internalType: "struct VRF.Proof", - name: "proof", - type: "tuple", - }, - { - components: [ - { - internalType: "uint64", - name: "blockNum", - type: "uint64", - }, - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "uint32", - name: "callbackGasLimit", - type: "uint32", - }, - { - internalType: "uint32", - name: "numWords", - type: "uint32", - }, - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "bytes", - name: "extraArgs", - type: "bytes", - }, - ], - internalType: "struct VRFTypes.RequestCommitmentV2Plus", - name: "rc", - type: "tuple", - }, - { - internalType: "bool", - name: "onlyPremium", - type: "bool", - }, - ], - name: "fulfillRandomWords", - outputs: [ - { - internalType: "uint96", - name: "payment", - type: "uint96", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "fundSubscriptionWithNative", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "startIndex", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxCount", - type: "uint256", - }, - ], - name: "getActiveSubscriptionIds", - outputs: [ - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "getSubscription", - outputs: [ - { - internalType: "uint96", - name: "balance", - type: "uint96", - }, - { - internalType: "uint96", - name: "nativeBalance", - type: "uint96", - }, - { - internalType: "uint64", - name: "reqCount", - type: "uint64", - }, - { - internalType: "address", - name: "subOwner", - type: "address", - }, - { - internalType: "address[]", - name: "consumers", - type: "address[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "publicKey", - type: "uint256[2]", - }, - ], - name: "hashOfKey", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "newCoordinator", - type: "address", - }, - ], - name: "migrate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "onTokenTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "ownerCancelSubscription", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - ], - name: "pendingRequestExists", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "recoverFunds", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "to", - type: "address", - }, - ], - name: "recoverNativeFunds", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - ], - name: "registerMigratableCoordinator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "publicProvingKey", - type: "uint256[2]", - }, - { - internalType: "uint64", - name: "maxGas", - type: "uint64", - }, - ], - name: "registerProvingKey", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "consumer", - type: "address", - }, - ], - name: "removeConsumer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "bytes32", - name: "keyHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "uint16", - name: "requestConfirmations", - type: "uint16", - }, - { - internalType: "uint32", - name: "callbackGasLimit", - type: "uint32", - }, - { - internalType: "uint32", - name: "numWords", - type: "uint32", - }, - { - internalType: "bytes", - name: "extraArgs", - type: "bytes", - }, - ], - internalType: "struct VRFV2PlusClient.RandomWordsRequest", - name: "req", - type: "tuple", - }, - ], - name: "requestRandomWords", - outputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "subId", - type: "uint256", - }, - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "requestSubscriptionOwnerTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "s_config", - outputs: [ - { - internalType: "uint16", - name: "minimumRequestConfirmations", - type: "uint16", - }, - { - internalType: "uint32", - name: "maxGasLimit", - type: "uint32", - }, - { - internalType: "bool", - name: "reentrancyLock", - type: "bool", - }, - { - internalType: "uint32", - name: "stalenessSeconds", - type: "uint32", - }, - { - internalType: "uint32", - name: "gasAfterPaymentCalculation", - type: "uint32", - }, - { - internalType: "uint32", - name: "fulfillmentFlatFeeNativePPM", - type: "uint32", - }, - { - internalType: "uint32", - name: "fulfillmentFlatFeeLinkDiscountPPM", - type: "uint32", - }, - { - internalType: "uint8", - name: "nativePremiumPercentage", - type: "uint8", - }, - { - internalType: "uint8", - name: "linkPremiumPercentage", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "s_currentSubNonce", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "s_fallbackWeiPerUnitLink", - outputs: [ - { - internalType: "int256", - name: "", - type: "int256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "s_provingKeyHashes", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "s_provingKeys", - outputs: [ - { - internalType: "bool", - name: "exists", - type: "bool", - }, - { - internalType: "uint64", - name: "maxGas", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "s_requestCommitments", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "s_totalBalance", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "s_totalNativeBalance", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint16", - name: "minimumRequestConfirmations", - type: "uint16", - }, - { - internalType: "uint32", - name: "maxGasLimit", - type: "uint32", - }, - { - internalType: "uint32", - name: "stalenessSeconds", - type: "uint32", - }, - { - internalType: "uint32", - name: "gasAfterPaymentCalculation", - type: "uint32", - }, - { - internalType: "int256", - name: "fallbackWeiPerUnitLink", - type: "int256", - }, - { - internalType: "uint32", - name: "fulfillmentFlatFeeNativePPM", - type: "uint32", - }, - { - internalType: "uint32", - name: "fulfillmentFlatFeeLinkDiscountPPM", - type: "uint32", - }, - { - internalType: "uint8", - name: "nativePremiumPercentage", - type: "uint8", - }, - { - internalType: "uint8", - name: "linkPremiumPercentage", - type: "uint8", - }, - ], - name: "setConfig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "link", - type: "address", - }, - { - internalType: "address", - name: "linkNativeFeed", - type: "address", - }, - ], - name: "setLINKAndLINKNativeFeed", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - ], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "recipient", - type: "address", - }, - ], - name: "withdrawNative", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DAI: { - address: "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", - abi: [ - { - inputs: [ - { - internalType: "string", - name: "_name", - type: "string", - }, - { - internalType: "string", - name: "_symbol", - type: "string", - }, - ], - 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: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - 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: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - 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: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DAIFaucet: { - address: "0xB5b39A1bcD2D7097A8824B3cC18Ebd2dFb0D9B5E", - abi: [ - { - inputs: [ - { - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "balance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "withdrewAlready", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - DisputeKitClassic: { - address: "0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitClassicUniversity: { - address: "0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitClassicUniversity_Implementation: { - address: "0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitClassicUniversity_Proxy: { - address: "0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeKitClassic_Implementation: { - address: "0xc4cC0274E55a9818f8cF42640B1De61d269425ad", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitClassic_Proxy: { - address: "0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeKitGated: { - address: "0x677dA30B4b27D129354DdA1e219Bcc86802132d1", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "extraDataToTokenInfo", - outputs: [ - { - internalType: "address", - name: "tokenGate", - type: "address", - }, - { - internalType: "bool", - name: "isERC1155", - type: "bool", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitGatedShutter: { - address: "0xd86b84eb36Cd48f3f384b4490F255b494385F429", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "CommitCastShutter", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitGatedShutter_Implementation: { - address: "0x56199F9E5C0ef9251A251a41597A971141199EDF", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "CommitCastShutter", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitGatedShutter_Proxy: { - address: "0xd86b84eb36Cd48f3f384b4490F255b494385F429", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeKitGated_Implementation: { - address: "0xA27EedcEA916BC1ab91720cE70c56666E854F55e", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "extraDataToTokenInfo", - outputs: [ - { - internalType: "address", - name: "tokenGate", - type: "address", - }, - { - internalType: "bool", - name: "isERC1155", - type: "bool", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitGated_Proxy: { - address: "0x677dA30B4b27D129354DdA1e219Bcc86802132d1", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeKitShutter: { - address: "0xfE0a958bc744Bb9E224E1822625B53134ac5CB69", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "CommitCastShutter", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeKitShutter_Implementation: { - address: "0x6582CE0FdB29B5673E6650e34728C784BafB2139", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "ChoiceFunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: false, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "CommitCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "CommitCastShutter", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Contribution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_juror", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - indexed: true, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_contributor", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - name: "alreadyDrawn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areCommitsAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "areVotesAllCast", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "bytes32", - name: "_commit", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_identity", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_encryptedVote", - type: "bytes", - }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256[]", - name: "_voteIDs", - type: "uint256[]", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "coreDisputeID", - type: "uint256", - }, - ], - name: "coreDisputeIDToActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "coreDisputeIDToLocal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "uint256", - name: "_nbVotes", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint256", - name: "numberOfChoices", - type: "uint256", - }, - { - internalType: "bool", - name: "jumped", - type: "bool", - }, - { - internalType: "bytes", - name: "extraData", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getCoherentCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "getDegreeOfCoherence", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "getFundedChoices", - outputs: [ - { - internalType: "uint256[]", - name: "fundedChoices", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { - internalType: "uint256", - name: "localDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "localRoundID", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_localDisputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - internalType: "uint256", - name: "winningChoice", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "uint256", - name: "totalVoted", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalCommited", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVoters", - type: "uint256", - }, - { - internalType: "uint256", - name: "choiceCount", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "getVoteInfo", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "commit", - type: "bytes32", - }, - { - internalType: "uint256", - name: "choice", - type: "uint256", - }, - { - internalType: "bool", - name: "voted", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - { - internalType: "uint256", - name: "_salt", - type: "uint256", - }, - { - internalType: "string", - name: "_justification", - type: "string", - }, - ], - name: "hashVote", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - ], - name: "isAppealFunded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "isVoteActive", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "singleDrawPerJuror", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "address payable", - name: "_beneficiary", - type: "address", - }, - { - internalType: "uint256", - name: "_coreRoundID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_choice", - type: "uint256", - }, - ], - name: "withdrawFeesAndRewards", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - DisputeKitShutter_Proxy: { - address: "0xfE0a958bc744Bb9E224E1822625B53134ac5CB69", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - DisputeResolver: { - address: "0x71f8537e925C753Fe88DA7e69Ae423f9f3a9A292", - abi: [ - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_templateUri", - type: "string", - }, - ], - name: "DisputeRequest", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - inputs: [], - name: "arbitrator", - outputs: [ - { - internalType: "contract IArbitratorV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "arbitratorDisputeIDToLocalID", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "string", - name: "_disputeTemplate", - type: "string", - }, - { - internalType: "string", - name: "_disputeTemplateDataMappings", - type: "string", - }, - { - internalType: "uint256", - name: "_numberOfRulingOptions", - type: "uint256", - }, - ], - name: "createDisputeForTemplate", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "string", - name: "_disputeTemplateUri", - type: "string", - }, - { - internalType: "uint256", - name: "_numberOfRulingOptions", - type: "uint256", - }, - ], - name: "createDisputeForTemplateUri", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "bytes", - name: "arbitratorExtraData", - type: "bytes", - }, - { - internalType: "bool", - name: "isRuled", - type: "bool", - }, - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "uint256", - name: "numberOfRulingOptions", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templateRegistry", - outputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - DisputeResolverRuler: { - address: "0xAEB1bbaE58125BA5F32349c69e4274d15dfD6EC3", - abi: [ - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_templateUri", - type: "string", - }, - ], - name: "DisputeRequest", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - inputs: [], - name: "arbitrator", - outputs: [ - { - internalType: "contract IArbitratorV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "arbitratorDisputeIDToLocalID", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "string", - name: "_disputeTemplate", - type: "string", - }, - { - internalType: "string", - name: "_disputeTemplateDataMappings", - type: "string", - }, - { - internalType: "uint256", - name: "_numberOfRulingOptions", - type: "uint256", - }, - ], - name: "createDisputeForTemplate", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "string", - name: "_disputeTemplateUri", - type: "string", - }, - { - internalType: "uint256", - name: "_numberOfRulingOptions", - type: "uint256", - }, - ], - name: "createDisputeForTemplateUri", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "bytes", - name: "arbitratorExtraData", - type: "bytes", - }, - { - internalType: "bool", - name: "isRuled", - type: "bool", - }, - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "uint256", - name: "numberOfRulingOptions", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templateRegistry", - outputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - DisputeResolverUniversity: { - address: "0x2Aa1a94307E772BeE42E9EfbD137b1053F1fCfd4", - abi: [ - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_templateUri", - type: "string", - }, - ], - name: "DisputeRequest", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - inputs: [], - name: "arbitrator", - outputs: [ - { - internalType: "contract IArbitratorV2", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "arbitratorDisputeIDToLocalID", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitratorV2", - name: "_arbitrator", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "_templateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "string", - name: "_disputeTemplate", - type: "string", - }, - { - internalType: "string", - name: "_disputeTemplateDataMappings", - type: "string", - }, - { - internalType: "uint256", - name: "_numberOfRulingOptions", - type: "uint256", - }, - ], - name: "createDisputeForTemplate", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_arbitratorExtraData", - type: "bytes", - }, - { - internalType: "string", - name: "_disputeTemplateUri", - type: "string", - }, - { - internalType: "uint256", - name: "_numberOfRulingOptions", - type: "uint256", - }, - ], - name: "createDisputeForTemplateUri", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "bytes", - name: "arbitratorExtraData", - type: "bytes", - }, - { - internalType: "bool", - name: "isRuled", - type: "bool", - }, - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "uint256", - name: "numberOfRulingOptions", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_arbitratorDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templateRegistry", - outputs: [ - { - internalType: "contract IDisputeTemplateRegistry", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - DisputeTemplateRegistry: { - address: "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: true, - internalType: "string", - name: "_templateTag", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_templateData", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "DisputeTemplate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "_templateTag", - type: "string", - }, - { - internalType: "string", - name: "_templateData", - type: "string", - }, - { - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "setDisputeTemplate", - outputs: [ - { - internalType: "uint256", - name: "templateId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templates", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - DisputeTemplateRegistry_Implementation: { - address: "0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_templateId", - type: "uint256", - }, - { - indexed: true, - internalType: "string", - name: "_templateTag", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_templateData", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "DisputeTemplate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "string", - name: "_templateTag", - type: "string", - }, - { - internalType: "string", - name: "_templateData", - type: "string", - }, - { - internalType: "string", - name: "_templateDataMappings", - type: "string", - }, - ], - name: "setDisputeTemplate", - outputs: [ - { - internalType: "uint256", - name: "templateId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "templates", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - DisputeTemplateRegistry_Proxy: { - address: "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - EvidenceModule: { - address: "0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_party", - type: "address", - }, - { - indexed: false, - internalType: "string", - name: "_evidence", - type: "string", - }, - ], - name: "Evidence", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - internalType: "string", - name: "_evidence", - type: "string", - }, - ], - name: "submitEvidence", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - EvidenceModule_Implementation: { - address: "0x450Aa35da0ad8B282C5d910254055651417C2200", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "_party", - type: "address", - }, - { - indexed: false, - internalType: "string", - name: "_evidence", - type: "string", - }, - ], - name: "Evidence", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_externalDisputeID", - type: "uint256", - }, - { - internalType: "string", - name: "_evidence", - type: "string", - }, - ], - name: "submitEvidence", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - EvidenceModule_Proxy: { - address: "0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - KlerosCore: { - address: "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "AppealFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "AppealPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "ArbitrationFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "CannotDisableClassicDK", - type: "error", - }, - { - inputs: [], - name: "CommitPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "DisputeKitNotSupportedByCourt", - type: "error", - }, - { - inputs: [], - name: "DisputeKitOnly", - type: "error", - }, - { - inputs: [], - name: "DisputeNotAppealable", - type: "error", - }, - { - inputs: [], - name: "DisputePeriodIsFinal", - type: "error", - }, - { - inputs: [], - name: "DisputeStillDrawing", - type: "error", - }, - { - inputs: [], - name: "EvidenceNotPassedAndNotAppeal", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [], - name: "GovernorOnly", - type: "error", - }, - { - inputs: [], - name: "GuardianOrGovernorOnly", - type: "error", - }, - { - inputs: [], - name: "InvalidDisputKitParent", - type: "error", - }, - { - inputs: [], - name: "InvalidForkingCourtAsParent", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "MinStakeLowerThanParentCourt", - type: "error", - }, - { - inputs: [], - name: "MustSupportDisputeKitClassic", - type: "error", - }, - { - inputs: [], - name: "NotEvidencePeriod", - type: "error", - }, - { - inputs: [], - name: "NotExecutionPeriod", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "RulingAlreadyExecuted", - type: "error", - }, - { - inputs: [], - name: "SortitionModuleOnly", - type: "error", - }, - { - inputs: [], - name: "StakingInTooManyCourts", - type: "error", - }, - { - inputs: [], - name: "StakingLessThanCourtMinStake", - type: "error", - }, - { - inputs: [], - name: "StakingNotPossibleInThisCourt", - type: "error", - }, - { - inputs: [], - name: "StakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "StakingZeroWhenNoStake", - type: "error", - }, - { - inputs: [], - name: "TokenNotAccepted", - type: "error", - }, - { - inputs: [], - name: "TransferFailed", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - inputs: [], - name: "UnstakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "UnsuccessfulCall", - type: "error", - }, - { - inputs: [], - name: "UnsupportedDisputeKit", - type: "error", - }, - { - inputs: [], - name: "VotePeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "WhenNotPausedOnly", - type: "error", - }, - { - inputs: [], - name: "WhenPausedOnly", - type: "error", - }, - { - inputs: [], - name: "WrongDisputeKitIndex", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - { - indexed: true, - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "AcceptedFeeToken", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealDecision", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealPossible", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "CourtCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_fromCourtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint96", - name: "_toCourtID", - type: "uint96", - }, - ], - name: "CourtJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtModified", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "DisputeKitCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "DisputeKitEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_fromDisputeKitID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_toDisputeKitID", - type: "uint256", - }, - ], - name: "DisputeKitJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "Draw", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_pnkAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "LeftoverRewardSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - indexed: false, - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - indexed: false, - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "NewCurrencyRate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "enum KlerosCoreBase.Period", - name: "_period", - type: "uint8", - }, - ], - name: "NewPeriod", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_degreeOfCoherency", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "_pnkAmount", - type: "int256", - }, - { - indexed: false, - internalType: "int256", - name: "_feeAmount", - type: "int256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "TokenAndETHShift", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Unpaused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealPeriod", - outputs: [ - { - internalType: "uint256", - name: "start", - type: "uint256", - }, - { - internalType: "uint256", - name: "end", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_guardian", - type: "address", - }, - ], - name: "changeGuardian", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract ISortitionModule", - name: "_sortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_toToken", - type: "address", - }, - { - internalType: "uint256", - name: "_amountInEth", - type: "uint256", - }, - ], - name: "convertEthToTokenAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "courts", - outputs: [ - { - internalType: "uint96", - name: "parent", - type: "uint96", - }, - { - internalType: "bool", - name: "hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "bool", - name: "disabled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "bytes", - name: "_sortitionExtraData", - type: "bytes", - }, - { - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "currencyRates", - outputs: [ - { - internalType: "bool", - name: "feePaymentAccepted", - type: "bool", - }, - { - internalType: "uint64", - name: "rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "rateDecimals", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputeKits", - outputs: [ - { - internalType: "contract IDisputeKit", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "contract IArbitrableV2", - name: "arbitrated", - type: "address", - }, - { - internalType: "enum KlerosCoreBase.Period", - name: "period", - type: "uint8", - }, - { - internalType: "bool", - name: "ruled", - type: "bool", - }, - { - internalType: "uint256", - name: "lastPeriodChange", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "uint256", - name: "nbDrawnJurors", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256[]", - name: "_disputeKitIDs", - type: "uint256[]", - }, - { - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDisputeKitsLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getPnkAtStakePerJuror", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "disputeKitID", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkAtStakePerJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalFeesForJurors", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "repartitions", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkPenalties", - type: "uint256", - }, - { - internalType: "address[]", - name: "drawnJurors", - type: "address[]", - }, - { - internalType: "uint256", - name: "sumFeeRewardPaid", - type: "uint256", - }, - { - internalType: "uint256", - name: "sumPnkRewardPaid", - type: "uint256", - }, - { - internalType: "contract IERC20", - name: "feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "drawIterations", - type: "uint256", - }, - ], - internalType: "struct KlerosCoreBase.Round", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getTimesPerPeriod", - outputs: [ - { - internalType: "uint256[4]", - name: "timesPerPeriod", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "guardian", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "address", - name: "_guardian", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - { - internalType: "contract IDisputeKit", - name: "_disputeKit", - type: "address", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256[4]", - name: "_courtParameters", - type: "uint256[4]", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "bytes", - name: "_sortitionExtraData", - type: "bytes", - }, - { - internalType: "contract ISortitionModule", - name: "_sortitionModuleAddress", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "isDisputeKitJumping", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - ], - name: "isSupported", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "jurorProsecutionModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - 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: "pinakion", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "sortitionModule", - outputs: [ - { - internalType: "contract ISortitionModule", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "transferBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "unpause", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - KlerosCoreRuler: { - address: "0x0630e4248a17b506809009F5D88E2f5bEE584c83", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "AppealFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "ArbitrationFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "DisputeNotAppealable", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [], - name: "GovernorOnly", - type: "error", - }, - { - inputs: [], - name: "GovernorOrInstructorOnly", - type: "error", - }, - { - inputs: [], - name: "InvalidForkingCourtAsParent", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NoRulerSet", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "RulerOnly", - type: "error", - }, - { - inputs: [], - name: "RulingAlreadyExecuted", - type: "error", - }, - { - inputs: [], - name: "RulingModeNotSet", - type: "error", - }, - { - inputs: [], - name: "TokenNotAccepted", - type: "error", - }, - { - inputs: [], - name: "TransferFailed", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - inputs: [], - name: "UnsuccessfulCall", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - { - indexed: true, - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "AcceptedFeeToken", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealDecision", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealPossible", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "enum KlerosCoreRuler.RulingMode", - name: "mode", - type: "uint8", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "tied", - type: "bool", - }, - { - indexed: false, - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - name: "AutoRuled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_fromCourtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint96", - name: "_toCourtID", - type: "uint96", - }, - ], - name: "CourtJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtModified", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_pnkAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "LeftoverRewardSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - indexed: false, - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - indexed: false, - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "NewCurrencyRate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "enum KlerosCoreRuler.Period", - name: "_period", - type: "uint8", - }, - ], - name: "NewPeriod", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "_oldRuler", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "_newRuler", - type: "address", - }, - ], - name: "RulerChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - components: [ - { - internalType: "enum KlerosCoreRuler.RulingMode", - name: "rulingMode", - type: "uint8", - }, - { - internalType: "uint256", - name: "presetRuling", - type: "uint256", - }, - { - internalType: "bool", - name: "presetTied", - type: "bool", - }, - { - internalType: "bool", - name: "presetOverridden", - type: "bool", - }, - ], - indexed: false, - internalType: "struct KlerosCoreRuler.RulerSettings", - name: "_settings", - type: "tuple", - }, - ], - name: "RulerSettingsChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_degreeOfCoherency", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "_pnkAmount", - type: "int256", - }, - { - indexed: false, - internalType: "int256", - name: "_feeAmount", - type: "int256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "TokenAndETHShift", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - { - internalType: "bool", - name: "_jump", - type: "bool", - }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "bool", - name: "_jump", - type: "bool", - }, - ], - name: "appealCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - internalType: "address", - name: "_newRuler", - type: "address", - }, - ], - name: "changeRuler", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - internalType: "uint256", - name: "_presetRuling", - type: "uint256", - }, - { - internalType: "bool", - name: "_presetTied", - type: "bool", - }, - { - internalType: "bool", - name: "_presetOverridden", - type: "bool", - }, - ], - name: "changeRulingModeToAutomaticPreset", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "changeRulingModeToAutomaticRandom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "changeRulingModeToManual", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_toToken", - type: "address", - }, - { - internalType: "uint256", - name: "_amountInEth", - type: "uint256", - }, - ], - name: "convertEthToTokenAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "courts", - outputs: [ - { - internalType: "uint96", - name: "parent", - type: "uint96", - }, - { - internalType: "bool", - name: "hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "bool", - name: "disabled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "currencyRates", - outputs: [ - { - internalType: "bool", - name: "feePaymentAccepted", - type: "bool", - }, - { - internalType: "uint64", - name: "rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "rateDecimals", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "contract IArbitrableV2", - name: "arbitrated", - type: "address", - }, - { - internalType: "enum KlerosCoreRuler.Period", - name: "period", - type: "uint8", - }, - { - internalType: "bool", - name: "ruled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getNextDisputeID", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "totalFeesForJurors", - type: "uint256", - }, - { - internalType: "uint256", - name: "sumFeeRewardPaid", - type: "uint256", - }, - { - internalType: "contract IERC20", - name: "feeToken", - type: "address", - }, - ], - internalType: "struct KlerosCoreRuler.Round", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getTimesPerPeriod", - outputs: [ - { - internalType: "uint256[4]", - name: "timesPerPeriod", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - { - internalType: "uint256[4]", - name: "_courtParameters", - type: "uint256[4]", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pinakion", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "arbitrable", - type: "address", - }, - ], - name: "rulers", - outputs: [ - { - internalType: "address", - name: "ruler", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - name: "rulingResults", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "arbitrable", - type: "address", - }, - ], - name: "settings", - outputs: [ - { - internalType: "enum KlerosCoreRuler.RulingMode", - name: "rulingMode", - type: "uint8", - }, - { - internalType: "uint256", - name: "presetRuling", - type: "uint256", - }, - { - internalType: "bool", - name: "presetTied", - type: "bool", - }, - { - internalType: "bool", - name: "presetOverridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - KlerosCoreRuler_Implementation: { - address: "0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "AppealFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "ArbitrationFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "DisputeNotAppealable", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [], - name: "GovernorOnly", - type: "error", - }, - { - inputs: [], - name: "GovernorOrInstructorOnly", - type: "error", - }, - { - inputs: [], - name: "InvalidForkingCourtAsParent", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NoRulerSet", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "RulerOnly", - type: "error", - }, - { - inputs: [], - name: "RulingAlreadyExecuted", - type: "error", - }, - { - inputs: [], - name: "RulingModeNotSet", - type: "error", - }, - { - inputs: [], - name: "TokenNotAccepted", - type: "error", - }, - { - inputs: [], - name: "TransferFailed", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - inputs: [], - name: "UnsuccessfulCall", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - { - indexed: true, - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "AcceptedFeeToken", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealDecision", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealPossible", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "enum KlerosCoreRuler.RulingMode", - name: "mode", - type: "uint8", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "tied", - type: "bool", - }, - { - indexed: false, - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - name: "AutoRuled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_fromCourtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint96", - name: "_toCourtID", - type: "uint96", - }, - ], - name: "CourtJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtModified", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_pnkAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "LeftoverRewardSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - indexed: false, - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - indexed: false, - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "NewCurrencyRate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "enum KlerosCoreRuler.Period", - name: "_period", - type: "uint8", - }, - ], - name: "NewPeriod", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "_oldRuler", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "_newRuler", - type: "address", - }, - ], - name: "RulerChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - components: [ - { - internalType: "enum KlerosCoreRuler.RulingMode", - name: "rulingMode", - type: "uint8", - }, - { - internalType: "uint256", - name: "presetRuling", - type: "uint256", - }, - { - internalType: "bool", - name: "presetTied", - type: "bool", - }, - { - internalType: "bool", - name: "presetOverridden", - type: "bool", - }, - ], - indexed: false, - internalType: "struct KlerosCoreRuler.RulerSettings", - name: "_settings", - type: "tuple", - }, - ], - name: "RulerSettingsChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_degreeOfCoherency", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "_pnkAmount", - type: "int256", - }, - { - indexed: false, - internalType: "int256", - name: "_feeAmount", - type: "int256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "TokenAndETHShift", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - { - internalType: "bool", - name: "_jump", - type: "bool", - }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "bool", - name: "_jump", - type: "bool", - }, - ], - name: "appealCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - internalType: "address", - name: "_newRuler", - type: "address", - }, - ], - name: "changeRuler", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - internalType: "uint256", - name: "_presetRuling", - type: "uint256", - }, - { - internalType: "bool", - name: "_presetTied", - type: "bool", - }, - { - internalType: "bool", - name: "_presetOverridden", - type: "bool", - }, - ], - name: "changeRulingModeToAutomaticPreset", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "changeRulingModeToAutomaticRandom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "changeRulingModeToManual", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_toToken", - type: "address", - }, - { - internalType: "uint256", - name: "_amountInEth", - type: "uint256", - }, - ], - name: "convertEthToTokenAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "courts", - outputs: [ - { - internalType: "uint96", - name: "parent", - type: "uint96", - }, - { - internalType: "bool", - name: "hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "bool", - name: "disabled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "currencyRates", - outputs: [ - { - internalType: "bool", - name: "feePaymentAccepted", - type: "bool", - }, - { - internalType: "uint64", - name: "rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "rateDecimals", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "contract IArbitrableV2", - name: "arbitrated", - type: "address", - }, - { - internalType: "enum KlerosCoreRuler.Period", - name: "period", - type: "uint8", - }, - { - internalType: "bool", - name: "ruled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getNextDisputeID", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "totalFeesForJurors", - type: "uint256", - }, - { - internalType: "uint256", - name: "sumFeeRewardPaid", - type: "uint256", - }, - { - internalType: "contract IERC20", - name: "feeToken", - type: "address", - }, - ], - internalType: "struct KlerosCoreRuler.Round", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getTimesPerPeriod", - outputs: [ - { - internalType: "uint256[4]", - name: "timesPerPeriod", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - { - internalType: "uint256[4]", - name: "_courtParameters", - type: "uint256[4]", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pinakion", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "arbitrable", - type: "address", - }, - ], - name: "rulers", - outputs: [ - { - internalType: "address", - name: "ruler", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - name: "rulingResults", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IArbitrableV2", - name: "arbitrable", - type: "address", - }, - ], - name: "settings", - outputs: [ - { - internalType: "enum KlerosCoreRuler.RulingMode", - name: "rulingMode", - type: "uint8", - }, - { - internalType: "uint256", - name: "presetRuling", - type: "uint256", - }, - { - internalType: "bool", - name: "presetTied", - type: "bool", - }, - { - internalType: "bool", - name: "presetOverridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - KlerosCoreRuler_Proxy: { - address: "0x0630e4248a17b506809009F5D88E2f5bEE584c83", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - KlerosCoreSnapshotProxy: { - address: "0xF924ac62b20901914c101Fa089Da1FB6A0585138", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract IKlerosCore", - name: "_core", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IKlerosCore", - name: "_core", - type: "address", - }, - ], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract IKlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - KlerosCoreUniversity: { - address: "0x5AB37F38778Bc175852fA353056591D91c744ce6", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AllJurorsDrawn", - type: "error", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "AppealFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "AppealPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "ArbitrationFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "ArraysLengthMismatch", - type: "error", - }, - { - inputs: [], - name: "CannotDisableClassicDK", - type: "error", - }, - { - inputs: [], - name: "CommitPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "DepthLevelMax", - type: "error", - }, - { - inputs: [], - name: "DisputeKitNotSupportedByCourt", - type: "error", - }, - { - inputs: [], - name: "DisputeKitOnly", - type: "error", - }, - { - inputs: [], - name: "DisputeNotAppealable", - type: "error", - }, - { - inputs: [], - name: "DisputePeriodIsFinal", - type: "error", - }, - { - inputs: [], - name: "DisputeStillDrawing", - type: "error", - }, - { - inputs: [], - name: "EvidenceNotPassedAndNotAppeal", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [], - name: "GovernorOnly", - type: "error", - }, - { - inputs: [], - name: "GovernorOrInstructorOnly", - type: "error", - }, - { - inputs: [], - name: "InstructorOnly", - type: "error", - }, - { - inputs: [], - name: "InvalidDisputKitParent", - type: "error", - }, - { - inputs: [], - name: "InvalidForkingCourtAsParent", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "MinStakeLowerThanParentCourt", - type: "error", - }, - { - inputs: [], - name: "MustSupportDisputeKitClassic", - type: "error", - }, - { - inputs: [], - name: "NoJurorDrawn", - type: "error", - }, - { - inputs: [], - name: "NotEvidencePeriod", - type: "error", - }, - { - inputs: [], - name: "NotExecutionPeriod", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "RulingAlreadyExecuted", - type: "error", - }, - { - inputs: [], - name: "SortitionModuleOnly", - type: "error", - }, - { - inputs: [], - name: "StakingInTooManyCourts", - type: "error", - }, - { - inputs: [], - name: "StakingLessThanCourtMinStake", - type: "error", - }, - { - inputs: [], - name: "StakingNotPossibeInThisCourt", - type: "error", - }, - { - inputs: [], - name: "StakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "TokenNotAccepted", - type: "error", - }, - { - inputs: [], - name: "TransferFailed", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - inputs: [], - name: "UnstakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "UnsuccessfulCall", - type: "error", - }, - { - inputs: [], - name: "UnsupportedDisputeKit", - type: "error", - }, - { - inputs: [], - name: "VotePeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "WrongDisputeKitIndex", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - { - indexed: true, - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "AcceptedFeeToken", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealDecision", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealPossible", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "CourtCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_fromCourtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint96", - name: "_toCourtID", - type: "uint96", - }, - ], - name: "CourtJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtModified", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "DisputeKitCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "DisputeKitEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_fromDisputeKitID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_toDisputeKitID", - type: "uint256", - }, - ], - name: "DisputeKitJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "Draw", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_pnkAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "LeftoverRewardSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - indexed: false, - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - indexed: false, - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "NewCurrencyRate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "enum KlerosCoreUniversity.Period", - name: "_period", - type: "uint8", - }, - ], - name: "NewPeriod", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_degreeOfCoherency", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "_pnkAmount", - type: "int256", - }, - { - indexed: false, - internalType: "int256", - name: "_feeAmount", - type: "int256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "TokenAndETHShift", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealPeriod", - outputs: [ - { - internalType: "uint256", - name: "start", - type: "uint256", - }, - { - internalType: "uint256", - name: "end", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_instructor", - type: "address", - }, - ], - name: "changeInstructor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract ISortitionModuleUniversity", - name: "_sortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_toToken", - type: "address", - }, - { - internalType: "uint256", - name: "_amountInEth", - type: "uint256", - }, - ], - name: "convertEthToTokenAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "courts", - outputs: [ - { - internalType: "uint96", - name: "parent", - type: "uint96", - }, - { - internalType: "bool", - name: "hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "bool", - name: "disabled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "currencyRates", - outputs: [ - { - internalType: "bool", - name: "feePaymentAccepted", - type: "bool", - }, - { - internalType: "uint64", - name: "rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "rateDecimals", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputeKits", - outputs: [ - { - internalType: "contract IDisputeKit", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "contract IArbitrableV2", - name: "arbitrated", - type: "address", - }, - { - internalType: "enum KlerosCoreUniversity.Period", - name: "period", - type: "uint8", - }, - { - internalType: "bool", - name: "ruled", - type: "bool", - }, - { - internalType: "uint256", - name: "lastPeriodChange", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "draw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256[]", - name: "_disputeKitIDs", - type: "uint256[]", - }, - { - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDisputeKitsLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "disputeKitID", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkAtStakePerJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalFeesForJurors", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "repartitions", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkPenalties", - type: "uint256", - }, - { - internalType: "address[]", - name: "drawnJurors", - type: "address[]", - }, - { - internalType: "uint256", - name: "sumFeeRewardPaid", - type: "uint256", - }, - { - internalType: "uint256", - name: "sumPnkRewardPaid", - type: "uint256", - }, - { - internalType: "contract IERC20", - name: "feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "drawIterations", - type: "uint256", - }, - ], - internalType: "struct KlerosCoreUniversity.Round", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getTimesPerPeriod", - outputs: [ - { - internalType: "uint256[4]", - name: "timesPerPeriod", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "address", - name: "_instructor", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - { - internalType: "contract IDisputeKit", - name: "_disputeKit", - type: "address", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256[4]", - name: "_courtParameters", - type: "uint256[4]", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "contract ISortitionModuleUniversity", - name: "_sortitionModuleAddress", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "instructor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "isDisputeKitJumping", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - ], - name: "isSupported", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "jurorProsecutionModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pinakion", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - { - internalType: "bool", - name: "_alreadyTransferred", - type: "bool", - }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "sortitionModule", - outputs: [ - { - internalType: "contract ISortitionModuleUniversity", - name: "", - type: "address", - }, - ], - stateMutability: "view", - 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: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - KlerosCoreUniversity_Implementation: { - address: "0xF74DaBfC5F5dbdBD07636637204d9C35326D2906", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AllJurorsDrawn", - type: "error", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "AppealFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "AppealPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "ArbitrationFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "ArraysLengthMismatch", - type: "error", - }, - { - inputs: [], - name: "CannotDisableClassicDK", - type: "error", - }, - { - inputs: [], - name: "CommitPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "DepthLevelMax", - type: "error", - }, - { - inputs: [], - name: "DisputeKitNotSupportedByCourt", - type: "error", - }, - { - inputs: [], - name: "DisputeKitOnly", - type: "error", - }, - { - inputs: [], - name: "DisputeNotAppealable", - type: "error", - }, - { - inputs: [], - name: "DisputePeriodIsFinal", - type: "error", - }, - { - inputs: [], - name: "DisputeStillDrawing", - type: "error", - }, - { - inputs: [], - name: "EvidenceNotPassedAndNotAppeal", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [], - name: "GovernorOnly", - type: "error", - }, - { - inputs: [], - name: "GovernorOrInstructorOnly", - type: "error", - }, - { - inputs: [], - name: "InstructorOnly", - type: "error", - }, - { - inputs: [], - name: "InvalidDisputKitParent", - type: "error", - }, - { - inputs: [], - name: "InvalidForkingCourtAsParent", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "MinStakeLowerThanParentCourt", - type: "error", - }, - { - inputs: [], - name: "MustSupportDisputeKitClassic", - type: "error", - }, - { - inputs: [], - name: "NoJurorDrawn", - type: "error", - }, - { - inputs: [], - name: "NotEvidencePeriod", - type: "error", - }, - { - inputs: [], - name: "NotExecutionPeriod", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "RulingAlreadyExecuted", - type: "error", - }, - { - inputs: [], - name: "SortitionModuleOnly", - type: "error", - }, - { - inputs: [], - name: "StakingInTooManyCourts", - type: "error", - }, - { - inputs: [], - name: "StakingLessThanCourtMinStake", - type: "error", - }, - { - inputs: [], - name: "StakingNotPossibeInThisCourt", - type: "error", - }, - { - inputs: [], - name: "StakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "TokenNotAccepted", - type: "error", - }, - { - inputs: [], - name: "TransferFailed", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - inputs: [], - name: "UnstakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "UnsuccessfulCall", - type: "error", - }, - { - inputs: [], - name: "UnsupportedDisputeKit", - type: "error", - }, - { - inputs: [], - name: "VotePeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "WrongDisputeKitIndex", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - { - indexed: true, - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "AcceptedFeeToken", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealDecision", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealPossible", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "CourtCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_fromCourtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint96", - name: "_toCourtID", - type: "uint96", - }, - ], - name: "CourtJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtModified", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "DisputeKitCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "DisputeKitEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_fromDisputeKitID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_toDisputeKitID", - type: "uint256", - }, - ], - name: "DisputeKitJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "Draw", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_pnkAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "LeftoverRewardSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - indexed: false, - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - indexed: false, - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "NewCurrencyRate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "enum KlerosCoreUniversity.Period", - name: "_period", - type: "uint8", - }, - ], - name: "NewPeriod", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_degreeOfCoherency", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "_pnkAmount", - type: "int256", - }, - { - indexed: false, - internalType: "int256", - name: "_feeAmount", - type: "int256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "TokenAndETHShift", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealPeriod", - outputs: [ - { - internalType: "uint256", - name: "start", - type: "uint256", - }, - { - internalType: "uint256", - name: "end", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_instructor", - type: "address", - }, - ], - name: "changeInstructor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract ISortitionModuleUniversity", - name: "_sortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_toToken", - type: "address", - }, - { - internalType: "uint256", - name: "_amountInEth", - type: "uint256", - }, - ], - name: "convertEthToTokenAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "courts", - outputs: [ - { - internalType: "uint96", - name: "parent", - type: "uint96", - }, - { - internalType: "bool", - name: "hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "bool", - name: "disabled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "currencyRates", - outputs: [ - { - internalType: "bool", - name: "feePaymentAccepted", - type: "bool", - }, - { - internalType: "uint64", - name: "rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "rateDecimals", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputeKits", - outputs: [ - { - internalType: "contract IDisputeKit", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "contract IArbitrableV2", - name: "arbitrated", - type: "address", - }, - { - internalType: "enum KlerosCoreUniversity.Period", - name: "period", - type: "uint8", - }, - { - internalType: "bool", - name: "ruled", - type: "bool", - }, - { - internalType: "uint256", - name: "lastPeriodChange", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "draw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256[]", - name: "_disputeKitIDs", - type: "uint256[]", - }, - { - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDisputeKitsLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "disputeKitID", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkAtStakePerJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalFeesForJurors", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "repartitions", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkPenalties", - type: "uint256", - }, - { - internalType: "address[]", - name: "drawnJurors", - type: "address[]", - }, - { - internalType: "uint256", - name: "sumFeeRewardPaid", - type: "uint256", - }, - { - internalType: "uint256", - name: "sumPnkRewardPaid", - type: "uint256", - }, - { - internalType: "contract IERC20", - name: "feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "drawIterations", - type: "uint256", - }, - ], - internalType: "struct KlerosCoreUniversity.Round", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getTimesPerPeriod", - outputs: [ - { - internalType: "uint256[4]", - name: "timesPerPeriod", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "address", - name: "_instructor", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - { - internalType: "contract IDisputeKit", - name: "_disputeKit", - type: "address", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256[4]", - name: "_courtParameters", - type: "uint256[4]", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "contract ISortitionModuleUniversity", - name: "_sortitionModuleAddress", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "instructor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "isDisputeKitJumping", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - ], - name: "isSupported", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "jurorProsecutionModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "pinakion", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - { - internalType: "bool", - name: "_alreadyTransferred", - type: "bool", - }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "sortitionModule", - outputs: [ - { - internalType: "contract ISortitionModuleUniversity", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - ], - }, - KlerosCoreUniversity_Proxy: { - address: "0x5AB37F38778Bc175852fA353056591D91c744ce6", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - KlerosCore_Implementation: { - address: "0xaBf1AA1D08F98ED800938B1B086d0904c5BF4f0E", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "AppealFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "AppealPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "ArbitrationFeesNotEnough", - type: "error", - }, - { - inputs: [], - name: "CannotDisableClassicDK", - type: "error", - }, - { - inputs: [], - name: "CommitPeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "DisputeKitNotSupportedByCourt", - type: "error", - }, - { - inputs: [], - name: "DisputeKitOnly", - type: "error", - }, - { - inputs: [], - name: "DisputeNotAppealable", - type: "error", - }, - { - inputs: [], - name: "DisputePeriodIsFinal", - type: "error", - }, - { - inputs: [], - name: "DisputeStillDrawing", - type: "error", - }, - { - inputs: [], - name: "EvidenceNotPassedAndNotAppeal", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [], - name: "GovernorOnly", - type: "error", - }, - { - inputs: [], - name: "GuardianOrGovernorOnly", - type: "error", - }, - { - inputs: [], - name: "InvalidDisputKitParent", - type: "error", - }, - { - inputs: [], - name: "InvalidForkingCourtAsParent", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "MinStakeLowerThanParentCourt", - type: "error", - }, - { - inputs: [], - name: "MustSupportDisputeKitClassic", - type: "error", - }, - { - inputs: [], - name: "NotEvidencePeriod", - type: "error", - }, - { - inputs: [], - name: "NotExecutionPeriod", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "RulingAlreadyExecuted", - type: "error", - }, - { - inputs: [], - name: "SortitionModuleOnly", - type: "error", - }, - { - inputs: [], - name: "StakingInTooManyCourts", - type: "error", - }, - { - inputs: [], - name: "StakingLessThanCourtMinStake", - type: "error", - }, - { - inputs: [], - name: "StakingNotPossibleInThisCourt", - type: "error", - }, - { - inputs: [], - name: "StakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "StakingZeroWhenNoStake", - type: "error", - }, - { - inputs: [], - name: "TokenNotAccepted", - type: "error", - }, - { - inputs: [], - name: "TransferFailed", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - inputs: [], - name: "UnstakingTransferFailed", - type: "error", - }, - { - inputs: [], - name: "UnsuccessfulCall", - type: "error", - }, - { - inputs: [], - name: "UnsupportedDisputeKit", - type: "error", - }, - { - inputs: [], - name: "VotePeriodNotPassed", - type: "error", - }, - { - inputs: [], - name: "WhenNotPausedOnly", - type: "error", - }, - { - inputs: [], - name: "WhenPausedOnly", - type: "error", - }, - { - inputs: [], - name: "WrongDisputeKitIndex", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - { - indexed: true, - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "AcceptedFeeToken", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealDecision", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "AppealPossible", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "CourtCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint96", - name: "_fromCourtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint96", - name: "_toCourtID", - type: "uint96", - }, - ], - name: "CourtJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "CourtModified", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - ], - name: "DisputeCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "DisputeKitCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - { - indexed: true, - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "DisputeKitEnabled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_fromDisputeKitID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_toDisputeKitID", - type: "uint256", - }, - ], - name: "DisputeKitJump", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_voteID", - type: "uint256", - }, - ], - name: "Draw", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_pnkAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "LeftoverRewardSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - indexed: false, - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - indexed: false, - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "NewCurrencyRate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "enum KlerosCoreBase.Period", - name: "_period", - type: "uint8", - }, - ], - name: "NewPeriod", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Paused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IArbitrableV2", - name: "_arbitrable", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_ruling", - type: "uint256", - }, - ], - name: "Ruling", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - indexed: true, - internalType: "uint256", - name: "_roundID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_degreeOfCoherency", - type: "uint256", - }, - { - indexed: false, - internalType: "int256", - name: "_pnkAmount", - type: "int256", - }, - { - indexed: false, - internalType: "int256", - name: "_feeAmount", - type: "int256", - }, - { - indexed: false, - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "TokenAndETHShift", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Unpaused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "contract IDisputeKit", - name: "_disputeKitAddress", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "appealPeriod", - outputs: [ - { - internalType: "uint256", - name: "start", - type: "uint256", - }, - { - internalType: "uint256", - name: "end", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "arbitrationCost", - outputs: [ - { - internalType: "uint256", - name: "cost", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "bool", - name: "_accepted", - type: "bool", - }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint64", - name: "_rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "_rateDecimals", - type: "uint8", - }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_guardian", - type: "address", - }, - ], - name: "changeGuardian", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract ISortitionModule", - name: "_sortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "_toToken", - type: "address", - }, - { - internalType: "uint256", - name: "_amountInEth", - type: "uint256", - }, - ], - name: "convertEthToTokenAmount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "courts", - outputs: [ - { - internalType: "uint96", - name: "parent", - type: "uint96", - }, - { - internalType: "bool", - name: "hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "bool", - name: "disabled", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_parent", - type: "uint96", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256", - name: "_minStake", - type: "uint256", - }, - { - internalType: "uint256", - name: "_alpha", - type: "uint256", - }, - { - internalType: "uint256", - name: "_feeForJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "_jurorsForCourtJump", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "bytes", - name: "_sortitionExtraData", - type: "bytes", - }, - { - internalType: "uint256[]", - name: "_supportedDisputeKits", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_numberOfChoices", - type: "uint256", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - { - internalType: "contract IERC20", - name: "_feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "_feeAmount", - type: "uint256", - }, - ], - name: "createDispute", - outputs: [ - { - internalType: "uint256", - name: "disputeID", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "currencyRates", - outputs: [ - { - internalType: "bool", - name: "feePaymentAccepted", - type: "bool", - }, - { - internalType: "uint64", - name: "rateInEth", - type: "uint64", - }, - { - internalType: "uint8", - name: "rateDecimals", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "currentRuling", - outputs: [ - { - internalType: "uint256", - name: "ruling", - type: "uint256", - }, - { - internalType: "bool", - name: "tied", - type: "bool", - }, - { - internalType: "bool", - name: "overridden", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputeKits", - outputs: [ - { - internalType: "contract IDisputeKit", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "disputes", - outputs: [ - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "contract IArbitrableV2", - name: "arbitrated", - type: "address", - }, - { - internalType: "enum KlerosCoreBase.Period", - name: "period", - type: "uint8", - }, - { - internalType: "bool", - name: "ruled", - type: "bool", - }, - { - internalType: "uint256", - name: "lastPeriodChange", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "uint256", - name: "nbDrawnJurors", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256[]", - name: "_disputeKitIDs", - type: "uint256[]", - }, - { - internalType: "bool", - name: "_enable", - type: "bool", - }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_destination", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDisputeKitsLength", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfRounds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "getNumberOfVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getPnkAtStakePerJuror", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_round", - type: "uint256", - }, - ], - name: "getRoundInfo", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "disputeKitID", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkAtStakePerJuror", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalFeesForJurors", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "repartitions", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkPenalties", - type: "uint256", - }, - { - internalType: "address[]", - name: "drawnJurors", - type: "address[]", - }, - { - internalType: "uint256", - name: "sumFeeRewardPaid", - type: "uint256", - }, - { - internalType: "uint256", - name: "sumPnkRewardPaid", - type: "uint256", - }, - { - internalType: "contract IERC20", - name: "feeToken", - type: "address", - }, - { - internalType: "uint256", - name: "drawIterations", - type: "uint256", - }, - ], - internalType: "struct KlerosCoreBase.Round", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getTimesPerPeriod", - outputs: [ - { - internalType: "uint256[4]", - name: "timesPerPeriod", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "guardian", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "address", - name: "_guardian", - type: "address", - }, - { - internalType: "contract IERC20", - name: "_pinakion", - type: "address", - }, - { - internalType: "address", - name: "_jurorProsecutionModule", - type: "address", - }, - { - internalType: "contract IDisputeKit", - name: "_disputeKit", - type: "address", - }, - { - internalType: "bool", - name: "_hiddenVotes", - type: "bool", - }, - { - internalType: "uint256[4]", - name: "_courtParameters", - type: "uint256[4]", - }, - { - internalType: "uint256[4]", - name: "_timesPerPeriod", - type: "uint256[4]", - }, - { - internalType: "bytes", - name: "_sortitionExtraData", - type: "bytes", - }, - { - internalType: "contract ISortitionModule", - name: "_sortitionModuleAddress", - type: "address", - }, - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "isDisputeKitJumping", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_disputeKitID", - type: "uint256", - }, - ], - name: "isSupported", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "jurorProsecutionModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_disputeID", - type: "uint256", - }, - ], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - 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: "pinakion", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_wNative", - type: "address", - }, - ], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "sortitionModule", - outputs: [ - { - internalType: "contract ISortitionModule", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "transferBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "unpause", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "wNative", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - KlerosCore_Proxy: { - address: "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - KlerosV2NeoEarlyUser: { - address: "0x0d60Ff8bbCF49Bc5352328E7E28e141834d7750F", - abi: [ - { - inputs: [ - { - internalType: "string", - name: "_name", - type: "string", - }, - { - internalType: "string", - name: "_symbol", - type: "string", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - 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: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - 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: [ - { - internalType: "address", - name: "_newOwner", - type: "address", - }, - ], - name: "changeOwner", - outputs: [], - 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: "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: "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: [ - { - internalType: "address", - name: "to", - type: "address", - }, - ], - name: "safeMint", - 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: "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: "tokenId", - type: "uint256", - }, - ], - name: "tokenURI", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - 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", - }, - ], - }, - PNK: { - address: "0x34B944D42cAcfC8266955D07A80181D2054aa225", - abi: [ - { - 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: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - 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: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - 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: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - PNKFaucet: { - address: "0x7EFE468003Ad6A858b5350CDE0A67bBED58739dD", - abi: [ - { - inputs: [ - { - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "balance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "withdrewAlready", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - PinakionV2: { - address: "0x34B944D42cAcfC8266955D07A80181D2054aa225", - abi: [ - { - 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: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - 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: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - 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: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - PolicyRegistry: { - address: "0xd8681dBF525ecBda2F799BFddB96840065075e8A", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_courtName", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_policy", - type: "string", - }, - ], - name: "PolicyUpdate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "policies", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - internalType: "string", - name: "_courtName", - type: "string", - }, - { - internalType: "string", - name: "_policy", - type: "string", - }, - ], - name: "setPolicy", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - PolicyRegistry_Implementation: { - address: "0x472846F88D1356bb483a88f97B55026654Fc5deD", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "_courtName", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "_policy", - type: "string", - }, - ], - name: "PolicyUpdate", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "policies", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - internalType: "string", - name: "_courtName", - type: "string", - }, - { - internalType: "string", - name: "_policy", - type: "string", - }, - ], - name: "setPolicy", - 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: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - PolicyRegistry_Proxy: { - address: "0xd8681dBF525ecBda2F799BFddB96840065075e8A", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - RandomizerOracle: { - address: "0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b", - abi: [], - }, - SortitionModule: { - address: "0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "LeftoverPNK", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "LeftoverPNKWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "enum ISortitionModule.Phase", - name: "_phase", - type: "uint8", - }, - ], - name: "NewPhase", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "StakeDelayed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_unlock", - type: "bool", - }, - ], - name: "StakeLocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amountAllCourts", - type: "uint256", - }, - ], - name: "StakeSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_maxDrawingTime", - type: "uint256", - }, - ], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_minStakingTime", - type: "uint256", - }, - ], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract RNG", - name: "_rng", - type: "address", - }, - { - internalType: "uint256", - name: "_rngLookahead", - type: "uint256", - }, - ], - name: "changeRandomNumberGenerator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "delayedStakeReadIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delayedStakeWriteIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "delayedStakes", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "bool", - name: "alreadyTransferred", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "disputesWithoutJurors", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "executeDelayedStakes", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getJurorBalance", - outputs: [ - { - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalLocked", - type: "uint256", - }, - { - internalType: "uint256", - name: "stakedInCourt", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbCourts", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorCourtIDs", - outputs: [ - { - internalType: "uint96[]", - name: "", - type: "uint96[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorLeftoverPNK", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "uint256", - name: "_minStakingTime", - type: "uint256", - }, - { - internalType: "uint256", - name: "_maxDrawingTime", - type: "uint256", - }, - { - internalType: "contract RNG", - name: "_rng", - type: "address", - }, - { - internalType: "uint256", - name: "_rngLookahead", - type: "uint256", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize4", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "isJurorStaked", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "jurors", - outputs: [ - { - internalType: "uint256", - name: "stakedPnk", - type: "uint256", - }, - { - internalType: "uint256", - name: "lockedPnk", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastPhaseChange", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "jurorAccount", - type: "address", - }, - { - internalType: "uint96", - name: "courtId", - type: "uint96", - }, - ], - name: "latestDelayedStakeIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "maxDrawingTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "minStakingTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_randomNumber", - type: "uint256", - }, - ], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "passPhase", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "penalizeStake", - outputs: [ - { - internalType: "uint256", - name: "pnkBalance", - type: "uint256", - }, - { - internalType: "uint256", - name: "availablePenalty", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "phase", - outputs: [ - { - internalType: "enum ISortitionModule.Phase", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomNumber", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomNumberRequestBlock", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rng", - outputs: [ - { - internalType: "contract RNG", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rngLookahead", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "_pnkWithdrawal", - type: "uint256", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_ID", - type: "bytes32", - }, - ], - name: "stakeOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "stakeOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "unlockStake", - 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: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "validateStake", - outputs: [ - { - internalType: "uint256", - name: "pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkWithdrawal", - type: "uint256", - }, - { - internalType: "enum StakingResult", - name: "stakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "withdrawLeftoverPNK", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - SortitionModuleUniversity: { - address: "0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79", - abi: [ - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "enum ISortitionModule.Phase", - name: "_phase", - type: "uint8", - }, - ], - name: "NewPhase", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_unlock", - type: "bool", - }, - ], - name: "StakeLocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "StakeSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCoreUniversity", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "disputesWithoutJurors", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getJurorBalance", - outputs: [ - { - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalLocked", - type: "uint256", - }, - { - internalType: "uint256", - name: "stakedInCourt", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbCourts", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorCourtIDs", - outputs: [ - { - internalType: "uint96[]", - name: "", - type: "uint96[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCoreUniversity", - name: "_core", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "isJurorStaked", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "jurors", - outputs: [ - { - internalType: "uint256", - name: "stakedPnk", - type: "uint256", - }, - { - internalType: "uint256", - name: "lockedPnk", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_randomNumber", - type: "uint256", - }, - ], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "penalizeStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - { - internalType: "bool", - name: "_alreadyTransferred", - type: "bool", - }, - ], - name: "setStake", - outputs: [ - { - internalType: "uint256", - name: "pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkWithdrawal", - type: "uint256", - }, - { - internalType: "enum StakingResult", - name: "stakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "setTransientJuror", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "unlockStake", - 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: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - ], - }, - SortitionModuleUniversity_Implementation: { - address: "0x5CAD621D69E0535422aCFaCC0017bC32beC7A486", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "enum ISortitionModule.Phase", - name: "_phase", - type: "uint8", - }, - ], - name: "NewPhase", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_unlock", - type: "bool", - }, - ], - name: "StakeLocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "StakeSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCoreUniversity", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "disputesWithoutJurors", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getJurorBalance", - outputs: [ - { - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalLocked", - type: "uint256", - }, - { - internalType: "uint256", - name: "stakedInCourt", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbCourts", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorCourtIDs", - outputs: [ - { - internalType: "uint96[]", - name: "", - type: "uint96[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCoreUniversity", - name: "_core", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "isJurorStaked", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "jurors", - outputs: [ - { - internalType: "uint256", - name: "stakedPnk", - type: "uint256", - }, - { - internalType: "uint256", - name: "lockedPnk", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_randomNumber", - type: "uint256", - }, - ], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "penalizeStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - { - internalType: "bool", - name: "_alreadyTransferred", - type: "bool", - }, - ], - name: "setStake", - outputs: [ - { - internalType: "uint256", - name: "pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkWithdrawal", - type: "uint256", - }, - { - internalType: "enum StakingResult", - name: "stakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "setTransientJuror", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "unlockStake", - 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", - }, - ], - }, - SortitionModuleUniversity_Proxy: { - address: "0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - SortitionModule_Implementation: { - address: "0x8a26445989c944C58503275ad87Ab4d7b17d4F1e", - abi: [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "FailedDelegateCall", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [], - name: "NotInitializing", - type: "error", - }, - { - inputs: [], - name: "UUPSUnauthorizedCallContext", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "slot", - type: "bytes32", - }, - ], - name: "UUPSUnsupportedProxiableUUID", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint64", - name: "version", - type: "uint64", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "LeftoverPNK", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "LeftoverPNKWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "enum ISortitionModule.Phase", - name: "_phase", - type: "uint8", - }, - ], - name: "NewPhase", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: true, - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "StakeDelayed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "_unlock", - type: "bool", - }, - ], - name: "StakeLocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_address", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "_courtID", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "_amountAllCourts", - type: "uint256", - }, - ], - name: "StakeSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_maxDrawingTime", - type: "uint256", - }, - ], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_minStakingTime", - type: "uint256", - }, - ], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract RNG", - name: "_rng", - type: "address", - }, - { - internalType: "uint256", - name: "_rngLookahead", - type: "uint256", - }, - ], - name: "changeRandomNumberGenerator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "core", - outputs: [ - { - internalType: "contract KlerosCore", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_extraData", - type: "bytes", - }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "delayedStakeReadIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "delayedStakeWriteIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "delayedStakes", - outputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint96", - name: "courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "bool", - name: "alreadyTransferred", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "disputesWithoutJurors", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "uint256", - name: "_coreDisputeID", - type: "uint256", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "draw", - outputs: [ - { - internalType: "address", - name: "drawnAddress", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_iterations", - type: "uint256", - }, - ], - name: "executeDelayedStakes", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "getJurorBalance", - outputs: [ - { - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalLocked", - type: "uint256", - }, - { - internalType: "uint256", - name: "stakedInCourt", - type: "uint256", - }, - { - internalType: "uint256", - name: "nbCourts", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorCourtIDs", - outputs: [ - { - internalType: "uint96[]", - name: "", - type: "uint96[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "getJurorLeftoverPNK", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - { - internalType: "contract KlerosCore", - name: "_core", - type: "address", - }, - { - internalType: "uint256", - name: "_minStakingTime", - type: "uint256", - }, - { - internalType: "uint256", - name: "_maxDrawingTime", - type: "uint256", - }, - { - internalType: "contract RNG", - name: "_rng", - type: "address", - }, - { - internalType: "uint256", - name: "_rngLookahead", - type: "uint256", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize4", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - ], - name: "isJurorStaked", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "jurors", - outputs: [ - { - internalType: "uint256", - name: "stakedPnk", - type: "uint256", - }, - { - internalType: "uint256", - name: "lockedPnk", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lastPhaseChange", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "jurorAccount", - type: "address", - }, - { - internalType: "uint96", - name: "courtId", - type: "uint96", - }, - ], - name: "latestDelayedStakeIndex", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "maxDrawingTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "minStakingTime", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_randomNumber", - type: "uint256", - }, - ], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "passPhase", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "penalizeStake", - outputs: [ - { - internalType: "uint256", - name: "pnkBalance", - type: "uint256", - }, - { - internalType: "uint256", - name: "availablePenalty", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "phase", - outputs: [ - { - internalType: "enum ISortitionModule.Phase", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomNumber", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "randomNumberRequestBlock", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rng", - outputs: [ - { - internalType: "contract RNG", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "rngLookahead", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "_pnkWithdrawal", - type: "uint256", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_key", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_ID", - type: "bytes32", - }, - ], - name: "stakeOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_juror", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - ], - name: "stakeOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - { - internalType: "uint256", - name: "_relativeAmount", - type: "uint256", - }, - ], - name: "unlockStake", - 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: "_account", - type: "address", - }, - { - internalType: "uint96", - name: "_courtID", - type: "uint96", - }, - { - internalType: "uint256", - name: "_newStake", - type: "uint256", - }, - ], - name: "validateStake", - outputs: [ - { - internalType: "uint256", - name: "pnkDeposit", - type: "uint256", - }, - { - internalType: "uint256", - name: "pnkWithdrawal", - type: "uint256", - }, - { - internalType: "enum StakingResult", - name: "stakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - name: "withdrawLeftoverPNK", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - SortitionModule_Proxy: { - address: "0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663", - abi: [ - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - stateMutability: "payable", - type: "receive", - }, - ], - }, - TransactionBatcher: { - address: "0x35f93986950804ac1F93519BF68C2a7Dd776db0E", - abi: [ - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "datas", - type: "bytes[]", - }, - ], - name: "batchSend", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "datas", - type: "bytes[]", - }, - ], - name: "batchSendUnchecked", - outputs: [], - stateMutability: "payable", - type: "function", - }, - ], - }, - WETH: { - address: "0x3829A2486d53ee984a0ca2D76552715726b77138", - abi: [ - { - inputs: [ - { - internalType: "string", - name: "_name", - type: "string", - }, - { - internalType: "string", - name: "_symbol", - type: "string", - }, - ], - 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: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - 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: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - 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: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - ], - }, - WETHFaucet: { - address: "0x6F8C10E0030aDf5B8030a5E282F026ADdB6525fd", - abi: [ - { - inputs: [ - { - internalType: "contract IERC20", - name: "_token", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "amount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "balance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_governor", - type: "address", - }, - ], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "governor", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "withdrewAlready", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - VeaInboxArbToEthDevnet: { - address: "0xF6C5640de593fEf76129F1F1A863F7ddc65776C9", - abi: [ - { - inputs: [ - { - internalType: "uint256", - name: "_epochPeriod", - type: "uint256", - }, - { - internalType: "address", - name: "_veaOutboxArbToEth", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "_nodeData", - type: "bytes", - }, - ], - name: "MessageSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "_snapshot", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - indexed: false, - internalType: "uint64", - name: "_count", - type: "uint64", - }, - ], - name: "SnapshotSaved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_epochSent", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes32", - name: "_ticketId", - type: "bytes32", - }, - ], - name: "SnapshotSent", - type: "event", - }, - { - inputs: [], - name: "count", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_timestamp", - type: "uint256", - }, - ], - name: "epochAt", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochFinalized", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochNow", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "saveSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_to", - type: "address", - }, - { - internalType: "bytes4", - name: "_fnSelector", - type: "bytes4", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "sendMessage", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - components: [ - { - internalType: "bytes32", - name: "stateRoot", - type: "bytes32", - }, - { - internalType: "address", - name: "claimer", - type: "address", - }, - { - internalType: "uint32", - name: "timestampClaimed", - type: "uint32", - }, - { - internalType: "uint32", - name: "timestampVerification", - type: "uint32", - }, - { - internalType: "uint32", - name: "blocknumberVerification", - type: "uint32", - }, - { - internalType: "enum Party", - name: "honest", - type: "uint8", - }, - { - internalType: "address", - name: "challenger", - type: "address", - }, - ], - internalType: "struct Claim", - name: "_claim", - type: "tuple", - }, - ], - name: "sendSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - name: "snapshots", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "veaOutboxArbToEth", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - VeaInboxArbToEthTestnet: { - address: "0xE12daFE59Bc3A996362d54b37DFd2BA9279cAd06", - abi: [ - { - inputs: [ - { - internalType: "uint256", - name: "_epochPeriod", - type: "uint256", - }, - { - internalType: "address", - name: "_veaOutboxArbToEth", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "_nodeData", - type: "bytes", - }, - ], - name: "MessageSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "_snapshot", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - indexed: false, - internalType: "uint64", - name: "_count", - type: "uint64", - }, - ], - name: "SnapshotSaved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_epochSent", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes32", - name: "_ticketId", - type: "bytes32", - }, - ], - name: "SnapshotSent", - type: "event", - }, - { - inputs: [], - name: "count", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_timestamp", - type: "uint256", - }, - ], - name: "epochAt", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochFinalized", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochNow", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "saveSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_to", - type: "address", - }, - { - internalType: "bytes4", - name: "_fnSelector", - type: "bytes4", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "sendMessage", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - components: [ - { - internalType: "bytes32", - name: "stateRoot", - type: "bytes32", - }, - { - internalType: "address", - name: "claimer", - type: "address", - }, - { - internalType: "uint32", - name: "timestampClaimed", - type: "uint32", - }, - { - internalType: "uint32", - name: "timestampVerification", - type: "uint32", - }, - { - internalType: "uint32", - name: "blocknumberVerification", - type: "uint32", - }, - { - internalType: "enum Party", - name: "honest", - type: "uint8", - }, - { - internalType: "address", - name: "challenger", - type: "address", - }, - ], - internalType: "struct Claim", - name: "_claim", - type: "tuple", - }, - ], - name: "sendSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - name: "snapshots", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "veaOutboxArbToEth", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - VeaInboxArbToGnosisDevnet: { - address: "0xF6286b9C6c7F1B33Ea976FA43434027c7b8421A7", - abi: [ - { - inputs: [ - { - internalType: "uint256", - name: "_epochPeriod", - type: "uint256", - }, - { - internalType: "address", - name: "_routerArbToGnosis", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "_nodeData", - type: "bytes", - }, - ], - name: "MessageSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "_snapshot", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - indexed: false, - internalType: "uint64", - name: "_count", - type: "uint64", - }, - ], - name: "SnapshotSaved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_epochSent", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes32", - name: "_ticketId", - type: "bytes32", - }, - ], - name: "SnapshotSent", - type: "event", - }, - { - inputs: [], - name: "count", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_timestamp", - type: "uint256", - }, - ], - name: "epochAt", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochFinalized", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochNow", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "routerArbToGnosis", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "saveSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_to", - type: "address", - }, - { - internalType: "bytes4", - name: "_fnSelector", - type: "bytes4", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "sendMessage", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - internalType: "uint256", - name: "_gasLimit", - type: "uint256", - }, - { - components: [ - { - internalType: "bytes32", - name: "stateRoot", - type: "bytes32", - }, - { - internalType: "address", - name: "claimer", - type: "address", - }, - { - internalType: "uint32", - name: "timestampClaimed", - type: "uint32", - }, - { - internalType: "uint32", - name: "timestampVerification", - type: "uint32", - }, - { - internalType: "uint32", - name: "blocknumberVerification", - type: "uint32", - }, - { - internalType: "enum Party", - name: "honest", - type: "uint8", - }, - { - internalType: "address", - name: "challenger", - type: "address", - }, - ], - internalType: "struct Claim", - name: "_claim", - type: "tuple", - }, - ], - name: "sendSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - name: "snapshots", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - VeaInboxArbToGnosisTestnet: { - address: "0x62403e9Fbac618301175C89fb21920e4FF235A6a", - abi: [ - { - inputs: [ - { - internalType: "uint256", - name: "_epochPeriod", - type: "uint256", - }, - { - internalType: "address", - name: "_routerArbToGnosis", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "_nodeData", - type: "bytes", - }, - ], - name: "MessageSent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "_snapshot", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - indexed: false, - internalType: "uint64", - name: "_count", - type: "uint64", - }, - ], - name: "SnapshotSaved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "_epochSent", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes32", - name: "_ticketId", - type: "bytes32", - }, - ], - name: "SnapshotSent", - type: "event", - }, - { - inputs: [], - name: "count", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_timestamp", - type: "uint256", - }, - ], - name: "epochAt", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochFinalized", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochNow", - outputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "epochPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "routerArbToGnosis", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "saveSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_to", - type: "address", - }, - { - internalType: "bytes4", - name: "_fnSelector", - type: "bytes4", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "sendMessage", - outputs: [ - { - internalType: "uint64", - name: "", - type: "uint64", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_epoch", - type: "uint256", - }, - { - internalType: "uint256", - name: "_gasLimit", - type: "uint256", - }, - { - components: [ - { - internalType: "bytes32", - name: "stateRoot", - type: "bytes32", - }, - { - internalType: "address", - name: "claimer", - type: "address", - }, - { - internalType: "uint32", - name: "timestampClaimed", - type: "uint32", - }, - { - internalType: "uint32", - name: "timestampVerification", - type: "uint32", - }, - { - internalType: "uint32", - name: "blocknumberVerification", - type: "uint32", - }, - { - internalType: "enum Party", - name: "honest", - type: "uint8", - }, - { - internalType: "address", - name: "challenger", - type: "address", - }, - ], - internalType: "struct Claim", - name: "_claim", - type: "tuple", - }, - ], - name: "sendSnapshot", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "epoch", - type: "uint256", - }, - ], - name: "snapshots", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - ], - }, - }, -} as const; diff --git a/contracts/deployments/arbitrumSepoliaDevnet/.chainId b/contracts/deployments/arbitrumSepoliaDevnet/.chainId deleted file mode 100644 index 357f9c751..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/.chainId +++ /dev/null @@ -1 +0,0 @@ -421614 diff --git a/contracts/deployments/arbitrumSepoliaDevnet/ArbitrableExample.json b/contracts/deployments/arbitrumSepoliaDevnet/ArbitrableExample.json deleted file mode 100644 index 34cf976be..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/ArbitrableExample.json +++ /dev/null @@ -1,618 +0,0 @@ -{ - "address": "0x3Eae72F076c68F5c354C73abC33EAA291ef1b2Fa", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - }, - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_weth", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "string", - "name": "_action", - "type": "string" - } - ], - "name": "Action", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateUri", - "type": "string" - } - ], - "name": "DisputeRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "arbitratorExtraData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - } - ], - "name": "changeArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - } - ], - "name": "changeArbitratorExtraData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "changeDisputeTemplate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "name": "changeTemplateRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_action", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_feeInWeth", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_action", - "type": "string" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "bool", - "name": "isRuled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numberOfRulingOptions", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "externalIDtoLocalID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templateId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "templateRegistry", - "outputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "weth", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x4e122e3a0f9a4ca635e2df3c2f948c4a7862505bb8a10e1580d0da26f6539ee7", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x3Eae72F076c68F5c354C73abC33EAA291ef1b2Fa", - "transactionIndex": 1, - "gasUsed": "1327522", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000008000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000080000000000000000000100000000000000000000000000000000000000000000000000040000000000000400000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000002000000400000000000100000000000000000000000000000000000000", - "blockHash": "0x17ec65a1f8f8bd6b8bd3364cc2e2c3d89b748c0c9a45fbe59c8b30903c67267b", - "transactionHash": "0x4e122e3a0f9a4ca635e2df3c2f948c4a7862505bb8a10e1580d0da26f6539ee7", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 88689951, - "transactionHash": "0x4e122e3a0f9a4ca635e2df3c2f948c4a7862505bb8a10e1580d0da26f6539ee7", - "address": "0x596D3B09E684D62217682216e9b7a0De75933391", - "topics": [ - "0x00f7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff9924", - "0x00000000000000000000000000000000000000000000000000000000000001ba", - "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6469737075746554656d706c6174654d617070696e673a20544f444f00000000", - "logIndex": 0, - "blockHash": "0x17ec65a1f8f8bd6b8bd3364cc2e2c3d89b748c0c9a45fbe59c8b30903c67267b" - } - ], - "blockNumber": 88689951, - "cumulativeGasUsed": "1327522", - "status": 1, - "byzantium": true - }, - "args": [ - "0xA54e7A16d7460e38a8F324eF46782FB520d58CE8", - { - "$schema": "../NewDisputeTemplate.schema.json", - "title": "Let's do this", - "description": "We want to do this: %s", - "question": "Does it comply with the policy?", - "answers": [ - { - "title": "Yes", - "description": "Select this if you agree that it must be done." - }, - { - "title": "No", - "description": "Select this if you do not agree that it must be done." - } - ], - "policyURI": "/ipfs/Qmdvk...rSD6cE/policy.pdf", - "frontendUrl": "https://kleros-v2.netlify.app/#/cases/%s/overview", - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", - "category": "Others", - "specification": "KIP001", - "lang": "en_US" - }, - "disputeTemplateMapping: TODO", - "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003", - "0x596D3B09E684D62217682216e9b7a0De75933391", - "0x3829A2486d53ee984a0ca2D76552715726b77138" - ], - "numDeployments": 2, - "solcInputHash": "e0f719371c25ee6b430d9b7926bcf1db", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_weth\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"_action\",\"type\":\"string\"}],\"name\":\"Action\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateUri\",\"type\":\"string\"}],\"name\":\"DisputeRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbitratorExtraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"}],\"name\":\"changeArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"}],\"name\":\"changeArbitratorExtraData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"changeDisputeTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_action\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_feeInWeth\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_action\",\"type\":\"string\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isRuled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRulingOptions\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"externalIDtoLocalID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DisputeRequest(address,uint256,uint256,uint256,string)\":{\"details\":\"To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\",\"params\":{\"_arbitrator\":\"The arbitrator of the contract.\",\"_arbitratorDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_externalDisputeID\":\"An identifier created outside Kleros by the protocol requesting arbitration.\",\"_templateId\":\"The identifier of the dispute template. Should not be used with _templateUri.\",\"_templateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrator\":\"The arbitrator giving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_arbitrator\":\"The arbitrator to rule on created disputes.\",\"_arbitratorExtraData\":\"The extra data for the arbitrator.\",\"_templateData\":\"The dispute template data.\",\"_templateDataMappings\":\"The dispute template data mappings.\",\"_templateRegistry\":\"The dispute template registry.\",\"_weth\":\"The WETH token.\"}},\"createDispute(string)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_action\":\"The action that requires arbitration.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the dispute created.\"}},\"createDispute(string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_action\":\"The action that requires arbitration.\",\"_feeInWeth\":\"Amount of fees in WETH for the arbitrator.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the dispute created.\"}},\"rule(uint256,uint256)\":{\"details\":\"To be called by the arbitrator of the dispute, to declare the winning ruling.\",\"params\":{\"_arbitratorDisputeID\":\"ID of the dispute in arbitrator contract.\",\"_ruling\":\"The ruling choice of the arbitration.\"}}},\"title\":\"ArbitrableExample An example of an arbitrable contract which connects to the arbitator that implements the updated interface.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/arbitrables/ArbitrableExample.sol\":\"ArbitrableExample\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\"},\"src/arbitration/arbitrables/ArbitrableExample.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitrableV2.sol\\\";\\nimport \\\"../interfaces/IDisputeTemplateRegistry.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\n/// @title ArbitrableExample\\n/// An example of an arbitrable contract which connects to the arbitator that implements the updated interface.\\ncontract ArbitrableExample is IArbitrableV2 {\\n using SafeERC20 for IERC20;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeStruct {\\n bool isRuled; // Whether the dispute has been ruled or not.\\n uint256 ruling; // Ruling given by the arbitrator.\\n uint256 numberOfRulingOptions; // The number of choices the arbitrator can give.\\n }\\n\\n event Action(string indexed _action);\\n\\n address public immutable governor;\\n IArbitratorV2 public arbitrator; // Arbitrator is set in constructor.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n uint256 public templateId; // The current dispute template identifier.\\n bytes public arbitratorExtraData; // Extra data to set up the arbitration.\\n IERC20 public immutable weth; // The WETH token.\\n mapping(uint256 => uint256) public externalIDtoLocalID; // Maps external (arbitrator side) dispute IDs to local dispute IDs.\\n DisputeStruct[] public disputes; // Stores the disputes' info. disputes[disputeID].\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(this) == msg.sender, \\\"Only the governor allowed.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator The arbitrator to rule on created disputes.\\n /// @param _templateData The dispute template data.\\n /// @param _templateDataMappings The dispute template data mappings.\\n /// @param _arbitratorExtraData The extra data for the arbitrator.\\n /// @param _templateRegistry The dispute template registry.\\n /// @param _weth The WETH token.\\n constructor(\\n IArbitratorV2 _arbitrator,\\n string memory _templateData,\\n string memory _templateDataMappings,\\n bytes memory _arbitratorExtraData,\\n IDisputeTemplateRegistry _templateRegistry,\\n IERC20 _weth\\n ) {\\n governor = msg.sender;\\n arbitrator = _arbitrator;\\n arbitratorExtraData = _arbitratorExtraData;\\n templateRegistry = _templateRegistry;\\n weth = _weth;\\n\\n templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _templateData, _templateDataMappings);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n function changeArbitrator(IArbitratorV2 _arbitrator) external onlyByGovernor {\\n arbitrator = _arbitrator;\\n }\\n\\n function changeArbitratorExtraData(bytes calldata _arbitratorExtraData) external onlyByGovernor {\\n arbitratorExtraData = _arbitratorExtraData;\\n }\\n\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external onlyByGovernor {\\n templateRegistry = _templateRegistry;\\n }\\n\\n function changeDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyByGovernor {\\n templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _templateData, _templateDataMappings);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _action The action that requires arbitration.\\n /// @return disputeID Dispute id (on arbitrator side) of the dispute created.\\n function createDispute(string calldata _action) external payable returns (uint256 disputeID) {\\n emit Action(_action);\\n\\n uint256 numberOfRulingOptions = 2;\\n uint256 localDisputeID = disputes.length;\\n disputes.push(DisputeStruct({isRuled: false, ruling: 0, numberOfRulingOptions: numberOfRulingOptions}));\\n\\n disputeID = arbitrator.createDispute{value: msg.value}(numberOfRulingOptions, arbitratorExtraData);\\n externalIDtoLocalID[disputeID] = localDisputeID;\\n\\n uint256 externalDisputeID = uint256(keccak256(abi.encodePacked(_action)));\\n emit DisputeRequest(arbitrator, disputeID, externalDisputeID, templateId, \\\"\\\");\\n }\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _action The action that requires arbitration.\\n /// @param _feeInWeth Amount of fees in WETH for the arbitrator.\\n /// @return disputeID Dispute id (on arbitrator side) of the dispute created.\\n function createDispute(string calldata _action, uint256 _feeInWeth) external returns (uint256 disputeID) {\\n emit Action(_action);\\n\\n uint256 numberOfRulingOptions = 2;\\n uint256 localDisputeID = disputes.length;\\n disputes.push(DisputeStruct({isRuled: false, ruling: 0, numberOfRulingOptions: numberOfRulingOptions}));\\n\\n require(weth.safeTransferFrom(msg.sender, address(this), _feeInWeth), \\\"Transfer failed\\\");\\n require(weth.increaseAllowance(address(arbitrator), _feeInWeth), \\\"Allowance increase failed\\\");\\n\\n disputeID = arbitrator.createDispute(numberOfRulingOptions, arbitratorExtraData, weth, _feeInWeth);\\n externalIDtoLocalID[disputeID] = localDisputeID;\\n\\n uint256 externalDisputeID = uint256(keccak256(abi.encodePacked(_action)));\\n emit DisputeRequest(arbitrator, disputeID, externalDisputeID, templateId, \\\"\\\");\\n }\\n\\n /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling.\\n /// @param _arbitratorDisputeID ID of the dispute in arbitrator contract.\\n /// @param _ruling The ruling choice of the arbitration.\\n function rule(uint256 _arbitratorDisputeID, uint256 _ruling) external override {\\n uint256 localDisputeID = externalIDtoLocalID[_arbitratorDisputeID];\\n DisputeStruct storage dispute = disputes[localDisputeID];\\n require(msg.sender == address(arbitrator), \\\"Only the arbitrator can execute this.\\\");\\n require(_ruling <= dispute.numberOfRulingOptions, \\\"Invalid ruling.\\\");\\n require(dispute.isRuled == false, \\\"This dispute has been ruled already.\\\");\\n\\n dispute.isRuled = true;\\n dispute.ruling = _ruling;\\n\\n emit Ruling(IArbitratorV2(msg.sender), _arbitratorDisputeID, dispute.ruling);\\n }\\n}\\n\",\"keccak256\":\"0x6f28cc8940c38afc38e3cf72ae4920d6a38c9fd6dfd93f56ba6f10325bf72991\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0xe841a4fe8ec109ce17dde4457bf1583c8b499109b05887c53a49a3207fc6e80b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xa4dc6b958197adead238de4246cd04e7389c3dc1b9f968acd10985f8fc5b74cf\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0xb46ff71c32a524a865fe8ca99d94c9daeb690bc9d7d49d963a45b06f60af19f3\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x3e39adb9cdd9f86b0defc8f6e1223533d86f82c804e186193f729c32c10161b1\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60c060405234801562000010575f80fd5b506040516200187c3803806200187c833981016040819052620000339162000201565b336080525f80546001600160a01b0319166001600160a01b03881617905560036200005f848262000363565b50600180546001600160a01b0319166001600160a01b0384811691821790925590821660a0526040516312a6505d60e21b8152634a99417490620000aa90889088906004016200045c565b6020604051808303815f875af1158015620000c7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000ed91906200049a565b60025550620004b2945050505050565b6001600160a01b038116811462000112575f80fd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015620001455781810151838201526020016200012b565b50505f910152565b5f6001600160401b038084111562000169576200016962000115565b604051601f8501601f19908116603f0116810190828211818310171562000194576200019462000115565b81604052809350858152868686011115620001ad575f80fd5b620001bd86602083018762000129565b5050509392505050565b5f82601f830112620001d7575f80fd5b620001e8838351602085016200014d565b9392505050565b8051620001fc81620000fd565b919050565b5f805f805f8060c0878903121562000217575f80fd5b86516200022481620000fd565b60208801519096506001600160401b038082111562000241575f80fd5b6200024f8a838b01620001c7565b9650604089015191508082111562000265575f80fd5b620002738a838b01620001c7565b9550606089015191508082111562000289575f80fd5b508701601f810189136200029b575f80fd5b620002ac898251602084016200014d565b935050620002bd60808801620001ef565b9150620002cd60a08801620001ef565b90509295509295509295565b600181811c90821680620002ee57607f821691505b6020821081036200030d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200035e57805f5260205f20601f840160051c810160208510156200033a5750805b601f840160051c820191505b818110156200035b575f815560010162000346565b50505b505050565b81516001600160401b038111156200037f576200037f62000115565b6200039781620003908454620002d9565b8462000313565b602080601f831160018114620003cd575f8415620003b55750858301515b5f19600386901b1c1916600185901b17855562000427565b5f85815260208120601f198616915b82811015620003fd57888601518255948401946001909101908401620003dc565b50858210156200041b57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f81518084526200044881602086016020860162000129565b601f01601f19169290920160200192915050565b606081525f6060820152608060208201525f6200047d60808301856200042f565b82810360408401526200049181856200042f565b95945050505050565b5f60208284031215620004ab575f80fd5b5051919050565b60805160a051611394620004e85f395f818161018c015281816106c80152818161074601526107e301525f60db01526113945ff3fe6080604052600436106100c6575f3560e01c80636546928711610078578063654692871461020957806368175996146102365780636cc6cde1146102495780637aa77f2914610267578063a0af81f01461027c578063c21ae0611461029b578063c5d55288146102c6578063fc548f08146102e5575f80fd5b80630c340a24146100ca5780630c7ac7b61461011a578063311a6c561461013b57806334e2672d1461015c5780633fc8cef31461017b5780634660ebbe146101ae578063564a565d146101cd575b5f80fd5b3480156100d5575f80fd5b506100fd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610125575f80fd5b5061012e610304565b6040516101119190610dff565b348015610146575f80fd5b5061015a610155366004610e18565b610390565b005b348015610167575f80fd5b5061015a610176366004610e7d565b610527565b348015610186575f80fd5b506100fd7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b9575f80fd5b5061015a6101c8366004610ed3565b610558565b3480156101d8575f80fd5b506101ec6101e7366004610eee565b610599565b604080519315158452602084019290925290820152606001610111565b348015610214575f80fd5b50610228610223366004610f05565b6105ce565b604051908152602001610111565b610228610244366004610e7d565b6108f7565b348015610254575f80fd5b505f546100fd906001600160a01b031681565b348015610272575f80fd5b5061022860025481565b348015610287575f80fd5b506001546100fd906001600160a01b031681565b3480156102a6575f80fd5b506102286102b5366004610eee565b60046020525f908152604090205481565b3480156102d1575f80fd5b5061015a6102e0366004610fea565b610b05565b3480156102f0575f80fd5b5061015a6102ff366004610ed3565b610b9d565b600380546103119061104a565b80601f016020809104026020016040519081016040528092919081815260200182805461033d9061104a565b80156103885780601f1061035f57610100808354040283529160200191610388565b820191905f5260205f20905b81548152906001019060200180831161036b57829003601f168201915b505050505081565b5f8281526004602052604081205460058054919291839081106103b5576103b5611082565b5f91825260208220915460039190910290910191506001600160a01b031633146104345760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806002015483111561047a5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b604482015260640161042b565b805460ff16156104d85760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b606482015260840161042b565b805460ff1916600190811782558101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b3033146105465760405162461bcd60e51b815260040161042b90611096565b6003610553828483611118565b505050565b3033146105775760405162461bcd60e51b815260040161042b90611096565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600581815481106105a8575f80fd5b5f91825260209091206003909102018054600182015460029092015460ff909116925083565b5f83836040516105df9291906111d2565b604051908190038120907f8b2c14fe955d044ef95ba32b88d2ceb87c6f73fcefdcebe906063a6d75690f27905f90a260058054604080516060810182525f8082526020820181815260029383018481526001860187559590915290517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db060038502908101805460ff19169215159290921790915590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015592517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2909301929092556106f87f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333087610bdd565b6107365760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161042b565b5f5461076f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911686610cb4565b6107b75760405162461bcd60e51b8152602060048201526019602482015278105b1b1bddd85b98d9481a5b98dc99585cd94819985a5b1959603a1b604482015260640161042b565b5f54604051633d941b6d60e21b81526001600160a01b039091169063f6506db49061080d9085906003907f0000000000000000000000000000000000000000000000000000000000000000908a9060040161125a565b6020604051808303815f875af1158015610829573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061084d919061128e565b5f8181526004602090815260408083208590555192955090916108749189918991016111d2565b60408051601f198184030181529082905280516020909101205f5460025491935086926001600160a01b03909116917f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186916108e59186825260208201526060604082018190525f9082015260800190565b60405180910390a35050509392505050565b5f82826040516109089291906111d2565b604051908190038120907f8b2c14fe955d044ef95ba32b88d2ceb87c6f73fcefdcebe906063a6d75690f27905f90a260058054604080516060810182525f80825260208201818152600283850181815260018701885596835292517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db06003808802918201805460ff19169315159390931790925591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db183015595517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db29091015554915163c13517e160e01b815290936001600160a01b039092169163c13517e1913491610a1b918791906004016112a5565b60206040518083038185885af1158015610a37573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610a5c919061128e565b5f818152600460209081526040808320859055519295509091610a839188918891016111d2565b60408051601f198184030181529082905280516020909101205f5460025491935086926001600160a01b03909116917f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e2718691610af49186825260208201526060604082018190525f9082015260800190565b60405180910390a350505092915050565b303314610b245760405162461bcd60e51b815260040161042b90611096565b6001546040516312a6505d60e21b81526001600160a01b0390911690634a99417490610b5690859085906004016112c5565b6020604051808303815f875af1158015610b72573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b96919061128e565b6002555050565b303314610bbc5760405162461bcd60e51b815260040161042b90611096565b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b0384811660248301528381166044830152606482018390525f91829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251610c4191906112ff565b5f604051808303815f865af19150503d805f8114610c7a576040519150601f19603f3d011682016040523d82523d5f602084013e610c7f565b606091505b5091509150818015610ca9575080511580610ca9575080806020019051810190610ca9919061131a565b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063095ea7b39085908590849063dd62ed3e90604401602060405180830381865afa158015610d0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d31919061128e565b610d3b9190611339565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610d83573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da7919061131a565b506001949350505050565b5f5b83811015610dcc578181015183820152602001610db4565b50505f910152565b5f8151808452610deb816020860160208601610db2565b601f01601f19169290920160200192915050565b602081525f610e116020830184610dd4565b9392505050565b5f8060408385031215610e29575f80fd5b50508035926020909101359150565b5f8083601f840112610e48575f80fd5b50813567ffffffffffffffff811115610e5f575f80fd5b602083019150836020828501011115610e76575f80fd5b9250929050565b5f8060208385031215610e8e575f80fd5b823567ffffffffffffffff811115610ea4575f80fd5b610eb085828601610e38565b90969095509350505050565b6001600160a01b0381168114610ed0575f80fd5b50565b5f60208284031215610ee3575f80fd5b8135610e1181610ebc565b5f60208284031215610efe575f80fd5b5035919050565b5f805f60408486031215610f17575f80fd5b833567ffffffffffffffff811115610f2d575f80fd5b610f3986828701610e38565b909790965060209590950135949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610f70575f80fd5b813567ffffffffffffffff80821115610f8b57610f8b610f4d565b604051601f8301601f19908116603f01168101908282118183101715610fb357610fb3610f4d565b81604052838152866020858801011115610fcb575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215610ffb575f80fd5b823567ffffffffffffffff80821115611012575f80fd5b61101e86838701610f61565b93506020850135915080821115611033575f80fd5b5061104085828601610f61565b9150509250929050565b600181811c9082168061105e57607f821691505b60208210810361107c57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b6020808252601a908201527f4f6e6c792074686520676f7665726e6f7220616c6c6f7765642e000000000000604082015260600190565b601f82111561055357805f5260205f20601f840160051c810160208510156110f25750805b601f840160051c820191505b81811015611111575f81556001016110fe565b5050505050565b67ffffffffffffffff83111561113057611130610f4d565b6111448361113e835461104a565b836110cd565b5f601f841160018114611175575f851561115e5750838201355b5f19600387901b1c1916600186901b178355611111565b5f83815260208120601f198716915b828110156111a45786850135825560209485019460019092019101611184565b50868210156111c0575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b818382375f9101908152919050565b5f81546111ed8161104a565b80855260206001838116801561120a57600181146112245761124f565b60ff1985168884015283151560051b88018301955061124f565b865f52825f205f5b858110156112475781548a820186015290830190840161122c565b890184019650505b505050505092915050565b848152608060208201525f61127260808301866111e1565b6001600160a01b03949094166040830152506060015292915050565b5f6020828403121561129e575f80fd5b5051919050565b828152604060208201525f6112bd60408301846111e1565b949350505050565b606081525f6060820152608060208201525f6112e46080830185610dd4565b82810360408401526112f68185610dd4565b95945050505050565b5f8251611310818460208701610db2565b9190910192915050565b5f6020828403121561132a575f80fd5b81518015158114610e11575f80fd5b8082018082111561135857634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220f222b78e5c3ee0ac0a6e915f5623ac3b2bb5a32af4e429d10fddb066ab8aff3c64736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100c6575f3560e01c80636546928711610078578063654692871461020957806368175996146102365780636cc6cde1146102495780637aa77f2914610267578063a0af81f01461027c578063c21ae0611461029b578063c5d55288146102c6578063fc548f08146102e5575f80fd5b80630c340a24146100ca5780630c7ac7b61461011a578063311a6c561461013b57806334e2672d1461015c5780633fc8cef31461017b5780634660ebbe146101ae578063564a565d146101cd575b5f80fd5b3480156100d5575f80fd5b506100fd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610125575f80fd5b5061012e610304565b6040516101119190610dff565b348015610146575f80fd5b5061015a610155366004610e18565b610390565b005b348015610167575f80fd5b5061015a610176366004610e7d565b610527565b348015610186575f80fd5b506100fd7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b9575f80fd5b5061015a6101c8366004610ed3565b610558565b3480156101d8575f80fd5b506101ec6101e7366004610eee565b610599565b604080519315158452602084019290925290820152606001610111565b348015610214575f80fd5b50610228610223366004610f05565b6105ce565b604051908152602001610111565b610228610244366004610e7d565b6108f7565b348015610254575f80fd5b505f546100fd906001600160a01b031681565b348015610272575f80fd5b5061022860025481565b348015610287575f80fd5b506001546100fd906001600160a01b031681565b3480156102a6575f80fd5b506102286102b5366004610eee565b60046020525f908152604090205481565b3480156102d1575f80fd5b5061015a6102e0366004610fea565b610b05565b3480156102f0575f80fd5b5061015a6102ff366004610ed3565b610b9d565b600380546103119061104a565b80601f016020809104026020016040519081016040528092919081815260200182805461033d9061104a565b80156103885780601f1061035f57610100808354040283529160200191610388565b820191905f5260205f20905b81548152906001019060200180831161036b57829003601f168201915b505050505081565b5f8281526004602052604081205460058054919291839081106103b5576103b5611082565b5f91825260208220915460039190910290910191506001600160a01b031633146104345760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806002015483111561047a5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b604482015260640161042b565b805460ff16156104d85760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b606482015260840161042b565b805460ff1916600190811782558101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b3033146105465760405162461bcd60e51b815260040161042b90611096565b6003610553828483611118565b505050565b3033146105775760405162461bcd60e51b815260040161042b90611096565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600581815481106105a8575f80fd5b5f91825260209091206003909102018054600182015460029092015460ff909116925083565b5f83836040516105df9291906111d2565b604051908190038120907f8b2c14fe955d044ef95ba32b88d2ceb87c6f73fcefdcebe906063a6d75690f27905f90a260058054604080516060810182525f8082526020820181815260029383018481526001860187559590915290517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db060038502908101805460ff19169215159290921790915590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015592517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2909301929092556106f87f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333087610bdd565b6107365760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161042b565b5f5461076f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911686610cb4565b6107b75760405162461bcd60e51b8152602060048201526019602482015278105b1b1bddd85b98d9481a5b98dc99585cd94819985a5b1959603a1b604482015260640161042b565b5f54604051633d941b6d60e21b81526001600160a01b039091169063f6506db49061080d9085906003907f0000000000000000000000000000000000000000000000000000000000000000908a9060040161125a565b6020604051808303815f875af1158015610829573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061084d919061128e565b5f8181526004602090815260408083208590555192955090916108749189918991016111d2565b60408051601f198184030181529082905280516020909101205f5460025491935086926001600160a01b03909116917f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186916108e59186825260208201526060604082018190525f9082015260800190565b60405180910390a35050509392505050565b5f82826040516109089291906111d2565b604051908190038120907f8b2c14fe955d044ef95ba32b88d2ceb87c6f73fcefdcebe906063a6d75690f27905f90a260058054604080516060810182525f80825260208201818152600283850181815260018701885596835292517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db06003808802918201805460ff19169315159390931790925591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db183015595517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db29091015554915163c13517e160e01b815290936001600160a01b039092169163c13517e1913491610a1b918791906004016112a5565b60206040518083038185885af1158015610a37573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610a5c919061128e565b5f818152600460209081526040808320859055519295509091610a839188918891016111d2565b60408051601f198184030181529082905280516020909101205f5460025491935086926001600160a01b03909116917f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e2718691610af49186825260208201526060604082018190525f9082015260800190565b60405180910390a350505092915050565b303314610b245760405162461bcd60e51b815260040161042b90611096565b6001546040516312a6505d60e21b81526001600160a01b0390911690634a99417490610b5690859085906004016112c5565b6020604051808303815f875af1158015610b72573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b96919061128e565b6002555050565b303314610bbc5760405162461bcd60e51b815260040161042b90611096565b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b0384811660248301528381166044830152606482018390525f91829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251610c4191906112ff565b5f604051808303815f865af19150503d805f8114610c7a576040519150601f19603f3d011682016040523d82523d5f602084013e610c7f565b606091505b5091509150818015610ca9575080511580610ca9575080806020019051810190610ca9919061131a565b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063095ea7b39085908590849063dd62ed3e90604401602060405180830381865afa158015610d0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d31919061128e565b610d3b9190611339565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610d83573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da7919061131a565b506001949350505050565b5f5b83811015610dcc578181015183820152602001610db4565b50505f910152565b5f8151808452610deb816020860160208601610db2565b601f01601f19169290920160200192915050565b602081525f610e116020830184610dd4565b9392505050565b5f8060408385031215610e29575f80fd5b50508035926020909101359150565b5f8083601f840112610e48575f80fd5b50813567ffffffffffffffff811115610e5f575f80fd5b602083019150836020828501011115610e76575f80fd5b9250929050565b5f8060208385031215610e8e575f80fd5b823567ffffffffffffffff811115610ea4575f80fd5b610eb085828601610e38565b90969095509350505050565b6001600160a01b0381168114610ed0575f80fd5b50565b5f60208284031215610ee3575f80fd5b8135610e1181610ebc565b5f60208284031215610efe575f80fd5b5035919050565b5f805f60408486031215610f17575f80fd5b833567ffffffffffffffff811115610f2d575f80fd5b610f3986828701610e38565b909790965060209590950135949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610f70575f80fd5b813567ffffffffffffffff80821115610f8b57610f8b610f4d565b604051601f8301601f19908116603f01168101908282118183101715610fb357610fb3610f4d565b81604052838152866020858801011115610fcb575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215610ffb575f80fd5b823567ffffffffffffffff80821115611012575f80fd5b61101e86838701610f61565b93506020850135915080821115611033575f80fd5b5061104085828601610f61565b9150509250929050565b600181811c9082168061105e57607f821691505b60208210810361107c57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b6020808252601a908201527f4f6e6c792074686520676f7665726e6f7220616c6c6f7765642e000000000000604082015260600190565b601f82111561055357805f5260205f20601f840160051c810160208510156110f25750805b601f840160051c820191505b81811015611111575f81556001016110fe565b5050505050565b67ffffffffffffffff83111561113057611130610f4d565b6111448361113e835461104a565b836110cd565b5f601f841160018114611175575f851561115e5750838201355b5f19600387901b1c1916600186901b178355611111565b5f83815260208120601f198716915b828110156111a45786850135825560209485019460019092019101611184565b50868210156111c0575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b818382375f9101908152919050565b5f81546111ed8161104a565b80855260206001838116801561120a57600181146112245761124f565b60ff1985168884015283151560051b88018301955061124f565b865f52825f205f5b858110156112475781548a820186015290830190840161122c565b890184019650505b505050505092915050565b848152608060208201525f61127260808301866111e1565b6001600160a01b03949094166040830152506060015292915050565b5f6020828403121561129e575f80fd5b5051919050565b828152604060208201525f6112bd60408301846111e1565b949350505050565b606081525f6060820152608060208201525f6112e46080830185610dd4565b82810360408401526112f68185610dd4565b95945050505050565b5f8251611310818460208701610db2565b9190910192915050565b5f6020828403121561132a575f80fd5b81518015158114610e11575f80fd5b8082018082111561135857634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220f222b78e5c3ee0ac0a6e915f5623ac3b2bb5a32af4e429d10fddb066ab8aff3c64736f6c63430008180033", - "devdoc": { - "events": { - "DisputeRequest(address,uint256,uint256,uint256,string)": { - "details": "To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.", - "params": { - "_arbitrator": "The arbitrator of the contract.", - "_arbitratorDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_externalDisputeID": "An identifier created outside Kleros by the protocol requesting arbitration.", - "_templateId": "The identifier of the dispute template. Should not be used with _templateUri.", - "_templateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrator": "The arbitrator giving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - } - }, - "kind": "dev", - "methods": { - "constructor": { - "details": "Constructor", - "params": { - "_arbitrator": "The arbitrator to rule on created disputes.", - "_arbitratorExtraData": "The extra data for the arbitrator.", - "_templateData": "The dispute template data.", - "_templateDataMappings": "The dispute template data mappings.", - "_templateRegistry": "The dispute template registry.", - "_weth": "The WETH token." - } - }, - "createDispute(string)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_action": "The action that requires arbitration." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the dispute created." - } - }, - "createDispute(string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_action": "The action that requires arbitration.", - "_feeInWeth": "Amount of fees in WETH for the arbitrator." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the dispute created." - } - }, - "rule(uint256,uint256)": { - "details": "To be called by the arbitrator of the dispute, to declare the winning ruling.", - "params": { - "_arbitratorDisputeID": "ID of the dispute in arbitrator contract.", - "_ruling": "The ruling choice of the arbitration." - } - } - }, - "title": "ArbitrableExample An example of an arbitrable contract which connects to the arbitator that implements the updated interface.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 12148, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "arbitrator", - "offset": 0, - "slot": "0", - "type": "t_contract(IArbitratorV2)20599" - }, - { - "astId": 12151, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "templateRegistry", - "offset": 0, - "slot": "1", - "type": "t_contract(IDisputeTemplateRegistry)20770" - }, - { - "astId": 12153, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "templateId", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 12155, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "arbitratorExtraData", - "offset": 0, - "slot": "3", - "type": "t_bytes_storage" - }, - { - "astId": 12162, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "externalIDtoLocalID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 12166, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "disputes", - "offset": 0, - "slot": "5", - "type": "t_array(t_struct(DisputeStruct)12139_storage)dyn_storage" - } - ], - "types": { - "t_array(t_struct(DisputeStruct)12139_storage)dyn_storage": { - "base": "t_struct(DisputeStruct)12139_storage", - "encoding": "dynamic_array", - "label": "struct ArbitrableExample.DisputeStruct[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IArbitratorV2)20599": { - "encoding": "inplace", - "label": "contract IArbitratorV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeTemplateRegistry)20770": { - "encoding": "inplace", - "label": "contract IDisputeTemplateRegistry", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeStruct)12139_storage": { - "encoding": "inplace", - "label": "struct ArbitrableExample.DisputeStruct", - "members": [ - { - "astId": 12134, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "isRuled", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 12136, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "ruling", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 12138, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "numberOfRulingOptions", - "offset": 0, - "slot": "2", - "type": "t_uint256" - } - ], - "numberOfBytes": "96" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/BlockHashRNG.json b/contracts/deployments/arbitrumSepoliaDevnet/BlockHashRNG.json deleted file mode 100644 index 293998a78..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/BlockHashRNG.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "address": "0x56d6d65Fe202232714794B5D5e4ed9894466Ee01", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "randomNumbers", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "receiveRandomness", - "outputs": [ - { - "internalType": "uint256", - "name": "randomNumber", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "requestRandomness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x32c51b1394c621cbf7c57329ff44c105baa1e9fcad4c83a64aa4555755a73a1b", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x56d6d65Fe202232714794B5D5e4ed9894466Ee01", - "transactionIndex": 1, - "gasUsed": "131155", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa93f6b0360c4d5aec6c9375356a101a1dab80c14b1f5bd97d5ff0fc4a949125a", - "transactionHash": "0x32c51b1394c621cbf7c57329ff44c105baa1e9fcad4c83a64aa4555755a73a1b", - "logs": [], - "blockNumber": 3141082, - "cumulativeGasUsed": "131155", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "4ee8a1f2013c130bec1668c5304bc76a", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"randomNumbers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"receiveRandomness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"requestRandomness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Cl\\u00e9ment Lesaege - \",\"details\":\"Random Number Generator returning the blockhash with a fallback behaviour. In case no one called it within the 256 blocks, it returns the previous blockhash. This contract must be used when returning 0 is a worse failure mode than returning another blockhash. Allows saving the random number for use in the future. It allows the contract to still access the blockhash even after 256 blocks.\",\"kind\":\"dev\",\"methods\":{\"receiveRandomness(uint256)\":{\"details\":\"Return the random number. If it has not been saved and is still computable compute it.\",\"params\":{\"_block\":\"Block the random number is linked to.\"},\"returns\":{\"randomNumber\":\"The random number or 0 if it is not ready or has not been requested.\"}},\"requestRandomness(uint256)\":{\"details\":\"Request a random number.\",\"params\":{\"_block\":\"Block the random number is linked to.\"}}},\"title\":\"Random Number Generator using blockhash with fallback.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rng/BlockhashRNG.sol\":\"BlockHashRNG\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/rng/BlockhashRNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./RNG.sol\\\";\\n\\n/// @title Random Number Generator using blockhash with fallback.\\n/// @author Cl\\u00e9ment Lesaege - \\n/// @dev\\n/// Random Number Generator returning the blockhash with a fallback behaviour.\\n/// In case no one called it within the 256 blocks, it returns the previous blockhash.\\n/// This contract must be used when returning 0 is a worse failure mode than returning another blockhash.\\n/// Allows saving the random number for use in the future. It allows the contract to still access the blockhash even after 256 blocks.\\ncontract BlockHashRNG is RNG {\\n mapping(uint256 => uint256) public randomNumbers; // randomNumbers[block] is the random number for this block, 0 otherwise.\\n\\n /// @dev Request a random number.\\n /// @param _block Block the random number is linked to.\\n function requestRandomness(uint256 _block) external override {\\n // nop\\n }\\n\\n /// @dev Return the random number. If it has not been saved and is still computable compute it.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber The random number or 0 if it is not ready or has not been requested.\\n function receiveRandomness(uint256 _block) external override returns (uint256 randomNumber) {\\n randomNumber = randomNumbers[_block];\\n if (randomNumber != 0) {\\n return randomNumber;\\n }\\n\\n if (_block < block.number) {\\n // The random number is not already set and can be.\\n if (blockhash(_block) != 0x0) {\\n // Normal case.\\n randomNumber = uint256(blockhash(_block));\\n } else {\\n // The contract was not called in time. Fallback to returning previous blockhash.\\n randomNumber = uint256(blockhash(block.number - 1));\\n }\\n }\\n randomNumbers[_block] = randomNumber;\\n }\\n}\\n\",\"keccak256\":\"0xbec8950b4a908f498273fb7c678f66ffbe08433009d5161545de9a3369eae1ea\",\"license\":\"MIT\"},\"src/rng/RNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\ninterface RNG {\\n /// @dev Request a random number.\\n /// @param _block Block linked to the request.\\n function requestRandomness(uint256 _block) external;\\n\\n /// @dev Receive the random number.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber Random Number. If the number is not ready or has not been required 0 instead.\\n function receiveRandomness(uint256 _block) external returns (uint256 randomNumber);\\n}\\n\",\"keccak256\":\"0x5afe7121f49aebe72218df356bd91b66c2171b9ad15e7945a15a091784291a43\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50610169806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806313cf9054146100465780635257cd901461006b5780637363ae1f1461008b575b600080fd5b6100596100543660046100f3565b61009e565b60405190815260200160405180910390f35b6100596100793660046100f3565b60006020819052908152604090205481565b61009c6100993660046100f3565b50565b005b60008181526020819052604090205480156100b857919050565b438210156100de578140156100cf575080406100de565b6100da60014361010c565b4090505b60009182526020829052604090912081905590565b60006020828403121561010557600080fd5b5035919050565b8181038181111561012d57634e487b7160e01b600052601160045260246000fd5b9291505056fea2646970667358221220d8343029f3281984aa61880b071de45f3d714f660c2a6c1973b488429c50c84e64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806313cf9054146100465780635257cd901461006b5780637363ae1f1461008b575b600080fd5b6100596100543660046100f3565b61009e565b60405190815260200160405180910390f35b6100596100793660046100f3565b60006020819052908152604090205481565b61009c6100993660046100f3565b50565b005b60008181526020819052604090205480156100b857919050565b438210156100de578140156100cf575080406100de565b6100da60014361010c565b4090505b60009182526020829052604090912081905590565b60006020828403121561010557600080fd5b5035919050565b8181038181111561012d57634e487b7160e01b600052601160045260246000fd5b9291505056fea2646970667358221220d8343029f3281984aa61880b071de45f3d714f660c2a6c1973b488429c50c84e64736f6c63430008120033", - "devdoc": { - "author": "Clément Lesaege - ", - "details": "Random Number Generator returning the blockhash with a fallback behaviour. In case no one called it within the 256 blocks, it returns the previous blockhash. This contract must be used when returning 0 is a worse failure mode than returning another blockhash. Allows saving the random number for use in the future. It allows the contract to still access the blockhash even after 256 blocks.", - "kind": "dev", - "methods": { - "receiveRandomness(uint256)": { - "details": "Return the random number. If it has not been saved and is still computable compute it.", - "params": { - "_block": "Block the random number is linked to." - }, - "returns": { - "randomNumber": "The random number or 0 if it is not ready or has not been requested." - } - }, - "requestRandomness(uint256)": { - "details": "Request a random number.", - "params": { - "_block": "Block the random number is linked to." - } - } - }, - "title": "Random Number Generator using blockhash with fallback.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 24139, - "contract": "src/rng/BlockhashRNG.sol:BlockHashRNG", - "label": "randomNumbers", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/ChainlinkRNG.json b/contracts/deployments/arbitrumSepoliaDevnet/ChainlinkRNG.json deleted file mode 100644 index 23e72e422..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/ChainlinkRNG.json +++ /dev/null @@ -1,749 +0,0 @@ -{ - "address": "0x7e40f5aC809521654A9c17e442F2a0a5a4d890FA", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_sortitionModule", - "type": "address" - }, - { - "internalType": "address", - "name": "_vrfCoordinator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_keyHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_subscriptionId", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "_requestConfirmations", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "_callbackGasLimit", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "have", - "type": "address" - }, - { - "internalType": "address", - "name": "want", - "type": "address" - } - ], - "name": "OnlyCoordinatorCanFulfill", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "have", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "coordinator", - "type": "address" - } - ], - "name": "OnlyOwnerOrCoordinator", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "vrfCoordinator", - "type": "address" - } - ], - "name": "CoordinatorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "randomWord", - "type": "uint256" - } - ], - "name": "RequestFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "name": "RequestSent", - "type": "event" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "callbackGasLimit", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_callbackGasLimit", - "type": "uint32" - } - ], - "name": "changeCallbackGasLimit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_keyHash", - "type": "bytes32" - } - ], - "name": "changeKeyHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_requestConfirmations", - "type": "uint16" - } - ], - "name": "changeRequestConfirmations", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_subscriptionId", - "type": "uint256" - } - ], - "name": "changeSubscriptionId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_vrfCoordinator", - "type": "address" - } - ], - "name": "changeVrfCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keyHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastRequestId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "name": "randomNumbers", - "outputs": [ - { - "internalType": "uint256", - "name": "number", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "randomWords", - "type": "uint256[]" - } - ], - "name": "rawFulfillRandomWords", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "receiveRandomness", - "outputs": [ - { - "internalType": "uint256", - "name": "randomNumber", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "requestConfirmations", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "requestRandomness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "s_vrfCoordinator", - "outputs": [ - { - "internalType": "contract IVRFCoordinatorV2Plus", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_vrfCoordinator", - "type": "address" - } - ], - "name": "setCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "subscriptionId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x8509b0678c2e8806780c4cb13e9cc9be72b1c4ede2e9b37d5acea3bddf7d1e77", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x7e40f5aC809521654A9c17e442F2a0a5a4d890FA", - "transactionIndex": 1, - "gasUsed": "915546", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xbbf5958e6cce4714693a824e1b49b6f00547cc4cedb1c50a32ab0ae16137768b", - "transactionHash": "0x8509b0678c2e8806780c4cb13e9cc9be72b1c4ede2e9b37d5acea3bddf7d1e77", - "logs": [], - "blockNumber": 175286047, - "cumulativeGasUsed": "915546", - "status": 1, - "byzantium": true - }, - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0x5CE8D5A2BC84beb22a398CCA51996F7930313D61", - "0x1770bdc7eec7771f7ba4ffd640f34260d7f095b79c92d34a5b2551d6f6cfd2be", - "38502597312983100069991953687934627561654236680431968938019951490339399569548", - 200, - 100000 - ], - "numDeployments": 3, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_sortitionModule\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vrfCoordinator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_keyHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_subscriptionId\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"_requestConfirmations\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"_callbackGasLimit\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"have\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"want\",\"type\":\"address\"}],\"name\":\"OnlyCoordinatorCanFulfill\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"have\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"coordinator\",\"type\":\"address\"}],\"name\":\"OnlyOwnerOrCoordinator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"vrfCoordinator\",\"type\":\"address\"}],\"name\":\"CoordinatorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"randomWord\",\"type\":\"uint256\"}],\"name\":\"RequestFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"RequestSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"callbackGasLimit\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_callbackGasLimit\",\"type\":\"uint32\"}],\"name\":\"changeCallbackGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_keyHash\",\"type\":\"bytes32\"}],\"name\":\"changeKeyHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_requestConfirmations\",\"type\":\"uint16\"}],\"name\":\"changeRequestConfirmations\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sortitionModule\",\"type\":\"address\"}],\"name\":\"changeSortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_subscriptionId\",\"type\":\"uint256\"}],\"name\":\"changeSubscriptionId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vrfCoordinator\",\"type\":\"address\"}],\"name\":\"changeVrfCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keyHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastRequestId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"randomNumbers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"randomWords\",\"type\":\"uint256[]\"}],\"name\":\"rawFulfillRandomWords\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"receiveRandomness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestConfirmations\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"requestRandomness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_vrfCoordinator\",\"outputs\":[{\"internalType\":\"contract IVRFCoordinatorV2Plus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vrfCoordinator\",\"type\":\"address\"}],\"name\":\"setCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sortitionModule\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subscriptionId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RequestFulfilled(uint256,uint256)\":{\"params\":{\"randomWord\":\"The random value answering the request.\",\"requestId\":\"The ID of the request\"}},\"RequestSent(uint256)\":{\"details\":\"Emitted when a request is sent to the VRF Coordinator\",\"params\":{\"requestId\":\"The ID of the request\"}}},\"kind\":\"dev\",\"methods\":{\"changeCallbackGasLimit(uint32)\":{\"details\":\"Changes the callback gas limit of the contract.\",\"params\":{\"_callbackGasLimit\":\"The new callback gas limit.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the governor of the contract.\",\"params\":{\"_governor\":\"The new governor.\"}},\"changeKeyHash(bytes32)\":{\"details\":\"Changes the key hash of the contract.\",\"params\":{\"_keyHash\":\"The new key hash.\"}},\"changeRequestConfirmations(uint16)\":{\"details\":\"Changes the request confirmations of the contract.\",\"params\":{\"_requestConfirmations\":\"The new request confirmations.\"}},\"changeSortitionModule(address)\":{\"details\":\"Changes the sortition module of the contract.\",\"params\":{\"_sortitionModule\":\"The new sortition module.\"}},\"changeSubscriptionId(uint256)\":{\"details\":\"Changes the subscription ID of the contract.\",\"params\":{\"_subscriptionId\":\"The new subscription ID.\"}},\"changeVrfCoordinator(address)\":{\"details\":\"Changes the VRF Coordinator of the contract.\",\"params\":{\"_vrfCoordinator\":\"The new VRF Coordinator.\"}},\"constructor\":{\"details\":\"Constructor, initializing the implementation to reduce attack surface.https://docs.chain.link/vrf/v2-5/subscription/get-a-random-number\",\"params\":{\"_callbackGasLimit\":\"The limit for how much gas to use for the callback request to the contract's fulfillRandomWords() function.\",\"_governor\":\"The Governor of the contract.\",\"_keyHash\":\"The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job).\",\"_requestConfirmations\":\"How many confirmations the Chainlink node should wait before responding.\",\"_sortitionModule\":\"The address of the SortitionModule contract.\",\"_subscriptionId\":\"The unique identifier of the subscription used for funding requests.\",\"_vrfCoordinator\":\"The address of the VRFCoordinator contract.\"}},\"receiveRandomness(uint256)\":{\"details\":\"Return the random number.\",\"returns\":{\"randomNumber\":\"The random number or 0 if it is not ready or has not been requested.\"}},\"requestRandomness(uint256)\":{\"details\":\"Request a random number. SortitionModule only.\"}},\"title\":\"Random Number Generator that uses Chainlink VRF v2.5 https://blog.chain.link/introducing-vrf-v2-5/\",\"version\":1},\"userdoc\":{\"events\":{\"RequestFulfilled(uint256,uint256)\":{\"notice\":\"Emitted when a request has been fulfilled.\"}},\"kind\":\"user\",\"methods\":{\"acceptOwnership()\":{\"notice\":\"Allows an ownership transfer to be completed by the recipient.\"},\"owner()\":{\"notice\":\"Get the current owner\"},\"setCoordinator(address)\":{\"notice\":\"Sets the VRF Coordinator addressThis method should only be callable by the coordinator or contract owner\"},\"transferOwnership(address)\":{\"notice\":\"Allows an owner to begin transferring ownership to a new address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rng/ChainlinkRNG.sol\":\"ChainlinkRNG\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(address newOwner) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\",\"keccak256\":\"0xdcb0e9135ddbe71ee27ba99fa06656960c66c964cf2ecb29696da1c1427d9861\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(address to) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(address to) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x2422a055657a87e98be61f8f31abb1824ec50fd0f73949f4e3c6ac877efb6da8\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(address recipient) external;\\n\\n function acceptOwnership() external;\\n}\\n\",\"keccak256\":\"0x885de72b7b4e4f1bf8ba817a3f2bcc37fd9022d342c4ce76782151c30122d767\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport {IVRFCoordinatorV2Plus} from \\\"./interfaces/IVRFCoordinatorV2Plus.sol\\\";\\nimport {IVRFMigratableConsumerV2Plus} from \\\"./interfaces/IVRFMigratableConsumerV2Plus.sol\\\";\\nimport {ConfirmedOwner} from \\\"../../shared/access/ConfirmedOwner.sol\\\";\\n\\n/** ****************************************************************************\\n * @notice Interface for contracts using VRF randomness\\n * *****************************************************************************\\n * @dev PURPOSE\\n *\\n * @dev Reggie the Random Oracle (not his real job) wants to provide randomness\\n * @dev to Vera the verifier in such a way that Vera can be sure he's not\\n * @dev making his output up to suit himself. Reggie provides Vera a public key\\n * @dev to which he knows the secret key. Each time Vera provides a seed to\\n * @dev Reggie, he gives back a value which is computed completely\\n * @dev deterministically from the seed and the secret key.\\n *\\n * @dev Reggie provides a proof by which Vera can verify that the output was\\n * @dev correctly computed once Reggie tells it to her, but without that proof,\\n * @dev the output is indistinguishable to her from a uniform random sample\\n * @dev from the output space.\\n *\\n * @dev The purpose of this contract is to make it easy for unrelated contracts\\n * @dev to talk to Vera the verifier about the work Reggie is doing, to provide\\n * @dev simple access to a verifiable source of randomness. It ensures 2 things:\\n * @dev 1. The fulfillment came from the VRFCoordinatorV2Plus.\\n * @dev 2. The consumer contract implements fulfillRandomWords.\\n * *****************************************************************************\\n * @dev USAGE\\n *\\n * @dev Calling contracts must inherit from VRFConsumerBaseV2Plus, and can\\n * @dev initialize VRFConsumerBaseV2Plus's attributes in their constructor as\\n * @dev shown:\\n *\\n * @dev contract VRFConsumerV2Plus is VRFConsumerBaseV2Plus {\\n * @dev constructor(, address _vrfCoordinator, address _subOwner)\\n * @dev VRFConsumerBaseV2Plus(_vrfCoordinator, _subOwner) public {\\n * @dev \\n * @dev }\\n * @dev }\\n *\\n * @dev The oracle will have given you an ID for the VRF keypair they have\\n * @dev committed to (let's call it keyHash). Create a subscription, fund it\\n * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface\\n * @dev subscription management functions).\\n * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations,\\n * @dev callbackGasLimit, numWords, extraArgs),\\n * @dev see (IVRFCoordinatorV2Plus for a description of the arguments).\\n *\\n * @dev Once the VRFCoordinatorV2Plus has received and validated the oracle's response\\n * @dev to your request, it will call your contract's fulfillRandomWords method.\\n *\\n * @dev The randomness argument to fulfillRandomWords is a set of random words\\n * @dev generated from your requestId and the blockHash of the request.\\n *\\n * @dev If your contract could have concurrent requests open, you can use the\\n * @dev requestId returned from requestRandomWords to track which response is associated\\n * @dev with which randomness request.\\n * @dev See \\\"SECURITY CONSIDERATIONS\\\" for principles to keep in mind,\\n * @dev if your contract could have multiple requests in flight simultaneously.\\n *\\n * @dev Colliding `requestId`s are cryptographically impossible as long as seeds\\n * @dev differ.\\n *\\n * *****************************************************************************\\n * @dev SECURITY CONSIDERATIONS\\n *\\n * @dev A method with the ability to call your fulfillRandomness method directly\\n * @dev could spoof a VRF response with any random value, so it's critical that\\n * @dev it cannot be directly called by anything other than this base contract\\n * @dev (specifically, by the VRFConsumerBaseV2Plus.rawFulfillRandomness method).\\n *\\n * @dev For your users to trust that your contract's random behavior is free\\n * @dev from malicious interference, it's best if you can write it so that all\\n * @dev behaviors implied by a VRF response are executed *during* your\\n * @dev fulfillRandomness method. If your contract must store the response (or\\n * @dev anything derived from it) and use it later, you must ensure that any\\n * @dev user-significant behavior which depends on that stored value cannot be\\n * @dev manipulated by a subsequent VRF request.\\n *\\n * @dev Similarly, both miners and the VRF oracle itself have some influence\\n * @dev over the order in which VRF responses appear on the blockchain, so if\\n * @dev your contract could have multiple VRF requests in flight simultaneously,\\n * @dev you must ensure that the order in which the VRF responses arrive cannot\\n * @dev be used to manipulate your contract's user-significant behavior.\\n *\\n * @dev Since the block hash of the block which contains the requestRandomness\\n * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful\\n * @dev miner could, in principle, fork the blockchain to evict the block\\n * @dev containing the request, forcing the request to be included in a\\n * @dev different block with a different hash, and therefore a different input\\n * @dev to the VRF. However, such an attack would incur a substantial economic\\n * @dev cost. This cost scales with the number of blocks the VRF oracle waits\\n * @dev until it calls responds to a request. It is for this reason that\\n * @dev that you can signal to an oracle you'd like them to wait longer before\\n * @dev responding to the request (however this is not enforced in the contract\\n * @dev and so remains effective only in the case of unmodified oracle software).\\n */\\nabstract contract VRFConsumerBaseV2Plus is IVRFMigratableConsumerV2Plus, ConfirmedOwner {\\n error OnlyCoordinatorCanFulfill(address have, address want);\\n error OnlyOwnerOrCoordinator(address have, address owner, address coordinator);\\n error ZeroAddress();\\n\\n // s_vrfCoordinator should be used by consumers to make requests to vrfCoordinator\\n // so that coordinator reference is updated after migration\\n IVRFCoordinatorV2Plus public s_vrfCoordinator;\\n\\n /**\\n * @param _vrfCoordinator address of VRFCoordinator contract\\n */\\n constructor(address _vrfCoordinator) ConfirmedOwner(msg.sender) {\\n if (_vrfCoordinator == address(0)) {\\n revert ZeroAddress();\\n }\\n s_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator);\\n }\\n\\n /**\\n * @notice fulfillRandomness handles the VRF response. Your contract must\\n * @notice implement it. See \\\"SECURITY CONSIDERATIONS\\\" above for important\\n * @notice principles to keep in mind when implementing your fulfillRandomness\\n * @notice method.\\n *\\n * @dev VRFConsumerBaseV2Plus expects its subcontracts to have a method with this\\n * @dev signature, and will call it once it has verified the proof\\n * @dev associated with the randomness. (It is triggered via a call to\\n * @dev rawFulfillRandomness, below.)\\n *\\n * @param requestId The Id initially returned by requestRandomness\\n * @param randomWords the VRF output expanded to the requested number of words\\n */\\n // solhint-disable-next-line chainlink-solidity/prefix-internal-functions-with-underscore\\n function fulfillRandomWords(uint256 requestId, uint256[] calldata randomWords) internal virtual;\\n\\n // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF\\n // proof. rawFulfillRandomness then calls fulfillRandomness, after validating\\n // the origin of the call\\n function rawFulfillRandomWords(uint256 requestId, uint256[] calldata randomWords) external {\\n if (msg.sender != address(s_vrfCoordinator)) {\\n revert OnlyCoordinatorCanFulfill(msg.sender, address(s_vrfCoordinator));\\n }\\n fulfillRandomWords(requestId, randomWords);\\n }\\n\\n /**\\n * @inheritdoc IVRFMigratableConsumerV2Plus\\n */\\n function setCoordinator(address _vrfCoordinator) external override onlyOwnerOrCoordinator {\\n if (_vrfCoordinator == address(0)) {\\n revert ZeroAddress();\\n }\\n s_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator);\\n\\n emit CoordinatorSet(_vrfCoordinator);\\n }\\n\\n modifier onlyOwnerOrCoordinator() {\\n if (msg.sender != owner() && msg.sender != address(s_vrfCoordinator)) {\\n revert OnlyOwnerOrCoordinator(msg.sender, owner(), address(s_vrfCoordinator));\\n }\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x0c92838396c5abe72754ebeae526a0434dd53fdaf63e6b98111aebd6114cfcc2\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFCoordinatorV2Plus.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {VRFV2PlusClient} from \\\"../libraries/VRFV2PlusClient.sol\\\";\\nimport {IVRFSubscriptionV2Plus} from \\\"./IVRFSubscriptionV2Plus.sol\\\";\\n\\n// Interface that enables consumers of VRFCoordinatorV2Plus to be future-proof for upgrades\\n// This interface is supported by subsequent versions of VRFCoordinatorV2Plus\\ninterface IVRFCoordinatorV2Plus is IVRFSubscriptionV2Plus {\\n /**\\n * @notice Request a set of random words.\\n * @param req - a struct containing following fields for randomness request:\\n * keyHash - Corresponds to a particular oracle job which uses\\n * that key for generating the VRF proof. Different keyHash's have different gas price\\n * ceilings, so you can select a specific one to bound your maximum per request cost.\\n * subId - The ID of the VRF subscription. Must be funded\\n * with the minimum subscription balance required for the selected keyHash.\\n * requestConfirmations - How many blocks you'd like the\\n * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS\\n * for why you may want to request more. The acceptable range is\\n * [minimumRequestBlockConfirmations, 200].\\n * callbackGasLimit - How much gas you'd like to receive in your\\n * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords\\n * may be slightly less than this amount because of gas used calling the function\\n * (argument decoding etc.), so you may need to request slightly more than you expect\\n * to have inside fulfillRandomWords. The acceptable range is\\n * [0, maxGasLimit]\\n * numWords - The number of uint256 random values you'd like to receive\\n * in your fulfillRandomWords callback. Note these numbers are expanded in a\\n * secure way by the VRFCoordinator from a single random value supplied by the oracle.\\n * extraArgs - abi-encoded extra args\\n * @return requestId - A unique identifier of the request. Can be used to match\\n * a request to a response in fulfillRandomWords.\\n */\\n function requestRandomWords(VRFV2PlusClient.RandomWordsRequest calldata req) external returns (uint256 requestId);\\n}\\n\",\"keccak256\":\"0x7dca2a64690ddd95ee05e422e1f61e7c1d701aaf5be1390ae12e9bd144266c36\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFMigratableConsumerV2Plus.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @notice The IVRFMigratableConsumerV2Plus interface defines the\\n/// @notice method required to be implemented by all V2Plus consumers.\\n/// @dev This interface is designed to be used in VRFConsumerBaseV2Plus.\\ninterface IVRFMigratableConsumerV2Plus {\\n event CoordinatorSet(address vrfCoordinator);\\n\\n /// @notice Sets the VRF Coordinator address\\n /// @notice This method should only be callable by the coordinator or contract owner\\n function setCoordinator(address vrfCoordinator) external;\\n}\\n\",\"keccak256\":\"0x8be8744e3b8380dc85354cf110e8caef8f394266e79120ad675a7da835ed2a85\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFSubscriptionV2Plus.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @notice The IVRFSubscriptionV2Plus interface defines the subscription\\n/// @notice related methods implemented by the V2Plus coordinator.\\ninterface IVRFSubscriptionV2Plus {\\n /**\\n * @notice Add a consumer to a VRF subscription.\\n * @param subId - ID of the subscription\\n * @param consumer - New consumer which can use the subscription\\n */\\n function addConsumer(uint256 subId, address consumer) external;\\n\\n /**\\n * @notice Remove a consumer from a VRF subscription.\\n * @param subId - ID of the subscription\\n * @param consumer - Consumer to remove from the subscription\\n */\\n function removeConsumer(uint256 subId, address consumer) external;\\n\\n /**\\n * @notice Cancel a subscription\\n * @param subId - ID of the subscription\\n * @param to - Where to send the remaining LINK to\\n */\\n function cancelSubscription(uint256 subId, address to) external;\\n\\n /**\\n * @notice Accept subscription owner transfer.\\n * @param subId - ID of the subscription\\n * @dev will revert if original owner of subId has\\n * not requested that msg.sender become the new owner.\\n */\\n function acceptSubscriptionOwnerTransfer(uint256 subId) external;\\n\\n /**\\n * @notice Request subscription owner transfer.\\n * @param subId - ID of the subscription\\n * @param newOwner - proposed new owner of the subscription\\n */\\n function requestSubscriptionOwnerTransfer(uint256 subId, address newOwner) external;\\n\\n /**\\n * @notice Create a VRF subscription.\\n * @return subId - A unique subscription id.\\n * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer.\\n * @dev Note to fund the subscription with LINK, use transferAndCall. For example\\n * @dev LINKTOKEN.transferAndCall(\\n * @dev address(COORDINATOR),\\n * @dev amount,\\n * @dev abi.encode(subId));\\n * @dev Note to fund the subscription with Native, use fundSubscriptionWithNative. Be sure\\n * @dev to send Native with the call, for example:\\n * @dev COORDINATOR.fundSubscriptionWithNative{value: amount}(subId);\\n */\\n function createSubscription() external returns (uint256 subId);\\n\\n /**\\n * @notice Get a VRF subscription.\\n * @param subId - ID of the subscription\\n * @return balance - LINK balance of the subscription in juels.\\n * @return nativeBalance - native balance of the subscription in wei.\\n * @return reqCount - Requests count of subscription.\\n * @return owner - owner of the subscription.\\n * @return consumers - list of consumer address which are able to use this subscription.\\n */\\n function getSubscription(\\n uint256 subId\\n )\\n external\\n view\\n returns (uint96 balance, uint96 nativeBalance, uint64 reqCount, address owner, address[] memory consumers);\\n\\n /*\\n * @notice Check to see if there exists a request commitment consumers\\n * for all consumers and keyhashes for a given sub.\\n * @param subId - ID of the subscription\\n * @return true if there exists at least one unfulfilled request for the subscription, false\\n * otherwise.\\n */\\n function pendingRequestExists(uint256 subId) external view returns (bool);\\n\\n /**\\n * @notice Paginate through all active VRF subscriptions.\\n * @param startIndex index of the subscription to start from\\n * @param maxCount maximum number of subscriptions to return, 0 to return all\\n * @dev the order of IDs in the list is **not guaranteed**, therefore, if making successive calls, one\\n * @dev should consider keeping the blockheight constant to ensure a holistic picture of the contract state\\n */\\n function getActiveSubscriptionIds(uint256 startIndex, uint256 maxCount) external view returns (uint256[] memory);\\n\\n /**\\n * @notice Fund a subscription with native.\\n * @param subId - ID of the subscription\\n * @notice This method expects msg.value to be greater than or equal to 0.\\n */\\n function fundSubscriptionWithNative(uint256 subId) external payable;\\n}\\n\",\"keccak256\":\"0x85b348297ce36794e3bf97a47c001fc216bd0ee243e91514a7b395f3fcd189b0\",\"license\":\"MIT\"},\"@chainlink/contracts/src/v0.8/vrf/dev/libraries/VRFV2PlusClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n// End consumer library.\\nlibrary VRFV2PlusClient {\\n // extraArgs will evolve to support new features\\n bytes4 public constant EXTRA_ARGS_V1_TAG = bytes4(keccak256(\\\"VRF ExtraArgsV1\\\"));\\n struct ExtraArgsV1 {\\n bool nativePayment;\\n }\\n\\n struct RandomWordsRequest {\\n bytes32 keyHash;\\n uint256 subId;\\n uint16 requestConfirmations;\\n uint32 callbackGasLimit;\\n uint32 numWords;\\n bytes extraArgs;\\n }\\n\\n function _argsToBytes(ExtraArgsV1 memory extraArgs) internal pure returns (bytes memory bts) {\\n return abi.encodeWithSelector(EXTRA_ARGS_V1_TAG, extraArgs);\\n }\\n}\\n\",\"keccak256\":\"0x839ad7a737ef18147b518b4ec3cbaf4a49dc994db65cf8369ed4e69d169a98a6\",\"license\":\"MIT\"},\"src/rng/ChainlinkRNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {VRFConsumerBaseV2Plus, IVRFCoordinatorV2Plus} from \\\"@chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus.sol\\\";\\nimport {VRFV2PlusClient} from \\\"@chainlink/contracts/src/v0.8/vrf/dev/libraries/VRFV2PlusClient.sol\\\";\\n\\nimport \\\"./RNG.sol\\\";\\n\\n/// @title Random Number Generator that uses Chainlink VRF v2.5\\n/// https://blog.chain.link/introducing-vrf-v2-5/\\ncontract ChainlinkRNG is RNG, VRFConsumerBaseV2Plus {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The address that can withdraw funds.\\n address public sortitionModule; // The address of the SortitionModule.\\n bytes32 public keyHash; // The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job).\\n uint256 public subscriptionId; // The unique identifier of the subscription used for funding requests.\\n uint16 public requestConfirmations; // How many confirmations the Chainlink node should wait before responding.\\n // 22 bytes remaining in slot\\n uint32 public callbackGasLimit; // Gas limit for the Chainlink callback.\\n uint256 public lastRequestId; // The last request ID.\\n mapping(uint256 requestId => uint256 number) public randomNumbers; // randomNumbers[requestID] is the random number for this request id, 0 otherwise.\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a request is sent to the VRF Coordinator\\n /// @param requestId The ID of the request\\n event RequestSent(uint256 indexed requestId);\\n\\n /// Emitted when a request has been fulfilled.\\n /// @param requestId The ID of the request\\n /// @param randomWord The random value answering the request.\\n event RequestFulfilled(uint256 indexed requestId, uint256 randomWord);\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Governor only\\\");\\n _;\\n }\\n\\n modifier onlyBySortitionModule() {\\n require(sortitionModule == msg.sender, \\\"SortitionModule only\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n /// @param _governor The Governor of the contract.\\n /// @param _sortitionModule The address of the SortitionModule contract.\\n /// @param _vrfCoordinator The address of the VRFCoordinator contract.\\n /// @param _keyHash The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job).\\n /// @param _subscriptionId The unique identifier of the subscription used for funding requests.\\n /// @param _requestConfirmations How many confirmations the Chainlink node should wait before responding.\\n /// @param _callbackGasLimit The limit for how much gas to use for the callback request to the contract's fulfillRandomWords() function.\\n /// @dev https://docs.chain.link/vrf/v2-5/subscription/get-a-random-number\\n constructor(\\n address _governor,\\n address _sortitionModule,\\n address _vrfCoordinator,\\n bytes32 _keyHash,\\n uint256 _subscriptionId,\\n uint16 _requestConfirmations,\\n uint32 _callbackGasLimit\\n ) VRFConsumerBaseV2Plus(_vrfCoordinator) {\\n governor = _governor;\\n sortitionModule = _sortitionModule;\\n keyHash = _keyHash;\\n subscriptionId = _subscriptionId;\\n requestConfirmations = _requestConfirmations;\\n callbackGasLimit = _callbackGasLimit;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor of the contract.\\n /// @param _governor The new governor.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the sortition module of the contract.\\n /// @param _sortitionModule The new sortition module.\\n function changeSortitionModule(address _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Changes the VRF Coordinator of the contract.\\n /// @param _vrfCoordinator The new VRF Coordinator.\\n function changeVrfCoordinator(address _vrfCoordinator) external onlyByGovernor {\\n s_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator);\\n emit CoordinatorSet(_vrfCoordinator);\\n }\\n\\n /// @dev Changes the key hash of the contract.\\n /// @param _keyHash The new key hash.\\n function changeKeyHash(bytes32 _keyHash) external onlyByGovernor {\\n keyHash = _keyHash;\\n }\\n\\n /// @dev Changes the subscription ID of the contract.\\n /// @param _subscriptionId The new subscription ID.\\n function changeSubscriptionId(uint256 _subscriptionId) external onlyByGovernor {\\n subscriptionId = _subscriptionId;\\n }\\n\\n /// @dev Changes the request confirmations of the contract.\\n /// @param _requestConfirmations The new request confirmations.\\n function changeRequestConfirmations(uint16 _requestConfirmations) external onlyByGovernor {\\n requestConfirmations = _requestConfirmations;\\n }\\n\\n /// @dev Changes the callback gas limit of the contract.\\n /// @param _callbackGasLimit The new callback gas limit.\\n function changeCallbackGasLimit(uint32 _callbackGasLimit) external onlyByGovernor {\\n callbackGasLimit = _callbackGasLimit;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Request a random number. SortitionModule only.\\n function requestRandomness(uint256 /*_block*/) external override onlyBySortitionModule {\\n // Will revert if subscription is not set and funded.\\n uint256 requestId = s_vrfCoordinator.requestRandomWords(\\n VRFV2PlusClient.RandomWordsRequest({\\n keyHash: keyHash,\\n subId: subscriptionId,\\n requestConfirmations: requestConfirmations,\\n callbackGasLimit: callbackGasLimit,\\n numWords: 1,\\n extraArgs: VRFV2PlusClient._argsToBytes(\\n // Set nativePayment to true to pay for VRF requests with ETH instead of LINK\\n VRFV2PlusClient.ExtraArgsV1({nativePayment: true})\\n )\\n })\\n );\\n lastRequestId = requestId;\\n emit RequestSent(requestId);\\n }\\n\\n /// @dev Callback function called by the VRF Coordinator when the random value is generated.\\n /// @param _requestId The ID of the request.\\n /// @param _randomWords The random values answering the request.\\n function fulfillRandomWords(uint256 _requestId, uint256[] calldata _randomWords) internal override {\\n // Access control is handled by the parent VRFCoordinator.rawFulfillRandomWords()\\n randomNumbers[_requestId] = _randomWords[0];\\n emit RequestFulfilled(_requestId, _randomWords[0]);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Return the random number.\\n /// @return randomNumber The random number or 0 if it is not ready or has not been requested.\\n function receiveRandomness(uint256 /*_block*/) external view override returns (uint256 randomNumber) {\\n randomNumber = randomNumbers[lastRequestId];\\n }\\n}\\n\",\"keccak256\":\"0xf3731ed1ab167cc631d3223c61407e9dbced76bc993e95a621939400ff4d04f0\",\"license\":\"MIT\"},\"src/rng/RNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\ninterface RNG {\\n /// @dev Request a random number.\\n /// @param _block Block linked to the request.\\n function requestRandomness(uint256 _block) external;\\n\\n /// @dev Receive the random number.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber Random Number. If the number is not ready or has not been required 0 instead.\\n function receiveRandomness(uint256 _block) external returns (uint256 randomNumber);\\n}\\n\",\"keccak256\":\"0x0f6a8fb72ed7e5a602dc0aaf4f3a037ba9f1765b79b6320604ff810d578af2cf\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50604051610f48380380610f4883398101604081905261002f9161021f565b8433806000816100865760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156100b6576100b68161015a565b5050506001600160a01b0381166100e05760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b03199081166001600160a01b03938416179091556003805482169983169990991790985560048054909816961695909517909555600591909155600655506007805461ffff90931665ffffffffffff19909316929092176201000063ffffffff909216919091021790556102ae565b336001600160a01b038216036101b25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007d565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b038116811461021a57600080fd5b919050565b600080600080600080600060e0888a03121561023a57600080fd5b61024388610203565b965061025160208901610203565b955061025f60408901610203565b9450606088015193506080880151925060a088015161ffff8116811461028457600080fd5b60c089015190925063ffffffff8116811461029e57600080fd5b8091505092959891949750929550565b610c8b806102bd6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806379ba5097116100c3578063e4c0aaf41161007c578063e4c0aaf4146102e5578063e86a51cb146102f8578063f2fde38b1461030b578063f50d390d1461031e578063f9f5dd9114610331578063fc2a88c31461034457600080fd5b806379ba5097146102725780638da5cb5b1461027a5780638ea981171461028b5780639eccacf61461029e578063b0049637146102b1578063b0fb162f146102c457600080fd5b80632e1daf2f116101155780632e1daf2f146101fd5780632f68f4821461021057806339b1e245146102235780635257cd901461023657806361728f39146102565780637363ae1f1461025f57600080fd5b806309c1ba2e146101525780630c340a241461016e57806313cf9054146101995780631fe543e3146101bd57806324f74697146101d2575b600080fd5b61015b60065481565b6040519081526020015b60405180910390f35b600354610181906001600160a01b031681565b6040516001600160a01b039091168152602001610165565b61015b6101a7366004610a4f565b5060085460009081526009602052604090205490565b6101d06101cb366004610a68565b61034d565b005b6007546101e89062010000900463ffffffff1681565b60405163ffffffff9091168152602001610165565b600454610181906001600160a01b031681565b6101d061021e366004610a4f565b6103a2565b6101d0610231366004610a4f565b6103d1565b61015b610244366004610a4f565b60096020526000908152604090205481565b61015b60055481565b6101d061026d366004610a4f565b610400565b6101d061055b565b6000546001600160a01b0316610181565b6101d0610299366004610ae9565b610605565b600254610181906001600160a01b031681565b6101d06102bf366004610ae9565b6106f7565b6007546102d29061ffff1681565b60405161ffff9091168152602001610165565b6101d06102f3366004610ae9565b610743565b6101d0610306366004610b19565b61078f565b6101d0610319366004610ae9565b6107dd565b6101d061032c366004610b3f565b6107f1565b6101d061033f366004610ae9565b610833565b61015b60085481565b6002546001600160a01b031633146103925760025460405163073e64fd60e21b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b61039d83838361085d565b505050565b6003546001600160a01b031633146103cc5760405162461bcd60e51b815260040161038990610b63565b600555565b6003546001600160a01b031633146103fb5760405162461bcd60e51b815260040161038990610b63565b600655565b6004546001600160a01b031633146104515760405162461bcd60e51b8152602060048201526014602482015273536f72746974696f6e4d6f64756c65206f6e6c7960601b6044820152606401610389565b6002546040805160c081018252600554815260065460208083019190915260075461ffff81168385015262010000900463ffffffff16606083015260016080830181905283519182019093529182526000926001600160a01b031691639b1c385e919060a08201906104c2906108e6565b8152506040518263ffffffff1660e01b81526004016104e19190610b8a565b6020604051808303816000875af1158015610500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105249190610c26565b600881905560405190915081907f0cd21a41891ff04ecd9a8754bec97e2fb85d2a4e7694329d4dc364c796f23d0690600090a25050565b6001546001600160a01b031633146105ae5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610389565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000546001600160a01b0316331480159061062b57506002546001600160a01b03163314155b1561067c57336106436000546001600160a01b031690565b60025460405163061db9c160e01b81526001600160a01b0393841660048201529183166024830152919091166044820152606401610389565b6001600160a01b0381166106a35760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd1a6a14209a385a964d036e404cb5cfb71f4000cdb03c9366292430787261be69060200160405180910390a150565b6003546001600160a01b031633146107215760405162461bcd60e51b815260040161038990610b63565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461076d5760405162461bcd60e51b815260040161038990610b63565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146107b95760405162461bcd60e51b815260040161038990610b63565b6007805463ffffffff909216620100000265ffffffff000019909216919091179055565b6107e5610957565b6107ee816109ac565b50565b6003546001600160a01b0316331461081b5760405162461bcd60e51b815260040161038990610b63565b6007805461ffff191661ffff92909216919091179055565b6003546001600160a01b031633146106a35760405162461bcd60e51b815260040161038990610b63565b8181600081811061087057610870610c3f565b905060200201356009600085815260200190815260200160002081905550827f5c69e7026b653d8606b5613bb00fd8c4b0504b1cbe8db600c406faac180924d5838360008181106108c3576108c3610c3f565b905060200201356040516108d991815260200190565b60405180910390a2505050565b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa8260405160240161091f91511515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915292915050565b6000546001600160a01b031633146109aa5760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610389565b565b336001600160a01b038216036109fe5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103a3930b739b332b9103a379039b2b63360491b6044820152606401610389565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610a6157600080fd5b5035919050565b600080600060408486031215610a7d57600080fd5b83359250602084013567ffffffffffffffff811115610a9b57600080fd5b8401601f81018613610aac57600080fd5b803567ffffffffffffffff811115610ac357600080fd5b8660208260051b8401011115610ad857600080fd5b939660209190910195509293505050565b600060208284031215610afb57600080fd5b81356001600160a01b0381168114610b1257600080fd5b9392505050565b600060208284031215610b2b57600080fd5b813563ffffffff81168114610b1257600080fd5b600060208284031215610b5157600080fd5b813561ffff81168114610b1257600080fd5b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b60208152815160208201526020820151604082015261ffff604083015116606082015263ffffffff606083015116608082015263ffffffff60808301511660a0820152600060a083015160c08084015280518060e085015260005b81811015610c03576020818401810151610100878401015201610be5565b5060006101008286010152610100601f19601f8301168501019250505092915050565b600060208284031215610c3857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220f4b2ae7146a32f0fc33c7584f1c5b3aabdd589295b6cd609697aa860d6d5e09d64736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806379ba5097116100c3578063e4c0aaf41161007c578063e4c0aaf4146102e5578063e86a51cb146102f8578063f2fde38b1461030b578063f50d390d1461031e578063f9f5dd9114610331578063fc2a88c31461034457600080fd5b806379ba5097146102725780638da5cb5b1461027a5780638ea981171461028b5780639eccacf61461029e578063b0049637146102b1578063b0fb162f146102c457600080fd5b80632e1daf2f116101155780632e1daf2f146101fd5780632f68f4821461021057806339b1e245146102235780635257cd901461023657806361728f39146102565780637363ae1f1461025f57600080fd5b806309c1ba2e146101525780630c340a241461016e57806313cf9054146101995780631fe543e3146101bd57806324f74697146101d2575b600080fd5b61015b60065481565b6040519081526020015b60405180910390f35b600354610181906001600160a01b031681565b6040516001600160a01b039091168152602001610165565b61015b6101a7366004610a4f565b5060085460009081526009602052604090205490565b6101d06101cb366004610a68565b61034d565b005b6007546101e89062010000900463ffffffff1681565b60405163ffffffff9091168152602001610165565b600454610181906001600160a01b031681565b6101d061021e366004610a4f565b6103a2565b6101d0610231366004610a4f565b6103d1565b61015b610244366004610a4f565b60096020526000908152604090205481565b61015b60055481565b6101d061026d366004610a4f565b610400565b6101d061055b565b6000546001600160a01b0316610181565b6101d0610299366004610ae9565b610605565b600254610181906001600160a01b031681565b6101d06102bf366004610ae9565b6106f7565b6007546102d29061ffff1681565b60405161ffff9091168152602001610165565b6101d06102f3366004610ae9565b610743565b6101d0610306366004610b19565b61078f565b6101d0610319366004610ae9565b6107dd565b6101d061032c366004610b3f565b6107f1565b6101d061033f366004610ae9565b610833565b61015b60085481565b6002546001600160a01b031633146103925760025460405163073e64fd60e21b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b61039d83838361085d565b505050565b6003546001600160a01b031633146103cc5760405162461bcd60e51b815260040161038990610b63565b600555565b6003546001600160a01b031633146103fb5760405162461bcd60e51b815260040161038990610b63565b600655565b6004546001600160a01b031633146104515760405162461bcd60e51b8152602060048201526014602482015273536f72746974696f6e4d6f64756c65206f6e6c7960601b6044820152606401610389565b6002546040805160c081018252600554815260065460208083019190915260075461ffff81168385015262010000900463ffffffff16606083015260016080830181905283519182019093529182526000926001600160a01b031691639b1c385e919060a08201906104c2906108e6565b8152506040518263ffffffff1660e01b81526004016104e19190610b8a565b6020604051808303816000875af1158015610500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105249190610c26565b600881905560405190915081907f0cd21a41891ff04ecd9a8754bec97e2fb85d2a4e7694329d4dc364c796f23d0690600090a25050565b6001546001600160a01b031633146105ae5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610389565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000546001600160a01b0316331480159061062b57506002546001600160a01b03163314155b1561067c57336106436000546001600160a01b031690565b60025460405163061db9c160e01b81526001600160a01b0393841660048201529183166024830152919091166044820152606401610389565b6001600160a01b0381166106a35760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd1a6a14209a385a964d036e404cb5cfb71f4000cdb03c9366292430787261be69060200160405180910390a150565b6003546001600160a01b031633146107215760405162461bcd60e51b815260040161038990610b63565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461076d5760405162461bcd60e51b815260040161038990610b63565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146107b95760405162461bcd60e51b815260040161038990610b63565b6007805463ffffffff909216620100000265ffffffff000019909216919091179055565b6107e5610957565b6107ee816109ac565b50565b6003546001600160a01b0316331461081b5760405162461bcd60e51b815260040161038990610b63565b6007805461ffff191661ffff92909216919091179055565b6003546001600160a01b031633146106a35760405162461bcd60e51b815260040161038990610b63565b8181600081811061087057610870610c3f565b905060200201356009600085815260200190815260200160002081905550827f5c69e7026b653d8606b5613bb00fd8c4b0504b1cbe8db600c406faac180924d5838360008181106108c3576108c3610c3f565b905060200201356040516108d991815260200190565b60405180910390a2505050565b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa8260405160240161091f91511515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915292915050565b6000546001600160a01b031633146109aa5760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610389565b565b336001600160a01b038216036109fe5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103a3930b739b332b9103a379039b2b63360491b6044820152606401610389565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610a6157600080fd5b5035919050565b600080600060408486031215610a7d57600080fd5b83359250602084013567ffffffffffffffff811115610a9b57600080fd5b8401601f81018613610aac57600080fd5b803567ffffffffffffffff811115610ac357600080fd5b8660208260051b8401011115610ad857600080fd5b939660209190910195509293505050565b600060208284031215610afb57600080fd5b81356001600160a01b0381168114610b1257600080fd5b9392505050565b600060208284031215610b2b57600080fd5b813563ffffffff81168114610b1257600080fd5b600060208284031215610b5157600080fd5b813561ffff81168114610b1257600080fd5b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b604082015260600190565b60208152815160208201526020820151604082015261ffff604083015116606082015263ffffffff606083015116608082015263ffffffff60808301511660a0820152600060a083015160c08084015280518060e085015260005b81811015610c03576020818401810151610100878401015201610be5565b5060006101008286010152610100601f19601f8301168501019250505092915050565b600060208284031215610c3857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220f4b2ae7146a32f0fc33c7584f1c5b3aabdd589295b6cd609697aa860d6d5e09d64736f6c634300081c0033", - "devdoc": { - "events": { - "RequestFulfilled(uint256,uint256)": { - "params": { - "randomWord": "The random value answering the request.", - "requestId": "The ID of the request" - } - }, - "RequestSent(uint256)": { - "details": "Emitted when a request is sent to the VRF Coordinator", - "params": { - "requestId": "The ID of the request" - } - } - }, - "kind": "dev", - "methods": { - "changeCallbackGasLimit(uint32)": { - "details": "Changes the callback gas limit of the contract.", - "params": { - "_callbackGasLimit": "The new callback gas limit." - } - }, - "changeGovernor(address)": { - "details": "Changes the governor of the contract.", - "params": { - "_governor": "The new governor." - } - }, - "changeKeyHash(bytes32)": { - "details": "Changes the key hash of the contract.", - "params": { - "_keyHash": "The new key hash." - } - }, - "changeRequestConfirmations(uint16)": { - "details": "Changes the request confirmations of the contract.", - "params": { - "_requestConfirmations": "The new request confirmations." - } - }, - "changeSortitionModule(address)": { - "details": "Changes the sortition module of the contract.", - "params": { - "_sortitionModule": "The new sortition module." - } - }, - "changeSubscriptionId(uint256)": { - "details": "Changes the subscription ID of the contract.", - "params": { - "_subscriptionId": "The new subscription ID." - } - }, - "changeVrfCoordinator(address)": { - "details": "Changes the VRF Coordinator of the contract.", - "params": { - "_vrfCoordinator": "The new VRF Coordinator." - } - }, - "constructor": { - "details": "Constructor, initializing the implementation to reduce attack surface.https://docs.chain.link/vrf/v2-5/subscription/get-a-random-number", - "params": { - "_callbackGasLimit": "The limit for how much gas to use for the callback request to the contract's fulfillRandomWords() function.", - "_governor": "The Governor of the contract.", - "_keyHash": "The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job).", - "_requestConfirmations": "How many confirmations the Chainlink node should wait before responding.", - "_sortitionModule": "The address of the SortitionModule contract.", - "_subscriptionId": "The unique identifier of the subscription used for funding requests.", - "_vrfCoordinator": "The address of the VRFCoordinator contract." - } - }, - "receiveRandomness(uint256)": { - "details": "Return the random number.", - "returns": { - "randomNumber": "The random number or 0 if it is not ready or has not been requested." - } - }, - "requestRandomness(uint256)": { - "details": "Request a random number. SortitionModule only." - } - }, - "title": "Random Number Generator that uses Chainlink VRF v2.5 https://blog.chain.link/introducing-vrf-v2-5/", - "version": 1 - }, - "userdoc": { - "events": { - "RequestFulfilled(uint256,uint256)": { - "notice": "Emitted when a request has been fulfilled." - } - }, - "kind": "user", - "methods": { - "acceptOwnership()": { - "notice": "Allows an ownership transfer to be completed by the recipient." - }, - "owner()": { - "notice": "Get the current owner" - }, - "setCoordinator(address)": { - "notice": "Sets the VRF Coordinator addressThis method should only be callable by the coordinator or contract owner" - }, - "transferOwnership(address)": { - "notice": "Allows an owner to begin transferring ownership to a new address." - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 29, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "s_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 31, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "s_pendingOwner", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 231, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "s_vrfCoordinator", - "offset": 0, - "slot": "2", - "type": "t_contract(IVRFCoordinatorV2Plus)380" - }, - { - "astId": 34918, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "governor", - "offset": 0, - "slot": "3", - "type": "t_address" - }, - { - "astId": 34920, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "sortitionModule", - "offset": 0, - "slot": "4", - "type": "t_address" - }, - { - "astId": 34922, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "keyHash", - "offset": 0, - "slot": "5", - "type": "t_bytes32" - }, - { - "astId": 34924, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "subscriptionId", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 34926, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "requestConfirmations", - "offset": 0, - "slot": "7", - "type": "t_uint16" - }, - { - "astId": 34928, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "callbackGasLimit", - "offset": 2, - "slot": "7", - "type": "t_uint32" - }, - { - "astId": 34930, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "lastRequestId", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 34934, - "contract": "src/rng/ChainlinkRNG.sol:ChainlinkRNG", - "label": "randomNumbers", - "offset": 0, - "slot": "9", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_contract(IVRFCoordinatorV2Plus)380": { - "encoding": "inplace", - "label": "contract IVRFCoordinatorV2Plus", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint16": { - "encoding": "inplace", - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/ChainlinkVRFCoordinator.json b/contracts/deployments/arbitrumSepoliaDevnet/ChainlinkVRFCoordinator.json deleted file mode 100644 index 0ad1f85b2..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/ChainlinkVRFCoordinator.json +++ /dev/null @@ -1,1753 +0,0 @@ -{ - "address": "0x5CE8D5A2BC84beb22a398CCA51996F7930313D61", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "blockhashStore", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "internalBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "externalBalance", - "type": "uint256" - } - ], - "name": "BalanceInvariantViolated", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNum", - "type": "uint256" - } - ], - "name": "BlockhashNotInStore", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "coordinatorAddress", - "type": "address" - } - ], - "name": "CoordinatorAlreadyRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "coordinatorAddress", - "type": "address" - } - ], - "name": "CoordinatorNotRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "FailedToSendNative", - "type": "error" - }, - { - "inputs": [], - "name": "FailedToTransferLink", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "have", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "want", - "type": "uint32" - } - ], - "name": "GasLimitTooBig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxGas", - "type": "uint256" - } - ], - "name": "GasPriceExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectCommitment", - "type": "error" - }, - { - "inputs": [], - "name": "IndexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "InsufficientBalance", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidCalldata", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "InvalidConsumer", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidExtraArgsTag", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "linkWei", - "type": "int256" - } - ], - "name": "InvalidLinkWeiPrice", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "premiumPercentage", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "max", - "type": "uint8" - } - ], - "name": "InvalidPremiumPercentage", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "have", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "min", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "max", - "type": "uint16" - } - ], - "name": "InvalidRequestConfirmations", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidSubscription", - "type": "error" - }, - { - "inputs": [], - "name": "LinkAlreadySet", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "flatFeeLinkDiscountPPM", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "flatFeeNativePPM", - "type": "uint32" - } - ], - "name": "LinkDiscountTooHigh", - "type": "error" - }, - { - "inputs": [], - "name": "LinkNotSet", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "have", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "max", - "type": "uint32" - } - ], - "name": "MsgDataTooBig", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "MustBeRequestedOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "MustBeSubOwner", - "type": "error" - }, - { - "inputs": [], - "name": "NoCorrespondingRequest", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - } - ], - "name": "NoSuchProvingKey", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "have", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "want", - "type": "uint32" - } - ], - "name": "NumWordsTooBig", - "type": "error" - }, - { - "inputs": [], - "name": "OnlyCallableFromLink", - "type": "error" - }, - { - "inputs": [], - "name": "PaymentTooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "PendingRequestExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - } - ], - "name": "ProvingKeyAlreadyRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "Reentrant", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyConsumers", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "minimumRequestConfirmations", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxGasLimit", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "stalenessSeconds", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "gasAfterPaymentCalculation", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "int256", - "name": "fallbackWeiPerUnitLink", - "type": "int256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "fulfillmentFlatFeeNativePPM", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "fulfillmentFlatFeeLinkDiscountPPM", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "nativePremiumPercentage", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "linkPremiumPercentage", - "type": "uint8" - } - ], - "name": "ConfigSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "coordinatorAddress", - "type": "address" - } - ], - "name": "CoordinatorDeregistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "coordinatorAddress", - "type": "address" - } - ], - "name": "CoordinatorRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "fallbackWeiPerUnitLink", - "type": "int256" - } - ], - "name": "FallbackWeiPerUnitLinkUsed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsRecovered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newCoordinator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "MigrationCompleted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "NativeFundsRecovered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "maxGas", - "type": "uint64" - } - ], - "name": "ProvingKeyDeregistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "maxGas", - "type": "uint64" - } - ], - "name": "ProvingKeyRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "outputSeed", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "payment", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "nativePayment", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "onlyPremium", - "type": "bool" - } - ], - "name": "RandomWordsFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "preSeed", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "minimumRequestConfirmations", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "callbackGasLimit", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "numWords", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "extraArgs", - "type": "bytes" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RandomWordsRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountLink", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountNative", - "type": "uint256" - } - ], - "name": "SubscriptionCanceled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "SubscriptionConsumerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "SubscriptionConsumerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "SubscriptionCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldBalance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newBalance", - "type": "uint256" - } - ], - "name": "SubscriptionFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldNativeBalance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newNativeBalance", - "type": "uint256" - } - ], - "name": "SubscriptionFundedWithNative", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "SubscriptionOwnerTransferRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "SubscriptionOwnerTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "BLOCKHASH_STORE", - "outputs": [ - { - "internalType": "contract BlockhashStoreInterface", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LINK", - "outputs": [ - { - "internalType": "contract LinkTokenInterface", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LINK_NATIVE_FEED", - "outputs": [ - { - "internalType": "contract AggregatorV3Interface", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_CONSUMERS", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_NUM_WORDS", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_REQUEST_CONFIRMATIONS", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "acceptSubscriptionOwnerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "addConsumer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "cancelSubscription", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "createSubscription", - "outputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "deregisterMigratableCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "publicProvingKey", - "type": "uint256[2]" - } - ], - "name": "deregisterProvingKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256[2]", - "name": "pk", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "gamma", - "type": "uint256[2]" - }, - { - "internalType": "uint256", - "name": "c", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "s", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "seed", - "type": "uint256" - }, - { - "internalType": "address", - "name": "uWitness", - "type": "address" - }, - { - "internalType": "uint256[2]", - "name": "cGammaWitness", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "sHashWitness", - "type": "uint256[2]" - }, - { - "internalType": "uint256", - "name": "zInv", - "type": "uint256" - } - ], - "internalType": "struct VRF.Proof", - "name": "proof", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint64", - "name": "blockNum", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "callbackGasLimit", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numWords", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "extraArgs", - "type": "bytes" - } - ], - "internalType": "struct VRFTypes.RequestCommitmentV2Plus", - "name": "rc", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "onlyPremium", - "type": "bool" - } - ], - "name": "fulfillRandomWords", - "outputs": [ - { - "internalType": "uint96", - "name": "payment", - "type": "uint96" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "fundSubscriptionWithNative", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "startIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxCount", - "type": "uint256" - } - ], - "name": "getActiveSubscriptionIds", - "outputs": [ - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "getSubscription", - "outputs": [ - { - "internalType": "uint96", - "name": "balance", - "type": "uint96" - }, - { - "internalType": "uint96", - "name": "nativeBalance", - "type": "uint96" - }, - { - "internalType": "uint64", - "name": "reqCount", - "type": "uint64" - }, - { - "internalType": "address", - "name": "subOwner", - "type": "address" - }, - { - "internalType": "address[]", - "name": "consumers", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "publicKey", - "type": "uint256[2]" - } - ], - "name": "hashOfKey", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "newCoordinator", - "type": "address" - } - ], - "name": "migrate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onTokenTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "ownerCancelSubscription", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - } - ], - "name": "pendingRequestExists", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "recoverFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "to", - "type": "address" - } - ], - "name": "recoverNativeFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "registerMigratableCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "publicProvingKey", - "type": "uint256[2]" - }, - { - "internalType": "uint64", - "name": "maxGas", - "type": "uint64" - } - ], - "name": "registerProvingKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "consumer", - "type": "address" - } - ], - "name": "removeConsumer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "keyHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "requestConfirmations", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "callbackGasLimit", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "numWords", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "extraArgs", - "type": "bytes" - } - ], - "internalType": "struct VRFV2PlusClient.RandomWordsRequest", - "name": "req", - "type": "tuple" - } - ], - "name": "requestRandomWords", - "outputs": [ - { - "internalType": "uint256", - "name": "requestId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "subId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "requestSubscriptionOwnerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "s_config", - "outputs": [ - { - "internalType": "uint16", - "name": "minimumRequestConfirmations", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "maxGasLimit", - "type": "uint32" - }, - { - "internalType": "bool", - "name": "reentrancyLock", - "type": "bool" - }, - { - "internalType": "uint32", - "name": "stalenessSeconds", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "gasAfterPaymentCalculation", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "fulfillmentFlatFeeNativePPM", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "fulfillmentFlatFeeLinkDiscountPPM", - "type": "uint32" - }, - { - "internalType": "uint8", - "name": "nativePremiumPercentage", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "linkPremiumPercentage", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "s_currentSubNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "s_fallbackWeiPerUnitLink", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "s_provingKeyHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "s_provingKeys", - "outputs": [ - { - "internalType": "bool", - "name": "exists", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "maxGas", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "s_requestCommitments", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "s_totalBalance", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "s_totalNativeBalance", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "minimumRequestConfirmations", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "maxGasLimit", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "stalenessSeconds", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "gasAfterPaymentCalculation", - "type": "uint32" - }, - { - "internalType": "int256", - "name": "fallbackWeiPerUnitLink", - "type": "int256" - }, - { - "internalType": "uint32", - "name": "fulfillmentFlatFeeNativePPM", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "fulfillmentFlatFeeLinkDiscountPPM", - "type": "uint32" - }, - { - "internalType": "uint8", - "name": "nativePremiumPercentage", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "linkPremiumPercentage", - "type": "uint8" - } - ], - "name": "setConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "link", - "type": "address" - }, - { - "internalType": "address", - "name": "linkNativeFeed", - "type": "address" - } - ], - "name": "setLINKAndLINKNativeFeed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "recipient", - "type": "address" - } - ], - "name": "withdrawNative", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ] -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DAI.json b/contracts/deployments/arbitrumSepoliaDevnet/DAI.json deleted file mode 100644 index aeb0db522..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DAI.json +++ /dev/null @@ -1,458 +0,0 @@ -{ - "address": "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "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": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x251195ad7dabd55250d3d7e56ca4fb46842bf6c03d03ae6ffcd65f5160ba6411", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", - "transactionIndex": 1, - "gasUsed": "621518", - "logsBloom": "0x00000020000000000000000000000000000000000040000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000002000000000000000000000000000000000000000000000080000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x4d5427ba5759721f27265eca1417b6c5911724c4c21c2b0456713cb0dca99377", - "transactionHash": "0x251195ad7dabd55250d3d7e56ca4fb46842bf6c03d03ae6ffcd65f5160ba6411", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 3084543, - "transactionHash": "0x251195ad7dabd55250d3d7e56ca4fb46842bf6c03d03ae6ffcd65f5160ba6411", - "address": "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "logIndex": 0, - "blockHash": "0x4d5427ba5759721f27265eca1417b6c5911724c4c21c2b0456713cb0dca99377" - } - ], - "blockNumber": 3084543, - "cumulativeGasUsed": "621518", - "status": 1, - "byzantium": true - }, - "args": [ - "DAI", - "DAI" - ], - "numDeployments": 1, - "solcInputHash": "4ee8a1f2013c130bec1668c5304bc76a", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/TestERC20.sol\":\"TestERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(address from, address to, uint256 amount) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(address owner, address spender, uint256 amount) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\"},\"src/token/TestERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\ncontract TestERC20 is ERC20 {\\n constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {\\n _mint(msg.sender, 1000000 ether);\\n }\\n}\\n\",\"keccak256\":\"0x9f67e6b63ca87e6c98b2986364ce16a747ce4098e9146fffb17ea13863c0b7e4\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b5060405162000c5838038062000c5883398101604081905262000034916200020a565b8181600362000044838262000302565b50600462000053828262000302565b505050620000723369d3c21bcecceda10000006200007a60201b60201c565b5050620003f6565b6001600160a01b038216620000d55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e99190620003ce565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016d57600080fd5b81516001600160401b03808211156200018a576200018a62000145565b604051601f8301601f19908116603f01168101908282118183101715620001b557620001b562000145565b81604052838152602092508683858801011115620001d257600080fd5b600091505b83821015620001f65785820183015181830184015290820190620001d7565b600093810190920192909252949350505050565b600080604083850312156200021e57600080fd5b82516001600160401b03808211156200023657600080fd5b62000244868387016200015b565b935060208501519150808211156200025b57600080fd5b506200026a858286016200015b565b9150509250929050565b600181811c908216806200028957607f821691505b602082108103620002aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200014057600081815260208120601f850160051c81016020861015620002d95750805b601f850160051c820191505b81811015620002fa57828155600101620002e5565b505050505050565b81516001600160401b038111156200031e576200031e62000145565b62000336816200032f845462000274565b84620002b0565b602080601f8311600181146200036e5760008415620003555750858301515b600019600386901b1c1916600185901b178555620002fa565b600085815260208120601f198616915b828110156200039f578886015182559484019460019091019084016200037e565b5085821015620003be5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620003f057634e487b7160e01b600052601160045260246000fd5b92915050565b61085280620004066000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea26469706673582212203a956e65a766c03ac95ae037cbdfb51b56810340c98132c2d2482405d386101b64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea26469706673582212203a956e65a766c03ac95ae037cbdfb51b56810340c98132c2d2482405d386101b64736f6c63430008120033", - "devdoc": { - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "decreaseAllowance(address,uint256)": { - "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." - }, - "increaseAllowance(address,uint256)": { - "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address." - }, - "name()": { - "details": "Returns the name of the token." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 393, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 399, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 401, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 403, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - }, - { - "astId": 405, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_symbol", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DAIFaucet.json b/contracts/deployments/arbitrumSepoliaDevnet/DAIFaucet.json deleted file mode 100644 index 677639852..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DAIFaucet.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "address": "0xB5b39A1bcD2D7097A8824B3cC18Ebd2dFb0D9B5E", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "amount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "changeAmount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "request", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "withdrewAlready", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xdf588e021ff6efc1b61abc01989d34c5a404b7cd4b6091425db964a334e4e547", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xB5b39A1bcD2D7097A8824B3cC18Ebd2dFb0D9B5E", - "transactionIndex": 1, - "gasUsed": "435555", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x2bfdb7df6af7cd9e6e96a159146ebe27fd2a1021f90f340503fb16acc5cf656a", - "transactionHash": "0xdf588e021ff6efc1b61abc01989d34c5a404b7cd4b6091425db964a334e4e547", - "logs": [], - "blockNumber": 3084545, - "cumulativeGasUsed": "435555", - "status": 1, - "byzantium": true - }, - "args": [ - "0x593e89704D285B0c3fbF157c7CF2537456CE64b5" - ], - "numDeployments": 1, - "solcInputHash": "4ee8a1f2013c130bec1668c5304bc76a", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"amount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"changeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"withdrewAlready\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/Faucet.sol\":\"Faucet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/token/Faucet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ncontract Faucet {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n IERC20 public token;\\n address public governor;\\n mapping(address => bool) public withdrewAlready;\\n uint256 public amount = 10_000 ether;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(governor) == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n constructor(IERC20 _token) {\\n token = _token;\\n governor = msg.sender;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n function changeGovernor(address _governor) public onlyByGovernor {\\n governor = _governor;\\n }\\n\\n function changeAmount(uint256 _amount) public onlyByGovernor {\\n amount = _amount;\\n }\\n\\n function withdraw() public onlyByGovernor {\\n token.transfer(governor, token.balanceOf(address(this)));\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function request() public {\\n require(\\n !withdrewAlready[msg.sender],\\n \\\"You have used this faucet already. If you need more tokens, please use another address.\\\"\\n );\\n token.transfer(msg.sender, amount);\\n withdrewAlready[msg.sender] = true;\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n function balance() public view returns (uint) {\\n return token.balanceOf(address(this));\\n }\\n}\\n\",\"keccak256\":\"0x3a54681cc304ccbfdb42215104b63809919a432ac5d3986d3021a11fcc7a1cc3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405269021e19e0c9bab240000060035534801561001e57600080fd5b5060405161065538038061065583398101604081905261003d9161006b565b600080546001600160a01b039092166001600160a01b0319928316179055600180549091163317905561009b565b60006020828403121561007d57600080fd5b81516001600160a01b038116811461009457600080fd5b9392505050565b6105ab806100aa6000396000f3fe608060405234801561001057600080fd5b50600436106100835760003560e01c80630c340a2414610088578063338cdca1146100b15780633ccfd60b146100bb5780635c320516146100c3578063aa8c217c146100d6578063b69ef8a8146100ed578063d61c40dc146100f5578063e4c0aaf414610128578063fc0c546a1461013b575b600080fd5b60015461009b906001600160a01b031681565b6040516100a8919061049b565b60405180910390f35b6100b961014e565b005b6100b961028f565b6100b96100d13660046104af565b6103a9565b6100df60035481565b6040519081526020016100a8565b6100df6103d8565b6101186101033660046104c8565b60026020526000908152604090205460ff1681565b60405190151581526020016100a8565b6100b96101363660046104c8565b61044f565b60005461009b906001600160a01b031681565b3360009081526002602052604090205460ff16156101f95760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a4015b60405180910390fd5b60005460035460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027291906104f8565b50336000908152600260205260409020805460ff19166001179055565b6001546001600160a01b031633146102b95760405162461bcd60e51b81526004016101f09061051a565b6000546001546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906102f690309060040161049b565b602060405180830381865afa158015610313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610337919061055c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a691906104f8565b50565b6001546001600160a01b031633146103d35760405162461bcd60e51b81526004016101f09061051a565b600355565b600080546040516370a0823160e01b81526001600160a01b03909116906370a082319061040990309060040161049b565b602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a919061055c565b905090565b6001546001600160a01b031633146104795760405162461bcd60e51b81526004016101f09061051a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0391909116815260200190565b6000602082840312156104c157600080fd5b5035919050565b6000602082840312156104da57600080fd5b81356001600160a01b03811681146104f157600080fd5b9392505050565b60006020828403121561050a57600080fd5b815180151581146104f157600080fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60006020828403121561056e57600080fd5b505191905056fea26469706673582212204f7fd812260eacd88f23b436eb40b4943480e914005f0a0f2738f0d3c9696a5964736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100835760003560e01c80630c340a2414610088578063338cdca1146100b15780633ccfd60b146100bb5780635c320516146100c3578063aa8c217c146100d6578063b69ef8a8146100ed578063d61c40dc146100f5578063e4c0aaf414610128578063fc0c546a1461013b575b600080fd5b60015461009b906001600160a01b031681565b6040516100a8919061049b565b60405180910390f35b6100b961014e565b005b6100b961028f565b6100b96100d13660046104af565b6103a9565b6100df60035481565b6040519081526020016100a8565b6100df6103d8565b6101186101033660046104c8565b60026020526000908152604090205460ff1681565b60405190151581526020016100a8565b6100b96101363660046104c8565b61044f565b60005461009b906001600160a01b031681565b3360009081526002602052604090205460ff16156101f95760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a4015b60405180910390fd5b60005460035460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027291906104f8565b50336000908152600260205260409020805460ff19166001179055565b6001546001600160a01b031633146102b95760405162461bcd60e51b81526004016101f09061051a565b6000546001546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906102f690309060040161049b565b602060405180830381865afa158015610313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610337919061055c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a691906104f8565b50565b6001546001600160a01b031633146103d35760405162461bcd60e51b81526004016101f09061051a565b600355565b600080546040516370a0823160e01b81526001600160a01b03909116906370a082319061040990309060040161049b565b602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a919061055c565b905090565b6001546001600160a01b031633146104795760405162461bcd60e51b81526004016101f09061051a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0391909116815260200190565b6000602082840312156104c157600080fd5b5035919050565b6000602082840312156104da57600080fd5b81356001600160a01b03811681146104f157600080fd5b9392505050565b60006020828403121561050a57600080fd5b815180151581146104f157600080fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60006020828403121561056e57600080fd5b505191905056fea26469706673582212204f7fd812260eacd88f23b436eb40b4943480e914005f0a0f2738f0d3c9696a5964736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 24559, - "contract": "src/token/Faucet.sol:Faucet", - "label": "token", - "offset": 0, - "slot": "0", - "type": "t_contract(IERC20)1042" - }, - { - "astId": 24561, - "contract": "src/token/Faucet.sol:Faucet", - "label": "governor", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 24565, - "contract": "src/token/Faucet.sol:Faucet", - "label": "withdrewAlready", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 24568, - "contract": "src/token/Faucet.sol:Faucet", - "label": "amount", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20)1042": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic.json deleted file mode 100644 index 64c6ddddd..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic.json +++ /dev/null @@ -1,1209 +0,0 @@ -{ - "address": "0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0xddd435d6586de97d05fb1ca32d0fd490f427c086be46ab9f8622e55f7f039a05", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1", - "transactionIndex": 2, - "gasUsed": "178492", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1f6c9d41489286adf1bc958881c75266eb876f784c07d3d303dc1e60445852a2", - "transactionHash": "0xddd435d6586de97d05fb1ca32d0fd490f427c086be46ab9f8622e55f7f039a05", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 175286074, - "transactionHash": "0xddd435d6586de97d05fb1ca32d0fd490f427c086be46ab9f8622e55f7f039a05", - "address": "0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 1, - "blockHash": "0x1f6c9d41489286adf1bc958881c75266eb876f784c07d3d303dc1e60445852a2" - } - ], - "blockNumber": 175286074, - "cumulativeGasUsed": "205532", - "status": 1, - "byzantium": true - }, - "args": [ - "0xD76E74049003faCe2EBA0B6FB61DFC9941da959F", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 2, - "solcInputHash": "55ee2edfcfbef3e6f4c10ec53a4be5f5", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitClassicProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220c725b686c35c73323e89d3a1c5ad844b99f0379163dce99bcd79b25231551a8164736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220c725b686c35c73323e89d3a1c5ad844b99f0379163dce99bcd79b25231551a8164736f6c634300081c0033", - "execute": { - "methodName": "reinitialize", - "args": [ - "0x3829A2486d53ee984a0ca2D76552715726b77138" - ] - }, - "implementation": "0xc4cC0274E55a9818f8cF42640B1De61d269425ad", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity.json deleted file mode 100644 index 19f34b347..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity.json +++ /dev/null @@ -1,1009 +0,0 @@ -{ - "address": "0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0xbe90d4066f62381a1a2c725364c3d35093e1ff685736f3fa0a7b75c3b0e82f93", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5", - "transactionIndex": 1, - "gasUsed": "189732", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000004000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1e4647532736ec4a239971727f05a17b1bb50fc89c0ec7a8da6e34f4f5bfcc90", - "transactionHash": "0xbe90d4066f62381a1a2c725364c3d35093e1ff685736f3fa0a7b75c3b0e82f93", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 96308536, - "transactionHash": "0xbe90d4066f62381a1a2c725364c3d35093e1ff685736f3fa0a7b75c3b0e82f93", - "address": "0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x1e4647532736ec4a239971727f05a17b1bb50fc89c0ec7a8da6e34f4f5bfcc90" - } - ], - "blockNumber": 96308536, - "cumulativeGasUsed": "189732", - "status": 1, - "byzantium": true - }, - "args": [ - "0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitClassicUniversityProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220a67e53546ab2c83f023c185d90506ad48d4e7af6339cf6db0c4ed97ec9ed376f64736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220a67e53546ab2c83f023c185d90506ad48d4e7af6339cf6db0c4ed97ec9ed376f64736f6c63430008180033", - "execute": { - "methodName": "initialize", - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0x0000000000000000000000000000000000000000" - ] - }, - "implementation": "0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity_Implementation.json deleted file mode 100644 index 3ac36edd4..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity_Implementation.json +++ /dev/null @@ -1,1540 +0,0 @@ -{ - "address": "0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x89ac5a2ce88c22071edfaf2f092cb26862b52facde1274b9a495dccdd03a41d9", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B", - "transactionIndex": 2, - "gasUsed": "3665145", - "logsBloom": "0x00000800000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000400000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x9c2007f9245166eb377461ad5c2dd50dfa7e21fc79284f7d7591fb8348960fe3", - "transactionHash": "0x89ac5a2ce88c22071edfaf2f092cb26862b52facde1274b9a495dccdd03a41d9", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 96308519, - "transactionHash": "0x89ac5a2ce88c22071edfaf2f092cb26862b52facde1274b9a495dccdd03a41d9", - "address": "0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 6, - "blockHash": "0x9c2007f9245166eb377461ad5c2dd50dfa7e21fc79284f7d7591fb8348960fe3" - } - ], - "blockNumber": 96308519, - "cumulativeGasUsed": "3756092", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commit. Note that justification string is a part of the commit.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"details\":\"Constructor, initializing the implementation to reduce attack surface.\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"initialize(address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"title\":\"DisputeKitClassic Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}],\"InvalidImplementation(address)\":[{\"notice\":\"The `implementation` is not UUPS-compliant\"}]},\"events\":{\"Upgraded(address)\":{\"notice\":\"Emitted when the `implementation` has been successfully upgraded.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitClassic.sol\":\"DisputeKitClassic\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./KlerosCoreBase.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase, UUPSProxiable, Initializable {\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress\\n ) external reinitializer(1) {\\n _initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress\\n );\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x1dc9311f4df8d5c707be5fc0f0e87574b2ca4a4957eb0ffecdf2153a8eace1d2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2 {\\n using SafeERC20 for IERC20;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint256 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function _initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress\\n ) internal {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n emit CourtCreated(\\n 1,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n new uint256[](0)\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n court.supportedDisputeKits[_supportedDisputeKits[i]] = true;\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n courtID,\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, false, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// @param _alreadyTransferred Whether the PNKs have already been transferred to the contract.\\n function setStakeBySortitionModule(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake,\\n bool _alreadyTransferred\\n ) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, _alreadyTransferred, OnError.Return);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = (court.minStake * court.alpha) / ALPHA_DIVISOR;\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n function draw(uint256 _disputeID, uint256 _iterations) external {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = (court.minStake * court.alpha) / ALPHA_DIVISOR;\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n _params.pnkPenaltiesInRound += penalty;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n sortitionModule.penalizeStake(account, penalty);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(penalty),\\n 0,\\n round.feeToken\\n );\\n\\n if (!disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n // The juror is inactive, unstake them.\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(governor).send(round.totalFeesForJurors);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(governor, round.totalFeesForJurors);\\n }\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = (round.pnkAtStakePerJuror * degreeOfCoherence) / ALPHA_DIVISOR;\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Give back the locked PNKs in case the juror fully unstaked earlier.\\n if (!sortitionModule.isJurorStaked(account)) {\\n pinakion.safeTransfer(account, pnkLocked);\\n }\\n\\n // Transfer the rewards\\n uint256 pnkReward = ((_params.pnkPenaltiesInRound / _params.coherentCount) * degreeOfCoherence) / ALPHA_DIVISOR;\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = ((round.totalFeesForJurors / _params.coherentCount) * degreeOfCoherence) / ALPHA_DIVISOR;\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(account).send(feeReward);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(account, feeReward);\\n }\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(governor).send(leftoverFeeReward);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(governor, leftoverFeeReward);\\n }\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) public view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _alreadyTransferred Whether the PNKs were already transferred to/from the staking contract.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake,\\n bool _alreadyTransferred,\\n OnError _onError\\n ) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID > courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.setStake(\\n _account,\\n _courtID,\\n _newStake,\\n _alreadyTransferred\\n );\\n if (stakingResult != StakingResult.Successful) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibeInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error DepthLevelMax();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error ArraysLengthMismatch();\\n error StakingInTooManyCourts();\\n error StakingNotPossibeInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n}\\n\",\"keccak256\":\"0x7435f0d24fde25165d4de404cbd4040339be136bac507196bfed0bb1f9f493f4\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassic.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"../KlerosCore.sol\\\";\\nimport \\\"../interfaces/IDisputeKit.sol\\\";\\nimport \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/// @title DisputeKitClassic\\n/// Dispute kit implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitClassic is IDisputeKit, Initializable, UUPSProxiable {\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n function initialize(address _governor, KlerosCore _core) external reinitializer(1) {\\n governor = _governor;\\n core = _core;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n // TODO: Handle the situation when no one has staked yet.\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n\\n if (_postDrawCheck(_coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commit. Note that justification string is a part of the commit.\\n function castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) external notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == keccak256(abi.encodePacked(_choice, _salt)),\\n \\\"The commit must match the choice in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, msg.sender, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).send(msg.value - contribution);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.send(amount); // Deliberate use of send to prevent reverting fallback. It's the user's responsibility to accept ETH.\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalVoted == round.votes.length;\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return Whether the address can be drawn or not.\\n function _postDrawCheck(uint256 _coreDisputeID, address _juror) internal view returns (bool) {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n uint256 lockedAmountPerJuror = core\\n .getRoundInfo(_coreDisputeID, core.getNumberOfRounds(_coreDisputeID) - 1)\\n .pnkAtStakePerJuror;\\n (uint256 totalStaked, uint256 totalLocked, , ) = core.sortitionModule().getJurorBalance(_juror, courtID);\\n return totalStaked >= totalLocked + lockedAmountPerJuror;\\n }\\n}\\n\",\"keccak256\":\"0xde57a6569422626bf1ec215f3442ede6c13df57f6f5d27da3bc8cd8bc3d313cd\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0xe841a4fe8ec109ce17dde4457bf1583c8b499109b05887c53a49a3207fc6e80b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xa4dc6b958197adead238de4246cd04e7389c3dc1b9f968acd10985f8fc5b74cf\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xb9590d05f9df08dd0ed027b2eb40c7b1885b7574a121b1b0b7da0920429bb4d5\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake,\\n bool _alreadyTransferred\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(address _account, uint256 _relativeAmount) external;\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n}\\n\",\"keccak256\":\"0x18a4ff126bb51e7b5b0e3fbff7cf0dbbcfff7195ad79307e69cdbc9226e63502\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked\\n}\\n\",\"keccak256\":\"0x486016fb74cc91439c2ec918e97a79190ab4eed223987d516986fff8eaeecfbf\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x3e39adb9cdd9f86b0defc8f6e1223533d86f82c804e186193f729c32c10161b1\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x560ea64115636ecd6b3596248817125551c038ce1648019fde3cbe02d9759a30\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxiable\\n * @author Simon Malatrait \\n * @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n * The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n *\\n * IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n * This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSProxiable` with a custom implementation of upgrades.\\n *\\n * The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\n */\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /**\\n * Emitted when the `implementation` has been successfully upgraded.\\n * @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n */\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /**\\n * @dev The call is from an unauthorized context.\\n */\\n error UUPSUnauthorizedCallContext();\\n\\n /**\\n * @dev The storage `slot` is unsupported as a UUID.\\n */\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Storage variable of the proxiable contract address.\\n * It is used to check whether or not the current call is from the proxy.\\n */\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n * @dev Called by {upgradeToAndCall}.\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Upgrade mechanism including access control and UUPS-compliance.\\n * @param newImplementation Address of the new implementation contract.\\n * @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n *\\n * @dev Reverts if the execution is not performed via delegatecall or the execution\\n * context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n /* Check that the execution is being performed through a delegatecall call and that the execution context is\\n a proxy contract with an implementation (as defined in ERC1967) pointing to self. */\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the if statement.\\n */\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5956855046cdda7aa45f44e379ef45323af7266c44c817d1266d8b32d52b0e22\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000d9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff1615620000765760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b0390811614620000d65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613ec76200010360003960008181611588015281816115b101526117a90152613ec76000f3fe6080604052600436106101825760003560e01c80636d4cd8ea116100d7578063b6ede54011610085578063b6ede540146104ca578063ba66fde7146104ea578063be4676041461050a578063d2b8035a14610520578063da3beb8c14610540578063e349ad3014610412578063e4c0aaf414610560578063f2f4eb261461058057600080fd5b80636d4cd8ea146103d2578063751accd0146103f2578063796490f9146104125780637c04034e146104285780638e42646014610448578063a7cc08fe14610468578063b34bfaa8146104b457600080fd5b80634f1ef286116101345780634f1ef286146102c157806352d1902d146102d4578063564a565d146102e95780635c92e2f61461031857806365540b9614610338578063675926f61461036557806369f3f0411461038557600080fd5b80630baa64d1146101875780630c340a24146101bc5780631200aabc146101f45780631c3db16d1461022f578063362c34791461026c578063485cc9551461028c5780634b2f0ea0146102ae575b600080fd5b34801561019357600080fd5b506101a76101a2366004613174565b6105a0565b60405190151581526020015b60405180910390f35b3480156101c857600080fd5b506000546101dc906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b34801561020057600080fd5b5061022161020f366004613174565b60036020526000908152604090205481565b6040519081526020016101b3565b34801561023b57600080fd5b5061024f61024a366004613174565b610617565b6040805193845291151560208401521515908201526060016101b3565b34801561027857600080fd5b506102216102873660046131a2565b610785565b34801561029857600080fd5b506102ac6102a73660046131df565b610c10565b005b6102ac6102bc366004613218565b610d0d565b6102ac6102cf366004613327565b611574565b3480156102e057600080fd5b5061022161179c565b3480156102f557600080fd5b50610309610304366004613174565b6117fa565b6040516101b3939291906133c6565b34801561032457600080fd5b506102ac610333366004613432565b6118c0565b34801561034457600080fd5b50610358610353366004613174565b611bc5565b6040516101b39190613484565b34801561037157600080fd5b506102216103803660046134c8565b611c89565b34801561039157600080fd5b506103a56103a0366004613503565b611dce565b604080519687529415156020870152938501929092526060840152608083015260a082015260c0016101b3565b3480156103de57600080fd5b506101a76103ed366004613174565b611e86565b3480156103fe57600080fd5b506102ac61040d36600461352f565b611efd565b34801561041e57600080fd5b5061022161271081565b34801561043457600080fd5b506102ac610443366004613587565b611fc9565b34801561045457600080fd5b506102ac61046336600461361f565b61269a565b34801561047457600080fd5b50610488610483366004613503565b6126e6565b604080516001600160a01b039095168552602085019390935291830152151560608201526080016101b3565b3480156104c057600080fd5b50610221614e2081565b3480156104d657600080fd5b506102ac6104e536600461363c565b6127ac565b3480156104f657600080fd5b506101a7610505366004613503565b612981565b34801561051657600080fd5b5061022161138881565b34801561052c57600080fd5b506101dc61053b366004613218565b612a1c565b34801561054c57600080fd5b5061022161055b366004613218565b612d25565b34801561056c57600080fd5b506102ac61057b36600461361f565b612e78565b34801561058c57600080fd5b506001546101dc906001600160a01b031681565b6000818152600360205260408120546002805483929081106105c4576105c46136c3565b600091825260208220600590910201805490925082906105e6906001906136ef565b815481106105f6576105f66136c3565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610643576106436136c3565b60009182526020822060059091020180549092508290610665906001906136ef565b81548110610675576106756136c3565b60009182526020909120600c90910201600381015460ff1694509050836106a05780600101546106a3565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610716919061372e565b5090935060049250610726915050565b81600481111561073857610738613795565b0361077b57600061074888611bc5565b905080516001036107795780600081518110610766576107666136c3565b6020026020010151965060009550600194505b505b5050509193909250565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156107d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f7919061372e565b5093505050508061084f5760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c691906137ab565b156109045760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610846565b600086815260036020526040812054600280549091908110610928576109286136c3565b6000918252602080832088845260036005909302019182019052604082205481549193508391811061095c5761095c6136c3565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa1580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db91906137c6565b5050600087815260078401602052604090205490915060ff16610a25576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610b6a565b808603610a9a576000868152600683016020526040902054610a48576000610a93565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610a899190613802565b610a939190613819565b9450610b6a565b600081815260078301602052604090205460ff16610b6a5781600601600083600a01600181548110610ace57610ace6136c3565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610b0457610b046136c3565b9060005260206000200154815260200190815260200160002054610b28919061383b565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610b5d9190613802565b610b679190613819565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610c04576040516001600160a01b0389169086156108fc029087906000818181858888f15050604080518a8152602081018a90526001600160a01b038d1694508b93508d92507f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae910160405180910390a45b50505050949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff1680610c59575080546001600160401b03808416911610155b15610c765760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b178255600080546001600160a01b038781166001600160a01b0319928316179092556001805492871692909116919091179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b600082815260036020526040902054600280548492908110610d3157610d316136c3565b600091825260209091206002600590920201015460ff1615610d655760405162461bcd60e51b81526004016108469061384e565b600083815260036020526040812054600280549091908110610d8957610d896136c3565b906000526020600020906005020190508060010154831115610ded5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610846565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e9190613885565b91509150814210158015610e7157508042105b610eb65760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610846565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa158015610ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1b91906137c6565b50509050868103610f30576127109150610fb1565b612710611388610f4086866136ef565b610f4a9190613802565b610f549190613819565b610f5e85426136ef565b10610fab5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610846565b614e2091505b84546000908690610fc4906001906136ef565b81548110610fd457610fd46136c3565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105791906138a9565b61106191906136ef565b60008a815260078401602052604090205490915060ff16156110c55760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610846565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113391906138a9565b905060006127106111448784613802565b61114e9190613819565b611158908361383b565b60008c8152600686016020526040812054919250908211156112095760008c8152600686016020526040902054349061119190846136ef565b116111b65760008c81526006860160205260409020546111b190836136ef565b6111b8565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f85604051611200929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f84529091528120805483929061123590849061383b565b909155505060008c81526006860160205260408120805483929061125a90849061383b565b909155505060008c8152600686016020526040902054821161132c5760008c81526006860160205260408120546009870180549192909161129c90849061383b565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156115375782856009015461134991906136ef565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bb91906137ab565b156113d45760028a01805460ff191660011790556114b7565b895460038b0160006113e787600161383b565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161146291815260200190565b602060405180830381865afa15801561147f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a391906138a9565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b8152600401611504939291906138fc565b6000604051808303818588803b15801561151d57600080fd5b505af1158015611531573d6000803e3d6000fd5b50505050505b8034111561156557336108fc61154d83346136ef565b6040518115909202916000818181858888f150505050505b50505050505050505050505050565b61157d82612ec4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806115fb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115ef600080516020613e728339815191525490565b6001600160a01b031614155b156116195760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611673575060408051601f3d908101601f19168201909252611670918101906138a9565b60015b61169b57604051630c76093760e01b81526001600160a01b0383166004820152602401610846565b600080516020613e7283398151915281146116cc57604051632a87526960e21b815260048101829052602401610846565b600080516020613e728339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611797576000836001600160a01b031683604051611733919061399b565b600060405180830381855af49150503d806000811461176e576040519150601f19603f3d011682016040523d82523d6000602084013e611773565b606091505b5050905080611795576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117e75760405163703e46dd60e11b815260040160405180910390fd5b50600080516020613e7283398151915290565b6002818154811061180a57600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff909116929161183d906138c2565b80601f0160208091040260200160405190810160405280929190818152602001828054611869906138c2565b80156118b65780601f1061188b576101008083540402835291602001916118b6565b820191906000526020600020905b81548152906001019060200180831161189957829003601f168201915b5050505050905083565b6000848152600360205260409020546002805486929081106118e4576118e46136c3565b600091825260209091206002600590920201015460ff16156119185760405162461bcd60e51b81526004016108469061384e565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015611962573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611986919061372e565b5090935060019250611996915050565b8160048111156119a8576119a8613795565b14611a055760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610846565b82611a425760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610846565b600086815260036020526040812054600280549091908110611a6657611a666136c3565b60009182526020822060059091020180549092508290611a88906001906136ef565b81548110611a9857611a986136c3565b90600052602060002090600c0201905060005b86811015611b5e573382898984818110611ac757611ac76136c3565b9050602002013581548110611ade57611ade6136c3565b60009182526020909120600490910201546001600160a01b031614611b155760405162461bcd60e51b8152600401610846906139b7565b8582898984818110611b2957611b296136c3565b9050602002013581548110611b4057611b406136c3565b60009182526020909120600160049092020181019190915501611aab565b5086869050816005016000828254611b76919061383b565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890611bb3908b908b908b90613a20565b60405180910390a35050505050505050565b6000818152600360205260408120546002805460609392908110611beb57611beb6136c3565b60009182526020822060059091020180549092508290611c0d906001906136ef565b81548110611c1d57611c1d6136c3565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c7b57602002820191906000526020600020905b815481526020019060010190808311611c67575b505050505092505050919050565b600085815260036020526040812054600280548392908110611cad57611cad6136c3565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611ce157611ce16136c3565b90600052602060002090600c02016000018681548110611d0357611d036136c3565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8591906137c6565b506003850154919350915060ff168015611da957508183600201541480611da95750805b15611dbc57612710945050505050611dc5565b60009450505050505b95945050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611dff57611dff6136c3565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611e3357611e336136c3565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611eaa57611eaa6136c3565b60009182526020822060059091020180549092508290611ecc906001906136ef565b81548110611edc57611edc6136c3565b60009182526020909120600c90910201805460049091015414949350505050565b6000546001600160a01b03163314611f275760405162461bcd60e51b815260040161084690613a44565b6000836001600160a01b03168383604051611f42919061399b565b60006040518083038185875af1925050503d8060008114611f7f576040519150601f19603f3d011682016040523d82523d6000602084013e611f84565b606091505b50509050806117955760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610846565b600086815260036020526040902054600280548892908110611fed57611fed6136c3565b600091825260209091206002600590920201015460ff16156120215760405162461bcd60e51b81526004016108469061384e565b60015460405163564a565d60e01b8152600481018990526000916001600160a01b03169063564a565d9060240160a060405180830381865afa15801561206b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208f919061372e565b509093506002925061209f915050565b8160048111156120b1576120b1613795565b1461210c5760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610846565b8561214e5760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610846565b600088815260036020526040812054600280549091908110612172576121726136c3565b9060005260206000209060050201905080600101548611156121cd5760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610846565b805460009082906121e0906001906136ef565b815481106121f0576121f06136c3565b60009182526020822060015460405163564a565d60e01b8152600481018f9052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa15801561224b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226f919061372e565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee9190613a86565b505050505091505060005b8a8110156125605733848d8d84818110612315576123156136c3565b905060200201358154811061232c5761232c6136c3565b60009182526020909120600490910201546001600160a01b0316146123635760405162461bcd60e51b8152600401610846906139b7565b8115806123d6575060408051602081018c90529081018a905260600160405160208183030381529060405280519060200120846000018d8d848181106123ab576123ab6136c3565b90506020020135815481106123c2576123c26136c3565b906000526020600020906004020160010154145b6124485760405162461bcd60e51b815260206004820152603d60248201527f54686520636f6d6d6974206d757374206d61746368207468652063686f69636560448201527f20696e20636f7572747320776974682068696464656e20766f7465732e0000006064820152608401610846565b838c8c8381811061245b5761245b6136c3565b9050602002013581548110612472576124726136c3565b600091825260209091206003600490920201015460ff16156124cb5760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610846565b89848d8d848181106124df576124df6136c3565b90506020020135815481106124f6576124f66136c3565b60009182526020909120600260049092020101556001848d8d8481811061251f5761251f6136c3565b9050602002013581548110612536576125366136c3565b60009182526020909120600490910201600301805460ff19169115159190911790556001016122f9565b508a8a9050836004016000828254612578919061383b565b90915550506000898152600284016020526040812080548c929061259d90849061383b565b9091555050600183015489036125cc57600383015460ff16156125c75760038301805460ff191690555b612645565b60018301546000908152600284016020526040808220548b83529120540361260e57600383015460ff166125c75760038301805460ff19166001179055612645565b60018301546000908152600284016020526040808220548b83529120541115612645576001830189905560038301805460ff191690555b88336001600160a01b03168d7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48e8e8c60405161268493929190613af0565b60405180910390a4505050505050505050505050565b6000546001600160a01b031633146126c45760405162461bcd60e51b815260040161084690613a44565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a81526020019081526020016000205481548110612714576127146136c3565b600091825260208083208a8452600360059093020191820190526040822054815491935083918110612748576127486136c3565b90600052602060002090600c0201600001878154811061276a5761276a6136c3565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146127d65760405162461bcd60e51b815260040161084690613b20565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad201612861858783613bb4565b50805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156128b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128dc91906138a9565b6128e691906136ef565b81526020808201929092526040908101600090812093909355835460018181018655858552838520600b600c909302019182018890556003808301805460ff19169092179091558b855290925291829020849055905188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab581089061296f908a908a908a90613c74565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106129a5576129a56136c3565b600091825260208083208784526003600590930201918201905260408220548154919350839181106129d9576129d96136c3565b90600052602060002090600c020160000184815481106129fb576129fb6136c3565b600091825260209091206004909102016003015460ff169695505050505050565b6001546000906001600160a01b03163314612a495760405162461bcd60e51b815260040161084690613b20565b600083815260036020526040902054600280548592908110612a6d57612a6d6136c3565b600091825260209091206002600590920201015460ff1615612aa15760405162461bcd60e51b81526004016108469061384e565b600084815260036020526040812054600280549091908110612ac557612ac56136c3565b60009182526020822060059091020180549092508290612ae7906001906136ef565b81548110612af757612af76136c3565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b809190613caa565b60015460405163564a565d60e01b8152600481018a90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf3919061372e565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018d9052604482018c90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa158015612c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7b9190613caa565b9650612c878988612ef1565b15612d1457604080516080810182526001600160a01b03898116825260006020808401828152948401828152606085018381528a5460018082018d558c8652939094209551600490940290950180546001600160a01b0319169390941692909217835593519382019390935591516002830155516003909101805460ff1916911515919091179055612d19565b600096505b50505050505092915050565b600082815260036020526040812054600280548392908110612d4957612d496136c3565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612d7d57612d7d6136c3565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0091906137c6565b5091509150826004015460001480612e2f575080158015612e2f57506000828152600284016020526040902054155b15612e41576000945050505050612e72565b8015612e56575050600401549150612e729050565b506000908152600290910160205260409020549150612e729050565b92915050565b6000546001600160a01b03163314612ea25760405162461bcd60e51b815260040161084690613a44565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612eee5760405162461bcd60e51b815260040161084690613a44565b50565b60015460405163564a565d60e01b81526004810184905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f63919061372e565b505060018054604051637e37c78b60e11b8152600481018a90529495506000946001600160a01b039091169350638a9bb02a9250889190849063fc6f8f1690602401602060405180830381865afa158015612fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe691906138a9565b612ff091906136ef565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381865afa158015613031573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130599190810190613d5a565b602001519050600080600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d99190613caa565b604051631a383be960e31b81526001600160a01b0388811660048301526001600160601b0387166024830152919091169063d1c1df4890604401608060405180830381865afa158015613130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131549190613e3b565b5050915091508281613166919061383b565b909110159695505050505050565b60006020828403121561318657600080fd5b5035919050565b6001600160a01b0381168114612eee57600080fd5b600080600080608085870312156131b857600080fd5b8435935060208501356131ca8161318d565b93969395505050506040820135916060013590565b600080604083850312156131f257600080fd5b82356131fd8161318d565b9150602083013561320d8161318d565b809150509250929050565b6000806040838503121561322b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156132735761327361323a565b60405290565b604051601f8201601f191681016001600160401b03811182821017156132a1576132a161323a565b604052919050565b60006001600160401b038311156132c2576132c261323a565b6132d5601f8401601f1916602001613279565b90508281528383830111156132e957600080fd5b828260208301376000602084830101529392505050565b600082601f83011261331157600080fd5b613320838335602085016132a9565b9392505050565b6000806040838503121561333a57600080fd5b82356133458161318d565b915060208301356001600160401b0381111561336057600080fd5b61336c85828601613300565b9150509250929050565b60005b83811015613391578181015183820152602001613379565b50506000910152565b600081518084526133b2816020860160208601613376565b601f01601f19169290920160200192915050565b8381528215156020820152606060408201526000611dc5606083018461339a565b60008083601f8401126133f957600080fd5b5081356001600160401b0381111561341057600080fd5b6020830191508360208260051b850101111561342b57600080fd5b9250929050565b6000806000806060858703121561344857600080fd5b8435935060208501356001600160401b0381111561346557600080fd5b613471878288016133e7565b9598909750949560400135949350505050565b6020808252825182820181905260009190848201906040850190845b818110156134bc578351835292840192918401916001016134a0565b50909695505050505050565b600080600080600060a086880312156134e057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060006060848603121561351857600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561354457600080fd5b833561354f8161318d565b92506020840135915060408401356001600160401b0381111561357157600080fd5b61357d86828701613300565b9150509250925092565b60008060008060008060a087890312156135a057600080fd5b8635955060208701356001600160401b03808211156135be57600080fd5b6135ca8a838b016133e7565b9097509550604089013594506060890135935060808901359150808211156135f157600080fd5b508701601f8101891361360357600080fd5b613612898235602084016132a9565b9150509295509295509295565b60006020828403121561363157600080fd5b81356133208161318d565b60008060008060006080868803121561365457600080fd5b853594506020860135935060408601356001600160401b038082111561367957600080fd5b818801915088601f83011261368d57600080fd5b81358181111561369c57600080fd5b8960208285010111156136ae57600080fd5b96999598505060200195606001359392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115612e7257612e726136d9565b80516001600160601b038116811461371957600080fd5b919050565b8051801515811461371957600080fd5b600080600080600060a0868803121561374657600080fd5b61374f86613702565b9450602086015161375f8161318d565b60408701519094506005811061377457600080fd5b92506137826060870161371e565b9150608086015190509295509295909350565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156137bd57600080fd5b6133208261371e565b6000806000606084860312156137db57600080fd5b835192506137eb6020850161371e565b91506137f96040850161371e565b90509250925092565b8082028115828204841417612e7257612e726136d9565b60008261383657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115612e7257612e726136d9565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b6000806040838503121561389857600080fd5b505080516020909101519092909150565b6000602082840312156138bb57600080fd5b5051919050565b600181811c908216806138d657607f821691505b6020821081036138f657634e487b7160e01b600052602260045260246000fd5b50919050565b83815260006020846020840152606060408401526000845461391d816138c2565b806060870152608060018084166000811461393f576001811461395b5761398b565b60ff19851660808a0152608084151560051b8a0101955061398b565b89600052602060002060005b858110156139825781548b8201860152908301908801613967565b8a016080019650505b50939a9950505050505050505050565b600082516139ad818460208701613376565b9190910192915050565b6020808252601f908201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e00604082015260600190565b81835260006001600160fb1b03831115613a0757600080fd5b8260051b80836020870137939093016020019392505050565b604081526000613a346040830185876139ee565b9050826020830152949350505050565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600080600080600080600060e0888a031215613aa157600080fd5b613aaa88613702565b9650613ab86020890161371e565b955060408801519450606088015193506080880151925060a08801519150613ae260c0890161371e565b905092959891949750929550565b604081526000613b046040830185876139ee565b8281036020840152613b16818561339a565b9695505050505050565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611797576000816000526020600020601f850160051c81016020861015613b8d5750805b601f850160051c820191505b81811015613bac57828155600101613b99565b505050505050565b6001600160401b03831115613bcb57613bcb61323a565b613bdf83613bd983546138c2565b83613b64565b6000601f841160018114613c135760008515613bfb5750838201355b600019600387901b1c1916600186901b178355613c6d565b600083815260209020601f19861690835b82811015613c445786850135825560209485019460019092019101613c24565b5086821015613c615760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215613cbc57600080fd5b81516133208161318d565b600082601f830112613cd857600080fd5b815160206001600160401b03821115613cf357613cf361323a565b8160051b613d02828201613279565b9283528481018201928281019087851115613d1c57600080fd5b83870192505b84831015613d44578251613d358161318d565b82529183019190830190613d22565b979650505050505050565b80516137198161318d565b600060208284031215613d6c57600080fd5b81516001600160401b0380821115613d8357600080fd5b908301906101608286031215613d9857600080fd5b613da0613250565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015182811115613de857600080fd5b613df487828601613cc7565b60c08301525060e0838101519082015261010080840151908201526101209150613e1f828401613d4f565b9181019190915261014091820151918101919091529392505050565b60008060008060808587031215613e5157600080fd5b50508251602084015160408501516060909501519196909550909250905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220ece2f97e5f37049420403eea1739d27d704a432100da66c99ed49ffe1796440264736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106101825760003560e01c80636d4cd8ea116100d7578063b6ede54011610085578063b6ede540146104ca578063ba66fde7146104ea578063be4676041461050a578063d2b8035a14610520578063da3beb8c14610540578063e349ad3014610412578063e4c0aaf414610560578063f2f4eb261461058057600080fd5b80636d4cd8ea146103d2578063751accd0146103f2578063796490f9146104125780637c04034e146104285780638e42646014610448578063a7cc08fe14610468578063b34bfaa8146104b457600080fd5b80634f1ef286116101345780634f1ef286146102c157806352d1902d146102d4578063564a565d146102e95780635c92e2f61461031857806365540b9614610338578063675926f61461036557806369f3f0411461038557600080fd5b80630baa64d1146101875780630c340a24146101bc5780631200aabc146101f45780631c3db16d1461022f578063362c34791461026c578063485cc9551461028c5780634b2f0ea0146102ae575b600080fd5b34801561019357600080fd5b506101a76101a2366004613174565b6105a0565b60405190151581526020015b60405180910390f35b3480156101c857600080fd5b506000546101dc906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b34801561020057600080fd5b5061022161020f366004613174565b60036020526000908152604090205481565b6040519081526020016101b3565b34801561023b57600080fd5b5061024f61024a366004613174565b610617565b6040805193845291151560208401521515908201526060016101b3565b34801561027857600080fd5b506102216102873660046131a2565b610785565b34801561029857600080fd5b506102ac6102a73660046131df565b610c10565b005b6102ac6102bc366004613218565b610d0d565b6102ac6102cf366004613327565b611574565b3480156102e057600080fd5b5061022161179c565b3480156102f557600080fd5b50610309610304366004613174565b6117fa565b6040516101b3939291906133c6565b34801561032457600080fd5b506102ac610333366004613432565b6118c0565b34801561034457600080fd5b50610358610353366004613174565b611bc5565b6040516101b39190613484565b34801561037157600080fd5b506102216103803660046134c8565b611c89565b34801561039157600080fd5b506103a56103a0366004613503565b611dce565b604080519687529415156020870152938501929092526060840152608083015260a082015260c0016101b3565b3480156103de57600080fd5b506101a76103ed366004613174565b611e86565b3480156103fe57600080fd5b506102ac61040d36600461352f565b611efd565b34801561041e57600080fd5b5061022161271081565b34801561043457600080fd5b506102ac610443366004613587565b611fc9565b34801561045457600080fd5b506102ac61046336600461361f565b61269a565b34801561047457600080fd5b50610488610483366004613503565b6126e6565b604080516001600160a01b039095168552602085019390935291830152151560608201526080016101b3565b3480156104c057600080fd5b50610221614e2081565b3480156104d657600080fd5b506102ac6104e536600461363c565b6127ac565b3480156104f657600080fd5b506101a7610505366004613503565b612981565b34801561051657600080fd5b5061022161138881565b34801561052c57600080fd5b506101dc61053b366004613218565b612a1c565b34801561054c57600080fd5b5061022161055b366004613218565b612d25565b34801561056c57600080fd5b506102ac61057b36600461361f565b612e78565b34801561058c57600080fd5b506001546101dc906001600160a01b031681565b6000818152600360205260408120546002805483929081106105c4576105c46136c3565b600091825260208220600590910201805490925082906105e6906001906136ef565b815481106105f6576105f66136c3565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610643576106436136c3565b60009182526020822060059091020180549092508290610665906001906136ef565b81548110610675576106756136c3565b60009182526020909120600c90910201600381015460ff1694509050836106a05780600101546106a3565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610716919061372e565b5090935060049250610726915050565b81600481111561073857610738613795565b0361077b57600061074888611bc5565b905080516001036107795780600081518110610766576107666136c3565b6020026020010151965060009550600194505b505b5050509193909250565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156107d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f7919061372e565b5093505050508061084f5760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c691906137ab565b156109045760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610846565b600086815260036020526040812054600280549091908110610928576109286136c3565b6000918252602080832088845260036005909302019182019052604082205481549193508391811061095c5761095c6136c3565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa1580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db91906137c6565b5050600087815260078401602052604090205490915060ff16610a25576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610b6a565b808603610a9a576000868152600683016020526040902054610a48576000610a93565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610a899190613802565b610a939190613819565b9450610b6a565b600081815260078301602052604090205460ff16610b6a5781600601600083600a01600181548110610ace57610ace6136c3565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610b0457610b046136c3565b9060005260206000200154815260200190815260200160002054610b28919061383b565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610b5d9190613802565b610b679190613819565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610c04576040516001600160a01b0389169086156108fc029087906000818181858888f15050604080518a8152602081018a90526001600160a01b038d1694508b93508d92507f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae910160405180910390a45b50505050949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff1680610c59575080546001600160401b03808416911610155b15610c765760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b178255600080546001600160a01b038781166001600160a01b0319928316179092556001805492871692909116919091179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b600082815260036020526040902054600280548492908110610d3157610d316136c3565b600091825260209091206002600590920201015460ff1615610d655760405162461bcd60e51b81526004016108469061384e565b600083815260036020526040812054600280549091908110610d8957610d896136c3565b906000526020600020906005020190508060010154831115610ded5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610846565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e9190613885565b91509150814210158015610e7157508042105b610eb65760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610846565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa158015610ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1b91906137c6565b50509050868103610f30576127109150610fb1565b612710611388610f4086866136ef565b610f4a9190613802565b610f549190613819565b610f5e85426136ef565b10610fab5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610846565b614e2091505b84546000908690610fc4906001906136ef565b81548110610fd457610fd46136c3565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105791906138a9565b61106191906136ef565b60008a815260078401602052604090205490915060ff16156110c55760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610846565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113391906138a9565b905060006127106111448784613802565b61114e9190613819565b611158908361383b565b60008c8152600686016020526040812054919250908211156112095760008c8152600686016020526040902054349061119190846136ef565b116111b65760008c81526006860160205260409020546111b190836136ef565b6111b8565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f85604051611200929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f84529091528120805483929061123590849061383b565b909155505060008c81526006860160205260408120805483929061125a90849061383b565b909155505060008c8152600686016020526040902054821161132c5760008c81526006860160205260408120546009870180549192909161129c90849061383b565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156115375782856009015461134991906136ef565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bb91906137ab565b156113d45760028a01805460ff191660011790556114b7565b895460038b0160006113e787600161383b565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161146291815260200190565b602060405180830381865afa15801561147f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a391906138a9565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b8152600401611504939291906138fc565b6000604051808303818588803b15801561151d57600080fd5b505af1158015611531573d6000803e3d6000fd5b50505050505b8034111561156557336108fc61154d83346136ef565b6040518115909202916000818181858888f150505050505b50505050505050505050505050565b61157d82612ec4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806115fb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115ef600080516020613e728339815191525490565b6001600160a01b031614155b156116195760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611673575060408051601f3d908101601f19168201909252611670918101906138a9565b60015b61169b57604051630c76093760e01b81526001600160a01b0383166004820152602401610846565b600080516020613e7283398151915281146116cc57604051632a87526960e21b815260048101829052602401610846565b600080516020613e728339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611797576000836001600160a01b031683604051611733919061399b565b600060405180830381855af49150503d806000811461176e576040519150601f19603f3d011682016040523d82523d6000602084013e611773565b606091505b5050905080611795576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117e75760405163703e46dd60e11b815260040160405180910390fd5b50600080516020613e7283398151915290565b6002818154811061180a57600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff909116929161183d906138c2565b80601f0160208091040260200160405190810160405280929190818152602001828054611869906138c2565b80156118b65780601f1061188b576101008083540402835291602001916118b6565b820191906000526020600020905b81548152906001019060200180831161189957829003601f168201915b5050505050905083565b6000848152600360205260409020546002805486929081106118e4576118e46136c3565b600091825260209091206002600590920201015460ff16156119185760405162461bcd60e51b81526004016108469061384e565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015611962573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611986919061372e565b5090935060019250611996915050565b8160048111156119a8576119a8613795565b14611a055760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610846565b82611a425760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610846565b600086815260036020526040812054600280549091908110611a6657611a666136c3565b60009182526020822060059091020180549092508290611a88906001906136ef565b81548110611a9857611a986136c3565b90600052602060002090600c0201905060005b86811015611b5e573382898984818110611ac757611ac76136c3565b9050602002013581548110611ade57611ade6136c3565b60009182526020909120600490910201546001600160a01b031614611b155760405162461bcd60e51b8152600401610846906139b7565b8582898984818110611b2957611b296136c3565b9050602002013581548110611b4057611b406136c3565b60009182526020909120600160049092020181019190915501611aab565b5086869050816005016000828254611b76919061383b565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890611bb3908b908b908b90613a20565b60405180910390a35050505050505050565b6000818152600360205260408120546002805460609392908110611beb57611beb6136c3565b60009182526020822060059091020180549092508290611c0d906001906136ef565b81548110611c1d57611c1d6136c3565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c7b57602002820191906000526020600020905b815481526020019060010190808311611c67575b505050505092505050919050565b600085815260036020526040812054600280548392908110611cad57611cad6136c3565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611ce157611ce16136c3565b90600052602060002090600c02016000018681548110611d0357611d036136c3565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8591906137c6565b506003850154919350915060ff168015611da957508183600201541480611da95750805b15611dbc57612710945050505050611dc5565b60009450505050505b95945050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611dff57611dff6136c3565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611e3357611e336136c3565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611eaa57611eaa6136c3565b60009182526020822060059091020180549092508290611ecc906001906136ef565b81548110611edc57611edc6136c3565b60009182526020909120600c90910201805460049091015414949350505050565b6000546001600160a01b03163314611f275760405162461bcd60e51b815260040161084690613a44565b6000836001600160a01b03168383604051611f42919061399b565b60006040518083038185875af1925050503d8060008114611f7f576040519150601f19603f3d011682016040523d82523d6000602084013e611f84565b606091505b50509050806117955760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610846565b600086815260036020526040902054600280548892908110611fed57611fed6136c3565b600091825260209091206002600590920201015460ff16156120215760405162461bcd60e51b81526004016108469061384e565b60015460405163564a565d60e01b8152600481018990526000916001600160a01b03169063564a565d9060240160a060405180830381865afa15801561206b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208f919061372e565b509093506002925061209f915050565b8160048111156120b1576120b1613795565b1461210c5760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610846565b8561214e5760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610846565b600088815260036020526040812054600280549091908110612172576121726136c3565b9060005260206000209060050201905080600101548611156121cd5760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610846565b805460009082906121e0906001906136ef565b815481106121f0576121f06136c3565b60009182526020822060015460405163564a565d60e01b8152600481018f9052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa15801561224b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226f919061372e565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee9190613a86565b505050505091505060005b8a8110156125605733848d8d84818110612315576123156136c3565b905060200201358154811061232c5761232c6136c3565b60009182526020909120600490910201546001600160a01b0316146123635760405162461bcd60e51b8152600401610846906139b7565b8115806123d6575060408051602081018c90529081018a905260600160405160208183030381529060405280519060200120846000018d8d848181106123ab576123ab6136c3565b90506020020135815481106123c2576123c26136c3565b906000526020600020906004020160010154145b6124485760405162461bcd60e51b815260206004820152603d60248201527f54686520636f6d6d6974206d757374206d61746368207468652063686f69636560448201527f20696e20636f7572747320776974682068696464656e20766f7465732e0000006064820152608401610846565b838c8c8381811061245b5761245b6136c3565b9050602002013581548110612472576124726136c3565b600091825260209091206003600490920201015460ff16156124cb5760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610846565b89848d8d848181106124df576124df6136c3565b90506020020135815481106124f6576124f66136c3565b60009182526020909120600260049092020101556001848d8d8481811061251f5761251f6136c3565b9050602002013581548110612536576125366136c3565b60009182526020909120600490910201600301805460ff19169115159190911790556001016122f9565b508a8a9050836004016000828254612578919061383b565b90915550506000898152600284016020526040812080548c929061259d90849061383b565b9091555050600183015489036125cc57600383015460ff16156125c75760038301805460ff191690555b612645565b60018301546000908152600284016020526040808220548b83529120540361260e57600383015460ff166125c75760038301805460ff19166001179055612645565b60018301546000908152600284016020526040808220548b83529120541115612645576001830189905560038301805460ff191690555b88336001600160a01b03168d7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48e8e8c60405161268493929190613af0565b60405180910390a4505050505050505050505050565b6000546001600160a01b031633146126c45760405162461bcd60e51b815260040161084690613a44565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a81526020019081526020016000205481548110612714576127146136c3565b600091825260208083208a8452600360059093020191820190526040822054815491935083918110612748576127486136c3565b90600052602060002090600c0201600001878154811061276a5761276a6136c3565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146127d65760405162461bcd60e51b815260040161084690613b20565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad201612861858783613bb4565b50805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156128b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128dc91906138a9565b6128e691906136ef565b81526020808201929092526040908101600090812093909355835460018181018655858552838520600b600c909302019182018890556003808301805460ff19169092179091558b855290925291829020849055905188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab581089061296f908a908a908a90613c74565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106129a5576129a56136c3565b600091825260208083208784526003600590930201918201905260408220548154919350839181106129d9576129d96136c3565b90600052602060002090600c020160000184815481106129fb576129fb6136c3565b600091825260209091206004909102016003015460ff169695505050505050565b6001546000906001600160a01b03163314612a495760405162461bcd60e51b815260040161084690613b20565b600083815260036020526040902054600280548592908110612a6d57612a6d6136c3565b600091825260209091206002600590920201015460ff1615612aa15760405162461bcd60e51b81526004016108469061384e565b600084815260036020526040812054600280549091908110612ac557612ac56136c3565b60009182526020822060059091020180549092508290612ae7906001906136ef565b81548110612af757612af76136c3565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b809190613caa565b60015460405163564a565d60e01b8152600481018a90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf3919061372e565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018d9052604482018c90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa158015612c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7b9190613caa565b9650612c878988612ef1565b15612d1457604080516080810182526001600160a01b03898116825260006020808401828152948401828152606085018381528a5460018082018d558c8652939094209551600490940290950180546001600160a01b0319169390941692909217835593519382019390935591516002830155516003909101805460ff1916911515919091179055612d19565b600096505b50505050505092915050565b600082815260036020526040812054600280548392908110612d4957612d496136c3565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612d7d57612d7d6136c3565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0091906137c6565b5091509150826004015460001480612e2f575080158015612e2f57506000828152600284016020526040902054155b15612e41576000945050505050612e72565b8015612e56575050600401549150612e729050565b506000908152600290910160205260409020549150612e729050565b92915050565b6000546001600160a01b03163314612ea25760405162461bcd60e51b815260040161084690613a44565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612eee5760405162461bcd60e51b815260040161084690613a44565b50565b60015460405163564a565d60e01b81526004810184905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f63919061372e565b505060018054604051637e37c78b60e11b8152600481018a90529495506000946001600160a01b039091169350638a9bb02a9250889190849063fc6f8f1690602401602060405180830381865afa158015612fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe691906138a9565b612ff091906136ef565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381865afa158015613031573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130599190810190613d5a565b602001519050600080600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d99190613caa565b604051631a383be960e31b81526001600160a01b0388811660048301526001600160601b0387166024830152919091169063d1c1df4890604401608060405180830381865afa158015613130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131549190613e3b565b5050915091508281613166919061383b565b909110159695505050505050565b60006020828403121561318657600080fd5b5035919050565b6001600160a01b0381168114612eee57600080fd5b600080600080608085870312156131b857600080fd5b8435935060208501356131ca8161318d565b93969395505050506040820135916060013590565b600080604083850312156131f257600080fd5b82356131fd8161318d565b9150602083013561320d8161318d565b809150509250929050565b6000806040838503121561322b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156132735761327361323a565b60405290565b604051601f8201601f191681016001600160401b03811182821017156132a1576132a161323a565b604052919050565b60006001600160401b038311156132c2576132c261323a565b6132d5601f8401601f1916602001613279565b90508281528383830111156132e957600080fd5b828260208301376000602084830101529392505050565b600082601f83011261331157600080fd5b613320838335602085016132a9565b9392505050565b6000806040838503121561333a57600080fd5b82356133458161318d565b915060208301356001600160401b0381111561336057600080fd5b61336c85828601613300565b9150509250929050565b60005b83811015613391578181015183820152602001613379565b50506000910152565b600081518084526133b2816020860160208601613376565b601f01601f19169290920160200192915050565b8381528215156020820152606060408201526000611dc5606083018461339a565b60008083601f8401126133f957600080fd5b5081356001600160401b0381111561341057600080fd5b6020830191508360208260051b850101111561342b57600080fd5b9250929050565b6000806000806060858703121561344857600080fd5b8435935060208501356001600160401b0381111561346557600080fd5b613471878288016133e7565b9598909750949560400135949350505050565b6020808252825182820181905260009190848201906040850190845b818110156134bc578351835292840192918401916001016134a0565b50909695505050505050565b600080600080600060a086880312156134e057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060006060848603121561351857600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561354457600080fd5b833561354f8161318d565b92506020840135915060408401356001600160401b0381111561357157600080fd5b61357d86828701613300565b9150509250925092565b60008060008060008060a087890312156135a057600080fd5b8635955060208701356001600160401b03808211156135be57600080fd5b6135ca8a838b016133e7565b9097509550604089013594506060890135935060808901359150808211156135f157600080fd5b508701601f8101891361360357600080fd5b613612898235602084016132a9565b9150509295509295509295565b60006020828403121561363157600080fd5b81356133208161318d565b60008060008060006080868803121561365457600080fd5b853594506020860135935060408601356001600160401b038082111561367957600080fd5b818801915088601f83011261368d57600080fd5b81358181111561369c57600080fd5b8960208285010111156136ae57600080fd5b96999598505060200195606001359392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115612e7257612e726136d9565b80516001600160601b038116811461371957600080fd5b919050565b8051801515811461371957600080fd5b600080600080600060a0868803121561374657600080fd5b61374f86613702565b9450602086015161375f8161318d565b60408701519094506005811061377457600080fd5b92506137826060870161371e565b9150608086015190509295509295909350565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156137bd57600080fd5b6133208261371e565b6000806000606084860312156137db57600080fd5b835192506137eb6020850161371e565b91506137f96040850161371e565b90509250925092565b8082028115828204841417612e7257612e726136d9565b60008261383657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115612e7257612e726136d9565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b6000806040838503121561389857600080fd5b505080516020909101519092909150565b6000602082840312156138bb57600080fd5b5051919050565b600181811c908216806138d657607f821691505b6020821081036138f657634e487b7160e01b600052602260045260246000fd5b50919050565b83815260006020846020840152606060408401526000845461391d816138c2565b806060870152608060018084166000811461393f576001811461395b5761398b565b60ff19851660808a0152608084151560051b8a0101955061398b565b89600052602060002060005b858110156139825781548b8201860152908301908801613967565b8a016080019650505b50939a9950505050505050505050565b600082516139ad818460208701613376565b9190910192915050565b6020808252601f908201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e00604082015260600190565b81835260006001600160fb1b03831115613a0757600080fd5b8260051b80836020870137939093016020019392505050565b604081526000613a346040830185876139ee565b9050826020830152949350505050565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600080600080600080600060e0888a031215613aa157600080fd5b613aaa88613702565b9650613ab86020890161371e565b955060408801519450606088015193506080880151925060a08801519150613ae260c0890161371e565b905092959891949750929550565b604081526000613b046040830185876139ee565b8281036020840152613b16818561339a565b9695505050505050565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611797576000816000526020600020601f850160051c81016020861015613b8d5750805b601f850160051c820191505b81811015613bac57828155600101613b99565b505050505050565b6001600160401b03831115613bcb57613bcb61323a565b613bdf83613bd983546138c2565b83613b64565b6000601f841160018114613c135760008515613bfb5750838201355b600019600387901b1c1916600186901b178355613c6d565b600083815260209020601f19861690835b82811015613c445786850135825560209485019460019092019101613c24565b5086821015613c615760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215613cbc57600080fd5b81516133208161318d565b600082601f830112613cd857600080fd5b815160206001600160401b03821115613cf357613cf361323a565b8160051b613d02828201613279565b9283528481018201928281019087851115613d1c57600080fd5b83870192505b84831015613d44578251613d358161318d565b82529183019190830190613d22565b979650505050505050565b80516137198161318d565b600060208284031215613d6c57600080fd5b81516001600160401b0380821115613d8357600080fd5b908301906101608286031215613d9857600080fd5b613da0613250565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015182811115613de857600080fd5b613df487828601613cc7565b60c08301525060e0838101519082015261010080840151908201526101209150613e1f828401613d4f565b9181019190915261014091820151918101919091529392505050565b60008060008060808587031215613e5157600080fd5b50508251602084015160408501516060909501519196909550909250905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220ece2f97e5f37049420403eea1739d27d704a432100da66c99ed49ffe1796440264736f6c63430008180033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commit. Note that justification string is a part of the commit.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "details": "Constructor, initializing the implementation to reduce attack surface." - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "initialize(address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "title": "DisputeKitClassic Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ], - "InvalidImplementation(address)": [ - { - "notice": "The `implementation` is not UUPS-compliant" - } - ] - }, - "events": { - "Upgraded(address)": { - "notice": "Emitted when the `implementation` has been successfully upgraded." - } - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 17736, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 17739, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)7051" - }, - { - "astId": 17743, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)17675_storage)dyn_storage" - }, - { - "astId": 17747, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)17675_storage)dyn_storage": { - "base": "t_struct(Dispute)17675_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassic.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)17713_storage)dyn_storage": { - "base": "t_struct(Round)17713_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassic.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)17722_storage)dyn_storage": { - "base": "t_struct(Vote)17722_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassic.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)7051": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)17675_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassic.Dispute", - "members": [ - { - "astId": 17664, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)17713_storage)dyn_storage" - }, - { - "astId": 17666, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 17668, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 17672, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 17674, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)17713_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassic.Round", - "members": [ - { - "astId": 17679, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)17722_storage)dyn_storage" - }, - { - "astId": 17681, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 17685, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 17687, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 17689, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 17691, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 17695, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 17699, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 17705, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 17707, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 17710, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 17712, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)17722_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassic.Vote", - "members": [ - { - "astId": 17715, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 17717, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 17719, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 17721, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity_Proxy.json deleted file mode 100644 index 90c310630..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xbe90d4066f62381a1a2c725364c3d35093e1ff685736f3fa0a7b75c3b0e82f93", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5", - "transactionIndex": 1, - "gasUsed": "189732", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000004000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1e4647532736ec4a239971727f05a17b1bb50fc89c0ec7a8da6e34f4f5bfcc90", - "transactionHash": "0xbe90d4066f62381a1a2c725364c3d35093e1ff685736f3fa0a7b75c3b0e82f93", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 96308536, - "transactionHash": "0xbe90d4066f62381a1a2c725364c3d35093e1ff685736f3fa0a7b75c3b0e82f93", - "address": "0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x1e4647532736ec4a239971727f05a17b1bb50fc89c0ec7a8da6e34f4f5bfcc90" - } - ], - "blockNumber": 96308536, - "cumulativeGasUsed": "189732", - "status": 1, - "byzantium": true - }, - "args": [ - "0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitClassicUniversityProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220a67e53546ab2c83f023c185d90506ad48d4e7af6339cf6db0c4ed97ec9ed376f64736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220a67e53546ab2c83f023c185d90506ad48d4e7af6339cf6db0c4ed97ec9ed376f64736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic_Implementation.json deleted file mode 100644 index 39f0ecde3..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic_Implementation.json +++ /dev/null @@ -1,1852 +0,0 @@ -{ - "address": "0xc4cC0274E55a9818f8cF42640B1De61d269425ad", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x4149c6d97f33a5198c03b3d25cc9eff18f21a31fb9b913e548c147dd8673c8af", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xc4cC0274E55a9818f8cF42640B1De61d269425ad", - "transactionIndex": 2, - "gasUsed": "3883385", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000004000000000000000000000000000000000000000000000000", - "blockHash": "0xeb27c3034461bca5d85683ab996e6fa547b791a3d6d3ad867f3e4401fd03b1c2", - "transactionHash": "0x4149c6d97f33a5198c03b3d25cc9eff18f21a31fb9b913e548c147dd8673c8af", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 179579705, - "transactionHash": "0x4149c6d97f33a5198c03b3d25cc9eff18f21a31fb9b913e548c147dd8673c8af", - "address": "0xc4cC0274E55a9818f8cF42640B1De61d269425ad", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 3, - "blockHash": "0xeb27c3034461bca5d85683ab996e6fa547b791a3d6d3ad867f3e4401fd03b1c2" - } - ], - "blockNumber": 179579705, - "cumulativeGasUsed": "3971991", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "726fe29d8d9c48c46571792cebc6e314", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"name\":\"alreadyDrawn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getLocalDisputeRoundID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localDisputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"hashVote\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"isAppealFunded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleDrawPerJuror\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"getLocalDisputeRoundID(uint256,uint256)\":{\"details\":\"Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\"},\"returns\":{\"localDisputeID\":\"The ID of the dispute in the Dispute Kit.\",\"localRoundID\":\"The ID of the round in the Dispute Kit.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Returns the number of rounds in a dispute.\",\"params\":{\"_localDisputeID\":\"The ID of the dispute in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of rounds in the dispute.\"}},\"getVoteInfo(uint256,uint256,uint256)\":{\"details\":\"Returns the vote information for a given vote ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The address of the juror who cast the vote.\",\"commit\":\"The commit of the vote.\"}},\"hashVote(uint256,uint256,string)\":{\"details\":\"Computes the hash of a vote using ABI encodingThe unused parameters may be used by overriding contracts.\",\"params\":{\"_choice\":\"The choice being voted for\",\"_justification\":\"The justification for the vote\",\"_salt\":\"A random salt for commitment\"},\"returns\":{\"_0\":\"bytes32 The hash of the encoded vote parameters\"}},\"initialize(address,address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isAppealFunded(uint256)\":{\"details\":\"Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"Whether the appeal funding is finished.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"DisputeKitClassic Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitClassic.sol\":\"DisputeKitClassic\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassic.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {DisputeKitClassicBase, KlerosCore} from \\\"./DisputeKitClassicBase.sol\\\";\\n\\n/// @title DisputeKitClassic\\n/// Dispute kit implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitClassic is DisputeKitClassicBase {\\n string public constant override version = \\\"0.12.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(address _governor, KlerosCore _core, address _wNative) external reinitializer(1) {\\n __DisputeKitClassicBase_initialize(_governor, _core, _wNative);\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(9) {\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0xfe30d2fa9e1f882d77900894c0b4389e38f91b937e3c095f87bf255488cefd8b\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassicBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore, KlerosCoreBase, IDisputeKit, ISortitionModule} from \\\"../KlerosCore.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {SafeSend} from \\\"../../libraries/SafeSend.sol\\\";\\n\\n/// @title DisputeKitClassicBase\\n/// Abstract Dispute kit classic implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\nabstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable {\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default.\\n mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool)))\\n public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading.\\n mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function __DisputeKitClassicBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n dispute.jumped = false; // Possibly true if this DK has jumped in a previous round.\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n coreDisputeIDToActive[_coreDisputeID] = true;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[localRoundID];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n if (drawnAddress == address(0)) {\\n // Sortition can return 0 address if no one has staked yet.\\n return drawnAddress;\\n }\\n\\n if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true;\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash.\\n function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n }\\n\\n function _castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender);\\n }\\n\\n function _castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification,\\n address _juror\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n bytes32 voteHash = hashVote(_choice, _salt, _justification);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == _juror, \\\"The juror has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == voteHash,\\n \\\"The vote hash must match the commitment in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n } // Workaround stack too deep\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.safeSend(amount, wNative);\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @dev The unused parameters may be used by overriding contracts.\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(_choice, _salt));\\n }\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length;\\n\\n return round.totalVoted == expectedTotalVoted;\\n }\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) {\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n // Uses block.timestamp from the current tx when called by the core contract.\\n return (fundedChoices.length == 0 &&\\n block.timestamp - appealPeriodStart >=\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT);\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n /// @dev Returns the number of rounds in a dispute.\\n /// @param _localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return The number of rounds in the dispute.\\n function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) {\\n return disputes[_localDisputeID].rounds.length;\\n }\\n\\n /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @return localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return localRoundID The ID of the round in the Dispute Kit.\\n function getLocalDisputeRoundID(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID\\n ) external view returns (uint256 localDisputeID, uint256 localRoundID) {\\n localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID];\\n }\\n\\n /// @dev Returns the vote information for a given vote ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @param _voteID The ID of the vote.\\n /// @return account The address of the juror who cast the vote.\\n /// @return commit The commit of the vote.\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts.\\n /// minStake is checked directly during staking process however it's possible for the juror to get drawn\\n /// while having < minStake if it is later increased by governance.\\n /// This issue is expected and harmless.\\n /// @param _round The round in which the juror is being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return result Whether the address passes the check or not.\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view virtual returns (bool result) {\\n if (singleDrawPerJuror) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n result = !alreadyDrawn[localDisputeID][localRoundID][_juror];\\n } else {\\n result = true;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc418b9a76802db5d16819836734ecff8b76d5f37101819aee6fd1844dfe21dd9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516143f36100fc600039600081816118130152818161183c0152611a3401526143f36000f3fe6080604052600436106102205760003560e01c80636d4cd8ea1161012e578063c0c53b8b116100ab578063f2f4eb261161006f578063f2f4eb2614610718578063f32ab92714610738578063f7e7d1fd1461076d578063f8abee101461078d578063fc6f8f16146107bd57600080fd5b8063c0c53b8b14610698578063d2b8035a146106b8578063da3beb8c146106d8578063e349ad301461058a578063e4c0aaf4146106f857600080fd5b8063a7cc08fe116100f2578063a7cc08fe146105e0578063b34bfaa81461062c578063b6ede54014610642578063ba66fde714610662578063be4676041461068257600080fd5b80636d4cd8ea1461054a578063751accd01461056a578063796490f91461058a5780637c04034e146105a05780638e426460146105c057600080fd5b80634b2f0ea0116101bc5780635a155ccd116101805780635a155ccd1461044f5780635c92e2f61461049057806365540b96146104b0578063675926f6146104dd57806369f3f041146104fd57600080fd5b80634b2f0ea0146103a45780634f1ef286146103b957806352d1902d146103cc57806354fd4d50146103e1578063564a565d1461042057600080fd5b80630855bbe9146102255780630baa64d11461025a5780630c340a241461027a5780631200aabc146102b25780631c3db16d146102ed5780631cc3423a1461032a5780632621b9a21461034a5780632d68efc914610364578063362c347914610384575b600080fd5b34801561023157600080fd5b50610245610240366004613814565b6107dd565b60405190151581526020015b60405180910390f35b34801561026657600080fd5b50610245610275366004613814565b6108a5565b34801561028657600080fd5b5060005461029a906001600160a01b031681565b6040516001600160a01b039091168152602001610251565b3480156102be57600080fd5b506102df6102cd366004613814565b60036020526000908152604090205481565b604051908152602001610251565b3480156102f957600080fd5b5061030d610308366004613814565b61091c565b604080519384529115156020840152151590820152606001610251565b34801561033657600080fd5b506102df6103453660046138d7565b610a8a565b34801561035657600080fd5b506004546102459060ff1681565b34801561037057600080fd5b5060075461029a906001600160a01b031681565b34801561039057600080fd5b506102df61039f36600461393b565b610aba565b6103b76103b2366004613978565b610f6f565b005b6103b76103c736600461399a565b6117ff565b3480156103d857600080fd5b506102df611a27565b3480156103ed57600080fd5b50610413604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102519190613a39565b34801561042c57600080fd5b5061044061043b366004613814565b611a85565b60405161025193929190613a4c565b34801561045b57600080fd5b5061024561046a366004613a6d565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b34801561049c57600080fd5b506103b76104ab366004613af1565b611b4b565b3480156104bc57600080fd5b506104d06104cb366004613814565b611b57565b6040516102519190613b43565b3480156104e957600080fd5b506102df6104f8366004613b86565b611c1b565b34801561050957600080fd5b5061051d610518366004613bc1565b611d5e565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610251565b34801561055657600080fd5b50610245610565366004613814565b611e16565b34801561057657600080fd5b506103b7610585366004613bed565b611f99565b34801561059657600080fd5b506102df61271081565b3480156105ac57600080fd5b506103b76105bb366004613c2f565b612065565b3480156105cc57600080fd5b506103b76105db366004613cb7565b61207c565b3480156105ec57600080fd5b506106006105fb366004613bc1565b6120c8565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610251565b34801561063857600080fd5b506102df614e2081565b34801561064e57600080fd5b506103b761065d366004613cd4565b61218e565b34801561066e57600080fd5b5061024561067d366004613bc1565b612381565b34801561068e57600080fd5b506102df61138881565b3480156106a457600080fd5b506103b76106b3366004613d5d565b61241c565b3480156106c457600080fd5b5061029a6106d3366004613978565b6124e6565b3480156106e457600080fd5b506102df6106f3366004613978565b612835565b34801561070457600080fd5b506103b7610713366004613cb7565b612988565b34801561072457600080fd5b5060015461029a906001600160a01b031681565b34801561074457600080fd5b50610758610753366004613978565b6129d4565b60408051928352602083019190915201610251565b34801561077957600080fd5b506103b7610788366004613cb7565b612a26565b34801561079957600080fd5b506102456107a8366004613814565b60066020526000908152604090205460ff1681565b3480156107c957600080fd5b506102df6107d8366004613814565b612af8565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa15801561082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084e9190613d9d565b91509150600061085d85611b57565b90508051600014801561089c575061271061138861087b8585613dd7565b6108859190613dea565b61088f9190613e01565b6108998442613dd7565b10155b95945050505050565b6000818152600360205260408120546002805483929081106108c9576108c9613e23565b600091825260208220600590910201805490925082906108eb90600190613dd7565b815481106108fb576108fb613e23565b60009182526020909120600c90910201805460059091015414949350505050565b600080600080600260036000878152602001908152602001600020548154811061094857610948613e23565b6000918252602082206005909102018054909250829061096a90600190613dd7565b8154811061097a5761097a613e23565b60009182526020909120600c90910201600381015460ff1694509050836109a55780600101546109a8565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190613e65565b5090935060049250610a2b915050565b816004811115610a3d57610a3d613ece565b03610a80576000610a4d88611b57565b90508051600103610a7e5780600081518110610a6b57610a6b613e23565b6020026020010151965060009550600194505b505b5050509193909250565b604080516020808201869052818301859052825180830384018152606090920190925280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2c9190613e65565b50935050505080610b845760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfb9190613ee4565b15610c395760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610b7b565b60008681526006602052604090205460ff16610c675760405162461bcd60e51b8152600401610b7b90613eff565b600086815260036020526040812054600280549091908110610c8b57610c8b613e23565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610cbf57610cbf613e23565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3e9190613f36565b5050600087815260078401602052604090205490915060ff16610d88576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ecd565b808603610dfd576000868152600683016020526040902054610dab576000610df6565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610dec9190613dea565b610df69190613e01565b9450610ecd565b600081815260078301602052604090205460ff16610ecd5781600601600083600a01600181548110610e3157610e31613e23565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610e6757610e67613e23565b9060005260206000200154815260200190815260200160002054610e8b9190613f72565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610ec09190613dea565b610eca9190613e01565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610f6357600754610f14906001600160a01b038a811691889116612b24565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051610f5a929190918252602082015260400190565b60405180910390a45b50505050949350505050565b600082815260036020526040902054600280548492908110610f9357610f93613e23565b600091825260209091206002600590920201015460ff1615610fc75760405162461bcd60e51b8152600401610b7b90613f85565b600083815260036020526040812054600280549091908110610feb57610feb613e23565b90600052602060002090600502019050806001015483111561104f5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610b7b565b60008481526006602052604090205460ff1661107d5760405162461bcd60e51b8152600401610b7b90613eff565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee9190613d9d565b9150915081421015801561110157508042105b6111465760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610b7b565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190613f36565b505090508681036111c0576127109150611241565b6127106113886111d08686613dd7565b6111da9190613dea565b6111e49190613e01565b6111ee8542613dd7565b1061123b5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610b7b565b614e2091505b8454600090869061125490600190613dd7565b8154811061126457611264613e23565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190613fbc565b6112f19190613dd7565b60008a815260078401602052604090205490915060ff16156113555760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610b7b565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa15801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190613fbc565b905060006127106113d48784613dea565b6113de9190613e01565b6113e89083613f72565b60008c8152600686016020526040812054919250908211156114995760008c815260068601602052604090205434906114219084613dd7565b116114465760008c81526006860160205260409020546114419083613dd7565b611448565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f85604051611490929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906114c5908490613f72565b909155505060008c8152600686016020526040812080548392906114ea908490613f72565b909155505060008c815260068601602052604090205482116115bc5760008c81526006860160205260408120546009870180549192909161152c908490613f72565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156117c7578285600901546115d99190613dd7565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164b9190613ee4565b156116645760028a01805460ff19166001179055611747565b895460038b016000611677876001613f72565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b81526004016116f291815260200190565b602060405180830381865afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190613fbc565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016117949392919061400f565b6000604051808303818588803b1580156117ad57600080fd5b505af11580156117c1573d6000803e3d6000fd5b50505050505b803411156117f0576117f06117dc8234613dd7565b6007543391906001600160a01b0316612b24565b50505050505050505050505050565b61180882612c0f565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061188657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661187a60008051602061439e8339815191525490565b6001600160a01b031614155b156118a45760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118fe575060408051601f3d908101601f191682019092526118fb91810190613fbc565b60015b61192657604051630c76093760e01b81526001600160a01b0383166004820152602401610b7b565b60008051602061439e833981519152811461195757604051632a87526960e21b815260048101829052602401610b7b565b60008051602061439e8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611a22576000836001600160a01b0316836040516119be91906140a9565b600060405180830381855af49150503d80600081146119f9576040519150601f19603f3d011682016040523d82523d6000602084013e6119fe565b606091505b5050905080611a20576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a725760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061439e83398151915290565b60028181548110611a9557600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611ac890613fd5565b80601f0160208091040260200160405190810160405280929190818152602001828054611af490613fd5565b8015611b415780601f10611b1657610100808354040283529160200191611b41565b820191906000526020600020905b815481529060010190602001808311611b2457829003601f168201915b5050505050905083565b611a2084848484612c3c565b6000818152600360205260408120546002805460609392908110611b7d57611b7d613e23565b60009182526020822060059091020180549092508290611b9f90600190613dd7565b81548110611baf57611baf613e23565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c0d57602002820191906000526020600020905b815481526020019060010190808311611bf9575b505050505092505050919050565b600085815260036020526040812054600280548392908110611c3f57611c3f613e23565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611c7357611c73613e23565b90600052602060002090600c02016000018681548110611c9557611c95613e23565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d179190613f36565b506003850154919350915060ff168015611d3b57508183600201541480611d3b5750805b15611d4e5761271094505050505061089c565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611d8f57611d8f613e23565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611dc357611dc3613e23565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611e3a57611e3a613e23565b60009182526020822060059091020180549092508290611e5c90600190613dd7565b81548110611e6c57611e6c613e23565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190613e65565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015611f46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6a91906140c5565b5050505050915050600081611f80578354611f86565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b03163314611fc35760405162461bcd60e51b8152600401610b7b90614131565b6000836001600160a01b03168383604051611fde91906140a9565b60006040518083038185875af1925050503d806000811461201b576040519150601f19603f3d011682016040523d82523d6000602084013e612020565b606091505b5050905080611a205760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610b7b565b61207486868686868633612f9f565b505050505050565b6000546001600160a01b031633146120a65760405162461bcd60e51b8152600401610b7b90614131565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a815260200190815260200160002054815481106120f6576120f6613e23565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061212a5761212a613e23565b90600052602060002090600c0201600001878154811061214c5761214c613e23565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146121b85760405162461bcd60e51b8152600401610b7b90614173565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad201612243858783614205565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156122a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ca9190613fbc565b6122d49190613dd7565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab581089061236f908a908a908a906142c4565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106123a5576123a5613e23565b600091825260208083208784526003600590930201918201905260408220548154919350839181106123d9576123d9613e23565b90600052602060002090600c020160000184815481106123fb576123fb613e23565b600091825260209091206004909102016003015460ff169695505050505050565b600160006124286136d0565b8054909150600160401b900460ff168061244f575080546001600160401b03808416911610155b1561246c5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556124988585856136f4565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146125135760405162461bcd60e51b8152600401610b7b90614173565b60008381526003602052604090205460028054859290811061253757612537613e23565b600091825260209091206002600590920201015460ff161561256b5760405162461bcd60e51b8152600401610b7b90613f85565b600084815260036020526040812054600280549192918390811061259157612591613e23565b60009182526020822060059091020180549092506125b190600190613dd7565b905060008260000182815481106125ca576125ca613e23565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561262f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265391906142fa565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156126a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c69190613e65565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561272a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274e91906142fa565b98506001600160a01b03891661276a575050505050505061282e565b612775848c8b61373b565b1561282157604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612826565b600098505b505050505050505b5092915050565b60008281526003602052604081205460028054839290811061285957612859613e23565b6000918252602080832086845260036005909302019182019052604082205481549193508391811061288d5761288d613e23565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa1580156128ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129109190613f36565b509150915082600401546000148061293f57508015801561293f57506000828152600284016020526040902054155b15612951576000945050505050612982565b80156129665750506004015491506129829050565b5060009081526002909101602052604090205491506129829050565b92915050565b6000546001600160a01b031633146129b25760405162461bcd60e51b8152600401610b7b90614131565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526003602052604081205460028054919291839081106129fa576129fa613e23565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612a326136d0565b8054909150600160401b900460ff1680612a59575080546001600160401b03808416911610155b15612a765760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612b0d57612b0d613e23565b600091825260209091206005909102015492915050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015612b5357505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b8e57600080fd5b505af1158015612ba2573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612c395760405162461bcd60e51b8152600401610b7b90614131565b50565b600084815260036020526040902054600280548692908110612c6057612c60613e23565b600091825260209091206002600590920201015460ff1615612c945760405162461bcd60e51b8152600401610b7b90613f85565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d029190613e65565b5090935060019250612d12915050565b816004811115612d2457612d24613ece565b14612d815760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610b7b565b82612dbe5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610b7b565b60008681526006602052604090205460ff16612dec5760405162461bcd60e51b8152600401610b7b90613eff565b600086815260036020526040812054600280549091908110612e1057612e10613e23565b60009182526020822060059091020180549092508290612e3290600190613dd7565b81548110612e4257612e42613e23565b90600052602060002090600c0201905060005b86811015612f38573382898984818110612e7157612e71613e23565b9050602002013581548110612e8857612e88613e23565b60009182526020909120600490910201546001600160a01b031614612eef5760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610b7b565b8582898984818110612f0357612f03613e23565b9050602002013581548110612f1a57612f1a613e23565b60009182526020909120600160049092020181019190915501612e55565b5086869050816005016000828254612f509190613f72565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890612f8d908b908b908b90614349565b60405180910390a35050505050505050565b600087815260036020526040902054600280548992908110612fc357612fc3613e23565b600091825260209091206002600590920201015460ff1615612ff75760405162461bcd60e51b8152600401610b7b90613f85565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130659190613e65565b5090935060029250613075915050565b81600481111561308757613087613ece565b146130e25760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610b7b565b866131245760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610b7b565b60008981526006602052604090205460ff166131525760405162461bcd60e51b8152600401610b7b90613eff565b60008981526003602052604081205460028054909190811061317657613176613e23565b9060005260206000209060050201905080600101548711156131d15760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610b7b565b805460009082906131e490600190613dd7565b815481106131f4576131f4613e23565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d90613239908f9060040190815260200190565b60a060405180830381865afa158015613256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327a9190613e65565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156132d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f991906140c5565b5050505050915050600061330e8b8b8b610a8a565b905060005b8c811015613595576001600160a01b038916858f8f8481811061333857613338613e23565b905060200201358154811061334f5761334f613e23565b60009182526020909120600490910201546001600160a01b0316146133b65760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610b7b565b8215806133fd575081858f8f848181106133d2576133d2613e23565b90506020020135815481106133e9576133e9613e23565b906000526020600020906004020160010154145b61347d5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610b7b565b848e8e8381811061349057613490613e23565b90506020020135815481106134a7576134a7613e23565b600091825260209091206003600490920201015460ff16156135005760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610b7b565b8b858f8f8481811061351457613514613e23565b905060200201358154811061352b5761352b613e23565b60009182526020909120600260049092020101556001858f8f8481811061355457613554613e23565b905060200201358154811061356b5761356b613e23565b60009182526020909120600490910201600301805460ff1916911515919091179055600101613313565b5050506004820180548b92506000906135af908490613f72565b90915550506000888152600282016020526040812080548b92906135d4908490613f72565b90915550506001810154880361360357600381015460ff16156135fe5760038101805460ff191690555b61367c565b60018101546000908152600282016020526040808220548a83529120540361364557600381015460ff166135fe5760038101805460ff1916600117905561367c565b60018101546000908152600282016020526040808220548a8352912054111561367c576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b6040516136bb9392919061436d565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6136fc6137d3565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60045460009060ff16156137c957600083815260036020526040812054600280549192918390811061376f5761376f613e23565b600091825260208220600590910201805490925061378f90600190613dd7565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610ab3915050565b5060019392505050565b6137db6137fa565b6137f857604051631afcd79f60e31b815260040160405180910390fd5b565b60006138046136d0565b54600160401b900460ff16919050565b60006020828403121561382657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261385457600080fd5b8135602083016000806001600160401b038411156138745761387461382d565b50604051601f19601f85018116603f011681018181106001600160401b03821117156138a2576138a261382d565b6040528381529050808284018710156138ba57600080fd5b838360208301376000602085830101528094505050505092915050565b6000806000606084860312156138ec57600080fd5b833592506020840135915060408401356001600160401b0381111561391057600080fd5b61391c86828701613843565b9150509250925092565b6001600160a01b0381168114612c3957600080fd5b6000806000806080858703121561395157600080fd5b84359350602085013561396381613926565b93969395505050506040820135916060013590565b6000806040838503121561398b57600080fd5b50508035926020909101359150565b600080604083850312156139ad57600080fd5b82356139b881613926565b915060208301356001600160401b038111156139d357600080fd5b6139df85828601613843565b9150509250929050565b60005b83811015613a045781810151838201526020016139ec565b50506000910152565b60008151808452613a258160208601602086016139e9565b601f01601f19169290920160200192915050565b602081526000610ab36020830184613a0d565b838152821515602082015260606040820152600061089c6060830184613a0d565b600080600060608486031215613a8257600080fd5b83359250602084013591506040840135613a9b81613926565b809150509250925092565b60008083601f840112613ab857600080fd5b5081356001600160401b03811115613acf57600080fd5b6020830191508360208260051b8501011115613aea57600080fd5b9250929050565b60008060008060608587031215613b0757600080fd5b8435935060208501356001600160401b03811115613b2457600080fd5b613b3087828801613aa6565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613b7b578351835260209384019390920191600101613b5d565b509095945050505050565b600080600080600060a08688031215613b9e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613bd657600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613c0257600080fd5b8335613c0d81613926565b92506020840135915060408401356001600160401b0381111561391057600080fd5b60008060008060008060a08789031215613c4857600080fd5b8635955060208701356001600160401b03811115613c6557600080fd5b613c7189828a01613aa6565b909650945050604087013592506060870135915060808701356001600160401b03811115613c9e57600080fd5b613caa89828a01613843565b9150509295509295509295565b600060208284031215613cc957600080fd5b8135610ab381613926565b600080600080600060808688031215613cec57600080fd5b853594506020860135935060408601356001600160401b03811115613d1057600080fd5b8601601f81018813613d2157600080fd5b80356001600160401b03811115613d3757600080fd5b886020828401011115613d4957600080fd5b959894975060200195606001359392505050565b600080600060608486031215613d7257600080fd5b8335613d7d81613926565b92506020840135613d8d81613926565b91506040840135613a9b81613926565b60008060408385031215613db057600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b8181038181111561298257612982613dc1565b808202811582820484141761298257612982613dc1565b600082613e1e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80516001600160601b0381168114613e5057600080fd5b919050565b80518015158114613e5057600080fd5b600080600080600060a08688031215613e7d57600080fd5b613e8686613e39565b94506020860151613e9681613926565b604087015190945060058110613eab57600080fd5b9250613eb960608701613e55565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613ef657600080fd5b610ab382613e55565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b600080600060608486031215613f4b57600080fd5b83519250613f5b60208501613e55565b9150613f6960408501613e55565b90509250925092565b8082018082111561298257612982613dc1565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b600060208284031215613fce57600080fd5b5051919050565b600181811c90821680613fe957607f821691505b60208210810361400957634e487b7160e01b600052602260045260246000fd5b50919050565b83815282602082015260606040820152600080835461402d81613fd5565b806060860152600182166000811461404c57600181146140685761409c565b60ff1983166080870152608082151560051b870101935061409c565b86600052602060002060005b8381101561409357815488820160800152600190910190602001614074565b87016080019450505b5091979650505050505050565b600082516140bb8184602087016139e9565b9190910192915050565b600080600080600080600060e0888a0312156140e057600080fd5b6140e988613e39565b96506140f760208901613e55565b604089015160608a015160808b015160a08c015193995091975095509350915061412360c08901613e55565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611a2257806000526020600020601f840160051c810160208510156141de5750805b601f840160051c820191505b818110156141fe57600081556001016141ea565b5050505050565b6001600160401b0383111561421c5761421c61382d565b6142308361422a8354613fd5565b836141b7565b6000601f841160018114614264576000851561424c5750838201355b600019600387901b1c1916600186901b1783556141fe565b600083815260209020601f19861690835b828110156142955786850135825560209485019460019092019101614275565b50868210156142b25760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561430c57600080fd5b8151610ab381613926565b81835260006001600160fb1b0383111561433057600080fd5b8260051b80836020870137939093016020019392505050565b60408152600061435d604083018587614317565b9050826020830152949350505050565b604081526000614381604083018587614317565b82810360208401526143938185613a0d565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212205273a7fd5d9b74f6a10c8e8ff9173490991e595b881e9a1f0a7986976eaa245264736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102205760003560e01c80636d4cd8ea1161012e578063c0c53b8b116100ab578063f2f4eb261161006f578063f2f4eb2614610718578063f32ab92714610738578063f7e7d1fd1461076d578063f8abee101461078d578063fc6f8f16146107bd57600080fd5b8063c0c53b8b14610698578063d2b8035a146106b8578063da3beb8c146106d8578063e349ad301461058a578063e4c0aaf4146106f857600080fd5b8063a7cc08fe116100f2578063a7cc08fe146105e0578063b34bfaa81461062c578063b6ede54014610642578063ba66fde714610662578063be4676041461068257600080fd5b80636d4cd8ea1461054a578063751accd01461056a578063796490f91461058a5780637c04034e146105a05780638e426460146105c057600080fd5b80634b2f0ea0116101bc5780635a155ccd116101805780635a155ccd1461044f5780635c92e2f61461049057806365540b96146104b0578063675926f6146104dd57806369f3f041146104fd57600080fd5b80634b2f0ea0146103a45780634f1ef286146103b957806352d1902d146103cc57806354fd4d50146103e1578063564a565d1461042057600080fd5b80630855bbe9146102255780630baa64d11461025a5780630c340a241461027a5780631200aabc146102b25780631c3db16d146102ed5780631cc3423a1461032a5780632621b9a21461034a5780632d68efc914610364578063362c347914610384575b600080fd5b34801561023157600080fd5b50610245610240366004613814565b6107dd565b60405190151581526020015b60405180910390f35b34801561026657600080fd5b50610245610275366004613814565b6108a5565b34801561028657600080fd5b5060005461029a906001600160a01b031681565b6040516001600160a01b039091168152602001610251565b3480156102be57600080fd5b506102df6102cd366004613814565b60036020526000908152604090205481565b604051908152602001610251565b3480156102f957600080fd5b5061030d610308366004613814565b61091c565b604080519384529115156020840152151590820152606001610251565b34801561033657600080fd5b506102df6103453660046138d7565b610a8a565b34801561035657600080fd5b506004546102459060ff1681565b34801561037057600080fd5b5060075461029a906001600160a01b031681565b34801561039057600080fd5b506102df61039f36600461393b565b610aba565b6103b76103b2366004613978565b610f6f565b005b6103b76103c736600461399a565b6117ff565b3480156103d857600080fd5b506102df611a27565b3480156103ed57600080fd5b50610413604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102519190613a39565b34801561042c57600080fd5b5061044061043b366004613814565b611a85565b60405161025193929190613a4c565b34801561045b57600080fd5b5061024561046a366004613a6d565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b34801561049c57600080fd5b506103b76104ab366004613af1565b611b4b565b3480156104bc57600080fd5b506104d06104cb366004613814565b611b57565b6040516102519190613b43565b3480156104e957600080fd5b506102df6104f8366004613b86565b611c1b565b34801561050957600080fd5b5061051d610518366004613bc1565b611d5e565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610251565b34801561055657600080fd5b50610245610565366004613814565b611e16565b34801561057657600080fd5b506103b7610585366004613bed565b611f99565b34801561059657600080fd5b506102df61271081565b3480156105ac57600080fd5b506103b76105bb366004613c2f565b612065565b3480156105cc57600080fd5b506103b76105db366004613cb7565b61207c565b3480156105ec57600080fd5b506106006105fb366004613bc1565b6120c8565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610251565b34801561063857600080fd5b506102df614e2081565b34801561064e57600080fd5b506103b761065d366004613cd4565b61218e565b34801561066e57600080fd5b5061024561067d366004613bc1565b612381565b34801561068e57600080fd5b506102df61138881565b3480156106a457600080fd5b506103b76106b3366004613d5d565b61241c565b3480156106c457600080fd5b5061029a6106d3366004613978565b6124e6565b3480156106e457600080fd5b506102df6106f3366004613978565b612835565b34801561070457600080fd5b506103b7610713366004613cb7565b612988565b34801561072457600080fd5b5060015461029a906001600160a01b031681565b34801561074457600080fd5b50610758610753366004613978565b6129d4565b60408051928352602083019190915201610251565b34801561077957600080fd5b506103b7610788366004613cb7565b612a26565b34801561079957600080fd5b506102456107a8366004613814565b60066020526000908152604090205460ff1681565b3480156107c957600080fd5b506102df6107d8366004613814565b612af8565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa15801561082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084e9190613d9d565b91509150600061085d85611b57565b90508051600014801561089c575061271061138861087b8585613dd7565b6108859190613dea565b61088f9190613e01565b6108998442613dd7565b10155b95945050505050565b6000818152600360205260408120546002805483929081106108c9576108c9613e23565b600091825260208220600590910201805490925082906108eb90600190613dd7565b815481106108fb576108fb613e23565b60009182526020909120600c90910201805460059091015414949350505050565b600080600080600260036000878152602001908152602001600020548154811061094857610948613e23565b6000918252602082206005909102018054909250829061096a90600190613dd7565b8154811061097a5761097a613e23565b60009182526020909120600c90910201600381015460ff1694509050836109a55780600101546109a8565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190613e65565b5090935060049250610a2b915050565b816004811115610a3d57610a3d613ece565b03610a80576000610a4d88611b57565b90508051600103610a7e5780600081518110610a6b57610a6b613e23565b6020026020010151965060009550600194505b505b5050509193909250565b604080516020808201869052818301859052825180830384018152606090920190925280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2c9190613e65565b50935050505080610b845760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfb9190613ee4565b15610c395760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610b7b565b60008681526006602052604090205460ff16610c675760405162461bcd60e51b8152600401610b7b90613eff565b600086815260036020526040812054600280549091908110610c8b57610c8b613e23565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610cbf57610cbf613e23565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3e9190613f36565b5050600087815260078401602052604090205490915060ff16610d88576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ecd565b808603610dfd576000868152600683016020526040902054610dab576000610df6565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610dec9190613dea565b610df69190613e01565b9450610ecd565b600081815260078301602052604090205460ff16610ecd5781600601600083600a01600181548110610e3157610e31613e23565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610e6757610e67613e23565b9060005260206000200154815260200190815260200160002054610e8b9190613f72565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610ec09190613dea565b610eca9190613e01565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610f6357600754610f14906001600160a01b038a811691889116612b24565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051610f5a929190918252602082015260400190565b60405180910390a45b50505050949350505050565b600082815260036020526040902054600280548492908110610f9357610f93613e23565b600091825260209091206002600590920201015460ff1615610fc75760405162461bcd60e51b8152600401610b7b90613f85565b600083815260036020526040812054600280549091908110610feb57610feb613e23565b90600052602060002090600502019050806001015483111561104f5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610b7b565b60008481526006602052604090205460ff1661107d5760405162461bcd60e51b8152600401610b7b90613eff565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee9190613d9d565b9150915081421015801561110157508042105b6111465760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610b7b565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190613f36565b505090508681036111c0576127109150611241565b6127106113886111d08686613dd7565b6111da9190613dea565b6111e49190613e01565b6111ee8542613dd7565b1061123b5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610b7b565b614e2091505b8454600090869061125490600190613dd7565b8154811061126457611264613e23565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190613fbc565b6112f19190613dd7565b60008a815260078401602052604090205490915060ff16156113555760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610b7b565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa15801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190613fbc565b905060006127106113d48784613dea565b6113de9190613e01565b6113e89083613f72565b60008c8152600686016020526040812054919250908211156114995760008c815260068601602052604090205434906114219084613dd7565b116114465760008c81526006860160205260409020546114419083613dd7565b611448565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f85604051611490929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906114c5908490613f72565b909155505060008c8152600686016020526040812080548392906114ea908490613f72565b909155505060008c815260068601602052604090205482116115bc5760008c81526006860160205260408120546009870180549192909161152c908490613f72565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156117c7578285600901546115d99190613dd7565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164b9190613ee4565b156116645760028a01805460ff19166001179055611747565b895460038b016000611677876001613f72565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b81526004016116f291815260200190565b602060405180830381865afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190613fbc565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016117949392919061400f565b6000604051808303818588803b1580156117ad57600080fd5b505af11580156117c1573d6000803e3d6000fd5b50505050505b803411156117f0576117f06117dc8234613dd7565b6007543391906001600160a01b0316612b24565b50505050505050505050505050565b61180882612c0f565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061188657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661187a60008051602061439e8339815191525490565b6001600160a01b031614155b156118a45760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118fe575060408051601f3d908101601f191682019092526118fb91810190613fbc565b60015b61192657604051630c76093760e01b81526001600160a01b0383166004820152602401610b7b565b60008051602061439e833981519152811461195757604051632a87526960e21b815260048101829052602401610b7b565b60008051602061439e8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611a22576000836001600160a01b0316836040516119be91906140a9565b600060405180830381855af49150503d80600081146119f9576040519150601f19603f3d011682016040523d82523d6000602084013e6119fe565b606091505b5050905080611a20576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a725760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061439e83398151915290565b60028181548110611a9557600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611ac890613fd5565b80601f0160208091040260200160405190810160405280929190818152602001828054611af490613fd5565b8015611b415780601f10611b1657610100808354040283529160200191611b41565b820191906000526020600020905b815481529060010190602001808311611b2457829003601f168201915b5050505050905083565b611a2084848484612c3c565b6000818152600360205260408120546002805460609392908110611b7d57611b7d613e23565b60009182526020822060059091020180549092508290611b9f90600190613dd7565b81548110611baf57611baf613e23565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c0d57602002820191906000526020600020905b815481526020019060010190808311611bf9575b505050505092505050919050565b600085815260036020526040812054600280548392908110611c3f57611c3f613e23565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611c7357611c73613e23565b90600052602060002090600c02016000018681548110611c9557611c95613e23565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d179190613f36565b506003850154919350915060ff168015611d3b57508183600201541480611d3b5750805b15611d4e5761271094505050505061089c565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611d8f57611d8f613e23565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611dc357611dc3613e23565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611e3a57611e3a613e23565b60009182526020822060059091020180549092508290611e5c90600190613dd7565b81548110611e6c57611e6c613e23565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190613e65565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015611f46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6a91906140c5565b5050505050915050600081611f80578354611f86565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b03163314611fc35760405162461bcd60e51b8152600401610b7b90614131565b6000836001600160a01b03168383604051611fde91906140a9565b60006040518083038185875af1925050503d806000811461201b576040519150601f19603f3d011682016040523d82523d6000602084013e612020565b606091505b5050905080611a205760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610b7b565b61207486868686868633612f9f565b505050505050565b6000546001600160a01b031633146120a65760405162461bcd60e51b8152600401610b7b90614131565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a815260200190815260200160002054815481106120f6576120f6613e23565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061212a5761212a613e23565b90600052602060002090600c0201600001878154811061214c5761214c613e23565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146121b85760405162461bcd60e51b8152600401610b7b90614173565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad201612243858783614205565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156122a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ca9190613fbc565b6122d49190613dd7565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab581089061236f908a908a908a906142c4565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106123a5576123a5613e23565b600091825260208083208784526003600590930201918201905260408220548154919350839181106123d9576123d9613e23565b90600052602060002090600c020160000184815481106123fb576123fb613e23565b600091825260209091206004909102016003015460ff169695505050505050565b600160006124286136d0565b8054909150600160401b900460ff168061244f575080546001600160401b03808416911610155b1561246c5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556124988585856136f4565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146125135760405162461bcd60e51b8152600401610b7b90614173565b60008381526003602052604090205460028054859290811061253757612537613e23565b600091825260209091206002600590920201015460ff161561256b5760405162461bcd60e51b8152600401610b7b90613f85565b600084815260036020526040812054600280549192918390811061259157612591613e23565b60009182526020822060059091020180549092506125b190600190613dd7565b905060008260000182815481106125ca576125ca613e23565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561262f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265391906142fa565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156126a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c69190613e65565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561272a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274e91906142fa565b98506001600160a01b03891661276a575050505050505061282e565b612775848c8b61373b565b1561282157604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612826565b600098505b505050505050505b5092915050565b60008281526003602052604081205460028054839290811061285957612859613e23565b6000918252602080832086845260036005909302019182019052604082205481549193508391811061288d5761288d613e23565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa1580156128ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129109190613f36565b509150915082600401546000148061293f57508015801561293f57506000828152600284016020526040902054155b15612951576000945050505050612982565b80156129665750506004015491506129829050565b5060009081526002909101602052604090205491506129829050565b92915050565b6000546001600160a01b031633146129b25760405162461bcd60e51b8152600401610b7b90614131565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526003602052604081205460028054919291839081106129fa576129fa613e23565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612a326136d0565b8054909150600160401b900460ff1680612a59575080546001600160401b03808416911610155b15612a765760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612b0d57612b0d613e23565b600091825260209091206005909102015492915050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015612b5357505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b8e57600080fd5b505af1158015612ba2573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612c395760405162461bcd60e51b8152600401610b7b90614131565b50565b600084815260036020526040902054600280548692908110612c6057612c60613e23565b600091825260209091206002600590920201015460ff1615612c945760405162461bcd60e51b8152600401610b7b90613f85565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d029190613e65565b5090935060019250612d12915050565b816004811115612d2457612d24613ece565b14612d815760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610b7b565b82612dbe5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610b7b565b60008681526006602052604090205460ff16612dec5760405162461bcd60e51b8152600401610b7b90613eff565b600086815260036020526040812054600280549091908110612e1057612e10613e23565b60009182526020822060059091020180549092508290612e3290600190613dd7565b81548110612e4257612e42613e23565b90600052602060002090600c0201905060005b86811015612f38573382898984818110612e7157612e71613e23565b9050602002013581548110612e8857612e88613e23565b60009182526020909120600490910201546001600160a01b031614612eef5760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610b7b565b8582898984818110612f0357612f03613e23565b9050602002013581548110612f1a57612f1a613e23565b60009182526020909120600160049092020181019190915501612e55565b5086869050816005016000828254612f509190613f72565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890612f8d908b908b908b90614349565b60405180910390a35050505050505050565b600087815260036020526040902054600280548992908110612fc357612fc3613e23565b600091825260209091206002600590920201015460ff1615612ff75760405162461bcd60e51b8152600401610b7b90613f85565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130659190613e65565b5090935060029250613075915050565b81600481111561308757613087613ece565b146130e25760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610b7b565b866131245760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610b7b565b60008981526006602052604090205460ff166131525760405162461bcd60e51b8152600401610b7b90613eff565b60008981526003602052604081205460028054909190811061317657613176613e23565b9060005260206000209060050201905080600101548711156131d15760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610b7b565b805460009082906131e490600190613dd7565b815481106131f4576131f4613e23565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d90613239908f9060040190815260200190565b60a060405180830381865afa158015613256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327a9190613e65565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156132d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f991906140c5565b5050505050915050600061330e8b8b8b610a8a565b905060005b8c811015613595576001600160a01b038916858f8f8481811061333857613338613e23565b905060200201358154811061334f5761334f613e23565b60009182526020909120600490910201546001600160a01b0316146133b65760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610b7b565b8215806133fd575081858f8f848181106133d2576133d2613e23565b90506020020135815481106133e9576133e9613e23565b906000526020600020906004020160010154145b61347d5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610b7b565b848e8e8381811061349057613490613e23565b90506020020135815481106134a7576134a7613e23565b600091825260209091206003600490920201015460ff16156135005760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610b7b565b8b858f8f8481811061351457613514613e23565b905060200201358154811061352b5761352b613e23565b60009182526020909120600260049092020101556001858f8f8481811061355457613554613e23565b905060200201358154811061356b5761356b613e23565b60009182526020909120600490910201600301805460ff1916911515919091179055600101613313565b5050506004820180548b92506000906135af908490613f72565b90915550506000888152600282016020526040812080548b92906135d4908490613f72565b90915550506001810154880361360357600381015460ff16156135fe5760038101805460ff191690555b61367c565b60018101546000908152600282016020526040808220548a83529120540361364557600381015460ff166135fe5760038101805460ff1916600117905561367c565b60018101546000908152600282016020526040808220548a8352912054111561367c576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b6040516136bb9392919061436d565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6136fc6137d3565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60045460009060ff16156137c957600083815260036020526040812054600280549192918390811061376f5761376f613e23565b600091825260208220600590910201805490925061378f90600190613dd7565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610ab3915050565b5060019392505050565b6137db6137fa565b6137f857604051631afcd79f60e31b815260040160405180910390fd5b565b60006138046136d0565b54600160401b900460ff16919050565b60006020828403121561382657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261385457600080fd5b8135602083016000806001600160401b038411156138745761387461382d565b50604051601f19601f85018116603f011681018181106001600160401b03821117156138a2576138a261382d565b6040528381529050808284018710156138ba57600080fd5b838360208301376000602085830101528094505050505092915050565b6000806000606084860312156138ec57600080fd5b833592506020840135915060408401356001600160401b0381111561391057600080fd5b61391c86828701613843565b9150509250925092565b6001600160a01b0381168114612c3957600080fd5b6000806000806080858703121561395157600080fd5b84359350602085013561396381613926565b93969395505050506040820135916060013590565b6000806040838503121561398b57600080fd5b50508035926020909101359150565b600080604083850312156139ad57600080fd5b82356139b881613926565b915060208301356001600160401b038111156139d357600080fd5b6139df85828601613843565b9150509250929050565b60005b83811015613a045781810151838201526020016139ec565b50506000910152565b60008151808452613a258160208601602086016139e9565b601f01601f19169290920160200192915050565b602081526000610ab36020830184613a0d565b838152821515602082015260606040820152600061089c6060830184613a0d565b600080600060608486031215613a8257600080fd5b83359250602084013591506040840135613a9b81613926565b809150509250925092565b60008083601f840112613ab857600080fd5b5081356001600160401b03811115613acf57600080fd5b6020830191508360208260051b8501011115613aea57600080fd5b9250929050565b60008060008060608587031215613b0757600080fd5b8435935060208501356001600160401b03811115613b2457600080fd5b613b3087828801613aa6565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613b7b578351835260209384019390920191600101613b5d565b509095945050505050565b600080600080600060a08688031215613b9e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613bd657600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613c0257600080fd5b8335613c0d81613926565b92506020840135915060408401356001600160401b0381111561391057600080fd5b60008060008060008060a08789031215613c4857600080fd5b8635955060208701356001600160401b03811115613c6557600080fd5b613c7189828a01613aa6565b909650945050604087013592506060870135915060808701356001600160401b03811115613c9e57600080fd5b613caa89828a01613843565b9150509295509295509295565b600060208284031215613cc957600080fd5b8135610ab381613926565b600080600080600060808688031215613cec57600080fd5b853594506020860135935060408601356001600160401b03811115613d1057600080fd5b8601601f81018813613d2157600080fd5b80356001600160401b03811115613d3757600080fd5b886020828401011115613d4957600080fd5b959894975060200195606001359392505050565b600080600060608486031215613d7257600080fd5b8335613d7d81613926565b92506020840135613d8d81613926565b91506040840135613a9b81613926565b60008060408385031215613db057600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b8181038181111561298257612982613dc1565b808202811582820484141761298257612982613dc1565b600082613e1e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80516001600160601b0381168114613e5057600080fd5b919050565b80518015158114613e5057600080fd5b600080600080600060a08688031215613e7d57600080fd5b613e8686613e39565b94506020860151613e9681613926565b604087015190945060058110613eab57600080fd5b9250613eb960608701613e55565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613ef657600080fd5b610ab382613e55565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b600080600060608486031215613f4b57600080fd5b83519250613f5b60208501613e55565b9150613f6960408501613e55565b90509250925092565b8082018082111561298257612982613dc1565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b600060208284031215613fce57600080fd5b5051919050565b600181811c90821680613fe957607f821691505b60208210810361400957634e487b7160e01b600052602260045260246000fd5b50919050565b83815282602082015260606040820152600080835461402d81613fd5565b806060860152600182166000811461404c57600181146140685761409c565b60ff1983166080870152608082151560051b870101935061409c565b86600052602060002060005b8381101561409357815488820160800152600190910190602001614074565b87016080019450505b5091979650505050505050565b600082516140bb8184602087016139e9565b9190910192915050565b600080600080600080600060e0888a0312156140e057600080fd5b6140e988613e39565b96506140f760208901613e55565b604089015160608a015160808b015160a08c015193995091975095509350915061412360c08901613e55565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611a2257806000526020600020601f840160051c810160208510156141de5750805b601f840160051c820191505b818110156141fe57600081556001016141ea565b5050505050565b6001600160401b0383111561421c5761421c61382d565b6142308361422a8354613fd5565b836141b7565b6000601f841160018114614264576000851561424c5750838201355b600019600387901b1c1916600186901b1783556141fe565b600083815260209020601f19861690835b828110156142955786850135825560209485019460019092019101614275565b50868210156142b25760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561430c57600080fd5b8151610ab381613926565b81835260006001600160fb1b0383111561433057600080fd5b8260051b80836020870137939093016020019392505050565b60408152600061435d604083018587614317565b9050826020830152949350505050565b604081526000614381604083018587614317565b82810360208401526143938185613a0d565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212205273a7fd5d9b74f6a10c8e8ff9173490991e595b881e9a1f0a7986976eaa245264736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "getLocalDisputeRoundID(uint256,uint256)": { - "details": "Returns the local dispute ID and round ID for a given core dispute ID and core round ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core." - }, - "returns": { - "localDisputeID": "The ID of the dispute in the Dispute Kit.", - "localRoundID": "The ID of the round in the Dispute Kit." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Returns the number of rounds in a dispute.", - "params": { - "_localDisputeID": "The ID of the dispute in the Dispute Kit." - }, - "returns": { - "_0": "The number of rounds in the dispute." - } - }, - "getVoteInfo(uint256,uint256,uint256)": { - "details": "Returns the vote information for a given vote ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The address of the juror who cast the vote.", - "commit": "The commit of the vote." - } - }, - "hashVote(uint256,uint256,string)": { - "details": "Computes the hash of a vote using ABI encodingThe unused parameters may be used by overriding contracts.", - "params": { - "_choice": "The choice being voted for", - "_justification": "The justification for the vote", - "_salt": "A random salt for commitment" - }, - "returns": { - "_0": "bytes32 The hash of the encoded vote parameters" - } - }, - "initialize(address,address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isAppealFunded(uint256)": { - "details": "Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "Whether the appeal funding is finished." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "DisputeKitClassic Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 6613, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6616, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)303" - }, - { - "astId": 6620, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)6552_storage)dyn_storage" - }, - { - "astId": 6624, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6626, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "singleDrawPerJuror", - "offset": 0, - "slot": "4", - "type": "t_bool" - }, - { - "astId": 6634, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "alreadyDrawn", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))" - }, - { - "astId": 6638, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "coreDisputeIDToActive", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6640, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "wNative", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)6552_storage)dyn_storage": { - "base": "t_struct(Dispute)6552_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)6590_storage)dyn_storage": { - "base": "t_struct(Round)6590_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)6599_storage)dyn_storage": { - "base": "t_struct(Vote)6599_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)303": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(uint256 => mapping(address => bool)))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)6552_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Dispute", - "members": [ - { - "astId": 6541, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)6590_storage)dyn_storage" - }, - { - "astId": 6543, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6545, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 6549, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6551, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)6590_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Round", - "members": [ - { - "astId": 6556, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)6599_storage)dyn_storage" - }, - { - "astId": 6558, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6562, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6564, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 6566, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 6568, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 6572, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6576, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6582, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 6584, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 6587, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 6589, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)6599_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Vote", - "members": [ - { - "astId": 6592, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6594, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 6596, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 6598, - "contract": "src/arbitration/dispute-kits/DisputeKitClassic.sol:DisputeKitClassic", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic_Proxy.json deleted file mode 100644 index 4244ee9a6..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xddd435d6586de97d05fb1ca32d0fd490f427c086be46ab9f8622e55f7f039a05", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1", - "transactionIndex": 2, - "gasUsed": "178492", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1f6c9d41489286adf1bc958881c75266eb876f784c07d3d303dc1e60445852a2", - "transactionHash": "0xddd435d6586de97d05fb1ca32d0fd490f427c086be46ab9f8622e55f7f039a05", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 175286074, - "transactionHash": "0xddd435d6586de97d05fb1ca32d0fd490f427c086be46ab9f8622e55f7f039a05", - "address": "0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 1, - "blockHash": "0x1f6c9d41489286adf1bc958881c75266eb876f784c07d3d303dc1e60445852a2" - } - ], - "blockNumber": 175286074, - "cumulativeGasUsed": "205532", - "status": 1, - "byzantium": true - }, - "args": [ - "0xD76E74049003faCe2EBA0B6FB61DFC9941da959F", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitClassicProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220c725b686c35c73323e89d3a1c5ad844b99f0379163dce99bcd79b25231551a8164736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220c725b686c35c73323e89d3a1c5ad844b99f0379163dce99bcd79b25231551a8164736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated.json deleted file mode 100644 index 7e322c6e0..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated.json +++ /dev/null @@ -1,1238 +0,0 @@ -{ - "address": "0x677dA30B4b27D129354DdA1e219Bcc86802132d1", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "extraDataToTokenInfo", - "outputs": [ - { - "internalType": "address", - "name": "tokenGate", - "type": "address" - }, - { - "internalType": "bool", - "name": "isERC1155", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x2b88866107b599692b44d16247e2edad04c010db28b465ebec598fe304ee8179", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x677dA30B4b27D129354DdA1e219Bcc86802132d1", - "transactionIndex": 1, - "gasUsed": "198526", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000004000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1a56f340e250ea8b08564ba8d0c52a7a1772cbd4aea06c22dc494aad1cd0e306", - "transactionHash": "0x2b88866107b599692b44d16247e2edad04c010db28b465ebec598fe304ee8179", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 175286139, - "transactionHash": "0x2b88866107b599692b44d16247e2edad04c010db28b465ebec598fe304ee8179", - "address": "0x677dA30B4b27D129354DdA1e219Bcc86802132d1", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x1a56f340e250ea8b08564ba8d0c52a7a1772cbd4aea06c22dc494aad1cd0e306" - } - ], - "blockNumber": 175286139, - "cumulativeGasUsed": "198526", - "status": 1, - "byzantium": true - }, - "args": [ - "0x89BF27c2148873E0ae4d8c6253C2e4423dF959aF", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000001bd44c4a4511dbfa7dc1d5bc201635596e7200f9" - ], - "numDeployments": 3, - "solcInputHash": "55ee2edfcfbef3e6f4c10ec53a4be5f5", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitGatedProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220996d130d61aaeb26a9d0d04a99b8d31e12de6834d2200a693f04efa432fb1da264736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220996d130d61aaeb26a9d0d04a99b8d31e12de6834d2200a693f04efa432fb1da264736f6c634300081c0033", - "execute": { - "methodName": "reinitialize", - "args": [ - "0x3829A2486d53ee984a0ca2D76552715726b77138" - ] - }, - "implementation": "0xA27EedcEA916BC1ab91720cE70c56666E854F55e", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter.json deleted file mode 100644 index 41a1c17c2..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter.json +++ /dev/null @@ -1,1312 +0,0 @@ -{ - "address": "0xd86b84eb36Cd48f3f384b4490F255b494385F429", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "CommitCastShutter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "castCommitShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVoteShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0xd5d3539eb5177d722b08883ccc20611d6fcec5290c8d03edb8f1f96531503b67", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xd86b84eb36Cd48f3f384b4490F255b494385F429", - "transactionIndex": 2, - "gasUsed": "198372", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000100000000000000000", - "blockHash": "0xf7ea7281647fcffe6def1674d78723b7c84df6822ae5d1688641b0f3546c137c", - "transactionHash": "0xd5d3539eb5177d722b08883ccc20611d6fcec5290c8d03edb8f1f96531503b67", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 175286153, - "transactionHash": "0xd5d3539eb5177d722b08883ccc20611d6fcec5290c8d03edb8f1f96531503b67", - "address": "0xd86b84eb36Cd48f3f384b4490F255b494385F429", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 8, - "blockHash": "0xf7ea7281647fcffe6def1674d78723b7c84df6822ae5d1688641b0f3546c137c" - } - ], - "blockNumber": 175286153, - "cumulativeGasUsed": "447448", - "status": 1, - "byzantium": true - }, - "args": [ - "0xAcf0eAa29419EA5523d0b672267781b09e69eD1d", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000001bd44c4a4511dbfa7dc1d5bc201635596e7200f9" - ], - "numDeployments": 3, - "solcInputHash": "55ee2edfcfbef3e6f4c10ec53a4be5f5", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitGatedShutterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122014335073f133775bc3d53bdbd73e5b08fc775962b3f58fb9a922739829545a1f64736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122014335073f133775bc3d53bdbd73e5b08fc775962b3f58fb9a922739829545a1f64736f6c634300081c0033", - "execute": { - "methodName": "reinitialize", - "args": [ - "0x3829A2486d53ee984a0ca2D76552715726b77138" - ] - }, - "implementation": "0x56199F9E5C0ef9251A251a41597A971141199EDF", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter_Implementation.json deleted file mode 100644 index 9985df52b..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter_Implementation.json +++ /dev/null @@ -1,1975 +0,0 @@ -{ - "address": "0x56199F9E5C0ef9251A251a41597A971141199EDF", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "CommitCastShutter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "castCommitShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVoteShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x06e5fa1c601a4db5a4855b05dbe74f88ea7c34e259ee5695cf57ab553b23d13b", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x56199F9E5C0ef9251A251a41597A971141199EDF", - "transactionIndex": 3, - "gasUsed": "4143927", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000200000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x4e62bcd900a0bd849eeefecd3bda0ea28b2be4826630b74303bf93eaf8ed4823", - "transactionHash": "0x06e5fa1c601a4db5a4855b05dbe74f88ea7c34e259ee5695cf57ab553b23d13b", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 179579961, - "transactionHash": "0x06e5fa1c601a4db5a4855b05dbe74f88ea7c34e259ee5695cf57ab553b23d13b", - "address": "0x56199F9E5C0ef9251A251a41597A971141199EDF", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 5, - "blockHash": "0x4e62bcd900a0bd849eeefecd3bda0ea28b2be4826630b74303bf93eaf8ed4823" - } - ], - "blockNumber": 179579961, - "cumulativeGasUsed": "4468808", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 3, - "solcInputHash": "726fe29d8d9c48c46571792cebc6e314", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_identity\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_encryptedVote\",\"type\":\"bytes\"}],\"name\":\"CommitCastShutter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"name\":\"alreadyDrawn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_identity\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_encryptedVote\",\"type\":\"bytes\"}],\"name\":\"castCommitShutter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVoteShutter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getLocalDisputeRoundID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localDisputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"hashVote\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"isAppealFunded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleDrawPerJuror\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"CommitCastShutter(uint256,address,bytes32,bytes32,bytes)\":{\"details\":\"Emitted when a vote is cast.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_encryptedVote\":\"The Shutter encrypted vote.\",\"_identity\":\"The Shutter identity used for encryption.\",\"_juror\":\"The address of the juror casting the vote commitment.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castCommitShutter(uint256,uint256[],bytes32,bytes32,bytes)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash including the justification.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_encryptedVote\":\"The Shutter encrypted vote.\",\"_identity\":\"The Shutter identity used for encryption.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"getLocalDisputeRoundID(uint256,uint256)\":{\"details\":\"Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\"},\"returns\":{\"localDisputeID\":\"The ID of the dispute in the Dispute Kit.\",\"localRoundID\":\"The ID of the round in the Dispute Kit.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Returns the number of rounds in a dispute.\",\"params\":{\"_localDisputeID\":\"The ID of the dispute in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of rounds in the dispute.\"}},\"getVoteInfo(uint256,uint256,uint256)\":{\"details\":\"Returns the vote information for a given vote ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The address of the juror who cast the vote.\",\"commit\":\"The commit of the vote.\"}},\"hashVote(uint256,uint256,string)\":{\"details\":\"Computes the hash of a vote using ABI encoding\",\"params\":{\"_choice\":\"The choice being voted for\",\"_justification\":\"The justification for the vote\",\"_salt\":\"A random salt for commitment\"},\"returns\":{\"_0\":\"bytes32 The hash of the encoded vote parameters\"}},\"initialize(address,address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isAppealFunded(uint256)\":{\"details\":\"Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"Whether the appeal funding is finished.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"DisputeKitGatedShutter Added functionality: shielded voting. Dispute kit implementation adapted from DisputeKitClassic - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitGatedShutter.sol\":\"DisputeKitGatedShutter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassicBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore, KlerosCoreBase, IDisputeKit, ISortitionModule} from \\\"../KlerosCore.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {SafeSend} from \\\"../../libraries/SafeSend.sol\\\";\\n\\n/// @title DisputeKitClassicBase\\n/// Abstract Dispute kit classic implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\nabstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable {\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default.\\n mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool)))\\n public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading.\\n mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function __DisputeKitClassicBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n dispute.jumped = false; // Possibly true if this DK has jumped in a previous round.\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n coreDisputeIDToActive[_coreDisputeID] = true;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[localRoundID];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n if (drawnAddress == address(0)) {\\n // Sortition can return 0 address if no one has staked yet.\\n return drawnAddress;\\n }\\n\\n if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true;\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash.\\n function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n }\\n\\n function _castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender);\\n }\\n\\n function _castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification,\\n address _juror\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n bytes32 voteHash = hashVote(_choice, _salt, _justification);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == _juror, \\\"The juror has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == voteHash,\\n \\\"The vote hash must match the commitment in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n } // Workaround stack too deep\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.safeSend(amount, wNative);\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @dev The unused parameters may be used by overriding contracts.\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(_choice, _salt));\\n }\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length;\\n\\n return round.totalVoted == expectedTotalVoted;\\n }\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) {\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n // Uses block.timestamp from the current tx when called by the core contract.\\n return (fundedChoices.length == 0 &&\\n block.timestamp - appealPeriodStart >=\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT);\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n /// @dev Returns the number of rounds in a dispute.\\n /// @param _localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return The number of rounds in the dispute.\\n function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) {\\n return disputes[_localDisputeID].rounds.length;\\n }\\n\\n /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @return localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return localRoundID The ID of the round in the Dispute Kit.\\n function getLocalDisputeRoundID(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID\\n ) external view returns (uint256 localDisputeID, uint256 localRoundID) {\\n localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID];\\n }\\n\\n /// @dev Returns the vote information for a given vote ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @param _voteID The ID of the vote.\\n /// @return account The address of the juror who cast the vote.\\n /// @return commit The commit of the vote.\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts.\\n /// minStake is checked directly during staking process however it's possible for the juror to get drawn\\n /// while having < minStake if it is later increased by governance.\\n /// This issue is expected and harmless.\\n /// @param _round The round in which the juror is being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return result Whether the address passes the check or not.\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view virtual returns (bool result) {\\n if (singleDrawPerJuror) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n result = !alreadyDrawn[localDisputeID][localRoundID][_juror];\\n } else {\\n result = true;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc418b9a76802db5d16819836734ecff8b76d5f37101819aee6fd1844dfe21dd9\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitGatedShutter.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {DisputeKitClassicBase, KlerosCore} from \\\"./DisputeKitClassicBase.sol\\\";\\n\\ninterface IBalanceHolder {\\n /// @dev Returns the number of tokens in `owner` account.\\n /// @dev Compatible with ERC-20 and ERC-721.\\n /// @param owner The address of the owner.\\n /// @return balance The number of tokens in `owner` account.\\n function balanceOf(address owner) external view returns (uint256 balance);\\n}\\n\\ninterface IBalanceHolderERC1155 {\\n /// @dev Returns the balance of an ERC-1155 token.\\n /// @param account The address of the token holder\\n /// @param id ID of the token\\n /// @return The token balance\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n}\\n\\n/// @title DisputeKitGatedShutter\\n/// Added functionality: shielded voting.\\n/// Dispute kit implementation adapted from DisputeKitClassic\\n/// - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitGatedShutter is DisputeKitClassicBase {\\n string public constant override version = \\\"0.12.0\\\";\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a vote is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _commit The commitment hash.\\n /// @param _identity The Shutter identity used for encryption.\\n /// @param _encryptedVote The Shutter encrypted vote.\\n event CommitCastShutter(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n bytes32 indexed _commit,\\n bytes32 _identity,\\n bytes _encryptedVote\\n );\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(address _governor, KlerosCore _core, address _wNative) external reinitializer(1) {\\n __DisputeKitClassicBase_initialize(_governor, _core, _wNative);\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(9) {\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash including the justification.\\n /// @param _identity The Shutter identity used for encryption.\\n /// @param _encryptedVote The Shutter encrypted vote.\\n function castCommitShutter(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit,\\n bytes32 _identity,\\n bytes calldata _encryptedVote\\n ) external notJumped(_coreDisputeID) {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n emit CommitCastShutter(_coreDisputeID, msg.sender, _commit, _identity, _encryptedVote);\\n }\\n\\n function castVoteShutter(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n address juror = dispute.rounds[dispute.rounds.length - 1].votes[_voteIDs[0]].account;\\n\\n // _castVote() ensures that all the _voteIDs do belong to `juror`\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, juror);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure override returns (bytes32) {\\n bytes32 justificationHash = keccak256(bytes(_justification));\\n return keccak256(abi.encode(_choice, _salt, justificationHash));\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Extracts token gating information from the extra data.\\n /// @param _extraData The extra data bytes array with the following encoding:\\n /// - bytes 0-31: uint96 courtID, not used here\\n /// - bytes 32-63: uint256 minJurors, not used here\\n /// - bytes 64-95: uint256 disputeKitID, not used here\\n /// - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160)\\n /// - bytes 128-159: uint256 tokenId\\n /// @return tokenGate The address of the token contract used for gating access.\\n /// @return isERC1155 True if the token is an ERC-1155, false for ERC-20/ERC-721.\\n /// @return tokenId The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721).\\n function _extraDataToTokenInfo(\\n bytes memory _extraData\\n ) internal pure returns (address tokenGate, bool isERC1155, uint256 tokenId) {\\n // Need at least 160 bytes to safely read the parameters\\n if (_extraData.length < 160) return (address(0), false, 0);\\n\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let packedTokenGateIsERC1155 := mload(add(_extraData, 0x80)) // 4th parameter at offset 128\\n tokenId := mload(add(_extraData, 0xA0)) // 5th parameter at offset 160 (moved up)\\n\\n // Unpack address from lower 160 bits and bool from bit 160\\n tokenGate := and(packedTokenGateIsERC1155, 0xffffffffffffffffffffffffffffffffffffffff)\\n isERC1155 := and(shr(160, packedTokenGateIsERC1155), 1)\\n }\\n }\\n\\n /// @inheritdoc DisputeKitClassicBase\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view override returns (bool) {\\n if (!super._postDrawCheck(_round, _coreDisputeID, _juror)) return false;\\n\\n // Get the local dispute and extract token info from extraData\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n (address tokenGate, bool isERC1155, uint256 tokenId) = _extraDataToTokenInfo(dispute.extraData);\\n\\n // If no token gate is specified, allow all jurors\\n if (tokenGate == address(0)) return true;\\n\\n // Check juror's token balance\\n if (isERC1155) {\\n return IBalanceHolderERC1155(tokenGate).balanceOf(_juror, tokenId) > 0;\\n } else {\\n return IBalanceHolder(tokenGate).balanceOf(_juror) > 0;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa2b7c8f0af04be5a41d5e0a3a97b359867f6e79eb98da2303d33317fe147faef\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161489e6100fc60003960008181611937015281816119600152611b4f015261489e6000f3fe6080604052600436106102465760003560e01c80636d4cd8ea11610139578063be467604116100b6578063e4c0aaf41161007a578063e4c0aaf414610753578063f2f4eb2614610773578063f32ab92714610793578063f7e7d1fd146107c8578063f8abee10146107e8578063fc6f8f161461081857600080fd5b8063be467604146106dd578063c0c53b8b146106f3578063d2b8035a14610713578063da3beb8c14610733578063e349ad30146105c557600080fd5b80638f06f112116100fd5780638f06f1121461061b578063a7cc08fe1461063b578063b34bfaa814610687578063b6ede5401461069d578063ba66fde7146106bd57600080fd5b80636d4cd8ea14610585578063751accd0146105a5578063796490f9146105c55780637c04034e146105db5780638e426460146105fb57600080fd5b80634b2f0ea0116101c75780635a155ccd1161018b5780635a155ccd1461048a5780635c92e2f6146104cb57806365540b96146104eb578063675926f61461051857806369f3f0411461053857600080fd5b80634b2f0ea0146103e15780634f1ef286146103f457806352d1902d1461040757806354fd4d501461041c578063564a565d1461045b57600080fd5b80631c3db16d1161020e5780631c3db16d1461032a5780631cc3423a146103675780632621b9a2146103875780632d68efc9146103a1578063362c3479146103c157600080fd5b80630855bbe91461024b57806309cc41b8146102805780630baa64d1146102a25780630c340a24146102c25780631200aabc146102ef575b600080fd5b34801561025757600080fd5b5061026b610266366004613bfc565b610838565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004613ca1565b610900565b005b3480156102ae57600080fd5b5061026b6102bd366004613bfc565b6109be565b3480156102ce57600080fd5b506000546102e2906001600160a01b031681565b6040516102779190613d31565b3480156102fb57600080fd5b5061031c61030a366004613bfc565b60036020526000908152604090205481565b604051908152602001610277565b34801561033657600080fd5b5061034a610345366004613bfc565b610a35565b604080519384529115156020840152151590820152606001610277565b34801561037357600080fd5b5061031c610382366004613def565b610ba3565b34801561039357600080fd5b5060045461026b9060ff1681565b3480156103ad57600080fd5b506007546102e2906001600160a01b031681565b3480156103cd57600080fd5b5061031c6103dc366004613e53565b610be3565b6102a06103ef366004613e90565b611093565b6102a0610402366004613eb2565b611923565b34801561041357600080fd5b5061031c611b42565b34801561042857600080fd5b5061044e604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102779190613f51565b34801561046757600080fd5b5061047b610476366004613bfc565b611ba0565b60405161027793929190613f64565b34801561049657600080fd5b5061026b6104a5366004613f85565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104d757600080fd5b506102a06104e6366004613fbe565b611c66565b3480156104f757600080fd5b5061050b610506366004613bfc565b611c72565b6040516102779190614010565b34801561052457600080fd5b5061031c610533366004614053565b611d36565b34801561054457600080fd5b5061055861055336600461408e565b611e79565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610277565b34801561059157600080fd5b5061026b6105a0366004613bfc565b611f31565b3480156105b157600080fd5b506102a06105c03660046140ba565b6120b4565b3480156105d157600080fd5b5061031c61271081565b3480156105e757600080fd5b506102a06105f63660046140fc565b612180565b34801561060757600080fd5b506102a0610616366004614184565b612197565b34801561062757600080fd5b506102a06106363660046140fc565b6121e3565b34801561064757600080fd5b5061065b61065636600461408e565b6122a9565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610277565b34801561069357600080fd5b5061031c614e2081565b3480156106a957600080fd5b506102a06106b83660046141a1565b61236f565b3480156106c957600080fd5b5061026b6106d836600461408e565b612562565b3480156106e957600080fd5b5061031c61138881565b3480156106ff57600080fd5b506102a061070e3660046141fb565b6125fd565b34801561071f57600080fd5b506102e261072e366004613e90565b6126c7565b34801561073f57600080fd5b5061031c61074e366004613e90565b612a16565b34801561075f57600080fd5b506102a061076e366004614184565b612b69565b34801561077f57600080fd5b506001546102e2906001600160a01b031681565b34801561079f57600080fd5b506107b36107ae366004613e90565b612bb5565b60408051928352602083019190915201610277565b3480156107d457600080fd5b506102a06107e3366004614184565b612c07565b3480156107f457600080fd5b5061026b610803366004613bfc565b60066020526000908152604090205460ff1681565b34801561082457600080fd5b5061031c610833366004613bfc565b612cd9565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa158015610885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a9919061423b565b9150915060006108b885611c72565b9050805160001480156108f757506127106113886108d68585614275565b6108e09190614288565b6108ea919061429f565b6108f48442614275565b10155b95945050505050565b600087815260036020526040902054600280548992908110610924576109246142c1565b600091825260209091206002600590920201015460ff16156109615760405162461bcd60e51b8152600401610958906142d7565b60405180910390fd5b61096d88888888612d05565b84336001600160a01b0316897fbc1efa6396a4ba1a755245703b38c48fbe744ab5117d9f09f47d26ffc1df999e8787876040516109ac93929190614337565b60405180910390a45050505050505050565b6000818152600360205260408120546002805483929081106109e2576109e26142c1565b60009182526020822060059091020180549092508290610a0490600190614275565b81548110610a1457610a146142c1565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610a6157610a616142c1565b60009182526020822060059091020180549092508290610a8390600190614275565b81548110610a9357610a936142c1565b60009182526020909120600c90910201600381015460ff169450905083610abe578060010154610ac1565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b34919061437d565b5090935060049250610b44915050565b816004811115610b5657610b566143e6565b03610b99576000610b6688611c72565b90508051600103610b975780600081518110610b8457610b846142c1565b6020026020010151965060009550600194505b505b5050509193909250565b80516020808301919091206040805180840187905280820186905260608082019390935281518082039093018352608001905280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c55919061437d565b50935050505080610ca85760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e00000000006044820152606401610958565b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f91906143fc565b15610d5d5760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610958565b60008681526006602052604090205460ff16610d8b5760405162461bcd60e51b815260040161095890614417565b600086815260036020526040812054600280549091908110610daf57610daf6142c1565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610de357610de36142c1565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e62919061444e565b5050600087815260078401602052604090205490915060ff16610eac576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ff1565b808603610f21576000868152600683016020526040902054610ecf576000610f1a565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610f109190614288565b610f1a919061429f565b9450610ff1565b600081815260078301602052604090205460ff16610ff15781600601600083600a01600181548110610f5557610f556142c1565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610f8b57610f8b6142c1565b9060005260206000200154815260200190815260200160002054610faf919061448a565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610fe49190614288565b610fee919061429f565b94505b6001600160a01b03881660009081526008830160209081526040808320898452909152812055841561108757600754611038906001600160a01b038a811691889116613068565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae898960405161107e929190918252602082015260400190565b60405180910390a45b50505050949350505050565b6000828152600360205260409020546002805484929081106110b7576110b76142c1565b600091825260209091206002600590920201015460ff16156110eb5760405162461bcd60e51b8152600401610958906142d7565b60008381526003602052604081205460028054909190811061110f5761110f6142c1565b9060005260206000209060050201905080600101548311156111735760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610958565b60008481526006602052604090205460ff166111a15760405162461bcd60e51b815260040161095890614417565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156111ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611212919061423b565b9150915081421015801561122557508042105b61126a5760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610958565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156112ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf919061444e565b505090508681036112e4576127109150611365565b6127106113886112f48686614275565b6112fe9190614288565b611308919061429f565b6113128542614275565b1061135f5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610958565b614e2091505b8454600090869061137890600190614275565b81548110611388576113886142c1565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b919061449d565b6114159190614275565b60008a815260078401602052604090205490915060ff16156114795760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610958565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e7919061449d565b905060006127106114f88784614288565b611502919061429f565b61150c908361448a565b60008c8152600686016020526040812054919250908211156115bd5760008c815260068601602052604090205434906115459084614275565b1161156a5760008c81526006860160205260409020546115659083614275565b61156c565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516115b4929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906115e990849061448a565b909155505060008c81526006860160205260408120805483929061160e90849061448a565b909155505060008c815260068601602052604090205482116116e05760008c81526006860160205260408120546009870180549192909161165090849061448a565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156118eb578285600901546116fd9190614275565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa15801561174b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176f91906143fc565b156117885760028a01805460ff1916600117905561186b565b895460038b01600061179b87600161448a565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161181691815260200190565b602060405180830381865afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611857919061449d565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016118b8939291906144f0565b6000604051808303818588803b1580156118d157600080fd5b505af11580156118e5573d6000803e3d6000fd5b50505050505b80341115611914576119146119008234614275565b6007543391906001600160a01b0316613068565b50505050505050505050505050565b61192c82613153565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119aa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661199e6000805160206148498339815191525490565b6001600160a01b031614155b156119c85760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a22575060408051601f3d908101601f19168201909252611a1f9181019061449d565b60015b611a415781604051630c76093760e01b81526004016109589190613d31565b6000805160206148498339815191528114611a7257604051632a87526960e21b815260048101829052602401610958565b6000805160206148498339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611b3d576000836001600160a01b031683604051611ad9919061458a565b600060405180830381855af49150503d8060008114611b14576040519150601f19603f3d011682016040523d82523d6000602084013e611b19565b606091505b5050905080611b3b576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b8d5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061484983398151915290565b60028181548110611bb057600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611be3906144b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0f906144b6565b8015611c5c5780601f10611c3157610100808354040283529160200191611c5c565b820191906000526020600020905b815481529060010190602001808311611c3f57829003601f168201915b5050505050905083565b611b3b84848484612d05565b6000818152600360205260408120546002805460609392908110611c9857611c986142c1565b60009182526020822060059091020180549092508290611cba90600190614275565b81548110611cca57611cca6142c1565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611d2857602002820191906000526020600020905b815481526020019060010190808311611d14575b505050505092505050919050565b600085815260036020526040812054600280548392908110611d5a57611d5a6142c1565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611d8e57611d8e6142c1565b90600052602060002090600c02016000018681548110611db057611db06142c1565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e32919061444e565b506003850154919350915060ff168015611e5657508183600201541480611e565750805b15611e69576127109450505050506108f7565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611eaa57611eaa6142c1565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611ede57611ede6142c1565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611f5557611f556142c1565b60009182526020822060059091020180549092508290611f7790600190614275565b81548110611f8757611f876142c1565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611fe2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612006919061437d565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208591906145a6565b505050505091505060008161209b5783546120a1565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b031633146120de5760405162461bcd60e51b815260040161095890614612565b6000836001600160a01b031683836040516120f9919061458a565b60006040518083038185875af1925050503d8060008114612136576040519150601f19603f3d011682016040523d82523d6000602084013e61213b565b606091505b5050905080611b3b5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610958565b61218f86868686868633613180565b505050505050565b6000546001600160a01b031633146121c15760405162461bcd60e51b815260040161095890614612565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600086815260036020526040812054600280549091908110612207576122076142c1565b6000918252602082206005909102018054909250829061222990600190614275565b81548110612239576122396142c1565b90600052602060002090600c02016000018787600081811061225d5761225d6142c1565b9050602002013581548110612274576122746142c1565b60009182526020909120600490910201546001600160a01b0316905061229f88888888888887613180565b5050505050505050565b60008060008060006002600360008a815260200190815260200160002054815481106122d7576122d76142c1565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061230b5761230b6142c1565b90600052602060002090600c0201600001878154811061232d5761232d6142c1565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146123995760405162461bcd60e51b815260040161095890614654565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2016124248587836146e6565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab919061449d565b6124b59190614275565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab5810890612550908a908a908a90614337565b60405180910390a25050505050505050565b600083815260036020526040812054600280548392908110612586576125866142c1565b600091825260208083208784526003600590930201918201905260408220548154919350839181106125ba576125ba6142c1565b90600052602060002090600c020160000184815481106125dc576125dc6142c1565b600091825260209091206004909102016003015460ff169695505050505050565b600160006126096138b1565b8054909150600160401b900460ff1680612630575080546001600160401b03808416911610155b1561264d5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556126798585856138d5565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146126f45760405162461bcd60e51b815260040161095890614654565b600083815260036020526040902054600280548592908110612718576127186142c1565b600091825260209091206002600590920201015460ff161561274c5760405162461bcd60e51b8152600401610958906142d7565b6000848152600360205260408120546002805491929183908110612772576127726142c1565b600091825260208220600590910201805490925061279290600190614275565b905060008260000182815481106127ab576127ab6142c1565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283491906147a5565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a7919061437d565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561290b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292f91906147a5565b98506001600160a01b03891661294b5750505050505050612a0f565b612956848c8b61391c565b15612a0257604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612a07565b600098505b505050505050505b5092915050565b600082815260036020526040812054600280548392908110612a3a57612a3a6142c1565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612a6e57612a6e6142c1565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af1919061444e565b5091509150826004015460001480612b20575080158015612b2057506000828152600284016020526040902054155b15612b32576000945050505050612b63565b8015612b47575050600401549150612b639050565b506000908152600290910160205260409020549150612b639050565b92915050565b6000546001600160a01b03163314612b935760405162461bcd60e51b815260040161095890614612565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546002805491929183908110612bdb57612bdb6142c1565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612c136138b1565b8054909150600160401b900460ff1680612c3a575080546001600160401b03808416911610155b15612c575760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612cee57612cee6142c1565b600091825260209091206005909102015492915050565b600084815260036020526040902054600280548692908110612d2957612d296142c1565b600091825260209091206002600590920201015460ff1615612d5d5760405162461bcd60e51b8152600401610958906142d7565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcb919061437d565b5090935060019250612ddb915050565b816004811115612ded57612ded6143e6565b14612e4a5760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610958565b82612e875760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610958565b60008681526006602052604090205460ff16612eb55760405162461bcd60e51b815260040161095890614417565b600086815260036020526040812054600280549091908110612ed957612ed96142c1565b60009182526020822060059091020180549092508290612efb90600190614275565b81548110612f0b57612f0b6142c1565b90600052602060002090600c0201905060005b86811015613001573382898984818110612f3a57612f3a6142c1565b9050602002013581548110612f5157612f516142c1565b60009182526020909120600490910201546001600160a01b031614612fb85760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610958565b8582898984818110612fcc57612fcc6142c1565b9050602002013581548110612fe357612fe36142c1565b60009182526020909120600160049092020181019190915501612f1e565b5086869050816005016000828254613019919061448a565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890613056908b908b908b906147f4565b60405180910390a35050505050505050565b6040516001600160a01b0384169083156108fc029084906000818181858888f193505050501561309757505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130d257600080fd5b505af11580156130e6573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b15801561313657600080fd5b505af115801561314a573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461317d5760405162461bcd60e51b815260040161095890614612565b50565b6000878152600360205260409020546002805489929081106131a4576131a46142c1565b600091825260209091206002600590920201015460ff16156131d85760405162461bcd60e51b8152600401610958906142d7565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613246919061437d565b5090935060029250613256915050565b816004811115613268576132686143e6565b146132c35760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610958565b866133055760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610958565b60008981526006602052604090205460ff166133335760405162461bcd60e51b815260040161095890614417565b600089815260036020526040812054600280549091908110613357576133576142c1565b9060005260206000209060050201905080600101548711156133b25760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610958565b805460009082906133c590600190614275565b815481106133d5576133d56142c1565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d9061341a908f9060040190815260200190565b60a060405180830381865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b919061437d565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156134b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134da91906145a6565b505050505091505060006134ef8b8b8b610ba3565b905060005b8c811015613776576001600160a01b038916858f8f84818110613519576135196142c1565b9050602002013581548110613530576135306142c1565b60009182526020909120600490910201546001600160a01b0316146135975760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610958565b8215806135de575081858f8f848181106135b3576135b36142c1565b90506020020135815481106135ca576135ca6142c1565b906000526020600020906004020160010154145b61365e5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610958565b848e8e83818110613671576136716142c1565b9050602002013581548110613688576136886142c1565b600091825260209091206003600490920201015460ff16156136e15760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610958565b8b858f8f848181106136f5576136f56142c1565b905060200201358154811061370c5761370c6142c1565b60009182526020909120600260049092020101556001858f8f84818110613735576137356142c1565b905060200201358154811061374c5761374c6142c1565b60009182526020909120600490910201600301805460ff19169115159190911790556001016134f4565b5050506004820180548b925060009061379090849061448a565b90915550506000888152600282016020526040812080548b92906137b590849061448a565b9091555050600181015488036137e457600381015460ff16156137df5760038101805460ff191690555b61385d565b60018101546000908152600282016020526040808220548a83529120540361382657600381015460ff166137df5760038101805460ff1916600117905561385d565b60018101546000908152600282016020526040808220548a8352912054111561385d576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b60405161389c93929190614818565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6138dd613ade565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b6000613929848484613b05565b61393557506000610bdc565b600083815260036020526040812054600280549192918390811061395b5761395b6142c1565b906000526020600020906005020190506000806000613a05846004018054613982906144b6565b80601f01602080910402602001604051908101604052809291908181526020018280546139ae906144b6565b80156139fb5780601f106139d0576101008083540402835291602001916139fb565b820191906000526020600020905b8154815290600101906020018083116139de57829003601f168201915b5050505050613b9d565b919450925090506001600160a01b038316613a2857600195505050505050610bdc565b8115613aaf57604051627eeac760e11b81526001600160a01b038881166004830152602482018390526000919085169062fdd58e906044015b602060405180830381865afa158015613a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa2919061449d565b1195505050505050610bdc565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190613a61908b90600401613d31565b613ae6613be2565b613b0357604051631afcd79f60e31b815260040160405180910390fd5b565b60045460009060ff1615613b93576000838152600360205260408120546002805491929183908110613b3957613b396142c1565b6000918252602082206005909102018054909250613b5990600190614275565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610bdc915050565b5060019392505050565b600080600060a084511015613bba57506000915081905080613bdb565b505050608081015160a0808301516001600160a01b0383169290911c600116905b9193909250565b6000613bec6138b1565b54600160401b900460ff16919050565b600060208284031215613c0e57600080fd5b5035919050565b60008083601f840112613c2757600080fd5b5081356001600160401b03811115613c3e57600080fd5b6020830191508360208260051b8501011115613c5957600080fd5b9250929050565b60008083601f840112613c7257600080fd5b5081356001600160401b03811115613c8957600080fd5b602083019150836020828501011115613c5957600080fd5b600080600080600080600060a0888a031215613cbc57600080fd5b8735965060208801356001600160401b03811115613cd957600080fd5b613ce58a828b01613c15565b909750955050604088013593506060880135925060808801356001600160401b03811115613d1257600080fd5b613d1e8a828b01613c60565b989b979a50959850939692959293505050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613d6c57600080fd5b8135602083016000806001600160401b03841115613d8c57613d8c613d45565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613dba57613dba613d45565b604052838152905080828401871015613dd257600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613e0457600080fd5b833592506020840135915060408401356001600160401b03811115613e2857600080fd5b613e3486828701613d5b565b9150509250925092565b6001600160a01b038116811461317d57600080fd5b60008060008060808587031215613e6957600080fd5b843593506020850135613e7b81613e3e565b93969395505050506040820135916060013590565b60008060408385031215613ea357600080fd5b50508035926020909101359150565b60008060408385031215613ec557600080fd5b8235613ed081613e3e565b915060208301356001600160401b03811115613eeb57600080fd5b613ef785828601613d5b565b9150509250929050565b60005b83811015613f1c578181015183820152602001613f04565b50506000910152565b60008151808452613f3d816020860160208601613f01565b601f01601f19169290920160200192915050565b602081526000610bdc6020830184613f25565b83815282151560208201526060604082015260006108f76060830184613f25565b600080600060608486031215613f9a57600080fd5b83359250602084013591506040840135613fb381613e3e565b809150509250925092565b60008060008060608587031215613fd457600080fd5b8435935060208501356001600160401b03811115613ff157600080fd5b613ffd87828801613c15565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b8181101561404857835183526020938401939092019160010161402a565b509095945050505050565b600080600080600060a0868803121561406b57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000606084860312156140a357600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156140cf57600080fd5b83356140da81613e3e565b92506020840135915060408401356001600160401b03811115613e2857600080fd5b60008060008060008060a0878903121561411557600080fd5b8635955060208701356001600160401b0381111561413257600080fd5b61413e89828a01613c15565b909650945050604087013592506060870135915060808701356001600160401b0381111561416b57600080fd5b61417789828a01613d5b565b9150509295509295509295565b60006020828403121561419657600080fd5b8135610bdc81613e3e565b6000806000806000608086880312156141b957600080fd5b853594506020860135935060408601356001600160401b038111156141dd57600080fd5b6141e988828901613c60565b96999598509660600135949350505050565b60008060006060848603121561421057600080fd5b833561421b81613e3e565b9250602084013561422b81613e3e565b91506040840135613fb381613e3e565b6000806040838503121561424e57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115612b6357612b6361425f565b8082028115828204841417612b6357612b6361425f565b6000826142bc57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006108f760408301848661430e565b80516001600160601b038116811461436857600080fd5b919050565b8051801515811461436857600080fd5b600080600080600060a0868803121561439557600080fd5b61439e86614351565b945060208601516143ae81613e3e565b6040870151909450600581106143c357600080fd5b92506143d16060870161436d565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561440e57600080fd5b610bdc8261436d565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b60008060006060848603121561446357600080fd5b835192506144736020850161436d565b91506144816040850161436d565b90509250925092565b80820180821115612b6357612b6361425f565b6000602082840312156144af57600080fd5b5051919050565b600181811c908216806144ca57607f821691505b6020821081036144ea57634e487b7160e01b600052602260045260246000fd5b50919050565b83815282602082015260606040820152600080835461450e816144b6565b806060860152600182166000811461452d57600181146145495761457d565b60ff1983166080870152608082151560051b870101935061457d565b86600052602060002060005b8381101561457457815488820160800152600190910190602001614555565b87016080019450505b5091979650505050505050565b6000825161459c818460208701613f01565b9190910192915050565b600080600080600080600060e0888a0312156145c157600080fd5b6145ca88614351565b96506145d86020890161436d565b604089015160608a015160808b015160a08c015193995091975095509350915061460460c0890161436d565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611b3d57806000526020600020601f840160051c810160208510156146bf5750805b601f840160051c820191505b818110156146df57600081556001016146cb565b5050505050565b6001600160401b038311156146fd576146fd613d45565b6147118361470b83546144b6565b83614698565b6000601f841160018114614745576000851561472d5750838201355b600019600387901b1c1916600186901b1783556146df565b600083815260209020601f19861690835b828110156147765786850135825560209485019460019092019101614756565b50868210156147935760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156147b757600080fd5b8151610bdc81613e3e565b81835260006001600160fb1b038311156147db57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006148086040830185876147c2565b9050826020830152949350505050565b60408152600061482c6040830185876147c2565b828103602084015261483e8185613f25565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220cd5d3742f8c0524170b60f04c4a752d412f4c6d549337356905de2b1c28294eb64736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102465760003560e01c80636d4cd8ea11610139578063be467604116100b6578063e4c0aaf41161007a578063e4c0aaf414610753578063f2f4eb2614610773578063f32ab92714610793578063f7e7d1fd146107c8578063f8abee10146107e8578063fc6f8f161461081857600080fd5b8063be467604146106dd578063c0c53b8b146106f3578063d2b8035a14610713578063da3beb8c14610733578063e349ad30146105c557600080fd5b80638f06f112116100fd5780638f06f1121461061b578063a7cc08fe1461063b578063b34bfaa814610687578063b6ede5401461069d578063ba66fde7146106bd57600080fd5b80636d4cd8ea14610585578063751accd0146105a5578063796490f9146105c55780637c04034e146105db5780638e426460146105fb57600080fd5b80634b2f0ea0116101c75780635a155ccd1161018b5780635a155ccd1461048a5780635c92e2f6146104cb57806365540b96146104eb578063675926f61461051857806369f3f0411461053857600080fd5b80634b2f0ea0146103e15780634f1ef286146103f457806352d1902d1461040757806354fd4d501461041c578063564a565d1461045b57600080fd5b80631c3db16d1161020e5780631c3db16d1461032a5780631cc3423a146103675780632621b9a2146103875780632d68efc9146103a1578063362c3479146103c157600080fd5b80630855bbe91461024b57806309cc41b8146102805780630baa64d1146102a25780630c340a24146102c25780631200aabc146102ef575b600080fd5b34801561025757600080fd5b5061026b610266366004613bfc565b610838565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004613ca1565b610900565b005b3480156102ae57600080fd5b5061026b6102bd366004613bfc565b6109be565b3480156102ce57600080fd5b506000546102e2906001600160a01b031681565b6040516102779190613d31565b3480156102fb57600080fd5b5061031c61030a366004613bfc565b60036020526000908152604090205481565b604051908152602001610277565b34801561033657600080fd5b5061034a610345366004613bfc565b610a35565b604080519384529115156020840152151590820152606001610277565b34801561037357600080fd5b5061031c610382366004613def565b610ba3565b34801561039357600080fd5b5060045461026b9060ff1681565b3480156103ad57600080fd5b506007546102e2906001600160a01b031681565b3480156103cd57600080fd5b5061031c6103dc366004613e53565b610be3565b6102a06103ef366004613e90565b611093565b6102a0610402366004613eb2565b611923565b34801561041357600080fd5b5061031c611b42565b34801561042857600080fd5b5061044e604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102779190613f51565b34801561046757600080fd5b5061047b610476366004613bfc565b611ba0565b60405161027793929190613f64565b34801561049657600080fd5b5061026b6104a5366004613f85565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104d757600080fd5b506102a06104e6366004613fbe565b611c66565b3480156104f757600080fd5b5061050b610506366004613bfc565b611c72565b6040516102779190614010565b34801561052457600080fd5b5061031c610533366004614053565b611d36565b34801561054457600080fd5b5061055861055336600461408e565b611e79565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610277565b34801561059157600080fd5b5061026b6105a0366004613bfc565b611f31565b3480156105b157600080fd5b506102a06105c03660046140ba565b6120b4565b3480156105d157600080fd5b5061031c61271081565b3480156105e757600080fd5b506102a06105f63660046140fc565b612180565b34801561060757600080fd5b506102a0610616366004614184565b612197565b34801561062757600080fd5b506102a06106363660046140fc565b6121e3565b34801561064757600080fd5b5061065b61065636600461408e565b6122a9565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610277565b34801561069357600080fd5b5061031c614e2081565b3480156106a957600080fd5b506102a06106b83660046141a1565b61236f565b3480156106c957600080fd5b5061026b6106d836600461408e565b612562565b3480156106e957600080fd5b5061031c61138881565b3480156106ff57600080fd5b506102a061070e3660046141fb565b6125fd565b34801561071f57600080fd5b506102e261072e366004613e90565b6126c7565b34801561073f57600080fd5b5061031c61074e366004613e90565b612a16565b34801561075f57600080fd5b506102a061076e366004614184565b612b69565b34801561077f57600080fd5b506001546102e2906001600160a01b031681565b34801561079f57600080fd5b506107b36107ae366004613e90565b612bb5565b60408051928352602083019190915201610277565b3480156107d457600080fd5b506102a06107e3366004614184565b612c07565b3480156107f457600080fd5b5061026b610803366004613bfc565b60066020526000908152604090205460ff1681565b34801561082457600080fd5b5061031c610833366004613bfc565b612cd9565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa158015610885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a9919061423b565b9150915060006108b885611c72565b9050805160001480156108f757506127106113886108d68585614275565b6108e09190614288565b6108ea919061429f565b6108f48442614275565b10155b95945050505050565b600087815260036020526040902054600280548992908110610924576109246142c1565b600091825260209091206002600590920201015460ff16156109615760405162461bcd60e51b8152600401610958906142d7565b60405180910390fd5b61096d88888888612d05565b84336001600160a01b0316897fbc1efa6396a4ba1a755245703b38c48fbe744ab5117d9f09f47d26ffc1df999e8787876040516109ac93929190614337565b60405180910390a45050505050505050565b6000818152600360205260408120546002805483929081106109e2576109e26142c1565b60009182526020822060059091020180549092508290610a0490600190614275565b81548110610a1457610a146142c1565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610a6157610a616142c1565b60009182526020822060059091020180549092508290610a8390600190614275565b81548110610a9357610a936142c1565b60009182526020909120600c90910201600381015460ff169450905083610abe578060010154610ac1565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b34919061437d565b5090935060049250610b44915050565b816004811115610b5657610b566143e6565b03610b99576000610b6688611c72565b90508051600103610b975780600081518110610b8457610b846142c1565b6020026020010151965060009550600194505b505b5050509193909250565b80516020808301919091206040805180840187905280820186905260608082019390935281518082039093018352608001905280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c55919061437d565b50935050505080610ca85760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e00000000006044820152606401610958565b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f91906143fc565b15610d5d5760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610958565b60008681526006602052604090205460ff16610d8b5760405162461bcd60e51b815260040161095890614417565b600086815260036020526040812054600280549091908110610daf57610daf6142c1565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610de357610de36142c1565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e62919061444e565b5050600087815260078401602052604090205490915060ff16610eac576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ff1565b808603610f21576000868152600683016020526040902054610ecf576000610f1a565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610f109190614288565b610f1a919061429f565b9450610ff1565b600081815260078301602052604090205460ff16610ff15781600601600083600a01600181548110610f5557610f556142c1565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610f8b57610f8b6142c1565b9060005260206000200154815260200190815260200160002054610faf919061448a565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610fe49190614288565b610fee919061429f565b94505b6001600160a01b03881660009081526008830160209081526040808320898452909152812055841561108757600754611038906001600160a01b038a811691889116613068565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae898960405161107e929190918252602082015260400190565b60405180910390a45b50505050949350505050565b6000828152600360205260409020546002805484929081106110b7576110b76142c1565b600091825260209091206002600590920201015460ff16156110eb5760405162461bcd60e51b8152600401610958906142d7565b60008381526003602052604081205460028054909190811061110f5761110f6142c1565b9060005260206000209060050201905080600101548311156111735760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610958565b60008481526006602052604090205460ff166111a15760405162461bcd60e51b815260040161095890614417565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156111ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611212919061423b565b9150915081421015801561122557508042105b61126a5760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610958565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156112ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf919061444e565b505090508681036112e4576127109150611365565b6127106113886112f48686614275565b6112fe9190614288565b611308919061429f565b6113128542614275565b1061135f5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610958565b614e2091505b8454600090869061137890600190614275565b81548110611388576113886142c1565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b919061449d565b6114159190614275565b60008a815260078401602052604090205490915060ff16156114795760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610958565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e7919061449d565b905060006127106114f88784614288565b611502919061429f565b61150c908361448a565b60008c8152600686016020526040812054919250908211156115bd5760008c815260068601602052604090205434906115459084614275565b1161156a5760008c81526006860160205260409020546115659083614275565b61156c565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516115b4929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906115e990849061448a565b909155505060008c81526006860160205260408120805483929061160e90849061448a565b909155505060008c815260068601602052604090205482116116e05760008c81526006860160205260408120546009870180549192909161165090849061448a565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156118eb578285600901546116fd9190614275565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa15801561174b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176f91906143fc565b156117885760028a01805460ff1916600117905561186b565b895460038b01600061179b87600161448a565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161181691815260200190565b602060405180830381865afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611857919061449d565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016118b8939291906144f0565b6000604051808303818588803b1580156118d157600080fd5b505af11580156118e5573d6000803e3d6000fd5b50505050505b80341115611914576119146119008234614275565b6007543391906001600160a01b0316613068565b50505050505050505050505050565b61192c82613153565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119aa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661199e6000805160206148498339815191525490565b6001600160a01b031614155b156119c85760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a22575060408051601f3d908101601f19168201909252611a1f9181019061449d565b60015b611a415781604051630c76093760e01b81526004016109589190613d31565b6000805160206148498339815191528114611a7257604051632a87526960e21b815260048101829052602401610958565b6000805160206148498339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611b3d576000836001600160a01b031683604051611ad9919061458a565b600060405180830381855af49150503d8060008114611b14576040519150601f19603f3d011682016040523d82523d6000602084013e611b19565b606091505b5050905080611b3b576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b8d5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061484983398151915290565b60028181548110611bb057600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611be3906144b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0f906144b6565b8015611c5c5780601f10611c3157610100808354040283529160200191611c5c565b820191906000526020600020905b815481529060010190602001808311611c3f57829003601f168201915b5050505050905083565b611b3b84848484612d05565b6000818152600360205260408120546002805460609392908110611c9857611c986142c1565b60009182526020822060059091020180549092508290611cba90600190614275565b81548110611cca57611cca6142c1565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611d2857602002820191906000526020600020905b815481526020019060010190808311611d14575b505050505092505050919050565b600085815260036020526040812054600280548392908110611d5a57611d5a6142c1565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611d8e57611d8e6142c1565b90600052602060002090600c02016000018681548110611db057611db06142c1565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e32919061444e565b506003850154919350915060ff168015611e5657508183600201541480611e565750805b15611e69576127109450505050506108f7565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611eaa57611eaa6142c1565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611ede57611ede6142c1565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611f5557611f556142c1565b60009182526020822060059091020180549092508290611f7790600190614275565b81548110611f8757611f876142c1565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611fe2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612006919061437d565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208591906145a6565b505050505091505060008161209b5783546120a1565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b031633146120de5760405162461bcd60e51b815260040161095890614612565b6000836001600160a01b031683836040516120f9919061458a565b60006040518083038185875af1925050503d8060008114612136576040519150601f19603f3d011682016040523d82523d6000602084013e61213b565b606091505b5050905080611b3b5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610958565b61218f86868686868633613180565b505050505050565b6000546001600160a01b031633146121c15760405162461bcd60e51b815260040161095890614612565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600086815260036020526040812054600280549091908110612207576122076142c1565b6000918252602082206005909102018054909250829061222990600190614275565b81548110612239576122396142c1565b90600052602060002090600c02016000018787600081811061225d5761225d6142c1565b9050602002013581548110612274576122746142c1565b60009182526020909120600490910201546001600160a01b0316905061229f88888888888887613180565b5050505050505050565b60008060008060006002600360008a815260200190815260200160002054815481106122d7576122d76142c1565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061230b5761230b6142c1565b90600052602060002090600c0201600001878154811061232d5761232d6142c1565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146123995760405162461bcd60e51b815260040161095890614654565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2016124248587836146e6565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab919061449d565b6124b59190614275565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab5810890612550908a908a908a90614337565b60405180910390a25050505050505050565b600083815260036020526040812054600280548392908110612586576125866142c1565b600091825260208083208784526003600590930201918201905260408220548154919350839181106125ba576125ba6142c1565b90600052602060002090600c020160000184815481106125dc576125dc6142c1565b600091825260209091206004909102016003015460ff169695505050505050565b600160006126096138b1565b8054909150600160401b900460ff1680612630575080546001600160401b03808416911610155b1561264d5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556126798585856138d5565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146126f45760405162461bcd60e51b815260040161095890614654565b600083815260036020526040902054600280548592908110612718576127186142c1565b600091825260209091206002600590920201015460ff161561274c5760405162461bcd60e51b8152600401610958906142d7565b6000848152600360205260408120546002805491929183908110612772576127726142c1565b600091825260208220600590910201805490925061279290600190614275565b905060008260000182815481106127ab576127ab6142c1565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283491906147a5565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a7919061437d565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561290b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292f91906147a5565b98506001600160a01b03891661294b5750505050505050612a0f565b612956848c8b61391c565b15612a0257604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612a07565b600098505b505050505050505b5092915050565b600082815260036020526040812054600280548392908110612a3a57612a3a6142c1565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612a6e57612a6e6142c1565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af1919061444e565b5091509150826004015460001480612b20575080158015612b2057506000828152600284016020526040902054155b15612b32576000945050505050612b63565b8015612b47575050600401549150612b639050565b506000908152600290910160205260409020549150612b639050565b92915050565b6000546001600160a01b03163314612b935760405162461bcd60e51b815260040161095890614612565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546002805491929183908110612bdb57612bdb6142c1565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612c136138b1565b8054909150600160401b900460ff1680612c3a575080546001600160401b03808416911610155b15612c575760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612cee57612cee6142c1565b600091825260209091206005909102015492915050565b600084815260036020526040902054600280548692908110612d2957612d296142c1565b600091825260209091206002600590920201015460ff1615612d5d5760405162461bcd60e51b8152600401610958906142d7565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcb919061437d565b5090935060019250612ddb915050565b816004811115612ded57612ded6143e6565b14612e4a5760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610958565b82612e875760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610958565b60008681526006602052604090205460ff16612eb55760405162461bcd60e51b815260040161095890614417565b600086815260036020526040812054600280549091908110612ed957612ed96142c1565b60009182526020822060059091020180549092508290612efb90600190614275565b81548110612f0b57612f0b6142c1565b90600052602060002090600c0201905060005b86811015613001573382898984818110612f3a57612f3a6142c1565b9050602002013581548110612f5157612f516142c1565b60009182526020909120600490910201546001600160a01b031614612fb85760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610958565b8582898984818110612fcc57612fcc6142c1565b9050602002013581548110612fe357612fe36142c1565b60009182526020909120600160049092020181019190915501612f1e565b5086869050816005016000828254613019919061448a565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f0890613056908b908b908b906147f4565b60405180910390a35050505050505050565b6040516001600160a01b0384169083156108fc029084906000818181858888f193505050501561309757505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130d257600080fd5b505af11580156130e6573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b15801561313657600080fd5b505af115801561314a573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461317d5760405162461bcd60e51b815260040161095890614612565b50565b6000878152600360205260409020546002805489929081106131a4576131a46142c1565b600091825260209091206002600590920201015460ff16156131d85760405162461bcd60e51b8152600401610958906142d7565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613246919061437d565b5090935060029250613256915050565b816004811115613268576132686143e6565b146132c35760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610958565b866133055760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610958565b60008981526006602052604090205460ff166133335760405162461bcd60e51b815260040161095890614417565b600089815260036020526040812054600280549091908110613357576133576142c1565b9060005260206000209060050201905080600101548711156133b25760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610958565b805460009082906133c590600190614275565b815481106133d5576133d56142c1565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d9061341a908f9060040190815260200190565b60a060405180830381865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b919061437d565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156134b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134da91906145a6565b505050505091505060006134ef8b8b8b610ba3565b905060005b8c811015613776576001600160a01b038916858f8f84818110613519576135196142c1565b9050602002013581548110613530576135306142c1565b60009182526020909120600490910201546001600160a01b0316146135975760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610958565b8215806135de575081858f8f848181106135b3576135b36142c1565b90506020020135815481106135ca576135ca6142c1565b906000526020600020906004020160010154145b61365e5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610958565b848e8e83818110613671576136716142c1565b9050602002013581548110613688576136886142c1565b600091825260209091206003600490920201015460ff16156136e15760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610958565b8b858f8f848181106136f5576136f56142c1565b905060200201358154811061370c5761370c6142c1565b60009182526020909120600260049092020101556001858f8f84818110613735576137356142c1565b905060200201358154811061374c5761374c6142c1565b60009182526020909120600490910201600301805460ff19169115159190911790556001016134f4565b5050506004820180548b925060009061379090849061448a565b90915550506000888152600282016020526040812080548b92906137b590849061448a565b9091555050600181015488036137e457600381015460ff16156137df5760038101805460ff191690555b61385d565b60018101546000908152600282016020526040808220548a83529120540361382657600381015460ff166137df5760038101805460ff1916600117905561385d565b60018101546000908152600282016020526040808220548a8352912054111561385d576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b60405161389c93929190614818565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6138dd613ade565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b6000613929848484613b05565b61393557506000610bdc565b600083815260036020526040812054600280549192918390811061395b5761395b6142c1565b906000526020600020906005020190506000806000613a05846004018054613982906144b6565b80601f01602080910402602001604051908101604052809291908181526020018280546139ae906144b6565b80156139fb5780601f106139d0576101008083540402835291602001916139fb565b820191906000526020600020905b8154815290600101906020018083116139de57829003601f168201915b5050505050613b9d565b919450925090506001600160a01b038316613a2857600195505050505050610bdc565b8115613aaf57604051627eeac760e11b81526001600160a01b038881166004830152602482018390526000919085169062fdd58e906044015b602060405180830381865afa158015613a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa2919061449d565b1195505050505050610bdc565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190613a61908b90600401613d31565b613ae6613be2565b613b0357604051631afcd79f60e31b815260040160405180910390fd5b565b60045460009060ff1615613b93576000838152600360205260408120546002805491929183908110613b3957613b396142c1565b6000918252602082206005909102018054909250613b5990600190614275565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610bdc915050565b5060019392505050565b600080600060a084511015613bba57506000915081905080613bdb565b505050608081015160a0808301516001600160a01b0383169290911c600116905b9193909250565b6000613bec6138b1565b54600160401b900460ff16919050565b600060208284031215613c0e57600080fd5b5035919050565b60008083601f840112613c2757600080fd5b5081356001600160401b03811115613c3e57600080fd5b6020830191508360208260051b8501011115613c5957600080fd5b9250929050565b60008083601f840112613c7257600080fd5b5081356001600160401b03811115613c8957600080fd5b602083019150836020828501011115613c5957600080fd5b600080600080600080600060a0888a031215613cbc57600080fd5b8735965060208801356001600160401b03811115613cd957600080fd5b613ce58a828b01613c15565b909750955050604088013593506060880135925060808801356001600160401b03811115613d1257600080fd5b613d1e8a828b01613c60565b989b979a50959850939692959293505050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613d6c57600080fd5b8135602083016000806001600160401b03841115613d8c57613d8c613d45565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613dba57613dba613d45565b604052838152905080828401871015613dd257600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613e0457600080fd5b833592506020840135915060408401356001600160401b03811115613e2857600080fd5b613e3486828701613d5b565b9150509250925092565b6001600160a01b038116811461317d57600080fd5b60008060008060808587031215613e6957600080fd5b843593506020850135613e7b81613e3e565b93969395505050506040820135916060013590565b60008060408385031215613ea357600080fd5b50508035926020909101359150565b60008060408385031215613ec557600080fd5b8235613ed081613e3e565b915060208301356001600160401b03811115613eeb57600080fd5b613ef785828601613d5b565b9150509250929050565b60005b83811015613f1c578181015183820152602001613f04565b50506000910152565b60008151808452613f3d816020860160208601613f01565b601f01601f19169290920160200192915050565b602081526000610bdc6020830184613f25565b83815282151560208201526060604082015260006108f76060830184613f25565b600080600060608486031215613f9a57600080fd5b83359250602084013591506040840135613fb381613e3e565b809150509250925092565b60008060008060608587031215613fd457600080fd5b8435935060208501356001600160401b03811115613ff157600080fd5b613ffd87828801613c15565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b8181101561404857835183526020938401939092019160010161402a565b509095945050505050565b600080600080600060a0868803121561406b57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000606084860312156140a357600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156140cf57600080fd5b83356140da81613e3e565b92506020840135915060408401356001600160401b03811115613e2857600080fd5b60008060008060008060a0878903121561411557600080fd5b8635955060208701356001600160401b0381111561413257600080fd5b61413e89828a01613c15565b909650945050604087013592506060870135915060808701356001600160401b0381111561416b57600080fd5b61417789828a01613d5b565b9150509295509295509295565b60006020828403121561419657600080fd5b8135610bdc81613e3e565b6000806000806000608086880312156141b957600080fd5b853594506020860135935060408601356001600160401b038111156141dd57600080fd5b6141e988828901613c60565b96999598509660600135949350505050565b60008060006060848603121561421057600080fd5b833561421b81613e3e565b9250602084013561422b81613e3e565b91506040840135613fb381613e3e565b6000806040838503121561424e57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115612b6357612b6361425f565b8082028115828204841417612b6357612b6361425f565b6000826142bc57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006108f760408301848661430e565b80516001600160601b038116811461436857600080fd5b919050565b8051801515811461436857600080fd5b600080600080600060a0868803121561439557600080fd5b61439e86614351565b945060208601516143ae81613e3e565b6040870151909450600581106143c357600080fd5b92506143d16060870161436d565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561440e57600080fd5b610bdc8261436d565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b60008060006060848603121561446357600080fd5b835192506144736020850161436d565b91506144816040850161436d565b90509250925092565b80820180821115612b6357612b6361425f565b6000602082840312156144af57600080fd5b5051919050565b600181811c908216806144ca57607f821691505b6020821081036144ea57634e487b7160e01b600052602260045260246000fd5b50919050565b83815282602082015260606040820152600080835461450e816144b6565b806060860152600182166000811461452d57600181146145495761457d565b60ff1983166080870152608082151560051b870101935061457d565b86600052602060002060005b8381101561457457815488820160800152600190910190602001614555565b87016080019450505b5091979650505050505050565b6000825161459c818460208701613f01565b9190910192915050565b600080600080600080600060e0888a0312156145c157600080fd5b6145ca88614351565b96506145d86020890161436d565b604089015160608a015160808b015160a08c015193995091975095509350915061460460c0890161436d565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611b3d57806000526020600020601f840160051c810160208510156146bf5750805b601f840160051c820191505b818110156146df57600081556001016146cb565b5050505050565b6001600160401b038311156146fd576146fd613d45565b6147118361470b83546144b6565b83614698565b6000601f841160018114614745576000851561472d5750838201355b600019600387901b1c1916600186901b1783556146df565b600083815260209020601f19861690835b828110156147765786850135825560209485019460019092019101614756565b50868210156147935760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156147b757600080fd5b8151610bdc81613e3e565b81835260006001600160fb1b038311156147db57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006148086040830185876147c2565b9050826020830152949350505050565b60408152600061482c6040830185876147c2565b828103602084015261483e8185613f25565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220cd5d3742f8c0524170b60f04c4a752d412f4c6d549337356905de2b1c28294eb64736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "CommitCastShutter(uint256,address,bytes32,bytes32,bytes)": { - "details": "Emitted when a vote is cast.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_encryptedVote": "The Shutter encrypted vote.", - "_identity": "The Shutter identity used for encryption.", - "_juror": "The address of the juror casting the vote commitment." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castCommitShutter(uint256,uint256[],bytes32,bytes32,bytes)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash including the justification.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_encryptedVote": "The Shutter encrypted vote.", - "_identity": "The Shutter identity used for encryption.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "getLocalDisputeRoundID(uint256,uint256)": { - "details": "Returns the local dispute ID and round ID for a given core dispute ID and core round ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core." - }, - "returns": { - "localDisputeID": "The ID of the dispute in the Dispute Kit.", - "localRoundID": "The ID of the round in the Dispute Kit." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Returns the number of rounds in a dispute.", - "params": { - "_localDisputeID": "The ID of the dispute in the Dispute Kit." - }, - "returns": { - "_0": "The number of rounds in the dispute." - } - }, - "getVoteInfo(uint256,uint256,uint256)": { - "details": "Returns the vote information for a given vote ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The address of the juror who cast the vote.", - "commit": "The commit of the vote." - } - }, - "hashVote(uint256,uint256,string)": { - "details": "Computes the hash of a vote using ABI encoding", - "params": { - "_choice": "The choice being voted for", - "_justification": "The justification for the vote", - "_salt": "A random salt for commitment" - }, - "returns": { - "_0": "bytes32 The hash of the encoded vote parameters" - } - }, - "initialize(address,address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isAppealFunded(uint256)": { - "details": "Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "Whether the appeal funding is finished." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "DisputeKitGatedShutter Added functionality: shielded voting. Dispute kit implementation adapted from DisputeKitClassic - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 6613, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6616, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)303" - }, - { - "astId": 6620, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)6552_storage)dyn_storage" - }, - { - "astId": 6624, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6626, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "singleDrawPerJuror", - "offset": 0, - "slot": "4", - "type": "t_bool" - }, - { - "astId": 6634, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "alreadyDrawn", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))" - }, - { - "astId": 6638, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "coreDisputeIDToActive", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6640, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "wNative", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)6552_storage)dyn_storage": { - "base": "t_struct(Dispute)6552_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)6590_storage)dyn_storage": { - "base": "t_struct(Round)6590_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)6599_storage)dyn_storage": { - "base": "t_struct(Vote)6599_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)303": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(uint256 => mapping(address => bool)))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)6552_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Dispute", - "members": [ - { - "astId": 6541, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)6590_storage)dyn_storage" - }, - { - "astId": 6543, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6545, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 6549, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6551, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)6590_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Round", - "members": [ - { - "astId": 6556, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)6599_storage)dyn_storage" - }, - { - "astId": 6558, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6562, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6564, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 6566, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 6568, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 6572, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6576, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6582, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 6584, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 6587, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 6589, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)6599_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Vote", - "members": [ - { - "astId": 6592, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6594, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 6596, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 6598, - "contract": "src/arbitration/dispute-kits/DisputeKitGatedShutter.sol:DisputeKitGatedShutter", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter_Proxy.json deleted file mode 100644 index 07d2b9f90..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0xd86b84eb36Cd48f3f384b4490F255b494385F429", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xd5d3539eb5177d722b08883ccc20611d6fcec5290c8d03edb8f1f96531503b67", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xd86b84eb36Cd48f3f384b4490F255b494385F429", - "transactionIndex": 2, - "gasUsed": "198372", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000100000000000000000", - "blockHash": "0xf7ea7281647fcffe6def1674d78723b7c84df6822ae5d1688641b0f3546c137c", - "transactionHash": "0xd5d3539eb5177d722b08883ccc20611d6fcec5290c8d03edb8f1f96531503b67", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 175286153, - "transactionHash": "0xd5d3539eb5177d722b08883ccc20611d6fcec5290c8d03edb8f1f96531503b67", - "address": "0xd86b84eb36Cd48f3f384b4490F255b494385F429", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 8, - "blockHash": "0xf7ea7281647fcffe6def1674d78723b7c84df6822ae5d1688641b0f3546c137c" - } - ], - "blockNumber": 175286153, - "cumulativeGasUsed": "447448", - "status": 1, - "byzantium": true - }, - "args": [ - "0xAcf0eAa29419EA5523d0b672267781b09e69eD1d", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000001bd44c4a4511dbfa7dc1d5bc201635596e7200f9" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitGatedShutterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122014335073f133775bc3d53bdbd73e5b08fc775962b3f58fb9a922739829545a1f64736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122014335073f133775bc3d53bdbd73e5b08fc775962b3f58fb9a922739829545a1f64736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated_Implementation.json deleted file mode 100644 index c703dd11f..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated_Implementation.json +++ /dev/null @@ -1,1892 +0,0 @@ -{ - "address": "0xA27EedcEA916BC1ab91720cE70c56666E854F55e", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "extraDataToTokenInfo", - "outputs": [ - { - "internalType": "address", - "name": "tokenGate", - "type": "address" - }, - { - "internalType": "bool", - "name": "isERC1155", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xaa25b92c25dfdd6a1b309e021af6a5431cb85af0de3950d46a891714ca31c388", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xA27EedcEA916BC1ab91720cE70c56666E854F55e", - "transactionIndex": 7, - "gasUsed": "4030485", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x2fbe4c1c013729058a07be1e79c96165712beeb9f80b9ee87a2c49ecf74613d4", - "transactionHash": "0xaa25b92c25dfdd6a1b309e021af6a5431cb85af0de3950d46a891714ca31c388", - "logs": [ - { - "transactionIndex": 7, - "blockNumber": 179579878, - "transactionHash": "0xaa25b92c25dfdd6a1b309e021af6a5431cb85af0de3950d46a891714ca31c388", - "address": "0xA27EedcEA916BC1ab91720cE70c56666E854F55e", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 21, - "blockHash": "0x2fbe4c1c013729058a07be1e79c96165712beeb9f80b9ee87a2c49ecf74613d4" - } - ], - "blockNumber": 179579878, - "cumulativeGasUsed": "4701761", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 3, - "solcInputHash": "726fe29d8d9c48c46571792cebc6e314", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"name\":\"alreadyDrawn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"extraDataToTokenInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"tokenGate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isERC1155\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getLocalDisputeRoundID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localDisputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"hashVote\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"isAppealFunded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleDrawPerJuror\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"extraDataToTokenInfo(bytes)\":{\"details\":\"Extracts token gating information from the extra data.\",\"params\":{\"_extraData\":\"The extra data bytes array with the following encoding: - bytes 0-31: uint96 courtID, not used here - bytes 32-63: uint256 minJurors, not used here - bytes 64-95: uint256 disputeKitID, not used here - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160) - bytes 128-159: uint256 tokenId\"},\"returns\":{\"isERC1155\":\"True if the token is an ERC-1155, false for ERC-20/ERC-721.\",\"tokenGate\":\"The address of the token contract used for gating access.\",\"tokenId\":\"The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721).\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"getLocalDisputeRoundID(uint256,uint256)\":{\"details\":\"Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\"},\"returns\":{\"localDisputeID\":\"The ID of the dispute in the Dispute Kit.\",\"localRoundID\":\"The ID of the round in the Dispute Kit.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Returns the number of rounds in a dispute.\",\"params\":{\"_localDisputeID\":\"The ID of the dispute in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of rounds in the dispute.\"}},\"getVoteInfo(uint256,uint256,uint256)\":{\"details\":\"Returns the vote information for a given vote ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The address of the juror who cast the vote.\",\"commit\":\"The commit of the vote.\"}},\"hashVote(uint256,uint256,string)\":{\"details\":\"Computes the hash of a vote using ABI encodingThe unused parameters may be used by overriding contracts.\",\"params\":{\"_choice\":\"The choice being voted for\",\"_justification\":\"The justification for the vote\",\"_salt\":\"A random salt for commitment\"},\"returns\":{\"_0\":\"bytes32 The hash of the encoded vote parameters\"}},\"initialize(address,address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isAppealFunded(uint256)\":{\"details\":\"Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"Whether the appeal funding is finished.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"DisputeKitGated Dispute kit implementation adapted from DisputeKitClassic - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitGated.sol\":\"DisputeKitGated\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassicBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore, KlerosCoreBase, IDisputeKit, ISortitionModule} from \\\"../KlerosCore.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {SafeSend} from \\\"../../libraries/SafeSend.sol\\\";\\n\\n/// @title DisputeKitClassicBase\\n/// Abstract Dispute kit classic implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\nabstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable {\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default.\\n mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool)))\\n public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading.\\n mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function __DisputeKitClassicBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n dispute.jumped = false; // Possibly true if this DK has jumped in a previous round.\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n coreDisputeIDToActive[_coreDisputeID] = true;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[localRoundID];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n if (drawnAddress == address(0)) {\\n // Sortition can return 0 address if no one has staked yet.\\n return drawnAddress;\\n }\\n\\n if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true;\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash.\\n function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n }\\n\\n function _castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender);\\n }\\n\\n function _castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification,\\n address _juror\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n bytes32 voteHash = hashVote(_choice, _salt, _justification);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == _juror, \\\"The juror has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == voteHash,\\n \\\"The vote hash must match the commitment in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n } // Workaround stack too deep\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.safeSend(amount, wNative);\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @dev The unused parameters may be used by overriding contracts.\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(_choice, _salt));\\n }\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length;\\n\\n return round.totalVoted == expectedTotalVoted;\\n }\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) {\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n // Uses block.timestamp from the current tx when called by the core contract.\\n return (fundedChoices.length == 0 &&\\n block.timestamp - appealPeriodStart >=\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT);\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n /// @dev Returns the number of rounds in a dispute.\\n /// @param _localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return The number of rounds in the dispute.\\n function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) {\\n return disputes[_localDisputeID].rounds.length;\\n }\\n\\n /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @return localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return localRoundID The ID of the round in the Dispute Kit.\\n function getLocalDisputeRoundID(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID\\n ) external view returns (uint256 localDisputeID, uint256 localRoundID) {\\n localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID];\\n }\\n\\n /// @dev Returns the vote information for a given vote ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @param _voteID The ID of the vote.\\n /// @return account The address of the juror who cast the vote.\\n /// @return commit The commit of the vote.\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts.\\n /// minStake is checked directly during staking process however it's possible for the juror to get drawn\\n /// while having < minStake if it is later increased by governance.\\n /// This issue is expected and harmless.\\n /// @param _round The round in which the juror is being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return result Whether the address passes the check or not.\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view virtual returns (bool result) {\\n if (singleDrawPerJuror) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n result = !alreadyDrawn[localDisputeID][localRoundID][_juror];\\n } else {\\n result = true;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc418b9a76802db5d16819836734ecff8b76d5f37101819aee6fd1844dfe21dd9\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitGated.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {DisputeKitClassicBase, KlerosCore} from \\\"./DisputeKitClassicBase.sol\\\";\\n\\ninterface IBalanceHolder {\\n /// @dev Returns the number of tokens in `owner` account.\\n /// @dev Compatible with ERC-20 and ERC-721.\\n /// @param owner The address of the owner.\\n /// @return balance The number of tokens in `owner` account.\\n function balanceOf(address owner) external view returns (uint256 balance);\\n}\\n\\ninterface IBalanceHolderERC1155 {\\n /// @dev Returns the balance of an ERC-1155 token.\\n /// @param account The address of the token holder\\n /// @param id ID of the token\\n /// @return The token balance\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n}\\n\\n/// @title DisputeKitGated\\n/// Dispute kit implementation adapted from DisputeKitClassic\\n/// - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitGated is DisputeKitClassicBase {\\n string public constant override version = \\\"0.12.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(address _governor, KlerosCore _core, address _wNative) external reinitializer(1) {\\n __DisputeKitClassicBase_initialize(_governor, _core, _wNative);\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(9) {\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Extracts token gating information from the extra data.\\n /// @param _extraData The extra data bytes array with the following encoding:\\n /// - bytes 0-31: uint96 courtID, not used here\\n /// - bytes 32-63: uint256 minJurors, not used here\\n /// - bytes 64-95: uint256 disputeKitID, not used here\\n /// - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160)\\n /// - bytes 128-159: uint256 tokenId\\n /// @return tokenGate The address of the token contract used for gating access.\\n /// @return isERC1155 True if the token is an ERC-1155, false for ERC-20/ERC-721.\\n /// @return tokenId The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721).\\n function extraDataToTokenInfo(\\n bytes memory _extraData\\n ) public pure returns (address tokenGate, bool isERC1155, uint256 tokenId) {\\n // Need at least 160 bytes to safely read the parameters\\n if (_extraData.length < 160) return (address(0), false, 0);\\n\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let packedTokenGateIsERC1155 := mload(add(_extraData, 0x80)) // 4th parameter at offset 128\\n tokenId := mload(add(_extraData, 0xA0)) // 5th parameter at offset 160 (moved up)\\n\\n // Unpack address from lower 160 bits and bool from bit 160\\n tokenGate := and(packedTokenGateIsERC1155, 0xffffffffffffffffffffffffffffffffffffffff)\\n isERC1155 := and(shr(160, packedTokenGateIsERC1155), 1)\\n }\\n }\\n\\n /// @inheritdoc DisputeKitClassicBase\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view override returns (bool) {\\n if (!super._postDrawCheck(_round, _coreDisputeID, _juror)) return false;\\n\\n // Get the local dispute and extract token info from extraData\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n (address tokenGate, bool isERC1155, uint256 tokenId) = extraDataToTokenInfo(dispute.extraData);\\n\\n // If no token gate is specified, allow all jurors\\n if (tokenGate == address(0)) return true;\\n\\n // Check juror's token balance\\n if (isERC1155) {\\n return IBalanceHolderERC1155(tokenGate).balanceOf(_juror, tokenId) > 0;\\n } else {\\n return IBalanceHolder(tokenGate).balanceOf(_juror) > 0;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x449beea4cdeceb81cfc053987fd39c2f552fe3f5da03384c623b167f91f9307b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516146966100fc60003960008181611868015281816118910152611a8001526146966000f3fe60806040526004361061023b5760003560e01c8063751accd01161012e578063d2b8035a116100ab578063f2f4eb261161006f578063f2f4eb261461076d578063f32ab9271461078d578063f7e7d1fd146107c2578063f8abee10146107e2578063fc6f8f161461081257600080fd5b8063d2b8035a146106c8578063da3beb8c146106e8578063e349ad301461059a578063e4c0aaf414610708578063ec7b23fb1461072857600080fd5b8063b34bfaa8116100f2578063b34bfaa81461063c578063b6ede54014610652578063ba66fde714610672578063be46760414610692578063c0c53b8b146106a857600080fd5b8063751accd01461057a578063796490f91461059a5780637c04034e146105b05780638e426460146105d0578063a7cc08fe146105f057600080fd5b80634f1ef286116101bc5780635c92e2f6116101805780635c92e2f6146104a057806365540b96146104c0578063675926f6146104ed57806369f3f0411461050d5780636d4cd8ea1461055a57600080fd5b80634f1ef286146103c957806352d1902d146103dc57806354fd4d50146103f1578063564a565d146104305780635a155ccd1461045f57600080fd5b80631cc3423a116102035780631cc3423a1461033a5780632621b9a21461035a5780632d68efc914610374578063362c3479146103945780634b2f0ea0146103b457600080fd5b80630855bbe9146102405780630baa64d1146102755780630c340a24146102955780631200aabc146102c25780631c3db16d146102fd575b600080fd5b34801561024c57600080fd5b5061026061025b366004613a67565b610832565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610260610290366004613a67565b6108fa565b3480156102a157600080fd5b506000546102b5906001600160a01b031681565b60405161026c9190613a80565b3480156102ce57600080fd5b506102ef6102dd366004613a67565b60036020526000908152604090205481565b60405190815260200161026c565b34801561030957600080fd5b5061031d610318366004613a67565b610971565b60408051938452911515602084015215159082015260600161026c565b34801561034657600080fd5b506102ef610355366004613b3e565b610adf565b34801561036657600080fd5b506004546102609060ff1681565b34801561038057600080fd5b506007546102b5906001600160a01b031681565b3480156103a057600080fd5b506102ef6103af366004613ba2565b610b0f565b6103c76103c2366004613bdf565b610fc4565b005b6103c76103d7366004613c01565b611854565b3480156103e857600080fd5b506102ef611a73565b3480156103fd57600080fd5b50610423604051806040016040528060068152602001650302e31322e360d41b81525081565b60405161026c9190613ca0565b34801561043c57600080fd5b5061045061044b366004613a67565b611ad1565b60405161026c93929190613cb3565b34801561046b57600080fd5b5061026061047a366004613cd4565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104ac57600080fd5b506103c76104bb366004613d58565b611b97565b3480156104cc57600080fd5b506104e06104db366004613a67565b611ba3565b60405161026c9190613daa565b3480156104f957600080fd5b506102ef610508366004613ded565b611c67565b34801561051957600080fd5b5061052d610528366004613e28565b611daa565b604080519687529415156020870152938501929092526060840152608083015260a082015260c00161026c565b34801561056657600080fd5b50610260610575366004613a67565b611e62565b34801561058657600080fd5b506103c7610595366004613e54565b611fe5565b3480156105a657600080fd5b506102ef61271081565b3480156105bc57600080fd5b506103c76105cb366004613e96565b6120b1565b3480156105dc57600080fd5b506103c76105eb366004613f1e565b6120c8565b3480156105fc57600080fd5b5061061061060b366004613e28565b612114565b604080516001600160a01b0390951685526020850193909352918301521515606082015260800161026c565b34801561064857600080fd5b506102ef614e2081565b34801561065e57600080fd5b506103c761066d366004613f3b565b6121da565b34801561067e57600080fd5b5061026061068d366004613e28565b6123cd565b34801561069e57600080fd5b506102ef61138881565b3480156106b457600080fd5b506103c76106c3366004613fc4565b612468565b3480156106d457600080fd5b506102b56106e3366004613bdf565b612532565b3480156106f457600080fd5b506102ef610703366004613bdf565b612881565b34801561071457600080fd5b506103c7610723366004613f1e565b6129d4565b34801561073457600080fd5b50610748610743366004614004565b612a20565b604080516001600160a01b03909416845291151560208401529082015260600161026c565b34801561077957600080fd5b506001546102b5906001600160a01b031681565b34801561079957600080fd5b506107ad6107a8366004613bdf565b612a65565b6040805192835260208301919091520161026c565b3480156107ce57600080fd5b506103c76107dd366004613f1e565b612ab7565b3480156107ee57600080fd5b506102606107fd366004613a67565b60066020526000908152604090205460ff1681565b34801561081e57600080fd5b506102ef61082d366004613a67565b612b89565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a39190614040565b9150915060006108b285611ba3565b9050805160001480156108f157506127106113886108d0858561407a565b6108da919061408d565b6108e491906140a4565b6108ee844261407a565b10155b95945050505050565b60008181526003602052604081205460028054839290811061091e5761091e6140c6565b600091825260208220600590910201805490925082906109409060019061407a565b81548110610950576109506140c6565b60009182526020909120600c90910201805460059091015414949350505050565b600080600080600260036000878152602001908152602001600020548154811061099d5761099d6140c6565b600091825260208220600590910201805490925082906109bf9060019061407a565b815481106109cf576109cf6140c6565b60009182526020909120600c90910201600381015460ff1694509050836109fa5780600101546109fd565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a709190614108565b5090935060049250610a80915050565b816004811115610a9257610a92614171565b03610ad5576000610aa288611ba3565b90508051600103610ad35780600081518110610ac057610ac06140c6565b6020026020010151965060009550600194505b505b5050509193909250565b604080516020808201869052818301859052825180830384018152606090920190925280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b819190614108565b50935050505080610bd95760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c509190614187565b15610c8e5760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610bd0565b60008681526006602052604090205460ff16610cbc5760405162461bcd60e51b8152600401610bd0906141a2565b600086815260036020526040812054600280549091908110610ce057610ce06140c6565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610d1457610d146140c6565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9391906141d9565b5050600087815260078401602052604090205490915060ff16610ddd576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610f22565b808603610e52576000868152600683016020526040902054610e00576000610e4b565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610e41919061408d565b610e4b91906140a4565b9450610f22565b600081815260078301602052604090205460ff16610f225781600601600083600a01600181548110610e8657610e866140c6565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610ebc57610ebc6140c6565b9060005260206000200154815260200190815260200160002054610ee09190614215565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610f15919061408d565b610f1f91906140a4565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610fb857600754610f69906001600160a01b038a811691889116612bb5565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051610faf929190918252602082015260400190565b60405180910390a45b50505050949350505050565b600082815260036020526040902054600280548492908110610fe857610fe86140c6565b600091825260209091206002600590920201015460ff161561101c5760405162461bcd60e51b8152600401610bd090614228565b600083815260036020526040812054600280549091908110611040576110406140c6565b9060005260206000209060050201905080600101548311156110a45760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610bd0565b60008481526006602052604090205460ff166110d25760405162461bcd60e51b8152600401610bd0906141a2565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111439190614040565b9150915081421015801561115657508042105b61119b5760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610bd0565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120091906141d9565b50509050868103611215576127109150611296565b612710611388611225868661407a565b61122f919061408d565b61123991906140a4565b611243854261407a565b106112905760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610bd0565b614e2091505b845460009086906112a99060019061407a565b815481106112b9576112b96140c6565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c919061425f565b611346919061407a565b60008a815260078401602052604090205490915060ff16156113aa5760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610bd0565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156113f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611418919061425f565b90506000612710611429878461408d565b61143391906140a4565b61143d9083614215565b60008c8152600686016020526040812054919250908211156114ee5760008c81526006860160205260409020543490611476908461407a565b1161149b5760008c8152600686016020526040902054611496908361407a565b61149d565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516114e5929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f84529091528120805483929061151a908490614215565b909155505060008c81526006860160205260408120805483929061153f908490614215565b909155505060008c815260068601602052604090205482116116115760008c815260068601602052604081205460098701805491929091611581908490614215565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a8501546001101561181c5782856009015461162e919061407a565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa15801561167c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a09190614187565b156116b95760028a01805460ff1916600117905561179c565b895460038b0160006116cc876001614215565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161174791815260200190565b602060405180830381865afa158015611764573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611788919061425f565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016117e9939291906142b2565b6000604051808303818588803b15801561180257600080fd5b505af1158015611816573d6000803e3d6000fd5b50505050505b8034111561184557611845611831823461407a565b6007543391906001600160a01b0316612bb5565b50505050505050505050505050565b61185d82612ca0565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806118db57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118cf6000805160206146418339815191525490565b6001600160a01b031614155b156118f95760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611953575060408051601f3d908101601f191682019092526119509181019061425f565b60015b6119725781604051630c76093760e01b8152600401610bd09190613a80565b60008051602061464183398151915281146119a357604051632a87526960e21b815260048101829052602401610bd0565b6000805160206146418339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611a6e576000836001600160a01b031683604051611a0a919061434c565b600060405180830381855af49150503d8060008114611a45576040519150601f19603f3d011682016040523d82523d6000602084013e611a4a565b606091505b5050905080611a6c576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611abe5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061464183398151915290565b60028181548110611ae157600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611b1490614278565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4090614278565b8015611b8d5780601f10611b6257610100808354040283529160200191611b8d565b820191906000526020600020905b815481529060010190602001808311611b7057829003601f168201915b5050505050905083565b611a6c84848484612ccd565b6000818152600360205260408120546002805460609392908110611bc957611bc96140c6565b60009182526020822060059091020180549092508290611beb9060019061407a565b81548110611bfb57611bfb6140c6565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c5957602002820191906000526020600020905b815481526020019060010190808311611c45575b505050505092505050919050565b600085815260036020526040812054600280548392908110611c8b57611c8b6140c6565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611cbf57611cbf6140c6565b90600052602060002090600c02016000018681548110611ce157611ce16140c6565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6391906141d9565b506003850154919350915060ff168015611d8757508183600201541480611d875750805b15611d9a576127109450505050506108f1565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611ddb57611ddb6140c6565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611e0f57611e0f6140c6565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611e8657611e866140c6565b60009182526020822060059091020180549092508290611ea89060019061407a565b81548110611eb857611eb86140c6565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190614108565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb69190614368565b5050505050915050600081611fcc578354611fd2565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b0316331461200f5760405162461bcd60e51b8152600401610bd0906143d4565b6000836001600160a01b0316838360405161202a919061434c565b60006040518083038185875af1925050503d8060008114612067576040519150601f19603f3d011682016040523d82523d6000602084013e61206c565b606091505b5050905080611a6c5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610bd0565b6120c086868686868633613030565b505050505050565b6000546001600160a01b031633146120f25760405162461bcd60e51b8152600401610bd0906143d4565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a81526020019081526020016000205481548110612142576121426140c6565b600091825260208083208a8452600360059093020191820190526040822054815491935083918110612176576121766140c6565b90600052602060002090600c02016000018781548110612198576121986140c6565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146122045760405162461bcd60e51b8152600401610bd090614416565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad20161228f8587836144a8565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156122f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612316919061425f565b612320919061407a565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab58108906123bb908a908a908a90614567565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106123f1576123f16140c6565b60009182526020808320878452600360059093020191820190526040822054815491935083918110612425576124256140c6565b90600052602060002090600c02016000018481548110612447576124476140c6565b600091825260209091206004909102016003015460ff169695505050505050565b60016000612474613761565b8054909150600160401b900460ff168061249b575080546001600160401b03808416911610155b156124b85760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556124e4858585613785565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b0316331461255f5760405162461bcd60e51b8152600401610bd090614416565b600083815260036020526040902054600280548592908110612583576125836140c6565b600091825260209091206002600590920201015460ff16156125b75760405162461bcd60e51b8152600401610bd090614228565b60008481526003602052604081205460028054919291839081106125dd576125dd6140c6565b60009182526020822060059091020180549092506125fd9060019061407a565b90506000826000018281548110612616576126166140c6565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561267b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269f919061459d565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156126ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127129190614108565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa158015612776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279a919061459d565b98506001600160a01b0389166127b6575050505050505061287a565b6127c1848c8b6137cc565b1561286d57604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612872565b600098505b505050505050505b5092915050565b6000828152600360205260408120546002805483929081106128a5576128a56140c6565b600091825260208083208684526003600590930201918201905260408220548154919350839181106128d9576128d96140c6565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295c91906141d9565b509150915082600401546000148061298b57508015801561298b57506000828152600284016020526040902054155b1561299d5760009450505050506129ce565b80156129b25750506004015491506129ce9050565b5060009081526002909101602052604090205491506129ce9050565b92915050565b6000546001600160a01b031633146129fe5760405162461bcd60e51b8152600401610bd0906143d4565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600060a084511015612a3d57506000915081905080612a5e565b505050608081015160a0808301516001600160a01b0383169290911c600116905b9193909250565b6000828152600360205260408120546002805491929183908110612a8b57612a8b6140c6565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612ac3613761565b8054909150600160401b900460ff1680612aea575080546001600160401b03808416911610155b15612b075760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612b9e57612b9e6140c6565b600091825260209091206005909102015492915050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015612be457505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c1f57600080fd5b505af1158015612c33573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b158015612c8357600080fd5b505af1158015612c97573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612cca5760405162461bcd60e51b8152600401610bd0906143d4565b50565b600084815260036020526040902054600280548692908110612cf157612cf16140c6565b600091825260209091206002600590920201015460ff1615612d255760405162461bcd60e51b8152600401610bd090614228565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d939190614108565b5090935060019250612da3915050565b816004811115612db557612db5614171565b14612e125760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610bd0565b82612e4f5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610bd0565b60008681526006602052604090205460ff16612e7d5760405162461bcd60e51b8152600401610bd0906141a2565b600086815260036020526040812054600280549091908110612ea157612ea16140c6565b60009182526020822060059091020180549092508290612ec39060019061407a565b81548110612ed357612ed36140c6565b90600052602060002090600c0201905060005b86811015612fc9573382898984818110612f0257612f026140c6565b9050602002013581548110612f1957612f196140c6565b60009182526020909120600490910201546001600160a01b031614612f805760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610bd0565b8582898984818110612f9457612f946140c6565b9050602002013581548110612fab57612fab6140c6565b60009182526020909120600160049092020181019190915501612ee6565b5086869050816005016000828254612fe19190614215565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f089061301e908b908b908b906145ec565b60405180910390a35050505050505050565b600087815260036020526040902054600280548992908110613054576130546140c6565b600091825260209091206002600590920201015460ff16156130885760405162461bcd60e51b8152600401610bd090614228565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f69190614108565b5090935060029250613106915050565b81600481111561311857613118614171565b146131735760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610bd0565b866131b55760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610bd0565b60008981526006602052604090205460ff166131e35760405162461bcd60e51b8152600401610bd0906141a2565b600089815260036020526040812054600280549091908110613207576132076140c6565b9060005260206000209060050201905080600101548711156132625760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610bd0565b805460009082906132759060019061407a565b81548110613285576132856140c6565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d906132ca908f9060040190815260200190565b60a060405180830381865afa1580156132e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330b9190614108565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015613366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338a9190614368565b5050505050915050600061339f8b8b8b610adf565b905060005b8c811015613626576001600160a01b038916858f8f848181106133c9576133c96140c6565b90506020020135815481106133e0576133e06140c6565b60009182526020909120600490910201546001600160a01b0316146134475760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610bd0565b82158061348e575081858f8f84818110613463576134636140c6565b905060200201358154811061347a5761347a6140c6565b906000526020600020906004020160010154145b61350e5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610bd0565b848e8e83818110613521576135216140c6565b9050602002013581548110613538576135386140c6565b600091825260209091206003600490920201015460ff16156135915760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610bd0565b8b858f8f848181106135a5576135a56140c6565b90506020020135815481106135bc576135bc6140c6565b60009182526020909120600260049092020101556001858f8f848181106135e5576135e56140c6565b90506020020135815481106135fc576135fc6140c6565b60009182526020909120600490910201600301805460ff19169115159190911790556001016133a4565b5050506004820180548b9250600090613640908490614215565b90915550506000888152600282016020526040812080548b9290613665908490614215565b90915550506001810154880361369457600381015460ff161561368f5760038101805460ff191690555b61370d565b60018101546000908152600282016020526040808220548a8352912054036136d657600381015460ff1661368f5760038101805460ff1916600117905561370d565b60018101546000908152600282016020526040808220548a8352912054111561370d576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b60405161374c93929190614610565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b61378d61398e565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60006137d98484846139b5565b6137e557506000610b08565b600083815260036020526040812054600280549192918390811061380b5761380b6140c6565b9060005260206000209060050201905060008060006138b584600401805461383290614278565b80601f016020809104026020016040519081016040528092919081815260200182805461385e90614278565b80156138ab5780601f10613880576101008083540402835291602001916138ab565b820191906000526020600020905b81548152906001019060200180831161388e57829003601f168201915b5050505050612a20565b919450925090506001600160a01b0383166138d857600195505050505050610b08565b811561395f57604051627eeac760e11b81526001600160a01b038881166004830152602482018390526000919085169062fdd58e906044015b602060405180830381865afa15801561392e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613952919061425f565b1195505050505050610b08565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190613911908b90600401613a80565b613996613a4d565b6139b357604051631afcd79f60e31b815260040160405180910390fd5b565b60045460009060ff1615613a435760008381526003602052604081205460028054919291839081106139e9576139e96140c6565b6000918252602082206005909102018054909250613a099060019061407a565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610b08915050565b5060019392505050565b6000613a57613761565b54600160401b900460ff16919050565b600060208284031215613a7957600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613abb57600080fd5b8135602083016000806001600160401b03841115613adb57613adb613a94565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613b0957613b09613a94565b604052838152905080828401871015613b2157600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613b5357600080fd5b833592506020840135915060408401356001600160401b03811115613b7757600080fd5b613b8386828701613aaa565b9150509250925092565b6001600160a01b0381168114612cca57600080fd5b60008060008060808587031215613bb857600080fd5b843593506020850135613bca81613b8d565b93969395505050506040820135916060013590565b60008060408385031215613bf257600080fd5b50508035926020909101359150565b60008060408385031215613c1457600080fd5b8235613c1f81613b8d565b915060208301356001600160401b03811115613c3a57600080fd5b613c4685828601613aaa565b9150509250929050565b60005b83811015613c6b578181015183820152602001613c53565b50506000910152565b60008151808452613c8c816020860160208601613c50565b601f01601f19169290920160200192915050565b602081526000610b086020830184613c74565b83815282151560208201526060604082015260006108f16060830184613c74565b600080600060608486031215613ce957600080fd5b83359250602084013591506040840135613d0281613b8d565b809150509250925092565b60008083601f840112613d1f57600080fd5b5081356001600160401b03811115613d3657600080fd5b6020830191508360208260051b8501011115613d5157600080fd5b9250929050565b60008060008060608587031215613d6e57600080fd5b8435935060208501356001600160401b03811115613d8b57600080fd5b613d9787828801613d0d565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613de2578351835260209384019390920191600101613dc4565b509095945050505050565b600080600080600060a08688031215613e0557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613e3d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e6957600080fd5b8335613e7481613b8d565b92506020840135915060408401356001600160401b03811115613b7757600080fd5b60008060008060008060a08789031215613eaf57600080fd5b8635955060208701356001600160401b03811115613ecc57600080fd5b613ed889828a01613d0d565b909650945050604087013592506060870135915060808701356001600160401b03811115613f0557600080fd5b613f1189828a01613aaa565b9150509295509295509295565b600060208284031215613f3057600080fd5b8135610b0881613b8d565b600080600080600060808688031215613f5357600080fd5b853594506020860135935060408601356001600160401b03811115613f7757600080fd5b8601601f81018813613f8857600080fd5b80356001600160401b03811115613f9e57600080fd5b886020828401011115613fb057600080fd5b959894975060200195606001359392505050565b600080600060608486031215613fd957600080fd5b8335613fe481613b8d565b92506020840135613ff481613b8d565b91506040840135613d0281613b8d565b60006020828403121561401657600080fd5b81356001600160401b0381111561402c57600080fd5b61403884828501613aaa565b949350505050565b6000806040838503121561405357600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b818103818111156129ce576129ce614064565b80820281158282048414176129ce576129ce614064565b6000826140c157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80516001600160601b03811681146140f357600080fd5b919050565b805180151581146140f357600080fd5b600080600080600060a0868803121561412057600080fd5b614129866140dc565b9450602086015161413981613b8d565b60408701519094506005811061414e57600080fd5b925061415c606087016140f8565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561419957600080fd5b610b08826140f8565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b6000806000606084860312156141ee57600080fd5b835192506141fe602085016140f8565b915061420c604085016140f8565b90509250925092565b808201808211156129ce576129ce614064565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b60006020828403121561427157600080fd5b5051919050565b600181811c9082168061428c57607f821691505b6020821081036142ac57634e487b7160e01b600052602260045260246000fd5b50919050565b8381528260208201526060604082015260008083546142d081614278565b80606086015260018216600081146142ef576001811461430b5761433f565b60ff1983166080870152608082151560051b870101935061433f565b86600052602060002060005b8381101561433657815488820160800152600190910190602001614317565b87016080019450505b5091979650505050505050565b6000825161435e818460208701613c50565b9190910192915050565b600080600080600080600060e0888a03121561438357600080fd5b61438c886140dc565b965061439a602089016140f8565b604089015160608a015160808b015160a08c01519399509197509550935091506143c660c089016140f8565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611a6e57806000526020600020601f840160051c810160208510156144815750805b601f840160051c820191505b818110156144a1576000815560010161448d565b5050505050565b6001600160401b038311156144bf576144bf613a94565b6144d3836144cd8354614278565b8361445a565b6000601f84116001811461450757600085156144ef5750838201355b600019600387901b1c1916600186901b1783556144a1565b600083815260209020601f19861690835b828110156145385786850135825560209485019460019092019101614518565b50868210156145555760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156145af57600080fd5b8151610b0881613b8d565b81835260006001600160fb1b038311156145d357600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006146006040830185876145ba565b9050826020830152949350505050565b6040815260006146246040830185876145ba565b82810360208401526146368185613c74565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220809532e74c527307f7c4fb23228698c888252ec20a2012cf6adf507c53468b9f64736f6c634300081c0033", - "deployedBytecode": "0x60806040526004361061023b5760003560e01c8063751accd01161012e578063d2b8035a116100ab578063f2f4eb261161006f578063f2f4eb261461076d578063f32ab9271461078d578063f7e7d1fd146107c2578063f8abee10146107e2578063fc6f8f161461081257600080fd5b8063d2b8035a146106c8578063da3beb8c146106e8578063e349ad301461059a578063e4c0aaf414610708578063ec7b23fb1461072857600080fd5b8063b34bfaa8116100f2578063b34bfaa81461063c578063b6ede54014610652578063ba66fde714610672578063be46760414610692578063c0c53b8b146106a857600080fd5b8063751accd01461057a578063796490f91461059a5780637c04034e146105b05780638e426460146105d0578063a7cc08fe146105f057600080fd5b80634f1ef286116101bc5780635c92e2f6116101805780635c92e2f6146104a057806365540b96146104c0578063675926f6146104ed57806369f3f0411461050d5780636d4cd8ea1461055a57600080fd5b80634f1ef286146103c957806352d1902d146103dc57806354fd4d50146103f1578063564a565d146104305780635a155ccd1461045f57600080fd5b80631cc3423a116102035780631cc3423a1461033a5780632621b9a21461035a5780632d68efc914610374578063362c3479146103945780634b2f0ea0146103b457600080fd5b80630855bbe9146102405780630baa64d1146102755780630c340a24146102955780631200aabc146102c25780631c3db16d146102fd575b600080fd5b34801561024c57600080fd5b5061026061025b366004613a67565b610832565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610260610290366004613a67565b6108fa565b3480156102a157600080fd5b506000546102b5906001600160a01b031681565b60405161026c9190613a80565b3480156102ce57600080fd5b506102ef6102dd366004613a67565b60036020526000908152604090205481565b60405190815260200161026c565b34801561030957600080fd5b5061031d610318366004613a67565b610971565b60408051938452911515602084015215159082015260600161026c565b34801561034657600080fd5b506102ef610355366004613b3e565b610adf565b34801561036657600080fd5b506004546102609060ff1681565b34801561038057600080fd5b506007546102b5906001600160a01b031681565b3480156103a057600080fd5b506102ef6103af366004613ba2565b610b0f565b6103c76103c2366004613bdf565b610fc4565b005b6103c76103d7366004613c01565b611854565b3480156103e857600080fd5b506102ef611a73565b3480156103fd57600080fd5b50610423604051806040016040528060068152602001650302e31322e360d41b81525081565b60405161026c9190613ca0565b34801561043c57600080fd5b5061045061044b366004613a67565b611ad1565b60405161026c93929190613cb3565b34801561046b57600080fd5b5061026061047a366004613cd4565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104ac57600080fd5b506103c76104bb366004613d58565b611b97565b3480156104cc57600080fd5b506104e06104db366004613a67565b611ba3565b60405161026c9190613daa565b3480156104f957600080fd5b506102ef610508366004613ded565b611c67565b34801561051957600080fd5b5061052d610528366004613e28565b611daa565b604080519687529415156020870152938501929092526060840152608083015260a082015260c00161026c565b34801561056657600080fd5b50610260610575366004613a67565b611e62565b34801561058657600080fd5b506103c7610595366004613e54565b611fe5565b3480156105a657600080fd5b506102ef61271081565b3480156105bc57600080fd5b506103c76105cb366004613e96565b6120b1565b3480156105dc57600080fd5b506103c76105eb366004613f1e565b6120c8565b3480156105fc57600080fd5b5061061061060b366004613e28565b612114565b604080516001600160a01b0390951685526020850193909352918301521515606082015260800161026c565b34801561064857600080fd5b506102ef614e2081565b34801561065e57600080fd5b506103c761066d366004613f3b565b6121da565b34801561067e57600080fd5b5061026061068d366004613e28565b6123cd565b34801561069e57600080fd5b506102ef61138881565b3480156106b457600080fd5b506103c76106c3366004613fc4565b612468565b3480156106d457600080fd5b506102b56106e3366004613bdf565b612532565b3480156106f457600080fd5b506102ef610703366004613bdf565b612881565b34801561071457600080fd5b506103c7610723366004613f1e565b6129d4565b34801561073457600080fd5b50610748610743366004614004565b612a20565b604080516001600160a01b03909416845291151560208401529082015260600161026c565b34801561077957600080fd5b506001546102b5906001600160a01b031681565b34801561079957600080fd5b506107ad6107a8366004613bdf565b612a65565b6040805192835260208301919091520161026c565b3480156107ce57600080fd5b506103c76107dd366004613f1e565b612ab7565b3480156107ee57600080fd5b506102606107fd366004613a67565b60066020526000908152604090205460ff1681565b34801561081e57600080fd5b506102ef61082d366004613a67565b612b89565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a39190614040565b9150915060006108b285611ba3565b9050805160001480156108f157506127106113886108d0858561407a565b6108da919061408d565b6108e491906140a4565b6108ee844261407a565b10155b95945050505050565b60008181526003602052604081205460028054839290811061091e5761091e6140c6565b600091825260208220600590910201805490925082906109409060019061407a565b81548110610950576109506140c6565b60009182526020909120600c90910201805460059091015414949350505050565b600080600080600260036000878152602001908152602001600020548154811061099d5761099d6140c6565b600091825260208220600590910201805490925082906109bf9060019061407a565b815481106109cf576109cf6140c6565b60009182526020909120600c90910201600381015460ff1694509050836109fa5780600101546109fd565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a709190614108565b5090935060049250610a80915050565b816004811115610a9257610a92614171565b03610ad5576000610aa288611ba3565b90508051600103610ad35780600081518110610ac057610ac06140c6565b6020026020010151965060009550600194505b505b5050509193909250565b604080516020808201869052818301859052825180830384018152606090920190925280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b819190614108565b50935050505080610bd95760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e000000000060448201526064015b60405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c509190614187565b15610c8e5760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610bd0565b60008681526006602052604090205460ff16610cbc5760405162461bcd60e51b8152600401610bd0906141a2565b600086815260036020526040812054600280549091908110610ce057610ce06140c6565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610d1457610d146140c6565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9391906141d9565b5050600087815260078401602052604090205490915060ff16610ddd576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610f22565b808603610e52576000868152600683016020526040902054610e00576000610e4b565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610e41919061408d565b610e4b91906140a4565b9450610f22565b600081815260078301602052604090205460ff16610f225781600601600083600a01600181548110610e8657610e866140c6565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610ebc57610ebc6140c6565b9060005260206000200154815260200190815260200160002054610ee09190614215565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610f15919061408d565b610f1f91906140a4565b94505b6001600160a01b038816600090815260088301602090815260408083208984529091528120558415610fb857600754610f69906001600160a01b038a811691889116612bb5565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051610faf929190918252602082015260400190565b60405180910390a45b50505050949350505050565b600082815260036020526040902054600280548492908110610fe857610fe86140c6565b600091825260209091206002600590920201015460ff161561101c5760405162461bcd60e51b8152600401610bd090614228565b600083815260036020526040812054600280549091908110611040576110406140c6565b9060005260206000209060050201905080600101548311156110a45760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610bd0565b60008481526006602052604090205460ff166110d25760405162461bcd60e51b8152600401610bd0906141a2565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111439190614040565b9150915081421015801561115657508042105b61119b5760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610bd0565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120091906141d9565b50509050868103611215576127109150611296565b612710611388611225868661407a565b61122f919061408d565b61123991906140a4565b611243854261407a565b106112905760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610bd0565b614e2091505b845460009086906112a99060019061407a565b815481106112b9576112b96140c6565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c919061425f565b611346919061407a565b60008a815260078401602052604090205490915060ff16156113aa5760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610bd0565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156113f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611418919061425f565b90506000612710611429878461408d565b61143391906140a4565b61143d9083614215565b60008c8152600686016020526040812054919250908211156114ee5760008c81526006860160205260409020543490611476908461407a565b1161149b5760008c8152600686016020526040902054611496908361407a565b61149d565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516114e5929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f84529091528120805483929061151a908490614215565b909155505060008c81526006860160205260408120805483929061153f908490614215565b909155505060008c815260068601602052604090205482116116115760008c815260068601602052604081205460098701805491929091611581908490614215565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a8501546001101561181c5782856009015461162e919061407a565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa15801561167c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a09190614187565b156116b95760028a01805460ff1916600117905561179c565b895460038b0160006116cc876001614215565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161174791815260200190565b602060405180830381865afa158015611764573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611788919061425f565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016117e9939291906142b2565b6000604051808303818588803b15801561180257600080fd5b505af1158015611816573d6000803e3d6000fd5b50505050505b8034111561184557611845611831823461407a565b6007543391906001600160a01b0316612bb5565b50505050505050505050505050565b61185d82612ca0565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806118db57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118cf6000805160206146418339815191525490565b6001600160a01b031614155b156118f95760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611953575060408051601f3d908101601f191682019092526119509181019061425f565b60015b6119725781604051630c76093760e01b8152600401610bd09190613a80565b60008051602061464183398151915281146119a357604051632a87526960e21b815260048101829052602401610bd0565b6000805160206146418339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611a6e576000836001600160a01b031683604051611a0a919061434c565b600060405180830381855af49150503d8060008114611a45576040519150601f19603f3d011682016040523d82523d6000602084013e611a4a565b606091505b5050905080611a6c576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611abe5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061464183398151915290565b60028181548110611ae157600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611b1490614278565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4090614278565b8015611b8d5780601f10611b6257610100808354040283529160200191611b8d565b820191906000526020600020905b815481529060010190602001808311611b7057829003601f168201915b5050505050905083565b611a6c84848484612ccd565b6000818152600360205260408120546002805460609392908110611bc957611bc96140c6565b60009182526020822060059091020180549092508290611beb9060019061407a565b81548110611bfb57611bfb6140c6565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611c5957602002820191906000526020600020905b815481526020019060010190808311611c45575b505050505092505050919050565b600085815260036020526040812054600280548392908110611c8b57611c8b6140c6565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611cbf57611cbf6140c6565b90600052602060002090600c02016000018681548110611ce157611ce16140c6565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6391906141d9565b506003850154919350915060ff168015611d8757508183600201541480611d875750805b15611d9a576127109450505050506108f1565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611ddb57611ddb6140c6565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611e0f57611e0f6140c6565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611e8657611e866140c6565b60009182526020822060059091020180549092508290611ea89060019061407a565b81548110611eb857611eb86140c6565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190614108565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb69190614368565b5050505050915050600081611fcc578354611fd2565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b0316331461200f5760405162461bcd60e51b8152600401610bd0906143d4565b6000836001600160a01b0316838360405161202a919061434c565b60006040518083038185875af1925050503d8060008114612067576040519150601f19603f3d011682016040523d82523d6000602084013e61206c565b606091505b5050905080611a6c5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610bd0565b6120c086868686868633613030565b505050505050565b6000546001600160a01b031633146120f25760405162461bcd60e51b8152600401610bd0906143d4565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008060006002600360008a81526020019081526020016000205481548110612142576121426140c6565b600091825260208083208a8452600360059093020191820190526040822054815491935083918110612176576121766140c6565b90600052602060002090600c02016000018781548110612198576121986140c6565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146122045760405162461bcd60e51b8152600401610bd090614416565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad20161228f8587836144a8565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156122f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612316919061425f565b612320919061407a565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab58108906123bb908a908a908a90614567565b60405180910390a25050505050505050565b6000838152600360205260408120546002805483929081106123f1576123f16140c6565b60009182526020808320878452600360059093020191820190526040822054815491935083918110612425576124256140c6565b90600052602060002090600c02016000018481548110612447576124476140c6565b600091825260209091206004909102016003015460ff169695505050505050565b60016000612474613761565b8054909150600160401b900460ff168061249b575080546001600160401b03808416911610155b156124b85760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556124e4858585613785565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b0316331461255f5760405162461bcd60e51b8152600401610bd090614416565b600083815260036020526040902054600280548592908110612583576125836140c6565b600091825260209091206002600590920201015460ff16156125b75760405162461bcd60e51b8152600401610bd090614228565b60008481526003602052604081205460028054919291839081106125dd576125dd6140c6565b60009182526020822060059091020180549092506125fd9060019061407a565b90506000826000018281548110612616576126166140c6565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561267b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269f919061459d565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa1580156126ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127129190614108565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa158015612776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279a919061459d565b98506001600160a01b0389166127b6575050505050505061287a565b6127c1848c8b6137cc565b1561286d57604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612872565b600098505b505050505050505b5092915050565b6000828152600360205260408120546002805483929081106128a5576128a56140c6565b600091825260208083208684526003600590930201918201905260408220548154919350839181106128d9576128d96140c6565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295c91906141d9565b509150915082600401546000148061298b57508015801561298b57506000828152600284016020526040902054155b1561299d5760009450505050506129ce565b80156129b25750506004015491506129ce9050565b5060009081526002909101602052604090205491506129ce9050565b92915050565b6000546001600160a01b031633146129fe5760405162461bcd60e51b8152600401610bd0906143d4565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600060a084511015612a3d57506000915081905080612a5e565b505050608081015160a0808301516001600160a01b0383169290911c600116905b9193909250565b6000828152600360205260408120546002805491929183908110612a8b57612a8b6140c6565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612ac3613761565b8054909150600160401b900460ff1680612aea575080546001600160401b03808416911610155b15612b075760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612b9e57612b9e6140c6565b600091825260209091206005909102015492915050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015612be457505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c1f57600080fd5b505af1158015612c33573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b158015612c8357600080fd5b505af1158015612c97573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612cca5760405162461bcd60e51b8152600401610bd0906143d4565b50565b600084815260036020526040902054600280548692908110612cf157612cf16140c6565b600091825260209091206002600590920201015460ff1615612d255760405162461bcd60e51b8152600401610bd090614228565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d939190614108565b5090935060019250612da3915050565b816004811115612db557612db5614171565b14612e125760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610bd0565b82612e4f5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610bd0565b60008681526006602052604090205460ff16612e7d5760405162461bcd60e51b8152600401610bd0906141a2565b600086815260036020526040812054600280549091908110612ea157612ea16140c6565b60009182526020822060059091020180549092508290612ec39060019061407a565b81548110612ed357612ed36140c6565b90600052602060002090600c0201905060005b86811015612fc9573382898984818110612f0257612f026140c6565b9050602002013581548110612f1957612f196140c6565b60009182526020909120600490910201546001600160a01b031614612f805760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610bd0565b8582898984818110612f9457612f946140c6565b9050602002013581548110612fab57612fab6140c6565b60009182526020909120600160049092020181019190915501612ee6565b5086869050816005016000828254612fe19190614215565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f089061301e908b908b908b906145ec565b60405180910390a35050505050505050565b600087815260036020526040902054600280548992908110613054576130546140c6565b600091825260209091206002600590920201015460ff16156130885760405162461bcd60e51b8152600401610bd090614228565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f69190614108565b5090935060029250613106915050565b81600481111561311857613118614171565b146131735760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610bd0565b866131b55760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610bd0565b60008981526006602052604090205460ff166131e35760405162461bcd60e51b8152600401610bd0906141a2565b600089815260036020526040812054600280549091908110613207576132076140c6565b9060005260206000209060050201905080600101548711156132625760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610bd0565b805460009082906132759060019061407a565b81548110613285576132856140c6565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d906132ca908f9060040190815260200190565b60a060405180830381865afa1580156132e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330b9190614108565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015613366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338a9190614368565b5050505050915050600061339f8b8b8b610adf565b905060005b8c811015613626576001600160a01b038916858f8f848181106133c9576133c96140c6565b90506020020135815481106133e0576133e06140c6565b60009182526020909120600490910201546001600160a01b0316146134475760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610bd0565b82158061348e575081858f8f84818110613463576134636140c6565b905060200201358154811061347a5761347a6140c6565b906000526020600020906004020160010154145b61350e5760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610bd0565b848e8e83818110613521576135216140c6565b9050602002013581548110613538576135386140c6565b600091825260209091206003600490920201015460ff16156135915760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610bd0565b8b858f8f848181106135a5576135a56140c6565b90506020020135815481106135bc576135bc6140c6565b60009182526020909120600260049092020101556001858f8f848181106135e5576135e56140c6565b90506020020135815481106135fc576135fc6140c6565b60009182526020909120600490910201600301805460ff19169115159190911790556001016133a4565b5050506004820180548b9250600090613640908490614215565b90915550506000888152600282016020526040812080548b9290613665908490614215565b90915550506001810154880361369457600381015460ff161561368f5760038101805460ff191690555b61370d565b60018101546000908152600282016020526040808220548a8352912054036136d657600381015460ff1661368f5760038101805460ff1916600117905561370d565b60018101546000908152600282016020526040808220548a8352912054111561370d576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b60405161374c93929190614610565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b61378d61398e565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60006137d98484846139b5565b6137e557506000610b08565b600083815260036020526040812054600280549192918390811061380b5761380b6140c6565b9060005260206000209060050201905060008060006138b584600401805461383290614278565b80601f016020809104026020016040519081016040528092919081815260200182805461385e90614278565b80156138ab5780601f10613880576101008083540402835291602001916138ab565b820191906000526020600020905b81548152906001019060200180831161388e57829003601f168201915b5050505050612a20565b919450925090506001600160a01b0383166138d857600195505050505050610b08565b811561395f57604051627eeac760e11b81526001600160a01b038881166004830152602482018390526000919085169062fdd58e906044015b602060405180830381865afa15801561392e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613952919061425f565b1195505050505050610b08565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190613911908b90600401613a80565b613996613a4d565b6139b357604051631afcd79f60e31b815260040160405180910390fd5b565b60045460009060ff1615613a435760008381526003602052604081205460028054919291839081106139e9576139e96140c6565b6000918252602082206005909102018054909250613a099060019061407a565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610b08915050565b5060019392505050565b6000613a57613761565b54600160401b900460ff16919050565b600060208284031215613a7957600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613abb57600080fd5b8135602083016000806001600160401b03841115613adb57613adb613a94565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613b0957613b09613a94565b604052838152905080828401871015613b2157600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613b5357600080fd5b833592506020840135915060408401356001600160401b03811115613b7757600080fd5b613b8386828701613aaa565b9150509250925092565b6001600160a01b0381168114612cca57600080fd5b60008060008060808587031215613bb857600080fd5b843593506020850135613bca81613b8d565b93969395505050506040820135916060013590565b60008060408385031215613bf257600080fd5b50508035926020909101359150565b60008060408385031215613c1457600080fd5b8235613c1f81613b8d565b915060208301356001600160401b03811115613c3a57600080fd5b613c4685828601613aaa565b9150509250929050565b60005b83811015613c6b578181015183820152602001613c53565b50506000910152565b60008151808452613c8c816020860160208601613c50565b601f01601f19169290920160200192915050565b602081526000610b086020830184613c74565b83815282151560208201526060604082015260006108f16060830184613c74565b600080600060608486031215613ce957600080fd5b83359250602084013591506040840135613d0281613b8d565b809150509250925092565b60008083601f840112613d1f57600080fd5b5081356001600160401b03811115613d3657600080fd5b6020830191508360208260051b8501011115613d5157600080fd5b9250929050565b60008060008060608587031215613d6e57600080fd5b8435935060208501356001600160401b03811115613d8b57600080fd5b613d9787828801613d0d565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613de2578351835260209384019390920191600101613dc4565b509095945050505050565b600080600080600060a08688031215613e0557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613e3d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e6957600080fd5b8335613e7481613b8d565b92506020840135915060408401356001600160401b03811115613b7757600080fd5b60008060008060008060a08789031215613eaf57600080fd5b8635955060208701356001600160401b03811115613ecc57600080fd5b613ed889828a01613d0d565b909650945050604087013592506060870135915060808701356001600160401b03811115613f0557600080fd5b613f1189828a01613aaa565b9150509295509295509295565b600060208284031215613f3057600080fd5b8135610b0881613b8d565b600080600080600060808688031215613f5357600080fd5b853594506020860135935060408601356001600160401b03811115613f7757600080fd5b8601601f81018813613f8857600080fd5b80356001600160401b03811115613f9e57600080fd5b886020828401011115613fb057600080fd5b959894975060200195606001359392505050565b600080600060608486031215613fd957600080fd5b8335613fe481613b8d565b92506020840135613ff481613b8d565b91506040840135613d0281613b8d565b60006020828403121561401657600080fd5b81356001600160401b0381111561402c57600080fd5b61403884828501613aaa565b949350505050565b6000806040838503121561405357600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b818103818111156129ce576129ce614064565b80820281158282048414176129ce576129ce614064565b6000826140c157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80516001600160601b03811681146140f357600080fd5b919050565b805180151581146140f357600080fd5b600080600080600060a0868803121561412057600080fd5b614129866140dc565b9450602086015161413981613b8d565b60408701519094506005811061414e57600080fd5b925061415c606087016140f8565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561419957600080fd5b610b08826140f8565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b6000806000606084860312156141ee57600080fd5b835192506141fe602085016140f8565b915061420c604085016140f8565b90509250925092565b808201808211156129ce576129ce614064565b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b60006020828403121561427157600080fd5b5051919050565b600181811c9082168061428c57607f821691505b6020821081036142ac57634e487b7160e01b600052602260045260246000fd5b50919050565b8381528260208201526060604082015260008083546142d081614278565b80606086015260018216600081146142ef576001811461430b5761433f565b60ff1983166080870152608082151560051b870101935061433f565b86600052602060002060005b8381101561433657815488820160800152600190910190602001614317565b87016080019450505b5091979650505050505050565b6000825161435e818460208701613c50565b9190910192915050565b600080600080600080600060e0888a03121561438357600080fd5b61438c886140dc565b965061439a602089016140f8565b604089015160608a015160808b015160a08c01519399509197509550935091506143c660c089016140f8565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611a6e57806000526020600020601f840160051c810160208510156144815750805b601f840160051c820191505b818110156144a1576000815560010161448d565b5050505050565b6001600160401b038311156144bf576144bf613a94565b6144d3836144cd8354614278565b8361445a565b6000601f84116001811461450757600085156144ef5750838201355b600019600387901b1c1916600186901b1783556144a1565b600083815260209020601f19861690835b828110156145385786850135825560209485019460019092019101614518565b50868210156145555760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156145af57600080fd5b8151610b0881613b8d565b81835260006001600160fb1b038311156145d357600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006146006040830185876145ba565b9050826020830152949350505050565b6040815260006146246040830185876145ba565b82810360208401526146368185613c74565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220809532e74c527307f7c4fb23228698c888252ec20a2012cf6adf507c53468b9f64736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "extraDataToTokenInfo(bytes)": { - "details": "Extracts token gating information from the extra data.", - "params": { - "_extraData": "The extra data bytes array with the following encoding: - bytes 0-31: uint96 courtID, not used here - bytes 32-63: uint256 minJurors, not used here - bytes 64-95: uint256 disputeKitID, not used here - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160) - bytes 128-159: uint256 tokenId" - }, - "returns": { - "isERC1155": "True if the token is an ERC-1155, false for ERC-20/ERC-721.", - "tokenGate": "The address of the token contract used for gating access.", - "tokenId": "The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721)." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "getLocalDisputeRoundID(uint256,uint256)": { - "details": "Returns the local dispute ID and round ID for a given core dispute ID and core round ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core." - }, - "returns": { - "localDisputeID": "The ID of the dispute in the Dispute Kit.", - "localRoundID": "The ID of the round in the Dispute Kit." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Returns the number of rounds in a dispute.", - "params": { - "_localDisputeID": "The ID of the dispute in the Dispute Kit." - }, - "returns": { - "_0": "The number of rounds in the dispute." - } - }, - "getVoteInfo(uint256,uint256,uint256)": { - "details": "Returns the vote information for a given vote ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The address of the juror who cast the vote.", - "commit": "The commit of the vote." - } - }, - "hashVote(uint256,uint256,string)": { - "details": "Computes the hash of a vote using ABI encodingThe unused parameters may be used by overriding contracts.", - "params": { - "_choice": "The choice being voted for", - "_justification": "The justification for the vote", - "_salt": "A random salt for commitment" - }, - "returns": { - "_0": "bytes32 The hash of the encoded vote parameters" - } - }, - "initialize(address,address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isAppealFunded(uint256)": { - "details": "Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "Whether the appeal funding is finished." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "DisputeKitGated Dispute kit implementation adapted from DisputeKitClassic - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 6613, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6616, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)303" - }, - { - "astId": 6620, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)6552_storage)dyn_storage" - }, - { - "astId": 6624, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6626, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "singleDrawPerJuror", - "offset": 0, - "slot": "4", - "type": "t_bool" - }, - { - "astId": 6634, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "alreadyDrawn", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))" - }, - { - "astId": 6638, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "coreDisputeIDToActive", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6640, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "wNative", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)6552_storage)dyn_storage": { - "base": "t_struct(Dispute)6552_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)6590_storage)dyn_storage": { - "base": "t_struct(Round)6590_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)6599_storage)dyn_storage": { - "base": "t_struct(Vote)6599_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)303": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(uint256 => mapping(address => bool)))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)6552_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Dispute", - "members": [ - { - "astId": 6541, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)6590_storage)dyn_storage" - }, - { - "astId": 6543, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6545, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 6549, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6551, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)6590_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Round", - "members": [ - { - "astId": 6556, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)6599_storage)dyn_storage" - }, - { - "astId": 6558, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6562, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6564, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 6566, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 6568, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 6572, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6576, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6582, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 6584, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 6587, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 6589, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)6599_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Vote", - "members": [ - { - "astId": 6592, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6594, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 6596, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 6598, - "contract": "src/arbitration/dispute-kits/DisputeKitGated.sol:DisputeKitGated", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated_Proxy.json deleted file mode 100644 index 5088beb17..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x677dA30B4b27D129354DdA1e219Bcc86802132d1", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x2b88866107b599692b44d16247e2edad04c010db28b465ebec598fe304ee8179", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x677dA30B4b27D129354DdA1e219Bcc86802132d1", - "transactionIndex": 1, - "gasUsed": "198526", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000004000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1a56f340e250ea8b08564ba8d0c52a7a1772cbd4aea06c22dc494aad1cd0e306", - "transactionHash": "0x2b88866107b599692b44d16247e2edad04c010db28b465ebec598fe304ee8179", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 175286139, - "transactionHash": "0x2b88866107b599692b44d16247e2edad04c010db28b465ebec598fe304ee8179", - "address": "0x677dA30B4b27D129354DdA1e219Bcc86802132d1", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x1a56f340e250ea8b08564ba8d0c52a7a1772cbd4aea06c22dc494aad1cd0e306" - } - ], - "blockNumber": 175286139, - "cumulativeGasUsed": "198526", - "status": 1, - "byzantium": true - }, - "args": [ - "0x89BF27c2148873E0ae4d8c6253C2e4423dF959aF", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000001bd44c4a4511dbfa7dc1d5bc201635596e7200f9" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitGatedProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220996d130d61aaeb26a9d0d04a99b8d31e12de6834d2200a693f04efa432fb1da264736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220996d130d61aaeb26a9d0d04a99b8d31e12de6834d2200a693f04efa432fb1da264736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter.json deleted file mode 100644 index 60d6c10c3..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter.json +++ /dev/null @@ -1,1312 +0,0 @@ -{ - "address": "0xfE0a958bc744Bb9E224E1822625B53134ac5CB69", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "CommitCastShutter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "castCommitShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVoteShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x5d878ce4b9aa09064029160c890e1c6b7637303ec053fe0defaf597f14161b9d", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xfE0a958bc744Bb9E224E1822625B53134ac5CB69", - "transactionIndex": 2, - "gasUsed": "198466", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000800000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xe27c44922389c9aca10217b21c6ba52520b90df7d24018af2f897437f2938955", - "transactionHash": "0x5d878ce4b9aa09064029160c890e1c6b7637303ec053fe0defaf597f14161b9d", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 175286126, - "transactionHash": "0x5d878ce4b9aa09064029160c890e1c6b7637303ec053fe0defaf597f14161b9d", - "address": "0xfE0a958bc744Bb9E224E1822625B53134ac5CB69", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 4, - "blockHash": "0xe27c44922389c9aca10217b21c6ba52520b90df7d24018af2f897437f2938955" - } - ], - "blockNumber": 175286126, - "cumulativeGasUsed": "372592", - "status": 1, - "byzantium": true - }, - "args": [ - "0x036d321AfD9Ca457Be9E523736bc9FbB79FA7efc", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000001bd44c4a4511dbfa7dc1d5bc201635596e7200f9" - ], - "numDeployments": 2, - "solcInputHash": "55ee2edfcfbef3e6f4c10ec53a4be5f5", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitShutterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220b9dc2002a96470cf50e49e7a537fe7864644f7b84f7c205df33e04752d2c158364736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220b9dc2002a96470cf50e49e7a537fe7864644f7b84f7c205df33e04752d2c158364736f6c634300081c0033", - "execute": { - "methodName": "reinitialize", - "args": [ - "0x3829A2486d53ee984a0ca2D76552715726b77138" - ] - }, - "implementation": "0x6582CE0FdB29B5673E6650e34728C784BafB2139", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter_Implementation.json deleted file mode 100644 index abf8a105a..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter_Implementation.json +++ /dev/null @@ -1,1975 +0,0 @@ -{ - "address": "0x6582CE0FdB29B5673E6650e34728C784BafB2139", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "ChoiceFunded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "CommitCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "CommitCastShutter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Contribution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_contributor", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "LOSER_APPEAL_PERIOD_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOSER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE_BASIS_POINT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WINNER_STAKE_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "name": "alreadyDrawn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areCommitsAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "areVotesAllCast", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - } - ], - "name": "castCommit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "bytes32", - "name": "_commit", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_identity", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_encryptedVote", - "type": "bytes" - } - ], - "name": "castCommitShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVote", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_voteIDs", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "castVoteShutter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "coreDisputeID", - "type": "uint256" - } - ], - "name": "coreDisputeIDToActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "coreDisputeIDToLocal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nbVotes", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "jumped", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "fundAppeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getCoherentCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getDegreeOfCoherence", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "getFundedChoices", - "outputs": [ - { - "internalType": "uint256[]", - "name": "fundedChoices", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - } - ], - "name": "getLocalDisputeRoundID", - "outputs": [ - { - "internalType": "uint256", - "name": "localDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "localRoundID", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_localDisputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "totalVoted", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalCommited", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVoters", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "choiceCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVoteInfo", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_justification", - "type": "string" - } - ], - "name": "hashVote", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - } - ], - "name": "isAppealFunded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "isVoteActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "singleDrawPerJuror", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_coreRoundID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_choice", - "type": "uint256" - } - ], - "name": "withdrawFeesAndRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x4e461a0cc70201b7f6b702b6d4956f868c72bbb3a0013f41cb71be8ea04dc5d7", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x6582CE0FdB29B5673E6650e34728C784BafB2139", - "transactionIndex": 2, - "gasUsed": "4030626", - "logsBloom": "0x00000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x0735174ec9be9f341f5d1558cf8b786100456636868afa09a10e59079ebde852", - "transactionHash": "0x4e461a0cc70201b7f6b702b6d4956f868c72bbb3a0013f41cb71be8ea04dc5d7", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 179579792, - "transactionHash": "0x4e461a0cc70201b7f6b702b6d4956f868c72bbb3a0013f41cb71be8ea04dc5d7", - "address": "0x6582CE0FdB29B5673E6650e34728C784BafB2139", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 2, - "blockHash": "0x0735174ec9be9f341f5d1558cf8b786100456636868afa09a10e59079ebde852" - } - ], - "blockNumber": 179579792, - "cumulativeGasUsed": "4074705", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "726fe29d8d9c48c46571792cebc6e314", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"ChoiceFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"CommitCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_identity\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_encryptedVote\",\"type\":\"bytes\"}],\"name\":\"CommitCastShutter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LOSER_APPEAL_PERIOD_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOSER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_BASIS_POINT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WINNER_STAKE_MULTIPLIER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"name\":\"alreadyDrawn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areCommitsAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"areVotesAllCast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"}],\"name\":\"castCommit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"_commit\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_identity\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_encryptedVote\",\"type\":\"bytes\"}],\"name\":\"castCommitShutter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_voteIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"castVoteShutter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"coreDisputeIDToLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_nbVotes\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"jumped\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"fundAppeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getCoherentCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getDegreeOfCoherence\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"getFundedChoices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"fundedChoices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"}],\"name\":\"getLocalDisputeRoundID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"localDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"localRoundID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_localDisputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalVoted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCommited\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"choiceCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVoteInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_justification\",\"type\":\"string\"}],\"name\":\"hashVote\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"}],\"name\":\"isAppealFunded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"isVoteActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"singleDrawPerJuror\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_coreRoundID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"withdrawFeesAndRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ChoiceFunded(uint256,uint256,uint256)\":{\"details\":\"To be emitted when a choice is fully funded for an appeal.\",\"params\":{\"_choice\":\"The choice that is being funded.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"CommitCast(uint256,address,uint256[],bytes32)\":{\"details\":\"To be emitted when a vote commitment is cast.\",\"params\":{\"_commit\":\"The commitment of the juror.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"The address of the juror casting the vote commitment.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"CommitCastShutter(uint256,address,bytes32,bytes32,bytes)\":{\"details\":\"Emitted when a vote is cast.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_encryptedVote\":\"The Shutter encrypted vote.\",\"_identity\":\"The Shutter identity used for encryption.\",\"_juror\":\"The address of the juror casting the vote commitment.\"}},\"Contribution(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when a funding contribution is made.\",\"params\":{\"_amount\":\"The amount contributed.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}},\"DisputeCreation(uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_extraData\":\"The extra data for the dispute.\",\"_numberOfChoices\":\"The number of choices available in the dispute.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}},\"VoteCast(uint256,address,uint256[],uint256,string)\":{\"details\":\"Emitted when casting a vote to provide the justification of juror's choice.\",\"params\":{\"_choice\":\"The choice juror voted for.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_juror\":\"Address of the juror.\",\"_justification\":\"Justification of the choice.\",\"_voteIDs\":\"The identifiers of the votes in the dispute.\"}},\"Withdrawal(uint256,uint256,uint256,address,uint256)\":{\"details\":\"To be emitted when the contributed funds are withdrawn.\",\"params\":{\"_amount\":\"The amount withdrawn.\",\"_choice\":\"The choice that is being funded.\",\"_contributor\":\"The address of the contributor.\",\"_coreDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_coreRoundID\":\"The identifier of the round in the Arbitrator contract.\"}}},\"kind\":\"dev\",\"methods\":{\"areCommitsAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their commits for the last round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their commits for the last round.\"}},\"areVotesAllCast(uint256)\":{\"details\":\"Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"_0\":\"Whether all of the jurors have cast their votes for the last round.\"}},\"castCommit(uint256,uint256[],bytes32)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castCommitShutter(uint256,uint256[],bytes32,bytes32,bytes)\":{\"details\":\"Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.\",\"params\":{\"_commit\":\"The commitment hash including the justification.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_encryptedVote\":\"The Shutter encrypted vote.\",\"_identity\":\"The Shutter identity used for encryption.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"castVote(uint256,uint256[],uint256,uint256,string)\":{\"details\":\"Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.\",\"params\":{\"_choice\":\"The choice.\",\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_justification\":\"Justification of the choice.\",\"_salt\":\"The salt for the commit if the votes were hidden.\",\"_voteIDs\":\"The IDs of the votes.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createDispute(uint256,uint256,bytes,uint256)\":{\"details\":\"Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_extraData\":\"Additional info about the dispute, for possible use in future dispute kits.\",\"_nbVotes\":\"Number of votes for this dispute.\",\"_numberOfChoices\":\"Number of choices of the dispute\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_nonce\":\"Nonce of the drawing iteration.\"},\"returns\":{\"drawnAddress\":\"The drawn address.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"fundAppeal(uint256,uint256)\":{\"details\":\"Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.\",\"params\":{\"_choice\":\"A choice that receives funding.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\"}},\"getCoherentCount(uint256,uint256)\":{\"details\":\"Gets the number of jurors who are eligible to a reward in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of coherent jurors.\"}},\"getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"_0\":\"The degree of coherence in basis points.\"}},\"getLocalDisputeRoundID(uint256,uint256)\":{\"details\":\"Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\"},\"returns\":{\"localDisputeID\":\"The ID of the dispute in the Dispute Kit.\",\"localRoundID\":\"The ID of the round in the Dispute Kit.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Returns the number of rounds in a dispute.\",\"params\":{\"_localDisputeID\":\"The ID of the dispute in the Dispute Kit.\"},\"returns\":{\"_0\":\"The number of rounds in the dispute.\"}},\"getVoteInfo(uint256,uint256,uint256)\":{\"details\":\"Returns the vote information for a given vote ID.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core.\",\"_coreRoundID\":\"The ID of the round in Kleros Core.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The address of the juror who cast the vote.\",\"commit\":\"The commit of the vote.\"}},\"hashVote(uint256,uint256,string)\":{\"details\":\"Computes the hash of a vote using ABI encoding\",\"params\":{\"_choice\":\"The choice being voted for\",\"_justification\":\"The justification for the vote\",\"_salt\":\"A random salt for commitment\"},\"returns\":{\"_0\":\"bytes32 The hash of the encoded vote parameters\"}},\"initialize(address,address,address)\":{\"details\":\"Initializer.\",\"params\":{\"_core\":\"The KlerosCore arbitrator.\",\"_governor\":\"The governor's address.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isAppealFunded(uint256)\":{\"details\":\"Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\"},\"returns\":{\"_0\":\"Whether the appeal funding is finished.\"}},\"isVoteActive(uint256,uint256,uint256)\":{\"details\":\"Returns true if the specified voter was active in this round.\",\"params\":{\"_coreDisputeID\":\"The ID of the dispute in Kleros Core, not in the Dispute Kit.\",\"_coreRoundID\":\"The ID of the round in Kleros Core, not in the Dispute Kit.\",\"_voteID\":\"The ID of the voter.\"},\"returns\":{\"_0\":\"Whether the voter was active or not.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFeesAndRewards(uint256,address,uint256,uint256)\":{\"details\":\"Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.\",\"params\":{\"_beneficiary\":\"The address whose rewards to withdraw.\",\"_choice\":\"The ruling option that the caller wants to withdraw from.\",\"_coreDisputeID\":\"Index of the dispute in Kleros Core contract.\",\"_coreRoundID\":\"The round in the Kleros Core contract the caller wants to withdraw from.\"},\"returns\":{\"amount\":\"The withdrawn amount.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"DisputeKitShutter Added functionality: shielded voting. Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/dispute-kits/DisputeKitShutter.sol\":\"DisputeKitShutter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitClassicBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore, KlerosCoreBase, IDisputeKit, ISortitionModule} from \\\"../KlerosCore.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {SafeSend} from \\\"../../libraries/SafeSend.sol\\\";\\n\\n/// @title DisputeKitClassicBase\\n/// Abstract Dispute kit classic implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\nabstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable {\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Structs * //\\n // ************************************* //\\n\\n struct Dispute {\\n Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds.\\n uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\".\\n bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore.\\n mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute.\\n bytes extraData; // Extradata for the dispute.\\n }\\n\\n struct Round {\\n Vote[] votes; // Former votes[_appeal][].\\n uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n uint256 totalVoted; // Former uint[_appeal] votesInEachRound.\\n uint256 totalCommitted; // Former commitsInRound.\\n mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round.\\n mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise.\\n mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice.\\n uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute.\\n uint256[] fundedChoices; // Stores the choices that are fully funded.\\n uint256 nbVotes; // Maximal number of votes this dispute can get.\\n }\\n\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee.\\n uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee.\\n uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period.\\n uint256 public constant ONE_BASIS_POINT = 10000; // One basis point, for scaling.\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The Kleros Core arbitrator\\n Dispute[] public disputes; // Array of the locally created disputes.\\n mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID.\\n bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default.\\n mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool)))\\n public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading.\\n mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev To be emitted when a dispute is created.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _numberOfChoices The number of choices available in the dispute.\\n /// @param _extraData The extra data for the dispute.\\n event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData);\\n\\n /// @dev To be emitted when a vote commitment is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _commit The commitment of the juror.\\n event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit);\\n\\n /// @dev To be emitted when a funding contribution is made.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount contributed.\\n event Contribution(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when the contributed funds are withdrawn.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n /// @param _contributor The address of the contributor.\\n /// @param _amount The amount withdrawn.\\n event Withdrawal(\\n uint256 indexed _coreDisputeID,\\n uint256 indexed _coreRoundID,\\n uint256 _choice,\\n address indexed _contributor,\\n uint256 _amount\\n );\\n\\n /// @dev To be emitted when a choice is fully funded for an appeal.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _coreRoundID The identifier of the round in the Arbitrator contract.\\n /// @param _choice The choice that is being funded.\\n event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice);\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n modifier notJumped(uint256 _coreDisputeID) {\\n require(!disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped, \\\"Dispute jumped to a parent DK!\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function __DisputeKitClassicBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(address _core) external onlyByGovernor {\\n core = KlerosCore(_core);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Number of votes for this dispute.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external override onlyByCore {\\n uint256 localDisputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.numberOfChoices = _numberOfChoices;\\n dispute.extraData = _extraData;\\n dispute.jumped = false; // Possibly true if this DK has jumped in a previous round.\\n\\n // New round in the Core should be created before the dispute creation in DK.\\n dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length;\\n\\n Round storage round = dispute.rounds.push();\\n round.nbVotes = _nbVotes;\\n round.tied = true;\\n\\n coreDisputeIDToLocal[_coreDisputeID] = localDisputeID;\\n coreDisputeIDToActive[_coreDisputeID] = true;\\n emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData);\\n }\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _nonce Nonce of the drawing iteration.\\n /// @return drawnAddress The drawn address.\\n function draw(\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[localRoundID];\\n\\n ISortitionModule sortitionModule = core.sortitionModule();\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n bytes32 key = bytes32(uint256(courtID)); // Get the ID of the tree.\\n\\n drawnAddress = sortitionModule.draw(key, _coreDisputeID, _nonce);\\n if (drawnAddress == address(0)) {\\n // Sortition can return 0 address if no one has staked yet.\\n return drawnAddress;\\n }\\n\\n if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) {\\n round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false}));\\n alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true;\\n } else {\\n drawnAddress = address(0);\\n }\\n }\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash.\\n function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n }\\n\\n function _castCommit(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.commit, \\\"The dispute should be in Commit period.\\\");\\n require(_commit != bytes32(0), \\\"Empty commit.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == msg.sender, \\\"The caller has to own the vote.\\\");\\n round.votes[_voteIDs[i]].commit = _commit;\\n }\\n round.totalCommitted += _voteIDs.length;\\n emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit);\\n }\\n\\n /// @dev Sets the caller's choices for the specified votes.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _choice The choice.\\n /// @param _salt The salt for the commit if the votes were hidden.\\n /// @param _justification Justification of the choice.\\n function castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender);\\n }\\n\\n function _castVote(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification,\\n address _juror\\n ) internal notJumped(_coreDisputeID) {\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n require(period == KlerosCoreBase.Period.vote, \\\"The dispute should be in Vote period.\\\");\\n require(_voteIDs.length > 0, \\\"No voteID provided\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"Choice out of bounds\\\");\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n {\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n bytes32 voteHash = hashVote(_choice, _salt, _justification);\\n\\n // Save the votes.\\n for (uint256 i = 0; i < _voteIDs.length; i++) {\\n require(round.votes[_voteIDs[i]].account == _juror, \\\"The juror has to own the vote.\\\");\\n require(\\n !hiddenVotes || round.votes[_voteIDs[i]].commit == voteHash,\\n \\\"The vote hash must match the commitment in courts with hidden votes.\\\"\\n );\\n require(!round.votes[_voteIDs[i]].voted, \\\"Vote already cast.\\\");\\n round.votes[_voteIDs[i]].choice = _choice;\\n round.votes[_voteIDs[i]].voted = true;\\n }\\n } // Workaround stack too deep\\n\\n round.totalVoted += _voteIDs.length;\\n\\n round.counts[_choice] += _voteIDs.length;\\n if (_choice == round.winningChoice) {\\n if (round.tied) round.tied = false;\\n } else {\\n // Voted for another choice.\\n if (round.counts[_choice] == round.counts[round.winningChoice]) {\\n // Tie.\\n if (!round.tied) round.tied = true;\\n } else if (round.counts[_choice] > round.counts[round.winningChoice]) {\\n // New winner.\\n round.winningChoice = _choice;\\n round.tied = false;\\n }\\n }\\n emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification);\\n }\\n\\n /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded.\\n /// Note that the surplus deposit will be reimbursed.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _choice A choice that receives funding.\\n function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n require(_choice <= dispute.numberOfChoices, \\\"There is no such ruling to fund.\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n require(block.timestamp >= appealPeriodStart && block.timestamp < appealPeriodEnd, \\\"Appeal period is over.\\\");\\n\\n uint256 multiplier;\\n (uint256 ruling, , ) = this.currentRuling(_coreDisputeID);\\n if (ruling == _choice) {\\n multiplier = WINNER_STAKE_MULTIPLIER;\\n } else {\\n require(\\n block.timestamp - appealPeriodStart <\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT,\\n \\\"Appeal period is over for loser\\\"\\n );\\n multiplier = LOSER_STAKE_MULTIPLIER;\\n }\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1;\\n\\n require(!round.hasPaid[_choice], \\\"Appeal fee is already paid.\\\");\\n uint256 appealCost = core.appealCost(_coreDisputeID);\\n uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT;\\n\\n // Take up to the amount necessary to fund the current round at the current costs.\\n uint256 contribution;\\n if (totalCost > round.paidFees[_choice]) {\\n contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level.\\n ? msg.value\\n : totalCost - round.paidFees[_choice];\\n emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution);\\n }\\n\\n round.contributions[msg.sender][_choice] += contribution;\\n round.paidFees[_choice] += contribution;\\n if (round.paidFees[_choice] >= totalCost) {\\n round.feeRewards += round.paidFees[_choice];\\n round.fundedChoices.push(_choice);\\n round.hasPaid[_choice] = true;\\n emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice);\\n }\\n\\n if (round.fundedChoices.length > 1) {\\n // At least two sides are fully funded.\\n round.feeRewards = round.feeRewards - appealCost;\\n\\n if (core.isDisputeKitJumping(_coreDisputeID)) {\\n // Don't create a new round in case of a jump, and remove local dispute from the flow.\\n dispute.jumped = true;\\n } else {\\n // Don't subtract 1 from length since both round arrays haven't been updated yet.\\n dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length;\\n\\n Round storage newRound = dispute.rounds.push();\\n newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID);\\n newRound.tied = true;\\n }\\n core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData);\\n }\\n\\n if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative);\\n }\\n\\n /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved.\\n /// Note that withdrawals are not possible if the core contract is paused.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core contract.\\n /// @param _beneficiary The address whose rewards to withdraw.\\n /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from.\\n /// @param _choice The ruling option that the caller wants to withdraw from.\\n /// @return amount The withdrawn amount.\\n function withdrawFeesAndRewards(\\n uint256 _coreDisputeID,\\n address payable _beneficiary,\\n uint256 _coreRoundID,\\n uint256 _choice\\n ) external returns (uint256 amount) {\\n (, , , bool isRuled, ) = core.disputes(_coreDisputeID);\\n require(isRuled, \\\"Dispute should be resolved.\\\");\\n require(!core.paused(), \\\"Core is paused\\\");\\n require(coreDisputeIDToActive[_coreDisputeID], \\\"Not active for core dispute ID\\\");\\n\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID);\\n\\n if (!round.hasPaid[_choice]) {\\n // Allow to reimburse if funding was unsuccessful for this ruling option.\\n amount = round.contributions[_beneficiary][_choice];\\n } else {\\n // Funding was successful for this ruling option.\\n if (_choice == finalRuling) {\\n // This ruling option is the ultimate winner.\\n amount = round.paidFees[_choice] > 0\\n ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice]\\n : 0;\\n } else if (!round.hasPaid[finalRuling]) {\\n // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed.\\n amount =\\n (round.contributions[_beneficiary][_choice] * round.feeRewards) /\\n (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]);\\n }\\n }\\n round.contributions[_beneficiary][_choice] = 0;\\n\\n if (amount != 0) {\\n _beneficiary.safeSend(amount, wNative);\\n emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @dev The unused parameters may be used by overriding contracts.\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(_choice, _salt));\\n }\\n\\n function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage lastRound = dispute.rounds[dispute.rounds.length - 1];\\n return lastRound.fundedChoices;\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(\\n uint256 _coreDisputeID\\n ) external view override returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n tied = round.tied;\\n ruling = tied ? 0 : round.winningChoice;\\n (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID);\\n // Override the final ruling if only one side funded the appeals.\\n if (period == KlerosCoreBase.Period.execution) {\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n if (fundedChoices.length == 1) {\\n ruling = fundedChoices[0];\\n tied = false;\\n overridden = true;\\n }\\n }\\n }\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 /* _feePerJuror */,\\n uint256 /* _pnkAtStakePerJuror */\\n ) external view override returns (uint256) {\\n // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between.\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (vote.voted && (vote.choice == winningChoice || tied)) {\\n return ONE_BASIS_POINT;\\n } else {\\n return 0;\\n }\\n }\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID);\\n\\n if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) {\\n return 0;\\n } else if (tied) {\\n return currentRound.totalVoted;\\n } else {\\n return currentRound.counts[winningChoice];\\n }\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n return round.totalCommitted == round.votes.length;\\n }\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n\\n (uint96 courtID, , , , ) = core.disputes(_coreDisputeID);\\n (, bool hiddenVotes, , , , , ) = core.courts(courtID);\\n uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length;\\n\\n return round.totalVoted == expectedTotalVoted;\\n }\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// Note that this function is to be called directly by the core contract and is not for off-chain usage.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) {\\n (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID);\\n\\n uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID);\\n // Uses block.timestamp from the current tx when called by the core contract.\\n return (fundedChoices.length == 0 &&\\n block.timestamp - appealPeriodStart >=\\n ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT);\\n }\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (bool) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return vote.voted;\\n }\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n override\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n )\\n {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]];\\n return (\\n round.winningChoice,\\n round.tied,\\n round.totalVoted,\\n round.totalCommitted,\\n round.votes.length,\\n round.counts[_choice]\\n );\\n }\\n\\n /// @dev Returns the number of rounds in a dispute.\\n /// @param _localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return The number of rounds in the dispute.\\n function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) {\\n return disputes[_localDisputeID].rounds.length;\\n }\\n\\n /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @return localDisputeID The ID of the dispute in the Dispute Kit.\\n /// @return localRoundID The ID of the round in the Dispute Kit.\\n function getLocalDisputeRoundID(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID\\n ) external view returns (uint256 localDisputeID, uint256 localRoundID) {\\n localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID];\\n }\\n\\n /// @dev Returns the vote information for a given vote ID.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _coreRoundID The ID of the round in Kleros Core.\\n /// @param _voteID The ID of the vote.\\n /// @return account The address of the juror who cast the vote.\\n /// @return commit The commit of the vote.\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID];\\n return (vote.account, vote.commit, vote.choice, vote.voted);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Checks that the chosen address satisfies certain conditions for being drawn.\\n /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts.\\n /// minStake is checked directly during staking process however it's possible for the juror to get drawn\\n /// while having < minStake if it is later increased by governance.\\n /// This issue is expected and harmless.\\n /// @param _round The round in which the juror is being drawn.\\n /// @param _coreDisputeID ID of the dispute in the core contract.\\n /// @param _juror Chosen address.\\n /// @return result Whether the address passes the check or not.\\n function _postDrawCheck(\\n Round storage _round,\\n uint256 _coreDisputeID,\\n address _juror\\n ) internal view virtual returns (bool result) {\\n if (singleDrawPerJuror) {\\n uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID];\\n Dispute storage dispute = disputes[localDisputeID];\\n uint256 localRoundID = dispute.rounds.length - 1;\\n result = !alreadyDrawn[localDisputeID][localRoundID][_juror];\\n } else {\\n result = true;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc418b9a76802db5d16819836734ecff8b76d5f37101819aee6fd1844dfe21dd9\",\"license\":\"MIT\"},\"src/arbitration/dispute-kits/DisputeKitShutter.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {DisputeKitClassicBase, KlerosCore} from \\\"./DisputeKitClassicBase.sol\\\";\\n\\n/// @title DisputeKitShutter\\n/// Added functionality: shielded voting.\\n/// Dispute kit implementation of the Kleros v1 features including:\\n/// - a drawing system: proportional to staked PNK,\\n/// - a vote aggregation system: plurality,\\n/// - an incentive system: equal split between coherent votes,\\n/// - an appeal system: fund 2 choices only, vote on any choice.\\ncontract DisputeKitShutter is DisputeKitClassicBase {\\n string public constant override version = \\\"0.12.0\\\";\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a vote is cast.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror The address of the juror casting the vote commitment.\\n /// @param _commit The commitment hash.\\n /// @param _identity The Shutter identity used for encryption.\\n /// @param _encryptedVote The Shutter encrypted vote.\\n event CommitCastShutter(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n bytes32 indexed _commit,\\n bytes32 _identity,\\n bytes _encryptedVote\\n );\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n /// @param _core The KlerosCore arbitrator.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(address _governor, KlerosCore _core, address _wNative) external reinitializer(1) {\\n __DisputeKitClassicBase_initialize(_governor, _core, _wNative);\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(9) {\\n wNative = _wNative;\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the\\n /// commit period, each call overrides the commits of the previous one.\\n /// `O(n)` where\\n /// `n` is the number of votes.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core.\\n /// @param _voteIDs The IDs of the votes.\\n /// @param _commit The commitment hash including the justification.\\n /// @param _identity The Shutter identity used for encryption.\\n /// @param _encryptedVote The Shutter encrypted vote.\\n function castCommitShutter(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n bytes32 _commit,\\n bytes32 _identity,\\n bytes calldata _encryptedVote\\n ) external notJumped(_coreDisputeID) {\\n _castCommit(_coreDisputeID, _voteIDs, _commit);\\n emit CommitCastShutter(_coreDisputeID, msg.sender, _commit, _identity, _encryptedVote);\\n }\\n\\n function castVoteShutter(\\n uint256 _coreDisputeID,\\n uint256[] calldata _voteIDs,\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) external {\\n Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]];\\n address juror = dispute.rounds[dispute.rounds.length - 1].votes[_voteIDs[0]].account;\\n\\n // _castVote() ensures that all the _voteIDs do belong to `juror`\\n _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, juror);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Computes the hash of a vote using ABI encoding\\n * @param _choice The choice being voted for\\n * @param _justification The justification for the vote\\n * @param _salt A random salt for commitment\\n * @return bytes32 The hash of the encoded vote parameters\\n */\\n function hashVote(\\n uint256 _choice,\\n uint256 _salt,\\n string memory _justification\\n ) public pure override returns (bytes32) {\\n bytes32 justificationHash = keccak256(bytes(_justification));\\n return keccak256(abi.encode(_choice, _salt, justificationHash));\\n }\\n}\\n\",\"keccak256\":\"0x22667ae7b4db6a3290463f2f42df92136c4f91190665a2f14523f05e1bbc50c5\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516146976100fc600039600081816119420152818161196b0152611b6301526146976000f3fe6080604052600436106102465760003560e01c80636d4cd8ea11610139578063be467604116100b6578063e4c0aaf41161007a578063e4c0aaf41461075e578063f2f4eb261461077e578063f32ab9271461079e578063f7e7d1fd146107d3578063f8abee10146107f3578063fc6f8f161461082357600080fd5b8063be467604146106e8578063c0c53b8b146106fe578063d2b8035a1461071e578063da3beb8c1461073e578063e349ad30146105d057600080fd5b80638f06f112116100fd5780638f06f11214610626578063a7cc08fe14610646578063b34bfaa814610692578063b6ede540146106a8578063ba66fde7146106c857600080fd5b80636d4cd8ea14610590578063751accd0146105b0578063796490f9146105d05780637c04034e146105e65780638e4264601461060657600080fd5b80634b2f0ea0116101c75780635a155ccd1161018b5780635a155ccd146104955780635c92e2f6146104d657806365540b96146104f6578063675926f61461052357806369f3f0411461054357600080fd5b80634b2f0ea0146103ec5780634f1ef286146103ff57806352d1902d1461041257806354fd4d5014610427578063564a565d1461046657600080fd5b80631c3db16d1161020e5780631c3db16d146103355780631cc3423a146103725780632621b9a2146103925780632d68efc9146103ac578063362c3479146103cc57600080fd5b80630855bbe91461024b57806309cc41b8146102805780630baa64d1146102a25780630c340a24146102c25780631200aabc146102fa575b600080fd5b34801561025757600080fd5b5061026b610266366004613a09565b610843565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004613aae565b61090b565b005b3480156102ae57600080fd5b5061026b6102bd366004613a09565b6109c9565b3480156102ce57600080fd5b506000546102e2906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b34801561030657600080fd5b50610327610315366004613a09565b60036020526000908152604090205481565b604051908152602001610277565b34801561034157600080fd5b50610355610350366004613a09565b610a40565b604080519384529115156020840152151590820152606001610277565b34801561037e57600080fd5b5061032761038d366004613be8565b610bae565b34801561039e57600080fd5b5060045461026b9060ff1681565b3480156103b857600080fd5b506007546102e2906001600160a01b031681565b3480156103d857600080fd5b506103276103e7366004613c4c565b610bee565b6102a06103fa366004613c89565b61109e565b6102a061040d366004613cab565b61192e565b34801561041e57600080fd5b50610327611b56565b34801561043357600080fd5b50610459604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102779190613d4a565b34801561047257600080fd5b50610486610481366004613a09565b611bb4565b60405161027793929190613d5d565b3480156104a157600080fd5b5061026b6104b0366004613d7e565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104e257600080fd5b506102a06104f1366004613db7565b611c7a565b34801561050257600080fd5b50610516610511366004613a09565b611c86565b6040516102779190613e09565b34801561052f57600080fd5b5061032761053e366004613e4c565b611d4a565b34801561054f57600080fd5b5061056361055e366004613e87565b611e8d565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610277565b34801561059c57600080fd5b5061026b6105ab366004613a09565b611f45565b3480156105bc57600080fd5b506102a06105cb366004613eb3565b6120c8565b3480156105dc57600080fd5b5061032761271081565b3480156105f257600080fd5b506102a0610601366004613ef5565b612194565b34801561061257600080fd5b506102a0610621366004613f7d565b6121ab565b34801561063257600080fd5b506102a0610641366004613ef5565b6121f7565b34801561065257600080fd5b50610666610661366004613e87565b6122bd565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610277565b34801561069e57600080fd5b50610327614e2081565b3480156106b457600080fd5b506102a06106c3366004613f9a565b612383565b3480156106d457600080fd5b5061026b6106e3366004613e87565b612576565b3480156106f457600080fd5b5061032761138881565b34801561070a57600080fd5b506102a0610719366004613ff4565b612611565b34801561072a57600080fd5b506102e2610739366004613c89565b6126db565b34801561074a57600080fd5b50610327610759366004613c89565b612a2a565b34801561076a57600080fd5b506102a0610779366004613f7d565b612b7d565b34801561078a57600080fd5b506001546102e2906001600160a01b031681565b3480156107aa57600080fd5b506107be6107b9366004613c89565b612bc9565b60408051928352602083019190915201610277565b3480156107df57600080fd5b506102a06107ee366004613f7d565b612c1b565b3480156107ff57600080fd5b5061026b61080e366004613a09565b60066020526000908152604090205460ff1681565b34801561082f57600080fd5b5061032761083e366004613a09565b612ced565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa158015610890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b49190614034565b9150915060006108c385611c86565b90508051600014801561090257506127106113886108e1858561406e565b6108eb9190614081565b6108f59190614098565b6108ff844261406e565b10155b95945050505050565b60008781526003602052604090205460028054899290811061092f5761092f6140ba565b600091825260209091206002600590920201015460ff161561096c5760405162461bcd60e51b8152600401610963906140d0565b60405180910390fd5b61097888888888612d19565b84336001600160a01b0316897fbc1efa6396a4ba1a755245703b38c48fbe744ab5117d9f09f47d26ffc1df999e8787876040516109b793929190614130565b60405180910390a45050505050505050565b6000818152600360205260408120546002805483929081106109ed576109ed6140ba565b60009182526020822060059091020180549092508290610a0f9060019061406e565b81548110610a1f57610a1f6140ba565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610a6c57610a6c6140ba565b60009182526020822060059091020180549092508290610a8e9060019061406e565b81548110610a9e57610a9e6140ba565b60009182526020909120600c90910201600381015460ff169450905083610ac9578060010154610acc565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f9190614176565b5090935060049250610b4f915050565b816004811115610b6157610b616141df565b03610ba4576000610b7188611c86565b90508051600103610ba25780600081518110610b8f57610b8f6140ba565b6020026020010151965060009550600194505b505b5050509193909250565b80516020808301919091206040805180840187905280820186905260608082019390935281518082039093018352608001905280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c609190614176565b50935050505080610cb35760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e00000000006044820152606401610963565b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a91906141f5565b15610d685760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610963565b60008681526006602052604090205460ff16610d965760405162461bcd60e51b815260040161096390614210565b600086815260036020526040812054600280549091908110610dba57610dba6140ba565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610dee57610dee6140ba565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d9190614247565b5050600087815260078401602052604090205490915060ff16610eb7576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ffc565b808603610f2c576000868152600683016020526040902054610eda576000610f25565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610f1b9190614081565b610f259190614098565b9450610ffc565b600081815260078301602052604090205460ff16610ffc5781600601600083600a01600181548110610f6057610f606140ba565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610f9657610f966140ba565b9060005260206000200154815260200190815260200160002054610fba9190614283565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610fef9190614081565b610ff99190614098565b94505b6001600160a01b03881660009081526008830160209081526040808320898452909152812055841561109257600754611043906001600160a01b038a81169188911661307c565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051611089929190918252602082015260400190565b60405180910390a45b50505050949350505050565b6000828152600360205260409020546002805484929081106110c2576110c26140ba565b600091825260209091206002600590920201015460ff16156110f65760405162461bcd60e51b8152600401610963906140d0565b60008381526003602052604081205460028054909190811061111a5761111a6140ba565b90600052602060002090600502019050806001015483111561117e5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610963565b60008481526006602052604090205460ff166111ac5760405162461bcd60e51b815260040161096390614210565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156111f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121d9190614034565b9150915081421015801561123057508042105b6112755760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610963565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190614247565b505090508681036112ef576127109150611370565b6127106113886112ff868661406e565b6113099190614081565b6113139190614098565b61131d854261406e565b1061136a5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610963565b614e2091505b845460009086906113839060019061406e565b81548110611393576113936140ba565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114169190614296565b611420919061406e565b60008a815260078401602052604090205490915060ff16156114845760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610963565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f29190614296565b905060006127106115038784614081565b61150d9190614098565b6115179083614283565b60008c8152600686016020526040812054919250908211156115c85760008c81526006860160205260409020543490611550908461406e565b116115755760008c8152600686016020526040902054611570908361406e565b611577565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516115bf929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906115f4908490614283565b909155505060008c815260068601602052604081208054839290611619908490614283565b909155505060008c815260068601602052604090205482116116eb5760008c81526006860160205260408120546009870180549192909161165b908490614283565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156118f657828560090154611708919061406e565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177a91906141f5565b156117935760028a01805460ff19166001179055611876565b895460038b0160006117a6876001614283565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161182191815260200190565b602060405180830381865afa15801561183e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118629190614296565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016118c3939291906142e9565b6000604051808303818588803b1580156118dc57600080fd5b505af11580156118f0573d6000803e3d6000fd5b50505050505b8034111561191f5761191f61190b823461406e565b6007543391906001600160a01b031661307c565b50505050505050505050505050565b61193782613167565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119b557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119a96000805160206146428339815191525490565b6001600160a01b031614155b156119d35760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a2d575060408051601f3d908101601f19168201909252611a2a91810190614296565b60015b611a5557604051630c76093760e01b81526001600160a01b0383166004820152602401610963565b6000805160206146428339815191528114611a8657604051632a87526960e21b815260048101829052602401610963565b6000805160206146428339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611b51576000836001600160a01b031683604051611aed9190614383565b600060405180830381855af49150503d8060008114611b28576040519150601f19603f3d011682016040523d82523d6000602084013e611b2d565b606091505b5050905080611b4f576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ba15760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061464283398151915290565b60028181548110611bc457600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611bf7906142af565b80601f0160208091040260200160405190810160405280929190818152602001828054611c23906142af565b8015611c705780601f10611c4557610100808354040283529160200191611c70565b820191906000526020600020905b815481529060010190602001808311611c5357829003601f168201915b5050505050905083565b611b4f84848484612d19565b6000818152600360205260408120546002805460609392908110611cac57611cac6140ba565b60009182526020822060059091020180549092508290611cce9060019061406e565b81548110611cde57611cde6140ba565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611d3c57602002820191906000526020600020905b815481526020019060010190808311611d28575b505050505092505050919050565b600085815260036020526040812054600280548392908110611d6e57611d6e6140ba565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611da257611da26140ba565b90600052602060002090600c02016000018681548110611dc457611dc46140ba565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e469190614247565b506003850154919350915060ff168015611e6a57508183600201541480611e6a5750805b15611e7d57612710945050505050610902565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611ebe57611ebe6140ba565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611ef257611ef26140ba565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611f6957611f696140ba565b60009182526020822060059091020180549092508290611f8b9060019061406e565b81548110611f9b57611f9b6140ba565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201a9190614176565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612099919061439f565b50505050509150506000816120af5783546120b5565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b031633146120f25760405162461bcd60e51b81526004016109639061440b565b6000836001600160a01b0316838360405161210d9190614383565b60006040518083038185875af1925050503d806000811461214a576040519150601f19603f3d011682016040523d82523d6000602084013e61214f565b606091505b5050905080611b4f5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610963565b6121a386868686868633613194565b505050505050565b6000546001600160a01b031633146121d55760405162461bcd60e51b81526004016109639061440b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008681526003602052604081205460028054909190811061221b5761221b6140ba565b6000918252602082206005909102018054909250829061223d9060019061406e565b8154811061224d5761224d6140ba565b90600052602060002090600c020160000187876000818110612271576122716140ba565b9050602002013581548110612288576122886140ba565b60009182526020909120600490910201546001600160a01b031690506122b388888888888887613194565b5050505050505050565b60008060008060006002600360008a815260200190815260200160002054815481106122eb576122eb6140ba565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061231f5761231f6140ba565b90600052602060002090600c02016000018781548110612341576123416140ba565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146123ad5760405162461bcd60e51b81526004016109639061444d565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2016124388587836144df565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa15801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf9190614296565b6124c9919061406e565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab5810890612564908a908a908a90614130565b60405180910390a25050505050505050565b60008381526003602052604081205460028054839290811061259a5761259a6140ba565b600091825260208083208784526003600590930201918201905260408220548154919350839181106125ce576125ce6140ba565b90600052602060002090600c020160000184815481106125f0576125f06140ba565b600091825260209091206004909102016003015460ff169695505050505050565b6001600061261d6138c5565b8054909150600160401b900460ff1680612644575080546001600160401b03808416911610155b156126615760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561268d8585856138e9565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146127085760405162461bcd60e51b81526004016109639061444d565b60008381526003602052604090205460028054859290811061272c5761272c6140ba565b600091825260209091206002600590920201015460ff16156127605760405162461bcd60e51b8152600401610963906140d0565b6000848152600360205260408120546002805491929183908110612786576127866140ba565b60009182526020822060059091020180549092506127a69060019061406e565b905060008260000182815481106127bf576127bf6140ba565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612824573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612848919061459e565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bb9190614176565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561291f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612943919061459e565b98506001600160a01b03891661295f5750505050505050612a23565b61296a848c8b613930565b15612a1657604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612a1b565b600098505b505050505050505b5092915050565b600082815260036020526040812054600280548392908110612a4e57612a4e6140ba565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612a8257612a826140ba565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b059190614247565b5091509150826004015460001480612b34575080158015612b3457506000828152600284016020526040902054155b15612b46576000945050505050612b77565b8015612b5b575050600401549150612b779050565b506000908152600290910160205260409020549150612b779050565b92915050565b6000546001600160a01b03163314612ba75760405162461bcd60e51b81526004016109639061440b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546002805491929183908110612bef57612bef6140ba565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612c276138c5565b8054909150600160401b900460ff1680612c4e575080546001600160401b03808416911610155b15612c6b5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612d0257612d026140ba565b600091825260209091206005909102015492915050565b600084815260036020526040902054600280548692908110612d3d57612d3d6140ba565b600091825260209091206002600590920201015460ff1615612d715760405162461bcd60e51b8152600401610963906140d0565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddf9190614176565b5090935060019250612def915050565b816004811115612e0157612e016141df565b14612e5e5760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610963565b82612e9b5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610963565b60008681526006602052604090205460ff16612ec95760405162461bcd60e51b815260040161096390614210565b600086815260036020526040812054600280549091908110612eed57612eed6140ba565b60009182526020822060059091020180549092508290612f0f9060019061406e565b81548110612f1f57612f1f6140ba565b90600052602060002090600c0201905060005b86811015613015573382898984818110612f4e57612f4e6140ba565b9050602002013581548110612f6557612f656140ba565b60009182526020909120600490910201546001600160a01b031614612fcc5760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610963565b8582898984818110612fe057612fe06140ba565b9050602002013581548110612ff757612ff76140ba565b60009182526020909120600160049092020181019190915501612f32565b508686905081600501600082825461302d9190614283565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f089061306a908b908b908b906145ed565b60405180910390a35050505050505050565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050156130ab57505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130e657600080fd5b505af11580156130fa573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b15801561314a57600080fd5b505af115801561315e573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146131915760405162461bcd60e51b81526004016109639061440b565b50565b6000878152600360205260409020546002805489929081106131b8576131b86140ba565b600091825260209091206002600590920201015460ff16156131ec5760405162461bcd60e51b8152600401610963906140d0565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325a9190614176565b509093506002925061326a915050565b81600481111561327c5761327c6141df565b146132d75760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610963565b866133195760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610963565b60008981526006602052604090205460ff166133475760405162461bcd60e51b815260040161096390614210565b60008981526003602052604081205460028054909190811061336b5761336b6140ba565b9060005260206000209060050201905080600101548711156133c65760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610963565b805460009082906133d99060019061406e565b815481106133e9576133e96140ba565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d9061342e908f9060040190815260200190565b60a060405180830381865afa15801561344b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346f9190614176565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156134ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ee919061439f565b505050505091505060006135038b8b8b610bae565b905060005b8c81101561378a576001600160a01b038916858f8f8481811061352d5761352d6140ba565b9050602002013581548110613544576135446140ba565b60009182526020909120600490910201546001600160a01b0316146135ab5760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610963565b8215806135f2575081858f8f848181106135c7576135c76140ba565b90506020020135815481106135de576135de6140ba565b906000526020600020906004020160010154145b6136725760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610963565b848e8e83818110613685576136856140ba565b905060200201358154811061369c5761369c6140ba565b600091825260209091206003600490920201015460ff16156136f55760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610963565b8b858f8f84818110613709576137096140ba565b9050602002013581548110613720576137206140ba565b60009182526020909120600260049092020101556001858f8f84818110613749576137496140ba565b9050602002013581548110613760576137606140ba565b60009182526020909120600490910201600301805460ff1916911515919091179055600101613508565b5050506004820180548b92506000906137a4908490614283565b90915550506000888152600282016020526040812080548b92906137c9908490614283565b9091555050600181015488036137f857600381015460ff16156137f35760038101805460ff191690555b613871565b60018101546000908152600282016020526040808220548a83529120540361383a57600381015460ff166137f35760038101805460ff19166001179055613871565b60018101546000908152600282016020526040808220548a83529120541115613871576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b6040516138b093929190614611565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6138f16139c8565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60045460009060ff16156139be576000838152600360205260408120546002805491929183908110613964576139646140ba565b60009182526020822060059091020180549092506139849060019061406e565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610be7915050565b5060019392505050565b6139d06139ef565b6139ed57604051631afcd79f60e31b815260040160405180910390fd5b565b60006139f96138c5565b54600160401b900460ff16919050565b600060208284031215613a1b57600080fd5b5035919050565b60008083601f840112613a3457600080fd5b5081356001600160401b03811115613a4b57600080fd5b6020830191508360208260051b8501011115613a6657600080fd5b9250929050565b60008083601f840112613a7f57600080fd5b5081356001600160401b03811115613a9657600080fd5b602083019150836020828501011115613a6657600080fd5b600080600080600080600060a0888a031215613ac957600080fd5b8735965060208801356001600160401b03811115613ae657600080fd5b613af28a828b01613a22565b909750955050604088013593506060880135925060808801356001600160401b03811115613b1f57600080fd5b613b2b8a828b01613a6d565b989b979a50959850939692959293505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613b6557600080fd5b8135602083016000806001600160401b03841115613b8557613b85613b3e565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613bb357613bb3613b3e565b604052838152905080828401871015613bcb57600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613bfd57600080fd5b833592506020840135915060408401356001600160401b03811115613c2157600080fd5b613c2d86828701613b54565b9150509250925092565b6001600160a01b038116811461319157600080fd5b60008060008060808587031215613c6257600080fd5b843593506020850135613c7481613c37565b93969395505050506040820135916060013590565b60008060408385031215613c9c57600080fd5b50508035926020909101359150565b60008060408385031215613cbe57600080fd5b8235613cc981613c37565b915060208301356001600160401b03811115613ce457600080fd5b613cf085828601613b54565b9150509250929050565b60005b83811015613d15578181015183820152602001613cfd565b50506000910152565b60008151808452613d36816020860160208601613cfa565b601f01601f19169290920160200192915050565b602081526000610be76020830184613d1e565b83815282151560208201526060604082015260006109026060830184613d1e565b600080600060608486031215613d9357600080fd5b83359250602084013591506040840135613dac81613c37565b809150509250925092565b60008060008060608587031215613dcd57600080fd5b8435935060208501356001600160401b03811115613dea57600080fd5b613df687828801613a22565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613e41578351835260209384019390920191600101613e23565b509095945050505050565b600080600080600060a08688031215613e6457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613e9c57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613ec857600080fd5b8335613ed381613c37565b92506020840135915060408401356001600160401b03811115613c2157600080fd5b60008060008060008060a08789031215613f0e57600080fd5b8635955060208701356001600160401b03811115613f2b57600080fd5b613f3789828a01613a22565b909650945050604087013592506060870135915060808701356001600160401b03811115613f6457600080fd5b613f7089828a01613b54565b9150509295509295509295565b600060208284031215613f8f57600080fd5b8135610be781613c37565b600080600080600060808688031215613fb257600080fd5b853594506020860135935060408601356001600160401b03811115613fd657600080fd5b613fe288828901613a6d565b96999598509660600135949350505050565b60008060006060848603121561400957600080fd5b833561401481613c37565b9250602084013561402481613c37565b91506040840135613dac81613c37565b6000806040838503121561404757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115612b7757612b77614058565b8082028115828204841417612b7757612b77614058565b6000826140b557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b838152604060208201526000610902604083018486614107565b80516001600160601b038116811461416157600080fd5b919050565b8051801515811461416157600080fd5b600080600080600060a0868803121561418e57600080fd5b6141978661414a565b945060208601516141a781613c37565b6040870151909450600581106141bc57600080fd5b92506141ca60608701614166565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561420757600080fd5b610be782614166565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b60008060006060848603121561425c57600080fd5b8351925061426c60208501614166565b915061427a60408501614166565b90509250925092565b80820180821115612b7757612b77614058565b6000602082840312156142a857600080fd5b5051919050565b600181811c908216806142c357607f821691505b6020821081036142e357634e487b7160e01b600052602260045260246000fd5b50919050565b838152826020820152606060408201526000808354614307816142af565b8060608601526001821660008114614326576001811461434257614376565b60ff1983166080870152608082151560051b8701019350614376565b86600052602060002060005b8381101561436d5781548882016080015260019091019060200161434e565b87016080019450505b5091979650505050505050565b60008251614395818460208701613cfa565b9190910192915050565b600080600080600080600060e0888a0312156143ba57600080fd5b6143c38861414a565b96506143d160208901614166565b604089015160608a015160808b015160a08c01519399509197509550935091506143fd60c08901614166565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611b5157806000526020600020601f840160051c810160208510156144b85750805b601f840160051c820191505b818110156144d857600081556001016144c4565b5050505050565b6001600160401b038311156144f6576144f6613b3e565b61450a8361450483546142af565b83614491565b6000601f84116001811461453e57600085156145265750838201355b600019600387901b1c1916600186901b1783556144d8565b600083815260209020601f19861690835b8281101561456f578685013582556020948501946001909201910161454f565b508682101561458c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156145b057600080fd5b8151610be781613c37565b81835260006001600160fb1b038311156145d457600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006146016040830185876145bb565b9050826020830152949350505050565b6040815260006146256040830185876145bb565b82810360208401526146378185613d1e565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212204611969b7846b8f8df4dbeb55dc71bd009ee535c528de4a12223b6d97dbc9de164736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102465760003560e01c80636d4cd8ea11610139578063be467604116100b6578063e4c0aaf41161007a578063e4c0aaf41461075e578063f2f4eb261461077e578063f32ab9271461079e578063f7e7d1fd146107d3578063f8abee10146107f3578063fc6f8f161461082357600080fd5b8063be467604146106e8578063c0c53b8b146106fe578063d2b8035a1461071e578063da3beb8c1461073e578063e349ad30146105d057600080fd5b80638f06f112116100fd5780638f06f11214610626578063a7cc08fe14610646578063b34bfaa814610692578063b6ede540146106a8578063ba66fde7146106c857600080fd5b80636d4cd8ea14610590578063751accd0146105b0578063796490f9146105d05780637c04034e146105e65780638e4264601461060657600080fd5b80634b2f0ea0116101c75780635a155ccd1161018b5780635a155ccd146104955780635c92e2f6146104d657806365540b96146104f6578063675926f61461052357806369f3f0411461054357600080fd5b80634b2f0ea0146103ec5780634f1ef286146103ff57806352d1902d1461041257806354fd4d5014610427578063564a565d1461046657600080fd5b80631c3db16d1161020e5780631c3db16d146103355780631cc3423a146103725780632621b9a2146103925780632d68efc9146103ac578063362c3479146103cc57600080fd5b80630855bbe91461024b57806309cc41b8146102805780630baa64d1146102a25780630c340a24146102c25780631200aabc146102fa575b600080fd5b34801561025757600080fd5b5061026b610266366004613a09565b610843565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004613aae565b61090b565b005b3480156102ae57600080fd5b5061026b6102bd366004613a09565b6109c9565b3480156102ce57600080fd5b506000546102e2906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b34801561030657600080fd5b50610327610315366004613a09565b60036020526000908152604090205481565b604051908152602001610277565b34801561034157600080fd5b50610355610350366004613a09565b610a40565b604080519384529115156020840152151590820152606001610277565b34801561037e57600080fd5b5061032761038d366004613be8565b610bae565b34801561039e57600080fd5b5060045461026b9060ff1681565b3480156103b857600080fd5b506007546102e2906001600160a01b031681565b3480156103d857600080fd5b506103276103e7366004613c4c565b610bee565b6102a06103fa366004613c89565b61109e565b6102a061040d366004613cab565b61192e565b34801561041e57600080fd5b50610327611b56565b34801561043357600080fd5b50610459604051806040016040528060068152602001650302e31322e360d41b81525081565b6040516102779190613d4a565b34801561047257600080fd5b50610486610481366004613a09565b611bb4565b60405161027793929190613d5d565b3480156104a157600080fd5b5061026b6104b0366004613d7e565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b3480156104e257600080fd5b506102a06104f1366004613db7565b611c7a565b34801561050257600080fd5b50610516610511366004613a09565b611c86565b6040516102779190613e09565b34801561052f57600080fd5b5061032761053e366004613e4c565b611d4a565b34801561054f57600080fd5b5061056361055e366004613e87565b611e8d565b604080519687529415156020870152938501929092526060840152608083015260a082015260c001610277565b34801561059c57600080fd5b5061026b6105ab366004613a09565b611f45565b3480156105bc57600080fd5b506102a06105cb366004613eb3565b6120c8565b3480156105dc57600080fd5b5061032761271081565b3480156105f257600080fd5b506102a0610601366004613ef5565b612194565b34801561061257600080fd5b506102a0610621366004613f7d565b6121ab565b34801561063257600080fd5b506102a0610641366004613ef5565b6121f7565b34801561065257600080fd5b50610666610661366004613e87565b6122bd565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610277565b34801561069e57600080fd5b50610327614e2081565b3480156106b457600080fd5b506102a06106c3366004613f9a565b612383565b3480156106d457600080fd5b5061026b6106e3366004613e87565b612576565b3480156106f457600080fd5b5061032761138881565b34801561070a57600080fd5b506102a0610719366004613ff4565b612611565b34801561072a57600080fd5b506102e2610739366004613c89565b6126db565b34801561074a57600080fd5b50610327610759366004613c89565b612a2a565b34801561076a57600080fd5b506102a0610779366004613f7d565b612b7d565b34801561078a57600080fd5b506001546102e2906001600160a01b031681565b3480156107aa57600080fd5b506107be6107b9366004613c89565b612bc9565b60408051928352602083019190915201610277565b3480156107df57600080fd5b506102a06107ee366004613f7d565b612c1b565b3480156107ff57600080fd5b5061026b61080e366004613a09565b60066020526000908152604090205460ff1681565b34801561082f57600080fd5b5061032761083e366004613a09565b612ced565b60015460405163afe15cfb60e01b815260048101839052600091829182916001600160a01b03169063afe15cfb906024016040805180830381865afa158015610890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b49190614034565b9150915060006108c385611c86565b90508051600014801561090257506127106113886108e1858561406e565b6108eb9190614081565b6108f59190614098565b6108ff844261406e565b10155b95945050505050565b60008781526003602052604090205460028054899290811061092f5761092f6140ba565b600091825260209091206002600590920201015460ff161561096c5760405162461bcd60e51b8152600401610963906140d0565b60405180910390fd5b61097888888888612d19565b84336001600160a01b0316897fbc1efa6396a4ba1a755245703b38c48fbe744ab5117d9f09f47d26ffc1df999e8787876040516109b793929190614130565b60405180910390a45050505050505050565b6000818152600360205260408120546002805483929081106109ed576109ed6140ba565b60009182526020822060059091020180549092508290610a0f9060019061406e565b81548110610a1f57610a1f6140ba565b60009182526020909120600c90910201805460059091015414949350505050565b6000806000806002600360008781526020019081526020016000205481548110610a6c57610a6c6140ba565b60009182526020822060059091020180549092508290610a8e9060019061406e565b81548110610a9e57610a9e6140ba565b60009182526020909120600c90910201600381015460ff169450905083610ac9578060010154610acc565b60005b60015460405163564a565d60e01b8152600481018990529196506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3f9190614176565b5090935060049250610b4f915050565b816004811115610b6157610b616141df565b03610ba4576000610b7188611c86565b90508051600103610ba25780600081518110610b8f57610b8f6140ba565b6020026020010151965060009550600194505b505b5050509193909250565b80516020808301919091206040805180840187905280820186905260608082019390935281518082039093018352608001905280519101205b9392505050565b60015460405163564a565d60e01b81526004810186905260009182916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c609190614176565b50935050505080610cb35760405162461bcd60e51b815260206004820152601b60248201527f446973707574652073686f756c64206265207265736f6c7665642e00000000006044820152606401610963565b600160009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a91906141f5565b15610d685760405162461bcd60e51b815260206004820152600e60248201526d10dbdc99481a5cc81c185d5cd95960921b6044820152606401610963565b60008681526006602052604090205460ff16610d965760405162461bcd60e51b815260040161096390614210565b600086815260036020526040812054600280549091908110610dba57610dba6140ba565b60009182526020808320888452600360059093020191820190526040822054815491935083918110610dee57610dee6140ba565b600091825260208220600154604051631c3db16d60e01b8152600481018d9052600c9390930290910193506001600160a01b031690631c3db16d90602401606060405180830381865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d9190614247565b5050600087815260078401602052604090205490915060ff16610eb7576001600160a01b038816600090815260088301602090815260408083208984529091529020549450610ffc565b808603610f2c576000868152600683016020526040902054610eda576000610f25565b600086815260068301602090815260408083205460098601546001600160a01b038d1685526008870184528285208b8652909352922054610f1b9190614081565b610f259190614098565b9450610ffc565b600081815260078301602052604090205460ff16610ffc5781600601600083600a01600181548110610f6057610f606140ba565b906000526020600020015481526020019081526020016000205482600601600084600a01600081548110610f9657610f966140ba565b9060005260206000200154815260200190815260200160002054610fba9190614283565b60098301546001600160a01b038a16600090815260088501602090815260408083208b8452909152902054610fef9190614081565b610ff99190614098565b94505b6001600160a01b03881660009081526008830160209081526040808320898452909152812055841561109257600754611043906001600160a01b038a81169188911661307c565b876001600160a01b0316878a7f54b3cab3cb5c4aca3209db1151caff092e878011202e43a36782d4ebe0b963ae8989604051611089929190918252602082015260400190565b60405180910390a45b50505050949350505050565b6000828152600360205260409020546002805484929081106110c2576110c26140ba565b600091825260209091206002600590920201015460ff16156110f65760405162461bcd60e51b8152600401610963906140d0565b60008381526003602052604081205460028054909190811061111a5761111a6140ba565b90600052602060002090600502019050806001015483111561117e5760405162461bcd60e51b815260206004820181905260248201527f5468657265206973206e6f20737563682072756c696e6720746f2066756e642e6044820152606401610963565b60008481526006602052604090205460ff166111ac5760405162461bcd60e51b815260040161096390614210565b60015460405163afe15cfb60e01b81526004810186905260009182916001600160a01b039091169063afe15cfb906024016040805180830381865afa1580156111f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121d9190614034565b9150915081421015801561123057508042105b6112755760405162461bcd60e51b815260206004820152601660248201527520b83832b0b6103832b934b7b21034b99037bb32b91760511b6044820152606401610963565b604051631c3db16d60e01b81526004810187905260009081903090631c3db16d90602401606060405180830381865afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190614247565b505090508681036112ef576127109150611370565b6127106113886112ff868661406e565b6113099190614081565b6113139190614098565b61131d854261406e565b1061136a5760405162461bcd60e51b815260206004820152601f60248201527f41707065616c20706572696f64206973206f76657220666f72206c6f736572006044820152606401610963565b614e2091505b845460009086906113839060019061406e565b81548110611393576113936140ba565b60009182526020822060018054604051637e37c78b60e11b8152600481018f9052600c949094029092019450916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa1580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114169190614296565b611420919061406e565b60008a815260078401602052604090205490915060ff16156114845760405162461bcd60e51b815260206004820152601b60248201527f41707065616c2066656520697320616c726561647920706169642e00000000006044820152606401610963565b600154604051632cf6413f60e11b8152600481018c90526000916001600160a01b0316906359ec827e90602401602060405180830381865afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f29190614296565b905060006127106115038784614081565b61150d9190614098565b6115179083614283565b60008c8152600686016020526040812054919250908211156115c85760008c81526006860160205260409020543490611550908461406e565b116115755760008c8152600686016020526040902054611570908361406e565b611577565b345b9050336001600160a01b0316848e7fcae597f39a3ad75c2e10d46b031f023c5c2babcd58ca0491b122acda3968d4c08f856040516115bf929190918252602082015260400190565b60405180910390a45b33600090815260088601602090815260408083208f8452909152812080548392906115f4908490614283565b909155505060008c815260068601602052604081208054839290611619908490614283565b909155505060008c815260068601602052604090205482116116eb5760008c81526006860160205260408120546009870180549192909161165b908490614283565b9250508190555084600a018c908060018154018082558091505060019003906000526020600020016000909190919091505560018560070160008e815260200190815260200160002060006101000a81548160ff0219169083151502179055508b848e7fed764996238e4c1c873ae3af7ae2f00f1f6f4f10b9ac7d4bbea4a764c5dea00960405160405180910390a45b600a850154600110156118f657828560090154611708919061406e565b60098601556001546040516319b8152960e01b8152600481018f90526001600160a01b03909116906319b8152990602401602060405180830381865afa158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177a91906141f5565b156117935760028a01805460ff19166001179055611876565b895460038b0160006117a6876001614283565b81526020019081526020016000208190555060008a6000016001816001815401808255809150500390600052602060002090600c02019050600160009054906101000a90046001600160a01b03166001600160a01b031663c71f42538f6040518263ffffffff1660e01b815260040161182191815260200190565b602060405180830381865afa15801561183e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118629190614296565b600b820155600301805460ff191660011790555b600160009054906101000a90046001600160a01b03166001600160a01b031663c3569902848f8d600101548e6004016040518563ffffffff1660e01b81526004016118c3939291906142e9565b6000604051808303818588803b1580156118dc57600080fd5b505af11580156118f0573d6000803e3d6000fd5b50505050505b8034111561191f5761191f61190b823461406e565b6007543391906001600160a01b031661307c565b50505050505050505050505050565b61193782613167565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119b557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119a96000805160206146428339815191525490565b6001600160a01b031614155b156119d35760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a2d575060408051601f3d908101601f19168201909252611a2a91810190614296565b60015b611a5557604051630c76093760e01b81526001600160a01b0383166004820152602401610963565b6000805160206146428339815191528114611a8657604051632a87526960e21b815260048101829052602401610963565b6000805160206146428339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611b51576000836001600160a01b031683604051611aed9190614383565b600060405180830381855af49150503d8060008114611b28576040519150601f19603f3d011682016040523d82523d6000602084013e611b2d565b606091505b5050905080611b4f576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ba15760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061464283398151915290565b60028181548110611bc457600080fd5b600091825260209091206005909102016001810154600282015460048301805492945060ff9091169291611bf7906142af565b80601f0160208091040260200160405190810160405280929190818152602001828054611c23906142af565b8015611c705780601f10611c4557610100808354040283529160200191611c70565b820191906000526020600020905b815481529060010190602001808311611c5357829003601f168201915b5050505050905083565b611b4f84848484612d19565b6000818152600360205260408120546002805460609392908110611cac57611cac6140ba565b60009182526020822060059091020180549092508290611cce9060019061406e565b81548110611cde57611cde6140ba565b90600052602060002090600c0201905080600a01805480602002602001604051908101604052809291908181526020018280548015611d3c57602002820191906000526020600020905b815481526020019060010190808311611d28575b505050505092505050919050565b600085815260036020526040812054600280548392908110611d6e57611d6e6140ba565b60009182526020808320898452600360059093020191820190526040822054815491935083918110611da257611da26140ba565b90600052602060002090600c02016000018681548110611dc457611dc46140ba565b600091825260208220600154604051631c3db16d60e01b815260048082018e905293909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015611e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e469190614247565b506003850154919350915060ff168015611e6a57508183600201541480611e6a5750805b15611e7d57612710945050505050610902565b5060009998505050505050505050565b60008060008060008060006002600360008c81526020019081526020016000205481548110611ebe57611ebe6140ba565b600091825260208083208c8452600360059093020191820190526040822054815491935083918110611ef257611ef26140ba565b600091825260208083206001600c909302019182015460038301546004840154600585015485549f87526002909501909352604090942054909f60ff9094169e50909c50909a9950975095505050505050565b600081815260036020526040812054600280548392908110611f6957611f696140ba565b60009182526020822060059091020180549092508290611f8b9060019061406e565b81548110611f9b57611f9b6140ba565b60009182526020822060015460405163564a565d60e01b815260048101899052600c9390930290910193506001600160a01b03169063564a565d9060240160a060405180830381865afa158015611ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201a9190614176565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612099919061439f565b50505050509150506000816120af5783546120b5565b83600501545b6004909401549093149695505050505050565b6000546001600160a01b031633146120f25760405162461bcd60e51b81526004016109639061440b565b6000836001600160a01b0316838360405161210d9190614383565b60006040518083038185875af1925050503d806000811461214a576040519150601f19603f3d011682016040523d82523d6000602084013e61214f565b606091505b5050905080611b4f5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610963565b6121a386868686868633613194565b505050505050565b6000546001600160a01b031633146121d55760405162461bcd60e51b81526004016109639061440b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008681526003602052604081205460028054909190811061221b5761221b6140ba565b6000918252602082206005909102018054909250829061223d9060019061406e565b8154811061224d5761224d6140ba565b90600052602060002090600c020160000187876000818110612271576122716140ba565b9050602002013581548110612288576122886140ba565b60009182526020909120600490910201546001600160a01b031690506122b388888888888887613194565b5050505050505050565b60008060008060006002600360008a815260200190815260200160002054815481106122eb576122eb6140ba565b600091825260208083208a845260036005909302019182019052604082205481549193508391811061231f5761231f6140ba565b90600052602060002090600c02016000018781548110612341576123416140ba565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169c909b5091995060ff16975095505050505050565b6001546001600160a01b031633146123ad5760405162461bcd60e51b81526004016109639061444d565b60028054600181018255600091909152600581027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf81018690557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2016124388587836144df565b5060028101805460ff19169055805460018054604051637e37c78b60e11b8152600481018b9052600385019260009290916001600160a01b039091169063fc6f8f1690602401602060405180830381865afa15801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf9190614296565b6124c9919061406e565b81526020808201929092526040908101600090812093909355835460018082018655858552838520600c909202909101600b81018890556003808201805460ff1990811685179091558d87529085528386208890556006909452938290208054909316179091555188907fd3106f74c2d30a4b9230e756a3e78bde53865d40f6af4c479bb010ebaab5810890612564908a908a908a90614130565b60405180910390a25050505050505050565b60008381526003602052604081205460028054839290811061259a5761259a6140ba565b600091825260208083208784526003600590930201918201905260408220548154919350839181106125ce576125ce6140ba565b90600052602060002090600c020160000184815481106125f0576125f06140ba565b600091825260209091206004909102016003015460ff169695505050505050565b6001600061261d6138c5565b8054909150600160401b900460ff1680612644575080546001600160401b03808416911610155b156126615760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561268d8585856138e9565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001546000906001600160a01b031633146127085760405162461bcd60e51b81526004016109639061444d565b60008381526003602052604090205460028054859290811061272c5761272c6140ba565b600091825260209091206002600590920201015460ff16156127605760405162461bcd60e51b8152600401610963906140d0565b6000848152600360205260408120546002805491929183908110612786576127866140ba565b60009182526020822060059091020180549092506127a69060019061406e565b905060008260000182815481106127bf576127bf6140ba565b90600052602060002090600c020190506000600160009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612824573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612848919061459e565b60015460405163564a565d60e01b8152600481018c90529192506000916001600160a01b039091169063564a565d9060240160a060405180830381865afa158015612897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bb9190614176565b5050604051632638506b60e11b81526001600160601b03841660048201819052602482018f9052604482018e90529394506001600160a01b0386169250634c70a0d69150606401602060405180830381865afa15801561291f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612943919061459e565b98506001600160a01b03891661295f5750505050505050612a23565b61296a848c8b613930565b15612a1657604080516080810182526001600160a01b03808c1680835260006020808501828152858701838152606087018481528c5460018181018f558e8752858720995160049092029099018054919098166001600160a01b0319909116178755915186880155516002860155516003909401805494151560ff199586161790558c8252600581528582208b8352815285822092825291909152929092208054909216179055612a1b565b600098505b505050505050505b5092915050565b600082815260036020526040812054600280548392908110612a4e57612a4e6140ba565b60009182526020808320868452600360059093020191820190526040822054815491935083918110612a8257612a826140ba565b600091825260208220600154604051631c3db16d60e01b8152600481018a9052600c93909302909101935082916001600160a01b0390911690631c3db16d90602401606060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b059190614247565b5091509150826004015460001480612b34575080158015612b3457506000828152600284016020526040902054155b15612b46576000945050505050612b77565b8015612b5b575050600401549150612b779050565b506000908152600290910160205260409020549150612b779050565b92915050565b6000546001600160a01b03163314612ba75760405162461bcd60e51b81526004016109639061440b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546002805491929183908110612bef57612bef6140ba565b906000526020600020906005020160030160008481526020019081526020016000205490509250929050565b60096000612c276138c5565b8054909150600160401b900460ff1680612c4e575080546001600160401b03808416911610155b15612c6b5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600780546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600060028281548110612d0257612d026140ba565b600091825260209091206005909102015492915050565b600084815260036020526040902054600280548692908110612d3d57612d3d6140ba565b600091825260209091206002600590920201015460ff1615612d715760405162461bcd60e51b8152600401610963906140d0565b60015460405163564a565d60e01b8152600481018790526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015612dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddf9190614176565b5090935060019250612def915050565b816004811115612e0157612e016141df565b14612e5e5760405162461bcd60e51b815260206004820152602760248201527f54686520646973707574652073686f756c6420626520696e20436f6d6d6974206044820152663832b934b7b21760c91b6064820152608401610963565b82612e9b5760405162461bcd60e51b815260206004820152600d60248201526c22b6b83a3c9031b7b6b6b4ba1760991b6044820152606401610963565b60008681526006602052604090205460ff16612ec95760405162461bcd60e51b815260040161096390614210565b600086815260036020526040812054600280549091908110612eed57612eed6140ba565b60009182526020822060059091020180549092508290612f0f9060019061406e565b81548110612f1f57612f1f6140ba565b90600052602060002090600c0201905060005b86811015613015573382898984818110612f4e57612f4e6140ba565b9050602002013581548110612f6557612f656140ba565b60009182526020909120600490910201546001600160a01b031614612fcc5760405162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c65722068617320746f206f776e2074686520766f74652e006044820152606401610963565b8582898984818110612fe057612fe06140ba565b9050602002013581548110612ff757612ff76140ba565b60009182526020909120600160049092020181019190915501612f32565b508686905081600501600082825461302d9190614283565b9091555050604051339089907f05cc2f1c94966f1c961b410a50f3d3ffb64501346753a258177097ea23707f089061306a908b908b908b906145ed565b60405180910390a35050505050505050565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050156130ab57505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130e657600080fd5b505af11580156130fa573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038781166004830152602482018790528516935063a9059cbb92506044019050600060405180830381600087803b15801561314a57600080fd5b505af115801561315e573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146131915760405162461bcd60e51b81526004016109639061440b565b50565b6000878152600360205260409020546002805489929081106131b8576131b86140ba565b600091825260209091206002600590920201015460ff16156131ec5760405162461bcd60e51b8152600401610963906140d0565b60015460405163564a565d60e01b8152600481018a90526000916001600160a01b03169063564a565d9060240160a060405180830381865afa158015613236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325a9190614176565b509093506002925061326a915050565b81600481111561327c5761327c6141df565b146132d75760405162461bcd60e51b815260206004820152602560248201527f54686520646973707574652073686f756c6420626520696e20566f74652070656044820152643934b7b21760d91b6064820152608401610963565b866133195760405162461bcd60e51b8152602060048201526012602482015271139bc81d9bdd195251081c1c9bdd9a59195960721b6044820152606401610963565b60008981526006602052604090205460ff166133475760405162461bcd60e51b815260040161096390614210565b60008981526003602052604081205460028054909190811061336b5761336b6140ba565b9060005260206000209060050201905080600101548711156133c65760405162461bcd60e51b815260206004820152601460248201527343686f696365206f7574206f6620626f756e647360601b6044820152606401610963565b805460009082906133d99060019061406e565b815481106133e9576133e96140ba565b60009182526020822060015460405163564a565d60e01b8152600c90930290910193506001600160a01b03169063564a565d9061342e908f9060040190815260200190565b60a060405180830381865afa15801561344b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346f9190614176565b5050600154604051630fad06e960e11b81526001600160601b03851660048201529394506000936001600160a01b039091169250631f5a0dd2915060240160e060405180830381865afa1580156134ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ee919061439f565b505050505091505060006135038b8b8b610bae565b905060005b8c81101561378a576001600160a01b038916858f8f8481811061352d5761352d6140ba565b9050602002013581548110613544576135446140ba565b60009182526020909120600490910201546001600160a01b0316146135ab5760405162461bcd60e51b815260206004820152601e60248201527f546865206a75726f722068617320746f206f776e2074686520766f74652e00006044820152606401610963565b8215806135f2575081858f8f848181106135c7576135c76140ba565b90506020020135815481106135de576135de6140ba565b906000526020600020906004020160010154145b6136725760405162461bcd60e51b8152602060048201526044602482018190527f54686520766f74652068617368206d757374206d617463682074686520636f6d908201527f6d69746d656e7420696e20636f7572747320776974682068696464656e20766f6064820152633a32b99760e11b608482015260a401610963565b848e8e83818110613685576136856140ba565b905060200201358154811061369c5761369c6140ba565b600091825260209091206003600490920201015460ff16156136f55760405162461bcd60e51b81526020600482015260126024820152712b37ba329030b63932b0b23c9031b0b9ba1760711b6044820152606401610963565b8b858f8f84818110613709576137096140ba565b9050602002013581548110613720576137206140ba565b60009182526020909120600260049092020101556001858f8f84818110613749576137496140ba565b9050602002013581548110613760576137606140ba565b60009182526020909120600490910201600301805460ff1916911515919091179055600101613508565b5050506004820180548b92506000906137a4908490614283565b90915550506000888152600282016020526040812080548b92906137c9908490614283565b9091555050600181015488036137f857600381015460ff16156137f35760038101805460ff191690555b613871565b60018101546000908152600282016020526040808220548a83529120540361383a57600381015460ff166137f35760038101805460ff19166001179055613871565b60018101546000908152600282016020526040808220548a83529120541115613871576001810188905560038101805460ff191690555b87856001600160a01b03168c7fa000893c71384499023d2d7b21234f7b9e80c78e0330f357dcd667ff578bd3a48d8d8b6040516138b093929190614611565b60405180910390a45050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6138f16139c8565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560078054919093169116179055565b60045460009060ff16156139be576000838152600360205260408120546002805491929183908110613964576139646140ba565b60009182526020822060059091020180549092506139849060019061406e565b60009384526005602090815260408086209286529181528185206001600160a01b038816865290529092205460ff16159250610be7915050565b5060019392505050565b6139d06139ef565b6139ed57604051631afcd79f60e31b815260040160405180910390fd5b565b60006139f96138c5565b54600160401b900460ff16919050565b600060208284031215613a1b57600080fd5b5035919050565b60008083601f840112613a3457600080fd5b5081356001600160401b03811115613a4b57600080fd5b6020830191508360208260051b8501011115613a6657600080fd5b9250929050565b60008083601f840112613a7f57600080fd5b5081356001600160401b03811115613a9657600080fd5b602083019150836020828501011115613a6657600080fd5b600080600080600080600060a0888a031215613ac957600080fd5b8735965060208801356001600160401b03811115613ae657600080fd5b613af28a828b01613a22565b909750955050604088013593506060880135925060808801356001600160401b03811115613b1f57600080fd5b613b2b8a828b01613a6d565b989b979a50959850939692959293505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613b6557600080fd5b8135602083016000806001600160401b03841115613b8557613b85613b3e565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613bb357613bb3613b3e565b604052838152905080828401871015613bcb57600080fd5b838360208301376000602085830101528094505050505092915050565b600080600060608486031215613bfd57600080fd5b833592506020840135915060408401356001600160401b03811115613c2157600080fd5b613c2d86828701613b54565b9150509250925092565b6001600160a01b038116811461319157600080fd5b60008060008060808587031215613c6257600080fd5b843593506020850135613c7481613c37565b93969395505050506040820135916060013590565b60008060408385031215613c9c57600080fd5b50508035926020909101359150565b60008060408385031215613cbe57600080fd5b8235613cc981613c37565b915060208301356001600160401b03811115613ce457600080fd5b613cf085828601613b54565b9150509250929050565b60005b83811015613d15578181015183820152602001613cfd565b50506000910152565b60008151808452613d36816020860160208601613cfa565b601f01601f19169290920160200192915050565b602081526000610be76020830184613d1e565b83815282151560208201526060604082015260006109026060830184613d1e565b600080600060608486031215613d9357600080fd5b83359250602084013591506040840135613dac81613c37565b809150509250925092565b60008060008060608587031215613dcd57600080fd5b8435935060208501356001600160401b03811115613dea57600080fd5b613df687828801613a22565b9598909750949560400135949350505050565b602080825282518282018190526000918401906040840190835b81811015613e41578351835260209384019390920191600101613e23565b509095945050505050565b600080600080600060a08688031215613e6457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600060608486031215613e9c57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613ec857600080fd5b8335613ed381613c37565b92506020840135915060408401356001600160401b03811115613c2157600080fd5b60008060008060008060a08789031215613f0e57600080fd5b8635955060208701356001600160401b03811115613f2b57600080fd5b613f3789828a01613a22565b909650945050604087013592506060870135915060808701356001600160401b03811115613f6457600080fd5b613f7089828a01613b54565b9150509295509295509295565b600060208284031215613f8f57600080fd5b8135610be781613c37565b600080600080600060808688031215613fb257600080fd5b853594506020860135935060408601356001600160401b03811115613fd657600080fd5b613fe288828901613a6d565b96999598509660600135949350505050565b60008060006060848603121561400957600080fd5b833561401481613c37565b9250602084013561402481613c37565b91506040840135613dac81613c37565b6000806040838503121561404757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b81810381811115612b7757612b77614058565b8082028115828204841417612b7757612b77614058565b6000826140b557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6020808252601e908201527f44697370757465206a756d70656420746f206120706172656e7420444b210000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b838152604060208201526000610902604083018486614107565b80516001600160601b038116811461416157600080fd5b919050565b8051801515811461416157600080fd5b600080600080600060a0868803121561418e57600080fd5b6141978661414a565b945060208601516141a781613c37565b6040870151909450600581106141bc57600080fd5b92506141ca60608701614166565b60809690960151949793965091949392915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561420757600080fd5b610be782614166565b6020808252601e908201527f4e6f742061637469766520666f7220636f726520646973707574652049440000604082015260600190565b60008060006060848603121561425c57600080fd5b8351925061426c60208501614166565b915061427a60408501614166565b90509250925092565b80820180821115612b7757612b77614058565b6000602082840312156142a857600080fd5b5051919050565b600181811c908216806142c357607f821691505b6020821081036142e357634e487b7160e01b600052602260045260246000fd5b50919050565b838152826020820152606060408201526000808354614307816142af565b8060608601526001821660008114614326576001811461434257614376565b60ff1983166080870152608082151560051b8701019350614376565b86600052602060002060005b8381101561436d5781548882016080015260019091019060200161434e565b87016080019450505b5091979650505050505050565b60008251614395818460208701613cfa565b9190910192915050565b600080600080600080600060e0888a0312156143ba57600080fd5b6143c38861414a565b96506143d160208901614166565b604089015160608a015160808b015160a08c01519399509197509550935091506143fd60c08901614166565b905092959891949750929550565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b601f821115611b5157806000526020600020601f840160051c810160208510156144b85750805b601f840160051c820191505b818110156144d857600081556001016144c4565b5050505050565b6001600160401b038311156144f6576144f6613b3e565b61450a8361450483546142af565b83614491565b6000601f84116001811461453e57600085156145265750838201355b600019600387901b1c1916600186901b1783556144d8565b600083815260209020601f19861690835b8281101561456f578685013582556020948501946001909201910161454f565b508682101561458c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156145b057600080fd5b8151610be781613c37565b81835260006001600160fb1b038311156145d457600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006146016040830185876145bb565b9050826020830152949350505050565b6040815260006146256040830185876145bb565b82810360208401526146378185613d1e565b969550505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212204611969b7846b8f8df4dbeb55dc71bd009ee535c528de4a12223b6d97dbc9de164736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "ChoiceFunded(uint256,uint256,uint256)": { - "details": "To be emitted when a choice is fully funded for an appeal.", - "params": { - "_choice": "The choice that is being funded.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "CommitCast(uint256,address,uint256[],bytes32)": { - "details": "To be emitted when a vote commitment is cast.", - "params": { - "_commit": "The commitment of the juror.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "The address of the juror casting the vote commitment.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "CommitCastShutter(uint256,address,bytes32,bytes32,bytes)": { - "details": "Emitted when a vote is cast.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_encryptedVote": "The Shutter encrypted vote.", - "_identity": "The Shutter identity used for encryption.", - "_juror": "The address of the juror casting the vote commitment." - } - }, - "Contribution(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when a funding contribution is made.", - "params": { - "_amount": "The amount contributed.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - }, - "DisputeCreation(uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_extraData": "The extra data for the dispute.", - "_numberOfChoices": "The number of choices available in the dispute." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - }, - "VoteCast(uint256,address,uint256[],uint256,string)": { - "details": "Emitted when casting a vote to provide the justification of juror's choice.", - "params": { - "_choice": "The choice juror voted for.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_juror": "Address of the juror.", - "_justification": "Justification of the choice.", - "_voteIDs": "The identifiers of the votes in the dispute." - } - }, - "Withdrawal(uint256,uint256,uint256,address,uint256)": { - "details": "To be emitted when the contributed funds are withdrawn.", - "params": { - "_amount": "The amount withdrawn.", - "_choice": "The choice that is being funded.", - "_contributor": "The address of the contributor.", - "_coreDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_coreRoundID": "The identifier of the round in the Arbitrator contract." - } - } - }, - "kind": "dev", - "methods": { - "areCommitsAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their commits for the last round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their commits for the last round." - } - }, - "areVotesAllCast(uint256)": { - "details": "Returns true if all of the jurors have cast their votes for the last round. Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "_0": "Whether all of the jurors have cast their votes for the last round." - } - }, - "castCommit(uint256,uint256[],bytes32)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_voteIDs": "The IDs of the votes." - } - }, - "castCommitShutter(uint256,uint256[],bytes32,bytes32,bytes)": { - "details": "Sets the caller's commit for the specified votes. It can be called multiple times during the commit period, each call overrides the commits of the previous one. `O(n)` where `n` is the number of votes.", - "params": { - "_commit": "The commitment hash including the justification.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_encryptedVote": "The Shutter encrypted vote.", - "_identity": "The Shutter identity used for encryption.", - "_voteIDs": "The IDs of the votes." - } - }, - "castVote(uint256,uint256[],uint256,uint256,string)": { - "details": "Sets the caller's choices for the specified votes. `O(n)` where `n` is the number of votes.", - "params": { - "_choice": "The choice.", - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_justification": "Justification of the choice.", - "_salt": "The salt for the commit if the votes were hidden.", - "_voteIDs": "The IDs of the votes." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createDispute(uint256,uint256,bytes,uint256)": { - "details": "Creates a local dispute and maps it to the dispute ID in the Core contract. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_extraData": "Additional info about the dispute, for possible use in future dispute kits.", - "_nbVotes": "Number of votes for this dispute.", - "_numberOfChoices": "Number of choices of the dispute" - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. Note: Access restricted to Kleros Core only.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_nonce": "Nonce of the drawing iteration." - }, - "returns": { - "drawnAddress": "The drawn address." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "fundAppeal(uint256,uint256)": { - "details": "Manages contributions, and appeals a dispute if at least two choices are fully funded. Note that the surplus deposit will be reimbursed.", - "params": { - "_choice": "A choice that receives funding.", - "_coreDisputeID": "Index of the dispute in Kleros Core." - } - }, - "getCoherentCount(uint256,uint256)": { - "details": "Gets the number of jurors who are eligible to a reward in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "The number of coherent jurors." - } - }, - "getDegreeOfCoherence(uint256,uint256,uint256,uint256,uint256)": { - "details": "Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the vote." - }, - "returns": { - "_0": "The degree of coherence in basis points." - } - }, - "getLocalDisputeRoundID(uint256,uint256)": { - "details": "Returns the local dispute ID and round ID for a given core dispute ID and core round ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core." - }, - "returns": { - "localDisputeID": "The ID of the dispute in the Dispute Kit.", - "localRoundID": "The ID of the round in the Dispute Kit." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Returns the number of rounds in a dispute.", - "params": { - "_localDisputeID": "The ID of the dispute in the Dispute Kit." - }, - "returns": { - "_0": "The number of rounds in the dispute." - } - }, - "getVoteInfo(uint256,uint256,uint256)": { - "details": "Returns the vote information for a given vote ID.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core.", - "_coreRoundID": "The ID of the round in Kleros Core.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The address of the juror who cast the vote.", - "commit": "The commit of the vote." - } - }, - "hashVote(uint256,uint256,string)": { - "details": "Computes the hash of a vote using ABI encoding", - "params": { - "_choice": "The choice being voted for", - "_justification": "The justification for the vote", - "_salt": "A random salt for commitment" - }, - "returns": { - "_0": "bytes32 The hash of the encoded vote parameters" - } - }, - "initialize(address,address,address)": { - "details": "Initializer.", - "params": { - "_core": "The KlerosCore arbitrator.", - "_governor": "The governor's address.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isAppealFunded(uint256)": { - "details": "Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). Note that this function is to be called directly by the core contract and is not for off-chain usage.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit." - }, - "returns": { - "_0": "Whether the appeal funding is finished." - } - }, - "isVoteActive(uint256,uint256,uint256)": { - "details": "Returns true if the specified voter was active in this round.", - "params": { - "_coreDisputeID": "The ID of the dispute in Kleros Core, not in the Dispute Kit.", - "_coreRoundID": "The ID of the round in Kleros Core, not in the Dispute Kit.", - "_voteID": "The ID of the voter." - }, - "returns": { - "_0": "Whether the voter was active or not." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFeesAndRewards(uint256,address,uint256,uint256)": { - "details": "Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. Note that withdrawals are not possible if the core contract is paused.", - "params": { - "_beneficiary": "The address whose rewards to withdraw.", - "_choice": "The ruling option that the caller wants to withdraw from.", - "_coreDisputeID": "Index of the dispute in Kleros Core contract.", - "_coreRoundID": "The round in the Kleros Core contract the caller wants to withdraw from." - }, - "returns": { - "amount": "The withdrawn amount." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "DisputeKitShutter Added functionality: shielded voting. Dispute kit implementation of the Kleros v1 features including: - a drawing system: proportional to staked PNK, - a vote aggregation system: plurality, - an incentive system: equal split between coherent votes, - an appeal system: fund 2 choices only, vote on any choice.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 6613, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6616, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)303" - }, - { - "astId": 6620, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "disputes", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Dispute)6552_storage)dyn_storage" - }, - { - "astId": 6624, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "coreDisputeIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6626, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "singleDrawPerJuror", - "offset": 0, - "slot": "4", - "type": "t_bool" - }, - { - "astId": 6634, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "alreadyDrawn", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))" - }, - { - "astId": 6638, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "coreDisputeIDToActive", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6640, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "wNative", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Dispute)6552_storage)dyn_storage": { - "base": "t_struct(Dispute)6552_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)6590_storage)dyn_storage": { - "base": "t_struct(Round)6590_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)6599_storage)dyn_storage": { - "base": "t_struct(Vote)6599_storage", - "encoding": "dynamic_array", - "label": "struct DisputeKitClassicBase.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)303": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint256 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_uint256)" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_address,t_bool)))": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => mapping(uint256 => mapping(address => bool)))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Dispute)6552_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Dispute", - "members": [ - { - "astId": 6541, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "rounds", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Round)6590_storage)dyn_storage" - }, - { - "astId": 6543, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6545, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "jumped", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 6549, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "coreRoundIDToLocal", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6551, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "extraData", - "offset": 0, - "slot": "4", - "type": "t_bytes_storage" - } - ], - "numberOfBytes": "160" - }, - "t_struct(Round)6590_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Round", - "members": [ - { - "astId": 6556, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "votes", - "offset": 0, - "slot": "0", - "type": "t_array(t_struct(Vote)6599_storage)dyn_storage" - }, - { - "astId": 6558, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "winningChoice", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 6562, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "counts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6564, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "tied", - "offset": 0, - "slot": "3", - "type": "t_bool" - }, - { - "astId": 6566, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "totalVoted", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 6568, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "totalCommitted", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 6572, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "paidFees", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 6576, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "hasPaid", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 6582, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "contributions", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" - }, - { - "astId": 6584, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "feeRewards", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 6587, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "fundedChoices", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 6589, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "nbVotes", - "offset": 0, - "slot": "11", - "type": "t_uint256" - } - ], - "numberOfBytes": "384" - }, - "t_struct(Vote)6599_storage": { - "encoding": "inplace", - "label": "struct DisputeKitClassicBase.Vote", - "members": [ - { - "astId": 6592, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6594, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 6596, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 6598, - "contract": "src/arbitration/dispute-kits/DisputeKitShutter.sol:DisputeKitShutter", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter_Proxy.json deleted file mode 100644 index 3271ca119..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0xfE0a958bc744Bb9E224E1822625B53134ac5CB69", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x5d878ce4b9aa09064029160c890e1c6b7637303ec053fe0defaf597f14161b9d", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xfE0a958bc744Bb9E224E1822625B53134ac5CB69", - "transactionIndex": 2, - "gasUsed": "198466", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000800000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xe27c44922389c9aca10217b21c6ba52520b90df7d24018af2f897437f2938955", - "transactionHash": "0x5d878ce4b9aa09064029160c890e1c6b7637303ec053fe0defaf597f14161b9d", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 175286126, - "transactionHash": "0x5d878ce4b9aa09064029160c890e1c6b7637303ec053fe0defaf597f14161b9d", - "address": "0xfE0a958bc744Bb9E224E1822625B53134ac5CB69", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 4, - "blockHash": "0xe27c44922389c9aca10217b21c6ba52520b90df7d24018af2f897437f2938955" - } - ], - "blockNumber": 175286126, - "cumulativeGasUsed": "372592", - "status": 1, - "byzantium": true - }, - "args": [ - "0x036d321AfD9Ca457Be9E523736bc9FbB79FA7efc", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000001bd44c4a4511dbfa7dc1d5bc201635596e7200f9" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeKitShutterProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220b9dc2002a96470cf50e49e7a537fe7864644f7b84f7c205df33e04752d2c158364736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220b9dc2002a96470cf50e49e7a537fe7864644f7b84f7c205df33e04752d2c158364736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeResolver.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeResolver.json deleted file mode 100644 index af5ad5101..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeResolver.json +++ /dev/null @@ -1,522 +0,0 @@ -{ - "address": "0x71f8537e925C753Fe88DA7e69Ae423f9f3a9A292", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateUri", - "type": "string" - } - ], - "name": "DisputeRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "arbitratorDisputeIDToLocalID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - } - ], - "name": "changeArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "name": "changeTemplateRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplate", - "type": "string" - }, - { - "internalType": "string", - "name": "_disputeTemplateDataMappings", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplateUri", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplateUri", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "bytes", - "name": "arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "isRuled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numberOfRulingOptions", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templateRegistry", - "outputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x35d59c9b3f6f86c50bac87b5dad5ec9c9783a3b8aaa56cddfa34c47e848905f4", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x71f8537e925C753Fe88DA7e69Ae423f9f3a9A292", - "transactionIndex": 5, - "gasUsed": "903526", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xb521335b95e38a6a911f6b7b1db532bed0e176d27dba028e36f73451505641a9", - "transactionHash": "0x35d59c9b3f6f86c50bac87b5dad5ec9c9783a3b8aaa56cddfa34c47e848905f4", - "logs": [], - "blockNumber": 175286175, - "cumulativeGasUsed": "3048815", - "status": 1, - "byzantium": true - }, - "args": [ - "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateUri\",\"type\":\"string\"}],\"name\":\"DisputeRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"arbitratorDisputeIDToLocalID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"}],\"name\":\"changeArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplate\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateDataMappings\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateUri\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplateUri\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isRuled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRulingOptions\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DisputeRequest(address,uint256,uint256,uint256,string)\":{\"details\":\"To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\",\"params\":{\"_arbitrator\":\"The arbitrator of the contract.\",\"_arbitratorDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_externalDisputeID\":\"An identifier created outside Kleros by the protocol requesting arbitration.\",\"_templateId\":\"The identifier of the dispute template. Should not be used with _templateUri.\",\"_templateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrator\":\"The arbitrator giving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor.\",\"params\":{\"_governor\":\"The address of the new governor.\"}},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_arbitrator\":\"Target global arbitrator for any disputes.\"}},\"createDisputeForTemplate(bytes,string,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplate\":\"Dispute template.\",\"_disputeTemplateDataMappings\":\"The data mappings.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"createDisputeForTemplateUri(bytes,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"rule(uint256,uint256)\":{\"details\":\"To be called by the arbitrator of the dispute, to declare the winning ruling.\",\"params\":{\"_arbitratorDisputeID\":\"ID of the dispute in arbitrator contract.\",\"_ruling\":\"The ruling choice of the arbitration.\"}}},\"title\":\"DisputeResolver DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/arbitrables/DisputeResolver.sol\":\"DisputeResolver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/arbitrables/DisputeResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitrableV2.sol\\\";\\nimport \\\"../interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\npragma solidity ^0.8.24;\\n\\n/// @title DisputeResolver\\n/// DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\\ncontract DisputeResolver is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeStruct {\\n bytes arbitratorExtraData; // Extra data for the dispute.\\n bool isRuled; // True if the dispute has been ruled.\\n uint256 ruling; // Ruling given to the dispute.\\n uint256 numberOfRulingOptions; // The number of choices the arbitrator can give.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor.\\n IArbitratorV2 public arbitrator; // The arbitrator.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n DisputeStruct[] public disputes; // Local disputes.\\n mapping(uint256 => uint256) public arbitratorDisputeIDToLocalID; // Maps arbitrator-side dispute IDs to local dispute IDs.\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator Target global arbitrator for any disputes.\\n constructor(IArbitratorV2 _arbitrator, IDisputeTemplateRegistry _templateRegistry) {\\n governor = msg.sender;\\n arbitrator = _arbitrator;\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n governor = _governor;\\n }\\n\\n function changeArbitrator(IArbitratorV2 _arbitrator) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n arbitrator = _arbitrator;\\n }\\n\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplate Dispute template.\\n /// @param _disputeTemplateDataMappings The data mappings.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplate(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return\\n _createDispute(\\n _arbitratorExtraData,\\n _disputeTemplate,\\n _disputeTemplateDataMappings,\\n \\\"\\\",\\n _numberOfRulingOptions\\n );\\n }\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplateUri(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return _createDispute(_arbitratorExtraData, \\\"\\\", \\\"\\\", _disputeTemplateUri, _numberOfRulingOptions);\\n }\\n\\n /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling.\\n /// @param _arbitratorDisputeID ID of the dispute in arbitrator contract.\\n /// @param _ruling The ruling choice of the arbitration.\\n function rule(uint256 _arbitratorDisputeID, uint256 _ruling) external override {\\n uint256 localDisputeID = arbitratorDisputeIDToLocalID[_arbitratorDisputeID];\\n DisputeStruct storage dispute = disputes[localDisputeID];\\n require(msg.sender == address(arbitrator), \\\"Only the arbitrator can execute this.\\\");\\n require(_ruling <= dispute.numberOfRulingOptions, \\\"Invalid ruling.\\\");\\n require(!dispute.isRuled, \\\"This dispute has been ruled already.\\\");\\n\\n dispute.isRuled = true;\\n dispute.ruling = _ruling;\\n\\n emit Ruling(IArbitratorV2(msg.sender), _arbitratorDisputeID, dispute.ruling);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n function _createDispute(\\n bytes calldata _arbitratorExtraData,\\n string memory _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n string memory _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) internal virtual returns (uint256 arbitratorDisputeID) {\\n require(_numberOfRulingOptions > 1, \\\"Should be at least 2 ruling options.\\\");\\n\\n arbitratorDisputeID = arbitrator.createDispute{value: msg.value}(_numberOfRulingOptions, _arbitratorExtraData);\\n uint256 localDisputeID = disputes.length;\\n disputes.push(\\n DisputeStruct({\\n arbitratorExtraData: _arbitratorExtraData,\\n isRuled: false,\\n ruling: 0,\\n numberOfRulingOptions: _numberOfRulingOptions\\n })\\n );\\n arbitratorDisputeIDToLocalID[arbitratorDisputeID] = localDisputeID;\\n uint256 templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _disputeTemplate, _disputeTemplateDataMappings);\\n emit DisputeRequest(arbitrator, arbitratorDisputeID, localDisputeID, templateId, _disputeTemplateUri);\\n }\\n}\\n\",\"keccak256\":\"0xbc262a895c231a24dca6c8da7d865eab29c84299e049e80d66226f891553e9d7\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0xd8122941175d1d5c2983e71717a2fdcc6fe94aa9de08f87eb7c44e3a5f1c2030\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6080604052348015600f57600080fd5b50604051610edf380380610edf833981016040819052602c91607e565b600080546001600160a01b03199081163317909155600180546001600160a01b039485169083161790556002805492909316911617905560b3565b6001600160a01b0381168114607b57600080fd5b50565b60008060408385031215609057600080fd5b82516099816067565b602084015190925060a8816067565b809150509250929050565b610e1d806100c26000396000f3fe60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108bb565b610231565b005b34801561010c57600080fd5b506100fe61011b3660046108f5565b6103d1565b34801561012c57600080fd5b5061014061013b366004610919565b61041d565b6040516100d59493929190610978565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109ef565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a7c565b61055a565b3480156101d057600080fd5b506101836101df366004610919565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c3660046108f5565b6105b9565b34801561021d57600080fd5b506100fe61022c3660046108f5565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b9e565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610bb4565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610bf6565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610bf6565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610bb4565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610bb4565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906106e59086908c908c90600401610c30565b60206040518083038185885af1158015610703573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107289190610c66565b600380546040805160a06020601f8d018190040282018101909252608081018b8152949550919382918c908c90819085018382808284376000920182905250938552505050602080830182905260408301829052606090920187905283546001810185559381522081519192600402019081906107a59082610cce565b5060208281015160018301805460ff19169115159190911790556040808401516002808501919091556060909401516003909301929092556000858152600491829052828120859055925491516312a6505d60e21b81526001600160a01b0390921691634a9941749161081c918b918b9101610d8c565b6020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190610c66565b60015460405191925084916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186906108a790869086908b90610dc8565b60405180910390a350509695505050505050565b600080604083850312156108ce57600080fd5b50508035926020909101359150565b6001600160a01b03811681146108f257600080fd5b50565b60006020828403121561090757600080fd5b8135610912816108dd565b9392505050565b60006020828403121561092b57600080fd5b5035919050565b6000815180845260005b818110156109585760208185018101518683018201520161093c565b506000602082860101526020601f19601f83011685010191505092915050565b60808152600061098b6080830187610932565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109b957600080fd5b5081356001600160401b038111156109d057600080fd5b6020830191508360208285010111156109e857600080fd5b9250929050565b600080600080600060608688031215610a0757600080fd5b85356001600160401b03811115610a1d57600080fd5b610a29888289016109a7565b90965094505060208601356001600160401b03811115610a4857600080fd5b610a54888289016109a7565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610a9557600080fd5b86356001600160401b03811115610aab57600080fd5b610ab789828a016109a7565b90975095505060208701356001600160401b03811115610ad657600080fd5b610ae289828a016109a7565b90955093505060408701356001600160401b03811115610b0157600080fd5b8701601f81018913610b1257600080fd5b80356001600160401b03811115610b2b57610b2b610a66565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610b5957610b59610a66565b6040528181528282016020018b1015610b7157600080fd5b81602084016020830137600091810160200191909152969995985093969295946060939093013593505050565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610c0a57607f821691505b602082108103610c2a57634e487b7160e01b600052602260045260246000fd5b50919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215610c7857600080fd5b5051919050565b601f821115610cc957806000526020600020601f840160051c81016020851015610ca65750805b601f840160051c820191505b81811015610cc65760008155600101610cb2565b50505b505050565b81516001600160401b03811115610ce757610ce7610a66565b610cfb81610cf58454610bf6565b84610c7f565b6020601f821160018114610d2f5760008315610d175750848201515b600019600385901b1c1916600184901b178455610cc6565b600084815260208120601f198516915b82811015610d5f5787850151825560209485019460019092019101610d3f565b5084821015610d7d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6060815260006060820152608060208201526000610dad6080830185610932565b8281036040840152610dbf8185610932565b95945050505050565b838152826020820152606060408201526000610dbf606083018461093256fea26469706673582212209d7f235af5f24d70d0fca9b3c43f6941ec8835b79fc59f659ae115d8e25c1cb764736f6c634300081c0033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108bb565b610231565b005b34801561010c57600080fd5b506100fe61011b3660046108f5565b6103d1565b34801561012c57600080fd5b5061014061013b366004610919565b61041d565b6040516100d59493929190610978565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109ef565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a7c565b61055a565b3480156101d057600080fd5b506101836101df366004610919565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c3660046108f5565b6105b9565b34801561021d57600080fd5b506100fe61022c3660046108f5565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b9e565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610bb4565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610bf6565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610bf6565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610bb4565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610bb4565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906106e59086908c908c90600401610c30565b60206040518083038185885af1158015610703573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107289190610c66565b600380546040805160a06020601f8d018190040282018101909252608081018b8152949550919382918c908c90819085018382808284376000920182905250938552505050602080830182905260408301829052606090920187905283546001810185559381522081519192600402019081906107a59082610cce565b5060208281015160018301805460ff19169115159190911790556040808401516002808501919091556060909401516003909301929092556000858152600491829052828120859055925491516312a6505d60e21b81526001600160a01b0390921691634a9941749161081c918b918b9101610d8c565b6020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190610c66565b60015460405191925084916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186906108a790869086908b90610dc8565b60405180910390a350509695505050505050565b600080604083850312156108ce57600080fd5b50508035926020909101359150565b6001600160a01b03811681146108f257600080fd5b50565b60006020828403121561090757600080fd5b8135610912816108dd565b9392505050565b60006020828403121561092b57600080fd5b5035919050565b6000815180845260005b818110156109585760208185018101518683018201520161093c565b506000602082860101526020601f19601f83011685010191505092915050565b60808152600061098b6080830187610932565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109b957600080fd5b5081356001600160401b038111156109d057600080fd5b6020830191508360208285010111156109e857600080fd5b9250929050565b600080600080600060608688031215610a0757600080fd5b85356001600160401b03811115610a1d57600080fd5b610a29888289016109a7565b90965094505060208601356001600160401b03811115610a4857600080fd5b610a54888289016109a7565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610a9557600080fd5b86356001600160401b03811115610aab57600080fd5b610ab789828a016109a7565b90975095505060208701356001600160401b03811115610ad657600080fd5b610ae289828a016109a7565b90955093505060408701356001600160401b03811115610b0157600080fd5b8701601f81018913610b1257600080fd5b80356001600160401b03811115610b2b57610b2b610a66565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610b5957610b59610a66565b6040528181528282016020018b1015610b7157600080fd5b81602084016020830137600091810160200191909152969995985093969295946060939093013593505050565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610c0a57607f821691505b602082108103610c2a57634e487b7160e01b600052602260045260246000fd5b50919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215610c7857600080fd5b5051919050565b601f821115610cc957806000526020600020601f840160051c81016020851015610ca65750805b601f840160051c820191505b81811015610cc65760008155600101610cb2565b50505b505050565b81516001600160401b03811115610ce757610ce7610a66565b610cfb81610cf58454610bf6565b84610c7f565b6020601f821160018114610d2f5760008315610d175750848201515b600019600385901b1c1916600184901b178455610cc6565b600084815260208120601f198516915b82811015610d5f5787850151825560209485019460019092019101610d3f565b5084821015610d7d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6060815260006060820152608060208201526000610dad6080830185610932565b8281036040840152610dbf8185610932565b95945050505050565b838152826020820152606060408201526000610dbf606083018461093256fea26469706673582212209d7f235af5f24d70d0fca9b3c43f6941ec8835b79fc59f659ae115d8e25c1cb764736f6c634300081c0033", - "devdoc": { - "events": { - "DisputeRequest(address,uint256,uint256,uint256,string)": { - "details": "To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.", - "params": { - "_arbitrator": "The arbitrator of the contract.", - "_arbitratorDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_externalDisputeID": "An identifier created outside Kleros by the protocol requesting arbitration.", - "_templateId": "The identifier of the dispute template. Should not be used with _templateUri.", - "_templateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrator": "The arbitrator giving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor.", - "params": { - "_governor": "The address of the new governor." - } - }, - "constructor": { - "details": "Constructor", - "params": { - "_arbitrator": "Target global arbitrator for any disputes." - } - }, - "createDisputeForTemplate(bytes,string,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplate": "Dispute template.", - "_disputeTemplateDataMappings": "The data mappings.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "createDisputeForTemplateUri(bytes,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "rule(uint256,uint256)": { - "details": "To be called by the arbitrator of the dispute, to declare the winning ruling.", - "params": { - "_arbitratorDisputeID": "ID of the dispute in arbitrator contract.", - "_ruling": "The ruling choice of the arbitration." - } - } - }, - "title": "DisputeResolver DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 19090, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 19093, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitrator", - "offset": 0, - "slot": "1", - "type": "t_contract(IArbitratorV2)25968" - }, - { - "astId": 19096, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "templateRegistry", - "offset": 0, - "slot": "2", - "type": "t_contract(IDisputeTemplateRegistry)26147" - }, - { - "astId": 19100, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "disputes", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(DisputeStruct)19088_storage)dyn_storage" - }, - { - "astId": 19104, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitratorDisputeIDToLocalID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(DisputeStruct)19088_storage)dyn_storage": { - "base": "t_struct(DisputeStruct)19088_storage", - "encoding": "dynamic_array", - "label": "struct DisputeResolver.DisputeStruct[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IArbitratorV2)25968": { - "encoding": "inplace", - "label": "contract IArbitratorV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeTemplateRegistry)26147": { - "encoding": "inplace", - "label": "contract IDisputeTemplateRegistry", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeStruct)19088_storage": { - "encoding": "inplace", - "label": "struct DisputeResolver.DisputeStruct", - "members": [ - { - "astId": 19081, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitratorExtraData", - "offset": 0, - "slot": "0", - "type": "t_bytes_storage" - }, - { - "astId": 19083, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "isRuled", - "offset": 0, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 19085, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "ruling", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 19087, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "numberOfRulingOptions", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeResolverRuler.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeResolverRuler.json deleted file mode 100644 index 8f5e66a1e..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeResolverRuler.json +++ /dev/null @@ -1,522 +0,0 @@ -{ - "address": "0xAEB1bbaE58125BA5F32349c69e4274d15dfD6EC3", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateUri", - "type": "string" - } - ], - "name": "DisputeRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "arbitratorDisputeIDToLocalID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - } - ], - "name": "changeArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "name": "changeTemplateRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplate", - "type": "string" - }, - { - "internalType": "string", - "name": "_disputeTemplateDataMappings", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplateUri", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplateUri", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "bytes", - "name": "arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "isRuled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numberOfRulingOptions", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templateRegistry", - "outputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x527f62b45cc4c848902807f14077f3e7befc35321742e55e6926d2454031c40c", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xAEB1bbaE58125BA5F32349c69e4274d15dfD6EC3", - "transactionIndex": 4, - "gasUsed": "906867", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x22ec4e09526461ae2a7171b89306a126f93312f1d5600ba28bbf6061a70cc32d", - "transactionHash": "0x527f62b45cc4c848902807f14077f3e7befc35321742e55e6926d2454031c40c", - "logs": [], - "blockNumber": 175286738, - "cumulativeGasUsed": "1639898", - "status": 1, - "byzantium": true - }, - "args": [ - "0x0630e4248a17b506809009F5D88E2f5bEE584c83", - "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateUri\",\"type\":\"string\"}],\"name\":\"DisputeRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"arbitratorDisputeIDToLocalID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"}],\"name\":\"changeArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplate\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateDataMappings\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateUri\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplateUri\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isRuled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRulingOptions\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DisputeRequest(address,uint256,uint256,uint256,string)\":{\"details\":\"To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\",\"params\":{\"_arbitrator\":\"The arbitrator of the contract.\",\"_arbitratorDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_externalDisputeID\":\"An identifier created outside Kleros by the protocol requesting arbitration.\",\"_templateId\":\"The identifier of the dispute template. Should not be used with _templateUri.\",\"_templateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrator\":\"The arbitrator giving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor.\",\"params\":{\"_governor\":\"The address of the new governor.\"}},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_arbitrator\":\"Target global arbitrator for any disputes.\"}},\"createDisputeForTemplate(bytes,string,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplate\":\"Dispute template.\",\"_disputeTemplateDataMappings\":\"The data mappings.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"createDisputeForTemplateUri(bytes,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"rule(uint256,uint256)\":{\"details\":\"To be called by the arbitrator of the dispute, to declare the winning ruling.\",\"params\":{\"_arbitratorDisputeID\":\"ID of the dispute in arbitrator contract.\",\"_ruling\":\"The ruling choice of the arbitration.\"}}},\"title\":\"DisputeResolverRuler It extends DisputeResolver for testing purposes of the automatic ruling modes. The arbitrator disputeID must be known before dispute creation, otherwise the dispute cannot be retrieved during the immediate call to rule().\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/devtools/DisputeResolverRuler.sol\":\"DisputeResolverRuler\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/arbitrables/DisputeResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitrableV2.sol\\\";\\nimport \\\"../interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\npragma solidity ^0.8.24;\\n\\n/// @title DisputeResolver\\n/// DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\\ncontract DisputeResolver is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeStruct {\\n bytes arbitratorExtraData; // Extra data for the dispute.\\n bool isRuled; // True if the dispute has been ruled.\\n uint256 ruling; // Ruling given to the dispute.\\n uint256 numberOfRulingOptions; // The number of choices the arbitrator can give.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor.\\n IArbitratorV2 public arbitrator; // The arbitrator.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n DisputeStruct[] public disputes; // Local disputes.\\n mapping(uint256 => uint256) public arbitratorDisputeIDToLocalID; // Maps arbitrator-side dispute IDs to local dispute IDs.\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator Target global arbitrator for any disputes.\\n constructor(IArbitratorV2 _arbitrator, IDisputeTemplateRegistry _templateRegistry) {\\n governor = msg.sender;\\n arbitrator = _arbitrator;\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n governor = _governor;\\n }\\n\\n function changeArbitrator(IArbitratorV2 _arbitrator) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n arbitrator = _arbitrator;\\n }\\n\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplate Dispute template.\\n /// @param _disputeTemplateDataMappings The data mappings.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplate(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return\\n _createDispute(\\n _arbitratorExtraData,\\n _disputeTemplate,\\n _disputeTemplateDataMappings,\\n \\\"\\\",\\n _numberOfRulingOptions\\n );\\n }\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplateUri(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return _createDispute(_arbitratorExtraData, \\\"\\\", \\\"\\\", _disputeTemplateUri, _numberOfRulingOptions);\\n }\\n\\n /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling.\\n /// @param _arbitratorDisputeID ID of the dispute in arbitrator contract.\\n /// @param _ruling The ruling choice of the arbitration.\\n function rule(uint256 _arbitratorDisputeID, uint256 _ruling) external override {\\n uint256 localDisputeID = arbitratorDisputeIDToLocalID[_arbitratorDisputeID];\\n DisputeStruct storage dispute = disputes[localDisputeID];\\n require(msg.sender == address(arbitrator), \\\"Only the arbitrator can execute this.\\\");\\n require(_ruling <= dispute.numberOfRulingOptions, \\\"Invalid ruling.\\\");\\n require(!dispute.isRuled, \\\"This dispute has been ruled already.\\\");\\n\\n dispute.isRuled = true;\\n dispute.ruling = _ruling;\\n\\n emit Ruling(IArbitratorV2(msg.sender), _arbitratorDisputeID, dispute.ruling);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n function _createDispute(\\n bytes calldata _arbitratorExtraData,\\n string memory _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n string memory _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) internal virtual returns (uint256 arbitratorDisputeID) {\\n require(_numberOfRulingOptions > 1, \\\"Should be at least 2 ruling options.\\\");\\n\\n arbitratorDisputeID = arbitrator.createDispute{value: msg.value}(_numberOfRulingOptions, _arbitratorExtraData);\\n uint256 localDisputeID = disputes.length;\\n disputes.push(\\n DisputeStruct({\\n arbitratorExtraData: _arbitratorExtraData,\\n isRuled: false,\\n ruling: 0,\\n numberOfRulingOptions: _numberOfRulingOptions\\n })\\n );\\n arbitratorDisputeIDToLocalID[arbitratorDisputeID] = localDisputeID;\\n uint256 templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _disputeTemplate, _disputeTemplateDataMappings);\\n emit DisputeRequest(arbitrator, arbitratorDisputeID, localDisputeID, templateId, _disputeTemplateUri);\\n }\\n}\\n\",\"keccak256\":\"0xbc262a895c231a24dca6c8da7d865eab29c84299e049e80d66226f891553e9d7\",\"license\":\"MIT\"},\"src/arbitration/devtools/DisputeResolverRuler.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\nimport {DisputeResolver, IArbitratorV2, IDisputeTemplateRegistry} from \\\"../arbitrables/DisputeResolver.sol\\\";\\n\\npragma solidity ^0.8.24;\\n\\ninterface IKlerosCoreRulerFragment {\\n function getNextDisputeID() external view returns (uint256);\\n}\\n\\n/// @title DisputeResolverRuler\\n/// It extends DisputeResolver for testing purposes of the automatic ruling modes.\\n/// The arbitrator disputeID must be known before dispute creation, otherwise the dispute cannot be retrieved during the immediate call to rule().\\ncontract DisputeResolverRuler is DisputeResolver {\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator Target global arbitrator for any disputes.\\n constructor(\\n IArbitratorV2 _arbitrator,\\n IDisputeTemplateRegistry _templateRegistry\\n ) DisputeResolver(_arbitrator, _templateRegistry) {\\n governor = msg.sender;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function _createDispute(\\n bytes calldata _arbitratorExtraData,\\n string memory _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n string memory _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) internal override returns (uint256 arbitratorDisputeID) {\\n require(_numberOfRulingOptions > 1, \\\"Should be at least 2 ruling options.\\\");\\n\\n uint256 localDisputeID = disputes.length;\\n DisputeStruct storage dispute = disputes.push();\\n dispute.arbitratorExtraData = _arbitratorExtraData;\\n dispute.numberOfRulingOptions = _numberOfRulingOptions;\\n\\n // Keep track of the upcoming dispute ID before dispute creation, so rule() can be called immediately after.\\n arbitratorDisputeID = IKlerosCoreRulerFragment(address(arbitrator)).getNextDisputeID();\\n arbitratorDisputeIDToLocalID[arbitratorDisputeID] = localDisputeID;\\n uint256 templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _disputeTemplate, _disputeTemplateDataMappings);\\n emit DisputeRequest(arbitrator, arbitratorDisputeID, localDisputeID, templateId, _disputeTemplateUri);\\n\\n arbitrator.createDispute{value: msg.value}(_numberOfRulingOptions, _arbitratorExtraData);\\n }\\n}\\n\",\"keccak256\":\"0x939c2545b66b4c76ecbfb800eefaddde71518a58b16f87c9f194381d02eeac12\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0xd8122941175d1d5c2983e71717a2fdcc6fe94aa9de08f87eb7c44e3a5f1c2030\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6080604052348015600f57600080fd5b50604051610ef6380380610ef6833981016040819052602c916086565b60008054600180546001600160a01b03199081166001600160a01b03968716179091556002805482169490951693909317909355918116339182161717905560bb565b6001600160a01b0381168114608357600080fd5b50565b60008060408385031215609857600080fd5b825160a181606f565b602084015190925060b081606f565b809150509250929050565b610e2c806100ca6000396000f3fe60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108c9565b610231565b005b34801561010c57600080fd5b506100fe61011b366004610903565b6103d1565b34801561012c57600080fd5b5061014061013b366004610927565b61041d565b6040516100d59493929190610986565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109fd565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a8a565b61055a565b3480156101d057600080fd5b506101836101df366004610927565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c366004610903565b6105b9565b34801561021d57600080fd5b506100fe61022c366004610903565b610605565b600082815260046020526040812054600380549192918390811061025757610257610bac565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610bc2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610c04565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610c04565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610bc2565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610bc2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60038054600181018255600091909152600481027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01806106f1898b83610c8d565b50600381018490556001546040805163db8a173b60e01b815290516001600160a01b039092169163db8a173b916004808201926020929091908290030181865afa158015610743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107679190610d4c565b600081815260046020819052604080832086905560025490516312a6505d60e21b815293965091926001600160a01b0390921691634a994174916107af918c918c9101610d65565b6020604051808303816000875af11580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f29190610d4c565b60015460405191925085916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e271869061083a90879086908c90610da1565b60405180910390a360015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906108789089908f908f90600401610dc0565b60206040518083038185885af1158015610896573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108bb9190610d4c565b505050509695505050505050565b600080604083850312156108dc57600080fd5b50508035926020909101359150565b6001600160a01b038116811461090057600080fd5b50565b60006020828403121561091557600080fd5b8135610920816108eb565b9392505050565b60006020828403121561093957600080fd5b5035919050565b6000815180845260005b818110156109665760208185018101518683018201520161094a565b506000602082860101526020601f19601f83011685010191505092915050565b6080815260006109996080830187610940565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109c757600080fd5b5081356001600160401b038111156109de57600080fd5b6020830191508360208285010111156109f657600080fd5b9250929050565b600080600080600060608688031215610a1557600080fd5b85356001600160401b03811115610a2b57600080fd5b610a37888289016109b5565b90965094505060208601356001600160401b03811115610a5657600080fd5b610a62888289016109b5565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610aa357600080fd5b86356001600160401b03811115610ab957600080fd5b610ac589828a016109b5565b90975095505060208701356001600160401b03811115610ae457600080fd5b610af089828a016109b5565b90955093505060408701356001600160401b03811115610b0f57600080fd5b8701601f81018913610b2057600080fd5b80356001600160401b03811115610b3957610b39610a74565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610b6757610b67610a74565b6040528181528282016020018b1015610b7f57600080fd5b81602084016020830137600091810160200191909152969995985093969295946060939093013593505050565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610c1857607f821691505b602082108103610c3857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610c8857806000526020600020601f840160051c81016020851015610c655750805b601f840160051c820191505b81811015610c855760008155600101610c71565b50505b505050565b6001600160401b03831115610ca457610ca4610a74565b610cb883610cb28354610c04565b83610c3e565b6000601f841160018114610cec5760008515610cd45750838201355b600019600387901b1c1916600186901b178355610c85565b600083815260209020601f19861690835b82811015610d1d5786850135825560209485019460019092019101610cfd565b5086821015610d3a5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600060208284031215610d5e57600080fd5b5051919050565b6060815260006060820152608060208201526000610d866080830185610940565b8281036040840152610d988185610940565b95945050505050565b838152826020820152606060408201526000610d986060830184610940565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea26469706673582212207a0f2e944bb5e1e1e6f94e348f337a47fad044ed8ae74f39092cdc22bb00548a64736f6c634300081c0033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108c9565b610231565b005b34801561010c57600080fd5b506100fe61011b366004610903565b6103d1565b34801561012c57600080fd5b5061014061013b366004610927565b61041d565b6040516100d59493929190610986565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109fd565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a8a565b61055a565b3480156101d057600080fd5b506101836101df366004610927565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c366004610903565b6105b9565b34801561021d57600080fd5b506100fe61022c366004610903565b610605565b600082815260046020526040812054600380549192918390811061025757610257610bac565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610bc2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610c04565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610c04565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610bc2565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610bc2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60038054600181018255600091909152600481027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01806106f1898b83610c8d565b50600381018490556001546040805163db8a173b60e01b815290516001600160a01b039092169163db8a173b916004808201926020929091908290030181865afa158015610743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107679190610d4c565b600081815260046020819052604080832086905560025490516312a6505d60e21b815293965091926001600160a01b0390921691634a994174916107af918c918c9101610d65565b6020604051808303816000875af11580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f29190610d4c565b60015460405191925085916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e271869061083a90879086908c90610da1565b60405180910390a360015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906108789089908f908f90600401610dc0565b60206040518083038185885af1158015610896573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108bb9190610d4c565b505050509695505050505050565b600080604083850312156108dc57600080fd5b50508035926020909101359150565b6001600160a01b038116811461090057600080fd5b50565b60006020828403121561091557600080fd5b8135610920816108eb565b9392505050565b60006020828403121561093957600080fd5b5035919050565b6000815180845260005b818110156109665760208185018101518683018201520161094a565b506000602082860101526020601f19601f83011685010191505092915050565b6080815260006109996080830187610940565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109c757600080fd5b5081356001600160401b038111156109de57600080fd5b6020830191508360208285010111156109f657600080fd5b9250929050565b600080600080600060608688031215610a1557600080fd5b85356001600160401b03811115610a2b57600080fd5b610a37888289016109b5565b90965094505060208601356001600160401b03811115610a5657600080fd5b610a62888289016109b5565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610aa357600080fd5b86356001600160401b03811115610ab957600080fd5b610ac589828a016109b5565b90975095505060208701356001600160401b03811115610ae457600080fd5b610af089828a016109b5565b90955093505060408701356001600160401b03811115610b0f57600080fd5b8701601f81018913610b2057600080fd5b80356001600160401b03811115610b3957610b39610a74565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610b6757610b67610a74565b6040528181528282016020018b1015610b7f57600080fd5b81602084016020830137600091810160200191909152969995985093969295946060939093013593505050565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610c1857607f821691505b602082108103610c3857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610c8857806000526020600020601f840160051c81016020851015610c655750805b601f840160051c820191505b81811015610c855760008155600101610c71565b50505b505050565b6001600160401b03831115610ca457610ca4610a74565b610cb883610cb28354610c04565b83610c3e565b6000601f841160018114610cec5760008515610cd45750838201355b600019600387901b1c1916600186901b178355610c85565b600083815260209020601f19861690835b82811015610d1d5786850135825560209485019460019092019101610cfd565b5086821015610d3a5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600060208284031215610d5e57600080fd5b5051919050565b6060815260006060820152608060208201526000610d866080830185610940565b8281036040840152610d988185610940565b95945050505050565b838152826020820152606060408201526000610d986060830184610940565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea26469706673582212207a0f2e944bb5e1e1e6f94e348f337a47fad044ed8ae74f39092cdc22bb00548a64736f6c634300081c0033", - "devdoc": { - "events": { - "DisputeRequest(address,uint256,uint256,uint256,string)": { - "details": "To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.", - "params": { - "_arbitrator": "The arbitrator of the contract.", - "_arbitratorDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_externalDisputeID": "An identifier created outside Kleros by the protocol requesting arbitration.", - "_templateId": "The identifier of the dispute template. Should not be used with _templateUri.", - "_templateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrator": "The arbitrator giving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor.", - "params": { - "_governor": "The address of the new governor." - } - }, - "constructor": { - "details": "Constructor", - "params": { - "_arbitrator": "Target global arbitrator for any disputes." - } - }, - "createDisputeForTemplate(bytes,string,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplate": "Dispute template.", - "_disputeTemplateDataMappings": "The data mappings.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "createDisputeForTemplateUri(bytes,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "rule(uint256,uint256)": { - "details": "To be called by the arbitrator of the dispute, to declare the winning ruling.", - "params": { - "_arbitratorDisputeID": "ID of the dispute in arbitrator contract.", - "_ruling": "The ruling choice of the arbitration." - } - } - }, - "title": "DisputeResolverRuler It extends DisputeResolver for testing purposes of the automatic ruling modes. The arbitrator disputeID must be known before dispute creation, otherwise the dispute cannot be retrieved during the immediate call to rule().", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 19090, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 19093, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "arbitrator", - "offset": 0, - "slot": "1", - "type": "t_contract(IArbitratorV2)25968" - }, - { - "astId": 19096, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "templateRegistry", - "offset": 0, - "slot": "2", - "type": "t_contract(IDisputeTemplateRegistry)26147" - }, - { - "astId": 19100, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "disputes", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(DisputeStruct)19088_storage)dyn_storage" - }, - { - "astId": 19104, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "arbitratorDisputeIDToLocalID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(DisputeStruct)19088_storage)dyn_storage": { - "base": "t_struct(DisputeStruct)19088_storage", - "encoding": "dynamic_array", - "label": "struct DisputeResolver.DisputeStruct[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IArbitratorV2)25968": { - "encoding": "inplace", - "label": "contract IArbitratorV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeTemplateRegistry)26147": { - "encoding": "inplace", - "label": "contract IDisputeTemplateRegistry", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeStruct)19088_storage": { - "encoding": "inplace", - "label": "struct DisputeResolver.DisputeStruct", - "members": [ - { - "astId": 19081, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "arbitratorExtraData", - "offset": 0, - "slot": "0", - "type": "t_bytes_storage" - }, - { - "astId": 19083, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "isRuled", - "offset": 0, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 19085, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "ruling", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 19087, - "contract": "src/arbitration/devtools/DisputeResolverRuler.sol:DisputeResolverRuler", - "label": "numberOfRulingOptions", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeResolverUniversity.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeResolverUniversity.json deleted file mode 100644 index df70ac2d7..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeResolverUniversity.json +++ /dev/null @@ -1,522 +0,0 @@ -{ - "address": "0x2Aa1a94307E772BeE42E9EfbD137b1053F1fCfd4", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateUri", - "type": "string" - } - ], - "name": "DisputeRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "arbitratorDisputeIDToLocalID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - } - ], - "name": "changeArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "name": "changeTemplateRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplate", - "type": "string" - }, - { - "internalType": "string", - "name": "_disputeTemplateDataMappings", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplateUri", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplateUri", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "bytes", - "name": "arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "isRuled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numberOfRulingOptions", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_arbitratorDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templateRegistry", - "outputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x6e6144da838df488664fec992cf96ff6d6d7e6d6b2239d15dbaa4db970be6116", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x2Aa1a94307E772BeE42E9EfbD137b1053F1fCfd4", - "transactionIndex": 1, - "gasUsed": "935568", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x581b5decfadcbf1085c9383e7378b7f2738f8a0050031424ce6c036cf809ff5d", - "transactionHash": "0x6e6144da838df488664fec992cf96ff6d6d7e6d6b2239d15dbaa4db970be6116", - "logs": [], - "blockNumber": 96308731, - "cumulativeGasUsed": "935568", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "0x596D3B09E684D62217682216e9b7a0De75933391" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateUri\",\"type\":\"string\"}],\"name\":\"DisputeRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"arbitratorDisputeIDToLocalID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"}],\"name\":\"changeArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplate\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateDataMappings\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateUri\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplateUri\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isRuled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRulingOptions\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_arbitratorDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DisputeRequest(address,uint256,uint256,uint256,string)\":{\"details\":\"To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\",\"params\":{\"_arbitrator\":\"The arbitrator of the contract.\",\"_arbitratorDisputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_externalDisputeID\":\"An identifier created outside Kleros by the protocol requesting arbitration.\",\"_templateId\":\"The identifier of the dispute template. Should not be used with _templateUri.\",\"_templateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrator\":\"The arbitrator giving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor.\",\"params\":{\"_governor\":\"The address of the new governor.\"}},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_arbitrator\":\"Target global arbitrator for any disputes.\"}},\"createDisputeForTemplate(bytes,string,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplate\":\"Dispute template.\",\"_disputeTemplateDataMappings\":\"The data mappings.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"createDisputeForTemplateUri(bytes,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"rule(uint256,uint256)\":{\"details\":\"To be called by the arbitrator of the dispute, to declare the winning ruling.\",\"params\":{\"_arbitratorDisputeID\":\"ID of the dispute in arbitrator contract.\",\"_ruling\":\"The ruling choice of the arbitration.\"}}},\"title\":\"DisputeResolver DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/arbitrables/DisputeResolver.sol\":\"DisputeResolver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/arbitration/arbitrables/DisputeResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitrableV2.sol\\\";\\nimport \\\"../interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\npragma solidity 0.8.24;\\n\\n/// @title DisputeResolver\\n/// DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\\ncontract DisputeResolver is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeStruct {\\n bytes arbitratorExtraData; // Extra data for the dispute.\\n bool isRuled; // True if the dispute has been ruled.\\n uint256 ruling; // Ruling given to the dispute.\\n uint256 numberOfRulingOptions; // The number of choices the arbitrator can give.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor.\\n IArbitratorV2 public arbitrator; // The arbitrator.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n DisputeStruct[] public disputes; // Local disputes.\\n mapping(uint256 => uint256) public arbitratorDisputeIDToLocalID; // Maps arbitrator-side dispute IDs to local dispute IDs.\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator Target global arbitrator for any disputes.\\n constructor(IArbitratorV2 _arbitrator, IDisputeTemplateRegistry _templateRegistry) {\\n governor = msg.sender;\\n arbitrator = _arbitrator;\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n governor = _governor;\\n }\\n\\n function changeArbitrator(IArbitratorV2 _arbitrator) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n arbitrator = _arbitrator;\\n }\\n\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplate Dispute template.\\n /// @param _disputeTemplateDataMappings The data mappings.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplate(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return\\n _createDispute(\\n _arbitratorExtraData,\\n _disputeTemplate,\\n _disputeTemplateDataMappings,\\n \\\"\\\",\\n _numberOfRulingOptions\\n );\\n }\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplateUri(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return _createDispute(_arbitratorExtraData, \\\"\\\", \\\"\\\", _disputeTemplateUri, _numberOfRulingOptions);\\n }\\n\\n /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling.\\n /// @param _arbitratorDisputeID ID of the dispute in arbitrator contract.\\n /// @param _ruling The ruling choice of the arbitration.\\n function rule(uint256 _arbitratorDisputeID, uint256 _ruling) external override {\\n uint256 localDisputeID = arbitratorDisputeIDToLocalID[_arbitratorDisputeID];\\n DisputeStruct storage dispute = disputes[localDisputeID];\\n require(msg.sender == address(arbitrator), \\\"Only the arbitrator can execute this.\\\");\\n require(_ruling <= dispute.numberOfRulingOptions, \\\"Invalid ruling.\\\");\\n require(!dispute.isRuled, \\\"This dispute has been ruled already.\\\");\\n\\n dispute.isRuled = true;\\n dispute.ruling = _ruling;\\n\\n emit Ruling(IArbitratorV2(msg.sender), _arbitratorDisputeID, dispute.ruling);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n function _createDispute(\\n bytes calldata _arbitratorExtraData,\\n string memory _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n string memory _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) internal virtual returns (uint256 arbitratorDisputeID) {\\n require(_numberOfRulingOptions > 1, \\\"Should be at least 2 ruling options.\\\");\\n\\n arbitratorDisputeID = arbitrator.createDispute{value: msg.value}(_numberOfRulingOptions, _arbitratorExtraData);\\n uint256 localDisputeID = disputes.length;\\n disputes.push(\\n DisputeStruct({\\n arbitratorExtraData: _arbitratorExtraData,\\n isRuled: false,\\n ruling: 0,\\n numberOfRulingOptions: _numberOfRulingOptions\\n })\\n );\\n arbitratorDisputeIDToLocalID[arbitratorDisputeID] = localDisputeID;\\n uint256 templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _disputeTemplate, _disputeTemplateDataMappings);\\n emit DisputeRequest(arbitrator, arbitratorDisputeID, localDisputeID, templateId, _disputeTemplateUri);\\n }\\n}\\n\",\"keccak256\":\"0xee61f409399f0e66be187def6fcbe2e23717475b2b752d913dfac0a32c7dca1a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0xe841a4fe8ec109ce17dde4457bf1583c8b499109b05887c53a49a3207fc6e80b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xa4dc6b958197adead238de4246cd04e7389c3dc1b9f968acd10985f8fc5b74cf\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0xb46ff71c32a524a865fe8ca99d94c9daeb690bc9d7d49d963a45b06f60af19f3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50604051610ed7380380610ed783398101604081905261002f91610083565b600080546001600160a01b03199081163317909155600180546001600160a01b03948516908316179055600280549290931691161790556100bd565b6001600160a01b038116811461008057600080fd5b50565b6000806040838503121561009657600080fd5b82516100a18161006b565b60208401519092506100b28161006b565b809150509250929050565b610e0b806100cc6000396000f3fe60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108bb565b610231565b005b34801561010c57600080fd5b506100fe61011b3660046108f5565b6103d1565b34801561012c57600080fd5b5061014061013b366004610919565b61041d565b6040516100d59493929190610978565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109f0565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a7a565b61055a565b3480156101d057600080fd5b506101836101df366004610919565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c3660046108f5565b6105b9565b34801561021d57600080fd5b506100fe61022c3660046108f5565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b88565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610b9e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610be0565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610be0565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610b9e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610b9e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906106e59086908c908c90600401610c1a565b60206040518083038185885af1158015610703573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107289190610c50565b600380546040805160a06020601f8d018190040282018101909252608081018b8152949550919382918c908c90819085018382808284376000920182905250938552505050602080830182905260408301829052606090920187905283546001810185559381522081519192600402019081906107a59082610cba565b5060208281015160018301805460ff19169115159190911790556040808401516002808501919091556060909401516003909301929092556000858152600491829052828120859055925491516312a6505d60e21b81526001600160a01b0390921691634a9941749161081c918b918b9101610d7a565b6020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190610c50565b60015460405191925084916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186906108a790869086908b90610db6565b60405180910390a350509695505050505050565b600080604083850312156108ce57600080fd5b50508035926020909101359150565b6001600160a01b03811681146108f257600080fd5b50565b60006020828403121561090757600080fd5b8135610912816108dd565b9392505050565b60006020828403121561092b57600080fd5b5035919050565b6000815180845260005b818110156109585760208185018101518683018201520161093c565b506000602082860101526020601f19601f83011685010191505092915050565b60808152600061098b6080830187610932565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109b957600080fd5b50813567ffffffffffffffff8111156109d157600080fd5b6020830191508360208285010111156109e957600080fd5b9250929050565b600080600080600060608688031215610a0857600080fd5b853567ffffffffffffffff80821115610a2057600080fd5b610a2c89838a016109a7565b90975095506020880135915080821115610a4557600080fd5b50610a52888289016109a7565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610a9357600080fd5b863567ffffffffffffffff80821115610aab57600080fd5b610ab78a838b016109a7565b90985096506020890135915080821115610ad057600080fd5b610adc8a838b016109a7565b90965094506040890135915080821115610af557600080fd5b818901915089601f830112610b0957600080fd5b813581811115610b1b57610b1b610a64565b604051601f8201601f19908116603f01168101908382118183101715610b4357610b43610a64565b816040528281528c6020848701011115610b5c57600080fd5b826020860160208301376000602084830101528096505050505050606087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610bf457607f821691505b602082108103610c1457634e487b7160e01b600052602260045260246000fd5b50919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215610c6257600080fd5b5051919050565b601f821115610cb5576000816000526020600020601f850160051c81016020861015610c925750805b601f850160051c820191505b81811015610cb157828155600101610c9e565b5050505b505050565b815167ffffffffffffffff811115610cd457610cd4610a64565b610ce881610ce28454610be0565b84610c69565b602080601f831160018114610d1d5760008415610d055750858301515b600019600386901b1c1916600185901b178555610cb1565b600085815260208120601f198616915b82811015610d4c57888601518255948401946001909101908401610d2d565b5085821015610d6a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006060820152608060208201526000610d9b6080830185610932565b8281036040840152610dad8185610932565b95945050505050565b838152826020820152606060408201526000610dad606083018461093256fea264697066735822122028e3f1561d663e8479b35f936c2645829463b01bf5fedd3e120b732867bda19a64736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108bb565b610231565b005b34801561010c57600080fd5b506100fe61011b3660046108f5565b6103d1565b34801561012c57600080fd5b5061014061013b366004610919565b61041d565b6040516100d59493929190610978565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109f0565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a7a565b61055a565b3480156101d057600080fd5b506101836101df366004610919565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c3660046108f5565b6105b9565b34801561021d57600080fd5b506100fe61022c3660046108f5565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b88565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610b9e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610be0565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610be0565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610b9e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610b9e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906106e59086908c908c90600401610c1a565b60206040518083038185885af1158015610703573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107289190610c50565b600380546040805160a06020601f8d018190040282018101909252608081018b8152949550919382918c908c90819085018382808284376000920182905250938552505050602080830182905260408301829052606090920187905283546001810185559381522081519192600402019081906107a59082610cba565b5060208281015160018301805460ff19169115159190911790556040808401516002808501919091556060909401516003909301929092556000858152600491829052828120859055925491516312a6505d60e21b81526001600160a01b0390921691634a9941749161081c918b918b9101610d7a565b6020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190610c50565b60015460405191925084916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186906108a790869086908b90610db6565b60405180910390a350509695505050505050565b600080604083850312156108ce57600080fd5b50508035926020909101359150565b6001600160a01b03811681146108f257600080fd5b50565b60006020828403121561090757600080fd5b8135610912816108dd565b9392505050565b60006020828403121561092b57600080fd5b5035919050565b6000815180845260005b818110156109585760208185018101518683018201520161093c565b506000602082860101526020601f19601f83011685010191505092915050565b60808152600061098b6080830187610932565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109b957600080fd5b50813567ffffffffffffffff8111156109d157600080fd5b6020830191508360208285010111156109e957600080fd5b9250929050565b600080600080600060608688031215610a0857600080fd5b853567ffffffffffffffff80821115610a2057600080fd5b610a2c89838a016109a7565b90975095506020880135915080821115610a4557600080fd5b50610a52888289016109a7565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610a9357600080fd5b863567ffffffffffffffff80821115610aab57600080fd5b610ab78a838b016109a7565b90985096506020890135915080821115610ad057600080fd5b610adc8a838b016109a7565b90965094506040890135915080821115610af557600080fd5b818901915089601f830112610b0957600080fd5b813581811115610b1b57610b1b610a64565b604051601f8201601f19908116603f01168101908382118183101715610b4357610b43610a64565b816040528281528c6020848701011115610b5c57600080fd5b826020860160208301376000602084830101528096505050505050606087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610bf457607f821691505b602082108103610c1457634e487b7160e01b600052602260045260246000fd5b50919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215610c6257600080fd5b5051919050565b601f821115610cb5576000816000526020600020601f850160051c81016020861015610c925750805b601f850160051c820191505b81811015610cb157828155600101610c9e565b5050505b505050565b815167ffffffffffffffff811115610cd457610cd4610a64565b610ce881610ce28454610be0565b84610c69565b602080601f831160018114610d1d5760008415610d055750858301515b600019600386901b1c1916600185901b178555610cb1565b600085815260208120601f198616915b82811015610d4c57888601518255948401946001909101908401610d2d565b5085821015610d6a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006060820152608060208201526000610d9b6080830185610932565b8281036040840152610dad8185610932565b95945050505050565b838152826020820152606060408201526000610dad606083018461093256fea264697066735822122028e3f1561d663e8479b35f936c2645829463b01bf5fedd3e120b732867bda19a64736f6c63430008180033", - "devdoc": { - "events": { - "DisputeRequest(address,uint256,uint256,uint256,string)": { - "details": "To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.", - "params": { - "_arbitrator": "The arbitrator of the contract.", - "_arbitratorDisputeID": "The identifier of the dispute in the Arbitrator contract.", - "_externalDisputeID": "An identifier created outside Kleros by the protocol requesting arbitration.", - "_templateId": "The identifier of the dispute template. Should not be used with _templateUri.", - "_templateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrator": "The arbitrator giving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor.", - "params": { - "_governor": "The address of the new governor." - } - }, - "constructor": { - "details": "Constructor", - "params": { - "_arbitrator": "Target global arbitrator for any disputes." - } - }, - "createDisputeForTemplate(bytes,string,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplate": "Dispute template.", - "_disputeTemplateDataMappings": "The data mappings.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "createDisputeForTemplateUri(bytes,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "rule(uint256,uint256)": { - "details": "To be called by the arbitrator of the dispute, to declare the winning ruling.", - "params": { - "_arbitratorDisputeID": "ID of the dispute in arbitrator contract.", - "_ruling": "The ruling choice of the arbitration." - } - } - }, - "title": "DisputeResolver DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 14991, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 14994, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitrator", - "offset": 0, - "slot": "1", - "type": "t_contract(IArbitratorV2)23044" - }, - { - "astId": 14997, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "templateRegistry", - "offset": 0, - "slot": "2", - "type": "t_contract(IDisputeTemplateRegistry)23215" - }, - { - "astId": 15001, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "disputes", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(DisputeStruct)14989_storage)dyn_storage" - }, - { - "astId": 15005, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitratorDisputeIDToLocalID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(DisputeStruct)14989_storage)dyn_storage": { - "base": "t_struct(DisputeStruct)14989_storage", - "encoding": "dynamic_array", - "label": "struct DisputeResolver.DisputeStruct[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IArbitratorV2)23044": { - "encoding": "inplace", - "label": "contract IArbitratorV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeTemplateRegistry)23215": { - "encoding": "inplace", - "label": "contract IDisputeTemplateRegistry", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeStruct)14989_storage": { - "encoding": "inplace", - "label": "struct DisputeResolver.DisputeStruct", - "members": [ - { - "astId": 14982, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitratorExtraData", - "offset": 0, - "slot": "0", - "type": "t_bytes_storage" - }, - { - "astId": 14984, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "isRuled", - "offset": 0, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 14986, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "ruling", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 14988, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "numberOfRulingOptions", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry.json deleted file mode 100644 index f0f16e9d6..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry.json +++ /dev/null @@ -1,319 +0,0 @@ -{ - "address": "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "DisputeTemplate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "setDisputeTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "templateId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templates", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x42d5be81f24d29079665466f5d2c1e1f90e14658916610f60650f9fddb9756c0", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f", - "transactionIndex": 1, - "gasUsed": "175512", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000800000000000000000000000080000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x4d8dc758475b63a2fe98693450ba52528c06e78722207f8bc258d0ac9e2843f8", - "transactionHash": "0x42d5be81f24d29079665466f5d2c1e1f90e14658916610f60650f9fddb9756c0", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 175286171, - "transactionHash": "0x42d5be81f24d29079665466f5d2c1e1f90e14658916610f60650f9fddb9756c0", - "address": "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x4d8dc758475b63a2fe98693450ba52528c06e78722207f8bc258d0ac9e2843f8" - } - ], - "blockNumber": 175286171, - "cumulativeGasUsed": "175512", - "status": 1, - "byzantium": true - }, - "args": [ - "0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeTemplateRegistryProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220c5a63c370bd1e5c29d148b45ecb1c6ba27ace4fde028c998100ed1a65bdeedc564736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220c5a63c370bd1e5c29d148b45ecb1c6ba27ace4fde028c998100ed1a65bdeedc564736f6c634300081c0033", - "execute": { - "methodName": "initialize", - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59" - ] - }, - "implementation": "0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry_Implementation.json deleted file mode 100644 index b508f1b0a..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry_Implementation.json +++ /dev/null @@ -1,423 +0,0 @@ -{ - "address": "0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "DisputeTemplate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "setDisputeTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "templateId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templates", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x9a20123a7ccae03fb699498162f2ec39137add58a29d39394cf4a9592db8b5c5", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1", - "transactionIndex": 3, - "gasUsed": "639106", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000802000000000000000000000080000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000400000000000000000000000000000000000", - "blockHash": "0x3b0614d00c9bf7166c9fa2815325853d85094aa3e8964b3642cae46f76390a5e", - "transactionHash": "0x9a20123a7ccae03fb699498162f2ec39137add58a29d39394cf4a9592db8b5c5", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 175286166, - "transactionHash": "0x9a20123a7ccae03fb699498162f2ec39137add58a29d39394cf4a9592db8b5c5", - "address": "0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 6, - "blockHash": "0x3b0614d00c9bf7166c9fa2815325853d85094aa3e8964b3642cae46f76390a5e" - } - ], - "blockNumber": 175286166, - "cumulativeGasUsed": "845628", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"_templateTag\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"DisputeTemplate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_templateTag\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"setDisputeTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"templateId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A contract to maintain a registry of dispute templates.\",\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"DisputeTemplate(uint256,string,string,string)\":{\"details\":\"To be emitted when a new dispute template is created.\",\"params\":{\"_templateData\":\"The template data.\",\"_templateDataMappings\":\"The data mappings.\",\"_templateId\":\"The identifier of the dispute template.\",\"_templateTag\":\"An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor of the contract.\",\"params\":{\"_governor\":\"The new governor.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initialize(address)\":{\"details\":\"Initializer\",\"params\":{\"_governor\":\"Governor of the contract.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setDisputeTemplate(string,string,string)\":{\"details\":\"Registers a new dispute template.\",\"params\":{\"_templateData\":\"The data of the template.\",\"_templateDataMappings\":\"The data mappings of the template.\",\"_templateTag\":\"The tag of the template (optional).\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"governor\":{\"details\":\"The governor of the contract.\"},\"templates\":{\"details\":\"The number of templates.\"},\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"Dispute Template Registry\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/DisputeTemplateRegistry.sol\":\"DisputeTemplateRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/arbitration/DisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\nimport \\\"./interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\n/// @title Dispute Template Registry\\n/// @dev A contract to maintain a registry of dispute templates.\\ncontract DisputeTemplateRegistry is IDisputeTemplateRegistry, UUPSProxiable, Initializable {\\n string public constant override version = \\\"0.8.0\\\";\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev The governor of the contract.\\n address public governor;\\n\\n /// @dev The number of templates.\\n uint256 public templates;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Governor only\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer\\n /// @param _governor Governor of the contract.\\n function initialize(address _governor) external reinitializer(1) {\\n governor = _governor;\\n }\\n\\n function initialize2() external reinitializer(2) {\\n // NOP\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Changes the governor of the contract.\\n /// @param _governor The new governor.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Registers a new dispute template.\\n /// @param _templateTag The tag of the template (optional).\\n /// @param _templateData The data of the template.\\n /// @param _templateDataMappings The data mappings of the template.\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId) {\\n templateId = templates++;\\n emit DisputeTemplate(templateId, _templateTag, _templateData, _templateDataMappings);\\n }\\n}\\n\",\"keccak256\":\"0xc390ff7265e1cd07f6b1ea53145ee0065e929f3281e42ea82b73227f5ee7d652\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0xd8122941175d1d5c2983e71717a2fdcc6fe94aa9de08f87eb7c44e3a5f1c2030\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610a216100fc600039600081816103010152818161032a01526105270152610a216000f3fe6080604052600436106100765760003560e01c80630c340a241461007b5780633a283d7d146100b8578063472abf68146100dc5780634a994174146100f35780634f1ef2861461011357806352d1902d1461012657806354fd4d501461013b578063c4d66de814610179578063e4c0aaf414610199575b600080fd5b34801561008757600080fd5b5060005461009b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100c457600080fd5b506100ce60015481565b6040519081526020016100af565b3480156100e857600080fd5b506100f16101b9565b005b3480156100ff57600080fd5b506100ce61010e36600461078e565b610280565b6100f161012136600461083b565b6102ed565b34801561013257600080fd5b506100ce61051a565b34801561014757600080fd5b5061016c604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100af91906108ec565b34801561018557600080fd5b506100f16101943660046108ff565b610578565b3480156101a557600080fd5b506100f16101b43660046108ff565b610660565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff1680610202575080546001600160401b03808416911610155b1561021f5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b60018054600091826102918361091a565b919050559050836040516102a59190610941565b6040518091039020817ef7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff992485856040516102de92919061095d565b60405180910390a39392505050565b6102f6826106ac565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061037457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166103686000805160206109cc8339815191525490565b6001600160a01b031614155b156103925760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156103ec575060408051601f3d908101601f191682019092526103e99181019061098b565b60015b61041957604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206109cc833981519152811461044a57604051632a87526960e21b815260048101829052602401610410565b6000805160206109cc8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115610515576000836001600160a01b0316836040516104b19190610941565b600060405180830381855af49150503d80600081146104ec576040519150601f19603f3d011682016040523d82523d6000602084013e6104f1565b606091505b5050905080610513576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105655760405163703e46dd60e11b815260040160405180910390fd5b506000805160206109cc83398151915290565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105c1575080546001600160401b03808416911610155b156105de5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6000546001600160a01b0316331461068a5760405162461bcd60e51b8152600401610410906109a4565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146106d65760405162461bcd60e51b8152600401610410906109a4565b50565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b03841115610709576107096106d9565b50604051601f19601f85018116603f011681018181106001600160401b0382111715610737576107376106d9565b60405283815290508082840185101561074f57600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261077857600080fd5b610787838335602085016106ef565b9392505050565b6000806000606084860312156107a357600080fd5b83356001600160401b038111156107b957600080fd5b6107c586828701610767565b93505060208401356001600160401b038111156107e157600080fd5b6107ed86828701610767565b92505060408401356001600160401b0381111561080957600080fd5b61081586828701610767565b9150509250925092565b80356001600160a01b038116811461083657600080fd5b919050565b6000806040838503121561084e57600080fd5b6108578361081f565b915060208301356001600160401b0381111561087257600080fd5b8301601f8101851361088357600080fd5b610892858235602084016106ef565b9150509250929050565b60005b838110156108b757818101518382015260200161089f565b50506000910152565b600081518084526108d881602086016020860161089c565b601f01601f19169290920160200192915050565b60208152600061078760208301846108c0565b60006020828403121561091157600080fd5b6107878261081f565b60006001820161093a57634e487b7160e01b600052601160045260246000fd5b5060010190565b6000825161095381846020870161089c565b9190910192915050565b60408152600061097060408301856108c0565b828103602084015261098281856108c0565b95945050505050565b60006020828403121561099d57600080fd5b5051919050565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b60408201526060019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220824b519bc278f6320d49ad83ae79b1c15de9785d55c72ae6d946281532e8e72264736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106100765760003560e01c80630c340a241461007b5780633a283d7d146100b8578063472abf68146100dc5780634a994174146100f35780634f1ef2861461011357806352d1902d1461012657806354fd4d501461013b578063c4d66de814610179578063e4c0aaf414610199575b600080fd5b34801561008757600080fd5b5060005461009b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100c457600080fd5b506100ce60015481565b6040519081526020016100af565b3480156100e857600080fd5b506100f16101b9565b005b3480156100ff57600080fd5b506100ce61010e36600461078e565b610280565b6100f161012136600461083b565b6102ed565b34801561013257600080fd5b506100ce61051a565b34801561014757600080fd5b5061016c604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100af91906108ec565b34801561018557600080fd5b506100f16101943660046108ff565b610578565b3480156101a557600080fd5b506100f16101b43660046108ff565b610660565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff1680610202575080546001600160401b03808416911610155b1561021f5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b60018054600091826102918361091a565b919050559050836040516102a59190610941565b6040518091039020817ef7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff992485856040516102de92919061095d565b60405180910390a39392505050565b6102f6826106ac565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061037457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166103686000805160206109cc8339815191525490565b6001600160a01b031614155b156103925760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156103ec575060408051601f3d908101601f191682019092526103e99181019061098b565b60015b61041957604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206109cc833981519152811461044a57604051632a87526960e21b815260048101829052602401610410565b6000805160206109cc8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115610515576000836001600160a01b0316836040516104b19190610941565b600060405180830381855af49150503d80600081146104ec576040519150601f19603f3d011682016040523d82523d6000602084013e6104f1565b606091505b5050905080610513576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105655760405163703e46dd60e11b815260040160405180910390fd5b506000805160206109cc83398151915290565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105c1575080546001600160401b03808416911610155b156105de5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6000546001600160a01b0316331461068a5760405162461bcd60e51b8152600401610410906109a4565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146106d65760405162461bcd60e51b8152600401610410906109a4565b50565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b03841115610709576107096106d9565b50604051601f19601f85018116603f011681018181106001600160401b0382111715610737576107376106d9565b60405283815290508082840185101561074f57600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261077857600080fd5b610787838335602085016106ef565b9392505050565b6000806000606084860312156107a357600080fd5b83356001600160401b038111156107b957600080fd5b6107c586828701610767565b93505060208401356001600160401b038111156107e157600080fd5b6107ed86828701610767565b92505060408401356001600160401b0381111561080957600080fd5b61081586828701610767565b9150509250925092565b80356001600160a01b038116811461083657600080fd5b919050565b6000806040838503121561084e57600080fd5b6108578361081f565b915060208301356001600160401b0381111561087257600080fd5b8301601f8101851361088357600080fd5b610892858235602084016106ef565b9150509250929050565b60005b838110156108b757818101518382015260200161089f565b50506000910152565b600081518084526108d881602086016020860161089c565b601f01601f19169290920160200192915050565b60208152600061078760208301846108c0565b60006020828403121561091157600080fd5b6107878261081f565b60006001820161093a57634e487b7160e01b600052601160045260246000fd5b5060010190565b6000825161095381846020870161089c565b9190910192915050565b60408152600061097060408301856108c0565b828103602084015261098281856108c0565b95945050505050565b60006020828403121561099d57600080fd5b5051919050565b6020808252600d908201526c476f7665726e6f72206f6e6c7960981b60408201526060019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220824b519bc278f6320d49ad83ae79b1c15de9785d55c72ae6d946281532e8e72264736f6c634300081c0033", - "devdoc": { - "details": "A contract to maintain a registry of dispute templates.", - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "DisputeTemplate(uint256,string,string,string)": { - "details": "To be emitted when a new dispute template is created.", - "params": { - "_templateData": "The template data.", - "_templateDataMappings": "The data mappings.", - "_templateId": "The identifier of the dispute template.", - "_templateTag": "An optional tag for the dispute template, such as \"registration\" or \"removal\"." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor of the contract.", - "params": { - "_governor": "The new governor." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "initialize(address)": { - "details": "Initializer", - "params": { - "_governor": "Governor of the contract." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setDisputeTemplate(string,string,string)": { - "details": "Registers a new dispute template.", - "params": { - "_templateData": "The data of the template.", - "_templateDataMappings": "The data mappings of the template.", - "_templateTag": "The tag of the template (optional)." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "governor": { - "details": "The governor of the contract." - }, - "templates": { - "details": "The number of templates." - }, - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "Dispute Template Registry", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 10943, - "contract": "src/arbitration/DisputeTemplateRegistry.sol:DisputeTemplateRegistry", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 10946, - "contract": "src/arbitration/DisputeTemplateRegistry.sol:DisputeTemplateRegistry", - "label": "templates", - "offset": 0, - "slot": "1", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry_Proxy.json deleted file mode 100644 index 3e0b2d2e5..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x42d5be81f24d29079665466f5d2c1e1f90e14658916610f60650f9fddb9756c0", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f", - "transactionIndex": 1, - "gasUsed": "175512", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000800000000000000000000000080000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x4d8dc758475b63a2fe98693450ba52528c06e78722207f8bc258d0ac9e2843f8", - "transactionHash": "0x42d5be81f24d29079665466f5d2c1e1f90e14658916610f60650f9fddb9756c0", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 175286171, - "transactionHash": "0x42d5be81f24d29079665466f5d2c1e1f90e14658916610f60650f9fddb9756c0", - "address": "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x4d8dc758475b63a2fe98693450ba52528c06e78722207f8bc258d0ac9e2843f8" - } - ], - "blockNumber": 175286171, - "cumulativeGasUsed": "175512", - "status": 1, - "byzantium": true - }, - "args": [ - "0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"DisputeTemplateRegistryProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220c5a63c370bd1e5c29d148b45ecb1c6ba27ace4fde028c998100ed1a65bdeedc564736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220c5a63c370bd1e5c29d148b45ecb1c6ba27ace4fde028c998100ed1a65bdeedc564736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule.json b/contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule.json deleted file mode 100644 index 844ea365d..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "address": "0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_party", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "_evidence", - "type": "string" - } - ], - "name": "Evidence", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_evidence", - "type": "string" - } - ], - "name": "submitEvidence", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x78c07b515b03fa357981a5cd203bed46a67dabc443979509d74169f6c3d58163", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49", - "transactionIndex": 4, - "gasUsed": "175478", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000800000100000000000000000080000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7029cf6539ff491fb7da410a08e2aa25b6907c4ee30825984f246a548cda84c9", - "transactionHash": "0x78c07b515b03fa357981a5cd203bed46a67dabc443979509d74169f6c3d58163", - "logs": [ - { - "transactionIndex": 4, - "blockNumber": 175286065, - "transactionHash": "0x78c07b515b03fa357981a5cd203bed46a67dabc443979509d74169f6c3d58163", - "address": "0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 9, - "blockHash": "0x7029cf6539ff491fb7da410a08e2aa25b6907c4ee30825984f246a548cda84c9" - } - ], - "blockNumber": 175286065, - "cumulativeGasUsed": "644953", - "status": 1, - "byzantium": true - }, - "args": [ - "0x450Aa35da0ad8B282C5d910254055651417C2200", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"EvidenceModuleProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220fbfd4692b0a069d62b438e1b0eef66c33d7285b74fd57f4afd10271ab81b1e3864736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220fbfd4692b0a069d62b438e1b0eef66c33d7285b74fd57f4afd10271ab81b1e3864736f6c634300081c0033", - "execute": { - "methodName": "initialize", - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59" - ] - }, - "implementation": "0x450Aa35da0ad8B282C5d910254055651417C2200", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule_Implementation.json deleted file mode 100644 index c92765f17..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule_Implementation.json +++ /dev/null @@ -1,352 +0,0 @@ -{ - "address": "0x450Aa35da0ad8B282C5d910254055651417C2200", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "_party", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "_evidence", - "type": "string" - } - ], - "name": "Evidence", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_evidence", - "type": "string" - } - ], - "name": "submitEvidence", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xb91b3c71dfdbe338ad948e9818898f1aca58119080c2de59c3487839e32378ba", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x450Aa35da0ad8B282C5d910254055651417C2200", - "transactionIndex": 2, - "gasUsed": "576709", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000010000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xbeedbabfb8c0a84bc0fff0e4578c98482a0141146d446283697311b5f3a1117f", - "transactionHash": "0xb91b3c71dfdbe338ad948e9818898f1aca58119080c2de59c3487839e32378ba", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 175286061, - "transactionHash": "0xb91b3c71dfdbe338ad948e9818898f1aca58119080c2de59c3487839e32378ba", - "address": "0x450Aa35da0ad8B282C5d910254055651417C2200", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 4, - "blockHash": "0xbeedbabfb8c0a84bc0fff0e4578c98482a0141146d446283697311b5f3a1117f" - } - ], - "blockNumber": 175286061, - "cumulativeGasUsed": "905683", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_party\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_evidence\",\"type\":\"string\"}],\"name\":\"Evidence\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_evidence\",\"type\":\"string\"}],\"name\":\"submitEvidence\",\"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\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Evidence(uint256,address,string)\":{\"details\":\"To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations).\",\"params\":{\"_evidence\":\"Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\",\"_externalDisputeID\":\"Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right external dispute ID.\",\"_party\":\"The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initialize(address)\":{\"details\":\"Initializer.\",\"params\":{\"_governor\":\"The governor's address.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"submitEvidence(uint256,string)\":{\"details\":\"Submits evidence for a dispute.\",\"params\":{\"_evidence\":\"Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\",\"_externalDisputeID\":\"Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right evidence group ID.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"Evidence Module\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/evidence/EvidenceModule.sol\":\"EvidenceModule\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/evidence/EvidenceModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"../interfaces/IArbitratorV2.sol\\\";\\nimport \\\"../interfaces/IEvidence.sol\\\";\\nimport \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/// @title Evidence Module\\ncontract EvidenceModule is IEvidence, Initializable, UUPSProxiable {\\n string public constant override version = \\\"0.8.0\\\";\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor of the contract.\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer.\\n /// @param _governor The governor's address.\\n function initialize(address _governor) external reinitializer(1) {\\n governor = _governor;\\n }\\n\\n function initialize2() external reinitializer(2) {\\n // NOP\\n }\\n\\n // ************************ //\\n // * Governance * //\\n // ************************ //\\n\\n /**\\n * @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n /// @dev Submits evidence for a dispute.\\n /// @param _externalDisputeID Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right evidence group ID.\\n /// @param _evidence Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\\n function submitEvidence(uint256 _externalDisputeID, string calldata _evidence) external {\\n emit Evidence(_externalDisputeID, msg.sender, _evidence);\\n }\\n}\\n\",\"keccak256\":\"0x0655c61ec47d3a2e086dd5f74f5e4a1edc6384a2384a682738a01d3f755d6676\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IEvidence.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title IEvidence\\ninterface IEvidence {\\n /// @dev To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations).\\n /// @param _externalDisputeID Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right external dispute ID.\\n /// @param _party The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party.\\n /// @param _evidence Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\\n event Evidence(uint256 indexed _externalDisputeID, address indexed _party, string _evidence);\\n}\\n\",\"keccak256\":\"0xf901e232e15cb4ce322864ae66a499900791bc1bbe98e5e58106bc6349b6e16d\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516109006100fc6000396000818161024801528181610271015261046e01526109006000f3fe6080604052600436106100605760003560e01c80630c340a2414610065578063472abf68146100a25780634f1ef286146100b957806352d1902d146100cc57806354fd4d50146100ef578063a6a7f0eb1461012d578063c4d66de81461014d575b600080fd5b34801561007157600080fd5b50600054610085906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ae57600080fd5b506100b761016d565b005b6100b76100c736600461068a565b610234565b3480156100d857600080fd5b506100e1610461565b604051908152602001610099565b3480156100fb57600080fd5b50610120604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100999190610775565b34801561013957600080fd5b506100b76101483660046107a8565b6104bf565b34801561015957600080fd5b506100b7610168366004610824565b610508565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff16806101b6575080546001600160401b03808416911610155b156101d35760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b61023d826105f0565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806102bb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102af6000805160206108ab8339815191525490565b6001600160a01b031614155b156102d95760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610333575060408051601f3d908101601f1916820190925261033091810190610846565b60015b61036057604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206108ab833981519152811461039157604051632a87526960e21b815260048101829052602401610357565b6000805160206108ab8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a281511561045c576000836001600160a01b0316836040516103f8919061085f565b600060405180830381855af49150503d8060008114610433576040519150601f19603f3d011682016040523d82523d6000602084013e610438565b606091505b505090508061045a576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104ac5760405163703e46dd60e11b815260040160405180910390fd5b506000805160206108ab83398151915290565b336001600160a01b0316837f39935cf45244bc296a03d6aef1cf17779033ee27090ce9c68d432367ce10699684846040516104fb92919061087b565b60405180910390a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff1680610551575080546001600160401b03808416911610155b1561056e5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6000546001600160a01b031633146106555760405162461bcd60e51b815260206004820152602260248201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6044820152613c9760f11b6064820152608401610357565b50565b80356001600160a01b038116811461066f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561069d57600080fd5b6106a683610658565b915060208301356001600160401b038111156106c157600080fd5b8301601f810185136106d257600080fd5b80356001600160401b038111156106eb576106eb610674565b604051601f8201601f19908116603f011681016001600160401b038111828210171561071957610719610674565b60405281815282820160200187101561073157600080fd5b816020840160208301376000602083830101528093505050509250929050565b60005b8381101561076c578181015183820152602001610754565b50506000910152565b6020815260008251806020840152610794816040850160208701610751565b601f01601f19169190910160400192915050565b6000806000604084860312156107bd57600080fd5b8335925060208401356001600160401b038111156107da57600080fd5b8401601f810186136107eb57600080fd5b80356001600160401b0381111561080157600080fd5b86602082840101111561081357600080fd5b939660209190910195509293505050565b60006020828403121561083657600080fd5b61083f82610658565b9392505050565b60006020828403121561085857600080fd5b5051919050565b60008251610871818460208701610751565b9190910192915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220628145de46593bc4870fe957425a4010d1b9984623ab37ad87d6400f11f2884264736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106100605760003560e01c80630c340a2414610065578063472abf68146100a25780634f1ef286146100b957806352d1902d146100cc57806354fd4d50146100ef578063a6a7f0eb1461012d578063c4d66de81461014d575b600080fd5b34801561007157600080fd5b50600054610085906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ae57600080fd5b506100b761016d565b005b6100b76100c736600461068a565b610234565b3480156100d857600080fd5b506100e1610461565b604051908152602001610099565b3480156100fb57600080fd5b50610120604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100999190610775565b34801561013957600080fd5b506100b76101483660046107a8565b6104bf565b34801561015957600080fd5b506100b7610168366004610824565b610508565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff16806101b6575080546001600160401b03808416911610155b156101d35760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b61023d826105f0565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806102bb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102af6000805160206108ab8339815191525490565b6001600160a01b031614155b156102d95760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610333575060408051601f3d908101601f1916820190925261033091810190610846565b60015b61036057604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206108ab833981519152811461039157604051632a87526960e21b815260048101829052602401610357565b6000805160206108ab8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a281511561045c576000836001600160a01b0316836040516103f8919061085f565b600060405180830381855af49150503d8060008114610433576040519150601f19603f3d011682016040523d82523d6000602084013e610438565b606091505b505090508061045a576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104ac5760405163703e46dd60e11b815260040160405180910390fd5b506000805160206108ab83398151915290565b336001600160a01b0316837f39935cf45244bc296a03d6aef1cf17779033ee27090ce9c68d432367ce10699684846040516104fb92919061087b565b60405180910390a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff1680610551575080546001600160401b03808416911610155b1561056e5760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6000546001600160a01b031633146106555760405162461bcd60e51b815260206004820152602260248201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6044820152613c9760f11b6064820152608401610357565b50565b80356001600160a01b038116811461066f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561069d57600080fd5b6106a683610658565b915060208301356001600160401b038111156106c157600080fd5b8301601f810185136106d257600080fd5b80356001600160401b038111156106eb576106eb610674565b604051601f8201601f19908116603f011681016001600160401b038111828210171561071957610719610674565b60405281815282820160200187101561073157600080fd5b816020840160208301376000602083830101528093505050509250929050565b60005b8381101561076c578181015183820152602001610754565b50506000910152565b6020815260008251806020840152610794816040850160208701610751565b601f01601f19169190910160400192915050565b6000806000604084860312156107bd57600080fd5b8335925060208401356001600160401b038111156107da57600080fd5b8401601f810186136107eb57600080fd5b80356001600160401b0381111561080157600080fd5b86602082840101111561081357600080fd5b939660209190910195509293505050565b60006020828403121561083657600080fd5b61083f82610658565b9392505050565b60006020828403121561085857600080fd5b5051919050565b60008251610871818460208701610751565b9190910192915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220628145de46593bc4870fe957425a4010d1b9984623ab37ad87d6400f11f2884264736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "Evidence(uint256,address,string)": { - "details": "To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations).", - "params": { - "_evidence": "Stringified evidence object, example: '{\"name\" : \"Justification\", \"description\" : \"Description\", \"fileURI\" : \"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\"}'.", - "_externalDisputeID": "Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right external dispute ID.", - "_party": "The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "initialize(address)": { - "details": "Initializer.", - "params": { - "_governor": "The governor's address." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "submitEvidence(uint256,string)": { - "details": "Submits evidence for a dispute.", - "params": { - "_evidence": "Stringified evidence object, example: '{\"name\" : \"Justification\", \"description\" : \"Description\", \"fileURI\" : \"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\"}'.", - "_externalDisputeID": "Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right evidence group ID." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "Evidence Module", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 24479, - "contract": "src/arbitration/evidence/EvidenceModule.sol:EvidenceModule", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule_Proxy.json deleted file mode 100644 index 2731e09d5..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x78c07b515b03fa357981a5cd203bed46a67dabc443979509d74169f6c3d58163", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49", - "transactionIndex": 4, - "gasUsed": "175478", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000800000100000000000000000080000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7029cf6539ff491fb7da410a08e2aa25b6907c4ee30825984f246a548cda84c9", - "transactionHash": "0x78c07b515b03fa357981a5cd203bed46a67dabc443979509d74169f6c3d58163", - "logs": [ - { - "transactionIndex": 4, - "blockNumber": 175286065, - "transactionHash": "0x78c07b515b03fa357981a5cd203bed46a67dabc443979509d74169f6c3d58163", - "address": "0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 9, - "blockHash": "0x7029cf6539ff491fb7da410a08e2aa25b6907c4ee30825984f246a548cda84c9" - } - ], - "blockNumber": 175286065, - "cumulativeGasUsed": "644953", - "status": 1, - "byzantium": true - }, - "args": [ - "0x450Aa35da0ad8B282C5d910254055651417C2200", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"EvidenceModuleProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220fbfd4692b0a069d62b438e1b0eef66c33d7285b74fd57f4afd10271ab81b1e3864736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220fbfd4692b0a069d62b438e1b0eef66c33d7285b74fd57f4afd10271ab81b1e3864736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCore.json b/contracts/deployments/arbitrumSepoliaDevnet/KlerosCore.json deleted file mode 100644 index 4d742fa0e..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCore.json +++ /dev/null @@ -1,2056 +0,0 @@ -{ - "address": "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "AppealPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "CannotDisableClassicDK", - "type": "error" - }, - { - "inputs": [], - "name": "CommitPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitNotSupportedByCourt", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitOnly", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "DisputePeriodIsFinal", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeStillDrawing", - "type": "error" - }, - { - "inputs": [], - "name": "EvidenceNotPassedAndNotAppeal", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GuardianOrGovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDisputKitParent", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "MinStakeLowerThanParentCourt", - "type": "error" - }, - { - "inputs": [], - "name": "MustSupportDisputeKitClassic", - "type": "error" - }, - { - "inputs": [], - "name": "NotEvidencePeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotExecutionPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "SortitionModuleOnly", - "type": "error" - }, - { - "inputs": [], - "name": "StakingInTooManyCourts", - "type": "error" - }, - { - "inputs": [], - "name": "StakingLessThanCourtMinStake", - "type": "error" - }, - { - "inputs": [], - "name": "StakingNotPossibleInThisCourt", - "type": "error" - }, - { - "inputs": [], - "name": "StakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "StakingZeroWhenNoStake", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnstakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "inputs": [], - "name": "UnsupportedDisputeKit", - "type": "error" - }, - { - "inputs": [], - "name": "VotePeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "WhenNotPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WhenPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WrongDisputeKitIndex", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "DisputeKitCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "DisputeKitEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_fromDisputeKitID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_toDisputeKitID", - "type": "uint256" - } - ], - "name": "DisputeKitJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "Draw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreBase.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "addNewDisputeKit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_guardian", - "type": "address" - } - ], - "name": "changeGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - } - ], - "name": "changeJurorProsecutionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputeKits", - "outputs": [ - { - "internalType": "contract IDisputeKit", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreBase.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "lastPeriodChange", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "uint256", - "name": "nbDrawnJurors", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256[]", - "name": "_disputeKitIDs", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "enableDisputeKits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputeKitsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getPnkAtStakePerJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "disputeKitID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkAtStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVotes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "repartitions", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkPenalties", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "drawnJurors", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumPnkRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "drawIterations", - "type": "uint256" - } - ], - "internalType": "struct KlerosCoreBase.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "guardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - }, - { - "internalType": "contract IDisputeKit", - "name": "_disputeKit", - "type": "address" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModuleAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "isDisputeKitJumping", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - } - ], - "name": "isSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorProsecutionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "passPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "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": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStakeBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "contract ISortitionModule", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x0ae7adc55a2c6b31434c898d9a8dafc2a6e074bed9b39bd33e484141a8adbf2d", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "transactionIndex": 2, - "gasUsed": "579894", - "logsBloom": "0x00000000000000000000000020000000000008000000000000000000020000000000000000000000000008000000000000000200000000000000000000040000000000000000000000000000000000000000000000040000000000000000000000000400020000000000000010000800402000000000000000000000000004000000800000000000000800000000000000000000000080000000000004000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000060000000001000000200000000000000000000000000000000000000000000000000", - "blockHash": "0xc9efac5f4036a1285e678e1a2b602cf6dd86473dec70415d18d97ae37652644b", - "transactionHash": "0x0ae7adc55a2c6b31434c898d9a8dafc2a6e074bed9b39bd33e484141a8adbf2d", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 175286093, - "transactionHash": "0x0ae7adc55a2c6b31434c898d9a8dafc2a6e074bed9b39bd33e484141a8adbf2d", - "address": "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "topics": [ - "0x44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb2", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x000000000000000000000000eeebbbff8f377dcfc7d4f7876c531db0d22720e1" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0xc9efac5f4036a1285e678e1a2b602cf6dd86473dec70415d18d97ae37652644b" - }, - { - "transactionIndex": 2, - "blockNumber": 175286093, - "transactionHash": "0x0ae7adc55a2c6b31434c898d9a8dafc2a6e074bed9b39bd33e484141a8adbf2d", - "address": "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "topics": [ - "0x550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee6", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 2, - "blockHash": "0xc9efac5f4036a1285e678e1a2b602cf6dd86473dec70415d18d97ae37652644b" - }, - { - "transactionIndex": 2, - "blockNumber": 175286093, - "transactionHash": "0x0ae7adc55a2c6b31434c898d9a8dafc2a6e074bed9b39bd33e484141a8adbf2d", - "address": "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "topics": [ - "0xb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc79", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001" - ], - "data": "0x", - "logIndex": 3, - "blockHash": "0xc9efac5f4036a1285e678e1a2b602cf6dd86473dec70415d18d97ae37652644b" - }, - { - "transactionIndex": 2, - "blockNumber": 175286093, - "transactionHash": "0x0ae7adc55a2c6b31434c898d9a8dafc2a6e074bed9b39bd33e484141a8adbf2d", - "address": "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 4, - "blockHash": "0xc9efac5f4036a1285e678e1a2b602cf6dd86473dec70415d18d97ae37652644b" - } - ], - "blockNumber": 175286093, - "cumulativeGasUsed": "626786", - "status": 1, - "byzantium": true - }, - "args": [ - "0x0d91F523fA287A74698A0e6Cd6A2436E91b9BEB9", - "0x7b4f3cc5000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c5900000000000000000000000034b944d42cacfc8266955d07a80181d2054aa2250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeebbbff8f377dcfc7d4f7876c531db0d22720e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000002000000000000000000000000006f24a90fbbeabb2b4343bb9c1ed8ee6acaa5066300000000000000000000000000000000000000000000000000000000000000010500000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 2, - "solcInputHash": "55ee2edfcfbef3e6f4c10ec53a4be5f5", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"KlerosCoreProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122013d7994215e0250a3caf5a61db41d7e3f7d36bd4d6c352ddb4eb5213b4783ea264736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122013d7994215e0250a3caf5a61db41d7e3f7d36bd4d6c352ddb4eb5213b4783ea264736f6c634300081c0033", - "execute": { - "methodName": "reinitialize", - "args": [ - "0x3829A2486d53ee984a0ca2D76552715726b77138" - ] - }, - "implementation": "0xaBf1AA1D08F98ED800938B1B086d0904c5BF4f0E", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreRuler.json b/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreRuler.json deleted file mode 100644 index c3a355de9..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreRuler.json +++ /dev/null @@ -1,1622 +0,0 @@ -{ - "address": "0x0630e4248a17b506809009F5D88E2f5bEE584c83", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOrInstructorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NoRulerSet", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulerOnly", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "RulingModeNotSet", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum KlerosCoreRuler.RulingMode", - "name": "mode", - "type": "uint8" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "name": "AutoRuled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreRuler.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_oldRuler", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_newRuler", - "type": "address" - } - ], - "name": "RulerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "components": [ - { - "internalType": "enum KlerosCoreRuler.RulingMode", - "name": "rulingMode", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "presetRuling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "presetTied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "presetOverridden", - "type": "bool" - } - ], - "indexed": false, - "internalType": "struct KlerosCoreRuler.RulerSettings", - "name": "_settings", - "type": "tuple" - } - ], - "name": "RulerSettingsChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "_jump", - "type": "bool" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_jump", - "type": "bool" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "internalType": "address", - "name": "_newRuler", - "type": "address" - } - ], - "name": "changeRuler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_presetRuling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_presetTied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_presetOverridden", - "type": "bool" - } - ], - "name": "changeRulingModeToAutomaticPreset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "changeRulingModeToAutomaticRandom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "changeRulingModeToManual", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreRuler.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getNextDisputeID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - } - ], - "internalType": "struct KlerosCoreRuler.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "arbitrable", - "type": "address" - } - ], - "name": "rulers", - "outputs": [ - { - "internalType": "address", - "name": "ruler", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "name": "rulingResults", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "arbitrable", - "type": "address" - } - ], - "name": "settings", - "outputs": [ - { - "internalType": "enum KlerosCoreRuler.RulingMode", - "name": "rulingMode", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "presetRuling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "presetTied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "presetOverridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0xc503704bbd721158002b2f03148150f54a934741b23574787474588322d1d5f8", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x0630e4248a17b506809009F5D88E2f5bEE584c83", - "transactionIndex": 1, - "gasUsed": "310077", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000100004000000000000000000000000000040008000000000000000000000000020000000000000080000800000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000060000000000000000000000000000000000000000000000000000000000042000000", - "blockHash": "0xaa9f9cf50b84c74628f2df98dc1e1c090427a181fafc9d1b6b8f5ff17f49e475", - "transactionHash": "0xc503704bbd721158002b2f03148150f54a934741b23574787474588322d1d5f8", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 175286718, - "transactionHash": "0xc503704bbd721158002b2f03148150f54a934741b23574787474588322d1d5f8", - "address": "0x0630e4248a17b506809009F5D88E2f5bEE584c83", - "topics": [ - "0x0c907a651f88974ed0d9423aacc8b998c40eedf39920e2c3bdae0adcc486a761", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 0, - "blockHash": "0xaa9f9cf50b84c74628f2df98dc1e1c090427a181fafc9d1b6b8f5ff17f49e475" - }, - { - "transactionIndex": 1, - "blockNumber": 175286718, - "transactionHash": "0xc503704bbd721158002b2f03148150f54a934741b23574787474588322d1d5f8", - "address": "0x0630e4248a17b506809009F5D88E2f5bEE584c83", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 1, - "blockHash": "0xaa9f9cf50b84c74628f2df98dc1e1c090427a181fafc9d1b6b8f5ff17f49e475" - } - ], - "blockNumber": 175286718, - "cumulativeGasUsed": "310077", - "status": 1, - "byzantium": true - }, - "args": [ - "0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF", - "0x05d3177d000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c5900000000000000000000000034b944d42cacfc8266955d07a80181d2054aa22500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000010" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"KlerosCoreRulerProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212204d82e24ac13242090d48f2411d7306e8cf3dde46882ce606cf3b6aafa5d3ba9c64736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212204d82e24ac13242090d48f2411d7306e8cf3dde46882ce606cf3b6aafa5d3ba9c64736f6c634300081c0033", - "execute": { - "methodName": "initialize", - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0x34B944D42cAcfC8266955D07A80181D2054aa225", - [ - 0, - 10000, - "100000000000000000", - 16 - ] - ] - }, - "implementation": "0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreRuler_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreRuler_Implementation.json deleted file mode 100644 index 06c58197d..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreRuler_Implementation.json +++ /dev/null @@ -1,2246 +0,0 @@ -{ - "address": "0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOrInstructorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NoRulerSet", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulerOnly", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "RulingModeNotSet", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum KlerosCoreRuler.RulingMode", - "name": "mode", - "type": "uint8" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "name": "AutoRuled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreRuler.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_oldRuler", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_newRuler", - "type": "address" - } - ], - "name": "RulerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "components": [ - { - "internalType": "enum KlerosCoreRuler.RulingMode", - "name": "rulingMode", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "presetRuling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "presetTied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "presetOverridden", - "type": "bool" - } - ], - "indexed": false, - "internalType": "struct KlerosCoreRuler.RulerSettings", - "name": "_settings", - "type": "tuple" - } - ], - "name": "RulerSettingsChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "_jump", - "type": "bool" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_jump", - "type": "bool" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "internalType": "address", - "name": "_newRuler", - "type": "address" - } - ], - "name": "changeRuler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_presetRuling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_presetTied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "_presetOverridden", - "type": "bool" - } - ], - "name": "changeRulingModeToAutomaticPreset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "changeRulingModeToAutomaticRandom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "changeRulingModeToManual", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreRuler.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getNextDisputeID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - } - ], - "internalType": "struct KlerosCoreRuler.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "arbitrable", - "type": "address" - } - ], - "name": "rulers", - "outputs": [ - { - "internalType": "address", - "name": "ruler", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "name": "rulingResults", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitrableV2", - "name": "arbitrable", - "type": "address" - } - ], - "name": "settings", - "outputs": [ - { - "internalType": "enum KlerosCoreRuler.RulingMode", - "name": "rulingMode", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "presetRuling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "presetTied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "presetOverridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x839a753ac2abfc5ab785467340ba05842cdc78e8904b2e5a73b33ca81dd02df5", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF", - "transactionIndex": 3, - "gasUsed": "3008714", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000008000000", - "blockHash": "0x9963c13972d1ac6da95bb5b070149a78dcd17a022685fc34f4d20d9c1b10834d", - "transactionHash": "0x839a753ac2abfc5ab785467340ba05842cdc78e8904b2e5a73b33ca81dd02df5", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 175286714, - "transactionHash": "0x839a753ac2abfc5ab785467340ba05842cdc78e8904b2e5a73b33ca81dd02df5", - "address": "0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 6, - "blockHash": "0x9963c13972d1ac6da95bb5b070149a78dcd17a022685fc34f4d20d9c1b10834d" - } - ], - "blockNumber": 175286714, - "cumulativeGasUsed": "3687929", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AppealFeesNotEnough\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ArbitrationFeesNotEnough\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeNotAppealable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GovernorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GovernorOrInstructorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidForkingCourtAsParent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoRulerSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RulerOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RulingAlreadyExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RulingModeNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsuccessfulCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"AcceptedFeeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"AppealDecision\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"AppealPossible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum KlerosCoreRuler.RulingMode\",\"name\":\"mode\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"name\":\"AutoRuled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"CourtCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_fromCourtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_toCourtID\",\"type\":\"uint96\"}],\"name\":\"CourtJump\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"CourtModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_pnkAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"LeftoverRewardSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"NewCurrencyRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum KlerosCoreRuler.Period\",\"name\":\"_period\",\"type\":\"uint8\"}],\"name\":\"NewPeriod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldRuler\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newRuler\",\"type\":\"address\"}],\"name\":\"RulerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum KlerosCoreRuler.RulingMode\",\"name\":\"rulingMode\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"presetRuling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"presetTied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"presetOverridden\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct KlerosCoreRuler.RulerSettings\",\"name\":\"_settings\",\"type\":\"tuple\"}],\"name\":\"RulerSettingsChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_degreeOfCoherency\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_pnkAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_feeAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"TokenAndETHShift\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_jump\",\"type\":\"bool\"}],\"name\":\"appeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_jump\",\"type\":\"bool\"}],\"name\":\"appealCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"changeAcceptedFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"changeCourtParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"changeCurrencyRates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_pinakion\",\"type\":\"address\"}],\"name\":\"changePinakion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newRuler\",\"type\":\"address\"}],\"name\":\"changeRuler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_presetRuling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_presetTied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"_presetOverridden\",\"type\":\"bool\"}],\"name\":\"changeRulingModeToAutomaticPreset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"changeRulingModeToAutomaticRandom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"changeRulingModeToManual\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountInEth\",\"type\":\"uint256\"}],\"name\":\"convertEthToTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"courts\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"createCourt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"currencyRates\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"feePaymentAccepted\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"rateInEth\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"rateDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"courtID\",\"type\":\"uint96\"},{\"internalType\":\"contract IArbitrableV2\",\"name\":\"arbitrated\",\"type\":\"address\"},{\"internalType\":\"enum KlerosCoreRuler.Period\",\"name\":\"period\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"ruled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"name\":\"executeRuling\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextDisputeID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalFeesForJurors\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sumFeeRewardPaid\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"internalType\":\"struct KlerosCoreRuler.Round\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"getTimesPerPeriod\",\"outputs\":[{\"internalType\":\"uint256[4]\",\"name\":\"timesPerPeriod\",\"type\":\"uint256[4]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_pinakion\",\"type\":\"address\"},{\"internalType\":\"uint256[4]\",\"name\":\"_courtParameters\",\"type\":\"uint256[4]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pinakion\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitrableV2\",\"name\":\"arbitrable\",\"type\":\"address\"}],\"name\":\"rulers\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"ruler\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"name\":\"rulingResults\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitrableV2\",\"name\":\"arbitrable\",\"type\":\"address\"}],\"name\":\"settings\",\"outputs\":[{\"internalType\":\"enum KlerosCoreRuler.RulingMode\",\"name\":\"rulingMode\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"presetRuling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"presetTied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"presetOverridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"AcceptedFeeToken(address,bool)\":{\"details\":\"To be emitted when an ERC20 token is added or removed as a method to pay fees.\",\"params\":{\"_accepted\":\"Whether the token is accepted or not.\",\"_token\":\"The ERC20 token.\"}},\"DisputeCreation(uint256,address)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_arbitrable\":\"The contract which created the dispute.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"NewCurrencyRate(address,uint64,uint8)\":{\"details\":\"To be emitted when the fee for a particular ERC20 token is updated.\",\"params\":{\"_feeToken\":\"The ERC20 token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrable\":\"The arbitrable receiving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"appeal(uint256,uint256,bytes,bool)\":{\"details\":\"Appeals the ruling of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_jump\":\"Whether to jump to the parent court or not.\"}},\"appealCost(uint256,bool)\":{\"details\":\"Gets the cost of appealing a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_jump\":\"Whether to jump to the parent court or not.\"},\"returns\":{\"cost\":\"The appeal cost.\"}},\"arbitrationCost(bytes)\":{\"details\":\"Compute the cost of arbitration denominated in ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\"},\"returns\":{\"cost\":\"The arbitration cost in ETH.\"}},\"arbitrationCost(bytes,address)\":{\"details\":\"Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeToken\":\"The ERC20 token used to pay fees.\"},\"returns\":{\"cost\":\"The arbitration cost in `_feeToken`.\"}},\"changeAcceptedFeeTokens(address,bool)\":{\"details\":\"Changes the supported fee tokens.\",\"params\":{\"_accepted\":\"Whether the token is supported or not as a method of fee payment.\",\"_feeToken\":\"The fee token.\"}},\"changeCurrencyRates(address,uint64,uint8)\":{\"details\":\"Changes the currency rate of a fee token.\",\"params\":{\"_feeToken\":\"The fee token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"changePinakion(address)\":{\"details\":\"Changes the `pinakion` storage variable.\",\"params\":{\"_pinakion\":\"The new value for the `pinakion` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createCourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4])\":{\"details\":\"Creates a court under a specified parent court.\",\"params\":{\"_alpha\":\"The `alpha` property value of the court.\",\"_feeForJuror\":\"The `feeForJuror` property value of the court.\",\"_hiddenVotes\":\"The `hiddenVotes` property value of the court.\",\"_jurorsForCourtJump\":\"The `jurorsForCourtJump` property value of the court.\",\"_minStake\":\"The `minStake` property value of the court.\",\"_parent\":\"The `parent` property value of the court.\",\"_timesPerPeriod\":\"The `timesPerPeriod` property value of the court.\"}},\"createDispute(uint256,bytes)\":{\"details\":\"Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"createDispute(uint256,bytes,address,uint256)\":{\"details\":\"Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeAmount\":\"Amount of the ERC20 token used to pay fees.\",\"_feeToken\":\"The ERC20 token used to pay fees.\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"execute(uint256,uint256)\":{\"details\":\"Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_round\":\"The appeal round.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"executeRuling(uint256,uint256,bool,bool)\":{\"details\":\"Executes a specified dispute's ruling.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"getNumberOfVotes(uint256)\":{\"details\":\"Gets the number of votes permitted for the specified dispute in the latest round.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"initialize(address,address,uint256[4])\":{\"details\":\"Initializer (constructor equivalent for upgradable contracts).\",\"params\":{\"_courtParameters\":\"Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\",\"_governor\":\"The governor's address.\",\"_pinakion\":\"The address of the token contract.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"KlerosCoreRuler Core arbitrator contract for development and testing purposes.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/devtools/KlerosCoreRuler.sol\":\"KlerosCoreRuler\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/devtools/KlerosCoreRuler.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitratorV2.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../../libraries/SafeERC20.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreRuler\\n/// Core arbitrator contract for development and testing purposes.\\ncontract KlerosCoreRuler is IArbitratorV2, UUPSProxiable, Initializable {\\n using SafeERC20 for IERC20;\\n\\n string public constant override version = \\\"0.8.0\\\";\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum RulingMode {\\n uninitialized,\\n manual, // executeRuling() is called manually.\\n automaticRandom, // The ruling is given randomly automatically.\\n automaticPreset // The ruling is given automatically with a preset value.\\n }\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct RulerSettings {\\n RulingMode rulingMode; // The ruling mode of the arbitrator.\\n uint256 presetRuling; // The ruling to give in case of automatic ruling mode.\\n bool presetTied; // Whether the ruling is tied or not.\\n bool presetOverridden; // Whether the ruling is overridden or not.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n struct RulingResult {\\n uint256 ruling;\\n bool tied;\\n bool overridden;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n IERC20 public pinakion; // The Pinakion token contract.\\n Court[] public courts; // The courts.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n mapping(IArbitrableV2 arbitrable => address ruler) public rulers; // The ruler of each arbitrable contract.\\n mapping(IArbitrableV2 arbitrable => RulerSettings) public settings; // The settings of each arbitrable contract.\\n mapping(uint256 disputeID => RulingResult) public rulingResults; // The ruling results of each dispute.\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event CourtCreated(\\n uint256 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event AutoRuled(\\n IArbitrableV2 indexed _arbitrable,\\n RulingMode indexed mode,\\n uint256 indexed _disputeID,\\n uint256 _ruling,\\n bool tied,\\n bool overridden\\n );\\n event RulerSettingsChanged(IArbitrableV2 indexed _arbitrable, RulerSettings _settings);\\n event RulerChanged(IArbitrableV2 indexed _arbitrable, address indexed _oldRuler, address indexed _newRuler);\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n function initialize(\\n address _governor,\\n IERC20 _pinakion,\\n uint256[4] memory _courtParameters\\n ) external reinitializer(1) {\\n governor = _governor;\\n pinakion = _pinakion;\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = false;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = [0, 0, 0, 0];\\n\\n emit CourtCreated(\\n 1,\\n court.parent,\\n court.hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n court.timesPerPeriod\\n );\\n }\\n\\n function initialize2() external reinitializer(2) {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /* @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n courtID,\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function changeRulingModeToManual(IArbitrableV2 _arbitrable) external {\\n if (rulers[_arbitrable] == address(0)) rulers[_arbitrable] = msg.sender;\\n if (rulers[_arbitrable] != msg.sender) revert RulerOnly();\\n\\n delete settings[_arbitrable];\\n RulerSettings storage arbitratedSettings = settings[_arbitrable];\\n arbitratedSettings.rulingMode = RulingMode.manual;\\n emit RulerSettingsChanged(_arbitrable, arbitratedSettings);\\n }\\n\\n function changeRulingModeToAutomaticRandom(IArbitrableV2 _arbitrable) external {\\n if (rulers[_arbitrable] == address(0)) rulers[_arbitrable] = msg.sender;\\n if (rulers[_arbitrable] != msg.sender) revert RulerOnly();\\n\\n delete settings[_arbitrable];\\n RulerSettings storage arbitratedSettings = settings[_arbitrable];\\n arbitratedSettings.rulingMode = RulingMode.automaticRandom;\\n emit RulerSettingsChanged(_arbitrable, arbitratedSettings);\\n }\\n\\n function changeRulingModeToAutomaticPreset(\\n IArbitrableV2 _arbitrable,\\n uint256 _presetRuling,\\n bool _presetTied,\\n bool _presetOverridden\\n ) external {\\n if (rulers[_arbitrable] == address(0)) rulers[_arbitrable] = msg.sender;\\n if (rulers[_arbitrable] != msg.sender) revert RulerOnly();\\n\\n delete settings[_arbitrable];\\n RulerSettings storage arbitratedSettings = settings[_arbitrable];\\n arbitratedSettings.rulingMode = RulingMode.automaticPreset;\\n arbitratedSettings.presetRuling = _presetRuling;\\n arbitratedSettings.presetTied = _presetTied;\\n arbitratedSettings.presetOverridden = _presetOverridden;\\n emit RulerSettingsChanged(_arbitrable, arbitratedSettings);\\n }\\n\\n function changeRuler(IArbitrableV2 _arbitrable, address _newRuler) external {\\n if (rulers[_arbitrable] != msg.sender) revert RulerOnly();\\n rulers[_arbitrable] = _newRuler;\\n emit RulerChanged(_arbitrable, msg.sender, _newRuler);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal returns (uint256 disputeID) {\\n (uint96 courtID, , ) = _unpackExtraData(_extraData);\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n\\n Round storage round = dispute.rounds.push();\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n _autoRule(disputeID, _numberOfChoices);\\n\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n function _autoRule(uint256 _disputeID, uint256 _numberOfChoices) internal {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 roundID = dispute.rounds.length - 1;\\n RulerSettings storage arbitratedSettings = settings[dispute.arbitrated];\\n if (arbitratedSettings.rulingMode == RulingMode.uninitialized) revert RulingModeNotSet();\\n if (arbitratedSettings.rulingMode == RulingMode.manual) {\\n // NOP\\n } else if (arbitratedSettings.rulingMode == RulingMode.automaticPreset) {\\n emit AutoRuled(\\n dispute.arbitrated,\\n RulingMode.automaticPreset,\\n _disputeID,\\n arbitratedSettings.presetRuling,\\n arbitratedSettings.presetTied,\\n arbitratedSettings.presetOverridden\\n );\\n this.executeRuling(\\n _disputeID,\\n arbitratedSettings.presetRuling,\\n arbitratedSettings.presetTied,\\n arbitratedSettings.presetOverridden\\n );\\n this.execute(_disputeID, roundID);\\n } else if (arbitratedSettings.rulingMode == RulingMode.automaticRandom) {\\n uint256 pseudoRandomNumber = uint256(keccak256(abi.encodePacked(blockhash(block.number - 1)))) %\\n _numberOfChoices; // Not secure but it's just a dev tool for testing, sue me\\n bool tied = pseudoRandomNumber & 4 == 0;\\n bool overridden = pseudoRandomNumber & 2 == 0;\\n emit AutoRuled(\\n dispute.arbitrated,\\n RulingMode.automaticRandom,\\n _disputeID,\\n pseudoRandomNumber,\\n tied,\\n overridden\\n );\\n this.executeRuling(_disputeID, pseudoRandomNumber, tied, overridden);\\n this.execute(_disputeID, roundID);\\n }\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _jump Whether to jump to the parent court or not.\\n function appeal(\\n uint256 _disputeID,\\n uint256 _numberOfChoices,\\n bytes memory /*_extraData*/,\\n bool _jump\\n ) external payable {\\n if (msg.value < appealCost(_disputeID, _jump)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (rulers[dispute.arbitrated] != msg.sender) revert RulerOnly();\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n uint96 newCourtID = dispute.courtID;\\n\\n if (_jump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n\\n Round storage extraRound = dispute.rounds.push();\\n extraRound.totalFeesForJurors = msg.value;\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n\\n _autoRule(_disputeID, _numberOfChoices);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n function execute(uint256 _disputeID, uint256 _round) external {\\n Dispute storage dispute = disputes[_disputeID];\\n address account = rulers[dispute.arbitrated];\\n if (account == address(0)) revert NoRulerSet();\\n\\n // Transfer the fees back to the ruler\\n Round storage round = dispute.rounds[_round];\\n uint256 feeReward = round.totalFeesForJurors;\\n round.sumFeeRewardPaid += feeReward;\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(account).send(feeReward);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(account, feeReward);\\n }\\n emit TokenAndETHShift(account, _disputeID, _round, 1, int256(0), int256(feeReward), round.feeToken);\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID, uint256 _ruling, bool tied, bool overridden) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n if (msg.sender != rulers[dispute.arbitrated] && msg.sender != address(this)) revert RulerOnly();\\n\\n rulingResults[_disputeID] = RulingResult(_ruling, tied, overridden);\\n dispute.ruled = true;\\n dispute.arbitrated.rule(_disputeID, _ruling);\\n\\n emit Ruling(dispute.arbitrated, _disputeID, _ruling);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _unpackExtraData(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _jump Whether to jump to the parent court or not.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID, bool _jump) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n uint256 nbVotes = round.totalFeesForJurors / court.feeForJuror;\\n if (_jump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n RulingResult storage rulingResult = rulingResults[_disputeID];\\n return (rulingResult.ruling, rulingResult.tied, rulingResult.overridden);\\n }\\n\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n function getNextDisputeID() external view returns (uint256) {\\n return disputes.length;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n return dispute.rounds[dispute.rounds.length - 1].totalFeesForJurors / court.feeForJuror;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _unpackExtraData(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GovernorOrInstructorOnly();\\n error RulerOnly();\\n error NoRulerSet();\\n error RulingModeNotSet();\\n error UnsuccessfulCall();\\n error InvalidForkingCourtAsParent();\\n error ArbitrationFeesNotEnough();\\n error TokenNotAccepted();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error RulingAlreadyExecuted();\\n error TransferFailed();\\n}\\n\",\"keccak256\":\"0xd9ba64c9b6a282221dccb80ffc28f8870f256c8119467d9d371e303a8ae3e57a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516134fc6100fc60003960008181611485015281816114ae01526116ab01526134fc6000f3fe60806040526004361061021f5760003560e01c80635601eaea1161012e578063d98493f6116100ab578063e6d49cdf1161006f578063e6d49cdf146107b0578063f6506db4146107f0578063f7434ea914610810578063fbf405b014610830578063fc6f8f161461085057600080fd5b8063d98493f6146106ee578063d9ee095f1461070e578063db8a173b14610721578063e2373ab314610736578063e4c0aaf41461079057600080fd5b806382d02237116100f257806382d022371461063057806386541b24146106505780638a9bb02a14610670578063c13517e1146106bb578063c71f4253146106ce57600080fd5b80635601eaea14610580578063564a565d146105a05780636736b70c146105d0578063751accd0146105f05780637934c0be1461061057600080fd5b80632177470c116101bc578063472abf6811610180578063472abf68146104e557806347cdcc1d146104fa5780634f1ef2861461051a57806352d1902d1461052d57806354fd4d501461054257600080fd5b80632177470c14610422578063379f0a17146104425780633cfd118414610478578063405d51ae146104a557806343818d66146104c557600080fd5b8062f5822c1461022457806301fcf74d146102465780630219da791461027957806305d3177d146102ec5780630c340a241461030c5780630e3993a4146103445780631860592b146103645780631c3db16d146103845780631f5a0dd2146103c1575b600080fd5b34801561023057600080fd5b5061024461023f366004612a50565b610870565b005b34801561025257600080fd5b50610266610261366004612a82565b6108bd565b6040519081526020015b60405180910390f35b34801561028557600080fd5b506102c4610294366004612a50565b60046020526000908152604090205460ff808216916001600160401b0361010082041691600160481b9091041683565b6040805193151584526001600160401b03909216602084015260ff1690820152606001610270565b3480156102f857600080fd5b50610244610307366004612b35565b610a19565b34801561031857600080fd5b5060005461032c906001600160a01b031681565b6040516001600160a01b039091168152602001610270565b34801561035057600080fd5b5061024461035f366004612a50565b610c72565b34801561037057600080fd5b5061026661037f366004612b7d565b610d7d565b34801561039057600080fd5b506103a461039f366004612ba9565b610dd7565b604080519384529115156020840152151590820152606001610270565b3480156103cd57600080fd5b506103e16103dc366004612ba9565b610e01565b604080516001600160601b0390981688529515156020880152948601939093526060850191909152608084015260a0830152151560c082015260e001610270565b34801561042e57600080fd5b5061024461043d366004612bc2565b610e60565b34801561044e57600080fd5b5061032c61045d366004612a50565b6005602052600090815260409020546001600160a01b031681565b34801561048457600080fd5b50610498610493366004612c28565b611028565b6040516102709190612c66565b3480156104b157600080fd5b506102446104c0366004612c74565b611092565b3480156104d157600080fd5b506102446104e0366004612a50565b611252565b3480156104f157600080fd5b50610244611317565b34801561050657600080fd5b50610244610515366004612ce2565b6113de565b610244610528366004612d9d565b611471565b34801561053957600080fd5b5061026661169e565b34801561054e57600080fd5b50610573604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516102709190612e10565b34801561058c57600080fd5b5061024461059b366004612e43565b6116fc565b3480156105ac57600080fd5b506105c06105bb366004612ba9565b61186e565b6040516102709493929190612e8f565b3480156105dc57600080fd5b506102446105eb366004612ecc565b6118c3565b3480156105fc57600080fd5b5061024461060b366004612f04565b6119d4565b34801561061c57600080fd5b5061024461062b366004612f5c565b611a7e565b34801561063c57600080fd5b5061024461064b366004612f8a565b611afd565b34801561065c57600080fd5b5061024461066b366004612c74565b611bba565b34801561067c57600080fd5b5061069061068b366004612e43565b611cae565b604080518251815260208084015190820152918101516001600160a01b031690820152606001610270565b6102666106c9366004612fe7565b611d5b565b3480156106da57600080fd5b506102666106e9366004612ba9565b611d93565b3480156106fa57600080fd5b5061026661070936600461305f565b611e3d565b61024461071c3660046130aa565b611e82565b34801561072d57600080fd5b50600354610266565b34801561074257600080fd5b50610780610751366004612a50565b60066020526000908152604090208054600182015460029092015460ff91821692918181169161010090041684565b6040516102709493929190613111565b34801561079c57600080fd5b506102446107ab366004612a50565b6120cf565b3480156107bc57600080fd5b506103a46107cb366004612ba9565b6007602052600090815260409020805460019091015460ff8082169161010090041683565b3480156107fc57600080fd5b5061026661080b36600461313c565b61211c565b34801561081c57600080fd5b5061026661082b3660046131a2565b612200565b34801561083c57600080fd5b5060015461032c906001600160a01b031681565b34801561085c57600080fd5b5061026661086b366004612ba9565b61224c565b6000546001600160a01b0316331461089b5760405163c383977560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080600384815481106108d3576108d36131d6565b60009182526020822060026003909202019081018054919350906108f990600190613202565b81548110610909576109096131d6565b6000918252602082208454600280546003909402909201945090916001600160601b0390911690811061093e5761093e6131d6565b90600052602060002090600b02019050600081600401548360000154610964919061322b565b905085156109e75783546001600160601b03166000190161098e576001600160ff1b039450610a0f565b61099981600261323f565b6109a4906001613256565b82546002805490916001600160601b03169081106109c4576109c46131d6565b90600052602060002090600b0201600401546109e0919061323f565b9450610a0f565b6109f281600261323f565b6109fd906001613256565b8260040154610a0c919061323f565b94505b5050505092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff1680610a62575080546001600160401b03808416911610155b15610a7f5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155600080546001600160a01b038088166001600160a01b0319928316178355600180549188169190921617815560028054818452808201909155600b9101027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160601b031916815590604051908082528060200260200182016040528015610b38578160200160208202803683370190505b508051610b4f91600184019160209091019061295d565b50805460ff60601b19168155835160028201556020808501516003830155604080860151600480850191909155606080880151600586015582516080810184526000808252948101859052928301849052820192909252610bb5916006840191906129a8565b50805484516020860151604080880151606089015191516001600160601b038616956001957f0c907a651f88974ed0d9423aacc8b998c40eedf39920e2c3bdae0adcc486a76195610c1b95600160601b90930460ff1694919390929060068b0190613269565b60405180910390a350805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001600160a01b0381811660009081526005602052604090205416610cba576001600160a01b038116600090815260056020526040902080546001600160a01b031916331790555b6001600160a01b03818116600090815260056020526040902054163314610cf4576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b0381166000908152600660205260408120805460ff191680825560018083019390935560028201805461ffff19169055909190829082805b0217905550816001600160a01b03167ffe3754ab712090753cf700ac7b99f8a5e0f9c69b698312c2cfd0236b852f83f482604051610d7191906132c4565b60405180910390a25050565b6001600160a01b03821660009081526004602052604081205461010081046001600160401b031690610dba90600160481b900460ff16600a6133f0565b610dc4908461323f565b610dce919061322b565b90505b92915050565b6000818152600760205260409020805460019091015460ff808216916101009004165b9193909250565b60028181548110610e1157600080fd5b60009182526020909120600b9091020180546002820154600383015460048401546005850154600a909501546001600160601b038516965060ff600160601b9095048516959394929391921687565b600060038581548110610e7557610e756131d6565b906000526020600020906003020190508060010160019054906101000a900460ff1615610eb55760405163c977f8d360e01b815260040160405180910390fd5b8054600160601b90046001600160a01b03908116600090815260056020526040902054163314801590610ee85750333014155b15610f06576040516301627e2760e61b815260040160405180910390fd5b60408051606081018252858152841515602080830191825285151583850190815260008a815260079092529084902092518355905160019283018054925161ffff1990931691151561ff001990811692909217610100931515840217905591840180549092161790558154905163188d362b60e11b81526004810187905260248101869052600160601b9091046001600160a01b03169063311a6c5690604401600060405180830381600087803b158015610fc057600080fd5b505af1158015610fd4573d6000803e3d6000fd5b50508254604051878152889350600160601b9091046001600160a01b031691507f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a35050505050565b6110306129db565b6002826001600160601b03168154811061104c5761104c6131d6565b6000918252602090912060408051608081019182905292600b029091016006019060049082845b8154815260200190600101908083116110735750505050509050919050565b6000546001600160a01b031633146110bd5760405163c383977560e01b815260040160405180910390fd5b6001600160601b0387166110e457604051631ef4f64960e01b815260040160405180910390fd5b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600b82020180546001600160601b0319166001600160601b038b16178155909160405190808252806020026020018201604052801561115d578160200160208202803683370190505b50805161117491600184019160209091019061295d565b50805460ff60601b1916600160601b8915150217815560028101879055600381018690556004808201869055600582018590556111b790600683019085906129f9565b506002896001600160601b0316815481106111d4576111d46131d6565b600091825260208083206001600b909302018201805492830181558352909120018290556040516001600160601b038a169083907f0c907a651f88974ed0d9423aacc8b998c40eedf39920e2c3bdae0adcc486a7619061123f908c908c908c908c908c908c906133ff565b60405180910390a3505050505050505050565b6001600160a01b038181166000908152600560205260409020541661129a576001600160a01b038116600090815260056020526040902080546001600160a01b031916331790555b6001600160a01b038181166000908152600560205260409020541633146112d4576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b0381166000908152600660205260408120805460ff19168082556001808301939093556002808301805461ffff19169055919283919083610d33565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff1680611360575080546001600160401b03808416911610155b1561137d5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6001600160a01b03828116600090815260056020526040902054163314611418576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b0382811660008181526005602052604080822080546001600160a01b0319169486169485179055513392917ff512a4524e61d860055823df1f2a5f33de24eb2a03dc3de501015ad501d4e36f91a45050565b61147a8261227b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114f857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114ec6000805160206134a78339815191525490565b6001600160a01b031614155b156115165760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611570575060408051601f3d908101601f1916820190925261156d91810190613432565b60015b61159d57604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206134a783398151915281146115ce57604051632a87526960e21b815260048101829052602401611594565b6000805160206134a78339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611699576000836001600160a01b031683604051611635919061344b565b600060405180830381855af49150503d8060008114611670576040519150601f19603f3d011682016040523d82523d6000602084013e611675565b606091505b5050905080611697576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116e95760405163703e46dd60e11b815260040160405180910390fd5b506000805160206134a783398151915290565b600060038381548110611711576117116131d6565b60009182526020808320600390920290910180546001600160a01b03600160601b90910481168452600590925260409092205491925016806117665760405163f4612fe560e01b815260040160405180910390fd5b600082600201848154811061177d5761177d6131d6565b90600052602060002090600302019050600081600001549050808260010160008282546117aa9190613256565b909155505060028201546001600160a01b03166117ec576040516001600160a01b0384169082156108fc029083906000818181858888f1935050505050611807565b6002820154611805906001600160a01b031684836122a9565b505b60028201546040805160018152600060208201529081018390526001600160a01b03918216606082015286918891908616907f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e79060800160405180910390a4505050505050565b6003818154811061187e57600080fd5b6000918252602090912060039091020180546001909101546001600160601b0382169250600160601b9091046001600160a01b03169060ff8082169161010090041684565b6001600160a01b038481166000908152600560205260409020541661190b576001600160a01b038416600090815260056020526040902080546001600160a01b031916331790555b6001600160a01b03848116600090815260056020526040902054163314611945576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b03841660008181526006602052604090819020805460028201805460ff1990921660031783556001830188905561ffff1990911686151561ff001916176101008615150217905590519091907ffe3754ab712090753cf700ac7b99f8a5e0f9c69b698312c2cfd0236b852f83f4906119c59084906132c4565b60405180910390a25050505050565b6000546001600160a01b031633146119ff5760405163c383977560e01b815260040160405180910390fd5b6000836001600160a01b03168383604051611a1a919061344b565b60006040518083038185875af1925050503d8060008114611a57576040519150601f19603f3d011682016040523d82523d6000602084013e611a5c565b606091505b5050905080611697576040516322092f2f60e11b815260040160405180910390fd5b6000546001600160a01b03163314611aa95760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f541615e167511d757a7067a700eb54431b256bb458dfdce0ac58bf2ed0aefd4491a35050565b6000546001600160a01b03163314611b285760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038316600081815260046020908152604091829020805469ffffffffffffffffff0019166101006001600160401b03881690810260ff60481b191691909117600160481b60ff8816908102919091179092558351908152918201527fe6996b7f03e9bd02228b99d3d946932e3197f505f60542c4cfbc919441d8a4e6910160405180910390a2505050565b6000546001600160a01b03163314611be55760405163c383977560e01b815260040160405180910390fd5b60006002886001600160601b031681548110611c0357611c036131d6565b60009182526020909120600b9091020160028101879055805460ff60601b1916600160601b8915150217815560038101869055600480820186905560058201859055909150611c5890600683019084906129f9565b50876001600160601b03167f709b1f5fda58af9a4f52dacd1ec404840a8148455700cce155a2bd8cf127ef1a888888888888604051611c9c969594939291906133ff565b60405180910390a25050505050505050565b611cdb6040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b60038381548110611cee57611cee6131d6565b90600052602060002090600302016002018281548110611d1057611d106131d6565b6000918252602091829020604080516060810182526003909302909101805483526001810154938301939093526002909201546001600160a01b031691810191909152905092915050565b6000611d6682612200565b341015611d8657604051630e3360f160e21b815260040160405180910390fd5b610dce8383600034612372565b60008060038381548110611da957611da96131d6565b600091825260208220600390910201805460028054929450916001600160601b03909116908110611ddc57611ddc6131d6565b90600052602060002090600b0201905080600401548260020160018460020180549050611e099190613202565b81548110611e1957611e196131d6565b906000526020600020906003020160000154611e35919061322b565b949350505050565b6000611e358261037f86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061220092505050565b611e8c84826108bd565b341015611eac57604051633191f8f160e01b815260040160405180910390fd5b600060038581548110611ec157611ec16131d6565b6000918252602080832060039092029091018054600160601b90046001600160a01b0390811684526005909252604090922054919250163314611f17576040516301627e2760e61b815260040160405180910390fd5b6003600182015460ff166004811115611f3257611f32612e65565b14611f50576040516337cdefcb60e21b815260040160405180910390fd5b80546001600160601b03168215612002576002816001600160601b031681548110611f7d57611f7d6131d6565b60009182526020909120600b909102015482546001600160601b03918216925016811461200257815460028301546001600160601b0390911690611fc390600190613202565b6040516001600160601b038416815288907f736e3f52761298c8c0823e1ebf482ed3c5ecb304f743d2d91a7c006e8e8d7a1f9060200160405180910390a45b81546001600160601b0319166001600160601b0382161782556001808301805460ff191690556002830180549182018155600090815260208120346003909302019182558354604051600160601b9091046001600160a01b03169189917f9c9b64db9e130f48381bf697abf638e73117dbfbfd7a4484f2da3ba188f4187d9190a3867f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b9160006040516120b49190613467565b60405180910390a26120c68787612467565b50505050505050565b6000546001600160a01b031633146120fa5760405163c383977560e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526004602052604081205460ff166121555760405163e51cf7bf60e01b815260040160405180910390fd5b612160858585611e3d565b82101561218057604051630e3360f160e21b815260040160405180910390fd5b6121956001600160a01b03841633308561280c565b6121b2576040516312171d8360e31b815260040160405180910390fd5b6121f68686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506123729050565b9695505050505050565b600080600061220e846128e8565b5091509150806002836001600160601b031681548110612230576122306131d6565b90600052602060002090600b020160040154611e35919061323f565b600060038281548110612261576122616131d6565b600091825260209091206002600390920201015492915050565b6000546001600160a01b031633146122a65760405163c383977560e01b815260040160405180910390fd5b50565b6040516001600160a01b03838116602483015260448201839052600091829182919087169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b17905251612306919061344b565b6000604051808303816000865af19150503d8060008114612343576040519150601f19603f3d011682016040523d82523d6000602084013e612348565b606091505b50915091508180156121f65750805115806121f65750808060200190518101906121f69190613475565b60008061237e856128e8565b505060038054600180820183556001600160601b03841633600160601b02177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8385029081019182557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d018054928301815560009081526020902091909302018681556002810180546001600160a01b0319166001600160a01b038a161790559094509192509061242f8489612467565b604051339085907f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a3505050949350505050565b60006003838154811061247c5761247c6131d6565b906000526020600020906003020190506000600182600201805490506124a29190613202565b8254600160601b90046001600160a01b03166000908152600660205260408120919250815460ff1660038111156124db576124db612e65565b036124f95760405163d8f2465160e01b815260040160405180910390fd5b6001815460ff16600381111561251157612511612e65565b14612805576003815460ff16600381111561252e5761252e612e65565b0361267d578460038454600184015460028501546040805192835260ff80831615156020850152610100909204909116151590820152600160601b9091046001600160a01b0316907f45c27c7ea7135714f09b069efa7497d57c38017d4e919c5535ba31dbd5b597e69060600160405180910390a46001810154600282015460405163085dd1c360e21b815260048101889052602481019290925260ff8082161515604484015261010090910416151560648201523090632177470c90608401600060405180830381600087803b15801561260857600080fd5b505af115801561261c573d6000803e3d6000fd5b5050604051632b00f57560e11b81526004810188905260248101859052309250635601eaea9150604401600060405180830381600087803b15801561266057600080fd5b505af1158015612674573d6000803e3d6000fd5b50505050612805565b6002815460ff16600381111561269557612695612e65565b03612805576000846126a8600143613202565b6040805191406020830152016040516020818303038152906040528051906020012060001c6126d79190613492565b90506004811615600280831615908890875460408051878152861515602082015285151591810191909152600160601b9091046001600160a01b0316907f45c27c7ea7135714f09b069efa7497d57c38017d4e919c5535ba31dbd5b597e69060600160405180910390a460405163085dd1c360e21b81526004810189905260248101849052821515604482015281151560648201523090632177470c90608401600060405180830381600087803b15801561279157600080fd5b505af11580156127a5573d6000803e3d6000fd5b5050604051632b00f57560e11b8152600481018b905260248101889052309250635601eaea9150604401600060405180830381600087803b1580156127e957600080fd5b505af11580156127fd573d6000803e3d6000fd5b505050505050505b5050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251612871919061344b565b6000604051808303816000865af19150503d80600081146128ae576040519150601f19603f3d011682016040523d82523d6000602084013e6128b3565b606091505b50915091508180156128dd5750805115806128dd5750808060200190518101906128dd9190613475565b979650505050505050565b6000806000604084511061294e575050506020810151604082015160608301516001600160601b038316158061292957506002546001600160601b03841610155b1561293357600192505b8160000361294057600391505b80612949575060015b610dfa565b50600193600393508492509050565b828054828255906000526020600020908101928215612998579160200282015b8281111561299857825182559160200191906001019061297d565b506129a4929150612a26565b5090565b8260048101928215612998579160200282015b82811115612998578251829060ff169055916020019190600101906129bb565b60405180608001604052806004906020820280368337509192915050565b8260048101928215612998579160200282018281111561299857825182559160200191906001019061297d565b5b808211156129a45760008155600101612a27565b6001600160a01b03811681146122a657600080fd5b600060208284031215612a6257600080fd5b8135612a6d81612a3b565b9392505050565b80151581146122a657600080fd5b60008060408385031215612a9557600080fd5b823591506020830135612aa781612a74565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612ad957600080fd5b604051608081016001600160401b0381118282101715612afb57612afb612ab2565b604052806080840185811115612b1057600080fd5b845b81811015612b2a578035835260209283019201612b12565b509195945050505050565b600080600060c08486031215612b4a57600080fd5b8335612b5581612a3b565b92506020840135612b6581612a3b565b9150612b748560408601612ac8565b90509250925092565b60008060408385031215612b9057600080fd5b8235612b9b81612a3b565b946020939093013593505050565b600060208284031215612bbb57600080fd5b5035919050565b60008060008060808587031215612bd857600080fd5b84359350602085013592506040850135612bf181612a74565b91506060850135612c0181612a74565b939692955090935050565b80356001600160601b0381168114612c2357600080fd5b919050565b600060208284031215612c3a57600080fd5b610dce82612c0c565b8060005b6004811015611697578151845260209384019390910190600101612c47565b60808101610dd18284612c43565b6000806000806000806000610140888a031215612c9057600080fd5b612c9988612c0c565b96506020880135612ca981612a74565b955060408801359450606088013593506080880135925060a08801359150612cd48960c08a01612ac8565b905092959891949750929550565b60008060408385031215612cf557600080fd5b8235612d0081612a3b565b91506020830135612aa781612a3b565b600082601f830112612d2157600080fd5b81356001600160401b03811115612d3a57612d3a612ab2565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612d6857612d68612ab2565b604052818152838201602001851015612d8057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612db057600080fd5b8235612dbb81612a3b565b915060208301356001600160401b03811115612dd657600080fd5b612de285828601612d10565b9150509250929050565b60005b83811015612e07578181015183820152602001612def565b50506000910152565b6020815260008251806020840152612e2f816040850160208701612dec565b601f01601f19169190910160400192915050565b60008060408385031215612e5657600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b60058110612e8b57612e8b612e65565b9052565b6001600160601b03851681526001600160a01b038416602082015260808101612ebb6040830185612e7b565b821515606083015295945050505050565b60008060008060808587031215612ee257600080fd5b8435612eed81612a3b565b9350602085013592506040850135612bf181612a74565b600080600060608486031215612f1957600080fd5b8335612f2481612a3b565b92506020840135915060408401356001600160401b03811115612f4657600080fd5b612f5286828701612d10565b9150509250925092565b60008060408385031215612f6f57600080fd5b8235612f7a81612a3b565b91506020830135612aa781612a74565b600080600060608486031215612f9f57600080fd5b8335612faa81612a3b565b925060208401356001600160401b0381168114612fc657600080fd5b9150604084013560ff81168114612fdc57600080fd5b809150509250925092565b60008060408385031215612ffa57600080fd5b8235915060208301356001600160401b03811115612dd657600080fd5b60008083601f84011261302957600080fd5b5081356001600160401b0381111561304057600080fd5b60208301915083602082850101111561305857600080fd5b9250929050565b60008060006040848603121561307457600080fd5b83356001600160401b0381111561308a57600080fd5b61309686828701613017565b9094509250506020840135612fdc81612a3b565b600080600080608085870312156130c057600080fd5b843593506020850135925060408501356001600160401b038111156130e457600080fd5b6130f087828801612d10565b9250506060850135612c0181612a74565b60048110612e8b57612e8b612e65565b6080810161311f8287613101565b602082019490945291151560408301521515606090910152919050565b60008060008060006080868803121561315457600080fd5b8535945060208601356001600160401b0381111561317157600080fd5b61317d88828901613017565b909550935050604086013561319181612a3b565b949793965091946060013592915050565b6000602082840312156131b457600080fd5b81356001600160401b038111156131ca57600080fd5b611e3584828501612d10565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610dd157610dd16131ec565b634e487b7160e01b600052601260045260246000fd5b60008261323a5761323a613215565b500490565b8082028115828204841417610dd157610dd16131ec565b80820180821115610dd157610dd16131ec565b600061012082019050871515825286602083015285604083015284606083015283608083015260a082018360005b60048110156132b6578154835260209092019160019182019101613297565b505050979650505050505050565b60006080820190506132da8260ff855416613101565b60018301546020830152600283015460ff81161515604084015260ff8160081c16151560608401525092915050565b6001815b600184111561334457808504811115613328576133286131ec565b600184161561333657908102905b60019390931c92800261330d565b935093915050565b60008261335b57506001610dd1565b8161336857506000610dd1565b816001811461337e5760028114613388576133a4565b6001915050610dd1565b60ff841115613399576133996131ec565b50506001821b610dd1565b5060208310610133831016604e8410600b84101617156133c7575081810a610dd1565b6133d46000198484613309565b80600019048211156133e8576133e86131ec565b029392505050565b6000610dce60ff84168361334c565b60006101208201905087151582528660208301528560408301528460608301528360808301526128dd60a0830184612c43565b60006020828403121561344457600080fd5b5051919050565b6000825161345d818460208701612dec565b9190910192915050565b60208101610dd18284612e7b565b60006020828403121561348757600080fd5b8151612a6d81612a74565b6000826134a1576134a1613215565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122052b3e255d0667dd5efed0f8be242f6164addb8fe52dfaf92a532eb62e35b66f364736f6c634300081c0033", - "deployedBytecode": "0x60806040526004361061021f5760003560e01c80635601eaea1161012e578063d98493f6116100ab578063e6d49cdf1161006f578063e6d49cdf146107b0578063f6506db4146107f0578063f7434ea914610810578063fbf405b014610830578063fc6f8f161461085057600080fd5b8063d98493f6146106ee578063d9ee095f1461070e578063db8a173b14610721578063e2373ab314610736578063e4c0aaf41461079057600080fd5b806382d02237116100f257806382d022371461063057806386541b24146106505780638a9bb02a14610670578063c13517e1146106bb578063c71f4253146106ce57600080fd5b80635601eaea14610580578063564a565d146105a05780636736b70c146105d0578063751accd0146105f05780637934c0be1461061057600080fd5b80632177470c116101bc578063472abf6811610180578063472abf68146104e557806347cdcc1d146104fa5780634f1ef2861461051a57806352d1902d1461052d57806354fd4d501461054257600080fd5b80632177470c14610422578063379f0a17146104425780633cfd118414610478578063405d51ae146104a557806343818d66146104c557600080fd5b8062f5822c1461022457806301fcf74d146102465780630219da791461027957806305d3177d146102ec5780630c340a241461030c5780630e3993a4146103445780631860592b146103645780631c3db16d146103845780631f5a0dd2146103c1575b600080fd5b34801561023057600080fd5b5061024461023f366004612a50565b610870565b005b34801561025257600080fd5b50610266610261366004612a82565b6108bd565b6040519081526020015b60405180910390f35b34801561028557600080fd5b506102c4610294366004612a50565b60046020526000908152604090205460ff808216916001600160401b0361010082041691600160481b9091041683565b6040805193151584526001600160401b03909216602084015260ff1690820152606001610270565b3480156102f857600080fd5b50610244610307366004612b35565b610a19565b34801561031857600080fd5b5060005461032c906001600160a01b031681565b6040516001600160a01b039091168152602001610270565b34801561035057600080fd5b5061024461035f366004612a50565b610c72565b34801561037057600080fd5b5061026661037f366004612b7d565b610d7d565b34801561039057600080fd5b506103a461039f366004612ba9565b610dd7565b604080519384529115156020840152151590820152606001610270565b3480156103cd57600080fd5b506103e16103dc366004612ba9565b610e01565b604080516001600160601b0390981688529515156020880152948601939093526060850191909152608084015260a0830152151560c082015260e001610270565b34801561042e57600080fd5b5061024461043d366004612bc2565b610e60565b34801561044e57600080fd5b5061032c61045d366004612a50565b6005602052600090815260409020546001600160a01b031681565b34801561048457600080fd5b50610498610493366004612c28565b611028565b6040516102709190612c66565b3480156104b157600080fd5b506102446104c0366004612c74565b611092565b3480156104d157600080fd5b506102446104e0366004612a50565b611252565b3480156104f157600080fd5b50610244611317565b34801561050657600080fd5b50610244610515366004612ce2565b6113de565b610244610528366004612d9d565b611471565b34801561053957600080fd5b5061026661169e565b34801561054e57600080fd5b50610573604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516102709190612e10565b34801561058c57600080fd5b5061024461059b366004612e43565b6116fc565b3480156105ac57600080fd5b506105c06105bb366004612ba9565b61186e565b6040516102709493929190612e8f565b3480156105dc57600080fd5b506102446105eb366004612ecc565b6118c3565b3480156105fc57600080fd5b5061024461060b366004612f04565b6119d4565b34801561061c57600080fd5b5061024461062b366004612f5c565b611a7e565b34801561063c57600080fd5b5061024461064b366004612f8a565b611afd565b34801561065c57600080fd5b5061024461066b366004612c74565b611bba565b34801561067c57600080fd5b5061069061068b366004612e43565b611cae565b604080518251815260208084015190820152918101516001600160a01b031690820152606001610270565b6102666106c9366004612fe7565b611d5b565b3480156106da57600080fd5b506102666106e9366004612ba9565b611d93565b3480156106fa57600080fd5b5061026661070936600461305f565b611e3d565b61024461071c3660046130aa565b611e82565b34801561072d57600080fd5b50600354610266565b34801561074257600080fd5b50610780610751366004612a50565b60066020526000908152604090208054600182015460029092015460ff91821692918181169161010090041684565b6040516102709493929190613111565b34801561079c57600080fd5b506102446107ab366004612a50565b6120cf565b3480156107bc57600080fd5b506103a46107cb366004612ba9565b6007602052600090815260409020805460019091015460ff8082169161010090041683565b3480156107fc57600080fd5b5061026661080b36600461313c565b61211c565b34801561081c57600080fd5b5061026661082b3660046131a2565b612200565b34801561083c57600080fd5b5060015461032c906001600160a01b031681565b34801561085c57600080fd5b5061026661086b366004612ba9565b61224c565b6000546001600160a01b0316331461089b5760405163c383977560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080600384815481106108d3576108d36131d6565b60009182526020822060026003909202019081018054919350906108f990600190613202565b81548110610909576109096131d6565b6000918252602082208454600280546003909402909201945090916001600160601b0390911690811061093e5761093e6131d6565b90600052602060002090600b02019050600081600401548360000154610964919061322b565b905085156109e75783546001600160601b03166000190161098e576001600160ff1b039450610a0f565b61099981600261323f565b6109a4906001613256565b82546002805490916001600160601b03169081106109c4576109c46131d6565b90600052602060002090600b0201600401546109e0919061323f565b9450610a0f565b6109f281600261323f565b6109fd906001613256565b8260040154610a0c919061323f565b94505b5050505092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff1680610a62575080546001600160401b03808416911610155b15610a7f5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155600080546001600160a01b038088166001600160a01b0319928316178355600180549188169190921617815560028054818452808201909155600b9101027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160601b031916815590604051908082528060200260200182016040528015610b38578160200160208202803683370190505b508051610b4f91600184019160209091019061295d565b50805460ff60601b19168155835160028201556020808501516003830155604080860151600480850191909155606080880151600586015582516080810184526000808252948101859052928301849052820192909252610bb5916006840191906129a8565b50805484516020860151604080880151606089015191516001600160601b038616956001957f0c907a651f88974ed0d9423aacc8b998c40eedf39920e2c3bdae0adcc486a76195610c1b95600160601b90930460ff1694919390929060068b0190613269565b60405180910390a350805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001600160a01b0381811660009081526005602052604090205416610cba576001600160a01b038116600090815260056020526040902080546001600160a01b031916331790555b6001600160a01b03818116600090815260056020526040902054163314610cf4576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b0381166000908152600660205260408120805460ff191680825560018083019390935560028201805461ffff19169055909190829082805b0217905550816001600160a01b03167ffe3754ab712090753cf700ac7b99f8a5e0f9c69b698312c2cfd0236b852f83f482604051610d7191906132c4565b60405180910390a25050565b6001600160a01b03821660009081526004602052604081205461010081046001600160401b031690610dba90600160481b900460ff16600a6133f0565b610dc4908461323f565b610dce919061322b565b90505b92915050565b6000818152600760205260409020805460019091015460ff808216916101009004165b9193909250565b60028181548110610e1157600080fd5b60009182526020909120600b9091020180546002820154600383015460048401546005850154600a909501546001600160601b038516965060ff600160601b9095048516959394929391921687565b600060038581548110610e7557610e756131d6565b906000526020600020906003020190508060010160019054906101000a900460ff1615610eb55760405163c977f8d360e01b815260040160405180910390fd5b8054600160601b90046001600160a01b03908116600090815260056020526040902054163314801590610ee85750333014155b15610f06576040516301627e2760e61b815260040160405180910390fd5b60408051606081018252858152841515602080830191825285151583850190815260008a815260079092529084902092518355905160019283018054925161ffff1990931691151561ff001990811692909217610100931515840217905591840180549092161790558154905163188d362b60e11b81526004810187905260248101869052600160601b9091046001600160a01b03169063311a6c5690604401600060405180830381600087803b158015610fc057600080fd5b505af1158015610fd4573d6000803e3d6000fd5b50508254604051878152889350600160601b9091046001600160a01b031691507f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a35050505050565b6110306129db565b6002826001600160601b03168154811061104c5761104c6131d6565b6000918252602090912060408051608081019182905292600b029091016006019060049082845b8154815260200190600101908083116110735750505050509050919050565b6000546001600160a01b031633146110bd5760405163c383977560e01b815260040160405180910390fd5b6001600160601b0387166110e457604051631ef4f64960e01b815260040160405180910390fd5b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600b82020180546001600160601b0319166001600160601b038b16178155909160405190808252806020026020018201604052801561115d578160200160208202803683370190505b50805161117491600184019160209091019061295d565b50805460ff60601b1916600160601b8915150217815560028101879055600381018690556004808201869055600582018590556111b790600683019085906129f9565b506002896001600160601b0316815481106111d4576111d46131d6565b600091825260208083206001600b909302018201805492830181558352909120018290556040516001600160601b038a169083907f0c907a651f88974ed0d9423aacc8b998c40eedf39920e2c3bdae0adcc486a7619061123f908c908c908c908c908c908c906133ff565b60405180910390a3505050505050505050565b6001600160a01b038181166000908152600560205260409020541661129a576001600160a01b038116600090815260056020526040902080546001600160a01b031916331790555b6001600160a01b038181166000908152600560205260409020541633146112d4576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b0381166000908152600660205260408120805460ff19168082556001808301939093556002808301805461ffff19169055919283919083610d33565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff1680611360575080546001600160401b03808416911610155b1561137d5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6001600160a01b03828116600090815260056020526040902054163314611418576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b0382811660008181526005602052604080822080546001600160a01b0319169486169485179055513392917ff512a4524e61d860055823df1f2a5f33de24eb2a03dc3de501015ad501d4e36f91a45050565b61147a8261227b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114f857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114ec6000805160206134a78339815191525490565b6001600160a01b031614155b156115165760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611570575060408051601f3d908101601f1916820190925261156d91810190613432565b60015b61159d57604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206134a783398151915281146115ce57604051632a87526960e21b815260048101829052602401611594565b6000805160206134a78339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611699576000836001600160a01b031683604051611635919061344b565b600060405180830381855af49150503d8060008114611670576040519150601f19603f3d011682016040523d82523d6000602084013e611675565b606091505b5050905080611697576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116e95760405163703e46dd60e11b815260040160405180910390fd5b506000805160206134a783398151915290565b600060038381548110611711576117116131d6565b60009182526020808320600390920290910180546001600160a01b03600160601b90910481168452600590925260409092205491925016806117665760405163f4612fe560e01b815260040160405180910390fd5b600082600201848154811061177d5761177d6131d6565b90600052602060002090600302019050600081600001549050808260010160008282546117aa9190613256565b909155505060028201546001600160a01b03166117ec576040516001600160a01b0384169082156108fc029083906000818181858888f1935050505050611807565b6002820154611805906001600160a01b031684836122a9565b505b60028201546040805160018152600060208201529081018390526001600160a01b03918216606082015286918891908616907f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e79060800160405180910390a4505050505050565b6003818154811061187e57600080fd5b6000918252602090912060039091020180546001909101546001600160601b0382169250600160601b9091046001600160a01b03169060ff8082169161010090041684565b6001600160a01b038481166000908152600560205260409020541661190b576001600160a01b038416600090815260056020526040902080546001600160a01b031916331790555b6001600160a01b03848116600090815260056020526040902054163314611945576040516301627e2760e61b815260040160405180910390fd5b6001600160a01b03841660008181526006602052604090819020805460028201805460ff1990921660031783556001830188905561ffff1990911686151561ff001916176101008615150217905590519091907ffe3754ab712090753cf700ac7b99f8a5e0f9c69b698312c2cfd0236b852f83f4906119c59084906132c4565b60405180910390a25050505050565b6000546001600160a01b031633146119ff5760405163c383977560e01b815260040160405180910390fd5b6000836001600160a01b03168383604051611a1a919061344b565b60006040518083038185875af1925050503d8060008114611a57576040519150601f19603f3d011682016040523d82523d6000602084013e611a5c565b606091505b5050905080611697576040516322092f2f60e11b815260040160405180910390fd5b6000546001600160a01b03163314611aa95760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f541615e167511d757a7067a700eb54431b256bb458dfdce0ac58bf2ed0aefd4491a35050565b6000546001600160a01b03163314611b285760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038316600081815260046020908152604091829020805469ffffffffffffffffff0019166101006001600160401b03881690810260ff60481b191691909117600160481b60ff8816908102919091179092558351908152918201527fe6996b7f03e9bd02228b99d3d946932e3197f505f60542c4cfbc919441d8a4e6910160405180910390a2505050565b6000546001600160a01b03163314611be55760405163c383977560e01b815260040160405180910390fd5b60006002886001600160601b031681548110611c0357611c036131d6565b60009182526020909120600b9091020160028101879055805460ff60601b1916600160601b8915150217815560038101869055600480820186905560058201859055909150611c5890600683019084906129f9565b50876001600160601b03167f709b1f5fda58af9a4f52dacd1ec404840a8148455700cce155a2bd8cf127ef1a888888888888604051611c9c969594939291906133ff565b60405180910390a25050505050505050565b611cdb6040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b60038381548110611cee57611cee6131d6565b90600052602060002090600302016002018281548110611d1057611d106131d6565b6000918252602091829020604080516060810182526003909302909101805483526001810154938301939093526002909201546001600160a01b031691810191909152905092915050565b6000611d6682612200565b341015611d8657604051630e3360f160e21b815260040160405180910390fd5b610dce8383600034612372565b60008060038381548110611da957611da96131d6565b600091825260208220600390910201805460028054929450916001600160601b03909116908110611ddc57611ddc6131d6565b90600052602060002090600b0201905080600401548260020160018460020180549050611e099190613202565b81548110611e1957611e196131d6565b906000526020600020906003020160000154611e35919061322b565b949350505050565b6000611e358261037f86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061220092505050565b611e8c84826108bd565b341015611eac57604051633191f8f160e01b815260040160405180910390fd5b600060038581548110611ec157611ec16131d6565b6000918252602080832060039092029091018054600160601b90046001600160a01b0390811684526005909252604090922054919250163314611f17576040516301627e2760e61b815260040160405180910390fd5b6003600182015460ff166004811115611f3257611f32612e65565b14611f50576040516337cdefcb60e21b815260040160405180910390fd5b80546001600160601b03168215612002576002816001600160601b031681548110611f7d57611f7d6131d6565b60009182526020909120600b909102015482546001600160601b03918216925016811461200257815460028301546001600160601b0390911690611fc390600190613202565b6040516001600160601b038416815288907f736e3f52761298c8c0823e1ebf482ed3c5ecb304f743d2d91a7c006e8e8d7a1f9060200160405180910390a45b81546001600160601b0319166001600160601b0382161782556001808301805460ff191690556002830180549182018155600090815260208120346003909302019182558354604051600160601b9091046001600160a01b03169189917f9c9b64db9e130f48381bf697abf638e73117dbfbfd7a4484f2da3ba188f4187d9190a3867f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b9160006040516120b49190613467565b60405180910390a26120c68787612467565b50505050505050565b6000546001600160a01b031633146120fa5760405163c383977560e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526004602052604081205460ff166121555760405163e51cf7bf60e01b815260040160405180910390fd5b612160858585611e3d565b82101561218057604051630e3360f160e21b815260040160405180910390fd5b6121956001600160a01b03841633308561280c565b6121b2576040516312171d8360e31b815260040160405180910390fd5b6121f68686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506123729050565b9695505050505050565b600080600061220e846128e8565b5091509150806002836001600160601b031681548110612230576122306131d6565b90600052602060002090600b020160040154611e35919061323f565b600060038281548110612261576122616131d6565b600091825260209091206002600390920201015492915050565b6000546001600160a01b031633146122a65760405163c383977560e01b815260040160405180910390fd5b50565b6040516001600160a01b03838116602483015260448201839052600091829182919087169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b17905251612306919061344b565b6000604051808303816000865af19150503d8060008114612343576040519150601f19603f3d011682016040523d82523d6000602084013e612348565b606091505b50915091508180156121f65750805115806121f65750808060200190518101906121f69190613475565b60008061237e856128e8565b505060038054600180820183556001600160601b03841633600160601b02177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8385029081019182557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d018054928301815560009081526020902091909302018681556002810180546001600160a01b0319166001600160a01b038a161790559094509192509061242f8489612467565b604051339085907f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a3505050949350505050565b60006003838154811061247c5761247c6131d6565b906000526020600020906003020190506000600182600201805490506124a29190613202565b8254600160601b90046001600160a01b03166000908152600660205260408120919250815460ff1660038111156124db576124db612e65565b036124f95760405163d8f2465160e01b815260040160405180910390fd5b6001815460ff16600381111561251157612511612e65565b14612805576003815460ff16600381111561252e5761252e612e65565b0361267d578460038454600184015460028501546040805192835260ff80831615156020850152610100909204909116151590820152600160601b9091046001600160a01b0316907f45c27c7ea7135714f09b069efa7497d57c38017d4e919c5535ba31dbd5b597e69060600160405180910390a46001810154600282015460405163085dd1c360e21b815260048101889052602481019290925260ff8082161515604484015261010090910416151560648201523090632177470c90608401600060405180830381600087803b15801561260857600080fd5b505af115801561261c573d6000803e3d6000fd5b5050604051632b00f57560e11b81526004810188905260248101859052309250635601eaea9150604401600060405180830381600087803b15801561266057600080fd5b505af1158015612674573d6000803e3d6000fd5b50505050612805565b6002815460ff16600381111561269557612695612e65565b03612805576000846126a8600143613202565b6040805191406020830152016040516020818303038152906040528051906020012060001c6126d79190613492565b90506004811615600280831615908890875460408051878152861515602082015285151591810191909152600160601b9091046001600160a01b0316907f45c27c7ea7135714f09b069efa7497d57c38017d4e919c5535ba31dbd5b597e69060600160405180910390a460405163085dd1c360e21b81526004810189905260248101849052821515604482015281151560648201523090632177470c90608401600060405180830381600087803b15801561279157600080fd5b505af11580156127a5573d6000803e3d6000fd5b5050604051632b00f57560e11b8152600481018b905260248101889052309250635601eaea9150604401600060405180830381600087803b1580156127e957600080fd5b505af11580156127fd573d6000803e3d6000fd5b505050505050505b5050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251612871919061344b565b6000604051808303816000865af19150503d80600081146128ae576040519150601f19603f3d011682016040523d82523d6000602084013e6128b3565b606091505b50915091508180156128dd5750805115806128dd5750808060200190518101906128dd9190613475565b979650505050505050565b6000806000604084511061294e575050506020810151604082015160608301516001600160601b038316158061292957506002546001600160601b03841610155b1561293357600192505b8160000361294057600391505b80612949575060015b610dfa565b50600193600393508492509050565b828054828255906000526020600020908101928215612998579160200282015b8281111561299857825182559160200191906001019061297d565b506129a4929150612a26565b5090565b8260048101928215612998579160200282015b82811115612998578251829060ff169055916020019190600101906129bb565b60405180608001604052806004906020820280368337509192915050565b8260048101928215612998579160200282018281111561299857825182559160200191906001019061297d565b5b808211156129a45760008155600101612a27565b6001600160a01b03811681146122a657600080fd5b600060208284031215612a6257600080fd5b8135612a6d81612a3b565b9392505050565b80151581146122a657600080fd5b60008060408385031215612a9557600080fd5b823591506020830135612aa781612a74565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612ad957600080fd5b604051608081016001600160401b0381118282101715612afb57612afb612ab2565b604052806080840185811115612b1057600080fd5b845b81811015612b2a578035835260209283019201612b12565b509195945050505050565b600080600060c08486031215612b4a57600080fd5b8335612b5581612a3b565b92506020840135612b6581612a3b565b9150612b748560408601612ac8565b90509250925092565b60008060408385031215612b9057600080fd5b8235612b9b81612a3b565b946020939093013593505050565b600060208284031215612bbb57600080fd5b5035919050565b60008060008060808587031215612bd857600080fd5b84359350602085013592506040850135612bf181612a74565b91506060850135612c0181612a74565b939692955090935050565b80356001600160601b0381168114612c2357600080fd5b919050565b600060208284031215612c3a57600080fd5b610dce82612c0c565b8060005b6004811015611697578151845260209384019390910190600101612c47565b60808101610dd18284612c43565b6000806000806000806000610140888a031215612c9057600080fd5b612c9988612c0c565b96506020880135612ca981612a74565b955060408801359450606088013593506080880135925060a08801359150612cd48960c08a01612ac8565b905092959891949750929550565b60008060408385031215612cf557600080fd5b8235612d0081612a3b565b91506020830135612aa781612a3b565b600082601f830112612d2157600080fd5b81356001600160401b03811115612d3a57612d3a612ab2565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612d6857612d68612ab2565b604052818152838201602001851015612d8057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612db057600080fd5b8235612dbb81612a3b565b915060208301356001600160401b03811115612dd657600080fd5b612de285828601612d10565b9150509250929050565b60005b83811015612e07578181015183820152602001612def565b50506000910152565b6020815260008251806020840152612e2f816040850160208701612dec565b601f01601f19169190910160400192915050565b60008060408385031215612e5657600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b60058110612e8b57612e8b612e65565b9052565b6001600160601b03851681526001600160a01b038416602082015260808101612ebb6040830185612e7b565b821515606083015295945050505050565b60008060008060808587031215612ee257600080fd5b8435612eed81612a3b565b9350602085013592506040850135612bf181612a74565b600080600060608486031215612f1957600080fd5b8335612f2481612a3b565b92506020840135915060408401356001600160401b03811115612f4657600080fd5b612f5286828701612d10565b9150509250925092565b60008060408385031215612f6f57600080fd5b8235612f7a81612a3b565b91506020830135612aa781612a74565b600080600060608486031215612f9f57600080fd5b8335612faa81612a3b565b925060208401356001600160401b0381168114612fc657600080fd5b9150604084013560ff81168114612fdc57600080fd5b809150509250925092565b60008060408385031215612ffa57600080fd5b8235915060208301356001600160401b03811115612dd657600080fd5b60008083601f84011261302957600080fd5b5081356001600160401b0381111561304057600080fd5b60208301915083602082850101111561305857600080fd5b9250929050565b60008060006040848603121561307457600080fd5b83356001600160401b0381111561308a57600080fd5b61309686828701613017565b9094509250506020840135612fdc81612a3b565b600080600080608085870312156130c057600080fd5b843593506020850135925060408501356001600160401b038111156130e457600080fd5b6130f087828801612d10565b9250506060850135612c0181612a74565b60048110612e8b57612e8b612e65565b6080810161311f8287613101565b602082019490945291151560408301521515606090910152919050565b60008060008060006080868803121561315457600080fd5b8535945060208601356001600160401b0381111561317157600080fd5b61317d88828901613017565b909550935050604086013561319181612a3b565b949793965091946060013592915050565b6000602082840312156131b457600080fd5b81356001600160401b038111156131ca57600080fd5b611e3584828501612d10565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610dd157610dd16131ec565b634e487b7160e01b600052601260045260246000fd5b60008261323a5761323a613215565b500490565b8082028115828204841417610dd157610dd16131ec565b80820180821115610dd157610dd16131ec565b600061012082019050871515825286602083015285604083015284606083015283608083015260a082018360005b60048110156132b6578154835260209092019160019182019101613297565b505050979650505050505050565b60006080820190506132da8260ff855416613101565b60018301546020830152600283015460ff81161515604084015260ff8160081c16151560608401525092915050565b6001815b600184111561334457808504811115613328576133286131ec565b600184161561333657908102905b60019390931c92800261330d565b935093915050565b60008261335b57506001610dd1565b8161336857506000610dd1565b816001811461337e5760028114613388576133a4565b6001915050610dd1565b60ff841115613399576133996131ec565b50506001821b610dd1565b5060208310610133831016604e8410600b84101617156133c7575081810a610dd1565b6133d46000198484613309565b80600019048211156133e8576133e86131ec565b029392505050565b6000610dce60ff84168361334c565b60006101208201905087151582528660208301528560408301528460608301528360808301526128dd60a0830184612c43565b60006020828403121561344457600080fd5b5051919050565b6000825161345d818460208701612dec565b9190910192915050565b60208101610dd18284612e7b565b60006020828403121561348757600080fd5b8151612a6d81612a74565b6000826134a1576134a1613215565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122052b3e255d0667dd5efed0f8be242f6164addb8fe52dfaf92a532eb62e35b66f364736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "AcceptedFeeToken(address,bool)": { - "details": "To be emitted when an ERC20 token is added or removed as a method to pay fees.", - "params": { - "_accepted": "Whether the token is accepted or not.", - "_token": "The ERC20 token." - } - }, - "DisputeCreation(uint256,address)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_arbitrable": "The contract which created the dispute.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "NewCurrencyRate(address,uint64,uint8)": { - "details": "To be emitted when the fee for a particular ERC20 token is updated.", - "params": { - "_feeToken": "The ERC20 token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrable": "The arbitrable receiving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "appeal(uint256,uint256,bytes,bool)": { - "details": "Appeals the ruling of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute.", - "_jump": "Whether to jump to the parent court or not." - } - }, - "appealCost(uint256,bool)": { - "details": "Gets the cost of appealing a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute.", - "_jump": "Whether to jump to the parent court or not." - }, - "returns": { - "cost": "The appeal cost." - } - }, - "arbitrationCost(bytes)": { - "details": "Compute the cost of arbitration denominated in ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes)." - }, - "returns": { - "cost": "The arbitration cost in ETH." - } - }, - "arbitrationCost(bytes,address)": { - "details": "Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeToken": "The ERC20 token used to pay fees." - }, - "returns": { - "cost": "The arbitration cost in `_feeToken`." - } - }, - "changeAcceptedFeeTokens(address,bool)": { - "details": "Changes the supported fee tokens.", - "params": { - "_accepted": "Whether the token is supported or not as a method of fee payment.", - "_feeToken": "The fee token." - } - }, - "changeCurrencyRates(address,uint64,uint8)": { - "details": "Changes the currency rate of a fee token.", - "params": { - "_feeToken": "The fee token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "changePinakion(address)": { - "details": "Changes the `pinakion` storage variable.", - "params": { - "_pinakion": "The new value for the `pinakion` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createCourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4])": { - "details": "Creates a court under a specified parent court.", - "params": { - "_alpha": "The `alpha` property value of the court.", - "_feeForJuror": "The `feeForJuror` property value of the court.", - "_hiddenVotes": "The `hiddenVotes` property value of the court.", - "_jurorsForCourtJump": "The `jurorsForCourtJump` property value of the court.", - "_minStake": "The `minStake` property value of the court.", - "_parent": "The `parent` property value of the court.", - "_timesPerPeriod": "The `timesPerPeriod` property value of the court." - } - }, - "createDispute(uint256,bytes)": { - "details": "Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "createDispute(uint256,bytes,address,uint256)": { - "details": "Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeAmount": "Amount of the ERC20 token used to pay fees.", - "_feeToken": "The ERC20 token used to pay fees.", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "execute(uint256,uint256)": { - "details": "Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.", - "params": { - "_disputeID": "The ID of the dispute.", - "_round": "The appeal round." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "executeRuling(uint256,uint256,bool,bool)": { - "details": "Executes a specified dispute's ruling.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "getNumberOfVotes(uint256)": { - "details": "Gets the number of votes permitted for the specified dispute in the latest round.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "initialize(address,address,uint256[4])": { - "details": "Initializer (constructor equivalent for upgradable contracts).", - "params": { - "_courtParameters": "Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).", - "_governor": "The governor's address.", - "_pinakion": "The address of the token contract." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "KlerosCoreRuler Core arbitrator contract for development and testing purposes.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 19622, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 19625, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "pinakion", - "offset": 0, - "slot": "1", - "type": "t_contract(IERC20)2923" - }, - { - "astId": 19629, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "courts", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Court)19573_storage)dyn_storage" - }, - { - "astId": 19633, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "disputes", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(Dispute)19588_storage)dyn_storage" - }, - { - "astId": 19639, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "currencyRates", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_contract(IERC20)2923,t_struct(CurrencyRate)19603_storage)" - }, - { - "astId": 19644, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "rulers", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_contract(IArbitrableV2)25870,t_address)" - }, - { - "astId": 19650, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "settings", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_contract(IArbitrableV2)25870,t_struct(RulerSettings)19551_storage)" - }, - { - "astId": 19655, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "rulingResults", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_uint256,t_struct(RulingResult)19610_storage)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(Court)19573_storage)dyn_storage": { - "base": "t_struct(Court)19573_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreRuler.Court[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Dispute)19588_storage)dyn_storage": { - "base": "t_struct(Dispute)19588_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreRuler.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)19596_storage)dyn_storage": { - "base": "t_struct(Round)19596_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreRuler.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)4_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[4]", - "numberOfBytes": "128" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IArbitrableV2)25870": { - "encoding": "inplace", - "label": "contract IArbitrableV2", - "numberOfBytes": "20" - }, - "t_contract(IERC20)2923": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_enum(Period)19541": { - "encoding": "inplace", - "label": "enum KlerosCoreRuler.Period", - "numberOfBytes": "1" - }, - "t_enum(RulingMode)19535": { - "encoding": "inplace", - "label": "enum KlerosCoreRuler.RulingMode", - "numberOfBytes": "1" - }, - "t_mapping(t_contract(IArbitrableV2)25870,t_address)": { - "encoding": "mapping", - "key": "t_contract(IArbitrableV2)25870", - "label": "mapping(contract IArbitrableV2 => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_contract(IArbitrableV2)25870,t_struct(RulerSettings)19551_storage)": { - "encoding": "mapping", - "key": "t_contract(IArbitrableV2)25870", - "label": "mapping(contract IArbitrableV2 => struct KlerosCoreRuler.RulerSettings)", - "numberOfBytes": "32", - "value": "t_struct(RulerSettings)19551_storage" - }, - "t_mapping(t_contract(IERC20)2923,t_struct(CurrencyRate)19603_storage)": { - "encoding": "mapping", - "key": "t_contract(IERC20)2923", - "label": "mapping(contract IERC20 => struct KlerosCoreRuler.CurrencyRate)", - "numberOfBytes": "32", - "value": "t_struct(CurrencyRate)19603_storage" - }, - "t_mapping(t_uint256,t_struct(RulingResult)19610_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => struct KlerosCoreRuler.RulingResult)", - "numberOfBytes": "32", - "value": "t_struct(RulingResult)19610_storage" - }, - "t_struct(Court)19573_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreRuler.Court", - "members": [ - { - "astId": 19553, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "parent", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 19555, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "hiddenVotes", - "offset": 12, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 19558, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "children", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 19560, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "minStake", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 19562, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "alpha", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 19564, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "feeForJuror", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 19566, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "jurorsForCourtJump", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 19570, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "timesPerPeriod", - "offset": 0, - "slot": "6", - "type": "t_array(t_uint256)4_storage" - }, - { - "astId": 19572, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "disabled", - "offset": 0, - "slot": "10", - "type": "t_bool" - } - ], - "numberOfBytes": "352" - }, - "t_struct(CurrencyRate)19603_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreRuler.CurrencyRate", - "members": [ - { - "astId": 19598, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "feePaymentAccepted", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 19600, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "rateInEth", - "offset": 1, - "slot": "0", - "type": "t_uint64" - }, - { - "astId": 19602, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "rateDecimals", - "offset": 9, - "slot": "0", - "type": "t_uint8" - } - ], - "numberOfBytes": "32" - }, - "t_struct(Dispute)19588_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreRuler.Dispute", - "members": [ - { - "astId": 19575, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "courtID", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 19578, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "arbitrated", - "offset": 12, - "slot": "0", - "type": "t_contract(IArbitrableV2)25870" - }, - { - "astId": 19581, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "period", - "offset": 0, - "slot": "1", - "type": "t_enum(Period)19541" - }, - { - "astId": 19583, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "ruled", - "offset": 1, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 19587, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "rounds", - "offset": 0, - "slot": "2", - "type": "t_array(t_struct(Round)19596_storage)dyn_storage" - } - ], - "numberOfBytes": "96" - }, - "t_struct(Round)19596_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreRuler.Round", - "members": [ - { - "astId": 19590, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "totalFeesForJurors", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 19592, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "sumFeeRewardPaid", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 19595, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "feeToken", - "offset": 0, - "slot": "2", - "type": "t_contract(IERC20)2923" - } - ], - "numberOfBytes": "96" - }, - "t_struct(RulerSettings)19551_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreRuler.RulerSettings", - "members": [ - { - "astId": 19544, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "rulingMode", - "offset": 0, - "slot": "0", - "type": "t_enum(RulingMode)19535" - }, - { - "astId": 19546, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "presetRuling", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 19548, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "presetTied", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 19550, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "presetOverridden", - "offset": 1, - "slot": "2", - "type": "t_bool" - } - ], - "numberOfBytes": "96" - }, - "t_struct(RulingResult)19610_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreRuler.RulingResult", - "members": [ - { - "astId": 19605, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "ruling", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 19607, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "tied", - "offset": 0, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 19609, - "contract": "src/arbitration/devtools/KlerosCoreRuler.sol:KlerosCoreRuler", - "label": "overridden", - "offset": 1, - "slot": "1", - "type": "t_bool" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreRuler_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreRuler_Proxy.json deleted file mode 100644 index f9ca5bfe4..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreRuler_Proxy.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "address": "0x0630e4248a17b506809009F5D88E2f5bEE584c83", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xc503704bbd721158002b2f03148150f54a934741b23574787474588322d1d5f8", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x0630e4248a17b506809009F5D88E2f5bEE584c83", - "transactionIndex": 1, - "gasUsed": "310077", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000100004000000000000000000000000000040008000000000000000000000000020000000000000080000800000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000060000000000000000000000000000000000000000000000000000000000042000000", - "blockHash": "0xaa9f9cf50b84c74628f2df98dc1e1c090427a181fafc9d1b6b8f5ff17f49e475", - "transactionHash": "0xc503704bbd721158002b2f03148150f54a934741b23574787474588322d1d5f8", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 175286718, - "transactionHash": "0xc503704bbd721158002b2f03148150f54a934741b23574787474588322d1d5f8", - "address": "0x0630e4248a17b506809009F5D88E2f5bEE584c83", - "topics": [ - "0x0c907a651f88974ed0d9423aacc8b998c40eedf39920e2c3bdae0adcc486a761", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 0, - "blockHash": "0xaa9f9cf50b84c74628f2df98dc1e1c090427a181fafc9d1b6b8f5ff17f49e475" - }, - { - "transactionIndex": 1, - "blockNumber": 175286718, - "transactionHash": "0xc503704bbd721158002b2f03148150f54a934741b23574787474588322d1d5f8", - "address": "0x0630e4248a17b506809009F5D88E2f5bEE584c83", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 1, - "blockHash": "0xaa9f9cf50b84c74628f2df98dc1e1c090427a181fafc9d1b6b8f5ff17f49e475" - } - ], - "blockNumber": 175286718, - "cumulativeGasUsed": "310077", - "status": 1, - "byzantium": true - }, - "args": [ - "0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF", - "0x05d3177d000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c5900000000000000000000000034b944d42cacfc8266955d07a80181d2054aa22500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000010" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"KlerosCoreRulerProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212204d82e24ac13242090d48f2411d7306e8cf3dde46882ce606cf3b6aafa5d3ba9c64736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212204d82e24ac13242090d48f2411d7306e8cf3dde46882ce606cf3b6aafa5d3ba9c64736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreSnapshotProxy.json b/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreSnapshotProxy.json deleted file mode 100644 index b3e194c89..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreSnapshotProxy.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "address": "0xF924ac62b20901914c101Fa089Da1FB6A0585138", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract IKlerosCore", - "name": "_core", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IKlerosCore", - "name": "_core", - "type": "address" - } - ], - "name": "changeCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract IKlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x933145bec723111451822338b8f0c3aaeba3bd4ae1ab8121edf9fed48baf5f15", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xF924ac62b20901914c101Fa089Da1FB6A0585138", - "transactionIndex": 2, - "gasUsed": "346625", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xab7b999c40e22ebbbf75ff84c17d2b25cd49aec5052ada838272e1a902b49a64", - "transactionHash": "0x933145bec723111451822338b8f0c3aaeba3bd4ae1ab8121edf9fed48baf5f15", - "logs": [], - "blockNumber": 175286161, - "cumulativeGasUsed": "784743", - "status": 1, - "byzantium": true - }, - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract IKlerosCore\",\"name\":\"_core\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalStaked\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IKlerosCore\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"changeCore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract IKlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"balanceOf(address)\":{\"details\":\"Returns the amount of PNK staked in KlerosV2 for a particular address. Note: Proxy doesn't need to differentiate between courts so we pass 0 as courtID.\",\"params\":{\"_account\":\"The address to query.\"},\"returns\":{\"totalStaked\":\"Total amount staked in V2 by the address.\"}},\"changeCore(address)\":{\"details\":\"Changes the `core` storage variable.\",\"params\":{\"_core\":\"The new value for the `core` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_core\":\"KlerosCore to read the balance from.\",\"_governor\":\"The governor of the contract.\"}}},\"title\":\"KlerosCoreSnapshotProxy Proxy contract for V2 that exposes staked PNK with balanceOf() function for Snapshot voting.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/view/KlerosCoreSnapshotProxy.sol\":\"KlerosCoreSnapshotProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/arbitration/view/KlerosCoreSnapshotProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {ISortitionModule} from \\\"../interfaces/ISortitionModule.sol\\\";\\n\\ninterface IKlerosCore {\\n function sortitionModule() external view returns (ISortitionModule);\\n}\\n\\n/// @title KlerosCoreSnapshotProxy\\n/// Proxy contract for V2 that exposes staked PNK with balanceOf() function for Snapshot voting.\\ncontract KlerosCoreSnapshotProxy {\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n IKlerosCore public core;\\n address public governor;\\n string public constant name = \\\"Staked Pinakion\\\";\\n string public constant symbol = \\\"stPNK\\\";\\n uint8 public constant decimals = 18;\\n\\n // ************************************* //\\n // * Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _governor The governor of the contract.\\n /// @param _core KlerosCore to read the balance from.\\n constructor(address _governor, IKlerosCore _core) {\\n governor = _governor;\\n core = _core;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `core` storage variable.\\n /// @param _core The new value for the `core` storage variable.\\n function changeCore(IKlerosCore _core) external onlyByGovernor {\\n core = _core;\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Returns the amount of PNK staked in KlerosV2 for a particular address.\\n /// Note: Proxy doesn't need to differentiate between courts so we pass 0 as courtID.\\n /// @param _account The address to query.\\n /// @return totalStaked Total amount staked in V2 by the address.\\n function balanceOf(address _account) external view returns (uint256 totalStaked) {\\n (totalStaked, , , ) = core.sortitionModule().getJurorBalance(_account, 0);\\n }\\n}\\n\",\"keccak256\":\"0xf1001476b56a022a55a3ed5a5388fbbf88450527a1fd342276ccbc3749ea6497\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6080604052348015600f57600080fd5b50604051610528380380610528833981016040819052602c916073565b600180546001600160a01b039384166001600160a01b0319918216179091556000805492909316911617905560a8565b6001600160a01b0381168114607057600080fd5b50565b60008060408385031215608557600080fd5b8251608e81605c565b6020840151909250609d81605c565b809150509250929050565b610471806100b76000396000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c806306fdde031461007d5780630c340a24146100c1578063313ce567146100ec57806370a08231146101065780638e4264601461012757806395d89b411461013c578063e4c0aaf414610160578063f2f4eb2614610173575b600080fd5b6100ab6040518060400160405280600f81526020016e29ba30b5b2b2102834b730b5b4b7b760891b81525081565b6040516100b8919061031c565b60405180910390f35b6001546100d4906001600160a01b031681565b6040516001600160a01b0390911681526020016100b8565b6100f4601281565b60405160ff90911681526020016100b8565b610119610114366004610382565b610186565b6040519081526020016100b8565b61013a610135366004610382565b61027b565b005b6100ab604051806040016040528060058152602001647374504e4b60d81b81525081565b61013a61016e366004610382565b6102d0565b6000546100d4906001600160a01b031681565b60008060009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fe91906103a6565b604051631a383be960e31b81526001600160a01b03848116600483015260006024830152919091169063d1c1df4890604401608060405180830381865afa15801561024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027191906103c3565b5091949350505050565b6001546001600160a01b031633146102ae5760405162461bcd60e51b81526004016102a5906103f9565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146102fa5760405162461bcd60e51b81526004016102a5906103f9565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b602081526000825180602084015260005b8181101561034a576020818601810151604086840101520161032d565b506000604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461037f57600080fd5b50565b60006020828403121561039457600080fd5b813561039f8161036a565b9392505050565b6000602082840312156103b857600080fd5b815161039f8161036a565b600080600080608085870312156103d957600080fd5b505082516020840151604085015160609095015191969095509092509050565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b60608201526080019056fea264697066735822122073f21c8b6d33447b7835b4d1b407d310308303081d207c1d27192909f7cbaf6264736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c806306fdde031461007d5780630c340a24146100c1578063313ce567146100ec57806370a08231146101065780638e4264601461012757806395d89b411461013c578063e4c0aaf414610160578063f2f4eb2614610173575b600080fd5b6100ab6040518060400160405280600f81526020016e29ba30b5b2b2102834b730b5b4b7b760891b81525081565b6040516100b8919061031c565b60405180910390f35b6001546100d4906001600160a01b031681565b6040516001600160a01b0390911681526020016100b8565b6100f4601281565b60405160ff90911681526020016100b8565b610119610114366004610382565b610186565b6040519081526020016100b8565b61013a610135366004610382565b61027b565b005b6100ab604051806040016040528060058152602001647374504e4b60d81b81525081565b61013a61016e366004610382565b6102d0565b6000546100d4906001600160a01b031681565b60008060009054906101000a90046001600160a01b03166001600160a01b0316632e1daf2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fe91906103a6565b604051631a383be960e31b81526001600160a01b03848116600483015260006024830152919091169063d1c1df4890604401608060405180830381865afa15801561024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027191906103c3565b5091949350505050565b6001546001600160a01b031633146102ae5760405162461bcd60e51b81526004016102a5906103f9565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146102fa5760405162461bcd60e51b81526004016102a5906103f9565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b602081526000825180602084015260005b8181101561034a576020818601810151604086840101520161032d565b506000604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461037f57600080fd5b50565b60006020828403121561039457600080fd5b813561039f8161036a565b9392505050565b6000602082840312156103b857600080fd5b815161039f8161036a565b600080600080608085870312156103d957600080fd5b505082516020840151604085015160609095015191969095509092509050565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b60608201526080019056fea264697066735822122073f21c8b6d33447b7835b4d1b407d310308303081d207c1d27192909f7cbaf6264736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": { - "balanceOf(address)": { - "details": "Returns the amount of PNK staked in KlerosV2 for a particular address. Note: Proxy doesn't need to differentiate between courts so we pass 0 as courtID.", - "params": { - "_account": "The address to query." - }, - "returns": { - "totalStaked": "Total amount staked in V2 by the address." - } - }, - "changeCore(address)": { - "details": "Changes the `core` storage variable.", - "params": { - "_core": "The new value for the `core` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "details": "Constructor", - "params": { - "_core": "KlerosCore to read the balance from.", - "_governor": "The governor of the contract." - } - } - }, - "title": "KlerosCoreSnapshotProxy Proxy contract for V2 that exposes staked PNK with balanceOf() function for Snapshot voting.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 30835, - "contract": "src/arbitration/view/KlerosCoreSnapshotProxy.sol:KlerosCoreSnapshotProxy", - "label": "core", - "offset": 0, - "slot": "0", - "type": "t_contract(IKlerosCore)30831" - }, - { - "astId": 30837, - "contract": "src/arbitration/view/KlerosCoreSnapshotProxy.sol:KlerosCoreSnapshotProxy", - "label": "governor", - "offset": 0, - "slot": "1", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_contract(IKlerosCore)30831": { - "encoding": "inplace", - "label": "contract IKlerosCore", - "numberOfBytes": "20" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity.json b/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity.json deleted file mode 100644 index b6b4080c4..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity.json +++ /dev/null @@ -1,1948 +0,0 @@ -{ - "address": "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AllJurorsDrawn", - "type": "error" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "AppealPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "ArraysLengthMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "CannotDisableClassicDK", - "type": "error" - }, - { - "inputs": [], - "name": "CommitPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "DepthLevelMax", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitNotSupportedByCourt", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitOnly", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "DisputePeriodIsFinal", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeStillDrawing", - "type": "error" - }, - { - "inputs": [], - "name": "EvidenceNotPassedAndNotAppeal", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOrInstructorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InstructorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDisputKitParent", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "MinStakeLowerThanParentCourt", - "type": "error" - }, - { - "inputs": [], - "name": "MustSupportDisputeKitClassic", - "type": "error" - }, - { - "inputs": [], - "name": "NoJurorDrawn", - "type": "error" - }, - { - "inputs": [], - "name": "NotEvidencePeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotExecutionPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "SortitionModuleOnly", - "type": "error" - }, - { - "inputs": [], - "name": "StakingInTooManyCourts", - "type": "error" - }, - { - "inputs": [], - "name": "StakingLessThanCourtMinStake", - "type": "error" - }, - { - "inputs": [], - "name": "StakingNotPossibeInThisCourt", - "type": "error" - }, - { - "inputs": [], - "name": "StakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnstakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "inputs": [], - "name": "UnsupportedDisputeKit", - "type": "error" - }, - { - "inputs": [], - "name": "VotePeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "WrongDisputeKitIndex", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "DisputeKitCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "DisputeKitEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_fromDisputeKitID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_toDisputeKitID", - "type": "uint256" - } - ], - "name": "DisputeKitJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "Draw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreUniversity.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "addNewDisputeKit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_instructor", - "type": "address" - } - ], - "name": "changeInstructor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - } - ], - "name": "changeJurorProsecutionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ISortitionModuleUniversity", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputeKits", - "outputs": [ - { - "internalType": "contract IDisputeKit", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreUniversity.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "lastPeriodChange", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "draw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256[]", - "name": "_disputeKitIDs", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "enableDisputeKits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputeKitsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "disputeKitID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkAtStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVotes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "repartitions", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkPenalties", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "drawnJurors", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumPnkRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "drawIterations", - "type": "uint256" - } - ], - "internalType": "struct KlerosCoreUniversity.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_instructor", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - }, - { - "internalType": "contract IDisputeKit", - "name": "_disputeKit", - "type": "address" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "contract ISortitionModuleUniversity", - "name": "_sortitionModuleAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "instructor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "isDisputeKitJumping", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - } - ], - "name": "isSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorProsecutionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "passPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alreadyTransferred", - "type": "bool" - } - ], - "name": "setStakeBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "contract ISortitionModuleUniversity", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "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": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x6d19fdb430b5611f9aedf5792b44a297c36bd84d34e66ddaf82844f33eb1748a", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "transactionIndex": 1, - "gasUsed": "484460", - "logsBloom": "0x00000000000000000000000020000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000080000000000000040000000000000000000000000000020000000000000010200800402000000000000008000000000000008000000000000000000800000000000000000000000080000000000000000000000000000000800008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000060000000001001000000000000000000000008000000000200000000000000000000", - "blockHash": "0x152fd5195e3f7b8e0ab803f90700d35d20f4452193858d10558fc31c226227c8", - "transactionHash": "0x6d19fdb430b5611f9aedf5792b44a297c36bd84d34e66ddaf82844f33eb1748a", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 96308609, - "transactionHash": "0x6d19fdb430b5611f9aedf5792b44a297c36bd84d34e66ddaf82844f33eb1748a", - "address": "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "topics": [ - "0x44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb2", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x000000000000000000000000d6e96b7c993763b5cdda1139c7387b82a7c8b8b5" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x152fd5195e3f7b8e0ab803f90700d35d20f4452193858d10558fc31c226227c8" - }, - { - "transactionIndex": 1, - "blockNumber": 96308609, - "transactionHash": "0x6d19fdb430b5611f9aedf5792b44a297c36bd84d34e66ddaf82844f33eb1748a", - "address": "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "topics": [ - "0x3475f0ed7216dd7d453db663a1c3024e4f36cc925521d54edb9d13e022cbee3d", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 1, - "blockHash": "0x152fd5195e3f7b8e0ab803f90700d35d20f4452193858d10558fc31c226227c8" - }, - { - "transactionIndex": 1, - "blockNumber": 96308609, - "transactionHash": "0x6d19fdb430b5611f9aedf5792b44a297c36bd84d34e66ddaf82844f33eb1748a", - "address": "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "topics": [ - "0xb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc79", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001" - ], - "data": "0x", - "logIndex": 2, - "blockHash": "0x152fd5195e3f7b8e0ab803f90700d35d20f4452193858d10558fc31c226227c8" - }, - { - "transactionIndex": 1, - "blockNumber": 96308609, - "transactionHash": "0x6d19fdb430b5611f9aedf5792b44a297c36bd84d34e66ddaf82844f33eb1748a", - "address": "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 3, - "blockHash": "0x152fd5195e3f7b8e0ab803f90700d35d20f4452193858d10558fc31c226227c8" - } - ], - "blockNumber": 96308609, - "cumulativeGasUsed": "484460", - "status": 1, - "byzantium": true - }, - "args": [ - "0xF74DaBfC5F5dbdBD07636637204d9C35326D2906", - "0xe399d29b000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c5900000000000000000000000034b944d42cacfc8266955d07a80181d2054aa2250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6e96b7c993763b5cdda1139c7387b82a7c8b8b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000004b2c2d048921f694cce3aea35698c6b1f5fcbb79" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"KlerosCoreUniversityProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220025ed3e852b24305c0ac2e202b83cf5fed6ae313e772bad4b0c1340efea75f0764736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220025ed3e852b24305c0ac2e202b83cf5fed6ae313e772bad4b0c1340efea75f0764736f6c63430008180033", - "execute": { - "methodName": "initialize", - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0x34B944D42cAcfC8266955D07A80181D2054aa225", - "0x0000000000000000000000000000000000000000", - "0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5", - false, - [ - "200000000000000000000", - 10000, - "100000000000000000", - 256 - ], - [ - 0, - 0, - 0, - 10 - ], - "0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79" - ] - }, - "implementation": "0xF74DaBfC5F5dbdBD07636637204d9C35326D2906", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity_Implementation.json deleted file mode 100644 index c8261658d..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity_Implementation.json +++ /dev/null @@ -1,2645 +0,0 @@ -{ - "address": "0xF74DaBfC5F5dbdBD07636637204d9C35326D2906", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AllJurorsDrawn", - "type": "error" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "AppealPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "ArraysLengthMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "CannotDisableClassicDK", - "type": "error" - }, - { - "inputs": [], - "name": "CommitPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "DepthLevelMax", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitNotSupportedByCourt", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitOnly", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "DisputePeriodIsFinal", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeStillDrawing", - "type": "error" - }, - { - "inputs": [], - "name": "EvidenceNotPassedAndNotAppeal", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOrInstructorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InstructorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDisputKitParent", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "MinStakeLowerThanParentCourt", - "type": "error" - }, - { - "inputs": [], - "name": "MustSupportDisputeKitClassic", - "type": "error" - }, - { - "inputs": [], - "name": "NoJurorDrawn", - "type": "error" - }, - { - "inputs": [], - "name": "NotEvidencePeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotExecutionPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "SortitionModuleOnly", - "type": "error" - }, - { - "inputs": [], - "name": "StakingInTooManyCourts", - "type": "error" - }, - { - "inputs": [], - "name": "StakingLessThanCourtMinStake", - "type": "error" - }, - { - "inputs": [], - "name": "StakingNotPossibeInThisCourt", - "type": "error" - }, - { - "inputs": [], - "name": "StakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnstakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "inputs": [], - "name": "UnsupportedDisputeKit", - "type": "error" - }, - { - "inputs": [], - "name": "VotePeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "WrongDisputeKitIndex", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "DisputeKitCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "DisputeKitEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_fromDisputeKitID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_toDisputeKitID", - "type": "uint256" - } - ], - "name": "DisputeKitJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "Draw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreUniversity.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "addNewDisputeKit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_instructor", - "type": "address" - } - ], - "name": "changeInstructor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - } - ], - "name": "changeJurorProsecutionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ISortitionModuleUniversity", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputeKits", - "outputs": [ - { - "internalType": "contract IDisputeKit", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreUniversity.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "lastPeriodChange", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "draw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256[]", - "name": "_disputeKitIDs", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "enableDisputeKits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputeKitsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "disputeKitID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkAtStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVotes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "repartitions", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkPenalties", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "drawnJurors", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumPnkRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "drawIterations", - "type": "uint256" - } - ], - "internalType": "struct KlerosCoreUniversity.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_instructor", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - }, - { - "internalType": "contract IDisputeKit", - "name": "_disputeKit", - "type": "address" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "contract ISortitionModuleUniversity", - "name": "_sortitionModuleAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "instructor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "isDisputeKitJumping", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - } - ], - "name": "isSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorProsecutionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "passPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alreadyTransferred", - "type": "bool" - } - ], - "name": "setStakeBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "contract ISortitionModuleUniversity", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "transactionHash": "0xf99e544be3b28ba3d5d7dc89481e4698807522d7dd1d431faf2305c6cbb9265f", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xF74DaBfC5F5dbdBD07636637204d9C35326D2906", - "transactionIndex": 2, - "gasUsed": "5019437", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000008000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x02db98181f92e8759b1936b6812ee2468550ddd547787f25f966d5f49f589fc4", - "transactionHash": "0xf99e544be3b28ba3d5d7dc89481e4698807522d7dd1d431faf2305c6cbb9265f", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 96308594, - "transactionHash": "0xf99e544be3b28ba3d5d7dc89481e4698807522d7dd1d431faf2305c6cbb9265f", - "address": "0xF74DaBfC5F5dbdBD07636637204d9C35326D2906", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 1, - "blockHash": "0x02db98181f92e8759b1936b6812ee2468550ddd547787f25f966d5f49f589fc4" - } - ], - "blockNumber": 96308594, - "cumulativeGasUsed": "5609813", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AllJurorsDrawn\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AppealFeesNotEnough\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AppealPeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ArbitrationFeesNotEnough\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ArraysLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotDisableClassicDK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitPeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepthLevelMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeKitNotSupportedByCourt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeKitOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeNotAppealable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputePeriodIsFinal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeStillDrawing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EvidenceNotPassedAndNotAppeal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GovernorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GovernorOrInstructorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InstructorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDisputKitParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidForkingCourtAsParent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinStakeLowerThanParentCourt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustSupportDisputeKitClassic\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoJurorDrawn\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEvidencePeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotExecutionPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RulingAlreadyExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SortitionModuleOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingInTooManyCourts\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingLessThanCourtMinStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingNotPossibeInThisCourt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnstakingTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsuccessfulCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedDisputeKit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VotePeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongDisputeKitIndex\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"AcceptedFeeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"AppealDecision\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"AppealPossible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_supportedDisputeKits\",\"type\":\"uint256[]\"}],\"name\":\"CourtCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_fromCourtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_toCourtID\",\"type\":\"uint96\"}],\"name\":\"CourtJump\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"CourtModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeKitID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IDisputeKit\",\"name\":\"_disputeKitAddress\",\"type\":\"address\"}],\"name\":\"DisputeKitCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeKitID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_enable\",\"type\":\"bool\"}],\"name\":\"DisputeKitEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_fromDisputeKitID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_toDisputeKitID\",\"type\":\"uint256\"}],\"name\":\"DisputeKitJump\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"Draw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_pnkAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"LeftoverRewardSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"NewCurrencyRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum KlerosCoreUniversity.Period\",\"name\":\"_period\",\"type\":\"uint8\"}],\"name\":\"NewPeriod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_degreeOfCoherency\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_pnkAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_feeAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"TokenAndETHShift\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IDisputeKit\",\"name\":\"_disputeKitAddress\",\"type\":\"address\"}],\"name\":\"addNewDisputeKit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"appeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"appealCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"appealPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"changeAcceptedFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"changeCourtParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"changeCurrencyRates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_instructor\",\"type\":\"address\"}],\"name\":\"changeInstructor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jurorProsecutionModule\",\"type\":\"address\"}],\"name\":\"changeJurorProsecutionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_pinakion\",\"type\":\"address\"}],\"name\":\"changePinakion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISortitionModuleUniversity\",\"name\":\"_sortitionModule\",\"type\":\"address\"}],\"name\":\"changeSortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountInEth\",\"type\":\"uint256\"}],\"name\":\"convertEthToTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"courts\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"internalType\":\"uint256[]\",\"name\":\"_supportedDisputeKits\",\"type\":\"uint256[]\"}],\"name\":\"createCourt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"currencyRates\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"feePaymentAccepted\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"rateInEth\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"rateDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputeKits\",\"outputs\":[{\"internalType\":\"contract IDisputeKit\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"courtID\",\"type\":\"uint96\"},{\"internalType\":\"contract IArbitrableV2\",\"name\":\"arbitrated\",\"type\":\"address\"},{\"internalType\":\"enum KlerosCoreUniversity.Period\",\"name\":\"period\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"ruled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"lastPeriodChange\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"draw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256[]\",\"name\":\"_disputeKitIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"_enable\",\"type\":\"bool\"}],\"name\":\"enableDisputeKits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_iterations\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"executeRuling\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDisputeKitsLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"disputeKitID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pnkAtStakePerJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalFeesForJurors\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"repartitions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pnkPenalties\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"drawnJurors\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"sumFeeRewardPaid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sumPnkRewardPaid\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"drawIterations\",\"type\":\"uint256\"}],\"internalType\":\"struct KlerosCoreUniversity.Round\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"getTimesPerPeriod\",\"outputs\":[{\"internalType\":\"uint256[4]\",\"name\":\"timesPerPeriod\",\"type\":\"uint256[4]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_instructor\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_pinakion\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_jurorProsecutionModule\",\"type\":\"address\"},{\"internalType\":\"contract IDisputeKit\",\"name\":\"_disputeKit\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256[4]\",\"name\":\"_courtParameters\",\"type\":\"uint256[4]\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"internalType\":\"contract ISortitionModuleUniversity\",\"name\":\"_sortitionModuleAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"instructor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"isDisputeKitJumping\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_disputeKitID\",\"type\":\"uint256\"}],\"name\":\"isSupported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jurorProsecutionModule\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"passPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pinakion\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"setStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alreadyTransferred\",\"type\":\"bool\"}],\"name\":\"setStakeBySortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sortitionModule\",\"outputs\":[{\"internalType\":\"contract ISortitionModuleUniversity\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"AcceptedFeeToken(address,bool)\":{\"details\":\"To be emitted when an ERC20 token is added or removed as a method to pay fees.\",\"params\":{\"_accepted\":\"Whether the token is accepted or not.\",\"_token\":\"The ERC20 token.\"}},\"DisputeCreation(uint256,address)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_arbitrable\":\"The contract which created the dispute.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"NewCurrencyRate(address,uint64,uint8)\":{\"details\":\"To be emitted when the fee for a particular ERC20 token is updated.\",\"params\":{\"_feeToken\":\"The ERC20 token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrable\":\"The arbitrable receiving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}},\"Upgraded(address)\":{\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"addNewDisputeKit(address)\":{\"details\":\"Add a new supported dispute kit module to the court.\",\"params\":{\"_disputeKitAddress\":\"The address of the dispute kit contract.\"}},\"appeal(uint256,uint256,bytes)\":{\"details\":\"Appeals the ruling of a specified dispute. Note: Access restricted to the Dispute Kit for this `disputeID`.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_extraData\":\"Extradata for the dispute. Can be required during court jump.\",\"_numberOfChoices\":\"Number of choices for the dispute. Can be required during court jump.\"}},\"appealCost(uint256)\":{\"details\":\"Gets the cost of appealing a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"cost\":\"The appeal cost.\"}},\"appealPeriod(uint256)\":{\"details\":\"Gets the start and the end of a specified dispute's current appeal period.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"end\":\"The end of the appeal period.\",\"start\":\"The start of the appeal period.\"}},\"arbitrationCost(bytes)\":{\"details\":\"Compute the cost of arbitration denominated in ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\"},\"returns\":{\"cost\":\"The arbitration cost in ETH.\"}},\"arbitrationCost(bytes,address)\":{\"details\":\"Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeToken\":\"The ERC20 token used to pay fees.\"},\"returns\":{\"cost\":\"The arbitration cost in `_feeToken`.\"}},\"changeAcceptedFeeTokens(address,bool)\":{\"details\":\"Changes the supported fee tokens.\",\"params\":{\"_accepted\":\"Whether the token is supported or not as a method of fee payment.\",\"_feeToken\":\"The fee token.\"}},\"changeCurrencyRates(address,uint64,uint8)\":{\"details\":\"Changes the currency rate of a fee token.\",\"params\":{\"_feeToken\":\"The fee token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"changeInstructor(address)\":{\"details\":\"Changes the `instructor` storage variable.\",\"params\":{\"_instructor\":\"The new value for the `instructor` storage variable.\"}},\"changeJurorProsecutionModule(address)\":{\"details\":\"Changes the `jurorProsecutionModule` storage variable.\",\"params\":{\"_jurorProsecutionModule\":\"The new value for the `jurorProsecutionModule` storage variable.\"}},\"changePinakion(address)\":{\"details\":\"Changes the `pinakion` storage variable.\",\"params\":{\"_pinakion\":\"The new value for the `pinakion` storage variable.\"}},\"changeSortitionModule(address)\":{\"details\":\"Changes the `_sortitionModule` storage variable. Note that the new module should be initialized for all courts.\",\"params\":{\"_sortitionModule\":\"The new value for the `sortitionModule` storage variable.\"}},\"constructor\":{\"details\":\"Constructor, initializing the implementation to reduce attack surface.\"},\"createCourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256[])\":{\"details\":\"Creates a court under a specified parent court.\",\"params\":{\"_alpha\":\"The `alpha` property value of the court.\",\"_feeForJuror\":\"The `feeForJuror` property value of the court.\",\"_hiddenVotes\":\"The `hiddenVotes` property value of the court.\",\"_jurorsForCourtJump\":\"The `jurorsForCourtJump` property value of the court.\",\"_minStake\":\"The `minStake` property value of the court.\",\"_parent\":\"The `parent` property value of the court.\",\"_supportedDisputeKits\":\"Indexes of dispute kits that this court will support.\",\"_timesPerPeriod\":\"The `timesPerPeriod` property value of the court.\"}},\"createDispute(uint256,bytes)\":{\"details\":\"Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"createDispute(uint256,bytes,address,uint256)\":{\"details\":\"Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeAmount\":\"Amount of the ERC20 token used to pay fees.\",\"_feeToken\":\"The ERC20 token used to pay fees.\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,address)\":{\"details\":\"Draws one juror for the dispute until the number votes paid for is reached.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_juror\":\"The address of the juror to draw.\"}},\"enableDisputeKits(uint96,uint256[],bool)\":{\"details\":\"Adds/removes court's support for specified dispute kits.\",\"params\":{\"_courtID\":\"The ID of the court.\",\"_disputeKitIDs\":\"The IDs of dispute kits which support should be added/removed.\",\"_enable\":\"Whether add or remove the dispute kits from the court.\"}},\"execute(uint256,uint256,uint256)\":{\"details\":\"Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_iterations\":\"The number of iterations to run.\",\"_round\":\"The appeal round.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"executeRuling(uint256)\":{\"details\":\"Executes a specified dispute's ruling.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"getNumberOfVotes(uint256)\":{\"details\":\"Gets the number of votes permitted for the specified dispute in the latest round.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"getTimesPerPeriod(uint96)\":{\"details\":\"Gets the timesPerPeriod array for a given court.\",\"params\":{\"_courtID\":\"The ID of the court to get the times from.\"},\"returns\":{\"timesPerPeriod\":\"The timesPerPeriod array for the given court.\"}},\"initialize(address,address,address,address,address,bool,uint256[4],uint256[4],address)\":{\"details\":\"Initializer (constructor equivalent for upgradable contracts).\",\"params\":{\"_courtParameters\":\"Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\",\"_disputeKit\":\"The address of the default dispute kit.\",\"_governor\":\"The governor's address.\",\"_hiddenVotes\":\"The `hiddenVotes` property value of the general court.\",\"_instructor\":\"The address of the instructor.\",\"_jurorProsecutionModule\":\"The address of the juror prosecution module.\",\"_pinakion\":\"The address of the token contract.\",\"_sortitionModuleAddress\":\"The sortition module responsible for sortition of the jurors.\",\"_timesPerPeriod\":\"The `timesPerPeriod` property value of the general court.\"}},\"isDisputeKitJumping(uint256)\":{\"details\":\"Returns true if the dispute kit will be switched to a parent DK.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"_0\":\"Whether DK will be switched or not.\"}},\"passPeriod(uint256)\":{\"details\":\"Passes the period of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setStake(uint96,uint256)\":{\"details\":\"Sets the caller's stake in a court.\",\"params\":{\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake. Note that the existing delayed stake will be nullified as non-relevant.\"}},\"setStakeBySortitionModule(address,uint96,uint256,bool)\":{\"details\":\"Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\",\"params\":{\"_account\":\"The account whose stake is being set.\",\"_alreadyTransferred\":\"Whether the PNKs have already been transferred to the contract.\",\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"title\":\"KlerosCoreUniversity Core arbitrator contract for educational purposes.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}],\"InvalidImplementation(address)\":[{\"notice\":\"The `implementation` is not UUPS-compliant\"}]},\"events\":{\"Upgraded(address)\":{\"notice\":\"Emitted when the `implementation` has been successfully upgraded.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/university/KlerosCoreUniversity.sol\":\"KlerosCoreUniversity\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0xe841a4fe8ec109ce17dde4457bf1583c8b499109b05887c53a49a3207fc6e80b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xa4dc6b958197adead238de4246cd04e7389c3dc1b9f968acd10985f8fc5b74cf\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xb9590d05f9df08dd0ed027b2eb40c7b1885b7574a121b1b0b7da0920429bb4d5\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake,\\n bool _alreadyTransferred\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(address _account, uint256 _relativeAmount) external;\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n}\\n\",\"keccak256\":\"0x18a4ff126bb51e7b5b0e3fbff7cf0dbbcfff7195ad79307e69cdbc9226e63502\",\"license\":\"MIT\"},\"src/arbitration/university/ISortitionModuleUniversity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport {ISortitionModule} from \\\"../interfaces/ISortitionModule.sol\\\";\\n\\ninterface ISortitionModuleUniversity is ISortitionModule {\\n function setTransientJuror(address _juror) external;\\n}\\n\",\"keccak256\":\"0x57fee0787ae90af01c57a7d2850f8e4ade1ca72163a388341cac017bfdbf163a\",\"license\":\"MIT\"},\"src/arbitration/university/KlerosCoreUniversity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"../interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModuleUniversity} from \\\"./ISortitionModuleUniversity.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../../libraries/SafeERC20.sol\\\";\\nimport \\\"../../libraries/Constants.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\n\\n/// @title KlerosCoreUniversity\\n/// Core arbitrator contract for educational purposes.\\ncontract KlerosCoreUniversity is IArbitratorV2, UUPSProxiable, Initializable {\\n using SafeERC20 for IERC20;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public instructor; // The instructor who is allowed to choose the jurors.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModuleUniversity public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint256 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByInstructor() {\\n if (instructor != msg.sender) revert InstructorOnly();\\n _;\\n }\\n\\n modifier onlyByGovernorOrInstructor() {\\n if (msg.sender != governor && msg.sender != instructor) revert GovernorOrInstructorOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _instructor The address of the instructor.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n function initialize(\\n address _governor,\\n address _instructor,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n ISortitionModuleUniversity _sortitionModuleAddress\\n ) external reinitializer(1) {\\n governor = _governor;\\n instructor = _instructor;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n emit CourtCreated(\\n 1,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n new uint256[](0)\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /* @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `instructor` storage variable.\\n /// @param _instructor The new value for the `instructor` storage variable.\\n function changeInstructor(address _instructor) external onlyByGovernorOrInstructor {\\n instructor = _instructor;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModuleUniversity _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n court.supportedDisputeKits[_supportedDisputeKits[i]] = true;\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n courtID,\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external {\\n _setStake(msg.sender, _courtID, _newStake, false, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// @param _alreadyTransferred Whether the PNKs have already been transferred to the contract.\\n function setStakeBySortitionModule(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake,\\n bool _alreadyTransferred\\n ) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, _alreadyTransferred, OnError.Return);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = (court.minStake * court.alpha) / ALPHA_DIVISOR;\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws one juror for the dispute until the number votes paid for is reached.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _juror The address of the juror to draw.\\n function draw(uint256 _disputeID, address _juror) external onlyByGovernorOrInstructor {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n if (round.drawnJurors.length >= round.nbVotes) revert AllJurorsDrawn();\\n\\n sortitionModule.setTransientJuror(_juror);\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n uint256 iteration = round.drawIterations + 1;\\n address drawnAddress = disputeKit.draw(_disputeID, iteration);\\n if (drawnAddress == address(0)) {\\n revert NoJurorDrawn();\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n round.drawIterations = iteration;\\n }\\n sortitionModule.setTransientJuror(address(0));\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = (court.minStake * court.alpha) / ALPHA_DIVISOR;\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n _params.pnkPenaltiesInRound += penalty;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n sortitionModule.penalizeStake(account, penalty);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(penalty),\\n 0,\\n round.feeToken\\n );\\n\\n if (!disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n // The juror is inactive, unstake them.\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(governor).send(round.totalFeesForJurors);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(governor, round.totalFeesForJurors);\\n }\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = (round.pnkAtStakePerJuror * degreeOfCoherence) / ALPHA_DIVISOR;\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Give back the locked PNKs in case the juror fully unstaked earlier.\\n if (!sortitionModule.isJurorStaked(account)) {\\n pinakion.safeTransfer(account, pnkLocked);\\n }\\n\\n // Transfer the rewards\\n uint256 pnkReward = ((_params.pnkPenaltiesInRound / _params.coherentCount) * degreeOfCoherence) / ALPHA_DIVISOR;\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = ((round.totalFeesForJurors / _params.coherentCount) * degreeOfCoherence) / ALPHA_DIVISOR;\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(account).send(feeReward);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(account, feeReward);\\n }\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(governor).send(leftoverFeeReward);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(governor, leftoverFeeReward);\\n }\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) public view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _alreadyTransferred Whether the PNKs were already transferred to/from the staking contract.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake,\\n bool _alreadyTransferred,\\n OnError _onError\\n ) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID > courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.setStake(\\n _account,\\n _courtID,\\n _newStake,\\n _alreadyTransferred\\n );\\n if (stakingResult != StakingResult.Successful) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibeInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error InstructorOnly();\\n error GovernorOrInstructorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error DepthLevelMax();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error ArraysLengthMismatch();\\n error StakingInTooManyCourts();\\n error StakingNotPossibeInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error AllJurorsDrawn();\\n error NoJurorDrawn();\\n}\\n\",\"keccak256\":\"0xd636c2294d15110a20dcf97d67f2989e14233cd1de353032807ad44a8e828e49\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked\\n}\\n\",\"keccak256\":\"0x486016fb74cc91439c2ec918e97a79190ab4eed223987d516986fff8eaeecfbf\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x3e39adb9cdd9f86b0defc8f6e1223533d86f82c804e186193f729c32c10161b1\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x560ea64115636ecd6b3596248817125551c038ce1648019fde3cbe02d9759a30\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxiable\\n * @author Simon Malatrait \\n * @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n * The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n *\\n * IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n * This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSProxiable` with a custom implementation of upgrades.\\n *\\n * The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\n */\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /**\\n * Emitted when the `implementation` has been successfully upgraded.\\n * @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n */\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /**\\n * @dev The call is from an unauthorized context.\\n */\\n error UUPSUnauthorizedCallContext();\\n\\n /**\\n * @dev The storage `slot` is unsupported as a UUID.\\n */\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Storage variable of the proxiable contract address.\\n * It is used to check whether or not the current call is from the proxy.\\n */\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n * @dev Called by {upgradeToAndCall}.\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Upgrade mechanism including access control and UUPS-compliance.\\n * @param newImplementation Address of the new implementation contract.\\n * @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n *\\n * @dev Reverts if the execution is not performed via delegatecall or the execution\\n * context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n /* Check that the execution is being performed through a delegatecall call and that the execution context is\\n a proxy contract with an implementation (as defined in ERC1967) pointing to self. */\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the if statement.\\n */\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5956855046cdda7aa45f44e379ef45323af7266c44c817d1266d8b32d52b0e22\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000d9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff1615620000765760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b0390811614620000d65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161566962000103600039600081816115e10152818161160a015261180101526156696000f3fe60806040526004361061027c5760003560e01c80638a9bb02a1161014f578063d07368bd116100c1578063f6506db41161007a578063f6506db414610867578063f7434ea914610887578063fbb519e7146108a7578063fbf405b0146108c7578063fc6f8f16146108e7578063fe524c391461090757600080fd5b8063d07368bd146107b2578063d4d1d76a146107d2578063d874514b146107e7578063d98493f614610807578063e399d29b14610827578063e4c0aaf41461084757600080fd5b8063b702a87911610113578063b702a8791461070c578063c13517e11461072c578063c258bb191461073f578063c35699021461075f578063c71f425314610772578063cf0c38f81461079257600080fd5b80638a9bb02a1461064a5780638bb0487514610677578063acdbf51d14610697578063afe15cfb146106b7578063b0049637146106ec57600080fd5b80632e1daf2f116101f357806371ae413d116101ac57806371ae413d1461058a578063751accd0146105aa5780637717a6e8146105ca5780637934c0be146105ea57806382d022371461060a57806386541b241461062a57600080fd5b80632e1daf2f146104c45780633cfd1184146104e45780634f1ef2861461051157806352d1902d14610524578063564a565d1461053957806359ec827e1461056a57600080fd5b8063115d537611610245578063115d5376146103885780631860592b146103a857806319b81529146103d65780631c3db16d146104065780631f5a0dd2146104435780632d29a47b146104a457600080fd5b8062f5822c146102815780630219da79146102a357806309cfdc9c1461031b5780630b7414bc1461033b5780630c340a241461035b575b600080fd5b34801561028d57600080fd5b506102a161029c366004614846565b610927565b005b3480156102af57600080fd5b506102ee6102be366004614846565b60086020526000908152604090205460ff808216916001600160401b0361010082041691600160481b9091041683565b6040805193151584526001600160401b03909216602084015260ff16908201526060015b60405180910390f35b34801561032757600080fd5b506102a1610336366004614846565b610974565b34801561034757600080fd5b506102a161035636600461494e565b6109da565b34801561036757600080fd5b5060005461037b906001600160a01b031681565b60405161031291906149af565b34801561039457600080fd5b506102a16103a33660046149c3565b610b11565b3480156103b457600080fd5b506103c86103c33660046149dc565b611048565b604051908152602001610312565b3480156103e257600080fd5b506103f66103f13660046149c3565b6110a2565b6040519015158152602001610312565b34801561041257600080fd5b506104266104213660046149c3565b61119b565b604080519384529115156020840152151590820152606001610312565b34801561044f57600080fd5b5061046361045e3660046149c3565b61129c565b604080516001600160601b0390981688529515156020880152948601939093526060850191909152608084015260a0830152151560c082015260e001610312565b3480156104b057600080fd5b506102a16104bf366004614a08565b6112fb565b3480156104d057600080fd5b5060045461037b906001600160a01b031681565b3480156104f057600080fd5b506105046104ff366004614a34565b611563565b6040516103129190614a72565b6102a161051f366004614aef565b6115cd565b34801561053057600080fd5b506103c86117f4565b34801561054557600080fd5b506105596105543660046149c3565b611852565b604051610312959493929190614b76565b34801561057657600080fd5b506103c86105853660046149c3565b6118ae565b34801561059657600080fd5b5060015461037b906001600160a01b031681565b3480156105b657600080fd5b506102a16105c5366004614bb5565b611a03565b3480156105d657600080fd5b506102a16105e5366004614c0d565b611aad565b3480156105f657600080fd5b506102a1610605366004614c29565b611abb565b34801561061657600080fd5b506102a1610625366004614c62565b611b3a565b34801561063657600080fd5b506102a1610645366004614d21565b611bf7565b34801561065657600080fd5b5061066a610665366004614d8f565b611dd4565b6040516103129190614df6565b34801561068357600080fd5b506102a16106923660046149c3565b611f60565b3480156106a357600080fd5b5061037b6106b23660046149c3565b6120c4565b3480156106c357600080fd5b506106d76106d23660046149c3565b6120ee565b60408051928352602083019190915201610312565b3480156106f857600080fd5b506102a1610707366004614846565b61219a565b34801561071857600080fd5b506102a1610727366004614e9b565b6121e7565b6103c861073a366004614ec0565b6125fa565b34801561074b57600080fd5b506102a161075a366004614846565b612632565b6102a161076d366004614ef0565b61267f565b34801561077e57600080fd5b506103c861078d3660046149c3565b612b53565b34801561079e57600080fd5b5060035461037b906001600160a01b031681565b3480156107be57600080fd5b506102a16107cd366004614846565b612bbb565b3480156107de57600080fd5b506006546103c8565b3480156107f357600080fd5b506102a1610802366004614f29565b612c64565b34801561081357600080fd5b506103c861082236600461500a565b612f62565b34801561083357600080fd5b506102a1610842366004615055565b612faf565b34801561085357600080fd5b506102a1610862366004614846565b61329f565b34801561087357600080fd5b506103c8610882366004615110565b6132ec565b34801561089357600080fd5b506103c86108a2366004615176565b6133d2565b3480156108b357600080fd5b506102a16108c23660046151aa565b61341e565b3480156108d357600080fd5b5060025461037b906001600160a01b031681565b3480156108f357600080fd5b506103c86109023660046149c3565b61345e565b34801561091357600080fd5b506103f6610922366004614c0d565b61348d565b6000546001600160a01b031633146109525760405163c383977560e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480159061099a57506001546001600160a01b03163314155b156109b857604051633244d29960e21b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610a055760405163c383977560e01b815260040160405180910390fd5b60005b8251811015610b0b578115610aa457828181518110610a2957610a296151fb565b602002602001015160001480610a5c57506006548351849083908110610a5157610a516151fb565b602002602001015110155b15610a7a57604051633d58a98960e11b815260040160405180910390fd5b610a9f84848381518110610a9057610a906151fb565b602002602001015160016134d5565b610b03565b6001838281518110610ab857610ab86151fb565b602002602001015103610ade576040516356d111fd60e11b815260040160405180910390fd5b610b0384848381518110610af457610af46151fb565b602002602001015160006134d5565b600101610a08565b50505050565b600060078281548110610b2657610b266151fb565b600091825260208220600490910201805460058054929450916001600160601b03909116908110610b5957610b596151fb565b6000918252602082206003850154600c909202019250610b7b90600190615227565b90506000836003018281548110610b9457610b946151fb565b600091825260208220600b909102019150600185015460ff166004811115610bbe57610bbe614b3e565b03610c995781158015610c0d57506001840154600684019060ff166004811115610bea57610bea614b3e565b60048110610bfa57610bfa6151fb565b01546002850154610c0b9042615227565b105b15610c2b57604051633e9727df60e01b815260040160405180910390fd5b6003810154600682015414610c53576040516309e4486b60e41b815260040160405180910390fd5b8254600160601b900460ff16610c6a576002610c6d565b60015b60018086018054909160ff1990911690836004811115610c8f57610c8f614b3e565b0217905550610ffa565b60018085015460ff166004811115610cb357610cb3614b3e565b03610dc3576001840154600684019060ff166004811115610cd657610cd6614b3e565b60048110610ce657610ce66151fb565b01546002850154610cf79042615227565b108015610d8e57506006816000015481548110610d1657610d166151fb565b600091825260209091200154604051630baa64d160e01b8152600481018790526001600160a01b0390911690630baa64d190602401602060405180830381865afa158015610d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8c919061523a565b155b15610dac57604051634dfa578560e11b815260040160405180910390fd5b6001808501805460029260ff199091169083610c8f565b6002600185015460ff166004811115610dde57610dde614b3e565b03610f2c576001840154600684019060ff166004811115610e0157610e01614b3e565b60048110610e1157610e116151fb565b01546002850154610e229042615227565b108015610eb957506006816000015481548110610e4157610e416151fb565b6000918252602090912001546040516336a66c7560e11b8152600481018790526001600160a01b0390911690636d4cd8ea90602401602060405180830381865afa158015610e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb7919061523a565b155b15610ed757604051631988dead60e31b815260040160405180910390fd5b600184018054600360ff199091161790558354604051600160601b9091046001600160a01b03169086907fa5d41b970d849372be1da1481ffd78d162bfe57a7aa2fe4e5fb73481fa5ac24f90600090a3610ffa565b6003600185015460ff166004811115610f4757610f47614b3e565b03610fc1576001840154600684019060ff166004811115610f6a57610f6a614b3e565b60048110610f7a57610f7a6151fb565b01546002850154610f8b9042615227565b1015610faa57604051632f4dfd8760e01b815260040160405180910390fd5b6001808501805460049260ff199091169083610c8f565b6004600185015460ff166004811115610fdc57610fdc614b3e565b03610ffa576040516307f38c8f60e11b815260040160405180910390fd5b426002850155600184015460405186917f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b91916110399160ff1690615257565b60405180910390a25050505050565b6001600160a01b03821660009081526008602052604081205461010081046001600160401b03169061108590600160481b900460ff16600a615349565b61108f9084615358565b6110999190615385565b90505b92915050565b600080600783815481106110b8576110b86151fb565b60009182526020822060036004909202019081018054919350906110de90600190615227565b815481106110ee576110ee6151fb565b600091825260208220845460058054600b909402909201945090916001600160601b03909116908110611123576111236151fb565b90600052602060002090600c0201905080600501548260030154101561114e57506000949350505050565b80546005805490916001600160601b031690811061116e5761116e6151fb565b6000918252602080832094548352600a600c9092029094010190925250604090205460ff16159392505050565b600080600080600785815481106111b4576111b46151fb565b60009182526020822060036004909202019081018054919350906111da90600190615227565b815481106111ea576111ea6151fb565b90600052602060002090600b0201905060006006826000015481548110611213576112136151fb565b600091825260209091200154604051631c3db16d60e01b8152600481018990526001600160a01b0390911691508190631c3db16d90602401606060405180830381865afa158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128c9190615399565b9199909850909650945050505050565b600581815481106112ac57600080fd5b60009182526020909120600c9091020180546002820154600383015460048401546005850154600b909501546001600160601b038516965060ff600160601b9095048516959394929391921687565b60008060078581548110611311576113116151fb565b600091825260209091206004918202019150600182015460ff16600481111561133c5761133c614b3e565b1461135a57604051638794ce4b60e01b815260040160405180910390fd5b80600301848154811061136f5761136f6151fb565b6000918252602082206004600b9092020190810154909350915061139384836153d1565b60058401546006850154600286015492935090916000906113b5908390615385565b905060008660010154905060008060068960000154815481106113da576113da6151fb565b60009182526020909120015460405163368efae360e21b8152600481018e9052602481018d90526001600160a01b039091169150819063da3beb8c90604401602060405180830381865afa158015611436573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145a91906153e4565b915050806000036114765783861115611471578395505b611496565b611481846002615358565b86111561149657611493846002615358565b95505b60048801869055865b8681101561154257848110156114f8576114f16040518061010001604052808e81526020018d81526020018481526020018781526020018681526020018581526020018881526020018381525061355d565b955061153a565b61153a6040518061010001604052808e81526020018d815260200184815260200187815260200186815260200185815260200188815260200183815250613a2e565b60010161149f565b508488600501541461155657600588018590555b5050505050505050505050565b61156b614786565b6005826001600160601b031681548110611587576115876151fb565b6000918252602090912060408051608081019182905292600c029091016006019060049082845b8154815260200190600101908083116115ae5750505050509050919050565b6115d682613f70565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061165457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166116486000805160206156148339815191525490565b6001600160a01b031614155b156116725760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116cc575060408051601f3d908101601f191682019092526116c9918101906153e4565b60015b6116f45781604051630c76093760e01b81526004016116eb91906149af565b60405180910390fd5b600080516020615614833981519152811461172557604051632a87526960e21b8152600481018290526024016116eb565b6000805160206156148339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156117ee576000836001600160a01b03168360405161178c9190615421565b600060405180830381855af49150503d80600081146117c7576040519150601f19603f3d011682016040523d82523d6000602084013e6117cc565b606091505b5050905080610b0b576040516339b21b5d60e11b815260040160405180910390fd5b505b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461183f5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061561483398151915290565b6007818154811061186257600080fd5b60009182526020909120600490910201805460018201546002909201546001600160601b0382169350600160601b9091046001600160a01b03169160ff80821692610100909204169085565b600080600783815481106118c4576118c46151fb565b60009182526020822060036004909202019081018054919350906118ea90600190615227565b815481106118fa576118fa6151fb565b600091825260208220845460058054600b909402909201945090916001600160601b0390911690811061192f5761192f6151fb565b90600052602060002090600c0201905080600501548260030154106119ce5782546001600160601b031660001901611970576001600160ff1b0393506119fb565b6003820154611980906002615358565b61198b9060016153d1565b81546005805490916001600160601b03169081106119ab576119ab6151fb565b90600052602060002090600c0201600401546119c79190615358565b93506119fb565b60038201546119de906002615358565b6119e99060016153d1565b81600401546119f89190615358565b93505b505050919050565b6000546001600160a01b03163314611a2e5760405163c383977560e01b815260040160405180910390fd5b6000836001600160a01b03168383604051611a499190615421565b60006040518083038185875af1925050503d8060008114611a86576040519150601f19603f3d011682016040523d82523d6000602084013e611a8b565b606091505b5050905080610b0b576040516322092f2f60e11b815260040160405180910390fd5b6117ee338383600080613f9e565b6000546001600160a01b03163314611ae65760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f541615e167511d757a7067a700eb54431b256bb458dfdce0ac58bf2ed0aefd4491a35050565b6000546001600160a01b03163314611b655760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038316600081815260086020908152604091829020805469ffffffffffffffffff0019166101006001600160401b03881690810260ff60481b191691909117600160481b60ff8816908102919091179092558351908152918201527fe6996b7f03e9bd02228b99d3d946932e3197f505f60542c4cfbc919441d8a4e6910160405180910390a2505050565b6000546001600160a01b03163314611c225760405163c383977560e01b815260040160405180910390fd5b60006005886001600160601b031681548110611c4057611c406151fb565b90600052602060002090600c0201905060016001600160601b0316886001600160601b031614158015611ca2575080546005805488926001600160601b0316908110611c8e57611c8e6151fb565b90600052602060002090600c020160020154115b15611cc057604051639717078960e01b815260040160405180910390fd5b60005b6001820154811015611d3b57866005836001018381548110611ce757611ce76151fb565b906000526020600020015481548110611d0257611d026151fb565b90600052602060002090600c0201600201541015611d3357604051639717078960e01b815260040160405180910390fd5b600101611cc3565b5060028101869055805460ff60601b1916600160601b8815150217815560038101859055600480820185905560058201849055611d7e90600683019084906147a4565b50876001600160601b03167f709b1f5fda58af9a4f52dacd1ec404840a8148455700cce155a2bd8cf127ef1a888888888888604051611dc29695949392919061543d565b60405180910390a25050505050505050565b611e3a60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b60078381548110611e4d57611e4d6151fb565b90600052602060002090600402016003018281548110611e6f57611e6f6151fb565b90600052602060002090600b02016040518061016001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201805480602002602001604051908101604052809291908181526020018280548015611f1e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f00575b5050509183525050600782015460208201526008820154604082015260098201546001600160a01b03166060820152600a909101546080909101529392505050565b600060078281548110611f7557611f756151fb565b600091825260209091206004918202019150600182015460ff166004811115611fa057611fa0614b3e565b14611fbe57604051638794ce4b60e01b815260040160405180910390fd5b6001810154610100900460ff1615611fe95760405163c977f8d360e01b815260040160405180910390fd5b6000611ff48361119b565b505060018301805461010061ff001990911617905582546040518281529192508491600160601b9091046001600160a01b0316907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a3815460405163188d362b60e11b81526004810185905260248101839052600160601b9091046001600160a01b03169063311a6c5690604401600060405180830381600087803b1580156120a757600080fd5b505af11580156120bb573d6000803e3d6000fd5b50505050505050565b600681815481106120d457600080fd5b6000918252602090912001546001600160a01b0316905081565b600080600060078481548110612106576121066151fb565b6000918252602090912060049091020190506003600182015460ff16600481111561213357612133614b3e565b0361218b576002810154815460058054929550916001600160601b03909116908110612161576121616151fb565b600091825260209091206009600c909202010154600282015461218491906153d1565b9150612194565b60009250600091505b50915091565b6000546001600160a01b031633146121c55760405163c383977560e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480159061220d57506001546001600160a01b03163314155b1561222b57604051633244d29960e21b815260040160405180910390fd5b600060078381548110612240576122406151fb565b906000526020600020906004020190506000600182600301805490506122669190615227565b9050600082600301828154811061227f5761227f6151fb565b600091825260208220600b909102019150600184015460ff1660048111156122a9576122a9614b3e565b146122c757604051638285c4ef60e01b815260040160405180910390fd5b60038101546006820154106122ef57604051634df06de360e01b815260040160405180910390fd5b60048054604051633c694c4160e21b81526001600160a01b039091169163f1a531049161231e918891016149af565b600060405180830381600087803b15801561233857600080fd5b505af115801561234c573d6000803e3d6000fd5b5050505060006006826000015481548110612369576123696151fb565b6000918252602082200154600a8401546001600160a01b0390911692506123919060016153d1565b60405163695c01ad60e11b815260048101899052602481018290529091506000906001600160a01b0384169063d2b8035a906044016020604051808303816000875af11580156123e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124099190615470565b90506001600160a01b03811661243257604051632e38b8f760e11b815260040160405180910390fd5b6004805460018601546040516310f0b12f60e11b81526001600160a01b03909216926321e1625e9261246892869290910161548d565b600060405180830381600087803b15801561248257600080fd5b505af1158015612496573d6000803e3d6000fd5b50505060068501546040518a92506001600160a01b038416917f6119cf536152c11e0a9a6c22f3953ce4ecc93ee54fa72ffa326ffabded21509b916124e3918a8252602082015260400190565b60405180910390a36006840180546001810182556000828152602090200180546001600160a01b0319166001600160a01b038416179055600385015490540361258a5760048054604051632e96bc2360e11b81529182018a9052602482018790526001600160a01b031690635d2d784690604401600060405180830381600087803b15801561257157600080fd5b505af1158015612585573d6000803e3d6000fd5b505050505b50600a8301555060048054604051633c694c4160e21b81526001600160a01b039091169163f1a53104916125c191600091016149af565b600060405180830381600087803b1580156125db57600080fd5b505af11580156125ef573d6000803e3d6000fd5b505050505050505050565b6000612605826133d2565b34101561262557604051630e3360f160e21b815260040160405180910390fd5b6110998383600034614158565b6000546001600160a01b0316331461265d5760405163c383977560e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b612688836118ae565b3410156126a857604051633191f8f160e01b815260040160405180910390fd5b6000600784815481106126bd576126bd6151fb565b6000918252602090912060049091020190506003600182015460ff1660048111156126ea576126ea614b3e565b14612708576040516337cdefcb60e21b815260040160405180910390fd5b6003810180546000919061271e90600190615227565b8154811061272e5761272e6151fb565b90600052602060002090600b020190506006816000015481548110612755576127556151fb565b6000918252602090912001546001600160a01b031633146127895760405163065f245f60e01b815260040160405180910390fd5b8154815460038401805460018101825560009182526020909120600580546001600160601b0390951694600b90930290910191849081106127cc576127cc6151fb565b90600052602060002090600c0201600501548460030154106128d5576005836001600160601b031681548110612804576128046151fb565b60009182526020909120600c9091020154600580546001600160601b0390921694509084908110612837576128376151fb565b60009182526020808320858452600a600c90930201919091019052604090205460ff1661286357600191505b84546001600160601b038481169116146128d557845460038601546001600160601b039091169061289690600190615227565b6040516001600160601b03861681528a907f736e3f52761298c8c0823e1ebf482ed3c5ecb304f743d2d91a7c006e8e8d7a1f9060200160405180910390a45b84546001600160601b0319166001600160601b038416908117865560018601805460ff1916905542600287015560058054600092908110612918576129186151fb565b90600052602060002090600c020190508060040154346129389190615385565b8260030181905550612710816003015482600201546129579190615358565b6129619190615385565b60018084019190915534600284015583835560045460038801546001600160a01b039091169163d09f392d918c9161299891615227565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b1580156129d657600080fd5b505af11580156129ea573d6000803e3d6000fd5b505086548454149150612ad090505784546003870154612a0c90600190615227565b83546040519081528b907fcbe7939a71f0b369c7471d760a0a99b60b7bb010ee0406cba8a46679d1ea77569060200160405180910390a46006826000015481548110612a5a57612a5a6151fb565b60009182526020909120015460038301546040516302dbb79560e61b81526001600160a01b039092169163b6ede54091612a9d918d918d918d91906004016154a6565b600060405180830381600087803b158015612ab757600080fd5b505af1158015612acb573d6000803e3d6000fd5b505050505b8554604051600160601b9091046001600160a01b0316908a907f9c9b64db9e130f48381bf697abf638e73117dbfbfd7a4484f2da3ba188f4187d90600090a3887f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b916000604051612b409190615257565b60405180910390a2505050505050505050565b60008060078381548110612b6957612b696151fb565b906000526020600020906004020190508060030160018260030180549050612b919190615227565b81548110612ba157612ba16151fb565b90600052602060002090600b020160030154915050919050565b6000546001600160a01b03163314612be65760405163c383977560e01b815260040160405180910390fd5b6006805460018101825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f810180546001600160a01b0319166001600160a01b0385169081179091556040519192909183917f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a35050565b6000546001600160a01b03163314612c8f5760405163c383977560e01b815260040160405180910390fd5b856005896001600160601b031681548110612cac57612cac6151fb565b90600052602060002090600c0201600201541115612cdd57604051639717078960e01b815260040160405180910390fd5b8051600003612cff5760405163402585f560e01b815260040160405180910390fd5b6001600160601b038816612d2657604051631ef4f64960e01b815260040160405180910390fd5b60058054600181018255600091825290600c82027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905b8351811015612e1557838181518110612d7957612d796151fb565b602002602001015160001480612dac57506006548451859083908110612da157612da16151fb565b602002602001015110155b15612dca57604051633d58a98960e11b815260040160405180910390fd5b600182600a016000868481518110612de457612de46151fb565b6020908102919091018101518252810191909152604001600020805460ff1916911515919091179055600101612d5e565b5060016000908152600a8201602052604090205460ff16612e49576040516306351b3d60e31b815260040160405180910390fd5b80546001600160601b0319166001600160601b038b161781556040805160008152602081019182905251612e819160018401916147e2565b50805460ff60601b1916600160601b8a1515021781556002810188905560038101879055600480820187905560058201869055612ec490600683019086906147a4565b5060058a6001600160601b031681548110612ee157612ee16151fb565b600091825260208083206001600c909302018201805492830181558352909120018290556040516001600160601b038b169083907f3475f0ed7216dd7d453db663a1c3024e4f36cc925521d54edb9d13e022cbee3d90612f4e908d908d908d908d908d908d908d906154ef565b60405180910390a350505050505050505050565b6000612fa7826103c386868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506133d292505050565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff1680612ff8575080546001600160401b03808416911610155b156130155760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155600080546001600160a01b03808e166001600160a01b0319928316178355600180548e8316908416178155600280548e8416908516178155600380548e8516908616179055600480548985169086161790556006805481875291820190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40018054928c1692909316821790925560405190927f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a360058054600082815260028201909255600c6001909101027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0810180546001600160601b031916815560408051938452602084019081905292519092613174927f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db101916147e2565b50805460ff60601b1916600160601b8815150217815585516002820155602086015160038201556040860151600480830191909155606087015160058301556131c390600683019087906147a4565b50805486516020808901516040808b015160608c0151825160008082529581019093526001600160601b03909616956001957f3475f0ed7216dd7d453db663a1c3024e4f36cc925521d54edb9d13e022cbee3d958f959194919392918e915060405161323597969594939291906154ef565b60405180910390a361324a60018060016134d5565b50805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050505050505050565b6000546001600160a01b031633146132ca5760405163c383977560e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526008602052604081205460ff166133255760405163e51cf7bf60e01b815260040160405180910390fd5b613330858585612f62565b82101561335057604051630e3360f160e21b815260040160405180910390fd5b6133656001600160a01b03841633308561443f565b613382576040516312171d8360e31b815260040160405180910390fd5b6133c68686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506141589050565b90505b95945050505050565b60008060006133e08461451b565b5091509150806005836001600160601b031681548110613402576134026151fb565b90600052602060002090600c020160040154612fa79190615358565b6004546001600160a01b0316331461344957604051639d6cab9960e01b815260040160405180910390fd5b613457848484846001613f9e565b5050505050565b600060078281548110613473576134736151fb565b600091825260209091206003600490920201015492915050565b60006005836001600160601b0316815481106134ab576134ab6151fb565b60009182526020808320948352600c91909102909301600a0190925250604090205460ff16919050565b806005846001600160601b0316815481106134f2576134f26151fb565b60009182526020808320868452600c92909202909101600a0190526040808220805460ff19169315159390931790925590518215159184916001600160601b038716917fb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc7991a4505050565b6000806007836000015181548110613577576135776151fb565b906000526020600020906004020190506000816003018460200151815481106135a2576135a26151fb565b90600052602060002090600b02019050600060068260000154815481106135cb576135cb6151fb565b60009182526020808320919091015487519188015160e089015160808a015160a08b01516040516333ac937b60e11b8152600481019690965260248601939093526044850191909152606484015260848301526001600160a01b03169250829063675926f69060a401602060405180830381865afa158015613651573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367591906153e4565b905061271081111561368657506127105b60006127106136958382615227565b85600101546136a49190615358565b6136ae9190615385565b9050808760c0018181516136c291906153d1565b90525060e08701516006850180546000929081106136e2576136e26151fb565b6000918252602090912001546004805460405163965af6c760e01b81526001600160a01b03938416945092169163965af6c79161372391859187910161548d565b600060405180830381600087803b15801561373d57600080fd5b505af1158015613751573d6000803e3d6000fd5b505060048054604051633c85b79360e21b81526001600160a01b03909116935063f216de4c925061378691859187910161548d565b600060405180830381600087803b1580156137a057600080fd5b505af11580156137b4573d6000803e3d6000fd5b50505050602088015188516001600160a01b0383167f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e7866137f48761556e565b60098b01546040516138169392916000916001600160a01b039091169061558a565b60405180910390a48751602089015160e08a015160405163ba66fde760e01b81526004810193909352602483019190915260448201526001600160a01b0385169063ba66fde790606401602060405180830381865afa15801561387d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a1919061523a565b613907576004805460405163b5d69e9960e01b81526001600160a01b039091169163b5d69e99916138d4918591016149af565b600060405180830381600087803b1580156138ee57600080fd5b505af1158015613902573d6000803e3d6000fd5b505050505b600188606001516139189190615227565b8860e0015114801561392c57506040880151155b15613a1d5760098501546001600160a01b0316613975576000805460028701546040516001600160a01b039092169281156108fc029290818181858888f193505050505061399c565b6000546002860154600987015461399a926001600160a01b03918216929116906145a2565b505b60005460c08901516002546139bf926001600160a01b03918216929116906145a2565b506020880151885160c08a0151600288015460098901546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf493613a1493909290916001600160a01b03909116906155ae565b60405180910390a35b50505060c090940151949350505050565b60006007826000015181548110613a4757613a476151fb565b90600052602060002090600402019050600081600301836020015181548110613a7257613a726151fb565b90600052602060002090600b0201905060006006826000015481548110613a9b57613a9b6151fb565b6000918252602080832090910154865191870151606088015160e08901516001600160a01b039093169550859363675926f693909291613ada916155cd565b60808a015160a08b01516040516001600160e01b031960e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401602060405180830381865afa158015613b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b5e91906153e4565b9050612710811115613b6f57506127105b60008360060186606001518760e00151613b8991906155cd565b81548110613b9957613b996151fb565b600091825260208220015460018601546001600160a01b03909116925061271090613bc5908590615358565b613bcf9190615385565b6004805460405163965af6c760e01b81529293506001600160a01b03169163965af6c791613c0191869186910161548d565b600060405180830381600087803b158015613c1b57600080fd5b505af1158015613c2f573d6000803e3d6000fd5b505060048054604051636624192f60e01b81526001600160a01b039091169350636624192f9250613c62918691016149af565b602060405180830381865afa158015613c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca3919061523a565b613cc057600254613cbe906001600160a01b031683836145a2565b505b60006127108489604001518a60c00151613cda9190615385565b613ce49190615358565b613cee9190615385565b905080866008016000828254613d0491906153d1565b925050819055506000612710858a604001518960020154613d259190615385565b613d2f9190615358565b613d399190615385565b905080876007016000828254613d4f91906153d1565b9091555050600254613d6b906001600160a01b031685846145a2565b5060098701546001600160a01b0316613da9576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505050613dc4565b6009870154613dc2906001600160a01b031685836145a2565b505b6020890151895160098901546040516001600160a01b03888116927f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e792613e14928c928a928a929091169061558a565b60405180910390a4600189606001516002613e2f9190615358565b613e399190615227565b8960e00151036125ef57600087600801548a60c00151613e599190615227565b9050600088600701548960020154613e719190615227565b905081151580613e8057508015155b15611556578115613eaa57600054600254613ea8916001600160a01b039182169116846145a2565b505b8015613f115760098901546001600160a01b0316613ef057600080546040516001600160a01b039091169183156108fc02918491818181858888f1935050505050613f11565b60005460098a0154613f0f916001600160a01b039182169116836145a2565b505b60208b01518b5160098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf491613f5b91879187916001600160a01b03909116906155ae565b60405180910390a35050505050505050505050565b6000546001600160a01b03163314613f9b5760405163c383977560e01b815260040160405180910390fd5b50565b60006001600160601b0385161580613fc057506005546001600160601b038616115b15613fd857613fd082600461466f565b5060006133c9565b831580159061401357506005856001600160601b031681548110613ffe57613ffe6151fb565b90600052602060002090600c02016002015484105b1561402357613fd082600561466f565b60048054604051630a5861b960e41b81526001600160a01b03898116938201939093526001600160601b03881660248201526044810187905285151560648201526000928392839291169063a5861b90906084016060604051808303816000875af1158015614096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ba91906155e1565b9194509250905060008160078111156140d5576140d5614b3e565b146140f0576140e4858261466f565b600093505050506133c9565b821561411d5760025461410e906001600160a01b03168a308661443f565b61411d576140e485600161466f565b81156141495760025461413a906001600160a01b03168a846145a2565b614149576140e485600261466f565b50600198975050505050505050565b60008060006141668661451b565b92505091506005826001600160601b031681548110614187576141876151fb565b60009182526020808320848452600a600c90930201919091019052604090205460ff166141c75760405163b34eb75d60e01b815260040160405180910390fd5b600780546001810182556000918252600160601b33026001600160601b03851617600482027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6888101918255427fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a909101556006805492965090929184908110614252576142526151fb565b6000918252602082200154600580546001600160a01b039092169350906001600160601b038716908110614288576142886151fb565b60009182526020808320600387018054600181018255908552918420600c909302019350600b0201906001600160a01b038a16156142d3576142ce8a8460040154611048565b6142d9565b82600401545b90506142e5818a615385565b60038084019190915586835583015460028401546127109161430691615358565b6143109190615385565b6001830155600282018990556009820180546001600160a01b0319166001600160a01b038c8116919091179091556004805460405163d09f392d60e01b81529182018b9052600060248301529091169063d09f392d90604401600060405180830381600087803b15801561438357600080fd5b505af1158015614397573d6000803e3d6000fd5b50505050836001600160a01b031663b6ede540898e8e86600301546040518563ffffffff1660e01b81526004016143d194939291906154a6565b600060405180830381600087803b1580156143eb57600080fd5b505af11580156143ff573d6000803e3d6000fd5b50506040513392508a91507f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a350505050505050949350505050565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516144a49190615421565b6000604051808303816000865af19150503d80600081146144e1576040519150601f19603f3d011682016040523d82523d6000602084013e6144e6565b606091505b5091509150818015614510575080511580614510575080806020019051810190614510919061523a565b979650505050505050565b60008060006040845110614590575050506020810151604082015160608301516001600160601b038316158061455c57506005546001600160601b03841610155b1561456657600192505b8160000361457357600391505b80158061458257506006548110155b1561458b575060015b61459b565b506001915060039050815b9193909250565b6000806000856001600160a01b031685856040516024016145c492919061548d565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516145f99190615421565b6000604051808303816000865af19150503d8060008114614636576040519150601f19603f3d011682016040523d82523d6000602084013e61463b565b606091505b5091509150818015614665575080511580614665575080806020019051810190614665919061523a565b9695505050505050565b600182600181111561468357614683614b3e565b0361468c575050565b60018160078111156146a0576146a0614b3e565b036146be57604051630f323ed960e11b815260040160405180910390fd5b60028160078111156146d2576146d2614b3e565b036146f05760405163e45e13a360e01b815260040160405180910390fd5b600381600781111561470457614704614b3e565b0361472257604051631d91d0ed60e31b815260040160405180910390fd5b600481600781111561473657614736614b3e565b03614754576040516321f1774b60e11b815260040160405180910390fd5b600581600781111561476857614768614b3e565b036117f057604051630caac6b360e31b815260040160405180910390fd5b60405180608001604052806004906020820280368337509192915050565b82600481019282156147d2579160200282015b828111156147d25782518255916020019190600101906147b7565b506147de92915061481c565b5090565b8280548282559060005260206000209081019282156147d257916020028201828111156147d25782518255916020019190600101906147b7565b5b808211156147de576000815560010161481d565b6001600160a01b0381168114613f9b57600080fd5b60006020828403121561485857600080fd5b813561486381614831565b9392505050565b80356001600160601b038116811461488157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156148c4576148c4614886565b604052919050565b600082601f8301126148dd57600080fd5b813560206001600160401b038211156148f8576148f8614886565b8160051b61490782820161489c565b928352848101820192828101908785111561492157600080fd5b83870192505b8483101561451057823582529183019190830190614927565b8015158114613f9b57600080fd5b60008060006060848603121561496357600080fd5b61496c8461486a565b925060208401356001600160401b0381111561498757600080fd5b614993868287016148cc565b92505060408401356149a481614940565b809150509250925092565b6001600160a01b0391909116815260200190565b6000602082840312156149d557600080fd5b5035919050565b600080604083850312156149ef57600080fd5b82356149fa81614831565b946020939093013593505050565b600080600060608486031215614a1d57600080fd5b505081359360208301359350604090920135919050565b600060208284031215614a4657600080fd5b6110998261486a565b8060005b6004811015610b0b578151845260209384019390910190600101614a53565b6080810161109c8284614a4f565b600082601f830112614a9157600080fd5b81356001600160401b03811115614aaa57614aaa614886565b614abd601f8201601f191660200161489c565b818152846020838601011115614ad257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614b0257600080fd5b8235614b0d81614831565b915060208301356001600160401b03811115614b2857600080fd5b614b3485828601614a80565b9150509250929050565b634e487b7160e01b600052602160045260246000fd5b60058110614b7257634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03861681526001600160a01b038516602082015260a08101614ba26040830186614b54565b9215156060820152608001529392505050565b600080600060608486031215614bca57600080fd5b8335614bd581614831565b92506020840135915060408401356001600160401b03811115614bf757600080fd5b614c0386828701614a80565b9150509250925092565b60008060408385031215614c2057600080fd5b6149fa8361486a565b60008060408385031215614c3c57600080fd5b8235614c4781614831565b91506020830135614c5781614940565b809150509250929050565b600080600060608486031215614c7757600080fd5b8335614c8281614831565b925060208401356001600160401b0381168114614c9e57600080fd5b9150604084013560ff811681146149a457600080fd5b600082601f830112614cc557600080fd5b604051608081018181106001600160401b0382111715614ce757614ce7614886565b604052806080840185811115614cfc57600080fd5b845b81811015614d16578035835260209283019201614cfe565b509195945050505050565b6000806000806000806000610140888a031215614d3d57600080fd5b614d468861486a565b96506020880135614d5681614940565b955060408801359450606088013593506080880135925060a08801359150614d818960c08a01614cb4565b905092959891949750929550565b60008060408385031215614da257600080fd5b50508035926020909101359150565b60008151808452602080850194506020840160005b83811015614deb5781516001600160a01b031687529582019590820190600101614dc6565b509495945050505050565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c0820152600060c08301516101608060e0850152614e51610180850183614db1565b60e08601516101008681019190915286015161012080870191909152860151909250610140614e8a818701836001600160a01b03169052565b959095015193019290925250919050565b60008060408385031215614eae57600080fd5b823591506020830135614c5781614831565b60008060408385031215614ed357600080fd5b8235915060208301356001600160401b03811115614b2857600080fd5b600080600060608486031215614f0557600080fd5b833592506020840135915060408401356001600160401b03811115614bf757600080fd5b600080600080600080600080610160898b031215614f4657600080fd5b614f4f8961486a565b97506020890135614f5f81614940565b965060408901359550606089013594506080890135935060a08901359250614f8a8a60c08b01614cb4565b91506101408901356001600160401b03811115614fa657600080fd5b614fb28b828c016148cc565b9150509295985092959890939650565b60008083601f840112614fd457600080fd5b5081356001600160401b03811115614feb57600080fd5b60208301915083602082850101111561500357600080fd5b9250929050565b60008060006040848603121561501f57600080fd5b83356001600160401b0381111561503557600080fd5b61504186828701614fc2565b90945092505060208401356149a481614831565b60008060008060008060008060006101e08a8c03121561507457600080fd5b893561507f81614831565b985060208a013561508f81614831565b975060408a013561509f81614831565b965060608a01356150af81614831565b955060808a01356150bf81614831565b945060a08a01356150cf81614940565b93506150de8b60c08c01614cb4565b92506150ee8b6101408c01614cb4565b91506101c08a01356150ff81614831565b809150509295985092959850929598565b60008060008060006080868803121561512857600080fd5b8535945060208601356001600160401b0381111561514557600080fd5b61515188828901614fc2565b909550935050604086013561516581614831565b949793965091946060013592915050565b60006020828403121561518857600080fd5b81356001600160401b0381111561519e57600080fd5b612fa784828501614a80565b600080600080608085870312156151c057600080fd5b84356151cb81614831565b93506151d96020860161486a565b92506040850135915060608501356151f081614940565b939692955090935050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561109c5761109c615211565b60006020828403121561524c57600080fd5b815161486381614940565b6020810161109c8284614b54565b600181815b808511156152a057816000190482111561528657615286615211565b8085161561529357918102915b93841c939080029061526a565b509250929050565b6000826152b75750600161109c565b816152c45750600061109c565b81600181146152da57600281146152e457615300565b600191505061109c565b60ff8411156152f5576152f5615211565b50506001821b61109c565b5060208310610133831016604e8410600b8410161715615323575081810a61109c565b61532d8383615265565b806000190482111561534157615341615211565b029392505050565b600061109960ff8416836152a8565b808202811582820484141761109c5761109c615211565b634e487b7160e01b600052601260045260246000fd5b6000826153945761539461536f565b500490565b6000806000606084860312156153ae57600080fd5b8351925060208401516153c081614940565b60408501519092506149a481614940565b8082018082111561109c5761109c615211565b6000602082840312156153f657600080fd5b5051919050565b60005b83811015615418578181015183820152602001615400565b50506000910152565b600082516154338184602087016153fd565b9190910192915050565b600061012082019050871515825286602083015285604083015284606083015283608083015261451060a0830184614a4f565b60006020828403121561548257600080fd5b815161486381614831565b6001600160a01b03929092168252602082015260400190565b84815283602082015260806040820152600083518060808401526154d18160a08501602088016153fd565b606083019390935250601f91909101601f19160160a0019392505050565b60006101408083018a1515845260208a602086015289604086015288606086015287608086015261552360a0860188614a4f565b610120850192909252845190819052610160840191602086019160005b8181101561555c57835185529382019392820192600101615540565b50929c9b505050505050505050505050565b6000600160ff1b820161558357615583615211565b5060000390565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091526001600160a01b0316604082015260600190565b6000826155dc576155dc61536f565b500690565b6000806000606084860312156155f657600080fd5b83519250602084015191506040840151600881106149a457600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122088332e4bd463fd5a2a31ab980f2b2ead694ff8b8a10a33684171a45128537f0a64736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061027c5760003560e01c80638a9bb02a1161014f578063d07368bd116100c1578063f6506db41161007a578063f6506db414610867578063f7434ea914610887578063fbb519e7146108a7578063fbf405b0146108c7578063fc6f8f16146108e7578063fe524c391461090757600080fd5b8063d07368bd146107b2578063d4d1d76a146107d2578063d874514b146107e7578063d98493f614610807578063e399d29b14610827578063e4c0aaf41461084757600080fd5b8063b702a87911610113578063b702a8791461070c578063c13517e11461072c578063c258bb191461073f578063c35699021461075f578063c71f425314610772578063cf0c38f81461079257600080fd5b80638a9bb02a1461064a5780638bb0487514610677578063acdbf51d14610697578063afe15cfb146106b7578063b0049637146106ec57600080fd5b80632e1daf2f116101f357806371ae413d116101ac57806371ae413d1461058a578063751accd0146105aa5780637717a6e8146105ca5780637934c0be146105ea57806382d022371461060a57806386541b241461062a57600080fd5b80632e1daf2f146104c45780633cfd1184146104e45780634f1ef2861461051157806352d1902d14610524578063564a565d1461053957806359ec827e1461056a57600080fd5b8063115d537611610245578063115d5376146103885780631860592b146103a857806319b81529146103d65780631c3db16d146104065780631f5a0dd2146104435780632d29a47b146104a457600080fd5b8062f5822c146102815780630219da79146102a357806309cfdc9c1461031b5780630b7414bc1461033b5780630c340a241461035b575b600080fd5b34801561028d57600080fd5b506102a161029c366004614846565b610927565b005b3480156102af57600080fd5b506102ee6102be366004614846565b60086020526000908152604090205460ff808216916001600160401b0361010082041691600160481b9091041683565b6040805193151584526001600160401b03909216602084015260ff16908201526060015b60405180910390f35b34801561032757600080fd5b506102a1610336366004614846565b610974565b34801561034757600080fd5b506102a161035636600461494e565b6109da565b34801561036757600080fd5b5060005461037b906001600160a01b031681565b60405161031291906149af565b34801561039457600080fd5b506102a16103a33660046149c3565b610b11565b3480156103b457600080fd5b506103c86103c33660046149dc565b611048565b604051908152602001610312565b3480156103e257600080fd5b506103f66103f13660046149c3565b6110a2565b6040519015158152602001610312565b34801561041257600080fd5b506104266104213660046149c3565b61119b565b604080519384529115156020840152151590820152606001610312565b34801561044f57600080fd5b5061046361045e3660046149c3565b61129c565b604080516001600160601b0390981688529515156020880152948601939093526060850191909152608084015260a0830152151560c082015260e001610312565b3480156104b057600080fd5b506102a16104bf366004614a08565b6112fb565b3480156104d057600080fd5b5060045461037b906001600160a01b031681565b3480156104f057600080fd5b506105046104ff366004614a34565b611563565b6040516103129190614a72565b6102a161051f366004614aef565b6115cd565b34801561053057600080fd5b506103c86117f4565b34801561054557600080fd5b506105596105543660046149c3565b611852565b604051610312959493929190614b76565b34801561057657600080fd5b506103c86105853660046149c3565b6118ae565b34801561059657600080fd5b5060015461037b906001600160a01b031681565b3480156105b657600080fd5b506102a16105c5366004614bb5565b611a03565b3480156105d657600080fd5b506102a16105e5366004614c0d565b611aad565b3480156105f657600080fd5b506102a1610605366004614c29565b611abb565b34801561061657600080fd5b506102a1610625366004614c62565b611b3a565b34801561063657600080fd5b506102a1610645366004614d21565b611bf7565b34801561065657600080fd5b5061066a610665366004614d8f565b611dd4565b6040516103129190614df6565b34801561068357600080fd5b506102a16106923660046149c3565b611f60565b3480156106a357600080fd5b5061037b6106b23660046149c3565b6120c4565b3480156106c357600080fd5b506106d76106d23660046149c3565b6120ee565b60408051928352602083019190915201610312565b3480156106f857600080fd5b506102a1610707366004614846565b61219a565b34801561071857600080fd5b506102a1610727366004614e9b565b6121e7565b6103c861073a366004614ec0565b6125fa565b34801561074b57600080fd5b506102a161075a366004614846565b612632565b6102a161076d366004614ef0565b61267f565b34801561077e57600080fd5b506103c861078d3660046149c3565b612b53565b34801561079e57600080fd5b5060035461037b906001600160a01b031681565b3480156107be57600080fd5b506102a16107cd366004614846565b612bbb565b3480156107de57600080fd5b506006546103c8565b3480156107f357600080fd5b506102a1610802366004614f29565b612c64565b34801561081357600080fd5b506103c861082236600461500a565b612f62565b34801561083357600080fd5b506102a1610842366004615055565b612faf565b34801561085357600080fd5b506102a1610862366004614846565b61329f565b34801561087357600080fd5b506103c8610882366004615110565b6132ec565b34801561089357600080fd5b506103c86108a2366004615176565b6133d2565b3480156108b357600080fd5b506102a16108c23660046151aa565b61341e565b3480156108d357600080fd5b5060025461037b906001600160a01b031681565b3480156108f357600080fd5b506103c86109023660046149c3565b61345e565b34801561091357600080fd5b506103f6610922366004614c0d565b61348d565b6000546001600160a01b031633146109525760405163c383977560e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480159061099a57506001546001600160a01b03163314155b156109b857604051633244d29960e21b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610a055760405163c383977560e01b815260040160405180910390fd5b60005b8251811015610b0b578115610aa457828181518110610a2957610a296151fb565b602002602001015160001480610a5c57506006548351849083908110610a5157610a516151fb565b602002602001015110155b15610a7a57604051633d58a98960e11b815260040160405180910390fd5b610a9f84848381518110610a9057610a906151fb565b602002602001015160016134d5565b610b03565b6001838281518110610ab857610ab86151fb565b602002602001015103610ade576040516356d111fd60e11b815260040160405180910390fd5b610b0384848381518110610af457610af46151fb565b602002602001015160006134d5565b600101610a08565b50505050565b600060078281548110610b2657610b266151fb565b600091825260208220600490910201805460058054929450916001600160601b03909116908110610b5957610b596151fb565b6000918252602082206003850154600c909202019250610b7b90600190615227565b90506000836003018281548110610b9457610b946151fb565b600091825260208220600b909102019150600185015460ff166004811115610bbe57610bbe614b3e565b03610c995781158015610c0d57506001840154600684019060ff166004811115610bea57610bea614b3e565b60048110610bfa57610bfa6151fb565b01546002850154610c0b9042615227565b105b15610c2b57604051633e9727df60e01b815260040160405180910390fd5b6003810154600682015414610c53576040516309e4486b60e41b815260040160405180910390fd5b8254600160601b900460ff16610c6a576002610c6d565b60015b60018086018054909160ff1990911690836004811115610c8f57610c8f614b3e565b0217905550610ffa565b60018085015460ff166004811115610cb357610cb3614b3e565b03610dc3576001840154600684019060ff166004811115610cd657610cd6614b3e565b60048110610ce657610ce66151fb565b01546002850154610cf79042615227565b108015610d8e57506006816000015481548110610d1657610d166151fb565b600091825260209091200154604051630baa64d160e01b8152600481018790526001600160a01b0390911690630baa64d190602401602060405180830381865afa158015610d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8c919061523a565b155b15610dac57604051634dfa578560e11b815260040160405180910390fd5b6001808501805460029260ff199091169083610c8f565b6002600185015460ff166004811115610dde57610dde614b3e565b03610f2c576001840154600684019060ff166004811115610e0157610e01614b3e565b60048110610e1157610e116151fb565b01546002850154610e229042615227565b108015610eb957506006816000015481548110610e4157610e416151fb565b6000918252602090912001546040516336a66c7560e11b8152600481018790526001600160a01b0390911690636d4cd8ea90602401602060405180830381865afa158015610e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb7919061523a565b155b15610ed757604051631988dead60e31b815260040160405180910390fd5b600184018054600360ff199091161790558354604051600160601b9091046001600160a01b03169086907fa5d41b970d849372be1da1481ffd78d162bfe57a7aa2fe4e5fb73481fa5ac24f90600090a3610ffa565b6003600185015460ff166004811115610f4757610f47614b3e565b03610fc1576001840154600684019060ff166004811115610f6a57610f6a614b3e565b60048110610f7a57610f7a6151fb565b01546002850154610f8b9042615227565b1015610faa57604051632f4dfd8760e01b815260040160405180910390fd5b6001808501805460049260ff199091169083610c8f565b6004600185015460ff166004811115610fdc57610fdc614b3e565b03610ffa576040516307f38c8f60e11b815260040160405180910390fd5b426002850155600184015460405186917f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b91916110399160ff1690615257565b60405180910390a25050505050565b6001600160a01b03821660009081526008602052604081205461010081046001600160401b03169061108590600160481b900460ff16600a615349565b61108f9084615358565b6110999190615385565b90505b92915050565b600080600783815481106110b8576110b86151fb565b60009182526020822060036004909202019081018054919350906110de90600190615227565b815481106110ee576110ee6151fb565b600091825260208220845460058054600b909402909201945090916001600160601b03909116908110611123576111236151fb565b90600052602060002090600c0201905080600501548260030154101561114e57506000949350505050565b80546005805490916001600160601b031690811061116e5761116e6151fb565b6000918252602080832094548352600a600c9092029094010190925250604090205460ff16159392505050565b600080600080600785815481106111b4576111b46151fb565b60009182526020822060036004909202019081018054919350906111da90600190615227565b815481106111ea576111ea6151fb565b90600052602060002090600b0201905060006006826000015481548110611213576112136151fb565b600091825260209091200154604051631c3db16d60e01b8152600481018990526001600160a01b0390911691508190631c3db16d90602401606060405180830381865afa158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128c9190615399565b9199909850909650945050505050565b600581815481106112ac57600080fd5b60009182526020909120600c9091020180546002820154600383015460048401546005850154600b909501546001600160601b038516965060ff600160601b9095048516959394929391921687565b60008060078581548110611311576113116151fb565b600091825260209091206004918202019150600182015460ff16600481111561133c5761133c614b3e565b1461135a57604051638794ce4b60e01b815260040160405180910390fd5b80600301848154811061136f5761136f6151fb565b6000918252602082206004600b9092020190810154909350915061139384836153d1565b60058401546006850154600286015492935090916000906113b5908390615385565b905060008660010154905060008060068960000154815481106113da576113da6151fb565b60009182526020909120015460405163368efae360e21b8152600481018e9052602481018d90526001600160a01b039091169150819063da3beb8c90604401602060405180830381865afa158015611436573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145a91906153e4565b915050806000036114765783861115611471578395505b611496565b611481846002615358565b86111561149657611493846002615358565b95505b60048801869055865b8681101561154257848110156114f8576114f16040518061010001604052808e81526020018d81526020018481526020018781526020018681526020018581526020018881526020018381525061355d565b955061153a565b61153a6040518061010001604052808e81526020018d815260200184815260200187815260200186815260200185815260200188815260200183815250613a2e565b60010161149f565b508488600501541461155657600588018590555b5050505050505050505050565b61156b614786565b6005826001600160601b031681548110611587576115876151fb565b6000918252602090912060408051608081019182905292600c029091016006019060049082845b8154815260200190600101908083116115ae5750505050509050919050565b6115d682613f70565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061165457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166116486000805160206156148339815191525490565b6001600160a01b031614155b156116725760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116cc575060408051601f3d908101601f191682019092526116c9918101906153e4565b60015b6116f45781604051630c76093760e01b81526004016116eb91906149af565b60405180910390fd5b600080516020615614833981519152811461172557604051632a87526960e21b8152600481018290526024016116eb565b6000805160206156148339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156117ee576000836001600160a01b03168360405161178c9190615421565b600060405180830381855af49150503d80600081146117c7576040519150601f19603f3d011682016040523d82523d6000602084013e6117cc565b606091505b5050905080610b0b576040516339b21b5d60e11b815260040160405180910390fd5b505b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461183f5760405163703e46dd60e11b815260040160405180910390fd5b5060008051602061561483398151915290565b6007818154811061186257600080fd5b60009182526020909120600490910201805460018201546002909201546001600160601b0382169350600160601b9091046001600160a01b03169160ff80821692610100909204169085565b600080600783815481106118c4576118c46151fb565b60009182526020822060036004909202019081018054919350906118ea90600190615227565b815481106118fa576118fa6151fb565b600091825260208220845460058054600b909402909201945090916001600160601b0390911690811061192f5761192f6151fb565b90600052602060002090600c0201905080600501548260030154106119ce5782546001600160601b031660001901611970576001600160ff1b0393506119fb565b6003820154611980906002615358565b61198b9060016153d1565b81546005805490916001600160601b03169081106119ab576119ab6151fb565b90600052602060002090600c0201600401546119c79190615358565b93506119fb565b60038201546119de906002615358565b6119e99060016153d1565b81600401546119f89190615358565b93505b505050919050565b6000546001600160a01b03163314611a2e5760405163c383977560e01b815260040160405180910390fd5b6000836001600160a01b03168383604051611a499190615421565b60006040518083038185875af1925050503d8060008114611a86576040519150601f19603f3d011682016040523d82523d6000602084013e611a8b565b606091505b5050905080610b0b576040516322092f2f60e11b815260040160405180910390fd5b6117ee338383600080613f9e565b6000546001600160a01b03163314611ae65760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f541615e167511d757a7067a700eb54431b256bb458dfdce0ac58bf2ed0aefd4491a35050565b6000546001600160a01b03163314611b655760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038316600081815260086020908152604091829020805469ffffffffffffffffff0019166101006001600160401b03881690810260ff60481b191691909117600160481b60ff8816908102919091179092558351908152918201527fe6996b7f03e9bd02228b99d3d946932e3197f505f60542c4cfbc919441d8a4e6910160405180910390a2505050565b6000546001600160a01b03163314611c225760405163c383977560e01b815260040160405180910390fd5b60006005886001600160601b031681548110611c4057611c406151fb565b90600052602060002090600c0201905060016001600160601b0316886001600160601b031614158015611ca2575080546005805488926001600160601b0316908110611c8e57611c8e6151fb565b90600052602060002090600c020160020154115b15611cc057604051639717078960e01b815260040160405180910390fd5b60005b6001820154811015611d3b57866005836001018381548110611ce757611ce76151fb565b906000526020600020015481548110611d0257611d026151fb565b90600052602060002090600c0201600201541015611d3357604051639717078960e01b815260040160405180910390fd5b600101611cc3565b5060028101869055805460ff60601b1916600160601b8815150217815560038101859055600480820185905560058201849055611d7e90600683019084906147a4565b50876001600160601b03167f709b1f5fda58af9a4f52dacd1ec404840a8148455700cce155a2bd8cf127ef1a888888888888604051611dc29695949392919061543d565b60405180910390a25050505050505050565b611e3a60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b60078381548110611e4d57611e4d6151fb565b90600052602060002090600402016003018281548110611e6f57611e6f6151fb565b90600052602060002090600b02016040518061016001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201805480602002602001604051908101604052809291908181526020018280548015611f1e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f00575b5050509183525050600782015460208201526008820154604082015260098201546001600160a01b03166060820152600a909101546080909101529392505050565b600060078281548110611f7557611f756151fb565b600091825260209091206004918202019150600182015460ff166004811115611fa057611fa0614b3e565b14611fbe57604051638794ce4b60e01b815260040160405180910390fd5b6001810154610100900460ff1615611fe95760405163c977f8d360e01b815260040160405180910390fd5b6000611ff48361119b565b505060018301805461010061ff001990911617905582546040518281529192508491600160601b9091046001600160a01b0316907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a3815460405163188d362b60e11b81526004810185905260248101839052600160601b9091046001600160a01b03169063311a6c5690604401600060405180830381600087803b1580156120a757600080fd5b505af11580156120bb573d6000803e3d6000fd5b50505050505050565b600681815481106120d457600080fd5b6000918252602090912001546001600160a01b0316905081565b600080600060078481548110612106576121066151fb565b6000918252602090912060049091020190506003600182015460ff16600481111561213357612133614b3e565b0361218b576002810154815460058054929550916001600160601b03909116908110612161576121616151fb565b600091825260209091206009600c909202010154600282015461218491906153d1565b9150612194565b60009250600091505b50915091565b6000546001600160a01b031633146121c55760405163c383977560e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480159061220d57506001546001600160a01b03163314155b1561222b57604051633244d29960e21b815260040160405180910390fd5b600060078381548110612240576122406151fb565b906000526020600020906004020190506000600182600301805490506122669190615227565b9050600082600301828154811061227f5761227f6151fb565b600091825260208220600b909102019150600184015460ff1660048111156122a9576122a9614b3e565b146122c757604051638285c4ef60e01b815260040160405180910390fd5b60038101546006820154106122ef57604051634df06de360e01b815260040160405180910390fd5b60048054604051633c694c4160e21b81526001600160a01b039091169163f1a531049161231e918891016149af565b600060405180830381600087803b15801561233857600080fd5b505af115801561234c573d6000803e3d6000fd5b5050505060006006826000015481548110612369576123696151fb565b6000918252602082200154600a8401546001600160a01b0390911692506123919060016153d1565b60405163695c01ad60e11b815260048101899052602481018290529091506000906001600160a01b0384169063d2b8035a906044016020604051808303816000875af11580156123e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124099190615470565b90506001600160a01b03811661243257604051632e38b8f760e11b815260040160405180910390fd5b6004805460018601546040516310f0b12f60e11b81526001600160a01b03909216926321e1625e9261246892869290910161548d565b600060405180830381600087803b15801561248257600080fd5b505af1158015612496573d6000803e3d6000fd5b50505060068501546040518a92506001600160a01b038416917f6119cf536152c11e0a9a6c22f3953ce4ecc93ee54fa72ffa326ffabded21509b916124e3918a8252602082015260400190565b60405180910390a36006840180546001810182556000828152602090200180546001600160a01b0319166001600160a01b038416179055600385015490540361258a5760048054604051632e96bc2360e11b81529182018a9052602482018790526001600160a01b031690635d2d784690604401600060405180830381600087803b15801561257157600080fd5b505af1158015612585573d6000803e3d6000fd5b505050505b50600a8301555060048054604051633c694c4160e21b81526001600160a01b039091169163f1a53104916125c191600091016149af565b600060405180830381600087803b1580156125db57600080fd5b505af11580156125ef573d6000803e3d6000fd5b505050505050505050565b6000612605826133d2565b34101561262557604051630e3360f160e21b815260040160405180910390fd5b6110998383600034614158565b6000546001600160a01b0316331461265d5760405163c383977560e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b612688836118ae565b3410156126a857604051633191f8f160e01b815260040160405180910390fd5b6000600784815481106126bd576126bd6151fb565b6000918252602090912060049091020190506003600182015460ff1660048111156126ea576126ea614b3e565b14612708576040516337cdefcb60e21b815260040160405180910390fd5b6003810180546000919061271e90600190615227565b8154811061272e5761272e6151fb565b90600052602060002090600b020190506006816000015481548110612755576127556151fb565b6000918252602090912001546001600160a01b031633146127895760405163065f245f60e01b815260040160405180910390fd5b8154815460038401805460018101825560009182526020909120600580546001600160601b0390951694600b90930290910191849081106127cc576127cc6151fb565b90600052602060002090600c0201600501548460030154106128d5576005836001600160601b031681548110612804576128046151fb565b60009182526020909120600c9091020154600580546001600160601b0390921694509084908110612837576128376151fb565b60009182526020808320858452600a600c90930201919091019052604090205460ff1661286357600191505b84546001600160601b038481169116146128d557845460038601546001600160601b039091169061289690600190615227565b6040516001600160601b03861681528a907f736e3f52761298c8c0823e1ebf482ed3c5ecb304f743d2d91a7c006e8e8d7a1f9060200160405180910390a45b84546001600160601b0319166001600160601b038416908117865560018601805460ff1916905542600287015560058054600092908110612918576129186151fb565b90600052602060002090600c020190508060040154346129389190615385565b8260030181905550612710816003015482600201546129579190615358565b6129619190615385565b60018084019190915534600284015583835560045460038801546001600160a01b039091169163d09f392d918c9161299891615227565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b1580156129d657600080fd5b505af11580156129ea573d6000803e3d6000fd5b505086548454149150612ad090505784546003870154612a0c90600190615227565b83546040519081528b907fcbe7939a71f0b369c7471d760a0a99b60b7bb010ee0406cba8a46679d1ea77569060200160405180910390a46006826000015481548110612a5a57612a5a6151fb565b60009182526020909120015460038301546040516302dbb79560e61b81526001600160a01b039092169163b6ede54091612a9d918d918d918d91906004016154a6565b600060405180830381600087803b158015612ab757600080fd5b505af1158015612acb573d6000803e3d6000fd5b505050505b8554604051600160601b9091046001600160a01b0316908a907f9c9b64db9e130f48381bf697abf638e73117dbfbfd7a4484f2da3ba188f4187d90600090a3887f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b916000604051612b409190615257565b60405180910390a2505050505050505050565b60008060078381548110612b6957612b696151fb565b906000526020600020906004020190508060030160018260030180549050612b919190615227565b81548110612ba157612ba16151fb565b90600052602060002090600b020160030154915050919050565b6000546001600160a01b03163314612be65760405163c383977560e01b815260040160405180910390fd5b6006805460018101825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f810180546001600160a01b0319166001600160a01b0385169081179091556040519192909183917f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a35050565b6000546001600160a01b03163314612c8f5760405163c383977560e01b815260040160405180910390fd5b856005896001600160601b031681548110612cac57612cac6151fb565b90600052602060002090600c0201600201541115612cdd57604051639717078960e01b815260040160405180910390fd5b8051600003612cff5760405163402585f560e01b815260040160405180910390fd5b6001600160601b038816612d2657604051631ef4f64960e01b815260040160405180910390fd5b60058054600181018255600091825290600c82027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905b8351811015612e1557838181518110612d7957612d796151fb565b602002602001015160001480612dac57506006548451859083908110612da157612da16151fb565b602002602001015110155b15612dca57604051633d58a98960e11b815260040160405180910390fd5b600182600a016000868481518110612de457612de46151fb565b6020908102919091018101518252810191909152604001600020805460ff1916911515919091179055600101612d5e565b5060016000908152600a8201602052604090205460ff16612e49576040516306351b3d60e31b815260040160405180910390fd5b80546001600160601b0319166001600160601b038b161781556040805160008152602081019182905251612e819160018401916147e2565b50805460ff60601b1916600160601b8a1515021781556002810188905560038101879055600480820187905560058201869055612ec490600683019086906147a4565b5060058a6001600160601b031681548110612ee157612ee16151fb565b600091825260208083206001600c909302018201805492830181558352909120018290556040516001600160601b038b169083907f3475f0ed7216dd7d453db663a1c3024e4f36cc925521d54edb9d13e022cbee3d90612f4e908d908d908d908d908d908d908d906154ef565b60405180910390a350505050505050505050565b6000612fa7826103c386868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506133d292505050565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff1680612ff8575080546001600160401b03808416911610155b156130155760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155600080546001600160a01b03808e166001600160a01b0319928316178355600180548e8316908416178155600280548e8416908516178155600380548e8516908616179055600480548985169086161790556006805481875291820190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40018054928c1692909316821790925560405190927f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a360058054600082815260028201909255600c6001909101027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0810180546001600160601b031916815560408051938452602084019081905292519092613174927f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db101916147e2565b50805460ff60601b1916600160601b8815150217815585516002820155602086015160038201556040860151600480830191909155606087015160058301556131c390600683019087906147a4565b50805486516020808901516040808b015160608c0151825160008082529581019093526001600160601b03909616956001957f3475f0ed7216dd7d453db663a1c3024e4f36cc925521d54edb9d13e022cbee3d958f959194919392918e915060405161323597969594939291906154ef565b60405180910390a361324a60018060016134d5565b50805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050505050505050565b6000546001600160a01b031633146132ca5760405163c383977560e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526008602052604081205460ff166133255760405163e51cf7bf60e01b815260040160405180910390fd5b613330858585612f62565b82101561335057604051630e3360f160e21b815260040160405180910390fd5b6133656001600160a01b03841633308561443f565b613382576040516312171d8360e31b815260040160405180910390fd5b6133c68686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506141589050565b90505b95945050505050565b60008060006133e08461451b565b5091509150806005836001600160601b031681548110613402576134026151fb565b90600052602060002090600c020160040154612fa79190615358565b6004546001600160a01b0316331461344957604051639d6cab9960e01b815260040160405180910390fd5b613457848484846001613f9e565b5050505050565b600060078281548110613473576134736151fb565b600091825260209091206003600490920201015492915050565b60006005836001600160601b0316815481106134ab576134ab6151fb565b60009182526020808320948352600c91909102909301600a0190925250604090205460ff16919050565b806005846001600160601b0316815481106134f2576134f26151fb565b60009182526020808320868452600c92909202909101600a0190526040808220805460ff19169315159390931790925590518215159184916001600160601b038716917fb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc7991a4505050565b6000806007836000015181548110613577576135776151fb565b906000526020600020906004020190506000816003018460200151815481106135a2576135a26151fb565b90600052602060002090600b02019050600060068260000154815481106135cb576135cb6151fb565b60009182526020808320919091015487519188015160e089015160808a015160a08b01516040516333ac937b60e11b8152600481019690965260248601939093526044850191909152606484015260848301526001600160a01b03169250829063675926f69060a401602060405180830381865afa158015613651573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367591906153e4565b905061271081111561368657506127105b60006127106136958382615227565b85600101546136a49190615358565b6136ae9190615385565b9050808760c0018181516136c291906153d1565b90525060e08701516006850180546000929081106136e2576136e26151fb565b6000918252602090912001546004805460405163965af6c760e01b81526001600160a01b03938416945092169163965af6c79161372391859187910161548d565b600060405180830381600087803b15801561373d57600080fd5b505af1158015613751573d6000803e3d6000fd5b505060048054604051633c85b79360e21b81526001600160a01b03909116935063f216de4c925061378691859187910161548d565b600060405180830381600087803b1580156137a057600080fd5b505af11580156137b4573d6000803e3d6000fd5b50505050602088015188516001600160a01b0383167f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e7866137f48761556e565b60098b01546040516138169392916000916001600160a01b039091169061558a565b60405180910390a48751602089015160e08a015160405163ba66fde760e01b81526004810193909352602483019190915260448201526001600160a01b0385169063ba66fde790606401602060405180830381865afa15801561387d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a1919061523a565b613907576004805460405163b5d69e9960e01b81526001600160a01b039091169163b5d69e99916138d4918591016149af565b600060405180830381600087803b1580156138ee57600080fd5b505af1158015613902573d6000803e3d6000fd5b505050505b600188606001516139189190615227565b8860e0015114801561392c57506040880151155b15613a1d5760098501546001600160a01b0316613975576000805460028701546040516001600160a01b039092169281156108fc029290818181858888f193505050505061399c565b6000546002860154600987015461399a926001600160a01b03918216929116906145a2565b505b60005460c08901516002546139bf926001600160a01b03918216929116906145a2565b506020880151885160c08a0151600288015460098901546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf493613a1493909290916001600160a01b03909116906155ae565b60405180910390a35b50505060c090940151949350505050565b60006007826000015181548110613a4757613a476151fb565b90600052602060002090600402019050600081600301836020015181548110613a7257613a726151fb565b90600052602060002090600b0201905060006006826000015481548110613a9b57613a9b6151fb565b6000918252602080832090910154865191870151606088015160e08901516001600160a01b039093169550859363675926f693909291613ada916155cd565b60808a015160a08b01516040516001600160e01b031960e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401602060405180830381865afa158015613b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b5e91906153e4565b9050612710811115613b6f57506127105b60008360060186606001518760e00151613b8991906155cd565b81548110613b9957613b996151fb565b600091825260208220015460018601546001600160a01b03909116925061271090613bc5908590615358565b613bcf9190615385565b6004805460405163965af6c760e01b81529293506001600160a01b03169163965af6c791613c0191869186910161548d565b600060405180830381600087803b158015613c1b57600080fd5b505af1158015613c2f573d6000803e3d6000fd5b505060048054604051636624192f60e01b81526001600160a01b039091169350636624192f9250613c62918691016149af565b602060405180830381865afa158015613c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca3919061523a565b613cc057600254613cbe906001600160a01b031683836145a2565b505b60006127108489604001518a60c00151613cda9190615385565b613ce49190615358565b613cee9190615385565b905080866008016000828254613d0491906153d1565b925050819055506000612710858a604001518960020154613d259190615385565b613d2f9190615358565b613d399190615385565b905080876007016000828254613d4f91906153d1565b9091555050600254613d6b906001600160a01b031685846145a2565b5060098701546001600160a01b0316613da9576040516001600160a01b0385169082156108fc029083906000818181858888f1935050505050613dc4565b6009870154613dc2906001600160a01b031685836145a2565b505b6020890151895160098901546040516001600160a01b03888116927f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e792613e14928c928a928a929091169061558a565b60405180910390a4600189606001516002613e2f9190615358565b613e399190615227565b8960e00151036125ef57600087600801548a60c00151613e599190615227565b9050600088600701548960020154613e719190615227565b905081151580613e8057508015155b15611556578115613eaa57600054600254613ea8916001600160a01b039182169116846145a2565b505b8015613f115760098901546001600160a01b0316613ef057600080546040516001600160a01b039091169183156108fc02918491818181858888f1935050505050613f11565b60005460098a0154613f0f916001600160a01b039182169116836145a2565b505b60208b01518b5160098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf491613f5b91879187916001600160a01b03909116906155ae565b60405180910390a35050505050505050505050565b6000546001600160a01b03163314613f9b5760405163c383977560e01b815260040160405180910390fd5b50565b60006001600160601b0385161580613fc057506005546001600160601b038616115b15613fd857613fd082600461466f565b5060006133c9565b831580159061401357506005856001600160601b031681548110613ffe57613ffe6151fb565b90600052602060002090600c02016002015484105b1561402357613fd082600561466f565b60048054604051630a5861b960e41b81526001600160a01b03898116938201939093526001600160601b03881660248201526044810187905285151560648201526000928392839291169063a5861b90906084016060604051808303816000875af1158015614096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ba91906155e1565b9194509250905060008160078111156140d5576140d5614b3e565b146140f0576140e4858261466f565b600093505050506133c9565b821561411d5760025461410e906001600160a01b03168a308661443f565b61411d576140e485600161466f565b81156141495760025461413a906001600160a01b03168a846145a2565b614149576140e485600261466f565b50600198975050505050505050565b60008060006141668661451b565b92505091506005826001600160601b031681548110614187576141876151fb565b60009182526020808320848452600a600c90930201919091019052604090205460ff166141c75760405163b34eb75d60e01b815260040160405180910390fd5b600780546001810182556000918252600160601b33026001600160601b03851617600482027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6888101918255427fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a909101556006805492965090929184908110614252576142526151fb565b6000918252602082200154600580546001600160a01b039092169350906001600160601b038716908110614288576142886151fb565b60009182526020808320600387018054600181018255908552918420600c909302019350600b0201906001600160a01b038a16156142d3576142ce8a8460040154611048565b6142d9565b82600401545b90506142e5818a615385565b60038084019190915586835583015460028401546127109161430691615358565b6143109190615385565b6001830155600282018990556009820180546001600160a01b0319166001600160a01b038c8116919091179091556004805460405163d09f392d60e01b81529182018b9052600060248301529091169063d09f392d90604401600060405180830381600087803b15801561438357600080fd5b505af1158015614397573d6000803e3d6000fd5b50505050836001600160a01b031663b6ede540898e8e86600301546040518563ffffffff1660e01b81526004016143d194939291906154a6565b600060405180830381600087803b1580156143eb57600080fd5b505af11580156143ff573d6000803e3d6000fd5b50506040513392508a91507f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a350505050505050949350505050565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516144a49190615421565b6000604051808303816000865af19150503d80600081146144e1576040519150601f19603f3d011682016040523d82523d6000602084013e6144e6565b606091505b5091509150818015614510575080511580614510575080806020019051810190614510919061523a565b979650505050505050565b60008060006040845110614590575050506020810151604082015160608301516001600160601b038316158061455c57506005546001600160601b03841610155b1561456657600192505b8160000361457357600391505b80158061458257506006548110155b1561458b575060015b61459b565b506001915060039050815b9193909250565b6000806000856001600160a01b031685856040516024016145c492919061548d565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516145f99190615421565b6000604051808303816000865af19150503d8060008114614636576040519150601f19603f3d011682016040523d82523d6000602084013e61463b565b606091505b5091509150818015614665575080511580614665575080806020019051810190614665919061523a565b9695505050505050565b600182600181111561468357614683614b3e565b0361468c575050565b60018160078111156146a0576146a0614b3e565b036146be57604051630f323ed960e11b815260040160405180910390fd5b60028160078111156146d2576146d2614b3e565b036146f05760405163e45e13a360e01b815260040160405180910390fd5b600381600781111561470457614704614b3e565b0361472257604051631d91d0ed60e31b815260040160405180910390fd5b600481600781111561473657614736614b3e565b03614754576040516321f1774b60e11b815260040160405180910390fd5b600581600781111561476857614768614b3e565b036117f057604051630caac6b360e31b815260040160405180910390fd5b60405180608001604052806004906020820280368337509192915050565b82600481019282156147d2579160200282015b828111156147d25782518255916020019190600101906147b7565b506147de92915061481c565b5090565b8280548282559060005260206000209081019282156147d257916020028201828111156147d25782518255916020019190600101906147b7565b5b808211156147de576000815560010161481d565b6001600160a01b0381168114613f9b57600080fd5b60006020828403121561485857600080fd5b813561486381614831565b9392505050565b80356001600160601b038116811461488157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156148c4576148c4614886565b604052919050565b600082601f8301126148dd57600080fd5b813560206001600160401b038211156148f8576148f8614886565b8160051b61490782820161489c565b928352848101820192828101908785111561492157600080fd5b83870192505b8483101561451057823582529183019190830190614927565b8015158114613f9b57600080fd5b60008060006060848603121561496357600080fd5b61496c8461486a565b925060208401356001600160401b0381111561498757600080fd5b614993868287016148cc565b92505060408401356149a481614940565b809150509250925092565b6001600160a01b0391909116815260200190565b6000602082840312156149d557600080fd5b5035919050565b600080604083850312156149ef57600080fd5b82356149fa81614831565b946020939093013593505050565b600080600060608486031215614a1d57600080fd5b505081359360208301359350604090920135919050565b600060208284031215614a4657600080fd5b6110998261486a565b8060005b6004811015610b0b578151845260209384019390910190600101614a53565b6080810161109c8284614a4f565b600082601f830112614a9157600080fd5b81356001600160401b03811115614aaa57614aaa614886565b614abd601f8201601f191660200161489c565b818152846020838601011115614ad257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614b0257600080fd5b8235614b0d81614831565b915060208301356001600160401b03811115614b2857600080fd5b614b3485828601614a80565b9150509250929050565b634e487b7160e01b600052602160045260246000fd5b60058110614b7257634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03861681526001600160a01b038516602082015260a08101614ba26040830186614b54565b9215156060820152608001529392505050565b600080600060608486031215614bca57600080fd5b8335614bd581614831565b92506020840135915060408401356001600160401b03811115614bf757600080fd5b614c0386828701614a80565b9150509250925092565b60008060408385031215614c2057600080fd5b6149fa8361486a565b60008060408385031215614c3c57600080fd5b8235614c4781614831565b91506020830135614c5781614940565b809150509250929050565b600080600060608486031215614c7757600080fd5b8335614c8281614831565b925060208401356001600160401b0381168114614c9e57600080fd5b9150604084013560ff811681146149a457600080fd5b600082601f830112614cc557600080fd5b604051608081018181106001600160401b0382111715614ce757614ce7614886565b604052806080840185811115614cfc57600080fd5b845b81811015614d16578035835260209283019201614cfe565b509195945050505050565b6000806000806000806000610140888a031215614d3d57600080fd5b614d468861486a565b96506020880135614d5681614940565b955060408801359450606088013593506080880135925060a08801359150614d818960c08a01614cb4565b905092959891949750929550565b60008060408385031215614da257600080fd5b50508035926020909101359150565b60008151808452602080850194506020840160005b83811015614deb5781516001600160a01b031687529582019590820190600101614dc6565b509495945050505050565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c0820152600060c08301516101608060e0850152614e51610180850183614db1565b60e08601516101008681019190915286015161012080870191909152860151909250610140614e8a818701836001600160a01b03169052565b959095015193019290925250919050565b60008060408385031215614eae57600080fd5b823591506020830135614c5781614831565b60008060408385031215614ed357600080fd5b8235915060208301356001600160401b03811115614b2857600080fd5b600080600060608486031215614f0557600080fd5b833592506020840135915060408401356001600160401b03811115614bf757600080fd5b600080600080600080600080610160898b031215614f4657600080fd5b614f4f8961486a565b97506020890135614f5f81614940565b965060408901359550606089013594506080890135935060a08901359250614f8a8a60c08b01614cb4565b91506101408901356001600160401b03811115614fa657600080fd5b614fb28b828c016148cc565b9150509295985092959890939650565b60008083601f840112614fd457600080fd5b5081356001600160401b03811115614feb57600080fd5b60208301915083602082850101111561500357600080fd5b9250929050565b60008060006040848603121561501f57600080fd5b83356001600160401b0381111561503557600080fd5b61504186828701614fc2565b90945092505060208401356149a481614831565b60008060008060008060008060006101e08a8c03121561507457600080fd5b893561507f81614831565b985060208a013561508f81614831565b975060408a013561509f81614831565b965060608a01356150af81614831565b955060808a01356150bf81614831565b945060a08a01356150cf81614940565b93506150de8b60c08c01614cb4565b92506150ee8b6101408c01614cb4565b91506101c08a01356150ff81614831565b809150509295985092959850929598565b60008060008060006080868803121561512857600080fd5b8535945060208601356001600160401b0381111561514557600080fd5b61515188828901614fc2565b909550935050604086013561516581614831565b949793965091946060013592915050565b60006020828403121561518857600080fd5b81356001600160401b0381111561519e57600080fd5b612fa784828501614a80565b600080600080608085870312156151c057600080fd5b84356151cb81614831565b93506151d96020860161486a565b92506040850135915060608501356151f081614940565b939692955090935050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561109c5761109c615211565b60006020828403121561524c57600080fd5b815161486381614940565b6020810161109c8284614b54565b600181815b808511156152a057816000190482111561528657615286615211565b8085161561529357918102915b93841c939080029061526a565b509250929050565b6000826152b75750600161109c565b816152c45750600061109c565b81600181146152da57600281146152e457615300565b600191505061109c565b60ff8411156152f5576152f5615211565b50506001821b61109c565b5060208310610133831016604e8410600b8410161715615323575081810a61109c565b61532d8383615265565b806000190482111561534157615341615211565b029392505050565b600061109960ff8416836152a8565b808202811582820484141761109c5761109c615211565b634e487b7160e01b600052601260045260246000fd5b6000826153945761539461536f565b500490565b6000806000606084860312156153ae57600080fd5b8351925060208401516153c081614940565b60408501519092506149a481614940565b8082018082111561109c5761109c615211565b6000602082840312156153f657600080fd5b5051919050565b60005b83811015615418578181015183820152602001615400565b50506000910152565b600082516154338184602087016153fd565b9190910192915050565b600061012082019050871515825286602083015285604083015284606083015283608083015261451060a0830184614a4f565b60006020828403121561548257600080fd5b815161486381614831565b6001600160a01b03929092168252602082015260400190565b84815283602082015260806040820152600083518060808401526154d18160a08501602088016153fd565b606083019390935250601f91909101601f19160160a0019392505050565b60006101408083018a1515845260208a602086015289604086015288606086015287608086015261552360a0860188614a4f565b610120850192909252845190819052610160840191602086019160005b8181101561555c57835185529382019392820192600101615540565b50929c9b505050505050505050505050565b6000600160ff1b820161558357615583615211565b5060000390565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091526001600160a01b0316604082015260600190565b6000826155dc576155dc61536f565b500690565b6000806000606084860312156155f657600080fd5b83519250602084015191506040840151600881106149a457600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122088332e4bd463fd5a2a31ab980f2b2ead694ff8b8a10a33684171a45128537f0a64736f6c63430008180033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "AcceptedFeeToken(address,bool)": { - "details": "To be emitted when an ERC20 token is added or removed as a method to pay fees.", - "params": { - "_accepted": "Whether the token is accepted or not.", - "_token": "The ERC20 token." - } - }, - "DisputeCreation(uint256,address)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_arbitrable": "The contract which created the dispute.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "NewCurrencyRate(address,uint64,uint8)": { - "details": "To be emitted when the fee for a particular ERC20 token is updated.", - "params": { - "_feeToken": "The ERC20 token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrable": "The arbitrable receiving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - }, - "Upgraded(address)": { - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "addNewDisputeKit(address)": { - "details": "Add a new supported dispute kit module to the court.", - "params": { - "_disputeKitAddress": "The address of the dispute kit contract." - } - }, - "appeal(uint256,uint256,bytes)": { - "details": "Appeals the ruling of a specified dispute. Note: Access restricted to the Dispute Kit for this `disputeID`.", - "params": { - "_disputeID": "The ID of the dispute.", - "_extraData": "Extradata for the dispute. Can be required during court jump.", - "_numberOfChoices": "Number of choices for the dispute. Can be required during court jump." - } - }, - "appealCost(uint256)": { - "details": "Gets the cost of appealing a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "cost": "The appeal cost." - } - }, - "appealPeriod(uint256)": { - "details": "Gets the start and the end of a specified dispute's current appeal period.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "end": "The end of the appeal period.", - "start": "The start of the appeal period." - } - }, - "arbitrationCost(bytes)": { - "details": "Compute the cost of arbitration denominated in ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes)." - }, - "returns": { - "cost": "The arbitration cost in ETH." - } - }, - "arbitrationCost(bytes,address)": { - "details": "Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeToken": "The ERC20 token used to pay fees." - }, - "returns": { - "cost": "The arbitration cost in `_feeToken`." - } - }, - "changeAcceptedFeeTokens(address,bool)": { - "details": "Changes the supported fee tokens.", - "params": { - "_accepted": "Whether the token is supported or not as a method of fee payment.", - "_feeToken": "The fee token." - } - }, - "changeCurrencyRates(address,uint64,uint8)": { - "details": "Changes the currency rate of a fee token.", - "params": { - "_feeToken": "The fee token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "changeInstructor(address)": { - "details": "Changes the `instructor` storage variable.", - "params": { - "_instructor": "The new value for the `instructor` storage variable." - } - }, - "changeJurorProsecutionModule(address)": { - "details": "Changes the `jurorProsecutionModule` storage variable.", - "params": { - "_jurorProsecutionModule": "The new value for the `jurorProsecutionModule` storage variable." - } - }, - "changePinakion(address)": { - "details": "Changes the `pinakion` storage variable.", - "params": { - "_pinakion": "The new value for the `pinakion` storage variable." - } - }, - "changeSortitionModule(address)": { - "details": "Changes the `_sortitionModule` storage variable. Note that the new module should be initialized for all courts.", - "params": { - "_sortitionModule": "The new value for the `sortitionModule` storage variable." - } - }, - "constructor": { - "details": "Constructor, initializing the implementation to reduce attack surface." - }, - "createCourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256[])": { - "details": "Creates a court under a specified parent court.", - "params": { - "_alpha": "The `alpha` property value of the court.", - "_feeForJuror": "The `feeForJuror` property value of the court.", - "_hiddenVotes": "The `hiddenVotes` property value of the court.", - "_jurorsForCourtJump": "The `jurorsForCourtJump` property value of the court.", - "_minStake": "The `minStake` property value of the court.", - "_parent": "The `parent` property value of the court.", - "_supportedDisputeKits": "Indexes of dispute kits that this court will support.", - "_timesPerPeriod": "The `timesPerPeriod` property value of the court." - } - }, - "createDispute(uint256,bytes)": { - "details": "Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "createDispute(uint256,bytes,address,uint256)": { - "details": "Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeAmount": "Amount of the ERC20 token used to pay fees.", - "_feeToken": "The ERC20 token used to pay fees.", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,address)": { - "details": "Draws one juror for the dispute until the number votes paid for is reached.", - "params": { - "_disputeID": "The ID of the dispute.", - "_juror": "The address of the juror to draw." - } - }, - "enableDisputeKits(uint96,uint256[],bool)": { - "details": "Adds/removes court's support for specified dispute kits.", - "params": { - "_courtID": "The ID of the court.", - "_disputeKitIDs": "The IDs of dispute kits which support should be added/removed.", - "_enable": "Whether add or remove the dispute kits from the court." - } - }, - "execute(uint256,uint256,uint256)": { - "details": "Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.", - "params": { - "_disputeID": "The ID of the dispute.", - "_iterations": "The number of iterations to run.", - "_round": "The appeal round." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "executeRuling(uint256)": { - "details": "Executes a specified dispute's ruling.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "getNumberOfVotes(uint256)": { - "details": "Gets the number of votes permitted for the specified dispute in the latest round.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "getTimesPerPeriod(uint96)": { - "details": "Gets the timesPerPeriod array for a given court.", - "params": { - "_courtID": "The ID of the court to get the times from." - }, - "returns": { - "timesPerPeriod": "The timesPerPeriod array for the given court." - } - }, - "initialize(address,address,address,address,address,bool,uint256[4],uint256[4],address)": { - "details": "Initializer (constructor equivalent for upgradable contracts).", - "params": { - "_courtParameters": "Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).", - "_disputeKit": "The address of the default dispute kit.", - "_governor": "The governor's address.", - "_hiddenVotes": "The `hiddenVotes` property value of the general court.", - "_instructor": "The address of the instructor.", - "_jurorProsecutionModule": "The address of the juror prosecution module.", - "_pinakion": "The address of the token contract.", - "_sortitionModuleAddress": "The sortition module responsible for sortition of the jurors.", - "_timesPerPeriod": "The `timesPerPeriod` property value of the general court." - } - }, - "isDisputeKitJumping(uint256)": { - "details": "Returns true if the dispute kit will be switched to a parent DK.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "_0": "Whether DK will be switched or not." - } - }, - "passPeriod(uint256)": { - "details": "Passes the period of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setStake(uint96,uint256)": { - "details": "Sets the caller's stake in a court.", - "params": { - "_courtID": "The ID of the court.", - "_newStake": "The new stake. Note that the existing delayed stake will be nullified as non-relevant." - } - }, - "setStakeBySortitionModule(address,uint96,uint256,bool)": { - "details": "Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.", - "params": { - "_account": "The account whose stake is being set.", - "_alreadyTransferred": "Whether the PNKs have already been transferred to the contract.", - "_courtID": "The ID of the court.", - "_newStake": "The new stake." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "title": "KlerosCoreUniversity Core arbitrator contract for educational purposes.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ], - "InvalidImplementation(address)": [ - { - "notice": "The `implementation` is not UUPS-compliant" - } - ] - }, - "events": { - "Upgraded(address)": { - "notice": "Emitted when the `implementation` has been successfully upgraded." - } - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 23505, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 23507, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "instructor", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 23510, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "pinakion", - "offset": 0, - "slot": "2", - "type": "t_contract(IERC20)1229" - }, - { - "astId": 23512, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "jurorProsecutionModule", - "offset": 0, - "slot": "3", - "type": "t_address" - }, - { - "astId": 23515, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "sortitionModule", - "offset": 0, - "slot": "4", - "type": "t_contract(ISortitionModuleUniversity)23364" - }, - { - "astId": 23519, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "courts", - "offset": 0, - "slot": "5", - "type": "t_array(t_struct(Court)23424_storage)dyn_storage" - }, - { - "astId": 23523, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "disputeKits", - "offset": 0, - "slot": "6", - "type": "t_array(t_contract(IDisputeKit)23189)dyn_storage" - }, - { - "astId": 23527, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "disputes", - "offset": 0, - "slot": "7", - "type": "t_array(t_struct(Dispute)23441_storage)dyn_storage" - }, - { - "astId": 23533, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "currencyRates", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_contract(IERC20)1229,t_struct(CurrencyRate)23490_storage)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "base": "t_address", - "encoding": "dynamic_array", - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_contract(IDisputeKit)23189)dyn_storage": { - "base": "t_contract(IDisputeKit)23189", - "encoding": "dynamic_array", - "label": "contract IDisputeKit[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Court)23424_storage)dyn_storage": { - "base": "t_struct(Court)23424_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreUniversity.Court[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Dispute)23441_storage)dyn_storage": { - "base": "t_struct(Dispute)23441_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreUniversity.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)23466_storage)dyn_storage": { - "base": "t_struct(Round)23466_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreUniversity.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)4_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[4]", - "numberOfBytes": "128" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IArbitrableV2)22946": { - "encoding": "inplace", - "label": "contract IArbitrableV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeKit)23189": { - "encoding": "inplace", - "label": "contract IDisputeKit", - "numberOfBytes": "20" - }, - "t_contract(IERC20)1229": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_contract(ISortitionModuleUniversity)23364": { - "encoding": "inplace", - "label": "contract ISortitionModuleUniversity", - "numberOfBytes": "20" - }, - "t_enum(Period)23398": { - "encoding": "inplace", - "label": "enum KlerosCoreUniversity.Period", - "numberOfBytes": "1" - }, - "t_mapping(t_contract(IERC20)1229,t_struct(CurrencyRate)23490_storage)": { - "encoding": "mapping", - "key": "t_contract(IERC20)1229", - "label": "mapping(contract IERC20 => struct KlerosCoreUniversity.CurrencyRate)", - "numberOfBytes": "32", - "value": "t_struct(CurrencyRate)23490_storage" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_struct(Court)23424_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreUniversity.Court", - "members": [ - { - "astId": 23400, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "parent", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 23402, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "hiddenVotes", - "offset": 12, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 23405, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "children", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 23407, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "minStake", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 23409, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "alpha", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 23411, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "feeForJuror", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 23413, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "jurorsForCourtJump", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 23417, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "timesPerPeriod", - "offset": 0, - "slot": "6", - "type": "t_array(t_uint256)4_storage" - }, - { - "astId": 23421, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "supportedDisputeKits", - "offset": 0, - "slot": "10", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 23423, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "disabled", - "offset": 0, - "slot": "11", - "type": "t_bool" - } - ], - "numberOfBytes": "384" - }, - "t_struct(CurrencyRate)23490_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreUniversity.CurrencyRate", - "members": [ - { - "astId": 23485, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "feePaymentAccepted", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 23487, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "rateInEth", - "offset": 1, - "slot": "0", - "type": "t_uint64" - }, - { - "astId": 23489, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "rateDecimals", - "offset": 9, - "slot": "0", - "type": "t_uint8" - } - ], - "numberOfBytes": "32" - }, - "t_struct(Dispute)23441_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreUniversity.Dispute", - "members": [ - { - "astId": 23426, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "courtID", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 23429, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "arbitrated", - "offset": 12, - "slot": "0", - "type": "t_contract(IArbitrableV2)22946" - }, - { - "astId": 23432, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "period", - "offset": 0, - "slot": "1", - "type": "t_enum(Period)23398" - }, - { - "astId": 23434, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "ruled", - "offset": 1, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 23436, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "lastPeriodChange", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 23440, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "rounds", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(Round)23466_storage)dyn_storage" - } - ], - "numberOfBytes": "128" - }, - "t_struct(Round)23466_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreUniversity.Round", - "members": [ - { - "astId": 23443, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "disputeKitID", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 23445, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "pnkAtStakePerJuror", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 23447, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "totalFeesForJurors", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 23449, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "nbVotes", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 23451, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "repartitions", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 23453, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "pnkPenalties", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 23456, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "drawnJurors", - "offset": 0, - "slot": "6", - "type": "t_array(t_address)dyn_storage" - }, - { - "astId": 23458, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "sumFeeRewardPaid", - "offset": 0, - "slot": "7", - "type": "t_uint256" - }, - { - "astId": 23460, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "sumPnkRewardPaid", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 23463, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "feeToken", - "offset": 0, - "slot": "9", - "type": "t_contract(IERC20)1229" - }, - { - "astId": 23465, - "contract": "src/arbitration/university/KlerosCoreUniversity.sol:KlerosCoreUniversity", - "label": "drawIterations", - "offset": 0, - "slot": "10", - "type": "t_uint256" - } - ], - "numberOfBytes": "352" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity_Proxy.json deleted file mode 100644 index ca2512f0b..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity_Proxy.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "address": "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x6d19fdb430b5611f9aedf5792b44a297c36bd84d34e66ddaf82844f33eb1748a", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "transactionIndex": 1, - "gasUsed": "484460", - "logsBloom": "0x00000000000000000000000020000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000080000000000000040000000000000000000000000000020000000000000010200800402000000000000008000000000000008000000000000000000800000000000000000000000080000000000000000000000000000000800008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000060000000001001000000000000000000000008000000000200000000000000000000", - "blockHash": "0x152fd5195e3f7b8e0ab803f90700d35d20f4452193858d10558fc31c226227c8", - "transactionHash": "0x6d19fdb430b5611f9aedf5792b44a297c36bd84d34e66ddaf82844f33eb1748a", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 96308609, - "transactionHash": "0x6d19fdb430b5611f9aedf5792b44a297c36bd84d34e66ddaf82844f33eb1748a", - "address": "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "topics": [ - "0x44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb2", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x000000000000000000000000d6e96b7c993763b5cdda1139c7387b82a7c8b8b5" - ], - "data": "0x", - "logIndex": 0, - "blockHash": "0x152fd5195e3f7b8e0ab803f90700d35d20f4452193858d10558fc31c226227c8" - }, - { - "transactionIndex": 1, - "blockNumber": 96308609, - "transactionHash": "0x6d19fdb430b5611f9aedf5792b44a297c36bd84d34e66ddaf82844f33eb1748a", - "address": "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "topics": [ - "0x3475f0ed7216dd7d453db663a1c3024e4f36cc925521d54edb9d13e022cbee3d", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 1, - "blockHash": "0x152fd5195e3f7b8e0ab803f90700d35d20f4452193858d10558fc31c226227c8" - }, - { - "transactionIndex": 1, - "blockNumber": 96308609, - "transactionHash": "0x6d19fdb430b5611f9aedf5792b44a297c36bd84d34e66ddaf82844f33eb1748a", - "address": "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "topics": [ - "0xb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc79", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001" - ], - "data": "0x", - "logIndex": 2, - "blockHash": "0x152fd5195e3f7b8e0ab803f90700d35d20f4452193858d10558fc31c226227c8" - }, - { - "transactionIndex": 1, - "blockNumber": 96308609, - "transactionHash": "0x6d19fdb430b5611f9aedf5792b44a297c36bd84d34e66ddaf82844f33eb1748a", - "address": "0x5AB37F38778Bc175852fA353056591D91c744ce6", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 3, - "blockHash": "0x152fd5195e3f7b8e0ab803f90700d35d20f4452193858d10558fc31c226227c8" - } - ], - "blockNumber": 96308609, - "cumulativeGasUsed": "484460", - "status": 1, - "byzantium": true - }, - "args": [ - "0xF74DaBfC5F5dbdBD07636637204d9C35326D2906", - "0xe399d29b000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c5900000000000000000000000034b944d42cacfc8266955d07a80181d2054aa2250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6e96b7c993763b5cdda1139c7387b82a7c8b8b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000004b2c2d048921f694cce3aea35698c6b1f5fcbb79" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"KlerosCoreUniversityProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220025ed3e852b24305c0ac2e202b83cf5fed6ae313e772bad4b0c1340efea75f0764736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220025ed3e852b24305c0ac2e202b83cf5fed6ae313e772bad4b0c1340efea75f0764736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCore_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/KlerosCore_Implementation.json deleted file mode 100644 index 9c23c41b6..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCore_Implementation.json +++ /dev/null @@ -1,2849 +0,0 @@ -{ - "address": "0xaBf1AA1D08F98ED800938B1B086d0904c5BF4f0E", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "AppealPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "CannotDisableClassicDK", - "type": "error" - }, - { - "inputs": [], - "name": "CommitPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitNotSupportedByCourt", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitOnly", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "DisputePeriodIsFinal", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeStillDrawing", - "type": "error" - }, - { - "inputs": [], - "name": "EvidenceNotPassedAndNotAppeal", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GuardianOrGovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDisputKitParent", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "MinStakeLowerThanParentCourt", - "type": "error" - }, - { - "inputs": [], - "name": "MustSupportDisputeKitClassic", - "type": "error" - }, - { - "inputs": [], - "name": "NotEvidencePeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotExecutionPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "SortitionModuleOnly", - "type": "error" - }, - { - "inputs": [], - "name": "StakingInTooManyCourts", - "type": "error" - }, - { - "inputs": [], - "name": "StakingLessThanCourtMinStake", - "type": "error" - }, - { - "inputs": [], - "name": "StakingNotPossibleInThisCourt", - "type": "error" - }, - { - "inputs": [], - "name": "StakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "StakingZeroWhenNoStake", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnstakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "inputs": [], - "name": "UnsupportedDisputeKit", - "type": "error" - }, - { - "inputs": [], - "name": "VotePeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "WhenNotPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WhenPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WrongDisputeKitIndex", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "DisputeKitCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "DisputeKitEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_fromDisputeKitID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_toDisputeKitID", - "type": "uint256" - } - ], - "name": "DisputeKitJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "Draw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreBase.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "addNewDisputeKit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_guardian", - "type": "address" - } - ], - "name": "changeGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - } - ], - "name": "changeJurorProsecutionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputeKits", - "outputs": [ - { - "internalType": "contract IDisputeKit", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreBase.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "lastPeriodChange", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "uint256", - "name": "nbDrawnJurors", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256[]", - "name": "_disputeKitIDs", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "enableDisputeKits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputeKitsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getPnkAtStakePerJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "disputeKitID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkAtStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVotes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "repartitions", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkPenalties", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "drawnJurors", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumPnkRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "drawIterations", - "type": "uint256" - } - ], - "internalType": "struct KlerosCoreBase.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "guardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - }, - { - "internalType": "contract IDisputeKit", - "name": "_disputeKit", - "type": "address" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModuleAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "isDisputeKitJumping", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - } - ], - "name": "isSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorProsecutionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "passPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "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": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_wNative", - "type": "address" - } - ], - "name": "reinitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStakeBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "contract ISortitionModule", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wNative", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x4422bc58d141846815e8b919c002f5e4bd7ee5ebb75eb7f228624def4acb97f4", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xaBf1AA1D08F98ED800938B1B086d0904c5BF4f0E", - "transactionIndex": 3, - "gasUsed": "5292660", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000002000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000004000000000000000000000000000000000000000000000000000000000000200000000000000000000000", - "blockHash": "0xb4ccf2fafa86a807c80b44529d5850dbe8ebc04ce1dcccb2636c21e9f79e8ee4", - "transactionHash": "0x4422bc58d141846815e8b919c002f5e4bd7ee5ebb75eb7f228624def4acb97f4", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 179580069, - "transactionHash": "0x4422bc58d141846815e8b919c002f5e4bd7ee5ebb75eb7f228624def4acb97f4", - "address": "0xaBf1AA1D08F98ED800938B1B086d0904c5BF4f0E", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 8, - "blockHash": "0xb4ccf2fafa86a807c80b44529d5850dbe8ebc04ce1dcccb2636c21e9f79e8ee4" - } - ], - "blockNumber": 179580069, - "cumulativeGasUsed": "5524877", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "726fe29d8d9c48c46571792cebc6e314", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AppealFeesNotEnough\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AppealPeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ArbitrationFeesNotEnough\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotDisableClassicDK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitPeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeKitNotSupportedByCourt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeKitOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeNotAppealable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputePeriodIsFinal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeStillDrawing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EvidenceNotPassedAndNotAppeal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GovernorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GuardianOrGovernorOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDisputKitParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidForkingCourtAsParent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinStakeLowerThanParentCourt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustSupportDisputeKitClassic\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEvidencePeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotExecutionPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RulingAlreadyExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SortitionModuleOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingInTooManyCourts\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingLessThanCourtMinStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingNotPossibleInThisCourt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingZeroWhenNoStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnstakingTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsuccessfulCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedDisputeKit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VotePeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WhenNotPausedOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WhenPausedOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongDisputeKitIndex\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"AcceptedFeeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"AppealDecision\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"AppealPossible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_supportedDisputeKits\",\"type\":\"uint256[]\"}],\"name\":\"CourtCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_fromCourtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_toCourtID\",\"type\":\"uint96\"}],\"name\":\"CourtJump\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"CourtModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeKitID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IDisputeKit\",\"name\":\"_disputeKitAddress\",\"type\":\"address\"}],\"name\":\"DisputeKitCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeKitID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_enable\",\"type\":\"bool\"}],\"name\":\"DisputeKitEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_fromDisputeKitID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_toDisputeKitID\",\"type\":\"uint256\"}],\"name\":\"DisputeKitJump\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"Draw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_pnkAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"LeftoverRewardSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"NewCurrencyRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum KlerosCoreBase.Period\",\"name\":\"_period\",\"type\":\"uint8\"}],\"name\":\"NewPeriod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_roundID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_degreeOfCoherency\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_pnkAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_feeAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"TokenAndETHShift\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IDisputeKit\",\"name\":\"_disputeKitAddress\",\"type\":\"address\"}],\"name\":\"addNewDisputeKit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"appeal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"appealCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"appealPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"changeAcceptedFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"changeCourtParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"changeCurrencyRates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"}],\"name\":\"changeGuardian\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jurorProsecutionModule\",\"type\":\"address\"}],\"name\":\"changeJurorProsecutionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_pinakion\",\"type\":\"address\"}],\"name\":\"changePinakion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISortitionModule\",\"name\":\"_sortitionModule\",\"type\":\"address\"}],\"name\":\"changeSortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountInEth\",\"type\":\"uint256\"}],\"name\":\"convertEthToTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"courts\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"internalType\":\"bytes\",\"name\":\"_sortitionExtraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256[]\",\"name\":\"_supportedDisputeKits\",\"type\":\"uint256[]\"}],\"name\":\"createCourt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"currencyRates\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"feePaymentAccepted\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"rateInEth\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"rateDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overridden\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputeKits\",\"outputs\":[{\"internalType\":\"contract IDisputeKit\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"courtID\",\"type\":\"uint96\"},{\"internalType\":\"contract IArbitrableV2\",\"name\":\"arbitrated\",\"type\":\"address\"},{\"internalType\":\"enum KlerosCoreBase.Period\",\"name\":\"period\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"ruled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"lastPeriodChange\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_iterations\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nbDrawnJurors\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256[]\",\"name\":\"_disputeKitIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"_enable\",\"type\":\"bool\"}],\"name\":\"enableDisputeKits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_iterations\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"executeRuling\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDisputeKitsLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfRounds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getNumberOfVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"getPnkAtStakePerJuror\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"getRoundInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"disputeKitID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pnkAtStakePerJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalFeesForJurors\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"repartitions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pnkPenalties\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"drawnJurors\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"sumFeeRewardPaid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sumPnkRewardPaid\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"drawIterations\",\"type\":\"uint256\"}],\"internalType\":\"struct KlerosCoreBase.Round\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"getTimesPerPeriod\",\"outputs\":[{\"internalType\":\"uint256[4]\",\"name\":\"timesPerPeriod\",\"type\":\"uint256[4]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_pinakion\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_jurorProsecutionModule\",\"type\":\"address\"},{\"internalType\":\"contract IDisputeKit\",\"name\":\"_disputeKit\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256[4]\",\"name\":\"_courtParameters\",\"type\":\"uint256[4]\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"internalType\":\"bytes\",\"name\":\"_sortitionExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract ISortitionModule\",\"name\":\"_sortitionModuleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"isDisputeKitJumping\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_disputeKitID\",\"type\":\"uint256\"}],\"name\":\"isSupported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jurorProsecutionModule\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"passPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"pinakion\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wNative\",\"type\":\"address\"}],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"setStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"setStakeBySortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sortitionModule\",\"outputs\":[{\"internalType\":\"contract ISortitionModule\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferBySortitionModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"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\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"AcceptedFeeToken(address,bool)\":{\"details\":\"To be emitted when an ERC20 token is added or removed as a method to pay fees.\",\"params\":{\"_accepted\":\"Whether the token is accepted or not.\",\"_token\":\"The ERC20 token.\"}},\"DisputeCreation(uint256,address)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_arbitrable\":\"The contract which created the dispute.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"NewCurrencyRate(address,uint64,uint8)\":{\"details\":\"To be emitted when the fee for a particular ERC20 token is updated.\",\"params\":{\"_feeToken\":\"The ERC20 token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrable\":\"The arbitrable receiving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"addNewDisputeKit(address)\":{\"details\":\"Add a new supported dispute kit module to the court.\",\"params\":{\"_disputeKitAddress\":\"The address of the dispute kit contract.\"}},\"appeal(uint256,uint256,bytes)\":{\"details\":\"Appeals the ruling of a specified dispute. Note: Access restricted to the Dispute Kit for this `disputeID`.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_extraData\":\"Extradata for the dispute. Can be required during court jump.\",\"_numberOfChoices\":\"Number of choices for the dispute. Can be required during court jump.\"}},\"appealCost(uint256)\":{\"details\":\"Gets the cost of appealing a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"cost\":\"The appeal cost.\"}},\"appealPeriod(uint256)\":{\"details\":\"Gets the start and the end of a specified dispute's current appeal period.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"end\":\"The end of the appeal period.\",\"start\":\"The start of the appeal period.\"}},\"arbitrationCost(bytes)\":{\"details\":\"Compute the cost of arbitration denominated in ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\"},\"returns\":{\"cost\":\"The arbitration cost in ETH.\"}},\"arbitrationCost(bytes,address)\":{\"details\":\"Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeToken\":\"The ERC20 token used to pay fees.\"},\"returns\":{\"cost\":\"The arbitration cost in `_feeToken`.\"}},\"changeAcceptedFeeTokens(address,bool)\":{\"details\":\"Changes the supported fee tokens.\",\"params\":{\"_accepted\":\"Whether the token is supported or not as a method of fee payment.\",\"_feeToken\":\"The fee token.\"}},\"changeCurrencyRates(address,uint64,uint8)\":{\"details\":\"Changes the currency rate of a fee token.\",\"params\":{\"_feeToken\":\"The fee token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"changeGuardian(address)\":{\"details\":\"Changes the `guardian` storage variable.\",\"params\":{\"_guardian\":\"The new value for the `guardian` storage variable.\"}},\"changeJurorProsecutionModule(address)\":{\"details\":\"Changes the `jurorProsecutionModule` storage variable.\",\"params\":{\"_jurorProsecutionModule\":\"The new value for the `jurorProsecutionModule` storage variable.\"}},\"changePinakion(address)\":{\"details\":\"Changes the `pinakion` storage variable.\",\"params\":{\"_pinakion\":\"The new value for the `pinakion` storage variable.\"}},\"changeSortitionModule(address)\":{\"details\":\"Changes the `_sortitionModule` storage variable. Note that the new module should be initialized for all courts.\",\"params\":{\"_sortitionModule\":\"The new value for the `sortitionModule` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createCourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],bytes,uint256[])\":{\"details\":\"Creates a court under a specified parent court.\",\"params\":{\"_alpha\":\"The `alpha` property value of the court.\",\"_feeForJuror\":\"The `feeForJuror` property value of the court.\",\"_hiddenVotes\":\"The `hiddenVotes` property value of the court.\",\"_jurorsForCourtJump\":\"The `jurorsForCourtJump` property value of the court.\",\"_minStake\":\"The `minStake` property value of the court.\",\"_parent\":\"The `parent` property value of the court.\",\"_sortitionExtraData\":\"Extra data for sortition module.\",\"_supportedDisputeKits\":\"Indexes of dispute kits that this court will support.\",\"_timesPerPeriod\":\"The `timesPerPeriod` property value of the court.\"}},\"createDispute(uint256,bytes)\":{\"details\":\"Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"createDispute(uint256,bytes,address,uint256)\":{\"details\":\"Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeAmount\":\"Amount of the ERC20 token used to pay fees.\",\"_feeToken\":\"The ERC20 token used to pay fees.\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"overridden\":\"Whether the ruling was overridden by appeal funding or not.\",\"ruling\":\"The current ruling.\",\"tied\":\"Whether it's a tie or not.\"}},\"draw(uint256,uint256)\":{\"details\":\"Draws jurors for the dispute. Can be called in parts.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_iterations\":\"The number of iterations to run.\"},\"returns\":{\"nbDrawnJurors\":\"The total number of jurors drawn in the round.\"}},\"enableDisputeKits(uint96,uint256[],bool)\":{\"details\":\"Adds/removes court's support for specified dispute kits.\",\"params\":{\"_courtID\":\"The ID of the court.\",\"_disputeKitIDs\":\"The IDs of dispute kits which support should be added/removed.\",\"_enable\":\"Whether add or remove the dispute kits from the court.\"}},\"execute(uint256,uint256,uint256)\":{\"details\":\"Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts. Note: Reward distributions are forbidden during pause.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_iterations\":\"The number of iterations to run.\",\"_round\":\"The appeal round.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Allows the governor to call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"executeRuling(uint256)\":{\"details\":\"Executes a specified dispute's ruling.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"getNumberOfRounds(uint256)\":{\"details\":\"Gets the number of rounds for a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"_0\":\"The number of rounds.\"}},\"getNumberOfVotes(uint256)\":{\"details\":\"Gets the number of votes permitted for the specified dispute in the latest round.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"getPnkAtStakePerJuror(uint256,uint256)\":{\"details\":\"Gets the PNK at stake per juror for a specified dispute and round.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_round\":\"The round to get the info for.\"},\"returns\":{\"_0\":\"pnkAtStakePerJuror The PNK at stake per juror.\"}},\"getRoundInfo(uint256,uint256)\":{\"details\":\"Gets the round info for a specified dispute and round.This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_round\":\"The round to get the info for.\"},\"returns\":{\"_0\":\"round The round info.\"}},\"getTimesPerPeriod(uint96)\":{\"details\":\"Gets the timesPerPeriod array for a given court.\",\"params\":{\"_courtID\":\"The ID of the court to get the times from.\"},\"returns\":{\"timesPerPeriod\":\"The timesPerPeriod array for the given court.\"}},\"initialize(address,address,address,address,address,bool,uint256[4],uint256[4],bytes,address,address)\":{\"details\":\"Initializer (constructor equivalent for upgradable contracts).\",\"params\":{\"_courtParameters\":\"Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\",\"_disputeKit\":\"The address of the default dispute kit.\",\"_governor\":\"The governor's address.\",\"_guardian\":\"The guardian's address.\",\"_hiddenVotes\":\"The `hiddenVotes` property value of the general court.\",\"_jurorProsecutionModule\":\"The address of the juror prosecution module.\",\"_pinakion\":\"The address of the token contract.\",\"_sortitionExtraData\":\"The extra data for sortition module.\",\"_sortitionModuleAddress\":\"The sortition module responsible for sortition of the jurors.\",\"_timesPerPeriod\":\"The `timesPerPeriod` property value of the general court.\",\"_wNative\":\"The wrapped native token address, typically wETH.\"}},\"isDisputeKitJumping(uint256)\":{\"details\":\"Returns true if the dispute kit will be switched to a parent DK.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"_0\":\"Whether DK will be switched or not.\"}},\"isSupported(uint96,uint256)\":{\"details\":\"Checks if a given dispute kit is supported by a given court.\",\"params\":{\"_courtID\":\"The ID of the court to check the support for.\",\"_disputeKitID\":\"The ID of the dispute kit to check the support for.\"},\"returns\":{\"_0\":\"Whether the dispute kit is supported or not.\"}},\"passPeriod(uint256)\":{\"details\":\"Passes the period of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"}},\"pause()\":{\"details\":\"Pause staking and reward execution. Can only be done by guardian or governor.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setStake(uint96,uint256)\":{\"details\":\"Sets the caller's stake in a court.\",\"params\":{\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake. Note that the existing delayed stake will be nullified as non-relevant.\"}},\"setStakeBySortitionModule(address,uint96,uint256)\":{\"details\":\"Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\",\"params\":{\"_account\":\"The account whose stake is being set.\",\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake.\"}},\"transferBySortitionModule(address,uint256)\":{\"details\":\"Transfers PNK to the juror by SortitionModule.\",\"params\":{\"_account\":\"The account of the juror whose PNK to transfer.\",\"_amount\":\"The amount to transfer.\"}},\"unpause()\":{\"details\":\"Unpause staking and reward execution. Can only be done by governor.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"KlerosCore Core arbitrator contract for Kleros v2. Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/KlerosCore.sol\":\"KlerosCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.10.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n /// @param _wNative The wrapped native token address, typically wETH.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress,\\n _wNative\\n );\\n }\\n\\n function reinitialize(address _wNative) external reinitializer(6) {\\n wNative = _wNative;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0x53d3398fecd14dc49f67494e498534551a19625e6fea1958c8fb0566d1aa6476\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport {SafeSend} from \\\"../libraries/SafeSend.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n using SafeSend for address payable;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n address public wNative; // The wrapped native token for safeSend().\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress,\\n address _wNative\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n wNative = _wNative;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha);\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n _transferFeeToken(round.feeToken, payable(governor), round.totalFeesForJurors);\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, degreeOfCoherence);\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, degreeOfCoherence);\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, degreeOfCoherence);\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n _transferFeeToken(round.feeToken, payable(account), feeReward);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n _transferFeeToken(round.feeToken, payable(governor), leftoverFeeReward);\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Internal function to transfer fee tokens (ETH or ERC20)\\n /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH).\\n /// @param _recipient The recipient address.\\n /// @param _amount The amount to transfer.\\n function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal {\\n if (_feeToken == NATIVE_CURRENCY) {\\n _recipient.safeSend(_amount, wNative);\\n } else {\\n _feeToken.safeTransfer(_recipient, _amount);\\n }\\n }\\n\\n /// @dev Applies degree of coherence to an amount\\n /// @param _amount The base amount to apply coherence to.\\n /// @param _degreeOfCoherence The degree of coherence in basis points.\\n /// @return The amount after applying the degree of coherence.\\n function _applyCoherence(uint256 _amount, uint256 _degreeOfCoherence) internal pure returns (uint256) {\\n return (_amount * _degreeOfCoherence) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Calculates PNK at stake per juror based on court parameters\\n /// @param _minStake The minimum stake for the court.\\n /// @param _alpha The alpha parameter for the court in basis points.\\n /// @return The amount of PNK at stake per juror.\\n function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) {\\n return (_minStake * _alpha) / ALPHA_DIVISOR;\\n }\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x760819e151abfb5280e00431b27d2f5b36b6c8dcb1f4c87f96769c8cbc4c99b7\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/libraries/SafeSend.sol\":{\"content\":\"/**\\n * @authors: [@andreimvp]\\n * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1]\\n * @auditors: []\\n * @bounties: []\\n * SPDX-License-Identifier: MIT\\n */\\n\\npragma solidity ^0.8.24;\\n\\ninterface WethLike {\\n function deposit() external payable;\\n\\n function transfer(address dst, uint256 wad) external;\\n}\\n\\nlibrary SafeSend {\\n function safeSend(address payable _to, uint256 _value, address _wethLike) internal {\\n if (_to.send(_value)) return;\\n\\n WethLike(_wethLike).deposit{value: _value}();\\n WethLike(_wethLike).transfer(_to, _value);\\n }\\n}\\n\",\"keccak256\":\"0x5fdcdc2ccdeaabcfb80dcb3c2fe1cc749ff76a1e396d6aba6e77ec30a7c2f7f9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615d166100fc600039600081816119be015281816119e70152611bdc0152615d166000f3fe6080604052600436106102d45760003560e01c80637934c0be1161017b578063c3569902116100d7578063e4c0aaf411610085578063e4c0aaf4146109a7578063f6506db4146109c7578063f7434ea9146109e7578063f7e7d1fd14610a07578063fbf405b014610a27578063fc6f8f1614610a47578063fe524c3914610a6757600080fd5b8063c3569902146108df578063c71f4253146108f2578063cf0c38f814610912578063d07368bd14610932578063d2b8035a14610952578063d4d1d76a14610972578063d98493f61461098757600080fd5b80638bb04875116101345780638bb04875146107f7578063a072b86c14610817578063acdbf51d14610837578063afe15cfb14610857578063b00496371461088c578063c13517e1146108ac578063c258bb19146108bf57600080fd5b80637934c0be1461073557806382d02237146107555780638456cb591461077557806386541b241461078a57806386cdecef146107aa5780638a9bb02a146107ca57600080fd5b80632e1daf2f1161023557806352d1902d116101e357806352d1902d1461063657806354fd4d501461064b578063564a565d1461068a57806359ec827e146106bb5780635c975abb146106db578063751accd0146106f55780637717a6e81461071557600080fd5b80632e1daf2f146105615780632fcb4f04146105815780633cfd1184146105a15780633f4ba83a146105ce57806342c37fa3146105e3578063452a9320146106035780634f1ef2861461062357600080fd5b80631860592b116102925780631860592b1461040057806319b815291461042e5780631c3db16d1461045e5780631f5a0dd21461049b5780632c053739146104fc5780632d29a47b1461051c5780632d68efc91461053c57600080fd5b8062f5822c146102d95780630219da79146102fb5780630761c14d146103735780630b7414bc146103935780630c340a24146103b3578063115d5376146103e0575b600080fd5b3480156102e557600080fd5b506102f96102f4366004614e43565b610a87565b005b34801561030757600080fd5b50610346610316366004614e43565b60086020526000908152604090205460ff808216916001600160401b0361010082041691600160481b9091041683565b6040805193151584526001600160401b03909216602084015260ff16908201526060015b60405180910390f35b34801561037f57600080fd5b506102f961038e366004614e7e565b610ad4565b34801561039f57600080fd5b506102f96103ae366004614f94565b610b12565b3480156103bf57600080fd5b506000546103d3906001600160a01b031681565b60405161036a9190614ff5565b3480156103ec57600080fd5b506102f96103fb366004615009565b610c43565b34801561040c57600080fd5b5061042061041b366004615022565b611210565b60405190815260200161036a565b34801561043a57600080fd5b5061044e610449366004615009565b61126a565b604051901515815260200161036a565b34801561046a57600080fd5b5061047e610479366004615009565b611363565b60408051938452911515602084015215159082015260600161036a565b3480156104a757600080fd5b506104bb6104b6366004615009565b611464565b604080516001600160601b0390981688529515156020880152948601939093526060850191909152608084015260a0830152151560c082015260e00161036a565b34801561050857600080fd5b506102f961051736600461512a565b6114c3565b34801561052857600080fd5b506102f9610537366004615217565b61159d565b34801561054857600080fd5b506009546103d39061010090046001600160a01b031681565b34801561056d57600080fd5b506004546103d3906001600160a01b031681565b34801561058d57600080fd5b506102f961059c366004614e43565b611829565b3480156105ad57600080fd5b506105c16105bc366004615243565b611876565b60405161036a9190615281565b3480156105da57600080fd5b506102f96118e0565b3480156105ef57600080fd5b506102f96105fe366004615022565b611963565b34801561060f57600080fd5b506001546103d3906001600160a01b031681565b6102f961063136600461528f565b6119aa565b34801561064257600080fd5b50610420611bcf565b34801561065757600080fd5b5061067d604051806040016040528060068152602001650302e31302e360d41b81525081565b60405161036a919061532e565b34801561069657600080fd5b506106aa6106a5366004615009565b611c2d565b60405161036a959493929190615379565b3480156106c757600080fd5b506104206106d6366004615009565b611c89565b3480156106e757600080fd5b5060095461044e9060ff1681565b34801561070157600080fd5b506102f96107103660046153b8565b611dde565b34801561072157600080fd5b506102f9610730366004615410565b611e88565b34801561074157600080fd5b506102f961075036600461542c565b611eb9565b34801561076157600080fd5b506102f9610770366004615465565b611f38565b34801561078157600080fd5b506102f9611ff5565b34801561079657600080fd5b506102f96107a53660046154b7565b612095565b3480156107b657600080fd5b506104206107c5366004615525565b612272565b3480156107d657600080fd5b506107ea6107e5366004615525565b6122c3565b60405161036a919061558c565b34801561080357600080fd5b506102f9610812366004615009565b61244f565b34801561082357600080fd5b506102f9610832366004615632565b6125b4565b34801561084357600080fd5b506103d3610852366004615009565b6128ec565b34801561086357600080fd5b50610877610872366004615009565b612916565b6040805192835260208301919091520161036a565b34801561089857600080fd5b506102f96108a7366004614e43565b6129c2565b6104206108ba3660046156f6565b612a0f565b3480156108cb57600080fd5b506102f96108da366004614e43565b612a47565b6102f96108ed366004615726565b612a94565b3480156108fe57600080fd5b5061042061090d366004615009565b612f59565b34801561091e57600080fd5b506003546103d3906001600160a01b031681565b34801561093e57600080fd5b506102f961094d366004614e43565b612fc1565b34801561095e57600080fd5b5061042061096d366004615525565b61306a565b34801561097e57600080fd5b50600654610420565b34801561099357600080fd5b506104206109a23660046157a7565b613389565b3480156109b357600080fd5b506102f96109c2366004614e43565b6133d6565b3480156109d357600080fd5b506104206109e23660046157f2565b613423565b3480156109f357600080fd5b50610420610a02366004615858565b613507565b348015610a1357600080fd5b506102f9610a22366004614e43565b613553565b348015610a3357600080fd5b506002546103d3906001600160a01b031681565b348015610a5357600080fd5b50610420610a62366004615009565b61362a565b348015610a7357600080fd5b5061044e610a82366004615410565b613659565b6000546001600160a01b03163314610ab25760405163c383977560e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314610aff57604051639d6cab9960e01b815260040160405180910390fd5b610b0c83838360016136a1565b50505050565b6000546001600160a01b03163314610b3d5760405163c383977560e01b815260040160405180910390fd5b60005b8251811015610b0c578115610bdc57828181518110610b6157610b6161588c565b602002602001015160001480610b9457506006548351849083908110610b8957610b8961588c565b602002602001015110155b15610bb257604051633d58a98960e11b815260040160405180910390fd5b610bd784848381518110610bc857610bc861588c565b6020026020010151600161391d565b610c3b565b6001838281518110610bf057610bf061588c565b602002602001015103610c16576040516356d111fd60e11b815260040160405180910390fd5b610c3b84848381518110610c2c57610c2c61588c565b6020026020010151600061391d565b600101610b40565b600060078281548110610c5857610c5861588c565b600091825260208220600490910201805460058054929450916001600160601b03909116908110610c8b57610c8b61588c565b6000918252602082206003850154600c909202019250610cad906001906158b8565b90506000836003018281548110610cc657610cc661588c565b600091825260208220600b909102019150600185015460ff166004811115610cf057610cf0615341565b03610dcb5781158015610d3f57506001840154600684019060ff166004811115610d1c57610d1c615341565b60048110610d2c57610d2c61588c565b01546002850154610d3d90426158b8565b105b15610d5d57604051633e9727df60e01b815260040160405180910390fd5b6003810154600682015414610d85576040516309e4486b60e41b815260040160405180910390fd5b8254600160601b900460ff16610d9c576002610d9f565b60015b60018086018054909160ff1990911690836004811115610dc157610dc1615341565b02179055506111c2565b60018085015460ff166004811115610de557610de5615341565b03610ef5576001840154600684019060ff166004811115610e0857610e08615341565b60048110610e1857610e1861588c565b01546002850154610e2990426158b8565b108015610ec057506006816000015481548110610e4857610e4861588c565b600091825260209091200154604051630baa64d160e01b8152600481018790526001600160a01b0390911690630baa64d190602401602060405180830381865afa158015610e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebe91906158cb565b155b15610ede57604051634dfa578560e11b815260040160405180910390fd5b6001808501805460029260ff199091169083610dc1565b6002600185015460ff166004811115610f1057610f10615341565b0361105e576001840154600684019060ff166004811115610f3357610f33615341565b60048110610f4357610f4361588c565b01546002850154610f5490426158b8565b108015610feb57506006816000015481548110610f7357610f7361588c565b6000918252602090912001546040516336a66c7560e11b8152600481018790526001600160a01b0390911690636d4cd8ea90602401602060405180830381865afa158015610fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe991906158cb565b155b1561100957604051631988dead60e31b815260040160405180910390fd5b600184018054600360ff199091161790558354604051600160601b9091046001600160a01b03169086907fa5d41b970d849372be1da1481ffd78d162bfe57a7aa2fe4e5fb73481fa5ac24f90600090a36111c2565b6003600185015460ff16600481111561107957611079615341565b03611189576001840154600684019060ff16600481111561109c5761109c615341565b600481106110ac576110ac61588c565b015460028501546110bd90426158b8565b108015611154575060068160000154815481106110dc576110dc61588c565b600091825260209091200154604051630855bbe960e01b8152600481018790526001600160a01b0390911690630855bbe990602401602060405180830381865afa15801561112e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115291906158cb565b155b1561117257604051632f4dfd8760e01b815260040160405180910390fd5b6001808501805460049260ff199091169083610dc1565b6004600185015460ff1660048111156111a4576111a4615341565b036111c2576040516307f38c8f60e11b815260040160405180910390fd5b426002850155600184015460405186917f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b91916112019160ff16906158e8565b60405180910390a25050505050565b6001600160a01b03821660009081526008602052604081205461010081046001600160401b03169061124d90600160481b900460ff16600a6159dd565b61125790846159ec565b6112619190615a19565b90505b92915050565b600080600783815481106112805761128061588c565b60009182526020822060036004909202019081018054919350906112a6906001906158b8565b815481106112b6576112b661588c565b600091825260208220845460058054600b909402909201945090916001600160601b039091169081106112eb576112eb61588c565b90600052602060002090600c0201905080600501548260030154101561131657506000949350505050565b80546005805490916001600160601b03169081106113365761133661588c565b6000918252602080832094548352600a600c9092029094010190925250604090205460ff16159392505050565b6000806000806007858154811061137c5761137c61588c565b60009182526020822060036004909202019081018054919350906113a2906001906158b8565b815481106113b2576113b261588c565b90600052602060002090600b02019050600060068260000154815481106113db576113db61588c565b600091825260209091200154604051631c3db16d60e01b8152600481018990526001600160a01b0390911691508190631c3db16d90602401606060405180830381865afa158015611430573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114549190615a2d565b9199909850909650945050505050565b6005818154811061147457600080fd5b60009182526020909120600c9091020180546002820154600383015460048401546005850154600b909501546001600160601b038516965060ff600160601b9095048516959394929391921687565b600160006114cf6139a5565b8054909150600160401b900460ff16806114f6575080546001600160401b03808416911610155b156115135760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556115478d8d8d8d8d8d8d8d8d8d8d6139c9565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050505050505050565b60095460ff16156115c157604051636f1dac1d60e01b815260040160405180910390fd5b600080600785815481106115d7576115d761588c565b600091825260209091206004918202019150600182015460ff16600481111561160257611602615341565b1461162057604051638794ce4b60e01b815260040160405180910390fd5b8060030184815481106116355761163561588c565b6000918252602082206004600b909202019081015490935091506116598483615a66565b600584015460068501546002860154929350909160009061167b908390615a19565b905060008660010154905060008060068960000154815481106116a0576116a061588c565b60009182526020909120015460405163368efae360e21b8152600481018e9052602481018d90526001600160a01b039091169150819063da3beb8c90604401602060405180830381865afa1580156116fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117209190615a79565b9150508060000361173c5783861115611737578395505b61175c565b6117478460026159ec565b86111561175c576117598460026159ec565b95505b60048801869055865b8681101561180857848110156117be576117b76040518061010001604052808e81526020018d815260200184815260200187815260200186815260200185815260200188815260200183815250613d0c565b9550611800565b6118006040518061010001604052808e81526020018d8152602001848152602001878152602001868152602001858152602001888152602001838152506141ba565b600101611765565b508488600501541461181c57600588018590555b5050505050505050505050565b6000546001600160a01b031633146118545760405163c383977560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61187e614d73565b6005826001600160601b03168154811061189a5761189a61588c565b6000918252602090912060408051608081019182905292600c029091016006019060049082845b8154815260200190600101908083116118c15750505050509050919050565b6000546001600160a01b0316331461190b5760405163c383977560e01b815260040160405180910390fd5b60095460ff1661192e5760405163b4143dc760e01b815260040160405180910390fd5b6009805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6004546001600160a01b0316331461198e57604051639d6cab9960e01b815260040160405180910390fd5b6002546119a5906001600160a01b031683836145b7565b505050565b6119b38261467a565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a3157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a25600080516020615cc18339815191525490565b6001600160a01b031614155b15611a4f5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611aa9575060408051601f3d908101601f19168201909252611aa691810190615a79565b60015b611ad15781604051630c76093760e01b8152600401611ac89190614ff5565b60405180910390fd5b600080516020615cc18339815191528114611b0257604051632a87526960e21b815260048101829052602401611ac8565b600080516020615cc18339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156119a5576000836001600160a01b031683604051611b699190615a92565b600060405180830381855af49150503d8060008114611ba4576040519150601f19603f3d011682016040523d82523d6000602084013e611ba9565b606091505b5050905080610b0c576040516339b21b5d60e11b815260040160405180910390fd5b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c1a5760405163703e46dd60e11b815260040160405180910390fd5b50600080516020615cc183398151915290565b60078181548110611c3d57600080fd5b60009182526020909120600490910201805460018201546002909201546001600160601b0382169350600160601b9091046001600160a01b03169160ff80821692610100909204169085565b60008060078381548110611c9f57611c9f61588c565b6000918252602082206003600490920201908101805491935090611cc5906001906158b8565b81548110611cd557611cd561588c565b600091825260208220845460058054600b909402909201945090916001600160601b03909116908110611d0a57611d0a61588c565b90600052602060002090600c020190508060050154826003015410611da95782546001600160601b031660001901611d4b576001600160ff1b039350611dd6565b6003820154611d5b9060026159ec565b611d66906001615a66565b81546005805490916001600160601b0316908110611d8657611d8661588c565b90600052602060002090600c020160040154611da291906159ec565b9350611dd6565b6003820154611db99060026159ec565b611dc4906001615a66565b8160040154611dd391906159ec565b93505b505050919050565b6000546001600160a01b03163314611e095760405163c383977560e01b815260040160405180910390fd5b6000836001600160a01b03168383604051611e249190615a92565b60006040518083038185875af1925050503d8060008114611e61576040519150601f19603f3d011682016040523d82523d6000602084013e611e66565b606091505b5050905080610b0c576040516322092f2f60e11b815260040160405180910390fd5b60095460ff1615611eac57604051636f1dac1d60e01b815260040160405180910390fd5b6119a533838360006136a1565b6000546001600160a01b03163314611ee45760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f541615e167511d757a7067a700eb54431b256bb458dfdce0ac58bf2ed0aefd4491a35050565b6000546001600160a01b03163314611f635760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038316600081815260086020908152604091829020805469ffffffffffffffffff0019166101006001600160401b03881690810260ff60481b191691909117600160481b60ff8816908102919091179092558351908152918201527fe6996b7f03e9bd02228b99d3d946932e3197f505f60542c4cfbc919441d8a4e6910160405180910390a2505050565b6001546001600160a01b0316331480159061201b57506000546001600160a01b03163314155b1561203957604051636b29334f60e01b815260040160405180910390fd5b60095460ff161561205d57604051636f1dac1d60e01b815260040160405180910390fd5b6009805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6000546001600160a01b031633146120c05760405163c383977560e01b815260040160405180910390fd5b60006005886001600160601b0316815481106120de576120de61588c565b90600052602060002090600c0201905060016001600160601b0316886001600160601b031614158015612140575080546005805488926001600160601b031690811061212c5761212c61588c565b90600052602060002090600c020160020154115b1561215e57604051639717078960e01b815260040160405180910390fd5b60005b60018201548110156121d9578660058360010183815481106121855761218561588c565b9060005260206000200154815481106121a0576121a061588c565b90600052602060002090600c02016002015410156121d157604051639717078960e01b815260040160405180910390fd5b600101612161565b5060028101869055805460ff60601b1916600160601b881515021781556003810185905560048082018590556005820184905561221c9060068301908490614d91565b50876001600160601b03167f709b1f5fda58af9a4f52dacd1ec404840a8148455700cce155a2bd8cf127ef1a88888888888860405161226096959493929190615aae565b60405180910390a25050505050505050565b6000600783815481106122875761228761588c565b906000526020600020906004020160030182815481106122a9576122a961588c565b90600052602060002090600b020160010154905092915050565b61232960405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6007838154811061233c5761233c61588c565b9060005260206000209060040201600301828154811061235e5761235e61588c565b90600052602060002090600b0201604051806101600160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820180548060200260200160405190810160405280929190818152602001828054801561240d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116123ef575b5050509183525050600782015460208201526008820154604082015260098201546001600160a01b03166060820152600a909101546080909101529392505050565b6000600782815481106124645761246461588c565b600091825260209091206004918202019150600182015460ff16600481111561248f5761248f615341565b146124ad57604051638794ce4b60e01b815260040160405180910390fd5b6001810154610100900460ff16156124d85760405163c977f8d360e01b815260040160405180910390fd5b60006124e383611363565b505060018301805461010061ff001990911617905582546040518281529192508491600160601b9091046001600160a01b0316907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a3815460405163188d362b60e11b81526004810185905260248101839052600160601b9091046001600160a01b03169063311a6c56906044015b600060405180830381600087803b15801561259757600080fd5b505af11580156125ab573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146125df5760405163c383977560e01b815260040160405180910390fd5b8660058a6001600160601b0316815481106125fc576125fc61588c565b90600052602060002090600c020160020154111561262d57604051639717078960e01b815260040160405180910390fd5b805160000361264f5760405163402585f560e01b815260040160405180910390fd5b6001600160601b03891661267657604051631ef4f64960e01b815260040160405180910390fd5b60058054600181018255600091825290600c82027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905b8351811015612738578381815181106126c9576126c961588c565b6020026020010151600014806126fc575060065484518590839081106126f1576126f161588c565b602002602001015110155b1561271a57604051633d58a98960e11b815260040160405180910390fd5b61273083858381518110610bc857610bc861588c565b6001016126ae565b5060016000908152600a8201602052604090205460ff1661276c576040516306351b3d60e31b815260040160405180910390fd5b80546001600160601b0319166001600160601b038c1617815560408051600081526020810191829052516127a4916001840191614dcf565b50805460ff60601b1916600160601b8b15150217815560028101899055600381018890556004808201889055600582018790556127e79060068301908790614d91565b50600480546040516311de995760e21b81526001600160a01b039091169163477a655c91612819918691899101615ae1565b600060405180830381600087803b15801561283357600080fd5b505af1158015612847573d6000803e3d6000fd5b5050505060058b6001600160601b0316815481106128675761286761588c565b600091825260208083206001600c909302018201805492830181558352909120018290556040516001600160601b03808d1691908416907f550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee6906128d7908e908e908e908e908e908e908d90615afa565b60405180910390a35050505050505050505050565b600681815481106128fc57600080fd5b6000918252602090912001546001600160a01b0316905081565b60008060006007848154811061292e5761292e61588c565b6000918252602090912060049091020190506003600182015460ff16600481111561295b5761295b615341565b036129b3576002810154815460058054929550916001600160601b039091169081106129895761298961588c565b600091825260209091206009600c90920201015460028201546129ac9190615a66565b91506129bc565b60009250600091505b50915091565b6000546001600160a01b031633146129ed5760405163c383977560e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000612a1a82613507565b341015612a3a57604051630e3360f160e21b815260040160405180910390fd5b61126183836000346146a8565b6000546001600160a01b03163314612a725760405163c383977560e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b612a9d83611c89565b341015612abd57604051633191f8f160e01b815260040160405180910390fd5b600060078481548110612ad257612ad261588c565b6000918252602090912060049091020190506003600182015460ff166004811115612aff57612aff615341565b14612b1d576040516337cdefcb60e21b815260040160405180910390fd5b60038101805460009190612b33906001906158b8565b81548110612b4357612b4361588c565b90600052602060002090600b020190506006816000015481548110612b6a57612b6a61588c565b6000918252602090912001546001600160a01b03163314612b9e5760405163065f245f60e01b815260040160405180910390fd5b8154815460038401805460018101825560009182526020909120600580546001600160601b0390951694600b9093029091019184908110612be157612be161588c565b90600052602060002090600c020160050154846003015410612cea576005836001600160601b031681548110612c1957612c1961588c565b60009182526020909120600c9091020154600580546001600160601b0390921694509084908110612c4c57612c4c61588c565b60009182526020808320858452600a600c90930201919091019052604090205460ff16612c7857600191505b84546001600160601b03848116911614612cea57845460038601546001600160601b0390911690612cab906001906158b8565b6040516001600160601b03861681528a907f736e3f52761298c8c0823e1ebf482ed3c5ecb304f743d2d91a7c006e8e8d7a1f9060200160405180910390a45b84546001600160601b0319166001600160601b038416908117865560018601805460ff1916905542600287015560058054600092908110612d2d57612d2d61588c565b90600052602060002090600c02019050806004015434612d4d9190615a19565b8260030181905550612d6781600201548260030154614983565b60018084019190915534600284015583835560045460038801546001600160a01b039091169163d09f392d918c91612d9e916158b8565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b158015612ddc57600080fd5b505af1158015612df0573d6000803e3d6000fd5b505086548454149150612ed690505784546003870154612e12906001906158b8565b83546040519081528b907fcbe7939a71f0b369c7471d760a0a99b60b7bb010ee0406cba8a46679d1ea77569060200160405180910390a46006826000015481548110612e6057612e6061588c565b60009182526020909120015460038301546040516302dbb79560e61b81526001600160a01b039092169163b6ede54091612ea3918d918d918d9190600401615b77565b600060405180830381600087803b158015612ebd57600080fd5b505af1158015612ed1573d6000803e3d6000fd5b505050505b8554604051600160601b9091046001600160a01b0316908a907f9c9b64db9e130f48381bf697abf638e73117dbfbfd7a4484f2da3ba188f4187d90600090a3887f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b916000604051612f4691906158e8565b60405180910390a2505050505050505050565b60008060078381548110612f6f57612f6f61588c565b906000526020600020906004020190508060030160018260030180549050612f9791906158b8565b81548110612fa757612fa761588c565b90600052602060002090600b020160030154915050919050565b6000546001600160a01b03163314612fec5760405163c383977560e01b815260040160405180910390fd5b6006805460018101825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f810180546001600160a01b0319166001600160a01b0385169081179091556040519192909183917f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a35050565b600080600784815481106130805761308061588c565b906000526020600020906004020190506000600182600301805490506130a691906158b8565b905060008260030182815481106130bf576130bf61588c565b600091825260208220600b909102019150600184015460ff1660048111156130e9576130e9615341565b1461310757604051638285c4ef60e01b815260040160405180910390fd5b600060068260000154815481106131205761312061588c565b6000918252602082200154600a8401546001600160a01b039091169250905b8781108015613155575060038401546006850154105b1561335d5760006001600160a01b03841663d2b8035a8b8461317681615ba7565b95506131829087615a66565b6040516001600160e01b031960e085901b168152600481019290925260248201526044016020604051808303816000875af11580156131c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e99190615bc0565b90506001600160a01b0381166131ff575061313f565b6004805460018701546040516310f0b12f60e11b81526001600160a01b03909216926321e1625e92613235928692909101615bdd565b600060405180830381600087803b15801561324f57600080fd5b505af1158015613263573d6000803e3d6000fd5b50505060068601546040518c92506001600160a01b038416917f6119cf536152c11e0a9a6c22f3953ce4ecc93ee54fa72ffa326ffabded21509b916132b0918b8252602082015260400190565b60405180910390a36006850180546001810182556000828152602090200180546001600160a01b0319166001600160a01b03841617905560038601549054036133575760048054604051632e96bc2360e11b81529182018c9052602482018890526001600160a01b031690635d2d784690604401600060405180830381600087803b15801561333e57600080fd5b505af1158015613352573d6000803e3d6000fd5b505050505b5061313f565b8084600a0160008282546133719190615a66565b90915550505060069092015494505050505092915050565b60006133ce8261041b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061350792505050565b949350505050565b6000546001600160a01b031633146134015760405163c383977560e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526008602052604081205460ff1661345c5760405163e51cf7bf60e01b815260040160405180910390fd5b613467858585613389565b82101561348757604051630e3360f160e21b815260040160405180910390fd5b61349c6001600160a01b038416333085614992565b6134b9576040516312171d8360e31b815260040160405180910390fd5b6134fd8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506146a89050565b9695505050505050565b600080600061351584614a6e565b5091509150806005836001600160601b0316815481106135375761353761588c565b90600052602060002090600c0201600401546133ce91906159ec565b6006600061355f6139a5565b8054909150600160401b900460ff1680613586575080546001600160401b03808416911610155b156135a35760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff19909216821717825560098054610100600160a81b0319166101006001600160a01b03871602179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b60006007828154811061363f5761363f61588c565b600091825260209091206003600490920201015492915050565b60006005836001600160601b0316815481106136775761367761588c565b60009182526020808320948352600c91909102909301600a0190925250604090205460ff16919050565b60006001600160601b03841615806136c457506005546001600160601b03851610155b156136dc576136d4826005614af5565b5060006133ce565b821580159061371757506005846001600160601b0316815481106137025761370261588c565b90600052602060002090600c02016002015483105b15613727576136d4826006614af5565b600480546040516303d9595760e31b81526001600160a01b03888116938201939093526001600160601b03871660248201526044810186905260009283928392911690631ecacab8906064016060604051808303816000875af1158015613792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b69190615bf6565b9194509250905060008160098111156137d1576137d1615341565b141580156137f1575060018160098111156137ee576137ee615341565b14155b1561380c576138008582614af5565b600093505050506133ce565b600181600981111561382057613820615341565b0361383157600193505050506133ce565b821561385e5760025461384f906001600160a01b0316893086614992565b61385e57613800856002614af5565b811561388a5760025461387b906001600160a01b031689846145b7565b61388a57613800856003614af5565b600480546040516355601d6960e11b81526001600160a01b038b8116938201939093526001600160601b038a16602482015260448101869052606481018590526084810189905291169063aac03ad29060a401600060405180830381600087803b1580156138f757600080fd5b505af115801561390b573d6000803e3d6000fd5b5060019b9a5050505050505050505050565b806005846001600160601b03168154811061393a5761393a61588c565b60009182526020808320868452600c92909202909101600a0190526040808220805460ff19169315159390931790925590518215159184916001600160601b038716917fb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc7991a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6139d1614c3e565b600080546001600160a01b03199081166001600160a01b038e81169190911783556001805483168e83161781556002805484168e84161781556003805485168e851617905560048054851688851617905560098054610100600160a81b031916610100888616021790556006805481875291820190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40018054909316918b1691821790925560405190927f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a36005805460010181556000908152600480546040516311de995760e21b81526001600160a01b039091169263477a655c92613adc92889101615ae1565b600060405180830381600087803b158015613af657600080fd5b505af1158015613b0a573d6000803e3d6000fd5b5050600580546001810182556000918252600c027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160601b031916815560408051838152602081019091529093509150508051613b78916001840191602090910190614dcf565b50805460ff60601b1916600160601b881515021781558551600282015560208601516003820155604086015160048083019190915560608701516005830155613bc79060068301908790614d91565b50600480546040516311de995760e21b81526001600160a01b039091169163477a655c91613bfa91600191899101615ae1565b600060405180830381600087803b158015613c1457600080fd5b505af1158015613c28573d6000803e3d6000fd5b506000925060019150613c389050565b604051908082528060200260200182016040528015613c61578160200160208202803683370190505b509050600181600081518110613c7957613c7961588c565b602090810291909101015281546001600160601b031660017f550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee68a8a600060200201518b600160200201518c600260200201518d600360200201518d89604051613ce89796959493929190615afa565b60405180910390a3613cfd600180600161391d565b50505050505050505050505050565b6000806007836000015181548110613d2657613d2661588c565b90600052602060002090600402019050600081600301846020015181548110613d5157613d5161588c565b90600052602060002090600b0201905060006006826000015481548110613d7a57613d7a61588c565b60009182526020808320919091015487519188015160e089015160808a015160a08b01516040516333ac937b60e11b8152600481019690965260248601939093526044850191909152606484015260848301526001600160a01b03169250829063675926f69060a401602060405180830381865afa158015613e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e249190615a79565b9050612710811115613e3557506127105b6000612710613e4483826158b8565b8560010154613e5391906159ec565b613e5d9190615a19565b90506000846006018860e0015181548110613e7a57613e7a61588c565b6000918252602090912001546004805460405163965af6c760e01b81526001600160a01b03938416945092169163965af6c791613ebb918591879101615bdd565b600060405180830381600087803b158015613ed557600080fd5b505af1158015613ee9573d6000803e3d6000fd5b505060048054604051633c85b79360e21b8152600094508493506001600160a01b039091169163f216de4c91613f23918791899101615bdd565b60408051808303816000875af1158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190615c29565b91509150808a60c001818151613f7b9190615a66565b90525060208a01518a516001600160a01b0385167f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e788613fba86615c4d565b60098d0154604051613fdc9392916000916001600160a01b0390911690615c69565b60405180910390a48115806140715750895160208b015160e08c015160405163ba66fde760e01b81526004810193909352602483019190915260448201526001600160a01b0387169063ba66fde790606401602060405180830381865afa15801561404b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061406f91906158cb565b155b156140d8576004805460405163b5d69e9960e01b81526001600160a01b039091169163b5d69e99916140a591879101614ff5565b600060405180830381600087803b1580156140bf57600080fd5b505af11580156140d3573d6000803e3d6000fd5b505050505b60018a606001516140e991906158b8565b8a60e001511480156140fd575060408a0151155b156141a75760098701546000546002890154614126926001600160a01b03908116921690614c65565b60005460c08b0151600254614149926001600160a01b03918216929116906145b7565b5060208a01518a5160c08c015160028a015460098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf49361419e93909290916001600160a01b0390911690615c8d565b60405180910390a35b50505060c0909601519695505050505050565b600060078260000151815481106141d3576141d361588c565b906000526020600020906004020190506000816003018360200151815481106141fe576141fe61588c565b90600052602060002090600b02019050600060068260000154815481106142275761422761588c565b6000918252602080832090910154865191870151606088015160e08901516001600160a01b039093169550859363675926f69390929161426691615cac565b60808a015160a08b01516040516001600160e01b031960e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401602060405180830381865afa1580156142c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ea9190615a79565b90506127108111156142fb57506127105b60008360060186606001518760e001516143159190615cac565b815481106143255761432561588c565b600091825260208220015460018601546001600160a01b03909116925061434c9084614983565b6004805460405163965af6c760e01b81529293506001600160a01b03169163965af6c79161437e918691869101615bdd565b600060405180830381600087803b15801561439857600080fd5b505af11580156143ac573d6000803e3d6000fd5b5050505060006143cf88604001518960c001516143c99190615a19565b85614983565b9050808660080160008282546143e59190615a66565b92505081905550600061440b896040015188600201546144059190615a19565b86614983565b9050808760070160008282546144219190615a66565b909155505060025461443d906001600160a01b031685846145b7565b506009870154614457906001600160a01b03168583614c65565b6020890151895160098901546040516001600160a01b03888116927f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e7926144a7928c928a928a9290911690615c69565b60405180910390a46001896060015160026144c291906159ec565b6144cc91906158b8565b8960e00151036145ac57600087600801548a60c001516144ec91906158b8565b905060008860070154896002015461450491906158b8565b90508115158061451357508015155b1561181c57811561453d5760005460025461453b916001600160a01b039182169116846145b7565b505b8015614562576009890154600054614562916001600160a01b03908116911683614c65565b60208b01518b5160098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf4916128d791879187916001600160a01b0390911690615c8d565b505050505050505050565b6000806000856001600160a01b031685856040516024016145d9929190615bdd565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161460e9190615a92565b6000604051808303816000865af19150503d806000811461464b576040519150601f19603f3d011682016040523d82523d6000602084013e614650565b606091505b50915091508180156134fd5750805115806134fd5750808060200190518101906134fd91906158cb565b6000546001600160a01b031633146146a55760405163c383977560e01b815260040160405180910390fd5b50565b60008060006146b686614a6e565b92505091506005826001600160601b0316815481106146d7576146d761588c565b60009182526020808320848452600a600c90930201919091019052604090205460ff166147175760405163b34eb75d60e01b815260040160405180910390fd5b600780546001810182556000918252600160601b33026001600160601b03851617600482027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6888101918255427fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a9091015560068054929650909291849081106147a2576147a261588c565b6000918252602082200154600580546001600160a01b039092169350906001600160601b0387169081106147d8576147d861588c565b60009182526020808320600387018054600181018255908552918420600c909302019350600b0201906001600160a01b038a16156148235761481e8a8460040154611210565b614829565b82600401545b9050614835818a615a19565b6003808401919091558683556002840154908401546148549190614983565b6001830155600282018990556009820180546001600160a01b0319166001600160a01b038c8116919091179091556004805460405163d09f392d60e01b81529182018b9052600060248301529091169063d09f392d90604401600060405180830381600087803b1580156148c757600080fd5b505af11580156148db573d6000803e3d6000fd5b50505050836001600160a01b031663b6ede540898e8e86600301546040518563ffffffff1660e01b81526004016149159493929190615b77565b600060405180830381600087803b15801561492f57600080fd5b505af1158015614943573d6000803e3d6000fd5b50506040513392508a91507f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a350505050505050949350505050565b600061271061125783856159ec565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516149f79190615a92565b6000604051808303816000865af19150503d8060008114614a34576040519150601f19603f3d011682016040523d82523d6000602084013e614a39565b606091505b5091509150818015614a63575080511580614a63575080806020019051810190614a6391906158cb565b979650505050505050565b60008060006040845110614ae3575050506020810151604082015160608301516001600160601b0383161580614aaf57506005546001600160601b03841610155b15614ab957600192505b81600003614ac657600391505b801580614ad557506006548110155b15614ade575060015b614aee565b506001915060039050815b9193909250565b6001826001811115614b0957614b09615341565b03614b12575050565b6002816009811115614b2657614b26615341565b03614b4457604051630f323ed960e11b815260040160405180910390fd5b6003816009811115614b5857614b58615341565b03614b765760405163e45e13a360e01b815260040160405180910390fd5b6004816009811115614b8a57614b8a615341565b03614ba857604051631d91d0ed60e31b815260040160405180910390fd5b6005816009811115614bbc57614bbc615341565b03614bda57604051637c84af5160e01b815260040160405180910390fd5b6006816009811115614bee57614bee615341565b03614c0c57604051630caac6b360e31b815260040160405180910390fd5b6009816009811115614c2057614c20615341565b03611bcb57604051633e57962f60e21b815260040160405180910390fd5b614c46614ca8565b614c6357604051631afcd79f60e31b815260040160405180910390fd5b565b6001600160a01b038316614c94576009546119a5906001600160a01b0384811691849161010090910416614cc2565b610b0c6001600160a01b03841683836145b7565b6000614cb26139a5565b54600160401b900460ff16919050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015614cf157505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015614d2c57600080fd5b505af1158015614d40573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038516935063a9059cbb925061257d915086908690600401615bdd565b60405180608001604052806004906020820280368337509192915050565b8260048101928215614dbf579160200282015b82811115614dbf578251825591602001919060010190614da4565b50614dcb929150614e09565b5090565b828054828255906000526020600020908101928215614dbf5791602002820182811115614dbf578251825591602001919060010190614da4565b5b80821115614dcb5760008155600101614e0a565b6001600160a01b03811681146146a557600080fd5b8035614e3e81614e1e565b919050565b600060208284031215614e5557600080fd5b8135614e6081614e1e565b9392505050565b80356001600160601b0381168114614e3e57600080fd5b600080600060608486031215614e9357600080fd5b8335614e9e81614e1e565b9250614eac60208501614e67565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614efb57614efb614ebd565b604052919050565b600082601f830112614f1457600080fd5b81356001600160401b03811115614f2d57614f2d614ebd565b8060051b614f3d60208201614ed3565b91825260208185018101929081019086841115614f5957600080fd5b6020860192505b838310156134fd578235825260209283019290910190614f60565b80151581146146a557600080fd5b8035614e3e81614f7b565b600080600060608486031215614fa957600080fd5b614fb284614e67565b925060208401356001600160401b03811115614fcd57600080fd5b614fd986828701614f03565b9250506040840135614fea81614f7b565b809150509250925092565b6001600160a01b0391909116815260200190565b60006020828403121561501b57600080fd5b5035919050565b6000806040838503121561503557600080fd5b823561504081614e1e565b946020939093013593505050565b600082601f83011261505f57600080fd5b604051608081016001600160401b038111828210171561508157615081614ebd565b60405280608084018581111561509657600080fd5b845b818110156150b0578035835260209283019201615098565b509195945050505050565b600082601f8301126150cc57600080fd5b81356001600160401b038111156150e5576150e5614ebd565b6150f8601f8201601f1916602001614ed3565b81815284602083860101111561510d57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060008060006102208c8e03121561514c57600080fd5b8b3561515781614e1e565b9a5060208c013561516781614e1e565b995061517560408d01614e33565b985061518360608d01614e33565b975061519160808d01614e33565b965061519f60a08d01614f89565b95506151ae8d60c08e0161504e565b94506151be8d6101408e0161504e565b93506101c08c01356001600160401b038111156151da57600080fd5b6151e68e828f016150bb565b9350506151f66101e08d01614e33565b91506152056102008d01614e33565b90509295989b509295989b9093969950565b60008060006060848603121561522c57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561525557600080fd5b61126182614e67565b8060005b6004811015610b0c578151845260209384019390910190600101615262565b60808101611264828461525e565b600080604083850312156152a257600080fd5b82356152ad81614e1e565b915060208301356001600160401b038111156152c857600080fd5b6152d4858286016150bb565b9150509250929050565b60005b838110156152f95781810151838201526020016152e1565b50506000910152565b6000815180845261531a8160208601602086016152de565b601f01601f19169290920160200192915050565b6020815260006112616020830184615302565b634e487b7160e01b600052602160045260246000fd5b6005811061537557634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03861681526001600160a01b038516602082015260a081016153a56040830186615357565b9215156060820152608001529392505050565b6000806000606084860312156153cd57600080fd5b83356153d881614e1e565b92506020840135915060408401356001600160401b038111156153fa57600080fd5b615406868287016150bb565b9150509250925092565b6000806040838503121561542357600080fd5b61504083614e67565b6000806040838503121561543f57600080fd5b823561544a81614e1e565b9150602083013561545a81614f7b565b809150509250929050565b60008060006060848603121561547a57600080fd5b833561548581614e1e565b925060208401356001600160401b03811681146154a157600080fd5b9150604084013560ff81168114614fea57600080fd5b6000806000806000806000610140888a0312156154d357600080fd5b6154dc88614e67565b965060208801356154ec81614f7b565b955060408801359450606088013593506080880135925060a088013591506155178960c08a0161504e565b905092959891949750929550565b6000806040838503121561553857600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b828110156155825781516001600160a01b031686526020958601959091019060010161555b565b5093949350505050565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c0820152600060c083015161016060e08401526155e6610180840182615547565b905060e084015161010084015261010084015161012084015261012084015161561b6101408501826001600160a01b03169052565b506101408401516101608401528091505092915050565b60008060008060008060008060006101808a8c03121561565157600080fd5b61565a8a614e67565b985060208a013561566a81614f7b565b975060408a0135965060608a0135955060808a0135945060a08a013593506156958b60c08c0161504e565b92506101408a01356001600160401b038111156156b157600080fd5b6156bd8c828d016150bb565b9250506101608a01356001600160401b038111156156da57600080fd5b6156e68c828d01614f03565b9150509295985092959850929598565b6000806040838503121561570957600080fd5b8235915060208301356001600160401b038111156152c857600080fd5b60008060006060848603121561573b57600080fd5b833592506020840135915060408401356001600160401b038111156153fa57600080fd5b60008083601f84011261577157600080fd5b5081356001600160401b0381111561578857600080fd5b6020830191508360208285010111156157a057600080fd5b9250929050565b6000806000604084860312156157bc57600080fd5b83356001600160401b038111156157d257600080fd5b6157de8682870161575f565b9094509250506020840135614fea81614e1e565b60008060008060006080868803121561580a57600080fd5b8535945060208601356001600160401b0381111561582757600080fd5b6158338882890161575f565b909550935050604086013561584781614e1e565b949793965091946060013592915050565b60006020828403121561586a57600080fd5b81356001600160401b0381111561588057600080fd5b6133ce848285016150bb565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115611264576112646158a2565b6000602082840312156158dd57600080fd5b8151614e6081614f7b565b602081016112648284615357565b6001815b600184111561593157808504811115615915576159156158a2565b600184161561592357908102905b60019390931c9280026158fa565b935093915050565b60008261594857506001611264565b8161595557506000611264565b816001811461596b576002811461597557615991565b6001915050611264565b60ff841115615986576159866158a2565b50506001821b611264565b5060208310610133831016604e8410600b84101617156159b4575081810a611264565b6159c160001984846158f6565b80600019048211156159d5576159d56158a2565b029392505050565b600061126160ff841683615939565b8082028115828204841417611264576112646158a2565b634e487b7160e01b600052601260045260246000fd5b600082615a2857615a28615a03565b500490565b600080600060608486031215615a4257600080fd5b83516020850151909350615a5581614f7b565b6040850151909250614fea81614f7b565b80820180821115611264576112646158a2565b600060208284031215615a8b57600080fd5b5051919050565b60008251615aa48184602087016152de565b9190910192915050565b6000610120820190508715158252866020830152856040830152846060830152836080830152614a6360a083018461525e565b8281526040602082015260006133ce6040830184615302565b600061014082018915158352886020840152876040840152866060840152856080840152615b2b60a084018661525e565b610140610120840152835190819052602084019061016084019060005b81811015615b66578351835260209384019390920191600101615b48565b50909b9a5050505050505050505050565b848152836020820152608060408201526000615b966080830185615302565b905082606083015295945050505050565b600060018201615bb957615bb96158a2565b5060010190565b600060208284031215615bd257600080fd5b8151614e6081614e1e565b6001600160a01b03929092168252602082015260400190565b600080600060608486031215615c0b57600080fd5b8351602085015160408601519194509250600a8110614fea57600080fd5b60008060408385031215615c3c57600080fd5b505080516020909101519092909150565b6000600160ff1b8201615c6257615c626158a2565b5060000390565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091526001600160a01b0316604082015260600190565b600082615cbb57615cbb615a03565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220a4155dec443a9c5d136f16c8c11bf35431e34b7e440060d5ff361d5e1f88354264736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102d45760003560e01c80637934c0be1161017b578063c3569902116100d7578063e4c0aaf411610085578063e4c0aaf4146109a7578063f6506db4146109c7578063f7434ea9146109e7578063f7e7d1fd14610a07578063fbf405b014610a27578063fc6f8f1614610a47578063fe524c3914610a6757600080fd5b8063c3569902146108df578063c71f4253146108f2578063cf0c38f814610912578063d07368bd14610932578063d2b8035a14610952578063d4d1d76a14610972578063d98493f61461098757600080fd5b80638bb04875116101345780638bb04875146107f7578063a072b86c14610817578063acdbf51d14610837578063afe15cfb14610857578063b00496371461088c578063c13517e1146108ac578063c258bb19146108bf57600080fd5b80637934c0be1461073557806382d02237146107555780638456cb591461077557806386541b241461078a57806386cdecef146107aa5780638a9bb02a146107ca57600080fd5b80632e1daf2f1161023557806352d1902d116101e357806352d1902d1461063657806354fd4d501461064b578063564a565d1461068a57806359ec827e146106bb5780635c975abb146106db578063751accd0146106f55780637717a6e81461071557600080fd5b80632e1daf2f146105615780632fcb4f04146105815780633cfd1184146105a15780633f4ba83a146105ce57806342c37fa3146105e3578063452a9320146106035780634f1ef2861461062357600080fd5b80631860592b116102925780631860592b1461040057806319b815291461042e5780631c3db16d1461045e5780631f5a0dd21461049b5780632c053739146104fc5780632d29a47b1461051c5780632d68efc91461053c57600080fd5b8062f5822c146102d95780630219da79146102fb5780630761c14d146103735780630b7414bc146103935780630c340a24146103b3578063115d5376146103e0575b600080fd5b3480156102e557600080fd5b506102f96102f4366004614e43565b610a87565b005b34801561030757600080fd5b50610346610316366004614e43565b60086020526000908152604090205460ff808216916001600160401b0361010082041691600160481b9091041683565b6040805193151584526001600160401b03909216602084015260ff16908201526060015b60405180910390f35b34801561037f57600080fd5b506102f961038e366004614e7e565b610ad4565b34801561039f57600080fd5b506102f96103ae366004614f94565b610b12565b3480156103bf57600080fd5b506000546103d3906001600160a01b031681565b60405161036a9190614ff5565b3480156103ec57600080fd5b506102f96103fb366004615009565b610c43565b34801561040c57600080fd5b5061042061041b366004615022565b611210565b60405190815260200161036a565b34801561043a57600080fd5b5061044e610449366004615009565b61126a565b604051901515815260200161036a565b34801561046a57600080fd5b5061047e610479366004615009565b611363565b60408051938452911515602084015215159082015260600161036a565b3480156104a757600080fd5b506104bb6104b6366004615009565b611464565b604080516001600160601b0390981688529515156020880152948601939093526060850191909152608084015260a0830152151560c082015260e00161036a565b34801561050857600080fd5b506102f961051736600461512a565b6114c3565b34801561052857600080fd5b506102f9610537366004615217565b61159d565b34801561054857600080fd5b506009546103d39061010090046001600160a01b031681565b34801561056d57600080fd5b506004546103d3906001600160a01b031681565b34801561058d57600080fd5b506102f961059c366004614e43565b611829565b3480156105ad57600080fd5b506105c16105bc366004615243565b611876565b60405161036a9190615281565b3480156105da57600080fd5b506102f96118e0565b3480156105ef57600080fd5b506102f96105fe366004615022565b611963565b34801561060f57600080fd5b506001546103d3906001600160a01b031681565b6102f961063136600461528f565b6119aa565b34801561064257600080fd5b50610420611bcf565b34801561065757600080fd5b5061067d604051806040016040528060068152602001650302e31302e360d41b81525081565b60405161036a919061532e565b34801561069657600080fd5b506106aa6106a5366004615009565b611c2d565b60405161036a959493929190615379565b3480156106c757600080fd5b506104206106d6366004615009565b611c89565b3480156106e757600080fd5b5060095461044e9060ff1681565b34801561070157600080fd5b506102f96107103660046153b8565b611dde565b34801561072157600080fd5b506102f9610730366004615410565b611e88565b34801561074157600080fd5b506102f961075036600461542c565b611eb9565b34801561076157600080fd5b506102f9610770366004615465565b611f38565b34801561078157600080fd5b506102f9611ff5565b34801561079657600080fd5b506102f96107a53660046154b7565b612095565b3480156107b657600080fd5b506104206107c5366004615525565b612272565b3480156107d657600080fd5b506107ea6107e5366004615525565b6122c3565b60405161036a919061558c565b34801561080357600080fd5b506102f9610812366004615009565b61244f565b34801561082357600080fd5b506102f9610832366004615632565b6125b4565b34801561084357600080fd5b506103d3610852366004615009565b6128ec565b34801561086357600080fd5b50610877610872366004615009565b612916565b6040805192835260208301919091520161036a565b34801561089857600080fd5b506102f96108a7366004614e43565b6129c2565b6104206108ba3660046156f6565b612a0f565b3480156108cb57600080fd5b506102f96108da366004614e43565b612a47565b6102f96108ed366004615726565b612a94565b3480156108fe57600080fd5b5061042061090d366004615009565b612f59565b34801561091e57600080fd5b506003546103d3906001600160a01b031681565b34801561093e57600080fd5b506102f961094d366004614e43565b612fc1565b34801561095e57600080fd5b5061042061096d366004615525565b61306a565b34801561097e57600080fd5b50600654610420565b34801561099357600080fd5b506104206109a23660046157a7565b613389565b3480156109b357600080fd5b506102f96109c2366004614e43565b6133d6565b3480156109d357600080fd5b506104206109e23660046157f2565b613423565b3480156109f357600080fd5b50610420610a02366004615858565b613507565b348015610a1357600080fd5b506102f9610a22366004614e43565b613553565b348015610a3357600080fd5b506002546103d3906001600160a01b031681565b348015610a5357600080fd5b50610420610a62366004615009565b61362a565b348015610a7357600080fd5b5061044e610a82366004615410565b613659565b6000546001600160a01b03163314610ab25760405163c383977560e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314610aff57604051639d6cab9960e01b815260040160405180910390fd5b610b0c83838360016136a1565b50505050565b6000546001600160a01b03163314610b3d5760405163c383977560e01b815260040160405180910390fd5b60005b8251811015610b0c578115610bdc57828181518110610b6157610b6161588c565b602002602001015160001480610b9457506006548351849083908110610b8957610b8961588c565b602002602001015110155b15610bb257604051633d58a98960e11b815260040160405180910390fd5b610bd784848381518110610bc857610bc861588c565b6020026020010151600161391d565b610c3b565b6001838281518110610bf057610bf061588c565b602002602001015103610c16576040516356d111fd60e11b815260040160405180910390fd5b610c3b84848381518110610c2c57610c2c61588c565b6020026020010151600061391d565b600101610b40565b600060078281548110610c5857610c5861588c565b600091825260208220600490910201805460058054929450916001600160601b03909116908110610c8b57610c8b61588c565b6000918252602082206003850154600c909202019250610cad906001906158b8565b90506000836003018281548110610cc657610cc661588c565b600091825260208220600b909102019150600185015460ff166004811115610cf057610cf0615341565b03610dcb5781158015610d3f57506001840154600684019060ff166004811115610d1c57610d1c615341565b60048110610d2c57610d2c61588c565b01546002850154610d3d90426158b8565b105b15610d5d57604051633e9727df60e01b815260040160405180910390fd5b6003810154600682015414610d85576040516309e4486b60e41b815260040160405180910390fd5b8254600160601b900460ff16610d9c576002610d9f565b60015b60018086018054909160ff1990911690836004811115610dc157610dc1615341565b02179055506111c2565b60018085015460ff166004811115610de557610de5615341565b03610ef5576001840154600684019060ff166004811115610e0857610e08615341565b60048110610e1857610e1861588c565b01546002850154610e2990426158b8565b108015610ec057506006816000015481548110610e4857610e4861588c565b600091825260209091200154604051630baa64d160e01b8152600481018790526001600160a01b0390911690630baa64d190602401602060405180830381865afa158015610e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebe91906158cb565b155b15610ede57604051634dfa578560e11b815260040160405180910390fd5b6001808501805460029260ff199091169083610dc1565b6002600185015460ff166004811115610f1057610f10615341565b0361105e576001840154600684019060ff166004811115610f3357610f33615341565b60048110610f4357610f4361588c565b01546002850154610f5490426158b8565b108015610feb57506006816000015481548110610f7357610f7361588c565b6000918252602090912001546040516336a66c7560e11b8152600481018790526001600160a01b0390911690636d4cd8ea90602401602060405180830381865afa158015610fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe991906158cb565b155b1561100957604051631988dead60e31b815260040160405180910390fd5b600184018054600360ff199091161790558354604051600160601b9091046001600160a01b03169086907fa5d41b970d849372be1da1481ffd78d162bfe57a7aa2fe4e5fb73481fa5ac24f90600090a36111c2565b6003600185015460ff16600481111561107957611079615341565b03611189576001840154600684019060ff16600481111561109c5761109c615341565b600481106110ac576110ac61588c565b015460028501546110bd90426158b8565b108015611154575060068160000154815481106110dc576110dc61588c565b600091825260209091200154604051630855bbe960e01b8152600481018790526001600160a01b0390911690630855bbe990602401602060405180830381865afa15801561112e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115291906158cb565b155b1561117257604051632f4dfd8760e01b815260040160405180910390fd5b6001808501805460049260ff199091169083610dc1565b6004600185015460ff1660048111156111a4576111a4615341565b036111c2576040516307f38c8f60e11b815260040160405180910390fd5b426002850155600184015460405186917f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b91916112019160ff16906158e8565b60405180910390a25050505050565b6001600160a01b03821660009081526008602052604081205461010081046001600160401b03169061124d90600160481b900460ff16600a6159dd565b61125790846159ec565b6112619190615a19565b90505b92915050565b600080600783815481106112805761128061588c565b60009182526020822060036004909202019081018054919350906112a6906001906158b8565b815481106112b6576112b661588c565b600091825260208220845460058054600b909402909201945090916001600160601b039091169081106112eb576112eb61588c565b90600052602060002090600c0201905080600501548260030154101561131657506000949350505050565b80546005805490916001600160601b03169081106113365761133661588c565b6000918252602080832094548352600a600c9092029094010190925250604090205460ff16159392505050565b6000806000806007858154811061137c5761137c61588c565b60009182526020822060036004909202019081018054919350906113a2906001906158b8565b815481106113b2576113b261588c565b90600052602060002090600b02019050600060068260000154815481106113db576113db61588c565b600091825260209091200154604051631c3db16d60e01b8152600481018990526001600160a01b0390911691508190631c3db16d90602401606060405180830381865afa158015611430573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114549190615a2d565b9199909850909650945050505050565b6005818154811061147457600080fd5b60009182526020909120600c9091020180546002820154600383015460048401546005850154600b909501546001600160601b038516965060ff600160601b9095048516959394929391921687565b600160006114cf6139a5565b8054909150600160401b900460ff16806114f6575080546001600160401b03808416911610155b156115135760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556115478d8d8d8d8d8d8d8d8d8d8d6139c9565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050505050505050565b60095460ff16156115c157604051636f1dac1d60e01b815260040160405180910390fd5b600080600785815481106115d7576115d761588c565b600091825260209091206004918202019150600182015460ff16600481111561160257611602615341565b1461162057604051638794ce4b60e01b815260040160405180910390fd5b8060030184815481106116355761163561588c565b6000918252602082206004600b909202019081015490935091506116598483615a66565b600584015460068501546002860154929350909160009061167b908390615a19565b905060008660010154905060008060068960000154815481106116a0576116a061588c565b60009182526020909120015460405163368efae360e21b8152600481018e9052602481018d90526001600160a01b039091169150819063da3beb8c90604401602060405180830381865afa1580156116fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117209190615a79565b9150508060000361173c5783861115611737578395505b61175c565b6117478460026159ec565b86111561175c576117598460026159ec565b95505b60048801869055865b8681101561180857848110156117be576117b76040518061010001604052808e81526020018d815260200184815260200187815260200186815260200185815260200188815260200183815250613d0c565b9550611800565b6118006040518061010001604052808e81526020018d8152602001848152602001878152602001868152602001858152602001888152602001838152506141ba565b600101611765565b508488600501541461181c57600588018590555b5050505050505050505050565b6000546001600160a01b031633146118545760405163c383977560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61187e614d73565b6005826001600160601b03168154811061189a5761189a61588c565b6000918252602090912060408051608081019182905292600c029091016006019060049082845b8154815260200190600101908083116118c15750505050509050919050565b6000546001600160a01b0316331461190b5760405163c383977560e01b815260040160405180910390fd5b60095460ff1661192e5760405163b4143dc760e01b815260040160405180910390fd5b6009805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6004546001600160a01b0316331461198e57604051639d6cab9960e01b815260040160405180910390fd5b6002546119a5906001600160a01b031683836145b7565b505050565b6119b38261467a565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a3157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a25600080516020615cc18339815191525490565b6001600160a01b031614155b15611a4f5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611aa9575060408051601f3d908101601f19168201909252611aa691810190615a79565b60015b611ad15781604051630c76093760e01b8152600401611ac89190614ff5565b60405180910390fd5b600080516020615cc18339815191528114611b0257604051632a87526960e21b815260048101829052602401611ac8565b600080516020615cc18339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156119a5576000836001600160a01b031683604051611b699190615a92565b600060405180830381855af49150503d8060008114611ba4576040519150601f19603f3d011682016040523d82523d6000602084013e611ba9565b606091505b5050905080610b0c576040516339b21b5d60e11b815260040160405180910390fd5b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c1a5760405163703e46dd60e11b815260040160405180910390fd5b50600080516020615cc183398151915290565b60078181548110611c3d57600080fd5b60009182526020909120600490910201805460018201546002909201546001600160601b0382169350600160601b9091046001600160a01b03169160ff80821692610100909204169085565b60008060078381548110611c9f57611c9f61588c565b6000918252602082206003600490920201908101805491935090611cc5906001906158b8565b81548110611cd557611cd561588c565b600091825260208220845460058054600b909402909201945090916001600160601b03909116908110611d0a57611d0a61588c565b90600052602060002090600c020190508060050154826003015410611da95782546001600160601b031660001901611d4b576001600160ff1b039350611dd6565b6003820154611d5b9060026159ec565b611d66906001615a66565b81546005805490916001600160601b0316908110611d8657611d8661588c565b90600052602060002090600c020160040154611da291906159ec565b9350611dd6565b6003820154611db99060026159ec565b611dc4906001615a66565b8160040154611dd391906159ec565b93505b505050919050565b6000546001600160a01b03163314611e095760405163c383977560e01b815260040160405180910390fd5b6000836001600160a01b03168383604051611e249190615a92565b60006040518083038185875af1925050503d8060008114611e61576040519150601f19603f3d011682016040523d82523d6000602084013e611e66565b606091505b5050905080610b0c576040516322092f2f60e11b815260040160405180910390fd5b60095460ff1615611eac57604051636f1dac1d60e01b815260040160405180910390fd5b6119a533838360006136a1565b6000546001600160a01b03163314611ee45760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f541615e167511d757a7067a700eb54431b256bb458dfdce0ac58bf2ed0aefd4491a35050565b6000546001600160a01b03163314611f635760405163c383977560e01b815260040160405180910390fd5b6001600160a01b038316600081815260086020908152604091829020805469ffffffffffffffffff0019166101006001600160401b03881690810260ff60481b191691909117600160481b60ff8816908102919091179092558351908152918201527fe6996b7f03e9bd02228b99d3d946932e3197f505f60542c4cfbc919441d8a4e6910160405180910390a2505050565b6001546001600160a01b0316331480159061201b57506000546001600160a01b03163314155b1561203957604051636b29334f60e01b815260040160405180910390fd5b60095460ff161561205d57604051636f1dac1d60e01b815260040160405180910390fd5b6009805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6000546001600160a01b031633146120c05760405163c383977560e01b815260040160405180910390fd5b60006005886001600160601b0316815481106120de576120de61588c565b90600052602060002090600c0201905060016001600160601b0316886001600160601b031614158015612140575080546005805488926001600160601b031690811061212c5761212c61588c565b90600052602060002090600c020160020154115b1561215e57604051639717078960e01b815260040160405180910390fd5b60005b60018201548110156121d9578660058360010183815481106121855761218561588c565b9060005260206000200154815481106121a0576121a061588c565b90600052602060002090600c02016002015410156121d157604051639717078960e01b815260040160405180910390fd5b600101612161565b5060028101869055805460ff60601b1916600160601b881515021781556003810185905560048082018590556005820184905561221c9060068301908490614d91565b50876001600160601b03167f709b1f5fda58af9a4f52dacd1ec404840a8148455700cce155a2bd8cf127ef1a88888888888860405161226096959493929190615aae565b60405180910390a25050505050505050565b6000600783815481106122875761228761588c565b906000526020600020906004020160030182815481106122a9576122a961588c565b90600052602060002090600b020160010154905092915050565b61232960405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6007838154811061233c5761233c61588c565b9060005260206000209060040201600301828154811061235e5761235e61588c565b90600052602060002090600b0201604051806101600160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820180548060200260200160405190810160405280929190818152602001828054801561240d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116123ef575b5050509183525050600782015460208201526008820154604082015260098201546001600160a01b03166060820152600a909101546080909101529392505050565b6000600782815481106124645761246461588c565b600091825260209091206004918202019150600182015460ff16600481111561248f5761248f615341565b146124ad57604051638794ce4b60e01b815260040160405180910390fd5b6001810154610100900460ff16156124d85760405163c977f8d360e01b815260040160405180910390fd5b60006124e383611363565b505060018301805461010061ff001990911617905582546040518281529192508491600160601b9091046001600160a01b0316907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a3815460405163188d362b60e11b81526004810185905260248101839052600160601b9091046001600160a01b03169063311a6c56906044015b600060405180830381600087803b15801561259757600080fd5b505af11580156125ab573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146125df5760405163c383977560e01b815260040160405180910390fd5b8660058a6001600160601b0316815481106125fc576125fc61588c565b90600052602060002090600c020160020154111561262d57604051639717078960e01b815260040160405180910390fd5b805160000361264f5760405163402585f560e01b815260040160405180910390fd5b6001600160601b03891661267657604051631ef4f64960e01b815260040160405180910390fd5b60058054600181018255600091825290600c82027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905b8351811015612738578381815181106126c9576126c961588c565b6020026020010151600014806126fc575060065484518590839081106126f1576126f161588c565b602002602001015110155b1561271a57604051633d58a98960e11b815260040160405180910390fd5b61273083858381518110610bc857610bc861588c565b6001016126ae565b5060016000908152600a8201602052604090205460ff1661276c576040516306351b3d60e31b815260040160405180910390fd5b80546001600160601b0319166001600160601b038c1617815560408051600081526020810191829052516127a4916001840191614dcf565b50805460ff60601b1916600160601b8b15150217815560028101899055600381018890556004808201889055600582018790556127e79060068301908790614d91565b50600480546040516311de995760e21b81526001600160a01b039091169163477a655c91612819918691899101615ae1565b600060405180830381600087803b15801561283357600080fd5b505af1158015612847573d6000803e3d6000fd5b5050505060058b6001600160601b0316815481106128675761286761588c565b600091825260208083206001600c909302018201805492830181558352909120018290556040516001600160601b03808d1691908416907f550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee6906128d7908e908e908e908e908e908e908d90615afa565b60405180910390a35050505050505050505050565b600681815481106128fc57600080fd5b6000918252602090912001546001600160a01b0316905081565b60008060006007848154811061292e5761292e61588c565b6000918252602090912060049091020190506003600182015460ff16600481111561295b5761295b615341565b036129b3576002810154815460058054929550916001600160601b039091169081106129895761298961588c565b600091825260209091206009600c90920201015460028201546129ac9190615a66565b91506129bc565b60009250600091505b50915091565b6000546001600160a01b031633146129ed5760405163c383977560e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000612a1a82613507565b341015612a3a57604051630e3360f160e21b815260040160405180910390fd5b61126183836000346146a8565b6000546001600160a01b03163314612a725760405163c383977560e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b612a9d83611c89565b341015612abd57604051633191f8f160e01b815260040160405180910390fd5b600060078481548110612ad257612ad261588c565b6000918252602090912060049091020190506003600182015460ff166004811115612aff57612aff615341565b14612b1d576040516337cdefcb60e21b815260040160405180910390fd5b60038101805460009190612b33906001906158b8565b81548110612b4357612b4361588c565b90600052602060002090600b020190506006816000015481548110612b6a57612b6a61588c565b6000918252602090912001546001600160a01b03163314612b9e5760405163065f245f60e01b815260040160405180910390fd5b8154815460038401805460018101825560009182526020909120600580546001600160601b0390951694600b9093029091019184908110612be157612be161588c565b90600052602060002090600c020160050154846003015410612cea576005836001600160601b031681548110612c1957612c1961588c565b60009182526020909120600c9091020154600580546001600160601b0390921694509084908110612c4c57612c4c61588c565b60009182526020808320858452600a600c90930201919091019052604090205460ff16612c7857600191505b84546001600160601b03848116911614612cea57845460038601546001600160601b0390911690612cab906001906158b8565b6040516001600160601b03861681528a907f736e3f52761298c8c0823e1ebf482ed3c5ecb304f743d2d91a7c006e8e8d7a1f9060200160405180910390a45b84546001600160601b0319166001600160601b038416908117865560018601805460ff1916905542600287015560058054600092908110612d2d57612d2d61588c565b90600052602060002090600c02019050806004015434612d4d9190615a19565b8260030181905550612d6781600201548260030154614983565b60018084019190915534600284015583835560045460038801546001600160a01b039091169163d09f392d918c91612d9e916158b8565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b158015612ddc57600080fd5b505af1158015612df0573d6000803e3d6000fd5b505086548454149150612ed690505784546003870154612e12906001906158b8565b83546040519081528b907fcbe7939a71f0b369c7471d760a0a99b60b7bb010ee0406cba8a46679d1ea77569060200160405180910390a46006826000015481548110612e6057612e6061588c565b60009182526020909120015460038301546040516302dbb79560e61b81526001600160a01b039092169163b6ede54091612ea3918d918d918d9190600401615b77565b600060405180830381600087803b158015612ebd57600080fd5b505af1158015612ed1573d6000803e3d6000fd5b505050505b8554604051600160601b9091046001600160a01b0316908a907f9c9b64db9e130f48381bf697abf638e73117dbfbfd7a4484f2da3ba188f4187d90600090a3887f4e6f5cf43b95303e86aee81683df63992061723a829ee012db21dad388756b916000604051612f4691906158e8565b60405180910390a2505050505050505050565b60008060078381548110612f6f57612f6f61588c565b906000526020600020906004020190508060030160018260030180549050612f9791906158b8565b81548110612fa757612fa761588c565b90600052602060002090600b020160030154915050919050565b6000546001600160a01b03163314612fec5760405163c383977560e01b815260040160405180910390fd5b6006805460018101825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f810180546001600160a01b0319166001600160a01b0385169081179091556040519192909183917f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a35050565b600080600784815481106130805761308061588c565b906000526020600020906004020190506000600182600301805490506130a691906158b8565b905060008260030182815481106130bf576130bf61588c565b600091825260208220600b909102019150600184015460ff1660048111156130e9576130e9615341565b1461310757604051638285c4ef60e01b815260040160405180910390fd5b600060068260000154815481106131205761312061588c565b6000918252602082200154600a8401546001600160a01b039091169250905b8781108015613155575060038401546006850154105b1561335d5760006001600160a01b03841663d2b8035a8b8461317681615ba7565b95506131829087615a66565b6040516001600160e01b031960e085901b168152600481019290925260248201526044016020604051808303816000875af11580156131c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e99190615bc0565b90506001600160a01b0381166131ff575061313f565b6004805460018701546040516310f0b12f60e11b81526001600160a01b03909216926321e1625e92613235928692909101615bdd565b600060405180830381600087803b15801561324f57600080fd5b505af1158015613263573d6000803e3d6000fd5b50505060068601546040518c92506001600160a01b038416917f6119cf536152c11e0a9a6c22f3953ce4ecc93ee54fa72ffa326ffabded21509b916132b0918b8252602082015260400190565b60405180910390a36006850180546001810182556000828152602090200180546001600160a01b0319166001600160a01b03841617905560038601549054036133575760048054604051632e96bc2360e11b81529182018c9052602482018890526001600160a01b031690635d2d784690604401600060405180830381600087803b15801561333e57600080fd5b505af1158015613352573d6000803e3d6000fd5b505050505b5061313f565b8084600a0160008282546133719190615a66565b90915550505060069092015494505050505092915050565b60006133ce8261041b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061350792505050565b949350505050565b6000546001600160a01b031633146134015760405163c383977560e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526008602052604081205460ff1661345c5760405163e51cf7bf60e01b815260040160405180910390fd5b613467858585613389565b82101561348757604051630e3360f160e21b815260040160405180910390fd5b61349c6001600160a01b038416333085614992565b6134b9576040516312171d8360e31b815260040160405180910390fd5b6134fd8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506146a89050565b9695505050505050565b600080600061351584614a6e565b5091509150806005836001600160601b0316815481106135375761353761588c565b90600052602060002090600c0201600401546133ce91906159ec565b6006600061355f6139a5565b8054909150600160401b900460ff1680613586575080546001600160401b03808416911610155b156135a35760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff19909216821717825560098054610100600160a81b0319166101006001600160a01b03871602179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b60006007828154811061363f5761363f61588c565b600091825260209091206003600490920201015492915050565b60006005836001600160601b0316815481106136775761367761588c565b60009182526020808320948352600c91909102909301600a0190925250604090205460ff16919050565b60006001600160601b03841615806136c457506005546001600160601b03851610155b156136dc576136d4826005614af5565b5060006133ce565b821580159061371757506005846001600160601b0316815481106137025761370261588c565b90600052602060002090600c02016002015483105b15613727576136d4826006614af5565b600480546040516303d9595760e31b81526001600160a01b03888116938201939093526001600160601b03871660248201526044810186905260009283928392911690631ecacab8906064016060604051808303816000875af1158015613792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b69190615bf6565b9194509250905060008160098111156137d1576137d1615341565b141580156137f1575060018160098111156137ee576137ee615341565b14155b1561380c576138008582614af5565b600093505050506133ce565b600181600981111561382057613820615341565b0361383157600193505050506133ce565b821561385e5760025461384f906001600160a01b0316893086614992565b61385e57613800856002614af5565b811561388a5760025461387b906001600160a01b031689846145b7565b61388a57613800856003614af5565b600480546040516355601d6960e11b81526001600160a01b038b8116938201939093526001600160601b038a16602482015260448101869052606481018590526084810189905291169063aac03ad29060a401600060405180830381600087803b1580156138f757600080fd5b505af115801561390b573d6000803e3d6000fd5b5060019b9a5050505050505050505050565b806005846001600160601b03168154811061393a5761393a61588c565b60009182526020808320868452600c92909202909101600a0190526040808220805460ff19169315159390931790925590518215159184916001600160601b038716917fb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc7991a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b6139d1614c3e565b600080546001600160a01b03199081166001600160a01b038e81169190911783556001805483168e83161781556002805484168e84161781556003805485168e851617905560048054851688851617905560098054610100600160a81b031916610100888616021790556006805481875291820190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40018054909316918b1691821790925560405190927f44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb291a36005805460010181556000908152600480546040516311de995760e21b81526001600160a01b039091169263477a655c92613adc92889101615ae1565b600060405180830381600087803b158015613af657600080fd5b505af1158015613b0a573d6000803e3d6000fd5b5050600580546001810182556000918252600c027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160601b031916815560408051838152602081019091529093509150508051613b78916001840191602090910190614dcf565b50805460ff60601b1916600160601b881515021781558551600282015560208601516003820155604086015160048083019190915560608701516005830155613bc79060068301908790614d91565b50600480546040516311de995760e21b81526001600160a01b039091169163477a655c91613bfa91600191899101615ae1565b600060405180830381600087803b158015613c1457600080fd5b505af1158015613c28573d6000803e3d6000fd5b506000925060019150613c389050565b604051908082528060200260200182016040528015613c61578160200160208202803683370190505b509050600181600081518110613c7957613c7961588c565b602090810291909101015281546001600160601b031660017f550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee68a8a600060200201518b600160200201518c600260200201518d600360200201518d89604051613ce89796959493929190615afa565b60405180910390a3613cfd600180600161391d565b50505050505050505050505050565b6000806007836000015181548110613d2657613d2661588c565b90600052602060002090600402019050600081600301846020015181548110613d5157613d5161588c565b90600052602060002090600b0201905060006006826000015481548110613d7a57613d7a61588c565b60009182526020808320919091015487519188015160e089015160808a015160a08b01516040516333ac937b60e11b8152600481019690965260248601939093526044850191909152606484015260848301526001600160a01b03169250829063675926f69060a401602060405180830381865afa158015613e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e249190615a79565b9050612710811115613e3557506127105b6000612710613e4483826158b8565b8560010154613e5391906159ec565b613e5d9190615a19565b90506000846006018860e0015181548110613e7a57613e7a61588c565b6000918252602090912001546004805460405163965af6c760e01b81526001600160a01b03938416945092169163965af6c791613ebb918591879101615bdd565b600060405180830381600087803b158015613ed557600080fd5b505af1158015613ee9573d6000803e3d6000fd5b505060048054604051633c85b79360e21b8152600094508493506001600160a01b039091169163f216de4c91613f23918791899101615bdd565b60408051808303816000875af1158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190615c29565b91509150808a60c001818151613f7b9190615a66565b90525060208a01518a516001600160a01b0385167f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e788613fba86615c4d565b60098d0154604051613fdc9392916000916001600160a01b0390911690615c69565b60405180910390a48115806140715750895160208b015160e08c015160405163ba66fde760e01b81526004810193909352602483019190915260448201526001600160a01b0387169063ba66fde790606401602060405180830381865afa15801561404b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061406f91906158cb565b155b156140d8576004805460405163b5d69e9960e01b81526001600160a01b039091169163b5d69e99916140a591879101614ff5565b600060405180830381600087803b1580156140bf57600080fd5b505af11580156140d3573d6000803e3d6000fd5b505050505b60018a606001516140e991906158b8565b8a60e001511480156140fd575060408a0151155b156141a75760098701546000546002890154614126926001600160a01b03908116921690614c65565b60005460c08b0151600254614149926001600160a01b03918216929116906145b7565b5060208a01518a5160c08c015160028a015460098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf49361419e93909290916001600160a01b0390911690615c8d565b60405180910390a35b50505060c0909601519695505050505050565b600060078260000151815481106141d3576141d361588c565b906000526020600020906004020190506000816003018360200151815481106141fe576141fe61588c565b90600052602060002090600b02019050600060068260000154815481106142275761422761588c565b6000918252602080832090910154865191870151606088015160e08901516001600160a01b039093169550859363675926f69390929161426691615cac565b60808a015160a08b01516040516001600160e01b031960e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401602060405180830381865afa1580156142c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ea9190615a79565b90506127108111156142fb57506127105b60008360060186606001518760e001516143159190615cac565b815481106143255761432561588c565b600091825260208220015460018601546001600160a01b03909116925061434c9084614983565b6004805460405163965af6c760e01b81529293506001600160a01b03169163965af6c79161437e918691869101615bdd565b600060405180830381600087803b15801561439857600080fd5b505af11580156143ac573d6000803e3d6000fd5b5050505060006143cf88604001518960c001516143c99190615a19565b85614983565b9050808660080160008282546143e59190615a66565b92505081905550600061440b896040015188600201546144059190615a19565b86614983565b9050808760070160008282546144219190615a66565b909155505060025461443d906001600160a01b031685846145b7565b506009870154614457906001600160a01b03168583614c65565b6020890151895160098901546040516001600160a01b03888116927f8975b837fe0d18616c65abb8b843726a32b552ee4feca009944fa658bbb282e7926144a7928c928a928a9290911690615c69565b60405180910390a46001896060015160026144c291906159ec565b6144cc91906158b8565b8960e00151036145ac57600087600801548a60c001516144ec91906158b8565b905060008860070154896002015461450491906158b8565b90508115158061451357508015155b1561181c57811561453d5760005460025461453b916001600160a01b039182169116846145b7565b505b8015614562576009890154600054614562916001600160a01b03908116911683614c65565b60208b01518b5160098b01546040517f6cecfd3ec56289ccb16e30eb194f9a87dfdc12630b9abbc31fc69af5a0b0eaf4916128d791879187916001600160a01b0390911690615c8d565b505050505050505050565b6000806000856001600160a01b031685856040516024016145d9929190615bdd565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161460e9190615a92565b6000604051808303816000865af19150503d806000811461464b576040519150601f19603f3d011682016040523d82523d6000602084013e614650565b606091505b50915091508180156134fd5750805115806134fd5750808060200190518101906134fd91906158cb565b6000546001600160a01b031633146146a55760405163c383977560e01b815260040160405180910390fd5b50565b60008060006146b686614a6e565b92505091506005826001600160601b0316815481106146d7576146d761588c565b60009182526020808320848452600a600c90930201919091019052604090205460ff166147175760405163b34eb75d60e01b815260040160405180910390fd5b600780546001810182556000918252600160601b33026001600160601b03851617600482027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6888101918255427fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a9091015560068054929650909291849081106147a2576147a261588c565b6000918252602082200154600580546001600160a01b039092169350906001600160601b0387169081106147d8576147d861588c565b60009182526020808320600387018054600181018255908552918420600c909302019350600b0201906001600160a01b038a16156148235761481e8a8460040154611210565b614829565b82600401545b9050614835818a615a19565b6003808401919091558683556002840154908401546148549190614983565b6001830155600282018990556009820180546001600160a01b0319166001600160a01b038c8116919091179091556004805460405163d09f392d60e01b81529182018b9052600060248301529091169063d09f392d90604401600060405180830381600087803b1580156148c757600080fd5b505af11580156148db573d6000803e3d6000fd5b50505050836001600160a01b031663b6ede540898e8e86600301546040518563ffffffff1660e01b81526004016149159493929190615b77565b600060405180830381600087803b15801561492f57600080fd5b505af1158015614943573d6000803e3d6000fd5b50506040513392508a91507f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a350505050505050949350505050565b600061271061125783856159ec565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516149f79190615a92565b6000604051808303816000865af19150503d8060008114614a34576040519150601f19603f3d011682016040523d82523d6000602084013e614a39565b606091505b5091509150818015614a63575080511580614a63575080806020019051810190614a6391906158cb565b979650505050505050565b60008060006040845110614ae3575050506020810151604082015160608301516001600160601b0383161580614aaf57506005546001600160601b03841610155b15614ab957600192505b81600003614ac657600391505b801580614ad557506006548110155b15614ade575060015b614aee565b506001915060039050815b9193909250565b6001826001811115614b0957614b09615341565b03614b12575050565b6002816009811115614b2657614b26615341565b03614b4457604051630f323ed960e11b815260040160405180910390fd5b6003816009811115614b5857614b58615341565b03614b765760405163e45e13a360e01b815260040160405180910390fd5b6004816009811115614b8a57614b8a615341565b03614ba857604051631d91d0ed60e31b815260040160405180910390fd5b6005816009811115614bbc57614bbc615341565b03614bda57604051637c84af5160e01b815260040160405180910390fd5b6006816009811115614bee57614bee615341565b03614c0c57604051630caac6b360e31b815260040160405180910390fd5b6009816009811115614c2057614c20615341565b03611bcb57604051633e57962f60e21b815260040160405180910390fd5b614c46614ca8565b614c6357604051631afcd79f60e31b815260040160405180910390fd5b565b6001600160a01b038316614c94576009546119a5906001600160a01b0384811691849161010090910416614cc2565b610b0c6001600160a01b03841683836145b7565b6000614cb26139a5565b54600160401b900460ff16919050565b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015614cf157505050565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015614d2c57600080fd5b505af1158015614d40573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038516935063a9059cbb925061257d915086908690600401615bdd565b60405180608001604052806004906020820280368337509192915050565b8260048101928215614dbf579160200282015b82811115614dbf578251825591602001919060010190614da4565b50614dcb929150614e09565b5090565b828054828255906000526020600020908101928215614dbf5791602002820182811115614dbf578251825591602001919060010190614da4565b5b80821115614dcb5760008155600101614e0a565b6001600160a01b03811681146146a557600080fd5b8035614e3e81614e1e565b919050565b600060208284031215614e5557600080fd5b8135614e6081614e1e565b9392505050565b80356001600160601b0381168114614e3e57600080fd5b600080600060608486031215614e9357600080fd5b8335614e9e81614e1e565b9250614eac60208501614e67565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614efb57614efb614ebd565b604052919050565b600082601f830112614f1457600080fd5b81356001600160401b03811115614f2d57614f2d614ebd565b8060051b614f3d60208201614ed3565b91825260208185018101929081019086841115614f5957600080fd5b6020860192505b838310156134fd578235825260209283019290910190614f60565b80151581146146a557600080fd5b8035614e3e81614f7b565b600080600060608486031215614fa957600080fd5b614fb284614e67565b925060208401356001600160401b03811115614fcd57600080fd5b614fd986828701614f03565b9250506040840135614fea81614f7b565b809150509250925092565b6001600160a01b0391909116815260200190565b60006020828403121561501b57600080fd5b5035919050565b6000806040838503121561503557600080fd5b823561504081614e1e565b946020939093013593505050565b600082601f83011261505f57600080fd5b604051608081016001600160401b038111828210171561508157615081614ebd565b60405280608084018581111561509657600080fd5b845b818110156150b0578035835260209283019201615098565b509195945050505050565b600082601f8301126150cc57600080fd5b81356001600160401b038111156150e5576150e5614ebd565b6150f8601f8201601f1916602001614ed3565b81815284602083860101111561510d57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060008060006102208c8e03121561514c57600080fd5b8b3561515781614e1e565b9a5060208c013561516781614e1e565b995061517560408d01614e33565b985061518360608d01614e33565b975061519160808d01614e33565b965061519f60a08d01614f89565b95506151ae8d60c08e0161504e565b94506151be8d6101408e0161504e565b93506101c08c01356001600160401b038111156151da57600080fd5b6151e68e828f016150bb565b9350506151f66101e08d01614e33565b91506152056102008d01614e33565b90509295989b509295989b9093969950565b60008060006060848603121561522c57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561525557600080fd5b61126182614e67565b8060005b6004811015610b0c578151845260209384019390910190600101615262565b60808101611264828461525e565b600080604083850312156152a257600080fd5b82356152ad81614e1e565b915060208301356001600160401b038111156152c857600080fd5b6152d4858286016150bb565b9150509250929050565b60005b838110156152f95781810151838201526020016152e1565b50506000910152565b6000815180845261531a8160208601602086016152de565b601f01601f19169290920160200192915050565b6020815260006112616020830184615302565b634e487b7160e01b600052602160045260246000fd5b6005811061537557634e487b7160e01b600052602160045260246000fd5b9052565b6001600160601b03861681526001600160a01b038516602082015260a081016153a56040830186615357565b9215156060820152608001529392505050565b6000806000606084860312156153cd57600080fd5b83356153d881614e1e565b92506020840135915060408401356001600160401b038111156153fa57600080fd5b615406868287016150bb565b9150509250925092565b6000806040838503121561542357600080fd5b61504083614e67565b6000806040838503121561543f57600080fd5b823561544a81614e1e565b9150602083013561545a81614f7b565b809150509250929050565b60008060006060848603121561547a57600080fd5b833561548581614e1e565b925060208401356001600160401b03811681146154a157600080fd5b9150604084013560ff81168114614fea57600080fd5b6000806000806000806000610140888a0312156154d357600080fd5b6154dc88614e67565b965060208801356154ec81614f7b565b955060408801359450606088013593506080880135925060a088013591506155178960c08a0161504e565b905092959891949750929550565b6000806040838503121561553857600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b828110156155825781516001600160a01b031686526020958601959091019060010161555b565b5093949350505050565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c0820152600060c083015161016060e08401526155e6610180840182615547565b905060e084015161010084015261010084015161012084015261012084015161561b6101408501826001600160a01b03169052565b506101408401516101608401528091505092915050565b60008060008060008060008060006101808a8c03121561565157600080fd5b61565a8a614e67565b985060208a013561566a81614f7b565b975060408a0135965060608a0135955060808a0135945060a08a013593506156958b60c08c0161504e565b92506101408a01356001600160401b038111156156b157600080fd5b6156bd8c828d016150bb565b9250506101608a01356001600160401b038111156156da57600080fd5b6156e68c828d01614f03565b9150509295985092959850929598565b6000806040838503121561570957600080fd5b8235915060208301356001600160401b038111156152c857600080fd5b60008060006060848603121561573b57600080fd5b833592506020840135915060408401356001600160401b038111156153fa57600080fd5b60008083601f84011261577157600080fd5b5081356001600160401b0381111561578857600080fd5b6020830191508360208285010111156157a057600080fd5b9250929050565b6000806000604084860312156157bc57600080fd5b83356001600160401b038111156157d257600080fd5b6157de8682870161575f565b9094509250506020840135614fea81614e1e565b60008060008060006080868803121561580a57600080fd5b8535945060208601356001600160401b0381111561582757600080fd5b6158338882890161575f565b909550935050604086013561584781614e1e565b949793965091946060013592915050565b60006020828403121561586a57600080fd5b81356001600160401b0381111561588057600080fd5b6133ce848285016150bb565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115611264576112646158a2565b6000602082840312156158dd57600080fd5b8151614e6081614f7b565b602081016112648284615357565b6001815b600184111561593157808504811115615915576159156158a2565b600184161561592357908102905b60019390931c9280026158fa565b935093915050565b60008261594857506001611264565b8161595557506000611264565b816001811461596b576002811461597557615991565b6001915050611264565b60ff841115615986576159866158a2565b50506001821b611264565b5060208310610133831016604e8410600b84101617156159b4575081810a611264565b6159c160001984846158f6565b80600019048211156159d5576159d56158a2565b029392505050565b600061126160ff841683615939565b8082028115828204841417611264576112646158a2565b634e487b7160e01b600052601260045260246000fd5b600082615a2857615a28615a03565b500490565b600080600060608486031215615a4257600080fd5b83516020850151909350615a5581614f7b565b6040850151909250614fea81614f7b565b80820180821115611264576112646158a2565b600060208284031215615a8b57600080fd5b5051919050565b60008251615aa48184602087016152de565b9190910192915050565b6000610120820190508715158252866020830152856040830152846060830152836080830152614a6360a083018461525e565b8281526040602082015260006133ce6040830184615302565b600061014082018915158352886020840152876040840152866060840152856080840152615b2b60a084018661525e565b610140610120840152835190819052602084019061016084019060005b81811015615b66578351835260209384019390920191600101615b48565b50909b9a5050505050505050505050565b848152836020820152608060408201526000615b966080830185615302565b905082606083015295945050505050565b600060018201615bb957615bb96158a2565b5060010190565b600060208284031215615bd257600080fd5b8151614e6081614e1e565b6001600160a01b03929092168252602082015260400190565b600080600060608486031215615c0b57600080fd5b8351602085015160408601519194509250600a8110614fea57600080fd5b60008060408385031215615c3c57600080fd5b505080516020909101519092909150565b6000600160ff1b8201615c6257615c626158a2565b5060000390565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091526001600160a01b0316604082015260600190565b600082615cbb57615cbb615a03565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220a4155dec443a9c5d136f16c8c11bf35431e34b7e440060d5ff361d5e1f88354264736f6c634300081c0033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "AcceptedFeeToken(address,bool)": { - "details": "To be emitted when an ERC20 token is added or removed as a method to pay fees.", - "params": { - "_accepted": "Whether the token is accepted or not.", - "_token": "The ERC20 token." - } - }, - "DisputeCreation(uint256,address)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_arbitrable": "The contract which created the dispute.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "NewCurrencyRate(address,uint64,uint8)": { - "details": "To be emitted when the fee for a particular ERC20 token is updated.", - "params": { - "_feeToken": "The ERC20 token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrable": "The arbitrable receiving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "addNewDisputeKit(address)": { - "details": "Add a new supported dispute kit module to the court.", - "params": { - "_disputeKitAddress": "The address of the dispute kit contract." - } - }, - "appeal(uint256,uint256,bytes)": { - "details": "Appeals the ruling of a specified dispute. Note: Access restricted to the Dispute Kit for this `disputeID`.", - "params": { - "_disputeID": "The ID of the dispute.", - "_extraData": "Extradata for the dispute. Can be required during court jump.", - "_numberOfChoices": "Number of choices for the dispute. Can be required during court jump." - } - }, - "appealCost(uint256)": { - "details": "Gets the cost of appealing a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "cost": "The appeal cost." - } - }, - "appealPeriod(uint256)": { - "details": "Gets the start and the end of a specified dispute's current appeal period.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "end": "The end of the appeal period.", - "start": "The start of the appeal period." - } - }, - "arbitrationCost(bytes)": { - "details": "Compute the cost of arbitration denominated in ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes)." - }, - "returns": { - "cost": "The arbitration cost in ETH." - } - }, - "arbitrationCost(bytes,address)": { - "details": "Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeToken": "The ERC20 token used to pay fees." - }, - "returns": { - "cost": "The arbitration cost in `_feeToken`." - } - }, - "changeAcceptedFeeTokens(address,bool)": { - "details": "Changes the supported fee tokens.", - "params": { - "_accepted": "Whether the token is supported or not as a method of fee payment.", - "_feeToken": "The fee token." - } - }, - "changeCurrencyRates(address,uint64,uint8)": { - "details": "Changes the currency rate of a fee token.", - "params": { - "_feeToken": "The fee token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "changeGuardian(address)": { - "details": "Changes the `guardian` storage variable.", - "params": { - "_guardian": "The new value for the `guardian` storage variable." - } - }, - "changeJurorProsecutionModule(address)": { - "details": "Changes the `jurorProsecutionModule` storage variable.", - "params": { - "_jurorProsecutionModule": "The new value for the `jurorProsecutionModule` storage variable." - } - }, - "changePinakion(address)": { - "details": "Changes the `pinakion` storage variable.", - "params": { - "_pinakion": "The new value for the `pinakion` storage variable." - } - }, - "changeSortitionModule(address)": { - "details": "Changes the `_sortitionModule` storage variable. Note that the new module should be initialized for all courts.", - "params": { - "_sortitionModule": "The new value for the `sortitionModule` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createCourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],bytes,uint256[])": { - "details": "Creates a court under a specified parent court.", - "params": { - "_alpha": "The `alpha` property value of the court.", - "_feeForJuror": "The `feeForJuror` property value of the court.", - "_hiddenVotes": "The `hiddenVotes` property value of the court.", - "_jurorsForCourtJump": "The `jurorsForCourtJump` property value of the court.", - "_minStake": "The `minStake` property value of the court.", - "_parent": "The `parent` property value of the court.", - "_sortitionExtraData": "Extra data for sortition module.", - "_supportedDisputeKits": "Indexes of dispute kits that this court will support.", - "_timesPerPeriod": "The `timesPerPeriod` property value of the court." - } - }, - "createDispute(uint256,bytes)": { - "details": "Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "createDispute(uint256,bytes,address,uint256)": { - "details": "Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeAmount": "Amount of the ERC20 token used to pay fees.", - "_feeToken": "The ERC20 token used to pay fees.", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "overridden": "Whether the ruling was overridden by appeal funding or not.", - "ruling": "The current ruling.", - "tied": "Whether it's a tie or not." - } - }, - "draw(uint256,uint256)": { - "details": "Draws jurors for the dispute. Can be called in parts.", - "params": { - "_disputeID": "The ID of the dispute.", - "_iterations": "The number of iterations to run." - }, - "returns": { - "nbDrawnJurors": "The total number of jurors drawn in the round." - } - }, - "enableDisputeKits(uint96,uint256[],bool)": { - "details": "Adds/removes court's support for specified dispute kits.", - "params": { - "_courtID": "The ID of the court.", - "_disputeKitIDs": "The IDs of dispute kits which support should be added/removed.", - "_enable": "Whether add or remove the dispute kits from the court." - } - }, - "execute(uint256,uint256,uint256)": { - "details": "Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts. Note: Reward distributions are forbidden during pause.", - "params": { - "_disputeID": "The ID of the dispute.", - "_iterations": "The number of iterations to run.", - "_round": "The appeal round." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Allows the governor to call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "executeRuling(uint256)": { - "details": "Executes a specified dispute's ruling.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "getNumberOfRounds(uint256)": { - "details": "Gets the number of rounds for a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "_0": "The number of rounds." - } - }, - "getNumberOfVotes(uint256)": { - "details": "Gets the number of votes permitted for the specified dispute in the latest round.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "getPnkAtStakePerJuror(uint256,uint256)": { - "details": "Gets the PNK at stake per juror for a specified dispute and round.", - "params": { - "_disputeID": "The ID of the dispute.", - "_round": "The round to get the info for." - }, - "returns": { - "_0": "pnkAtStakePerJuror The PNK at stake per juror." - } - }, - "getRoundInfo(uint256,uint256)": { - "details": "Gets the round info for a specified dispute and round.This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.", - "params": { - "_disputeID": "The ID of the dispute.", - "_round": "The round to get the info for." - }, - "returns": { - "_0": "round The round info." - } - }, - "getTimesPerPeriod(uint96)": { - "details": "Gets the timesPerPeriod array for a given court.", - "params": { - "_courtID": "The ID of the court to get the times from." - }, - "returns": { - "timesPerPeriod": "The timesPerPeriod array for the given court." - } - }, - "initialize(address,address,address,address,address,bool,uint256[4],uint256[4],bytes,address,address)": { - "details": "Initializer (constructor equivalent for upgradable contracts).", - "params": { - "_courtParameters": "Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).", - "_disputeKit": "The address of the default dispute kit.", - "_governor": "The governor's address.", - "_guardian": "The guardian's address.", - "_hiddenVotes": "The `hiddenVotes` property value of the general court.", - "_jurorProsecutionModule": "The address of the juror prosecution module.", - "_pinakion": "The address of the token contract.", - "_sortitionExtraData": "The extra data for sortition module.", - "_sortitionModuleAddress": "The sortition module responsible for sortition of the jurors.", - "_timesPerPeriod": "The `timesPerPeriod` property value of the general court.", - "_wNative": "The wrapped native token address, typically wETH." - } - }, - "isDisputeKitJumping(uint256)": { - "details": "Returns true if the dispute kit will be switched to a parent DK.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "_0": "Whether DK will be switched or not." - } - }, - "isSupported(uint96,uint256)": { - "details": "Checks if a given dispute kit is supported by a given court.", - "params": { - "_courtID": "The ID of the court to check the support for.", - "_disputeKitID": "The ID of the dispute kit to check the support for." - }, - "returns": { - "_0": "Whether the dispute kit is supported or not." - } - }, - "passPeriod(uint256)": { - "details": "Passes the period of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - } - }, - "pause()": { - "details": "Pause staking and reward execution. Can only be done by guardian or governor." - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setStake(uint96,uint256)": { - "details": "Sets the caller's stake in a court.", - "params": { - "_courtID": "The ID of the court.", - "_newStake": "The new stake. Note that the existing delayed stake will be nullified as non-relevant." - } - }, - "setStakeBySortitionModule(address,uint96,uint256)": { - "details": "Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.", - "params": { - "_account": "The account whose stake is being set.", - "_courtID": "The ID of the court.", - "_newStake": "The new stake." - } - }, - "transferBySortitionModule(address,uint256)": { - "details": "Transfers PNK to the juror by SortitionModule.", - "params": { - "_account": "The account of the juror whose PNK to transfer.", - "_amount": "The amount to transfer." - } - }, - "unpause()": { - "details": "Unpause staking and reward execution. Can only be done by governor." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "KlerosCore Core arbitrator contract for Kleros v2. Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 449, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 451, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "guardian", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 454, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "pinakion", - "offset": 0, - "slot": "2", - "type": "t_contract(IERC20)77" - }, - { - "astId": 456, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "jurorProsecutionModule", - "offset": 0, - "slot": "3", - "type": "t_address" - }, - { - "astId": 459, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "sortitionModule", - "offset": 0, - "slot": "4", - "type": "t_contract(ISortitionModule)9946" - }, - { - "astId": 463, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "courts", - "offset": 0, - "slot": "5", - "type": "t_array(t_struct(Court)368_storage)dyn_storage" - }, - { - "astId": 467, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "disputeKits", - "offset": 0, - "slot": "6", - "type": "t_array(t_contract(IDisputeKit)9795)dyn_storage" - }, - { - "astId": 471, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "disputes", - "offset": 0, - "slot": "7", - "type": "t_array(t_struct(Dispute)385_storage)dyn_storage" - }, - { - "astId": 477, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "currencyRates", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_contract(IERC20)77,t_struct(CurrencyRate)434_storage)" - }, - { - "astId": 479, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "paused", - "offset": 0, - "slot": "9", - "type": "t_bool" - }, - { - "astId": 481, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "wNative", - "offset": 1, - "slot": "9", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "base": "t_address", - "encoding": "dynamic_array", - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_contract(IDisputeKit)9795)dyn_storage": { - "base": "t_contract(IDisputeKit)9795", - "encoding": "dynamic_array", - "label": "contract IDisputeKit[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Court)368_storage)dyn_storage": { - "base": "t_struct(Court)368_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreBase.Court[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Dispute)385_storage)dyn_storage": { - "base": "t_struct(Dispute)385_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreBase.Dispute[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Round)410_storage)dyn_storage": { - "base": "t_struct(Round)410_storage", - "encoding": "dynamic_array", - "label": "struct KlerosCoreBase.Round[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)4_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[4]", - "numberOfBytes": "128" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IArbitrableV2)9544": { - "encoding": "inplace", - "label": "contract IArbitrableV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeKit)9795": { - "encoding": "inplace", - "label": "contract IDisputeKit", - "numberOfBytes": "20" - }, - "t_contract(IERC20)77": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_contract(ISortitionModule)9946": { - "encoding": "inplace", - "label": "contract ISortitionModule", - "numberOfBytes": "20" - }, - "t_enum(Period)342": { - "encoding": "inplace", - "label": "enum KlerosCoreBase.Period", - "numberOfBytes": "1" - }, - "t_mapping(t_contract(IERC20)77,t_struct(CurrencyRate)434_storage)": { - "encoding": "mapping", - "key": "t_contract(IERC20)77", - "label": "mapping(contract IERC20 => struct KlerosCoreBase.CurrencyRate)", - "numberOfBytes": "32", - "value": "t_struct(CurrencyRate)434_storage" - }, - "t_mapping(t_uint256,t_bool)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_struct(Court)368_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreBase.Court", - "members": [ - { - "astId": 344, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "parent", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 346, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "hiddenVotes", - "offset": 12, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 349, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "children", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 351, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "minStake", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 353, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "alpha", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 355, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "feeForJuror", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 357, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "jurorsForCourtJump", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 361, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "timesPerPeriod", - "offset": 0, - "slot": "6", - "type": "t_array(t_uint256)4_storage" - }, - { - "astId": 365, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "supportedDisputeKits", - "offset": 0, - "slot": "10", - "type": "t_mapping(t_uint256,t_bool)" - }, - { - "astId": 367, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "disabled", - "offset": 0, - "slot": "11", - "type": "t_bool" - } - ], - "numberOfBytes": "384" - }, - "t_struct(CurrencyRate)434_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreBase.CurrencyRate", - "members": [ - { - "astId": 429, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "feePaymentAccepted", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 431, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "rateInEth", - "offset": 1, - "slot": "0", - "type": "t_uint64" - }, - { - "astId": 433, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "rateDecimals", - "offset": 9, - "slot": "0", - "type": "t_uint8" - } - ], - "numberOfBytes": "32" - }, - "t_struct(Dispute)385_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreBase.Dispute", - "members": [ - { - "astId": 370, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "courtID", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 373, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "arbitrated", - "offset": 12, - "slot": "0", - "type": "t_contract(IArbitrableV2)9544" - }, - { - "astId": 376, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "period", - "offset": 0, - "slot": "1", - "type": "t_enum(Period)342" - }, - { - "astId": 378, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "ruled", - "offset": 1, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 380, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "lastPeriodChange", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 384, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "rounds", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(Round)410_storage)dyn_storage" - } - ], - "numberOfBytes": "128" - }, - "t_struct(Round)410_storage": { - "encoding": "inplace", - "label": "struct KlerosCoreBase.Round", - "members": [ - { - "astId": 387, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "disputeKitID", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 389, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "pnkAtStakePerJuror", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 391, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "totalFeesForJurors", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 393, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "nbVotes", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 395, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "repartitions", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 397, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "pnkPenalties", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 400, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "drawnJurors", - "offset": 0, - "slot": "6", - "type": "t_array(t_address)dyn_storage" - }, - { - "astId": 402, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "sumFeeRewardPaid", - "offset": 0, - "slot": "7", - "type": "t_uint256" - }, - { - "astId": 404, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "sumPnkRewardPaid", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 407, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "feeToken", - "offset": 0, - "slot": "9", - "type": "t_contract(IERC20)77" - }, - { - "astId": 409, - "contract": "src/arbitration/KlerosCore.sol:KlerosCore", - "label": "drawIterations", - "offset": 0, - "slot": "10", - "type": "t_uint256" - } - ], - "numberOfBytes": "352" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCore_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/KlerosCore_Proxy.json deleted file mode 100644 index 7b0fa00d0..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/KlerosCore_Proxy.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "address": "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x0ae7adc55a2c6b31434c898d9a8dafc2a6e074bed9b39bd33e484141a8adbf2d", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "transactionIndex": 2, - "gasUsed": "579894", - "logsBloom": "0x00000000000000000000000020000000000008000000000000000000020000000000000000000000000008000000000000000200000000000000000000040000000000000000000000000000000000000000000000040000000000000000000000000400020000000000000010000800402000000000000000000000000004000000800000000000000800000000000000000000000080000000000004000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000060000000001000000200000000000000000000000000000000000000000000000000", - "blockHash": "0xc9efac5f4036a1285e678e1a2b602cf6dd86473dec70415d18d97ae37652644b", - "transactionHash": "0x0ae7adc55a2c6b31434c898d9a8dafc2a6e074bed9b39bd33e484141a8adbf2d", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 175286093, - "transactionHash": "0x0ae7adc55a2c6b31434c898d9a8dafc2a6e074bed9b39bd33e484141a8adbf2d", - "address": "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "topics": [ - "0x44063d258760b98116d53815adbc906a56b3563e540148cc0fc2457f83b5eeb2", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x000000000000000000000000eeebbbff8f377dcfc7d4f7876c531db0d22720e1" - ], - "data": "0x", - "logIndex": 1, - "blockHash": "0xc9efac5f4036a1285e678e1a2b602cf6dd86473dec70415d18d97ae37652644b" - }, - { - "transactionIndex": 2, - "blockNumber": 175286093, - "transactionHash": "0x0ae7adc55a2c6b31434c898d9a8dafc2a6e074bed9b39bd33e484141a8adbf2d", - "address": "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "topics": [ - "0x550ff678017abc294b4786a99a046628d5a1eac07be0f1ea7e89543f13576ee6", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 2, - "blockHash": "0xc9efac5f4036a1285e678e1a2b602cf6dd86473dec70415d18d97ae37652644b" - }, - { - "transactionIndex": 2, - "blockNumber": 175286093, - "transactionHash": "0x0ae7adc55a2c6b31434c898d9a8dafc2a6e074bed9b39bd33e484141a8adbf2d", - "address": "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "topics": [ - "0xb47629acdf64971062d40984f77d3dee212d735b11e3e8c7a4222d9f0572cc79", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001" - ], - "data": "0x", - "logIndex": 3, - "blockHash": "0xc9efac5f4036a1285e678e1a2b602cf6dd86473dec70415d18d97ae37652644b" - }, - { - "transactionIndex": 2, - "blockNumber": 175286093, - "transactionHash": "0x0ae7adc55a2c6b31434c898d9a8dafc2a6e074bed9b39bd33e484141a8adbf2d", - "address": "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 4, - "blockHash": "0xc9efac5f4036a1285e678e1a2b602cf6dd86473dec70415d18d97ae37652644b" - } - ], - "blockNumber": 175286093, - "cumulativeGasUsed": "626786", - "status": 1, - "byzantium": true - }, - "args": [ - "0x0d91F523fA287A74698A0e6Cd6A2436E91b9BEB9", - "0x7b4f3cc5000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c5900000000000000000000000034b944d42cacfc8266955d07a80181d2054aa2250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeebbbff8f377dcfc7d4f7876c531db0d22720e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad78ebc5ac62000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000002000000000000000000000000006f24a90fbbeabb2b4343bb9c1ed8ee6acaa5066300000000000000000000000000000000000000000000000000000000000000010500000000000000000000000000000000000000000000000000000000000000" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"KlerosCoreProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122013d7994215e0250a3caf5a61db41d7e3f7d36bd4d6c352ddb4eb5213b4783ea264736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea264697066735822122013d7994215e0250a3caf5a61db41d7e3f7d36bd4d6c352ddb4eb5213b4783ea264736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/KlerosV2NeoEarlyUser.json b/contracts/deployments/arbitrumSepoliaDevnet/KlerosV2NeoEarlyUser.json deleted file mode 100644 index 64ab1ae2f..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/KlerosV2NeoEarlyUser.json +++ /dev/null @@ -1,594 +0,0 @@ -{ - "address": "0x0d60Ff8bbCF49Bc5352328E7E28e141834d7750F", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "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": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "changeOwner", - "outputs": [], - "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": "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": "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": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "safeMint", - "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": "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": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "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" - } - ], - "transactionHash": "0x2dcc10115b4aa779adb3a473c51b9ca97f18d2e7511977d400c42c484831322c", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x0d60Ff8bbCF49Bc5352328E7E28e141834d7750F", - "transactionIndex": 5, - "gasUsed": "1949558", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7597d86cf77afb8f7808362cf2fb41021c4b9670d7e2ccb04220d1169774c656", - "transactionHash": "0x2dcc10115b4aa779adb3a473c51b9ca97f18d2e7511977d400c42c484831322c", - "logs": [], - "blockNumber": 21128478, - "cumulativeGasUsed": "18973249", - "status": 1, - "byzantium": true - }, - "args": [ - "Kleros V2 Neo Early User", - "KlerosV2NeoEarlyUser" - ], - "numDeployments": 1, - "solcInputHash": "db363a789eea4155c2105a5d4adf4ddb", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeOwner\",\"outputs\":[],\"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\":\"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\":\"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\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"safeMint\",\"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\":\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/TestERC721.sol\":\"TestERC721\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/ERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC721.sol\\\";\\nimport \\\"./IERC721Receiver.sol\\\";\\nimport \\\"./extensions/IERC721Metadata.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\nimport \\\"../../utils/Strings.sol\\\";\\nimport \\\"../../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721 is Context, ERC165, IERC721, IERC721Metadata {\\n using Address for address;\\n using Strings for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\\n return\\n interfaceId == type(IERC721).interfaceId ||\\n interfaceId == type(IERC721Metadata).interfaceId ||\\n super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: address zero is not a valid owner\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _ownerOf(tokenId);\\n require(owner != address(0), \\\"ERC721: invalid token ID\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n _requireMinted(tokenId);\\n\\n string memory baseURI = _baseURI();\\n return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : \\\"\\\";\\n }\\n\\n /**\\n * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\\n * token will be the concatenation of the `baseURI` and the `tokenId`. Empty\\n * by default, can be overridden in child contracts.\\n */\\n function _baseURI() internal view virtual returns (string memory) {\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not token owner or approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n _requireMinted(tokenId);\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n _setApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: caller is not token owner or approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: caller is not token owner or approved\\\");\\n _safeTransfer(from, to, tokenId, data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist\\n */\\n function _ownerOf(uint256 tokenId) internal view virtual returns (address) {\\n return _owners[tokenId];\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _ownerOf(tokenId) != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n address owner = ERC721.ownerOf(tokenId);\\n return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId, 1);\\n\\n // Check that tokenId was not minted by `_beforeTokenTransfer` hook\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n unchecked {\\n // Will not overflow unless all 2**256 token ids are minted to the same owner.\\n // Given that tokens are minted one by one, it is impossible in practice that\\n // this ever happens. Might change if we allow batch minting.\\n // The ERC fails to describe this case.\\n _balances[to] += 1;\\n }\\n\\n _owners[tokenId] = to;\\n\\n emit Transfer(address(0), to, tokenId);\\n\\n _afterTokenTransfer(address(0), to, tokenId, 1);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n * This is an internal function that does not check if the sender is authorized to operate on the token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId, 1);\\n\\n // Update ownership in case tokenId was transferred by `_beforeTokenTransfer` hook\\n owner = ERC721.ownerOf(tokenId);\\n\\n // Clear approvals\\n delete _tokenApprovals[tokenId];\\n\\n unchecked {\\n // Cannot overflow, as that would require more tokens to be burned/transferred\\n // out than the owner initially received through minting and transferring in.\\n _balances[owner] -= 1;\\n }\\n delete _owners[tokenId];\\n\\n emit Transfer(owner, address(0), tokenId);\\n\\n _afterTokenTransfer(owner, address(0), tokenId, 1);\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\\n require(ERC721.ownerOf(tokenId) == from, \\\"ERC721: transfer from incorrect owner\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId, 1);\\n\\n // Check that tokenId was not transferred by `_beforeTokenTransfer` hook\\n require(ERC721.ownerOf(tokenId) == from, \\\"ERC721: transfer from incorrect owner\\\");\\n\\n // Clear approvals from the previous owner\\n delete _tokenApprovals[tokenId];\\n\\n unchecked {\\n // `_balances[from]` cannot overflow for the same reason as described in `_burn`:\\n // `from`'s balance is the number of token held, which is at least one before the current\\n // transfer.\\n // `_balances[to]` could overflow in the conditions described in `_mint`. That would require\\n // all 2**256 token ids to be minted, which in practice is impossible.\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n }\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n\\n _afterTokenTransfer(from, to, tokenId, 1);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits an {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `operator` to operate on all of `owner` tokens\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {\\n require(owner != operator, \\\"ERC721: approve to caller\\\");\\n _operatorApprovals[owner][operator] = approved;\\n emit ApprovalForAll(owner, operator, approved);\\n }\\n\\n /**\\n * @dev Reverts if the `tokenId` has not been minted yet.\\n */\\n function _requireMinted(uint256 tokenId) internal view virtual {\\n require(_exists(tokenId), \\\"ERC721: invalid token ID\\\");\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {\\n return retval == IERC721Receiver.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n /// @solidity memory-safe-assembly\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is\\n * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`.\\n * - When `from` is zero, the tokens will be minted for `to`.\\n * - When `to` is zero, ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n * - `batchSize` is non-zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is\\n * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`.\\n * - When `from` is zero, the tokens were minted for `to`.\\n * - When `to` is zero, ``from``'s tokens were burned.\\n * - `from` and `to` are never both zero.\\n * - `batchSize` is non-zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual {}\\n\\n /**\\n * @dev Unsafe write access to the balances, used by extensions that \\\"mint\\\" tokens using an {ownerOf} override.\\n *\\n * WARNING: Anyone calling this MUST ensure that the balances remain consistent with the ownership. The invariant\\n * being that for any address `a` the value returned by `balanceOf(a)` must be equal to the number of tokens such\\n * that `ownerOf(tokenId)` is `a`.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function __unsafe_increaseBalance(address account, uint256 amount) internal {\\n _balances[account] += amount;\\n }\\n}\\n\",\"keccak256\":\"0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(\\n address operator,\\n address from,\\n uint256 tokenId,\\n bytes calldata data\\n ) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n */\\n function toString(int256 value) internal pure returns (string memory) {\\n return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n\\n /**\\n * @dev Returns true if the two strings are equal.\\n */\\n function equal(string memory a, string memory b) internal pure returns (bool) {\\n return keccak256(bytes(a)) == keccak256(bytes(b));\\n }\\n}\\n\",\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n // The surrounding unchecked block does not change this fact.\\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10 ** 64) {\\n value /= 10 ** 64;\\n result += 64;\\n }\\n if (value >= 10 ** 32) {\\n value /= 10 ** 32;\\n result += 32;\\n }\\n if (value >= 10 ** 16) {\\n value /= 10 ** 16;\\n result += 16;\\n }\\n if (value >= 10 ** 8) {\\n value /= 10 ** 8;\\n result += 8;\\n }\\n if (value >= 10 ** 4) {\\n value /= 10 ** 4;\\n result += 4;\\n }\\n if (value >= 10 ** 2) {\\n value /= 10 ** 2;\\n result += 2;\\n }\\n if (value >= 10 ** 1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n /**\\n * @dev Returns the largest of two signed numbers.\\n */\\n function max(int256 a, int256 b) internal pure returns (int256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two signed numbers.\\n */\\n function min(int256 a, int256 b) internal pure returns (int256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two signed numbers without overflow.\\n * The result is rounded towards zero.\\n */\\n function average(int256 a, int256 b) internal pure returns (int256) {\\n // Formula from the book \\\"Hacker's Delight\\\"\\n int256 x = (a & b) + ((a ^ b) >> 1);\\n return x + (int256(uint256(x) >> 255) & (a ^ b));\\n }\\n\\n /**\\n * @dev Returns the absolute unsigned value of a signed value.\\n */\\n function abs(int256 n) internal pure returns (uint256) {\\n unchecked {\\n // must be unchecked in order to support `n = type(int256).min`\\n return uint256(n >= 0 ? n : -n);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\"},\"src/token/TestERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721.sol\\\";\\n\\ncontract TestERC721 is ERC721 {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public owner;\\n uint256 private _nextTokenId;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) {\\n owner = msg.sender;\\n }\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier ownerOnly() {\\n require(msg.sender == owner, \\\"Owner only\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n function changeOwner(address _newOwner) external ownerOnly {\\n owner = _newOwner;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function safeMint(address to) external ownerOnly {\\n uint256 tokenId = _nextTokenId++;\\n _safeMint(to, tokenId);\\n }\\n}\\n\",\"keccak256\":\"0x5ad5b5aef2598b16a383ffc1c6ac688321326538bccc2d047369290a2e707dcb\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b506040516200168638038062001686833981016040819052620000349162000136565b818160006200004483826200022f565b5060016200005382826200022f565b5050600680546001600160a01b0319163317905550620002fb915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200009957600080fd5b81516001600160401b0380821115620000b657620000b662000071565b604051601f8301601f19908116603f01168101908282118183101715620000e157620000e162000071565b81604052838152602092508683858801011115620000fe57600080fd5b600091505b8382101562000122578582018301518183018401529082019062000103565b600093810190920192909252949350505050565b600080604083850312156200014a57600080fd5b82516001600160401b03808211156200016257600080fd5b620001708683870162000087565b935060208501519150808211156200018757600080fd5b50620001968582860162000087565b9150509250929050565b600181811c90821680620001b557607f821691505b602082108103620001d657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200022a57600081815260208120601f850160051c81016020861015620002055750805b601f850160051c820191505b81811015620002265782815560010162000211565b5050505b505050565b81516001600160401b038111156200024b576200024b62000071565b62000263816200025c8454620001a0565b84620001dc565b602080601f8311600181146200029b5760008415620002825750858301515b600019600386901b1c1916600185901b17855562000226565b600085815260208120601f198616915b82811015620002cc57888601518255948401946001909101908401620002ab565b5085821015620002eb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61137b806200030b6000396000f3fe608060405234801561001057600080fd5b50600436106100e05760003560e01c806370a082311161008757806370a08231146101ae5780638da5cb5b146101cf57806395d89b41146101e2578063a22cb465146101ea578063a6f9dae1146101fd578063b88d4fde14610210578063c87b56dd14610223578063e985e9c51461023657600080fd5b806301ffc9a7146100e557806306fdde031461010d578063081812fc14610122578063095ea7b31461014d57806323b872dd1461016257806340d097c31461017557806342842e0e146101885780636352211e1461019b575b600080fd5b6100f86100f3366004610e53565b610249565b60405190151581526020015b60405180910390f35b61011561029b565b6040516101049190610ec0565b610135610130366004610ed3565b61032d565b6040516001600160a01b039091168152602001610104565b61016061015b366004610f08565b610354565b005b610160610170366004610f32565b61046e565b610160610183366004610f6e565b61049f565b610160610196366004610f32565b6104ee565b6101356101a9366004610ed3565b610509565b6101c16101bc366004610f6e565b61053e565b604051908152602001610104565b600654610135906001600160a01b031681565b6101156105c4565b6101606101f8366004610f89565b6105d3565b61016061020b366004610f6e565b6105de565b61016061021e366004610fdb565b61062a565b610115610231366004610ed3565b610662565b6100f86102443660046110b7565b6106d6565b60006001600160e01b031982166380ac58cd60e01b148061027a57506001600160e01b03198216635b5e139f60e01b145b8061029557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546102aa906110ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102d6906110ea565b80156103235780601f106102f857610100808354040283529160200191610323565b820191906000526020600020905b81548152906001019060200180831161030657829003601f168201915b5050505050905090565b600061033882610704565b506000908152600460205260409020546001600160a01b031690565b600061035f82610509565b9050806001600160a01b0316836001600160a01b0316036103d15760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103ed57506103ed81336106d6565b61045f5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016103c8565b610469838361072c565b505050565b610478338261079a565b6104945760405162461bcd60e51b81526004016103c890611124565b6104698383836107f9565b6006546001600160a01b031633146104c95760405162461bcd60e51b81526004016103c890611171565b60078054600091826104da83611195565b9190505590506104ea828261095d565b5050565b6104698383836040518060200160405280600081525061062a565b6000818152600260205260408120546001600160a01b0316806102955760405162461bcd60e51b81526004016103c8906111bc565b60006001600160a01b0382166105a85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016103c8565b506001600160a01b031660009081526003602052604090205490565b6060600180546102aa906110ea565b6104ea338383610977565b6006546001600160a01b031633146106085760405162461bcd60e51b81526004016103c890611171565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610634338361079a565b6106505760405162461bcd60e51b81526004016103c890611124565b61065c84848484610a41565b50505050565b606061066d82610704565b600061068460408051602081019091526000815290565b905060008151116106a457604051806020016040528060008152506106cf565b806106ae84610a74565b6040516020016106bf9291906111ee565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61070d81610b07565b6107295760405162461bcd60e51b81526004016103c8906111bc565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061076182610509565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806107a683610509565b9050806001600160a01b0316846001600160a01b031614806107cd57506107cd81856106d6565b806107f15750836001600160a01b03166107e68461032d565b6001600160a01b0316145b949350505050565b826001600160a01b031661080c82610509565b6001600160a01b0316146108325760405162461bcd60e51b81526004016103c89061121d565b6001600160a01b0382166108945760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103c8565b826001600160a01b03166108a782610509565b6001600160a01b0316146108cd5760405162461bcd60e51b81526004016103c89061121d565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6104ea828260405180602001604052806000815250610b24565b816001600160a01b0316836001600160a01b0316036109d45760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b60448201526064016103c8565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610a4c8484846107f9565b610a5884848484610b57565b61065c5760405162461bcd60e51b81526004016103c890611262565b60606000610a8183610c58565b600101905060008167ffffffffffffffff811115610aa157610aa1610fc5565b6040519080825280601f01601f191660200182016040528015610acb576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610ad557509392505050565b6000908152600260205260409020546001600160a01b0316151590565b610b2e8383610d30565b610b3b6000848484610b57565b6104695760405162461bcd60e51b81526004016103c890611262565b60006001600160a01b0384163b15610c4d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610b9b9033908990889088906004016112b4565b6020604051808303816000875af1925050508015610bd6575060408051601f3d908101601f19168201909252610bd3918101906112f1565b60015b610c33573d808015610c04576040519150601f19603f3d011682016040523d82523d6000602084013e610c09565b606091505b508051600003610c2b5760405162461bcd60e51b81526004016103c890611262565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506107f1565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610c975772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610cc3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ce157662386f26fc10000830492506010015b6305f5e1008310610cf9576305f5e100830492506008015b6127108310610d0d57612710830492506004015b60648310610d1f576064830492506002015b600a83106102955760010192915050565b6001600160a01b038216610d865760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103c8565b610d8f81610b07565b15610dac5760405162461bcd60e51b81526004016103c89061130e565b610db581610b07565b15610dd25760405162461bcd60e51b81526004016103c89061130e565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b03198116811461072957600080fd5b600060208284031215610e6557600080fd5b81356106cf81610e3d565b60005b83811015610e8b578181015183820152602001610e73565b50506000910152565b60008151808452610eac816020860160208601610e70565b601f01601f19169290920160200192915050565b6020815260006106cf6020830184610e94565b600060208284031215610ee557600080fd5b5035919050565b80356001600160a01b0381168114610f0357600080fd5b919050565b60008060408385031215610f1b57600080fd5b610f2483610eec565b946020939093013593505050565b600080600060608486031215610f4757600080fd5b610f5084610eec565b9250610f5e60208501610eec565b9150604084013590509250925092565b600060208284031215610f8057600080fd5b6106cf82610eec565b60008060408385031215610f9c57600080fd5b610fa583610eec565b915060208301358015158114610fba57600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215610ff157600080fd5b610ffa85610eec565b935061100860208601610eec565b925060408501359150606085013567ffffffffffffffff8082111561102c57600080fd5b818701915087601f83011261104057600080fd5b81358181111561105257611052610fc5565b604051601f8201601f19908116603f0116810190838211818310171561107a5761107a610fc5565b816040528281528a602084870101111561109357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156110ca57600080fd5b6110d383610eec565b91506110e160208401610eec565b90509250929050565b600181811c908216806110fe57607f821691505b60208210810361111e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252600a90820152694f776e6572206f6e6c7960b01b604082015260600190565b6000600182016111b557634e487b7160e01b600052601160045260246000fd5b5060010190565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b60008351611200818460208801610e70565b835190830190611214818360208801610e70565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906112e790830184610e94565b9695505050505050565b60006020828403121561130357600080fd5b81516106cf81610e3d565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060408201526060019056fea2646970667358221220124927ec635664d406c8f2c9da77971edac68ac87ad1da1b200f6538c3bd88a864736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100e05760003560e01c806370a082311161008757806370a08231146101ae5780638da5cb5b146101cf57806395d89b41146101e2578063a22cb465146101ea578063a6f9dae1146101fd578063b88d4fde14610210578063c87b56dd14610223578063e985e9c51461023657600080fd5b806301ffc9a7146100e557806306fdde031461010d578063081812fc14610122578063095ea7b31461014d57806323b872dd1461016257806340d097c31461017557806342842e0e146101885780636352211e1461019b575b600080fd5b6100f86100f3366004610e53565b610249565b60405190151581526020015b60405180910390f35b61011561029b565b6040516101049190610ec0565b610135610130366004610ed3565b61032d565b6040516001600160a01b039091168152602001610104565b61016061015b366004610f08565b610354565b005b610160610170366004610f32565b61046e565b610160610183366004610f6e565b61049f565b610160610196366004610f32565b6104ee565b6101356101a9366004610ed3565b610509565b6101c16101bc366004610f6e565b61053e565b604051908152602001610104565b600654610135906001600160a01b031681565b6101156105c4565b6101606101f8366004610f89565b6105d3565b61016061020b366004610f6e565b6105de565b61016061021e366004610fdb565b61062a565b610115610231366004610ed3565b610662565b6100f86102443660046110b7565b6106d6565b60006001600160e01b031982166380ac58cd60e01b148061027a57506001600160e01b03198216635b5e139f60e01b145b8061029557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546102aa906110ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102d6906110ea565b80156103235780601f106102f857610100808354040283529160200191610323565b820191906000526020600020905b81548152906001019060200180831161030657829003601f168201915b5050505050905090565b600061033882610704565b506000908152600460205260409020546001600160a01b031690565b600061035f82610509565b9050806001600160a01b0316836001600160a01b0316036103d15760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103ed57506103ed81336106d6565b61045f5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016103c8565b610469838361072c565b505050565b610478338261079a565b6104945760405162461bcd60e51b81526004016103c890611124565b6104698383836107f9565b6006546001600160a01b031633146104c95760405162461bcd60e51b81526004016103c890611171565b60078054600091826104da83611195565b9190505590506104ea828261095d565b5050565b6104698383836040518060200160405280600081525061062a565b6000818152600260205260408120546001600160a01b0316806102955760405162461bcd60e51b81526004016103c8906111bc565b60006001600160a01b0382166105a85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016103c8565b506001600160a01b031660009081526003602052604090205490565b6060600180546102aa906110ea565b6104ea338383610977565b6006546001600160a01b031633146106085760405162461bcd60e51b81526004016103c890611171565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610634338361079a565b6106505760405162461bcd60e51b81526004016103c890611124565b61065c84848484610a41565b50505050565b606061066d82610704565b600061068460408051602081019091526000815290565b905060008151116106a457604051806020016040528060008152506106cf565b806106ae84610a74565b6040516020016106bf9291906111ee565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61070d81610b07565b6107295760405162461bcd60e51b81526004016103c8906111bc565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061076182610509565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806107a683610509565b9050806001600160a01b0316846001600160a01b031614806107cd57506107cd81856106d6565b806107f15750836001600160a01b03166107e68461032d565b6001600160a01b0316145b949350505050565b826001600160a01b031661080c82610509565b6001600160a01b0316146108325760405162461bcd60e51b81526004016103c89061121d565b6001600160a01b0382166108945760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103c8565b826001600160a01b03166108a782610509565b6001600160a01b0316146108cd5760405162461bcd60e51b81526004016103c89061121d565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6104ea828260405180602001604052806000815250610b24565b816001600160a01b0316836001600160a01b0316036109d45760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b60448201526064016103c8565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610a4c8484846107f9565b610a5884848484610b57565b61065c5760405162461bcd60e51b81526004016103c890611262565b60606000610a8183610c58565b600101905060008167ffffffffffffffff811115610aa157610aa1610fc5565b6040519080825280601f01601f191660200182016040528015610acb576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610ad557509392505050565b6000908152600260205260409020546001600160a01b0316151590565b610b2e8383610d30565b610b3b6000848484610b57565b6104695760405162461bcd60e51b81526004016103c890611262565b60006001600160a01b0384163b15610c4d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610b9b9033908990889088906004016112b4565b6020604051808303816000875af1925050508015610bd6575060408051601f3d908101601f19168201909252610bd3918101906112f1565b60015b610c33573d808015610c04576040519150601f19603f3d011682016040523d82523d6000602084013e610c09565b606091505b508051600003610c2b5760405162461bcd60e51b81526004016103c890611262565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506107f1565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610c975772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610cc3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ce157662386f26fc10000830492506010015b6305f5e1008310610cf9576305f5e100830492506008015b6127108310610d0d57612710830492506004015b60648310610d1f576064830492506002015b600a83106102955760010192915050565b6001600160a01b038216610d865760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103c8565b610d8f81610b07565b15610dac5760405162461bcd60e51b81526004016103c89061130e565b610db581610b07565b15610dd25760405162461bcd60e51b81526004016103c89061130e565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b03198116811461072957600080fd5b600060208284031215610e6557600080fd5b81356106cf81610e3d565b60005b83811015610e8b578181015183820152602001610e73565b50506000910152565b60008151808452610eac816020860160208601610e70565b601f01601f19169290920160200192915050565b6020815260006106cf6020830184610e94565b600060208284031215610ee557600080fd5b5035919050565b80356001600160a01b0381168114610f0357600080fd5b919050565b60008060408385031215610f1b57600080fd5b610f2483610eec565b946020939093013593505050565b600080600060608486031215610f4757600080fd5b610f5084610eec565b9250610f5e60208501610eec565b9150604084013590509250925092565b600060208284031215610f8057600080fd5b6106cf82610eec565b60008060408385031215610f9c57600080fd5b610fa583610eec565b915060208301358015158114610fba57600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215610ff157600080fd5b610ffa85610eec565b935061100860208601610eec565b925060408501359150606085013567ffffffffffffffff8082111561102c57600080fd5b818701915087601f83011261104057600080fd5b81358181111561105257611052610fc5565b604051601f8201601f19908116603f0116810190838211818310171561107a5761107a610fc5565b816040528281528a602084870101111561109357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156110ca57600080fd5b6110d383610eec565b91506110e160208401610eec565b90509250929050565b600181811c908216806110fe57607f821691505b60208210810361111e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252600a90820152694f776e6572206f6e6c7960b01b604082015260600190565b6000600182016111b557634e487b7160e01b600052601160045260246000fd5b5060010190565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b60008351611200818460208801610e70565b835190830190611214818360208801610e70565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906112e790830184610e94565b9695505050505050565b60006020828403121561130357600080fd5b81516106cf81610e3d565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060408201526060019056fea2646970667358221220124927ec635664d406c8f2c9da77971edac68ac87ad1da1b200f6538c3bd88a864736f6c63430008120033", - "devdoc": { - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when `owner` enables `approved` to manage the `tokenId` token." - }, - "ApprovalForAll(address,address,bool)": { - "details": "Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `tokenId` token is transferred from `from` to `to`." - } - }, - "kind": "dev", - "methods": { - "approve(address,uint256)": { - "details": "See {IERC721-approve}." - }, - "balanceOf(address)": { - "details": "See {IERC721-balanceOf}." - }, - "getApproved(uint256)": { - "details": "See {IERC721-getApproved}." - }, - "isApprovedForAll(address,address)": { - "details": "See {IERC721-isApprovedForAll}." - }, - "name()": { - "details": "See {IERC721Metadata-name}." - }, - "ownerOf(uint256)": { - "details": "See {IERC721-ownerOf}." - }, - "safeTransferFrom(address,address,uint256)": { - "details": "See {IERC721-safeTransferFrom}." - }, - "safeTransferFrom(address,address,uint256,bytes)": { - "details": "See {IERC721-safeTransferFrom}." - }, - "setApprovalForAll(address,bool)": { - "details": "See {IERC721-setApprovalForAll}." - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - }, - "symbol()": { - "details": "See {IERC721Metadata-symbol}." - }, - "tokenURI(uint256)": { - "details": "See {IERC721Metadata-tokenURI}." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC721-transferFrom}." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 1137, - "contract": "src/token/TestERC721.sol:TestERC721", - "label": "_name", - "offset": 0, - "slot": "0", - "type": "t_string_storage" - }, - { - "astId": 1139, - "contract": "src/token/TestERC721.sol:TestERC721", - "label": "_symbol", - "offset": 0, - "slot": "1", - "type": "t_string_storage" - }, - { - "astId": 1143, - "contract": "src/token/TestERC721.sol:TestERC721", - "label": "_owners", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_uint256,t_address)" - }, - { - "astId": 1147, - "contract": "src/token/TestERC721.sol:TestERC721", - "label": "_balances", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 1151, - "contract": "src/token/TestERC721.sol:TestERC721", - "label": "_tokenApprovals", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_address)" - }, - { - "astId": 1157, - "contract": "src/token/TestERC721.sol:TestERC721", - "label": "_operatorApprovals", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" - }, - { - "astId": 31164, - "contract": "src/token/TestERC721.sol:TestERC721", - "label": "owner", - "offset": 0, - "slot": "6", - "type": "t_address" - }, - { - "astId": 31166, - "contract": "src/token/TestERC721.sol:TestERC721", - "label": "_nextTokenId", - "offset": 0, - "slot": "7", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_uint256,t_address)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/PNK.json b/contracts/deployments/arbitrumSepoliaDevnet/PNK.json deleted file mode 100644 index 5a97a10ee..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/PNK.json +++ /dev/null @@ -1,280 +0,0 @@ -{ - "address": "0x34B944D42cAcfC8266955D07A80181D2054aa225", - "abi": [ - { - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "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": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ] -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/PNKFaucet.json b/contracts/deployments/arbitrumSepoliaDevnet/PNKFaucet.json deleted file mode 100644 index e3492bd6d..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/PNKFaucet.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "address": "0x7EFE468003Ad6A858b5350CDE0A67bBED58739dD", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "amount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "changeAmount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "request", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "withdrewAlready", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x928dc17d6759de6301100a914cb3f8d03df88611941b6e29eb9d123ccbf868f3", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x7EFE468003Ad6A858b5350CDE0A67bBED58739dD", - "transactionIndex": 1, - "gasUsed": "14689170", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3fc1286a38313be24381d53c5b137138cd89d35b8ed3b77d8ea46920b12a5f87", - "transactionHash": "0x928dc17d6759de6301100a914cb3f8d03df88611941b6e29eb9d123ccbf868f3", - "logs": [], - "blockNumber": 3121428, - "cumulativeGasUsed": "14689170", - "status": 1, - "byzantium": true - }, - "args": [ - "0x34B944D42cAcfC8266955D07A80181D2054aa225" - ], - "numDeployments": 1, - "solcInputHash": "4ee8a1f2013c130bec1668c5304bc76a", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"amount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"changeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"withdrewAlready\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/Faucet.sol\":\"Faucet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/token/Faucet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ncontract Faucet {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n IERC20 public token;\\n address public governor;\\n mapping(address => bool) public withdrewAlready;\\n uint256 public amount = 10_000 ether;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(governor) == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n constructor(IERC20 _token) {\\n token = _token;\\n governor = msg.sender;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n function changeGovernor(address _governor) public onlyByGovernor {\\n governor = _governor;\\n }\\n\\n function changeAmount(uint256 _amount) public onlyByGovernor {\\n amount = _amount;\\n }\\n\\n function withdraw() public onlyByGovernor {\\n token.transfer(governor, token.balanceOf(address(this)));\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function request() public {\\n require(\\n !withdrewAlready[msg.sender],\\n \\\"You have used this faucet already. If you need more tokens, please use another address.\\\"\\n );\\n token.transfer(msg.sender, amount);\\n withdrewAlready[msg.sender] = true;\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n function balance() public view returns (uint) {\\n return token.balanceOf(address(this));\\n }\\n}\\n\",\"keccak256\":\"0x3a54681cc304ccbfdb42215104b63809919a432ac5d3986d3021a11fcc7a1cc3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405269021e19e0c9bab240000060035534801561001e57600080fd5b5060405161065538038061065583398101604081905261003d9161006b565b600080546001600160a01b039092166001600160a01b0319928316179055600180549091163317905561009b565b60006020828403121561007d57600080fd5b81516001600160a01b038116811461009457600080fd5b9392505050565b6105ab806100aa6000396000f3fe608060405234801561001057600080fd5b50600436106100835760003560e01c80630c340a2414610088578063338cdca1146100b15780633ccfd60b146100bb5780635c320516146100c3578063aa8c217c146100d6578063b69ef8a8146100ed578063d61c40dc146100f5578063e4c0aaf414610128578063fc0c546a1461013b575b600080fd5b60015461009b906001600160a01b031681565b6040516100a8919061049b565b60405180910390f35b6100b961014e565b005b6100b961028f565b6100b96100d13660046104af565b6103a9565b6100df60035481565b6040519081526020016100a8565b6100df6103d8565b6101186101033660046104c8565b60026020526000908152604090205460ff1681565b60405190151581526020016100a8565b6100b96101363660046104c8565b61044f565b60005461009b906001600160a01b031681565b3360009081526002602052604090205460ff16156101f95760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a4015b60405180910390fd5b60005460035460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027291906104f8565b50336000908152600260205260409020805460ff19166001179055565b6001546001600160a01b031633146102b95760405162461bcd60e51b81526004016101f09061051a565b6000546001546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906102f690309060040161049b565b602060405180830381865afa158015610313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610337919061055c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a691906104f8565b50565b6001546001600160a01b031633146103d35760405162461bcd60e51b81526004016101f09061051a565b600355565b600080546040516370a0823160e01b81526001600160a01b03909116906370a082319061040990309060040161049b565b602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a919061055c565b905090565b6001546001600160a01b031633146104795760405162461bcd60e51b81526004016101f09061051a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0391909116815260200190565b6000602082840312156104c157600080fd5b5035919050565b6000602082840312156104da57600080fd5b81356001600160a01b03811681146104f157600080fd5b9392505050565b60006020828403121561050a57600080fd5b815180151581146104f157600080fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60006020828403121561056e57600080fd5b505191905056fea26469706673582212204f7fd812260eacd88f23b436eb40b4943480e914005f0a0f2738f0d3c9696a5964736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100835760003560e01c80630c340a2414610088578063338cdca1146100b15780633ccfd60b146100bb5780635c320516146100c3578063aa8c217c146100d6578063b69ef8a8146100ed578063d61c40dc146100f5578063e4c0aaf414610128578063fc0c546a1461013b575b600080fd5b60015461009b906001600160a01b031681565b6040516100a8919061049b565b60405180910390f35b6100b961014e565b005b6100b961028f565b6100b96100d13660046104af565b6103a9565b6100df60035481565b6040519081526020016100a8565b6100df6103d8565b6101186101033660046104c8565b60026020526000908152604090205460ff1681565b60405190151581526020016100a8565b6100b96101363660046104c8565b61044f565b60005461009b906001600160a01b031681565b3360009081526002602052604090205460ff16156101f95760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a4015b60405180910390fd5b60005460035460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027291906104f8565b50336000908152600260205260409020805460ff19166001179055565b6001546001600160a01b031633146102b95760405162461bcd60e51b81526004016101f09061051a565b6000546001546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906102f690309060040161049b565b602060405180830381865afa158015610313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610337919061055c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a691906104f8565b50565b6001546001600160a01b031633146103d35760405162461bcd60e51b81526004016101f09061051a565b600355565b600080546040516370a0823160e01b81526001600160a01b03909116906370a082319061040990309060040161049b565b602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a919061055c565b905090565b6001546001600160a01b031633146104795760405162461bcd60e51b81526004016101f09061051a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0391909116815260200190565b6000602082840312156104c157600080fd5b5035919050565b6000602082840312156104da57600080fd5b81356001600160a01b03811681146104f157600080fd5b9392505050565b60006020828403121561050a57600080fd5b815180151581146104f157600080fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60006020828403121561056e57600080fd5b505191905056fea26469706673582212204f7fd812260eacd88f23b436eb40b4943480e914005f0a0f2738f0d3c9696a5964736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 24559, - "contract": "src/token/Faucet.sol:Faucet", - "label": "token", - "offset": 0, - "slot": "0", - "type": "t_contract(IERC20)1042" - }, - { - "astId": 24561, - "contract": "src/token/Faucet.sol:Faucet", - "label": "governor", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 24565, - "contract": "src/token/Faucet.sol:Faucet", - "label": "withdrewAlready", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 24568, - "contract": "src/token/Faucet.sol:Faucet", - "label": "amount", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20)1042": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/PinakionV2.json b/contracts/deployments/arbitrumSepoliaDevnet/PinakionV2.json deleted file mode 120000 index 0f29cb015..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/PinakionV2.json +++ /dev/null @@ -1 +0,0 @@ -PNK.json \ No newline at end of file diff --git a/contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry.json b/contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry.json deleted file mode 100644 index 3d4f0b7aa..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry.json +++ /dev/null @@ -1,313 +0,0 @@ -{ - "address": "0xd8681dBF525ecBda2F799BFddB96840065075e8A", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_courtName", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_policy", - "type": "string" - } - ], - "name": "PolicyUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "policies", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_courtName", - "type": "string" - }, - { - "internalType": "string", - "name": "_policy", - "type": "string" - } - ], - "name": "setPolicy", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x79b2a194f0db11def52d521c097557f81e2102fd56f21383354019fe9d2788bf", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xd8681dBF525ecBda2F799BFddB96840065075e8A", - "transactionIndex": 3, - "gasUsed": "175490", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000004000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x241c3a2a151d47c8cc36324346aa6a7f7eb1706c0faf141da9b2e55894596fbf", - "transactionHash": "0x79b2a194f0db11def52d521c097557f81e2102fd56f21383354019fe9d2788bf", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 175286057, - "transactionHash": "0x79b2a194f0db11def52d521c097557f81e2102fd56f21383354019fe9d2788bf", - "address": "0xd8681dBF525ecBda2F799BFddB96840065075e8A", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 7, - "blockHash": "0x241c3a2a151d47c8cc36324346aa6a7f7eb1706c0faf141da9b2e55894596fbf" - } - ], - "blockNumber": 175286057, - "cumulativeGasUsed": "432711", - "status": 1, - "byzantium": true - }, - "args": [ - "0x472846F88D1356bb483a88f97B55026654Fc5deD", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"PolicyRegistryProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220e887411b8ec9a04afaa5d676d9ba672d1419a76d2208129b6c7942c8f4927a6864736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220e887411b8ec9a04afaa5d676d9ba672d1419a76d2208129b6c7942c8f4927a6864736f6c634300081c0033", - "execute": { - "methodName": "initialize", - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59" - ] - }, - "implementation": "0x472846F88D1356bb483a88f97B55026654Fc5deD", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry_Implementation.json deleted file mode 100644 index b969cd3f4..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry_Implementation.json +++ /dev/null @@ -1,422 +0,0 @@ -{ - "address": "0x472846F88D1356bb483a88f97B55026654Fc5deD", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_courtName", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_policy", - "type": "string" - } - ], - "name": "PolicyUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "policies", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_courtName", - "type": "string" - }, - { - "internalType": "string", - "name": "_policy", - "type": "string" - } - ], - "name": "setPolicy", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x6a69636639b93bbb433fa6ef6a44cb48aa99efadda083afb8b98f1d84aedeca7", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x472846F88D1356bb483a88f97B55026654Fc5deD", - "transactionIndex": 1, - "gasUsed": "783071", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000800000000000000000080000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x03b3b099b0a1399de7ef67f987ee51a546d6cada9b8aa611a7542693e3bf3a30", - "transactionHash": "0x6a69636639b93bbb433fa6ef6a44cb48aa99efadda083afb8b98f1d84aedeca7", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 175286053, - "transactionHash": "0x6a69636639b93bbb433fa6ef6a44cb48aa99efadda083afb8b98f1d84aedeca7", - "address": "0x472846F88D1356bb483a88f97B55026654Fc5deD", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 0, - "blockHash": "0x03b3b099b0a1399de7ef67f987ee51a546d6cada9b8aa611a7542693e3bf3a30" - } - ], - "blockNumber": 175286053, - "cumulativeGasUsed": "783071", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_courtName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_policy\",\"type\":\"string\"}],\"name\":\"PolicyUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"policies\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_courtName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_policy\",\"type\":\"string\"}],\"name\":\"setPolicy\",\"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\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A contract to maintain a policy for each court.\",\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"PolicyUpdate(uint256,string,string)\":{\"details\":\"Emitted when a policy is updated.\",\"params\":{\"_courtID\":\"The ID of the policy's court.\",\"_courtName\":\"The name of the policy's court.\",\"_policy\":\"The URI of the policy JSON.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"initialize(address)\":{\"details\":\"Constructs the `PolicyRegistry` contract.\",\"params\":{\"_governor\":\"The governor's address.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setPolicy(uint256,string,string)\":{\"details\":\"Sets the policy for the specified court.\",\"params\":{\"_courtID\":\"The ID of the specified court.\",\"_courtName\":\"The name of the specified court.\",\"_policy\":\"The URI of the policy JSON.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"PolicyRegistry\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/PolicyRegistry.sol\":\"PolicyRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/arbitration/PolicyRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/// @title PolicyRegistry\\n/// @dev A contract to maintain a policy for each court.\\ncontract PolicyRegistry is UUPSProxiable, Initializable {\\n string public constant override version = \\\"0.8.0\\\";\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a policy is updated.\\n /// @param _courtID The ID of the policy's court.\\n /// @param _courtName The name of the policy's court.\\n /// @param _policy The URI of the policy JSON.\\n event PolicyUpdate(uint256 indexed _courtID, string _courtName, string _policy);\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor;\\n mapping(uint256 => string) public policies;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n /// @dev Requires that the sender is the governor.\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"No allowed: governor only\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Constructs the `PolicyRegistry` contract.\\n /// @param _governor The governor's address.\\n function initialize(address _governor) external reinitializer(1) {\\n governor = _governor;\\n }\\n\\n function initialize2() external reinitializer(2) {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the policy for the specified court.\\n /// @param _courtID The ID of the specified court.\\n /// @param _courtName The name of the specified court.\\n /// @param _policy The URI of the policy JSON.\\n function setPolicy(uint256 _courtID, string calldata _courtName, string calldata _policy) external onlyByGovernor {\\n policies[_courtID] = _policy;\\n emit PolicyUpdate(_courtID, _courtName, policies[_courtID]);\\n }\\n}\\n\",\"keccak256\":\"0x00d08ab570b1050d13002f375e0ef28e16dbeb540cca4ba86bfc42de552033e9\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610cbc6100fc6000396000818161029e015281816102c701526104c40152610cbc6000f3fe6080604052600436106100765760003560e01c80630c340a241461007b578063472abf68146100b85780634f1ef286146100cf57806352d1902d146100e257806354fd4d5014610105578063bdf7378014610143578063c4d66de814610163578063d3e8948314610183578063e4c0aaf4146101a3575b600080fd5b34801561008757600080fd5b5060005461009b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100c457600080fd5b506100cd6101c3565b005b6100cd6100dd3660046107db565b61028a565b3480156100ee57600080fd5b506100f76104b7565b6040519081526020016100af565b34801561011157600080fd5b50610136604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100af91906108c6565b34801561014f57600080fd5b506100cd61015e366004610941565b610515565b34801561016f57600080fd5b506100cd61017e3660046109be565b6105ae565b34801561018f57600080fd5b5061013661019e3660046109e0565b610696565b3480156101af57600080fd5b506100cd6101be3660046109be565b610730565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff168061020c575080546001600160401b03808416911610155b156102295760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6102938261077c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061031157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610305600080516020610c678339815191525490565b6001600160a01b031614155b1561032f5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610389575060408051601f3d908101601f19168201909252610386918101906109f9565b60015b6103b657604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b600080516020610c6783398151915281146103e757604051632a87526960e21b8152600481018290526024016103ad565b600080516020610c678339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156104b2576000836001600160a01b03168360405161044e9190610a12565b600060405180830381855af49150503d8060008114610489576040519150601f19603f3d011682016040523d82523d6000602084013e61048e565b606091505b50509050806104b0576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105025760405163703e46dd60e11b815260040160405180910390fd5b50600080516020610c6783398151915290565b6000546001600160a01b0316331461053f5760405162461bcd60e51b81526004016103ad90610a2e565b6000858152600160205260409020610558828483610ae9565b50847f61f7110245e82eddd3b134d1e1607420d4a4dcdab30f5abdbbc9c3485b5dd2a48585600160008a815260200190815260200160002060405161059f93929190610ba8565b60405180910390a25050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105f7575080546001600160401b03808416911610155b156106145760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600160205260009081526040902080546106af90610a61565b80601f01602080910402602001604051908101604052809291908181526020018280546106db90610a61565b80156107285780601f106106fd57610100808354040283529160200191610728565b820191906000526020600020905b81548152906001019060200180831161070b57829003601f168201915b505050505081565b6000546001600160a01b0316331461075a5760405162461bcd60e51b81526004016103ad90610a2e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146107a65760405162461bcd60e51b81526004016103ad90610a2e565b50565b80356001600160a01b03811681146107c057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156107ee57600080fd5b6107f7836107a9565b915060208301356001600160401b0381111561081257600080fd5b8301601f8101851361082357600080fd5b80356001600160401b0381111561083c5761083c6107c5565b604051601f8201601f19908116603f011681016001600160401b038111828210171561086a5761086a6107c5565b60405281815282820160200187101561088257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60005b838110156108bd5781810151838201526020016108a5565b50506000910152565b60208152600082518060208401526108e58160408501602087016108a2565b601f01601f19169190910160400192915050565b60008083601f84011261090b57600080fd5b5081356001600160401b0381111561092257600080fd5b60208301915083602082850101111561093a57600080fd5b9250929050565b60008060008060006060868803121561095957600080fd5b8535945060208601356001600160401b0381111561097657600080fd5b610982888289016108f9565b90955093505060408601356001600160401b038111156109a157600080fd5b6109ad888289016108f9565b969995985093965092949392505050565b6000602082840312156109d057600080fd5b6109d9826107a9565b9392505050565b6000602082840312156109f257600080fd5b5035919050565b600060208284031215610a0b57600080fd5b5051919050565b60008251610a248184602087016108a2565b9190910192915050565b6020808252601990820152784e6f20616c6c6f7765643a20676f7665726e6f72206f6e6c7960381b604082015260600190565b600181811c90821680610a7557607f821691505b602082108103610a9557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156104b257806000526020600020601f840160051c81016020851015610ac25750805b601f840160051c820191505b81811015610ae25760008155600101610ace565b5050505050565b6001600160401b03831115610b0057610b006107c5565b610b1483610b0e8354610a61565b83610a9b565b6000601f841160018114610b485760008515610b305750838201355b600019600387901b1c1916600186901b178355610ae2565b600083815260209020601f19861690835b82811015610b795786850135825560209485019460019092019101610b59565b5086821015610b965760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60408152826040820152828460608301376000606084830101526000601f19601f8501168201606083820301602084015260008454610be681610a61565b8060608501526001821660008114610c055760018114610c2457610c58565b60ff19831660808601526020606083151560051b870101019350610c58565b87600052602060002060005b83811015610c4f57815460808883010152600190910190602001610c30565b86016080019450505b50919897505050505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220684075982165516118648b659dcb0926b6b6a10f8691c384b0cd4c665fe90b6164736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106100765760003560e01c80630c340a241461007b578063472abf68146100b85780634f1ef286146100cf57806352d1902d146100e257806354fd4d5014610105578063bdf7378014610143578063c4d66de814610163578063d3e8948314610183578063e4c0aaf4146101a3575b600080fd5b34801561008757600080fd5b5060005461009b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100c457600080fd5b506100cd6101c3565b005b6100cd6100dd3660046107db565b61028a565b3480156100ee57600080fd5b506100f76104b7565b6040519081526020016100af565b34801561011157600080fd5b50610136604051806040016040528060058152602001640302e382e360dc1b81525081565b6040516100af91906108c6565b34801561014f57600080fd5b506100cd61015e366004610941565b610515565b34801561016f57600080fd5b506100cd61017e3660046109be565b6105ae565b34801561018f57600080fd5b5061013661019e3660046109e0565b610696565b3480156101af57600080fd5b506100cd6101be3660046109be565b610730565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460029190600160401b900460ff168061020c575080546001600160401b03808416911610155b156102295760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6102938261077c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061031157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610305600080516020610c678339815191525490565b6001600160a01b031614155b1561032f5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610389575060408051601f3d908101601f19168201909252610386918101906109f9565b60015b6103b657604051630c76093760e01b81526001600160a01b03831660048201526024015b60405180910390fd5b600080516020610c6783398151915281146103e757604051632a87526960e21b8152600481018290526024016103ad565b600080516020610c678339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28151156104b2576000836001600160a01b03168360405161044e9190610a12565b600060405180830381855af49150503d8060008114610489576040519150601f19603f3d011682016040523d82523d6000602084013e61048e565b606091505b50509050806104b0576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105025760405163703e46dd60e11b815260040160405180910390fd5b50600080516020610c6783398151915290565b6000546001600160a01b0316331461053f5760405162461bcd60e51b81526004016103ad90610a2e565b6000858152600160205260409020610558828483610ae9565b50847f61f7110245e82eddd3b134d1e1607420d4a4dcdab30f5abdbbc9c3485b5dd2a48585600160008a815260200190815260200160002060405161059f93929190610ba8565b60405180910390a25050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff16806105f7575080546001600160401b03808416911610155b156106145760405162dc149f60e41b815260040160405180910390fd5b8054600160401b6001600160401b03841668ffffffffffffffffff199092168217178255600080546001600160a01b0319166001600160a01b038616179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b600160205260009081526040902080546106af90610a61565b80601f01602080910402602001604051908101604052809291908181526020018280546106db90610a61565b80156107285780601f106106fd57610100808354040283529160200191610728565b820191906000526020600020905b81548152906001019060200180831161070b57829003601f168201915b505050505081565b6000546001600160a01b0316331461075a5760405162461bcd60e51b81526004016103ad90610a2e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146107a65760405162461bcd60e51b81526004016103ad90610a2e565b50565b80356001600160a01b03811681146107c057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156107ee57600080fd5b6107f7836107a9565b915060208301356001600160401b0381111561081257600080fd5b8301601f8101851361082357600080fd5b80356001600160401b0381111561083c5761083c6107c5565b604051601f8201601f19908116603f011681016001600160401b038111828210171561086a5761086a6107c5565b60405281815282820160200187101561088257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60005b838110156108bd5781810151838201526020016108a5565b50506000910152565b60208152600082518060208401526108e58160408501602087016108a2565b601f01601f19169190910160400192915050565b60008083601f84011261090b57600080fd5b5081356001600160401b0381111561092257600080fd5b60208301915083602082850101111561093a57600080fd5b9250929050565b60008060008060006060868803121561095957600080fd5b8535945060208601356001600160401b0381111561097657600080fd5b610982888289016108f9565b90955093505060408601356001600160401b038111156109a157600080fd5b6109ad888289016108f9565b969995985093965092949392505050565b6000602082840312156109d057600080fd5b6109d9826107a9565b9392505050565b6000602082840312156109f257600080fd5b5035919050565b600060208284031215610a0b57600080fd5b5051919050565b60008251610a248184602087016108a2565b9190910192915050565b6020808252601990820152784e6f20616c6c6f7765643a20676f7665726e6f72206f6e6c7960381b604082015260600190565b600181811c90821680610a7557607f821691505b602082108103610a9557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156104b257806000526020600020601f840160051c81016020851015610ac25750805b601f840160051c820191505b81811015610ae25760008155600101610ace565b5050505050565b6001600160401b03831115610b0057610b006107c5565b610b1483610b0e8354610a61565b83610a9b565b6000601f841160018114610b485760008515610b305750838201355b600019600387901b1c1916600186901b178355610ae2565b600083815260209020601f19861690835b82811015610b795786850135825560209485019460019092019101610b59565b5086821015610b965760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60408152826040820152828460608301376000606084830101526000601f19601f8501168201606083820301602084015260008454610be681610a61565b8060608501526001821660008114610c055760018114610c2457610c58565b60ff19831660808601526020606083151560051b870101019350610c58565b87600052602060002060005b83811015610c4f57815460808883010152600190910190602001610c30565b86016080019450505b50919897505050505050505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220684075982165516118648b659dcb0926b6b6a10f8691c384b0cd4c665fe90b6164736f6c634300081c0033", - "devdoc": { - "details": "A contract to maintain a policy for each court.", - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "PolicyUpdate(uint256,string,string)": { - "details": "Emitted when a policy is updated.", - "params": { - "_courtID": "The ID of the policy's court.", - "_courtName": "The name of the policy's court.", - "_policy": "The URI of the policy JSON." - } - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "initialize(address)": { - "details": "Constructs the `PolicyRegistry` contract.", - "params": { - "_governor": "The governor's address." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setPolicy(uint256,string,string)": { - "details": "Sets the policy for the specified court.", - "params": { - "_courtID": "The ID of the specified court.", - "_courtName": "The name of the specified court.", - "_policy": "The URI of the policy JSON." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "PolicyRegistry", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 16392, - "contract": "src/arbitration/PolicyRegistry.sol:PolicyRegistry", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 16396, - "contract": "src/arbitration/PolicyRegistry.sol:PolicyRegistry", - "label": "policies", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_string_storage)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_string_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => string)", - "numberOfBytes": "32", - "value": "t_string_storage" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry_Proxy.json deleted file mode 100644 index c672a02c9..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0xd8681dBF525ecBda2F799BFddB96840065075e8A", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x79b2a194f0db11def52d521c097557f81e2102fd56f21383354019fe9d2788bf", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0xd8681dBF525ecBda2F799BFddB96840065075e8A", - "transactionIndex": 3, - "gasUsed": "175490", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000004000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x241c3a2a151d47c8cc36324346aa6a7f7eb1706c0faf141da9b2e55894596fbf", - "transactionHash": "0x79b2a194f0db11def52d521c097557f81e2102fd56f21383354019fe9d2788bf", - "logs": [ - { - "transactionIndex": 3, - "blockNumber": 175286057, - "transactionHash": "0x79b2a194f0db11def52d521c097557f81e2102fd56f21383354019fe9d2788bf", - "address": "0xd8681dBF525ecBda2F799BFddB96840065075e8A", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 7, - "blockHash": "0x241c3a2a151d47c8cc36324346aa6a7f7eb1706c0faf141da9b2e55894596fbf" - } - ], - "blockNumber": 175286057, - "cumulativeGasUsed": "432711", - "status": 1, - "byzantium": true - }, - "args": [ - "0x472846F88D1356bb483a88f97B55026654Fc5deD", - "0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"PolicyRegistryProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220e887411b8ec9a04afaa5d676d9ba672d1419a76d2208129b6c7942c8f4927a6864736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220e887411b8ec9a04afaa5d676d9ba672d1419a76d2208129b6c7942c8f4927a6864736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/RandomizerOracle.json b/contracts/deployments/arbitrumSepoliaDevnet/RandomizerOracle.json deleted file mode 100644 index 0ed65f9d1..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/RandomizerOracle.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "address": "0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b", - "abi": [] -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/SortitionModule.json b/contracts/deployments/arbitrumSepoliaDevnet/SortitionModule.json deleted file mode 100644 index a92bd9df9..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/SortitionModule.json +++ /dev/null @@ -1,1106 +0,0 @@ -{ - "address": "0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNK", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNKWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ISortitionModule.Phase", - "name": "_phase", - "type": "uint8" - } - ], - "name": "NewPhase", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeDelayed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_unlock", - "type": "bool" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amountAllCourts", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - } - ], - "name": "changeMaxDrawingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - } - ], - "name": "changeMinStakingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "changeRandomNumberGenerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDisputeHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createTree", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeReadIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeWriteIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "delayedStakes", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "alreadyTransferred", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputesWithoutJurors", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "executeDelayedStakes", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getJurorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalLocked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakedInCourt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbCourts", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorCourtIDs", - "outputs": [ - { - "internalType": "uint96[]", - "name": "", - "type": "uint96[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorLeftoverPNK", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - }, - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize4", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "isJurorStaked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "jurors", - "outputs": [ - { - "internalType": "uint256", - "name": "stakedPnk", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lockedPnk", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPhaseChange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "jurorAccount", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtId", - "type": "uint96" - } - ], - "name": "latestDelayedStakeIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "lockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxDrawingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minStakingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_randomNumber", - "type": "uint256" - } - ], - "name": "notifyRandomNumber", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "passPhase", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "penalizeStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availablePenalty", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "phase", - "outputs": [ - { - "internalType": "enum ISortitionModule.Phase", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "postDrawHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumberRequestBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rng", - "outputs": [ - { - "internalType": "contract RNG", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rngLookahead", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "setJurorInactive", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_ID", - "type": "bytes32" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "unlockStake", - "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": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "validateStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "enum StakingResult", - "name": "stakingResult", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "withdrawLeftoverPNK", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x9578634d10e5620603f87662e9739fb13f6913ed7f669662f15188dfe9cf8a0b", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663", - "transactionIndex": 1, - "gasUsed": "332814", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100004000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3ea136a5325825c86d23b94003b2a561cfa59dd0cd87bc49909dad568b5eb697", - "transactionHash": "0x9578634d10e5620603f87662e9739fb13f6913ed7f669662f15188dfe9cf8a0b", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 175286083, - "transactionHash": "0x9578634d10e5620603f87662e9739fb13f6913ed7f669662f15188dfe9cf8a0b", - "address": "0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x3ea136a5325825c86d23b94003b2a561cfa59dd0cd87bc49909dad568b5eb697" - } - ], - "blockNumber": 175286083, - "cumulativeGasUsed": "332814", - "status": 1, - "byzantium": true - }, - "args": [ - "0xBe984dc03B4A8d5135BCc07b46fdB867e02BA1F3", - "0x54812d17000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000001bd44c4a4511dbfa7dc1d5bc201635596e7200f900000000000000000000000000000000000000000000000000000000000000b400000000000000000000000000000000000000000000000000000000000002580000000000000000000000007e40f5ac809521654a9c17e442f2a0a5a4d890fa0000000000000000000000000000000000000000000000000000000000000014" - ], - "numDeployments": 2, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"SortitionModuleProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220f2e3563554b18c2c9587081d72ef7797df12f887fb52d3ccfb244524903568c364736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220f2e3563554b18c2c9587081d72ef7797df12f887fb52d3ccfb244524903568c364736f6c634300081c0033", - "execute": { - "methodName": "initialize4", - "args": [] - }, - "implementation": "0x8a26445989c944C58503275ad87Ab4d7b17d4F1e", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity.json b/contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity.json deleted file mode 100644 index 1ce05ea30..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity.json +++ /dev/null @@ -1,629 +0,0 @@ -{ - "address": "0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ISortitionModule.Phase", - "name": "_phase", - "type": "uint8" - } - ], - "name": "NewPhase", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_unlock", - "type": "bool" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCoreUniversity", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDisputeHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createTree", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disputesWithoutJurors", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getJurorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalLocked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakedInCourt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbCourts", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorCourtIDs", - "outputs": [ - { - "internalType": "uint96[]", - "name": "", - "type": "uint96[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCoreUniversity", - "name": "_core", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "isJurorStaked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "jurors", - "outputs": [ - { - "internalType": "uint256", - "name": "stakedPnk", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lockedPnk", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "lockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_randomNumber", - "type": "uint256" - } - ], - "name": "notifyRandomNumber", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "penalizeStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "postDrawHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "setJurorInactive", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alreadyTransferred", - "type": "bool" - } - ], - "name": "setStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "enum StakingResult", - "name": "stakingResult", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "setTransientJuror", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "unlockStake", - "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": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0xb26dc1c9ca9c3ed561a1d9c3feaad474af38bc90ea240f927053e5e5868d6a7e", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79", - "transactionIndex": 1, - "gasUsed": "210047", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010800000020000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x6a08d6d6cf180ae6bf3126f86fbedfd17212528b22a7a9403addd2dd6b1109c3", - "transactionHash": "0xb26dc1c9ca9c3ed561a1d9c3feaad474af38bc90ea240f927053e5e5868d6a7e", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 96308572, - "transactionHash": "0xb26dc1c9ca9c3ed561a1d9c3feaad474af38bc90ea240f927053e5e5868d6a7e", - "address": "0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x6a08d6d6cf180ae6bf3126f86fbedfd17212528b22a7a9403addd2dd6b1109c3" - } - ], - "blockNumber": 96308572, - "cumulativeGasUsed": "210047", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5CAD621D69E0535422aCFaCC0017bC32beC7A486", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000005ab37f38778bc175852fa353056591d91c744ce6" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"SortitionModuleUniversityProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220cbf6c95b71e3c03306025a1af7f6aa4f021b4a8c8f5a8c68988b35c4442edb4964736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220cbf6c95b71e3c03306025a1af7f6aa4f021b4a8c8f5a8c68988b35c4442edb4964736f6c63430008180033", - "execute": { - "methodName": "initialize", - "args": [ - "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "0x5AB37F38778Bc175852fA353056591D91c744ce6" - ] - }, - "implementation": "0x5CAD621D69E0535422aCFaCC0017bC32beC7A486", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity_Implementation.json deleted file mode 100644 index 21360963b..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity_Implementation.json +++ /dev/null @@ -1,842 +0,0 @@ -{ - "address": "0x5CAD621D69E0535422aCFaCC0017bC32beC7A486", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ISortitionModule.Phase", - "name": "_phase", - "type": "uint8" - } - ], - "name": "NewPhase", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_unlock", - "type": "bool" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCoreUniversity", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDisputeHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createTree", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disputesWithoutJurors", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getJurorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalLocked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakedInCourt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbCourts", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorCourtIDs", - "outputs": [ - { - "internalType": "uint96[]", - "name": "", - "type": "uint96[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCoreUniversity", - "name": "_core", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "isJurorStaked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "jurors", - "outputs": [ - { - "internalType": "uint256", - "name": "stakedPnk", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lockedPnk", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "lockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_randomNumber", - "type": "uint256" - } - ], - "name": "notifyRandomNumber", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "penalizeStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "postDrawHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "setJurorInactive", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_alreadyTransferred", - "type": "bool" - } - ], - "name": "setStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "enum StakingResult", - "name": "stakingResult", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "setTransientJuror", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "unlockStake", - "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" - } - ], - "transactionHash": "0x204b96d9a80952f3d7f84a74ce0fe11b7a03ce93187949d2da7e793d56552c61", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x5CAD621D69E0535422aCFaCC0017bC32beC7A486", - "transactionIndex": 1, - "gasUsed": "1471948", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000004000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa593072d9d6d0d0c6ee98e672a112e47e0501bc4d4bca56a6a66060d7427021a", - "transactionHash": "0x204b96d9a80952f3d7f84a74ce0fe11b7a03ce93187949d2da7e793d56552c61", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 96308555, - "transactionHash": "0x204b96d9a80952f3d7f84a74ce0fe11b7a03ce93187949d2da7e793d56552c61", - "address": "0x5CAD621D69E0535422aCFaCC0017bC32beC7A486", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 0, - "blockHash": "0xa593072d9d6d0d0c6ee98e672a112e47e0501bc4d4bca56a6a66060d7427021a" - } - ], - "blockNumber": 96308555, - "cumulativeGasUsed": "1471948", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum ISortitionModule.Phase\",\"name\":\"_phase\",\"type\":\"uint8\"}],\"name\":\"NewPhase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_unlock\",\"type\":\"bool\"}],\"name\":\"StakeLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"StakeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCoreUniversity\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"createDisputeHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createTree\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputesWithoutJurors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"getJurorBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stakedInCourt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbCourts\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"getJurorCourtIDs\",\"outputs\":[{\"internalType\":\"uint96[]\",\"name\":\"\",\"type\":\"uint96[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCoreUniversity\",\"name\":\"_core\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"isJurorStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"jurors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stakedPnk\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lockedPnk\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"}],\"name\":\"lockStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_randomNumber\",\"type\":\"uint256\"}],\"name\":\"notifyRandomNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"}],\"name\":\"penalizeStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"postDrawHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setJurorInactive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alreadyTransferred\",\"type\":\"bool\"}],\"name\":\"setStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pnkDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pnkWithdrawal\",\"type\":\"uint256\"},{\"internalType\":\"enum StakingResult\",\"name\":\"stakingResult\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"setTransientJuror\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"}],\"name\":\"unlockStake\",\"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\"}],\"devdoc\":{\"details\":\"An adapted version of the SortitionModule contract for educational purposes.\",\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor, initializing the implementation to reduce attack surface.\"},\"draw(bytes32,uint256,uint256)\":{\"details\":\"Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0.\",\"returns\":{\"drawnAddress\":\"The drawn address. `O(k * log_k(n))` where `k` is the maximum number of children per node in the tree, and `n` is the maximum number of nodes ever appended.\"}},\"getJurorBalance(address,uint96)\":{\"details\":\"Gets the stake of a juror in a court. Warning: `O(n)` complexity where `n` is the number of courts the juror has staked in but acceptable for this educational implementation.\",\"params\":{\"_courtID\":\"The ID of the court.\",\"_juror\":\"The address of the juror.\"},\"returns\":{\"nbCourts\":\"The number of courts the juror has staked in.\",\"stakedInCourt\":\"The amount of tokens staked by the juror in the court.\",\"totalLocked\":\"The total amount of tokens locked by the juror in the court.\",\"totalStaked\":\"The total amount of tokens staked by the juror in the court.\"}},\"getJurorCourtIDs(address)\":{\"details\":\"Gets the court identifiers where a specific `_juror` has staked.\",\"params\":{\"_juror\":\"The address of the juror.\"}},\"initialize(address,address)\":{\"details\":\"Initializer (constructor equivalent for upgradable contracts).\",\"params\":{\"_core\":\"The KlerosCore.\"}},\"notifyRandomNumber(uint256)\":{\"details\":\"Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase().\",\"params\":{\"_randomNumber\":\"Random number returned by RNG contract.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setJurorInactive(address)\":{\"details\":\"Unstakes the inactive juror from all courts. `O(n * (p * log_k(j)) )` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\",\"params\":{\"_account\":\"The juror to unstake.\"}},\"setStake(address,uint96,uint256,bool)\":{\"details\":\"Sets the specified juror's stake in a court. `O(n + p * log_k(j))` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\",\"params\":{\"_account\":\"The address of the juror.\",\"_alreadyTransferred\":\"True if the tokens were already transferred from juror. Only relevant for delayed stakes.\",\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake.\"},\"returns\":{\"pnkDeposit\":\"The amount of PNK to be deposited.\",\"pnkWithdrawal\":\"The amount of PNK to be withdrawn.\",\"stakingResult\":\"The result of the staking operation.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}}},\"title\":\"SortitionModuleUniversity\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}],\"InvalidImplementation(address)\":[{\"notice\":\"The `implementation` is not UUPS-compliant\"}]},\"events\":{\"Upgraded(address)\":{\"notice\":\"Emitted when the `implementation` has been successfully upgraded.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/university/SortitionModuleUniversity.sol\":\"SortitionModuleUniversity\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0xe841a4fe8ec109ce17dde4457bf1583c8b499109b05887c53a49a3207fc6e80b\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xa4dc6b958197adead238de4246cd04e7389c3dc1b9f968acd10985f8fc5b74cf\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xb9590d05f9df08dd0ed027b2eb40c7b1885b7574a121b1b0b7da0920429bb4d5\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake,\\n bool _alreadyTransferred\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(address _account, uint256 _relativeAmount) external;\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n}\\n\",\"keccak256\":\"0x18a4ff126bb51e7b5b0e3fbff7cf0dbbcfff7195ad79307e69cdbc9226e63502\",\"license\":\"MIT\"},\"src/arbitration/university/ISortitionModuleUniversity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport {ISortitionModule} from \\\"../interfaces/ISortitionModule.sol\\\";\\n\\ninterface ISortitionModuleUniversity is ISortitionModule {\\n function setTransientJuror(address _juror) external;\\n}\\n\",\"keccak256\":\"0x57fee0787ae90af01c57a7d2850f8e4ade1ca72163a388341cac017bfdbf163a\",\"license\":\"MIT\"},\"src/arbitration/university/KlerosCoreUniversity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"../interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModuleUniversity} from \\\"./ISortitionModuleUniversity.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../../libraries/SafeERC20.sol\\\";\\nimport \\\"../../libraries/Constants.sol\\\";\\nimport {UUPSProxiable} from \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport {Initializable} from \\\"../../proxy/Initializable.sol\\\";\\n\\n/// @title KlerosCoreUniversity\\n/// Core arbitrator contract for educational purposes.\\ncontract KlerosCoreUniversity is IArbitratorV2, UUPSProxiable, Initializable {\\n using SafeERC20 for IERC20;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public instructor; // The instructor who is allowed to choose the jurors.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModuleUniversity public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint256 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByInstructor() {\\n if (instructor != msg.sender) revert InstructorOnly();\\n _;\\n }\\n\\n modifier onlyByGovernorOrInstructor() {\\n if (msg.sender != governor && msg.sender != instructor) revert GovernorOrInstructorOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _instructor The address of the instructor.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n function initialize(\\n address _governor,\\n address _instructor,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n ISortitionModuleUniversity _sortitionModuleAddress\\n ) external reinitializer(1) {\\n governor = _governor;\\n instructor = _instructor;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n emit CourtCreated(\\n 1,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n new uint256[](0)\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /* @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `instructor` storage variable.\\n /// @param _instructor The new value for the `instructor` storage variable.\\n function changeInstructor(address _instructor) external onlyByGovernorOrInstructor {\\n instructor = _instructor;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModuleUniversity _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n court.supportedDisputeKits[_supportedDisputeKits[i]] = true;\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n courtID,\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external {\\n _setStake(msg.sender, _courtID, _newStake, false, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// @param _alreadyTransferred Whether the PNKs have already been transferred to the contract.\\n function setStakeBySortitionModule(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake,\\n bool _alreadyTransferred\\n ) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, _alreadyTransferred, OnError.Return);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = (court.minStake * court.alpha) / ALPHA_DIVISOR;\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws one juror for the dispute until the number votes paid for is reached.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _juror The address of the juror to draw.\\n function draw(uint256 _disputeID, address _juror) external onlyByGovernorOrInstructor {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n if (round.drawnJurors.length >= round.nbVotes) revert AllJurorsDrawn();\\n\\n sortitionModule.setTransientJuror(_juror);\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n uint256 iteration = round.drawIterations + 1;\\n address drawnAddress = disputeKit.draw(_disputeID, iteration);\\n if (drawnAddress == address(0)) {\\n revert NoJurorDrawn();\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n round.drawIterations = iteration;\\n }\\n sortitionModule.setTransientJuror(address(0));\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = (court.minStake * court.alpha) / ALPHA_DIVISOR;\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n _params.pnkPenaltiesInRound += penalty;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n sortitionModule.penalizeStake(account, penalty);\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(penalty),\\n 0,\\n round.feeToken\\n );\\n\\n if (!disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n // The juror is inactive, unstake them.\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(governor).send(round.totalFeesForJurors);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(governor, round.totalFeesForJurors);\\n }\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = (round.pnkAtStakePerJuror * degreeOfCoherence) / ALPHA_DIVISOR;\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Give back the locked PNKs in case the juror fully unstaked earlier.\\n if (!sortitionModule.isJurorStaked(account)) {\\n pinakion.safeTransfer(account, pnkLocked);\\n }\\n\\n // Transfer the rewards\\n uint256 pnkReward = ((_params.pnkPenaltiesInRound / _params.coherentCount) * degreeOfCoherence) / ALPHA_DIVISOR;\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = ((round.totalFeesForJurors / _params.coherentCount) * degreeOfCoherence) / ALPHA_DIVISOR;\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(account).send(feeReward);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(account, feeReward);\\n }\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(governor).send(leftoverFeeReward);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(governor, leftoverFeeReward);\\n }\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) public view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _alreadyTransferred Whether the PNKs were already transferred to/from the staking contract.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake,\\n bool _alreadyTransferred,\\n OnError _onError\\n ) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID > courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.setStake(\\n _account,\\n _courtID,\\n _newStake,\\n _alreadyTransferred\\n );\\n if (stakingResult != StakingResult.Successful) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibeInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error InstructorOnly();\\n error GovernorOrInstructorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error DepthLevelMax();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error ArraysLengthMismatch();\\n error StakingInTooManyCourts();\\n error StakingNotPossibeInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error AllJurorsDrawn();\\n error NoJurorDrawn();\\n}\\n\",\"keccak256\":\"0xd636c2294d15110a20dcf97d67f2989e14233cd1de353032807ad44a8e828e49\",\"license\":\"MIT\"},\"src/arbitration/university/SortitionModuleUniversity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/**\\n * @custom:authors: [@epiqueras, @unknownunknown1, @jaybuidl, @shotaronowhere]\\n * @custom:reviewers: []\\n * @custom:auditors: []\\n * @custom:bounties: []\\n * @custom:deployments: []\\n */\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./KlerosCoreUniversity.sol\\\";\\nimport \\\"./ISortitionModuleUniversity.sol\\\";\\nimport \\\"../interfaces/IDisputeKit.sol\\\";\\nimport \\\"../../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\n/// @title SortitionModuleUniversity\\n/// @dev An adapted version of the SortitionModule contract for educational purposes.\\ncontract SortitionModuleUniversity is ISortitionModuleUniversity, UUPSProxiable, Initializable {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct Juror {\\n mapping(uint96 => uint256) stakesByCourtID; // The stakes of the juror in particular courts.\\n uint96[] courtIDs; // The IDs of courts where the juror's stake path ends. A stake path is a path from the general court to a court the juror directly staked in using `_setStake`.\\n uint256 stakedPnk; // The juror's total amount of tokens staked in subcourts. Reflects actual pnk balance.\\n uint256 lockedPnk; // The juror's total amount of tokens locked in disputes. Can reflect actual pnk balance when stakedPnk are fully withdrawn.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor of the contract.\\n KlerosCoreUniversity public core; // The core arbitrator contract.\\n uint256 public disputesWithoutJurors; // The number of disputes that have not finished drawing jurors.\\n mapping(address account => Juror) public jurors; // The jurors.\\n address private transientJuror; // The juror address used between calls within the same transaction.\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event StakeSet(address indexed _address, uint256 _courtID, uint256 _amount);\\n event StakeLocked(address indexed _address, uint256 _relativeAmount, bool _unlock);\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(governor) == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _core The KlerosCore.\\n function initialize(address _governor, KlerosCoreUniversity _core) external reinitializer(1) {\\n governor = _governor;\\n core = _core;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function setTransientJuror(address _juror) external override onlyByCore {\\n transientJuror = _juror;\\n }\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external {\\n // NOP\\n }\\n\\n function createDisputeHook(uint256 /*_disputeID*/, uint256 /*_roundID*/) external override onlyByCore {\\n disputesWithoutJurors++;\\n }\\n\\n function postDrawHook(uint256 /*_disputeID*/, uint256 /*_roundID*/) external override onlyByCore {\\n disputesWithoutJurors--;\\n }\\n\\n /// @dev Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase().\\n /// @param _randomNumber Random number returned by RNG contract.\\n function notifyRandomNumber(uint256 _randomNumber) public override {}\\n\\n /// @dev Sets the specified juror's stake in a court.\\n /// `O(n + p * log_k(j))` where\\n /// `n` is the number of courts the juror has staked in,\\n /// `p` is the depth of the court tree,\\n /// `k` is the minimum number of children per node of one of these courts' sortition sum tree,\\n /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\\n /// @param _account The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// @param _alreadyTransferred True if the tokens were already transferred from juror. Only relevant for delayed stakes.\\n /// @return pnkDeposit The amount of PNK to be deposited.\\n /// @return pnkWithdrawal The amount of PNK to be withdrawn.\\n /// @return stakingResult The result of the staking operation.\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake,\\n bool _alreadyTransferred\\n ) external override onlyByCore returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) {\\n Juror storage juror = jurors[_account];\\n uint256 currentStake = _stakeOf(_account, _courtID);\\n\\n uint256 nbCourts = juror.courtIDs.length;\\n if (_newStake == 0 && (nbCourts >= MAX_STAKE_PATHS || currentStake == 0)) {\\n return (0, 0, StakingResult.CannotStakeInMoreCourts); // Prevent staking beyond MAX_STAKE_PATHS but unstaking is always allowed.\\n }\\n\\n if (_newStake >= currentStake) {\\n if (!_alreadyTransferred) {\\n pnkDeposit = _increaseStake(juror, _courtID, _newStake, currentStake);\\n }\\n } else {\\n pnkWithdrawal += _decreaseStake(juror, _courtID, _newStake, currentStake);\\n }\\n\\n bool finished = false;\\n uint96 currentCourtID = _courtID;\\n while (!finished) {\\n // Tokens are also implicitly staked in parent courts through sortition module to increase the chance of being drawn.\\n juror.stakesByCourtID[currentCourtID] += _newStake;\\n juror.stakesByCourtID[currentCourtID] -= currentStake;\\n if (currentCourtID == GENERAL_COURT) {\\n finished = true;\\n } else {\\n (currentCourtID, , , , , , ) = core.courts(currentCourtID);\\n }\\n }\\n emit StakeSet(_account, _courtID, _newStake);\\n return (pnkDeposit, pnkWithdrawal, StakingResult.Successful);\\n }\\n\\n function _increaseStake(\\n Juror storage juror,\\n uint96 _courtID,\\n uint256 _newStake,\\n uint256 _currentStake\\n ) internal returns (uint256 transferredAmount) {\\n // Stake increase\\n // When stakedPnk becomes lower than lockedPnk count the locked tokens in when transferring tokens from juror.\\n // (E.g. stakedPnk = 0, lockedPnk = 150) which can happen if the juror unstaked fully while having some tokens locked.\\n uint256 previouslyLocked = (juror.lockedPnk >= juror.stakedPnk) ? juror.lockedPnk - juror.stakedPnk : 0; // underflow guard\\n transferredAmount = (_newStake >= _currentStake + previouslyLocked) // underflow guard\\n ? _newStake - _currentStake - previouslyLocked\\n : 0;\\n if (_currentStake == 0) {\\n juror.courtIDs.push(_courtID);\\n }\\n // stakedPnk can become async with _currentStake (e.g. after penalty).\\n juror.stakedPnk = (juror.stakedPnk >= _currentStake) ? juror.stakedPnk - _currentStake + _newStake : _newStake;\\n }\\n\\n function _decreaseStake(\\n Juror storage juror,\\n uint96 _courtID,\\n uint256 _newStake,\\n uint256 _currentStake\\n ) internal returns (uint256 transferredAmount) {\\n // Stakes can be partially delayed only when stake is increased.\\n // Stake decrease: make sure locked tokens always stay in the contract. They can only be released during Execution.\\n if (juror.stakedPnk >= _currentStake - _newStake + juror.lockedPnk) {\\n // We have enough pnk staked to afford withdrawal while keeping locked tokens.\\n transferredAmount = _currentStake - _newStake;\\n } else if (juror.stakedPnk >= juror.lockedPnk) {\\n // Can't afford withdrawing the current stake fully. Take whatever is available while keeping locked tokens.\\n transferredAmount = juror.stakedPnk - juror.lockedPnk;\\n }\\n if (_newStake == 0) {\\n for (uint256 i = juror.courtIDs.length; i > 0; i--) {\\n if (juror.courtIDs[i - 1] == _courtID) {\\n juror.courtIDs[i - 1] = juror.courtIDs[juror.courtIDs.length - 1];\\n juror.courtIDs.pop();\\n break;\\n }\\n }\\n }\\n // stakedPnk can become async with _currentStake (e.g. after penalty).\\n juror.stakedPnk = (juror.stakedPnk >= _currentStake) ? juror.stakedPnk - _currentStake + _newStake : _newStake;\\n }\\n\\n function lockStake(address _account, uint256 _relativeAmount) external override onlyByCore {\\n jurors[_account].lockedPnk += _relativeAmount;\\n emit StakeLocked(_account, _relativeAmount, false);\\n }\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external override onlyByCore {\\n jurors[_account].lockedPnk -= _relativeAmount;\\n emit StakeLocked(_account, _relativeAmount, true);\\n }\\n\\n function penalizeStake(address _account, uint256 _relativeAmount) external override onlyByCore {\\n Juror storage juror = jurors[_account];\\n if (juror.stakedPnk >= _relativeAmount) {\\n juror.stakedPnk -= _relativeAmount;\\n } else {\\n juror.stakedPnk = 0; // stakedPnk might become lower after manual unstaking, but lockedPnk will always cover the difference.\\n }\\n }\\n\\n /// @dev Unstakes the inactive juror from all courts.\\n /// `O(n * (p * log_k(j)) )` where\\n /// `n` is the number of courts the juror has staked in,\\n /// `p` is the depth of the court tree,\\n /// `k` is the minimum number of children per node of one of these courts' sortition sum tree,\\n /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\\n /// @param _account The juror to unstake.\\n function setJurorInactive(address _account) external override onlyByCore {\\n uint96[] memory courtIDs = getJurorCourtIDs(_account);\\n for (uint256 j = courtIDs.length; j > 0; j--) {\\n core.setStakeBySortitionModule(_account, courtIDs[j - 1], 0, false);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Draw an ID from a tree using a number.\\n /// Note that this function reverts if the sum of all values in the tree is 0.\\n /// @return drawnAddress The drawn address.\\n /// `O(k * log_k(n))` where\\n /// `k` is the maximum number of children per node in the tree,\\n /// and `n` is the maximum number of nodes ever appended.\\n function draw(bytes32, uint256, uint256) public view override returns (address drawnAddress) {\\n drawnAddress = transientJuror;\\n }\\n\\n /// @dev Gets the stake of a juror in a court.\\n /// Warning: `O(n)` complexity where `n` is the number of courts the juror has staked in\\n /// but acceptable for this educational implementation.\\n /// @param _juror The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @return totalStaked The total amount of tokens staked by the juror in the court.\\n /// @return totalLocked The total amount of tokens locked by the juror in the court.\\n /// @return stakedInCourt The amount of tokens staked by the juror in the court.\\n /// @return nbCourts The number of courts the juror has staked in.\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n )\\n external\\n view\\n override\\n returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts)\\n {\\n Juror storage juror = jurors[_juror];\\n totalStaked = juror.stakedPnk;\\n totalLocked = juror.lockedPnk;\\n nbCourts = juror.courtIDs.length;\\n for (uint256 i = 0; i < nbCourts; i++) {\\n if (juror.courtIDs[i] == _courtID) {\\n stakedInCourt = juror.stakesByCourtID[_courtID];\\n break;\\n }\\n }\\n }\\n\\n /// @dev Gets the court identifiers where a specific `_juror` has staked.\\n /// @param _juror The address of the juror.\\n function getJurorCourtIDs(address _juror) public view override returns (uint96[] memory) {\\n return jurors[_juror].courtIDs;\\n }\\n\\n function isJurorStaked(address _juror) external view override returns (bool) {\\n return jurors[_juror].stakedPnk > 0;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Gets the stake of a juror in a court.\\n /// Warning: `O(n)` complexity where `n` is the number of courts the juror has staked in\\n /// but acceptable for this educational implementation.\\n /// @param _juror The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @return stakedInCourt The amount of tokens staked by the juror in the court.\\n function _stakeOf(address _juror, uint96 _courtID) internal view returns (uint256 stakedInCourt) {\\n Juror storage juror = jurors[_juror];\\n for (uint256 i = 0; i < juror.courtIDs.length; i++) {\\n if (juror.courtIDs[i] == _courtID) {\\n stakedInCourt = juror.stakesByCourtID[_courtID];\\n break;\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x505563930b74c834195c7ae32792ee2b15e6478d404a9ff612133ad23080026b\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked\\n}\\n\",\"keccak256\":\"0x486016fb74cc91439c2ec918e97a79190ab4eed223987d516986fff8eaeecfbf\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x3e39adb9cdd9f86b0defc8f6e1223533d86f82c804e186193f729c32c10161b1\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x560ea64115636ecd6b3596248817125551c038ce1648019fde3cbe02d9759a30\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxiable\\n * @author Simon Malatrait \\n * @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n * The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n *\\n * IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n * This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSProxiable` with a custom implementation of upgrades.\\n *\\n * The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\n */\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /**\\n * Emitted when the `implementation` has been successfully upgraded.\\n * @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n */\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /**\\n * @dev The call is from an unauthorized context.\\n */\\n error UUPSUnauthorizedCallContext();\\n\\n /**\\n * @dev The storage `slot` is unsupported as a UUID.\\n */\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Storage variable of the proxiable contract address.\\n * It is used to check whether or not the current call is from the proxy.\\n */\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n * @dev Called by {upgradeToAndCall}.\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Upgrade mechanism including access control and UUPS-compliance.\\n * @param newImplementation Address of the new implementation contract.\\n * @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n *\\n * @dev Reverts if the execution is not performed via delegatecall or the execution\\n * context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n /* Check that the execution is being performed through a delegatecall call and that the execution context is\\n a proxy contract with an implementation (as defined in ERC1967) pointing to self. */\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the if statement.\\n */\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5956855046cdda7aa45f44e379ef45323af7266c44c817d1266d8b32d52b0e22\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161183f6100fc60003960008181610637015281816106600152610858015261183f6000f3fe60806040526004361061012a5760003560e01c80635d2d7846116100ab578063d09f392d1161006f578063d09f392d1461036c578063d1c1df481461038c578063dca5f6b0146103cc578063f1a5310414610418578063f216de4c14610438578063f2f4eb261461045857600080fd5b80635d2d7846146102925780636624192f146102b2578063965af6c7146102fd578063a5861b901461031d578063b5d69e991461034c57600080fd5b8063485cc955116100f2578063485cc955146101ef5780634c70a0d61461020f5780634f1ef2861461023d57806352d1902d14610250578063543f8a361461026557600080fd5b8063034327441461012f5780630c340a241461015857806321e1625e1461019057806321ea9b3f146101b2578063477a655c146101d0575b600080fd5b34801561013b57600080fd5b5061014560025481565b6040519081526020015b60405180910390f35b34801561016457600080fd5b50600054610178906001600160a01b031681565b6040516001600160a01b03909116815260200161014f565b34801561019c57600080fd5b506101b06101ab36600461130b565b610478565b005b3480156101be57600080fd5b506101b06101cd366004611337565b50565b3480156101dc57600080fd5b506101b06101eb3660046113f3565b5050565b3480156101fb57600080fd5b506101b061020a36600461143a565b610524565b34801561021b57600080fd5b5061017861022a366004611473565b50506004546001600160a01b0316919050565b6101b061024b36600461149f565b610623565b34801561025c57600080fd5b5061014561084b565b34801561027157600080fd5b506102856102803660046114d9565b6108a9565b60405161014f91906114fd565b34801561029e57600080fd5b506101b06102ad36600461154a565b61094a565b3480156102be57600080fd5b506102ed6102cd3660046114d9565b6001600160a01b0316600090815260036020526040902060020154151590565b604051901515815260200161014f565b34801561030957600080fd5b506101b061031836600461130b565b61098d565b34801561032957600080fd5b5061033d61033836600461158f565b610a28565b60405161014f939291906115e2565b34801561035857600080fd5b506101b06103673660046114d9565b610c4f565b34801561037857600080fd5b506101b061038736600461154a565b610d55565b34801561039857600080fd5b506103ac6103a736600461161c565b610d8f565b60408051948552602085019390935291830152606082015260800161014f565b3480156103d857600080fd5b506104036103e73660046114d9565b6003602081905260009182526040909120600281015491015482565b6040805192835260208301919091520161014f565b34801561042457600080fd5b506101b06104333660046114d9565b610e45565b34801561044457600080fd5b506101b061045336600461130b565b610e91565b34801561046457600080fd5b50600154610178906001600160a01b031681565b6001546001600160a01b031633146104ab5760405162461bcd60e51b81526004016104a29061164a565b60405180910390fd5b6001600160a01b038216600090815260036020819052604082200180548392906104d69084906116a4565b909155505060408051828152600060208201526001600160a01b038416917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b091015b60405180910390a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff168061056e5750805467ffffffffffffffff808416911610155b1561058b5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff8316908117600160401b178255600080546001600160a01b038781166001600160a01b0319928316179092556001805492871692909116919091179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b61062c82610f09565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806106aa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661069e6000805160206117ea8339815191525490565b6001600160a01b031614155b156106c85760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610722575060408051601f3d908101601f1916820190925261071f918101906116bd565b60015b61074a57604051630c76093760e01b81526001600160a01b03831660048201526024016104a2565b6000805160206117ea833981519152811461077b57604051632a87526960e21b8152600481018290526024016104a2565b6000805160206117ea8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115610846576000836001600160a01b0316836040516107e291906116d6565b600060405180830381855af49150503d806000811461081d576040519150601f19603f3d011682016040523d82523d6000602084013e610822565b606091505b5050905080610844576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108965760405163703e46dd60e11b815260040160405180910390fd5b506000805160206117ea83398151915290565b6001600160a01b03811660009081526003602090815260409182902060010180548351818402810184019094528084526060939283018282801561093e57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116108fb5790505b50505050509050919050565b6001546001600160a01b031633146109745760405162461bcd60e51b81526004016104a29061164a565b6002805490600061098483611705565b91905055505050565b6001546001600160a01b031633146109b75760405162461bcd60e51b81526004016104a29061164a565b6001600160a01b038216600090815260036020819052604082200180548392906109e290849061171c565b909155505060408051828152600160208201526001600160a01b038416917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b09101610518565b600154600090819081906001600160a01b03163314610a595760405162461bcd60e51b81526004016104a29061164a565b6001600160a01b038716600090815260036020526040812090610a7c8989610f6e565b600183015490915087158015610a9b5750600481101580610a9b575081155b15610ab3576000806003955095509550505050610c45565b818810610ad35786610ace57610acb838a8a8561100f565b95505b610aec565b610adf838a8a856110f3565b610ae990866116a4565b94505b6000895b81610bee576001600160601b038116600090815260208690526040812080548c9290610b1d9084906116a4565b90915550506001600160601b03811660009081526020869052604081208054869290610b4a90849061171c565b90915550506000196001600160601b03821601610b6a5760019150610af0565b600154604051630fad06e960e11b81526001600160601b03831660048201526001600160a01b0390911690631f5a0dd29060240160e060405180830381865afa158015610bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdf919061172f565b50949550610af0945050505050565b604080516001600160601b038d168152602081018c90526001600160a01b038e16917f4732545d01e38980276a17e6d394f01577ba63f2fea5eba41af0757d9c060c5c910160405180910390a25060009450505050505b9450945094915050565b6001546001600160a01b03163314610c795760405162461bcd60e51b81526004016104a29061164a565b6000610c84826108a9565b80519091505b801561084657600180546001600160a01b03169063fbb519e79085908590610cb2908661171c565b81518110610cc257610cc26117a4565b60209081029190910101516040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526001600160601b031660248201526000604482018190526064820152608401600060405180830381600087803b158015610d2a57600080fd5b505af1158015610d3e573d6000803e3d6000fd5b505050508080610d4d90611705565b915050610c8a565b6001546001600160a01b03163314610d7f5760405162461bcd60e51b81526004016104a29061164a565b60028054906000610984836117ba565b6001600160a01b038216600090815260036020819052604082206002810154918101546001820154929390929091825b82811015610e3a57866001600160601b0316826001018281548110610de657610de66117a4565b600091825260209091206002820401546001909116600c026101000a90046001600160601b031603610e32576001600160601b0387166000908152602083905260409020549350610e3a565b600101610dbf565b505092959194509250565b6001546001600160a01b03163314610e6f5760405162461bcd60e51b81526004016104a29061164a565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610ebb5760405162461bcd60e51b81526004016104a29061164a565b6001600160a01b038216600090815260036020526040902060028101548211610efd5781816002016000828254610ef2919061171c565b909155506108469050565b60006002820155505050565b6000546001600160a01b031633146101cd5760405162461bcd60e51b815260206004820152602260248201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6044820152613c9760f11b60648201526084016104a2565b6001600160a01b0382166000908152600360205260408120815b600182015481101561100757836001600160601b0316826001018281548110610fb357610fb36117a4565b600091825260209091206002820401546001909116600c026101000a90046001600160601b031603610fff576001600160601b0384166000908152602083905260409020549250611007565b600101610f88565b505092915050565b60008085600201548660030154101561102957600061103d565b8560020154866003015461103d919061171c565b905061104981846116a4565b84101561105757600061106c565b80611062848661171c565b61106c919061171c565b9150826000036110b557600186810180548083018255600091825260209091206002820401805491909216600c026101000a6001600160601b0381810219909216918816021790555b82866002015410156110c757836110e2565b838387600201546110d8919061171c565b6110e291906116a4565b866002018190555050949350505050565b6003840154600090611105848461171c565b61110f91906116a4565b85600201541061112a57611123838361171c565b9050611150565b8460030154856002015410611150578460030154856002015461114d919061171c565b90505b826000036112b95760018501545b80156112b757846001600160601b03168660010160018361117f919061171c565b8154811061118f5761118f6117a4565b600091825260209091206002820401546001909116600c026101000a90046001600160601b0316036112a5576001808701805490916111cd9161171c565b815481106111dd576111dd6117a4565b600091825260209091206002820401546001918216600c026101000a90046001600160601b03169087810190611213908461171c565b81548110611223576112236117a4565b9060005260206000209060029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b031602179055508560010180548061126f5761126f6117d3565b60008281526020902060026000199092019182040180546001600160601b03600c60018516026101000a021916905590556112b7565b806112af81611705565b91505061115e565b505b81856002015410156112cb57826112e6565b828286600201546112dc919061171c565b6112e691906116a4565b8560020181905550949350505050565b6001600160a01b03811681146101cd57600080fd5b6000806040838503121561131e57600080fd5b8235611329816112f6565b946020939093013593505050565b60006020828403121561134957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261137757600080fd5b813567ffffffffffffffff8082111561139257611392611350565b604051601f8301601f19908116603f011681019082821181831017156113ba576113ba611350565b816040528381528660208588010111156113d357600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561140657600080fd5b82359150602083013567ffffffffffffffff81111561142457600080fd5b61143085828601611366565b9150509250929050565b6000806040838503121561144d57600080fd5b8235611458816112f6565b91506020830135611468816112f6565b809150509250929050565b60008060006060848603121561148857600080fd5b505081359360208301359350604090920135919050565b600080604083850312156114b257600080fd5b82356114bd816112f6565b9150602083013567ffffffffffffffff81111561142457600080fd5b6000602082840312156114eb57600080fd5b81356114f6816112f6565b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561153e5783516001600160601b031683529284019291840191600101611519565b50909695505050505050565b6000806040838503121561155d57600080fd5b50508035926020909101359150565b6001600160601b03811681146101cd57600080fd5b80151581146101cd57600080fd5b600080600080608085870312156115a557600080fd5b84356115b0816112f6565b935060208501356115c08161156c565b92506040850135915060608501356115d781611581565b939692955090935050565b83815260208101839052606081016008831061160e57634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b6000806040838503121561162f57600080fd5b823561163a816112f6565b915060208301356114688161156c565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156116b7576116b761168e565b92915050565b6000602082840312156116cf57600080fd5b5051919050565b6000825160005b818110156116f757602081860181015185830152016116dd565b506000920191825250919050565b6000816117145761171461168e565b506000190190565b818103818111156116b7576116b761168e565b600080600080600080600060e0888a03121561174a57600080fd5b87516117558161156c565b602089015190975061176681611581565b8096505060408801519450606088015193506080880151925060a0880151915060c088015161179481611581565b8091505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b6000600182016117cc576117cc61168e565b5060010190565b634e487b7160e01b600052603160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212200166151e57cedd4332854be3f1b542627de717718d9832e670b79904c4b162d864736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061012a5760003560e01c80635d2d7846116100ab578063d09f392d1161006f578063d09f392d1461036c578063d1c1df481461038c578063dca5f6b0146103cc578063f1a5310414610418578063f216de4c14610438578063f2f4eb261461045857600080fd5b80635d2d7846146102925780636624192f146102b2578063965af6c7146102fd578063a5861b901461031d578063b5d69e991461034c57600080fd5b8063485cc955116100f2578063485cc955146101ef5780634c70a0d61461020f5780634f1ef2861461023d57806352d1902d14610250578063543f8a361461026557600080fd5b8063034327441461012f5780630c340a241461015857806321e1625e1461019057806321ea9b3f146101b2578063477a655c146101d0575b600080fd5b34801561013b57600080fd5b5061014560025481565b6040519081526020015b60405180910390f35b34801561016457600080fd5b50600054610178906001600160a01b031681565b6040516001600160a01b03909116815260200161014f565b34801561019c57600080fd5b506101b06101ab36600461130b565b610478565b005b3480156101be57600080fd5b506101b06101cd366004611337565b50565b3480156101dc57600080fd5b506101b06101eb3660046113f3565b5050565b3480156101fb57600080fd5b506101b061020a36600461143a565b610524565b34801561021b57600080fd5b5061017861022a366004611473565b50506004546001600160a01b0316919050565b6101b061024b36600461149f565b610623565b34801561025c57600080fd5b5061014561084b565b34801561027157600080fd5b506102856102803660046114d9565b6108a9565b60405161014f91906114fd565b34801561029e57600080fd5b506101b06102ad36600461154a565b61094a565b3480156102be57600080fd5b506102ed6102cd3660046114d9565b6001600160a01b0316600090815260036020526040902060020154151590565b604051901515815260200161014f565b34801561030957600080fd5b506101b061031836600461130b565b61098d565b34801561032957600080fd5b5061033d61033836600461158f565b610a28565b60405161014f939291906115e2565b34801561035857600080fd5b506101b06103673660046114d9565b610c4f565b34801561037857600080fd5b506101b061038736600461154a565b610d55565b34801561039857600080fd5b506103ac6103a736600461161c565b610d8f565b60408051948552602085019390935291830152606082015260800161014f565b3480156103d857600080fd5b506104036103e73660046114d9565b6003602081905260009182526040909120600281015491015482565b6040805192835260208301919091520161014f565b34801561042457600080fd5b506101b06104333660046114d9565b610e45565b34801561044457600080fd5b506101b061045336600461130b565b610e91565b34801561046457600080fd5b50600154610178906001600160a01b031681565b6001546001600160a01b031633146104ab5760405162461bcd60e51b81526004016104a29061164a565b60405180910390fd5b6001600160a01b038216600090815260036020819052604082200180548392906104d69084906116a4565b909155505060408051828152600060208201526001600160a01b038416917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b091015b60405180910390a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff168061056e5750805467ffffffffffffffff808416911610155b1561058b5760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff8316908117600160401b178255600080546001600160a01b038781166001600160a01b0319928316179092556001805492871692909116919091179055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b61062c82610f09565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806106aa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661069e6000805160206117ea8339815191525490565b6001600160a01b031614155b156106c85760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610722575060408051601f3d908101601f1916820190925261071f918101906116bd565b60015b61074a57604051630c76093760e01b81526001600160a01b03831660048201526024016104a2565b6000805160206117ea833981519152811461077b57604051632a87526960e21b8152600481018290526024016104a2565b6000805160206117ea8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115610846576000836001600160a01b0316836040516107e291906116d6565b600060405180830381855af49150503d806000811461081d576040519150601f19603f3d011682016040523d82523d6000602084013e610822565b606091505b5050905080610844576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108965760405163703e46dd60e11b815260040160405180910390fd5b506000805160206117ea83398151915290565b6001600160a01b03811660009081526003602090815260409182902060010180548351818402810184019094528084526060939283018282801561093e57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116108fb5790505b50505050509050919050565b6001546001600160a01b031633146109745760405162461bcd60e51b81526004016104a29061164a565b6002805490600061098483611705565b91905055505050565b6001546001600160a01b031633146109b75760405162461bcd60e51b81526004016104a29061164a565b6001600160a01b038216600090815260036020819052604082200180548392906109e290849061171c565b909155505060408051828152600160208201526001600160a01b038416917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b09101610518565b600154600090819081906001600160a01b03163314610a595760405162461bcd60e51b81526004016104a29061164a565b6001600160a01b038716600090815260036020526040812090610a7c8989610f6e565b600183015490915087158015610a9b5750600481101580610a9b575081155b15610ab3576000806003955095509550505050610c45565b818810610ad35786610ace57610acb838a8a8561100f565b95505b610aec565b610adf838a8a856110f3565b610ae990866116a4565b94505b6000895b81610bee576001600160601b038116600090815260208690526040812080548c9290610b1d9084906116a4565b90915550506001600160601b03811660009081526020869052604081208054869290610b4a90849061171c565b90915550506000196001600160601b03821601610b6a5760019150610af0565b600154604051630fad06e960e11b81526001600160601b03831660048201526001600160a01b0390911690631f5a0dd29060240160e060405180830381865afa158015610bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdf919061172f565b50949550610af0945050505050565b604080516001600160601b038d168152602081018c90526001600160a01b038e16917f4732545d01e38980276a17e6d394f01577ba63f2fea5eba41af0757d9c060c5c910160405180910390a25060009450505050505b9450945094915050565b6001546001600160a01b03163314610c795760405162461bcd60e51b81526004016104a29061164a565b6000610c84826108a9565b80519091505b801561084657600180546001600160a01b03169063fbb519e79085908590610cb2908661171c565b81518110610cc257610cc26117a4565b60209081029190910101516040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526001600160601b031660248201526000604482018190526064820152608401600060405180830381600087803b158015610d2a57600080fd5b505af1158015610d3e573d6000803e3d6000fd5b505050508080610d4d90611705565b915050610c8a565b6001546001600160a01b03163314610d7f5760405162461bcd60e51b81526004016104a29061164a565b60028054906000610984836117ba565b6001600160a01b038216600090815260036020819052604082206002810154918101546001820154929390929091825b82811015610e3a57866001600160601b0316826001018281548110610de657610de66117a4565b600091825260209091206002820401546001909116600c026101000a90046001600160601b031603610e32576001600160601b0387166000908152602083905260409020549350610e3a565b600101610dbf565b505092959194509250565b6001546001600160a01b03163314610e6f5760405162461bcd60e51b81526004016104a29061164a565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610ebb5760405162461bcd60e51b81526004016104a29061164a565b6001600160a01b038216600090815260036020526040902060028101548211610efd5781816002016000828254610ef2919061171c565b909155506108469050565b60006002820155505050565b6000546001600160a01b031633146101cd5760405162461bcd60e51b815260206004820152602260248201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6044820152613c9760f11b60648201526084016104a2565b6001600160a01b0382166000908152600360205260408120815b600182015481101561100757836001600160601b0316826001018281548110610fb357610fb36117a4565b600091825260209091206002820401546001909116600c026101000a90046001600160601b031603610fff576001600160601b0384166000908152602083905260409020549250611007565b600101610f88565b505092915050565b60008085600201548660030154101561102957600061103d565b8560020154866003015461103d919061171c565b905061104981846116a4565b84101561105757600061106c565b80611062848661171c565b61106c919061171c565b9150826000036110b557600186810180548083018255600091825260209091206002820401805491909216600c026101000a6001600160601b0381810219909216918816021790555b82866002015410156110c757836110e2565b838387600201546110d8919061171c565b6110e291906116a4565b866002018190555050949350505050565b6003840154600090611105848461171c565b61110f91906116a4565b85600201541061112a57611123838361171c565b9050611150565b8460030154856002015410611150578460030154856002015461114d919061171c565b90505b826000036112b95760018501545b80156112b757846001600160601b03168660010160018361117f919061171c565b8154811061118f5761118f6117a4565b600091825260209091206002820401546001909116600c026101000a90046001600160601b0316036112a5576001808701805490916111cd9161171c565b815481106111dd576111dd6117a4565b600091825260209091206002820401546001918216600c026101000a90046001600160601b03169087810190611213908461171c565b81548110611223576112236117a4565b9060005260206000209060029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b031602179055508560010180548061126f5761126f6117d3565b60008281526020902060026000199092019182040180546001600160601b03600c60018516026101000a021916905590556112b7565b806112af81611705565b91505061115e565b505b81856002015410156112cb57826112e6565b828286600201546112dc919061171c565b6112e691906116a4565b8560020181905550949350505050565b6001600160a01b03811681146101cd57600080fd5b6000806040838503121561131e57600080fd5b8235611329816112f6565b946020939093013593505050565b60006020828403121561134957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261137757600080fd5b813567ffffffffffffffff8082111561139257611392611350565b604051601f8301601f19908116603f011681019082821181831017156113ba576113ba611350565b816040528381528660208588010111156113d357600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561140657600080fd5b82359150602083013567ffffffffffffffff81111561142457600080fd5b61143085828601611366565b9150509250929050565b6000806040838503121561144d57600080fd5b8235611458816112f6565b91506020830135611468816112f6565b809150509250929050565b60008060006060848603121561148857600080fd5b505081359360208301359350604090920135919050565b600080604083850312156114b257600080fd5b82356114bd816112f6565b9150602083013567ffffffffffffffff81111561142457600080fd5b6000602082840312156114eb57600080fd5b81356114f6816112f6565b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561153e5783516001600160601b031683529284019291840191600101611519565b50909695505050505050565b6000806040838503121561155d57600080fd5b50508035926020909101359150565b6001600160601b03811681146101cd57600080fd5b80151581146101cd57600080fd5b600080600080608085870312156115a557600080fd5b84356115b0816112f6565b935060208501356115c08161156c565b92506040850135915060608501356115d781611581565b939692955090935050565b83815260208101839052606081016008831061160e57634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b6000806040838503121561162f57600080fd5b823561163a816112f6565b915060208301356114688161156c565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156116b7576116b761168e565b92915050565b6000602082840312156116cf57600080fd5b5051919050565b6000825160005b818110156116f757602081860181015185830152016116dd565b506000920191825250919050565b6000816117145761171461168e565b506000190190565b818103818111156116b7576116b761168e565b600080600080600080600060e0888a03121561174a57600080fd5b87516117558161156c565b602089015190975061176681611581565b8096505060408801519450606088015193506080880151925060a0880151915060c088015161179481611581565b8091505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b6000600182016117cc576117cc61168e565b5060010190565b634e487b7160e01b600052603160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212200166151e57cedd4332854be3f1b542627de717718d9832e670b79904c4b162d864736f6c63430008180033", - "devdoc": { - "details": "An adapted version of the SortitionModule contract for educational purposes.", - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "Upgraded(address)": { - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "constructor": { - "details": "Constructor, initializing the implementation to reduce attack surface." - }, - "draw(bytes32,uint256,uint256)": { - "details": "Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0.", - "returns": { - "drawnAddress": "The drawn address. `O(k * log_k(n))` where `k` is the maximum number of children per node in the tree, and `n` is the maximum number of nodes ever appended." - } - }, - "getJurorBalance(address,uint96)": { - "details": "Gets the stake of a juror in a court. Warning: `O(n)` complexity where `n` is the number of courts the juror has staked in but acceptable for this educational implementation.", - "params": { - "_courtID": "The ID of the court.", - "_juror": "The address of the juror." - }, - "returns": { - "nbCourts": "The number of courts the juror has staked in.", - "stakedInCourt": "The amount of tokens staked by the juror in the court.", - "totalLocked": "The total amount of tokens locked by the juror in the court.", - "totalStaked": "The total amount of tokens staked by the juror in the court." - } - }, - "getJurorCourtIDs(address)": { - "details": "Gets the court identifiers where a specific `_juror` has staked.", - "params": { - "_juror": "The address of the juror." - } - }, - "initialize(address,address)": { - "details": "Initializer (constructor equivalent for upgradable contracts).", - "params": { - "_core": "The KlerosCore." - } - }, - "notifyRandomNumber(uint256)": { - "details": "Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase().", - "params": { - "_randomNumber": "Random number returned by RNG contract." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setJurorInactive(address)": { - "details": "Unstakes the inactive juror from all courts. `O(n * (p * log_k(j)) )` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.", - "params": { - "_account": "The juror to unstake." - } - }, - "setStake(address,uint96,uint256,bool)": { - "details": "Sets the specified juror's stake in a court. `O(n + p * log_k(j))` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.", - "params": { - "_account": "The address of the juror.", - "_alreadyTransferred": "True if the tokens were already transferred from juror. Only relevant for delayed stakes.", - "_courtID": "The ID of the court.", - "_newStake": "The new stake." - }, - "returns": { - "pnkDeposit": "The amount of PNK to be deposited.", - "pnkWithdrawal": "The amount of PNK to be withdrawn.", - "stakingResult": "The result of the staking operation." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - } - }, - "title": "SortitionModuleUniversity", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ], - "InvalidImplementation(address)": [ - { - "notice": "The `implementation` is not UUPS-compliant" - } - ] - }, - "events": { - "Upgraded(address)": { - "notice": "Emitted when the `implementation` has been successfully upgraded." - } - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 26933, - "contract": "src/arbitration/university/SortitionModuleUniversity.sol:SortitionModuleUniversity", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 26936, - "contract": "src/arbitration/university/SortitionModuleUniversity.sol:SortitionModuleUniversity", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCoreUniversity)26904" - }, - { - "astId": 26938, - "contract": "src/arbitration/university/SortitionModuleUniversity.sol:SortitionModuleUniversity", - "label": "disputesWithoutJurors", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 26943, - "contract": "src/arbitration/university/SortitionModuleUniversity.sol:SortitionModuleUniversity", - "label": "jurors", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_address,t_struct(Juror)26931_storage)" - }, - { - "astId": 26945, - "contract": "src/arbitration/university/SortitionModuleUniversity.sol:SortitionModuleUniversity", - "label": "transientJuror", - "offset": 0, - "slot": "4", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint96)dyn_storage": { - "base": "t_uint96", - "encoding": "dynamic_array", - "label": "uint96[]", - "numberOfBytes": "32" - }, - "t_contract(KlerosCoreUniversity)26904": { - "encoding": "inplace", - "label": "contract KlerosCoreUniversity", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_struct(Juror)26931_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct SortitionModuleUniversity.Juror)", - "numberOfBytes": "32", - "value": "t_struct(Juror)26931_storage" - }, - "t_mapping(t_uint96,t_uint256)": { - "encoding": "mapping", - "key": "t_uint96", - "label": "mapping(uint96 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Juror)26931_storage": { - "encoding": "inplace", - "label": "struct SortitionModuleUniversity.Juror", - "members": [ - { - "astId": 26923, - "contract": "src/arbitration/university/SortitionModuleUniversity.sol:SortitionModuleUniversity", - "label": "stakesByCourtID", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_uint96,t_uint256)" - }, - { - "astId": 26926, - "contract": "src/arbitration/university/SortitionModuleUniversity.sol:SortitionModuleUniversity", - "label": "courtIDs", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint96)dyn_storage" - }, - { - "astId": 26928, - "contract": "src/arbitration/university/SortitionModuleUniversity.sol:SortitionModuleUniversity", - "label": "stakedPnk", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 26930, - "contract": "src/arbitration/university/SortitionModuleUniversity.sol:SortitionModuleUniversity", - "label": "lockedPnk", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity_Proxy.json deleted file mode 100644 index e098e68d0..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0xb26dc1c9ca9c3ed561a1d9c3feaad474af38bc90ea240f927053e5e5868d6a7e", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79", - "transactionIndex": 1, - "gasUsed": "210047", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010800000020000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x6a08d6d6cf180ae6bf3126f86fbedfd17212528b22a7a9403addd2dd6b1109c3", - "transactionHash": "0xb26dc1c9ca9c3ed561a1d9c3feaad474af38bc90ea240f927053e5e5868d6a7e", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 96308572, - "transactionHash": "0xb26dc1c9ca9c3ed561a1d9c3feaad474af38bc90ea240f927053e5e5868d6a7e", - "address": "0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x6a08d6d6cf180ae6bf3126f86fbedfd17212528b22a7a9403addd2dd6b1109c3" - } - ], - "blockNumber": 96308572, - "cumulativeGasUsed": "210047", - "status": 1, - "byzantium": true - }, - "args": [ - "0x5CAD621D69E0535422aCFaCC0017bC32beC7A486", - "0x485cc955000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000005ab37f38778bc175852fa353056591d91c744ce6" - ], - "numDeployments": 1, - "solcInputHash": "a5602534c00c2f67ca4b6a1cab8c717e", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"SortitionModuleUniversityProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0x4393c05bbfda204b9992e1e546142a0fbf4c92a1c4061f5985463d02a71b84d4\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.24;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x7aa5f14ce351299722ac1a1afca9e65e1c795f32ea3e9702b0d5faaf7ca822a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030238038061030283398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b031682604051610077919061021f565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050505061023b565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b038082111561019857600080fd5b818501915085601f8301126101ac57600080fd5b8151818111156101be576101be610117565b604051601f8201601f19908116603f011681019083821181831017156101e6576101e6610117565b816040528281528860208487010111156101ff57600080fd5b61021083602083016020880161012d565b80955050505050509250929050565b6000825161023181846020870161012d565b9190910192915050565b60b9806102496000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220cbf6c95b71e3c03306025a1af7f6aa4f021b4a8c8f5a8c68988b35c4442edb4964736f6c63430008180033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220cbf6c95b71e3c03306025a1af7f6aa4f021b4a8c8f5a8c68988b35c4442edb4964736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/SortitionModule_Implementation.json b/contracts/deployments/arbitrumSepoliaDevnet/SortitionModule_Implementation.json deleted file mode 100644 index 1789a8838..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/SortitionModule_Implementation.json +++ /dev/null @@ -1,1679 +0,0 @@ -{ - "address": "0x8a26445989c944C58503275ad87Ab4d7b17d4F1e", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNK", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNKWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ISortitionModule.Phase", - "name": "_phase", - "type": "uint8" - } - ], - "name": "NewPhase", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeDelayed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_unlock", - "type": "bool" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amountAllCourts", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - } - ], - "name": "changeMaxDrawingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - } - ], - "name": "changeMinStakingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "changeRandomNumberGenerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDisputeHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createTree", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeReadIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeWriteIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "delayedStakes", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "alreadyTransferred", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputesWithoutJurors", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "executeDelayedStakes", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getJurorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalLocked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakedInCourt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbCourts", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorCourtIDs", - "outputs": [ - { - "internalType": "uint96[]", - "name": "", - "type": "uint96[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorLeftoverPNK", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - }, - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize4", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "isJurorStaked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "jurors", - "outputs": [ - { - "internalType": "uint256", - "name": "stakedPnk", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lockedPnk", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPhaseChange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "jurorAccount", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtId", - "type": "uint96" - } - ], - "name": "latestDelayedStakeIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "lockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxDrawingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minStakingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_randomNumber", - "type": "uint256" - } - ], - "name": "notifyRandomNumber", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "passPhase", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "penalizeStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availablePenalty", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "phase", - "outputs": [ - { - "internalType": "enum ISortitionModule.Phase", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "postDrawHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumberRequestBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rng", - "outputs": [ - { - "internalType": "contract RNG", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rngLookahead", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "setJurorInactive", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_ID", - "type": "bytes32" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "unlockStake", - "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": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "validateStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "enum StakingResult", - "name": "stakingResult", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "withdrawLeftoverPNK", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x9460ccf2d0ea245293561dd3e4edb127a2a436440d19f6a526ecc1cad9452e5f", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x8a26445989c944C58503275ad87Ab4d7b17d4F1e", - "transactionIndex": 2, - "gasUsed": "2691150", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000800000000000000000000000000000000000000000000000000", - "blockHash": "0x217c52c28049c97c6be63414abd08a57188b03cdc2e7a16e4d0c744733e59705", - "transactionHash": "0x9460ccf2d0ea245293561dd3e4edb127a2a436440d19f6a526ecc1cad9452e5f", - "logs": [ - { - "transactionIndex": 2, - "blockNumber": 175309486, - "transactionHash": "0x9460ccf2d0ea245293561dd3e4edb127a2a436440d19f6a526ecc1cad9452e5f", - "address": "0x8a26445989c944C58503275ad87Ab4d7b17d4F1e", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 2, - "blockHash": "0x217c52c28049c97c6be63414abd08a57188b03cdc2e7a16e4d0c744733e59705" - } - ], - "blockNumber": 175309486, - "cumulativeGasUsed": "2824989", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "f4735958fa6999318407ac2ba3cb7822", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LeftoverPNK\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LeftoverPNKWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum ISortitionModule.Phase\",\"name\":\"_phase\",\"type\":\"uint8\"}],\"name\":\"NewPhase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"StakeDelayed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_unlock\",\"type\":\"bool\"}],\"name\":\"StakeLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_courtID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amountAllCourts\",\"type\":\"uint256\"}],\"name\":\"StakeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDrawingTime\",\"type\":\"uint256\"}],\"name\":\"changeMaxDrawingTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minStakingTime\",\"type\":\"uint256\"}],\"name\":\"changeMinStakingTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract RNG\",\"name\":\"_rng\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rngLookahead\",\"type\":\"uint256\"}],\"name\":\"changeRandomNumberGenerator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"core\",\"outputs\":[{\"internalType\":\"contract KlerosCore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"createDisputeHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createTree\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedStakeReadIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedStakeWriteIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedStakes\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"alreadyTransferred\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputesWithoutJurors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_coreDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"drawnAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_iterations\",\"type\":\"uint256\"}],\"name\":\"executeDelayedStakes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"getJurorBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalLocked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stakedInCourt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nbCourts\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"getJurorCourtIDs\",\"outputs\":[{\"internalType\":\"uint96[]\",\"name\":\"\",\"type\":\"uint96[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"getJurorLeftoverPNK\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract KlerosCore\",\"name\":\"_core\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minStakingTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxDrawingTime\",\"type\":\"uint256\"},{\"internalType\":\"contract RNG\",\"name\":\"_rng\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rngLookahead\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize4\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"}],\"name\":\"isJurorStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"jurors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stakedPnk\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lockedPnk\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPhaseChange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"jurorAccount\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"courtId\",\"type\":\"uint96\"}],\"name\":\"latestDelayedStakeIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"}],\"name\":\"lockStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDrawingTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minStakingTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_randomNumber\",\"type\":\"uint256\"}],\"name\":\"notifyRandomNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"passPhase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"}],\"name\":\"penalizeStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pnkBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availablePenalty\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"phase\",\"outputs\":[{\"internalType\":\"enum ISortitionModule.Phase\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"postDrawHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomNumberRequestBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rng\",\"outputs\":[{\"internalType\":\"contract RNG\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rngLookahead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setJurorInactive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_pnkDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pnkWithdrawal\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"setStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_ID\",\"type\":\"bytes32\"}],\"name\":\"stakeOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_juror\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"}],\"name\":\"stakeOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relativeAmount\",\"type\":\"uint256\"}],\"name\":\"unlockStake\",\"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\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_newStake\",\"type\":\"uint256\"}],\"name\":\"validateStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pnkDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pnkWithdrawal\",\"type\":\"uint256\"},{\"internalType\":\"enum StakingResult\",\"name\":\"stakingResult\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"withdrawLeftoverPNK\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A factory of trees that keeps track of staked values for sortition.\",\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"InvalidImplementation(address)\":[{\"details\":\"The `implementation` is not UUPS-compliant\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"LeftoverPNK(address,uint256)\":{\"details\":\"Emitted when leftover PNK is available.\",\"params\":{\"_account\":\"The account of the juror.\",\"_amount\":\"The amount of PNK available.\"}},\"LeftoverPNKWithdrawn(address,uint256)\":{\"details\":\"Emitted when leftover PNK is withdrawn.\",\"params\":{\"_account\":\"The account of the juror withdrawing PNK.\",\"_amount\":\"The amount of PNK withdrawn.\"}},\"StakeDelayed(address,uint96,uint256)\":{\"params\":{\"_address\":\"The address of the juror.\",\"_amount\":\"The amount of tokens staked in the court.\",\"_courtID\":\"The ID of the court.\"}},\"StakeLocked(address,uint256,bool)\":{\"params\":{\"_address\":\"The address of the juror.\",\"_relativeAmount\":\"The amount of tokens locked.\",\"_unlock\":\"Whether the stake is locked or unlocked.\"}},\"StakeSet(address,uint256,uint256,uint256)\":{\"params\":{\"_address\":\"The address of the juror.\",\"_amount\":\"The amount of tokens staked in the court.\",\"_amountAllCourts\":\"The amount of tokens staked in all courts.\",\"_courtID\":\"The ID of the court.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the `implementation` has been successfully upgraded.\",\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor of the contract.\",\"params\":{\"_governor\":\"The new governor.\"}},\"changeMaxDrawingTime(uint256)\":{\"details\":\"Changes the `maxDrawingTime` storage variable.\",\"params\":{\"_maxDrawingTime\":\"The new value for the `maxDrawingTime` storage variable.\"}},\"changeMinStakingTime(uint256)\":{\"details\":\"Changes the `minStakingTime` storage variable.\",\"params\":{\"_minStakingTime\":\"The new value for the `minStakingTime` storage variable.\"}},\"changeRandomNumberGenerator(address,uint256)\":{\"details\":\"Changes the `_rng` and `_rngLookahead` storage variables.\",\"params\":{\"_rng\":\"The new value for the `RNGenerator` storage variable.\",\"_rngLookahead\":\"The new value for the `rngLookahead` storage variable.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"createTree(bytes32,bytes)\":{\"details\":\"Create a sortition sum tree at the specified key.\",\"params\":{\"_extraData\":\"Extra data that contains the number of children each node in the tree should have.\",\"_key\":\"The key of the new tree.\"}},\"draw(bytes32,uint256,uint256)\":{\"details\":\"Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0.\",\"params\":{\"_coreDisputeID\":\"Index of the dispute in Kleros Core.\",\"_key\":\"The key of the tree.\",\"_nonce\":\"Nonce to hash with random number.\"},\"returns\":{\"drawnAddress\":\"The drawn address. `O(k * log_k(n))` where `k` is the maximum number of children per node in the tree, and `n` is the maximum number of nodes ever appended.\"}},\"executeDelayedStakes(uint256)\":{\"details\":\"Executes the next delayed stakes.\",\"params\":{\"_iterations\":\"The number of delayed stakes to execute.\"}},\"getJurorCourtIDs(address)\":{\"details\":\"Gets the court identifiers where a specific `_juror` has staked.\",\"params\":{\"_juror\":\"The address of the juror.\"}},\"initialize(address,address,uint256,uint256,address,uint256)\":{\"details\":\"Initializer (constructor equivalent for upgradable contracts).\",\"params\":{\"_core\":\"The KlerosCore.\",\"_governor\":\"The governor.\",\"_maxDrawingTime\":\"Time after which the drawing phase can be switched\",\"_minStakingTime\":\"Minimal time to stake\",\"_rng\":\"The random number generator.\",\"_rngLookahead\":\"Lookahead value for rng.\"}},\"notifyRandomNumber(uint256)\":{\"details\":\"Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase().\",\"params\":{\"_randomNumber\":\"Random number returned by RNG contract.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"setJurorInactive(address)\":{\"details\":\"Unstakes the inactive juror from all courts. `O(n * (p * log_k(j)) )` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\",\"params\":{\"_account\":\"The juror to unstake.\"}},\"setStake(address,uint96,uint256,uint256,uint256)\":{\"details\":\"Update the state of the stakes, called by KC at the end of setStake flow. `O(n + p * log_k(j))` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\",\"params\":{\"_account\":\"The address of the juror.\",\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake.\",\"_pnkDeposit\":\"The amount of PNK to be deposited.\",\"_pnkWithdrawal\":\"The amount of PNK to be withdrawn.\"}},\"stakeOf(address,uint96)\":{\"details\":\"Get the stake of a juror in a court.\",\"params\":{\"_courtID\":\"The ID of the court.\",\"_juror\":\"The address of the juror.\"},\"returns\":{\"_0\":\"value The stake of the juror in the court.\"}},\"stakeOf(bytes32,bytes32)\":{\"details\":\"Get the stake of a juror in a court.\",\"params\":{\"_ID\":\"The stake path ID, corresponding to a juror.\",\"_key\":\"The key of the tree, corresponding to a court.\"},\"returns\":{\"_0\":\"The stake of the juror in the court.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"validateStake(address,uint96,uint256)\":{\"details\":\"Validate the specified juror's new stake for a court. Note: no state changes should be made when returning stakingResult != Successful, otherwise delayed stakes might break invariants.\",\"params\":{\"_account\":\"The address of the juror.\",\"_courtID\":\"The ID of the court.\",\"_newStake\":\"The new stake.\"},\"returns\":{\"pnkDeposit\":\"The amount of PNK to be deposited.\",\"pnkWithdrawal\":\"The amount of PNK to be withdrawn.\",\"stakingResult\":\"The result of the staking operation.\"}},\"withdrawLeftoverPNK(address)\":{\"details\":\"Gives back the locked PNKs in case the juror fully unstaked earlier. Note that since locked and staked PNK are async it is possible for the juror to have positive staked PNK balance while having 0 stake in courts and 0 locked tokens (eg. when the juror fully unstaked during dispute and later got his tokens unlocked). In this case the juror can use this function to withdraw the leftover tokens. Also note that if the juror has some leftover PNK while not fully unstaked he'll have to manually unstake from all courts to trigger this function.\",\"params\":{\"_account\":\"The juror whose PNK to withdraw.\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns the version of the implementation.\",\"return\":\"Version string.\",\"returns\":{\"_0\":\"Version string.\"}}},\"title\":\"SortitionModule\",\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}]},\"events\":{\"StakeDelayed(address,uint96,uint256)\":{\"notice\":\"Emitted when a juror's stake is delayed.\"},\"StakeLocked(address,uint256,bool)\":{\"notice\":\"Emitted when a juror's stake is locked.\"},\"StakeSet(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when a juror stakes in a court.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/SortitionModule.sol\":\"SortitionModule\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity >=0.4.16;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\"},\"src/arbitration/KlerosCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCoreBase, IDisputeKit, ISortitionModule, IERC20} from \\\"./KlerosCoreBase.sol\\\";\\n\\n/// @title KlerosCore\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\ncontract KlerosCore is KlerosCoreBase {\\n string public constant override version = \\\"0.9.4\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor's address.\\n /// @param _guardian The guardian's address.\\n /// @param _pinakion The address of the token contract.\\n /// @param _jurorProsecutionModule The address of the juror prosecution module.\\n /// @param _disputeKit The address of the default dispute kit.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively).\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n /// @param _sortitionExtraData The extra data for sortition module.\\n /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors.\\n function initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress\\n ) external reinitializer(1) {\\n __KlerosCoreBase_initialize(\\n _governor,\\n _guardian,\\n _pinakion,\\n _jurorProsecutionModule,\\n _disputeKit,\\n _hiddenVotes,\\n _courtParameters,\\n _timesPerPeriod,\\n _sortitionExtraData,\\n _sortitionModuleAddress\\n );\\n }\\n\\n function initialize5() external reinitializer(5) {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0xd09847c220b2727d8e68ef98b0b7ae6e9f678637626b4265abd4ef4fca9411b9\",\"license\":\"MIT\"},\"src/arbitration/KlerosCoreBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"./interfaces/IArbitratorV2.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {SafeERC20, IERC20} from \\\"../libraries/SafeERC20.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title KlerosCoreBase\\n/// Core arbitrator contract for Kleros v2.\\n/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts.\\nabstract contract KlerosCoreBase is IArbitratorV2, Initializable, UUPSProxiable {\\n using SafeERC20 for IERC20;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n struct Court {\\n uint96 parent; // The parent court.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256[] children; // List of child courts.\\n uint256 minStake; // Minimum PNKs needed to stake in the court.\\n uint256 alpha; // Basis point of PNKs that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any.\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit.\\n bool disabled; // True if the court is disabled. Unused for now, will be implemented later.\\n }\\n\\n struct Dispute {\\n uint96 courtID; // The ID of the court the dispute is in.\\n IArbitrableV2 arbitrated; // The arbitrable contract.\\n Period period; // The current period of the dispute.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n Round[] rounds;\\n }\\n\\n struct Round {\\n uint256 disputeKitID; // Index of the dispute kit in the array.\\n uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round.\\n uint256 totalFeesForJurors; // The total juror fees paid in this round.\\n uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length.\\n uint256 repartitions; // A counter of reward repartitions made in this round.\\n uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round.\\n address[] drawnJurors; // Addresses of the jurors that were drawn in this round.\\n uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round.\\n uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round.\\n IERC20 feeToken; // The token used for paying fees in this round.\\n uint256 drawIterations; // The number of iterations passed drawing the jurors for this round.\\n }\\n\\n // Workaround \\\"stack too deep\\\" errors\\n struct ExecuteParams {\\n uint256 disputeID; // The ID of the dispute to execute.\\n uint256 round; // The round to execute.\\n uint256 coherentCount; // The number of coherent votes in the round.\\n uint256 numberOfVotesInRound; // The number of votes in the round.\\n uint256 feePerJurorInRound; // The fee per juror in the round.\\n uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round.\\n uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round.\\n uint256 repartition; // The index of the repartition to execute.\\n }\\n\\n struct CurrencyRate {\\n bool feePaymentAccepted;\\n uint64 rateInEth;\\n uint8 rateDecimals;\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 private constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n\\n address public governor; // The governor of the contract.\\n address public guardian; // The guardian able to pause asset withdrawals.\\n IERC20 public pinakion; // The Pinakion token contract.\\n address public jurorProsecutionModule; // The module for juror's prosecution.\\n ISortitionModule public sortitionModule; // Sortition module for drawing.\\n Court[] public courts; // The courts.\\n IDisputeKit[] public disputeKits; // Array of dispute kits.\\n Dispute[] public disputes; // The disputes.\\n mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH.\\n bool public paused; // Whether asset withdrawals are paused.\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID);\\n event CourtCreated(\\n uint96 indexed _courtID,\\n uint96 indexed _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod,\\n uint256[] _supportedDisputeKits\\n );\\n event CourtModified(\\n uint96 indexed _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] _timesPerPeriod\\n );\\n event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress);\\n event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable);\\n event CourtJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint96 indexed _fromCourtID,\\n uint96 _toCourtID\\n );\\n event DisputeKitJump(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 indexed _fromDisputeKitID,\\n uint256 _toDisputeKitID\\n );\\n event TokenAndETHShift(\\n address indexed _account,\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _degreeOfCoherency,\\n int256 _pnkAmount,\\n int256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event LeftoverRewardSent(\\n uint256 indexed _disputeID,\\n uint256 indexed _roundID,\\n uint256 _pnkAmount,\\n uint256 _feeAmount,\\n IERC20 _feeToken\\n );\\n event Paused();\\n event Unpaused();\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n if (governor != msg.sender) revert GovernorOnly();\\n _;\\n }\\n\\n modifier onlyByGuardianOrGovernor() {\\n if (guardian != msg.sender && governor != msg.sender) revert GuardianOrGovernorOnly();\\n _;\\n }\\n\\n modifier whenPaused() {\\n if (!paused) revert WhenPausedOnly();\\n _;\\n }\\n\\n modifier whenNotPaused() {\\n if (paused) revert WhenNotPausedOnly();\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __KlerosCoreBase_initialize(\\n address _governor,\\n address _guardian,\\n IERC20 _pinakion,\\n address _jurorProsecutionModule,\\n IDisputeKit _disputeKit,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n ISortitionModule _sortitionModuleAddress\\n ) internal onlyInitializing {\\n governor = _governor;\\n guardian = _guardian;\\n pinakion = _pinakion;\\n jurorProsecutionModule = _jurorProsecutionModule;\\n sortitionModule = _sortitionModuleAddress;\\n\\n // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported.\\n disputeKits.push();\\n\\n // DISPUTE_KIT_CLASSIC\\n disputeKits.push(_disputeKit);\\n\\n emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit);\\n\\n // FORKING_COURT\\n // TODO: Fill the properties for the Forking court, emit CourtCreated.\\n courts.push();\\n sortitionModule.createTree(bytes32(uint256(FORKING_COURT)), _sortitionExtraData);\\n\\n // GENERAL_COURT\\n Court storage court = courts.push();\\n court.parent = FORKING_COURT;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _courtParameters[0];\\n court.alpha = _courtParameters[1];\\n court.feeForJuror = _courtParameters[2];\\n court.jurorsForCourtJump = _courtParameters[3];\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(uint256(GENERAL_COURT)), _sortitionExtraData);\\n\\n uint256[] memory supportedDisputeKits = new uint256[](1);\\n supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC;\\n emit CourtCreated(\\n GENERAL_COURT,\\n court.parent,\\n _hiddenVotes,\\n _courtParameters[0],\\n _courtParameters[1],\\n _courtParameters[2],\\n _courtParameters[3],\\n _timesPerPeriod,\\n supportedDisputeKits\\n );\\n _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Pause staking and reward execution. Can only be done by guardian or governor.\\n function pause() external onlyByGuardianOrGovernor whenNotPaused {\\n paused = true;\\n emit Paused();\\n }\\n\\n /// @dev Unpause staking and reward execution. Can only be done by governor.\\n function unpause() external onlyByGovernor whenPaused {\\n paused = false;\\n emit Unpaused();\\n }\\n\\n /// @dev Allows the governor to call anything on behalf of the contract.\\n /// @param _destination The destination of the call.\\n /// @param _amount The value sent with the call.\\n /// @param _data The data sent with the call.\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n if (!success) revert UnsuccessfulCall();\\n }\\n\\n /// @dev Changes the `governor` storage variable.\\n /// @param _governor The new value for the `governor` storage variable.\\n function changeGovernor(address payable _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `guardian` storage variable.\\n /// @param _guardian The new value for the `guardian` storage variable.\\n function changeGuardian(address _guardian) external onlyByGovernor {\\n guardian = _guardian;\\n }\\n\\n /// @dev Changes the `pinakion` storage variable.\\n /// @param _pinakion The new value for the `pinakion` storage variable.\\n function changePinakion(IERC20 _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /// @dev Changes the `jurorProsecutionModule` storage variable.\\n /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable.\\n function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByGovernor {\\n jurorProsecutionModule = _jurorProsecutionModule;\\n }\\n\\n /// @dev Changes the `_sortitionModule` storage variable.\\n /// Note that the new module should be initialized for all courts.\\n /// @param _sortitionModule The new value for the `sortitionModule` storage variable.\\n function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByGovernor {\\n sortitionModule = _sortitionModule;\\n }\\n\\n /// @dev Add a new supported dispute kit module to the court.\\n /// @param _disputeKitAddress The address of the dispute kit contract.\\n function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByGovernor {\\n uint256 disputeKitID = disputeKits.length;\\n disputeKits.push(_disputeKitAddress);\\n emit DisputeKitCreated(disputeKitID, _disputeKitAddress);\\n }\\n\\n /// @dev Creates a court under a specified parent court.\\n /// @param _parent The `parent` property value of the court.\\n /// @param _hiddenVotes The `hiddenVotes` property value of the court.\\n /// @param _minStake The `minStake` property value of the court.\\n /// @param _alpha The `alpha` property value of the court.\\n /// @param _feeForJuror The `feeForJuror` property value of the court.\\n /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court.\\n /// @param _timesPerPeriod The `timesPerPeriod` property value of the court.\\n /// @param _sortitionExtraData Extra data for sortition module.\\n /// @param _supportedDisputeKits Indexes of dispute kits that this court will support.\\n function createCourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n bytes memory _sortitionExtraData,\\n uint256[] memory _supportedDisputeKits\\n ) external onlyByGovernor {\\n if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt();\\n if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit();\\n if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent();\\n\\n uint256 courtID = courts.length;\\n Court storage court = courts.push();\\n\\n for (uint256 i = 0; i < _supportedDisputeKits.length; i++) {\\n if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true);\\n }\\n // Check that Classic DK support was added.\\n if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic();\\n\\n court.parent = _parent;\\n court.children = new uint256[](0);\\n court.hiddenVotes = _hiddenVotes;\\n court.minStake = _minStake;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n\\n sortitionModule.createTree(bytes32(courtID), _sortitionExtraData);\\n\\n // Update the parent.\\n courts[_parent].children.push(courtID);\\n emit CourtCreated(\\n uint96(courtID),\\n _parent,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod,\\n _supportedDisputeKits\\n );\\n }\\n\\n function changeCourtParameters(\\n uint96 _courtID,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n Court storage court = courts[_courtID];\\n if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n for (uint256 i = 0; i < court.children.length; i++) {\\n if (courts[court.children[i]].minStake < _minStake) {\\n revert MinStakeLowerThanParentCourt();\\n }\\n }\\n court.minStake = _minStake;\\n court.hiddenVotes = _hiddenVotes;\\n court.alpha = _alpha;\\n court.feeForJuror = _feeForJuror;\\n court.jurorsForCourtJump = _jurorsForCourtJump;\\n court.timesPerPeriod = _timesPerPeriod;\\n emit CourtModified(\\n _courtID,\\n _hiddenVotes,\\n _minStake,\\n _alpha,\\n _feeForJuror,\\n _jurorsForCourtJump,\\n _timesPerPeriod\\n );\\n }\\n\\n /// @dev Adds/removes court's support for specified dispute kits.\\n /// @param _courtID The ID of the court.\\n /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed.\\n /// @param _enable Whether add or remove the dispute kits from the court.\\n function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByGovernor {\\n for (uint256 i = 0; i < _disputeKitIDs.length; i++) {\\n if (_enable) {\\n if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) {\\n revert WrongDisputeKitIndex();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], true);\\n } else {\\n // Classic dispute kit must be supported by all courts.\\n if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) {\\n revert CannotDisableClassicDK();\\n }\\n _enableDisputeKit(_courtID, _disputeKitIDs[i], false);\\n }\\n }\\n }\\n\\n /// @dev Changes the supported fee tokens.\\n /// @param _feeToken The fee token.\\n /// @param _accepted Whether the token is supported or not as a method of fee payment.\\n function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByGovernor {\\n currencyRates[_feeToken].feePaymentAccepted = _accepted;\\n emit AcceptedFeeToken(_feeToken, _accepted);\\n }\\n\\n /// @dev Changes the currency rate of a fee token.\\n /// @param _feeToken The fee token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByGovernor {\\n currencyRates[_feeToken].rateInEth = _rateInEth;\\n currencyRates[_feeToken].rateDecimals = _rateDecimals;\\n emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sets the caller's stake in a court.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// Note that the existing delayed stake will be nullified as non-relevant.\\n function setStake(uint96 _courtID, uint256 _newStake) external virtual whenNotPaused {\\n _setStake(msg.sender, _courtID, _newStake, OnError.Revert);\\n }\\n\\n /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors.\\n /// @param _account The account whose stake is being set.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n _setStake(_account, _courtID, _newStake, OnError.Return);\\n }\\n\\n /// @dev Transfers PNK to the juror by SortitionModule.\\n /// @param _account The account of the juror whose PNK to transfer.\\n /// @param _amount The amount to transfer.\\n function transferBySortitionModule(address _account, uint256 _amount) external {\\n if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly();\\n // Note eligibility is checked in SortitionModule.\\n pinakion.safeTransfer(_account, _amount);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) external payable override returns (uint256 disputeID) {\\n if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough();\\n\\n return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external override returns (uint256 disputeID) {\\n if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted();\\n if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough();\\n\\n if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed();\\n return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount);\\n }\\n\\n function _createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) internal virtual returns (uint256 disputeID) {\\n (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt();\\n\\n disputeID = disputes.length;\\n Dispute storage dispute = disputes.push();\\n dispute.courtID = courtID;\\n dispute.arbitrated = IArbitrableV2(msg.sender);\\n dispute.lastPeriodChange = block.timestamp;\\n\\n IDisputeKit disputeKit = disputeKits[disputeKitID];\\n Court storage court = courts[courtID];\\n Round storage round = dispute.rounds.push();\\n\\n // Obtain the feeForJuror in the same currency as the _feeAmount\\n uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY)\\n ? court.feeForJuror\\n : convertEthToTokenAmount(_feeToken, court.feeForJuror);\\n round.nbVotes = _feeAmount / feeForJuror;\\n round.disputeKitID = disputeKitID;\\n round.pnkAtStakePerJuror = (court.minStake * court.alpha) / ALPHA_DIVISOR;\\n round.totalFeesForJurors = _feeAmount;\\n round.feeToken = IERC20(_feeToken);\\n\\n sortitionModule.createDisputeHook(disputeID, 0); // Default round ID.\\n\\n disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes);\\n emit DisputeCreation(disputeID, IArbitrableV2(msg.sender));\\n }\\n\\n /// @dev Passes the period of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n function passPeriod(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n Court storage court = courts[dispute.courtID];\\n\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period == Period.evidence) {\\n if (\\n currentRound == 0 &&\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]\\n ) {\\n revert EvidenceNotPassedAndNotAppeal();\\n }\\n if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing();\\n dispute.period = court.hiddenVotes ? Period.commit : Period.vote;\\n } else if (dispute.period == Period.commit) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID)\\n ) {\\n revert CommitPeriodNotPassed();\\n }\\n dispute.period = Period.vote;\\n } else if (dispute.period == Period.vote) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID)\\n ) {\\n revert VotePeriodNotPassed();\\n }\\n dispute.period = Period.appeal;\\n emit AppealPossible(_disputeID, dispute.arbitrated);\\n } else if (dispute.period == Period.appeal) {\\n if (\\n block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] &&\\n !disputeKits[round.disputeKitID].isAppealFunded(_disputeID)\\n ) {\\n revert AppealPeriodNotPassed();\\n }\\n dispute.period = Period.execution;\\n } else if (dispute.period == Period.execution) {\\n revert DisputePeriodIsFinal();\\n }\\n\\n dispute.lastPeriodChange = block.timestamp;\\n emit NewPeriod(_disputeID, dispute.period);\\n }\\n\\n /// @dev Draws jurors for the dispute. Can be called in parts.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _iterations The number of iterations to run.\\n /// @return nbDrawnJurors The total number of jurors drawn in the round.\\n function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) {\\n Dispute storage dispute = disputes[_disputeID];\\n uint256 currentRound = dispute.rounds.length - 1;\\n Round storage round = dispute.rounds[currentRound];\\n if (dispute.period != Period.evidence) revert NotEvidencePeriod();\\n\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n uint256 startIndex = round.drawIterations; // for gas: less storage reads\\n uint256 i;\\n while (i < _iterations && round.drawnJurors.length < round.nbVotes) {\\n address drawnAddress = disputeKit.draw(_disputeID, startIndex + i++);\\n if (drawnAddress == address(0)) {\\n continue;\\n }\\n sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror);\\n emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length);\\n round.drawnJurors.push(drawnAddress);\\n if (round.drawnJurors.length == round.nbVotes) {\\n sortitionModule.postDrawHook(_disputeID, currentRound);\\n }\\n }\\n round.drawIterations += i;\\n return round.drawnJurors.length;\\n }\\n\\n /// @dev Appeals the ruling of a specified dispute.\\n /// Note: Access restricted to the Dispute Kit for this `disputeID`.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump.\\n /// @param _extraData Extradata for the dispute. Can be required during court jump.\\n function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable {\\n if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough();\\n\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.appeal) revert DisputeNotAppealable();\\n\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly();\\n\\n uint96 newCourtID = dispute.courtID;\\n uint256 newDisputeKitID = round.disputeKitID;\\n\\n // Warning: the extra round must be created before calling disputeKit.createDispute()\\n Round storage extraRound = dispute.rounds.push();\\n\\n if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) {\\n // Jump to parent court.\\n newCourtID = courts[newCourtID].parent;\\n\\n if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) {\\n // Switch to classic dispute kit if parent court doesn't support the current one.\\n newDisputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n\\n if (newCourtID != dispute.courtID) {\\n emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID);\\n }\\n }\\n\\n dispute.courtID = newCourtID;\\n dispute.period = Period.evidence;\\n dispute.lastPeriodChange = block.timestamp;\\n\\n Court storage court = courts[newCourtID];\\n extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds.\\n extraRound.pnkAtStakePerJuror = (court.minStake * court.alpha) / ALPHA_DIVISOR;\\n extraRound.totalFeesForJurors = msg.value;\\n extraRound.disputeKitID = newDisputeKitID;\\n\\n sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1);\\n\\n // Dispute kit was changed, so create a dispute in the new DK contract.\\n if (extraRound.disputeKitID != round.disputeKitID) {\\n emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID);\\n disputeKits[extraRound.disputeKitID].createDispute(\\n _disputeID,\\n _numberOfChoices,\\n _extraData,\\n extraRound.nbVotes\\n );\\n }\\n\\n emit AppealDecision(_disputeID, dispute.arbitrated);\\n emit NewPeriod(_disputeID, Period.evidence);\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts.\\n /// Note: Reward distributions are forbidden during pause.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The appeal round.\\n /// @param _iterations The number of iterations to run.\\n function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused {\\n Round storage round;\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n\\n round = dispute.rounds[_round];\\n } // stack too deep workaround\\n\\n uint256 start = round.repartitions;\\n uint256 end = round.repartitions + _iterations;\\n\\n uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas.\\n uint256 numberOfVotesInRound = round.drawnJurors.length;\\n uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound;\\n uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror;\\n uint256 coherentCount;\\n {\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round.\\n } // stack too deep workaround\\n\\n if (coherentCount == 0) {\\n // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome.\\n if (end > numberOfVotesInRound) end = numberOfVotesInRound;\\n } else {\\n // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees.\\n if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2;\\n }\\n round.repartitions = end;\\n\\n for (uint256 i = start; i < end; i++) {\\n if (i < numberOfVotesInRound) {\\n pnkPenaltiesInRound = _executePenalties(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n } else {\\n _executeRewards(\\n ExecuteParams({\\n disputeID: _disputeID,\\n round: _round,\\n coherentCount: coherentCount,\\n numberOfVotesInRound: numberOfVotesInRound,\\n feePerJurorInRound: feePerJurorInRound,\\n pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound,\\n pnkPenaltiesInRound: pnkPenaltiesInRound,\\n repartition: i\\n })\\n );\\n }\\n }\\n if (round.pnkPenalties != pnkPenaltiesInRound) {\\n round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact\\n }\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n /// @return pnkPenaltiesInRoundCache The updated penalties in round cache.\\n function _executePenalties(ExecuteParams memory _params) internal returns (uint256) {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n // Fully coherent jurors won't be penalized.\\n uint256 penalty = (round.pnkAtStakePerJuror * (ALPHA_DIVISOR - degreeOfCoherence)) / ALPHA_DIVISOR;\\n\\n // Unlock the PNKs affected by the penalty\\n address account = round.drawnJurors[_params.repartition];\\n sortitionModule.unlockStake(account, penalty);\\n\\n // Apply the penalty to the staked PNKs.\\n (uint256 pnkBalance, uint256 availablePenalty) = sortitionModule.penalizeStake(account, penalty);\\n _params.pnkPenaltiesInRound += availablePenalty;\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n -int256(availablePenalty),\\n 0,\\n round.feeToken\\n );\\n // Unstake the juror from all courts if he was inactive or his balance can't cover penalties anymore.\\n if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) {\\n sortitionModule.setJurorInactive(account);\\n }\\n if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) {\\n // No one was coherent, send the rewards to the governor.\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(governor).send(round.totalFeesForJurors);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(governor, round.totalFeesForJurors);\\n }\\n pinakion.safeTransfer(governor, _params.pnkPenaltiesInRound);\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n _params.pnkPenaltiesInRound,\\n round.totalFeesForJurors,\\n round.feeToken\\n );\\n }\\n return _params.pnkPenaltiesInRound;\\n }\\n\\n /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only.\\n /// @param _params The parameters for the execution, see `ExecuteParams`.\\n function _executeRewards(ExecuteParams memory _params) internal {\\n Dispute storage dispute = disputes[_params.disputeID];\\n Round storage round = dispute.rounds[_params.round];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n\\n // [0, 1] value that determines how coherent the juror was in this round, in basis points.\\n uint256 degreeOfCoherence = disputeKit.getDegreeOfCoherence(\\n _params.disputeID,\\n _params.round,\\n _params.repartition % _params.numberOfVotesInRound,\\n _params.feePerJurorInRound,\\n _params.pnkAtStakePerJurorInRound\\n );\\n\\n // Make sure the degree doesn't exceed 1, though it should be ensured by the dispute kit.\\n if (degreeOfCoherence > ALPHA_DIVISOR) {\\n degreeOfCoherence = ALPHA_DIVISOR;\\n }\\n\\n address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];\\n uint256 pnkLocked = (round.pnkAtStakePerJuror * degreeOfCoherence) / ALPHA_DIVISOR;\\n\\n // Release the rest of the PNKs of the juror for this round.\\n sortitionModule.unlockStake(account, pnkLocked);\\n\\n // Transfer the rewards\\n uint256 pnkReward = ((_params.pnkPenaltiesInRound / _params.coherentCount) * degreeOfCoherence) / ALPHA_DIVISOR;\\n round.sumPnkRewardPaid += pnkReward;\\n uint256 feeReward = ((round.totalFeesForJurors / _params.coherentCount) * degreeOfCoherence) / ALPHA_DIVISOR;\\n round.sumFeeRewardPaid += feeReward;\\n pinakion.safeTransfer(account, pnkReward);\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(account).send(feeReward);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(account, feeReward);\\n }\\n emit TokenAndETHShift(\\n account,\\n _params.disputeID,\\n _params.round,\\n degreeOfCoherence,\\n int256(pnkReward),\\n int256(feeReward),\\n round.feeToken\\n );\\n\\n // Transfer any residual rewards to the governor. It may happen due to partial coherence of the jurors.\\n if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) {\\n uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid;\\n uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid;\\n if (leftoverPnkReward != 0 || leftoverFeeReward != 0) {\\n if (leftoverPnkReward != 0) {\\n pinakion.safeTransfer(governor, leftoverPnkReward);\\n }\\n if (leftoverFeeReward != 0) {\\n if (round.feeToken == NATIVE_CURRENCY) {\\n // The dispute fees were paid in ETH\\n payable(governor).send(leftoverFeeReward);\\n } else {\\n // The dispute fees were paid in ERC20\\n round.feeToken.safeTransfer(governor, leftoverFeeReward);\\n }\\n }\\n emit LeftoverRewardSent(\\n _params.disputeID,\\n _params.round,\\n leftoverPnkReward,\\n leftoverFeeReward,\\n round.feeToken\\n );\\n }\\n }\\n }\\n\\n /// @dev Executes a specified dispute's ruling.\\n /// @param _disputeID The ID of the dispute.\\n function executeRuling(uint256 _disputeID) external {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period != Period.execution) revert NotExecutionPeriod();\\n if (dispute.ruled) revert RulingAlreadyExecuted();\\n\\n (uint256 winningChoice, , ) = currentRuling(_disputeID);\\n dispute.ruled = true;\\n emit Ruling(dispute.arbitrated, _disputeID, winningChoice);\\n dispute.arbitrated.rule(_disputeID, winningChoice);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Compute the cost of arbitration denominated in ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData);\\n cost = courts[courtID].feeForJuror * minJurors;\\n }\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) {\\n cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData));\\n }\\n\\n /// @dev Gets the cost of appealing a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return cost The appeal cost.\\n function appealCost(uint256 _disputeID) public view returns (uint256 cost) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n if (round.nbVotes >= court.jurorsForCourtJump) {\\n // Jump to parent court.\\n if (dispute.courtID == GENERAL_COURT) {\\n // TODO: Handle the forking when appealed in General court.\\n cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court.\\n } else {\\n cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n } else {\\n // Stay in current court.\\n cost = court.feeForJuror * ((round.nbVotes * 2) + 1);\\n }\\n }\\n\\n /// @dev Gets the start and the end of a specified dispute's current appeal period.\\n /// @param _disputeID The ID of the dispute.\\n /// @return start The start of the appeal period.\\n /// @return end The end of the appeal period.\\n function appealPeriod(uint256 _disputeID) public view returns (uint256 start, uint256 end) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.period == Period.appeal) {\\n start = dispute.lastPeriodChange;\\n end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)];\\n } else {\\n start = 0;\\n end = 0;\\n }\\n }\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n IDisputeKit disputeKit = disputeKits[round.disputeKitID];\\n (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID);\\n }\\n\\n /// @dev Gets the round info for a specified dispute and round.\\n /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return round The round info.\\n function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) {\\n return disputes[_disputeID].rounds[_round];\\n }\\n\\n /// @dev Gets the PNK at stake per juror for a specified dispute and round.\\n /// @param _disputeID The ID of the dispute.\\n /// @param _round The round to get the info for.\\n /// @return pnkAtStakePerJuror The PNK at stake per juror.\\n function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) {\\n return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror;\\n }\\n\\n /// @dev Gets the number of rounds for a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return The number of rounds.\\n function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) {\\n return disputes[_disputeID].rounds.length;\\n }\\n\\n /// @dev Checks if a given dispute kit is supported by a given court.\\n /// @param _courtID The ID of the court to check the support for.\\n /// @param _disputeKitID The ID of the dispute kit to check the support for.\\n /// @return Whether the dispute kit is supported or not.\\n function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) {\\n return courts[_courtID].supportedDisputeKits[_disputeKitID];\\n }\\n\\n /// @dev Gets the timesPerPeriod array for a given court.\\n /// @param _courtID The ID of the court to get the times from.\\n /// @return timesPerPeriod The timesPerPeriod array for the given court.\\n function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) {\\n timesPerPeriod = courts[_courtID].timesPerPeriod;\\n }\\n\\n // ************************************* //\\n // * Public Views for Dispute Kits * //\\n // ************************************* //\\n\\n /// @dev Gets the number of votes permitted for the specified dispute in the latest round.\\n /// @param _disputeID The ID of the dispute.\\n function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) {\\n Dispute storage dispute = disputes[_disputeID];\\n return dispute.rounds[dispute.rounds.length - 1].nbVotes;\\n }\\n\\n /// @dev Returns true if the dispute kit will be switched to a parent DK.\\n /// @param _disputeID The ID of the dispute.\\n /// @return Whether DK will be switched or not.\\n function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) {\\n Dispute storage dispute = disputes[_disputeID];\\n Round storage round = dispute.rounds[dispute.rounds.length - 1];\\n Court storage court = courts[dispute.courtID];\\n\\n if (round.nbVotes < court.jurorsForCourtJump) {\\n return false;\\n }\\n\\n // Jump if the parent court doesn't support the current DK.\\n return !courts[court.parent].supportedDisputeKits[round.disputeKitID];\\n }\\n\\n function getDisputeKitsLength() external view returns (uint256) {\\n return disputeKits.length;\\n }\\n\\n function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) {\\n return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth;\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Toggles the dispute kit support for a given court.\\n /// @param _courtID The ID of the court to toggle the support for.\\n /// @param _disputeKitID The ID of the dispute kit to toggle the support for.\\n /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled.\\n function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal {\\n courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable;\\n emit DisputeKitEnabled(_courtID, _disputeKitID, _enable);\\n }\\n\\n /// @dev If called only once then set _onError to Revert, otherwise set it to Return\\n /// @param _account The account to set the stake for.\\n /// @param _courtID The ID of the court to set the stake for.\\n /// @param _newStake The new stake.\\n /// @param _onError Whether to revert or return false on error.\\n /// @return Whether the stake was successfully set or not.\\n function _setStake(address _account, uint96 _courtID, uint256 _newStake, OnError _onError) internal returns (bool) {\\n if (_courtID == FORKING_COURT || _courtID >= courts.length) {\\n _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed.\\n return false;\\n }\\n if (_newStake != 0 && _newStake < courts[_courtID].minStake) {\\n _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed.\\n return false;\\n }\\n (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake(\\n _account,\\n _courtID,\\n _newStake\\n );\\n if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) {\\n _stakingFailed(_onError, stakingResult);\\n return false;\\n } else if (stakingResult == StakingResult.Delayed) {\\n return true;\\n }\\n if (pnkDeposit > 0) {\\n if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) {\\n _stakingFailed(_onError, StakingResult.StakingTransferFailed);\\n return false;\\n }\\n }\\n if (pnkWithdrawal > 0) {\\n if (!pinakion.safeTransfer(_account, pnkWithdrawal)) {\\n _stakingFailed(_onError, StakingResult.UnstakingTransferFailed);\\n return false;\\n }\\n }\\n sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake);\\n\\n return true;\\n }\\n\\n /// @dev It may revert depending on the _onError parameter.\\n function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual {\\n if (_onError == OnError.Return) return;\\n if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed();\\n if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed();\\n if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts();\\n if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt();\\n if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake();\\n if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake();\\n }\\n\\n /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array.\\n /// Note that if extradata contains an incorrect value then this value will be switched to default.\\n /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID.\\n /// @return courtID The court ID.\\n /// @return minJurors The minimum number of jurors required.\\n /// @return disputeKitID The ID of the dispute kit.\\n function _extraDataToCourtIDMinJurorsDisputeKit(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) {\\n // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index.\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n disputeKitID := mload(add(_extraData, 0x60))\\n }\\n if (courtID == FORKING_COURT || courtID >= courts.length) {\\n courtID = GENERAL_COURT;\\n }\\n if (minJurors == 0) {\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) {\\n disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used.\\n }\\n } else {\\n courtID = GENERAL_COURT;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n disputeKitID = DISPUTE_KIT_CLASSIC;\\n }\\n }\\n\\n // ************************************* //\\n // * Errors * //\\n // ************************************* //\\n\\n error GovernorOnly();\\n error GuardianOrGovernorOnly();\\n error DisputeKitOnly();\\n error SortitionModuleOnly();\\n error UnsuccessfulCall();\\n error InvalidDisputKitParent();\\n error MinStakeLowerThanParentCourt();\\n error UnsupportedDisputeKit();\\n error InvalidForkingCourtAsParent();\\n error WrongDisputeKitIndex();\\n error CannotDisableClassicDK();\\n error StakingInTooManyCourts();\\n error StakingNotPossibleInThisCourt();\\n error StakingLessThanCourtMinStake();\\n error StakingTransferFailed();\\n error UnstakingTransferFailed();\\n error ArbitrationFeesNotEnough();\\n error DisputeKitNotSupportedByCourt();\\n error MustSupportDisputeKitClassic();\\n error TokenNotAccepted();\\n error EvidenceNotPassedAndNotAppeal();\\n error DisputeStillDrawing();\\n error CommitPeriodNotPassed();\\n error VotePeriodNotPassed();\\n error AppealPeriodNotPassed();\\n error NotEvidencePeriod();\\n error AppealFeesNotEnough();\\n error DisputeNotAppealable();\\n error NotExecutionPeriod();\\n error RulingAlreadyExecuted();\\n error DisputePeriodIsFinal();\\n error TransferFailed();\\n error WhenNotPausedOnly();\\n error WhenPausedOnly();\\n error StakingZeroWhenNoStake();\\n}\\n\",\"keccak256\":\"0x03e225e6c6c144dcbc7db8641d46a3b7a43b6222b83ea8b15c4cde58ef2cadd2\",\"license\":\"MIT\"},\"src/arbitration/SortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {SortitionModuleBase, KlerosCore, RNG} from \\\"./SortitionModuleBase.sol\\\";\\n\\n/// @title SortitionModule\\n/// @dev A factory of trees that keeps track of staked values for sortition.\\ncontract SortitionModule is SortitionModuleBase {\\n string public constant override version = \\\"0.9.0\\\";\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @custom:oz-upgrades-unsafe-allow constructor\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Initializer (constructor equivalent for upgradable contracts).\\n /// @param _governor The governor.\\n /// @param _core The KlerosCore.\\n /// @param _minStakingTime Minimal time to stake\\n /// @param _maxDrawingTime Time after which the drawing phase can be switched\\n /// @param _rng The random number generator.\\n /// @param _rngLookahead Lookahead value for rng.\\n function initialize(\\n address _governor,\\n KlerosCore _core,\\n uint256 _minStakingTime,\\n uint256 _maxDrawingTime,\\n RNG _rng,\\n uint256 _rngLookahead\\n ) external reinitializer(1) {\\n __SortitionModuleBase_initialize(_governor, _core, _minStakingTime, _maxDrawingTime, _rng, _rngLookahead);\\n }\\n\\n function initialize4() external reinitializer(4) {\\n // NOP\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n /// Only the governor can perform upgrades (`onlyByGovernor`)\\n function _authorizeUpgrade(address) internal view virtual override onlyByGovernor {\\n // NOP\\n }\\n}\\n\",\"keccak256\":\"0xc527c995e140a3092ed63f7a30043bd7f27190def9dd20499beeb4d8e009fb1c\",\"license\":\"MIT\"},\"src/arbitration/SortitionModuleBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {KlerosCore} from \\\"./KlerosCore.sol\\\";\\nimport {ISortitionModule} from \\\"./interfaces/ISortitionModule.sol\\\";\\nimport {IDisputeKit} from \\\"./interfaces/IDisputeKit.sol\\\";\\nimport {Initializable} from \\\"../proxy/Initializable.sol\\\";\\nimport {UUPSProxiable} from \\\"../proxy/UUPSProxiable.sol\\\";\\nimport {RNG} from \\\"../rng/RNG.sol\\\";\\nimport \\\"../libraries/Constants.sol\\\";\\n\\n/// @title SortitionModuleBase\\n/// @dev A factory of trees that keeps track of staked values for sortition.\\nabstract contract SortitionModuleBase is ISortitionModule, Initializable, UUPSProxiable {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct SortitionSumTree {\\n uint256 K; // The maximum number of children per node.\\n // We use this to keep track of vacant positions in the tree after removing a leaf. This is for keeping the tree as balanced as possible without spending gas on moving nodes around.\\n uint256[] stack;\\n uint256[] nodes;\\n // Two-way mapping of IDs to node indexes. Note that node index 0 is reserved for the root node, and means the ID does not have a node.\\n mapping(bytes32 => uint256) IDsToNodeIndexes;\\n mapping(uint256 => bytes32) nodeIndexesToIDs;\\n }\\n\\n struct DelayedStake {\\n address account; // The address of the juror.\\n uint96 courtID; // The ID of the court.\\n uint256 stake; // The new stake.\\n bool alreadyTransferred; // DEPRECATED. True if tokens were already transferred before delayed stake's execution.\\n }\\n\\n struct Juror {\\n uint96[] courtIDs; // The IDs of courts where the juror's stake path ends. A stake path is a path from the general court to a court the juror directly staked in using `_setStake`.\\n uint256 stakedPnk; // The juror's total amount of tokens staked in subcourts. Reflects actual pnk balance.\\n uint256 lockedPnk; // The juror's total amount of tokens locked in disputes.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor of the contract.\\n KlerosCore public core; // The core arbitrator contract.\\n Phase public phase; // The current phase.\\n uint256 public minStakingTime; // The time after which the phase can be switched to Drawing if there are open disputes.\\n uint256 public maxDrawingTime; // The time after which the phase can be switched back to Staking.\\n uint256 public lastPhaseChange; // The last time the phase was changed.\\n uint256 public randomNumberRequestBlock; // Number of the block when RNG request was made.\\n uint256 public disputesWithoutJurors; // The number of disputes that have not finished drawing jurors.\\n RNG public rng; // The random number generator.\\n uint256 public randomNumber; // Random number returned by RNG.\\n uint256 public rngLookahead; // Minimal block distance between requesting and obtaining a random number.\\n uint256 public delayedStakeWriteIndex; // The index of the last `delayedStake` item that was written to the array. 0 index is skipped.\\n uint256 public delayedStakeReadIndex; // The index of the next `delayedStake` item that should be processed. Starts at 1 because 0 index is skipped.\\n mapping(bytes32 treeHash => SortitionSumTree) sortitionSumTrees; // The mapping trees by keys.\\n mapping(address account => Juror) public jurors; // The jurors.\\n mapping(uint256 => DelayedStake) public delayedStakes; // Stores the stakes that were changed during Drawing phase, to update them when the phase is switched to Staking.\\n mapping(address jurorAccount => mapping(uint96 courtId => uint256)) public latestDelayedStakeIndex; // DEPRECATED. Maps the juror to its latest delayed stake. If there is already a delayed stake for this juror then it'll be replaced. latestDelayedStakeIndex[juror][courtID].\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @notice Emitted when a juror stakes in a court.\\n /// @param _address The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _amount The amount of tokens staked in the court.\\n /// @param _amountAllCourts The amount of tokens staked in all courts.\\n event StakeSet(address indexed _address, uint256 _courtID, uint256 _amount, uint256 _amountAllCourts);\\n\\n /// @notice Emitted when a juror's stake is delayed.\\n /// @param _address The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _amount The amount of tokens staked in the court.\\n event StakeDelayed(address indexed _address, uint96 indexed _courtID, uint256 _amount);\\n\\n /// @notice Emitted when a juror's stake is locked.\\n /// @param _address The address of the juror.\\n /// @param _relativeAmount The amount of tokens locked.\\n /// @param _unlock Whether the stake is locked or unlocked.\\n event StakeLocked(address indexed _address, uint256 _relativeAmount, bool _unlock);\\n\\n /// @dev Emitted when leftover PNK is available.\\n /// @param _account The account of the juror.\\n /// @param _amount The amount of PNK available.\\n event LeftoverPNK(address indexed _account, uint256 _amount);\\n\\n /// @dev Emitted when leftover PNK is withdrawn.\\n /// @param _account The account of the juror withdrawing PNK.\\n /// @param _amount The amount of PNK withdrawn.\\n event LeftoverPNKWithdrawn(address indexed _account, uint256 _amount);\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n function __SortitionModuleBase_initialize(\\n address _governor,\\n KlerosCore _core,\\n uint256 _minStakingTime,\\n uint256 _maxDrawingTime,\\n RNG _rng,\\n uint256 _rngLookahead\\n ) internal onlyInitializing {\\n governor = _governor;\\n core = _core;\\n minStakingTime = _minStakingTime;\\n maxDrawingTime = _maxDrawingTime;\\n lastPhaseChange = block.timestamp;\\n rng = _rng;\\n rngLookahead = _rngLookahead;\\n delayedStakeReadIndex = 1;\\n }\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(governor) == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n modifier onlyByCore() {\\n require(address(core) == msg.sender, \\\"Access not allowed: KlerosCore only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor of the contract.\\n /// @param _governor The new governor.\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Changes the `minStakingTime` storage variable.\\n /// @param _minStakingTime The new value for the `minStakingTime` storage variable.\\n function changeMinStakingTime(uint256 _minStakingTime) external onlyByGovernor {\\n minStakingTime = _minStakingTime;\\n }\\n\\n /// @dev Changes the `maxDrawingTime` storage variable.\\n /// @param _maxDrawingTime The new value for the `maxDrawingTime` storage variable.\\n function changeMaxDrawingTime(uint256 _maxDrawingTime) external onlyByGovernor {\\n maxDrawingTime = _maxDrawingTime;\\n }\\n\\n /// @dev Changes the `_rng` and `_rngLookahead` storage variables.\\n /// @param _rng The new value for the `RNGenerator` storage variable.\\n /// @param _rngLookahead The new value for the `rngLookahead` storage variable.\\n function changeRandomNumberGenerator(RNG _rng, uint256 _rngLookahead) external onlyByGovernor {\\n rng = _rng;\\n rngLookahead = _rngLookahead;\\n if (phase == Phase.generating) {\\n rng.requestRandomness(block.number + rngLookahead);\\n randomNumberRequestBlock = block.number;\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function passPhase() external {\\n if (phase == Phase.staking) {\\n require(\\n block.timestamp - lastPhaseChange >= minStakingTime,\\n \\\"The minimum staking time has not passed yet.\\\"\\n );\\n require(disputesWithoutJurors > 0, \\\"There are no disputes that need jurors.\\\");\\n rng.requestRandomness(block.number + rngLookahead);\\n randomNumberRequestBlock = block.number;\\n phase = Phase.generating;\\n } else if (phase == Phase.generating) {\\n randomNumber = rng.receiveRandomness(randomNumberRequestBlock + rngLookahead);\\n require(randomNumber != 0, \\\"Random number is not ready yet\\\");\\n phase = Phase.drawing;\\n } else if (phase == Phase.drawing) {\\n require(\\n disputesWithoutJurors == 0 || block.timestamp - lastPhaseChange >= maxDrawingTime,\\n \\\"There are still disputes without jurors and the maximum drawing time has not passed yet.\\\"\\n );\\n phase = Phase.staking;\\n }\\n\\n lastPhaseChange = block.timestamp;\\n emit NewPhase(phase);\\n }\\n\\n /// @dev Create a sortition sum tree at the specified key.\\n /// @param _key The key of the new tree.\\n /// @param _extraData Extra data that contains the number of children each node in the tree should have.\\n function createTree(bytes32 _key, bytes memory _extraData) external override onlyByCore {\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n uint256 K = _extraDataToTreeK(_extraData);\\n require(tree.K == 0, \\\"Tree already exists.\\\");\\n require(K > 1, \\\"K must be greater than one.\\\");\\n tree.K = K;\\n tree.nodes.push(0);\\n }\\n\\n /// @dev Executes the next delayed stakes.\\n /// @param _iterations The number of delayed stakes to execute.\\n function executeDelayedStakes(uint256 _iterations) external {\\n require(phase == Phase.staking, \\\"Should be in Staking phase.\\\");\\n require(delayedStakeWriteIndex >= delayedStakeReadIndex, \\\"No delayed stake to execute.\\\");\\n\\n uint256 actualIterations = (delayedStakeReadIndex + _iterations) - 1 > delayedStakeWriteIndex\\n ? (delayedStakeWriteIndex - delayedStakeReadIndex) + 1\\n : _iterations;\\n uint256 newDelayedStakeReadIndex = delayedStakeReadIndex + actualIterations;\\n\\n for (uint256 i = delayedStakeReadIndex; i < newDelayedStakeReadIndex; i++) {\\n DelayedStake storage delayedStake = delayedStakes[i];\\n core.setStakeBySortitionModule(delayedStake.account, delayedStake.courtID, delayedStake.stake);\\n delete delayedStakes[i];\\n }\\n delayedStakeReadIndex = newDelayedStakeReadIndex;\\n }\\n\\n function createDisputeHook(uint256 /*_disputeID*/, uint256 /*_roundID*/) external override onlyByCore {\\n disputesWithoutJurors++;\\n }\\n\\n function postDrawHook(uint256 /*_disputeID*/, uint256 /*_roundID*/) external override onlyByCore {\\n disputesWithoutJurors--;\\n }\\n\\n /// @dev Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase().\\n /// @param _randomNumber Random number returned by RNG contract.\\n function notifyRandomNumber(uint256 _randomNumber) public override {}\\n\\n /// @dev Validate the specified juror's new stake for a court.\\n /// Note: no state changes should be made when returning stakingResult != Successful, otherwise delayed stakes might break invariants.\\n /// @param _account The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _newStake The new stake.\\n /// @return pnkDeposit The amount of PNK to be deposited.\\n /// @return pnkWithdrawal The amount of PNK to be withdrawn.\\n /// @return stakingResult The result of the staking operation.\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external override onlyByCore returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) {\\n (pnkDeposit, pnkWithdrawal, stakingResult) = _validateStake(_account, _courtID, _newStake);\\n }\\n\\n function _validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) internal virtual returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) {\\n Juror storage juror = jurors[_account];\\n uint256 currentStake = stakeOf(_account, _courtID);\\n\\n uint256 nbCourts = juror.courtIDs.length;\\n if (currentStake == 0 && nbCourts >= MAX_STAKE_PATHS) {\\n return (0, 0, StakingResult.CannotStakeInMoreCourts); // Prevent staking beyond MAX_STAKE_PATHS but unstaking is always allowed.\\n }\\n\\n if (currentStake == 0 && _newStake == 0) {\\n return (0, 0, StakingResult.CannotStakeZeroWhenNoStake); // Forbid staking 0 amount when current stake is 0 to avoid flaky behaviour.\\n }\\n\\n if (phase != Phase.staking) {\\n // Store the stake change as delayed, to be applied when the phase switches back to Staking.\\n DelayedStake storage delayedStake = delayedStakes[++delayedStakeWriteIndex];\\n delayedStake.account = _account;\\n delayedStake.courtID = _courtID;\\n delayedStake.stake = _newStake;\\n emit StakeDelayed(_account, _courtID, _newStake);\\n return (pnkDeposit, pnkWithdrawal, StakingResult.Delayed);\\n }\\n\\n // Current phase is Staking: set stakes.\\n if (_newStake >= currentStake) {\\n pnkDeposit = _newStake - currentStake;\\n } else {\\n pnkWithdrawal = currentStake - _newStake;\\n // Ensure locked tokens remain in the contract. They can only be released during Execution.\\n uint256 possibleWithdrawal = juror.stakedPnk > juror.lockedPnk ? juror.stakedPnk - juror.lockedPnk : 0;\\n if (pnkWithdrawal > possibleWithdrawal) {\\n pnkWithdrawal = possibleWithdrawal;\\n }\\n }\\n return (pnkDeposit, pnkWithdrawal, StakingResult.Successful);\\n }\\n\\n /// @dev Update the state of the stakes, called by KC at the end of setStake flow.\\n /// `O(n + p * log_k(j))` where\\n /// `n` is the number of courts the juror has staked in,\\n /// `p` is the depth of the court tree,\\n /// `k` is the minimum number of children per node of one of these courts' sortition sum tree,\\n /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\\n /// @param _account The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @param _pnkDeposit The amount of PNK to be deposited.\\n /// @param _pnkWithdrawal The amount of PNK to be withdrawn.\\n /// @param _newStake The new stake.\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external override onlyByCore {\\n _setStake(_account, _courtID, _pnkDeposit, _pnkWithdrawal, _newStake);\\n }\\n\\n function _setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) internal virtual {\\n Juror storage juror = jurors[_account];\\n if (_pnkDeposit > 0) {\\n uint256 currentStake = stakeOf(_account, _courtID);\\n if (currentStake == 0) {\\n juror.courtIDs.push(_courtID);\\n }\\n // Increase juror's balance by deposited amount.\\n juror.stakedPnk += _pnkDeposit;\\n } else {\\n juror.stakedPnk -= _pnkWithdrawal;\\n if (_newStake == 0) {\\n // Cleanup\\n for (uint256 i = juror.courtIDs.length; i > 0; i--) {\\n if (juror.courtIDs[i - 1] == _courtID) {\\n juror.courtIDs[i - 1] = juror.courtIDs[juror.courtIDs.length - 1];\\n juror.courtIDs.pop();\\n break;\\n }\\n }\\n }\\n }\\n\\n // Update the sortition sum tree.\\n bytes32 stakePathID = _accountAndCourtIDToStakePathID(_account, _courtID);\\n bool finished = false;\\n uint96 currenCourtID = _courtID;\\n while (!finished) {\\n // Tokens are also implicitly staked in parent courts through sortition module to increase the chance of being drawn.\\n _set(bytes32(uint256(currenCourtID)), _newStake, stakePathID);\\n if (currenCourtID == GENERAL_COURT) {\\n finished = true;\\n } else {\\n (currenCourtID, , , , , , ) = core.courts(currenCourtID); // Get the parent court.\\n }\\n }\\n emit StakeSet(_account, _courtID, _newStake, juror.stakedPnk);\\n }\\n\\n function lockStake(address _account, uint256 _relativeAmount) external override onlyByCore {\\n jurors[_account].lockedPnk += _relativeAmount;\\n emit StakeLocked(_account, _relativeAmount, false);\\n }\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external override onlyByCore {\\n Juror storage juror = jurors[_account];\\n juror.lockedPnk -= _relativeAmount;\\n emit StakeLocked(_account, _relativeAmount, true);\\n\\n uint256 amount = getJurorLeftoverPNK(_account);\\n if (amount > 0) {\\n emit LeftoverPNK(_account, amount);\\n }\\n }\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external override onlyByCore returns (uint256 pnkBalance, uint256 availablePenalty) {\\n Juror storage juror = jurors[_account];\\n uint256 stakedPnk = juror.stakedPnk;\\n\\n if (stakedPnk >= _relativeAmount) {\\n availablePenalty = _relativeAmount;\\n juror.stakedPnk -= _relativeAmount;\\n } else {\\n availablePenalty = stakedPnk;\\n juror.stakedPnk = 0;\\n }\\n\\n pnkBalance = juror.stakedPnk;\\n return (pnkBalance, availablePenalty);\\n }\\n\\n /// @dev Unstakes the inactive juror from all courts.\\n /// `O(n * (p * log_k(j)) )` where\\n /// `n` is the number of courts the juror has staked in,\\n /// `p` is the depth of the court tree,\\n /// `k` is the minimum number of children per node of one of these courts' sortition sum tree,\\n /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.\\n /// @param _account The juror to unstake.\\n function setJurorInactive(address _account) external override onlyByCore {\\n uint96[] memory courtIDs = getJurorCourtIDs(_account);\\n for (uint256 j = courtIDs.length; j > 0; j--) {\\n core.setStakeBySortitionModule(_account, courtIDs[j - 1], 0);\\n }\\n }\\n\\n /// @dev Gives back the locked PNKs in case the juror fully unstaked earlier.\\n /// Note that since locked and staked PNK are async it is possible for the juror to have positive staked PNK balance\\n /// while having 0 stake in courts and 0 locked tokens (eg. when the juror fully unstaked during dispute and later got his tokens unlocked).\\n /// In this case the juror can use this function to withdraw the leftover tokens.\\n /// Also note that if the juror has some leftover PNK while not fully unstaked he'll have to manually unstake from all courts to trigger this function.\\n /// @param _account The juror whose PNK to withdraw.\\n function withdrawLeftoverPNK(address _account) external override {\\n // Can withdraw the leftover PNK if fully unstaked, has no tokens locked and has positive balance.\\n // This withdrawal can't be triggered by calling setStake() in KlerosCore because current stake is technically 0, thus it is done via separate function.\\n uint256 amount = getJurorLeftoverPNK(_account);\\n require(amount > 0, \\\"Not eligible for withdrawal.\\\");\\n jurors[_account].stakedPnk = 0;\\n core.transferBySortitionModule(_account, amount);\\n emit LeftoverPNKWithdrawn(_account, amount);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Draw an ID from a tree using a number.\\n /// Note that this function reverts if the sum of all values in the tree is 0.\\n /// @param _key The key of the tree.\\n /// @param _coreDisputeID Index of the dispute in Kleros Core.\\n /// @param _nonce Nonce to hash with random number.\\n /// @return drawnAddress The drawn address.\\n /// `O(k * log_k(n))` where\\n /// `k` is the maximum number of children per node in the tree,\\n /// and `n` is the maximum number of nodes ever appended.\\n function draw(\\n bytes32 _key,\\n uint256 _coreDisputeID,\\n uint256 _nonce\\n ) public view override returns (address drawnAddress) {\\n require(phase == Phase.drawing, \\\"Wrong phase.\\\");\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n\\n if (tree.nodes[0] == 0) {\\n return address(0); // No jurors staked.\\n }\\n\\n uint256 currentDrawnNumber = uint256(keccak256(abi.encodePacked(randomNumber, _coreDisputeID, _nonce))) %\\n tree.nodes[0];\\n\\n // While it still has children\\n uint256 treeIndex = 0;\\n while ((tree.K * treeIndex) + 1 < tree.nodes.length) {\\n for (uint256 i = 1; i <= tree.K; i++) {\\n // Loop over children.\\n uint256 nodeIndex = (tree.K * treeIndex) + i;\\n uint256 nodeValue = tree.nodes[nodeIndex];\\n\\n if (currentDrawnNumber >= nodeValue) {\\n // Go to the next child.\\n currentDrawnNumber -= nodeValue;\\n } else {\\n // Pick this child.\\n treeIndex = nodeIndex;\\n break;\\n }\\n }\\n }\\n drawnAddress = _stakePathIDToAccount(tree.nodeIndexesToIDs[treeIndex]);\\n }\\n\\n /// @dev Get the stake of a juror in a court.\\n /// @param _juror The address of the juror.\\n /// @param _courtID The ID of the court.\\n /// @return value The stake of the juror in the court.\\n function stakeOf(address _juror, uint96 _courtID) public view returns (uint256) {\\n bytes32 stakePathID = _accountAndCourtIDToStakePathID(_juror, _courtID);\\n return stakeOf(bytes32(uint256(_courtID)), stakePathID);\\n }\\n\\n /// @dev Get the stake of a juror in a court.\\n /// @param _key The key of the tree, corresponding to a court.\\n /// @param _ID The stake path ID, corresponding to a juror.\\n /// @return The stake of the juror in the court.\\n function stakeOf(bytes32 _key, bytes32 _ID) public view returns (uint256) {\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n uint treeIndex = tree.IDsToNodeIndexes[_ID];\\n if (treeIndex == 0) {\\n return 0;\\n }\\n return tree.nodes[treeIndex];\\n }\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n )\\n external\\n view\\n override\\n returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts)\\n {\\n Juror storage juror = jurors[_juror];\\n totalStaked = juror.stakedPnk;\\n totalLocked = juror.lockedPnk;\\n stakedInCourt = stakeOf(_juror, _courtID);\\n nbCourts = juror.courtIDs.length;\\n }\\n\\n /// @dev Gets the court identifiers where a specific `_juror` has staked.\\n /// @param _juror The address of the juror.\\n function getJurorCourtIDs(address _juror) public view override returns (uint96[] memory) {\\n return jurors[_juror].courtIDs;\\n }\\n\\n function isJurorStaked(address _juror) external view override returns (bool) {\\n return jurors[_juror].stakedPnk > 0;\\n }\\n\\n function getJurorLeftoverPNK(address _juror) public view override returns (uint256) {\\n Juror storage juror = jurors[_juror];\\n if (juror.courtIDs.length == 0 && juror.lockedPnk == 0) {\\n return juror.stakedPnk;\\n } else {\\n return 0;\\n }\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n /// @dev Update all the parents of a node.\\n /// @param _key The key of the tree to update.\\n /// @param _treeIndex The index of the node to start from.\\n /// @param _plusOrMinus Whether to add (true) or substract (false).\\n /// @param _value The value to add or substract.\\n /// `O(log_k(n))` where\\n /// `k` is the maximum number of children per node in the tree,\\n /// and `n` is the maximum number of nodes ever appended.\\n function _updateParents(bytes32 _key, uint256 _treeIndex, bool _plusOrMinus, uint256 _value) private {\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n\\n uint256 parentIndex = _treeIndex;\\n while (parentIndex != 0) {\\n parentIndex = (parentIndex - 1) / tree.K;\\n tree.nodes[parentIndex] = _plusOrMinus\\n ? tree.nodes[parentIndex] + _value\\n : tree.nodes[parentIndex] - _value;\\n }\\n }\\n\\n /// @dev Retrieves a juror's address from the stake path ID.\\n /// @param _stakePathID The stake path ID to unpack.\\n /// @return account The account.\\n function _stakePathIDToAccount(bytes32 _stakePathID) internal pure returns (address account) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let ptr := mload(0x40)\\n for {\\n let i := 0x00\\n } lt(i, 0x14) {\\n i := add(i, 0x01)\\n } {\\n mstore8(add(add(ptr, 0x0c), i), byte(i, _stakePathID))\\n }\\n account := mload(ptr)\\n }\\n }\\n\\n function _extraDataToTreeK(bytes memory _extraData) internal pure returns (uint256 K) {\\n if (_extraData.length >= 32) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n K := mload(add(_extraData, 0x20))\\n }\\n } else {\\n K = DEFAULT_K;\\n }\\n }\\n\\n /// @dev Set a value in a tree.\\n /// @param _key The key of the tree.\\n /// @param _value The new value.\\n /// @param _ID The ID of the value.\\n /// `O(log_k(n))` where\\n /// `k` is the maximum number of children per node in the tree,\\n /// and `n` is the maximum number of nodes ever appended.\\n function _set(bytes32 _key, uint256 _value, bytes32 _ID) internal {\\n SortitionSumTree storage tree = sortitionSumTrees[_key];\\n uint256 treeIndex = tree.IDsToNodeIndexes[_ID];\\n\\n if (treeIndex == 0) {\\n // No existing node.\\n if (_value != 0) {\\n // Non zero value.\\n // Append.\\n // Add node.\\n if (tree.stack.length == 0) {\\n // No vacant spots.\\n // Get the index and append the value.\\n treeIndex = tree.nodes.length;\\n tree.nodes.push(_value);\\n\\n // Potentially append a new node and make the parent a sum node.\\n if (treeIndex != 1 && (treeIndex - 1) % tree.K == 0) {\\n // Is first child.\\n uint256 parentIndex = treeIndex / tree.K;\\n bytes32 parentID = tree.nodeIndexesToIDs[parentIndex];\\n uint256 newIndex = treeIndex + 1;\\n tree.nodes.push(tree.nodes[parentIndex]);\\n delete tree.nodeIndexesToIDs[parentIndex];\\n tree.IDsToNodeIndexes[parentID] = newIndex;\\n tree.nodeIndexesToIDs[newIndex] = parentID;\\n }\\n } else {\\n // Some vacant spot.\\n // Pop the stack and append the value.\\n treeIndex = tree.stack[tree.stack.length - 1];\\n tree.stack.pop();\\n tree.nodes[treeIndex] = _value;\\n }\\n\\n // Add label.\\n tree.IDsToNodeIndexes[_ID] = treeIndex;\\n tree.nodeIndexesToIDs[treeIndex] = _ID;\\n\\n _updateParents(_key, treeIndex, true, _value);\\n }\\n } else {\\n // Existing node.\\n if (_value == 0) {\\n // Zero value.\\n // Remove.\\n // Remember value and set to 0.\\n uint256 value = tree.nodes[treeIndex];\\n tree.nodes[treeIndex] = 0;\\n\\n // Push to stack.\\n tree.stack.push(treeIndex);\\n\\n // Clear label.\\n delete tree.IDsToNodeIndexes[_ID];\\n delete tree.nodeIndexesToIDs[treeIndex];\\n\\n _updateParents(_key, treeIndex, false, value);\\n } else if (_value != tree.nodes[treeIndex]) {\\n // New, non zero value.\\n // Set.\\n bool plusOrMinus = tree.nodes[treeIndex] <= _value;\\n uint256 plusOrMinusValue = plusOrMinus\\n ? _value - tree.nodes[treeIndex]\\n : tree.nodes[treeIndex] - _value;\\n tree.nodes[treeIndex] = _value;\\n\\n _updateParents(_key, treeIndex, plusOrMinus, plusOrMinusValue);\\n }\\n }\\n }\\n\\n /// @dev Packs an account and a court ID into a stake path ID.\\n /// @param _account The address of the juror to pack.\\n /// @param _courtID The court ID to pack.\\n /// @return stakePathID The stake path ID.\\n function _accountAndCourtIDToStakePathID(\\n address _account,\\n uint96 _courtID\\n ) internal pure returns (bytes32 stakePathID) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let ptr := mload(0x40)\\n for {\\n let i := 0x00\\n } lt(i, 0x14) {\\n i := add(i, 0x01)\\n } {\\n mstore8(add(ptr, i), byte(add(0x0c, i), _account))\\n }\\n for {\\n let i := 0x14\\n } lt(i, 0x20) {\\n i := add(i, 0x01)\\n } {\\n mstore8(add(ptr, i), byte(i, _courtID))\\n }\\n stakePathID := mload(ptr)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x550f0c0bea80f7457f76f50e27dfa1b8632fe9eb28d4e57f8b2bed9a10a31696\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// @dev When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitratorDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x054fd09cc201ddca3d92a07169fb86b9db21a510a2a0f15ac4b6dffd900079fe\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0xfc7cc82c1431720da41aeb1a181171f10466b5d0d280db7aa37c451681185493\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeKit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeKit\\n/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore.\\n/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters.\\ninterface IDisputeKit {\\n // ************************************ //\\n // * Events * //\\n // ************************************ //\\n\\n /// @dev Emitted when casting a vote to provide the justification of juror's choice.\\n /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _juror Address of the juror.\\n /// @param _voteIDs The identifiers of the votes in the dispute.\\n /// @param _choice The choice juror voted for.\\n /// @param _justification Justification of the choice.\\n event VoteCast(\\n uint256 indexed _coreDisputeID,\\n address indexed _juror,\\n uint256[] _voteIDs,\\n uint256 indexed _choice,\\n string _justification\\n );\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _numberOfChoices Number of choices of the dispute\\n /// @param _extraData Additional info about the dispute, for possible use in future dispute kits.\\n /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count.\\n function createDispute(\\n uint256 _coreDisputeID,\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n uint256 _nbVotes\\n ) external;\\n\\n /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core.\\n /// Note: Access restricted to Kleros Core only.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _nonce Nonce.\\n /// @return drawnAddress The drawn address.\\n function draw(uint256 _coreDisputeID, uint256 _nonce) external returns (address drawnAddress);\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n\\n /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the vote.\\n /// @param _feePerJuror The fee per juror.\\n /// @param _pnkAtStakePerJuror The PNK at stake per juror.\\n /// @return The degree of coherence in basis points.\\n function getDegreeOfCoherence(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID,\\n uint256 _feePerJuror,\\n uint256 _pnkAtStakePerJuror\\n ) external view returns (uint256);\\n\\n /// @dev Gets the number of jurors who are eligible to a reward in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @return The number of coherent jurors.\\n function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256);\\n\\n /// @dev Returns true if all of the jurors have cast their commits for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their commits for the last round.\\n function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if all of the jurors have cast their votes for the last round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether all of the jurors have cast their votes for the last round.\\n function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund).\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @return Whether the appeal funding is finished.\\n function isAppealFunded(uint256 _coreDisputeID) external view returns (bool);\\n\\n /// @dev Returns true if the specified voter was active in this round.\\n /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit.\\n /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit.\\n /// @param _voteID The ID of the voter.\\n /// @return Whether the voter was active or not.\\n function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool);\\n\\n function getRoundInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _choice\\n )\\n external\\n view\\n returns (\\n uint256 winningChoice,\\n bool tied,\\n uint256 totalVoted,\\n uint256 totalCommited,\\n uint256 nbVoters,\\n uint256 choiceCount\\n );\\n\\n function getVoteInfo(\\n uint256 _coreDisputeID,\\n uint256 _coreRoundID,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted);\\n}\\n\",\"keccak256\":\"0xad1cdad6c218690affcadc268f984985b20e5fe0af3242a14867879b8cf86cf9\",\"license\":\"MIT\"},\"src/arbitration/interfaces/ISortitionModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport \\\"../../libraries/Constants.sol\\\";\\n\\ninterface ISortitionModule {\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n event NewPhase(Phase _phase);\\n\\n function createTree(bytes32 _key, bytes memory _extraData) external;\\n\\n function validateStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _newStake\\n ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult);\\n\\n function setStake(\\n address _account,\\n uint96 _courtID,\\n uint256 _pnkDeposit,\\n uint256 _pnkWithdrawal,\\n uint256 _newStake\\n ) external;\\n\\n function setJurorInactive(address _account) external;\\n\\n function lockStake(address _account, uint256 _relativeAmount) external;\\n\\n function unlockStake(address _account, uint256 _relativeAmount) external;\\n\\n function penalizeStake(\\n address _account,\\n uint256 _relativeAmount\\n ) external returns (uint256 pnkBalance, uint256 availablePenalty);\\n\\n function notifyRandomNumber(uint256 _drawnNumber) external;\\n\\n function draw(bytes32 _court, uint256 _coreDisputeID, uint256 _nonce) external view returns (address);\\n\\n function getJurorBalance(\\n address _juror,\\n uint96 _courtID\\n ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts);\\n\\n function getJurorCourtIDs(address _juror) external view returns (uint96[] memory);\\n\\n function isJurorStaked(address _juror) external view returns (bool);\\n\\n function getJurorLeftoverPNK(address _juror) external view returns (uint256);\\n\\n function createDisputeHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function postDrawHook(uint256 _disputeID, uint256 _roundID) external;\\n\\n function withdrawLeftoverPNK(address _account) external;\\n}\\n\",\"keccak256\":\"0xc4325f9ffdfa815b2683f897b93944d473b736f02810fb7551afea70753129bc\",\"license\":\"MIT\"},\"src/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n// Courts\\nuint96 constant FORKING_COURT = 0; // Index of the forking court.\\nuint96 constant GENERAL_COURT = 1; // Index of the default (general) court.\\n\\n// Dispute Kits\\nuint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. DEPRECATED, as its main purpose was to accommodate forest structure which is not used now.\\nuint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped.\\n\\n// Sortition Module\\nuint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\nuint256 constant DEFAULT_K = 6; // Default number of children per node.\\n\\n// Defaults\\nuint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\nIERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1.\\n\\nenum OnError {\\n Revert,\\n Return\\n}\\n\\nenum StakingResult {\\n Successful,\\n Delayed,\\n StakingTransferFailed,\\n UnstakingTransferFailed,\\n CannotStakeInMoreCourts,\\n CannotStakeInThisCourt,\\n CannotStakeLessThanMinStake,\\n CannotStakeMoreThanMaxStakePerJuror,\\n CannotStakeMoreThanMaxTotalStaked,\\n CannotStakeZeroWhenNoStake\\n}\\n\",\"keccak256\":\"0x695244532a711d08d522f9db0e86f7824bcdacf20027beab277b330076b1cf09\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recipient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x285ebcc4de7d7266ebfa1357f579e4df064801e040efc79dcf12b0555d16c652\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity ^0.8.24;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0x252f8c2ff9755c7b0b8db037a1c175311569f337640cac1201834b22b2c6b431\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxiable\\n/// @author Simon Malatrait \\n/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n/// @dev Adapted from \\n/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n///\\n/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n///\\n/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n/// `UUPSProxiable` with a custom implementation of upgrades.\\n///\\n/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /// @dev Emitted when the `implementation` has been successfully upgraded.\\n /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /// @dev The call is from an unauthorized context.\\n error UUPSUnauthorizedCallContext();\\n\\n /// @dev The storage `slot` is unsupported as a UUID.\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// @dev The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /// @dev Storage slot with the address of the current implementation.\\n /// @dev This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// @dev validated in the constructor.\\n /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /// @dev Storage variable of the proxiable contract address.\\n /// @dev It is used to check whether or not the current call is from the proxy.\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n /// @dev Called by {upgradeToAndCall}.\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Upgrade mechanism including access control and UUPS-compliance.\\n /// @param newImplementation Address of the new implementation contract.\\n /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n /// @dev Reverts if the execution is not performed via delegatecall or the execution\\n /// context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n // Check that the execution is being performed through a delegatecall call and that the execution context is\\n // a proxy contract with an implementation (as defined in ERC1967) pointing to self.\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n /// @custom:oz-upgrades-unsafe-allow delegatecall\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n /// implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n ///\\n /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n /// function revert if invoked through a proxy. This is guaranteed by the if statement.\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n /// @dev Returns the version of the implementation.\\n /// @return Version string.\\n function version() external view virtual returns (string memory);\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa99860dabe44d80278736924130f6e1208656e29b01eeffbc1e52ac81c26b6b3\",\"license\":\"MIT\"},\"src/rng/RNG.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\ninterface RNG {\\n /// @dev Request a random number.\\n /// @param _block Block linked to the request.\\n function requestRandomness(uint256 _block) external;\\n\\n /// @dev Receive the random number.\\n /// @param _block Block the random number is linked to.\\n /// @return randomNumber Random Number. If the number is not ready or has not been required 0 instead.\\n function receiveRandomness(uint256 _block) external returns (uint256 randomNumber);\\n}\\n\",\"keccak256\":\"0x0f6a8fb72ed7e5a602dc0aaf4f3a037ba9f1765b79b6320604ff810d578af2cf\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612f3f6100fc60003960008181611389015281816113b201526115aa0152612f3f6000f3fe6080604052600436106102725760003560e01c80637dc38f141161014f578063caeb50ed116100c1578063dd5e5cb51161007a578063dd5e5cb5146107b9578063e4c0aaf4146107d9578063e534710d146107f9578063f216de4c14610831578063f2f4eb2614610851578063f6b4d82d1461087157600080fd5b8063caeb50ed146106c2578063ccbac9f5146106d7578063d09f392d146106ed578063d1c1df481461070d578063d605787b1461074d578063dca5f6b01461076d57600080fd5b8063aac03ad211610113578063aac03ad214610612578063b1c9fe6e14610632578063b5d69e9914610660578063b888adfa14610680578063c057eca714610696578063c1572618146106ac57600080fd5b80637dc38f141461057c578063823cfd7014610592578063965af6c7146105b25780639fbb56f1146105d2578063a2473cc1146105f257600080fd5b80634dbbebbc116101e857806354fd4d50116101ac57806354fd4d501461047d57806356acb050146104bb5780635d2d7846146104d15780636624192f146104f157806369f458771461053c57806376fa9fc51461055c57600080fd5b80634dbbebbc146103e85780634f1ef2861461040857806352d1902d1461041b578063543f8a361461043057806354812d171461045d57600080fd5b80631ecacab81161023a5780631ecacab81461031b57806321e1625e1461034a57806321ea9b3f1461036a57806335975f4a14610388578063477a655c146103a85780634c70a0d6146103c857600080fd5b806303432744146102775780630b274f2e146102a05780630c340a24146102b75780630e083ec9146102ef5780631b92bbbe14610305575b600080fd5b34801561028357600080fd5b5061028d60065481565b6040519081526020015b60405180910390f35b3480156102ac57600080fd5b506102b56108ff565b005b3480156102c357600080fd5b506000546102d7906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b3480156102fb57600080fd5b5061028d600a5481565b34801561031157600080fd5b5061028d60035481565b34801561032757600080fd5b5061033b610336366004612896565b610cd7565b604051610297939291906128ed565b34801561035657600080fd5b506102b5610365366004612919565b610d22565b34801561037657600080fd5b506102b5610385366004612945565b50565b34801561039457600080fd5b506102b56103a3366004612945565b610dc5565b3480156103b457600080fd5b506102b56103c3366004612a01565b610fb1565b3480156103d457600080fd5b506102d76103e3366004612a47565b6110a8565b3480156103f457600080fd5b506102b5610403366004612919565b61128c565b6102b5610416366004612a73565b611375565b34801561042757600080fd5b5061028d61159d565b34801561043c57600080fd5b5061045061044b366004612aac565b6115fb565b6040516102979190612ac9565b34801561046957600080fd5b506102b5610478366004612b15565b611699565b34801561048957600080fd5b506104ae604051806040016040528060058152602001640302e392e360dc1b81525081565b6040516102979190612ba0565b3480156104c757600080fd5b5061028d600b5481565b3480156104dd57600080fd5b506102b56104ec366004612bd3565b611769565b3480156104fd57600080fd5b5061052c61050c366004612aac565b6001600160a01b03166000908152600d6020526040902060010154151590565b6040519015158152602001610297565b34801561054857600080fd5b506102b5610557366004612aac565b6117ac565b34801561056857600080fd5b5061028d610577366004612bd3565b6118c3565b34801561058857600080fd5b5061028d60095481565b34801561059e57600080fd5b506102b56105ad366004612945565b61191e565b3480156105be57600080fd5b506102b56105cd366004612919565b61194d565b3480156105de57600080fd5b5061028d6105ed366004612aac565b611a49565b3480156105fe57600080fd5b5061028d61060d366004612bf5565b611a8a565b34801561061e57600080fd5b506102b561062d366004612c2e565b611ab4565b34801561063e57600080fd5b5060015461065390600160a01b900460ff1681565b6040516102979190612c7f565b34801561066c57600080fd5b506102b561067b366004612aac565b611af2565b34801561068c57600080fd5b5061028d60045481565b3480156106a257600080fd5b5061028d60025481565b3480156106b857600080fd5b5061028d60055481565b3480156106ce57600080fd5b506102b5611bd2565b3480156106e357600080fd5b5061028d60085481565b3480156106f957600080fd5b506102b5610708366004612bd3565b611c83565b34801561071957600080fd5b5061072d610728366004612bf5565b611cbd565b604080519485526020850193909352918301526060820152608001610297565b34801561075957600080fd5b506007546102d7906001600160a01b031681565b34801561077957600080fd5b506107a4610788366004612aac565b600d602052600090815260409020600181015460029091015482565b60408051928352602083019190915201610297565b3480156107c557600080fd5b506102b56107d4366004612945565b611cfc565b3480156107e557600080fd5b506102b56107f4366004612aac565b611d2b565b34801561080557600080fd5b5061028d610814366004612bf5565b600f60209081526000928352604080842090915290825290205481565b34801561083d57600080fd5b506107a461084c366004612919565b611d77565b34801561085d57600080fd5b506001546102d7906001600160a01b031681565b34801561087d57600080fd5b506108cb61088c366004612945565b600e602052600090815260409020805460018201546002909201546001600160a01b03821692600160a01b9092046001600160601b0316919060ff1684565b604080516001600160a01b0390951685526001600160601b0390931660208501529183015215156060820152608001610297565b6000600154600160a01b900460ff16600281111561091f5761091f6128d7565b03610a92576002546004546109349042612caf565b101561099c5760405162461bcd60e51b815260206004820152602c60248201527f546865206d696e696d756d207374616b696e672074696d6520686173206e6f7460448201526b103830b9b9b2b2103cb2ba1760a11b60648201526084015b60405180910390fd5b6000600654116109fe5760405162461bcd60e51b815260206004820152602760248201527f546865726520617265206e6f2064697370757465732074686174206e65656420604482015266353ab937b9399760c91b6064820152608401610993565b6007546009546001600160a01b0390911690637363ae1f90610a209043612cc2565b6040518263ffffffff1660e01b8152600401610a3e91815260200190565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b505043600555505060018054819060ff60a01b1916600160a01b825b0217905550610c8c565b60018054600160a01b900460ff166002811115610ab157610ab16128d7565b03610ba9576007546009546005546001600160a01b03909216916313cf905491610ada91612cc2565b6040518263ffffffff1660e01b8152600401610af891815260200190565b6020604051808303816000875af1158015610b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3b9190612cd5565b6008819055600003610b8f5760405162461bcd60e51b815260206004820152601e60248201527f52616e646f6d206e756d626572206973206e6f742072656164792079657400006044820152606401610993565b600180546002919060ff60a01b1916600160a01b83610a88565b6002600154600160a01b900460ff166002811115610bc957610bc96128d7565b03610c8c576006541580610beb5750600354600454610be89042612caf565b10155b610c7e5760405162461bcd60e51b815260206004820152605860248201527f546865726520617265207374696c6c20646973707574657320776974686f757460448201527f206a75726f727320616e6420746865206d6178696d756d2064726177696e67206064820152773a34b6b2903430b9903737ba103830b9b9b2b2103cb2ba1760411b608482015260a401610993565b6001805460ff60a01b191690555b426004556001546040517f31f72b44f546d9e7eaec13f65636997665e15f134a81c82924f568f5c0d07b9391610ccd91600160a01b90910460ff1690612c7f565b60405180910390a1565b600154600090819081906001600160a01b03163314610d085760405162461bcd60e51b815260040161099390612cee565b610d13868686611e05565b91989097509095509350505050565b6001546001600160a01b03163314610d4c5760405162461bcd60e51b815260040161099390612cee565b6001600160a01b0382166000908152600d602052604081206002018054839290610d77908490612cc2565b909155505060408051828152600060208201526001600160a01b038416917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b091015b60405180910390a25050565b6000600154600160a01b900460ff166002811115610de557610de56128d7565b14610e325760405162461bcd60e51b815260206004820152601b60248201527f53686f756c6420626520696e205374616b696e672070686173652e00000000006044820152606401610993565b600b54600a541015610e865760405162461bcd60e51b815260206004820152601c60248201527f4e6f2064656c61796564207374616b6520746f20657865637574652e000000006044820152606401610993565b6000600a54600183600b54610e9b9190612cc2565b610ea59190612caf565b11610eb05781610ecb565b600b54600a54610ec09190612caf565b610ecb906001612cc2565b9050600081600b54610edd9190612cc2565b600b549091505b81811015610fa9576000818152600e602052604090819020600180548254918301549351630761c14d60e01b815292936001600160a01b0391821693630761c14d93610f4793811692600160a01b9091046001600160601b031691600401612d32565b600060405180830381600087803b158015610f6157600080fd5b505af1158015610f75573d6000803e3d6000fd5b5050506000838152600e60205260408120818155600180820192909255600201805460ff191690559092019150610ee49050565b50600b555050565b6001546001600160a01b03163314610fdb5760405162461bcd60e51b815260040161099390612cee565b6000828152600c6020526040812090610ff383611fa8565b82549091501561103c5760405162461bcd60e51b81526020600482015260146024820152732a3932b29030b63932b0b23c9032bc34b9ba399760611b6044820152606401610993565b6001811161108c5760405162461bcd60e51b815260206004820152601b60248201527f4b206d7573742062652067726561746572207468616e206f6e652e00000000006044820152606401610993565b8155600201805460018101825560009182526020822001555050565b60006002600154600160a01b900460ff1660028111156110ca576110ca6128d7565b146111065760405162461bcd60e51b815260206004820152600c60248201526b2bb937b73390383430b9b29760a11b6044820152606401610993565b6000848152600c602052604081206002810180549192909161112a5761112a612d5c565b9060005260206000200154600003611146576000915050611285565b60008160020160008154811061115e5761115e612d5c565b90600052602060002001546008548686604051602001611191939291909283526020830191909152604082015260600190565b6040516020818303038152906040528051906020012060001c6111b49190612d88565b905060005b600283015483546111cb908390612d9c565b6111d6906001612cc2565b10156112655760015b8354811161125f576000818386600001546111fa9190612d9c565b6112049190612cc2565b9050600085600201828154811061121d5761121d612d5c565b906000526020600020015490508085106112425761123b8186612caf565b945061124a565b50915061125f565b5050808061125790612db3565b9150506111df565b506111b9565b600081815260048401602052604090205461127f90611fc4565b93505050505b9392505050565b6000546001600160a01b031633146112b65760405162461bcd60e51b815260040161099390612dcc565b600780546001600160a01b0319166001600160a01b038416179055600981905560018054600160a01b900460ff1660028111156112f5576112f56128d7565b03611371576007546009546001600160a01b0390911690637363ae1f9061131c9043612cc2565b6040518263ffffffff1660e01b815260040161133a91815260200190565b600060405180830381600087803b15801561135457600080fd5b505af1158015611368573d6000803e3d6000fd5b50504360055550505b5050565b61137e82611fef565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113fc57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113f0600080516020612eea8339815191525490565b6001600160a01b031614155b1561141a5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611474575060408051601f3d908101601f1916820190925261147191810190612cd5565b60015b61149c57604051630c76093760e01b81526001600160a01b0383166004820152602401610993565b600080516020612eea83398151915281146114cd57604051632a87526960e21b815260048101829052602401610993565b600080516020612eea8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611598576000836001600160a01b0316836040516115349190612e0e565b600060405180830381855af49150503d806000811461156f576040519150601f19603f3d011682016040523d82523d6000602084013e611574565b606091505b5050905080611596576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115e85760405163703e46dd60e11b815260040160405180910390fd5b50600080516020612eea83398151915290565b6001600160a01b0381166000908152600d602090815260409182902080548351818402810184019094528084526060939283018282801561168d57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b0104928301926001038202915080841161164a5790505b50505050509050919050565b600160006116a5612019565b8054909150600160401b900460ff16806116cc575080546001600160401b03808416911610155b156116e95760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561171888888888888861203d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050505050565b6001546001600160a01b031633146117935760405162461bcd60e51b815260040161099390612cee565b600680549060006117a383612e2a565b91905055505050565b60006117b782611a49565b9050600081116118095760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656c696769626c6520666f72207769746864726177616c2e000000006044820152606401610993565b6001600160a01b038281166000818152600d6020526040808220600190810192909255905490516342c37fa360e01b8152600481019290925260248201849052909116906342c37fa390604401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b50505050816001600160a01b03167f71bb1b604559acc3db697ccf2aa4228d727cd5b133d6ffa419518d51c117c95c82604051610db991815260200190565b6000828152600c60209081526040808320848452600381019092528220548083036118f357600092505050611918565b81600201818154811061190857611908612d5c565b9060005260206000200154925050505b92915050565b6000546001600160a01b031633146119485760405162461bcd60e51b815260040161099390612dcc565b600255565b6001546001600160a01b031633146119775760405162461bcd60e51b815260040161099390612cee565b6001600160a01b0382166000908152600d60205260408120600281018054919284926119a4908490612caf565b909155505060408051838152600160208201526001600160a01b038516917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b0910160405180910390a260006119f884611a49565b9050801561159657836001600160a01b03167f819a3744490c627e221b71743857691f9c23bf56a1ecc5351f886cfd4c3187d982604051611a3b91815260200190565b60405180910390a250505050565b6001600160a01b0381166000908152600d602052604081208054158015611a7257506002810154155b15611a81576001015492915050565b50600092915050565b600080611a97848461209d565b9050611aac6001600160601b038416826118c3565b949350505050565b6001546001600160a01b03163314611ade5760405162461bcd60e51b815260040161099390612cee565b611aeb85858585856120e5565b5050505050565b6001546001600160a01b03163314611b1c5760405162461bcd60e51b815260040161099390612cee565b6000611b27826115fb565b80519091505b801561159857600180546001600160a01b031690630761c14d9085908590611b559086612caf565b81518110611b6557611b65612d5c565b602002602001015160006040518463ffffffff1660e01b8152600401611b8d93929190612d32565b600060405180830381600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050508080611bca90612e2a565b915050611b2d565b60046000611bde612019565b8054909150600160401b900460ff1680611c05575080546001600160401b03808416911610155b15611c225760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6001546001600160a01b03163314611cad5760405162461bcd60e51b815260040161099390612cee565b600680549060006117a383612db3565b6001600160a01b0382166000908152600d6020526040812060018101546002820154909290918190611cef8787611a8a565b9054949793965094505050565b6000546001600160a01b03163314611d265760405162461bcd60e51b815260040161099390612dcc565b600355565b6000546001600160a01b03163314611d555760405162461bcd60e51b815260040161099390612dcc565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460009081906001600160a01b03163314611da65760405162461bcd60e51b815260040161099390612cee565b6001600160a01b0384166000908152600d602052604090206001810154848110611dec5784925084826001016000828254611de19190612caf565b90915550611df79050565b600060018301559150815b506001015491509250929050565b6001600160a01b0383166000908152600d602052604081208190819081611e2c8888611a8a565b825490915081158015611e40575060048110155b15611e58576000806004955095509550505050611f9f565b81158015611e64575086155b15611e7c576000806009955095509550505050611f9f565b6000600154600160a01b900460ff166002811115611e9c57611e9c6128d7565b14611f37576000600e6000600a60008154611eb690612db3565b9182905550815260208082019290925260409081016000206001600160601b038c16600160a01b81026001600160a01b038f169081178355600183018d905592518c8152919450927fa59837f9df3fb816613d84e8fefe31ec8d6e67ff43df6533e3f793a3f53aade9910160405180910390a35060019350611f9f92505050565b818710611f4f57611f488288612caf565b9550611f97565b611f598783612caf565b945060008360020154846001015411611f73576000611f87565b83600201548460010154611f879190612caf565b905080861115611f95578095505b505b506000925050505b93509350939050565b60006020825110611fbb57506020015190565b5060065b919050565b600060405160005b6014811015611fe75783811a81600c84010153600101611fcc565b505192915050565b6000546001600160a01b031633146103855760405162461bcd60e51b815260040161099390612dcc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b61204561241b565b600080546001600160a01b03199081166001600160a01b039889161790915560018054821696881696909617865560029490945560039290925542600455600780549093169416939093179055600991909155600b55565b600060405160005b60148110156120c0578481600c011a818301536001016120a5565b5060145b60208110156120dc5783811a818301536001016120c4565b50519392505050565b6001600160a01b0385166000908152600d60205260409020831561217457600061210f8787611a8a565b905080600003612154578154600180820184556000848152602090206002830401805491909216600c026101000a6001600160601b0381810219909216918916021790555b848260010160008282546121689190612cc2565b909155506122eb915050565b828160010160008282546121889190612caf565b909155505060008290036122eb5780545b80156122e9576001600160601b038616826121b5600184612caf565b815481106121c5576121c5612d5c565b600091825260209091206002820401546001909116600c026101000a90046001600160601b0316036122d7578154829061220190600190612caf565b8154811061221157612211612d5c565b600091825260209091206002820401546001918216600c026101000a90046001600160601b03169083906122459084612caf565b8154811061225557612255612d5c565b9060005260206000209060029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b03160217905550816000018054806122a1576122a1612e41565b60008281526020902060026000199092019182040180546001600160601b03600c60018516026101000a021916905590556122e9565b806122e181612e2a565b915050612199565b505b60006122f7878761209d565b90506000865b816123b5576123166001600160601b0382168685612442565b6000196001600160601b0382160161233157600191506122fd565b600154604051630fad06e960e11b81526001600160601b03831660048201526001600160a01b0390911690631f5a0dd29060240160e060405180830381865afa158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a69190612e67565b509495506122fd945050505050565b6001840154604080516001600160601b038b16815260208101889052908101919091526001600160a01b038a16907f70ca4ec64687bf265f39041896f3dbf10b9f650503cb38f2b3569fdce7489c369060600160405180910390a2505050505050505050565b612423612795565b61244057604051631afcd79f60e31b815260040160405180910390fd5b565b6000838152600c6020908152604080832084845260038101909252822054909181900361260f57831561260a57600182015460000361255d5750600281018054600180820183556000928352602090922081018590559081148015906124bc575081546124b0600183612caf565b6124ba9190612d88565b155b156125585781546000906124d09083612ed5565b60008181526004850160205260408120549192506124ef846001612cc2565b90508460020185600201848154811061250a5761250a612d5c565b60009182526020808320909101548354600181018555938352818320909301929092559384526004860180825260408086208690558486526003880183528086208490559285529052909120555b6125d8565b60018083018054909161256f91612caf565b8154811061257f5761257f612d5c565b906000526020600020015490508160010180548061259f5761259f612e41565b60019003818190600052602060002001600090559055838260020182815481106125cb576125cb612d5c565b6000918252602090912001555b6000838152600383016020908152604080832084905583835260048501909152902083905561260a85826001876127af565b611aeb565b836000036126ad57600082600201828154811061262e5761262e612d5c565b90600052602060002001549050600083600201838154811061265257612652612d5c565b60009182526020808320909101929092556001808601805491820181558252828220018490558581526003850182526040808220829055848252600486019092529081208190556126a79087908490846127af565b50611aeb565b8160020181815481106126c2576126c2612d5c565b90600052602060002001548414611aeb576000848360020183815481106126eb576126eb612d5c565b906000526020600020015411159050600081612731578584600201848154811061271757612717612d5c565b906000526020600020015461272c9190612caf565b61275c565b83600201838154811061274657612746612d5c565b90600052602060002001548661275c9190612caf565b90508584600201848154811061277457612774612d5c565b60009182526020909120015561278c878484846127af565b50505050505050565b600061279f612019565b54600160401b900460ff16919050565b6000848152600c60205260409020835b80156128645781546127d2600183612caf565b6127dc9190612ed5565b90508361281357828260020182815481106127f9576127f9612d5c565b906000526020600020015461280e9190612caf565b61283e565b8282600201828154811061282957612829612d5c565b906000526020600020015461283e9190612cc2565b82600201828154811061285357612853612d5c565b6000918252602090912001556127bf565b505050505050565b6001600160a01b038116811461038557600080fd5b6001600160601b038116811461038557600080fd5b6000806000606084860312156128ab57600080fd5b83356128b68161286c565b925060208401356128c681612881565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b8381526020810183905260608101600a831061290b5761290b6128d7565b826040830152949350505050565b6000806040838503121561292c57600080fd5b82356129378161286c565b946020939093013593505050565b60006020828403121561295757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261298557600080fd5b81356001600160401b0381111561299e5761299e61295e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156129cc576129cc61295e565b6040528181528382016020018510156129e457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612a1457600080fd5b8235915060208301356001600160401b03811115612a3157600080fd5b612a3d85828601612974565b9150509250929050565b600080600060608486031215612a5c57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612a8657600080fd5b8235612a918161286c565b915060208301356001600160401b03811115612a3157600080fd5b600060208284031215612abe57600080fd5b81356112858161286c565b602080825282518282018190526000918401906040840190835b81811015612b0a5783516001600160601b0316835260209384019390920191600101612ae3565b509095945050505050565b60008060008060008060c08789031215612b2e57600080fd5b8635612b398161286c565b95506020870135612b498161286c565b945060408701359350606087013592506080870135612b678161286c565b9598949750929591949360a090920135925050565b60005b83811015612b97578181015183820152602001612b7f565b50506000910152565b6020815260008251806020840152612bbf816040850160208701612b7c565b601f01601f19169190910160400192915050565b60008060408385031215612be657600080fd5b50508035926020909101359150565b60008060408385031215612c0857600080fd5b8235612c138161286c565b91506020830135612c2381612881565b809150509250929050565b600080600080600060a08688031215612c4657600080fd5b8535612c518161286c565b94506020860135612c6181612881565b94979496505050506040830135926060810135926080909101359150565b6020810160038310612c9357612c936128d7565b91905290565b634e487b7160e01b600052601160045260246000fd5b8181038181111561191857611918612c99565b8082018082111561191857611918612c99565b600060208284031215612ce757600080fd5b5051919050565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b6001600160a01b039390931683526001600160601b03919091166020830152604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612d9757612d97612d72565b500690565b808202811582820484141761191857611918612c99565b600060018201612dc557612dc5612c99565b5060010190565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60008251612e20818460208701612b7c565b9190910192915050565b600081612e3957612e39612c99565b506000190190565b634e487b7160e01b600052603160045260246000fd5b80518015158114611fbf57600080fd5b600080600080600080600060e0888a031215612e8257600080fd5b8751612e8d81612881565b9650612e9b60208901612e57565b604089015160608a015160808b015160a08c0151939950919750955093509150612ec760c08901612e57565b905092959891949750929550565b600082612ee457612ee4612d72565b50049056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212200186314699ae77a443609cfb006b9ef79adca12e964bddf2a243cc7bcac06f9264736f6c634300081c0033", - "deployedBytecode": "0x6080604052600436106102725760003560e01c80637dc38f141161014f578063caeb50ed116100c1578063dd5e5cb51161007a578063dd5e5cb5146107b9578063e4c0aaf4146107d9578063e534710d146107f9578063f216de4c14610831578063f2f4eb2614610851578063f6b4d82d1461087157600080fd5b8063caeb50ed146106c2578063ccbac9f5146106d7578063d09f392d146106ed578063d1c1df481461070d578063d605787b1461074d578063dca5f6b01461076d57600080fd5b8063aac03ad211610113578063aac03ad214610612578063b1c9fe6e14610632578063b5d69e9914610660578063b888adfa14610680578063c057eca714610696578063c1572618146106ac57600080fd5b80637dc38f141461057c578063823cfd7014610592578063965af6c7146105b25780639fbb56f1146105d2578063a2473cc1146105f257600080fd5b80634dbbebbc116101e857806354fd4d50116101ac57806354fd4d501461047d57806356acb050146104bb5780635d2d7846146104d15780636624192f146104f157806369f458771461053c57806376fa9fc51461055c57600080fd5b80634dbbebbc146103e85780634f1ef2861461040857806352d1902d1461041b578063543f8a361461043057806354812d171461045d57600080fd5b80631ecacab81161023a5780631ecacab81461031b57806321e1625e1461034a57806321ea9b3f1461036a57806335975f4a14610388578063477a655c146103a85780634c70a0d6146103c857600080fd5b806303432744146102775780630b274f2e146102a05780630c340a24146102b75780630e083ec9146102ef5780631b92bbbe14610305575b600080fd5b34801561028357600080fd5b5061028d60065481565b6040519081526020015b60405180910390f35b3480156102ac57600080fd5b506102b56108ff565b005b3480156102c357600080fd5b506000546102d7906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b3480156102fb57600080fd5b5061028d600a5481565b34801561031157600080fd5b5061028d60035481565b34801561032757600080fd5b5061033b610336366004612896565b610cd7565b604051610297939291906128ed565b34801561035657600080fd5b506102b5610365366004612919565b610d22565b34801561037657600080fd5b506102b5610385366004612945565b50565b34801561039457600080fd5b506102b56103a3366004612945565b610dc5565b3480156103b457600080fd5b506102b56103c3366004612a01565b610fb1565b3480156103d457600080fd5b506102d76103e3366004612a47565b6110a8565b3480156103f457600080fd5b506102b5610403366004612919565b61128c565b6102b5610416366004612a73565b611375565b34801561042757600080fd5b5061028d61159d565b34801561043c57600080fd5b5061045061044b366004612aac565b6115fb565b6040516102979190612ac9565b34801561046957600080fd5b506102b5610478366004612b15565b611699565b34801561048957600080fd5b506104ae604051806040016040528060058152602001640302e392e360dc1b81525081565b6040516102979190612ba0565b3480156104c757600080fd5b5061028d600b5481565b3480156104dd57600080fd5b506102b56104ec366004612bd3565b611769565b3480156104fd57600080fd5b5061052c61050c366004612aac565b6001600160a01b03166000908152600d6020526040902060010154151590565b6040519015158152602001610297565b34801561054857600080fd5b506102b5610557366004612aac565b6117ac565b34801561056857600080fd5b5061028d610577366004612bd3565b6118c3565b34801561058857600080fd5b5061028d60095481565b34801561059e57600080fd5b506102b56105ad366004612945565b61191e565b3480156105be57600080fd5b506102b56105cd366004612919565b61194d565b3480156105de57600080fd5b5061028d6105ed366004612aac565b611a49565b3480156105fe57600080fd5b5061028d61060d366004612bf5565b611a8a565b34801561061e57600080fd5b506102b561062d366004612c2e565b611ab4565b34801561063e57600080fd5b5060015461065390600160a01b900460ff1681565b6040516102979190612c7f565b34801561066c57600080fd5b506102b561067b366004612aac565b611af2565b34801561068c57600080fd5b5061028d60045481565b3480156106a257600080fd5b5061028d60025481565b3480156106b857600080fd5b5061028d60055481565b3480156106ce57600080fd5b506102b5611bd2565b3480156106e357600080fd5b5061028d60085481565b3480156106f957600080fd5b506102b5610708366004612bd3565b611c83565b34801561071957600080fd5b5061072d610728366004612bf5565b611cbd565b604080519485526020850193909352918301526060820152608001610297565b34801561075957600080fd5b506007546102d7906001600160a01b031681565b34801561077957600080fd5b506107a4610788366004612aac565b600d602052600090815260409020600181015460029091015482565b60408051928352602083019190915201610297565b3480156107c557600080fd5b506102b56107d4366004612945565b611cfc565b3480156107e557600080fd5b506102b56107f4366004612aac565b611d2b565b34801561080557600080fd5b5061028d610814366004612bf5565b600f60209081526000928352604080842090915290825290205481565b34801561083d57600080fd5b506107a461084c366004612919565b611d77565b34801561085d57600080fd5b506001546102d7906001600160a01b031681565b34801561087d57600080fd5b506108cb61088c366004612945565b600e602052600090815260409020805460018201546002909201546001600160a01b03821692600160a01b9092046001600160601b0316919060ff1684565b604080516001600160a01b0390951685526001600160601b0390931660208501529183015215156060820152608001610297565b6000600154600160a01b900460ff16600281111561091f5761091f6128d7565b03610a92576002546004546109349042612caf565b101561099c5760405162461bcd60e51b815260206004820152602c60248201527f546865206d696e696d756d207374616b696e672074696d6520686173206e6f7460448201526b103830b9b9b2b2103cb2ba1760a11b60648201526084015b60405180910390fd5b6000600654116109fe5760405162461bcd60e51b815260206004820152602760248201527f546865726520617265206e6f2064697370757465732074686174206e65656420604482015266353ab937b9399760c91b6064820152608401610993565b6007546009546001600160a01b0390911690637363ae1f90610a209043612cc2565b6040518263ffffffff1660e01b8152600401610a3e91815260200190565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b505043600555505060018054819060ff60a01b1916600160a01b825b0217905550610c8c565b60018054600160a01b900460ff166002811115610ab157610ab16128d7565b03610ba9576007546009546005546001600160a01b03909216916313cf905491610ada91612cc2565b6040518263ffffffff1660e01b8152600401610af891815260200190565b6020604051808303816000875af1158015610b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3b9190612cd5565b6008819055600003610b8f5760405162461bcd60e51b815260206004820152601e60248201527f52616e646f6d206e756d626572206973206e6f742072656164792079657400006044820152606401610993565b600180546002919060ff60a01b1916600160a01b83610a88565b6002600154600160a01b900460ff166002811115610bc957610bc96128d7565b03610c8c576006541580610beb5750600354600454610be89042612caf565b10155b610c7e5760405162461bcd60e51b815260206004820152605860248201527f546865726520617265207374696c6c20646973707574657320776974686f757460448201527f206a75726f727320616e6420746865206d6178696d756d2064726177696e67206064820152773a34b6b2903430b9903737ba103830b9b9b2b2103cb2ba1760411b608482015260a401610993565b6001805460ff60a01b191690555b426004556001546040517f31f72b44f546d9e7eaec13f65636997665e15f134a81c82924f568f5c0d07b9391610ccd91600160a01b90910460ff1690612c7f565b60405180910390a1565b600154600090819081906001600160a01b03163314610d085760405162461bcd60e51b815260040161099390612cee565b610d13868686611e05565b91989097509095509350505050565b6001546001600160a01b03163314610d4c5760405162461bcd60e51b815260040161099390612cee565b6001600160a01b0382166000908152600d602052604081206002018054839290610d77908490612cc2565b909155505060408051828152600060208201526001600160a01b038416917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b091015b60405180910390a25050565b6000600154600160a01b900460ff166002811115610de557610de56128d7565b14610e325760405162461bcd60e51b815260206004820152601b60248201527f53686f756c6420626520696e205374616b696e672070686173652e00000000006044820152606401610993565b600b54600a541015610e865760405162461bcd60e51b815260206004820152601c60248201527f4e6f2064656c61796564207374616b6520746f20657865637574652e000000006044820152606401610993565b6000600a54600183600b54610e9b9190612cc2565b610ea59190612caf565b11610eb05781610ecb565b600b54600a54610ec09190612caf565b610ecb906001612cc2565b9050600081600b54610edd9190612cc2565b600b549091505b81811015610fa9576000818152600e602052604090819020600180548254918301549351630761c14d60e01b815292936001600160a01b0391821693630761c14d93610f4793811692600160a01b9091046001600160601b031691600401612d32565b600060405180830381600087803b158015610f6157600080fd5b505af1158015610f75573d6000803e3d6000fd5b5050506000838152600e60205260408120818155600180820192909255600201805460ff191690559092019150610ee49050565b50600b555050565b6001546001600160a01b03163314610fdb5760405162461bcd60e51b815260040161099390612cee565b6000828152600c6020526040812090610ff383611fa8565b82549091501561103c5760405162461bcd60e51b81526020600482015260146024820152732a3932b29030b63932b0b23c9032bc34b9ba399760611b6044820152606401610993565b6001811161108c5760405162461bcd60e51b815260206004820152601b60248201527f4b206d7573742062652067726561746572207468616e206f6e652e00000000006044820152606401610993565b8155600201805460018101825560009182526020822001555050565b60006002600154600160a01b900460ff1660028111156110ca576110ca6128d7565b146111065760405162461bcd60e51b815260206004820152600c60248201526b2bb937b73390383430b9b29760a11b6044820152606401610993565b6000848152600c602052604081206002810180549192909161112a5761112a612d5c565b9060005260206000200154600003611146576000915050611285565b60008160020160008154811061115e5761115e612d5c565b90600052602060002001546008548686604051602001611191939291909283526020830191909152604082015260600190565b6040516020818303038152906040528051906020012060001c6111b49190612d88565b905060005b600283015483546111cb908390612d9c565b6111d6906001612cc2565b10156112655760015b8354811161125f576000818386600001546111fa9190612d9c565b6112049190612cc2565b9050600085600201828154811061121d5761121d612d5c565b906000526020600020015490508085106112425761123b8186612caf565b945061124a565b50915061125f565b5050808061125790612db3565b9150506111df565b506111b9565b600081815260048401602052604090205461127f90611fc4565b93505050505b9392505050565b6000546001600160a01b031633146112b65760405162461bcd60e51b815260040161099390612dcc565b600780546001600160a01b0319166001600160a01b038416179055600981905560018054600160a01b900460ff1660028111156112f5576112f56128d7565b03611371576007546009546001600160a01b0390911690637363ae1f9061131c9043612cc2565b6040518263ffffffff1660e01b815260040161133a91815260200190565b600060405180830381600087803b15801561135457600080fd5b505af1158015611368573d6000803e3d6000fd5b50504360055550505b5050565b61137e82611fef565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113fc57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113f0600080516020612eea8339815191525490565b6001600160a01b031614155b1561141a5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611474575060408051601f3d908101601f1916820190925261147191810190612cd5565b60015b61149c57604051630c76093760e01b81526001600160a01b0383166004820152602401610993565b600080516020612eea83398151915281146114cd57604051632a87526960e21b815260048101829052602401610993565b600080516020612eea8339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2815115611598576000836001600160a01b0316836040516115349190612e0e565b600060405180830381855af49150503d806000811461156f576040519150601f19603f3d011682016040523d82523d6000602084013e611574565b606091505b5050905080611596576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115e85760405163703e46dd60e11b815260040160405180910390fd5b50600080516020612eea83398151915290565b6001600160a01b0381166000908152600d602090815260409182902080548351818402810184019094528084526060939283018282801561168d57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b0104928301926001038202915080841161164a5790505b50505050509050919050565b600160006116a5612019565b8054909150600160401b900460ff16806116cc575080546001600160401b03808416911610155b156116e95760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561171888888888888861203d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050505050565b6001546001600160a01b031633146117935760405162461bcd60e51b815260040161099390612cee565b600680549060006117a383612e2a565b91905055505050565b60006117b782611a49565b9050600081116118095760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656c696769626c6520666f72207769746864726177616c2e000000006044820152606401610993565b6001600160a01b038281166000818152600d6020526040808220600190810192909255905490516342c37fa360e01b8152600481019290925260248201849052909116906342c37fa390604401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b50505050816001600160a01b03167f71bb1b604559acc3db697ccf2aa4228d727cd5b133d6ffa419518d51c117c95c82604051610db991815260200190565b6000828152600c60209081526040808320848452600381019092528220548083036118f357600092505050611918565b81600201818154811061190857611908612d5c565b9060005260206000200154925050505b92915050565b6000546001600160a01b031633146119485760405162461bcd60e51b815260040161099390612dcc565b600255565b6001546001600160a01b031633146119775760405162461bcd60e51b815260040161099390612cee565b6001600160a01b0382166000908152600d60205260408120600281018054919284926119a4908490612caf565b909155505060408051838152600160208201526001600160a01b038516917f7a81a4ef419d50dbb5deb116fb983bf6ca7716bcbc84cd1cd2be81ccea9078b0910160405180910390a260006119f884611a49565b9050801561159657836001600160a01b03167f819a3744490c627e221b71743857691f9c23bf56a1ecc5351f886cfd4c3187d982604051611a3b91815260200190565b60405180910390a250505050565b6001600160a01b0381166000908152600d602052604081208054158015611a7257506002810154155b15611a81576001015492915050565b50600092915050565b600080611a97848461209d565b9050611aac6001600160601b038416826118c3565b949350505050565b6001546001600160a01b03163314611ade5760405162461bcd60e51b815260040161099390612cee565b611aeb85858585856120e5565b5050505050565b6001546001600160a01b03163314611b1c5760405162461bcd60e51b815260040161099390612cee565b6000611b27826115fb565b80519091505b801561159857600180546001600160a01b031690630761c14d9085908590611b559086612caf565b81518110611b6557611b65612d5c565b602002602001015160006040518463ffffffff1660e01b8152600401611b8d93929190612d32565b600060405180830381600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050508080611bca90612e2a565b915050611b2d565b60046000611bde612019565b8054909150600160401b900460ff1680611c05575080546001600160401b03808416911610155b15611c225760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b1760ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6001546001600160a01b03163314611cad5760405162461bcd60e51b815260040161099390612cee565b600680549060006117a383612db3565b6001600160a01b0382166000908152600d6020526040812060018101546002820154909290918190611cef8787611a8a565b9054949793965094505050565b6000546001600160a01b03163314611d265760405162461bcd60e51b815260040161099390612dcc565b600355565b6000546001600160a01b03163314611d555760405162461bcd60e51b815260040161099390612dcc565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460009081906001600160a01b03163314611da65760405162461bcd60e51b815260040161099390612cee565b6001600160a01b0384166000908152600d602052604090206001810154848110611dec5784925084826001016000828254611de19190612caf565b90915550611df79050565b600060018301559150815b506001015491509250929050565b6001600160a01b0383166000908152600d602052604081208190819081611e2c8888611a8a565b825490915081158015611e40575060048110155b15611e58576000806004955095509550505050611f9f565b81158015611e64575086155b15611e7c576000806009955095509550505050611f9f565b6000600154600160a01b900460ff166002811115611e9c57611e9c6128d7565b14611f37576000600e6000600a60008154611eb690612db3565b9182905550815260208082019290925260409081016000206001600160601b038c16600160a01b81026001600160a01b038f169081178355600183018d905592518c8152919450927fa59837f9df3fb816613d84e8fefe31ec8d6e67ff43df6533e3f793a3f53aade9910160405180910390a35060019350611f9f92505050565b818710611f4f57611f488288612caf565b9550611f97565b611f598783612caf565b945060008360020154846001015411611f73576000611f87565b83600201548460010154611f879190612caf565b905080861115611f95578095505b505b506000925050505b93509350939050565b60006020825110611fbb57506020015190565b5060065b919050565b600060405160005b6014811015611fe75783811a81600c84010153600101611fcc565b505192915050565b6000546001600160a01b031633146103855760405162461bcd60e51b815260040161099390612dcc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b61204561241b565b600080546001600160a01b03199081166001600160a01b039889161790915560018054821696881696909617865560029490945560039290925542600455600780549093169416939093179055600991909155600b55565b600060405160005b60148110156120c0578481600c011a818301536001016120a5565b5060145b60208110156120dc5783811a818301536001016120c4565b50519392505050565b6001600160a01b0385166000908152600d60205260409020831561217457600061210f8787611a8a565b905080600003612154578154600180820184556000848152602090206002830401805491909216600c026101000a6001600160601b0381810219909216918916021790555b848260010160008282546121689190612cc2565b909155506122eb915050565b828160010160008282546121889190612caf565b909155505060008290036122eb5780545b80156122e9576001600160601b038616826121b5600184612caf565b815481106121c5576121c5612d5c565b600091825260209091206002820401546001909116600c026101000a90046001600160601b0316036122d7578154829061220190600190612caf565b8154811061221157612211612d5c565b600091825260209091206002820401546001918216600c026101000a90046001600160601b03169083906122459084612caf565b8154811061225557612255612d5c565b9060005260206000209060029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b03160217905550816000018054806122a1576122a1612e41565b60008281526020902060026000199092019182040180546001600160601b03600c60018516026101000a021916905590556122e9565b806122e181612e2a565b915050612199565b505b60006122f7878761209d565b90506000865b816123b5576123166001600160601b0382168685612442565b6000196001600160601b0382160161233157600191506122fd565b600154604051630fad06e960e11b81526001600160601b03831660048201526001600160a01b0390911690631f5a0dd29060240160e060405180830381865afa158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a69190612e67565b509495506122fd945050505050565b6001840154604080516001600160601b038b16815260208101889052908101919091526001600160a01b038a16907f70ca4ec64687bf265f39041896f3dbf10b9f650503cb38f2b3569fdce7489c369060600160405180910390a2505050505050505050565b612423612795565b61244057604051631afcd79f60e31b815260040160405180910390fd5b565b6000838152600c6020908152604080832084845260038101909252822054909181900361260f57831561260a57600182015460000361255d5750600281018054600180820183556000928352602090922081018590559081148015906124bc575081546124b0600183612caf565b6124ba9190612d88565b155b156125585781546000906124d09083612ed5565b60008181526004850160205260408120549192506124ef846001612cc2565b90508460020185600201848154811061250a5761250a612d5c565b60009182526020808320909101548354600181018555938352818320909301929092559384526004860180825260408086208690558486526003880183528086208490559285529052909120555b6125d8565b60018083018054909161256f91612caf565b8154811061257f5761257f612d5c565b906000526020600020015490508160010180548061259f5761259f612e41565b60019003818190600052602060002001600090559055838260020182815481106125cb576125cb612d5c565b6000918252602090912001555b6000838152600383016020908152604080832084905583835260048501909152902083905561260a85826001876127af565b611aeb565b836000036126ad57600082600201828154811061262e5761262e612d5c565b90600052602060002001549050600083600201838154811061265257612652612d5c565b60009182526020808320909101929092556001808601805491820181558252828220018490558581526003850182526040808220829055848252600486019092529081208190556126a79087908490846127af565b50611aeb565b8160020181815481106126c2576126c2612d5c565b90600052602060002001548414611aeb576000848360020183815481106126eb576126eb612d5c565b906000526020600020015411159050600081612731578584600201848154811061271757612717612d5c565b906000526020600020015461272c9190612caf565b61275c565b83600201838154811061274657612746612d5c565b90600052602060002001548661275c9190612caf565b90508584600201848154811061277457612774612d5c565b60009182526020909120015561278c878484846127af565b50505050505050565b600061279f612019565b54600160401b900460ff16919050565b6000848152600c60205260409020835b80156128645781546127d2600183612caf565b6127dc9190612ed5565b90508361281357828260020182815481106127f9576127f9612d5c565b906000526020600020015461280e9190612caf565b61283e565b8282600201828154811061282957612829612d5c565b906000526020600020015461283e9190612cc2565b82600201828154811061285357612853612d5c565b6000918252602090912001556127bf565b505050505050565b6001600160a01b038116811461038557600080fd5b6001600160601b038116811461038557600080fd5b6000806000606084860312156128ab57600080fd5b83356128b68161286c565b925060208401356128c681612881565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b8381526020810183905260608101600a831061290b5761290b6128d7565b826040830152949350505050565b6000806040838503121561292c57600080fd5b82356129378161286c565b946020939093013593505050565b60006020828403121561295757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261298557600080fd5b81356001600160401b0381111561299e5761299e61295e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156129cc576129cc61295e565b6040528181528382016020018510156129e457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612a1457600080fd5b8235915060208301356001600160401b03811115612a3157600080fd5b612a3d85828601612974565b9150509250929050565b600080600060608486031215612a5c57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612a8657600080fd5b8235612a918161286c565b915060208301356001600160401b03811115612a3157600080fd5b600060208284031215612abe57600080fd5b81356112858161286c565b602080825282518282018190526000918401906040840190835b81811015612b0a5783516001600160601b0316835260209384019390920191600101612ae3565b509095945050505050565b60008060008060008060c08789031215612b2e57600080fd5b8635612b398161286c565b95506020870135612b498161286c565b945060408701359350606087013592506080870135612b678161286c565b9598949750929591949360a090920135925050565b60005b83811015612b97578181015183820152602001612b7f565b50506000910152565b6020815260008251806020840152612bbf816040850160208701612b7c565b601f01601f19169190910160400192915050565b60008060408385031215612be657600080fd5b50508035926020909101359150565b60008060408385031215612c0857600080fd5b8235612c138161286c565b91506020830135612c2381612881565b809150509250929050565b600080600080600060a08688031215612c4657600080fd5b8535612c518161286c565b94506020860135612c6181612881565b94979496505050506040830135926060810135926080909101359150565b6020810160038310612c9357612c936128d7565b91905290565b634e487b7160e01b600052601160045260246000fd5b8181038181111561191857611918612c99565b8082018082111561191857611918612c99565b600060208284031215612ce757600080fd5b5051919050565b60208082526024908201527f416363657373206e6f7420616c6c6f7765643a204b6c65726f73436f7265206f60408201526337363c9760e11b606082015260800190565b6001600160a01b039390931683526001600160601b03919091166020830152604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612d9757612d97612d72565b500690565b808202811582820484141761191857611918612c99565b600060018201612dc557612dc5612c99565b5060010190565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60008251612e20818460208701612b7c565b9190910192915050565b600081612e3957612e39612c99565b506000190190565b634e487b7160e01b600052603160045260246000fd5b80518015158114611fbf57600080fd5b600080600080600080600060e0888a031215612e8257600080fd5b8751612e8d81612881565b9650612e9b60208901612e57565b604089015160608a015160808b015160a08c0151939950919750955093509150612ec760c08901612e57565b905092959891949750929550565b600082612ee457612ee4612d72565b50049056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212200186314699ae77a443609cfb006b9ef79adca12e964bddf2a243cc7bcac06f9264736f6c634300081c0033", - "devdoc": { - "details": "A factory of trees that keeps track of staked values for sortition.", - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "InvalidImplementation(address)": [ - { - "details": "The `implementation` is not UUPS-compliant" - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "LeftoverPNK(address,uint256)": { - "details": "Emitted when leftover PNK is available.", - "params": { - "_account": "The account of the juror.", - "_amount": "The amount of PNK available." - } - }, - "LeftoverPNKWithdrawn(address,uint256)": { - "details": "Emitted when leftover PNK is withdrawn.", - "params": { - "_account": "The account of the juror withdrawing PNK.", - "_amount": "The amount of PNK withdrawn." - } - }, - "StakeDelayed(address,uint96,uint256)": { - "params": { - "_address": "The address of the juror.", - "_amount": "The amount of tokens staked in the court.", - "_courtID": "The ID of the court." - } - }, - "StakeLocked(address,uint256,bool)": { - "params": { - "_address": "The address of the juror.", - "_relativeAmount": "The amount of tokens locked.", - "_unlock": "Whether the stake is locked or unlocked." - } - }, - "StakeSet(address,uint256,uint256,uint256)": { - "params": { - "_address": "The address of the juror.", - "_amount": "The amount of tokens staked in the court.", - "_amountAllCourts": "The amount of tokens staked in all courts.", - "_courtID": "The ID of the court." - } - }, - "Upgraded(address)": { - "details": "Emitted when the `implementation` has been successfully upgraded.", - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor of the contract.", - "params": { - "_governor": "The new governor." - } - }, - "changeMaxDrawingTime(uint256)": { - "details": "Changes the `maxDrawingTime` storage variable.", - "params": { - "_maxDrawingTime": "The new value for the `maxDrawingTime` storage variable." - } - }, - "changeMinStakingTime(uint256)": { - "details": "Changes the `minStakingTime` storage variable.", - "params": { - "_minStakingTime": "The new value for the `minStakingTime` storage variable." - } - }, - "changeRandomNumberGenerator(address,uint256)": { - "details": "Changes the `_rng` and `_rngLookahead` storage variables.", - "params": { - "_rng": "The new value for the `RNGenerator` storage variable.", - "_rngLookahead": "The new value for the `rngLookahead` storage variable." - } - }, - "constructor": { - "custom:oz-upgrades-unsafe-allow": "constructor" - }, - "createTree(bytes32,bytes)": { - "details": "Create a sortition sum tree at the specified key.", - "params": { - "_extraData": "Extra data that contains the number of children each node in the tree should have.", - "_key": "The key of the new tree." - } - }, - "draw(bytes32,uint256,uint256)": { - "details": "Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0.", - "params": { - "_coreDisputeID": "Index of the dispute in Kleros Core.", - "_key": "The key of the tree.", - "_nonce": "Nonce to hash with random number." - }, - "returns": { - "drawnAddress": "The drawn address. `O(k * log_k(n))` where `k` is the maximum number of children per node in the tree, and `n` is the maximum number of nodes ever appended." - } - }, - "executeDelayedStakes(uint256)": { - "details": "Executes the next delayed stakes.", - "params": { - "_iterations": "The number of delayed stakes to execute." - } - }, - "getJurorCourtIDs(address)": { - "details": "Gets the court identifiers where a specific `_juror` has staked.", - "params": { - "_juror": "The address of the juror." - } - }, - "initialize(address,address,uint256,uint256,address,uint256)": { - "details": "Initializer (constructor equivalent for upgradable contracts).", - "params": { - "_core": "The KlerosCore.", - "_governor": "The governor.", - "_maxDrawingTime": "Time after which the drawing phase can be switched", - "_minStakingTime": "Minimal time to stake", - "_rng": "The random number generator.", - "_rngLookahead": "Lookahead value for rng." - } - }, - "notifyRandomNumber(uint256)": { - "details": "Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase().", - "params": { - "_randomNumber": "Random number returned by RNG contract." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "setJurorInactive(address)": { - "details": "Unstakes the inactive juror from all courts. `O(n * (p * log_k(j)) )` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.", - "params": { - "_account": "The juror to unstake." - } - }, - "setStake(address,uint96,uint256,uint256,uint256)": { - "details": "Update the state of the stakes, called by KC at the end of setStake flow. `O(n + p * log_k(j))` where `n` is the number of courts the juror has staked in, `p` is the depth of the court tree, `k` is the minimum number of children per node of one of these courts' sortition sum tree, and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously.", - "params": { - "_account": "The address of the juror.", - "_courtID": "The ID of the court.", - "_newStake": "The new stake.", - "_pnkDeposit": "The amount of PNK to be deposited.", - "_pnkWithdrawal": "The amount of PNK to be withdrawn." - } - }, - "stakeOf(address,uint96)": { - "details": "Get the stake of a juror in a court.", - "params": { - "_courtID": "The ID of the court.", - "_juror": "The address of the juror." - }, - "returns": { - "_0": "value The stake of the juror in the court." - } - }, - "stakeOf(bytes32,bytes32)": { - "details": "Get the stake of a juror in a court.", - "params": { - "_ID": "The stake path ID, corresponding to a juror.", - "_key": "The key of the tree, corresponding to a court." - }, - "returns": { - "_0": "The stake of the juror in the court." - } - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "validateStake(address,uint96,uint256)": { - "details": "Validate the specified juror's new stake for a court. Note: no state changes should be made when returning stakingResult != Successful, otherwise delayed stakes might break invariants.", - "params": { - "_account": "The address of the juror.", - "_courtID": "The ID of the court.", - "_newStake": "The new stake." - }, - "returns": { - "pnkDeposit": "The amount of PNK to be deposited.", - "pnkWithdrawal": "The amount of PNK to be withdrawn.", - "stakingResult": "The result of the staking operation." - } - }, - "withdrawLeftoverPNK(address)": { - "details": "Gives back the locked PNKs in case the juror fully unstaked earlier. Note that since locked and staked PNK are async it is possible for the juror to have positive staked PNK balance while having 0 stake in courts and 0 locked tokens (eg. when the juror fully unstaked during dispute and later got his tokens unlocked). In this case the juror can use this function to withdraw the leftover tokens. Also note that if the juror has some leftover PNK while not fully unstaked he'll have to manually unstake from all courts to trigger this function.", - "params": { - "_account": "The juror whose PNK to withdraw." - } - } - }, - "stateVariables": { - "version": { - "details": "Returns the version of the implementation.", - "return": "Version string.", - "returns": { - "_0": "Version string." - } - } - }, - "title": "SortitionModule", - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ] - }, - "events": { - "StakeDelayed(address,uint96,uint256)": { - "notice": "Emitted when a juror's stake is delayed." - }, - "StakeLocked(address,uint256,bool)": { - "notice": "Emitted when a juror's stake is locked." - }, - "StakeSet(address,uint256,uint256,uint256)": { - "notice": "Emitted when a juror stakes in a court." - } - }, - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 3983, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 3986, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "core", - "offset": 0, - "slot": "1", - "type": "t_contract(KlerosCore)165" - }, - { - "astId": 3989, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "phase", - "offset": 20, - "slot": "1", - "type": "t_enum(Phase)8980" - }, - { - "astId": 3991, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "minStakingTime", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 3993, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "maxDrawingTime", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 3995, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "lastPhaseChange", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 3997, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "randomNumberRequestBlock", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 3999, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "disputesWithoutJurors", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 4002, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "rng", - "offset": 0, - "slot": "7", - "type": "t_contract(RNG)9731" - }, - { - "astId": 4004, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "randomNumber", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 4006, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "rngLookahead", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 4008, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "delayedStakeWriteIndex", - "offset": 0, - "slot": "10", - "type": "t_uint256" - }, - { - "astId": 4010, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "delayedStakeReadIndex", - "offset": 0, - "slot": "11", - "type": "t_uint256" - }, - { - "astId": 4015, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "sortitionSumTrees", - "offset": 0, - "slot": "12", - "type": "t_mapping(t_bytes32,t_struct(SortitionSumTree)3964_storage)" - }, - { - "astId": 4020, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "jurors", - "offset": 0, - "slot": "13", - "type": "t_mapping(t_address,t_struct(Juror)3981_storage)" - }, - { - "astId": 4025, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "delayedStakes", - "offset": 0, - "slot": "14", - "type": "t_mapping(t_uint256,t_struct(DelayedStake)3973_storage)" - }, - { - "astId": 4031, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "latestDelayedStakeIndex", - "offset": 0, - "slot": "15", - "type": "t_mapping(t_address,t_mapping(t_uint96,t_uint256))" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_array(t_uint96)dyn_storage": { - "base": "t_uint96", - "encoding": "dynamic_array", - "label": "uint96[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_contract(KlerosCore)165": { - "encoding": "inplace", - "label": "contract KlerosCore", - "numberOfBytes": "20" - }, - "t_contract(RNG)9731": { - "encoding": "inplace", - "label": "contract RNG", - "numberOfBytes": "20" - }, - "t_enum(Phase)8980": { - "encoding": "inplace", - "label": "enum ISortitionModule.Phase", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_mapping(t_uint96,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint96 => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint96,t_uint256)" - }, - "t_mapping(t_address,t_struct(Juror)3981_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct SortitionModuleBase.Juror)", - "numberOfBytes": "32", - "value": "t_struct(Juror)3981_storage" - }, - "t_mapping(t_bytes32,t_struct(SortitionSumTree)3964_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct SortitionModuleBase.SortitionSumTree)", - "numberOfBytes": "32", - "value": "t_struct(SortitionSumTree)3964_storage" - }, - "t_mapping(t_bytes32,t_uint256)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_uint256,t_bytes32)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bytes32)", - "numberOfBytes": "32", - "value": "t_bytes32" - }, - "t_mapping(t_uint256,t_struct(DelayedStake)3973_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => struct SortitionModuleBase.DelayedStake)", - "numberOfBytes": "32", - "value": "t_struct(DelayedStake)3973_storage" - }, - "t_mapping(t_uint96,t_uint256)": { - "encoding": "mapping", - "key": "t_uint96", - "label": "mapping(uint96 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DelayedStake)3973_storage": { - "encoding": "inplace", - "label": "struct SortitionModuleBase.DelayedStake", - "members": [ - { - "astId": 3966, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 3968, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "courtID", - "offset": 20, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 3970, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "stake", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 3972, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "alreadyTransferred", - "offset": 0, - "slot": "2", - "type": "t_bool" - } - ], - "numberOfBytes": "96" - }, - "t_struct(Juror)3981_storage": { - "encoding": "inplace", - "label": "struct SortitionModuleBase.Juror", - "members": [ - { - "astId": 3976, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "courtIDs", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint96)dyn_storage" - }, - { - "astId": 3978, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "stakedPnk", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 3980, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "lockedPnk", - "offset": 0, - "slot": "2", - "type": "t_uint256" - } - ], - "numberOfBytes": "96" - }, - "t_struct(SortitionSumTree)3964_storage": { - "encoding": "inplace", - "label": "struct SortitionModuleBase.SortitionSumTree", - "members": [ - { - "astId": 3949, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "K", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 3952, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "stack", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 3955, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "nodes", - "offset": 0, - "slot": "2", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 3959, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "IDsToNodeIndexes", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes32,t_uint256)" - }, - { - "astId": 3963, - "contract": "src/arbitration/SortitionModule.sol:SortitionModule", - "label": "nodeIndexesToIDs", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_bytes32)" - } - ], - "numberOfBytes": "160" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/SortitionModule_Proxy.json b/contracts/deployments/arbitrumSepoliaDevnet/SortitionModule_Proxy.json deleted file mode 100644 index 722ae5daf..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/SortitionModule_Proxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "address": "0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x9578634d10e5620603f87662e9739fb13f6913ed7f669662f15188dfe9cf8a0b", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663", - "transactionIndex": 1, - "gasUsed": "332814", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100004000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3ea136a5325825c86d23b94003b2a561cfa59dd0cd87bc49909dad568b5eb697", - "transactionHash": "0x9578634d10e5620603f87662e9739fb13f6913ed7f669662f15188dfe9cf8a0b", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 175286083, - "transactionHash": "0x9578634d10e5620603f87662e9739fb13f6913ed7f669662f15188dfe9cf8a0b", - "address": "0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x3ea136a5325825c86d23b94003b2a561cfa59dd0cd87bc49909dad568b5eb697" - } - ], - "blockNumber": 175286083, - "cumulativeGasUsed": "332814", - "status": 1, - "byzantium": true - }, - "args": [ - "0xBe984dc03B4A8d5135BCc07b46fdB867e02BA1F3", - "0x54812d17000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c590000000000000000000000001bd44c4a4511dbfa7dc1d5bc201635596e7200f900000000000000000000000000000000000000000000000000000000000000b400000000000000000000000000000000000000000000000000000000000002580000000000000000000000007e40f5ac809521654a9c17e442f2a0a5a4d890fa0000000000000000000000000000000000000000000000000000000000000014" - ], - "numDeployments": 1, - "solcInputHash": "3f11dda26fe559c44d21b324a34af1b7", - "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/KlerosProxies.sol\":\"SortitionModuleProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/KlerosProxies.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport \\\"./UUPSProxy.sol\\\";\\n\\n/// Workaround to get meaningful names for the proxy contracts\\n/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers\\n\\ncontract DisputeKitClassicNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitClassicProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitGatedShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitShutterProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeKitSybilResistantProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract DisputeTemplateRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract EvidenceModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract ForeignGatewayOnEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract HomeGatewayToEthereumProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreRulerProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract KlerosCoreProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract PolicyRegistryProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract RandomizerRNGProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleNeoProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleUniversityProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\\ncontract SortitionModuleProxy is UUPSProxy {\\n constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {}\\n}\\n\",\"keccak256\":\"0xc4b339597d3141b25664fd25d91a78bed6d61220fa0ea63f0116be7a0cc53fbf\",\"license\":\"MIT\"},\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\n/// @title UUPS Proxy\\n/// @author Simon Malatrait \\n/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n/// @dev Adapted from \\ncontract UUPSProxy {\\n /// @dev Storage slot with the address of the current implementation.\\n /// This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n /// validated in the constructor.\\n /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n /// function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Delegates the current call to `implementation`.\\n /// NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /// @dev Fallback function that delegates calls to the address returned by `_implementation()`.\\n /// @dev Will run if no other function in the contract matches the call data.\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x0c2cf69714fddf4aaae7dadd53afe0c376178953313ce5b3af72b834e46b2c77\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161030838038061030883398101604081905261002f91610151565b8181817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010e576000826001600160a01b0316826040516100779190610225565b600060405180830381855af49150503d80600081146100b2576040519150601f19603f3d011682016040523d82523d6000602084013e6100b7565b606091505b505090508061010c5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b50505050610241565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610148578181015183820152602001610130565b50506000910152565b6000806040838503121561016457600080fd5b82516001600160a01b038116811461017b57600080fd5b60208401519092506001600160401b0381111561019757600080fd5b8301601f810185136101a857600080fd5b80516001600160401b038111156101c1576101c1610117565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ef576101ef610117565b60405281815282820160200187101561020757600080fd5b61021882602083016020860161012d565b8093505050509250929050565b6000825161023781846020870161012d565b9190910192915050565b60b98061024f6000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220f2e3563554b18c2c9587081d72ef7797df12f887fb52d3ccfb244524903568c364736f6c634300081c0033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220f2e3563554b18c2c9587081d72ef7797df12f887fb52d3ccfb244524903568c364736f6c634300081c0033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/TransactionBatcher.json b/contracts/deployments/arbitrumSepoliaDevnet/TransactionBatcher.json deleted file mode 100644 index 6372364e0..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/TransactionBatcher.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "address": "0x35f93986950804ac1F93519BF68C2a7Dd776db0E", - "abi": [ - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "datas", - "type": "bytes[]" - } - ], - "name": "batchSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "datas", - "type": "bytes[]" - } - ], - "name": "batchSendUnchecked", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "transactionHash": "0x3c4a6f233fda3dc940b9aba1e04ee5993b515e4834b73365c4cd613718db46b2", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x35f93986950804ac1F93519BF68C2a7Dd776db0E", - "transactionIndex": 2, - "gasUsed": "3685628", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xe9853220bdd1f19aee5024da03ad2d91d98090a74ab599bdcf2af279f02d9744", - "transactionHash": "0x3c4a6f233fda3dc940b9aba1e04ee5993b515e4834b73365c4cd613718db46b2", - "logs": [], - "blockNumber": 66236728, - "cumulativeGasUsed": "5055051", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "036e2ca71d8ebdd78fd6317e15ba1f3c", - "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"datas\",\"type\":\"bytes[]\"}],\"name\":\"batchSend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"datas\",\"type\":\"bytes[]\"}],\"name\":\"batchSendUnchecked\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/TransactionBatcher.sol\":\"TransactionBatcher\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/utils/TransactionBatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// Adapted from https://github.com/daostack/web3-transaction-batcher/blob/1b88d2ea062f8f2d9fdfdf9bbe85d2bbef780151/contracts/Batcher.sol\\n\\ncontract TransactionBatcher {\\n\\n function batchSend(address[] memory targets, uint256[] memory values, bytes[] memory datas) public payable {\\n for (uint256 i = 0; i < targets.length; i++) {\\n (bool success,) = targets[i].call{value: values[i]}(datas[i]);\\n if (!success) revert('transaction failed'); // All the calls must succeed.\\n }\\n }\\n\\n function batchSendUnchecked(address[] memory targets, uint256[] memory values, bytes[] memory datas) public payable {\\n for (uint256 i = 0; i < targets.length; i++) {\\n targets[i].call{value: values[i]}(datas[i]); // Intentionally ignoring return value.\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1983237012c29ef487ca47d60b197eb30d5b072ffec3078685d43fcc5fcc10a0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561000f575f80fd5b506105238061001d5f395ff3fe608060405260043610610028575f3560e01c8063a8f0802e1461002c578063cef591aa14610041575b5f80fd5b61003f61003a3660046103c4565b610054565b005b61003f61004f3660046103c4565b61015c565b5f5b8351811015610156575f848281518110610072576100726104ad565b60200260200101516001600160a01b0316848381518110610095576100956104ad565b60200260200101518484815181106100af576100af6104ad565b60200260200101516040516100c491906104c1565b5f6040518083038185875af1925050503d805f81146100fe576040519150601f19603f3d011682016040523d82523d5f602084013e610103565b606091505b505090508061014d5760405162461bcd60e51b81526020600482015260126024820152711d1c985b9cd858dd1a5bdb8819985a5b195960721b604482015260640160405180910390fd5b50600101610056565b50505050565b5f5b835181101561015657838181518110610179576101796104ad565b60200260200101516001600160a01b031683828151811061019c5761019c6104ad565b60200260200101518383815181106101b6576101b66104ad565b60200260200101516040516101cb91906104c1565b5f6040518083038185875af1925050503d805f8114610205576040519150601f19603f3d011682016040523d82523d5f602084013e61020a565b606091505b50505060010161015e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561025257610252610215565b604052919050565b5f67ffffffffffffffff82111561027357610273610215565b5060051b60200190565b5f82601f83011261028c575f80fd5b813560206102a161029c8361025a565b610229565b8083825260208201915060208460051b8701019350868411156102c2575f80fd5b602086015b848110156102de57803583529183019183016102c7565b509695505050505050565b5f601f83601f8401126102fa575f80fd5b8235602061030a61029c8361025a565b82815260059290921b85018101918181019087841115610328575f80fd5b8287015b848110156103b857803567ffffffffffffffff8082111561034b575f80fd5b818a0191508a603f83011261035e575f80fd5b8582013560408282111561037457610374610215565b610385828b01601f19168901610229565b92508183528c8183860101111561039a575f80fd5b8181850189850137505f90820187015284525091830191830161032c565b50979650505050505050565b5f805f606084860312156103d6575f80fd5b833567ffffffffffffffff808211156103ed575f80fd5b818601915086601f830112610400575f80fd5b8135602061041061029c8361025a565b82815260059290921b8401810191818101908a84111561042e575f80fd5b948201945b838610156104605785356001600160a01b0381168114610451575f80fd5b82529482019490820190610433565b97505087013592505080821115610475575f80fd5b6104818783880161027d565b93506040860135915080821115610496575f80fd5b506104a3868287016102e9565b9150509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82515f5b818110156104e057602081860181015185830152016104c6565b505f92019182525091905056fea264697066735822122089797200888ad757484ded7bc0ffbb0769e9e974d73188d61385b7f6675e9f2064736f6c63430008180033", - "deployedBytecode": "0x608060405260043610610028575f3560e01c8063a8f0802e1461002c578063cef591aa14610041575b5f80fd5b61003f61003a3660046103c4565b610054565b005b61003f61004f3660046103c4565b61015c565b5f5b8351811015610156575f848281518110610072576100726104ad565b60200260200101516001600160a01b0316848381518110610095576100956104ad565b60200260200101518484815181106100af576100af6104ad565b60200260200101516040516100c491906104c1565b5f6040518083038185875af1925050503d805f81146100fe576040519150601f19603f3d011682016040523d82523d5f602084013e610103565b606091505b505090508061014d5760405162461bcd60e51b81526020600482015260126024820152711d1c985b9cd858dd1a5bdb8819985a5b195960721b604482015260640160405180910390fd5b50600101610056565b50505050565b5f5b835181101561015657838181518110610179576101796104ad565b60200260200101516001600160a01b031683828151811061019c5761019c6104ad565b60200260200101518383815181106101b6576101b66104ad565b60200260200101516040516101cb91906104c1565b5f6040518083038185875af1925050503d805f8114610205576040519150601f19603f3d011682016040523d82523d5f602084013e61020a565b606091505b50505060010161015e565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561025257610252610215565b604052919050565b5f67ffffffffffffffff82111561027357610273610215565b5060051b60200190565b5f82601f83011261028c575f80fd5b813560206102a161029c8361025a565b610229565b8083825260208201915060208460051b8701019350868411156102c2575f80fd5b602086015b848110156102de57803583529183019183016102c7565b509695505050505050565b5f601f83601f8401126102fa575f80fd5b8235602061030a61029c8361025a565b82815260059290921b85018101918181019087841115610328575f80fd5b8287015b848110156103b857803567ffffffffffffffff8082111561034b575f80fd5b818a0191508a603f83011261035e575f80fd5b8582013560408282111561037457610374610215565b610385828b01601f19168901610229565b92508183528c8183860101111561039a575f80fd5b8181850189850137505f90820187015284525091830191830161032c565b50979650505050505050565b5f805f606084860312156103d6575f80fd5b833567ffffffffffffffff808211156103ed575f80fd5b818601915086601f830112610400575f80fd5b8135602061041061029c8361025a565b82815260059290921b8401810191818101908a84111561042e575f80fd5b948201945b838610156104605785356001600160a01b0381168114610451575f80fd5b82529482019490820190610433565b97505087013592505080821115610475575f80fd5b6104818783880161027d565b93506040860135915080821115610496575f80fd5b506104a3868287016102e9565b9150509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82515f5b818110156104e057602081860181015185830152016104c6565b505f92019182525091905056fea264697066735822122089797200888ad757484ded7bc0ffbb0769e9e974d73188d61385b7f6675e9f2064736f6c63430008180033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/WETH.json b/contracts/deployments/arbitrumSepoliaDevnet/WETH.json deleted file mode 100644 index 88c25ffd4..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/WETH.json +++ /dev/null @@ -1,458 +0,0 @@ -{ - "address": "0x3829A2486d53ee984a0ca2D76552715726b77138", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "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": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xf0f89ebb30e850b7c573ab0fa6b56ee46381de866cddc3afbaf3dbb60f632e17", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x3829A2486d53ee984a0ca2D76552715726b77138", - "transactionIndex": 1, - "gasUsed": "621542", - "logsBloom": "0x00000020000000000000000000000000000000000040000000000000000008000000000000000000000000000000000000000000000080000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000002000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3706ffb00d4b8e4f33496fbf5465bcd47767393e5e57a2d231c98109bed29ad2", - "transactionHash": "0xf0f89ebb30e850b7c573ab0fa6b56ee46381de866cddc3afbaf3dbb60f632e17", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 3084557, - "transactionHash": "0xf0f89ebb30e850b7c573ab0fa6b56ee46381de866cddc3afbaf3dbb60f632e17", - "address": "0x3829A2486d53ee984a0ca2D76552715726b77138", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "logIndex": 0, - "blockHash": "0x3706ffb00d4b8e4f33496fbf5465bcd47767393e5e57a2d231c98109bed29ad2" - } - ], - "blockNumber": 3084557, - "cumulativeGasUsed": "621542", - "status": 1, - "byzantium": true - }, - "args": [ - "WETH", - "WETH" - ], - "numDeployments": 1, - "solcInputHash": "4ee8a1f2013c130bec1668c5304bc76a", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/TestERC20.sol\":\"TestERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(address from, address to, uint256 amount) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(address owner, address spender, uint256 amount) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\"},\"src/token/TestERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\ncontract TestERC20 is ERC20 {\\n constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {\\n _mint(msg.sender, 1000000 ether);\\n }\\n}\\n\",\"keccak256\":\"0x9f67e6b63ca87e6c98b2986364ce16a747ce4098e9146fffb17ea13863c0b7e4\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b5060405162000c5838038062000c5883398101604081905262000034916200020a565b8181600362000044838262000302565b50600462000053828262000302565b505050620000723369d3c21bcecceda10000006200007a60201b60201c565b5050620003f6565b6001600160a01b038216620000d55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e99190620003ce565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016d57600080fd5b81516001600160401b03808211156200018a576200018a62000145565b604051601f8301601f19908116603f01168101908282118183101715620001b557620001b562000145565b81604052838152602092508683858801011115620001d257600080fd5b600091505b83821015620001f65785820183015181830184015290820190620001d7565b600093810190920192909252949350505050565b600080604083850312156200021e57600080fd5b82516001600160401b03808211156200023657600080fd5b62000244868387016200015b565b935060208501519150808211156200025b57600080fd5b506200026a858286016200015b565b9150509250929050565b600181811c908216806200028957607f821691505b602082108103620002aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200014057600081815260208120601f850160051c81016020861015620002d95750805b601f850160051c820191505b81811015620002fa57828155600101620002e5565b505050505050565b81516001600160401b038111156200031e576200031e62000145565b62000336816200032f845462000274565b84620002b0565b602080601f8311600181146200036e5760008415620003555750858301515b600019600386901b1c1916600185901b178555620002fa565b600085815260208120601f198616915b828110156200039f578886015182559484019460019091019084016200037e565b5085821015620003be5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620003f057634e487b7160e01b600052601160045260246000fd5b92915050565b61085280620004066000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea26469706673582212203a956e65a766c03ac95ae037cbdfb51b56810340c98132c2d2482405d386101b64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea26469706673582212203a956e65a766c03ac95ae037cbdfb51b56810340c98132c2d2482405d386101b64736f6c63430008120033", - "devdoc": { - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "decreaseAllowance(address,uint256)": { - "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." - }, - "increaseAllowance(address,uint256)": { - "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address." - }, - "name()": { - "details": "Returns the name of the token." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 393, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 399, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 401, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 403, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - }, - { - "astId": 405, - "contract": "src/token/TestERC20.sol:TestERC20", - "label": "_symbol", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/arbitrumSepoliaDevnet/WETHFaucet.json b/contracts/deployments/arbitrumSepoliaDevnet/WETHFaucet.json deleted file mode 100644 index fe929d76f..000000000 --- a/contracts/deployments/arbitrumSepoliaDevnet/WETHFaucet.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "address": "0x6F8C10E0030aDf5B8030a5E282F026ADdB6525fd", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "amount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "changeAmount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "request", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "withdrewAlready", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x0423f037522d0e7b089888b96380759c03ed6c37194b1430dd9dbb9553bb21f4", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x6F8C10E0030aDf5B8030a5E282F026ADdB6525fd", - "transactionIndex": 1, - "gasUsed": "435555", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x10da554e89dfb82bec4585c6d18d57a32834b446e09bcae17fdc8594e8f3ed81", - "transactionHash": "0x0423f037522d0e7b089888b96380759c03ed6c37194b1430dd9dbb9553bb21f4", - "logs": [], - "blockNumber": 3084559, - "cumulativeGasUsed": "435555", - "status": 1, - "byzantium": true - }, - "args": [ - "0x3829A2486d53ee984a0ca2D76552715726b77138" - ], - "numDeployments": 1, - "solcInputHash": "4ee8a1f2013c130bec1668c5304bc76a", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"amount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"changeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"withdrewAlready\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/Faucet.sol\":\"Faucet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/token/Faucet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ncontract Faucet {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n IERC20 public token;\\n address public governor;\\n mapping(address => bool) public withdrewAlready;\\n uint256 public amount = 10_000 ether;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(governor) == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n constructor(IERC20 _token) {\\n token = _token;\\n governor = msg.sender;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n function changeGovernor(address _governor) public onlyByGovernor {\\n governor = _governor;\\n }\\n\\n function changeAmount(uint256 _amount) public onlyByGovernor {\\n amount = _amount;\\n }\\n\\n function withdraw() public onlyByGovernor {\\n token.transfer(governor, token.balanceOf(address(this)));\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function request() public {\\n require(\\n !withdrewAlready[msg.sender],\\n \\\"You have used this faucet already. If you need more tokens, please use another address.\\\"\\n );\\n token.transfer(msg.sender, amount);\\n withdrewAlready[msg.sender] = true;\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n function balance() public view returns (uint) {\\n return token.balanceOf(address(this));\\n }\\n}\\n\",\"keccak256\":\"0x3a54681cc304ccbfdb42215104b63809919a432ac5d3986d3021a11fcc7a1cc3\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405269021e19e0c9bab240000060035534801561001e57600080fd5b5060405161065538038061065583398101604081905261003d9161006b565b600080546001600160a01b039092166001600160a01b0319928316179055600180549091163317905561009b565b60006020828403121561007d57600080fd5b81516001600160a01b038116811461009457600080fd5b9392505050565b6105ab806100aa6000396000f3fe608060405234801561001057600080fd5b50600436106100835760003560e01c80630c340a2414610088578063338cdca1146100b15780633ccfd60b146100bb5780635c320516146100c3578063aa8c217c146100d6578063b69ef8a8146100ed578063d61c40dc146100f5578063e4c0aaf414610128578063fc0c546a1461013b575b600080fd5b60015461009b906001600160a01b031681565b6040516100a8919061049b565b60405180910390f35b6100b961014e565b005b6100b961028f565b6100b96100d13660046104af565b6103a9565b6100df60035481565b6040519081526020016100a8565b6100df6103d8565b6101186101033660046104c8565b60026020526000908152604090205460ff1681565b60405190151581526020016100a8565b6100b96101363660046104c8565b61044f565b60005461009b906001600160a01b031681565b3360009081526002602052604090205460ff16156101f95760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a4015b60405180910390fd5b60005460035460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027291906104f8565b50336000908152600260205260409020805460ff19166001179055565b6001546001600160a01b031633146102b95760405162461bcd60e51b81526004016101f09061051a565b6000546001546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906102f690309060040161049b565b602060405180830381865afa158015610313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610337919061055c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a691906104f8565b50565b6001546001600160a01b031633146103d35760405162461bcd60e51b81526004016101f09061051a565b600355565b600080546040516370a0823160e01b81526001600160a01b03909116906370a082319061040990309060040161049b565b602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a919061055c565b905090565b6001546001600160a01b031633146104795760405162461bcd60e51b81526004016101f09061051a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0391909116815260200190565b6000602082840312156104c157600080fd5b5035919050565b6000602082840312156104da57600080fd5b81356001600160a01b03811681146104f157600080fd5b9392505050565b60006020828403121561050a57600080fd5b815180151581146104f157600080fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60006020828403121561056e57600080fd5b505191905056fea26469706673582212204f7fd812260eacd88f23b436eb40b4943480e914005f0a0f2738f0d3c9696a5964736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100835760003560e01c80630c340a2414610088578063338cdca1146100b15780633ccfd60b146100bb5780635c320516146100c3578063aa8c217c146100d6578063b69ef8a8146100ed578063d61c40dc146100f5578063e4c0aaf414610128578063fc0c546a1461013b575b600080fd5b60015461009b906001600160a01b031681565b6040516100a8919061049b565b60405180910390f35b6100b961014e565b005b6100b961028f565b6100b96100d13660046104af565b6103a9565b6100df60035481565b6040519081526020016100a8565b6100df6103d8565b6101186101033660046104c8565b60026020526000908152604090205460ff1681565b60405190151581526020016100a8565b6100b96101363660046104c8565b61044f565b60005461009b906001600160a01b031681565b3360009081526002602052604090205460ff16156101f95760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a4015b60405180910390fd5b60005460035460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027291906104f8565b50336000908152600260205260409020805460ff19166001179055565b6001546001600160a01b031633146102b95760405162461bcd60e51b81526004016101f09061051a565b6000546001546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a08231906102f690309060040161049b565b602060405180830381865afa158015610313573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610337919061055c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a691906104f8565b50565b6001546001600160a01b031633146103d35760405162461bcd60e51b81526004016101f09061051a565b600355565b600080546040516370a0823160e01b81526001600160a01b03909116906370a082319061040990309060040161049b565b602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a919061055c565b905090565b6001546001600160a01b031633146104795760405162461bcd60e51b81526004016101f09061051a565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0391909116815260200190565b6000602082840312156104c157600080fd5b5035919050565b6000602082840312156104da57600080fd5b81356001600160a01b03811681146104f157600080fd5b9392505050565b60006020828403121561050a57600080fd5b815180151581146104f157600080fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b60006020828403121561056e57600080fd5b505191905056fea26469706673582212204f7fd812260eacd88f23b436eb40b4943480e914005f0a0f2738f0d3c9696a5964736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 24559, - "contract": "src/token/Faucet.sol:Faucet", - "label": "token", - "offset": 0, - "slot": "0", - "type": "t_contract(IERC20)1042" - }, - { - "astId": 24561, - "contract": "src/token/Faucet.sol:Faucet", - "label": "governor", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 24565, - "contract": "src/token/Faucet.sol:Faucet", - "label": "withdrewAlready", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 24568, - "contract": "src/token/Faucet.sol:Faucet", - "label": "amount", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20)1042": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/chiado/.chainId b/contracts/deployments/chiado/.chainId deleted file mode 100644 index 6cd35a3ed..000000000 --- a/contracts/deployments/chiado/.chainId +++ /dev/null @@ -1 +0,0 @@ -10200 \ No newline at end of file diff --git a/contracts/deployments/chiado/ArbitrableExample.json b/contracts/deployments/chiado/ArbitrableExample.json deleted file mode 100644 index 76e24b60d..000000000 --- a/contracts/deployments/chiado/ArbitrableExample.json +++ /dev/null @@ -1,618 +0,0 @@ -{ - "address": "0x438ca5337AE771dF926B7f4fDE1A21D72a315bDC", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - }, - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_weth", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "string", - "name": "_action", - "type": "string" - } - ], - "name": "Action", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_arbitrableDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateUri", - "type": "string" - } - ], - "name": "DisputeRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "arbitratorExtraData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - } - ], - "name": "changeArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - } - ], - "name": "changeArbitratorExtraData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "changeDisputeTemplate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "name": "changeTemplateRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_action", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_feeInWeth", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_action", - "type": "string" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "bool", - "name": "isRuled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numberOfRulingOptions", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "externalIDtoLocalID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templateId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "templateRegistry", - "outputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "weth", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xb80cf6c0fdeb89b1d06dd578eb16605fcd7292efa8a03ce26b6202d878c9219e", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x438ca5337AE771dF926B7f4fDE1A21D72a315bDC", - "transactionIndex": 1, - "gasUsed": "1330807", - "logsBloom": "0x00200000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000140000000000000400000000000000000000000000000000040000000000000000000000000000000000000000000000000000080000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000400000000000100000000000000000000000000000000000000", - "blockHash": "0x569ff7342255f7286ee23ac31d3104c4e0318d9476d04c139242fa775927f4ae", - "transactionHash": "0xb80cf6c0fdeb89b1d06dd578eb16605fcd7292efa8a03ce26b6202d878c9219e", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 5418565, - "transactionHash": "0xb80cf6c0fdeb89b1d06dd578eb16605fcd7292efa8a03ce26b6202d878c9219e", - "address": "0xA55D4b90c1F8D1fD0408232bF6FA498dD6786385", - "topics": [ - "0x00f7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff9924", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6469737075746554656d706c6174654d617070696e673a20544f444f00000000", - "logIndex": 0, - "blockHash": "0x569ff7342255f7286ee23ac31d3104c4e0318d9476d04c139242fa775927f4ae" - } - ], - "blockNumber": 5418565, - "cumulativeGasUsed": "1358031", - "status": 1, - "byzantium": true - }, - "args": [ - "0x2824bdcc752b1272D56A84be03A74Ee856C06e43", - { - "$schema": "../NewDisputeTemplate.schema.json", - "title": "Let's do this", - "description": "We want to do this: %s", - "question": "Does it comply with the policy?", - "answers": [ - { - "title": "Yes", - "description": "Select this if you agree that it must be done." - }, - { - "title": "No", - "description": "Select this if you do not agree that it must be done." - } - ], - "policyURI": "/ipfs/Qmdvk...rSD6cE/policy.pdf", - "frontendUrl": "https://kleros-v2.netlify.app/#/cases/%s/overview", - "arbitratorChainID": "421613", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", - "category": "Others", - "specification": "KIP001", - "lang": "en_US" - }, - "disputeTemplateMapping: TODO", - "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003", - "0xA55D4b90c1F8D1fD0408232bF6FA498dD6786385", - "0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8" - ], - "numDeployments": 5, - "solcInputHash": "7e0c306a4451043d6e53d94781f5594c", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_weth\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"_action\",\"type\":\"string\"}],\"name\":\"Action\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_arbitrableDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateUri\",\"type\":\"string\"}],\"name\":\"DisputeRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbitratorExtraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"}],\"name\":\"changeArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"}],\"name\":\"changeArbitratorExtraData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"changeDisputeTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_action\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_feeInWeth\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_action\",\"type\":\"string\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isRuled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRulingOptions\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"externalIDtoLocalID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DisputeRequest(address,uint256,uint256,uint256,string)\":{\"details\":\"To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\",\"params\":{\"_arbitrableDisputeID\":\"The identifier of the dispute in the Arbitrable contract.\",\"_arbitrator\":\"The arbitrator of the contract.\",\"_externalDisputeID\":\"An identifier created outside Kleros by the protocol requesting arbitration.\",\"_templateId\":\"The identifier of the dispute template. Should not be used with _templateUri.\",\"_templateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrator\":\"The arbitrator giving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_arbitrator\":\"The arbitrator to rule on created disputes.\",\"_arbitratorExtraData\":\"The extra data for the arbitrator.\",\"_templateData\":\"The dispute template data.\",\"_templateDataMappings\":\"The dispute template data mappings.\",\"_templateRegistry\":\"The dispute template registry.\",\"_weth\":\"The WETH token.\"}},\"createDispute(string)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_action\":\"The action that requires arbitration.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the dispute created.\"}},\"createDispute(string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_action\":\"The action that requires arbitration.\",\"_feeInWeth\":\"Amount of fees in WETH for the arbitrator.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the dispute created.\"}},\"rule(uint256,uint256)\":{\"details\":\"To be called by the arbitrator of the dispute, to declare the winning ruling.\",\"params\":{\"_externalDisputeID\":\"ID of the dispute in arbitrator contract.\",\"_ruling\":\"The ruling choice of the arbitration.\"}}},\"title\":\"ArbitrableExample An example of an arbitrable contract which connects to the arbitator that implements the updated interface.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/arbitrables/ArbitrableExample.sol\":\"ArbitrableExample\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/arbitration/arbitrables/ArbitrableExample.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitrableV2.sol\\\";\\nimport \\\"../interfaces/IDisputeTemplateRegistry.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\n/// @title ArbitrableExample\\n/// An example of an arbitrable contract which connects to the arbitator that implements the updated interface.\\ncontract ArbitrableExample is IArbitrableV2 {\\n using SafeERC20 for IERC20;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeStruct {\\n bool isRuled; // Whether the dispute has been ruled or not.\\n uint256 ruling; // Ruling given by the arbitrator.\\n uint256 numberOfRulingOptions; // The number of choices the arbitrator can give.\\n }\\n\\n event Action(string indexed _action);\\n\\n address public immutable governor;\\n IArbitratorV2 public arbitrator; // Arbitrator is set in constructor.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n uint256 public templateId; // The current dispute template identifier.\\n bytes public arbitratorExtraData; // Extra data to set up the arbitration.\\n IERC20 public immutable weth; // The WETH token.\\n mapping(uint256 => uint256) public externalIDtoLocalID; // Maps external (arbitrator side) dispute IDs to local dispute IDs.\\n DisputeStruct[] public disputes; // Stores the disputes' info. disputes[disputeID].\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(this) == msg.sender, \\\"Only the governor allowed.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator The arbitrator to rule on created disputes.\\n /// @param _templateData The dispute template data.\\n /// @param _templateDataMappings The dispute template data mappings.\\n /// @param _arbitratorExtraData The extra data for the arbitrator.\\n /// @param _templateRegistry The dispute template registry.\\n /// @param _weth The WETH token.\\n constructor(\\n IArbitratorV2 _arbitrator,\\n string memory _templateData,\\n string memory _templateDataMappings,\\n bytes memory _arbitratorExtraData,\\n IDisputeTemplateRegistry _templateRegistry,\\n IERC20 _weth\\n ) {\\n governor = msg.sender;\\n arbitrator = _arbitrator;\\n arbitratorExtraData = _arbitratorExtraData;\\n templateRegistry = _templateRegistry;\\n weth = _weth;\\n\\n templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _templateData, _templateDataMappings);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n function changeArbitrator(IArbitratorV2 _arbitrator) external onlyByGovernor {\\n arbitrator = _arbitrator;\\n }\\n\\n function changeArbitratorExtraData(bytes calldata _arbitratorExtraData) external onlyByGovernor {\\n arbitratorExtraData = _arbitratorExtraData;\\n }\\n\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external onlyByGovernor {\\n templateRegistry = _templateRegistry;\\n }\\n\\n function changeDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyByGovernor {\\n templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _templateData, _templateDataMappings);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _action The action that requires arbitration.\\n /// @return disputeID Dispute id (on arbitrator side) of the dispute created.\\n function createDispute(string calldata _action) external payable returns (uint256 disputeID) {\\n emit Action(_action);\\n\\n uint256 numberOfRulingOptions = 2;\\n uint256 localDisputeID = disputes.length;\\n disputes.push(DisputeStruct({isRuled: false, ruling: 0, numberOfRulingOptions: numberOfRulingOptions}));\\n\\n disputeID = arbitrator.createDispute{value: msg.value}(numberOfRulingOptions, arbitratorExtraData);\\n externalIDtoLocalID[disputeID] = localDisputeID;\\n\\n uint256 externalDisputeID = uint256(keccak256(abi.encodePacked(_action)));\\n emit DisputeRequest(arbitrator, disputeID, externalDisputeID, templateId, \\\"\\\");\\n }\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _action The action that requires arbitration.\\n /// @param _feeInWeth Amount of fees in WETH for the arbitrator.\\n /// @return disputeID Dispute id (on arbitrator side) of the dispute created.\\n function createDispute(string calldata _action, uint256 _feeInWeth) external returns (uint256 disputeID) {\\n emit Action(_action);\\n\\n uint256 numberOfRulingOptions = 2;\\n uint256 localDisputeID = disputes.length;\\n disputes.push(DisputeStruct({isRuled: false, ruling: 0, numberOfRulingOptions: numberOfRulingOptions}));\\n\\n require(weth.safeTransferFrom(msg.sender, address(this), _feeInWeth), \\\"Transfer failed\\\");\\n require(weth.increaseAllowance(address(arbitrator), _feeInWeth), \\\"Allowance increase failed\\\");\\n\\n disputeID = arbitrator.createDispute(numberOfRulingOptions, arbitratorExtraData, weth, _feeInWeth);\\n externalIDtoLocalID[disputeID] = localDisputeID;\\n\\n uint256 externalDisputeID = uint256(keccak256(abi.encodePacked(_action)));\\n emit DisputeRequest(arbitrator, disputeID, externalDisputeID, templateId, \\\"\\\");\\n }\\n\\n /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling.\\n /// @param _externalDisputeID ID of the dispute in arbitrator contract.\\n /// @param _ruling The ruling choice of the arbitration.\\n function rule(uint256 _externalDisputeID, uint256 _ruling) external override {\\n uint256 localDisputeID = externalIDtoLocalID[_externalDisputeID];\\n DisputeStruct storage dispute = disputes[localDisputeID];\\n require(msg.sender == address(arbitrator), \\\"Only the arbitrator can execute this.\\\");\\n require(_ruling <= dispute.numberOfRulingOptions, \\\"Invalid ruling.\\\");\\n require(dispute.isRuled == false, \\\"This dispute has been ruled already.\\\");\\n\\n dispute.isRuled = true;\\n dispute.ruling = _ruling;\\n\\n emit Ruling(IArbitratorV2(msg.sender), _externalDisputeID, dispute.ruling);\\n }\\n}\\n\",\"keccak256\":\"0x19d38e04eed4156c108539f5ac7c98af87d1d457ef40b5d52bd1aa592c8b0df3\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitrableDisputeID The identifier of the dispute in the Arbitrable contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitrableDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x389326b1f749454ed179bdac2f9d6ce24a1ef944bbce976ca78b93f4e173354a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0x453943ba5ccc94b9b9cdfd4afd3678682d62d8b90fe16b43e90215387d2f6a51\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0x4b1b3f98d13e4a9a1c546dd45f98490f86e871cfc4b4be9a3fe4d29b3c99649c\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x37a19df56a98cd466fb6e70b8c56e13bfc439221bfabd8c5108d36d0e3ffc0e5\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60c06040523480156200001157600080fd5b506040516200191a3803806200191a83398101604081905262000034916200020f565b33608052600080546001600160a01b0319166001600160a01b03881617905560036200006184826200037e565b50600180546001600160a01b0319166001600160a01b0384811691821790925590821660a0526040516312a6505d60e21b8152634a99417490620000ac908890889060040162000478565b6020604051808303816000875af1158015620000cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f29190620004b8565b60025550620004d2945050505050565b6001600160a01b03811681146200011857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200014e57818101518382015260200162000134565b50506000910152565b60006001600160401b03808411156200017457620001746200011b565b604051601f8501601f19908116603f011681019082821181831017156200019f576200019f6200011b565b81604052809350858152868686011115620001b957600080fd5b620001c986602083018762000131565b5050509392505050565b600082601f830112620001e557600080fd5b620001f68383516020850162000157565b9392505050565b80516200020a8162000102565b919050565b60008060008060008060c087890312156200022957600080fd5b8651620002368162000102565b60208801519096506001600160401b03808211156200025457600080fd5b620002628a838b01620001d3565b965060408901519150808211156200027957600080fd5b620002878a838b01620001d3565b955060608901519150808211156200029e57600080fd5b508701601f81018913620002b157600080fd5b620002c28982516020840162000157565b935050620002d360808801620001fd565b9150620002e360a08801620001fd565b90509295509295509295565b600181811c908216806200030457607f821691505b6020821081036200032557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200037957600081815260208120601f850160051c81016020861015620003545750805b601f850160051c820191505b81811015620003755782815560010162000360565b5050505b505050565b81516001600160401b038111156200039a576200039a6200011b565b620003b281620003ab8454620002ef565b846200032b565b602080601f831160018114620003ea5760008415620003d15750858301515b600019600386901b1c1916600185901b17855562000375565b600085815260208120601f198616915b828110156200041b57888601518255948401946001909101908401620003fa565b50858210156200043a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600081518084526200046481602086016020860162000131565b601f01601f19169290920160200192915050565b60608152600060608201526080602082015260006200049b60808301856200044a565b8281036040840152620004af81856200044a565b95945050505050565b600060208284031215620004cb57600080fd5b5051919050565b60805160a05161140e6200050c60003960008181610194015281816106e40152818161076301526108010152600060df015261140e6000f3fe6080604052600436106100c85760003560e01c8063654692871161007a578063654692871461021357806368175996146102415780636cc6cde1146102545780637aa77f2914610274578063a0af81f01461028a578063c21ae061146102aa578063c5d55288146102d7578063fc548f08146102f757600080fd5b80630c340a24146100cd5780630c7ac7b61461011e578063311a6c561461014057806334e2672d146101625780633fc8cef3146101825780634660ebbe146101b6578063564a565d146101d6575b600080fd5b3480156100d957600080fd5b506101017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012a57600080fd5b50610133610317565b6040516101159190610e3d565b34801561014c57600080fd5b5061016061015b366004610e57565b6103a5565b005b34801561016e57600080fd5b5061016061017d366004610ec2565b61053e565b34801561018e57600080fd5b506101017f000000000000000000000000000000000000000000000000000000000000000081565b3480156101c257600080fd5b506101606101d1366004610f1c565b61056f565b3480156101e257600080fd5b506101f66101f1366004610f39565b6105b0565b604080519315158452602084019290925290820152606001610115565b34801561021f57600080fd5b5061023361022e366004610f52565b6105e7565b604051908152602001610115565b61023361024f366004610ec2565b61091b565b34801561026057600080fd5b50600054610101906001600160a01b031681565b34801561028057600080fd5b5061023360025481565b34801561029657600080fd5b50600154610101906001600160a01b031681565b3480156102b657600080fd5b506102336102c5366004610f39565b60046020526000908152604090205481565b3480156102e357600080fd5b506101606102f2366004611041565b610b31565b34801561030357600080fd5b50610160610312366004610f1c565b610bcc565b60038054610324906110a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610350906110a5565b801561039d5780601f106103725761010080835404028352916020019161039d565b820191906000526020600020905b81548152906001019060200180831161038057829003601f168201915b505050505081565b60008281526004602052604081205460058054919291839081106103cb576103cb6110df565b600091825260208220915460039190910290910191506001600160a01b0316331461044b5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b80600201548311156104915760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b6044820152606401610442565b805460ff16156104ef5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b6064820152608401610442565b805460ff1916600190811782558101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b30331461055d5760405162461bcd60e51b8152600401610442906110f5565b600361056a82848361117a565b505050565b30331461058e5760405162461bcd60e51b8152600401610442906110f5565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600581815481106105c057600080fd5b600091825260209091206003909102018054600182015460029092015460ff909116925083565b600083836040516105f992919061123b565b604051908190038120907f8b2c14fe955d044ef95ba32b88d2ceb87c6f73fcefdcebe906063a6d75690f2790600090a2600580546040805160608101825260008082526020820181815260029383018481526001860187559590915290517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db060038502908101805460ff19169215159290921790915590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015592517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2909301929092556107147f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333087610c0d565b6107525760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610442565b60005461078c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911686610ce9565b6107d45760405162461bcd60e51b8152602060048201526019602482015278105b1b1bddd85b98d9481a5b98dc99585cd94819985a5b1959603a1b6044820152606401610442565b600054604051633d941b6d60e21b81526001600160a01b039091169063f6506db49061082b9085906003907f0000000000000000000000000000000000000000000000000000000000000000908a906004016112c8565b6020604051808303816000875af115801561084a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e91906112fd565b600081815260046020908152604080832085905551929550909161089691899189910161123b565b60408051601f1981840301815290829052805160209091012060005460025491935086926001600160a01b03909116917f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e271869161090991868252602082015260606040820181905260009082015260800190565b60405180910390a35050509392505050565b6000828260405161092d92919061123b565b604051908190038120907f8b2c14fe955d044ef95ba32b88d2ceb87c6f73fcefdcebe906063a6d75690f2790600090a26005805460408051606081018252600080825260208201818152600283850181815260018701885596835292517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db06003808802918201805460ff19169315159390931790925591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db183015595517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db29091015554915163c13517e160e01b815290936001600160a01b039092169163c13517e1913491610a4291879190600401611316565b60206040518083038185885af1158015610a60573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a8591906112fd565b6000818152600460209081526040808320859055519295509091610aad91889188910161123b565b60408051601f1981840301815290829052805160209091012060005460025491935086926001600160a01b03909116917f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e2718691610b2091868252602082015260606040820181905260009082015260800190565b60405180910390a350505092915050565b303314610b505760405162461bcd60e51b8152600401610442906110f5565b6001546040516312a6505d60e21b81526001600160a01b0390911690634a99417490610b829085908590600401611337565b6020604051808303816000875af1158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc591906112fd565b6002555050565b303314610beb5760405162461bcd60e51b8152600401610442906110f5565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251610c729190611373565b6000604051808303816000865af19150503d8060008114610caf576040519150601f19603f3d011682016040523d82523d6000602084013e610cb4565b606091505b5091509150818015610cde575080511580610cde575080806020019051810190610cde919061138f565b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063095ea7b39085908590849063dd62ed3e90604401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6991906112fd565b610d7391906113b1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de2919061138f565b506001949350505050565b60005b83811015610e08578181015183820152602001610df0565b50506000910152565b60008151808452610e29816020860160208601610ded565b601f01601f19169290920160200192915050565b602081526000610e506020830184610e11565b9392505050565b60008060408385031215610e6a57600080fd5b50508035926020909101359150565b60008083601f840112610e8b57600080fd5b50813567ffffffffffffffff811115610ea357600080fd5b602083019150836020828501011115610ebb57600080fd5b9250929050565b60008060208385031215610ed557600080fd5b823567ffffffffffffffff811115610eec57600080fd5b610ef885828601610e79565b90969095509350505050565b6001600160a01b0381168114610f1957600080fd5b50565b600060208284031215610f2e57600080fd5b8135610e5081610f04565b600060208284031215610f4b57600080fd5b5035919050565b600080600060408486031215610f6757600080fd5b833567ffffffffffffffff811115610f7e57600080fd5b610f8a86828701610e79565b909790965060209590950135949350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610fc557600080fd5b813567ffffffffffffffff80821115610fe057610fe0610f9e565b604051601f8301601f19908116603f0116810190828211818310171561100857611008610f9e565b8160405283815286602085880101111561102157600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561105457600080fd5b823567ffffffffffffffff8082111561106c57600080fd5b61107886838701610fb4565b9350602085013591508082111561108e57600080fd5b5061109b85828601610fb4565b9150509250929050565b600181811c908216806110b957607f821691505b6020821081036110d957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6020808252601a908201527f4f6e6c792074686520676f7665726e6f7220616c6c6f7765642e000000000000604082015260600190565b601f82111561056a57600081815260208120601f850160051c810160208610156111535750805b601f850160051c820191505b818110156111725782815560010161115f565b505050505050565b67ffffffffffffffff83111561119257611192610f9e565b6111a6836111a083546110a5565b8361112c565b6000601f8411600181146111da57600085156111c25750838201355b600019600387901b1c1916600186901b178355611234565b600083815260209020601f19861690835b8281101561120b57868501358255602094850194600190920191016111eb565b50868210156112285760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8183823760009101908152919050565b60008154611258816110a5565b808552602060018381168015611275576001811461128f576112bd565b60ff1985168884015283151560051b8801830195506112bd565b866000528260002060005b858110156112b55781548a820186015290830190840161129a565b890184019650505b505050505092915050565b8481526080602082015260006112e1608083018661124b565b6001600160a01b03949094166040830152506060015292915050565b60006020828403121561130f57600080fd5b5051919050565b82815260406020820152600061132f604083018461124b565b949350505050565b60608152600060608201526080602082015260006113586080830185610e11565b828103604084015261136a8185610e11565b95945050505050565b60008251611385818460208701610ded565b9190910192915050565b6000602082840312156113a157600080fd5b81518015158114610e5057600080fd5b808201808211156113d257634e487b7160e01b600052601160045260246000fd5b9291505056fea2646970667358221220c6a6daf2f56ede86acd165f440073734a6ccd3c00dadf35865db2d523df0840d64736f6c63430008120033", - "deployedBytecode": "0x6080604052600436106100c85760003560e01c8063654692871161007a578063654692871461021357806368175996146102415780636cc6cde1146102545780637aa77f2914610274578063a0af81f01461028a578063c21ae061146102aa578063c5d55288146102d7578063fc548f08146102f757600080fd5b80630c340a24146100cd5780630c7ac7b61461011e578063311a6c561461014057806334e2672d146101625780633fc8cef3146101825780634660ebbe146101b6578063564a565d146101d6575b600080fd5b3480156100d957600080fd5b506101017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012a57600080fd5b50610133610317565b6040516101159190610e3d565b34801561014c57600080fd5b5061016061015b366004610e57565b6103a5565b005b34801561016e57600080fd5b5061016061017d366004610ec2565b61053e565b34801561018e57600080fd5b506101017f000000000000000000000000000000000000000000000000000000000000000081565b3480156101c257600080fd5b506101606101d1366004610f1c565b61056f565b3480156101e257600080fd5b506101f66101f1366004610f39565b6105b0565b604080519315158452602084019290925290820152606001610115565b34801561021f57600080fd5b5061023361022e366004610f52565b6105e7565b604051908152602001610115565b61023361024f366004610ec2565b61091b565b34801561026057600080fd5b50600054610101906001600160a01b031681565b34801561028057600080fd5b5061023360025481565b34801561029657600080fd5b50600154610101906001600160a01b031681565b3480156102b657600080fd5b506102336102c5366004610f39565b60046020526000908152604090205481565b3480156102e357600080fd5b506101606102f2366004611041565b610b31565b34801561030357600080fd5b50610160610312366004610f1c565b610bcc565b60038054610324906110a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610350906110a5565b801561039d5780601f106103725761010080835404028352916020019161039d565b820191906000526020600020905b81548152906001019060200180831161038057829003601f168201915b505050505081565b60008281526004602052604081205460058054919291839081106103cb576103cb6110df565b600091825260208220915460039190910290910191506001600160a01b0316331461044b5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b80600201548311156104915760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b6044820152606401610442565b805460ff16156104ef5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b6064820152608401610442565b805460ff1916600190811782558101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b30331461055d5760405162461bcd60e51b8152600401610442906110f5565b600361056a82848361117a565b505050565b30331461058e5760405162461bcd60e51b8152600401610442906110f5565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600581815481106105c057600080fd5b600091825260209091206003909102018054600182015460029092015460ff909116925083565b600083836040516105f992919061123b565b604051908190038120907f8b2c14fe955d044ef95ba32b88d2ceb87c6f73fcefdcebe906063a6d75690f2790600090a2600580546040805160608101825260008082526020820181815260029383018481526001860187559590915290517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db060038502908101805460ff19169215159290921790915590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015592517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2909301929092556107147f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333087610c0d565b6107525760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610442565b60005461078c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911686610ce9565b6107d45760405162461bcd60e51b8152602060048201526019602482015278105b1b1bddd85b98d9481a5b98dc99585cd94819985a5b1959603a1b6044820152606401610442565b600054604051633d941b6d60e21b81526001600160a01b039091169063f6506db49061082b9085906003907f0000000000000000000000000000000000000000000000000000000000000000908a906004016112c8565b6020604051808303816000875af115801561084a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e91906112fd565b600081815260046020908152604080832085905551929550909161089691899189910161123b565b60408051601f1981840301815290829052805160209091012060005460025491935086926001600160a01b03909116917f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e271869161090991868252602082015260606040820181905260009082015260800190565b60405180910390a35050509392505050565b6000828260405161092d92919061123b565b604051908190038120907f8b2c14fe955d044ef95ba32b88d2ceb87c6f73fcefdcebe906063a6d75690f2790600090a26005805460408051606081018252600080825260208201818152600283850181815260018701885596835292517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db06003808802918201805460ff19169315159390931790925591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db183015595517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db29091015554915163c13517e160e01b815290936001600160a01b039092169163c13517e1913491610a4291879190600401611316565b60206040518083038185885af1158015610a60573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a8591906112fd565b6000818152600460209081526040808320859055519295509091610aad91889188910161123b565b60408051601f1981840301815290829052805160209091012060005460025491935086926001600160a01b03909116917f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e2718691610b2091868252602082015260606040820181905260009082015260800190565b60405180910390a350505092915050565b303314610b505760405162461bcd60e51b8152600401610442906110f5565b6001546040516312a6505d60e21b81526001600160a01b0390911690634a99417490610b829085908590600401611337565b6020604051808303816000875af1158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc591906112fd565b6002555050565b303314610beb5760405162461bcd60e51b8152600401610442906110f5565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251610c729190611373565b6000604051808303816000865af19150503d8060008114610caf576040519150601f19603f3d011682016040523d82523d6000602084013e610cb4565b606091505b5091509150818015610cde575080511580610cde575080806020019051810190610cde919061138f565b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063095ea7b39085908590849063dd62ed3e90604401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6991906112fd565b610d7391906113b1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de2919061138f565b506001949350505050565b60005b83811015610e08578181015183820152602001610df0565b50506000910152565b60008151808452610e29816020860160208601610ded565b601f01601f19169290920160200192915050565b602081526000610e506020830184610e11565b9392505050565b60008060408385031215610e6a57600080fd5b50508035926020909101359150565b60008083601f840112610e8b57600080fd5b50813567ffffffffffffffff811115610ea357600080fd5b602083019150836020828501011115610ebb57600080fd5b9250929050565b60008060208385031215610ed557600080fd5b823567ffffffffffffffff811115610eec57600080fd5b610ef885828601610e79565b90969095509350505050565b6001600160a01b0381168114610f1957600080fd5b50565b600060208284031215610f2e57600080fd5b8135610e5081610f04565b600060208284031215610f4b57600080fd5b5035919050565b600080600060408486031215610f6757600080fd5b833567ffffffffffffffff811115610f7e57600080fd5b610f8a86828701610e79565b909790965060209590950135949350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610fc557600080fd5b813567ffffffffffffffff80821115610fe057610fe0610f9e565b604051601f8301601f19908116603f0116810190828211818310171561100857611008610f9e565b8160405283815286602085880101111561102157600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561105457600080fd5b823567ffffffffffffffff8082111561106c57600080fd5b61107886838701610fb4565b9350602085013591508082111561108e57600080fd5b5061109b85828601610fb4565b9150509250929050565b600181811c908216806110b957607f821691505b6020821081036110d957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6020808252601a908201527f4f6e6c792074686520676f7665726e6f7220616c6c6f7765642e000000000000604082015260600190565b601f82111561056a57600081815260208120601f850160051c810160208610156111535750805b601f850160051c820191505b818110156111725782815560010161115f565b505050505050565b67ffffffffffffffff83111561119257611192610f9e565b6111a6836111a083546110a5565b8361112c565b6000601f8411600181146111da57600085156111c25750838201355b600019600387901b1c1916600186901b178355611234565b600083815260209020601f19861690835b8281101561120b57868501358255602094850194600190920191016111eb565b50868210156112285760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8183823760009101908152919050565b60008154611258816110a5565b808552602060018381168015611275576001811461128f576112bd565b60ff1985168884015283151560051b8801830195506112bd565b866000528260002060005b858110156112b55781548a820186015290830190840161129a565b890184019650505b505050505092915050565b8481526080602082015260006112e1608083018661124b565b6001600160a01b03949094166040830152506060015292915050565b60006020828403121561130f57600080fd5b5051919050565b82815260406020820152600061132f604083018461124b565b949350505050565b60608152600060608201526080602082015260006113586080830185610e11565b828103604084015261136a8185610e11565b95945050505050565b60008251611385818460208701610ded565b9190910192915050565b6000602082840312156113a157600080fd5b81518015158114610e5057600080fd5b808201808211156113d257634e487b7160e01b600052601160045260246000fd5b9291505056fea2646970667358221220c6a6daf2f56ede86acd165f440073734a6ccd3c00dadf35865db2d523df0840d64736f6c63430008120033", - "devdoc": { - "events": { - "DisputeRequest(address,uint256,uint256,uint256,string)": { - "details": "To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.", - "params": { - "_arbitrableDisputeID": "The identifier of the dispute in the Arbitrable contract.", - "_arbitrator": "The arbitrator of the contract.", - "_externalDisputeID": "An identifier created outside Kleros by the protocol requesting arbitration.", - "_templateId": "The identifier of the dispute template. Should not be used with _templateUri.", - "_templateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrator": "The arbitrator giving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - } - }, - "kind": "dev", - "methods": { - "constructor": { - "details": "Constructor", - "params": { - "_arbitrator": "The arbitrator to rule on created disputes.", - "_arbitratorExtraData": "The extra data for the arbitrator.", - "_templateData": "The dispute template data.", - "_templateDataMappings": "The dispute template data mappings.", - "_templateRegistry": "The dispute template registry.", - "_weth": "The WETH token." - } - }, - "createDispute(string)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_action": "The action that requires arbitration." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the dispute created." - } - }, - "createDispute(string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_action": "The action that requires arbitration.", - "_feeInWeth": "Amount of fees in WETH for the arbitrator." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the dispute created." - } - }, - "rule(uint256,uint256)": { - "details": "To be called by the arbitrator of the dispute, to declare the winning ruling.", - "params": { - "_externalDisputeID": "ID of the dispute in arbitrator contract.", - "_ruling": "The ruling choice of the arbitration." - } - } - }, - "title": "ArbitrableExample An example of an arbitrable contract which connects to the arbitator that implements the updated interface.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 9463, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "arbitrator", - "offset": 0, - "slot": "0", - "type": "t_contract(IArbitratorV2)15461" - }, - { - "astId": 9466, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "templateRegistry", - "offset": 0, - "slot": "1", - "type": "t_contract(IDisputeTemplateRegistry)15627" - }, - { - "astId": 9468, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "templateId", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 9470, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "arbitratorExtraData", - "offset": 0, - "slot": "3", - "type": "t_bytes_storage" - }, - { - "astId": 9477, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "externalIDtoLocalID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 9481, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "disputes", - "offset": 0, - "slot": "5", - "type": "t_array(t_struct(DisputeStruct)9454_storage)dyn_storage" - } - ], - "types": { - "t_array(t_struct(DisputeStruct)9454_storage)dyn_storage": { - "base": "t_struct(DisputeStruct)9454_storage", - "encoding": "dynamic_array", - "label": "struct ArbitrableExample.DisputeStruct[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IArbitratorV2)15461": { - "encoding": "inplace", - "label": "contract IArbitratorV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeTemplateRegistry)15627": { - "encoding": "inplace", - "label": "contract IDisputeTemplateRegistry", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeStruct)9454_storage": { - "encoding": "inplace", - "label": "struct ArbitrableExample.DisputeStruct", - "members": [ - { - "astId": 9449, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "isRuled", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 9451, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "ruling", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 9453, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "numberOfRulingOptions", - "offset": 0, - "slot": "2", - "type": "t_uint256" - } - ], - "numberOfBytes": "96" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/chiado/DisputeResolver.json b/contracts/deployments/chiado/DisputeResolver.json deleted file mode 100644 index 4807f0d9c..000000000 --- a/contracts/deployments/chiado/DisputeResolver.json +++ /dev/null @@ -1,522 +0,0 @@ -{ - "address": "0x5f79737f65320bA12440aA88087281cC8e71A781", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_arbitrableDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateUri", - "type": "string" - } - ], - "name": "DisputeRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "arbitratorDisputeIDToLocalID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - } - ], - "name": "changeArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "name": "changeTemplateRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplate", - "type": "string" - }, - { - "internalType": "string", - "name": "_disputeTemplateDataMappings", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplateUri", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplateUri", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "bytes", - "name": "arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "isRuled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numberOfRulingOptions", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templateRegistry", - "outputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x4532fb85a0577c9da7d7e5c3c26cd851442a8c0fd7306b2783a9512ac9748097", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x5f79737f65320bA12440aA88087281cC8e71A781", - "transactionIndex": 0, - "gasUsed": "899270", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xc5e232944a325ba4ab9969ea04643980f1ec34644cf1135952d3ceeb490dd2c2", - "transactionHash": "0x4532fb85a0577c9da7d7e5c3c26cd851442a8c0fd7306b2783a9512ac9748097", - "logs": [], - "blockNumber": 5418567, - "cumulativeGasUsed": "899270", - "status": 1, - "byzantium": true - }, - "args": [ - "0x2824bdcc752b1272D56A84be03A74Ee856C06e43", - "0xA55D4b90c1F8D1fD0408232bF6FA498dD6786385" - ], - "numDeployments": 4, - "solcInputHash": "7e0c306a4451043d6e53d94781f5594c", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_arbitrableDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateUri\",\"type\":\"string\"}],\"name\":\"DisputeRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"arbitratorDisputeIDToLocalID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"}],\"name\":\"changeArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplate\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateDataMappings\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateUri\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplateUri\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isRuled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRulingOptions\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DisputeRequest(address,uint256,uint256,uint256,string)\":{\"details\":\"To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\",\"params\":{\"_arbitrableDisputeID\":\"The identifier of the dispute in the Arbitrable contract.\",\"_arbitrator\":\"The arbitrator of the contract.\",\"_externalDisputeID\":\"An identifier created outside Kleros by the protocol requesting arbitration.\",\"_templateId\":\"The identifier of the dispute template. Should not be used with _templateUri.\",\"_templateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrator\":\"The arbitrator giving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor.\",\"params\":{\"_governor\":\"The address of the new governor.\"}},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_arbitrator\":\"Target global arbitrator for any disputes.\"}},\"createDisputeForTemplate(bytes,string,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplate\":\"Dispute template.\",\"_disputeTemplateDataMappings\":\"The data mappings.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"createDisputeForTemplateUri(bytes,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"rule(uint256,uint256)\":{\"details\":\"To be called by the arbitrator of the dispute, to declare the winning ruling.\",\"params\":{\"_externalDisputeID\":\"ID of the dispute in arbitrator contract.\",\"_ruling\":\"The ruling choice of the arbitration.\"}}},\"title\":\"DisputeResolver DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/arbitrables/DisputeResolver.sol\":\"DisputeResolver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/arbitration/arbitrables/DisputeResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@ferittuncer, @unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitrableV2.sol\\\";\\nimport \\\"../interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\npragma solidity 0.8.18;\\n\\n/// @title DisputeResolver\\n/// DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\\ncontract DisputeResolver is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeStruct {\\n bytes arbitratorExtraData; // Extra data for the dispute.\\n bool isRuled; // True if the dispute has been ruled.\\n uint256 ruling; // Ruling given to the dispute.\\n uint256 numberOfRulingOptions; // The number of choices the arbitrator can give.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor.\\n IArbitratorV2 public arbitrator; // The arbitrator.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n DisputeStruct[] public disputes; // Local disputes.\\n mapping(uint256 => uint256) public arbitratorDisputeIDToLocalID; // Maps arbitrator-side dispute IDs to local dispute IDs.\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator Target global arbitrator for any disputes.\\n constructor(IArbitratorV2 _arbitrator, IDisputeTemplateRegistry _templateRegistry) {\\n governor = msg.sender;\\n arbitrator = _arbitrator;\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n governor = _governor;\\n }\\n\\n function changeArbitrator(IArbitratorV2 _arbitrator) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n arbitrator = _arbitrator;\\n }\\n\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplate Dispute template.\\n /// @param _disputeTemplateDataMappings The data mappings.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplate(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return\\n _createDispute(\\n _arbitratorExtraData,\\n _disputeTemplate,\\n _disputeTemplateDataMappings,\\n \\\"\\\",\\n _numberOfRulingOptions\\n );\\n }\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplateUri(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return _createDispute(_arbitratorExtraData, \\\"\\\", \\\"\\\", _disputeTemplateUri, _numberOfRulingOptions);\\n }\\n\\n /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling.\\n /// @param _externalDisputeID ID of the dispute in arbitrator contract.\\n /// @param _ruling The ruling choice of the arbitration.\\n function rule(uint256 _externalDisputeID, uint256 _ruling) external override {\\n uint256 localDisputeID = arbitratorDisputeIDToLocalID[_externalDisputeID];\\n DisputeStruct storage dispute = disputes[localDisputeID];\\n require(msg.sender == address(arbitrator), \\\"Only the arbitrator can execute this.\\\");\\n require(_ruling <= dispute.numberOfRulingOptions, \\\"Invalid ruling.\\\");\\n require(!dispute.isRuled, \\\"This dispute has been ruled already.\\\");\\n\\n dispute.isRuled = true;\\n dispute.ruling = _ruling;\\n\\n emit Ruling(IArbitratorV2(msg.sender), _externalDisputeID, dispute.ruling);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n function _createDispute(\\n bytes calldata _arbitratorExtraData,\\n string memory _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n string memory _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) internal returns (uint256 disputeID) {\\n require(_numberOfRulingOptions > 1, \\\"Should be at least 2 ruling options.\\\");\\n\\n disputeID = arbitrator.createDispute{value: msg.value}(_numberOfRulingOptions, _arbitratorExtraData);\\n uint256 localDisputeID = disputes.length;\\n disputes.push(\\n DisputeStruct({\\n arbitratorExtraData: _arbitratorExtraData,\\n isRuled: false,\\n ruling: 0,\\n numberOfRulingOptions: _numberOfRulingOptions\\n })\\n );\\n arbitratorDisputeIDToLocalID[disputeID] = localDisputeID;\\n uint256 templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _disputeTemplate, _disputeTemplateDataMappings);\\n emit DisputeRequest(arbitrator, disputeID, localDisputeID, templateId, _disputeTemplateUri);\\n }\\n}\\n\",\"keccak256\":\"0x6a73611696ae6b6f128c1c3d6f355f691f93b374243f41e6a9b0795bbfb8fb13\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitrableDisputeID The identifier of the dispute in the Arbitrable contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitrableDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x389326b1f749454ed179bdac2f9d6ce24a1ef944bbce976ca78b93f4e173354a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0x453943ba5ccc94b9b9cdfd4afd3678682d62d8b90fe16b43e90215387d2f6a51\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0x4b1b3f98d13e4a9a1c546dd45f98490f86e871cfc4b4be9a3fe4d29b3c99649c\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50604051610ed5380380610ed583398101604081905261002f91610083565b600080546001600160a01b03199081163317909155600180546001600160a01b03948516908316179055600280549290931691161790556100bd565b6001600160a01b038116811461008057600080fd5b50565b6000806040838503121561009657600080fd5b82516100a18161006b565b60208401519092506100b28161006b565b809150509250929050565b610e09806100cc6000396000f3fe60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108bb565b610231565b005b34801561010c57600080fd5b506100fe61011b3660046108f5565b6103d1565b34801561012c57600080fd5b5061014061013b366004610919565b61041d565b6040516100d59493929190610978565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109f0565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a7a565b61055a565b3480156101d057600080fd5b506101836101df366004610919565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c3660046108f5565b6105b9565b34801561021d57600080fd5b506100fe61022c3660046108f5565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b88565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610b9e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610be0565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610be0565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610b9e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610b9e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906106e59086908c908c90600401610c1a565b60206040518083038185885af1158015610703573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107289190610c50565b600380546040805160a06020601f8d018190040282018101909252608081018b8152949550919382918c908c90819085018382808284376000920182905250938552505050602080830182905260408301829052606090920187905283546001810185559381522081519192600402019081906107a59082610cb8565b5060208281015160018301805460ff19169115159190911790556040808401516002808501919091556060909401516003909301929092556000858152600491829052828120859055925491516312a6505d60e21b81526001600160a01b0390921691634a9941749161081c918b918b9101610d78565b6020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190610c50565b60015460405191925084916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186906108a790869086908b90610db4565b60405180910390a350509695505050505050565b600080604083850312156108ce57600080fd5b50508035926020909101359150565b6001600160a01b03811681146108f257600080fd5b50565b60006020828403121561090757600080fd5b8135610912816108dd565b9392505050565b60006020828403121561092b57600080fd5b5035919050565b6000815180845260005b818110156109585760208185018101518683018201520161093c565b506000602082860101526020601f19601f83011685010191505092915050565b60808152600061098b6080830187610932565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109b957600080fd5b50813567ffffffffffffffff8111156109d157600080fd5b6020830191508360208285010111156109e957600080fd5b9250929050565b600080600080600060608688031215610a0857600080fd5b853567ffffffffffffffff80821115610a2057600080fd5b610a2c89838a016109a7565b90975095506020880135915080821115610a4557600080fd5b50610a52888289016109a7565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610a9357600080fd5b863567ffffffffffffffff80821115610aab57600080fd5b610ab78a838b016109a7565b90985096506020890135915080821115610ad057600080fd5b610adc8a838b016109a7565b90965094506040890135915080821115610af557600080fd5b818901915089601f830112610b0957600080fd5b813581811115610b1b57610b1b610a64565b604051601f8201601f19908116603f01168101908382118183101715610b4357610b43610a64565b816040528281528c6020848701011115610b5c57600080fd5b826020860160208301376000602084830101528096505050505050606087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610bf457607f821691505b602082108103610c1457634e487b7160e01b600052602260045260246000fd5b50919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215610c6257600080fd5b5051919050565b601f821115610cb357600081815260208120601f850160051c81016020861015610c905750805b601f850160051c820191505b81811015610caf57828155600101610c9c565b5050505b505050565b815167ffffffffffffffff811115610cd257610cd2610a64565b610ce681610ce08454610be0565b84610c69565b602080601f831160018114610d1b5760008415610d035750858301515b600019600386901b1c1916600185901b178555610caf565b600085815260208120601f198616915b82811015610d4a57888601518255948401946001909101908401610d2b565b5085821015610d685787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006060820152608060208201526000610d996080830185610932565b8281036040840152610dab8185610932565b95945050505050565b838152826020820152606060408201526000610dab606083018461093256fea2646970667358221220c324d7140e9a3d1af3d79e61c385889111fcf915450df6674ffa003e40949e0964736f6c63430008120033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108bb565b610231565b005b34801561010c57600080fd5b506100fe61011b3660046108f5565b6103d1565b34801561012c57600080fd5b5061014061013b366004610919565b61041d565b6040516100d59493929190610978565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109f0565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a7a565b61055a565b3480156101d057600080fd5b506101836101df366004610919565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c3660046108f5565b6105b9565b34801561021d57600080fd5b506100fe61022c3660046108f5565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b88565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610b9e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610be0565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610be0565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610b9e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610b9e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906106e59086908c908c90600401610c1a565b60206040518083038185885af1158015610703573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107289190610c50565b600380546040805160a06020601f8d018190040282018101909252608081018b8152949550919382918c908c90819085018382808284376000920182905250938552505050602080830182905260408301829052606090920187905283546001810185559381522081519192600402019081906107a59082610cb8565b5060208281015160018301805460ff19169115159190911790556040808401516002808501919091556060909401516003909301929092556000858152600491829052828120859055925491516312a6505d60e21b81526001600160a01b0390921691634a9941749161081c918b918b9101610d78565b6020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190610c50565b60015460405191925084916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186906108a790869086908b90610db4565b60405180910390a350509695505050505050565b600080604083850312156108ce57600080fd5b50508035926020909101359150565b6001600160a01b03811681146108f257600080fd5b50565b60006020828403121561090757600080fd5b8135610912816108dd565b9392505050565b60006020828403121561092b57600080fd5b5035919050565b6000815180845260005b818110156109585760208185018101518683018201520161093c565b506000602082860101526020601f19601f83011685010191505092915050565b60808152600061098b6080830187610932565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109b957600080fd5b50813567ffffffffffffffff8111156109d157600080fd5b6020830191508360208285010111156109e957600080fd5b9250929050565b600080600080600060608688031215610a0857600080fd5b853567ffffffffffffffff80821115610a2057600080fd5b610a2c89838a016109a7565b90975095506020880135915080821115610a4557600080fd5b50610a52888289016109a7565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610a9357600080fd5b863567ffffffffffffffff80821115610aab57600080fd5b610ab78a838b016109a7565b90985096506020890135915080821115610ad057600080fd5b610adc8a838b016109a7565b90965094506040890135915080821115610af557600080fd5b818901915089601f830112610b0957600080fd5b813581811115610b1b57610b1b610a64565b604051601f8201601f19908116603f01168101908382118183101715610b4357610b43610a64565b816040528281528c6020848701011115610b5c57600080fd5b826020860160208301376000602084830101528096505050505050606087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610bf457607f821691505b602082108103610c1457634e487b7160e01b600052602260045260246000fd5b50919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215610c6257600080fd5b5051919050565b601f821115610cb357600081815260208120601f850160051c81016020861015610c905750805b601f850160051c820191505b81811015610caf57828155600101610c9c565b5050505b505050565b815167ffffffffffffffff811115610cd257610cd2610a64565b610ce681610ce08454610be0565b84610c69565b602080601f831160018114610d1b5760008415610d035750858301515b600019600386901b1c1916600185901b178555610caf565b600085815260208120601f198616915b82811015610d4a57888601518255948401946001909101908401610d2b565b5085821015610d685787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006060820152608060208201526000610d996080830185610932565b8281036040840152610dab8185610932565b95945050505050565b838152826020820152606060408201526000610dab606083018461093256fea2646970667358221220c324d7140e9a3d1af3d79e61c385889111fcf915450df6674ffa003e40949e0964736f6c63430008120033", - "devdoc": { - "events": { - "DisputeRequest(address,uint256,uint256,uint256,string)": { - "details": "To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.", - "params": { - "_arbitrableDisputeID": "The identifier of the dispute in the Arbitrable contract.", - "_arbitrator": "The arbitrator of the contract.", - "_externalDisputeID": "An identifier created outside Kleros by the protocol requesting arbitration.", - "_templateId": "The identifier of the dispute template. Should not be used with _templateUri.", - "_templateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrator": "The arbitrator giving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor.", - "params": { - "_governor": "The address of the new governor." - } - }, - "constructor": { - "details": "Constructor", - "params": { - "_arbitrator": "Target global arbitrator for any disputes." - } - }, - "createDisputeForTemplate(bytes,string,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplate": "Dispute template.", - "_disputeTemplateDataMappings": "The data mappings.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "createDisputeForTemplateUri(bytes,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "rule(uint256,uint256)": { - "details": "To be called by the arbitrator of the dispute, to declare the winning ruling.", - "params": { - "_externalDisputeID": "ID of the dispute in arbitrator contract.", - "_ruling": "The ruling choice of the arbitration." - } - } - }, - "title": "DisputeResolver DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 9861, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 9864, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitrator", - "offset": 0, - "slot": "1", - "type": "t_contract(IArbitratorV2)15461" - }, - { - "astId": 9867, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "templateRegistry", - "offset": 0, - "slot": "2", - "type": "t_contract(IDisputeTemplateRegistry)15627" - }, - { - "astId": 9871, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "disputes", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(DisputeStruct)9859_storage)dyn_storage" - }, - { - "astId": 9875, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitratorDisputeIDToLocalID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(DisputeStruct)9859_storage)dyn_storage": { - "base": "t_struct(DisputeStruct)9859_storage", - "encoding": "dynamic_array", - "label": "struct DisputeResolver.DisputeStruct[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IArbitratorV2)15461": { - "encoding": "inplace", - "label": "contract IArbitratorV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeTemplateRegistry)15627": { - "encoding": "inplace", - "label": "contract IDisputeTemplateRegistry", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeStruct)9859_storage": { - "encoding": "inplace", - "label": "struct DisputeResolver.DisputeStruct", - "members": [ - { - "astId": 9852, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitratorExtraData", - "offset": 0, - "slot": "0", - "type": "t_bytes_storage" - }, - { - "astId": 9854, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "isRuled", - "offset": 0, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 9856, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "ruling", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 9858, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "numberOfRulingOptions", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/chiado/DisputeTemplateRegistry.json b/contracts/deployments/chiado/DisputeTemplateRegistry.json deleted file mode 100644 index f764e6783..000000000 --- a/contracts/deployments/chiado/DisputeTemplateRegistry.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "address": "0xA55D4b90c1F8D1fD0408232bF6FA498dD6786385", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "DisputeTemplate", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "setDisputeTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "templateId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templates", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x1ec95f806701a927a4fbbb0e427975d8568d3aefc30f88e2df6e6b43e9657e79", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0xA55D4b90c1F8D1fD0408232bF6FA498dD6786385", - "transactionIndex": 1, - "gasUsed": "215830", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1f68cb3d8a496c982d20f9245d8121f5c90b4e289586ae7be79937fe2728f318", - "transactionHash": "0x1ec95f806701a927a4fbbb0e427975d8568d3aefc30f88e2df6e6b43e9657e79", - "logs": [], - "blockNumber": 5398792, - "cumulativeGasUsed": "242422", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "5cbc9a57c66318424bb771eed7e7b88c", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"_templateTag\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"DisputeTemplate\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_templateTag\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"setDisputeTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"templateId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A contract to maintain a registry of dispute templates.\",\"events\":{\"DisputeTemplate(uint256,string,string,string)\":{\"details\":\"To be emitted when a new dispute template is created.\",\"params\":{\"_templateData\":\"The template data.\",\"_templateDataMappings\":\"The data mappings.\",\"_templateId\":\"The identifier of the dispute template.\",\"_templateTag\":\"An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\"}}},\"kind\":\"dev\",\"methods\":{},\"title\":\"Dispute Template Registry\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/DisputeTemplateRegistry.sol\":\"DisputeTemplateRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/arbitration/DisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.18;\\n\\nimport \\\"./interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\n/// @title Dispute Template Registry\\n/// @dev A contract to maintain a registry of dispute templates.\\ncontract DisputeTemplateRegistry is IDisputeTemplateRegistry {\\n uint256 public templates;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId) {\\n templateId = templates++;\\n emit DisputeTemplate(templateId, _templateTag, _templateData, _templateDataMappings);\\n }\\n}\\n\",\"keccak256\":\"0xbc2d8ff9784d93f932199993fd58aab88fbc367268a10ffb7fe07a85826960c1\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitrableDisputeID The identifier of the dispute in the Arbitrable contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitrableDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x389326b1f749454ed179bdac2f9d6ce24a1ef944bbce976ca78b93f4e173354a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0x453943ba5ccc94b9b9cdfd4afd3678682d62d8b90fe16b43e90215387d2f6a51\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0x4b1b3f98d13e4a9a1c546dd45f98490f86e871cfc4b4be9a3fe4d29b3c99649c\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506102f1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80633a283d7d1461003b5780634a99417414610056575b600080fd5b61004460005481565b60405190815260200160405180910390f35b610044610064366004610172565b600080548180610073836101fa565b919050559050836040516100879190610245565b6040518091039020817ef7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff992485856040516100c092919061028d565b60405180910390a39392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126100f657600080fd5b813567ffffffffffffffff80821115610111576101116100cf565b604051601f8301601f19908116603f01168101908282118183101715610139576101396100cf565b8160405283815286602085880101111561015257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561018757600080fd5b833567ffffffffffffffff8082111561019f57600080fd5b6101ab878388016100e5565b945060208601359150808211156101c157600080fd5b6101cd878388016100e5565b935060408601359150808211156101e357600080fd5b506101f0868287016100e5565b9150509250925092565b60006001820161021a57634e487b7160e01b600052601160045260246000fd5b5060010190565b60005b8381101561023c578181015183820152602001610224565b50506000910152565b60008251610257818460208701610221565b9190910192915050565b60008151808452610279816020860160208601610221565b601f01601f19169290920160200192915050565b6040815260006102a06040830185610261565b82810360208401526102b28185610261565b9594505050505056fea26469706673582212208e28c2a1ac6bf992487f46d3bb5b26e186ac986099d0d98440c6107f111f92ab64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80633a283d7d1461003b5780634a99417414610056575b600080fd5b61004460005481565b60405190815260200160405180910390f35b610044610064366004610172565b600080548180610073836101fa565b919050559050836040516100879190610245565b6040518091039020817ef7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff992485856040516100c092919061028d565b60405180910390a39392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126100f657600080fd5b813567ffffffffffffffff80821115610111576101116100cf565b604051601f8301601f19908116603f01168101908282118183101715610139576101396100cf565b8160405283815286602085880101111561015257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561018757600080fd5b833567ffffffffffffffff8082111561019f57600080fd5b6101ab878388016100e5565b945060208601359150808211156101c157600080fd5b6101cd878388016100e5565b935060408601359150808211156101e357600080fd5b506101f0868287016100e5565b9150509250925092565b60006001820161021a57634e487b7160e01b600052601160045260246000fd5b5060010190565b60005b8381101561023c578181015183820152602001610224565b50506000910152565b60008251610257818460208701610221565b9190910192915050565b60008151808452610279816020860160208601610221565b601f01601f19169290920160200192915050565b6040815260006102a06040830185610261565b82810360208401526102b28185610261565b9594505050505056fea26469706673582212208e28c2a1ac6bf992487f46d3bb5b26e186ac986099d0d98440c6107f111f92ab64736f6c63430008120033", - "devdoc": { - "details": "A contract to maintain a registry of dispute templates.", - "events": { - "DisputeTemplate(uint256,string,string,string)": { - "details": "To be emitted when a new dispute template is created.", - "params": { - "_templateData": "The template data.", - "_templateDataMappings": "The data mappings.", - "_templateId": "The identifier of the dispute template.", - "_templateTag": "An optional tag for the dispute template, such as \"registration\" or \"removal\"." - } - } - }, - "kind": "dev", - "methods": {}, - "title": "Dispute Template Registry", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 2685, - "contract": "src/arbitration/DisputeTemplateRegistry.sol:DisputeTemplateRegistry", - "label": "templates", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/chiado/ForeignGatewayOnGnosis.json b/contracts/deployments/chiado/ForeignGatewayOnGnosis.json deleted file mode 100644 index 5ce9977a8..000000000 --- a/contracts/deployments/chiado/ForeignGatewayOnGnosis.json +++ /dev/null @@ -1,930 +0,0 @@ -{ - "address": "0x2824bdcc752b1272D56A84be03A74Ee856C06e43", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_veaOutbox", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_homeChainID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_homeGateway", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - } - ], - "name": "ArbitrationCostModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "_foreignBlockHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "_foreignArbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_foreignDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "CrossChainDisputeOutgoing", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_NB_OF_JURORS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - } - ], - "name": "changeCourtJurorFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_homeGateway", - "type": "address" - } - ], - "name": "changeHomeGateway", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_veaOutbox", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "name": "changeVea", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "deprecatedVeaOutbox", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "deprecatedVeaOutboxExpiration", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_disputeHash", - "type": "bytes32" - } - ], - "name": "disputeHashToForeignID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "disputeHashtoDisputeData", - "outputs": [ - { - "internalType": "uint248", - "name": "id", - "type": "uint248" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "address", - "name": "arbitrable", - "type": "address" - }, - { - "internalType": "uint256", - "name": "paid", - "type": "uint256" - }, - { - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "name": "feeForJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "homeChainID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "homeGateway", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_messageSender", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_disputeHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "relayRule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "senderGateway", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "veaOutbox", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_disputeHash", - "type": "bytes32" - } - ], - "name": "withdrawFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xcdaf2b7fd205cf50779b9748b4a48ecc5b251dd04a2d02c7318b7c82882e0d3c", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x2824bdcc752b1272D56A84be03A74Ee856C06e43", - "transactionIndex": 1, - "gasUsed": "1061402", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x338c2e86e97f6bee552f0c10e8bd1708cee7bac9e03a0bd3e7ea3f9632083211", - "transactionHash": "0xcdaf2b7fd205cf50779b9748b4a48ecc5b251dd04a2d02c7318b7c82882e0d3c", - "logs": [], - "blockNumber": 5418560, - "cumulativeGasUsed": "1089266", - "status": 1, - "byzantium": true - }, - "args": [ - "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "0xdFd7aDEb43d46FA3f16FB3e27F7fe85c3f5BD89D", - "0x0000000000000000000000000000000000000000000000000000000000066eed", - "0xdd69c7e8d5B3a6185DE84bBbCacb480153E4e1d8" - ], - "numDeployments": 6, - "solcInputHash": "7e0c306a4451043d6e53d94781f5594c", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_veaOutbox\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_homeChainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_homeGateway\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"AcceptedFeeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"}],\"name\":\"ArbitrationCostModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_foreignBlockHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_foreignArbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_foreignDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"CrossChainDisputeOutgoing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"NewCurrencyRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_NB_OF_JURORS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"}],\"name\":\"changeCourtJurorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_homeGateway\",\"type\":\"address\"}],\"name\":\"changeHomeGateway\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_veaOutbox\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"changeVea\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deprecatedVeaOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deprecatedVeaOutboxExpiration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_disputeHash\",\"type\":\"bytes32\"}],\"name\":\"disputeHashToForeignID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"disputeHashtoDisputeData\",\"outputs\":[{\"internalType\":\"uint248\",\"name\":\"id\",\"type\":\"uint248\"},{\"internalType\":\"bool\",\"name\":\"ruled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"arbitrable\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"paid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"name\":\"feeForJuror\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"homeChainID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"homeGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messageSender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_disputeHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"relayRule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"senderGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"veaOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_disputeHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"AcceptedFeeToken(address,bool)\":{\"details\":\"To be emitted when an ERC20 token is added or removed as a method to pay fees.\",\"params\":{\"_accepted\":\"Whether the token is accepted or not.\",\"_token\":\"The ERC20 token.\"}},\"CrossChainDisputeOutgoing(bytes32,address,uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is sent to the IHomeGateway.\",\"params\":{\"_choices\":\"The number of choices the arbitrator can choose from in this dispute.\",\"_extraData\":\"Any extra data to attach.\",\"_foreignArbitrable\":\"The address of the Arbitrable contract.\",\"_foreignBlockHash\":\"foreignBlockHash\",\"_foreignDisputeID\":\"The identifier of the dispute in the Arbitrable contract.\"}},\"DisputeCreation(uint256,address)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_arbitrable\":\"The contract which created the dispute.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\"}},\"NewCurrencyRate(address,uint64,uint8)\":{\"details\":\"To be emitted when the fee for a particular ERC20 token is updated.\",\"params\":{\"_feeToken\":\"The ERC20 token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrable\":\"The arbitrable receiving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}}},\"kind\":\"dev\",\"methods\":{\"arbitrationCost(bytes)\":{\"details\":\"Compute the cost of arbitration denominated in the native currency, typically ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\"},\"returns\":{\"cost\":\"The arbitration cost in ETH.\"}},\"arbitrationCost(bytes,address)\":{\"details\":\"Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeToken\":\"The ERC20 token used to pay fees.\"},\"returns\":{\"_0\":\"The arbitration cost in `_feeToken`.\"}},\"changeCourtJurorFee(uint96,uint256)\":{\"details\":\"Changes the `feeForJuror` property value of a specified court.\",\"params\":{\"_courtID\":\"The ID of the court on the v2 arbitrator. Not to be confused with the courtID on KlerosLiquid.\",\"_feeForJuror\":\"The new value for the `feeForJuror` property value.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the governor.\",\"params\":{\"_governor\":\"The address of the new governor.\"}},\"changeHomeGateway(address)\":{\"details\":\"Changes the home gateway.\",\"params\":{\"_homeGateway\":\"The address of the new home gateway.\"}},\"changeVea(address,uint256)\":{\"details\":\"Changes the outbox.\",\"params\":{\"_gracePeriod\":\"The duration to accept messages from the deprecated bridge (if at all).\",\"_veaOutbox\":\"The address of the new outbox.\"}},\"createDispute(uint256,bytes)\":{\"details\":\"Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"createDispute(uint256,bytes,address,uint256)\":{\"details\":\"Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeAmount\":\"Amount of the ERC20 token used to pay fees.\",\"_feeToken\":\"The ERC20 token used to pay fees.\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"_0\":\"The identifier of the dispute created.\"}},\"disputeHashToForeignID(bytes32)\":{\"details\":\"Looks up the local foreign disputeID for a disputeHash\",\"params\":{\"_disputeHash\":\"dispute hash\"}},\"withdrawFees(bytes32)\":{\"params\":{\"_disputeHash\":\"The dispute hash for which to withdraw the fees.\"}}},\"stateVariables\":{\"homeChainID\":{\"return\":\"The chain ID where the corresponding home gateway is deployed.\",\"returns\":{\"_0\":\"The chain ID where the corresponding home gateway is deployed.\"}},\"homeGateway\":{\"return\":\"The address of the corresponding home gateway.\",\"returns\":{\"_0\":\"The address of the corresponding home gateway.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"relayRule(address,bytes32,uint256,address)\":{\"notice\":\"Relay the rule call from the home gateway to the arbitrable.\"},\"withdrawFees(bytes32)\":{\"notice\":\"Reimburses the dispute fees to the relayer who paid for these fees on the home chain.\"}},\"notice\":\"Foreign Gateway Counterpart of `HomeGateway`\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/gateway/ForeignGateway.sol\":\"ForeignGateway\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@kleros/vea-contracts/src/interfaces/gateways/IReceiverGateway.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\ninterface IReceiverGateway {\\n function veaOutbox() external view returns (address);\\n\\n function senderGateway() external view returns (address);\\n}\\n\",\"keccak256\":\"0xde6bdbe57ced7c1e79d62dca23aa8c2322e031da91ceac22cefd185f1e3740ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitrableDisputeID The identifier of the dispute in the Arbitrable contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitrableDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x389326b1f749454ed179bdac2f9d6ce24a1ef944bbce976ca78b93f4e173354a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0x453943ba5ccc94b9b9cdfd4afd3678682d62d8b90fe16b43e90215387d2f6a51\",\"license\":\"MIT\"},\"src/gateway/ForeignGateway.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere, @shalzz]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./interfaces/IForeignGateway.sol\\\";\\n\\n/// Foreign Gateway\\n/// Counterpart of `HomeGateway`\\ncontract ForeignGateway is IForeignGateway {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeData {\\n uint248 id;\\n bool ruled;\\n address arbitrable;\\n uint256 paid;\\n address relayer;\\n }\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event ArbitrationCostModified(uint96 indexed _courtID, uint256 _feeForJuror);\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\n uint256 internal localDisputeID = 1; // The disputeID must start from 1 as the KlerosV1 proxy governor depends on this implementation. We now also depend on localDisputeID not ever being zero.\\n mapping(uint96 => uint256) public feeForJuror; // feeForJuror[v2CourtID], it mirrors the value on KlerosCore.\\n address public governor;\\n address public veaOutbox;\\n uint256 public immutable override homeChainID;\\n address public override homeGateway;\\n address public deprecatedVeaOutbox;\\n uint256 public deprecatedVeaOutboxExpiration;\\n mapping(bytes32 => DisputeData) public disputeHashtoDisputeData;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyFromVea(address _messageSender) {\\n require(\\n veaOutbox == msg.sender ||\\n (block.timestamp < deprecatedVeaOutboxExpiration && deprecatedVeaOutbox == msg.sender),\\n \\\"Access not allowed: Vea Outbox only.\\\"\\n );\\n require(_messageSender == homeGateway, \\\"Access not allowed: HomeGateway only.\\\");\\n _;\\n }\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n constructor(address _governor, address _veaOutbox, uint256 _homeChainID, address _homeGateway) {\\n governor = _governor;\\n veaOutbox = _veaOutbox;\\n homeChainID = _homeChainID;\\n homeGateway = _homeGateway;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n governor = _governor;\\n }\\n\\n /// @dev Changes the outbox.\\n /// @param _veaOutbox The address of the new outbox.\\n /// @param _gracePeriod The duration to accept messages from the deprecated bridge (if at all).\\n function changeVea(address _veaOutbox, uint256 _gracePeriod) external onlyByGovernor {\\n // grace period to relay the remaining messages which are still going through the deprecated bridge.\\n deprecatedVeaOutboxExpiration = block.timestamp + _gracePeriod;\\n deprecatedVeaOutbox = veaOutbox;\\n veaOutbox = _veaOutbox;\\n }\\n\\n /// @dev Changes the home gateway.\\n /// @param _homeGateway The address of the new home gateway.\\n function changeHomeGateway(address _homeGateway) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n homeGateway = _homeGateway;\\n }\\n\\n /// @dev Changes the `feeForJuror` property value of a specified court.\\n /// @param _courtID The ID of the court on the v2 arbitrator. Not to be confused with the courtID on KlerosLiquid.\\n /// @param _feeForJuror The new value for the `feeForJuror` property value.\\n function changeCourtJurorFee(uint96 _courtID, uint256 _feeForJuror) external onlyByGovernor {\\n feeForJuror[_courtID] = _feeForJuror;\\n emit ArbitrationCostModified(_courtID, _feeForJuror);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _choices,\\n bytes calldata _extraData\\n ) external payable override returns (uint256 disputeID) {\\n require(msg.value >= arbitrationCost(_extraData), \\\"Not paid enough for arbitration\\\");\\n\\n disputeID = localDisputeID++;\\n uint256 chainID;\\n assembly {\\n chainID := chainid()\\n }\\n bytes32 disputeHash = keccak256(\\n abi.encodePacked(\\n \\\"createDispute\\\",\\n blockhash(block.number - 1),\\n chainID,\\n msg.sender,\\n disputeID,\\n _choices,\\n _extraData\\n )\\n );\\n\\n disputeHashtoDisputeData[disputeHash] = DisputeData({\\n id: uint248(disputeID),\\n arbitrable: msg.sender,\\n paid: msg.value,\\n relayer: address(0),\\n ruled: false\\n });\\n\\n emit CrossChainDisputeOutgoing(blockhash(block.number - 1), msg.sender, disputeID, _choices, _extraData);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 /*_choices*/,\\n bytes calldata /*_extraData*/,\\n IERC20 /*_feeToken*/,\\n uint256 /*_feeAmount*/\\n ) external pure override returns (uint256) {\\n revert(\\\"Not supported\\\");\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function arbitrationCost(bytes calldata _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors) = extraDataToCourtIDMinJurors(_extraData);\\n cost = feeForJuror[courtID] * minJurors;\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function arbitrationCost(\\n bytes calldata /*_extraData*/,\\n IERC20 /*_feeToken*/\\n ) public pure override returns (uint256 /*cost*/) {\\n revert(\\\"Not supported\\\");\\n }\\n\\n /// @inheritdoc IForeignGateway\\n function relayRule(\\n address _messageSender,\\n bytes32 _disputeHash,\\n uint256 _ruling,\\n address _relayer\\n ) external override onlyFromVea(_messageSender) {\\n DisputeData storage dispute = disputeHashtoDisputeData[_disputeHash];\\n\\n require(dispute.id != 0, \\\"Dispute does not exist\\\");\\n require(!dispute.ruled, \\\"Cannot rule twice\\\");\\n\\n dispute.ruled = true;\\n dispute.relayer = _relayer;\\n\\n IArbitrableV2 arbitrable = IArbitrableV2(dispute.arbitrable);\\n arbitrable.rule(dispute.id, _ruling);\\n }\\n\\n /// @inheritdoc IForeignGateway\\n function withdrawFees(bytes32 _disputeHash) external override {\\n DisputeData storage dispute = disputeHashtoDisputeData[_disputeHash];\\n require(dispute.id != 0, \\\"Dispute does not exist\\\");\\n require(dispute.ruled, \\\"Not ruled yet\\\");\\n\\n uint256 amount = dispute.paid;\\n dispute.paid = 0;\\n payable(dispute.relayer).transfer(amount);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @inheritdoc IForeignGateway\\n function disputeHashToForeignID(bytes32 _disputeHash) external view override returns (uint256) {\\n return disputeHashtoDisputeData[_disputeHash].id;\\n }\\n\\n /// @inheritdoc IReceiverGateway\\n function senderGateway() external view override returns (address) {\\n return homeGateway;\\n }\\n\\n function currentRuling(\\n uint256 /*_disputeID*/\\n ) public pure returns (uint256 /*ruling*/, bool /*tied*/, bool /*overridden*/) {\\n revert(\\\"Not supported\\\");\\n }\\n\\n // ************************ //\\n // * Internal * //\\n // ************************ //\\n\\n function extraDataToCourtIDMinJurors(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors) {\\n // Note that here we ignore DisputeKitID\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n }\\n if (feeForJuror[courtID] == 0) courtID = 0;\\n if (minJurors == 0) minJurors = DEFAULT_NB_OF_JURORS;\\n } else {\\n courtID = 0;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x22ebbed56967cbb41908e6636be3c06b4c528bcb9f1f7556fecdf98945d717a8\",\"license\":\"MIT\"},\"src/gateway/interfaces/IForeignGateway.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere, @shalzz]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"../../arbitration/interfaces/IArbitratorV2.sol\\\";\\nimport \\\"@kleros/vea-contracts/src/interfaces/gateways/IReceiverGateway.sol\\\";\\n\\ninterface IForeignGateway is IArbitratorV2, IReceiverGateway {\\n /// @dev To be emitted when a dispute is sent to the IHomeGateway.\\n /// @param _foreignBlockHash foreignBlockHash\\n /// @param _foreignArbitrable The address of the Arbitrable contract.\\n /// @param _foreignDisputeID The identifier of the dispute in the Arbitrable contract.\\n /// @param _choices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Any extra data to attach.\\n event CrossChainDisputeOutgoing(\\n bytes32 _foreignBlockHash,\\n address indexed _foreignArbitrable,\\n uint256 indexed _foreignDisputeID,\\n uint256 _choices,\\n bytes _extraData\\n );\\n\\n /// Relay the rule call from the home gateway to the arbitrable.\\n function relayRule(address _messageSender, bytes32 _disputeHash, uint256 _ruling, address _forwarder) external;\\n\\n /// Reimburses the dispute fees to the relayer who paid for these fees on the home chain.\\n /// @param _disputeHash The dispute hash for which to withdraw the fees.\\n function withdrawFees(bytes32 _disputeHash) external;\\n\\n /// @dev Looks up the local foreign disputeID for a disputeHash\\n /// @param _disputeHash dispute hash\\n function disputeHashToForeignID(bytes32 _disputeHash) external view returns (uint256);\\n\\n /// @return The chain ID where the corresponding home gateway is deployed.\\n function homeChainID() external view returns (uint256);\\n\\n /// @return The address of the corresponding home gateway.\\n function homeGateway() external view returns (address);\\n}\\n\",\"keccak256\":\"0xf59d1a9cd8b601f82ea3871d48bd9181e012a650e8f075e2c23c04df00ca6fe8\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a0604052600160005534801561001557600080fd5b5060405161118b38038061118b83398101604081905261003491610098565b600280546001600160a01b039586166001600160a01b0319918216179091556003805494861694821694909417909355608091909152600480549190931691161790556100e5565b80516001600160a01b038116811461009357600080fd5b919050565b600080600080608085870312156100ae57600080fd5b6100b78561007c565b93506100c56020860161007c565b9250604085015191506100da6060860161007c565b905092959194509250565b60805161108b61010060003960006101e8015261108b6000f3fe6080604052600436106101355760003560e01c8063a60a4db5116100ab578063d98493f61161006f578063d98493f614610419578063dea580b914610439578063e4c0aaf414610459578063ebb7119414610479578063f6506db414610499578063f7434ea9146104b457600080fd5b8063a60a4db514610311578063bcb1a16614610331578063c13517e114610346578063ce0aaf9514610359578063d3c617ff1461037757600080fd5b806336e41d3d116100fd57806336e41d3d1461024e57806345c9044114610264578063492d85d4146102915780634d53c2a5146102b157806367c51947146102d157806393626084146102f157600080fd5b80630c340a241461013a5780631c3db16d146101775780631debaba6146101b45780631fc6b556146101d65780632e1db89014610218575b600080fd5b34801561014657600080fd5b5060025461015a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561018357600080fd5b50610197610192366004610c01565b6104d4565b60408051938452911515602084015215159082015260600161016e565b3480156101c057600080fd5b506101d46101cf366004610c32565b6104fa565b005b3480156101e257600080fd5b5061020a7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161016e565b34801561022457600080fd5b5061020a610233366004610c01565b6000908152600760205260409020546001600160f81b031690565b34801561025a57600080fd5b5061020a60065481565b34801561027057600080fd5b5061020a61027f366004610c7a565b60016020526000908152604090205481565b34801561029d57600080fd5b506101d46102ac366004610c9c565b610562565b3480156102bd57600080fd5b5060045461015a906001600160a01b031681565b3480156102dd57600080fd5b506101d46102ec366004610cb9565b6105ae565b3480156102fd57600080fd5b5060055461015a906001600160a01b031681565b34801561031d57600080fd5b506101d461032c366004610cd5565b610631565b34801561033d57600080fd5b5061020a600381565b61020a610354366004610d68565b61084e565b34801561036557600080fd5b506004546001600160a01b031661015a565b34801561038357600080fd5b506103db610392366004610c01565b60076020526000908152604090208054600182015460028301546003909301546001600160f81b03831693600160f81b90930460ff16926001600160a01b039283169290911685565b604080516001600160f81b03909616865293151560208601526001600160a01b0392831693850193909352606084015216608082015260a00161016e565b34801561042557600080fd5b5061020a610434366004610db4565b6109ea565b34801561044557600080fd5b5060035461015a906001600160a01b031681565b34801561046557600080fd5b506101d4610474366004610c9c565b610a04565b34801561048557600080fd5b506101d4610494366004610c01565b610a50565b3480156104a557600080fd5b5061020a610434366004610e0b565b3480156104c057600080fd5b5061020a6104cf366004610e72565b610b22565b600080600060405162461bcd60e51b81526004016104f190610eb4565b60405180910390fd5b6002546001600160a01b031633146105245760405162461bcd60e51b81526004016104f190610edb565b61052e8142610f33565b6006555060038054600580546001600160a01b038084166001600160a01b0319928316179092559091169216919091179055565b6002546001600160a01b0316331461058c5760405162461bcd60e51b81526004016104f190610edb565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146105d85760405162461bcd60e51b81526004016104f190610edb565b6001600160601b03821660008181526001602052604090819020839055517f20a6ef9c48f3a1ae927e70bc34e82d974c53d3c98c8fd9e731c4bacd5842c596906106259084815260200190565b60405180910390a25050565b60035484906001600160a01b031633148061066257506006544210801561066257506005546001600160a01b031633145b6106ba5760405162461bcd60e51b8152602060048201526024808201527f416363657373206e6f7420616c6c6f7765643a20566561204f7574626f78206f60448201526337363c9760e11b60648201526084016104f1565b6004546001600160a01b038281169116146107255760405162461bcd60e51b815260206004820152602560248201527f416363657373206e6f7420616c6c6f7765643a20486f6d65476174657761792060448201526437b7363c9760d91b60648201526084016104f1565b6000848152600760205260408120805490916001600160f81b0390911690036107605760405162461bcd60e51b81526004016104f190610f4c565b8054600160f81b900460ff16156107ad5760405162461bcd60e51b815260206004820152601160248201527043616e6e6f742072756c6520747769636560781b60448201526064016104f1565b80546001600160f81b0316600160f81b811782556003820180546001600160a01b038681166001600160a01b031990921691909117909155600183015460405163188d362b60e11b81526004810193909352602483018790521690819063311a6c5690604401600060405180830381600087803b15801561082d57600080fd5b505af1158015610841573d6000803e3d6000fd5b5050505050505050505050565b600061085a8383610b22565b3410156108a95760405162461bcd60e51b815260206004820152601f60248201527f4e6f74207061696420656e6f75676820666f72206172626974726174696f6e0060448201526064016104f1565b6000805490806108b883610f7c565b9091555090504660006108cc600143610f95565b408233858989896040516020016108e99796959493929190610fa8565b60408051601f19818403018152828252805160209182012060a0840183526001600160f81b0380881685526000858401818152338787018181523460608a0190815260808a01858152878652600790985297909320975191511515600160f81b029190931617865551600186810180546001600160a01b039384166001600160a01b031991821617909155955160028801559351600390960180549690911695909416949094179092559092508491907f03e54fa10baada663d819e5d7e4533535bfb6d4407abe51045be84e6c8de0203906109c59043610f95565b408989896040516109d99493929190611001565b60405180910390a350509392505050565b600060405162461bcd60e51b81526004016104f190610eb4565b6002546001600160a01b03163314610a2e5760405162461bcd60e51b81526004016104f190610edb565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600760205260408120805490916001600160f81b039091169003610a8b5760405162461bcd60e51b81526004016104f190610f4c565b8054600160f81b900460ff16610ad35760405162461bcd60e51b815260206004820152600d60248201526c139bdd081c9d5b1959081e595d609a1b60448201526064016104f1565b600281018054600091829055600383015460405191926001600160a01b039091169183156108fc0291849190818181858888f19350505050158015610b1c573d6000803e3d6000fd5b50505050565b6000806000610b6685858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b9892505050565b6001600160601b0382166000908152600160205260409020549193509150610b8f90829061103e565b95945050505050565b6000806040835110610bf557602083015191506040830151905060016000836001600160601b03166001600160601b0316815260200190815260200160002054600003610be457600091505b80600003610bf0575060035b915091565b50600090506003915091565b600060208284031215610c1357600080fd5b5035919050565b6001600160a01b0381168114610c2f57600080fd5b50565b60008060408385031215610c4557600080fd5b8235610c5081610c1a565b946020939093013593505050565b80356001600160601b0381168114610c7557600080fd5b919050565b600060208284031215610c8c57600080fd5b610c9582610c5e565b9392505050565b600060208284031215610cae57600080fd5b8135610c9581610c1a565b60008060408385031215610ccc57600080fd5b610c5083610c5e565b60008060008060808587031215610ceb57600080fd5b8435610cf681610c1a565b935060208501359250604085013591506060850135610d1481610c1a565b939692955090935050565b60008083601f840112610d3157600080fd5b50813567ffffffffffffffff811115610d4957600080fd5b602083019150836020828501011115610d6157600080fd5b9250929050565b600080600060408486031215610d7d57600080fd5b83359250602084013567ffffffffffffffff811115610d9b57600080fd5b610da786828701610d1f565b9497909650939450505050565b600080600060408486031215610dc957600080fd5b833567ffffffffffffffff811115610de057600080fd5b610dec86828701610d1f565b9094509250506020840135610e0081610c1a565b809150509250925092565b600080600080600060808688031215610e2357600080fd5b85359450602086013567ffffffffffffffff811115610e4157600080fd5b610e4d88828901610d1f565b9095509350506040860135610e6181610c1a565b949793965091946060013592915050565b60008060208385031215610e8557600080fd5b823567ffffffffffffffff811115610e9c57600080fd5b610ea885828601610d1f565b90969095509350505050565b6020808252600d908201526c139bdd081cdd5c1c1bdc9d1959609a1b604082015260600190565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f4657610f46610f1d565b92915050565b602080825260169082015275111a5cdc1d5d1948191bd95cc81b9bdd08195e1a5cdd60521b604082015260600190565b600060018201610f8e57610f8e610f1d565b5060010190565b81810381811115610f4657610f46610f1d565b6c6372656174654469737075746560981b815287600d82015286602d8201526001600160601b03198660601b16604d820152846061820152836081820152818360a18301376000910160a1019081529695505050505050565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b8082028115828204841417610f4657610f46610f1d56fea2646970667358221220888d17a28a1ff1af1dfc3a7bd01b535245108bd5fc246f795eff76271d0a0cbc64736f6c63430008120033", - "deployedBytecode": "0x6080604052600436106101355760003560e01c8063a60a4db5116100ab578063d98493f61161006f578063d98493f614610419578063dea580b914610439578063e4c0aaf414610459578063ebb7119414610479578063f6506db414610499578063f7434ea9146104b457600080fd5b8063a60a4db514610311578063bcb1a16614610331578063c13517e114610346578063ce0aaf9514610359578063d3c617ff1461037757600080fd5b806336e41d3d116100fd57806336e41d3d1461024e57806345c9044114610264578063492d85d4146102915780634d53c2a5146102b157806367c51947146102d157806393626084146102f157600080fd5b80630c340a241461013a5780631c3db16d146101775780631debaba6146101b45780631fc6b556146101d65780632e1db89014610218575b600080fd5b34801561014657600080fd5b5060025461015a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561018357600080fd5b50610197610192366004610c01565b6104d4565b60408051938452911515602084015215159082015260600161016e565b3480156101c057600080fd5b506101d46101cf366004610c32565b6104fa565b005b3480156101e257600080fd5b5061020a7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161016e565b34801561022457600080fd5b5061020a610233366004610c01565b6000908152600760205260409020546001600160f81b031690565b34801561025a57600080fd5b5061020a60065481565b34801561027057600080fd5b5061020a61027f366004610c7a565b60016020526000908152604090205481565b34801561029d57600080fd5b506101d46102ac366004610c9c565b610562565b3480156102bd57600080fd5b5060045461015a906001600160a01b031681565b3480156102dd57600080fd5b506101d46102ec366004610cb9565b6105ae565b3480156102fd57600080fd5b5060055461015a906001600160a01b031681565b34801561031d57600080fd5b506101d461032c366004610cd5565b610631565b34801561033d57600080fd5b5061020a600381565b61020a610354366004610d68565b61084e565b34801561036557600080fd5b506004546001600160a01b031661015a565b34801561038357600080fd5b506103db610392366004610c01565b60076020526000908152604090208054600182015460028301546003909301546001600160f81b03831693600160f81b90930460ff16926001600160a01b039283169290911685565b604080516001600160f81b03909616865293151560208601526001600160a01b0392831693850193909352606084015216608082015260a00161016e565b34801561042557600080fd5b5061020a610434366004610db4565b6109ea565b34801561044557600080fd5b5060035461015a906001600160a01b031681565b34801561046557600080fd5b506101d4610474366004610c9c565b610a04565b34801561048557600080fd5b506101d4610494366004610c01565b610a50565b3480156104a557600080fd5b5061020a610434366004610e0b565b3480156104c057600080fd5b5061020a6104cf366004610e72565b610b22565b600080600060405162461bcd60e51b81526004016104f190610eb4565b60405180910390fd5b6002546001600160a01b031633146105245760405162461bcd60e51b81526004016104f190610edb565b61052e8142610f33565b6006555060038054600580546001600160a01b038084166001600160a01b0319928316179092559091169216919091179055565b6002546001600160a01b0316331461058c5760405162461bcd60e51b81526004016104f190610edb565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146105d85760405162461bcd60e51b81526004016104f190610edb565b6001600160601b03821660008181526001602052604090819020839055517f20a6ef9c48f3a1ae927e70bc34e82d974c53d3c98c8fd9e731c4bacd5842c596906106259084815260200190565b60405180910390a25050565b60035484906001600160a01b031633148061066257506006544210801561066257506005546001600160a01b031633145b6106ba5760405162461bcd60e51b8152602060048201526024808201527f416363657373206e6f7420616c6c6f7765643a20566561204f7574626f78206f60448201526337363c9760e11b60648201526084016104f1565b6004546001600160a01b038281169116146107255760405162461bcd60e51b815260206004820152602560248201527f416363657373206e6f7420616c6c6f7765643a20486f6d65476174657761792060448201526437b7363c9760d91b60648201526084016104f1565b6000848152600760205260408120805490916001600160f81b0390911690036107605760405162461bcd60e51b81526004016104f190610f4c565b8054600160f81b900460ff16156107ad5760405162461bcd60e51b815260206004820152601160248201527043616e6e6f742072756c6520747769636560781b60448201526064016104f1565b80546001600160f81b0316600160f81b811782556003820180546001600160a01b038681166001600160a01b031990921691909117909155600183015460405163188d362b60e11b81526004810193909352602483018790521690819063311a6c5690604401600060405180830381600087803b15801561082d57600080fd5b505af1158015610841573d6000803e3d6000fd5b5050505050505050505050565b600061085a8383610b22565b3410156108a95760405162461bcd60e51b815260206004820152601f60248201527f4e6f74207061696420656e6f75676820666f72206172626974726174696f6e0060448201526064016104f1565b6000805490806108b883610f7c565b9091555090504660006108cc600143610f95565b408233858989896040516020016108e99796959493929190610fa8565b60408051601f19818403018152828252805160209182012060a0840183526001600160f81b0380881685526000858401818152338787018181523460608a0190815260808a01858152878652600790985297909320975191511515600160f81b029190931617865551600186810180546001600160a01b039384166001600160a01b031991821617909155955160028801559351600390960180549690911695909416949094179092559092508491907f03e54fa10baada663d819e5d7e4533535bfb6d4407abe51045be84e6c8de0203906109c59043610f95565b408989896040516109d99493929190611001565b60405180910390a350509392505050565b600060405162461bcd60e51b81526004016104f190610eb4565b6002546001600160a01b03163314610a2e5760405162461bcd60e51b81526004016104f190610edb565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600760205260408120805490916001600160f81b039091169003610a8b5760405162461bcd60e51b81526004016104f190610f4c565b8054600160f81b900460ff16610ad35760405162461bcd60e51b815260206004820152600d60248201526c139bdd081c9d5b1959081e595d609a1b60448201526064016104f1565b600281018054600091829055600383015460405191926001600160a01b039091169183156108fc0291849190818181858888f19350505050158015610b1c573d6000803e3d6000fd5b50505050565b6000806000610b6685858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b9892505050565b6001600160601b0382166000908152600160205260409020549193509150610b8f90829061103e565b95945050505050565b6000806040835110610bf557602083015191506040830151905060016000836001600160601b03166001600160601b0316815260200190815260200160002054600003610be457600091505b80600003610bf0575060035b915091565b50600090506003915091565b600060208284031215610c1357600080fd5b5035919050565b6001600160a01b0381168114610c2f57600080fd5b50565b60008060408385031215610c4557600080fd5b8235610c5081610c1a565b946020939093013593505050565b80356001600160601b0381168114610c7557600080fd5b919050565b600060208284031215610c8c57600080fd5b610c9582610c5e565b9392505050565b600060208284031215610cae57600080fd5b8135610c9581610c1a565b60008060408385031215610ccc57600080fd5b610c5083610c5e565b60008060008060808587031215610ceb57600080fd5b8435610cf681610c1a565b935060208501359250604085013591506060850135610d1481610c1a565b939692955090935050565b60008083601f840112610d3157600080fd5b50813567ffffffffffffffff811115610d4957600080fd5b602083019150836020828501011115610d6157600080fd5b9250929050565b600080600060408486031215610d7d57600080fd5b83359250602084013567ffffffffffffffff811115610d9b57600080fd5b610da786828701610d1f565b9497909650939450505050565b600080600060408486031215610dc957600080fd5b833567ffffffffffffffff811115610de057600080fd5b610dec86828701610d1f565b9094509250506020840135610e0081610c1a565b809150509250925092565b600080600080600060808688031215610e2357600080fd5b85359450602086013567ffffffffffffffff811115610e4157600080fd5b610e4d88828901610d1f565b9095509350506040860135610e6181610c1a565b949793965091946060013592915050565b60008060208385031215610e8557600080fd5b823567ffffffffffffffff811115610e9c57600080fd5b610ea885828601610d1f565b90969095509350505050565b6020808252600d908201526c139bdd081cdd5c1c1bdc9d1959609a1b604082015260600190565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f4657610f46610f1d565b92915050565b602080825260169082015275111a5cdc1d5d1948191bd95cc81b9bdd08195e1a5cdd60521b604082015260600190565b600060018201610f8e57610f8e610f1d565b5060010190565b81810381811115610f4657610f46610f1d565b6c6372656174654469737075746560981b815287600d82015286602d8201526001600160601b03198660601b16604d820152846061820152836081820152818360a18301376000910160a1019081529695505050505050565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b8082028115828204841417610f4657610f46610f1d56fea2646970667358221220888d17a28a1ff1af1dfc3a7bd01b535245108bd5fc246f795eff76271d0a0cbc64736f6c63430008120033", - "devdoc": { - "events": { - "AcceptedFeeToken(address,bool)": { - "details": "To be emitted when an ERC20 token is added or removed as a method to pay fees.", - "params": { - "_accepted": "Whether the token is accepted or not.", - "_token": "The ERC20 token." - } - }, - "CrossChainDisputeOutgoing(bytes32,address,uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is sent to the IHomeGateway.", - "params": { - "_choices": "The number of choices the arbitrator can choose from in this dispute.", - "_extraData": "Any extra data to attach.", - "_foreignArbitrable": "The address of the Arbitrable contract.", - "_foreignBlockHash": "foreignBlockHash", - "_foreignDisputeID": "The identifier of the dispute in the Arbitrable contract." - } - }, - "DisputeCreation(uint256,address)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_arbitrable": "The contract which created the dispute.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract." - } - }, - "NewCurrencyRate(address,uint64,uint8)": { - "details": "To be emitted when the fee for a particular ERC20 token is updated.", - "params": { - "_feeToken": "The ERC20 token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrable": "The arbitrable receiving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - } - }, - "kind": "dev", - "methods": { - "arbitrationCost(bytes)": { - "details": "Compute the cost of arbitration denominated in the native currency, typically ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes)." - }, - "returns": { - "cost": "The arbitration cost in ETH." - } - }, - "arbitrationCost(bytes,address)": { - "details": "Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeToken": "The ERC20 token used to pay fees." - }, - "returns": { - "_0": "The arbitration cost in `_feeToken`." - } - }, - "changeCourtJurorFee(uint96,uint256)": { - "details": "Changes the `feeForJuror` property value of a specified court.", - "params": { - "_courtID": "The ID of the court on the v2 arbitrator. Not to be confused with the courtID on KlerosLiquid.", - "_feeForJuror": "The new value for the `feeForJuror` property value." - } - }, - "changeGovernor(address)": { - "details": "Changes the governor.", - "params": { - "_governor": "The address of the new governor." - } - }, - "changeHomeGateway(address)": { - "details": "Changes the home gateway.", - "params": { - "_homeGateway": "The address of the new home gateway." - } - }, - "changeVea(address,uint256)": { - "details": "Changes the outbox.", - "params": { - "_gracePeriod": "The duration to accept messages from the deprecated bridge (if at all).", - "_veaOutbox": "The address of the new outbox." - } - }, - "createDispute(uint256,bytes)": { - "details": "Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "createDispute(uint256,bytes,address,uint256)": { - "details": "Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeAmount": "Amount of the ERC20 token used to pay fees.", - "_feeToken": "The ERC20 token used to pay fees.", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "_0": "The identifier of the dispute created." - } - }, - "disputeHashToForeignID(bytes32)": { - "details": "Looks up the local foreign disputeID for a disputeHash", - "params": { - "_disputeHash": "dispute hash" - } - }, - "withdrawFees(bytes32)": { - "params": { - "_disputeHash": "The dispute hash for which to withdraw the fees." - } - } - }, - "stateVariables": { - "homeChainID": { - "return": "The chain ID where the corresponding home gateway is deployed.", - "returns": { - "_0": "The chain ID where the corresponding home gateway is deployed." - } - }, - "homeGateway": { - "return": "The address of the corresponding home gateway.", - "returns": { - "_0": "The address of the corresponding home gateway." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "relayRule(address,bytes32,uint256,address)": { - "notice": "Relay the rule call from the home gateway to the arbitrable." - }, - "withdrawFees(bytes32)": { - "notice": "Reimburses the dispute fees to the relayer who paid for these fees on the home chain." - } - }, - "notice": "Foreign Gateway Counterpart of `HomeGateway`", - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 15750, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "localDisputeID", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 15754, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "feeForJuror", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint96,t_uint256)" - }, - { - "astId": 15756, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "governor", - "offset": 0, - "slot": "2", - "type": "t_address" - }, - { - "astId": 15758, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "veaOutbox", - "offset": 0, - "slot": "3", - "type": "t_address" - }, - { - "astId": 15764, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "homeGateway", - "offset": 0, - "slot": "4", - "type": "t_address" - }, - { - "astId": 15766, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "deprecatedVeaOutbox", - "offset": 0, - "slot": "5", - "type": "t_address" - }, - { - "astId": 15768, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "deprecatedVeaOutboxExpiration", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 15773, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "disputeHashtoDisputeData", - "offset": 0, - "slot": "7", - "type": "t_mapping(t_bytes32,t_struct(DisputeData)15738_storage)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(DisputeData)15738_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct ForeignGateway.DisputeData)", - "numberOfBytes": "32", - "value": "t_struct(DisputeData)15738_storage" - }, - "t_mapping(t_uint96,t_uint256)": { - "encoding": "mapping", - "key": "t_uint96", - "label": "mapping(uint96 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeData)15738_storage": { - "encoding": "inplace", - "label": "struct ForeignGateway.DisputeData", - "members": [ - { - "astId": 15729, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "id", - "offset": 0, - "slot": "0", - "type": "t_uint248" - }, - { - "astId": 15731, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "ruled", - "offset": 31, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 15733, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "arbitrable", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 15735, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "paid", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 15737, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "relayer", - "offset": 0, - "slot": "3", - "type": "t_address" - } - ], - "numberOfBytes": "128" - }, - "t_uint248": { - "encoding": "inplace", - "label": "uint248", - "numberOfBytes": "31" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/chiado/SortitionSumTreeFactory.json b/contracts/deployments/chiado/SortitionSumTreeFactory.json deleted file mode 100644 index 4c58b9303..000000000 --- a/contracts/deployments/chiado/SortitionSumTreeFactory.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "address": "0xc7e3BF90299f6BD9FA7c3703837A9CAbB5743636", - "abi": [], - "transactionHash": "0x405e9f06449c4d61948ed7f0c9c6cf3f6a9bab4fd8b42db9c1232d41f07ee7d9", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0xc7e3BF90299f6BD9FA7c3703837A9CAbB5743636", - "transactionIndex": 0, - "gasUsed": "636060", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xced975b8d1ee04c3fb122c9d467d1d6bc3ea17b087b9b223c84ecbcfe267e271", - "transactionHash": "0x405e9f06449c4d61948ed7f0c9c6cf3f6a9bab4fd8b42db9c1232d41f07ee7d9", - "logs": [], - "blockNumber": 2252213, - "cumulativeGasUsed": "636060", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "c9b600ff9291ca791c04d618ea467929", - "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Enrique Piqueras - \",\"details\":\"A factory of trees that keep track of staked values for sortition.\",\"kind\":\"dev\",\"methods\":{\"createTree(SortitionSumTreeFactory.SortitionSumTrees storage,bytes32,uint256)\":{\"details\":\"Create a sortition sum tree at the specified key.\",\"params\":{\"_K\":\"The number of children each node in the tree should have.\",\"_key\":\"The key of the new tree.\"}},\"draw(SortitionSumTreeFactory.SortitionSumTrees storage,bytes32,uint256)\":{\"details\":\"Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0.\",\"params\":{\"_drawnNumber\":\"The drawn number.\",\"_key\":\"The key of the tree.\"},\"returns\":{\"ID\":\"The drawn ID. `O(k * log_k(n))` where `k` is the maximum number of childs per node in the tree, and `n` is the maximum number of nodes ever appended.\"}},\"queryLeafs(SortitionSumTreeFactory.SortitionSumTrees storage,bytes32,uint256,uint256)\":{\"details\":\"Query the leaves of a tree. Note that if `startIndex == 0`, the tree is empty and the root node will be returned.\",\"params\":{\"_count\":\"The number of items to return.\",\"_cursor\":\"The pagination cursor.\",\"_key\":\"The key of the tree to get the leaves from.\"},\"returns\":{\"hasMore\":\"Whether there are more for pagination. `O(n)` where `n` is the maximum number of nodes ever appended.\",\"startIndex\":\"The index at which leaves start.\",\"values\":\"The values of the returned leaves.\"}},\"set(SortitionSumTreeFactory.SortitionSumTrees storage,bytes32,uint256,bytes32)\":{\"details\":\"Set a value of a tree.\",\"params\":{\"_ID\":\"The ID of the value. `O(log_k(n))` where `k` is the maximum number of childs per node in the tree, and `n` is the maximum number of nodes ever appended.\",\"_key\":\"The key of the tree.\",\"_value\":\"The new value.\"}},\"stakeOf(SortitionSumTreeFactory.SortitionSumTrees storage,bytes32,bytes32)\":{\"details\":\"Gets a specified ID's associated value.\",\"params\":{\"_ID\":\"The ID of the value.\",\"_key\":\"The key of the tree.\"},\"returns\":{\"value\":\"The associated value.\"}}},\"title\":\"SortitionSumTreeFactory\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/libraries/SortitionSumTreeFactory.sol\":\"SortitionSumTreeFactory\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/libraries/SortitionSumTreeFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/**\\n * @authors: [@epiqueras, @unknownunknown1]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\n\\npragma solidity ^0.8;\\n\\n/**\\n * @title SortitionSumTreeFactory\\n * @author Enrique Piqueras - \\n * @dev A factory of trees that keep track of staked values for sortition.\\n */\\nlibrary SortitionSumTreeFactory {\\n /* Structs */\\n\\n struct SortitionSumTree {\\n uint K; // The maximum number of childs per node.\\n // We use this to keep track of vacant positions in the tree after removing a leaf. This is for keeping the tree as balanced as possible without spending gas on moving nodes around.\\n uint[] stack;\\n uint[] nodes;\\n // Two-way mapping of IDs to node indexes. Note that node index 0 is reserved for the root node, and means the ID does not have a node.\\n mapping(bytes32 => uint) IDsToNodeIndexes;\\n mapping(uint => bytes32) nodeIndexesToIDs;\\n }\\n\\n /* Storage */\\n\\n struct SortitionSumTrees {\\n mapping(bytes32 => SortitionSumTree) sortitionSumTrees;\\n }\\n\\n /* Public */\\n\\n /**\\n * @dev Create a sortition sum tree at the specified key.\\n * @param _key The key of the new tree.\\n * @param _K The number of children each node in the tree should have.\\n */\\n function createTree(SortitionSumTrees storage self, bytes32 _key, uint _K) public {\\n SortitionSumTree storage tree = self.sortitionSumTrees[_key];\\n require(tree.K == 0, \\\"Tree already exists.\\\");\\n require(_K > 1, \\\"K must be greater than one.\\\");\\n tree.K = _K;\\n tree.nodes.push(0);\\n }\\n\\n /**\\n * @dev Set a value of a tree.\\n * @param _key The key of the tree.\\n * @param _value The new value.\\n * @param _ID The ID of the value.\\n * `O(log_k(n))` where\\n * `k` is the maximum number of childs per node in the tree,\\n * and `n` is the maximum number of nodes ever appended.\\n */\\n function set(SortitionSumTrees storage self, bytes32 _key, uint _value, bytes32 _ID) public {\\n SortitionSumTree storage tree = self.sortitionSumTrees[_key];\\n uint treeIndex = tree.IDsToNodeIndexes[_ID];\\n\\n if (treeIndex == 0) {\\n // No existing node.\\n if (_value != 0) {\\n // Non zero value.\\n // Append.\\n // Add node.\\n if (tree.stack.length == 0) {\\n // No vacant spots.\\n // Get the index and append the value.\\n treeIndex = tree.nodes.length;\\n tree.nodes.push(_value);\\n\\n // Potentially append a new node and make the parent a sum node.\\n if (treeIndex != 1 && (treeIndex - 1) % tree.K == 0) {\\n // Is first child.\\n uint parentIndex = treeIndex / tree.K;\\n bytes32 parentID = tree.nodeIndexesToIDs[parentIndex];\\n uint newIndex = treeIndex + 1;\\n tree.nodes.push(tree.nodes[parentIndex]);\\n delete tree.nodeIndexesToIDs[parentIndex];\\n tree.IDsToNodeIndexes[parentID] = newIndex;\\n tree.nodeIndexesToIDs[newIndex] = parentID;\\n }\\n } else {\\n // Some vacant spot.\\n // Pop the stack and append the value.\\n treeIndex = tree.stack[tree.stack.length - 1];\\n tree.stack.pop();\\n tree.nodes[treeIndex] = _value;\\n }\\n\\n // Add label.\\n tree.IDsToNodeIndexes[_ID] = treeIndex;\\n tree.nodeIndexesToIDs[treeIndex] = _ID;\\n\\n updateParents(self, _key, treeIndex, true, _value);\\n }\\n } else {\\n // Existing node.\\n if (_value == 0) {\\n // Zero value.\\n // Remove.\\n // Remember value and set to 0.\\n uint value = tree.nodes[treeIndex];\\n tree.nodes[treeIndex] = 0;\\n\\n // Push to stack.\\n tree.stack.push(treeIndex);\\n\\n // Clear label.\\n delete tree.IDsToNodeIndexes[_ID];\\n delete tree.nodeIndexesToIDs[treeIndex];\\n\\n updateParents(self, _key, treeIndex, false, value);\\n } else if (_value != tree.nodes[treeIndex]) {\\n // New, non zero value.\\n // Set.\\n bool plusOrMinus = tree.nodes[treeIndex] <= _value;\\n uint plusOrMinusValue = plusOrMinus ? _value - tree.nodes[treeIndex] : tree.nodes[treeIndex] - _value;\\n tree.nodes[treeIndex] = _value;\\n\\n updateParents(self, _key, treeIndex, plusOrMinus, plusOrMinusValue);\\n }\\n }\\n }\\n\\n /* Public Views */\\n\\n /**\\n * @dev Query the leaves of a tree. Note that if `startIndex == 0`, the tree is empty and the root node will be returned.\\n * @param _key The key of the tree to get the leaves from.\\n * @param _cursor The pagination cursor.\\n * @param _count The number of items to return.\\n * @return startIndex The index at which leaves start.\\n * @return values The values of the returned leaves.\\n * @return hasMore Whether there are more for pagination.\\n * `O(n)` where\\n * `n` is the maximum number of nodes ever appended.\\n */\\n function queryLeafs(\\n SortitionSumTrees storage self,\\n bytes32 _key,\\n uint _cursor,\\n uint _count\\n ) public view returns (uint startIndex, uint[] memory values, bool hasMore) {\\n SortitionSumTree storage tree = self.sortitionSumTrees[_key];\\n\\n // Find the start index.\\n for (uint i = 0; i < tree.nodes.length; i++) {\\n if ((tree.K * i) + 1 >= tree.nodes.length) {\\n startIndex = i;\\n break;\\n }\\n }\\n\\n // Get the values.\\n uint loopStartIndex = startIndex + _cursor;\\n values = new uint[](loopStartIndex + _count > tree.nodes.length ? tree.nodes.length - loopStartIndex : _count);\\n uint valuesIndex = 0;\\n for (uint j = loopStartIndex; j < tree.nodes.length; j++) {\\n if (valuesIndex < _count) {\\n values[valuesIndex] = tree.nodes[j];\\n valuesIndex++;\\n } else {\\n hasMore = true;\\n break;\\n }\\n }\\n }\\n\\n /**\\n * @dev Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0.\\n * @param _key The key of the tree.\\n * @param _drawnNumber The drawn number.\\n * @return ID The drawn ID.\\n * `O(k * log_k(n))` where\\n * `k` is the maximum number of childs per node in the tree,\\n * and `n` is the maximum number of nodes ever appended.\\n */\\n function draw(SortitionSumTrees storage self, bytes32 _key, uint _drawnNumber) public view returns (bytes32 ID) {\\n SortitionSumTree storage tree = self.sortitionSumTrees[_key];\\n uint treeIndex = 0;\\n uint currentDrawnNumber = _drawnNumber % tree.nodes[0];\\n\\n while (\\n (tree.K * treeIndex) + 1 < tree.nodes.length // While it still has children.\\n )\\n for (uint i = 1; i <= tree.K; i++) {\\n // Loop over children.\\n uint nodeIndex = (tree.K * treeIndex) + i;\\n uint nodeValue = tree.nodes[nodeIndex];\\n\\n if (currentDrawnNumber >= nodeValue)\\n currentDrawnNumber -= nodeValue; // Go to the next child.\\n else {\\n // Pick this child.\\n treeIndex = nodeIndex;\\n break;\\n }\\n }\\n\\n ID = tree.nodeIndexesToIDs[treeIndex];\\n }\\n\\n /** @dev Gets a specified ID's associated value.\\n * @param _key The key of the tree.\\n * @param _ID The ID of the value.\\n * @return value The associated value.\\n */\\n function stakeOf(SortitionSumTrees storage self, bytes32 _key, bytes32 _ID) public view returns (uint value) {\\n SortitionSumTree storage tree = self.sortitionSumTrees[_key];\\n uint treeIndex = tree.IDsToNodeIndexes[_ID];\\n\\n if (treeIndex == 0) value = 0;\\n else value = tree.nodes[treeIndex];\\n }\\n\\n /* Private */\\n\\n /**\\n * @dev Update all the parents of a node.\\n * @param _key The key of the tree to update.\\n * @param _treeIndex The index of the node to start from.\\n * @param _plusOrMinus Wether to add (true) or substract (false).\\n * @param _value The value to add or substract.\\n * `O(log_k(n))` where\\n * `k` is the maximum number of childs per node in the tree,\\n * and `n` is the maximum number of nodes ever appended.\\n */\\n function updateParents(\\n SortitionSumTrees storage self,\\n bytes32 _key,\\n uint _treeIndex,\\n bool _plusOrMinus,\\n uint _value\\n ) private {\\n SortitionSumTree storage tree = self.sortitionSumTrees[_key];\\n\\n uint parentIndex = _treeIndex;\\n while (parentIndex != 0) {\\n parentIndex = (parentIndex - 1) / tree.K;\\n tree.nodes[parentIndex] = _plusOrMinus\\n ? tree.nodes[parentIndex] + _value\\n : tree.nodes[parentIndex] - _value;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x053af9495cb8382dfc1e1503d8f3dab3d356d664efdbdf534f146ab8f3834e95\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x610a8c61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100615760003560e01c80632e25c38a1461006657806365b81f4f146100885780637521ccb1146100b357806388c1d467146100d45780639075789e146100e7575b600080fd5b81801561007257600080fd5b506100866100813660046108a0565b610107565b005b61009b6100963660046108a0565b610455565b6040516100aa939291906108d2565b60405180910390f35b6100c66100c136600461092b565b6105c0565b6040519081526020016100aa565b6100c66100e236600461092b565b610616565b8180156100f357600080fd5b5061008661010236600461092b565b61071c565b6000838152602085815260408083208484526003810190925290912054806102cd5783156102c857600182015461021a5750600281018054600180820183556000928352602090922081018590559081148015906101795750815461016d60018361096d565b610177919061099a565b155b1561021557815460009061018d90836109ae565b60008181526004850160205260408120549192506101ac8460016109c2565b9050846002018560020184815481106101c7576101c76109da565b60009182526020808320909101548354600181018555938352818320909301929092559384526004860180825260408086208690558486526003880183528086208490559285529052909120555b610295565b60018083018054909161022c9161096d565b8154811061023c5761023c6109da565b906000526020600020015490508160010180548061025c5761025c6109f0565b6001900381819060005260206000200160009055905583826002018281548110610288576102886109da565b6000918252602090912001555b600083815260038301602090815260408083208490558383526004850190915290208390556102c88686836001886107e2565b61044d565b8361036a5760008260020182815481106102e9576102e96109da565b90600052602060002001549050600083600201838154811061030d5761030d6109da565b600091825260208083209091019290925560018086018054918201815582528282200184905585815260038501825260408082208290558482526004860190925290812081905561036490889088908590856107e2565b5061044d565b81600201818154811061037f5761037f6109da565b9060005260206000200154841461044d576000848360020183815481106103a8576103a86109da565b9060005260206000200154111590506000816103ee57858460020184815481106103d4576103d46109da565b90600052602060002001546103e9919061096d565b610419565b836002018381548110610403576104036109da565b906000526020600020015486610419919061096d565b905085846002018481548110610431576104316109da565b60009182526020909120015561044a88888585856107e2565b50505b505050505050565b60008381526020859052604081206060908290815b60028201548110156104b25760028201548254610488908390610a06565b6104939060016109c2565b106104a0578094506104b2565b806104aa81610a25565b91505061046a565b5060006104bf87866109c2565b60028301549091506104d187836109c2565b116104dc57856104ec565b60028201546104ec90829061096d565b67ffffffffffffffff81111561050457610504610a40565b60405190808252806020026020018201604052801561052d578160200160208202803683370190505b5093506000815b60028401548110156105b257878210156105975783600201818154811061055d5761055d6109da565b906000526020600020015486838151811061057a5761057a6109da565b60209081029190910101528161058f81610a25565b9250506105a0565b600194506105b2565b806105aa81610a25565b915050610534565b505050509450945094915050565b60008281526020848152604080832084845260038101909252822054806105ea576000925061060d565b8160020181815481106105ff576105ff6109da565b906000526020600020015492505b50509392505050565b600082815260208490526040812060028101805483918291829061063c5761063c6109da565b906000526020600020015485610652919061099a565b90505b60028301548354610667908490610a06565b6106729060016109c2565b10156107015760015b835481116106fb576000818486600001546106969190610a06565b6106a091906109c2565b905060008560020182815481106106b9576106b96109da565b906000526020600020015490508084106106de576106d7818561096d565b93506106e6565b5092506106fb565b505080806106f390610a25565b91505061067b565b50610655565b50600090815260049091016020526040902054949350505050565b60008281526020849052604090208054156107755760405162461bcd60e51b81526020600482015260146024820152732a3932b29030b63932b0b23c9032bc34b9ba399760611b60448201526064015b60405180910390fd5b600182116107c55760405162461bcd60e51b815260206004820152601b60248201527f4b206d7573742062652067726561746572207468616e206f6e652e0000000000604482015260640161076c565b908155600201805460018101825560009182526020822001555050565b6000848152602086905260409020835b801561089757815461080560018361096d565b61080f91906109ae565b905083610846578282600201828154811061082c5761082c6109da565b9060005260206000200154610841919061096d565b610871565b8282600201828154811061085c5761085c6109da565b906000526020600020015461087191906109c2565b826002018281548110610886576108866109da565b6000918252602090912001556107f2565b50505050505050565b600080600080608085870312156108b657600080fd5b5050823594602084013594506040840135936060013592509050565b6000606082018583526020606081850152818651808452608086019150828801935060005b81811015610913578451835293830193918301916001016108f7565b50508093505050508215156040830152949350505050565b60008060006060848603121561094057600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561097f5761097f610957565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826109a9576109a9610984565b500690565b6000826109bd576109bd610984565b500490565b600082198211156109d5576109d5610957565b500190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000816000190483118215151615610a2057610a20610957565b500290565b6000600019821415610a3957610a39610957565b5060010190565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220ed612533fe19900f6f7bcb3715e15197fada76852ddc384bf142ca0012dbbcf664736f6c63430008090033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100615760003560e01c80632e25c38a1461006657806365b81f4f146100885780637521ccb1146100b357806388c1d467146100d45780639075789e146100e7575b600080fd5b81801561007257600080fd5b506100866100813660046108a0565b610107565b005b61009b6100963660046108a0565b610455565b6040516100aa939291906108d2565b60405180910390f35b6100c66100c136600461092b565b6105c0565b6040519081526020016100aa565b6100c66100e236600461092b565b610616565b8180156100f357600080fd5b5061008661010236600461092b565b61071c565b6000838152602085815260408083208484526003810190925290912054806102cd5783156102c857600182015461021a5750600281018054600180820183556000928352602090922081018590559081148015906101795750815461016d60018361096d565b610177919061099a565b155b1561021557815460009061018d90836109ae565b60008181526004850160205260408120549192506101ac8460016109c2565b9050846002018560020184815481106101c7576101c76109da565b60009182526020808320909101548354600181018555938352818320909301929092559384526004860180825260408086208690558486526003880183528086208490559285529052909120555b610295565b60018083018054909161022c9161096d565b8154811061023c5761023c6109da565b906000526020600020015490508160010180548061025c5761025c6109f0565b6001900381819060005260206000200160009055905583826002018281548110610288576102886109da565b6000918252602090912001555b600083815260038301602090815260408083208490558383526004850190915290208390556102c88686836001886107e2565b61044d565b8361036a5760008260020182815481106102e9576102e96109da565b90600052602060002001549050600083600201838154811061030d5761030d6109da565b600091825260208083209091019290925560018086018054918201815582528282200184905585815260038501825260408082208290558482526004860190925290812081905561036490889088908590856107e2565b5061044d565b81600201818154811061037f5761037f6109da565b9060005260206000200154841461044d576000848360020183815481106103a8576103a86109da565b9060005260206000200154111590506000816103ee57858460020184815481106103d4576103d46109da565b90600052602060002001546103e9919061096d565b610419565b836002018381548110610403576104036109da565b906000526020600020015486610419919061096d565b905085846002018481548110610431576104316109da565b60009182526020909120015561044a88888585856107e2565b50505b505050505050565b60008381526020859052604081206060908290815b60028201548110156104b25760028201548254610488908390610a06565b6104939060016109c2565b106104a0578094506104b2565b806104aa81610a25565b91505061046a565b5060006104bf87866109c2565b60028301549091506104d187836109c2565b116104dc57856104ec565b60028201546104ec90829061096d565b67ffffffffffffffff81111561050457610504610a40565b60405190808252806020026020018201604052801561052d578160200160208202803683370190505b5093506000815b60028401548110156105b257878210156105975783600201818154811061055d5761055d6109da565b906000526020600020015486838151811061057a5761057a6109da565b60209081029190910101528161058f81610a25565b9250506105a0565b600194506105b2565b806105aa81610a25565b915050610534565b505050509450945094915050565b60008281526020848152604080832084845260038101909252822054806105ea576000925061060d565b8160020181815481106105ff576105ff6109da565b906000526020600020015492505b50509392505050565b600082815260208490526040812060028101805483918291829061063c5761063c6109da565b906000526020600020015485610652919061099a565b90505b60028301548354610667908490610a06565b6106729060016109c2565b10156107015760015b835481116106fb576000818486600001546106969190610a06565b6106a091906109c2565b905060008560020182815481106106b9576106b96109da565b906000526020600020015490508084106106de576106d7818561096d565b93506106e6565b5092506106fb565b505080806106f390610a25565b91505061067b565b50610655565b50600090815260049091016020526040902054949350505050565b60008281526020849052604090208054156107755760405162461bcd60e51b81526020600482015260146024820152732a3932b29030b63932b0b23c9032bc34b9ba399760611b60448201526064015b60405180910390fd5b600182116107c55760405162461bcd60e51b815260206004820152601b60248201527f4b206d7573742062652067726561746572207468616e206f6e652e0000000000604482015260640161076c565b908155600201805460018101825560009182526020822001555050565b6000848152602086905260409020835b801561089757815461080560018361096d565b61080f91906109ae565b905083610846578282600201828154811061082c5761082c6109da565b9060005260206000200154610841919061096d565b610871565b8282600201828154811061085c5761085c6109da565b906000526020600020015461087191906109c2565b826002018281548110610886576108866109da565b6000918252602090912001556107f2565b50505050505050565b600080600080608085870312156108b657600080fd5b5050823594602084013594506040840135936060013592509050565b6000606082018583526020606081850152818651808452608086019150828801935060005b81811015610913578451835293830193918301916001016108f7565b50508093505050508215156040830152949350505050565b60008060006060848603121561094057600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561097f5761097f610957565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826109a9576109a9610984565b500690565b6000826109bd576109bd610984565b500490565b600082198211156109d5576109d5610957565b500190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000816000190483118215151615610a2057610a20610957565b500290565b6000600019821415610a3957610a39610957565b5060010190565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220ed612533fe19900f6f7bcb3715e15197fada76852ddc384bf142ca0012dbbcf664736f6c63430008090033", - "devdoc": { - "author": "Enrique Piqueras - ", - "details": "A factory of trees that keep track of staked values for sortition.", - "kind": "dev", - "methods": { - "createTree(SortitionSumTreeFactory.SortitionSumTrees storage,bytes32,uint256)": { - "details": "Create a sortition sum tree at the specified key.", - "params": { - "_K": "The number of children each node in the tree should have.", - "_key": "The key of the new tree." - } - }, - "draw(SortitionSumTreeFactory.SortitionSumTrees storage,bytes32,uint256)": { - "details": "Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0.", - "params": { - "_drawnNumber": "The drawn number.", - "_key": "The key of the tree." - }, - "returns": { - "ID": "The drawn ID. `O(k * log_k(n))` where `k` is the maximum number of childs per node in the tree, and `n` is the maximum number of nodes ever appended." - } - }, - "queryLeafs(SortitionSumTreeFactory.SortitionSumTrees storage,bytes32,uint256,uint256)": { - "details": "Query the leaves of a tree. Note that if `startIndex == 0`, the tree is empty and the root node will be returned.", - "params": { - "_count": "The number of items to return.", - "_cursor": "The pagination cursor.", - "_key": "The key of the tree to get the leaves from." - }, - "returns": { - "hasMore": "Whether there are more for pagination. `O(n)` where `n` is the maximum number of nodes ever appended.", - "startIndex": "The index at which leaves start.", - "values": "The values of the returned leaves." - } - }, - "set(SortitionSumTreeFactory.SortitionSumTrees storage,bytes32,uint256,bytes32)": { - "details": "Set a value of a tree.", - "params": { - "_ID": "The ID of the value. `O(log_k(n))` where `k` is the maximum number of childs per node in the tree, and `n` is the maximum number of nodes ever appended.", - "_key": "The key of the tree.", - "_value": "The new value." - } - }, - "stakeOf(SortitionSumTreeFactory.SortitionSumTrees storage,bytes32,bytes32)": { - "details": "Gets a specified ID's associated value.", - "params": { - "_ID": "The ID of the value.", - "_key": "The key of the tree." - }, - "returns": { - "value": "The associated value." - } - } - }, - "title": "SortitionSumTreeFactory", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/chiado/TokenBridge.json b/contracts/deployments/chiado/TokenBridge.json deleted file mode 100644 index b948fcc54..000000000 --- a/contracts/deployments/chiado/TokenBridge.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "address": "0xbb3c86f9918C3C1d83668fA84e79E876d147fFf2", - "abi": [] -} diff --git a/contracts/deployments/chiado/WETH.json b/contracts/deployments/chiado/WETH.json deleted file mode 100644 index 23a52d4df..000000000 --- a/contracts/deployments/chiado/WETH.json +++ /dev/null @@ -1,444 +0,0 @@ -{ - "address": "0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8", - "abi": [ - { - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "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": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x57090c7c0edd4f488d92d65d10d04f803f1d2658828607b339ab8f6cd676f7bd", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8", - "transactionIndex": 0, - "gasUsed": "616183", - "logsBloom": "0x00000000000000000000000000000000000000000000100000000000000000000000000200000000010000000000000001000000000000000000000000000000000000000000000000000008000040000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x0b5d4a38d69dfb9c7f93cfb222f9ebfcca7355d9a5997f865a92d0fd8318ac5a", - "transactionHash": "0x57090c7c0edd4f488d92d65d10d04f803f1d2658828607b339ab8f6cd676f7bd", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 4423420, - "transactionHash": "0x57090c7c0edd4f488d92d65d10d04f803f1d2658828607b339ab8f6cd676f7bd", - "address": "0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f50e77f2a2b6138d16c6c7511562e5c33c4b15a3" - ], - "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "logIndex": 0, - "blockHash": "0x0b5d4a38d69dfb9c7f93cfb222f9ebfcca7355d9a5997f865a92d0fd8318ac5a" - } - ], - "blockNumber": 4423420, - "cumulativeGasUsed": "616183", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 3, - "solcInputHash": "36e3015201aa6368fd28e007dfb67b68", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/WETH.sol\":\"WETH\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(address from, address to, uint256 amount) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(address owner, address spender, uint256 amount) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"src/token/WETH.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\ncontract WETH is ERC20 {\\n constructor() ERC20(\\\"Wrapped ETH\\\", \\\"WETH\\\") {\\n _mint(msg.sender, 1000000 ether);\\n }\\n}\\n\",\"keccak256\":\"0xee41099235b80965c307cddbe273692a3e5317ee44c7cbdeaeab22e68b55d24b\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600b81526020016a0aee4c2e0e0cac8408aa8960ab1b815250604051806040016040528060048152602001630ae8aa8960e31b815250816003908162000064919062000207565b50600462000073828262000207565b505050620000923369d3c21bcecceda10000006200009860201b60201c565b620002fb565b6001600160a01b038216620000f35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620001079190620002d3565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200018e57607f821691505b602082108103620001af57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200015e57600081815260208120601f850160051c81016020861015620001de5750805b601f850160051c820191505b81811015620001ff57828155600101620001ea565b505050505050565b81516001600160401b0381111562000223576200022362000163565b6200023b8162000234845462000179565b84620001b5565b602080601f8311600181146200027357600084156200025a5750858301515b600019600386901b1c1916600185901b178555620001ff565b600085815260208120601f198616915b82811015620002a45788860151825594840194600190910190840162000283565b5085821015620002c35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620002f557634e487b7160e01b600052601160045260246000fd5b92915050565b610852806200030b6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea2646970667358221220e1d527c750571d35e5d16511e833b7b399408fe6b53314379368c49007623f1e64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea2646970667358221220e1d527c750571d35e5d16511e833b7b399408fe6b53314379368c49007623f1e64736f6c63430008120033", - "devdoc": { - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "decreaseAllowance(address,uint256)": { - "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." - }, - "increaseAllowance(address,uint256)": { - "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address." - }, - "name()": { - "details": "Returns the name of the token." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 197, - "contract": "src/token/WETH.sol:WETH", - "label": "_balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 203, - "contract": "src/token/WETH.sol:WETH", - "label": "_allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 205, - "contract": "src/token/WETH.sol:WETH", - "label": "_totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 207, - "contract": "src/token/WETH.sol:WETH", - "label": "_name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - }, - { - "astId": 209, - "contract": "src/token/WETH.sol:WETH", - "label": "_symbol", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/chiado/WETHFaucet.json b/contracts/deployments/chiado/WETHFaucet.json deleted file mode 100644 index 8cf43683b..000000000 --- a/contracts/deployments/chiado/WETHFaucet.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "address": "0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "request", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "withdrewAlready", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x9a86ee614df7494319cd67b7c2140646d053530aff41dd8c45444f6624d41fc5", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F", - "transactionIndex": 0, - "gasUsed": "253721", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xf99610b5a422ae735fcd92fdaf1dc89b4655f9d7a4569a570a18c4404ab08c30", - "transactionHash": "0x9a86ee614df7494319cd67b7c2140646d053530aff41dd8c45444f6624d41fc5", - "logs": [], - "blockNumber": 4423421, - "cumulativeGasUsed": "253721", - "status": 1, - "byzantium": true - }, - "args": [ - "0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8" - ], - "numDeployments": 3, - "solcInputHash": "36e3015201aa6368fd28e007dfb67b68", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"withdrewAlready\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/Faucet.sol\":\"Faucet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/token/Faucet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ncontract Faucet {\\n IERC20 public token;\\n mapping(address => bool) public withdrewAlready;\\n\\n constructor(IERC20 _token) {\\n token = _token;\\n }\\n\\n function balance() public view returns (uint) {\\n return token.balanceOf(address(this));\\n }\\n\\n function request() public {\\n require(\\n !withdrewAlready[msg.sender],\\n \\\"You have used this faucet already. If you need more tokens, please use another address.\\\"\\n );\\n token.transfer(msg.sender, 10000 ether);\\n withdrewAlready[msg.sender] = true;\\n }\\n}\\n\",\"keccak256\":\"0xac876a15a73b0ab2161f4e42850028fbc6db4a899f83052c0d4f97050b2d1650\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516103c23803806103c283398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61032f806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063338cdca114610051578063b69ef8a81461005b578063d61c40dc14610076578063fc0c546a146100a9575b600080fd5b6100596100d4565b005b61006361021c565b6040519081526020015b60405180910390f35b61009961008436600461028e565b60016020526000908152604090205460ff1681565b604051901515815260200161006d565b6000546100bc906001600160a01b031681565b6040516001600160a01b03909116815260200161006d565b3360009081526001602052604090205460ff161561017e5760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a40160405180910390fd5b60005460405163a9059cbb60e01b815233600482015269021e19e0c9bab240000060248201526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156101d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fc91906102be565b50336000908152600160208190526040909120805460ff19169091179055565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610265573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028991906102e0565b905090565b6000602082840312156102a057600080fd5b81356001600160a01b03811681146102b757600080fd5b9392505050565b6000602082840312156102d057600080fd5b815180151581146102b757600080fd5b6000602082840312156102f257600080fd5b505191905056fea2646970667358221220885a998acda2ccef49efd5707e9579a53bbed80122cfef4ce320a92f34aba57664736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063338cdca114610051578063b69ef8a81461005b578063d61c40dc14610076578063fc0c546a146100a9575b600080fd5b6100596100d4565b005b61006361021c565b6040519081526020015b60405180910390f35b61009961008436600461028e565b60016020526000908152604090205460ff1681565b604051901515815260200161006d565b6000546100bc906001600160a01b031681565b6040516001600160a01b03909116815260200161006d565b3360009081526001602052604090205460ff161561017e5760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a40160405180910390fd5b60005460405163a9059cbb60e01b815233600482015269021e19e0c9bab240000060248201526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156101d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fc91906102be565b50336000908152600160208190526040909120805460ff19169091179055565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610265573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028991906102e0565b905090565b6000602082840312156102a057600080fd5b81356001600160a01b03811681146102b757600080fd5b9392505050565b6000602082840312156102d057600080fd5b815180151581146102b757600080fd5b6000602082840312156102f257600080fd5b505191905056fea2646970667358221220885a998acda2ccef49efd5707e9579a53bbed80122cfef4ce320a92f34aba57664736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 14749, - "contract": "src/token/Faucet.sol:Faucet", - "label": "token", - "offset": 0, - "slot": "0", - "type": "t_contract(IERC20)846" - }, - { - "astId": 14753, - "contract": "src/token/Faucet.sol:Faucet", - "label": "withdrewAlready", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_bool)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20)846": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - } - } - } -} diff --git a/contracts/deployments/chiado/WPNKFaucet.json b/contracts/deployments/chiado/WPNKFaucet.json deleted file mode 100644 index f8b4d15be..000000000 --- a/contracts/deployments/chiado/WPNKFaucet.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "address": "0x5898aeE045A25B276369914c3448B72a41758B2c", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "request", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "withdrewAlready", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xb35cd25025514f4ceea9f6794c1d39aa7b864712e7e12894835e1f0339ff4b19", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x5898aeE045A25B276369914c3448B72a41758B2c", - "transactionIndex": 0, - "gasUsed": "260119", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x2a5bf0e51e6ef3b5d65aa0b72477796eef03ac7702a74c66d64e8d6ff56df53f", - "transactionHash": "0xb35cd25025514f4ceea9f6794c1d39aa7b864712e7e12894835e1f0339ff4b19", - "logs": [], - "blockNumber": 2322229, - "cumulativeGasUsed": "260119", - "status": 1, - "byzantium": true - }, - "args": [ - "0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd" - ], - "numDeployments": 2, - "solcInputHash": "619e4fd2e5ff33514c8e0080269dcddd", - "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"withdrewAlready\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/Faucet.sol\":\"Faucet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"src/token/Faucet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ncontract Faucet {\\n IERC20 public token;\\n mapping(address => bool) public withdrewAlready;\\n\\n constructor(IERC20 _token) {\\n token = _token;\\n }\\n\\n function balance() public view returns (uint) {\\n return token.balanceOf(address(this));\\n }\\n\\n function request() public {\\n require(\\n !withdrewAlready[msg.sender],\\n \\\"You have used this faucet already. If you need more tokens, please use another address.\\\"\\n );\\n token.transfer(msg.sender, 10000 ether);\\n withdrewAlready[msg.sender] = true;\\n }\\n}\\n\",\"keccak256\":\"0x96dfe825cf0342eeff4380ac3632e50fed75eb083ff9b5133ab1575ed38dc333\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516103e03803806103e083398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61034d806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063338cdca114610051578063b69ef8a81461005b578063d61c40dc14610076578063fc0c546a146100a9575b600080fd5b6100596100d4565b005b61006361022b565b6040519081526020015b60405180910390f35b6100996100843660046102ac565b60016020526000908152604090205460ff1681565b604051901515815260200161006d565b6000546100bc906001600160a01b031681565b6040516001600160a01b03909116815260200161006d565b3360009081526001602052604090205460ff161561017e5760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a40160405180910390fd5b60005460405163a9059cbb60e01b815233600482015269021e19e0c9bab240000060248201526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b1580156101d357600080fd5b505af11580156101e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020b91906102dc565b50336000908152600160208190526040909120805460ff19169091179055565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561026f57600080fd5b505afa158015610283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a791906102fe565b905090565b6000602082840312156102be57600080fd5b81356001600160a01b03811681146102d557600080fd5b9392505050565b6000602082840312156102ee57600080fd5b815180151581146102d557600080fd5b60006020828403121561031057600080fd5b505191905056fea26469706673582212205834b9da8d3e30c6124c75f3a860d0d45dd1a253a98d2f15c37030d47e91889a64736f6c63430008090033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063338cdca114610051578063b69ef8a81461005b578063d61c40dc14610076578063fc0c546a146100a9575b600080fd5b6100596100d4565b005b61006361022b565b6040519081526020015b60405180910390f35b6100996100843660046102ac565b60016020526000908152604090205460ff1681565b604051901515815260200161006d565b6000546100bc906001600160a01b031681565b6040516001600160a01b03909116815260200161006d565b3360009081526001602052604090205460ff161561017e5760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a40160405180910390fd5b60005460405163a9059cbb60e01b815233600482015269021e19e0c9bab240000060248201526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b1580156101d357600080fd5b505af11580156101e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020b91906102dc565b50336000908152600160208190526040909120805460ff19169091179055565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561026f57600080fd5b505afa158015610283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a791906102fe565b905090565b6000602082840312156102be57600080fd5b81356001600160a01b03811681146102d557600080fd5b9392505050565b6000602082840312156102ee57600080fd5b815180151581146102d557600080fd5b60006020828403121561031057600080fd5b505191905056fea26469706673582212205834b9da8d3e30c6124c75f3a860d0d45dd1a253a98d2f15c37030d47e91889a64736f6c63430008090033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 26232, - "contract": "src/token/Faucet.sol:Faucet", - "label": "token", - "offset": 0, - "slot": "0", - "type": "t_contract(IERC20)1072" - }, - { - "astId": 26236, - "contract": "src/token/Faucet.sol:Faucet", - "label": "withdrewAlready", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_bool)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20)1072": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - } - } - } -} diff --git a/contracts/deployments/chiado/WrappedPinakionV2.json b/contracts/deployments/chiado/WrappedPinakionV2.json deleted file mode 100644 index a12bae532..000000000 --- a/contracts/deployments/chiado/WrappedPinakionV2.json +++ /dev/null @@ -1,436 +0,0 @@ -{ - "address": "0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd", - "abi": [ - { - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "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": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xfa9fed8954035128e3a75c493d5ac33cc2bffa9e191a9ece16f9a2757cb2bab8", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd", - "transactionIndex": 1, - "gasUsed": "616199", - "logsBloom": "0x0000000000000000000000000000000000000000000000000000000000000000000000020000000001000200000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000400000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa2364345d35827c8c0c8c469b6ae0824e3ab838dcc0e0dbaabf3450754b49992", - "transactionHash": "0xfa9fed8954035128e3a75c493d5ac33cc2bffa9e191a9ece16f9a2757cb2bab8", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 2322228, - "transactionHash": "0xfa9fed8954035128e3a75c493d5ac33cc2bffa9e191a9ece16f9a2757cb2bab8", - "address": "0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f50e77f2a2b6138d16c6c7511562e5c33c4b15a3" - ], - "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "logIndex": 1, - "blockHash": "0xa2364345d35827c8c0c8c469b6ae0824e3ab838dcc0e0dbaabf3450754b49992" - } - ], - "blockNumber": 2322228, - "cumulativeGasUsed": "4491861", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "619e4fd2e5ff33514c8e0080269dcddd", - "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/WrappedPinakionV2.sol\":\"WrappedPinakionV2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n}\\n\",\"keccak256\":\"0x4ffc0547c02ad22925310c585c0f166f8759e2648a09e9b489100c42f15dd98d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"src/token/WrappedPinakionV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\ncontract WrappedPinakionV2 is ERC20 {\\n constructor() ERC20(\\\"Staking PNK on xDai\\\", \\\"stPNK\\\") {\\n _mint(msg.sender, 1000000 ether);\\n }\\n}\\n\",\"keccak256\":\"0xc0648090b2add69db6ae19830b9c1a589af0fa059fada8ffb6ccdeed90e84c02\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50604080518082018252601381527f5374616b696e6720504e4b206f6e2078446169000000000000000000000000006020808301918252835180850190945260058452647374504e4b60d81b9084015281519192916100719160039161016a565b50805161008590600490602084019061016a565b5050506100a23369d3c21bcecceda10000006100a760201b60201c565b610264565b6001600160a01b0382166101015760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546101139190610203565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b82805461017690610229565b90600052602060002090601f01602090048101928261019857600085556101de565b82601f106101b157805160ff19168380011785556101de565b828001600101855582156101de579182015b828111156101de5782518255916020019190600101906101c3565b506101ea9291506101ee565b5090565b5b808211156101ea57600081556001016101ef565b6000821982111561022457634e487b7160e01b600052601160045260246000fd5b500190565b600181811c9082168061023d57607f821691505b6020821081141561025e57634e487b7160e01b600052602260045260246000fd5b50919050565b61085d806102736000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610801565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b602082108114156107fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082257634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220f3e2c60c1f5db76a5e828c52754fa6038e65d3519bf5c40755c1db138d61812264736f6c63430008090033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610801565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b602082108114156107fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082257634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220f3e2c60c1f5db76a5e828c52754fa6038e65d3519bf5c40755c1db138d61812264736f6c63430008090033", - "devdoc": { - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "decreaseAllowance(address,uint256)": { - "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." - }, - "increaseAllowance(address,uint256)": { - "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address." - }, - "name()": { - "details": "Returns the name of the token." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 423, - "contract": "src/token/WrappedPinakionV2.sol:WrappedPinakionV2", - "label": "_balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 429, - "contract": "src/token/WrappedPinakionV2.sol:WrappedPinakionV2", - "label": "_allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 431, - "contract": "src/token/WrappedPinakionV2.sol:WrappedPinakionV2", - "label": "_totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 433, - "contract": "src/token/WrappedPinakionV2.sol:WrappedPinakionV2", - "label": "_name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - }, - { - "astId": 435, - "contract": "src/token/WrappedPinakionV2.sol:WrappedPinakionV2", - "label": "_symbol", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/chiado/xKlerosLiquidV2.json b/contracts/deployments/chiado/xKlerosLiquidV2.json deleted file mode 100644 index f8e6d7f58..000000000 --- a/contracts/deployments/chiado/xKlerosLiquidV2.json +++ /dev/null @@ -1,2402 +0,0 @@ -{ - "address": "0x34E520dc1d2Db660113b64724e14CEdCD01Ee879", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrable", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_appeal", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "Draw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum xKlerosLiquidV2.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum xKlerosLiquidV2.Phase", - "name": "_phase", - "type": "uint8" - } - ], - "name": "NewPhase", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrable", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_subcourtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "_stake", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_newTotalStake", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_tokenAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_ETHAmount", - "type": "int256" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "inputs": [], - "name": "ALPHA_DIVISOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_STAKE_PATHS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIN_JURORS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "NON_PAYABLE_AMOUNT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RN", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RNBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RNGenerator", - "outputs": [ - { - "internalType": "contract IRandomAuRa", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IForeignGateway", - "name": "_foreignGateway", - "type": "address" - } - ], - "name": "changeForeignGateway", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - } - ], - "name": "changeMaxDrawingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - } - ], - "name": "changeMinStakingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract WrappedPinakion", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IRandomAuRa", - "name": "_RNGenerator", - "type": "address" - } - ], - "name": "changeRNGenerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_subcourtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - } - ], - "name": "changeSubcourtAlpha", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_subcourtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - } - ], - "name": "changeSubcourtJurorFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_subcourtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - } - ], - "name": "changeSubcourtJurorsForJump", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_subcourtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - } - ], - "name": "changeSubcourtMinStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_subcourtID", - "type": "uint96" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeSubcourtTimesPerPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_weth", - "type": "address" - } - ], - "name": "changeWethAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "uint256", - "name": "_sortitionSumTreeK", - "type": "uint256" - } - ], - "name": "createSubcourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "delayedSetStakes", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "subcourtID", - "type": "uint96" - }, - { - "internalType": "uint128", - "name": "stake", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "subcourtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrable", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "uint256", - "name": "numberOfChoices", - "type": "uint256" - }, - { - "internalType": "enum xKlerosLiquidV2.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "lastPeriodChange", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "drawsInRound", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "commitsInRound", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputesRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputesWithoutJurors", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "executeDelayedSetStakes", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "foreignGateway", - "outputs": [ - { - "internalType": "contract IForeignGateway", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getDispute", - "outputs": [ - { - "internalType": "uint256[]", - "name": "votesLengths", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "tokensAtStakePerJuror", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "totalFeesForJurors", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "votesInEachRound", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "repartitionsInEachRound", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "penaltiesInEachRound", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "getJuror", - "outputs": [ - { - "internalType": "uint96[]", - "name": "subcourtIDs", - "type": "uint96[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_subcourtID", - "type": "uint96" - } - ], - "name": "getSubcourt", - "outputs": [ - { - "internalType": "uint256[]", - "name": "children", - "type": "uint256[]" - }, - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_appeal", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "getVote", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "commit", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "choice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "voted", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_appeal", - "type": "uint256" - } - ], - "name": "getVoteCounter", - "outputs": [ - { - "internalType": "uint256", - "name": "winningChoice", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "counts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract WrappedPinakion", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "contract IRandomAuRa", - "name": "_RNGenerator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "uint256", - "name": "_sortitionSumTreeK", - "type": "uint256" - }, - { - "internalType": "contract IForeignGateway", - "name": "_foreignGateway", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_weth", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "jurors", - "outputs": [ - { - "internalType": "uint256", - "name": "stakedTokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lockedTokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastDelayedSetStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPhaseChange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lockInsolventTransfers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxDrawingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minStakingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nextDelayedSetStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "onApprove", - "outputs": [ - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "onTransfer", - "outputs": [ - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "phase", - "outputs": [ - { - "internalType": "enum xKlerosLiquidV2.Phase", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pinakion", - "outputs": [ - { - "internalType": "contract WrappedPinakion", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "proxyPayment", - "outputs": [ - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_subcourtID", - "type": "uint96" - }, - { - "internalType": "uint128", - "name": "_stake", - "type": "uint128" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_subcourtID", - "type": "uint96" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalDisputes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "weth", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xdb6a244e5101865541ff6d716ed335268c82aa88e3ff47dc219cda97d50b40ef", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x34E520dc1d2Db660113b64724e14CEdCD01Ee879", - "transactionIndex": 1, - "gasUsed": "3055546", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x8523df3c3be71b598f308dcb14f0c03e80382deb0f53120672a7a06f437a4335", - "transactionHash": "0xdb6a244e5101865541ff6d716ed335268c82aa88e3ff47dc219cda97d50b40ef", - "logs": [], - "blockNumber": 2309689, - "cumulativeGasUsed": "6902252", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "554a0755634b519652537ffa5fcb4ec8", - "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrable\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_appeal\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"Draw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum xKlerosLiquidV2.Period\",\"name\":\"_period\",\"type\":\"uint8\"}],\"name\":\"NewPeriod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum xKlerosLiquidV2.Phase\",\"name\":\"_phase\",\"type\":\"uint8\"}],\"name\":\"NewPhase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrable\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_subcourtID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"_stake\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newTotalStake\",\"type\":\"uint256\"}],\"name\":\"StakeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_tokenAmount\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_ETHAmount\",\"type\":\"int256\"}],\"name\":\"TokenAndETHShift\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ALPHA_DIVISOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STAKE_PATHS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_JURORS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NON_PAYABLE_AMOUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RN\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RNBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RNGenerator\",\"outputs\":[{\"internalType\":\"contract IRandomAuRa\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IForeignGateway\",\"name\":\"_foreignGateway\",\"type\":\"address\"}],\"name\":\"changeForeignGateway\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDrawingTime\",\"type\":\"uint256\"}],\"name\":\"changeMaxDrawingTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minStakingTime\",\"type\":\"uint256\"}],\"name\":\"changeMinStakingTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract WrappedPinakion\",\"name\":\"_pinakion\",\"type\":\"address\"}],\"name\":\"changePinakion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRandomAuRa\",\"name\":\"_RNGenerator\",\"type\":\"address\"}],\"name\":\"changeRNGenerator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_subcourtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"}],\"name\":\"changeSubcourtAlpha\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_subcourtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"}],\"name\":\"changeSubcourtJurorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_subcourtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"}],\"name\":\"changeSubcourtJurorsForJump\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_subcourtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"}],\"name\":\"changeSubcourtMinStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_subcourtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"}],\"name\":\"changeSubcourtTimesPerPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_weth\",\"type\":\"address\"}],\"name\":\"changeWethAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"courts\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jurorsForCourtJump\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_parent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_minStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_alpha\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jurorsForCourtJump\",\"type\":\"uint256\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"internalType\":\"uint256\",\"name\":\"_sortitionSumTreeK\",\"type\":\"uint256\"}],\"name\":\"createSubcourt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedSetStakes\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"subcourtID\",\"type\":\"uint96\"},{\"internalType\":\"uint128\",\"name\":\"stake\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"subcourtID\",\"type\":\"uint96\"},{\"internalType\":\"contract IArbitrable\",\"name\":\"arbitrated\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"numberOfChoices\",\"type\":\"uint256\"},{\"internalType\":\"enum xKlerosLiquidV2.Period\",\"name\":\"period\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"lastPeriodChange\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"drawsInRound\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"commitsInRound\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"ruled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputesRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputesWithoutJurors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_iterations\",\"type\":\"uint256\"}],\"name\":\"executeDelayedSetStakes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeGovernorProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"foreignGateway\",\"outputs\":[{\"internalType\":\"contract IForeignGateway\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"}],\"name\":\"getDispute\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"votesLengths\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokensAtStakePerJuror\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"totalFeesForJurors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"votesInEachRound\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"repartitionsInEachRound\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"penaltiesInEachRound\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"getJuror\",\"outputs\":[{\"internalType\":\"uint96[]\",\"name\":\"subcourtIDs\",\"type\":\"uint96[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_subcourtID\",\"type\":\"uint96\"}],\"name\":\"getSubcourt\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"children\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[4]\",\"name\":\"timesPerPeriod\",\"type\":\"uint256[4]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_appeal\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_voteID\",\"type\":\"uint256\"}],\"name\":\"getVote\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"commit\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"choice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"voted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_appeal\",\"type\":\"uint256\"}],\"name\":\"getVoteCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"winningChoice\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"counts\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"tied\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract WrappedPinakion\",\"name\":\"_pinakion\",\"type\":\"address\"},{\"internalType\":\"contract IRandomAuRa\",\"name\":\"_RNGenerator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minStakingTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxDrawingTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_hiddenVotes\",\"type\":\"bool\"},{\"internalType\":\"uint256[4]\",\"name\":\"_courtParameters\",\"type\":\"uint256[4]\"},{\"internalType\":\"uint256[4]\",\"name\":\"_timesPerPeriod\",\"type\":\"uint256[4]\"},{\"internalType\":\"uint256\",\"name\":\"_sortitionSumTreeK\",\"type\":\"uint256\"},{\"internalType\":\"contract IForeignGateway\",\"name\":\"_foreignGateway\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_weth\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jurors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stakedTokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lockedTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastDelayedSetStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPhaseChange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lockInsolventTransfers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDrawingTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minStakingTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextDelayedSetStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"onApprove\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"onTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"phase\",\"outputs\":[{\"internalType\":\"enum xKlerosLiquidV2.Phase\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pinakion\",\"outputs\":[{\"internalType\":\"contract WrappedPinakion\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"proxyPayment\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_subcourtID\",\"type\":\"uint96\"},{\"internalType\":\"uint128\",\"name\":\"_stake\",\"type\":\"uint128\"}],\"name\":\"setStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_subcourtID\",\"type\":\"uint96\"}],\"name\":\"stakeOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDisputes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is an adaption of Mainnet's KlerosLiquid (https://github.com/kleros/kleros/blob/69cfbfb2128c29f1625b3a99a3183540772fda08/contracts/kleros/KlerosLiquid.sol) for xDai chain. Notice that variables referring to ETH values in this contract, will hold the native token values of the chain on which xKlerosLiquid is deployed. When this contract gets deployed on xDai chain, ETH variables will hold xDai values.\",\"events\":{\"Draw(address,uint256,uint256,uint256)\":{\"details\":\"Emitted when a juror is drawn.\",\"params\":{\"_address\":\"The drawn address.\",\"_appeal\":\"The appeal the draw is for. 0 is for the first round.\",\"_disputeID\":\"The ID of the dispute.\",\"_voteID\":\"The vote ID.\"}},\"NewPeriod(uint256,uint8)\":{\"details\":\"Emitted when a dispute passes to a new period.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\",\"_period\":\"The new period.\"}},\"NewPhase(uint8)\":{\"details\":\"Emitted when we pass to a new phase.\",\"params\":{\"_phase\":\"The new phase.\"}},\"StakeSet(address,uint256,uint128,uint256)\":{\"details\":\"Emitted when a juror's stake is set.\",\"params\":{\"_address\":\"The address of the juror.\",\"_newTotalStake\":\"The new total stake.\",\"_stake\":\"The new stake.\",\"_subcourtID\":\"The ID of the subcourt at the end of the stake path.\"}},\"TokenAndETHShift(address,uint256,int256,int256)\":{\"details\":\"Emitted when a juror wins or loses tokens and ETH from a dispute.\",\"params\":{\"_ETHAmount\":\"The amount of ETH won or lost.\",\"_address\":\"The juror affected.\",\"_disputeID\":\"The ID of the dispute.\",\"_tokenAmount\":\"The amount of tokens won or lost.\"}}},\"kind\":\"dev\",\"methods\":{\"arbitrationCost(bytes)\":{\"details\":\"Gets the cost of arbitration in a specified subcourt.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the subcourt to create the dispute in (first 32 bytes) and the minimum number of jurors required (next 32 bytes).\"},\"returns\":{\"cost\":\"The cost.\"}},\"changeForeignGateway(address)\":{\"details\":\"Changes the `foreignGateway` storage variable.\",\"params\":{\"_foreignGateway\":\"The new value for the `foreignGateway` storage variable.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the `governor` storage variable.\",\"params\":{\"_governor\":\"The new value for the `governor` storage variable.\"}},\"changeMaxDrawingTime(uint256)\":{\"details\":\"Changes the `maxDrawingTime` storage variable.\",\"params\":{\"_maxDrawingTime\":\"The new value for the `maxDrawingTime` storage variable.\"}},\"changeMinStakingTime(uint256)\":{\"details\":\"Changes the `minStakingTime` storage variable.\",\"params\":{\"_minStakingTime\":\"The new value for the `minStakingTime` storage variable.\"}},\"changePinakion(address)\":{\"details\":\"Changes the `pinakion` storage variable.\",\"params\":{\"_pinakion\":\"The new value for the `pinakion` storage variable.\"}},\"changeRNGenerator(address)\":{\"details\":\"Changes the `RNGenerator` storage variable.\",\"params\":{\"_RNGenerator\":\"The new value for the `RNGenerator` storage variable.\"}},\"changeSubcourtAlpha(uint96,uint256)\":{\"details\":\"Changes the `alpha` property value of a specified subcourt.\",\"params\":{\"_alpha\":\"The new value for the `alpha` property value.\",\"_subcourtID\":\"The ID of the subcourt.\"}},\"changeSubcourtJurorFee(uint96,uint256)\":{\"details\":\"Changes the `feeForJuror` property value of a specified subcourt.\",\"params\":{\"_feeForJuror\":\"The new value for the `feeForJuror` property value.\",\"_subcourtID\":\"The ID of the subcourt.\"}},\"changeSubcourtJurorsForJump(uint96,uint256)\":{\"details\":\"Changes the `jurorsForCourtJump` property value of a specified subcourt.\",\"params\":{\"_jurorsForCourtJump\":\"The new value for the `jurorsForCourtJump` property value.\",\"_subcourtID\":\"The ID of the subcourt.\"}},\"changeSubcourtMinStake(uint96,uint256)\":{\"details\":\"Changes the `minStake` property value of a specified subcourt. Don't set to a value lower than its parent's `minStake` property value.\",\"params\":{\"_minStake\":\"The new value for the `minStake` property value.\",\"_subcourtID\":\"The ID of the subcourt.\"}},\"changeSubcourtTimesPerPeriod(uint96,uint256[4])\":{\"details\":\"Changes the `timesPerPeriod` property value of a specified subcourt.\",\"params\":{\"_subcourtID\":\"The ID of the subcourt.\",\"_timesPerPeriod\":\"The new value for the `timesPerPeriod` property value.\"}},\"changeWethAddress(address)\":{\"details\":\"Changes the `weth` storage variable.\",\"params\":{\"_weth\":\"The new value for the `weth` storage variable.\"}},\"createDispute(uint256,bytes)\":{\"details\":\"Creates a dispute. Must be called by the arbitrable contract.\",\"params\":{\"_extraData\":\"Additional info about the dispute to be created. We use it to pass the ID of the subcourt to create the dispute in (first 32 bytes) and the minimum number of jurors required (next 32 bytes).\",\"_numberOfChoices\":\"Number of choices to choose from in the dispute to be created.\"},\"returns\":{\"disputeID\":\"The ID of the created dispute.\"}},\"createSubcourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256)\":{\"details\":\"Creates a subcourt under a specified parent court.\",\"params\":{\"_alpha\":\"The `alpha` property value of the subcourt.\",\"_feeForJuror\":\"The `feeForJuror` property value of the subcourt.\",\"_hiddenVotes\":\"The `hiddenVotes` property value of the subcourt.\",\"_jurorsForCourtJump\":\"The `jurorsForCourtJump` property value of the subcourt.\",\"_minStake\":\"The `minStake` property value of the subcourt.\",\"_parent\":\"The `parent` property value of the subcourt.\",\"_sortitionSumTreeK\":\"The number of children per node of the subcourt's sortition sum tree.\",\"_timesPerPeriod\":\"The `timesPerPeriod` property value of the subcourt.\"}},\"currentRuling(uint256)\":{\"details\":\"Gets the current ruling of a specified dispute.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"ruling\":\"The current ruling.\"}},\"executeDelayedSetStakes(uint256)\":{\"details\":\"Executes the next delayed set stakes. `O(n)` where `n` is the number of iterations to run.\",\"params\":{\"_iterations\":\"The number of delayed set stakes to execute.\"}},\"executeGovernorProposal(address,uint256,bytes)\":{\"details\":\"Lets the governor call anything on behalf of the contract.\",\"params\":{\"_amount\":\"The value sent with the call.\",\"_data\":\"The data sent with the call.\",\"_destination\":\"The destination of the call.\"}},\"getDispute(uint256)\":{\"details\":\"Gets a specified dispute's non primitive properties.\",\"params\":{\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"penaltiesInEachRound\":\"The dispute's amount of tokens collected from penalties in each round. `O(a)` where `a` is the number of appeals of the dispute.\",\"repartitionsInEachRound\":\"The dispute's counter of vote reward repartitions made in each round.\",\"tokensAtStakePerJuror\":\"The dispute's required tokens at stake per Juror.\",\"totalFeesForJurors\":\"The dispute's total fees for Jurors.\",\"votesInEachRound\":\"The dispute's counter of votes made in each round.\",\"votesLengths\":\"The dispute's vote length.\"}},\"getJuror(address)\":{\"details\":\"Gets a specified juror's non primitive properties.\",\"params\":{\"_account\":\"The address of the juror.\"},\"returns\":{\"subcourtIDs\":\"The juror's IDs of subcourts where the juror has stake path.\"}},\"getSubcourt(uint96)\":{\"details\":\"Gets a specified subcourt's non primitive properties.\",\"params\":{\"_subcourtID\":\"The ID of the subcourt.\"},\"returns\":{\"children\":\"The subcourt's child court list.\",\"timesPerPeriod\":\"The subcourt's time per period.\"}},\"getVote(uint256,uint256,uint256)\":{\"details\":\"Gets a specified vote for a specified appeal in a specified dispute.\",\"params\":{\"_appeal\":\"The appeal.\",\"_disputeID\":\"The ID of the dispute.\",\"_voteID\":\"The ID of the vote.\"},\"returns\":{\"account\":\"The account for vote.\",\"choice\":\" The choice for vote.\",\"commit\":\" The commit for vote.\",\"voted\":\"True if the account voted, False otherwise.\"}},\"getVoteCounter(uint256,uint256)\":{\"details\":\"Gets the vote counter for a specified appeal in a specified dispute. Note: This function is only to be used by the interface and it won't work if the number of choices is too high.\",\"params\":{\"_appeal\":\"The appeal.\",\"_disputeID\":\"The ID of the dispute.\"},\"returns\":{\"counts\":\"The count.\",\"tied\":\"Whether the vote tied. `O(n)` where `n` is the number of choices of the dispute.\",\"winningChoice\":\"The winning choice.\"}},\"initialize(address,address,address,uint256,uint256,bool,uint256[4],uint256[4],uint256,address,address)\":{\"details\":\"Constructs the KlerosLiquid contract.\",\"params\":{\"_RNGenerator\":\"The address of the random number generator contract.\",\"_courtParameters\":\"MinStake, alpha, feeForJuror and jurorsForCourtJump respectively.\",\"_foreignGateway\":\"Foreign gateway on xDai.\",\"_governor\":\"The governor's address.\",\"_hiddenVotes\":\"The `hiddenVotes` property value of the general court.\",\"_maxDrawingTime\":\"The maximum time that the drawing phase should last.\",\"_minStakingTime\":\"The minimum time that the staking phase should last.\",\"_pinakion\":\"The address of the token contract.\",\"_sortitionSumTreeK\":\"The number of children per node of the general court's sortition sum tree.\",\"_timesPerPeriod\":\"The `timesPerPeriod` property value of the general court.\",\"_weth\":\"Weth contract.\"}},\"onApprove(address,address,uint256)\":{\"details\":\"Notifies the controller about an approval allowing the controller to react if desired.\",\"params\":{\"_amount\":\"The amount in the `approve()` call.\",\"_owner\":\"The address that calls `approve()`.\",\"_spender\":\"The spender in the `approve()` call.\"},\"returns\":{\"allowed\":\"Whether the operation should be allowed or not.\"}},\"onTransfer(address,address,uint256)\":{\"details\":\"Notifies the controller about a token transfer allowing the controller to react if desired.\",\"params\":{\"_amount\":\"The amount of the transfer.\",\"_from\":\"The origin of the transfer.\",\"_to\":\"The destination of the transfer.\"},\"returns\":{\"allowed\":\"Whether the operation should be allowed or not.\"}},\"proxyPayment(address)\":{\"details\":\"DEPRECATED. Called when `_owner` sends ETH to the Wrapped Token contract.\",\"params\":{\"_owner\":\"The address that sent the ETH to create tokens.\"},\"returns\":{\"allowed\":\"Whether the operation should be allowed or not.\"}},\"rule(uint256,uint256)\":{\"details\":\"Receive the ruling from foreign gateway which technically is an arbitrator of this contract.\",\"params\":{\"_disputeID\":\"ID of the dispute.\",\"_ruling\":\"Ruling given by V2 court and relayed by foreign gateway.\"}},\"setStake(uint96,uint128)\":{\"details\":\"Sets the caller's stake in a subcourt.\",\"params\":{\"_stake\":\"The new stake.\",\"_subcourtID\":\"The ID of the subcourt.\"}},\"stakeOf(address,uint96)\":{\"details\":\"Gets the stake of a specified juror in a specified subcourt.\",\"params\":{\"_account\":\"The address of the juror.\",\"_subcourtID\":\"The ID of the subcourt.\"},\"returns\":{\"stake\":\"The stake.\"}}},\"title\":\"xKlerosLiquidV2\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol\":\"xKlerosLiquidV2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@kleros/vea-contracts/interfaces/IFastBridgeReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/**\\n * @authors: [@jaybuidl, @shotaronowhere, @hrishibhat]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\n\\npragma solidity ^0.8.0;\\n\\ninterface IFastBridgeReceiver {\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /**\\n * @dev The Fast Bridge participants watch for these events to decide if a challenge should be submitted.\\n * @param _epoch The epoch for which the the claim was made.\\n * @param _batchMerkleRoot The timestamp of the claim creation.\\n */\\n event ClaimReceived(uint256 indexed _epoch, bytes32 indexed _batchMerkleRoot);\\n\\n /**\\n * @dev This event indicates that `sendSafeFallback()` should be called on the sending side.\\n * @param _epoch The epoch associated with the challenged claim.\\n */\\n event ClaimChallenged(uint256 indexed _epoch);\\n\\n /**\\n * @dev This events indicates that optimistic verification has succeeded. The messages are ready to be relayed.\\n * @param _epoch The epoch associated with the batch.\\n * @param _success The success of the optimistic verification.\\n */\\n event BatchVerified(uint256 indexed _epoch, bool _success);\\n\\n /**\\n * @dev This event indicates that the batch has been received via the Safe Bridge.\\n * @param _epoch The epoch associated with the batch.\\n * @param _isBridgerHonest Whether the bridger made an honest claim.\\n * @param _isChallengerHonest Whether the bridger made an honest challenge.\\n */\\n event BatchSafeVerified(uint256 indexed _epoch, bool _isBridgerHonest, bool _isChallengerHonest);\\n\\n /**\\n * @dev This event indicates that the claim deposit has been withdrawn.\\n * @param _epoch The epoch associated with the batch.\\n * @param _bridger The recipient of the claim deposit.\\n */\\n event ClaimDepositWithdrawn(uint256 indexed _epoch, address indexed _bridger);\\n\\n /**\\n * @dev This event indicates that the challenge deposit has been withdrawn.\\n * @param _epoch The epoch associated with the batch.\\n * @param _challenger The recipient of the challenge deposit.\\n */\\n event ChallengeDepositWithdrawn(uint256 indexed _epoch, address indexed _challenger);\\n\\n /**\\n * @dev This event indicates that a message has been relayed for the batch in this `_epoch`.\\n * @param _epoch The epoch associated with the batch.\\n * @param _nonce The nonce of the message that was relayed.\\n */\\n event MessageRelayed(uint256 indexed _epoch, uint256 indexed _nonce);\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Submit a claim about the `_batchMerkleRoot` for the latests completed Fast bridge epoch and submit a deposit. The `_batchMerkleRoot` should match the one on the sending side otherwise the sender will lose his deposit.\\n * @param _epoch The epoch of the claim to claim.\\n * @param _batchMerkleRoot The hash claimed for the ticket.\\n */\\n function claim(uint256 _epoch, bytes32 _batchMerkleRoot) external payable;\\n\\n /**\\n * @dev Submit a challenge for the claim of the current epoch's Fast Bridge batch merkleroot state and submit a deposit. The `batchMerkleRoot` in the claim already made for the last finalized epoch should be different from the one on the sending side, otherwise the sender will lose his deposit.\\n * @param _epoch The epoch of the claim to challenge.\\n */\\n function challenge(uint256 _epoch) external payable;\\n\\n /**\\n * @dev Resolves the optimistic claim for '_epoch'.\\n * @param _epoch The epoch of the optimistic claim.\\n */\\n function verifyBatch(uint256 _epoch) external;\\n\\n /**\\n * @dev Verifies merkle proof for the given message and associated nonce for the most recent possible epoch and relays the message.\\n * @param _epoch The epoch in which the message was batched by the bridge.\\n * @param _proof The merkle proof to prove the membership of the message and nonce in the merkle tree for the epoch.\\n * @param _message The data on the cross-domain chain for the message.\\n */\\n function verifyAndRelayMessage(\\n uint256 _epoch,\\n bytes32[] calldata _proof,\\n bytes calldata _message\\n ) external;\\n\\n /**\\n * @dev Sends the deposit back to the Bridger if their claim is not successfully challenged. Includes a portion of the Challenger's deposit if unsuccessfully challenged.\\n * @param _epoch The epoch associated with the claim deposit to withraw.\\n */\\n function withdrawClaimDeposit(uint256 _epoch) external;\\n\\n /**\\n * @dev Sends the deposit back to the Challenger if his challenge is successful. Includes a portion of the Bridger's deposit.\\n * @param _epoch The epoch associated with the challenge deposit to withraw.\\n */\\n function withdrawChallengeDeposit(uint256 _epoch) external;\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Returns the `start` and `end` time of challenge period for this `epoch`.\\n * @param _epoch The epoch of the claim to request the challenge period.\\n * @return start The start time of the challenge period.\\n * @return end The end time of the challenge period.\\n */\\n function claimChallengePeriod(uint256 _epoch) external view returns (uint256 start, uint256 end);\\n\\n /**\\n * @dev Returns the epoch period.\\n */\\n function epochPeriod() external view returns (uint256 epochPeriod);\\n\\n /**\\n * @dev Returns the challenge period.\\n */\\n function challengePeriod() external view returns (uint256 challengePeriod);\\n}\\n\",\"keccak256\":\"0xff909a62e9a08540dafcd08c779a64917ed1e44be52d5a225ff9149ff95909e8\",\"license\":\"MIT\"},\"@kleros/vea-contracts/interfaces/IReceiverGateway.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/**\\n * @authors: [@jaybuidl, @shotaronowhere]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IFastBridgeReceiver.sol\\\";\\n\\ninterface IReceiverGateway {\\n function fastBridgeReceiver() external view returns (IFastBridgeReceiver);\\n\\n function senderChainID() external view returns (uint256);\\n\\n function senderGateway() external view returns (address);\\n}\\n\",\"keccak256\":\"0xfa82fbd575c462ad6dffa18c67eb097a4c5088715ae956a836726aafa4be0f90\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x3798da9e212cd00a7cda94ddb5a9721171a718e89c500d8901f810e0e37fa74e\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e\",\"license\":\"MIT\"},\"src/arbitration/IArbitrable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8;\\n\\nimport \\\"./IArbitrator.sol\\\";\\n\\n/**\\n * @title IArbitrable\\n * Arbitrable interface. Note that this interface follows the ERC-792 standard.\\n * When developing arbitrable contracts, we need to:\\n * - Define the action taken when a ruling is received by the contract.\\n * - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\n */\\ninterface IArbitrable {\\n /**\\n * @dev To be raised when a ruling is given.\\n * @param _arbitrator The arbitrator giving the ruling.\\n * @param _disputeID ID of the dispute in the Arbitrator contract.\\n * @param _ruling The ruling which was given.\\n */\\n event Ruling(IArbitrator indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /**\\n * @dev Give a ruling for a dispute. Must be called by the arbitrator.\\n * The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n * @param _disputeID ID of the dispute in the Arbitrator contract.\\n * @param _ruling Ruling given by the arbitrator. Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n */\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x8f1c36f6206566f0790448a654190e68a43a1dd2e039c2b77e7455d3fcd599a4\",\"license\":\"MIT\"},\"src/arbitration/IArbitrator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8;\\n\\nimport \\\"./IArbitrable.sol\\\";\\n\\n/**\\n * @title Arbitrator\\n * Arbitrator interface that implements the new arbitration standard.\\n * Unlike the ERC-792 this standard doesn't have anything related to appeals, so each arbitrator can implement an appeal system that suits it the most.\\n * When developing arbitrator contracts we need to:\\n * - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n * - Define the functions for cost display (arbitrationCost).\\n * - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\n */\\ninterface IArbitrator {\\n /**\\n * @dev To be emitted when a dispute is created.\\n * @param _disputeID ID of the dispute.\\n * @param _arbitrable The contract which created the dispute.\\n */\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrable indexed _arbitrable);\\n\\n /**\\n * @dev To be raised when a ruling is given.\\n * @param _arbitrable The arbitrable receiving the ruling.\\n * @param _disputeID ID of the dispute in the Arbitrator contract.\\n * @param _ruling The ruling which was given.\\n */\\n event Ruling(IArbitrable indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /**\\n * @dev Create a dispute. Must be called by the arbitrable contract.\\n * Must pay at least arbitrationCost(_extraData).\\n * @param _choices Amount of choices the arbitrator can make in this dispute.\\n * @param _extraData Can be used to give additional info on the dispute to be created.\\n * @return disputeID ID of the dispute created.\\n */\\n function createDispute(uint256 _choices, bytes calldata _extraData) external payable returns (uint256 disputeID);\\n\\n /**\\n * @dev Compute the cost of arbitration. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n * @param _extraData Can be used to give additional info on the dispute to be created.\\n * @return cost Required cost of arbitration.\\n */\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n}\\n\",\"keccak256\":\"0x2264bc7cb975d89776b9bf3e35cecd4dec7d601604601ca4822d8bfc0886c379\",\"license\":\"MIT\"},\"src/gateway/interfaces/IForeignGateway.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/**\\n * @authors: [@jaybuidl, @shotaronowhere, @shalzz]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../arbitration/IArbitrator.sol\\\";\\nimport \\\"@kleros/vea-contracts/interfaces/IReceiverGateway.sol\\\";\\n\\ninterface IForeignGateway is IArbitrator, IReceiverGateway {\\n /**\\n * Relay the rule call from the home gateway to the arbitrable.\\n */\\n function relayRule(address _messageSender, bytes32 _disputeHash, uint256 _ruling, address _forwarder) external;\\n\\n function withdrawFees(bytes32 _disputeHash) external;\\n\\n // For cross-chain Evidence standard\\n function disputeHashToForeignID(bytes32 _disputeHash) external view returns (uint256);\\n\\n function createDisputeERC20(\\n uint256 _choices,\\n bytes calldata _extraData,\\n uint256 _amount\\n ) external returns (uint256 disputeID);\\n}\\n\",\"keccak256\":\"0x4cfc88d2d7cf211ce9a1f3c991f093baefa026784185da2319d566051d0c8c43\",\"license\":\"MIT\"},\"src/kleros-v1/interfaces/ITokenController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8;\\n\\n/**\\n * @dev The token controller contract must implement these functions. See https://github.com/Giveth/minime/blob/master/contracts/TokenController.sol\\n */\\ninterface ITokenController {\\n /**\\n * @notice Called when `_owner` sends ether to the MiniMe Token contract\\n * @param _owner The address that sent the ether to create tokens\\n * @return True if the ether is accepted, false if it throws\\n */\\n function proxyPayment(address _owner) external payable returns (bool);\\n\\n /**\\n * @notice Notifies the controller about a token transfer allowing the controller to react if desired\\n * @param _from The origin of the transfer\\n * @param _to The destination of the transfer\\n * @param _amount The amount of the transfer\\n * @return False if the controller does not authorize the transfer\\n */\\n function onTransfer(address _from, address _to, uint256 _amount) external returns (bool);\\n\\n /**\\n * @notice Notifies the controller about an approval allowing the controller to react if desired\\n * @param _owner The address that calls `approve()`\\n * @param _spender The spender in the `approve()` call\\n * @param _amount The amount in the `approve()` call\\n * @return False if the controller does not authorize the approval\\n */\\n function onApprove(address _owner, address _spender, uint256 _amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x872b17903608262164b43c7304e9fe1d6ae631070ffd2c911e7508d7f7cf7c91\",\"license\":\"MIT\"},\"src/kleros-v1/kleros-liquid-xdai/WrappedPinakion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8;\\n\\nimport \\\"@openzeppelin/contracts/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\nimport \\\"../interfaces/ITokenController.sol\\\";\\nimport \\\"./interfaces/ITokenBridge.sol\\\";\\nimport \\\"./interfaces/IERC677.sol\\\";\\n\\ncontract WrappedPinakion is Initializable {\\n using SafeMath for uint256;\\n\\n /* Events */\\n\\n /**\\n * @notice Emitted when `value` tokens are moved from one account (`from`) to another (`to`).\\n * @dev Notice that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @notice Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /* Storage */\\n\\n mapping(address => uint256) private balances;\\n mapping(address => mapping(address => uint256)) public allowance;\\n\\n /// @notice Total supply of the token. Equals the total xPinakion deposit into the contract.\\n uint256 public totalSupply;\\n\\n /// @notice Name of the token.\\n string public name;\\n\\n /// @notice Symbol of the token.\\n string public symbol;\\n\\n /// @notice Number of decimals of the token.\\n uint8 public decimals;\\n\\n /// @notice The token's controller.\\n address public controller;\\n\\n /// @notice Bridged PNK on xDai to be wrapped. This token is upgradeable.\\n IERC677 public xPinakion;\\n\\n /// @notice xDai Token Bridge. The Token Bridge is upgradeable.\\n ITokenBridge public tokenBridge;\\n\\n /* Modifiers */\\n\\n /// @dev Verifies that the sender has ability to modify controlled parameters.\\n modifier onlyController() {\\n require(controller == msg.sender, \\\"The caller is not the controller.\\\");\\n _;\\n }\\n\\n /* Initializer */\\n\\n /**\\n * @dev Constructor.\\n * @param _name for the wrapped PNK on the home chain.\\n * @param _symbol for wrapped PNK ticker on the home chain.\\n * @param _xPinakion the home PNK contract which is already bridged to the foreign PNK contract.\\n * @param _tokenBridge the TokenBridge contract.\\n */\\n function initialize(\\n string memory _name,\\n string memory _symbol,\\n IERC677 _xPinakion,\\n ITokenBridge _tokenBridge\\n ) public initializer {\\n name = _name;\\n symbol = _symbol;\\n decimals = 18;\\n xPinakion = _xPinakion;\\n tokenBridge = _tokenBridge;\\n controller = msg.sender;\\n }\\n\\n /* External */\\n\\n /**\\n * @notice Changes `controller` to `_controller`.\\n * @param _controller The new controller of the contract\\n */\\n function changeController(address _controller) external onlyController {\\n controller = _controller;\\n }\\n\\n /**\\n * @notice Converts bridged PNK (xPinakion) into wrapped PNK which can be staked in KlerosLiquid.\\n * @param _amount The amount of wrapped pinakions to mint.\\n */\\n function deposit(uint256 _amount) external {\\n _mint(msg.sender, _amount);\\n require(\\n xPinakion.transferFrom(msg.sender, address(this), _amount),\\n \\\"Sender does not have enough approved funds.\\\"\\n );\\n }\\n\\n /**\\n * @notice IERC20 Receiver functionality.\\n * @dev Converts bridged PNK (xPinakion) into wrapped PNK which can be staked in KlerosLiquid.\\n * If the tokenBridge is calling this function, then this contract has already received\\n * the xPinakion tokens. Notice that the Home bridge calls onTokenBridge as a result of\\n * someone invoking `relayTokensAndCall()` on the Foreign bridge contract.\\n * @param _token The token address the _amount belongs to.\\n * @param _amount The amount of wrapped PNK to mint.\\n * @param _data Calldata containing the address of the recipient.\\n * Notice that the address has to be padded to the right 32 bytes.\\n */\\n function onTokenBridged(address _token, uint256 _amount, bytes calldata _data) external {\\n require(msg.sender == address(tokenBridge), \\\"Sender not authorized.\\\");\\n require(_token == address(xPinakion), \\\"Token bridged is not xPinakion.\\\");\\n\\n address recipient;\\n assembly {\\n recipient := calldataload(0x84)\\n }\\n _mint(recipient, _amount);\\n }\\n\\n /**\\n * @notice Converts wrapped PNK back into bridged PNK (xPinakion).\\n * @param _amount The amount of bridged PNK to withdraw.\\n */\\n function withdraw(uint256 _amount) external {\\n _burn(_amount);\\n require(xPinakion.transfer(msg.sender, _amount), \\\"The `transfer` function must not fail.\\\");\\n }\\n\\n /**\\n * @notice Converts wrapped PNK back into PNK using the Token Bridge.\\n * @dev This function is not strictly needed, but it provides a good UX to users who want to get their Mainnet's PNK back.\\n * What normally takes 3 transactions, here is done in one go.\\n * Notice that the PNK have to be claimed on Mainnet's TokenBridge by the receiver.\\n * @param _amount The amount of PNK to withdraw.\\n * @param _receiver The address which will receive the PNK back in the foreign chain.\\n */\\n function withdrawAndConvertToPNK(uint256 _amount, address _receiver) external {\\n _burn(_amount);\\n // Using approve is safe here, because this contract approves the bridge to spend the tokens and triggers the relay immediately.\\n xPinakion.approve(address(tokenBridge), _amount);\\n tokenBridge.relayTokens(xPinakion, _receiver, _amount);\\n }\\n\\n /**\\n * @notice Moves `_amount` tokens from the caller's account to `_recipient`.\\n * @param _recipient The entity receiving the funds.\\n * @param _amount The amount to tranfer in base units.\\n * @return True on success.\\n */\\n function transfer(address _recipient, uint256 _amount) public returns (bool) {\\n if (isContract(controller)) {\\n require(\\n ITokenController(controller).onTransfer(msg.sender, _recipient, _amount),\\n \\\"Token controller rejects transfer.\\\"\\n );\\n }\\n balances[msg.sender] = balances[msg.sender].sub(_amount); // ERC20: transfer amount exceeds balance\\n balances[_recipient] = balances[_recipient].add(_amount);\\n emit Transfer(msg.sender, _recipient, _amount);\\n return true;\\n }\\n\\n /**\\n * @notice Moves `_amount` tokens from `_sender` to `_recipient` using the\\n * allowance mechanism. `_amount` is then deducted from the caller's allowance.\\n * @param _sender The entity to take the funds from.\\n * @param _recipient The entity receiving the funds.\\n * @param _amount The amount to tranfer in base units.\\n * @return True on success.\\n */\\n function transferFrom(address _sender, address _recipient, uint256 _amount) public returns (bool) {\\n if (isContract(controller)) {\\n require(\\n ITokenController(controller).onTransfer(_sender, _recipient, _amount),\\n \\\"Token controller rejects transfer.\\\"\\n );\\n }\\n\\n /** The controller of this contract can move tokens around at will,\\n * this is important to recognize! Confirm that you trust the\\n * controller of this contract, which in most situations should be\\n * another open source smart contract or 0x0.\\n */\\n if (msg.sender != controller) {\\n allowance[_sender][msg.sender] = allowance[_sender][msg.sender].sub(_amount); // ERC20: transfer amount exceeds allowance.\\n }\\n\\n balances[_sender] = balances[_sender].sub(_amount); // ERC20: transfer amount exceeds balance\\n balances[_recipient] = balances[_recipient].add(_amount);\\n emit Transfer(_sender, _recipient, _amount);\\n return true;\\n }\\n\\n /**\\n * @notice Approves `_spender` to spend `_amount`.\\n * @param _spender The entity allowed to spend funds.\\n * @param _amount The amount of base units the entity will be allowed to spend.\\n * @return True on success.\\n */\\n function approve(address _spender, uint256 _amount) public returns (bool) {\\n // Alerts the token controller of the approve function call\\n if (isContract(controller)) {\\n require(\\n ITokenController(controller).onApprove(msg.sender, _spender, _amount),\\n \\\"Token controller does not approve.\\\"\\n );\\n }\\n\\n allowance[msg.sender][_spender] = _amount;\\n emit Approval(msg.sender, _spender, _amount);\\n return true;\\n }\\n\\n /**\\n * @notice Increases the `_spender` allowance by `_addedValue`.\\n * @param _spender The entity allowed to spend funds.\\n * @param _addedValue The amount of extra base units the entity will be allowed to spend.\\n * @return True on success.\\n */\\n function increaseAllowance(address _spender, uint256 _addedValue) public returns (bool) {\\n uint256 newAllowance = allowance[msg.sender][_spender].add(_addedValue);\\n // Alerts the token controller of the approve function call\\n if (isContract(controller)) {\\n require(\\n ITokenController(controller).onApprove(msg.sender, _spender, newAllowance),\\n \\\"Token controller does not approve.\\\"\\n );\\n }\\n\\n allowance[msg.sender][_spender] = newAllowance;\\n emit Approval(msg.sender, _spender, newAllowance);\\n return true;\\n }\\n\\n /**\\n * @notice Decreases the `_spender` allowance by `_subtractedValue`.\\n * @param _spender The entity whose spending allocation will be reduced.\\n * @param _subtractedValue The reduction of spending allocation in base units.\\n * @return True on success.\\n */\\n function decreaseAllowance(address _spender, uint256 _subtractedValue) public returns (bool) {\\n uint256 newAllowance = allowance[msg.sender][_spender].sub(_subtractedValue); // ERC20: decreased allowance below zero\\n // Alerts the token controller of the approve function call\\n if (isContract(controller)) {\\n require(\\n ITokenController(controller).onApprove(msg.sender, _spender, newAllowance),\\n \\\"Token controller does not approve.\\\"\\n );\\n }\\n\\n allowance[msg.sender][_spender] = newAllowance;\\n emit Approval(msg.sender, _spender, newAllowance);\\n return true;\\n }\\n\\n /* Internal */\\n\\n /**\\n * @dev Internal function that mints an amount of the token and assigns it to\\n * an account. This encapsulates the modification of balances such that the\\n * proper events are emitted.\\n * @param _recipient The address which will receive the minted tokens.\\n * @param _amount The amount that will be created.\\n */\\n function _mint(address _recipient, uint256 _amount) internal {\\n totalSupply = totalSupply.add(_amount);\\n balances[_recipient] = balances[_recipient].add(_amount);\\n emit Transfer(address(0x0), _recipient, _amount);\\n }\\n\\n /**\\n * @dev Destroys `_amount` tokens from the caller. Cannot burn locked tokens.\\n * @param _amount The quantity of tokens to burn in base units.\\n */\\n function _burn(uint256 _amount) internal {\\n if (isContract(controller)) {\\n require(\\n ITokenController(controller).onTransfer(msg.sender, address(0x0), _amount),\\n \\\"Token controller rejects transfer.\\\"\\n );\\n }\\n balances[msg.sender] = balances[msg.sender].sub(_amount); // ERC20: burn amount exceeds balance\\n totalSupply = totalSupply.sub(_amount);\\n emit Transfer(msg.sender, address(0x0), _amount);\\n }\\n\\n /**\\n * @dev Internal function to determine if an address is a contract.\\n * @param _addr The address being queried.\\n * @return True if `_addr` is a contract.\\n */\\n function isContract(address _addr) internal view returns (bool) {\\n uint256 size;\\n if (_addr == address(0)) return false;\\n assembly {\\n size := extcodesize(_addr)\\n }\\n return size > 0;\\n }\\n\\n /* Getters */\\n\\n /**\\n * @dev Gets the balance of the specified address.\\n * @param _owner The address to query the balance of.\\n * @return uint256 value representing the amount owned by the passed address.\\n */\\n function balanceOf(address _owner) public view returns (uint256) {\\n return balances[_owner];\\n }\\n}\\n\",\"keccak256\":\"0x1cdaf0dd439866cb5029d3299bd3bb7412c4d55aeafebdd168a60914da741606\",\"license\":\"MIT\"},\"src/kleros-v1/kleros-liquid-xdai/interfaces/IERC677.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8;\\n\\ninterface IERC677 {\\n function transfer(address _to, uint256 _value) external returns (bool);\\n\\n function transferFrom(address _from, address _to, uint256 _value) external returns (bool);\\n\\n function approve(address _spender, uint256 _value) external returns (bool);\\n}\\n\",\"keccak256\":\"0x901e298088578c3333807574c52d2d288a1a1036531bd85168f9505cb85168e7\",\"license\":\"MIT\"},\"src/kleros-v1/kleros-liquid-xdai/interfaces/IRandomAuRa.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8;\\n\\ninterface IRandomAuRa {\\n function currentSeed() external view returns (uint256);\\n\\n function isCommitPhase() external view returns (bool);\\n\\n function nextCommitPhaseStartBlock() external view returns (uint256);\\n\\n function collectRoundLength() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x0fcb472d7f826d65845caa8683bb25159ae0ce4bbc03fe1569af7a65dca7398d\",\"license\":\"MIT\"},\"src/kleros-v1/kleros-liquid-xdai/interfaces/ITokenBridge.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8;\\n\\nimport \\\"./IERC677.sol\\\";\\n\\ninterface ITokenBridge {\\n function relayTokens(IERC677 token, address _receiver, uint256 _value) external;\\n}\\n\",\"keccak256\":\"0x8054fe008a2a2473ab24168068e9207b54bc0ac9a6de31899f5da62ef1a85805\",\"license\":\"MIT\"},\"src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8;\\n\\nimport \\\"@openzeppelin/contracts/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport {IArbitrator, IArbitrable} from \\\"../../arbitration/IArbitrator.sol\\\";\\nimport {ITokenController} from \\\"../interfaces/ITokenController.sol\\\";\\nimport {WrappedPinakion} from \\\"./WrappedPinakion.sol\\\";\\nimport {IRandomAuRa} from \\\"./interfaces/IRandomAuRa.sol\\\";\\n\\nimport {SortitionSumTreeFactory} from \\\"../../libraries/SortitionSumTreeFactory.sol\\\";\\nimport \\\"../../gateway/interfaces/IForeignGateway.sol\\\";\\n\\n/**\\n * @title xKlerosLiquidV2\\n * @dev This contract is an adaption of Mainnet's KlerosLiquid (https://github.com/kleros/kleros/blob/69cfbfb2128c29f1625b3a99a3183540772fda08/contracts/kleros/KlerosLiquid.sol)\\n * for xDai chain. Notice that variables referring to ETH values in this contract, will hold the native token values of the chain on which xKlerosLiquid is deployed.\\n * When this contract gets deployed on xDai chain, ETH variables will hold xDai values.\\n */\\ncontract xKlerosLiquidV2 is Initializable, ITokenController, IArbitrator {\\n /* Enums */\\n\\n // General\\n enum Phase {\\n staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors.\\n generating, // Waiting for a random number. Pass as soon as it is ready.\\n drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes.\\n }\\n\\n // Dispute\\n enum Period {\\n evidence, // Evidence can be submitted. This is also when drawing has to take place.\\n commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes.\\n vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not.\\n appeal, // The dispute can be appealed.\\n execution // Tokens are redistributed and the ruling is executed.\\n }\\n\\n /* Structs */\\n\\n // General\\n struct Court {\\n uint96 parent; // The parent court.\\n uint256[] children; // List of child courts.\\n bool hiddenVotes; // Whether to use commit and reveal or not.\\n uint256 minStake; // Minimum tokens needed to stake in the court.\\n uint256 alpha; // Basis point of tokens that are lost when incoherent.\\n uint256 feeForJuror; // Arbitration fee paid per juror.\\n // The appeal after the one that reaches this number of jurors will go to the parent court if any, otherwise, no more appeals are possible.\\n uint256 jurorsForCourtJump;\\n uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`.\\n }\\n struct DelayedSetStake {\\n address account; // The address of the juror.\\n uint96 subcourtID; // The ID of the subcourt.\\n uint128 stake; // The new stake.\\n }\\n\\n // Dispute\\n struct Vote {\\n address account; // The address of the juror.\\n bytes32 commit; // The commit of the juror. For courts with hidden votes.\\n uint256 choice; // The choice of the juror.\\n bool voted; // True if the vote has been cast or revealed, false otherwise.\\n }\\n struct VoteCounter {\\n // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first.\\n uint256 winningChoice;\\n mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`.\\n bool tied; // True if there is a tie, false otherwise.\\n }\\n struct Dispute {\\n // Note that appeal `0` is equivalent to the first round of the dispute.\\n uint96 subcourtID; // The ID of the subcourt the dispute is in.\\n IArbitrable arbitrated; // The arbitrated arbitrable contract.\\n // The number of choices jurors have when voting. This does not include choice `0` which is reserved for \\\"refuse to arbitrate\\\"/\\\"no ruling\\\".\\n uint256 numberOfChoices;\\n Period period; // The current period of the dispute.\\n uint256 lastPeriodChange; // The last time the period was changed.\\n // The votes in the form `votes[appeal][voteID]`. On each round, a new list is pushed and packed with as many empty votes as there are draws. We use `dispute.votes.length` to get the number of appeals plus 1 for the first round.\\n Vote[][] votes;\\n VoteCounter[] voteCounters; // The vote counters in the form `voteCounters[appeal]`.\\n uint256[] tokensAtStakePerJuror; // The amount of tokens at stake for each juror in the form `tokensAtStakePerJuror[appeal]`.\\n uint256[] totalFeesForJurors; // The total juror fees paid in the form `totalFeesForJurors[appeal]`.\\n uint256 drawsInRound; // A counter of draws made in the current round.\\n uint256 commitsInRound; // A counter of commits made in the current round.\\n uint256[] votesInEachRound; // A counter of votes made in each round in the form `votesInEachRound[appeal]`.\\n // A counter of vote reward repartitions made in each round in the form `repartitionsInEachRound[appeal]`.\\n uint256[] repartitionsInEachRound;\\n uint256[] penaltiesInEachRound; // The amount of tokens collected from penalties in each round in the form `penaltiesInEachRound[appeal]`.\\n bool ruled; // True if the ruling has been executed, false otherwise.\\n }\\n\\n // Juror\\n struct Juror {\\n // The IDs of subcourts where the juror has stake path ends. A stake path is a path from the general court to a court the juror directly staked in using `_setStake`.\\n uint96[] subcourtIDs;\\n uint256 stakedTokens; // The juror's total amount of tokens staked in subcourts.\\n uint256 lockedTokens; // The juror's total amount of tokens locked in disputes.\\n }\\n\\n /* Events */\\n\\n /** @dev Emitted when we pass to a new phase.\\n * @param _phase The new phase.\\n */\\n event NewPhase(Phase _phase);\\n\\n /** @dev Emitted when a dispute passes to a new period.\\n * @param _disputeID The ID of the dispute.\\n * @param _period The new period.\\n */\\n event NewPeriod(uint256 indexed _disputeID, Period _period);\\n\\n /** @dev Emitted when a juror's stake is set.\\n * @param _address The address of the juror.\\n * @param _subcourtID The ID of the subcourt at the end of the stake path.\\n * @param _stake The new stake.\\n * @param _newTotalStake The new total stake.\\n */\\n event StakeSet(address indexed _address, uint256 _subcourtID, uint128 _stake, uint256 _newTotalStake);\\n\\n /** @dev Emitted when a juror is drawn.\\n * @param _address The drawn address.\\n * @param _disputeID The ID of the dispute.\\n * @param _appeal The appeal the draw is for. 0 is for the first round.\\n * @param _voteID The vote ID.\\n */\\n event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _appeal, uint256 _voteID);\\n\\n /** @dev Emitted when a juror wins or loses tokens and ETH from a dispute.\\n * @param _address The juror affected.\\n * @param _disputeID The ID of the dispute.\\n * @param _tokenAmount The amount of tokens won or lost.\\n * @param _ETHAmount The amount of ETH won or lost.\\n */\\n event TokenAndETHShift(address indexed _address, uint256 indexed _disputeID, int _tokenAmount, int _ETHAmount);\\n\\n /* Storage */\\n\\n // General Constants\\n uint256 public constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have.\\n uint256 public constant MIN_JURORS = 3; // The global default minimum number of jurors in a dispute.\\n uint256 public constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH.\\n uint256 public constant ALPHA_DIVISOR = 1e4; // The number to divide `Court.alpha` by.\\n // General Contracts\\n address public governor; // The governor of the contract.\\n WrappedPinakion public pinakion; // The Pinakion token contract.\\n IRandomAuRa public RNGenerator; // The random number generator contract.\\n // General Dynamic\\n Phase public phase; // The current phase.\\n uint256 public lastPhaseChange; // The last time the phase was changed.\\n uint256 public disputesWithoutJurors; // The number of disputes that have not finished drawing jurors.\\n // The block number to get the next random number from. Used so there is at least a 1 block difference from the staking phase.\\n uint256 public RNBlock;\\n uint256 public RN; // The current random number.\\n uint256 public minStakingTime; // The minimum staking time.\\n uint256 public maxDrawingTime; // The maximum drawing time.\\n // True if insolvent (`balance < stakedTokens || balance < lockedTokens`) token transfers should be blocked. Used to avoid blocking penalties.\\n bool public lockInsolventTransfers;\\n // General Storage\\n Court[] public courts; // The subcourts.\\n using SortitionSumTreeFactory for SortitionSumTreeFactory.SortitionSumTrees; // Use library functions for sortition sum trees.\\n SortitionSumTreeFactory.SortitionSumTrees internal sortitionSumTrees; // The sortition sum trees.\\n // The delayed calls to `_setStake`. Used to schedule `_setStake`s when not in the staking phase.\\n mapping(uint256 => DelayedSetStake) public delayedSetStakes;\\n // The index of the next `delayedSetStakes` item to execute. Starts at 1 because `lastDelayedSetStake` starts at 0.\\n uint256 public nextDelayedSetStake;\\n uint256 public lastDelayedSetStake; // The index of the last `delayedSetStakes` item. 0 is skipped because it is the initial value.\\n\\n // Dispute\\n // Use a mapping instead of an array so that upgrading (appending variables to) the Dispute struct is possible without big layout changes.\\n mapping(uint256 => Dispute) public disputes; // The disputes.\\n uint256 public totalDisputes;\\n\\n // Juror\\n mapping(address => Juror) public jurors; // The jurors.\\n\\n IForeignGateway public foreignGateway; // Foreign gateway contract.\\n IERC20 public weth; // WETH token address.\\n\\n mapping(uint256 => uint256) public disputesRuling;\\n\\n /* Modifiers */\\n\\n /** @dev Requires a specific phase.\\n * @param _phase The required phase.\\n */\\n modifier onlyDuringPhase(Phase _phase) {\\n require(phase == _phase);\\n _;\\n }\\n\\n /** @dev Requires a specific period in a dispute.\\n * @param _disputeID The ID of the dispute.\\n * @param _period The required period.\\n */\\n modifier onlyDuringPeriod(uint256 _disputeID, Period _period) {\\n require(disputes[_disputeID].period == _period);\\n _;\\n }\\n\\n /** @dev Requires that the sender is the governor. Note that the governor is expected to not be malicious. */\\n modifier onlyByGovernor() {\\n require(governor == msg.sender);\\n _;\\n }\\n\\n /* Constructor */\\n\\n /** @dev Constructs the KlerosLiquid contract.\\n * @param _governor The governor's address.\\n * @param _pinakion The address of the token contract.\\n * @param _RNGenerator The address of the random number generator contract.\\n * @param _minStakingTime The minimum time that the staking phase should last.\\n * @param _maxDrawingTime The maximum time that the drawing phase should last.\\n * @param _hiddenVotes The `hiddenVotes` property value of the general court.\\n * @param _courtParameters MinStake, alpha, feeForJuror and jurorsForCourtJump respectively.\\n * @param _timesPerPeriod The `timesPerPeriod` property value of the general court.\\n * @param _sortitionSumTreeK The number of children per node of the general court's sortition sum tree.\\n * @param _foreignGateway Foreign gateway on xDai.\\n * @param _weth Weth contract.\\n */\\n function initialize(\\n address _governor,\\n WrappedPinakion _pinakion,\\n IRandomAuRa _RNGenerator,\\n uint256 _minStakingTime,\\n uint256 _maxDrawingTime,\\n bool _hiddenVotes,\\n uint256[4] memory _courtParameters,\\n uint256[4] memory _timesPerPeriod,\\n uint256 _sortitionSumTreeK,\\n IForeignGateway _foreignGateway,\\n IERC20 _weth\\n ) public initializer {\\n // Initialize contract.\\n governor = _governor;\\n pinakion = _pinakion;\\n RNGenerator = _RNGenerator;\\n minStakingTime = _minStakingTime;\\n maxDrawingTime = _maxDrawingTime;\\n phase = Phase.staking;\\n lastPhaseChange = block.timestamp;\\n lockInsolventTransfers = true;\\n if (nextDelayedSetStake == 0) nextDelayedSetStake = 1;\\n foreignGateway = _foreignGateway;\\n weth = _weth;\\n\\n // Create the general court.\\n if (courts.length == 0) {\\n courts.push(\\n Court({\\n parent: 0,\\n children: new uint256[](0),\\n hiddenVotes: _hiddenVotes,\\n minStake: _courtParameters[0],\\n alpha: _courtParameters[1],\\n feeForJuror: _courtParameters[2],\\n jurorsForCourtJump: _courtParameters[3],\\n timesPerPeriod: _timesPerPeriod\\n })\\n );\\n sortitionSumTrees.createTree(bytes32(0), _sortitionSumTreeK);\\n }\\n }\\n\\n /* External */\\n\\n /** @dev Lets the governor call anything on behalf of the contract.\\n * @param _destination The destination of the call.\\n * @param _amount The value sent with the call.\\n * @param _data The data sent with the call.\\n */\\n function executeGovernorProposal(\\n address _destination,\\n uint256 _amount,\\n bytes memory _data\\n ) external onlyByGovernor {\\n (bool success, ) = _destination.call{value: _amount}(_data);\\n require(success, \\\"Unsuccessful call\\\");\\n }\\n\\n /** @dev Changes the `governor` storage variable.\\n * @param _governor The new value for the `governor` storage variable.\\n */\\n function changeGovernor(address _governor) external onlyByGovernor {\\n governor = _governor;\\n }\\n\\n /** @dev Changes the `pinakion` storage variable.\\n * @param _pinakion The new value for the `pinakion` storage variable.\\n */\\n function changePinakion(WrappedPinakion _pinakion) external onlyByGovernor {\\n pinakion = _pinakion;\\n }\\n\\n /** @dev Changes the `RNGenerator` storage variable.\\n * @param _RNGenerator The new value for the `RNGenerator` storage variable.\\n */\\n function changeRNGenerator(IRandomAuRa _RNGenerator) external onlyByGovernor {\\n RNGenerator = _RNGenerator;\\n if (phase == Phase.generating) {\\n RNBlock = RNGenerator.nextCommitPhaseStartBlock() + RNGenerator.collectRoundLength();\\n }\\n }\\n\\n /** @dev Changes the `minStakingTime` storage variable.\\n * @param _minStakingTime The new value for the `minStakingTime` storage variable.\\n */\\n function changeMinStakingTime(uint256 _minStakingTime) external onlyByGovernor {\\n minStakingTime = _minStakingTime;\\n }\\n\\n /** @dev Changes the `maxDrawingTime` storage variable.\\n * @param _maxDrawingTime The new value for the `maxDrawingTime` storage variable.\\n */\\n function changeMaxDrawingTime(uint256 _maxDrawingTime) external onlyByGovernor {\\n maxDrawingTime = _maxDrawingTime;\\n }\\n\\n /** @dev Changes the `foreignGateway` storage variable.\\n * @param _foreignGateway The new value for the `foreignGateway` storage variable.\\n */\\n function changeForeignGateway(IForeignGateway _foreignGateway) external onlyByGovernor {\\n foreignGateway = _foreignGateway;\\n }\\n\\n /** @dev Changes the `weth` storage variable.\\n * @param _weth The new value for the `weth` storage variable.\\n */\\n function changeWethAddress(IERC20 _weth) external onlyByGovernor {\\n weth = _weth;\\n }\\n\\n /** @dev Creates a subcourt under a specified parent court.\\n * @param _parent The `parent` property value of the subcourt.\\n * @param _hiddenVotes The `hiddenVotes` property value of the subcourt.\\n * @param _minStake The `minStake` property value of the subcourt.\\n * @param _alpha The `alpha` property value of the subcourt.\\n * @param _feeForJuror The `feeForJuror` property value of the subcourt.\\n * @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the subcourt.\\n * @param _timesPerPeriod The `timesPerPeriod` property value of the subcourt.\\n * @param _sortitionSumTreeK The number of children per node of the subcourt's sortition sum tree.\\n */\\n function createSubcourt(\\n uint96 _parent,\\n bool _hiddenVotes,\\n uint256 _minStake,\\n uint256 _alpha,\\n uint256 _feeForJuror,\\n uint256 _jurorsForCourtJump,\\n uint256[4] memory _timesPerPeriod,\\n uint256 _sortitionSumTreeK\\n ) external onlyByGovernor {\\n require(\\n courts[_parent].minStake <= _minStake,\\n \\\"A subcourt cannot be a child of a subcourt with a higher minimum stake.\\\"\\n );\\n\\n // Create the subcourt.\\n uint256 subcourtID = courts.length;\\n Court storage subcourt = courts.push();\\n subcourt.parent = _parent;\\n subcourt.children = new uint256[](0);\\n subcourt.hiddenVotes = _hiddenVotes;\\n subcourt.minStake = _minStake;\\n subcourt.alpha = _alpha;\\n subcourt.feeForJuror = _feeForJuror;\\n subcourt.jurorsForCourtJump = _jurorsForCourtJump;\\n subcourt.timesPerPeriod = _timesPerPeriod;\\n sortitionSumTrees.createTree(bytes32(subcourtID), _sortitionSumTreeK);\\n\\n // Update the parent.\\n courts[_parent].children.push(subcourtID);\\n }\\n\\n /** @dev Changes the `minStake` property value of a specified subcourt. Don't set to a value lower than its parent's `minStake` property value.\\n * @param _subcourtID The ID of the subcourt.\\n * @param _minStake The new value for the `minStake` property value.\\n */\\n function changeSubcourtMinStake(uint96 _subcourtID, uint256 _minStake) external onlyByGovernor {\\n require(_subcourtID == 0 || courts[courts[_subcourtID].parent].minStake <= _minStake);\\n for (uint256 i = 0; i < courts[_subcourtID].children.length; i++) {\\n require(\\n courts[courts[_subcourtID].children[i]].minStake >= _minStake,\\n \\\"A subcourt cannot be the parent of a subcourt with a lower minimum stake.\\\"\\n );\\n }\\n\\n courts[_subcourtID].minStake = _minStake;\\n }\\n\\n /** @dev Changes the `alpha` property value of a specified subcourt.\\n * @param _subcourtID The ID of the subcourt.\\n * @param _alpha The new value for the `alpha` property value.\\n */\\n function changeSubcourtAlpha(uint96 _subcourtID, uint256 _alpha) external onlyByGovernor {\\n courts[_subcourtID].alpha = _alpha;\\n }\\n\\n /** @dev Changes the `feeForJuror` property value of a specified subcourt.\\n * @param _subcourtID The ID of the subcourt.\\n * @param _feeForJuror The new value for the `feeForJuror` property value.\\n */\\n function changeSubcourtJurorFee(uint96 _subcourtID, uint256 _feeForJuror) external onlyByGovernor {\\n courts[_subcourtID].feeForJuror = _feeForJuror;\\n }\\n\\n /** @dev Changes the `jurorsForCourtJump` property value of a specified subcourt.\\n * @param _subcourtID The ID of the subcourt.\\n * @param _jurorsForCourtJump The new value for the `jurorsForCourtJump` property value.\\n */\\n function changeSubcourtJurorsForJump(uint96 _subcourtID, uint256 _jurorsForCourtJump) external onlyByGovernor {\\n courts[_subcourtID].jurorsForCourtJump = _jurorsForCourtJump;\\n }\\n\\n /** @dev Changes the `timesPerPeriod` property value of a specified subcourt.\\n * @param _subcourtID The ID of the subcourt.\\n * @param _timesPerPeriod The new value for the `timesPerPeriod` property value.\\n */\\n function changeSubcourtTimesPerPeriod(\\n uint96 _subcourtID,\\n uint256[4] memory _timesPerPeriod\\n ) external onlyByGovernor {\\n courts[_subcourtID].timesPerPeriod = _timesPerPeriod;\\n }\\n\\n /** @dev Sets the caller's stake in a subcourt.\\n * @param _subcourtID The ID of the subcourt.\\n * @param _stake The new stake.\\n */\\n function setStake(uint96 _subcourtID, uint128 _stake) external {\\n require(_setStake(msg.sender, _subcourtID, _stake));\\n }\\n\\n /** @dev Executes the next delayed set stakes.\\n * `O(n)` where `n` is the number of iterations to run.\\n * @param _iterations The number of delayed set stakes to execute.\\n */\\n function executeDelayedSetStakes(uint256 _iterations) external onlyDuringPhase(Phase.staking) {\\n uint256 actualIterations = (nextDelayedSetStake + _iterations) - 1 > lastDelayedSetStake\\n ? (lastDelayedSetStake - nextDelayedSetStake) + 1\\n : _iterations;\\n uint256 newNextDelayedSetStake = nextDelayedSetStake + actualIterations;\\n require(newNextDelayedSetStake >= nextDelayedSetStake);\\n for (uint256 i = nextDelayedSetStake; i < newNextDelayedSetStake; i++) {\\n DelayedSetStake storage delayedSetStake = delayedSetStakes[i];\\n _setStake(delayedSetStake.account, delayedSetStake.subcourtID, delayedSetStake.stake);\\n delete delayedSetStakes[i];\\n }\\n nextDelayedSetStake = newNextDelayedSetStake;\\n }\\n\\n /** @dev Receive the ruling from foreign gateway which technically is an arbitrator of this contract.\\n * @param _disputeID ID of the dispute.\\n * @param _ruling Ruling given by V2 court and relayed by foreign gateway.\\n */\\n function rule(uint256 _disputeID, uint256 _ruling) external {\\n require(_disputeID < totalDisputes, \\\"Dispute ID does not exist.\\\");\\n require(msg.sender == address(foreignGateway), \\\"Can only be called by gateway\\\");\\n\\n Dispute storage dispute = disputes[_disputeID];\\n require(!dispute.ruled, \\\"Ruling already executed.\\\");\\n dispute.ruled = true;\\n disputesRuling[_disputeID] = _ruling;\\n\\n // Send the relayed ruling to the arbitrable while fully bypassing the dispute flow.\\n dispute.arbitrated.rule(_disputeID, _ruling);\\n\\n emit Ruling(dispute.arbitrated, _disputeID, _ruling);\\n }\\n\\n /* Public */\\n\\n /** @dev Creates a dispute. Must be called by the arbitrable contract.\\n * @param _numberOfChoices Number of choices to choose from in the dispute to be created.\\n * @param _extraData Additional info about the dispute to be created. We use it to pass the ID of the subcourt to create the dispute in (first 32 bytes) and the minimum number of jurors required (next 32 bytes).\\n * @return disputeID The ID of the created dispute.\\n */\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes memory _extraData\\n ) public payable override returns (uint256 disputeID) {\\n require(msg.value == 0, \\\"Fees should be paid in WETH\\\");\\n uint256 fee = arbitrationCost(_extraData);\\n require(weth.transferFrom(msg.sender, address(this), fee), \\\"Not enough WETH for arbitration\\\");\\n\\n disputeID = totalDisputes++;\\n Dispute storage dispute = disputes[disputeID];\\n dispute.arbitrated = IArbitrable(msg.sender);\\n\\n // The V2 subcourtID is off by one\\n (uint96 subcourtID, uint256 minJurors) = extraDataToSubcourtIDAndMinJurors(_extraData);\\n bytes memory extraDataV2 = abi.encode(uint256(subcourtID + 1), minJurors);\\n\\n require(weth.transfer(address(foreignGateway), fee), \\\"Fee transfer to gateway failed\\\");\\n foreignGateway.createDisputeERC20(_numberOfChoices, extraDataV2, fee);\\n\\n emit DisputeCreation(disputeID, IArbitrable(msg.sender));\\n }\\n\\n /** @dev DEPRECATED. Called when `_owner` sends ETH to the Wrapped Token contract.\\n * @param _owner The address that sent the ETH to create tokens.\\n * @return allowed Whether the operation should be allowed or not.\\n */\\n function proxyPayment(address _owner) public payable override returns (bool allowed) {\\n allowed = false;\\n }\\n\\n /** @dev Notifies the controller about a token transfer allowing the controller to react if desired.\\n * @param _from The origin of the transfer.\\n * @param _to The destination of the transfer.\\n * @param _amount The amount of the transfer.\\n * @return allowed Whether the operation should be allowed or not.\\n */\\n function onTransfer(address _from, address _to, uint256 _amount) public override returns (bool allowed) {\\n if (lockInsolventTransfers) {\\n // Never block penalties or rewards.\\n uint256 newBalance = pinakion.balanceOf(_from) - _amount;\\n if (newBalance < jurors[_from].stakedTokens || newBalance < jurors[_from].lockedTokens) return false;\\n }\\n allowed = true;\\n }\\n\\n /** @dev Notifies the controller about an approval allowing the controller to react if desired.\\n * @param _owner The address that calls `approve()`.\\n * @param _spender The spender in the `approve()` call.\\n * @param _amount The amount in the `approve()` call.\\n * @return allowed Whether the operation should be allowed or not.\\n */\\n function onApprove(address _owner, address _spender, uint256 _amount) public override returns (bool allowed) {\\n allowed = true;\\n }\\n\\n /* Public Views */\\n\\n /** @dev Gets the cost of arbitration in a specified subcourt.\\n * @param _extraData Additional info about the dispute. We use it to pass the ID of the subcourt to create the dispute in (first 32 bytes) and the minimum number of jurors required (next 32 bytes).\\n * @return cost The cost.\\n */\\n function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) {\\n cost = foreignGateway.arbitrationCost(_extraData);\\n }\\n\\n /** @dev Gets the current ruling of a specified dispute.\\n * @param _disputeID The ID of the dispute.\\n * @return ruling The current ruling.\\n */\\n function currentRuling(uint256 _disputeID) public view returns (uint256 ruling) {\\n Dispute storage dispute = disputes[_disputeID];\\n if (dispute.voteCounters.length == 0) {\\n ruling = disputesRuling[_disputeID];\\n } else {\\n ruling = dispute.voteCounters[dispute.voteCounters.length - 1].tied\\n ? 0\\n : dispute.voteCounters[dispute.voteCounters.length - 1].winningChoice;\\n }\\n }\\n\\n /* Internal */\\n\\n /** @dev Sets the specified juror's stake in a subcourt.\\n * `O(n + p * log_k(j))` where\\n * `n` is the number of subcourts the juror has staked in,\\n * `p` is the depth of the subcourt tree,\\n * `k` is the minimum number of children per node of one of these subcourts' sortition sum tree,\\n * and `j` is the maximum number of jurors that ever staked in one of these subcourts simultaneously.\\n * @param _account The address of the juror.\\n * @param _subcourtID The ID of the subcourt.\\n * @param _stake The new stake.\\n * @return succeeded True if the call succeeded, false otherwise.\\n */\\n function _setStake(address _account, uint96 _subcourtID, uint128 _stake) internal returns (bool succeeded) {\\n if (!(_subcourtID < courts.length)) return false;\\n\\n if (!(_stake == 0 || courts[_subcourtID].minStake <= _stake)) return false; // The juror's stake cannot be lower than the minimum stake for the subcourt.\\n Juror storage juror = jurors[_account];\\n bytes32 stakePathID = accountAndSubcourtIDToStakePathID(_account, _subcourtID);\\n uint256 currentStake = sortitionSumTrees.stakeOf(bytes32(uint256(_subcourtID)), stakePathID);\\n if (!(_stake == 0 || currentStake > 0 || juror.subcourtIDs.length < MAX_STAKE_PATHS)) return false; // Maximum stake paths reached.\\n uint256 newTotalStake = juror.stakedTokens - currentStake + _stake; // Can't overflow because _stake is a uint128.\\n if (!(_stake == 0 || pinakion.balanceOf(_account) >= newTotalStake)) return false; // The juror's total amount of staked tokens cannot be higher than the juror's balance.\\n\\n // Update juror's records.\\n juror.stakedTokens = newTotalStake;\\n if (_stake == 0) {\\n for (uint256 i = 0; i < juror.subcourtIDs.length; i++)\\n if (juror.subcourtIDs[i] == _subcourtID) {\\n juror.subcourtIDs[i] = juror.subcourtIDs[juror.subcourtIDs.length - 1];\\n juror.subcourtIDs.pop();\\n break;\\n }\\n } else if (currentStake == 0) juror.subcourtIDs.push(_subcourtID);\\n\\n // Update subcourt parents.\\n bool finished = false;\\n uint256 currentSubcourtID = _subcourtID;\\n while (!finished) {\\n sortitionSumTrees.set(bytes32(currentSubcourtID), _stake, stakePathID);\\n if (currentSubcourtID == 0) finished = true;\\n else currentSubcourtID = courts[currentSubcourtID].parent;\\n }\\n emit StakeSet(_account, _subcourtID, _stake, newTotalStake);\\n return true;\\n }\\n\\n /** @dev Gets a subcourt ID and the minimum number of jurors required from a specified extra data bytes array.\\n * @param _extraData The extra data bytes array. The first 32 bytes are the subcourt ID and the next 32 bytes are the minimum number of jurors.\\n * @return subcourtID The subcourt ID.\\n * @return minJurors The minimum number of jurors required.\\n */\\n function extraDataToSubcourtIDAndMinJurors(\\n bytes memory _extraData\\n ) internal view returns (uint96 subcourtID, uint256 minJurors) {\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n subcourtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n }\\n if (subcourtID >= courts.length) subcourtID = 0;\\n if (minJurors == 0) minJurors = MIN_JURORS;\\n } else {\\n subcourtID = 0;\\n minJurors = MIN_JURORS;\\n }\\n }\\n\\n /** @dev Packs an account and a subcourt ID into a stake path ID.\\n * @param _account The account to pack.\\n * @param _subcourtID The subcourt ID to pack.\\n * @return stakePathID The stake path ID.\\n */\\n function accountAndSubcourtIDToStakePathID(\\n address _account,\\n uint96 _subcourtID\\n ) internal pure returns (bytes32 stakePathID) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n let ptr := mload(0x40)\\n for {\\n let i := 0x00\\n } lt(i, 0x14) {\\n i := add(i, 0x01)\\n } {\\n mstore8(add(ptr, i), byte(add(0x0c, i), _account))\\n }\\n for {\\n let i := 0x14\\n } lt(i, 0x20) {\\n i := add(i, 0x01)\\n } {\\n mstore8(add(ptr, i), byte(i, _subcourtID))\\n }\\n stakePathID := mload(ptr)\\n }\\n }\\n\\n /* Interface Views */\\n\\n /** @dev Gets a specified subcourt's non primitive properties.\\n * @param _subcourtID The ID of the subcourt.\\n * @return children The subcourt's child court list.\\n * @return timesPerPeriod The subcourt's time per period.\\n */\\n function getSubcourt(\\n uint96 _subcourtID\\n ) external view returns (uint256[] memory children, uint256[4] memory timesPerPeriod) {\\n Court storage subcourt = courts[_subcourtID];\\n children = subcourt.children;\\n timesPerPeriod = subcourt.timesPerPeriod;\\n }\\n\\n /** @dev Gets a specified vote for a specified appeal in a specified dispute.\\n * @param _disputeID The ID of the dispute.\\n * @param _appeal The appeal.\\n * @param _voteID The ID of the vote.\\n * @return account The account for vote.\\n * @return commit The commit for vote.\\n * @return choice The choice for vote.\\n * @return voted True if the account voted, False otherwise.\\n */\\n function getVote(\\n uint256 _disputeID,\\n uint256 _appeal,\\n uint256 _voteID\\n ) external view returns (address account, bytes32 commit, uint256 choice, bool voted) {\\n Vote storage vote = disputes[_disputeID].votes[_appeal][_voteID];\\n account = vote.account;\\n commit = vote.commit;\\n choice = vote.choice;\\n voted = vote.voted;\\n }\\n\\n /** @dev Gets the vote counter for a specified appeal in a specified dispute.\\n * Note: This function is only to be used by the interface and it won't work if the number of choices is too high.\\n * @param _disputeID The ID of the dispute.\\n * @param _appeal The appeal.\\n * @return winningChoice The winning choice.\\n * @return counts The count.\\n * @return tied Whether the vote tied.\\n * `O(n)` where\\n * `n` is the number of choices of the dispute.\\n */\\n function getVoteCounter(\\n uint256 _disputeID,\\n uint256 _appeal\\n ) external view returns (uint256 winningChoice, uint256[] memory counts, bool tied) {\\n Dispute storage dispute = disputes[_disputeID];\\n VoteCounter storage voteCounter = dispute.voteCounters[_appeal];\\n winningChoice = voteCounter.winningChoice;\\n counts = new uint256[](dispute.numberOfChoices + 1);\\n for (uint256 i = 0; i <= dispute.numberOfChoices; i++) counts[i] = voteCounter.counts[i];\\n tied = voteCounter.tied;\\n }\\n\\n /** @dev Gets a specified dispute's non primitive properties.\\n * @param _disputeID The ID of the dispute.\\n * @return votesLengths The dispute's vote length.\\n * @return tokensAtStakePerJuror The dispute's required tokens at stake per Juror.\\n * @return totalFeesForJurors The dispute's total fees for Jurors.\\n * @return votesInEachRound The dispute's counter of votes made in each round.\\n * @return repartitionsInEachRound The dispute's counter of vote reward repartitions made in each round.\\n * @return penaltiesInEachRound The dispute's amount of tokens collected from penalties in each round.\\n * `O(a)` where\\n * `a` is the number of appeals of the dispute.\\n */\\n function getDispute(\\n uint256 _disputeID\\n )\\n external\\n view\\n returns (\\n uint256[] memory votesLengths,\\n uint256[] memory tokensAtStakePerJuror,\\n uint256[] memory totalFeesForJurors,\\n uint256[] memory votesInEachRound,\\n uint256[] memory repartitionsInEachRound,\\n uint256[] memory penaltiesInEachRound\\n )\\n {\\n Dispute storage dispute = disputes[_disputeID];\\n votesLengths = new uint256[](dispute.votes.length);\\n for (uint256 i = 0; i < dispute.votes.length; i++) votesLengths[i] = dispute.votes[i].length;\\n tokensAtStakePerJuror = dispute.tokensAtStakePerJuror;\\n totalFeesForJurors = dispute.totalFeesForJurors;\\n votesInEachRound = dispute.votesInEachRound;\\n repartitionsInEachRound = dispute.repartitionsInEachRound;\\n penaltiesInEachRound = dispute.penaltiesInEachRound;\\n }\\n\\n /** @dev Gets a specified juror's non primitive properties.\\n * @param _account The address of the juror.\\n * @return subcourtIDs The juror's IDs of subcourts where the juror has stake path.\\n */\\n function getJuror(address _account) external view returns (uint96[] memory subcourtIDs) {\\n Juror storage juror = jurors[_account];\\n subcourtIDs = juror.subcourtIDs;\\n }\\n\\n /** @dev Gets the stake of a specified juror in a specified subcourt.\\n * @param _account The address of the juror.\\n * @param _subcourtID The ID of the subcourt.\\n * @return stake The stake.\\n */\\n function stakeOf(address _account, uint96 _subcourtID) external view returns (uint256 stake) {\\n return\\n sortitionSumTrees.stakeOf(\\n bytes32(uint256(_subcourtID)),\\n accountAndSubcourtIDToStakePathID(_account, _subcourtID)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x3dcdb8741f6ef181e21ecfe20c91af0eba52f300d4f3b534b6ae9e2210e33138\",\"license\":\"MIT\"},\"src/libraries/SortitionSumTreeFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/**\\n * @authors: [@epiqueras, @unknownunknown1]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\n\\npragma solidity ^0.8;\\n\\n/**\\n * @title SortitionSumTreeFactory\\n * @author Enrique Piqueras - \\n * @dev A factory of trees that keep track of staked values for sortition.\\n */\\nlibrary SortitionSumTreeFactory {\\n /* Structs */\\n\\n struct SortitionSumTree {\\n uint K; // The maximum number of childs per node.\\n // We use this to keep track of vacant positions in the tree after removing a leaf. This is for keeping the tree as balanced as possible without spending gas on moving nodes around.\\n uint[] stack;\\n uint[] nodes;\\n // Two-way mapping of IDs to node indexes. Note that node index 0 is reserved for the root node, and means the ID does not have a node.\\n mapping(bytes32 => uint) IDsToNodeIndexes;\\n mapping(uint => bytes32) nodeIndexesToIDs;\\n }\\n\\n /* Storage */\\n\\n struct SortitionSumTrees {\\n mapping(bytes32 => SortitionSumTree) sortitionSumTrees;\\n }\\n\\n /* Public */\\n\\n /**\\n * @dev Create a sortition sum tree at the specified key.\\n * @param _key The key of the new tree.\\n * @param _K The number of children each node in the tree should have.\\n */\\n function createTree(SortitionSumTrees storage self, bytes32 _key, uint _K) public {\\n SortitionSumTree storage tree = self.sortitionSumTrees[_key];\\n require(tree.K == 0, \\\"Tree already exists.\\\");\\n require(_K > 1, \\\"K must be greater than one.\\\");\\n tree.K = _K;\\n tree.nodes.push(0);\\n }\\n\\n /**\\n * @dev Set a value of a tree.\\n * @param _key The key of the tree.\\n * @param _value The new value.\\n * @param _ID The ID of the value.\\n * `O(log_k(n))` where\\n * `k` is the maximum number of childs per node in the tree,\\n * and `n` is the maximum number of nodes ever appended.\\n */\\n function set(SortitionSumTrees storage self, bytes32 _key, uint _value, bytes32 _ID) public {\\n SortitionSumTree storage tree = self.sortitionSumTrees[_key];\\n uint treeIndex = tree.IDsToNodeIndexes[_ID];\\n\\n if (treeIndex == 0) {\\n // No existing node.\\n if (_value != 0) {\\n // Non zero value.\\n // Append.\\n // Add node.\\n if (tree.stack.length == 0) {\\n // No vacant spots.\\n // Get the index and append the value.\\n treeIndex = tree.nodes.length;\\n tree.nodes.push(_value);\\n\\n // Potentially append a new node and make the parent a sum node.\\n if (treeIndex != 1 && (treeIndex - 1) % tree.K == 0) {\\n // Is first child.\\n uint parentIndex = treeIndex / tree.K;\\n bytes32 parentID = tree.nodeIndexesToIDs[parentIndex];\\n uint newIndex = treeIndex + 1;\\n tree.nodes.push(tree.nodes[parentIndex]);\\n delete tree.nodeIndexesToIDs[parentIndex];\\n tree.IDsToNodeIndexes[parentID] = newIndex;\\n tree.nodeIndexesToIDs[newIndex] = parentID;\\n }\\n } else {\\n // Some vacant spot.\\n // Pop the stack and append the value.\\n treeIndex = tree.stack[tree.stack.length - 1];\\n tree.stack.pop();\\n tree.nodes[treeIndex] = _value;\\n }\\n\\n // Add label.\\n tree.IDsToNodeIndexes[_ID] = treeIndex;\\n tree.nodeIndexesToIDs[treeIndex] = _ID;\\n\\n updateParents(self, _key, treeIndex, true, _value);\\n }\\n } else {\\n // Existing node.\\n if (_value == 0) {\\n // Zero value.\\n // Remove.\\n // Remember value and set to 0.\\n uint value = tree.nodes[treeIndex];\\n tree.nodes[treeIndex] = 0;\\n\\n // Push to stack.\\n tree.stack.push(treeIndex);\\n\\n // Clear label.\\n delete tree.IDsToNodeIndexes[_ID];\\n delete tree.nodeIndexesToIDs[treeIndex];\\n\\n updateParents(self, _key, treeIndex, false, value);\\n } else if (_value != tree.nodes[treeIndex]) {\\n // New, non zero value.\\n // Set.\\n bool plusOrMinus = tree.nodes[treeIndex] <= _value;\\n uint plusOrMinusValue = plusOrMinus ? _value - tree.nodes[treeIndex] : tree.nodes[treeIndex] - _value;\\n tree.nodes[treeIndex] = _value;\\n\\n updateParents(self, _key, treeIndex, plusOrMinus, plusOrMinusValue);\\n }\\n }\\n }\\n\\n /* Public Views */\\n\\n /**\\n * @dev Query the leaves of a tree. Note that if `startIndex == 0`, the tree is empty and the root node will be returned.\\n * @param _key The key of the tree to get the leaves from.\\n * @param _cursor The pagination cursor.\\n * @param _count The number of items to return.\\n * @return startIndex The index at which leaves start.\\n * @return values The values of the returned leaves.\\n * @return hasMore Whether there are more for pagination.\\n * `O(n)` where\\n * `n` is the maximum number of nodes ever appended.\\n */\\n function queryLeafs(\\n SortitionSumTrees storage self,\\n bytes32 _key,\\n uint _cursor,\\n uint _count\\n ) public view returns (uint startIndex, uint[] memory values, bool hasMore) {\\n SortitionSumTree storage tree = self.sortitionSumTrees[_key];\\n\\n // Find the start index.\\n for (uint i = 0; i < tree.nodes.length; i++) {\\n if ((tree.K * i) + 1 >= tree.nodes.length) {\\n startIndex = i;\\n break;\\n }\\n }\\n\\n // Get the values.\\n uint loopStartIndex = startIndex + _cursor;\\n values = new uint[](loopStartIndex + _count > tree.nodes.length ? tree.nodes.length - loopStartIndex : _count);\\n uint valuesIndex = 0;\\n for (uint j = loopStartIndex; j < tree.nodes.length; j++) {\\n if (valuesIndex < _count) {\\n values[valuesIndex] = tree.nodes[j];\\n valuesIndex++;\\n } else {\\n hasMore = true;\\n break;\\n }\\n }\\n }\\n\\n /**\\n * @dev Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0.\\n * @param _key The key of the tree.\\n * @param _drawnNumber The drawn number.\\n * @return ID The drawn ID.\\n * `O(k * log_k(n))` where\\n * `k` is the maximum number of childs per node in the tree,\\n * and `n` is the maximum number of nodes ever appended.\\n */\\n function draw(SortitionSumTrees storage self, bytes32 _key, uint _drawnNumber) public view returns (bytes32 ID) {\\n SortitionSumTree storage tree = self.sortitionSumTrees[_key];\\n uint treeIndex = 0;\\n uint currentDrawnNumber = _drawnNumber % tree.nodes[0];\\n\\n while (\\n (tree.K * treeIndex) + 1 < tree.nodes.length // While it still has children.\\n )\\n for (uint i = 1; i <= tree.K; i++) {\\n // Loop over children.\\n uint nodeIndex = (tree.K * treeIndex) + i;\\n uint nodeValue = tree.nodes[nodeIndex];\\n\\n if (currentDrawnNumber >= nodeValue)\\n currentDrawnNumber -= nodeValue; // Go to the next child.\\n else {\\n // Pick this child.\\n treeIndex = nodeIndex;\\n break;\\n }\\n }\\n\\n ID = tree.nodeIndexesToIDs[treeIndex];\\n }\\n\\n /** @dev Gets a specified ID's associated value.\\n * @param _key The key of the tree.\\n * @param _ID The ID of the value.\\n * @return value The associated value.\\n */\\n function stakeOf(SortitionSumTrees storage self, bytes32 _key, bytes32 _ID) public view returns (uint value) {\\n SortitionSumTree storage tree = self.sortitionSumTrees[_key];\\n uint treeIndex = tree.IDsToNodeIndexes[_ID];\\n\\n if (treeIndex == 0) value = 0;\\n else value = tree.nodes[treeIndex];\\n }\\n\\n /* Private */\\n\\n /**\\n * @dev Update all the parents of a node.\\n * @param _key The key of the tree to update.\\n * @param _treeIndex The index of the node to start from.\\n * @param _plusOrMinus Wether to add (true) or substract (false).\\n * @param _value The value to add or substract.\\n * `O(log_k(n))` where\\n * `k` is the maximum number of childs per node in the tree,\\n * and `n` is the maximum number of nodes ever appended.\\n */\\n function updateParents(\\n SortitionSumTrees storage self,\\n bytes32 _key,\\n uint _treeIndex,\\n bool _plusOrMinus,\\n uint _value\\n ) private {\\n SortitionSumTree storage tree = self.sortitionSumTrees[_key];\\n\\n uint parentIndex = _treeIndex;\\n while (parentIndex != 0) {\\n parentIndex = (parentIndex - 1) / tree.K;\\n tree.nodes[parentIndex] = _plusOrMinus\\n ? tree.nodes[parentIndex] + _value\\n : tree.nodes[parentIndex] - _value;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x053af9495cb8382dfc1e1503d8f3dab3d356d664efdbdf534f146ab8f3834e95\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50613656806100206000396000f3fe6080604052600436106102df5760003560e01c80638ce7ff4a11610186578063c5e4ccc4116100d7578063e3b0073e11610085578063e3b0073e14610a4c578063e4c0aaf414610a7b578063eaff425a14610a9b578063f48c305414610ab0578063f66d685a14610ac4578063f7434ea914610ade578063fbf405b014610afe57600080fd5b8063c5e4ccc414610927578063ce9e77301461093d578063d4155d1f1461095d578063da682aeb1461098a578063dca5f6b0146109ae578063dd5e5cb5146109fa578063e3a96cbd14610a1a57600080fd5b8063b1c9fe6e11610134578063b1c9fe6e14610800578063b4a616081461082e578063b78a80ff14610843578063b888adfa146108d2578063c057eca7146108e8578063c108f3b4146108fe578063c13517e11461091457600080fd5b80638ce7ff4a146106f45780638d7c7daa1461074057806396d92a72146107605780639929057b146107805780639e72c153146107a0578063a2473cc1146107c0578063a57366e7146107e057600080fd5b806340026c87116102405780635e4a627d116101ee5780635e4a627d146106235780636a4f8f3914610639578063751accd0146106595780637a5de2a914610679578063823cfd7014610699578063840bc19c146106b957806385c855f3146106d457600080fd5b806340026c87146104be57806348b4e924146104ec5780634a3931491461050c578063564a565d1461053c57806357260364146105c357806359354c77146105e35780635bc24dd31461060357600080fd5b80631b92bbbe1161029d5780631b92bbbe146103bb5780631c3db16d146103d15780631f5a0dd2146103f15780632ea7b4d014610448578063311a6c561461045e5780633e1d09be1461047e5780633fc8cef31461049e57600080fd5b8062f5822c146102e4578063023d44df14610306578063034327441461032f57806303438616146103455780630c340a24146103725780630d44cf79146103a5575b600080fd5b3480156102f057600080fd5b506103046102ff366004612d61565b610b1e565b005b34801561031257600080fd5b5061031c60055481565b6040519081526020015b60405180910390f35b34801561033b57600080fd5b5061031c60045481565b34801561035157600080fd5b5061031c610360366004612d7e565b60146020526000908152604090205481565b34801561037e57600080fd5b50600054610398906201000090046001600160a01b031681565b6040516103269190612d97565b3480156103b157600080fd5b5061031c600e5481565b3480156103c757600080fd5b5061031c60085481565b3480156103dd57600080fd5b5061031c6103ec366004612d7e565b610b5d565b3480156103fd57600080fd5b5061041161040c366004612d7e565b610c0c565b604080516001600160601b0390971687529415156020870152938501929092526060840152608083015260a082015260c001610326565b34801561045457600080fd5b5061031c61271081565b34801561046a57600080fd5b50610304610479366004612dab565b610c60565b34801561048a57600080fd5b50610304610499366004612de9565b610e49565b3480156104aa57600080fd5b50601354610398906001600160a01b031681565b3480156104ca57600080fd5b506104de6104d9366004612e13565b611057565b604051610326929190612e69565b3480156104f857600080fd5b50610304610507366004612f40565b61111d565b34801561051857600080fd5b5061052c610527366004613008565b611497565b6040519015158152602001610326565b34801561054857600080fd5b506105af610557366004612d7e565b600f602052600090815260409020805460018201546002830154600384015460088501546009860154600d909601546001600160601b03861696600160601b9096046001600160a01b03169560ff9485169490911688565b60405161032698979695949392919061305f565b3480156105cf57600080fd5b506103046105de3660046130c2565b611596565b3480156105ef57600080fd5b506103046105fe366004612de9565b6115f4565b34801561060f57600080fd5b5061030461061e366004612de9565b611647565b34801561062f57600080fd5b5061031c60065481565b34801561064557600080fd5b50600254610398906001600160a01b031681565b34801561066557600080fd5b50610304610674366004613182565b61169a565b34801561068557600080fd5b50610304610694366004612d61565b61175f565b3480156106a557600080fd5b506103046106b4366004612d7e565b61179e565b3480156106c557600080fd5b5061031c6001600160ff1b0381565b3480156106e057600080fd5b506103046106ef3660046131da565b6117c0565b34801561070057600080fd5b5061071461070f36600461321d565b6117d8565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610326565b34801561074c57600080fd5b50601254610398906001600160a01b031681565b34801561076c57600080fd5b5061030461077b366004612d61565b611863565b34801561078c57600080fd5b5061030461079b366004612d7e565b6119de565b3480156107ac57600080fd5b506103046107bb366004612d61565b611b00565b3480156107cc57600080fd5b5061031c6107db366004613249565b611b3f565b3480156107ec57600080fd5b506103046107fb366004612de9565b611bed565b34801561080c57600080fd5b5060025461082190600160a01b900460ff1681565b6040516103269190613275565b34801561083a57600080fd5b5061031c600481565b34801561084f57600080fd5b5061089c61085e366004612d7e565b600c60205260009081526040902080546001909101546001600160a01b03821691600160a01b90046001600160601b0316906001600160801b031683565b604080516001600160a01b0390941684526001600160601b0390921660208401526001600160801b031690820152606001610326565b3480156108de57600080fd5b5061031c60035481565b3480156108f457600080fd5b5061031c60075481565b34801561090a57600080fd5b5061031c600d5481565b61031c61092236600461328f565b611c40565b34801561093357600080fd5b5061031c60105481565b34801561094957600080fd5b506103046109583660046132d5565b611f88565b34801561096957600080fd5b5061097d610978366004612d61565b6121e4565b604051610326919061334d565b34801561099657600080fd5b5061052c6109a5366004613008565b50600192915050565b3480156109ba57600080fd5b506109e56109c9366004612d61565b6011602052600090815260409020600181015460029091015482565b60408051928352602083019190915201610326565b348015610a0657600080fd5b50610304610a15366004612d7e565b612287565b348015610a2657600080fd5b50610a3a610a35366004612d7e565b6122a9565b6040516103269695949392919061339a565b348015610a5857600080fd5b50610a6c610a67366004612dab565b612521565b6040516103269392919061341c565b348015610a8757600080fd5b50610304610a96366004612d61565b612620565b348015610aa757600080fd5b5061031c600381565b61052c610abe366004612d61565b50600090565b348015610ad057600080fd5b5060095461052c9060ff1681565b348015610aea57600080fd5b5061031c610af9366004613447565b612667565b348015610b0a57600080fd5b50600154610398906001600160a01b031681565b6000546201000090046001600160a01b03163314610b3b57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600f602052604081206005810154610b8a576000838152601460205260409020549150610c06565b600581018054610b9c90600190613499565b81548110610bac57610bac6134b0565b600091825260209091206002600390920201015460ff16610c0057600581018054610bd990600190613499565b81548110610be957610be96134b0565b906000526020600020906003020160000154610c03565b60005b91505b50919050565b600a8181548110610c1c57600080fd5b60009182526020909120600b90910201805460028201546003830154600484015460058501546006909501546001600160601b03909416955060ff90921693909286565b6010548210610cb65760405162461bcd60e51b815260206004820152601a60248201527f4469737075746520494420646f6573206e6f742065786973742e00000000000060448201526064015b60405180910390fd5b6012546001600160a01b03163314610d105760405162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c792062652063616c6c656420627920676174657761790000006044820152606401610cad565b6000828152600f60205260409020600d81015460ff1615610d6e5760405162461bcd60e51b8152602060048201526018602482015277293ab634b7339030b63932b0b23c9032bc32b1baba32b21760411b6044820152606401610cad565b600d81018054600160ff19909116179055600083815260146020526040908190208390558154905163188d362b60e11b81526004810185905260248101849052600160601b9091046001600160a01b03169063311a6c5690604401600060405180830381600087803b158015610de357600080fd5b505af1158015610df7573d6000803e3d6000fd5b50508254604051858152869350600160601b9091046001600160a01b031691507f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a3505050565b6000546201000090046001600160a01b03163314610e6657600080fd5b6001600160601b0382161580610ed7575080600a80846001600160601b031681548110610e9557610e956134b0565b60009182526020909120600b909102015481546001600160601b03909116908110610ec257610ec26134b0565b90600052602060002090600b02016003015411155b610ee057600080fd5b60005b600a836001600160601b031681548110610eff57610eff6134b0565b90600052602060002090600b0201600101805490508110156110205781600a80856001600160601b031681548110610f3957610f396134b0565b90600052602060002090600b02016001018381548110610f5b57610f5b6134b0565b906000526020600020015481548110610f7657610f766134b0565b90600052602060002090600b020160030154101561100e5760405162461bcd60e51b815260206004820152604960248201527f4120737562636f7572742063616e6e6f742062652074686520706172656e742060448201527f6f66206120737562636f75727420776974682061206c6f776572206d696e696d6064820152683ab69039ba30b5b29760b91b608482015260a401610cad565b80611018816134c6565b915050610ee3565b5080600a836001600160601b03168154811061103e5761103e6134b0565b90600052602060002090600b0201600301819055505050565b6060611061612ca1565b6000600a846001600160601b03168154811061107f5761107f6134b0565b90600052602060002090600b02019050806001018054806020026020016040519081016040528092919081815260200182805480156110dd57602002820191906000526020600020905b8154815260200190600101908083116110c9575b505060408051608081019182905294975060078601935060049250905082845b8154815260200190600101908083116110fd575050505050915050915091565b600054610100900460ff161580801561113d5750600054600160ff909116105b806111575750303b158015611157575060005460ff166001145b6111ba5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cad565b6000805460ff1916600117905580156111dd576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038f81169190910291909117909155600180546001600160a01b0319168d83161781556002805460078d905560088c90556001600160a81b031916928d1692909217909155426003556009805460ff19169091179055600d5461125b576001600d555b601280546001600160a01b038086166001600160a01b0319928316179092556013805492851692909116919091179055600a5461144357604080516101008101825260008082528251818152602080820185528084019182528b1515848601528a516060808601919091528b8201516080860152948b015160a0850152938a015160c084015260e08301899052600a8054600181018255925282517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8600b90930292830180546001600160601b0319166001600160601b039092169190911781559051805193949193611375937fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a901929190910190612cbf565b50604082015160028201805460ff191691151591909117905560608201516003820155608082015160048083019190915560a0830151600583015560c0830151600683015560e08301516113ce91600784019190612d0a565b505060405163483abc4f60e11b8152600b6004820152600060248201526044810186905273c7e3BF90299f6BD9FA7c3703837A9CAbB57436369150639075789e9060640160006040518083038186803b15801561142a57600080fd5b505af415801561143e573d6000803e3d6000fd5b505050505b8015611489576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60095460009060ff161561158b576001546040516370a0823160e01b815260009184916001600160a01b03909116906370a08231906114da908990600401612d97565b60206040518083038186803b1580156114f257600080fd5b505afa158015611506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152a91906134e1565b6115349190613499565b6001600160a01b03861660009081526011602052604090206001015490915081108061157a57506001600160a01b03851660009081526011602052604090206002015481105b1561158957600091505061158f565b505b5060015b9392505050565b6000546201000090046001600160a01b031633146115b357600080fd5b80600a836001600160601b0316815481106115d0576115d06134b0565b90600052602060002090600b02016007019060046115ef929190612d0a565b505050565b6000546201000090046001600160a01b0316331461161157600080fd5b80600a836001600160601b03168154811061162e5761162e6134b0565b90600052602060002090600b0201600501819055505050565b6000546201000090046001600160a01b0316331461166457600080fd5b80600a836001600160601b031681548110611681576116816134b0565b90600052602060002090600b0201600401819055505050565b6000546201000090046001600160a01b031633146116b757600080fd5b6000836001600160a01b031683836040516116d29190613526565b60006040518083038185875af1925050503d806000811461170f576040519150601f19603f3d011682016040523d82523d6000602084013e611714565b606091505b50509050806117595760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610cad565b50505050565b6000546201000090046001600160a01b0316331461177c57600080fd5b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546201000090046001600160a01b031633146117bb57600080fd5b600755565b6117cb3383836126ee565b6117d457600080fd5b5050565b6000806000806000600f60008981526020019081526020016000206004018781548110611807576118076134b0565b906000526020600020018681548110611822576118226134b0565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169b909a5091985060ff169650945050505050565b6000546201000090046001600160a01b0316331461188057600080fd5b600280546001600160a01b0319166001600160a01b038316179055600160028054600160a01b900460ff16908111156118bb576118bb613049565b14156119db57600260009054906101000a90046001600160a01b03166001600160a01b0316631c77c58c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561190f57600080fd5b505afa158015611923573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194791906134e1565b600260009054906101000a90046001600160a01b03166001600160a01b03166378ab865d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561199557600080fd5b505afa1580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cd91906134e1565b6119d79190613542565b6005555b50565b60008060028054600160a01b900460ff16908111156119ff576119ff613049565b14611a0957600080fd5b6000600e54600184600d54611a1e9190613542565b611a289190613499565b11611a335782611a4e565b600d54600e54611a439190613499565b611a4e906001613542565b9050600081600d54611a609190613542565b9050600d54811015611a7157600080fd5b600d545b81811015611af7576000818152600c6020526040902080546001820154611ac1916001600160a01b03811691600160a01b9091046001600160601b0316906001600160801b03166126ee565b50506000818152600c6020526040812090815560010180546001600160801b031916905580611aef816134c6565b915050611a75565b50600d55505050565b6000546201000090046001600160a01b03163314611b1d57600080fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600073c7e3BF90299f6BD9FA7c3703837A9CAbB5743636637521ccb1600b6001600160601b038516611b718787612c10565b6040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260640160206040518083038186803b158015611bb557600080fd5b505af4158015611bc9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158f91906134e1565b6000546201000090046001600160a01b03163314611c0a57600080fd5b80600a836001600160601b031681548110611c2757611c276134b0565b90600052602060002090600b0201600601819055505050565b60003415611c905760405162461bcd60e51b815260206004820152601b60248201527f466565732073686f756c64206265207061696420696e205745544800000000006044820152606401610cad565b6000611c9b83612667565b6013546040516323b872dd60e01b8152336004820152306024820152604481018390529192506001600160a01b0316906323b872dd90606401602060405180830381600087803b158015611cee57600080fd5b505af1158015611d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d26919061355a565b611d725760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f756768205745544820666f72206172626974726174696f6e006044820152606401610cad565b60108054906000611d82836134c6565b909155506000818152600f6020526040812080546001600160601b031633600160601b0217815591935080611db686612c58565b90925090506000611dc8836001613577565b604080516001600160601b03929092166020830152810183905260600160408051808303601f190181529082905260135460125463a9059cbb60e01b84526001600160a01b03908116600485015260248401899052919350169063a9059cbb90604401602060405180830381600087803b158015611e4557600080fd5b505af1158015611e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7d919061355a565b611ec95760405162461bcd60e51b815260206004820152601e60248201527f466565207472616e7366657220746f2067617465776179206661696c656400006044820152606401610cad565b60125460405163979f8e6560e01b81526001600160a01b039091169063979f8e6590611efd908b9085908a906004016135ce565b602060405180830381600087803b158015611f1757600080fd5b505af1158015611f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4f91906134e1565b50604051339087907f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a3505050505092915050565b6000546201000090046001600160a01b03163314611fa557600080fd5b85600a896001600160601b031681548110611fc257611fc26134b0565b90600052602060002090600b02016003015411156120585760405162461bcd60e51b815260206004820152604760248201527f4120737562636f7572742063616e6e6f742062652061206368696c64206f662060448201527f6120737562636f7572742077697468206120686967686572206d696e696d756d6064820152661039ba30b5b29760c91b608482015260a401610cad565b600a805460018101825560009182527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8600b82020180546001600160601b0319166001600160601b038c1617815590916040519080825280602002602001820160405280156120d1578160200160208202803683370190505b5080516120e8916001840191602090910190612cbf565b5060028101805460ff19168a151517905560038101889055600480820188905560058201879055600682018690556121269060078301908690612d0a565b5060405163483abc4f60e11b8152600b6004820152602481018390526044810184905273c7e3BF90299f6BD9FA7c3703837A9CAbB574363690639075789e9060640160006040518083038186803b15801561218057600080fd5b505af4158015612194573d6000803e3d6000fd5b50505050600a8a6001600160601b0316815481106121b4576121b46134b0565b600091825260208083206001600b9093020182018054928301815583529091200191909155505050505050505050565b6001600160a01b0381166000908152601160209081526040918290208054835181840281018401909452808452606093919283919083018282801561227a57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116122375790505b5050505050915050919050565b6000546201000090046001600160a01b031633146122a457600080fd5b600855565b6000818152600f602052604090206004810154606091829182918291829182916001600160401b038111156122e0576122e0612ebd565b604051908082528060200260200182016040528015612309578160200160208202803683370190505b50965060005b600482015481101561236d57816004018181548110612330576123306134b0565b9060005260206000200180549050888281518110612350576123506134b0565b602090810291909101015280612365816134c6565b91505061230f565b50806006018054806020026020016040519081016040528092919081815260200182805480156123bc57602002820191906000526020600020905b8154815260200190600101908083116123a8575b505050505095508060070180548060200260200160405190810160405280929190818152602001828054801561241157602002820191906000526020600020905b8154815260200190600101908083116123fd575b5050505050945080600a0180548060200260200160405190810160405280929190818152602001828054801561246657602002820191906000526020600020905b815481526020019060010190808311612452575b5050505050935080600b018054806020026020016040519081016040528092919081815260200182805480156124bb57602002820191906000526020600020905b8154815260200190600101908083116124a7575b5050505050925080600c0180548060200260200160405190810160405280929190818152602001828054801561251057602002820191906000526020600020905b8154815260200190600101908083116124fc575b505050505091505091939550919395565b6000828152600f60205260408120600581018054606092849290918391908790811061254f5761254f6134b0565b9060005260206000209060030201905080600001549450816001015460016125779190613542565b6001600160401b0381111561258e5761258e612ebd565b6040519080825280602002602001820160405280156125b7578160200160208202803683370190505b50935060005b8260010154811161260a57600081815260018301602052604090205485518690839081106125ed576125ed6134b0565b602090810291909101015280612602816134c6565b9150506125bd565b506002015493969295505060ff90921692509050565b6000546201000090046001600160a01b0316331461263d57600080fd5b600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60125460405163f7434ea960e01b81526000916001600160a01b03169063f7434ea9906126989085906004016135f7565b60206040518083038186803b1580156126b057600080fd5b505afa1580156126c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e891906134e1565b92915050565b600a546000906001600160601b0384161061270b5750600061158f565b6001600160801b03821615806127575750816001600160801b0316600a846001600160601b031681548110612742576127426134b0565b90600052602060002090600b02016003015411155b6127635750600061158f565b6001600160a01b0384166000908152601160205260408120906127868686612c10565b604051637521ccb160e01b8152600b60048201526001600160601b03871660248201526044810182905290915060009073c7e3BF90299f6BD9FA7c3703837A9CAbB574363690637521ccb19060640160206040518083038186803b1580156127ed57600080fd5b505af4158015612801573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282591906134e1565b90506001600160801b038516158061283d5750600081115b80612849575082546004115b612859576000935050505061158f565b6000856001600160801b03168285600101546128759190613499565b61287f9190613542565b90506001600160801b038616158061291557506001546040516370a0823160e01b815282916001600160a01b0316906370a08231906128c2908c90600401612d97565b60206040518083038186803b1580156128da57600080fd5b505afa1580156128ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291291906134e1565b10155b61292657600094505050505061158f565b600184018190556001600160801b038616612a8b5760005b8454811015612a8557876001600160601b0316856000018281548110612966576129666134b0565b600091825260209091206002820401546001909116600c026101000a90046001600160601b03161415612a7357845485906129a390600190613499565b815481106129b3576129b36134b0565b9060005260206000209060029182820401919006600c029054906101000a90046001600160601b03168560000182815481106129f1576129f16134b0565b9060005260206000209060029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b0316021790555084600001805480612a3d57612a3d61360a565b60008281526020902060026000199092019182040180546001600160601b03600c60018516026101000a02191690559055612a85565b80612a7d816134c6565b91505061293e565b50612acb565b81612acb578354600180820186556000868152602090206002830401805491909216600c026101000a6001600160601b0381810219909216918a16021790555b60006001600160601b0388165b81612ba357604051631712e1c560e11b8152600b6004820152602481018290526001600160801b03891660448201526064810186905273c7e3BF90299f6BD9FA7c3703837A9CAbB574363690632e25c38a9060840160006040518083038186803b158015612b4557600080fd5b505af4158015612b59573d6000803e3d6000fd5b505050508060001415612b6f5760019150612ad8565b600a8181548110612b8257612b826134b0565b60009182526020909120600b90910201546001600160601b03169050612ad8565b604080516001600160601b038b1681526001600160801b038a1660208201529081018490526001600160a01b038b16907f8f753321c98641397daaca5e8abf8881fff1fd7a7bc229924a012e2cb61763d59060600160405180910390a25060019998505050505050505050565b600060405160005b6014811015612c33578481600c011a81830153600101612c18565b5060145b6020811015612c4f5783811a81830153600101612c37565b50519392505050565b6000806040835110612c9557505060208101516040820151600a546001600160601b03831610612c8757600091505b80612c90575060035b915091565b50600090506003915091565b60405180608001604052806004906020820280368337509192915050565b828054828255906000526020600020908101928215612cfa579160200282015b82811115612cfa578251825591602001919060010190612cdf565b50612d06929150612d37565b5090565b8260048101928215612cfa5791602002820182811115612cfa578251825591602001919060010190612cdf565b5b80821115612d065760008155600101612d38565b6001600160a01b03811681146119db57600080fd5b600060208284031215612d7357600080fd5b813561158f81612d4c565b600060208284031215612d9057600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60008060408385031215612dbe57600080fd5b50508035926020909101359150565b80356001600160601b0381168114612de457600080fd5b919050565b60008060408385031215612dfc57600080fd5b612e0583612dcd565b946020939093013593505050565b600060208284031215612e2557600080fd5b61158f82612dcd565b600081518084526020808501945080840160005b83811015612e5e57815187529582019590820190600101612e42565b509495945050505050565b60a081526000612e7c60a0830185612e2e565b905060208083018460005b6004811015612ea457815183529183019190830190600101612e87565b505050509392505050565b80151581146119db57600080fd5b634e487b7160e01b600052604160045260246000fd5b600082601f830112612ee457600080fd5b604051608081018181106001600160401b0382111715612f0657612f06612ebd565b604052806080840185811115612f1b57600080fd5b845b81811015612f35578035835260209283019201612f1d565b509195945050505050565b60008060008060008060008060008060006102208c8e031215612f6257600080fd5b8b35612f6d81612d4c565b9a5060208c0135612f7d81612d4c565b995060408c0135612f8d81612d4c565b985060608c0135975060808c0135965060a08c0135612fab81612eaf565b9550612fba8d60c08e01612ed3565b9450612fca8d6101408e01612ed3565b93506101c08c013592506101e08c0135612fe381612d4c565b91506102008c0135612ff481612d4c565b809150509295989b509295989b9093969950565b60008060006060848603121561301d57600080fd5b833561302881612d4c565b9250602084013561303881612d4c565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b6001600160601b03891681526001600160a01b03881660208201526040810187905261010081016005871061309657613096613049565b6060820196909652608081019490945260a084019290925260c0830152151560e0909101529392505050565b60008060a083850312156130d557600080fd5b6130de83612dcd565b91506130ed8460208501612ed3565b90509250929050565b600082601f83011261310757600080fd5b81356001600160401b038082111561312157613121612ebd565b604051601f8301601f19908116603f0116810190828211818310171561314957613149612ebd565b8160405283815286602085880101111561316257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561319757600080fd5b83356131a281612d4c565b92506020840135915060408401356001600160401b038111156131c457600080fd5b6131d0868287016130f6565b9150509250925092565b600080604083850312156131ed57600080fd5b6131f683612dcd565b915060208301356001600160801b038116811461321257600080fd5b809150509250929050565b60008060006060848603121561323257600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561325c57600080fd5b823561326781612d4c565b91506130ed60208401612dcd565b602081016003831061328957613289613049565b91905290565b600080604083850312156132a257600080fd5b8235915060208301356001600160401b038111156132bf57600080fd5b6132cb858286016130f6565b9150509250929050565b600080600080600080600080610160898b0312156132f257600080fd5b6132fb89612dcd565b9750602089013561330b81612eaf565b965060408901359550606089013594506080890135935060a089013592506133368a60c08b01612ed3565b915061014089013590509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b8181101561338e5783516001600160601b031683529284019291840191600101613369565b50909695505050505050565b60c0815260006133ad60c0830189612e2e565b82810360208401526133bf8189612e2e565b905082810360408401526133d38188612e2e565b905082810360608401526133e78187612e2e565b905082810360808401526133fb8186612e2e565b905082810360a084015261340f8185612e2e565b9998505050505050505050565b8381526060602082015260006134356060830185612e2e565b90508215156040830152949350505050565b60006020828403121561345957600080fd5b81356001600160401b0381111561346f57600080fd5b61347b848285016130f6565b949350505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156134ab576134ab613483565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156134da576134da613483565b5060010190565b6000602082840312156134f357600080fd5b5051919050565b60005b838110156135155781810151838201526020016134fd565b838111156117595750506000910152565b600082516135388184602087016134fa565b9190910192915050565b6000821982111561355557613555613483565b500190565b60006020828403121561356c57600080fd5b815161158f81612eaf565b60006001600160601b0380831681851680830382111561359957613599613483565b01949350505050565b600081518084526135ba8160208601602086016134fa565b601f01601f19169290920160200192915050565b8381526060602082015260006135e760608301856135a2565b9050826040830152949350505050565b60208152600061158f60208301846135a2565b634e487b7160e01b600052603160045260246000fdfea26469706673582212208c24f0dc5c862abcfbeb5d7abaf80f855b2bfba8e446fb9c2aa2b7b83edd554e64736f6c63430008090033", - "deployedBytecode": "0x6080604052600436106102df5760003560e01c80638ce7ff4a11610186578063c5e4ccc4116100d7578063e3b0073e11610085578063e3b0073e14610a4c578063e4c0aaf414610a7b578063eaff425a14610a9b578063f48c305414610ab0578063f66d685a14610ac4578063f7434ea914610ade578063fbf405b014610afe57600080fd5b8063c5e4ccc414610927578063ce9e77301461093d578063d4155d1f1461095d578063da682aeb1461098a578063dca5f6b0146109ae578063dd5e5cb5146109fa578063e3a96cbd14610a1a57600080fd5b8063b1c9fe6e11610134578063b1c9fe6e14610800578063b4a616081461082e578063b78a80ff14610843578063b888adfa146108d2578063c057eca7146108e8578063c108f3b4146108fe578063c13517e11461091457600080fd5b80638ce7ff4a146106f45780638d7c7daa1461074057806396d92a72146107605780639929057b146107805780639e72c153146107a0578063a2473cc1146107c0578063a57366e7146107e057600080fd5b806340026c87116102405780635e4a627d116101ee5780635e4a627d146106235780636a4f8f3914610639578063751accd0146106595780637a5de2a914610679578063823cfd7014610699578063840bc19c146106b957806385c855f3146106d457600080fd5b806340026c87146104be57806348b4e924146104ec5780634a3931491461050c578063564a565d1461053c57806357260364146105c357806359354c77146105e35780635bc24dd31461060357600080fd5b80631b92bbbe1161029d5780631b92bbbe146103bb5780631c3db16d146103d15780631f5a0dd2146103f15780632ea7b4d014610448578063311a6c561461045e5780633e1d09be1461047e5780633fc8cef31461049e57600080fd5b8062f5822c146102e4578063023d44df14610306578063034327441461032f57806303438616146103455780630c340a24146103725780630d44cf79146103a5575b600080fd5b3480156102f057600080fd5b506103046102ff366004612d61565b610b1e565b005b34801561031257600080fd5b5061031c60055481565b6040519081526020015b60405180910390f35b34801561033b57600080fd5b5061031c60045481565b34801561035157600080fd5b5061031c610360366004612d7e565b60146020526000908152604090205481565b34801561037e57600080fd5b50600054610398906201000090046001600160a01b031681565b6040516103269190612d97565b3480156103b157600080fd5b5061031c600e5481565b3480156103c757600080fd5b5061031c60085481565b3480156103dd57600080fd5b5061031c6103ec366004612d7e565b610b5d565b3480156103fd57600080fd5b5061041161040c366004612d7e565b610c0c565b604080516001600160601b0390971687529415156020870152938501929092526060840152608083015260a082015260c001610326565b34801561045457600080fd5b5061031c61271081565b34801561046a57600080fd5b50610304610479366004612dab565b610c60565b34801561048a57600080fd5b50610304610499366004612de9565b610e49565b3480156104aa57600080fd5b50601354610398906001600160a01b031681565b3480156104ca57600080fd5b506104de6104d9366004612e13565b611057565b604051610326929190612e69565b3480156104f857600080fd5b50610304610507366004612f40565b61111d565b34801561051857600080fd5b5061052c610527366004613008565b611497565b6040519015158152602001610326565b34801561054857600080fd5b506105af610557366004612d7e565b600f602052600090815260409020805460018201546002830154600384015460088501546009860154600d909601546001600160601b03861696600160601b9096046001600160a01b03169560ff9485169490911688565b60405161032698979695949392919061305f565b3480156105cf57600080fd5b506103046105de3660046130c2565b611596565b3480156105ef57600080fd5b506103046105fe366004612de9565b6115f4565b34801561060f57600080fd5b5061030461061e366004612de9565b611647565b34801561062f57600080fd5b5061031c60065481565b34801561064557600080fd5b50600254610398906001600160a01b031681565b34801561066557600080fd5b50610304610674366004613182565b61169a565b34801561068557600080fd5b50610304610694366004612d61565b61175f565b3480156106a557600080fd5b506103046106b4366004612d7e565b61179e565b3480156106c557600080fd5b5061031c6001600160ff1b0381565b3480156106e057600080fd5b506103046106ef3660046131da565b6117c0565b34801561070057600080fd5b5061071461070f36600461321d565b6117d8565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610326565b34801561074c57600080fd5b50601254610398906001600160a01b031681565b34801561076c57600080fd5b5061030461077b366004612d61565b611863565b34801561078c57600080fd5b5061030461079b366004612d7e565b6119de565b3480156107ac57600080fd5b506103046107bb366004612d61565b611b00565b3480156107cc57600080fd5b5061031c6107db366004613249565b611b3f565b3480156107ec57600080fd5b506103046107fb366004612de9565b611bed565b34801561080c57600080fd5b5060025461082190600160a01b900460ff1681565b6040516103269190613275565b34801561083a57600080fd5b5061031c600481565b34801561084f57600080fd5b5061089c61085e366004612d7e565b600c60205260009081526040902080546001909101546001600160a01b03821691600160a01b90046001600160601b0316906001600160801b031683565b604080516001600160a01b0390941684526001600160601b0390921660208401526001600160801b031690820152606001610326565b3480156108de57600080fd5b5061031c60035481565b3480156108f457600080fd5b5061031c60075481565b34801561090a57600080fd5b5061031c600d5481565b61031c61092236600461328f565b611c40565b34801561093357600080fd5b5061031c60105481565b34801561094957600080fd5b506103046109583660046132d5565b611f88565b34801561096957600080fd5b5061097d610978366004612d61565b6121e4565b604051610326919061334d565b34801561099657600080fd5b5061052c6109a5366004613008565b50600192915050565b3480156109ba57600080fd5b506109e56109c9366004612d61565b6011602052600090815260409020600181015460029091015482565b60408051928352602083019190915201610326565b348015610a0657600080fd5b50610304610a15366004612d7e565b612287565b348015610a2657600080fd5b50610a3a610a35366004612d7e565b6122a9565b6040516103269695949392919061339a565b348015610a5857600080fd5b50610a6c610a67366004612dab565b612521565b6040516103269392919061341c565b348015610a8757600080fd5b50610304610a96366004612d61565b612620565b348015610aa757600080fd5b5061031c600381565b61052c610abe366004612d61565b50600090565b348015610ad057600080fd5b5060095461052c9060ff1681565b348015610aea57600080fd5b5061031c610af9366004613447565b612667565b348015610b0a57600080fd5b50600154610398906001600160a01b031681565b6000546201000090046001600160a01b03163314610b3b57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600f602052604081206005810154610b8a576000838152601460205260409020549150610c06565b600581018054610b9c90600190613499565b81548110610bac57610bac6134b0565b600091825260209091206002600390920201015460ff16610c0057600581018054610bd990600190613499565b81548110610be957610be96134b0565b906000526020600020906003020160000154610c03565b60005b91505b50919050565b600a8181548110610c1c57600080fd5b60009182526020909120600b90910201805460028201546003830154600484015460058501546006909501546001600160601b03909416955060ff90921693909286565b6010548210610cb65760405162461bcd60e51b815260206004820152601a60248201527f4469737075746520494420646f6573206e6f742065786973742e00000000000060448201526064015b60405180910390fd5b6012546001600160a01b03163314610d105760405162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c792062652063616c6c656420627920676174657761790000006044820152606401610cad565b6000828152600f60205260409020600d81015460ff1615610d6e5760405162461bcd60e51b8152602060048201526018602482015277293ab634b7339030b63932b0b23c9032bc32b1baba32b21760411b6044820152606401610cad565b600d81018054600160ff19909116179055600083815260146020526040908190208390558154905163188d362b60e11b81526004810185905260248101849052600160601b9091046001600160a01b03169063311a6c5690604401600060405180830381600087803b158015610de357600080fd5b505af1158015610df7573d6000803e3d6000fd5b50508254604051858152869350600160601b9091046001600160a01b031691507f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a3505050565b6000546201000090046001600160a01b03163314610e6657600080fd5b6001600160601b0382161580610ed7575080600a80846001600160601b031681548110610e9557610e956134b0565b60009182526020909120600b909102015481546001600160601b03909116908110610ec257610ec26134b0565b90600052602060002090600b02016003015411155b610ee057600080fd5b60005b600a836001600160601b031681548110610eff57610eff6134b0565b90600052602060002090600b0201600101805490508110156110205781600a80856001600160601b031681548110610f3957610f396134b0565b90600052602060002090600b02016001018381548110610f5b57610f5b6134b0565b906000526020600020015481548110610f7657610f766134b0565b90600052602060002090600b020160030154101561100e5760405162461bcd60e51b815260206004820152604960248201527f4120737562636f7572742063616e6e6f742062652074686520706172656e742060448201527f6f66206120737562636f75727420776974682061206c6f776572206d696e696d6064820152683ab69039ba30b5b29760b91b608482015260a401610cad565b80611018816134c6565b915050610ee3565b5080600a836001600160601b03168154811061103e5761103e6134b0565b90600052602060002090600b0201600301819055505050565b6060611061612ca1565b6000600a846001600160601b03168154811061107f5761107f6134b0565b90600052602060002090600b02019050806001018054806020026020016040519081016040528092919081815260200182805480156110dd57602002820191906000526020600020905b8154815260200190600101908083116110c9575b505060408051608081019182905294975060078601935060049250905082845b8154815260200190600101908083116110fd575050505050915050915091565b600054610100900460ff161580801561113d5750600054600160ff909116105b806111575750303b158015611157575060005460ff166001145b6111ba5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cad565b6000805460ff1916600117905580156111dd576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038f81169190910291909117909155600180546001600160a01b0319168d83161781556002805460078d905560088c90556001600160a81b031916928d1692909217909155426003556009805460ff19169091179055600d5461125b576001600d555b601280546001600160a01b038086166001600160a01b0319928316179092556013805492851692909116919091179055600a5461144357604080516101008101825260008082528251818152602080820185528084019182528b1515848601528a516060808601919091528b8201516080860152948b015160a0850152938a015160c084015260e08301899052600a8054600181018255925282517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8600b90930292830180546001600160601b0319166001600160601b039092169190911781559051805193949193611375937fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a901929190910190612cbf565b50604082015160028201805460ff191691151591909117905560608201516003820155608082015160048083019190915560a0830151600583015560c0830151600683015560e08301516113ce91600784019190612d0a565b505060405163483abc4f60e11b8152600b6004820152600060248201526044810186905273__$9b1aa2a5defb7a13dc220b13d2e6a83a6b$__9150639075789e9060640160006040518083038186803b15801561142a57600080fd5b505af415801561143e573d6000803e3d6000fd5b505050505b8015611489576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60095460009060ff161561158b576001546040516370a0823160e01b815260009184916001600160a01b03909116906370a08231906114da908990600401612d97565b60206040518083038186803b1580156114f257600080fd5b505afa158015611506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152a91906134e1565b6115349190613499565b6001600160a01b03861660009081526011602052604090206001015490915081108061157a57506001600160a01b03851660009081526011602052604090206002015481105b1561158957600091505061158f565b505b5060015b9392505050565b6000546201000090046001600160a01b031633146115b357600080fd5b80600a836001600160601b0316815481106115d0576115d06134b0565b90600052602060002090600b02016007019060046115ef929190612d0a565b505050565b6000546201000090046001600160a01b0316331461161157600080fd5b80600a836001600160601b03168154811061162e5761162e6134b0565b90600052602060002090600b0201600501819055505050565b6000546201000090046001600160a01b0316331461166457600080fd5b80600a836001600160601b031681548110611681576116816134b0565b90600052602060002090600b0201600401819055505050565b6000546201000090046001600160a01b031633146116b757600080fd5b6000836001600160a01b031683836040516116d29190613526565b60006040518083038185875af1925050503d806000811461170f576040519150601f19603f3d011682016040523d82523d6000602084013e611714565b606091505b50509050806117595760405162461bcd60e51b8152602060048201526011602482015270155b9cdd58d8d95cdcd99d5b0818d85b1b607a1b6044820152606401610cad565b50505050565b6000546201000090046001600160a01b0316331461177c57600080fd5b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546201000090046001600160a01b031633146117bb57600080fd5b600755565b6117cb3383836126ee565b6117d457600080fd5b5050565b6000806000806000600f60008981526020019081526020016000206004018781548110611807576118076134b0565b906000526020600020018681548110611822576118226134b0565b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169b909a5091985060ff169650945050505050565b6000546201000090046001600160a01b0316331461188057600080fd5b600280546001600160a01b0319166001600160a01b038316179055600160028054600160a01b900460ff16908111156118bb576118bb613049565b14156119db57600260009054906101000a90046001600160a01b03166001600160a01b0316631c77c58c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561190f57600080fd5b505afa158015611923573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194791906134e1565b600260009054906101000a90046001600160a01b03166001600160a01b03166378ab865d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561199557600080fd5b505afa1580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cd91906134e1565b6119d79190613542565b6005555b50565b60008060028054600160a01b900460ff16908111156119ff576119ff613049565b14611a0957600080fd5b6000600e54600184600d54611a1e9190613542565b611a289190613499565b11611a335782611a4e565b600d54600e54611a439190613499565b611a4e906001613542565b9050600081600d54611a609190613542565b9050600d54811015611a7157600080fd5b600d545b81811015611af7576000818152600c6020526040902080546001820154611ac1916001600160a01b03811691600160a01b9091046001600160601b0316906001600160801b03166126ee565b50506000818152600c6020526040812090815560010180546001600160801b031916905580611aef816134c6565b915050611a75565b50600d55505050565b6000546201000090046001600160a01b03163314611b1d57600080fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600073__$9b1aa2a5defb7a13dc220b13d2e6a83a6b$__637521ccb1600b6001600160601b038516611b718787612c10565b6040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260640160206040518083038186803b158015611bb557600080fd5b505af4158015611bc9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158f91906134e1565b6000546201000090046001600160a01b03163314611c0a57600080fd5b80600a836001600160601b031681548110611c2757611c276134b0565b90600052602060002090600b0201600601819055505050565b60003415611c905760405162461bcd60e51b815260206004820152601b60248201527f466565732073686f756c64206265207061696420696e205745544800000000006044820152606401610cad565b6000611c9b83612667565b6013546040516323b872dd60e01b8152336004820152306024820152604481018390529192506001600160a01b0316906323b872dd90606401602060405180830381600087803b158015611cee57600080fd5b505af1158015611d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d26919061355a565b611d725760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f756768205745544820666f72206172626974726174696f6e006044820152606401610cad565b60108054906000611d82836134c6565b909155506000818152600f6020526040812080546001600160601b031633600160601b0217815591935080611db686612c58565b90925090506000611dc8836001613577565b604080516001600160601b03929092166020830152810183905260600160408051808303601f190181529082905260135460125463a9059cbb60e01b84526001600160a01b03908116600485015260248401899052919350169063a9059cbb90604401602060405180830381600087803b158015611e4557600080fd5b505af1158015611e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7d919061355a565b611ec95760405162461bcd60e51b815260206004820152601e60248201527f466565207472616e7366657220746f2067617465776179206661696c656400006044820152606401610cad565b60125460405163979f8e6560e01b81526001600160a01b039091169063979f8e6590611efd908b9085908a906004016135ce565b602060405180830381600087803b158015611f1757600080fd5b505af1158015611f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4f91906134e1565b50604051339087907f141dfc18aa6a56fc816f44f0e9e2f1ebc92b15ab167770e17db5b084c10ed99590600090a3505050505092915050565b6000546201000090046001600160a01b03163314611fa557600080fd5b85600a896001600160601b031681548110611fc257611fc26134b0565b90600052602060002090600b02016003015411156120585760405162461bcd60e51b815260206004820152604760248201527f4120737562636f7572742063616e6e6f742062652061206368696c64206f662060448201527f6120737562636f7572742077697468206120686967686572206d696e696d756d6064820152661039ba30b5b29760c91b608482015260a401610cad565b600a805460018101825560009182527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8600b82020180546001600160601b0319166001600160601b038c1617815590916040519080825280602002602001820160405280156120d1578160200160208202803683370190505b5080516120e8916001840191602090910190612cbf565b5060028101805460ff19168a151517905560038101889055600480820188905560058201879055600682018690556121269060078301908690612d0a565b5060405163483abc4f60e11b8152600b6004820152602481018390526044810184905273__$9b1aa2a5defb7a13dc220b13d2e6a83a6b$__90639075789e9060640160006040518083038186803b15801561218057600080fd5b505af4158015612194573d6000803e3d6000fd5b50505050600a8a6001600160601b0316815481106121b4576121b46134b0565b600091825260208083206001600b9093020182018054928301815583529091200191909155505050505050505050565b6001600160a01b0381166000908152601160209081526040918290208054835181840281018401909452808452606093919283919083018282801561227a57602002820191906000526020600020906000905b82829054906101000a90046001600160601b03166001600160601b0316815260200190600c0190602082600b010492830192600103820291508084116122375790505b5050505050915050919050565b6000546201000090046001600160a01b031633146122a457600080fd5b600855565b6000818152600f602052604090206004810154606091829182918291829182916001600160401b038111156122e0576122e0612ebd565b604051908082528060200260200182016040528015612309578160200160208202803683370190505b50965060005b600482015481101561236d57816004018181548110612330576123306134b0565b9060005260206000200180549050888281518110612350576123506134b0565b602090810291909101015280612365816134c6565b91505061230f565b50806006018054806020026020016040519081016040528092919081815260200182805480156123bc57602002820191906000526020600020905b8154815260200190600101908083116123a8575b505050505095508060070180548060200260200160405190810160405280929190818152602001828054801561241157602002820191906000526020600020905b8154815260200190600101908083116123fd575b5050505050945080600a0180548060200260200160405190810160405280929190818152602001828054801561246657602002820191906000526020600020905b815481526020019060010190808311612452575b5050505050935080600b018054806020026020016040519081016040528092919081815260200182805480156124bb57602002820191906000526020600020905b8154815260200190600101908083116124a7575b5050505050925080600c0180548060200260200160405190810160405280929190818152602001828054801561251057602002820191906000526020600020905b8154815260200190600101908083116124fc575b505050505091505091939550919395565b6000828152600f60205260408120600581018054606092849290918391908790811061254f5761254f6134b0565b9060005260206000209060030201905080600001549450816001015460016125779190613542565b6001600160401b0381111561258e5761258e612ebd565b6040519080825280602002602001820160405280156125b7578160200160208202803683370190505b50935060005b8260010154811161260a57600081815260018301602052604090205485518690839081106125ed576125ed6134b0565b602090810291909101015280612602816134c6565b9150506125bd565b506002015493969295505060ff90921692509050565b6000546201000090046001600160a01b0316331461263d57600080fd5b600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60125460405163f7434ea960e01b81526000916001600160a01b03169063f7434ea9906126989085906004016135f7565b60206040518083038186803b1580156126b057600080fd5b505afa1580156126c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e891906134e1565b92915050565b600a546000906001600160601b0384161061270b5750600061158f565b6001600160801b03821615806127575750816001600160801b0316600a846001600160601b031681548110612742576127426134b0565b90600052602060002090600b02016003015411155b6127635750600061158f565b6001600160a01b0384166000908152601160205260408120906127868686612c10565b604051637521ccb160e01b8152600b60048201526001600160601b03871660248201526044810182905290915060009073__$9b1aa2a5defb7a13dc220b13d2e6a83a6b$__90637521ccb19060640160206040518083038186803b1580156127ed57600080fd5b505af4158015612801573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282591906134e1565b90506001600160801b038516158061283d5750600081115b80612849575082546004115b612859576000935050505061158f565b6000856001600160801b03168285600101546128759190613499565b61287f9190613542565b90506001600160801b038616158061291557506001546040516370a0823160e01b815282916001600160a01b0316906370a08231906128c2908c90600401612d97565b60206040518083038186803b1580156128da57600080fd5b505afa1580156128ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291291906134e1565b10155b61292657600094505050505061158f565b600184018190556001600160801b038616612a8b5760005b8454811015612a8557876001600160601b0316856000018281548110612966576129666134b0565b600091825260209091206002820401546001909116600c026101000a90046001600160601b03161415612a7357845485906129a390600190613499565b815481106129b3576129b36134b0565b9060005260206000209060029182820401919006600c029054906101000a90046001600160601b03168560000182815481106129f1576129f16134b0565b9060005260206000209060029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b0316021790555084600001805480612a3d57612a3d61360a565b60008281526020902060026000199092019182040180546001600160601b03600c60018516026101000a02191690559055612a85565b80612a7d816134c6565b91505061293e565b50612acb565b81612acb578354600180820186556000868152602090206002830401805491909216600c026101000a6001600160601b0381810219909216918a16021790555b60006001600160601b0388165b81612ba357604051631712e1c560e11b8152600b6004820152602481018290526001600160801b03891660448201526064810186905273__$9b1aa2a5defb7a13dc220b13d2e6a83a6b$__90632e25c38a9060840160006040518083038186803b158015612b4557600080fd5b505af4158015612b59573d6000803e3d6000fd5b505050508060001415612b6f5760019150612ad8565b600a8181548110612b8257612b826134b0565b60009182526020909120600b90910201546001600160601b03169050612ad8565b604080516001600160601b038b1681526001600160801b038a1660208201529081018490526001600160a01b038b16907f8f753321c98641397daaca5e8abf8881fff1fd7a7bc229924a012e2cb61763d59060600160405180910390a25060019998505050505050505050565b600060405160005b6014811015612c33578481600c011a81830153600101612c18565b5060145b6020811015612c4f5783811a81830153600101612c37565b50519392505050565b6000806040835110612c9557505060208101516040820151600a546001600160601b03831610612c8757600091505b80612c90575060035b915091565b50600090506003915091565b60405180608001604052806004906020820280368337509192915050565b828054828255906000526020600020908101928215612cfa579160200282015b82811115612cfa578251825591602001919060010190612cdf565b50612d06929150612d37565b5090565b8260048101928215612cfa5791602002820182811115612cfa578251825591602001919060010190612cdf565b5b80821115612d065760008155600101612d38565b6001600160a01b03811681146119db57600080fd5b600060208284031215612d7357600080fd5b813561158f81612d4c565b600060208284031215612d9057600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60008060408385031215612dbe57600080fd5b50508035926020909101359150565b80356001600160601b0381168114612de457600080fd5b919050565b60008060408385031215612dfc57600080fd5b612e0583612dcd565b946020939093013593505050565b600060208284031215612e2557600080fd5b61158f82612dcd565b600081518084526020808501945080840160005b83811015612e5e57815187529582019590820190600101612e42565b509495945050505050565b60a081526000612e7c60a0830185612e2e565b905060208083018460005b6004811015612ea457815183529183019190830190600101612e87565b505050509392505050565b80151581146119db57600080fd5b634e487b7160e01b600052604160045260246000fd5b600082601f830112612ee457600080fd5b604051608081018181106001600160401b0382111715612f0657612f06612ebd565b604052806080840185811115612f1b57600080fd5b845b81811015612f35578035835260209283019201612f1d565b509195945050505050565b60008060008060008060008060008060006102208c8e031215612f6257600080fd5b8b35612f6d81612d4c565b9a5060208c0135612f7d81612d4c565b995060408c0135612f8d81612d4c565b985060608c0135975060808c0135965060a08c0135612fab81612eaf565b9550612fba8d60c08e01612ed3565b9450612fca8d6101408e01612ed3565b93506101c08c013592506101e08c0135612fe381612d4c565b91506102008c0135612ff481612d4c565b809150509295989b509295989b9093969950565b60008060006060848603121561301d57600080fd5b833561302881612d4c565b9250602084013561303881612d4c565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b6001600160601b03891681526001600160a01b03881660208201526040810187905261010081016005871061309657613096613049565b6060820196909652608081019490945260a084019290925260c0830152151560e0909101529392505050565b60008060a083850312156130d557600080fd5b6130de83612dcd565b91506130ed8460208501612ed3565b90509250929050565b600082601f83011261310757600080fd5b81356001600160401b038082111561312157613121612ebd565b604051601f8301601f19908116603f0116810190828211818310171561314957613149612ebd565b8160405283815286602085880101111561316257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561319757600080fd5b83356131a281612d4c565b92506020840135915060408401356001600160401b038111156131c457600080fd5b6131d0868287016130f6565b9150509250925092565b600080604083850312156131ed57600080fd5b6131f683612dcd565b915060208301356001600160801b038116811461321257600080fd5b809150509250929050565b60008060006060848603121561323257600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561325c57600080fd5b823561326781612d4c565b91506130ed60208401612dcd565b602081016003831061328957613289613049565b91905290565b600080604083850312156132a257600080fd5b8235915060208301356001600160401b038111156132bf57600080fd5b6132cb858286016130f6565b9150509250929050565b600080600080600080600080610160898b0312156132f257600080fd5b6132fb89612dcd565b9750602089013561330b81612eaf565b965060408901359550606089013594506080890135935060a089013592506133368a60c08b01612ed3565b915061014089013590509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b8181101561338e5783516001600160601b031683529284019291840191600101613369565b50909695505050505050565b60c0815260006133ad60c0830189612e2e565b82810360208401526133bf8189612e2e565b905082810360408401526133d38188612e2e565b905082810360608401526133e78187612e2e565b905082810360808401526133fb8186612e2e565b905082810360a084015261340f8185612e2e565b9998505050505050505050565b8381526060602082015260006134356060830185612e2e565b90508215156040830152949350505050565b60006020828403121561345957600080fd5b81356001600160401b0381111561346f57600080fd5b61347b848285016130f6565b949350505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156134ab576134ab613483565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156134da576134da613483565b5060010190565b6000602082840312156134f357600080fd5b5051919050565b60005b838110156135155781810151838201526020016134fd565b838111156117595750506000910152565b600082516135388184602087016134fa565b9190910192915050565b6000821982111561355557613555613483565b500190565b60006020828403121561356c57600080fd5b815161158f81612eaf565b60006001600160601b0380831681851680830382111561359957613599613483565b01949350505050565b600081518084526135ba8160208601602086016134fa565b601f01601f19169290920160200192915050565b8381526060602082015260006135e760608301856135a2565b9050826040830152949350505050565b60208152600061158f60208301846135a2565b634e487b7160e01b600052603160045260246000fdfea26469706673582212208c24f0dc5c862abcfbeb5d7abaf80f855b2bfba8e446fb9c2aa2b7b83edd554e64736f6c63430008090033", - "libraries": { - "SortitionSumTreeFactory": "0xc7e3BF90299f6BD9FA7c3703837A9CAbB5743636" - }, - "devdoc": { - "details": "This contract is an adaption of Mainnet's KlerosLiquid (https://github.com/kleros/kleros/blob/69cfbfb2128c29f1625b3a99a3183540772fda08/contracts/kleros/KlerosLiquid.sol) for xDai chain. Notice that variables referring to ETH values in this contract, will hold the native token values of the chain on which xKlerosLiquid is deployed. When this contract gets deployed on xDai chain, ETH variables will hold xDai values.", - "events": { - "Draw(address,uint256,uint256,uint256)": { - "details": "Emitted when a juror is drawn.", - "params": { - "_address": "The drawn address.", - "_appeal": "The appeal the draw is for. 0 is for the first round.", - "_disputeID": "The ID of the dispute.", - "_voteID": "The vote ID." - } - }, - "NewPeriod(uint256,uint8)": { - "details": "Emitted when a dispute passes to a new period.", - "params": { - "_disputeID": "The ID of the dispute.", - "_period": "The new period." - } - }, - "NewPhase(uint8)": { - "details": "Emitted when we pass to a new phase.", - "params": { - "_phase": "The new phase." - } - }, - "StakeSet(address,uint256,uint128,uint256)": { - "details": "Emitted when a juror's stake is set.", - "params": { - "_address": "The address of the juror.", - "_newTotalStake": "The new total stake.", - "_stake": "The new stake.", - "_subcourtID": "The ID of the subcourt at the end of the stake path." - } - }, - "TokenAndETHShift(address,uint256,int256,int256)": { - "details": "Emitted when a juror wins or loses tokens and ETH from a dispute.", - "params": { - "_ETHAmount": "The amount of ETH won or lost.", - "_address": "The juror affected.", - "_disputeID": "The ID of the dispute.", - "_tokenAmount": "The amount of tokens won or lost." - } - } - }, - "kind": "dev", - "methods": { - "arbitrationCost(bytes)": { - "details": "Gets the cost of arbitration in a specified subcourt.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the subcourt to create the dispute in (first 32 bytes) and the minimum number of jurors required (next 32 bytes)." - }, - "returns": { - "cost": "The cost." - } - }, - "changeForeignGateway(address)": { - "details": "Changes the `foreignGateway` storage variable.", - "params": { - "_foreignGateway": "The new value for the `foreignGateway` storage variable." - } - }, - "changeGovernor(address)": { - "details": "Changes the `governor` storage variable.", - "params": { - "_governor": "The new value for the `governor` storage variable." - } - }, - "changeMaxDrawingTime(uint256)": { - "details": "Changes the `maxDrawingTime` storage variable.", - "params": { - "_maxDrawingTime": "The new value for the `maxDrawingTime` storage variable." - } - }, - "changeMinStakingTime(uint256)": { - "details": "Changes the `minStakingTime` storage variable.", - "params": { - "_minStakingTime": "The new value for the `minStakingTime` storage variable." - } - }, - "changePinakion(address)": { - "details": "Changes the `pinakion` storage variable.", - "params": { - "_pinakion": "The new value for the `pinakion` storage variable." - } - }, - "changeRNGenerator(address)": { - "details": "Changes the `RNGenerator` storage variable.", - "params": { - "_RNGenerator": "The new value for the `RNGenerator` storage variable." - } - }, - "changeSubcourtAlpha(uint96,uint256)": { - "details": "Changes the `alpha` property value of a specified subcourt.", - "params": { - "_alpha": "The new value for the `alpha` property value.", - "_subcourtID": "The ID of the subcourt." - } - }, - "changeSubcourtJurorFee(uint96,uint256)": { - "details": "Changes the `feeForJuror` property value of a specified subcourt.", - "params": { - "_feeForJuror": "The new value for the `feeForJuror` property value.", - "_subcourtID": "The ID of the subcourt." - } - }, - "changeSubcourtJurorsForJump(uint96,uint256)": { - "details": "Changes the `jurorsForCourtJump` property value of a specified subcourt.", - "params": { - "_jurorsForCourtJump": "The new value for the `jurorsForCourtJump` property value.", - "_subcourtID": "The ID of the subcourt." - } - }, - "changeSubcourtMinStake(uint96,uint256)": { - "details": "Changes the `minStake` property value of a specified subcourt. Don't set to a value lower than its parent's `minStake` property value.", - "params": { - "_minStake": "The new value for the `minStake` property value.", - "_subcourtID": "The ID of the subcourt." - } - }, - "changeSubcourtTimesPerPeriod(uint96,uint256[4])": { - "details": "Changes the `timesPerPeriod` property value of a specified subcourt.", - "params": { - "_subcourtID": "The ID of the subcourt.", - "_timesPerPeriod": "The new value for the `timesPerPeriod` property value." - } - }, - "changeWethAddress(address)": { - "details": "Changes the `weth` storage variable.", - "params": { - "_weth": "The new value for the `weth` storage variable." - } - }, - "createDispute(uint256,bytes)": { - "details": "Creates a dispute. Must be called by the arbitrable contract.", - "params": { - "_extraData": "Additional info about the dispute to be created. We use it to pass the ID of the subcourt to create the dispute in (first 32 bytes) and the minimum number of jurors required (next 32 bytes).", - "_numberOfChoices": "Number of choices to choose from in the dispute to be created." - }, - "returns": { - "disputeID": "The ID of the created dispute." - } - }, - "createSubcourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256)": { - "details": "Creates a subcourt under a specified parent court.", - "params": { - "_alpha": "The `alpha` property value of the subcourt.", - "_feeForJuror": "The `feeForJuror` property value of the subcourt.", - "_hiddenVotes": "The `hiddenVotes` property value of the subcourt.", - "_jurorsForCourtJump": "The `jurorsForCourtJump` property value of the subcourt.", - "_minStake": "The `minStake` property value of the subcourt.", - "_parent": "The `parent` property value of the subcourt.", - "_sortitionSumTreeK": "The number of children per node of the subcourt's sortition sum tree.", - "_timesPerPeriod": "The `timesPerPeriod` property value of the subcourt." - } - }, - "currentRuling(uint256)": { - "details": "Gets the current ruling of a specified dispute.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "ruling": "The current ruling." - } - }, - "executeDelayedSetStakes(uint256)": { - "details": "Executes the next delayed set stakes. `O(n)` where `n` is the number of iterations to run.", - "params": { - "_iterations": "The number of delayed set stakes to execute." - } - }, - "executeGovernorProposal(address,uint256,bytes)": { - "details": "Lets the governor call anything on behalf of the contract.", - "params": { - "_amount": "The value sent with the call.", - "_data": "The data sent with the call.", - "_destination": "The destination of the call." - } - }, - "getDispute(uint256)": { - "details": "Gets a specified dispute's non primitive properties.", - "params": { - "_disputeID": "The ID of the dispute." - }, - "returns": { - "penaltiesInEachRound": "The dispute's amount of tokens collected from penalties in each round. `O(a)` where `a` is the number of appeals of the dispute.", - "repartitionsInEachRound": "The dispute's counter of vote reward repartitions made in each round.", - "tokensAtStakePerJuror": "The dispute's required tokens at stake per Juror.", - "totalFeesForJurors": "The dispute's total fees for Jurors.", - "votesInEachRound": "The dispute's counter of votes made in each round.", - "votesLengths": "The dispute's vote length." - } - }, - "getJuror(address)": { - "details": "Gets a specified juror's non primitive properties.", - "params": { - "_account": "The address of the juror." - }, - "returns": { - "subcourtIDs": "The juror's IDs of subcourts where the juror has stake path." - } - }, - "getSubcourt(uint96)": { - "details": "Gets a specified subcourt's non primitive properties.", - "params": { - "_subcourtID": "The ID of the subcourt." - }, - "returns": { - "children": "The subcourt's child court list.", - "timesPerPeriod": "The subcourt's time per period." - } - }, - "getVote(uint256,uint256,uint256)": { - "details": "Gets a specified vote for a specified appeal in a specified dispute.", - "params": { - "_appeal": "The appeal.", - "_disputeID": "The ID of the dispute.", - "_voteID": "The ID of the vote." - }, - "returns": { - "account": "The account for vote.", - "choice": " The choice for vote.", - "commit": " The commit for vote.", - "voted": "True if the account voted, False otherwise." - } - }, - "getVoteCounter(uint256,uint256)": { - "details": "Gets the vote counter for a specified appeal in a specified dispute. Note: This function is only to be used by the interface and it won't work if the number of choices is too high.", - "params": { - "_appeal": "The appeal.", - "_disputeID": "The ID of the dispute." - }, - "returns": { - "counts": "The count.", - "tied": "Whether the vote tied. `O(n)` where `n` is the number of choices of the dispute.", - "winningChoice": "The winning choice." - } - }, - "initialize(address,address,address,uint256,uint256,bool,uint256[4],uint256[4],uint256,address,address)": { - "details": "Constructs the KlerosLiquid contract.", - "params": { - "_RNGenerator": "The address of the random number generator contract.", - "_courtParameters": "MinStake, alpha, feeForJuror and jurorsForCourtJump respectively.", - "_foreignGateway": "Foreign gateway on xDai.", - "_governor": "The governor's address.", - "_hiddenVotes": "The `hiddenVotes` property value of the general court.", - "_maxDrawingTime": "The maximum time that the drawing phase should last.", - "_minStakingTime": "The minimum time that the staking phase should last.", - "_pinakion": "The address of the token contract.", - "_sortitionSumTreeK": "The number of children per node of the general court's sortition sum tree.", - "_timesPerPeriod": "The `timesPerPeriod` property value of the general court.", - "_weth": "Weth contract." - } - }, - "onApprove(address,address,uint256)": { - "details": "Notifies the controller about an approval allowing the controller to react if desired.", - "params": { - "_amount": "The amount in the `approve()` call.", - "_owner": "The address that calls `approve()`.", - "_spender": "The spender in the `approve()` call." - }, - "returns": { - "allowed": "Whether the operation should be allowed or not." - } - }, - "onTransfer(address,address,uint256)": { - "details": "Notifies the controller about a token transfer allowing the controller to react if desired.", - "params": { - "_amount": "The amount of the transfer.", - "_from": "The origin of the transfer.", - "_to": "The destination of the transfer." - }, - "returns": { - "allowed": "Whether the operation should be allowed or not." - } - }, - "proxyPayment(address)": { - "details": "DEPRECATED. Called when `_owner` sends ETH to the Wrapped Token contract.", - "params": { - "_owner": "The address that sent the ETH to create tokens." - }, - "returns": { - "allowed": "Whether the operation should be allowed or not." - } - }, - "rule(uint256,uint256)": { - "details": "Receive the ruling from foreign gateway which technically is an arbitrator of this contract.", - "params": { - "_disputeID": "ID of the dispute.", - "_ruling": "Ruling given by V2 court and relayed by foreign gateway." - } - }, - "setStake(uint96,uint128)": { - "details": "Sets the caller's stake in a subcourt.", - "params": { - "_stake": "The new stake.", - "_subcourtID": "The ID of the subcourt." - } - }, - "stakeOf(address,uint96)": { - "details": "Gets the stake of a specified juror in a specified subcourt.", - "params": { - "_account": "The address of the juror.", - "_subcourtID": "The ID of the subcourt." - }, - "returns": { - "stake": "The stake." - } - } - }, - "title": "xKlerosLiquidV2", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 143, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8" - }, - { - "astId": 146, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 2130, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "governor", - "offset": 2, - "slot": "0", - "type": "t_address" - }, - { - "astId": 2133, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "pinakion", - "offset": 0, - "slot": "1", - "type": "t_contract(WrappedPinakion)1864" - }, - { - "astId": 2136, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "RNGenerator", - "offset": 0, - "slot": "2", - "type": "t_contract(IRandomAuRa)1919" - }, - { - "astId": 2139, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "phase", - "offset": 20, - "slot": "2", - "type": "t_enum(Phase)1960" - }, - { - "astId": 2141, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "lastPhaseChange", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 2143, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "disputesWithoutJurors", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 2145, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "RNBlock", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 2147, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "RN", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 2149, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "minStakingTime", - "offset": 0, - "slot": "7", - "type": "t_uint256" - }, - { - "astId": 2151, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "maxDrawingTime", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 2153, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "lockInsolventTransfers", - "offset": 0, - "slot": "9", - "type": "t_bool" - }, - { - "astId": 2157, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "courts", - "offset": 0, - "slot": "10", - "type": "t_array(t_struct(Court)1986_storage)dyn_storage" - }, - { - "astId": 2164, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "sortitionSumTrees", - "offset": 0, - "slot": "11", - "type": "t_struct(SortitionSumTrees)3785_storage" - }, - { - "astId": 2169, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "delayedSetStakes", - "offset": 0, - "slot": "12", - "type": "t_mapping(t_uint256,t_struct(DelayedSetStake)1993_storage)" - }, - { - "astId": 2171, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "nextDelayedSetStake", - "offset": 0, - "slot": "13", - "type": "t_uint256" - }, - { - "astId": 2173, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "lastDelayedSetStake", - "offset": 0, - "slot": "14", - "type": "t_uint256" - }, - { - "astId": 2178, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "disputes", - "offset": 0, - "slot": "15", - "type": "t_mapping(t_uint256,t_struct(Dispute)2054_storage)" - }, - { - "astId": 2180, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "totalDisputes", - "offset": 0, - "slot": "16", - "type": "t_uint256" - }, - { - "astId": 2185, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "jurors", - "offset": 0, - "slot": "17", - "type": "t_mapping(t_address,t_struct(Juror)2062_storage)" - }, - { - "astId": 2188, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "foreignGateway", - "offset": 0, - "slot": "18", - "type": "t_contract(IForeignGateway)1133" - }, - { - "astId": 2191, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "weth", - "offset": 0, - "slot": "19", - "type": "t_contract(IERC20)383" - }, - { - "astId": 2195, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "disputesRuling", - "offset": 0, - "slot": "20", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_array(t_struct(Vote)2002_storage)dyn_storage)dyn_storage": { - "base": "t_array(t_struct(Vote)2002_storage)dyn_storage", - "encoding": "dynamic_array", - "label": "struct xKlerosLiquidV2.Vote[][]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Court)1986_storage)dyn_storage": { - "base": "t_struct(Court)1986_storage", - "encoding": "dynamic_array", - "label": "struct xKlerosLiquidV2.Court[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Vote)2002_storage)dyn_storage": { - "base": "t_struct(Vote)2002_storage", - "encoding": "dynamic_array", - "label": "struct xKlerosLiquidV2.Vote[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(VoteCounter)2011_storage)dyn_storage": { - "base": "t_struct(VoteCounter)2011_storage", - "encoding": "dynamic_array", - "label": "struct xKlerosLiquidV2.VoteCounter[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)4_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[4]", - "numberOfBytes": "128" - }, - "t_array(t_uint256)dyn_storage": { - "base": "t_uint256", - "encoding": "dynamic_array", - "label": "uint256[]", - "numberOfBytes": "32" - }, - "t_array(t_uint96)dyn_storage": { - "base": "t_uint96", - "encoding": "dynamic_array", - "label": "uint96[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_contract(IArbitrable)1048": { - "encoding": "inplace", - "label": "contract IArbitrable", - "numberOfBytes": "20" - }, - "t_contract(IERC20)383": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_contract(IForeignGateway)1133": { - "encoding": "inplace", - "label": "contract IForeignGateway", - "numberOfBytes": "20" - }, - "t_contract(IRandomAuRa)1919": { - "encoding": "inplace", - "label": "contract IRandomAuRa", - "numberOfBytes": "20" - }, - "t_contract(WrappedPinakion)1864": { - "encoding": "inplace", - "label": "contract WrappedPinakion", - "numberOfBytes": "20" - }, - "t_enum(Period)1966": { - "encoding": "inplace", - "label": "enum xKlerosLiquidV2.Period", - "numberOfBytes": "1" - }, - "t_enum(Phase)1960": { - "encoding": "inplace", - "label": "enum xKlerosLiquidV2.Phase", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_struct(Juror)2062_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct xKlerosLiquidV2.Juror)", - "numberOfBytes": "32", - "value": "t_struct(Juror)2062_storage" - }, - "t_mapping(t_bytes32,t_struct(SortitionSumTree)3779_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct SortitionSumTreeFactory.SortitionSumTree)", - "numberOfBytes": "32", - "value": "t_struct(SortitionSumTree)3779_storage" - }, - "t_mapping(t_bytes32,t_uint256)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_uint256,t_bytes32)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => bytes32)", - "numberOfBytes": "32", - "value": "t_bytes32" - }, - "t_mapping(t_uint256,t_struct(DelayedSetStake)1993_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => struct xKlerosLiquidV2.DelayedSetStake)", - "numberOfBytes": "32", - "value": "t_struct(DelayedSetStake)1993_storage" - }, - "t_mapping(t_uint256,t_struct(Dispute)2054_storage)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => struct xKlerosLiquidV2.Dispute)", - "numberOfBytes": "32", - "value": "t_struct(Dispute)2054_storage" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Court)1986_storage": { - "encoding": "inplace", - "label": "struct xKlerosLiquidV2.Court", - "members": [ - { - "astId": 1968, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "parent", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 1971, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "children", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 1973, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "hiddenVotes", - "offset": 0, - "slot": "2", - "type": "t_bool" - }, - { - "astId": 1975, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "minStake", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 1977, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "alpha", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 1979, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "feeForJuror", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 1981, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "jurorsForCourtJump", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 1985, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "timesPerPeriod", - "offset": 0, - "slot": "7", - "type": "t_array(t_uint256)4_storage" - } - ], - "numberOfBytes": "352" - }, - "t_struct(DelayedSetStake)1993_storage": { - "encoding": "inplace", - "label": "struct xKlerosLiquidV2.DelayedSetStake", - "members": [ - { - "astId": 1988, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1990, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "subcourtID", - "offset": 20, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 1992, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "stake", - "offset": 0, - "slot": "1", - "type": "t_uint128" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Dispute)2054_storage": { - "encoding": "inplace", - "label": "struct xKlerosLiquidV2.Dispute", - "members": [ - { - "astId": 2013, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "subcourtID", - "offset": 0, - "slot": "0", - "type": "t_uint96" - }, - { - "astId": 2016, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "arbitrated", - "offset": 12, - "slot": "0", - "type": "t_contract(IArbitrable)1048" - }, - { - "astId": 2018, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "numberOfChoices", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 2021, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "period", - "offset": 0, - "slot": "2", - "type": "t_enum(Period)1966" - }, - { - "astId": 2023, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "lastPeriodChange", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 2028, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "votes", - "offset": 0, - "slot": "4", - "type": "t_array(t_array(t_struct(Vote)2002_storage)dyn_storage)dyn_storage" - }, - { - "astId": 2032, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "voteCounters", - "offset": 0, - "slot": "5", - "type": "t_array(t_struct(VoteCounter)2011_storage)dyn_storage" - }, - { - "astId": 2035, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "tokensAtStakePerJuror", - "offset": 0, - "slot": "6", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 2038, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "totalFeesForJurors", - "offset": 0, - "slot": "7", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 2040, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "drawsInRound", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 2042, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "commitsInRound", - "offset": 0, - "slot": "9", - "type": "t_uint256" - }, - { - "astId": 2045, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "votesInEachRound", - "offset": 0, - "slot": "10", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 2048, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "repartitionsInEachRound", - "offset": 0, - "slot": "11", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 2051, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "penaltiesInEachRound", - "offset": 0, - "slot": "12", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 2053, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "ruled", - "offset": 0, - "slot": "13", - "type": "t_bool" - } - ], - "numberOfBytes": "448" - }, - "t_struct(Juror)2062_storage": { - "encoding": "inplace", - "label": "struct xKlerosLiquidV2.Juror", - "members": [ - { - "astId": 2057, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "subcourtIDs", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint96)dyn_storage" - }, - { - "astId": 2059, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "stakedTokens", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 2061, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "lockedTokens", - "offset": 0, - "slot": "2", - "type": "t_uint256" - } - ], - "numberOfBytes": "96" - }, - "t_struct(SortitionSumTree)3779_storage": { - "encoding": "inplace", - "label": "struct SortitionSumTreeFactory.SortitionSumTree", - "members": [ - { - "astId": 3764, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "K", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 3767, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "stack", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 3770, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "nodes", - "offset": 0, - "slot": "2", - "type": "t_array(t_uint256)dyn_storage" - }, - { - "astId": 3774, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "IDsToNodeIndexes", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_bytes32,t_uint256)" - }, - { - "astId": 3778, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "nodeIndexesToIDs", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_bytes32)" - } - ], - "numberOfBytes": "160" - }, - "t_struct(SortitionSumTrees)3785_storage": { - "encoding": "inplace", - "label": "struct SortitionSumTreeFactory.SortitionSumTrees", - "members": [ - { - "astId": 3784, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "sortitionSumTrees", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_bytes32,t_struct(SortitionSumTree)3779_storage)" - } - ], - "numberOfBytes": "32" - }, - "t_struct(Vote)2002_storage": { - "encoding": "inplace", - "label": "struct xKlerosLiquidV2.Vote", - "members": [ - { - "astId": 1995, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "account", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1997, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "commit", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 1999, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "choice", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 2001, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "voted", - "offset": 0, - "slot": "3", - "type": "t_bool" - } - ], - "numberOfBytes": "128" - }, - "t_struct(VoteCounter)2011_storage": { - "encoding": "inplace", - "label": "struct xKlerosLiquidV2.VoteCounter", - "members": [ - { - "astId": 2004, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "winningChoice", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 2008, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "counts", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 2010, - "contract": "src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol:xKlerosLiquidV2", - "label": "tied", - "offset": 0, - "slot": "2", - "type": "t_bool" - } - ], - "numberOfBytes": "96" - }, - "t_uint128": { - "encoding": "inplace", - "label": "uint128", - "numberOfBytes": "16" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/chiadoDevnet/.chainId b/contracts/deployments/chiadoDevnet/.chainId deleted file mode 100644 index 6cd35a3ed..000000000 --- a/contracts/deployments/chiadoDevnet/.chainId +++ /dev/null @@ -1 +0,0 @@ -10200 \ No newline at end of file diff --git a/contracts/deployments/chiadoDevnet/ArbitrableExample.json b/contracts/deployments/chiadoDevnet/ArbitrableExample.json deleted file mode 100644 index ea0a63770..000000000 --- a/contracts/deployments/chiadoDevnet/ArbitrableExample.json +++ /dev/null @@ -1,618 +0,0 @@ -{ - "address": "0xB56A23b396E0eae85414Ce5815da448ba529Cb4A", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - }, - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_weth", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "string", - "name": "_action", - "type": "string" - } - ], - "name": "Action", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_arbitrableDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateUri", - "type": "string" - } - ], - "name": "DisputeRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "arbitratorExtraData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - } - ], - "name": "changeArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - } - ], - "name": "changeArbitratorExtraData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "changeDisputeTemplate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "name": "changeTemplateRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_action", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_feeInWeth", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_action", - "type": "string" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "bool", - "name": "isRuled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numberOfRulingOptions", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "externalIDtoLocalID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templateId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "templateRegistry", - "outputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "weth", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x647177d9a07bcca3b9d3c0a418fff45ddc06dab7a0a62e50570f555d52aedf60", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0xB56A23b396E0eae85414Ce5815da448ba529Cb4A", - "transactionIndex": 1, - "gasUsed": "1330807", - "logsBloom": "0x00000000000000000000000000000000000000100000000000000000000000008000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000080000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000400000000000100000000000000000080000000000000000000", - "blockHash": "0x580f4bc2ca36782fba7fcbfe901e10c8a4a3a0d4348dce3ce3b0f00a1e974864", - "transactionHash": "0x647177d9a07bcca3b9d3c0a418fff45ddc06dab7a0a62e50570f555d52aedf60", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 5434042, - "transactionHash": "0x647177d9a07bcca3b9d3c0a418fff45ddc06dab7a0a62e50570f555d52aedf60", - "address": "0x96E49552669ea81B8E9cE8694F7E4A55D8bFb957", - "topics": [ - "0x00f7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff9924", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6469737075746554656d706c6174654d617070696e673a20544f444f00000000", - "logIndex": 0, - "blockHash": "0x580f4bc2ca36782fba7fcbfe901e10c8a4a3a0d4348dce3ce3b0f00a1e974864" - } - ], - "blockNumber": 5434042, - "cumulativeGasUsed": "1357391", - "status": 1, - "byzantium": true - }, - "args": [ - "0x83F393F2aE68FA6A6701D7c65CBbFf3225f3fDf9", - { - "$schema": "../NewDisputeTemplate.schema.json", - "title": "Let's do this", - "description": "We want to do this: %s", - "question": "Does it comply with the policy?", - "answers": [ - { - "title": "Yes", - "description": "Select this if you agree that it must be done." - }, - { - "title": "No", - "description": "Select this if you do not agree that it must be done." - } - ], - "policyURI": "/ipfs/Qmdvk...rSD6cE/policy.pdf", - "frontendUrl": "https://kleros-v2.netlify.app/#/cases/%s/overview", - "arbitratorChainID": "421613", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", - "category": "Others", - "specification": "KIP001", - "lang": "en_US" - }, - "disputeTemplateMapping: TODO", - "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003", - "0x96E49552669ea81B8E9cE8694F7E4A55D8bFb957", - "0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8" - ], - "numDeployments": 2, - "solcInputHash": "4a879192e8bde2273db37e489aeff250", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_weth\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"_action\",\"type\":\"string\"}],\"name\":\"Action\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_arbitrableDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateUri\",\"type\":\"string\"}],\"name\":\"DisputeRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbitratorExtraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"}],\"name\":\"changeArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"}],\"name\":\"changeArbitratorExtraData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"changeDisputeTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_action\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_feeInWeth\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_action\",\"type\":\"string\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isRuled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRulingOptions\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"externalIDtoLocalID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DisputeRequest(address,uint256,uint256,uint256,string)\":{\"details\":\"To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\",\"params\":{\"_arbitrableDisputeID\":\"The identifier of the dispute in the Arbitrable contract.\",\"_arbitrator\":\"The arbitrator of the contract.\",\"_externalDisputeID\":\"An identifier created outside Kleros by the protocol requesting arbitration.\",\"_templateId\":\"The identifier of the dispute template. Should not be used with _templateUri.\",\"_templateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrator\":\"The arbitrator giving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_arbitrator\":\"The arbitrator to rule on created disputes.\",\"_arbitratorExtraData\":\"The extra data for the arbitrator.\",\"_templateData\":\"The dispute template data.\",\"_templateDataMappings\":\"The dispute template data mappings.\",\"_templateRegistry\":\"The dispute template registry.\",\"_weth\":\"The WETH token.\"}},\"createDispute(string)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_action\":\"The action that requires arbitration.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the dispute created.\"}},\"createDispute(string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_action\":\"The action that requires arbitration.\",\"_feeInWeth\":\"Amount of fees in WETH for the arbitrator.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the dispute created.\"}},\"rule(uint256,uint256)\":{\"details\":\"To be called by the arbitrator of the dispute, to declare the winning ruling.\",\"params\":{\"_externalDisputeID\":\"ID of the dispute in arbitrator contract.\",\"_ruling\":\"The ruling choice of the arbitration.\"}}},\"title\":\"ArbitrableExample An example of an arbitrable contract which connects to the arbitator that implements the updated interface.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/arbitrables/ArbitrableExample.sol\":\"ArbitrableExample\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/arbitration/arbitrables/ArbitrableExample.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitrableV2.sol\\\";\\nimport \\\"../interfaces/IDisputeTemplateRegistry.sol\\\";\\nimport \\\"../../libraries/SafeERC20.sol\\\";\\n\\n/// @title ArbitrableExample\\n/// An example of an arbitrable contract which connects to the arbitator that implements the updated interface.\\ncontract ArbitrableExample is IArbitrableV2 {\\n using SafeERC20 for IERC20;\\n\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeStruct {\\n bool isRuled; // Whether the dispute has been ruled or not.\\n uint256 ruling; // Ruling given by the arbitrator.\\n uint256 numberOfRulingOptions; // The number of choices the arbitrator can give.\\n }\\n\\n event Action(string indexed _action);\\n\\n address public immutable governor;\\n IArbitratorV2 public arbitrator; // Arbitrator is set in constructor.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n uint256 public templateId; // The current dispute template identifier.\\n bytes public arbitratorExtraData; // Extra data to set up the arbitration.\\n IERC20 public immutable weth; // The WETH token.\\n mapping(uint256 => uint256) public externalIDtoLocalID; // Maps external (arbitrator side) dispute IDs to local dispute IDs.\\n DisputeStruct[] public disputes; // Stores the disputes' info. disputes[disputeID].\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyByGovernor() {\\n require(address(this) == msg.sender, \\\"Only the governor allowed.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator The arbitrator to rule on created disputes.\\n /// @param _templateData The dispute template data.\\n /// @param _templateDataMappings The dispute template data mappings.\\n /// @param _arbitratorExtraData The extra data for the arbitrator.\\n /// @param _templateRegistry The dispute template registry.\\n /// @param _weth The WETH token.\\n constructor(\\n IArbitratorV2 _arbitrator,\\n string memory _templateData,\\n string memory _templateDataMappings,\\n bytes memory _arbitratorExtraData,\\n IDisputeTemplateRegistry _templateRegistry,\\n IERC20 _weth\\n ) {\\n governor = msg.sender;\\n arbitrator = _arbitrator;\\n arbitratorExtraData = _arbitratorExtraData;\\n templateRegistry = _templateRegistry;\\n weth = _weth;\\n\\n templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _templateData, _templateDataMappings);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n function changeArbitrator(IArbitratorV2 _arbitrator) external onlyByGovernor {\\n arbitrator = _arbitrator;\\n }\\n\\n function changeArbitratorExtraData(bytes calldata _arbitratorExtraData) external onlyByGovernor {\\n arbitratorExtraData = _arbitratorExtraData;\\n }\\n\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external onlyByGovernor {\\n templateRegistry = _templateRegistry;\\n }\\n\\n function changeDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyByGovernor {\\n templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _templateData, _templateDataMappings);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _action The action that requires arbitration.\\n /// @return disputeID Dispute id (on arbitrator side) of the dispute created.\\n function createDispute(string calldata _action) external payable returns (uint256 disputeID) {\\n emit Action(_action);\\n\\n uint256 numberOfRulingOptions = 2;\\n uint256 localDisputeID = disputes.length;\\n disputes.push(DisputeStruct({isRuled: false, ruling: 0, numberOfRulingOptions: numberOfRulingOptions}));\\n\\n disputeID = arbitrator.createDispute{value: msg.value}(numberOfRulingOptions, arbitratorExtraData);\\n externalIDtoLocalID[disputeID] = localDisputeID;\\n\\n uint256 externalDisputeID = uint256(keccak256(abi.encodePacked(_action)));\\n emit DisputeRequest(arbitrator, disputeID, externalDisputeID, templateId, \\\"\\\");\\n }\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _action The action that requires arbitration.\\n /// @param _feeInWeth Amount of fees in WETH for the arbitrator.\\n /// @return disputeID Dispute id (on arbitrator side) of the dispute created.\\n function createDispute(string calldata _action, uint256 _feeInWeth) external returns (uint256 disputeID) {\\n emit Action(_action);\\n\\n uint256 numberOfRulingOptions = 2;\\n uint256 localDisputeID = disputes.length;\\n disputes.push(DisputeStruct({isRuled: false, ruling: 0, numberOfRulingOptions: numberOfRulingOptions}));\\n\\n require(weth.safeTransferFrom(msg.sender, address(this), _feeInWeth), \\\"Transfer failed\\\");\\n require(weth.increaseAllowance(address(arbitrator), _feeInWeth), \\\"Allowance increase failed\\\");\\n\\n disputeID = arbitrator.createDispute(numberOfRulingOptions, arbitratorExtraData, weth, _feeInWeth);\\n externalIDtoLocalID[disputeID] = localDisputeID;\\n\\n uint256 externalDisputeID = uint256(keccak256(abi.encodePacked(_action)));\\n emit DisputeRequest(arbitrator, disputeID, externalDisputeID, templateId, \\\"\\\");\\n }\\n\\n /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling.\\n /// @param _externalDisputeID ID of the dispute in arbitrator contract.\\n /// @param _ruling The ruling choice of the arbitration.\\n function rule(uint256 _externalDisputeID, uint256 _ruling) external override {\\n uint256 localDisputeID = externalIDtoLocalID[_externalDisputeID];\\n DisputeStruct storage dispute = disputes[localDisputeID];\\n require(msg.sender == address(arbitrator), \\\"Only the arbitrator can execute this.\\\");\\n require(_ruling <= dispute.numberOfRulingOptions, \\\"Invalid ruling.\\\");\\n require(dispute.isRuled == false, \\\"This dispute has been ruled already.\\\");\\n\\n dispute.isRuled = true;\\n dispute.ruling = _ruling;\\n\\n emit Ruling(IArbitratorV2(msg.sender), _externalDisputeID, dispute.ruling);\\n }\\n}\\n\",\"keccak256\":\"0x19d38e04eed4156c108539f5ac7c98af87d1d457ef40b5d52bd1aa592c8b0df3\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitrableDisputeID The identifier of the dispute in the Arbitrable contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitrableDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x389326b1f749454ed179bdac2f9d6ce24a1ef944bbce976ca78b93f4e173354a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0x453943ba5ccc94b9b9cdfd4afd3678682d62d8b90fe16b43e90215387d2f6a51\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0x4b1b3f98d13e4a9a1c546dd45f98490f86e871cfc4b4be9a3fe4d29b3c99649c\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x37a19df56a98cd466fb6e70b8c56e13bfc439221bfabd8c5108d36d0e3ffc0e5\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60c06040523480156200001157600080fd5b506040516200191a3803806200191a83398101604081905262000034916200020f565b33608052600080546001600160a01b0319166001600160a01b03881617905560036200006184826200037e565b50600180546001600160a01b0319166001600160a01b0384811691821790925590821660a0526040516312a6505d60e21b8152634a99417490620000ac908890889060040162000478565b6020604051808303816000875af1158015620000cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f29190620004b8565b60025550620004d2945050505050565b6001600160a01b03811681146200011857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200014e57818101518382015260200162000134565b50506000910152565b60006001600160401b03808411156200017457620001746200011b565b604051601f8501601f19908116603f011681019082821181831017156200019f576200019f6200011b565b81604052809350858152868686011115620001b957600080fd5b620001c986602083018762000131565b5050509392505050565b600082601f830112620001e557600080fd5b620001f68383516020850162000157565b9392505050565b80516200020a8162000102565b919050565b60008060008060008060c087890312156200022957600080fd5b8651620002368162000102565b60208801519096506001600160401b03808211156200025457600080fd5b620002628a838b01620001d3565b965060408901519150808211156200027957600080fd5b620002878a838b01620001d3565b955060608901519150808211156200029e57600080fd5b508701601f81018913620002b157600080fd5b620002c28982516020840162000157565b935050620002d360808801620001fd565b9150620002e360a08801620001fd565b90509295509295509295565b600181811c908216806200030457607f821691505b6020821081036200032557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200037957600081815260208120601f850160051c81016020861015620003545750805b601f850160051c820191505b81811015620003755782815560010162000360565b5050505b505050565b81516001600160401b038111156200039a576200039a6200011b565b620003b281620003ab8454620002ef565b846200032b565b602080601f831160018114620003ea5760008415620003d15750858301515b600019600386901b1c1916600185901b17855562000375565b600085815260208120601f198616915b828110156200041b57888601518255948401946001909101908401620003fa565b50858210156200043a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600081518084526200046481602086016020860162000131565b601f01601f19169290920160200192915050565b60608152600060608201526080602082015260006200049b60808301856200044a565b8281036040840152620004af81856200044a565b95945050505050565b600060208284031215620004cb57600080fd5b5051919050565b60805160a05161140e6200050c60003960008181610194015281816106e40152818161076301526108010152600060df015261140e6000f3fe6080604052600436106100c85760003560e01c8063654692871161007a578063654692871461021357806368175996146102415780636cc6cde1146102545780637aa77f2914610274578063a0af81f01461028a578063c21ae061146102aa578063c5d55288146102d7578063fc548f08146102f757600080fd5b80630c340a24146100cd5780630c7ac7b61461011e578063311a6c561461014057806334e2672d146101625780633fc8cef3146101825780634660ebbe146101b6578063564a565d146101d6575b600080fd5b3480156100d957600080fd5b506101017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012a57600080fd5b50610133610317565b6040516101159190610e3d565b34801561014c57600080fd5b5061016061015b366004610e57565b6103a5565b005b34801561016e57600080fd5b5061016061017d366004610ec2565b61053e565b34801561018e57600080fd5b506101017f000000000000000000000000000000000000000000000000000000000000000081565b3480156101c257600080fd5b506101606101d1366004610f1c565b61056f565b3480156101e257600080fd5b506101f66101f1366004610f39565b6105b0565b604080519315158452602084019290925290820152606001610115565b34801561021f57600080fd5b5061023361022e366004610f52565b6105e7565b604051908152602001610115565b61023361024f366004610ec2565b61091b565b34801561026057600080fd5b50600054610101906001600160a01b031681565b34801561028057600080fd5b5061023360025481565b34801561029657600080fd5b50600154610101906001600160a01b031681565b3480156102b657600080fd5b506102336102c5366004610f39565b60046020526000908152604090205481565b3480156102e357600080fd5b506101606102f2366004611041565b610b31565b34801561030357600080fd5b50610160610312366004610f1c565b610bcc565b60038054610324906110a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610350906110a5565b801561039d5780601f106103725761010080835404028352916020019161039d565b820191906000526020600020905b81548152906001019060200180831161038057829003601f168201915b505050505081565b60008281526004602052604081205460058054919291839081106103cb576103cb6110df565b600091825260208220915460039190910290910191506001600160a01b0316331461044b5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b80600201548311156104915760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b6044820152606401610442565b805460ff16156104ef5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b6064820152608401610442565b805460ff1916600190811782558101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b30331461055d5760405162461bcd60e51b8152600401610442906110f5565b600361056a82848361117a565b505050565b30331461058e5760405162461bcd60e51b8152600401610442906110f5565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600581815481106105c057600080fd5b600091825260209091206003909102018054600182015460029092015460ff909116925083565b600083836040516105f992919061123b565b604051908190038120907f8b2c14fe955d044ef95ba32b88d2ceb87c6f73fcefdcebe906063a6d75690f2790600090a2600580546040805160608101825260008082526020820181815260029383018481526001860187559590915290517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db060038502908101805460ff19169215159290921790915590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015592517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2909301929092556107147f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333087610c0d565b6107525760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610442565b60005461078c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911686610ce9565b6107d45760405162461bcd60e51b8152602060048201526019602482015278105b1b1bddd85b98d9481a5b98dc99585cd94819985a5b1959603a1b6044820152606401610442565b600054604051633d941b6d60e21b81526001600160a01b039091169063f6506db49061082b9085906003907f0000000000000000000000000000000000000000000000000000000000000000908a906004016112c8565b6020604051808303816000875af115801561084a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e91906112fd565b600081815260046020908152604080832085905551929550909161089691899189910161123b565b60408051601f1981840301815290829052805160209091012060005460025491935086926001600160a01b03909116917f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e271869161090991868252602082015260606040820181905260009082015260800190565b60405180910390a35050509392505050565b6000828260405161092d92919061123b565b604051908190038120907f8b2c14fe955d044ef95ba32b88d2ceb87c6f73fcefdcebe906063a6d75690f2790600090a26005805460408051606081018252600080825260208201818152600283850181815260018701885596835292517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db06003808802918201805460ff19169315159390931790925591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db183015595517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db29091015554915163c13517e160e01b815290936001600160a01b039092169163c13517e1913491610a4291879190600401611316565b60206040518083038185885af1158015610a60573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a8591906112fd565b6000818152600460209081526040808320859055519295509091610aad91889188910161123b565b60408051601f1981840301815290829052805160209091012060005460025491935086926001600160a01b03909116917f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e2718691610b2091868252602082015260606040820181905260009082015260800190565b60405180910390a350505092915050565b303314610b505760405162461bcd60e51b8152600401610442906110f5565b6001546040516312a6505d60e21b81526001600160a01b0390911690634a99417490610b829085908590600401611337565b6020604051808303816000875af1158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc591906112fd565b6002555050565b303314610beb5760405162461bcd60e51b8152600401610442906110f5565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251610c729190611373565b6000604051808303816000865af19150503d8060008114610caf576040519150601f19603f3d011682016040523d82523d6000602084013e610cb4565b606091505b5091509150818015610cde575080511580610cde575080806020019051810190610cde919061138f565b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063095ea7b39085908590849063dd62ed3e90604401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6991906112fd565b610d7391906113b1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de2919061138f565b506001949350505050565b60005b83811015610e08578181015183820152602001610df0565b50506000910152565b60008151808452610e29816020860160208601610ded565b601f01601f19169290920160200192915050565b602081526000610e506020830184610e11565b9392505050565b60008060408385031215610e6a57600080fd5b50508035926020909101359150565b60008083601f840112610e8b57600080fd5b50813567ffffffffffffffff811115610ea357600080fd5b602083019150836020828501011115610ebb57600080fd5b9250929050565b60008060208385031215610ed557600080fd5b823567ffffffffffffffff811115610eec57600080fd5b610ef885828601610e79565b90969095509350505050565b6001600160a01b0381168114610f1957600080fd5b50565b600060208284031215610f2e57600080fd5b8135610e5081610f04565b600060208284031215610f4b57600080fd5b5035919050565b600080600060408486031215610f6757600080fd5b833567ffffffffffffffff811115610f7e57600080fd5b610f8a86828701610e79565b909790965060209590950135949350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610fc557600080fd5b813567ffffffffffffffff80821115610fe057610fe0610f9e565b604051601f8301601f19908116603f0116810190828211818310171561100857611008610f9e565b8160405283815286602085880101111561102157600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561105457600080fd5b823567ffffffffffffffff8082111561106c57600080fd5b61107886838701610fb4565b9350602085013591508082111561108e57600080fd5b5061109b85828601610fb4565b9150509250929050565b600181811c908216806110b957607f821691505b6020821081036110d957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6020808252601a908201527f4f6e6c792074686520676f7665726e6f7220616c6c6f7765642e000000000000604082015260600190565b601f82111561056a57600081815260208120601f850160051c810160208610156111535750805b601f850160051c820191505b818110156111725782815560010161115f565b505050505050565b67ffffffffffffffff83111561119257611192610f9e565b6111a6836111a083546110a5565b8361112c565b6000601f8411600181146111da57600085156111c25750838201355b600019600387901b1c1916600186901b178355611234565b600083815260209020601f19861690835b8281101561120b57868501358255602094850194600190920191016111eb565b50868210156112285760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8183823760009101908152919050565b60008154611258816110a5565b808552602060018381168015611275576001811461128f576112bd565b60ff1985168884015283151560051b8801830195506112bd565b866000528260002060005b858110156112b55781548a820186015290830190840161129a565b890184019650505b505050505092915050565b8481526080602082015260006112e1608083018661124b565b6001600160a01b03949094166040830152506060015292915050565b60006020828403121561130f57600080fd5b5051919050565b82815260406020820152600061132f604083018461124b565b949350505050565b60608152600060608201526080602082015260006113586080830185610e11565b828103604084015261136a8185610e11565b95945050505050565b60008251611385818460208701610ded565b9190910192915050565b6000602082840312156113a157600080fd5b81518015158114610e5057600080fd5b808201808211156113d257634e487b7160e01b600052601160045260246000fd5b9291505056fea2646970667358221220c6a6daf2f56ede86acd165f440073734a6ccd3c00dadf35865db2d523df0840d64736f6c63430008120033", - "deployedBytecode": "0x6080604052600436106100c85760003560e01c8063654692871161007a578063654692871461021357806368175996146102415780636cc6cde1146102545780637aa77f2914610274578063a0af81f01461028a578063c21ae061146102aa578063c5d55288146102d7578063fc548f08146102f757600080fd5b80630c340a24146100cd5780630c7ac7b61461011e578063311a6c561461014057806334e2672d146101625780633fc8cef3146101825780634660ebbe146101b6578063564a565d146101d6575b600080fd5b3480156100d957600080fd5b506101017f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012a57600080fd5b50610133610317565b6040516101159190610e3d565b34801561014c57600080fd5b5061016061015b366004610e57565b6103a5565b005b34801561016e57600080fd5b5061016061017d366004610ec2565b61053e565b34801561018e57600080fd5b506101017f000000000000000000000000000000000000000000000000000000000000000081565b3480156101c257600080fd5b506101606101d1366004610f1c565b61056f565b3480156101e257600080fd5b506101f66101f1366004610f39565b6105b0565b604080519315158452602084019290925290820152606001610115565b34801561021f57600080fd5b5061023361022e366004610f52565b6105e7565b604051908152602001610115565b61023361024f366004610ec2565b61091b565b34801561026057600080fd5b50600054610101906001600160a01b031681565b34801561028057600080fd5b5061023360025481565b34801561029657600080fd5b50600154610101906001600160a01b031681565b3480156102b657600080fd5b506102336102c5366004610f39565b60046020526000908152604090205481565b3480156102e357600080fd5b506101606102f2366004611041565b610b31565b34801561030357600080fd5b50610160610312366004610f1c565b610bcc565b60038054610324906110a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610350906110a5565b801561039d5780601f106103725761010080835404028352916020019161039d565b820191906000526020600020905b81548152906001019060200180831161038057829003601f168201915b505050505081565b60008281526004602052604081205460058054919291839081106103cb576103cb6110df565b600091825260208220915460039190910290910191506001600160a01b0316331461044b5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b80600201548311156104915760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b6044820152606401610442565b805460ff16156104ef5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b6064820152608401610442565b805460ff1916600190811782558101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b30331461055d5760405162461bcd60e51b8152600401610442906110f5565b600361056a82848361117a565b505050565b30331461058e5760405162461bcd60e51b8152600401610442906110f5565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600581815481106105c057600080fd5b600091825260209091206003909102018054600182015460029092015460ff909116925083565b600083836040516105f992919061123b565b604051908190038120907f8b2c14fe955d044ef95ba32b88d2ceb87c6f73fcefdcebe906063a6d75690f2790600090a2600580546040805160608101825260008082526020820181815260029383018481526001860187559590915290517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db060038502908101805460ff19169215159290921790915590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015592517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2909301929092556107147f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333087610c0d565b6107525760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610442565b60005461078c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911686610ce9565b6107d45760405162461bcd60e51b8152602060048201526019602482015278105b1b1bddd85b98d9481a5b98dc99585cd94819985a5b1959603a1b6044820152606401610442565b600054604051633d941b6d60e21b81526001600160a01b039091169063f6506db49061082b9085906003907f0000000000000000000000000000000000000000000000000000000000000000908a906004016112c8565b6020604051808303816000875af115801561084a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e91906112fd565b600081815260046020908152604080832085905551929550909161089691899189910161123b565b60408051601f1981840301815290829052805160209091012060005460025491935086926001600160a01b03909116917f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e271869161090991868252602082015260606040820181905260009082015260800190565b60405180910390a35050509392505050565b6000828260405161092d92919061123b565b604051908190038120907f8b2c14fe955d044ef95ba32b88d2ceb87c6f73fcefdcebe906063a6d75690f2790600090a26005805460408051606081018252600080825260208201818152600283850181815260018701885596835292517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db06003808802918201805460ff19169315159390931790925591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db183015595517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db29091015554915163c13517e160e01b815290936001600160a01b039092169163c13517e1913491610a4291879190600401611316565b60206040518083038185885af1158015610a60573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a8591906112fd565b6000818152600460209081526040808320859055519295509091610aad91889188910161123b565b60408051601f1981840301815290829052805160209091012060005460025491935086926001600160a01b03909116917f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e2718691610b2091868252602082015260606040820181905260009082015260800190565b60405180910390a350505092915050565b303314610b505760405162461bcd60e51b8152600401610442906110f5565b6001546040516312a6505d60e21b81526001600160a01b0390911690634a99417490610b829085908590600401611337565b6020604051808303816000875af1158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc591906112fd565b6002555050565b303314610beb5760405162461bcd60e51b8152600401610442906110f5565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b038481166024830152838116604483015260648201839052600091829182919088169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251610c729190611373565b6000604051808303816000865af19150503d8060008114610caf576040519150601f19603f3d011682016040523d82523d6000602084013e610cb4565b606091505b5091509150818015610cde575080511580610cde575080806020019051810190610cde919061138f565b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063095ea7b39085908590849063dd62ed3e90604401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6991906112fd565b610d7391906113b1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de2919061138f565b506001949350505050565b60005b83811015610e08578181015183820152602001610df0565b50506000910152565b60008151808452610e29816020860160208601610ded565b601f01601f19169290920160200192915050565b602081526000610e506020830184610e11565b9392505050565b60008060408385031215610e6a57600080fd5b50508035926020909101359150565b60008083601f840112610e8b57600080fd5b50813567ffffffffffffffff811115610ea357600080fd5b602083019150836020828501011115610ebb57600080fd5b9250929050565b60008060208385031215610ed557600080fd5b823567ffffffffffffffff811115610eec57600080fd5b610ef885828601610e79565b90969095509350505050565b6001600160a01b0381168114610f1957600080fd5b50565b600060208284031215610f2e57600080fd5b8135610e5081610f04565b600060208284031215610f4b57600080fd5b5035919050565b600080600060408486031215610f6757600080fd5b833567ffffffffffffffff811115610f7e57600080fd5b610f8a86828701610e79565b909790965060209590950135949350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610fc557600080fd5b813567ffffffffffffffff80821115610fe057610fe0610f9e565b604051601f8301601f19908116603f0116810190828211818310171561100857611008610f9e565b8160405283815286602085880101111561102157600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561105457600080fd5b823567ffffffffffffffff8082111561106c57600080fd5b61107886838701610fb4565b9350602085013591508082111561108e57600080fd5b5061109b85828601610fb4565b9150509250929050565b600181811c908216806110b957607f821691505b6020821081036110d957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6020808252601a908201527f4f6e6c792074686520676f7665726e6f7220616c6c6f7765642e000000000000604082015260600190565b601f82111561056a57600081815260208120601f850160051c810160208610156111535750805b601f850160051c820191505b818110156111725782815560010161115f565b505050505050565b67ffffffffffffffff83111561119257611192610f9e565b6111a6836111a083546110a5565b8361112c565b6000601f8411600181146111da57600085156111c25750838201355b600019600387901b1c1916600186901b178355611234565b600083815260209020601f19861690835b8281101561120b57868501358255602094850194600190920191016111eb565b50868210156112285760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8183823760009101908152919050565b60008154611258816110a5565b808552602060018381168015611275576001811461128f576112bd565b60ff1985168884015283151560051b8801830195506112bd565b866000528260002060005b858110156112b55781548a820186015290830190840161129a565b890184019650505b505050505092915050565b8481526080602082015260006112e1608083018661124b565b6001600160a01b03949094166040830152506060015292915050565b60006020828403121561130f57600080fd5b5051919050565b82815260406020820152600061132f604083018461124b565b949350505050565b60608152600060608201526080602082015260006113586080830185610e11565b828103604084015261136a8185610e11565b95945050505050565b60008251611385818460208701610ded565b9190910192915050565b6000602082840312156113a157600080fd5b81518015158114610e5057600080fd5b808201808211156113d257634e487b7160e01b600052601160045260246000fd5b9291505056fea2646970667358221220c6a6daf2f56ede86acd165f440073734a6ccd3c00dadf35865db2d523df0840d64736f6c63430008120033", - "devdoc": { - "events": { - "DisputeRequest(address,uint256,uint256,uint256,string)": { - "details": "To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.", - "params": { - "_arbitrableDisputeID": "The identifier of the dispute in the Arbitrable contract.", - "_arbitrator": "The arbitrator of the contract.", - "_externalDisputeID": "An identifier created outside Kleros by the protocol requesting arbitration.", - "_templateId": "The identifier of the dispute template. Should not be used with _templateUri.", - "_templateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrator": "The arbitrator giving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - } - }, - "kind": "dev", - "methods": { - "constructor": { - "details": "Constructor", - "params": { - "_arbitrator": "The arbitrator to rule on created disputes.", - "_arbitratorExtraData": "The extra data for the arbitrator.", - "_templateData": "The dispute template data.", - "_templateDataMappings": "The dispute template data mappings.", - "_templateRegistry": "The dispute template registry.", - "_weth": "The WETH token." - } - }, - "createDispute(string)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_action": "The action that requires arbitration." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the dispute created." - } - }, - "createDispute(string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_action": "The action that requires arbitration.", - "_feeInWeth": "Amount of fees in WETH for the arbitrator." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the dispute created." - } - }, - "rule(uint256,uint256)": { - "details": "To be called by the arbitrator of the dispute, to declare the winning ruling.", - "params": { - "_externalDisputeID": "ID of the dispute in arbitrator contract.", - "_ruling": "The ruling choice of the arbitration." - } - } - }, - "title": "ArbitrableExample An example of an arbitrable contract which connects to the arbitator that implements the updated interface.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 9463, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "arbitrator", - "offset": 0, - "slot": "0", - "type": "t_contract(IArbitratorV2)15461" - }, - { - "astId": 9466, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "templateRegistry", - "offset": 0, - "slot": "1", - "type": "t_contract(IDisputeTemplateRegistry)15627" - }, - { - "astId": 9468, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "templateId", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 9470, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "arbitratorExtraData", - "offset": 0, - "slot": "3", - "type": "t_bytes_storage" - }, - { - "astId": 9477, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "externalIDtoLocalID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 9481, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "disputes", - "offset": 0, - "slot": "5", - "type": "t_array(t_struct(DisputeStruct)9454_storage)dyn_storage" - } - ], - "types": { - "t_array(t_struct(DisputeStruct)9454_storage)dyn_storage": { - "base": "t_struct(DisputeStruct)9454_storage", - "encoding": "dynamic_array", - "label": "struct ArbitrableExample.DisputeStruct[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IArbitratorV2)15461": { - "encoding": "inplace", - "label": "contract IArbitratorV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeTemplateRegistry)15627": { - "encoding": "inplace", - "label": "contract IDisputeTemplateRegistry", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeStruct)9454_storage": { - "encoding": "inplace", - "label": "struct ArbitrableExample.DisputeStruct", - "members": [ - { - "astId": 9449, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "isRuled", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 9451, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "ruling", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 9453, - "contract": "src/arbitration/arbitrables/ArbitrableExample.sol:ArbitrableExample", - "label": "numberOfRulingOptions", - "offset": 0, - "slot": "2", - "type": "t_uint256" - } - ], - "numberOfBytes": "96" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/chiadoDevnet/DisputeResolver.json b/contracts/deployments/chiadoDevnet/DisputeResolver.json deleted file mode 100644 index f62be29f5..000000000 --- a/contracts/deployments/chiadoDevnet/DisputeResolver.json +++ /dev/null @@ -1,522 +0,0 @@ -{ - "address": "0x16f20604a51Ac1e68c9aAd1C0E53e951B62CC1Cb", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_arbitrableDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateUri", - "type": "string" - } - ], - "name": "DisputeRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "arbitratorDisputeIDToLocalID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IArbitratorV2", - "name": "_arbitrator", - "type": "address" - } - ], - "name": "changeArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "_templateRegistry", - "type": "address" - } - ], - "name": "changeTemplateRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplate", - "type": "string" - }, - { - "internalType": "string", - "name": "_disputeTemplateDataMappings", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "string", - "name": "_disputeTemplateUri", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_numberOfRulingOptions", - "type": "uint256" - } - ], - "name": "createDisputeForTemplateUri", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "bytes", - "name": "arbitratorExtraData", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "isRuled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "numberOfRulingOptions", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_externalDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templateRegistry", - "outputs": [ - { - "internalType": "contract IDisputeTemplateRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x7615e3a6ad32fb17c784c627aa6aea53567ad1d1ef8c4856f8ffcf1b1b369e5b", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x16f20604a51Ac1e68c9aAd1C0E53e951B62CC1Cb", - "transactionIndex": 1, - "gasUsed": "899270", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xfbfab4c23be217bd33a5a35c581b19b082f473ddb1ec930b17028ca24538a106", - "transactionHash": "0x7615e3a6ad32fb17c784c627aa6aea53567ad1d1ef8c4856f8ffcf1b1b369e5b", - "logs": [], - "blockNumber": 5434044, - "cumulativeGasUsed": "925906", - "status": 1, - "byzantium": true - }, - "args": [ - "0x83F393F2aE68FA6A6701D7c65CBbFf3225f3fDf9", - "0x96E49552669ea81B8E9cE8694F7E4A55D8bFb957" - ], - "numDeployments": 2, - "solcInputHash": "4a879192e8bde2273db37e489aeff250", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_arbitrableDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateUri\",\"type\":\"string\"}],\"name\":\"DisputeRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"arbitratorDisputeIDToLocalID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"}],\"name\":\"changeArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplate\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateDataMappings\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_disputeTemplateUri\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_numberOfRulingOptions\",\"type\":\"uint256\"}],\"name\":\"createDisputeForTemplateUri\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isRuled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"ruling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRulingOptions\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_externalDisputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DisputeRequest(address,uint256,uint256,uint256,string)\":{\"details\":\"To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\",\"params\":{\"_arbitrableDisputeID\":\"The identifier of the dispute in the Arbitrable contract.\",\"_arbitrator\":\"The arbitrator of the contract.\",\"_externalDisputeID\":\"An identifier created outside Kleros by the protocol requesting arbitration.\",\"_templateId\":\"The identifier of the dispute template. Should not be used with _templateUri.\",\"_templateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrator\":\"The arbitrator giving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}}},\"kind\":\"dev\",\"methods\":{\"changeGovernor(address)\":{\"details\":\"Changes the governor.\",\"params\":{\"_governor\":\"The address of the new governor.\"}},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_arbitrator\":\"Target global arbitrator for any disputes.\"}},\"createDisputeForTemplate(bytes,string,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplate\":\"Dispute template.\",\"_disputeTemplateDataMappings\":\"The data mappings.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"createDisputeForTemplateUri(bytes,string,uint256)\":{\"details\":\"Calls createDispute function of the specified arbitrator to create a dispute. Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\",\"params\":{\"_arbitratorExtraData\":\"Extra data for the arbitrator of the dispute.\",\"_disputeTemplateUri\":\"The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\",\"_numberOfRulingOptions\":\"Number of ruling options.\"},\"returns\":{\"disputeID\":\"Dispute id (on arbitrator side) of the created dispute.\"}},\"rule(uint256,uint256)\":{\"details\":\"To be called by the arbitrator of the dispute, to declare the winning ruling.\",\"params\":{\"_externalDisputeID\":\"ID of the dispute in arbitrator contract.\",\"_ruling\":\"The ruling choice of the arbitration.\"}}},\"title\":\"DisputeResolver DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/arbitrables/DisputeResolver.sol\":\"DisputeResolver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/arbitration/arbitrables/DisputeResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@ferittuncer, @unknownunknown1, @jaybuidl]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"../interfaces/IArbitrableV2.sol\\\";\\nimport \\\"../interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\npragma solidity 0.8.18;\\n\\n/// @title DisputeResolver\\n/// DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.\\ncontract DisputeResolver is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeStruct {\\n bytes arbitratorExtraData; // Extra data for the dispute.\\n bool isRuled; // True if the dispute has been ruled.\\n uint256 ruling; // Ruling given to the dispute.\\n uint256 numberOfRulingOptions; // The number of choices the arbitrator can give.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n address public governor; // The governor.\\n IArbitratorV2 public arbitrator; // The arbitrator.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n DisputeStruct[] public disputes; // Local disputes.\\n mapping(uint256 => uint256) public arbitratorDisputeIDToLocalID; // Maps arbitrator-side dispute IDs to local dispute IDs.\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor\\n /// @param _arbitrator Target global arbitrator for any disputes.\\n constructor(IArbitratorV2 _arbitrator, IDisputeTemplateRegistry _templateRegistry) {\\n governor = msg.sender;\\n arbitrator = _arbitrator;\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Changes the governor.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n governor = _governor;\\n }\\n\\n function changeArbitrator(IArbitratorV2 _arbitrator) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n arbitrator = _arbitrator;\\n }\\n\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n templateRegistry = _templateRegistry;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplate Dispute template.\\n /// @param _disputeTemplateDataMappings The data mappings.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplate(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return\\n _createDispute(\\n _arbitratorExtraData,\\n _disputeTemplate,\\n _disputeTemplateDataMappings,\\n \\\"\\\",\\n _numberOfRulingOptions\\n );\\n }\\n\\n /// @dev Calls createDispute function of the specified arbitrator to create a dispute.\\n /// Note that we don\\u2019t need to check that msg.value is enough to pay arbitration fees as it\\u2019s the responsibility of the arbitrator contract.\\n /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute.\\n /// @param _disputeTemplateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.\\n /// @param _numberOfRulingOptions Number of ruling options.\\n /// @return disputeID Dispute id (on arbitrator side) of the created dispute.\\n function createDisputeForTemplateUri(\\n bytes calldata _arbitratorExtraData,\\n string calldata _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) external payable returns (uint256 disputeID) {\\n return _createDispute(_arbitratorExtraData, \\\"\\\", \\\"\\\", _disputeTemplateUri, _numberOfRulingOptions);\\n }\\n\\n /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling.\\n /// @param _externalDisputeID ID of the dispute in arbitrator contract.\\n /// @param _ruling The ruling choice of the arbitration.\\n function rule(uint256 _externalDisputeID, uint256 _ruling) external override {\\n uint256 localDisputeID = arbitratorDisputeIDToLocalID[_externalDisputeID];\\n DisputeStruct storage dispute = disputes[localDisputeID];\\n require(msg.sender == address(arbitrator), \\\"Only the arbitrator can execute this.\\\");\\n require(_ruling <= dispute.numberOfRulingOptions, \\\"Invalid ruling.\\\");\\n require(!dispute.isRuled, \\\"This dispute has been ruled already.\\\");\\n\\n dispute.isRuled = true;\\n dispute.ruling = _ruling;\\n\\n emit Ruling(IArbitratorV2(msg.sender), _externalDisputeID, dispute.ruling);\\n }\\n\\n // ************************************* //\\n // * Internal * //\\n // ************************************* //\\n\\n function _createDispute(\\n bytes calldata _arbitratorExtraData,\\n string memory _disputeTemplate,\\n string memory _disputeTemplateDataMappings,\\n string memory _disputeTemplateUri,\\n uint256 _numberOfRulingOptions\\n ) internal returns (uint256 disputeID) {\\n require(_numberOfRulingOptions > 1, \\\"Should be at least 2 ruling options.\\\");\\n\\n disputeID = arbitrator.createDispute{value: msg.value}(_numberOfRulingOptions, _arbitratorExtraData);\\n uint256 localDisputeID = disputes.length;\\n disputes.push(\\n DisputeStruct({\\n arbitratorExtraData: _arbitratorExtraData,\\n isRuled: false,\\n ruling: 0,\\n numberOfRulingOptions: _numberOfRulingOptions\\n })\\n );\\n arbitratorDisputeIDToLocalID[disputeID] = localDisputeID;\\n uint256 templateId = templateRegistry.setDisputeTemplate(\\\"\\\", _disputeTemplate, _disputeTemplateDataMappings);\\n emit DisputeRequest(arbitrator, disputeID, localDisputeID, templateId, _disputeTemplateUri);\\n }\\n}\\n\",\"keccak256\":\"0x6a73611696ae6b6f128c1c3d6f355f691f93b374243f41e6a9b0795bbfb8fb13\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitrableDisputeID The identifier of the dispute in the Arbitrable contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitrableDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x389326b1f749454ed179bdac2f9d6ce24a1ef944bbce976ca78b93f4e173354a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0x453943ba5ccc94b9b9cdfd4afd3678682d62d8b90fe16b43e90215387d2f6a51\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0x4b1b3f98d13e4a9a1c546dd45f98490f86e871cfc4b4be9a3fe4d29b3c99649c\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50604051610ed5380380610ed583398101604081905261002f91610083565b600080546001600160a01b03199081163317909155600180546001600160a01b03948516908316179055600280549290931691161790556100bd565b6001600160a01b038116811461008057600080fd5b50565b6000806040838503121561009657600080fd5b82516100a18161006b565b60208401519092506100b28161006b565b809150509250929050565b610e09806100cc6000396000f3fe60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108bb565b610231565b005b34801561010c57600080fd5b506100fe61011b3660046108f5565b6103d1565b34801561012c57600080fd5b5061014061013b366004610919565b61041d565b6040516100d59493929190610978565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109f0565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a7a565b61055a565b3480156101d057600080fd5b506101836101df366004610919565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c3660046108f5565b6105b9565b34801561021d57600080fd5b506100fe61022c3660046108f5565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b88565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610b9e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610be0565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610be0565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610b9e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610b9e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906106e59086908c908c90600401610c1a565b60206040518083038185885af1158015610703573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107289190610c50565b600380546040805160a06020601f8d018190040282018101909252608081018b8152949550919382918c908c90819085018382808284376000920182905250938552505050602080830182905260408301829052606090920187905283546001810185559381522081519192600402019081906107a59082610cb8565b5060208281015160018301805460ff19169115159190911790556040808401516002808501919091556060909401516003909301929092556000858152600491829052828120859055925491516312a6505d60e21b81526001600160a01b0390921691634a9941749161081c918b918b9101610d78565b6020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190610c50565b60015460405191925084916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186906108a790869086908b90610db4565b60405180910390a350509695505050505050565b600080604083850312156108ce57600080fd5b50508035926020909101359150565b6001600160a01b03811681146108f257600080fd5b50565b60006020828403121561090757600080fd5b8135610912816108dd565b9392505050565b60006020828403121561092b57600080fd5b5035919050565b6000815180845260005b818110156109585760208185018101518683018201520161093c565b506000602082860101526020601f19601f83011685010191505092915050565b60808152600061098b6080830187610932565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109b957600080fd5b50813567ffffffffffffffff8111156109d157600080fd5b6020830191508360208285010111156109e957600080fd5b9250929050565b600080600080600060608688031215610a0857600080fd5b853567ffffffffffffffff80821115610a2057600080fd5b610a2c89838a016109a7565b90975095506020880135915080821115610a4557600080fd5b50610a52888289016109a7565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610a9357600080fd5b863567ffffffffffffffff80821115610aab57600080fd5b610ab78a838b016109a7565b90985096506020890135915080821115610ad057600080fd5b610adc8a838b016109a7565b90965094506040890135915080821115610af557600080fd5b818901915089601f830112610b0957600080fd5b813581811115610b1b57610b1b610a64565b604051601f8201601f19908116603f01168101908382118183101715610b4357610b43610a64565b816040528281528c6020848701011115610b5c57600080fd5b826020860160208301376000602084830101528096505050505050606087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610bf457607f821691505b602082108103610c1457634e487b7160e01b600052602260045260246000fd5b50919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215610c6257600080fd5b5051919050565b601f821115610cb357600081815260208120601f850160051c81016020861015610c905750805b601f850160051c820191505b81811015610caf57828155600101610c9c565b5050505b505050565b815167ffffffffffffffff811115610cd257610cd2610a64565b610ce681610ce08454610be0565b84610c69565b602080601f831160018114610d1b5760008415610d035750858301515b600019600386901b1c1916600185901b178555610caf565b600085815260208120601f198616915b82811015610d4a57888601518255948401946001909101908401610d2b565b5085821015610d685787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006060820152608060208201526000610d996080830185610932565b8281036040840152610dab8185610932565b95945050505050565b838152826020820152606060408201526000610dab606083018461093256fea2646970667358221220c324d7140e9a3d1af3d79e61c385889111fcf915450df6674ffa003e40949e0964736f6c63430008120033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c8063908bb29511610064578063908bb29514610170578063a0af81f014610191578063dc653511146101b1578063e09997d9146101c4578063e4c0aaf4146101f1578063fc548f081461021157600080fd5b80630c340a24146100a1578063311a6c56146100de5780634660ebbe14610100578063564a565d146101205780636cc6cde114610150575b600080fd5b3480156100ad57600080fd5b506000546100c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046108bb565b610231565b005b34801561010c57600080fd5b506100fe61011b3660046108f5565b6103d1565b34801561012c57600080fd5b5061014061013b366004610919565b61041d565b6040516100d59493929190610978565b34801561015c57600080fd5b506001546100c1906001600160a01b031681565b61018361017e3660046109f0565b6104eb565b6040519081526020016100d5565b34801561019d57600080fd5b506002546100c1906001600160a01b031681565b6101836101bf366004610a7a565b61055a565b3480156101d057600080fd5b506101836101df366004610919565b60046020526000908152604090205481565b3480156101fd57600080fd5b506100fe61020c3660046108f5565b6105b9565b34801561021d57600080fd5b506100fe61022c3660046108f5565b610605565b600082815260046020526040812054600380549192918390811061025757610257610b88565b6000918252602090912060015460049092020191506001600160a01b031633146102d65760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e2065786563757465206044820152643a3434b99760d91b60648201526084015b60405180910390fd5b806003015483111561031c5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b210393ab634b7339760891b60448201526064016102cd565b600181015460ff161561037d5760405162461bcd60e51b8152602060048201526024808201527f54686973206469737075746520686173206265656e2072756c656420616c726560448201526330b23c9760e11b60648201526084016102cd565b6001818101805460ff1916909117905560028101839055604051838152849033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a350505050565b6000546001600160a01b031633146103fb5760405162461bcd60e51b81526004016102cd90610b9e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003818154811061042d57600080fd5b906000526020600020906004020160009150905080600001805461045090610be0565b80601f016020809104026020016040519081016040528092919081815260200182805461047c90610be0565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505060018301546002840154600390940154929360ff9091169290915084565b60006105508686604051806020016040528060008152506040518060200160405280600081525088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610651915050565b9695505050505050565b60006105ae878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081528a93509150889050610651565b979650505050505050565b6000546001600160a01b031633146105e35760405162461bcd60e51b81526004016102cd90610b9e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461062f5760405162461bcd60e51b81526004016102cd90610b9e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600182116106af5760405162461bcd60e51b8152602060048201526024808201527f53686f756c64206265206174206c6561737420322072756c696e67206f70746960448201526337b7399760e11b60648201526084016102cd565b60015460405163c13517e160e01b81526001600160a01b039091169063c13517e19034906106e59086908c908c90600401610c1a565b60206040518083038185885af1158015610703573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107289190610c50565b600380546040805160a06020601f8d018190040282018101909252608081018b8152949550919382918c908c90819085018382808284376000920182905250938552505050602080830182905260408301829052606090920187905283546001810185559381522081519192600402019081906107a59082610cb8565b5060208281015160018301805460ff19169115159190911790556040808401516002808501919091556060909401516003909301929092556000858152600491829052828120859055925491516312a6505d60e21b81526001600160a01b0390921691634a9941749161081c918b918b9101610d78565b6020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190610c50565b60015460405191925084916001600160a01b03909116907f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e27186906108a790869086908b90610db4565b60405180910390a350509695505050505050565b600080604083850312156108ce57600080fd5b50508035926020909101359150565b6001600160a01b03811681146108f257600080fd5b50565b60006020828403121561090757600080fd5b8135610912816108dd565b9392505050565b60006020828403121561092b57600080fd5b5035919050565b6000815180845260005b818110156109585760208185018101518683018201520161093c565b506000602082860101526020601f19601f83011685010191505092915050565b60808152600061098b6080830187610932565b9415156020830152506040810192909252606090910152919050565b60008083601f8401126109b957600080fd5b50813567ffffffffffffffff8111156109d157600080fd5b6020830191508360208285010111156109e957600080fd5b9250929050565b600080600080600060608688031215610a0857600080fd5b853567ffffffffffffffff80821115610a2057600080fd5b610a2c89838a016109a7565b90975095506020880135915080821115610a4557600080fd5b50610a52888289016109a7565b96999598509660400135949350505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060808789031215610a9357600080fd5b863567ffffffffffffffff80821115610aab57600080fd5b610ab78a838b016109a7565b90985096506020890135915080821115610ad057600080fd5b610adc8a838b016109a7565b90965094506040890135915080821115610af557600080fd5b818901915089601f830112610b0957600080fd5b813581811115610b1b57610b1b610a64565b604051601f8201601f19908116603f01168101908382118183101715610b4357610b43610a64565b816040528281528c6020848701011115610b5c57600080fd5b826020860160208301376000602084830101528096505050505050606087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b600181811c90821680610bf457607f821691505b602082108103610c1457634e487b7160e01b600052602260045260246000fd5b50919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600060208284031215610c6257600080fd5b5051919050565b601f821115610cb357600081815260208120601f850160051c81016020861015610c905750805b601f850160051c820191505b81811015610caf57828155600101610c9c565b5050505b505050565b815167ffffffffffffffff811115610cd257610cd2610a64565b610ce681610ce08454610be0565b84610c69565b602080601f831160018114610d1b5760008415610d035750858301515b600019600386901b1c1916600185901b178555610caf565b600085815260208120601f198616915b82811015610d4a57888601518255948401946001909101908401610d2b565b5085821015610d685787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006060820152608060208201526000610d996080830185610932565b8281036040840152610dab8185610932565b95945050505050565b838152826020820152606060408201526000610dab606083018461093256fea2646970667358221220c324d7140e9a3d1af3d79e61c385889111fcf915450df6674ffa003e40949e0964736f6c63430008120033", - "devdoc": { - "events": { - "DisputeRequest(address,uint256,uint256,uint256,string)": { - "details": "To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.", - "params": { - "_arbitrableDisputeID": "The identifier of the dispute in the Arbitrable contract.", - "_arbitrator": "The arbitrator of the contract.", - "_externalDisputeID": "An identifier created outside Kleros by the protocol requesting arbitration.", - "_templateId": "The identifier of the dispute template. Should not be used with _templateUri.", - "_templateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrator": "The arbitrator giving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - } - }, - "kind": "dev", - "methods": { - "changeGovernor(address)": { - "details": "Changes the governor.", - "params": { - "_governor": "The address of the new governor." - } - }, - "constructor": { - "details": "Constructor", - "params": { - "_arbitrator": "Target global arbitrator for any disputes." - } - }, - "createDisputeForTemplate(bytes,string,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplate": "Dispute template.", - "_disputeTemplateDataMappings": "The data mappings.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "createDisputeForTemplateUri(bytes,string,uint256)": { - "details": "Calls createDispute function of the specified arbitrator to create a dispute. Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract.", - "params": { - "_arbitratorExtraData": "Extra data for the arbitrator of the dispute.", - "_disputeTemplateUri": "The URI to the dispute template. For example on IPFS: starting with '/ipfs/'.", - "_numberOfRulingOptions": "Number of ruling options." - }, - "returns": { - "disputeID": "Dispute id (on arbitrator side) of the created dispute." - } - }, - "rule(uint256,uint256)": { - "details": "To be called by the arbitrator of the dispute, to declare the winning ruling.", - "params": { - "_externalDisputeID": "ID of the dispute in arbitrator contract.", - "_ruling": "The ruling choice of the arbitration." - } - } - }, - "title": "DisputeResolver DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol.", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 9861, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "governor", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 9864, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitrator", - "offset": 0, - "slot": "1", - "type": "t_contract(IArbitratorV2)15461" - }, - { - "astId": 9867, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "templateRegistry", - "offset": 0, - "slot": "2", - "type": "t_contract(IDisputeTemplateRegistry)15627" - }, - { - "astId": 9871, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "disputes", - "offset": 0, - "slot": "3", - "type": "t_array(t_struct(DisputeStruct)9859_storage)dyn_storage" - }, - { - "astId": 9875, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitratorDisputeIDToLocalID", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_struct(DisputeStruct)9859_storage)dyn_storage": { - "base": "t_struct(DisputeStruct)9859_storage", - "encoding": "dynamic_array", - "label": "struct DisputeResolver.DisputeStruct[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_contract(IArbitratorV2)15461": { - "encoding": "inplace", - "label": "contract IArbitratorV2", - "numberOfBytes": "20" - }, - "t_contract(IDisputeTemplateRegistry)15627": { - "encoding": "inplace", - "label": "contract IDisputeTemplateRegistry", - "numberOfBytes": "20" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeStruct)9859_storage": { - "encoding": "inplace", - "label": "struct DisputeResolver.DisputeStruct", - "members": [ - { - "astId": 9852, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "arbitratorExtraData", - "offset": 0, - "slot": "0", - "type": "t_bytes_storage" - }, - { - "astId": 9854, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "isRuled", - "offset": 0, - "slot": "1", - "type": "t_bool" - }, - { - "astId": 9856, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "ruling", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 9858, - "contract": "src/arbitration/arbitrables/DisputeResolver.sol:DisputeResolver", - "label": "numberOfRulingOptions", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/chiadoDevnet/DisputeTemplateRegistry.json b/contracts/deployments/chiadoDevnet/DisputeTemplateRegistry.json deleted file mode 100644 index 2707009b3..000000000 --- a/contracts/deployments/chiadoDevnet/DisputeTemplateRegistry.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "address": "0x96E49552669ea81B8E9cE8694F7E4A55D8bFb957", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_templateId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "DisputeTemplate", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_templateTag", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateData", - "type": "string" - }, - { - "internalType": "string", - "name": "_templateDataMappings", - "type": "string" - } - ], - "name": "setDisputeTemplate", - "outputs": [ - { - "internalType": "uint256", - "name": "templateId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "templates", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x043c67386392003bc857ccfd218e1c4fef7470c085c30373136eb3735805c069", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x96E49552669ea81B8E9cE8694F7E4A55D8bFb957", - "transactionIndex": 0, - "gasUsed": "215830", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3f6f65b022261ae3e10b6c3ba0638d52998694e474e5d10cc731031c3b152c93", - "transactionHash": "0x043c67386392003bc857ccfd218e1c4fef7470c085c30373136eb3735805c069", - "logs": [], - "blockNumber": 5398215, - "cumulativeGasUsed": "215830", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "356abb1cf2a2e12b481e44f0376af297", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_templateId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"_templateTag\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"DisputeTemplate\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_templateTag\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"setDisputeTemplate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"templateId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A contract to maintain a registry of dispute templates.\",\"events\":{\"DisputeTemplate(uint256,string,string,string)\":{\"details\":\"To be emitted when a new dispute template is created.\",\"params\":{\"_templateData\":\"The template data.\",\"_templateDataMappings\":\"The data mappings.\",\"_templateId\":\"The identifier of the dispute template.\",\"_templateTag\":\"An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\"}}},\"kind\":\"dev\",\"methods\":{},\"title\":\"Dispute Template Registry\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitration/DisputeTemplateRegistry.sol\":\"DisputeTemplateRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/arbitration/DisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.18;\\n\\nimport \\\"./interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\n/// @title Dispute Template Registry\\n/// @dev A contract to maintain a registry of dispute templates.\\ncontract DisputeTemplateRegistry is IDisputeTemplateRegistry {\\n uint256 public templates;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId) {\\n templateId = templates++;\\n emit DisputeTemplate(templateId, _templateTag, _templateData, _templateDataMappings);\\n }\\n}\\n\",\"keccak256\":\"0xbc2d8ff9784d93f932199993fd58aab88fbc367268a10ffb7fe07a85826960c1\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitrableDisputeID The identifier of the dispute in the Arbitrable contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitrableDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x389326b1f749454ed179bdac2f9d6ce24a1ef944bbce976ca78b93f4e173354a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0x453943ba5ccc94b9b9cdfd4afd3678682d62d8b90fe16b43e90215387d2f6a51\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IDisputeTemplate\\n/// @notice Dispute Template interface.\\ninterface IDisputeTemplateRegistry {\\n /// @dev To be emitted when a new dispute template is created.\\n /// @param _templateId The identifier of the dispute template.\\n /// @param _templateTag An optional tag for the dispute template, such as \\\"registration\\\" or \\\"removal\\\".\\n /// @param _templateData The template data.\\n /// @param _templateDataMappings The data mappings.\\n event DisputeTemplate(\\n uint256 indexed _templateId,\\n string indexed _templateTag,\\n string _templateData,\\n string _templateDataMappings\\n );\\n\\n function setDisputeTemplate(\\n string memory _templateTag,\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external returns (uint256 templateId);\\n}\\n\",\"keccak256\":\"0x4b1b3f98d13e4a9a1c546dd45f98490f86e871cfc4b4be9a3fe4d29b3c99649c\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506102f1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80633a283d7d1461003b5780634a99417414610056575b600080fd5b61004460005481565b60405190815260200160405180910390f35b610044610064366004610172565b600080548180610073836101fa565b919050559050836040516100879190610245565b6040518091039020817ef7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff992485856040516100c092919061028d565b60405180910390a39392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126100f657600080fd5b813567ffffffffffffffff80821115610111576101116100cf565b604051601f8301601f19908116603f01168101908282118183101715610139576101396100cf565b8160405283815286602085880101111561015257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561018757600080fd5b833567ffffffffffffffff8082111561019f57600080fd5b6101ab878388016100e5565b945060208601359150808211156101c157600080fd5b6101cd878388016100e5565b935060408601359150808211156101e357600080fd5b506101f0868287016100e5565b9150509250925092565b60006001820161021a57634e487b7160e01b600052601160045260246000fd5b5060010190565b60005b8381101561023c578181015183820152602001610224565b50506000910152565b60008251610257818460208701610221565b9190910192915050565b60008151808452610279816020860160208601610221565b601f01601f19169290920160200192915050565b6040815260006102a06040830185610261565b82810360208401526102b28185610261565b9594505050505056fea26469706673582212208e28c2a1ac6bf992487f46d3bb5b26e186ac986099d0d98440c6107f111f92ab64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80633a283d7d1461003b5780634a99417414610056575b600080fd5b61004460005481565b60405190815260200160405180910390f35b610044610064366004610172565b600080548180610073836101fa565b919050559050836040516100879190610245565b6040518091039020817ef7cd7255d1073b4e136dd477c38ea0020c051ab17110cc5bfab0c840ff992485856040516100c092919061028d565b60405180910390a39392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126100f657600080fd5b813567ffffffffffffffff80821115610111576101116100cf565b604051601f8301601f19908116603f01168101908282118183101715610139576101396100cf565b8160405283815286602085880101111561015257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561018757600080fd5b833567ffffffffffffffff8082111561019f57600080fd5b6101ab878388016100e5565b945060208601359150808211156101c157600080fd5b6101cd878388016100e5565b935060408601359150808211156101e357600080fd5b506101f0868287016100e5565b9150509250925092565b60006001820161021a57634e487b7160e01b600052601160045260246000fd5b5060010190565b60005b8381101561023c578181015183820152602001610224565b50506000910152565b60008251610257818460208701610221565b9190910192915050565b60008151808452610279816020860160208601610221565b601f01601f19169290920160200192915050565b6040815260006102a06040830185610261565b82810360208401526102b28185610261565b9594505050505056fea26469706673582212208e28c2a1ac6bf992487f46d3bb5b26e186ac986099d0d98440c6107f111f92ab64736f6c63430008120033", - "devdoc": { - "details": "A contract to maintain a registry of dispute templates.", - "events": { - "DisputeTemplate(uint256,string,string,string)": { - "details": "To be emitted when a new dispute template is created.", - "params": { - "_templateData": "The template data.", - "_templateDataMappings": "The data mappings.", - "_templateId": "The identifier of the dispute template.", - "_templateTag": "An optional tag for the dispute template, such as \"registration\" or \"removal\"." - } - } - }, - "kind": "dev", - "methods": {}, - "title": "Dispute Template Registry", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 85, - "contract": "src/arbitration/DisputeTemplateRegistry.sol:DisputeTemplateRegistry", - "label": "templates", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/chiadoDevnet/ForeignGatewayOnGnosis.json b/contracts/deployments/chiadoDevnet/ForeignGatewayOnGnosis.json deleted file mode 100644 index 342882e2f..000000000 --- a/contracts/deployments/chiadoDevnet/ForeignGatewayOnGnosis.json +++ /dev/null @@ -1,788 +0,0 @@ -{ - "address": "0x078dAd05373d19d7fd6829735b765F12242a4300", - "abi": [ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - } - ], - "name": "ArbitrationCostModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "_foreignBlockHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "_foreignArbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_foreignDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "CrossChainDisputeOutgoing", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_NB_OF_JURORS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - } - ], - "name": "changeCourtJurorFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_homeGateway", - "type": "address" - } - ], - "name": "changeHomeGateway", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_veaOutbox", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "name": "changeVea", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "deprecatedVeaOutbox", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "deprecatedVeaOutboxExpiration", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_disputeHash", - "type": "bytes32" - } - ], - "name": "disputeHashToForeignID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "disputeHashtoDisputeData", - "outputs": [ - { - "internalType": "uint248", - "name": "id", - "type": "uint248" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "address", - "name": "arbitrable", - "type": "address" - }, - { - "internalType": "uint256", - "name": "paid", - "type": "uint256" - }, - { - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "name": "feeForJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "homeChainID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "homeGateway", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_veaOutbox", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_homeChainID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_homeGateway", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_messageSender", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_disputeHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "relayRule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "senderGateway", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "veaOutbox", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_disputeHash", - "type": "bytes32" - } - ], - "name": "withdrawFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "transactionHash": "0x01874fb34459c6ed77c5cb60dfd0cfb40aebacc46073f1d06df7e1b47e790705", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x078dAd05373d19d7fd6829735b765F12242a4300", - "transactionIndex": 1, - "gasUsed": "265335", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7ede631dec7eef5b52cd5719c77b2df2768ce5716f943b49d0484d77f81d9568", - "transactionHash": "0x01874fb34459c6ed77c5cb60dfd0cfb40aebacc46073f1d06df7e1b47e790705", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 6246439, - "transactionHash": "0x01874fb34459c6ed77c5cb60dfd0cfb40aebacc46073f1d06df7e1b47e790705", - "address": "0x078dAd05373d19d7fd6829735b765F12242a4300", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x7ede631dec7eef5b52cd5719c77b2df2768ce5716f943b49d0484d77f81d9568" - } - ], - "blockNumber": 6246439, - "cumulativeGasUsed": "291331", - "status": 1, - "byzantium": true - }, - "args": [ - "0xA4096fDA5291D5bbDD5Ed0D6CF2AF98229168Ace", - "0xbe203094000000000000000000000000f50e77f2a2b6138d16c6c7511562e5c33c4b15a3000000000000000000000000dfd7adeb43d46fa3f16fb3e27f7fe85c3f5bd89d0000000000000000000000000000000000000000000000000000000000066eed000000000000000000000000920856556ef06ff7d337af964d1954862f8da049" - ], - "numDeployments": 1, - "solcInputHash": "55cffe29f75540cd17d37d1c4bbabcf9", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Simon Malatrait \",\"details\":\"This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_implementation`. If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\"}},\"stateVariables\":{\"IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor. NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\"}},\"title\":\"UUPS Proxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/UUPSProxy.sol\":\"UUPSProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.18;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x828711038a141a5cfcef6f24bb33af8cbf7f336c69fb969d7d0be0646667382b\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516102fe3803806102fe83398101604081905261002f9161014d565b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010c576000826001600160a01b031682604051610075919061021b565b600060405180830381855af49150503d80600081146100b0576040519150601f19603f3d011682016040523d82523d6000602084013e6100b5565b606091505b505090508061010a5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050610237565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561014457818101518382015260200161012c565b50506000910152565b6000806040838503121561016057600080fd5b82516001600160a01b038116811461017757600080fd5b60208401519092506001600160401b038082111561019457600080fd5b818501915085601f8301126101a857600080fd5b8151818111156101ba576101ba610113565b604051601f8201601f19908116603f011681019083821181831017156101e2576101e2610113565b816040528281528860208487010111156101fb57600080fd5b61020c836020830160208801610129565b80955050505050509250929050565b6000825161022d818460208701610129565b9190910192915050565b60b9806102456000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220e77e937000f74af50aa176fcbe90b8f19064161349c6b089e5987215280177d364736f6c63430008120033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220e77e937000f74af50aa176fcbe90b8f19064161349c6b089e5987215280177d364736f6c63430008120033", - "execute": { - "methodName": "initialize", - "args": [ - "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "0xdFd7aDEb43d46FA3f16FB3e27F7fe85c3f5BD89D", - "0x0000000000000000000000000000000000000000000000000000000000066eed", - "0x920856556EF06ff7D337Af964D1954862f8Da049" - ] - }, - "implementation": "0xA4096fDA5291D5bbDD5Ed0D6CF2AF98229168Ace", - "devdoc": { - "author": "Simon Malatrait ", - "details": "This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.We refer to the Proxiable contract (as per ERC-1822) with `implementation`.", - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the upgradeable proxy with an initial implementation specified by `_implementation`. If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor." - } - }, - "stateVariables": { - "IMPLEMENTATION_SLOT": { - "details": "Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor. NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)" - } - }, - "title": "UUPS Proxy", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/chiadoDevnet/ForeignGatewayOnGnosis_Implementation.json b/contracts/deployments/chiadoDevnet/ForeignGatewayOnGnosis_Implementation.json deleted file mode 100644 index 87cd88551..000000000 --- a/contracts/deployments/chiadoDevnet/ForeignGatewayOnGnosis_Implementation.json +++ /dev/null @@ -1,1118 +0,0 @@ -{ - "address": "0xA4096fDA5291D5bbDD5Ed0D6CF2AF98229168Ace", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - } - ], - "name": "ArbitrationCostModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "_foreignBlockHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "_foreignArbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_foreignDisputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_choices", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "CrossChainDisputeOutgoing", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_NB_OF_JURORS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - } - ], - "name": "changeCourtJurorFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_homeGateway", - "type": "address" - } - ], - "name": "changeHomeGateway", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_veaOutbox", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "name": "changeVea", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_choices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "deprecatedVeaOutbox", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "deprecatedVeaOutboxExpiration", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_disputeHash", - "type": "bytes32" - } - ], - "name": "disputeHashToForeignID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "disputeHashtoDisputeData", - "outputs": [ - { - "internalType": "uint248", - "name": "id", - "type": "uint248" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "address", - "name": "arbitrable", - "type": "address" - }, - { - "internalType": "uint256", - "name": "paid", - "type": "uint256" - }, - { - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "name": "feeForJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "homeChainID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "homeGateway", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_veaOutbox", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_homeChainID", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_homeGateway", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_messageSender", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_disputeHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "relayRule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "senderGateway", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "veaOutbox", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_disputeHash", - "type": "bytes32" - } - ], - "name": "withdrawFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xf709a57c35ca26594700e4b648185ecb948e1838772c51ed877062e8e241ef8e", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0xA4096fDA5291D5bbDD5Ed0D6CF2AF98229168Ace", - "transactionIndex": 1, - "gasUsed": "1301308", - "logsBloom": "0x00000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x51d614145cf5359099c84b1111d69ab2374cba6a0013c68e70b07fd97425d3f0", - "transactionHash": "0xf709a57c35ca26594700e4b648185ecb948e1838772c51ed877062e8e241ef8e", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 6246438, - "transactionHash": "0xf709a57c35ca26594700e4b648185ecb948e1838772c51ed877062e8e241ef8e", - "address": "0xA4096fDA5291D5bbDD5Ed0D6CF2AF98229168Ace", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "logIndex": 1, - "blockHash": "0x51d614145cf5359099c84b1111d69ab2374cba6a0013c68e70b07fd97425d3f0" - } - ], - "blockNumber": 6246438, - "cumulativeGasUsed": "1388146", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "55cffe29f75540cd17d37d1c4bbabcf9", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDelegateCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_accepted\",\"type\":\"bool\"}],\"name\":\"AcceptedFeeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"}],\"name\":\"ArbitrationCostModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_foreignBlockHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_foreignArbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_foreignDisputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_choices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"CrossChainDisputeOutgoing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"}],\"name\":\"DisputeCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"_feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_rateInEth\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_rateDecimals\",\"type\":\"uint8\"}],\"name\":\"NewCurrencyRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IArbitrableV2\",\"name\":\"_arbitrable\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"Ruling\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_NB_OF_JURORS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"arbitrationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"_courtID\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"_feeForJuror\",\"type\":\"uint256\"}],\"name\":\"changeCourtJurorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_homeGateway\",\"type\":\"address\"}],\"name\":\"changeHomeGateway\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_veaOutbox\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"changeVea\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_choices\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"createDispute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"currentRuling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deprecatedVeaOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deprecatedVeaOutboxExpiration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_disputeHash\",\"type\":\"bytes32\"}],\"name\":\"disputeHashToForeignID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"disputeHashtoDisputeData\",\"outputs\":[{\"internalType\":\"uint248\",\"name\":\"id\",\"type\":\"uint248\"},{\"internalType\":\"bool\",\"name\":\"ruled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"arbitrable\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"paid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"name\":\"feeForJuror\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"homeChainID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"homeGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_veaOutbox\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_homeChainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_homeGateway\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messageSender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_disputeHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"relayRule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"senderGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"veaOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_disputeHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"AcceptedFeeToken(address,bool)\":{\"details\":\"To be emitted when an ERC20 token is added or removed as a method to pay fees.\",\"params\":{\"_accepted\":\"Whether the token is accepted or not.\",\"_token\":\"The ERC20 token.\"}},\"CrossChainDisputeOutgoing(bytes32,address,uint256,uint256,bytes)\":{\"details\":\"To be emitted when a dispute is sent to the IHomeGateway.\",\"params\":{\"_choices\":\"The number of choices the arbitrator can choose from in this dispute.\",\"_extraData\":\"Any extra data to attach.\",\"_foreignArbitrable\":\"The address of the Arbitrable contract.\",\"_foreignBlockHash\":\"foreignBlockHash\",\"_foreignDisputeID\":\"The identifier of the dispute in the Arbitrable contract.\"}},\"DisputeCreation(uint256,address)\":{\"details\":\"To be emitted when a dispute is created.\",\"params\":{\"_arbitrable\":\"The contract which created the dispute.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"NewCurrencyRate(address,uint64,uint8)\":{\"details\":\"To be emitted when the fee for a particular ERC20 token is updated.\",\"params\":{\"_feeToken\":\"The ERC20 token.\",\"_rateDecimals\":\"The new decimals of the fee token rate.\",\"_rateInEth\":\"The new rate of the fee token in ETH.\"}},\"Ruling(address,uint256,uint256)\":{\"details\":\"To be raised when a ruling is given.\",\"params\":{\"_arbitrable\":\"The arbitrable receiving the ruling.\",\"_disputeID\":\"The identifier of the dispute in the Arbitrator contract.\",\"_ruling\":\"The ruling which was given.\"}},\"Upgraded(address)\":{\"params\":{\"newImplementation\":\"Address of the new implementation the proxy is now forwarding calls to.\"}}},\"kind\":\"dev\",\"methods\":{\"arbitrationCost(bytes)\":{\"details\":\"Compute the cost of arbitration denominated in the native currency, typically ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\"},\"returns\":{\"cost\":\"The arbitration cost in ETH.\"}},\"arbitrationCost(bytes,address)\":{\"details\":\"Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeToken\":\"The ERC20 token used to pay fees.\"},\"returns\":{\"_0\":\"The arbitration cost in `_feeToken`.\"}},\"changeCourtJurorFee(uint96,uint256)\":{\"details\":\"Changes the `feeForJuror` property value of a specified court.\",\"params\":{\"_courtID\":\"The ID of the court on the v2 arbitrator. Not to be confused with the courtID on KlerosLiquid.\",\"_feeForJuror\":\"The new value for the `feeForJuror` property value.\"}},\"changeGovernor(address)\":{\"details\":\"Changes the governor.\",\"params\":{\"_governor\":\"The address of the new governor.\"}},\"changeHomeGateway(address)\":{\"details\":\"Changes the home gateway.\",\"params\":{\"_homeGateway\":\"The address of the new home gateway.\"}},\"changeVea(address,uint256)\":{\"details\":\"Changes the outbox.\",\"params\":{\"_gracePeriod\":\"The duration to accept messages from the deprecated bridge (if at all).\",\"_veaOutbox\":\"The address of the new outbox.\"}},\"constructor\":{\"details\":\"Constructor, initializing the implementation to reduce attack surface.\"},\"createDispute(uint256,bytes)\":{\"details\":\"Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"disputeID\":\"The identifier of the dispute created.\"}},\"createDispute(uint256,bytes,address,uint256)\":{\"details\":\"Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).\",\"params\":{\"_extraData\":\"Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\",\"_feeAmount\":\"Amount of the ERC20 token used to pay fees.\",\"_feeToken\":\"The ERC20 token used to pay fees.\",\"_numberOfChoices\":\"The number of choices the arbitrator can choose from in this dispute.\"},\"returns\":{\"_0\":\"The identifier of the dispute created.\"}},\"disputeHashToForeignID(bytes32)\":{\"details\":\"Looks up the local foreign disputeID for a disputeHash\",\"params\":{\"_disputeHash\":\"dispute hash\"}},\"initialize(address,address,uint256,address)\":{\"details\":\"Constructs the `PolicyRegistry` contract.\",\"params\":{\"_governor\":\"The governor's address.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.\",\"params\":{\"data\":\"Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\",\"newImplementation\":\"Address of the new implementation contract.\"}},\"withdrawFees(bytes32)\":{\"params\":{\"_disputeHash\":\"The dispute hash for which to withdraw the fees.\"}}},\"stateVariables\":{\"homeChainID\":{\"return\":\"The chain ID where the corresponding home gateway is deployed.\",\"returns\":{\"_0\":\"The chain ID where the corresponding home gateway is deployed.\"}},\"homeGateway\":{\"return\":\"The address of the corresponding home gateway.\",\"returns\":{\"_0\":\"The address of the corresponding home gateway.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"FailedDelegateCall()\":[{\"notice\":\"Failed Delegated call\"}],\"InvalidImplementation(address)\":[{\"notice\":\"The `implementation` is not UUPS-compliant\"}]},\"events\":{\"Upgraded(address)\":{\"notice\":\"Emitted when the `implementation` has been successfully upgraded.\"}},\"kind\":\"user\",\"methods\":{\"relayRule(address,bytes32,uint256,address)\":{\"notice\":\"Relay the rule call from the home gateway to the arbitrable.\"},\"withdrawFees(bytes32)\":{\"notice\":\"Reimburses the dispute fees to the relayer who paid for these fees on the home chain.\"}},\"notice\":\"Foreign Gateway Counterpart of `HomeGateway`\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/gateway/ForeignGateway.sol\":\"ForeignGateway\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@kleros/vea-contracts/src/interfaces/gateways/IReceiverGateway.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\ninterface IReceiverGateway {\\n function veaOutbox() external view returns (address);\\n\\n function senderGateway() external view returns (address);\\n}\\n\",\"keccak256\":\"0xde6bdbe57ced7c1e79d62dca23aa8c2322e031da91ceac22cefd185f1e3740ef\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitrableV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IArbitratorV2.sol\\\";\\n\\n/// @title IArbitrableV2\\n/// @notice Arbitrable interface.\\n/// When developing arbitrable contracts, we need to:\\n/// - Define the action taken when a ruling is received by the contract.\\n/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData);\\ninterface IArbitrableV2 {\\n /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.\\n /// @param _arbitrator The arbitrator of the contract.\\n /// @param _arbitrableDisputeID The identifier of the dispute in the Arbitrable contract.\\n /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.\\n /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.\\n /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.\\n event DisputeRequest(\\n IArbitratorV2 indexed _arbitrator,\\n uint256 indexed _arbitrableDisputeID,\\n uint256 _externalDisputeID,\\n uint256 _templateId,\\n string _templateUri\\n );\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrator The arbitrator giving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev Give a ruling for a dispute.\\n /// Must be called by the arbitrator.\\n /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling Ruling given by the arbitrator.\\n /// Note that 0 is reserved for \\\"Not able/wanting to make a decision\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external;\\n}\\n\",\"keccak256\":\"0x389326b1f749454ed179bdac2f9d6ce24a1ef944bbce976ca78b93f4e173354a\",\"license\":\"MIT\"},\"src/arbitration/interfaces/IArbitratorV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IArbitrableV2.sol\\\";\\n\\n/// @title Arbitrator\\n/// Arbitrator interface that implements the new arbitration standard.\\n/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most.\\n/// When developing arbitrator contracts we need to:\\n/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).\\n/// - Define the functions for cost display (arbitrationCost).\\n/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).\\ninterface IArbitratorV2 {\\n /// @dev To be emitted when a dispute is created.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _arbitrable The contract which created the dispute.\\n event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable);\\n\\n /// @dev To be raised when a ruling is given.\\n /// @param _arbitrable The arbitrable receiving the ruling.\\n /// @param _disputeID The identifier of the dispute in the Arbitrator contract.\\n /// @param _ruling The ruling which was given.\\n event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling);\\n\\n /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees.\\n /// @param _token The ERC20 token.\\n /// @param _accepted Whether the token is accepted or not.\\n event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted);\\n\\n /// @dev To be emitted when the fee for a particular ERC20 token is updated.\\n /// @param _feeToken The ERC20 token.\\n /// @param _rateInEth The new rate of the fee token in ETH.\\n /// @param _rateDecimals The new decimals of the fee token rate.\\n event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals);\\n\\n /// @dev Create a dispute and pay for the fees in the native currency, typically ETH.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData\\n ) external payable returns (uint256 disputeID);\\n\\n /// @dev Create a dispute and pay for the fees in a supported ERC20 token.\\n /// Must be called by the arbitrable contract.\\n /// Must pay at least arbitrationCost(_extraData).\\n /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @param _feeAmount Amount of the ERC20 token used to pay fees.\\n /// @return disputeID The identifier of the dispute created.\\n function createDispute(\\n uint256 _numberOfChoices,\\n bytes calldata _extraData,\\n IERC20 _feeToken,\\n uint256 _feeAmount\\n ) external returns (uint256 disputeID);\\n\\n /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @return cost The arbitration cost in ETH.\\n function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost);\\n\\n /// @dev Compute the cost of arbitration denominated in `_feeToken`.\\n /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.\\n /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).\\n /// @param _feeToken The ERC20 token used to pay fees.\\n /// @return cost The arbitration cost in `_feeToken`.\\n function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost);\\n\\n /// @dev Gets the current ruling of a specified dispute.\\n /// @param _disputeID The ID of the dispute.\\n /// @return ruling The current ruling.\\n /// @return tied Whether it's a tie or not.\\n /// @return overridden Whether the ruling was overridden by appeal funding or not.\\n function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden);\\n}\\n\",\"keccak256\":\"0x453943ba5ccc94b9b9cdfd4afd3678682d62d8b90fe16b43e90215387d2f6a51\",\"license\":\"MIT\"},\"src/gateway/ForeignGateway.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere, @shalzz]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./interfaces/IForeignGateway.sol\\\";\\nimport \\\"../proxy/UUPSProxiable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/// Foreign Gateway\\n/// Counterpart of `HomeGateway`\\ncontract ForeignGateway is IForeignGateway, UUPSProxiable, Initializable {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n struct DisputeData {\\n uint248 id;\\n bool ruled;\\n address arbitrable;\\n uint256 paid;\\n address relayer;\\n }\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n event ArbitrationCostModified(uint96 indexed _courtID, uint256 _feeForJuror);\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute.\\n uint256 internal localDisputeID; // The disputeID must start from 1 as the KlerosV1 proxy governor depends on this implementation. We now also depend on localDisputeID not ever being zero.\\n mapping(uint96 => uint256) public feeForJuror; // feeForJuror[v2CourtID], it mirrors the value on KlerosCore.\\n address public governor;\\n address public veaOutbox;\\n uint256 public override homeChainID;\\n address public override homeGateway;\\n address public deprecatedVeaOutbox;\\n uint256 public deprecatedVeaOutboxExpiration;\\n mapping(bytes32 => DisputeData) public disputeHashtoDisputeData;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyFromVea(address _messageSender) {\\n require(\\n veaOutbox == msg.sender ||\\n (block.timestamp < deprecatedVeaOutboxExpiration && deprecatedVeaOutbox == msg.sender),\\n \\\"Access not allowed: Vea Outbox only.\\\"\\n );\\n require(_messageSender == homeGateway, \\\"Access not allowed: HomeGateway only.\\\");\\n _;\\n }\\n\\n modifier onlyByGovernor() {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor, initializing the implementation to reduce attack surface.\\n constructor() {\\n _disableInitializers();\\n }\\n\\n /// @dev Constructs the `PolicyRegistry` contract.\\n /// @param _governor The governor's address.\\n function initialize(\\n address _governor,\\n address _veaOutbox,\\n uint256 _homeChainID,\\n address _homeGateway\\n ) external reinitializer(1) {\\n governor = _governor;\\n veaOutbox = _veaOutbox;\\n homeChainID = _homeChainID;\\n homeGateway = _homeGateway;\\n localDisputeID = 1;\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Access Control to perform implementation upgrades (UUPS Proxiable)\\n * @dev Only the governor can perform upgrades (`onlyByGovernor`)\\n */\\n function _authorizeUpgrade(address) internal view override onlyByGovernor {\\n // NOP\\n }\\n\\n /// @dev Changes the governor.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n governor = _governor;\\n }\\n\\n /// @dev Changes the outbox.\\n /// @param _veaOutbox The address of the new outbox.\\n /// @param _gracePeriod The duration to accept messages from the deprecated bridge (if at all).\\n function changeVea(address _veaOutbox, uint256 _gracePeriod) external onlyByGovernor {\\n // grace period to relay the remaining messages which are still going through the deprecated bridge.\\n deprecatedVeaOutboxExpiration = block.timestamp + _gracePeriod;\\n deprecatedVeaOutbox = veaOutbox;\\n veaOutbox = _veaOutbox;\\n }\\n\\n /// @dev Changes the home gateway.\\n /// @param _homeGateway The address of the new home gateway.\\n function changeHomeGateway(address _homeGateway) external {\\n require(governor == msg.sender, \\\"Access not allowed: Governor only.\\\");\\n homeGateway = _homeGateway;\\n }\\n\\n /// @dev Changes the `feeForJuror` property value of a specified court.\\n /// @param _courtID The ID of the court on the v2 arbitrator. Not to be confused with the courtID on KlerosLiquid.\\n /// @param _feeForJuror The new value for the `feeForJuror` property value.\\n function changeCourtJurorFee(uint96 _courtID, uint256 _feeForJuror) external onlyByGovernor {\\n feeForJuror[_courtID] = _feeForJuror;\\n emit ArbitrationCostModified(_courtID, _feeForJuror);\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 _choices,\\n bytes calldata _extraData\\n ) external payable override returns (uint256 disputeID) {\\n require(msg.value >= arbitrationCost(_extraData), \\\"Not paid enough for arbitration\\\");\\n\\n disputeID = localDisputeID++;\\n uint256 chainID;\\n assembly {\\n chainID := chainid()\\n }\\n bytes32 disputeHash = keccak256(\\n abi.encodePacked(\\n \\\"createDispute\\\",\\n blockhash(block.number - 1),\\n chainID,\\n msg.sender,\\n disputeID,\\n _choices,\\n _extraData\\n )\\n );\\n\\n disputeHashtoDisputeData[disputeHash] = DisputeData({\\n id: uint248(disputeID),\\n arbitrable: msg.sender,\\n paid: msg.value,\\n relayer: address(0),\\n ruled: false\\n });\\n\\n emit CrossChainDisputeOutgoing(blockhash(block.number - 1), msg.sender, disputeID, _choices, _extraData);\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function createDispute(\\n uint256 /*_choices*/,\\n bytes calldata /*_extraData*/,\\n IERC20 /*_feeToken*/,\\n uint256 /*_feeAmount*/\\n ) external pure override returns (uint256) {\\n revert(\\\"Not supported\\\");\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function arbitrationCost(bytes calldata _extraData) public view override returns (uint256 cost) {\\n (uint96 courtID, uint256 minJurors) = extraDataToCourtIDMinJurors(_extraData);\\n cost = feeForJuror[courtID] * minJurors;\\n }\\n\\n /// @inheritdoc IArbitratorV2\\n function arbitrationCost(\\n bytes calldata /*_extraData*/,\\n IERC20 /*_feeToken*/\\n ) public pure override returns (uint256 /*cost*/) {\\n revert(\\\"Not supported\\\");\\n }\\n\\n /// @inheritdoc IForeignGateway\\n function relayRule(\\n address _messageSender,\\n bytes32 _disputeHash,\\n uint256 _ruling,\\n address _relayer\\n ) external override onlyFromVea(_messageSender) {\\n DisputeData storage dispute = disputeHashtoDisputeData[_disputeHash];\\n\\n require(dispute.id != 0, \\\"Dispute does not exist\\\");\\n require(!dispute.ruled, \\\"Cannot rule twice\\\");\\n\\n dispute.ruled = true;\\n dispute.relayer = _relayer;\\n\\n IArbitrableV2 arbitrable = IArbitrableV2(dispute.arbitrable);\\n arbitrable.rule(dispute.id, _ruling);\\n }\\n\\n /// @inheritdoc IForeignGateway\\n function withdrawFees(bytes32 _disputeHash) external override {\\n DisputeData storage dispute = disputeHashtoDisputeData[_disputeHash];\\n require(dispute.id != 0, \\\"Dispute does not exist\\\");\\n require(dispute.ruled, \\\"Not ruled yet\\\");\\n\\n uint256 amount = dispute.paid;\\n dispute.paid = 0;\\n payable(dispute.relayer).transfer(amount);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @inheritdoc IForeignGateway\\n function disputeHashToForeignID(bytes32 _disputeHash) external view override returns (uint256) {\\n return disputeHashtoDisputeData[_disputeHash].id;\\n }\\n\\n /// @inheritdoc IReceiverGateway\\n function senderGateway() external view override returns (address) {\\n return homeGateway;\\n }\\n\\n function currentRuling(\\n uint256 /*_disputeID*/\\n ) public pure returns (uint256 /*ruling*/, bool /*tied*/, bool /*overridden*/) {\\n revert(\\\"Not supported\\\");\\n }\\n\\n // ************************ //\\n // * Internal * //\\n // ************************ //\\n\\n function extraDataToCourtIDMinJurors(\\n bytes memory _extraData\\n ) internal view returns (uint96 courtID, uint256 minJurors) {\\n // Note that here we ignore DisputeKitID\\n if (_extraData.length >= 64) {\\n assembly {\\n // solium-disable-line security/no-inline-assembly\\n courtID := mload(add(_extraData, 0x20))\\n minJurors := mload(add(_extraData, 0x40))\\n }\\n if (feeForJuror[courtID] == 0) courtID = 0;\\n if (minJurors == 0) minJurors = DEFAULT_NB_OF_JURORS;\\n } else {\\n courtID = 0;\\n minJurors = DEFAULT_NB_OF_JURORS;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf79f183f51d6ec371c0bc6681fe794570d20e2bb7ed4c594df909f41b34527ad\",\"license\":\"MIT\"},\"src/gateway/interfaces/IForeignGateway.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere, @shalzz]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"../../arbitration/interfaces/IArbitratorV2.sol\\\";\\nimport \\\"@kleros/vea-contracts/src/interfaces/gateways/IReceiverGateway.sol\\\";\\n\\ninterface IForeignGateway is IArbitratorV2, IReceiverGateway {\\n /// @dev To be emitted when a dispute is sent to the IHomeGateway.\\n /// @param _foreignBlockHash foreignBlockHash\\n /// @param _foreignArbitrable The address of the Arbitrable contract.\\n /// @param _foreignDisputeID The identifier of the dispute in the Arbitrable contract.\\n /// @param _choices The number of choices the arbitrator can choose from in this dispute.\\n /// @param _extraData Any extra data to attach.\\n event CrossChainDisputeOutgoing(\\n bytes32 _foreignBlockHash,\\n address indexed _foreignArbitrable,\\n uint256 indexed _foreignDisputeID,\\n uint256 _choices,\\n bytes _extraData\\n );\\n\\n /// Relay the rule call from the home gateway to the arbitrable.\\n function relayRule(address _messageSender, bytes32 _disputeHash, uint256 _ruling, address _forwarder) external;\\n\\n /// Reimburses the dispute fees to the relayer who paid for these fees on the home chain.\\n /// @param _disputeHash The dispute hash for which to withdraw the fees.\\n function withdrawFees(bytes32 _disputeHash) external;\\n\\n /// @dev Looks up the local foreign disputeID for a disputeHash\\n /// @param _disputeHash dispute hash\\n function disputeHashToForeignID(bytes32 _disputeHash) external view returns (uint256);\\n\\n /// @return The chain ID where the corresponding home gateway is deployed.\\n function homeChainID() external view returns (uint256);\\n\\n /// @return The address of the corresponding home gateway.\\n function homeGateway() external view returns (address);\\n}\\n\",\"keccak256\":\"0xf59d1a9cd8b601f82ea3871d48bd9181e012a650e8f075e2c23c04df00ca6fe8\",\"license\":\"MIT\"},\"src/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) \\n\\npragma solidity 0.8.18;\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to the proxy constructor\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Storage of the initializable contract.\\n *\\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n * when using with upgradeable contracts.\\n *\\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n */\\n struct InitializableStorage {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n uint64 _initialized;\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool _initializing;\\n }\\n\\n // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1))\\n bytes32 private constant _INITIALIZABLE_STORAGE =\\n 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e;\\n\\n /**\\n * @dev The contract is already initialized.\\n */\\n error AlreadyInitialized();\\n\\n /**\\n * @dev The contract is not initializing.\\n */\\n error NotInitializing();\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint64 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n bool isTopLevelCall = !$._initializing;\\n uint64 initialized = $._initialized;\\n if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = 1;\\n if (isTopLevelCall) {\\n $._initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n $._initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint64 version) {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing || $._initialized >= version) {\\n revert AlreadyInitialized();\\n }\\n $._initialized = version;\\n $._initializing = true;\\n _;\\n $._initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n _checkInitializing();\\n _;\\n }\\n\\n /**\\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n */\\n function _checkInitializing() internal view virtual {\\n if (!_isInitializing()) {\\n revert NotInitializing();\\n }\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n // solhint-disable-next-line var-name-mixedcase\\n InitializableStorage storage $ = _getInitializableStorage();\\n\\n if ($._initializing) {\\n revert AlreadyInitialized();\\n }\\n if ($._initialized != type(uint64).max) {\\n $._initialized = type(uint64).max;\\n emit Initialized(type(uint64).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint64) {\\n return _getInitializableStorage()._initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _getInitializableStorage()._initializing;\\n }\\n\\n /**\\n * @dev Returns a pointer to the storage namespace.\\n */\\n // solhint-disable-next-line var-name-mixedcase\\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n assembly {\\n $.slot := _INITIALIZABLE_STORAGE\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb5f734e0092e195ebee187ede1ecb16bd1ffe684addf1ea895d8351866f1846f\",\"license\":\"MIT\"},\"src/proxy/UUPSProxiable.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.18;\\n\\n/**\\n * @title UUPS Proxiable\\n * @author Simon Malatrait \\n * @dev This contract implements an upgradeability mechanism designed for UUPS proxies.\\n * The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy.\\n *\\n * IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy.\\n * This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSProxiable` with a custom implementation of upgrades.\\n *\\n * The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism.\\n */\\nabstract contract UUPSProxiable {\\n // ************************************* //\\n // * Event * //\\n // ************************************* //\\n\\n /**\\n * Emitted when the `implementation` has been successfully upgraded.\\n * @param newImplementation Address of the new implementation the proxy is now forwarding calls to.\\n */\\n event Upgraded(address indexed newImplementation);\\n\\n // ************************************* //\\n // * Error * //\\n // ************************************* //\\n\\n /**\\n * @dev The call is from an unauthorized context.\\n */\\n error UUPSUnauthorizedCallContext();\\n\\n /**\\n * @dev The storage `slot` is unsupported as a UUID.\\n */\\n error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n /// The `implementation` is not UUPS-compliant\\n error InvalidImplementation(address implementation);\\n\\n /// Failed Delegated call\\n error FailedDelegateCall();\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Storage variable of the proxiable contract address.\\n * It is used to check whether or not the current call is from the proxy.\\n */\\n address private immutable __self = address(this);\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract.\\n * @dev Called by {upgradeToAndCall}.\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Upgrade mechanism including access control and UUPS-compliance.\\n * @param newImplementation Address of the new implementation contract.\\n * @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n *\\n * @dev Reverts if the execution is not performed via delegatecall or the execution\\n * context is not of a proxy with an ERC1967-compliant implementation pointing to self.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual {\\n _authorizeUpgrade(newImplementation);\\n\\n /* Check that the execution is being performed through a delegatecall call and that the execution context is\\n a proxy contract with an implementation (as defined in ERC1967) pointing to self. */\\n if (address(this) == __self || _getImplementation() != __self) {\\n revert UUPSUnauthorizedCallContext();\\n }\\n\\n try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n if (slot != IMPLEMENTATION_SLOT) {\\n revert UUPSUnsupportedProxiableUUID(slot);\\n }\\n // Store the new implementation address to the implementation storage slot.\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, newImplementation)\\n }\\n emit Upgraded(newImplementation);\\n\\n if (data.length != 0) {\\n // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted.\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n revert FailedDelegateCall();\\n }\\n }\\n } catch {\\n revert InvalidImplementation(newImplementation);\\n }\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /**\\n * @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the\\n * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the if statement.\\n */\\n function proxiableUUID() external view virtual returns (bytes32) {\\n if (address(this) != __self) {\\n // Must not be called through delegatecall\\n revert UUPSUnauthorizedCallContext();\\n }\\n return IMPLEMENTATION_SLOT;\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfcef20b48f40ce4099f1f5cfe3d1f2551b5c1997e92baaa0f0df62a3d4bd97e7\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805468010000000000000000900460ff16156100715760405162dc149f60e41b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161161a6100fc6000396000818161060d01528181610636015261082e015261161a6000f3fe6080604052600436106101565760003560e01c806393626084116100c1578063d3c617ff1161007a578063d3c617ff146103c2578063d98493f614610464578063dea580b914610484578063e4c0aaf4146104a4578063ebb71194146104c4578063f6506db4146104e4578063f7434ea9146104ff57600080fd5b8063936260841461031c578063a60a4db51461033c578063bcb1a1661461035c578063be20309414610371578063c13517e114610391578063ce0aaf95146103a457600080fd5b806345c904411161011357806345c9044114610267578063492d85d4146102945780634d53c2a5146102b45780634f1ef286146102d457806352d1902d146102e757806367c51947146102fc57600080fd5b80630c340a241461015b5780631c3db16d146101985780631debaba6146101d55780631fc6b556146101f75780632e1db8901461021b57806336e41d3d14610251575b600080fd5b34801561016757600080fd5b5060025461017b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101a457600080fd5b506101b86101b336600461100f565b61051f565b60408051938452911515602084015215159082015260600161018f565b3480156101e157600080fd5b506101f56101f036600461103d565b610545565b005b34801561020357600080fd5b5061020d60045481565b60405190815260200161018f565b34801561022757600080fd5b5061020d61023636600461100f565b6000908152600860205260409020546001600160f81b031690565b34801561025d57600080fd5b5061020d60075481565b34801561027357600080fd5b5061020d610282366004611085565b60016020526000908152604090205481565b3480156102a057600080fd5b506101f56102af3660046110a7565b6105ad565b3480156102c057600080fd5b5060055461017b906001600160a01b031681565b6101f56102e23660046110da565b6105f9565b3480156102f357600080fd5b5061020d610821565b34801561030857600080fd5b506101f561031736600461119d565b61087f565b34801561032857600080fd5b5060065461017b906001600160a01b031681565b34801561034857600080fd5b506101f56103573660046111b9565b610902565b34801561036857600080fd5b5061020d600381565b34801561037d57600080fd5b506101f561038c366004611203565b610b1f565b61020d61039f366004611293565b610c35565b3480156103b057600080fd5b506005546001600160a01b031661017b565b3480156103ce57600080fd5b506104266103dd36600461100f565b60086020526000908152604090208054600182015460028301546003909301546001600160f81b03831693600160f81b90930460ff16926001600160a01b039283169290911685565b604080516001600160f81b03909616865293151560208601526001600160a01b0392831693850193909352606084015216608082015260a00161018f565b34801561047057600080fd5b5061020d61047f3660046112de565b610dd1565b34801561049057600080fd5b5060035461017b906001600160a01b031681565b3480156104b057600080fd5b506101f56104bf3660046110a7565b610deb565b3480156104d057600080fd5b506101f56104df36600461100f565b610e37565b3480156104f057600080fd5b5061020d61047f366004611334565b34801561050b57600080fd5b5061020d61051a36600461139a565b610f03565b600080600060405162461bcd60e51b815260040161053c906113db565b60405180910390fd5b6002546001600160a01b0316331461056f5760405162461bcd60e51b815260040161053c90611402565b610579814261145a565b6007555060038054600680546001600160a01b038084166001600160a01b0319928316179092559091169216919091179055565b6002546001600160a01b031633146105d75760405162461bcd60e51b815260040161053c90611402565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b61060282610f79565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061068057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106746000805160206115c58339815191525490565b6001600160a01b031614155b1561069e5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f8575060408051601f3d908101601f191682019092526106f591810190611473565b60015b61072057604051630c76093760e01b81526001600160a01b038316600482015260240161053c565b6000805160206115c5833981519152811461075157604051632a87526960e21b81526004810182905260240161053c565b6000805160206115c58339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a281511561081c576000836001600160a01b0316836040516107b8919061148c565b600060405180830381855af49150503d80600081146107f3576040519150601f19603f3d011682016040523d82523d6000602084013e6107f8565b606091505b505090508061081a576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461086c5760405163703e46dd60e11b815260040160405180910390fd5b506000805160206115c583398151915290565b6002546001600160a01b031633146108a95760405162461bcd60e51b815260040161053c90611402565b6001600160601b03821660008181526001602052604090819020839055517f20a6ef9c48f3a1ae927e70bc34e82d974c53d3c98c8fd9e731c4bacd5842c596906108f69084815260200190565b60405180910390a25050565b60035484906001600160a01b031633148061093357506007544210801561093357506006546001600160a01b031633145b61098b5760405162461bcd60e51b8152602060048201526024808201527f416363657373206e6f7420616c6c6f7765643a20566561204f7574626f78206f60448201526337363c9760e11b606482015260840161053c565b6005546001600160a01b038281169116146109f65760405162461bcd60e51b815260206004820152602560248201527f416363657373206e6f7420616c6c6f7765643a20486f6d65476174657761792060448201526437b7363c9760d91b606482015260840161053c565b6000848152600860205260408120805490916001600160f81b039091169003610a315760405162461bcd60e51b815260040161053c906114bb565b8054600160f81b900460ff1615610a7e5760405162461bcd60e51b815260206004820152601160248201527043616e6e6f742072756c6520747769636560781b604482015260640161053c565b80546001600160f81b0316600160f81b811782556003820180546001600160a01b038681166001600160a01b031990921691909117909155600183015460405163188d362b60e11b81526004810193909352602483018790521690819063311a6c5690604401600060405180830381600087803b158015610afe57600080fd5b505af1158015610b12573d6000803e3d6000fd5b5050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff1680610b68575080546001600160401b03808416911610155b15610b855760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b178255600280546001600160a01b038981166001600160a01b03199283161790925560038054898416908316179055600487905560058054928716929091169190911790556001600055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b6000610c418383610f03565b341015610c905760405162461bcd60e51b815260206004820152601f60248201527f4e6f74207061696420656e6f75676820666f72206172626974726174696f6e00604482015260640161053c565b600080549080610c9f836114eb565b909155509050466000610cb3600143611504565b40823385898989604051602001610cd09796959493929190611517565b60408051601f19818403018152828252805160209182012060a0840183526001600160f81b0380881685526000858401818152338787018181523460608a0190815260808a01858152878652600890985297909320975191511515600160f81b029190931617865551600186810180546001600160a01b039384166001600160a01b031991821617909155955160028801559351600390960180549690911695909416949094179092559092508491907f03e54fa10baada663d819e5d7e4533535bfb6d4407abe51045be84e6c8de020390610dac9043611504565b40898989604051610dc09493929190611570565b60405180910390a350509392505050565b600060405162461bcd60e51b815260040161053c906113db565b6002546001600160a01b03163314610e155760405162461bcd60e51b815260040161053c90611402565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600860205260408120805490916001600160f81b039091169003610e725760405162461bcd60e51b815260040161053c906114bb565b8054600160f81b900460ff16610eba5760405162461bcd60e51b815260206004820152600d60248201526c139bdd081c9d5b1959081e595d609a1b604482015260640161053c565b600281018054600091829055600383015460405191926001600160a01b039091169183156108fc0291849190818181858888f1935050505015801561081a573d6000803e3d6000fd5b6000806000610f4785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fa692505050565b6001600160601b0382166000908152600160205260409020549193509150610f709082906115ad565b95945050505050565b6002546001600160a01b03163314610fa35760405162461bcd60e51b815260040161053c90611402565b50565b600080604083511061100357602083015191506040830151905060016000836001600160601b03166001600160601b0316815260200190815260200160002054600003610ff257600091505b80600003610ffe575060035b915091565b50600090506003915091565b60006020828403121561102157600080fd5b5035919050565b6001600160a01b0381168114610fa357600080fd5b6000806040838503121561105057600080fd5b823561105b81611028565b946020939093013593505050565b80356001600160601b038116811461108057600080fd5b919050565b60006020828403121561109757600080fd5b6110a082611069565b9392505050565b6000602082840312156110b957600080fd5b81356110a081611028565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156110ed57600080fd5b82356110f881611028565b915060208301356001600160401b038082111561111457600080fd5b818501915085601f83011261112857600080fd5b81358181111561113a5761113a6110c4565b604051601f8201601f19908116603f01168101908382118183101715611162576111626110c4565b8160405282815288602084870101111561117b57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080604083850312156111b057600080fd5b61105b83611069565b600080600080608085870312156111cf57600080fd5b84356111da81611028565b9350602085013592506040850135915060608501356111f881611028565b939692955090935050565b6000806000806080858703121561121957600080fd5b843561122481611028565b9350602085013561123481611028565b92506040850135915060608501356111f881611028565b60008083601f84011261125d57600080fd5b5081356001600160401b0381111561127457600080fd5b60208301915083602082850101111561128c57600080fd5b9250929050565b6000806000604084860312156112a857600080fd5b8335925060208401356001600160401b038111156112c557600080fd5b6112d18682870161124b565b9497909650939450505050565b6000806000604084860312156112f357600080fd5b83356001600160401b0381111561130957600080fd5b6113158682870161124b565b909450925050602084013561132981611028565b809150509250925092565b60008060008060006080868803121561134c57600080fd5b8535945060208601356001600160401b0381111561136957600080fd5b6113758882890161124b565b909550935050604086013561138981611028565b949793965091946060013592915050565b600080602083850312156113ad57600080fd5b82356001600160401b038111156113c357600080fd5b6113cf8582860161124b565b90969095509350505050565b6020808252600d908201526c139bdd081cdd5c1c1bdc9d1959609a1b604082015260600190565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561146d5761146d611444565b92915050565b60006020828403121561148557600080fd5b5051919050565b6000825160005b818110156114ad5760208186018101518583015201611493565b506000920191825250919050565b602080825260169082015275111a5cdc1d5d1948191bd95cc81b9bdd08195e1a5cdd60521b604082015260600190565b6000600182016114fd576114fd611444565b5060010190565b8181038181111561146d5761146d611444565b6c6372656174654469737075746560981b815287600d82015286602d8201526001600160601b03198660601b16604d820152846061820152836081820152818360a18301376000910160a1019081529695505050505050565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b808202811582820484141761146d5761146d61144456fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212204651c10eb8dded7d25f1b67d58f568a9aabba6e281bf159ce4fbee5373c5507664736f6c63430008120033", - "deployedBytecode": "0x6080604052600436106101565760003560e01c806393626084116100c1578063d3c617ff1161007a578063d3c617ff146103c2578063d98493f614610464578063dea580b914610484578063e4c0aaf4146104a4578063ebb71194146104c4578063f6506db4146104e4578063f7434ea9146104ff57600080fd5b8063936260841461031c578063a60a4db51461033c578063bcb1a1661461035c578063be20309414610371578063c13517e114610391578063ce0aaf95146103a457600080fd5b806345c904411161011357806345c9044114610267578063492d85d4146102945780634d53c2a5146102b45780634f1ef286146102d457806352d1902d146102e757806367c51947146102fc57600080fd5b80630c340a241461015b5780631c3db16d146101985780631debaba6146101d55780631fc6b556146101f75780632e1db8901461021b57806336e41d3d14610251575b600080fd5b34801561016757600080fd5b5060025461017b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101a457600080fd5b506101b86101b336600461100f565b61051f565b60408051938452911515602084015215159082015260600161018f565b3480156101e157600080fd5b506101f56101f036600461103d565b610545565b005b34801561020357600080fd5b5061020d60045481565b60405190815260200161018f565b34801561022757600080fd5b5061020d61023636600461100f565b6000908152600860205260409020546001600160f81b031690565b34801561025d57600080fd5b5061020d60075481565b34801561027357600080fd5b5061020d610282366004611085565b60016020526000908152604090205481565b3480156102a057600080fd5b506101f56102af3660046110a7565b6105ad565b3480156102c057600080fd5b5060055461017b906001600160a01b031681565b6101f56102e23660046110da565b6105f9565b3480156102f357600080fd5b5061020d610821565b34801561030857600080fd5b506101f561031736600461119d565b61087f565b34801561032857600080fd5b5060065461017b906001600160a01b031681565b34801561034857600080fd5b506101f56103573660046111b9565b610902565b34801561036857600080fd5b5061020d600381565b34801561037d57600080fd5b506101f561038c366004611203565b610b1f565b61020d61039f366004611293565b610c35565b3480156103b057600080fd5b506005546001600160a01b031661017b565b3480156103ce57600080fd5b506104266103dd36600461100f565b60086020526000908152604090208054600182015460028301546003909301546001600160f81b03831693600160f81b90930460ff16926001600160a01b039283169290911685565b604080516001600160f81b03909616865293151560208601526001600160a01b0392831693850193909352606084015216608082015260a00161018f565b34801561047057600080fd5b5061020d61047f3660046112de565b610dd1565b34801561049057600080fd5b5060035461017b906001600160a01b031681565b3480156104b057600080fd5b506101f56104bf3660046110a7565b610deb565b3480156104d057600080fd5b506101f56104df36600461100f565b610e37565b3480156104f057600080fd5b5061020d61047f366004611334565b34801561050b57600080fd5b5061020d61051a36600461139a565b610f03565b600080600060405162461bcd60e51b815260040161053c906113db565b60405180910390fd5b6002546001600160a01b0316331461056f5760405162461bcd60e51b815260040161053c90611402565b610579814261145a565b6007555060038054600680546001600160a01b038084166001600160a01b0319928316179092559091169216919091179055565b6002546001600160a01b031633146105d75760405162461bcd60e51b815260040161053c90611402565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b61060282610f79565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061068057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106746000805160206115c58339815191525490565b6001600160a01b031614155b1561069e5760405163703e46dd60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f8575060408051601f3d908101601f191682019092526106f591810190611473565b60015b61072057604051630c76093760e01b81526001600160a01b038316600482015260240161053c565b6000805160206115c5833981519152811461075157604051632a87526960e21b81526004810182905260240161053c565b6000805160206115c58339815191528390556040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a281511561081c576000836001600160a01b0316836040516107b8919061148c565b600060405180830381855af49150503d80600081146107f3576040519150601f19603f3d011682016040523d82523d6000602084013e6107f8565b606091505b505090508061081a576040516339b21b5d60e11b815260040160405180910390fd5b505b505050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461086c5760405163703e46dd60e11b815260040160405180910390fd5b506000805160206115c583398151915290565b6002546001600160a01b031633146108a95760405162461bcd60e51b815260040161053c90611402565b6001600160601b03821660008181526001602052604090819020839055517f20a6ef9c48f3a1ae927e70bc34e82d974c53d3c98c8fd9e731c4bacd5842c596906108f69084815260200190565b60405180910390a25050565b60035484906001600160a01b031633148061093357506007544210801561093357506006546001600160a01b031633145b61098b5760405162461bcd60e51b8152602060048201526024808201527f416363657373206e6f7420616c6c6f7765643a20566561204f7574626f78206f60448201526337363c9760e11b606482015260840161053c565b6005546001600160a01b038281169116146109f65760405162461bcd60e51b815260206004820152602560248201527f416363657373206e6f7420616c6c6f7765643a20486f6d65476174657761792060448201526437b7363c9760d91b606482015260840161053c565b6000848152600860205260408120805490916001600160f81b039091169003610a315760405162461bcd60e51b815260040161053c906114bb565b8054600160f81b900460ff1615610a7e5760405162461bcd60e51b815260206004820152601160248201527043616e6e6f742072756c6520747769636560781b604482015260640161053c565b80546001600160f81b0316600160f81b811782556003820180546001600160a01b038681166001600160a01b031990921691909117909155600183015460405163188d362b60e11b81526004810193909352602483018790521690819063311a6c5690604401600060405180830381600087803b158015610afe57600080fd5b505af1158015610b12573d6000803e3d6000fd5b5050505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e805460019190600160401b900460ff1680610b68575080546001600160401b03808416911610155b15610b855760405162dc149f60e41b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b038316908117600160401b178255600280546001600160a01b038981166001600160a01b03199283161790925560038054898416908316179055600487905560058054928716929091169190911790556001600055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b6000610c418383610f03565b341015610c905760405162461bcd60e51b815260206004820152601f60248201527f4e6f74207061696420656e6f75676820666f72206172626974726174696f6e00604482015260640161053c565b600080549080610c9f836114eb565b909155509050466000610cb3600143611504565b40823385898989604051602001610cd09796959493929190611517565b60408051601f19818403018152828252805160209182012060a0840183526001600160f81b0380881685526000858401818152338787018181523460608a0190815260808a01858152878652600890985297909320975191511515600160f81b029190931617865551600186810180546001600160a01b039384166001600160a01b031991821617909155955160028801559351600390960180549690911695909416949094179092559092508491907f03e54fa10baada663d819e5d7e4533535bfb6d4407abe51045be84e6c8de020390610dac9043611504565b40898989604051610dc09493929190611570565b60405180910390a350509392505050565b600060405162461bcd60e51b815260040161053c906113db565b6002546001600160a01b03163314610e155760405162461bcd60e51b815260040161053c90611402565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600860205260408120805490916001600160f81b039091169003610e725760405162461bcd60e51b815260040161053c906114bb565b8054600160f81b900460ff16610eba5760405162461bcd60e51b815260206004820152600d60248201526c139bdd081c9d5b1959081e595d609a1b604482015260640161053c565b600281018054600091829055600383015460405191926001600160a01b039091169183156108fc0291849190818181858888f1935050505015801561081a573d6000803e3d6000fd5b6000806000610f4785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fa692505050565b6001600160601b0382166000908152600160205260409020549193509150610f709082906115ad565b95945050505050565b6002546001600160a01b03163314610fa35760405162461bcd60e51b815260040161053c90611402565b50565b600080604083511061100357602083015191506040830151905060016000836001600160601b03166001600160601b0316815260200190815260200160002054600003610ff257600091505b80600003610ffe575060035b915091565b50600090506003915091565b60006020828403121561102157600080fd5b5035919050565b6001600160a01b0381168114610fa357600080fd5b6000806040838503121561105057600080fd5b823561105b81611028565b946020939093013593505050565b80356001600160601b038116811461108057600080fd5b919050565b60006020828403121561109757600080fd5b6110a082611069565b9392505050565b6000602082840312156110b957600080fd5b81356110a081611028565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156110ed57600080fd5b82356110f881611028565b915060208301356001600160401b038082111561111457600080fd5b818501915085601f83011261112857600080fd5b81358181111561113a5761113a6110c4565b604051601f8201601f19908116603f01168101908382118183101715611162576111626110c4565b8160405282815288602084870101111561117b57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080604083850312156111b057600080fd5b61105b83611069565b600080600080608085870312156111cf57600080fd5b84356111da81611028565b9350602085013592506040850135915060608501356111f881611028565b939692955090935050565b6000806000806080858703121561121957600080fd5b843561122481611028565b9350602085013561123481611028565b92506040850135915060608501356111f881611028565b60008083601f84011261125d57600080fd5b5081356001600160401b0381111561127457600080fd5b60208301915083602082850101111561128c57600080fd5b9250929050565b6000806000604084860312156112a857600080fd5b8335925060208401356001600160401b038111156112c557600080fd5b6112d18682870161124b565b9497909650939450505050565b6000806000604084860312156112f357600080fd5b83356001600160401b0381111561130957600080fd5b6113158682870161124b565b909450925050602084013561132981611028565b809150509250925092565b60008060008060006080868803121561134c57600080fd5b8535945060208601356001600160401b0381111561136957600080fd5b6113758882890161124b565b909550935050604086013561138981611028565b949793965091946060013592915050565b600080602083850312156113ad57600080fd5b82356001600160401b038111156113c357600080fd5b6113cf8582860161124b565b90969095509350505050565b6020808252600d908201526c139bdd081cdd5c1c1bdc9d1959609a1b604082015260600190565b60208082526022908201527f416363657373206e6f7420616c6c6f7765643a20476f7665726e6f72206f6e6c6040820152613c9760f11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561146d5761146d611444565b92915050565b60006020828403121561148557600080fd5b5051919050565b6000825160005b818110156114ad5760208186018101518583015201611493565b506000920191825250919050565b602080825260169082015275111a5cdc1d5d1948191bd95cc81b9bdd08195e1a5cdd60521b604082015260600190565b6000600182016114fd576114fd611444565b5060010190565b8181038181111561146d5761146d611444565b6c6372656174654469737075746560981b815287600d82015286602d8201526001600160601b03198660601b16604d820152846061820152836081820152818360a18301376000910160a1019081529695505050505050565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b808202811582820484141761146d5761146d61144456fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212204651c10eb8dded7d25f1b67d58f568a9aabba6e281bf159ce4fbee5373c5507664736f6c63430008120033", - "devdoc": { - "errors": { - "AlreadyInitialized()": [ - { - "details": "The contract is already initialized." - } - ], - "NotInitializing()": [ - { - "details": "The contract is not initializing." - } - ], - "UUPSUnauthorizedCallContext()": [ - { - "details": "The call is from an unauthorized context." - } - ], - "UUPSUnsupportedProxiableUUID(bytes32)": [ - { - "details": "The storage `slot` is unsupported as a UUID." - } - ] - }, - "events": { - "AcceptedFeeToken(address,bool)": { - "details": "To be emitted when an ERC20 token is added or removed as a method to pay fees.", - "params": { - "_accepted": "Whether the token is accepted or not.", - "_token": "The ERC20 token." - } - }, - "CrossChainDisputeOutgoing(bytes32,address,uint256,uint256,bytes)": { - "details": "To be emitted when a dispute is sent to the IHomeGateway.", - "params": { - "_choices": "The number of choices the arbitrator can choose from in this dispute.", - "_extraData": "Any extra data to attach.", - "_foreignArbitrable": "The address of the Arbitrable contract.", - "_foreignBlockHash": "foreignBlockHash", - "_foreignDisputeID": "The identifier of the dispute in the Arbitrable contract." - } - }, - "DisputeCreation(uint256,address)": { - "details": "To be emitted when a dispute is created.", - "params": { - "_arbitrable": "The contract which created the dispute.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract." - } - }, - "Initialized(uint64)": { - "details": "Triggered when the contract has been initialized or reinitialized." - }, - "NewCurrencyRate(address,uint64,uint8)": { - "details": "To be emitted when the fee for a particular ERC20 token is updated.", - "params": { - "_feeToken": "The ERC20 token.", - "_rateDecimals": "The new decimals of the fee token rate.", - "_rateInEth": "The new rate of the fee token in ETH." - } - }, - "Ruling(address,uint256,uint256)": { - "details": "To be raised when a ruling is given.", - "params": { - "_arbitrable": "The arbitrable receiving the ruling.", - "_disputeID": "The identifier of the dispute in the Arbitrator contract.", - "_ruling": "The ruling which was given." - } - }, - "Upgraded(address)": { - "params": { - "newImplementation": "Address of the new implementation the proxy is now forwarding calls to." - } - } - }, - "kind": "dev", - "methods": { - "arbitrationCost(bytes)": { - "details": "Compute the cost of arbitration denominated in the native currency, typically ETH. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes)." - }, - "returns": { - "cost": "The arbitration cost in ETH." - } - }, - "arbitrationCost(bytes,address)": { - "details": "Compute the cost of arbitration denominated in `_feeToken`. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeToken": "The ERC20 token used to pay fees." - }, - "returns": { - "_0": "The arbitration cost in `_feeToken`." - } - }, - "changeCourtJurorFee(uint96,uint256)": { - "details": "Changes the `feeForJuror` property value of a specified court.", - "params": { - "_courtID": "The ID of the court on the v2 arbitrator. Not to be confused with the courtID on KlerosLiquid.", - "_feeForJuror": "The new value for the `feeForJuror` property value." - } - }, - "changeGovernor(address)": { - "details": "Changes the governor.", - "params": { - "_governor": "The address of the new governor." - } - }, - "changeHomeGateway(address)": { - "details": "Changes the home gateway.", - "params": { - "_homeGateway": "The address of the new home gateway." - } - }, - "changeVea(address,uint256)": { - "details": "Changes the outbox.", - "params": { - "_gracePeriod": "The duration to accept messages from the deprecated bridge (if at all).", - "_veaOutbox": "The address of the new outbox." - } - }, - "constructor": { - "details": "Constructor, initializing the implementation to reduce attack surface." - }, - "createDispute(uint256,bytes)": { - "details": "Create a dispute and pay for the fees in the native currency, typically ETH. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "disputeID": "The identifier of the dispute created." - } - }, - "createDispute(uint256,bytes,address,uint256)": { - "details": "Create a dispute and pay for the fees in a supported ERC20 token. Must be called by the arbitrable contract. Must pay at least arbitrationCost(_extraData).", - "params": { - "_extraData": "Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes).", - "_feeAmount": "Amount of the ERC20 token used to pay fees.", - "_feeToken": "The ERC20 token used to pay fees.", - "_numberOfChoices": "The number of choices the arbitrator can choose from in this dispute." - }, - "returns": { - "_0": "The identifier of the dispute created." - } - }, - "disputeHashToForeignID(bytes32)": { - "details": "Looks up the local foreign disputeID for a disputeHash", - "params": { - "_disputeHash": "dispute hash" - } - }, - "initialize(address,address,uint256,address)": { - "details": "Constructs the `PolicyRegistry` contract.", - "params": { - "_governor": "The governor's address." - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the if statement." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade mechanism including access control and UUPS-compliance.Reverts if the execution is not performed via delegatecall or the execution context is not of a proxy with an ERC1967-compliant implementation pointing to self.", - "params": { - "data": "Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.", - "newImplementation": "Address of the new implementation contract." - } - }, - "withdrawFees(bytes32)": { - "params": { - "_disputeHash": "The dispute hash for which to withdraw the fees." - } - } - }, - "stateVariables": { - "homeChainID": { - "return": "The chain ID where the corresponding home gateway is deployed.", - "returns": { - "_0": "The chain ID where the corresponding home gateway is deployed." - } - }, - "homeGateway": { - "return": "The address of the corresponding home gateway.", - "returns": { - "_0": "The address of the corresponding home gateway." - } - } - }, - "version": 1 - }, - "userdoc": { - "errors": { - "FailedDelegateCall()": [ - { - "notice": "Failed Delegated call" - } - ], - "InvalidImplementation(address)": [ - { - "notice": "The `implementation` is not UUPS-compliant" - } - ] - }, - "events": { - "Upgraded(address)": { - "notice": "Emitted when the `implementation` has been successfully upgraded." - } - }, - "kind": "user", - "methods": { - "relayRule(address,bytes32,uint256,address)": { - "notice": "Relay the rule call from the home gateway to the arbitrable." - }, - "withdrawFees(bytes32)": { - "notice": "Reimburses the dispute fees to the relayer who paid for these fees on the home chain." - } - }, - "notice": "Foreign Gateway Counterpart of `HomeGateway`", - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 15912, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "localDisputeID", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 15916, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "feeForJuror", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint96,t_uint256)" - }, - { - "astId": 15918, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "governor", - "offset": 0, - "slot": "2", - "type": "t_address" - }, - { - "astId": 15920, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "veaOutbox", - "offset": 0, - "slot": "3", - "type": "t_address" - }, - { - "astId": 15923, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "homeChainID", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 15926, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "homeGateway", - "offset": 0, - "slot": "5", - "type": "t_address" - }, - { - "astId": 15928, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "deprecatedVeaOutbox", - "offset": 0, - "slot": "6", - "type": "t_address" - }, - { - "astId": 15930, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "deprecatedVeaOutboxExpiration", - "offset": 0, - "slot": "7", - "type": "t_uint256" - }, - { - "astId": 15935, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "disputeHashtoDisputeData", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_bytes32,t_struct(DisputeData)15901_storage)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(DisputeData)15901_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct ForeignGateway.DisputeData)", - "numberOfBytes": "32", - "value": "t_struct(DisputeData)15901_storage" - }, - "t_mapping(t_uint96,t_uint256)": { - "encoding": "mapping", - "key": "t_uint96", - "label": "mapping(uint96 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(DisputeData)15901_storage": { - "encoding": "inplace", - "label": "struct ForeignGateway.DisputeData", - "members": [ - { - "astId": 15892, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "id", - "offset": 0, - "slot": "0", - "type": "t_uint248" - }, - { - "astId": 15894, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "ruled", - "offset": 31, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 15896, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "arbitrable", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 15898, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "paid", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 15900, - "contract": "src/gateway/ForeignGateway.sol:ForeignGateway", - "label": "relayer", - "offset": 0, - "slot": "3", - "type": "t_address" - } - ], - "numberOfBytes": "128" - }, - "t_uint248": { - "encoding": "inplace", - "label": "uint248", - "numberOfBytes": "31" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - } -} diff --git a/contracts/deployments/chiadoDevnet/ForeignGatewayOnGnosis_Proxy.json b/contracts/deployments/chiadoDevnet/ForeignGatewayOnGnosis_Proxy.json deleted file mode 100644 index 5b032be43..000000000 --- a/contracts/deployments/chiadoDevnet/ForeignGatewayOnGnosis_Proxy.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "address": "0x078dAd05373d19d7fd6829735b765F12242a4300", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x01874fb34459c6ed77c5cb60dfd0cfb40aebacc46073f1d06df7e1b47e790705", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x078dAd05373d19d7fd6829735b765F12242a4300", - "transactionIndex": 1, - "gasUsed": "265335", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7ede631dec7eef5b52cd5719c77b2df2768ce5716f943b49d0484d77f81d9568", - "transactionHash": "0x01874fb34459c6ed77c5cb60dfd0cfb40aebacc46073f1d06df7e1b47e790705", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 6246439, - "transactionHash": "0x01874fb34459c6ed77c5cb60dfd0cfb40aebacc46073f1d06df7e1b47e790705", - "address": "0x078dAd05373d19d7fd6829735b765F12242a4300", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 0, - "blockHash": "0x7ede631dec7eef5b52cd5719c77b2df2768ce5716f943b49d0484d77f81d9568" - } - ], - "blockNumber": 6246439, - "cumulativeGasUsed": "291331", - "status": 1, - "byzantium": true - }, - "args": [ - "0xA4096fDA5291D5bbDD5Ed0D6CF2AF98229168Ace", - "0xbe203094000000000000000000000000f50e77f2a2b6138d16c6c7511562e5c33c4b15a3000000000000000000000000dfd7adeb43d46fa3f16fb3e27f7fe85c3f5bd89d0000000000000000000000000000000000000000000000000000000000066eed000000000000000000000000920856556ef06ff7d337af964d1954862f8da049" - ], - "numDeployments": 1, - "solcInputHash": "55cffe29f75540cd17d37d1c4bbabcf9", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Simon Malatrait \",\"details\":\"This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_implementation`. If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\"}},\"stateVariables\":{\"IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor. NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\"}},\"title\":\"UUPS Proxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/UUPSProxy.sol\":\"UUPSProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from \\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.18;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait \\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0x828711038a141a5cfcef6f24bb33af8cbf7f336c69fb969d7d0be0646667382b\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516102fe3803806102fe83398101604081905261002f9161014d565b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010c576000826001600160a01b031682604051610075919061021b565b600060405180830381855af49150503d80600081146100b0576040519150601f19603f3d011682016040523d82523d6000602084013e6100b5565b606091505b505090508061010a5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050610237565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561014457818101518382015260200161012c565b50506000910152565b6000806040838503121561016057600080fd5b82516001600160a01b038116811461017757600080fd5b60208401519092506001600160401b038082111561019457600080fd5b818501915085601f8301126101a857600080fd5b8151818111156101ba576101ba610113565b604051601f8201601f19908116603f011681019083821181831017156101e2576101e2610113565b816040528281528860208487010111156101fb57600080fd5b61020c836020830160208801610129565b80955050505050509250929050565b6000825161022d818460208701610129565b9190910192915050565b60b9806102456000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220e77e937000f74af50aa176fcbe90b8f19064161349c6b089e5987215280177d364736f6c63430008120033", - "deployedBytecode": "0x608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea2646970667358221220e77e937000f74af50aa176fcbe90b8f19064161349c6b089e5987215280177d364736f6c63430008120033", - "devdoc": { - "author": "Simon Malatrait ", - "details": "This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.We refer to the Proxiable contract (as per ERC-1822) with `implementation`.", - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the upgradeable proxy with an initial implementation specified by `_implementation`. If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor." - } - }, - "stateVariables": { - "IMPLEMENTATION_SLOT": { - "details": "Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor. NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)" - } - }, - "title": "UUPS Proxy", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} diff --git a/contracts/deployments/chiadoDevnet/WETH.json b/contracts/deployments/chiadoDevnet/WETH.json deleted file mode 100644 index 23a52d4df..000000000 --- a/contracts/deployments/chiadoDevnet/WETH.json +++ /dev/null @@ -1,444 +0,0 @@ -{ - "address": "0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8", - "abi": [ - { - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "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": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x57090c7c0edd4f488d92d65d10d04f803f1d2658828607b339ab8f6cd676f7bd", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8", - "transactionIndex": 0, - "gasUsed": "616183", - "logsBloom": "0x00000000000000000000000000000000000000000000100000000000000000000000000200000000010000000000000001000000000000000000000000000000000000000000000000000008000040000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x0b5d4a38d69dfb9c7f93cfb222f9ebfcca7355d9a5997f865a92d0fd8318ac5a", - "transactionHash": "0x57090c7c0edd4f488d92d65d10d04f803f1d2658828607b339ab8f6cd676f7bd", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 4423420, - "transactionHash": "0x57090c7c0edd4f488d92d65d10d04f803f1d2658828607b339ab8f6cd676f7bd", - "address": "0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f50e77f2a2b6138d16c6c7511562e5c33c4b15a3" - ], - "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "logIndex": 0, - "blockHash": "0x0b5d4a38d69dfb9c7f93cfb222f9ebfcca7355d9a5997f865a92d0fd8318ac5a" - } - ], - "blockNumber": 4423420, - "cumulativeGasUsed": "616183", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 3, - "solcInputHash": "36e3015201aa6368fd28e007dfb67b68", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/WETH.sol\":\"WETH\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(address from, address to, uint256 amount) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(address owner, address spender, uint256 amount) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"src/token/WETH.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\ncontract WETH is ERC20 {\\n constructor() ERC20(\\\"Wrapped ETH\\\", \\\"WETH\\\") {\\n _mint(msg.sender, 1000000 ether);\\n }\\n}\\n\",\"keccak256\":\"0xee41099235b80965c307cddbe273692a3e5317ee44c7cbdeaeab22e68b55d24b\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600b81526020016a0aee4c2e0e0cac8408aa8960ab1b815250604051806040016040528060048152602001630ae8aa8960e31b815250816003908162000064919062000207565b50600462000073828262000207565b505050620000923369d3c21bcecceda10000006200009860201b60201c565b620002fb565b6001600160a01b038216620000f35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620001079190620002d3565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200018e57607f821691505b602082108103620001af57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200015e57600081815260208120601f850160051c81016020861015620001de5750805b601f850160051c820191505b81811015620001ff57828155600101620001ea565b505050505050565b81516001600160401b0381111562000223576200022362000163565b6200023b8162000234845462000179565b84620001b5565b602080601f8311600181146200027357600084156200025a5750858301515b600019600386901b1c1916600185901b178555620001ff565b600085815260208120601f198616915b82811015620002a45788860151825594840194600190910190840162000283565b5085821015620002c35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620002f557634e487b7160e01b600052601160045260246000fd5b92915050565b610852806200030b6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea2646970667358221220e1d527c750571d35e5d16511e833b7b399408fe6b53314379368c49007623f1e64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea2646970667358221220e1d527c750571d35e5d16511e833b7b399408fe6b53314379368c49007623f1e64736f6c63430008120033", - "devdoc": { - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "decreaseAllowance(address,uint256)": { - "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." - }, - "increaseAllowance(address,uint256)": { - "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address." - }, - "name()": { - "details": "Returns the name of the token." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 197, - "contract": "src/token/WETH.sol:WETH", - "label": "_balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 203, - "contract": "src/token/WETH.sol:WETH", - "label": "_allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 205, - "contract": "src/token/WETH.sol:WETH", - "label": "_totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 207, - "contract": "src/token/WETH.sol:WETH", - "label": "_name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - }, - { - "astId": 209, - "contract": "src/token/WETH.sol:WETH", - "label": "_symbol", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/chiadoDevnet/WETHFaucet.json b/contracts/deployments/chiadoDevnet/WETHFaucet.json deleted file mode 100644 index 8cf43683b..000000000 --- a/contracts/deployments/chiadoDevnet/WETHFaucet.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "address": "0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "request", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "withdrewAlready", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0x9a86ee614df7494319cd67b7c2140646d053530aff41dd8c45444f6624d41fc5", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F", - "transactionIndex": 0, - "gasUsed": "253721", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xf99610b5a422ae735fcd92fdaf1dc89b4655f9d7a4569a570a18c4404ab08c30", - "transactionHash": "0x9a86ee614df7494319cd67b7c2140646d053530aff41dd8c45444f6624d41fc5", - "logs": [], - "blockNumber": 4423421, - "cumulativeGasUsed": "253721", - "status": 1, - "byzantium": true - }, - "args": [ - "0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8" - ], - "numDeployments": 3, - "solcInputHash": "36e3015201aa6368fd28e007dfb67b68", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"withdrewAlready\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/Faucet.sol\":\"Faucet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"src/token/Faucet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ncontract Faucet {\\n IERC20 public token;\\n mapping(address => bool) public withdrewAlready;\\n\\n constructor(IERC20 _token) {\\n token = _token;\\n }\\n\\n function balance() public view returns (uint) {\\n return token.balanceOf(address(this));\\n }\\n\\n function request() public {\\n require(\\n !withdrewAlready[msg.sender],\\n \\\"You have used this faucet already. If you need more tokens, please use another address.\\\"\\n );\\n token.transfer(msg.sender, 10000 ether);\\n withdrewAlready[msg.sender] = true;\\n }\\n}\\n\",\"keccak256\":\"0xac876a15a73b0ab2161f4e42850028fbc6db4a899f83052c0d4f97050b2d1650\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516103c23803806103c283398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61032f806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063338cdca114610051578063b69ef8a81461005b578063d61c40dc14610076578063fc0c546a146100a9575b600080fd5b6100596100d4565b005b61006361021c565b6040519081526020015b60405180910390f35b61009961008436600461028e565b60016020526000908152604090205460ff1681565b604051901515815260200161006d565b6000546100bc906001600160a01b031681565b6040516001600160a01b03909116815260200161006d565b3360009081526001602052604090205460ff161561017e5760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a40160405180910390fd5b60005460405163a9059cbb60e01b815233600482015269021e19e0c9bab240000060248201526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156101d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fc91906102be565b50336000908152600160208190526040909120805460ff19169091179055565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610265573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028991906102e0565b905090565b6000602082840312156102a057600080fd5b81356001600160a01b03811681146102b757600080fd5b9392505050565b6000602082840312156102d057600080fd5b815180151581146102b757600080fd5b6000602082840312156102f257600080fd5b505191905056fea2646970667358221220885a998acda2ccef49efd5707e9579a53bbed80122cfef4ce320a92f34aba57664736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063338cdca114610051578063b69ef8a81461005b578063d61c40dc14610076578063fc0c546a146100a9575b600080fd5b6100596100d4565b005b61006361021c565b6040519081526020015b60405180910390f35b61009961008436600461028e565b60016020526000908152604090205460ff1681565b604051901515815260200161006d565b6000546100bc906001600160a01b031681565b6040516001600160a01b03909116815260200161006d565b3360009081526001602052604090205460ff161561017e5760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a40160405180910390fd5b60005460405163a9059cbb60e01b815233600482015269021e19e0c9bab240000060248201526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156101d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fc91906102be565b50336000908152600160208190526040909120805460ff19169091179055565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610265573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028991906102e0565b905090565b6000602082840312156102a057600080fd5b81356001600160a01b03811681146102b757600080fd5b9392505050565b6000602082840312156102d057600080fd5b815180151581146102b757600080fd5b6000602082840312156102f257600080fd5b505191905056fea2646970667358221220885a998acda2ccef49efd5707e9579a53bbed80122cfef4ce320a92f34aba57664736f6c63430008120033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 14749, - "contract": "src/token/Faucet.sol:Faucet", - "label": "token", - "offset": 0, - "slot": "0", - "type": "t_contract(IERC20)846" - }, - { - "astId": 14753, - "contract": "src/token/Faucet.sol:Faucet", - "label": "withdrewAlready", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_bool)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20)846": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - } - } - } -} diff --git a/contracts/deployments/chiadoDevnet/WPNKFaucet.json b/contracts/deployments/chiadoDevnet/WPNKFaucet.json deleted file mode 100644 index f8b4d15be..000000000 --- a/contracts/deployments/chiadoDevnet/WPNKFaucet.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "address": "0x5898aeE045A25B276369914c3448B72a41758B2c", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "balance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "request", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "withdrewAlready", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "transactionHash": "0xb35cd25025514f4ceea9f6794c1d39aa7b864712e7e12894835e1f0339ff4b19", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0x5898aeE045A25B276369914c3448B72a41758B2c", - "transactionIndex": 0, - "gasUsed": "260119", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x2a5bf0e51e6ef3b5d65aa0b72477796eef03ac7702a74c66d64e8d6ff56df53f", - "transactionHash": "0xb35cd25025514f4ceea9f6794c1d39aa7b864712e7e12894835e1f0339ff4b19", - "logs": [], - "blockNumber": 2322229, - "cumulativeGasUsed": "260119", - "status": 1, - "byzantium": true - }, - "args": [ - "0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd" - ], - "numDeployments": 2, - "solcInputHash": "619e4fd2e5ff33514c8e0080269dcddd", - "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"withdrewAlready\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/Faucet.sol\":\"Faucet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"src/token/Faucet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ncontract Faucet {\\n IERC20 public token;\\n mapping(address => bool) public withdrewAlready;\\n\\n constructor(IERC20 _token) {\\n token = _token;\\n }\\n\\n function balance() public view returns (uint) {\\n return token.balanceOf(address(this));\\n }\\n\\n function request() public {\\n require(\\n !withdrewAlready[msg.sender],\\n \\\"You have used this faucet already. If you need more tokens, please use another address.\\\"\\n );\\n token.transfer(msg.sender, 10000 ether);\\n withdrewAlready[msg.sender] = true;\\n }\\n}\\n\",\"keccak256\":\"0x96dfe825cf0342eeff4380ac3632e50fed75eb083ff9b5133ab1575ed38dc333\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516103e03803806103e083398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61034d806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063338cdca114610051578063b69ef8a81461005b578063d61c40dc14610076578063fc0c546a146100a9575b600080fd5b6100596100d4565b005b61006361022b565b6040519081526020015b60405180910390f35b6100996100843660046102ac565b60016020526000908152604090205460ff1681565b604051901515815260200161006d565b6000546100bc906001600160a01b031681565b6040516001600160a01b03909116815260200161006d565b3360009081526001602052604090205460ff161561017e5760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a40160405180910390fd5b60005460405163a9059cbb60e01b815233600482015269021e19e0c9bab240000060248201526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b1580156101d357600080fd5b505af11580156101e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020b91906102dc565b50336000908152600160208190526040909120805460ff19169091179055565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561026f57600080fd5b505afa158015610283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a791906102fe565b905090565b6000602082840312156102be57600080fd5b81356001600160a01b03811681146102d557600080fd5b9392505050565b6000602082840312156102ee57600080fd5b815180151581146102d557600080fd5b60006020828403121561031057600080fd5b505191905056fea26469706673582212205834b9da8d3e30c6124c75f3a860d0d45dd1a253a98d2f15c37030d47e91889a64736f6c63430008090033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063338cdca114610051578063b69ef8a81461005b578063d61c40dc14610076578063fc0c546a146100a9575b600080fd5b6100596100d4565b005b61006361022b565b6040519081526020015b60405180910390f35b6100996100843660046102ac565b60016020526000908152604090205460ff1681565b604051901515815260200161006d565b6000546100bc906001600160a01b031681565b6040516001600160a01b03909116815260200161006d565b3360009081526001602052604090205460ff161561017e5760405162461bcd60e51b815260206004820152605760248201527f596f752068617665207573656420746869732066617563657420616c7265616460448201527f792e20496620796f75206e656564206d6f726520746f6b656e732c20706c656160648201527639b2903ab9b29030b737ba3432b91030b2323932b9b99760491b608482015260a40160405180910390fd5b60005460405163a9059cbb60e01b815233600482015269021e19e0c9bab240000060248201526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b1580156101d357600080fd5b505af11580156101e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020b91906102dc565b50336000908152600160208190526040909120805460ff19169091179055565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561026f57600080fd5b505afa158015610283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a791906102fe565b905090565b6000602082840312156102be57600080fd5b81356001600160a01b03811681146102d557600080fd5b9392505050565b6000602082840312156102ee57600080fd5b815180151581146102d557600080fd5b60006020828403121561031057600080fd5b505191905056fea26469706673582212205834b9da8d3e30c6124c75f3a860d0d45dd1a253a98d2f15c37030d47e91889a64736f6c63430008090033", - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 26232, - "contract": "src/token/Faucet.sol:Faucet", - "label": "token", - "offset": 0, - "slot": "0", - "type": "t_contract(IERC20)1072" - }, - { - "astId": 26236, - "contract": "src/token/Faucet.sol:Faucet", - "label": "withdrewAlready", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_bool)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20)1072": { - "encoding": "inplace", - "label": "contract IERC20", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - } - } - } -} diff --git a/contracts/deployments/chiadoDevnet/WrappedPinakionV2.json b/contracts/deployments/chiadoDevnet/WrappedPinakionV2.json deleted file mode 100644 index a12bae532..000000000 --- a/contracts/deployments/chiadoDevnet/WrappedPinakionV2.json +++ /dev/null @@ -1,436 +0,0 @@ -{ - "address": "0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd", - "abi": [ - { - "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": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "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": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xfa9fed8954035128e3a75c493d5ac33cc2bffa9e191a9ece16f9a2757cb2bab8", - "receipt": { - "to": null, - "from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", - "contractAddress": "0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd", - "transactionIndex": 1, - "gasUsed": "616199", - "logsBloom": "0x0000000000000000000000000000000000000000000000000000000000000000000000020000000001000200000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000400000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa2364345d35827c8c0c8c469b6ae0824e3ab838dcc0e0dbaabf3450754b49992", - "transactionHash": "0xfa9fed8954035128e3a75c493d5ac33cc2bffa9e191a9ece16f9a2757cb2bab8", - "logs": [ - { - "transactionIndex": 1, - "blockNumber": 2322228, - "transactionHash": "0xfa9fed8954035128e3a75c493d5ac33cc2bffa9e191a9ece16f9a2757cb2bab8", - "address": "0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f50e77f2a2b6138d16c6c7511562e5c33c4b15a3" - ], - "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "logIndex": 1, - "blockHash": "0xa2364345d35827c8c0c8c469b6ae0824e3ab838dcc0e0dbaabf3450754b49992" - } - ], - "blockNumber": 2322228, - "cumulativeGasUsed": "4491861", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "619e4fd2e5ff33514c8e0080269dcddd", - "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/WrappedPinakionV2.sol\":\"WrappedPinakionV2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n}\\n\",\"keccak256\":\"0x4ffc0547c02ad22925310c585c0f166f8759e2648a09e9b489100c42f15dd98d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"src/token/WrappedPinakionV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\ncontract WrappedPinakionV2 is ERC20 {\\n constructor() ERC20(\\\"Staking PNK on xDai\\\", \\\"stPNK\\\") {\\n _mint(msg.sender, 1000000 ether);\\n }\\n}\\n\",\"keccak256\":\"0xc0648090b2add69db6ae19830b9c1a589af0fa059fada8ffb6ccdeed90e84c02\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50604080518082018252601381527f5374616b696e6720504e4b206f6e2078446169000000000000000000000000006020808301918252835180850190945260058452647374504e4b60d81b9084015281519192916100719160039161016a565b50805161008590600490602084019061016a565b5050506100a23369d3c21bcecceda10000006100a760201b60201c565b610264565b6001600160a01b0382166101015760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546101139190610203565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b82805461017690610229565b90600052602060002090601f01602090048101928261019857600085556101de565b82601f106101b157805160ff19168380011785556101de565b828001600101855582156101de579182015b828111156101de5782518255916020019190600101906101c3565b506101ea9291506101ee565b5090565b5b808211156101ea57600081556001016101ef565b6000821982111561022457634e487b7160e01b600052601160045260246000fd5b500190565b600181811c9082168061023d57607f821691505b6020821081141561025e57634e487b7160e01b600052602260045260246000fd5b50919050565b61085d806102736000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610801565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b602082108114156107fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082257634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220f3e2c60c1f5db76a5e828c52754fa6038e65d3519bf5c40755c1db138d61812264736f6c63430008090033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610801565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b602082108114156107fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082257634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220f3e2c60c1f5db76a5e828c52754fa6038e65d3519bf5c40755c1db138d61812264736f6c63430008090033", - "devdoc": { - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "decreaseAllowance(address,uint256)": { - "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." - }, - "increaseAllowance(address,uint256)": { - "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address." - }, - "name()": { - "details": "Returns the name of the token." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 423, - "contract": "src/token/WrappedPinakionV2.sol:WrappedPinakionV2", - "label": "_balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 429, - "contract": "src/token/WrappedPinakionV2.sol:WrappedPinakionV2", - "label": "_allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 431, - "contract": "src/token/WrappedPinakionV2.sol:WrappedPinakionV2", - "label": "_totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 433, - "contract": "src/token/WrappedPinakionV2.sol:WrappedPinakionV2", - "label": "_name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - }, - { - "astId": 435, - "contract": "src/token/WrappedPinakionV2.sol:WrappedPinakionV2", - "label": "_symbol", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/contractsEthers.ts b/contracts/deployments/contractsEthers.ts deleted file mode 100644 index b5da4705e..000000000 --- a/contracts/deployments/contractsEthers.ts +++ /dev/null @@ -1,274 +0,0 @@ -import { ethers } from "ethers"; -import { - klerosCoreConfig as devnetCoreConfig, - sortitionModuleConfig as devnetSortitionConfig, - disputeKitClassicConfig as devnetDkClassicConfig, - disputeKitShutterConfig as devnetDkShutterConfig, - disputeKitGatedConfig as devnetDkGatedConfig, - disputeKitGatedShutterConfig as devnetDkGatedShutterConfig, - disputeResolverConfig as devnetDrConfig, - disputeTemplateRegistryConfig as devnetDtrConfig, - evidenceModuleConfig as devnetEvidenceConfig, - policyRegistryConfig as devnetPolicyRegistryConfig, - transactionBatcherConfig as devnetBatcherConfig, - chainlinkRngConfig as devnetChainlinkRngConfig, - blockHashRngConfig as devnetBlockHashRngConfig, - pnkConfig as devnetPnkConfig, - klerosCoreSnapshotProxyConfig as devnetSnapshotProxyConfig, - klerosCoreUniversityConfig as devnetCoreUniversityConfig, - sortitionModuleUniversityConfig as devnetSortitionUniversityConfig, - disputeKitClassicUniversityConfig as devnetDkClassicUniversityConfig, - disputeResolverUniversityConfig as devnetDrUniversityConfig, -} from "./devnet.viem"; -import { - klerosCoreConfig as testnetCoreConfig, - sortitionModuleConfig as testnetSortitionConfig, - disputeKitClassicConfig as testnetDkcConfig, - disputeKitShutterConfig as testnetDkShutterConfig, - disputeKitGatedConfig as testnetDkGatedConfig, - disputeKitGatedShutterConfig as testnetDkGatedShutterConfig, - disputeResolverConfig as testnetDrConfig, - disputeTemplateRegistryConfig as testnetDtrConfig, - evidenceModuleConfig as testnetEvidenceConfig, - policyRegistryConfig as testnetPolicyRegistryConfig, - transactionBatcherConfig as testnetBatcherConfig, - chainlinkRngConfig as testnetChainlinkRngConfig, - blockHashRngConfig as testnetBlockHashRngConfig, - pnkConfig as testnetPnkConfig, - klerosCoreSnapshotProxyConfig as testnetSnapshotProxyConfig, -} from "./testnet.viem"; -import { - klerosCoreConfig as mainnetCoreConfig, - sortitionModuleConfig as mainnetSortitionConfig, - disputeKitClassicConfig as mainnetDkcConfig, - disputeKitShutterConfig as mainnetDkShutterConfig, - disputeKitGatedConfig as mainnetDkGatedConfig, - disputeKitGatedShutterConfig as mainnetDkGatedShutterConfig, - disputeResolverConfig as mainnetDrConfig, - disputeTemplateRegistryConfig as mainnetDtrConfig, - evidenceModuleConfig as mainnetEvidenceConfig, - policyRegistryConfig as mainnetPolicyRegistryConfig, - transactionBatcherConfig as mainnetBatcherConfig, - chainlinkRngConfig as mainnetChainlinkRngConfig, - randomizerRngConfig as mainnetRandomizerRngConfig, - blockHashRngConfig as mainnetBlockHashRngConfig, - pnkConfig as mainnetPnkConfig, - klerosCoreSnapshotProxyConfig as mainnetSnapshotProxyConfig, -} from "./mainnet.viem"; -import { - KlerosCore, - KlerosCore__factory, - SortitionModule, - SortitionModule__factory, - DisputeKitClassic, - DisputeKitClassic__factory, - DisputeKitShutter, - DisputeKitGated, - DisputeKitGatedShutter, - DisputeKitShutter__factory, - DisputeKitGated__factory, - DisputeKitGatedShutter__factory, - DisputeResolver, - DisputeResolver__factory, - DisputeTemplateRegistry, - DisputeTemplateRegistry__factory, - EvidenceModule, - EvidenceModule__factory, - PolicyRegistry, - PolicyRegistry__factory, - TransactionBatcher, - TransactionBatcher__factory, - ChainlinkRNG, - ChainlinkRNG__factory, - RandomizerRNG, - RandomizerRNG__factory, - BlockHashRNG, - BlockHashRNG__factory, - PNK, - PNK__factory, - KlerosCoreSnapshotProxy, - KlerosCoreSnapshotProxy__factory, - KlerosCoreUniversity, - KlerosCoreUniversity__factory, - SortitionModuleUniversity, - SortitionModuleUniversity__factory, -} from "../typechain-types"; -import { type ContractConfig, type DeploymentName, deployments, getAddress } from "./utils"; - -type CommonFactoriesConfigs = { - dkClassicConfig: ContractConfig; - dkShutterConfig?: ContractConfig; - dkGatedConfig?: ContractConfig; - dkGatedShutterConfig?: ContractConfig; - drConfig: ContractConfig; - dtrConfig: ContractConfig; - evidenceConfig: ContractConfig; - policyRegistryConfig: ContractConfig; - batcherConfig: ContractConfig; - chainlinkRngConfig?: ContractConfig; - randomizerRngConfig?: ContractConfig; - blockHashRngConfig: ContractConfig; - pnkConfig: ContractConfig; - snapshotProxyConfig: ContractConfig; -}; - -type CommonFactories = { - disputeKitClassic: DisputeKitClassic; - disputeKitShutter: DisputeKitShutter | null; - disputeKitGated: DisputeKitGated | null; - disputeKitGatedShutter: DisputeKitGatedShutter | null; - disputeResolver: DisputeResolver; - disputeTemplateRegistry: DisputeTemplateRegistry; - evidence: EvidenceModule; - policyRegistry: PolicyRegistry; - transactionBatcher: TransactionBatcher; - chainlinkRng: ChainlinkRNG | null; - randomizerRng: RandomizerRNG | null; - blockHashRng: BlockHashRNG; - pnk: PNK; - klerosCoreSnapshotProxy: KlerosCoreSnapshotProxy; -}; - -function getCommonFactories( - configs: CommonFactoriesConfigs, - provider: ethers.Provider, - chainId: number -): CommonFactories { - return { - disputeKitClassic: DisputeKitClassic__factory.connect(getAddress(configs.dkClassicConfig, chainId), provider), - disputeKitShutter: configs.dkShutterConfig - ? DisputeKitShutter__factory.connect(getAddress(configs.dkShutterConfig, chainId), provider) - : null, - disputeKitGated: configs.dkGatedConfig - ? DisputeKitGated__factory.connect(getAddress(configs.dkGatedConfig, chainId), provider) - : null, - disputeKitGatedShutter: configs.dkGatedShutterConfig - ? DisputeKitGatedShutter__factory.connect(getAddress(configs.dkGatedShutterConfig, chainId), provider) - : null, - disputeResolver: DisputeResolver__factory.connect(getAddress(configs.drConfig, chainId), provider), - disputeTemplateRegistry: DisputeTemplateRegistry__factory.connect(getAddress(configs.dtrConfig, chainId), provider), - evidence: EvidenceModule__factory.connect(getAddress(configs.evidenceConfig, chainId), provider), - policyRegistry: PolicyRegistry__factory.connect(getAddress(configs.policyRegistryConfig, chainId), provider), - transactionBatcher: TransactionBatcher__factory.connect(getAddress(configs.batcherConfig, chainId), provider), - chainlinkRng: configs.chainlinkRngConfig - ? ChainlinkRNG__factory.connect(getAddress(configs.chainlinkRngConfig, chainId), provider) - : null, - randomizerRng: configs.randomizerRngConfig - ? RandomizerRNG__factory.connect(getAddress(configs.randomizerRngConfig, chainId), provider) - : null, - blockHashRng: BlockHashRNG__factory.connect(getAddress(configs.blockHashRngConfig, chainId), provider), - pnk: PNK__factory.connect(getAddress(configs.pnkConfig, chainId), provider), - klerosCoreSnapshotProxy: KlerosCoreSnapshotProxy__factory.connect( - getAddress(configs.snapshotProxyConfig, chainId), - provider - ), - }; -} - -export const getContracts = async (provider: ethers.Provider, deployment: DeploymentName) => { - const { chainId } = deployments[deployment]; - let klerosCore: KlerosCore | KlerosCoreUniversity; - let sortition: SortitionModule | SortitionModuleUniversity; - let commonFactories: CommonFactories; - - switch (deployment) { - case "devnet": { - klerosCore = KlerosCore__factory.connect(getAddress(devnetCoreConfig, chainId), provider); - sortition = SortitionModule__factory.connect(getAddress(devnetSortitionConfig, chainId), provider); - commonFactories = getCommonFactories( - { - dkClassicConfig: devnetDkClassicConfig, - dkShutterConfig: devnetDkShutterConfig, - dkGatedConfig: devnetDkGatedConfig, - dkGatedShutterConfig: devnetDkGatedShutterConfig, - drConfig: devnetDrConfig, - dtrConfig: devnetDtrConfig, - evidenceConfig: devnetEvidenceConfig, - policyRegistryConfig: devnetPolicyRegistryConfig, - batcherConfig: devnetBatcherConfig, - chainlinkRngConfig: devnetChainlinkRngConfig, - blockHashRngConfig: devnetBlockHashRngConfig, - pnkConfig: devnetPnkConfig, - snapshotProxyConfig: devnetSnapshotProxyConfig, - }, - provider, - chainId - ); - break; - } - case "university": { - klerosCore = KlerosCoreUniversity__factory.connect(getAddress(devnetCoreUniversityConfig, chainId), provider); - sortition = SortitionModuleUniversity__factory.connect( - getAddress(devnetSortitionUniversityConfig, chainId), - provider - ); - commonFactories = getCommonFactories( - { - dkClassicConfig: devnetDkClassicUniversityConfig, - drConfig: devnetDrUniversityConfig, - dtrConfig: devnetDtrConfig, - evidenceConfig: devnetEvidenceConfig, - policyRegistryConfig: devnetPolicyRegistryConfig, - batcherConfig: devnetBatcherConfig, - chainlinkRngConfig: devnetChainlinkRngConfig, - blockHashRngConfig: devnetBlockHashRngConfig, - pnkConfig: devnetPnkConfig, - snapshotProxyConfig: devnetSnapshotProxyConfig, - }, - provider, - chainId - ); - break; - } - case "testnet": - klerosCore = KlerosCore__factory.connect(getAddress(testnetCoreConfig, chainId), provider); - sortition = SortitionModule__factory.connect(getAddress(testnetSortitionConfig, chainId), provider); - commonFactories = getCommonFactories( - { - dkClassicConfig: testnetDkcConfig, - dkShutterConfig: testnetDkShutterConfig, - dkGatedConfig: testnetDkGatedConfig, - dkGatedShutterConfig: testnetDkGatedShutterConfig, - drConfig: testnetDrConfig, - dtrConfig: testnetDtrConfig, - evidenceConfig: testnetEvidenceConfig, - policyRegistryConfig: testnetPolicyRegistryConfig, - batcherConfig: testnetBatcherConfig, - chainlinkRngConfig: testnetChainlinkRngConfig, - blockHashRngConfig: testnetBlockHashRngConfig, - pnkConfig: testnetPnkConfig, - snapshotProxyConfig: testnetSnapshotProxyConfig, - }, - provider, - chainId - ); - break; - case "mainnet": - klerosCore = KlerosCore__factory.connect(getAddress(mainnetCoreConfig, chainId), provider); - sortition = SortitionModule__factory.connect(getAddress(mainnetSortitionConfig, chainId), provider); - commonFactories = getCommonFactories( - { - dkClassicConfig: mainnetDkcConfig, - dkShutterConfig: mainnetDkShutterConfig, - dkGatedConfig: mainnetDkGatedConfig, - dkGatedShutterConfig: mainnetDkGatedShutterConfig, - drConfig: mainnetDrConfig, - dtrConfig: mainnetDtrConfig, - evidenceConfig: mainnetEvidenceConfig, - policyRegistryConfig: mainnetPolicyRegistryConfig, - batcherConfig: mainnetBatcherConfig, - chainlinkRngConfig: mainnetChainlinkRngConfig, - randomizerRngConfig: mainnetRandomizerRngConfig, - blockHashRngConfig: mainnetBlockHashRngConfig, - pnkConfig: mainnetPnkConfig, - snapshotProxyConfig: mainnetSnapshotProxyConfig, - }, - provider, - chainId - ); - break; - default: - throw new Error(`Unsupported deployment: ${deployment}`); - } - return { klerosCore, sortition, ...commonFactories }; -}; diff --git a/contracts/deployments/contractsViem.ts b/contracts/deployments/contractsViem.ts deleted file mode 100644 index 7a7338d71..000000000 --- a/contracts/deployments/contractsViem.ts +++ /dev/null @@ -1,342 +0,0 @@ -import { type PublicClient, type WalletClient, getContract } from "viem"; -import { type ContractConfig, type DeploymentName, deployments, getAddress } from "./utils"; -import { - klerosCoreConfig as devnetCoreConfig, - sortitionModuleConfig as devnetSortitionConfig, - disputeKitClassicConfig as devnetDkClassicConfig, - disputeKitShutterConfig as devnetDkShutterConfig, - disputeKitGatedConfig as devnetDkGatedConfig, - disputeKitGatedShutterConfig as devnetDkGatedShutterConfig, - disputeResolverConfig as devnetDrConfig, - disputeTemplateRegistryConfig as devnetDtrConfig, - evidenceModuleConfig as devnetEvidenceConfig, - policyRegistryConfig as devnetPolicyRegistryConfig, - transactionBatcherConfig as devnetBatcherConfig, - chainlinkRngConfig as devnetChainlinkRngConfig, - blockHashRngConfig as devnetBlockHashRngConfig, - pnkConfig as devnetPnkConfig, - klerosCoreSnapshotProxyConfig as devnetSnapshotProxyConfig, - klerosCoreUniversityConfig as devnetCoreUniversityConfig, - sortitionModuleUniversityConfig as devnetSortitionUniversityConfig, - disputeKitClassicUniversityConfig as devnetDkClassicUniversityConfig, - disputeResolverUniversityConfig as devnetDrUniversityConfig, -} from "./devnet.viem"; -import { - klerosCoreConfig as testnetCoreConfig, - sortitionModuleConfig as testnetSortitionConfig, - disputeKitClassicConfig as testnetDkClassicConfig, - disputeKitShutterConfig as testnetDkShutterConfig, - disputeKitGatedConfig as testnetDkGatedConfig, - disputeKitGatedShutterConfig as testnetDkGatedShutterConfig, - disputeResolverConfig as testnetDrConfig, - disputeTemplateRegistryConfig as testnetDtrConfig, - evidenceModuleConfig as testnetEvidenceConfig, - policyRegistryConfig as testnetPolicyRegistryConfig, - transactionBatcherConfig as testnetBatcherConfig, - chainlinkRngConfig as testnetChainlinkRngConfig, - blockHashRngConfig as testnetBlockHashRngConfig, - pnkConfig as testnetPnkConfig, - klerosCoreSnapshotProxyConfig as testnetSnapshotProxyConfig, -} from "./testnet.viem"; -import { - klerosCoreConfig as mainnetCoreConfig, - sortitionModuleConfig as mainnetSortitionConfig, - disputeKitClassicConfig as mainnetDkClassicConfig, - disputeKitShutterConfig as mainnetDkShutterConfig, - disputeKitGatedConfig as mainnetDkGatedConfig, - disputeKitGatedShutterConfig as mainnetDkGatedShutterConfig, - disputeResolverConfig as mainnetDrConfig, - disputeTemplateRegistryConfig as mainnetDtrConfig, - evidenceModuleConfig as mainnetEvidenceConfig, - policyRegistryConfig as mainnetPolicyRegistryConfig, - transactionBatcherConfig as mainnetBatcherConfig, - chainlinkRngConfig as mainnetChainlinkRngConfig, - randomizerRngConfig as mainnetRandomizerRngConfig, - blockHashRngConfig as mainnetBlockHashRngConfig, - pnkConfig as mainnetPnkConfig, - klerosCoreSnapshotProxyConfig as mainnetSnapshotProxyConfig, -} from "./mainnet.viem"; - -type ContractInstance = { - address: `0x${string}`; - abi: readonly any[]; -}; - -function getContractConfig({ config, chainId }: { config: ContractConfig; chainId: number }): ContractInstance { - return { - address: getAddress(config, chainId), - abi: config.abi, - }; -} - -type ContractInstances = { - klerosCore: ContractInstance; - sortition: ContractInstance; - disputeKitClassic: ContractInstance; - disputeKitShutter?: ContractInstance; - disputeKitGated?: ContractInstance; - disputeKitGatedShutter?: ContractInstance; - disputeResolver: ContractInstance; - disputeTemplateRegistry: ContractInstance; - evidence: ContractInstance; - policyRegistry: ContractInstance; - transactionBatcher: ContractInstance; - chainlinkRng?: ContractInstance; - randomizerRng?: ContractInstance; - blockHashRng: ContractInstance; - pnk: ContractInstance; - klerosCoreSnapshotProxy: ContractInstance; -}; - -function getCommonConfigs({ - chainId, - configs, -}: { - chainId: number; - configs: { - klerosCore: ContractConfig; - sortition: ContractConfig; - disputeKitClassic: ContractConfig; - disputeKitShutter?: ContractConfig; - disputeKitGated?: ContractConfig; - disputeKitGatedShutter?: ContractConfig; - disputeResolver: ContractConfig; - disputeTemplateRegistry: ContractConfig; - evidence: ContractConfig; - policyRegistry: ContractConfig; - transactionBatcher: ContractConfig; - blockHashRng: ContractConfig; - pnk: ContractConfig; - klerosCoreSnapshotProxy: ContractConfig; - chainlinkRng?: ContractConfig; - randomizerRng?: ContractConfig; - }; -}): ContractInstances { - const base: ContractInstances = { - klerosCore: getContractConfig({ config: configs.klerosCore, chainId }), - sortition: getContractConfig({ config: configs.sortition, chainId }), - disputeKitClassic: getContractConfig({ config: configs.disputeKitClassic, chainId }), - disputeResolver: getContractConfig({ config: configs.disputeResolver, chainId }), - disputeTemplateRegistry: getContractConfig({ config: configs.disputeTemplateRegistry, chainId }), - evidence: getContractConfig({ config: configs.evidence, chainId }), - policyRegistry: getContractConfig({ config: configs.policyRegistry, chainId }), - transactionBatcher: getContractConfig({ config: configs.transactionBatcher, chainId }), - blockHashRng: getContractConfig({ config: configs.blockHashRng, chainId }), - pnk: getContractConfig({ config: configs.pnk, chainId }), - klerosCoreSnapshotProxy: getContractConfig({ config: configs.klerosCoreSnapshotProxy, chainId }), - }; - - if (configs.disputeKitShutter) - base.disputeKitShutter = getContractConfig({ config: configs.disputeKitShutter, chainId }); - - if (configs.disputeKitGated) base.disputeKitGated = getContractConfig({ config: configs.disputeKitGated, chainId }); - - if (configs.disputeKitGatedShutter) - base.disputeKitGatedShutter = getContractConfig({ config: configs.disputeKitGatedShutter, chainId }); - - if (configs.chainlinkRng) base.chainlinkRng = getContractConfig({ config: configs.chainlinkRng, chainId }); - - if (configs.randomizerRng) base.randomizerRng = getContractConfig({ config: configs.randomizerRng, chainId }); - - return base; -} - -export const getConfigs = ({ deployment }: { deployment: DeploymentName }): ContractInstances => { - const { chainId } = deployments[deployment]; - switch (deployment) { - case "devnet": - return getCommonConfigs({ - chainId, - configs: { - klerosCore: devnetCoreConfig, - sortition: devnetSortitionConfig, - disputeKitClassic: devnetDkClassicConfig, - disputeKitShutter: devnetDkShutterConfig, - disputeKitGated: devnetDkGatedConfig, - disputeKitGatedShutter: devnetDkGatedShutterConfig, - disputeResolver: devnetDrConfig, - disputeTemplateRegistry: devnetDtrConfig, - evidence: devnetEvidenceConfig, - policyRegistry: devnetPolicyRegistryConfig, - transactionBatcher: devnetBatcherConfig, - blockHashRng: devnetBlockHashRngConfig, - pnk: devnetPnkConfig, - klerosCoreSnapshotProxy: devnetSnapshotProxyConfig, - chainlinkRng: devnetChainlinkRngConfig, - }, - }); - - case "university": - return { - klerosCore: getContractConfig({ config: devnetCoreUniversityConfig, chainId }), - sortition: getContractConfig({ config: devnetSortitionUniversityConfig, chainId }), - disputeKitClassic: getContractConfig({ config: devnetDkClassicUniversityConfig, chainId }), - disputeResolver: getContractConfig({ config: devnetDrUniversityConfig, chainId }), - disputeTemplateRegistry: getContractConfig({ config: devnetDtrConfig, chainId }), // FIXME: should not be shared with devnet - evidence: getContractConfig({ config: devnetEvidenceConfig, chainId }), // Not arbitrator specific - policyRegistry: getContractConfig({ config: devnetPolicyRegistryConfig, chainId }), // Not arbitrator specific - transactionBatcher: getContractConfig({ config: devnetBatcherConfig, chainId }), // Not arbitrator specific - blockHashRng: getContractConfig({ config: devnetBlockHashRngConfig, chainId }), // Not used in university - pnk: getContractConfig({ config: devnetPnkConfig, chainId }), // Not arbitrator specific - klerosCoreSnapshotProxy: getContractConfig({ config: devnetSnapshotProxyConfig, chainId }), // Not used in university - }; - - case "testnet": - return getCommonConfigs({ - chainId, - configs: { - klerosCore: testnetCoreConfig, - sortition: testnetSortitionConfig, - disputeKitClassic: testnetDkClassicConfig, - disputeKitShutter: testnetDkShutterConfig, - disputeKitGated: testnetDkGatedConfig, - disputeKitGatedShutter: testnetDkGatedShutterConfig, - disputeResolver: testnetDrConfig, - disputeTemplateRegistry: testnetDtrConfig, - evidence: testnetEvidenceConfig, - policyRegistry: testnetPolicyRegistryConfig, - transactionBatcher: testnetBatcherConfig, - blockHashRng: testnetBlockHashRngConfig, - pnk: testnetPnkConfig, - klerosCoreSnapshotProxy: testnetSnapshotProxyConfig, - chainlinkRng: testnetChainlinkRngConfig, - }, - }); - - case "mainnet": - return getCommonConfigs({ - chainId, - configs: { - klerosCore: mainnetCoreConfig, - sortition: mainnetSortitionConfig, - disputeKitClassic: mainnetDkClassicConfig, - disputeKitShutter: mainnetDkShutterConfig, - disputeKitGated: mainnetDkGatedConfig, - disputeKitGatedShutter: mainnetDkGatedShutterConfig, - disputeResolver: mainnetDrConfig, - disputeTemplateRegistry: mainnetDtrConfig, - evidence: mainnetEvidenceConfig, - policyRegistry: mainnetPolicyRegistryConfig, - transactionBatcher: mainnetBatcherConfig, - blockHashRng: mainnetBlockHashRngConfig, - pnk: mainnetPnkConfig, - klerosCoreSnapshotProxy: mainnetSnapshotProxyConfig, - chainlinkRng: mainnetChainlinkRngConfig, - randomizerRng: mainnetRandomizerRngConfig, - }, - }); - - default: - throw new Error(`Unsupported deployment: ${deployment}`); - } -}; - -export const getContracts = ({ - publicClient, - walletClient, - deployment, -}: { - publicClient: PublicClient; - walletClient?: WalletClient; - deployment: DeploymentName; -}) => { - const clientConfig = { - client: { - public: publicClient, - wallet: walletClient, - }, - }; - const contractConfigs = getConfigs({ deployment }); - const klerosCore = getContract({ - ...contractConfigs.klerosCore, - ...clientConfig, - }); - const sortition = getContract({ - ...contractConfigs.sortition, - ...clientConfig, - }); - const disputeKitClassic = getContract({ - ...contractConfigs.disputeKitClassic, - ...clientConfig, - }); - const disputeKitShutter = contractConfigs.disputeKitShutter - ? getContract({ - ...contractConfigs.disputeKitShutter, - ...clientConfig, - }) - : undefined; - const disputeKitGated = contractConfigs.disputeKitGated - ? getContract({ - ...contractConfigs.disputeKitGated, - ...clientConfig, - }) - : undefined; - const disputeKitGatedShutter = contractConfigs.disputeKitGatedShutter - ? getContract({ - ...contractConfigs.disputeKitGatedShutter, - ...clientConfig, - }) - : undefined; - const disputeResolver = getContract({ - ...contractConfigs.disputeResolver, - ...clientConfig, - }); - const disputeTemplateRegistry = getContract({ - ...contractConfigs.disputeTemplateRegistry, - ...clientConfig, - }); - const evidence = getContract({ - ...contractConfigs.evidence, - ...clientConfig, - }); - const policyRegistry = getContract({ - ...contractConfigs.policyRegistry, - ...clientConfig, - }); - const transactionBatcher = getContract({ - ...contractConfigs.transactionBatcher, - ...clientConfig, - }); - const chainlinkRng = contractConfigs.chainlinkRng - ? getContract({ - ...contractConfigs.chainlinkRng, - ...clientConfig, - }) - : undefined; - const randomizerRng = contractConfigs.randomizerRng - ? getContract({ - ...contractConfigs.randomizerRng, - ...clientConfig, - }) - : undefined; - const blockHashRng = getContract({ - ...contractConfigs.blockHashRng, - ...clientConfig, - }); - const pnk = getContract({ - ...contractConfigs.pnk, - ...clientConfig, - }); - const klerosCoreSnapshotProxy = getContract({ - ...contractConfigs.klerosCoreSnapshotProxy, - ...clientConfig, - }); - return { - klerosCore, - sortition, - disputeKitClassic, - disputeKitShutter, - disputeKitGated, - disputeKitGatedShutter, - disputeResolver, - disputeTemplateRegistry, - evidence, - policyRegistry, - transactionBatcher, - chainlinkRng, - randomizerRng, - blockHashRng, - pnk, - klerosCoreSnapshotProxy, - }; -}; diff --git a/contracts/deployments/devnet.viem.ts b/contracts/deployments/devnet.viem.ts deleted file mode 100644 index f7a7214bd..000000000 --- a/contracts/deployments/devnet.viem.ts +++ /dev/null @@ -1,21424 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ArbitrableExample -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xB56A23b396E0eae85414Ce5815da448ba529Cb4A) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x3Eae72F076c68F5c354C73abC33EAA291ef1b2Fa) - */ -export const arbitrableExampleAbi = [ - { - type: "constructor", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - { name: "_templateData", internalType: "string", type: "string" }, - { name: "_templateDataMappings", internalType: "string", type: "string" }, - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - { name: "_weth", internalType: "contract IERC20", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_action", - internalType: "string", - type: "string", - indexed: true, - }, - ], - name: "Action", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeRequest", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "function", - inputs: [], - name: "arbitrator", - outputs: [{ name: "", internalType: "contract IArbitratorV2", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "arbitratorExtraData", - outputs: [{ name: "", internalType: "bytes", type: "bytes" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }], - name: "changeArbitratorExtraData", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_templateData", internalType: "string", type: "string" }, - { name: "_templateDataMappings", internalType: "string", type: "string" }, - ], - name: "changeDisputeTemplate", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_action", internalType: "string", type: "string" }, - { name: "_feeInWeth", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_action", internalType: "string", type: "string" }], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "isRuled", internalType: "bool", type: "bool" }, - { name: "ruling", internalType: "uint256", type: "uint256" }, - { - name: "numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "externalIDtoLocalID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templateId", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "templateRegistry", - outputs: [ - { - name: "", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "weth", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, -] as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xB56A23b396E0eae85414Ce5815da448ba529Cb4A) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x3Eae72F076c68F5c354C73abC33EAA291ef1b2Fa) - */ -export const arbitrableExampleAddress = { - 10200: "0xB56A23b396E0eae85414Ce5815da448ba529Cb4A", - 421614: "0x3Eae72F076c68F5c354C73abC33EAA291ef1b2Fa", -} as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xB56A23b396E0eae85414Ce5815da448ba529Cb4A) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x3Eae72F076c68F5c354C73abC33EAA291ef1b2Fa) - */ -export const arbitrableExampleConfig = { - address: arbitrableExampleAddress, - abi: arbitrableExampleAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// BlockHashRNG -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x56d6d65Fe202232714794B5D5e4ed9894466Ee01) - */ -export const blockHashRngAbi = [ - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "randomNumbers", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_block", internalType: "uint256", type: "uint256" }], - name: "receiveRandomness", - outputs: [{ name: "randomNumber", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_block", internalType: "uint256", type: "uint256" }], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x56d6d65Fe202232714794B5D5e4ed9894466Ee01) - */ -export const blockHashRngAddress = { - 421614: "0x56d6d65Fe202232714794B5D5e4ed9894466Ee01", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x56d6d65Fe202232714794B5D5e4ed9894466Ee01) - */ -export const blockHashRngConfig = { - address: blockHashRngAddress, - abi: blockHashRngAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ChainlinkRNG -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x7e40f5aC809521654A9c17e442F2a0a5a4d890FA) - */ -export const chainlinkRngAbi = [ - { - type: "constructor", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_sortitionModule", internalType: "address", type: "address" }, - { name: "_vrfCoordinator", internalType: "address", type: "address" }, - { name: "_keyHash", internalType: "bytes32", type: "bytes32" }, - { name: "_subscriptionId", internalType: "uint256", type: "uint256" }, - { name: "_requestConfirmations", internalType: "uint16", type: "uint16" }, - { name: "_callbackGasLimit", internalType: "uint32", type: "uint32" }, - ], - stateMutability: "nonpayable", - }, - { - type: "error", - inputs: [ - { name: "have", internalType: "address", type: "address" }, - { name: "want", internalType: "address", type: "address" }, - ], - name: "OnlyCoordinatorCanFulfill", - }, - { - type: "error", - inputs: [ - { name: "have", internalType: "address", type: "address" }, - { name: "owner", internalType: "address", type: "address" }, - { name: "coordinator", internalType: "address", type: "address" }, - ], - name: "OnlyOwnerOrCoordinator", - }, - { type: "error", inputs: [], name: "ZeroAddress" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "vrfCoordinator", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "CoordinatorSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - ], - name: "OwnershipTransferRequested", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - ], - name: "OwnershipTransferred", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "randomWord", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "RequestFulfilled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "RequestSent", - }, - { - type: "function", - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "callbackGasLimit", - outputs: [{ name: "", internalType: "uint32", type: "uint32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_callbackGasLimit", internalType: "uint32", type: "uint32" }], - name: "changeCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_keyHash", internalType: "bytes32", type: "bytes32" }], - name: "changeKeyHash", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_requestConfirmations", internalType: "uint16", type: "uint16" }], - name: "changeRequestConfirmations", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_sortitionModule", internalType: "address", type: "address" }], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_subscriptionId", internalType: "uint256", type: "uint256" }], - name: "changeSubscriptionId", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_vrfCoordinator", internalType: "address", type: "address" }], - name: "changeVrfCoordinator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "keyHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lastRequestId", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - name: "randomNumbers", - outputs: [{ name: "number", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "requestId", internalType: "uint256", type: "uint256" }, - { name: "randomWords", internalType: "uint256[]", type: "uint256[]" }, - ], - name: "rawFulfillRandomWords", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "receiveRandomness", - outputs: [{ name: "randomNumber", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "requestConfirmations", - outputs: [{ name: "", internalType: "uint16", type: "uint16" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "s_vrfCoordinator", - outputs: [ - { - name: "", - internalType: "contract IVRFCoordinatorV2Plus", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_vrfCoordinator", internalType: "address", type: "address" }], - name: "setCoordinator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "sortitionModule", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "subscriptionId", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x7e40f5aC809521654A9c17e442F2a0a5a4d890FA) - */ -export const chainlinkRngAddress = { - 421614: "0x7e40f5aC809521654A9c17e442F2a0a5a4d890FA", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x7e40f5aC809521654A9c17e442F2a0a5a4d890FA) - */ -export const chainlinkRngConfig = { - address: chainlinkRngAddress, - abi: chainlinkRngAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ChainlinkVRFCoordinator -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5CE8D5A2BC84beb22a398CCA51996F7930313D61) - */ -export const chainlinkVrfCoordinatorAbi = [ - { - type: "constructor", - inputs: [{ name: "blockhashStore", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "error", - inputs: [ - { name: "internalBalance", internalType: "uint256", type: "uint256" }, - { name: "externalBalance", internalType: "uint256", type: "uint256" }, - ], - name: "BalanceInvariantViolated", - }, - { - type: "error", - inputs: [{ name: "blockNum", internalType: "uint256", type: "uint256" }], - name: "BlockhashNotInStore", - }, - { - type: "error", - inputs: [{ name: "coordinatorAddress", internalType: "address", type: "address" }], - name: "CoordinatorAlreadyRegistered", - }, - { - type: "error", - inputs: [{ name: "coordinatorAddress", internalType: "address", type: "address" }], - name: "CoordinatorNotRegistered", - }, - { type: "error", inputs: [], name: "FailedToSendNative" }, - { type: "error", inputs: [], name: "FailedToTransferLink" }, - { - type: "error", - inputs: [ - { name: "have", internalType: "uint32", type: "uint32" }, - { name: "want", internalType: "uint32", type: "uint32" }, - ], - name: "GasLimitTooBig", - }, - { - type: "error", - inputs: [ - { name: "gasPrice", internalType: "uint256", type: "uint256" }, - { name: "maxGas", internalType: "uint256", type: "uint256" }, - ], - name: "GasPriceExceeded", - }, - { type: "error", inputs: [], name: "IncorrectCommitment" }, - { type: "error", inputs: [], name: "IndexOutOfRange" }, - { type: "error", inputs: [], name: "InsufficientBalance" }, - { type: "error", inputs: [], name: "InvalidCalldata" }, - { - type: "error", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "consumer", internalType: "address", type: "address" }, - ], - name: "InvalidConsumer", - }, - { type: "error", inputs: [], name: "InvalidExtraArgsTag" }, - { - type: "error", - inputs: [{ name: "linkWei", internalType: "int256", type: "int256" }], - name: "InvalidLinkWeiPrice", - }, - { - type: "error", - inputs: [ - { name: "premiumPercentage", internalType: "uint8", type: "uint8" }, - { name: "max", internalType: "uint8", type: "uint8" }, - ], - name: "InvalidPremiumPercentage", - }, - { - type: "error", - inputs: [ - { name: "have", internalType: "uint16", type: "uint16" }, - { name: "min", internalType: "uint16", type: "uint16" }, - { name: "max", internalType: "uint16", type: "uint16" }, - ], - name: "InvalidRequestConfirmations", - }, - { type: "error", inputs: [], name: "InvalidSubscription" }, - { type: "error", inputs: [], name: "LinkAlreadySet" }, - { - type: "error", - inputs: [ - { - name: "flatFeeLinkDiscountPPM", - internalType: "uint32", - type: "uint32", - }, - { name: "flatFeeNativePPM", internalType: "uint32", type: "uint32" }, - ], - name: "LinkDiscountTooHigh", - }, - { type: "error", inputs: [], name: "LinkNotSet" }, - { - type: "error", - inputs: [ - { name: "have", internalType: "uint256", type: "uint256" }, - { name: "max", internalType: "uint32", type: "uint32" }, - ], - name: "MsgDataTooBig", - }, - { - type: "error", - inputs: [{ name: "proposedOwner", internalType: "address", type: "address" }], - name: "MustBeRequestedOwner", - }, - { - type: "error", - inputs: [{ name: "owner", internalType: "address", type: "address" }], - name: "MustBeSubOwner", - }, - { type: "error", inputs: [], name: "NoCorrespondingRequest" }, - { - type: "error", - inputs: [{ name: "keyHash", internalType: "bytes32", type: "bytes32" }], - name: "NoSuchProvingKey", - }, - { - type: "error", - inputs: [ - { name: "have", internalType: "uint32", type: "uint32" }, - { name: "want", internalType: "uint32", type: "uint32" }, - ], - name: "NumWordsTooBig", - }, - { type: "error", inputs: [], name: "OnlyCallableFromLink" }, - { type: "error", inputs: [], name: "PaymentTooLarge" }, - { type: "error", inputs: [], name: "PendingRequestExists" }, - { - type: "error", - inputs: [{ name: "keyHash", internalType: "bytes32", type: "bytes32" }], - name: "ProvingKeyAlreadyRegistered", - }, - { type: "error", inputs: [], name: "Reentrant" }, - { type: "error", inputs: [], name: "TooManyConsumers" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "minimumRequestConfirmations", - internalType: "uint16", - type: "uint16", - indexed: false, - }, - { - name: "maxGasLimit", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "stalenessSeconds", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "gasAfterPaymentCalculation", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "fallbackWeiPerUnitLink", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "fulfillmentFlatFeeNativePPM", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "fulfillmentFlatFeeLinkDiscountPPM", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "nativePremiumPercentage", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - { - name: "linkPremiumPercentage", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "ConfigSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "coordinatorAddress", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "CoordinatorDeregistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "coordinatorAddress", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "CoordinatorRegistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "fallbackWeiPerUnitLink", - internalType: "int256", - type: "int256", - indexed: false, - }, - ], - name: "FallbackWeiPerUnitLinkUsed", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "to", internalType: "address", type: "address", indexed: false }, - { - name: "amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "FundsRecovered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newCoordinator", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "MigrationCompleted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "to", internalType: "address", type: "address", indexed: false }, - { - name: "amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "NativeFundsRecovered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - ], - name: "OwnershipTransferRequested", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - ], - name: "OwnershipTransferred", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "keyHash", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "maxGas", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "ProvingKeyDeregistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "keyHash", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "maxGas", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "ProvingKeyRegistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "outputSeed", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "payment", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - { - name: "nativePayment", - internalType: "bool", - type: "bool", - indexed: false, - }, - { name: "success", internalType: "bool", type: "bool", indexed: false }, - { - name: "onlyPremium", - internalType: "bool", - type: "bool", - indexed: false, - }, - ], - name: "RandomWordsFulfilled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "keyHash", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "preSeed", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "minimumRequestConfirmations", - internalType: "uint16", - type: "uint16", - indexed: false, - }, - { - name: "callbackGasLimit", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "numWords", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "extraArgs", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - { - name: "sender", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RandomWordsRequested", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { name: "to", internalType: "address", type: "address", indexed: false }, - { - name: "amountLink", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "amountNative", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "SubscriptionCanceled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "consumer", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "SubscriptionConsumerAdded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "consumer", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "SubscriptionConsumerRemoved", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "owner", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "SubscriptionCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "oldBalance", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "newBalance", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "SubscriptionFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "oldNativeBalance", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "newNativeBalance", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "SubscriptionFundedWithNative", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "from", - internalType: "address", - type: "address", - indexed: false, - }, - { name: "to", internalType: "address", type: "address", indexed: false }, - ], - name: "SubscriptionOwnerTransferRequested", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "from", - internalType: "address", - type: "address", - indexed: false, - }, - { name: "to", internalType: "address", type: "address", indexed: false }, - ], - name: "SubscriptionOwnerTransferred", - }, - { - type: "function", - inputs: [], - name: "BLOCKHASH_STORE", - outputs: [ - { - name: "", - internalType: "contract BlockhashStoreInterface", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LINK", - outputs: [ - { - name: "", - internalType: "contract LinkTokenInterface", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LINK_NATIVE_FEED", - outputs: [ - { - name: "", - internalType: "contract AggregatorV3Interface", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_CONSUMERS", - outputs: [{ name: "", internalType: "uint16", type: "uint16" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_NUM_WORDS", - outputs: [{ name: "", internalType: "uint32", type: "uint32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_REQUEST_CONFIRMATIONS", - outputs: [{ name: "", internalType: "uint16", type: "uint16" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "acceptSubscriptionOwnerTransfer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "consumer", internalType: "address", type: "address" }, - ], - name: "addConsumer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "to", internalType: "address", type: "address" }, - ], - name: "cancelSubscription", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "createSubscription", - outputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "target", internalType: "address", type: "address" }], - name: "deregisterMigratableCoordinator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "publicProvingKey", - internalType: "uint256[2]", - type: "uint256[2]", - }, - ], - name: "deregisterProvingKey", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "proof", - internalType: "struct VRF.Proof", - type: "tuple", - components: [ - { name: "pk", internalType: "uint256[2]", type: "uint256[2]" }, - { name: "gamma", internalType: "uint256[2]", type: "uint256[2]" }, - { name: "c", internalType: "uint256", type: "uint256" }, - { name: "s", internalType: "uint256", type: "uint256" }, - { name: "seed", internalType: "uint256", type: "uint256" }, - { name: "uWitness", internalType: "address", type: "address" }, - { - name: "cGammaWitness", - internalType: "uint256[2]", - type: "uint256[2]", - }, - { - name: "sHashWitness", - internalType: "uint256[2]", - type: "uint256[2]", - }, - { name: "zInv", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "rc", - internalType: "struct VRFTypes.RequestCommitmentV2Plus", - type: "tuple", - components: [ - { name: "blockNum", internalType: "uint64", type: "uint64" }, - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "callbackGasLimit", internalType: "uint32", type: "uint32" }, - { name: "numWords", internalType: "uint32", type: "uint32" }, - { name: "sender", internalType: "address", type: "address" }, - { name: "extraArgs", internalType: "bytes", type: "bytes" }, - ], - }, - { name: "onlyPremium", internalType: "bool", type: "bool" }, - ], - name: "fulfillRandomWords", - outputs: [{ name: "payment", internalType: "uint96", type: "uint96" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "fundSubscriptionWithNative", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "startIndex", internalType: "uint256", type: "uint256" }, - { name: "maxCount", internalType: "uint256", type: "uint256" }, - ], - name: "getActiveSubscriptionIds", - outputs: [{ name: "ids", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "getSubscription", - outputs: [ - { name: "balance", internalType: "uint96", type: "uint96" }, - { name: "nativeBalance", internalType: "uint96", type: "uint96" }, - { name: "reqCount", internalType: "uint64", type: "uint64" }, - { name: "subOwner", internalType: "address", type: "address" }, - { name: "consumers", internalType: "address[]", type: "address[]" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "publicKey", internalType: "uint256[2]", type: "uint256[2]" }], - name: "hashOfKey", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "newCoordinator", internalType: "address", type: "address" }, - ], - name: "migrate", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "onTokenTransfer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "ownerCancelSubscription", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "pendingRequestExists", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address", type: "address" }], - name: "recoverFunds", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address payable", type: "address" }], - name: "recoverNativeFunds", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "target", internalType: "address", type: "address" }], - name: "registerMigratableCoordinator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "publicProvingKey", - internalType: "uint256[2]", - type: "uint256[2]", - }, - { name: "maxGas", internalType: "uint64", type: "uint64" }, - ], - name: "registerProvingKey", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "consumer", internalType: "address", type: "address" }, - ], - name: "removeConsumer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "req", - internalType: "struct VRFV2PlusClient.RandomWordsRequest", - type: "tuple", - components: [ - { name: "keyHash", internalType: "bytes32", type: "bytes32" }, - { name: "subId", internalType: "uint256", type: "uint256" }, - { - name: "requestConfirmations", - internalType: "uint16", - type: "uint16", - }, - { name: "callbackGasLimit", internalType: "uint32", type: "uint32" }, - { name: "numWords", internalType: "uint32", type: "uint32" }, - { name: "extraArgs", internalType: "bytes", type: "bytes" }, - ], - }, - ], - name: "requestRandomWords", - outputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "newOwner", internalType: "address", type: "address" }, - ], - name: "requestSubscriptionOwnerTransfer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "s_config", - outputs: [ - { - name: "minimumRequestConfirmations", - internalType: "uint16", - type: "uint16", - }, - { name: "maxGasLimit", internalType: "uint32", type: "uint32" }, - { name: "reentrancyLock", internalType: "bool", type: "bool" }, - { name: "stalenessSeconds", internalType: "uint32", type: "uint32" }, - { - name: "gasAfterPaymentCalculation", - internalType: "uint32", - type: "uint32", - }, - { - name: "fulfillmentFlatFeeNativePPM", - internalType: "uint32", - type: "uint32", - }, - { - name: "fulfillmentFlatFeeLinkDiscountPPM", - internalType: "uint32", - type: "uint32", - }, - { name: "nativePremiumPercentage", internalType: "uint8", type: "uint8" }, - { name: "linkPremiumPercentage", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "s_currentSubNonce", - outputs: [{ name: "", internalType: "uint64", type: "uint64" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "s_fallbackWeiPerUnitLink", - outputs: [{ name: "", internalType: "int256", type: "int256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "s_provingKeyHashes", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "s_provingKeys", - outputs: [ - { name: "exists", internalType: "bool", type: "bool" }, - { name: "maxGas", internalType: "uint64", type: "uint64" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "s_requestCommitments", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "s_totalBalance", - outputs: [{ name: "", internalType: "uint96", type: "uint96" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "s_totalNativeBalance", - outputs: [{ name: "", internalType: "uint96", type: "uint96" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "minimumRequestConfirmations", - internalType: "uint16", - type: "uint16", - }, - { name: "maxGasLimit", internalType: "uint32", type: "uint32" }, - { name: "stalenessSeconds", internalType: "uint32", type: "uint32" }, - { - name: "gasAfterPaymentCalculation", - internalType: "uint32", - type: "uint32", - }, - { - name: "fallbackWeiPerUnitLink", - internalType: "int256", - type: "int256", - }, - { - name: "fulfillmentFlatFeeNativePPM", - internalType: "uint32", - type: "uint32", - }, - { - name: "fulfillmentFlatFeeLinkDiscountPPM", - internalType: "uint32", - type: "uint32", - }, - { name: "nativePremiumPercentage", internalType: "uint8", type: "uint8" }, - { name: "linkPremiumPercentage", internalType: "uint8", type: "uint8" }, - ], - name: "setConfig", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "link", internalType: "address", type: "address" }, - { name: "linkNativeFeed", internalType: "address", type: "address" }, - ], - name: "setLINKAndLINKNativeFeed", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "recipient", internalType: "address", type: "address" }], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "recipient", internalType: "address payable", type: "address" }], - name: "withdrawNative", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5CE8D5A2BC84beb22a398CCA51996F7930313D61) - */ -export const chainlinkVrfCoordinatorAddress = { - 421614: "0x5CE8D5A2BC84beb22a398CCA51996F7930313D61", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5CE8D5A2BC84beb22a398CCA51996F7930313D61) - */ -export const chainlinkVrfCoordinatorConfig = { - address: chainlinkVrfCoordinatorAddress, - abi: chainlinkVrfCoordinatorAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DAI -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5) - */ -export const daiAbi = [ - { - type: "constructor", - inputs: [ - { name: "_name", internalType: "string", type: "string" }, - { name: "_symbol", internalType: "string", type: "string" }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5) - */ -export const daiAddress = { - 421614: "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5) - */ -export const daiConfig = { address: daiAddress, abi: daiAbi } as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DAIFaucet -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xB5b39A1bcD2D7097A8824B3cC18Ebd2dFb0D9B5E) - */ -export const daiFaucetAbi = [ - { - type: "constructor", - inputs: [{ name: "_token", internalType: "contract IERC20", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "amount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "balance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_amount", internalType: "uint256", type: "uint256" }], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "token", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "withdrewAlready", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xB5b39A1bcD2D7097A8824B3cC18Ebd2dFb0D9B5E) - */ -export const daiFaucetAddress = { - 421614: "0xB5b39A1bcD2D7097A8824B3cC18Ebd2dFb0D9B5E", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xB5b39A1bcD2D7097A8824B3cC18Ebd2dFb0D9B5E) - */ -export const daiFaucetConfig = { - address: daiFaucetAddress, - abi: daiFaucetAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitClassic -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1) - */ -export const disputeKitClassicAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1) - */ -export const disputeKitClassicAddress = { - 421614: "0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1) - */ -export const disputeKitClassicConfig = { - address: disputeKitClassicAddress, - abi: disputeKitClassicAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitClassicUniversity -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5) - */ -export const disputeKitClassicUniversityAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5) - */ -export const disputeKitClassicUniversityAddress = { - 421614: "0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5) - */ -export const disputeKitClassicUniversityConfig = { - address: disputeKitClassicUniversityAddress, - abi: disputeKitClassicUniversityAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitClassicUniversity_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B) - */ -export const disputeKitClassicUniversityImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B) - */ -export const disputeKitClassicUniversityImplementationAddress = { - 421614: "0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B) - */ -export const disputeKitClassicUniversityImplementationConfig = { - address: disputeKitClassicUniversityImplementationAddress, - abi: disputeKitClassicUniversityImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitClassicUniversity_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5) - */ -export const disputeKitClassicUniversityProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5) - */ -export const disputeKitClassicUniversityProxyAddress = { - 421614: "0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5) - */ -export const disputeKitClassicUniversityProxyConfig = { - address: disputeKitClassicUniversityProxyAddress, - abi: disputeKitClassicUniversityProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitClassic_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xc4cC0274E55a9818f8cF42640B1De61d269425ad) - */ -export const disputeKitClassicImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xc4cC0274E55a9818f8cF42640B1De61d269425ad) - */ -export const disputeKitClassicImplementationAddress = { - 421614: "0xc4cC0274E55a9818f8cF42640B1De61d269425ad", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xc4cC0274E55a9818f8cF42640B1De61d269425ad) - */ -export const disputeKitClassicImplementationConfig = { - address: disputeKitClassicImplementationAddress, - abi: disputeKitClassicImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitClassic_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1) - */ -export const disputeKitClassicProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1) - */ -export const disputeKitClassicProxyAddress = { - 421614: "0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1) - */ -export const disputeKitClassicProxyConfig = { - address: disputeKitClassicProxyAddress, - abi: disputeKitClassicProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGated -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x677dA30B4b27D129354DdA1e219Bcc86802132d1) - */ -export const disputeKitGatedAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "extraDataToTokenInfo", - outputs: [ - { name: "tokenGate", internalType: "address", type: "address" }, - { name: "isERC1155", internalType: "bool", type: "bool" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x677dA30B4b27D129354DdA1e219Bcc86802132d1) - */ -export const disputeKitGatedAddress = { - 421614: "0x677dA30B4b27D129354DdA1e219Bcc86802132d1", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x677dA30B4b27D129354DdA1e219Bcc86802132d1) - */ -export const disputeKitGatedConfig = { - address: disputeKitGatedAddress, - abi: disputeKitGatedAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGatedShutter -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd86b84eb36Cd48f3f384b4490F255b494385F429) - */ -export const disputeKitGatedShutterAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "_identity", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_encryptedVote", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CommitCastShutter", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - { name: "_identity", internalType: "bytes32", type: "bytes32" }, - { name: "_encryptedVote", internalType: "bytes", type: "bytes" }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd86b84eb36Cd48f3f384b4490F255b494385F429) - */ -export const disputeKitGatedShutterAddress = { - 421614: "0xd86b84eb36Cd48f3f384b4490F255b494385F429", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd86b84eb36Cd48f3f384b4490F255b494385F429) - */ -export const disputeKitGatedShutterConfig = { - address: disputeKitGatedShutterAddress, - abi: disputeKitGatedShutterAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGatedShutter_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x56199F9E5C0ef9251A251a41597A971141199EDF) - */ -export const disputeKitGatedShutterImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "_identity", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_encryptedVote", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CommitCastShutter", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - { name: "_identity", internalType: "bytes32", type: "bytes32" }, - { name: "_encryptedVote", internalType: "bytes", type: "bytes" }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x56199F9E5C0ef9251A251a41597A971141199EDF) - */ -export const disputeKitGatedShutterImplementationAddress = { - 421614: "0x56199F9E5C0ef9251A251a41597A971141199EDF", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x56199F9E5C0ef9251A251a41597A971141199EDF) - */ -export const disputeKitGatedShutterImplementationConfig = { - address: disputeKitGatedShutterImplementationAddress, - abi: disputeKitGatedShutterImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGatedShutter_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd86b84eb36Cd48f3f384b4490F255b494385F429) - */ -export const disputeKitGatedShutterProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd86b84eb36Cd48f3f384b4490F255b494385F429) - */ -export const disputeKitGatedShutterProxyAddress = { - 421614: "0xd86b84eb36Cd48f3f384b4490F255b494385F429", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd86b84eb36Cd48f3f384b4490F255b494385F429) - */ -export const disputeKitGatedShutterProxyConfig = { - address: disputeKitGatedShutterProxyAddress, - abi: disputeKitGatedShutterProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGated_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA27EedcEA916BC1ab91720cE70c56666E854F55e) - */ -export const disputeKitGatedImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "extraDataToTokenInfo", - outputs: [ - { name: "tokenGate", internalType: "address", type: "address" }, - { name: "isERC1155", internalType: "bool", type: "bool" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA27EedcEA916BC1ab91720cE70c56666E854F55e) - */ -export const disputeKitGatedImplementationAddress = { - 421614: "0xA27EedcEA916BC1ab91720cE70c56666E854F55e", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA27EedcEA916BC1ab91720cE70c56666E854F55e) - */ -export const disputeKitGatedImplementationConfig = { - address: disputeKitGatedImplementationAddress, - abi: disputeKitGatedImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGated_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x677dA30B4b27D129354DdA1e219Bcc86802132d1) - */ -export const disputeKitGatedProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x677dA30B4b27D129354DdA1e219Bcc86802132d1) - */ -export const disputeKitGatedProxyAddress = { - 421614: "0x677dA30B4b27D129354DdA1e219Bcc86802132d1", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x677dA30B4b27D129354DdA1e219Bcc86802132d1) - */ -export const disputeKitGatedProxyConfig = { - address: disputeKitGatedProxyAddress, - abi: disputeKitGatedProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitShutter -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xfE0a958bc744Bb9E224E1822625B53134ac5CB69) - */ -export const disputeKitShutterAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "_identity", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_encryptedVote", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CommitCastShutter", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - { name: "_identity", internalType: "bytes32", type: "bytes32" }, - { name: "_encryptedVote", internalType: "bytes", type: "bytes" }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xfE0a958bc744Bb9E224E1822625B53134ac5CB69) - */ -export const disputeKitShutterAddress = { - 421614: "0xfE0a958bc744Bb9E224E1822625B53134ac5CB69", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xfE0a958bc744Bb9E224E1822625B53134ac5CB69) - */ -export const disputeKitShutterConfig = { - address: disputeKitShutterAddress, - abi: disputeKitShutterAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitShutter_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x6582CE0FdB29B5673E6650e34728C784BafB2139) - */ -export const disputeKitShutterImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "_identity", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_encryptedVote", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CommitCastShutter", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - { name: "_identity", internalType: "bytes32", type: "bytes32" }, - { name: "_encryptedVote", internalType: "bytes", type: "bytes" }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x6582CE0FdB29B5673E6650e34728C784BafB2139) - */ -export const disputeKitShutterImplementationAddress = { - 421614: "0x6582CE0FdB29B5673E6650e34728C784BafB2139", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x6582CE0FdB29B5673E6650e34728C784BafB2139) - */ -export const disputeKitShutterImplementationConfig = { - address: disputeKitShutterImplementationAddress, - abi: disputeKitShutterImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitShutter_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xfE0a958bc744Bb9E224E1822625B53134ac5CB69) - */ -export const disputeKitShutterProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xfE0a958bc744Bb9E224E1822625B53134ac5CB69) - */ -export const disputeKitShutterProxyAddress = { - 421614: "0xfE0a958bc744Bb9E224E1822625B53134ac5CB69", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xfE0a958bc744Bb9E224E1822625B53134ac5CB69) - */ -export const disputeKitShutterProxyConfig = { - address: disputeKitShutterProxyAddress, - abi: disputeKitShutterProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeResolver -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x16f20604a51Ac1e68c9aAd1C0E53e951B62CC1Cb) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x71f8537e925C753Fe88DA7e69Ae423f9f3a9A292) - */ -export const disputeResolverAbi = [ - { - type: "constructor", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeRequest", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "function", - inputs: [], - name: "arbitrator", - outputs: [{ name: "", internalType: "contract IArbitratorV2", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "arbitratorDisputeIDToLocalID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "_disputeTemplate", internalType: "string", type: "string" }, - { - name: "_disputeTemplateDataMappings", - internalType: "string", - type: "string", - }, - { - name: "_numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - name: "createDisputeForTemplate", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "_disputeTemplateUri", internalType: "string", type: "string" }, - { - name: "_numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - name: "createDisputeForTemplateUri", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "isRuled", internalType: "bool", type: "bool" }, - { name: "ruling", internalType: "uint256", type: "uint256" }, - { - name: "numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templateRegistry", - outputs: [ - { - name: "", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "view", - }, -] as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x16f20604a51Ac1e68c9aAd1C0E53e951B62CC1Cb) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x71f8537e925C753Fe88DA7e69Ae423f9f3a9A292) - */ -export const disputeResolverAddress = { - 10200: "0x16f20604a51Ac1e68c9aAd1C0E53e951B62CC1Cb", - 421614: "0x71f8537e925C753Fe88DA7e69Ae423f9f3a9A292", -} as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x16f20604a51Ac1e68c9aAd1C0E53e951B62CC1Cb) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x71f8537e925C753Fe88DA7e69Ae423f9f3a9A292) - */ -export const disputeResolverConfig = { - address: disputeResolverAddress, - abi: disputeResolverAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeResolverRuler -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xAEB1bbaE58125BA5F32349c69e4274d15dfD6EC3) - */ -export const disputeResolverRulerAbi = [ - { - type: "constructor", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeRequest", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "function", - inputs: [], - name: "arbitrator", - outputs: [{ name: "", internalType: "contract IArbitratorV2", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "arbitratorDisputeIDToLocalID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "_disputeTemplate", internalType: "string", type: "string" }, - { - name: "_disputeTemplateDataMappings", - internalType: "string", - type: "string", - }, - { - name: "_numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - name: "createDisputeForTemplate", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "_disputeTemplateUri", internalType: "string", type: "string" }, - { - name: "_numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - name: "createDisputeForTemplateUri", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "isRuled", internalType: "bool", type: "bool" }, - { name: "ruling", internalType: "uint256", type: "uint256" }, - { - name: "numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templateRegistry", - outputs: [ - { - name: "", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xAEB1bbaE58125BA5F32349c69e4274d15dfD6EC3) - */ -export const disputeResolverRulerAddress = { - 421614: "0xAEB1bbaE58125BA5F32349c69e4274d15dfD6EC3", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xAEB1bbaE58125BA5F32349c69e4274d15dfD6EC3) - */ -export const disputeResolverRulerConfig = { - address: disputeResolverRulerAddress, - abi: disputeResolverRulerAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeResolverUniversity -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x2Aa1a94307E772BeE42E9EfbD137b1053F1fCfd4) - */ -export const disputeResolverUniversityAbi = [ - { - type: "constructor", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeRequest", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "function", - inputs: [], - name: "arbitrator", - outputs: [{ name: "", internalType: "contract IArbitratorV2", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "arbitratorDisputeIDToLocalID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "_disputeTemplate", internalType: "string", type: "string" }, - { - name: "_disputeTemplateDataMappings", - internalType: "string", - type: "string", - }, - { - name: "_numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - name: "createDisputeForTemplate", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "_disputeTemplateUri", internalType: "string", type: "string" }, - { - name: "_numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - name: "createDisputeForTemplateUri", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "isRuled", internalType: "bool", type: "bool" }, - { name: "ruling", internalType: "uint256", type: "uint256" }, - { - name: "numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templateRegistry", - outputs: [ - { - name: "", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x2Aa1a94307E772BeE42E9EfbD137b1053F1fCfd4) - */ -export const disputeResolverUniversityAddress = { - 421614: "0x2Aa1a94307E772BeE42E9EfbD137b1053F1fCfd4", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x2Aa1a94307E772BeE42E9EfbD137b1053F1fCfd4) - */ -export const disputeResolverUniversityConfig = { - address: disputeResolverUniversityAddress, - abi: disputeResolverUniversityAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeTemplateRegistry -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x96E49552669ea81B8E9cE8694F7E4A55D8bFb957) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f) - */ -export const disputeTemplateRegistryAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_templateTag", - internalType: "string", - type: "string", - indexed: true, - }, - { - name: "_templateData", - internalType: "string", - type: "string", - indexed: false, - }, - { - name: "_templateDataMappings", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeTemplate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_templateTag", internalType: "string", type: "string" }, - { name: "_templateData", internalType: "string", type: "string" }, - { name: "_templateDataMappings", internalType: "string", type: "string" }, - ], - name: "setDisputeTemplate", - outputs: [{ name: "templateId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templates", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x96E49552669ea81B8E9cE8694F7E4A55D8bFb957) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f) - */ -export const disputeTemplateRegistryAddress = { - 10200: "0x96E49552669ea81B8E9cE8694F7E4A55D8bFb957", - 421614: "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f", -} as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x96E49552669ea81B8E9cE8694F7E4A55D8bFb957) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f) - */ -export const disputeTemplateRegistryConfig = { - address: disputeTemplateRegistryAddress, - abi: disputeTemplateRegistryAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeTemplateRegistry_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1) - */ -export const disputeTemplateRegistryImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_templateTag", - internalType: "string", - type: "string", - indexed: true, - }, - { - name: "_templateData", - internalType: "string", - type: "string", - indexed: false, - }, - { - name: "_templateDataMappings", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeTemplate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_templateTag", internalType: "string", type: "string" }, - { name: "_templateData", internalType: "string", type: "string" }, - { name: "_templateDataMappings", internalType: "string", type: "string" }, - ], - name: "setDisputeTemplate", - outputs: [{ name: "templateId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templates", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1) - */ -export const disputeTemplateRegistryImplementationAddress = { - 421614: "0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1) - */ -export const disputeTemplateRegistryImplementationConfig = { - address: disputeTemplateRegistryImplementationAddress, - abi: disputeTemplateRegistryImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeTemplateRegistry_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f) - */ -export const disputeTemplateRegistryProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f) - */ -export const disputeTemplateRegistryProxyAddress = { - 421614: "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f) - */ -export const disputeTemplateRegistryProxyConfig = { - address: disputeTemplateRegistryProxyAddress, - abi: disputeTemplateRegistryProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// EvidenceModule -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49) - */ -export const evidenceModuleAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_party", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_evidence", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "Evidence", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_externalDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_evidence", internalType: "string", type: "string" }, - ], - name: "submitEvidence", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49) - */ -export const evidenceModuleAddress = { - 421614: "0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49) - */ -export const evidenceModuleConfig = { - address: evidenceModuleAddress, - abi: evidenceModuleAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// EvidenceModule_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x450Aa35da0ad8B282C5d910254055651417C2200) - */ -export const evidenceModuleImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_party", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_evidence", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "Evidence", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_externalDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_evidence", internalType: "string", type: "string" }, - ], - name: "submitEvidence", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x450Aa35da0ad8B282C5d910254055651417C2200) - */ -export const evidenceModuleImplementationAddress = { - 421614: "0x450Aa35da0ad8B282C5d910254055651417C2200", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x450Aa35da0ad8B282C5d910254055651417C2200) - */ -export const evidenceModuleImplementationConfig = { - address: evidenceModuleImplementationAddress, - abi: evidenceModuleImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// EvidenceModule_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49) - */ -export const evidenceModuleProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49) - */ -export const evidenceModuleProxyAddress = { - 421614: "0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49) - */ -export const evidenceModuleProxyConfig = { - address: evidenceModuleProxyAddress, - abi: evidenceModuleProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ForeignGatewayOnGnosis -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x078dAd05373d19d7fd6829735b765F12242a4300) - */ -export const foreignGatewayOnGnosisAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "ArbitrationCostModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_foreignBlockHash", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_foreignArbitrable", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_foreignDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CrossChainDisputeOutgoing", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "DEFAULT_NB_OF_JURORS", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "bytes", type: "bytes" }, - { name: "", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - ], - name: "changeCourtJurorFee", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_homeGateway", internalType: "address", type: "address" }], - name: "changeHomeGateway", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_veaOutbox", internalType: "address", type: "address" }, - { name: "_gracePeriod", internalType: "uint256", type: "uint256" }, - ], - name: "changeVea", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_choices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - { name: "", internalType: "contract IERC20", type: "address" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bool", type: "bool" }, - { name: "", internalType: "bool", type: "bool" }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [], - name: "deprecatedVeaOutbox", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "deprecatedVeaOutboxExpiration", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeHash", internalType: "bytes32", type: "bytes32" }], - name: "disputeHashToForeignID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "disputeHashtoDisputeData", - outputs: [ - { name: "id", internalType: "uint248", type: "uint248" }, - { name: "ruled", internalType: "bool", type: "bool" }, - { name: "arbitrable", internalType: "address", type: "address" }, - { name: "paid", internalType: "uint256", type: "uint256" }, - { name: "relayer", internalType: "address", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint96", type: "uint96" }], - name: "feeForJuror", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "homeChainID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "homeGateway", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_veaOutbox", internalType: "address", type: "address" }, - { name: "_homeChainID", internalType: "uint256", type: "uint256" }, - { name: "_homeGateway", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_messageSender", internalType: "address", type: "address" }, - { name: "_disputeHash", internalType: "bytes32", type: "bytes32" }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - { name: "_relayer", internalType: "address", type: "address" }, - ], - name: "relayRule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "senderGateway", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "veaOutbox", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeHash", internalType: "bytes32", type: "bytes32" }], - name: "withdrawFees", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x078dAd05373d19d7fd6829735b765F12242a4300) - */ -export const foreignGatewayOnGnosisAddress = { - 10200: "0x078dAd05373d19d7fd6829735b765F12242a4300", -} as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x078dAd05373d19d7fd6829735b765F12242a4300) - */ -export const foreignGatewayOnGnosisConfig = { - address: foreignGatewayOnGnosisAddress, - abi: foreignGatewayOnGnosisAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ForeignGatewayOnGnosis_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xA4096fDA5291D5bbDD5Ed0D6CF2AF98229168Ace) - */ -export const foreignGatewayOnGnosisImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "ArbitrationCostModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_foreignBlockHash", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_foreignArbitrable", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_foreignDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CrossChainDisputeOutgoing", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "DEFAULT_NB_OF_JURORS", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "bytes", type: "bytes" }, - { name: "", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - ], - name: "changeCourtJurorFee", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_homeGateway", internalType: "address", type: "address" }], - name: "changeHomeGateway", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_veaOutbox", internalType: "address", type: "address" }, - { name: "_gracePeriod", internalType: "uint256", type: "uint256" }, - ], - name: "changeVea", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_choices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - { name: "", internalType: "contract IERC20", type: "address" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bool", type: "bool" }, - { name: "", internalType: "bool", type: "bool" }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [], - name: "deprecatedVeaOutbox", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "deprecatedVeaOutboxExpiration", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeHash", internalType: "bytes32", type: "bytes32" }], - name: "disputeHashToForeignID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "disputeHashtoDisputeData", - outputs: [ - { name: "id", internalType: "uint248", type: "uint248" }, - { name: "ruled", internalType: "bool", type: "bool" }, - { name: "arbitrable", internalType: "address", type: "address" }, - { name: "paid", internalType: "uint256", type: "uint256" }, - { name: "relayer", internalType: "address", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint96", type: "uint96" }], - name: "feeForJuror", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "homeChainID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "homeGateway", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_veaOutbox", internalType: "address", type: "address" }, - { name: "_homeChainID", internalType: "uint256", type: "uint256" }, - { name: "_homeGateway", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_messageSender", internalType: "address", type: "address" }, - { name: "_disputeHash", internalType: "bytes32", type: "bytes32" }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - { name: "_relayer", internalType: "address", type: "address" }, - ], - name: "relayRule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "senderGateway", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "veaOutbox", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeHash", internalType: "bytes32", type: "bytes32" }], - name: "withdrawFees", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xA4096fDA5291D5bbDD5Ed0D6CF2AF98229168Ace) - */ -export const foreignGatewayOnGnosisImplementationAddress = { - 10200: "0xA4096fDA5291D5bbDD5Ed0D6CF2AF98229168Ace", -} as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xA4096fDA5291D5bbDD5Ed0D6CF2AF98229168Ace) - */ -export const foreignGatewayOnGnosisImplementationConfig = { - address: foreignGatewayOnGnosisImplementationAddress, - abi: foreignGatewayOnGnosisImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ForeignGatewayOnGnosis_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x078dAd05373d19d7fd6829735b765F12242a4300) - */ -export const foreignGatewayOnGnosisProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x078dAd05373d19d7fd6829735b765F12242a4300) - */ -export const foreignGatewayOnGnosisProxyAddress = { - 10200: "0x078dAd05373d19d7fd6829735b765F12242a4300", -} as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x078dAd05373d19d7fd6829735b765F12242a4300) - */ -export const foreignGatewayOnGnosisProxyConfig = { - address: foreignGatewayOnGnosisProxyAddress, - abi: foreignGatewayOnGnosisProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// IHomeGateway -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -export const iHomeGatewayAbi = [ - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: false, - }, - { - name: "_arbitrableChainId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_arbitrable", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_arbitrableDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "CrossChainDisputeIncoming", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeRequest", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "function", - inputs: [{ name: "_disputeHash", internalType: "bytes32", type: "bytes32" }], - name: "disputeHashToHomeID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "feeToken", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "foreignChainID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "foreignGateway", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "receiverGateway", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_params", - internalType: "struct IHomeGateway.RelayCreateDisputeParams", - type: "tuple", - components: [ - { - name: "foreignBlockHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "foreignChainID", internalType: "uint256", type: "uint256" }, - { - name: "foreignArbitrable", - internalType: "address", - type: "address", - }, - { - name: "foreignDisputeID", - internalType: "uint256", - type: "uint256", - }, - { - name: "externalDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "templateId", internalType: "uint256", type: "uint256" }, - { name: "templateUri", internalType: "string", type: "string" }, - { name: "choices", internalType: "uint256", type: "uint256" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "relayCreateDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_params", - internalType: "struct IHomeGateway.RelayCreateDisputeParams", - type: "tuple", - components: [ - { - name: "foreignBlockHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "foreignChainID", internalType: "uint256", type: "uint256" }, - { - name: "foreignArbitrable", - internalType: "address", - type: "address", - }, - { - name: "foreignDisputeID", - internalType: "uint256", - type: "uint256", - }, - { - name: "externalDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "templateId", internalType: "uint256", type: "uint256" }, - { name: "templateUri", internalType: "string", type: "string" }, - { name: "choices", internalType: "uint256", type: "uint256" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - name: "relayCreateDispute", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "veaInbox", - outputs: [{ name: "", internalType: "contract IVeaInbox", type: "address" }], - stateMutability: "view", - }, -] as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCore -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9) - */ -export const klerosCoreAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "AppealFeesNotEnough" }, - { type: "error", inputs: [], name: "AppealPeriodNotPassed" }, - { type: "error", inputs: [], name: "ArbitrationFeesNotEnough" }, - { type: "error", inputs: [], name: "CannotDisableClassicDK" }, - { type: "error", inputs: [], name: "CommitPeriodNotPassed" }, - { type: "error", inputs: [], name: "DisputeKitNotSupportedByCourt" }, - { type: "error", inputs: [], name: "DisputeKitOnly" }, - { type: "error", inputs: [], name: "DisputeNotAppealable" }, - { type: "error", inputs: [], name: "DisputePeriodIsFinal" }, - { type: "error", inputs: [], name: "DisputeStillDrawing" }, - { type: "error", inputs: [], name: "EvidenceNotPassedAndNotAppeal" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { type: "error", inputs: [], name: "GovernorOnly" }, - { type: "error", inputs: [], name: "GuardianOrGovernorOnly" }, - { type: "error", inputs: [], name: "InvalidDisputKitParent" }, - { type: "error", inputs: [], name: "InvalidForkingCourtAsParent" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "MinStakeLowerThanParentCourt" }, - { type: "error", inputs: [], name: "MustSupportDisputeKitClassic" }, - { type: "error", inputs: [], name: "NotEvidencePeriod" }, - { type: "error", inputs: [], name: "NotExecutionPeriod" }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "RulingAlreadyExecuted" }, - { type: "error", inputs: [], name: "SortitionModuleOnly" }, - { type: "error", inputs: [], name: "StakingInTooManyCourts" }, - { type: "error", inputs: [], name: "StakingLessThanCourtMinStake" }, - { type: "error", inputs: [], name: "StakingNotPossibleInThisCourt" }, - { type: "error", inputs: [], name: "StakingTransferFailed" }, - { type: "error", inputs: [], name: "StakingZeroWhenNoStake" }, - { type: "error", inputs: [], name: "TokenNotAccepted" }, - { type: "error", inputs: [], name: "TransferFailed" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { type: "error", inputs: [], name: "UnstakingTransferFailed" }, - { type: "error", inputs: [], name: "UnsuccessfulCall" }, - { type: "error", inputs: [], name: "UnsupportedDisputeKit" }, - { type: "error", inputs: [], name: "VotePeriodNotPassed" }, - { type: "error", inputs: [], name: "WhenNotPausedOnly" }, - { type: "error", inputs: [], name: "WhenPausedOnly" }, - { type: "error", inputs: [], name: "WrongDisputeKitIndex" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealDecision", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealPossible", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_parent", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "CourtCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromCourtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_toCourtID", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - ], - name: "CourtJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - indexed: true, - }, - ], - name: "DisputeKitCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { name: "_enable", internalType: "bool", type: "bool", indexed: true }, - ], - name: "DisputeKitEnabled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_toDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "DisputeKitJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_voteID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Draw", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_pnkAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "LeftoverRewardSent", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum KlerosCoreBase.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { type: "event", anonymous: false, inputs: [], name: "Paused" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_degreeOfCoherency", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_pnkAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { type: "event", anonymous: false, inputs: [], name: "Unpaused" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [ - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealPeriod", - outputs: [ - { name: "start", internalType: "uint256", type: "uint256" }, - { name: "end", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_accepted", internalType: "bool", type: "bool" }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_rateInEth", internalType: "uint64", type: "uint64" }, - { name: "_rateDecimals", internalType: "uint8", type: "uint8" }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_guardian", internalType: "address", type: "address" }], - name: "changeGuardian", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_pinakion", internalType: "contract IERC20", type: "address" }], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_sortitionModule", - internalType: "contract ISortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_toToken", internalType: "contract IERC20", type: "address" }, - { name: "_amountInEth", internalType: "uint256", type: "uint256" }, - ], - name: "convertEthToTokenAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { name: "disabled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - name: "currencyRates", - outputs: [ - { name: "feePaymentAccepted", internalType: "bool", type: "bool" }, - { name: "rateInEth", internalType: "uint64", type: "uint64" }, - { name: "rateDecimals", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputeKits", - outputs: [{ name: "", internalType: "contract IDisputeKit", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "courtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrableV2", - type: "address", - }, - { - name: "period", - internalType: "enum KlerosCoreBase.Period", - type: "uint8", - }, - { name: "ruled", internalType: "bool", type: "bool" }, - { name: "lastPeriodChange", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "nbDrawnJurors", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_enable", internalType: "bool", type: "bool" }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "getDisputeKitsLength", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfVotes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getPnkAtStakePerJuror", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { - name: "", - internalType: "struct KlerosCoreBase.Round", - type: "tuple", - components: [ - { name: "disputeKitID", internalType: "uint256", type: "uint256" }, - { - name: "pnkAtStakePerJuror", - internalType: "uint256", - type: "uint256", - }, - { - name: "totalFeesForJurors", - internalType: "uint256", - type: "uint256", - }, - { name: "nbVotes", internalType: "uint256", type: "uint256" }, - { name: "repartitions", internalType: "uint256", type: "uint256" }, - { name: "pnkPenalties", internalType: "uint256", type: "uint256" }, - { name: "drawnJurors", internalType: "address[]", type: "address[]" }, - { - name: "sumFeeRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "sumPnkRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "feeToken", - internalType: "contract IERC20", - type: "address", - }, - { name: "drawIterations", internalType: "uint256", type: "uint256" }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_courtID", internalType: "uint96", type: "uint96" }], - name: "getTimesPerPeriod", - outputs: [ - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "guardian", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_guardian", internalType: "address", type: "address" }, - { name: "_pinakion", internalType: "contract IERC20", type: "address" }, - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - { - name: "_disputeKit", - internalType: "contract IDisputeKit", - type: "address", - }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_sortitionModuleAddress", - internalType: "contract ISortitionModule", - type: "address", - }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "isDisputeKitJumping", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitID", internalType: "uint256", type: "uint256" }, - ], - name: "isSupported", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "jurorProsecutionModule", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "paused", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "sortitionModule", - outputs: [{ name: "", internalType: "contract ISortitionModule", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9) - */ -export const klerosCoreAddress = { - 421614: "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9) - */ -export const klerosCoreConfig = { - address: klerosCoreAddress, - abi: klerosCoreAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCoreRuler -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0630e4248a17b506809009F5D88E2f5bEE584c83) - */ -export const klerosCoreRulerAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "AppealFeesNotEnough" }, - { type: "error", inputs: [], name: "ArbitrationFeesNotEnough" }, - { type: "error", inputs: [], name: "DisputeNotAppealable" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { type: "error", inputs: [], name: "GovernorOnly" }, - { type: "error", inputs: [], name: "GovernorOrInstructorOnly" }, - { type: "error", inputs: [], name: "InvalidForkingCourtAsParent" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NoRulerSet" }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "RulerOnly" }, - { type: "error", inputs: [], name: "RulingAlreadyExecuted" }, - { type: "error", inputs: [], name: "RulingModeNotSet" }, - { type: "error", inputs: [], name: "TokenNotAccepted" }, - { type: "error", inputs: [], name: "TransferFailed" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { type: "error", inputs: [], name: "UnsuccessfulCall" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealDecision", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealPossible", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "mode", - internalType: "enum KlerosCoreRuler.RulingMode", - type: "uint8", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "tied", internalType: "bool", type: "bool", indexed: false }, - { - name: "overridden", - internalType: "bool", - type: "bool", - indexed: false, - }, - ], - name: "AutoRuled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_parent", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromCourtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_toCourtID", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - ], - name: "CourtJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_pnkAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "LeftoverRewardSent", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum KlerosCoreRuler.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_oldRuler", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_newRuler", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RulerChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_settings", - internalType: "struct KlerosCoreRuler.RulerSettings", - type: "tuple", - components: [ - { - name: "rulingMode", - internalType: "enum KlerosCoreRuler.RulingMode", - type: "uint8", - }, - { name: "presetRuling", internalType: "uint256", type: "uint256" }, - { name: "presetTied", internalType: "bool", type: "bool" }, - { name: "presetOverridden", internalType: "bool", type: "bool" }, - ], - indexed: false, - }, - ], - name: "RulerSettingsChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_degreeOfCoherency", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_pnkAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - { name: "_jump", internalType: "bool", type: "bool" }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_jump", internalType: "bool", type: "bool" }, - ], - name: "appealCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_accepted", internalType: "bool", type: "bool" }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_rateInEth", internalType: "uint64", type: "uint64" }, - { name: "_rateDecimals", internalType: "uint8", type: "uint8" }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_pinakion", internalType: "contract IERC20", type: "address" }], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - { name: "_newRuler", internalType: "address", type: "address" }, - ], - name: "changeRuler", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - { name: "_presetRuling", internalType: "uint256", type: "uint256" }, - { name: "_presetTied", internalType: "bool", type: "bool" }, - { name: "_presetOverridden", internalType: "bool", type: "bool" }, - ], - name: "changeRulingModeToAutomaticPreset", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "changeRulingModeToAutomaticRandom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "changeRulingModeToManual", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_toToken", internalType: "contract IERC20", type: "address" }, - { name: "_amountInEth", internalType: "uint256", type: "uint256" }, - ], - name: "convertEthToTokenAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { name: "disabled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - name: "currencyRates", - outputs: [ - { name: "feePaymentAccepted", internalType: "bool", type: "bool" }, - { name: "rateInEth", internalType: "uint64", type: "uint64" }, - { name: "rateDecimals", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "courtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrableV2", - type: "address", - }, - { - name: "period", - internalType: "enum KlerosCoreRuler.Period", - type: "uint8", - }, - { name: "ruled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "getNextDisputeID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfVotes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { - name: "", - internalType: "struct KlerosCoreRuler.Round", - type: "tuple", - components: [ - { - name: "totalFeesForJurors", - internalType: "uint256", - type: "uint256", - }, - { - name: "sumFeeRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "feeToken", - internalType: "contract IERC20", - type: "address", - }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_courtID", internalType: "uint96", type: "uint96" }], - name: "getTimesPerPeriod", - outputs: [ - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_pinakion", internalType: "contract IERC20", type: "address" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "rulers", - outputs: [{ name: "ruler", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - name: "rulingResults", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "settings", - outputs: [ - { - name: "rulingMode", - internalType: "enum KlerosCoreRuler.RulingMode", - type: "uint8", - }, - { name: "presetRuling", internalType: "uint256", type: "uint256" }, - { name: "presetTied", internalType: "bool", type: "bool" }, - { name: "presetOverridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0630e4248a17b506809009F5D88E2f5bEE584c83) - */ -export const klerosCoreRulerAddress = { - 421614: "0x0630e4248a17b506809009F5D88E2f5bEE584c83", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0630e4248a17b506809009F5D88E2f5bEE584c83) - */ -export const klerosCoreRulerConfig = { - address: klerosCoreRulerAddress, - abi: klerosCoreRulerAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCoreRuler_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF) - */ -export const klerosCoreRulerImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "AppealFeesNotEnough" }, - { type: "error", inputs: [], name: "ArbitrationFeesNotEnough" }, - { type: "error", inputs: [], name: "DisputeNotAppealable" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { type: "error", inputs: [], name: "GovernorOnly" }, - { type: "error", inputs: [], name: "GovernorOrInstructorOnly" }, - { type: "error", inputs: [], name: "InvalidForkingCourtAsParent" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NoRulerSet" }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "RulerOnly" }, - { type: "error", inputs: [], name: "RulingAlreadyExecuted" }, - { type: "error", inputs: [], name: "RulingModeNotSet" }, - { type: "error", inputs: [], name: "TokenNotAccepted" }, - { type: "error", inputs: [], name: "TransferFailed" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { type: "error", inputs: [], name: "UnsuccessfulCall" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealDecision", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealPossible", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "mode", - internalType: "enum KlerosCoreRuler.RulingMode", - type: "uint8", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "tied", internalType: "bool", type: "bool", indexed: false }, - { - name: "overridden", - internalType: "bool", - type: "bool", - indexed: false, - }, - ], - name: "AutoRuled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_parent", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromCourtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_toCourtID", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - ], - name: "CourtJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_pnkAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "LeftoverRewardSent", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum KlerosCoreRuler.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_oldRuler", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_newRuler", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RulerChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_settings", - internalType: "struct KlerosCoreRuler.RulerSettings", - type: "tuple", - components: [ - { - name: "rulingMode", - internalType: "enum KlerosCoreRuler.RulingMode", - type: "uint8", - }, - { name: "presetRuling", internalType: "uint256", type: "uint256" }, - { name: "presetTied", internalType: "bool", type: "bool" }, - { name: "presetOverridden", internalType: "bool", type: "bool" }, - ], - indexed: false, - }, - ], - name: "RulerSettingsChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_degreeOfCoherency", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_pnkAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - { name: "_jump", internalType: "bool", type: "bool" }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_jump", internalType: "bool", type: "bool" }, - ], - name: "appealCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_accepted", internalType: "bool", type: "bool" }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_rateInEth", internalType: "uint64", type: "uint64" }, - { name: "_rateDecimals", internalType: "uint8", type: "uint8" }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_pinakion", internalType: "contract IERC20", type: "address" }], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - { name: "_newRuler", internalType: "address", type: "address" }, - ], - name: "changeRuler", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - { name: "_presetRuling", internalType: "uint256", type: "uint256" }, - { name: "_presetTied", internalType: "bool", type: "bool" }, - { name: "_presetOverridden", internalType: "bool", type: "bool" }, - ], - name: "changeRulingModeToAutomaticPreset", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "changeRulingModeToAutomaticRandom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "changeRulingModeToManual", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_toToken", internalType: "contract IERC20", type: "address" }, - { name: "_amountInEth", internalType: "uint256", type: "uint256" }, - ], - name: "convertEthToTokenAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { name: "disabled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - name: "currencyRates", - outputs: [ - { name: "feePaymentAccepted", internalType: "bool", type: "bool" }, - { name: "rateInEth", internalType: "uint64", type: "uint64" }, - { name: "rateDecimals", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "courtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrableV2", - type: "address", - }, - { - name: "period", - internalType: "enum KlerosCoreRuler.Period", - type: "uint8", - }, - { name: "ruled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "getNextDisputeID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfVotes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { - name: "", - internalType: "struct KlerosCoreRuler.Round", - type: "tuple", - components: [ - { - name: "totalFeesForJurors", - internalType: "uint256", - type: "uint256", - }, - { - name: "sumFeeRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "feeToken", - internalType: "contract IERC20", - type: "address", - }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_courtID", internalType: "uint96", type: "uint96" }], - name: "getTimesPerPeriod", - outputs: [ - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_pinakion", internalType: "contract IERC20", type: "address" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "rulers", - outputs: [{ name: "ruler", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - name: "rulingResults", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "settings", - outputs: [ - { - name: "rulingMode", - internalType: "enum KlerosCoreRuler.RulingMode", - type: "uint8", - }, - { name: "presetRuling", internalType: "uint256", type: "uint256" }, - { name: "presetTied", internalType: "bool", type: "bool" }, - { name: "presetOverridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF) - */ -export const klerosCoreRulerImplementationAddress = { - 421614: "0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF) - */ -export const klerosCoreRulerImplementationConfig = { - address: klerosCoreRulerImplementationAddress, - abi: klerosCoreRulerImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCoreRuler_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0630e4248a17b506809009F5D88E2f5bEE584c83) - */ -export const klerosCoreRulerProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0630e4248a17b506809009F5D88E2f5bEE584c83) - */ -export const klerosCoreRulerProxyAddress = { - 421614: "0x0630e4248a17b506809009F5D88E2f5bEE584c83", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0630e4248a17b506809009F5D88E2f5bEE584c83) - */ -export const klerosCoreRulerProxyConfig = { - address: klerosCoreRulerProxyAddress, - abi: klerosCoreRulerProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCoreSnapshotProxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xF924ac62b20901914c101Fa089Da1FB6A0585138) - */ -export const klerosCoreSnapshotProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract IKlerosCore", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "totalStaked", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "contract IKlerosCore", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract IKlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xF924ac62b20901914c101Fa089Da1FB6A0585138) - */ -export const klerosCoreSnapshotProxyAddress = { - 421614: "0xF924ac62b20901914c101Fa089Da1FB6A0585138", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xF924ac62b20901914c101Fa089Da1FB6A0585138) - */ -export const klerosCoreSnapshotProxyConfig = { - address: klerosCoreSnapshotProxyAddress, - abi: klerosCoreSnapshotProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCoreUniversity -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5AB37F38778Bc175852fA353056591D91c744ce6) - */ -export const klerosCoreUniversityAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AllJurorsDrawn" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "AppealFeesNotEnough" }, - { type: "error", inputs: [], name: "AppealPeriodNotPassed" }, - { type: "error", inputs: [], name: "ArbitrationFeesNotEnough" }, - { type: "error", inputs: [], name: "ArraysLengthMismatch" }, - { type: "error", inputs: [], name: "CannotDisableClassicDK" }, - { type: "error", inputs: [], name: "CommitPeriodNotPassed" }, - { type: "error", inputs: [], name: "DepthLevelMax" }, - { type: "error", inputs: [], name: "DisputeKitNotSupportedByCourt" }, - { type: "error", inputs: [], name: "DisputeKitOnly" }, - { type: "error", inputs: [], name: "DisputeNotAppealable" }, - { type: "error", inputs: [], name: "DisputePeriodIsFinal" }, - { type: "error", inputs: [], name: "DisputeStillDrawing" }, - { type: "error", inputs: [], name: "EvidenceNotPassedAndNotAppeal" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { type: "error", inputs: [], name: "GovernorOnly" }, - { type: "error", inputs: [], name: "GovernorOrInstructorOnly" }, - { type: "error", inputs: [], name: "InstructorOnly" }, - { type: "error", inputs: [], name: "InvalidDisputKitParent" }, - { type: "error", inputs: [], name: "InvalidForkingCourtAsParent" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "MinStakeLowerThanParentCourt" }, - { type: "error", inputs: [], name: "MustSupportDisputeKitClassic" }, - { type: "error", inputs: [], name: "NoJurorDrawn" }, - { type: "error", inputs: [], name: "NotEvidencePeriod" }, - { type: "error", inputs: [], name: "NotExecutionPeriod" }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "RulingAlreadyExecuted" }, - { type: "error", inputs: [], name: "SortitionModuleOnly" }, - { type: "error", inputs: [], name: "StakingInTooManyCourts" }, - { type: "error", inputs: [], name: "StakingLessThanCourtMinStake" }, - { type: "error", inputs: [], name: "StakingNotPossibeInThisCourt" }, - { type: "error", inputs: [], name: "StakingTransferFailed" }, - { type: "error", inputs: [], name: "TokenNotAccepted" }, - { type: "error", inputs: [], name: "TransferFailed" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { type: "error", inputs: [], name: "UnstakingTransferFailed" }, - { type: "error", inputs: [], name: "UnsuccessfulCall" }, - { type: "error", inputs: [], name: "UnsupportedDisputeKit" }, - { type: "error", inputs: [], name: "VotePeriodNotPassed" }, - { type: "error", inputs: [], name: "WrongDisputeKitIndex" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealDecision", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealPossible", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_parent", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "CourtCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromCourtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_toCourtID", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - ], - name: "CourtJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - indexed: true, - }, - ], - name: "DisputeKitCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { name: "_enable", internalType: "bool", type: "bool", indexed: true }, - ], - name: "DisputeKitEnabled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_toDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "DisputeKitJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_voteID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Draw", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_pnkAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "LeftoverRewardSent", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum KlerosCoreUniversity.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_degreeOfCoherency", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_pnkAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [ - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealPeriod", - outputs: [ - { name: "start", internalType: "uint256", type: "uint256" }, - { name: "end", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_accepted", internalType: "bool", type: "bool" }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_rateInEth", internalType: "uint64", type: "uint64" }, - { name: "_rateDecimals", internalType: "uint8", type: "uint8" }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_instructor", internalType: "address", type: "address" }], - name: "changeInstructor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_pinakion", internalType: "contract IERC20", type: "address" }], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_sortitionModule", - internalType: "contract ISortitionModuleUniversity", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_toToken", internalType: "contract IERC20", type: "address" }, - { name: "_amountInEth", internalType: "uint256", type: "uint256" }, - ], - name: "convertEthToTokenAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { name: "disabled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - name: "currencyRates", - outputs: [ - { name: "feePaymentAccepted", internalType: "bool", type: "bool" }, - { name: "rateInEth", internalType: "uint64", type: "uint64" }, - { name: "rateDecimals", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputeKits", - outputs: [{ name: "", internalType: "contract IDisputeKit", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "courtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrableV2", - type: "address", - }, - { - name: "period", - internalType: "enum KlerosCoreUniversity.Period", - type: "uint8", - }, - { name: "ruled", internalType: "bool", type: "bool" }, - { name: "lastPeriodChange", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_juror", internalType: "address", type: "address" }, - ], - name: "draw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_enable", internalType: "bool", type: "bool" }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "getDisputeKitsLength", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfVotes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { - name: "", - internalType: "struct KlerosCoreUniversity.Round", - type: "tuple", - components: [ - { name: "disputeKitID", internalType: "uint256", type: "uint256" }, - { - name: "pnkAtStakePerJuror", - internalType: "uint256", - type: "uint256", - }, - { - name: "totalFeesForJurors", - internalType: "uint256", - type: "uint256", - }, - { name: "nbVotes", internalType: "uint256", type: "uint256" }, - { name: "repartitions", internalType: "uint256", type: "uint256" }, - { name: "pnkPenalties", internalType: "uint256", type: "uint256" }, - { name: "drawnJurors", internalType: "address[]", type: "address[]" }, - { - name: "sumFeeRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "sumPnkRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "feeToken", - internalType: "contract IERC20", - type: "address", - }, - { name: "drawIterations", internalType: "uint256", type: "uint256" }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_courtID", internalType: "uint96", type: "uint96" }], - name: "getTimesPerPeriod", - outputs: [ - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_instructor", internalType: "address", type: "address" }, - { name: "_pinakion", internalType: "contract IERC20", type: "address" }, - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - { - name: "_disputeKit", - internalType: "contract IDisputeKit", - type: "address", - }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_sortitionModuleAddress", - internalType: "contract ISortitionModuleUniversity", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "instructor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "isDisputeKitJumping", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitID", internalType: "uint256", type: "uint256" }, - ], - name: "isSupported", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "jurorProsecutionModule", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - { name: "_alreadyTransferred", internalType: "bool", type: "bool" }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "sortitionModule", - outputs: [ - { - name: "", - internalType: "contract ISortitionModuleUniversity", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5AB37F38778Bc175852fA353056591D91c744ce6) - */ -export const klerosCoreUniversityAddress = { - 421614: "0x5AB37F38778Bc175852fA353056591D91c744ce6", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5AB37F38778Bc175852fA353056591D91c744ce6) - */ -export const klerosCoreUniversityConfig = { - address: klerosCoreUniversityAddress, - abi: klerosCoreUniversityAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCoreUniversity_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xF74DaBfC5F5dbdBD07636637204d9C35326D2906) - */ -export const klerosCoreUniversityImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AllJurorsDrawn" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "AppealFeesNotEnough" }, - { type: "error", inputs: [], name: "AppealPeriodNotPassed" }, - { type: "error", inputs: [], name: "ArbitrationFeesNotEnough" }, - { type: "error", inputs: [], name: "ArraysLengthMismatch" }, - { type: "error", inputs: [], name: "CannotDisableClassicDK" }, - { type: "error", inputs: [], name: "CommitPeriodNotPassed" }, - { type: "error", inputs: [], name: "DepthLevelMax" }, - { type: "error", inputs: [], name: "DisputeKitNotSupportedByCourt" }, - { type: "error", inputs: [], name: "DisputeKitOnly" }, - { type: "error", inputs: [], name: "DisputeNotAppealable" }, - { type: "error", inputs: [], name: "DisputePeriodIsFinal" }, - { type: "error", inputs: [], name: "DisputeStillDrawing" }, - { type: "error", inputs: [], name: "EvidenceNotPassedAndNotAppeal" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { type: "error", inputs: [], name: "GovernorOnly" }, - { type: "error", inputs: [], name: "GovernorOrInstructorOnly" }, - { type: "error", inputs: [], name: "InstructorOnly" }, - { type: "error", inputs: [], name: "InvalidDisputKitParent" }, - { type: "error", inputs: [], name: "InvalidForkingCourtAsParent" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "MinStakeLowerThanParentCourt" }, - { type: "error", inputs: [], name: "MustSupportDisputeKitClassic" }, - { type: "error", inputs: [], name: "NoJurorDrawn" }, - { type: "error", inputs: [], name: "NotEvidencePeriod" }, - { type: "error", inputs: [], name: "NotExecutionPeriod" }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "RulingAlreadyExecuted" }, - { type: "error", inputs: [], name: "SortitionModuleOnly" }, - { type: "error", inputs: [], name: "StakingInTooManyCourts" }, - { type: "error", inputs: [], name: "StakingLessThanCourtMinStake" }, - { type: "error", inputs: [], name: "StakingNotPossibeInThisCourt" }, - { type: "error", inputs: [], name: "StakingTransferFailed" }, - { type: "error", inputs: [], name: "TokenNotAccepted" }, - { type: "error", inputs: [], name: "TransferFailed" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { type: "error", inputs: [], name: "UnstakingTransferFailed" }, - { type: "error", inputs: [], name: "UnsuccessfulCall" }, - { type: "error", inputs: [], name: "UnsupportedDisputeKit" }, - { type: "error", inputs: [], name: "VotePeriodNotPassed" }, - { type: "error", inputs: [], name: "WrongDisputeKitIndex" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealDecision", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealPossible", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_parent", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "CourtCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromCourtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_toCourtID", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - ], - name: "CourtJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - indexed: true, - }, - ], - name: "DisputeKitCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { name: "_enable", internalType: "bool", type: "bool", indexed: true }, - ], - name: "DisputeKitEnabled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_toDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "DisputeKitJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_voteID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Draw", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_pnkAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "LeftoverRewardSent", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum KlerosCoreUniversity.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_degreeOfCoherency", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_pnkAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [ - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealPeriod", - outputs: [ - { name: "start", internalType: "uint256", type: "uint256" }, - { name: "end", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_accepted", internalType: "bool", type: "bool" }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_rateInEth", internalType: "uint64", type: "uint64" }, - { name: "_rateDecimals", internalType: "uint8", type: "uint8" }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_instructor", internalType: "address", type: "address" }], - name: "changeInstructor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_pinakion", internalType: "contract IERC20", type: "address" }], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_sortitionModule", - internalType: "contract ISortitionModuleUniversity", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_toToken", internalType: "contract IERC20", type: "address" }, - { name: "_amountInEth", internalType: "uint256", type: "uint256" }, - ], - name: "convertEthToTokenAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { name: "disabled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - name: "currencyRates", - outputs: [ - { name: "feePaymentAccepted", internalType: "bool", type: "bool" }, - { name: "rateInEth", internalType: "uint64", type: "uint64" }, - { name: "rateDecimals", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputeKits", - outputs: [{ name: "", internalType: "contract IDisputeKit", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "courtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrableV2", - type: "address", - }, - { - name: "period", - internalType: "enum KlerosCoreUniversity.Period", - type: "uint8", - }, - { name: "ruled", internalType: "bool", type: "bool" }, - { name: "lastPeriodChange", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_juror", internalType: "address", type: "address" }, - ], - name: "draw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_enable", internalType: "bool", type: "bool" }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "getDisputeKitsLength", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfVotes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { - name: "", - internalType: "struct KlerosCoreUniversity.Round", - type: "tuple", - components: [ - { name: "disputeKitID", internalType: "uint256", type: "uint256" }, - { - name: "pnkAtStakePerJuror", - internalType: "uint256", - type: "uint256", - }, - { - name: "totalFeesForJurors", - internalType: "uint256", - type: "uint256", - }, - { name: "nbVotes", internalType: "uint256", type: "uint256" }, - { name: "repartitions", internalType: "uint256", type: "uint256" }, - { name: "pnkPenalties", internalType: "uint256", type: "uint256" }, - { name: "drawnJurors", internalType: "address[]", type: "address[]" }, - { - name: "sumFeeRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "sumPnkRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "feeToken", - internalType: "contract IERC20", - type: "address", - }, - { name: "drawIterations", internalType: "uint256", type: "uint256" }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_courtID", internalType: "uint96", type: "uint96" }], - name: "getTimesPerPeriod", - outputs: [ - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_instructor", internalType: "address", type: "address" }, - { name: "_pinakion", internalType: "contract IERC20", type: "address" }, - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - { - name: "_disputeKit", - internalType: "contract IDisputeKit", - type: "address", - }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_sortitionModuleAddress", - internalType: "contract ISortitionModuleUniversity", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "instructor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "isDisputeKitJumping", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitID", internalType: "uint256", type: "uint256" }, - ], - name: "isSupported", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "jurorProsecutionModule", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - { name: "_alreadyTransferred", internalType: "bool", type: "bool" }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "sortitionModule", - outputs: [ - { - name: "", - internalType: "contract ISortitionModuleUniversity", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xF74DaBfC5F5dbdBD07636637204d9C35326D2906) - */ -export const klerosCoreUniversityImplementationAddress = { - 421614: "0xF74DaBfC5F5dbdBD07636637204d9C35326D2906", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xF74DaBfC5F5dbdBD07636637204d9C35326D2906) - */ -export const klerosCoreUniversityImplementationConfig = { - address: klerosCoreUniversityImplementationAddress, - abi: klerosCoreUniversityImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCoreUniversity_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5AB37F38778Bc175852fA353056591D91c744ce6) - */ -export const klerosCoreUniversityProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5AB37F38778Bc175852fA353056591D91c744ce6) - */ -export const klerosCoreUniversityProxyAddress = { - 421614: "0x5AB37F38778Bc175852fA353056591D91c744ce6", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5AB37F38778Bc175852fA353056591D91c744ce6) - */ -export const klerosCoreUniversityProxyConfig = { - address: klerosCoreUniversityProxyAddress, - abi: klerosCoreUniversityProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCore_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xaBf1AA1D08F98ED800938B1B086d0904c5BF4f0E) - */ -export const klerosCoreImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "AppealFeesNotEnough" }, - { type: "error", inputs: [], name: "AppealPeriodNotPassed" }, - { type: "error", inputs: [], name: "ArbitrationFeesNotEnough" }, - { type: "error", inputs: [], name: "CannotDisableClassicDK" }, - { type: "error", inputs: [], name: "CommitPeriodNotPassed" }, - { type: "error", inputs: [], name: "DisputeKitNotSupportedByCourt" }, - { type: "error", inputs: [], name: "DisputeKitOnly" }, - { type: "error", inputs: [], name: "DisputeNotAppealable" }, - { type: "error", inputs: [], name: "DisputePeriodIsFinal" }, - { type: "error", inputs: [], name: "DisputeStillDrawing" }, - { type: "error", inputs: [], name: "EvidenceNotPassedAndNotAppeal" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { type: "error", inputs: [], name: "GovernorOnly" }, - { type: "error", inputs: [], name: "GuardianOrGovernorOnly" }, - { type: "error", inputs: [], name: "InvalidDisputKitParent" }, - { type: "error", inputs: [], name: "InvalidForkingCourtAsParent" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "MinStakeLowerThanParentCourt" }, - { type: "error", inputs: [], name: "MustSupportDisputeKitClassic" }, - { type: "error", inputs: [], name: "NotEvidencePeriod" }, - { type: "error", inputs: [], name: "NotExecutionPeriod" }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "RulingAlreadyExecuted" }, - { type: "error", inputs: [], name: "SortitionModuleOnly" }, - { type: "error", inputs: [], name: "StakingInTooManyCourts" }, - { type: "error", inputs: [], name: "StakingLessThanCourtMinStake" }, - { type: "error", inputs: [], name: "StakingNotPossibleInThisCourt" }, - { type: "error", inputs: [], name: "StakingTransferFailed" }, - { type: "error", inputs: [], name: "StakingZeroWhenNoStake" }, - { type: "error", inputs: [], name: "TokenNotAccepted" }, - { type: "error", inputs: [], name: "TransferFailed" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { type: "error", inputs: [], name: "UnstakingTransferFailed" }, - { type: "error", inputs: [], name: "UnsuccessfulCall" }, - { type: "error", inputs: [], name: "UnsupportedDisputeKit" }, - { type: "error", inputs: [], name: "VotePeriodNotPassed" }, - { type: "error", inputs: [], name: "WhenNotPausedOnly" }, - { type: "error", inputs: [], name: "WhenPausedOnly" }, - { type: "error", inputs: [], name: "WrongDisputeKitIndex" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealDecision", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealPossible", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_parent", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "CourtCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromCourtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_toCourtID", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - ], - name: "CourtJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - indexed: true, - }, - ], - name: "DisputeKitCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { name: "_enable", internalType: "bool", type: "bool", indexed: true }, - ], - name: "DisputeKitEnabled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_toDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "DisputeKitJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_voteID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Draw", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_pnkAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "LeftoverRewardSent", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum KlerosCoreBase.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { type: "event", anonymous: false, inputs: [], name: "Paused" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_degreeOfCoherency", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_pnkAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { type: "event", anonymous: false, inputs: [], name: "Unpaused" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [ - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealPeriod", - outputs: [ - { name: "start", internalType: "uint256", type: "uint256" }, - { name: "end", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_accepted", internalType: "bool", type: "bool" }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_rateInEth", internalType: "uint64", type: "uint64" }, - { name: "_rateDecimals", internalType: "uint8", type: "uint8" }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_guardian", internalType: "address", type: "address" }], - name: "changeGuardian", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_pinakion", internalType: "contract IERC20", type: "address" }], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_sortitionModule", - internalType: "contract ISortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_toToken", internalType: "contract IERC20", type: "address" }, - { name: "_amountInEth", internalType: "uint256", type: "uint256" }, - ], - name: "convertEthToTokenAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { name: "disabled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - name: "currencyRates", - outputs: [ - { name: "feePaymentAccepted", internalType: "bool", type: "bool" }, - { name: "rateInEth", internalType: "uint64", type: "uint64" }, - { name: "rateDecimals", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputeKits", - outputs: [{ name: "", internalType: "contract IDisputeKit", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "courtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrableV2", - type: "address", - }, - { - name: "period", - internalType: "enum KlerosCoreBase.Period", - type: "uint8", - }, - { name: "ruled", internalType: "bool", type: "bool" }, - { name: "lastPeriodChange", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "nbDrawnJurors", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_enable", internalType: "bool", type: "bool" }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "getDisputeKitsLength", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfVotes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getPnkAtStakePerJuror", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { - name: "", - internalType: "struct KlerosCoreBase.Round", - type: "tuple", - components: [ - { name: "disputeKitID", internalType: "uint256", type: "uint256" }, - { - name: "pnkAtStakePerJuror", - internalType: "uint256", - type: "uint256", - }, - { - name: "totalFeesForJurors", - internalType: "uint256", - type: "uint256", - }, - { name: "nbVotes", internalType: "uint256", type: "uint256" }, - { name: "repartitions", internalType: "uint256", type: "uint256" }, - { name: "pnkPenalties", internalType: "uint256", type: "uint256" }, - { name: "drawnJurors", internalType: "address[]", type: "address[]" }, - { - name: "sumFeeRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "sumPnkRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "feeToken", - internalType: "contract IERC20", - type: "address", - }, - { name: "drawIterations", internalType: "uint256", type: "uint256" }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_courtID", internalType: "uint96", type: "uint96" }], - name: "getTimesPerPeriod", - outputs: [ - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "guardian", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_guardian", internalType: "address", type: "address" }, - { name: "_pinakion", internalType: "contract IERC20", type: "address" }, - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - { - name: "_disputeKit", - internalType: "contract IDisputeKit", - type: "address", - }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_sortitionModuleAddress", - internalType: "contract ISortitionModule", - type: "address", - }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "isDisputeKitJumping", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitID", internalType: "uint256", type: "uint256" }, - ], - name: "isSupported", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "jurorProsecutionModule", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "paused", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "sortitionModule", - outputs: [{ name: "", internalType: "contract ISortitionModule", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xaBf1AA1D08F98ED800938B1B086d0904c5BF4f0E) - */ -export const klerosCoreImplementationAddress = { - 421614: "0xaBf1AA1D08F98ED800938B1B086d0904c5BF4f0E", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xaBf1AA1D08F98ED800938B1B086d0904c5BF4f0E) - */ -export const klerosCoreImplementationConfig = { - address: klerosCoreImplementationAddress, - abi: klerosCoreImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCore_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9) - */ -export const klerosCoreProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9) - */ -export const klerosCoreProxyAddress = { - 421614: "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9) - */ -export const klerosCoreProxyConfig = { - address: klerosCoreProxyAddress, - abi: klerosCoreProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosV2NeoEarlyUser -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0d60Ff8bbCF49Bc5352328E7E28e141834d7750F) - */ -export const klerosV2NeoEarlyUserAbi = [ - { - type: "constructor", - inputs: [ - { name: "_name", internalType: "string", type: "string" }, - { name: "_symbol", internalType: "string", type: "string" }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "approved", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "approved", internalType: "bool", type: "bool", indexed: false }, - ], - name: "ApprovalForAll", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "owner", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_newOwner", internalType: "address", type: "address" }], - name: "changeOwner", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "getApproved", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "operator", internalType: "address", type: "address" }, - ], - name: "isApprovedForAll", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "ownerOf", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address", type: "address" }], - name: "safeMint", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "approved", internalType: "bool", type: "bool" }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "tokenURI", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0d60Ff8bbCF49Bc5352328E7E28e141834d7750F) - */ -export const klerosV2NeoEarlyUserAddress = { - 421614: "0x0d60Ff8bbCF49Bc5352328E7E28e141834d7750F", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0d60Ff8bbCF49Bc5352328E7E28e141834d7750F) - */ -export const klerosV2NeoEarlyUserConfig = { - address: klerosV2NeoEarlyUserAddress, - abi: klerosV2NeoEarlyUserAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PNK -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) - */ -export const pnkAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) - */ -export const pnkAddress = { - 421614: "0x34B944D42cAcfC8266955D07A80181D2054aa225", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) - */ -export const pnkConfig = { address: pnkAddress, abi: pnkAbi } as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PNKFaucet -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x7EFE468003Ad6A858b5350CDE0A67bBED58739dD) - */ -export const pnkFaucetAbi = [ - { - type: "constructor", - inputs: [{ name: "_token", internalType: "contract IERC20", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "amount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "balance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_amount", internalType: "uint256", type: "uint256" }], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "token", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "withdrewAlready", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x7EFE468003Ad6A858b5350CDE0A67bBED58739dD) - */ -export const pnkFaucetAddress = { - 421614: "0x7EFE468003Ad6A858b5350CDE0A67bBED58739dD", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x7EFE468003Ad6A858b5350CDE0A67bBED58739dD) - */ -export const pnkFaucetConfig = { - address: pnkFaucetAddress, - abi: pnkFaucetAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PinakionV2 -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) - * - [__View Contract on Sepolia Etherscan__](https://sepolia.etherscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5) - */ -export const pinakionV2Abi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) - * - [__View Contract on Sepolia Etherscan__](https://sepolia.etherscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5) - */ -export const pinakionV2Address = { - 421614: "0x34B944D42cAcfC8266955D07A80181D2054aa225", - 11155111: "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", -} as const; - -/** - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) - * - [__View Contract on Sepolia Etherscan__](https://sepolia.etherscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5) - */ -export const pinakionV2Config = { - address: pinakionV2Address, - abi: pinakionV2Abi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PolicyRegistry -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd8681dBF525ecBda2F799BFddB96840065075e8A) - */ -export const policyRegistryAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_courtName", - internalType: "string", - type: "string", - indexed: false, - }, - { - name: "_policy", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "PolicyUpdate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "policies", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint256", type: "uint256" }, - { name: "_courtName", internalType: "string", type: "string" }, - { name: "_policy", internalType: "string", type: "string" }, - ], - name: "setPolicy", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd8681dBF525ecBda2F799BFddB96840065075e8A) - */ -export const policyRegistryAddress = { - 421614: "0xd8681dBF525ecBda2F799BFddB96840065075e8A", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd8681dBF525ecBda2F799BFddB96840065075e8A) - */ -export const policyRegistryConfig = { - address: policyRegistryAddress, - abi: policyRegistryAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PolicyRegistry_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x472846F88D1356bb483a88f97B55026654Fc5deD) - */ -export const policyRegistryImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_courtName", - internalType: "string", - type: "string", - indexed: false, - }, - { - name: "_policy", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "PolicyUpdate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "policies", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint256", type: "uint256" }, - { name: "_courtName", internalType: "string", type: "string" }, - { name: "_policy", internalType: "string", type: "string" }, - ], - name: "setPolicy", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x472846F88D1356bb483a88f97B55026654Fc5deD) - */ -export const policyRegistryImplementationAddress = { - 421614: "0x472846F88D1356bb483a88f97B55026654Fc5deD", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x472846F88D1356bb483a88f97B55026654Fc5deD) - */ -export const policyRegistryImplementationConfig = { - address: policyRegistryImplementationAddress, - abi: policyRegistryImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PolicyRegistry_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd8681dBF525ecBda2F799BFddB96840065075e8A) - */ -export const policyRegistryProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd8681dBF525ecBda2F799BFddB96840065075e8A) - */ -export const policyRegistryProxyAddress = { - 421614: "0xd8681dBF525ecBda2F799BFddB96840065075e8A", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd8681dBF525ecBda2F799BFddB96840065075e8A) - */ -export const policyRegistryProxyConfig = { - address: policyRegistryProxyAddress, - abi: policyRegistryProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// RandomizerOracle -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b) - */ -export const randomizerOracleAbi = [] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b) - */ -export const randomizerOracleAddress = { - 421614: "0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b) - */ -export const randomizerOracleConfig = { - address: randomizerOracleAddress, - abi: randomizerOracleAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionModule -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663) - */ -export const sortitionModuleAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "LeftoverPNK", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "LeftoverPNKWithdrawn", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_phase", - internalType: "enum ISortitionModule.Phase", - type: "uint8", - indexed: false, - }, - ], - name: "NewPhase", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeDelayed", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_relativeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "_unlock", internalType: "bool", type: "bool", indexed: false }, - ], - name: "StakeLocked", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amountAllCourts", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_minStakingTime", internalType: "uint256", type: "uint256" }], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_rng", internalType: "contract RNG", type: "address" }, - { name: "_rngLookahead", internalType: "uint256", type: "uint256" }, - ], - name: "changeRandomNumberGenerator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "delayedStakeReadIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "delayedStakeWriteIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "delayedStakes", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "courtID", internalType: "uint96", type: "uint96" }, - { name: "stake", internalType: "uint256", type: "uint256" }, - { name: "alreadyTransferred", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "disputesWithoutJurors", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_iterations", internalType: "uint256", type: "uint256" }], - name: "executeDelayedStakes", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "getJurorBalance", - outputs: [ - { name: "totalStaked", internalType: "uint256", type: "uint256" }, - { name: "totalLocked", internalType: "uint256", type: "uint256" }, - { name: "stakedInCourt", internalType: "uint256", type: "uint256" }, - { name: "nbCourts", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorCourtIDs", - outputs: [{ name: "", internalType: "uint96[]", type: "uint96[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorLeftoverPNK", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_minStakingTime", internalType: "uint256", type: "uint256" }, - { name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }, - { name: "_rng", internalType: "contract RNG", type: "address" }, - { name: "_rngLookahead", internalType: "uint256", type: "uint256" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize4", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "isJurorStaked", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "jurors", - outputs: [ - { name: "stakedPnk", internalType: "uint256", type: "uint256" }, - { name: "lockedPnk", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lastPhaseChange", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "jurorAccount", internalType: "address", type: "address" }, - { name: "courtId", internalType: "uint96", type: "uint96" }, - ], - name: "latestDelayedStakeIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "maxDrawingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "minStakingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_randomNumber", internalType: "uint256", type: "uint256" }], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "passPhase", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "penalizeStake", - outputs: [ - { name: "pnkBalance", internalType: "uint256", type: "uint256" }, - { name: "availablePenalty", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "phase", - outputs: [{ name: "", internalType: "enum ISortitionModule.Phase", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomNumber", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomNumberRequestBlock", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "rng", - outputs: [{ name: "", internalType: "contract RNG", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "rngLookahead", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "_pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_ID", internalType: "bytes32", type: "bytes32" }, - ], - name: "stakeOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "stakeOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "validateStake", - outputs: [ - { name: "pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { - name: "stakingResult", - internalType: "enum StakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "withdrawLeftoverPNK", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663) - */ -export const sortitionModuleAddress = { - 421614: "0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663) - */ -export const sortitionModuleConfig = { - address: sortitionModuleAddress, - abi: sortitionModuleAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionModuleUniversity -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79) - */ -export const sortitionModuleUniversityAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_phase", - internalType: "enum ISortitionModule.Phase", - type: "uint8", - indexed: false, - }, - ], - name: "NewPhase", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_relativeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "_unlock", internalType: "bool", type: "bool", indexed: false }, - ], - name: "StakeLocked", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [ - { - name: "", - internalType: "contract KlerosCoreUniversity", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "disputesWithoutJurors", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "bytes32", type: "bytes32" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "getJurorBalance", - outputs: [ - { name: "totalStaked", internalType: "uint256", type: "uint256" }, - { name: "totalLocked", internalType: "uint256", type: "uint256" }, - { name: "stakedInCourt", internalType: "uint256", type: "uint256" }, - { name: "nbCourts", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorCourtIDs", - outputs: [{ name: "", internalType: "uint96[]", type: "uint96[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { - name: "_core", - internalType: "contract KlerosCoreUniversity", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "isJurorStaked", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "jurors", - outputs: [ - { name: "stakedPnk", internalType: "uint256", type: "uint256" }, - { name: "lockedPnk", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_randomNumber", internalType: "uint256", type: "uint256" }], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "penalizeStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - { name: "_alreadyTransferred", internalType: "bool", type: "bool" }, - ], - name: "setStake", - outputs: [ - { name: "pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { - name: "stakingResult", - internalType: "enum StakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "setTransientJuror", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79) - */ -export const sortitionModuleUniversityAddress = { - 421614: "0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79) - */ -export const sortitionModuleUniversityConfig = { - address: sortitionModuleUniversityAddress, - abi: sortitionModuleUniversityAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionModuleUniversity_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5CAD621D69E0535422aCFaCC0017bC32beC7A486) - */ -export const sortitionModuleUniversityImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_phase", - internalType: "enum ISortitionModule.Phase", - type: "uint8", - indexed: false, - }, - ], - name: "NewPhase", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_relativeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "_unlock", internalType: "bool", type: "bool", indexed: false }, - ], - name: "StakeLocked", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [ - { - name: "", - internalType: "contract KlerosCoreUniversity", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "disputesWithoutJurors", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "bytes32", type: "bytes32" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "getJurorBalance", - outputs: [ - { name: "totalStaked", internalType: "uint256", type: "uint256" }, - { name: "totalLocked", internalType: "uint256", type: "uint256" }, - { name: "stakedInCourt", internalType: "uint256", type: "uint256" }, - { name: "nbCourts", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorCourtIDs", - outputs: [{ name: "", internalType: "uint96[]", type: "uint96[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { - name: "_core", - internalType: "contract KlerosCoreUniversity", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "isJurorStaked", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "jurors", - outputs: [ - { name: "stakedPnk", internalType: "uint256", type: "uint256" }, - { name: "lockedPnk", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_randomNumber", internalType: "uint256", type: "uint256" }], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "penalizeStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - { name: "_alreadyTransferred", internalType: "bool", type: "bool" }, - ], - name: "setStake", - outputs: [ - { name: "pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { - name: "stakingResult", - internalType: "enum StakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "setTransientJuror", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5CAD621D69E0535422aCFaCC0017bC32beC7A486) - */ -export const sortitionModuleUniversityImplementationAddress = { - 421614: "0x5CAD621D69E0535422aCFaCC0017bC32beC7A486", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5CAD621D69E0535422aCFaCC0017bC32beC7A486) - */ -export const sortitionModuleUniversityImplementationConfig = { - address: sortitionModuleUniversityImplementationAddress, - abi: sortitionModuleUniversityImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionModuleUniversity_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79) - */ -export const sortitionModuleUniversityProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79) - */ -export const sortitionModuleUniversityProxyAddress = { - 421614: "0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79) - */ -export const sortitionModuleUniversityProxyConfig = { - address: sortitionModuleUniversityProxyAddress, - abi: sortitionModuleUniversityProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionModule_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x8a26445989c944C58503275ad87Ab4d7b17d4F1e) - */ -export const sortitionModuleImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "LeftoverPNK", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "LeftoverPNKWithdrawn", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_phase", - internalType: "enum ISortitionModule.Phase", - type: "uint8", - indexed: false, - }, - ], - name: "NewPhase", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeDelayed", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_relativeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "_unlock", internalType: "bool", type: "bool", indexed: false }, - ], - name: "StakeLocked", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amountAllCourts", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_minStakingTime", internalType: "uint256", type: "uint256" }], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_rng", internalType: "contract RNG", type: "address" }, - { name: "_rngLookahead", internalType: "uint256", type: "uint256" }, - ], - name: "changeRandomNumberGenerator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "delayedStakeReadIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "delayedStakeWriteIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "delayedStakes", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "courtID", internalType: "uint96", type: "uint96" }, - { name: "stake", internalType: "uint256", type: "uint256" }, - { name: "alreadyTransferred", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "disputesWithoutJurors", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_iterations", internalType: "uint256", type: "uint256" }], - name: "executeDelayedStakes", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "getJurorBalance", - outputs: [ - { name: "totalStaked", internalType: "uint256", type: "uint256" }, - { name: "totalLocked", internalType: "uint256", type: "uint256" }, - { name: "stakedInCourt", internalType: "uint256", type: "uint256" }, - { name: "nbCourts", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorCourtIDs", - outputs: [{ name: "", internalType: "uint96[]", type: "uint96[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorLeftoverPNK", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_minStakingTime", internalType: "uint256", type: "uint256" }, - { name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }, - { name: "_rng", internalType: "contract RNG", type: "address" }, - { name: "_rngLookahead", internalType: "uint256", type: "uint256" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize4", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "isJurorStaked", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "jurors", - outputs: [ - { name: "stakedPnk", internalType: "uint256", type: "uint256" }, - { name: "lockedPnk", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lastPhaseChange", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "jurorAccount", internalType: "address", type: "address" }, - { name: "courtId", internalType: "uint96", type: "uint96" }, - ], - name: "latestDelayedStakeIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "maxDrawingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "minStakingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_randomNumber", internalType: "uint256", type: "uint256" }], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "passPhase", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "penalizeStake", - outputs: [ - { name: "pnkBalance", internalType: "uint256", type: "uint256" }, - { name: "availablePenalty", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "phase", - outputs: [{ name: "", internalType: "enum ISortitionModule.Phase", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomNumber", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomNumberRequestBlock", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "rng", - outputs: [{ name: "", internalType: "contract RNG", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "rngLookahead", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "_pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_ID", internalType: "bytes32", type: "bytes32" }, - ], - name: "stakeOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "stakeOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "validateStake", - outputs: [ - { name: "pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { - name: "stakingResult", - internalType: "enum StakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "withdrawLeftoverPNK", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x8a26445989c944C58503275ad87Ab4d7b17d4F1e) - */ -export const sortitionModuleImplementationAddress = { - 421614: "0x8a26445989c944C58503275ad87Ab4d7b17d4F1e", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x8a26445989c944C58503275ad87Ab4d7b17d4F1e) - */ -export const sortitionModuleImplementationConfig = { - address: sortitionModuleImplementationAddress, - abi: sortitionModuleImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionModule_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663) - */ -export const sortitionModuleProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663) - */ -export const sortitionModuleProxyAddress = { - 421614: "0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663) - */ -export const sortitionModuleProxyConfig = { - address: sortitionModuleProxyAddress, - abi: sortitionModuleProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// TransactionBatcher -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x35f93986950804ac1F93519BF68C2a7Dd776db0E) - */ -export const transactionBatcherAbi = [ - { - type: "function", - inputs: [ - { name: "targets", internalType: "address[]", type: "address[]" }, - { name: "values", internalType: "uint256[]", type: "uint256[]" }, - { name: "datas", internalType: "bytes[]", type: "bytes[]" }, - ], - name: "batchSend", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "targets", internalType: "address[]", type: "address[]" }, - { name: "values", internalType: "uint256[]", type: "uint256[]" }, - { name: "datas", internalType: "bytes[]", type: "bytes[]" }, - ], - name: "batchSendUnchecked", - outputs: [], - stateMutability: "payable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x35f93986950804ac1F93519BF68C2a7Dd776db0E) - */ -export const transactionBatcherAddress = { - 421614: "0x35f93986950804ac1F93519BF68C2a7Dd776db0E", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x35f93986950804ac1F93519BF68C2a7Dd776db0E) - */ -export const transactionBatcherConfig = { - address: transactionBatcherAddress, - abi: transactionBatcherAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// WETH -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x3829A2486d53ee984a0ca2D76552715726b77138) - */ -export const wethAbi = [ - { - type: "constructor", - inputs: [ - { name: "_name", internalType: "string", type: "string" }, - { name: "_symbol", internalType: "string", type: "string" }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x3829A2486d53ee984a0ca2D76552715726b77138) - */ -export const wethAddress = { - 10200: "0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8", - 421614: "0x3829A2486d53ee984a0ca2D76552715726b77138", -} as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x3829A2486d53ee984a0ca2D76552715726b77138) - */ -export const wethConfig = { address: wethAddress, abi: wethAbi } as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// WETHFaucet -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x6F8C10E0030aDf5B8030a5E282F026ADdB6525fd) - */ -export const wethFaucetAbi = [ - { - type: "constructor", - inputs: [{ name: "_token", internalType: "contract IERC20", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "amount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "balance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_amount", internalType: "uint256", type: "uint256" }], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "token", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "withdrewAlready", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x6F8C10E0030aDf5B8030a5E282F026ADdB6525fd) - */ -export const wethFaucetAddress = { - 10200: "0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F", - 421614: "0x6F8C10E0030aDf5B8030a5E282F026ADdB6525fd", -} as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x6F8C10E0030aDf5B8030a5E282F026ADdB6525fd) - */ -export const wethFaucetConfig = { - address: wethFaucetAddress, - abi: wethFaucetAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// WPNKFaucet -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x5898aeE045A25B276369914c3448B72a41758B2c) - */ -export const wpnkFaucetAbi = [ - { - type: "constructor", - inputs: [{ name: "_token", internalType: "contract IERC20", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "balance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "token", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "withdrewAlready", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x5898aeE045A25B276369914c3448B72a41758B2c) - */ -export const wpnkFaucetAddress = { - 10200: "0x5898aeE045A25B276369914c3448B72a41758B2c", -} as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x5898aeE045A25B276369914c3448B72a41758B2c) - */ -export const wpnkFaucetConfig = { - address: wpnkFaucetAddress, - abi: wpnkFaucetAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// WrappedPinakionV2 -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd) - */ -export const wrappedPinakionV2Abi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd) - */ -export const wrappedPinakionV2Address = { - 10200: "0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd", -} as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd) - */ -export const wrappedPinakionV2Config = { - address: wrappedPinakionV2Address, - abi: wrappedPinakionV2Abi, -} as const; diff --git a/contracts/deployments/disputeKitsViem.ts b/contracts/deployments/disputeKitsViem.ts deleted file mode 100644 index 45ae23998..000000000 --- a/contracts/deployments/disputeKitsViem.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { getContracts } from "./contractsViem"; -import { Abi, AbiEvent, getAbiItem, PublicClient } from "viem"; -import { DeploymentName } from "./utils"; - -export type DisputeKitContracts = ReturnType; -export type DisputeKit = - | NonNullable - | NonNullable - | NonNullable - | NonNullable - | null; -export type DisputeKitInfos = { - address: `0x${string}`; - contract: DisputeKit; - isGated: boolean; - isShutter: boolean; -}; -export type DisputeKitByIds = Record; - -const fetchDisputeKits = async (client: PublicClient, klerosCoreAddress: `0x${string}`, klerosCoreAbi: Abi) => { - const DisputeKitCreated = getAbiItem({ - abi: klerosCoreAbi, - name: "DisputeKitCreated", - }) as AbiEvent; - const logs = await client.getLogs({ - address: klerosCoreAddress, - event: DisputeKitCreated, - fromBlock: 0n, - toBlock: "latest", - }); - return Object.fromEntries( - logs - .filter((log) => { - const args = log.args as Record; - return "_disputeKitID" in args && "_disputeKitAddress" in args; - }) - .map((log) => { - const { _disputeKitID, _disputeKitAddress } = log.args as { - _disputeKitID: bigint; - _disputeKitAddress: string; - }; - return { - disputeKitID: _disputeKitID, - disputeKitAddress: _disputeKitAddress, - }; - }) - .map(({ disputeKitID, disputeKitAddress }) => [disputeKitID!.toString(), disputeKitAddress as `0x${string}`]) - ); -}; - -export const getDisputeKits = async (client: PublicClient, deployment: DeploymentName): Promise => { - const { klerosCore, disputeKitClassic, disputeKitShutter, disputeKitGated, disputeKitGatedShutter } = getContracts({ - publicClient: client, - deployment: deployment, - }); - - const isDefined = (kit: T): kit is NonNullable => kit != null; - const disputeKitContracts = [disputeKitClassic, disputeKitShutter, disputeKitGated, disputeKitGatedShutter].filter( - isDefined - ); - const shutterEnabled = [disputeKitShutter, disputeKitGatedShutter].filter(isDefined); - const gatedEnabled = [disputeKitGated, disputeKitGatedShutter].filter(isDefined); - - const disputeKitMap = await fetchDisputeKits(client, klerosCore.address, klerosCore.abi); - - return Object.fromEntries( - Object.entries(disputeKitMap).map(([disputeKitID, address]) => { - const contract = - disputeKitContracts.find((contract) => contract.address.toLowerCase() === address.toLowerCase()) ?? null; - return [ - disputeKitID, - { - address, - contract: contract satisfies DisputeKit, - isGated: contract - ? gatedEnabled.some((gated) => contract.address.toLowerCase() === gated.address.toLowerCase()) - : false, - isShutter: contract - ? shutterEnabled.some((shutter) => contract.address.toLowerCase() === shutter.address.toLowerCase()) - : false, - }, - ]; - }) - ); -}; diff --git a/contracts/deployments/gnosischain/PolicyRegistry.json b/contracts/deployments/gnosischain/PolicyRegistry.json deleted file mode 100644 index ed3066b1b..000000000 --- a/contracts/deployments/gnosischain/PolicyRegistry.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "address": "0x9d494768936b6bDaabc46733b8D53A937A6c6D7e", - "abi": [ - { - "constant": true, - "inputs": [], - "name": "governor", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "policies", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_subcourtID", - "type": "uint256" - }, - { - "name": "_policy", - "type": "string" - } - ], - "name": "setPolicy", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "name": "_governor", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_subcourtID", - "type": "uint256" - }, - { - "indexed": false, - "name": "_policy", - "type": "string" - } - ], - "name": "PolicyUpdate", - "type": "event" - } - ] -} diff --git a/contracts/deployments/gnosischain/TokenBridge.json b/contracts/deployments/gnosischain/TokenBridge.json deleted file mode 100644 index 4f1c50e09..000000000 --- a/contracts/deployments/gnosischain/TokenBridge.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "address": "0xf6A78083ca3e2a662D6dd1703c939c8aCE2e268d", - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "version", - "type": "uint256" - }, - { - "name": "implementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "version", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "implementation", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "upgradeabilityOwner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "version", - "type": "uint256" - }, - { - "name": "implementation", - "type": "address" - }, - { - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "newOwner", - "type": "address" - } - ], - "name": "transferProxyOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "previousOwner", - "type": "address" - }, - { - "indexed": false, - "name": "newOwner", - "type": "address" - } - ], - "name": "ProxyOwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "version", - "type": "uint256" - }, - { - "indexed": true, - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - } - ] -} diff --git a/contracts/deployments/gnosischain/TransactionBatcher.json b/contracts/deployments/gnosischain/TransactionBatcher.json deleted file mode 100644 index e1dbd9e24..000000000 --- a/contracts/deployments/gnosischain/TransactionBatcher.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "address": "0x6426800F8508b15AED271337498fa5e7D0794d46", - "abi": [ - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "datas", - "type": "bytes[]" - } - ], - "name": "batchSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ] -} diff --git a/contracts/deployments/gnosischain/WETH.json b/contracts/deployments/gnosischain/WETH.json deleted file mode 100644 index dce27dbb9..000000000 --- a/contracts/deployments/gnosischain/WETH.json +++ /dev/null @@ -1,883 +0,0 @@ -{ - "address": "0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1", - "abi": [ - { - "constant": true, - "inputs": [], - "name": "mintingFinished", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "result", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_bridgeContract", - "type": "address" - } - ], - "name": "setBridgeContract", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_sender", - "type": "address" - }, - { - "name": "_recipient", - "type": "address" - }, - { - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "name": "result", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - }, - { - "name": "_data", - "type": "bytes" - } - ], - "name": "transferAndCall", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_value", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "version", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseApproval", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_token", - "type": "address" - }, - { - "name": "_to", - "type": "address" - } - ], - "name": "claimTokens", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_address", - "type": "address" - } - ], - "name": "isBridge", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "finishMinting", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getTokenInterfacesVersion", - "outputs": [ - { - "name": "major", - "type": "uint64" - }, - { - "name": "minor", - "type": "uint64" - }, - { - "name": "patch", - "type": "uint64" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_holder", - "type": "address" - }, - { - "name": "_spender", - "type": "address" - }, - { - "name": "_nonce", - "type": "uint256" - }, - { - "name": "_expiry", - "type": "uint256" - }, - { - "name": "_allowed", - "type": "bool" - }, - { - "name": "_v", - "type": "uint8" - }, - { - "name": "_r", - "type": "bytes32" - }, - { - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_amount", - "type": "uint256" - } - ], - "name": "push", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_from", - "type": "address" - }, - { - "name": "_to", - "type": "address" - }, - { - "name": "_amount", - "type": "uint256" - } - ], - "name": "move", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH_LEGACY", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "bridgeContract", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_holder", - "type": "address" - }, - { - "name": "_spender", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - }, - { - "name": "_deadline", - "type": "uint256" - }, - { - "name": "_v", - "type": "uint8" - }, - { - "name": "_r", - "type": "bytes32" - }, - { - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseApproval", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - }, - { - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_from", - "type": "address" - }, - { - "name": "_amount", - "type": "uint256" - } - ], - "name": "pull", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - }, - { - "name": "", - "type": "address" - } - ], - "name": "expirations", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "name": "_name", - "type": "string" - }, - { - "name": "_symbol", - "type": "string" - }, - { - "name": "_decimals", - "type": "uint8" - }, - { - "name": "_chainId", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "amount", - "type": "uint256" - } - ], - "name": "Mint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "MintFinished", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "previousOwner", - "type": "address" - } - ], - "name": "OwnershipRenounced", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "burner", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Burn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "name": "data", - "type": "bytes" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - } - ] -} diff --git a/contracts/deployments/gnosischain/WrappedPinakion.json b/contracts/deployments/gnosischain/WrappedPinakion.json deleted file mode 100644 index f057e5e8c..000000000 --- a/contracts/deployments/gnosischain/WrappedPinakion.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "address": "0xcb3231aBA3b451343e0Fddfc45883c842f223846", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "_admin", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "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": "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" - } - ] -} diff --git a/contracts/deployments/gnosischain/xKlerosLiquid.json b/contracts/deployments/gnosischain/xKlerosLiquid.json deleted file mode 100644 index ee31ded75..000000000 --- a/contracts/deployments/gnosischain/xKlerosLiquid.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "address": "0x9C1dA9A04925bDfDedf0f6421bC7EEa8305F9002", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "_admin", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "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": "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" - } - ] -} diff --git a/contracts/deployments/gnosischain/xPNK.json b/contracts/deployments/gnosischain/xPNK.json deleted file mode 100644 index 406599d18..000000000 --- a/contracts/deployments/gnosischain/xPNK.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "address": "0x37b60f4E9A31A64cCc0024dce7D0fD07eAA0F7B3", - "abi": [] -} diff --git a/contracts/deployments/index.ts b/contracts/deployments/index.ts deleted file mode 100644 index c94968751..000000000 --- a/contracts/deployments/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Typechain Ethers v6 artifacts -export * as arbitrum from "./arbitrum"; -export * as arbitrumSepolia from "./arbitrumSepolia"; -export * as arbitrumSepoliaDevnet from "./arbitrumSepoliaDevnet"; - -// Viem artifacts -export * as devnetViem from "./devnet.viem"; -export * as mainnetViem from "./mainnet.viem"; -export * as testnetViem from "./testnet.viem"; - -// Typechain-types -export * from "../typechain-types"; - -// Common utils -export * from "./utils"; - -// Contracts getters -export { getContracts as getContractsEthers } from "./contractsEthers"; -export { getContracts as getContractsViem } from "./contractsViem"; - -// Dispute kits getters -export { getDisputeKits as getDisputeKitsViem, type DisputeKitByIds, type DisputeKitInfos } from "./disputeKitsViem"; diff --git a/contracts/deployments/mainnet.viem.ts b/contracts/deployments/mainnet.viem.ts deleted file mode 100644 index eeada4b95..000000000 --- a/contracts/deployments/mainnet.viem.ts +++ /dev/null @@ -1,16575 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// BlockHashRNG -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x39D123fc4cFD24EA5bB76195f9ecFE1f0DF35b0B) - */ -export const blockHashRngAbi = [ - { - type: "function", - inputs: [{ name: "block", internalType: "uint256", type: "uint256" }], - name: "randomNumbers", - outputs: [{ name: "number", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_block", internalType: "uint256", type: "uint256" }], - name: "receiveRandomness", - outputs: [{ name: "randomNumber", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_block", internalType: "uint256", type: "uint256" }], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x39D123fc4cFD24EA5bB76195f9ecFE1f0DF35b0B) - */ -export const blockHashRngAddress = { - 42161: "0x39D123fc4cFD24EA5bB76195f9ecFE1f0DF35b0B", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x39D123fc4cFD24EA5bB76195f9ecFE1f0DF35b0B) - */ -export const blockHashRngConfig = { - address: blockHashRngAddress, - abi: blockHashRngAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ChainlinkRNG -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x897d83a7d5F23555eFA15e1BE297d5503522cbA3) - */ -export const chainlinkRngAbi = [ - { - type: "constructor", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_sortitionModule", internalType: "address", type: "address" }, - { name: "_vrfCoordinator", internalType: "address", type: "address" }, - { name: "_keyHash", internalType: "bytes32", type: "bytes32" }, - { name: "_subscriptionId", internalType: "uint256", type: "uint256" }, - { name: "_requestConfirmations", internalType: "uint16", type: "uint16" }, - { name: "_callbackGasLimit", internalType: "uint32", type: "uint32" }, - ], - stateMutability: "nonpayable", - }, - { - type: "error", - inputs: [ - { name: "have", internalType: "address", type: "address" }, - { name: "want", internalType: "address", type: "address" }, - ], - name: "OnlyCoordinatorCanFulfill", - }, - { - type: "error", - inputs: [ - { name: "have", internalType: "address", type: "address" }, - { name: "owner", internalType: "address", type: "address" }, - { name: "coordinator", internalType: "address", type: "address" }, - ], - name: "OnlyOwnerOrCoordinator", - }, - { type: "error", inputs: [], name: "ZeroAddress" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "vrfCoordinator", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "CoordinatorSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - ], - name: "OwnershipTransferRequested", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - ], - name: "OwnershipTransferred", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "randomWord", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "RequestFulfilled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "RequestSent", - }, - { - type: "function", - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "callbackGasLimit", - outputs: [{ name: "", internalType: "uint32", type: "uint32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_callbackGasLimit", internalType: "uint32", type: "uint32" }], - name: "changeCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_keyHash", internalType: "bytes32", type: "bytes32" }], - name: "changeKeyHash", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_requestConfirmations", internalType: "uint16", type: "uint16" }], - name: "changeRequestConfirmations", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_sortitionModule", internalType: "address", type: "address" }], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_subscriptionId", internalType: "uint256", type: "uint256" }], - name: "changeSubscriptionId", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_vrfCoordinator", internalType: "address", type: "address" }], - name: "changeVrfCoordinator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "keyHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lastRequestId", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - name: "randomNumbers", - outputs: [{ name: "number", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "requestId", internalType: "uint256", type: "uint256" }, - { name: "randomWords", internalType: "uint256[]", type: "uint256[]" }, - ], - name: "rawFulfillRandomWords", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "receiveRandomness", - outputs: [{ name: "randomNumber", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "requestConfirmations", - outputs: [{ name: "", internalType: "uint16", type: "uint16" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "s_vrfCoordinator", - outputs: [ - { - name: "", - internalType: "contract IVRFCoordinatorV2Plus", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_vrfCoordinator", internalType: "address", type: "address" }], - name: "setCoordinator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "sortitionModule", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "subscriptionId", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x897d83a7d5F23555eFA15e1BE297d5503522cbA3) - */ -export const chainlinkRngAddress = { - 42161: "0x897d83a7d5F23555eFA15e1BE297d5503522cbA3", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x897d83a7d5F23555eFA15e1BE297d5503522cbA3) - */ -export const chainlinkRngConfig = { - address: chainlinkRngAddress, - abi: chainlinkRngAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ChainlinkVRFCoordinator -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x3C0Ca683b403E37668AE3DC4FB62F4B29B6f7a3e) - */ -export const chainlinkVrfCoordinatorAbi = [ - { - type: "constructor", - inputs: [{ name: "blockhashStore", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "error", - inputs: [ - { name: "internalBalance", internalType: "uint256", type: "uint256" }, - { name: "externalBalance", internalType: "uint256", type: "uint256" }, - ], - name: "BalanceInvariantViolated", - }, - { - type: "error", - inputs: [{ name: "blockNum", internalType: "uint256", type: "uint256" }], - name: "BlockhashNotInStore", - }, - { - type: "error", - inputs: [{ name: "coordinatorAddress", internalType: "address", type: "address" }], - name: "CoordinatorAlreadyRegistered", - }, - { - type: "error", - inputs: [{ name: "coordinatorAddress", internalType: "address", type: "address" }], - name: "CoordinatorNotRegistered", - }, - { type: "error", inputs: [], name: "FailedToSendNative" }, - { type: "error", inputs: [], name: "FailedToTransferLink" }, - { - type: "error", - inputs: [ - { name: "have", internalType: "uint32", type: "uint32" }, - { name: "want", internalType: "uint32", type: "uint32" }, - ], - name: "GasLimitTooBig", - }, - { - type: "error", - inputs: [ - { name: "gasPrice", internalType: "uint256", type: "uint256" }, - { name: "maxGas", internalType: "uint256", type: "uint256" }, - ], - name: "GasPriceExceeded", - }, - { type: "error", inputs: [], name: "IncorrectCommitment" }, - { type: "error", inputs: [], name: "IndexOutOfRange" }, - { type: "error", inputs: [], name: "InsufficientBalance" }, - { type: "error", inputs: [], name: "InvalidCalldata" }, - { - type: "error", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "consumer", internalType: "address", type: "address" }, - ], - name: "InvalidConsumer", - }, - { type: "error", inputs: [], name: "InvalidExtraArgsTag" }, - { - type: "error", - inputs: [{ name: "linkWei", internalType: "int256", type: "int256" }], - name: "InvalidLinkWeiPrice", - }, - { - type: "error", - inputs: [ - { name: "premiumPercentage", internalType: "uint8", type: "uint8" }, - { name: "max", internalType: "uint8", type: "uint8" }, - ], - name: "InvalidPremiumPercentage", - }, - { - type: "error", - inputs: [ - { name: "have", internalType: "uint16", type: "uint16" }, - { name: "min", internalType: "uint16", type: "uint16" }, - { name: "max", internalType: "uint16", type: "uint16" }, - ], - name: "InvalidRequestConfirmations", - }, - { type: "error", inputs: [], name: "InvalidSubscription" }, - { type: "error", inputs: [], name: "LinkAlreadySet" }, - { - type: "error", - inputs: [ - { - name: "flatFeeLinkDiscountPPM", - internalType: "uint32", - type: "uint32", - }, - { name: "flatFeeNativePPM", internalType: "uint32", type: "uint32" }, - ], - name: "LinkDiscountTooHigh", - }, - { type: "error", inputs: [], name: "LinkNotSet" }, - { - type: "error", - inputs: [ - { name: "have", internalType: "uint256", type: "uint256" }, - { name: "max", internalType: "uint32", type: "uint32" }, - ], - name: "MsgDataTooBig", - }, - { - type: "error", - inputs: [{ name: "proposedOwner", internalType: "address", type: "address" }], - name: "MustBeRequestedOwner", - }, - { - type: "error", - inputs: [{ name: "owner", internalType: "address", type: "address" }], - name: "MustBeSubOwner", - }, - { type: "error", inputs: [], name: "NoCorrespondingRequest" }, - { - type: "error", - inputs: [{ name: "keyHash", internalType: "bytes32", type: "bytes32" }], - name: "NoSuchProvingKey", - }, - { - type: "error", - inputs: [ - { name: "have", internalType: "uint32", type: "uint32" }, - { name: "want", internalType: "uint32", type: "uint32" }, - ], - name: "NumWordsTooBig", - }, - { type: "error", inputs: [], name: "OnlyCallableFromLink" }, - { type: "error", inputs: [], name: "PaymentTooLarge" }, - { type: "error", inputs: [], name: "PendingRequestExists" }, - { - type: "error", - inputs: [{ name: "keyHash", internalType: "bytes32", type: "bytes32" }], - name: "ProvingKeyAlreadyRegistered", - }, - { type: "error", inputs: [], name: "Reentrant" }, - { type: "error", inputs: [], name: "TooManyConsumers" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "minimumRequestConfirmations", - internalType: "uint16", - type: "uint16", - indexed: false, - }, - { - name: "maxGasLimit", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "stalenessSeconds", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "gasAfterPaymentCalculation", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "fallbackWeiPerUnitLink", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "fulfillmentFlatFeeNativePPM", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "fulfillmentFlatFeeLinkDiscountPPM", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "nativePremiumPercentage", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - { - name: "linkPremiumPercentage", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "ConfigSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "coordinatorAddress", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "CoordinatorDeregistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "coordinatorAddress", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "CoordinatorRegistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "fallbackWeiPerUnitLink", - internalType: "int256", - type: "int256", - indexed: false, - }, - ], - name: "FallbackWeiPerUnitLinkUsed", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "to", internalType: "address", type: "address", indexed: false }, - { - name: "amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "FundsRecovered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newCoordinator", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "MigrationCompleted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "to", internalType: "address", type: "address", indexed: false }, - { - name: "amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "NativeFundsRecovered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - ], - name: "OwnershipTransferRequested", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - ], - name: "OwnershipTransferred", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "keyHash", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "maxGas", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "ProvingKeyDeregistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "keyHash", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "maxGas", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "ProvingKeyRegistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "outputSeed", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "payment", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - { - name: "nativePayment", - internalType: "bool", - type: "bool", - indexed: false, - }, - { name: "success", internalType: "bool", type: "bool", indexed: false }, - { - name: "onlyPremium", - internalType: "bool", - type: "bool", - indexed: false, - }, - ], - name: "RandomWordsFulfilled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "keyHash", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "preSeed", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "minimumRequestConfirmations", - internalType: "uint16", - type: "uint16", - indexed: false, - }, - { - name: "callbackGasLimit", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "numWords", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "extraArgs", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - { - name: "sender", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RandomWordsRequested", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { name: "to", internalType: "address", type: "address", indexed: false }, - { - name: "amountLink", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "amountNative", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "SubscriptionCanceled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "consumer", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "SubscriptionConsumerAdded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "consumer", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "SubscriptionConsumerRemoved", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "owner", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "SubscriptionCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "oldBalance", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "newBalance", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "SubscriptionFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "oldNativeBalance", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "newNativeBalance", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "SubscriptionFundedWithNative", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "from", - internalType: "address", - type: "address", - indexed: false, - }, - { name: "to", internalType: "address", type: "address", indexed: false }, - ], - name: "SubscriptionOwnerTransferRequested", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "from", - internalType: "address", - type: "address", - indexed: false, - }, - { name: "to", internalType: "address", type: "address", indexed: false }, - ], - name: "SubscriptionOwnerTransferred", - }, - { - type: "function", - inputs: [], - name: "BLOCKHASH_STORE", - outputs: [ - { - name: "", - internalType: "contract BlockhashStoreInterface", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LINK", - outputs: [ - { - name: "", - internalType: "contract LinkTokenInterface", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LINK_NATIVE_FEED", - outputs: [ - { - name: "", - internalType: "contract AggregatorV3Interface", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_CONSUMERS", - outputs: [{ name: "", internalType: "uint16", type: "uint16" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_NUM_WORDS", - outputs: [{ name: "", internalType: "uint32", type: "uint32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_REQUEST_CONFIRMATIONS", - outputs: [{ name: "", internalType: "uint16", type: "uint16" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "acceptSubscriptionOwnerTransfer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "consumer", internalType: "address", type: "address" }, - ], - name: "addConsumer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "to", internalType: "address", type: "address" }, - ], - name: "cancelSubscription", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "createSubscription", - outputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "target", internalType: "address", type: "address" }], - name: "deregisterMigratableCoordinator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "publicProvingKey", - internalType: "uint256[2]", - type: "uint256[2]", - }, - ], - name: "deregisterProvingKey", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "proof", - internalType: "struct VRF.Proof", - type: "tuple", - components: [ - { name: "pk", internalType: "uint256[2]", type: "uint256[2]" }, - { name: "gamma", internalType: "uint256[2]", type: "uint256[2]" }, - { name: "c", internalType: "uint256", type: "uint256" }, - { name: "s", internalType: "uint256", type: "uint256" }, - { name: "seed", internalType: "uint256", type: "uint256" }, - { name: "uWitness", internalType: "address", type: "address" }, - { - name: "cGammaWitness", - internalType: "uint256[2]", - type: "uint256[2]", - }, - { - name: "sHashWitness", - internalType: "uint256[2]", - type: "uint256[2]", - }, - { name: "zInv", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "rc", - internalType: "struct VRFTypes.RequestCommitmentV2Plus", - type: "tuple", - components: [ - { name: "blockNum", internalType: "uint64", type: "uint64" }, - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "callbackGasLimit", internalType: "uint32", type: "uint32" }, - { name: "numWords", internalType: "uint32", type: "uint32" }, - { name: "sender", internalType: "address", type: "address" }, - { name: "extraArgs", internalType: "bytes", type: "bytes" }, - ], - }, - { name: "onlyPremium", internalType: "bool", type: "bool" }, - ], - name: "fulfillRandomWords", - outputs: [{ name: "payment", internalType: "uint96", type: "uint96" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "fundSubscriptionWithNative", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "startIndex", internalType: "uint256", type: "uint256" }, - { name: "maxCount", internalType: "uint256", type: "uint256" }, - ], - name: "getActiveSubscriptionIds", - outputs: [{ name: "ids", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "getSubscription", - outputs: [ - { name: "balance", internalType: "uint96", type: "uint96" }, - { name: "nativeBalance", internalType: "uint96", type: "uint96" }, - { name: "reqCount", internalType: "uint64", type: "uint64" }, - { name: "subOwner", internalType: "address", type: "address" }, - { name: "consumers", internalType: "address[]", type: "address[]" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "publicKey", internalType: "uint256[2]", type: "uint256[2]" }], - name: "hashOfKey", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "newCoordinator", internalType: "address", type: "address" }, - ], - name: "migrate", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "onTokenTransfer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "ownerCancelSubscription", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "pendingRequestExists", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address", type: "address" }], - name: "recoverFunds", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address payable", type: "address" }], - name: "recoverNativeFunds", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "target", internalType: "address", type: "address" }], - name: "registerMigratableCoordinator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "publicProvingKey", - internalType: "uint256[2]", - type: "uint256[2]", - }, - { name: "maxGas", internalType: "uint64", type: "uint64" }, - ], - name: "registerProvingKey", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "consumer", internalType: "address", type: "address" }, - ], - name: "removeConsumer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "req", - internalType: "struct VRFV2PlusClient.RandomWordsRequest", - type: "tuple", - components: [ - { name: "keyHash", internalType: "bytes32", type: "bytes32" }, - { name: "subId", internalType: "uint256", type: "uint256" }, - { - name: "requestConfirmations", - internalType: "uint16", - type: "uint16", - }, - { name: "callbackGasLimit", internalType: "uint32", type: "uint32" }, - { name: "numWords", internalType: "uint32", type: "uint32" }, - { name: "extraArgs", internalType: "bytes", type: "bytes" }, - ], - }, - ], - name: "requestRandomWords", - outputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "newOwner", internalType: "address", type: "address" }, - ], - name: "requestSubscriptionOwnerTransfer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "s_config", - outputs: [ - { - name: "minimumRequestConfirmations", - internalType: "uint16", - type: "uint16", - }, - { name: "maxGasLimit", internalType: "uint32", type: "uint32" }, - { name: "reentrancyLock", internalType: "bool", type: "bool" }, - { name: "stalenessSeconds", internalType: "uint32", type: "uint32" }, - { - name: "gasAfterPaymentCalculation", - internalType: "uint32", - type: "uint32", - }, - { - name: "fulfillmentFlatFeeNativePPM", - internalType: "uint32", - type: "uint32", - }, - { - name: "fulfillmentFlatFeeLinkDiscountPPM", - internalType: "uint32", - type: "uint32", - }, - { name: "nativePremiumPercentage", internalType: "uint8", type: "uint8" }, - { name: "linkPremiumPercentage", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "s_currentSubNonce", - outputs: [{ name: "", internalType: "uint64", type: "uint64" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "s_fallbackWeiPerUnitLink", - outputs: [{ name: "", internalType: "int256", type: "int256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "s_provingKeyHashes", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "s_provingKeys", - outputs: [ - { name: "exists", internalType: "bool", type: "bool" }, - { name: "maxGas", internalType: "uint64", type: "uint64" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "s_requestCommitments", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "s_totalBalance", - outputs: [{ name: "", internalType: "uint96", type: "uint96" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "s_totalNativeBalance", - outputs: [{ name: "", internalType: "uint96", type: "uint96" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "minimumRequestConfirmations", - internalType: "uint16", - type: "uint16", - }, - { name: "maxGasLimit", internalType: "uint32", type: "uint32" }, - { name: "stalenessSeconds", internalType: "uint32", type: "uint32" }, - { - name: "gasAfterPaymentCalculation", - internalType: "uint32", - type: "uint32", - }, - { - name: "fallbackWeiPerUnitLink", - internalType: "int256", - type: "int256", - }, - { - name: "fulfillmentFlatFeeNativePPM", - internalType: "uint32", - type: "uint32", - }, - { - name: "fulfillmentFlatFeeLinkDiscountPPM", - internalType: "uint32", - type: "uint32", - }, - { name: "nativePremiumPercentage", internalType: "uint8", type: "uint8" }, - { name: "linkPremiumPercentage", internalType: "uint8", type: "uint8" }, - ], - name: "setConfig", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "link", internalType: "address", type: "address" }, - { name: "linkNativeFeed", internalType: "address", type: "address" }, - ], - name: "setLINKAndLINKNativeFeed", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "recipient", internalType: "address", type: "address" }], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "recipient", internalType: "address payable", type: "address" }], - name: "withdrawNative", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x3C0Ca683b403E37668AE3DC4FB62F4B29B6f7a3e) - */ -export const chainlinkVrfCoordinatorAddress = { - 42161: "0x3C0Ca683b403E37668AE3DC4FB62F4B29B6f7a3e", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x3C0Ca683b403E37668AE3DC4FB62F4B29B6f7a3e) - */ -export const chainlinkVrfCoordinatorConfig = { - address: chainlinkVrfCoordinatorAddress, - abi: chainlinkVrfCoordinatorAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DAI -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1) - */ -export const daiAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [{ name: "usr", internalType: "address", type: "address", indexed: true }], - name: "Deny", - }, - { - type: "event", - anonymous: false, - inputs: [{ name: "usr", internalType: "address", type: "address", indexed: true }], - name: "Rely", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "PERMIT_TYPEHASH", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "address", type: "address" }, - { name: "", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "value", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "value", internalType: "uint256", type: "uint256" }, - ], - name: "burn", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "usr", internalType: "address", type: "address" }], - name: "deny", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "deploymentChainId", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "value", internalType: "uint256", type: "uint256" }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "nonces", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - { name: "value", internalType: "uint256", type: "uint256" }, - { name: "deadline", internalType: "uint256", type: "uint256" }, - { name: "v", internalType: "uint8", type: "uint8" }, - { name: "r", internalType: "bytes32", type: "bytes32" }, - { name: "s", internalType: "bytes32", type: "bytes32" }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "usr", internalType: "address", type: "address" }], - name: "rely", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "value", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "value", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "wards", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1) - */ -export const daiAddress = { - 42161: "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1) - */ -export const daiConfig = { address: daiAddress, abi: daiAbi } as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitClassic -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x70B464be85A547144C72485eBa2577E5D3A45421) - */ -export const disputeKitClassicAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x70B464be85A547144C72485eBa2577E5D3A45421) - */ -export const disputeKitClassicAddress = { - 42161: "0x70B464be85A547144C72485eBa2577E5D3A45421", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x70B464be85A547144C72485eBa2577E5D3A45421) - */ -export const disputeKitClassicConfig = { - address: disputeKitClassicAddress, - abi: disputeKitClassicAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitClassic_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x371Aa4B1AE5b5f9422f3Ff1d105029AAd1D319BC) - */ -export const disputeKitClassicImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x371Aa4B1AE5b5f9422f3Ff1d105029AAd1D319BC) - */ -export const disputeKitClassicImplementationAddress = { - 42161: "0x371Aa4B1AE5b5f9422f3Ff1d105029AAd1D319BC", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x371Aa4B1AE5b5f9422f3Ff1d105029AAd1D319BC) - */ -export const disputeKitClassicImplementationConfig = { - address: disputeKitClassicImplementationAddress, - abi: disputeKitClassicImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitClassic_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x70B464be85A547144C72485eBa2577E5D3A45421) - */ -export const disputeKitClassicProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x70B464be85A547144C72485eBa2577E5D3A45421) - */ -export const disputeKitClassicProxyAddress = { - 42161: "0x70B464be85A547144C72485eBa2577E5D3A45421", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x70B464be85A547144C72485eBa2577E5D3A45421) - */ -export const disputeKitClassicProxyConfig = { - address: disputeKitClassicProxyAddress, - abi: disputeKitClassicProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGated -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xaE1eed20C125B739b64c948820C61F809ad9a925) - */ -export const disputeKitGatedAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "extraDataToTokenInfo", - outputs: [ - { name: "tokenGate", internalType: "address", type: "address" }, - { name: "isERC1155", internalType: "bool", type: "bool" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xaE1eed20C125B739b64c948820C61F809ad9a925) - */ -export const disputeKitGatedAddress = { - 42161: "0xaE1eed20C125B739b64c948820C61F809ad9a925", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xaE1eed20C125B739b64c948820C61F809ad9a925) - */ -export const disputeKitGatedConfig = { - address: disputeKitGatedAddress, - abi: disputeKitGatedAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGatedShutter -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x788330092B9704809C19858E39EB9Ac402c2E47b) - */ -export const disputeKitGatedShutterAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "_identity", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_encryptedVote", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CommitCastShutter", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - { name: "_identity", internalType: "bytes32", type: "bytes32" }, - { name: "_encryptedVote", internalType: "bytes", type: "bytes" }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x788330092B9704809C19858E39EB9Ac402c2E47b) - */ -export const disputeKitGatedShutterAddress = { - 42161: "0x788330092B9704809C19858E39EB9Ac402c2E47b", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x788330092B9704809C19858E39EB9Ac402c2E47b) - */ -export const disputeKitGatedShutterConfig = { - address: disputeKitGatedShutterAddress, - abi: disputeKitGatedShutterAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGatedShutter_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xb12EB4c0716d3A9861a9AC471c6CdDB808d61b32) - */ -export const disputeKitGatedShutterImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "_identity", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_encryptedVote", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CommitCastShutter", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - { name: "_identity", internalType: "bytes32", type: "bytes32" }, - { name: "_encryptedVote", internalType: "bytes", type: "bytes" }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xb12EB4c0716d3A9861a9AC471c6CdDB808d61b32) - */ -export const disputeKitGatedShutterImplementationAddress = { - 42161: "0xb12EB4c0716d3A9861a9AC471c6CdDB808d61b32", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xb12EB4c0716d3A9861a9AC471c6CdDB808d61b32) - */ -export const disputeKitGatedShutterImplementationConfig = { - address: disputeKitGatedShutterImplementationAddress, - abi: disputeKitGatedShutterImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGatedShutter_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x788330092B9704809C19858E39EB9Ac402c2E47b) - */ -export const disputeKitGatedShutterProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x788330092B9704809C19858E39EB9Ac402c2E47b) - */ -export const disputeKitGatedShutterProxyAddress = { - 42161: "0x788330092B9704809C19858E39EB9Ac402c2E47b", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x788330092B9704809C19858E39EB9Ac402c2E47b) - */ -export const disputeKitGatedShutterProxyConfig = { - address: disputeKitGatedShutterProxyAddress, - abi: disputeKitGatedShutterProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGated_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xEA7863E6dE863e8E6d037D8693ad5dA45Db7790a) - */ -export const disputeKitGatedImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "extraDataToTokenInfo", - outputs: [ - { name: "tokenGate", internalType: "address", type: "address" }, - { name: "isERC1155", internalType: "bool", type: "bool" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xEA7863E6dE863e8E6d037D8693ad5dA45Db7790a) - */ -export const disputeKitGatedImplementationAddress = { - 42161: "0xEA7863E6dE863e8E6d037D8693ad5dA45Db7790a", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xEA7863E6dE863e8E6d037D8693ad5dA45Db7790a) - */ -export const disputeKitGatedImplementationConfig = { - address: disputeKitGatedImplementationAddress, - abi: disputeKitGatedImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGated_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xaE1eed20C125B739b64c948820C61F809ad9a925) - */ -export const disputeKitGatedProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xaE1eed20C125B739b64c948820C61F809ad9a925) - */ -export const disputeKitGatedProxyAddress = { - 42161: "0xaE1eed20C125B739b64c948820C61F809ad9a925", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xaE1eed20C125B739b64c948820C61F809ad9a925) - */ -export const disputeKitGatedProxyConfig = { - address: disputeKitGatedProxyAddress, - abi: disputeKitGatedProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitShutter -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x9D3e3f1765744c2a1BC6F6088549770444BBC768) - */ -export const disputeKitShutterAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "_identity", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_encryptedVote", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CommitCastShutter", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - { name: "_identity", internalType: "bytes32", type: "bytes32" }, - { name: "_encryptedVote", internalType: "bytes", type: "bytes" }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x9D3e3f1765744c2a1BC6F6088549770444BBC768) - */ -export const disputeKitShutterAddress = { - 42161: "0x9D3e3f1765744c2a1BC6F6088549770444BBC768", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x9D3e3f1765744c2a1BC6F6088549770444BBC768) - */ -export const disputeKitShutterConfig = { - address: disputeKitShutterAddress, - abi: disputeKitShutterAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitShutter_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xF3103B46403A0bBd4551648BFb29BCC2b8783947) - */ -export const disputeKitShutterImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "_identity", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_encryptedVote", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CommitCastShutter", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - { name: "_identity", internalType: "bytes32", type: "bytes32" }, - { name: "_encryptedVote", internalType: "bytes", type: "bytes" }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xF3103B46403A0bBd4551648BFb29BCC2b8783947) - */ -export const disputeKitShutterImplementationAddress = { - 42161: "0xF3103B46403A0bBd4551648BFb29BCC2b8783947", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xF3103B46403A0bBd4551648BFb29BCC2b8783947) - */ -export const disputeKitShutterImplementationConfig = { - address: disputeKitShutterImplementationAddress, - abi: disputeKitShutterImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitShutter_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x9D3e3f1765744c2a1BC6F6088549770444BBC768) - */ -export const disputeKitShutterProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x9D3e3f1765744c2a1BC6F6088549770444BBC768) - */ -export const disputeKitShutterProxyAddress = { - 42161: "0x9D3e3f1765744c2a1BC6F6088549770444BBC768", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x9D3e3f1765744c2a1BC6F6088549770444BBC768) - */ -export const disputeKitShutterProxyConfig = { - address: disputeKitShutterProxyAddress, - abi: disputeKitShutterProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeResolver -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xb5526D022962A1fFf6eD32C93e8b714c901F4323) - */ -export const disputeResolverAbi = [ - { - type: "constructor", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeRequest", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "function", - inputs: [], - name: "arbitrator", - outputs: [{ name: "", internalType: "contract IArbitratorV2", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "arbitratorDisputeIDToLocalID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "_disputeTemplate", internalType: "string", type: "string" }, - { - name: "_disputeTemplateDataMappings", - internalType: "string", - type: "string", - }, - { - name: "_numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - name: "createDisputeForTemplate", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "_disputeTemplateUri", internalType: "string", type: "string" }, - { - name: "_numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - name: "createDisputeForTemplateUri", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "isRuled", internalType: "bool", type: "bool" }, - { name: "ruling", internalType: "uint256", type: "uint256" }, - { - name: "numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templateRegistry", - outputs: [ - { - name: "", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xb5526D022962A1fFf6eD32C93e8b714c901F4323) - */ -export const disputeResolverAddress = { - 42161: "0xb5526D022962A1fFf6eD32C93e8b714c901F4323", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xb5526D022962A1fFf6eD32C93e8b714c901F4323) - */ -export const disputeResolverConfig = { - address: disputeResolverAddress, - abi: disputeResolverAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeResolverRuler -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xb3a5FdEAF461c42caCe148e978e6FBCa97bE6140) - */ -export const disputeResolverRulerAbi = [ - { - type: "constructor", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeRequest", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "function", - inputs: [], - name: "arbitrator", - outputs: [{ name: "", internalType: "contract IArbitratorV2", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "arbitratorDisputeIDToLocalID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "_disputeTemplate", internalType: "string", type: "string" }, - { - name: "_disputeTemplateDataMappings", - internalType: "string", - type: "string", - }, - { - name: "_numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - name: "createDisputeForTemplate", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "_disputeTemplateUri", internalType: "string", type: "string" }, - { - name: "_numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - name: "createDisputeForTemplateUri", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "isRuled", internalType: "bool", type: "bool" }, - { name: "ruling", internalType: "uint256", type: "uint256" }, - { - name: "numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templateRegistry", - outputs: [ - { - name: "", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xb3a5FdEAF461c42caCe148e978e6FBCa97bE6140) - */ -export const disputeResolverRulerAddress = { - 42161: "0xb3a5FdEAF461c42caCe148e978e6FBCa97bE6140", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xb3a5FdEAF461c42caCe148e978e6FBCa97bE6140) - */ -export const disputeResolverRulerConfig = { - address: disputeResolverRulerAddress, - abi: disputeResolverRulerAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeTemplateRegistry -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2) - */ -export const disputeTemplateRegistryAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_templateTag", - internalType: "string", - type: "string", - indexed: true, - }, - { - name: "_templateData", - internalType: "string", - type: "string", - indexed: false, - }, - { - name: "_templateDataMappings", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeTemplate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_templateTag", internalType: "string", type: "string" }, - { name: "_templateData", internalType: "string", type: "string" }, - { name: "_templateDataMappings", internalType: "string", type: "string" }, - ], - name: "setDisputeTemplate", - outputs: [{ name: "templateId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templates", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2) - */ -export const disputeTemplateRegistryAddress = { - 42161: "0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2) - */ -export const disputeTemplateRegistryConfig = { - address: disputeTemplateRegistryAddress, - abi: disputeTemplateRegistryAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeTemplateRegistry_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x57EfD43DAfCeb6C58Df57932b2B299f46fef5c87) - */ -export const disputeTemplateRegistryImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_templateTag", - internalType: "string", - type: "string", - indexed: true, - }, - { - name: "_templateData", - internalType: "string", - type: "string", - indexed: false, - }, - { - name: "_templateDataMappings", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeTemplate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_templateTag", internalType: "string", type: "string" }, - { name: "_templateData", internalType: "string", type: "string" }, - { name: "_templateDataMappings", internalType: "string", type: "string" }, - ], - name: "setDisputeTemplate", - outputs: [{ name: "templateId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templates", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x57EfD43DAfCeb6C58Df57932b2B299f46fef5c87) - */ -export const disputeTemplateRegistryImplementationAddress = { - 42161: "0x57EfD43DAfCeb6C58Df57932b2B299f46fef5c87", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x57EfD43DAfCeb6C58Df57932b2B299f46fef5c87) - */ -export const disputeTemplateRegistryImplementationConfig = { - address: disputeTemplateRegistryImplementationAddress, - abi: disputeTemplateRegistryImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeTemplateRegistry_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2) - */ -export const disputeTemplateRegistryProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2) - */ -export const disputeTemplateRegistryProxyAddress = { - 42161: "0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x0cFBaCA5C72e7Ca5fFABE768E135654fB3F2a5A2) - */ -export const disputeTemplateRegistryProxyConfig = { - address: disputeTemplateRegistryProxyAddress, - abi: disputeTemplateRegistryProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// EvidenceModule -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3) - */ -export const evidenceModuleAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_party", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_evidence", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "Evidence", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_externalDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_evidence", internalType: "string", type: "string" }, - ], - name: "submitEvidence", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3) - */ -export const evidenceModuleAddress = { - 42161: "0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3) - */ -export const evidenceModuleConfig = { - address: evidenceModuleAddress, - abi: evidenceModuleAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// EvidenceModule_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xA502A3942abCF8e71FBD87ed442B39b798b192C8) - */ -export const evidenceModuleImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_party", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_evidence", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "Evidence", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_externalDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_evidence", internalType: "string", type: "string" }, - ], - name: "submitEvidence", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xA502A3942abCF8e71FBD87ed442B39b798b192C8) - */ -export const evidenceModuleImplementationAddress = { - 42161: "0xA502A3942abCF8e71FBD87ed442B39b798b192C8", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xA502A3942abCF8e71FBD87ed442B39b798b192C8) - */ -export const evidenceModuleImplementationConfig = { - address: evidenceModuleImplementationAddress, - abi: evidenceModuleImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// EvidenceModule_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3) - */ -export const evidenceModuleProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3) - */ -export const evidenceModuleProxyAddress = { - 42161: "0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3) - */ -export const evidenceModuleProxyConfig = { - address: evidenceModuleProxyAddress, - abi: evidenceModuleProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// IHomeGateway -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -export const iHomeGatewayAbi = [ - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: false, - }, - { - name: "_arbitrableChainId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_arbitrable", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_arbitrableDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "CrossChainDisputeIncoming", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeRequest", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "function", - inputs: [{ name: "_disputeHash", internalType: "bytes32", type: "bytes32" }], - name: "disputeHashToHomeID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "feeToken", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "foreignChainID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "foreignGateway", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "receiverGateway", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_params", - internalType: "struct IHomeGateway.RelayCreateDisputeParams", - type: "tuple", - components: [ - { - name: "foreignBlockHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "foreignChainID", internalType: "uint256", type: "uint256" }, - { - name: "foreignArbitrable", - internalType: "address", - type: "address", - }, - { - name: "foreignDisputeID", - internalType: "uint256", - type: "uint256", - }, - { - name: "externalDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "templateId", internalType: "uint256", type: "uint256" }, - { name: "templateUri", internalType: "string", type: "string" }, - { name: "choices", internalType: "uint256", type: "uint256" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "relayCreateDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_params", - internalType: "struct IHomeGateway.RelayCreateDisputeParams", - type: "tuple", - components: [ - { - name: "foreignBlockHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "foreignChainID", internalType: "uint256", type: "uint256" }, - { - name: "foreignArbitrable", - internalType: "address", - type: "address", - }, - { - name: "foreignDisputeID", - internalType: "uint256", - type: "uint256", - }, - { - name: "externalDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "templateId", internalType: "uint256", type: "uint256" }, - { name: "templateUri", internalType: "string", type: "string" }, - { name: "choices", internalType: "uint256", type: "uint256" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - name: "relayCreateDispute", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "veaInbox", - outputs: [{ name: "", internalType: "contract IVeaInbox", type: "address" }], - stateMutability: "view", - }, -] as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCore -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x991d2df165670b9cac3B022f4B68D65b664222ea) - */ -export const klerosCoreAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "AppealFeesNotEnough" }, - { type: "error", inputs: [], name: "AppealPeriodNotPassed" }, - { type: "error", inputs: [], name: "ArbitrableNotWhitelisted" }, - { type: "error", inputs: [], name: "ArbitrationFeesNotEnough" }, - { type: "error", inputs: [], name: "CannotDisableClassicDK" }, - { type: "error", inputs: [], name: "CommitPeriodNotPassed" }, - { type: "error", inputs: [], name: "DisputeKitNotSupportedByCourt" }, - { type: "error", inputs: [], name: "DisputeKitOnly" }, - { type: "error", inputs: [], name: "DisputeNotAppealable" }, - { type: "error", inputs: [], name: "DisputePeriodIsFinal" }, - { type: "error", inputs: [], name: "DisputeStillDrawing" }, - { type: "error", inputs: [], name: "EvidenceNotPassedAndNotAppeal" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { type: "error", inputs: [], name: "GovernorOnly" }, - { type: "error", inputs: [], name: "GuardianOrGovernorOnly" }, - { type: "error", inputs: [], name: "InvalidDisputKitParent" }, - { type: "error", inputs: [], name: "InvalidForkingCourtAsParent" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "MinStakeLowerThanParentCourt" }, - { type: "error", inputs: [], name: "MustSupportDisputeKitClassic" }, - { type: "error", inputs: [], name: "NotEligibleForStaking" }, - { type: "error", inputs: [], name: "NotEvidencePeriod" }, - { type: "error", inputs: [], name: "NotExecutionPeriod" }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "RulingAlreadyExecuted" }, - { type: "error", inputs: [], name: "SortitionModuleOnly" }, - { type: "error", inputs: [], name: "StakingInTooManyCourts" }, - { type: "error", inputs: [], name: "StakingLessThanCourtMinStake" }, - { type: "error", inputs: [], name: "StakingMoreThanMaxStakePerJuror" }, - { type: "error", inputs: [], name: "StakingMoreThanMaxTotalStaked" }, - { type: "error", inputs: [], name: "StakingNotPossibleInThisCourt" }, - { type: "error", inputs: [], name: "StakingTransferFailed" }, - { type: "error", inputs: [], name: "StakingZeroWhenNoStake" }, - { type: "error", inputs: [], name: "TokenNotAccepted" }, - { type: "error", inputs: [], name: "TransferFailed" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { type: "error", inputs: [], name: "UnstakingTransferFailed" }, - { type: "error", inputs: [], name: "UnsuccessfulCall" }, - { type: "error", inputs: [], name: "UnsupportedDisputeKit" }, - { type: "error", inputs: [], name: "VotePeriodNotPassed" }, - { type: "error", inputs: [], name: "WhenNotPausedOnly" }, - { type: "error", inputs: [], name: "WhenPausedOnly" }, - { type: "error", inputs: [], name: "WrongDisputeKitIndex" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealDecision", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealPossible", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_parent", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "CourtCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromCourtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_toCourtID", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - ], - name: "CourtJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - indexed: true, - }, - ], - name: "DisputeKitCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { name: "_enable", internalType: "bool", type: "bool", indexed: true }, - ], - name: "DisputeKitEnabled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_toDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "DisputeKitJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_voteID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Draw", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_pnkAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "LeftoverRewardSent", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum KlerosCoreBase.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { type: "event", anonymous: false, inputs: [], name: "Paused" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_degreeOfCoherency", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_pnkAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { type: "event", anonymous: false, inputs: [], name: "Unpaused" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [ - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealPeriod", - outputs: [ - { name: "start", internalType: "uint256", type: "uint256" }, - { name: "end", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "arbitrableWhitelist", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_accepted", internalType: "bool", type: "bool" }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_arbitrable", internalType: "address", type: "address" }, - { name: "_allowed", internalType: "bool", type: "bool" }, - ], - name: "changeArbitrableWhitelist", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_rateInEth", internalType: "uint64", type: "uint64" }, - { name: "_rateDecimals", internalType: "uint8", type: "uint8" }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_guardian", internalType: "address", type: "address" }], - name: "changeGuardian", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_jurorNft", internalType: "contract IERC721", type: "address" }], - name: "changeJurorNft", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_pinakion", internalType: "contract IERC20", type: "address" }], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_sortitionModule", - internalType: "contract ISortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_toToken", internalType: "contract IERC20", type: "address" }, - { name: "_amountInEth", internalType: "uint256", type: "uint256" }, - ], - name: "convertEthToTokenAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { name: "disabled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - name: "currencyRates", - outputs: [ - { name: "feePaymentAccepted", internalType: "bool", type: "bool" }, - { name: "rateInEth", internalType: "uint64", type: "uint64" }, - { name: "rateDecimals", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputeKits", - outputs: [{ name: "", internalType: "contract IDisputeKit", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "courtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrableV2", - type: "address", - }, - { - name: "period", - internalType: "enum KlerosCoreBase.Period", - type: "uint8", - }, - { name: "ruled", internalType: "bool", type: "bool" }, - { name: "lastPeriodChange", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "nbDrawnJurors", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_enable", internalType: "bool", type: "bool" }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "getDisputeKitsLength", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfVotes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getPnkAtStakePerJuror", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { - name: "", - internalType: "struct KlerosCoreBase.Round", - type: "tuple", - components: [ - { name: "disputeKitID", internalType: "uint256", type: "uint256" }, - { - name: "pnkAtStakePerJuror", - internalType: "uint256", - type: "uint256", - }, - { - name: "totalFeesForJurors", - internalType: "uint256", - type: "uint256", - }, - { name: "nbVotes", internalType: "uint256", type: "uint256" }, - { name: "repartitions", internalType: "uint256", type: "uint256" }, - { name: "pnkPenalties", internalType: "uint256", type: "uint256" }, - { name: "drawnJurors", internalType: "address[]", type: "address[]" }, - { - name: "sumFeeRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "sumPnkRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "feeToken", - internalType: "contract IERC20", - type: "address", - }, - { name: "drawIterations", internalType: "uint256", type: "uint256" }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_courtID", internalType: "uint96", type: "uint96" }], - name: "getTimesPerPeriod", - outputs: [ - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "guardian", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_guardian", internalType: "address", type: "address" }, - { name: "_pinakion", internalType: "contract IERC20", type: "address" }, - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - { - name: "_disputeKit", - internalType: "contract IDisputeKit", - type: "address", - }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_sortitionModuleAddress", - internalType: "contract ISortitionModule", - type: "address", - }, - { name: "_jurorNft", internalType: "contract IERC721", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "isDisputeKitJumping", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitID", internalType: "uint256", type: "uint256" }, - ], - name: "isSupported", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "jurorNft", - outputs: [{ name: "", internalType: "contract IERC721", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "jurorProsecutionModule", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "paused", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "sortitionModule", - outputs: [{ name: "", internalType: "contract ISortitionModule", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x991d2df165670b9cac3B022f4B68D65b664222ea) - */ -export const klerosCoreAddress = { - 42161: "0x991d2df165670b9cac3B022f4B68D65b664222ea", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x991d2df165670b9cac3B022f4B68D65b664222ea) - */ -export const klerosCoreConfig = { - address: klerosCoreAddress, - abi: klerosCoreAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCoreRuler -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xc0169e0B19aE02ac4fADD689260CF038726DFE13) - */ -export const klerosCoreRulerAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "AppealFeesNotEnough" }, - { type: "error", inputs: [], name: "ArbitrationFeesNotEnough" }, - { type: "error", inputs: [], name: "DisputeNotAppealable" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { type: "error", inputs: [], name: "GovernorOnly" }, - { type: "error", inputs: [], name: "GovernorOrInstructorOnly" }, - { type: "error", inputs: [], name: "InvalidForkingCourtAsParent" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NoRulerSet" }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "RulerOnly" }, - { type: "error", inputs: [], name: "RulingAlreadyExecuted" }, - { type: "error", inputs: [], name: "RulingModeNotSet" }, - { type: "error", inputs: [], name: "TokenNotAccepted" }, - { type: "error", inputs: [], name: "TransferFailed" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { type: "error", inputs: [], name: "UnsuccessfulCall" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealDecision", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealPossible", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "mode", - internalType: "enum KlerosCoreRuler.RulingMode", - type: "uint8", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "tied", internalType: "bool", type: "bool", indexed: false }, - { - name: "overridden", - internalType: "bool", - type: "bool", - indexed: false, - }, - ], - name: "AutoRuled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_parent", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromCourtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_toCourtID", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - ], - name: "CourtJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_pnkAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "LeftoverRewardSent", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum KlerosCoreRuler.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_oldRuler", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_newRuler", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RulerChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_settings", - internalType: "struct KlerosCoreRuler.RulerSettings", - type: "tuple", - components: [ - { - name: "rulingMode", - internalType: "enum KlerosCoreRuler.RulingMode", - type: "uint8", - }, - { name: "presetRuling", internalType: "uint256", type: "uint256" }, - { name: "presetTied", internalType: "bool", type: "bool" }, - { name: "presetOverridden", internalType: "bool", type: "bool" }, - ], - indexed: false, - }, - ], - name: "RulerSettingsChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_degreeOfCoherency", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_pnkAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - { name: "_jump", internalType: "bool", type: "bool" }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_jump", internalType: "bool", type: "bool" }, - ], - name: "appealCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_accepted", internalType: "bool", type: "bool" }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_rateInEth", internalType: "uint64", type: "uint64" }, - { name: "_rateDecimals", internalType: "uint8", type: "uint8" }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_pinakion", internalType: "contract IERC20", type: "address" }], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - { name: "_newRuler", internalType: "address", type: "address" }, - ], - name: "changeRuler", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - { name: "_presetRuling", internalType: "uint256", type: "uint256" }, - { name: "_presetTied", internalType: "bool", type: "bool" }, - { name: "_presetOverridden", internalType: "bool", type: "bool" }, - ], - name: "changeRulingModeToAutomaticPreset", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "changeRulingModeToAutomaticRandom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "changeRulingModeToManual", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_toToken", internalType: "contract IERC20", type: "address" }, - { name: "_amountInEth", internalType: "uint256", type: "uint256" }, - ], - name: "convertEthToTokenAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { name: "disabled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - name: "currencyRates", - outputs: [ - { name: "feePaymentAccepted", internalType: "bool", type: "bool" }, - { name: "rateInEth", internalType: "uint64", type: "uint64" }, - { name: "rateDecimals", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "courtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrableV2", - type: "address", - }, - { - name: "period", - internalType: "enum KlerosCoreRuler.Period", - type: "uint8", - }, - { name: "ruled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "getNextDisputeID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfVotes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { - name: "", - internalType: "struct KlerosCoreRuler.Round", - type: "tuple", - components: [ - { - name: "totalFeesForJurors", - internalType: "uint256", - type: "uint256", - }, - { - name: "sumFeeRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "feeToken", - internalType: "contract IERC20", - type: "address", - }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_courtID", internalType: "uint96", type: "uint96" }], - name: "getTimesPerPeriod", - outputs: [ - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_pinakion", internalType: "contract IERC20", type: "address" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "rulers", - outputs: [{ name: "ruler", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - name: "rulingResults", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "settings", - outputs: [ - { - name: "rulingMode", - internalType: "enum KlerosCoreRuler.RulingMode", - type: "uint8", - }, - { name: "presetRuling", internalType: "uint256", type: "uint256" }, - { name: "presetTied", internalType: "bool", type: "bool" }, - { name: "presetOverridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xc0169e0B19aE02ac4fADD689260CF038726DFE13) - */ -export const klerosCoreRulerAddress = { - 42161: "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xc0169e0B19aE02ac4fADD689260CF038726DFE13) - */ -export const klerosCoreRulerConfig = { - address: klerosCoreRulerAddress, - abi: klerosCoreRulerAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCoreRuler_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x85093b5EDa4F2e2E2fEDae34Da91239D6a08e324) - */ -export const klerosCoreRulerImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "AppealFeesNotEnough" }, - { type: "error", inputs: [], name: "ArbitrationFeesNotEnough" }, - { type: "error", inputs: [], name: "DisputeNotAppealable" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { type: "error", inputs: [], name: "GovernorOnly" }, - { type: "error", inputs: [], name: "GovernorOrInstructorOnly" }, - { type: "error", inputs: [], name: "InvalidForkingCourtAsParent" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NoRulerSet" }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "RulerOnly" }, - { type: "error", inputs: [], name: "RulingAlreadyExecuted" }, - { type: "error", inputs: [], name: "RulingModeNotSet" }, - { type: "error", inputs: [], name: "TokenNotAccepted" }, - { type: "error", inputs: [], name: "TransferFailed" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { type: "error", inputs: [], name: "UnsuccessfulCall" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealDecision", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealPossible", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "mode", - internalType: "enum KlerosCoreRuler.RulingMode", - type: "uint8", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "tied", internalType: "bool", type: "bool", indexed: false }, - { - name: "overridden", - internalType: "bool", - type: "bool", - indexed: false, - }, - ], - name: "AutoRuled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_parent", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromCourtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_toCourtID", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - ], - name: "CourtJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_pnkAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "LeftoverRewardSent", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum KlerosCoreRuler.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_oldRuler", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_newRuler", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RulerChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_settings", - internalType: "struct KlerosCoreRuler.RulerSettings", - type: "tuple", - components: [ - { - name: "rulingMode", - internalType: "enum KlerosCoreRuler.RulingMode", - type: "uint8", - }, - { name: "presetRuling", internalType: "uint256", type: "uint256" }, - { name: "presetTied", internalType: "bool", type: "bool" }, - { name: "presetOverridden", internalType: "bool", type: "bool" }, - ], - indexed: false, - }, - ], - name: "RulerSettingsChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_degreeOfCoherency", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_pnkAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - { name: "_jump", internalType: "bool", type: "bool" }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_jump", internalType: "bool", type: "bool" }, - ], - name: "appealCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_accepted", internalType: "bool", type: "bool" }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_rateInEth", internalType: "uint64", type: "uint64" }, - { name: "_rateDecimals", internalType: "uint8", type: "uint8" }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_pinakion", internalType: "contract IERC20", type: "address" }], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - { name: "_newRuler", internalType: "address", type: "address" }, - ], - name: "changeRuler", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - { name: "_presetRuling", internalType: "uint256", type: "uint256" }, - { name: "_presetTied", internalType: "bool", type: "bool" }, - { name: "_presetOverridden", internalType: "bool", type: "bool" }, - ], - name: "changeRulingModeToAutomaticPreset", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "changeRulingModeToAutomaticRandom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "changeRulingModeToManual", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_toToken", internalType: "contract IERC20", type: "address" }, - { name: "_amountInEth", internalType: "uint256", type: "uint256" }, - ], - name: "convertEthToTokenAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { name: "disabled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - name: "currencyRates", - outputs: [ - { name: "feePaymentAccepted", internalType: "bool", type: "bool" }, - { name: "rateInEth", internalType: "uint64", type: "uint64" }, - { name: "rateDecimals", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "courtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrableV2", - type: "address", - }, - { - name: "period", - internalType: "enum KlerosCoreRuler.Period", - type: "uint8", - }, - { name: "ruled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "getNextDisputeID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfVotes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { - name: "", - internalType: "struct KlerosCoreRuler.Round", - type: "tuple", - components: [ - { - name: "totalFeesForJurors", - internalType: "uint256", - type: "uint256", - }, - { - name: "sumFeeRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "feeToken", - internalType: "contract IERC20", - type: "address", - }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_courtID", internalType: "uint96", type: "uint96" }], - name: "getTimesPerPeriod", - outputs: [ - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_pinakion", internalType: "contract IERC20", type: "address" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "rulers", - outputs: [{ name: "ruler", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - name: "rulingResults", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - }, - ], - name: "settings", - outputs: [ - { - name: "rulingMode", - internalType: "enum KlerosCoreRuler.RulingMode", - type: "uint8", - }, - { name: "presetRuling", internalType: "uint256", type: "uint256" }, - { name: "presetTied", internalType: "bool", type: "bool" }, - { name: "presetOverridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x85093b5EDa4F2e2E2fEDae34Da91239D6a08e324) - */ -export const klerosCoreRulerImplementationAddress = { - 42161: "0x85093b5EDa4F2e2E2fEDae34Da91239D6a08e324", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x85093b5EDa4F2e2E2fEDae34Da91239D6a08e324) - */ -export const klerosCoreRulerImplementationConfig = { - address: klerosCoreRulerImplementationAddress, - abi: klerosCoreRulerImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCoreRuler_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xc0169e0B19aE02ac4fADD689260CF038726DFE13) - */ -export const klerosCoreRulerProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xc0169e0B19aE02ac4fADD689260CF038726DFE13) - */ -export const klerosCoreRulerProxyAddress = { - 42161: "0xc0169e0B19aE02ac4fADD689260CF038726DFE13", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xc0169e0B19aE02ac4fADD689260CF038726DFE13) - */ -export const klerosCoreRulerProxyConfig = { - address: klerosCoreRulerProxyAddress, - abi: klerosCoreRulerProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCoreSnapshotProxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xEF719a5B3352F607e6C4E17b7e0cDAd8322fEC95) - */ -export const klerosCoreSnapshotProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract IKlerosCore", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "totalStaked", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "contract IKlerosCore", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract IKlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xEF719a5B3352F607e6C4E17b7e0cDAd8322fEC95) - */ -export const klerosCoreSnapshotProxyAddress = { - 42161: "0xEF719a5B3352F607e6C4E17b7e0cDAd8322fEC95", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xEF719a5B3352F607e6C4E17b7e0cDAd8322fEC95) - */ -export const klerosCoreSnapshotProxyConfig = { - address: klerosCoreSnapshotProxyAddress, - abi: klerosCoreSnapshotProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCore_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xC1210493804eEF123096F9581Ee82B915150E54c) - */ -export const klerosCoreImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "AppealFeesNotEnough" }, - { type: "error", inputs: [], name: "AppealPeriodNotPassed" }, - { type: "error", inputs: [], name: "ArbitrableNotWhitelisted" }, - { type: "error", inputs: [], name: "ArbitrationFeesNotEnough" }, - { type: "error", inputs: [], name: "CannotDisableClassicDK" }, - { type: "error", inputs: [], name: "CommitPeriodNotPassed" }, - { type: "error", inputs: [], name: "DisputeKitNotSupportedByCourt" }, - { type: "error", inputs: [], name: "DisputeKitOnly" }, - { type: "error", inputs: [], name: "DisputeNotAppealable" }, - { type: "error", inputs: [], name: "DisputePeriodIsFinal" }, - { type: "error", inputs: [], name: "DisputeStillDrawing" }, - { type: "error", inputs: [], name: "EvidenceNotPassedAndNotAppeal" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { type: "error", inputs: [], name: "GovernorOnly" }, - { type: "error", inputs: [], name: "GuardianOrGovernorOnly" }, - { type: "error", inputs: [], name: "InvalidDisputKitParent" }, - { type: "error", inputs: [], name: "InvalidForkingCourtAsParent" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "MinStakeLowerThanParentCourt" }, - { type: "error", inputs: [], name: "MustSupportDisputeKitClassic" }, - { type: "error", inputs: [], name: "NotEligibleForStaking" }, - { type: "error", inputs: [], name: "NotEvidencePeriod" }, - { type: "error", inputs: [], name: "NotExecutionPeriod" }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "RulingAlreadyExecuted" }, - { type: "error", inputs: [], name: "SortitionModuleOnly" }, - { type: "error", inputs: [], name: "StakingInTooManyCourts" }, - { type: "error", inputs: [], name: "StakingLessThanCourtMinStake" }, - { type: "error", inputs: [], name: "StakingMoreThanMaxStakePerJuror" }, - { type: "error", inputs: [], name: "StakingMoreThanMaxTotalStaked" }, - { type: "error", inputs: [], name: "StakingNotPossibleInThisCourt" }, - { type: "error", inputs: [], name: "StakingTransferFailed" }, - { type: "error", inputs: [], name: "StakingZeroWhenNoStake" }, - { type: "error", inputs: [], name: "TokenNotAccepted" }, - { type: "error", inputs: [], name: "TransferFailed" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { type: "error", inputs: [], name: "UnstakingTransferFailed" }, - { type: "error", inputs: [], name: "UnsuccessfulCall" }, - { type: "error", inputs: [], name: "UnsupportedDisputeKit" }, - { type: "error", inputs: [], name: "VotePeriodNotPassed" }, - { type: "error", inputs: [], name: "WhenNotPausedOnly" }, - { type: "error", inputs: [], name: "WhenPausedOnly" }, - { type: "error", inputs: [], name: "WrongDisputeKitIndex" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealDecision", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealPossible", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_parent", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "CourtCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromCourtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_toCourtID", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - ], - name: "CourtJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - indexed: true, - }, - ], - name: "DisputeKitCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { name: "_enable", internalType: "bool", type: "bool", indexed: true }, - ], - name: "DisputeKitEnabled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_toDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "DisputeKitJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_voteID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Draw", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_pnkAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "LeftoverRewardSent", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum KlerosCoreBase.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { type: "event", anonymous: false, inputs: [], name: "Paused" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_degreeOfCoherency", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_pnkAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { type: "event", anonymous: false, inputs: [], name: "Unpaused" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [ - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealPeriod", - outputs: [ - { name: "start", internalType: "uint256", type: "uint256" }, - { name: "end", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "arbitrableWhitelist", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_accepted", internalType: "bool", type: "bool" }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_arbitrable", internalType: "address", type: "address" }, - { name: "_allowed", internalType: "bool", type: "bool" }, - ], - name: "changeArbitrableWhitelist", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_rateInEth", internalType: "uint64", type: "uint64" }, - { name: "_rateDecimals", internalType: "uint8", type: "uint8" }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_guardian", internalType: "address", type: "address" }], - name: "changeGuardian", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_jurorNft", internalType: "contract IERC721", type: "address" }], - name: "changeJurorNft", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_pinakion", internalType: "contract IERC20", type: "address" }], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_sortitionModule", - internalType: "contract ISortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_toToken", internalType: "contract IERC20", type: "address" }, - { name: "_amountInEth", internalType: "uint256", type: "uint256" }, - ], - name: "convertEthToTokenAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { name: "disabled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - name: "currencyRates", - outputs: [ - { name: "feePaymentAccepted", internalType: "bool", type: "bool" }, - { name: "rateInEth", internalType: "uint64", type: "uint64" }, - { name: "rateDecimals", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputeKits", - outputs: [{ name: "", internalType: "contract IDisputeKit", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "courtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrableV2", - type: "address", - }, - { - name: "period", - internalType: "enum KlerosCoreBase.Period", - type: "uint8", - }, - { name: "ruled", internalType: "bool", type: "bool" }, - { name: "lastPeriodChange", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "nbDrawnJurors", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_enable", internalType: "bool", type: "bool" }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "getDisputeKitsLength", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfVotes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getPnkAtStakePerJuror", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { - name: "", - internalType: "struct KlerosCoreBase.Round", - type: "tuple", - components: [ - { name: "disputeKitID", internalType: "uint256", type: "uint256" }, - { - name: "pnkAtStakePerJuror", - internalType: "uint256", - type: "uint256", - }, - { - name: "totalFeesForJurors", - internalType: "uint256", - type: "uint256", - }, - { name: "nbVotes", internalType: "uint256", type: "uint256" }, - { name: "repartitions", internalType: "uint256", type: "uint256" }, - { name: "pnkPenalties", internalType: "uint256", type: "uint256" }, - { name: "drawnJurors", internalType: "address[]", type: "address[]" }, - { - name: "sumFeeRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "sumPnkRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "feeToken", - internalType: "contract IERC20", - type: "address", - }, - { name: "drawIterations", internalType: "uint256", type: "uint256" }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_courtID", internalType: "uint96", type: "uint96" }], - name: "getTimesPerPeriod", - outputs: [ - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "guardian", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_guardian", internalType: "address", type: "address" }, - { name: "_pinakion", internalType: "contract IERC20", type: "address" }, - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - { - name: "_disputeKit", - internalType: "contract IDisputeKit", - type: "address", - }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_sortitionModuleAddress", - internalType: "contract ISortitionModule", - type: "address", - }, - { name: "_jurorNft", internalType: "contract IERC721", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "isDisputeKitJumping", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitID", internalType: "uint256", type: "uint256" }, - ], - name: "isSupported", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "jurorNft", - outputs: [{ name: "", internalType: "contract IERC721", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "jurorProsecutionModule", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "paused", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "sortitionModule", - outputs: [{ name: "", internalType: "contract ISortitionModule", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xC1210493804eEF123096F9581Ee82B915150E54c) - */ -export const klerosCoreImplementationAddress = { - 42161: "0xC1210493804eEF123096F9581Ee82B915150E54c", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xC1210493804eEF123096F9581Ee82B915150E54c) - */ -export const klerosCoreImplementationConfig = { - address: klerosCoreImplementationAddress, - abi: klerosCoreImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCore_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x991d2df165670b9cac3B022f4B68D65b664222ea) - */ -export const klerosCoreProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x991d2df165670b9cac3B022f4B68D65b664222ea) - */ -export const klerosCoreProxyAddress = { - 42161: "0x991d2df165670b9cac3B022f4B68D65b664222ea", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x991d2df165670b9cac3B022f4B68D65b664222ea) - */ -export const klerosCoreProxyConfig = { - address: klerosCoreProxyAddress, - abi: klerosCoreProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosV2NeoEarlyUser -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xfE34a72c55e512601E7d491A9c5b36373cE34d63) - */ -export const klerosV2NeoEarlyUserAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "approved", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "operator", - internalType: "address", - type: "address", - indexed: true, - }, - { name: "approved", internalType: "bool", type: "bool", indexed: false }, - ], - name: "ApprovalForAll", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newMinter", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "EventMinterAdded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "oldMinter", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "EventMinterRemoved", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousOwner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "newOwner", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "OwnershipTransferred", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "tokenId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [{ name: "minter", internalType: "address", type: "address" }], - name: "addMinter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "owner", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "baseURI", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - ], - name: "burn", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "ids", internalType: "uint256[]", type: "uint256[]" }, - ], - name: "burnBatch", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "cid", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "getApproved", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "getNumMinted", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "operator", internalType: "address", type: "address" }, - ], - name: "isApprovedForAll", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "id", internalType: "uint256", type: "uint256" }, - ], - name: "isOwnerOf", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "cid", internalType: "uint256", type: "uint256" }, - ], - name: "mint", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - { name: "cidArr", internalType: "uint256[]", type: "uint256[]" }, - ], - name: "mintBatch", - outputs: [{ name: "", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "minters", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "ownerOf", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "minter", internalType: "address", type: "address" }], - name: "removeMinter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "operator", internalType: "address", type: "address" }, - { name: "approved", internalType: "bool", type: "bool" }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newName", internalType: "string", type: "string" }], - name: "setName", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newSymbol", internalType: "string", type: "string" }], - name: "setSymbol", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "transferable", internalType: "bool", type: "bool" }], - name: "setTransferable", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newURI", internalType: "string", type: "string" }], - name: "setURI", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "interfaceId", internalType: "bytes4", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "index", internalType: "uint256", type: "uint256" }, - ], - name: "tokenOfOwnerByIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "tokenId", internalType: "uint256", type: "uint256" }], - name: "tokenURI", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newOwner", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "transferable", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xfE34a72c55e512601E7d491A9c5b36373cE34d63) - */ -export const klerosV2NeoEarlyUserAddress = { - 42161: "0xfE34a72c55e512601E7d491A9c5b36373cE34d63", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xfE34a72c55e512601E7d491A9c5b36373cE34d63) - */ -export const klerosV2NeoEarlyUserConfig = { - address: klerosV2NeoEarlyUserAddress, - abi: klerosV2NeoEarlyUserAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PNK -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x330bD769382cFc6d50175903434CCC8D206DCAE5) - */ -export const pnkAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x330bD769382cFc6d50175903434CCC8D206DCAE5) - */ -export const pnkAddress = { - 42161: "0x330bD769382cFc6d50175903434CCC8D206DCAE5", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x330bD769382cFc6d50175903434CCC8D206DCAE5) - */ -export const pnkConfig = { address: pnkAddress, abi: pnkAbi } as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PNKFaucet -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x0000000000000000000000000000000000000000) - */ -export const pnkFaucetAbi = [ - { - type: "constructor", - inputs: [{ name: "_token", internalType: "contract IERC20", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "amount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "balance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_amount", internalType: "uint256", type: "uint256" }], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "token", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "withdrewAlready", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x0000000000000000000000000000000000000000) - */ -export const pnkFaucetAddress = { - 42161: "0x0000000000000000000000000000000000000000", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x0000000000000000000000000000000000000000) - */ -export const pnkFaucetConfig = { - address: pnkFaucetAddress, - abi: pnkFaucetAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Pinakion -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x330bD769382cFc6d50175903434CCC8D206DCAE5) - */ -export const pinakionAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x330bD769382cFc6d50175903434CCC8D206DCAE5) - */ -export const pinakionAddress = { - 42161: "0x330bD769382cFc6d50175903434CCC8D206DCAE5", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x330bD769382cFc6d50175903434CCC8D206DCAE5) - */ -export const pinakionConfig = { - address: pinakionAddress, - abi: pinakionAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PolicyRegistry -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x9d494768936b6bDaabc46733b8D53A937A6c6D7e) - * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c) - */ -export const policyRegistryAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_courtName", - internalType: "string", - type: "string", - indexed: false, - }, - { - name: "_policy", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "PolicyUpdate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "policies", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint256", type: "uint256" }, - { name: "_courtName", internalType: "string", type: "string" }, - { name: "_policy", internalType: "string", type: "string" }, - ], - name: "setPolicy", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * - [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x9d494768936b6bDaabc46733b8D53A937A6c6D7e) - * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c) - */ -export const policyRegistryAddress = { - 100: "0x9d494768936b6bDaabc46733b8D53A937A6c6D7e", - 42161: "0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c", -} as const; - -/** - * - [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x9d494768936b6bDaabc46733b8D53A937A6c6D7e) - * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c) - */ -export const policyRegistryConfig = { - address: policyRegistryAddress, - abi: policyRegistryAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PolicyRegistry_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xf7EE0Cd4E33C832DC05fB359896Add6E14E96C28) - */ -export const policyRegistryImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_courtName", - internalType: "string", - type: "string", - indexed: false, - }, - { - name: "_policy", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "PolicyUpdate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "policies", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint256", type: "uint256" }, - { name: "_courtName", internalType: "string", type: "string" }, - { name: "_policy", internalType: "string", type: "string" }, - ], - name: "setPolicy", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xf7EE0Cd4E33C832DC05fB359896Add6E14E96C28) - */ -export const policyRegistryImplementationAddress = { - 42161: "0xf7EE0Cd4E33C832DC05fB359896Add6E14E96C28", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xf7EE0Cd4E33C832DC05fB359896Add6E14E96C28) - */ -export const policyRegistryImplementationConfig = { - address: policyRegistryImplementationAddress, - abi: policyRegistryImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PolicyRegistry_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c) - */ -export const policyRegistryProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c) - */ -export const policyRegistryProxyAddress = { - 42161: "0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c) - */ -export const policyRegistryProxyConfig = { - address: policyRegistryProxyAddress, - abi: policyRegistryProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// RandomizerOracle -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x5b8bB80f2d72D0C85caB8fB169e8170A05C94bAF) - */ -export const randomizerOracleAbi = [] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x5b8bB80f2d72D0C85caB8fB169e8170A05C94bAF) - */ -export const randomizerOracleAddress = { - 42161: "0x5b8bB80f2d72D0C85caB8fB169e8170A05C94bAF", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x5b8bB80f2d72D0C85caB8fB169e8170A05C94bAF) - */ -export const randomizerOracleConfig = { - address: randomizerOracleAddress, - abi: randomizerOracleAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// RandomizerRNG -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3) - */ -export const randomizerRngAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "callbackGasLimit", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_randomizer", - internalType: "contract IRandomizer", - type: "address", - }, - { name: "_governor", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - name: "randomNumbers", - outputs: [{ name: "number", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomizer", - outputs: [{ name: "", internalType: "contract IRandomizer", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_id", internalType: "uint256", type: "uint256" }, - { name: "_value", internalType: "bytes32", type: "bytes32" }, - ], - name: "randomizerCallback", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_amount", internalType: "uint256", type: "uint256" }], - name: "randomizerWithdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "receiveRandomness", - outputs: [{ name: "randomNumber", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "requester", internalType: "address", type: "address" }], - name: "requesterToID", - outputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_callbackGasLimit", internalType: "uint256", type: "uint256" }], - name: "setCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_randomizer", internalType: "address", type: "address" }], - name: "setRandomizer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3) - */ -export const randomizerRngAddress = { - 42161: "0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3) - */ -export const randomizerRngConfig = { - address: randomizerRngAddress, - abi: randomizerRngAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// RandomizerRNG_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xF1a7Cd3115F5852966430f8E3877D2221F074A2e) - */ -export const randomizerRngImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "callbackGasLimit", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_randomizer", - internalType: "contract IRandomizer", - type: "address", - }, - { name: "_governor", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - name: "randomNumbers", - outputs: [{ name: "number", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomizer", - outputs: [{ name: "", internalType: "contract IRandomizer", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_id", internalType: "uint256", type: "uint256" }, - { name: "_value", internalType: "bytes32", type: "bytes32" }, - ], - name: "randomizerCallback", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_amount", internalType: "uint256", type: "uint256" }], - name: "randomizerWithdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "receiveRandomness", - outputs: [{ name: "randomNumber", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "requester", internalType: "address", type: "address" }], - name: "requesterToID", - outputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_callbackGasLimit", internalType: "uint256", type: "uint256" }], - name: "setCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_randomizer", internalType: "address", type: "address" }], - name: "setRandomizer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xF1a7Cd3115F5852966430f8E3877D2221F074A2e) - */ -export const randomizerRngImplementationAddress = { - 42161: "0xF1a7Cd3115F5852966430f8E3877D2221F074A2e", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xF1a7Cd3115F5852966430f8E3877D2221F074A2e) - */ -export const randomizerRngImplementationConfig = { - address: randomizerRngImplementationAddress, - abi: randomizerRngImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// RandomizerRNG_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3) - */ -export const randomizerRngProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3) - */ -export const randomizerRngProxyAddress = { - 42161: "0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x044AfE0069C0fd641BC5f90d9A4218eF0b2Fa9d3) - */ -export const randomizerRngProxyConfig = { - address: randomizerRngProxyAddress, - abi: randomizerRngProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionModule -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x21A9402aDb818744B296e1d1BE58C804118DC03D) - */ -export const sortitionModuleAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "LeftoverPNK", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "LeftoverPNKWithdrawn", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_phase", - internalType: "enum ISortitionModule.Phase", - type: "uint8", - indexed: false, - }, - ], - name: "NewPhase", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeDelayed", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_relativeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "_unlock", internalType: "bool", type: "bool", indexed: false }, - ], - name: "StakeLocked", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amountAllCourts", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_maxStakePerJuror", internalType: "uint256", type: "uint256" }], - name: "changeMaxStakePerJuror", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_maxTotalStaked", internalType: "uint256", type: "uint256" }], - name: "changeMaxTotalStaked", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_minStakingTime", internalType: "uint256", type: "uint256" }], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_rng", internalType: "contract RNG", type: "address" }, - { name: "_rngLookahead", internalType: "uint256", type: "uint256" }, - ], - name: "changeRandomNumberGenerator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "delayedStakeReadIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "delayedStakeWriteIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "delayedStakes", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "courtID", internalType: "uint96", type: "uint96" }, - { name: "stake", internalType: "uint256", type: "uint256" }, - { name: "alreadyTransferred", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "disputesWithoutJurors", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_iterations", internalType: "uint256", type: "uint256" }], - name: "executeDelayedStakes", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "getJurorBalance", - outputs: [ - { name: "totalStaked", internalType: "uint256", type: "uint256" }, - { name: "totalLocked", internalType: "uint256", type: "uint256" }, - { name: "stakedInCourt", internalType: "uint256", type: "uint256" }, - { name: "nbCourts", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorCourtIDs", - outputs: [{ name: "", internalType: "uint96[]", type: "uint96[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorLeftoverPNK", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_minStakingTime", internalType: "uint256", type: "uint256" }, - { name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }, - { name: "_rng", internalType: "contract RNG", type: "address" }, - { name: "_rngLookahead", internalType: "uint256", type: "uint256" }, - { name: "_maxStakePerJuror", internalType: "uint256", type: "uint256" }, - { name: "_maxTotalStaked", internalType: "uint256", type: "uint256" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize4", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "isJurorStaked", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "jurors", - outputs: [ - { name: "stakedPnk", internalType: "uint256", type: "uint256" }, - { name: "lockedPnk", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lastPhaseChange", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "jurorAccount", internalType: "address", type: "address" }, - { name: "courtId", internalType: "uint96", type: "uint96" }, - ], - name: "latestDelayedStakeIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "maxDrawingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "maxStakePerJuror", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "maxTotalStaked", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "minStakingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_randomNumber", internalType: "uint256", type: "uint256" }], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "passPhase", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "penalizeStake", - outputs: [ - { name: "pnkBalance", internalType: "uint256", type: "uint256" }, - { name: "availablePenalty", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "phase", - outputs: [{ name: "", internalType: "enum ISortitionModule.Phase", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomNumber", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomNumberRequestBlock", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "rng", - outputs: [{ name: "", internalType: "contract RNG", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "rngLookahead", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "_pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_ID", internalType: "bytes32", type: "bytes32" }, - ], - name: "stakeOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "stakeOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalStaked", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "validateStake", - outputs: [ - { name: "pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { - name: "stakingResult", - internalType: "enum StakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "withdrawLeftoverPNK", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x21A9402aDb818744B296e1d1BE58C804118DC03D) - */ -export const sortitionModuleAddress = { - 42161: "0x21A9402aDb818744B296e1d1BE58C804118DC03D", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x21A9402aDb818744B296e1d1BE58C804118DC03D) - */ -export const sortitionModuleConfig = { - address: sortitionModuleAddress, - abi: sortitionModuleAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionModule_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x3f6D0daeD166b64FCfBb9bc7c9E26423c6C08eEE) - */ -export const sortitionModuleImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "LeftoverPNK", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "LeftoverPNKWithdrawn", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_phase", - internalType: "enum ISortitionModule.Phase", - type: "uint8", - indexed: false, - }, - ], - name: "NewPhase", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeDelayed", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_relativeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "_unlock", internalType: "bool", type: "bool", indexed: false }, - ], - name: "StakeLocked", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amountAllCourts", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_maxStakePerJuror", internalType: "uint256", type: "uint256" }], - name: "changeMaxStakePerJuror", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_maxTotalStaked", internalType: "uint256", type: "uint256" }], - name: "changeMaxTotalStaked", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_minStakingTime", internalType: "uint256", type: "uint256" }], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_rng", internalType: "contract RNG", type: "address" }, - { name: "_rngLookahead", internalType: "uint256", type: "uint256" }, - ], - name: "changeRandomNumberGenerator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "delayedStakeReadIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "delayedStakeWriteIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "delayedStakes", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "courtID", internalType: "uint96", type: "uint96" }, - { name: "stake", internalType: "uint256", type: "uint256" }, - { name: "alreadyTransferred", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "disputesWithoutJurors", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_iterations", internalType: "uint256", type: "uint256" }], - name: "executeDelayedStakes", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "getJurorBalance", - outputs: [ - { name: "totalStaked", internalType: "uint256", type: "uint256" }, - { name: "totalLocked", internalType: "uint256", type: "uint256" }, - { name: "stakedInCourt", internalType: "uint256", type: "uint256" }, - { name: "nbCourts", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorCourtIDs", - outputs: [{ name: "", internalType: "uint96[]", type: "uint96[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorLeftoverPNK", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_minStakingTime", internalType: "uint256", type: "uint256" }, - { name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }, - { name: "_rng", internalType: "contract RNG", type: "address" }, - { name: "_rngLookahead", internalType: "uint256", type: "uint256" }, - { name: "_maxStakePerJuror", internalType: "uint256", type: "uint256" }, - { name: "_maxTotalStaked", internalType: "uint256", type: "uint256" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize4", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "isJurorStaked", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "jurors", - outputs: [ - { name: "stakedPnk", internalType: "uint256", type: "uint256" }, - { name: "lockedPnk", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lastPhaseChange", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "jurorAccount", internalType: "address", type: "address" }, - { name: "courtId", internalType: "uint96", type: "uint96" }, - ], - name: "latestDelayedStakeIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "maxDrawingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "maxStakePerJuror", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "maxTotalStaked", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "minStakingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_randomNumber", internalType: "uint256", type: "uint256" }], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "passPhase", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "penalizeStake", - outputs: [ - { name: "pnkBalance", internalType: "uint256", type: "uint256" }, - { name: "availablePenalty", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "phase", - outputs: [{ name: "", internalType: "enum ISortitionModule.Phase", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomNumber", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomNumberRequestBlock", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "rng", - outputs: [{ name: "", internalType: "contract RNG", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "rngLookahead", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "_pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_ID", internalType: "bytes32", type: "bytes32" }, - ], - name: "stakeOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "stakeOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalStaked", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "validateStake", - outputs: [ - { name: "pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { - name: "stakingResult", - internalType: "enum StakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "withdrawLeftoverPNK", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x3f6D0daeD166b64FCfBb9bc7c9E26423c6C08eEE) - */ -export const sortitionModuleImplementationAddress = { - 42161: "0x3f6D0daeD166b64FCfBb9bc7c9E26423c6C08eEE", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x3f6D0daeD166b64FCfBb9bc7c9E26423c6C08eEE) - */ -export const sortitionModuleImplementationConfig = { - address: sortitionModuleImplementationAddress, - abi: sortitionModuleImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionModule_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x21A9402aDb818744B296e1d1BE58C804118DC03D) - */ -export const sortitionModuleProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x21A9402aDb818744B296e1d1BE58C804118DC03D) - */ -export const sortitionModuleProxyAddress = { - 42161: "0x21A9402aDb818744B296e1d1BE58C804118DC03D", -} as const; - -/** - * [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x21A9402aDb818744B296e1d1BE58C804118DC03D) - */ -export const sortitionModuleProxyConfig = { - address: sortitionModuleProxyAddress, - abi: sortitionModuleProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// TokenBridge -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0xf6A78083ca3e2a662D6dd1703c939c8aCE2e268d) - */ -export const tokenBridgeAbi = [ - { - constant: false, - payable: false, - type: "function", - inputs: [ - { name: "version", type: "uint256" }, - { name: "implementation", type: "address" }, - ], - name: "upgradeTo", - outputs: [], - stateMutability: "nonpayable", - }, - { - constant: true, - payable: false, - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", type: "uint256" }], - stateMutability: "view", - }, - { - constant: true, - payable: false, - type: "function", - inputs: [], - name: "implementation", - outputs: [{ name: "", type: "address" }], - stateMutability: "view", - }, - { - constant: true, - payable: false, - type: "function", - inputs: [], - name: "upgradeabilityOwner", - outputs: [{ name: "", type: "address" }], - stateMutability: "view", - }, - { - constant: false, - payable: true, - type: "function", - inputs: [ - { name: "version", type: "uint256" }, - { name: "implementation", type: "address" }, - { name: "data", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - constant: false, - payable: false, - type: "function", - inputs: [{ name: "newOwner", type: "address" }], - name: "transferProxyOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { payable: true, type: "fallback", stateMutability: "payable" }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "previousOwner", type: "address", indexed: false }, - { name: "newOwner", type: "address", indexed: false }, - ], - name: "ProxyOwnershipTransferred", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "version", type: "uint256", indexed: false }, - { name: "implementation", type: "address", indexed: true }, - ], - name: "Upgraded", - }, -] as const; - -/** - * [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0xf6A78083ca3e2a662D6dd1703c939c8aCE2e268d) - */ -export const tokenBridgeAddress = { - 100: "0xf6A78083ca3e2a662D6dd1703c939c8aCE2e268d", -} as const; - -/** - * [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0xf6A78083ca3e2a662D6dd1703c939c8aCE2e268d) - */ -export const tokenBridgeConfig = { - address: tokenBridgeAddress, - abi: tokenBridgeAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// TransactionBatcher -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x6426800F8508b15AED271337498fa5e7D0794d46) - * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xBC5ef8d9ad307154447AE148c088f083d2dEa4eF) - */ -export const transactionBatcherAbi = [ - { - type: "function", - inputs: [ - { name: "targets", internalType: "address[]", type: "address[]" }, - { name: "values", internalType: "uint256[]", type: "uint256[]" }, - { name: "datas", internalType: "bytes[]", type: "bytes[]" }, - ], - name: "batchSend", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "targets", internalType: "address[]", type: "address[]" }, - { name: "values", internalType: "uint256[]", type: "uint256[]" }, - { name: "datas", internalType: "bytes[]", type: "bytes[]" }, - ], - name: "batchSendUnchecked", - outputs: [], - stateMutability: "payable", - }, -] as const; - -/** - * - [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x6426800F8508b15AED271337498fa5e7D0794d46) - * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xBC5ef8d9ad307154447AE148c088f083d2dEa4eF) - */ -export const transactionBatcherAddress = { - 100: "0x6426800F8508b15AED271337498fa5e7D0794d46", - 42161: "0xBC5ef8d9ad307154447AE148c088f083d2dEa4eF", -} as const; - -/** - * - [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x6426800F8508b15AED271337498fa5e7D0794d46) - * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0xBC5ef8d9ad307154447AE148c088f083d2dEa4eF) - */ -export const transactionBatcherConfig = { - address: transactionBatcherAddress, - abi: transactionBatcherAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// WETH -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1) - * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x82aF49447D8a07e3bd95BD0d56f35241523fBab1) - */ -export const wethAbi = [ - { - type: "constructor", - inputs: [ - { name: "_logic", internalType: "address", type: "address" }, - { name: "admin_", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "payable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "newAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "AdminChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "implementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { type: "fallback", stateMutability: "payable" }, - { - type: "function", - inputs: [], - name: "admin", - outputs: [{ name: "admin_", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newAdmin", internalType: "address", type: "address" }], - name: "changeAdmin", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "implementation", - outputs: [{ name: "implementation_", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newImplementation", internalType: "address", type: "address" }], - name: "upgradeTo", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * - [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1) - * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x82aF49447D8a07e3bd95BD0d56f35241523fBab1) - */ -export const wethAddress = { - 100: "0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1", - 42161: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", -} as const; - -/** - * - [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1) - * - [__View Contract on Arbitrum One Arbiscan__](https://arbiscan.io/address/0x82aF49447D8a07e3bd95BD0d56f35241523fBab1) - */ -export const wethConfig = { address: wethAddress, abi: wethAbi } as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// WrappedPinakion -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0xcb3231aBA3b451343e0Fddfc45883c842f223846) - */ -export const wrappedPinakionAbi = [ - { - type: "constructor", - inputs: [ - { name: "_logic", internalType: "address", type: "address" }, - { name: "_admin", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "payable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "newAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "AdminChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "implementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { type: "fallback", stateMutability: "payable" }, - { - type: "function", - inputs: [], - name: "admin", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newAdmin", internalType: "address", type: "address" }], - name: "changeAdmin", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "implementation", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newImplementation", internalType: "address", type: "address" }], - name: "upgradeTo", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0xcb3231aBA3b451343e0Fddfc45883c842f223846) - */ -export const wrappedPinakionAddress = { - 100: "0xcb3231aBA3b451343e0Fddfc45883c842f223846", -} as const; - -/** - * [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0xcb3231aBA3b451343e0Fddfc45883c842f223846) - */ -export const wrappedPinakionConfig = { - address: wrappedPinakionAddress, - abi: wrappedPinakionAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// xKlerosLiquid -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x9C1dA9A04925bDfDedf0f6421bC7EEa8305F9002) - */ -export const xKlerosLiquidAbi = [ - { - type: "constructor", - inputs: [ - { name: "_logic", internalType: "address", type: "address" }, - { name: "_admin", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "payable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "previousAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "newAdmin", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "AdminChanged", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "implementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { type: "fallback", stateMutability: "payable" }, - { - type: "function", - inputs: [], - name: "admin", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newAdmin", internalType: "address", type: "address" }], - name: "changeAdmin", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "implementation", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "newImplementation", internalType: "address", type: "address" }], - name: "upgradeTo", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x9C1dA9A04925bDfDedf0f6421bC7EEa8305F9002) - */ -export const xKlerosLiquidAddress = { - 100: "0x9C1dA9A04925bDfDedf0f6421bC7EEa8305F9002", -} as const; - -/** - * [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x9C1dA9A04925bDfDedf0f6421bC7EEa8305F9002) - */ -export const xKlerosLiquidConfig = { - address: xKlerosLiquidAddress, - abi: xKlerosLiquidAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// xPNK -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x37b60f4E9A31A64cCc0024dce7D0fD07eAA0F7B3) - */ -export const xPnkAbi = [] as const; - -/** - * [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x37b60f4E9A31A64cCc0024dce7D0fD07eAA0F7B3) - */ -export const xPnkAddress = { - 100: "0x37b60f4E9A31A64cCc0024dce7D0fD07eAA0F7B3", -} as const; - -/** - * [__View Contract on Gnosis Gnosisscan__](https://gnosisscan.io/address/0x37b60f4E9A31A64cCc0024dce7D0fD07eAA0F7B3) - */ -export const xPnkConfig = { address: xPnkAddress, abi: xPnkAbi } as const; diff --git a/contracts/deployments/mainnet/.chainId b/contracts/deployments/mainnet/.chainId deleted file mode 100644 index d00491fd7..000000000 --- a/contracts/deployments/mainnet/.chainId +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/contracts/deployments/sepolia/.chainId b/contracts/deployments/sepolia/.chainId deleted file mode 100644 index bd8d1cd44..000000000 --- a/contracts/deployments/sepolia/.chainId +++ /dev/null @@ -1 +0,0 @@ -11155111 \ No newline at end of file diff --git a/contracts/deployments/sepolia/PinakionV2.json b/contracts/deployments/sepolia/PinakionV2.json deleted file mode 100644 index ce9e361f7..000000000 --- a/contracts/deployments/sepolia/PinakionV2.json +++ /dev/null @@ -1,605 +0,0 @@ -{ - "address": "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", - "abi": [ - { - "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": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "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" - }, - { - "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": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "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": "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "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": "address", - "name": "_token", - "type": "address" - } - ], - "name": "recoverTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xc14f8d7b4ea34d9ecef6b9ca621b2fe60a6a23f5d25d1646b2f7470e212c9f9b", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", - "transactionIndex": 74, - "gasUsed": "1020268", - "logsBloom": "0x00000020000000000000000000000000000000000040000006800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000002000000000000000000000000000000000000000000000080000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x521251c8f56abab468b5c730c8dee5113536bc6ab051ce4201960f84b2cb130b", - "transactionHash": "0xc14f8d7b4ea34d9ecef6b9ca621b2fe60a6a23f5d25d1646b2f7470e212c9f9b", - "logs": [ - { - "transactionIndex": 74, - "blockNumber": 4880097, - "transactionHash": "0xc14f8d7b4ea34d9ecef6b9ca621b2fe60a6a23f5d25d1646b2f7470e212c9f9b", - "address": "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "data": "0x", - "logIndex": 95, - "blockHash": "0x521251c8f56abab468b5c730c8dee5113536bc6ab051ce4201960f84b2cb130b" - }, - { - "transactionIndex": 74, - "blockNumber": 4880097, - "transactionHash": "0xc14f8d7b4ea34d9ecef6b9ca621b2fe60a6a23f5d25d1646b2f7470e212c9f9b", - "address": "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "data": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000", - "logIndex": 96, - "blockHash": "0x521251c8f56abab468b5c730c8dee5113536bc6ab051ce4201960f84b2cb130b" - } - ], - "blockNumber": 4880097, - "cumulativeGasUsed": "10131785", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "efecbc06b185b229926f80f198f0ff7d", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"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\"},{\"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\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"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\":\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"recoverTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"custom:security-contact\":\"contact@kleros.io\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Destroys `amount` tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys `amount` tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `amount`.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"recoverTokens(address)\":{\"params\":{\"_token\":\"The address of the token contract that you want to recover, or set to 0 in case you want to extract ether.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"recoverTokens(address)\":{\"notice\":\"Recover tokens sent mistakenly to this contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/PinakionV2.sol\":\"PinakionV2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor() {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(address from, address to, uint256 amount) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(address owner, address spender, uint256 amount) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20.sol\\\";\\nimport \\\"../../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20Burnable is Context, ERC20 {\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n}\\n\",\"keccak256\":\"0x0d19410453cda55960a818e02bd7c18952a5c8fe7a3036e81f0d599f34487a7b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x37a19df56a98cd466fb6e70b8c56e13bfc439221bfabd8c5108d36d0e3ffc0e5\",\"license\":\"MIT\"},\"src/token/PinakionV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"../libraries/SafeERC20.sol\\\";\\n\\n/// @custom:security-contact contact@kleros.io\\ncontract PinakionV2 is ERC20, ERC20Burnable, Ownable {\\n using SafeERC20 for IERC20;\\n\\n constructor() ERC20(\\\"PinakionV2\\\", \\\"PNK\\\") {\\n _mint(msg.sender, 1000000000 * 10 ** decimals());\\n }\\n\\n function mint(address to, uint256 amount) public onlyOwner {\\n _mint(to, amount);\\n }\\n\\n /// @notice Recover tokens sent mistakenly to this contract.\\n /// @param _token The address of the token contract that you want to recover, or set to 0 in case you want to extract ether.\\n function recoverTokens(address _token) public onlyOwner {\\n if (_token == address(0)) {\\n require(payable(owner()).send(address(this).balance), \\\"Transfer failed\\\");\\n return;\\n }\\n\\n IERC20 token = IERC20(_token);\\n uint balance = token.balanceOf(address(this));\\n require(token.safeTransfer(payable(owner()), balance), \\\"Token transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x842a8e750d437381116c5619e89930c41053570a5361286a63f109ec92bc44f0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600a8152602001692834b730b5b4b7b72b1960b11b81525060405180604001604052806003815260200162504e4b60e81b815250816003908162000062919062000282565b50600462000071828262000282565b5050506200008e62000088620000bd60201b60201c565b620000c1565b620000b733620000a16012600a62000463565b620000b190633b9aca006200047b565b62000113565b620004ab565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200016e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b806002600082825462000182919062000495565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200020957607f821691505b6020821081036200022a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001d957600081815260208120601f850160051c81016020861015620002595750805b601f850160051c820191505b818110156200027a5782815560010162000265565b505050505050565b81516001600160401b038111156200029e576200029e620001de565b620002b681620002af8454620001f4565b8462000230565b602080601f831160018114620002ee5760008415620002d55750858301515b600019600386901b1c1916600185901b1785556200027a565b600085815260208120601f198616915b828110156200031f57888601518255948401946001909101908401620002fe565b50858210156200033e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003a55781600019048211156200038957620003896200034e565b808516156200039757918102915b93841c939080029062000369565b509250929050565b600082620003be575060016200045d565b81620003cd575060006200045d565b8160018114620003e65760028114620003f15762000411565b60019150506200045d565b60ff8411156200040557620004056200034e565b50506001821b6200045d565b5060208310610133831016604e8410600b841016171562000436575081810a6200045d565b62000442838362000364565b80600019048211156200045957620004596200034e565b0290505b92915050565b60006200047460ff841683620003ad565b9392505050565b80820281158282048414176200045d576200045d6200034e565b808201808211156200045d576200045d6200034e565b610f1280620004bb6000396000f3fe608060405234801561001057600080fd5b50600436106100f65760003560e01c806370a082311161009257806370a08231146101be578063715018a6146101e757806379cc6790146101ef5780638da5cb5b1461020257806395d89b411461021d578063a457c2d714610225578063a9059cbb14610238578063dd62ed3e1461024b578063f2fde38b1461025e57600080fd5b806306fdde03146100fb578063095ea7b31461011957806316114acd1461013c57806318160ddd1461015157806323b872dd14610163578063313ce56714610176578063395093511461018557806340c10f191461019857806342966c68146101ab575b600080fd5b610103610271565b6040516101109190610ce7565b60405180910390f35b61012c610127366004610d36565b610303565b6040519015158152602001610110565b61014f61014a366004610d60565b61031d565b005b6002545b604051908152602001610110565b61012c610171366004610d82565b61047f565b60405160128152602001610110565b61012c610193366004610d36565b6104a3565b61014f6101a6366004610d36565b6104c5565b61014f6101b9366004610dbe565b6104db565b6101556101cc366004610d60565b6001600160a01b031660009081526020819052604090205490565b61014f6104e5565b61014f6101fd366004610d36565b6104f9565b6005546040516001600160a01b039091168152602001610110565b61010361050e565b61012c610233366004610d36565b61051d565b61012c610246366004610d36565b610598565b610155610259366004610dd7565b6105a6565b61014f61026c366004610d60565b6105d1565b60606003805461028090610e0a565b80601f01602080910402602001604051908101604052809291908181526020018280546102ac90610e0a565b80156102f95780601f106102ce576101008083540402835291602001916102f9565b820191906000526020600020905b8154815290600101906020018083116102dc57829003601f168201915b5050505050905090565b600033610311818585610647565b60019150505b92915050565b61032561076b565b6001600160a01b0381166103a1576005546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505061039e5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064015b60405180910390fd5b50565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156103ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040e9190610e44565b90506104366104256005546001600160a01b031690565b6001600160a01b03841690836107c5565b61047a5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610395565b505050565b60003361048d858285610898565b610498858585610912565b506001949350505050565b6000336103118185856104b683836105a6565b6104c09190610e5d565b610647565b6104cd61076b565b6104d78282610aa4565b5050565b61039e3382610b51565b6104ed61076b565b6104f76000610c71565b565b610504823383610898565b6104d78282610b51565b60606004805461028090610e0a565b6000338161052b82866105a6565b90508381101561058b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610395565b6104988286868403610647565b600033610311818585610912565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6105d961076b565b6001600160a01b03811661063e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610395565b61039e81610c71565b6001600160a01b0383166106a95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610395565b6001600160a01b03821661070a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610395565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146104f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610395565b6040516001600160a01b03838116602483015260448201839052600091829182919087169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516108229190610e7e565b6000604051808303816000865af19150503d806000811461085f576040519150601f19603f3d011682016040523d82523d6000602084013e610864565b606091505b509150915081801561088e57508051158061088e57508080602001905181019061088e9190610e9a565b9695505050505050565b60006108a484846105a6565b9050600019811461090c57818110156108ff5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610395565b61090c8484848403610647565b50505050565b6001600160a01b0383166109765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610395565b6001600160a01b0382166109d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610395565b6001600160a01b03831660009081526020819052604090205481811015610a505760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610395565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020610ebd833981519152910160405180910390a361090c565b6001600160a01b038216610afa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610395565b8060026000828254610b0c9190610e5d565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020610ebd833981519152910160405180910390a35050565b6001600160a01b038216610bb15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610395565b6001600160a01b03821660009081526020819052604090205481811015610c255760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610395565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020610ebd833981519152910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b83811015610cde578181015183820152602001610cc6565b50506000910152565b6020815260008251806020840152610d06816040850160208701610cc3565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610d3157600080fd5b919050565b60008060408385031215610d4957600080fd5b610d5283610d1a565b946020939093013593505050565b600060208284031215610d7257600080fd5b610d7b82610d1a565b9392505050565b600080600060608486031215610d9757600080fd5b610da084610d1a565b9250610dae60208501610d1a565b9150604084013590509250925092565b600060208284031215610dd057600080fd5b5035919050565b60008060408385031215610dea57600080fd5b610df383610d1a565b9150610e0160208401610d1a565b90509250929050565b600181811c90821680610e1e57607f821691505b602082108103610e3e57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215610e5657600080fd5b5051919050565b8082018082111561031757634e487b7160e01b600052601160045260246000fd5b60008251610e90818460208701610cc3565b9190910192915050565b600060208284031215610eac57600080fd5b81518015158114610d7b57600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b9413b3e295ea54466427cb3885d953a088c004783f196ffc402f8c96242d9e764736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f65760003560e01c806370a082311161009257806370a08231146101be578063715018a6146101e757806379cc6790146101ef5780638da5cb5b1461020257806395d89b411461021d578063a457c2d714610225578063a9059cbb14610238578063dd62ed3e1461024b578063f2fde38b1461025e57600080fd5b806306fdde03146100fb578063095ea7b31461011957806316114acd1461013c57806318160ddd1461015157806323b872dd14610163578063313ce56714610176578063395093511461018557806340c10f191461019857806342966c68146101ab575b600080fd5b610103610271565b6040516101109190610ce7565b60405180910390f35b61012c610127366004610d36565b610303565b6040519015158152602001610110565b61014f61014a366004610d60565b61031d565b005b6002545b604051908152602001610110565b61012c610171366004610d82565b61047f565b60405160128152602001610110565b61012c610193366004610d36565b6104a3565b61014f6101a6366004610d36565b6104c5565b61014f6101b9366004610dbe565b6104db565b6101556101cc366004610d60565b6001600160a01b031660009081526020819052604090205490565b61014f6104e5565b61014f6101fd366004610d36565b6104f9565b6005546040516001600160a01b039091168152602001610110565b61010361050e565b61012c610233366004610d36565b61051d565b61012c610246366004610d36565b610598565b610155610259366004610dd7565b6105a6565b61014f61026c366004610d60565b6105d1565b60606003805461028090610e0a565b80601f01602080910402602001604051908101604052809291908181526020018280546102ac90610e0a565b80156102f95780601f106102ce576101008083540402835291602001916102f9565b820191906000526020600020905b8154815290600101906020018083116102dc57829003601f168201915b5050505050905090565b600033610311818585610647565b60019150505b92915050565b61032561076b565b6001600160a01b0381166103a1576005546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505061039e5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064015b60405180910390fd5b50565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156103ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040e9190610e44565b90506104366104256005546001600160a01b031690565b6001600160a01b03841690836107c5565b61047a5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610395565b505050565b60003361048d858285610898565b610498858585610912565b506001949350505050565b6000336103118185856104b683836105a6565b6104c09190610e5d565b610647565b6104cd61076b565b6104d78282610aa4565b5050565b61039e3382610b51565b6104ed61076b565b6104f76000610c71565b565b610504823383610898565b6104d78282610b51565b60606004805461028090610e0a565b6000338161052b82866105a6565b90508381101561058b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610395565b6104988286868403610647565b600033610311818585610912565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6105d961076b565b6001600160a01b03811661063e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610395565b61039e81610c71565b6001600160a01b0383166106a95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610395565b6001600160a01b03821661070a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610395565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146104f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610395565b6040516001600160a01b03838116602483015260448201839052600091829182919087169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516108229190610e7e565b6000604051808303816000865af19150503d806000811461085f576040519150601f19603f3d011682016040523d82523d6000602084013e610864565b606091505b509150915081801561088e57508051158061088e57508080602001905181019061088e9190610e9a565b9695505050505050565b60006108a484846105a6565b9050600019811461090c57818110156108ff5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610395565b61090c8484848403610647565b50505050565b6001600160a01b0383166109765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610395565b6001600160a01b0382166109d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610395565b6001600160a01b03831660009081526020819052604090205481811015610a505760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610395565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020610ebd833981519152910160405180910390a361090c565b6001600160a01b038216610afa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610395565b8060026000828254610b0c9190610e5d565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020610ebd833981519152910160405180910390a35050565b6001600160a01b038216610bb15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610395565b6001600160a01b03821660009081526020819052604090205481811015610c255760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610395565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020610ebd833981519152910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b83811015610cde578181015183820152602001610cc6565b50506000910152565b6020815260008251806020840152610d06816040850160208701610cc3565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610d3157600080fd5b919050565b60008060408385031215610d4957600080fd5b610d5283610d1a565b946020939093013593505050565b600060208284031215610d7257600080fd5b610d7b82610d1a565b9392505050565b600080600060608486031215610d9757600080fd5b610da084610d1a565b9250610dae60208501610d1a565b9150604084013590509250925092565b600060208284031215610dd057600080fd5b5035919050565b60008060408385031215610dea57600080fd5b610df383610d1a565b9150610e0160208401610d1a565b90509250929050565b600181811c90821680610e1e57607f821691505b602082108103610e3e57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215610e5657600080fd5b5051919050565b8082018082111561031757634e487b7160e01b600052601160045260246000fd5b60008251610e90818460208701610cc3565b9190910192915050565b600060208284031215610eac57600080fd5b81518015158114610d7b57600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b9413b3e295ea54466427cb3885d953a088c004783f196ffc402f8c96242d9e764736f6c63430008120033", - "devdoc": { - "custom:security-contact": "contact@kleros.io", - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "burn(uint256)": { - "details": "Destroys `amount` tokens from the caller. See {ERC20-_burn}." - }, - "burnFrom(address,uint256)": { - "details": "Destroys `amount` tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `amount`." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "decreaseAllowance(address,uint256)": { - "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." - }, - "increaseAllowance(address,uint256)": { - "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address." - }, - "name()": { - "details": "Returns the name of the token." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "recoverTokens(address)": { - "params": { - "_token": "The address of the token contract that you want to recover, or set to 0 in case you want to extract ether." - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "recoverTokens(address)": { - "notice": "Recover tokens sent mistakenly to this contract." - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 393, - "contract": "src/token/PinakionV2.sol:PinakionV2", - "label": "_balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 399, - "contract": "src/token/PinakionV2.sol:PinakionV2", - "label": "_allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 401, - "contract": "src/token/PinakionV2.sol:PinakionV2", - "label": "_totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 403, - "contract": "src/token/PinakionV2.sol:PinakionV2", - "label": "_name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - }, - { - "astId": 405, - "contract": "src/token/PinakionV2.sol:PinakionV2", - "label": "_symbol", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - }, - { - "astId": 103, - "contract": "src/token/PinakionV2.sol:PinakionV2", - "label": "_owner", - "offset": 0, - "slot": "5", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/sepoliaDevnet/.chainId b/contracts/deployments/sepoliaDevnet/.chainId deleted file mode 100644 index bd8d1cd44..000000000 --- a/contracts/deployments/sepoliaDevnet/.chainId +++ /dev/null @@ -1 +0,0 @@ -11155111 \ No newline at end of file diff --git a/contracts/deployments/sepoliaDevnet/PinakionV2.json b/contracts/deployments/sepoliaDevnet/PinakionV2.json deleted file mode 100644 index ce9e361f7..000000000 --- a/contracts/deployments/sepoliaDevnet/PinakionV2.json +++ /dev/null @@ -1,605 +0,0 @@ -{ - "address": "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", - "abi": [ - { - "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": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "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" - }, - { - "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": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "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": "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "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": "address", - "name": "_token", - "type": "address" - } - ], - "name": "recoverTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "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": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xc14f8d7b4ea34d9ecef6b9ca621b2fe60a6a23f5d25d1646b2f7470e212c9f9b", - "receipt": { - "to": null, - "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", - "contractAddress": "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", - "transactionIndex": 74, - "gasUsed": "1020268", - "logsBloom": "0x00000020000000000000000000000000000000000040000006800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000002000000000000000000000000000000000000000000000080000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x521251c8f56abab468b5c730c8dee5113536bc6ab051ce4201960f84b2cb130b", - "transactionHash": "0xc14f8d7b4ea34d9ecef6b9ca621b2fe60a6a23f5d25d1646b2f7470e212c9f9b", - "logs": [ - { - "transactionIndex": 74, - "blockNumber": 4880097, - "transactionHash": "0xc14f8d7b4ea34d9ecef6b9ca621b2fe60a6a23f5d25d1646b2f7470e212c9f9b", - "address": "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "data": "0x", - "logIndex": 95, - "blockHash": "0x521251c8f56abab468b5c730c8dee5113536bc6ab051ce4201960f84b2cb130b" - }, - { - "transactionIndex": 74, - "blockNumber": 4880097, - "transactionHash": "0xc14f8d7b4ea34d9ecef6b9ca621b2fe60a6a23f5d25d1646b2f7470e212c9f9b", - "address": "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59" - ], - "data": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000", - "logIndex": 96, - "blockHash": "0x521251c8f56abab468b5c730c8dee5113536bc6ab051ce4201960f84b2cb130b" - } - ], - "blockNumber": 4880097, - "cumulativeGasUsed": "10131785", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "efecbc06b185b229926f80f198f0ff7d", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"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\"},{\"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\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"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\":\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"recoverTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"custom:security-contact\":\"contact@kleros.io\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Destroys `amount` tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys `amount` tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `amount`.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"recoverTokens(address)\":{\"params\":{\"_token\":\"The address of the token contract that you want to recover, or set to 0 in case you want to extract ether.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"recoverTokens(address)\":{\"notice\":\"Recover tokens sent mistakenly to this contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/PinakionV2.sol\":\"PinakionV2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor() {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(address from, address to, uint256 amount) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(address owner, address spender, uint256 amount) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20.sol\\\";\\nimport \\\"../../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20Burnable is Context, ERC20 {\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n}\\n\",\"keccak256\":\"0x0d19410453cda55960a818e02bd7c18952a5c8fe7a3036e81f0d599f34487a7b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\"},\"src/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol\\n\\npragma solidity ^0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/// @title SafeERC20\\n/// @dev Wrappers around ERC20 operations that throw on failure (when the token\\n/// contract returns false). Tokens that return no value (and instead revert or\\n/// throw on failure) are also supported, non-reverting calls are assumed to be\\n/// successful.\\n/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\nlibrary SafeERC20 {\\n /// @dev Increases the allowance granted to `spender` by the caller.\\n /// @param _token Token to transfer.\\n /// @param _spender The address which will spend the funds.\\n /// @param _addedValue The amount of tokens to increase the allowance by.\\n function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) {\\n _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue);\\n return true;\\n }\\n\\n /// @dev Calls transfer() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value)));\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n\\n /// @dev Calls transferFrom() without reverting.\\n /// @param _token Token to transfer.\\n /// @param _from Sender address.\\n /// @param _to Recepient address.\\n /// @param _value Amount transferred.\\n /// @return Whether transfer succeeded or not.\\n function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) {\\n (bool success, bytes memory data) = address(_token).call(\\n abi.encodeCall(IERC20.transferFrom, (_from, _to, _value))\\n );\\n return (success && (data.length == 0 || abi.decode(data, (bool))));\\n }\\n}\\n\",\"keccak256\":\"0x37a19df56a98cd466fb6e70b8c56e13bfc439221bfabd8c5108d36d0e3ffc0e5\",\"license\":\"MIT\"},\"src/token/PinakionV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"../libraries/SafeERC20.sol\\\";\\n\\n/// @custom:security-contact contact@kleros.io\\ncontract PinakionV2 is ERC20, ERC20Burnable, Ownable {\\n using SafeERC20 for IERC20;\\n\\n constructor() ERC20(\\\"PinakionV2\\\", \\\"PNK\\\") {\\n _mint(msg.sender, 1000000000 * 10 ** decimals());\\n }\\n\\n function mint(address to, uint256 amount) public onlyOwner {\\n _mint(to, amount);\\n }\\n\\n /// @notice Recover tokens sent mistakenly to this contract.\\n /// @param _token The address of the token contract that you want to recover, or set to 0 in case you want to extract ether.\\n function recoverTokens(address _token) public onlyOwner {\\n if (_token == address(0)) {\\n require(payable(owner()).send(address(this).balance), \\\"Transfer failed\\\");\\n return;\\n }\\n\\n IERC20 token = IERC20(_token);\\n uint balance = token.balanceOf(address(this));\\n require(token.safeTransfer(payable(owner()), balance), \\\"Token transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x842a8e750d437381116c5619e89930c41053570a5361286a63f109ec92bc44f0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600a8152602001692834b730b5b4b7b72b1960b11b81525060405180604001604052806003815260200162504e4b60e81b815250816003908162000062919062000282565b50600462000071828262000282565b5050506200008e62000088620000bd60201b60201c565b620000c1565b620000b733620000a16012600a62000463565b620000b190633b9aca006200047b565b62000113565b620004ab565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200016e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b806002600082825462000182919062000495565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200020957607f821691505b6020821081036200022a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001d957600081815260208120601f850160051c81016020861015620002595750805b601f850160051c820191505b818110156200027a5782815560010162000265565b505050505050565b81516001600160401b038111156200029e576200029e620001de565b620002b681620002af8454620001f4565b8462000230565b602080601f831160018114620002ee5760008415620002d55750858301515b600019600386901b1c1916600185901b1785556200027a565b600085815260208120601f198616915b828110156200031f57888601518255948401946001909101908401620002fe565b50858210156200033e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003a55781600019048211156200038957620003896200034e565b808516156200039757918102915b93841c939080029062000369565b509250929050565b600082620003be575060016200045d565b81620003cd575060006200045d565b8160018114620003e65760028114620003f15762000411565b60019150506200045d565b60ff8411156200040557620004056200034e565b50506001821b6200045d565b5060208310610133831016604e8410600b841016171562000436575081810a6200045d565b62000442838362000364565b80600019048211156200045957620004596200034e565b0290505b92915050565b60006200047460ff841683620003ad565b9392505050565b80820281158282048414176200045d576200045d6200034e565b808201808211156200045d576200045d6200034e565b610f1280620004bb6000396000f3fe608060405234801561001057600080fd5b50600436106100f65760003560e01c806370a082311161009257806370a08231146101be578063715018a6146101e757806379cc6790146101ef5780638da5cb5b1461020257806395d89b411461021d578063a457c2d714610225578063a9059cbb14610238578063dd62ed3e1461024b578063f2fde38b1461025e57600080fd5b806306fdde03146100fb578063095ea7b31461011957806316114acd1461013c57806318160ddd1461015157806323b872dd14610163578063313ce56714610176578063395093511461018557806340c10f191461019857806342966c68146101ab575b600080fd5b610103610271565b6040516101109190610ce7565b60405180910390f35b61012c610127366004610d36565b610303565b6040519015158152602001610110565b61014f61014a366004610d60565b61031d565b005b6002545b604051908152602001610110565b61012c610171366004610d82565b61047f565b60405160128152602001610110565b61012c610193366004610d36565b6104a3565b61014f6101a6366004610d36565b6104c5565b61014f6101b9366004610dbe565b6104db565b6101556101cc366004610d60565b6001600160a01b031660009081526020819052604090205490565b61014f6104e5565b61014f6101fd366004610d36565b6104f9565b6005546040516001600160a01b039091168152602001610110565b61010361050e565b61012c610233366004610d36565b61051d565b61012c610246366004610d36565b610598565b610155610259366004610dd7565b6105a6565b61014f61026c366004610d60565b6105d1565b60606003805461028090610e0a565b80601f01602080910402602001604051908101604052809291908181526020018280546102ac90610e0a565b80156102f95780601f106102ce576101008083540402835291602001916102f9565b820191906000526020600020905b8154815290600101906020018083116102dc57829003601f168201915b5050505050905090565b600033610311818585610647565b60019150505b92915050565b61032561076b565b6001600160a01b0381166103a1576005546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505061039e5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064015b60405180910390fd5b50565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156103ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040e9190610e44565b90506104366104256005546001600160a01b031690565b6001600160a01b03841690836107c5565b61047a5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610395565b505050565b60003361048d858285610898565b610498858585610912565b506001949350505050565b6000336103118185856104b683836105a6565b6104c09190610e5d565b610647565b6104cd61076b565b6104d78282610aa4565b5050565b61039e3382610b51565b6104ed61076b565b6104f76000610c71565b565b610504823383610898565b6104d78282610b51565b60606004805461028090610e0a565b6000338161052b82866105a6565b90508381101561058b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610395565b6104988286868403610647565b600033610311818585610912565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6105d961076b565b6001600160a01b03811661063e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610395565b61039e81610c71565b6001600160a01b0383166106a95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610395565b6001600160a01b03821661070a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610395565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146104f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610395565b6040516001600160a01b03838116602483015260448201839052600091829182919087169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516108229190610e7e565b6000604051808303816000865af19150503d806000811461085f576040519150601f19603f3d011682016040523d82523d6000602084013e610864565b606091505b509150915081801561088e57508051158061088e57508080602001905181019061088e9190610e9a565b9695505050505050565b60006108a484846105a6565b9050600019811461090c57818110156108ff5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610395565b61090c8484848403610647565b50505050565b6001600160a01b0383166109765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610395565b6001600160a01b0382166109d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610395565b6001600160a01b03831660009081526020819052604090205481811015610a505760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610395565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020610ebd833981519152910160405180910390a361090c565b6001600160a01b038216610afa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610395565b8060026000828254610b0c9190610e5d565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020610ebd833981519152910160405180910390a35050565b6001600160a01b038216610bb15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610395565b6001600160a01b03821660009081526020819052604090205481811015610c255760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610395565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020610ebd833981519152910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b83811015610cde578181015183820152602001610cc6565b50506000910152565b6020815260008251806020840152610d06816040850160208701610cc3565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610d3157600080fd5b919050565b60008060408385031215610d4957600080fd5b610d5283610d1a565b946020939093013593505050565b600060208284031215610d7257600080fd5b610d7b82610d1a565b9392505050565b600080600060608486031215610d9757600080fd5b610da084610d1a565b9250610dae60208501610d1a565b9150604084013590509250925092565b600060208284031215610dd057600080fd5b5035919050565b60008060408385031215610dea57600080fd5b610df383610d1a565b9150610e0160208401610d1a565b90509250929050565b600181811c90821680610e1e57607f821691505b602082108103610e3e57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215610e5657600080fd5b5051919050565b8082018082111561031757634e487b7160e01b600052601160045260246000fd5b60008251610e90818460208701610cc3565b9190910192915050565b600060208284031215610eac57600080fd5b81518015158114610d7b57600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b9413b3e295ea54466427cb3885d953a088c004783f196ffc402f8c96242d9e764736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f65760003560e01c806370a082311161009257806370a08231146101be578063715018a6146101e757806379cc6790146101ef5780638da5cb5b1461020257806395d89b411461021d578063a457c2d714610225578063a9059cbb14610238578063dd62ed3e1461024b578063f2fde38b1461025e57600080fd5b806306fdde03146100fb578063095ea7b31461011957806316114acd1461013c57806318160ddd1461015157806323b872dd14610163578063313ce56714610176578063395093511461018557806340c10f191461019857806342966c68146101ab575b600080fd5b610103610271565b6040516101109190610ce7565b60405180910390f35b61012c610127366004610d36565b610303565b6040519015158152602001610110565b61014f61014a366004610d60565b61031d565b005b6002545b604051908152602001610110565b61012c610171366004610d82565b61047f565b60405160128152602001610110565b61012c610193366004610d36565b6104a3565b61014f6101a6366004610d36565b6104c5565b61014f6101b9366004610dbe565b6104db565b6101556101cc366004610d60565b6001600160a01b031660009081526020819052604090205490565b61014f6104e5565b61014f6101fd366004610d36565b6104f9565b6005546040516001600160a01b039091168152602001610110565b61010361050e565b61012c610233366004610d36565b61051d565b61012c610246366004610d36565b610598565b610155610259366004610dd7565b6105a6565b61014f61026c366004610d60565b6105d1565b60606003805461028090610e0a565b80601f01602080910402602001604051908101604052809291908181526020018280546102ac90610e0a565b80156102f95780601f106102ce576101008083540402835291602001916102f9565b820191906000526020600020905b8154815290600101906020018083116102dc57829003601f168201915b5050505050905090565b600033610311818585610647565b60019150505b92915050565b61032561076b565b6001600160a01b0381166103a1576005546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505061039e5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064015b60405180910390fd5b50565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156103ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040e9190610e44565b90506104366104256005546001600160a01b031690565b6001600160a01b03841690836107c5565b61047a5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610395565b505050565b60003361048d858285610898565b610498858585610912565b506001949350505050565b6000336103118185856104b683836105a6565b6104c09190610e5d565b610647565b6104cd61076b565b6104d78282610aa4565b5050565b61039e3382610b51565b6104ed61076b565b6104f76000610c71565b565b610504823383610898565b6104d78282610b51565b60606004805461028090610e0a565b6000338161052b82866105a6565b90508381101561058b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610395565b6104988286868403610647565b600033610311818585610912565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6105d961076b565b6001600160a01b03811661063e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610395565b61039e81610c71565b6001600160a01b0383166106a95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610395565b6001600160a01b03821661070a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610395565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146104f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610395565b6040516001600160a01b03838116602483015260448201839052600091829182919087169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516108229190610e7e565b6000604051808303816000865af19150503d806000811461085f576040519150601f19603f3d011682016040523d82523d6000602084013e610864565b606091505b509150915081801561088e57508051158061088e57508080602001905181019061088e9190610e9a565b9695505050505050565b60006108a484846105a6565b9050600019811461090c57818110156108ff5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610395565b61090c8484848403610647565b50505050565b6001600160a01b0383166109765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610395565b6001600160a01b0382166109d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610395565b6001600160a01b03831660009081526020819052604090205481811015610a505760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610395565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020610ebd833981519152910160405180910390a361090c565b6001600160a01b038216610afa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610395565b8060026000828254610b0c9190610e5d565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020610ebd833981519152910160405180910390a35050565b6001600160a01b038216610bb15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610395565b6001600160a01b03821660009081526020819052604090205481811015610c255760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610395565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020610ebd833981519152910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b83811015610cde578181015183820152602001610cc6565b50506000910152565b6020815260008251806020840152610d06816040850160208701610cc3565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610d3157600080fd5b919050565b60008060408385031215610d4957600080fd5b610d5283610d1a565b946020939093013593505050565b600060208284031215610d7257600080fd5b610d7b82610d1a565b9392505050565b600080600060608486031215610d9757600080fd5b610da084610d1a565b9250610dae60208501610d1a565b9150604084013590509250925092565b600060208284031215610dd057600080fd5b5035919050565b60008060408385031215610dea57600080fd5b610df383610d1a565b9150610e0160208401610d1a565b90509250929050565b600181811c90821680610e1e57607f821691505b602082108103610e3e57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215610e5657600080fd5b5051919050565b8082018082111561031757634e487b7160e01b600052601160045260246000fd5b60008251610e90818460208701610cc3565b9190910192915050565b600060208284031215610eac57600080fd5b81518015158114610d7b57600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b9413b3e295ea54466427cb3885d953a088c004783f196ffc402f8c96242d9e764736f6c63430008120033", - "devdoc": { - "custom:security-contact": "contact@kleros.io", - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "burn(uint256)": { - "details": "Destroys `amount` tokens from the caller. See {ERC20-_burn}." - }, - "burnFrom(address,uint256)": { - "details": "Destroys `amount` tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `amount`." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "decreaseAllowance(address,uint256)": { - "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." - }, - "increaseAllowance(address,uint256)": { - "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address." - }, - "name()": { - "details": "Returns the name of the token." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "recoverTokens(address)": { - "params": { - "_token": "The address of the token contract that you want to recover, or set to 0 in case you want to extract ether." - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "recoverTokens(address)": { - "notice": "Recover tokens sent mistakenly to this contract." - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 393, - "contract": "src/token/PinakionV2.sol:PinakionV2", - "label": "_balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 399, - "contract": "src/token/PinakionV2.sol:PinakionV2", - "label": "_allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 401, - "contract": "src/token/PinakionV2.sol:PinakionV2", - "label": "_totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 403, - "contract": "src/token/PinakionV2.sol:PinakionV2", - "label": "_name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - }, - { - "astId": 405, - "contract": "src/token/PinakionV2.sol:PinakionV2", - "label": "_symbol", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - }, - { - "astId": 103, - "contract": "src/token/PinakionV2.sol:PinakionV2", - "label": "_owner", - "offset": 0, - "slot": "5", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} diff --git a/contracts/deployments/testnet.viem.ts b/contracts/deployments/testnet.viem.ts deleted file mode 100644 index 629e3a48b..000000000 --- a/contracts/deployments/testnet.viem.ts +++ /dev/null @@ -1,15289 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ArbitrableExample -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x438ca5337AE771dF926B7f4fDE1A21D72a315bDC) - */ -export const arbitrableExampleAbi = [ - { - type: "constructor", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - { name: "_templateData", internalType: "string", type: "string" }, - { name: "_templateDataMappings", internalType: "string", type: "string" }, - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - { name: "_weth", internalType: "contract IERC20", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_action", - internalType: "string", - type: "string", - indexed: true, - }, - ], - name: "Action", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_arbitrableDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeRequest", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "function", - inputs: [], - name: "arbitrator", - outputs: [{ name: "", internalType: "contract IArbitratorV2", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "arbitratorExtraData", - outputs: [{ name: "", internalType: "bytes", type: "bytes" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }], - name: "changeArbitratorExtraData", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_templateData", internalType: "string", type: "string" }, - { name: "_templateDataMappings", internalType: "string", type: "string" }, - ], - name: "changeDisputeTemplate", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_action", internalType: "string", type: "string" }, - { name: "_feeInWeth", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_action", internalType: "string", type: "string" }], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "isRuled", internalType: "bool", type: "bool" }, - { name: "ruling", internalType: "uint256", type: "uint256" }, - { - name: "numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "externalIDtoLocalID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_externalDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templateId", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "templateRegistry", - outputs: [ - { - name: "", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "weth", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x438ca5337AE771dF926B7f4fDE1A21D72a315bDC) - */ -export const arbitrableExampleAddress = { - 10200: "0x438ca5337AE771dF926B7f4fDE1A21D72a315bDC", -} as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x438ca5337AE771dF926B7f4fDE1A21D72a315bDC) - */ -export const arbitrableExampleConfig = { - address: arbitrableExampleAddress, - abi: arbitrableExampleAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// BlockHashRNG -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0298a3EFa6Faf90865725E2b48Cf0F66e5d52754) - */ -export const blockHashRngAbi = [ - { - type: "function", - inputs: [{ name: "block", internalType: "uint256", type: "uint256" }], - name: "randomNumbers", - outputs: [{ name: "number", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_block", internalType: "uint256", type: "uint256" }], - name: "receiveRandomness", - outputs: [{ name: "randomNumber", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_block", internalType: "uint256", type: "uint256" }], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0298a3EFa6Faf90865725E2b48Cf0F66e5d52754) - */ -export const blockHashRngAddress = { - 421614: "0x0298a3EFa6Faf90865725E2b48Cf0F66e5d52754", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0298a3EFa6Faf90865725E2b48Cf0F66e5d52754) - */ -export const blockHashRngConfig = { - address: blockHashRngAddress, - abi: blockHashRngAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ChainlinkRNG -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xAd5cCc93429e3A977c273cEeD106Ef16A69EAf79) - */ -export const chainlinkRngAbi = [ - { - type: "constructor", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_sortitionModule", internalType: "address", type: "address" }, - { name: "_vrfCoordinator", internalType: "address", type: "address" }, - { name: "_keyHash", internalType: "bytes32", type: "bytes32" }, - { name: "_subscriptionId", internalType: "uint256", type: "uint256" }, - { name: "_requestConfirmations", internalType: "uint16", type: "uint16" }, - { name: "_callbackGasLimit", internalType: "uint32", type: "uint32" }, - ], - stateMutability: "nonpayable", - }, - { - type: "error", - inputs: [ - { name: "have", internalType: "address", type: "address" }, - { name: "want", internalType: "address", type: "address" }, - ], - name: "OnlyCoordinatorCanFulfill", - }, - { - type: "error", - inputs: [ - { name: "have", internalType: "address", type: "address" }, - { name: "owner", internalType: "address", type: "address" }, - { name: "coordinator", internalType: "address", type: "address" }, - ], - name: "OnlyOwnerOrCoordinator", - }, - { type: "error", inputs: [], name: "ZeroAddress" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "vrfCoordinator", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "CoordinatorSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - ], - name: "OwnershipTransferRequested", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - ], - name: "OwnershipTransferred", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "randomWord", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "RequestFulfilled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "RequestSent", - }, - { - type: "function", - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "callbackGasLimit", - outputs: [{ name: "", internalType: "uint32", type: "uint32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_callbackGasLimit", internalType: "uint32", type: "uint32" }], - name: "changeCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_keyHash", internalType: "bytes32", type: "bytes32" }], - name: "changeKeyHash", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_requestConfirmations", internalType: "uint16", type: "uint16" }], - name: "changeRequestConfirmations", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_sortitionModule", internalType: "address", type: "address" }], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_subscriptionId", internalType: "uint256", type: "uint256" }], - name: "changeSubscriptionId", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_vrfCoordinator", internalType: "address", type: "address" }], - name: "changeVrfCoordinator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "keyHash", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lastRequestId", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - name: "randomNumbers", - outputs: [{ name: "number", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "requestId", internalType: "uint256", type: "uint256" }, - { name: "randomWords", internalType: "uint256[]", type: "uint256[]" }, - ], - name: "rawFulfillRandomWords", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "receiveRandomness", - outputs: [{ name: "randomNumber", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "requestConfirmations", - outputs: [{ name: "", internalType: "uint16", type: "uint16" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "s_vrfCoordinator", - outputs: [ - { - name: "", - internalType: "contract IVRFCoordinatorV2Plus", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_vrfCoordinator", internalType: "address", type: "address" }], - name: "setCoordinator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "sortitionModule", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "subscriptionId", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xAd5cCc93429e3A977c273cEeD106Ef16A69EAf79) - */ -export const chainlinkRngAddress = { - 421614: "0xAd5cCc93429e3A977c273cEeD106Ef16A69EAf79", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xAd5cCc93429e3A977c273cEeD106Ef16A69EAf79) - */ -export const chainlinkRngConfig = { - address: chainlinkRngAddress, - abi: chainlinkRngAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ChainlinkVRFCoordinator -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5CE8D5A2BC84beb22a398CCA51996F7930313D61) - */ -export const chainlinkVrfCoordinatorAbi = [ - { - type: "constructor", - inputs: [{ name: "blockhashStore", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "error", - inputs: [ - { name: "internalBalance", internalType: "uint256", type: "uint256" }, - { name: "externalBalance", internalType: "uint256", type: "uint256" }, - ], - name: "BalanceInvariantViolated", - }, - { - type: "error", - inputs: [{ name: "blockNum", internalType: "uint256", type: "uint256" }], - name: "BlockhashNotInStore", - }, - { - type: "error", - inputs: [{ name: "coordinatorAddress", internalType: "address", type: "address" }], - name: "CoordinatorAlreadyRegistered", - }, - { - type: "error", - inputs: [{ name: "coordinatorAddress", internalType: "address", type: "address" }], - name: "CoordinatorNotRegistered", - }, - { type: "error", inputs: [], name: "FailedToSendNative" }, - { type: "error", inputs: [], name: "FailedToTransferLink" }, - { - type: "error", - inputs: [ - { name: "have", internalType: "uint32", type: "uint32" }, - { name: "want", internalType: "uint32", type: "uint32" }, - ], - name: "GasLimitTooBig", - }, - { - type: "error", - inputs: [ - { name: "gasPrice", internalType: "uint256", type: "uint256" }, - { name: "maxGas", internalType: "uint256", type: "uint256" }, - ], - name: "GasPriceExceeded", - }, - { type: "error", inputs: [], name: "IncorrectCommitment" }, - { type: "error", inputs: [], name: "IndexOutOfRange" }, - { type: "error", inputs: [], name: "InsufficientBalance" }, - { type: "error", inputs: [], name: "InvalidCalldata" }, - { - type: "error", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "consumer", internalType: "address", type: "address" }, - ], - name: "InvalidConsumer", - }, - { type: "error", inputs: [], name: "InvalidExtraArgsTag" }, - { - type: "error", - inputs: [{ name: "linkWei", internalType: "int256", type: "int256" }], - name: "InvalidLinkWeiPrice", - }, - { - type: "error", - inputs: [ - { name: "premiumPercentage", internalType: "uint8", type: "uint8" }, - { name: "max", internalType: "uint8", type: "uint8" }, - ], - name: "InvalidPremiumPercentage", - }, - { - type: "error", - inputs: [ - { name: "have", internalType: "uint16", type: "uint16" }, - { name: "min", internalType: "uint16", type: "uint16" }, - { name: "max", internalType: "uint16", type: "uint16" }, - ], - name: "InvalidRequestConfirmations", - }, - { type: "error", inputs: [], name: "InvalidSubscription" }, - { type: "error", inputs: [], name: "LinkAlreadySet" }, - { - type: "error", - inputs: [ - { - name: "flatFeeLinkDiscountPPM", - internalType: "uint32", - type: "uint32", - }, - { name: "flatFeeNativePPM", internalType: "uint32", type: "uint32" }, - ], - name: "LinkDiscountTooHigh", - }, - { type: "error", inputs: [], name: "LinkNotSet" }, - { - type: "error", - inputs: [ - { name: "have", internalType: "uint256", type: "uint256" }, - { name: "max", internalType: "uint32", type: "uint32" }, - ], - name: "MsgDataTooBig", - }, - { - type: "error", - inputs: [{ name: "proposedOwner", internalType: "address", type: "address" }], - name: "MustBeRequestedOwner", - }, - { - type: "error", - inputs: [{ name: "owner", internalType: "address", type: "address" }], - name: "MustBeSubOwner", - }, - { type: "error", inputs: [], name: "NoCorrespondingRequest" }, - { - type: "error", - inputs: [{ name: "keyHash", internalType: "bytes32", type: "bytes32" }], - name: "NoSuchProvingKey", - }, - { - type: "error", - inputs: [ - { name: "have", internalType: "uint32", type: "uint32" }, - { name: "want", internalType: "uint32", type: "uint32" }, - ], - name: "NumWordsTooBig", - }, - { type: "error", inputs: [], name: "OnlyCallableFromLink" }, - { type: "error", inputs: [], name: "PaymentTooLarge" }, - { type: "error", inputs: [], name: "PendingRequestExists" }, - { - type: "error", - inputs: [{ name: "keyHash", internalType: "bytes32", type: "bytes32" }], - name: "ProvingKeyAlreadyRegistered", - }, - { type: "error", inputs: [], name: "Reentrant" }, - { type: "error", inputs: [], name: "TooManyConsumers" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "minimumRequestConfirmations", - internalType: "uint16", - type: "uint16", - indexed: false, - }, - { - name: "maxGasLimit", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "stalenessSeconds", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "gasAfterPaymentCalculation", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "fallbackWeiPerUnitLink", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "fulfillmentFlatFeeNativePPM", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "fulfillmentFlatFeeLinkDiscountPPM", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "nativePremiumPercentage", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - { - name: "linkPremiumPercentage", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "ConfigSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "coordinatorAddress", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "CoordinatorDeregistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "coordinatorAddress", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "CoordinatorRegistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "fallbackWeiPerUnitLink", - internalType: "int256", - type: "int256", - indexed: false, - }, - ], - name: "FallbackWeiPerUnitLinkUsed", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "to", internalType: "address", type: "address", indexed: false }, - { - name: "amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "FundsRecovered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newCoordinator", - internalType: "address", - type: "address", - indexed: false, - }, - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "MigrationCompleted", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "to", internalType: "address", type: "address", indexed: false }, - { - name: "amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "NativeFundsRecovered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - ], - name: "OwnershipTransferRequested", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - ], - name: "OwnershipTransferred", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "keyHash", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "maxGas", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "ProvingKeyDeregistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "keyHash", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "maxGas", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "ProvingKeyRegistered", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "outputSeed", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "payment", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - { - name: "nativePayment", - internalType: "bool", - type: "bool", - indexed: false, - }, - { name: "success", internalType: "bool", type: "bool", indexed: false }, - { - name: "onlyPremium", - internalType: "bool", - type: "bool", - indexed: false, - }, - ], - name: "RandomWordsFulfilled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "keyHash", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "requestId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "preSeed", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "minimumRequestConfirmations", - internalType: "uint16", - type: "uint16", - indexed: false, - }, - { - name: "callbackGasLimit", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "numWords", - internalType: "uint32", - type: "uint32", - indexed: false, - }, - { - name: "extraArgs", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - { - name: "sender", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "RandomWordsRequested", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { name: "to", internalType: "address", type: "address", indexed: false }, - { - name: "amountLink", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "amountNative", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "SubscriptionCanceled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "consumer", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "SubscriptionConsumerAdded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "consumer", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "SubscriptionConsumerRemoved", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "owner", - internalType: "address", - type: "address", - indexed: false, - }, - ], - name: "SubscriptionCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "oldBalance", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "newBalance", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "SubscriptionFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "oldNativeBalance", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "newNativeBalance", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "SubscriptionFundedWithNative", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "from", - internalType: "address", - type: "address", - indexed: false, - }, - { name: "to", internalType: "address", type: "address", indexed: false }, - ], - name: "SubscriptionOwnerTransferRequested", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "subId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "from", - internalType: "address", - type: "address", - indexed: false, - }, - { name: "to", internalType: "address", type: "address", indexed: false }, - ], - name: "SubscriptionOwnerTransferred", - }, - { - type: "function", - inputs: [], - name: "BLOCKHASH_STORE", - outputs: [ - { - name: "", - internalType: "contract BlockhashStoreInterface", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LINK", - outputs: [ - { - name: "", - internalType: "contract LinkTokenInterface", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LINK_NATIVE_FEED", - outputs: [ - { - name: "", - internalType: "contract AggregatorV3Interface", - type: "address", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_CONSUMERS", - outputs: [{ name: "", internalType: "uint16", type: "uint16" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_NUM_WORDS", - outputs: [{ name: "", internalType: "uint32", type: "uint32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_REQUEST_CONFIRMATIONS", - outputs: [{ name: "", internalType: "uint16", type: "uint16" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "acceptOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "acceptSubscriptionOwnerTransfer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "consumer", internalType: "address", type: "address" }, - ], - name: "addConsumer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "to", internalType: "address", type: "address" }, - ], - name: "cancelSubscription", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "createSubscription", - outputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "target", internalType: "address", type: "address" }], - name: "deregisterMigratableCoordinator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "publicProvingKey", - internalType: "uint256[2]", - type: "uint256[2]", - }, - ], - name: "deregisterProvingKey", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "proof", - internalType: "struct VRF.Proof", - type: "tuple", - components: [ - { name: "pk", internalType: "uint256[2]", type: "uint256[2]" }, - { name: "gamma", internalType: "uint256[2]", type: "uint256[2]" }, - { name: "c", internalType: "uint256", type: "uint256" }, - { name: "s", internalType: "uint256", type: "uint256" }, - { name: "seed", internalType: "uint256", type: "uint256" }, - { name: "uWitness", internalType: "address", type: "address" }, - { - name: "cGammaWitness", - internalType: "uint256[2]", - type: "uint256[2]", - }, - { - name: "sHashWitness", - internalType: "uint256[2]", - type: "uint256[2]", - }, - { name: "zInv", internalType: "uint256", type: "uint256" }, - ], - }, - { - name: "rc", - internalType: "struct VRFTypes.RequestCommitmentV2Plus", - type: "tuple", - components: [ - { name: "blockNum", internalType: "uint64", type: "uint64" }, - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "callbackGasLimit", internalType: "uint32", type: "uint32" }, - { name: "numWords", internalType: "uint32", type: "uint32" }, - { name: "sender", internalType: "address", type: "address" }, - { name: "extraArgs", internalType: "bytes", type: "bytes" }, - ], - }, - { name: "onlyPremium", internalType: "bool", type: "bool" }, - ], - name: "fulfillRandomWords", - outputs: [{ name: "payment", internalType: "uint96", type: "uint96" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "fundSubscriptionWithNative", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "startIndex", internalType: "uint256", type: "uint256" }, - { name: "maxCount", internalType: "uint256", type: "uint256" }, - ], - name: "getActiveSubscriptionIds", - outputs: [{ name: "ids", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "getSubscription", - outputs: [ - { name: "balance", internalType: "uint96", type: "uint96" }, - { name: "nativeBalance", internalType: "uint96", type: "uint96" }, - { name: "reqCount", internalType: "uint64", type: "uint64" }, - { name: "subOwner", internalType: "address", type: "address" }, - { name: "consumers", internalType: "address[]", type: "address[]" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "publicKey", internalType: "uint256[2]", type: "uint256[2]" }], - name: "hashOfKey", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "newCoordinator", internalType: "address", type: "address" }, - ], - name: "migrate", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "onTokenTransfer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "owner", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "ownerCancelSubscription", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "subId", internalType: "uint256", type: "uint256" }], - name: "pendingRequestExists", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address", type: "address" }], - name: "recoverFunds", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address payable", type: "address" }], - name: "recoverNativeFunds", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "target", internalType: "address", type: "address" }], - name: "registerMigratableCoordinator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "publicProvingKey", - internalType: "uint256[2]", - type: "uint256[2]", - }, - { name: "maxGas", internalType: "uint64", type: "uint64" }, - ], - name: "registerProvingKey", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "consumer", internalType: "address", type: "address" }, - ], - name: "removeConsumer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "req", - internalType: "struct VRFV2PlusClient.RandomWordsRequest", - type: "tuple", - components: [ - { name: "keyHash", internalType: "bytes32", type: "bytes32" }, - { name: "subId", internalType: "uint256", type: "uint256" }, - { - name: "requestConfirmations", - internalType: "uint16", - type: "uint16", - }, - { name: "callbackGasLimit", internalType: "uint32", type: "uint32" }, - { name: "numWords", internalType: "uint32", type: "uint32" }, - { name: "extraArgs", internalType: "bytes", type: "bytes" }, - ], - }, - ], - name: "requestRandomWords", - outputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "subId", internalType: "uint256", type: "uint256" }, - { name: "newOwner", internalType: "address", type: "address" }, - ], - name: "requestSubscriptionOwnerTransfer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "s_config", - outputs: [ - { - name: "minimumRequestConfirmations", - internalType: "uint16", - type: "uint16", - }, - { name: "maxGasLimit", internalType: "uint32", type: "uint32" }, - { name: "reentrancyLock", internalType: "bool", type: "bool" }, - { name: "stalenessSeconds", internalType: "uint32", type: "uint32" }, - { - name: "gasAfterPaymentCalculation", - internalType: "uint32", - type: "uint32", - }, - { - name: "fulfillmentFlatFeeNativePPM", - internalType: "uint32", - type: "uint32", - }, - { - name: "fulfillmentFlatFeeLinkDiscountPPM", - internalType: "uint32", - type: "uint32", - }, - { name: "nativePremiumPercentage", internalType: "uint8", type: "uint8" }, - { name: "linkPremiumPercentage", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "s_currentSubNonce", - outputs: [{ name: "", internalType: "uint64", type: "uint64" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "s_fallbackWeiPerUnitLink", - outputs: [{ name: "", internalType: "int256", type: "int256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "s_provingKeyHashes", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "s_provingKeys", - outputs: [ - { name: "exists", internalType: "bool", type: "bool" }, - { name: "maxGas", internalType: "uint64", type: "uint64" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "s_requestCommitments", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "s_totalBalance", - outputs: [{ name: "", internalType: "uint96", type: "uint96" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "s_totalNativeBalance", - outputs: [{ name: "", internalType: "uint96", type: "uint96" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "minimumRequestConfirmations", - internalType: "uint16", - type: "uint16", - }, - { name: "maxGasLimit", internalType: "uint32", type: "uint32" }, - { name: "stalenessSeconds", internalType: "uint32", type: "uint32" }, - { - name: "gasAfterPaymentCalculation", - internalType: "uint32", - type: "uint32", - }, - { - name: "fallbackWeiPerUnitLink", - internalType: "int256", - type: "int256", - }, - { - name: "fulfillmentFlatFeeNativePPM", - internalType: "uint32", - type: "uint32", - }, - { - name: "fulfillmentFlatFeeLinkDiscountPPM", - internalType: "uint32", - type: "uint32", - }, - { name: "nativePremiumPercentage", internalType: "uint8", type: "uint8" }, - { name: "linkPremiumPercentage", internalType: "uint8", type: "uint8" }, - ], - name: "setConfig", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "link", internalType: "address", type: "address" }, - { name: "linkNativeFeed", internalType: "address", type: "address" }, - ], - name: "setLINKAndLINKNativeFeed", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "to", internalType: "address", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "recipient", internalType: "address", type: "address" }], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "recipient", internalType: "address payable", type: "address" }], - name: "withdrawNative", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5CE8D5A2BC84beb22a398CCA51996F7930313D61) - */ -export const chainlinkVrfCoordinatorAddress = { - 421614: "0x5CE8D5A2BC84beb22a398CCA51996F7930313D61", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x5CE8D5A2BC84beb22a398CCA51996F7930313D61) - */ -export const chainlinkVrfCoordinatorConfig = { - address: chainlinkVrfCoordinatorAddress, - abi: chainlinkVrfCoordinatorAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DAI -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xc34aeFEa232956542C5b2f2EE55fD5c378B35c03) - */ -export const daiAbi = [ - { - type: "constructor", - inputs: [ - { name: "_name", internalType: "string", type: "string" }, - { name: "_symbol", internalType: "string", type: "string" }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xc34aeFEa232956542C5b2f2EE55fD5c378B35c03) - */ -export const daiAddress = { - 421614: "0xc34aeFEa232956542C5b2f2EE55fD5c378B35c03", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xc34aeFEa232956542C5b2f2EE55fD5c378B35c03) - */ -export const daiConfig = { address: daiAddress, abi: daiAbi } as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DAIFaucet -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x1Fa58B52326488D62A406E71DBaD839560e810fF) - */ -export const daiFaucetAbi = [ - { - type: "constructor", - inputs: [{ name: "_token", internalType: "contract IERC20", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "amount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "balance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_amount", internalType: "uint256", type: "uint256" }], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "token", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "withdrewAlready", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x1Fa58B52326488D62A406E71DBaD839560e810fF) - */ -export const daiFaucetAddress = { - 421614: "0x1Fa58B52326488D62A406E71DBaD839560e810fF", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x1Fa58B52326488D62A406E71DBaD839560e810fF) - */ -export const daiFaucetConfig = { - address: daiFaucetAddress, - abi: daiFaucetAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitClassic -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94) - */ -export const disputeKitClassicAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94) - */ -export const disputeKitClassicAddress = { - 421614: "0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94) - */ -export const disputeKitClassicConfig = { - address: disputeKitClassicAddress, - abi: disputeKitClassicAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitClassic_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA122856B3B4C5fBcA129088af3CEb204509805f0) - */ -export const disputeKitClassicImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA122856B3B4C5fBcA129088af3CEb204509805f0) - */ -export const disputeKitClassicImplementationAddress = { - 421614: "0xA122856B3B4C5fBcA129088af3CEb204509805f0", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA122856B3B4C5fBcA129088af3CEb204509805f0) - */ -export const disputeKitClassicImplementationConfig = { - address: disputeKitClassicImplementationAddress, - abi: disputeKitClassicImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitClassic_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94) - */ -export const disputeKitClassicProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94) - */ -export const disputeKitClassicProxyAddress = { - 421614: "0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0c38f115D001d3b5bBec5e8D44f78C7B61A27D94) - */ -export const disputeKitClassicProxyConfig = { - address: disputeKitClassicProxyAddress, - abi: disputeKitClassicProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGated -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed) - */ -export const disputeKitGatedAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "extraDataToTokenInfo", - outputs: [ - { name: "tokenGate", internalType: "address", type: "address" }, - { name: "isERC1155", internalType: "bool", type: "bool" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed) - */ -export const disputeKitGatedAddress = { - 421614: "0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed) - */ -export const disputeKitGatedConfig = { - address: disputeKitGatedAddress, - abi: disputeKitGatedAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGatedShutter -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x936231010462458ebaA45dDc422A5940C08a474C) - */ -export const disputeKitGatedShutterAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "_identity", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_encryptedVote", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CommitCastShutter", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - { name: "_identity", internalType: "bytes32", type: "bytes32" }, - { name: "_encryptedVote", internalType: "bytes", type: "bytes" }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x936231010462458ebaA45dDc422A5940C08a474C) - */ -export const disputeKitGatedShutterAddress = { - 421614: "0x936231010462458ebaA45dDc422A5940C08a474C", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x936231010462458ebaA45dDc422A5940C08a474C) - */ -export const disputeKitGatedShutterConfig = { - address: disputeKitGatedShutterAddress, - abi: disputeKitGatedShutterAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGatedShutter_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x3a06272f2FEEC12B0FB5F3FF82688c0F06808bE7) - */ -export const disputeKitGatedShutterImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "_identity", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_encryptedVote", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CommitCastShutter", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - { name: "_identity", internalType: "bytes32", type: "bytes32" }, - { name: "_encryptedVote", internalType: "bytes", type: "bytes" }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x3a06272f2FEEC12B0FB5F3FF82688c0F06808bE7) - */ -export const disputeKitGatedShutterImplementationAddress = { - 421614: "0x3a06272f2FEEC12B0FB5F3FF82688c0F06808bE7", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x3a06272f2FEEC12B0FB5F3FF82688c0F06808bE7) - */ -export const disputeKitGatedShutterImplementationConfig = { - address: disputeKitGatedShutterImplementationAddress, - abi: disputeKitGatedShutterImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGatedShutter_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x936231010462458ebaA45dDc422A5940C08a474C) - */ -export const disputeKitGatedShutterProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x936231010462458ebaA45dDc422A5940C08a474C) - */ -export const disputeKitGatedShutterProxyAddress = { - 421614: "0x936231010462458ebaA45dDc422A5940C08a474C", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x936231010462458ebaA45dDc422A5940C08a474C) - */ -export const disputeKitGatedShutterProxyConfig = { - address: disputeKitGatedShutterProxyAddress, - abi: disputeKitGatedShutterProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGated_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x2d1b63C9638ed62875256676C665a7ec14D7663C) - */ -export const disputeKitGatedImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "extraDataToTokenInfo", - outputs: [ - { name: "tokenGate", internalType: "address", type: "address" }, - { name: "isERC1155", internalType: "bool", type: "bool" }, - { name: "tokenId", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x2d1b63C9638ed62875256676C665a7ec14D7663C) - */ -export const disputeKitGatedImplementationAddress = { - 421614: "0x2d1b63C9638ed62875256676C665a7ec14D7663C", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x2d1b63C9638ed62875256676C665a7ec14D7663C) - */ -export const disputeKitGatedImplementationConfig = { - address: disputeKitGatedImplementationAddress, - abi: disputeKitGatedImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitGated_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed) - */ -export const disputeKitGatedProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed) - */ -export const disputeKitGatedProxyAddress = { - 421614: "0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xfc8E5cabC8D01fd555Ee77dcE16d718678f4F6Ed) - */ -export const disputeKitGatedProxyConfig = { - address: disputeKitGatedProxyAddress, - abi: disputeKitGatedProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitShutter -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa) - */ -export const disputeKitShutterAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "_identity", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_encryptedVote", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CommitCastShutter", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - { name: "_identity", internalType: "bytes32", type: "bytes32" }, - { name: "_encryptedVote", internalType: "bytes", type: "bytes" }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa) - */ -export const disputeKitShutterAddress = { - 421614: "0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa) - */ -export const disputeKitShutterConfig = { - address: disputeKitShutterAddress, - abi: disputeKitShutterAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitShutter_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xca04F97fc0Df83E25e585893F5A12fb0AebEC27d) - */ -export const disputeKitShutterImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - ], - name: "ChoiceFunded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - ], - name: "CommitCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_commit", - internalType: "bytes32", - type: "bytes32", - indexed: true, - }, - { - name: "_identity", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_encryptedVote", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CommitCastShutter", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Contribution", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_numberOfChoices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_juror", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_voteIDs", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_justification", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "VoteCast", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_coreDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_coreRoundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choice", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_contributor", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Withdrawal", - }, - { - type: "function", - inputs: [], - name: "LOSER_APPEAL_PERIOD_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "LOSER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "ONE_BASIS_POINT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "WINNER_STAKE_MULTIPLIER", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - { name: "drawnAddress", internalType: "address", type: "address" }, - ], - name: "alreadyDrawn", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areCommitsAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "areVotesAllCast", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - ], - name: "castCommit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_commit", internalType: "bytes32", type: "bytes32" }, - { name: "_identity", internalType: "bytes32", type: "bytes32" }, - { name: "_encryptedVote", internalType: "bytes", type: "bytes" }, - ], - name: "castCommitShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_voteIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "castVoteShutter", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "address", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "coreDisputeIDToLocal", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_nbVotes", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "jumped", internalType: "bool", type: "bool" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "fundAppeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getCoherentCount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "getDegreeOfCoherence", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "getFundedChoices", - outputs: [{ name: "fundedChoices", internalType: "uint256[]", type: "uint256[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - ], - name: "getLocalDisputeRoundID", - outputs: [ - { name: "localDisputeID", internalType: "uint256", type: "uint256" }, - { name: "localRoundID", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_localDisputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "totalVoted", internalType: "uint256", type: "uint256" }, - { name: "totalCommited", internalType: "uint256", type: "uint256" }, - { name: "nbVoters", internalType: "uint256", type: "uint256" }, - { name: "choiceCount", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteInfo", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_choice", internalType: "uint256", type: "uint256" }, - { name: "_salt", internalType: "uint256", type: "uint256" }, - { name: "_justification", internalType: "string", type: "string" }, - ], - name: "hashVote", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_coreDisputeID", internalType: "uint256", type: "uint256" }], - name: "isAppealFunded", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "isVoteActive", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "singleDrawPerJuror", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { - name: "_beneficiary", - internalType: "address payable", - type: "address", - }, - { name: "_coreRoundID", internalType: "uint256", type: "uint256" }, - { name: "_choice", internalType: "uint256", type: "uint256" }, - ], - name: "withdrawFeesAndRewards", - outputs: [{ name: "amount", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xca04F97fc0Df83E25e585893F5A12fb0AebEC27d) - */ -export const disputeKitShutterImplementationAddress = { - 421614: "0xca04F97fc0Df83E25e585893F5A12fb0AebEC27d", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xca04F97fc0Df83E25e585893F5A12fb0AebEC27d) - */ -export const disputeKitShutterImplementationConfig = { - address: disputeKitShutterImplementationAddress, - abi: disputeKitShutterImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeKitShutter_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa) - */ -export const disputeKitShutterProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa) - */ -export const disputeKitShutterProxyAddress = { - 421614: "0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x87445ca2C09978Dc8F8d7e79c59791b1B3B1CFaa) - */ -export const disputeKitShutterProxyConfig = { - address: disputeKitShutterProxyAddress, - abi: disputeKitShutterProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeResolver -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x5f79737f65320bA12440aA88087281cC8e71A781) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xed31bEE8b1F7cE89E93033C0d3B2ccF4cEb27652) - */ -export const disputeResolverAbi = [ - { - type: "constructor", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeRequest", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "function", - inputs: [], - name: "arbitrator", - outputs: [{ name: "", internalType: "contract IArbitratorV2", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "arbitratorDisputeIDToLocalID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - }, - ], - name: "changeArbitrator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_templateRegistry", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - name: "changeTemplateRegistry", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "_disputeTemplate", internalType: "string", type: "string" }, - { - name: "_disputeTemplateDataMappings", - internalType: "string", - type: "string", - }, - { - name: "_numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - name: "createDisputeForTemplate", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "_disputeTemplateUri", internalType: "string", type: "string" }, - { - name: "_numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - name: "createDisputeForTemplateUri", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "arbitratorExtraData", internalType: "bytes", type: "bytes" }, - { name: "isRuled", internalType: "bool", type: "bool" }, - { name: "ruling", internalType: "uint256", type: "uint256" }, - { - name: "numberOfRulingOptions", - internalType: "uint256", - type: "uint256", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templateRegistry", - outputs: [ - { - name: "", - internalType: "contract IDisputeTemplateRegistry", - type: "address", - }, - ], - stateMutability: "view", - }, -] as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x5f79737f65320bA12440aA88087281cC8e71A781) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xed31bEE8b1F7cE89E93033C0d3B2ccF4cEb27652) - */ -export const disputeResolverAddress = { - 10200: "0x5f79737f65320bA12440aA88087281cC8e71A781", - 421614: "0xed31bEE8b1F7cE89E93033C0d3B2ccF4cEb27652", -} as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x5f79737f65320bA12440aA88087281cC8e71A781) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xed31bEE8b1F7cE89E93033C0d3B2ccF4cEb27652) - */ -export const disputeResolverConfig = { - address: disputeResolverAddress, - abi: disputeResolverAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeTemplateRegistry -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xA55D4b90c1F8D1fD0408232bF6FA498dD6786385) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xe763d31Cb096B4bc7294012B78FC7F148324ebcb) - */ -export const disputeTemplateRegistryAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_templateTag", - internalType: "string", - type: "string", - indexed: true, - }, - { - name: "_templateData", - internalType: "string", - type: "string", - indexed: false, - }, - { - name: "_templateDataMappings", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeTemplate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_templateTag", internalType: "string", type: "string" }, - { name: "_templateData", internalType: "string", type: "string" }, - { name: "_templateDataMappings", internalType: "string", type: "string" }, - ], - name: "setDisputeTemplate", - outputs: [{ name: "templateId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templates", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xA55D4b90c1F8D1fD0408232bF6FA498dD6786385) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xe763d31Cb096B4bc7294012B78FC7F148324ebcb) - */ -export const disputeTemplateRegistryAddress = { - 10200: "0xA55D4b90c1F8D1fD0408232bF6FA498dD6786385", - 421614: "0xe763d31Cb096B4bc7294012B78FC7F148324ebcb", -} as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xA55D4b90c1F8D1fD0408232bF6FA498dD6786385) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xe763d31Cb096B4bc7294012B78FC7F148324ebcb) - */ -export const disputeTemplateRegistryConfig = { - address: disputeTemplateRegistryAddress, - abi: disputeTemplateRegistryAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeTemplateRegistry_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xf97791DA66e0A8Ff8Ee4908872CfCAcc641829Ec) - */ -export const disputeTemplateRegistryImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_templateTag", - internalType: "string", - type: "string", - indexed: true, - }, - { - name: "_templateData", - internalType: "string", - type: "string", - indexed: false, - }, - { - name: "_templateDataMappings", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeTemplate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_templateTag", internalType: "string", type: "string" }, - { name: "_templateData", internalType: "string", type: "string" }, - { name: "_templateDataMappings", internalType: "string", type: "string" }, - ], - name: "setDisputeTemplate", - outputs: [{ name: "templateId", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "templates", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xf97791DA66e0A8Ff8Ee4908872CfCAcc641829Ec) - */ -export const disputeTemplateRegistryImplementationAddress = { - 421614: "0xf97791DA66e0A8Ff8Ee4908872CfCAcc641829Ec", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xf97791DA66e0A8Ff8Ee4908872CfCAcc641829Ec) - */ -export const disputeTemplateRegistryImplementationConfig = { - address: disputeTemplateRegistryImplementationAddress, - abi: disputeTemplateRegistryImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// DisputeTemplateRegistry_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xe763d31Cb096B4bc7294012B78FC7F148324ebcb) - */ -export const disputeTemplateRegistryProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xe763d31Cb096B4bc7294012B78FC7F148324ebcb) - */ -export const disputeTemplateRegistryProxyAddress = { - 421614: "0xe763d31Cb096B4bc7294012B78FC7F148324ebcb", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xe763d31Cb096B4bc7294012B78FC7F148324ebcb) - */ -export const disputeTemplateRegistryProxyConfig = { - address: disputeTemplateRegistryProxyAddress, - abi: disputeTemplateRegistryProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// EvidenceModule -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397) - */ -export const evidenceModuleAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_party", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_evidence", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "Evidence", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_externalDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_evidence", internalType: "string", type: "string" }, - ], - name: "submitEvidence", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397) - */ -export const evidenceModuleAddress = { - 421614: "0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397) - */ -export const evidenceModuleConfig = { - address: evidenceModuleAddress, - abi: evidenceModuleAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// EvidenceModule_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xC4e64e6E949936a18269937FC1e18cb11E3db14D) - */ -export const evidenceModuleImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_party", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_evidence", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "Evidence", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_externalDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_evidence", internalType: "string", type: "string" }, - ], - name: "submitEvidence", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xC4e64e6E949936a18269937FC1e18cb11E3db14D) - */ -export const evidenceModuleImplementationAddress = { - 421614: "0xC4e64e6E949936a18269937FC1e18cb11E3db14D", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xC4e64e6E949936a18269937FC1e18cb11E3db14D) - */ -export const evidenceModuleImplementationConfig = { - address: evidenceModuleImplementationAddress, - abi: evidenceModuleImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// EvidenceModule_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397) - */ -export const evidenceModuleProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397) - */ -export const evidenceModuleProxyAddress = { - 421614: "0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xA88A9a25cE7f1d8b3941dA3b322Ba91D009E1397) - */ -export const evidenceModuleProxyConfig = { - address: evidenceModuleProxyAddress, - abi: evidenceModuleProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ForeignGatewayOnGnosis -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x2824bdcc752b1272D56A84be03A74Ee856C06e43) - */ -export const foreignGatewayOnGnosisAbi = [ - { - type: "constructor", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_veaOutbox", internalType: "address", type: "address" }, - { name: "_homeChainID", internalType: "uint256", type: "uint256" }, - { name: "_homeGateway", internalType: "address", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "ArbitrationCostModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_foreignBlockHash", - internalType: "bytes32", - type: "bytes32", - indexed: false, - }, - { - name: "_foreignArbitrable", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_foreignDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_choices", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_extraData", - internalType: "bytes", - type: "bytes", - indexed: false, - }, - ], - name: "CrossChainDisputeOutgoing", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "function", - inputs: [], - name: "DEFAULT_NB_OF_JURORS", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "bytes", type: "bytes" }, - { name: "", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - ], - name: "changeCourtJurorFee", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_homeGateway", internalType: "address", type: "address" }], - name: "changeHomeGateway", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_veaOutbox", internalType: "address", type: "address" }, - { name: "_gracePeriod", internalType: "uint256", type: "uint256" }, - ], - name: "changeVea", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_choices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bytes", type: "bytes" }, - { name: "", internalType: "contract IERC20", type: "address" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "pure", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "bool", type: "bool" }, - { name: "", internalType: "bool", type: "bool" }, - ], - stateMutability: "pure", - }, - { - type: "function", - inputs: [], - name: "deprecatedVeaOutbox", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "deprecatedVeaOutboxExpiration", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeHash", internalType: "bytes32", type: "bytes32" }], - name: "disputeHashToForeignID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - name: "disputeHashtoDisputeData", - outputs: [ - { name: "id", internalType: "uint248", type: "uint248" }, - { name: "ruled", internalType: "bool", type: "bool" }, - { name: "arbitrable", internalType: "address", type: "address" }, - { name: "paid", internalType: "uint256", type: "uint256" }, - { name: "relayer", internalType: "address", type: "address" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint96", type: "uint96" }], - name: "feeForJuror", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "homeChainID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "homeGateway", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_messageSender", internalType: "address", type: "address" }, - { name: "_disputeHash", internalType: "bytes32", type: "bytes32" }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - { name: "_relayer", internalType: "address", type: "address" }, - ], - name: "relayRule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "senderGateway", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "veaOutbox", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeHash", internalType: "bytes32", type: "bytes32" }], - name: "withdrawFees", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x2824bdcc752b1272D56A84be03A74Ee856C06e43) - */ -export const foreignGatewayOnGnosisAddress = { - 10200: "0x2824bdcc752b1272D56A84be03A74Ee856C06e43", -} as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x2824bdcc752b1272D56A84be03A74Ee856C06e43) - */ -export const foreignGatewayOnGnosisConfig = { - address: foreignGatewayOnGnosisAddress, - abi: foreignGatewayOnGnosisAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// IHomeGateway -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -export const iHomeGatewayAbi = [ - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: false, - }, - { - name: "_arbitrableChainId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_arbitrable", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_arbitrableDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "CrossChainDisputeIncoming", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_arbitratorDisputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_externalDisputeID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateId", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_templateUri", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "DisputeRequest", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrator", - internalType: "contract IArbitratorV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "function", - inputs: [{ name: "_disputeHash", internalType: "bytes32", type: "bytes32" }], - name: "disputeHashToHomeID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "feeToken", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "foreignChainID", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "foreignGateway", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "receiverGateway", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_params", - internalType: "struct IHomeGateway.RelayCreateDisputeParams", - type: "tuple", - components: [ - { - name: "foreignBlockHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "foreignChainID", internalType: "uint256", type: "uint256" }, - { - name: "foreignArbitrable", - internalType: "address", - type: "address", - }, - { - name: "foreignDisputeID", - internalType: "uint256", - type: "uint256", - }, - { - name: "externalDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "templateId", internalType: "uint256", type: "uint256" }, - { name: "templateUri", internalType: "string", type: "string" }, - { name: "choices", internalType: "uint256", type: "uint256" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "relayCreateDispute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_params", - internalType: "struct IHomeGateway.RelayCreateDisputeParams", - type: "tuple", - components: [ - { - name: "foreignBlockHash", - internalType: "bytes32", - type: "bytes32", - }, - { name: "foreignChainID", internalType: "uint256", type: "uint256" }, - { - name: "foreignArbitrable", - internalType: "address", - type: "address", - }, - { - name: "foreignDisputeID", - internalType: "uint256", - type: "uint256", - }, - { - name: "externalDisputeID", - internalType: "uint256", - type: "uint256", - }, - { name: "templateId", internalType: "uint256", type: "uint256" }, - { name: "templateUri", internalType: "string", type: "string" }, - { name: "choices", internalType: "uint256", type: "uint256" }, - { name: "extraData", internalType: "bytes", type: "bytes" }, - ], - }, - ], - name: "relayCreateDispute", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "veaInbox", - outputs: [{ name: "", internalType: "contract IVeaInbox", type: "address" }], - stateMutability: "view", - }, -] as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCore -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479) - */ -export const klerosCoreAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "AppealFeesNotEnough" }, - { type: "error", inputs: [], name: "AppealPeriodNotPassed" }, - { type: "error", inputs: [], name: "ArbitrationFeesNotEnough" }, - { type: "error", inputs: [], name: "CannotDisableClassicDK" }, - { type: "error", inputs: [], name: "CommitPeriodNotPassed" }, - { type: "error", inputs: [], name: "DisputeKitNotSupportedByCourt" }, - { type: "error", inputs: [], name: "DisputeKitOnly" }, - { type: "error", inputs: [], name: "DisputeNotAppealable" }, - { type: "error", inputs: [], name: "DisputePeriodIsFinal" }, - { type: "error", inputs: [], name: "DisputeStillDrawing" }, - { type: "error", inputs: [], name: "EvidenceNotPassedAndNotAppeal" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { type: "error", inputs: [], name: "GovernorOnly" }, - { type: "error", inputs: [], name: "GuardianOrGovernorOnly" }, - { type: "error", inputs: [], name: "InvalidDisputKitParent" }, - { type: "error", inputs: [], name: "InvalidForkingCourtAsParent" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "MinStakeLowerThanParentCourt" }, - { type: "error", inputs: [], name: "MustSupportDisputeKitClassic" }, - { type: "error", inputs: [], name: "NotEvidencePeriod" }, - { type: "error", inputs: [], name: "NotExecutionPeriod" }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "RulingAlreadyExecuted" }, - { type: "error", inputs: [], name: "SortitionModuleOnly" }, - { type: "error", inputs: [], name: "StakingInTooManyCourts" }, - { type: "error", inputs: [], name: "StakingLessThanCourtMinStake" }, - { type: "error", inputs: [], name: "StakingNotPossibleInThisCourt" }, - { type: "error", inputs: [], name: "StakingTransferFailed" }, - { type: "error", inputs: [], name: "StakingZeroWhenNoStake" }, - { type: "error", inputs: [], name: "TokenNotAccepted" }, - { type: "error", inputs: [], name: "TransferFailed" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { type: "error", inputs: [], name: "UnstakingTransferFailed" }, - { type: "error", inputs: [], name: "UnsuccessfulCall" }, - { type: "error", inputs: [], name: "UnsupportedDisputeKit" }, - { type: "error", inputs: [], name: "VotePeriodNotPassed" }, - { type: "error", inputs: [], name: "WhenNotPausedOnly" }, - { type: "error", inputs: [], name: "WhenPausedOnly" }, - { type: "error", inputs: [], name: "WrongDisputeKitIndex" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealDecision", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealPossible", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_parent", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "CourtCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromCourtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_toCourtID", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - ], - name: "CourtJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - indexed: true, - }, - ], - name: "DisputeKitCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { name: "_enable", internalType: "bool", type: "bool", indexed: true }, - ], - name: "DisputeKitEnabled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_toDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "DisputeKitJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_voteID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Draw", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_pnkAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "LeftoverRewardSent", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum KlerosCoreBase.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { type: "event", anonymous: false, inputs: [], name: "Paused" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_degreeOfCoherency", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_pnkAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { type: "event", anonymous: false, inputs: [], name: "Unpaused" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [ - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealPeriod", - outputs: [ - { name: "start", internalType: "uint256", type: "uint256" }, - { name: "end", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_accepted", internalType: "bool", type: "bool" }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_rateInEth", internalType: "uint64", type: "uint64" }, - { name: "_rateDecimals", internalType: "uint8", type: "uint8" }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_guardian", internalType: "address", type: "address" }], - name: "changeGuardian", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_pinakion", internalType: "contract IERC20", type: "address" }], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_sortitionModule", - internalType: "contract ISortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_toToken", internalType: "contract IERC20", type: "address" }, - { name: "_amountInEth", internalType: "uint256", type: "uint256" }, - ], - name: "convertEthToTokenAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { name: "disabled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - name: "currencyRates", - outputs: [ - { name: "feePaymentAccepted", internalType: "bool", type: "bool" }, - { name: "rateInEth", internalType: "uint64", type: "uint64" }, - { name: "rateDecimals", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputeKits", - outputs: [{ name: "", internalType: "contract IDisputeKit", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "courtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrableV2", - type: "address", - }, - { - name: "period", - internalType: "enum KlerosCoreBase.Period", - type: "uint8", - }, - { name: "ruled", internalType: "bool", type: "bool" }, - { name: "lastPeriodChange", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "nbDrawnJurors", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_enable", internalType: "bool", type: "bool" }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "getDisputeKitsLength", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfVotes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getPnkAtStakePerJuror", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { - name: "", - internalType: "struct KlerosCoreBase.Round", - type: "tuple", - components: [ - { name: "disputeKitID", internalType: "uint256", type: "uint256" }, - { - name: "pnkAtStakePerJuror", - internalType: "uint256", - type: "uint256", - }, - { - name: "totalFeesForJurors", - internalType: "uint256", - type: "uint256", - }, - { name: "nbVotes", internalType: "uint256", type: "uint256" }, - { name: "repartitions", internalType: "uint256", type: "uint256" }, - { name: "pnkPenalties", internalType: "uint256", type: "uint256" }, - { name: "drawnJurors", internalType: "address[]", type: "address[]" }, - { - name: "sumFeeRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "sumPnkRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "feeToken", - internalType: "contract IERC20", - type: "address", - }, - { name: "drawIterations", internalType: "uint256", type: "uint256" }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_courtID", internalType: "uint96", type: "uint96" }], - name: "getTimesPerPeriod", - outputs: [ - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "guardian", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_guardian", internalType: "address", type: "address" }, - { name: "_pinakion", internalType: "contract IERC20", type: "address" }, - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - { - name: "_disputeKit", - internalType: "contract IDisputeKit", - type: "address", - }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_sortitionModuleAddress", - internalType: "contract ISortitionModule", - type: "address", - }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "isDisputeKitJumping", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitID", internalType: "uint256", type: "uint256" }, - ], - name: "isSupported", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "jurorProsecutionModule", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "paused", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "sortitionModule", - outputs: [{ name: "", internalType: "contract ISortitionModule", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479) - */ -export const klerosCoreAddress = { - 421614: "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479) - */ -export const klerosCoreConfig = { - address: klerosCoreAddress, - abi: klerosCoreAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCoreSnapshotProxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd74e61A4dB9C6c3F2C97b62a319aE194f616858C) - */ -export const klerosCoreSnapshotProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract IKlerosCore", type: "address" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "totalStaked", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_core", internalType: "contract IKlerosCore", type: "address" }], - name: "changeCore", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract IKlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd74e61A4dB9C6c3F2C97b62a319aE194f616858C) - */ -export const klerosCoreSnapshotProxyAddress = { - 421614: "0xd74e61A4dB9C6c3F2C97b62a319aE194f616858C", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xd74e61A4dB9C6c3F2C97b62a319aE194f616858C) - */ -export const klerosCoreSnapshotProxyConfig = { - address: klerosCoreSnapshotProxyAddress, - abi: klerosCoreSnapshotProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCore_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x02F607722749CECd32db07AA0b0755281FE9D13c) - */ -export const klerosCoreImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "AppealFeesNotEnough" }, - { type: "error", inputs: [], name: "AppealPeriodNotPassed" }, - { type: "error", inputs: [], name: "ArbitrationFeesNotEnough" }, - { type: "error", inputs: [], name: "CannotDisableClassicDK" }, - { type: "error", inputs: [], name: "CommitPeriodNotPassed" }, - { type: "error", inputs: [], name: "DisputeKitNotSupportedByCourt" }, - { type: "error", inputs: [], name: "DisputeKitOnly" }, - { type: "error", inputs: [], name: "DisputeNotAppealable" }, - { type: "error", inputs: [], name: "DisputePeriodIsFinal" }, - { type: "error", inputs: [], name: "DisputeStillDrawing" }, - { type: "error", inputs: [], name: "EvidenceNotPassedAndNotAppeal" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { type: "error", inputs: [], name: "GovernorOnly" }, - { type: "error", inputs: [], name: "GuardianOrGovernorOnly" }, - { type: "error", inputs: [], name: "InvalidDisputKitParent" }, - { type: "error", inputs: [], name: "InvalidForkingCourtAsParent" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "MinStakeLowerThanParentCourt" }, - { type: "error", inputs: [], name: "MustSupportDisputeKitClassic" }, - { type: "error", inputs: [], name: "NotEvidencePeriod" }, - { type: "error", inputs: [], name: "NotExecutionPeriod" }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "RulingAlreadyExecuted" }, - { type: "error", inputs: [], name: "SortitionModuleOnly" }, - { type: "error", inputs: [], name: "StakingInTooManyCourts" }, - { type: "error", inputs: [], name: "StakingLessThanCourtMinStake" }, - { type: "error", inputs: [], name: "StakingNotPossibleInThisCourt" }, - { type: "error", inputs: [], name: "StakingTransferFailed" }, - { type: "error", inputs: [], name: "StakingZeroWhenNoStake" }, - { type: "error", inputs: [], name: "TokenNotAccepted" }, - { type: "error", inputs: [], name: "TransferFailed" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { type: "error", inputs: [], name: "UnstakingTransferFailed" }, - { type: "error", inputs: [], name: "UnsuccessfulCall" }, - { type: "error", inputs: [], name: "UnsupportedDisputeKit" }, - { type: "error", inputs: [], name: "VotePeriodNotPassed" }, - { type: "error", inputs: [], name: "WhenNotPausedOnly" }, - { type: "error", inputs: [], name: "WhenPausedOnly" }, - { type: "error", inputs: [], name: "WrongDisputeKitIndex" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_token", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { name: "_accepted", internalType: "bool", type: "bool", indexed: true }, - ], - name: "AcceptedFeeToken", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealDecision", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "AppealPossible", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_parent", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - indexed: false, - }, - ], - name: "CourtCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromCourtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_toCourtID", - internalType: "uint96", - type: "uint96", - indexed: false, - }, - ], - name: "CourtJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_hiddenVotes", - internalType: "bool", - type: "bool", - indexed: false, - }, - { - name: "_minStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_alpha", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeForJuror", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_jurorsForCourtJump", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - indexed: false, - }, - ], - name: "CourtModified", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - indexed: true, - }, - ], - name: "DisputeKitCreated", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_disputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { name: "_enable", internalType: "bool", type: "bool", indexed: true }, - ], - name: "DisputeKitEnabled", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_fromDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_toDisputeKitID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "DisputeKitJump", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_voteID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Draw", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_pnkAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "LeftoverRewardSent", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: true, - }, - { - name: "_rateInEth", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - { - name: "_rateDecimals", - internalType: "uint8", - type: "uint8", - indexed: false, - }, - ], - name: "NewCurrencyRate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum KlerosCoreBase.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { type: "event", anonymous: false, inputs: [], name: "Paused" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrableV2", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_roundID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_degreeOfCoherency", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_pnkAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_feeToken", - internalType: "contract IERC20", - type: "address", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { type: "event", anonymous: false, inputs: [], name: "Unpaused" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [ - { - name: "_disputeKitAddress", - internalType: "contract IDisputeKit", - type: "address", - }, - ], - name: "addNewDisputeKit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "appeal", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "appealPeriod", - outputs: [ - { name: "start", internalType: "uint256", type: "uint256" }, - { name: "end", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - ], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_accepted", internalType: "bool", type: "bool" }, - ], - name: "changeAcceptedFeeTokens", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeCourtParameters", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_rateInEth", internalType: "uint64", type: "uint64" }, - { name: "_rateDecimals", internalType: "uint8", type: "uint8" }, - ], - name: "changeCurrencyRates", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address payable", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_guardian", internalType: "address", type: "address" }], - name: "changeGuardian", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - ], - name: "changeJurorProsecutionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_pinakion", internalType: "contract IERC20", type: "address" }], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_sortitionModule", - internalType: "contract ISortitionModule", - type: "address", - }, - ], - name: "changeSortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_toToken", internalType: "contract IERC20", type: "address" }, - { name: "_amountInEth", internalType: "uint256", type: "uint256" }, - ], - name: "convertEthToTokenAmount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { name: "disabled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_supportedDisputeKits", - internalType: "uint256[]", - type: "uint256[]", - }, - ], - name: "createCourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - { name: "_feeToken", internalType: "contract IERC20", type: "address" }, - { name: "_feeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - name: "currencyRates", - outputs: [ - { name: "feePaymentAccepted", internalType: "bool", type: "bool" }, - { name: "rateInEth", internalType: "uint64", type: "uint64" }, - { name: "rateDecimals", internalType: "uint8", type: "uint8" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [ - { name: "ruling", internalType: "uint256", type: "uint256" }, - { name: "tied", internalType: "bool", type: "bool" }, - { name: "overridden", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputeKits", - outputs: [{ name: "", internalType: "contract IDisputeKit", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "courtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrableV2", - type: "address", - }, - { - name: "period", - internalType: "enum KlerosCoreBase.Period", - type: "uint8", - }, - { name: "ruled", internalType: "bool", type: "bool" }, - { name: "lastPeriodChange", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "nbDrawnJurors", internalType: "uint256", type: "uint256" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitIDs", internalType: "uint256[]", type: "uint256[]" }, - { name: "_enable", internalType: "bool", type: "bool" }, - ], - name: "enableDisputeKits", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - { name: "_iterations", internalType: "uint256", type: "uint256" }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "executeRuling", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "getDisputeKitsLength", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfRounds", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getNumberOfVotes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getPnkAtStakePerJuror", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_round", internalType: "uint256", type: "uint256" }, - ], - name: "getRoundInfo", - outputs: [ - { - name: "", - internalType: "struct KlerosCoreBase.Round", - type: "tuple", - components: [ - { name: "disputeKitID", internalType: "uint256", type: "uint256" }, - { - name: "pnkAtStakePerJuror", - internalType: "uint256", - type: "uint256", - }, - { - name: "totalFeesForJurors", - internalType: "uint256", - type: "uint256", - }, - { name: "nbVotes", internalType: "uint256", type: "uint256" }, - { name: "repartitions", internalType: "uint256", type: "uint256" }, - { name: "pnkPenalties", internalType: "uint256", type: "uint256" }, - { name: "drawnJurors", internalType: "address[]", type: "address[]" }, - { - name: "sumFeeRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "sumPnkRewardPaid", - internalType: "uint256", - type: "uint256", - }, - { - name: "feeToken", - internalType: "contract IERC20", - type: "address", - }, - { name: "drawIterations", internalType: "uint256", type: "uint256" }, - ], - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_courtID", internalType: "uint96", type: "uint96" }], - name: "getTimesPerPeriod", - outputs: [ - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "guardian", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_guardian", internalType: "address", type: "address" }, - { name: "_pinakion", internalType: "contract IERC20", type: "address" }, - { - name: "_jurorProsecutionModule", - internalType: "address", - type: "address", - }, - { - name: "_disputeKit", - internalType: "contract IDisputeKit", - type: "address", - }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionExtraData", internalType: "bytes", type: "bytes" }, - { - name: "_sortitionModuleAddress", - internalType: "contract ISortitionModule", - type: "address", - }, - { name: "_wNative", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "isDisputeKitJumping", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_disputeKitID", internalType: "uint256", type: "uint256" }, - ], - name: "isSupported", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "jurorProsecutionModule", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "passPeriod", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "pause", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "paused", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_wNative", internalType: "address", type: "address" }], - name: "reinitialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStakeBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "sortitionModule", - outputs: [{ name: "", internalType: "contract ISortitionModule", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferBySortitionModule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "unpause", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "wNative", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x02F607722749CECd32db07AA0b0755281FE9D13c) - */ -export const klerosCoreImplementationAddress = { - 421614: "0x02F607722749CECd32db07AA0b0755281FE9D13c", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x02F607722749CECd32db07AA0b0755281FE9D13c) - */ -export const klerosCoreImplementationConfig = { - address: klerosCoreImplementationAddress, - abi: klerosCoreImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// KlerosCore_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479) - */ -export const klerosCoreProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479) - */ -export const klerosCoreProxyAddress = { - 421614: "0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xE8442307d36e9bf6aB27F1A009F95CE8E11C3479) - */ -export const klerosCoreProxyConfig = { - address: klerosCoreProxyAddress, - abi: klerosCoreProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PNK -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) - */ -export const pnkAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) - */ -export const pnkAddress = { - 421614: "0x34B944D42cAcfC8266955D07A80181D2054aa225", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) - */ -export const pnkConfig = { address: pnkAddress, abi: pnkAbi } as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PNKFaucet -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x9f6ffc13B685A68ae359fCA128dfE776458Df464) - */ -export const pnkFaucetAbi = [ - { - type: "constructor", - inputs: [{ name: "_token", internalType: "contract IERC20", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "amount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "balance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_amount", internalType: "uint256", type: "uint256" }], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "token", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "withdrewAlready", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x9f6ffc13B685A68ae359fCA128dfE776458Df464) - */ -export const pnkFaucetAddress = { - 421614: "0x9f6ffc13B685A68ae359fCA128dfE776458Df464", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x9f6ffc13B685A68ae359fCA128dfE776458Df464) - */ -export const pnkFaucetConfig = { - address: pnkFaucetAddress, - abi: pnkFaucetAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PinakionV2 -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) - * - [__View Contract on Sepolia Etherscan__](https://sepolia.etherscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5) - */ -export const pinakionV2Abi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) - * - [__View Contract on Sepolia Etherscan__](https://sepolia.etherscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5) - */ -export const pinakionV2Address = { - 421614: "0x34B944D42cAcfC8266955D07A80181D2054aa225", - 11155111: "0x593e89704D285B0c3fbF157c7CF2537456CE64b5", -} as const; - -/** - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225) - * - [__View Contract on Sepolia Etherscan__](https://sepolia.etherscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5) - */ -export const pinakionV2Config = { - address: pinakionV2Address, - abi: pinakionV2Abi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PolicyRegistry -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x2668c46A14af8997417138B064ca1bEB70769585) - */ -export const policyRegistryAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_courtName", - internalType: "string", - type: "string", - indexed: false, - }, - { - name: "_policy", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "PolicyUpdate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "policies", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint256", type: "uint256" }, - { name: "_courtName", internalType: "string", type: "string" }, - { name: "_policy", internalType: "string", type: "string" }, - ], - name: "setPolicy", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x2668c46A14af8997417138B064ca1bEB70769585) - */ -export const policyRegistryAddress = { - 421614: "0x2668c46A14af8997417138B064ca1bEB70769585", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x2668c46A14af8997417138B064ca1bEB70769585) - */ -export const policyRegistryConfig = { - address: policyRegistryAddress, - abi: policyRegistryAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PolicyRegistry_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x7CC8E0787e381aE159C4d3e137f20f9203313D41) - */ -export const policyRegistryImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_courtName", - internalType: "string", - type: "string", - indexed: false, - }, - { - name: "_policy", - internalType: "string", - type: "string", - indexed: false, - }, - ], - name: "PolicyUpdate", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize2", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "policies", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_courtID", internalType: "uint256", type: "uint256" }, - { name: "_courtName", internalType: "string", type: "string" }, - { name: "_policy", internalType: "string", type: "string" }, - ], - name: "setPolicy", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x7CC8E0787e381aE159C4d3e137f20f9203313D41) - */ -export const policyRegistryImplementationAddress = { - 421614: "0x7CC8E0787e381aE159C4d3e137f20f9203313D41", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x7CC8E0787e381aE159C4d3e137f20f9203313D41) - */ -export const policyRegistryImplementationConfig = { - address: policyRegistryImplementationAddress, - abi: policyRegistryImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// PolicyRegistry_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x2668c46A14af8997417138B064ca1bEB70769585) - */ -export const policyRegistryProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x2668c46A14af8997417138B064ca1bEB70769585) - */ -export const policyRegistryProxyAddress = { - 421614: "0x2668c46A14af8997417138B064ca1bEB70769585", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x2668c46A14af8997417138B064ca1bEB70769585) - */ -export const policyRegistryProxyConfig = { - address: policyRegistryProxyAddress, - abi: policyRegistryProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// RandomizerOracle -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b) - */ -export const randomizerOracleAbi = [] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b) - */ -export const randomizerOracleAddress = { - 421614: "0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xE775D7fde1d0D09ae627C0131040012ccBcC4b9b) - */ -export const randomizerOracleConfig = { - address: randomizerOracleAddress, - abi: randomizerOracleAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// RandomizerRNG -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x51a97ad9F0aA818e75819da3cA20CAc319580627) - */ -export const randomizerRngAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "callbackGasLimit", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_randomizer", - internalType: "contract IRandomizer", - type: "address", - }, - { name: "_governor", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - name: "randomNumbers", - outputs: [{ name: "number", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomizer", - outputs: [{ name: "", internalType: "contract IRandomizer", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_id", internalType: "uint256", type: "uint256" }, - { name: "_value", internalType: "bytes32", type: "bytes32" }, - ], - name: "randomizerCallback", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_amount", internalType: "uint256", type: "uint256" }], - name: "randomizerWithdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "receiveRandomness", - outputs: [{ name: "randomNumber", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "requester", internalType: "address", type: "address" }], - name: "requesterToID", - outputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_callbackGasLimit", internalType: "uint256", type: "uint256" }], - name: "setCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_randomizer", internalType: "address", type: "address" }], - name: "setRandomizer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x51a97ad9F0aA818e75819da3cA20CAc319580627) - */ -export const randomizerRngAddress = { - 421614: "0x51a97ad9F0aA818e75819da3cA20CAc319580627", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x51a97ad9F0aA818e75819da3cA20CAc319580627) - */ -export const randomizerRngConfig = { - address: randomizerRngAddress, - abi: randomizerRngAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// RandomizerRNG_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x1237F02bBeFDAEA20cE3A66aCAe458C4106Ae203) - */ -export const randomizerRngImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [], - name: "callbackGasLimit", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_randomizer", - internalType: "contract IRandomizer", - type: "address", - }, - { name: "_governor", internalType: "address", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - name: "randomNumbers", - outputs: [{ name: "number", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomizer", - outputs: [{ name: "", internalType: "contract IRandomizer", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_id", internalType: "uint256", type: "uint256" }, - { name: "_value", internalType: "bytes32", type: "bytes32" }, - ], - name: "randomizerCallback", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_amount", internalType: "uint256", type: "uint256" }], - name: "randomizerWithdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "receiveRandomness", - outputs: [{ name: "randomNumber", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "requestRandomness", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "requester", internalType: "address", type: "address" }], - name: "requesterToID", - outputs: [{ name: "requestId", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_callbackGasLimit", internalType: "uint256", type: "uint256" }], - name: "setCallbackGasLimit", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_randomizer", internalType: "address", type: "address" }], - name: "setRandomizer", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x1237F02bBeFDAEA20cE3A66aCAe458C4106Ae203) - */ -export const randomizerRngImplementationAddress = { - 421614: "0x1237F02bBeFDAEA20cE3A66aCAe458C4106Ae203", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x1237F02bBeFDAEA20cE3A66aCAe458C4106Ae203) - */ -export const randomizerRngImplementationConfig = { - address: randomizerRngImplementationAddress, - abi: randomizerRngImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// RandomizerRNG_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x51a97ad9F0aA818e75819da3cA20CAc319580627) - */ -export const randomizerRngProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x51a97ad9F0aA818e75819da3cA20CAc319580627) - */ -export const randomizerRngProxyAddress = { - 421614: "0x51a97ad9F0aA818e75819da3cA20CAc319580627", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x51a97ad9F0aA818e75819da3cA20CAc319580627) - */ -export const randomizerRngProxyConfig = { - address: randomizerRngProxyAddress, - abi: randomizerRngProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionModule -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD) - */ -export const sortitionModuleAbi = [ - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "LeftoverPNK", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "LeftoverPNKWithdrawn", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_phase", - internalType: "enum ISortitionModule.Phase", - type: "uint8", - indexed: false, - }, - ], - name: "NewPhase", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeDelayed", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_relativeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "_unlock", internalType: "bool", type: "bool", indexed: false }, - ], - name: "StakeLocked", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amountAllCourts", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_minStakingTime", internalType: "uint256", type: "uint256" }], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_rng", internalType: "contract RNG", type: "address" }, - { name: "_rngLookahead", internalType: "uint256", type: "uint256" }, - ], - name: "changeRandomNumberGenerator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "delayedStakeReadIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "delayedStakeWriteIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "delayedStakes", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "courtID", internalType: "uint96", type: "uint96" }, - { name: "stake", internalType: "uint256", type: "uint256" }, - { name: "alreadyTransferred", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "disputesWithoutJurors", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_iterations", internalType: "uint256", type: "uint256" }], - name: "executeDelayedStakes", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "getJurorBalance", - outputs: [ - { name: "totalStaked", internalType: "uint256", type: "uint256" }, - { name: "totalLocked", internalType: "uint256", type: "uint256" }, - { name: "stakedInCourt", internalType: "uint256", type: "uint256" }, - { name: "nbCourts", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorCourtIDs", - outputs: [{ name: "", internalType: "uint96[]", type: "uint96[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorLeftoverPNK", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_minStakingTime", internalType: "uint256", type: "uint256" }, - { name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }, - { name: "_rng", internalType: "contract RNG", type: "address" }, - { name: "_rngLookahead", internalType: "uint256", type: "uint256" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize4", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "isJurorStaked", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "jurors", - outputs: [ - { name: "stakedPnk", internalType: "uint256", type: "uint256" }, - { name: "lockedPnk", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lastPhaseChange", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "jurorAccount", internalType: "address", type: "address" }, - { name: "courtId", internalType: "uint96", type: "uint96" }, - ], - name: "latestDelayedStakeIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "maxDrawingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "minStakingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_randomNumber", internalType: "uint256", type: "uint256" }], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "passPhase", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "penalizeStake", - outputs: [ - { name: "pnkBalance", internalType: "uint256", type: "uint256" }, - { name: "availablePenalty", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "phase", - outputs: [{ name: "", internalType: "enum ISortitionModule.Phase", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomNumber", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomNumberRequestBlock", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "rng", - outputs: [{ name: "", internalType: "contract RNG", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "rngLookahead", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "_pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_ID", internalType: "bytes32", type: "bytes32" }, - ], - name: "stakeOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "stakeOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "validateStake", - outputs: [ - { name: "pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { - name: "stakingResult", - internalType: "enum StakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "withdrawLeftoverPNK", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD) - */ -export const sortitionModuleAddress = { - 421614: "0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD) - */ -export const sortitionModuleConfig = { - address: sortitionModuleAddress, - abi: sortitionModuleAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionModule_Implementation -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0C872eeF07030107b53eaD15bb7dD7E6FBCA2b83) - */ -export const sortitionModuleImplementationAbi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { type: "error", inputs: [], name: "AlreadyInitialized" }, - { type: "error", inputs: [], name: "FailedDelegateCall" }, - { - type: "error", - inputs: [{ name: "implementation", internalType: "address", type: "address" }], - name: "InvalidImplementation", - }, - { type: "error", inputs: [], name: "NotInitializing" }, - { type: "error", inputs: [], name: "UUPSUnauthorizedCallContext" }, - { - type: "error", - inputs: [{ name: "slot", internalType: "bytes32", type: "bytes32" }], - name: "UUPSUnsupportedProxiableUUID", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "version", - internalType: "uint64", - type: "uint64", - indexed: false, - }, - ], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "LeftoverPNK", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_account", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "LeftoverPNKWithdrawn", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_phase", - internalType: "enum ISortitionModule.Phase", - type: "uint8", - indexed: false, - }, - ], - name: "NewPhase", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint96", - type: "uint96", - indexed: true, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeDelayed", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_relativeAmount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { name: "_unlock", internalType: "bool", type: "bool", indexed: false }, - ], - name: "StakeLocked", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_courtID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amount", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_amountAllCourts", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "newImplementation", - internalType: "address", - type: "address", - indexed: true, - }, - ], - name: "Upgraded", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_minStakingTime", internalType: "uint256", type: "uint256" }], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_rng", internalType: "contract RNG", type: "address" }, - { name: "_rngLookahead", internalType: "uint256", type: "uint256" }, - ], - name: "changeRandomNumberGenerator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "core", - outputs: [{ name: "", internalType: "contract KlerosCore", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "createDisputeHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createTree", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "delayedStakeReadIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "delayedStakeWriteIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "delayedStakes", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "courtID", internalType: "uint96", type: "uint96" }, - { name: "stake", internalType: "uint256", type: "uint256" }, - { name: "alreadyTransferred", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "disputesWithoutJurors", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_coreDisputeID", internalType: "uint256", type: "uint256" }, - { name: "_nonce", internalType: "uint256", type: "uint256" }, - ], - name: "draw", - outputs: [{ name: "drawnAddress", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_iterations", internalType: "uint256", type: "uint256" }], - name: "executeDelayedStakes", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "getJurorBalance", - outputs: [ - { name: "totalStaked", internalType: "uint256", type: "uint256" }, - { name: "totalLocked", internalType: "uint256", type: "uint256" }, - { name: "stakedInCourt", internalType: "uint256", type: "uint256" }, - { name: "nbCourts", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorCourtIDs", - outputs: [{ name: "", internalType: "uint96[]", type: "uint96[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "getJurorLeftoverPNK", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { name: "_core", internalType: "contract KlerosCore", type: "address" }, - { name: "_minStakingTime", internalType: "uint256", type: "uint256" }, - { name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }, - { name: "_rng", internalType: "contract RNG", type: "address" }, - { name: "_rngLookahead", internalType: "uint256", type: "uint256" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "initialize4", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_juror", internalType: "address", type: "address" }], - name: "isJurorStaked", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "jurors", - outputs: [ - { name: "stakedPnk", internalType: "uint256", type: "uint256" }, - { name: "lockedPnk", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lastPhaseChange", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "jurorAccount", internalType: "address", type: "address" }, - { name: "courtId", internalType: "uint96", type: "uint96" }, - ], - name: "latestDelayedStakeIndex", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "lockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "maxDrawingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "minStakingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_randomNumber", internalType: "uint256", type: "uint256" }], - name: "notifyRandomNumber", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "passPhase", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "penalizeStake", - outputs: [ - { name: "pnkBalance", internalType: "uint256", type: "uint256" }, - { name: "availablePenalty", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "phase", - outputs: [{ name: "", internalType: "enum ISortitionModule.Phase", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "", internalType: "uint256", type: "uint256" }, - { name: "", internalType: "uint256", type: "uint256" }, - ], - name: "postDrawHook", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "proxiableUUID", - outputs: [{ name: "", internalType: "bytes32", type: "bytes32" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomNumber", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "randomNumberRequestBlock", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "rng", - outputs: [{ name: "", internalType: "contract RNG", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "rngLookahead", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "setJurorInactive", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "_pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_key", internalType: "bytes32", type: "bytes32" }, - { name: "_ID", internalType: "bytes32", type: "bytes32" }, - ], - name: "stakeOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_juror", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - ], - name: "stakeOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_relativeAmount", internalType: "uint256", type: "uint256" }, - ], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "newImplementation", internalType: "address", type: "address" }, - { name: "data", internalType: "bytes", type: "bytes" }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_courtID", internalType: "uint96", type: "uint96" }, - { name: "_newStake", internalType: "uint256", type: "uint256" }, - ], - name: "validateStake", - outputs: [ - { name: "pnkDeposit", internalType: "uint256", type: "uint256" }, - { name: "pnkWithdrawal", internalType: "uint256", type: "uint256" }, - { - name: "stakingResult", - internalType: "enum StakingResult", - type: "uint8", - }, - ], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "version", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "withdrawLeftoverPNK", - outputs: [], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0C872eeF07030107b53eaD15bb7dD7E6FBCA2b83) - */ -export const sortitionModuleImplementationAddress = { - 421614: "0x0C872eeF07030107b53eaD15bb7dD7E6FBCA2b83", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x0C872eeF07030107b53eaD15bb7dD7E6FBCA2b83) - */ -export const sortitionModuleImplementationConfig = { - address: sortitionModuleImplementationAddress, - abi: sortitionModuleImplementationAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionModule_Proxy -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD) - */ -export const sortitionModuleProxyAbi = [ - { - type: "constructor", - inputs: [ - { name: "_implementation", internalType: "address", type: "address" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - stateMutability: "nonpayable", - }, - { type: "fallback", stateMutability: "payable" }, - { type: "receive", stateMutability: "payable" }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD) - */ -export const sortitionModuleProxyAddress = { - 421614: "0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xbAA5068F0bD1417046250A3eDe2B1F27e31383BD) - */ -export const sortitionModuleProxyConfig = { - address: sortitionModuleProxyAddress, - abi: sortitionModuleProxyAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// SortitionSumTreeFactory -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xc7e3BF90299f6BD9FA7c3703837A9CAbB5743636) - */ -export const sortitionSumTreeFactoryAbi = [] as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xc7e3BF90299f6BD9FA7c3703837A9CAbB5743636) - */ -export const sortitionSumTreeFactoryAddress = { - 10200: "0xc7e3BF90299f6BD9FA7c3703837A9CAbB5743636", -} as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xc7e3BF90299f6BD9FA7c3703837A9CAbB5743636) - */ -export const sortitionSumTreeFactoryConfig = { - address: sortitionSumTreeFactoryAddress, - abi: sortitionSumTreeFactoryAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// TokenBridge -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xbb3c86f9918C3C1d83668fA84e79E876d147fFf2) - */ -export const tokenBridgeAbi = [] as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xbb3c86f9918C3C1d83668fA84e79E876d147fFf2) - */ -export const tokenBridgeAddress = { - 10200: "0xbb3c86f9918C3C1d83668fA84e79E876d147fFf2", -} as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xbb3c86f9918C3C1d83668fA84e79E876d147fFf2) - */ -export const tokenBridgeConfig = { - address: tokenBridgeAddress, - abi: tokenBridgeAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// TransactionBatcher -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x35f93986950804ac1F93519BF68C2a7Dd776db0E) - */ -export const transactionBatcherAbi = [ - { - type: "function", - inputs: [ - { name: "targets", internalType: "address[]", type: "address[]" }, - { name: "values", internalType: "uint256[]", type: "uint256[]" }, - { name: "datas", internalType: "bytes[]", type: "bytes[]" }, - ], - name: "batchSend", - outputs: [], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "targets", internalType: "address[]", type: "address[]" }, - { name: "values", internalType: "uint256[]", type: "uint256[]" }, - { name: "datas", internalType: "bytes[]", type: "bytes[]" }, - ], - name: "batchSendUnchecked", - outputs: [], - stateMutability: "payable", - }, -] as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x35f93986950804ac1F93519BF68C2a7Dd776db0E) - */ -export const transactionBatcherAddress = { - 421614: "0x35f93986950804ac1F93519BF68C2a7Dd776db0E", -} as const; - -/** - * [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x35f93986950804ac1F93519BF68C2a7Dd776db0E) - */ -export const transactionBatcherConfig = { - address: transactionBatcherAddress, - abi: transactionBatcherAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// WETH -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511) - */ -export const wethAbi = [ - { - type: "constructor", - inputs: [ - { name: "_name", internalType: "string", type: "string" }, - { name: "_symbol", internalType: "string", type: "string" }, - ], - stateMutability: "nonpayable", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511) - */ -export const wethAddress = { - 10200: "0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8", - 421614: "0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511", -} as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x2DFC9c3141268e6eac04a7D6d98Fbf64BDe836a8) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0xAEE953CC26DbDeA52beBE3F97f281981f2B9d511) - */ -export const wethConfig = { address: wethAddress, abi: wethAbi } as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// WETHFaucet -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x922B84134e41BC5c9EDE7D5EFCE22Ba3D0e71835) - */ -export const wethFaucetAbi = [ - { - type: "constructor", - inputs: [{ name: "_token", internalType: "contract IERC20", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "amount", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "balance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_amount", internalType: "uint256", type: "uint256" }], - name: "changeAmount", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "token", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "withdraw", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "withdrewAlready", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x922B84134e41BC5c9EDE7D5EFCE22Ba3D0e71835) - */ -export const wethFaucetAddress = { - 10200: "0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F", - 421614: "0x922B84134e41BC5c9EDE7D5EFCE22Ba3D0e71835", -} as const; - -/** - * - [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x22CB016c4b57413ca4DF5F1AC44a0E0d3c69811F) - * - [__View Contract on Arbitrum Sepolia Arbiscan__](https://sepolia.arbiscan.io/address/0x922B84134e41BC5c9EDE7D5EFCE22Ba3D0e71835) - */ -export const wethFaucetConfig = { - address: wethFaucetAddress, - abi: wethFaucetAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// WPNKFaucet -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x5898aeE045A25B276369914c3448B72a41758B2c) - */ -export const wpnkFaucetAbi = [ - { - type: "constructor", - inputs: [{ name: "_token", internalType: "contract IERC20", type: "address" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "balance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "request", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "token", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "withdrewAlready", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x5898aeE045A25B276369914c3448B72a41758B2c) - */ -export const wpnkFaucetAddress = { - 10200: "0x5898aeE045A25B276369914c3448B72a41758B2c", -} as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x5898aeE045A25B276369914c3448B72a41758B2c) - */ -export const wpnkFaucetConfig = { - address: wpnkFaucetAddress, - abi: wpnkFaucetAbi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// WrappedPinakionV2 -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd) - */ -export const wrappedPinakionV2Abi = [ - { type: "constructor", inputs: [], stateMutability: "nonpayable" }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "owner", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "spender", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Approval", - }, - { - type: "event", - anonymous: false, - inputs: [ - { name: "from", internalType: "address", type: "address", indexed: true }, - { name: "to", internalType: "address", type: "address", indexed: true }, - { - name: "value", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Transfer", - }, - { - type: "function", - inputs: [ - { name: "owner", internalType: "address", type: "address" }, - { name: "spender", internalType: "address", type: "address" }, - ], - name: "allowance", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "approve", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "account", internalType: "address", type: "address" }], - name: "balanceOf", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "decimals", - outputs: [{ name: "", internalType: "uint8", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "subtractedValue", internalType: "uint256", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "spender", internalType: "address", type: "address" }, - { name: "addedValue", internalType: "uint256", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "name", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "symbol", - outputs: [{ name: "", internalType: "string", type: "string" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalSupply", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transfer", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "from", internalType: "address", type: "address" }, - { name: "to", internalType: "address", type: "address" }, - { name: "amount", internalType: "uint256", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, -] as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd) - */ -export const wrappedPinakionV2Address = { - 10200: "0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd", -} as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd) - */ -export const wrappedPinakionV2Config = { - address: wrappedPinakionV2Address, - abi: wrappedPinakionV2Abi, -} as const; - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// xKlerosLiquidV2 -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x34E520dc1d2Db660113b64724e14CEdCD01Ee879) - */ -export const xKlerosLiquidV2Abi = [ - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_arbitrable", - internalType: "contract IArbitrable", - type: "address", - indexed: true, - }, - ], - name: "DisputeCreation", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_appeal", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_voteID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Draw", - }, - { - type: "event", - anonymous: false, - inputs: [{ name: "version", internalType: "uint8", type: "uint8", indexed: false }], - name: "Initialized", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_period", - internalType: "enum xKlerosLiquidV2.Period", - type: "uint8", - indexed: false, - }, - ], - name: "NewPeriod", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_phase", - internalType: "enum xKlerosLiquidV2.Phase", - type: "uint8", - indexed: false, - }, - ], - name: "NewPhase", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_arbitrable", - internalType: "contract IArbitrable", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_ruling", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "Ruling", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_subcourtID", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - { - name: "_stake", - internalType: "uint128", - type: "uint128", - indexed: false, - }, - { - name: "_newTotalStake", - internalType: "uint256", - type: "uint256", - indexed: false, - }, - ], - name: "StakeSet", - }, - { - type: "event", - anonymous: false, - inputs: [ - { - name: "_address", - internalType: "address", - type: "address", - indexed: true, - }, - { - name: "_disputeID", - internalType: "uint256", - type: "uint256", - indexed: true, - }, - { - name: "_tokenAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - { - name: "_ETHAmount", - internalType: "int256", - type: "int256", - indexed: false, - }, - ], - name: "TokenAndETHShift", - }, - { - type: "function", - inputs: [], - name: "ALPHA_DIVISOR", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MAX_STAKE_PATHS", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "MIN_JURORS", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "NON_PAYABLE_AMOUNT", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "RN", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "RNBlock", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "RNGenerator", - outputs: [{ name: "", internalType: "contract IRandomAuRa", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_extraData", internalType: "bytes", type: "bytes" }], - name: "arbitrationCost", - outputs: [{ name: "cost", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { - name: "_foreignGateway", - internalType: "contract IForeignGateway", - type: "address", - }, - ], - name: "changeForeignGateway", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_governor", internalType: "address", type: "address" }], - name: "changeGovernor", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }], - name: "changeMaxDrawingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_minStakingTime", internalType: "uint256", type: "uint256" }], - name: "changeMinStakingTime", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_pinakion", - internalType: "contract WrappedPinakion", - type: "address", - }, - ], - name: "changePinakion", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { - name: "_RNGenerator", - internalType: "contract IRandomAuRa", - type: "address", - }, - ], - name: "changeRNGenerator", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_subcourtID", internalType: "uint96", type: "uint96" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - ], - name: "changeSubcourtAlpha", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_subcourtID", internalType: "uint96", type: "uint96" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - ], - name: "changeSubcourtJurorFee", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_subcourtID", internalType: "uint96", type: "uint96" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - ], - name: "changeSubcourtJurorsForJump", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_subcourtID", internalType: "uint96", type: "uint96" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - ], - name: "changeSubcourtMinStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_subcourtID", internalType: "uint96", type: "uint96" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - name: "changeSubcourtTimesPerPeriod", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_weth", internalType: "contract IERC20", type: "address" }], - name: "changeWethAddress", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "courts", - outputs: [ - { name: "parent", internalType: "uint96", type: "uint96" }, - { name: "hiddenVotes", internalType: "bool", type: "bool" }, - { name: "minStake", internalType: "uint256", type: "uint256" }, - { name: "alpha", internalType: "uint256", type: "uint256" }, - { name: "feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_numberOfChoices", internalType: "uint256", type: "uint256" }, - { name: "_extraData", internalType: "bytes", type: "bytes" }, - ], - name: "createDispute", - outputs: [{ name: "disputeID", internalType: "uint256", type: "uint256" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_parent", internalType: "uint96", type: "uint96" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { name: "_minStake", internalType: "uint256", type: "uint256" }, - { name: "_alpha", internalType: "uint256", type: "uint256" }, - { name: "_feeForJuror", internalType: "uint256", type: "uint256" }, - { name: "_jurorsForCourtJump", internalType: "uint256", type: "uint256" }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionSumTreeK", internalType: "uint256", type: "uint256" }, - ], - name: "createSubcourt", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "currentRuling", - outputs: [{ name: "ruling", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "delayedSetStakes", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "subcourtID", internalType: "uint96", type: "uint96" }, - { name: "stake", internalType: "uint128", type: "uint128" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputes", - outputs: [ - { name: "subcourtID", internalType: "uint96", type: "uint96" }, - { - name: "arbitrated", - internalType: "contract IArbitrable", - type: "address", - }, - { name: "numberOfChoices", internalType: "uint256", type: "uint256" }, - { - name: "period", - internalType: "enum xKlerosLiquidV2.Period", - type: "uint8", - }, - { name: "lastPeriodChange", internalType: "uint256", type: "uint256" }, - { name: "drawsInRound", internalType: "uint256", type: "uint256" }, - { name: "commitsInRound", internalType: "uint256", type: "uint256" }, - { name: "ruled", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "", internalType: "uint256", type: "uint256" }], - name: "disputesRuling", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "disputesWithoutJurors", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_iterations", internalType: "uint256", type: "uint256" }], - name: "executeDelayedSetStakes", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_destination", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - { name: "_data", internalType: "bytes", type: "bytes" }, - ], - name: "executeGovernorProposal", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "foreignGateway", - outputs: [{ name: "", internalType: "contract IForeignGateway", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_disputeID", internalType: "uint256", type: "uint256" }], - name: "getDispute", - outputs: [ - { name: "votesLengths", internalType: "uint256[]", type: "uint256[]" }, - { - name: "tokensAtStakePerJuror", - internalType: "uint256[]", - type: "uint256[]", - }, - { - name: "totalFeesForJurors", - internalType: "uint256[]", - type: "uint256[]", - }, - { - name: "votesInEachRound", - internalType: "uint256[]", - type: "uint256[]", - }, - { - name: "repartitionsInEachRound", - internalType: "uint256[]", - type: "uint256[]", - }, - { - name: "penaltiesInEachRound", - internalType: "uint256[]", - type: "uint256[]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_account", internalType: "address", type: "address" }], - name: "getJuror", - outputs: [{ name: "subcourtIDs", internalType: "uint96[]", type: "uint96[]" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_subcourtID", internalType: "uint96", type: "uint96" }], - name: "getSubcourt", - outputs: [ - { name: "children", internalType: "uint256[]", type: "uint256[]" }, - { - name: "timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_appeal", internalType: "uint256", type: "uint256" }, - { name: "_voteID", internalType: "uint256", type: "uint256" }, - ], - name: "getVote", - outputs: [ - { name: "account", internalType: "address", type: "address" }, - { name: "commit", internalType: "bytes32", type: "bytes32" }, - { name: "choice", internalType: "uint256", type: "uint256" }, - { name: "voted", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_appeal", internalType: "uint256", type: "uint256" }, - ], - name: "getVoteCounter", - outputs: [ - { name: "winningChoice", internalType: "uint256", type: "uint256" }, - { name: "counts", internalType: "uint256[]", type: "uint256[]" }, - { name: "tied", internalType: "bool", type: "bool" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "governor", - outputs: [{ name: "", internalType: "address", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_governor", internalType: "address", type: "address" }, - { - name: "_pinakion", - internalType: "contract WrappedPinakion", - type: "address", - }, - { - name: "_RNGenerator", - internalType: "contract IRandomAuRa", - type: "address", - }, - { name: "_minStakingTime", internalType: "uint256", type: "uint256" }, - { name: "_maxDrawingTime", internalType: "uint256", type: "uint256" }, - { name: "_hiddenVotes", internalType: "bool", type: "bool" }, - { - name: "_courtParameters", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { - name: "_timesPerPeriod", - internalType: "uint256[4]", - type: "uint256[4]", - }, - { name: "_sortitionSumTreeK", internalType: "uint256", type: "uint256" }, - { - name: "_foreignGateway", - internalType: "contract IForeignGateway", - type: "address", - }, - { name: "_weth", internalType: "contract IERC20", type: "address" }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [{ name: "", internalType: "address", type: "address" }], - name: "jurors", - outputs: [ - { name: "stakedTokens", internalType: "uint256", type: "uint256" }, - { name: "lockedTokens", internalType: "uint256", type: "uint256" }, - ], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lastDelayedSetStake", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lastPhaseChange", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "lockInsolventTransfers", - outputs: [{ name: "", internalType: "bool", type: "bool" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "maxDrawingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "minStakingTime", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "nextDelayedSetStake", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [ - { name: "_owner", internalType: "address", type: "address" }, - { name: "_spender", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - ], - name: "onApprove", - outputs: [{ name: "allowed", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_from", internalType: "address", type: "address" }, - { name: "_to", internalType: "address", type: "address" }, - { name: "_amount", internalType: "uint256", type: "uint256" }, - ], - name: "onTransfer", - outputs: [{ name: "allowed", internalType: "bool", type: "bool" }], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [], - name: "phase", - outputs: [{ name: "", internalType: "enum xKlerosLiquidV2.Phase", type: "uint8" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "pinakion", - outputs: [{ name: "", internalType: "contract WrappedPinakion", type: "address" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [{ name: "_owner", internalType: "address", type: "address" }], - name: "proxyPayment", - outputs: [{ name: "allowed", internalType: "bool", type: "bool" }], - stateMutability: "payable", - }, - { - type: "function", - inputs: [ - { name: "_disputeID", internalType: "uint256", type: "uint256" }, - { name: "_ruling", internalType: "uint256", type: "uint256" }, - ], - name: "rule", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_subcourtID", internalType: "uint96", type: "uint96" }, - { name: "_stake", internalType: "uint128", type: "uint128" }, - ], - name: "setStake", - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - inputs: [ - { name: "_account", internalType: "address", type: "address" }, - { name: "_subcourtID", internalType: "uint96", type: "uint96" }, - ], - name: "stakeOf", - outputs: [{ name: "stake", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "totalDisputes", - outputs: [{ name: "", internalType: "uint256", type: "uint256" }], - stateMutability: "view", - }, - { - type: "function", - inputs: [], - name: "weth", - outputs: [{ name: "", internalType: "contract IERC20", type: "address" }], - stateMutability: "view", - }, -] as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x34E520dc1d2Db660113b64724e14CEdCD01Ee879) - */ -export const xKlerosLiquidV2Address = { - 10200: "0x34E520dc1d2Db660113b64724e14CEdCD01Ee879", -} as const; - -/** - * [__View Contract on Gnosis Chiado Blockscout__](https://blockscout.chiadochain.net/address/0x34E520dc1d2Db660113b64724e14CEdCD01Ee879) - */ -export const xKlerosLiquidV2Config = { - address: xKlerosLiquidV2Address, - abi: xKlerosLiquidV2Abi, -} as const; diff --git a/contracts/deployments/utils.ts b/contracts/deployments/utils.ts deleted file mode 100644 index a876fbd5a..000000000 --- a/contracts/deployments/utils.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { arbitrum, arbitrumSepolia } from "viem/chains"; - -export const deployments = { - devnet: { - chainId: arbitrumSepolia.id, - }, - university: { - chainId: arbitrumSepolia.id, - }, - testnet: { - chainId: arbitrumSepolia.id, - }, - mainnet: { - chainId: arbitrum.id, - }, -} as const; - -export type DeploymentName = keyof typeof deployments; - -export type ContractConfig = { - address: Record; - abi: readonly any[]; -}; - -export function getAddress(config: ContractConfig, chainId: number): `0x${string}` { - const address = config.address[chainId]; - if (!address) throw new Error(`No address found for chainId ${chainId}`); - return address; -} diff --git a/contracts/foundry.toml b/contracts/foundry.toml deleted file mode 100644 index 2dcdd2711..000000000 --- a/contracts/foundry.toml +++ /dev/null @@ -1,21 +0,0 @@ - -[profile.default] -solc = "0.8.30" -evm_version = "cancun" -via_ir = true -optimizer = true -optimizer_runs = 10000 - -src = 'src' -out = 'out' -libs = ['../node_modules', 'lib'] - -[rpc_endpoints] -arbitrumSepolia = "https://sepolia-rollup.arbitrum.io/rpc" -arbitrum = "https://arb1.arbitrum.io/rpc" -sepolia = "https://sepolia.infura.io/v3/${INFURA_API_KEY}" -mainnet = "https://mainnet.infura.io/v3/${INFURA_API_KEY}" -chiado = "https://rpc.chiado.gnosis.gateway.fm" -gnosischain = "https://rpc.gnosis.gateway.fm" - -# See more config options https://book.getfoundry.sh/reference/config.html diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts deleted file mode 100644 index 9d8e9c49d..000000000 --- a/contracts/hardhat.config.ts +++ /dev/null @@ -1,349 +0,0 @@ -/* eslint-disable node/no-missing-require */ -import * as dotenv from "dotenv"; -import { HardhatUserConfig } from "hardhat/config"; -import "@nomicfoundation/hardhat-chai-matchers"; -import "@nomiclabs/hardhat-solhint"; -import "@typechain/hardhat"; -import "hardhat-deploy-tenderly"; -import "hardhat-gas-reporter"; -import "solidity-coverage"; -import "hardhat-deploy"; -import "hardhat-deploy-ethers"; -import "hardhat-watcher"; -import "hardhat-docgen"; -import "hardhat-contract-sizer"; -import "hardhat-tracer"; -require("./scripts/populatePolicyRegistry"); -require("./scripts/populateCourts"); -require("./scripts/changeOwner"); -require("./scripts/getDisputeTemplate"); -require("./scripts/compareStorageLayout"); -require("./scripts/storage-layout"); - -dotenv.config(); - -const config: HardhatUserConfig = { - solidity: { - compilers: [ - { - version: "0.8.30", - settings: { - evmVersion: "cancun", - viaIR: process.env.VIA_IR !== "false", // Defaults to true - optimizer: { - enabled: true, - runs: 2000, - }, - outputSelection: { - "*": { - "*": ["storageLayout"], - }, - }, - }, - }, - ], - }, - paths: { - sources: "./src", - cache: "./cache_hardhat", - }, - networks: { - hardhat: { - live: false, - saveDeployments: true, - allowUnlimitedContractSize: true, - tags: ["test", "local"], - companionNetworks: { - home: "hardhat", - foreign: "hardhat", - }, - }, - localhost: { - url: `http://127.0.0.1:8545`, - chainId: 31337, - saveDeployments: true, - tags: ["test", "local"], - companionNetworks: { - home: "localhost", - foreign: "localhost", - }, - }, - dockerhost: { - url: `http://host.docker.internal:8545`, - chainId: 31337, - saveDeployments: true, - tags: ["test", "local"], - companionNetworks: { - foreign: "localhost", - }, - }, - mainnetFork: { - chainId: 1, - url: `http://127.0.0.1:8545`, - forking: { - url: `https://mainnet.infura.io/v3/${process.env.INFURA_API_KEY}`, - }, - accounts: process.env.MAINNET_PRIVATE_KEY !== undefined ? [process.env.MAINNET_PRIVATE_KEY] : [], - live: false, - saveDeployments: false, - tags: ["test", "local"], - companionNetworks: { - home: "arbitrum", - }, - }, - arbitrumSepoliaFork: { - chainId: 421614, - url: `http://127.0.0.1:8545`, - forking: { - url: process.env.ARBITRUM_SEPOLIA_RPC ?? "https://sepolia-rollup.arbitrum.io/rpc", - }, - accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], - live: false, - saveDeployments: true, - tags: ["test", "local"], - companionNetworks: { - foreign: "sepolia", - }, - }, - - // Home chain --------------------------------------------------------------------------------- - arbitrumSepolia: { - chainId: 421614, - url: process.env.ARBITRUM_SEPOLIA_RPC ?? `https://arbitrum-sepolia.infura.io/v3/${process.env.INFURA_API_KEY}`, - accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], - live: true, - saveDeployments: true, - tags: ["staging", "home", "layer2"], - companionNetworks: { - foreignChiado: "chiado", - foreignSepolia: "sepolia", - }, - verify: { - etherscan: { - apiUrl: "https://api.etherscan.io/v2/api", - apiKey: process.env.ETHERSCAN_API_KEY, - }, - }, - }, - arbitrumSepoliaDevnet: { - chainId: 421614, - url: process.env.ARBITRUM_SEPOLIA_RPC ?? `https://arbitrum-sepolia.infura.io/v3/${process.env.INFURA_API_KEY}`, - accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], - live: true, - saveDeployments: true, - tags: ["staging", "home", "layer2"], - companionNetworks: { - foreignChiado: "chiadoDevnet", - foreignSepolia: "sepoliaDevnet", - }, - verify: { - etherscan: { - apiUrl: "https://api.etherscan.io/v2/api", - apiKey: process.env.ETHERSCAN_API_KEY, - }, - }, - }, - arbitrum: { - chainId: 42161, - url: process.env.ARBITRUM_RPC ?? `https://arbitrum-mainnet.infura.io/v3/${process.env.INFURA_API_KEY}`, - accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], - live: true, - saveDeployments: true, - tags: ["production", "home", "layer2"], - companionNetworks: { - foreign: "mainnet", - }, - verify: { - etherscan: { - apiUrl: "https://api.etherscan.io/v2/api", - apiKey: process.env.ETHERSCAN_API_KEY, - }, - }, - }, - // Foreign chain --------------------------------------------------------------------------------- - sepolia: { - chainId: 11155111, - url: `https://sepolia.infura.io/v3/${process.env.INFURA_API_KEY}`, - accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], - live: true, - saveDeployments: true, - tags: ["staging", "foreign", "layer1"], - companionNetworks: { - home: "arbitrumSepolia", - }, - verify: { - etherscan: { - apiUrl: "https://api.etherscan.io/v2/api", - apiKey: process.env.ETHERSCAN_API_KEY, - }, - }, - }, - sepoliaDevnet: { - chainId: 11155111, - url: `https://sepolia.infura.io/v3/${process.env.INFURA_API_KEY}`, - accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], - live: true, - saveDeployments: true, - tags: ["staging", "foreign", "layer1"], - companionNetworks: { - home: "arbitrumSepoliaDevnet", - }, - verify: { - etherscan: { - apiUrl: "https://api.etherscan.io/v2/api", - apiKey: process.env.ETHERSCAN_API_KEY, - }, - }, - }, - mainnet: { - chainId: 1, - url: `https://mainnet.infura.io/v3/${process.env.INFURA_API_KEY}`, - accounts: process.env.MAINNET_PRIVATE_KEY !== undefined ? [process.env.MAINNET_PRIVATE_KEY] : [], - live: true, - saveDeployments: true, - tags: ["production", "foreign", "layer1"], - companionNetworks: { - home: "arbitrum", - }, - verify: { - etherscan: { - apiUrl: "https://api.etherscan.io/v2/api", - apiKey: process.env.ETHERSCAN_API_KEY, - }, - }, - }, - chiado: { - chainId: 10200, - url: "https://rpc.chiado.gnosis.gateway.fm", - accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], - live: true, - saveDeployments: true, - tags: ["staging", "foreign", "layer1"], - companionNetworks: { - home: "arbitrumSepolia", - }, - verify: { - etherscan: { - apiUrl: "https://gnosis-chiado.blockscout.com", - apiKey: "", - }, - }, - }, - chiadoDevnet: { - chainId: 10200, - url: "https://rpc.chiado.gnosis.gateway.fm", - accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], - live: true, - saveDeployments: true, - tags: ["staging", "foreign", "layer1"], - companionNetworks: { - home: "arbitrumSepoliaDevnet", - }, - verify: { - etherscan: { - apiUrl: "https://gnosis-chiado.blockscout.com", - apiKey: "", - }, - }, - }, - gnosischain: { - chainId: 100, - url: `https://rpc.gnosis.gateway.fm`, - accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], - live: true, - saveDeployments: true, - tags: ["production", "foreign", "layer1"], - verify: { - etherscan: { - apiKey: process.env.GNOSISSCAN_API_KEY, - }, - }, - }, - }, - namedAccounts: { - deployer: { - default: 0, - }, - relayer: { - default: 1, - }, - bridger: { - default: 2, - }, - challenger: { - default: 3, - }, - firstWallet: { - default: "0x1cC9304B31F05d27470ccD855b05310543b70f17", - }, - secondWallet: { - default: "0x4D74a4FD4057a770da74b0C3e9fa8A02f7f09c94", - }, - thirdWallet: { - default: "0xBe7ee23877D530b8a17971CfDA7B5925b57e87B1", - }, - fourthWallet: { - default: "0x01ba2b3D0eceAD6358aEcD508221A70f6CA4f6ea", - }, - fifthWallet: { - default: "0xE64DC94D545C10b2364F4aBAf9F6F416dAcED13a", - }, - }, - gasReporter: { - enabled: process.env.REPORT_GAS !== undefined ? process.env.REPORT_GAS === "true" : false, - currency: "USD", - }, - verify: { - etherscan: { - apiKey: process.env.ETHERSCAN_API_KEY_FIX, - }, - }, - watcher: { - compilation: { - tasks: ["compile"], - files: ["./contracts"], - verbose: true, - }, - testArbitration: { - tasks: [ - { command: "compile", params: { quiet: true } }, - { - command: "test", - params: { - noCompile: true, - testFiles: ["./test/arbitration/index.ts"], - }, - }, - ], - files: ["./test/**/*", "./src/**/*"], - }, - }, - docgen: { - path: "./docs", - clear: true, - runOnCompile: false, - }, - mocha: { - timeout: 20000, - }, - tenderly: { - project: process.env.TENDERLY_PROJECT !== undefined ? process.env.TENDERLY_PROJECT : "kleros-v2", - username: process.env.TENDERLY_USERNAME !== undefined ? process.env.TENDERLY_USERNAME : "", - }, - external: { - // https://github.com/wighawag/hardhat-deploy#importing-deployment-from-other-projects-with-truffle-support - deployments: { - arbitrumSepolia: ["../node_modules/@kleros/vea-contracts/deployments/arbitrumSepolia"], - arbitrumSepoliaDevnet: ["../node_modules/@kleros/vea-contracts/deployments/arbitrumSepolia"], - arbitrum: ["../node_modules/@kleros/vea-contracts/deployments/arbitrum"], - chiado: ["../node_modules/@kleros/vea-contracts/deployments/chiado"], - chiadoDevnet: ["../node_modules/@kleros/vea-contracts/deployments/chiado"], - gnosischain: ["../node_modules/@kleros/vea-contracts/deployments/gnosischain"], - sepolia: ["../node_modules/@kleros/vea-contracts/deployments/sepolia"], - sepoliaDevnet: ["../node_modules/@kleros/vea-contracts/deployments/sepolia"], - mainnet: ["../node_modules/@kleros/vea-contracts/deployments/mainnet"], - }, - }, -}; - -export default config; diff --git a/contracts/lib/forge-std b/contracts/lib/forge-std deleted file mode 160000 index 8f24d6b04..000000000 --- a/contracts/lib/forge-std +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8f24d6b04c92975e0795b5868aa0d783251cdeaa diff --git a/contracts/lib/solmate b/contracts/lib/solmate deleted file mode 160000 index 3998897ac..000000000 --- a/contracts/lib/solmate +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3998897acb502fa7b480f505138a6ae1842e8d10 diff --git a/contracts/package.json b/contracts/package.json deleted file mode 100644 index fd40b404d..000000000 --- a/contracts/package.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "name": "@kleros/kleros-v2-contracts", - "version": "0.12.0", - "description": "Smart contracts for Kleros version 2", - "main": "./cjs/deployments/index.js", - "module": "./esm/deployments/index.js", - "types": "./types/deployments/index.d.ts", - "exports": { - ".": { - "types": "./types/deployments/index.d.ts", - "import": "./esm/deployments/index.js", - "require": "./cjs/deployments/index.js", - "default": "./esm/deployments/index.js" - }, - "./cjs/deployments": { - "types": "./types/deployments/index.d.ts", - "require": "./cjs/deployments/index.js", - "default": "./cjs/deployments/index.js" - }, - "./esm/deployments": { - "types": "./types/deployments/index.d.ts", - "import": "./esm/deployments/index.js", - "default": "./esm/deployments/index.js" - } - }, - "files": [ - "types", - "esm", - "cjs", - "arbitration", - "gateway", - "kleros-v1", - "libraries", - "proxy", - "rng", - "token", - "utils", - "typechain-types", - "deployments", - "index.ts" - ], - "repository": "git@github.com:kleros/kleros-v2.git", - "homepage": "https://github.com/kleros/kleros-v2/tree/master/contracts#readme", - "author": "Kleros", - "license": "MIT", - "engines": { - "node": ">=16.0.0" - }, - "volta": { - "node": "20.18.3" - }, - "publishConfig": { - "access": "public", - "tag": "latest" - }, - "scripts": { - "build": "hardhat compile", - "clean": "hardhat clean", - "check": "hardhat check", - "test": "TS_NODE_TRANSPILE_ONLY=1 hardhat test", - "coverage": "scripts/coverage.sh", - "start": "hardhat node --tags nop", - "start-local": "hardhat node --tags Arbitration,HomeArbitrable --hostname 0.0.0.0", - "deploy": "hardhat deploy", - "deploy-local": "hardhat deploy --tags Arbitration,HomeArbitrable --network localhost", - "validate-upgrades": "openzeppelin-upgrades-core validate --exclude 'src/proxy/mock/**/*.sol' --exclude 'src/test/**/*.sol' artifacts/build-info", - "validate-upgrades-against-deployed": "hardhat compare-storage", - "simulate": "hardhat simulate:all", - "simulate-local": "hardhat simulate:all --network localhost", - "viem:generate-devnet": "NODE_NO_WARNINGS=1 wagmi generate -c wagmi.config.devnet.ts", - "viem:generate-testnet": "NODE_NO_WARNINGS=1 wagmi generate -c wagmi.config.testnet.ts", - "viem:generate-mainnet": "NODE_NO_WARNINGS=1 wagmi generate -c wagmi.config.mainnet.ts", - "viem:generate-hardhat": "NODE_NO_WARNINGS=1 wagmi generate -c wagmi.config.hardhat.ts", - "export:devnet": "yarn hardhat export --export deployments/arbitrumSepoliaDevnet.ts --network arbitrumSepoliaDevnet", - "export:testnet": "yarn hardhat export --export deployments/arbitrumSepolia.ts --network arbitrumSepolia", - "export:mainnet": "yarn hardhat export --export deployments/arbitrum.ts --network arbitrum", - "viem:test": "NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-fetch ts-node ./scripts/viemTest.ts", - "bot:keeper": "NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-fetch hardhat run ./scripts/keeperBot.ts", - "bot:relayer-from-chiado": "NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-fetch hardhat run ./scripts/disputeRelayerBotFromChiado.ts", - "bot:relayer-from-sepolia": "NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-fetch hardhat run ./scripts/disputeRelayerBotFromSepolia.ts", - "bot:relayer-from-hardhat": "NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-fetch hardhat run ./scripts/disputeRelayerBotFromHardhat.ts", - "bot:disputor": "NODE_NO_WARNINGS=1 yarn hardhat run ./scripts/disputeCreatorBot.ts", - "etherscan-verify": "hardhat etherscan-verify", - "etherscan-verify-proxies": "scripts/verifyProxies.sh", - "sourcify": "hardhat sourcify --write-failing-metadata", - "size": "hardhat size-contracts --no-compile", - "watch": "hardhat watch", - "natspec-smells": "natspec-smells", - "docgen": "hardhat docgen", - "docserve": "scripts/docPreprocess.sh && forge doc --serve", - "docbuild": "scripts/docPreprocess.sh && forge doc --build --out dist && scripts/docPostprocess.sh", - "populate:courts:devnet": "hardhat populate:courts --from v2_devnet --network arbitrumSepoliaDevnet", - "populate:courts:testnet": "hardhat populate:courts --from v2_testnet --network arbitrumSepolia", - "populate:courts:mainnet": "hardhat populate:courts --from v2_mainnet --network arbitrum", - "populate:policiesUris": "scripts/setPoliciesURIs.sh config/policies.v2.{devnet,testnet,mainnet}.json", - "populate:policies:devnet": "hardhat populate:policy-registry --from v2_devnet --network arbitrumSepoliaDevnet", - "populate:policies:testnet": "hardhat populate:policy-registry --from v2_testnet --network arbitrumSepolia", - "populate:policies:mainnet": "hardhat populate:policy-registry --from v2_mainnet --network arbitrum", - "release:patch": "scripts/publish.sh patch", - "release:minor": "scripts/publish.sh minor", - "release:major": "scripts/publish.sh major", - "tenderly-verify": "hardhat tenderly:verify", - "build:all": "rm -rf ./dist && yarn build:cjs && yarn build:esm && yarn build:types", - "build:cjs": "tsc --project tsconfig-release.json --module CommonJS --moduleResolution Node --outDir ./dist/cjs && echo '{\"type\": \"commonjs\"}' > ./dist/cjs/package.json", - "build:esm": "tsc --project tsconfig-release.json --module NodeNext --moduleResolution NodeNext --outDir ./dist/esm && echo '{\"type\": \"module\"}' > ./dist/esm/package.json", - "build:types": "tsc --project tsconfig-release.json --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap" - }, - "devDependencies": { - "@defi-wonderland/natspec-smells": "^1.1.6", - "@kleros/kleros-v2-eslint-config": "workspace:^", - "@kleros/kleros-v2-prettier-config": "workspace:^", - "@kleros/kleros-v2-tsconfig": "workspace:^", - "@logtail/pino": "^0.5.0", - "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", - "@nomicfoundation/hardhat-ethers": "^3.1.0", - "@nomiclabs/hardhat-solhint": "^4.1.0", - "@openzeppelin/upgrades-core": "^1.44.1", - "@typechain/ethers-v6": "^0.5.1", - "@typechain/hardhat": "^9.1.0", - "@types/chai": "^4.3.20", - "@types/mocha": "^10.0.10", - "@types/node": "^20.17.6", - "@types/sinon": "^17.0.4", - "@wagmi/cli": "^2.3.2", - "abitype": "^0.10.3", - "chai": "^4.5.0", - "dotenv": "^16.6.1", - "eslint": "^9.15.0", - "ethereumjs-util": "^7.1.5", - "ethers": "^6.15.0", - "gluegun": "^5.2.0", - "graphql": "^16.9.0", - "graphql-request": "^7.1.2", - "hardhat": "2.26.2", - "hardhat-contract-sizer": "^2.10.0", - "hardhat-deploy": "^1.0.4", - "hardhat-deploy-ethers": "^0.4.2", - "hardhat-deploy-tenderly": "^0.2.1", - "hardhat-docgen": "^1.3.0", - "hardhat-gas-reporter": "^2.3.0", - "hardhat-tracer": "^3.2.1", - "hardhat-watcher": "^2.5.0", - "pino": "^8.21.0", - "pino-pretty": "^10.3.1", - "prettier": "^3.3.3", - "prettier-plugin-solidity": "^1.4.2", - "shelljs": "^0.8.5", - "sinon": "^20.0.0", - "solhint-plugin-prettier": "^0.1.0", - "solidity-coverage": "^0.8.16", - "ts-node": "^10.9.2", - "typechain": "^8.3.2", - "typescript": "^5.6.3" - }, - "dependencies": { - "@chainlink/contracts": "^1.4.0", - "@kleros/vea-contracts": "^0.7.0", - "@openzeppelin/contracts": "^5.4.0", - "@shutter-network/shutter-sdk": "0.0.2", - "isomorphic-fetch": "^3.0.0" - }, - "peerDependencies": { - "viem": "^2.24.1" - }, - "peerDependenciesMeta": { - "viem": { - "optional": false - } - } -} diff --git a/contracts/remappings.txt b/contracts/remappings.txt deleted file mode 100644 index 8e7410cdc..000000000 --- a/contracts/remappings.txt +++ /dev/null @@ -1,9 +0,0 @@ -@ensdomains/=../node_modules/@ensdomains/ -@openzeppelin/=../node_modules/@openzeppelin/ -@kleros/=../node_modules/@kleros/ -ds-test/=lib/forge-std/lib/ds-test/src/ -eth-gas-reporter/=../node_modules/eth-gas-reporter/ -forge-std/=lib/forge-std/src/ -hardhat-deploy/=../node_modules/hardhat-deploy/ -hardhat/=../node_modules/hardhat/ -solmate/=lib/solmate/src/ diff --git a/contracts/scripts/changeOwner.ts b/contracts/scripts/changeOwner.ts deleted file mode 100644 index fcb64137b..000000000 --- a/contracts/scripts/changeOwner.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { task } from "hardhat/config"; -import { prompt, print } from "gluegun"; -import { Cores, getContracts } from "./utils/contracts"; -import { isAddress } from "viem"; - -const { bold } = print.colors; - -task("change-owner", "Changes the owner for all the contracts") - .addPositionalParam("newOwner", "The address of the new owner") - .addOptionalParam("coreType", "The type of core to use between base, university (default: base)", Cores.BASE) - .setAction(async (taskArgs, hre) => { - const newOwner = taskArgs.newOwner; - if (!isAddress(newOwner)) { - throw new Error("Invalid owner address provided"); - } - print.highlight(`💣 Changing owner to ${bold(newOwner)}`); - - const { confirm } = await prompt.ask({ - type: "confirm", - name: "confirm", - message: "Are you sure you want to proceed?", - }); - if (!confirm) { - console.log("Operation cancelled by user."); - return; - } - - const coreType = Cores[taskArgs.coreType.toUpperCase() as keyof typeof Cores]; - if (coreType === undefined) { - console.error("Invalid core type, must be one of base, university"); - return; - } - console.log("Using core type %s", coreType); - - const { - core, - disputeKitClassic, - disputeResolver, - disputeTemplateRegistry, - policyRegistry, - chainlinkRng, - randomizerRng, - snapshotProxy, - sortition, - evidence, - } = await getContracts(hre, coreType); - - const updateOwner = async (contractName: string, contractInstance: any) => { - print.info(`Changing owner for ${contractName}`); - - const spinner = print.spin(`Executing transaction for ${contractName}...`); - try { - const tx = await contractInstance.changeOwner(newOwner); - await tx.wait(); - spinner.succeed(`Owner changed for ${contractName}, tx hash: ${tx.hash}`); - } catch (error) { - if (error instanceof Error) { - spinner.fail(`Failed to change owner for ${contractName}: ${error.message}`); - } else { - spinner.fail(`Failed to change owner for ${contractName}: ${String(error)}`); - } - } - }; - - await updateOwner("KlerosCore", core); - await updateOwner("DisputeKitClassic", disputeKitClassic); - await updateOwner("DisputeResolver", disputeResolver); - await updateOwner("DisputeTemplateRegistry", disputeTemplateRegistry); - await updateOwner("PolicyRegistry", policyRegistry); - await updateOwner("KlerosCoreSnapshotProxy", snapshotProxy); - await updateOwner("SortitionModule", sortition); - await updateOwner("EvidenceModule", evidence); - if (chainlinkRng) await updateOwner("ChainlinkRNG", chainlinkRng); - if (randomizerRng) await updateOwner("RandomizerRNG", randomizerRng); - - print.success("Owner changed successfully"); - }); diff --git a/contracts/scripts/compareStorageLayout.ts b/contracts/scripts/compareStorageLayout.ts deleted file mode 100644 index c774c000a..000000000 --- a/contracts/scripts/compareStorageLayout.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { task } from "hardhat/config"; -import { readFileSync } from "fs"; -import path from "path"; -import { print } from "gluegun"; -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { getStorageUpgradeReport, ValidationOptions } from "@openzeppelin/upgrades-core"; - -const { bold } = print.colors; - -task("compare-storage", "Compare storage layout between deployed and modified contracts") - .addParam("contract", "The name of the contract to compare against") - .addOptionalParam("deployedArtifact", "The name of the deployed contract artifact in deployments") - .setAction(async ({ deployedArtifact, contract }, hre: HardhatRuntimeEnvironment) => { - try { - // Get storage layout of the deployed contract implementation - const artifactName = deployedArtifact || `${contract}_Implementation`; - const deployedArtifactPath = path.resolve(`deployments/${hre.network.name}/${artifactName}.json`); - const deployedJson = JSON.parse(readFileSync(deployedArtifactPath, "utf8")); - const originalLayout = deployedJson.storageLayout; - - // Get storage layout of the modified contract - const buildInfos = await hre.artifacts.getBuildInfoPaths(); - const buildInfo = buildInfos.find((buildInfo) => { - const content = JSON.parse(readFileSync(buildInfo, "utf8")); - return Object.keys(content.output.contracts).some((file) => - Object.keys(content.output.contracts[file]).includes(contract) - ); - }); - - if (!buildInfo) { - throw new Error(`Could not find build info for contract ${contract}`); - } - - const buildInfoContent = JSON.parse(readFileSync(buildInfo, "utf8")); - const contractFile = Object.keys(buildInfoContent.output.contracts).find((file) => - Object.keys(buildInfoContent.output.contracts[file]).includes(contract) - ); - - if (!contractFile) { - throw new Error(`Could not find contract ${contract} in build info`); - } - - const contractData = buildInfoContent.output.contracts[contractFile][contract]; - const updatedLayout = contractData.storageLayout; - - // Compare layouts using OpenZeppelin's report - const validationOptions: Required = { - unsafeAllowCustomTypes: true, - unsafeAllowRenames: false, - unsafeAllow: [], - unsafeSkipStorageCheck: false, - unsafeAllowLinkedLibraries: false, - kind: "uups", - }; - - const report = getStorageUpgradeReport(originalLayout, updatedLayout, validationOptions); - - if (report.ok) { - print.success("✓ No storage layout incompatibilities found"); - return; - } - - const explanation = report.explain(); - print.error(`✗ ${explanation}`); - print.info("-".repeat(100)); - } catch (error) { - print.error("\nError comparing storage layouts:"); - print.error(error); - process.exit(1); - } - }); diff --git a/contracts/scripts/console-init-chiado-resolver.ts b/contracts/scripts/console-init-chiado-resolver.ts deleted file mode 100644 index daedb3ccc..000000000 --- a/contracts/scripts/console-init-chiado-resolver.ts +++ /dev/null @@ -1,29 +0,0 @@ -// TODO: SDK utility formatDisputeExtraData(_courtId, _nbOfJurors): string -// TODO: SDK utility formatDisputeExtraData(_courtId, _nbOfJurors, disputeKitId): string - -// On the foreign chain -const extraData = - "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"; -const template = `{"$schema":"../NewDisputeTemplate.schema.json","title":"Add an entry to Ledger Contract Domain Name registry v2","description":"Someone requested to add an entry to Ledger Contract Domain Name registry v2","question":"Does the entry comply with the required criteria?","answers":[{"title":"Yes, Add It","description":"Select this if you think the entry complies with the required criteria and should be added."},{"title":"No, Don't Add It","description":"Select this if you think the entry does not comply with the required criteria and should not be added."}],"policyURI":"/ipfs/QmdvkC5Djgk8MfX5ijJR3NJzmvGugUqvui7bKuTErSD6cE/contract-domain-name-registry-for-ledger-policy-3-.pdf","frontendUrl":"https://curate.kleros.io/tcr/%s/%s/%s","arbitrableChainID":"100","arbitrableAddress":"0x957A53A994860BE4750810131d9c876b2f52d6E1","arbitratorChainID":"421614","arbitratorAddress":"0xD08Ab99480d02bf9C092828043f611BcDFEA917b","category":"Curated Lists","specification":"KIP88"}`; -const nbOfChoices = 2; -const cost = await foreignGateway.arbitrationCost(extraData); -const tx = await resolver.createDisputeForTemplate(extraData, template, "disputeTemplateMapping: TODO", nbOfChoices, { - value: cost, -}); - -// Or to test the fallback to IPFS -const uri = "/ipfs/QmQ9...."; -const tx2 = await resolver.createDisputeForTemplateUri(extraData, uri, nbOfChoices, { value: cost }); - -// Then a relayer must relay the dispute on the HomeGateway... - -core = await ethers.getContract("KlerosCore"); -resolver = await ethers.getContract("DisputeResolver"); -extraData = - "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"; -template = `{"$schema":"../NewDisputeTemplate.schema.json","title":"Add an entry to Ledger Contract Domain Name registry v2","description":"Someone requested to add an entry to Ledger Contract Domain Name registry v2","question":"Does the entry comply with the required criteria?","answers":[{"title":"Yes, Add It","description":"Select this if you think the entry complies with the required criteria and should be added."},{"title":"No, Don't Add It","description":"Select this if you think the entry does not comply with the required criteria and should not be added."}],"policyURI":"/ipfs/QmdvkC5Djgk8MfX5ijJR3NJzmvGugUqvui7bKuTErSD6cE/contract-domain-name-registry-for-ledger-policy-3-.pdf","frontendUrl":"https://curate.kleros.io/tcr/%s/%s/%s","arbitrableChainID":"100","arbitrableAddress":"0x957A53A994860BE4750810131d9c876b2f52d6E1","arbitratorChainID":"421614","arbitratorAddress":"0xD08Ab99480d02bf9C092828043f611BcDFEA917b","category":"Curated Lists","specification":"KIP88"}`; -nbOfChoices = 2; -cost = await core.arbitrationCost(extraData); -tx = await resolver.createDisputeForTemplate(extraData, template, "disputeTemplateMapping: TODO", nbOfChoices, { - value: cost, -}); diff --git a/contracts/scripts/console-init-chiado.ts b/contracts/scripts/console-init-chiado.ts deleted file mode 100644 index 97d9e2ac1..000000000 --- a/contracts/scripts/console-init-chiado.ts +++ /dev/null @@ -1,116 +0,0 @@ -// .load scripts/console-init-chiado.ts -receiver = await ethers.getContract("VeaInboxArbToGnosisDevnet"); -gateway = await ethers.getContract("ForeignGatewayOnGnosis"); -weth = await ethers.getContract("WETH"); -wethFaucet = await ethers.getContract("WETHFaucet"); -wpnk = await ethers.getContract("WrappedPinakionV2"); -wpnkFaucet = await ethers.getContract("WPNKFaucet"); -xKlerosLiquidV2 = await ethers.getContract("xKlerosLiquidV2"); -arbitrable = await ethers.getContract("ArbitrableExample"); -options = { - gasLimit: 10000000, - maxFeePerGas: ethers.utils.parseUnits("1", "gwei"), - maxPriorityFeePerGas: ethers.utils.parseUnits("1", "gwei"), -}; - -// await weth.transfer(wethFaucet.address, ethers.utils.parseEther("100000")) -// await wethFaucet.request(options) - -const createDispute = async () => { - const choices = 2; - const extraData = - "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003"; - const metaEvidenceID = 0; - const evidenceID = ethers.BigNumber.from(ethers.utils.randomBytes(32)); - const feeForJuror = await gateway.arbitrationCost(extraData); - var tx; - try { - tx = await (await weth.increaseAllowance(arbitrable.address, feeForJuror, options)).wait(); - console.log("txID increateAllowance: %s", tx?.transactionHash); - tx = await ( - await arbitrable.createDispute(choices, extraData, metaEvidenceID, evidenceID, feeForJuror, options) - ).wait(); - console.log("txID createDispute: %s", tx?.transactionHash); - } catch (e) { - if (typeof e === "string") { - console.log("Error: %s", e); - } else if (e instanceof Error) { - console.log("%O", e); - } - } finally { - if (tx) { - var filter = gateway.filters.DisputeCreation(); - var logs = await gateway.queryFilter(filter, tx.blockNumber, tx.blockNumber); - console.log("Gateway DisputeID: %s", logs[0]?.args?._disputeID); - - filter = gateway.filters.OutgoingDispute(); - logs = await gateway.queryFilter(filter, tx.blockNumber, tx.blockNumber); - console.log("Outgoing Dispute: %O", logs[0]?.args); - } - } -}; - -const epochPeriod = await receiver.epochPeriod(); - -const epochID = async () => { - return Math.floor((await ethers.provider.getBlock("latest")).timestamp / epochPeriod); -}; - -const claim = async (epoch, merkleRoot) => { - const deposit = await receiver.deposit(); - try { - const tx = await ( - await receiver.claim(epoch, merkleRoot, { - value: deposit, - ...options, - }) - ).wait(); - console.log("txID: %s", tx?.transactionHash); - } catch (e) { - if (typeof e === "string") { - console.log("Error: %s", e); - } else if (e instanceof Error) { - console.log("%O", e); - } - } -}; - -const verifyBatch = async (epoch) => { - var tx; - try { - tx = await (await receiver.verifyBatch(epoch, options)).wait(); - console.log("txID: %s", tx?.transactionHash); - } catch (e) { - if (typeof e === "string") { - console.log("Error: %s", e); - } else if (e instanceof Error) { - console.log("%O", e); - } - } finally { - const filter = receiver.filters.BatchVerified(); - const logs = await receiver.queryFilter(filter, tx?.blockNumber, tx?.blockNumber); - console.log("BatchVerified: %O", logs[0]?.args); - } -}; - -const verifyAndRelay = async (epoch, message) => { - var tx; - try { - tx = await (await receiver.verifyAndRelayMessage(epoch, [], message, options)).wait(); - console.log("txID: %s", tx?.transactionHash); - } catch (e) { - if (typeof e === "string") { - console.log("Error: %s", e); - } else if (e instanceof Error) { - console.log("%O", e); - } - } finally { - var filter = receiver.filters.MessageRelayed(); - var logs = await receiver.queryFilter(filter, tx?.blockNumber, tx?.blockNumber); - console.log("MessageRelayed: %O", logs[0]?.args); - - filter = arbitrable.filters.Ruling(); - logs = await arbitrable.queryFilter(filter, tx?.blockNumber, tx?.blockNumber); - console.log("Ruling: %O", logs[0]?.args); - } -}; diff --git a/contracts/scripts/console-init.ts b/contracts/scripts/console-init.ts deleted file mode 100644 index e5849f85e..000000000 --- a/contracts/scripts/console-init.ts +++ /dev/null @@ -1,240 +0,0 @@ -// .load scripts/console-init.ts -me = (await ethers.provider.listAccounts())[0]; -core = await ethers.getContract("KlerosCore"); -sortition = await hre.ethers.getContract("SortitionModule"); -disputeKit = await ethers.getContract("DisputeKitClassic"); -pnk = await ethers.getContract("PNK"); -registry = await ethers.getContract("PolicyRegistry"); -rng = await ethers.getContract("RandomizerRNG"); -rng2 = await ethers.getContract("BlockHashRNG"); -gateway = await ethers.getContract("HomeGatewayToGnosis"); -resolver = await ethers.getContract("DisputeResolver"); -faucet = await ethers.getContract("PNKFaucet"); -sender = await ethers.getContract("VeaOutboxArbToGnosisDevnet"); -options = { gasLimit: 10000000, gasPrice: 5000000000 }; -var disputeID = 0; - -console.log("sortition phase: %s", await sortition.phase()); -console.log("freezingPhase timeout? %s", await core.freezingPhaseTimeout()); - -const relayCreateDispute = async (blockHash, foreignDisputeID) => { - // const blockHash = "0xda3c4d74eeb199345b771748a930a069b172dac9f4b50697f40803581eb13990"; - // const foreignDisputeID = 6; - const extraData = - "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"; - const fee = await core.arbitrationCost(extraData); - var tx; - try { - tx = await ( - await gateway.relayCreateDispute( - 10200, - blockHash, - foreignDisputeID, - 2, - extraData, - "0x34E520dc1d2Db660113b64724e14CEdCD01Ee879", - { - value: fee, - ...options, - } - ) - ).wait(); - console.log("txID: %s", tx?.transactionHash); - - disputeID = ( - await core.queryFilter(core.filters.DisputeCreation(), tx.blockNumber, tx.blockNumber) - )[0].args._disputeID.toNumber(); - console.log("Using disputeID %d from now", disputeID); - } catch (e) { - if (typeof e === "string") { - console.log("Error: %s", e); - } else if (e instanceof Error) { - console.log("%O", e); - } - } finally { - if (tx) { - const filter = core.filters.DisputeCreation(); - const logs = await core.queryFilter(filter, tx.blockNumber, tx.blockNumber); - console.log("DisputeID: %s", logs[0]?.args?._disputeID); - } - } -}; - -const createDisputeOnResolver = async () => { - const choices = 2; - const nbOfJurors = 3; - const feeForJuror = (await core.courts(1)).feeForJuror; - var tx; - try { - tx = await ( - await resolver.createDispute( - "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003", - "", - 2, - { - value: feeForJuror.mul(nbOfJurors), - ...options, - } - ) - ).wait(); - console.log("txID: %s", tx?.transactionHash); - } catch (e) { - if (typeof e === "string") { - console.log("Error: %s", e); - } else if (e instanceof Error) { - console.log("%O", e); - } - } finally { - if (tx) { - const filter = core.filters.DisputeCreation(); - const logs = await core.queryFilter(filter, tx.blockNumber, tx.blockNumber); - console.log("DisputeID: %s", logs[0]?.args?._disputeID); - } - } -}; - -const passPhase = async () => { - const before = await sortition.phase(); - var tx; - try { - tx = await (await sortition.passPhase(options)).wait(); - console.log("txID: %s", tx?.transactionHash); - } catch (e) { - if (typeof e === "string") { - console.log("Error: %s", e); - } else if (e instanceof Error) { - console.log("%O", e); - } - } finally { - const after = await sortition.phase(); - console.log("Phase: %d -> %d", before, after); - } -}; - -const passPeriod = async () => { - const before = (await core.disputes(disputeID)).period; - var tx; - try { - tx = await (await core.passPeriod(disputeID, options)).wait(); - console.log("txID: %s", tx?.transactionHash); - } catch (e) { - if (typeof e === "string") { - console.log("Error: %s", e); - } else if (e instanceof Error) { - console.log("%O", e); - } - } finally { - const after = (await core.disputes(disputeID)).period; - console.log("Period for dispute %s: %d -> %d", disputeID, before, after); - } -}; - -const drawJurors = async () => { - var info = await core.getRoundInfo(disputeID, 0); - console.log("Drawn jurors before: %O", info.drawnJurors); - let tx; - try { - tx = await (await core.draw(disputeID, 10, options)).wait(); - console.log("txID: %s", tx?.transactionHash); - } catch (e) { - if (typeof e === "string") { - console.log("Error: %s", e); - } else if (e instanceof Error) { - console.log("%O", e); - } - } finally { - info = await core.getRoundInfo(disputeID, 0); - console.log("Drawn jurors after: %O", info.drawnJurors); - } -}; - -const isRngReady = async () => { - const requesterID = await rng.requesterToID(disputeKit.address); - const n = await rng.randomNumbers(requesterID); - if (n.eq(0)) { - console.log("rng is NOT ready."); - return false; - } else { - console.log("rng is ready: %s", n.toString()); - return true; - } -}; - -const getRoundInfo = async () => { - console.log("%O", await core.getRoundInfo(disputeID, 0)); -}; - -const executeRuling = async () => { - let tx; - try { - tx = await (await core.execute(disputeID, 0, 10)).wait(); // redistribute - console.log("txID execute: %s", tx?.transactionHash); - - tx = await (await core.executeRuling(disputeID)).wait(); // rule - console.log("txID executeRuling: %s", tx?.transactionHash); - } catch (e) { - if (typeof e === "string") { - console.log("Error: %s", e); - } else if (e instanceof Error) { - console.log("%O", e); - } - } finally { - const dispute = await core.disputes(0); - console.log("Ruled? %s", dispute.ruled); - - const ruling = await core.currentRuling(disputeID); - console.log("Ruling: %d, Tied? %s, Overridden? %s", ruling.ruling, ruling.tied, ruling.overridden); - - var filter = sender.filters.MessageReceived(); - var logs = await sender.queryFilter(filter, tx?.blockNumber, tx?.blockNumber); - console.log("MessageReceived: %O", logs[0]?.args); - } -}; - -const toVoting = async () => { - console.log("Running for disputeID %d", disputeID); - var ready; - try { - ready = await passPhaseCore().then(passPhaseDk).then(passPhaseDk).then(isRngReady); - } catch (e) { - ready = false; - } - while (!ready) { - console.log("Waiting for RNG to be ready...", disputeID); - await new Promise((r) => setTimeout(r, 10000)); - ready = await isRngReady(); - } - console.log("RNG is ready, drawing jurors.", disputeID); - await drawJurors().then(passPhaseDk).then(passPhaseCore).then(passPeriod); -}; - -const epochPeriod = await sender.epochPeriod(); - -const epochID = async () => { - return Math.floor((await ethers.provider.getBlock("latest")).timestamp / epochPeriod); -}; - -const anyBatchToSend = async () => { - return await sender.batchSize(); -}; - -const sendBatch = async () => { - const before = await disputeKit.phase(); - var tx; - try { - tx = await (await sender.sendBatch(options)).wait(); - console.log("txID: %s", tx?.transactionHash); - } catch (e) { - if (typeof e === "string") { - console.log("Error: %s", e); - } else if (e instanceof Error) { - console.log("%O", e); - } - } finally { - const filter = sender.filters.BatchOutgoing(); - const logs = await sender.queryFilter(filter, tx.blockNumber, tx.blockNumber); - console.log("BatchOutgoing: %O", logs[0]?.args); - } -}; - -console.log("disputeID not set!"); diff --git a/contracts/scripts/coverage.sh b/contracts/scripts/coverage.sh deleted file mode 100755 index 9a1fc24eb..000000000 --- a/contracts/scripts/coverage.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env bash - -set -e # exit on error - -rm -rf coverage -mkdir -p coverage - -# Generate the Forge coverage report -forge clean -if [ "$CI" != "true" ]; then - echo "Building contracts with Forge..." - forge build - echo "Running Forge coverage..." - forge coverage --report summary --report lcov --report-file coverage/lcov-forge.info - echo "Forge coverage report generated" -else - # FIXME: Temporarily workaround a CI issue - touch coverage/lcov-forge.info -fi - -# Generate the Hardhat coverage report -yarn clean -echo "Building contracts with Hardhat..." -export VIA_IR=false -yarn build -echo "Running Hardhat coverage..." -yarn hardhat coverage --solcoverjs ./.solcover.js --temp artifacts --show-stack-traces --testfiles "test/**/*.ts" -echo "Hardhat coverage report generated" -mv coverage/lcov.info coverage/lcov-hardhat.info - -# Make the Hardhat report paths relative for consistency with Forge coverage report -sed -i -e 's/\/.*\/kleros-v2\/contracts\///g' coverage/lcov-hardhat.info - -# Merge the two reports -lcov \ - --ignore-errors format \ - --ignore-errors inconsistent \ - --ignore-errors empty \ - --rc max_message_count=3 \ - --rc derive_function_end_line=0 \ - --rc branch_coverage=1 \ - --add-tracefile coverage/lcov-hardhat.info \ - --add-tracefile coverage/lcov-forge.info \ - --output-file coverage/merged-lcov.info - -# Filter out unnecessary contracts from the report -lcov \ - --ignore-errors format \ - --ignore-errors inconsistent \ - --ignore-errors empty \ - --ignore-errors unused \ - --rc max_message_count=3 \ - --rc branch_coverage=1 \ - --rc derive_function_end_line=0 \ - --remove coverage/merged-lcov.info \ - --output-file coverage/filtered-lcov.info \ - "../node_modules" "src/test" "src/token" "src/kleros-v1" "src/proxy/mock" "src/gateway/mock" "src/rng/mock" - -# Open more granular breakdown in browser -if [ "$CI" != "true" ]; then - # Generate the HTML report - genhtml coverage/filtered-lcov.info \ - --ignore-errors format \ - --ignore-errors inconsistent \ - --ignore-errors empty \ - --ignore-errors category \ - --rc branch_coverage=1 \ - --rc max_message_count=3 \ - -o coverage - open coverage/index.html -fi diff --git a/contracts/scripts/disputeCreatorBot.ts b/contracts/scripts/disputeCreatorBot.ts deleted file mode 100644 index b2e2ede07..000000000 --- a/contracts/scripts/disputeCreatorBot.ts +++ /dev/null @@ -1,78 +0,0 @@ -import env from "./utils/env"; -import loggerFactory from "./utils/logger"; -import hre = require("hardhat"); -import { KlerosCore, DisputeResolver } from "../typechain-types"; - -const { ethers } = hre; - -const HEARTBEAT_URL = env.optionalNoDefault("HEARTBEAT_URL_DISPUTOR_BOT"); -const loggerOptions = env.optionalNoDefault("LOGTAIL_TOKEN_DISPUTOR_BOT") - ? { - transportTargetOptions: { - target: "@logtail/pino", - options: { sourceToken: env.require("LOGTAIL_TOKEN_DISPUTOR_BOT") }, - level: env.optional("LOG_LEVEL", "info"), - }, - level: env.optional("LOG_LEVEL", "info"), // for pino-pretty - } - : {}; -const logger = loggerFactory.createLogger(loggerOptions); - -export default async function main() { - logger.info("Starting up"); - - const core = (await ethers.getContract("KlerosCore")) as KlerosCore; - const resolver = (await ethers.getContract("DisputeResolver")) as DisputeResolver; - - if (HEARTBEAT_URL) { - logger.debug("Sending heartbeat"); - fetch(HEARTBEAT_URL); - } else { - logger.debug("Heartbeat not set up, skipping"); - } - const extraData = - "0x" + - "0000000000000000000000000000000000000000000000000000000000000001" + // courtId 1 - "000000000000000000000000000000000000000000000000000000000000000B" + // minJurors 11 - "0000000000000000000000000000000000000000000000000000000000000002"; // disputeKitId 2 - const templates = [ - `{"title":"A reality.eth question","description":"A reality.eth question has been raised to arbitration.","question":"**Kleros Moderate:** Did the user, **degenape6** (ID: 1554345080), break the Telegram group, ***[Kleros Trading Group]()*** (ID: -1001151472172), ***[rules](https://cdn.kleros.link/ipfs/Qme3Qbj9rKUNHUe9vj9rqCLnTVUCWKy2YfveQF8HiuWQSu/Kleros%20Moderate%20Community%20Rules.pdf)*** due to conduct related to the ***[message](https://t.me/c/1151472172/116662)*** (***[backup](https://cdn.kleros.link/ipfs/QmVbFrZR1bcyQzZjvLyXwL9ekDxrqHERykdreRxXrw4nqg/animations_file_23.mp4)***)?","answers":[{"id":"0x01","title":"Yes","reserved":false},{"id":"0x02","title":"No","reserved":false},{"id":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF","title":"Answered Too Soon","reserved":true}],"policyURI":"/ipfs/QmZ5XaV2RVgBADq5qMpbuEwgCuPZdRgCeu8rhGtJWLV6yz","frontendUrl":"https://reality.eth.limo/app/#!/question/0xe78996a233895be74a66f451f1019ca9734205cc-0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39","arbitrableChainID":"100","arbitrableAddress":"0x2e39b8f43d0870ba896f516f78f57cde773cf805","arbitratorChainID":"421614","arbitratorAddress":"0xD08Ab99480d02bf9C092828043f611BcDFEA917b","category":"Oracle","lang":"en_US","specification":"KIP99","version": "1.0"}`, - `{"title":"Add an entry to Ledger Contract Domain Name registry v2","description":"Someone requested to add an entry to Ledger Contract Domain Name registry v2","question":"Does the entry comply with the required criteria?","answers":[{"title":"Yes, Add It","description":"Select this if you think the entry complies with the required criteria and should be added."},{"title":"No, Don't Add It","description":"Select this if you think the entry does not comply with the required criteria and should not be added."}],"policyURI":"/ipfs/QmW3nQcMW2adyqe6TujRTYkyq26PiDqcmmTjdgKiz9ynPV","frontendUrl":"https://curate.kleros.io/tcr/100/0x957a53a994860be4750810131d9c876b2f52d6e1/0xc2c1aa705632f53051f22a9f65967c0944370020a7489aba608bd0d755ca1234","arbitratorChainID":"421614","arbitratorAddress":"0x791812B0B9f2ba260B2DA432BB02Ee23BC1bB509","category":"Curation","specification":"KIP0X","lang":"en_US","version": "1.0"}`, - `{"title":"Omen Question: News & Politics","description":"This reality dispute has been created by Omen, we advise you to read [the Omen Rules](https://cdn.kleros.link/ipfs/QmU1oZzsduGwtC7vCUQPw1QcBP6BDNDkg4t6zkowPucVcx) and consult the evidence provided in [the Market Comments](https://omen.eth.limo/#/0x95b2271039b020aba31b933039e042b60b063800).","question":"**Assuming that today is December 20th 2020, will Joe Biden win the 2020 United States presidential election?**","answers":[{"title":"Yes"},{"title":"No"}],"policyURI":"/ipfs/QmU1oZzsduGwtC7vCUQPw1QcBP6BDNDkg4t6zkowPucVcx","frontendUrl":"https://omen.eth.limo/#/0x95b2271039b020aba31b933039e042b60b063800","arbitratorChainID":"421614","arbitratorAddress":"0x791812B0B9f2ba260B2DA432BB02Ee23BC1bB509","category":"Oracle","specification":"KIP0X","lang":"en_US","version": "1.0"}`, - `{"title":"Proof of Humanity Registration Request","description":"A request to register the specified entry to a list of provable humans.","question":"Should the request to register be accepted?","answers":[{"title":"Yes","description":"Accept the request to register the entry."},{"title":"No","description":"Deny the request."}],"policyURI":"/ipfs/QmYPf2fdSyr9BiSy6pJFUmB1oTUPwg6dhEuFqL1n4ZosgH","frontendUrl":"https://app.proofofhumanity.id/profile/0x00de4b13153673bcae2616b67bf822500d325fc3?network=mainnet","arbitratorChainID":"421614","arbitratorAddress":"0x791812B0B9f2ba260B2DA432BB02Ee23BC1bB509","category":"Curated List","specification":"KIP0X","lang":"en_US","version": "1.0"}`, - ]; - const randomTemplate = templates[Math.floor(Math.random() * templates.length)]; - const nbOfChoices = 2; - const cost = await core["arbitrationCost(bytes)"](extraData); - const tx = await resolver.createDisputeForTemplate( - extraData, - randomTemplate, - "disputeTemplateMapping: TODO", - nbOfChoices, - { - value: cost, - } - ); - - logger.info(`Dispute creation tx: ${tx.hash}`); - const blockNumber = await tx.wait().then((receipt) => receipt?.blockNumber); - const disputeId = await resolver - .queryFilter(resolver.filters.DisputeRequest(), blockNumber, blockNumber) - .then((events) => ethers.toBigInt(events[0].args[1])); - logger.info(`Dispute created with disputeId ${disputeId.toString()}`); - - logger.info("Shutting down"); - await delay(2000); // Some log messages may be lost otherwise -} - -const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }) - .finally(() => { - logger.flush(); - }); diff --git a/contracts/scripts/disputeRelayerBot.ts b/contracts/scripts/disputeRelayerBot.ts deleted file mode 100644 index 87848993a..000000000 --- a/contracts/scripts/disputeRelayerBot.ts +++ /dev/null @@ -1,114 +0,0 @@ -import env from "./utils/env"; -import loggerFactory from "./utils/logger"; -import hre = require("hardhat"); -import { - KlerosCore, - ForeignGateway__factory, - HomeGateway, - TestERC20, - IArbitrableV2__factory, -} from "../typechain-types"; -import { DisputeRequestEventObject } from "../typechain-types/src/arbitration/interfaces/IArbitrableV2"; -import { HttpNetworkConfig } from "hardhat/types"; -import { DeploymentsExtension } from "hardhat-deploy/types"; - -const { ethers } = hre; -const HEARTBEAT_URL = env.optionalNoDefault("HEARTBEAT_URL_RELAYER_BOT"); - -const loggerOptions = env.optionalNoDefault("LOGTAIL_TOKEN_RELAYER_BOT") - ? { - transportTargetOptions: { - target: "@logtail/pino", - options: { sourceToken: env.require("LOGTAIL_TOKEN_RELAYER_BOT") }, - level: env.optional("LOG_LEVEL", "info"), - }, - level: env.optional("LOG_LEVEL", "info"), // for pino-pretty - } - : {}; - -export default async function main( - foreignNetwork: HttpNetworkConfig, - foreignDeployments: DeploymentsExtension, - foreignGatewayArtifact: string, - homeGatewayArtifact: string, - feeTokenArtifact?: string -) { - const core = await ethers.getContract("KlerosCore"); - const homeGateway = await ethers.getContract(homeGatewayArtifact); - const feeToken = feeTokenArtifact ? await ethers.getContract(feeTokenArtifact) : undefined; - - const foreignChainProvider = new ethers.providers.JsonRpcProvider(foreignNetwork.url); - const foreignGatewayDeployment = await foreignDeployments.get(foreignGatewayArtifact); - const foreignGateway = await ForeignGateway__factory.connect(foreignGatewayDeployment.address, foreignChainProvider); - const foreignChainID = await foreignChainProvider.getNetwork().then((network) => network.chainId); - const arbitrableInterface = IArbitrableV2__factory.createInterface(); - - const logger = loggerFactory.createLogger(loggerOptions).child({ foreignChainId: foreignChainID }); - logger.info(`Listening for events from ${foreignGatewayArtifact}...`); - - if (HEARTBEAT_URL) { - logger.debug("Sending heartbeat"); - fetch(HEARTBEAT_URL); - } else { - logger.debug("Heartbeat not set up, skipping"); - } - - // Event subscription - // WARNING: The callback might run more than once if the script is restarted in the same block - // type Listener = [ eventArg1, ...eventArgN, transactionReceipt ] - foreignGateway.on( - "CrossChainDisputeOutgoing", - async (foreignBlockHash, foreignArbitrable, foreignDisputeID, choices, extraData, txReceipt) => { - logger.info( - `CrossChainDisputeOutgoing: ${foreignBlockHash} ${foreignArbitrable} ${foreignDisputeID} ${choices} ${extraData}` - ); - logger.debug(`tx receipt: ${JSON.stringify(txReceipt)}`); - - // txReceipt is missing the full logs for this tx so we need to request it here - const fullTxReceipt = await foreignChainProvider.getTransactionReceipt(txReceipt.transactionHash); - - // Retrieve the DisputeRequest event - const disputeRequests: DisputeRequestEventObject[] = fullTxReceipt.logs - .filter((log) => log.topics[0] === arbitrableInterface.getEventTopic("DisputeRequest")) - .map((log) => arbitrableInterface.parseLog(log).args as unknown as DisputeRequestEventObject); - logger.warn(`More than 1 DisputeRequest event: not supported yet, skipping the others events.`); - - const disputeRequest = disputeRequests[0]; - logger.info(`tx events DisputeRequest: ${JSON.stringify(disputeRequest)}`); - - const relayCreateDisputeParams = { - foreignBlockHash, - foreignChainID, - foreignArbitrable, - foreignDisputeID, - externalDisputeID: disputeRequest._externalDisputeID, - templateId: disputeRequest._templateId, - templateUri: disputeRequest._templateUri, - choices, - extraData, - }; - logger.info(`Relaying dispute to home chain... ${JSON.stringify(relayCreateDisputeParams)}`); - - let tx; - if (feeToken === undefined) { - // Paying in native Arbitrum ETH - const cost = (await core.functions["arbitrationCost(bytes)"](extraData)).cost; - tx = await homeGateway.functions[ - "relayCreateDispute((bytes32,uint256,address,uint256,uint256,uint256,string,uint256,bytes))" - ](relayCreateDisputeParams, { value: cost }); - } else { - // Paying in ERC20 - const cost = (await core.functions["arbitrationCost(bytes,address)"](extraData, feeToken.address)).cost; - await (await feeToken.approve(homeGateway.address, cost)).wait(); - tx = await homeGateway.functions[ - "relayCreateDispute((bytes32,uint256,address,uint256,uint256,uint256,string,uint256,bytes),uint256)" - ](relayCreateDisputeParams, cost); - } - tx = tx.wait(); - logger.info(`relayCreateDispute txId: ${tx.transactionHash}`); - } - ); - - const delay = (ms) => new Promise((x) => setTimeout(x, ms)); - await delay(60 * 60 * 1000); // 1 hour -} diff --git a/contracts/scripts/disputeRelayerBotFromChiado.ts b/contracts/scripts/disputeRelayerBotFromChiado.ts deleted file mode 100644 index a4c46dc81..000000000 --- a/contracts/scripts/disputeRelayerBotFromChiado.ts +++ /dev/null @@ -1,20 +0,0 @@ -import hre = require("hardhat"); -import relayer from "./disputeRelayerBot"; -import { HttpNetworkConfig } from "hardhat/types"; - -async function main() { - await relayer( - hre.config.networks.chiado as HttpNetworkConfig, - hre.companionNetworks.foreignChiado.deployments, - "ForeignGatewayOnGnosis", - "HomeGatewayToGnosis", - "DAI" - ); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/contracts/scripts/disputeRelayerBotFromHardhat.ts b/contracts/scripts/disputeRelayerBotFromHardhat.ts deleted file mode 100644 index 6031f8baf..000000000 --- a/contracts/scripts/disputeRelayerBotFromHardhat.ts +++ /dev/null @@ -1,19 +0,0 @@ -import hre = require("hardhat"); -import relayer from "./disputeRelayerBot"; -import { HttpNetworkConfig } from "hardhat/types"; - -async function main() { - await relayer( - hre.config.networks.localhost as HttpNetworkConfig, - hre.companionNetworks.foreign.deployments, - "ForeignGatewayOnEthereum", - "HomeGatewayToEthereum" - ); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/contracts/scripts/disputeRelayerBotFromSepolia.ts b/contracts/scripts/disputeRelayerBotFromSepolia.ts deleted file mode 100644 index 12df907c8..000000000 --- a/contracts/scripts/disputeRelayerBotFromSepolia.ts +++ /dev/null @@ -1,19 +0,0 @@ -import hre = require("hardhat"); -import relayer from "./disputeRelayerBot"; -import { HttpNetworkConfig } from "hardhat/types"; - -async function main() { - await relayer( - hre.config.networks.sepolia as HttpNetworkConfig, - hre.companionNetworks.foreignSepolia.deployments, - "ForeignGatewayOnEthereum", - "HomeGatewayToEthereum" - ); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/contracts/scripts/docPostprocess.sh b/contracts/scripts/docPostprocess.sh deleted file mode 100755 index a52c0878c..000000000 --- a/contracts/scripts/docPostprocess.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -# Forge doc assumes that the code is in the top-level folder. -# We need to add contracts/ to the path -find $SCRIPT_DIR/../dist -type f \( -name "*.md" -o -name "*.html" \) \ - | xargs sed -i.bak 's|\(github.com/kleros/kleros-v2/.*\)\(/src\)|\1/contracts\2|g' - diff --git a/contracts/scripts/docPreprocess.sh b/contracts/scripts/docPreprocess.sh deleted file mode 100755 index 12572ed12..000000000 --- a/contracts/scripts/docPreprocess.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -# Remove unsupported natspec tags -# Known issue: https://github.com/foundry-rs/foundry/issues/4118 -for tag in authors reviewers auditors bounties deployments tools -do - find $SCRIPT_DIR/../src/ -type f -name '*.sol' | xargs sed -i.bak "/^.*@$tag.*$/d" -done - -echo "Use 'git restore src/ && rm src/**/*.sol.bak' to revert the changes" - - diff --git a/contracts/scripts/dotenv.sh b/contracts/scripts/dotenv.sh deleted file mode 100755 index fdb5bdc1a..000000000 --- a/contracts/scripts/dotenv.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -varKey=$1 - -if [ -z "$varKey" ]; then - echo "Env variable name not provided. Exiting..." >&2 - exit 1 -fi - -node -e " - require('dotenv').config({ path: '"$SCRIPT_DIR"/../.env' }) - console.log(process.env.$varKey) -" diff --git a/contracts/scripts/downloadPolicies.sh b/contracts/scripts/downloadPolicies.sh deleted file mode 100755 index babeb14fc..000000000 --- a/contracts/scripts/downloadPolicies.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -function download() #policies -{ - for p in $(cat ${policies}.json | jq -r .[].uri) - do - wget -P $SCRIPT_DIR/../config/$policies https://cdn.kleros.link${p} - done -} - -download policies.v1.mainnet -download policies.v1.gnosischain diff --git a/contracts/scripts/exportDeployments.sh b/contracts/scripts/exportDeployments.sh deleted file mode 100755 index 27c47f070..000000000 --- a/contracts/scripts/exportDeployments.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -function exportJson() { #network - network=$1 - echo "Exporting deployments for $network" - yarn deploy --tags nop --network $network --export deployments/deployments.${network}.json --no-compile -} - -exportJson arbitrumSepolia -exportJson arbitrumSepoliaDevnet -exportJson sepolia -exportJson sepoliaDevnet -exportJson chiado -exportJson chiadoDevnet -exportJson arbitrum -exportJson mainnet diff --git a/contracts/scripts/find-initializer-versions.sh b/contracts/scripts/find-initializer-versions.sh deleted file mode 100755 index 322929812..000000000 --- a/contracts/scripts/find-initializer-versions.sh +++ /dev/null @@ -1,27 +0,0 @@ -#! /usr/bin/env bash - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" - -declare -A rpcUrls -rpcUrls["arbitrum"]=$(mesc url arbitrum_alchemy) -rpcUrls["arbitrumSepolia"]=$(mesc url arbitrumSepolia_alchemy) -rpcUrls["arbitrumSepoliaDevnet"]=$(mesc url arbitrumSepolia_alchemy) - -# event Initialized(uint64 version); -eventTopic=0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 - -for c in arbitrum arbitrumSepolia arbitrumSepoliaDevnet; do - echo "--------------------------------" - echo "$c" - echo "--------------------------------" - for f in "$SCRIPT_DIR"/../deployments/"$c"/*_Proxy.json; do - address=$(jq -r .address "$f") - block=$(jq -r .receipt.blockNumber "$f") - basename "$f" - results=$(cast logs --from-block "$block" --to-block latest $eventTopic --address "$address" --rpc-url "${rpcUrls[$c]}" --json | jq -r .[].data) - initializer=$(cast --to-dec "$(echo "$results" | tail -n1)") - version=$(cast call --rpc-url "${rpcUrls[$c]}" "$address" "version()(string)" --json 2>/dev/null | jq -r '.[0]') - echo "$initializer" @v"$version" - echo - done -done diff --git a/contracts/scripts/generateDeploymentArtifact.sh b/contracts/scripts/generateDeploymentArtifact.sh deleted file mode 100755 index 6daf2a585..000000000 --- a/contracts/scripts/generateDeploymentArtifact.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -if [[ $# -lt 2 ]] -then - echo "usage: $(basename $0) network address" - exit 1 -fi - -network=$1 -address=$2 - -# Limitation: proxy contracts will return the proxy's ABI, not its implementation's ABI. -# Workaround: query the address of the implementation, and manually change the address to the proxy's in the artifact. -# Example: WETH on Gnosis chain, https://gnosisscan.io/address/0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1#code - -case $network in -gnosischain) - url="https://api.gnosisscan.io" - apiKey=$($SCRIPT_DIR/dotenv.sh GNOSISSCAN_API_KEY) - ;; -chiado) - # Warning: these are distinct instances! - # https://blockscout.com/gnosis/chiado/api-docs - # https://blockscout.chiadochain.net - url="https://blockscout.com/gnosis/chiado" - apiKey="" - ;; -arbitrum) - url="https://api.arbiscan.io" - apiKey=$($SCRIPT_DIR/dotenv.sh ARBISCAN_API_KEY) - ;; -arbitrumSepolia) - url="https://api-sepolia.arbiscan.io" - apiKey=$($SCRIPT_DIR/dotenv.sh ARBISCAN_API_KEY) - ;; -mainnet) - url="https://api.etherscan.io" - apiKey=$($SCRIPT_DIR/dotenv.sh ETHERSCAN_API_KEY) - ;; -sepolia) - url="https://api-sepolia.etherscan.io" - apiKey=$($SCRIPT_DIR/dotenv.sh ETHERSCAN_API_KEY) - ;; -*) - echo "error: unknown network $network" - exit 1 -esac - -query="$url/api?module=contract&action=getabi&address=$address" -if [[ -n $apiKey ]] -then - query="$query&apikey=$apiKey" -fi - -result=$(curl -s "$query") -if [[ $(echo "$result" | jq -r .status) == 0 ]] -then - echo "error: contract not verified or does not exist" - abi="[]" -else - abi=$(echo "$result" | jq -r .result) -fi - -jq \ - --arg address "$address" \ - --argjson abi "$abi" \ - '{ "address": $address, "abi": $abi }' <<< '{}' - - diff --git a/contracts/scripts/generateDeploymentsMarkdown.sh b/contracts/scripts/generateDeploymentsMarkdown.sh deleted file mode 100755 index 5ae9dbf7f..000000000 --- a/contracts/scripts/generateDeploymentsMarkdown.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -IGNORED_ARTIFACTS=( - "CREATE3Factory.json" - "MetaEvidence_*" - "PNK.json" - "RandomizerOracle.json" - "_Implementation.json" - "_Proxy.json" - "ChainlinkVRFCoordinator.json" -) - -function generate() { #deploymentDir #explorerUrl - deploymentDir=$1 - explorerUrl=$2 - # shellcheck disable=SC2068 - for f in $(ls -1 $deploymentDir/*.json 2>/dev/null | grep -v ${IGNORED_ARTIFACTS[@]/#/-e } | sort); do - contractName=$(basename $f .json) - address=$(cat $f | jq -r .address) - implementation=$(cat $f | jq -r .implementation) - - if [ "$implementation" != "null" ]; then - echo "- [$contractName: proxy]($explorerUrl$address), [implementation]($explorerUrl$implementation)" - else - echo "- [$contractName]($explorerUrl$address)" - fi - done -} - -echo "### V2 Mainnet" -echo "#### Arbitrum One" -echo -generate "$SCRIPT_DIR/../deployments/arbitrum" "https://arbiscan.io/address/" | grep -v 'DAI\|WETH\|PNKFaucet' -echo -echo "### V2 Testnet" -echo "#### Arbitrum Sepolia" -echo -generate "$SCRIPT_DIR/../deployments/arbitrumSepolia" "https://sepolia.arbiscan.io/address/" -echo -echo "#### Sepolia" -echo -generate "$SCRIPT_DIR/../deployments/sepolia" "https://sepolia.etherscan.io/address/" -echo -echo "#### Chiado" -echo -generate "$SCRIPT_DIR/../deployments/chiado" "https://gnosis-chiado.blockscout.com/address/" -echo - -echo "### V2 Devnet (unstable)" -echo "#### Arbitrum Sepolia" -echo -generate "$SCRIPT_DIR/../deployments/arbitrumSepoliaDevnet" "https://sepolia.arbiscan.io/address/" -echo -echo "#### Sepolia" -echo -generate "$SCRIPT_DIR/../deployments/sepoliaDevnet" "https://sepolia.etherscan.io/address/" -echo -echo "#### Chiado" -echo -generate "$SCRIPT_DIR/../deployments/chiadoDevnet" "https://gnosis-chiado.blockscout.com/address/" diff --git a/contracts/scripts/generateMetrics.sh b/contracts/scripts/generateMetrics.sh deleted file mode 100755 index 4e7bea4be..000000000 --- a/contracts/scripts/generateMetrics.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -SOURCE_DIR="src" - -yarn dlx solidity-code-metrics \ - "$SOURCE_DIR"/arbitration/KlerosCore* \ - "$SOURCE_DIR"/arbitration/PolicyRegistry.sol \ - "$SOURCE_DIR"/arbitration/SortitionModule* \ - "$SOURCE_DIR"/arbitration/arbitrables/DisputeResolver.sol \ - "$SOURCE_DIR"/arbitration/DisputeTemplateRegistry.sol \ - "$SOURCE_DIR"/arbitration/dispute-kits/* \ - "$SOURCE_DIR"/arbitration/evidence/EvidenceModule.sol \ - "$SOURCE_DIR"/arbitration/interfaces/* \ - "$SOURCE_DIR"/libraries/Constants.sol \ - "$SOURCE_DIR"/libraries/Safe* \ - "$SOURCE_DIR"/rng/RNGWithFallback.sol \ - "$SOURCE_DIR"/rng/ChainlinkRNG.sol \ - "$SOURCE_DIR"/rng/IRNG.sol \ - "$SOURCE_DIR"/proxy/UUPSProx* \ - "$SOURCE_DIR"/proxy/Initializable.sol \ ->METRICS.md diff --git a/contracts/scripts/getCourtsV1.ts b/contracts/scripts/getCourtsV1.ts deleted file mode 100644 index e6963f2a8..000000000 --- a/contracts/scripts/getCourtsV1.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { ethers } from "hardhat"; -import { IKlerosLiquid } from "../typechain-types"; -import hre = require("hardhat"); - -interface Court { - id: number; - parent: number; - hiddenVotes: boolean; - minStake: number; - alpha: number; - feeForJuror: number; - jurorsForCourtJump: number; - timesPerPeriod: number[]; -} - -interface Config { - courtAddress: string; - maxCourts: number; -} - -const configByChain = new Map([ - [ - 1, // mainnet - { - courtAddress: "0x988b3A538b618C7A603e1c11Ab82Cd16dbE28069", - maxCourts: 24, - }, - ], - [ - 100, // gnosis - { - courtAddress: "0x9C1dA9A04925bDfDedf0f6421bC7EEa8305F9002", - maxCourts: 18, - }, - ], -]); - -async function main() { - const chainId = Number(await hre.getChainId()); - const courtAddress = configByChain.get(chainId)?.courtAddress ?? hre.ethers.ZeroAddress; - const courtsV1 = (await ethers.getContractAt("IKlerosLiquid", courtAddress)) as IKlerosLiquid; - - const courts: Court[] = []; - const maxCourts = configByChain.get(chainId)?.maxCourts ?? 0; - for (let courtId = 0; courtId < maxCourts; ++courtId) { - const court: Court = await courtsV1.courts(courtId).then( - (result) => - ({ - id: courtId, - parent: ethers.getNumber(result.parent), - hiddenVotes: result.hiddenVotes, - minStake: result.minStake.toString(), - alpha: result.alpha.toString(), - feeForJuror: result.feeForJuror.toString(), - jurorsForCourtJump: result.jurorsForCourtJump.toString(), - timesPerPeriod: [], - } as unknown as Court) - ); - - court.timesPerPeriod = await courtsV1.getSubcourt(courtId).then((result) => { - return result.timesPerPeriod.map((bn) => ethers.getNumber(bn)); - }); - - court.id = courtId; - - // console.log("CourtId %d -> %O", courtId, court); - - courts.push(court); - } - console.log(JSON.stringify(courts, null, "\t")); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/contracts/scripts/getDisputeKits.ts b/contracts/scripts/getDisputeKits.ts deleted file mode 100644 index 32f2b18eb..000000000 --- a/contracts/scripts/getDisputeKits.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { getDisputeKits } from "../deployments/disputeKitsViem"; -import { createPublicClient, http } from "viem"; -import { arbitrumSepolia } from "viem/chains"; - -const rpc = process.env.ARBITRUM_SEPOLIA_RPC; -if (!rpc) { - throw new Error("ARBITRUM_SEPOLIA_RPC is not set"); -} - -const client = createPublicClient({ - chain: arbitrumSepolia, - transport: http(rpc), -}); - -async function main() { - try { - console.log("Fetching DisputeKitCreated events..."); - const disputeKitResult = await getDisputeKits(client, "devnet"); - console.log(disputeKitResult); - } catch (error) { - console.error("Error fetching events:", error); - throw error; - } -} - -if (require.main === module) { - main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); -} diff --git a/contracts/scripts/getDisputeTemplate.ts b/contracts/scripts/getDisputeTemplate.ts deleted file mode 100644 index 105dcfec5..000000000 --- a/contracts/scripts/getDisputeTemplate.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { task } from "hardhat/config"; -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { IDisputeTemplateRegistry } from "../typechain-types"; - -task("get-dispute-template", "Gets a dispute template by ID") - .addPositionalParam("templateId", "The ID of the template to query") - .setAction(async ({ templateId }: { templateId: string }, hre: HardhatRuntimeEnvironment) => { - const { ethers } = hre; - - // Get the contract instance - const disputeTemplateRegistry = await ethers.getContract("DisputeTemplateRegistry"); - - // Query the events - let events; - try { - const filter = disputeTemplateRegistry.filters.DisputeTemplate(BigInt(templateId)); - events = await disputeTemplateRegistry.queryFilter(filter); - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - console.error(`Failed to query events for template ID ${templateId}:`, errorMessage); - return; - } - - if (events.length === 0) { - console.log(`No template found with ID ${templateId}`); - return; - } - - // Get the most recent event - const event = events[events.length - 1]; - - console.log("Template Details:"); - console.log("----------------"); - console.log(`Template ID: ${event.args._templateId}`); - console.log(`Template Tag: ${event.args._templateTag}`); - console.log(`Template Data: ${event.args._templateData}`); - console.log(`Template Data Mappings: ${event.args._templateDataMappings}`); - }); diff --git a/contracts/scripts/getPoliciesV1.ts b/contracts/scripts/getPoliciesV1.ts deleted file mode 100644 index a992be223..000000000 --- a/contracts/scripts/getPoliciesV1.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { ethers } from "hardhat"; -import fetch from "node-fetch"; -import hre = require("hardhat"); - -interface Policy { - court: number; - uri: string; - name: string; - description: string; - summary: string; - requiredSkills: string; -} - -const policyRegistryByChain = new Map([ - [1, "0xCf1f07713d5193FaE5c1653C9f61953D048BECe4"], // mainnet - [100, "0x9d494768936b6bDaabc46733b8D53A937A6c6D7e"], // gnosis -]); - -async function main() { - const chainId = Number(await hre.getChainId()); - const policyRegistryAddress = policyRegistryByChain.get(chainId) ?? hre.ethers.ZeroAddress; - const policyRegistryV1 = await ethers.getContractAt("PolicyRegistry", policyRegistryAddress); - - const fetchPolicy = (url: string): Promise => { - return fetch(url).then((response) => response.json()); - }; - - const fetchPolicyUri = (court: number): Promise => { - return policyRegistryV1.policies(court); - }; - - const policies: Policy[] = []; - for (let court = 0; ; ++court) { - const uri = await fetchPolicyUri(court); - if (!uri) break; - - const policy = await fetchPolicy("https://cdn.kleros.link" + uri); - policy.court = court; - policy.uri = uri; - policies.push(policy); - } - console.log(JSON.stringify(policies, null, "\t")); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/contracts/scripts/keeperBot.ts b/contracts/scripts/keeperBot.ts deleted file mode 100644 index 5d1b2751f..000000000 --- a/contracts/scripts/keeperBot.ts +++ /dev/null @@ -1,864 +0,0 @@ -import hre from "hardhat"; -import { toBigInt, BigNumberish, getNumber, BytesLike } from "ethers"; -import { - DisputeKitClassic, - DisputeKitGated, - DisputeKitGatedShutter, - DisputeKitShutter, - SortitionModule, -} from "../typechain-types"; -import env from "./utils/env"; -import loggerFactory from "./utils/logger"; -import { Cores, getContracts as getContractsForCoreType } from "./utils/contracts"; -import { shutterAutoReveal } from "./keeperBotShutter"; - -const { ethers } = hre; -const SHUTTER_AUTO_REVEAL_ONLY = env.optional("SHUTTER_AUTO_REVEAL_ONLY", "false") === "true"; -const MAX_DRAW_CALLS_WITHOUT_JURORS = 10; -const MAX_DRAW_ITERATIONS = 30; -const MAX_EXECUTE_ITERATIONS = 20; -const MAX_DELAYED_STAKES_ITERATIONS = 50; -const WAIT_FOR_RNG_DURATION = 5 * 1000; // 5 seconds -const ITERATIONS_COOLDOWN_PERIOD = 10 * 1000; // 10 seconds -const HIGH_GAS_LIMIT = { gasLimit: 50_000_000 }; // 50M gas -const HEARTBEAT_URL = env.optionalNoDefault("HEARTBEAT_URL_KEEPER_BOT"); -const SUBGRAPH_URL = env.require("SUBGRAPH_URL"); -const MAX_JURORS_PER_DISPUTE = 1000; // Skip disputes with more than this number of jurors -const CORE_TYPE = env.optional("CORE_TYPE", "base"); -const DISPUTES_TO_SKIP = env - .optional("DISPUTES_TO_SKIP", "") - .split(",") - .map((s) => s.trim()); - -const loggerOptions = env.optionalNoDefault("LOGTAIL_TOKEN_KEEPER_BOT") - ? { - transportTargetOptions: { - target: "@logtail/pino", - options: { sourceToken: env.require("LOGTAIL_TOKEN_KEEPER_BOT") }, - level: env.optional("LOG_LEVEL", "info"), - }, - level: env.optional("LOG_LEVEL", "info"), // for pino-pretty - } - : {}; -const logger = loggerFactory.createLogger(loggerOptions); - -const getContracts = async () => { - const coreType = Cores[CORE_TYPE.toUpperCase() as keyof typeof Cores]; - if (coreType === Cores.UNIVERSITY) { - throw new Error("University is not supported yet"); - } - const contracts = await getContractsForCoreType(hre, coreType); - return { ...contracts, sortition: contracts.sortition as SortitionModule }; -}; - -type Contribution = { - contributor: { - id: string; - }; - choice: string; - rewardWithdrawn: boolean; - coreDispute: { - currentRoundIndex: string; - }; -}; - -type Dispute = { - period: string; - id: string; - currentRoundIndex: string; -}; - -type CustomError = { - data: BytesLike; - reason: string; - code: string; - errorArgs: any[]; - errorName: string; - errorSignature: string; -}; - -enum Period { - EVIDENCE = "evidence", - COMMIT = "commit", - VOTE = "vote", - APPEAL = "appeal", - EXECUTION = "execution", -} - -const PERIODS = Object.values(Period); - -enum Phase { - STAKING = "staking", - GENERATING = "generating", - DRAWING = "drawing", -} -const PHASES = Object.values(Phase); - -const getDisputeKit = async ( - coreDisputeId: string, - coreRoundId: string -): Promise<{ - disputeKit: DisputeKitClassic | DisputeKitShutter | DisputeKitGated | DisputeKitGatedShutter; - localDisputeId: bigint; - localRoundId: bigint; -}> => { - const { core, disputeKitClassic, disputeKitShutter, disputeKitGated, disputeKitGatedShutter } = await getContracts(); - const round = await core.getRoundInfo(coreDisputeId, coreRoundId); - const disputeKitAddress = await core.disputeKits(round.disputeKitID); - let disputeKit: DisputeKitClassic | DisputeKitShutter | DisputeKitGated | DisputeKitGatedShutter; - switch (disputeKitAddress) { - case disputeKitClassic.target: - disputeKit = disputeKitClassic; - break; - case disputeKitShutter?.target: - if (!disputeKitShutter) throw new Error(`DisputeKitShutter not deployed`); - disputeKit = disputeKitShutter; - break; - case disputeKitGated?.target: - if (!disputeKitGated) throw new Error(`DisputeKitGated not deployed`); - disputeKit = disputeKitGated; - break; - case disputeKitGatedShutter?.target: - if (!disputeKitGatedShutter) throw new Error(`DisputeKitGatedShutter not deployed`); - disputeKit = disputeKitGatedShutter; - break; - default: - throw new Error(`Unknown dispute kit: ${disputeKitAddress}`); - } - const [localDisputeId, localRoundId] = await disputeKit.getLocalDisputeRoundID(coreDisputeId, coreRoundId); - return { disputeKit, localDisputeId, localRoundId }; -}; - -const getNonFinalDisputes = async (): Promise => { - const { gql, request } = await import("graphql-request"); // workaround for ESM import - const query = gql` - query NonFinalDisputes { - disputes(where: { period_not: execution }) { - period - id - currentRoundIndex - } - } - `; - // TODO: use a local graph node if chainId is HARDHAT - type Disputes = { disputes: Dispute[] }; - const { disputes } = await request(SUBGRAPH_URL, query); - return disputes; -}; - -const getAppealContributions = async (disputeId: string): Promise => { - const { gql, request } = await import("graphql-request"); // workaround for ESM import - const query = gql` - query AppealContributions($disputeId: String!) { - contributions(where: { coreDispute: $disputeId }) { - contributor { - id - } - ... on ClassicContribution { - choice - rewardWithdrawn - } - coreDispute { - currentRoundIndex - } - } - } - `; - const variables = { disputeId }; - type AppealContributions = { contributions: Contribution[] }; - // TODO: use a local graph node if chainId is HARDHAT - const { contributions } = await request(SUBGRAPH_URL, query, variables); - return contributions; -}; - -const getDisputesWithUnexecutedRuling = async (): Promise => { - const { gql, request } = await import("graphql-request"); // workaround for ESM import - const query = gql` - query DisputesWithUnexecutedRuling { - disputes(where: { period: execution, ruled: false }) { - id - currentRoundIndex - period - } - } - `; - // TODO: use a local graph node if chainId is HARDHAT - type Disputes = { disputes: Dispute[] }; - const { disputes } = await request(SUBGRAPH_URL, query); - return disputes; -}; - -const getUniqueDisputes = (disputes: Dispute[]): Dispute[] => { - return [...new Map(disputes.map((v) => [v.id, v])).values()]; -}; - -const getDisputesWithContributionsNotYetWithdrawn = async (): Promise => { - const { gql, request } = await import("graphql-request"); // workaround for ESM import - const query = gql` - query DisputesWithContributionsNotYetWithdrawn { - classicContributions(where: { rewardWithdrawn: false }) { - coreDispute { - id - period - currentRoundIndex - } - } - } - `; - // TODO: use a local graph node if chainId is HARDHAT - type Contributions = { - classicContributions: { coreDispute: Dispute }[]; - }; - const { classicContributions } = await request(SUBGRAPH_URL, query); - const disputes = classicContributions - .filter((contribution) => contribution.coreDispute.period === "execution") - .map((dispute) => dispute.coreDispute); - return getUniqueDisputes(disputes); -}; - -const getUnstakedJurors = async (disputeId: string): Promise => { - const { gql, request } = await import("graphql-request"); // workaround for ESM import - const query = gql` - query UnstakedJurors($disputeId: String!) { - dispute(id: $disputeId) { - currentRound { - drawnJurors(where: { juror_: { totalStake: 0 } }) { - juror { - userAddress - } - } - } - } - } - `; - type UnstakedJurors = { - dispute: { - currentRound: { - drawnJurors: { juror: { userAddress: string } }[]; - }; - }; - }; - const { dispute } = await request(SUBGRAPH_URL, query, { disputeId }); - if (!dispute || !dispute.currentRound) { - return []; - } - const uniqueAddresses = [ - ...new Set(dispute.currentRound.drawnJurors.map((drawnJuror) => drawnJuror.juror.userAddress)), - ]; - return uniqueAddresses; -}; - -const handleError = (e: any) => { - logger.error(e, "Failure"); -}; - -const isRngReady = async () => { - const { chainlinkRng, randomizerRng, blockHashRNG, sortition } = await getContracts(); - const currentRng = await sortition.rng(); - if (currentRng === chainlinkRng?.target && chainlinkRng !== null) { - const requestID = await chainlinkRng.lastRequestId(); - const n = await chainlinkRng.randomNumbers(requestID); - if (Number(n) === 0) { - logger.info("ChainlinkRNG is NOT ready yet"); - return false; - } else { - logger.info(`ChainlinkRNG is ready: ${n.toString()}`); - return true; - } - } else if (currentRng === randomizerRng?.target && randomizerRng !== null) { - const requestID = await randomizerRng.lastRequestId(); - const n = await randomizerRng.randomNumbers(requestID); - if (Number(n) === 0) { - logger.info("RandomizerRNG is NOT ready yet"); - return false; - } else { - logger.info(`RandomizerRNG is ready: ${n.toString()}`); - return true; - } - } else if (currentRng === blockHashRNG?.target && blockHashRNG !== null) { - const n = await blockHashRNG.receiveRandomness.staticCall(); - if (Number(n) === 0) { - logger.info("BlockHashRNG is NOT ready yet"); - return false; - } else { - logger.info(`BlockHashRNG is ready: ${n.toString()}`); - return true; - } - } else { - logger.error("Unknown RNG at ", currentRng); - return false; - } -}; - -const passPhase = async () => { - const { sortition } = await getContracts(); - let success = false; - try { - await sortition.passPhase.staticCall(); - } catch (e) { - const error = e as CustomError; - const errorDescription = sortition.interface.parseError(error.data)?.signature; - logger.info(`passPhase: not ready yet because of ${errorDescription}`); - return success; - } - const before = getNumber(await sortition.phase()); - try { - const gas = ((await sortition.passPhase.estimateGas()) * 150n) / 100n; // 50% extra gas - const tx = await (await sortition.passPhase({ gasLimit: gas })).wait(); - logger.info(`passPhase txID: ${tx?.hash}`); - } catch (e) { - handleError(e); - } finally { - const after = getNumber(await sortition.phase()); - logger.info(`passPhase: ${PHASES[before]} -> ${PHASES[after]}`); - success = before !== after; // true if successful - } - return success; -}; - -const passPeriod = async (dispute: { id: string }) => { - const { core } = await getContracts(); - let success = false; - try { - await core.passPeriod.staticCall(dispute.id); - } catch (e) { - const error = e as CustomError; - const errorDescription = core.interface.parseError(error.data)?.signature; - logger.info(`passPeriod: not ready yet for dispute ${dispute.id} because of error ${errorDescription}`); - return success; - } - const before = (await core.disputes(dispute.id)).period; - try { - const gas = ((await core.passPeriod.estimateGas(dispute.id)) * 150n) / 100n; // 50% extra gas - const tx = await (await core.passPeriod(dispute.id, { gasLimit: gas })).wait(); - logger.info(`passPeriod txID: ${tx?.hash}`); - } catch (e) { - handleError(e); - } finally { - const after = (await core.disputes(dispute.id)).period; - logger.info(`passPeriod for dispute ${dispute.id}: ${before} -> ${after}`); - success = before !== after; // true if successful - } - return success; -}; - -const drawJurors = async (dispute: { id: string; currentRoundIndex: string }, iterations: number) => { - const { core } = await getContracts(); - let success = false; - try { - const simulatedIterations = iterations * MAX_DRAW_CALLS_WITHOUT_JURORS; // Drawing will be skipped as long as no juror is available in the next MAX_DRAW_CALLS_WITHOUT_JURORS calls to draw() given this nb of iterations. - const { drawnJurors: drawnJurorsBefore } = await core.getRoundInfo(dispute.id, dispute.currentRoundIndex); - const nbDrawnJurors = (await core.draw.staticCall(dispute.id, simulatedIterations, HIGH_GAS_LIMIT)) as bigint; - const extraJurors = nbDrawnJurors - BigInt(drawnJurorsBefore.length); - logger.debug( - `Draw: ${extraJurors} jurors available in the next ${simulatedIterations} iterations for dispute ${dispute.id}` - ); - if (extraJurors <= 0n) { - logger.warn( - `Draw: skipping, no jurors available in the next ${simulatedIterations} iterations for dispute ${dispute.id}` - ); - return success; - } - } catch (e) { - logger.error(`Draw: will fail for ${dispute.id}, skipping`); - return success; - } - try { - const tx = await (await core.draw(dispute.id, iterations, HIGH_GAS_LIMIT)).wait(); - logger.info(`Draw txID: ${tx?.hash}`); - success = true; - } catch (e) { - handleError(e); - } finally { - const roundInfo = await core.getRoundInfo(dispute.id, dispute.currentRoundIndex); - logger.info(`Drawn jurors (last 20): ${roundInfo.drawnJurors.slice(-20)}`); - } - return success; -}; - -const executeRepartitions = async (dispute: { id: string; currentRoundIndex: string }, iterations: number) => { - const { core } = await getContracts(); - let success = false; - try { - await core.execute.staticCall(dispute.id, dispute.currentRoundIndex, iterations, HIGH_GAS_LIMIT); - } catch (e) { - logger.error(`Execute: will fail for ${dispute.id}, skipping`); - return success; - } - try { - const tx = await (await core.execute(dispute.id, dispute.currentRoundIndex, iterations, HIGH_GAS_LIMIT)).wait(); - logger.info(`Execute txID: ${tx?.hash}`); - success = true; - } catch (e) { - handleError(e); - } - return success; -}; - -const executeRuling = async (dispute: { id: string }) => { - const { core } = await getContracts(); - let success = false; - try { - await core.executeRuling.staticCall(dispute.id); - } catch (e) { - logger.error(`ExecuteRuling: will fail for ${dispute.id}, skipping`); - return success; - } - try { - const gas = ((await core.executeRuling.estimateGas(dispute.id)) * 150n) / 100n; // 50% extra gas - const tx = await (await core.executeRuling(dispute.id, { gasLimit: gas })).wait(); - logger.info(`ExecuteRuling txID: ${tx?.hash}`); - success = true; - } catch (e) { - handleError(e); - } - return success; -}; - -const withdrawLeftoverPNK = async (juror: string) => { - const { sortition } = await getContracts(); - let success = false; - try { - await sortition.withdrawLeftoverPNK.staticCall(juror); - } catch (e) { - const error = e as CustomError; - const errorDescription = sortition.interface.parseError(error.data)?.signature; - logger.info(`WithdrawLeftoverPNK: failed for juror ${juror} because of ${errorDescription}, skipping`); - return success; - } - try { - const gas = ((await sortition.withdrawLeftoverPNK.estimateGas(juror)) * 150n) / 100n; // 50% extra gas - const tx = await (await sortition.withdrawLeftoverPNK(juror, { gasLimit: gas })).wait(); - logger.info(`WithdrawLeftoverPNK txID: ${tx?.hash}`); - } catch (e) { - handleError(e); - } finally { - success = true; - } - return success; -}; - -const withdrawAppealContribution = async ( - coreDisputeId: string, - coreRoundId: string, - contribution: Contribution -): Promise => { - const { disputeKit, localDisputeId, localRoundId } = await getDisputeKit(coreDisputeId, coreRoundId); - let success = false; - let amountWithdrawn = 0n; - try { - amountWithdrawn = await disputeKit.withdrawFeesAndRewards.staticCall( - localDisputeId, - contribution.contributor.id, - localRoundId, - contribution.choice - ); - } catch (e) { - logger.warn( - `WithdrawFeesAndRewards: will fail for core dispute #${coreDisputeId}, round #${coreRoundId}, choice ${contribution.choice} and beneficiary ${contribution.contributor.id}, skipping` - ); - return success; - } - if (amountWithdrawn === 0n) { - logger.debug( - `WithdrawFeesAndRewards: no fees or rewards to withdraw for core dispute #${coreDisputeId}, round #${coreRoundId}, choice ${contribution.choice} and beneficiary ${contribution.contributor.id}, skipping` - ); - return success; - } - try { - logger.info( - `WithdrawFeesAndRewards: appeal contribution for core dispute #${coreDisputeId}, round #${coreRoundId}, choice ${contribution.choice} and beneficiary ${contribution.contributor.id}` - ); - const gas = - ((await disputeKit.withdrawFeesAndRewards.estimateGas( - localDisputeId, - contribution.contributor.id, - localRoundId, - contribution.choice - )) * - 150n) / - 100n; // 50% extra gas - const tx = await ( - await disputeKit.withdrawFeesAndRewards( - localDisputeId, - contribution.contributor.id, - localRoundId, - contribution.choice, - { - gasLimit: gas, - } - ) - ).wait(); - logger.info(`WithdrawFeesAndRewards txID: ${tx?.hash}`); - success = true; - } catch (e) { - handleError(e); - } - return success; -}; - -const executeDelayedStakes = async () => { - const { sortition } = await getContracts(); - - // delayedStakes = 1 + delayedStakeWriteIndex - delayedStakeReadIndex - const delayedStakesRemaining = - 1n + (await sortition.delayedStakeWriteIndex()) - (await sortition.delayedStakeReadIndex()); - - const delayedStakes = - delayedStakesRemaining < MAX_DELAYED_STAKES_ITERATIONS - ? delayedStakesRemaining - : toBigInt(MAX_DELAYED_STAKES_ITERATIONS); - - if (delayedStakes === 0n) { - logger.info("No delayed stakes to execute"); - return true; - } - logger.info(`Executing ${delayedStakes} delayed stakes, ${delayedStakesRemaining} remaining`); - let success = false; - try { - await sortition.executeDelayedStakes.staticCall(delayedStakes); - } catch (e) { - logger.error(`executeDelayedStakes: will fail because of ${JSON.stringify(e)}`); - return success; - } - try { - const gas = ((await sortition.executeDelayedStakes.estimateGas(delayedStakes)) * 150n) / 100n; // 50% extra gas - const tx = await (await sortition.executeDelayedStakes(delayedStakes, { gasLimit: gas })).wait(); - logger.info(`executeDelayedStakes txID: ${tx?.hash}`); - } catch (e) { - handleError(e); - } - return success; -}; - -const getMissingJurors = async (dispute: { id: string; currentRoundIndex: string }) => { - const { core } = await getContracts(); - const { nbVotes, drawnJurors } = await core.getRoundInfo(dispute.id, dispute.currentRoundIndex); - return nbVotes - toBigInt(drawnJurors.length); -}; - -const isDisputeFullyDrawn = async (dispute: { id: string; currentRoundIndex: string }): Promise => { - return (await getMissingJurors(dispute)) === 0n; -}; - -const getNumberOfMissingRepartitions = async ( - dispute: { id: string; currentRoundIndex: string }, - coherentCount: BigNumberish -) => { - const { core } = await getContracts(); - const { repartitions, drawnJurors } = await core.getRoundInfo(dispute.id, dispute.currentRoundIndex); - return coherentCount === 0n - ? drawnJurors.length - getNumber(repartitions) - : 2 * drawnJurors.length - getNumber(repartitions); -}; - -const filterDisputesToSkip = (disputes: Dispute[]) => { - logger.debug( - `Skipping disputes: ${disputes - .filter((dispute) => DISPUTES_TO_SKIP.includes(dispute.id)) - .map((dispute) => dispute.id)}` - ); - return disputes.filter((dispute) => !DISPUTES_TO_SKIP.includes(dispute.id)); -}; - -const filterDisputesByPeriod = (disputes: Dispute[], period: Period) => { - return disputes.filter((dispute) => dispute.period === period); -}; - -const mapAsync = (array: T[], callbackfn: (value: T, index: number, array: T[]) => Promise): Promise => { - return Promise.all(array.map(callbackfn)); -}; - -const filterAsync = async ( - array: T[], - callbackfn: (value: T, index: number, array: T[]) => Promise -): Promise => { - const filterMap = await mapAsync(array, callbackfn); - return array.filter((value, index) => filterMap[index]); -}; - -const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); - -const sendHeartbeat = async () => { - if (HEARTBEAT_URL) { - logger.debug("Sending heartbeat"); - fetch(HEARTBEAT_URL); - } else { - logger.debug("Heartbeat not set up, skipping"); - } -}; - -const shutdown = async () => { - logger.info("Shutting down"); - await delay(2000); // Some log messages may be lost otherwise -}; - -async function main() { - const { core, sortition, disputeKitShutter, disputeKitGatedShutter } = await getContracts(); - - const getBlockTime = async () => { - return await ethers.provider.getBlock("latest").then((block) => { - if (block?.timestamp === undefined) return 0; - return block?.timestamp; - }); - }; - - const hasMinStakingTimePassed = async (): Promise => { - const minStakingTime = await sortition.minStakingTime(); - const blockTime = await getBlockTime(); - return await sortition.lastPhaseChange().then((lastPhaseChange) => { - return toBigInt(blockTime) - lastPhaseChange > minStakingTime; - }); - }; - - const hasMaxDrawingTimePassed = async (): Promise => { - const maxDrawingTime = await sortition.maxDrawingTime(); - const blockTime = await getBlockTime(); - return await sortition.lastPhaseChange().then((lastPhaseChange) => { - return toBigInt(blockTime) - lastPhaseChange > maxDrawingTime; - }); - }; - - const isPhaseStaking = async (): Promise => { - return PHASES[getNumber(await sortition.phase())] === Phase.STAKING; - }; - - const isPhaseGenerating = async (): Promise => { - return PHASES[getNumber(await sortition.phase())] === Phase.GENERATING; - }; - - const isPhaseDrawing = async (): Promise => { - return PHASES[getNumber(await sortition.phase())] === Phase.DRAWING; - }; - - logger.info("Starting up"); - - await sendHeartbeat(); - - logger.info(`Current phase: ${PHASES[getNumber(await sortition.phase())]}`); - - // Retrieve the disputes which are in a non-final period - let disputes = await getNonFinalDisputes().catch((e) => handleError(e)); - if (!disputes) { - return; - } - - let disputesWithoutJurors = await filterAsync(disputes, async (dispute) => { - return !(await isDisputeFullyDrawn(dispute)); - }); - - // Just a sanity check - const numberOfDisputesWithoutJurors = await sortition.disputesWithoutJurors(); - if (!(numberOfDisputesWithoutJurors === toBigInt(disputesWithoutJurors.length))) { - logger.error("Discrepancy between SortitionModule.disputesWithoutJurors and KlerosCore.disputes"); - logger.error(`KlerosCore.disputes without jurors = ${disputesWithoutJurors.length}`); - logger.error(`SortitionModule.disputesWithoutJurors = ${numberOfDisputesWithoutJurors}`); - } - - // Skip some disputes - disputes = filterDisputesToSkip(disputes); - disputesWithoutJurors = filterDisputesToSkip(disputesWithoutJurors); - for (const dispute of disputes) { - logger.info(`Dispute #${dispute.id}, round #${dispute.currentRoundIndex}, ${dispute.period} period`); - } - - // ----------------------------------------------- // - // AUTO-REVEAL // - // ----------------------------------------------- // - logger.info("Auto-revealing disputes"); - // Ensure that the disputes ready to be auto-revealed are passed to the voting period otherwise they won't be picked up. - for (const dispute of filterDisputesByPeriod(filterDisputesToSkip(disputes), Period.COMMIT)) { - await passPeriod(dispute); - } - await shutterAutoReveal(disputeKitShutter, DISPUTES_TO_SKIP); - await shutterAutoReveal(disputeKitGatedShutter, DISPUTES_TO_SKIP); - if (SHUTTER_AUTO_REVEAL_ONLY) { - logger.debug("Shutter auto-reveal only, skipping other actions"); - await shutdown(); - return; - } - - logger.info(`Disputes needing more jurors: ${disputesWithoutJurors.map((dispute) => dispute.id)}`); - if ((await hasMinStakingTimePassed()) && disputesWithoutJurors.length > 0) { - // ----------------------------------------------- // - // DRAWING ATTEMPT // - // ----------------------------------------------- // - logger.info("Attempting to draw jurors"); - if (await isPhaseStaking()) { - await passPhase(); - } - if (await isPhaseGenerating()) { - let maxDrawingTimePassed = false; - do { - logger.info("Waiting for RNG to be ready"); - await delay(WAIT_FOR_RNG_DURATION); - maxDrawingTimePassed = await hasMaxDrawingTimePassed(); - } while (!(await isRngReady()) && !maxDrawingTimePassed); - await passPhase(); - } - if (await isPhaseDrawing()) { - let maxDrawingTimePassed = await hasMaxDrawingTimePassed(); - for (const dispute of disputesWithoutJurors) { - if (maxDrawingTimePassed) { - logger.info("Max drawing time passed"); - break; - } - let numberOfMissingJurors = await getMissingJurors(dispute); - if (numberOfMissingJurors > MAX_JURORS_PER_DISPUTE) { - logger.warn(`Skipping dispute #${dispute.id} with too many jurors to draw`); - continue; - } - do { - const drawIterations = Math.min(MAX_DRAW_ITERATIONS, getNumber(numberOfMissingJurors)); - logger.info( - `Drawing ${drawIterations} out of ${numberOfMissingJurors} jurors needed for dispute #${dispute.id}` - ); - if (!(await drawJurors(dispute, drawIterations))) { - logger.info(`Failed to draw jurors for dispute #${dispute.id}, skipping it`); - break; - } - await delay(ITERATIONS_COOLDOWN_PERIOD); // To avoid spiking the gas price - maxDrawingTimePassed = await hasMaxDrawingTimePassed(); - numberOfMissingJurors = await getMissingJurors(dispute); - } while (!(numberOfMissingJurors === 0n) && !maxDrawingTimePassed); - } - // At this point, either all disputes are fully drawn or max drawing time has passed - } - } - - // ----------------------------------------------- // - // BACK TO STAKING PHASE // - // ----------------------------------------------- // - for (let i = 0; i < 3 && !(await isPhaseStaking()); i++) { - await passPhase(); - } - - await sendHeartbeat(); - - logger.info(`Current phase: ${PHASES[getNumber(await sortition.phase())]}`); - - for (const dispute of disputes) { - // ----------------------------------------------- // - // PASS PERIOD // - // ----------------------------------------------- // - await passPeriod(dispute); - } - - // Get all the disputes whose ruling is not yet executed - const unexecutedDisputes = await getDisputesWithUnexecutedRuling(); - logger.info(`Disputes not yet executed: ${unexecutedDisputes.map((dispute) => dispute.id)}`); - - // Get all disputes with contributions not yet withdrawn - const disputesWithContributionsNotYetWithdrawn = await getDisputesWithContributionsNotYetWithdrawn(); - logger.info( - `Disputes with contributions not yet withdrawn: ${disputesWithContributionsNotYetWithdrawn.map( - (dispute) => dispute.id - )}` - ); - - // Disputes union and deduplicate - const unprocessedDisputesInExecution = filterDisputesToSkip( - getUniqueDisputes(unexecutedDisputes.concat(disputesWithContributionsNotYetWithdrawn).concat(disputes)) - ); - logger.info(`Disputes not fully executed: ${unprocessedDisputesInExecution.map((dispute) => dispute.id)}`); - - for (const dispute of unprocessedDisputesInExecution) { - const { period } = await core.disputes(dispute.id); - if (period !== 4n) { - logger.info(`Skipping dispute #${dispute.id} because it is not in the execution period`); - continue; - } - - // ----------------------------------------------- // - // REPARTITIONS EXECUTION // - // ----------------------------------------------- // - const { disputeKit } = await getDisputeKit(dispute.id, dispute.currentRoundIndex); - const coherentCount = await disputeKit.getCoherentCount(dispute.id, dispute.currentRoundIndex); - let numberOfMissingRepartitions = await getNumberOfMissingRepartitions(dispute, coherentCount); - do { - const executeIterations = Math.min(MAX_EXECUTE_ITERATIONS, numberOfMissingRepartitions); - if (executeIterations === 0) { - break; - } - logger.info( - `Executing ${executeIterations} out of ${numberOfMissingRepartitions} repartitions needed for dispute #${dispute.id}` - ); - if (!(await executeRepartitions(dispute, executeIterations))) { - logger.info(`Failed to execute repartitions for dispute #${dispute.id}, skipping it`); - break; - } - numberOfMissingRepartitions = await getNumberOfMissingRepartitions(dispute, coherentCount); - await delay(ITERATIONS_COOLDOWN_PERIOD); // To avoid spiking the gas price - } while (numberOfMissingRepartitions != 0); - - // ----------------------------------------------- // - // WITHDRAW LEFTOVER PNK // - // ----------------------------------------------- // - const unstakedJurors = await getUnstakedJurors(dispute.id); - logger.info(`Unstaked jurors: ${unstakedJurors.map((juror) => juror)}`); - for (const juror of unstakedJurors) { - const leftoverPNK = await sortition.getJurorLeftoverPNK(juror); - if (leftoverPNK > 0n) { - logger.info(`Leftover PNK for juror ${juror}: ${leftoverPNK}, withdrawing...`); - await withdrawLeftoverPNK(juror); - } - } - - // ----------------------------------------------- // - // RULING EXECUTION // - // ----------------------------------------------- // - const { ruled } = await core.disputes(dispute.id); - const { ruling } = await core.currentRuling(dispute.id); - if (!ruled) { - logger.info(`Executing ruling ${ruling} for dispute #${dispute.id}`); - await executeRuling(dispute); - } else { - logger.info(`Ruling already executed for dispute #${dispute.id}`); - } - - // ----------------------------------------------- // - // WITHDRAWAL OF THE APPEAL CONTRIBUTIONS // - // ----------------------------------------------- // - let contributions = await getAppealContributions(dispute.id).catch((e) => handleError(e)); - if (!contributions) { - continue; - } - // Remove contributions already withdrawn and those for other rounds - contributions = contributions.filter((contribution) => { - return !contribution.rewardWithdrawn && contribution.coreDispute.currentRoundIndex === dispute.currentRoundIndex; - }); - // Remove duplicates which may have a different contribution amount for the same round, choice and beneficiary - contributions = [...new Set(contributions)]; - for (let contribution of contributions) { - // Could be improved by pinpointing exactly which round requires a withdrawal, just try all of them for now. - for (let round = toBigInt(dispute.currentRoundIndex); round >= 0; round = round - 1n) { - await withdrawAppealContribution(dispute.id, round.toString(), contribution); - await delay(ITERATIONS_COOLDOWN_PERIOD); // To avoid spiking the gas price - } - } - } - - logger.info(`Current phase: ${PHASES[getNumber(await sortition.phase())]}`); - - // ----------------------------------------------- // - // EXECUTE DELAYED STAKES // - // ----------------------------------------------- // - - if (await isPhaseStaking()) { - await executeDelayedStakes(); - } - - await sendHeartbeat(); - - await shutdown(); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }) - .finally(() => { - logger.flush(); - }); diff --git a/contracts/scripts/keeperBotShutter.ts b/contracts/scripts/keeperBotShutter.ts deleted file mode 100644 index fff463513..000000000 --- a/contracts/scripts/keeperBotShutter.ts +++ /dev/null @@ -1,335 +0,0 @@ -import hre from "hardhat"; -import { getBytes } from "ethers"; -import { DisputeKitGatedShutter, DisputeKitShutter } from "../typechain-types"; -import { decrypt } from "./shutter"; -import env from "./utils/env"; -import loggerFactory from "./utils/logger"; -import { Cores, getContracts as getContractsForCoreType } from "./utils/contracts"; - -const SUBGRAPH_URL = env.require("SUBGRAPH_URL"); -const CORE_TYPE = env.optional("CORE_TYPE", "base"); -const DISPUTES_TO_SKIP = env - .optional("DISPUTES_TO_SKIP", "") - .split(",") - .map((s) => s.trim()); - -const loggerOptions = env.optionalNoDefault("LOGTAIL_TOKEN_KEEPER_BOT") - ? { - transportTargetOptions: { - target: "@logtail/pino", - options: { sourceToken: env.require("LOGTAIL_TOKEN_KEEPER_BOT") }, - level: env.optional("LOG_LEVEL", "info"), - }, - level: env.optional("LOG_LEVEL", "info"), // for pino-pretty - } - : { - level: env.optional("LOG_LEVEL", "info"), - }; -const logger = loggerFactory.createLogger(loggerOptions); - -/** - * Decodes a message string into its component parts - * @param message The message to decode - * @returns Object containing the decoded components - */ -const decode = (message: string) => { - const SEPARATOR = "-"; - const parts = message.split(SEPARATOR); - if (parts.length !== 3) { - throw Error(`Malformed decrypted message (${message})`); - } - const [choice, salt, justification] = parts; - return { - choice: BigInt(choice), - salt, - justification, - }; -}; - -/** - * Parses a Graph vote ID string (e.g., "2-45-1-0") into its components. - * @param graphVoteId - The vote ID string from the Graph. - * @returns An object with disputeKitID, localDisputeID, localRoundID, and voteID as numbers. - */ -const parseGraphVoteId = (graphVoteId: string) => { - const [disputeKitID, localDisputeID, localRoundID, voteID] = graphVoteId.split("-").map(Number); - return { disputeKitID, localDisputeID, localRoundID, voteID }; -}; - -type DisputeVotes = { - votes: { - id: string; - commit: string; - commited: boolean; - voted: boolean; - juror: { - id: string; - }; - }[]; - coreDispute: { - id: string; - currentRoundIndex: string; - }; -}; - -const getShutterDisputesToReveal = async ( - disputeKitShutter: DisputeKitShutter | DisputeKitGatedShutter -): Promise => { - const { gql, request } = await import("graphql-request"); // workaround for ESM import - const query = gql` - query DisputeToAutoReveal($shutterDisputeKit: Bytes) { - disputeKits(where: { address: $shutterDisputeKit, courts_: { hiddenVotes: true } }) { - id - rounds(where: { isCurrentRound: true, dispute_: { period: vote } }) { - id - dispute { - disputeID - currentRoundIndex - currentRound { - id - } - disputeKitDispute { - localRounds { - ... on ClassicRound { - votes { - id - ... on ClassicVote { - commit - commited - voted - juror { - id - } - } - } - } - } - id - currentLocalRoundIndex - coreDispute { - id - currentRoundIndex - } - } - period - } - } - } - } - `; - type ShutterDisputes = { - disputeKits: Array<{ - id: string; - rounds: Array<{ - id: string; - dispute: { - disputeID: string; - currentRoundIndex: string; - currentRound: { - id: string; - }; - disputeKitDispute: Array<{ - localRounds: Array<{ - votes: Array<{ - id: string; - commit: string; - commited: boolean; - voted: boolean; - juror: { - id: string; - }; - }>; - }>; - id: string; - currentLocalRoundIndex: string; - coreDispute: { - id: string; - currentRoundIndex: string; - }; - }>; - period: string; - }; - }>; - }>; - }; - - logger.debug(`Using Shutter dispute kit: ${disputeKitShutter.target}`); - const variables = { shutterDisputeKit: disputeKitShutter.target }; - const { disputeKits } = await request(SUBGRAPH_URL, query, variables); - if (disputeKits.length === 0) { - logger.debug("No Shutter dispute kit found, skipping auto-reveal"); - return []; - } - // For each round, if dispute.disputeKitDispute.length !== 1, filter out the round - let filteredRounds = disputeKits[0].rounds.filter((round) => round.dispute.disputeKitDispute.length === 1); - - // Remove the rounds which are not the current ones - filteredRounds = filteredRounds.filter((round) => round.id === round.dispute.currentRound.id); - - // For each filteredRound, in dispute.disputeKitDispute[0], keep only localRounds[currentLocalRoundIndex] - const disputeVotes = filteredRounds.map((round) => { - const dk = round.dispute.disputeKitDispute[0]; - const idx = Number(dk.currentLocalRoundIndex); - const filteredLocalRounds = dk.localRounds.filter((_, i) => i === idx); - return { - coreDispute: dk.coreDispute, - votes: filteredLocalRounds[0].votes, - }; - }); - - // Filter out the disputes without votes and the votes where committed is false or voted is true - const filteredDisputeVotes = disputeVotes - .map((item) => ({ - ...item, - votes: item.votes.filter((vote) => vote.commited && !vote.voted), - })) - .filter((item) => item.votes.length > 0); - - return filteredDisputeVotes; -}; - -export const shutterAutoReveal = async ( - disputeKitShutter: DisputeKitShutter | DisputeKitGatedShutter | null, - disputesToSkip: string[] -) => { - if (!disputeKitShutter) { - logger.debug("No Shutter dispute kit found, skipping auto-reveal"); - return []; - } - - logger.info(`Using Shutter API: ${process.env.SHUTTER_API ?? "mainnet"}`); - - const shutterDisputes = await getShutterDisputesToReveal(disputeKitShutter); - logger.info(`Votes to auto-reveal: ${JSON.stringify(shutterDisputes, null, 2)}`); - - for (const dispute of shutterDisputes) { - const { coreDispute, votes } = dispute; - if (disputesToSkip.includes(coreDispute.id)) { - logger.info(`Skipping disputeID: ${coreDispute.id}`); - continue; - } - const decryptCache = new Map(); // Cache for decrypted messages: key is `${_encryptedVote}-${_identity}` - const decryptedToVoteIDs = new Map(); // Map from decryptedMessage string to array of voteIDs - const decryptedToSample = new Map(); // Map from decryptedMessage string to a sample { _encryptedVote, _identity } (for logging/debug) - - // For each vote, decrypt the message and group voteIDs by decryptedMessage - for (const vote of votes) { - const { voteID } = parseGraphVoteId(vote.id); - - // Retrieve the CommitCastShutter events - const filter = disputeKitShutter.filters.CommitCastShutter(coreDispute.id, vote.juror.id, getBytes(vote.commit)); - const events = await disputeKitShutter.queryFilter(filter); - if (events.length === 0) { - logger.error(`No CommitCastShutter event found for disputeID: ${coreDispute.id}, voteID: ${vote.id}`); - continue; - } - if (events.length > 1) { - logger.warn( - `Multiple CommitCastShutter events found for disputeID: ${coreDispute.id}, voteID: ${vote.id}, using the first one only` - ); - } - const { _encryptedVote, _identity } = events[0].args; - logger.debug(`CommitCastShutter event: ${JSON.stringify({ _encryptedVote, _identity }, null, 2)}`); - - // Decrypt the message - const cacheKey = `${_encryptedVote.toString()}-${_identity.toString()}`; - let decryptedMessage: string; - if (decryptCache.has(cacheKey)) { - logger.debug(`Using cached value for ${cacheKey}`); - decryptedMessage = decryptCache.get(cacheKey)!; - } else { - try { - logger.debug(`Decrypting message for ${cacheKey}`); - decryptedMessage = await decrypt(_encryptedVote, _identity); - decryptCache.set(cacheKey, decryptedMessage); - } catch (e) { - logger.error(`Error decrypting message for ${cacheKey}: ${e}`); - continue; - } - } - logger.debug(`Decrypted message: ${decryptedMessage}`); - - // Group voteIDs by decryptedMessage - if (!decryptedToVoteIDs.has(decryptedMessage)) { - decryptedToVoteIDs.set(decryptedMessage, []); - decryptedToSample.set(decryptedMessage, { _encryptedVote, _identity }); - } - decryptedToVoteIDs.get(decryptedMessage)!.push(voteID); - } - - // For each unique decryptedMessage, decode and castVote once with all voteIDs - for (const [decryptedMessage, voteIDs] of decryptedToVoteIDs.entries()) { - const decodedMessage = decode(decryptedMessage); - logger.info( - `Decoded message for voteIDs [${voteIDs.join(", ")}]: ${JSON.stringify({ choice: decodedMessage.choice.toString(), salt: decodedMessage.salt, justification: decodedMessage.justification }, null, 2)}` - ); - // Simulate - try { - await disputeKitShutter.castVoteShutter.staticCall( - coreDispute.id, - voteIDs, - decodedMessage.choice, - decodedMessage.salt, - decodedMessage.justification - ); - } catch (e) { - logger.error( - `CastVoteShutter: will fail for disputeID: ${coreDispute.id} and voteIDs [${voteIDs.join(", ")}], skipping` - ); - continue; - } - // Execute with extra gas - try { - const gas = - ((await disputeKitShutter.castVoteShutter.estimateGas( - coreDispute.id, - voteIDs, - decodedMessage.choice, - decodedMessage.salt, - decodedMessage.justification - )) * - 150n) / - 100n; // 50% extra gas - const tx = await disputeKitShutter.castVoteShutter( - coreDispute.id, - voteIDs, - decodedMessage.choice, - decodedMessage.salt, - decodedMessage.justification, - { gasLimit: gas } - ); - logger.info(`Cast vote transaction: ${tx.hash}`); - } catch (e) { - logger.error(e, "Failure"); - continue; - } - } - } -}; - -const getContracts = async () => { - const coreType = Cores[CORE_TYPE.toUpperCase() as keyof typeof Cores]; - if (coreType === Cores.UNIVERSITY) { - throw new Error("University is not supported yet"); - } - return await getContractsForCoreType(hre, coreType); -}; - -async function main() { - logger.debug("Starting..."); - const { disputeKitShutter, disputeKitGatedShutter } = await getContracts(); - await shutterAutoReveal(disputeKitShutter, DISPUTES_TO_SKIP); - await shutterAutoReveal(disputeKitGatedShutter, DISPUTES_TO_SKIP); -} - -if (require.main === module) { - main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }) - .finally(() => { - logger.flush(); - }); -} diff --git a/contracts/scripts/populateCourts.ts b/contracts/scripts/populateCourts.ts deleted file mode 100644 index cf86c9cbb..000000000 --- a/contracts/scripts/populateCourts.ts +++ /dev/null @@ -1,278 +0,0 @@ -import { task, types } from "hardhat/config"; -import { KlerosCore, KlerosCoreUniversity } from "../typechain-types"; -import { BigNumberish, toBigInt, toNumber } from "ethers"; -import courtsV1Mainnet from "../config/courts.v1.mainnet.json"; -import courtsV1GnosisChain from "../config/courts.v1.gnosischain.json"; -import courtsV2ArbitrumTestnet from "../config/courts.v2.testnet.json"; -import courtsV2ArbitrumDevnet from "../config/courts.v2.devnet.json"; -import courtsV2Mainnet from "../config/courts.v2.mainnet.json"; -import { isDevnet } from "../deploy/utils"; -import { execute, writeTransactionBatch } from "./utils/execution"; -import { getContracts, Cores } from "./utils/contracts"; - -enum HomeChains { - ARBITRUM_ONE = 42161, - ARBITRUM_SEPOLIA = 421614, - HARDHAT = 31337, -} - -enum Sources { - V1_MAINNET, - V1_GNOSIS, - V2_DEVNET, - V2_TESTNET, - V2_MAINNET, -} - -type Court = { - id: number; - parent: number; - hiddenVotes: boolean; - minStake: BigNumberish; - alpha: BigNumberish; - feeForJuror: BigNumberish; - jurorsForCourtJump: BigNumberish; - timesPerPeriod: BigNumberish[]; - supportedDisputeKits?: BigNumberish[]; -}; - -const ETH_USD = 4000n; -const DISPUTE_KIT_CLASSIC = 1n; -const TEN_THOUSAND_GWEI = 10n ** 13n; - -task("populate:courts", "Populates the courts and their parameters") - .addOptionalParam( - "from", - "The source of the policies between v1_mainnet, v1_gnosis, v2_devnet, v2_testnet, v2_mainnet (default: auto depending on the network)", - undefined - ) - .addOptionalParam("start", "The starting index for the courts to populate (default: 0)", 0, types.int) - .addOptionalParam( - "maxNumberOfCourts", - "The maximum number of courts to populate (default: all)", - undefined, - types.int - ) - .addOptionalParam("coreType", "The type of core to use between base, university (default: base)", Cores.BASE) - .addFlag("reverse", "Iterates the courts in reverse order, useful to increase minStake in the child courts first") - .addFlag("forceV1ParametersToDev", "Use development values for the v1 courts parameters") - .setAction(async (taskArgs, hre) => { - const { getNamedAccounts, getChainId, ethers, network } = hre; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await ethers.getSigners())[0].address; - - const chainId = Number(await getChainId()); - if (!HomeChains[chainId]) { - console.error(`Aborting: script is not compatible with ${chainId}`); - return; - } else { - console.log("deploying to %s with deployer %s", HomeChains[chainId], deployer); - } - - let from: Sources | undefined; - if (taskArgs.from) { - from = Sources[taskArgs.from.toUpperCase() as keyof typeof Sources]; - if (from === undefined) { - console.error("Invalid source, must be one of v1_mainnet, v1_gnosis, v2_devnet, v2_testnet, v2_mainnet"); - return; - } - } else { - from = isDevnet(network) ? Sources.V2_DEVNET : Sources.V2_TESTNET; - } - console.log("Populating from source %s", Sources[from]); - - const coreType = Cores[taskArgs.coreType.toUpperCase() as keyof typeof Cores]; - if (coreType === undefined) { - console.error("Invalid core type, must be one of base, university"); - return; - } - console.log("Using core type %s", coreType); - - const truncateWei = (x: bigint) => (x / TEN_THOUSAND_GWEI) * TEN_THOUSAND_GWEI; - - const parametersUsdToEth = (court: Court): Court => ({ - ...court, - minStake: truncateWei(toBigInt(court.minStake) / ETH_USD), - feeForJuror: truncateWei(toBigInt(court.feeForJuror) / ETH_USD), - }); - - const parametersProductionToDev = (court: Court): Court => ({ - ...court, - minStake: truncateWei(toBigInt(court.minStake) / 10000n), - feeForJuror: truncateWei(ethers.parseEther("0.00001")), - timesPerPeriod: [120, 120, 120, 240], - }); - - // WARNING: skip the Forking court at id 0, so the v1 courts are shifted by 1 - const parametersV1ToV2 = (court: Court): Court => ({ - ...court, - id: court.id++, - parent: court.parent++, - }); - - let courtsV2; - switch (+from) { - case Sources.V1_MAINNET: { - let courtsV1: Court[] = courtsV1Mainnet; - courtsV1 = taskArgs.forceV1ParametersToDev ? courtsV1.map(parametersProductionToDev) : courtsV1; - courtsV2 = courtsV1.map(parametersV1ToV2); - break; - } - case Sources.V1_GNOSIS: { - let courtsV1: Court[] = courtsV1GnosisChain.map(parametersUsdToEth); - courtsV1 = taskArgs.forceV1ParametersToDev ? courtsV1.map(parametersProductionToDev) : courtsV1; - courtsV2 = courtsV1.map(parametersV1ToV2); - break; - } - case Sources.V2_DEVNET: { - courtsV2 = courtsV2ArbitrumDevnet; - break; - } - case Sources.V2_TESTNET: { - courtsV2 = courtsV2ArbitrumTestnet; - break; - } - case Sources.V2_MAINNET: { - courtsV2 = courtsV2Mainnet; - break; - } - default: - throw new Error("Unknown source"); - } - - // Warning: the indices are NOT the court IDs, e.g. the forking court is not present in the config so the indices are shifted by 1 - const start = taskArgs.start; - const end = taskArgs.maxNumberOfCourts ? start + taskArgs.maxNumberOfCourts : courtsV2.length; - console.log(`Keeping only the first ${end - start} courts, starting from ${start}`); - courtsV2 = courtsV2.slice(start, end); - - if (taskArgs.reverse) { - console.log("Reversing the order of courts"); - courtsV2.reverse(); - } - - console.log("courtsV2 = %O", courtsV2); - - const { core } = await getContracts(hre, coreType); - - for (const court of courtsV2) { - const courtPresent = await core.courts(court.id).catch(() => {}); - if (courtPresent) { - console.log("Court %d found: %O", court.id, courtPresent); - - // Court.parent and sortitionSumTreeK cannot be changed. - - let change = false; - - if (courtPresent.hiddenVotes !== court.hiddenVotes) { - change = true; - console.log( - "Court %d: changing hiddenVotes from %d to %d", - court.id, - courtPresent.hiddenVotes, - court.hiddenVotes - ); - } - - if (courtPresent.minStake !== toBigInt(court.minStake)) { - change = true; - console.log("Court %d: changing minStake from %d to %d", court.id, courtPresent.minStake, court.minStake); - } - - if (courtPresent.alpha !== toBigInt(court.alpha)) { - change = true; - console.log("Court %d: changing alpha from %d to %d", court.id, courtPresent.alpha, court.alpha); - } - - if (courtPresent.feeForJuror !== toBigInt(court.feeForJuror)) { - change = true; - console.log( - "Court %d: changing feeForJuror from %d to %d", - court.id, - courtPresent.feeForJuror, - court.feeForJuror - ); - } - - if (courtPresent.jurorsForCourtJump !== toBigInt(court.jurorsForCourtJump)) { - change = true; - console.log( - "Court %d: changing jurorsForCourtJump from %d to %d", - court.id, - courtPresent.jurorsForCourtJump, - court.jurorsForCourtJump - ); - } - - const timesPerPeriodPresent = (await core.getTimesPerPeriod(court.id)).map((bn) => toNumber(bn)); - if (!timesPerPeriodPresent.every((val, index) => val === court.timesPerPeriod[index])) { - change = true; - console.log( - "Court %d: changing timesPerPeriod from %O to %O", - court.id, - timesPerPeriodPresent, - court.timesPerPeriod - ); - } - - if (!change) { - console.log("Court %d: no parameter change", court.id); - continue; - } - try { - await core.changeCourtParameters - .populateTransaction( - court.id, - court.hiddenVotes, - court.minStake, - court.alpha, - court.feeForJuror, - court.jurorsForCourtJump, - [court.timesPerPeriod[0], court.timesPerPeriod[1], court.timesPerPeriod[2], court.timesPerPeriod[3]] - ) - .then(execute); - } catch (error) { - console.error("Error changing court parameters: %s", error); - } - } else { - console.log("Court %d not found, creating it with", court.id, court); - try { - if (coreType === Cores.UNIVERSITY) { - await (core as KlerosCoreUniversity).createCourt - .populateTransaction( - court.parent, - court.hiddenVotes, - court.minStake, - court.alpha, - court.feeForJuror, - court.jurorsForCourtJump, - [court.timesPerPeriod[0], court.timesPerPeriod[1], court.timesPerPeriod[2], court.timesPerPeriod[3]], - [DISPUTE_KIT_CLASSIC] - ) - .then(execute); - } else { - await (core as KlerosCore).createCourt - .populateTransaction( - court.parent, - court.hiddenVotes, - court.minStake, - court.alpha, - court.feeForJuror, - court.jurorsForCourtJump, - [court.timesPerPeriod[0], court.timesPerPeriod[1], court.timesPerPeriod[2], court.timesPerPeriod[3]], - ethers.toBeHex(5), // Not accessible on-chain, but has always been set to the same value so far. - [DISPUTE_KIT_CLASSIC] - ) - .then(execute); - } - } catch (error) { - console.error(`Failed to create court ${court.id}: ${error}`); - } - } - - await new Promise((resolve) => setTimeout(resolve, 100)); - } - - writeTransactionBatch({ name: "populate-courts" }); - }); diff --git a/contracts/scripts/populatePolicyRegistry.ts b/contracts/scripts/populatePolicyRegistry.ts deleted file mode 100644 index 43087268a..000000000 --- a/contracts/scripts/populatePolicyRegistry.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { task, types } from "hardhat/config"; -import { PolicyRegistry } from "../typechain-types"; -import policiesV1Mainnet from "../config/policies.v1.mainnet.json"; -import policiesV1GnosisChain from "../config/policies.v1.gnosischain.json"; -import policiesV2ArbitrumTestnet from "../config/policies.v2.testnet.json"; -import policiesV2ArbitrumDevnet from "../config/policies.v2.devnet.json"; -import policiesV2Mainnet from "../config/policies.v2.mainnet.json"; -import { isDevnet } from "../deploy/utils"; -import { execute, writeTransactionBatch } from "./utils/execution"; - -enum HomeChains { - ARBITRUM_ONE = 42161, - ARBITRUM_SEPOLIA = 421614, - HARDHAT = 31337, -} - -enum Sources { - V1_MAINNET, - V1_GNOSIS, - V2_DEVNET, - V2_TESTNET, - V2_MAINNET, -} - -task("populate:policy-registry", "Populates the policy registry for each court") - .addOptionalParam( - "from", - "The source of the policies between v1_mainnet, v1_gnosis, v2_devnet, v2_testnet, v2_mainnet (default: auto depending on the network)", - undefined - ) - .addOptionalParam("start", "The starting index for the courts to populate (default: 0)", 0, types.int) - .addOptionalParam( - "maxNumberOfCourts", - "The maximum number of courts to populate (default: all)", - undefined, - types.int - ) - .setAction(async (taskArgs, hre) => { - const { getNamedAccounts, getChainId, ethers, network } = hre; - - // fallback to hardhat node signers on local network - const deployer = (await getNamedAccounts()).deployer ?? (await ethers.getSigners())[0].address; - - const chainId = Number(await getChainId()); - if (!HomeChains[chainId]) { - console.error(`Aborting: script is not compatible with ${chainId}`); - return; - } else { - console.log("deploying to %s with deployer %s", HomeChains[chainId], deployer); - } - - let from: Sources | undefined; - if (taskArgs.from) { - from = Sources[taskArgs.from.toUpperCase() as keyof typeof Sources]; - if (from === undefined) { - console.error("Invalid source, must be one of v1_mainnet, v1_gnosis, v2_devnet, v2_testnet, v2_mainnet"); - return; - } - } else { - from = isDevnet(network) ? Sources.V2_DEVNET : Sources.V2_TESTNET; - } - console.log("Populating from source %s", Sources[from]); - - let policiesV2; - switch (+from) { - case Sources.V1_MAINNET: { - const policiesV1 = policiesV1Mainnet; - - // WARNING: skip the Forking court at id 0, so the v1 courts are shifted by 1 - policiesV2 = policiesV1.map((policy) => ({ ...policy, court: policy.court + 1 })); - break; - } - case Sources.V1_GNOSIS: { - const policiesV1 = policiesV1GnosisChain.map((policy) => ({ - ...policy, - name: policy.name.replace("xDai ", ""), - })); - - // WARNING: skip the Forking court at id 0, so the v1 courts are shifted by 1 - policiesV2 = policiesV1.map((policy) => ({ ...policy, court: policy.court + 1 })); - break; - } - case Sources.V2_DEVNET: { - policiesV2 = policiesV2ArbitrumDevnet; - break; - } - case Sources.V2_TESTNET: { - policiesV2 = policiesV2ArbitrumTestnet; - break; - } - case Sources.V2_MAINNET: { - policiesV2 = policiesV2Mainnet; - break; - } - default: - return; - } - - // Warning: the indices are NOT the court IDs, e.g. the forking court is not present in the config so the indices are shifted by 1 - const start = taskArgs.start; - const end = taskArgs.maxNumberOfCourts ? start + taskArgs.maxNumberOfCourts : policiesV2.length; - console.log(`Keeping only the first ${end - start} courts, starting from ${start}`); - policiesV2 = policiesV2.slice(start, end); - - const policyRegistry = await ethers.getContract("PolicyRegistry"); - - for await (const policy of policiesV2) { - console.log("Populating policy for %s Court (%d): %s", policy.name, policy.court, policy.uri); - await policyRegistry.setPolicy.populateTransaction(policy.court, policy.name, policy.uri).then(execute); - } - - writeTransactionBatch({ name: "populate-policy-registry" }); - }); diff --git a/contracts/scripts/populateReadme.sh b/contracts/scripts/populateReadme.sh deleted file mode 100755 index 30442c1af..000000000 --- a/contracts/scripts/populateReadme.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" - -if [ ! -x "$(command -v envsubst)" ]; then - echo >&2 "error: envsubst not installed" - exit 1 -fi - -deployments="$($SCRIPT_DIR/generateDeploymentsMarkdown.sh)" \ - envsubst '$deployments' \ - < README.md.template \ - > README.md diff --git a/contracts/scripts/publish.sh b/contracts/scripts/publish.sh deleted file mode 100755 index cfc441064..000000000 --- a/contracts/scripts/publish.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env bash - -shopt -s extglob - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" - -#-------------------------------------- -# Error handling -#-------------------------------------- - -set -Ee -function _catch { - # Don't propagate to outer shell - exit 0 -} -function _finally { - # TODO: rollback version bump - rm -rf $SCRIPT_DIR/../dist -} -trap _catch ERR -trap _finally EXIT - -#-------------------------------------- - -if [[ "$PWD" != */contracts ]]; then - echo "Error: This script must be run from the contracts directory" - exit 1 -fi - -# Bump the version -yarn version $1 - -# Recompile the contracts -yarn clean -yarn build - -# Rebuild the typechain without mocks -rm -rf artifacts/src/**/*[mM]ock* -find artifacts/src -name "*.dbg.json" -type f -delete -rm -rf typechain-types -yarn typechain --out-dir typechain-types --glob 'artifacts/src/**/*.json' --target ethers-v6 --node16-modules - -# Generate the viem artifacts -yarn viem:generate-devnet -yarn viem:generate-testnet -yarn viem:generate-mainnet - -# Generate the Hardhat artifacts -yarn export:devnet -yarn export:testnet -yarn export:mainnet - -# Build the dist -rm -rf dist -mkdir dist -yarn build:all - -# Copy the README and contracts -cp -pr README.md src/ dist/ - -# Remove unwanted files -rm -rf dist/config -rm -rf dist/deploy -rm -rf dist/scripts -rm -rf dist/test -rm -rf dist/**/mock -rm -rf dist/**/*Mock* -rm -rf dist/hardhat.config* -rm -rf dist/deployments/**/solcInputs -rm -rf dist/deployments/localhost -rm -rf dist/deployments/hardhat -rm -rf dist/deployments/hardhat.viem.ts -jq 'del(.scripts.prepare)' package.json >dist/package.json - -# Publish the package -cd dist -npm publish -cd - diff --git a/contracts/scripts/setPoliciesURIs.sh b/contracts/scripts/setPoliciesURIs.sh deleted file mode 100755 index 1bdc4e599..000000000 --- a/contracts/scripts/setPoliciesURIs.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash - -# Check if at least one input file is provided -if [ "$#" -lt 1 ]; then - echo "Usage: $0 [input_policies_file2 ...]" - exit 1 -fi - -# Process each input file -for INPUT_FILE in "$@"; do - # Validate file extension - if [[ ! "$INPUT_FILE" =~ \.json$ ]]; then - echo "Error: Input file $INPUT_FILE must have a .json extension" - continue - fi - - echo "Processing $INPUT_FILE..." - - SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - INPUT_FILE_WITHOUT_EXTENSION="${INPUT_FILE%.json}" - POLICIES_DIR="$SCRIPT_DIR/../$INPUT_FILE_WITHOUT_EXTENSION" - HASHES_FILE=$(mktemp) - - echo "Creating $POLICIES_DIR directory..." - mkdir -p $POLICIES_DIR - - # Step 1: Create individual policy files and collect their hashes - echo "Creating individual policy files..." - echo "{" > "$HASHES_FILE" - first=true - - jq -c '.[]' "$INPUT_FILE" | while read -r policy; do - name=$(echo "$policy" | jq -r '.name' | tr ' ' '-') - court=$(echo "$policy" | jq -r '.court') - policy_filepath="$POLICIES_DIR/${name}-Policy.json" - - # Remove the uri field if it exists and save to a temporary file - echo "$policy" | jq 'del(.uri)' > "$policy_filepath" - - # Get IPFS hash - ipfs_hash=$(ipfs add -Q "$policy_filepath") - if [ -n "$ipfs_hash" ]; then - echo "Preparing $name Court ($court): ${name}-Policy.json" - # Add comma for all but the first entry - if [ "$first" = true ]; then - first=false - else - echo "," >> "$HASHES_FILE" - fi - # Store the hash with court as key - echo "\"$court\": \"$ipfs_hash\"" >> "$HASHES_FILE" - else - echo "Failed to get IPFS hash for ${name}-Policy.json" - rm "$HASHES_FILE" - continue 2 - fi - done - - echo "}" >> "$HASHES_FILE" - - # Step 2: Update the input file with URIs - echo "Updating URIs in $INPUT_FILE..." - jq --slurpfile hashes "$HASHES_FILE" ' - map(. + {uri: ("/ipfs/" + ($hashes[0][.court | tostring]))}) - ' "$INPUT_FILE" > "${INPUT_FILE}.tmp" && mv "${INPUT_FILE}.tmp" "$INPUT_FILE" - - rm "$HASHES_FILE" - echo "Done! URIs updated in $INPUT_FILE" - echo "----------------------------------------" -done \ No newline at end of file diff --git a/contracts/scripts/shutter.ts b/contracts/scripts/shutter.ts deleted file mode 100644 index 169e3ce2c..000000000 --- a/contracts/scripts/shutter.ts +++ /dev/null @@ -1,293 +0,0 @@ -import { encryptData, decrypt as shutterDecrypt } from "@shutter-network/shutter-sdk"; -import { Hex, stringToHex, hexToString } from "viem"; -import crypto from "crypto"; -import "isomorphic-fetch"; -import env from "./utils/env"; - -// Time in seconds to wait before the message can be decrypted -export const DECRYPTION_DELAY = 5; - -const SHUTTER_API_URL = { - mainnet: "https://shutter-api.shutter.network", - testnet: "https://shutter-api.chiado.staging.shutter.network", -}; - -const SHUTTER_API = env.optional("SHUTTER_API", "mainnet") as keyof typeof SHUTTER_API_URL; -const SHUTTER_API_KEY = env.optionalNoDefault("SHUTTER_API_KEY"); - -interface ShutterApiMessageData { - eon: number; - identity: string; - identity_prefix: string; - eon_key: string; - tx_hash: string; -} - -interface ShutterApiResponse { - message: ShutterApiMessageData; - error?: string; -} - -interface ShutterDecryptionKeyData { - decryption_key: string; - identity: string; - decryption_timestamp: number; -} - -/** - * Gets the appropriate headers for API requests, including bearer token for mainnet if available - * @returns Headers object for fetch requests - */ -function getApiHeaders(): Record { - const headers: Record = { - accept: "application/json", - }; - - // Add bearer token for mainnet if available - if (SHUTTER_API === "mainnet" && SHUTTER_API_KEY && SHUTTER_API_KEY?.trim() !== "") { - headers.Authorization = `Bearer ${SHUTTER_API_KEY}`; - } - - return headers; -} - -/** - * Fetches encryption data from the Shutter API - * @param decryptionTimestamp Unix timestamp when decryption should be possible - * @returns Promise with the eon key and identity - */ -async function fetchShutterData(decryptionTimestamp: number): Promise { - try { - console.log(`Sending request to Shutter API with decryption timestamp: ${decryptionTimestamp}`); - - // Generate a random identity prefix - const identityPrefix = generateRandomBytes32(); - console.log(`Generated identity prefix: ${identityPrefix}`); - - const response = await fetch(`${SHUTTER_API_URL[SHUTTER_API]}/api/register_identity`, { - method: "POST", - headers: { - ...getApiHeaders(), - "Content-Type": "application/json", - }, - body: JSON.stringify({ - decryptionTimestamp, - identityPrefix, - }), - }); - - // Log the response status - console.log(`API response status: ${response.status}`); - - // Get the response text - const responseText = await response.text(); - - if (!response.ok) { - throw new Error(`API request failed with status ${response.status}: ${responseText}`); - } - - // Parse the JSON response - let jsonResponse: ShutterApiResponse; - try { - jsonResponse = JSON.parse(responseText); - } catch (error) { - throw new Error(`Failed to parse API response as JSON: ${responseText}`); - } - - // Check if we have the message data - if (!jsonResponse.message) { - throw new Error(`API response missing message data: ${JSON.stringify(jsonResponse)}`); - } - - return jsonResponse.message; - } catch (error) { - console.error("Error fetching data from Shutter API:", error); - throw error; - } -} - -/** - * Fetches the decryption key from the Shutter API - * @param identity The identity used for encryption - * @returns Promise with the decryption key data - */ -async function fetchDecryptionKey(identity: string): Promise { - console.log(`Fetching decryption key for identity: ${identity}`); - - const response = await fetch(`${SHUTTER_API_URL[SHUTTER_API]}/api/get_decryption_key?identity=${identity}`, { - method: "GET", - headers: getApiHeaders(), - }); - - // Get the response text - const responseText = await response.text(); - - // Try to parse the error response even if the request failed - let jsonResponse; - try { - jsonResponse = JSON.parse(responseText); - } catch (error) { - throw new Error(`Failed to parse API response as JSON: ${responseText}`); - } - - // Handle the "too early" error case specifically - if (!response.ok) { - if (jsonResponse?.description?.includes("timestamp not reached yet")) { - throw new Error( - `Cannot decrypt yet: The decryption timestamp has not been reached.\n` + - `Please wait at least ${DECRYPTION_DELAY} seconds after encryption before attempting to decrypt.\n` + - `Error details: ${jsonResponse.description}` - ); - } - throw new Error(`API request failed with status ${response.status}: ${responseText}`); - } - - // Check if we have the message data - if (!jsonResponse.message) { - throw new Error(`API response missing message data: ${JSON.stringify(jsonResponse)}`); - } - - return jsonResponse.message; -} - -/** - * Ensures a string is a valid hex string with 0x prefix - * @param hexString The hex string to validate - * @returns The validated hex string with 0x prefix - */ -function ensureHexString(hexString: string | undefined): `0x${string}` { - if (!hexString) { - throw new Error("Hex string is undefined or null"); - } - - // Add 0x prefix if it doesn't exist - const prefixedHex = hexString.startsWith("0x") ? hexString : `0x${hexString}`; - return prefixedHex as `0x${string}`; -} - -/** - * Generates a random 32 bytes - * @returns Random 32 bytes as a hex string with 0x prefix - */ -function generateRandomBytes32(): `0x${string}` { - return ("0x" + - crypto - .getRandomValues(new Uint8Array(32)) - .reduce((acc, byte) => acc + byte.toString(16).padStart(2, "0"), "")) as Hex; -} - -/** - * Encrypts a message using the Shutter API - * @param message The message to encrypt - * @returns Promise with the encrypted commitment and identity - */ -export async function encrypt(message: string): Promise<{ encryptedCommitment: string; identity: string }> { - // Set decryption timestamp - const decryptionTimestamp = Math.floor(Date.now() / 1000) + DECRYPTION_DELAY; - - // Fetch encryption data from Shutter API - console.log(`Fetching encryption data for decryption at timestamp ${decryptionTimestamp}...`); - const shutterData = await fetchShutterData(decryptionTimestamp); - - // Extract the eon key and identity from the response and ensure they have the correct format - const eonKeyHex = ensureHexString(shutterData.eon_key); - const identityHex = ensureHexString(shutterData.identity); - - // Message to encrypt - const msgHex = stringToHex(message); - - // Generate a random sigma - const sigmaHex = generateRandomBytes32(); - - console.log("Eon Key:", eonKeyHex); - console.log("Identity:", identityHex); - console.log("Sigma:", sigmaHex); - - // Encrypt the message - const encryptedCommitment = await encryptData(msgHex, identityHex, eonKeyHex, sigmaHex); - - return { encryptedCommitment, identity: identityHex }; -} - -/** - * Decrypts a message using the Shutter API - * @param encryptedMessage The encrypted message to decrypt - * @param identity The identity used for encryption - * @returns Promise with the decrypted message - */ -export async function decrypt(encryptedMessage: string, identity: string): Promise { - // Fetch the decryption key - const decryptionKeyData = await fetchDecryptionKey(identity); - console.log("Decryption key:", decryptionKeyData.decryption_key); - - // Ensure the decryption key is properly formatted - const decryptionKey = ensureHexString(decryptionKeyData.decryption_key); - - // Decrypt the message - const decryptedHexMessage = await shutterDecrypt(encryptedMessage, decryptionKey); - - // Convert the decrypted hex message back to a string - return hexToString(decryptedHexMessage as `0x${string}`); -} - -async function main() { - try { - const command = process.argv[2]?.toLowerCase(); - - if (!command) { - console.error(` -Usage: yarn ts-node shutter.ts [arguments] - -Commands: - encrypt Encrypt a message - decrypt Decrypt a message (requires the identity used during encryption) - -Examples: - yarn ts-node shutter.ts encrypt "my secret message" - yarn ts-node shutter.ts decrypt "encrypted-data" "0x1234..."`); - process.exit(1); - } - - switch (command) { - case "encrypt": { - const message = process.argv[3]; - if (!message) { - console.error("Error: Missing message to encrypt"); - console.error("Usage: yarn ts-node shutter.ts encrypt "); - process.exit(1); - } - console.log(`Using Shutter API ${SHUTTER_API_URL[SHUTTER_API]}...`); - const { encryptedCommitment, identity } = await encrypt(message); - console.log("\nEncrypted Commitment:", encryptedCommitment); - console.log("Identity:", identity); - break; - } - case "decrypt": { - const [encryptedMessage, identity] = [process.argv[3], process.argv[4]]; - if (!encryptedMessage || !identity) { - console.error("Error: Missing required arguments for decrypt"); - console.error("Usage: yarn ts-node shutter.ts decrypt "); - console.error("Note: The identity is the one returned during encryption"); - process.exit(1); - } - console.log(`Using Shutter API ${SHUTTER_API_URL[SHUTTER_API]}...`); - const decryptedMessage = await decrypt(encryptedMessage, identity); - console.log("\nDecrypted Message:", decryptedMessage); - break; - } - default: { - console.error(`Error: Unknown command '${command}'`); - console.error("Valid commands are: encrypt, decrypt"); - process.exit(1); - } - } - } catch (error) { - console.error("\nError:", error); - process.exit(1); - } -} - -// Execute if run directly -if (require.main === module) { - main(); -} diff --git a/contracts/scripts/storage-layout.ts b/contracts/scripts/storage-layout.ts deleted file mode 100644 index 70cf166e7..000000000 --- a/contracts/scripts/storage-layout.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { task } from "hardhat/config"; -import { HardhatRuntimeEnvironment } from "hardhat/types"; - -task("storage-layout", "Prints the storage layout of a contract").setAction( - async ({}, hre: HardhatRuntimeEnvironment) => { - await hre.run("compile"); - const buildInfo = await hre.artifacts.getBuildInfo(`src/arbitration/KlerosCore.sol:KlerosCore`); - console.log(buildInfo.output.contracts["src/arbitration/KlerosCore.sol"]["KlerosCore"].storageLayout); - } -); diff --git a/contracts/scripts/utils/contracts.ts b/contracts/scripts/utils/contracts.ts deleted file mode 100644 index 50bcac2f6..000000000 --- a/contracts/scripts/utils/contracts.ts +++ /dev/null @@ -1,163 +0,0 @@ -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { - BlockHashRNG, - ChainlinkRNG, - DisputeKitClassic, - DisputeKitShutter, - DisputeResolver, - DisputeTemplateRegistry, - KlerosCore, - KlerosCoreUniversity, - PNK, - PolicyRegistry, - RandomizerRNG, - SortitionModule, - SortitionModuleUniversity, - TransactionBatcher, - KlerosCoreSnapshotProxy, - EvidenceModule, - DisputeKitGated, - DisputeKitGatedShutter, -} from "../../typechain-types"; - -export const Cores = { - BASE: "BASE", - UNIVERSITY: "UNIVERSITY", -} as const; - -export type Core = (typeof Cores)[keyof typeof Cores]; - -/** - * Get contract names by specifying the coreType (BASE, UNIVERSITY). - * @param coreType - Core type - * @returns Contract names - */ -export const getContractNames = (coreType: Core) => { - const coreSpecificNames = { - [Cores.BASE]: { - core: "KlerosCore", - sortition: "SortitionModule", - disputeKitClassic: "DisputeKitClassic", - disputeKitShutter: "DisputeKitShutter", - disputeKitGated: "DisputeKitGated", - disputeKitGatedShutter: "DisputeKitGatedShutter", - disputeResolver: "DisputeResolver", - }, - [Cores.UNIVERSITY]: { - core: "KlerosCoreUniversity", - sortition: "SortitionModuleUniversity", - disputeKitClassic: "DisputeKitClassicUniversity", - disputeKitShutter: "DisputeKitShutterUniversity", - disputeKitGated: "DisputeKitGatedUniversity", - disputeKitGatedShutter: "DisputeKitGatedShutterUniversity", - disputeResolver: "DisputeResolverUniversity", - }, - }; - - if (!(coreType in coreSpecificNames)) throw new Error("Invalid core type, must be one of BASE, or UNIVERSITY"); - - return { - ...coreSpecificNames[coreType], - evidence: "EvidenceModule", - disputeTemplateRegistry: "DisputeTemplateRegistry", - policyRegistry: "PolicyRegistry", - batcher: "TransactionBatcher", - chainlinkRng: "ChainlinkRNG", - randomizerRng: "RandomizerRNG", - blockHashRNG: "BlockHashRNG", - pnk: "PNK", - snapshotProxy: "KlerosCoreSnapshotProxy", - }; -}; - -/** - * Get contracts by specifying the coreType (BASE, UNIVERSITY). - * @param hre - Hardhat runtime environment - * @param coreType - Core type - * @returns Contracts - */ -export const getContracts = async (hre: HardhatRuntimeEnvironment, coreType: Core) => { - const { ethers } = hre; - let core: KlerosCore | KlerosCoreUniversity; - let sortition: SortitionModule | SortitionModuleUniversity; - switch (coreType) { - case Cores.BASE: - core = await ethers.getContract(getContractNames(coreType).core); - sortition = await ethers.getContract(getContractNames(coreType).sortition); - break; - case Cores.UNIVERSITY: - core = await ethers.getContract(getContractNames(coreType).core); - sortition = await ethers.getContract(getContractNames(coreType).sortition); - break; - default: - throw new Error("Invalid core type, must be one of BASE, or UNIVERSITY"); - } - const disputeKitClassic = await ethers.getContract(getContractNames(coreType).disputeKitClassic); - const disputeKitShutter = await ethers.getContractOrNull( - getContractNames(coreType).disputeKitShutter - ); - const disputeKitGated = await ethers.getContractOrNull(getContractNames(coreType).disputeKitGated); - const disputeKitGatedShutter = await ethers.getContractOrNull( - getContractNames(coreType).disputeKitGatedShutter - ); - const disputeResolver = await ethers.getContract(getContractNames(coreType).disputeResolver); - const disputeTemplateRegistry = await ethers.getContract( - getContractNames(coreType).disputeTemplateRegistry - ); - const evidence = await ethers.getContract(getContractNames(coreType).evidence); - const policyRegistry = await ethers.getContract(getContractNames(coreType).policyRegistry); - const batcher = await ethers.getContract(getContractNames(coreType).batcher); - const chainlinkRng = await ethers.getContractOrNull(getContractNames(coreType).chainlinkRng); - const randomizerRng = await ethers.getContractOrNull(getContractNames(coreType).randomizerRng); - const blockHashRNG = await ethers.getContractOrNull(getContractNames(coreType).blockHashRNG); - const pnk = await ethers.getContract(getContractNames(coreType).pnk); - const snapshotProxy = await ethers.getContractOrNull( - getContractNames(coreType).snapshotProxy - ); - return { - core, - sortition, - disputeKitClassic, - disputeKitShutter, - disputeKitGated, - disputeKitGatedShutter, - disputeResolver, - disputeTemplateRegistry, - evidence, - policyRegistry, - chainlinkRng, - randomizerRng, - blockHashRNG, - pnk, - batcher, - snapshotProxy, - }; -}; - -/** - * Get contracts by inferring the coreType (BASE, UNIVERSITY) from the network, most convenient for most cases. - * @param hre - Hardhat runtime environment - * @returns Contracts - */ -export const getContractsFromNetwork = async (hre: HardhatRuntimeEnvironment) => { - const { network } = hre; - if (["arbitrumSepoliaDevnet", "arbitrumSepolia", "arbitrum"].includes(network.name)) { - return getContracts(hre, Cores.BASE); - } else { - throw new Error("Invalid network"); - } -}; - -/** - * Get contract names by inferring the coreType (BASE, UNIVERSITY) from the network, most convenient for most cases. - * @param hre - Hardhat runtime environment - * @returns Contract names - */ -export const getContractNamesFromNetwork = async (hre: HardhatRuntimeEnvironment) => { - const { network } = hre; - if (["arbitrumSepoliaDevnet", "arbitrumSepolia", "arbitrum"].includes(network.name)) { - return getContractNames(Cores.BASE); - } else { - throw new Error("Invalid network"); - } -}; diff --git a/contracts/scripts/utils/env.ts b/contracts/scripts/utils/env.ts deleted file mode 100644 index ef815ef84..000000000 --- a/contracts/scripts/utils/env.ts +++ /dev/null @@ -1,24 +0,0 @@ -import dotenv from "dotenv"; - -dotenv.config(); - -namespace env { - export const require = (key: string): string => { - const value = process.env[key]; - if (value === undefined) { - throw new Error(`Environment variable ${key} is undefined`); - } - return value; - }; - - export const optional = (key: string, defaultValue: string): string => { - const value = process.env[key]; - return value === undefined ? defaultValue : value; - }; - - export const optionalNoDefault = (key: string): string | undefined => { - return process.env[key]; - }; -} - -export default env; diff --git a/contracts/scripts/utils/execution.ts b/contracts/scripts/utils/execution.ts deleted file mode 100644 index b35709d5d..000000000 --- a/contracts/scripts/utils/execution.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { type ContractTransaction } from "ethers"; -import fs from "fs"; -import { type BuilderTransaction, template, transaction, transactionBuilderUrl } from "./tx-builder"; - -const governableAbi = [ - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const transactions: BuilderTransaction[] = []; - -export const execute = async (tx: ContractTransaction) => { - const hre = require("hardhat"); - const { ethers } = hre; - - const contract = await ethers.getContractAt(governableAbi, tx.to); - const owner = await contract.owner(); - const isContract = (await ethers.provider.getCode(owner)).length > 2; - if (isContract) { - // Don't execute, just log the tx. It must be submitted for execution separately. - const { to, value, data } = tx; - transactions.push(transaction({ to, value, data })); - console.log("tx = %O", tx); - } else { - // Execute the tx - const signer = (await ethers.getSigners())[0]; - await signer.sendTransaction(tx); - } -}; - -export function writeTransactionBatch({ name, outputPath = "tx-batch.json" }: { name: string; outputPath?: string }) { - if (!name?.trim()) throw new Error("Batch name is required"); - - if (!transactions?.length) { - console.log("No transaction batch to write"); - return; - } - - try { - const templateObject = template({ name, transactions }); - fs.writeFileSync(outputPath, JSON.stringify(templateObject, null, 2)); - transactions.length = 0; - console.log(`Transaction batch written to ${outputPath}`); - console.log(`The batch can be submitted to the Safe app at: ${transactionBuilderUrl}`); - } catch (error) { - throw new Error(`Failed to write transaction batch: ${(error as Error).message}`); - } -} diff --git a/contracts/scripts/utils/logger.ts b/contracts/scripts/utils/logger.ts deleted file mode 100644 index d00dc5239..000000000 --- a/contracts/scripts/utils/logger.ts +++ /dev/null @@ -1,36 +0,0 @@ -import pino from "pino"; -import { TransportTargetOptions } from "pino"; -import dotenv from "dotenv"; - -dotenv.config(); - -namespace logger { - export type LoggerOptions = { - level?: string; - transportTargetOptions?: TransportTargetOptions; - }; - - export const createLogger = (options?: LoggerOptions): pino.Logger => { - const targets: TransportTargetOptions[] = [ - { - target: "pino-pretty", - options: {}, - level: options?.level ?? "info", - }, - ]; - - if (options?.transportTargetOptions) { - targets.push(options.transportTargetOptions); - } - - return pino( - { - level: options?.level ?? "info", - timestamp: pino.stdTimeFunctions.isoTime, - }, - pino.transport({ targets: targets }) - ); - }; -} - -export default logger; diff --git a/contracts/scripts/utils/tx-builder.ts b/contracts/scripts/utils/tx-builder.ts deleted file mode 100644 index fd0b52367..000000000 --- a/contracts/scripts/utils/tx-builder.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { arbitrum } from "viem/chains"; - -const owner = "0x66e8DE9B42308c6Ca913D1EE041d6F6fD037A57e"; -const deployer = "0xf1C7c037891525E360C59f708739Ac09A7670c59"; - -// Transaction batch example: https://github.com/safe-global/safe-wallet-monorepo/blob/8bbf3b82edc347b70a038629cd9afd45eb1ed38a/apps/web/cypress/fixtures/test-working-batch.json -export const template = ({ name, transactions }: { name: string; transactions: BuilderTransaction[] }) => ({ - version: "1.0", - chainId: arbitrum.id.toString(), - createdAt: Date.now(), - meta: { - name, - description: "", // Not used because the Safe app doesn't show it - txBuilderVersion: "1.18.0", - createdFromSafeAddress: owner, - createdFromOwnerAddress: deployer, - }, - transactions, -}); - -export const transaction = ({ - to, - value, - data, -}: { - to: string; - value: bigint | undefined; - data: string; -}): BuilderTransaction => ({ - to, - value: value?.toString() ?? "0", - data, - contractMethod: null, - contractInputsValues: null, -}); - -export interface BuilderTransaction { - to: string; - value: string; - data: string; - contractMethod: null; - contractInputsValues: null; -} - -export const transactionBuilderUrl = `https://app.safe.global/apps/open?safe=arb1:${owner}&appUrl=https%3A%2F%2Fapps-portal.safe.global%2Ftx-builder`; diff --git a/contracts/scripts/verifyProxies.sh b/contracts/scripts/verifyProxies.sh deleted file mode 100755 index d051abeb9..000000000 --- a/contracts/scripts/verifyProxies.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -# Etherscan docs: https://docs.etherscan.io/etherscan-v2/api-endpoints/contracts#verifying-proxy-contract-using-curl - -function verify() { #deploymentDir #explorerApiUrl #apiKey #chainId - deploymentDir=$1 - explorerApiUrl=$2 - apiKey=$3 - chainId=$4 - echo "verifying proxies on $(basename $deploymentDir)" - for f in $(ls -1 $deploymentDir/*_Proxy.json 2>/dev/null); do - contractName=$(basename $f .json) - address=$(cat $f | jq -r .address) - echo -n "verifying $contractName as a proxy at $address... " - curl -s \ - -d "address=$address" \ - "$explorerApiUrl?chainid=${chainId}&module=contract&action=verifyproxycontract&apikey=${apiKey}" - echo - done -} - -apiKey=$($SCRIPT_DIR/dotenv.sh ETHERSCAN_API_KEY) -if [ -z "$apiKey" ]; then - echo "API key missing" - exit 1 -fi - -verify "$SCRIPT_DIR/../deployments/arbitrumSepoliaDevnet" "https://api.etherscan.io/v2/api" $apiKey 421614 -echo -verify "$SCRIPT_DIR/../deployments/arbitrumSepolia" "https://api.etherscan.io/v2/api" $apiKey 421614 -echo -verify "$SCRIPT_DIR/../deployments/arbitrum" "https://api.etherscan.io/v2/api" $apiKey 42161 diff --git a/contracts/scripts/viemTest.ts b/contracts/scripts/viemTest.ts deleted file mode 100644 index 0346ec900..000000000 --- a/contracts/scripts/viemTest.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { createPublicClient, http, getContract } from "viem"; -import { arbitrumSepolia } from "viem/chains"; -import { disputeKitClassicConfig } from "../deployments/devnet.viem"; -import { AbiFunction, AbiParametersToPrimitiveTypes, ExtractAbiFunction, FormatAbiItem } from "abitype"; - -const main = async () => { - const client = createPublicClient({ - chain: arbitrumSepolia, - transport: http(), - }); - - const disputeKit = getContract({ - address: disputeKitClassicConfig.address[arbitrumSepolia.id], - abi: disputeKitClassicConfig.abi, - client: client, - }); - - await disputeKit.read.owner().then(console.log); - - // -------------------------------------------------- - - // Working around the "unknown tuple types" issue - // https://viem.sh/docs/faq.html#why-are-contract-function-args-with-fully-named-inputs-represented-as-unnamed-tuple-types-instead-of-object-types - - // Not human-readable - type DelayedStakesFunction = ExtractAbiFunction; - type Result = AbiParametersToPrimitiveTypes; - // -> readonly [bigint, boolean, `0x${string}`] - // Ideally we would get an object instead of a tuple - - // Human-readable - type FormattedFunction = FormatAbiItem; - // -> "function disputes(uint256) view returns (uint256 numberOfChoices, bool jumped, bytes extraData)" - - const getFunctionReturnParameterNames = (abi: AbiFunction[], name: string): string[] => { - const f = abi.filter((abi: AbiFunction) => abi.type === "function" && abi.name === name)[0]; // WARNING: overloaded functions confusion - return f.outputs.map((item) => item.name).filter(String) as string[]; - }; - - const createObject = (keys: string[], values: any[]) => Object.fromEntries(keys.map((k, i) => [k, values[i]])); - - const disputes = await disputeKit.read.disputes([BigInt(0)]); - const disputeParamNames = getFunctionReturnParameterNames(disputeKit.abi as unknown as AbiFunction[], "disputes"); // such type hack - const disputeObject = createObject(disputeParamNames, [...disputes]); - console.log("disputes: %O", disputeObject); -}; - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/contracts/scripts/wagmiHelpers.ts b/contracts/scripts/wagmiHelpers.ts deleted file mode 100644 index 701667c06..000000000 --- a/contracts/scripts/wagmiHelpers.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { readdir, readFile } from "fs/promises"; -import { parse, join } from "path"; -import { ContractConfig } from "@wagmi/cli"; -import { Abi } from "viem"; -import { Chain } from "@wagmi/chains"; - -type ArtifactPartial = { - abi: Abi; -}; - -export const getAbi = (artifact: any) => { - return (artifact as ArtifactPartial).abi; -}; - -export const readArtifacts = async (viemChainName: string, hardhatChainName?: string) => { - const chains = await import("wagmi/chains"); - const chain = chains[viemChainName] as Chain; - if (!chain) { - throw new Error(`Viem chain ${viemChainName} not found`); - } - - const directoryPath = `./deployments/${hardhatChainName ?? viemChainName}`; - const files = await readdir(directoryPath); - - const results: ContractConfig[] = []; - for (const file of files) { - const { name, ext } = parse(file); - if (ext === ".json") { - const filePath = join(directoryPath, file); - const fileContent = await readFile(filePath, "utf-8"); - const jsonContent = JSON.parse(fileContent); - results.push({ - name, - address: { - [chain.id]: jsonContent.address as `0x{string}`, - }, - abi: jsonContent.abi, - }); - } - } - return results; -}; - -// Group contracts by name and merge the address dictionary -export const merge = (arr1: ContractConfig[], arr2: ContractConfig[]) => { - const mergedArr: ContractConfig[] = [...arr1]; - for (const contract of arr2) { - const index = mergedArr.findIndex((c) => c.name === contract.name); - if (index === -1) { - mergedArr.push(contract); - } else { - mergedArr[index] = { - ...mergedArr[index], - address: { - ...(mergedArr[index].address as Record), - ...(contract.address as Record), - }, - }; - } - } - return mergedArr; -}; diff --git a/contracts/src/arbitration/DisputeTemplateRegistry.sol b/contracts/src/arbitration/DisputeTemplateRegistry.sol deleted file mode 100644 index 8d3d68d58..000000000 --- a/contracts/src/arbitration/DisputeTemplateRegistry.sol +++ /dev/null @@ -1,85 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import "../proxy/UUPSProxiable.sol"; -import "../proxy/Initializable.sol"; -import "./interfaces/IDisputeTemplateRegistry.sol"; - -/// @title Dispute Template Registry -/// @dev A contract to maintain a registry of dispute templates. -contract DisputeTemplateRegistry is IDisputeTemplateRegistry, UUPSProxiable, Initializable { - string public constant override version = "2.0.0"; - - // ************************************* // - // * Storage * // - // ************************************* // - - /// @dev The owner of the contract. - address public owner; - - /// @dev The number of templates. - uint256 public templates; - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Initializer - /// @param _owner Owner of the contract. - function initialize(address _owner) external initializer { - owner = _owner; - } - - // ************************ // - // * Governance * // - // ************************ // - - /// @dev Access Control to perform implementation upgrades (UUPS Proxiable) - /// Only the owner can perform upgrades (`onlyByOwner`) - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - /// @dev Changes the owner of the contract. - /// @param _owner The new owner. - function changeOwner(address _owner) external onlyByOwner { - owner = _owner; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Registers a new dispute template. - /// @param _templateTag The tag of the template (optional). - /// @param _templateData The data of the template. - /// @param _templateDataMappings The data mappings of the template. - function setDisputeTemplate( - string memory _templateTag, - string memory _templateData, - string memory _templateDataMappings - ) external returns (uint256 templateId) { - templateId = templates++; - emit DisputeTemplate(templateId, _templateTag, _templateData, _templateDataMappings); - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); -} diff --git a/contracts/src/arbitration/KlerosCore.sol b/contracts/src/arbitration/KlerosCore.sol deleted file mode 100644 index a8c78a910..000000000 --- a/contracts/src/arbitration/KlerosCore.sol +++ /dev/null @@ -1,1333 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {IArbitrableV2, IArbitratorV2} from "./interfaces/IArbitratorV2.sol"; -import {IDisputeKit} from "./interfaces/IDisputeKit.sol"; -import {ISortitionModule} from "./interfaces/ISortitionModule.sol"; -import {Initializable} from "../proxy/Initializable.sol"; -import {UUPSProxiable} from "../proxy/UUPSProxiable.sol"; -import {SafeERC20, IERC20} from "../libraries/SafeERC20.sol"; -import {SafeSend} from "../libraries/SafeSend.sol"; -import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; -import "../libraries/Constants.sol"; - -/// @title KlerosCore -/// Core arbitrator contract for Kleros v2. -/// Note that this contract trusts the PNK token, the dispute kit and the sortition module contracts. -contract KlerosCore is IArbitratorV2, Initializable, UUPSProxiable { - using SafeERC20 for IERC20; - using SafeSend for address payable; - - string public constant override version = "2.0.0"; - - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - enum Period { - evidence, // Evidence can be submitted. This is also when drawing has to take place. - commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes. - vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not. - appeal, // The dispute can be appealed. - execution // Tokens are redistributed and the ruling is executed. - } - - struct Court { - uint96 parent; // The parent court. - bool hiddenVotes; // Whether to use commit and reveal or not. - uint256[] children; // List of child courts. - uint256 minStake; // Minimum PNKs needed to stake in the court. - uint256 alpha; // Basis point of PNKs that are lost when incoherent. - uint256 feeForJuror; // Arbitration fee paid per juror. - uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any. - uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`. - mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit. - bool disabled; // True if the court is disabled. Unused for now, will be implemented later. - } - - struct Dispute { - uint96 courtID; // The ID of the court the dispute is in. - IArbitrableV2 arbitrated; // The arbitrable contract. - Period period; // The current period of the dispute. - bool ruled; // True if the ruling has been executed, false otherwise. - uint256 lastPeriodChange; // The last time the period was changed. - Round[] rounds; - } - - struct Round { - uint256 disputeKitID; // Index of the dispute kit in the array. - uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round. - uint256 totalFeesForJurors; // The total juror fees paid in this round. - uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length. - uint256 repartitions; // A counter of reward repartitions made in this round. - uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round. - address[] drawnJurors; // Addresses of the jurors that were drawn in this round. - uint96[] drawnJurorFromCourtIDs; // The courtIDs where the juror was drawn from, possibly their stake in a subcourt. - uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round. - uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round. - IERC20 feeToken; // The token used for paying fees in this round. - uint256 drawIterations; // The number of iterations passed drawing the jurors for this round. - } - - // Workaround "stack too deep" errors - struct ExecuteParams { - uint256 disputeID; // The ID of the dispute to execute. - uint256 round; // The round to execute. - uint256 coherentCount; // The number of coherent votes in the round. - uint256 numberOfVotesInRound; // The number of votes in the round. - uint256 feePerJurorInRound; // The fee per juror in the round. - uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round. - uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round. - uint256 repartition; // The index of the repartition to execute. - } - - struct CurrencyRate { - bool feePaymentAccepted; - uint64 rateInEth; - uint8 rateDecimals; - } - - // ************************************* // - // * Storage * // - // ************************************* // - - uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH. - - address public owner; // The owner of the contract. - address public guardian; // The guardian able to pause asset withdrawals. - IERC20 public pinakion; // The Pinakion token contract. - address public jurorProsecutionModule; // The module for juror's prosecution. - ISortitionModule public sortitionModule; // Sortition module for drawing. - Court[] public courts; // The courts. - IDisputeKit[] public disputeKits; // Array of dispute kits. - Dispute[] public disputes; // The disputes. - mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH. - bool public paused; // Whether asset withdrawals are paused. - address public wNative; // The wrapped native token for safeSend(). - mapping(address => bool) public arbitrableWhitelist; // Arbitrable whitelist. - bool public arbitrableWhitelistEnabled; // Whether the arbitrable whitelist is enabled. - IERC721 public jurorNft; // Eligible jurors NFT. - - // ************************************* // - // * Events * // - // ************************************* // - - event NewPeriod(uint256 indexed _disputeID, Period _period); - event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable); - event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable); - event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID); - event CourtCreated( - uint96 indexed _courtID, - uint96 indexed _parent, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] _timesPerPeriod, - uint256[] _supportedDisputeKits - ); - event CourtModified( - uint96 indexed _courtID, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] _timesPerPeriod - ); - event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress); - event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable); - event CourtJump( - uint256 indexed _disputeID, - uint256 indexed _roundID, - uint96 indexed _fromCourtID, - uint96 _toCourtID - ); - event DisputeKitJump( - uint256 indexed _disputeID, - uint256 indexed _roundID, - uint256 indexed _fromDisputeKitID, - uint256 _toDisputeKitID - ); - event TokenAndETHShift( - address indexed _account, - uint256 indexed _disputeID, - uint256 indexed _roundID, - uint256 _degreeOfCoherency, - int256 _pnkAmount, - int256 _feeAmount, - IERC20 _feeToken - ); - event LeftoverRewardSent( - uint256 indexed _disputeID, - uint256 indexed _roundID, - uint256 _pnkAmount, - uint256 _feeAmount, - IERC20 _feeToken - ); - event Paused(); - event Unpaused(); - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - modifier onlyByGuardianOrOwner() { - if (guardian != msg.sender && owner != msg.sender) revert GuardianOrOwnerOnly(); - _; - } - - modifier whenPaused() { - if (!paused) revert WhenPausedOnly(); - _; - } - - modifier whenNotPaused() { - if (paused) revert WhenNotPausedOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Initializer (constructor equivalent for upgradable contracts). - /// @param _owner The owner's address. - /// @param _guardian The guardian's address. - /// @param _pinakion The address of the token contract. - /// @param _jurorProsecutionModule The address of the juror prosecution module. - /// @param _disputeKit The address of the default dispute kit. - /// @param _hiddenVotes The `hiddenVotes` property value of the general court. - /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively). - /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court. - /// @param _sortitionExtraData The extra data for sortition module. - /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors. - /// @param _wNative The wrapped native token address, typically wETH. - /// @param _jurorNft NFT contract to vet the jurors. - function initialize( - address _owner, - address _guardian, - IERC20 _pinakion, - address _jurorProsecutionModule, - IDisputeKit _disputeKit, - bool _hiddenVotes, - uint256[4] memory _courtParameters, - uint256[4] memory _timesPerPeriod, - bytes memory _sortitionExtraData, - ISortitionModule _sortitionModuleAddress, - address _wNative, - IERC721 _jurorNft - ) external initializer { - owner = _owner; - guardian = _guardian; - pinakion = _pinakion; - jurorProsecutionModule = _jurorProsecutionModule; - sortitionModule = _sortitionModuleAddress; - wNative = _wNative; - jurorNft = _jurorNft; - - // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported. - disputeKits.push(); - - // DISPUTE_KIT_CLASSIC - disputeKits.push(_disputeKit); - - emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit); - - // FORKING_COURT - // TODO: Fill the properties for the Forking court, emit CourtCreated. - courts.push(); - sortitionModule.createTree(FORKING_COURT, _sortitionExtraData); - - // GENERAL_COURT - Court storage court = courts.push(); - court.parent = FORKING_COURT; - court.children = new uint256[](0); - court.hiddenVotes = _hiddenVotes; - court.minStake = _courtParameters[0]; - court.alpha = _courtParameters[1]; - court.feeForJuror = _courtParameters[2]; - court.jurorsForCourtJump = _courtParameters[3]; - court.timesPerPeriod = _timesPerPeriod; - - sortitionModule.createTree(GENERAL_COURT, _sortitionExtraData); - - uint256[] memory supportedDisputeKits = new uint256[](1); - supportedDisputeKits[0] = DISPUTE_KIT_CLASSIC; - emit CourtCreated( - GENERAL_COURT, - court.parent, - _hiddenVotes, - _courtParameters[0], - _courtParameters[1], - _courtParameters[2], - _courtParameters[3], - _timesPerPeriod, - supportedDisputeKits - ); - _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true); - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /// @dev Access Control to perform implementation upgrades (UUPS Proxiable) - /// Only the owner can perform upgrades (`onlyByOwner`) - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - /// @dev Pause staking and reward execution. Can only be done by guardian or owner. - function pause() external onlyByGuardianOrOwner whenNotPaused { - paused = true; - emit Paused(); - } - - /// @dev Unpause staking and reward execution. Can only be done by owner. - function unpause() external onlyByOwner whenPaused { - paused = false; - emit Unpaused(); - } - - /// @dev Allows the owner to call anything on behalf of the contract. - /// @param _destination The destination of the call. - /// @param _amount The value sent with the call. - /// @param _data The data sent with the call. - function executeOwnerProposal(address _destination, uint256 _amount, bytes memory _data) external onlyByOwner { - (bool success, ) = _destination.call{value: _amount}(_data); - if (!success) revert UnsuccessfulCall(); - } - - /// @dev Changes the `owner` storage variable. - /// @param _owner The new value for the `owner` storage variable. - function changeOwner(address payable _owner) external onlyByOwner { - owner = _owner; - } - - /// @dev Changes the `guardian` storage variable. - /// @param _guardian The new value for the `guardian` storage variable. - function changeGuardian(address _guardian) external onlyByOwner { - guardian = _guardian; - } - - /// @dev Changes the `pinakion` storage variable. - /// @param _pinakion The new value for the `pinakion` storage variable. - function changePinakion(IERC20 _pinakion) external onlyByOwner { - pinakion = _pinakion; - } - - /// @dev Changes the `jurorProsecutionModule` storage variable. - /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable. - function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByOwner { - jurorProsecutionModule = _jurorProsecutionModule; - } - - /// @dev Changes the `_sortitionModule` storage variable. - /// Note that the new module should be initialized for all courts. - /// @param _sortitionModule The new value for the `sortitionModule` storage variable. - function changeSortitionModule(ISortitionModule _sortitionModule) external onlyByOwner { - sortitionModule = _sortitionModule; - } - - /// @dev Add a new supported dispute kit module to the court. - /// @param _disputeKitAddress The address of the dispute kit contract. - function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByOwner { - uint256 disputeKitID = disputeKits.length; - disputeKits.push(_disputeKitAddress); - emit DisputeKitCreated(disputeKitID, _disputeKitAddress); - } - - /// @dev Creates a court under a specified parent court. - /// @param _parent The `parent` property value of the court. - /// @param _hiddenVotes The `hiddenVotes` property value of the court. - /// @param _minStake The `minStake` property value of the court. - /// @param _alpha The `alpha` property value of the court. - /// @param _feeForJuror The `feeForJuror` property value of the court. - /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court. - /// @param _timesPerPeriod The `timesPerPeriod` property value of the court. - /// @param _sortitionExtraData Extra data for sortition module. - /// @param _supportedDisputeKits Indexes of dispute kits that this court will support. - function createCourt( - uint96 _parent, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] memory _timesPerPeriod, - bytes memory _sortitionExtraData, - uint256[] memory _supportedDisputeKits - ) external onlyByOwner { - if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt(); - if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit(); - if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent(); - - uint96 courtID = uint96(courts.length); - Court storage court = courts.push(); - - for (uint256 i = 0; i < _supportedDisputeKits.length; i++) { - if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) { - revert WrongDisputeKitIndex(); - } - _enableDisputeKit(uint96(courtID), _supportedDisputeKits[i], true); - } - // Check that Classic DK support was added. - if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic(); - - court.parent = _parent; - court.children = new uint256[](0); - court.hiddenVotes = _hiddenVotes; - court.minStake = _minStake; - court.alpha = _alpha; - court.feeForJuror = _feeForJuror; - court.jurorsForCourtJump = _jurorsForCourtJump; - court.timesPerPeriod = _timesPerPeriod; - - sortitionModule.createTree(courtID, _sortitionExtraData); - - // Update the parent. - courts[_parent].children.push(courtID); - emit CourtCreated( - uint96(courtID), - _parent, - _hiddenVotes, - _minStake, - _alpha, - _feeForJuror, - _jurorsForCourtJump, - _timesPerPeriod, - _supportedDisputeKits - ); - } - - function changeCourtParameters( - uint96 _courtID, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] memory _timesPerPeriod - ) external onlyByOwner { - Court storage court = courts[_courtID]; - if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) { - revert MinStakeLowerThanParentCourt(); - } - for (uint256 i = 0; i < court.children.length; i++) { - if (courts[court.children[i]].minStake < _minStake) { - revert MinStakeLowerThanParentCourt(); - } - } - court.minStake = _minStake; - court.hiddenVotes = _hiddenVotes; - court.alpha = _alpha; - court.feeForJuror = _feeForJuror; - court.jurorsForCourtJump = _jurorsForCourtJump; - court.timesPerPeriod = _timesPerPeriod; - emit CourtModified( - _courtID, - _hiddenVotes, - _minStake, - _alpha, - _feeForJuror, - _jurorsForCourtJump, - _timesPerPeriod - ); - } - - /// @dev Adds/removes court's support for specified dispute kits. - /// @param _courtID The ID of the court. - /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed. - /// @param _enable Whether add or remove the dispute kits from the court. - function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByOwner { - for (uint256 i = 0; i < _disputeKitIDs.length; i++) { - if (_enable) { - if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) { - revert WrongDisputeKitIndex(); - } - _enableDisputeKit(_courtID, _disputeKitIDs[i], true); - } else { - // Classic dispute kit must be supported by all courts. - if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) { - revert CannotDisableClassicDK(); - } - _enableDisputeKit(_courtID, _disputeKitIDs[i], false); - } - } - } - - /// @dev Changes the supported fee tokens. - /// @param _feeToken The fee token. - /// @param _accepted Whether the token is supported or not as a method of fee payment. - function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByOwner { - currencyRates[_feeToken].feePaymentAccepted = _accepted; - emit AcceptedFeeToken(_feeToken, _accepted); - } - - /// @dev Changes the currency rate of a fee token. - /// @param _feeToken The fee token. - /// @param _rateInEth The new rate of the fee token in ETH. - /// @param _rateDecimals The new decimals of the fee token rate. - function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByOwner { - currencyRates[_feeToken].rateInEth = _rateInEth; - currencyRates[_feeToken].rateDecimals = _rateDecimals; - emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals); - } - - /// @dev Changes the `jurorNft` storage variable. - /// @param _jurorNft The new value for the `jurorNft` storage variable. - function changeJurorNft(IERC721 _jurorNft) external onlyByOwner { - jurorNft = _jurorNft; - } - - /// @dev Adds or removes an arbitrable from whitelist. - /// @param _arbitrable Arbitrable address. - /// @param _allowed Whether add or remove permission. - function changeArbitrableWhitelist(address _arbitrable, bool _allowed) external onlyByOwner { - arbitrableWhitelist[_arbitrable] = _allowed; - } - - /// @dev Enables or disables the arbitrable whitelist. - function changeArbitrableWhitelistEnabled(bool _enabled) external onlyByOwner { - arbitrableWhitelistEnabled = _enabled; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Sets the caller's stake in a court. - /// @param _courtID The ID of the court. - /// @param _newStake The new stake. - /// Note that the existing delayed stake will be nullified as non-relevant. - function setStake(uint96 _courtID, uint256 _newStake) external whenNotPaused { - if (address(jurorNft) != address(0) && jurorNft.balanceOf(msg.sender) == 0) revert NotEligibleForStaking(); - _setStake(msg.sender, _courtID, _newStake, false, OnError.Revert); - } - - /// @dev Sets the stake of a specified account in a court without delaying stake changes, typically to apply a delayed stake or unstake inactive jurors. - /// @param _account The account whose stake is being set. - /// @param _courtID The ID of the court. - /// @param _newStake The new stake. - function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external { - if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly(); - _setStake(_account, _courtID, _newStake, true, OnError.Return); - } - - /// @dev Transfers PNK to the juror by SortitionModule. - /// @param _account The account of the juror whose PNK to transfer. - /// @param _amount The amount to transfer. - function transferBySortitionModule(address _account, uint256 _amount) external { - if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly(); - // Note eligibility is checked in SortitionModule. - pinakion.safeTransfer(_account, _amount); - } - - /// @inheritdoc IArbitratorV2 - function createDispute( - uint256 _numberOfChoices, - bytes memory _extraData - ) external payable override returns (uint256 disputeID) { - if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough(); - - return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value); - } - - /// @inheritdoc IArbitratorV2 - function createDispute( - uint256 _numberOfChoices, - bytes calldata _extraData, - IERC20 _feeToken, - uint256 _feeAmount - ) external override returns (uint256 disputeID) { - if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted(); - if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough(); - - if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed(); - return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount); - } - - function _createDispute( - uint256 _numberOfChoices, - bytes memory _extraData, - IERC20 _feeToken, - uint256 _feeAmount - ) internal returns (uint256 disputeID) { - if (arbitrableWhitelistEnabled && !arbitrableWhitelist[msg.sender]) revert ArbitrableNotWhitelisted(); - (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData); - if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt(); - - disputeID = disputes.length; - Dispute storage dispute = disputes.push(); - dispute.courtID = courtID; - dispute.arbitrated = IArbitrableV2(msg.sender); - dispute.lastPeriodChange = block.timestamp; - - IDisputeKit disputeKit = disputeKits[disputeKitID]; - Court storage court = courts[courtID]; - Round storage round = dispute.rounds.push(); - - // Obtain the feeForJuror in the same currency as the _feeAmount - uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY) - ? court.feeForJuror - : convertEthToTokenAmount(_feeToken, court.feeForJuror); - round.nbVotes = _feeAmount / feeForJuror; - round.disputeKitID = disputeKitID; - round.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha); - round.totalFeesForJurors = _feeAmount; - round.feeToken = IERC20(_feeToken); - - sortitionModule.createDisputeHook(disputeID, 0); // Default round ID. - - disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes); - emit DisputeCreation(disputeID, IArbitrableV2(msg.sender)); - } - - /// @dev Passes the period of a specified dispute. - /// @param _disputeID The ID of the dispute. - function passPeriod(uint256 _disputeID) external { - Dispute storage dispute = disputes[_disputeID]; - Court storage court = courts[dispute.courtID]; - - uint256 currentRound = dispute.rounds.length - 1; - Round storage round = dispute.rounds[currentRound]; - if (dispute.period == Period.evidence) { - if ( - currentRound == 0 && - block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] - ) { - revert EvidenceNotPassedAndNotAppeal(); - } - if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing(); - dispute.period = court.hiddenVotes ? Period.commit : Period.vote; - } else if (dispute.period == Period.commit) { - // Note that we do not want to pass to Voting period if all the commits are cast because it breaks the Shutter auto-reveal currently. - if (block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)]) { - revert CommitPeriodNotPassed(); - } - dispute.period = Period.vote; - } else if (dispute.period == Period.vote) { - if ( - block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] && - !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID) - ) { - revert VotePeriodNotPassed(); - } - dispute.period = Period.appeal; - emit AppealPossible(_disputeID, dispute.arbitrated); - } else if (dispute.period == Period.appeal) { - if ( - block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] && - !disputeKits[round.disputeKitID].isAppealFunded(_disputeID) - ) { - revert AppealPeriodNotPassed(); - } - dispute.period = Period.execution; - } else if (dispute.period == Period.execution) { - revert DisputePeriodIsFinal(); - } - - dispute.lastPeriodChange = block.timestamp; - emit NewPeriod(_disputeID, dispute.period); - } - - /// @dev Draws jurors for the dispute. Can be called in parts. - /// @param _disputeID The ID of the dispute. - /// @param _iterations The number of iterations to run. - /// @return nbDrawnJurors The total number of jurors drawn in the round. - function draw(uint256 _disputeID, uint256 _iterations) external returns (uint256 nbDrawnJurors) { - Dispute storage dispute = disputes[_disputeID]; - uint256 currentRound = dispute.rounds.length - 1; - Round storage round = dispute.rounds[currentRound]; - if (dispute.period != Period.evidence) revert NotEvidencePeriod(); - - IDisputeKit disputeKit = disputeKits[round.disputeKitID]; - - uint256 startIndex = round.drawIterations; // for gas: less storage reads - uint256 i; - while (i < _iterations && round.drawnJurors.length < round.nbVotes) { - (address drawnAddress, uint96 fromSubcourtID) = disputeKit.draw(_disputeID, startIndex + i++); - if (drawnAddress == address(0)) { - continue; - } - sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror); - emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length); - round.drawnJurors.push(drawnAddress); - round.drawnJurorFromCourtIDs.push(fromSubcourtID != 0 ? fromSubcourtID : dispute.courtID); - if (round.drawnJurors.length == round.nbVotes) { - sortitionModule.postDrawHook(_disputeID, currentRound); - } - } - round.drawIterations += i; - return round.drawnJurors.length; - } - - /// @dev Appeals the ruling of a specified dispute. - /// Note: Access restricted to the Dispute Kit for this `disputeID`. - /// @param _disputeID The ID of the dispute. - /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump. - /// @param _extraData Extradata for the dispute. Can be required during court jump. - function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable { - if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough(); - - Dispute storage dispute = disputes[_disputeID]; - if (dispute.period != Period.appeal) revert DisputeNotAppealable(); - - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly(); - - // Warning: the extra round must be created before calling disputeKit.createDispute() - Round storage extraRound = dispute.rounds.push(); - - (uint96 newCourtID, uint256 newDisputeKitID, bool courtJump, ) = _getCourtAndDisputeKitJumps( - dispute, - round, - courts[dispute.courtID], - _disputeID - ); - if (courtJump) { - emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID); - } - - dispute.courtID = newCourtID; - dispute.period = Period.evidence; - dispute.lastPeriodChange = block.timestamp; - - Court storage court = courts[newCourtID]; - extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds. - extraRound.pnkAtStakePerJuror = _calculatePnkAtStake(court.minStake, court.alpha); - extraRound.totalFeesForJurors = msg.value; - extraRound.disputeKitID = newDisputeKitID; - - sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1); - - // Dispute kit was changed, so create a dispute in the new DK contract. - if (extraRound.disputeKitID != round.disputeKitID) { - emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID); - disputeKits[extraRound.disputeKitID].createDispute( - _disputeID, - _numberOfChoices, - _extraData, - extraRound.nbVotes - ); - } - - emit AppealDecision(_disputeID, dispute.arbitrated); - emit NewPeriod(_disputeID, Period.evidence); - } - - /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts. - /// Note: Reward distributions are forbidden during pause. - /// @param _disputeID The ID of the dispute. - /// @param _round The appeal round. - /// @param _iterations The number of iterations to run. - function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external whenNotPaused { - Round storage round; - { - Dispute storage dispute = disputes[_disputeID]; - if (dispute.period != Period.execution) revert NotExecutionPeriod(); - - round = dispute.rounds[_round]; - } // stack too deep workaround - - uint256 start = round.repartitions; - uint256 end = round.repartitions + _iterations; - - uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas. - uint256 numberOfVotesInRound = round.drawnJurors.length; - uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound; - uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror; - uint256 coherentCount; - { - IDisputeKit disputeKit = disputeKits[round.disputeKitID]; - coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round. - } // stack too deep workaround - - if (coherentCount == 0) { - // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome. - if (end > numberOfVotesInRound) end = numberOfVotesInRound; - } else { - // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees. - if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2; - } - round.repartitions = end; - - for (uint256 i = start; i < end; i++) { - if (i < numberOfVotesInRound) { - pnkPenaltiesInRound = _executePenalties( - ExecuteParams({ - disputeID: _disputeID, - round: _round, - coherentCount: coherentCount, - numberOfVotesInRound: numberOfVotesInRound, - feePerJurorInRound: feePerJurorInRound, - pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound, - pnkPenaltiesInRound: pnkPenaltiesInRound, - repartition: i - }) - ); - } else { - _executeRewards( - ExecuteParams({ - disputeID: _disputeID, - round: _round, - coherentCount: coherentCount, - numberOfVotesInRound: numberOfVotesInRound, - feePerJurorInRound: feePerJurorInRound, - pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound, - pnkPenaltiesInRound: pnkPenaltiesInRound, - repartition: i - }) - ); - } - } - if (round.pnkPenalties != pnkPenaltiesInRound) { - round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact - } - } - - /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only. - /// @param _params The parameters for the execution, see `ExecuteParams`. - /// @return pnkPenaltiesInRoundCache The updated penalties in round cache. - function _executePenalties(ExecuteParams memory _params) internal returns (uint256) { - Dispute storage dispute = disputes[_params.disputeID]; - Round storage round = dispute.rounds[_params.round]; - IDisputeKit disputeKit = disputeKits[round.disputeKitID]; - - // [0, 1] value that determines how coherent the juror was in this round, in basis points. - uint256 coherence = disputeKit.getDegreeOfCoherencePenalty( - _params.disputeID, - _params.round, - _params.repartition, - _params.feePerJurorInRound, - _params.pnkAtStakePerJurorInRound - ); - - // Guard against degree exceeding 1, though it should be ensured by the dispute kit. - if (coherence > ONE_BASIS_POINT) { - coherence = ONE_BASIS_POINT; - } - - // Fully coherent jurors won't be penalized. - uint256 penalty = (round.pnkAtStakePerJuror * (ONE_BASIS_POINT - coherence)) / ONE_BASIS_POINT; - - // Unlock the PNKs affected by the penalty - address account = round.drawnJurors[_params.repartition]; - sortitionModule.unlockStake(account, penalty); - - // Apply the penalty to the staked PNKs. - uint96 penalizedInCourtID = round.drawnJurorFromCourtIDs[_params.repartition]; - (uint256 pnkBalance, uint256 newCourtStake, uint256 availablePenalty) = sortitionModule.setStakePenalty( - account, - penalizedInCourtID, - penalty - ); - _params.pnkPenaltiesInRound += availablePenalty; - emit TokenAndETHShift( - account, - _params.disputeID, - _params.round, - coherence, - -int256(availablePenalty), - 0, - round.feeToken - ); - - if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) { - // The juror is inactive or their balance is can't cover penalties anymore, unstake them from all courts. - sortitionModule.forcedUnstakeAllCourts(account); - } else if (newCourtStake < courts[penalizedInCourtID].minStake) { - // The juror's balance fell below the court minStake, unstake them from the court. - sortitionModule.forcedUnstake(account, penalizedInCourtID); - } - - if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) { - // No one was coherent, send the rewards to the owner. - _transferFeeToken(round.feeToken, payable(owner), round.totalFeesForJurors); - pinakion.safeTransfer(owner, _params.pnkPenaltiesInRound); - emit LeftoverRewardSent( - _params.disputeID, - _params.round, - _params.pnkPenaltiesInRound, - round.totalFeesForJurors, - round.feeToken - ); - } - return _params.pnkPenaltiesInRound; - } - - /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only. - /// @param _params The parameters for the execution, see `ExecuteParams`. - function _executeRewards(ExecuteParams memory _params) internal { - Dispute storage dispute = disputes[_params.disputeID]; - Round storage round = dispute.rounds[_params.round]; - IDisputeKit disputeKit = disputeKits[round.disputeKitID]; - - // [0, 1] value that determines how coherent the juror was in this round, in basis points. - (uint256 pnkCoherence, uint256 feeCoherence) = disputeKit.getDegreeOfCoherenceReward( - _params.disputeID, - _params.round, - _params.repartition % _params.numberOfVotesInRound, - _params.feePerJurorInRound, - _params.pnkAtStakePerJurorInRound - ); - - // Guard against degree exceeding 1, though it should be ensured by the dispute kit. - if (pnkCoherence > ONE_BASIS_POINT) { - pnkCoherence = ONE_BASIS_POINT; - } - if (feeCoherence > ONE_BASIS_POINT) { - feeCoherence = ONE_BASIS_POINT; - } - - address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound]; - uint256 pnkLocked = _applyCoherence(round.pnkAtStakePerJuror, pnkCoherence); - - // Release the rest of the PNKs of the juror for this round. - sortitionModule.unlockStake(account, pnkLocked); - - // Compute the rewards - uint256 pnkReward = _applyCoherence(_params.pnkPenaltiesInRound / _params.coherentCount, pnkCoherence); - round.sumPnkRewardPaid += pnkReward; - uint256 feeReward = _applyCoherence(round.totalFeesForJurors / _params.coherentCount, feeCoherence); - round.sumFeeRewardPaid += feeReward; - - // Transfer the fee reward - _transferFeeToken(round.feeToken, payable(account), feeReward); - - // Stake the PNK reward if possible, by-passes delayed stakes and other checks usually done by validateStake() - if (!sortitionModule.setStakeReward(account, dispute.courtID, pnkReward)) { - pinakion.safeTransfer(account, pnkReward); - } - - emit TokenAndETHShift( - account, - _params.disputeID, - _params.round, - pnkCoherence, - int256(pnkReward), - int256(feeReward), - round.feeToken - ); - - // Transfer any residual rewards to the owner. It may happen due to partial coherence of the jurors. - if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) { - uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid; - uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid; - if (leftoverPnkReward != 0 || leftoverFeeReward != 0) { - if (leftoverPnkReward != 0) { - pinakion.safeTransfer(owner, leftoverPnkReward); - } - if (leftoverFeeReward != 0) { - _transferFeeToken(round.feeToken, payable(owner), leftoverFeeReward); - } - emit LeftoverRewardSent( - _params.disputeID, - _params.round, - leftoverPnkReward, - leftoverFeeReward, - round.feeToken - ); - } - } - } - - /// @dev Executes a specified dispute's ruling. - /// @param _disputeID The ID of the dispute. - function executeRuling(uint256 _disputeID) external { - Dispute storage dispute = disputes[_disputeID]; - if (dispute.period != Period.execution) revert NotExecutionPeriod(); - if (dispute.ruled) revert RulingAlreadyExecuted(); - - (uint256 winningChoice, , ) = currentRuling(_disputeID); - dispute.ruled = true; - emit Ruling(dispute.arbitrated, _disputeID, winningChoice); - dispute.arbitrated.rule(_disputeID, winningChoice); - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Compute the cost of arbitration denominated in ETH. - /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation. - /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes). - /// @return cost The arbitration cost in ETH. - function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) { - (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData); - cost = courts[courtID].feeForJuror * minJurors; - } - - /// @dev Compute the cost of arbitration denominated in `_feeToken`. - /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation. - /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes). - /// @param _feeToken The ERC20 token used to pay fees. - /// @return cost The arbitration cost in `_feeToken`. - function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) { - cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData)); - } - - /// @dev Gets the cost of appealing a specified dispute. - /// @param _disputeID The ID of the dispute. - /// @return cost The appeal cost. - function appealCost(uint256 _disputeID) public view returns (uint256 cost) { - Dispute storage dispute = disputes[_disputeID]; - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - Court storage court = courts[dispute.courtID]; - - (, uint256 newDisputeKitID, bool courtJump, ) = _getCourtAndDisputeKitJumps(dispute, round, court, _disputeID); - - uint256 nbVotesAfterAppeal = disputeKits[newDisputeKitID].getNbVotesAfterAppeal( - disputeKits[round.disputeKitID], - round.nbVotes - ); - - if (courtJump) { - // Jump to parent court. - if (dispute.courtID == GENERAL_COURT) { - // TODO: Handle the forking when appealed in General court. - cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court. - } else { - cost = courts[court.parent].feeForJuror * nbVotesAfterAppeal; - } - } else { - // Stay in current court. - cost = court.feeForJuror * nbVotesAfterAppeal; - } - } - - /// @dev Gets the start and the end of a specified dispute's current appeal period. - /// @param _disputeID The ID of the dispute. - /// @return start The start of the appeal period. - /// @return end The end of the appeal period. - function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end) { - Dispute storage dispute = disputes[_disputeID]; - if (dispute.period == Period.appeal) { - start = dispute.lastPeriodChange; - end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)]; - } else { - start = 0; - end = 0; - } - } - - /// @dev Gets the current ruling of a specified dispute. - /// @param _disputeID The ID of the dispute. - /// @return ruling The current ruling. - /// @return tied Whether it's a tie or not. - /// @return overridden Whether the ruling was overridden by appeal funding or not. - function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) { - Dispute storage dispute = disputes[_disputeID]; - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - IDisputeKit disputeKit = disputeKits[round.disputeKitID]; - (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID); - } - - /// @dev Gets the round info for a specified dispute and round. - /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit. - /// @param _disputeID The ID of the dispute. - /// @param _round The round to get the info for. - /// @return round The round info. - function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) { - return disputes[_disputeID].rounds[_round]; - } - - /// @dev Gets the PNK at stake per juror for a specified dispute and round. - /// @param _disputeID The ID of the dispute. - /// @param _round The round to get the info for. - /// @return pnkAtStakePerJuror The PNK at stake per juror. - function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) { - return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror; - } - - /// @dev Gets the number of rounds for a specified dispute. - /// @param _disputeID The ID of the dispute. - /// @return The number of rounds. - function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) { - return disputes[_disputeID].rounds.length; - } - - /// @dev Checks if a given dispute kit is supported by a given court. - /// @param _courtID The ID of the court to check the support for. - /// @param _disputeKitID The ID of the dispute kit to check the support for. - /// @return Whether the dispute kit is supported or not. - function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) { - return courts[_courtID].supportedDisputeKits[_disputeKitID]; - } - - /// @dev Gets the timesPerPeriod array for a given court. - /// @param _courtID The ID of the court to get the times from. - /// @return timesPerPeriod The timesPerPeriod array for the given court. - function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) { - timesPerPeriod = courts[_courtID].timesPerPeriod; - } - - // ************************************* // - // * Public Views for Dispute Kits * // - // ************************************* // - - /// @dev Gets the number of votes permitted for the specified dispute in the latest round. - /// @param _disputeID The ID of the dispute. - function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) { - Dispute storage dispute = disputes[_disputeID]; - return dispute.rounds[dispute.rounds.length - 1].nbVotes; - } - - /// @dev Returns true if the dispute kit will be switched to a parent DK. - /// @param _disputeID The ID of the dispute. - /// @return Whether DK will be switched or not. - function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) { - Dispute storage dispute = disputes[_disputeID]; - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - Court storage court = courts[dispute.courtID]; - - if (!_isCourtJumping(round, court, _disputeID)) { - return false; - } - - // Jump if the parent court doesn't support the current DK. - return !courts[court.parent].supportedDisputeKits[round.disputeKitID]; - } - - function getDisputeKitsLength() external view returns (uint256) { - return disputeKits.length; - } - - function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) { - return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth; - } - - // ************************************* // - // * Internal * // - // ************************************* // - - /// @dev Returns true if the round is jumping to a parent court. - /// @param _round The round to check. - /// @param _court The court to check. - /// @return Whether the round is jumping to a parent court or not. - function _isCourtJumping( - Round storage _round, - Court storage _court, - uint256 _disputeID - ) internal view returns (bool) { - return - disputeKits[_round.disputeKitID].earlyCourtJump(_disputeID) || _round.nbVotes >= _court.jurorsForCourtJump; - } - - function _getCourtAndDisputeKitJumps( - Dispute storage _dispute, - Round storage _round, - Court storage _court, - uint256 _disputeID - ) internal view returns (uint96 newCourtID, uint256 newDisputeKitID, bool courtJump, bool disputeKitJump) { - newCourtID = _dispute.courtID; - newDisputeKitID = _round.disputeKitID; - - if (!_isCourtJumping(_round, _court, _disputeID)) return (newCourtID, newDisputeKitID, false, false); - - // Jump to parent court. - newCourtID = courts[newCourtID].parent; - courtJump = true; - - if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) { - // The current Dispute Kit is not compatible with the new court, jump to another Dispute Kit. - newDisputeKitID = disputeKits[_round.disputeKitID].getJumpDisputeKitID(); - if (newDisputeKitID == NULL_DISPUTE_KIT || !courts[newCourtID].supportedDisputeKits[newDisputeKitID]) { - // The new Dispute Kit is not defined or still not compatible, fall back to `DisputeKitClassic` which is always supported. - newDisputeKitID = DISPUTE_KIT_CLASSIC; - } - disputeKitJump = true; - } - } - - /// @dev Internal function to transfer fee tokens (ETH or ERC20) - /// @param _feeToken The token to transfer (NATIVE_CURRENCY for ETH). - /// @param _recipient The recipient address. - /// @param _amount The amount to transfer. - function _transferFeeToken(IERC20 _feeToken, address payable _recipient, uint256 _amount) internal { - if (_feeToken == NATIVE_CURRENCY) { - _recipient.safeSend(_amount, wNative); - } else { - _feeToken.safeTransfer(_recipient, _amount); - } - } - - /// @dev Applies degree of coherence to an amount - /// @param _amount The base amount to apply coherence to. - /// @param _coherence The degree of coherence in basis points. - /// @return The amount after applying the degree of coherence. - function _applyCoherence(uint256 _amount, uint256 _coherence) internal pure returns (uint256) { - return (_amount * _coherence) / ONE_BASIS_POINT; - } - - /// @dev Calculates PNK at stake per juror based on court parameters - /// @param _minStake The minimum stake for the court. - /// @param _alpha The alpha parameter for the court in basis points. - /// @return The amount of PNK at stake per juror. - function _calculatePnkAtStake(uint256 _minStake, uint256 _alpha) internal pure returns (uint256) { - return (_minStake * _alpha) / ONE_BASIS_POINT; - } - - /// @dev Toggles the dispute kit support for a given court. - /// @param _courtID The ID of the court to toggle the support for. - /// @param _disputeKitID The ID of the dispute kit to toggle the support for. - /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled. - function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal { - courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable; - emit DisputeKitEnabled(_courtID, _disputeKitID, _enable); - } - - /// @dev If called only once then set _onError to Revert, otherwise set it to Return - /// @param _account The account to set the stake for. - /// @param _courtID The ID of the court to set the stake for. - /// @param _newStake The new stake. - /// @param _noDelay True if the stake change should not be delayed. - /// @param _onError Whether to revert or return false on error. - /// @return Whether the stake was successfully set or not. - function _setStake( - address _account, - uint96 _courtID, - uint256 _newStake, - bool _noDelay, - OnError _onError - ) internal returns (bool) { - if (_courtID == FORKING_COURT || _courtID >= courts.length) { - _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed. - return false; - } - if (_newStake != 0 && _newStake < courts[_courtID].minStake) { - _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed. - return false; - } - (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake( - _account, - _courtID, - _newStake, - _noDelay - ); - if (stakingResult != StakingResult.Successful && stakingResult != StakingResult.Delayed) { - _stakingFailed(_onError, stakingResult); - return false; - } else if (stakingResult == StakingResult.Delayed) { - return true; - } - if (pnkDeposit > 0) { - if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) { - _stakingFailed(_onError, StakingResult.StakingTransferFailed); - return false; - } - } - if (pnkWithdrawal > 0) { - if (!pinakion.safeTransfer(_account, pnkWithdrawal)) { - _stakingFailed(_onError, StakingResult.UnstakingTransferFailed); - return false; - } - } - sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake); - - return true; - } - - /// @dev It may revert depending on the _onError parameter. - function _stakingFailed(OnError _onError, StakingResult _result) internal pure { - if (_onError == OnError.Return) return; - if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed(); - if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed(); - if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts(); - if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt(); - if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake(); - if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake(); - if (_result == StakingResult.CannotStakeMoreThanMaxStakePerJuror) revert StakingMoreThanMaxStakePerJuror(); - if (_result == StakingResult.CannotStakeMoreThanMaxTotalStaked) revert StakingMoreThanMaxTotalStaked(); - } - - /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array. - /// Note that if extradata contains an incorrect value then this value will be switched to default. - /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID. - /// @return courtID The court ID. - /// @return minJurors The minimum number of jurors required. - /// @return disputeKitID The ID of the dispute kit. - function _extraDataToCourtIDMinJurorsDisputeKit( - bytes memory _extraData - ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) { - // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index. - if (_extraData.length >= 64) { - assembly { - // solium-disable-line security/no-inline-assembly - courtID := mload(add(_extraData, 0x20)) - minJurors := mload(add(_extraData, 0x40)) - disputeKitID := mload(add(_extraData, 0x60)) - } - if (courtID == FORKING_COURT || courtID >= courts.length) { - courtID = GENERAL_COURT; - } - if (minJurors == 0) { - minJurors = DEFAULT_NB_OF_JURORS; - } - if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) { - disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used. - } - } else { - courtID = GENERAL_COURT; - minJurors = DEFAULT_NB_OF_JURORS; - disputeKitID = DISPUTE_KIT_CLASSIC; - } - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); - error GuardianOrOwnerOnly(); - error DisputeKitOnly(); - error SortitionModuleOnly(); - error UnsuccessfulCall(); - error InvalidDisputKitParent(); - error MinStakeLowerThanParentCourt(); - error UnsupportedDisputeKit(); - error InvalidForkingCourtAsParent(); - error WrongDisputeKitIndex(); - error CannotDisableClassicDK(); - error NotEligibleForStaking(); - error StakingMoreThanMaxStakePerJuror(); - error StakingMoreThanMaxTotalStaked(); - error StakingInTooManyCourts(); - error StakingNotPossibleInThisCourt(); - error StakingLessThanCourtMinStake(); - error StakingTransferFailed(); - error UnstakingTransferFailed(); - error ArbitrableNotWhitelisted(); - error ArbitrationFeesNotEnough(); - error DisputeKitNotSupportedByCourt(); - error MustSupportDisputeKitClassic(); - error TokenNotAccepted(); - error EvidenceNotPassedAndNotAppeal(); - error DisputeStillDrawing(); - error CommitPeriodNotPassed(); - error VotePeriodNotPassed(); - error AppealPeriodNotPassed(); - error NotEvidencePeriod(); - error AppealFeesNotEnough(); - error DisputeNotAppealable(); - error NotExecutionPeriod(); - error RulingAlreadyExecuted(); - error DisputePeriodIsFinal(); - error TransferFailed(); - error WhenNotPausedOnly(); - error WhenPausedOnly(); - error StakingZeroWhenNoStake(); -} diff --git a/contracts/src/arbitration/KlerosGovernor.sol b/contracts/src/arbitration/KlerosGovernor.sol deleted file mode 100644 index 11957a745..000000000 --- a/contracts/src/arbitration/KlerosGovernor.sol +++ /dev/null @@ -1,433 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {IArbitrableV2, IArbitratorV2} from "./interfaces/IArbitrableV2.sol"; -import {SafeSend} from "../libraries/SafeSend.sol"; -import "./interfaces/IDisputeTemplateRegistry.sol"; - -/// @title KlerosGovernor for V2. Note that appeal functionality and evidence submission will be handled by the court. -contract KlerosGovernor is IArbitrableV2 { - using SafeSend for address payable; - - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - enum Status { - NoDispute, - DisputeCreated, - Resolved - } - - struct Session { - uint256 ruling; // The ruling that was given in this session, if any. - uint256 disputeID; // ID given to the dispute of the session, if any. - uint256[] submittedLists; // Tracks all lists that were submitted in a session in the form submittedLists[submissionID]. - uint256 sumDeposit; // Sum of all submission deposits in a session (minus arbitration fees). This is used to calculate the reward. - Status status; // Status of a session. - mapping(bytes32 listHash => bool) alreadySubmitted; // Indicates whether or not the transaction list was already submitted in order to catch duplicates in the form alreadySubmitted[listHash]. - uint256 durationOffset; // Time in seconds that prolongs the submission period after the first submission, to give other submitters time to react. - } - - struct Transaction { - address target; // The address to call. - uint256 value; // Value paid by governor contract that will be used as msg.value in the execution. - bytes data; // Calldata of the transaction. - bool executed; // Whether the transaction was already executed or not. - } - - struct Submission { - address payable submitter; // The one who submits the list. - uint256 deposit; // Value of the deposit paid upon submission of the list. - Transaction[] txs; // Transactions stored in the list in the form txs[_transactionIndex]. - bytes32 listHash; // A hash chain of all transactions stored in the list. This is used as a unique identifier within a session. - uint256 submissionTime; // The time when the list was submitted. - bool approved; // Whether the list was approved for execution or not. - uint256 approvalTime; // The time when the list was approved. - } - - IArbitratorV2 public arbitrator; // Arbitrator contract. - bytes public arbitratorExtraData; // Extra data for arbitrator. - address public wNative; // The wrapped native token for safeSend(). - IDisputeTemplateRegistry public templateRegistry; // The dispute template registry. - uint256 public templateId; // The current dispute template identifier. - - uint256 public submissionBaseDeposit; // The base deposit in wei that needs to be paid in order to submit the list. - uint256 public submissionTimeout; // Time in seconds allowed for submitting the lists. Once it's passed the contract enters the approval period. - uint256 public executionTimeout; // Time in seconds allowed for the execution of approved lists. - uint256 public withdrawTimeout; // Time in seconds allowed to withdraw a submitted list. - - uint256 public lastApprovalTime; // The time of the last approval of a transaction list. - uint256 public reservedETH; // Sum of contract's submission deposits. These funds are not to be used in the execution of transactions. - - Submission[] public submissions; // Stores all created transaction lists. submissions[_listID]. - Session[] public sessions; // Stores all submitting sessions. sessions[_session]. - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier duringSubmissionPeriod() { - uint256 offset = sessions[sessions.length - 1].durationOffset; - if (block.timestamp - lastApprovalTime > submissionTimeout + offset) revert SubmissionTimeHasEnded(); - _; - } - - modifier duringApprovalPeriod() { - uint256 offset = sessions[sessions.length - 1].durationOffset; - if (block.timestamp - lastApprovalTime <= submissionTimeout + offset) revert ApprovalTimeNotStarted(); - _; - } - - modifier onlyByOwner() { - if (address(this) != msg.sender) revert OwnerOnly(); - _; - } - - // ************************************* // - // * Events * // - // ************************************* // - - /// @dev Emitted when a new list is submitted. - /// @param _listID The index of the transaction list in the array of lists. - /// @param _submitter The address that submitted the list. - /// @param _session The number of the current session. - /// @param _description The string in CSV format that contains labels of list's transactions. - /// Note that the submitter may give bad descriptions of correct actions, but this is to be seen as UI enhancement, not a critical feature and that would play against him in case of dispute. - event ListSubmitted( - uint256 indexed _listID, - address indexed _submitter, - uint256 indexed _session, - string _description - ); - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Constructor. - /// @param _arbitrator The arbitrator of the contract. - /// @param _arbitratorExtraData Extra data for the arbitrator. - /// @param _templateData The dispute template data. - /// @param _templateDataMappings The dispute template data mappings. - /// @param _submissionBaseDeposit The base deposit required for submission. - /// @param _submissionTimeout Time in seconds allocated for submitting transaction list. - /// @param _executionTimeout Time in seconds after approval that allows to execute transactions of the approved list. - /// @param _withdrawTimeout Time in seconds after submission that allows to withdraw submitted list. - /// @param _wNative The wrapped native token address, typically wETH. - constructor( - IArbitratorV2 _arbitrator, - bytes memory _arbitratorExtraData, - string memory _templateData, - string memory _templateDataMappings, - uint256 _submissionBaseDeposit, - uint256 _submissionTimeout, - uint256 _executionTimeout, - uint256 _withdrawTimeout, - address _wNative - ) { - arbitrator = _arbitrator; - arbitratorExtraData = _arbitratorExtraData; - wNative = _wNative; - - lastApprovalTime = block.timestamp; - submissionBaseDeposit = _submissionBaseDeposit; - submissionTimeout = _submissionTimeout; - executionTimeout = _executionTimeout; - withdrawTimeout = _withdrawTimeout; - sessions.push(); - - templateId = templateRegistry.setDisputeTemplate("", _templateData, _templateDataMappings); - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /// @dev Changes the value of the base deposit required for submitting a list. - /// @param _submissionBaseDeposit The new value of the base deposit, in wei. - function changeSubmissionDeposit(uint256 _submissionBaseDeposit) external onlyByOwner { - submissionBaseDeposit = _submissionBaseDeposit; - } - - /// @dev Changes the time allocated for submission. Note that it can't be changed during approval period because there can be an active dispute in the old arbitrator contract - /// and prolonging submission timeout might switch it back to submission period. - /// @param _submissionTimeout The new duration of the submission period, in seconds. - function changeSubmissionTimeout(uint256 _submissionTimeout) external onlyByOwner duringSubmissionPeriod { - submissionTimeout = _submissionTimeout; - } - - /// @dev Changes the time allocated for list's execution. - /// @param _executionTimeout The new duration of the execution timeout, in seconds. - function changeExecutionTimeout(uint256 _executionTimeout) external onlyByOwner { - executionTimeout = _executionTimeout; - } - - /// @dev Changes list withdrawal timeout. Note that withdrawals are only possible in the first half of the submission period. - /// @param _withdrawTimeout The new duration of withdraw period, in seconds. - function changeWithdrawTimeout(uint256 _withdrawTimeout) external onlyByOwner { - withdrawTimeout = _withdrawTimeout; - } - - /// @dev Changes the arbitrator of the contract. Note that it can't be changed during approval period because there can be an active dispute in the old arbitrator contract. - /// @param _arbitrator The new trusted arbitrator. - /// @param _arbitratorExtraData The extra data used by the new arbitrator. - function changeArbitrator( - IArbitratorV2 _arbitrator, - bytes memory _arbitratorExtraData - ) external onlyByOwner duringSubmissionPeriod { - arbitrator = _arbitrator; - arbitratorExtraData = _arbitratorExtraData; - } - - /// @dev Update the dispute template data. - /// @param _templateData The new dispute template data. - /// @param _templateDataMappings The new dispute template data mappings. - function changeDisputeTemplate( - string memory _templateData, - string memory _templateDataMappings - ) external onlyByOwner { - templateId = templateRegistry.setDisputeTemplate("", _templateData, _templateDataMappings); - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Creates transaction list based on input parameters and submits it for potential approval and execution. - /// @param _target List of addresses to call. - /// @param _value List of values required for respective addresses. - /// @param _data Concatenated calldata of all transactions of this list. - /// @param _dataSize List of lengths in bytes required to split calldata for its respective targets. - /// @param _description String in CSV format that describes list's transactions. - function submitList( - address[] memory _target, - uint256[] memory _value, - bytes memory _data, - uint256[] memory _dataSize, - string memory _description - ) external payable duringSubmissionPeriod { - if (_target.length != _value.length) revert WrongInputTargetAndValue(); - if (_target.length != _dataSize.length) revert WrongInputTargetAndDatasize(); - Session storage session = sessions[sessions.length - 1]; - Submission storage submission = submissions.push(); - submission.submitter = payable(msg.sender); - // Do the assignment first to avoid creating a new variable and bypass a 'stack too deep' error. - submission.deposit = submissionBaseDeposit + arbitrator.arbitrationCost(arbitratorExtraData); - if (msg.value < submission.deposit) revert InsufficientDeposit(); - - bytes32 listHash; - bytes32 currentTxHash; - uint256 readingPosition; - for (uint256 i = 0; i < _target.length; i++) { - bytes memory readData = new bytes(_dataSize[i]); - Transaction storage transaction = submission.txs.push(); - transaction.target = _target[i]; - transaction.value = _value[i]; - for (uint256 j = 0; j < _dataSize[i]; j++) { - readData[j] = _data[readingPosition + j]; - } - transaction.data = readData; - readingPosition += _dataSize[i]; - currentTxHash = keccak256(abi.encodePacked(transaction.target, transaction.value, transaction.data)); - listHash = keccak256(abi.encodePacked(currentTxHash, listHash)); - } - if (session.alreadySubmitted[listHash]) revert ListAlreadySubmitted(); - session.alreadySubmitted[listHash] = true; - submission.listHash = listHash; - submission.submissionTime = block.timestamp; - session.sumDeposit += submission.deposit; - session.submittedLists.push(submissions.length - 1); - if (session.submittedLists.length == 1) session.durationOffset = block.timestamp - lastApprovalTime; - - emit ListSubmitted(submissions.length - 1, msg.sender, sessions.length - 1, _description); - - uint256 remainder = msg.value - submission.deposit; - if (remainder > 0) payable(msg.sender).safeSend(remainder, wNative); - - reservedETH += submission.deposit; - } - - /// @dev Withdraws submitted transaction list. Reimburses submission deposit. - /// Withdrawal is only possible during the first half of the submission period and during withdrawTimeout after the submission is made. - /// @param _submissionID Submission's index in the array of submitted lists of the current sesssion. - /// @param _listHash Hash of a withdrawing list. - function withdrawTransactionList(uint256 _submissionID, bytes32 _listHash) external { - Session storage session = sessions[sessions.length - 1]; - Submission storage submission = submissions[session.submittedLists[_submissionID]]; - if (block.timestamp - lastApprovalTime > submissionTimeout / 2) revert ShouldOnlyWithdrawInFirstHalf(); - // This is an extra check to prevent _submissionID linking to the wrong list because of index swap during withdrawal. - if (submission.listHash != _listHash) revert WrongListHash(); - if (submission.submitter != msg.sender) revert OnlySubmitterCanWithdraw(); - if (block.timestamp - submission.submissionTime > withdrawTimeout) revert WithdrawingTimeHasPassed(); - session.submittedLists[_submissionID] = session.submittedLists[session.submittedLists.length - 1]; - session.alreadySubmitted[_listHash] = false; - session.submittedLists.pop(); - session.sumDeposit -= submission.deposit; - reservedETH -= submission.deposit; - payable(msg.sender).transfer(submission.deposit); - } - - /// @dev Approves a transaction list or creates a dispute if more than one list was submitted. - /// If nothing was submitted changes session. - function executeSubmissions() external duringApprovalPeriod { - Session storage session = sessions[sessions.length - 1]; - if (session.status != Status.NoDispute) revert AlreadyDisputed(); - if (session.submittedLists.length == 0) { - lastApprovalTime = block.timestamp; - session.status = Status.Resolved; - sessions.push(); - } else if (session.submittedLists.length == 1) { - Submission storage submission = submissions[session.submittedLists[0]]; - submission.approved = true; - submission.approvalTime = block.timestamp; - uint256 sumDeposit = session.sumDeposit; - session.sumDeposit = 0; - submission.submitter.safeSend(sumDeposit, wNative); - lastApprovalTime = block.timestamp; - session.status = Status.Resolved; - sessions.push(); - - reservedETH -= sumDeposit; - } else { - session.status = Status.DisputeCreated; - uint256 arbitrationCost = arbitrator.arbitrationCost(arbitratorExtraData); - session.disputeID = arbitrator.createDispute{value: arbitrationCost}( - session.submittedLists.length, - arbitratorExtraData - ); - // Check in case arbitration cost increased after the submission. It's unlikely that its increase won't be covered by the base deposit, but technically possible. - session.sumDeposit = session.sumDeposit > arbitrationCost ? session.sumDeposit - arbitrationCost : 0; - reservedETH = reservedETH > arbitrationCost ? reservedETH - arbitrationCost : 0; - emit DisputeRequest(arbitrator, session.disputeID, sessions.length - 1, templateId, ""); - } - } - - /// @dev Gives a ruling for a dispute. Must be called by the arbitrator. - /// @param _disputeID ID of the dispute in the Arbitrator contract. - /// @param _ruling Ruling given by the arbitrator. Note that 0 is reserved for "Refuse to arbitrate". - /// Note If the final ruling is "0" nothing is approved and deposits will stay locked in the contract. - function rule(uint256 _disputeID, uint256 _ruling) external override { - Session storage session = sessions[sessions.length - 1]; - if (msg.sender != address(arbitrator)) revert OnlyArbitratorAllowed(); - if (session.status != Status.DisputeCreated) revert NotDisputed(); - if (_ruling > session.submittedLists.length) revert RulingOutOfBounds(); - - if (_ruling != 0) { - Submission storage submission = submissions[session.submittedLists[_ruling - 1]]; - submission.approved = true; - submission.approvalTime = block.timestamp; - submission.submitter.safeSend(session.sumDeposit, wNative); - } - // If the ruling is "0" the reserved funds of this session become expendable. - reservedETH -= session.sumDeposit; - - session.sumDeposit = 0; - lastApprovalTime = block.timestamp; - session.status = Status.Resolved; - session.ruling = _ruling; - sessions.push(); - - emit Ruling(IArbitratorV2(msg.sender), _disputeID, _ruling); - } - - /// @dev Executes selected transactions of the list. - /// @param _listID The index of the transaction list in the array of lists. - /// @param _cursor Index of the transaction from which to start executing. - /// @param _count Number of transactions to execute. Executes until the end if set to "0" or number higher than number of transactions in the list. - function executeTransactionList(uint256 _listID, uint256 _cursor, uint256 _count) external { - Submission storage submission = submissions[_listID]; - if (!submission.approved) revert SubmissionNotApproved(); - if (block.timestamp - submission.approvalTime > executionTimeout) revert TimeToExecuteHasPassed(); - for (uint256 i = _cursor; i < submission.txs.length && (_count == 0 || i < _cursor + _count); i++) { - Transaction storage transaction = submission.txs[i]; - uint256 expendableFunds = getExpendableFunds(); - if (!transaction.executed && transaction.value <= expendableFunds) { - (bool callResult, ) = transaction.target.call{value: transaction.value}(transaction.data); - // An extra check to prevent re-entrancy through target call. - if (callResult == true) { - if (transaction.executed) revert AlreadyExecuted(); - transaction.executed = true; - } - } - } - } - - /// @dev Receive function to receive funds for the execution of transactions. - receive() external payable {} - - /// @dev Gets the sum of contract funds that are used for the execution of transactions. - /// @return Contract balance without reserved ETH. - function getExpendableFunds() public view returns (uint256) { - return address(this).balance - reservedETH; - } - - /// @dev Gets the info of the specific transaction in the specific list. - /// @param _listID The index of the transaction list in the array of lists. - /// @param _transactionIndex The index of the transaction. - /// @return target The target of the transaction. - /// @return value The value of the transaction. - /// @return data The data of the transaction. - /// @return executed Whether the transaction was executed or not. - function getTransactionInfo( - uint256 _listID, - uint256 _transactionIndex - ) external view returns (address target, uint256 value, bytes memory data, bool executed) { - Submission storage submission = submissions[_listID]; - Transaction storage transaction = submission.txs[_transactionIndex]; - return (transaction.target, transaction.value, transaction.data, transaction.executed); - } - - /// @dev Gets the array of submitted lists in the session. - /// Note that this function is O(n), where n is the number of submissions in the session. This could exceed the gas limit, therefore this function should only be used for interface display and not by other contracts. - /// @param _session The ID of the session. - /// @return submittedLists Indexes of lists that were submitted during the session. - function getSubmittedLists(uint256 _session) external view returns (uint256[] memory submittedLists) { - Session storage session = sessions[_session]; - submittedLists = session.submittedLists; - } - - /// @dev Gets the number of transactions in the list. - /// @param _listID The index of the transaction list in the array of lists. - /// @return txCount The number of transactions in the list. - function getNumberOfTransactions(uint256 _listID) external view returns (uint256 txCount) { - Submission storage submission = submissions[_listID]; - return submission.txs.length; - } - - /// @dev Gets the number of lists created in contract's lifetime. - /// @return The number of created lists. - function getNumberOfCreatedLists() external view returns (uint256) { - return submissions.length; - } - - /// @dev Gets the number of the ongoing session. - /// @return The number of the ongoing session. - function getCurrentSessionNumber() external view returns (uint256) { - return sessions.length - 1; - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error SubmissionTimeHasEnded(); - error ApprovalTimeNotStarted(); - error OwnerOnly(); - error WrongInputTargetAndValue(); - error WrongInputTargetAndDatasize(); - error InsufficientDeposit(); - error ListAlreadySubmitted(); - error ShouldOnlyWithdrawInFirstHalf(); - error WrongListHash(); - error OnlySubmitterCanWithdraw(); - error WithdrawingTimeHasPassed(); - error AlreadyDisputed(); - error OnlyArbitratorAllowed(); - error NotDisputed(); - error RulingOutOfBounds(); - error SubmissionNotApproved(); - error TimeToExecuteHasPassed(); - error AlreadyExecuted(); -} diff --git a/contracts/src/arbitration/PolicyRegistry.sol b/contracts/src/arbitration/PolicyRegistry.sol deleted file mode 100644 index 9c8d09f3e..000000000 --- a/contracts/src/arbitration/PolicyRegistry.sol +++ /dev/null @@ -1,90 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import "../proxy/UUPSProxiable.sol"; -import "../proxy/Initializable.sol"; - -/// @title PolicyRegistry -/// @dev A contract to maintain a policy for each court. -contract PolicyRegistry is UUPSProxiable, Initializable { - string public constant override version = "2.0.0"; - - // ************************************* // - // * Events * // - // ************************************* // - - /// @dev Emitted when a policy is updated. - /// @param _courtID The ID of the policy's court. - /// @param _courtName The name of the policy's court. - /// @param _policy The URI of the policy JSON. - event PolicyUpdate(uint256 indexed _courtID, string _courtName, string _policy); - - // ************************************* // - // * Storage * // - // ************************************* // - - address public owner; - mapping(uint256 => string) public policies; - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - /// @dev Requires that the sender is the owner. - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Constructs the `PolicyRegistry` contract. - /// @param _owner The owner's address. - function initialize(address _owner) external initializer { - owner = _owner; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /** - * @dev Access Control to perform implementation upgrades (UUPS Proxiable) - * @dev Only the owner can perform upgrades (`onlyByOwner`) - */ - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - /// @dev Changes the `owner` storage variable. - /// @param _owner The new value for the `owner` storage variable. - function changeOwner(address _owner) external onlyByOwner { - owner = _owner; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Sets the policy for the specified court. - /// @param _courtID The ID of the specified court. - /// @param _courtName The name of the specified court. - /// @param _policy The URI of the policy JSON. - function setPolicy(uint256 _courtID, string calldata _courtName, string calldata _policy) external onlyByOwner { - policies[_courtID] = _policy; - emit PolicyUpdate(_courtID, _courtName, policies[_courtID]); - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); -} diff --git a/contracts/src/arbitration/SortitionModule.sol b/contracts/src/arbitration/SortitionModule.sol deleted file mode 100644 index bf61255ae..000000000 --- a/contracts/src/arbitration/SortitionModule.sol +++ /dev/null @@ -1,622 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {KlerosCore} from "./KlerosCore.sol"; -import {ISortitionModule} from "./interfaces/ISortitionModule.sol"; -import {IDisputeKit} from "./interfaces/IDisputeKit.sol"; -import {Initializable} from "../proxy/Initializable.sol"; -import {UUPSProxiable} from "../proxy/UUPSProxiable.sol"; -import {SortitionTrees, TreeKey, CourtID} from "../libraries/SortitionTrees.sol"; -import {IRNG} from "../rng/IRNG.sol"; -import "../libraries/Constants.sol"; - -/// @title SortitionModule -/// @dev A factory of trees that keeps track of staked values for sortition. -contract SortitionModule is ISortitionModule, Initializable, UUPSProxiable { - using SortitionTrees for SortitionTrees.Tree; - using SortitionTrees for mapping(TreeKey key => SortitionTrees.Tree); - - string public constant override version = "2.0.0"; - - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - struct DelayedStake { - address account; // The address of the juror. - uint96 courtID; // The ID of the court. - uint256 stake; // The new stake. - bool alreadyTransferred; // DEPRECATED. True if tokens were already transferred before delayed stake's execution. - } - - struct Juror { - uint96[] courtIDs; // The IDs of courts where the juror's stake path ends. A stake path is a path from the general court to a court the juror directly staked in using `_setStake`. - uint256 stakedPnk; // The juror's total amount of tokens staked in subcourts. PNK balance including locked PNK and penalty deductions. - uint256 lockedPnk; // The juror's total amount of tokens locked in disputes. - } - - // ************************************* // - // * Storage * // - // ************************************* // - - address public owner; // The owner of the contract. - KlerosCore public core; // The core arbitrator contract. - Phase public phase; // The current phase. - uint256 public minStakingTime; // The time after which the phase can be switched to Drawing if there are open disputes. - uint256 public maxDrawingTime; // The time after which the phase can be switched back to Staking. - uint256 public lastPhaseChange; // The last time the phase was changed. - uint256 public randomNumberRequestBlock; // DEPRECATED: to be removed in the next redeploy - uint256 public disputesWithoutJurors; // The number of disputes that have not finished drawing jurors. - IRNG public rng; // The random number generator. - uint256 public randomNumber; // Random number returned by RNG. - uint256 public rngLookahead; // DEPRECATED: to be removed in the next redeploy - uint256 public delayedStakeWriteIndex; // The index of the last `delayedStake` item that was written to the array. 0 index is skipped. - uint256 public delayedStakeReadIndex; // The index of the next `delayedStake` item that should be processed. Starts at 1 because 0 index is skipped. - mapping(TreeKey key => SortitionTrees.Tree) sortitionSumTrees; // The mapping of sortition trees by keys. - mapping(address account => Juror) public jurors; // The jurors. - mapping(uint256 => DelayedStake) public delayedStakes; // Stores the stakes that were changed during Drawing phase, to update them when the phase is switched to Staking. - mapping(address jurorAccount => mapping(uint96 courtId => uint256)) public latestDelayedStakeIndex; // DEPRECATED. Maps the juror to its latest delayed stake. If there is already a delayed stake for this juror then it'll be replaced. latestDelayedStakeIndex[juror][courtID]. - uint256 public maxStakePerJuror; - uint256 public maxTotalStaked; - uint256 public totalStaked; - - // ************************************* // - // * Events * // - // ************************************* // - - /// @notice Emitted when a juror stakes in a court. - /// @param _address The address of the juror. - /// @param _courtID The ID of the court. - /// @param _amount The amount of tokens staked in the court. - /// @param _amountAllCourts The amount of tokens staked in all courts. - event StakeSet(address indexed _address, uint256 _courtID, uint256 _amount, uint256 _amountAllCourts); - - /// @notice Emitted when a juror's stake is delayed. - /// @param _address The address of the juror. - /// @param _courtID The ID of the court. - /// @param _amount The amount of tokens staked in the court. - event StakeDelayed(address indexed _address, uint96 indexed _courtID, uint256 _amount); - - /// @notice Emitted when a juror's stake is locked. - /// @param _address The address of the juror. - /// @param _relativeAmount The amount of tokens locked. - /// @param _unlock Whether the stake is locked or unlocked. - event StakeLocked(address indexed _address, uint256 _relativeAmount, bool _unlock); - - /// @dev Emitted when leftover PNK is available. - /// @param _account The account of the juror. - /// @param _amount The amount of PNK available. - event LeftoverPNK(address indexed _account, uint256 _amount); - - /// @dev Emitted when leftover PNK is withdrawn. - /// @param _account The account of the juror withdrawing PNK. - /// @param _amount The amount of PNK withdrawn. - event LeftoverPNKWithdrawn(address indexed _account, uint256 _amount); - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Initializer (constructor equivalent for upgradable contracts). - /// @param _owner The owner. - /// @param _core The KlerosCore. - /// @param _minStakingTime Minimal time to stake - /// @param _maxDrawingTime Time after which the drawing phase can be switched - /// @param _rng The random number generator. - /// @param _maxStakePerJuror The maximum amount of PNK a juror can stake in a court. - /// @param _maxTotalStaked The maximum amount of PNK that can be staked in all courts. - function initialize( - address _owner, - KlerosCore _core, - uint256 _minStakingTime, - uint256 _maxDrawingTime, - IRNG _rng, - uint256 _maxStakePerJuror, - uint256 _maxTotalStaked - ) external initializer { - owner = _owner; - core = _core; - minStakingTime = _minStakingTime; - maxDrawingTime = _maxDrawingTime; - lastPhaseChange = block.timestamp; - rng = _rng; - maxStakePerJuror = _maxStakePerJuror; - maxTotalStaked = _maxTotalStaked; - delayedStakeReadIndex = 1; - } - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - modifier onlyByCore() { - if (address(core) != msg.sender) revert KlerosCoreOnly(); - _; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /// @dev Access Control to perform implementation upgrades (UUPS Proxiable) - /// Only the owner can perform upgrades (`onlyByOwner`) - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - /// @dev Changes the owner of the contract. - /// @param _owner The new owner. - function changeOwner(address _owner) external onlyByOwner { - owner = _owner; - } - - /// @dev Changes the `minStakingTime` storage variable. - /// @param _minStakingTime The new value for the `minStakingTime` storage variable. - function changeMinStakingTime(uint256 _minStakingTime) external onlyByOwner { - minStakingTime = _minStakingTime; - } - - /// @dev Changes the `maxDrawingTime` storage variable. - /// @param _maxDrawingTime The new value for the `maxDrawingTime` storage variable. - function changeMaxDrawingTime(uint256 _maxDrawingTime) external onlyByOwner { - maxDrawingTime = _maxDrawingTime; - } - - /// @dev Changes the `rng` storage variable. - /// @param _rng The new random number generator. - function changeRandomNumberGenerator(IRNG _rng) external onlyByOwner { - rng = _rng; - if (phase == Phase.generating) { - rng.requestRandomness(); - } - } - - function changeMaxStakePerJuror(uint256 _maxStakePerJuror) external onlyByOwner { - maxStakePerJuror = _maxStakePerJuror; - } - - function changeMaxTotalStaked(uint256 _maxTotalStaked) external onlyByOwner { - maxTotalStaked = _maxTotalStaked; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - function passPhase() external { - if (phase == Phase.staking) { - if (block.timestamp - lastPhaseChange < minStakingTime) revert MinStakingTimeNotPassed(); - if (disputesWithoutJurors == 0) revert NoDisputesThatNeedJurors(); - rng.requestRandomness(); - phase = Phase.generating; - } else if (phase == Phase.generating) { - randomNumber = rng.receiveRandomness(); - if (randomNumber == 0) revert RandomNumberNotReady(); - phase = Phase.drawing; - } else if (phase == Phase.drawing) { - if (disputesWithoutJurors > 0 && block.timestamp - lastPhaseChange < maxDrawingTime) { - revert DisputesWithoutJurorsAndMaxDrawingTimeNotPassed(); - } - phase = Phase.staking; - } - - lastPhaseChange = block.timestamp; - emit NewPhase(phase); - } - - /// @dev Create a sortition sum tree at the specified key. - /// @param _courtID The ID of the court. - /// @param _extraData Extra data that contains the number of children each node in the tree should have. - function createTree(uint96 _courtID, bytes memory _extraData) external override onlyByCore { - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - uint256 K = _extraDataToTreeK(_extraData); - sortitionSumTrees.createTree(key, K); - } - - /// @dev Executes the next delayed stakes. - /// @param _iterations The number of delayed stakes to execute. - function executeDelayedStakes(uint256 _iterations) external { - if (phase != Phase.staking) revert NotStakingPhase(); - if (delayedStakeWriteIndex < delayedStakeReadIndex) revert NoDelayedStakeToExecute(); - - uint256 actualIterations = (delayedStakeReadIndex + _iterations) - 1 > delayedStakeWriteIndex - ? (delayedStakeWriteIndex - delayedStakeReadIndex) + 1 - : _iterations; - uint256 newDelayedStakeReadIndex = delayedStakeReadIndex + actualIterations; - - for (uint256 i = delayedStakeReadIndex; i < newDelayedStakeReadIndex; i++) { - DelayedStake storage delayedStake = delayedStakes[i]; - core.setStakeBySortitionModule(delayedStake.account, delayedStake.courtID, delayedStake.stake); - delete delayedStakes[i]; - } - delayedStakeReadIndex = newDelayedStakeReadIndex; - } - - function createDisputeHook(uint256 /*_disputeID*/, uint256 /*_roundID*/) external override onlyByCore { - disputesWithoutJurors++; - } - - function postDrawHook(uint256 /*_disputeID*/, uint256 /*_roundID*/) external override onlyByCore { - disputesWithoutJurors--; - } - - /// @dev Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase(). - /// @param _randomNumber Random number returned by RNG contract. - function notifyRandomNumber(uint256 _randomNumber) public override {} - - /// @dev Validate the specified juror's new stake for a court. - /// Note: no state changes should be made when returning stakingResult != Successful, otherwise delayed stakes might break invariants. - /// @param _account The address of the juror. - /// @param _courtID The ID of the court. - /// @param _newStake The new stake. - /// @param _noDelay True if the stake change should not be delayed. - /// @return pnkDeposit The amount of PNK to be deposited. - /// @return pnkWithdrawal The amount of PNK to be withdrawn. - /// @return stakingResult The result of the staking operation. - function validateStake( - address _account, - uint96 _courtID, - uint256 _newStake, - bool _noDelay - ) external override onlyByCore returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) { - (pnkDeposit, pnkWithdrawal, stakingResult) = _validateStake(_account, _courtID, _newStake, _noDelay); - } - - function _validateStake( - address _account, - uint96 _courtID, - uint256 _newStake, - bool _noDelay - ) internal returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) { - Juror storage juror = jurors[_account]; - uint256 currentStake = stakeOf(_account, _courtID); - bool stakeIncrease = _newStake > currentStake; - uint256 stakeChange = stakeIncrease ? _newStake - currentStake : currentStake - _newStake; - - uint256 nbCourts = juror.courtIDs.length; - if (currentStake == 0 && nbCourts >= MAX_STAKE_PATHS) { - return (0, 0, StakingResult.CannotStakeInMoreCourts); // Prevent staking beyond MAX_STAKE_PATHS but unstaking is always allowed. - } - - if (currentStake == 0 && _newStake == 0) { - return (0, 0, StakingResult.CannotStakeZeroWhenNoStake); // Forbid staking 0 amount when current stake is 0 to avoid flaky behaviour. - } - - if (stakeIncrease) { - // Check if the stake increase is within the limits. - if (juror.stakedPnk + stakeChange > maxStakePerJuror || currentStake + stakeChange > maxStakePerJuror) { - return (0, 0, StakingResult.CannotStakeMoreThanMaxStakePerJuror); - } - if (totalStaked + stakeChange > maxTotalStaked) { - return (0, 0, StakingResult.CannotStakeMoreThanMaxTotalStaked); - } - } - - if (phase != Phase.staking && !_noDelay) { - // Store the stake change as delayed, to be applied when the phase switches back to Staking. - DelayedStake storage delayedStake = delayedStakes[++delayedStakeWriteIndex]; - delayedStake.account = _account; - delayedStake.courtID = _courtID; - delayedStake.stake = _newStake; - emit StakeDelayed(_account, _courtID, _newStake); - return (pnkDeposit, pnkWithdrawal, StakingResult.Delayed); - } - - // Current phase is Staking: set stakes. - if (stakeIncrease) { - pnkDeposit = stakeChange; - totalStaked += stakeChange; - } else { - pnkWithdrawal = stakeChange; - uint256 possibleWithdrawal = juror.stakedPnk > juror.lockedPnk ? juror.stakedPnk - juror.lockedPnk : 0; - if (pnkWithdrawal > possibleWithdrawal) { - // Ensure locked tokens remain in the contract. They can only be released during Execution. - pnkWithdrawal = possibleWithdrawal; - } - totalStaked -= pnkWithdrawal; - } - return (pnkDeposit, pnkWithdrawal, StakingResult.Successful); - } - - /// @dev Update the state of the stakes, called by KC at the end of setStake flow. - /// `O(n + p * log_k(j))` where - /// `n` is the number of courts the juror has staked in, - /// `p` is the depth of the court tree, - /// `k` is the minimum number of children per node of one of these courts' sortition sum tree, - /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously. - /// @param _account The address of the juror. - /// @param _courtID The ID of the court. - /// @param _pnkDeposit The amount of PNK to be deposited. - /// @param _pnkWithdrawal The amount of PNK to be withdrawn. - /// @param _newStake The new stake. - function setStake( - address _account, - uint96 _courtID, - uint256 _pnkDeposit, - uint256 _pnkWithdrawal, - uint256 _newStake - ) external override onlyByCore { - _setStake(_account, _courtID, _pnkDeposit, _pnkWithdrawal, _newStake); - } - - /// @dev Update the state of the stakes with a PNK reward deposit, called by KC during rewards execution. - /// `O(n + p * log_k(j))` where - /// `n` is the number of courts the juror has staked in, - /// `p` is the depth of the court tree, - /// `k` is the minimum number of children per node of one of these courts' sortition sum tree, - /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously. - /// @param _account The address of the juror. - /// @param _courtID The ID of the court. - /// @param _penalty The amount of PNK to be deducted. - /// @return pnkBalance The updated total PNK balance of the juror, including the penalty. - /// @return newCourtStake The updated stake of the juror in the court. - /// @return availablePenalty The amount of PNK that was actually deducted. - function setStakePenalty( - address _account, - uint96 _courtID, - uint256 _penalty - ) external override onlyByCore returns (uint256 pnkBalance, uint256 newCourtStake, uint256 availablePenalty) { - Juror storage juror = jurors[_account]; - availablePenalty = _penalty; - newCourtStake = stakeOf(_account, _courtID); - if (juror.stakedPnk < _penalty) { - availablePenalty = juror.stakedPnk; - } - - if (availablePenalty == 0) return (juror.stakedPnk, newCourtStake, 0); // No penalty to apply. - - uint256 currentStake = stakeOf(_account, _courtID); - uint256 newStake = 0; - if (currentStake >= availablePenalty) { - newStake = currentStake - availablePenalty; - } - _setStake(_account, _courtID, 0, availablePenalty, newStake); - pnkBalance = juror.stakedPnk; // updated by _setStake() - newCourtStake = stakeOf(_account, _courtID); // updated by _setStake() - } - - /// @dev Update the state of the stakes with a PNK reward deposit, called by KC during rewards execution. - /// `O(n + p * log_k(j))` where - /// `n` is the number of courts the juror has staked in, - /// `p` is the depth of the court tree, - /// `k` is the minimum number of children per node of one of these courts' sortition sum tree, - /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously. - /// @param _account The address of the juror. - /// @param _courtID The ID of the court. - /// @param _reward The amount of PNK to be deposited as a reward. - function setStakeReward( - address _account, - uint96 _courtID, - uint256 _reward - ) external override onlyByCore returns (bool success) { - if (_reward == 0) return true; // No reward to add. - - uint256 currentStake = stakeOf(_account, _courtID); - if (currentStake == 0) return false; // Juror has been unstaked, don't increase their stake. - - uint256 newStake = currentStake + _reward; - _setStake(_account, _courtID, _reward, 0, newStake); - return true; - } - - function _setStake( - address _account, - uint96 _courtID, - uint256 _pnkDeposit, - uint256 _pnkWithdrawal, - uint256 _newStake - ) internal { - Juror storage juror = jurors[_account]; - if (_pnkDeposit > 0) { - uint256 currentStake = stakeOf(_account, _courtID); - if (currentStake == 0) { - juror.courtIDs.push(_courtID); - } - // Increase juror's balance by deposited amount. - juror.stakedPnk += _pnkDeposit; - } else { - juror.stakedPnk -= _pnkWithdrawal; - if (_newStake == 0) { - // Cleanup - for (uint256 i = juror.courtIDs.length; i > 0; i--) { - if (juror.courtIDs[i - 1] == _courtID) { - juror.courtIDs[i - 1] = juror.courtIDs[juror.courtIDs.length - 1]; - juror.courtIDs.pop(); - break; - } - } - } - } - - // Update the sortition sum tree. - bytes32 stakePathID = SortitionTrees.toStakePathID(_account, _courtID); - bool finished = false; - uint96 currentCourtID = _courtID; - while (!finished) { - // Tokens are also implicitly staked in parent courts through sortition module to increase the chance of being drawn. - TreeKey key = CourtID.wrap(currentCourtID).toTreeKey(); - sortitionSumTrees[key].set(_newStake, stakePathID); - if (currentCourtID == GENERAL_COURT) { - finished = true; - } else { - (currentCourtID, , , , , , ) = core.courts(currentCourtID); // Get the parent court. - } - } - emit StakeSet(_account, _courtID, _newStake, juror.stakedPnk); - } - - function lockStake(address _account, uint256 _relativeAmount) external override onlyByCore { - jurors[_account].lockedPnk += _relativeAmount; - emit StakeLocked(_account, _relativeAmount, false); - } - - function unlockStake(address _account, uint256 _relativeAmount) external override onlyByCore { - Juror storage juror = jurors[_account]; - juror.lockedPnk -= _relativeAmount; - emit StakeLocked(_account, _relativeAmount, true); - - uint256 amount = getJurorLeftoverPNK(_account); - if (amount > 0) { - emit LeftoverPNK(_account, amount); - } - } - - /// @dev Unstakes the inactive juror from all courts. - /// `O(n * (p * log_k(j)) )` where - /// `n` is the number of courts the juror has staked in, - /// `p` is the depth of the court tree, - /// `k` is the minimum number of children per node of one of these courts' sortition sum tree, - /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously. - /// @param _account The juror to unstake. - function forcedUnstakeAllCourts(address _account) external override onlyByCore { - uint96[] memory courtIDs = getJurorCourtIDs(_account); - for (uint256 j = courtIDs.length; j > 0; j--) { - core.setStakeBySortitionModule(_account, courtIDs[j - 1], 0); - } - } - - /// @dev Unstakes the inactive juror from a specific court. - /// `O(n * (p * log_k(j)) )` where - /// `n` is the number of courts the juror has staked in, - /// `p` is the depth of the court tree, - /// `k` is the minimum number of children per node of one of these courts' sortition sum tree, - /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously. - /// @param _account The juror to unstake. - /// @param _courtID The ID of the court. - function forcedUnstake(address _account, uint96 _courtID) external override onlyByCore { - core.setStakeBySortitionModule(_account, _courtID, 0); - } - - /// @dev Gives back the locked PNKs in case the juror fully unstaked earlier. - /// Note that since locked and staked PNK are async it is possible for the juror to have positive staked PNK balance - /// while having 0 stake in courts and 0 locked tokens (eg. when the juror fully unstaked during dispute and later got his tokens unlocked). - /// In this case the juror can use this function to withdraw the leftover tokens. - /// Also note that if the juror has some leftover PNK while not fully unstaked he'll have to manually unstake from all courts to trigger this function. - /// @param _account The juror whose PNK to withdraw. - function withdrawLeftoverPNK(address _account) external override { - // Can withdraw the leftover PNK if fully unstaked, has no tokens locked and has positive balance. - // This withdrawal can't be triggered by calling setStake() in KlerosCore because current stake is technically 0, thus it is done via separate function. - uint256 amount = getJurorLeftoverPNK(_account); - if (amount == 0) revert NotEligibleForWithdrawal(); - jurors[_account].stakedPnk = 0; - core.transferBySortitionModule(_account, amount); - emit LeftoverPNKWithdrawn(_account, amount); - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Draw an ID from a tree using a number. - /// Note that this function reverts if the sum of all values in the tree is 0. - /// @param _courtID The ID of the court. - /// @param _coreDisputeID Index of the dispute in Kleros Core. - /// @param _nonce Nonce to hash with random number. - /// @return drawnAddress The drawn address. - /// `O(k * log_k(n))` where - /// `k` is the maximum number of children per node in the tree, - /// and `n` is the maximum number of nodes ever appended. - function draw( - uint96 _courtID, - uint256 _coreDisputeID, - uint256 _nonce - ) public view override returns (address drawnAddress, uint96 fromSubcourtID) { - if (phase != Phase.drawing) revert NotDrawingPhase(); - - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - (drawnAddress, fromSubcourtID) = sortitionSumTrees[key].draw(_coreDisputeID, _nonce, randomNumber); - } - - /// @dev Get the stake of a juror in a court. - /// @param _juror The address of the juror. - /// @param _courtID The ID of the court. - /// @return value The stake of the juror in the court. - function stakeOf(address _juror, uint96 _courtID) public view returns (uint256) { - bytes32 stakePathID = SortitionTrees.toStakePathID(_juror, _courtID); - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - return sortitionSumTrees[key].stakeOf(stakePathID); - } - - /// @dev Gets the balance of a juror in a court. - /// @param _juror The address of the juror. - /// @param _courtID The ID of the court. - /// @return totalStaked The total amount of tokens staked including locked tokens and penalty deductions. Equivalent to the effective stake in the General court. - /// @return totalLocked The total amount of tokens locked in disputes. - /// @return stakedInCourt The amount of tokens staked in the specified court including locked tokens and penalty deductions. - /// @return nbCourts The number of courts the juror has directly staked in. - function getJurorBalance( - address _juror, - uint96 _courtID - ) - external - view - override - returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts) - { - Juror storage juror = jurors[_juror]; - totalStaked = juror.stakedPnk; - totalLocked = juror.lockedPnk; - stakedInCourt = stakeOf(_juror, _courtID); - nbCourts = juror.courtIDs.length; - } - - /// @dev Gets the court identifiers where a specific `_juror` has staked. - /// @param _juror The address of the juror. - function getJurorCourtIDs(address _juror) public view override returns (uint96[] memory) { - return jurors[_juror].courtIDs; - } - - function isJurorStaked(address _juror) external view override returns (bool) { - return jurors[_juror].stakedPnk > 0; - } - - function getJurorLeftoverPNK(address _juror) public view override returns (uint256) { - Juror storage juror = jurors[_juror]; - if (juror.courtIDs.length == 0 && juror.lockedPnk == 0) { - return juror.stakedPnk; - } else { - return 0; - } - } - - // ************************************* // - // * Internal * // - // ************************************* // - - function _extraDataToTreeK(bytes memory _extraData) internal pure returns (uint256 K) { - if (_extraData.length >= 32) { - assembly { - // solium-disable-line security/no-inline-assembly - K := mload(add(_extraData, 0x20)) - } - } else { - K = DEFAULT_K; - } - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); - error KlerosCoreOnly(); - error MinStakingTimeNotPassed(); - error NoDisputesThatNeedJurors(); - error RandomNumberNotReady(); - error DisputesWithoutJurorsAndMaxDrawingTimeNotPassed(); - error NotStakingPhase(); - error NoDelayedStakeToExecute(); - error NotEligibleForWithdrawal(); - error NotDrawingPhase(); -} diff --git a/contracts/src/arbitration/arbitrables/ArbitrableExample.sol b/contracts/src/arbitration/arbitrables/ArbitrableExample.sol deleted file mode 100644 index 4dd60cb82..000000000 --- a/contracts/src/arbitration/arbitrables/ArbitrableExample.sol +++ /dev/null @@ -1,165 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {IArbitrableV2, IArbitratorV2} from "../interfaces/IArbitrableV2.sol"; -import "../interfaces/IDisputeTemplateRegistry.sol"; -import "../../libraries/SafeERC20.sol"; - -/// @title ArbitrableExample -/// An example of an arbitrable contract which connects to the arbitator that implements the updated interface. -contract ArbitrableExample is IArbitrableV2 { - using SafeERC20 for IERC20; - - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - struct DisputeStruct { - bool isRuled; // Whether the dispute has been ruled or not. - uint256 ruling; // Ruling given by the arbitrator. - uint256 numberOfRulingOptions; // The number of choices the arbitrator can give. - } - - event Action(string indexed _action); - - address public immutable owner; - IArbitratorV2 public arbitrator; // Arbitrator is set in constructor. - IDisputeTemplateRegistry public templateRegistry; // The dispute template registry. - uint256 public templateId; // The current dispute template identifier. - bytes public arbitratorExtraData; // Extra data to set up the arbitration. - IERC20 public immutable weth; // The WETH token. - mapping(uint256 => uint256) public externalIDtoLocalID; // Maps external (arbitrator side) dispute IDs to local dispute IDs. - DisputeStruct[] public disputes; // Stores the disputes' info. disputes[disputeID]. - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Constructor - /// @param _arbitrator The arbitrator to rule on created disputes. - /// @param _templateData The dispute template data. - /// @param _templateDataMappings The dispute template data mappings. - /// @param _arbitratorExtraData The extra data for the arbitrator. - /// @param _templateRegistry The dispute template registry. - /// @param _weth The WETH token. - constructor( - IArbitratorV2 _arbitrator, - string memory _templateData, - string memory _templateDataMappings, - bytes memory _arbitratorExtraData, - IDisputeTemplateRegistry _templateRegistry, - IERC20 _weth - ) { - owner = msg.sender; - arbitrator = _arbitrator; - arbitratorExtraData = _arbitratorExtraData; - templateRegistry = _templateRegistry; - weth = _weth; - - templateId = templateRegistry.setDisputeTemplate("", _templateData, _templateDataMappings); - } - - // ************************************* // - // * Governance * // - // ************************************* // - - function changeArbitrator(IArbitratorV2 _arbitrator) external onlyByOwner { - arbitrator = _arbitrator; - } - - function changeArbitratorExtraData(bytes calldata _arbitratorExtraData) external onlyByOwner { - arbitratorExtraData = _arbitratorExtraData; - } - - function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external onlyByOwner { - templateRegistry = _templateRegistry; - } - - function changeDisputeTemplate( - string memory _templateData, - string memory _templateDataMappings - ) external onlyByOwner { - templateId = templateRegistry.setDisputeTemplate("", _templateData, _templateDataMappings); - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Calls createDispute function of the specified arbitrator to create a dispute. - /// Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract. - /// @param _action The action that requires arbitration. - /// @return disputeID Dispute id (on arbitrator side) of the dispute created. - function createDispute(string calldata _action) external payable returns (uint256 disputeID) { - emit Action(_action); - - uint256 numberOfRulingOptions = 2; - uint256 localDisputeID = disputes.length; - disputes.push(DisputeStruct({isRuled: false, ruling: 0, numberOfRulingOptions: numberOfRulingOptions})); - - disputeID = arbitrator.createDispute{value: msg.value}(numberOfRulingOptions, arbitratorExtraData); - externalIDtoLocalID[disputeID] = localDisputeID; - - uint256 externalDisputeID = uint256(keccak256(abi.encodePacked(_action))); - emit DisputeRequest(arbitrator, disputeID, externalDisputeID, templateId, ""); - } - - /// @dev Calls createDispute function of the specified arbitrator to create a dispute. - /// Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract. - /// @param _action The action that requires arbitration. - /// @param _feeInWeth Amount of fees in WETH for the arbitrator. - /// @return disputeID Dispute id (on arbitrator side) of the dispute created. - function createDispute(string calldata _action, uint256 _feeInWeth) external returns (uint256 disputeID) { - emit Action(_action); - - uint256 numberOfRulingOptions = 2; - uint256 localDisputeID = disputes.length; - disputes.push(DisputeStruct({isRuled: false, ruling: 0, numberOfRulingOptions: numberOfRulingOptions})); - - if (!weth.safeTransferFrom(msg.sender, address(this), _feeInWeth)) revert TransferFailed(); - if (!weth.increaseAllowance(address(arbitrator), _feeInWeth)) revert AllowanceIncreaseFailed(); - - disputeID = arbitrator.createDispute(numberOfRulingOptions, arbitratorExtraData, weth, _feeInWeth); - externalIDtoLocalID[disputeID] = localDisputeID; - - uint256 externalDisputeID = uint256(keccak256(abi.encodePacked(_action))); - emit DisputeRequest(arbitrator, disputeID, externalDisputeID, templateId, ""); - } - - /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling. - /// @param _arbitratorDisputeID ID of the dispute in arbitrator contract. - /// @param _ruling The ruling choice of the arbitration. - function rule(uint256 _arbitratorDisputeID, uint256 _ruling) external override { - uint256 localDisputeID = externalIDtoLocalID[_arbitratorDisputeID]; - DisputeStruct storage dispute = disputes[localDisputeID]; - if (msg.sender != address(arbitrator)) revert ArbitratorOnly(); - if (_ruling > dispute.numberOfRulingOptions) revert RulingOutOfBounds(); - if (dispute.isRuled) revert DisputeAlreadyRuled(); - - dispute.isRuled = true; - dispute.ruling = _ruling; - - emit Ruling(IArbitratorV2(msg.sender), _arbitratorDisputeID, dispute.ruling); - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); - error TransferFailed(); - error AllowanceIncreaseFailed(); - error ArbitratorOnly(); - error RulingOutOfBounds(); - error DisputeAlreadyRuled(); -} diff --git a/contracts/src/arbitration/arbitrables/DisputeResolver.sol b/contracts/src/arbitration/arbitrables/DisputeResolver.sol deleted file mode 100644 index 949d282b2..000000000 --- a/contracts/src/arbitration/arbitrables/DisputeResolver.sol +++ /dev/null @@ -1,159 +0,0 @@ -// SPDX-License-Identifier: MIT - -import {IArbitrableV2, IArbitratorV2} from "../interfaces/IArbitrableV2.sol"; -import "../interfaces/IDisputeTemplateRegistry.sol"; - -pragma solidity ^0.8.24; - -/// @title DisputeResolver -/// DisputeResolver contract adapted for V2 from https://github.com/kleros/arbitrable-proxy-contracts/blob/master/contracts/ArbitrableProxy.sol. -contract DisputeResolver is IArbitrableV2 { - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - struct DisputeStruct { - bytes arbitratorExtraData; // Extra data for the dispute. - bool isRuled; // True if the dispute has been ruled. - uint256 ruling; // Ruling given to the dispute. - uint256 numberOfRulingOptions; // The number of choices the arbitrator can give. - } - - // ************************************* // - // * Storage * // - // ************************************* // - - address public owner; // The owner. - IArbitratorV2 public arbitrator; // The arbitrator. - IDisputeTemplateRegistry public templateRegistry; // The dispute template registry. - DisputeStruct[] public disputes; // Local disputes. - mapping(uint256 => uint256) public arbitratorDisputeIDToLocalID; // Maps arbitrator-side dispute IDs to local dispute IDs. - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Constructor - /// @param _arbitrator Target global arbitrator for any disputes. - constructor(IArbitratorV2 _arbitrator, IDisputeTemplateRegistry _templateRegistry) { - owner = msg.sender; - arbitrator = _arbitrator; - templateRegistry = _templateRegistry; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /// @dev Changes the owner. - /// @param _owner The address of the new owner. - function changeOwner(address _owner) external { - if (owner != msg.sender) revert OwnerOnly(); - owner = _owner; - } - - function changeArbitrator(IArbitratorV2 _arbitrator) external { - if (owner != msg.sender) revert OwnerOnly(); - arbitrator = _arbitrator; - } - - function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external { - if (owner != msg.sender) revert OwnerOnly(); - templateRegistry = _templateRegistry; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Calls createDispute function of the specified arbitrator to create a dispute. - /// Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract. - /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute. - /// @param _disputeTemplate Dispute template. - /// @param _disputeTemplateDataMappings The data mappings. - /// @param _numberOfRulingOptions Number of ruling options. - /// @return disputeID Dispute id (on arbitrator side) of the created dispute. - function createDisputeForTemplate( - bytes calldata _arbitratorExtraData, - string calldata _disputeTemplate, - string memory _disputeTemplateDataMappings, - uint256 _numberOfRulingOptions - ) external payable returns (uint256 disputeID) { - return - _createDispute( - _arbitratorExtraData, - _disputeTemplate, - _disputeTemplateDataMappings, - "", - _numberOfRulingOptions - ); - } - - /// @dev Calls createDispute function of the specified arbitrator to create a dispute. - /// Note that we don’t need to check that msg.value is enough to pay arbitration fees as it’s the responsibility of the arbitrator contract. - /// @param _arbitratorExtraData Extra data for the arbitrator of the dispute. - /// @param _disputeTemplateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. - /// @param _numberOfRulingOptions Number of ruling options. - /// @return disputeID Dispute id (on arbitrator side) of the created dispute. - function createDisputeForTemplateUri( - bytes calldata _arbitratorExtraData, - string calldata _disputeTemplateUri, - uint256 _numberOfRulingOptions - ) external payable returns (uint256 disputeID) { - return _createDispute(_arbitratorExtraData, "", "", _disputeTemplateUri, _numberOfRulingOptions); - } - - /// @dev To be called by the arbitrator of the dispute, to declare the winning ruling. - /// @param _arbitratorDisputeID ID of the dispute in arbitrator contract. - /// @param _ruling The ruling choice of the arbitration. - function rule(uint256 _arbitratorDisputeID, uint256 _ruling) external override { - uint256 localDisputeID = arbitratorDisputeIDToLocalID[_arbitratorDisputeID]; - DisputeStruct storage dispute = disputes[localDisputeID]; - if (msg.sender != address(arbitrator)) revert ArbitratorOnly(); - if (_ruling > dispute.numberOfRulingOptions) revert RulingOutOfBounds(); - if (dispute.isRuled) revert DisputeAlreadyRuled(); - - dispute.isRuled = true; - dispute.ruling = _ruling; - - emit Ruling(IArbitratorV2(msg.sender), _arbitratorDisputeID, dispute.ruling); - } - - // ************************************* // - // * Internal * // - // ************************************* // - - function _createDispute( - bytes calldata _arbitratorExtraData, - string memory _disputeTemplate, - string memory _disputeTemplateDataMappings, - string memory _disputeTemplateUri, - uint256 _numberOfRulingOptions - ) internal virtual returns (uint256 arbitratorDisputeID) { - if (_numberOfRulingOptions <= 1) revert ShouldBeAtLeastTwoRulingOptions(); - - arbitratorDisputeID = arbitrator.createDispute{value: msg.value}(_numberOfRulingOptions, _arbitratorExtraData); - uint256 localDisputeID = disputes.length; - disputes.push( - DisputeStruct({ - arbitratorExtraData: _arbitratorExtraData, - isRuled: false, - ruling: 0, - numberOfRulingOptions: _numberOfRulingOptions - }) - ); - arbitratorDisputeIDToLocalID[arbitratorDisputeID] = localDisputeID; - uint256 templateId = templateRegistry.setDisputeTemplate("", _disputeTemplate, _disputeTemplateDataMappings); - emit DisputeRequest(arbitrator, arbitratorDisputeID, localDisputeID, templateId, _disputeTemplateUri); - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); - error ArbitratorOnly(); - error RulingOutOfBounds(); - error DisputeAlreadyRuled(); - error ShouldBeAtLeastTwoRulingOptions(); -} diff --git a/contracts/src/arbitration/devtools/DisputeResolverRuler.sol b/contracts/src/arbitration/devtools/DisputeResolverRuler.sol deleted file mode 100644 index eed2c8092..000000000 --- a/contracts/src/arbitration/devtools/DisputeResolverRuler.sol +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: MIT - -import {DisputeResolver, IArbitratorV2, IDisputeTemplateRegistry} from "../arbitrables/DisputeResolver.sol"; - -pragma solidity ^0.8.24; - -interface IKlerosCoreRulerFragment { - function getNextDisputeID() external view returns (uint256); -} - -/// @title DisputeResolverRuler -/// It extends DisputeResolver for testing purposes of the automatic ruling modes. -/// The arbitrator disputeID must be known before dispute creation, otherwise the dispute cannot be retrieved during the immediate call to rule(). -contract DisputeResolverRuler is DisputeResolver { - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Constructor - /// @param _arbitrator Target global arbitrator for any disputes. - constructor( - IArbitratorV2 _arbitrator, - IDisputeTemplateRegistry _templateRegistry - ) DisputeResolver(_arbitrator, _templateRegistry) { - owner = msg.sender; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - function _createDispute( - bytes calldata _arbitratorExtraData, - string memory _disputeTemplate, - string memory _disputeTemplateDataMappings, - string memory _disputeTemplateUri, - uint256 _numberOfRulingOptions - ) internal override returns (uint256 arbitratorDisputeID) { - if (_numberOfRulingOptions <= 1) revert ShouldBeAtLeastTwoRulingOptions(); - - uint256 localDisputeID = disputes.length; - DisputeStruct storage dispute = disputes.push(); - dispute.arbitratorExtraData = _arbitratorExtraData; - dispute.numberOfRulingOptions = _numberOfRulingOptions; - - // Keep track of the upcoming dispute ID before dispute creation, so rule() can be called immediately after. - arbitratorDisputeID = IKlerosCoreRulerFragment(address(arbitrator)).getNextDisputeID(); - arbitratorDisputeIDToLocalID[arbitratorDisputeID] = localDisputeID; - uint256 templateId = templateRegistry.setDisputeTemplate("", _disputeTemplate, _disputeTemplateDataMappings); - emit DisputeRequest(arbitrator, arbitratorDisputeID, localDisputeID, templateId, _disputeTemplateUri); - - arbitrator.createDispute{value: msg.value}(_numberOfRulingOptions, _arbitratorExtraData); - } -} diff --git a/contracts/src/arbitration/devtools/KlerosCoreRuler.sol b/contracts/src/arbitration/devtools/KlerosCoreRuler.sol deleted file mode 100644 index 42a428299..000000000 --- a/contracts/src/arbitration/devtools/KlerosCoreRuler.sol +++ /dev/null @@ -1,678 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {IArbitrableV2, IArbitratorV2} from "../interfaces/IArbitratorV2.sol"; -import {SafeERC20, IERC20} from "../../libraries/SafeERC20.sol"; -import {UUPSProxiable} from "../../proxy/UUPSProxiable.sol"; -import {Initializable} from "../../proxy/Initializable.sol"; -import "../../libraries/Constants.sol"; - -/// @title KlerosCoreRuler -/// Core arbitrator contract for development and testing purposes. -contract KlerosCoreRuler is IArbitratorV2, UUPSProxiable, Initializable { - using SafeERC20 for IERC20; - - string public constant override version = "2.0.0"; - - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - enum RulingMode { - uninitialized, - manual, // executeRuling() is called manually. - automaticRandom, // The ruling is given randomly automatically. - automaticPreset // The ruling is given automatically with a preset value. - } - - enum Period { - evidence, // Evidence can be submitted. This is also when drawing has to take place. - commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes. - vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not. - appeal, // The dispute can be appealed. - execution // Tokens are redistributed and the ruling is executed. - } - - struct RulerSettings { - RulingMode rulingMode; // The ruling mode of the arbitrator. - uint256 presetRuling; // The ruling to give in case of automatic ruling mode. - bool presetTied; // Whether the ruling is tied or not. - bool presetOverridden; // Whether the ruling is overridden or not. - } - - struct Court { - uint96 parent; // The parent court. - bool hiddenVotes; // Whether to use commit and reveal or not. - uint256[] children; // List of child courts. - uint256 minStake; // Minimum PNKs needed to stake in the court. - uint256 alpha; // Basis point of PNKs that are lost when incoherent. - uint256 feeForJuror; // Arbitration fee paid per juror. - uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any. - uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`. - bool disabled; // True if the court is disabled. Unused for now, will be implemented later. - } - - struct Dispute { - uint96 courtID; // The ID of the court the dispute is in. - IArbitrableV2 arbitrated; // The arbitrable contract. - Period period; // The current period of the dispute. - bool ruled; // True if the ruling has been executed, false otherwise. - Round[] rounds; - } - - struct Round { - uint256 totalFeesForJurors; // The total juror fees paid in this round. - uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round. - IERC20 feeToken; // The token used for paying fees in this round. - } - - struct CurrencyRate { - bool feePaymentAccepted; - uint64 rateInEth; - uint8 rateDecimals; - } - - struct RulingResult { - uint256 ruling; - bool tied; - bool overridden; - } - - // ************************************* // - // * Storage * // - // ************************************* // - - uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH. - - address public owner; // The owner of the contract. - IERC20 public pinakion; // The Pinakion token contract. - Court[] public courts; // The courts. - Dispute[] public disputes; // The disputes. - mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH. - mapping(IArbitrableV2 arbitrable => address ruler) public rulers; // The ruler of each arbitrable contract. - mapping(IArbitrableV2 arbitrable => RulerSettings) public settings; // The settings of each arbitrable contract. - mapping(uint256 disputeID => RulingResult) public rulingResults; // The ruling results of each dispute. - - // ************************************* // - // * Events * // - // ************************************* // - - event NewPeriod(uint256 indexed _disputeID, Period _period); - event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable); - event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable); - event CourtCreated( - uint256 indexed _courtID, - uint96 indexed _parent, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] _timesPerPeriod - ); - event CourtModified( - uint96 indexed _courtID, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] _timesPerPeriod - ); - event CourtJump( - uint256 indexed _disputeID, - uint256 indexed _roundID, - uint96 indexed _fromCourtID, - uint96 _toCourtID - ); - event TokenAndETHShift( - address indexed _account, - uint256 indexed _disputeID, - uint256 indexed _roundID, - uint256 _degreeOfCoherency, - int256 _pnkAmount, - int256 _feeAmount, - IERC20 _feeToken - ); - event LeftoverRewardSent( - uint256 indexed _disputeID, - uint256 indexed _roundID, - uint256 _pnkAmount, - uint256 _feeAmount, - IERC20 _feeToken - ); - event AutoRuled( - IArbitrableV2 indexed _arbitrable, - RulingMode indexed mode, - uint256 indexed _disputeID, - uint256 _ruling, - bool tied, - bool overridden - ); - event RulerSettingsChanged(IArbitrableV2 indexed _arbitrable, RulerSettings _settings); - event RulerChanged(IArbitrableV2 indexed _arbitrable, address indexed _oldRuler, address indexed _newRuler); - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Initializer (constructor equivalent for upgradable contracts). - /// @param _owner The owner's address. - /// @param _pinakion The address of the token contract. - /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively). - function initialize(address _owner, IERC20 _pinakion, uint256[4] memory _courtParameters) external initializer { - owner = _owner; - pinakion = _pinakion; - - // FORKING_COURT - // TODO: Fill the properties for the Forking court, emit CourtCreated. - courts.push(); - - // GENERAL_COURT - Court storage court = courts.push(); - court.parent = FORKING_COURT; - court.children = new uint256[](0); - court.hiddenVotes = false; - court.minStake = _courtParameters[0]; - court.alpha = _courtParameters[1]; - court.feeForJuror = _courtParameters[2]; - court.jurorsForCourtJump = _courtParameters[3]; - court.timesPerPeriod = [0, 0, 0, 0]; - - emit CourtCreated( - 1, - court.parent, - court.hiddenVotes, - _courtParameters[0], - _courtParameters[1], - _courtParameters[2], - _courtParameters[3], - court.timesPerPeriod - ); - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /* @dev Access Control to perform implementation upgrades (UUPS Proxiable) - * @dev Only the owner can perform upgrades (`onlyByOwner`) - */ - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - /// @dev Allows the owner to call anything on behalf of the contract. - /// @param _destination The destination of the call. - /// @param _amount The value sent with the call. - /// @param _data The data sent with the call. - function executeOwnerProposal(address _destination, uint256 _amount, bytes memory _data) external onlyByOwner { - (bool success, ) = _destination.call{value: _amount}(_data); - if (!success) revert UnsuccessfulCall(); - } - - /// @dev Changes the `owner` storage variable. - /// @param _owner The new value for the `owner` storage variable. - function changeOwner(address payable _owner) external onlyByOwner { - owner = _owner; - } - - /// @dev Changes the `pinakion` storage variable. - /// @param _pinakion The new value for the `pinakion` storage variable. - function changePinakion(IERC20 _pinakion) external onlyByOwner { - pinakion = _pinakion; - } - - /// @dev Creates a court under a specified parent court. - /// @param _parent The `parent` property value of the court. - /// @param _hiddenVotes The `hiddenVotes` property value of the court. - /// @param _minStake The `minStake` property value of the court. - /// @param _alpha The `alpha` property value of the court. - /// @param _feeForJuror The `feeForJuror` property value of the court. - /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court. - /// @param _timesPerPeriod The `timesPerPeriod` property value of the court. - function createCourt( - uint96 _parent, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] memory _timesPerPeriod - ) external onlyByOwner { - if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent(); - - uint256 courtID = courts.length; - Court storage court = courts.push(); - - court.parent = _parent; - court.children = new uint256[](0); - court.hiddenVotes = _hiddenVotes; - court.minStake = _minStake; - court.alpha = _alpha; - court.feeForJuror = _feeForJuror; - court.jurorsForCourtJump = _jurorsForCourtJump; - court.timesPerPeriod = _timesPerPeriod; - - // Update the parent. - courts[_parent].children.push(courtID); - emit CourtCreated( - courtID, - _parent, - _hiddenVotes, - _minStake, - _alpha, - _feeForJuror, - _jurorsForCourtJump, - _timesPerPeriod - ); - } - - function changeCourtParameters( - uint96 _courtID, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] memory _timesPerPeriod - ) external onlyByOwner { - Court storage court = courts[_courtID]; - court.minStake = _minStake; - court.hiddenVotes = _hiddenVotes; - court.alpha = _alpha; - court.feeForJuror = _feeForJuror; - court.jurorsForCourtJump = _jurorsForCourtJump; - court.timesPerPeriod = _timesPerPeriod; - emit CourtModified( - _courtID, - _hiddenVotes, - _minStake, - _alpha, - _feeForJuror, - _jurorsForCourtJump, - _timesPerPeriod - ); - } - - /// @dev Changes the supported fee tokens. - /// @param _feeToken The fee token. - /// @param _accepted Whether the token is supported or not as a method of fee payment. - function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByOwner { - currencyRates[_feeToken].feePaymentAccepted = _accepted; - emit AcceptedFeeToken(_feeToken, _accepted); - } - - /// @dev Changes the currency rate of a fee token. - /// @param _feeToken The fee token. - /// @param _rateInEth The new rate of the fee token in ETH. - /// @param _rateDecimals The new decimals of the fee token rate. - function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByOwner { - currencyRates[_feeToken].rateInEth = _rateInEth; - currencyRates[_feeToken].rateDecimals = _rateDecimals; - emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals); - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - function changeRulingModeToManual(IArbitrableV2 _arbitrable) external { - if (rulers[_arbitrable] == address(0)) rulers[_arbitrable] = msg.sender; - if (rulers[_arbitrable] != msg.sender) revert RulerOnly(); - - delete settings[_arbitrable]; - RulerSettings storage arbitratedSettings = settings[_arbitrable]; - arbitratedSettings.rulingMode = RulingMode.manual; - emit RulerSettingsChanged(_arbitrable, arbitratedSettings); - } - - function changeRulingModeToAutomaticRandom(IArbitrableV2 _arbitrable) external { - if (rulers[_arbitrable] == address(0)) rulers[_arbitrable] = msg.sender; - if (rulers[_arbitrable] != msg.sender) revert RulerOnly(); - - delete settings[_arbitrable]; - RulerSettings storage arbitratedSettings = settings[_arbitrable]; - arbitratedSettings.rulingMode = RulingMode.automaticRandom; - emit RulerSettingsChanged(_arbitrable, arbitratedSettings); - } - - function changeRulingModeToAutomaticPreset( - IArbitrableV2 _arbitrable, - uint256 _presetRuling, - bool _presetTied, - bool _presetOverridden - ) external { - if (rulers[_arbitrable] == address(0)) rulers[_arbitrable] = msg.sender; - if (rulers[_arbitrable] != msg.sender) revert RulerOnly(); - - delete settings[_arbitrable]; - RulerSettings storage arbitratedSettings = settings[_arbitrable]; - arbitratedSettings.rulingMode = RulingMode.automaticPreset; - arbitratedSettings.presetRuling = _presetRuling; - arbitratedSettings.presetTied = _presetTied; - arbitratedSettings.presetOverridden = _presetOverridden; - emit RulerSettingsChanged(_arbitrable, arbitratedSettings); - } - - function changeRuler(IArbitrableV2 _arbitrable, address _newRuler) external { - if (rulers[_arbitrable] != msg.sender) revert RulerOnly(); - rulers[_arbitrable] = _newRuler; - emit RulerChanged(_arbitrable, msg.sender, _newRuler); - } - - /// @inheritdoc IArbitratorV2 - function createDispute( - uint256 _numberOfChoices, - bytes memory _extraData - ) external payable override returns (uint256 disputeID) { - if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough(); - - return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value); - } - - /// @inheritdoc IArbitratorV2 - function createDispute( - uint256 _numberOfChoices, - bytes calldata _extraData, - IERC20 _feeToken, - uint256 _feeAmount - ) external override returns (uint256 disputeID) { - if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted(); - if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough(); - - if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed(); - return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount); - } - - function _createDispute( - uint256 _numberOfChoices, - bytes memory _extraData, - IERC20 _feeToken, - uint256 _feeAmount - ) internal returns (uint256 disputeID) { - (uint96 courtID, , ) = _unpackExtraData(_extraData); - disputeID = disputes.length; - Dispute storage dispute = disputes.push(); - dispute.courtID = courtID; - dispute.arbitrated = IArbitrableV2(msg.sender); - - Round storage round = dispute.rounds.push(); - round.totalFeesForJurors = _feeAmount; - round.feeToken = IERC20(_feeToken); - - _autoRule(disputeID, _numberOfChoices); - - emit DisputeCreation(disputeID, IArbitrableV2(msg.sender)); - } - - function _autoRule(uint256 _disputeID, uint256 _numberOfChoices) internal { - Dispute storage dispute = disputes[_disputeID]; - uint256 roundID = dispute.rounds.length - 1; - RulerSettings storage arbitratedSettings = settings[dispute.arbitrated]; - if (arbitratedSettings.rulingMode == RulingMode.uninitialized) revert RulingModeNotSet(); - if (arbitratedSettings.rulingMode == RulingMode.manual) { - // NOP - } else if (arbitratedSettings.rulingMode == RulingMode.automaticPreset) { - emit AutoRuled( - dispute.arbitrated, - RulingMode.automaticPreset, - _disputeID, - arbitratedSettings.presetRuling, - arbitratedSettings.presetTied, - arbitratedSettings.presetOverridden - ); - this.executeRuling( - _disputeID, - arbitratedSettings.presetRuling, - arbitratedSettings.presetTied, - arbitratedSettings.presetOverridden - ); - this.execute(_disputeID, roundID); - } else if (arbitratedSettings.rulingMode == RulingMode.automaticRandom) { - uint256 pseudoRandomNumber = uint256(keccak256(abi.encodePacked(blockhash(block.number - 1)))) % - _numberOfChoices; // Not secure but it's just a dev tool for testing, sue me - bool tied = pseudoRandomNumber & 4 == 0; - bool overridden = pseudoRandomNumber & 2 == 0; - emit AutoRuled( - dispute.arbitrated, - RulingMode.automaticRandom, - _disputeID, - pseudoRandomNumber, - tied, - overridden - ); - this.executeRuling(_disputeID, pseudoRandomNumber, tied, overridden); - this.execute(_disputeID, roundID); - } - } - - /// @dev Appeals the ruling of a specified dispute. - /// @param _disputeID The ID of the dispute. - /// @param _jump Whether to jump to the parent court or not. - function appeal( - uint256 _disputeID, - uint256 _numberOfChoices, - bytes memory /*_extraData*/, - bool _jump - ) external payable { - if (msg.value < appealCost(_disputeID, _jump)) revert AppealFeesNotEnough(); - - Dispute storage dispute = disputes[_disputeID]; - if (rulers[dispute.arbitrated] != msg.sender) revert RulerOnly(); - if (dispute.period != Period.appeal) revert DisputeNotAppealable(); - - uint96 newCourtID = dispute.courtID; - - if (_jump) { - // Jump to parent court. - newCourtID = courts[newCourtID].parent; - if (newCourtID != dispute.courtID) { - emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID); - } - } - - dispute.courtID = newCourtID; - dispute.period = Period.evidence; - - Round storage extraRound = dispute.rounds.push(); - extraRound.totalFeesForJurors = msg.value; - - emit AppealDecision(_disputeID, dispute.arbitrated); - emit NewPeriod(_disputeID, Period.evidence); - - _autoRule(_disputeID, _numberOfChoices); - } - - /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts. - /// @param _disputeID The ID of the dispute. - /// @param _round The appeal round. - function execute(uint256 _disputeID, uint256 _round) external { - Dispute storage dispute = disputes[_disputeID]; - address account = rulers[dispute.arbitrated]; - if (account == address(0)) revert NoRulerSet(); - - // Transfer the fees back to the ruler - Round storage round = dispute.rounds[_round]; - uint256 feeReward = round.totalFeesForJurors; - round.sumFeeRewardPaid += feeReward; - if (round.feeToken == NATIVE_CURRENCY) { - // The dispute fees were paid in ETH - payable(account).send(feeReward); - } else { - // The dispute fees were paid in ERC20 - round.feeToken.safeTransfer(account, feeReward); - } - emit TokenAndETHShift(account, _disputeID, _round, 1, int256(0), int256(feeReward), round.feeToken); - } - - /// @dev Executes a specified dispute's ruling. - /// @param _disputeID The ID of the dispute. - function executeRuling(uint256 _disputeID, uint256 _ruling, bool tied, bool overridden) external { - Dispute storage dispute = disputes[_disputeID]; - if (dispute.ruled) revert RulingAlreadyExecuted(); - if (msg.sender != rulers[dispute.arbitrated] && msg.sender != address(this)) revert RulerOnly(); - - rulingResults[_disputeID] = RulingResult(_ruling, tied, overridden); - dispute.ruled = true; - dispute.arbitrated.rule(_disputeID, _ruling); - - emit Ruling(dispute.arbitrated, _disputeID, _ruling); - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Compute the cost of arbitration denominated in ETH. - /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation. - /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes). - /// @return cost The arbitration cost in ETH. - function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) { - (uint96 courtID, uint256 minJurors, ) = _unpackExtraData(_extraData); - cost = courts[courtID].feeForJuror * minJurors; - } - - /// @dev Compute the cost of arbitration denominated in `_feeToken`. - /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation. - /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes). - /// @param _feeToken The ERC20 token used to pay fees. - /// @return cost The arbitration cost in `_feeToken`. - function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) { - cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData)); - } - - /// @dev Gets the cost of appealing a specified dispute. - /// @param _disputeID The ID of the dispute. - /// @param _jump Whether to jump to the parent court or not. - /// @return cost The appeal cost. - function appealCost(uint256 _disputeID, bool _jump) public view returns (uint256 cost) { - Dispute storage dispute = disputes[_disputeID]; - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - Court storage court = courts[dispute.courtID]; - uint256 nbVotes = round.totalFeesForJurors / court.feeForJuror; - if (_jump) { - // Jump to parent court. - if (dispute.courtID == GENERAL_COURT) { - // TODO: Handle the forking when appealed in General court. - cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court. - } else { - cost = courts[court.parent].feeForJuror * ((nbVotes * 2) + 1); - } - } else { - // Stay in current court. - cost = court.feeForJuror * ((nbVotes * 2) + 1); - } - } - - /// @dev Gets the current ruling of a specified dispute. - /// @param _disputeID The ID of the dispute. - /// @return ruling The current ruling. - /// @return tied Whether it's a tie or not. - /// @return overridden Whether the ruling was overridden by appeal funding or not. - function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) { - RulingResult storage rulingResult = rulingResults[_disputeID]; - return (rulingResult.ruling, rulingResult.tied, rulingResult.overridden); - } - - function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) { - return disputes[_disputeID].rounds[_round]; - } - - function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) { - return disputes[_disputeID].rounds.length; - } - - function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) { - timesPerPeriod = courts[_courtID].timesPerPeriod; - } - - function getNextDisputeID() external view returns (uint256) { - return disputes.length; - } - - // ************************************* // - // * Public Views for Dispute Kits * // - // ************************************* // - - /// @dev Gets the number of votes permitted for the specified dispute in the latest round. - /// @param _disputeID The ID of the dispute. - function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) { - Dispute storage dispute = disputes[_disputeID]; - Court storage court = courts[dispute.courtID]; - return dispute.rounds[dispute.rounds.length - 1].totalFeesForJurors / court.feeForJuror; - } - - function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) { - return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth; - } - - // ************************************* // - // * Internal * // - // ************************************* // - - /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array. - /// Note that if extradata contains an incorrect value then this value will be switched to default. - /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID. - /// @return courtID The court ID. - /// @return minJurors The minimum number of jurors required. - /// @return disputeKitID The ID of the dispute kit. - function _unpackExtraData( - bytes memory _extraData - ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) { - // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index. - if (_extraData.length >= 64) { - assembly { - // solium-disable-line security/no-inline-assembly - courtID := mload(add(_extraData, 0x20)) - minJurors := mload(add(_extraData, 0x40)) - disputeKitID := mload(add(_extraData, 0x60)) - } - if (courtID == FORKING_COURT || courtID >= courts.length) { - courtID = GENERAL_COURT; - } - if (minJurors == 0) { - minJurors = DEFAULT_NB_OF_JURORS; - } - if (disputeKitID == NULL_DISPUTE_KIT) { - disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used. - } - } else { - courtID = GENERAL_COURT; - minJurors = DEFAULT_NB_OF_JURORS; - disputeKitID = DISPUTE_KIT_CLASSIC; - } - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); - error RulerOnly(); - error NoRulerSet(); - error RulingModeNotSet(); - error UnsuccessfulCall(); - error InvalidForkingCourtAsParent(); - error ArbitrationFeesNotEnough(); - error TokenNotAccepted(); - error AppealFeesNotEnough(); - error DisputeNotAppealable(); - error RulingAlreadyExecuted(); - error TransferFailed(); -} diff --git a/contracts/src/arbitration/dispute-kits/DisputeKitClassic.sol b/contracts/src/arbitration/dispute-kits/DisputeKitClassic.sol deleted file mode 100644 index dd2edbab8..000000000 --- a/contracts/src/arbitration/dispute-kits/DisputeKitClassic.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {DisputeKitClassicBase, KlerosCore} from "./DisputeKitClassicBase.sol"; - -/// @title DisputeKitClassic -/// Dispute kit implementation of the Kleros v1 features including: -/// - a drawing system: proportional to staked PNK, -/// - a vote aggregation system: plurality, -/// - an incentive system: equal split between coherent votes, -/// - an appeal system: fund 2 choices only, vote on any choice. -contract DisputeKitClassic is DisputeKitClassicBase { - string public constant override version = "2.0.0"; - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Initializer. - /// @param _owner The owner's address. - /// @param _core The KlerosCore arbitrator. - /// @param _wNative The wrapped native token address, typically wETH. - /// @param _jumpDisputeKitID The ID of the dispute kit to switch to after the court jump. - function initialize( - address _owner, - KlerosCore _core, - address _wNative, - uint256 _jumpDisputeKitID - ) external initializer { - __DisputeKitClassicBase_initialize(_owner, _core, _wNative, _jumpDisputeKitID); - } - - // ************************ // - // * Governance * // - // ************************ // - - /// @dev Access Control to perform implementation upgrades (UUPS Proxiable) - /// Only the owner can perform upgrades (`onlyByOwner`) - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } -} diff --git a/contracts/src/arbitration/dispute-kits/DisputeKitClassicBase.sol b/contracts/src/arbitration/dispute-kits/DisputeKitClassicBase.sol deleted file mode 100644 index 5dc1c3522..000000000 --- a/contracts/src/arbitration/dispute-kits/DisputeKitClassicBase.sol +++ /dev/null @@ -1,800 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {KlerosCore, IDisputeKit, ISortitionModule} from "../KlerosCore.sol"; -import {Initializable} from "../../proxy/Initializable.sol"; -import {UUPSProxiable} from "../../proxy/UUPSProxiable.sol"; -import {SafeSend} from "../../libraries/SafeSend.sol"; -import {ONE_BASIS_POINT, DISPUTE_KIT_CLASSIC} from "../../libraries/Constants.sol"; - -/// @title DisputeKitClassicBase -/// Abstract Dispute kit classic implementation of the Kleros v1 features including: -/// - a drawing system: proportional to staked PNK, -/// - a vote aggregation system: plurality, -/// - an incentive system: equal split between coherent votes, -/// - an appeal system: fund 2 choices only, vote on any choice. -abstract contract DisputeKitClassicBase is IDisputeKit, Initializable, UUPSProxiable { - using SafeSend for address payable; - - // ************************************* // - // * Structs * // - // ************************************* // - - struct Dispute { - Round[] rounds; // Rounds of the dispute. 0 is the default round, and [1, ..n] are the appeal rounds. - uint256 numberOfChoices; // The number of choices jurors have when voting. This does not include choice `0` which is reserved for "refuse to arbitrate". - bool jumped; // True if dispute jumped to a parent dispute kit and won't be handled by this DK anymore. - mapping(uint256 => uint256) coreRoundIDToLocal; // Maps id of the round in the core contract to the index of the round of related local dispute. - bytes extraData; // Extradata for the dispute. - } - - struct Round { - Vote[] votes; // Former votes[_appeal][]. - uint256 winningChoice; // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first. - mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`. - bool tied; // True if there is a tie, false otherwise. - uint256 totalVoted; // Former uint[_appeal] votesInEachRound. - uint256 totalCommitted; // Former commitsInRound. - mapping(uint256 choiceId => uint256) paidFees; // Tracks the fees paid for each choice in this round. - mapping(uint256 choiceId => bool) hasPaid; // True if this choice was fully funded, false otherwise. - mapping(address account => mapping(uint256 choiceId => uint256)) contributions; // Maps contributors to their contributions for each choice. - uint256 feeRewards; // Sum of reimbursable appeal fees available to the parties that made contributions to the ruling that ultimately wins a dispute. - uint256[] fundedChoices; // Stores the choices that are fully funded. - uint256 nbVotes; // Maximal number of votes this dispute can get. - } - - struct Vote { - address account; // The address of the juror. - bytes32 commit; // The commit of the juror. For courts with hidden votes. - uint256 choice; // The choice of the juror. - bool voted; // True if the vote has been cast. - } - - // ************************************* // - // * Storage * // - // ************************************* // - - uint256 public constant WINNER_STAKE_MULTIPLIER = 10000; // Multiplier of the appeal cost that the winner has to pay as fee stake for a round in basis points. Default is 1x of appeal fee. - uint256 public constant LOSER_STAKE_MULTIPLIER = 20000; // Multiplier of the appeal cost that the loser has to pay as fee stake for a round in basis points. Default is 2x of appeal fee. - uint256 public constant LOSER_APPEAL_PERIOD_MULTIPLIER = 5000; // Multiplier of the appeal period for the choice that wasn't voted for in the previous round, in basis points. Default is 1/2 of original appeal period. - - address public owner; // The owner of the contract. - KlerosCore public core; // The Kleros Core arbitrator - Dispute[] public disputes; // Array of the locally created disputes. - mapping(uint256 => uint256) public coreDisputeIDToLocal; // Maps the dispute ID in Kleros Core to the local dispute ID. - bool public singleDrawPerJuror; // Whether each juror can only draw once per dispute, false by default. - mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(address drawnAddress => bool))) - public alreadyDrawn; // True if the address has already been drawn, false by default. To be added to the Round struct when fully redeploying rather than upgrading. - mapping(uint256 coreDisputeID => bool) public coreDisputeIDToActive; // True if this dispute kit is active for this core dispute ID. - address public wNative; // The wrapped native token for safeSend(). - uint256 public jumpDisputeKitID; // The ID of the dispute kit in Kleros Core disputeKits array that the dispute should switch to after the court jump, in case the new court doesn't support this dispute kit. - - // ************************************* // - // * Events * // - // ************************************* // - - /// @dev To be emitted when a dispute is created. - /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract. - /// @param _numberOfChoices The number of choices available in the dispute. - /// @param _extraData The extra data for the dispute. - event DisputeCreation(uint256 indexed _coreDisputeID, uint256 _numberOfChoices, bytes _extraData); - - /// @dev To be emitted when a vote commitment is cast. - /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract. - /// @param _juror The address of the juror casting the vote commitment. - /// @param _voteIDs The identifiers of the votes in the dispute. - /// @param _commit The commitment of the juror. - event CommitCast(uint256 indexed _coreDisputeID, address indexed _juror, uint256[] _voteIDs, bytes32 _commit); - - /// @dev To be emitted when a funding contribution is made. - /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract. - /// @param _coreRoundID The identifier of the round in the Arbitrator contract. - /// @param _choice The choice that is being funded. - /// @param _contributor The address of the contributor. - /// @param _amount The amount contributed. - event Contribution( - uint256 indexed _coreDisputeID, - uint256 indexed _coreRoundID, - uint256 _choice, - address indexed _contributor, - uint256 _amount - ); - - /// @dev To be emitted when the contributed funds are withdrawn. - /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract. - /// @param _coreRoundID The identifier of the round in the Arbitrator contract. - /// @param _choice The choice that is being funded. - /// @param _contributor The address of the contributor. - /// @param _amount The amount withdrawn. - event Withdrawal( - uint256 indexed _coreDisputeID, - uint256 indexed _coreRoundID, - uint256 _choice, - address indexed _contributor, - uint256 _amount - ); - - /// @dev To be emitted when a choice is fully funded for an appeal. - /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract. - /// @param _coreRoundID The identifier of the round in the Arbitrator contract. - /// @param _choice The choice that is being funded. - event ChoiceFunded(uint256 indexed _coreDisputeID, uint256 indexed _coreRoundID, uint256 indexed _choice); - - // ************************************* // - // * Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - modifier onlyByCore() { - if (address(core) != msg.sender) revert KlerosCoreOnly(); - _; - } - - modifier notJumped(uint256 _coreDisputeID) { - if (disputes[coreDisputeIDToLocal[_coreDisputeID]].jumped) revert DisputeJumpedToParentDK(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Initializer. - /// @param _owner The owner's address. - /// @param _core The KlerosCore arbitrator. - /// @param _wNative The wrapped native token address, typically wETH. - /// @param _jumpDisputeKitID The ID of the dispute kit to switch to after the court jump. - function __DisputeKitClassicBase_initialize( - address _owner, - KlerosCore _core, - address _wNative, - uint256 _jumpDisputeKitID - ) internal onlyInitializing { - owner = _owner; - core = _core; - wNative = _wNative; - jumpDisputeKitID = _jumpDisputeKitID; - } - - // ************************ // - // * Governance * // - // ************************ // - - /// @dev Allows the owner to call anything on behalf of the contract. - /// @param _destination The destination of the call. - /// @param _amount The value sent with the call. - /// @param _data The data sent with the call. - function executeOwnerProposal(address _destination, uint256 _amount, bytes memory _data) external onlyByOwner { - (bool success, ) = _destination.call{value: _amount}(_data); - if (!success) revert UnsuccessfulCall(); - } - - /// @dev Changes the `owner` storage variable. - /// @param _owner The new value for the `owner` storage variable. - function changeOwner(address payable _owner) external onlyByOwner { - owner = _owner; - } - - /// @dev Changes the `core` storage variable. - /// @param _core The new value for the `core` storage variable. - function changeCore(address _core) external onlyByOwner { - core = KlerosCore(_core); - } - - /// @dev Changes the dispute kit ID used for the jump. - /// @param _jumpDisputeKitID The new value for the `jumpDisputeKitID` storage variable. - function changeJumpDisputeKitID(uint256 _jumpDisputeKitID) external onlyByOwner { - jumpDisputeKitID = _jumpDisputeKitID; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract. - /// Note: Access restricted to Kleros Core only. - /// @param _coreDisputeID The ID of the dispute in Kleros Core. - /// @param _numberOfChoices Number of choices of the dispute - /// @param _extraData Additional info about the dispute, for possible use in future dispute kits. - /// @param _nbVotes Number of votes for this dispute. - function createDispute( - uint256 _coreDisputeID, - uint256 _numberOfChoices, - bytes calldata _extraData, - uint256 _nbVotes - ) external override onlyByCore { - uint256 localDisputeID = disputes.length; - Dispute storage dispute = disputes.push(); - dispute.numberOfChoices = _numberOfChoices; - dispute.extraData = _extraData; - dispute.jumped = false; // Possibly true if this DK has jumped in a previous round. - - // New round in the Core should be created before the dispute creation in DK. - dispute.coreRoundIDToLocal[core.getNumberOfRounds(_coreDisputeID) - 1] = dispute.rounds.length; - - Round storage round = dispute.rounds.push(); - round.nbVotes = _nbVotes; - round.tied = true; - - coreDisputeIDToLocal[_coreDisputeID] = localDisputeID; - coreDisputeIDToActive[_coreDisputeID] = true; - emit DisputeCreation(_coreDisputeID, _numberOfChoices, _extraData); - } - - /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. - /// Note: Access restricted to Kleros Core only. - /// @param _coreDisputeID The ID of the dispute in Kleros Core. - /// @param _nonce Nonce of the drawing iteration. - /// @return drawnAddress The drawn address. - function draw( - uint256 _coreDisputeID, - uint256 _nonce - ) external override onlyByCore notJumped(_coreDisputeID) returns (address drawnAddress, uint96 fromSubcourtID) { - uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID]; - Dispute storage dispute = disputes[localDisputeID]; - uint256 localRoundID = dispute.rounds.length - 1; - Round storage round = dispute.rounds[localRoundID]; - - ISortitionModule sortitionModule = core.sortitionModule(); - (uint96 courtID, , , , ) = core.disputes(_coreDisputeID); - (drawnAddress, fromSubcourtID) = sortitionModule.draw(courtID, _coreDisputeID, _nonce); - if (drawnAddress == address(0)) { - // Sortition can return 0 address if no one has staked yet. - return (drawnAddress, fromSubcourtID); - } - - if (_postDrawCheck(round, _coreDisputeID, drawnAddress)) { - round.votes.push(Vote({account: drawnAddress, commit: bytes32(0), choice: 0, voted: false})); - alreadyDrawn[localDisputeID][localRoundID][drawnAddress] = true; - } else { - drawnAddress = address(0); - } - } - - /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the - /// commit period, each call overrides the commits of the previous one. - /// `O(n)` where - /// `n` is the number of votes. - /// @param _coreDisputeID The ID of the dispute in Kleros Core. - /// @param _voteIDs The IDs of the votes. - /// @param _commit The commitment hash. - function castCommit(uint256 _coreDisputeID, uint256[] calldata _voteIDs, bytes32 _commit) external { - _castCommit(_coreDisputeID, _voteIDs, _commit); - } - - function _castCommit( - uint256 _coreDisputeID, - uint256[] calldata _voteIDs, - bytes32 _commit - ) internal notJumped(_coreDisputeID) { - (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID); - if (period != KlerosCore.Period.commit) revert NotCommitPeriod(); - if (_commit == bytes32(0)) revert EmptyCommit(); - if (!coreDisputeIDToActive[_coreDisputeID]) revert NotActiveForCoreDisputeID(); - - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - for (uint256 i = 0; i < _voteIDs.length; i++) { - if (round.votes[_voteIDs[i]].account != msg.sender) revert JurorHasToOwnTheVote(); - round.votes[_voteIDs[i]].commit = _commit; - } - round.totalCommitted += _voteIDs.length; - emit CommitCast(_coreDisputeID, msg.sender, _voteIDs, _commit); - } - - /// @dev Sets the caller's choices for the specified votes. - /// `O(n)` where - /// `n` is the number of votes. - /// @param _coreDisputeID The ID of the dispute in Kleros Core. - /// @param _voteIDs The IDs of the votes. - /// @param _choice The choice. - /// @param _salt The salt for the commit if the votes were hidden. - /// @param _justification Justification of the choice. - function castVote( - uint256 _coreDisputeID, - uint256[] calldata _voteIDs, - uint256 _choice, - uint256 _salt, - string memory _justification - ) external { - _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, msg.sender); - } - - function _castVote( - uint256 _coreDisputeID, - uint256[] calldata _voteIDs, - uint256 _choice, - uint256 _salt, - string memory _justification, - address _juror - ) internal notJumped(_coreDisputeID) { - (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID); - if (period != KlerosCore.Period.vote) revert NotVotePeriod(); - if (_voteIDs.length == 0) revert EmptyVoteIDs(); - if (!coreDisputeIDToActive[_coreDisputeID]) revert NotActiveForCoreDisputeID(); - - uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID]; - Dispute storage dispute = disputes[localDisputeID]; - if (_choice > dispute.numberOfChoices) revert ChoiceOutOfBounds(); - - uint256 localRoundID = dispute.rounds.length - 1; - Round storage round = dispute.rounds[localRoundID]; - { - (uint96 courtID, , , , ) = core.disputes(_coreDisputeID); - (, bool hiddenVotes, , , , , ) = core.courts(courtID); - bytes32 actualVoteHash = hashVote(_choice, _salt, _justification); - - // Save the votes. - for (uint256 i = 0; i < _voteIDs.length; i++) { - if (round.votes[_voteIDs[i]].account != _juror) revert JurorHasToOwnTheVote(); - if (hiddenVotes && _getExpectedVoteHash(localDisputeID, localRoundID, _voteIDs[i]) != actualVoteHash) - revert HashDoesNotMatchHiddenVoteCommitment(); - if (round.votes[_voteIDs[i]].voted) revert VoteAlreadyCast(); - round.votes[_voteIDs[i]].choice = _choice; - round.votes[_voteIDs[i]].voted = true; - } - } // Workaround stack too deep - - round.totalVoted += _voteIDs.length; - - round.counts[_choice] += _voteIDs.length; - if (_choice == round.winningChoice) { - if (round.tied) round.tied = false; - } else { - // Voted for another choice. - if (round.counts[_choice] == round.counts[round.winningChoice]) { - // Tie. - if (!round.tied) round.tied = true; - } else if (round.counts[_choice] > round.counts[round.winningChoice]) { - // New winner. - round.winningChoice = _choice; - round.tied = false; - } - } - emit VoteCast(_coreDisputeID, _juror, _voteIDs, _choice, _justification); - } - - /// @dev Manages contributions, and appeals a dispute if at least two choices are fully funded. - /// Note that the surplus deposit will be reimbursed. - /// @param _coreDisputeID Index of the dispute in Kleros Core. - /// @param _choice A choice that receives funding. - function fundAppeal(uint256 _coreDisputeID, uint256 _choice) external payable notJumped(_coreDisputeID) { - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - if (_choice > dispute.numberOfChoices) revert ChoiceOutOfBounds(); - if (!coreDisputeIDToActive[_coreDisputeID]) revert NotActiveForCoreDisputeID(); - - (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID); - if (block.timestamp < appealPeriodStart || block.timestamp >= appealPeriodEnd) revert AppealPeriodIsOver(); - - uint256 multiplier; - (uint256 ruling, , ) = this.currentRuling(_coreDisputeID); - if (ruling == _choice) { - multiplier = WINNER_STAKE_MULTIPLIER; - } else { - if ( - block.timestamp - appealPeriodStart >= - ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT - ) { - revert AppealPeriodIsOverForLoser(); - } - multiplier = LOSER_STAKE_MULTIPLIER; - } - - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - uint256 coreRoundID = core.getNumberOfRounds(_coreDisputeID) - 1; - - if (round.hasPaid[_choice]) revert AppealFeeIsAlreadyPaid(); - uint256 appealCost = core.appealCost(_coreDisputeID); - uint256 totalCost = appealCost + (appealCost * multiplier) / ONE_BASIS_POINT; - - // Take up to the amount necessary to fund the current round at the current costs. - uint256 contribution; - if (totalCost > round.paidFees[_choice]) { - contribution = totalCost - round.paidFees[_choice] > msg.value // Overflows and underflows will be managed on the compiler level. - ? msg.value - : totalCost - round.paidFees[_choice]; - emit Contribution(_coreDisputeID, coreRoundID, _choice, msg.sender, contribution); - } - - round.contributions[msg.sender][_choice] += contribution; - round.paidFees[_choice] += contribution; - if (round.paidFees[_choice] >= totalCost) { - round.feeRewards += round.paidFees[_choice]; - round.fundedChoices.push(_choice); - round.hasPaid[_choice] = true; - emit ChoiceFunded(_coreDisputeID, coreRoundID, _choice); - } - - if (round.fundedChoices.length > 1) { - // At least two sides are fully funded. - round.feeRewards = round.feeRewards - appealCost; - - if (core.isDisputeKitJumping(_coreDisputeID)) { - // Don't create a new round in case of a jump, and remove local dispute from the flow. - dispute.jumped = true; - } else { - // Don't subtract 1 from length since both round arrays haven't been updated yet. - dispute.coreRoundIDToLocal[coreRoundID + 1] = dispute.rounds.length; - - Round storage newRound = dispute.rounds.push(); - newRound.nbVotes = core.getNumberOfVotes(_coreDisputeID); - newRound.tied = true; - } - core.appeal{value: appealCost}(_coreDisputeID, dispute.numberOfChoices, dispute.extraData); - } - - if (msg.value > contribution) payable(msg.sender).safeSend(msg.value - contribution, wNative); - } - - /// @dev Allows those contributors who attempted to fund an appeal round to withdraw any reimbursable fees or rewards after the dispute gets resolved. - /// Note that withdrawals are not possible if the core contract is paused. - /// @param _coreDisputeID Index of the dispute in Kleros Core contract. - /// @param _beneficiary The address whose rewards to withdraw. - /// @param _coreRoundID The round in the Kleros Core contract the caller wants to withdraw from. - /// @param _choice The ruling option that the caller wants to withdraw from. - /// @return amount The withdrawn amount. - function withdrawFeesAndRewards( - uint256 _coreDisputeID, - address payable _beneficiary, - uint256 _coreRoundID, - uint256 _choice - ) external returns (uint256 amount) { - (, , , bool isRuled, ) = core.disputes(_coreDisputeID); - if (!isRuled) revert DisputeNotResolved(); - if (core.paused()) revert CoreIsPaused(); - if (!coreDisputeIDToActive[_coreDisputeID]) revert NotActiveForCoreDisputeID(); - - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]]; - (uint256 finalRuling, , ) = core.currentRuling(_coreDisputeID); - - if (!round.hasPaid[_choice]) { - // Allow to reimburse if funding was unsuccessful for this ruling option. - amount = round.contributions[_beneficiary][_choice]; - } else { - // Funding was successful for this ruling option. - if (_choice == finalRuling) { - // This ruling option is the ultimate winner. - amount = round.paidFees[_choice] > 0 - ? (round.contributions[_beneficiary][_choice] * round.feeRewards) / round.paidFees[_choice] - : 0; - } else if (!round.hasPaid[finalRuling]) { - // The ultimate winner was not funded in this round. In this case funded ruling option(s) are reimbursed. - amount = - (round.contributions[_beneficiary][_choice] * round.feeRewards) / - (round.paidFees[round.fundedChoices[0]] + round.paidFees[round.fundedChoices[1]]); - } - } - round.contributions[_beneficiary][_choice] = 0; - - if (amount != 0) { - _beneficiary.safeSend(amount, wNative); - emit Withdrawal(_coreDisputeID, _coreRoundID, _choice, _beneficiary, amount); - } - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /** - * @dev Computes the hash of a vote using ABI encoding - * @dev The unused parameters may be used by overriding contracts. - * @param _choice The choice being voted for - * @param _salt A random salt for commitment - * @return bytes32 The hash of the encoded vote parameters - */ - function hashVote( - uint256 _choice, - uint256 _salt, - string memory /*_justification*/ - ) public view virtual returns (bytes32) { - return keccak256(abi.encodePacked(_choice, _salt)); - } - - function getFundedChoices(uint256 _coreDisputeID) public view returns (uint256[] memory fundedChoices) { - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - Round storage lastRound = dispute.rounds[dispute.rounds.length - 1]; - return lastRound.fundedChoices; - } - - /// @dev Gets the current ruling of a specified dispute. - /// @param _coreDisputeID The ID of the dispute in Kleros Core. - /// @return ruling The current ruling. - /// @return tied Whether it's a tie or not. - /// @return overridden Whether the ruling was overridden by appeal funding or not. - function currentRuling( - uint256 _coreDisputeID - ) external view override returns (uint256 ruling, bool tied, bool overridden) { - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - tied = round.tied; - ruling = tied ? 0 : round.winningChoice; - (, , KlerosCore.Period period, , ) = core.disputes(_coreDisputeID); - // Override the final ruling if only one side funded the appeals. - if (period == KlerosCore.Period.execution) { - uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID); - if (fundedChoices.length == 1) { - ruling = fundedChoices[0]; - tied = false; - overridden = true; - } - } - } - - /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit. - /// @param _voteID The ID of the vote. - /// @return pnkCoherence The degree of coherence in basis points for the dispute PNK reward. - /// @return feeCoherence The degree of coherence in basis points for the dispute fee reward. - function getDegreeOfCoherenceReward( - uint256 _coreDisputeID, - uint256 _coreRoundID, - uint256 _voteID, - uint256 /* _feePerJuror */, - uint256 /* _pnkAtStakePerJuror */ - ) external view override returns (uint256 pnkCoherence, uint256 feeCoherence) { - uint256 coherence = _getDegreeOfCoherence(_coreDisputeID, _coreRoundID, _voteID); - return (coherence, coherence); - } - - /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the penalty. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit. - /// @param _voteID The ID of the vote. - /// @return pnkCoherence The degree of coherence in basis points for the dispute PNK reward. - function getDegreeOfCoherencePenalty( - uint256 _coreDisputeID, - uint256 _coreRoundID, - uint256 _voteID, - uint256 /* _feePerJuror */, - uint256 /* _pnkAtStakePerJuror */ - ) external view override returns (uint256 pnkCoherence) { - return _getDegreeOfCoherence(_coreDisputeID, _coreRoundID, _voteID); - } - - function _getDegreeOfCoherence( - uint256 _coreDisputeID, - uint256 _coreRoundID, - uint256 _voteID - ) internal view returns (uint256 coherence) { - // In this contract this degree can be either 0 or 1, but in other dispute kits this value can be something in between. - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID]; - (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID); - - if (vote.voted && (vote.choice == winningChoice || tied)) { - return ONE_BASIS_POINT; - } else { - return 0; - } - } - - /// @dev Gets the number of jurors who are eligible to a reward in this round. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit. - /// @return The number of coherent jurors. - function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view override returns (uint256) { - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - Round storage currentRound = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]]; - (uint256 winningChoice, bool tied, ) = core.currentRuling(_coreDisputeID); - - if (currentRound.totalVoted == 0 || (!tied && currentRound.counts[winningChoice] == 0)) { - return 0; - } else if (tied) { - return currentRound.totalVoted; - } else { - return currentRound.counts[winningChoice]; - } - } - - /// @dev Returns true if all of the jurors have cast their commits for the last round. - /// @param _coreDisputeID The ID of the dispute in Kleros Core. - /// @return Whether all of the jurors have cast their commits for the last round. - function areCommitsAllCast(uint256 _coreDisputeID) external view override returns (bool) { - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - return round.totalCommitted == round.votes.length; - } - - /// @dev Returns true if all of the jurors have cast their votes for the last round. - /// Note that this function is to be called directly by the core contract and is not for off-chain usage. - /// @param _coreDisputeID The ID of the dispute in Kleros Core. - /// @return Whether all of the jurors have cast their votes for the last round. - function areVotesAllCast(uint256 _coreDisputeID) external view override returns (bool) { - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - - (uint96 courtID, , , , ) = core.disputes(_coreDisputeID); - (, bool hiddenVotes, , , , , ) = core.courts(courtID); - uint256 expectedTotalVoted = hiddenVotes ? round.totalCommitted : round.votes.length; - - return round.totalVoted == expectedTotalVoted; - } - - /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). - /// Note that this function is to be called directly by the core contract and is not for off-chain usage. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @return Whether the appeal funding is finished. - function isAppealFunded(uint256 _coreDisputeID) external view override returns (bool) { - (uint256 appealPeriodStart, uint256 appealPeriodEnd) = core.appealPeriod(_coreDisputeID); - - uint256[] memory fundedChoices = getFundedChoices(_coreDisputeID); - // Uses block.timestamp from the current tx when called by the core contract. - return (fundedChoices.length == 0 && - block.timestamp - appealPeriodStart >= - ((appealPeriodEnd - appealPeriodStart) * LOSER_APPEAL_PERIOD_MULTIPLIER) / ONE_BASIS_POINT); - } - - /// @dev Returns true if the dispute is jumping to a parent court. - /// @return Whether the dispute is jumping to a parent court or not. - function earlyCourtJump(uint256 /* _coreDisputeID */) external pure override returns (bool) { - return false; - } - - /// @dev Returns the number of votes after the appeal. - /// @param _currentNbVotes The number of votes before the appeal. - /// @return The number of votes after the appeal. - function getNbVotesAfterAppeal( - IDisputeKit /* _previousDisputeKit */, - uint256 _currentNbVotes - ) external pure override returns (uint256) { - return (_currentNbVotes * 2) + 1; - } - - /// @dev Returns the dispute kid ID be used after court jump by Kleros Core. - /// @return The ID of the dispute kit in Kleros Core disputeKits array. - function getJumpDisputeKitID() external view override returns (uint256) { - // Fall back to classic DK in case the jump ID is not defined. - return jumpDisputeKitID == 0 ? DISPUTE_KIT_CLASSIC : jumpDisputeKitID; - } - - /// @dev Returns true if the specified voter was active in this round. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit. - /// @param _voteID The ID of the voter. - /// @return Whether the voter was active or not. - function isVoteActive( - uint256 _coreDisputeID, - uint256 _coreRoundID, - uint256 _voteID - ) external view override returns (bool) { - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID]; - return vote.voted; - } - - function getRoundInfo( - uint256 _coreDisputeID, - uint256 _coreRoundID, - uint256 _choice - ) - external - view - override - returns ( - uint256 winningChoice, - bool tied, - uint256 totalVoted, - uint256 totalCommited, - uint256 nbVoters, - uint256 choiceCount - ) - { - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - Round storage round = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]]; - return ( - round.winningChoice, - round.tied, - round.totalVoted, - round.totalCommitted, - round.votes.length, - round.counts[_choice] - ); - } - - /// @dev Returns the number of rounds in a dispute. - /// @param _localDisputeID The ID of the dispute in the Dispute Kit. - /// @return The number of rounds in the dispute. - function getNumberOfRounds(uint256 _localDisputeID) external view returns (uint256) { - return disputes[_localDisputeID].rounds.length; - } - - /// @dev Returns the local dispute ID and round ID for a given core dispute ID and core round ID. - /// @param _coreDisputeID The ID of the dispute in Kleros Core. - /// @param _coreRoundID The ID of the round in Kleros Core. - /// @return localDisputeID The ID of the dispute in the Dispute Kit. - /// @return localRoundID The ID of the round in the Dispute Kit. - function getLocalDisputeRoundID( - uint256 _coreDisputeID, - uint256 _coreRoundID - ) external view returns (uint256 localDisputeID, uint256 localRoundID) { - localDisputeID = coreDisputeIDToLocal[_coreDisputeID]; - localRoundID = disputes[localDisputeID].coreRoundIDToLocal[_coreRoundID]; - } - - /// @dev Returns the vote information for a given vote ID. - /// @param _coreDisputeID The ID of the dispute in Kleros Core. - /// @param _coreRoundID The ID of the round in Kleros Core. - /// @param _voteID The ID of the vote. - /// @return account The address of the juror who cast the vote. - /// @return commit The commit of the vote. - function getVoteInfo( - uint256 _coreDisputeID, - uint256 _coreRoundID, - uint256 _voteID - ) external view override returns (address account, bytes32 commit, uint256 choice, bool voted) { - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - Vote storage vote = dispute.rounds[dispute.coreRoundIDToLocal[_coreRoundID]].votes[_voteID]; - return (vote.account, vote.commit, vote.choice, vote.voted); - } - - // ************************************* // - // * Internal * // - // ************************************* // - - /// @dev Returns the expected vote hash for a given vote. - /// @param _localDisputeID The ID of the dispute in the Dispute Kit. - /// @param _localRoundID The ID of the round in the Dispute Kit. - /// @param _voteID The ID of the vote. - /// @return The expected vote hash. - function _getExpectedVoteHash( - uint256 _localDisputeID, - uint256 _localRoundID, - uint256 _voteID - ) internal view virtual returns (bytes32) { - return disputes[_localDisputeID].rounds[_localRoundID].votes[_voteID].commit; - } - - /// @dev Checks that the chosen address satisfies certain conditions for being drawn. - /// Note that we don't check the minStake requirement here because of the implicit staking in parent courts. - /// minStake is checked directly during staking process however it's possible for the juror to get drawn - /// while having < minStake if it is later increased by governance. - /// This issue is expected and harmless. - /// @param _coreDisputeID ID of the dispute in the core contract. - /// @param _juror Chosen address. - /// @return result Whether the address passes the check or not. - function _postDrawCheck( - Round storage /*_round*/, - uint256 _coreDisputeID, - address _juror - ) internal view virtual returns (bool result) { - if (singleDrawPerJuror) { - uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID]; - Dispute storage dispute = disputes[localDisputeID]; - uint256 localRoundID = dispute.rounds.length - 1; - result = !alreadyDrawn[localDisputeID][localRoundID][_juror]; - } else { - result = true; - } - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); - error KlerosCoreOnly(); - error DisputeJumpedToParentDK(); - error UnsuccessfulCall(); - error NotCommitPeriod(); - error EmptyCommit(); - error NotActiveForCoreDisputeID(); - error JurorHasToOwnTheVote(); - error NotVotePeriod(); - error EmptyVoteIDs(); - error ChoiceOutOfBounds(); - error HashDoesNotMatchHiddenVoteCommitment(); - error VoteAlreadyCast(); - error AppealPeriodIsOver(); - error AppealPeriodIsOverForLoser(); - error AppealFeeIsAlreadyPaid(); - error DisputeNotResolved(); - error CoreIsPaused(); -} diff --git a/contracts/src/arbitration/dispute-kits/DisputeKitGated.sol b/contracts/src/arbitration/dispute-kits/DisputeKitGated.sol deleted file mode 100644 index 8abfdecac..000000000 --- a/contracts/src/arbitration/dispute-kits/DisputeKitGated.sol +++ /dev/null @@ -1,119 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {DisputeKitClassicBase, KlerosCore} from "./DisputeKitClassicBase.sol"; - -interface IBalanceHolder { - /// @dev Returns the number of tokens in `owner` account. - /// @dev Compatible with ERC-20 and ERC-721. - /// @param owner The address of the owner. - /// @return balance The number of tokens in `owner` account. - function balanceOf(address owner) external view returns (uint256 balance); -} - -interface IBalanceHolderERC1155 { - /// @dev Returns the balance of an ERC-1155 token. - /// @param account The address of the token holder - /// @param id ID of the token - /// @return The token balance - function balanceOf(address account, uint256 id) external view returns (uint256); -} - -/// @title DisputeKitGated -/// Dispute kit implementation adapted from DisputeKitClassic -/// - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 -/// - a vote aggregation system: plurality, -/// - an incentive system: equal split between coherent votes, -/// - an appeal system: fund 2 choices only, vote on any choice. -contract DisputeKitGated is DisputeKitClassicBase { - string public constant override version = "2.0.0"; - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Initializer. - /// @param _owner The owner's address. - /// @param _core The KlerosCore arbitrator. - /// @param _wNative The wrapped native token address, typically wETH. - /// @param _jumpDisputeKitID The ID of the dispute kit to switch to after the court jump. - function initialize( - address _owner, - KlerosCore _core, - address _wNative, - uint256 _jumpDisputeKitID - ) external initializer { - __DisputeKitClassicBase_initialize(_owner, _core, _wNative, _jumpDisputeKitID); - } - - // ************************ // - // * Governance * // - // ************************ // - - /// @dev Access Control to perform implementation upgrades (UUPS Proxiable) - /// Only the owner can perform upgrades (`onlyByOwner`) - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - // ************************************* // - // * Internal * // - // ************************************* // - - /// @dev Extracts token gating information from the extra data. - /// @param _extraData The extra data bytes array with the following encoding: - /// - bytes 0-31: uint96 courtID, not used here - /// - bytes 32-63: uint256 minJurors, not used here - /// - bytes 64-95: uint256 disputeKitID, not used here - /// - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160) - /// - bytes 128-159: uint256 tokenId - /// @return tokenGate The address of the token contract used for gating access. - /// @return isERC1155 True if the token is an ERC-1155, false for ERC-20/ERC-721. - /// @return tokenId The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721). - function extraDataToTokenInfo( - bytes memory _extraData - ) public pure returns (address tokenGate, bool isERC1155, uint256 tokenId) { - // Need at least 160 bytes to safely read the parameters - if (_extraData.length < 160) return (address(0), false, 0); - - assembly { - // solium-disable-line security/no-inline-assembly - let packedTokenGateIsERC1155 := mload(add(_extraData, 0x80)) // 4th parameter at offset 128 - tokenId := mload(add(_extraData, 0xA0)) // 5th parameter at offset 160 (moved up) - - // Unpack address from lower 160 bits and bool from bit 160 - tokenGate := and(packedTokenGateIsERC1155, 0xffffffffffffffffffffffffffffffffffffffff) - isERC1155 := and(shr(160, packedTokenGateIsERC1155), 1) - } - } - - /// @inheritdoc DisputeKitClassicBase - function _postDrawCheck( - Round storage _round, - uint256 _coreDisputeID, - address _juror - ) internal view override returns (bool) { - if (!super._postDrawCheck(_round, _coreDisputeID, _juror)) return false; - - // Get the local dispute and extract token info from extraData - uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID]; - Dispute storage dispute = disputes[localDisputeID]; - (address tokenGate, bool isERC1155, uint256 tokenId) = extraDataToTokenInfo(dispute.extraData); - - // If no token gate is specified, allow all jurors - if (tokenGate == address(0)) return true; - - // Check juror's token balance - if (isERC1155) { - return IBalanceHolderERC1155(tokenGate).balanceOf(_juror, tokenId) > 0; - } else { - return IBalanceHolder(tokenGate).balanceOf(_juror) > 0; - } - } -} diff --git a/contracts/src/arbitration/dispute-kits/DisputeKitGatedShutter.sol b/contracts/src/arbitration/dispute-kits/DisputeKitGatedShutter.sol deleted file mode 100644 index 573f81f11..000000000 --- a/contracts/src/arbitration/dispute-kits/DisputeKitGatedShutter.sol +++ /dev/null @@ -1,256 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {DisputeKitClassicBase, KlerosCore} from "./DisputeKitClassicBase.sol"; - -interface IBalanceHolder { - /// @dev Returns the number of tokens in `owner` account. - /// @dev Compatible with ERC-20 and ERC-721. - /// @param owner The address of the owner. - /// @return balance The number of tokens in `owner` account. - function balanceOf(address owner) external view returns (uint256 balance); -} - -interface IBalanceHolderERC1155 { - /// @dev Returns the balance of an ERC-1155 token. - /// @param account The address of the token holder - /// @param id ID of the token - /// @return The token balance - function balanceOf(address account, uint256 id) external view returns (uint256); -} - -/// @title DisputeKitGatedShutter -/// Added functionality: shielded voting. -/// Dispute kit implementation adapted from DisputeKitClassic -/// - a drawing system: proportional to staked PNK with a non-zero balance of `tokenGate` where `tokenGate` is an ERC20, ERC721 or ERC1155 -/// - a vote aggregation system: plurality, -/// - an incentive system: equal split between coherent votes, -/// - an appeal system: fund 2 choices only, vote on any choice. -contract DisputeKitGatedShutter is DisputeKitClassicBase { - string public constant override version = "2.0.0"; - - // ************************************* // - // * Storage * // - // ************************************* // - - mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(uint256 voteID => bytes32 recoveryCommitment))) - public recoveryCommitments; - - // ************************************* // - // * Transient Storage * // - // ************************************* // - - bool transient callerIsJuror; - - // ************************************* // - // * Events * // - // ************************************* // - - /// @dev Emitted when a vote is cast. - /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract. - /// @param _juror The address of the juror casting the vote commitment. - /// @param _commit The commitment hash. - /// @param _recoveryCommit The commitment hash without the justification. - /// @param _identity The Shutter identity used for encryption. - /// @param _encryptedVote The Shutter encrypted vote. - event CommitCastShutter( - uint256 indexed _coreDisputeID, - address indexed _juror, - bytes32 indexed _commit, - bytes32 _recoveryCommit, - bytes32 _identity, - bytes _encryptedVote - ); - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Initializer. - /// @param _owner The owner's address. - /// @param _core The KlerosCore arbitrator. - /// @param _wNative The wrapped native token address, typically wETH. - /// @param _jumpDisputeKitID The ID of the dispute kit to switch to after the court jump. - function initialize( - address _owner, - KlerosCore _core, - address _wNative, - uint256 _jumpDisputeKitID - ) external initializer { - __DisputeKitClassicBase_initialize(_owner, _core, _wNative, _jumpDisputeKitID); - } - - // ************************ // - // * Governance * // - // ************************ // - - /// @dev Access Control to perform implementation upgrades (UUPS Proxiable) - /// Only the owner can perform upgrades (`onlyByOwner`) - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the - /// commit period, each call overrides the commits of the previous one. - /// `O(n)` where - /// `n` is the number of votes. - /// @param _coreDisputeID The ID of the dispute in Kleros Core. - /// @param _voteIDs The IDs of the votes. - /// @param _commit The commitment hash including the justification. - /// @param _recoveryCommit The commitment hash without the justification. - /// @param _identity The Shutter identity used for encryption. - /// @param _encryptedVote The Shutter encrypted vote. - function castCommitShutter( - uint256 _coreDisputeID, - uint256[] calldata _voteIDs, - bytes32 _commit, - bytes32 _recoveryCommit, - bytes32 _identity, - bytes calldata _encryptedVote - ) external notJumped(_coreDisputeID) { - if (_recoveryCommit == bytes32(0)) revert EmptyRecoveryCommit(); - - uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID]; - Dispute storage dispute = disputes[localDisputeID]; - uint256 localRoundID = dispute.rounds.length - 1; - for (uint256 i = 0; i < _voteIDs.length; i++) { - recoveryCommitments[localDisputeID][localRoundID][_voteIDs[i]] = _recoveryCommit; - } - - // `_castCommit()` ensures that the caller owns the vote - _castCommit(_coreDisputeID, _voteIDs, _commit); - emit CommitCastShutter(_coreDisputeID, msg.sender, _commit, _recoveryCommit, _identity, _encryptedVote); - } - - function castVoteShutter( - uint256 _coreDisputeID, - uint256[] calldata _voteIDs, - uint256 _choice, - uint256 _salt, - string memory _justification - ) external { - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - address juror = dispute.rounds[dispute.rounds.length - 1].votes[_voteIDs[0]].account; - - callerIsJuror = juror == msg.sender; - - // `_castVote()` ensures that all the `_voteIDs` do belong to `juror` - _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, juror); - - callerIsJuror = false; - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /** - * @dev Computes the hash of a vote using ABI encoding - * @param _choice The choice being voted for - * @param _justification The justification for the vote - * @param _salt A random salt for commitment - * @return bytes32 The hash of the encoded vote parameters - */ - function hashVote( - uint256 _choice, - uint256 _salt, - string memory _justification - ) public view override returns (bytes32) { - if (callerIsJuror) { - // Caller is the juror, hash without `_justification` to facilitate recovery. - return keccak256(abi.encodePacked(_choice, _salt)); - } else { - // Caller is not the juror, hash with `_justification`. - bytes32 justificationHash = keccak256(bytes(_justification)); - return keccak256(abi.encode(_choice, _salt, justificationHash)); - } - } - - // ************************************* // - // * Internal * // - // ************************************* // - - /// @dev Returns the expected vote hash for a given vote. - /// @param _localDisputeID The ID of the dispute in the Dispute Kit. - /// @param _localRoundID The ID of the round in the Dispute Kit. - /// @param _voteID The ID of the vote. - /// @return The expected vote hash. - function _getExpectedVoteHash( - uint256 _localDisputeID, - uint256 _localRoundID, - uint256 _voteID - ) internal view override returns (bytes32) { - if (callerIsJuror) { - return recoveryCommitments[_localDisputeID][_localRoundID][_voteID]; - } else { - return disputes[_localDisputeID].rounds[_localRoundID].votes[_voteID].commit; - } - } - - /// @dev Extracts token gating information from the extra data. - /// @param _extraData The extra data bytes array with the following encoding: - /// - bytes 0-31: uint96 courtID, not used here - /// - bytes 32-63: uint256 minJurors, not used here - /// - bytes 64-95: uint256 disputeKitID, not used here - /// - bytes 96-127: uint256 packedTokenGateAndFlag (address tokenGate in bits 0-159, bool isERC1155 in bit 160) - /// - bytes 128-159: uint256 tokenId - /// @return tokenGate The address of the token contract used for gating access. - /// @return isERC1155 True if the token is an ERC-1155, false for ERC-20/ERC-721. - /// @return tokenId The token ID for ERC-1155 tokens (ignored for ERC-20/ERC-721). - function _extraDataToTokenInfo( - bytes memory _extraData - ) internal pure returns (address tokenGate, bool isERC1155, uint256 tokenId) { - // Need at least 160 bytes to safely read the parameters - if (_extraData.length < 160) return (address(0), false, 0); - - assembly { - // solium-disable-line security/no-inline-assembly - let packedTokenGateIsERC1155 := mload(add(_extraData, 0x80)) // 4th parameter at offset 128 - tokenId := mload(add(_extraData, 0xA0)) // 5th parameter at offset 160 (moved up) - - // Unpack address from lower 160 bits and bool from bit 160 - tokenGate := and(packedTokenGateIsERC1155, 0xffffffffffffffffffffffffffffffffffffffff) - isERC1155 := and(shr(160, packedTokenGateIsERC1155), 1) - } - } - - /// @inheritdoc DisputeKitClassicBase - function _postDrawCheck( - Round storage _round, - uint256 _coreDisputeID, - address _juror - ) internal view override returns (bool) { - if (!super._postDrawCheck(_round, _coreDisputeID, _juror)) return false; - - // Get the local dispute and extract token info from extraData - uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID]; - Dispute storage dispute = disputes[localDisputeID]; - (address tokenGate, bool isERC1155, uint256 tokenId) = _extraDataToTokenInfo(dispute.extraData); - - // If no token gate is specified, allow all jurors - if (tokenGate == address(0)) return true; - - // Check juror's token balance - if (isERC1155) { - return IBalanceHolderERC1155(tokenGate).balanceOf(_juror, tokenId) > 0; - } else { - return IBalanceHolder(tokenGate).balanceOf(_juror) > 0; - } - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error EmptyRecoveryCommit(); -} diff --git a/contracts/src/arbitration/dispute-kits/DisputeKitShutter.sol b/contracts/src/arbitration/dispute-kits/DisputeKitShutter.sol deleted file mode 100644 index bbcb28b24..000000000 --- a/contracts/src/arbitration/dispute-kits/DisputeKitShutter.sol +++ /dev/null @@ -1,189 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.28; - -import {DisputeKitClassicBase, KlerosCore} from "./DisputeKitClassicBase.sol"; - -/// @title DisputeKitShutter -/// Added functionality: shielded voting. -/// Dispute kit implementation of the Kleros v1 features including: -/// - a drawing system: proportional to staked PNK, -/// - a vote aggregation system: plurality, -/// - an incentive system: equal split between coherent votes, -/// - an appeal system: fund 2 choices only, vote on any choice. -contract DisputeKitShutter is DisputeKitClassicBase { - string public constant override version = "2.0.0"; - - // ************************************* // - // * Storage * // - // ************************************* // - - mapping(uint256 localDisputeID => mapping(uint256 localRoundID => mapping(uint256 voteID => bytes32 recoveryCommitment))) - public recoveryCommitments; - - // ************************************* // - // * Transient Storage * // - // ************************************* // - - bool transient callerIsJuror; - - // ************************************* // - // * Events * // - // ************************************* // - - /// @dev Emitted when a vote is cast. - /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract. - /// @param _juror The address of the juror casting the vote commitment. - /// @param _commit The commitment hash. - /// @param _recoveryCommit The commitment hash without the justification. - /// @param _identity The Shutter identity used for encryption. - /// @param _encryptedVote The Shutter encrypted vote. - event CommitCastShutter( - uint256 indexed _coreDisputeID, - address indexed _juror, - bytes32 indexed _commit, - bytes32 _recoveryCommit, - bytes32 _identity, - bytes _encryptedVote - ); - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Initializer. - /// @param _owner The owner's address. - /// @param _core The KlerosCore arbitrator. - /// @param _wNative The wrapped native token address, typically wETH. - /// @param _jumpDisputeKitID The ID of the dispute kit to switch to after the court jump. - function initialize( - address _owner, - KlerosCore _core, - address _wNative, - uint256 _jumpDisputeKitID - ) external initializer { - __DisputeKitClassicBase_initialize(_owner, _core, _wNative, _jumpDisputeKitID); - } - - // ************************ // - // * Governance * // - // ************************ // - - /// @dev Access Control to perform implementation upgrades (UUPS Proxiable) - /// Only the owner can perform upgrades (`onlyByOwner`) - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Sets the caller's commit for the specified votes. It can be called multiple times during the - /// commit period, each call overrides the commits of the previous one. - /// `O(n)` where - /// `n` is the number of votes. - /// @param _coreDisputeID The ID of the dispute in Kleros Core. - /// @param _voteIDs The IDs of the votes. - /// @param _commit The commitment hash including the justification. - /// @param _recoveryCommit The commitment hash without the justification. - /// @param _identity The Shutter identity used for encryption. - /// @param _encryptedVote The Shutter encrypted vote. - function castCommitShutter( - uint256 _coreDisputeID, - uint256[] calldata _voteIDs, - bytes32 _commit, - bytes32 _recoveryCommit, - bytes32 _identity, - bytes calldata _encryptedVote - ) external notJumped(_coreDisputeID) { - if (_recoveryCommit == bytes32(0)) revert EmptyRecoveryCommit(); - - uint256 localDisputeID = coreDisputeIDToLocal[_coreDisputeID]; - Dispute storage dispute = disputes[localDisputeID]; - uint256 localRoundID = dispute.rounds.length - 1; - for (uint256 i = 0; i < _voteIDs.length; i++) { - recoveryCommitments[localDisputeID][localRoundID][_voteIDs[i]] = _recoveryCommit; - } - - // `_castCommit()` ensures that the caller owns the vote - _castCommit(_coreDisputeID, _voteIDs, _commit); - emit CommitCastShutter(_coreDisputeID, msg.sender, _commit, _recoveryCommit, _identity, _encryptedVote); - } - - function castVoteShutter( - uint256 _coreDisputeID, - uint256[] calldata _voteIDs, - uint256 _choice, - uint256 _salt, - string memory _justification - ) external { - Dispute storage dispute = disputes[coreDisputeIDToLocal[_coreDisputeID]]; - address juror = dispute.rounds[dispute.rounds.length - 1].votes[_voteIDs[0]].account; - - callerIsJuror = juror == msg.sender; - - // `_castVote()` ensures that all the `_voteIDs` do belong to `juror` - _castVote(_coreDisputeID, _voteIDs, _choice, _salt, _justification, juror); - - callerIsJuror = false; - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /** - * @dev Computes the hash of a vote using ABI encoding - * @param _choice The choice being voted for - * @param _justification The justification for the vote - * @param _salt A random salt for commitment - * @return bytes32 The hash of the encoded vote parameters - */ - function hashVote( - uint256 _choice, - uint256 _salt, - string memory _justification - ) public view override returns (bytes32) { - if (callerIsJuror) { - // Caller is the juror, hash without `_justification` to facilitate recovery. - return keccak256(abi.encodePacked(_choice, _salt)); - } else { - // Caller is not the juror, hash with `_justification`. - bytes32 justificationHash = keccak256(bytes(_justification)); - return keccak256(abi.encode(_choice, _salt, justificationHash)); - } - } - - // ************************************* // - // * Internal * // - // ************************************* // - - /// @dev Returns the expected vote hash for a given vote. - /// @param _localDisputeID The ID of the dispute in the Dispute Kit. - /// @param _localRoundID The ID of the round in the Dispute Kit. - /// @param _voteID The ID of the vote. - /// @return The expected vote hash. - function _getExpectedVoteHash( - uint256 _localDisputeID, - uint256 _localRoundID, - uint256 _voteID - ) internal view override returns (bytes32) { - if (callerIsJuror) { - return recoveryCommitments[_localDisputeID][_localRoundID][_voteID]; - } else { - return disputes[_localDisputeID].rounds[_localRoundID].votes[_voteID].commit; - } - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error EmptyRecoveryCommit(); -} diff --git a/contracts/src/arbitration/dispute-kits/DisputeKitSybilResistant.sol b/contracts/src/arbitration/dispute-kits/DisputeKitSybilResistant.sol deleted file mode 100644 index 10cc67c5c..000000000 --- a/contracts/src/arbitration/dispute-kits/DisputeKitSybilResistant.sol +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {DisputeKitClassicBase, KlerosCore} from "./DisputeKitClassicBase.sol"; - -interface IProofOfHumanity { - /// @dev Return true if the submission is registered and not expired. - /// @param _submissionID The address of the submission. - /// @return Whether the submission is registered or not. - function isRegistered(address _submissionID) external view returns (bool); -} - -/// @title DisputeKitSybilResistant -/// Dispute kit implementation adapted from DisputeKitClassic -/// - a drawing system: at most 1 vote per juror registered on Proof of Humanity, -/// - a vote aggregation system: plurality, -/// - an incentive system: equal split between coherent votes, -/// - an appeal system: fund 2 choices only, vote on any choice. -contract DisputeKitSybilResistant is DisputeKitClassicBase { - string public constant override version = "2.0.0"; - - // ************************************* // - // * Storage * // - // ************************************* // - - IProofOfHumanity public poh; // The Proof of Humanity registry - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Initializer. - /// @param _owner The owner's address. - /// @param _core The KlerosCore arbitrator. - /// @param _poh The Proof of Humanity registry. - /// @param _wNative The wrapped native token address, typically wETH. - /// @param _jumpDisputeKitID The ID of the dispute kit to switch to after the court jump. - function initialize( - address _owner, - KlerosCore _core, - IProofOfHumanity _poh, - address _wNative, - uint256 _jumpDisputeKitID - ) external initializer { - __DisputeKitClassicBase_initialize(_owner, _core, _wNative, _jumpDisputeKitID); - poh = _poh; - singleDrawPerJuror = true; - } - - // ************************ // - // * Governance * // - // ************************ // - - /// @dev Access Control to perform implementation upgrades (UUPS Proxiable) - /// Only the owner can perform upgrades (`onlyByOwner`) - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - // ************************************* // - // * Internal * // - // ************************************* // - - /// @inheritdoc DisputeKitClassicBase - function _postDrawCheck( - Round storage _round, - uint256 _coreDisputeID, - address _juror - ) internal view override returns (bool) { - return super._postDrawCheck(_round, _coreDisputeID, _juror) && poh.isRegistered(_juror); - } -} diff --git a/contracts/src/arbitration/evidence/EvidenceModule.sol b/contracts/src/arbitration/evidence/EvidenceModule.sol deleted file mode 100644 index 8321e55ba..000000000 --- a/contracts/src/arbitration/evidence/EvidenceModule.sol +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "../interfaces/IArbitratorV2.sol"; -import "../interfaces/IEvidence.sol"; -import "../../proxy/UUPSProxiable.sol"; -import "../../proxy/Initializable.sol"; - -/// @title Evidence Module -contract EvidenceModule is IEvidence, Initializable, UUPSProxiable { - string public constant override version = "2.0.0"; - - // ************************************* // - // * Storage * // - // ************************************* // - - address public owner; // The owner of the contract. - - // ************************************* // - // * Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Initializer. - /// @param _owner The owner's address. - function initialize(address _owner) external initializer { - owner = _owner; - } - - // ************************ // - // * Governance * // - // ************************ // - - /** - * @dev Access Control to perform implementation upgrades (UUPS Proxiable) - * @dev Only the owner can perform upgrades (`onlyByOwner`) - */ - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - /// @dev Submits evidence for a dispute. - /// @param _externalDisputeID Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right evidence group ID. - /// @param _evidence Stringified evidence object, example: '{"name" : "Justification", "description" : "Description", "fileURI" : "/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc"}'. - function submitEvidence(uint256 _externalDisputeID, string calldata _evidence) external { - emit Evidence(_externalDisputeID, msg.sender, _evidence); - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); -} diff --git a/contracts/src/arbitration/evidence/ModeratedEvidenceModule.sol b/contracts/src/arbitration/evidence/ModeratedEvidenceModule.sol deleted file mode 100644 index b2b64a4d3..000000000 --- a/contracts/src/arbitration/evidence/ModeratedEvidenceModule.sol +++ /dev/null @@ -1,449 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -// TODO: standard interfaces should be placed in a separated repo (?) -import {IArbitrableV2, IArbitratorV2} from "../interfaces/IArbitrableV2.sol"; -import "../interfaces/IDisputeTemplateRegistry.sol"; - -/// @title Implementation of the Evidence Standard with Moderated Submissions -contract ModeratedEvidenceModule is IArbitrableV2 { - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - enum Party { - None, - Submitter, - Moderator - } - - struct EvidenceData { - address payable submitter; // Address that submitted the evidence. - bool disputed; // Whether the evidence submission has been disputed. - Party ruling; // Final status of the evidence. If not disputed, can be changed by opening another round of moderation. - uint256 disputeID; // The ID of the dispute. An evidence submission can only be disputed once. - Moderation[] moderations; // Stores the data of each moderation event. An evidence submission can be moderated many times. - } - - struct Moderation { - uint256[3] paidFees; // Tracks the fees paid by each side in this moderation. - uint256 feeRewards; // Sum of reimbursable fees and stake rewards available to the parties that made contributions to the side that ultimately wins a dispute. - mapping(address contributor => uint256[3]) contributions; // Maps contributors to their contributions for each side. - bool closed; // Moderation happens over a bounded period of time after which it is considered closed. If so, a new moderation round should be opened. - Party currentWinner; // The current winner of this moderation round. - uint256 bondDeadline; // The deadline until which the loser party can stake to overturn the current status. - uint256 arbitratorDataID; // The index of the relevant arbitratorData struct. - } - - struct ArbitratorData { - uint256 disputeTemplateId; // The ID of the dispute template used by the arbitrator. - bytes arbitratorExtraData; // Extra data for the arbitrator. - } - - // ************************************* // - // * Storage * // - // ************************************* // - - uint256 public constant AMOUNT_OF_CHOICES = 2; - uint256 public constant MULTIPLIER_DIVISOR = 10000; // Divisor parameter for multipliers. - mapping(bytes32 evidenceId => EvidenceData) evidences; // Maps the evidence ID to its data. evidences[evidenceID]. - mapping(uint256 => bytes32) public disputeIDtoEvidenceID; // One-to-one relationship between the dispute and the evidence. - ArbitratorData[] public arbitratorDataList; // Stores the arbitrator data of the contract. Updated each time the data is changed. - IArbitratorV2 public immutable arbitrator; // The trusted arbitrator to resolve potential disputes. If it needs to be changed, a new contract can be deployed. - address public owner; // The address that can make governance changes to the parameters of the contract. - IDisputeTemplateRegistry public templateRegistry; // The dispute template registry. - uint256 public bondTimeout; // The time in seconds during which the last moderation status can be challenged. - uint256 public totalCostMultiplier; // Multiplier of arbitration fees that must be ultimately paid as fee stake. In basis points. - uint256 public initialDepositMultiplier; // Multiplier of arbitration fees that must be paid as initial stake for submitting evidence. In basis points. - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyOwner() { - require(msg.sender == owner, "The caller must be the owner"); - _; - } - - // ************************************* // - // * Events * // - // ************************************* // - - /// @dev To be raised when a moderated evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations). - /// @param _arbitrator The arbitrator of the contract. - /// @param _externalDisputeID Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right evidence group ID. - /// @param _party The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party. - /// @param _evidence Stringified evidence object, example: '{"name" : "Justification", "description" : "Description", "fileURI" : "/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc"}'. - event ModeratedEvidence( - IArbitratorV2 indexed _arbitrator, - uint256 indexed _externalDisputeID, - address indexed _party, - string _evidence - ); - - /// @dev Indicate that a party has to pay a fee or would otherwise be considered as losing. - /// @param _evidenceID The ID of the evidence being moderated. - /// @param _currentWinner The party who is currently winning. - event ModerationStatusChanged(bytes32 indexed _evidenceID, Party _currentWinner); - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Constructor. - /// @param _arbitrator The trusted arbitrator to resolve potential disputes. - /// @param _owner The trusted owner of the contract. - /// @param _totalCostMultiplier Multiplier of arbitration fees that must be ultimately paid as fee stake. In basis points. - /// @param _initialDepositMultiplier Multiplier of arbitration fees that must be paid as initial stake for submitting evidence. In basis points. - /// @param _bondTimeout The time in seconds during which the last moderation status can be challenged. - /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract. - /// @param _templateData The dispute template data. - /// @param _templateDataMappings The dispute template data mappings. - constructor( - IArbitratorV2 _arbitrator, - address _owner, - IDisputeTemplateRegistry _templateRegistry, - uint256 _totalCostMultiplier, - uint256 _initialDepositMultiplier, - uint256 _bondTimeout, - bytes memory _arbitratorExtraData, - string memory _templateData, - string memory _templateDataMappings - ) { - arbitrator = _arbitrator; - owner = _owner; - templateRegistry = _templateRegistry; - - totalCostMultiplier = _totalCostMultiplier; // For example 15000, which would provide a 100% reward to the dispute winner. - initialDepositMultiplier = _initialDepositMultiplier; // For example 63, which equals 1/16. - bondTimeout = _bondTimeout; // For example 24 hs. - - ArbitratorData storage arbitratorData = arbitratorDataList.push(); - arbitratorData.arbitratorExtraData = _arbitratorExtraData; - arbitratorData.disputeTemplateId = templateRegistry.setDisputeTemplate( - "", - _templateData, - _templateDataMappings - ); - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /// @dev Change the owner of the contract. - /// @param _owner The address of the new owner. - function changeOwner(address _owner) external onlyOwner { - owner = _owner; - } - - /// @dev Change the proportion of arbitration fees that must be paid as fee stake by parties when there is no winner or loser (e.g. when the arbitrator refused to rule). - /// @param _initialDepositMultiplier Multiplier of arbitration fees that must be paid as fee stake. In basis points. - function changeInitialDepositMultiplier(uint256 _initialDepositMultiplier) external onlyOwner { - initialDepositMultiplier = _initialDepositMultiplier; - } - - /// @dev Change the proportion of arbitration fees that must be paid as fee stake by the winner of the previous round. - /// @param _totalCostMultiplier Multiplier of arbitration fees that must be paid as fee stake. In basis points. - function changeTotalCostMultiplier(uint256 _totalCostMultiplier) external onlyOwner { - totalCostMultiplier = _totalCostMultiplier; - } - - /// @dev Change the time window within which evidence submissions and removals can be contested. - /// Ongoing moderations will start using the latest bondTimeout available after calling moderate() again. - /// @param _bondTimeout Multiplier of arbitration fees that must be paid as fee stake. In basis points. - function changeBondTimeout(uint256 _bondTimeout) external onlyOwner { - bondTimeout = _bondTimeout; - } - - /// @dev Update the dispute template data. - /// @param _templateData The new dispute template data. - function changeDisputeTemplate( - string calldata _templateData, - string memory _templateDataMappings - ) external onlyOwner { - ArbitratorData storage arbitratorData = arbitratorDataList[arbitratorDataList.length - 1]; - uint256 newDisputeTemplateId = templateRegistry.setDisputeTemplate("", _templateData, _templateDataMappings); - arbitratorDataList.push( - ArbitratorData({ - disputeTemplateId: newDisputeTemplateId, - arbitratorExtraData: arbitratorData.arbitratorExtraData - }) - ); - } - - /// @dev Change the arbitrator to be used for disputes that may be raised in the next requests. The arbitrator is trusted to support appeal period and not reenter. - /// @param _arbitratorExtraData The extra data used by the new arbitrator. - function changeArbitratorExtraData(bytes calldata _arbitratorExtraData) external onlyOwner { - ArbitratorData storage arbitratorData = arbitratorDataList[arbitratorDataList.length - 1]; - arbitratorDataList.push( - ArbitratorData({ - disputeTemplateId: arbitratorData.disputeTemplateId, - arbitratorExtraData: _arbitratorExtraData - }) - ); - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Submits evidence. - /// @param _evidenceGroupID Unique identifier of the evidence group the evidence belongs to. It's the submitter responsability to submit the right evidence group ID. - /// @param _evidence Stringified evidence object, example: '{"name" : "Justification", "description" : "Description", "fileURI" : "/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc"}'. - function submitEvidence(uint256 _evidenceGroupID, string calldata _evidence) external payable { - // Optimization opportunity: map evidenceID to an incremental index that can be safely assumed to be less than a small uint. - bytes32 evidenceID = keccak256(abi.encodePacked(_evidenceGroupID, _evidence)); - EvidenceData storage evidenceData = evidences[evidenceID]; - require(evidenceData.submitter == address(0x0), "Evidence already submitted."); - evidenceData.submitter = payable(msg.sender); - - ArbitratorData storage arbitratorData = arbitratorDataList[arbitratorDataList.length - 1]; - - uint256 arbitrationCost = arbitrator.arbitrationCost(arbitratorData.arbitratorExtraData); - uint256 totalCost = (arbitrationCost * totalCostMultiplier) / MULTIPLIER_DIVISOR; - uint256 depositRequired = (totalCost * initialDepositMultiplier) / MULTIPLIER_DIVISOR; - - Moderation storage moderation = evidenceData.moderations.push(); - // Overpaying is allowed. - contribute(moderation, Party.Submitter, payable(msg.sender), msg.value, totalCost); - require(moderation.paidFees[uint256(Party.Submitter)] >= depositRequired, "Insufficient funding."); - moderation.bondDeadline = block.timestamp + bondTimeout; - moderation.currentWinner = Party.Submitter; - moderation.arbitratorDataID = arbitratorDataList.length - 1; - - // When evidence is submitted for a foreign arbitrable, the arbitrator field of Evidence is ignored. - emit ModeratedEvidence(arbitrator, _evidenceGroupID, msg.sender, _evidence); - } - - /// @dev Moderates an evidence submission. Requires the contester to at least double the accumulated stake of the oposing party. - /// Optimization opportunity: use `bytes calldata args` and compress _evidenceID and _side (only for optimistic rollups). - /// @param _evidenceID Unique identifier of the evidence submission. - /// @param _side The side to contribute to. - function moderate(bytes32 _evidenceID, Party _side) external payable { - EvidenceData storage evidenceData = evidences[_evidenceID]; - require(evidenceData.submitter != address(0x0), "Evidence does not exist."); - require(!evidenceData.disputed, "Evidence already disputed."); - require(_side != Party.None, "Invalid side."); - - Moderation storage moderation = evidenceData.moderations[evidenceData.moderations.length - 1]; - if (moderation.closed) { - // Start another round of moderation. - moderation = evidenceData.moderations.push(); - moderation.arbitratorDataID = arbitratorDataList.length - 1; - } - require(_side != moderation.currentWinner, "Only the current loser can fund."); - require( - block.timestamp < moderation.bondDeadline || moderation.bondDeadline == 0, - "Moderation market is closed." - ); - - ArbitratorData storage arbitratorData = arbitratorDataList[moderation.arbitratorDataID]; - - uint256 arbitrationCost = arbitrator.arbitrationCost(arbitratorData.arbitratorExtraData); - uint256 totalCost = (arbitrationCost * totalCostMultiplier) / MULTIPLIER_DIVISOR; - - uint256 opposition = 3 - uint256(_side); - uint256 depositRequired = moderation.paidFees[opposition] * 2; - if (depositRequired == 0) { - depositRequired = (totalCost * initialDepositMultiplier) / MULTIPLIER_DIVISOR; - } else if (depositRequired > totalCost) { - depositRequired = totalCost; - } - - // Overpaying is allowed. - contribute(moderation, _side, payable(msg.sender), msg.value, totalCost); - require(moderation.paidFees[uint256(_side)] >= depositRequired, "Insufficient funding."); - - if (moderation.paidFees[uint256(_side)] >= totalCost && moderation.paidFees[opposition] >= totalCost) { - moderation.feeRewards = moderation.feeRewards - arbitrationCost; - - evidenceData.disputeID = arbitrator.createDispute{value: arbitrationCost}( - AMOUNT_OF_CHOICES, - arbitratorData.arbitratorExtraData - ); - disputeIDtoEvidenceID[evidenceData.disputeID] = _evidenceID; - - emit DisputeRequest( - arbitrator, - evidenceData.disputeID, - uint256(_evidenceID), - arbitratorData.disputeTemplateId, - "" - ); - evidenceData.disputed = true; - moderation.bondDeadline = 0; - moderation.currentWinner = Party.None; - } else { - moderation.bondDeadline = block.timestamp + bondTimeout; - moderation.currentWinner = _side; - } - emit ModerationStatusChanged(_evidenceID, moderation.currentWinner); - } - - /// @dev Resolves a moderation event once the timeout has passed. - /// @param _evidenceID Unique identifier of the evidence submission. - function resolveModerationMarket(bytes32 _evidenceID) external { - // Moderation market resolutions are not final. - // Evidence can be reported/accepted again in the future. - // Only an arbitrator's ruling after a dispute is final. - EvidenceData storage evidenceData = evidences[_evidenceID]; - Moderation storage moderation = evidenceData.moderations[evidenceData.moderations.length - 1]; - - require(!evidenceData.disputed, "Evidence already disputed."); - require(block.timestamp > moderation.bondDeadline, "Moderation still ongoing."); - - moderation.closed = true; - evidenceData.ruling = moderation.currentWinner; - } - - /// @dev Make a fee contribution. - /// @param _moderation The moderation to contribute to. - /// @param _side The side to contribute to. - /// @param _contributor The contributor. - /// @param _amount The amount contributed. - /// @param _totalRequired The total amount required for this side. - /// @return The amount of fees contributed. - function contribute( - Moderation storage _moderation, - Party _side, - address payable _contributor, - uint256 _amount, - uint256 _totalRequired - ) internal returns (uint256) { - uint256 contribution; - uint256 remainingETH; - uint256 requiredAmount = _moderation.paidFees[uint256(_side)] >= _totalRequired - ? 0 - : _totalRequired - _moderation.paidFees[uint256(_side)]; - (contribution, remainingETH) = calculateContribution(_amount, requiredAmount); - _moderation.contributions[_contributor][uint256(_side)] += contribution; - _moderation.paidFees[uint256(_side)] += contribution; - _moderation.feeRewards += contribution; - - if (remainingETH != 0) _contributor.send(remainingETH); - - return contribution; - } - - /// @dev Returns the contribution value and remainder from available ETH and required amount. - /// @param _available The amount of ETH available for the contribution. - /// @param _requiredAmount The amount of ETH required for the contribution. - /// @return taken The amount of ETH taken. - /// @return remainder The amount of ETH left from the contribution. - function calculateContribution( - uint256 _available, - uint256 _requiredAmount - ) internal pure returns (uint256 taken, uint256 remainder) { - if (_requiredAmount > _available) return (_available, 0); // Take whatever is available, return 0 as leftover ETH. - - remainder = _available - _requiredAmount; - return (_requiredAmount, remainder); - } - - /// @dev Withdraws contributions of moderations. Reimburses contributions if the appeal was not fully funded. - /// If the appeal was fully funded, sends the fee stake rewards and reimbursements proportional to the contributions made to the winner of a dispute. - /// Optimization opportunity: use `bytes calldata args` and compress _evidenceID and _moderationID (only for optimistic rollups). - /// @param _beneficiary The address that made contributions. - /// @param _evidenceID The ID of the associated evidence submission. - /// @param _moderationID The ID of the moderatino occurence. - function withdrawFeesAndRewards( - address payable _beneficiary, - bytes32 _evidenceID, - uint256 _moderationID - ) external returns (uint256 reward) { - EvidenceData storage evidenceData = evidences[_evidenceID]; - Moderation storage moderation = evidenceData.moderations[_moderationID]; - require(moderation.closed, "Moderation must be closed."); - - uint256[3] storage contributionTo = moderation.contributions[_beneficiary]; - - if (evidenceData.ruling == Party.None) { - // Reimburse unspent fees proportionally if there is no winner and loser. - uint256 totalFeesPaid = moderation.paidFees[uint256(Party.Submitter)] + - moderation.paidFees[uint256(Party.Moderator)]; - uint256 totalBeneficiaryContributions = contributionTo[uint256(Party.Submitter)] + - contributionTo[uint256(Party.Moderator)]; - reward = totalFeesPaid > 0 ? (totalBeneficiaryContributions * moderation.feeRewards) / totalFeesPaid : 0; - } else { - // Reward the winner. - uint256 paidFees = moderation.paidFees[uint256(evidenceData.ruling)]; - reward = paidFees > 0 - ? (contributionTo[uint256(evidenceData.ruling)] * moderation.feeRewards) / paidFees - : 0; - } - contributionTo[uint256(Party.Submitter)] = 0; - contributionTo[uint256(Party.Moderator)] = 0; - - _beneficiary.send(reward); // It is the user responsibility to accept ETH. - } - - /// @dev Give a ruling for a dispute. Must be called by the arbitrator to enforce the final ruling. - /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract. - /// @param _disputeID ID of the dispute in the Arbitrator contract. - /// @param _ruling Ruling given by the arbitrator. Note that 0 is reserved for "Not able/wanting to make a decision". - function rule(uint256 _disputeID, uint256 _ruling) public override { - bytes32 evidenceID = disputeIDtoEvidenceID[_disputeID]; - EvidenceData storage evidenceData = evidences[evidenceID]; - Moderation storage moderation = evidenceData.moderations[evidenceData.moderations.length - 1]; - require( - evidenceData.disputed && - !moderation.closed && - msg.sender == address(arbitrator) && - _ruling <= AMOUNT_OF_CHOICES, - "Ruling can't be processed." - ); - - evidenceData.ruling = Party(_ruling); - moderation.closed = true; - - emit Ruling(arbitrator, _disputeID, _ruling); - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Gets the number of moderation events of the specific evidence submission. - /// @param _evidenceID The ID of the evidence submission. - /// @return The number of moderations. - function getNumberOfModerations(bytes32 _evidenceID) external view returns (uint256) { - EvidenceData storage evidenceData = evidences[_evidenceID]; - return evidenceData.moderations.length; - } - - /// @dev Gets the contributions made by a party for a given moderation. - /// @param _evidenceID The ID of the evidence submission. - /// @param _moderationID The ID of the moderation occurence. - /// @param _contributor The address of the contributor. - /// @return contributions The contributions. - function getContributions( - bytes32 _evidenceID, - uint256 _moderationID, - address _contributor - ) external view returns (uint256[3] memory contributions) { - EvidenceData storage evidenceData = evidences[_evidenceID]; - Moderation storage moderation = evidenceData.moderations[_moderationID]; - contributions = moderation.contributions[_contributor]; - } - - /// @dev Gets the information of a moderation event. - /// @param _evidenceID The ID of the evidence submission. - /// @param _moderationID The ID of the moderation occurence. - /// @return paidFees currentWinner feeRewards The moderation information. - function getModerationInfo( - bytes32 _evidenceID, - uint256 _moderationID - ) external view returns (uint256[3] memory paidFees, Party currentWinner, uint256 feeRewards) { - EvidenceData storage evidenceData = evidences[_evidenceID]; - Moderation storage moderation = evidenceData.moderations[_moderationID]; - return (moderation.paidFees, moderation.currentWinner, moderation.feeRewards); - } - - /// @dev Gets the last arbitrator data index, which is used for current new submissions. - /// @return The last arbitrator data index. - function getCurrentArbitratorIndex() external view returns (uint256) { - return arbitratorDataList.length - 1; - } -} diff --git a/contracts/src/arbitration/interfaces/IArbitrableV2.sol b/contracts/src/arbitration/interfaces/IArbitrableV2.sol deleted file mode 100644 index 22dac6e4a..000000000 --- a/contracts/src/arbitration/interfaces/IArbitrableV2.sol +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -import "./IArbitratorV2.sol"; - -/// @title IArbitrableV2 -/// @notice Arbitrable interface. -/// @dev When developing arbitrable contracts, we need to: -/// - Define the action taken when a ruling is received by the contract. -/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData); -interface IArbitrableV2 { - /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID. - /// @param _arbitrator The arbitrator of the contract. - /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract. - /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration. - /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri. - /// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId. - event DisputeRequest( - IArbitratorV2 indexed _arbitrator, - uint256 indexed _arbitratorDisputeID, - uint256 _externalDisputeID, - uint256 _templateId, - string _templateUri - ); - - /// @dev To be raised when a ruling is given. - /// @param _arbitrator The arbitrator giving the ruling. - /// @param _disputeID The identifier of the dispute in the Arbitrator contract. - /// @param _ruling The ruling which was given. - event Ruling(IArbitratorV2 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling); - - /// @dev Give a ruling for a dispute. - /// Must be called by the arbitrator. - /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract. - /// @param _disputeID The identifier of the dispute in the Arbitrator contract. - /// @param _ruling Ruling given by the arbitrator. - /// Note that 0 is reserved for "Not able/wanting to make a decision". - function rule(uint256 _disputeID, uint256 _ruling) external; -} diff --git a/contracts/src/arbitration/interfaces/IArbitratorV2.sol b/contracts/src/arbitration/interfaces/IArbitratorV2.sol deleted file mode 100644 index 9559c81b3..000000000 --- a/contracts/src/arbitration/interfaces/IArbitratorV2.sol +++ /dev/null @@ -1,83 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "./IArbitrableV2.sol"; - -/// @title Arbitrator -/// Arbitrator interface that implements the new arbitration standard. -/// Unlike the ERC-792 this standard is not concerned with appeals, so each arbitrator can implement an appeal system that suits it the most. -/// When developing arbitrator contracts we need to: -/// - Define the functions for dispute creation (createDispute). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes). -/// - Define the functions for cost display (arbitrationCost). -/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling). -interface IArbitratorV2 { - /// @dev To be emitted when a dispute is created. - /// @param _disputeID The identifier of the dispute in the Arbitrator contract. - /// @param _arbitrable The contract which created the dispute. - event DisputeCreation(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable); - - /// @dev To be raised when a ruling is given. - /// @param _arbitrable The arbitrable receiving the ruling. - /// @param _disputeID The identifier of the dispute in the Arbitrator contract. - /// @param _ruling The ruling which was given. - event Ruling(IArbitrableV2 indexed _arbitrable, uint256 indexed _disputeID, uint256 _ruling); - - /// @dev To be emitted when an ERC20 token is added or removed as a method to pay fees. - /// @param _token The ERC20 token. - /// @param _accepted Whether the token is accepted or not. - event AcceptedFeeToken(IERC20 indexed _token, bool indexed _accepted); - - /// @dev To be emitted when the fee for a particular ERC20 token is updated. - /// @param _feeToken The ERC20 token. - /// @param _rateInEth The new rate of the fee token in ETH. - /// @param _rateDecimals The new decimals of the fee token rate. - event NewCurrencyRate(IERC20 indexed _feeToken, uint64 _rateInEth, uint8 _rateDecimals); - - /// @dev Create a dispute and pay for the fees in the native currency, typically ETH. - /// Must be called by the arbitrable contract. - /// Must pay at least arbitrationCost(_extraData). - /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute. - /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes). - /// @return disputeID The identifier of the dispute created. - function createDispute( - uint256 _numberOfChoices, - bytes calldata _extraData - ) external payable returns (uint256 disputeID); - - /// @dev Create a dispute and pay for the fees in a supported ERC20 token. - /// Must be called by the arbitrable contract. - /// Must pay at least arbitrationCost(_extraData). - /// @param _numberOfChoices The number of choices the arbitrator can choose from in this dispute. - /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes). - /// @param _feeToken The ERC20 token used to pay fees. - /// @param _feeAmount Amount of the ERC20 token used to pay fees. - /// @return disputeID The identifier of the dispute created. - function createDispute( - uint256 _numberOfChoices, - bytes calldata _extraData, - IERC20 _feeToken, - uint256 _feeAmount - ) external returns (uint256 disputeID); - - /// @dev Compute the cost of arbitration denominated in the native currency, typically ETH. - /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation. - /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes). - /// @return cost The arbitration cost in ETH. - function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost); - - /// @dev Compute the cost of arbitration denominated in `_feeToken`. - /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation. - /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes). - /// @param _feeToken The ERC20 token used to pay fees. - /// @return cost The arbitration cost in `_feeToken`. - function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) external view returns (uint256 cost); - - /// @dev Gets the current ruling of a specified dispute. - /// @param _disputeID The ID of the dispute. - /// @return ruling The current ruling. - /// @return tied Whether it's a tie or not. - /// @return overridden Whether the ruling was overridden by appeal funding or not. - function currentRuling(uint256 _disputeID) external view returns (uint256 ruling, bool tied, bool overridden); -} diff --git a/contracts/src/arbitration/interfaces/IDisputeKit.sol b/contracts/src/arbitration/interfaces/IDisputeKit.sol deleted file mode 100644 index 90fbbd727..000000000 --- a/contracts/src/arbitration/interfaces/IDisputeKit.sol +++ /dev/null @@ -1,165 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -import "./IArbitratorV2.sol"; - -/// @title IDisputeKit -/// An abstraction of the Dispute Kits intended for interfacing with KlerosCore. -/// It does not intend to abstract the interactions with the user (such as voting or appeal funding) to allow for implementation-specific parameters. -interface IDisputeKit { - // ************************************ // - // * Events * // - // ************************************ // - - /// @dev Emitted when casting a vote to provide the justification of juror's choice. - /// @param _coreDisputeID The identifier of the dispute in the Arbitrator contract. - /// @param _juror Address of the juror. - /// @param _voteIDs The identifiers of the votes in the dispute. - /// @param _choice The choice juror voted for. - /// @param _justification Justification of the choice. - event VoteCast( - uint256 indexed _coreDisputeID, - address indexed _juror, - uint256[] _voteIDs, - uint256 indexed _choice, - string _justification - ); - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Creates a local dispute and maps it to the dispute ID in the Core contract. - /// Note: Access restricted to Kleros Core only. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @param _numberOfChoices Number of choices of the dispute - /// @param _extraData Additional info about the dispute, for possible use in future dispute kits. - /// @param _nbVotes Maximal number of votes this dispute can get. DEPRECATED as we don't need to pass it now. KC handles the count. - function createDispute( - uint256 _coreDisputeID, - uint256 _numberOfChoices, - bytes calldata _extraData, - uint256 _nbVotes - ) external; - - /// @dev Draws the juror from the sortition tree. The drawn address is picked up by Kleros Core. - /// Note: Access restricted to Kleros Core only. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @param _nonce Nonce. - /// @return drawnAddress The drawn address. - function draw( - uint256 _coreDisputeID, - uint256 _nonce - ) external returns (address drawnAddress, uint96 fromSubcourtID); - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Gets the current ruling of a specified dispute. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @return ruling The current ruling. - /// @return tied Whether it's a tie or not. - /// @return overridden Whether the ruling was overridden by appeal funding or not. - function currentRuling(uint256 _coreDisputeID) external view returns (uint256 ruling, bool tied, bool overridden); - - /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the reward. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit. - /// @param _voteID The ID of the vote. - /// @param _feePerJuror The fee per juror. - /// @param _pnkAtStakePerJuror The PNK at stake per juror. - /// @return pnkCoherence The degree of coherence in basis points for the dispute PNK reward. - /// @return feeCoherence The degree of coherence in basis points for the dispute fee reward. - function getDegreeOfCoherenceReward( - uint256 _coreDisputeID, - uint256 _coreRoundID, - uint256 _voteID, - uint256 _feePerJuror, - uint256 _pnkAtStakePerJuror - ) external view returns (uint256 pnkCoherence, uint256 feeCoherence); - - /// @dev Gets the degree of coherence of a particular voter. This function is called by Kleros Core in order to determine the amount of the penalty. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit. - /// @param _voteID The ID of the vote. - /// @param _feePerJuror The fee per juror. - /// @param _pnkAtStakePerJuror The PNK at stake per juror. - /// @return pnkCoherence The degree of coherence in basis points for the dispute PNK reward. - function getDegreeOfCoherencePenalty( - uint256 _coreDisputeID, - uint256 _coreRoundID, - uint256 _voteID, - uint256 _feePerJuror, - uint256 _pnkAtStakePerJuror - ) external view returns (uint256 pnkCoherence); - - /// @dev Gets the number of jurors who are eligible to a reward in this round. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit. - /// @return The number of coherent jurors. - function getCoherentCount(uint256 _coreDisputeID, uint256 _coreRoundID) external view returns (uint256); - - /// @dev Returns true if all of the jurors have cast their commits for the last round. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @return Whether all of the jurors have cast their commits for the last round. - function areCommitsAllCast(uint256 _coreDisputeID) external view returns (bool); - - /// @dev Returns true if all of the jurors have cast their votes for the last round. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @return Whether all of the jurors have cast their votes for the last round. - function areVotesAllCast(uint256 _coreDisputeID) external view returns (bool); - - /// @dev Returns true if the appeal funding is finished prematurely (e.g. when losing side didn't fund). - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @return Whether the appeal funding is finished. - function isAppealFunded(uint256 _coreDisputeID) external view returns (bool); - - /// @dev Returns true if the dispute is jumping to a parent court. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @return Whether the dispute is jumping to a parent court or not. - function earlyCourtJump(uint256 _coreDisputeID) external view returns (bool); - - /// @dev Returns the number of votes after the appeal. - /// @param _previousDisputeKit The previous Dispute Kit. - /// @param _currentNbVotes The number of votes before the appeal. - /// @return The number of votes after the appeal. - function getNbVotesAfterAppeal( - IDisputeKit _previousDisputeKit, - uint256 _currentNbVotes - ) external view returns (uint256); // TODO: remove previousDisputeKit - - /// @dev Returns the dispute kid ID be used after court jump by Kleros Core. - /// @return The ID of the dispute kit in Kleros Core disputeKits array. - function getJumpDisputeKitID() external view returns (uint256); - - /// @dev Returns true if the specified voter was active in this round. - /// @param _coreDisputeID The ID of the dispute in Kleros Core, not in the Dispute Kit. - /// @param _coreRoundID The ID of the round in Kleros Core, not in the Dispute Kit. - /// @param _voteID The ID of the voter. - /// @return Whether the voter was active or not. - function isVoteActive(uint256 _coreDisputeID, uint256 _coreRoundID, uint256 _voteID) external view returns (bool); - - function getRoundInfo( - uint256 _coreDisputeID, - uint256 _coreRoundID, - uint256 _choice - ) - external - view - returns ( - uint256 winningChoice, - bool tied, - uint256 totalVoted, - uint256 totalCommited, - uint256 nbVoters, - uint256 choiceCount - ); - - function getVoteInfo( - uint256 _coreDisputeID, - uint256 _coreRoundID, - uint256 _voteID - ) external view returns (address account, bytes32 commit, uint256 choice, bool voted); -} diff --git a/contracts/src/arbitration/interfaces/IDisputeTemplateRegistry.sol b/contracts/src/arbitration/interfaces/IDisputeTemplateRegistry.sol deleted file mode 100644 index 23e09f8d5..000000000 --- a/contracts/src/arbitration/interfaces/IDisputeTemplateRegistry.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -/// @title IDisputeTemplate -/// @notice Dispute Template interface. -interface IDisputeTemplateRegistry { - /// @dev To be emitted when a new dispute template is created. - /// @param _templateId The identifier of the dispute template. - /// @param _templateTag An optional tag for the dispute template, such as "registration" or "removal". - /// @param _templateData The template data. - /// @param _templateDataMappings The data mappings. - event DisputeTemplate( - uint256 indexed _templateId, - string indexed _templateTag, - string _templateData, - string _templateDataMappings - ); - - function setDisputeTemplate( - string memory _templateTag, - string memory _templateData, - string memory _templateDataMappings - ) external returns (uint256 templateId); -} diff --git a/contracts/src/arbitration/interfaces/IEvidence.sol b/contracts/src/arbitration/interfaces/IEvidence.sol deleted file mode 100644 index a7683186a..000000000 --- a/contracts/src/arbitration/interfaces/IEvidence.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -/// @title IEvidence -interface IEvidence { - /// @dev To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations). - /// @param _externalDisputeID Unique identifier for this dispute outside Kleros. It's the submitter responsability to submit the right external dispute ID. - /// @param _party The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party. - /// @param _evidence Stringified evidence object, example: '{"name" : "Justification", "description" : "Description", "fileURI" : "/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc"}'. - event Evidence(uint256 indexed _externalDisputeID, address indexed _party, string _evidence); -} diff --git a/contracts/src/arbitration/interfaces/ISortitionModule.sol b/contracts/src/arbitration/interfaces/ISortitionModule.sol deleted file mode 100644 index d9fe7e485..000000000 --- a/contracts/src/arbitration/interfaces/ISortitionModule.sol +++ /dev/null @@ -1,73 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -import "../../libraries/Constants.sol"; - -interface ISortitionModule { - enum Phase { - staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors. - generating, // Waiting for a random number. Pass as soon as it is ready. - drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes. - } - - event NewPhase(Phase _phase); - - function createTree(uint96 _courtID, bytes memory _extraData) external; - - function validateStake( - address _account, - uint96 _courtID, - uint256 _newStake, - bool _noDelay - ) external returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult); - - function setStake( - address _account, - uint96 _courtID, - uint256 _pnkDeposit, - uint256 _pnkWithdrawal, - uint256 _newStake - ) external; - - function setStakePenalty( - address _account, - uint96 _courtID, - uint256 _penalty - ) external returns (uint256 pnkBalance, uint256 newCourtStake, uint256 availablePenalty); - - function setStakeReward(address _account, uint96 _courtID, uint256 _reward) external returns (bool success); - - function forcedUnstakeAllCourts(address _account) external; - - function forcedUnstake(address _account, uint96 _courtID) external; - - function lockStake(address _account, uint256 _relativeAmount) external; - - function unlockStake(address _account, uint256 _relativeAmount) external; - - function notifyRandomNumber(uint256 _drawnNumber) external; - - function draw( - uint96 _courtID, - uint256 _coreDisputeID, - uint256 _nonce - ) external view returns (address drawnAddress, uint96 fromSubcourtID); - - function getJurorBalance( - address _juror, - uint96 _courtID - ) external view returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts); - - function getJurorCourtIDs(address _juror) external view returns (uint96[] memory); - - function isJurorStaked(address _juror) external view returns (bool); - - function getJurorLeftoverPNK(address _juror) external view returns (uint256); - - function createDisputeHook(uint256 _disputeID, uint256 _roundID) external; - - function postDrawHook(uint256 _disputeID, uint256 _roundID) external; - - function withdrawLeftoverPNK(address _account) external; -} diff --git a/contracts/src/arbitration/university/ISortitionModuleUniversity.sol b/contracts/src/arbitration/university/ISortitionModuleUniversity.sol deleted file mode 100644 index 474dd0af9..000000000 --- a/contracts/src/arbitration/university/ISortitionModuleUniversity.sol +++ /dev/null @@ -1,8 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {ISortitionModule} from "../interfaces/ISortitionModule.sol"; - -interface ISortitionModuleUniversity is ISortitionModule { - function setTransientJuror(address _juror) external; -} diff --git a/contracts/src/arbitration/university/KlerosCoreUniversity.sol b/contracts/src/arbitration/university/KlerosCoreUniversity.sol deleted file mode 100644 index afe7fc4d4..000000000 --- a/contracts/src/arbitration/university/KlerosCoreUniversity.sol +++ /dev/null @@ -1,1212 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {IArbitrableV2, IArbitratorV2} from "../interfaces/IArbitratorV2.sol"; -import {IDisputeKit} from "../interfaces/IDisputeKit.sol"; -import {ISortitionModuleUniversity} from "./ISortitionModuleUniversity.sol"; -import {SafeERC20, IERC20} from "../../libraries/SafeERC20.sol"; -import {UUPSProxiable} from "../../proxy/UUPSProxiable.sol"; -import {Initializable} from "../../proxy/Initializable.sol"; -import "../../libraries/Constants.sol"; - -/// @title KlerosCoreUniversity -/// Core arbitrator contract for educational purposes. -contract KlerosCoreUniversity is IArbitratorV2, UUPSProxiable, Initializable { - using SafeERC20 for IERC20; - - string public constant override version = "2.0.0"; - - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - enum Period { - evidence, // Evidence can be submitted. This is also when drawing has to take place. - commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes. - vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not. - appeal, // The dispute can be appealed. - execution // Tokens are redistributed and the ruling is executed. - } - - struct Court { - uint96 parent; // The parent court. - bool hiddenVotes; // Whether to use commit and reveal or not. - uint256[] children; // List of child courts. - uint256 minStake; // Minimum PNKs needed to stake in the court. - uint256 alpha; // Basis point of PNKs that are lost when incoherent. - uint256 feeForJuror; // Arbitration fee paid per juror. - uint256 jurorsForCourtJump; // The appeal after the one that reaches this number of jurors will go to the parent court if any. - uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`. - mapping(uint256 disputeKitId => bool) supportedDisputeKits; // True if DK with this ID is supported by the court. Note that each court must support classic dispute kit. - bool disabled; // True if the court is disabled. Unused for now, will be implemented later. - } - - struct Dispute { - uint96 courtID; // The ID of the court the dispute is in. - IArbitrableV2 arbitrated; // The arbitrable contract. - Period period; // The current period of the dispute. - bool ruled; // True if the ruling has been executed, false otherwise. - uint256 lastPeriodChange; // The last time the period was changed. - Round[] rounds; - } - - struct Round { - uint256 disputeKitID; // Index of the dispute kit in the array. - uint256 pnkAtStakePerJuror; // The amount of PNKs at stake for each juror in this round. - uint256 totalFeesForJurors; // The total juror fees paid in this round. - uint256 nbVotes; // The total number of votes the dispute can possibly have in the current round. Former votes[_round].length. - uint256 repartitions; // A counter of reward repartitions made in this round. - uint256 pnkPenalties; // The amount of PNKs collected from penalties in this round. - address[] drawnJurors; // Addresses of the jurors that were drawn in this round. - uint96[] drawnJurorFromCourtIDs; // The courtIDs where the juror was drawn from, possibly their stake in a subcourt. - uint256 sumFeeRewardPaid; // Total sum of arbitration fees paid to coherent jurors as a reward in this round. - uint256 sumPnkRewardPaid; // Total sum of PNK paid to coherent jurors as a reward in this round. - IERC20 feeToken; // The token used for paying fees in this round. - uint256 drawIterations; // The number of iterations passed drawing the jurors for this round. - } - - // Workaround "stack too deep" errors - struct ExecuteParams { - uint256 disputeID; // The ID of the dispute to execute. - uint256 round; // The round to execute. - uint256 coherentCount; // The number of coherent votes in the round. - uint256 numberOfVotesInRound; // The number of votes in the round. - uint256 feePerJurorInRound; // The fee per juror in the round. - uint256 pnkAtStakePerJurorInRound; // The amount of PNKs at stake for each juror in the round. - uint256 pnkPenaltiesInRound; // The amount of PNKs collected from penalties in the round. - uint256 repartition; // The index of the repartition to execute. - } - - struct CurrencyRate { - bool feePaymentAccepted; - uint64 rateInEth; - uint8 rateDecimals; - } - - // ************************************* // - // * Storage * // - // ************************************* // - - uint256 private constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH. - - address public owner; // The owner of the contract. - address public instructor; // The instructor who is allowed to choose the jurors. - IERC20 public pinakion; // The Pinakion token contract. - address public jurorProsecutionModule; // The module for juror's prosecution. - ISortitionModuleUniversity public sortitionModule; // Sortition module for drawing. - Court[] public courts; // The courts. - IDisputeKit[] public disputeKits; // Array of dispute kits. - Dispute[] public disputes; // The disputes. - mapping(IERC20 => CurrencyRate) public currencyRates; // The price of each token in ETH. - - // ************************************* // - // * Events * // - // ************************************* // - - event NewPeriod(uint256 indexed _disputeID, Period _period); - event AppealPossible(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable); - event AppealDecision(uint256 indexed _disputeID, IArbitrableV2 indexed _arbitrable); - event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _roundID, uint256 _voteID); - event CourtCreated( - uint96 indexed _courtID, - uint96 indexed _parent, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] _timesPerPeriod, - uint256[] _supportedDisputeKits - ); - event CourtModified( - uint96 indexed _courtID, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] _timesPerPeriod - ); - event DisputeKitCreated(uint256 indexed _disputeKitID, IDisputeKit indexed _disputeKitAddress); - event DisputeKitEnabled(uint96 indexed _courtID, uint256 indexed _disputeKitID, bool indexed _enable); - event CourtJump( - uint256 indexed _disputeID, - uint256 indexed _roundID, - uint96 indexed _fromCourtID, - uint96 _toCourtID - ); - event DisputeKitJump( - uint256 indexed _disputeID, - uint256 indexed _roundID, - uint256 indexed _fromDisputeKitID, - uint256 _toDisputeKitID - ); - event TokenAndETHShift( - address indexed _account, - uint256 indexed _disputeID, - uint256 indexed _roundID, - uint256 _degreeOfCoherency, - int256 _pnkAmount, - int256 _feeAmount, - IERC20 _feeToken - ); - event LeftoverRewardSent( - uint256 indexed _disputeID, - uint256 indexed _roundID, - uint256 _pnkAmount, - uint256 _feeAmount, - IERC20 _feeToken - ); - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - modifier onlyByInstructor() { - if (instructor != msg.sender) revert InstructorOnly(); - _; - } - - modifier onlyByOwnerOrInstructor() { - if (msg.sender != owner && msg.sender != instructor) revert OwnerOrInstructorOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Initializer (constructor equivalent for upgradable contracts). - /// @param _owner The owner's address. - /// @param _instructor The address of the instructor. - /// @param _pinakion The address of the token contract. - /// @param _jurorProsecutionModule The address of the juror prosecution module. - /// @param _disputeKit The address of the default dispute kit. - /// @param _hiddenVotes The `hiddenVotes` property value of the general court. - /// @param _courtParameters Numeric parameters of General court (minStake, alpha, feeForJuror and jurorsForCourtJump respectively). - /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court. - /// @param _sortitionModuleAddress The sortition module responsible for sortition of the jurors. - function initialize( - address _owner, - address _instructor, - IERC20 _pinakion, - address _jurorProsecutionModule, - IDisputeKit _disputeKit, - bool _hiddenVotes, - uint256[4] memory _courtParameters, - uint256[4] memory _timesPerPeriod, - ISortitionModuleUniversity _sortitionModuleAddress - ) external initializer { - owner = _owner; - instructor = _instructor; - pinakion = _pinakion; - jurorProsecutionModule = _jurorProsecutionModule; - sortitionModule = _sortitionModuleAddress; - - // NULL_DISPUTE_KIT: an empty element at index 0 to indicate when a dispute kit is not supported. - disputeKits.push(); - - // DISPUTE_KIT_CLASSIC - disputeKits.push(_disputeKit); - - emit DisputeKitCreated(DISPUTE_KIT_CLASSIC, _disputeKit); - - // FORKING_COURT - // TODO: Fill the properties for the Forking court, emit CourtCreated. - courts.push(); - - // GENERAL_COURT - Court storage court = courts.push(); - court.parent = FORKING_COURT; - court.children = new uint256[](0); - court.hiddenVotes = _hiddenVotes; - court.minStake = _courtParameters[0]; - court.alpha = _courtParameters[1]; - court.feeForJuror = _courtParameters[2]; - court.jurorsForCourtJump = _courtParameters[3]; - court.timesPerPeriod = _timesPerPeriod; - - emit CourtCreated( - GENERAL_COURT, - court.parent, - _hiddenVotes, - _courtParameters[0], - _courtParameters[1], - _courtParameters[2], - _courtParameters[3], - _timesPerPeriod, - new uint256[](0) - ); - _enableDisputeKit(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true); - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /* @dev Access Control to perform implementation upgrades (UUPS Proxiable) - * @dev Only the owner can perform upgrades (`onlyByOwner`) - */ - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - /// @dev Allows the owner to call anything on behalf of the contract. - /// @param _destination The destination of the call. - /// @param _amount The value sent with the call. - /// @param _data The data sent with the call. - function executeOwnerProposal(address _destination, uint256 _amount, bytes memory _data) external onlyByOwner { - (bool success, ) = _destination.call{value: _amount}(_data); - if (!success) revert UnsuccessfulCall(); - } - - /// @dev Changes the `owner` storage variable. - /// @param _owner The new value for the `owner` storage variable. - function changeOwner(address payable _owner) external onlyByOwner { - owner = _owner; - } - - /// @dev Changes the `instructor` storage variable. - /// @param _instructor The new value for the `instructor` storage variable. - function changeInstructor(address _instructor) external onlyByOwnerOrInstructor { - instructor = _instructor; - } - - /// @dev Changes the `pinakion` storage variable. - /// @param _pinakion The new value for the `pinakion` storage variable. - function changePinakion(IERC20 _pinakion) external onlyByOwner { - pinakion = _pinakion; - } - - /// @dev Changes the `jurorProsecutionModule` storage variable. - /// @param _jurorProsecutionModule The new value for the `jurorProsecutionModule` storage variable. - function changeJurorProsecutionModule(address _jurorProsecutionModule) external onlyByOwner { - jurorProsecutionModule = _jurorProsecutionModule; - } - - /// @dev Changes the `_sortitionModule` storage variable. - /// Note that the new module should be initialized for all courts. - /// @param _sortitionModule The new value for the `sortitionModule` storage variable. - function changeSortitionModule(ISortitionModuleUniversity _sortitionModule) external onlyByOwner { - sortitionModule = _sortitionModule; - } - - /// @dev Add a new supported dispute kit module to the court. - /// @param _disputeKitAddress The address of the dispute kit contract. - function addNewDisputeKit(IDisputeKit _disputeKitAddress) external onlyByOwner { - uint256 disputeKitID = disputeKits.length; - disputeKits.push(_disputeKitAddress); - emit DisputeKitCreated(disputeKitID, _disputeKitAddress); - } - - /// @dev Creates a court under a specified parent court. - /// @param _parent The `parent` property value of the court. - /// @param _hiddenVotes The `hiddenVotes` property value of the court. - /// @param _minStake The `minStake` property value of the court. - /// @param _alpha The `alpha` property value of the court. - /// @param _feeForJuror The `feeForJuror` property value of the court. - /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the court. - /// @param _timesPerPeriod The `timesPerPeriod` property value of the court. - /// @param _supportedDisputeKits Indexes of dispute kits that this court will support. - function createCourt( - uint96 _parent, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] memory _timesPerPeriod, - uint256[] memory _supportedDisputeKits - ) external onlyByOwner { - if (courts[_parent].minStake > _minStake) revert MinStakeLowerThanParentCourt(); - if (_supportedDisputeKits.length == 0) revert UnsupportedDisputeKit(); - if (_parent == FORKING_COURT) revert InvalidForkingCourtAsParent(); - - uint256 courtID = courts.length; - Court storage court = courts.push(); - - for (uint256 i = 0; i < _supportedDisputeKits.length; i++) { - if (_supportedDisputeKits[i] == 0 || _supportedDisputeKits[i] >= disputeKits.length) { - revert WrongDisputeKitIndex(); - } - court.supportedDisputeKits[_supportedDisputeKits[i]] = true; - } - // Check that Classic DK support was added. - if (!court.supportedDisputeKits[DISPUTE_KIT_CLASSIC]) revert MustSupportDisputeKitClassic(); - - court.parent = _parent; - court.children = new uint256[](0); - court.hiddenVotes = _hiddenVotes; - court.minStake = _minStake; - court.alpha = _alpha; - court.feeForJuror = _feeForJuror; - court.jurorsForCourtJump = _jurorsForCourtJump; - court.timesPerPeriod = _timesPerPeriod; - - // Update the parent. - courts[_parent].children.push(courtID); - emit CourtCreated( - uint96(courtID), - _parent, - _hiddenVotes, - _minStake, - _alpha, - _feeForJuror, - _jurorsForCourtJump, - _timesPerPeriod, - _supportedDisputeKits - ); - } - - function changeCourtParameters( - uint96 _courtID, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] memory _timesPerPeriod - ) external onlyByOwner { - Court storage court = courts[_courtID]; - if (_courtID != GENERAL_COURT && courts[court.parent].minStake > _minStake) { - revert MinStakeLowerThanParentCourt(); - } - for (uint256 i = 0; i < court.children.length; i++) { - if (courts[court.children[i]].minStake < _minStake) { - revert MinStakeLowerThanParentCourt(); - } - } - court.minStake = _minStake; - court.hiddenVotes = _hiddenVotes; - court.alpha = _alpha; - court.feeForJuror = _feeForJuror; - court.jurorsForCourtJump = _jurorsForCourtJump; - court.timesPerPeriod = _timesPerPeriod; - emit CourtModified( - _courtID, - _hiddenVotes, - _minStake, - _alpha, - _feeForJuror, - _jurorsForCourtJump, - _timesPerPeriod - ); - } - - /// @dev Adds/removes court's support for specified dispute kits. - /// @param _courtID The ID of the court. - /// @param _disputeKitIDs The IDs of dispute kits which support should be added/removed. - /// @param _enable Whether add or remove the dispute kits from the court. - function enableDisputeKits(uint96 _courtID, uint256[] memory _disputeKitIDs, bool _enable) external onlyByOwner { - for (uint256 i = 0; i < _disputeKitIDs.length; i++) { - if (_enable) { - if (_disputeKitIDs[i] == 0 || _disputeKitIDs[i] >= disputeKits.length) { - revert WrongDisputeKitIndex(); - } - _enableDisputeKit(_courtID, _disputeKitIDs[i], true); - } else { - // Classic dispute kit must be supported by all courts. - if (_disputeKitIDs[i] == DISPUTE_KIT_CLASSIC) { - revert CannotDisableClassicDK(); - } - _enableDisputeKit(_courtID, _disputeKitIDs[i], false); - } - } - } - - /// @dev Changes the supported fee tokens. - /// @param _feeToken The fee token. - /// @param _accepted Whether the token is supported or not as a method of fee payment. - function changeAcceptedFeeTokens(IERC20 _feeToken, bool _accepted) external onlyByOwner { - currencyRates[_feeToken].feePaymentAccepted = _accepted; - emit AcceptedFeeToken(_feeToken, _accepted); - } - - /// @dev Changes the currency rate of a fee token. - /// @param _feeToken The fee token. - /// @param _rateInEth The new rate of the fee token in ETH. - /// @param _rateDecimals The new decimals of the fee token rate. - function changeCurrencyRates(IERC20 _feeToken, uint64 _rateInEth, uint8 _rateDecimals) external onlyByOwner { - currencyRates[_feeToken].rateInEth = _rateInEth; - currencyRates[_feeToken].rateDecimals = _rateDecimals; - emit NewCurrencyRate(_feeToken, _rateInEth, _rateDecimals); - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Sets the caller's stake in a court. - /// @param _courtID The ID of the court. - /// @param _newStake The new stake. - /// Note that the existing delayed stake will be nullified as non-relevant. - function setStake(uint96 _courtID, uint256 _newStake) external { - _setStake(msg.sender, _courtID, _newStake, false, OnError.Revert); - } - - /// @dev Sets the stake of a specified account in a court, typically to apply a delayed stake or unstake inactive jurors. - /// @param _account The account whose stake is being set. - /// @param _courtID The ID of the court. - /// @param _newStake The new stake. - function setStakeBySortitionModule(address _account, uint96 _courtID, uint256 _newStake) external { - if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly(); - _setStake(_account, _courtID, _newStake, true, OnError.Return); - } - - /// @dev Transfers PNK to the juror by SortitionModule. - /// @param _account The account of the juror whose PNK to transfer. - /// @param _amount The amount to transfer. - function transferBySortitionModule(address _account, uint256 _amount) external { - if (msg.sender != address(sortitionModule)) revert SortitionModuleOnly(); - // Note eligibility is checked in SortitionModule. - pinakion.safeTransfer(_account, _amount); - } - - /// @inheritdoc IArbitratorV2 - function createDispute( - uint256 _numberOfChoices, - bytes memory _extraData - ) external payable override returns (uint256 disputeID) { - if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough(); - - return _createDispute(_numberOfChoices, _extraData, NATIVE_CURRENCY, msg.value); - } - - /// @inheritdoc IArbitratorV2 - function createDispute( - uint256 _numberOfChoices, - bytes calldata _extraData, - IERC20 _feeToken, - uint256 _feeAmount - ) external override returns (uint256 disputeID) { - if (!currencyRates[_feeToken].feePaymentAccepted) revert TokenNotAccepted(); - if (_feeAmount < arbitrationCost(_extraData, _feeToken)) revert ArbitrationFeesNotEnough(); - - if (!_feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed(); - return _createDispute(_numberOfChoices, _extraData, _feeToken, _feeAmount); - } - - function _createDispute( - uint256 _numberOfChoices, - bytes memory _extraData, - IERC20 _feeToken, - uint256 _feeAmount - ) internal returns (uint256 disputeID) { - (uint96 courtID, , uint256 disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData); - if (!courts[courtID].supportedDisputeKits[disputeKitID]) revert DisputeKitNotSupportedByCourt(); - - disputeID = disputes.length; - Dispute storage dispute = disputes.push(); - dispute.courtID = courtID; - dispute.arbitrated = IArbitrableV2(msg.sender); - dispute.lastPeriodChange = block.timestamp; - - IDisputeKit disputeKit = disputeKits[disputeKitID]; - Court storage court = courts[courtID]; - Round storage round = dispute.rounds.push(); - - // Obtain the feeForJuror in the same currency as the _feeAmount - uint256 feeForJuror = (_feeToken == NATIVE_CURRENCY) - ? court.feeForJuror - : convertEthToTokenAmount(_feeToken, court.feeForJuror); - round.nbVotes = _feeAmount / feeForJuror; - round.disputeKitID = disputeKitID; - round.pnkAtStakePerJuror = (court.minStake * court.alpha) / ONE_BASIS_POINT; - round.totalFeesForJurors = _feeAmount; - round.feeToken = IERC20(_feeToken); - - sortitionModule.createDisputeHook(disputeID, 0); // Default round ID. - - disputeKit.createDispute(disputeID, _numberOfChoices, _extraData, round.nbVotes); - emit DisputeCreation(disputeID, IArbitrableV2(msg.sender)); - } - - /// @dev Passes the period of a specified dispute. - /// @param _disputeID The ID of the dispute. - function passPeriod(uint256 _disputeID) external { - Dispute storage dispute = disputes[_disputeID]; - Court storage court = courts[dispute.courtID]; - - uint256 currentRound = dispute.rounds.length - 1; - Round storage round = dispute.rounds[currentRound]; - if (dispute.period == Period.evidence) { - if ( - currentRound == 0 && - block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] - ) { - revert EvidenceNotPassedAndNotAppeal(); - } - if (round.drawnJurors.length != round.nbVotes) revert DisputeStillDrawing(); - dispute.period = court.hiddenVotes ? Period.commit : Period.vote; - } else if (dispute.period == Period.commit) { - if ( - block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] && - !disputeKits[round.disputeKitID].areCommitsAllCast(_disputeID) - ) { - revert CommitPeriodNotPassed(); - } - dispute.period = Period.vote; - } else if (dispute.period == Period.vote) { - if ( - block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] && - !disputeKits[round.disputeKitID].areVotesAllCast(_disputeID) - ) { - revert VotePeriodNotPassed(); - } - dispute.period = Period.appeal; - emit AppealPossible(_disputeID, dispute.arbitrated); - } else if (dispute.period == Period.appeal) { - if ( - block.timestamp - dispute.lastPeriodChange < court.timesPerPeriod[uint256(dispute.period)] && - !disputeKits[round.disputeKitID].isAppealFunded(_disputeID) - ) { - revert AppealPeriodNotPassed(); - } - dispute.period = Period.execution; - } else if (dispute.period == Period.execution) { - revert DisputePeriodIsFinal(); - } - - dispute.lastPeriodChange = block.timestamp; - emit NewPeriod(_disputeID, dispute.period); - } - - /// @dev Draws one juror for the dispute until the number votes paid for is reached. - /// @param _disputeID The ID of the dispute. - /// @param _juror The address of the juror to draw. - function draw(uint256 _disputeID, address _juror) external onlyByOwnerOrInstructor { - Dispute storage dispute = disputes[_disputeID]; - uint256 currentRound = dispute.rounds.length - 1; - Round storage round = dispute.rounds[currentRound]; - if (dispute.period != Period.evidence) revert NotEvidencePeriod(); - if (round.drawnJurors.length >= round.nbVotes) revert AllJurorsDrawn(); - - sortitionModule.setTransientJuror(_juror); - { - IDisputeKit disputeKit = disputeKits[round.disputeKitID]; - uint256 iteration = round.drawIterations + 1; - (address drawnAddress, uint96 fromSubcourtID) = disputeKit.draw(_disputeID, iteration); - if (drawnAddress == address(0)) { - revert NoJurorDrawn(); - } - sortitionModule.lockStake(drawnAddress, round.pnkAtStakePerJuror); - emit Draw(drawnAddress, _disputeID, currentRound, round.drawnJurors.length); - round.drawnJurors.push(drawnAddress); - round.drawnJurorFromCourtIDs.push(fromSubcourtID != 0 ? fromSubcourtID : dispute.courtID); - if (round.drawnJurors.length == round.nbVotes) { - sortitionModule.postDrawHook(_disputeID, currentRound); - } - round.drawIterations = iteration; - } - sortitionModule.setTransientJuror(address(0)); - } - - /// @dev Appeals the ruling of a specified dispute. - /// Note: Access restricted to the Dispute Kit for this `disputeID`. - /// @param _disputeID The ID of the dispute. - /// @param _numberOfChoices Number of choices for the dispute. Can be required during court jump. - /// @param _extraData Extradata for the dispute. Can be required during court jump. - function appeal(uint256 _disputeID, uint256 _numberOfChoices, bytes memory _extraData) external payable { - if (msg.value < appealCost(_disputeID)) revert AppealFeesNotEnough(); - - Dispute storage dispute = disputes[_disputeID]; - if (dispute.period != Period.appeal) revert DisputeNotAppealable(); - - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - if (msg.sender != address(disputeKits[round.disputeKitID])) revert DisputeKitOnly(); - - uint96 newCourtID = dispute.courtID; - uint256 newDisputeKitID = round.disputeKitID; - - // Warning: the extra round must be created before calling disputeKit.createDispute() - Round storage extraRound = dispute.rounds.push(); - - if (round.nbVotes >= courts[newCourtID].jurorsForCourtJump) { - // Jump to parent court. - newCourtID = courts[newCourtID].parent; - - if (!courts[newCourtID].supportedDisputeKits[newDisputeKitID]) { - // Switch to classic dispute kit if parent court doesn't support the current one. - newDisputeKitID = DISPUTE_KIT_CLASSIC; - } - - if (newCourtID != dispute.courtID) { - emit CourtJump(_disputeID, dispute.rounds.length - 1, dispute.courtID, newCourtID); - } - } - - dispute.courtID = newCourtID; - dispute.period = Period.evidence; - dispute.lastPeriodChange = block.timestamp; - - Court storage court = courts[newCourtID]; - extraRound.nbVotes = msg.value / court.feeForJuror; // As many votes that can be afforded by the provided funds. - extraRound.pnkAtStakePerJuror = (court.minStake * court.alpha) / ONE_BASIS_POINT; - extraRound.totalFeesForJurors = msg.value; - extraRound.disputeKitID = newDisputeKitID; - - sortitionModule.createDisputeHook(_disputeID, dispute.rounds.length - 1); - - // Dispute kit was changed, so create a dispute in the new DK contract. - if (extraRound.disputeKitID != round.disputeKitID) { - emit DisputeKitJump(_disputeID, dispute.rounds.length - 1, round.disputeKitID, extraRound.disputeKitID); - disputeKits[extraRound.disputeKitID].createDispute( - _disputeID, - _numberOfChoices, - _extraData, - extraRound.nbVotes - ); - } - - emit AppealDecision(_disputeID, dispute.arbitrated); - emit NewPeriod(_disputeID, Period.evidence); - } - - /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute. Can be called in parts. - /// @param _disputeID The ID of the dispute. - /// @param _round The appeal round. - /// @param _iterations The number of iterations to run. - function execute(uint256 _disputeID, uint256 _round, uint256 _iterations) external { - Round storage round; - { - Dispute storage dispute = disputes[_disputeID]; - if (dispute.period != Period.execution) revert NotExecutionPeriod(); - - round = dispute.rounds[_round]; - } // stack too deep workaround - - uint256 start = round.repartitions; - uint256 end = round.repartitions + _iterations; - - uint256 pnkPenaltiesInRound = round.pnkPenalties; // Keep in memory to save gas. - uint256 numberOfVotesInRound = round.drawnJurors.length; - uint256 feePerJurorInRound = round.totalFeesForJurors / numberOfVotesInRound; - uint256 pnkAtStakePerJurorInRound = round.pnkAtStakePerJuror; - uint256 coherentCount; - { - IDisputeKit disputeKit = disputeKits[round.disputeKitID]; - coherentCount = disputeKit.getCoherentCount(_disputeID, _round); // Total number of jurors that are eligible to a reward in this round. - } // stack too deep workaround - - if (coherentCount == 0) { - // We loop over the votes once as there are no rewards because it is not a tie and no one in this round is coherent with the final outcome. - if (end > numberOfVotesInRound) end = numberOfVotesInRound; - } else { - // We loop over the votes twice, first to collect the PNK penalties, and second to distribute them as rewards along with arbitration fees. - if (end > numberOfVotesInRound * 2) end = numberOfVotesInRound * 2; - } - round.repartitions = end; - - for (uint256 i = start; i < end; i++) { - if (i < numberOfVotesInRound) { - pnkPenaltiesInRound = _executePenalties( - ExecuteParams({ - disputeID: _disputeID, - round: _round, - coherentCount: coherentCount, - numberOfVotesInRound: numberOfVotesInRound, - feePerJurorInRound: feePerJurorInRound, - pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound, - pnkPenaltiesInRound: pnkPenaltiesInRound, - repartition: i - }) - ); - } else { - _executeRewards( - ExecuteParams({ - disputeID: _disputeID, - round: _round, - coherentCount: coherentCount, - numberOfVotesInRound: numberOfVotesInRound, - feePerJurorInRound: feePerJurorInRound, - pnkAtStakePerJurorInRound: pnkAtStakePerJurorInRound, - pnkPenaltiesInRound: pnkPenaltiesInRound, - repartition: i - }) - ); - } - } - if (round.pnkPenalties != pnkPenaltiesInRound) { - round.pnkPenalties = pnkPenaltiesInRound; // Reentrancy risk: breaks Check-Effect-Interact - } - } - - /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, penalties only. - /// @param _params The parameters for the execution, see `ExecuteParams`. - /// @return pnkPenaltiesInRoundCache The updated penalties in round cache. - function _executePenalties(ExecuteParams memory _params) internal returns (uint256) { - Dispute storage dispute = disputes[_params.disputeID]; - Round storage round = dispute.rounds[_params.round]; - IDisputeKit disputeKit = disputeKits[round.disputeKitID]; - - // [0, 1] value that determines how coherent the juror was in this round, in basis points. - uint256 coherence = disputeKit.getDegreeOfCoherencePenalty( - _params.disputeID, - _params.round, - _params.repartition, - _params.feePerJurorInRound, - _params.pnkAtStakePerJurorInRound - ); - - // Guard against degree exceeding 1, though it should be ensured by the dispute kit. - if (coherence > ONE_BASIS_POINT) { - coherence = ONE_BASIS_POINT; - } - - // Fully coherent jurors won't be penalized. - uint256 penalty = (round.pnkAtStakePerJuror * (ONE_BASIS_POINT - coherence)) / ONE_BASIS_POINT; - - // Unlock the PNKs affected by the penalty - address account = round.drawnJurors[_params.repartition]; - sortitionModule.unlockStake(account, penalty); - - // Apply the penalty to the staked PNKs. - uint96 penalizedInCourtID = round.drawnJurorFromCourtIDs[_params.repartition]; - (uint256 pnkBalance, uint256 newCourtStake, uint256 availablePenalty) = sortitionModule.setStakePenalty( - account, - penalizedInCourtID, - penalty - ); - _params.pnkPenaltiesInRound += availablePenalty; - emit TokenAndETHShift( - account, - _params.disputeID, - _params.round, - coherence, - -int256(availablePenalty), - 0, - round.feeToken - ); - - if (pnkBalance == 0 || !disputeKit.isVoteActive(_params.disputeID, _params.round, _params.repartition)) { - // The juror is inactive or their balance is can't cover penalties anymore, unstake them from all courts. - sortitionModule.forcedUnstakeAllCourts(account); - } else if (newCourtStake < courts[penalizedInCourtID].minStake) { - // The juror's balance fell below the court minStake, unstake them from the court. - sortitionModule.forcedUnstake(account, penalizedInCourtID); - } - - if (_params.repartition == _params.numberOfVotesInRound - 1 && _params.coherentCount == 0) { - // No one was coherent, send the rewards to the owner. - if (round.feeToken == NATIVE_CURRENCY) { - // The dispute fees were paid in ETH - payable(owner).send(round.totalFeesForJurors); - } else { - // The dispute fees were paid in ERC20 - round.feeToken.safeTransfer(owner, round.totalFeesForJurors); - } - pinakion.safeTransfer(owner, _params.pnkPenaltiesInRound); - emit LeftoverRewardSent( - _params.disputeID, - _params.round, - _params.pnkPenaltiesInRound, - round.totalFeesForJurors, - round.feeToken - ); - } - return _params.pnkPenaltiesInRound; - } - - /// @dev Distribute the PNKs at stake and the dispute fees for the specific round of the dispute, rewards only. - /// @param _params The parameters for the execution, see `ExecuteParams`. - function _executeRewards(ExecuteParams memory _params) internal { - Dispute storage dispute = disputes[_params.disputeID]; - Round storage round = dispute.rounds[_params.round]; - IDisputeKit disputeKit = disputeKits[round.disputeKitID]; - - // [0, 1] value that determines how coherent the juror was in this round, in basis points. - (uint256 pnkCoherence, uint256 feeCoherence) = disputeKit.getDegreeOfCoherenceReward( - _params.disputeID, - _params.round, - _params.repartition % _params.numberOfVotesInRound, - _params.feePerJurorInRound, - _params.pnkAtStakePerJurorInRound - ); - - // Guard against degree exceeding 1, though it should be ensured by the dispute kit. - if (pnkCoherence > ONE_BASIS_POINT) { - pnkCoherence = ONE_BASIS_POINT; - } - if (feeCoherence > ONE_BASIS_POINT) { - feeCoherence = ONE_BASIS_POINT; - } - - address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound]; - uint256 pnkLocked = (round.pnkAtStakePerJuror * pnkCoherence) / ONE_BASIS_POINT; - - // Release the rest of the PNKs of the juror for this round. - sortitionModule.unlockStake(account, pnkLocked); - - // Compute the rewards - uint256 pnkReward = ((_params.pnkPenaltiesInRound / _params.coherentCount) * pnkCoherence) / ONE_BASIS_POINT; - round.sumPnkRewardPaid += pnkReward; - uint256 feeReward = ((round.totalFeesForJurors / _params.coherentCount) * feeCoherence) / ONE_BASIS_POINT; - round.sumFeeRewardPaid += feeReward; - - // Transfer the fee reward - if (round.feeToken == NATIVE_CURRENCY) { - // The dispute fees were paid in ETH - payable(account).send(feeReward); - } else { - // The dispute fees were paid in ERC20 - round.feeToken.safeTransfer(account, feeReward); - } - - // Stake the PNK reward if possible, by-passes delayed stakes and other checks usually done by validateStake() - if (!sortitionModule.setStakeReward(account, dispute.courtID, pnkReward)) { - pinakion.safeTransfer(account, pnkReward); - } - - emit TokenAndETHShift( - account, - _params.disputeID, - _params.round, - pnkCoherence, - int256(pnkReward), - int256(feeReward), - round.feeToken - ); - - // Transfer any residual rewards to the owner. It may happen due to partial coherence of the jurors. - if (_params.repartition == _params.numberOfVotesInRound * 2 - 1) { - uint256 leftoverPnkReward = _params.pnkPenaltiesInRound - round.sumPnkRewardPaid; - uint256 leftoverFeeReward = round.totalFeesForJurors - round.sumFeeRewardPaid; - if (leftoverPnkReward != 0 || leftoverFeeReward != 0) { - if (leftoverPnkReward != 0) { - pinakion.safeTransfer(owner, leftoverPnkReward); - } - if (leftoverFeeReward != 0) { - if (round.feeToken == NATIVE_CURRENCY) { - // The dispute fees were paid in ETH - payable(owner).send(leftoverFeeReward); - } else { - // The dispute fees were paid in ERC20 - round.feeToken.safeTransfer(owner, leftoverFeeReward); - } - } - emit LeftoverRewardSent( - _params.disputeID, - _params.round, - leftoverPnkReward, - leftoverFeeReward, - round.feeToken - ); - } - } - } - - /// @dev Executes a specified dispute's ruling. - /// @param _disputeID The ID of the dispute. - function executeRuling(uint256 _disputeID) external { - Dispute storage dispute = disputes[_disputeID]; - if (dispute.period != Period.execution) revert NotExecutionPeriod(); - if (dispute.ruled) revert RulingAlreadyExecuted(); - - (uint256 winningChoice, , ) = currentRuling(_disputeID); - dispute.ruled = true; - emit Ruling(dispute.arbitrated, _disputeID, winningChoice); - dispute.arbitrated.rule(_disputeID, winningChoice); - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Compute the cost of arbitration denominated in ETH. - /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation. - /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes). - /// @return cost The arbitration cost in ETH. - function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) { - (uint96 courtID, uint256 minJurors, ) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData); - cost = courts[courtID].feeForJuror * minJurors; - } - - /// @dev Compute the cost of arbitration denominated in `_feeToken`. - /// It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation. - /// @param _extraData Additional info about the dispute. We use it to pass the ID of the dispute's court (first 32 bytes), the minimum number of jurors required (next 32 bytes) and the ID of the specific dispute kit (last 32 bytes). - /// @param _feeToken The ERC20 token used to pay fees. - /// @return cost The arbitration cost in `_feeToken`. - function arbitrationCost(bytes calldata _extraData, IERC20 _feeToken) public view override returns (uint256 cost) { - cost = convertEthToTokenAmount(_feeToken, arbitrationCost(_extraData)); - } - - /// @dev Gets the cost of appealing a specified dispute. - /// @param _disputeID The ID of the dispute. - /// @return cost The appeal cost. - function appealCost(uint256 _disputeID) public view returns (uint256 cost) { - Dispute storage dispute = disputes[_disputeID]; - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - Court storage court = courts[dispute.courtID]; - if (round.nbVotes >= court.jurorsForCourtJump) { - // Jump to parent court. - if (dispute.courtID == GENERAL_COURT) { - // TODO: Handle the forking when appealed in General court. - cost = NON_PAYABLE_AMOUNT; // Get the cost of the parent court. - } else { - cost = courts[court.parent].feeForJuror * ((round.nbVotes * 2) + 1); - } - } else { - // Stay in current court. - cost = court.feeForJuror * ((round.nbVotes * 2) + 1); - } - } - - /// @dev Gets the start and the end of a specified dispute's current appeal period. - /// @param _disputeID The ID of the dispute. - /// @return start The start of the appeal period. - /// @return end The end of the appeal period. - function appealPeriod(uint256 _disputeID) public view returns (uint256 start, uint256 end) { - Dispute storage dispute = disputes[_disputeID]; - if (dispute.period == Period.appeal) { - start = dispute.lastPeriodChange; - end = dispute.lastPeriodChange + courts[dispute.courtID].timesPerPeriod[uint256(Period.appeal)]; - } else { - start = 0; - end = 0; - } - } - - /// @dev Gets the current ruling of a specified dispute. - /// @param _disputeID The ID of the dispute. - /// @return ruling The current ruling. - /// @return tied Whether it's a tie or not. - /// @return overridden Whether the ruling was overridden by appeal funding or not. - function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden) { - Dispute storage dispute = disputes[_disputeID]; - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - IDisputeKit disputeKit = disputeKits[round.disputeKitID]; - (ruling, tied, overridden) = disputeKit.currentRuling(_disputeID); - } - - /// @dev Gets the round info for a specified dispute and round. - /// @dev This function must not be called from a non-view function because it returns a dynamic array which might be very large, theoretically exceeding the block gas limit. - /// @param _disputeID The ID of the dispute. - /// @param _round The round to get the info for. - /// @return round The round info. - function getRoundInfo(uint256 _disputeID, uint256 _round) external view returns (Round memory) { - return disputes[_disputeID].rounds[_round]; - } - - /// @dev Gets the PNK at stake per juror for a specified dispute and round. - /// @param _disputeID The ID of the dispute. - /// @param _round The round to get the info for. - /// @return pnkAtStakePerJuror The PNK at stake per juror. - function getPnkAtStakePerJuror(uint256 _disputeID, uint256 _round) external view returns (uint256) { - return disputes[_disputeID].rounds[_round].pnkAtStakePerJuror; - } - - /// @dev Gets the number of rounds for a specified dispute. - /// @param _disputeID The ID of the dispute. - /// @return The number of rounds. - function getNumberOfRounds(uint256 _disputeID) external view returns (uint256) { - return disputes[_disputeID].rounds.length; - } - - /// @dev Checks if a given dispute kit is supported by a given court. - /// @param _courtID The ID of the court to check the support for. - /// @param _disputeKitID The ID of the dispute kit to check the support for. - /// @return Whether the dispute kit is supported or not. - function isSupported(uint96 _courtID, uint256 _disputeKitID) external view returns (bool) { - return courts[_courtID].supportedDisputeKits[_disputeKitID]; - } - - /// @dev Gets the timesPerPeriod array for a given court. - /// @param _courtID The ID of the court to get the times from. - /// @return timesPerPeriod The timesPerPeriod array for the given court. - function getTimesPerPeriod(uint96 _courtID) external view returns (uint256[4] memory timesPerPeriod) { - timesPerPeriod = courts[_courtID].timesPerPeriod; - } - - // ************************************* // - // * Public Views for Dispute Kits * // - // ************************************* // - - /// @dev Gets the number of votes permitted for the specified dispute in the latest round. - /// @param _disputeID The ID of the dispute. - function getNumberOfVotes(uint256 _disputeID) external view returns (uint256) { - Dispute storage dispute = disputes[_disputeID]; - return dispute.rounds[dispute.rounds.length - 1].nbVotes; - } - - /// @dev Returns true if the dispute kit will be switched to a parent DK. - /// @param _disputeID The ID of the dispute. - /// @return Whether DK will be switched or not. - function isDisputeKitJumping(uint256 _disputeID) external view returns (bool) { - Dispute storage dispute = disputes[_disputeID]; - Round storage round = dispute.rounds[dispute.rounds.length - 1]; - Court storage court = courts[dispute.courtID]; - - if (round.nbVotes < court.jurorsForCourtJump) { - return false; - } - - // Jump if the parent court doesn't support the current DK. - return !courts[court.parent].supportedDisputeKits[round.disputeKitID]; - } - - function getDisputeKitsLength() external view returns (uint256) { - return disputeKits.length; - } - - function convertEthToTokenAmount(IERC20 _toToken, uint256 _amountInEth) public view returns (uint256) { - return (_amountInEth * 10 ** currencyRates[_toToken].rateDecimals) / currencyRates[_toToken].rateInEth; - } - - // ************************************* // - // * Internal * // - // ************************************* // - - /// @dev Toggles the dispute kit support for a given court. - /// @param _courtID The ID of the court to toggle the support for. - /// @param _disputeKitID The ID of the dispute kit to toggle the support for. - /// @param _enable Whether to enable or disable the support. Note that classic dispute kit should always be enabled. - function _enableDisputeKit(uint96 _courtID, uint256 _disputeKitID, bool _enable) internal { - courts[_courtID].supportedDisputeKits[_disputeKitID] = _enable; - emit DisputeKitEnabled(_courtID, _disputeKitID, _enable); - } - - /// @dev If called only once then set _onError to Revert, otherwise set it to Return - /// @param _account The account to set the stake for. - /// @param _courtID The ID of the court to set the stake for. - /// @param _newStake The new stake. - /// @param _noDelay True if the stake change should not be delayed. - /// @param _onError Whether to revert or return false on error. - /// @return Whether the stake was successfully set or not. - function _setStake( - address _account, - uint96 _courtID, - uint256 _newStake, - bool _noDelay, - OnError _onError - ) internal returns (bool) { - if (_courtID == FORKING_COURT || _courtID >= courts.length) { - _stakingFailed(_onError, StakingResult.CannotStakeInThisCourt); // Staking directly into the forking court is not allowed. - return false; - } - if (_newStake != 0 && _newStake < courts[_courtID].minStake) { - _stakingFailed(_onError, StakingResult.CannotStakeLessThanMinStake); // Staking less than the minimum stake is not allowed. - return false; - } - (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) = sortitionModule.validateStake( - _account, - _courtID, - _newStake, - _noDelay - ); - if (stakingResult != StakingResult.Successful) { - _stakingFailed(_onError, stakingResult); - return false; - } - if (pnkDeposit > 0) { - if (!pinakion.safeTransferFrom(_account, address(this), pnkDeposit)) { - _stakingFailed(_onError, StakingResult.StakingTransferFailed); - return false; - } - } - if (pnkWithdrawal > 0) { - if (!pinakion.safeTransfer(_account, pnkWithdrawal)) { - _stakingFailed(_onError, StakingResult.UnstakingTransferFailed); - return false; - } - } - sortitionModule.setStake(_account, _courtID, pnkDeposit, pnkWithdrawal, _newStake); - - return true; - } - - /// @dev It may revert depending on the _onError parameter. - function _stakingFailed(OnError _onError, StakingResult _result) internal pure virtual { - if (_onError == OnError.Return) return; - if (_result == StakingResult.StakingTransferFailed) revert StakingTransferFailed(); - if (_result == StakingResult.UnstakingTransferFailed) revert UnstakingTransferFailed(); - if (_result == StakingResult.CannotStakeInMoreCourts) revert StakingInTooManyCourts(); - if (_result == StakingResult.CannotStakeInThisCourt) revert StakingNotPossibleInThisCourt(); - if (_result == StakingResult.CannotStakeLessThanMinStake) revert StakingLessThanCourtMinStake(); - if (_result == StakingResult.CannotStakeZeroWhenNoStake) revert StakingZeroWhenNoStake(); - } - - /// @dev Gets a court ID, the minimum number of jurors and an ID of a dispute kit from a specified extra data bytes array. - /// Note that if extradata contains an incorrect value then this value will be switched to default. - /// @param _extraData The extra data bytes array. The first 32 bytes are the court ID, the next are the minimum number of jurors and the last are the dispute kit ID. - /// @return courtID The court ID. - /// @return minJurors The minimum number of jurors required. - /// @return disputeKitID The ID of the dispute kit. - function _extraDataToCourtIDMinJurorsDisputeKit( - bytes memory _extraData - ) internal view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) { - // Note that if the extradata doesn't contain 32 bytes for the dispute kit ID it'll return the default 0 index. - if (_extraData.length >= 64) { - assembly { - // solium-disable-line security/no-inline-assembly - courtID := mload(add(_extraData, 0x20)) - minJurors := mload(add(_extraData, 0x40)) - disputeKitID := mload(add(_extraData, 0x60)) - } - if (courtID == FORKING_COURT || courtID >= courts.length) { - courtID = GENERAL_COURT; - } - if (minJurors == 0) { - minJurors = DEFAULT_NB_OF_JURORS; - } - if (disputeKitID == NULL_DISPUTE_KIT || disputeKitID >= disputeKits.length) { - disputeKitID = DISPUTE_KIT_CLASSIC; // 0 index is not used. - } - } else { - courtID = GENERAL_COURT; - minJurors = DEFAULT_NB_OF_JURORS; - disputeKitID = DISPUTE_KIT_CLASSIC; - } - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); - error InstructorOnly(); - error OwnerOrInstructorOnly(); - error DisputeKitOnly(); - error SortitionModuleOnly(); - error UnsuccessfulCall(); - error InvalidDisputKitParent(); - error MinStakeLowerThanParentCourt(); - error UnsupportedDisputeKit(); - error InvalidForkingCourtAsParent(); - error WrongDisputeKitIndex(); - error CannotDisableClassicDK(); - error StakingInTooManyCourts(); - error StakingNotPossibleInThisCourt(); - error StakingLessThanCourtMinStake(); - error StakingTransferFailed(); - error UnstakingTransferFailed(); - error ArbitrationFeesNotEnough(); - error DisputeKitNotSupportedByCourt(); - error MustSupportDisputeKitClassic(); - error TokenNotAccepted(); - error EvidenceNotPassedAndNotAppeal(); - error DisputeStillDrawing(); - error CommitPeriodNotPassed(); - error VotePeriodNotPassed(); - error AppealPeriodNotPassed(); - error NotEvidencePeriod(); - error AppealFeesNotEnough(); - error DisputeNotAppealable(); - error NotExecutionPeriod(); - error RulingAlreadyExecuted(); - error DisputePeriodIsFinal(); - error TransferFailed(); - error AllJurorsDrawn(); - error NoJurorDrawn(); - error StakingZeroWhenNoStake(); -} diff --git a/contracts/src/arbitration/university/SortitionModuleUniversity.sol b/contracts/src/arbitration/university/SortitionModuleUniversity.sol deleted file mode 100644 index 66e815e4a..000000000 --- a/contracts/src/arbitration/university/SortitionModuleUniversity.sol +++ /dev/null @@ -1,427 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "./KlerosCoreUniversity.sol"; -import "./ISortitionModuleUniversity.sol"; -import "../interfaces/IDisputeKit.sol"; -import "../../proxy/UUPSProxiable.sol"; -import "../../proxy/Initializable.sol"; -import "../../libraries/Constants.sol"; - -/// @title SortitionModuleUniversity -/// @dev An adapted version of the SortitionModule contract for educational purposes. -contract SortitionModuleUniversity is ISortitionModuleUniversity, UUPSProxiable, Initializable { - string public constant override version = "2.0.0"; - - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - struct Juror { - mapping(uint96 => uint256) stakesByCourtID; // The stakes of the juror in particular courts. - uint96[] courtIDs; // The IDs of courts where the juror's stake path ends. A stake path is a path from the general court to a court the juror directly staked in using `_setStake`. - uint256 stakedPnk; // The juror's total amount of tokens staked in subcourts. Reflects actual pnk balance. - uint256 lockedPnk; // The juror's total amount of tokens locked in disputes. Can reflect actual pnk balance when stakedPnk are fully withdrawn. - } - - // ************************************* // - // * Storage * // - // ************************************* // - - address public owner; // The owner of the contract. - KlerosCoreUniversity public core; // The core arbitrator contract. - uint256 public disputesWithoutJurors; // The number of disputes that have not finished drawing jurors. - mapping(address account => Juror) public jurors; // The jurors. - address private transientJuror; // The juror address used between calls within the same transaction. - - // ************************************* // - // * Events * // - // ************************************* // - - /// @notice Emitted when a juror stakes in a court. - /// @param _address The address of the juror. - /// @param _courtID The ID of the court. - /// @param _amount The amount of tokens staked in the court. - /// @param _amountAllCourts The amount of tokens staked in all courts. - event StakeSet(address indexed _address, uint256 _courtID, uint256 _amount, uint256 _amountAllCourts); - - /// @notice Emitted when a juror's stake is locked. - /// @param _address The address of the juror. - /// @param _relativeAmount The amount of tokens locked. - /// @param _unlock Whether the stake is locked or unlocked. - event StakeLocked(address indexed _address, uint256 _relativeAmount, bool _unlock); - - /// @dev Emitted when leftover PNK is available. - /// @param _account The account of the juror. - /// @param _amount The amount of PNK available. - event LeftoverPNK(address indexed _account, uint256 _amount); - - /// @dev Emitted when leftover PNK is withdrawn. - /// @param _account The account of the juror withdrawing PNK. - /// @param _amount The amount of PNK withdrawn. - event LeftoverPNKWithdrawn(address indexed _account, uint256 _amount); - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - modifier onlyByCore() { - if (address(core) != msg.sender) revert KlerosCoreOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Initializer (constructor equivalent for upgradable contracts). - /// @param _core The KlerosCore. - function initialize(address _owner, KlerosCoreUniversity _core) external initializer { - owner = _owner; - core = _core; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /** - * @dev Access Control to perform implementation upgrades (UUPS Proxiable) - * @dev Only the owner can perform upgrades (`onlyByOwner`) - */ - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - function setTransientJuror(address _juror) external override onlyByCore { - transientJuror = _juror; - } - - function createTree(uint96 _courtID, bytes memory _extraData) external { - // NOP - } - - function createDisputeHook(uint256 /*_disputeID*/, uint256 /*_roundID*/) external override onlyByCore { - disputesWithoutJurors++; - } - - function postDrawHook(uint256 /*_disputeID*/, uint256 /*_roundID*/) external override onlyByCore { - disputesWithoutJurors--; - } - - /// @dev Saves the random number to use it in sortition. Not used by this contract because the storing of the number is inlined in passPhase(). - /// @param _randomNumber Random number returned by RNG contract. - function notifyRandomNumber(uint256 _randomNumber) public override {} - - /// @dev Validate the specified juror's new stake for a court. - /// Note: no state changes should be made when returning stakingResult != Successful, otherwise delayed stakes might break invariants. - /// @param _account The address of the juror. - /// @param _courtID The ID of the court. - /// @param _newStake The new stake. - /// @return pnkDeposit The amount of PNK to be deposited. - /// @return pnkWithdrawal The amount of PNK to be withdrawn. - /// @return stakingResult The result of the staking operation. - function validateStake( - address _account, - uint96 _courtID, - uint256 _newStake, - bool /*_noDelay*/ - ) - external - view - override - onlyByCore - returns (uint256 pnkDeposit, uint256 pnkWithdrawal, StakingResult stakingResult) - { - Juror storage juror = jurors[_account]; - uint256 currentStake = _stakeOf(_account, _courtID); - - uint256 nbCourts = juror.courtIDs.length; - if (currentStake == 0 && nbCourts >= MAX_STAKE_PATHS) { - return (0, 0, StakingResult.CannotStakeInMoreCourts); // Prevent staking beyond MAX_STAKE_PATHS but unstaking is always allowed. - } - - if (currentStake == 0 && _newStake == 0) { - return (0, 0, StakingResult.CannotStakeZeroWhenNoStake); // Forbid staking 0 amount when current stake is 0 to avoid flaky behaviour. - } - - if (_newStake >= currentStake) { - pnkDeposit = _newStake - currentStake; - } else { - pnkWithdrawal = currentStake - _newStake; - // Ensure locked tokens remain in the contract. They can only be released during Execution. - uint256 possibleWithdrawal = juror.stakedPnk > juror.lockedPnk ? juror.stakedPnk - juror.lockedPnk : 0; - if (pnkWithdrawal > possibleWithdrawal) { - pnkWithdrawal = possibleWithdrawal; - } - } - return (pnkDeposit, pnkWithdrawal, StakingResult.Successful); - } - - /// @dev Update the state of the stakes, called by KC at the end of setStake flow. - /// `O(n + p * log_k(j))` where - /// `n` is the number of courts the juror has staked in, - /// `p` is the depth of the court tree, - /// `k` is the minimum number of children per node of one of these courts' sortition sum tree, - /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously. - /// @param _account The address of the juror. - /// @param _courtID The ID of the court. - /// @param _pnkDeposit The amount of PNK to be deposited. - /// @param _pnkWithdrawal The amount of PNK to be withdrawn. - /// @param _newStake The new stake. - function setStake( - address _account, - uint96 _courtID, - uint256 _pnkDeposit, - uint256 _pnkWithdrawal, - uint256 _newStake - ) external override onlyByCore { - _setStake(_account, _courtID, _pnkDeposit, _pnkWithdrawal, _newStake); - } - - function setStakePenalty( - address _account, - uint96 _courtID, - uint256 _penalty - ) external override onlyByCore returns (uint256 pnkBalance, uint256 newCourtStake, uint256 availablePenalty) { - Juror storage juror = jurors[_account]; - availablePenalty = _penalty; - newCourtStake = _stakeOf(_account, _courtID); - if (juror.stakedPnk < _penalty) { - availablePenalty = juror.stakedPnk; - } - - if (availablePenalty == 0) return (juror.stakedPnk, newCourtStake, 0); // No penalty to apply. - - uint256 currentStake = _stakeOf(_account, _courtID); - uint256 newStake = 0; - if (currentStake >= availablePenalty) { - newStake = currentStake - availablePenalty; - } - _setStake(_account, _courtID, 0, availablePenalty, newStake); - pnkBalance = juror.stakedPnk; // updated by _setStake() - newCourtStake = _stakeOf(_account, _courtID); // updated by _setStake() - } - - /// @dev Update the state of the stakes with a PNK reward deposit, called by KC during rewards execution. - /// `O(n + p * log_k(j))` where - /// `n` is the number of courts the juror has staked in, - /// `p` is the depth of the court tree, - /// `k` is the minimum number of children per node of one of these courts' sortition sum tree, - /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously. - /// @param _account The address of the juror. - /// @param _courtID The ID of the court. - /// @param _reward The amount of PNK to be deposited as a reward. - function setStakeReward( - address _account, - uint96 _courtID, - uint256 _reward - ) external override onlyByCore returns (bool success) { - if (_reward == 0) return true; // No reward to add. - - uint256 currentStake = _stakeOf(_account, _courtID); - if (currentStake == 0) return false; // Juror has been unstaked, don't increase their stake. - - uint256 newStake = currentStake + _reward; - _setStake(_account, _courtID, _reward, 0, newStake); - return true; - } - - function _setStake( - address _account, - uint96 _courtID, - uint256 _pnkDeposit, - uint256 _pnkWithdrawal, - uint256 _newStake - ) internal { - Juror storage juror = jurors[_account]; - uint256 currentStake = _stakeOf(_account, _courtID); - if (_pnkDeposit > 0) { - if (currentStake == 0) { - juror.courtIDs.push(_courtID); - } - // Increase juror's balance by deposited amount. - juror.stakedPnk += _pnkDeposit; - } else { - juror.stakedPnk -= _pnkWithdrawal; - if (_newStake == 0) { - // Cleanup - for (uint256 i = juror.courtIDs.length; i > 0; i--) { - if (juror.courtIDs[i - 1] == _courtID) { - juror.courtIDs[i - 1] = juror.courtIDs[juror.courtIDs.length - 1]; - juror.courtIDs.pop(); - break; - } - } - } - } - - bool finished = false; - uint96 currentCourtID = _courtID; - while (!finished) { - // Tokens are also implicitly staked in parent courts through sortition module to increase the chance of being drawn. - juror.stakesByCourtID[currentCourtID] += _newStake; - juror.stakesByCourtID[currentCourtID] -= currentStake; - if (currentCourtID == GENERAL_COURT) { - finished = true; - } else { - (currentCourtID, , , , , , ) = core.courts(currentCourtID); - } - } - emit StakeSet(_account, _courtID, _newStake, juror.stakedPnk); - } - - function lockStake(address _account, uint256 _relativeAmount) external override onlyByCore { - jurors[_account].lockedPnk += _relativeAmount; - emit StakeLocked(_account, _relativeAmount, false); - } - - function unlockStake(address _account, uint256 _relativeAmount) external override onlyByCore { - jurors[_account].lockedPnk -= _relativeAmount; - emit StakeLocked(_account, _relativeAmount, true); - } - - /// @dev Unstakes the inactive juror from all courts. - /// `O(n * (p * log_k(j)) )` where - /// `n` is the number of courts the juror has staked in, - /// `p` is the depth of the court tree, - /// `k` is the minimum number of children per node of one of these courts' sortition sum tree, - /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously. - /// @param _account The juror to unstake. - function forcedUnstakeAllCourts(address _account) external override onlyByCore { - uint96[] memory courtIDs = getJurorCourtIDs(_account); - for (uint256 j = courtIDs.length; j > 0; j--) { - core.setStakeBySortitionModule(_account, courtIDs[j - 1], 0); - } - } - - /// @dev Unstakes the inactive juror from a specific court. - /// `O(n * (p * log_k(j)) )` where - /// `n` is the number of courts the juror has staked in, - /// `p` is the depth of the court tree, - /// `k` is the minimum number of children per node of one of these courts' sortition sum tree, - /// and `j` is the maximum number of jurors that ever staked in one of these courts simultaneously. - /// @param _account The juror to unstake. - /// @param _courtID The ID of the court. - function forcedUnstake(address _account, uint96 _courtID) external override onlyByCore { - core.setStakeBySortitionModule(_account, _courtID, 0); - } - - /// @dev Gives back the locked PNKs in case the juror fully unstaked earlier. - /// Note that since locked and staked PNK are async it is possible for the juror to have positive staked PNK balance - /// while having 0 stake in courts and 0 locked tokens (eg. when the juror fully unstaked during dispute and later got his tokens unlocked). - /// In this case the juror can use this function to withdraw the leftover tokens. - /// Also note that if the juror has some leftover PNK while not fully unstaked he'll have to manually unstake from all courts to trigger this function. - /// @param _account The juror whose PNK to withdraw. - function withdrawLeftoverPNK(address _account) external override { - // Can withdraw the leftover PNK if fully unstaked, has no tokens locked and has positive balance. - // This withdrawal can't be triggered by calling setStake() in KlerosCore because current stake is technically 0, thus it is done via separate function. - uint256 amount = getJurorLeftoverPNK(_account); - if (amount == 0) revert NotEligibleForWithdrawal(); - jurors[_account].stakedPnk = 0; - core.transferBySortitionModule(_account, amount); - emit LeftoverPNKWithdrawn(_account, amount); - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Draw an ID from a tree using a number. - /// Note that this function reverts if the sum of all values in the tree is 0. - /// @return drawnAddress The drawn address. - function draw(uint96, uint256, uint256) public view override returns (address drawnAddress, uint96 fromSubcourtID) { - drawnAddress = transientJuror; - } - - /// @dev Gets the stake of a juror in a court. - /// Warning: `O(n)` complexity where `n` is the number of courts the juror has staked in - /// but acceptable for this educational implementation. - /// @param _juror The address of the juror. - /// @param _courtID The ID of the court. - /// @return totalStaked The total amount of tokens staked by the juror in the court. - /// @return totalLocked The total amount of tokens locked by the juror in the court. - /// @return stakedInCourt The amount of tokens staked by the juror in the court. - /// @return nbCourts The number of courts the juror has staked in. - function getJurorBalance( - address _juror, - uint96 _courtID - ) - external - view - override - returns (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts) - { - Juror storage juror = jurors[_juror]; - totalStaked = juror.stakedPnk; - totalLocked = juror.lockedPnk; - nbCourts = juror.courtIDs.length; - for (uint256 i = 0; i < nbCourts; i++) { - if (juror.courtIDs[i] == _courtID) { - stakedInCourt = juror.stakesByCourtID[_courtID]; - break; - } - } - } - - /// @dev Gets the court identifiers where a specific `_juror` has staked. - /// @param _juror The address of the juror. - function getJurorCourtIDs(address _juror) public view override returns (uint96[] memory) { - return jurors[_juror].courtIDs; - } - - function isJurorStaked(address _juror) external view override returns (bool) { - return jurors[_juror].stakedPnk > 0; - } - - function getJurorLeftoverPNK(address _juror) public view override returns (uint256) { - Juror storage juror = jurors[_juror]; - if (juror.courtIDs.length == 0 && juror.lockedPnk == 0) { - return juror.stakedPnk; - } - return 0; - } - - // ************************************* // - // * Internal * // - // ************************************* // - - /// @dev Gets the stake of a juror in a court. - /// Warning: `O(n)` complexity where `n` is the number of courts the juror has staked in - /// but acceptable for this educational implementation. - /// @param _juror The address of the juror. - /// @param _courtID The ID of the court. - /// @return stakedInCourt The amount of tokens staked by the juror in the court. - function _stakeOf(address _juror, uint96 _courtID) internal view returns (uint256 stakedInCourt) { - Juror storage juror = jurors[_juror]; - for (uint256 i = 0; i < juror.courtIDs.length; i++) { - if (juror.courtIDs[i] == _courtID) { - stakedInCourt = juror.stakesByCourtID[_courtID]; - break; - } - } - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); - error KlerosCoreOnly(); - error NotEligibleForWithdrawal(); -} diff --git a/contracts/src/arbitration/view/KlerosCoreSnapshotProxy.sol b/contracts/src/arbitration/view/KlerosCoreSnapshotProxy.sol deleted file mode 100644 index 70c3c77ce..000000000 --- a/contracts/src/arbitration/view/KlerosCoreSnapshotProxy.sol +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {ISortitionModule} from "../interfaces/ISortitionModule.sol"; - -interface IKlerosCore { - function sortitionModule() external view returns (ISortitionModule); -} - -/// @title KlerosCoreSnapshotProxy -/// Proxy contract for V2 that exposes staked PNK with balanceOf() function for Snapshot voting. -contract KlerosCoreSnapshotProxy { - // ************************************* // - // * State Modifiers * // - // ************************************* // - - IKlerosCore public core; - address public owner; - string public constant name = "Staked Pinakion"; - string public constant symbol = "stPNK"; - uint8 public constant decimals = 18; - - // ************************************* // - // * Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Constructor - /// @param _owner The owner of the contract. - /// @param _core KlerosCore to read the balance from. - constructor(address _owner, IKlerosCore _core) { - owner = _owner; - core = _core; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /// @dev Changes the `owner` storage variable. - /// @param _owner The new value for the `owner` storage variable. - function changeOwner(address _owner) external onlyByOwner { - owner = _owner; - } - - /// @dev Changes the `core` storage variable. - /// @param _core The new value for the `core` storage variable. - function changeCore(IKlerosCore _core) external onlyByOwner { - core = _core; - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Returns the amount of PNK staked in KlerosV2 for a particular address. - /// Note: Proxy doesn't need to differentiate between courts so we pass 0 as courtID. - /// @param _account The address to query. - /// @return totalStaked Total amount staked in V2 by the address. - function balanceOf(address _account) external view returns (uint256 totalStaked) { - (totalStaked, , , ) = core.sortitionModule().getJurorBalance(_account, 0); - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); -} diff --git a/contracts/src/gateway/ForeignGateway.sol b/contracts/src/gateway/ForeignGateway.sol deleted file mode 100644 index 366f3e6f0..000000000 --- a/contracts/src/gateway/ForeignGateway.sol +++ /dev/null @@ -1,282 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "./interfaces/IForeignGateway.sol"; -import "../proxy/UUPSProxiable.sol"; -import "../proxy/Initializable.sol"; -import "../libraries/Constants.sol"; - -/// Foreign Gateway -/// Counterpart of `HomeGateway` -contract ForeignGateway is IForeignGateway, UUPSProxiable, Initializable { - string public constant override version = "0.8.0"; - - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - struct DisputeData { - uint248 id; - bool ruled; - address arbitrable; - uint256 paid; - address relayer; - } - - // ************************************* // - // * Events * // - // ************************************* // - - event ArbitrationCostModified(uint96 indexed _courtID, uint256 _feeForJuror); - - // ************************************* // - // * Storage * // - // ************************************* // - - uint256 internal localDisputeID; // The disputeID must start from 1 as the KlerosV1 proxy governor depends on this implementation. We now also depend on localDisputeID not ever being zero. - mapping(uint96 courtId => uint256) public feeForJuror; // feeForJuror[v2CourtID], it mirrors the value on KlerosCore. - address public owner; - address public veaOutbox; - uint256 public override homeChainID; - address public override homeGateway; - address public deprecatedVeaOutbox; - uint256 public deprecatedVeaOutboxExpiration; - mapping(bytes32 disputeHash => DisputeData) public disputeHashtoDisputeData; - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyFromVea(address _messageSender) { - if ( - veaOutbox != msg.sender && - (block.timestamp >= deprecatedVeaOutboxExpiration || deprecatedVeaOutbox != msg.sender) - ) revert VeaOutboxOnly(); - if (_messageSender != homeGateway) revert HomeGatewayMessageSenderOnly(); - _; - } - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Constructs the `PolicyRegistry` contract. - /// @param _owner The owner's address. - /// @param _veaOutbox The address of the VeaOutbox. - /// @param _homeChainID The chainID of the home chain. - /// @param _homeGateway The address of the home gateway. - function initialize( - address _owner, - address _veaOutbox, - uint256 _homeChainID, - address _homeGateway - ) external initializer { - owner = _owner; - veaOutbox = _veaOutbox; - homeChainID = _homeChainID; - homeGateway = _homeGateway; - localDisputeID = 1; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /** - * @dev Access Control to perform implementation upgrades (UUPS Proxiable) - * @dev Only the owner can perform upgrades (`onlyByOwner`) - */ - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - /// @dev Changes the owner. - /// @param _owner The address of the new owner. - function changeOwner(address _owner) external { - if (owner != msg.sender) revert OwnerOnly(); - owner = _owner; - } - - /// @dev Changes the outbox. - /// @param _veaOutbox The address of the new outbox. - /// @param _gracePeriod The duration to accept messages from the deprecated bridge (if at all). - function changeVea(address _veaOutbox, uint256 _gracePeriod) external onlyByOwner { - // grace period to relay the remaining messages which are still going through the deprecated bridge. - deprecatedVeaOutboxExpiration = block.timestamp + _gracePeriod; - deprecatedVeaOutbox = veaOutbox; - veaOutbox = _veaOutbox; - } - - /// @dev Changes the home gateway. - /// @param _homeGateway The address of the new home gateway. - function changeHomeGateway(address _homeGateway) external { - if (owner != msg.sender) revert OwnerOnly(); - homeGateway = _homeGateway; - } - - /// @dev Changes the `feeForJuror` property value of a specified court. - /// @param _courtID The ID of the court on the v2 arbitrator. Not to be confused with the courtID on KlerosLiquid. - /// @param _feeForJuror The new value for the `feeForJuror` property value. - function changeCourtJurorFee(uint96 _courtID, uint256 _feeForJuror) external onlyByOwner { - feeForJuror[_courtID] = _feeForJuror; - emit ArbitrationCostModified(_courtID, _feeForJuror); - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @inheritdoc IArbitratorV2 - function createDispute( - uint256 _choices, - bytes calldata _extraData - ) external payable override returns (uint256 disputeID) { - if (msg.value < arbitrationCost(_extraData)) revert ArbitrationFeesNotEnough(); - - disputeID = localDisputeID++; - uint256 chainID; - assembly { - chainID := chainid() - } - bytes32 disputeHash = keccak256( - abi.encodePacked( - "createDispute", - blockhash(block.number - 1), - chainID, - msg.sender, - disputeID, - _choices, - _extraData - ) - ); - - disputeHashtoDisputeData[disputeHash] = DisputeData({ - id: uint248(disputeID), - arbitrable: msg.sender, - paid: msg.value, - relayer: address(0), - ruled: false - }); - - emit CrossChainDisputeOutgoing(blockhash(block.number - 1), msg.sender, disputeID, _choices, _extraData); - } - - /// @inheritdoc IArbitratorV2 - function createDispute( - uint256 /*_choices*/, - bytes calldata /*_extraData*/, - IERC20 /*_feeToken*/, - uint256 /*_feeAmount*/ - ) external pure override returns (uint256) { - revert("Not supported"); - } - - /// @inheritdoc IArbitratorV2 - function arbitrationCost(bytes calldata _extraData) public view override returns (uint256 cost) { - (uint96 courtID, uint256 minJurors) = extraDataToCourtIDMinJurors(_extraData); - cost = feeForJuror[courtID] * minJurors; - } - - /// @inheritdoc IArbitratorV2 - function arbitrationCost( - bytes calldata /*_extraData*/, - IERC20 /*_feeToken*/ - ) public pure override returns (uint256 /*cost*/) { - revert("Not supported"); - } - - /// @inheritdoc IForeignGateway - function relayRule( - address _messageSender, - bytes32 _disputeHash, - uint256 _ruling, - address _relayer - ) external override onlyFromVea(_messageSender) { - DisputeData storage dispute = disputeHashtoDisputeData[_disputeHash]; - - if (dispute.id == 0) revert DisputeDoesNotExist(); - if (dispute.ruled) revert CannotRuleTwice(); - - dispute.ruled = true; - dispute.relayer = _relayer; - - IArbitrableV2 arbitrable = IArbitrableV2(dispute.arbitrable); - arbitrable.rule(dispute.id, _ruling); - } - - /// @inheritdoc IForeignGateway - function withdrawFees(bytes32 _disputeHash) external override { - DisputeData storage dispute = disputeHashtoDisputeData[_disputeHash]; - if (dispute.id == 0) revert DisputeDoesNotExist(); - if (!dispute.ruled) revert NotRuledYet(); - - uint256 amount = dispute.paid; - dispute.paid = 0; - payable(dispute.relayer).transfer(amount); - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @inheritdoc IForeignGateway - function disputeHashToForeignID(bytes32 _disputeHash) external view override returns (uint256) { - return disputeHashtoDisputeData[_disputeHash].id; - } - - /// @inheritdoc IReceiverGateway - function senderGateway() external view override returns (address) { - return homeGateway; - } - - function currentRuling( - uint256 /*_disputeID*/ - ) public pure returns (uint256 /*ruling*/, bool /*tied*/, bool /*overridden*/) { - revert("Not supported"); - } - - // ************************************* // - // * Internal * // - // ************************************* // - - function extraDataToCourtIDMinJurors( - bytes memory _extraData - ) internal view returns (uint96 courtID, uint256 minJurors) { - // Note that here we ignore DisputeKitID - if (_extraData.length >= 64) { - assembly { - // solium-disable-line security/no-inline-assembly - courtID := mload(add(_extraData, 0x20)) - minJurors := mload(add(_extraData, 0x40)) - } - if (feeForJuror[courtID] == 0) courtID = 0; - if (minJurors == 0) minJurors = DEFAULT_NB_OF_JURORS; - } else { - courtID = 0; - minJurors = DEFAULT_NB_OF_JURORS; - } - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); - error HomeGatewayMessageSenderOnly(); - error VeaOutboxOnly(); - error ArbitrationFeesNotEnough(); - error DisputeDoesNotExist(); - error CannotRuleTwice(); - error NotRuledYet(); -} diff --git a/contracts/src/gateway/HomeGateway.sol b/contracts/src/gateway/HomeGateway.sol deleted file mode 100644 index 2a23913ef..000000000 --- a/contracts/src/gateway/HomeGateway.sol +++ /dev/null @@ -1,250 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "./interfaces/IForeignGateway.sol"; -import "./interfaces/IHomeGateway.sol"; -import "../libraries/SafeERC20.sol"; -import "../libraries/Constants.sol"; -import "../proxy/UUPSProxiable.sol"; -import "../proxy/Initializable.sol"; - -/// Home Gateway -/// Counterpart of `ForeignGateway` -contract HomeGateway is IHomeGateway, UUPSProxiable, Initializable { - using SafeERC20 for IERC20; - - string public constant override version = "0.8.0"; - - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - struct RelayedData { - uint256 arbitrationCost; - address relayer; - } - - // ************************************* // - // * Storage * // - // ************************************* // - - address public owner; - IArbitratorV2 public arbitrator; - IVeaInbox public veaInbox; - uint256 public override foreignChainID; - address public override foreignGateway; - IERC20 public feeToken; - mapping(uint256 => bytes32) public disputeIDtoHash; - mapping(bytes32 => uint256) public disputeHashtoID; - mapping(bytes32 => RelayedData) public disputeHashtoRelayedData; - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - /// @dev Requires that the sender is the owner. - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /// @dev Constructs the `PolicyRegistry` contract. - /// @param _owner The owner's address. - /// @param _arbitrator The address of the arbitrator. - /// @param _veaInbox The address of the vea inbox. - /// @param _foreignChainID The ID of the foreign chain. - /// @param _foreignGateway The address of the foreign gateway. - /// @param _feeToken The address of the fee token. - function initialize( - address _owner, - IArbitratorV2 _arbitrator, - IVeaInbox _veaInbox, - uint256 _foreignChainID, - address _foreignGateway, - IERC20 _feeToken - ) external initializer { - owner = _owner; - arbitrator = _arbitrator; - veaInbox = _veaInbox; - foreignChainID = _foreignChainID; - foreignGateway = _foreignGateway; - feeToken = _feeToken; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /** - * @dev Access Control to perform implementation upgrades (UUPS Proxiable) - * @dev Only the owner can perform upgrades (`onlyByOwner`) - */ - function _authorizeUpgrade(address) internal view override onlyByOwner { - // NOP - } - - /// @dev Changes the owner. - /// @param _owner The address of the new owner. - function changeOwner(address _owner) external onlyByOwner { - owner = _owner; - } - - /// @dev Changes the arbitrator. - /// @param _arbitrator The address of the new arbitrator. - function changeArbitrator(IArbitratorV2 _arbitrator) external onlyByOwner { - arbitrator = _arbitrator; - } - - /// @dev Changes the vea inbox, useful to increase the claim deposit. - /// @param _veaInbox The address of the new vea inbox. - function changeVea(IVeaInbox _veaInbox) external onlyByOwner { - veaInbox = _veaInbox; - } - - /// @dev Changes the foreign gateway. - /// @param _foreignGateway The address of the new foreign gateway. - function changeForeignGateway(address _foreignGateway) external onlyByOwner { - foreignGateway = _foreignGateway; - } - - /// @dev Changes the fee token. - /// @param _feeToken The address of the new fee token. - function changeFeeToken(IERC20 _feeToken) external onlyByOwner { - feeToken = _feeToken; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @inheritdoc IHomeGateway - function relayCreateDispute(RelayCreateDisputeParams memory _params) external payable override { - if (feeToken != NATIVE_CURRENCY) revert FeesPaidInNativeCurrencyOnly(); - if (_params.foreignChainID != foreignChainID) revert ForeignChainIDNotSupported(); - - bytes32 disputeHash = keccak256( - abi.encodePacked( - "createDispute", - _params.foreignBlockHash, - _params.foreignChainID, - _params.foreignArbitrable, - _params.foreignDisputeID, - _params.choices, - _params.extraData - ) - ); - RelayedData storage relayedData = disputeHashtoRelayedData[disputeHash]; - if (relayedData.relayer != address(0)) revert DisputeAlreadyRelayed(); - - uint256 disputeID = arbitrator.createDispute{value: msg.value}(_params.choices, _params.extraData); - disputeIDtoHash[disputeID] = disputeHash; - disputeHashtoID[disputeHash] = disputeID; - relayedData.relayer = msg.sender; - - emit DisputeRequest(arbitrator, disputeID, _params.externalDisputeID, _params.templateId, _params.templateUri); - - emit CrossChainDisputeIncoming( - arbitrator, - _params.foreignChainID, - _params.foreignArbitrable, - _params.foreignDisputeID, - disputeID, - _params.externalDisputeID, - _params.templateId, - _params.templateUri - ); - } - - /// @inheritdoc IHomeGateway - function relayCreateDispute(RelayCreateDisputeParams memory _params, uint256 _feeAmount) external { - if (feeToken == NATIVE_CURRENCY) revert FeesPaidInERC20Only(); - if (_params.foreignChainID != foreignChainID) revert ForeignChainIDNotSupported(); - - bytes32 disputeHash = keccak256( - abi.encodePacked( - "createDispute", - _params.foreignBlockHash, - _params.foreignChainID, - _params.foreignArbitrable, - _params.foreignDisputeID, - _params.choices, - _params.extraData - ) - ); - RelayedData storage relayedData = disputeHashtoRelayedData[disputeHash]; - if (relayedData.relayer != address(0)) revert DisputeAlreadyRelayed(); - - if (!feeToken.safeTransferFrom(msg.sender, address(this), _feeAmount)) revert TransferFailed(); - if (!feeToken.increaseAllowance(address(arbitrator), _feeAmount)) revert AllowanceIncreaseFailed(); - - uint256 disputeID = arbitrator.createDispute(_params.choices, _params.extraData, feeToken, _feeAmount); - disputeIDtoHash[disputeID] = disputeHash; - disputeHashtoID[disputeHash] = disputeID; - relayedData.relayer = msg.sender; - - // Not strictly necessary for functionality, only to satisfy IArbitrableV2 - emit DisputeRequest(arbitrator, disputeID, _params.externalDisputeID, _params.templateId, _params.templateUri); - - emit CrossChainDisputeIncoming( - arbitrator, - _params.foreignChainID, - _params.foreignArbitrable, - _params.foreignDisputeID, - disputeID, - _params.externalDisputeID, - _params.templateId, - _params.templateUri - ); - } - - /// @inheritdoc IArbitrableV2 - function rule(uint256 _disputeID, uint256 _ruling) external override { - if (msg.sender != address(arbitrator)) revert ArbitratorOnly(); - - bytes32 disputeHash = disputeIDtoHash[_disputeID]; - RelayedData memory relayedData = disputeHashtoRelayedData[disputeHash]; - - // The first parameter of relayRule() `_messageSender` is missing from the encoding below - // because Vea takes care of inserting it for security reasons. - bytes4 methodSelector = IForeignGateway.relayRule.selector; - bytes memory data = abi.encode(disputeHash, _ruling, relayedData.relayer); - veaInbox.sendMessage(foreignGateway, methodSelector, data); - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @inheritdoc IHomeGateway - function disputeHashToHomeID(bytes32 _disputeHash) external view override returns (uint256) { - return disputeHashtoID[_disputeHash]; - } - - /// @inheritdoc ISenderGateway - function receiverGateway() external view override returns (address) { - return foreignGateway; - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error OwnerOnly(); - error ArbitratorOnly(); - error FeesPaidInERC20Only(); - error FeesPaidInNativeCurrencyOnly(); - error ForeignChainIDNotSupported(); - error DisputeAlreadyRelayed(); - error TransferFailed(); - error AllowanceIncreaseFailed(); -} diff --git a/contracts/src/gateway/interfaces/IForeignGateway.sol b/contracts/src/gateway/interfaces/IForeignGateway.sol deleted file mode 100644 index 49f51e5de..000000000 --- a/contracts/src/gateway/interfaces/IForeignGateway.sol +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -import "../../arbitration/interfaces/IArbitratorV2.sol"; -import "@kleros/vea-contracts/src/interfaces/gateways/IReceiverGateway.sol"; - -interface IForeignGateway is IArbitratorV2, IReceiverGateway { - /// @dev To be emitted when a dispute is sent to the IHomeGateway. - /// @param _foreignBlockHash foreignBlockHash - /// @param _foreignArbitrable The address of the Arbitrable contract. - /// @param _foreignDisputeID The identifier of the dispute in the Arbitrable contract. - /// @param _choices The number of choices the arbitrator can choose from in this dispute. - /// @param _extraData Any extra data to attach. - event CrossChainDisputeOutgoing( - bytes32 _foreignBlockHash, - address indexed _foreignArbitrable, - uint256 indexed _foreignDisputeID, - uint256 _choices, - bytes _extraData - ); - - /// Relay the rule call from the home gateway to the arbitrable. - function relayRule(address _messageSender, bytes32 _disputeHash, uint256 _ruling, address _forwarder) external; - - /// Reimburses the dispute fees to the relayer who paid for these fees on the home chain. - /// @param _disputeHash The dispute hash for which to withdraw the fees. - function withdrawFees(bytes32 _disputeHash) external; - - /// @dev Looks up the local foreign disputeID for a disputeHash - /// @param _disputeHash dispute hash - function disputeHashToForeignID(bytes32 _disputeHash) external view returns (uint256); - - /// @return The chain ID where the corresponding home gateway is deployed. - function homeChainID() external view returns (uint256); - - /// @return The address of the corresponding home gateway. - function homeGateway() external view returns (address); -} diff --git a/contracts/src/gateway/interfaces/IHomeGateway.sol b/contracts/src/gateway/interfaces/IHomeGateway.sol deleted file mode 100644 index b80f194d6..000000000 --- a/contracts/src/gateway/interfaces/IHomeGateway.sol +++ /dev/null @@ -1,68 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@kleros/vea-contracts/src/interfaces/gateways/ISenderGateway.sol"; -import "../../arbitration/interfaces/IArbitrableV2.sol"; - -interface IHomeGateway is IArbitrableV2, ISenderGateway { - /// @dev To be emitted when a dispute is received from the IForeignGateway. - /// @param _arbitrator The arbitrator of the contract. - /// @param _arbitrableChainId The chain identifier where the Arbitrable contract is deployed. - /// @param _arbitrable The address of the Arbitrable contract. - /// @param _arbitrableDisputeID The identifier of the dispute in the Arbitrable contract. - /// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract. - /// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration. - /// @param _templateId The identifier of the dispute template. Should not be used with _templateUri. - /// @param _templateUri IPFS path to the dispute template starting with '/ipfs/'. Should not be used with _templateId. - event CrossChainDisputeIncoming( - IArbitratorV2 _arbitrator, - uint256 _arbitrableChainId, - address indexed _arbitrable, - uint256 indexed _arbitrableDisputeID, - uint256 indexed _arbitratorDisputeID, - uint256 _externalDisputeID, - uint256 _templateId, - string _templateUri - ); - - // Workaround stack too deep for relayCreateDispute() - struct RelayCreateDisputeParams { - bytes32 foreignBlockHash; - uint256 foreignChainID; - address foreignArbitrable; - uint256 foreignDisputeID; - uint256 externalDisputeID; - uint256 templateId; - string templateUri; - uint256 choices; - bytes extraData; - } - - /// @dev Relays a dispute creation from the ForeignGateway to the home arbitrator using the same parameters as the ones on the foreign chain. - /// Providing incorrect parameters will create a different hash than on the foreignChain and will not affect the actual dispute/arbitrable's ruling. - /// This function accepts the fees payment in the native currency of the home chain, typically ETH. - /// @param _params The parameters of the dispute, see `RelayCreateDisputeParams`. - function relayCreateDispute(RelayCreateDisputeParams memory _params) external payable; - - /// @dev Relays a dispute creation from the ForeignGateway to the home arbitrator using the same parameters as the ones on the foreign chain. - /// Providing incorrect parameters will create a different hash than on the foreignChain and will not affect the actual dispute/arbitrable's ruling. - /// This function accepts the fees payment in the ERC20 `acceptedFeeToken()`. - /// @param _params The parameters of the dispute, see `RelayCreateDisputeParams`. - function relayCreateDispute(RelayCreateDisputeParams memory _params, uint256 _feeAmount) external; - - /// @dev Looks up the local home disputeID for a disputeHash - /// @param _disputeHash dispute hash - /// @return disputeID dispute identifier on the home chain - function disputeHashToHomeID(bytes32 _disputeHash) external view returns (uint256); - - /// @return The chain ID where the corresponding foreign gateway is deployed. - function foreignChainID() external view returns (uint256); - - /// @return The address of the corresponding foreign gateway. - function foreignGateway() external view returns (address); - - /// return The fee token. - function feeToken() external view returns (IERC20); -} diff --git a/contracts/src/gateway/mock/VeaMock.sol b/contracts/src/gateway/mock/VeaMock.sol deleted file mode 100644 index 00444a538..000000000 --- a/contracts/src/gateway/mock/VeaMock.sol +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "@kleros/vea-contracts/src/interfaces/inboxes/IVeaInbox.sol"; -import "@kleros/vea-contracts/src/interfaces/outboxes/IVeaOutboxOnL1.sol"; - -contract VeaMock is IVeaOutboxOnL1, IVeaInbox { - /* solhint-disable */ - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - /// @dev Sends an arbitrary message to receiving chain. - /// Note: Calls authenticated by receiving gateway checking the sender argument. - /// @param _to The cross-domain contract address which receives the calldata. - /// @param _fnSelector The function selector of the receiving contract. - /// @param _data The message calldata, abi.encode(...) - /// @return msgId The index of the message in the inbox, as a message Id, needed to relay the message. - function sendMessage(address _to, bytes4 _fnSelector, bytes memory _data) external returns (uint64 msgId) { - bytes memory data = abi.encodePacked( // abi.encodeWithSelector(fnSelector, msg.sender, data) - _fnSelector, - bytes32(uint256(uint160(msg.sender))), // big endian padded encoding of msg.sender, simulating abi.encodeWithSelector - _data - ); - - (bool success, bytes memory res) = _to.call(data); - require(success, "Call failure"); - } - - /// @dev Snapshots can be saved a maximum of once per epoch. - /// Saves snapshot of state root. - /// `O(log(count))` where count number of messages in the inbox. - function saveSnapshot() external { - revert("Not Implemented"); - } - - /// @dev Verifies and relays the message. - /// Note: Gateways expect first argument of message call to be the arbitrum message sender, used for authentication. - /// @param _proof The merkle proof to prove the message. - /// @param _msgId The zero based index of the message in the inbox. - /// @param _to The address to send the message to. - /// @param _message The message to relay. - function sendMessage(bytes32[] calldata _proof, uint64 _msgId, address _to, bytes calldata _message) external { - revert("Not Implemented"); - } - - /// @dev Resolves any challenge of the optimistic claim for 'epoch' using the canonical bridge. - /// Note: Access restricted to canonical bridge. - /// @param _epoch The epoch to verify. - /// @param _stateRoot The true state root for the epoch. - /// @param _claim The claim associated with the epoch. - function resolveDisputedClaim(uint256 _epoch, bytes32 _stateRoot, Claim memory _claim) external { - revert("Not Implemented"); - } - - /* solhint-enable */ -} diff --git a/contracts/src/kleros-v1/interfaces/IArbitrableV1.sol b/contracts/src/kleros-v1/interfaces/IArbitrableV1.sol deleted file mode 100644 index f6fe5eb99..000000000 --- a/contracts/src/kleros-v1/interfaces/IArbitrableV1.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "./IArbitratorV1.sol"; - -/// @title IArbitrable -/// Arbitrable interface compliant with ERC-792. -/// When developing arbitrable contracts, we need to: -/// - Define the action taken when a ruling is received by the contract. -/// - Allow dispute creation. For this a function must call arbitrator.createDispute{value: _fee}(_choices,_extraData); -interface IArbitrableV1 { - /// @dev To be raised when a ruling is given. - /// @param _arbitrator The arbitrator giving the ruling. - /// @param _disputeID ID of the dispute in the Arbitrator contract. - /// @param _ruling The ruling which was given. - event Ruling(IArbitratorV1 indexed _arbitrator, uint256 indexed _disputeID, uint256 _ruling); - - /// @dev Give a ruling for a dispute. Must be called by the arbitrator. - /// The purpose of this function is to ensure that the address calling it has the right to rule on the contract. - /// @param _disputeID ID of the dispute in the Arbitrator contract. - /// @param _ruling Ruling given by the arbitrator. Note that 0 is reserved for "Not able/wanting to make a decision". - function rule(uint256 _disputeID, uint256 _ruling) external; -} diff --git a/contracts/src/kleros-v1/interfaces/IArbitratorV1.sol b/contracts/src/kleros-v1/interfaces/IArbitratorV1.sol deleted file mode 100644 index 52d6c4d48..000000000 --- a/contracts/src/kleros-v1/interfaces/IArbitratorV1.sol +++ /dev/null @@ -1,73 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "./IArbitrableV1.sol"; - -/// @title Arbitrator -/// Arbitrator abstract contract compliant with ERC-792. -/// When developing arbitrator contracts we need to: -/// - Define the functions for dispute creation (createDispute) and appeal (appeal). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes). -/// - Define the functions for cost display (arbitrationCost and appealCost). -/// - Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling). -interface IArbitratorV1 { - enum DisputeStatus { - Waiting, - Appealable, - Solved - } - - /// @dev To be emitted when a dispute is created. - /// @param _disputeID ID of the dispute. - /// @param _arbitrable The contract which created the dispute. - event DisputeCreation(uint256 indexed _disputeID, IArbitrableV1 indexed _arbitrable); - - /// @dev To be emitted when a dispute can be appealed. - /// @param _disputeID ID of the dispute. - /// @param _arbitrable The contract which created the dispute. - event AppealPossible(uint256 indexed _disputeID, IArbitrableV1 indexed _arbitrable); - - /// @dev To be emitted when the current ruling is appealed. - /// @param _disputeID ID of the dispute. - /// @param _arbitrable The contract which created the dispute. - event AppealDecision(uint256 indexed _disputeID, IArbitrableV1 indexed _arbitrable); - - /// @dev Create a dispute. Must be called by the arbitrable contract. - /// Must be paid at least arbitrationCost(_extraData). - /// @param _choices Amount of choices the arbitrator can make in this dispute. - /// @param _extraData Can be used to give additional info on the dispute to be created. - /// @return disputeID ID of the dispute created. - function createDispute(uint256 _choices, bytes calldata _extraData) external payable returns (uint256 disputeID); - - /// @dev Compute the cost of arbitration. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation. - /// @param _extraData Can be used to give additional info on the dispute to be created. - /// @return cost Amount to be paid. - function arbitrationCost(bytes calldata _extraData) external view returns (uint256 cost); - - /// @dev Appeal a ruling. Note that it has to be called before the arbitrator contract calls rule. - /// @param _disputeID ID of the dispute to be appealed. - /// @param _extraData Can be used to give extra info on the appeal. - function appeal(uint256 _disputeID, bytes calldata _extraData) external payable; - - /// @dev Compute the cost of appeal. It is recommended not to increase it often, as it can be higly time and gas consuming for the arbitrated contracts to cope with fee augmentation. - /// @param _disputeID ID of the dispute to be appealed. - /// @param _extraData Can be used to give additional info on the dispute to be created. - /// @return cost Amount to be paid. - function appealCost(uint256 _disputeID, bytes calldata _extraData) external view returns (uint256 cost); - - /// @dev Compute the start and end of the dispute's current or next appeal period, if possible. If not known or appeal is impossible: should return (0, 0). - /// @param _disputeID ID of the dispute. - /// @return start The start of the period. - /// @return end The end of the period. - function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end); - - /// @dev Return the status of a dispute. - /// @param _disputeID ID of the dispute to rule. - /// @return status The status of the dispute. - function disputeStatus(uint256 _disputeID) external view returns (DisputeStatus status); - - /// @dev Return the current ruling of a dispute. This is useful for parties to know if they should appeal. - /// @param _disputeID ID of the dispute. - /// @return ruling The ruling which has been given or the one which will be given if there is no appeal. - function currentRuling(uint256 _disputeID) external view returns (uint256 ruling); -} diff --git a/contracts/src/kleros-v1/interfaces/IEvidenceV1.sol b/contracts/src/kleros-v1/interfaces/IEvidenceV1.sol deleted file mode 100644 index 4c7ad5641..000000000 --- a/contracts/src/kleros-v1/interfaces/IEvidenceV1.sol +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -/** - * @authors: [@ferittuncer, @hbarcelos] - * @reviewers: [] - * @auditors: [] - * @bounties: [] - * @deployments: [] - */ -import "./IArbitratorV1.sol"; - -/// @title IMetaEvidence -/// ERC-1497: Evidence Standard excluding evidence emission as it will be handled by the arbitrator. -interface IEvidenceV1 { - /// @dev To be emitted when meta-evidence is submitted. - /// @param _metaEvidenceID Unique identifier of meta-evidence. - /// @param _evidence IPFS path to metaevidence, example: '/ipfs/Qmarwkf7C9RuzDEJNnarT3WZ7kem5bk8DZAzx78acJjMFH/metaevidence.json' - event MetaEvidence(uint256 indexed _metaEvidenceID, string _evidence); - - /// @dev To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations). - /// @param _arbitrator The arbitrator of the contract. - /// @param _evidenceGroupID Unique identifier of the evidence group the evidence belongs to. - /// @param _party The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party. - /// @param _evidence IPFS path to evidence, example: '/ipfs/Qmarwkf7C9RuzDEJNnarT3WZ7kem5bk8DZAzx78acJjMFH/evidence.json' - event Evidence( - IArbitratorV1 indexed _arbitrator, - uint256 indexed _evidenceGroupID, - address indexed _party, - string _evidence - ); - - /// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID. - /// @param _arbitrator The arbitrator of the contract. - /// @param _disputeID ID of the dispute in the Arbitrator contract. - /// @param _metaEvidenceID Unique identifier of meta-evidence. - /// @param _evidenceGroupID Unique identifier of the evidence group that is linked to this dispute. - event Dispute( - IArbitratorV1 indexed _arbitrator, - uint256 indexed _disputeID, - uint256 _metaEvidenceID, - uint256 _evidenceGroupID - ); -} diff --git a/contracts/src/kleros-v1/interfaces/IKlerosLiquid.sol b/contracts/src/kleros-v1/interfaces/IKlerosLiquid.sol deleted file mode 100644 index 56d3c7789..000000000 --- a/contracts/src/kleros-v1/interfaces/IKlerosLiquid.sol +++ /dev/null @@ -1,106 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "./IArbitratorV1.sol"; - -interface IKlerosLiquid is IArbitratorV1 { - enum Period { - evidence, // Evidence can be submitted. This is also when drawing has to take place. - commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes. - vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not. - appeal, // The dispute can be appealed. - execution // Tokens are redistributed and the ruling is executed. - } - - enum Phase { - staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors. - generating, // Waiting for a random number. Pass as soon as it is ready. - drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes. - } - - struct Court { - uint96 parent; // The parent court. - uint256[] children; // List of child courts. - bool hiddenVotes; // Whether to use commit and reveal or not. - uint256 minStake; // Minimum tokens needed to stake in the court. - uint256 alpha; // Basis point of tokens that are lost when incoherent. - uint256 feeForJuror; // Arbitration fee paid per juror. - // The appeal after the one that reaches this number of jurors will go to the parent court if any, otherwise, no more appeals are possible. - uint256 jurorsForCourtJump; - uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`. - } - - struct Dispute { - // Note that appeal `0` is equivalent to the first round of the dispute. - uint96 subcourtID; // The ID of the subcourt the dispute is in. - address arbitrated; // The arbitrated arbitrable contract. - // The number of choices jurors have when voting. This does not include choice `0` which is reserved for "refuse to arbitrate"/"no ruling". - uint256 numberOfChoices; - Period period; // The current period of the dispute. - uint256 lastPeriodChange; // The last time the period was changed. - uint256 drawsInRound; // A counter of draws made in the current round. - uint256 commitsInRound; // A counter of commits made in the current round. - bool ruled; // True if the ruling has been executed, false otherwise. - } - - struct Juror { - uint256 stakedTokens; // The juror's total amount of tokens staked in subcourts. - uint256 lockedTokens; // The juror's total amount of tokens locked in disputes. - } - - function courts( - uint256 _index - ) - external - view - returns ( - uint96 parent, - bool hiddenVotes, - uint256 minStake, - uint256 alpha, - uint256 feeForJuror, - uint256 jurorsForCourtJump - ); - - function phase() external view returns (Phase); - - function lockInsolventTransfers() external view returns (bool); - - function minStakingTime() external view returns (uint256); - - function pinakion() external view returns (address); - - function disputes(uint256 _index) external view returns (Dispute memory); - - function jurors(address _account) external view returns (Juror memory); - - function changeSubcourtTimesPerPeriod(uint96 _subcourtID, uint256[4] calldata _timesPerPeriod) external; - - function executeOwnerProposal(address _destination, uint256 _amount, bytes calldata _data) external; - - // Getters - function getVote( - uint256 _disputeID, - uint256 _appeal, - uint256 _voteID - ) external view returns (address account, bytes32 commit, uint256 choice, bool voted); - - function getDispute( - uint256 _disputeID - ) - external - view - returns ( - uint256[] memory votesLengths, - uint256[] memory tokensAtStakePerJuror, - uint256[] memory totalFeesForJurors, - uint256[] memory votesInEachRound, - uint256[] memory repartitionsInEachRound, - uint256[] memory penaltiesInEachRound - ); - - function getSubcourt( - uint96 _subcourtID - ) external view returns (uint256[] memory children, uint256[4] memory timesPerPeriod); -} diff --git a/contracts/src/kleros-v1/interfaces/ITokenController.sol b/contracts/src/kleros-v1/interfaces/ITokenController.sol deleted file mode 100644 index c83b6a3e4..000000000 --- a/contracts/src/kleros-v1/interfaces/ITokenController.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -/// @dev The token controller contract must implement these functions. See https://github.com/Giveth/minime/blob/master/contracts/TokenController.sol -interface ITokenController { - /// @notice Called when `_owner` sends ether to the MiniMe Token contract - /// @param _owner The address that sent the ether to create tokens - /// @return True if the ether is accepted, false if it throws - function proxyPayment(address _owner) external payable returns (bool); - - /// @notice Notifies the controller about a token transfer allowing the controller to react if desired - /// @param _from The origin of the transfer - /// @param _to The destination of the transfer - /// @param _amount The amount of the transfer - /// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint256 _amount) external returns (bool); - - /// @notice Notifies the controller about an approval allowing the controller to react if desired - /// @param _owner The address that calls `approve()` - /// @param _spender The spender in the `approve()` call - /// @param _amount The amount in the `approve()` call - /// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint256 _amount) external returns (bool); -} diff --git a/contracts/src/kleros-v1/kleros-liquid-xdai/WrappedPinakion.sol b/contracts/src/kleros-v1/kleros-liquid-xdai/WrappedPinakion.sol deleted file mode 100644 index 5f3e997d0..000000000 --- a/contracts/src/kleros-v1/kleros-liquid-xdai/WrappedPinakion.sol +++ /dev/null @@ -1,299 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; -import "../interfaces/ITokenController.sol"; -import "./interfaces/ITokenBridge.sol"; -import "./interfaces/IERC677.sol"; - -contract WrappedPinakion is Initializable { - // ************************************* // - // * Events * // - // ************************************* // - - /// @notice Emitted when `value` tokens are moved from one account (`from`) to another (`to`). - /// @dev Notice that `value` may be zero. - event Transfer(address indexed from, address indexed to, uint256 value); - - /// @notice Emitted when the allowance of a `spender` for an `owner` is set by - /// a call to {approve}. `value` is the new allowance. - event Approval(address indexed owner, address indexed spender, uint256 value); - - // ************************************* // - // * Storage * // - // ************************************* // - - mapping(address => uint256) private balances; - mapping(address => mapping(address => uint256)) public allowance; - - /// @notice Total supply of the token. Equals the total xPinakion deposit into the contract. - uint256 public totalSupply; - - /// @notice Name of the token. - string public name; - - /// @notice Symbol of the token. - string public symbol; - - /// @notice Number of decimals of the token. - uint8 public decimals; - - /// @notice The token's controller. - address public controller; - - /// @notice Bridged PNK on xDai to be wrapped. This token is upgradeable. - IERC677 public xPinakion; - - /// @notice xDai Token Bridge. The Token Bridge is upgradeable. - ITokenBridge public tokenBridge; - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - /// @dev Verifies that the sender has ability to modify controlled parameters. - modifier onlyController() { - require(controller == msg.sender, "The caller is not the controller."); - _; - } - - // ************************************* // - // * Initializer * // - // ************************************* // - - /// @dev Initializer. - /// @param _name for the wrapped PNK on the home chain. - /// @param _symbol for wrapped PNK ticker on the home chain. - /// @param _xPinakion the home PNK contract which is already bridged to the foreign PNK contract. - /// @param _tokenBridge the TokenBridge contract. - function initialize( - string memory _name, - string memory _symbol, - IERC677 _xPinakion, - ITokenBridge _tokenBridge - ) public initializer { - name = _name; - symbol = _symbol; - decimals = 18; - xPinakion = _xPinakion; - tokenBridge = _tokenBridge; - controller = msg.sender; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /// @param _controller The new controller of the contract - function changeController(address _controller) external onlyController { - controller = _controller; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @notice Converts bridged PNK (xPinakion) into wrapped PNK which can be staked in KlerosLiquid. - /// @param _amount The amount of wrapped pinakions to mint. - function deposit(uint256 _amount) external { - _mint(msg.sender, _amount); - require( - xPinakion.transferFrom(msg.sender, address(this), _amount), - "Sender does not have enough approved funds." - ); - } - - /// @notice IERC20 Receiver functionality. - /// @dev Converts bridged PNK (xPinakion) into wrapped PNK which can be staked in KlerosLiquid. - /// If the tokenBridge is calling this function, then this contract has already received - /// the xPinakion tokens. Notice that the Home bridge calls onTokenBridge as a result of - /// someone invoking `relayTokensAndCall()` on the Foreign bridge contract. - /// @param _token The token address the _amount belongs to. - /// @param _amount The amount of wrapped PNK to mint. - /// @param _data Calldata containing the address of the recipient. - /// Notice that the address has to be padded to the right 32 bytes. - function onTokenBridged(address _token, uint256 _amount, bytes calldata _data) external { - require(msg.sender == address(tokenBridge), "Sender not authorized."); - require(_token == address(xPinakion), "Token bridged is not xPinakion."); - - address recipient; - assembly { - recipient := calldataload(0x84) - } - _mint(recipient, _amount); - } - - /// @notice Converts wrapped PNK back into bridged PNK (xPinakion). - /// @param _amount The amount of bridged PNK to withdraw. - function withdraw(uint256 _amount) external { - _burn(_amount); - require(xPinakion.transfer(msg.sender, _amount), "The `transfer` function must not fail."); - } - - /// @notice Converts wrapped PNK back into PNK using the Token Bridge. - /// @dev This function is not strictly needed, but it provides a good UX to users who want to get their Mainnet's PNK back. - /// What normally takes 3 transactions, here is done in one go. - /// Notice that the PNK have to be claimed on Mainnet's TokenBridge by the receiver. - /// @param _amount The amount of PNK to withdraw. - /// @param _receiver The address which will receive the PNK back in the foreign chain. - function withdrawAndConvertToPNK(uint256 _amount, address _receiver) external { - _burn(_amount); - // Using approve is safe here, because this contract approves the bridge to spend the tokens and triggers the relay immediately. - xPinakion.approve(address(tokenBridge), _amount); - tokenBridge.relayTokens(xPinakion, _receiver, _amount); - } - - /// @notice Moves `_amount` tokens from the caller's account to `_recipient`. - /// @param _recipient The entity receiving the funds. - /// @param _amount The amount to tranfer in base units. - /// @return True on success. - function transfer(address _recipient, uint256 _amount) public returns (bool) { - if (isContract(controller)) { - require( - ITokenController(controller).onTransfer(msg.sender, _recipient, _amount), - "Token controller rejects transfer." - ); - } - balances[msg.sender] = balances[msg.sender] - _amount; // ERC20: transfer amount exceeds balance - balances[_recipient] = balances[_recipient] + _amount; - emit Transfer(msg.sender, _recipient, _amount); - return true; - } - - /// @notice Moves `_amount` tokens from `_sender` to `_recipient` using the - /// allowance mechanism. `_amount` is then deducted from the caller's allowance. - /// @param _sender The entity to take the funds from. - /// @param _recipient The entity receiving the funds. - /// @param _amount The amount to tranfer in base units. - /// @return True on success. - function transferFrom(address _sender, address _recipient, uint256 _amount) public returns (bool) { - if (isContract(controller)) { - require( - ITokenController(controller).onTransfer(_sender, _recipient, _amount), - "Token controller rejects transfer." - ); - } - - // The controller of this contract can move tokens around at will, - // this is important to recognize! Confirm that you trust the - // controller of this contract, which in most situations should be - // another open source smart contract or 0x0. - if (msg.sender != controller) { - allowance[_sender][msg.sender] = allowance[_sender][msg.sender] - _amount; // ERC20: transfer amount exceeds allowance. - } - - balances[_sender] = balances[_sender] - _amount; // ERC20: transfer amount exceeds balance - balances[_recipient] = balances[_recipient] + _amount; - emit Transfer(_sender, _recipient, _amount); - return true; - } - - /// @notice Approves `_spender` to spend `_amount`. - /// @param _spender The entity allowed to spend funds. - /// @param _amount The amount of base units the entity will be allowed to spend. - /// @return True on success. - function approve(address _spender, uint256 _amount) public returns (bool) { - // Alerts the token controller of the approve function call - if (isContract(controller)) { - require( - ITokenController(controller).onApprove(msg.sender, _spender, _amount), - "Token controller does not approve." - ); - } - - allowance[msg.sender][_spender] = _amount; - emit Approval(msg.sender, _spender, _amount); - return true; - } - - /// @notice Increases the `_spender` allowance by `_addedValue`. - /// @param _spender The entity allowed to spend funds. - /// @param _addedValue The amount of extra base units the entity will be allowed to spend. - /// @return True on success. - function increaseAllowance(address _spender, uint256 _addedValue) public returns (bool) { - uint256 newAllowance = allowance[msg.sender][_spender] + _addedValue; - // Alerts the token controller of the approve function call - if (isContract(controller)) { - require( - ITokenController(controller).onApprove(msg.sender, _spender, newAllowance), - "Token controller does not approve." - ); - } - - allowance[msg.sender][_spender] = newAllowance; - emit Approval(msg.sender, _spender, newAllowance); - return true; - } - - /// @notice Decreases the `_spender` allowance by `_subtractedValue`. - /// @param _spender The entity whose spending allocation will be reduced. - /// @param _subtractedValue The reduction of spending allocation in base units. - /// @return True on success. - function decreaseAllowance(address _spender, uint256 _subtractedValue) public returns (bool) { - uint256 newAllowance = allowance[msg.sender][_spender] - _subtractedValue; // ERC20: decreased allowance below zero - // Alerts the token controller of the approve function call - if (isContract(controller)) { - require( - ITokenController(controller).onApprove(msg.sender, _spender, newAllowance), - "Token controller does not approve." - ); - } - - allowance[msg.sender][_spender] = newAllowance; - emit Approval(msg.sender, _spender, newAllowance); - return true; - } - - // ************************************* // - // * Internal * // - // ************************************* // - - /// @dev Internal function that mints an amount of the token and assigns it to - /// an account. This encapsulates the modification of balances such that the - /// proper events are emitted. - /// @param _recipient The address which will receive the minted tokens. - /// @param _amount The amount that will be created. - function _mint(address _recipient, uint256 _amount) internal { - totalSupply = totalSupply + _amount; - balances[_recipient] = balances[_recipient] + _amount; - emit Transfer(address(0x0), _recipient, _amount); - } - - /// @dev Destroys `_amount` tokens from the caller. Cannot burn locked tokens. - /// @param _amount The quantity of tokens to burn in base units. - function _burn(uint256 _amount) internal { - if (isContract(controller)) { - require( - ITokenController(controller).onTransfer(msg.sender, address(0x0), _amount), - "Token controller rejects transfer." - ); - } - balances[msg.sender] = balances[msg.sender] - _amount; // ERC20: burn amount exceeds balance - totalSupply = totalSupply - _amount; - emit Transfer(msg.sender, address(0x0), _amount); - } - - /// @dev Internal function to determine if an address is a contract. - /// @param _addr The address being queried. - /// @return True if `_addr` is a contract. - function isContract(address _addr) internal view returns (bool) { - uint256 size; - if (_addr == address(0)) return false; - assembly { - size := extcodesize(_addr) - } - return size > 0; - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Gets the balance of the specified address. - /// @param _owner The address to query the balance of. - /// @return uint256 value representing the amount owned by the passed address. - function balanceOf(address _owner) public view returns (uint256) { - return balances[_owner]; - } -} diff --git a/contracts/src/kleros-v1/kleros-liquid-xdai/interfaces/IERC677.sol b/contracts/src/kleros-v1/kleros-liquid-xdai/interfaces/IERC677.sol deleted file mode 100644 index c013c226b..000000000 --- a/contracts/src/kleros-v1/kleros-liquid-xdai/interfaces/IERC677.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -interface IERC677 { - function transfer(address _to, uint256 _value) external returns (bool); - - function transferFrom(address _from, address _to, uint256 _value) external returns (bool); - - function approve(address _spender, uint256 _value) external returns (bool); -} diff --git a/contracts/src/kleros-v1/kleros-liquid-xdai/interfaces/IRandomAuRa.sol b/contracts/src/kleros-v1/kleros-liquid-xdai/interfaces/IRandomAuRa.sol deleted file mode 100644 index 00b281482..000000000 --- a/contracts/src/kleros-v1/kleros-liquid-xdai/interfaces/IRandomAuRa.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -interface IRandomAuRa { - function currentSeed() external view returns (uint256); - - function isCommitPhase() external view returns (bool); - - function nextCommitPhaseStartBlock() external view returns (uint256); - - function collectRoundLength() external view returns (uint256); -} diff --git a/contracts/src/kleros-v1/kleros-liquid-xdai/interfaces/ITokenBridge.sol b/contracts/src/kleros-v1/kleros-liquid-xdai/interfaces/ITokenBridge.sol deleted file mode 100644 index a00e8b8ea..000000000 --- a/contracts/src/kleros-v1/kleros-liquid-xdai/interfaces/ITokenBridge.sol +++ /dev/null @@ -1,9 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "./IERC677.sol"; - -interface ITokenBridge { - function relayTokens(IERC677 token, address _receiver, uint256 _value) external; -} diff --git a/contracts/src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol b/contracts/src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol deleted file mode 100644 index 59ff80353..000000000 --- a/contracts/src/kleros-v1/kleros-liquid-xdai/xKlerosLiquidV2.sol +++ /dev/null @@ -1,745 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {IArbitratorV2, IArbitrableV2} from "../../arbitration/interfaces/IArbitratorV2.sol"; -import {ITokenController} from "../interfaces/ITokenController.sol"; -import {WrappedPinakion} from "./WrappedPinakion.sol"; -import {IRandomAuRa} from "./interfaces/IRandomAuRa.sol"; - -import {SortitionSumTreeFactory} from "../libraries/SortitionSumTreeFactory.sol"; -import "../../gateway/interfaces/IForeignGateway.sol"; - -/// @title xKlerosLiquidV2 -/// @dev This contract is an adaption of Mainnet's KlerosLiquid (https://github.com/kleros/kleros/blob/69cfbfb2128c29f1625b3a99a3183540772fda08/contracts/kleros/KlerosLiquid.sol) -/// for xDai chain. Notice that variables referring to ETH values in this contract, will hold the native token values of the chain on which xKlerosLiquid is deployed. -/// When this contract gets deployed on xDai chain, ETH variables will hold xDai values. -/// @custom:oz-upgrades-unsafe-allow external-library-linking -contract xKlerosLiquidV2 is Initializable, ITokenController, IArbitratorV2 { - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - // General - enum Phase { - staking, // Stake sum trees can be updated. Pass after `minStakingTime` passes and there is at least one dispute without jurors. - generating, // Waiting for a random number. Pass as soon as it is ready. - drawing // Jurors can be drawn. Pass after all disputes have jurors or `maxDrawingTime` passes. - } - - // Dispute - enum Period { - evidence, // Evidence can be submitted. This is also when drawing has to take place. - commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes. - vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not. - appeal, // The dispute can be appealed. - execution // Tokens are redistributed and the ruling is executed. - } - - // General - struct Court { - uint96 parent; // The parent court. - uint256[] children; // List of child courts. - bool hiddenVotes; // Whether to use commit and reveal or not. - uint256 minStake; // Minimum tokens needed to stake in the court. - uint256 alpha; // Basis point of tokens that are lost when incoherent. - uint256 feeForJuror; // Arbitration fee paid per juror. - // The appeal after the one that reaches this number of jurors will go to the parent court if any, otherwise, no more appeals are possible. - uint256 jurorsForCourtJump; - uint256[4] timesPerPeriod; // The time allotted to each dispute period in the form `timesPerPeriod[period]`. - } - struct DelayedSetStake { - address account; // The address of the juror. - uint96 subcourtID; // The ID of the subcourt. - uint128 stake; // The new stake. - } - - // Dispute - struct Vote { - address account; // The address of the juror. - bytes32 commit; // The commit of the juror. For courts with hidden votes. - uint256 choice; // The choice of the juror. - bool voted; // True if the vote has been cast or revealed, false otherwise. - } - struct VoteCounter { - // The choice with the most votes. Note that in the case of a tie, it is the choice that reached the tied number of votes first. - uint256 winningChoice; - mapping(uint256 => uint256) counts; // The sum of votes for each choice in the form `counts[choice]`. - bool tied; // True if there is a tie, false otherwise. - } - struct Dispute { - // Note that appeal `0` is equivalent to the first round of the dispute. - uint96 subcourtID; // The ID of the subcourt the dispute is in. - IArbitrableV2 arbitrated; // The arbitrated arbitrable contract. - // The number of choices jurors have when voting. This does not include choice `0` which is reserved for "refuse to arbitrate"/"no ruling". - uint256 numberOfChoices; - Period period; // The current period of the dispute. - uint256 lastPeriodChange; // The last time the period was changed. - // The votes in the form `votes[appeal][voteID]`. On each round, a new list is pushed and packed with as many empty votes as there are draws. We use `dispute.votes.length` to get the number of appeals plus 1 for the first round. - Vote[][] votes; - VoteCounter[] voteCounters; // The vote counters in the form `voteCounters[appeal]`. - uint256[] tokensAtStakePerJuror; // The amount of tokens at stake for each juror in the form `tokensAtStakePerJuror[appeal]`. - uint256[] totalFeesForJurors; // The total juror fees paid in the form `totalFeesForJurors[appeal]`. - uint256 drawsInRound; // A counter of draws made in the current round. - uint256 commitsInRound; // A counter of commits made in the current round. - uint256[] votesInEachRound; // A counter of votes made in each round in the form `votesInEachRound[appeal]`. - // A counter of vote reward repartitions made in each round in the form `repartitionsInEachRound[appeal]`. - uint256[] repartitionsInEachRound; - uint256[] penaltiesInEachRound; // The amount of tokens collected from penalties in each round in the form `penaltiesInEachRound[appeal]`. - bool ruled; // True if the ruling has been executed, false otherwise. - } - - // Juror - struct Juror { - // The IDs of subcourts where the juror has stake path ends. A stake path is a path from the general court to a court the juror directly staked in using `_setStake`. - uint96[] subcourtIDs; - uint256 stakedTokens; // The juror's total amount of tokens staked in subcourts. - uint256 lockedTokens; // The juror's total amount of tokens locked in disputes. - } - - // ************************************* // - // * Events * // - // ************************************* // - - /// @dev Emitted when we pass to a new phase. - /// @param _phase The new phase. - event NewPhase(Phase _phase); - - /// @dev Emitted when a dispute passes to a new period. - /// @param _disputeID The ID of the dispute. - /// @param _period The new period. - event NewPeriod(uint256 indexed _disputeID, Period _period); - - /// @dev Emitted when a juror's stake is set. - /// @param _address The address of the juror. - /// @param _subcourtID The ID of the subcourt at the end of the stake path. - /// @param _stake The new stake. - /// @param _newTotalStake The new total stake. - event StakeSet(address indexed _address, uint256 _subcourtID, uint128 _stake, uint256 _newTotalStake); - - /// @dev Emitted when a juror is drawn. - /// @param _address The drawn address. - /// @param _disputeID The ID of the dispute. - /// @param _appeal The appeal the draw is for. 0 is for the first round. - /// @param _voteID The vote ID. - event Draw(address indexed _address, uint256 indexed _disputeID, uint256 _appeal, uint256 _voteID); - - /// @dev Emitted when a juror wins or loses tokens and ETH from a dispute. - /// @param _address The juror affected. - /// @param _disputeID The ID of the dispute. - /// @param _tokenAmount The amount of tokens won or lost. - /// @param _ETHAmount The amount of ETH won or lost. - event TokenAndETHShift(address indexed _address, uint256 indexed _disputeID, int _tokenAmount, int _ETHAmount); - - // ************************************* // - // * Storage * // - // ************************************* // - - // General Constants - uint256 public constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have. - uint256 public constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute. - uint256 public constant NON_PAYABLE_AMOUNT = (2 ** 256 - 2) / 2; // An amount higher than the supply of ETH. - // General Contracts - address public owner; // The owner of the contract. - WrappedPinakion public pinakion; // The Pinakion token contract. - IRandomAuRa public RNGenerator; // The random number generator contract. - // General Dynamic - Phase public phase; // The current phase. - uint256 public lastPhaseChange; // The last time the phase was changed. - uint256 public disputesWithoutJurors; // The number of disputes that have not finished drawing jurors. - // The block number to get the next random number from. Used so there is at least a 1 block difference from the staking phase. - uint256 public RNBlock; - uint256 public RN; // The current random number. - uint256 public minStakingTime; // The minimum staking time. - uint256 public maxDrawingTime; // The maximum drawing time. - // True if insolvent (`balance < stakedTokens || balance < lockedTokens`) token transfers should be blocked. Used to avoid blocking penalties. - bool public lockInsolventTransfers; - // General Storage - Court[] public courts; // The subcourts. - using SortitionSumTreeFactory for SortitionSumTreeFactory.SortitionSumTrees; // Use library functions for sortition sum trees. - SortitionSumTreeFactory.SortitionSumTrees internal sortitionSumTrees; // The sortition sum trees. - // The delayed calls to `_setStake`. Used to schedule `_setStake`s when not in the staking phase. - mapping(uint256 => DelayedSetStake) public delayedSetStakes; - // The index of the next `delayedSetStakes` item to execute. Starts at 1 because `lastDelayedSetStake` starts at 0. - uint256 public nextDelayedSetStake; - uint256 public lastDelayedSetStake; // The index of the last `delayedSetStakes` item. 0 is skipped because it is the initial value. - - // Dispute - // Use a mapping instead of an array so that upgrading (appending variables to) the Dispute struct is possible without big layout changes. - mapping(uint256 disputeId => Dispute) public disputes; // The disputes. - uint256 public totalDisputes; - - // Juror - mapping(address account => Juror) public jurors; // The jurors. - - IForeignGateway public foreignGateway; // Foreign gateway contract. - - mapping(uint256 disputeId => uint256 rulingId) public disputesRuling; - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - /// @dev Requires a specific phase. - /// @param _phase The required phase. - modifier onlyDuringPhase(Phase _phase) { - require(phase == _phase); - _; - } - - /// @dev Requires a specific period in a dispute. - /// @param _disputeID The ID of the dispute. - /// @param _period The required period. - modifier onlyDuringPeriod(uint256 _disputeID, Period _period) { - require(disputes[_disputeID].period == _period); - _; - } - - /// @dev Requires that the sender is the owner. Note that the owner is expected to not be malicious. - modifier onlyByOwner() { - require(owner == msg.sender); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Constructs the KlerosLiquid contract. - /// @param _owner The owner's address. - /// @param _pinakion The address of the token contract. - /// @param _RNGenerator The address of the random number generator contract. - /// @param _minStakingTime The minimum time that the staking phase should last. - /// @param _maxDrawingTime The maximum time that the drawing phase should last. - /// @param _hiddenVotes The `hiddenVotes` property value of the general court. - /// @param _courtParameters MinStake, alpha, feeForJuror and jurorsForCourtJump respectively. - /// @param _timesPerPeriod The `timesPerPeriod` property value of the general court. - /// @param _sortitionSumTreeK The number of children per node of the general court's sortition sum tree. - /// @param _foreignGateway Foreign gateway on xDai. - function initialize( - address _owner, - WrappedPinakion _pinakion, - IRandomAuRa _RNGenerator, - uint256 _minStakingTime, - uint256 _maxDrawingTime, - bool _hiddenVotes, - uint256[4] memory _courtParameters, - uint256[4] memory _timesPerPeriod, - uint256 _sortitionSumTreeK, - IForeignGateway _foreignGateway - ) public initializer { - // Initialize contract. - owner = _owner; - pinakion = _pinakion; - RNGenerator = _RNGenerator; - minStakingTime = _minStakingTime; - maxDrawingTime = _maxDrawingTime; - phase = Phase.staking; - lastPhaseChange = block.timestamp; - lockInsolventTransfers = true; - if (nextDelayedSetStake == 0) nextDelayedSetStake = 1; - foreignGateway = _foreignGateway; - - // Create the general court. - if (courts.length == 0) { - courts.push( - Court({ - parent: 0, - children: new uint256[](0), - hiddenVotes: _hiddenVotes, - minStake: _courtParameters[0], - alpha: _courtParameters[1], - feeForJuror: _courtParameters[2], - jurorsForCourtJump: _courtParameters[3], - timesPerPeriod: _timesPerPeriod - }) - ); - sortitionSumTrees.createTree(bytes32(0), _sortitionSumTreeK); - } - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /// @dev Lets the owner call anything on behalf of the contract. - /// @param _destination The destination of the call. - /// @param _amount The value sent with the call. - /// @param _data The data sent with the call. - function executeOwnerProposal(address _destination, uint256 _amount, bytes memory _data) external onlyByOwner { - (bool success, ) = _destination.call{value: _amount}(_data); - require(success, "Unsuccessful call"); - } - - /// @dev Changes the `owner` storage variable. - /// @param _owner The new value for the `owner` storage variable. - function changeOwner(address _owner) external onlyByOwner { - owner = _owner; - } - - /// @dev Changes the `pinakion` storage variable. - /// @param _pinakion The new value for the `pinakion` storage variable. - function changePinakion(WrappedPinakion _pinakion) external onlyByOwner { - pinakion = _pinakion; - } - - /// @dev Changes the `RNGenerator` storage variable. - /// @param _RNGenerator The new value for the `RNGenerator` storage variable. - function changeRNGenerator(IRandomAuRa _RNGenerator) external onlyByOwner { - RNGenerator = _RNGenerator; - if (phase == Phase.generating) { - RNBlock = RNGenerator.nextCommitPhaseStartBlock() + RNGenerator.collectRoundLength(); - } - } - - /// @dev Changes the `minStakingTime` storage variable. - /// @param _minStakingTime The new value for the `minStakingTime` storage variable. - function changeMinStakingTime(uint256 _minStakingTime) external onlyByOwner { - minStakingTime = _minStakingTime; - } - - /// @dev Changes the `maxDrawingTime` storage variable. - /// @param _maxDrawingTime The new value for the `maxDrawingTime` storage variable. - function changeMaxDrawingTime(uint256 _maxDrawingTime) external onlyByOwner { - maxDrawingTime = _maxDrawingTime; - } - - /// @dev Changes the `foreignGateway` storage variable. - /// @param _foreignGateway The new value for the `foreignGateway` storage variable. - function changeForeignGateway(IForeignGateway _foreignGateway) external onlyByOwner { - foreignGateway = _foreignGateway; - } - - /// @dev Creates a subcourt under a specified parent court. - /// @param _parent The `parent` property value of the subcourt. - /// @param _hiddenVotes The `hiddenVotes` property value of the subcourt. - /// @param _minStake The `minStake` property value of the subcourt. - /// @param _alpha The `alpha` property value of the subcourt. - /// @param _feeForJuror The `feeForJuror` property value of the subcourt. - /// @param _jurorsForCourtJump The `jurorsForCourtJump` property value of the subcourt. - /// @param _timesPerPeriod The `timesPerPeriod` property value of the subcourt. - /// @param _sortitionSumTreeK The number of children per node of the subcourt's sortition sum tree. - function createSubcourt( - uint96 _parent, - bool _hiddenVotes, - uint256 _minStake, - uint256 _alpha, - uint256 _feeForJuror, - uint256 _jurorsForCourtJump, - uint256[4] memory _timesPerPeriod, - uint256 _sortitionSumTreeK - ) external onlyByOwner { - require( - courts[_parent].minStake <= _minStake, - "A subcourt cannot be a child of a subcourt with a higher minimum stake." - ); - - // Create the subcourt. - uint256 subcourtID = courts.length; - Court storage subcourt = courts.push(); - subcourt.parent = _parent; - subcourt.children = new uint256[](0); - subcourt.hiddenVotes = _hiddenVotes; - subcourt.minStake = _minStake; - subcourt.alpha = _alpha; - subcourt.feeForJuror = _feeForJuror; - subcourt.jurorsForCourtJump = _jurorsForCourtJump; - subcourt.timesPerPeriod = _timesPerPeriod; - sortitionSumTrees.createTree(bytes32(subcourtID), _sortitionSumTreeK); - - // Update the parent. - courts[_parent].children.push(subcourtID); - } - - /// @dev Changes the `minStake` property value of a specified subcourt. Don't set to a value lower than its parent's `minStake` property value. - /// @param _subcourtID The ID of the subcourt. - /// @param _minStake The new value for the `minStake` property value. - function changeSubcourtMinStake(uint96 _subcourtID, uint256 _minStake) external onlyByOwner { - require(_subcourtID == 0 || courts[courts[_subcourtID].parent].minStake <= _minStake); - for (uint256 i = 0; i < courts[_subcourtID].children.length; i++) { - require( - courts[courts[_subcourtID].children[i]].minStake >= _minStake, - "A subcourt cannot be the parent of a subcourt with a lower minimum stake." - ); - } - - courts[_subcourtID].minStake = _minStake; - } - - /// @dev Changes the `alpha` property value of a specified subcourt. - /// @param _subcourtID The ID of the subcourt. - /// @param _alpha The new value for the `alpha` property value. - function changeSubcourtAlpha(uint96 _subcourtID, uint256 _alpha) external onlyByOwner { - courts[_subcourtID].alpha = _alpha; - } - - /// @dev Changes the `feeForJuror` property value of a specified subcourt. - /// @param _subcourtID The ID of the subcourt. - /// @param _feeForJuror The new value for the `feeForJuror` property value. - function changeSubcourtJurorFee(uint96 _subcourtID, uint256 _feeForJuror) external onlyByOwner { - courts[_subcourtID].feeForJuror = _feeForJuror; - } - - /// @dev Changes the `jurorsForCourtJump` property value of a specified subcourt. - /// @param _subcourtID The ID of the subcourt. - /// @param _jurorsForCourtJump The new value for the `jurorsForCourtJump` property value. - function changeSubcourtJurorsForJump(uint96 _subcourtID, uint256 _jurorsForCourtJump) external onlyByOwner { - courts[_subcourtID].jurorsForCourtJump = _jurorsForCourtJump; - } - - /// @dev Changes the `timesPerPeriod` property value of a specified subcourt. - /// @param _subcourtID The ID of the subcourt. - /// @param _timesPerPeriod The new value for the `timesPerPeriod` property value. - function changeSubcourtTimesPerPeriod(uint96 _subcourtID, uint256[4] memory _timesPerPeriod) external onlyByOwner { - courts[_subcourtID].timesPerPeriod = _timesPerPeriod; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Sets the caller's stake in a subcourt. - /// @param _subcourtID The ID of the subcourt. - /// @param _stake The new stake. - function setStake(uint96 _subcourtID, uint128 _stake) external { - require(_setStake(msg.sender, _subcourtID, _stake)); - } - - /// @dev Executes the next delayed set stakes. - /// `O(n)` where `n` is the number of iterations to run. - /// @param _iterations The number of delayed set stakes to execute. - function executeDelayedSetStakes(uint256 _iterations) external onlyDuringPhase(Phase.staking) { - uint256 actualIterations = (nextDelayedSetStake + _iterations) - 1 > lastDelayedSetStake - ? (lastDelayedSetStake - nextDelayedSetStake) + 1 - : _iterations; - uint256 newNextDelayedSetStake = nextDelayedSetStake + actualIterations; - require(newNextDelayedSetStake >= nextDelayedSetStake); - for (uint256 i = nextDelayedSetStake; i < newNextDelayedSetStake; i++) { - DelayedSetStake storage delayedSetStake = delayedSetStakes[i]; - _setStake(delayedSetStake.account, delayedSetStake.subcourtID, delayedSetStake.stake); - delete delayedSetStakes[i]; - } - nextDelayedSetStake = newNextDelayedSetStake; - } - - /// @dev Receive the ruling from foreign gateway which technically is an arbitrator of this contract. - /// @param _disputeID ID of the dispute. - /// @param _ruling Ruling given by V2 court and relayed by foreign gateway. - function rule(uint256 _disputeID, uint256 _ruling) external { - require(_disputeID < totalDisputes, "Dispute ID does not exist."); - require(msg.sender == address(foreignGateway), "Can only be called by gateway"); - - Dispute storage dispute = disputes[_disputeID]; - require(!dispute.ruled, "Ruling already executed."); - dispute.ruled = true; - disputesRuling[_disputeID] = _ruling; - - // Send the relayed ruling to the arbitrable while fully bypassing the dispute flow. - dispute.arbitrated.rule(_disputeID, _ruling); - - emit Ruling(dispute.arbitrated, _disputeID, _ruling); - } - - /// Public - - /// @dev Creates a dispute. Must be called by the arbitrable contract. - /// @param _numberOfChoices Number of choices to choose from in the dispute to be created. - /// @param _extraData Additional info about the dispute to be created. We use it to pass the ID of the subcourt to create the dispute in (first 32 bytes) and the minimum number of jurors required (next 32 bytes). - /// @return disputeID The ID of the created dispute. - function createDispute( - uint256 _numberOfChoices, - bytes memory _extraData - ) public payable override returns (uint256 disputeID) { - require(msg.value >= arbitrationCost(_extraData), "Arbitration fees: not enough"); - - disputeID = totalDisputes++; - Dispute storage dispute = disputes[disputeID]; - dispute.arbitrated = IArbitrableV2(msg.sender); - - // The V2 subcourtID is off by one - (uint96 subcourtID, uint256 minJurors) = extraDataToSubcourtIDAndMinJurors(_extraData); - bytes memory extraDataV2 = abi.encode(uint256(subcourtID + 1), minJurors); - - foreignGateway.createDispute{value: msg.value}(_numberOfChoices, extraDataV2); - emit DisputeCreation(disputeID, IArbitrableV2(msg.sender)); - } - - /// @inheritdoc IArbitratorV2 - function createDispute( - uint256 /*_choices*/, - bytes calldata /*_extraData*/, - IERC20 /*_feeToken*/, - uint256 /*_feeAmount*/ - ) external override returns (uint256) { - revert("Not supported"); - } - - /// @dev DEPRECATED. Called when `_owner` sends ETH to the Wrapped Token contract. - /// @param _owner The address that sent the ETH to create tokens. - /// @return allowed Whether the operation should be allowed or not. - function proxyPayment(address _owner) public payable override returns (bool allowed) { - allowed = false; - } - - /// @dev Notifies the controller about a token transfer allowing the controller to react if desired. - /// @param _from The origin of the transfer. - /// @param _to The destination of the transfer. - /// @param _amount The amount of the transfer. - /// @return allowed Whether the operation should be allowed or not. - function onTransfer(address _from, address _to, uint256 _amount) public override returns (bool allowed) { - if (lockInsolventTransfers) { - // Never block penalties or rewards. - uint256 newBalance = pinakion.balanceOf(_from) - _amount; - if (newBalance < jurors[_from].stakedTokens || newBalance < jurors[_from].lockedTokens) return false; - } - allowed = true; - } - - /// @dev Notifies the controller about an approval allowing the controller to react if desired. - /// @param _owner The address that calls `approve()`. - /// @param _spender The spender in the `approve()` call. - /// @param _amount The amount in the `approve()` call. - /// @return allowed Whether the operation should be allowed or not. - function onApprove(address _owner, address _spender, uint256 _amount) public override returns (bool allowed) { - allowed = true; - } - - // ************************************* // - // * Internal * // - // ************************************* // - - /// @dev Sets the specified juror's stake in a subcourt. - /// `O(n + p * log_k(j))` where - /// `n` is the number of subcourts the juror has staked in, - /// `p` is the depth of the subcourt tree, - /// `k` is the minimum number of children per node of one of these subcourts' sortition sum tree, - /// and `j` is the maximum number of jurors that ever staked in one of these subcourts simultaneously. - /// @param _account The address of the juror. - /// @param _subcourtID The ID of the subcourt. - /// @param _stake The new stake. - /// @return succeeded True if the call succeeded, false otherwise. - function _setStake(address _account, uint96 _subcourtID, uint128 _stake) internal returns (bool succeeded) { - if (!(_subcourtID < courts.length)) return false; - - if (!(_stake == 0 || courts[_subcourtID].minStake <= _stake)) return false; // The juror's stake cannot be lower than the minimum stake for the subcourt. - Juror storage juror = jurors[_account]; - bytes32 stakePathID = accountAndSubcourtIDToStakePathID(_account, _subcourtID); - uint256 currentStake = sortitionSumTrees.stakeOf(bytes32(uint256(_subcourtID)), stakePathID); - if (!(_stake == 0 || currentStake > 0 || juror.subcourtIDs.length < MAX_STAKE_PATHS)) return false; // Maximum stake paths reached. - uint256 newTotalStake = juror.stakedTokens - currentStake + _stake; // Can't overflow because _stake is a uint128. - if (!(_stake == 0 || pinakion.balanceOf(_account) >= newTotalStake)) return false; // The juror's total amount of staked tokens cannot be higher than the juror's balance. - - // Update juror's records. - juror.stakedTokens = newTotalStake; - if (_stake == 0) { - for (uint256 i = 0; i < juror.subcourtIDs.length; i++) - if (juror.subcourtIDs[i] == _subcourtID) { - juror.subcourtIDs[i] = juror.subcourtIDs[juror.subcourtIDs.length - 1]; - juror.subcourtIDs.pop(); - break; - } - } else if (currentStake == 0) juror.subcourtIDs.push(_subcourtID); - - // Update subcourt parents. - bool finished = false; - uint256 currentSubcourtID = _subcourtID; - while (!finished) { - sortitionSumTrees.set(bytes32(currentSubcourtID), _stake, stakePathID); - if (currentSubcourtID == 0) finished = true; - else currentSubcourtID = courts[currentSubcourtID].parent; - } - emit StakeSet(_account, _subcourtID, _stake, newTotalStake); - return true; - } - - /// @dev Gets a subcourt ID and the minimum number of jurors required from a specified extra data bytes array. - /// @param _extraData The extra data bytes array. The first 32 bytes are the subcourt ID and the next 32 bytes are the minimum number of jurors. - /// @return subcourtID The subcourt ID. - /// @return minJurors The minimum number of jurors required. - function extraDataToSubcourtIDAndMinJurors( - bytes memory _extraData - ) internal view returns (uint96 subcourtID, uint256 minJurors) { - if (_extraData.length >= 64) { - assembly { - // solium-disable-line security/no-inline-assembly - subcourtID := mload(add(_extraData, 0x20)) - minJurors := mload(add(_extraData, 0x40)) - } - if (subcourtID >= courts.length) subcourtID = 0; - if (minJurors == 0) minJurors = DEFAULT_NB_OF_JURORS; - } else { - subcourtID = 0; - minJurors = DEFAULT_NB_OF_JURORS; - } - } - - /// @dev Packs an account and a subcourt ID into a stake path ID. - /// @param _account The account to pack. - /// @param _subcourtID The subcourt ID to pack. - /// @return stakePathID The stake path ID. - function accountAndSubcourtIDToStakePathID( - address _account, - uint96 _subcourtID - ) internal pure returns (bytes32 stakePathID) { - assembly { - // solium-disable-line security/no-inline-assembly - let ptr := mload(0x40) - for { - let i := 0x00 - } lt(i, 0x14) { - i := add(i, 0x01) - } { - mstore8(add(ptr, i), byte(add(0x0c, i), _account)) - } - for { - let i := 0x14 - } lt(i, 0x20) { - i := add(i, 0x01) - } { - mstore8(add(ptr, i), byte(i, _subcourtID)) - } - stakePathID := mload(ptr) - } - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @inheritdoc IArbitratorV2 - function arbitrationCost(bytes memory _extraData) public view override returns (uint256 cost) { - cost = foreignGateway.arbitrationCost(_extraData); - } - - /// @inheritdoc IArbitratorV2 - function arbitrationCost( - bytes calldata /*_extraData*/, - IERC20 /*_feeToken*/ - ) public pure override returns (uint256 /*cost*/) { - revert("Not supported"); - } - - /// @dev Gets the current ruling of a specified dispute. - /// @param _disputeID The ID of the dispute. - /// @return ruling The current ruling. - /// @return tied Whether it's a tie or not. - /// @return overridden Whether the ruling was overridden by appeal funding or not. - function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool /*overridden*/) { - Dispute storage dispute = disputes[_disputeID]; - if (dispute.voteCounters.length == 0) { - ruling = disputesRuling[_disputeID]; - } else { - tied = dispute.voteCounters[dispute.voteCounters.length - 1].tied; - ruling = tied ? 0 : dispute.voteCounters[dispute.voteCounters.length - 1].winningChoice; - } - } - - /// @dev Gets a specified subcourt's non primitive properties. - /// @param _subcourtID The ID of the subcourt. - /// @return children The subcourt's child court list. - /// @return timesPerPeriod The subcourt's time per period. - function getSubcourt( - uint96 _subcourtID - ) external view returns (uint256[] memory children, uint256[4] memory timesPerPeriod) { - Court storage subcourt = courts[_subcourtID]; - children = subcourt.children; - timesPerPeriod = subcourt.timesPerPeriod; - } - - /// @dev Gets a specified vote for a specified appeal in a specified dispute. - /// @param _disputeID The ID of the dispute. - /// @param _appeal The appeal. - /// @param _voteID The ID of the vote. - /// @return account The account for vote. - /// @return commit The commit for vote. - /// @return choice The choice for vote. - /// @return voted True if the account voted, False otherwise. - function getVote( - uint256 _disputeID, - uint256 _appeal, - uint256 _voteID - ) external view returns (address account, bytes32 commit, uint256 choice, bool voted) { - Vote storage vote = disputes[_disputeID].votes[_appeal][_voteID]; - account = vote.account; - commit = vote.commit; - choice = vote.choice; - voted = vote.voted; - } - - /// @dev Gets the vote counter for a specified appeal in a specified dispute. - /// Note: This function is only to be used by the interface and it won't work if the number of choices is too high. - /// @param _disputeID The ID of the dispute. - /// @param _appeal The appeal. - /// @return winningChoice The winning choice. - /// @return counts The count. - /// @return tied Whether the vote tied. - /// `O(n)` where - /// `n` is the number of choices of the dispute. - function getVoteCounter( - uint256 _disputeID, - uint256 _appeal - ) external view returns (uint256 winningChoice, uint256[] memory counts, bool tied) { - Dispute storage dispute = disputes[_disputeID]; - VoteCounter storage voteCounter = dispute.voteCounters[_appeal]; - winningChoice = voteCounter.winningChoice; - counts = new uint256[](dispute.numberOfChoices + 1); - for (uint256 i = 0; i <= dispute.numberOfChoices; i++) counts[i] = voteCounter.counts[i]; - tied = voteCounter.tied; - } - - /// @dev Gets a specified dispute's non primitive properties. - /// @param _disputeID The ID of the dispute. - /// @return votesLengths The dispute's vote length. - /// @return tokensAtStakePerJuror The dispute's required tokens at stake per Juror. - /// @return totalFeesForJurors The dispute's total fees for Jurors. - /// @return votesInEachRound The dispute's counter of votes made in each round. - /// @return repartitionsInEachRound The dispute's counter of vote reward repartitions made in each round. - /// @return penaltiesInEachRound The dispute's amount of tokens collected from penalties in each round. - /// `O(a)` where - /// `a` is the number of appeals of the dispute. - function getDispute( - uint256 _disputeID - ) - external - view - returns ( - uint256[] memory votesLengths, - uint256[] memory tokensAtStakePerJuror, - uint256[] memory totalFeesForJurors, - uint256[] memory votesInEachRound, - uint256[] memory repartitionsInEachRound, - uint256[] memory penaltiesInEachRound - ) - { - Dispute storage dispute = disputes[_disputeID]; - votesLengths = new uint256[](dispute.votes.length); - for (uint256 i = 0; i < dispute.votes.length; i++) votesLengths[i] = dispute.votes[i].length; - tokensAtStakePerJuror = dispute.tokensAtStakePerJuror; - totalFeesForJurors = dispute.totalFeesForJurors; - votesInEachRound = dispute.votesInEachRound; - repartitionsInEachRound = dispute.repartitionsInEachRound; - penaltiesInEachRound = dispute.penaltiesInEachRound; - } - - /// @dev Gets a specified juror's non primitive properties. - /// @param _account The address of the juror. - /// @return subcourtIDs The juror's IDs of subcourts where the juror has stake path. - function getJuror(address _account) external view returns (uint96[] memory subcourtIDs) { - Juror storage juror = jurors[_account]; - subcourtIDs = juror.subcourtIDs; - } - - /// @dev Gets the stake of a specified juror in a specified subcourt. - /// @param _account The address of the juror. - /// @param _subcourtID The ID of the subcourt. - /// @return stake The stake. - function stakeOf(address _account, uint96 _subcourtID) external view returns (uint256 stake) { - return - sortitionSumTrees.stakeOf( - bytes32(uint256(_subcourtID)), - accountAndSubcourtIDToStakePathID(_account, _subcourtID) - ); - } -} diff --git a/contracts/src/kleros-v1/kleros-liquid/KlerosLiquidToV2Governor.sol b/contracts/src/kleros-v1/kleros-liquid/KlerosLiquidToV2Governor.sol deleted file mode 100644 index def339931..000000000 --- a/contracts/src/kleros-v1/kleros-liquid/KlerosLiquidToV2Governor.sol +++ /dev/null @@ -1,182 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "../interfaces/IKlerosLiquid.sol"; -import "../interfaces/ITokenController.sol"; -import {IArbitratorV2, IArbitrableV2} from "../../arbitration/interfaces/IArbitratorV2.sol"; - -interface IPinakion { - function balanceOf(address who) external view returns (uint256); -} - -contract KlerosLiquidToV2Governor is IArbitrableV2, ITokenController { - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - struct DisputeData { - uint256 klerosLiquidDisputeID; - bool ruled; - } - - // ************************************* // - // * Storage * // - // ************************************* // - - IArbitratorV2 public immutable foreignGateway; - IKlerosLiquid public immutable klerosLiquid; - address public owner; - mapping(uint256 disputeId => uint256 gatewayDisputeId) public klerosLiquidDisputeIDtoGatewayDisputeID; - mapping(uint256 gatewayDisputeId => DisputeData) public disputes; // disputes[gatewayDisputeID] - mapping(address account => uint256 tokenAmount) public frozenTokens; // frozenTokens[account] locked token which shouldn't have been blocked. - mapping(uint256 disputeId => mapping(uint256 roundId => bool)) public isDisputeNotified; // isDisputeNotified[disputeID][roundID] used to track the notification of frozen tokens. - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - require(owner == msg.sender); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Constructor. Before this contract is made the new owner of KlerosLiquid, the evidence period of all subcourts has to be set to uint(-1). - /// @param _klerosLiquid The trusted arbitrator to resolve potential disputes. - /// @param _owner The trusted owner of the contract. - /// @param _foreignGateway The trusted gateway that acts as an arbitrator, relaying disputes to v2. - constructor(IKlerosLiquid _klerosLiquid, address _owner, IArbitratorV2 _foreignGateway) { - klerosLiquid = _klerosLiquid; - owner = _owner; - foreignGateway = _foreignGateway; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /// @dev Lets the owner call anything on behalf of the contract. - /// @param _destination The destination of the call. - /// @param _amount The value sent with the call. - /// @param _data The data sent with the call. - function executeOwnerProposal(address _destination, uint256 _amount, bytes calldata _data) external onlyByOwner { - (bool success, ) = _destination.call{value: _amount}(_data); // solium-disable-line security/no-call-value - require(success, "Call execution failed."); - } - - /// @dev Changes the `owner` storage variable. - /// @param _owner The new value for the `owner` storage variable. - function changeOwner(address _owner) external onlyByOwner { - owner = _owner; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Relays disputes from KlerosLiquid to Kleros v2. Only disputes in the evidence period of the initial round can be realyed. - /// @param _disputeID The ID of the dispute as defined in KlerosLiquid. - function relayDispute(uint256 _disputeID) external { - require(klerosLiquidDisputeIDtoGatewayDisputeID[_disputeID] == 0, "Dispute already relayed"); - IKlerosLiquid.Dispute memory KlerosLiquidDispute = klerosLiquid.disputes(_disputeID); - (uint256[] memory votesLengths, , uint256[] memory totalFeesForJurors, , , ) = klerosLiquid.getDispute( - _disputeID - ); - - require(KlerosLiquidDispute.period == IKlerosLiquid.Period.evidence, "Invalid dispute period."); - require(votesLengths.length == 1, "Cannot relay appeals."); - - klerosLiquid.executeOwnerProposal(address(this), totalFeesForJurors[0], ""); - - uint256 minJurors = votesLengths[0]; - bytes memory extraData = abi.encode(KlerosLiquidDispute.subcourtID, minJurors); - uint256 arbitrationCost = foreignGateway.arbitrationCost(extraData); - require(totalFeesForJurors[0] >= arbitrationCost, "Fees not high enough."); // If this doesn't hold at some point, it could be a big issue. - uint256 gatewayDisputeID = foreignGateway.createDispute{value: arbitrationCost}( - KlerosLiquidDispute.numberOfChoices, - extraData - ); - klerosLiquidDisputeIDtoGatewayDisputeID[_disputeID] = gatewayDisputeID; - require(gatewayDisputeID != 0, "ID must be greater than 0."); - - DisputeData storage dispute = disputes[gatewayDisputeID]; - dispute.klerosLiquidDisputeID = _disputeID; - } - - /// @inheritdoc IArbitrableV2 - function rule(uint256 _disputeID, uint256 _ruling) public override { - require(msg.sender == address(foreignGateway), "Not the arbitrator."); - DisputeData storage dispute = disputes[_disputeID]; - require(dispute.klerosLiquidDisputeID != 0, "Dispute does not exist."); - require(!dispute.ruled, "Dispute already ruled."); - - dispute.ruled = true; - - emit Ruling(foreignGateway, _disputeID, _ruling); - - IKlerosLiquid.Dispute memory klerosLiquidDispute = klerosLiquid.disputes(dispute.klerosLiquidDisputeID); - - bytes memory data = abi.encodeCall(IArbitrableV2.rule, (dispute.klerosLiquidDisputeID, _ruling)); - klerosLiquid.executeOwnerProposal(klerosLiquidDispute.arbitrated, 0, data); - } - - /// @dev Registers jurors' tokens which where locked due to relaying a given dispute. These tokens don't count as locked. - /// @param _disputeID The ID of the dispute as defined in KlerosLiquid. - function notifyFrozenTokens(uint256 _disputeID) external { - require(klerosLiquidDisputeIDtoGatewayDisputeID[_disputeID] != 0, "Dispute not relayed."); - (uint256[] memory votesLengths, uint256[] memory tokensAtStakePerJuror, , , , ) = klerosLiquid.getDispute( - _disputeID - ); - - uint256 minStakingTime = klerosLiquid.minStakingTime(); - IKlerosLiquid.Phase phase = klerosLiquid.phase(); - bool isDrawingForbidden = phase == IKlerosLiquid.Phase.staking && minStakingTime == type(uint256).max; - - for (uint256 round = 0; round < votesLengths.length; round++) { - if (isDisputeNotified[_disputeID][round]) continue; - - for (uint256 voteID = 0; voteID < votesLengths[round]; voteID++) { - (address account, , , ) = klerosLiquid.getVote(_disputeID, round, voteID); - require(account != address(0x0) || isDrawingForbidden, "Juror not drawn yet."); - if (account != address(0x0)) frozenTokens[account] += tokensAtStakePerJuror[round]; - } - isDisputeNotified[_disputeID][round] = true; - } - } - - /// @inheritdoc ITokenController - function proxyPayment(address /*_owner*/) external payable override returns (bool allowed) { - allowed = false; - } - - /// @inheritdoc ITokenController - function onTransfer(address _from, address /*_to*/, uint256 _amount) external view override returns (bool allowed) { - if (klerosLiquid.lockInsolventTransfers()) { - // Never block penalties or rewards. - IPinakion pinakion = IPinakion(klerosLiquid.pinakion()); - uint256 newBalance = pinakion.balanceOf(_from) - _amount; // Overflow already checked in the Minime token contract. - - IKlerosLiquid.Juror memory juror = klerosLiquid.jurors(_from); - - // frozenTokens <= lockedTokens always. - if (newBalance < juror.stakedTokens || newBalance < juror.lockedTokens - frozenTokens[_from]) return false; - } - allowed = true; - } - - /// @inheritdoc ITokenController - function onApprove( - address /*_owner*/, - address /*_spender*/, - uint256 /*_amount*/ - ) external pure override returns (bool allowed) { - allowed = true; - } - - /// @dev This contract should be able to receive arbitration fees from KlerosLiquid. - receive() external payable {} -} diff --git a/contracts/src/kleros-v1/libraries/SortitionSumTreeFactory.sol b/contracts/src/kleros-v1/libraries/SortitionSumTreeFactory.sol deleted file mode 100644 index 29ebd1ec4..000000000 --- a/contracts/src/kleros-v1/libraries/SortitionSumTreeFactory.sol +++ /dev/null @@ -1,230 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -/// @title SortitionSumTreeFactory -/// @author Enrique Piqueras - -/// @dev A factory of trees that keep track of staked values for sortition. -library SortitionSumTreeFactory { - /// Structs - - struct SortitionSumTree { - uint K; // The maximum number of childs per node. - // We use this to keep track of vacant positions in the tree after removing a leaf. This is for keeping the tree as balanced as possible without spending gas on moving nodes around. - uint[] stack; - uint[] nodes; - // Two-way mapping of IDs to node indexes. Note that node index 0 is reserved for the root node, and means the ID does not have a node. - mapping(bytes32 id => uint index) IDsToNodeIndexes; - mapping(uint index => bytes32 id) nodeIndexesToIDs; - } - - /// Storage - - struct SortitionSumTrees { - mapping(bytes32 => SortitionSumTree) sortitionSumTrees; - } - - /// Public - - /// @dev Create a sortition sum tree at the specified key. - /// @param _key The key of the new tree. - /// @param _K The number of children each node in the tree should have. - function createTree(SortitionSumTrees storage self, bytes32 _key, uint _K) public { - SortitionSumTree storage tree = self.sortitionSumTrees[_key]; - require(tree.K == 0, "Tree already exists."); - require(_K > 1, "K must be greater than one."); - tree.K = _K; - tree.nodes.push(0); - } - - /// @dev Set a value of a tree. - /// @param _key The key of the tree. - /// @param _value The new value. - /// @param _ID The ID of the value. - /// `O(log_k(n))` where - /// `k` is the maximum number of childs per node in the tree, - /// and `n` is the maximum number of nodes ever appended. - function set(SortitionSumTrees storage self, bytes32 _key, uint _value, bytes32 _ID) public { - SortitionSumTree storage tree = self.sortitionSumTrees[_key]; - uint treeIndex = tree.IDsToNodeIndexes[_ID]; - - if (treeIndex == 0) { - // No existing node. - if (_value != 0) { - // Non zero value. - // Append. - // Add node. - if (tree.stack.length == 0) { - // No vacant spots. - // Get the index and append the value. - treeIndex = tree.nodes.length; - tree.nodes.push(_value); - - // Potentially append a new node and make the parent a sum node. - if (treeIndex != 1 && (treeIndex - 1) % tree.K == 0) { - // Is first child. - uint parentIndex = treeIndex / tree.K; - bytes32 parentID = tree.nodeIndexesToIDs[parentIndex]; - uint newIndex = treeIndex + 1; - tree.nodes.push(tree.nodes[parentIndex]); - delete tree.nodeIndexesToIDs[parentIndex]; - tree.IDsToNodeIndexes[parentID] = newIndex; - tree.nodeIndexesToIDs[newIndex] = parentID; - } - } else { - // Some vacant spot. - // Pop the stack and append the value. - treeIndex = tree.stack[tree.stack.length - 1]; - tree.stack.pop(); - tree.nodes[treeIndex] = _value; - } - - // Add label. - tree.IDsToNodeIndexes[_ID] = treeIndex; - tree.nodeIndexesToIDs[treeIndex] = _ID; - - updateParents(self, _key, treeIndex, true, _value); - } - } else { - // Existing node. - if (_value == 0) { - // Zero value. - // Remove. - // Remember value and set to 0. - uint value = tree.nodes[treeIndex]; - tree.nodes[treeIndex] = 0; - - // Push to stack. - tree.stack.push(treeIndex); - - // Clear label. - delete tree.IDsToNodeIndexes[_ID]; - delete tree.nodeIndexesToIDs[treeIndex]; - - updateParents(self, _key, treeIndex, false, value); - } else if (_value != tree.nodes[treeIndex]) { - // New, non zero value. - // Set. - bool plusOrMinus = tree.nodes[treeIndex] <= _value; - uint plusOrMinusValue = plusOrMinus ? _value - tree.nodes[treeIndex] : tree.nodes[treeIndex] - _value; - tree.nodes[treeIndex] = _value; - - updateParents(self, _key, treeIndex, plusOrMinus, plusOrMinusValue); - } - } - } - - /// Public Views - - /// @dev Query the leaves of a tree. Note that if `startIndex == 0`, the tree is empty and the root node will be returned. - /// @param _key The key of the tree to get the leaves from. - /// @param _cursor The pagination cursor. - /// @param _count The number of items to return. - /// @return startIndex The index at which leaves start. - /// @return values The values of the returned leaves. - /// @return hasMore Whether there are more for pagination. - /// `O(n)` where - /// `n` is the maximum number of nodes ever appended. - function queryLeafs( - SortitionSumTrees storage self, - bytes32 _key, - uint _cursor, - uint _count - ) public view returns (uint startIndex, uint[] memory values, bool hasMore) { - SortitionSumTree storage tree = self.sortitionSumTrees[_key]; - - // Find the start index. - for (uint i = 0; i < tree.nodes.length; i++) { - if ((tree.K * i) + 1 >= tree.nodes.length) { - startIndex = i; - break; - } - } - - // Get the values. - uint loopStartIndex = startIndex + _cursor; - values = new uint[](loopStartIndex + _count > tree.nodes.length ? tree.nodes.length - loopStartIndex : _count); - uint valuesIndex = 0; - for (uint j = loopStartIndex; j < tree.nodes.length; j++) { - if (valuesIndex < _count) { - values[valuesIndex] = tree.nodes[j]; - valuesIndex++; - } else { - hasMore = true; - break; - } - } - } - - /// @dev Draw an ID from a tree using a number. Note that this function reverts if the sum of all values in the tree is 0. - /// @param _key The key of the tree. - /// @param _drawnNumber The drawn number. - /// @return ID The drawn ID. - /// `O(k * log_k(n))` where - /// `k` is the maximum number of childs per node in the tree, - /// and `n` is the maximum number of nodes ever appended. - function draw(SortitionSumTrees storage self, bytes32 _key, uint _drawnNumber) public view returns (bytes32 ID) { - SortitionSumTree storage tree = self.sortitionSumTrees[_key]; - uint treeIndex = 0; - uint currentDrawnNumber = _drawnNumber % tree.nodes[0]; - - while ( - (tree.K * treeIndex) + 1 < tree.nodes.length // While it still has children. - ) - for (uint i = 1; i <= tree.K; i++) { - // Loop over children. - uint nodeIndex = (tree.K * treeIndex) + i; - uint nodeValue = tree.nodes[nodeIndex]; - - if (currentDrawnNumber >= nodeValue) - currentDrawnNumber -= nodeValue; // Go to the next child. - else { - // Pick this child. - treeIndex = nodeIndex; - break; - } - } - - ID = tree.nodeIndexesToIDs[treeIndex]; - } - - /// @dev Gets a specified ID's associated value. - /// @param _key The key of the tree. - /// @param _ID The ID of the value. - /// @return value The associated value. - function stakeOf(SortitionSumTrees storage self, bytes32 _key, bytes32 _ID) public view returns (uint value) { - SortitionSumTree storage tree = self.sortitionSumTrees[_key]; - uint treeIndex = tree.IDsToNodeIndexes[_ID]; - - if (treeIndex == 0) value = 0; - else value = tree.nodes[treeIndex]; - } - - /// Private - - /// @dev Update all the parents of a node. - /// @param _key The key of the tree to update. - /// @param _treeIndex The index of the node to start from. - /// @param _plusOrMinus Wether to add (true) or substract (false). - /// @param _value The value to add or substract. - /// `O(log_k(n))` where - /// `k` is the maximum number of childs per node in the tree, - /// and `n` is the maximum number of nodes ever appended. - function updateParents( - SortitionSumTrees storage self, - bytes32 _key, - uint _treeIndex, - bool _plusOrMinus, - uint _value - ) private { - SortitionSumTree storage tree = self.sortitionSumTrees[_key]; - - uint parentIndex = _treeIndex; - while (parentIndex != 0) { - parentIndex = (parentIndex - 1) / tree.K; - tree.nodes[parentIndex] = _plusOrMinus - ? tree.nodes[parentIndex] + _value - : tree.nodes[parentIndex] - _value; - } - } -} diff --git a/contracts/src/libraries/Constants.sol b/contracts/src/libraries/Constants.sol deleted file mode 100644 index 1f0132668..000000000 --- a/contracts/src/libraries/Constants.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; - -// Courts -uint96 constant FORKING_COURT = 0; // Index of the forking court. -uint96 constant GENERAL_COURT = 1; // Index of the default (general) court. - -// Dispute Kits -uint256 constant NULL_DISPUTE_KIT = 0; // Null pattern to indicate a top-level DK which has no parent. -uint256 constant DISPUTE_KIT_CLASSIC = 1; // Index of the default DK. 0 index is skipped. - -// Sortition Module -uint256 constant MAX_STAKE_PATHS = 4; // The maximum number of stake paths a juror can have. -uint256 constant DEFAULT_K = 6; // Default number of children per node. - -// Defaults -uint256 constant DEFAULT_NB_OF_JURORS = 3; // The default number of jurors in a dispute. -IERC20 constant NATIVE_CURRENCY = IERC20(address(0)); // The native currency, such as ETH on Arbitrum, Optimism and Ethereum L1. - -// Units -uint256 constant ONE_BASIS_POINT = 10000; - -enum OnError { - Revert, - Return -} - -enum StakingResult { - Successful, - Delayed, - StakingTransferFailed, - UnstakingTransferFailed, - CannotStakeInMoreCourts, - CannotStakeInThisCourt, - CannotStakeLessThanMinStake, - CannotStakeMoreThanMaxStakePerJuror, - CannotStakeMoreThanMaxTotalStaked, - CannotStakeZeroWhenNoStake -} diff --git a/contracts/src/libraries/SafeERC20.sol b/contracts/src/libraries/SafeERC20.sol deleted file mode 100644 index 35f538350..000000000 --- a/contracts/src/libraries/SafeERC20.sol +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-License-Identifier: MIT -// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a7a94c77463acea95d979aae1580fb0ddc3b6a1e/contracts/token/ERC20/utils/SafeERC20.sol - -pragma solidity ^0.8.24; - -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; - -/// @title SafeERC20 -/// @dev Wrappers around ERC20 operations that throw on failure (when the token -/// contract returns false). Tokens that return no value (and instead revert or -/// throw on failure) are also supported, non-reverting calls are assumed to be -/// successful. -/// To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, -/// which allows you to call the safe operations as `token.safeTransfer(...)`, etc. -library SafeERC20 { - /// @dev Increases the allowance granted to `spender` by the caller. - /// @param _token Token to transfer. - /// @param _spender The address which will spend the funds. - /// @param _addedValue The amount of tokens to increase the allowance by. - function increaseAllowance(IERC20 _token, address _spender, uint256 _addedValue) internal returns (bool) { - _token.approve(_spender, _token.allowance(address(this), _spender) + _addedValue); - return true; - } - - /// @dev Calls transfer() without reverting. - /// @param _token Token to transfer. - /// @param _to Recipient address. - /// @param _value Amount transferred. - /// @return Whether transfer succeeded or not. - function safeTransfer(IERC20 _token, address _to, uint256 _value) internal returns (bool) { - (bool success, bytes memory data) = address(_token).call(abi.encodeCall(IERC20.transfer, (_to, _value))); - return (success && (data.length == 0 || abi.decode(data, (bool)))); - } - - /// @dev Calls transferFrom() without reverting. - /// @param _token Token to transfer. - /// @param _from Sender address. - /// @param _to Recipient address. - /// @param _value Amount transferred. - /// @return Whether transfer succeeded or not. - function safeTransferFrom(IERC20 _token, address _from, address _to, uint256 _value) internal returns (bool) { - (bool success, bytes memory data) = address(_token).call( - abi.encodeCall(IERC20.transferFrom, (_from, _to, _value)) - ); - return (success && (data.length == 0 || abi.decode(data, (bool)))); - } -} diff --git a/contracts/src/libraries/SafeSend.sol b/contracts/src/libraries/SafeSend.sol deleted file mode 100644 index fcd02d815..000000000 --- a/contracts/src/libraries/SafeSend.sol +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @authors: [@andreimvp] - * @reviewers: [@divyangchauhan, @wadader, @fcanela, @unknownunknown1] - * @auditors: [] - * @bounties: [] - * SPDX-License-Identifier: MIT - */ - -pragma solidity ^0.8.24; - -interface WethLike { - function deposit() external payable; - - function transfer(address dst, uint256 wad) external; -} - -library SafeSend { - function safeSend(address payable _to, uint256 _value, address _wethLike) internal { - if (_to.send(_value)) return; - - WethLike(_wethLike).deposit{value: _value}(); - WethLike(_wethLike).transfer(_to, _value); - } -} diff --git a/contracts/src/libraries/SortitionTrees.sol b/contracts/src/libraries/SortitionTrees.sol deleted file mode 100644 index f8d9706fe..000000000 --- a/contracts/src/libraries/SortitionTrees.sol +++ /dev/null @@ -1,232 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -type TreeKey is bytes32; -type CourtID is uint96; - -using {SortitionTrees.toTreeKey} for CourtID global; - -library SortitionTrees { - // ************************************* // - // * Enums / Structs * // - // ************************************* // - - struct Tree { - uint256 K; // The maximum number of children per node. - uint256[] stack; // We use this to keep track of vacant positions in the tree after removing a leaf. This is for keeping the tree as balanced as possible without spending gas on moving nodes around. - uint256[] nodes; // The tree nodes. - // Two-way mapping of IDs to node indexes. Note that node index 0 is reserved for the root node, and means the ID does not have a node. - mapping(bytes32 stakePathID => uint256 nodeIndex) IDsToNodeIndexes; - mapping(uint256 nodeIndex => bytes32 stakePathID) nodeIndexesToIDs; - } - - function toTreeKey(CourtID _courtID) internal pure returns (TreeKey) { - return TreeKey.wrap(bytes32(uint256(CourtID.unwrap(_courtID)))); - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Create a sortition sum tree at the specified key. - /// @param _trees The mapping of sortition sum trees. - /// @param _key The key of the new tree. - /// @param _k The maximum number of children per node. - function createTree(mapping(TreeKey key => Tree) storage _trees, TreeKey _key, uint256 _k) internal { - Tree storage tree = _trees[_key]; - if (tree.K != 0) revert TreeAlreadyExists(); - if (_k <= 1) revert KMustBeGreaterThanOne(); - tree.K = _k; - tree.nodes.push(0); - } - - /// @dev Draw an ID from a tree using a number. - /// Note that this function reverts if the sum of all values in the tree is 0. - /// @param _tree The sortition sum tree. - /// @param _coreDisputeID Index of the dispute in Kleros Core. - /// @param _nonce Nonce to hash with random number. - /// @return drawnAddress The drawn address. - /// `O(k * log_k(n))` where - /// `k` is the maximum number of children per node in the tree, - /// and `n` is the maximum number of nodes ever appended. - function draw( - Tree storage _tree, - uint256 _coreDisputeID, - uint256 _nonce, - uint256 _randomNumber - ) internal view returns (address drawnAddress, uint96 fromSubcourtID) { - if (_tree.nodes[0] == 0) { - return (address(0), 0); // No jurors staked. - } - - uint256 currentDrawnNumber = uint256(keccak256(abi.encodePacked(_randomNumber, _coreDisputeID, _nonce))) % - _tree.nodes[0]; - - // While it still has children - uint256 treeIndex = 0; - while ((_tree.K * treeIndex) + 1 < _tree.nodes.length) { - for (uint256 i = 1; i <= _tree.K; i++) { - // Loop over children. - uint256 nodeIndex = (_tree.K * treeIndex) + i; - uint256 nodeValue = _tree.nodes[nodeIndex]; - - if (currentDrawnNumber >= nodeValue) { - // Go to the next child. - currentDrawnNumber -= nodeValue; - } else { - // Pick this child. - treeIndex = nodeIndex; - break; - } - } - } - - bytes32 stakePathID = _tree.nodeIndexesToIDs[treeIndex]; - (drawnAddress, fromSubcourtID) = toAccountAndCourtID(stakePathID); - } - - /// @dev Set a value in a tree. - /// @param _tree The sortition sum tree. - /// @param _value The new value. - /// @param _stakePathID The ID of the value. - /// `O(log_k(n))` where - /// `k` is the maximum number of children per node in the tree, - /// and `n` is the maximum number of nodes ever appended. - function set(Tree storage _tree, uint256 _value, bytes32 _stakePathID) internal { - uint256 treeIndex = _tree.IDsToNodeIndexes[_stakePathID]; - - if (treeIndex == 0) { - // No existing node. - if (_value != 0) { - // Non zero value. - // Append. - // Add node. - if (_tree.stack.length == 0) { - // No vacant spots. - // Get the index and append the value. - treeIndex = _tree.nodes.length; - _tree.nodes.push(_value); - - // Potentially append a new node and make the parent a sum node. - if (treeIndex != 1 && (treeIndex - 1) % _tree.K == 0) { - // Is first child. - uint256 parentIndex = treeIndex / _tree.K; - bytes32 parentID = _tree.nodeIndexesToIDs[parentIndex]; - uint256 newIndex = treeIndex + 1; - _tree.nodes.push(_tree.nodes[parentIndex]); - delete _tree.nodeIndexesToIDs[parentIndex]; - _tree.IDsToNodeIndexes[parentID] = newIndex; - _tree.nodeIndexesToIDs[newIndex] = parentID; - } - } else { - // Some vacant spot. - // Pop the stack and append the value. - treeIndex = _tree.stack[_tree.stack.length - 1]; - _tree.stack.pop(); - _tree.nodes[treeIndex] = _value; - } - - // Add label. - _tree.IDsToNodeIndexes[_stakePathID] = treeIndex; - _tree.nodeIndexesToIDs[treeIndex] = _stakePathID; - - updateParents(_tree, treeIndex, true, _value); - } - } else { - // Existing node. - if (_value == 0) { - // Zero value. - // Remove. - // Remember value and set to 0. - uint256 value = _tree.nodes[treeIndex]; - _tree.nodes[treeIndex] = 0; - - // Push to stack. - _tree.stack.push(treeIndex); - - // Clear label. - delete _tree.IDsToNodeIndexes[_stakePathID]; - delete _tree.nodeIndexesToIDs[treeIndex]; - - updateParents(_tree, treeIndex, false, value); - } else if (_value != _tree.nodes[treeIndex]) { - // New, non zero value. - // Set. - bool plusOrMinus = _tree.nodes[treeIndex] <= _value; - uint256 plusOrMinusValue = plusOrMinus - ? _value - _tree.nodes[treeIndex] - : _tree.nodes[treeIndex] - _value; - _tree.nodes[treeIndex] = _value; - - updateParents(_tree, treeIndex, plusOrMinus, plusOrMinusValue); - } - } - } - - /// @dev Update all the parents of a node. - /// @param _tree The sortition sum tree. - /// @param _treeIndex The index of the node to start from. - /// @param _plusOrMinus Whether to add (true) or substract (false). - /// @param _value The value to add or substract. - /// `O(log_k(n))` where - /// `k` is the maximum number of children per node in the tree, - /// and `n` is the maximum number of nodes ever appended. - function updateParents(Tree storage _tree, uint256 _treeIndex, bool _plusOrMinus, uint256 _value) private { - uint256 parentIndex = _treeIndex; - while (parentIndex != 0) { - parentIndex = (parentIndex - 1) / _tree.K; - _tree.nodes[parentIndex] = _plusOrMinus - ? _tree.nodes[parentIndex] + _value - : _tree.nodes[parentIndex] - _value; - } - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Get the stake of a juror in a court. - /// @param _tree The sortition sum tree. - /// @param _stakePathID The stake path ID, corresponding to a juror. - /// @return The stake of the juror in the court. - function stakeOf(Tree storage _tree, bytes32 _stakePathID) internal view returns (uint256) { - uint256 treeIndex = _tree.IDsToNodeIndexes[_stakePathID]; - if (treeIndex == 0) { - return 0; - } - return _tree.nodes[treeIndex]; - } - - /// @dev Packs an account and a court ID into a stake path ID: [20 bytes of address][12 bytes of courtID] = 32 bytes total. - /// @param _account The address of the juror to pack. - /// @param _courtID The court ID to pack. - /// @return stakePathID The stake path ID. - function toStakePathID(address _account, uint96 _courtID) internal pure returns (bytes32 stakePathID) { - assembly { - // solium-disable-line security/no-inline-assembly - // Pack address (20 bytes) and courtID (12 bytes) into a single bytes32 - stakePathID := or(shl(96, _account), _courtID) - } - } - - /// @dev Retrieves both juror's address and court ID from the stake path ID. - /// @param _stakePathID The stake path ID to unpack. - /// @return account The account. - /// @return courtID The court ID. - function toAccountAndCourtID(bytes32 _stakePathID) internal pure returns (address account, uint96 courtID) { - assembly { - // solium-disable-line security/no-inline-assembly - // Unpack address (first 20 bytes) and courtID (last 12 bytes) from the stake path ID - account := shr(96, _stakePathID) // Right shift by 96 bits to get the address - courtID := and(_stakePathID, 0xffffffffffffffffffffffff) // Mask the lower 96 bits to get the court ID - } - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error TreeAlreadyExists(); - error KMustBeGreaterThanOne(); -} diff --git a/contracts/src/proxy/Initializable.sol b/contracts/src/proxy/Initializable.sol deleted file mode 100644 index 7bdf08eb4..000000000 --- a/contracts/src/proxy/Initializable.sol +++ /dev/null @@ -1,215 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) - -pragma solidity ^0.8.24; - -/** - * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed - * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an - * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer - * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. - * - * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be - * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in - * case an upgrade adds a module that needs to be initialized. - * - * For example: - * - * ```solidity - * contract MyToken is ERC20Upgradeable { - * function initialize() initializer public { - * __ERC20_init("MyToken", "MTK"); - * } - * } - * - * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { - * function initializeV2() reinitializer(2) public { - * __ERC20Permit_init("MyToken"); - * } - * } - * ``` - * - * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as - * possible by providing the encoded function call as the `_data` argument to the proxy constructor - * - * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure - * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. - * - * [CAUTION] - * ==== - * Avoid leaving a contract uninitialized. - * - * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation - * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke - * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: - * - * ``` - * /// @custom:oz-upgrades-unsafe-allow constructor - * constructor() { - * _disableInitializers(); - * } - * ``` - */ -abstract contract Initializable { - /** - * @dev Storage of the initializable contract. - * - * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions - * when using with upgradeable contracts. - * - * @custom:storage-location erc7201:openzeppelin.storage.Initializable - */ - struct InitializableStorage { - /** - * @dev Indicates that the contract has been initialized. - */ - uint64 _initialized; - /** - * @dev Indicates that the contract is in the process of being initialized. - */ - bool _initializing; - } - - // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) - bytes32 private constant _INITIALIZABLE_STORAGE = - 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e; - - /** - * @dev The contract is already initialized. - */ - error AlreadyInitialized(); - - /** - * @dev The contract is not initializing. - */ - error NotInitializing(); - - /** - * @dev Triggered when the contract has been initialized or reinitialized. - */ - event Initialized(uint64 version); - - /** - * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, - * `onlyInitializing` functions can be used to initialize parent contracts. - * - * Similar to `initializer()`, except that functions marked with `initializer` can be nested in the context of a - * constructor. - * - * Emits an {Initialized} event. - */ - modifier initializer() { - // solhint-disable-next-line var-name-mixedcase - InitializableStorage storage $ = _getInitializableStorage(); - - bool isTopLevelCall = !$._initializing; - uint64 initialized = $._initialized; - if (!(isTopLevelCall && initialized < 1) && !(address(this).code.length == 0 && initialized == 1)) { - revert AlreadyInitialized(); - } - $._initialized = 1; - if (isTopLevelCall) { - $._initializing = true; - } - _; - if (isTopLevelCall) { - $._initializing = false; - emit Initialized(1); - } - } - - /** - * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the - * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be - * used to initialize parent contracts. - * - * A reinitializer may be used after the original initialization step. This is essential to configure modules that - * are added through upgrades and that require initialization. - * - * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` - * cannot be nested. If one is invoked in the context of another, execution will revert. - * - * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in - * a contract, executing them in the right order is up to the developer or operator. - * - * WARNING: setting the version to 255 will prevent any future reinitialization. - * - * Emits an {Initialized} event. - */ - modifier reinitializer(uint64 version) { - // solhint-disable-next-line var-name-mixedcase - InitializableStorage storage $ = _getInitializableStorage(); - - if ($._initializing || $._initialized >= version) { - revert AlreadyInitialized(); - } - $._initialized = version; - $._initializing = true; - _; - $._initializing = false; - emit Initialized(version); - } - - /** - * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the - * {initializer} and {reinitializer} modifiers, directly or indirectly. - */ - modifier onlyInitializing() { - _checkInitializing(); - _; - } - - /** - * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}. - */ - function _checkInitializing() internal view virtual { - if (!_isInitializing()) { - revert NotInitializing(); - } - } - - /** - * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. - * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized - * to any version. It is recommended to use this to lock implementation contracts that are designed to be called - * through proxies. - * - * Emits an {Initialized} event the first time it is successfully executed. - */ - function _disableInitializers() internal virtual { - // solhint-disable-next-line var-name-mixedcase - InitializableStorage storage $ = _getInitializableStorage(); - - if ($._initializing) { - revert AlreadyInitialized(); - } - if ($._initialized != type(uint64).max) { - $._initialized = type(uint64).max; - emit Initialized(type(uint64).max); - } - } - - /** - * @dev Returns the highest version that has been initialized. See {reinitializer}. - */ - function _getInitializedVersion() internal view returns (uint64) { - return _getInitializableStorage()._initialized; - } - - /** - * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. - */ - function _isInitializing() internal view returns (bool) { - return _getInitializableStorage()._initializing; - } - - /** - * @dev Returns a pointer to the storage namespace. - */ - // solhint-disable-next-line var-name-mixedcase - function _getInitializableStorage() private pure returns (InitializableStorage storage $) { - assembly { - $.slot := _INITIALIZABLE_STORAGE - } - } -} diff --git a/contracts/src/proxy/KlerosProxies.sol b/contracts/src/proxy/KlerosProxies.sol deleted file mode 100644 index 7db79b67c..000000000 --- a/contracts/src/proxy/KlerosProxies.sol +++ /dev/null @@ -1,76 +0,0 @@ -//SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "./UUPSProxy.sol"; - -/// Workaround to get meaningful names for the proxy contracts -/// Otherwise all the contracts are called `UUPSProxy` on the chain explorers - -contract DisputeKitClassicUniversityProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract DisputeKitClassicProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract DisputeKitGatedProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract DisputeKitGatedShutterProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract DisputeKitShutterProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract DisputeKitSybilResistantProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract DisputeTemplateRegistryProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract EvidenceModuleProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract ForeignGatewayOnEthereumProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract HomeGatewayToEthereumProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract KlerosCoreRulerProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract KlerosCoreUniversityProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract KlerosCoreProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract PolicyRegistryProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract RandomizerRNGProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract SortitionModuleUniversityProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract SortitionModuleProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} diff --git a/contracts/src/proxy/UUPSProxiable.sol b/contracts/src/proxy/UUPSProxiable.sol deleted file mode 100644 index 34504f686..000000000 --- a/contracts/src/proxy/UUPSProxiable.sol +++ /dev/null @@ -1,140 +0,0 @@ -//SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -/// @title UUPS Proxiable -/// @author Simon Malatrait -/// @dev This contract implements an upgradeability mechanism designed for UUPS proxies. -/// @dev Adapted from -/// The functions included here can perform an upgrade of an UUPS Proxy, when this contract is set as the implementation behind such a proxy. -/// -/// IMPORTANT: A UUPS proxy requires its upgradeability functions to be in the implementation as opposed to the transparent proxy. -/// This means that if the proxy is upgraded to an implementation that does not support this interface, it will no longer be upgradeable. -/// -/// A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is -/// reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing -/// `UUPSProxiable` with a custom implementation of upgrades. -/// -/// The `_authorizeUpgrade` function must be overridden to include access restriction to the upgrade mechanism. -abstract contract UUPSProxiable { - // ************************************* // - // * Event * // - // ************************************* // - - /// @dev Emitted when the `implementation` has been successfully upgraded. - /// @param newImplementation Address of the new implementation the proxy is now forwarding calls to. - event Upgraded(address indexed newImplementation); - - // ************************************* // - // * Error * // - // ************************************* // - - /// @dev The call is from an unauthorized context. - error UUPSUnauthorizedCallContext(); - - /// @dev The storage `slot` is unsupported as a UUID. - error UUPSUnsupportedProxiableUUID(bytes32 slot); - - /// @dev The `implementation` is not UUPS-compliant - error InvalidImplementation(address implementation); - - /// Failed Delegated call - error FailedDelegateCall(); - - // ************************************* // - // * Storage * // - // ************************************* // - - /// @dev Storage slot with the address of the current implementation. - /// @dev This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is - /// @dev validated in the constructor. - /// @dev NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1) - bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; - - /// @dev Storage variable of the proxiable contract address. - /// @dev It is used to check whether or not the current call is from the proxy. - /// @custom:oz-upgrades-unsafe-allow state-variable-immutable - address private immutable __self = address(this); - - // ************************************* // - // * Governance * // - // ************************************* // - - /// @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. - /// @dev Called by {upgradeToAndCall}. - function _authorizeUpgrade(address newImplementation) internal virtual; - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Upgrade mechanism including access control and UUPS-compliance. - /// @param newImplementation Address of the new implementation contract. - /// @param data Data used in a delegate call to `newImplementation` if non-empty. This will typically be an encoded - /// function call, and allows initializing the storage of the proxy like a Solidity constructor. - /// @dev Reverts if the execution is not performed via delegatecall or the execution - /// context is not of a proxy with an ERC1967-compliant implementation pointing to self. - function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual { - _authorizeUpgrade(newImplementation); - - // Check that the execution is being performed through a delegatecall call and that the execution context is - // a proxy contract with an implementation (as defined in ERC1967) pointing to self. - if (address(this) == __self || _getImplementation() != __self) { - revert UUPSUnauthorizedCallContext(); - } - - try UUPSProxiable(newImplementation).proxiableUUID() returns (bytes32 slot) { - if (slot != IMPLEMENTATION_SLOT) { - revert UUPSUnsupportedProxiableUUID(slot); - } - // Store the new implementation address to the implementation storage slot. - assembly { - sstore(IMPLEMENTATION_SLOT, newImplementation) - } - emit Upgraded(newImplementation); - - if (data.length != 0) { - // The return data is not checked (checking, in case of success, that the newImplementation code is non-empty if the return data is empty) because the authorized callee is trusted. - /// @custom:oz-upgrades-unsafe-allow delegatecall - (bool success, ) = newImplementation.delegatecall(data); - if (!success) { - revert FailedDelegateCall(); - } - } - } catch { - revert InvalidImplementation(newImplementation); - } - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Implementation of the ERC1822 `proxiableUUID` function. This returns the storage slot used by the - /// implementation. It is used to validate the implementation's compatibility when performing an upgrade. - /// - /// IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks - /// bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this - /// function revert if invoked through a proxy. This is guaranteed by the if statement. - function proxiableUUID() external view virtual returns (bytes32) { - if (address(this) != __self) { - // Must not be called through delegatecall - revert UUPSUnauthorizedCallContext(); - } - return IMPLEMENTATION_SLOT; - } - - /// @dev Returns the version of the implementation. - /// @return Version string. - function version() external view virtual returns (string memory); - - // ************************************* // - // * Internal Views * // - // ************************************* // - - function _getImplementation() internal view returns (address implementation) { - assembly { - implementation := sload(IMPLEMENTATION_SLOT) - } - } -} diff --git a/contracts/src/proxy/UUPSProxy.sol b/contracts/src/proxy/UUPSProxy.sol deleted file mode 100644 index 4f190158d..000000000 --- a/contracts/src/proxy/UUPSProxy.sol +++ /dev/null @@ -1,90 +0,0 @@ -//SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -/// @title UUPS Proxy -/// @author Simon Malatrait -/// @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822. -/// @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction. -/// @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`. -/// @dev Adapted from -contract UUPSProxy { - /// @dev Storage slot with the address of the current implementation. - /// This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is - /// validated in the constructor. - /// NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1) - bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`. - /// If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded - /// function call, and allows initializing the storage of the proxy like a Solidity constructor. - constructor(address _implementation, bytes memory _data) { - assembly { - sstore(IMPLEMENTATION_SLOT, _implementation) - } - - if (_data.length != 0) { - (bool success, ) = _implementation.delegatecall(_data); - require(success, "Proxy Constructor failed"); - } - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Delegates the current call to `implementation`. - /// NOTE: This function does not return to its internal call site, it will return directly to the external caller. - function _delegate(address implementation) internal { - assembly { - // Copy msg.data. We take full control of memory in this inline assembly - // block because it will not return to Solidity code. We overwrite the - // Solidity scratch pad at memory position 0. - calldatacopy(0, 0, calldatasize()) - - // Call the implementation. - // out and outsize are 0 because we don't know the size yet. - let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) - - // Copy the returned data. - returndatacopy(0, 0, returndatasize()) - - switch result - // delegatecall returns 0 on error. - case 0 { - revert(0, returndatasize()) - } - default { - return(0, returndatasize()) - } - } - } - - // ************************************* // - // * Internal Views * // - // ************************************* // - - function _getImplementation() internal view returns (address implementation) { - assembly { - implementation := sload(IMPLEMENTATION_SLOT) - } - } - - // ************************************* // - // * Fallback * // - // ************************************* // - - /// @dev Fallback function that delegates calls to the address returned by `_implementation()`. - /// @dev Will run if no other function in the contract matches the call data. - fallback() external payable { - _delegate(_getImplementation()); - } - - receive() external payable { - _delegate(_getImplementation()); - } -} diff --git a/contracts/src/proxy/mock/UUPSUpgradeableMocks.sol b/contracts/src/proxy/mock/UUPSUpgradeableMocks.sol deleted file mode 100644 index 3b2bc7959..000000000 --- a/contracts/src/proxy/mock/UUPSUpgradeableMocks.sol +++ /dev/null @@ -1,60 +0,0 @@ -//SPDX-License-Identifier: MIT -// Adapted from - -pragma solidity ^0.8.24; - -import "../UUPSProxiable.sol"; -import "../Initializable.sol"; - -contract NonUpgradeableMock { - uint256 public _counter; - - function counter() external view returns (uint256) { - return _counter; - } - - function increment() external { - _counter++; - } -} - -contract UUPSUpgradeableMock is UUPSProxiable, NonUpgradeableMock { - bool public initialized; - address public owner; - - uint256[50] __gap; - - constructor() { - initialized = true; - } - - function initialize(address _owner) external { - require(!initialized, "Contract instance has already been initialized"); - owner = _owner; - initialized = true; - } - - function _authorizeUpgrade(address) internal view override { - require(owner == msg.sender, "No privilege to upgrade"); - } - - function version() external pure virtual override returns (string memory) { - return "UUPSUpgradeableMock 1.0.0"; - } -} - -contract UUPSUpgradeableMockV2 is UUPSUpgradeableMock { - function version() external pure override returns (string memory) { - return "UUPSUpgradeableMock 2.0.0"; - } -} - -contract UUPSUnsupportedProxiableUUID is UUPSUpgradeableMock { - function proxiableUUID() external pure override returns (bytes32) { - return keccak256("invalid UUID"); - } - - function version() external pure override returns (string memory) { - return "UUPSUnsupportedProxiableUUID 1.0.0"; - } -} diff --git a/contracts/src/proxy/mock/by-inheritance/UpgradedByInheritance.sol b/contracts/src/proxy/mock/by-inheritance/UpgradedByInheritance.sol deleted file mode 100644 index b443051a8..000000000 --- a/contracts/src/proxy/mock/by-inheritance/UpgradedByInheritance.sol +++ /dev/null @@ -1,67 +0,0 @@ -//SPDX-License-Identifier: MIT -// Adapted from - -pragma solidity ^0.8.24; - -import "../../UUPSProxiable.sol"; -import "../../UUPSProxy.sol"; -import "../../Initializable.sol"; - -contract UpgradedByInheritanceV1Proxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract UpgradedByInheritanceV1 is UUPSProxiable, Initializable { - address public owner; - uint256 public counter; - uint256[50] __gap; - - constructor() { - _disableInitializers(); - } - - function initialize(address _owner) external virtual initializer { - owner = _owner; - counter = 1; - } - - function _authorizeUpgrade(address) internal view override { - require(owner == msg.sender, "No privilege to upgrade"); - } - - function increment() external { - ++counter; - } - - function version() external pure virtual override returns (string memory) { - return "V1"; - } -} - -contract UpgradedByInheritanceV2 is UpgradedByInheritanceV1 { - string public newVariable; - uint256[50] __gap2; - - constructor() { - _disableInitializers(); - } - - function initializeV2(string memory _newVariable) external reinitializer(2) { - newVariable = _newVariable; - this.increment(); - } - - function version() external pure virtual override returns (string memory) { - return "V2"; - } -} - -contract UpgradedByInheritanceV3Bad is UpgradedByInheritanceV2 { - constructor() { - _disableInitializers(); - } - - function initializeV3() external initializer { - // Wrong reinitializer version. - } -} diff --git a/contracts/src/proxy/mock/by-rewrite/UpgradedByRewrite.sol b/contracts/src/proxy/mock/by-rewrite/UpgradedByRewrite.sol deleted file mode 100644 index d8930796d..000000000 --- a/contracts/src/proxy/mock/by-rewrite/UpgradedByRewrite.sol +++ /dev/null @@ -1,42 +0,0 @@ -//SPDX-License-Identifier: MIT -// Adapted from - -pragma solidity ^0.8.24; - -import "../../UUPSProxiable.sol"; -import "../../Initializable.sol"; -import "../../UUPSProxy.sol"; - -contract UpgradedByRewriteProxy is UUPSProxy { - constructor(address _implementation, bytes memory _data) UUPSProxy(_implementation, _data) {} -} - -contract UpgradedByRewrite is UUPSProxiable, Initializable { - //------------------------ - // V1 State - //------------------------ - address public owner; - uint256 public counter; - uint256[50] __gap; - - constructor() { - _disableInitializers(); - } - - function initialize(address _owner) external virtual initializer { - owner = _owner; - counter = 1; - } - - function _authorizeUpgrade(address) internal view override { - require(owner == msg.sender, "No privilege to upgrade"); - } - - function increment() external { - ++counter; - } - - function version() external pure virtual override returns (string memory) { - return "V1"; - } -} diff --git a/contracts/src/proxy/mock/by-rewrite/UpgradedByRewriteV2.sol b/contracts/src/proxy/mock/by-rewrite/UpgradedByRewriteV2.sol deleted file mode 100644 index 5158c73fb..000000000 --- a/contracts/src/proxy/mock/by-rewrite/UpgradedByRewriteV2.sol +++ /dev/null @@ -1,42 +0,0 @@ -//SPDX-License-Identifier: MIT -// Adapted from - -pragma solidity ^0.8.24; - -import "../../UUPSProxiable.sol"; -import "../../Initializable.sol"; - -contract UpgradedByRewrite is UUPSProxiable, Initializable { - //------------------------ - // V1 State - //------------------------ - address public owner; - uint256 public counter; - uint256[50] __gap; - - //------------------------ - // V2 State - //------------------------ - string public newVariable; - - constructor() { - _disableInitializers(); - } - - function initialize(string memory _newVariable) external reinitializer(2) { - newVariable = _newVariable; - this.increment(); - } - - function _authorizeUpgrade(address) internal view override { - require(owner == msg.sender, "No privilege to upgrade"); - } - - function increment() external { - ++counter; - } - - function version() external pure virtual override returns (string memory) { - return "V2"; - } -} diff --git a/contracts/src/rng/BlockhashRNG.sol b/contracts/src/rng/BlockhashRNG.sol deleted file mode 100644 index d104780f4..000000000 --- a/contracts/src/rng/BlockhashRNG.sol +++ /dev/null @@ -1,120 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "./IRNG.sol"; - -/// @title Random Number Generator using blockhash with fallback. -/// @dev -/// Random Number Generator returning the blockhash with a fallback behaviour. -/// On L2 like Arbitrum block production is sporadic so block timestamp is more reliable than block number. -/// Returns 0 when no random number is available. -/// Allows saving the random number for use in the future. It allows the contract to retrieve the blockhash even after the time window. -contract BlockHashRNG is IRNG { - // ************************************* // - // * Storage * // - // ************************************* // - - address public owner; // The address that can withdraw funds. - address public consumer; // The address that can request random numbers. - uint256 public immutable lookaheadTime; // Minimal time in seconds between requesting and obtaining a random number. - uint256 public requestTimestamp; // Timestamp of the current request - mapping(uint256 timestamp => uint256 number) public randomNumbers; // randomNumbers[timestamp] is the random number for this timestamp, 0 otherwise. - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - modifier onlyByConsumer() { - if (consumer != msg.sender) revert ConsumerOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Constructor. - /// @param _owner The Owner of the contract. - /// @param _consumer The address that can request random numbers. - /// @param _lookaheadTime The time lookahead in seconds for the random number. - constructor(address _owner, address _consumer, uint256 _lookaheadTime) { - owner = _owner; - consumer = _consumer; - lookaheadTime = _lookaheadTime; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /// @dev Changes the owner of the contract. - /// @param _owner The new owner. - function changeOwner(address _owner) external onlyByOwner { - owner = _owner; - } - - /// @dev Changes the consumer of the RNG. - /// @param _consumer The new consumer. - function changeConsumer(address _consumer) external onlyByOwner { - consumer = _consumer; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Request a random number. - function requestRandomness() external override onlyByConsumer { - requestTimestamp = block.timestamp; - } - - /// @dev Return the random number. If it has not been saved and is still computable compute it. - /// @return randomNumber The random number or 0 if it is not ready or has not been requested. - function receiveRandomness() external override onlyByConsumer returns (uint256 randomNumber) { - if (requestTimestamp == 0) return 0; // No requests were made yet. - - uint256 expectedTimestamp = requestTimestamp + lookaheadTime; - - // Check if enough time has passed - if (block.timestamp < expectedTimestamp) { - return 0; // Not ready yet - } - - // Check if we already have a saved random number for this timestamp window - randomNumber = randomNumbers[expectedTimestamp]; - if (randomNumber != 0) { - return randomNumber; - } - - // Use last block hash for randomness - randomNumber = uint256(blockhash(block.number - 1)); - if (randomNumber != 0) { - randomNumbers[expectedTimestamp] = randomNumber; - } - return randomNumber; - } - - // ************************************* // - // * View Functions * // - // ************************************* // - - /// @dev Check if randomness is ready to be received. - /// @return ready True if randomness can be received. - function isRandomnessReady() external view returns (bool ready) { - if (requestTimestamp == 0) return false; // No requests were made yet. - return block.timestamp >= requestTimestamp + lookaheadTime; - } - - /// @dev Get the timestamp when randomness will be ready. - /// @return readyTimestamp The timestamp when randomness will be available. - function getRandomnessReadyTimestamp() external view returns (uint256 readyTimestamp) { - if (requestTimestamp == 0) return 0; // No requests were made yet. - return requestTimestamp + lookaheadTime; - } -} diff --git a/contracts/src/rng/ChainlinkConsumerBaseV2Plus.sol b/contracts/src/rng/ChainlinkConsumerBaseV2Plus.sol deleted file mode 100644 index 73df28caf..000000000 --- a/contracts/src/rng/ChainlinkConsumerBaseV2Plus.sol +++ /dev/null @@ -1,169 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -// This contract is adapted from `@chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus.sol` to remove the `ConfirmedOwner` dependency. - -import {IVRFCoordinatorV2Plus} from "@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFCoordinatorV2Plus.sol"; -import {IVRFMigratableConsumerV2Plus} from "@chainlink/contracts/src/v0.8/vrf/dev/interfaces/IVRFMigratableConsumerV2Plus.sol"; - -/** **************************************************************************** - * @notice Interface for contracts using VRF randomness - * ***************************************************************************** - * @dev PURPOSE - * - * @dev Reggie the Random Oracle (not his real job) wants to provide randomness - * @dev to Vera the verifier in such a way that Vera can be sure he's not - * @dev making his output up to suit himself. Reggie provides Vera a public key - * @dev to which he knows the secret key. Each time Vera provides a seed to - * @dev Reggie, he gives back a value which is computed completely - * @dev deterministically from the seed and the secret key. - * - * @dev Reggie provides a proof by which Vera can verify that the output was - * @dev correctly computed once Reggie tells it to her, but without that proof, - * @dev the output is indistinguishable to her from a uniform random sample - * @dev from the output space. - * - * @dev The purpose of this contract is to make it easy for unrelated contracts - * @dev to talk to Vera the verifier about the work Reggie is doing, to provide - * @dev simple access to a verifiable source of randomness. It ensures 2 things: - * @dev 1. The fulfillment came from the VRFCoordinatorV2Plus. - * @dev 2. The consumer contract implements fulfillRandomWords. - * ***************************************************************************** - * @dev USAGE - * - * @dev Calling contracts must inherit from VRFConsumerBaseV2Plus, and can - * @dev initialize VRFConsumerBaseV2Plus's attributes in their constructor as - * @dev shown: - * - * @dev contract VRFConsumerV2Plus is VRFConsumerBaseV2Plus { - * @dev constructor(, address _vrfCoordinator, address _subOwner) - * @dev VRFConsumerBaseV2Plus(_vrfCoordinator, _subOwner) public { - * @dev - * @dev } - * @dev } - * - * @dev The oracle will have given you an ID for the VRF keypair they have - * @dev committed to (let's call it keyHash). Create a subscription, fund it - * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface - * @dev subscription management functions). - * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations, - * @dev callbackGasLimit, numWords, extraArgs), - * @dev see (IVRFCoordinatorV2Plus for a description of the arguments). - * - * @dev Once the VRFCoordinatorV2Plus has received and validated the oracle's response - * @dev to your request, it will call your contract's fulfillRandomWords method. - * - * @dev The randomness argument to fulfillRandomWords is a set of random words - * @dev generated from your requestId and the blockHash of the request. - * - * @dev If your contract could have concurrent requests open, you can use the - * @dev requestId returned from requestRandomWords to track which response is associated - * @dev with which randomness request. - * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind, - * @dev if your contract could have multiple requests in flight simultaneously. - * - * @dev Colliding `requestId`s are cryptographically impossible as long as seeds - * @dev differ. - * - * ***************************************************************************** - * @dev SECURITY CONSIDERATIONS - * - * @dev A method with the ability to call your fulfillRandomness method directly - * @dev could spoof a VRF response with any random value, so it's critical that - * @dev it cannot be directly called by anything other than this base contract - * @dev (specifically, by the VRFConsumerBaseV2Plus.rawFulfillRandomness method). - * - * @dev For your users to trust that your contract's random behavior is free - * @dev from malicious interference, it's best if you can write it so that all - * @dev behaviors implied by a VRF response are executed *during* your - * @dev fulfillRandomness method. If your contract must store the response (or - * @dev anything derived from it) and use it later, you must ensure that any - * @dev user-significant behavior which depends on that stored value cannot be - * @dev manipulated by a subsequent VRF request. - * - * @dev Similarly, both miners and the VRF oracle itself have some influence - * @dev over the order in which VRF responses appear on the blockchain, so if - * @dev your contract could have multiple VRF requests in flight simultaneously, - * @dev you must ensure that the order in which the VRF responses arrive cannot - * @dev be used to manipulate your contract's user-significant behavior. - * - * @dev Since the block hash of the block which contains the requestRandomness - * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful - * @dev miner could, in principle, fork the blockchain to evict the block - * @dev containing the request, forcing the request to be included in a - * @dev different block with a different hash, and therefore a different input - * @dev to the VRF. However, such an attack would incur a substantial economic - * @dev cost. This cost scales with the number of blocks the VRF oracle waits - * @dev until it calls responds to a request. It is for this reason that - * @dev that you can signal to an oracle you'd like them to wait longer before - * @dev responding to the request (however this is not enforced in the contract - * @dev and so remains effective only in the case of unmodified oracle software). - */ -abstract contract VRFConsumerBaseV2Plus is IVRFMigratableConsumerV2Plus { - error OnlyCoordinatorCanFulfill(address have, address want); - error OnlyOwnerOrCoordinator(address have, address owner, address coordinator); - error ZeroAddress(); - - address public owner; - - // s_vrfCoordinator should be used by consumers to make requests to vrfCoordinator - // so that coordinator reference is updated after migration - IVRFCoordinatorV2Plus public s_vrfCoordinator; - - /** - * @param _vrfCoordinator address of VRFCoordinator contract - */ - constructor(address _owner, address _vrfCoordinator) { - owner = _owner; - if (_vrfCoordinator == address(0)) { - revert ZeroAddress(); - } - s_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator); - } - - /** - * @notice fulfillRandomness handles the VRF response. Your contract must - * @notice implement it. See "SECURITY CONSIDERATIONS" above for important - * @notice principles to keep in mind when implementing your fulfillRandomness - * @notice method. - * - * @dev VRFConsumerBaseV2Plus expects its subcontracts to have a method with this - * @dev signature, and will call it once it has verified the proof - * @dev associated with the randomness. (It is triggered via a call to - * @dev rawFulfillRandomness, below.) - * - * @param requestId The Id initially returned by requestRandomness - * @param randomWords the VRF output expanded to the requested number of words - */ - // solhint-disable-next-line chainlink-solidity/prefix-internal-functions-with-underscore - function fulfillRandomWords(uint256 requestId, uint256[] calldata randomWords) internal virtual; - - // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF - // proof. rawFulfillRandomness then calls fulfillRandomness, after validating - // the origin of the call - function rawFulfillRandomWords(uint256 requestId, uint256[] calldata randomWords) external { - if (msg.sender != address(s_vrfCoordinator)) { - revert OnlyCoordinatorCanFulfill(msg.sender, address(s_vrfCoordinator)); - } - fulfillRandomWords(requestId, randomWords); - } - - /** - * @inheritdoc IVRFMigratableConsumerV2Plus - */ - function setCoordinator(address _vrfCoordinator) external override onlyOwnerOrCoordinator { - if (_vrfCoordinator == address(0)) { - revert ZeroAddress(); - } - s_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator); - - emit CoordinatorSet(_vrfCoordinator); - } - - modifier onlyOwnerOrCoordinator() { - if (msg.sender != owner && msg.sender != address(s_vrfCoordinator)) { - revert OnlyOwnerOrCoordinator(msg.sender, owner, address(s_vrfCoordinator)); - } - _; - } -} diff --git a/contracts/src/rng/ChainlinkRNG.sol b/contracts/src/rng/ChainlinkRNG.sol deleted file mode 100644 index 744bc5248..000000000 --- a/contracts/src/rng/ChainlinkRNG.sol +++ /dev/null @@ -1,171 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {VRFConsumerBaseV2Plus, IVRFCoordinatorV2Plus} from "./ChainlinkConsumerBaseV2Plus.sol"; -import {VRFV2PlusClient} from "@chainlink/contracts/src/v0.8/vrf/dev/libraries/VRFV2PlusClient.sol"; - -import "./IRNG.sol"; - -/// @title Random Number Generator that uses Chainlink VRF v2.5 -/// https://blog.chain.link/introducing-vrf-v2-5/ -contract ChainlinkRNG is IRNG, VRFConsumerBaseV2Plus { - // ************************************* // - // * Storage * // - // ************************************* // - - address public consumer; // The address that can request random numbers. - bytes32 public keyHash; // The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job). - uint256 public subscriptionId; // The unique identifier of the subscription used for funding requests. - uint16 public requestConfirmations; // How many confirmations the Chainlink node should wait before responding. - // 22 bytes remaining in slot - uint32 public callbackGasLimit; // Gas limit for the Chainlink callback. - uint256 public lastRequestId; // The last request ID. - mapping(uint256 requestId => uint256 number) public randomNumbers; // randomNumbers[requestID] is the random number for this request id, 0 otherwise. - - // ************************************* // - // * Events * // - // ************************************* // - - /// @dev Emitted when a request is sent to the VRF Coordinator - /// @param _requestId The ID of the request - event RequestSent(uint256 indexed _requestId); - - /// Emitted when a request has been fulfilled. - /// @param _requestId The ID of the request - /// @param _randomWord The random value answering the request. - event RequestFulfilled(uint256 indexed _requestId, uint256 _randomWord); - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - modifier onlyByConsumer() { - if (consumer != msg.sender) revert ConsumerOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Constructor, initializing the implementation to reduce attack surface. - /// @param _owner The owner of the contract. - /// @param _consumer The address that can request random numbers. - /// @param _vrfCoordinator The address of the VRFCoordinator contract. - /// @param _keyHash The gas lane key hash value - Defines the maximum gas price you are willing to pay for a request in wei (ID of the off-chain VRF job). - /// @param _subscriptionId The unique identifier of the subscription used for funding requests. - /// @param _requestConfirmations How many confirmations the Chainlink node should wait before responding. - /// @param _callbackGasLimit The limit for how much gas to use for the callback request to the contract's fulfillRandomWords() function. - /// @dev https://docs.chain.link/vrf/v2-5/subscription/get-a-random-number - constructor( - address _owner, - address _consumer, - address _vrfCoordinator, - bytes32 _keyHash, - uint256 _subscriptionId, - uint16 _requestConfirmations, - uint32 _callbackGasLimit - ) VRFConsumerBaseV2Plus(_owner, _vrfCoordinator) { - consumer = _consumer; - keyHash = _keyHash; - subscriptionId = _subscriptionId; - requestConfirmations = _requestConfirmations; - callbackGasLimit = _callbackGasLimit; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - /// @dev Changes the owner of the contract. - /// @param _owner The new owner. - function changeOwner(address _owner) external onlyByOwner { - owner = _owner; - } - - /// @dev Changes the consumer of the RNG. - /// @param _consumer The new consumer. - function changeConsumer(address _consumer) external onlyByOwner { - consumer = _consumer; - } - - /// @dev Changes the VRF Coordinator of the contract. - /// @param _vrfCoordinator The new VRF Coordinator. - function changeVrfCoordinator(address _vrfCoordinator) external onlyByOwner { - s_vrfCoordinator = IVRFCoordinatorV2Plus(_vrfCoordinator); - emit CoordinatorSet(_vrfCoordinator); - } - - /// @dev Changes the key hash of the contract. - /// @param _keyHash The new key hash. - function changeKeyHash(bytes32 _keyHash) external onlyByOwner { - keyHash = _keyHash; - } - - /// @dev Changes the subscription ID of the contract. - /// @param _subscriptionId The new subscription ID. - function changeSubscriptionId(uint256 _subscriptionId) external onlyByOwner { - subscriptionId = _subscriptionId; - } - - /// @dev Changes the request confirmations of the contract. - /// @param _requestConfirmations The new request confirmations. - function changeRequestConfirmations(uint16 _requestConfirmations) external onlyByOwner { - requestConfirmations = _requestConfirmations; - } - - /// @dev Changes the callback gas limit of the contract. - /// @param _callbackGasLimit The new callback gas limit. - function changeCallbackGasLimit(uint32 _callbackGasLimit) external onlyByOwner { - callbackGasLimit = _callbackGasLimit; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Request a random number. Consumer only. - function requestRandomness() external override onlyByConsumer { - // Will revert if subscription is not set and funded. - uint256 requestId = s_vrfCoordinator.requestRandomWords( - VRFV2PlusClient.RandomWordsRequest({ - keyHash: keyHash, - subId: subscriptionId, - requestConfirmations: requestConfirmations, - callbackGasLimit: callbackGasLimit, - numWords: 1, - extraArgs: VRFV2PlusClient._argsToBytes( - // Set nativePayment to true to pay for VRF requests with ETH instead of LINK - VRFV2PlusClient.ExtraArgsV1({nativePayment: true}) - ) - }) - ); - lastRequestId = requestId; - emit RequestSent(requestId); - } - - /// @dev Callback function called by the VRF Coordinator when the random value is generated. - /// @param _requestId The ID of the request. - /// @param _randomWords The random values answering the request. - function fulfillRandomWords(uint256 _requestId, uint256[] calldata _randomWords) internal override { - // Access control is handled by the parent VRFCoordinator.rawFulfillRandomWords() - randomNumbers[_requestId] = _randomWords[0]; - emit RequestFulfilled(_requestId, _randomWords[0]); - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Return the random number. - /// @return randomNumber The random number or 0 if it is not ready or has not been requested. - function receiveRandomness() external view override returns (uint256 randomNumber) { - randomNumber = randomNumbers[lastRequestId]; - } -} diff --git a/contracts/src/rng/IRNG.sol b/contracts/src/rng/IRNG.sol deleted file mode 100644 index c407b763f..000000000 --- a/contracts/src/rng/IRNG.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -/// @title Random Number Generator interface -interface IRNG { - /// @dev Request a random number. - function requestRandomness() external; - - /// @dev Receive the random number. - /// @return randomNumber Random number or 0 if not available - function receiveRandomness() external returns (uint256 randomNumber); - - error OwnerOnly(); - error ConsumerOnly(); -} diff --git a/contracts/src/rng/IRandomizer.sol b/contracts/src/rng/IRandomizer.sol deleted file mode 100644 index 6a6296f82..000000000 --- a/contracts/src/rng/IRandomizer.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -// Randomizer protocol interface -interface IRandomizer { - function request(uint256 callbackGasLimit) external returns (uint256); - - function clientWithdrawTo(address _to, uint256 _amount) external; -} diff --git a/contracts/src/rng/IncrementalNG.sol b/contracts/src/rng/IncrementalNG.sol deleted file mode 100644 index 542090e71..000000000 --- a/contracts/src/rng/IncrementalNG.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; -import "./IRNG.sol"; - -/// @title Incremental Number Generator -/// @dev A Random Number Generator which returns a number incremented by 1 each time. -/// For testing purposes. -contract IncrementalNG is IRNG { - uint256 public number; - - constructor(uint256 _start) { - number = _start; - } - - /// @dev Request a random number. - function requestRandomness() external override { - // nop - } - - /// @dev Get the "random number" (which is always the same). - /// @return randomNumber The random number or 0 if it is not ready or has not been requested. - function receiveRandomness() external override returns (uint256 randomNumber) { - unchecked { - return number++; - } - } -} diff --git a/contracts/src/rng/RNGWithFallback.sol b/contracts/src/rng/RNGWithFallback.sol deleted file mode 100644 index 8501d4db9..000000000 --- a/contracts/src/rng/RNGWithFallback.sol +++ /dev/null @@ -1,109 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import "./IRNG.sol"; - -/// @title RNG with fallback mechanism -/// @notice Uses a primary RNG implementation with automatic fallback to a Blockhash RNG if the primary RNG does not respond passed a timeout. -contract RNGWithFallback is IRNG { - // ************************************* // - // * Storage * // - // ************************************* // - - IRNG public immutable rng; // RNG address. - address public owner; // Owner address - address public consumer; // Consumer address - uint256 public fallbackTimeoutSeconds; // Time in seconds to wait before falling back to next RNG - uint256 public requestTimestamp; // Timestamp of the current request - - // ************************************* // - // * Events * // - // ************************************* // - - event RNGFallback(); - event FallbackTimeoutChanged(uint256 _newTimeout); - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @param _owner Owner address - /// @param _consumer Consumer address - /// @param _fallbackTimeoutSeconds Time in seconds to wait before falling back to next RNG - /// @param _rng The RNG address (e.g. Chainlink) - constructor(address _owner, address _consumer, uint256 _fallbackTimeoutSeconds, IRNG _rng) { - if (address(_rng) == address(0)) revert InvalidDefaultRNG(); - - owner = _owner; - consumer = _consumer; - fallbackTimeoutSeconds = _fallbackTimeoutSeconds; - rng = _rng; - } - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - modifier onlyByConsumer() { - if (consumer != msg.sender) revert ConsumerOnly(); - _; - } - - // ************************************* // - // * Governance Functions * // - // ************************************* // - - /// @dev Change the owner - /// @param _newOwner Address of the new owner - function changeOwner(address _newOwner) external onlyByOwner { - owner = _newOwner; - } - - /// @dev Change the consumer - /// @param _consumer Address of the new consumer - function changeConsumer(address _consumer) external onlyByOwner { - consumer = _consumer; - } - - /// @dev Change the fallback timeout - /// @param _fallbackTimeoutSeconds New timeout in seconds - function changeFallbackTimeout(uint256 _fallbackTimeoutSeconds) external onlyByOwner { - fallbackTimeoutSeconds = _fallbackTimeoutSeconds; - emit FallbackTimeoutChanged(_fallbackTimeoutSeconds); - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Request a random number from the primary RNG - /// @dev The consumer is trusted not to make concurrent requests. - function requestRandomness() external override onlyByConsumer { - requestTimestamp = block.timestamp; - rng.requestRandomness(); - } - - /// @dev Receive the random number from the primary RNG with fallback to the blockhash RNG if the primary RNG does not respond passed a timeout. - /// @return randomNumber Random number or 0 if not available - function receiveRandomness() external override onlyByConsumer returns (uint256 randomNumber) { - randomNumber = rng.receiveRandomness(); - - // If we didn't get a random number and the timeout is exceeded, try the fallback - if (randomNumber == 0 && block.timestamp > requestTimestamp + fallbackTimeoutSeconds) { - randomNumber = uint256(blockhash(block.number - 1)); - emit RNGFallback(); - } - return randomNumber; - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error InvalidDefaultRNG(); -} diff --git a/contracts/src/rng/RandomizerRNG.sol b/contracts/src/rng/RandomizerRNG.sol deleted file mode 100644 index 648ce5c3d..000000000 --- a/contracts/src/rng/RandomizerRNG.sol +++ /dev/null @@ -1,133 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "./IRNG.sol"; -import "./IRandomizer.sol"; - -/// @title Random Number Generator that uses Randomizer.ai -/// https://randomizer.ai/ -contract RandomizerRNG is IRNG { - // ************************************* // - // * Storage * // - // ************************************* // - - address public owner; // The address that can withdraw funds. - address public consumer; // The address that can request random numbers. - IRandomizer public randomizer; // Randomizer address. - uint256 public callbackGasLimit; // Gas limit for the Randomizer.ai callback. - uint256 public lastRequestId; // The last request ID. - mapping(uint256 requestId => uint256 number) public randomNumbers; // randomNumbers[requestID] is the random number for this request id, 0 otherwise. - - // ************************************* // - // * Events * // - // ************************************* // - - /// @dev Emitted when a request is sent to the VRF Coordinator - /// @param requestId The ID of the request - event RequestSent(uint256 indexed requestId); - - /// Emitted when a request has been fulfilled. - /// @param requestId The ID of the request - /// @param randomWords The random values answering the request. - event RequestFulfilled(uint256 indexed requestId, uint256 randomWords); - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - if (owner != msg.sender) revert OwnerOnly(); - _; - } - - modifier onlyByConsumer() { - if (consumer != msg.sender) revert ConsumerOnly(); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - /// @dev Constructor - /// @param _owner The Owner of the contract. - /// @param _consumer The address that can request random numbers. - /// @param _randomizer The Randomizer.ai oracle contract. - constructor(address _owner, address _consumer, IRandomizer _randomizer) { - owner = _owner; - consumer = _consumer; - randomizer = _randomizer; - callbackGasLimit = 50000; - } - - // ************************ // - // * Governance * // - // ************************ // - - /// @dev Changes the owner of the contract. - /// @param _owner The new owner. - function changeOwner(address _owner) external onlyByOwner { - owner = _owner; - } - - /// @dev Changes the consumer of the RNG. - /// @param _consumer The new consumer. - function changeConsumer(address _consumer) external onlyByOwner { - consumer = _consumer; - } - - /// @dev Change the Randomizer callback gas limit. - /// @param _callbackGasLimit the new limit. - function setCallbackGasLimit(uint256 _callbackGasLimit) external onlyByOwner { - callbackGasLimit = _callbackGasLimit; - } - - /// @dev Change the Randomizer address. - /// @param _randomizer the new Randomizer address. - function setRandomizer(address _randomizer) external onlyByOwner { - randomizer = IRandomizer(_randomizer); - } - - /// @dev Allows the owner to withdraw randomizer funds. - /// @param _amount Amount to withdraw in wei. - function randomizerWithdraw(uint256 _amount) external onlyByOwner { - randomizer.clientWithdrawTo(msg.sender, _amount); - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - /// @dev Request a random number. Consumer only. - function requestRandomness() external override onlyByConsumer { - uint256 requestId = randomizer.request(callbackGasLimit); - lastRequestId = requestId; - emit RequestSent(requestId); - } - - /// @dev Callback function called by the randomizer contract when the random value is generated. - /// @param _id The ID of the request. - /// @param _value The random value answering the request. - function randomizerCallback(uint256 _id, bytes32 _value) external { - if (msg.sender != address(randomizer)) revert RandomizerOnly(); - randomNumbers[_id] = uint256(_value); - emit RequestFulfilled(_id, uint256(_value)); - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - /// @dev Return the random number. - /// @return randomNumber The random number or 0 if it is not ready or has not been requested. - function receiveRandomness() external view override returns (uint256 randomNumber) { - randomNumber = randomNumbers[lastRequestId]; - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error RandomizerOnly(); -} diff --git a/contracts/src/rng/mock/ChainlinkVRFCoordinatorMock.sol b/contracts/src/rng/mock/ChainlinkVRFCoordinatorMock.sol deleted file mode 100644 index d7314d5ff..000000000 --- a/contracts/src/rng/mock/ChainlinkVRFCoordinatorMock.sol +++ /dev/null @@ -1,128 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {IVRFCoordinatorV2Plus} from "@chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus.sol"; -import {VRFV2PlusClient} from "@chainlink/contracts/src/v0.8/vrf/dev/libraries/VRFV2PlusClient.sol"; - -/// @title A mock for testing code that relies on VRFCoordinatorV2. -contract ChainlinkVRFCoordinatorV2Mock is IVRFCoordinatorV2Plus { - // ************************************* // - // * Storage * // - // ************************************* // - - uint256 nextRequestId = 1; - mapping(uint256 requestID => VRFV2PlusClient.RandomWordsRequest request) requests; - - // ************************************* // - // * Events * // - // ************************************* // - - event RandomWordsRequested( - bytes32 indexed keyHash, - uint256 requestId, - uint256 indexed subId, - uint16 minimumRequestConfirmations, - uint32 callbackGasLimit, - uint32 numWords, - address indexed sender - ); - event RandomWordsFulfilled(uint256 indexed requestId, bool success); - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - function fulfillRandomWords(uint256 _requestId, address _consumer, uint256[] memory _words) public { - if (_consumer == address(0)) revert("zero address consumer"); - if (requests[_requestId].subId == 0) { - revert("nonexistent request"); - } - VRFV2PlusClient.RandomWordsRequest memory req = requests[_requestId]; - - if (_words.length == 0) { - _words = new uint256[](req.numWords); - for (uint256 i = 0; i < req.numWords; i++) { - _words[i] = uint256(keccak256(abi.encode(_requestId, i))); - } - } else if (_words.length != req.numWords) { - revert InvalidRandomWords(); - } - - bytes4 FULFILL_RANDOM_WORDS_SELECTOR = bytes4(keccak256("rawFulfillRandomWords(uint256,uint256[])")); - bytes memory callReq = abi.encodeWithSelector(FULFILL_RANDOM_WORDS_SELECTOR, _requestId, _words); - delete (requests[_requestId]); - (bool success, ) = _consumer.call{gas: req.callbackGasLimit}(callReq); - emit RandomWordsFulfilled(_requestId, success); - } - - function requestRandomWords(VRFV2PlusClient.RandomWordsRequest calldata req) external returns (uint256) { - uint256 requestId = nextRequestId++; - - requests[requestId] = req; - - emit RandomWordsRequested( - req.keyHash, - requestId, - req.subId, - req.requestConfirmations, - req.callbackGasLimit, - req.numWords, - msg.sender - ); - return requestId; - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - function fundSubscription(uint256, uint96) public pure { - revert("not implemented"); - } - - function createSubscription() external pure returns (uint256) { - revert("not implemented"); - } - - function fundSubscriptionWithNative(uint256) external payable { - revert("not implemented"); - } - - function getActiveSubscriptionIds(uint256, uint256) external pure returns (uint256[] memory) { - revert("not implemented"); - } - - function getSubscription(uint256) external pure returns (uint96, uint96, uint64, address, address[] memory) { - revert("not implemented"); - } - - function cancelSubscription(uint256, address) external pure { - revert("not implemented"); - } - - function addConsumer(uint256, address) external pure { - revert("not implemented"); - } - - function removeConsumer(uint256, address) external pure { - revert("not implemented"); - } - - function requestSubscriptionOwnerTransfer(uint256, address) external pure { - revert("not implemented"); - } - - function acceptSubscriptionOwnerTransfer(uint256) external pure { - revert("not implemented"); - } - - function pendingRequestExists(uint256) public pure returns (bool) { - revert("not implemented"); - } - - // ************************************* // - // * Errors * // - // ************************************* // - - error InvalidRandomWords(); -} diff --git a/contracts/src/rng/mock/RandomizerMock.sol b/contracts/src/rng/mock/RandomizerMock.sol deleted file mode 100644 index c36a13815..000000000 --- a/contracts/src/rng/mock/RandomizerMock.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "../RandomizerRNG.sol"; - -contract RandomizerMock is IRandomizer { - uint256 private id = 1; - - function request(uint256 callbackGasLimit) external override returns (uint256) { - return id++; - } - - function clientWithdrawTo(address _to, uint256 _amount) external override { - revert("Not Implemented"); - } - - function relay(RandomizerRNG _rng, uint256 _id, bytes32 _value) external { - _rng.randomizerCallback(_id, _value); - } -} diff --git a/contracts/src/test/KlerosCoreMock.sol b/contracts/src/test/KlerosCoreMock.sol deleted file mode 100644 index 84ad3552e..000000000 --- a/contracts/src/test/KlerosCoreMock.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "../arbitration/KlerosCore.sol"; - -/// @title KlerosCoreMock -/// KlerosCore with view functions to use in Foundry tests. -contract KlerosCoreMock is KlerosCore { - function getCourtChildren(uint256 _courtId) external view returns (uint256[] memory children) { - children = courts[_courtId].children; - } - - function extraDataToCourtIDMinJurorsDisputeKit( - bytes memory _extraData - ) external view returns (uint96 courtID, uint256 minJurors, uint256 disputeKitID) { - (courtID, minJurors, disputeKitID) = _extraDataToCourtIDMinJurorsDisputeKit(_extraData); - } -} diff --git a/contracts/src/test/RNGMock.sol b/contracts/src/test/RNGMock.sol deleted file mode 100644 index df372265d..000000000 --- a/contracts/src/test/RNGMock.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import "../rng/IRNG.sol"; - -/// @title Simple mock rng to check fallback -contract RNGMock is IRNG { - uint256 public randomNumber; // The number to return; - - function setRN(uint256 _rn) external { - randomNumber = _rn; - } - - function requestRandomness() external override {} - - function receiveRandomness() external view override returns (uint256) { - return randomNumber; - } -} diff --git a/contracts/src/test/SortitionModuleMock.sol b/contracts/src/test/SortitionModuleMock.sol deleted file mode 100644 index 73c9e859c..000000000 --- a/contracts/src/test/SortitionModuleMock.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "../arbitration/SortitionModule.sol"; -import {SortitionTrees, TreeKey} from "../libraries/SortitionTrees.sol"; - -/// @title SortitionModuleMock -/// @dev Adds getter functions to sortition module for Foundry tests. -contract SortitionModuleMock is SortitionModule { - function getSortitionProperties(bytes32 _key) external view returns (uint256 K, uint256 nodeLength) { - SortitionTrees.Tree storage tree = sortitionSumTrees[TreeKey.wrap(_key)]; - K = tree.K; - nodeLength = tree.nodes.length; - } -} diff --git a/contracts/src/test/SortitionTreesMock.sol b/contracts/src/test/SortitionTreesMock.sol deleted file mode 100644 index 3dcfe8741..000000000 --- a/contracts/src/test/SortitionTreesMock.sol +++ /dev/null @@ -1,154 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import "../libraries/SortitionTrees.sol"; - -/// @title SortitionTreesMock -/// @dev Test contract to expose SortitionTrees library functions for testing -contract SortitionTreesMock { - using SortitionTrees for mapping(TreeKey => SortitionTrees.Tree); - - // Storage for multiple test trees - mapping(TreeKey => SortitionTrees.Tree) public trees; - - // Court hierarchy helpers (for testing parent-child relationships) - mapping(uint96 => uint96[]) public childCourts; - mapping(uint96 => uint96) public parentCourt; - - // ************************************* // - // * Main Functions * // - // ************************************* // - - /// @dev Create a sortition sum tree for a court - function createTree(uint96 _courtID, uint256 _k) external { - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - trees.createTree(key, _k); - } - - /// @dev Set stake for a juror in a specific court - function set(uint96 _courtID, address _account, uint256 _value) external { - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - bytes32 stakePathID = SortitionTrees.toStakePathID(_account, _courtID); - SortitionTrees.set(trees[key], _value, stakePathID); - } - - /// @dev Draw a juror from a court's tree - function draw( - uint96 _courtID, - uint256 _disputeID, - uint256 _nonce, - uint256 _randomNumber - ) external view returns (address drawnAddress, uint96 fromSubcourtID) { - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - return SortitionTrees.draw(trees[key], _disputeID, _nonce, _randomNumber); - } - - /// @dev Get stake of a juror in a specific court - function stakeOf(uint96 _courtID, address _account) external view returns (uint256) { - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - bytes32 stakePathID = SortitionTrees.toStakePathID(_account, _courtID); - return SortitionTrees.stakeOf(trees[key], stakePathID); - } - - // ************************************* // - // * Multi-Court Operations * // - // ************************************* // - - /// @dev Set stake for a juror across multiple courts (for testing hierarchy) - function setStakeInHierarchy(uint96[] calldata _courtIDs, address _account, uint256 _value) external { - for (uint256 i = 0; i < _courtIDs.length; i++) { - this.set(_courtIDs[i], _account, _value); - } - } - - /// @dev Get stakes of a juror across multiple courts - function getStakesAcrossCourts( - address _account, - uint96[] calldata _courtIDs - ) external view returns (uint256[] memory stakes) { - stakes = new uint256[](_courtIDs.length); - for (uint256 i = 0; i < _courtIDs.length; i++) { - stakes[i] = this.stakeOf(_courtIDs[i], _account); - } - } - - // ************************************* // - // * Court Hierarchy Setup * // - // ************************************* // - - /// @dev Set parent court for testing hierarchy - function setParentCourt(uint96 _childCourt, uint96 _parentCourt) external { - parentCourt[_childCourt] = _parentCourt; - } - - /// @dev Add child court for testing hierarchy - function addChildCourt(uint96 _parentCourt, uint96 _childCourt) external { - childCourts[_parentCourt].push(_childCourt); - } - - /// @dev Get child courts - function getChildCourts(uint96 _parentCourt) external view returns (uint96[] memory) { - return childCourts[_parentCourt]; - } - - // ************************************* // - // * Tree State Inspection * // - // ************************************* // - - /// @dev Get all nodes in a tree - function getTreeNodes(uint96 _courtID) external view returns (uint256[] memory) { - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - return trees[key].nodes; - } - - /// @dev Get tree K value - function getTreeK(uint96 _courtID) external view returns (uint256) { - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - return trees[key].K; - } - - /// @dev Get tree stack - function getTreeStack(uint96 _courtID) external view returns (uint256[] memory) { - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - return trees[key].stack; - } - - /// @dev Get node index for a juror in a court - function getNodeIndex(uint96 _courtID, address _account) external view returns (uint256) { - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - bytes32 stakePathID = SortitionTrees.toStakePathID(_account, _courtID); - return trees[key].IDsToNodeIndexes[stakePathID]; - } - - /// @dev Check if a court tree exists - function courtExists(uint96 _courtID) external view returns (bool) { - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - return trees[key].K != 0; - } - - /// @dev Get the root sum (total stakes) of a court - function getRootSum(uint96 _courtID) external view returns (uint256) { - TreeKey key = CourtID.wrap(_courtID).toTreeKey(); - if (trees[key].nodes.length == 0) return 0; - return trees[key].nodes[0]; - } - - // ************************************* // - // * Utility Functions * // - // ************************************* // - - /// @dev Test function to pack address and court ID - function testToStakePathID(address _account, uint96 _courtID) external pure returns (bytes32) { - return SortitionTrees.toStakePathID(_account, _courtID); - } - - /// @dev Test function to unpack stake path ID - function testToAccountAndCourtID(bytes32 _stakePathID) external pure returns (address account, uint96 courtID) { - return SortitionTrees.toAccountAndCourtID(_stakePathID); - } - - /// @dev Test function to convert court ID to tree key - function testToTreeKey(uint96 _courtID) external pure returns (TreeKey) { - return CourtID.wrap(_courtID).toTreeKey(); - } -} diff --git a/contracts/src/token/Faucet.sol b/contracts/src/token/Faucet.sol deleted file mode 100644 index b64a7e2ab..000000000 --- a/contracts/src/token/Faucet.sol +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; - -contract Faucet { - // ************************************* // - // * Storage * // - // ************************************* // - - IERC20 public token; - address public owner; - mapping(address => bool) public withdrewAlready; - uint256 public amount = 10_000 ether; - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier onlyByOwner() { - require(address(owner) == msg.sender, "Access not allowed: Owner only."); - _; - } - - // ************************************* // - // * Constructor * // - // ************************************* // - - constructor(IERC20 _token) { - token = _token; - owner = msg.sender; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - function changeOwner(address _owner) public onlyByOwner { - owner = _owner; - } - - function changeAmount(uint256 _amount) public onlyByOwner { - amount = _amount; - } - - function withdraw() public onlyByOwner { - token.transfer(owner, token.balanceOf(address(this))); - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - function request() public { - require( - !withdrewAlready[msg.sender], - "You have used this faucet already. If you need more tokens, please use another address." - ); - token.transfer(msg.sender, amount); - withdrewAlready[msg.sender] = true; - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - function balance() public view returns (uint) { - return token.balanceOf(address(this)); - } -} diff --git a/contracts/src/token/PNK.sol b/contracts/src/token/PNK.sol deleted file mode 100644 index 0546d4434..000000000 --- a/contracts/src/token/PNK.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; - -contract PNK is ERC20 { - constructor() ERC20("Pinakion", "PNK") { - _mint(msg.sender, 1000000 ether); - } -} diff --git a/contracts/src/token/PinakionV2.sol b/contracts/src/token/PinakionV2.sol deleted file mode 100644 index 143a16c93..000000000 --- a/contracts/src/token/PinakionV2.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; -import "../libraries/SafeERC20.sol"; - -/// @custom:security-contact contact@kleros.io -contract PinakionV2 is ERC20, ERC20Burnable, Ownable { - using SafeERC20 for IERC20; - - constructor() ERC20("PinakionV2", "PNK") Ownable(msg.sender) { - _mint(msg.sender, 1000000000 * 10 ** decimals()); - } - - function mint(address to, uint256 amount) public onlyOwner { - _mint(to, amount); - } - - /// @notice Recover tokens sent mistakenly to this contract. - /// @param _token The address of the token contract that you want to recover, or set to 0 in case you want to extract ether. - function recoverTokens(address _token) public onlyOwner { - if (_token == address(0)) { - require(payable(owner()).send(address(this).balance), "Transfer failed"); - return; - } - - IERC20 token = IERC20(_token); - uint balance = token.balanceOf(address(this)); - require(token.safeTransfer(payable(owner()), balance), "Token transfer failed"); - } -} diff --git a/contracts/src/token/TestERC1155.sol b/contracts/src/token/TestERC1155.sol deleted file mode 100644 index 7dd562336..000000000 --- a/contracts/src/token/TestERC1155.sol +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; - -contract TestERC1155 is ERC1155 { - // ************************************* // - // * Storage * // - // ************************************* // - - address public owner; - uint256 private _nextTokenId; - - // ************************************* // - // * Constructor * // - // ************************************* // - - constructor() ERC1155("") { - owner = msg.sender; - } - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier ownerOnly() { - require(msg.sender == owner, "Owner only"); - _; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - function changeOwner(address _newOwner) external ownerOnly { - owner = _newOwner; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - function mint(address to, uint256 id, uint256 value, bytes memory data) external ownerOnly { - _mint(to, id, value, data); - } - - function mintBatch( - address to, - uint256[] memory ids, - uint256[] memory values, - bytes memory data - ) external ownerOnly { - _mintBatch(to, ids, values, data); - } - - function burn(address from, uint256 id, uint256 value) external ownerOnly { - _burn(from, id, value); - } - - function burnBatch(address from, uint256[] memory ids, uint256[] memory values) external ownerOnly { - _burnBatch(from, ids, values); - } -} diff --git a/contracts/src/token/TestERC20.sol b/contracts/src/token/TestERC20.sol deleted file mode 100644 index b731e8063..000000000 --- a/contracts/src/token/TestERC20.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; - -contract TestERC20 is ERC20 { - constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) { - _mint(msg.sender, 1000000 ether); - } -} diff --git a/contracts/src/token/TestERC721.sol b/contracts/src/token/TestERC721.sol deleted file mode 100644 index 13f830c9c..000000000 --- a/contracts/src/token/TestERC721.sol +++ /dev/null @@ -1,77 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; -import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; - -contract TestERC721 is ERC721, ERC721Enumerable { - // ************************************* // - // * Storage * // - // ************************************* // - - address public owner; - uint256 private _nextTokenId; - - // ************************************* // - // * Constructor * // - // ************************************* // - - constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) { - owner = msg.sender; - } - - // ************************************* // - // * Function Modifiers * // - // ************************************* // - - modifier ownerOnly() { - require(msg.sender == owner, "Owner only"); - _; - } - - // ************************************* // - // * Governance * // - // ************************************* // - - function changeOwner(address _newOwner) external ownerOnly { - owner = _newOwner; - } - - // ************************************* // - // * State Modifiers * // - // ************************************* // - - function safeMint(address to) external ownerOnly { - uint256 tokenId = _nextTokenId++; - _safeMint(to, tokenId); - } - - // ************************************* // - // * Public Views * // - // ************************************* // - - function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { - return super.supportsInterface(interfaceId); - } - - // ************************************* // - // * Internal * // - // ************************************* // - - function _increaseBalance(address account, uint128 value) internal virtual override(ERC721, ERC721Enumerable) { - super._increaseBalance(account, value); - } - - // ************************************* // - // * Internal * // - // ************************************* // - - function _update( - address to, - uint256 tokenId, - address auth - ) internal virtual override(ERC721, ERC721Enumerable) returns (address) { - super._update(to, tokenId, auth); - } -} diff --git a/contracts/src/token/WrappedPinakionV2.sol b/contracts/src/token/WrappedPinakionV2.sol deleted file mode 100644 index c17c46625..000000000 --- a/contracts/src/token/WrappedPinakionV2.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.24; - -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; - -contract WrappedPinakionV2 is ERC20 { - constructor() ERC20("Staking PNK on xDai", "stPNK") { - _mint(msg.sender, 1000000 ether); - } -} diff --git a/contracts/src/utils/TransactionBatcher.sol b/contracts/src/utils/TransactionBatcher.sol deleted file mode 100644 index 1bbff78a2..000000000 --- a/contracts/src/utils/TransactionBatcher.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -// Adapted from https://github.com/daostack/web3-transaction-batcher/blob/1b88d2ea062f8f2d9fdfdf9bbe85d2bbef780151/contracts/Batcher.sol - -contract TransactionBatcher { - function batchSend(address[] memory targets, uint256[] memory values, bytes[] memory datas) public payable { - for (uint256 i = 0; i < targets.length; i++) { - (bool success, ) = targets[i].call{value: values[i]}(datas[i]); - if (!success) revert("transaction failed"); // All the calls must succeed. - } - } - - function batchSendUnchecked( - address[] memory targets, - uint256[] memory values, - bytes[] memory datas - ) public payable { - for (uint256 i = 0; i < targets.length; i++) { - targets[i].call{value: values[i]}(datas[i]); // Intentionally ignoring return value. - } - } -} diff --git a/contracts/test/arbitration/dispute-kit-gated.ts b/contracts/test/arbitration/dispute-kit-gated.ts deleted file mode 100644 index b7336087c..000000000 --- a/contracts/test/arbitration/dispute-kit-gated.ts +++ /dev/null @@ -1,288 +0,0 @@ -import { deployments, ethers, getNamedAccounts, network } from "hardhat"; -import { toBigInt, BigNumberish, Addressable } from "ethers"; -import { - PNK, - KlerosCore, - SortitionModule, - IncrementalNG, - DisputeKitGated, - TestERC20, - TestERC721, - TestERC1155, -} from "../../typechain-types"; -import { expect } from "chai"; -import { Courts } from "../../deploy/utils"; -import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; -import { deployERC1155, deployERC721 } from "../../deploy/utils/deployTokens"; - -/* eslint-disable no-unused-vars */ -/* eslint-disable no-unused-expressions */ // https://github.com/standard/standard/issues/690#issuecomment-278533482 - -describe("DisputeKitGated", async () => { - const ONE_THOUSAND_PNK = 10n ** 21n; - const thousandPNK = (amount: BigNumberish) => toBigInt(amount) * ONE_THOUSAND_PNK; - const PNK = (amount: BigNumberish) => toBigInt(amount) * 10n ** 18n; - - let deployer: string; - let juror1: HardhatEthersSigner; - let juror2: HardhatEthersSigner; - let disputeKitGated: DisputeKitGated; - let pnk: PNK; - let dai: TestERC20; - let core: KlerosCore; - let sortitionModule: SortitionModule; - let rng: IncrementalNG; - let nft721: TestERC721; - let nft1155: TestERC1155; - const RANDOM = 424242n; - const GATED_DK_ID = 3; - const TOKEN_ID = 888; - const minStake = PNK(200); - - beforeEach("Setup", async () => { - ({ deployer } = await getNamedAccounts()); - [, juror1, juror2] = await ethers.getSigners(); - - await deployments.fixture(["Arbitration", "VeaMock"], { - fallbackToGlobal: true, - keepExistingDeployments: false, - }); - disputeKitGated = await ethers.getContract("DisputeKitGated"); - pnk = await ethers.getContract("PNK"); - dai = await ethers.getContract("DAI"); - core = await ethers.getContract("KlerosCore"); - sortitionModule = await ethers.getContract("SortitionModule"); - - // Make the tests more deterministic with this dummy RNG - await deployments.deploy("IncrementalNG", { - from: deployer, - args: [RANDOM], - log: true, - }); - rng = await ethers.getContract("IncrementalNG"); - - await sortitionModule.changeRandomNumberGenerator(rng.target).then((tx) => tx.wait()); - - const hre = require("hardhat"); - await deployERC721(hre, deployer, "TestERC721", "Nft721"); - nft721 = await ethers.getContract("Nft721"); - - await deployERC1155(hre, deployer, "TestERC1155", "Nft1155"); - nft1155 = await ethers.getContract("Nft1155"); - await nft1155.mint(deployer, TOKEN_ID, 1, "0x00"); - }); - - const encodeExtraData = ( - courtId: number, - minJurors: BigNumberish, - disputeKitId: number, - tokenGate: string | Addressable, - isERC1155: boolean, - tokenId: BigNumberish - ) => { - // Packing of tokenGate and isERC1155 - // uint88 (padding 11 bytes) + bool (1 byte) + address (20 bytes) = 32 bytes - const packed = ethers.solidityPacked(["uint88", "bool", "address"], [0, isERC1155, tokenGate]); - return ethers.AbiCoder.defaultAbiCoder().encode( - ["uint256", "uint256", "uint256", "bytes32", "uint256"], - [courtId, minJurors, disputeKitId, packed, tokenId] - ); - }; - - const stakeAndDraw = async ( - courtId: number, - minJurors: BigNumberish, - disputeKitId: number, - tokenGate: string | Addressable, - isERC1155: boolean, - tokenId: BigNumberish - ) => { - // Stake jurors - for (const juror of [juror1, juror2]) { - await pnk.transfer(juror.address, thousandPNK(10)).then((tx) => tx.wait()); - expect(await pnk.balanceOf(juror.address)).to.equal(thousandPNK(10)); - - await pnk - .connect(juror) - .approve(core.target, thousandPNK(10), { gasLimit: 300000 }) - .then((tx) => tx.wait()); - - await core - .connect(juror) - .setStake(Courts.GENERAL, thousandPNK(10), { gasLimit: 500000 }) - .then((tx) => tx.wait()); - - expect(await sortitionModule.getJurorBalance(juror.address, 1)).to.deep.equal([ - thousandPNK(10), // totalStaked - 0, // totalLocked - thousandPNK(10), // stakedInCourt - 1, // nbOfCourts - ]); - } - - const extraData = encodeExtraData(courtId, minJurors, disputeKitId, tokenGate, isERC1155, tokenId); - // console.log("extraData", extraData); - - const tokenInfo = await disputeKitGated.extraDataToTokenInfo(extraData); - expect(tokenInfo[0]).to.equal(tokenGate); - expect(tokenInfo[1]).to.equal(isERC1155); - expect(tokenInfo[2]).to.equal(tokenId); - - const arbitrationCost = await core["arbitrationCost(bytes)"](extraData); - - // Warning: this dispute cannot be executed, in reality it should be created by an arbitrable contract, not an EOA. - const tx = await core["createDispute(uint256,bytes)"](2, extraData, { value: arbitrationCost }).then((tx) => - tx.wait() - ); - const disputeId = 0; - // console.log(tx?.logs); - - await network.provider.send("evm_increaseTime", [2000]); // Wait for minStakingTime - await network.provider.send("evm_mine"); - await sortitionModule.passPhase().then((tx) => tx.wait()); // Staking -> Generating - - await sortitionModule.passPhase().then((tx) => tx.wait()); // Generating -> Drawing - return core.draw(disputeId, 70, { gasLimit: 10000000 }); - }; - - describe("When gating with DAI token", async () => { - it("Should draw no juror if they don't have any DAI balance", async () => { - const nbOfJurors = 15n; - const tx = await stakeAndDraw(Courts.GENERAL, nbOfJurors, GATED_DK_ID, dai.target, false, 0).then((tx) => - tx.wait() - ); - - // Ensure that no juror is drawn - const drawLogs = - tx?.logs.filter((log: any) => log.fragment?.name === "Draw" && log.address === core.target) || []; - expect(drawLogs).to.have.length(0); - }); - - it("Should draw only the jurors who have some DAI balance", async () => { - dai.transfer(juror1.address, 1); - - const nbOfJurors = 15n; - const tx = await stakeAndDraw(Courts.GENERAL, nbOfJurors, GATED_DK_ID, dai.target, false, 0).then((tx) => - tx.wait() - ); - - // Ensure that only juror1 is drawn - const drawLogs = - tx?.logs.filter((log: any) => log.fragment?.name === "Draw" && log.address === core.target) || []; - expect(drawLogs).to.have.length(nbOfJurors); - drawLogs.forEach((log: any) => { - expect(log.args[0]).to.equal(juror1.address); - }); - - // Ensure that juror1 has PNK locked - expect(await sortitionModule.getJurorBalance(juror1.address, Courts.GENERAL)).to.deep.equal([ - thousandPNK(10), // totalStaked - minStake * nbOfJurors, // totalLocked - thousandPNK(10), // stakedInCourt - 1, // nbOfCourts - ]); - - // Ensure that juror2 has no PNK locked - expect(await sortitionModule.getJurorBalance(juror2.address, Courts.GENERAL)).to.deep.equal([ - thousandPNK(10), // totalStaked - 0, // totalLocked - thousandPNK(10), // stakedInCourt - 1, // nbOfCourts - ]); - }); - }); - - describe("When gating with ERC721 token", async () => { - it("Should draw no juror if they don't own the ERC721 token", async () => { - const nbOfJurors = 15n; - const tx = await stakeAndDraw(Courts.GENERAL, nbOfJurors, GATED_DK_ID, nft721.target, false, 0).then((tx) => - tx.wait() - ); - - // Ensure that no juror is drawn - const drawLogs = - tx?.logs.filter((log: any) => log.fragment?.name === "Draw" && log.address === core.target) || []; - expect(drawLogs).to.have.length(0); - }); - - it("Should draw only the jurors owning the ERC721 token", async () => { - await nft721.safeMint(juror2.address); - - const nbOfJurors = 15n; - const tx = await stakeAndDraw(Courts.GENERAL, nbOfJurors, GATED_DK_ID, nft721.target, false, 0).then((tx) => - tx.wait() - ); - - // Ensure that only juror2 is drawn - const drawLogs = - tx?.logs.filter((log: any) => log.fragment?.name === "Draw" && log.address === core.target) || []; - expect(drawLogs).to.have.length(nbOfJurors); - drawLogs.forEach((log: any) => { - expect(log.args[0]).to.equal(juror2.address); - }); - - // Ensure that juror1 is has no PNK locked - expect(await sortitionModule.getJurorBalance(juror1.address, Courts.GENERAL)).to.deep.equal([ - thousandPNK(10), // totalStaked - 0, // totalLocked - thousandPNK(10), // stakedInCourt - 1, // nbOfCourts - ]); - - // Ensure that juror2 has PNK locked - expect(await sortitionModule.getJurorBalance(juror2.address, Courts.GENERAL)).to.deep.equal([ - thousandPNK(10), // totalStaked - minStake * nbOfJurors, // totalLocked - thousandPNK(10), // stakedInCourt - 1, // nbOfCourts - ]); - }); - }); - - describe("When gating with ERC1155 token", async () => { - it("Should draw no juror if they don't own the ERC1155 token", async () => { - const nbOfJurors = 15n; - const tx = await stakeAndDraw(Courts.GENERAL, nbOfJurors, GATED_DK_ID, nft1155.target, true, TOKEN_ID).then( - (tx) => tx.wait() - ); - - // Ensure that no juror is drawn - const drawLogs = - tx?.logs.filter((log: any) => log.fragment?.name === "Draw" && log.address === core.target) || []; - expect(drawLogs).to.have.length(0); - }); - - it("Should draw only the jurors owning the ERC1155 token", async () => { - await nft1155.mint(juror2.address, TOKEN_ID, 1, "0x00"); - - const nbOfJurors = 15n; - const tx = await stakeAndDraw(Courts.GENERAL, nbOfJurors, GATED_DK_ID, nft1155.target, true, TOKEN_ID).then( - (tx) => tx.wait() - ); - - // Ensure that only juror2 is drawn - const drawLogs = - tx?.logs.filter((log: any) => log.fragment?.name === "Draw" && log.address === core.target) || []; - expect(drawLogs).to.have.length(nbOfJurors); - drawLogs.forEach((log: any) => { - expect(log.args[0]).to.equal(juror2.address); - }); - - // Ensure that juror1 is has no PNK locked - expect(await sortitionModule.getJurorBalance(juror1.address, Courts.GENERAL)).to.deep.equal([ - thousandPNK(10), // totalStaked - 0, // totalLocked - thousandPNK(10), // stakedInCourt - 1, // nbOfCourts - ]); - - // Ensure that juror2 has PNK locked - expect(await sortitionModule.getJurorBalance(juror2.address, Courts.GENERAL)).to.deep.equal([ - thousandPNK(10), // totalStaked - minStake * nbOfJurors, // totalLocked - thousandPNK(10), // stakedInCourt - 1, // nbOfCourts - ]); - }); - }); -}); diff --git a/contracts/test/arbitration/dispute-kit-shutter.ts b/contracts/test/arbitration/dispute-kit-shutter.ts deleted file mode 100644 index aab7efa58..000000000 --- a/contracts/test/arbitration/dispute-kit-shutter.ts +++ /dev/null @@ -1,733 +0,0 @@ -import { deployments, ethers, getNamedAccounts, network } from "hardhat"; -import { toBigInt, BigNumberish } from "ethers"; -import { PNK, KlerosCore, SortitionModule, IncrementalNG, DisputeKitShutter } from "../../typechain-types"; -import { expect } from "chai"; -import { Courts } from "../../deploy/utils"; -import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; - -/* eslint-disable no-unused-vars */ -/* eslint-disable no-unused-expressions */ // https://github.com/standard/standard/issues/690#issuecomment-278533482 - -describe("DisputeKitShutter", async () => { - const ONE_THOUSAND_PNK = 10n ** 21n; - const thousandPNK = (amount: BigNumberish) => toBigInt(amount) * ONE_THOUSAND_PNK; - - let deployer: string; - let juror1: HardhatEthersSigner; - let juror2: HardhatEthersSigner; - let bot: HardhatEthersSigner; - let attacker: HardhatEthersSigner; - let disputeKitShutter: DisputeKitShutter; - let pnk: PNK; - let core: KlerosCore; - let sortitionModule: SortitionModule; - let rng: IncrementalNG; - const RANDOM = 424242n; - const SHUTTER_DK_ID = 2; - const SHUTTER_COURT_ID = 2; // Court with hidden votes for testing - - // Test data - const choice = 1n; - const salt = 12345n; - const justification = "This is my justification for the vote"; - const identity = ethers.keccak256(ethers.toUtf8Bytes("shutter-identity")); - const encryptedVote = ethers.toUtf8Bytes("encrypted-vote-data"); - - beforeEach("Setup", async () => { - ({ deployer } = await getNamedAccounts()); - [, juror1, juror2, bot, attacker] = await ethers.getSigners(); - - await deployments.fixture(["Arbitration", "VeaMock"], { - fallbackToGlobal: true, - keepExistingDeployments: false, - }); - disputeKitShutter = await ethers.getContract("DisputeKitShutter"); - pnk = await ethers.getContract("PNK"); - core = await ethers.getContract("KlerosCore"); - sortitionModule = await ethers.getContract("SortitionModule"); - - // Make the tests more deterministic with this dummy RNG - await deployments.deploy("IncrementalNG", { - from: deployer, - args: [RANDOM], - log: true, - }); - rng = await ethers.getContract("IncrementalNG"); - - await sortitionModule.changeRandomNumberGenerator(rng.target).then((tx) => tx.wait()); - - // Create a court with hidden votes enabled for testing DisputeKitShutter - // Parameters: parent, hiddenVotes, minStake, alpha, feeForJuror, jurorsForCourtJump, timesPerPeriod, sortitionExtraData, supportedDisputeKits - await core.createCourt( - Courts.GENERAL, // parent - true, // hiddenVotes - MUST be true for DisputeKitShutter - ethers.parseEther("200"), // minStake - 10000, // alpha - ethers.parseEther("0.1"), // feeForJuror - 16, // jurorsForCourtJump - [300, 300, 300, 300], // timesPerPeriod for evidence, commit, vote, appeal - ethers.toBeHex(5), // sortitionExtraData - [1, SHUTTER_DK_ID] // supportedDisputeKits - must include Classic (1) and Shutter (2) - ); - - // The new court ID should be 2 (after GENERAL court which is 1) - }); - - // ************************************* // - // * Constants * // - // ************************************* // - - const enum Period { - evidence = 0, - commit = 1, - vote = 2, - appeal = 3, - execution = 4, - } - - // ************************************* // - // * Helper Functions * // - // ************************************* // - - const encodeExtraData = (courtId: BigNumberish, minJurors: BigNumberish, disputeKitId: number) => - ethers.AbiCoder.defaultAbiCoder().encode(["uint256", "uint256", "uint256"], [courtId, minJurors, disputeKitId]); - - const generateCommitments = (choice: bigint, salt: bigint, justification: string) => { - // Recovery commitment: hash(choice, salt) - no justification - const recoveryCommit = ethers.keccak256( - ethers.AbiCoder.defaultAbiCoder().encode(["uint256", "uint256"], [choice, salt]) - ); - - // Full commitment: hash(choice, salt, justificationHash) - const justificationHash = ethers.keccak256(ethers.toUtf8Bytes(justification)); - const fullCommit = ethers.keccak256( - ethers.AbiCoder.defaultAbiCoder().encode(["uint256", "uint256", "bytes32"], [choice, salt, justificationHash]) - ); - - return { fullCommit, recoveryCommit }; - }; - - const createDisputeAndDraw = async (courtId: BigNumberish, minJurors: BigNumberish, disputeKitId: number) => { - // Stake jurors - for (const juror of [juror1, juror2]) { - await pnk.transfer(juror.address, thousandPNK(10)).then((tx) => tx.wait()); - expect(await pnk.balanceOf(juror.address)).to.equal(thousandPNK(10)); - - await pnk - .connect(juror) - .approve(core.target, thousandPNK(10), { gasLimit: 300000 }) - .then((tx) => tx.wait()); - - await core - .connect(juror) - .setStake(SHUTTER_COURT_ID, thousandPNK(10), { gasLimit: 500000 }) - .then((tx) => tx.wait()); - - expect(await sortitionModule.getJurorBalance(juror.address, SHUTTER_COURT_ID)).to.deep.equal([ - thousandPNK(10), // totalStaked - 0, // totalLocked - thousandPNK(10), // stakedInCourt - 1, // nbOfCourts - ]); - } - - const extraData = encodeExtraData(courtId, minJurors, disputeKitId); - const arbitrationCost = await core["arbitrationCost(bytes)"](extraData); - - // Create dispute via core contract - await core["createDispute(uint256,bytes)"](2, extraData, { value: arbitrationCost }).then((tx) => tx.wait()); - const disputeId = 0; - - await network.provider.send("evm_increaseTime", [2000]); // Wait for minStakingTime - await network.provider.send("evm_mine"); - await sortitionModule.passPhase().then((tx) => tx.wait()); // Staking -> Generating - - await sortitionModule.passPhase().then((tx) => tx.wait()); // Generating -> Drawing - await core.draw(disputeId, 70, { gasLimit: 10000000 }); - - return disputeId; - }; - - const advanceToCommitPeriod = async (disputeId: number) => { - // Advance from evidence to commit period - await core.passPeriod(disputeId).then((tx) => tx.wait()); - - // Verify we're in commit period - const dispute = await core.disputes(disputeId); - expect(dispute[2]).to.equal(Period.commit); // period is at index 2 - }; - - const advanceToVotePeriod = async (disputeId: number) => { - // Advance from commit to vote period - const dispute = await core.disputes(disputeId); - const courtId = dispute[0]; // courtID is at index 0 - const court = await core.courts(courtId); - // Court struct: parent, hiddenVotes, children[], minStake, alpha, feeForJuror, jurorsForCourtJump, disabled, timesPerPeriod[] - // timesPerPeriod is a mapping, we need to check the actual structure - const timesPerPeriod = [300, 300, 300, 300]; // Default times from deployment - const commitPeriod = timesPerPeriod[Period.commit]; - - await network.provider.send("evm_increaseTime", [Number(commitPeriod)]); - await network.provider.send("evm_mine"); - - await core.passPeriod(disputeId).then((tx) => tx.wait()); - - // Verify we're in vote period - const updatedDispute = await core.disputes(disputeId); - expect(updatedDispute[2]).to.equal(Period.vote); // period is at index 2 - }; - - const getVoteIDsForJuror = async (disputeId: number, juror: HardhatEthersSigner) => { - const localDisputeId = await disputeKitShutter.coreDisputeIDToLocal(disputeId); - const nbRounds = await disputeKitShutter.getNumberOfRounds(localDisputeId); - const roundIndex = Number(nbRounds) - 1; - - // Get all votes for this round and filter by juror - const voteIDs: bigint[] = []; - const maxVotes = 10; // Reasonable limit for testing - - for (let i = 0; i < maxVotes; i++) { - try { - const voteInfo = await disputeKitShutter.getVoteInfo(disputeId, roundIndex, i); - if (voteInfo[0] === juror.address) { - // account is at index 0 - voteIDs.push(BigInt(i)); - } - } catch { - // No more votes - break; - } - } - - return voteIDs; - }; - - // ************************************* // - // * Tests * // - // ************************************* // - - describe("Commit Phase - castCommitShutter()", () => { - describe("Successful commits", () => { - it("Should allow juror to commit vote with recovery commitment", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - expect(voteIDs.length).to.be.greaterThan(0); - - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await expect( - disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote) - ) - .to.emit(disputeKitShutter, "CommitCastShutter") - .withArgs(disputeId, juror1.address, fullCommit, recoveryCommit, identity, encryptedVote); - - // Verify recovery commitment was stored - const localDisputeId = await disputeKitShutter.coreDisputeIDToLocal(disputeId); - const storedRecoveryCommit = await disputeKitShutter.recoveryCommitments(localDisputeId, 0, voteIDs[0]); - expect(storedRecoveryCommit).to.equal(recoveryCommit); - }); - - it("Should allow juror to update commitment multiple times", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - - // First commitment - const { fullCommit: commit1, recoveryCommit: recovery1 } = generateCommitments(1n, 111n, "First justification"); - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, commit1, recovery1, identity, encryptedVote); - - // Second commitment (overwrites first) - const { fullCommit: commit2, recoveryCommit: recovery2 } = generateCommitments( - 2n, - 222n, - "Second justification" - ); - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, commit2, recovery2, identity, encryptedVote); - - // Verify only the second commitment is stored - const localDisputeId = await disputeKitShutter.coreDisputeIDToLocal(disputeId); - const storedRecoveryCommit = await disputeKitShutter.recoveryCommitments(localDisputeId, 0, voteIDs[0]); - expect(storedRecoveryCommit).to.equal(recovery2); - }); - }); - - describe("Failed commits", () => { - it("Should revert if recovery commitment is empty", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit } = generateCommitments(choice, salt, justification); - - await expect( - disputeKitShutter.connect(juror1).castCommitShutter( - disputeId, - voteIDs, - fullCommit, - ethers.ZeroHash, // Empty recovery commit - identity, - encryptedVote - ) - ).to.be.revertedWithCustomError(disputeKitShutter, "EmptyRecoveryCommit"); - }); - - it("Should revert if not in commit period", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - // Still in evidence period - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await expect( - disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote) - ).to.be.revertedWithCustomError(disputeKitShutter, "NotCommitPeriod"); - }); - - it("Should revert if juror doesn't own the vote", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await expect( - disputeKitShutter.connect(juror2).castCommitShutter( - disputeId, - voteIDs, // Using juror1's vote IDs - fullCommit, - recoveryCommit, - identity, - encryptedVote - ) - ).to.be.revertedWithCustomError(disputeKitShutter, "JurorHasToOwnTheVote"); - }); - }); - }); - - describe("Normal Flow - Bot Reveals", () => { - describe("Successful reveals", () => { - it("Should allow bot to reveal vote with full justification", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - // Juror commits - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - // Bot reveals vote - await expect(disputeKitShutter.connect(bot).castVoteShutter(disputeId, voteIDs, choice, salt, justification)) - .to.emit(disputeKitShutter, "VoteCast") - .withArgs(disputeId, juror1.address, voteIDs, choice, justification); - - // Verify vote was counted - const voteInfo = await disputeKitShutter.getVoteInfo(disputeId, 0, Number(voteIDs[0])); - expect(voteInfo[3]).to.be.true; // voted is at index 3 - expect(voteInfo[2]).to.equal(choice); // choice is at index 2 - }); - }); - - describe("Failed reveals", () => { - it("Should revert if wrong choice provided", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - const wrongChoice = 2n; - await expect( - disputeKitShutter.connect(bot).castVoteShutter( - disputeId, - voteIDs, - wrongChoice, // Wrong choice - salt, - justification - ) - ).to.be.revertedWithCustomError(disputeKitShutter, "HashDoesNotMatchHiddenVoteCommitment"); - }); - - it("Should revert if wrong salt provided", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - const wrongSalt = 99999n; - await expect( - disputeKitShutter.connect(bot).castVoteShutter( - disputeId, - voteIDs, - choice, - wrongSalt, // Wrong salt - justification - ) - ).to.be.revertedWithCustomError(disputeKitShutter, "HashDoesNotMatchHiddenVoteCommitment"); - }); - - it("Should revert if wrong justification provided", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - const wrongJustification = "Wrong justification"; - await expect( - disputeKitShutter.connect(bot).castVoteShutter( - disputeId, - voteIDs, - choice, - salt, - wrongJustification // Wrong justification - ) - ).to.be.revertedWithCustomError(disputeKitShutter, "HashDoesNotMatchHiddenVoteCommitment"); - }); - - it("Should revert if vote already cast", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - // First vote succeeds - await disputeKitShutter.connect(bot).castVoteShutter(disputeId, voteIDs, choice, salt, justification); - - // Second vote fails - await expect( - disputeKitShutter.connect(bot).castVoteShutter(disputeId, voteIDs, choice, salt, justification) - ).to.be.revertedWithCustomError(disputeKitShutter, "VoteAlreadyCast"); - }); - }); - }); - - describe("Recovery Flow - Juror Reveals", () => { - describe("Successful recovery reveals", () => { - it("Should allow juror to recover vote without justification", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - // Juror commits - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - // Juror reveals vote (Shutter failed, so juror must reveal) - // Note: justification can be anything as it won't be validated - await expect( - disputeKitShutter.connect(juror1).castVoteShutter( - disputeId, - voteIDs, - choice, - salt, - "" // Empty justification is fine for recovery - ) - ) - .to.emit(disputeKitShutter, "VoteCast") - .withArgs(disputeId, juror1.address, voteIDs, choice, ""); - - // Verify vote was counted - const voteInfo = await disputeKitShutter.getVoteInfo(disputeId, 0, Number(voteIDs[0])); - expect(voteInfo[3]).to.be.true; // voted is at index 3 - expect(voteInfo[2]).to.equal(choice); // choice is at index 2 - }); - - it("Should validate against recovery commitment when juror reveals", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - // Juror can provide any justification - it won't be validated - const differentJustification = "This is a different justification that won't be checked"; - await expect( - disputeKitShutter.connect(juror1).castVoteShutter( - disputeId, - voteIDs, - choice, - salt, - differentJustification // Different justification is OK for recovery - ) - ).to.not.be.reverted; - }); - }); - - describe("Failed recovery reveals", () => { - it("Should revert if wrong choice in recovery", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - const wrongChoice = 2n; - await expect( - disputeKitShutter.connect(juror1).castVoteShutter( - disputeId, - voteIDs, - wrongChoice, // Wrong choice - salt, - "" - ) - ).to.be.revertedWithCustomError(disputeKitShutter, "HashDoesNotMatchHiddenVoteCommitment"); - }); - - it("Should revert if wrong salt in recovery", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - const wrongSalt = 99999n; - await expect( - disputeKitShutter.connect(juror1).castVoteShutter( - disputeId, - voteIDs, - choice, - wrongSalt, // Wrong salt - "" - ) - ).to.be.revertedWithCustomError(disputeKitShutter, "HashDoesNotMatchHiddenVoteCommitment"); - }); - - it("Should revert if non-juror tries to reveal without correct full commitment", async () => { - // Use the court with hidden votes (court ID 2) - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - // Attacker tries to reveal with only choice and salt (no justification) - await expect( - disputeKitShutter.connect(attacker).castVoteShutter( - disputeId, - voteIDs, - choice, - salt, - "" // No justification - would work for juror but not for others - ) - ).to.be.revertedWithCustomError(disputeKitShutter, "HashDoesNotMatchHiddenVoteCommitment"); - }); - }); - }); - - describe("Hash Function Behavior", () => { - it("Should return different hashes for juror vs non-juror callers", async () => { - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDs = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDs, fullCommit, recoveryCommit, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - // During castVoteShutter, the contract should use different hash logic - // For juror: hash(choice, salt) - // For non-juror: hash(choice, salt, justificationHash) - - // This is tested implicitly by the recovery flow tests above - // The juror can reveal with any justification, while non-juror must provide exact justification - }); - - it("Should correctly compute hash for normal flow", async () => { - // Test hashVote function directly - const justificationHash = ethers.keccak256(ethers.toUtf8Bytes(justification)); - const expectedHash = ethers.keccak256( - ethers.AbiCoder.defaultAbiCoder().encode(["uint256", "uint256", "bytes32"], [choice, salt, justificationHash]) - ); - - // When called by non-juror (normal case), should include justification - const computedHash = await disputeKitShutter.hashVote(choice, salt, justification); - expect(computedHash).to.equal(expectedHash); - }); - }); - - describe("Edge Cases and Security", () => { - it("Should handle mixed normal and recovery reveals in same dispute", async () => { - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDsJuror1 = await getVoteIDsForJuror(disputeId, juror1); - const voteIDsJuror2 = await getVoteIDsForJuror(disputeId, juror2); - - const { fullCommit: commit1, recoveryCommit: recovery1 } = generateCommitments(1n, 111n, "Juror 1 justification"); - const { fullCommit: commit2, recoveryCommit: recovery2 } = generateCommitments(2n, 222n, "Juror 2 justification"); - - // Both jurors commit - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDsJuror1, commit1, recovery1, identity, encryptedVote); - - await disputeKitShutter - .connect(juror2) - .castCommitShutter(disputeId, voteIDsJuror2, commit2, recovery2, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - // Juror1 uses recovery flow (Shutter failed for them) - await disputeKitShutter.connect(juror1).castVoteShutter( - disputeId, - voteIDsJuror1, - 1n, - 111n, - "Different justification" // Recovery doesn't check this - ); - - // Bot reveals juror2's vote normally - await disputeKitShutter.connect(bot).castVoteShutter( - disputeId, - voteIDsJuror2, - 2n, - 222n, - "Juror 2 justification" // Must match exactly - ); - - // Verify both votes were counted - const vote1Info = await disputeKitShutter.getVoteInfo(disputeId, 0, Number(voteIDsJuror1[0])); - const vote2Info = await disputeKitShutter.getVoteInfo(disputeId, 0, Number(voteIDsJuror2[0])); - - expect(vote1Info[3]).to.be.true; // voted is at index 3 - expect(vote1Info[2]).to.equal(1n); // choice is at index 2 - expect(vote2Info[3]).to.be.true; - expect(vote2Info[2]).to.equal(2n); - }); - - it("Should allow anyone to reveal vote with correct data only", async () => { - const disputeId = await createDisputeAndDraw(2, 3, SHUTTER_DK_ID); - await advanceToCommitPeriod(disputeId); - - const voteIDsJuror1 = await getVoteIDsForJuror(disputeId, juror1); - const { fullCommit, recoveryCommit } = generateCommitments(choice, salt, justification); - - await disputeKitShutter - .connect(juror1) - .castCommitShutter(disputeId, voteIDsJuror1, fullCommit, recoveryCommit, identity, encryptedVote); - - // Juror2 commits with a different choice - const differentChoice = 2n; - const voteIDsJuror2 = await getVoteIDsForJuror(disputeId, juror2); - const { fullCommit: commit2, recoveryCommit: recovery2 } = generateCommitments( - differentChoice, - salt, - justification - ); - - await disputeKitShutter - .connect(juror2) - .castCommitShutter(disputeId, voteIDsJuror2, commit2, recovery2, identity, encryptedVote); - - await advanceToVotePeriod(disputeId); - - // In normal Shutter operation, anyone (bot/attacker) can reveal the vote if they have the correct data - // This is by design - the security comes from the fact that only Shutter knows the decryption key - await expect( - disputeKitShutter.connect(attacker).castVoteShutter(disputeId, voteIDsJuror1, choice, salt, justification) - ) - .to.emit(disputeKitShutter, "VoteCast") - .withArgs(disputeId, juror1.address, voteIDsJuror1, choice, justification); - - // Attacker cannot change juror2's vote to a different choice - await expect( - disputeKitShutter.connect(attacker).castVoteShutter( - disputeId, - voteIDsJuror2, - 1n, // Wrong choice - salt, - justification - ) - ).to.be.revertedWithCustomError(disputeKitShutter, "HashDoesNotMatchHiddenVoteCommitment"); - }); - }); -}); diff --git a/contracts/test/arbitration/draw.ts b/contracts/test/arbitration/draw.ts deleted file mode 100644 index 4992501f1..000000000 --- a/contracts/test/arbitration/draw.ts +++ /dev/null @@ -1,444 +0,0 @@ -import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; -import { deployments, ethers, getNamedAccounts, network } from "hardhat"; -import { toBigInt, ContractTransactionResponse, HDNodeWallet } from "ethers"; -import { - PNK, - KlerosCore, - ArbitrableExample, - HomeGateway, - DisputeKitClassic, - SortitionModule, - IncrementalNG, -} from "../../typechain-types"; -import { expect } from "chai"; -import { Courts } from "../../deploy/utils"; - -/* eslint-disable no-unused-vars */ -/* eslint-disable no-unused-expressions */ // https://github.com/standard/standard/issues/690#issuecomment-278533482 - -describe("Draw Benchmark", async () => { - const ONE_TENTH_ETH = 10n ** 17n; - const ONE_THOUSAND_PNK = 10n ** 21n; - - const enum Period { - evidence, // Evidence can be submitted. This is also when drawing has to take place. - commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes. - vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not. - appeal, // The dispute can be appealed. - execution, // Tokens are redistributed and the ruling is executed. - } - - const enum Phase { - staking, // Stake can be updated during this phase. - freezing, // Phase during which the dispute kits can undergo the drawing process. Staking is not allowed during this phase. - } - - const enum DisputeKitPhase { - resolving, // No disputes that need drawing. - generating, // Waiting for a random number. Pass as soon as it is ready. - drawing, // Jurors can be drawn. - } - - let deployer: string; - let relayer: string; - let disputeKit: DisputeKitClassic; - let pnk: PNK; - let core: KlerosCore; - let arbitrable: ArbitrableExample; - let homeGateway: HomeGateway; - let sortitionModule: SortitionModule; - let rng: IncrementalNG; - let parentCourtMinStake: bigint; - let childCourtMinStake: bigint; - const RANDOM = 61688911660239508166491237672720926005752254046266901728404745669596507231249n; - const PARENT_COURT = 1; - const CHILD_COURT = 2; - const abiCoder = ethers.AbiCoder.defaultAbiCoder(); - - beforeEach("Setup", async () => { - ({ deployer, relayer } = await getNamedAccounts()); - - await deployments.fixture(["Arbitration", "VeaMock"], { - fallbackToGlobal: true, - keepExistingDeployments: false, - }); - disputeKit = await ethers.getContract("DisputeKitClassic"); - pnk = await ethers.getContract("PNK"); - core = await ethers.getContract("KlerosCore"); - homeGateway = await ethers.getContract("HomeGatewayToEthereum"); - arbitrable = await ethers.getContract("ArbitrableExample"); - sortitionModule = await ethers.getContract("SortitionModule"); - - parentCourtMinStake = await core.courts(Courts.GENERAL).then((court) => court.minStake); - - childCourtMinStake = 3n * 10n ** 20n; // 300 PNK - - // Make the tests more deterministic with this dummy RNG - await deployments.deploy("IncrementalNG", { - from: deployer, - args: [RANDOM], - log: true, - }); - rng = await ethers.getContract("IncrementalNG"); - - await sortitionModule.changeRandomNumberGenerator(rng.target).then((tx) => tx.wait()); - - // CourtId 2 = CHILD_COURT - const minStake = 3n * 10n ** 20n; // 300 PNK - const alpha = 10000n; - const feeForJuror = ONE_TENTH_ETH; - await core - .createCourt( - 1, - false, - minStake, - alpha, - feeForJuror, - 256, - [0, 0, 0, 10], // evidencePeriod, commitPeriod, votePeriod, appealPeriod - ethers.toBeHex(5), // Extra data for sortition module will return the default value of K) - [1] - ) - .then((tx) => tx.wait()); - }); - - type CountedDraws = { [address: string]: number }; - type SetStake = (wallet: HDNodeWallet) => Promise; - type ExpectFromDraw = (drawTx: Promise) => Promise; - - const draw = async ( - stake: SetStake, - createDisputeCourtId: number, - expectFromDraw: ExpectFromDraw, - unstake: SetStake - ) => { - const arbitrationCost = ONE_TENTH_ETH * 3n; - const [bridger] = await ethers.getSigners(); - const wallets: HDNodeWallet[] = []; - - // Stake some jurors - for (let i = 0; i < 16; i++) { - const wallet = ethers.Wallet.createRandom().connect(ethers.provider); - wallets.push(wallet); - - await bridger - .sendTransaction({ - to: wallet.address, - value: ethers.parseEther("10"), - }) - .then((tx) => tx.wait()); - expect(await ethers.provider.getBalance(wallet)).to.equal(ethers.parseEther("10")); - - await pnk.transfer(wallet.address, ONE_THOUSAND_PNK * 10n).then((tx) => tx.wait()); - expect(await pnk.balanceOf(wallet.address)).to.equal(ONE_THOUSAND_PNK * 10n); - - await pnk - .connect(wallet) - .approve(core.target, ONE_THOUSAND_PNK * 10n, { gasLimit: 300000 }) - .then((tx) => tx.wait()); - - await stake(wallet); - } - - // Create a dispute - const tx = await arbitrable["createDispute(string)"]("future of france", { - value: arbitrationCost, - }); - await tx.wait(); - if (tx.blockNumber === null) throw new Error("tx.blockNumber is null"); - const trace = await network.provider.send("debug_traceTransaction", [tx.hash]); - const [disputeId] = abiCoder.decode(["uint"], ethers.getBytes(`${trace.returnValue}`)); - const lastBlock = await ethers.provider.getBlock(tx.blockNumber - 1); - if (lastBlock?.hash === null || lastBlock?.hash === undefined) throw new Error("lastBlock is null || undefined"); - - // Relayer tx - await homeGateway - .connect(await ethers.getSigner(relayer)) - ["relayCreateDispute((bytes32,uint256,address,uint256,uint256,uint256,string,uint256,bytes))"]( - { - foreignBlockHash: lastBlock?.hash, - foreignChainID: 31337, - foreignArbitrable: arbitrable.target, - foreignDisputeID: disputeId, - externalDisputeID: ethers.keccak256(ethers.toUtf8Bytes("future of france")), - templateId: 0, - templateUri: "", - choices: 2, - extraData: `0x000000000000000000000000000000000000000000000000000000000000000${createDisputeCourtId}0000000000000000000000000000000000000000000000000000000000000003`, - }, - { value: arbitrationCost } - ) - .then((tx) => tx.wait()); - - await network.provider.send("evm_increaseTime", [2000]); // Wait for minStakingTime - await network.provider.send("evm_mine"); - await sortitionModule.passPhase().then((tx) => tx.wait()); // Staking -> Generating - - await sortitionModule.passPhase().then((tx) => tx.wait()); // Generating -> Drawing - await expectFromDraw(core.draw(0, 20, { gasLimit: 1000000 })); - - await network.provider.send("evm_increaseTime", [2000]); // Wait for maxDrawingTime - await sortitionModule.passPhase().then((tx) => tx.wait()); // Drawing -> Staking - expect(await sortitionModule.phase()).to.equal(Phase.staking); - - // Unstake jurors - for (const wallet of wallets) { - await unstake(wallet); - } - }; - - const countDraws = async (blockNumber: number) => { - const draws: Array = await core.queryFilter(core.filters.Draw(), blockNumber, blockNumber); - return draws.reduce((acc: { [address: string]: number }, draw) => { - const address = draw.args._address; - acc[address] = acc[address] ? acc[address] + 1 : 1; - return acc; - }, {}); - }; - - it("Stakes in parent court and should draw jurors in parent court", async () => { - const stake = async (wallet: HDNodeWallet) => { - await core - .connect(wallet) - .setStake(PARENT_COURT, ONE_THOUSAND_PNK * 5n, { gasLimit: 5000000 }) - .then((tx) => tx.wait()); - - expect(await sortitionModule.getJurorBalance(wallet.address, 1)).to.deep.equal([ - ONE_THOUSAND_PNK * 5n, // totalStaked - 0, // totalLocked - ONE_THOUSAND_PNK * 5n, // stakedInCourt - PARENT_COURT, // nbOfCourts - ]); - }; - let countedDraws: CountedDraws; - const expectFromDraw = async (drawTx: Promise) => { - const tx = await (await drawTx).wait(); - if (!tx) throw new Error("Failed to get transaction receipt"); - expect(tx) - .to.emit(core, "Draw") - .withArgs(anyValue, 0, 0, 0) - .to.emit(core, "Draw") - .withArgs(anyValue, 0, 0, 1) - .to.emit(core, "Draw") - .withArgs(anyValue, 0, 0, 2); - if (tx?.blockNumber === undefined) throw new Error("txBlockNumber is null"); - countedDraws = await countDraws(tx.blockNumber); - for (const [address, draws] of Object.entries(countedDraws)) { - expect(await sortitionModule.getJurorBalance(address, PARENT_COURT)).to.deep.equal([ - ONE_THOUSAND_PNK * 5n, // totalStaked - parentCourtMinStake * toBigInt(draws), // totalLocked - ONE_THOUSAND_PNK * 5n, // stakedInCourt - 1, // nbOfCourts - ]); - expect(await sortitionModule.getJurorBalance(address, CHILD_COURT)).to.deep.equal([ - ONE_THOUSAND_PNK * 5n, // totalStaked - parentCourtMinStake * toBigInt(draws), // totalLocked - 0, // stakedInCourt - 1, // nbOfCourts - ]); - } - expect(await core.getRoundInfo(0, 0).then((round) => round.drawIterations)).to.equal(3); - }; - - const unstake = async (wallet: HDNodeWallet) => { - await core - .connect(wallet) - .setStake(PARENT_COURT, 0, { gasLimit: 5000000 }) - .then((tx) => tx.wait()); - const locked = parentCourtMinStake * toBigInt(countedDraws[wallet.address] ?? 0); - expect( - await sortitionModule.getJurorBalance(wallet.address, PARENT_COURT), - "Drawn jurors have a locked stake in the parent court" - ).to.deep.equal([ - locked, // totalStaked won't go lower than locked amount - locked, // totalLocked - 0, // stakedInCourt - 0, // nbOfCourts - ]); - expect( - await sortitionModule.getJurorBalance(wallet.address, CHILD_COURT), - "No locked stake in the child court" - ).to.deep.equal([ - locked, // totalStaked won't go lower than locked amount - locked, // totalLocked - 0, // stakedInCourt - 0, // nbOfCourts - ]); - }; - - await draw(stake, PARENT_COURT, expectFromDraw, unstake); - }); - - it("Stakes in parent court and should draw nobody in subcourt [ @skip-on-coverage ]", async () => { - const stake = async (wallet: HDNodeWallet) => { - await core - .connect(wallet) - .setStake(PARENT_COURT, ONE_THOUSAND_PNK * 5n, { gasLimit: 5000000 }) - .then((tx) => tx.wait()); - }; - - const expectFromDraw = async (drawTx: Promise) => { - expect(await drawTx).to.not.emit(core, "Draw"); - expect(await core.getRoundInfo(0, 0).then((round) => round.drawIterations)).to.equal(20); - }; - - const unstake = async (wallet: HDNodeWallet) => { - await core - .connect(wallet) - .setStake(PARENT_COURT, 0, { gasLimit: 5000000 }) - .then((tx) => tx.wait()); - expect( - await sortitionModule.getJurorBalance(wallet.address, PARENT_COURT), - "No locked stake in the parent court" - ).to.deep.equal([ - 0, // totalStaked - 0, // totalLocked - 0, // stakedInCourt - 0, // nbOfCourts - ]); - expect( - await sortitionModule.getJurorBalance(wallet.address, CHILD_COURT), - "No locked stake in the child court" - ).to.deep.equal([ - 0, // totalStaked - 0, // totalLocked - 0, // stakedInCourt - 0, // nbOfCourts - ]); - }; - - await draw(stake, CHILD_COURT, expectFromDraw, unstake); - }); - - it("Stakes in subcourt and should draw jurors in parent court", async () => { - const stake = async (wallet: HDNodeWallet) => { - await core - .connect(wallet) - .setStake(CHILD_COURT, ONE_THOUSAND_PNK * 5n, { gasLimit: 5000000 }) - .then((tx) => tx.wait()); - }; - let countedDraws: CountedDraws; - const expectFromDraw = async (drawTx: Promise) => { - const tx = await (await drawTx).wait(); - if (!tx) throw new Error("Failed to get transaction receipt"); - expect(tx) - .to.emit(core, "Draw") - .withArgs(anyValue, 0, 0, 0) - .to.emit(core, "Draw") - .withArgs(anyValue, 0, 0, 1) - .to.emit(core, "Draw") - .withArgs(anyValue, 0, 0, 2); - - countedDraws = await countDraws(tx.blockNumber); - for (const [address, draws] of Object.entries(countedDraws)) { - expect(await sortitionModule.getJurorBalance(address, PARENT_COURT)).to.deep.equal([ - ONE_THOUSAND_PNK * 5n, // totalStaked - parentCourtMinStake * toBigInt(draws), // totalLocked - 0, // stakedInCourt - 1, // nbOfCourts - ]); - expect(await sortitionModule.getJurorBalance(address, CHILD_COURT)).to.deep.equal([ - ONE_THOUSAND_PNK * 5n, // totalStaked - parentCourtMinStake * toBigInt(draws), // totalLocked - ONE_THOUSAND_PNK * 5n, // stakedInCourt - 1, // nbOfCourts - ]); - } - expect(await core.getRoundInfo(0, 0).then((round) => round.drawIterations)).to.equal(3); - }; - - const unstake = async (wallet: HDNodeWallet) => { - await core - .connect(wallet) - .setStake(CHILD_COURT, 0, { gasLimit: 5000000 }) - .then((tx) => tx.wait()); - const locked = parentCourtMinStake * toBigInt(countedDraws[wallet.address] ?? 0); - expect( - await sortitionModule.getJurorBalance(wallet.address, PARENT_COURT), - "No locked stake in the parent court" - ).to.deep.equal([ - locked, // totalStaked won't go lower than locked amount - locked, // totalLocked - 0, // stakedInCourt - 0, // nbOfCourts - ]); - expect( - await sortitionModule.getJurorBalance(wallet.address, CHILD_COURT), - "Drawn jurors have a locked stake in the child court" - ).to.deep.equal([ - locked, // totalStaked won't go lower than locked amount - locked, // totalLocked - 0, // stakedInCourt - 0, // nbOfCourts - ]); - }; - - await draw(stake, PARENT_COURT, expectFromDraw, unstake); - }); - - it("Stakes in subcourt and should draw jurors in subcourt", async () => { - const stake = async (wallet: HDNodeWallet) => { - await core - .connect(wallet) - .setStake(CHILD_COURT, ONE_THOUSAND_PNK * 5n, { gasLimit: 5000000 }) - .then((tx) => tx.wait()); - }; - let countedDraws: CountedDraws; - const expectFromDraw = async (drawTx: Promise) => { - const tx = await (await drawTx).wait(); - if (!tx) throw new Error("Failed to get transaction receipt"); - expect(tx) - .to.emit(core, "Draw") - .withArgs(anyValue, 0, 0, 0) - .to.emit(core, "Draw") - .withArgs(anyValue, 0, 0, 1) - .to.emit(core, "Draw") - .withArgs(anyValue, 0, 0, 2); - - countedDraws = await countDraws(tx.blockNumber); - for (const [address, draws] of Object.entries(countedDraws)) { - expect(await sortitionModule.getJurorBalance(address, PARENT_COURT)).to.deep.equal([ - ONE_THOUSAND_PNK * 5n, // totalStaked - childCourtMinStake * toBigInt(draws), // totalLocked - 0, // stakedInCourt - 1, // nbOfCourts - ]); - expect(await sortitionModule.getJurorBalance(address, CHILD_COURT)).to.deep.equal([ - ONE_THOUSAND_PNK * 5n, // totalStaked - childCourtMinStake * toBigInt(draws), // totalLocked - ONE_THOUSAND_PNK * 5n, // stakedInCourt - 1, // nbOfCourts - ]); - } - expect(await core.getRoundInfo(0, 0).then((round) => round.drawIterations)).to.equal(3); - }; - - const unstake = async (wallet: HDNodeWallet) => { - await core - .connect(wallet) - .setStake(CHILD_COURT, 0, { gasLimit: 5000000 }) - .then((tx) => tx.wait()); - const locked = childCourtMinStake * toBigInt(countedDraws[wallet.address] ?? 0); - expect( - await sortitionModule.getJurorBalance(wallet.address, PARENT_COURT), - "No locked stake in the parent court" - ).to.deep.equal([ - locked, // totalStaked won't go lower than locked amount - locked, // totalLocked - 0, // stakedInCourt - 0, // nbOfCourts - ]); - expect( - await sortitionModule.getJurorBalance(wallet.address, CHILD_COURT), - "Drawn jurors have a locked stake in the child court" - ).to.deep.equal([ - locked, // totalStaked won't go lower than locked amount - locked, // totalLocked - 0, // stakedInCourt - 0, // nbOfCourts - ]); - }; - - await draw(stake, CHILD_COURT, expectFromDraw, unstake); - }); -}); diff --git a/contracts/test/arbitration/index.ts b/contracts/test/arbitration/index.ts deleted file mode 100644 index 127fa2500..000000000 --- a/contracts/test/arbitration/index.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { expect } from "chai"; -import { deployments, ethers } from "hardhat"; -import { - KlerosCore, - DisputeKitClassic, - DisputeKitShutter, - DisputeKitGated, - DisputeKitGatedShutter, -} from "../../typechain-types"; -import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; - -describe("DisputeKitClassic", async () => { - // eslint-disable-next-line no-unused-vars - let deployer: HardhatEthersSigner; - let core: KlerosCore, - disputeKit: DisputeKitClassic, - disputeKitShutter: DisputeKitShutter, - disputeKitGated: DisputeKitGated, - disputeKitGatedShutter: DisputeKitGatedShutter; - - before("Deploying", async () => { - [deployer] = await ethers.getSigners(); - [core, disputeKit, disputeKitShutter, disputeKitGated, disputeKitGatedShutter] = await deployContracts(); - }); - - it("Kleros Core initialization", async () => { - const events = await core.queryFilter(core.filters.DisputeKitCreated()); - expect(events.length).to.equal(4); - expect(events[0].args._disputeKitID).to.equal(1); - expect(events[0].args._disputeKitAddress).to.equal(disputeKit.target); - expect(events[1].args._disputeKitID).to.equal(2); - expect(events[1].args._disputeKitAddress).to.equal(disputeKitShutter.target); - expect(events[2].args._disputeKitID).to.equal(3); - expect(events[2].args._disputeKitAddress).to.equal(disputeKitGated.target); - expect(events[3].args._disputeKitID).to.equal(4); - expect(events[3].args._disputeKitAddress).to.equal(disputeKitGatedShutter.target); - - // Reminder: the Forking court will be added which will break these expectations. - const events2 = await core.queryFilter(core.filters.CourtCreated()); - expect(events2.length).to.equal(1); - expect(events2[0].args._courtID).to.equal(1); - expect(events2[0].args._parent).to.equal(0); - expect(events2[0].args._hiddenVotes).to.equal(false); - expect(events2[0].args._minStake).to.equal(ethers.parseUnits("200", 18)); - expect(events2[0].args._alpha).to.equal(10000); - expect(events2[0].args._feeForJuror).to.equal(ethers.parseUnits("0.1", 18)); - expect(events2[0].args._jurorsForCourtJump).to.equal(256); - expect(events2[0].args._timesPerPeriod).to.deep.equal([0, 0, 0, 10]); - expect(events2[0].args._supportedDisputeKits).to.deep.equal([1]); - - const events3 = await core.queryFilter(core.filters.DisputeKitEnabled()); - expect(events3.length).to.equal(4); - - const classicDisputeKit = events3[0].args; - expect(classicDisputeKit._courtID).to.equal(1); - expect(classicDisputeKit._disputeKitID).to.equal(1); - expect(classicDisputeKit._enable).to.equal(true); - - const shutterDisputeKit = events3[1].args; - expect(shutterDisputeKit._courtID).to.equal(1); - expect(shutterDisputeKit._disputeKitID).to.equal(2); - expect(shutterDisputeKit._enable).to.equal(true); - - const gatedDisputeKit = events3[2].args; - expect(gatedDisputeKit._courtID).to.equal(1); - expect(gatedDisputeKit._disputeKitID).to.equal(3); - expect(gatedDisputeKit._enable).to.equal(true); - - const gatedShutterDisputeKit = events3[3].args; - expect(gatedShutterDisputeKit._courtID).to.equal(1); - expect(gatedShutterDisputeKit._disputeKitID).to.equal(4); - expect(gatedShutterDisputeKit._enable).to.equal(true); - }); - - it("Should create a dispute", async () => { - await expect( - disputeKit.connect(deployer).createDispute(0, 0, ethers.toBeHex(3), "0x00") - ).to.be.revertedWithCustomError(disputeKit, "KlerosCoreOnly"); - - const tx = await core - .connect(deployer) - ["createDispute(uint256,bytes)"](2, "0x00", { value: ethers.parseEther("0.3") }); - expect(tx).to.emit(core, "DisputeCreation").withArgs(0, deployer.address); - expect(tx).to.emit(disputeKit, "DisputeCreation").withArgs(0, 2, "0x00"); - - await disputeKit.disputes(0).then((disputes) => { - expect(disputes[0]).to.equal(2); - }); - - console.log(`choice 0: ${await disputeKit.getRoundInfo(0, 0, 0)}`); - console.log(`choice 1: ${await disputeKit.getRoundInfo(0, 0, 1)}`); - console.log(`choice 2: ${await disputeKit.getRoundInfo(0, 0, 2)}`); - }); -}); - -async function deployContracts(): Promise< - [KlerosCore, DisputeKitClassic, DisputeKitShutter, DisputeKitGated, DisputeKitGatedShutter] -> { - await deployments.fixture(["Arbitration", "VeaMock"], { - fallbackToGlobal: true, - keepExistingDeployments: false, - }); - const disputeKit = await ethers.getContract("DisputeKitClassic"); - const disputeKitShutter = await ethers.getContract("DisputeKitShutter"); - const disputeKitGated = await ethers.getContract("DisputeKitGated"); - const disputeKitGatedShutter = await ethers.getContract("DisputeKitGatedShutter"); - const core = await ethers.getContract("KlerosCore"); - return [core, disputeKit, disputeKitShutter, disputeKitGated, disputeKitGatedShutter]; -} diff --git a/contracts/test/arbitration/ruler.ts b/contracts/test/arbitration/ruler.ts deleted file mode 100644 index dafdb59da..000000000 --- a/contracts/test/arbitration/ruler.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { expect } from "chai"; -import { deployments, ethers } from "hardhat"; -import { ZeroAddress, parseEther } from "ethers"; -import { DisputeResolver, KlerosCoreRuler } from "../../typechain-types"; -import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; -import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; - -describe("KlerosCoreRuler", async () => { - // eslint-disable-next-line no-unused-vars - let deployer: HardhatEthersSigner, dev: HardhatEthersSigner, dev2: HardhatEthersSigner; - let core: KlerosCoreRuler; - let resolver: DisputeResolver; - - enum RulingMode { - uninitialized, - manual, // executeRuling() is called manually. - automaticRandom, // The ruling is given randomly automatically. - automaticPreset, // The ruling is given automatically with a preset value. - } - - const courtId = 1; - const minJurors = 3; - const disputeKitId = 1; - const extraData = ethers.AbiCoder.defaultAbiCoder().encode( - ["uint96", "uint96", "uint256"], - [courtId, minJurors, disputeKitId] - ); - - before("Deploying", async () => { - [deployer, dev, dev2] = await ethers.getSigners(); - [core, resolver] = await deployContracts(); - - // Create dummy disputes to distinguish between arbitrable-level and arbitrator-level disputeIDs - await core.changeRulingModeToManual(deployer.address); - await core["createDispute(uint256,bytes)"](2, extraData, { value: parseEther("0.3") }); - }); - - it("Should have initialized the Arbitrator", async () => { - // Reminder: the Forking court will be added which will break these expectations. - let events = await core.queryFilter(core.filters.CourtCreated()); - expect(events.length).to.equal(1); - expect(events[0].args._courtID).to.equal(1); - expect(events[0].args._parent).to.equal(0); - expect(events[0].args._alpha).to.equal(10000); - expect(events[0].args._feeForJuror).to.equal(10n ** 17n); - expect(events[0].args._jurorsForCourtJump).to.equal(16); - }); - - it("Should fail to create a dispute without setting the RulingMode first", async () => { - await expect( - resolver.createDisputeForTemplate(extraData, "", "", 3, { value: parseEther("0.3") }) - ).to.be.revertedWithCustomError(core, "RulingModeNotSet"); - }); - - it("Should allow anyone to set the RulingMode for an uninitialized arbitrable", async () => { - expect(await core.rulers(resolver.target)).to.equal(ZeroAddress); - - await expect(core.connect(dev).changeRulingModeToAutomaticRandom(resolver.target)) - .to.emit(core, "RulerSettingsChanged") - .withArgs(resolver.target, [RulingMode.automaticRandom, 0, false, false]); - - expect(await core.rulers(resolver.target)).to.equal(dev.address); - }); - - it("Should only allow the arbitrable's ruler to set the RulingMode", async () => { - expect(await core.rulers(resolver.target)).to.equal(dev.address); - - await expect(core.connect(dev2).changeRulingModeToManual(resolver.target)).revertedWithCustomError( - core, - "RulerOnly" - ); - - await expect(core.connect(deployer).changeRulingModeToManual(resolver.target)).revertedWithCustomError( - core, - "RulerOnly" - ); - - expect(await core.rulers(resolver.target)).to.equal(dev.address); - }); - - it("Should create a dispute and automatically execute a random ruling", async () => { - await expect(core.connect(dev).changeRulingModeToAutomaticRandom(resolver.target)) - .to.emit(core, "RulerSettingsChanged") - .withArgs(resolver.target, [RulingMode.automaticRandom, 0, false, false]); - - const disputeID = 1; - const localDisputeID = disputeID - 1; - const templateId = disputeID - 1; - - await expect(resolver.createDisputeForTemplate(extraData, "", "", 3, { value: parseEther("0.3") })) - .to.emit(core, "DisputeCreation") - .withArgs(disputeID, resolver.target) - .and.to.emit(core, "AutoRuled") - .withArgs(resolver.target, RulingMode.automaticRandom, disputeID, anyValue, anyValue, anyValue) - .and.to.emit(core, "Ruling") - .withArgs(resolver.target, disputeID, anyValue) - .and.to.emit(core, "TokenAndETHShift") - .withArgs(dev.address, disputeID, 0, 1, 0, anyValue, ZeroAddress) - .and.to.emit(resolver, "DisputeRequest") - .withArgs(core.target, disputeID, localDisputeID, templateId, "") - .and.to.emit(resolver, "Ruling") - .withArgs(core.target, disputeID, anyValue); - }); - - it("Should create a dispute and automatically execute a preset ruling", async () => { - await expect(core.connect(dev).changeRulingModeToAutomaticPreset(resolver.target, 2, true, false)) - .to.emit(core, "RulerSettingsChanged") - .withArgs(resolver.target, [RulingMode.automaticPreset, 2, true, false]); - - const disputeID = 2; - const localDisputeID = disputeID - 1; - const templateId = disputeID - 1; - - await expect(resolver.createDisputeForTemplate(extraData, "", "", 3, { value: parseEther("0.3") })) - .to.emit(core, "DisputeCreation") - .withArgs(disputeID, resolver.target) - .and.to.emit(core, "AutoRuled") - .withArgs(resolver.target, RulingMode.automaticPreset, disputeID, 2, true, false) - .and.to.emit(core, "Ruling") - .withArgs(resolver.target, disputeID, 2) - .and.to.emit(core, "TokenAndETHShift") - .withArgs(dev.address, disputeID, 0, 1, 0, anyValue, ZeroAddress) - .and.to.emit(resolver, "DisputeRequest") - .withArgs(core.target, disputeID, localDisputeID, templateId, "") - .and.to.emit(resolver, "Ruling") - .withArgs(core.target, disputeID, 2); - }); - - it("Should create a dispute and manually execute a ruling", async () => { - await expect(core.connect(dev).changeRulingModeToManual(resolver.target)) - .to.emit(core, "RulerSettingsChanged") - .withArgs(resolver.target, [RulingMode.manual, 0, false, false]); - - const disputeID = 3; - const localDisputeID = disputeID - 1; - const templateId = disputeID - 1; - - await expect(resolver.createDisputeForTemplate(extraData, "", "", 3, { value: parseEther("0.3") })) - .to.emit(core, "DisputeCreation") - .withArgs(disputeID, resolver.target) - .and.to.emit(resolver, "DisputeRequest") - .withArgs(core.target, disputeID, localDisputeID, templateId, ""); - - await expect(core.connect(deployer).executeRuling(disputeID, 3, true, true)).revertedWithCustomError( - core, - "RulerOnly" - ); - - await expect(core.connect(dev).executeRuling(disputeID, 3, true, true)) - .and.to.emit(core, "Ruling") - .withArgs(resolver.target, disputeID, 3) - .and.to.emit(resolver, "Ruling") - .withArgs(core.target, disputeID, 3); - - await expect(core.execute(disputeID, 0)) - .and.to.emit(core, "TokenAndETHShift") - .withArgs(dev.address, disputeID, 0, 1, 0, anyValue, ZeroAddress); - }); -}); - -async function deployContracts(): Promise<[KlerosCoreRuler, DisputeResolver]> { - await deployments.fixture(["ArbitrationRuler"], { - fallbackToGlobal: true, - keepExistingDeployments: false, - }); - const resolver = await ethers.getContract("DisputeResolverRuler"); - const core = await ethers.getContract("KlerosCoreRuler"); - return [core, resolver]; -} diff --git a/contracts/test/arbitration/staking-neo.ts b/contracts/test/arbitration/staking-neo.ts deleted file mode 100644 index 9cd83efeb..000000000 --- a/contracts/test/arbitration/staking-neo.ts +++ /dev/null @@ -1,793 +0,0 @@ -import { ethers, getNamedAccounts, network, deployments } from "hardhat"; -import { - PNK, - RandomizerRNG, - RandomizerMock, - SortitionModule, - KlerosCore, - TestERC721, - DisputeResolver, - ChainlinkRNG, - ChainlinkVRFCoordinatorV2Mock, -} from "../../typechain-types"; -import { expect } from "chai"; -import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; - -/* eslint-disable no-unused-vars */ -/* eslint-disable no-unused-expressions */ - -/************************************************************************************************ -Neo should behave like an arbitrator when all the following conditions are met: -- maxStake is high enough, -- totalMaxStaked is high enough, -- the juror has a NFT -- the arbitrable is whitelisted - -Otherwise it should behave like a Neo arbitrator. -************************************************************************************************/ - -// TODO: assert on sortition.totalStaked in happy case - -describe("Staking", async () => { - const ETH = (amount: number) => ethers.parseUnits(amount.toString()); - const PNK = ETH; - - const extraData = ethers.AbiCoder.defaultAbiCoder().encode( - ["uint256", "uint256", "uint256"], - [2, 3, 1] // courtId 2, minJurors 3, disputeKitId 1 - ); - - let deployer: string; - let juror: HardhatEthersSigner; - let guardian: HardhatEthersSigner; - let pnk: PNK; - let core: KlerosCore; - let sortition: SortitionModule; - let rng: ChainlinkRNG; - let vrfCoordinator: ChainlinkVRFCoordinatorV2Mock; - let nft: TestERC721; - let resolver: DisputeResolver; - let balanceBefore: bigint; - - const deployUnhappy = async () => { - ({ deployer } = await getNamedAccounts()); - - await deployments.fixture(["ArbitrationMainnet"], { - fallbackToGlobal: true, - keepExistingDeployments: false, - }); - pnk = await ethers.getContract("PNK"); - core = await ethers.getContract("KlerosCore"); - sortition = await ethers.getContract("SortitionModule"); - rng = await ethers.getContract("ChainlinkRNG"); - vrfCoordinator = await ethers.getContract("ChainlinkVRFCoordinator"); - resolver = await ethers.getContract("DisputeResolver"); - nft = await ethers.getContract("KlerosV2NeoEarlyUser"); - - // Juror signer setup and funding - const { firstWallet } = await getNamedAccounts(); - juror = await ethers.getSigner(firstWallet); - await pnk.transfer(juror.address, PNK(100_000)); - await ethers.getSigner(deployer).then((signer) => signer.sendTransaction({ to: juror.address, value: ETH(1) })); - - // Set new guardian - const { secondWallet } = await getNamedAccounts(); - guardian = await ethers.getSigner(secondWallet); - await ethers.getSigner(deployer).then((signer) => signer.sendTransaction({ to: guardian.address, value: ETH(1) })); - await core.changeGuardian(guardian.address); - }; - - const deploy = async () => { - await deployUnhappy(); - - // Sets up the happy path for Neo - await nft.safeMint(deployer); - await nft.safeMint(juror.address); - await sortition.changeMaxStakePerJuror(PNK(10_000)); - await sortition.changeMaxTotalStaked(PNK(20_000)); - }; - - const createDisputeAndReachGeneratingPhaseFromStaking = async () => { - const arbitrationCost = ETH(0.5); - await resolver.createDisputeForTemplate(extraData, "", "", 2, { value: arbitrationCost }); - await reachGeneratingPhaseFromStaking(); - }; - - const reachGeneratingPhaseFromStaking = async () => { - await network.provider.send("evm_increaseTime", [3600]); // Wait for minStakingTime - await network.provider.send("evm_mine"); - - expect(await sortition.phase()).to.be.equal(0); // Staking - await sortition.passPhase(); // Staking -> Generating - expect(await sortition.phase()).to.be.equal(1); // Generating - }; - - const drawFromGeneratingPhase = async () => { - expect(await sortition.phase()).to.be.equal(1); // Generating - - await network.provider.send("evm_mine"); - - await vrfCoordinator.fulfillRandomWords(1, rng.target, []); - await sortition.passPhase(); // Generating -> Drawing - expect(await sortition.phase()).to.be.equal(2); // Drawing - - await core.draw(0, 10); - }; - - const drawAndReachStakingPhaseFromGenerating = async () => { - await drawFromGeneratingPhase(); - - await network.provider.send("evm_increaseTime", [3600]); // Ensures that maxDrawingTime has passed - await network.provider.send("evm_mine"); - - await sortition.passPhase(); // Drawing -> Staking - expect(await sortition.phase()).to.be.equal(0); // Staking - }; - - /************************************************************************************************ - SHOULD BEHAVE LIKE A NEO ARBITRATOR - ************************************************************************************************/ - - describe("When arbitrable whitelist is disabled", () => { - before("Setup", async () => { - await deployUnhappy(); - await core.changeArbitrableWhitelistEnabled(false); - }); - - it("Should create a dispute", async () => { - const arbitrationCost = ETH(0.5); - expect(await resolver.createDisputeForTemplate(extraData, "", "", 2, { value: arbitrationCost })) - .to.emit(core, "DisputeCreation") - .withArgs(0, resolver.target); - }); - }); - - describe("When arbitrable whitelist is enabled", () => { - before("Setup", async () => { - await deployUnhappy(); - await core.changeArbitrableWhitelistEnabled(true); - }); - - describe("When arbitrable is not whitelisted", () => { - before("Setup", async () => { - await core.changeArbitrableWhitelist(resolver.target, false); - }); - - it("Should fail to create a dispute", async () => { - const arbitrationCost = ETH(0.5); - await expect( - resolver.createDisputeForTemplate(extraData, "", "", 2, { value: arbitrationCost }) - ).to.be.revertedWithCustomError(core, "ArbitrableNotWhitelisted"); - }); - }); - - describe("When arbitrable is whitelisted", () => { - before("Setup", async () => { - await core.changeArbitrableWhitelist(resolver.target, true); - }); - - it("Should create a dispute", async () => { - const arbitrationCost = ETH(0.5); - expect(await resolver.createDisputeForTemplate(extraData, "", "", 2, { value: arbitrationCost })) - .to.emit(core, "DisputeCreation") - .withArgs(0, resolver.target); - }); - }); - }); - - describe("When juror NFT is not set", async () => { - before("Setup", async () => { - await deployUnhappy(); - await core.changeJurorNft(ethers.ZeroAddress); - }); - - describe("When juror has no NFT", async () => { - it("Should be able to stake", async () => { - await pnk.connect(juror).approve(core.target, PNK(1000)); - await expect(await core.connect(juror).setStake(1, PNK(1000))) - .to.emit(sortition, "StakeSet") - .withArgs(juror.address, 1, PNK(1000), PNK(1000)); - expect(await sortition.totalStaked()).to.be.equal(PNK(1000)); - }); - }); - }); - - describe("When juror NFT is set", async () => { - describe("When juror has no NFT", async () => { - before("Setup", async () => { - await deployUnhappy(); - }); - - it("Should not be able to stake", async () => { - await pnk.connect(juror).approve(core.target, PNK(1000)); - await expect(core.connect(juror).setStake(1, PNK(1000))).to.be.revertedWithCustomError( - core, - "NotEligibleForStaking" - ); - }); - }); - - describe("When juror does have a NFT", async () => { - before("Setup", async () => { - await deployUnhappy(); - await nft.safeMint(juror.address); - }); - - it("Should be able to stake", async () => { - await pnk.connect(juror).approve(core.target, PNK(1000)); - await expect(await core.connect(juror).setStake(1, PNK(1000))) - .to.emit(sortition, "StakeSet") - .withArgs(juror.address, 1, PNK(1000), PNK(1000)); - expect(await sortition.totalStaked()).to.be.equal(PNK(1000)); - }); - }); - }); - - describe("When juror stakes less", async () => { - beforeEach("Setup", async () => { - await deployUnhappy(); - await nft.safeMint(juror.address); - - await pnk.connect(juror).approve(core.target, PNK(10_000)); - await core.connect(juror).setStake(1, PNK(1000)); - }); - - describe("When stakes are NOT delayed", () => { - it("Should be able to unstake", async () => { - expect(await core.connect(juror).setStake(1, PNK(500))) - .to.emit(sortition, "StakeSet") - .withArgs(juror.address, 1, PNK(500), PNK(500)); - expect(await sortition.totalStaked()).to.be.equal(PNK(500)); - - expect(await core.connect(juror).setStake(1, PNK(1001))) - .to.emit(sortition, "StakeSet") - .withArgs(juror.address, 1, PNK(1001), PNK(1001)); - expect(await sortition.totalStaked()).to.be.equal(PNK(1001)); - - expect(await core.connect(juror).setStake(1, PNK(0))) - .to.emit(sortition, "StakeSet") - .withArgs(juror.address, 1, PNK(0), PNK(0)); - expect(await sortition.totalStaked()).to.be.equal(PNK(0)); - }); - }); - - describe("When stakes are delayed", () => { - beforeEach("Setup", async () => { - await createDisputeAndReachGeneratingPhaseFromStaking(); - }); - - it("Should be able to unstake", async () => { - expect(await core.connect(juror).setStake(1, PNK(0))) - .to.emit(sortition, "StakeDelayed") - .withArgs(juror.address, 1, PNK(0)) - .to.not.emit(sortition, "StakeSet"); - expect(await sortition.totalStaked()).to.be.equal(PNK(1000)); - await drawAndReachStakingPhaseFromGenerating(); - expect(await sortition.executeDelayedStakes(10)) - .to.emit(sortition, "StakeSet") - .withArgs(juror.address, 1, PNK(0), PNK(1000)); // Staked amount won't go lower than locked amount. - }); - }); - }); - - describe("When juror stakes more", async () => { - beforeEach("Setup", async () => { - await deployUnhappy(); - await nft.safeMint(juror.address); - }); - - describe("When totalStaked is low", async () => { - describe("When stakes are NOT delayed", () => { - it("Should not be able to stake more than maxStakePerJuror", async () => { - await pnk.connect(juror).approve(core.target, PNK(5000)); - await expect(core.connect(juror).setStake(1, PNK(5000))).to.be.revertedWithCustomError( - core, - "StakingMoreThanMaxStakePerJuror" - ); - expect(await sortition.totalStaked()).to.be.equal(PNK(0)); - }); - }); - - describe("When stakes are delayed", () => { - it("Should not be able to stake more than maxStakePerJuror", async () => { - await createDisputeAndReachGeneratingPhaseFromStaking(); - await pnk.connect(juror).approve(core.target, PNK(5000)); - await expect(core.connect(juror).setStake(1, PNK(5000))).to.be.revertedWithCustomError( - core, - "StakingMoreThanMaxStakePerJuror" - ); - expect(await sortition.totalStaked()).to.be.equal(PNK(0)); - await drawAndReachStakingPhaseFromGenerating(); - await expect(sortition.executeDelayedStakes(10)).to.revertedWithCustomError( - sortition, - "NoDelayedStakeToExecute" - ); - expect(await sortition.totalStaked()).to.be.equal(PNK(0)); - }); - - it("Should be able to stake exactly maxStakePerJuror", async () => { - await pnk.connect(juror).approve(core.target, PNK(5000)); - await core.connect(juror).setStake(1, PNK(1000)); - await createDisputeAndReachGeneratingPhaseFromStaking(); - expect(await core.connect(juror).setStake(1, PNK(2000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(juror.address, 1, PNK(2000)) - .to.not.emit(sortition, "StakeSet"); - expect(await sortition.totalStaked()).to.be.equal(PNK(1000)); - await drawAndReachStakingPhaseFromGenerating(); - expect(await sortition.executeDelayedStakes(10)) - .to.emit(sortition, "StakeSet") - .withArgs(juror.address, 1, PNK(2000), PNK(2000)); - expect(await sortition.totalStaked()).to.be.equal(PNK(2000)); - }); - }); - }); - - describe("When totalStaked is close to maxTotalStaked", async () => { - beforeEach("Setup", async () => { - await sortition.changeMaxTotalStaked(PNK(3000)); - - // deployer increases totalStaked to 2000 - await nft.safeMint(deployer); - await pnk.approve(core.target, PNK(2000)); - await core.setStake(1, PNK(2000)); - }); - - describe("When stakes are NOT delayed", () => { - it("Should not be able to stake more than maxTotalStaked", async () => { - await pnk.connect(juror).approve(core.target, PNK(2000)); - await expect(core.connect(juror).setStake(1, PNK(2000))).to.be.revertedWithCustomError( - core, - "StakingMoreThanMaxTotalStaked" - ); - expect(await sortition.totalStaked()).to.be.equal(PNK(2000)); - }); - - it("Should be able to stake exactly maxTotalStaked", async () => { - await pnk.connect(juror).approve(core.target, PNK(1000)); - await expect(await core.connect(juror).setStake(1, PNK(1000))) - .to.emit(sortition, "StakeSet") - .withArgs(juror.address, 1, PNK(1000), PNK(1000)); - expect(await sortition.totalStaked()).to.be.equal(PNK(3000)); - }); - }); - - describe("When stakes are delayed", () => { - beforeEach("Setup", async () => { - await createDisputeAndReachGeneratingPhaseFromStaking(); - }); - - it("Should not be able to stake more than maxTotalStaked", async () => { - await pnk.connect(juror).approve(core.target, PNK(2000)); - await expect(core.connect(juror).setStake(1, PNK(2000))).to.be.revertedWithCustomError( - core, - "StakingMoreThanMaxTotalStaked" - ); - expect(await sortition.totalStaked()).to.be.equal(PNK(2000)); - await drawAndReachStakingPhaseFromGenerating(); - await expect(sortition.executeDelayedStakes(10)).to.revertedWithCustomError( - sortition, - "NoDelayedStakeToExecute" - ); - expect(await sortition.totalStaked()).to.be.equal(PNK(2000)); - }); - - it("Should be able to stake exactly maxTotalStaked", async () => { - await pnk.connect(juror).approve(core.target, PNK(1000)); - await expect(await core.connect(juror).setStake(1, PNK(1000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(juror.address, 1, PNK(1000)); - expect(await sortition.totalStaked()).to.be.equal(PNK(2000)); // Not updated until the delayed stake is executed - await drawAndReachStakingPhaseFromGenerating(); - await expect(await sortition.executeDelayedStakes(10)) - .to.emit(sortition, "StakeSet") - .withArgs(juror.address, 1, PNK(1000), PNK(1000)); - expect(await sortition.totalStaked()).to.be.equal(PNK(3000)); - }); - }); - }); - }); - - /************************************************************************************************ - SHOULD BEHAVE LIKE A REGULAR ARBITRATOR - ************************************************************************************************/ - - describe("When not paused", () => { - beforeEach("Setup", async () => { - await deploy(); - }); - - it("Should not allow anyone except the guardian or the owner to pause", async () => { - await expect(core.connect(juror).pause()).to.be.revertedWithCustomError(core, "GuardianOrOwnerOnly"); - }); - - it("Should allow the guardian to pause", async () => { - expect(await core.connect(guardian).pause()).to.emit(core, "Paused"); - expect(await core.paused()).to.equal(true); - }); - - it("Should allow the owner to pause", async () => { - expect(await core.pause()).to.emit(core, "Paused"); - expect(await core.paused()).to.equal(true); - }); - }); - - describe("When paused", () => { - beforeEach("Setup", async () => { - await deploy(); - - await pnk.approve(core.target, PNK(2000)); - await core.setStake(1, PNK(500)); - - await core.connect(guardian).pause(); - }); - - it("Should allow only the owner to unpause", async () => { - await expect(core.connect(guardian).unpause()).to.be.revertedWithCustomError(core, "OwnerOnly"); - expect(await core.unpause()).to.emit(core, "Unpaused"); - expect(await core.paused()).to.equal(false); - }); - - it("Should prevent stake increases", async () => { - await expect(core.setStake(1, PNK(1000))).to.be.revertedWithCustomError(core, "WhenNotPausedOnly"); - }); - - it("Should prevent stake decreases", async () => { - await expect(core.setStake(1, PNK(0))).to.be.revertedWithCustomError(core, "WhenNotPausedOnly"); - }); - }); - - describe("When outside the Staking phase", async () => { - const createSubcourtStakeAndCreateDispute = async () => { - expect(await sortition.phase()).to.be.equal(0); // Staking - await core.createCourt(1, false, PNK(1000), 1000, ETH(0.1), 3, [0, 0, 0, 0], ethers.toBeHex(3), [1]); // Parent - general court, Classic dispute kit - - await pnk.approve(core.target, PNK(4000)); - await core.setStake(1, PNK(2000)); - await core.setStake(2, PNK(2000)); - expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([1n, 2n]); - - const arbitrationCost = ETH(0.1) * 3n; - await resolver.createDisputeForTemplate(extraData, "", "", 2, { value: arbitrationCost }); - }; - - describe("When stake is increased once", async () => { - before("Setup", async () => { - await deploy(); - await createSubcourtStakeAndCreateDispute(); - await reachGeneratingPhaseFromStaking(); - balanceBefore = await pnk.balanceOf(deployer); - }); - - it("Should be outside the Staking phase", async () => { - expect(await sortition.phase()).to.be.equal(1); // Generating - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); - }); - - describe("When stake is increased", () => { - it("Should delay the stake increase", async () => { - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(0); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - await pnk.approve(core.target, PNK(1000)); - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - await expect(core.setStake(2, PNK(3000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(deployer, 2, PNK(3000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); // stake does not change - }); - - it("Should not transfer PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); - }); - - it("Should store the delayed stake for later", async () => { - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([deployer, 2, PNK(3000), false]); - }); - }); - - describe("When the Phase passes back to Staking", () => { - before("Setup", async () => { - await drawAndReachStakingPhaseFromGenerating(); - balanceBefore = await pnk.balanceOf(deployer); - }); - - it("Should execute the delayed stakes", async () => { - await expect(await sortition.executeDelayedStakes(10)) - .to.emit(sortition, "StakeSet") - .withArgs(deployer, 2, PNK(3000), PNK(5000)) - .to.not.emit(sortition, "StakeDelayed"); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([ - PNK(5000), - PNK(300), // we're the only juror so we are drawn 3 times - PNK(3000), - 2, - ]); // stake unchanged, delayed - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(2); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted - expect(await sortition.latestDelayedStakeIndex(deployer, 1)).to.be.equal(0); // Deprecated. Always 0 - }); - - it("Should transfer PNK after delayed stake execution", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore - PNK(1000)); // No PNK transfer - }); - }); - }); - - describe("When stake is decreased once", async () => { - before("Setup", async () => { - await deploy(); - await createSubcourtStakeAndCreateDispute(); - await reachGeneratingPhaseFromStaking(); - balanceBefore = await pnk.balanceOf(deployer); - }); - - it("Should be outside the Staking phase", async () => { - expect(await sortition.phase()).to.be.equal(1); // Generating - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); - }); - - describe("When stake is decreased", async () => { - it("Should delay the stake decrease", async () => { - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(0); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - await expect(core.setStake(2, PNK(1000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(deployer, 2, PNK(1000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); // stake unchanged, delayed - }); - - it("Should not transfer any PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); // No PNK transfer yet - }); - - it("Should store the delayed stake for later", async () => { - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([deployer, 2, PNK(1000), false]); - }); - }); - - describe("When the Phase passes back to Staking", () => { - before("Setup", async () => { - await drawAndReachStakingPhaseFromGenerating(); - balanceBefore = await pnk.balanceOf(deployer); - }); - - it("Should execute the delayed stakes by withdrawing PNK and reducing the stakes", async () => { - await expect(await sortition.executeDelayedStakes(10)) - .to.emit(sortition, "StakeSet") - .withArgs(deployer, 2, PNK(1000), PNK(3000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([ - PNK(3000), - PNK(300), // we're the only juror so we are drawn 3 times - PNK(1000), - 2, - ]); // stake unchanged, delayed - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(2); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted - expect(await sortition.latestDelayedStakeIndex(deployer, 1)).to.be.equal(0); // Deprecated. Always 0 - }); - - it("Should withdraw some PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore + PNK(1000)); // No PNK transfer yet - }); - }); - }); - - describe("When stake is decreased then increased back", async () => { - before("Setup", async () => { - await deploy(); - await createSubcourtStakeAndCreateDispute(); - await reachGeneratingPhaseFromStaking(); - balanceBefore = await pnk.balanceOf(deployer); - }); - - it("Should be outside the Staking phase", async () => { - expect(await sortition.phase()).to.be.equal(1); // Generating - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); - }); - - describe("When stake is decreased", async () => { - it("Should delay the stake decrease", async () => { - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(0); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - await expect(core.setStake(2, PNK(1000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(deployer, 2, PNK(1000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); // stake unchanged, delayed - }); - - it("Should not transfer any PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); // No PNK transfer yet - }); - - it("Should store the delayed stake for later", async () => { - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([deployer, 2, PNK(1000), false]); - }); - }); - - describe("When stake is increased back to the previous amount", () => { - it("Should delay the stake increase", async () => { - balanceBefore = await pnk.balanceOf(deployer); - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - await expect(core.setStake(2, PNK(2000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(deployer, 2, PNK(2000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); // stake unchanged, delayed - }); - - it("Should not transfer any PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); // No PNK transfer yet - }); - - it("Should store the delayed stake for later", async () => { - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([deployer, 2, PNK(1000), false]); - expect(await sortition.delayedStakes(2)).to.be.deep.equal([deployer, 2, PNK(2000), false]); - }); - }); - - describe("When the Phase passes back to Staking", () => { - before("Setup", async () => { - await drawAndReachStakingPhaseFromGenerating(); - balanceBefore = await pnk.balanceOf(deployer); - }); - - it("Should execute the delayed stakes but the stakes should remain the same", async () => { - await pnk.approve(core.target, PNK(1000)); - await expect(await sortition.executeDelayedStakes(10)) - .to.emit(sortition, "StakeSet") - .withArgs(deployer, 2, PNK(1000), PNK(3000)) - .to.emit(sortition, "StakeSet") - .withArgs(deployer, 2, PNK(2000), PNK(4000)); // 2nd delayed stake will override the first one - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([ - PNK(4000), - PNK(300), // we're the only juror so we are drawn 3 times - PNK(2000), - 2, - ]); // stake unchanged, delayed - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(3); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - }); - - it("Should not transfer any PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); // No PNK transfer yet - }); - }); - }); - - describe("When stake is increased then decreased back", async () => { - before("Setup", async () => { - await deploy(); - await createSubcourtStakeAndCreateDispute(); - await reachGeneratingPhaseFromStaking(); - balanceBefore = await pnk.balanceOf(deployer); - }); - - it("Should be outside the Staking phase", async () => { - expect(await sortition.phase()).to.be.equal(1); // Generating - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); - }); - - describe("When stake is increased", () => { - it("Should delay the stake increase", async () => { - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(0); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - await pnk.approve(core.target, PNK(1000)); - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - await expect(core.setStake(2, PNK(3000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(deployer, 2, PNK(3000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); // stake does not change - }); - - it("Should not transfer PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); - }); - - it("Should store the delayed stake for later", async () => { - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([deployer, 2, PNK(3000), false]); - }); - }); - - describe("When stake is decreased back to the previous amount", () => { - it("Should cancel out the stake decrease back", async () => { - balanceBefore = await pnk.balanceOf(deployer); - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - await expect(core.setStake(2, PNK(2000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(deployer, 2, PNK(2000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); // stake is unchanged - }); - - it("Should transfer back some PNK to the juror", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); // PNK balance left unchanged - }); - - it("Should store the delayed stake for later", async () => { - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([deployer, 2, PNK(3000), false]); - expect(await sortition.delayedStakes(2)).to.be.deep.equal([deployer, 2, PNK(2000), false]); - }); - }); - - describe("When the Phase passes back to Staking", () => { - before("Setup", async () => { - await drawAndReachStakingPhaseFromGenerating(); - balanceBefore = await pnk.balanceOf(deployer); - }); - - it("Should execute the delayed stakes but the stakes should remain the same", async () => { - await expect(sortition.executeDelayedStakes(10)) - .to.emit(await sortition, "StakeSet") - .withArgs(deployer, 2, PNK(2000), PNK(4000)) - .to.not.emit(sortition, "StakeDelayed"); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([ - PNK(4000), - PNK(300), // we're the only juror so we are drawn 3 times - PNK(2000), - 2, - ]); // stake unchanged, delayed - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(3); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - }); - - it("Should not transfer any PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); // No PNK transfer yet - }); - }); - }); - }); - - describe("When a juror is inactive", async () => { - before("Setup", async () => { - await deploy(); - }); - - it("Should unstake from all courts", async () => { - await core.createCourt(1, false, PNK(1000), 1000, ETH(0.1), 3, [0, 0, 0, 0], ethers.toBeHex(3), [1]); // Parent - general court, Classic dispute kit - - await pnk.approve(core.target, PNK(4000)); - await core.setStake(1, PNK(2000)); - await core.setStake(2, PNK(2000)); - expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([1, 2]); - - await createDisputeAndReachGeneratingPhaseFromStaking(); - await drawAndReachStakingPhaseFromGenerating(); - - await core.passPeriod(0); // Evidence -> Voting - await core.passPeriod(0); // Voting -> Appeal - await core.passPeriod(0); // Appeal -> Execution - - expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([1, 2]); - await core.execute(0, 0, 1); // 1 iteration should unstake from both courts - expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([]); - }); - }); -}); diff --git a/contracts/test/arbitration/staking.ts b/contracts/test/arbitration/staking.ts deleted file mode 100644 index d27a5f10e..000000000 --- a/contracts/test/arbitration/staking.ts +++ /dev/null @@ -1,414 +0,0 @@ -import { ethers, getNamedAccounts, network, deployments } from "hardhat"; -import { PNK, KlerosCore, SortitionModule, ChainlinkRNG, ChainlinkVRFCoordinatorV2Mock } from "../../typechain-types"; -import { expect } from "chai"; - -/* eslint-disable no-unused-vars */ -/* eslint-disable no-unused-expressions */ - -describe("Staking", async () => { - const ETH = (amount: number) => ethers.parseUnits(amount.toString()); - const PNK = ETH; - - const extraData = ethers.AbiCoder.defaultAbiCoder().encode( - ["uint256", "uint256", "uint256"], - [2, 3, 1] // courtId 2, minJurors 3, disputeKitId 1 - ); - - let deployer: string; - let pnk: PNK; - let core: KlerosCore; - let sortition: SortitionModule; - let rng: ChainlinkRNG; - let vrfCoordinator: ChainlinkVRFCoordinatorV2Mock; - - const deploy = async () => { - ({ deployer } = await getNamedAccounts()); - await deployments.fixture(["Arbitration"], { - fallbackToGlobal: true, - keepExistingDeployments: false, - }); - pnk = await ethers.getContract("PNK"); - core = await ethers.getContract("KlerosCore"); - sortition = await ethers.getContract("SortitionModule"); - rng = await ethers.getContract("ChainlinkRNG"); - vrfCoordinator = await ethers.getContract("ChainlinkVRFCoordinator"); - }; - - describe("When outside the Staking phase", async () => { - let balanceBefore: bigint; - - const reachDrawingPhase = async () => { - expect(await sortition.phase()).to.be.equal(0); // Staking - const arbitrationCost = ETH(0.1) * 3n; - await core.createCourt(1, false, PNK(1000), 1000, ETH(0.1), 3, [0, 0, 0, 0], ethers.toBeHex(3), [1]); // Parent - general court, Classic dispute kit - - await pnk.approve(core.target, PNK(4000)); - await core.setStake(1, PNK(2000)); - await core.setStake(2, PNK(2000)); - - expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([1n, 2n]); - - await core["createDispute(uint256,bytes)"](2, extraData, { value: arbitrationCost }); - - await network.provider.send("evm_increaseTime", [2000]); // Wait for minStakingTime - await network.provider.send("evm_mine"); - - await sortition.passPhase(); // Staking -> Generating - await network.provider.send("evm_mine"); - - balanceBefore = await pnk.balanceOf(deployer); - }; - - const reachStakingPhaseAfterDrawing = async () => { - await vrfCoordinator.fulfillRandomWords(1, rng.target, []); - await sortition.passPhase(); // Generating -> Drawing - await core.draw(0, 5000); - await sortition.passPhase(); // Drawing -> Staking - }; - - describe("When stake is increased once", async () => { - before("Setup", async () => { - await deploy(); - await reachDrawingPhase(); - }); - - it("Should be outside the Staking phase", async () => { - expect(await sortition.phase()).to.be.equal(1); // Drawing - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); - }); - - describe("When stake is increased", () => { - it("Should delay the stake increase", async () => { - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(0); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - await pnk.approve(core.target, PNK(1000)); - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - await expect(core.setStake(2, PNK(3000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(deployer, 2, PNK(3000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); // stake does not change - }); - - it("Should not transfer PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); - }); - - it("Should store the delayed stake for later", async () => { - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([deployer, 2, PNK(3000), false]); - }); - }); - - describe("When the Phase passes back to Staking", () => { - before("Setup", async () => { - await reachStakingPhaseAfterDrawing(); - balanceBefore = await pnk.balanceOf(deployer); - }); - - it("Should execute the delayed stakes", async () => { - await expect(sortition.executeDelayedStakes(10)) - .to.emit(sortition, "StakeSet") - .withArgs(deployer, 2, PNK(3000), PNK(5000)) - .to.not.emit(sortition, "StakeDelayed"); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([ - PNK(5000), - PNK(300), // we're the only juror so we are drawn 3 times - PNK(3000), - 2, - ]); // stake unchanged, delayed - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(2); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted - expect(await sortition.latestDelayedStakeIndex(deployer, 1)).to.be.equal(0); // Deprecated. Always 0 - }); - - it("Should transfer PNK after delayed stake execution", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore - PNK(1000)); // No PNK transfer - }); - }); - }); - - describe("When stake is decreased once", async () => { - before("Setup", async () => { - await deploy(); - await reachDrawingPhase(); - }); - - it("Should be outside the Staking phase", async () => { - expect(await sortition.phase()).to.be.equal(1); // Drawing - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); - }); - - describe("When stake is decreased", async () => { - it("Should delay the stake decrease", async () => { - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(0); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - await expect(core.setStake(2, PNK(1000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(deployer, 2, PNK(1000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); // stake unchanged, delayed - }); - - it("Should not transfer any PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); // No PNK transfer yet - }); - - it("Should store the delayed stake for later", async () => { - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([deployer, 2, PNK(1000), false]); - }); - }); - - describe("When the Phase passes back to Staking", () => { - before("Setup", async () => { - await reachStakingPhaseAfterDrawing(); - balanceBefore = await pnk.balanceOf(deployer); - }); - - it("Should execute the delayed stakes by withdrawing PNK and reducing the stakes", async () => { - await expect(sortition.executeDelayedStakes(10)) - .to.emit(sortition, "StakeSet") - .withArgs(deployer, 2, PNK(1000), PNK(3000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([ - PNK(3000), - PNK(300), // we're the only juror so we are drawn 3 times - PNK(1000), - 2, - ]); // stake unchanged, delayed - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(2); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted - expect(await sortition.latestDelayedStakeIndex(deployer, 1)).to.be.equal(0); // Deprecated. Always 0 - }); - - it("Should withdraw some PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore + PNK(1000)); // No PNK transfer yet - }); - }); - }); - - describe("When stake is decreased then increased back", async () => { - before("Setup", async () => { - await deploy(); - await reachDrawingPhase(); - }); - - it("Should be outside the Staking phase", async () => { - expect(await sortition.phase()).to.be.equal(1); // Drawing - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); - }); - - describe("When stake is decreased", async () => { - it("Should delay the stake decrease", async () => { - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(0); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - await expect(core.setStake(2, PNK(1000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(deployer, 2, PNK(1000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); // stake unchanged, delayed - }); - - it("Should not transfer any PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); // No PNK transfer yet - }); - - it("Should store the delayed stake for later", async () => { - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([deployer, 2, PNK(1000), false]); - }); - }); - - describe("When stake is increased back to the previous amount", () => { - it("Should delay the stake increase", async () => { - balanceBefore = await pnk.balanceOf(deployer); - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - await expect(core.setStake(2, PNK(2000))).to.emit(sortition, "StakeDelayed"); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); // stake unchanged, delayed - }); - - it("Should not transfer any PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); // No PNK transfer yet - }); - - it("Should store the delayed stake for later", async () => { - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([deployer, 2, PNK(1000), false]); - expect(await sortition.delayedStakes(2)).to.be.deep.equal([deployer, 2, PNK(2000), false]); - }); - }); - - describe("When the Phase passes back to Staking", () => { - before("Setup", async () => { - await reachStakingPhaseAfterDrawing(); - balanceBefore = await pnk.balanceOf(deployer); - }); - - it("Should execute the delayed stakes but the stakes should remain the same", async () => { - await pnk.approve(core.target, PNK(1000)); - await expect(sortition.executeDelayedStakes(10)) - .to.emit(sortition, "StakeSet") - .withArgs(deployer, 2, PNK(1000), PNK(3000)) - .to.emit(sortition, "StakeSet") - .withArgs(deployer, 2, PNK(2000), PNK(4000)); // 2nd delayed stake will override the first one - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([ - PNK(4000), - PNK(300), // we're the only juror so we are drawn 3 times - PNK(2000), - 2, - ]); // stake unchanged, delayed - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(3); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - }); - - it("Should not transfer any PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); // No PNK transfer yet - }); - }); - }); - - describe("When stake is increased then decreased back", async () => { - before("Setup", async () => { - await deploy(); - await reachDrawingPhase(); - }); - - it("Should be outside the Staking phase", async () => { - expect(await sortition.phase()).to.be.equal(1); // Drawing - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); - }); - - describe("When stake is increased", () => { - it("Should delay the stake increase", async () => { - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(0); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - await pnk.approve(core.target, PNK(1000)); - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - await expect(core.setStake(2, PNK(3000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(deployer, 2, PNK(3000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); // stake does not change - }); - - it("Should not transfer PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); - }); - - it("Should store the delayed stake for later", async () => { - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([deployer, 2, PNK(3000), false]); - }); - }); - - describe("When stake is decreased back to the previous amount", () => { - it("Should cancel out the stake decrease back", async () => { - balanceBefore = await pnk.balanceOf(deployer); - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - await expect(core.setStake(2, PNK(2000))) - .to.emit(sortition, "StakeDelayed") - .withArgs(deployer, 2, PNK(2000)); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([PNK(4000), 0, PNK(2000), 2]); // stake is unchanged - }); - - it("Should transfer back some PNK to the juror", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); // PNK balance left unchanged - }); - - it("Should store the delayed stake for later", async () => { - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([deployer, 2, PNK(3000), false]); - expect(await sortition.delayedStakes(2)).to.be.deep.equal([deployer, 2, PNK(2000), false]); - }); - }); - - describe("When the Phase passes back to Staking", () => { - before("Setup", async () => { - await reachStakingPhaseAfterDrawing(); - balanceBefore = await pnk.balanceOf(deployer); - }); - - it("Should execute the delayed stakes but the stakes should remain the same", async () => { - await expect(sortition.executeDelayedStakes(10)) - .to.emit(sortition, "StakeSet") - .withArgs(deployer, 2, PNK(2000), PNK(4000)) - .to.not.emit(sortition, "StakeDelayed"); - expect(await sortition.getJurorBalance(deployer, 2)).to.be.deep.equal([ - PNK(4000), - PNK(300), // we're the only juror so we are drawn 3 times - PNK(2000), - 2, - ]); // stake unchanged, delayed - expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); - expect(await sortition.delayedStakeReadIndex()).to.be.equal(3); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted - expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // Deprecated. Always 0 - }); - - it("Should not transfer any PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore); // No PNK transfer yet - }); - }); - }); - }); - - describe("When a juror is inactive", async () => { - before("Setup", async () => { - await deploy(); - }); - - it("Should unstake from all courts", async () => { - const arbitrationCost = ETH(0.1) * 3n; - await core.createCourt(1, false, PNK(1000), 1000, ETH(0.1), 3, [0, 0, 0, 0], ethers.toBeHex(3), [1]); // Parent - general court, Classic dispute kit - - await pnk.approve(core.target, PNK(4000)); - await core.setStake(1, PNK(2000)); - await core.setStake(2, PNK(2000)); - - expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([1, 2]); - - await core["createDispute(uint256,bytes)"](2, extraData, { value: arbitrationCost }); - - await network.provider.send("evm_increaseTime", [2000]); // Wait for minStakingTime - await network.provider.send("evm_mine"); - - await sortition.passPhase(); // Staking -> Generating - await network.provider.send("evm_mine"); - - await vrfCoordinator.fulfillRandomWords(1, rng.target, []); - await sortition.passPhase(); // Generating -> Drawing - - await core.draw(0, 5000); - - await core.passPeriod(0); // Evidence -> Voting - await core.passPeriod(0); // Voting -> Appeal - await core.passPeriod(0); // Appeal -> Execution - - await sortition.passPhase(); // Drawing -> Staking. Change so we don't deal with delayed stakes - - expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([1, 2]); - - await core.execute(0, 0, 1); // 1 iteration should unstake from both courts - - expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([]); - }); - }); -}); diff --git a/contracts/test/evidence/index.ts b/contracts/test/evidence/index.ts deleted file mode 100644 index 60c1cb0f5..000000000 --- a/contracts/test/evidence/index.ts +++ /dev/null @@ -1,284 +0,0 @@ -import { expect } from "chai"; -import { deployments, ethers } from "hardhat"; -import { ContractTransactionReceipt, EventLog } from "ethers"; -import { DisputeTemplateRegistry, KlerosCore, ModeratedEvidenceModule } from "../../typechain-types"; -import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; - -const Party = { - None: 0, - Submitter: 1, - Moderator: 2, -}; - -function getEmittedEvent(eventName: any, receipt: ContractTransactionReceipt): EventLog { - const logs = receipt.logs as Array; - const event = logs.find((log) => log.eventName === eventName); - if (event === undefined) throw new Error(`Event ${eventName} not found`); - return event; -} - -describe("Home Evidence contract", async () => { - const arbitrationFee = 1000n; - const arbitratorExtraData = ethers.AbiCoder.defaultAbiCoder().encode( - ["uint256", "uint256"], - [1, 1] // courtId 1, minJurors 1 - ); - const appealTimeout = 100; - const bondTimeout = 60 * 10; - const totalCostMultiplier = 15000n; - const initialDepositMultiplier = 625n; - const disputeTemplate = '{ "disputeTemplate": "foo"}'; - const MULTIPLIER_DIVISOR = 10000n; - const totalCost = (arbitrationFee * totalCostMultiplier) / MULTIPLIER_DIVISOR; - const minRequiredDeposit = (totalCost * initialDepositMultiplier) / MULTIPLIER_DIVISOR; - const ZERO = 0n; - - let deployer: HardhatEthersSigner; - let user1: HardhatEthersSigner; - let user2: HardhatEthersSigner; - let user3: HardhatEthersSigner; - let user4: HardhatEthersSigner; - let evidenceID: string; - let arbitrator: KlerosCore; - let evidenceModule: ModeratedEvidenceModule; - let disputeTemplateRegistry: DisputeTemplateRegistry; - - beforeEach("Setup contracts", async () => { - [deployer, user1, user2, user3, user4] = await ethers.getSigners(); - - await deployments.fixture(["Arbitration", "VeaMock"], { - fallbackToGlobal: true, - keepExistingDeployments: false, - }); - arbitrator = await ethers.getContract("KlerosCore"); - disputeTemplateRegistry = await ethers.getContract("DisputeTemplateRegistry"); - - const court = await arbitrator.courts(1); - await arbitrator.changeCourtParameters( - 1, - court.hiddenVotes, - court.minStake, - court.alpha, - arbitrationFee, - court.jurorsForCourtJump, - [0, 0, 0, appealTimeout] - ); - - const EvidenceModule = await ethers.getContractFactory("ModeratedEvidenceModule"); - evidenceModule = await EvidenceModule.deploy( - arbitrator.target, - deployer.address, // owner - disputeTemplateRegistry.target, - totalCostMultiplier, - initialDepositMultiplier, - bondTimeout, - arbitratorExtraData, - disputeTemplate, - "disputeTemplateMapping: TODO" - ); - }); - - describe("Governance", async () => { - it("Should change parameters correctly", async () => { - const newOwner = await user2.getAddress(); - await evidenceModule.changeOwner(newOwner); - expect(await evidenceModule.owner()).to.equal(newOwner); - await evidenceModule.connect(user2).changeOwner(await deployer.getAddress()); - - await evidenceModule.changeInitialDepositMultiplier(1); - expect(await evidenceModule.initialDepositMultiplier()).to.equal(1); - - await evidenceModule.changeTotalCostMultiplier(1); - expect(await evidenceModule.totalCostMultiplier()).to.equal(1); - - await evidenceModule.changeBondTimeout(1); - expect(await evidenceModule.bondTimeout()).to.equal(1); - - const newDisputeTemplate = '{ "disputeTemplate": "bar"}'; - let tx = await evidenceModule.changeDisputeTemplate(newDisputeTemplate, "disputeTemplateMapping: TODO"); - let receipt = await tx.wait(); - let lastArbitratorIndex = await evidenceModule.getCurrentArbitratorIndex(); - let newArbitratorData = await evidenceModule.arbitratorDataList(lastArbitratorIndex); - let oldArbitratorData = await evidenceModule.arbitratorDataList(lastArbitratorIndex - 1n); - - expect(newArbitratorData.arbitratorExtraData).to.equal(oldArbitratorData.arbitratorExtraData); - const disputeTemplateEvents = await disputeTemplateRegistry.queryFilter( - disputeTemplateRegistry.filters.DisputeTemplate(), - receipt?.blockNumber, - receipt?.blockNumber - ); - const [_templateId, _, _templateData] = disputeTemplateEvents[0].args; - expect(_templateData).to.equal(newDisputeTemplate, "Wrong Template Data."); - expect(_templateId).to.equal(newArbitratorData.disputeTemplateId, "Wrong Template ID."); - - const newArbitratorExtraData = "0x86"; - await evidenceModule.changeArbitratorExtraData(newArbitratorExtraData); - newArbitratorData = await evidenceModule.arbitratorDataList(lastArbitratorIndex + 1n); - expect(newArbitratorData.arbitratorExtraData).to.equal(newArbitratorExtraData, "Wrong extraData"); - }); - - it("Should revert if the caller is not the owner", async () => { - await expect(evidenceModule.connect(user2).changeOwner(await user2.getAddress())).to.be.revertedWith( - "The caller must be the owner" - ); - - await expect(evidenceModule.connect(user2).changeInitialDepositMultiplier(0)).to.be.revertedWith( - "The caller must be the owner" - ); - - await expect(evidenceModule.connect(user2).changeTotalCostMultiplier(0)).to.be.revertedWith( - "The caller must be the owner" - ); - - await expect(evidenceModule.connect(user2).changeBondTimeout(0)).to.be.revertedWith( - "The caller must be the owner" - ); - - await expect(evidenceModule.connect(user2).changeDisputeTemplate(disputeTemplate, "")).to.be.revertedWith( - "The caller must be the owner" - ); - - await expect(evidenceModule.connect(user2).changeArbitratorExtraData(arbitratorExtraData)).to.be.revertedWith( - "The caller must be the owner" - ); - }); - }); - - describe("Evidence Submission", () => { - it("Should submit evidence correctly.", async () => { - const newEvidence = "Irrefutable evidence"; - const tx = await evidenceModule.connect(user1).submitEvidence(1234, newEvidence, { - value: minRequiredDeposit, - }); // id: 0 - const receipt = await tx.wait(); - if (receipt === null) throw new Error("Receipt is null"); - const evidenceID = ethers.solidityPackedKeccak256(["uint", "string"], [1234, newEvidence]); - - const [_arbitrator, _externalDisputeID, _party, _evidence] = getEmittedEvent("ModeratedEvidence", receipt).args; - expect(_arbitrator).to.equal(arbitrator.target, "Wrong arbitrator."); - expect(_externalDisputeID).to.equal(1234, "Wrong external dispute ID."); - expect(_party).to.equal(user1.address, "Wrong submitter."); - expect(_evidence).to.equal(newEvidence, "Wrong evidence message."); - - let contributions = await evidenceModule.getContributions(evidenceID, 0, user1.address); - expect(contributions[0]).to.equal(ZERO); // it's 1am and to.deep.equal() won't work, can't be bothered - expect(contributions[1]).to.equal(93n); - expect(contributions[2]).to.equal(ZERO); - expect(contributions.length).to.equal(3); - }); - - it("Should not allowed the same evidence twice for the same external dispute id.", async () => { - const newEvidence = "Irrefutable evidence"; - await evidenceModule.submitEvidence(1234, newEvidence, { - value: minRequiredDeposit, - }); - await expect( - evidenceModule.submitEvidence(1234, newEvidence, { - value: minRequiredDeposit, - }) - ).to.be.revertedWith("Evidence already submitted."); - }); - - it("Should revert if deposit is too low.", async () => { - const newEvidence = "Irrefutable evidence"; - await expect( - evidenceModule.submitEvidence(1234, newEvidence, { - value: minRequiredDeposit - 1n, - }) - ).to.be.revertedWith("Insufficient funding."); - }); - }); - - describe("Moderation", () => { - beforeEach("Initialize posts and comments", async () => { - const newEvidence = "Irrefutable evidence"; - await evidenceModule.connect(user1).submitEvidence(1234, newEvidence, { - value: minRequiredDeposit, - }); - evidenceID = ethers.solidityPackedKeccak256(["uint", "string"], [1234, newEvidence]); - }); - - it("Should not allow moderation after bond timeout passed.", async () => { - await expect(evidenceModule.resolveModerationMarket(evidenceID)).to.be.revertedWith("Moderation still ongoing."); - - await ethers.provider.send("evm_increaseTime", [60 * 10]); - - // Moderate - await expect( - evidenceModule.moderate(evidenceID, Party.Moderator, { - value: totalCost, - gasLimit: 500000, - }) - ).to.be.revertedWith("Moderation market is closed."); - - await evidenceModule.resolveModerationMarket(evidenceID, { gasLimit: 500000 }); - - // After market has been closed, moderation can re-open. - await evidenceModule.moderate(evidenceID, Party.Submitter, { - value: totalCost, - gasLimit: 500000, - }); - }); - - it("Should create dispute after moderation escalation is complete.", async () => { - await evidenceModule.connect(user2).moderate(evidenceID, Party.Moderator, { - value: minRequiredDeposit * 2n, - }); - - let moderationInfo = await evidenceModule.getModerationInfo(evidenceID, 0); - let paidFees = moderationInfo.paidFees; - let depositRequired = paidFees[Party.Moderator] * 2n - paidFees[Party.Submitter]; - await evidenceModule.connect(user4).moderate(evidenceID, Party.Submitter, { - value: depositRequired, - }); - - moderationInfo = await evidenceModule.getModerationInfo(evidenceID, 0); - paidFees = moderationInfo.paidFees; - depositRequired = paidFees[Party.Submitter] * 2n - paidFees[Party.Moderator]; - await evidenceModule.connect(user2).moderate(evidenceID, Party.Moderator, { - value: depositRequired, - }); - - moderationInfo = await evidenceModule.getModerationInfo(evidenceID, 0); - paidFees = moderationInfo.paidFees; - depositRequired = paidFees[Party.Moderator] * 2n - paidFees[Party.Submitter]; - await evidenceModule.connect(user4).moderate(evidenceID, Party.Submitter, { - value: depositRequired, - }); - - moderationInfo = await evidenceModule.getModerationInfo(evidenceID, 0); - paidFees = moderationInfo.paidFees; - depositRequired = paidFees[Party.Submitter] * 2n - paidFees[Party.Moderator]; - await evidenceModule.connect(user2).moderate(evidenceID, Party.Moderator, { - value: depositRequired, - }); - - moderationInfo = await evidenceModule.getModerationInfo(evidenceID, 0); - paidFees = moderationInfo.paidFees; - depositRequired = paidFees[Party.Moderator] * 2n - paidFees[Party.Submitter]; - let tx = await evidenceModule.connect(user4).moderate(evidenceID, Party.Submitter, { - value: depositRequired, // Less is actually needed. Overpaid fees are reimbursed - }); - let receipt = await tx.wait(); - if (receipt === null) throw new Error("Receipt is null"); - let [_arbitrator, _arbitrableDisputeID, _externalDisputeID, _templateId, _templateUri] = getEmittedEvent( - "DisputeRequest", - receipt - ).args; - expect(_arbitrator).to.equal(arbitrator.target, "Wrong arbitrator."); - expect(_arbitrableDisputeID).to.equal(0, "Wrong dispute ID."); - expect(_templateId).to.equal(1, "Wrong template ID."); - expect(_externalDisputeID).to.equal(evidenceID, "Wrong external dispute ID."); - - await expect( - evidenceModule.connect(user2).moderate(evidenceID, Party.Moderator, { - value: totalCost, - }) - ).to.be.revertedWith("Evidence already disputed."); - - await expect(evidenceModule.connect(user2).resolveModerationMarket(evidenceID)).to.be.revertedWith( - "Evidence already disputed." - ); - }); - }); -}); diff --git a/contracts/test/fixtures/DisputeTemplate.resolver.jsonc b/contracts/test/fixtures/DisputeTemplate.resolver.jsonc deleted file mode 100644 index c40794660..000000000 --- a/contracts/test/fixtures/DisputeTemplate.resolver.jsonc +++ /dev/null @@ -1,28 +0,0 @@ -{ - "title": "TODO", - "description": "TODO", - "question": "Does the entry comply with the required criteria?", - "answers": [ - { - "title": "Yes, Add It", // Ruling Option - "description": "Select this if ..." // Ruling Option Description - }, - { - "title": "No, Dont Add It", - "description": "Select this if ..." - } - ], - "aliases": { - - }, - "metadata": { - }, - "disputePolicyURI": "/ipfs/QmdvkC....pdf", // Link to the policy document - "frontendUrl": "https://resolve.kleros.io/cases/%s", - "arbitrableChainID": "10200", - "arbitrableAddress": "0x433eD78895df1df7668C40b3e82d54410331F942", // DisputeResolver - "arbitratorChainID": "421614", - "arbitratorAddress": "0xA429667Abb1A6c530BAd1083df4C69FBce86D696", // KlerosCore - "category": "Curated Lists", - "specification": "KIP88" // not yet for the dispute resolver -} \ No newline at end of file diff --git a/contracts/test/fixtures/DisputeTemplate.schema.json b/contracts/test/fixtures/DisputeTemplate.schema.json deleted file mode 100644 index a637188fd..000000000 --- a/contracts/test/fixtures/DisputeTemplate.schema.json +++ /dev/null @@ -1,348 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2019-09/schema", - "$id": "NewDisputeTemplate.schema.json", - "type": "object", - "default": {}, - "title": "Root Schema", - "required": [ - "title", - "description", - "question", - "frontendUrl", - "disputePolicyURI", - "arbitrableChainID", - "arbitrableAddress", - "arbitratorChainID", - "arbitratorAddress" - ], - "additionalProperties": false, - "properties": { - "$schema": { - "description": "JSON Schema URI (used by some editors)", - "type": "string", - "default": "NewDisputeTemplate.schema.json" - }, - "category": { - "type": "string", - "default": "", - "title": "The category Schema", - "examples": [ - "Oracle" - ] - }, - "lang": { - "type": "string", - "default": "", - "title": "The lang Schema", - "examples": [ - "en_US" - ] - }, - "title": { - "type": "string", - "default": "", - "title": "The title Schema", - "examples": [ - "A reality.eth question", - "Add Ethfinex Badge to Token", - "Add Token to Registry", - "Add a list to Consensus Layer Withdrawal Protection enabled badges", - "Add a list to Omen Verified Market enabled badges", - "Add a list to The Registry enabled badges", - "Add a market to Omen Verified Market", - "Add a validator to Consensus Layer Withdrawal Protection", - "Add an entry to Ledger Contract Domain Name registry v2", - "Proof of Humanity Clearing Request", - "Proof of Humanity Registration Request", - "Realitio Question", - "Remove Ethfinex Badge From Token", - "Remove Token from Registry", - "Remove a list from Consensus Layer Withdrawal Protection enabled badges", - "Remove a list from Omen Verified Market enabled badges", - "Remove a market from Omen Verified Market", - "Remove a validator from Consensus Layer Withdrawal Protection", - "Remove an entry from Ledger Contract Domain Name registry v2", - "Review a translation from Linguo", - "Unslashed insurance claim" - ] - }, - "description": { - "type": "string", - "default": "", - "title": "The description Schema", - "examples": [ - "A Reality.eth question has been raised to arbitration.", - "A request to register the specified entry to a list of provable humans.", - "A request to remove the specified entry from a list of provable humans.", - "Someone challenged a translation", - "Someone requested to add a list to Consensus Layer Withdrawal Protection enabled badges.", - "Someone requested to add a list to Omen Verified Market enabled badges.", - "Someone requested to add a list to The Registry enabled badges.", - "Someone requested to add a market to Omen Verified Market", - "Someone requested to add a token to the token curated registry of tokens.", - "Someone requested to add a validator to Consensus Layer Withdrawal Protection", - "Someone requested to add an entry to Ledger Contract Domain Name registry v2", - "Someone requested to add the the Ethfinex badge to a token.\n\nDescription\n\nTokens with the Ethfinex badge can participate in the Ethfinex Community Vote to become traded on the Ethfinex platform. To be eligible to receive the badge, the project and it's associated token must comply with the minimum set of criteria defined in the criteria document.", - "Someone requested to remove a list from Consensus Layer Withdrawal Protection enabled badges.", - "Someone requested to remove a list from Omen Verified Market enabled badges.", - "Someone requested to remove a market from Omen Verified Market", - "Someone requested to remove a token from a token curated registry of tokens.", - "Someone requested to remove a validator from Consensus Layer Withdrawal Protection", - "Someone requested to remove an entry from Ledger Contract Domain Name registry v2", - "Someone requested to remove the the Ethfinex badge from a token.\n\nDescription\n\nTokens with the Ethfinex badge can participate in the Ethfinex Community Vote to become traded on the Ethfinex platform. To be eligible to receive the badge, the project and it's associated token must comply with the minimum set of criteria defined in the criteria document.", - "The claimant requested a compensation for damages covered by Unslashed insurance in the provided amount." - ] - }, - "question": { - "type": "string", - "default": "", - "title": "The question Schema", - "examples": [ - "Does the entry comply with the required criteria?", - "Does the list comply with the required criteria?", - "Does the market comply with the required criteria?", - "Does the translation comply with the required criteria?", - "Does the validator comply with the required criteria?", - "Give the answer to the question.", - "Should the badge be added to the token?", - "Should the badge be removed from the token?", - "Should the request to register be accepted?", - "Should the request to remove be accepted?", - "Should the token be added to the registry?", - "Should the token be removed from the registry?", - "Should their claim be paid out?", - "Which party abided by terms of the contract?" - ] - }, - "type": { - "title": "The type Schema", - "description": "An explanation about the purpose of this instance.", - "type": "string", - "default": "single-select", - "examples": [ - "single-select" - ], - "enum": [ - "bool", - "uint", - "single-select", - "multiple-select", - "datetime" - ] - }, - "answers": { - "type": "array", - "default": [ - { - "id": "0x00", - "title": "Invalid/Refuse to Arbitrate", - "reserved": true - }, - { - "id": "0x01", - "title": "Yes", - "description": "Accept the request.", - "reserved": false - }, - { - "id": "0x02", - "title": "No", - "description": "Refuse the request.", - "reserved": false - } - ], - "title": "The answers Schema", - "items": { - "type": "object", - "default": {}, - "title": "A Schema", - "required": [ - "title" - ], - "dependentSchemas": { - "id": { - "properties": { - "reserved": { - "const": true - } - } - } - }, - "if": { - "properties": { - "reserved": { - "const": true - } - } - }, - "then": { - "dependentRequired": { - "id": true - } - }, - "additionalProperties": false, - "properties": { - "id": { - "type": "string", - "default": "", - "title": "The id Schema", - "examples": [ - "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ] - }, - "title": { - "type": "string", - "default": "", - "title": "The title Schema", - "examples": [ - "Accept the claim", - "No", - "No, Don't Add It", - "No, Don't Remove It", - "No, Keep It", - "No, the translation should not be accepted", - "Pay Receiver", - "Refund Sender", - "Reject the claim", - "Yes", - "Yes, Add It", - "Yes, Remove It", - "Yes, the translation should be accepted", - "Answered Too Soon", - "Invalid/Refuse to Arbitrate" - ] - }, - "description": { - "type": "string", - "default": "", - "title": "The description Schema", - "examples": [ - "Accept the request to register the entry.", - "Accept the request to remove the entry.", - "Deny the request.", - "Reject the claim if any of the acceptance criteria do not hold.", - "Select this if you think the entry complies with the required criteria and should be added.", - "Select this if you think the entry complies with the required criteria and should not be removed.", - "Select this if you think the entry does not comply with the required criteria and should be removed.", - "Select this if you think the entry does not comply with the required criteria and should not be added.", - "Select this if you think the list complies with the required criteria and should be added.", - "Select this if you think the list complies with the required criteria and should not be removed.", - "Select this if you think the list does not comply with the required criteria and should be removed.", - "Select this if you think the list does not comply with the required criteria and should not be added.", - "Select this if you think the market complies with the required criteria and should be added.", - "Select this if you think the market complies with the required criteria and should not be removed.", - "Select this if you think the market does not comply with the required criteria and should be removed.", - "Select this if you think the market does not comply with the required criteria and should not be added.", - "Select this if you think the token and project comply with the required criteria and the badge should be added.", - "Select this if you think the token and project comply with the required criteria and the badge should be kept.", - "Select this if you think the token and/or project do(es) not comply with the required criteria and the badge should be removed.", - "Select this if you think the token and/or project do(es) not comply with the required criteria and the badge should not be added.", - "Select this if you think the token information is correct and the token should be added to the registry.", - "Select this if you think the token information is correct and the token should not be removed from the registry.", - "Select this if you think the token information is incorrect and the token should be not be added to the registry.", - "Select this if you think the token information is incorrect and the token should be removed from the registry.", - "Select this if you think the translation complies with the required criteria.", - "Select this if you think the translation does not comply with the required criteria.", - "Select this if you think the validator complies with the required criteria and should be added.", - "Select this if you think the validator complies with the required criteria and should not be removed.", - "Select this if you think the validator does not comply with the required criteria and should be removed.", - "Select this if you think the validator does not comply with the required criteria and should not be added.", - "Select to release funds to the Receiver", - "Select to return funds to the Sender" - ] - }, - "reserved": { - "type": "boolean", - "default": false, - "title": "The reserved Schema", - "examples": [ - true, - false - ] - } - }, - "examples": [ - { - "title": "Yes", - "description": "Accept the request." - }, - { - "title": "No", - "description": "Refuse the request." - } - ] - } - }, - "frontendUrl": { - "type": "string", - "default": "", - "title": "The frontendUrl Schema", - "examples": [ - "https://curate.kleros.io/tcr/1/0x0000000000000000000000000000000000000000/0x0000000000000000000000000000000000000000000000000000000000000000", - "https://reality.eth.link/app/#!/question/0x0000000000000000000000000000000000000000000000000000000000000000/0" - ] - }, - "disputePolicyURI": { - "type": "string", - "default": "", - "title": "The dispute policy URI Schema", - "examples": [ - "/ipfs/QmPhEBstumEP84eSftx9MwBmSXBCGRFJMPZauKVa9gBizh/omen-verified-market.pdf", - "/ipfs/QmPtXtFKfVc3w5aGVNYrmBZWEHBLpk2XMLkYCnEioxwy43/clwp-acceptance-policy.pdf", - "/ipfs/QmTL1SCKpRcr7NRbVpXW6z9QoQXRHJT5cQr6PEge5qoLwU/t2cr-primary-document.pdf", - "/ipfs/QmVabp1VjJNYzXDxbcWFdeK17RvvA9eQy6eJVf1T1AzS1a/linguo-translation-quality-policy.pdf", - "/ipfs/QmVzwEBpGsbFY3UgyjA3SxgGXx3r5gFGynNpaoXkp6jenu/Ethfinex%20Court%20Policy.pdf", - "/ipfs/QmW4zDA8X95cyfAsW9Nq1t7XNTyP3sMQAWNRFoQhMpgAv7/Kleros%2520Moderate%2520x%2520Reality.eth%2520Oracle%2520-%2520Telegram%2520Content%2520Moderation%2520Question%2520Resolution%2520Policy.pdf", - "/ipfs/QmXDiiBAizCPoLqHvcfTzuMT7uvFEe1j3s4TgoWWd4k5np/proof-of-humanity-registry-policy-v1.3.pdf", - "/ipfs/QmZ7RVU7re1g8nXDbAFMHV99pyie3dn4cY7Ga2X4h8mDpV/reject-all-policy.pdf", - "/ipfs/QmaUr6hnSVxYD899xdcn2GUVtXVjXoSXKZbce3zFtGWw4H/Question_Resolution_Policy.pdf", - "/ipfs/QmdvkC5Djgk8MfX5ijJR3NJzmvGugUqvui7bKuTErSD6cE/contract-domain-name-registry-for-ledger-policy-3-.pdf", - "/ipfs/QmeTBY7jZe2ut5WjifNASADo3E4zBxkMd62WwBpXtwP9pg" - ] - }, - "arbitrableChainID": { - "type": "string", - "default": "", - "title": "The arbitrableChainID Schema", - "examples": [ - "1", - "100" - ] - }, - "arbitrableAddress": { - "type": "string", - "default": "", - "title": "The arbitrableAddress Schema", - "examples": [ - "0x2e39b8f43d0870ba896f516f78f57cde773cf805" - ] - }, - "arbitratorChainID": { - "type": "string", - "default": "", - "title": "The arbitratorChainID Schema", - "examples": [ - "421614" - ] - }, - "arbitratorAddress": { - "type": "string", - "default": "", - "title": "The arbitratorAddress Schema", - "examples": [ - "0xD08Ab99480d02bf9C092828043f611BcDFEA917b" - ] - }, - "specification": { - "type": "string", - "default": "", - "title": "The specification Schema", - "examples": [ - "KIP00", - "KIP99" - ] - } - } -} diff --git a/contracts/test/fixtures/DisputeTemplate.simple.json b/contracts/test/fixtures/DisputeTemplate.simple.json deleted file mode 100644 index 4406a9b37..000000000 --- a/contracts/test/fixtures/DisputeTemplate.simple.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "../NewDisputeTemplate.schema.json", - "title": "Let's do this", - "description": "We want to do this: %s", - "question": "Does it comply with the policy?", - "answers": [ - { - "title": "Yes", - "description": "Select this if you agree that it must be done." - }, - { - "title": "No", - "description": "Select this if you do not agree that it must be done." - } - ], - "policyURI": "/ipfs/Qmdvk...rSD6cE/policy.pdf", - "frontendUrl": "https://kleros-v2.netlify.app/#/cases/%s/overview", - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", - "category": "Others", - "specification": "KIP001", - "lang": "en_US" -} diff --git a/contracts/test/foundry/KlerosCore_Appeals.t.sol b/contracts/test/foundry/KlerosCore_Appeals.t.sol deleted file mode 100644 index c5016f23c..000000000 --- a/contracts/test/foundry/KlerosCore_Appeals.t.sol +++ /dev/null @@ -1,503 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {KlerosCore_TestBase} from "./KlerosCore_TestBase.sol"; -import {KlerosCore} from "../../src/arbitration/KlerosCore.sol"; -import {DisputeKitClassic, DisputeKitClassicBase} from "../../src/arbitration/dispute-kits/DisputeKitClassic.sol"; -import {UUPSProxy} from "../../src/proxy/UUPSProxy.sol"; -import "../../src/libraries/Constants.sol"; - -/// @title KlerosCore_AppealsTest -/// @dev Tests for KlerosCore appeal system, funding, and court/DK jumping -contract KlerosCore_AppealsTest is KlerosCore_TestBase { - function test_appeal_fundOneSide() public { - uint256 disputeID = 0; - vm.deal(address(disputeKit), 1 ether); - vm.deal(staker1, 1 ether); - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 10000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - (uint256 start, uint256 end) = core.appealPeriod(0); - assertEq(start, 0, "Appeal period start should be 0"); - assertEq(end, 0, "Appeal period end should be 0"); - - // Simulate the call from dispute kit to check the requires unrelated to caller - vm.prank(address(disputeKit)); - vm.expectRevert(KlerosCore.DisputeNotAppealable.selector); - core.appeal{value: 0.21 ether}(disputeID, 2, arbitratorExtraData); - - vm.expectEmit(true, true, true, true); - emit KlerosCore.AppealPossible(disputeID, arbitrable); - vm.expectEmit(true, true, true, true); - emit KlerosCore.NewPeriod(disputeID, KlerosCore.Period.appeal); - core.passPeriod(disputeID); - - (, , KlerosCore.Period period, , uint256 lastPeriodChange) = core.disputes(disputeID); - (start, end) = core.appealPeriod(0); - assertEq(uint256(period), uint256(KlerosCore.Period.appeal), "Wrong period"); - assertEq(lastPeriodChange, block.timestamp, "Wrong lastPeriodChange"); - assertEq(core.appealCost(0), 0.21 ether, "Wrong appealCost"); - assertEq(start, lastPeriodChange, "Appeal period start is incorrect"); - assertEq(end, lastPeriodChange + timesPerPeriod[3], "Appeal period end is incorrect"); - - vm.expectRevert(KlerosCore.AppealPeriodNotPassed.selector); - core.passPeriod(disputeID); - - // Simulate the call from dispute kit to check the requires unrelated to caller - vm.prank(address(disputeKit)); - vm.expectRevert(KlerosCore.AppealFeesNotEnough.selector); - core.appeal{value: 0.21 ether - 1}(disputeID, 2, arbitratorExtraData); - vm.deal(address(disputeKit), 0); // Nullify the balance so it doesn't get in the way. - - vm.prank(staker1); - vm.expectRevert(KlerosCore.DisputeKitOnly.selector); - core.appeal{value: 0.21 ether}(disputeID, 2, arbitratorExtraData); - - vm.prank(crowdfunder1); - vm.expectRevert(DisputeKitClassicBase.ChoiceOutOfBounds.selector); - disputeKit.fundAppeal(disputeID, 3); - - vm.prank(crowdfunder1); - vm.expectEmit(true, true, true, true); - emit DisputeKitClassicBase.Contribution(disputeID, 0, 1, crowdfunder1, 0.21 ether); - disputeKit.fundAppeal{value: 0.21 ether}(disputeID, 1); // Fund the losing choice. Total cost will be 0.63 (0.21 + 0.21 * (20000/10000)) - - assertEq(crowdfunder1.balance, 9.79 ether, "Wrong balance of the crowdfunder"); - assertEq(address(disputeKit).balance, 0.21 ether, "Wrong balance of the DK"); - assertEq((disputeKit.getFundedChoices(disputeID)).length, 0, "No funded choices"); - - vm.prank(crowdfunder1); - vm.expectEmit(true, true, true, true); - emit DisputeKitClassicBase.Contribution(disputeID, 0, 1, crowdfunder1, 0.42 ether); - vm.expectEmit(true, true, true, true); - emit DisputeKitClassicBase.ChoiceFunded(disputeID, 0, 1); - disputeKit.fundAppeal{value: 5 ether}(disputeID, 1); // Deliberately overpay to check reimburse - - assertEq(crowdfunder1.balance, 9.37 ether, "Wrong balance of the crowdfunder"); - assertEq(address(disputeKit).balance, 0.63 ether, "Wrong balance of the DK"); - assertEq((disputeKit.getFundedChoices(disputeID)).length, 1, "One choice should be funded"); - assertEq((disputeKit.getFundedChoices(disputeID))[0], 1, "Incorrect funded choice"); - - vm.prank(crowdfunder1); - vm.expectRevert(DisputeKitClassicBase.AppealFeeIsAlreadyPaid.selector); - disputeKit.fundAppeal(disputeID, 1); - } - - function test_appeal_timeoutCheck() public { - uint256 disputeID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 10000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - vm.prank(crowdfunder1); - vm.expectRevert(DisputeKitClassicBase.AppealPeriodIsOver.selector); - disputeKit.fundAppeal{value: 0.1 ether}(disputeID, 1); - core.passPeriod(disputeID); - - (uint256 start, uint256 end) = core.appealPeriod(0); - - vm.prank(crowdfunder1); - vm.warp(block.timestamp + ((end - start) / 2 + 1)); - vm.expectRevert(DisputeKitClassicBase.AppealPeriodIsOverForLoser.selector); - disputeKit.fundAppeal{value: 0.1 ether}(disputeID, 1); // Losing choice - - disputeKit.fundAppeal(disputeID, 2); // Winning choice funding should not revert yet - - vm.prank(crowdfunder1); - vm.warp(block.timestamp + (end - start) / 2); // Warp one more to cover the whole period - vm.expectRevert(DisputeKitClassicBase.AppealPeriodIsOver.selector); - disputeKit.fundAppeal{value: 0.1 ether}(disputeID, 2); - } - - function test_appeal_fullFundingNoJump() public { - uint256 disputeID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 20000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - core.passPeriod(disputeID); // Appeal - - vm.prank(crowdfunder1); - disputeKit.fundAppeal{value: 0.63 ether}(disputeID, 1); - - vm.prank(crowdfunder2); - vm.expectEmit(true, true, true, true); - emit KlerosCore.AppealDecision(disputeID, arbitrable); - vm.expectEmit(true, true, true, true); - emit KlerosCore.NewPeriod(disputeID, KlerosCore.Period.evidence); - disputeKit.fundAppeal{value: 0.42 ether}(disputeID, 2); - - assertEq((disputeKit.getFundedChoices(disputeID)).length, 0, "No funded choices in the fresh round"); - (uint256 ruling, bool tied, bool overridden) = disputeKit.currentRuling(disputeID); - assertEq(ruling, 0, "Should be 0 ruling in the fresh round"); - assertEq(tied, true, "Should be tied"); - assertEq(overridden, false, "Not overridden"); - - assertEq(address(disputeKit).balance, 0.84 ether, "Wrong balance of the DK"); // 0.63 + 0.42 - 0.21 - assertEq(address(core).balance, 0.3 ether, "Wrong balance of the core"); // 0.09 arbFee + 0.21 appealFee - - assertEq(sortitionModule.disputesWithoutJurors(), 1, "Wrong disputesWithoutJurors count after appeal"); - assertEq(core.getNumberOfRounds(disputeID), 2, "Wrong number of rounds"); - - (, , KlerosCore.Period period, , uint256 lastPeriodChange) = core.disputes(disputeID); - assertEq(uint256(period), uint256(KlerosCore.Period.evidence), "Wrong period"); - assertEq(lastPeriodChange, block.timestamp, "Wrong lastPeriodChange"); - - KlerosCore.Round memory round = core.getRoundInfo(disputeID, 1); // Check the new round - assertEq(round.pnkAtStakePerJuror, 1000, "Wrong pnkAtStakePerJuror"); - assertEq(round.totalFeesForJurors, 0.21 ether, "Wrong totalFeesForJurors"); - assertEq(round.nbVotes, 7, "Wrong nbVotes"); - - core.draw(disputeID, 7); - emit KlerosCore.NewPeriod(disputeID, KlerosCore.Period.vote); // Check that we don't have to wait for the timeout to pass the evidence period after appeal - core.passPeriod(disputeID); - } - - function test_appeal_fullFundingCourtJumpAndDKJumpToClassic() public { - // Setup: dk2 supported by court2 with dk2._jumpDisputeKitID == DISPUTE_KIT_CLASSIC - // Ensure that court2 jumps to GENERAL_COURT and dk2 jumps to DISPUTE_KIT_CLASSIC - uint256 disputeID = 0; - DisputeKitClassic dkLogic = new DisputeKitClassic(); - // Create a new DK and court to check the jump - bytes memory initDataDk = abi.encodeWithSignature( - "initialize(address,address,address,uint256)", - owner, - address(core), - address(wNative), - DISPUTE_KIT_CLASSIC - ); - - UUPSProxy proxyDk = new UUPSProxy(address(dkLogic), initDataDk); - DisputeKitClassic newDisputeKit = DisputeKitClassic(address(proxyDk)); - - uint96 newCourtID = 2; - uint256 newDkID = 2; - uint256[] memory supportedDK = new uint256[](1); - supportedDK[0] = DISPUTE_KIT_CLASSIC; - bytes memory newExtraData = abi.encodePacked(uint256(newCourtID), DEFAULT_NB_OF_JURORS, newDkID); - - vm.prank(owner); - core.addNewDisputeKit(newDisputeKit); - vm.prank(owner); - core.createCourt( - GENERAL_COURT, - hiddenVotes, - minStake, - alpha, - feeForJuror, - 3, // jurors for jump. Low number to ensure jump after the first appeal - [uint256(60), uint256(120), uint256(180), uint256(240)], // Times per period - sortitionExtraData, - supportedDK - ); - - arbitrable.changeArbitratorExtraData(newExtraData); - - vm.prank(owner); - supportedDK = new uint256[](1); - supportedDK[0] = newDkID; - core.enableDisputeKits(newCourtID, supportedDK, true); - assertEq(core.isSupported(newCourtID, newDkID), true, "New DK should be supported by new court"); - - vm.prank(staker1); - core.setStake(newCourtID, 20000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - KlerosCore.Round memory round = core.getRoundInfo(disputeID, 0); - assertEq(round.disputeKitID, newDkID, "Wrong DK ID"); - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - - vm.prank(staker1); - newDisputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - core.passPeriod(disputeID); // Appeal - - vm.prank(crowdfunder1); - newDisputeKit.fundAppeal{value: 0.63 ether}(disputeID, 1); - - assertEq(core.isDisputeKitJumping(disputeID), true, "Should be jumping"); - - vm.expectEmit(true, true, true, true); - emit KlerosCore.CourtJump(disputeID, 1, newCourtID, GENERAL_COURT); - vm.expectEmit(true, true, true, true); - emit KlerosCore.DisputeKitJump(disputeID, 1, newDkID, DISPUTE_KIT_CLASSIC); - vm.expectEmit(true, true, true, true); - emit DisputeKitClassicBase.DisputeCreation(disputeID, 2, newExtraData); - vm.expectEmit(true, true, true, true); - emit KlerosCore.AppealDecision(disputeID, arbitrable); - vm.expectEmit(true, true, true, true); - emit KlerosCore.NewPeriod(disputeID, KlerosCore.Period.evidence); - vm.prank(crowdfunder2); - newDisputeKit.fundAppeal{value: 0.42 ether}(disputeID, 2); - - (, bool jumped, ) = newDisputeKit.disputes(disputeID); - assertEq(jumped, true, "jumped should be true"); - assertEq( - (newDisputeKit.getFundedChoices(disputeID)).length, - 2, - "No fresh round created so the number of funded choices should be 2" - ); - - round = core.getRoundInfo(disputeID, 1); - assertEq(round.disputeKitID, DISPUTE_KIT_CLASSIC, "Wrong DK ID"); - assertEq(sortitionModule.disputesWithoutJurors(), 1, "Wrong disputesWithoutJurors count"); - (uint96 courtID, , , , ) = core.disputes(disputeID); - assertEq(courtID, GENERAL_COURT, "Wrong court ID"); - - (, jumped, ) = disputeKit.disputes(disputeID); - assertEq(jumped, false, "jumped should be false in the DK that dispute jumped to"); - - // Check jump modifier - vm.prank(address(core)); - vm.expectRevert(DisputeKitClassicBase.DisputeJumpedToParentDK.selector); - newDisputeKit.draw(disputeID, 1); - - // And check that draw in the new round works - vm.expectEmit(true, true, true, true); - emit KlerosCore.Draw(staker1, disputeID, 1, 0); // roundID = 1 VoteID = 0 - core.draw(disputeID, 1); - - (address account, , , ) = disputeKit.getVoteInfo(disputeID, 1, 0); - assertEq(account, staker1, "Wrong drawn account in the classic DK"); - } - - function test_appeal_fullFundingCourtJumpAndDKJumpToNonClassic() public { - // Setup: - // dk2 supported by GENERAL_COURT, which is a non-DISPUTE_KIT_CLASSIC - // dk3 supported by court2, with dk3._jumpDisputeKitID == dk2 - // Ensure that court2 jumps to GENERAL_COURT and dk3 jumps to dk2 - uint256 disputeID = 0; - uint96 newCourtID = 2; - uint256 dkID2 = 2; - uint256 dkID3 = 3; - - DisputeKitClassic dkLogic = new DisputeKitClassic(); - - bytes memory initDataDk2 = abi.encodeWithSignature( - "initialize(address,address,address,uint256)", - owner, - address(core), - address(wNative), - DISPUTE_KIT_CLASSIC - ); - UUPSProxy proxyDk2 = new UUPSProxy(address(dkLogic), initDataDk2); - DisputeKitClassic disputeKit2 = DisputeKitClassic(address(proxyDk2)); - - bytes memory initDataDk3 = abi.encodeWithSignature( - "initialize(address,address,address,uint256)", - owner, - address(core), - address(wNative), - dkID2 - ); - UUPSProxy proxyDk3 = new UUPSProxy(address(dkLogic), initDataDk3); - DisputeKitClassic disputeKit3 = DisputeKitClassic(address(proxyDk3)); - - vm.prank(owner); - core.addNewDisputeKit(disputeKit2); - vm.prank(owner); - core.addNewDisputeKit(disputeKit3); - - uint256[] memory supportedDK = new uint256[](2); - supportedDK[0] = DISPUTE_KIT_CLASSIC; - supportedDK[1] = dkID3; - vm.prank(owner); - core.createCourt( - GENERAL_COURT, - hiddenVotes, - minStake, - alpha, - feeForJuror, - 3, // jurors for jump. Low number to ensure jump after the first appeal - [uint256(60), uint256(120), uint256(180), uint256(240)], // Times per period - sortitionExtraData, - supportedDK - ); - assertEq(core.isSupported(newCourtID, dkID3), true, "dkID3 should be supported by new court"); - - vm.prank(owner); - supportedDK[0] = DISPUTE_KIT_CLASSIC; - supportedDK[1] = dkID2; - core.enableDisputeKits(GENERAL_COURT, supportedDK, true); - assertEq(core.isSupported(GENERAL_COURT, dkID2), true, "dkID2 should be supported by GENERAL_COURT"); - - bytes memory newExtraData = abi.encodePacked(uint256(newCourtID), DEFAULT_NB_OF_JURORS, dkID3); - arbitrable.changeArbitratorExtraData(newExtraData); - - vm.prank(staker1); - core.setStake(newCourtID, 20000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - KlerosCore.Round memory round = core.getRoundInfo(disputeID, 0); - assertEq(round.disputeKitID, dkID3, "Wrong DK ID"); - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - - vm.prank(staker1); - disputeKit3.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - core.passPeriod(disputeID); // Appeal - - vm.prank(crowdfunder1); - disputeKit3.fundAppeal{value: 0.63 ether}(disputeID, 1); - - assertEq(core.isDisputeKitJumping(disputeID), true, "Should be jumping"); - - vm.expectEmit(true, true, true, true); - emit KlerosCore.CourtJump(disputeID, 1, newCourtID, GENERAL_COURT); - vm.expectEmit(true, true, true, true); - emit KlerosCore.DisputeKitJump(disputeID, 1, dkID3, dkID2); - vm.expectEmit(true, true, true, true); - emit DisputeKitClassicBase.DisputeCreation(disputeID, 2, newExtraData); - vm.expectEmit(true, true, true, true); - emit KlerosCore.AppealDecision(disputeID, arbitrable); - vm.expectEmit(true, true, true, true); - emit KlerosCore.NewPeriod(disputeID, KlerosCore.Period.evidence); - vm.prank(crowdfunder2); - disputeKit3.fundAppeal{value: 0.42 ether}(disputeID, 2); - - (, bool jumped, ) = disputeKit3.disputes(disputeID); - assertEq(jumped, true, "jumped should be true"); - assertEq( - (disputeKit3.getFundedChoices(disputeID)).length, - 2, - "No fresh round created so the number of funded choices should be 2" - ); - - round = core.getRoundInfo(disputeID, 1); - assertEq(round.disputeKitID, dkID2, "Wrong DK ID"); - assertEq(sortitionModule.disputesWithoutJurors(), 1, "Wrong disputesWithoutJurors count"); - (uint96 courtID, , , , ) = core.disputes(disputeID); - assertEq(courtID, GENERAL_COURT, "Wrong court ID"); - - (, jumped, ) = disputeKit2.disputes(disputeID); - assertEq(jumped, false, "jumped should be false in the DK that dispute jumped to"); - - // Check jump modifier - vm.prank(address(core)); - vm.expectRevert(DisputeKitClassicBase.DisputeJumpedToParentDK.selector); - disputeKit3.draw(disputeID, 1); - - // And check that draw in the new round works - vm.expectEmit(true, true, true, true); - emit KlerosCore.Draw(staker1, disputeID, 1, 0); // roundID = 1 VoteID = 0 - core.draw(disputeID, 1); - - (address account, , , ) = disputeKit2.getVoteInfo(disputeID, 1, 0); - assertEq(account, staker1, "Wrong drawn account in the classic DK"); - } - - function test_appeal_quickPassPeriod() public { - uint256 disputeID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 10000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - core.passPeriod(disputeID); // Appeal - - vm.warp(block.timestamp + timesPerPeriod[3] / 2); - - // Should pass to execution period without waiting for the 2nd half of the appeal. - vm.expectEmit(true, true, true, true); - emit KlerosCore.NewPeriod(disputeID, KlerosCore.Period.execution); - core.passPeriod(disputeID); - } -} diff --git a/contracts/test/foundry/KlerosCore_Disputes.t.sol b/contracts/test/foundry/KlerosCore_Disputes.t.sol deleted file mode 100644 index f9840014d..000000000 --- a/contracts/test/foundry/KlerosCore_Disputes.t.sol +++ /dev/null @@ -1,148 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {KlerosCore_TestBase} from "./KlerosCore_TestBase.sol"; -import {KlerosCore} from "../../src/arbitration/KlerosCore.sol"; -import {IArbitratorV2} from "../../src/arbitration/KlerosCore.sol"; -import {DisputeKitClassicBase} from "../../src/arbitration/dispute-kits/DisputeKitClassicBase.sol"; -import {IArbitrableV2} from "../../src/arbitration/arbitrables/ArbitrableExample.sol"; -import "../../src/libraries/Constants.sol"; - -/// @title KlerosCore_DisputesTest -/// @dev Tests for KlerosCore dispute creation and management -contract KlerosCore_DisputesTest is KlerosCore_TestBase { - function test_createDispute_eth() public { - // Create a new court and DK to test non-standard extra data - uint256 newFee = 0.01 ether; - uint96 newCourtID = 2; - uint256 newNbJurors = 4; - uint256 newDkID = 2; - uint256[] memory supportedDK = new uint256[](1); - supportedDK[0] = DISPUTE_KIT_CLASSIC; - bytes memory newExtraData = abi.encodePacked(uint256(newCourtID), newNbJurors, newDkID); - - vm.prank(owner); - core.addNewDisputeKit(disputeKit); // Just add the same dk to avoid dealing with initialization - vm.prank(owner); - core.createCourt( - GENERAL_COURT, - true, // Hidden votes - 2000, // min stake - 20000, // alpha - newFee, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)], // Times per period - abi.encode(uint256(4)), // Sortition extra data - supportedDK - ); - - arbitrable.changeArbitratorExtraData(newExtraData); - - vm.expectRevert(KlerosCore.ArbitrationFeesNotEnough.selector); - vm.prank(disputer); - arbitrable.createDispute{value: newFee * newNbJurors - 1}("Action"); - - vm.expectRevert(KlerosCore.DisputeKitNotSupportedByCourt.selector); - vm.prank(disputer); - arbitrable.createDispute{value: 0.04 ether}("Action"); - - vm.prank(owner); - supportedDK = new uint256[](1); - supportedDK[0] = newDkID; - core.enableDisputeKits(newCourtID, supportedDK, true); - - uint256 disputeID = 0; - uint256 nbChoices = 2; - vm.prank(disputer); - vm.expectEmit(true, true, true, true); - emit DisputeKitClassicBase.DisputeCreation(disputeID, nbChoices, newExtraData); - vm.expectEmit(true, true, true, true); - emit IArbitratorV2.DisputeCreation(disputeID, arbitrable); - arbitrable.createDispute{value: 0.04 ether}("Action"); - - assertEq(sortitionModule.disputesWithoutJurors(), 1, "Wrong disputesWithoutJurors count"); - ( - uint96 courtID, - IArbitrableV2 arbitrated, - KlerosCore.Period period, - bool ruled, - uint256 lastPeriodChange - ) = core.disputes(disputeID); - - assertEq(courtID, newCourtID, "Wrong court ID"); - assertEq(address(arbitrated), address(arbitrable), "Wrong arbitrable"); - assertEq(uint256(period), uint256(KlerosCore.Period.evidence), "Wrong period"); - assertEq(ruled, false, "Should not be ruled"); - assertEq(lastPeriodChange, block.timestamp, "Wrong lastPeriodChange"); - - KlerosCore.Round memory round = core.getRoundInfo(disputeID, 0); - assertEq(round.disputeKitID, newDkID, "Wrong DK ID"); - assertEq(round.pnkAtStakePerJuror, 4000, "Wrong pnkAtStakePerJuror"); // minStake * alpha / divisor = 2000 * 20000/10000 - assertEq(round.totalFeesForJurors, 0.04 ether, "Wrong totalFeesForJurors"); - assertEq(round.nbVotes, 4, "Wrong nbVotes"); - assertEq(round.repartitions, 0, "repartitions should be 0"); - assertEq(round.pnkPenalties, 0, "pnkPenalties should be 0"); - assertEq(round.sumFeeRewardPaid, 0, "sumFeeRewardPaid should be 0"); - assertEq(round.sumPnkRewardPaid, 0, "sumPnkRewardPaid should be 0"); - assertEq(address(round.feeToken), address(0), "feeToken should be 0"); - assertEq(round.drawIterations, 0, "drawIterations should be 0"); - - (uint256 numberOfChoices, bool jumped, bytes memory extraData) = disputeKit.disputes(disputeID); - - assertEq(numberOfChoices, 2, "Wrong numberOfChoices"); - assertEq(jumped, false, "jumped should be false"); - assertEq(extraData, newExtraData, "Wrong extra data"); - assertEq(disputeKit.coreDisputeIDToLocal(0), disputeID, "Wrong local disputeID"); - assertEq(disputeKit.coreDisputeIDToActive(0), true, "Wrong disputes length"); - - ( - uint256 winningChoice, - bool tied, - uint256 totalVoted, - uint256 totalCommited, - uint256 nbVoters, - uint256 choiceCount - ) = disputeKit.getRoundInfo(0, 0, 0); - assertEq(winningChoice, 0, "winningChoice should be 0"); - assertEq(tied, true, "tied should be true"); - assertEq(totalVoted, 0, "totalVoted should be 0"); - assertEq(totalCommited, 0, "totalCommited should be 0"); - assertEq(nbVoters, 0, "nbVoters should be 0"); - assertEq(choiceCount, 0, "choiceCount should be 0"); - } - - function test_createDispute_tokens() public { - feeToken.transfer(disputer, 1 ether); - vm.prank(disputer); - feeToken.approve(address(arbitrable), 1 ether); - - vm.expectRevert(KlerosCore.TokenNotAccepted.selector); - vm.prank(disputer); - arbitrable.createDispute("Action", 0.18 ether); - - vm.prank(owner); - core.changeAcceptedFeeTokens(feeToken, true); - vm.prank(owner); - core.changeCurrencyRates(feeToken, 500, 3); - - vm.expectRevert(KlerosCore.ArbitrationFeesNotEnough.selector); - vm.prank(disputer); - arbitrable.createDispute("Action", 0.18 ether - 1); - - vm.expectRevert(KlerosCore.TransferFailed.selector); - vm.prank(address(arbitrable)); // Bypass createDispute in arbitrable to avoid transfer checks there and make the arbitrable call KC directly - core.createDispute(2, arbitratorExtraData, feeToken, 0.18 ether); - - assertEq(core.arbitrationCost(arbitratorExtraData, feeToken), 0.18 ether, "Wrong token cost"); - vm.prank(disputer); - arbitrable.createDispute("Action", 0.18 ether); - - KlerosCore.Round memory round = core.getRoundInfo(0, 0); - assertEq(round.totalFeesForJurors, 0.18 ether, "Wrong totalFeesForJurors"); - assertEq(round.nbVotes, 3, "Wrong nbVotes"); - assertEq(address(round.feeToken), address(feeToken), "Wrong feeToken"); - - assertEq(feeToken.balanceOf(address(core)), 0.18 ether, "Wrong token balance of the core"); - assertEq(feeToken.balanceOf(disputer), 0.82 ether, "Wrong token balance of the disputer"); - } -} diff --git a/contracts/test/foundry/KlerosCore_Drawing.t.sol b/contracts/test/foundry/KlerosCore_Drawing.t.sol deleted file mode 100644 index 9bffbc27d..000000000 --- a/contracts/test/foundry/KlerosCore_Drawing.t.sol +++ /dev/null @@ -1,124 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {KlerosCore_TestBase} from "./KlerosCore_TestBase.sol"; -import {KlerosCore} from "../../src/arbitration/KlerosCore.sol"; -import {SortitionModule} from "../../src/arbitration/SortitionModule.sol"; -import {ISortitionModule} from "../../src/arbitration/interfaces/ISortitionModule.sol"; -import "../../src/libraries/Constants.sol"; - -/// @title KlerosCore_DrawingTest -/// @dev Tests for KlerosCore jury drawing and selection mechanisms -contract KlerosCore_DrawingTest is KlerosCore_TestBase { - function test_draw() public { - uint256 disputeID = 0; - uint256 roundID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 1500); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeLocked(staker1, 1000, false); - vm.expectEmit(true, true, true, true); - emit KlerosCore.Draw(staker1, disputeID, roundID, 0); // VoteID = 0 - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); // Do 3 iterations and see that the juror will get drawn 3 times despite low stake. - - (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, ) = sortitionModule.getJurorBalance( - staker1, - GENERAL_COURT - ); - assertEq(totalStaked, 1500, "Wrong amount total staked"); - assertEq(totalLocked, 3000, "Wrong amount locked"); // 1000 per draw - assertEq(stakedInCourt, 1500, "Wrong amount staked in court"); - assertEq(sortitionModule.disputesWithoutJurors(), 0, "Wrong disputesWithoutJurors count"); - - for (uint256 i = 0; i < DEFAULT_NB_OF_JURORS; i++) { - (address account, bytes32 commit, uint256 choice, bool voted) = disputeKit.getVoteInfo(0, 0, i); - assertEq(account, staker1, "Wrong drawn account"); - assertEq(commit, bytes32(0), "Commit should be empty"); - assertEq(choice, 0, "Choice should be empty"); - assertEq(voted, false, "Voted should be false"); - } - } - - function test_draw_noEmptyAddresses() public { - uint256 disputeID = 0; - uint256 roundID = 0; - - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); // No one is staked so check that the empty addresses are not drawn. - - KlerosCore.Round memory round = core.getRoundInfo(disputeID, roundID); - assertEq(round.drawIterations, 3, "Wrong drawIterations number"); - - (, , , , uint256 nbVoters, ) = disputeKit.getRoundInfo(disputeID, roundID, 0); - assertEq(nbVoters, 0, "nbVoters should be 0"); - } - - function test_draw_parentCourts() public { - uint96 newCourtID = 2; - uint256 disputeID = 0; - uint256 roundID = 0; - - // Create a child court and stake exclusively there to check that parent courts hold drawing power. - vm.prank(owner); - uint256[] memory supportedDK = new uint256[](1); - supportedDK[0] = DISPUTE_KIT_CLASSIC; - core.createCourt( - GENERAL_COURT, - true, // Hidden votes - 1000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)], // Times per period - sortitionExtraData, // Sortition extra data - supportedDK - ); - - uint256[] memory children = core.getCourtChildren(GENERAL_COURT); - assertEq(children.length, 1, "Wrong children count"); - assertEq(children[0], 2, "Wrong child ID"); - - vm.prank(staker1); - core.setStake(newCourtID, 3000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); // Dispute uses general court by default - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - (uint96 courtID, , , , ) = core.disputes(disputeID); - assertEq(courtID, GENERAL_COURT, "Wrong court ID of the dispute"); - - vm.expectEmit(true, true, true, true); - emit KlerosCore.Draw(staker1, disputeID, roundID, 0); - vm.expectEmit(true, true, true, true); - emit KlerosCore.Draw(staker1, disputeID, roundID, 1); - vm.expectEmit(true, true, true, true); - emit KlerosCore.Draw(staker1, disputeID, roundID, 2); - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - assertEq(sortitionModule.disputesWithoutJurors(), 0, "Wrong disputesWithoutJurors count"); - - KlerosCore.Round memory round = core.getRoundInfo(disputeID, roundID); - assertEq(round.drawIterations, 3, "Wrong drawIterations number"); - - (, , , , uint256 nbVoters, ) = disputeKit.getRoundInfo(disputeID, roundID, 0); - assertEq(nbVoters, 3, "nbVoters should be 3"); - } -} diff --git a/contracts/test/foundry/KlerosCore_Execution.t.sol b/contracts/test/foundry/KlerosCore_Execution.t.sol deleted file mode 100644 index 01efd6409..000000000 --- a/contracts/test/foundry/KlerosCore_Execution.t.sol +++ /dev/null @@ -1,760 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {KlerosCore_TestBase} from "./KlerosCore_TestBase.sol"; -import {KlerosCore} from "../../src/arbitration/KlerosCore.sol"; -import {SortitionModule} from "../../src/arbitration/SortitionModule.sol"; -import {DisputeKitClassicBase} from "../../src/arbitration/dispute-kits/DisputeKitClassicBase.sol"; -import {IArbitratorV2, IArbitrableV2} from "../../src/arbitration/KlerosCore.sol"; -import {IERC20} from "../../src/libraries/SafeERC20.sol"; -import "../../src/libraries/Constants.sol"; - -/// @title KlerosCore_ExecutionTest -/// @dev Tests for KlerosCore execution, rewards, and ruling finalization -contract KlerosCore_ExecutionTest is KlerosCore_TestBase { - function test_execute() public { - uint256 disputeID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 2000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - // Split the stakers' votes. The first staker will get VoteID 0 and the second will take the rest. - core.draw(disputeID, 1); - - vm.warp(block.timestamp + maxDrawingTime); - sortitionModule.passPhase(); // Staking phase to stake the 2nd voter - vm.prank(staker2); - core.setStake(GENERAL_COURT, 20000); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, 2); // Assign leftover votes to staker2 - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](1); - voteIDs[0] = 0; - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 1, 0, "XYZ"); // Staker1 only got 1 vote because of low stake - - voteIDs = new uint256[](2); - voteIDs[0] = 1; - voteIDs[1] = 2; - vm.prank(staker2); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - core.passPeriod(disputeID); // Appeal - - vm.expectRevert(KlerosCore.NotExecutionPeriod.selector); - core.execute(disputeID, 0, 1); - - vm.warp(block.timestamp + timesPerPeriod[3]); - core.passPeriod(disputeID); // Execution - - vm.prank(owner); - core.pause(); - vm.expectRevert(KlerosCore.WhenNotPausedOnly.selector); - core.execute(disputeID, 0, 1); - vm.prank(owner); - core.unpause(); - - assertEq(disputeKit.getCoherentCount(disputeID, 0), 2, "Wrong coherent count"); - - uint256 pnkCoherence; - uint256 feeCoherence; - // dispute, round, voteID, feeForJuror (not used in classic DK), pnkPerJuror (not used in classic DK) - (pnkCoherence, feeCoherence) = disputeKit.getDegreeOfCoherenceReward(disputeID, 0, 0, 0, 0); - assertEq(pnkCoherence, 0, "Wrong reward pnk coherence 0 vote ID"); - assertEq(feeCoherence, 0, "Wrong reward fee coherence 0 vote ID"); - - (pnkCoherence, feeCoherence) = disputeKit.getDegreeOfCoherenceReward(disputeID, 0, 1, 0, 0); - assertEq(pnkCoherence, 10000, "Wrong reward pnk coherence 1 vote ID"); - assertEq(feeCoherence, 10000, "Wrong reward fee coherence 1 vote ID"); - - (pnkCoherence, feeCoherence) = disputeKit.getDegreeOfCoherenceReward(disputeID, 0, 2, 0, 0); - assertEq(pnkCoherence, 10000, "Wrong reward pnk coherence 2 vote ID"); - assertEq(feeCoherence, 10000, "Wrong reward fee coherence 2 vote ID"); - - assertEq(disputeKit.getDegreeOfCoherencePenalty(disputeID, 0, 0, 0, 0), 0, "Wrong penalty coherence 0 vote ID"); - assertEq( - disputeKit.getDegreeOfCoherencePenalty(disputeID, 0, 1, 0, 0), - 10000, - "Wrong penalty coherence 1 vote ID" - ); - assertEq( - disputeKit.getDegreeOfCoherencePenalty(disputeID, 0, 2, 0, 0), - 10000, - "Wrong penalty coherence 2 vote ID" - ); - - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeLocked(staker1, 1000, true); - vm.expectEmit(true, true, true, true); - emit KlerosCore.TokenAndETHShift(staker1, disputeID, 0, 0, -int256(1000), 0, IERC20(address(0))); - // Check iterations for the winning staker to see the shifts - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeLocked(staker2, 0, true); - vm.expectEmit(true, true, true, true); - emit KlerosCore.TokenAndETHShift(staker2, disputeID, 0, 10000, 0, 0, IERC20(address(0))); - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeLocked(staker2, 0, true); - vm.expectEmit(true, true, true, true); - emit KlerosCore.TokenAndETHShift(staker2, disputeID, 0, 10000, 0, 0, IERC20(address(0))); - core.execute(disputeID, 0, 3); // Do 3 iterations to check penalties first - - (uint256 totalStaked, uint256 totalLocked, , ) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 1000, "totalStaked should be penalized"); // 2000 - 1000 - assertEq(totalLocked, 0, "Tokens should be released for staker1"); - (, totalLocked, , ) = sortitionModule.getJurorBalance(staker2, GENERAL_COURT); - assertEq(totalLocked, 2000, "Tokens should still be locked for staker2"); - - KlerosCore.Round memory round = core.getRoundInfo(disputeID, 0); - assertEq(round.repartitions, 3, "Wrong repartitions"); - assertEq(round.pnkPenalties, 1000, "Wrong pnkPenalties"); - - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeLocked(staker1, 0, true); - vm.expectEmit(true, true, true, true); - emit KlerosCore.TokenAndETHShift(staker1, disputeID, 0, 0, 0, 0, IERC20(address(0))); - // Check iterations for the winning staker to see the shifts - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeLocked(staker2, 1000, true); - vm.expectEmit(true, true, true, true); - emit KlerosCore.TokenAndETHShift(staker2, disputeID, 0, 10000, 500, 0.045 ether, IERC20(address(0))); - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeLocked(staker2, 1000, true); - vm.expectEmit(true, true, true, true); - emit KlerosCore.TokenAndETHShift(staker2, disputeID, 0, 10000, 500, 0.045 ether, IERC20(address(0))); - core.execute(disputeID, 0, 10); // Finish the iterations. We need only 3 but check that it corrects the count. - - (, totalLocked, , ) = sortitionModule.getJurorBalance(staker2, GENERAL_COURT); - assertEq(totalLocked, 0, "Tokens should be unlocked for staker2"); - - round = core.getRoundInfo(disputeID, 0); - assertEq(round.repartitions, 6, "Wrong repartitions"); - assertEq(round.pnkPenalties, 1000, "Wrong pnkPenalties"); - assertEq(round.sumFeeRewardPaid, 0.09 ether, "Wrong sumFeeRewardPaid"); - assertEq(round.sumPnkRewardPaid, 1000, "Wrong sumPnkRewardPaid"); - - assertEq(address(core).balance, 0, "Wrong balance of the core"); - assertEq(staker1.balance, 0, "Wrong balance of the staker1"); - assertEq(staker2.balance, 0.09 ether, "Wrong balance of the staker2"); - - assertEq(pinakion.balanceOf(address(core)), 22000, "Wrong token balance of the core"); // Was 21500. 1000 was transferred to staker2 - assertEq(pinakion.balanceOf(staker1), 999999999999998000, "Wrong token balance of staker1"); - assertEq(pinakion.balanceOf(staker2), 999999999999980000, "Wrong token balance of staker2"); // 20k stake and 1k added as a reward, thus -19k from the default - } - - function test_execute_NoCoherence() public { - uint256 disputeID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 20000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - vm.warp(block.timestamp + timesPerPeriod[2]); // Don't vote at all so no one is coherent - core.passPeriod(disputeID); // Appeal - - vm.warp(block.timestamp + timesPerPeriod[3]); - core.passPeriod(disputeID); // Execution - - assertEq(disputeKit.getCoherentCount(disputeID, 0), 0, "Wrong coherent count"); - - uint256 pnkCoherence; - uint256 feeCoherence; - // dispute, round, voteID, feeForJuror (not used in classic DK), pnkPerJuror (not used in classic DK) - (pnkCoherence, feeCoherence) = disputeKit.getDegreeOfCoherenceReward(disputeID, 0, 0, 0, 0); - assertEq(pnkCoherence, 0, "Wrong reward pnk coherence 0 vote ID"); - assertEq(feeCoherence, 0, "Wrong reward fee coherence 0 vote ID"); - - (pnkCoherence, feeCoherence) = disputeKit.getDegreeOfCoherenceReward(disputeID, 0, 1, 0, 0); - assertEq(pnkCoherence, 0, "Wrong reward pnk coherence 1 vote ID"); - assertEq(feeCoherence, 0, "Wrong reward fee coherence 1 vote ID"); - - (pnkCoherence, feeCoherence) = disputeKit.getDegreeOfCoherenceReward(disputeID, 0, 2, 0, 0); - assertEq(pnkCoherence, 0, "Wrong reward pnk coherence 2 vote ID"); - assertEq(feeCoherence, 0, "Wrong reward fee coherence 2 vote ID"); - - assertEq(disputeKit.getDegreeOfCoherencePenalty(disputeID, 0, 0, 0, 0), 0, "Wrong penalty coherence 0 vote ID"); - assertEq(disputeKit.getDegreeOfCoherencePenalty(disputeID, 0, 1, 0, 0), 0, "Wrong penalty coherence 1 vote ID"); - assertEq(disputeKit.getDegreeOfCoherencePenalty(disputeID, 0, 2, 0, 0), 0, "Wrong penalty coherence 2 vote ID"); - - uint256 ownerBalance = owner.balance; - uint256 ownerTokenBalance = pinakion.balanceOf(owner); - - vm.expectEmit(true, true, true, true); - emit KlerosCore.LeftoverRewardSent(disputeID, 0, 3000, 0.09 ether, IERC20(address(0))); - core.execute(disputeID, 0, 3); - - KlerosCore.Round memory round = core.getRoundInfo(disputeID, 0); - assertEq(round.pnkPenalties, 3000, "Wrong pnkPenalties"); - assertEq(round.sumFeeRewardPaid, 0, "Wrong sumFeeRewardPaid"); - assertEq(round.sumPnkRewardPaid, 0, "Wrong sumPnkRewardPaid"); - - assertEq(address(core).balance, 0, "Wrong balance of the core"); - assertEq(staker1.balance, 0, "Wrong balance of the staker1"); - assertEq(owner.balance, ownerBalance + 0.09 ether, "Wrong balance of the owner"); - - assertEq(pinakion.balanceOf(address(core)), 0, "Wrong token balance of the core"); // The inactive juror got unstaked regardless of the phase (`noDelay` is true) - assertEq(pinakion.balanceOf(staker1), 999999999999997000, "Wrong token balance of staker1"); - assertEq(pinakion.balanceOf(owner), ownerTokenBalance + 3000, "Wrong token balance of owner"); - } - - function test_execute_UnstakeInactive() public { - // Create a 2nd court so unstaking is done in multiple courts. - vm.prank(owner); - uint256[] memory supportedDK = new uint256[](1); - supportedDK[0] = DISPUTE_KIT_CLASSIC; - core.createCourt( - GENERAL_COURT, - true, // Hidden votes - 1000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)], // Times per period - sortitionExtraData, // Sortition extra data - supportedDK - ); - - uint256 disputeID = 0; - uint96 newCourtID = 2; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 20000); - vm.prank(staker1); - core.setStake(newCourtID, 20000); - (, , , uint256 nbCourts) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(nbCourts, 2, "Wrong number of courts"); - - assertEq(pinakion.balanceOf(address(core)), 40000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999960000, "Wrong token balance of staker1"); - - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - sortitionModule.passPhase(); // Staking phase. Change to staking so we don't have to deal with delayed stakes. - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - vm.warp(block.timestamp + timesPerPeriod[2]); // Don't vote at all so no one is coherent - core.passPeriod(disputeID); // Appeal - - vm.warp(block.timestamp + timesPerPeriod[3]); - core.passPeriod(disputeID); // Execution - - uint256 ownerTokenBalance = pinakion.balanceOf(owner); - - // Note that these events are emitted only after the first iteration of execute() therefore the juror has been penalized only for 1000 PNK her. - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeSet(staker1, newCourtID, 19000, 39000); // 1000 PNK penalty for voteID 0 - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeSet(staker1, newCourtID, 0, 20000); // Starting with 40000 we first nullify the stake and remove 19000 and then remove penalty once since there was only first iteration (40000 - 20000 - 1000) - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeSet(staker1, GENERAL_COURT, 0, 2000); // 2000 PNK should remain in balance to cover penalties since the first 1000 of locked pnk was already unlocked - core.execute(disputeID, 0, 3); - - assertEq(pinakion.balanceOf(address(core)), 0, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999997000, "Wrong token balance of staker1"); // 3000 locked PNK was withheld by the contract and given to owner. - assertEq(pinakion.balanceOf(owner), ownerTokenBalance + 3000, "Wrong token balance of owner"); - - (, , , nbCourts) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(nbCourts, 0, "Should unstake from all courts"); - } - - function test_execute_UnstakeInsolvent() public { - uint256 disputeID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 1000); - - assertEq(pinakion.balanceOf(address(core)), 1000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999999000, "Wrong token balance of staker1"); - - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - (uint256 totalStaked, uint256 totalLocked, , uint256 nbCourts) = sortitionModule.getJurorBalance( - staker1, - GENERAL_COURT - ); - assertEq(totalStaked, 1000, "Wrong totalStaked"); - assertEq(totalLocked, 3000, "totalLocked should exceed totalStaked"); // Juror only staked 1000 but was drawn 3x of minStake (3000 locked) - assertEq(nbCourts, 1, "Wrong number of courts"); - - sortitionModule.passPhase(); // Staking phase. Change to staking so we don't have to deal with delayed stakes. - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](1); - voteIDs[0] = 0; - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 1, 0, "XYZ"); // 1 incoherent vote should make the juror insolvent - - voteIDs = new uint256[](2); - voteIDs[0] = 1; - voteIDs[1] = 2; - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - core.passPeriod(disputeID); // Appeal - - vm.warp(block.timestamp + timesPerPeriod[3]); - core.passPeriod(disputeID); // Execution - - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeSet(staker1, GENERAL_COURT, 0, 0); // Juror should have no stake left and should be unstaked from the court automatically. - core.execute(disputeID, 0, 6); - - assertEq(pinakion.balanceOf(address(core)), 0, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 1 ether, "Wrong token balance of staker1"); // The juror should have his penalty back as a reward - - (, , , nbCourts) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(nbCourts, 0, "Should unstake from all courts"); - } - - function test_execute_UnstakeBelowMinStake() public { - uint256 disputeID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 1200); - - vm.prank(staker2); - core.setStake(GENERAL_COURT, 10000); - - assertEq(pinakion.balanceOf(address(core)), 11200, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999998800, "Wrong token balance of staker1"); - assertEq(pinakion.balanceOf(staker2), 999999999999990000, "Wrong token balance of staker2"); - - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - (uint256 totalStaked, uint256 totalLocked, , uint256 nbCourts) = sortitionModule.getJurorBalance( - staker1, - GENERAL_COURT - ); - assertEq(totalStaked, 1200, "Wrong totalStaked"); - assertEq(totalLocked, 1000, "Wrong totalLocked"); // Juror only staked 1000 but will fall below minStake with a bad vote - assertEq(nbCourts, 1, "Wrong number of courts"); - - sortitionModule.passPhase(); // Staking phase. Change to staking so we don't have to deal with delayed stakes. - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](1); - voteIDs[0] = 0; - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 1, 0, "XYZ"); // 1 incoherent vote should make the juror's stake below minStake - - voteIDs = new uint256[](2); - voteIDs[0] = 1; - voteIDs[1] = 2; - vm.prank(staker2); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - core.passPeriod(disputeID); // Appeal - - vm.warp(block.timestamp + timesPerPeriod[3]); - core.passPeriod(disputeID); // Execution - - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeSet(staker1, GENERAL_COURT, 0, 0); // Juror balance should be below minStake and should be unstaked from the court automatically. - core.execute(disputeID, 0, 6); - - assertEq(pinakion.balanceOf(address(core)), 11000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 1 ether - 1000, "Wrong token balance of staker1"); // The juror should have his penalty back as a reward - assertEq(pinakion.balanceOf(staker2), 999999999999990000, "Wrong token balance of staker2"); // No change - - (totalStaked, totalLocked, , nbCourts) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 0, "Wrong staker1 totalStaked"); - assertEq(totalLocked, 0, "Wrong staker1 totalLocked"); - assertEq(nbCourts, 0, "Wrong staker1 nbCourts"); - - (totalStaked, totalLocked, , nbCourts) = sortitionModule.getJurorBalance(staker2, GENERAL_COURT); - assertEq(totalStaked, 11000, "Wrong staker2 totalStaked"); - assertEq(totalLocked, 0, "Wrong staker2 totalLocked"); - assertEq(nbCourts, 1, "Wrong staker2 nbCourts"); - } - - function test_execute_withdrawLeftoverPNK() public { - // Return the previously locked tokens - uint256 disputeID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 1000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - sortitionModule.passPhase(); // Staking. Pass the phase so the juror can unstake before execution - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - core.passPeriod(disputeID); // Appeal - - vm.warp(block.timestamp + timesPerPeriod[3]); - core.passPeriod(disputeID); // Execution - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 0); // Set stake to 0 to check if it will be withdrawn later. - - (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts) = sortitionModule - .getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 1000, "Wrong amount staked"); - assertEq(totalLocked, 3000, "Wrong amount locked"); - assertEq(stakedInCourt, 0, "Should be unstaked"); - assertEq(nbCourts, 0, "Should be 0 courts"); - - assertEq(pinakion.balanceOf(address(core)), 1000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999999000, "Wrong token balance of staker1"); - - vm.expectRevert(SortitionModule.NotEligibleForWithdrawal.selector); - sortitionModule.withdrawLeftoverPNK(staker1); - - vm.expectEmit(true, true, true, true); - emit SortitionModule.LeftoverPNK(staker1, 1000); - core.execute(disputeID, 0, 6); - - (totalStaked, totalLocked, , ) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 1000, "Wrong amount staked"); - assertEq(totalLocked, 0, "Should be fully unlocked"); - - KlerosCore.Round memory round = core.getRoundInfo(disputeID, 0); - assertEq(round.pnkPenalties, 0, "Wrong pnkPenalties"); - assertEq(round.sumFeeRewardPaid, 0.09 ether, "Wrong sumFeeRewardPaid"); - assertEq(round.sumPnkRewardPaid, 0, "Wrong sumPnkRewardPaid"); // No penalty so no rewards in pnk - - // Execute() shouldn't withdraw the tokens. - assertEq(pinakion.balanceOf(address(core)), 1000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999999000, "Wrong token balance of staker1"); - - vm.expectRevert(KlerosCore.SortitionModuleOnly.selector); - vm.prank(owner); - core.transferBySortitionModule(staker1, 1000); - - vm.expectEmit(true, true, true, true); - emit SortitionModule.LeftoverPNKWithdrawn(staker1, 1000); - sortitionModule.withdrawLeftoverPNK(staker1); - - (totalStaked, , , ) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 0, "Should be unstaked fully"); - - // Check that everything is withdrawn now - assertEq(pinakion.balanceOf(address(core)), 0, "Core balance should be empty"); - assertEq(pinakion.balanceOf(staker1), 1 ether, "All PNK should be withdrawn"); - } - - function test_execute_feeToken() public { - uint256 disputeID = 0; - - feeToken.transfer(disputer, 1 ether); - vm.prank(disputer); - feeToken.approve(address(arbitrable), 1 ether); - - vm.prank(owner); - core.changeAcceptedFeeTokens(feeToken, true); - vm.prank(owner); - core.changeCurrencyRates(feeToken, 500, 3); - - vm.prank(disputer); - arbitrable.createDispute("Action", 0.18 ether); - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 20000); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 1, 0, "XYZ"); // Staker1 only got 1 vote because of low stake - - core.passPeriod(disputeID); // Appeal - - vm.warp(block.timestamp + timesPerPeriod[3]); - core.passPeriod(disputeID); // Execution - - // Check only once per penalty and per reward - vm.expectEmit(true, true, true, true); - emit KlerosCore.TokenAndETHShift(staker1, disputeID, 0, 10000, 0, 0, feeToken); - vm.expectEmit(true, true, true, true); - emit KlerosCore.TokenAndETHShift(staker1, disputeID, 0, 10000, 0, 0.06 ether, feeToken); - core.execute(disputeID, 0, 6); - - KlerosCore.Round memory round = core.getRoundInfo(disputeID, 0); - assertEq(round.sumFeeRewardPaid, 0.18 ether, "Wrong sumFeeRewardPaid"); - - assertEq(feeToken.balanceOf(address(core)), 0, "Wrong fee token balance of the core"); - assertEq(feeToken.balanceOf(staker1), 0.18 ether, "Wrong fee token balance of staker1"); - assertEq(feeToken.balanceOf(disputer), 0.82 ether, "Wrong fee token balance of disputer"); - } - - function test_execute_NoCoherence_feeToken() public { - uint256 disputeID = 0; - - feeToken.transfer(disputer, 1 ether); - vm.prank(disputer); - feeToken.approve(address(arbitrable), 1 ether); - - vm.prank(owner); - core.changeAcceptedFeeTokens(feeToken, true); - vm.prank(owner); - core.changeCurrencyRates(feeToken, 500, 3); - - vm.prank(disputer); - arbitrable.createDispute("Action", 0.18 ether); - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 20000); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - vm.warp(block.timestamp + timesPerPeriod[2]); // Don't vote at all so no one is coherent - core.passPeriod(disputeID); // Appeal - - vm.warp(block.timestamp + timesPerPeriod[3]); - core.passPeriod(disputeID); // Execution - - vm.expectEmit(true, true, true, true); - emit KlerosCore.LeftoverRewardSent(disputeID, 0, 3000, 0.18 ether, feeToken); - core.execute(disputeID, 0, 10); // Put more iterations to check that they're capped - - KlerosCore.Round memory round = core.getRoundInfo(disputeID, 0); - assertEq(round.pnkPenalties, 3000, "Wrong pnkPenalties"); - assertEq(round.sumFeeRewardPaid, 0, "Wrong sumFeeRewardPaid"); - assertEq(round.sumPnkRewardPaid, 0, "Wrong sumPnkRewardPaid"); - assertEq(round.repartitions, 3, "Wrong repartitions"); - - assertEq(feeToken.balanceOf(address(core)), 0, "Wrong token balance of the core"); - assertEq(feeToken.balanceOf(staker1), 0, "Wrong token balance of staker1"); - assertEq(feeToken.balanceOf(disputer), 0.82 ether, "Wrong token balance of disputer"); - assertEq(feeToken.balanceOf(owner), 0.18 ether, "Wrong token balance of owner"); - } - - function test_executeRuling() public { - uint256 disputeID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 20000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - core.passPeriod(disputeID); // Appeal - - vm.expectRevert(KlerosCore.NotExecutionPeriod.selector); - core.executeRuling(disputeID); - - vm.warp(block.timestamp + timesPerPeriod[3]); - vm.expectEmit(true, true, true, true); - emit KlerosCore.NewPeriod(disputeID, KlerosCore.Period.execution); - core.passPeriod(disputeID); // Execution - - (, , KlerosCore.Period period, , uint256 lastPeriodChange) = core.disputes(disputeID); - assertEq(uint256(period), uint256(KlerosCore.Period.execution), "Wrong period"); - assertEq(lastPeriodChange, block.timestamp, "Wrong lastPeriodChange"); - - vm.expectRevert(KlerosCore.DisputePeriodIsFinal.selector); - core.passPeriod(disputeID); - - vm.expectEmit(true, true, true, true); - emit IArbitratorV2.Ruling(arbitrable, disputeID, 2); // Winning choice = 2 - vm.expectEmit(true, true, true, true); - emit IArbitrableV2.Ruling(core, disputeID, 2); - core.executeRuling(disputeID); - - vm.expectRevert(KlerosCore.RulingAlreadyExecuted.selector); - core.executeRuling(disputeID); - - (, , , bool ruled, ) = core.disputes(disputeID); - assertEq(ruled, true, "Should be ruled"); - } - - function test_executeRuling_appealSwitch() public { - // Check that the ruling switches if only one side was funded - uint256 disputeID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 20000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - core.passPeriod(disputeID); // Appeal - - vm.prank(crowdfunder1); - disputeKit.fundAppeal{value: 0.63 ether}(disputeID, 1); // Fund the losing choice - - vm.warp(block.timestamp + timesPerPeriod[3]); - core.passPeriod(disputeID); // Execution - - vm.expectEmit(true, true, true, true); - emit IArbitratorV2.Ruling(arbitrable, disputeID, 1); // Winning choice is switched to 1 - vm.expectEmit(true, true, true, true); - emit IArbitrableV2.Ruling(core, disputeID, 1); - core.executeRuling(disputeID); - - (uint256 ruling, bool tied, bool overridden) = disputeKit.currentRuling(disputeID); - assertEq(ruling, 1, "Wrong ruling"); - assertEq(tied, false, "Not tied"); - assertEq(overridden, true, "Should be overridden"); - } - - function test_withdrawFeesAndRewards() public { - uint256 disputeID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 20000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - core.passPeriod(disputeID); // Appeal - - vm.prank(crowdfunder1); - disputeKit.fundAppeal{value: 0.63 ether}(disputeID, 1); // Fund the losing choice. The ruling will be overridden here - vm.prank(crowdfunder2); - disputeKit.fundAppeal{value: 0.41 ether}(disputeID, 2); // Underpay a bit to not create an appeal and withdraw the funded sum fully - - vm.warp(block.timestamp + timesPerPeriod[3]); - core.passPeriod(disputeID); // Execution - - vm.expectRevert(DisputeKitClassicBase.DisputeNotResolved.selector); - disputeKit.withdrawFeesAndRewards(disputeID, payable(staker1), 0, 1); - - core.executeRuling(disputeID); - - vm.prank(owner); - core.pause(); - vm.expectRevert(DisputeKitClassicBase.CoreIsPaused.selector); - disputeKit.withdrawFeesAndRewards(disputeID, payable(staker1), 0, 1); - vm.prank(owner); - core.unpause(); - - assertEq(crowdfunder1.balance, 9.37 ether, "Wrong balance of the crowdfunder1"); - assertEq(crowdfunder2.balance, 9.59 ether, "Wrong balance of the crowdfunder2"); - assertEq(address(disputeKit).balance, 1.04 ether, "Wrong balance of the DK"); - - vm.expectEmit(true, true, true, true); - emit DisputeKitClassicBase.Withdrawal(disputeID, 0, 1, crowdfunder1, 0.63 ether); - disputeKit.withdrawFeesAndRewards(disputeID, payable(crowdfunder1), 0, 1); - - vm.expectEmit(true, true, true, true); - emit DisputeKitClassicBase.Withdrawal(disputeID, 0, 2, crowdfunder2, 0.41 ether); - disputeKit.withdrawFeesAndRewards(disputeID, payable(crowdfunder2), 0, 2); - - assertEq(crowdfunder1.balance, 10 ether, "Wrong balance of the crowdfunder1"); - assertEq(crowdfunder2.balance, 10 ether, "Wrong balance of the crowdfunder2"); - assertEq(address(disputeKit).balance, 0, "Wrong balance of the DK"); - } -} diff --git a/contracts/test/foundry/KlerosCore_Governance.t.sol b/contracts/test/foundry/KlerosCore_Governance.t.sol deleted file mode 100644 index 53d438c4d..000000000 --- a/contracts/test/foundry/KlerosCore_Governance.t.sol +++ /dev/null @@ -1,472 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {KlerosCore_TestBase} from "./KlerosCore_TestBase.sol"; -import {KlerosCore} from "../../src/arbitration/KlerosCore.sol"; -import {IArbitratorV2} from "../../src/arbitration/KlerosCore.sol"; -import {DisputeKitSybilResistant} from "../../src/arbitration/dispute-kits/DisputeKitSybilResistant.sol"; -import {SortitionModuleMock} from "../../src/test/SortitionModuleMock.sol"; -import {PNK} from "../../src/token/PNK.sol"; -import "../../src/libraries/Constants.sol"; - -/// @title KlerosCore_GovernanceTest -/// @dev Tests for KlerosCore governance functions (owner/guardian operations) -contract KlerosCore_GovernanceTest is KlerosCore_TestBase { - function test_pause() public { - vm.expectRevert(KlerosCore.GuardianOrOwnerOnly.selector); - vm.prank(other); - core.pause(); - // Note that we must explicitly switch to the owner/guardian address to make the call, otherwise Foundry treats UUPS proxy as msg.sender. - vm.prank(guardian); - vm.expectEmit(true, true, true, true); - emit KlerosCore.Paused(); - core.pause(); - assertEq(core.paused(), true, "Wrong paused value"); - // Switch between owner and guardian to test both. WhenNotPausedOnly modifier is triggered after owner's check. - vm.prank(owner); - vm.expectRevert(KlerosCore.WhenNotPausedOnly.selector); - core.pause(); - } - - function test_unpause() public { - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - core.unpause(); - - vm.expectRevert(KlerosCore.WhenPausedOnly.selector); - vm.prank(owner); - core.unpause(); - - vm.prank(owner); - core.pause(); - vm.prank(owner); - vm.expectEmit(true, true, true, true); - emit KlerosCore.Unpaused(); - core.unpause(); - assertEq(core.paused(), false, "Wrong paused value"); - } - - function test_executeOwnerProposal() public { - bytes memory data = abi.encodeWithSignature("changeOwner(address)", other); - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - core.executeOwnerProposal(address(core), 0, data); - - vm.expectRevert(KlerosCore.UnsuccessfulCall.selector); - vm.prank(owner); - core.executeOwnerProposal(address(core), 0, data); // It'll fail because the core is not its own owner - - vm.prank(owner); - core.changeOwner(payable(address(core))); - vm.prank(address(core)); - core.executeOwnerProposal(address(core), 0, data); - assertEq(core.owner(), other, "Wrong owner"); - } - - function test_changeOwner() public { - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - core.changeOwner(payable(other)); - vm.prank(owner); - core.changeOwner(payable(other)); - assertEq(core.owner(), other, "Wrong owner"); - } - - function test_changeGuardian() public { - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - core.changeGuardian(other); - vm.prank(owner); - core.changeGuardian(other); - assertEq(core.guardian(), other, "Wrong guardian"); - } - - function test_changePinakion() public { - PNK fakePNK = new PNK(); - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - core.changePinakion(fakePNK); - vm.prank(owner); - core.changePinakion(fakePNK); - assertEq(address(core.pinakion()), address(fakePNK), "Wrong PNK"); - } - - function test_changeJurorProsecutionModule() public { - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - core.changeJurorProsecutionModule(other); - vm.prank(owner); - core.changeJurorProsecutionModule(other); - assertEq(core.jurorProsecutionModule(), other, "Wrong jurorProsecutionModule"); - } - - function test_changeSortitionModule() public { - SortitionModuleMock fakeSM = new SortitionModuleMock(); - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - core.changeSortitionModule(fakeSM); - vm.prank(owner); - core.changeSortitionModule(fakeSM); - assertEq(address(core.sortitionModule()), address(fakeSM), "Wrong sortitionModule"); - } - - function test_addNewDisputeKit() public { - DisputeKitSybilResistant newDK = new DisputeKitSybilResistant(); - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - core.addNewDisputeKit(newDK); - vm.prank(owner); - vm.expectEmit(true, true, true, true); - emit KlerosCore.DisputeKitCreated(2, newDK); - core.addNewDisputeKit(newDK); - assertEq(address(core.disputeKits(2)), address(newDK), "Wrong address of new DK"); - assertEq(core.getDisputeKitsLength(), 3, "Wrong DK array length"); - } - - function test_createCourt() public { - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - uint256[] memory supportedDK = new uint256[](2); - supportedDK[0] = DISPUTE_KIT_CLASSIC; - supportedDK[1] = 2; // New DK is added below. - core.createCourt( - GENERAL_COURT, - true, // Hidden votes - 2000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)], // Times per period - abi.encode(uint256(4)), // Sortition extra data - supportedDK - ); - - vm.expectRevert(KlerosCore.MinStakeLowerThanParentCourt.selector); - vm.prank(owner); - core.createCourt( - GENERAL_COURT, - true, // Hidden votes - 800, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)], // Times per period - abi.encode(uint256(4)), // Sortition extra data - supportedDK - ); - - vm.expectRevert(KlerosCore.UnsupportedDisputeKit.selector); - vm.prank(owner); - uint256[] memory emptySupportedDK = new uint256[](0); - core.createCourt( - GENERAL_COURT, - true, // Hidden votes - 2000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)], // Times per period - abi.encode(uint256(4)), // Sortition extra data - emptySupportedDK - ); - - vm.expectRevert(KlerosCore.InvalidForkingCourtAsParent.selector); - vm.prank(owner); - core.createCourt( - FORKING_COURT, - true, // Hidden votes - 2000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)], // Times per period - abi.encode(uint256(4)), // Sortition extra data - supportedDK - ); - - uint256[] memory badSupportedDK = new uint256[](2); - badSupportedDK[0] = NULL_DISPUTE_KIT; // Include NULL_DK to check that it reverts - badSupportedDK[1] = DISPUTE_KIT_CLASSIC; - vm.expectRevert(KlerosCore.WrongDisputeKitIndex.selector); - vm.prank(owner); - core.createCourt( - GENERAL_COURT, - true, // Hidden votes - 2000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)], // Times per period - abi.encode(uint256(4)), // Sortition extra data - badSupportedDK - ); - - badSupportedDK[0] = DISPUTE_KIT_CLASSIC; - badSupportedDK[1] = 2; // Check out of bounds index - vm.expectRevert(KlerosCore.WrongDisputeKitIndex.selector); - vm.prank(owner); - core.createCourt( - GENERAL_COURT, - true, // Hidden votes - 2000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)], // Times per period - abi.encode(uint256(4)), // Sortition extra data - badSupportedDK - ); - - // Add new DK to check the requirement for classic DK - DisputeKitSybilResistant newDK = new DisputeKitSybilResistant(); - vm.prank(owner); - core.addNewDisputeKit(newDK); - badSupportedDK = new uint256[](1); - badSupportedDK[0] = 2; // Include only sybil resistant dk - vm.expectRevert(KlerosCore.MustSupportDisputeKitClassic.selector); - vm.prank(owner); - core.createCourt( - GENERAL_COURT, - true, // Hidden votes - 2000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)], // Times per period - abi.encode(uint256(4)), // Sortition extra data - badSupportedDK - ); - - vm.prank(owner); - vm.expectEmit(true, true, true, true); - emit KlerosCore.DisputeKitEnabled(2, DISPUTE_KIT_CLASSIC, true); - vm.expectEmit(true, true, true, true); - emit KlerosCore.DisputeKitEnabled(2, 2, true); - vm.expectEmit(true, true, true, true); - emit KlerosCore.CourtCreated( - 2, - GENERAL_COURT, - true, - 2000, - 20000, - 0.04 ether, - 50, - [uint256(10), uint256(20), uint256(30), uint256(40)], // Explicitly convert otherwise it throws - supportedDK - ); - core.createCourt( - GENERAL_COURT, - true, // Hidden votes - 2000, // min stake - 20000, // alpha - 0.04 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)], // Times per period - abi.encode(uint256(4)), // Sortition extra data - supportedDK - ); - - _assertCourtParameters(2, GENERAL_COURT, true, 2000, 20000, 0.04 ether, 50, false); - - uint256[] memory children = core.getCourtChildren(2); - assertEq(children.length, 0, "No children"); - _assertTimesPerPeriod(2, [uint256(10), uint256(20), uint256(30), uint256(40)]); - - children = core.getCourtChildren(GENERAL_COURT); // Check that parent updated children - assertEq(children.length, 1, "Wrong children count"); - assertEq(children[0], 2, "Wrong child id"); - - (uint256 K, uint256 nodeLength) = sortitionModule.getSortitionProperties(bytes32(uint256(2))); - assertEq(K, 4, "Wrong tree K of the new court"); - assertEq(nodeLength, 1, "Wrong node length for created tree of the new court"); - } - - function test_changeCourtParameters() public { - // Create a 2nd court to check the minStake requirements - vm.prank(owner); - uint96 newCourtID = 2; - uint256[] memory supportedDK = new uint256[](1); - supportedDK[0] = DISPUTE_KIT_CLASSIC; - core.createCourt( - GENERAL_COURT, - true, // Hidden votes - 2000, // min stake - 20000, // alpha - 0.04 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)], // Times per period - abi.encode(uint256(4)), // Sortition extra data - supportedDK - ); - - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - core.changeCourtParameters( - GENERAL_COURT, - true, // Hidden votes - 2000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)] // Times per period - ); - vm.expectRevert(KlerosCore.MinStakeLowerThanParentCourt.selector); - vm.prank(owner); - // Min stake of a parent became higher than of a child - core.changeCourtParameters( - GENERAL_COURT, - true, // Hidden votes - 3000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)] // Times per period - ); - // Min stake of a child became lower than of a parent - vm.expectRevert(KlerosCore.MinStakeLowerThanParentCourt.selector); - vm.prank(owner); - core.changeCourtParameters( - newCourtID, - true, // Hidden votes - 800, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)] // Times per period - ); - - vm.prank(owner); - vm.expectEmit(true, true, true, true); - emit KlerosCore.CourtModified( - GENERAL_COURT, - true, - 2000, - 20000, - 0.04 ether, - 50, - [uint256(10), uint256(20), uint256(30), uint256(40)] // Explicitly convert otherwise it throws - ); - core.changeCourtParameters( - GENERAL_COURT, - true, // Hidden votes - 2000, // min stake - 20000, // alpha - 0.04 ether, // fee for juror - 50, // jurors for jump - [uint256(10), uint256(20), uint256(30), uint256(40)] // Times per period - ); - - _assertCourtParameters(GENERAL_COURT, FORKING_COURT, true, 2000, 20000, 0.04 ether, 50, false); - _assertTimesPerPeriod(GENERAL_COURT, [uint256(10), uint256(20), uint256(30), uint256(40)]); - } - - function test_enableDisputeKits() public { - DisputeKitSybilResistant newDK = new DisputeKitSybilResistant(); - uint256 newDkID = 2; - vm.prank(owner); - core.addNewDisputeKit(newDK); - - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - uint256[] memory supportedDK = new uint256[](1); - supportedDK[0] = newDkID; - core.enableDisputeKits(GENERAL_COURT, supportedDK, true); - - vm.expectRevert(KlerosCore.WrongDisputeKitIndex.selector); - vm.prank(owner); - supportedDK[0] = NULL_DISPUTE_KIT; - core.enableDisputeKits(GENERAL_COURT, supportedDK, true); - - vm.expectRevert(KlerosCore.WrongDisputeKitIndex.selector); - vm.prank(owner); - supportedDK[0] = 3; // Out of bounds - core.enableDisputeKits(GENERAL_COURT, supportedDK, true); - - vm.expectRevert(KlerosCore.CannotDisableClassicDK.selector); - vm.prank(owner); - supportedDK[0] = DISPUTE_KIT_CLASSIC; - core.enableDisputeKits(GENERAL_COURT, supportedDK, false); - - vm.prank(owner); - vm.expectEmit(true, true, true, true); - emit KlerosCore.DisputeKitEnabled(GENERAL_COURT, newDkID, true); - supportedDK[0] = newDkID; - core.enableDisputeKits(GENERAL_COURT, supportedDK, true); - assertEq(core.isSupported(GENERAL_COURT, newDkID), true, "New DK should be supported by General court"); - - vm.prank(owner); - vm.expectEmit(true, true, true, true); - emit KlerosCore.DisputeKitEnabled(GENERAL_COURT, newDkID, false); - core.enableDisputeKits(GENERAL_COURT, supportedDK, false); - assertEq(core.isSupported(GENERAL_COURT, newDkID), false, "New DK should be disabled in General court"); - } - - function test_changeAcceptedFeeTokens() public { - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - core.changeAcceptedFeeTokens(feeToken, true); - - (bool accepted, , ) = core.currencyRates(feeToken); - assertEq(accepted, false, "Token should not be accepted yet"); - - vm.prank(owner); - vm.expectEmit(true, true, true, true); - emit IArbitratorV2.AcceptedFeeToken(feeToken, true); - core.changeAcceptedFeeTokens(feeToken, true); - (accepted, , ) = core.currencyRates(feeToken); - assertEq(accepted, true, "Token should be accepted"); - } - - function test_changeCurrencyRates() public { - vm.expectRevert(KlerosCore.OwnerOnly.selector); - vm.prank(other); - core.changeCurrencyRates(feeToken, 100, 200); - - (, uint256 rateInEth, uint256 rateDecimals) = core.currencyRates(feeToken); - assertEq(rateInEth, 0, "rateInEth should be 0"); - assertEq(rateDecimals, 0, "rateDecimals should be 0"); - - vm.prank(owner); - vm.expectEmit(true, true, true, true); - emit IArbitratorV2.NewCurrencyRate(feeToken, 100, 200); - core.changeCurrencyRates(feeToken, 100, 200); - - (, rateInEth, rateDecimals) = core.currencyRates(feeToken); - assertEq(rateInEth, 100, "rateInEth is incorrect"); - assertEq(rateDecimals, 200, "rateDecimals is incorrect"); - } - - function test_extraDataToCourtIDMinJurorsDisputeKit() public { - // Standard values - bytes memory extraData = abi.encodePacked(uint256(GENERAL_COURT), DEFAULT_NB_OF_JURORS, DISPUTE_KIT_CLASSIC); - - (uint96 courtID, uint256 minJurors, uint256 disputeKitID) = core.extraDataToCourtIDMinJurorsDisputeKit( - extraData - ); - assertEq(courtID, GENERAL_COURT, "Wrong courtID"); - assertEq(minJurors, DEFAULT_NB_OF_JURORS, "Wrong minJurors"); - assertEq(disputeKitID, DISPUTE_KIT_CLASSIC, "Wrong disputeKitID"); - - // Botched extraData. Values should fall into standard - extraData = "0xfa"; - - (courtID, minJurors, disputeKitID) = core.extraDataToCourtIDMinJurorsDisputeKit(extraData); - assertEq(courtID, GENERAL_COURT, "Wrong courtID"); - assertEq(minJurors, DEFAULT_NB_OF_JURORS, "Wrong minJurors"); - assertEq(disputeKitID, DISPUTE_KIT_CLASSIC, "Wrong disputeKitID"); - - // Custom values. - vm.startPrank(owner); - core.addNewDisputeKit(disputeKit); - core.addNewDisputeKit(disputeKit); - core.addNewDisputeKit(disputeKit); - core.addNewDisputeKit(disputeKit); - core.addNewDisputeKit(disputeKit); - extraData = abi.encodePacked(uint256(50), uint256(41), uint256(6)); - - (courtID, minJurors, disputeKitID) = core.extraDataToCourtIDMinJurorsDisputeKit(extraData); - assertEq(courtID, GENERAL_COURT, "Wrong courtID"); // Value in extra data is out of scope so fall back - assertEq(minJurors, 41, "Wrong minJurors"); - assertEq(disputeKitID, 6, "Wrong disputeKitID"); - } -} diff --git a/contracts/test/foundry/KlerosCore_Initialization.t.sol b/contracts/test/foundry/KlerosCore_Initialization.t.sol deleted file mode 100644 index 7e521063d..000000000 --- a/contracts/test/foundry/KlerosCore_Initialization.t.sol +++ /dev/null @@ -1,182 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {KlerosCore_TestBase} from "./KlerosCore_TestBase.sol"; -import {KlerosCore, IERC721} from "../../src/arbitration/KlerosCore.sol"; -import {KlerosCoreMock} from "../../src/test/KlerosCoreMock.sol"; -import {DisputeKitClassic} from "../../src/arbitration/dispute-kits/DisputeKitClassic.sol"; -import {SortitionModuleMock} from "../../src/test/SortitionModuleMock.sol"; -import {UUPSProxy} from "../../src/proxy/UUPSProxy.sol"; -import {BlockHashRNG} from "../../src/rng/BlockHashRNG.sol"; -import {ISortitionModule} from "../../src/arbitration/interfaces/ISortitionModule.sol"; -import {PNK} from "../../src/token/PNK.sol"; -import "../../src/libraries/Constants.sol"; - -/// @title KlerosCore_InitializationTest -/// @dev Tests for KlerosCore initialization and basic configuration -contract KlerosCore_InitializationTest is KlerosCore_TestBase { - function test_initialize() public { - assertEq(core.owner(), msg.sender, "Wrong owner"); - assertEq(core.guardian(), guardian, "Wrong guardian"); - assertEq(address(core.pinakion()), address(pinakion), "Wrong pinakion address"); - assertEq(core.jurorProsecutionModule(), jurorProsecutionModule, "Wrong jurorProsecutionModule address"); - assertEq(address(core.sortitionModule()), address(sortitionModule), "Wrong sortitionModule address"); - assertEq(core.getDisputeKitsLength(), 2, "Wrong DK array length"); - - _assertCourtParameters(FORKING_COURT, FORKING_COURT, false, 0, 0, 0, 0, false); - _assertCourtParameters(GENERAL_COURT, FORKING_COURT, false, 1000, 10000, 0.03 ether, 511, false); - - uint256[] memory children = core.getCourtChildren(GENERAL_COURT); - assertEq(children.length, 0, "No children"); - _assertTimesPerPeriod(GENERAL_COURT, timesPerPeriod); - - assertEq(address(core.disputeKits(NULL_DISPUTE_KIT)), address(0), "Wrong address NULL_DISPUTE_KIT"); - assertEq( - address(core.disputeKits(DISPUTE_KIT_CLASSIC)), - address(disputeKit), - "Wrong address DISPUTE_KIT_CLASSIC" - ); - assertEq(core.isSupported(FORKING_COURT, NULL_DISPUTE_KIT), false, "Forking court null dk should be false"); - assertEq( - core.isSupported(FORKING_COURT, DISPUTE_KIT_CLASSIC), - false, - "Forking court classic dk should be false" - ); - assertEq(core.isSupported(GENERAL_COURT, NULL_DISPUTE_KIT), false, "General court null dk should be false"); - assertEq(core.isSupported(GENERAL_COURT, DISPUTE_KIT_CLASSIC), true, "General court classic dk should be true"); - assertEq(core.paused(), false, "Wrong paused value"); - assertEq(core.wNative(), address(wNative), "Wrong wNative"); - assertEq(address(core.jurorNft()), address(0), "Wrong jurorNft"); - assertEq(core.arbitrableWhitelistEnabled(), false, "Wrong arbitrableWhitelistEnabled"); - - assertEq(pinakion.name(), "Pinakion", "Wrong token name"); - assertEq(pinakion.symbol(), "PNK", "Wrong token symbol"); - assertEq(pinakion.totalSupply(), 1000000 ether, "Wrong total supply"); - assertEq(pinakion.balanceOf(msg.sender), 999998 ether, "Wrong token balance of owner"); - assertEq(pinakion.balanceOf(staker1), 1 ether, "Wrong token balance of staker1"); - assertEq(pinakion.allowance(staker1, address(core)), 1 ether, "Wrong allowance for staker1"); - assertEq(pinakion.balanceOf(staker2), 1 ether, "Wrong token balance of staker2"); - assertEq(pinakion.allowance(staker2, address(core)), 1 ether, "Wrong allowance for staker2"); - - assertEq(disputeKit.owner(), msg.sender, "Wrong DK owner"); - assertEq(disputeKit.getJumpDisputeKitID(), DISPUTE_KIT_CLASSIC, "Wrong jump DK"); - assertEq(disputeKit.jumpDisputeKitID(), DISPUTE_KIT_CLASSIC, "Wrong jump DK storage var"); - assertEq(address(disputeKit.core()), address(core), "Wrong core in DK"); - - assertEq(sortitionModule.owner(), msg.sender, "Wrong SM owner"); - assertEq(address(sortitionModule.core()), address(core), "Wrong core in SM"); - assertEq(uint256(sortitionModule.phase()), uint256(ISortitionModule.Phase.staking), "Phase should be 0"); - assertEq(sortitionModule.minStakingTime(), 18, "Wrong minStakingTime"); - assertEq(sortitionModule.maxDrawingTime(), 24, "Wrong maxDrawingTime"); - assertEq(sortitionModule.lastPhaseChange(), block.timestamp, "Wrong lastPhaseChange"); - assertEq(sortitionModule.disputesWithoutJurors(), 0, "disputesWithoutJurors should be 0"); - assertEq(address(sortitionModule.rng()), address(rng), "Wrong RNG address"); - assertEq(sortitionModule.randomNumber(), 0, "randomNumber should be 0"); - assertEq(sortitionModule.delayedStakeWriteIndex(), 0, "delayedStakeWriteIndex should be 0"); - assertEq(sortitionModule.delayedStakeReadIndex(), 1, "Wrong delayedStakeReadIndex"); - assertEq(sortitionModule.maxStakePerJuror(), type(uint256).max, "Wrong maxStakePerJuror"); - assertEq(sortitionModule.maxTotalStaked(), type(uint256).max, "Wrong maxTotalStaked"); - assertEq(sortitionModule.totalStaked(), 0, "Wrong totalStaked"); - - (uint256 K, uint256 nodeLength) = sortitionModule.getSortitionProperties(bytes32(uint256(FORKING_COURT))); - assertEq(K, 5, "Wrong tree K FORKING_COURT"); - assertEq(nodeLength, 1, "Wrong node length for created tree FORKING_COURT"); - - (K, nodeLength) = sortitionModule.getSortitionProperties(bytes32(uint256(GENERAL_COURT))); - assertEq(K, 5, "Wrong tree K GENERAL_COURT"); - assertEq(nodeLength, 1, "Wrong node length for created tree GENERAL_COURT"); - } - - function test_initialize_events() public { - KlerosCoreMock coreLogic = new KlerosCoreMock(); - SortitionModuleMock smLogic = new SortitionModuleMock(); - DisputeKitClassic dkLogic = new DisputeKitClassic(); - PNK newPinakion = new PNK(); - - address newOwner = msg.sender; - address newGuardian = vm.addr(1); - address newStaker1 = vm.addr(2); - address newOther = vm.addr(9); - address newJurorProsecutionModule = vm.addr(8); - uint256 newMinStake = 1000; - uint256 newAlpha = 10000; - uint256 newFeeForJuror = 0.03 ether; - uint256 newJurorsForCourtJump = 511; - uint256[4] memory newTimesPerPeriod = [uint256(60), uint256(120), uint256(180), uint256(240)]; - - newPinakion.transfer(msg.sender, totalSupply - 1 ether); - newPinakion.transfer(newStaker1, 1 ether); - - bytes memory newSortitionExtraData = abi.encode(uint256(5)); - uint256 newMinStakingTime = 18; - uint256 newMaxDrawingTime = 24; - bool newHiddenVotes = false; - - uint256 newRngLookahead = 20; - BlockHashRNG newRng = new BlockHashRNG(msg.sender, address(sortitionModule), newRngLookahead); - - UUPSProxy proxyCore = new UUPSProxy(address(coreLogic), ""); - - bytes memory initDataDk = abi.encodeWithSignature( - "initialize(address,address,address,uint256)", - newOwner, - address(proxyCore), - address(wNative), - DISPUTE_KIT_CLASSIC - ); - - UUPSProxy proxyDk = new UUPSProxy(address(dkLogic), initDataDk); - DisputeKitClassic newDisputeKit = DisputeKitClassic(address(proxyDk)); - - bytes memory initDataSm = abi.encodeWithSignature( - "initialize(address,address,uint256,uint256,address,uint256,uint256)", - newOwner, - address(proxyCore), - newMinStakingTime, - newMaxDrawingTime, - newRng, - type(uint256).max, - type(uint256).max - ); - - UUPSProxy proxySm = new UUPSProxy(address(smLogic), initDataSm); - SortitionModuleMock newSortitionModule = SortitionModuleMock(address(proxySm)); - vm.prank(newOwner); - newRng.changeConsumer(address(newSortitionModule)); - - KlerosCoreMock newCore = KlerosCoreMock(address(proxyCore)); - vm.expectEmit(true, true, true, true); - emit KlerosCore.DisputeKitCreated(DISPUTE_KIT_CLASSIC, newDisputeKit); - vm.expectEmit(true, true, true, true); - - uint256[] memory supportedDK = new uint256[](1); - supportedDK[0] = DISPUTE_KIT_CLASSIC; - emit KlerosCore.CourtCreated( - GENERAL_COURT, - FORKING_COURT, - false, - 1000, - 10000, - 0.03 ether, - 511, - [uint256(60), uint256(120), uint256(180), uint256(240)], // Explicitly convert otherwise it throws - supportedDK - ); - vm.expectEmit(true, true, true, true); - emit KlerosCore.DisputeKitEnabled(GENERAL_COURT, DISPUTE_KIT_CLASSIC, true); - newCore.initialize( - newOwner, - newGuardian, - newPinakion, - newJurorProsecutionModule, - newDisputeKit, - newHiddenVotes, - [newMinStake, newAlpha, newFeeForJuror, newJurorsForCourtJump], - newTimesPerPeriod, - newSortitionExtraData, - newSortitionModule, - address(wNative), - IERC721(address(0)) - ); - } -} diff --git a/contracts/test/foundry/KlerosCore_RNG.t.sol b/contracts/test/foundry/KlerosCore_RNG.t.sol deleted file mode 100644 index 0afd0ba43..000000000 --- a/contracts/test/foundry/KlerosCore_RNG.t.sol +++ /dev/null @@ -1,121 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {KlerosCore_TestBase} from "./KlerosCore_TestBase.sol"; -import {SortitionModule} from "../../src/arbitration/SortitionModule.sol"; -import {RNGWithFallback, IRNG} from "../../src/rng/RNGWithFallback.sol"; -import {RNGMock} from "../../src/test/RNGMock.sol"; -import "../../src/libraries/Constants.sol"; - -/// @title KlerosCore_RNGTest -/// @dev Tests for KlerosCore random number generation and fallback mechanisms -contract KlerosCore_RNGTest is KlerosCore_TestBase { - function test_RNGFallback() public { - RNGWithFallback rngFallback; - uint256 fallbackTimeout = 100; - RNGMock rngMock = new RNGMock(); - rngFallback = new RNGWithFallback(msg.sender, address(sortitionModule), fallbackTimeout, rngMock); - assertEq(rngFallback.owner(), msg.sender, "Wrong owner"); - assertEq(rngFallback.consumer(), address(sortitionModule), "Wrong sortition module address"); - assertEq(address(rngFallback.rng()), address(rngMock), "Wrong RNG in fallback contract"); - assertEq(rngFallback.fallbackTimeoutSeconds(), fallbackTimeout, "Wrong fallback timeout"); - assertEq(rngFallback.requestTimestamp(), 0, "Request timestamp should be 0"); - - vm.prank(owner); - sortitionModule.changeRandomNumberGenerator(rngFallback); - assertEq(address(sortitionModule.rng()), address(rngFallback), "Wrong RNG address"); - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 20000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - - sortitionModule.passPhase(); // Generating - assertEq(rngFallback.requestTimestamp(), block.timestamp, "Wrong request timestamp"); - - vm.expectRevert(SortitionModule.RandomNumberNotReady.selector); - sortitionModule.passPhase(); - - vm.warp(block.timestamp + fallbackTimeout + 1); - - // Pass several blocks too to see that correct block.number is still picked up. - vm.roll(block.number + 5); - - vm.expectEmit(true, true, true, true); - emit RNGWithFallback.RNGFallback(); - sortitionModule.passPhase(); // Drawing phase - - assertEq(sortitionModule.randomNumber(), uint256(blockhash(block.number - 1)), "Wrong random number"); - } - - function test_RNGFallback_happyPath() public { - RNGWithFallback rngFallback; - uint256 fallbackTimeout = 100; - RNGMock rngMock = new RNGMock(); - rngFallback = new RNGWithFallback(msg.sender, address(sortitionModule), fallbackTimeout, rngMock); - - vm.prank(owner); - sortitionModule.changeRandomNumberGenerator(rngFallback); - assertEq(address(sortitionModule.rng()), address(rngFallback), "Wrong RNG address"); - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 20000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - - assertEq(rngFallback.requestTimestamp(), 0, "Request timestamp should be 0"); - - sortitionModule.passPhase(); // Generating - assertEq(rngFallback.requestTimestamp(), block.timestamp, "Wrong request timestamp"); - - rngMock.setRN(123); - - sortitionModule.passPhase(); // Drawing phase - assertEq(sortitionModule.randomNumber(), 123, "Wrong random number"); - } - - function test_RNGFallback_sanityChecks() public { - RNGWithFallback rngFallback; - uint256 fallbackTimeout = 100; - RNGMock rngMock = new RNGMock(); - rngFallback = new RNGWithFallback(msg.sender, address(sortitionModule), fallbackTimeout, rngMock); - - vm.expectRevert(IRNG.ConsumerOnly.selector); - vm.prank(owner); - rngFallback.requestRandomness(); - - vm.expectRevert(IRNG.ConsumerOnly.selector); - vm.prank(owner); - rngFallback.receiveRandomness(); - - vm.expectRevert(IRNG.OwnerOnly.selector); - vm.prank(other); - rngFallback.changeOwner(other); - vm.prank(owner); - rngFallback.changeOwner(other); - assertEq(rngFallback.owner(), other, "Wrong owner"); - - // Change owner back for convenience - vm.prank(other); - rngFallback.changeOwner(owner); - - vm.expectRevert(IRNG.OwnerOnly.selector); - vm.prank(other); - rngFallback.changeConsumer(other); - vm.prank(owner); - rngFallback.changeConsumer(other); - assertEq(rngFallback.consumer(), other, "Wrong consumer"); - - vm.expectRevert(IRNG.OwnerOnly.selector); - vm.prank(other); - rngFallback.changeFallbackTimeout(5); - - vm.prank(owner); - vm.expectEmit(true, true, true, true); - emit RNGWithFallback.FallbackTimeoutChanged(5); - rngFallback.changeFallbackTimeout(5); - assertEq(rngFallback.fallbackTimeoutSeconds(), 5, "Wrong fallback timeout"); - } -} diff --git a/contracts/test/foundry/KlerosCore_Staking.t.sol b/contracts/test/foundry/KlerosCore_Staking.t.sol deleted file mode 100644 index 070a38716..000000000 --- a/contracts/test/foundry/KlerosCore_Staking.t.sol +++ /dev/null @@ -1,450 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {KlerosCore_TestBase} from "./KlerosCore_TestBase.sol"; -import {KlerosCore} from "../../src/arbitration/KlerosCore.sol"; -import {SortitionModule} from "../../src/arbitration/SortitionModule.sol"; -import {ISortitionModule} from "../../src/arbitration/interfaces/ISortitionModule.sol"; -import {IKlerosCore, KlerosCoreSnapshotProxy} from "../../src/arbitration/view/KlerosCoreSnapshotProxy.sol"; -import "../../src/libraries/Constants.sol"; - -/// @title KlerosCore_StakingTest -/// @dev Tests for KlerosCore staking mechanics and stake management -contract KlerosCore_StakingTest is KlerosCore_TestBase { - function test_setStake_increase() public { - vm.prank(owner); - core.pause(); - vm.expectRevert(KlerosCore.WhenNotPausedOnly.selector); - vm.prank(staker1); - core.setStake(GENERAL_COURT, 1000); - vm.prank(owner); - core.unpause(); - - vm.expectRevert(KlerosCore.StakingNotPossibleInThisCourt.selector); - vm.prank(staker1); - core.setStake(FORKING_COURT, 1000); - - uint96 badCourtID = 2; - vm.expectRevert(KlerosCore.StakingNotPossibleInThisCourt.selector); - vm.prank(staker1); - core.setStake(badCourtID, 1000); - - vm.expectRevert(KlerosCore.StakingLessThanCourtMinStake.selector); - vm.prank(staker1); - core.setStake(GENERAL_COURT, 800); - - vm.expectRevert(KlerosCore.StakingZeroWhenNoStake.selector); - vm.prank(staker1); - core.setStake(GENERAL_COURT, 0); - - vm.prank(staker1); - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeSet(staker1, GENERAL_COURT, 1001, 1001); - core.setStake(GENERAL_COURT, 1001); - - (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts) = sortitionModule - .getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 1001, "Wrong amount total staked"); - assertEq(totalLocked, 0, "Wrong amount locked"); - assertEq(stakedInCourt, 1001, "Wrong amount staked in court"); - assertEq(nbCourts, 1, "Wrong number of courts"); - - uint96[] memory courts = sortitionModule.getJurorCourtIDs(staker1); - assertEq(courts.length, 1, "Wrong courts count"); - assertEq(courts[0], GENERAL_COURT, "Wrong court id"); - assertEq(sortitionModule.isJurorStaked(staker1), true, "Juror should be staked"); - - assertEq(pinakion.balanceOf(address(core)), 1001, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999998999, "Wrong token balance of staker1"); // 1 eth - 1001 wei - assertEq(pinakion.allowance(staker1, address(core)), 999999999999998999, "Wrong allowance for staker1"); - - vm.expectRevert(KlerosCore.StakingTransferFailed.selector); // This error will be caught because owner didn't approve any tokens for KlerosCore - vm.prank(owner); - core.setStake(GENERAL_COURT, 1000); - - // Increase stake one more time to verify the correct behavior - vm.prank(staker1); - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeSet(staker1, GENERAL_COURT, 2000, 2000); - core.setStake(GENERAL_COURT, 2000); - - (totalStaked, totalLocked, stakedInCourt, nbCourts) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 2000, "Wrong amount total staked"); - assertEq(totalLocked, 0, "Wrong amount locked"); - assertEq(stakedInCourt, 2000, "Wrong amount staked in court"); - assertEq(nbCourts, 1, "Number of courts should not increase"); - - assertEq(pinakion.balanceOf(address(core)), 2000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999998000, "Wrong token balance of staker1"); // 1 eth - 2000 wei - assertEq(pinakion.allowance(staker1, address(core)), 999999999999998000, "Wrong allowance for staker1"); - } - - function test_setStake_decrease() public { - vm.prank(staker1); - core.setStake(GENERAL_COURT, 2000); - assertEq(pinakion.balanceOf(address(core)), 2000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999998000, "Wrong token balance of staker1"); - assertEq(pinakion.allowance(staker1, address(core)), 999999999999998000, "Wrong allowance for staker1"); - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 1500); // Decrease the stake to see if it's reflected correctly - (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts) = sortitionModule - .getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 1500, "Wrong amount total staked"); - assertEq(totalLocked, 0, "Wrong amount locked"); - assertEq(stakedInCourt, 1500, "Wrong amount staked in court"); - assertEq(nbCourts, 1, "Wrong number of courts"); - - uint96[] memory courts = sortitionModule.getJurorCourtIDs(staker1); - assertEq(courts.length, 1, "Wrong courts count"); - assertEq(courts[0], GENERAL_COURT, "Wrong court id"); - assertEq(sortitionModule.isJurorStaked(staker1), true, "Juror should be staked"); - - assertEq(pinakion.balanceOf(address(core)), 1500, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999998500, "Wrong token balance of staker1"); - assertEq( - pinakion.allowance(staker1, address(core)), - 999999999999998000, - "Allowance should not change during withdrawal" - ); - - vm.prank(address(core)); - pinakion.transfer(staker1, 1); // Manually send 1 token to make the withdrawal fail - - vm.expectRevert(KlerosCore.UnstakingTransferFailed.selector); - vm.prank(staker1); - core.setStake(GENERAL_COURT, 0); - - vm.prank(address(staker1)); - pinakion.transfer(address(core), 1); // Manually give the token back - vm.prank(staker1); - core.setStake(GENERAL_COURT, 0); - - (totalStaked, totalLocked, stakedInCourt, nbCourts) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 0, "Wrong amount total staked"); - assertEq(totalLocked, 0, "Wrong amount locked"); - assertEq(stakedInCourt, 0, "Wrong amount staked in court"); - assertEq(nbCourts, 0, "Wrong number of courts"); - - courts = sortitionModule.getJurorCourtIDs(staker1); - assertEq(courts.length, 0, "Wrong courts count"); - assertEq(sortitionModule.isJurorStaked(staker1), false, "Juror should not be staked"); - - assertEq(pinakion.balanceOf(address(core)), 0, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 1 ether, "Wrong token balance of staker1"); - assertEq( - pinakion.allowance(staker1, address(core)), - 999999999999998000, - "Allowance should not change during withdrawal" - ); - } - - function test_setStake_maxStakePathCheck() public { - uint256[] memory supportedDK = new uint256[](1); - supportedDK[0] = DISPUTE_KIT_CLASSIC; - - // Create 4 courts to check the require - for (uint96 i = GENERAL_COURT; i <= 4; i++) { - vm.prank(owner); - core.createCourt( - GENERAL_COURT, - true, - 2000, - 20000, - 0.04 ether, - 50, - [uint256(10), uint256(20), uint256(30), uint256(40)], - abi.encode(uint256(4)), - supportedDK - ); - vm.prank(staker1); - core.setStake(i, 2000); - } - - uint96[] memory courts = sortitionModule.getJurorCourtIDs(staker1); - assertEq(courts.length, 4, "Wrong courts count"); - - uint96 excessiveCourtID = 5; - vm.expectRevert(KlerosCore.StakingInTooManyCourts.selector); - vm.prank(staker1); - core.setStake(excessiveCourtID, 2000); - } - - function test_setStake_increaseDrawingPhase() public { - // Set the stake and create a dispute to advance the phase - vm.prank(staker1); - core.setStake(GENERAL_COURT, 1000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - assertEq(sortitionModule.disputesWithoutJurors(), 1, "Wrong disputesWithoutJurors count"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - assertEq(pinakion.balanceOf(address(core)), 1000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999999000, "Wrong token balance of staker1"); - assertEq(uint256(sortitionModule.phase()), uint256(ISortitionModule.Phase.drawing), "Wrong phase"); - - vm.prank(staker1); - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeDelayed(staker1, GENERAL_COURT, 1500); - core.setStake(GENERAL_COURT, 1500); - - uint256 delayedStakeId = sortitionModule.delayedStakeWriteIndex(); - assertEq(delayedStakeId, 1, "Wrong delayedStakeWriteIndex"); - assertEq(sortitionModule.delayedStakeReadIndex(), 1, "Wrong delayedStakeReadIndex"); - (address account, uint96 courtID, uint256 stake, bool alreadyTransferred) = sortitionModule.delayedStakes( - delayedStakeId - ); - assertEq(account, staker1, "Wrong staker account"); - assertEq(courtID, GENERAL_COURT, "Wrong court id"); - assertEq(stake, 1500, "Wrong amount staked in court"); - assertEq(alreadyTransferred, false, "Should be flagged as transferred"); - - (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts) = sortitionModule - .getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 1000, "Wrong amount total staked"); - assertEq(totalLocked, 0, "Wrong amount locked"); - assertEq(stakedInCourt, 1000, "Amount staked in court should not change until delayed stake is executed"); - assertEq(nbCourts, 1, "Wrong number of courts"); - - uint96[] memory courts = sortitionModule.getJurorCourtIDs(staker1); - assertEq(courts.length, 1, "Wrong courts count"); - assertEq(courts[0], GENERAL_COURT, "Wrong court id"); - assertEq(sortitionModule.isJurorStaked(staker1), true, "Juror should be staked"); - - assertEq(pinakion.balanceOf(address(core)), 1000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999999000, "Wrong token balance of staker1"); - } - - function test_setStake_decreaseDrawingPhase() public { - // Set the stake and create a dispute to advance the phase - vm.prank(staker1); - core.setStake(GENERAL_COURT, 2000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - assertEq(pinakion.balanceOf(address(core)), 2000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999998000, "Wrong token balance of staker1"); - - vm.prank(staker1); - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeDelayed(staker1, GENERAL_COURT, 1800); - core.setStake(GENERAL_COURT, 1800); - - (uint256 totalStaked, , uint256 stakedInCourt, ) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 2000, "Total staked amount should not change"); - assertEq(stakedInCourt, 2000, "Amount staked in court should not change"); - - assertEq(pinakion.balanceOf(address(core)), 2000, "Token balance of the core should not change"); - assertEq(pinakion.balanceOf(staker1), 999999999999998000, "Wrong token balance of staker1"); - } - - function test_setStake_LockedTokens() public { - // Check that correct amount is taken when locked tokens amount exceeds the staked amount - vm.prank(staker1); - core.setStake(GENERAL_COURT, 10000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - uint256 disputeID = 0; - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts) = sortitionModule - .getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 10000, "Wrong amount total staked"); - assertEq(totalLocked, 3000, "Wrong amount locked"); // 1000 per draw and the juror was drawn 3 times - assertEq(stakedInCourt, 10000, "Wrong amount staked in court"); - - sortitionModule.passPhase(); // Staking - - assertEq(pinakion.balanceOf(address(core)), 10000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999990000, "Wrong token balance of staker1"); - - // Unstake to check that locked tokens won't be withdrawn - vm.prank(staker1); - core.setStake(GENERAL_COURT, 0); - - (totalStaked, totalLocked, stakedInCourt, nbCourts) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 3000, "Wrong amount total staked"); - assertEq(totalLocked, 3000, "Wrong amount locked"); - assertEq(stakedInCourt, 0, "Wrong amount staked in court"); - assertEq(nbCourts, 0, "Wrong amount staked in court"); - - assertEq(pinakion.balanceOf(address(core)), 3000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 999999999999997000, "Wrong token balance of staker1"); - - // Stake again to check the behaviour. - vm.prank(staker1); - core.setStake(GENERAL_COURT, 5000); - - (totalStaked, totalLocked, stakedInCourt, nbCourts) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 8000, "Wrong amount total staked"); // 5000 were added to the previous 3000. - assertEq(totalLocked, 3000, "Wrong amount locked"); - assertEq(stakedInCourt, 5000, "Wrong amount staked in court"); - assertEq(nbCourts, 1, "Wrong amount staked in court"); - - assertEq(pinakion.balanceOf(address(core)), 8000, "Wrong amount of tokens in Core"); - assertEq(pinakion.balanceOf(staker1), 999999999999992000, "Wrong token balance of staker1"); - } - - function test_executeDelayedStakes() public { - // Stake as staker2 as well to diversify the execution of delayed stakes - vm.prank(staker2); - core.setStake(GENERAL_COURT, 10000); - - vm.expectRevert(SortitionModule.NoDelayedStakeToExecute.selector); - sortitionModule.executeDelayedStakes(5); - - // Set the stake and create a dispute to advance the phase - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - uint256 disputeID = 0; - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - vm.expectRevert(SortitionModule.NotStakingPhase.selector); - sortitionModule.executeDelayedStakes(5); - - // Create delayed stake - vm.prank(staker1); - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeDelayed(staker1, GENERAL_COURT, 1500); - core.setStake(GENERAL_COURT, 1500); - - assertEq(pinakion.balanceOf(address(core)), 10000, "Wrong token balance of the core"); // Balance should not increase because the stake was delayed - assertEq(pinakion.balanceOf(staker1), 1 ether, "Wrong token balance of staker1"); - - // Create delayed stake for another staker - vm.prank(staker2); - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeDelayed(staker2, GENERAL_COURT, 0); - core.setStake(GENERAL_COURT, 0); - assertEq(pinakion.balanceOf(staker2), 999999999999990000, "Wrong token balance of staker2"); // Balance should not change since wrong phase - - // Create another delayed stake for staker1 on top of it to check the execution - vm.prank(staker1); - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeDelayed(staker1, GENERAL_COURT, 1800); - core.setStake(GENERAL_COURT, 1800); - - assertEq(sortitionModule.delayedStakeWriteIndex(), 3, "Wrong delayedStakeWriteIndex"); - assertEq(sortitionModule.delayedStakeReadIndex(), 1, "Wrong delayedStakeReadIndex"); - - (address account, uint96 courtID, uint256 stake, bool alreadyTransferred) = sortitionModule.delayedStakes(1); - - // Check each delayed stake - assertEq(account, staker1, "Wrong staker account for the first delayed stake"); - assertEq(courtID, GENERAL_COURT, "Wrong court ID"); - assertEq(stake, 1500, "Wrong staking amount"); - assertEq(alreadyTransferred, false, "Should be false"); - - (account, courtID, stake, alreadyTransferred) = sortitionModule.delayedStakes(2); - assertEq(account, staker2, "Wrong staker2 account"); - assertEq(courtID, GENERAL_COURT, "Wrong court id for staker2"); - assertEq(stake, 0, "Wrong amount for delayed stake of staker2"); - assertEq(alreadyTransferred, false, "Should be false"); - - (account, courtID, stake, alreadyTransferred) = sortitionModule.delayedStakes(3); - assertEq(account, staker1, "Wrong staker1 account"); - assertEq(courtID, GENERAL_COURT, "Wrong court id for staker1"); - assertEq(stake, 1800, "Wrong amount for delayed stake of staker1"); - assertEq(alreadyTransferred, false, "Should be false"); - - // So far the only amount transferred was 10000 by staker2. Staker 1 has two delayed stakes, for 1500 and 1800 pnk. - assertEq(pinakion.balanceOf(address(core)), 10000, "Wrong token balance of the core"); - assertEq(pinakion.balanceOf(staker1), 1 ether, "Wrong token balance of staker1"); - assertEq(pinakion.balanceOf(staker2), 999999999999990000, "Wrong token balance of staker2"); - - (uint256 totalStaked, uint256 totalLocked, uint256 stakedInCourt, uint256 nbCourts) = sortitionModule - .getJurorBalance(staker1, GENERAL_COURT); // Only check the first staker to check how consecutive delayed stakes are handled. - // Balances shouldn't be updated yet. - assertEq(totalStaked, 0, "Wrong amount total staked"); - assertEq(totalLocked, 0, "Wrong amount locked"); - assertEq(stakedInCourt, 0, "Wrong amount staked in court"); - assertEq(nbCourts, 0, "Wrong number of courts"); - - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Staking. Delayed stakes can be executed now - - vm.prank(address(core)); - pinakion.transfer(owner, 10000); // Dispose of the tokens of 2nd staker to make the execution fail for the 2nd delayed stake - assertEq(pinakion.balanceOf(address(core)), 0, "Wrong token balance of the core"); - - // 2 events should be emitted but the 2nd stake supersedes the first one in the end. - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeSet(staker1, GENERAL_COURT, 1500, 1500); - vm.expectEmit(true, true, true, true); - emit SortitionModule.StakeSet(staker1, GENERAL_COURT, 1800, 1800); - sortitionModule.executeDelayedStakes(20); // Deliberately ask for more iterations than needed - - assertEq(sortitionModule.delayedStakeWriteIndex(), 3, "Wrong delayedStakeWriteIndex"); - assertEq(sortitionModule.delayedStakeReadIndex(), 4, "Wrong delayedStakeReadIndex"); - - // Check that delayed stakes are nullified - for (uint i = 2; i <= sortitionModule.delayedStakeWriteIndex(); i++) { - (account, courtID, stake, alreadyTransferred) = sortitionModule.delayedStakes(i); - - assertEq(account, address(0), "Wrong staker account after delayed stake deletion"); - assertEq(courtID, 0, "Court id should be nullified"); - assertEq(stake, 0, "No amount to stake"); - assertEq(alreadyTransferred, false, "Should be false"); - } - - assertEq(pinakion.balanceOf(staker1), 999999999999998200, "Wrong token balance of staker1"); - - (totalStaked, totalLocked, stakedInCourt, nbCourts) = sortitionModule.getJurorBalance(staker1, GENERAL_COURT); - assertEq(totalStaked, 1800, "Wrong amount total staked"); - assertEq(totalLocked, 0, "Wrong amount locked"); - assertEq(stakedInCourt, 1800, "Wrong amount staked in court"); - assertEq(nbCourts, 1, "Wrong amount staked in court"); - - // Staker2 not getting the tokens back indicates that his delayed stake was skipped and the flow wasn't disrupted - assertEq(pinakion.balanceOf(staker2), 999999999999990000, "Wrong token balance of staker2"); - } - - function test_setStakeBySortitionModule() public { - // Note that functionality of this function was checked during delayed stakes execution - vm.expectRevert(KlerosCore.SortitionModuleOnly.selector); - vm.prank(owner); - core.setStakeBySortitionModule(staker1, GENERAL_COURT, 1000); - } - - function test_setStake_snapshotProxyCheck() public { - vm.prank(staker1); - core.setStake(GENERAL_COURT, 12346); - - KlerosCoreSnapshotProxy snapshotProxy = new KlerosCoreSnapshotProxy(owner, IKlerosCore(address(core))); - assertEq(snapshotProxy.name(), "Staked Pinakion", "Wrong name of the proxy token"); - assertEq(snapshotProxy.symbol(), "stPNK", "Wrong symbol of the proxy token"); - assertEq(snapshotProxy.decimals(), 18, "Wrong decimals of the proxy token"); - assertEq(snapshotProxy.owner(), msg.sender, "Wrong owner"); - assertEq(address(snapshotProxy.core()), address(core), "Wrong core in snapshot proxy"); - assertEq(snapshotProxy.balanceOf(staker1), 12346, "Wrong stPNK balance"); - - vm.prank(other); - vm.expectRevert(KlerosCoreSnapshotProxy.OwnerOnly.selector); - snapshotProxy.changeCore(IKlerosCore(other)); - vm.prank(owner); - snapshotProxy.changeCore(IKlerosCore(other)); - assertEq(address(snapshotProxy.core()), other, "Wrong core in snapshot proxy after change"); - - vm.prank(other); - vm.expectRevert(KlerosCoreSnapshotProxy.OwnerOnly.selector); - snapshotProxy.changeOwner(other); - vm.prank(owner); - snapshotProxy.changeOwner(other); - assertEq(snapshotProxy.owner(), other, "Wrong owner after change"); - } -} diff --git a/contracts/test/foundry/KlerosCore_TestBase.sol b/contracts/test/foundry/KlerosCore_TestBase.sol deleted file mode 100644 index 9418f2444..000000000 --- a/contracts/test/foundry/KlerosCore_TestBase.sol +++ /dev/null @@ -1,255 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {Test} from "forge-std/Test.sol"; -import {console} from "forge-std/console.sol"; // Import the console for logging -import {KlerosCoreMock, KlerosCore, IERC721} from "../../src/test/KlerosCoreMock.sol"; -import {IArbitratorV2} from "../../src/arbitration/KlerosCore.sol"; -import {IDisputeKit} from "../../src/arbitration/interfaces/IDisputeKit.sol"; -import {DisputeKitClassic, DisputeKitClassicBase} from "../../src/arbitration/dispute-kits/DisputeKitClassic.sol"; -import {DisputeKitSybilResistant} from "../../src/arbitration/dispute-kits/DisputeKitSybilResistant.sol"; -import {ISortitionModule} from "../../src/arbitration/interfaces/ISortitionModule.sol"; -import {SortitionModuleMock, SortitionModule} from "../../src/test/SortitionModuleMock.sol"; -import {UUPSProxy} from "../../src/proxy/UUPSProxy.sol"; -import {BlockHashRNG} from "../../src/rng/BlockHashRNG.sol"; -import {RNGWithFallback, IRNG} from "../../src/rng/RNGWithFallback.sol"; -import {RNGMock} from "../../src/test/RNGMock.sol"; -import {PNK} from "../../src/token/PNK.sol"; -import {TestERC20} from "../../src/token/TestERC20.sol"; -import {ArbitrableExample, IArbitrableV2} from "../../src/arbitration/arbitrables/ArbitrableExample.sol"; -import {DisputeTemplateRegistry} from "../../src/arbitration/DisputeTemplateRegistry.sol"; -import "../../src/libraries/Constants.sol"; -import {IKlerosCore, KlerosCoreSnapshotProxy} from "../../src/arbitration/view/KlerosCoreSnapshotProxy.sol"; - -/// @title KlerosCore_TestBase -/// @dev Abstract base contract for KlerosCore tests containing shared setup and utilities -abstract contract KlerosCore_TestBase is Test { - event Initialized(uint64 version); - - // ************************************* // - // * Test Contracts * // - // ************************************* // - - KlerosCoreMock core; - DisputeKitClassic disputeKit; - SortitionModuleMock sortitionModule; - BlockHashRNG rng; - PNK pinakion; - TestERC20 feeToken; - TestERC20 wNative; - ArbitrableExample arbitrable; - DisputeTemplateRegistry registry; - - // ************************************* // - // * Test Accounts * // - // ************************************* // - - address owner; - address guardian; - address staker1; - address staker2; - address disputer; - address crowdfunder1; - address crowdfunder2; - address other; - address jurorProsecutionModule; - - // ************************************* // - // * Test Parameters * // - // ************************************* // - - uint256 minStake; - uint256 alpha; - uint256 feeForJuror; - uint256 jurorsForCourtJump; - bytes sortitionExtraData; - bytes arbitratorExtraData; - uint256[4] timesPerPeriod; - bool hiddenVotes; - uint256 totalSupply = 1000000 ether; - uint256 minStakingTime; - uint256 maxDrawingTime; - uint256 rngLookahead; // Time in seconds - string templateData; - string templateDataMappings; - - function setUp() public virtual { - KlerosCoreMock coreLogic = new KlerosCoreMock(); - SortitionModuleMock smLogic = new SortitionModuleMock(); - DisputeKitClassic dkLogic = new DisputeKitClassic(); - DisputeTemplateRegistry registryLogic = new DisputeTemplateRegistry(); - pinakion = new PNK(); - feeToken = new TestERC20("Test", "TST"); - wNative = new TestERC20("wrapped ETH", "wETH"); - - owner = msg.sender; - guardian = vm.addr(1); - staker1 = vm.addr(2); - staker2 = vm.addr(3); - disputer = vm.addr(4); - crowdfunder1 = vm.addr(5); - crowdfunder2 = vm.addr(6); - vm.deal(disputer, 10 ether); - vm.deal(crowdfunder1, 10 ether); - vm.deal(crowdfunder2, 10 ether); - jurorProsecutionModule = vm.addr(8); - other = vm.addr(9); - minStake = 1000; - alpha = 10000; - feeForJuror = 0.03 ether; - jurorsForCourtJump = 511; - timesPerPeriod = [60, 120, 180, 240]; - - pinakion.transfer(msg.sender, totalSupply - 2 ether); - pinakion.transfer(staker1, 1 ether); - pinakion.transfer(staker2, 1 ether); - - sortitionExtraData = abi.encode(uint256(5)); - minStakingTime = 18; - maxDrawingTime = 24; - hiddenVotes = false; - - rngLookahead = 30; - rng = new BlockHashRNG(msg.sender, address(sortitionModule), rngLookahead); - - UUPSProxy proxyCore = new UUPSProxy(address(coreLogic), ""); - - bytes memory initDataDk = abi.encodeWithSignature( - "initialize(address,address,address,uint256)", - owner, - address(proxyCore), - address(wNative), - DISPUTE_KIT_CLASSIC - ); - - UUPSProxy proxyDk = new UUPSProxy(address(dkLogic), initDataDk); - disputeKit = DisputeKitClassic(address(proxyDk)); - - bytes memory initDataSm = abi.encodeWithSignature( - "initialize(address,address,uint256,uint256,address,uint256,uint256)", - owner, - address(proxyCore), - minStakingTime, - maxDrawingTime, - rng, - type(uint256).max, - type(uint256).max - ); - - UUPSProxy proxySm = new UUPSProxy(address(smLogic), initDataSm); - sortitionModule = SortitionModuleMock(address(proxySm)); - vm.prank(owner); - rng.changeConsumer(address(sortitionModule)); - - core = KlerosCoreMock(address(proxyCore)); - core.initialize( - owner, - guardian, - pinakion, - jurorProsecutionModule, - disputeKit, - hiddenVotes, - [minStake, alpha, feeForJuror, jurorsForCourtJump], - timesPerPeriod, - sortitionExtraData, - sortitionModule, - address(wNative), - IERC721(address(0)) - ); - vm.prank(staker1); - pinakion.approve(address(core), 1 ether); - vm.prank(staker2); - pinakion.approve(address(core), 1 ether); - - templateData = "AAA"; - templateDataMappings = "BBB"; - arbitratorExtraData = abi.encodePacked(uint256(GENERAL_COURT), DEFAULT_NB_OF_JURORS, DISPUTE_KIT_CLASSIC); - - bytes memory initDataRegistry = abi.encodeWithSignature("initialize(address)", owner); - UUPSProxy proxyRegistry = new UUPSProxy(address(registryLogic), initDataRegistry); - registry = DisputeTemplateRegistry(address(proxyRegistry)); - - arbitrable = new ArbitrableExample( - core, - templateData, - templateDataMappings, - arbitratorExtraData, - registry, - feeToken - ); - } - - // ************************************* // - // * Helper Functions * // - // ************************************* // - - /// @dev Helper function to create a new dispute kit - function _createNewDisputeKit() internal returns (DisputeKitSybilResistant) { - return new DisputeKitSybilResistant(); - } - - /// @dev Helper function to create a new court with standard parameters - function _createStandardCourt( - uint96 parent, - uint256 minStakeValue, - uint256 alphaValue, - uint256 feeForJurorValue, - uint256 jurorsForJumpValue - ) internal returns (uint96) { - uint256[] memory supportedDK = new uint256[](1); - supportedDK[0] = DISPUTE_KIT_CLASSIC; - - vm.prank(owner); - core.createCourt( - parent, - hiddenVotes, - minStakeValue, - alphaValue, - feeForJurorValue, - jurorsForJumpValue, - timesPerPeriod, - sortitionExtraData, - supportedDK - ); - - return uint96(core.getCourtChildren(parent)[core.getCourtChildren(parent).length - 1]); - } - - /// @dev Helper function to check court parameters - function _assertCourtParameters( - uint96 courtId, - uint96 expectedParent, - bool expectedHiddenVotes, - uint256 expectedMinStake, - uint256 expectedAlpha, - uint256 expectedFeeForJuror, - uint256 expectedJurorsForJump, - bool expectedDisabled - ) internal { - ( - uint96 courtParent, - bool courtHiddenVotes, - uint256 courtMinStake, - uint256 courtAlpha, - uint256 courtFeeForJuror, - uint256 courtJurorsForCourtJump, - bool courtDisabled - ) = core.courts(courtId); - - assertEq(courtParent, expectedParent, "Wrong court parent"); - assertEq(courtHiddenVotes, expectedHiddenVotes, "Wrong hiddenVotes value"); - assertEq(courtMinStake, expectedMinStake, "Wrong minStake value"); - assertEq(courtAlpha, expectedAlpha, "Wrong alpha value"); - assertEq(courtFeeForJuror, expectedFeeForJuror, "Wrong feeForJuror value"); - assertEq(courtJurorsForCourtJump, expectedJurorsForJump, "Wrong jurorsForCourtJump value"); - assertEq(courtDisabled, expectedDisabled, "Wrong disabled state"); - } - - /// @dev Helper function to check times per period - function _assertTimesPerPeriod(uint96 courtId, uint256[4] memory expectedTimes) internal { - uint256[4] memory courtTimesPerPeriod = core.getTimesPerPeriod(courtId); - for (uint256 i = 0; i < 4; i++) { - assertEq(courtTimesPerPeriod[i], expectedTimes[i], "Wrong times per period"); - } - } -} diff --git a/contracts/test/foundry/KlerosCore_Voting.t.sol b/contracts/test/foundry/KlerosCore_Voting.t.sol deleted file mode 100644 index 504c9c644..000000000 --- a/contracts/test/foundry/KlerosCore_Voting.t.sol +++ /dev/null @@ -1,486 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {KlerosCore_TestBase} from "./KlerosCore_TestBase.sol"; -import {KlerosCore} from "../../src/arbitration/KlerosCore.sol"; -import {DisputeKitClassic, DisputeKitClassicBase} from "../../src/arbitration/dispute-kits/DisputeKitClassic.sol"; -import {IDisputeKit} from "../../src/arbitration/interfaces/IDisputeKit.sol"; -import {UUPSProxy} from "../../src/proxy/UUPSProxy.sol"; -import "../../src/libraries/Constants.sol"; - -/// @title KlerosCore_VotingTest -/// @dev Tests for KlerosCore voting system (commit/reveal and direct voting) -contract KlerosCore_VotingTest is KlerosCore_TestBase { - function test_castCommit() public { - // Change hidden votes in general court - uint256 disputeID = 0; - vm.prank(owner); - core.changeCourtParameters( - GENERAL_COURT, - true, // Hidden votes - 1000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 511, // jurors for jump - [uint256(60), uint256(120), uint256(180), uint256(240)] // Times per period - ); - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 10000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - uint256 YES = 1; - uint256 salt = 123455678; - uint256[] memory voteIDs = new uint256[](1); - voteIDs[0] = 0; - bytes32 commit; - vm.prank(staker1); - vm.expectRevert(DisputeKitClassicBase.NotCommitPeriod.selector); - disputeKit.castCommit(disputeID, voteIDs, commit); - - vm.expectRevert(KlerosCore.EvidenceNotPassedAndNotAppeal.selector); - core.passPeriod(disputeID); - vm.warp(block.timestamp + timesPerPeriod[0]); - - vm.expectEmit(true, true, true, true); - emit KlerosCore.NewPeriod(disputeID, KlerosCore.Period.commit); - core.passPeriod(disputeID); - - (, , KlerosCore.Period period, , uint256 lastPeriodChange) = core.disputes(disputeID); - - assertEq(uint256(period), uint256(KlerosCore.Period.commit), "Wrong period"); - assertEq(lastPeriodChange, block.timestamp, "Wrong lastPeriodChange"); - - vm.prank(staker1); - vm.expectRevert(DisputeKitClassicBase.EmptyCommit.selector); - disputeKit.castCommit(disputeID, voteIDs, commit); - - commit = keccak256(abi.encodePacked(YES, salt)); - - vm.prank(other); - vm.expectRevert(DisputeKitClassicBase.JurorHasToOwnTheVote.selector); - disputeKit.castCommit(disputeID, voteIDs, commit); - - vm.prank(staker1); - vm.expectEmit(true, true, true, true); - emit DisputeKitClassicBase.CommitCast(disputeID, staker1, voteIDs, commit); - disputeKit.castCommit(disputeID, voteIDs, commit); - - (, , , uint256 totalCommited, uint256 nbVoters, uint256 choiceCount) = disputeKit.getRoundInfo(disputeID, 0, 0); - assertEq(totalCommited, 1, "totalCommited should be 1"); - assertEq(disputeKit.areCommitsAllCast(disputeID), false, "Commits should not all be cast"); - - (, bytes32 commitStored, , ) = disputeKit.getVoteInfo(0, 0, 0); - assertEq(commitStored, keccak256(abi.encodePacked(YES, salt)), "Incorrect commit"); - - voteIDs = new uint256[](2); // Create the leftover votes subset - voteIDs[0] = 1; - voteIDs[1] = 2; - - vm.prank(staker1); - vm.expectEmit(true, true, true, true); - emit DisputeKitClassicBase.CommitCast(disputeID, staker1, voteIDs, commit); - disputeKit.castCommit(disputeID, voteIDs, commit); - - (, , , totalCommited, nbVoters, choiceCount) = disputeKit.getRoundInfo(disputeID, 0, 0); - assertEq(totalCommited, DEFAULT_NB_OF_JURORS, "totalCommited should be 3"); - assertEq(disputeKit.areCommitsAllCast(disputeID), true, "Commits should all be cast"); - - for (uint256 i = 1; i < DEFAULT_NB_OF_JURORS; i++) { - (, commitStored, , ) = disputeKit.getVoteInfo(0, 0, i); - assertEq(commitStored, keccak256(abi.encodePacked(YES, salt)), "Incorrect commit"); - } - - // Check reveal in the next period - vm.warp(block.timestamp + timesPerPeriod[1]); - core.passPeriod(disputeID); - - // Check the require with the wrong choice and then with the wrong salt - vm.prank(staker1); - vm.expectRevert(DisputeKitClassicBase.HashDoesNotMatchHiddenVoteCommitment.selector); - disputeKit.castVote(disputeID, voteIDs, 2, salt, "XYZ"); - - vm.prank(staker1); - vm.expectRevert(DisputeKitClassicBase.HashDoesNotMatchHiddenVoteCommitment.selector); - disputeKit.castVote(disputeID, voteIDs, YES, salt - 1, "XYZ"); - - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, YES, salt, "XYZ"); - - for (uint256 i = 1; i < DEFAULT_NB_OF_JURORS; i++) { - // 0 voteID was skipped when casting a vote - (address account, , uint256 choice, bool voted) = disputeKit.getVoteInfo(0, 0, i); - assertEq(account, staker1, "Wrong drawn account"); - assertEq(choice, YES, "Wrong choice"); - assertEq(voted, true, "Voted should be true"); - } - } - - function test_castCommit_timeoutCheck() public { - // Change hidden votes in general court - uint256 disputeID = 0; - vm.prank(owner); - core.changeCourtParameters( - GENERAL_COURT, - true, // Hidden votes - 1000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 511, // jurors for jump - [uint256(60), uint256(120), uint256(180), uint256(240)] // Times per period - ); - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 10000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Commit - - vm.expectRevert(KlerosCore.CommitPeriodNotPassed.selector); - core.passPeriod(disputeID); - - vm.warp(block.timestamp + timesPerPeriod[1]); - vm.expectEmit(true, true, true, true); - emit KlerosCore.NewPeriod(disputeID, KlerosCore.Period.vote); - core.passPeriod(disputeID); - } - - function test_castVote() public { - uint256 disputeID = 0; - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 10000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - core.draw(disputeID, DEFAULT_NB_OF_JURORS - 1); // Draw less to check the require later - vm.warp(block.timestamp + timesPerPeriod[0]); - - uint256[] memory voteIDs = new uint256[](0); - vm.prank(staker1); - vm.expectRevert(DisputeKitClassicBase.NotVotePeriod.selector); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); // Leave salt empty as not needed - - vm.expectRevert(KlerosCore.DisputeStillDrawing.selector); - core.passPeriod(disputeID); - - core.draw(disputeID, 1); // Draw the last juror - - vm.expectEmit(true, true, true, true); - emit KlerosCore.NewPeriod(disputeID, KlerosCore.Period.vote); - core.passPeriod(disputeID); // Vote - - (, , KlerosCore.Period period, , uint256 lastPeriodChange) = core.disputes(disputeID); - - assertEq(uint256(period), uint256(KlerosCore.Period.vote), "Wrong period"); - assertEq(lastPeriodChange, block.timestamp, "Wrong lastPeriodChange"); - - vm.prank(staker1); - vm.expectRevert(DisputeKitClassicBase.EmptyVoteIDs.selector); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - voteIDs = new uint256[](1); - voteIDs[0] = 0; // Split vote IDs to see how the winner changes - vm.prank(staker1); - vm.expectRevert(DisputeKitClassicBase.ChoiceOutOfBounds.selector); - disputeKit.castVote(disputeID, voteIDs, 2 + 1, 0, "XYZ"); - - vm.prank(other); - vm.expectRevert(DisputeKitClassicBase.JurorHasToOwnTheVote.selector); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - vm.prank(staker1); - vm.expectEmit(true, true, true, true); - emit IDisputeKit.VoteCast(disputeID, staker1, voteIDs, 2, "XYZ"); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - vm.prank(staker1); - vm.expectRevert(DisputeKitClassicBase.VoteAlreadyCast.selector); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - ( - uint256 winningChoice, - bool tied, - uint256 totalVoted, - uint256 totalCommited, - , - uint256 choiceCount - ) = disputeKit.getRoundInfo(disputeID, 0, 2); - assertEq(winningChoice, 2, "Wrong winning choice"); - assertEq(tied, false, "tied should be false"); - assertEq(totalVoted, 1, "totalVoted should be 1"); - assertEq(totalCommited, 0, "totalCommited should be 0"); - assertEq(choiceCount, 1, "choiceCount should be 1"); - - (address account, bytes32 commit, uint256 choice, bool voted) = disputeKit.getVoteInfo(0, 0, 0); // Dispute - Round - VoteID - assertEq(account, staker1, "Wrong drawn account"); - assertEq(commit, bytes32(0), "Commit should be empty"); - assertEq(choice, 2, "Choice should be 2"); - assertEq(voted, true, "Voted should be true"); - - assertEq(disputeKit.isVoteActive(0, 0, 0), true, "Vote should be active"); // Dispute - Round - VoteID - - voteIDs = new uint256[](1); - voteIDs[0] = 1; // Cast another vote to check the tie. - - vm.prank(staker1); - vm.expectEmit(true, true, true, true); - emit IDisputeKit.VoteCast(disputeID, staker1, voteIDs, 1, "XYZZ"); - disputeKit.castVote(disputeID, voteIDs, 1, 0, "XYZZ"); - - (, tied, totalVoted, , , choiceCount) = disputeKit.getRoundInfo(disputeID, 0, 1); - assertEq(tied, true, "tied should be true"); - assertEq(totalVoted, 2, "totalVoted should be 2"); - assertEq(choiceCount, 1, "choiceCount should be 1 for first choice"); - - vm.expectRevert(KlerosCore.VotePeriodNotPassed.selector); - core.passPeriod(disputeID); - - voteIDs = new uint256[](1); - voteIDs[0] = 2; // Cast another vote to declare a new winner. - - vm.prank(staker1); - vm.expectEmit(true, true, true, true); - emit IDisputeKit.VoteCast(disputeID, staker1, voteIDs, 1, "XYZZ"); - disputeKit.castVote(disputeID, voteIDs, 1, 0, "XYZZ"); - - (winningChoice, tied, totalVoted, , , choiceCount) = disputeKit.getRoundInfo(disputeID, 0, 1); - assertEq(winningChoice, 1, "Wrong winning choice"); - assertEq(tied, false, "tied should be false"); - assertEq(totalVoted, 3, "totalVoted should be 3"); - assertEq(choiceCount, 2, "choiceCount should be 2 for first choice"); - assertEq(disputeKit.areVotesAllCast(disputeID), true, "Votes should all be cast"); - } - - function test_castVote_timeoutCheck() public { - // Change hidden votes in general court - uint256 disputeID = 0; - vm.prank(staker1); - core.setStake(GENERAL_COURT, 10000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Votes - - vm.expectRevert(KlerosCore.VotePeriodNotPassed.selector); - core.passPeriod(disputeID); - - vm.warp(block.timestamp + timesPerPeriod[2]); - vm.expectEmit(true, true, true, true); - emit KlerosCore.AppealPossible(disputeID, arbitrable); - vm.expectEmit(true, true, true, true); - emit KlerosCore.NewPeriod(disputeID, KlerosCore.Period.appeal); - core.passPeriod(disputeID); - } - - function test_castVote_rulingCheck() public { - // Change hidden votes in general court - uint256 disputeID = 0; - vm.prank(staker1); - core.setStake(GENERAL_COURT, 10000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Votes - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, 1, 0, "XYZZ"); - - (uint256 ruling, bool tied, bool overridden) = disputeKit.currentRuling(disputeID); - assertEq(ruling, 1, "Wrong ruling"); - assertEq(tied, false, "Not tied"); - assertEq(overridden, false, "Not overridden"); - } - - function test_castVote_quickPassPeriod() public { - // Change hidden votes in general court - uint256 disputeID = 0; - vm.prank(owner); - core.changeCourtParameters( - GENERAL_COURT, - true, // Hidden votes - 1000, // min stake - 10000, // alpha - 0.03 ether, // fee for juror - 511, // jurors for jump - [uint256(60), uint256(120), uint256(180), uint256(240)] // Times per period - ); - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 10000); - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - - uint256 YES = 1; - uint256 salt = 123455678; - uint256[] memory voteIDs = new uint256[](1); - voteIDs[0] = 0; - bytes32 commit; - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); - - commit = keccak256(abi.encodePacked(YES, salt)); - - vm.prank(staker1); - disputeKit.castCommit(disputeID, voteIDs, commit); - - (, , , uint256 totalCommited, uint256 nbVoters, uint256 choiceCount) = disputeKit.getRoundInfo(disputeID, 0, 0); - assertEq(totalCommited, 1, "totalCommited should be 1"); - assertEq(disputeKit.areCommitsAllCast(disputeID), false, "Commits should not all be cast"); - - vm.warp(block.timestamp + timesPerPeriod[1]); - core.passPeriod(disputeID); - - vm.prank(staker1); - disputeKit.castVote(disputeID, voteIDs, YES, salt, "XYZ"); - - (, , uint256 totalVoted, , , ) = disputeKit.getRoundInfo(disputeID, 0, 0); - assertEq(totalVoted, 1, "totalVoted should be 1"); - assertEq(disputeKit.areVotesAllCast(disputeID), true, "Every committed vote was cast"); - - // Should pass period by counting only committed votes. - vm.expectEmit(true, true, true, true); - emit KlerosCore.NewPeriod(disputeID, KlerosCore.Period.appeal); - core.passPeriod(disputeID); - } - - function test_castVote_differentDK() public { - DisputeKitClassic dkLogic = new DisputeKitClassic(); - // Create a new DK to check castVote. - bytes memory initDataDk = abi.encodeWithSignature( - "initialize(address,address,address,uint256)", - owner, - address(core), - address(wNative), - DISPUTE_KIT_CLASSIC - ); - - UUPSProxy proxyDk = new UUPSProxy(address(dkLogic), initDataDk); - DisputeKitClassic newDisputeKit = DisputeKitClassic(address(proxyDk)); - - vm.prank(owner); - core.addNewDisputeKit(newDisputeKit); - - uint256 newDkID = 2; - uint256[] memory supportedDK = new uint256[](1); - bytes memory newExtraData = abi.encodePacked(uint256(GENERAL_COURT), DEFAULT_NB_OF_JURORS, newDkID); - - vm.prank(owner); - vm.expectEmit(true, true, true, true); - emit KlerosCore.DisputeKitEnabled(GENERAL_COURT, newDkID, true); - supportedDK[0] = newDkID; - core.enableDisputeKits(GENERAL_COURT, supportedDK, true); - assertEq(core.isSupported(GENERAL_COURT, newDkID), true, "New DK should be supported by General court"); - - vm.prank(staker1); - core.setStake(GENERAL_COURT, 20000); - - // Create one dispute for the old DK and two disputes for the new DK. - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - - arbitrable.changeArbitratorExtraData(newExtraData); - - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - - vm.prank(disputer); - arbitrable.createDispute{value: feeForJuror * DEFAULT_NB_OF_JURORS}("Action"); - - uint256 disputeID = 2; // Use the latest dispute for reference. This is the ID in the core contract - - vm.warp(block.timestamp + minStakingTime); - sortitionModule.passPhase(); // Generating - vm.warp(block.timestamp + rngLookahead); - sortitionModule.passPhase(); // Drawing phase - - KlerosCore.Round memory round = core.getRoundInfo(disputeID, 0); - assertEq(round.disputeKitID, newDkID, "Wrong DK ID"); - - core.draw(disputeID, DEFAULT_NB_OF_JURORS); - // Draw jurors for the old DK as well to prepare round.votes array - core.draw(0, DEFAULT_NB_OF_JURORS); - - vm.warp(block.timestamp + timesPerPeriod[0]); - core.passPeriod(disputeID); // Vote - - // Check that the new DK has the info but not the old one. - - assertEq(disputeKit.coreDisputeIDToActive(disputeID), false, "Should be false for old DK"); - - // This is the DK where dispute was created. Core dispute points to index 1 because new DK has two disputes. - assertEq(newDisputeKit.coreDisputeIDToLocal(disputeID), 1, "Wrong local dispute ID for new DK"); - assertEq(newDisputeKit.coreDisputeIDToActive(disputeID), true, "Should be active for new DK"); - (uint256 numberOfChoices, , bytes memory extraData) = newDisputeKit.disputes(1); - assertEq(numberOfChoices, 2, "Wrong numberOfChoices in new DK"); - assertEq(extraData, newExtraData, "Wrong extra data"); - - uint256[] memory voteIDs = new uint256[](3); - voteIDs[0] = 0; - voteIDs[1] = 1; - voteIDs[2] = 2; - - // Deliberately cast votes using the old DK to see if the exception will be caught. - vm.prank(staker1); - vm.expectRevert(DisputeKitClassicBase.NotActiveForCoreDisputeID.selector); - disputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - // And check the new DK. - vm.prank(staker1); - newDisputeKit.castVote(disputeID, voteIDs, 2, 0, "XYZ"); - - ( - uint256 winningChoice, - bool tied, - uint256 totalVoted, - uint256 totalCommited, - , - uint256 choiceCount - ) = newDisputeKit.getRoundInfo(disputeID, 0, 2); - assertEq(winningChoice, 2, "Wrong winning choice"); - assertEq(tied, false, "tied should be false"); - assertEq(totalVoted, 3, "totalVoted should be 3"); - assertEq(totalCommited, 0, "totalCommited should be 0"); - assertEq(choiceCount, 3, "choiceCount should be 3"); - } -} diff --git a/contracts/test/integration/getContractsEthers.test.ts b/contracts/test/integration/getContractsEthers.test.ts deleted file mode 100644 index 8bd2b9cf5..000000000 --- a/contracts/test/integration/getContractsEthers.test.ts +++ /dev/null @@ -1,320 +0,0 @@ -import { expect } from "chai"; -import { ethers } from "ethers"; -import { arbitrum, arbitrumSepolia } from "viem/chains"; -import { getContracts } from "../../deployments/contractsEthers"; -import { - KlerosCore__factory, - KlerosCoreUniversity__factory, - SortitionModule__factory, - SortitionModuleUniversity__factory, - DisputeKitClassic__factory, - DisputeResolver__factory, - DisputeTemplateRegistry__factory, - EvidenceModule__factory, - PolicyRegistry__factory, - TransactionBatcher__factory, - ChainlinkRNG__factory, - RandomizerRNG__factory, - BlockHashRNG__factory, - PNK__factory, - KlerosCoreSnapshotProxy__factory, - DisputeKitShutter__factory, - DisputeKitGated__factory, - DisputeKitGatedShutter__factory, -} from "../../typechain-types"; -import { getActualAddress } from "../utils/getActualAddress"; - -// Network names for deployments -const NETWORKS = { - DEVNET: "arbitrumSepoliaDevnet", - TESTNET: "arbitrumSepolia", - MAINNET: "arbitrum", -} as const; - -type NetworkType = (typeof NETWORKS)[keyof typeof NETWORKS]; - -type ContractMapping = { - [K in keyof Awaited>]: { - name: string; - optional?: boolean; - }; -}; - -const devnetContractMapping: ContractMapping = { - klerosCore: { name: "KlerosCore" }, - sortition: { name: "SortitionModule" }, - disputeKitClassic: { name: "DisputeKitClassic" }, - disputeKitShutter: { name: "DisputeKitShutter" }, - disputeKitGated: { name: "DisputeKitGated" }, - disputeKitGatedShutter: { name: "DisputeKitGatedShutter" }, - disputeResolver: { name: "DisputeResolver" }, - disputeTemplateRegistry: { name: "DisputeTemplateRegistry" }, - evidence: { name: "EvidenceModule" }, - policyRegistry: { name: "PolicyRegistry" }, - transactionBatcher: { name: "TransactionBatcher" }, - chainlinkRng: { name: "ChainlinkRNG", optional: true }, - randomizerRng: { name: "RandomizerRNG", optional: true }, - blockHashRng: { name: "BlockHashRNG" }, - pnk: { name: "PNK" }, - klerosCoreSnapshotProxy: { name: "KlerosCoreSnapshotProxy" }, -}; - -const testnetContractMapping: ContractMapping = { - klerosCore: { name: "KlerosCore" }, - sortition: { name: "SortitionModule" }, - disputeKitClassic: { name: "DisputeKitClassic" }, - disputeKitShutter: { name: "DisputeKitShutter" }, - disputeKitGated: { name: "DisputeKitGated" }, - disputeKitGatedShutter: { name: "DisputeKitGatedShutter" }, - disputeResolver: { name: "DisputeResolver" }, - disputeTemplateRegistry: { name: "DisputeTemplateRegistry" }, - evidence: { name: "EvidenceModule" }, - policyRegistry: { name: "PolicyRegistry" }, - transactionBatcher: { name: "TransactionBatcher" }, - chainlinkRng: { name: "ChainlinkRNG", optional: true }, - randomizerRng: { name: "RandomizerRNG", optional: true }, - blockHashRng: { name: "BlockHashRNG" }, - pnk: { name: "PNK" }, - klerosCoreSnapshotProxy: { name: "KlerosCoreSnapshotProxy" }, -}; - -const universityContractMapping: ContractMapping = { - klerosCore: { name: "KlerosCoreUniversity" }, - sortition: { name: "SortitionModuleUniversity" }, - disputeKitClassic: { name: "DisputeKitClassicUniversity" }, - disputeKitShutter: { name: "DisputeKitShutterUniversity", optional: true }, - disputeKitGated: { name: "DisputeKitGatedUniversity", optional: true }, - disputeKitGatedShutter: { name: "DisputeKitGatedShutterUniversity", optional: true }, - disputeResolver: { name: "DisputeResolverUniversity" }, - disputeTemplateRegistry: { name: "DisputeTemplateRegistry" }, - evidence: { name: "EvidenceModule" }, - policyRegistry: { name: "PolicyRegistry" }, - transactionBatcher: { name: "TransactionBatcher" }, - chainlinkRng: { name: "ChainlinkRNG", optional: true }, - randomizerRng: { name: "RandomizerRNG", optional: true }, - blockHashRng: { name: "BlockHashRNG" }, - pnk: { name: "PNK" }, - klerosCoreSnapshotProxy: { name: "KlerosCoreSnapshotProxy" }, -}; - -const mainnetContractMapping: ContractMapping = { - klerosCore: { name: "KlerosCore" }, - sortition: { name: "SortitionModule" }, - disputeKitClassic: { name: "DisputeKitClassic" }, - disputeKitShutter: { name: "DisputeKitShutter" }, - disputeKitGated: { name: "DisputeKitGated" }, - disputeKitGatedShutter: { name: "DisputeKitGatedShutter" }, - disputeResolver: { name: "DisputeResolver" }, - disputeTemplateRegistry: { name: "DisputeTemplateRegistry" }, - evidence: { name: "EvidenceModule" }, - policyRegistry: { name: "PolicyRegistry" }, - transactionBatcher: { name: "TransactionBatcher" }, - chainlinkRng: { name: "ChainlinkRNG", optional: false }, - randomizerRng: { name: "RandomizerRNG", optional: false }, - blockHashRng: { name: "BlockHashRNG" }, - pnk: { name: "PNK" }, - klerosCoreSnapshotProxy: { name: "KlerosCoreSnapshotProxy" }, -}; - -describe("getContractsEthers", async () => { - // Use real providers for each network - const arbitrumSepoliaProvider = new ethers.JsonRpcProvider("https://sepolia-rollup.arbitrum.io/rpc"); - const arbitrumProvider = new ethers.JsonRpcProvider("https://arb1.arbitrum.io/rpc"); - - function getConstructor( - factory: { connect: (address: string, provider: ethers.Provider) => T }, - provider: ethers.Provider - ) { - return factory.connect("0x0", provider).constructor; - } - - function verifyCommonContractInstances( - contracts: Awaited>, - provider: ethers.Provider - ) { - expect(contracts.disputeKitClassic).to.be.instanceOf(getConstructor(DisputeKitClassic__factory, provider)); - if (contracts.disputeKitShutter) { - expect(contracts.disputeKitShutter).to.be.instanceOf(getConstructor(DisputeKitShutter__factory, provider)); - } - if (contracts.disputeKitGated) { - expect(contracts.disputeKitGated).to.be.instanceOf(getConstructor(DisputeKitGated__factory, provider)); - } - if (contracts.disputeKitGatedShutter) { - expect(contracts.disputeKitGatedShutter).to.be.instanceOf( - getConstructor(DisputeKitGatedShutter__factory, provider) - ); - } - expect(contracts.disputeResolver).to.be.instanceOf(getConstructor(DisputeResolver__factory, provider)); - expect(contracts.disputeTemplateRegistry).to.be.instanceOf( - getConstructor(DisputeTemplateRegistry__factory, provider) - ); - expect(contracts.evidence).to.be.instanceOf(getConstructor(EvidenceModule__factory, provider)); - expect(contracts.policyRegistry).to.be.instanceOf(getConstructor(PolicyRegistry__factory, provider)); - expect(contracts.transactionBatcher).to.be.instanceOf(getConstructor(TransactionBatcher__factory, provider)); - expect(contracts.blockHashRng).to.be.instanceOf(getConstructor(BlockHashRNG__factory, provider)); - expect(contracts.pnk).to.be.instanceOf(getConstructor(PNK__factory, provider)); - expect(contracts.klerosCoreSnapshotProxy).to.be.instanceOf( - getConstructor(KlerosCoreSnapshotProxy__factory, provider) - ); - if (contracts.chainlinkRng) { - expect(contracts.chainlinkRng).to.be.instanceOf(getConstructor(ChainlinkRNG__factory, provider)); - } - if (contracts.randomizerRng) { - expect(contracts.randomizerRng).to.be.instanceOf(getConstructor(RandomizerRNG__factory, provider)); - } - } - - // Helper to verify contract addresses - async function verifyContractAddress(address: Promise) { - const resolvedAddress = await address; - expect(resolvedAddress).to.match(/^0x[a-fA-F0-9]{40}$/); - expect(resolvedAddress).to.not.equal("0x0000000000000000000000000000000000000000"); - } - - // Helper to verify all contract addresses - async function verifyAllContractAddresses(contracts: Awaited>) { - await verifyContractAddress(contracts.klerosCore.getAddress()); - await verifyContractAddress(contracts.sortition.getAddress()); - await verifyContractAddress(contracts.disputeKitClassic.getAddress()); - if (contracts.disputeKitShutter) { - await verifyContractAddress(contracts.disputeKitShutter.getAddress()); - } - if (contracts.disputeKitGated) { - await verifyContractAddress(contracts.disputeKitGated.getAddress()); - } - if (contracts.disputeKitGatedShutter) { - await verifyContractAddress(contracts.disputeKitGatedShutter.getAddress()); - } - await verifyContractAddress(contracts.disputeResolver.getAddress()); - await verifyContractAddress(contracts.disputeTemplateRegistry.getAddress()); - await verifyContractAddress(contracts.evidence.getAddress()); - await verifyContractAddress(contracts.policyRegistry.getAddress()); - await verifyContractAddress(contracts.transactionBatcher.getAddress()); - if (contracts.chainlinkRng) { - await verifyContractAddress(contracts.chainlinkRng.getAddress()); - } - if (contracts.randomizerRng) { - await verifyContractAddress(contracts.randomizerRng.getAddress()); - } - await verifyContractAddress(contracts.blockHashRng.getAddress()); - await verifyContractAddress(contracts.pnk.getAddress()); - await verifyContractAddress(contracts.klerosCoreSnapshotProxy.getAddress()); - } - - // Helper to verify contract addresses against deployment files - async function verifyDeployedAddresses( - contracts: Awaited>, - network: NetworkType, - contractMapping: ContractMapping - ) { - for (const [key, { name, optional }] of Object.entries(contractMapping)) { - const contract = contracts[key as keyof typeof contracts]; - if (contract === null) { - if (!optional) { - throw new Error(`Required contract ${name} is null`); - } - continue; - } - expect(await contract.getAddress()).to.equal(await getActualAddress(network, name)); - } - } - - it("should return correct contract instances for devnet", async () => { - const contracts = await getContracts(arbitrumSepoliaProvider, "devnet"); - - // Verify chain ID - const network = await arbitrumSepoliaProvider.getNetwork(); - expect(network.chainId).to.equal(arbitrumSepolia.id); - - // Verify contract instances - expect(contracts.klerosCore).to.be.instanceOf(getConstructor(KlerosCore__factory, arbitrumSepoliaProvider)); - expect(contracts.sortition).to.be.instanceOf(getConstructor(SortitionModule__factory, arbitrumSepoliaProvider)); - verifyCommonContractInstances(contracts, arbitrumSepoliaProvider); - expect(contracts.disputeKitShutter).to.not.be.null; - expect(contracts.disputeKitGated).to.not.be.null; - expect(contracts.disputeKitGatedShutter).to.not.be.null; - expect(contracts.chainlinkRng).to.not.be.null; - expect(contracts.randomizerRng).to.be.null; - - // Verify all contract addresses - await verifyAllContractAddresses(contracts); - await verifyDeployedAddresses(contracts, NETWORKS.DEVNET, devnetContractMapping); - }); - - it("should return correct contract instances for university", async () => { - const contracts = await getContracts(arbitrumSepoliaProvider, "university"); - - // Verify chain ID - const network = await arbitrumSepoliaProvider.getNetwork(); - expect(network.chainId).to.equal(arbitrumSepolia.id); - - // Verify contract instances - expect(contracts.klerosCore).to.be.instanceOf( - getConstructor(KlerosCoreUniversity__factory, arbitrumSepoliaProvider) - ); - expect(contracts.sortition).to.be.instanceOf( - getConstructor(SortitionModuleUniversity__factory, arbitrumSepoliaProvider) - ); - verifyCommonContractInstances(contracts, arbitrumSepoliaProvider); - expect(contracts.disputeKitShutter).to.be.null; - expect(contracts.disputeKitGated).to.be.null; - expect(contracts.disputeKitGatedShutter).to.be.null; - expect(contracts.chainlinkRng).to.not.be.null; - expect(contracts.randomizerRng).to.be.null; - - // Verify all contract addresses - await verifyAllContractAddresses(contracts); - await verifyDeployedAddresses(contracts, NETWORKS.DEVNET, universityContractMapping); - }); - - it("should return correct contract instances for testnet", async () => { - const contracts = await getContracts(arbitrumSepoliaProvider, "testnet"); - - // Verify chain ID - const network = await arbitrumSepoliaProvider.getNetwork(); - expect(network.chainId).to.equal(arbitrumSepolia.id); - - // Verify contract instances - expect(contracts.klerosCore).to.be.instanceOf(getConstructor(KlerosCore__factory, arbitrumSepoliaProvider)); - expect(contracts.sortition).to.be.instanceOf(getConstructor(SortitionModule__factory, arbitrumSepoliaProvider)); - verifyCommonContractInstances(contracts, arbitrumSepoliaProvider); - expect(contracts.disputeKitShutter).to.not.be.null; - expect(contracts.disputeKitGated).to.not.be.null; - expect(contracts.disputeKitGatedShutter).to.not.be.null; - expect(contracts.chainlinkRng).to.not.be.null; - expect(contracts.randomizerRng).to.be.null; - - // Verify all contract addresses - await verifyAllContractAddresses(contracts); - await verifyDeployedAddresses(contracts, NETWORKS.TESTNET, testnetContractMapping); - }); - - it("should return correct contract instances for mainnet", async () => { - const contracts = await getContracts(arbitrumProvider, "mainnet"); - - // Verify chain ID - const network = await arbitrumProvider.getNetwork(); - expect(network.chainId).to.equal(arbitrum.id); - - // Verify contract instances - expect(contracts.klerosCore).to.be.instanceOf(getConstructor(KlerosCore__factory, arbitrumProvider)); - expect(contracts.sortition).to.be.instanceOf(getConstructor(SortitionModule__factory, arbitrumProvider)); - verifyCommonContractInstances(contracts, arbitrumProvider); - expect(contracts.disputeKitShutter).to.not.be.null; - expect(contracts.disputeKitGated).to.not.be.null; - expect(contracts.disputeKitGatedShutter).to.not.be.null; - expect(contracts.chainlinkRng).to.not.be.null; - expect(contracts.randomizerRng).to.not.be.null; - - // Verify all contract addresses - await verifyAllContractAddresses(contracts); - await verifyDeployedAddresses(contracts, NETWORKS.MAINNET, mainnetContractMapping); - }); - - it("should throw error for unsupported deployment", async () => { - // @ts-expect-error Testing invalid deployment - await expect(getContracts(arbitrumSepoliaProvider, "invalid")).to.be.rejectedWith( - /Unsupported deployment|Cannot destructure property/ - ); - }); -}); diff --git a/contracts/test/integration/getContractsViem.test.ts b/contracts/test/integration/getContractsViem.test.ts deleted file mode 100644 index 67c5a92af..000000000 --- a/contracts/test/integration/getContractsViem.test.ts +++ /dev/null @@ -1,277 +0,0 @@ -import { expect } from "chai"; -import { createPublicClient, http } from "viem"; -import { arbitrum, arbitrumSepolia } from "viem/chains"; -import { getContracts } from "../../deployments/contractsViem"; -import { getActualAddress } from "../utils/getActualAddress"; - -// Network names for deployments -const NETWORKS = { - DEVNET: "arbitrumSepoliaDevnet", - TESTNET: "arbitrumSepolia", - MAINNET: "arbitrum", -} as const; - -type NetworkType = (typeof NETWORKS)[keyof typeof NETWORKS]; - -type ContractMapping = { - [K in keyof ReturnType]: { - name: string; - optional?: boolean; - }; -}; - -const devnetContractMapping: ContractMapping = { - klerosCore: { name: "KlerosCore" }, - sortition: { name: "SortitionModule" }, - disputeKitClassic: { name: "DisputeKitClassic" }, - disputeKitShutter: { name: "DisputeKitShutter" }, - disputeKitGated: { name: "DisputeKitGated" }, - disputeKitGatedShutter: { name: "DisputeKitGatedShutter" }, - disputeResolver: { name: "DisputeResolver" }, - disputeTemplateRegistry: { name: "DisputeTemplateRegistry" }, - evidence: { name: "EvidenceModule" }, - policyRegistry: { name: "PolicyRegistry" }, - transactionBatcher: { name: "TransactionBatcher" }, - chainlinkRng: { name: "ChainlinkRNG", optional: true }, - randomizerRng: { name: "RandomizerRNG", optional: true }, - blockHashRng: { name: "BlockHashRNG" }, - pnk: { name: "PNK" }, - klerosCoreSnapshotProxy: { name: "KlerosCoreSnapshotProxy" }, -}; - -const testnetContractMapping: ContractMapping = { - klerosCore: { name: "KlerosCore" }, - sortition: { name: "SortitionModule" }, - disputeKitClassic: { name: "DisputeKitClassic" }, - disputeKitShutter: { name: "DisputeKitShutter" }, - disputeKitGated: { name: "DisputeKitGated" }, - disputeKitGatedShutter: { name: "DisputeKitGatedShutter" }, - disputeResolver: { name: "DisputeResolver" }, - disputeTemplateRegistry: { name: "DisputeTemplateRegistry" }, - evidence: { name: "EvidenceModule" }, - policyRegistry: { name: "PolicyRegistry" }, - transactionBatcher: { name: "TransactionBatcher" }, - chainlinkRng: { name: "ChainlinkRNG", optional: true }, - randomizerRng: { name: "RandomizerRNG", optional: true }, - blockHashRng: { name: "BlockHashRNG" }, - pnk: { name: "PNK" }, - klerosCoreSnapshotProxy: { name: "KlerosCoreSnapshotProxy" }, -}; - -const universityContractMapping: ContractMapping = { - klerosCore: { name: "KlerosCoreUniversity" }, - sortition: { name: "SortitionModuleUniversity" }, - disputeKitClassic: { name: "DisputeKitClassicUniversity" }, - disputeKitShutter: { name: "DisputeKitShutterUniversity", optional: true }, - disputeKitGated: { name: "DisputeKitGatedUniversity", optional: true }, - disputeKitGatedShutter: { name: "DisputeKitGatedShutterUniversity", optional: true }, - disputeResolver: { name: "DisputeResolverUniversity" }, - disputeTemplateRegistry: { name: "DisputeTemplateRegistry" }, - evidence: { name: "EvidenceModule" }, - policyRegistry: { name: "PolicyRegistry" }, - transactionBatcher: { name: "TransactionBatcher" }, - chainlinkRng: { name: "ChainlinkRNG", optional: true }, - randomizerRng: { name: "RandomizerRNG", optional: true }, - blockHashRng: { name: "BlockHashRNG" }, - pnk: { name: "PNK" }, - klerosCoreSnapshotProxy: { name: "KlerosCoreSnapshotProxy" }, -}; - -const mainnetContractMapping: ContractMapping = { - klerosCore: { name: "KlerosCore" }, - sortition: { name: "SortitionModule" }, - disputeKitClassic: { name: "DisputeKitClassic" }, - disputeKitShutter: { name: "DisputeKitShutter" }, - disputeKitGated: { name: "DisputeKitGated" }, - disputeKitGatedShutter: { name: "DisputeKitGatedShutter" }, - disputeResolver: { name: "DisputeResolver" }, - disputeTemplateRegistry: { name: "DisputeTemplateRegistry" }, - evidence: { name: "EvidenceModule" }, - policyRegistry: { name: "PolicyRegistry" }, - transactionBatcher: { name: "TransactionBatcher" }, - chainlinkRng: { name: "ChainlinkRNG", optional: false }, - randomizerRng: { name: "RandomizerRNG", optional: false }, - blockHashRng: { name: "BlockHashRNG" }, - pnk: { name: "PNK" }, - klerosCoreSnapshotProxy: { name: "KlerosCoreSnapshotProxy" }, -}; - -describe("getContractsViem", () => { - // Create Viem clients for testing - const arbitrumSepoliaClient = createPublicClient({ - chain: arbitrumSepolia, - transport: http("https://sepolia-rollup.arbitrum.io/rpc"), - }); - - const arbitrumClient = createPublicClient({ - chain: arbitrum, - transport: http("https://arb1.arbitrum.io/rpc"), - }); - - // Helper to verify contract instance - function verifyContractInstance(contract: any) { - expect(contract).to.have.property("address"); - expect(contract).to.have.property("abi"); - expect(contract.address).to.match(/^0x[a-fA-F0-9]{40}$/); - expect(contract.address).to.not.equal("0x0000000000000000000000000000000000000000"); - } - - // Helper to verify all contract instances - function verifyAllContractInstances(contracts: ReturnType) { - verifyContractInstance(contracts.klerosCore); - verifyContractInstance(contracts.sortition); - verifyContractInstance(contracts.disputeKitClassic); - if (contracts.disputeKitShutter) { - verifyContractInstance(contracts.disputeKitShutter); - } - if (contracts.disputeKitGated) { - verifyContractInstance(contracts.disputeKitGated); - } - if (contracts.disputeKitGatedShutter) { - verifyContractInstance(contracts.disputeKitGatedShutter); - } - verifyContractInstance(contracts.disputeResolver); - verifyContractInstance(contracts.disputeTemplateRegistry); - verifyContractInstance(contracts.evidence); - verifyContractInstance(contracts.policyRegistry); - verifyContractInstance(contracts.transactionBatcher); - verifyContractInstance(contracts.blockHashRng); - verifyContractInstance(contracts.pnk); - verifyContractInstance(contracts.klerosCoreSnapshotProxy); - - if (contracts.chainlinkRng) { - verifyContractInstance(contracts.chainlinkRng); - } - if (contracts.randomizerRng) { - verifyContractInstance(contracts.randomizerRng); - } - } - - // Helper to verify deployed addresses - async function verifyDeployedAddresses( - contracts: ReturnType, - network: NetworkType, - contractMapping: ContractMapping - ) { - for (const [key, { name, optional }] of Object.entries(contractMapping)) { - const contract = contracts[key as keyof typeof contracts]; - if (!contract) { - if (!optional) { - throw new Error(`Required contract ${name} is null`); - } - continue; - } - expect(contract.address).to.equal(await getActualAddress(network, name)); - } - } - - it("should return correct contract instances for devnet", async () => { - const contracts = getContracts({ - publicClient: arbitrumSepoliaClient, - deployment: "devnet", - }); - - // Verify chain ID - expect(arbitrumSepoliaClient.chain.id).to.equal(arbitrumSepolia.id); - - // Verify all contract instances - verifyAllContractInstances(contracts); - - // Verify specific DisputeKit instances - expect(contracts.disputeKitShutter).to.not.be.undefined; - expect(contracts.disputeKitGated).to.not.be.undefined; - expect(contracts.disputeKitGatedShutter).to.not.be.undefined; - - // Verify specific RNG instances - expect(contracts.chainlinkRng).to.not.be.undefined; - expect(contracts.randomizerRng).to.be.undefined; - - // Verify deployed addresses - await verifyDeployedAddresses(contracts, NETWORKS.DEVNET, devnetContractMapping); - }); - - it("should return correct contract instances for university", async () => { - const contracts = getContracts({ - publicClient: arbitrumSepoliaClient, - deployment: "university", - }); - - // Verify chain ID - expect(arbitrumSepoliaClient.chain.id).to.equal(arbitrumSepolia.id); - - // Verify all contract instances - verifyAllContractInstances(contracts); - - // Verify specific DisputeKit instances - expect(contracts.disputeKitShutter).to.be.undefined; - expect(contracts.disputeKitGated).to.be.undefined; - expect(contracts.disputeKitGatedShutter).to.be.undefined; - - // Verify specific RNG instances - expect(contracts.chainlinkRng).to.be.undefined; - expect(contracts.randomizerRng).to.be.undefined; - - // Verify deployed addresses - await verifyDeployedAddresses(contracts, NETWORKS.DEVNET, universityContractMapping); - }); - - it("should return correct contract instances for testnet", async () => { - const contracts = getContracts({ - publicClient: arbitrumSepoliaClient, - deployment: "testnet", - }); - - // Verify chain ID - expect(arbitrumSepoliaClient.chain.id).to.equal(arbitrumSepolia.id); - - // Verify all contract instances - verifyAllContractInstances(contracts); - - // Verify specific DisputeKit instances - expect(contracts.disputeKitShutter).to.not.be.undefined; - expect(contracts.disputeKitGated).to.not.be.undefined; - expect(contracts.disputeKitGatedShutter).to.not.be.undefined; - - // Verify specific RNG instances - expect(contracts.chainlinkRng).to.not.be.undefined; - expect(contracts.randomizerRng).to.be.undefined; - - // Verify deployed addresses - await verifyDeployedAddresses(contracts, NETWORKS.TESTNET, testnetContractMapping); - }); - - it("should return correct contract instances for mainnet", async () => { - const contracts = getContracts({ - publicClient: arbitrumClient, - deployment: "mainnet", - }); - - // Verify chain ID - expect(arbitrumClient.chain.id).to.equal(arbitrum.id); - - // Verify all contract instances - verifyAllContractInstances(contracts); - - // Verify specific DisputeKit instances - expect(contracts.disputeKitShutter).to.not.be.undefined; - expect(contracts.disputeKitGated).to.not.be.undefined; - expect(contracts.disputeKitGatedShutter).to.not.be.undefined; - - // Verify specific RNG instances - expect(contracts.chainlinkRng).to.not.be.undefined; - expect(contracts.randomizerRng).to.not.be.undefined; - - // Verify deployed addresses - await verifyDeployedAddresses(contracts, NETWORKS.MAINNET, mainnetContractMapping); - }); - - it("should throw error for unsupported deployment", () => { - expect(() => - getContracts({ - publicClient: arbitrumSepoliaClient, - // @ts-expect-error Testing invalid deployment - deployment: "invalid", - }) - ).to.throw(/Cannot destructure property 'chainId'/); - }); -}); diff --git a/contracts/test/integration/index.ts b/contracts/test/integration/index.ts deleted file mode 100644 index f3c97b2a1..000000000 --- a/contracts/test/integration/index.ts +++ /dev/null @@ -1,208 +0,0 @@ -import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; -import { expect } from "chai"; -import { deployments, ethers, getNamedAccounts, network } from "hardhat"; -import { - PNK, - KlerosCore, - ForeignGateway, - ArbitrableExample, - HomeGateway, - VeaMock, - DisputeKitClassic, - SortitionModule, - ChainlinkRNG, - ChainlinkVRFCoordinatorV2Mock, -} from "../../typechain-types"; - -/* eslint-disable no-unused-vars */ -/* eslint-disable no-unused-expressions */ // https://github.com/standard/standard/issues/690#issuecomment-278533482 - -describe("Integration tests", async () => { - const ONE_TENTH_ETH = 10n ** 17n; - const ONE_ETH = 10n ** 18n; - const ONE_HUNDRED_PNK = 10n ** 20n; - const ONE_THOUSAND_PNK = 10n ** 21n; - const abiCoder = ethers.AbiCoder.defaultAbiCoder(); - - const enum Period { - evidence, // Evidence can be submitted. This is also when drawing has to take place. - commit, // Jurors commit a hashed vote. This is skipped for courts without hidden votes. - vote, // Jurors reveal/cast their vote depending on whether the court has hidden votes or not. - appeal, // The dispute can be appealed. - execution, // Tokens are redistributed and the ruling is executed. - } - - const enum Phase { - staking, // No disputes that need drawing. - generating, // Waiting for a random number. Pass as soon as it is ready. - drawing, // Jurors can be drawn. - } - - let deployer: string; - let rng: ChainlinkRNG; - let vrfCoordinator: ChainlinkVRFCoordinatorV2Mock; - let disputeKit: DisputeKitClassic; - let pnk: PNK; - let core: KlerosCore; - let vea: VeaMock; - let foreignGateway: ForeignGateway; - let arbitrable: ArbitrableExample; - let homeGateway: HomeGateway; - let sortitionModule: SortitionModule; - - beforeEach("Setup", async () => { - ({ deployer } = await getNamedAccounts()); - await deployments.fixture(["Arbitration", "VeaMock"], { - fallbackToGlobal: true, - keepExistingDeployments: false, - }); - rng = await ethers.getContract("ChainlinkRNG"); - vrfCoordinator = await ethers.getContract("ChainlinkVRFCoordinator"); - disputeKit = await ethers.getContract("DisputeKitClassic"); - pnk = await ethers.getContract("PNK"); - core = await ethers.getContract("KlerosCore"); - vea = await ethers.getContract("VeaMock"); - foreignGateway = await ethers.getContract("ForeignGatewayOnEthereum"); - arbitrable = await ethers.getContract("ArbitrableExample"); - homeGateway = await ethers.getContract("HomeGatewayToEthereum"); - sortitionModule = await ethers.getContract("SortitionModule"); - }); - - it("Resolves a dispute on the home chain with no appeal", async () => { - const arbitrationCost = ONE_TENTH_ETH * 3n; - const [, , relayer] = await ethers.getSigners(); - - await pnk.approve(core.target, ONE_THOUSAND_PNK * 100n); - - await core.setStake(1, ONE_THOUSAND_PNK); - await sortitionModule.getJurorBalance(deployer, 1).then((result) => { - expect(result.totalStaked).to.equal(ONE_THOUSAND_PNK); - expect(result.totalLocked).to.equal(0); - logJurorBalance(result); - }); - - await core.setStake(1, ONE_HUNDRED_PNK * 5n); - await sortitionModule.getJurorBalance(deployer, 1).then((result) => { - expect(result.totalStaked).to.equal(ONE_HUNDRED_PNK * 5n); - expect(result.totalLocked).to.equal(0); - logJurorBalance(result); - }); - - await core.setStake(1, 0); - await sortitionModule.getJurorBalance(deployer, 1).then((result) => { - expect(result.totalStaked).to.equal(0); - expect(result.totalLocked).to.equal(0); - logJurorBalance(result); - }); - - await core.setStake(1, ONE_THOUSAND_PNK * 4n); - await sortitionModule.getJurorBalance(deployer, 1).then((result) => { - expect(result.totalStaked).to.equal(ONE_THOUSAND_PNK * 4n); - expect(result.totalLocked).to.equal(0); - logJurorBalance(result); - }); - const tx = await arbitrable["createDispute(string)"]("future of france", { - value: arbitrationCost, - }); - - const trace = await network.provider.send("debug_traceTransaction", [tx.hash]); - const [disputeId] = abiCoder.decode(["uint"], ethers.getBytes(`${trace.returnValue}`)); // get returned value from createDispute() - console.log("Dispute Created with disputeId: %d", disputeId); - await expect(tx) - .to.emit(foreignGateway, "CrossChainDisputeOutgoing") - .withArgs(anyValue, arbitrable.target, 1, 2, "0x00"); - await expect(tx) - .to.emit(arbitrable, "DisputeRequest") - .withArgs( - foreignGateway.target, - 1, - 46619385602526556702049273755915206310773794210139929511467397410441395547901n, - 0, - "" - ); - if (tx.blockNumber === null) throw new Error("tx.blockNumber is null"); - const lastBlock = await ethers.provider.getBlock(tx.blockNumber - 1); - if (lastBlock === null) throw new Error("lastBlock is null"); - const disputeHash = ethers.solidityPackedKeccak256( - ["bytes", "bytes32", "uint256", "address", "uint256", "uint256", "bytes"], - [ethers.toUtf8Bytes("createDispute"), lastBlock.hash, 31337, arbitrable.target, disputeId, 2, "0x00"] - ); - console.log("dispute hash: ", disputeHash); - if (lastBlock.hash === null) { - throw new Error("Block hash is null - cannot calculate dispute hash"); - } - // Relayer tx - const tx2 = await homeGateway - .connect(relayer) - ["relayCreateDispute((bytes32,uint256,address,uint256,uint256,uint256,string,uint256,bytes))"]( - { - foreignBlockHash: ethers.toBeHex(lastBlock.hash), - foreignChainID: 31337, - foreignArbitrable: arbitrable.target, - foreignDisputeID: disputeId, - externalDisputeID: ethers.keccak256(ethers.toUtf8Bytes("future of france")), - templateId: 0, - templateUri: "", - choices: 2, - extraData: "0x00", - }, - { value: arbitrationCost } - ); - expect(tx2).to.emit(homeGateway, "DisputeRequest"); - await tx2.wait(); - - await network.provider.send("evm_increaseTime", [2000]); // Wait for minStakingTime - await network.provider.send("evm_mine"); - - expect(await sortitionModule.phase()).to.equal(Phase.staking); - expect(await sortitionModule.disputesWithoutJurors()).to.equal(1); - console.log("KC phase: %d", await sortitionModule.phase()); - - await sortitionModule.passPhase(); // Staking -> Generating - expect(await sortitionModule.phase()).to.equal(Phase.generating); - console.log("KC phase: %d", await sortitionModule.phase()); - await vrfCoordinator.fulfillRandomWords(1, rng.target, []); - await sortitionModule.passPhase(); // Generating -> Drawing - expect(await sortitionModule.phase()).to.equal(Phase.drawing); - console.log("KC phase: %d", await sortitionModule.phase()); - - const tx3 = await core.draw(0, 1000); - console.log("draw successful"); - await tx3.wait(); - - const roundInfo = await core.getRoundInfo(0, 0); - expect(roundInfo.drawnJurors).deep.equal([deployer, deployer, deployer]); - expect(roundInfo.pnkAtStakePerJuror).to.equal(ONE_HUNDRED_PNK * 2n); - expect(roundInfo.totalFeesForJurors).to.equal(arbitrationCost); - expect(roundInfo.feeToken).to.equal(ethers.ZeroAddress); - - expect((await core.disputes(0)).period).to.equal(Period.evidence); - - await core.passPeriod(0); - expect((await core.disputes(0)).period).to.equal(Period.vote); - await disputeKit.connect(await ethers.getSigner(deployer)).castVote(0, [0, 1, 2], 0, 0, ""); - await core.passPeriod(0); - - await network.provider.send("evm_increaseTime", [100]); // Wait for the appeal period - await network.provider.send("evm_mine"); - - await core.passPeriod(0); - expect((await core.disputes(0)).period).to.equal(Period.execution); - expect(await core.execute(0, 0, 1000)).to.emit(core, "TokenAndETHShift"); - - const tx4 = await core.executeRuling(0, { gasLimit: 10000000, gasPrice: 5000000000 }); - console.log("Ruling executed on KlerosCore"); - expect(tx4).to.emit(core, "Ruling").withArgs(homeGateway.target, 0, 0); - expect(tx4).to.emit(arbitrable, "Ruling").withArgs(foreignGateway.target, 1, 0); // The ForeignGateway starts counting disputeID from 1. - }); - - const mineBlocks = async (n: number) => { - for (let index = 0; index < n; index++) { - await network.provider.send("evm_mine"); - } - }; -}); - -const logJurorBalance = async (result: { totalStaked: bigint; totalLocked: bigint }) => { - console.log("staked=%s, locked=%s", ethers.formatUnits(result.totalStaked), ethers.formatUnits(result.totalLocked)); -}; diff --git a/contracts/test/proxy/index.ts b/contracts/test/proxy/index.ts deleted file mode 100644 index a58886789..000000000 --- a/contracts/test/proxy/index.ts +++ /dev/null @@ -1,241 +0,0 @@ -import { expect } from "chai"; -import { ethers, deployments } from "hardhat"; -import { DeployResult } from "hardhat-deploy/types"; -import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; -import { deployUpgradable } from "../../deploy/utils/deployUpgradable"; -import { UpgradedByInheritanceV1, UpgradedByInheritanceV2 } from "../../typechain-types"; -import { UpgradedByRewrite as UpgradedByRewriteV1 } from "../../typechain-types/src/proxy/mock/by-rewrite/UpgradedByRewrite.sol"; -import { UpgradedByRewrite as UpgradedByRewriteV2 } from "../../typechain-types/src/proxy/mock/by-rewrite/UpgradedByRewriteV2.sol"; - -let deployer: HardhatEthersSigner; -let user1: HardhatEthersSigner; - -let proxyDeployment: DeployResult; -let proxy: any; -let implementation: any; - -describe("Upgradability", async () => { - describe("Upgradability Permissions", async () => { - beforeEach("Setup Contracts", async () => { - [deployer, user1] = await ethers.getSigners(); - - proxyDeployment = await deployments.deploy("UUPSUpgradeableMock", { - from: deployer.address, - proxy: { - proxyContract: "UUPSProxy", - execute: { - init: { - methodName: "initialize", - args: [deployer.address], - }, - onUpgrade: { - methodName: "counter", - args: [], - }, - }, - proxyArgs: ["{implementation}", "{data}"], - }, - log: true, - args: [], - }); - if (!proxyDeployment.implementation) { - throw new Error("No implementation address"); - } - proxy = await ethers.getContractAt("UUPSUpgradeableMock", proxyDeployment.address); - implementation = await ethers.getContractAt("UUPSUpgradeableMock", proxyDeployment.implementation); - }); - - describe("Initialization", async () => { - it("Owner cannot re-initialize the proxy", async () => { - await expect(proxy.connect(deployer).initialize(deployer.address)).to.be.revertedWith( - "Contract instance has already been initialized" - ); - }); - it("User cannot re-initialize the proxy", async () => { - await expect(proxy.connect(user1).initialize(user1.address)).to.be.revertedWith( - "Contract instance has already been initialized" - ); - }); - it("Implementation cannot be directly upgraded", async () => { - await expect(implementation.initialize(user1.address)).to.be.revertedWith( - "Contract instance has already been initialized" - ); - }); - }); - describe("Upgrade", async () => { - describe("Security", async () => { - it("Should revert if implementation has a broken UUID", async () => { - const UUPSUnsupportedProxiableUUIDFactory = await ethers.getContractFactory("UUPSUnsupportedProxiableUUID"); - const uupsUnsupportedUUID = await UUPSUnsupportedProxiableUUIDFactory.deploy(); - await expect( - proxy.connect(deployer).upgradeToAndCall(uupsUnsupportedUUID.target, "0x") - ).to.be.revertedWithCustomError(proxy, "UUPSUnsupportedProxiableUUID"); - }); - it("Should revert on upgrades to non UUPS-compliant implementation", async () => { - const NonUpgradeableMockFactory = await ethers.getContractFactory("NonUpgradeableMock"); - const nonUpgradeableMock = await NonUpgradeableMockFactory.deploy(); - await expect(proxy.upgradeToAndCall(nonUpgradeableMock.target, "0x")) - .to.be.revertedWithCustomError(proxy, "InvalidImplementation") - .withArgs(nonUpgradeableMock.target); - }); - it("Should revert if upgrade is performed directly through the implementation", async () => { - // In the implementation, the `owner` storage slot is not initialized so `owner === address(0)`, which fails _authorizeUpgrade() - const UUPSUpgradeableMockV2Factory = await ethers.getContractFactory("UUPSUpgradeableMockV2"); - const newImplementation = await UUPSUpgradeableMockV2Factory.connect(deployer).deploy(); - await expect( - implementation.connect(deployer).upgradeToAndCall(newImplementation.target, "0x") - ).to.be.revertedWith("No privilege to upgrade"); - }); - }); - - describe("Authentication", async () => { - it("Only the owner (deployer here) can perform upgrades", async () => { - // Unauthorized user try to upgrade the implementation - const UUPSUpgradeableMockV2Factory = await ethers.getContractFactory("UUPSUpgradeableMockV2"); - let upgradable = await UUPSUpgradeableMockV2Factory.connect(user1).deploy(); - await expect(proxy.connect(user1).upgradeToAndCall(upgradable.target, "0x")).to.be.revertedWith( - "No privilege to upgrade" - ); - - // Owner updates the implementation - upgradable = await UUPSUpgradeableMockV2Factory.connect(deployer).deploy(); - await expect(proxy.connect(deployer).upgradeToAndCall(upgradable.target, "0x")) - .to.emit(proxy, "Upgraded") - .withArgs(upgradable.target); - }); - }); - }); - - describe("After Test", async () => { - // Why? - it("Reset implementation to deployment's implementation address", async () => { - await proxy.upgradeToAndCall(proxyDeployment.implementation, "0x"); - }); - }); - }); - - describe("State Initialization (new implementation as a rewrite of the contract code)", async () => { - before("Setup Contracts", async () => { - [deployer] = await ethers.getSigners(); - - proxyDeployment = await deployUpgradable(deployments, "UpgradedByRewrite", { - contract: "src/proxy/mock/by-rewrite/UpgradedByRewrite.sol:UpgradedByRewrite", - from: deployer.address, - args: [deployer.address], - log: true, - }); - if (!proxyDeployment.implementation) { - throw new Error("No implementation address"); - } - }); - - it("Initializes v1", async () => { - proxy = await ethers.getContract("UpgradedByRewrite"); - - implementation = await ethers.getContract("UpgradedByRewrite_Implementation"); - - expect(await proxy.owner()).to.equal(deployer.address); - - expect(await proxy.counter()).to.equal(1); - await proxy.increment(); - expect(await proxy.counter()).to.equal(2); - - expect(await proxy.version()).to.equal("V1"); - - // Implementation should not store any state - expect(await implementation.counter()).to.equal(0); - }); - - it("Upgrades to v2 and initializes", async () => { - proxyDeployment = await deployUpgradable(deployments, "UpgradedByRewrite", { - contract: "src/proxy/mock/by-rewrite/UpgradedByRewriteV2.sol:UpgradedByRewrite", - from: deployer.address, - args: ["Future of France"], - log: true, - }); - if (!proxyDeployment.implementation) { - throw new Error("No implementation address"); - } - proxy = await ethers.getContract("UpgradedByRewrite"); - expect(await proxy.owner()).to.equal(deployer.address); - - expect(await proxy.counter()).to.equal(3); - await proxy.increment(); - expect(await proxy.counter()).to.equal(4); - - expect(await proxy.version()).to.equal("V2"); - - expect(await proxy.newVariable()).to.equal("Future of France"); - }); - }); - - describe("State Initialization (new implementation as a derived contract)", async () => { - before("Setup Contracts", async () => { - [deployer] = await ethers.getSigners(); - - proxyDeployment = await deployUpgradable(deployments, "UpgradedByInheritanceV1", { - from: deployer.address, - args: [deployer.address], - log: true, - }); - if (!proxyDeployment.implementation) { - throw new Error("No implementation address"); - } - }); - - it("Initializes v1", async () => { - proxy = await ethers.getContract("UpgradedByInheritanceV1"); - - implementation = await ethers.getContract("UpgradedByInheritanceV1_Implementation"); - - expect(await proxy.owner()).to.equal(deployer.address); - - expect(await proxy.counter()).to.equal(1); - await proxy.increment(); - expect(await proxy.counter()).to.equal(2); - - expect(await proxy.version()).to.equal("V1"); - - // Implementation should not store any state - expect(await implementation.counter()).to.equal(0); - }); - - it("Upgrades to v2 and initializes", async () => { - proxyDeployment = await deployUpgradable(deployments, "UpgradedByInheritanceV1", { - newImplementation: "UpgradedByInheritanceV2", - initializer: "initializeV2", - from: deployer.address, - args: ["Future of France"], - log: true, - }); - - proxy = await ethers.getContract("UpgradedByInheritanceV1"); - - expect(await proxy.owner()).to.equal(deployer.address); - - expect(await proxy.counter()).to.equal(3); - await proxy.increment(); - expect(await proxy.counter()).to.equal(4); - - expect(await proxy.newVariable()).to.equal("Future of France"); - - expect(await proxy.version()).to.equal("V2"); - }); - - it("Cannot upgrade to v3 which has an invalid initializer", async () => { - await expect( - deployUpgradable(deployments, "UpgradedByInheritanceV1", { - newImplementation: "UpgradedByInheritanceV3Bad", - initializer: "initializeV3", - from: deployer.address, - args: [], - log: true, - }) - ).to.be.revertedWithCustomError(proxy, "FailedDelegateCall"); - }); - }); - - after("Reset", async () => { - await deployments.run(["NonExistentTag"], { resetMemory: true, deletePreviousDeployments: true }); - }); -}); diff --git a/contracts/test/rng/index.ts b/contracts/test/rng/index.ts deleted file mode 100644 index f61ec9b95..000000000 --- a/contracts/test/rng/index.ts +++ /dev/null @@ -1,212 +0,0 @@ -import { expect } from "chai"; -import { deployments, ethers, getNamedAccounts, network } from "hardhat"; -import { - IncrementalNG, - BlockHashRNG, - ChainlinkRNG, - ChainlinkVRFCoordinatorV2Mock, - RandomizerRNG, - RandomizerMock, -} from "../../typechain-types"; - -const initialNg = 424242; -const abiCoder = ethers.AbiCoder.defaultAbiCoder(); -let deployer: string; - -describe("IncrementalNG", async () => { - let rng: IncrementalNG; - - beforeEach("Setup", async () => { - const rngFactory = await ethers.getContractFactory("IncrementalNG"); - rng = (await rngFactory.deploy(initialNg)) as IncrementalNG; - }); - - it("Should return a number incrementing each time", async () => { - expect(await rng.receiveRandomness.staticCall()).to.equal(initialNg); - await rng.receiveRandomness().then((tx) => tx.wait()); - expect(await rng.receiveRandomness.staticCall()).to.equal(initialNg + 1); - await rng.receiveRandomness().then((tx) => tx.wait()); - expect(await rng.receiveRandomness.staticCall()).to.equal(initialNg + 2); - await rng.receiveRandomness().then((tx) => tx.wait()); - expect(await rng.receiveRandomness.staticCall()).to.equal(initialNg + 3); - }); -}); - -describe("BlockHashRNG", async () => { - let rng: BlockHashRNG; - - beforeEach("Setup", async () => { - const [deployer] = await ethers.getSigners(); - await deployments.delete("BlockHashRNG"); - await deployments.deploy("BlockHashRNG", { - from: deployer.address, - args: [deployer.address, deployer.address, 10], // owner, consumer, lookaheadTime (seconds) - }); - rng = await ethers.getContract("BlockHashRNG"); - }); - - it("Should return a non-zero number after requesting and waiting", async () => { - // First request randomness - await rng.requestRandomness(); - - // Check that it's not ready yet - expect(await rng.isRandomnessReady()).to.be.false; - - // Advance time by 10 seconds (the lookahead time) - await network.provider.send("evm_increaseTime", [10]); - await network.provider.send("evm_mine"); - - // Now it should be ready - expect(await rng.isRandomnessReady()).to.be.true; - - // Get the random number - const randomNumber = await rng.receiveRandomness.staticCall(); - expect(randomNumber).to.not.equal(0); - }); - - it("Should return 0 if randomness not requested", async () => { - const randomNumber = await rng.receiveRandomness.staticCall(); - expect(randomNumber).to.equal(0); - }); - - it("Should return 0 if not enough time has passed", async () => { - await rng.requestRandomness(); - - // Don't advance time enough - await network.provider.send("evm_increaseTime", [5]); // Only 5 seconds - await network.provider.send("evm_mine"); - - const randomNumber = await rng.receiveRandomness.staticCall(); - expect(randomNumber).to.equal(0); - }); -}); - -describe("ChainlinkRNG", async () => { - let rng: ChainlinkRNG; - let vrfCoordinator: ChainlinkVRFCoordinatorV2Mock; - - beforeEach("Setup", async () => { - ({ deployer } = await getNamedAccounts()); - - await deployments.fixture(["ChainlinkRNG"], { - fallbackToGlobal: true, - keepExistingDeployments: false, - }); - rng = await ethers.getContract("ChainlinkRNG"); - vrfCoordinator = await ethers.getContract("ChainlinkVRFCoordinator"); - - await rng.changeConsumer(deployer); - }); - - it("Should return a non-zero random number", async () => { - const requestId = 1; - const expectedRn = BigInt(ethers.keccak256(abiCoder.encode(["uint256", "uint256"], [requestId, 0]))); - - let tx = await rng.requestRandomness(); - await expect(tx).to.emit(rng, "RequestSent").withArgs(requestId); - - tx = await vrfCoordinator.fulfillRandomWords(requestId, rng.target, []); - await expect(tx).to.emit(rng, "RequestFulfilled").withArgs(requestId, expectedRn); - - const rn = await rng.receiveRandomness(); - expect(rn).to.equal(expectedRn); - await tx.wait(); - }); - - it("Should return only the last random number when multiple requests are made", async () => { - // First request - let tx = await rng.requestRandomness(); - const requestId1 = 1; - await expect(tx).to.emit(rng, "RequestSent").withArgs(requestId1); - - // Second request - tx = await rng.requestRandomness(); - const requestId2 = 2; - await expect(tx).to.emit(rng, "RequestSent").withArgs(requestId2); - - // Generate expected random numbers - const expectedRn1 = BigInt(ethers.keccak256(abiCoder.encode(["uint256", "uint256"], [requestId1, 0]))); - const expectedRn2 = BigInt(ethers.keccak256(abiCoder.encode(["uint256", "uint256"], [requestId2, 0]))); - expect(expectedRn1).to.not.equal(expectedRn2, "Random numbers should be different"); - - // Fulfill first request - tx = await vrfCoordinator.fulfillRandomWords(requestId1, rng.target, []); - await expect(tx).to.emit(rng, "RequestFulfilled").withArgs(requestId1, expectedRn1); - - // Fulfill second request - tx = await vrfCoordinator.fulfillRandomWords(requestId2, rng.target, []); - await expect(tx).to.emit(rng, "RequestFulfilled").withArgs(requestId2, expectedRn2); - - // Should return only the last random number - const rn = await rng.receiveRandomness(); - expect(rn).to.equal(expectedRn2); - await tx.wait(); - }); -}); - -describe("RandomizerRNG", async () => { - let rng: RandomizerRNG; - let randomizer: RandomizerMock; - - beforeEach("Setup", async () => { - ({ deployer } = await getNamedAccounts()); - - await deployments.fixture(["RandomizerRNG"], { - fallbackToGlobal: true, - keepExistingDeployments: false, - }); - rng = await ethers.getContract("RandomizerRNG"); - randomizer = await ethers.getContract("RandomizerOracle"); - - await rng.changeConsumer(deployer); - }); - - it("Should return a non-zero random number", async () => { - const randomBytes = ethers.randomBytes(32); - const expectedRn = BigInt(ethers.hexlify(randomBytes)); - const requestId = 1; - - let tx = await rng.requestRandomness(); - await expect(tx).to.emit(rng, "RequestSent").withArgs(requestId); - - tx = await randomizer.relay(rng.target, requestId, randomBytes); - await expect(tx).to.emit(rng, "RequestFulfilled").withArgs(requestId, expectedRn); - - const rn = await rng.receiveRandomness(); - expect(rn).to.equal(expectedRn); - await tx.wait(); - }); - - it("Should return only the last random number when multiple requests are made", async () => { - // First request - let tx = await rng.requestRandomness(); - const requestId1 = 1; - await expect(tx).to.emit(rng, "RequestSent").withArgs(requestId1); - - // Second request - tx = await rng.requestRandomness(); - const requestId2 = 2; - await expect(tx).to.emit(rng, "RequestSent").withArgs(requestId2); - - // Generate random bytes and expected numbers for both requests - const randomBytes1 = ethers.randomBytes(32); - const randomBytes2 = ethers.randomBytes(32); - const expectedRn1 = BigInt(ethers.hexlify(randomBytes1)); - const expectedRn2 = BigInt(ethers.hexlify(randomBytes2)); - - expect(expectedRn1).to.not.equal(expectedRn2, "Random numbers should be different"); - - // Fulfill first request - tx = await randomizer.relay(rng.target, requestId1, randomBytes1); - await expect(tx).to.emit(rng, "RequestFulfilled").withArgs(requestId1, expectedRn1); - - // Fulfill second request - tx = await randomizer.relay(rng.target, requestId2, randomBytes2); - await expect(tx).to.emit(rng, "RequestFulfilled").withArgs(requestId2, expectedRn2); - - // Should return only the last random number - const rn = await rng.receiveRandomness(); - expect(rn).to.equal(expectedRn2); - await tx.wait(); - }); -}); diff --git a/contracts/test/sortition/index.ts b/contracts/test/sortition/index.ts deleted file mode 100644 index e33d1a0d5..000000000 --- a/contracts/test/sortition/index.ts +++ /dev/null @@ -1,698 +0,0 @@ -import { expect } from "chai"; -import { ethers } from "hardhat"; -import { SortitionTreesMock } from "../../typechain-types"; - -describe("SortitionTrees", function () { - let sortitionTree: SortitionTreesMock; - let accounts: any[]; - - beforeEach("Setup", async () => { - const factory = await ethers.getContractFactory("SortitionTreesMock"); - sortitionTree = (await factory.deploy()) as SortitionTreesMock; - accounts = await ethers.getSigners(); - }); - - // Helper function to create a test juror address - const getTestAddress = (index: number): string => accounts[index % accounts.length].address; - - describe("Stake Path ID Utilities", function () { - it("Should convert correctly between stakePathID and account+courtID", async function () { - // Test various combinations of addresses and court IDs - const testCases = [ - { - address: "0x1234567890123456789012345678901234567890", - courtID: 0, - }, - { - address: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - courtID: 0xffffffffffff, // max uint96 - }, - { - address: "0x0000000000000000000000000000000000000001", - courtID: 1, - }, - { - address: "0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF", - courtID: 123456789, - }, - ]; - - for (const testCase of testCases) { - // Test packing - const stakePathID = await sortitionTree.testToStakePathID(testCase.address, testCase.courtID); - - // Test unpacking - const [unpackedAddress, unpackedCourtID] = await sortitionTree.testToAccountAndCourtID(stakePathID); - - // Verify round-trip equivalence - expect(unpackedAddress.toLowerCase()).to.equal(testCase.address.toLowerCase()); - expect(unpackedCourtID).to.equal(testCase.courtID); - - // Verify the packed format is as expected: [20 bytes address][12 bytes courtID] - const expectedPackedValue = ethers.solidityPacked(["address", "uint96"], [testCase.address, testCase.courtID]); - expect(stakePathID).to.equal(expectedPackedValue); - } - }); - - it("Should handle TreeKey conversion correctly", async function () { - const courtIDs = [ - 0, - 1, - 100, - 0xffffffffffff, // max uint96 - ]; - - for (const courtID of courtIDs) { - const treeKey = await sortitionTree.testToTreeKey(courtID); - - // TreeKey should be the courtID padded to 32 bytes - const expectedTreeKey = ethers.zeroPadValue(ethers.toBeHex(courtID), 32); - expect(treeKey).to.equal(expectedTreeKey); - - // Court ID 0 will result in zero key, others should not - if (courtID === 0) { - expect(treeKey).to.equal("0x0000000000000000000000000000000000000000000000000000000000000000"); - } else { - expect(treeKey).to.not.equal("0x0000000000000000000000000000000000000000000000000000000000000000"); - } - } - }); - }); - - describe("Tree Creation & Validation", function () { - it("Should create trees with valid K values", async function () { - const testCases = [ - { courtID: 0, k: 2 }, - { courtID: 1, k: 5 }, - { courtID: 100, k: 10 }, - { courtID: 999, k: 100 }, - ]; - - for (const testCase of testCases) { - await sortitionTree.createTree(testCase.courtID, testCase.k); - - // Verify tree was created - expect(await sortitionTree.courtExists(testCase.courtID)).to.be.true; - expect(await sortitionTree.getTreeK(testCase.courtID)).to.equal(testCase.k); - - // Verify initial state - const nodes = await sortitionTree.getTreeNodes(testCase.courtID); - expect(nodes.length).to.equal(1); - expect(nodes[0]).to.equal(0); // Root starts at 0 - - const stack = await sortitionTree.getTreeStack(testCase.courtID); - expect(stack.length).to.equal(0); // Empty stack initially - } - }); - - it("Should reject invalid K values", async function () { - // K must be greater than 1 - await expect(sortitionTree.createTree(0, 0)).to.be.reverted; - await expect(sortitionTree.createTree(1, 1)).to.be.reverted; - }); - - it("Should reject creating duplicate trees", async function () { - await sortitionTree.createTree(0, 2); - await expect(sortitionTree.createTree(0, 3)).to.be.reverted; - }); - - it("Should create multiple independent trees", async function () { - await sortitionTree.createTree(0, 2); - await sortitionTree.createTree(1, 3); - await sortitionTree.createTree(2, 5); - - expect(await sortitionTree.getTreeK(0)).to.equal(2); - expect(await sortitionTree.getTreeK(1)).to.equal(3); - expect(await sortitionTree.getTreeK(2)).to.equal(5); - }); - }); - - describe("Single Court Stake Management", function () { - beforeEach(async function () { - // Create a test tree with K=2 for court 0 - await sortitionTree.createTree(0, 2); - }); - - describe("Adding New Stakes", function () { - it("Should add first juror to empty tree", async function () { - const juror = getTestAddress(0); - const stake = 100; - - await sortitionTree.set(0, juror, stake); - - // Verify stake was set - expect(await sortitionTree.stakeOf(0, juror)).to.equal(stake); - expect(await sortitionTree.getRootSum(0)).to.equal(stake); - - // Verify tree structure - const nodes = await sortitionTree.getTreeNodes(0); - expect(nodes[0]).to.equal(stake); // Root should equal juror stake - expect(nodes[1]).to.equal(stake); // First leaf - }); - - it("Should add multiple jurors sequentially", async function () { - const stakes = [100, 200, 300]; - - for (let i = 0; i < stakes.length; i++) { - const juror = getTestAddress(i); - await sortitionTree.set(0, juror, stakes[i]); - expect(await sortitionTree.stakeOf(0, juror)).to.equal(stakes[i]); - } - - // Verify total stake - const expectedTotal = stakes.reduce((sum, stake) => sum + stake, 0); - expect(await sortitionTree.getRootSum(0)).to.equal(expectedTotal); - }); - - it("Should handle tree restructuring when K threshold is reached", async function () { - // Add enough jurors to trigger tree restructuring - const stakes = [100, 200, 300, 400]; // More than K=2 - - for (let i = 0; i < stakes.length; i++) { - const juror = getTestAddress(i); - await sortitionTree.set(0, juror, stakes[i]); - } - - const nodes = await sortitionTree.getTreeNodes(0); - expect(nodes.length).to.be.greaterThan(4); // Should have expanded - - const expectedTotal = stakes.reduce((sum, stake) => sum + stake, 0); - expect(await sortitionTree.getRootSum(0)).to.equal(expectedTotal); - }); - }); - - describe("Updating Existing Stakes", function () { - beforeEach(async function () { - // Add initial jurors - await sortitionTree.set(0, getTestAddress(0), 100); - await sortitionTree.set(0, getTestAddress(1), 200); - }); - - it("Should increase stake values correctly", async function () { - const juror = getTestAddress(0); - const oldStake = await sortitionTree.stakeOf(0, juror); - const newStake = 250; - - await sortitionTree.set(0, juror, newStake); - - expect(await sortitionTree.stakeOf(0, juror)).to.equal(newStake); - - // Root should reflect the change - const rootSum = await sortitionTree.getRootSum(0); - expect(rootSum).to.equal(200 + newStake); - }); - - it("Should decrease stake values correctly", async function () { - const juror = getTestAddress(0); - const newStake = 50; - - await sortitionTree.set(0, juror, newStake); - - expect(await sortitionTree.stakeOf(0, juror)).to.equal(newStake); - expect(await sortitionTree.getRootSum(0)).to.equal(200 + newStake); - }); - - it("Should be no-op when setting same value", async function () { - const juror = getTestAddress(0); - const currentStake = await sortitionTree.stakeOf(0, juror); - const initialRoot = await sortitionTree.getRootSum(0); - - await sortitionTree.set(0, juror, currentStake); - - expect(await sortitionTree.stakeOf(0, juror)).to.equal(currentStake); - expect(await sortitionTree.getRootSum(0)).to.equal(initialRoot); - }); - }); - - describe("Removing Stakes", function () { - beforeEach(async function () { - // Add initial jurors - await sortitionTree.set(0, getTestAddress(0), 100); - await sortitionTree.set(0, getTestAddress(1), 200); - await sortitionTree.set(0, getTestAddress(2), 300); - }); - - it("Should remove juror by setting stake to 0", async function () { - const juror = getTestAddress(1); - const initialRoot = await sortitionTree.getRootSum(0); - - await sortitionTree.set(0, juror, 0); - - expect(await sortitionTree.stakeOf(0, juror)).to.equal(0); - expect(await sortitionTree.getRootSum(0)).to.equal(initialRoot - 200n); - expect(await sortitionTree.getNodeIndex(0, juror)).to.equal(0); // Should be cleared - }); - - it("Should manage stack for removed positions", async function () { - const juror = getTestAddress(1); - const initialStackLength = (await sortitionTree.getTreeStack(0)).length; - - await sortitionTree.set(0, juror, 0); - - const newStackLength = (await sortitionTree.getTreeStack(0)).length; - expect(newStackLength).to.be.greaterThan(initialStackLength); - }); - - it("Should reuse vacant positions from stack", async function () { - const juror1 = getTestAddress(1); - const juror4 = getTestAddress(4); - - // Remove a juror - await sortitionTree.set(0, juror1, 0); - const stackAfterRemoval = await sortitionTree.getTreeStack(0); - - // Add a new juror (should reuse vacant position) - await sortitionTree.set(0, juror4, 150); - const stackAfterAdd = await sortitionTree.getTreeStack(0); - - expect(stackAfterAdd.length).to.equal(stackAfterRemoval.length - 1); - expect(await sortitionTree.stakeOf(0, juror4)).to.equal(150); - }); - }); - }); - - describe("Drawing Algorithm", function () { - beforeEach(async function () { - await sortitionTree.createTree(0, 2); - }); - - it("Should return zero address for empty tree", async function () { - const [drawnAddress, courtID] = await sortitionTree.draw(0, 1, 1, 12345); - expect(drawnAddress).to.equal(ethers.ZeroAddress); - expect(courtID).to.equal(0); - }); - - it("Should draw single juror from single-juror tree", async function () { - const juror = getTestAddress(0); - await sortitionTree.set(0, juror, 100); - - // Multiple draws should always return the same juror - for (let i = 0; i < 5; i++) { - const [drawnAddress, courtID] = await sortitionTree.draw(0, 1, i, 12345 + i); - expect(drawnAddress.toLowerCase()).to.equal(juror.toLowerCase()); - expect(courtID).to.equal(0); - } - }); - - it("Should draw deterministically with same inputs", async function () { - // Add multiple jurors - await sortitionTree.set(0, getTestAddress(0), 100); - await sortitionTree.set(0, getTestAddress(1), 200); - await sortitionTree.set(0, getTestAddress(2), 300); - - const disputeID = 1; - const nonce = 2; - const randomNumber = 12345; - - // Multiple calls with same parameters should return same result - const [address1] = await sortitionTree.draw(0, disputeID, nonce, randomNumber); - const [address2] = await sortitionTree.draw(0, disputeID, nonce, randomNumber); - const [address3] = await sortitionTree.draw(0, disputeID, nonce, randomNumber); - - expect(address1).to.equal(address2); - expect(address2).to.equal(address3); - }); - - it("Should respect weighted probability distribution", async function () { - // Add jurors with very different stakes to test weighting - await sortitionTree.set(0, getTestAddress(0), 1); // Very low stake - await sortitionTree.set(0, getTestAddress(1), 1000); // Very high stake - - let draws = { [getTestAddress(0).toLowerCase()]: 0, [getTestAddress(1).toLowerCase()]: 0 }; - - // Perform many draws with different random numbers - const numDraws = 100; - for (let i = 0; i < numDraws; i++) { - const [drawnAddress] = await sortitionTree.draw(0, 1, 1, i); - draws[drawnAddress.toLowerCase()]++; - } - - // Juror with higher stake should be drawn more frequently - // With stakes of 1:1000, we expect roughly 0.1% vs 99.9% distribution - expect(draws[getTestAddress(1).toLowerCase()]).to.be.greaterThan(draws[getTestAddress(0).toLowerCase()]); - expect(draws[getTestAddress(1).toLowerCase()]).to.be.greaterThan(numDraws * 0.8); // At least 80% for high stake - }); - - it("Should handle edge case random numbers", async function () { - await sortitionTree.set(0, getTestAddress(0), 100); - await sortitionTree.set(0, getTestAddress(1), 200); - - // Test with boundary random numbers - const testNumbers = [0, 1, ethers.MaxUint256]; - - for (const randomNumber of testNumbers) { - const [drawnAddress] = await sortitionTree.draw(0, 1, 1, randomNumber); - expect(drawnAddress).to.not.equal(ethers.ZeroAddress); - - // Should be one of our jurors - const isValidJuror = - drawnAddress.toLowerCase() === getTestAddress(0).toLowerCase() || - drawnAddress.toLowerCase() === getTestAddress(1).toLowerCase(); - expect(isValidJuror).to.be.true; - } - }); - }); - - describe("Multi-Court Scenarios", function () { - beforeEach(async function () { - // Create multiple courts with different K values - await sortitionTree.createTree(0, 2); // General Court - await sortitionTree.createTree(1, 3); // Tech Court - await sortitionTree.createTree(2, 2); // Legal Court - }); - - describe("Independent Court Operations", function () { - it("Should handle same juror staking in multiple courts", async function () { - const juror = getTestAddress(0); - const stakes = [100, 250, 75]; // Different stakes in different courts - - // Set stakes in different courts - for (let courtID = 0; courtID < 3; courtID++) { - await sortitionTree.set(courtID, juror, stakes[courtID]); - } - - // Verify stakes are independent - for (let courtID = 0; courtID < 3; courtID++) { - expect(await sortitionTree.stakeOf(courtID, juror)).to.equal(stakes[courtID]); - expect(await sortitionTree.getRootSum(courtID)).to.equal(stakes[courtID]); - } - }); - - it("Should maintain court isolation", async function () { - const juror1 = getTestAddress(0); - const juror2 = getTestAddress(1); - - // Add different jurors to different courts - await sortitionTree.set(0, juror1, 100); - await sortitionTree.set(1, juror2, 200); - - // Court 0 should only have juror1 - expect(await sortitionTree.stakeOf(0, juror1)).to.equal(100); - expect(await sortitionTree.stakeOf(0, juror2)).to.equal(0); - - // Court 1 should only have juror2 - expect(await sortitionTree.stakeOf(1, juror1)).to.equal(0); - expect(await sortitionTree.stakeOf(1, juror2)).to.equal(200); - }); - - it("Should handle different tree structures independently", async function () { - const jurors = [getTestAddress(0), getTestAddress(1), getTestAddress(2), getTestAddress(3)]; - - // Add different numbers of jurors to each court - await sortitionTree.set(0, jurors[0], 100); // 1 juror in court 0 - - await sortitionTree.set(1, jurors[0], 150); // 2 jurors in court 1 - await sortitionTree.set(1, jurors[1], 250); - - await sortitionTree.set(2, jurors[0], 75); // 3 jurors in court 2 - await sortitionTree.set(2, jurors[1], 125); - await sortitionTree.set(2, jurors[2], 175); - - // Verify independent tree structures - expect(await sortitionTree.getRootSum(0)).to.equal(100); - expect(await sortitionTree.getRootSum(1)).to.equal(400); - expect(await sortitionTree.getRootSum(2)).to.equal(375); - - // Verify each court has correct tree structure - const nodes0 = await sortitionTree.getTreeNodes(0); - const nodes1 = await sortitionTree.getTreeNodes(1); - const nodes2 = await sortitionTree.getTreeNodes(2); - - expect(nodes0.length).to.be.lessThan(nodes2.length); // Fewer jurors = smaller tree - expect(nodes1.length).to.be.greaterThan(nodes0.length); // More jurors = larger tree - }); - }); - - describe("Cross-Court Stake Updates", function () { - it("Should handle simultaneous updates across multiple courts", async function () { - const juror = getTestAddress(0); - const courtIDs = [0, 1, 2]; - const initialStakes = [100, 200, 300]; - const updatedStakes = [150, 250, 350]; - - // Set initial stakes - for (let i = 0; i < courtIDs.length; i++) { - await sortitionTree.set(courtIDs[i], juror, initialStakes[i]); - } - - // Update all stakes - for (let i = 0; i < courtIDs.length; i++) { - await sortitionTree.set(courtIDs[i], juror, updatedStakes[i]); - } - - // Verify all updates took effect - for (let i = 0; i < courtIDs.length; i++) { - expect(await sortitionTree.stakeOf(courtIDs[i], juror)).to.equal(updatedStakes[i]); - } - }); - - it("Should handle partial removals across courts", async function () { - const juror = getTestAddress(0); - - // Add juror to all courts - await sortitionTree.set(0, juror, 100); - await sortitionTree.set(1, juror, 200); - await sortitionTree.set(2, juror, 300); - - // Remove from middle court only - await sortitionTree.set(1, juror, 0); - - // Verify partial removal - expect(await sortitionTree.stakeOf(0, juror)).to.equal(100); - expect(await sortitionTree.stakeOf(1, juror)).to.equal(0); - expect(await sortitionTree.stakeOf(2, juror)).to.equal(300); - }); - - it("Should use batch operations correctly", async function () { - const juror = getTestAddress(0); - const courtIDs = [0, 1, 2]; - const stake = 500; - - // Use batch operation to set stakes - await sortitionTree.setStakeInHierarchy(courtIDs, juror, stake); - - // Verify all stakes were set - const stakes = await sortitionTree.getStakesAcrossCourts(juror, courtIDs); - for (const retrievedStake of stakes) { - expect(retrievedStake).to.equal(stake); - } - }); - }); - - describe("Multi-Court Drawing", function () { - beforeEach(async function () { - // Setup jurors in different courts - await sortitionTree.set(0, getTestAddress(0), 100); // Court 0: 1 juror - await sortitionTree.set(0, getTestAddress(1), 200); - - await sortitionTree.set(1, getTestAddress(1), 300); // Court 1: 2 jurors - await sortitionTree.set(1, getTestAddress(2), 400); - - await sortitionTree.set(2, getTestAddress(0), 500); // Court 2: 1 juror only - }); - - it("Should draw correctly from different courts", async function () { - // Draw from each court - const [addr0] = await sortitionTree.draw(0, 1, 1, 12345); - const [addr1] = await sortitionTree.draw(1, 1, 1, 12345); - const [addr2] = await sortitionTree.draw(2, 1, 1, 12345); - - // Should get valid addresses from each court - expect(addr0).to.not.equal(ethers.ZeroAddress); - expect(addr1).to.not.equal(ethers.ZeroAddress); - expect(addr2).to.not.equal(ethers.ZeroAddress); - - // Court 2 should always return getTestAddress(0) since it's the only juror - expect(addr2.toLowerCase()).to.equal(getTestAddress(0).toLowerCase()); - }); - - it("Should return correct court ID in draw results", async function () { - const [, courtID0] = await sortitionTree.draw(0, 1, 1, 12345); - const [, courtID1] = await sortitionTree.draw(1, 1, 1, 12345); - const [, courtID2] = await sortitionTree.draw(2, 1, 1, 12345); - - // The returned court IDs should match the stake path IDs - // Since we're using the same court for staking and drawing, they should match - expect([0, 1]).to.include(Number(courtID0)); - expect([1, 2]).to.include(Number(courtID1)); - expect(Number(courtID2)).to.equal(2); - }); - - it("Should maintain independent probability distributions", async function () { - // Test drawing many times from court 0 where juror 1 has 2x stake of juror 0 - let draws = { [getTestAddress(0).toLowerCase()]: 0, [getTestAddress(1).toLowerCase()]: 0 }; - - const numDraws = 50; - for (let i = 0; i < numDraws; i++) { - const [drawnAddress] = await sortitionTree.draw(0, 1, 1, i); - draws[drawnAddress.toLowerCase()]++; - } - - // Juror 1 (200 stake) should be drawn more than juror 0 (100 stake) - expect(draws[getTestAddress(1).toLowerCase()]).to.be.greaterThan(draws[getTestAddress(0).toLowerCase()]); - }); - }); - - describe("Complex Multi-Court Scenarios", function () { - it("Should handle realistic court hierarchy simulation", async function () { - // Simulate: General Court (0) ← Tech Court (1) ← Blockchain Court (2) - const courts = [0, 1, 2]; - const jurors = [getTestAddress(0), getTestAddress(1), getTestAddress(2), getTestAddress(3)]; - - // General lawyers (stake in General Court only) - await sortitionTree.set(0, jurors[0], 100); - await sortitionTree.set(0, jurors[1], 150); - - // Tech specialists (stake in both General and Tech) - await sortitionTree.set(0, jurors[2], 200); - await sortitionTree.set(1, jurors[2], 300); - - // Blockchain experts (stake in all three) - await sortitionTree.set(0, jurors[3], 250); - await sortitionTree.set(1, jurors[3], 350); - await sortitionTree.set(2, jurors[3], 450); - - // Verify hierarchy totals - expect(await sortitionTree.getRootSum(0)).to.equal(700); // All jurors - expect(await sortitionTree.getRootSum(1)).to.equal(650); // Tech specialists + experts - expect(await sortitionTree.getRootSum(2)).to.equal(450); // Blockchain experts only - - // Test drawing from most specialized court (should only get experts) - const [blockchainExpert] = await sortitionTree.draw(2, 1, 1, 12345); - expect(blockchainExpert.toLowerCase()).to.equal(jurors[3].toLowerCase()); - }); - - it("Should handle dynamic court operations", async function () { - const juror = getTestAddress(0); - - // Juror starts in general court - await sortitionTree.set(0, juror, 100); - expect(await sortitionTree.stakeOf(0, juror)).to.equal(100); - - // Juror specializes in tech court - await sortitionTree.set(1, juror, 200); - expect(await sortitionTree.stakeOf(0, juror)).to.equal(100); - expect(await sortitionTree.stakeOf(1, juror)).to.equal(200); - - // Juror reduces general court involvement but increases tech specialization - await sortitionTree.set(0, juror, 50); - await sortitionTree.set(1, juror, 400); - expect(await sortitionTree.stakeOf(0, juror)).to.equal(50); - expect(await sortitionTree.stakeOf(1, juror)).to.equal(400); - - // Juror completely leaves general court - await sortitionTree.set(0, juror, 0); - expect(await sortitionTree.stakeOf(0, juror)).to.equal(0); - expect(await sortitionTree.stakeOf(1, juror)).to.equal(400); - }); - - it("Should handle large multi-court operations efficiently", async function () { - const numCourts = 5; - const numJurors = 10; - - // Create additional courts - for (let courtID = 3; courtID < numCourts; courtID++) { - await sortitionTree.createTree(courtID, 2); - } - - // Add many jurors across many courts - for (let jurorIdx = 0; jurorIdx < numJurors; jurorIdx++) { - for (let courtID = 0; courtID < numCourts; courtID++) { - const stake = (jurorIdx + 1) * (courtID + 1) * 10; // Varied stakes - await sortitionTree.set(courtID, getTestAddress(jurorIdx), stake); - } - } - - // Verify all operations completed successfully - for (let courtID = 0; courtID < numCourts; courtID++) { - const rootSum = await sortitionTree.getRootSum(courtID); - expect(rootSum).to.be.greaterThan(0); - - // Should be able to draw from each court - const [drawnAddress] = await sortitionTree.draw(courtID, 1, 1, 12345 + courtID); - expect(drawnAddress).to.not.equal(ethers.ZeroAddress); - } - }); - }); - }); - - describe("Edge Cases & Error Conditions", function () { - it("Should handle operations on non-existent courts", async function () { - const juror = getTestAddress(0); - - // Operations on non-existent court should behave predictably - expect(await sortitionTree.courtExists(999)).to.be.false; - expect(await sortitionTree.stakeOf(999, juror)).to.equal(0); - - // Drawing from non-existent court should revert (no tree = no nodes array) - await expect(sortitionTree.draw(999, 1, 1, 12345)).to.be.reverted; - }); - - it("Should handle boundary values correctly", async function () { - await sortitionTree.createTree(0, 2); - const juror = getTestAddress(0); - - // Test with maximum stake value - const maxStake = ethers.MaxUint256; - - // This might fail due to gas limits, but should not revert due to overflow - // Note: In practice, stakes would be much smaller - try { - await sortitionTree.set(0, juror, maxStake); - expect(await sortitionTree.stakeOf(0, juror)).to.equal(maxStake); - } catch (error) { - // Expected to fail due to gas limits, not due to overflow - expect(error).to.match(/gas/i); - } - }); - - it("Should maintain tree invariants under stress", async function () { - await sortitionTree.createTree(0, 3); - - const operations = []; - const stakes = [100, 200, 300, 400, 500]; - const jurors = stakes.map((_, i) => getTestAddress(i)); - - // Perform many random operations - for (let i = 0; i < 20; i++) { - const juror = jurors[i % jurors.length]; - const stake = stakes[i % stakes.length]; - - await sortitionTree.set(0, juror, stake); - operations.push({ juror, stake }); - } - - // Verify tree integrity - let expectedTotal = 0; - const finalStakes = new Map(); - - // Calculate expected final state - for (const op of operations) { - const prevStake = finalStakes.get(op.juror) || 0; - expectedTotal = expectedTotal - prevStake + op.stake; - finalStakes.set(op.juror, op.stake); - } - - // Verify actual state matches expected - expect(await sortitionTree.getRootSum(0)).to.equal(expectedTotal); - - for (const [juror, expectedStake] of finalStakes) { - expect(await sortitionTree.stakeOf(0, juror)).to.equal(expectedStake); - } - }); - - it("Should handle rapid stake changes correctly", async function () { - await sortitionTree.createTree(0, 2); - const juror = getTestAddress(0); - - // Rapid stake changes - const stakeSequence = [100, 0, 200, 300, 0, 150, 0, 500]; - - for (const stake of stakeSequence) { - await sortitionTree.set(0, juror, stake); - expect(await sortitionTree.stakeOf(0, juror)).to.equal(stake); - expect(await sortitionTree.getRootSum(0)).to.equal(stake); - } - }); - }); -}); diff --git a/contracts/test/utils/getActualAddress.test.ts b/contracts/test/utils/getActualAddress.test.ts deleted file mode 100644 index c80569a07..000000000 --- a/contracts/test/utils/getActualAddress.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { expect } from "chai"; -import { getActualAddress } from "./getActualAddress"; - -describe("getActualAddress", () => { - it("should return the correct address for KlerosCore on arbitrumSepoliaDevnet", async () => { - const address = await getActualAddress("arbitrumSepoliaDevnet", "KlerosCore"); - expect(address).to.match(/^0x[a-fA-F0-9]{40}$/); - expect(address).to.not.equal("0x0000000000000000000000000000000000000000"); - }); - - it("should throw error for non-existent network", async () => { - await expect(getActualAddress("nonexistentNetwork", "KlerosCore")).to.be.rejectedWith( - "No deployment file found for KlerosCore on nonexistentNetwork" - ); - }); - - it("should throw error for non-existent contract", async () => { - await expect(getActualAddress("arbitrumSepoliaDevnet", "NonExistentContract")).to.be.rejectedWith( - "No deployment file found for NonExistentContract on arbitrumSepoliaDevnet" - ); - }); -}); diff --git a/contracts/test/utils/getActualAddress.ts b/contracts/test/utils/getActualAddress.ts deleted file mode 100644 index 4a5ce089f..000000000 --- a/contracts/test/utils/getActualAddress.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Get the deployed address of a contract from its deployment JSON file - * @param network The network name (e.g., "arbitrumSepoliaDevnet") - * @param contractName The contract name (e.g., "KlerosCore") - * @returns The deployed contract address - * @throws Error if the deployment file doesn't exist or has no address - */ -export async function getActualAddress(network: string, contractName: string): Promise { - try { - const deployment = await import(`../../deployments/${network}/${contractName}.json`, { - with: { type: "json" }, - }); - if (!deployment.default.address) { - throw new Error(`No address found in deployment file for ${contractName} on ${network}`); - } - return deployment.default.address; - } catch (error) { - if (error instanceof Error && error.message.includes("Cannot find module")) { - throw new Error(`No deployment file found for ${contractName} on ${network}`); - } - throw error; - } -} diff --git a/contracts/tsconfig-release.json b/contracts/tsconfig-release.json deleted file mode 100644 index a94f4d6f6..000000000 --- a/contracts/tsconfig-release.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "declaration": true - }, - "include": [ - "./typechain-types", - "./deployments" - ], - "exclude": [ - "./scripts/**/console*.ts" - ], - "files": [] -} diff --git a/contracts/tsconfig.json b/contracts/tsconfig.json deleted file mode 100644 index b601be124..000000000 --- a/contracts/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "@kleros/kleros-v2-tsconfig/base20.json", - "compilerOptions": { - "resolveJsonModule": true - }, - "include": [ - "./src", - "./scripts", - "./test", - "./typechain-types", - "./deploy", - "./deployments" - ], - "exclude": [ - "./scripts/**/console*.ts" - ], - "files": [ - "./hardhat.config.ts" - ] -} diff --git a/contracts/wagmi.config.devnet.ts b/contracts/wagmi.config.devnet.ts deleted file mode 100644 index 7c8009cc1..000000000 --- a/contracts/wagmi.config.devnet.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Config, defineConfig } from "@wagmi/cli"; -import IHomeGateway from "./artifacts/src/gateway/interfaces/IHomeGateway.sol/IHomeGateway.json" assert { type: "json" }; -import { getAbi, readArtifacts, merge } from "./scripts/wagmiHelpers"; - -const getConfig = async (): Promise => { - const arbitrumSepoliaContracts = await readArtifacts("arbitrumSepolia", "arbitrumSepoliaDevnet"); - arbitrumSepoliaContracts.forEach((c) => console.log("✔ Found arbitrumSepolia artifact: %s", c.name)); - let contracts = arbitrumSepoliaContracts; - - const chiadoContracts = await readArtifacts("gnosisChiado", "chiadoDevnet"); // renaming the Hardhat network improves this but breaks many other scripts - chiadoContracts.forEach((c) => console.log("✔ Found chiado artifact: %s", c.name)); - contracts = merge(contracts, chiadoContracts); - - const sepoliaContracts = await readArtifacts("sepolia", "sepoliaDevnet"); - sepoliaContracts.forEach((c) => console.log("✔ Found sepolia artifact: %s", c.name)); - contracts = merge(contracts, sepoliaContracts); - - return { - out: "deployments/devnet.viem.ts", - contracts: [ - ...contracts, - { - name: "IHomeGateway", - abi: getAbi(IHomeGateway), - }, - ], - }; -}; - -export default defineConfig(getConfig); diff --git a/contracts/wagmi.config.hardhat.ts b/contracts/wagmi.config.hardhat.ts deleted file mode 100644 index fafa2dd0a..000000000 --- a/contracts/wagmi.config.hardhat.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { defineConfig } from "@wagmi/cli"; -import { hardhat } from "@wagmi/cli/plugins"; - -// Useful for contracts which are not deployed yet -export default defineConfig({ - out: "deployments/hardhat.viem.ts", - plugins: [ - hardhat({ - project: ".", - namePrefix: "Hardhat", - exclude: ["Initializable.json", "UpgradedByRewrite.json"], // These artifacts crash the wagmi cli name generator - }), - ], -}); diff --git a/contracts/wagmi.config.mainnet.ts b/contracts/wagmi.config.mainnet.ts deleted file mode 100644 index aa321eba0..000000000 --- a/contracts/wagmi.config.mainnet.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Config, defineConfig } from "@wagmi/cli"; -import IHomeGateway from "./artifacts/src/gateway/interfaces/IHomeGateway.sol/IHomeGateway.json" assert { type: "json" }; -import { getAbi, readArtifacts, merge } from "./scripts/wagmiHelpers"; - -const getConfig = async (): Promise => { - const arbitrumContracts = await readArtifacts("arbitrum"); - arbitrumContracts.forEach((c) => console.log("✔ Found arbitrum artifact: %s", c.name)); - let contracts = arbitrumContracts; - - const gnosisContracts = await readArtifacts("gnosis", "gnosischain"); - gnosisContracts.forEach((c) => console.log("✔ Found gnosis artifact: %s", c.name)); - contracts = merge(contracts, gnosisContracts); - - const mainnetContracts = await readArtifacts("mainnet"); - mainnetContracts.forEach((c) => console.log("✔ Found mainnet artifact: %s", c.name)); - contracts = merge(contracts, mainnetContracts); - - return { - out: "deployments/mainnet.viem.ts", - contracts: [ - ...contracts, - { - name: "IHomeGateway", - abi: getAbi(IHomeGateway), - }, - ], - }; -}; - -export default defineConfig(getConfig); diff --git a/contracts/wagmi.config.testnet.ts b/contracts/wagmi.config.testnet.ts deleted file mode 100644 index 93a00cdd0..000000000 --- a/contracts/wagmi.config.testnet.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Config, defineConfig } from "@wagmi/cli"; -import IHomeGateway from "./artifacts/src/gateway/interfaces/IHomeGateway.sol/IHomeGateway.json" assert { type: "json" }; -import { getAbi, readArtifacts, merge } from "./scripts/wagmiHelpers"; - -const getConfig = async (): Promise => { - const arbitrumSepoliaContracts = await readArtifacts("arbitrumSepolia"); - arbitrumSepoliaContracts.forEach((c) => console.log("✔ Found arbitrumSepolia artifact: %s", c.name)); - let contracts = arbitrumSepoliaContracts; - - const chiadoContracts = await readArtifacts("gnosisChiado", "chiado"); // renaming the Hardhat network improves this but breaks many other scripts - chiadoContracts.forEach((c) => console.log("✔ Found chiado artifact: %s", c.name)); - contracts = merge(contracts, chiadoContracts); - - const sepoliaContracts = await readArtifacts("sepolia"); - sepoliaContracts.forEach((c) => console.log("✔ Found sepolia artifact: %s", c.name)); - contracts = merge(contracts, sepoliaContracts); - - return { - out: "deployments/testnet.viem.ts", - contracts: [ - ...contracts, - { - name: "IHomeGateway", - abi: getAbi(IHomeGateway), - }, - ], - }; -}; - -export default defineConfig(getConfig); diff --git a/cspell.json b/cspell.json deleted file mode 100644 index 0fa6dc52c..000000000 --- a/cspell.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/master/cspell.schema.json", - "version": "0.2", - "ignorePaths": [], - "dictionaryDefinitions": [], - "dictionaries": [ - "en_US", - "companies", - "softwareTerms" - ], - "words": [ - "Arbitrables", - "arbitrum", - "ARBMAINNET", - "ARBSEPOLIA", - "autorestart", - "CHAINID", - "Chainlink", - "codegen", - "commify", - "commitlint", - "consts", - "COOLDOWN", - "crowdfunder", - "datetime", - "devnet", - "Devnet", - "DISPUTOR", - "dockerhost", - "ethersproject", - "Ethfinex", - "gluegun", - "graphprotocol", - "hearbeat", - "IERC", - "Initializable", - "ipfs", - "IRNG", - "kleros", - "linguo", - "Numberish", - "Pinakion", - "Proxiable", - "Realitio", - "repartitions", - "SEPOLIA", - "solhint", - "typechain", - "uncommify", - "Unslashed", - "unstake", - "unstaked", - "Unstaking", - "Upgradability", - "UUPS", - "viem", - "wagmi" - ], - "ignoreWords": [], - "import": [] -} diff --git a/docs/kleros-logo-white.png b/docs/kleros-logo-white.png deleted file mode 100644 index 7f67ddecd51c30cbe335b5de74331b89f85efd64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26634 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 ^CZuKQNM;RXA&j(Qdm?cWo)t!E4yKM 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%0A<-F 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%0AQ2-^o5wh)ofbq_I<jHM>^#a4a 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 Js**4Y{6E>lUwQxl diff --git a/eslint-config/.eslintrc.js b/eslint-config/.eslintrc.js deleted file mode 100644 index ac46d0496..000000000 --- a/eslint-config/.eslintrc.js +++ /dev/null @@ -1,48 +0,0 @@ -module.exports = { - parser: "@typescript-eslint/parser", - parserOptions: { - ecmaVersion: 2020, - }, - env: { - browser: true, - es6: true, - node: true, - mocha: true, - es2020: true, - }, - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:prettier/recommended", - "plugin:import/recommended", - ], - plugins: ["@typescript-eslint", "prettier", "import"], - rules: { - "no-unused-vars": [ - "error", - { - varsIgnorePattern: "(^_+[0-9]*$)|([iI]gnored$)|(^ignored)", - argsIgnorePattern: "(^_+[0-9]*$)|([iI]gnored$)|(^ignored)", - }, - ], - "prettier/prettier": "error", - "import/no-unresolved": [ - "error", - { - commonjs: true, - }, - ], - "node/no-unsupported-features/es-syntax": [ - "error", - { - ignores: ["modules"], - }, - ], - "node/no-missing-import": [ - "error", - { - tryExtensions: [".js", ".ts", ".json", ".node"], - }, - ], - }, -}; diff --git a/eslint-config/package.json b/eslint-config/package.json deleted file mode 100644 index 7ce7052e5..000000000 --- a/eslint-config/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@kleros/kleros-v2-eslint-config", - "version": "0.0.0", - "private": true, - "main": ".eslintrc.js", - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "^8.15.0", - "@typescript-eslint/parser": "^8.15.0", - "@typescript-eslint/utils": "^8.15.0", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-promise": "^6.6.0", - "eslint-plugin-security": "^3.0.1", - "eslint-utils": "^3.0.0", - "prettier": "^3.3.3" - }, - "devDependencies": { - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "^9.15.0", - "globals": "^15.12.0", - "typescript": "^5.6.3" - }, - "peerDependencies": { - "eslint": "^8.0.0 || ^9.0.0" - } -} diff --git a/kleros-app/README.md b/kleros-app/README.md deleted file mode 100644 index 0e4c6818d..000000000 --- a/kleros-app/README.md +++ /dev/null @@ -1,115 +0,0 @@ -# Kleros App - -Library for Kleros DApps with reusable abstractions and components. - -# Usage - -```node -yarn install @kleros/kleros-app -``` - -## 1. Atlas Interaction - -- This library exports utilities to interact with Atlas (Kleros' backend) with minimal code. - -- AtlasProvider : Provides functions to interact with Atlas. - -> AtlasProvider needs to be wrapped with [<WagmiProvider/>](https://wagmi.sh/react/api/WagmiProvider) and [<QueryClientProvider/>](https://tanstack.com/query/latest/docs/framework/react/reference/QueryClientProvider#queryclientprovider) to work properly. - -#### Usage - -1. At the root of your app, setup AtlasProvider. - **uri** : Atlas backend uri - **product** : The product / Kleros DApp interacting with Atlas (CourtV2, Curate, etc.) - -```typescript -import { WagmiProvider } from 'wagmi' -import { config } from './config' -import { QueryClient, QueryClientProvider } from '@tanstack/react-query' -import { AtlasProvider, Products } from "@kleros/kleros-app"; -import { useConfig } from 'wagmi' - -const queryClient = new QueryClient() - -function App() { - const wagmiConfig = useConfig() - - return - <WagmiProvider config={config}> - <QueryClientProvider client={queryClient}> - <AtlasProvider config={{ uri: import.meta.env.REACT_APP_ATLAS_URI, product: Products.CourtV2, wagmiConfig: wagmiConfig }}> - ... - </AtlasProvider> - </QueryClientProvider> - </WagmiProvider> -} -``` - -2. Once Provider is set up, use the functions provided. - -```typescript -import React, { useCallback } from "react"; - -import { useAccount } from "wagmi"; -import { useAtlasProvider } from "@kleros/kleros-app"; -import { Button } from "@kleros/ui-components-library"; - - -interface IEnsureAuth { - children: React.ReactElement; - className?: string; -} - -const EnsureAuth: React.FC<IEnsureAuth> = ({ children, className }) => { - const { address } = useAccount(); - const { isVerified, isSigningIn, authoriseUser } = useAtlasProvider(); - - const handleClick = useCallback(() => { - // authorise a user - authoriseUser() - .then((res) => { console.log(res)}) - .catch((err) => { - console.log(err); - }); - }, [authoriseUser]); - - return isVerified ? ( - children - ) : ( - <Button - text="Sign In" - onClick={handleClick} - disabled={isSigningIn || !address} - isLoading={isSigningIn} - {...{ className }} - /> - ); -}; - -export default EnsureAuth; - -``` - -3. [IAtlasProvider](https://github.com/kleros/kleros-v2/blob/feat/kleros-app/kleros-app/src/lib/atlas/providers/AtlasProvider.tsx) - -```typescript -interface IAtlasProvider { - isVerified: boolean; - isSigningIn: boolean; - isAddingUser: boolean; - isFetchingUser: boolean; - isUpdatingUser: boolean; - isUploadingFile: boolean; - user: User | undefined; - userExists: boolean; - authoriseUser: () => Promise<void>; - addUser: (userSettings: AddUserData) => Promise<boolean>; - updateEmail: (userSettings: UpdateEmailData) => Promise<boolean>; - uploadFile: (file: File, role: Roles) => Promise<string | null>; - confirmEmail: (userSettings: ConfirmEmailData) => Promise< - ConfirmEmailResponse & { - isError: boolean; - } - >; -} -``` diff --git a/kleros-app/eslint.config.mjs b/kleros-app/eslint.config.mjs deleted file mode 100644 index d00b2c977..000000000 --- a/kleros-app/eslint.config.mjs +++ /dev/null @@ -1,120 +0,0 @@ -import { fixupConfigRules, fixupPluginRules } from "@eslint/compat"; -import react from "eslint-plugin-react"; -import reactHooks from "eslint-plugin-react-hooks"; -import security from "eslint-plugin-security"; -import _import from "eslint-plugin-import"; -import globals from "globals"; -import tsParser from "@typescript-eslint/parser"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import js from "@eslint/js"; -import { FlatCompat } from "@eslint/eslintrc"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all, -}); - -export default [ - { - ignores: ["src/assets"], - }, - ...fixupConfigRules( - compat.extends( - "plugin:react/recommended", - "plugin:react-hooks/recommended", - "plugin:import/recommended", - "plugin:import/react", - "plugin:@typescript-eslint/recommended", - "plugin:prettier/recommended", - "prettier" - ) - ), - { - plugins: { - react: fixupPluginRules(react), - "react-hooks": fixupPluginRules(reactHooks), - security: fixupPluginRules(security), - import: fixupPluginRules(_import), - }, - - languageOptions: { - globals: { - ...globals.browser, - ...globals.node, - Atomics: "readonly", - SharedArrayBuffer: "readonly", - }, - - parser: tsParser, - ecmaVersion: 2020, - sourceType: "module", - - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - }, - }, - - settings: { - react: { - version: "^18.3.1", - }, - - "import/resolver": { - typescript: { - project: "./tsconfig.json", - }, - }, - }, - - rules: { - "max-len": [ - "warn", - { - code: 120, - }, - ], - - "react/prop-types": 0, - "no-unused-vars": "off", - - "@typescript-eslint/no-unused-vars": [ - "error", - { - varsIgnorePattern: "(^_+[0-9]*$)|([iI]gnored$)|(^ignored)", - argsIgnorePattern: "(^_+[0-9]*$)|([iI]gnored$)|(^ignored)", - }, - ], - - "no-console": [ - "error", - { - allow: ["warn", "error", "info", "debug"], - }, - ], - - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-explicit-any": "off", - "security/detect-object-injection": "off", - "security/detect-non-literal-fs-filename": "off", - - "import/extensions": [ - "error", - "ignorePackages", - { - js: "never", - jsx: "never", - ts: "never", - tsx: "never", - }, - ], - - "import/no-unresolved": "off", - }, - }, -]; diff --git a/kleros-app/package.json b/kleros-app/package.json deleted file mode 100644 index f2559c185..000000000 --- a/kleros-app/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "@kleros/kleros-app", - "version": "2.1.1", - "description": "Library for Kleros DApps with reusable abstractions and components.", - "repository": "git@github.com:kleros/kleros-v2.git", - "homepage": "https://github.com/kleros/kleros-v2/tree/master/kleros-app#readme", - "author": "Kleros", - "license": "MIT", - "source": "src/lib/index.ts", - "types": "./dist/kleros-app.d.ts", - "module": "./dist/kleros-app.js", - "files": [ - "dist" - ], - "type": "module", - "volta": { - "node": "20.18.3" - }, - "publishConfig": { - "access": "public", - "tag": "latest" - }, - "scripts": { - "clean": "rimraf dist", - "check-style": "eslint 'src/**/*.{ts,tsx}'", - "check-types": "tsc --noEmit", - "start": "vite dev src/", - "build": "yarn clean && vite build", - "release:patch": "scripts/publish.sh patch", - "release:minor": "scripts/publish.sh minor", - "release:major": "scripts/publish.sh major" - }, - "prettier": "@kleros/kleros-v2-prettier-config", - "devDependencies": { - "@eslint/compat": "^1.2.3", - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "^9.15.0", - "@kleros/kleros-v2-eslint-config": "workspace:^", - "@kleros/kleros-v2-prettier-config": "workspace:^", - "@tanstack/react-query": "^5.69.0", - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", - "@typescript-eslint/eslint-plugin": "^8.15.0", - "@typescript-eslint/parser": "^8.15.0", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-import": "^2.31.0", - "globals": "^15.12.0", - "react": "^18.3.1", - "rimraf": "^6.0.1", - "typescript": "^5.6.3", - "viem": "^2.24.1", - "vite": "^5.4.11", - "vite-plugin-dts": "^4.3.0", - "vite-plugin-node-polyfills": "^0.23.0", - "wagmi": "^2.14.15" - }, - "dependencies": { - "jose": "^5.9.6" - }, - "peerDependencies": { - "@tanstack/react-query": "^5.69.0", - "graphql": "^16.9.0", - "graphql-request": "^7.1.2", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "viem": "^2.24.1", - "wagmi": "^2.14.15" - } -} diff --git a/kleros-app/scripts/publish.sh b/kleros-app/scripts/publish.sh deleted file mode 100755 index cf34d1a18..000000000 --- a/kleros-app/scripts/publish.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -#-------------------------------------- -# Error handling -#-------------------------------------- - -set -Ee -function _catch { - # Don't propagate to outer shell - exit 0 -} -function _finally { - # TODO: rollback version bump - rm -rf $SCRIPT_DIR/../dist -} -trap _catch ERR -trap _finally EXIT - -#-------------------------------------- - -# Check if any tracked files are currently changed, ignoring untracked files -if [ -n "$(git status --porcelain -uno)" ]; then - echo "Error: There are uncommitted changes in tracked files. Please commit or stash them before publishing." - exit 1 -fi - -yarn version $1 - -version=$(cat package.json | jq -r .version) -echo "Publishing version $version" - -git add package.json -git commit -m "chore(kleros-app): release @kleros/kleros-app@$version" -git tag "@kleros/kleros-app@$version" -m "@kleros/kleros-app@$version" -git push -git push --tags - -yarn clean -yarn build -yarn npm publish diff --git a/kleros-app/src/App.tsx b/kleros-app/src/App.tsx deleted file mode 100644 index 51426bc3c..000000000 --- a/kleros-app/src/App.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { createRoot } from "react-dom/client"; -import React from "react"; - -const App = () => { - return ( - <React.StrictMode> - <div> - <h1>Kleros</h1> - </div> - </React.StrictMode> - ); -}; - -const app = document.getElementById("app"); -if (app) { - const root = createRoot(app); - root.render(<App />); -} diff --git a/kleros-app/src/index.html b/kleros-app/src/index.html deleted file mode 100644 index 05506403d..000000000 --- a/kleros-app/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Kleros App</title> - </head> - - <body> - <div id="app"></div> - <script type="module" src="App.tsx"></script> - </body> -</html> diff --git a/kleros-app/src/lib/atlas/hooks/useSessionStorage.ts b/kleros-app/src/lib/atlas/hooks/useSessionStorage.ts deleted file mode 100644 index 0d5e6e79b..000000000 --- a/kleros-app/src/lib/atlas/hooks/useSessionStorage.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { useState } from "react"; - -export function useSessionStorage<T>(keyName: string, defaultValue: T) { - const [storedValue, setStoredValue] = useState<T>(() => { - try { - const value = window.sessionStorage.getItem(keyName); - - return value ? JSON.parse(value) : defaultValue; - } catch (err) { - // eslint-disable-next-line no-console - console.log("useSessionStorage:", { err }); - - return defaultValue; - } - }); - - const setValue = (newValue: T) => { - try { - window.sessionStorage.setItem(keyName, JSON.stringify(newValue)); - } finally { - setStoredValue(newValue); - } - }; - - return [storedValue, setValue] as [T, (newValue: T) => void]; -} diff --git a/kleros-app/src/lib/atlas/index.ts b/kleros-app/src/lib/atlas/index.ts deleted file mode 100644 index 21968d708..000000000 --- a/kleros-app/src/lib/atlas/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./providers"; -export * from "./utils"; diff --git a/kleros-app/src/lib/atlas/providers/AtlasProvider.tsx b/kleros-app/src/lib/atlas/providers/AtlasProvider.tsx deleted file mode 100644 index f4b646d7e..000000000 --- a/kleros-app/src/lib/atlas/providers/AtlasProvider.tsx +++ /dev/null @@ -1,381 +0,0 @@ -import React, { useMemo, createContext, useContext, useState, useCallback, useEffect } from "react"; -import { useQuery, useQueryClient } from "@tanstack/react-query"; -import { GraphQLClient } from "graphql-request"; -import { decodeJwt } from "jose"; -import { useAccount, useChainId, useSignMessage, type Config } from "wagmi"; -import { - createMessage, - getNonce, - loginUser, - addUser as addUserToAtlas, - fetchUser, - updateEmail as updateEmailInAtlas, - confirmEmail as confirmEmailInAtlas, - uploadToIpfs, - type User, - type AddUserData, - type UpdateEmailData, - type ConfirmEmailData, - type ConfirmEmailResponse, - Roles, - Products, - AuthorizationError, -} from "../utils"; - -import { GraphQLError } from "graphql"; -import { isUndefined } from "../../../utils"; -import { useSessionStorage } from "../hooks/useSessionStorage"; -import { fetchRestrictions, Role } from "../utils/fetchRestrictions"; - -interface IAtlasProvider { - isVerified: boolean; - isSigningIn: boolean; - isAddingUser: boolean; - isFetchingUser: boolean; - isUpdatingUser: boolean; - isUploadingFile: boolean; - isConfirmingEmail: boolean; - user: User | undefined; - userExists: boolean; - authoriseUser: () => Promise<void>; - addUser: (userSettings: AddUserData) => Promise<boolean>; - updateEmail: (userSettings: UpdateEmailData) => Promise<boolean>; - uploadFile: (file: File, role: Roles) => Promise<string | null>; - confirmEmail: (userSettings: ConfirmEmailData) => Promise< - ConfirmEmailResponse & { - isError: boolean; - } - >; - roleRestrictions: Role[] | undefined; -} - -const Context = createContext<IAtlasProvider | undefined>(undefined); - -interface AtlasConfig { - uri: string; - product: Products; - wagmiConfig: Config; -} - -export const AtlasProvider: React.FC<{ config: AtlasConfig; children?: React.ReactNode }> = ({ children, config }) => { - const { address } = useAccount({ config: config.wagmiConfig }); - const chainId = useChainId({ config: config.wagmiConfig }); - const queryClient = useQueryClient(); - - const [authToken, setAuthToken] = useSessionStorage<string | undefined>("authToken", undefined); - const [isSigningIn, setIsSigningIn] = useState(false); - const [isAddingUser, setIsAddingUser] = useState(false); - const [isUpdatingUser, setIsUpdatingUser] = useState(false); - const [isConfirmingEmail, setIsConfirmingEmail] = useState(false); - const [isVerified, setIsVerified] = useState(false); - const [isUploadingFile, setIsUploadingFile] = useState(false); - const { signMessageAsync } = useSignMessage({ config: config.wagmiConfig }); - - const atlasGqlClient = useMemo(() => { - const headers = authToken - ? { - authorization: `Bearer ${authToken}`, - } - : undefined; - return new GraphQLClient(`${config.uri}/graphql`, { headers }); - }, [authToken, config.uri]); - - /** - * @description verifies user authorisation - * @returns boolean - true if user is authorized - */ - const verifySession = useCallback(() => { - try { - if (!authToken || !address) return false; - - const payload = decodeJwt(authToken); - - if ((payload?.sub as string)?.toLowerCase() !== address.toLowerCase()) return false; - if (payload.exp && payload.exp < Date.now() / 1000) return false; - - return true; - } catch { - return false; - } - }, [authToken, address]); - - useEffect(() => { - let timeoutId: ReturnType<typeof setTimeout>; - - const verifyAndSchedule = () => { - // initial verify check - const isValid = verifySession(); - setIsVerified(isValid); - - if (isValid && authToken) { - try { - const payload = decodeJwt(authToken); - const expiresIn = (payload.exp as number) * 1000 - Date.now(); - - timeoutId = setTimeout(verifyAndSchedule, Math.max(0, expiresIn)); - } catch (err) { - console.error("Error decoding JWT:", err); - setIsVerified(false); - } - } - }; - - verifyAndSchedule(); - - return () => { - clearTimeout(timeoutId); - }; - }, [authToken, verifySession, address]); - - const { - data: user, - isLoading: isFetchingUser, - refetch: refetchUser, - } = useQuery( - { - queryKey: [`UserSettings`], - enabled: isVerified && !isUndefined(address), - queryFn: async () => { - try { - if (!isVerified || isUndefined(address)) return undefined; - return await fetchUser(atlasGqlClient); - } catch { - return undefined; - } - }, - }, - queryClient - ); - - const { data: roleRestrictions } = useQuery( - { - queryKey: [`RoleRestrictions`], - enabled: Boolean(config.product), - staleTime: Infinity, - queryFn: async () => { - try { - return await fetchRestrictions(atlasGqlClient, config.product); - } catch { - return undefined; - } - }, - }, - queryClient - ); - - useEffect(() => { - if (!isVerified) return; - refetchUser(); - }, [isVerified, refetchUser]); - - // remove old user's data on address change - useEffect(() => { - queryClient.removeQueries({ queryKey: ["UserSettings"] }); - }, [address, queryClient]); - - // this would change based on the fields we have and what defines a user to be existing - const userExists = useMemo(() => { - if (!user) return false; - return !isUndefined(user.email); - }, [user]); - - async function fetchWithAuthErrorHandling<T>(request: () => Promise<T>): Promise<T> { - try { - return await request(); - } catch (error) { - if ( - error instanceof AuthorizationError || - (error instanceof GraphQLError && error?.extensions?.["code"] === "UNAUTHENTICATED") - ) { - setIsVerified(false); - } - throw error; - } - } - - /** - * @description authorise user and enable authorised calls - */ - const authoriseUser = useCallback( - async (statement?: string) => { - try { - if (!address || !chainId) return; - setIsSigningIn(true); - const nonce = await getNonce(atlasGqlClient, address); - - const message = createMessage(address, nonce, chainId, statement); - const signature = await signMessageAsync({ message }); - - const token = await loginUser(atlasGqlClient, { message, signature }); - setAuthToken(token); - } catch (err: unknown) { - throw err; - } finally { - setIsSigningIn(false); - } - }, - [address, chainId, setAuthToken, signMessageAsync, atlasGqlClient] - ); - - /** - * @description adds a new user to atlas - * @param {AddUserData} userSettings - object containing data to be added - * @returns {Promise<boolean>} A promise that resolves to true if the user was added successfully - */ - const addUser = useCallback( - async (userSettings: AddUserData) => { - try { - if (!address || !isVerified) return false; - setIsAddingUser(true); - - const userAdded = await fetchWithAuthErrorHandling(() => addUserToAtlas(atlasGqlClient, userSettings)); - refetchUser(); - - return userAdded; - } catch (err: unknown) { - throw err; - } finally { - setIsAddingUser(false); - } - }, - [address, isVerified, setIsAddingUser, atlasGqlClient, refetchUser] - ); - - /** - * @description updates user email in atlas - * @param {UpdateEmailData} userSettings - object containing data to be updated - * @returns {Promise<boolean>} A promise that resolves to true if email was updated successfully - */ - const updateEmail = useCallback( - async (userSettings: UpdateEmailData) => { - try { - if (!address || !isVerified) return false; - setIsUpdatingUser(true); - - const emailUpdated = await fetchWithAuthErrorHandling(() => updateEmailInAtlas(atlasGqlClient, userSettings)); - refetchUser(); - - return emailUpdated; - } catch (err: unknown) { - throw err; - } finally { - setIsUpdatingUser(false); - } - }, - [address, isVerified, setIsUpdatingUser, atlasGqlClient, refetchUser] - ); - - /** - * @description upload file to ipfs - * @param {File} file - file to be uploaded - * @param {Roles} role - role for which file is being uploaded - * @returns {Promise<string | null>} A promise that resolves to the ipfs cid if file was uploaded successfully else - * null - */ - const uploadFile = useCallback( - async (file: File, role: Roles) => { - try { - if (!address || !isVerified || !config.uri || !authToken) return null; - - if (roleRestrictions) { - const restrictions = roleRestrictions.find((supportedRoles) => Roles[supportedRoles.name] === role); - - if (!restrictions) throw new Error("Unsupported role."); - if (!restrictions.restriction.allowedMimeTypes.includes(file.type)) throw new Error("Unsupported file type."); - if (file.size > restrictions.restriction.maxSize) - throw new Error( - `File too big. Max allowed size : ${(restrictions.restriction.maxSize / (1024 * 1024)).toFixed(2)} mb.` - ); - } - setIsUploadingFile(true); - - const hash = await fetchWithAuthErrorHandling(() => - uploadToIpfs({ baseUrl: config.uri, authToken }, { file, name: file.name, role, product: config.product }) - ); - return hash ? `/ipfs/${hash}` : null; - } catch (err: unknown) { - throw err; - } finally { - setIsUploadingFile(false); - } - }, - [address, isVerified, setIsUploadingFile, authToken, config.uri, config.product, roleRestrictions] - ); - - /** - * @description confirms user email in atlas - * @param {ConfirmEmailData} userSettings - object containing data to be sent - * @returns {Promise<boolean>} A promise that resolves to true if email was confirmed successfully - */ - const confirmEmail = useCallback( - async (userSettings: ConfirmEmailData): Promise<ConfirmEmailResponse & { isError: boolean }> => { - try { - setIsConfirmingEmail(true); - - const emailConfirmed = await confirmEmailInAtlas(atlasGqlClient, userSettings); - - return { ...emailConfirmed, isError: false }; - } catch (err: any) { - // eslint-disable-next-line - console.log("Confirm Email Error : ", err?.message); - return { isConfirmed: false, isTokenExpired: false, isTokenInvalid: false, isError: true }; - } finally { - setIsConfirmingEmail(false); - } - }, - [atlasGqlClient] - ); - - return ( - <Context.Provider - value={useMemo( - () => ({ - isVerified, - isSigningIn, - isAddingUser, - authoriseUser, - addUser, - user, - isFetchingUser, - updateEmail, - isUpdatingUser, - userExists, - isUploadingFile, - uploadFile, - confirmEmail, - roleRestrictions, - isConfirmingEmail, - }), - [ - isVerified, - isSigningIn, - isAddingUser, - authoriseUser, - addUser, - user, - isFetchingUser, - updateEmail, - isUpdatingUser, - userExists, - isUploadingFile, - uploadFile, - confirmEmail, - roleRestrictions, - isConfirmingEmail, - ] - )} - > - {children} - </Context.Provider> - ); -}; - -export const useAtlasProvider = () => { - const context = useContext(Context); - if (!context) { - throw new Error("Context Provider not found."); - } - return context; -}; - -export default AtlasProvider; diff --git a/kleros-app/src/lib/atlas/providers/index.ts b/kleros-app/src/lib/atlas/providers/index.ts deleted file mode 100644 index fbe2073a3..000000000 --- a/kleros-app/src/lib/atlas/providers/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./AtlasProvider"; diff --git a/kleros-app/src/lib/atlas/utils/addUser.ts b/kleros-app/src/lib/atlas/utils/addUser.ts deleted file mode 100644 index d04846b31..000000000 --- a/kleros-app/src/lib/atlas/utils/addUser.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { GraphQLError } from "graphql"; -import { gql, type GraphQLClient } from "graphql-request"; - -const query = gql` - mutation AddUser($settings: AddUserSettingsDto!) { - addUser(addUserSettings: $settings) - } -`; - -export type AddUserData = { - email: string; -}; - -type AddUserResponse = { - addUser: boolean; -}; - -export async function addUser(client: GraphQLClient, userData: AddUserData): Promise<boolean> { - const variables = { - settings: userData, - }; - - return client - .request<AddUserResponse>(query, variables) - .then(async (response) => response.addUser) - .catch((errors) => { - // eslint-disable-next-line no-console - console.log("Add User error:", { errors }); - - const error = errors?.response?.errors?.[0]; - - if (error) { - throw new GraphQLError(error?.message, { ...error }); - } - throw new Error("Unknown Error"); - }); -} diff --git a/kleros-app/src/lib/atlas/utils/confirmEmail.ts b/kleros-app/src/lib/atlas/utils/confirmEmail.ts deleted file mode 100644 index 8674c1767..000000000 --- a/kleros-app/src/lib/atlas/utils/confirmEmail.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { gql, type GraphQLClient } from "graphql-request"; - -const query = gql` - mutation ConfirmEmail($address: Address!, $token: String!) { - confirmEmail(confirmEmailInput: { address: $address, token: $token }) { - isConfirmed - isTokenExpired - isTokenInvalid - } - } -`; - -export type ConfirmEmailData = { - address: string; - token: string; -}; - -export type ConfirmEmailResponse = { - isConfirmed: boolean; - isTokenExpired: boolean; - isTokenInvalid: boolean; -}; - -export async function confirmEmail(client: GraphQLClient, userData: ConfirmEmailData) { - const variables = userData; - - return client - .request<{ confirmEmail: ConfirmEmailResponse }>(query, variables) - .then(async (response) => response.confirmEmail) - .catch((errors) => { - // eslint-disable-next-line no-console - console.log("Confirm Email error:", { errors }); - - throw new Error("Unable to verify."); - }); -} diff --git a/kleros-app/src/lib/atlas/utils/createMessage.ts b/kleros-app/src/lib/atlas/utils/createMessage.ts deleted file mode 100644 index ebb5531bb..000000000 --- a/kleros-app/src/lib/atlas/utils/createMessage.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { createSiweMessage } from "viem/siwe"; - -export const createMessage = (address: `0x${string}`, nonce: string, chainId: number, statement?: string) => { - const domain = window.location.host; - const origin = window.location.origin; - - // signature is valid only for 10 mins - const expirationTime = new Date(Date.now() + 10 * 60 * 1000); - - const message = createSiweMessage({ - domain, - address, - statement: statement ?? "Sign In to Kleros with Ethereum.", - uri: origin, - version: "1", - chainId, - nonce, - expirationTime, - }); - return message; -}; diff --git a/kleros-app/src/lib/atlas/utils/fetchRestrictions.ts b/kleros-app/src/lib/atlas/utils/fetchRestrictions.ts deleted file mode 100644 index 8a0b27347..000000000 --- a/kleros-app/src/lib/atlas/utils/fetchRestrictions.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { gql, type GraphQLClient } from "graphql-request"; -import { Products } from "."; - -export type Role = { - name: string; - restriction: { - maxSize: number; - allowedMimeTypes: string[]; - }; -}; - -type FetchRolesResponse = { - roles: Role[]; -}; - -const query = gql` - query Roles($product: Products!) { - roles(product: $product) { - name - restriction { - maxSize - allowedMimeTypes - } - } - } -`; - -export async function fetchRestrictions(client: GraphQLClient, product: Products): Promise<Role[]> { - return client - .request<FetchRolesResponse>(query, { product }) - .then((response) => response.roles) - .catch((errors) => { - // eslint-disable-next-line no-console - console.log("Error fetching roles :", { errors }); - const errorMessage = Array.isArray(errors?.response?.errors) - ? errors.response.errors[0]?.message - : "Error fetching roles"; - throw Error(errorMessage); - }); -} diff --git a/kleros-app/src/lib/atlas/utils/fetchUser.ts b/kleros-app/src/lib/atlas/utils/fetchUser.ts deleted file mode 100644 index 663318677..000000000 --- a/kleros-app/src/lib/atlas/utils/fetchUser.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { gql, type GraphQLClient } from "graphql-request"; - -export type User = { - email: string; - isEmailVerified: boolean; - emailUpdateableAt: string | null; -}; - -type GetUserResponse = { - user: User; -}; -const query = gql` - query GetUser { - user { - email - isEmailVerified - emailUpdateableAt - } - } -`; - -export async function fetchUser(client: GraphQLClient): Promise<User> { - return client - .request<GetUserResponse>(query) - .then((response) => response.user) - .catch((errors) => { - // eslint-disable-next-line no-console - console.log("Error fetching user :", { errors }); - const errorMessage = Array.isArray(errors?.response?.errors) - ? errors.response.errors[0]?.message - : "Error fetching user"; - throw Error(errorMessage); - }); -} diff --git a/kleros-app/src/lib/atlas/utils/getNonce.ts b/kleros-app/src/lib/atlas/utils/getNonce.ts deleted file mode 100644 index 951503a48..000000000 --- a/kleros-app/src/lib/atlas/utils/getNonce.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { gql, type GraphQLClient } from "graphql-request"; - -type GetNonce = { - nonce: string; -}; - -const query = gql` - mutation GetNonce($address: Address!) { - nonce(address: $address) - } -`; - -export async function getNonce(client: GraphQLClient, address: string): Promise<string> { - const variables = { - address, - }; - - return client - .request<GetNonce>(query, variables) - .then((response) => response.nonce) - .catch((errors) => { - // eslint-disable-next-line no-console - console.log("Error fetching nonce for address:", address, { errors }); - const errorMessage = Array.isArray(errors?.response?.errors) - ? errors.response.errors[0]?.message - : "Error fetching nonce"; - throw Error(errorMessage); - }); -} diff --git a/kleros-app/src/lib/atlas/utils/index.ts b/kleros-app/src/lib/atlas/utils/index.ts deleted file mode 100644 index 46e105e64..000000000 --- a/kleros-app/src/lib/atlas/utils/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -export enum Products { - CourtV1 = "CourtV1", - CourtV2 = "CourtV2", - Curate = "Curate", - Escrow = "Escrow", - Governor = "Governor", - ProofOfHumanity = "ProofOfHumanity", - Reality = "Reality", - Test = "Test", -} - -export enum Roles { - Evidence = "evidence", - Generic = "generic", - IdentificationVideo = "identification-video", - CurateItemImage = "curate-item-image", - CurateItemFile = "curate-item-file", - Logo = "logo", - MetaEvidence = "meta-evidence", - Photo = "photo", - Policy = "policy", - Test = "test", -} - -export * from "./loginUser"; -export * from "./getNonce"; -export * from "./createMessage"; -export * from "./addUser"; -export * from "./fetchUser"; -export * from "./updateEmail"; -export * from "./confirmEmail"; -export * from "./uploadToIpfs"; diff --git a/kleros-app/src/lib/atlas/utils/loginUser.ts b/kleros-app/src/lib/atlas/utils/loginUser.ts deleted file mode 100644 index 968d6652f..000000000 --- a/kleros-app/src/lib/atlas/utils/loginUser.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { gql, type GraphQLClient } from "graphql-request"; - -const query = gql` - mutation Login($message: String!, $signature: String!) { - login(message: $message, signature: $signature) - } -`; - -type AuthoriseUserData = { - signature: `0x${string}`; - message: string; -}; - -type Login = { - login: { - accessToken: string; - }; -}; - -export async function loginUser(client: GraphQLClient, authData: AuthoriseUserData): Promise<string> { - const variables = { - message: authData.message, - signature: authData.signature, - }; - - return client - .request<Login>(query, variables) - .then(async (response) => response.login.accessToken) - .catch((errors) => { - // eslint-disable-next-line no-console - console.log("Authorization error:", { errors }); - - const errorMessage = Array.isArray(errors?.response?.errors) - ? errors.response.errors[0]?.message - : "Unknown error"; - throw new Error(errorMessage); - }); -} diff --git a/kleros-app/src/lib/atlas/utils/updateEmail.ts b/kleros-app/src/lib/atlas/utils/updateEmail.ts deleted file mode 100644 index c217f5c5a..000000000 --- a/kleros-app/src/lib/atlas/utils/updateEmail.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { GraphQLError } from "graphql"; -import { gql, type GraphQLClient } from "graphql-request"; - -const query = gql` - mutation UpdateEmail($newEmail: String!) { - updateEmail(newEmail: $newEmail) - } -`; - -export type UpdateEmailData = { - newEmail: string; -}; - -type UpdateEmailResponse = { - updateEmail: boolean; -}; - -export async function updateEmail(client: GraphQLClient, userData: UpdateEmailData): Promise<boolean> { - const variables = userData; - - return client - .request<UpdateEmailResponse>(query, variables) - .then(async (response) => response.updateEmail) - .catch((errors) => { - // eslint-disable-next-line no-console - console.log("Update Email error:", { errors }); - - const error = errors?.response?.errors?.[0]; - - if (error) { - throw new GraphQLError(error?.message, { ...error }); - } - throw new Error("Unknown Error"); - }); -} diff --git a/kleros-app/src/lib/atlas/utils/uploadToIpfs.ts b/kleros-app/src/lib/atlas/utils/uploadToIpfs.ts deleted file mode 100644 index b3283890a..000000000 --- a/kleros-app/src/lib/atlas/utils/uploadToIpfs.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { Products, Roles } from "."; - -export type IpfsUploadPayload = { - file: File; - name: string; - product: Products; - role: Roles; -}; - -type Config = { - baseUrl: string; - authToken: string; -}; - -export async function uploadToIpfs(config: Config, payload: IpfsUploadPayload): Promise<string | null> { - const formData = new FormData(); - formData.append("file", payload.file, payload.name); - formData.append("name", payload.name); - formData.append("product", payload.product); - formData.append("role", payload.role); - - return fetch(`${config.baseUrl}/ipfs/file`, { - method: "POST", - headers: { - authorization: `Bearer ${config.authToken}`, - }, - body: formData, - }).then(async (response) => { - if (!response.ok) { - const error = await response.json().catch(() => ({ message: "Error uploading to IPFS" })); - - if (response.status === 401) throw new AuthorizationError(error.message); - throw new Error(error.message); - } - - return await response.text(); - }); -} - -export class AuthorizationError extends Error { - readonly name = "AuthorizationError" as const; - constructor(message: string) { - super(message); - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - } -} diff --git a/kleros-app/src/lib/index.ts b/kleros-app/src/lib/index.ts deleted file mode 100644 index d057e151a..000000000 --- a/kleros-app/src/lib/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./atlas"; diff --git a/kleros-app/src/utils/index.ts b/kleros-app/src/utils/index.ts deleted file mode 100644 index b0d6c5b33..000000000 --- a/kleros-app/src/utils/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const isUndefined = (maybeObject: any): maybeObject is undefined | null => - typeof maybeObject === "undefined" || maybeObject === null; diff --git a/kleros-app/tsconfig.json b/kleros-app/tsconfig.json deleted file mode 100644 index a657db74d..000000000 --- a/kleros-app/tsconfig.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "extends": "@kleros/kleros-v2-tsconfig/react-library.json", - "compilerOptions": { - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "rootDir": "src", - "outDir": "dist", - "allowJs": true, - "forceConsistentCasingInFileNames": true, - "strictNullChecks": true, - "noUnusedLocals": true, - "skipLibCheck": true, - "allowSyntheticDefaultImports": true, - "removeComments": true, - "isolatedModules": true, - "moduleResolution": "node", - "strict": true, - "esModuleInterop": true, - "declaration": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitAny": false, - "resolveJsonModule": true - }, - "include": [ - "src/lib/**/*" - ], - "exclude": [ - "node_modules", - "dist" - ] -} diff --git a/kleros-app/vite.config.js b/kleros-app/vite.config.js deleted file mode 100644 index c1beec13c..000000000 --- a/kleros-app/vite.config.js +++ /dev/null @@ -1,38 +0,0 @@ -// vite.config.js -import { resolve } from "path"; -import { defineConfig } from "vite"; -import dts from "vite-plugin-dts"; -import { nodePolyfills } from "vite-plugin-node-polyfills"; - -export default defineConfig({ - plugins: [ - dts({ insertTypesEntry: true }), - nodePolyfills({ - include: ["fs", "stream"], - }), - ], - build: { - lib: { - // Could also be a dictionary or array of multiple entry points - entry: resolve(__dirname, "src/lib/index.ts"), - name: "kleros-app", - fileName: "kleros-app", - }, - sourcemap: true, - rollupOptions: { - // make sure to externalize deps that shouldn't be bundled - // into your library - external: ["react", "react-dom", "viem", "wagmi", "@tanstack/react-query", "graphql", "graphql-request"], - output: { - // Provide global variables to use in the UMD build - // for externalized deps - globals: { - react: "React", - "react-dom": "ReactDOM", - "@tanstack/react-query": "@tanstack/react-query", - "graphql-request": "graphql-request", - }, - }, - }, - }, -}); diff --git a/kleros-sdk/.gitignore b/kleros-sdk/.gitignore deleted file mode 100644 index 3ed7dc1bc..000000000 --- a/kleros-sdk/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -node_modules - -# vite -development -build -dist -lib - -# misc -.eslintcache -.DS_Store -.env -.env.test -.env.testnet -.env.devnet -.env.local -.env.development.local -.env.test.local -.env.production.local - -# logs -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/kleros-sdk/README.md b/kleros-sdk/README.md deleted file mode 100644 index 28d807b82..000000000 --- a/kleros-sdk/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# @kleros/kleros-sdk - -_Archon's successor_ - -To run the data mappings tests, at the root folder level, do: - -```bash -yarn test -``` - -🚧 ⚖️ 🚧 diff --git a/kleros-sdk/config/v1-metaevidence/escrow.json b/kleros-sdk/config/v1-metaevidence/escrow.json deleted file mode 100644 index f2b0e7c93..000000000 --- a/kleros-sdk/config/v1-metaevidence/escrow.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "subCategory": "General Service", - "arbitrableAddress": "0x0d67440946949fe293b45c52efd8a9b3d51e2522", - "title": "Jenkins the Valet Yacht Licensing Contract", - "description": "Agreement between Bostonbob (bb) and AC (ac). \n\nbb will pay a one time yacht leasing fee of 4 eth to ac.\n\nIn return, ac will lease his yacht to bb by submitting bb’s MAYC and his back story in the Jenkins the valet author portal. Ac’s WAGMI Yacht #1047 will be attached to bb’s MAYC #1353, casting 1353 for a role in the book. \n\nIn addition, a royalty split will be put into place between the two parties. 80% for ac/20% for bb (managed and paid out by Jenkins team at a later date)\n\n*All names in contract are Twitter profile names as of 12/8.", - "sender": "0x45E6564631809F5531fd008f4829f1C5B0c29A7f", - "receiver": "0x45E6564631809F5531fd008f4829f1C5B0c29A7f", - "amount": "4", - "timeout": 8640000000000000, - "token": { - "name": "Ethereum", - "ticker": "ETH", - "symbolURI": "/static/media/eth.33901ab6.png", - "address": null, - "decimals": 18 - }, - "extraData": { - "Contract Information": "Agreement between Bostonbob (bb) and AC (ac). \n\nbb will pay a one time yacht leasing fee of 4 eth to ac.\n\nIn return, ac will lease his yacht to bb by submitting bb’s MAYC and his back story in the Jenkins the valet author portal. Ac’s WAGMI Yacht #1047 will be attached to bb’s MAYC #1353, casting 1353 for a role in the book. \n\nIn addition, a royalty split will be put into place between the two parties. 80% for ac/20% for bb (managed and paid out by Jenkins team at a later date)\n\n*All names in contract are Twitter profile names as of 12/8." - }, - "invoice": true, - "category": "Escrow", - "question": "Which party abided by terms of the contract?", - "rulingOptions": { - "type": "single-select", - "titles": [ - "Refund Sender", - "Pay Receiver" - ], - "descriptions": [ - "Select to return funds to the Sender", - "Select to release funds to the Receiver" - ] - }, - "evidenceDisplayInterfaceURI": "/ipfs/QmfPnVdcCjApHdiCC8wAmyg5iR246JvVuQGQjQYgtF8gZU/index.html", - "aliases": { - "0x45E6564631809F5531fd008f4829f1C5B0c29A7f": "receiver" - } -} diff --git a/kleros-sdk/config/v1-metaevidence/escrow2.json b/kleros-sdk/config/v1-metaevidence/escrow2.json deleted file mode 100644 index fcc13d4ff..000000000 --- a/kleros-sdk/config/v1-metaevidence/escrow2.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "subCategory": "General Service", - "arbitrableAddress": "0x0d67440946949fe293b45c52efd8a9b3d51e2522", - "title": "Mente Vs Cooperative Kleros", - "description": "\n\nThe challenger believes due to a UI bug they were not able to challenge case 164 and this dispute is against the cooperative for potential lost winnings.\n\n", - "sender": "0x96559b33D6A9042b1C34b3e8978Ca922146cB79a", - "receiver": "0xa07f5Ffd166Ca3Ff7567e96a0430F1496cdb470a", - "amount": "5", - "timeout": 8640000000000000, - "token": { - "name": "Ethereum", - "ticker": "ETH", - "symbolURI": "/static/media/eth.33901ab6.png", - "address": null, - "decimals": 18 - }, - "extraData": { - "Contract Information": "\n\nThe challenger believes due to a UI bug they were not able to challenge case 164 and this dispute is against the cooperative for potential lost winnings.\n\n" - }, - "invoice": false, - "category": "Escrow", - "question": "Which party abided by terms of the contract?", - "rulingOptions": { - "type": "single-select", - "titles": [ - "Refund Sender", - "Pay Receiver" - ], - "descriptions": [ - "Select to return funds to the Sender", - "Select to release funds to the Receiver" - ] - }, - "evidenceDisplayInterfaceURI": "/ipfs/QmfPnVdcCjApHdiCC8wAmyg5iR246JvVuQGQjQYgtF8gZU/index.html", - "aliases": { - "0x96559b33D6A9042b1C34b3e8978Ca922146cB79a": "sender", - "0xa07f5Ffd166Ca3Ff7567e96a0430F1496cdb470a": "receiver" - } -} diff --git a/kleros-sdk/config/v1-metaevidence/escrow3.json b/kleros-sdk/config/v1-metaevidence/escrow3.json deleted file mode 100644 index 4257141eb..000000000 --- a/kleros-sdk/config/v1-metaevidence/escrow3.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "subCategory": "General Service", - "arbitrableAddress": "0x0d67440946949fe293b45c52efd8a9b3d51e2522", - "title": "Liquidity Withdrawal Transfer Ownership Agreement ", - "description": "PARTIES:\nParty 1 (hereinafter referred to as the \"Seller\"):\n* Ethereum Address: 0xc4c4e8144823000d97310756d3237B305E967a09\n\nParty 2 (hereinafter referred to as the \"Buyer\"):\n* Ethereum Address: 0x213fea050A0dA676E97B4dc40e37E985008EA1a0\n\nRECITALS\n\nA. The Seller is the owner of an ERC-20 token contract, whose liquidity is locked on the UNCX.network platform.\nB. The \"Rights'' herein refer to the ability to demand liquidity withdrawal of the aforementioned ERC-20 token through the UNCX.network service by having the designated rights-holder's address assigned to the Gudetama in the contract 0x257EeF05f232B566cD0aF298Ec0B45C2C18d16c7 on the Ethereum chain.\n\nAGREEMENT\n\nTransfer of Rights:\n1.1. The transfer shall be completed by 12:00, Wednesday 20, December 2023 EDT, to the Buyer at the ETH wallet address: 0x8e6f7b23Cdf06db96FD96F4aF8369c0131FAf0F6.\n\nPayment:\n2.1. Upon successful fulfillment of 1.1, the Buyer shall transfer the full amount of 1,4 ETH to the Seller.\n\nNo Partial Payment:\n3.1. There shall be no conditions under which partial payment can be demanded by the Seller, unless the Buyer chooses to do so voluntarily through the Escrow contract.\n\nKleros Escrow:\n4.1. Any disputes arising from this Agreement shall be automatically escalated to the Court of Kleros after both parties fund the dispute resolution deposit. Should one side fail to do so in full, the other party will automatically win the dispute.", - "sender": "0x213fea050A0dA676E97B4dc40e37E985008EA1a0", - "receiver": "0xc4c4e8144823000d97310756d3237B305E967a09", - "amount": "1.4", - "timeout": 8640000000000000, - "token": { - "name": "Ethereum", - "ticker": "ETH", - "symbolURI": "/static/media/eth.33901ab6.png", - "address": null, - "decimals": 18 - }, - "extraData": { - "Contract Information": "PARTIES:\nParty 1 (hereinafter referred to as the \"Seller\"):\n* Ethereum Address: 0xc4c4e8144823000d97310756d3237B305E967a09\n\nParty 2 (hereinafter referred to as the \"Buyer\"):\n* Ethereum Address: 0x213fea050A0dA676E97B4dc40e37E985008EA1a0\n\nRECITALS\n\nA. The Seller is the owner of an ERC-20 token contract, whose liquidity is locked on the UNCX.network platform.\nB. The \"Rights'' herein refer to the ability to demand liquidity withdrawal of the aforementioned ERC-20 token through the UNCX.network service by having the designated rights-holder's address assigned to the Gudetama in the contract 0x257EeF05f232B566cD0aF298Ec0B45C2C18d16c7 on the Ethereum chain.\n\nAGREEMENT\n\nTransfer of Rights:\n1.1. The transfer shall be completed by 12:00, Wednesday 20, December 2023 EDT, to the Buyer at the ETH wallet address: 0x8e6f7b23Cdf06db96FD96F4aF8369c0131FAf0F6.\n\nPayment:\n2.1. Upon successful fulfillment of 1.1, the Buyer shall transfer the full amount of 1,4 ETH to the Seller.\n\nNo Partial Payment:\n3.1. There shall be no conditions under which partial payment can be demanded by the Seller, unless the Buyer chooses to do so voluntarily through the Escrow contract.\n\nKleros Escrow:\n4.1. Any disputes arising from this Agreement shall be automatically escalated to the Court of Kleros after both parties fund the dispute resolution deposit. Should one side fail to do so in full, the other party will automatically win the dispute." - }, - "invoice": false, - "category": "Escrow", - "question": "Which party abided by terms of the contract?", - "rulingOptions": { - "type": "single-select", - "titles": [ - "Refund Sender", - "Pay Receiver" - ], - "descriptions": [ - "Select to return funds to the Sender", - "Select to release funds to the Receiver" - ] - }, - "evidenceDisplayInterfaceURI": "/ipfs/QmfPnVdcCjApHdiCC8wAmyg5iR246JvVuQGQjQYgtF8gZU/index.html", - "aliases": { - "0x213fea050A0dA676E97B4dc40e37E985008EA1a0": "sender", - "0xc4c4e8144823000d97310756d3237B305E967a09": "receiver" - } -} diff --git a/kleros-sdk/config/v1-metaevidence/lgtcr1.json b/kleros-sdk/config/v1-metaevidence/lgtcr1.json deleted file mode 100644 index 08fb21ffa..000000000 --- a/kleros-sdk/config/v1-metaevidence/lgtcr1.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "title": "Add a list to Consensus Layer Withdrawal Protection enabled badges", - "description": "Someone requested to add a list to Consensus Layer Withdrawal Protection enabled badges.", - "rulingOptions": { - "titles": [ - "Yes, Add It", - "No, Don't Add It" - ], - "descriptions": [ - "Select this if you think the list complies with the required criteria and should be added.", - "Select this if you think the list does not comply with the required criteria and should not be added." - ] - }, - "category": "Curated Lists", - "question": "Does the list comply with the required criteria?", - "fileURI": "/ipfs/QmZ7RVU7re1g8nXDbAFMHV99pyie3dn4cY7Ga2X4h8mDpV/reject-all-policy.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmQjJio59WkrQDzPC5kSP3EiGaqrWxjGfkvhmD2mWwm41M/index.html", - "metadata": { - "tcrTitle": "Consensus Layer Withdrawal Protection enabled badges", - "tcrDescription": "A List of lists related to Consensus Layer Withdrawal Protection", - "columns": [ - { - "label": "Address", - "description": "The Badges list address", - "type": "GTCR address", - "isIdentifier": true - }, - { - "label": "Match File URI", - "description": "The URI to the JSON file for matching columns for each list.", - "type": "text" - } - ], - "itemName": "list", - "itemNamePlural": "lists", - "isConnectedTCR": true, - "requireRemovalEvidence": true, - "isTCRofTCRs": true, - "parentTCRAddress": "0x479083b5343aB89bb39608e3176D750c8A6957B5", - "relTcrDisabled": true - }, - "_v": "1.0.0", - "evidenceDisplayInterfaceRequiredParams": [ - "disputeID", - "arbitrableContractAddress", - "arbitratorContractAddress", - "arbitrableChainID", - "arbitrableJsonRpcUrl" - ] -} diff --git a/kleros-sdk/config/v1-metaevidence/lgtcr2.json b/kleros-sdk/config/v1-metaevidence/lgtcr2.json deleted file mode 100644 index 8aa949743..000000000 --- a/kleros-sdk/config/v1-metaevidence/lgtcr2.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "title": "Remove a list from Consensus Layer Withdrawal Protection enabled badges", - "description": "Someone requested to remove a list from Consensus Layer Withdrawal Protection enabled badges.", - "rulingOptions": { - "titles": [ - "Yes, Remove It", - "No, Don't Remove It" - ], - "descriptions": [ - "Select this if you think the list does not comply with the required criteria and should be removed.", - "Select this if you think the list complies with the required criteria and should not be removed." - ] - }, - "category": "Curated Lists", - "question": "Does the list comply with the required criteria?", - "fileURI": "/ipfs/QmZ7RVU7re1g8nXDbAFMHV99pyie3dn4cY7Ga2X4h8mDpV/reject-all-policy.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmQjJio59WkrQDzPC5kSP3EiGaqrWxjGfkvhmD2mWwm41M/index.html", - "metadata": { - "tcrTitle": "Consensus Layer Withdrawal Protection enabled badges", - "tcrDescription": "A List of lists related to Consensus Layer Withdrawal Protection", - "columns": [ - { - "label": "Address", - "description": "The Badges list address", - "type": "GTCR address", - "isIdentifier": true - }, - { - "label": "Match File URI", - "description": "The URI to the JSON file for matching columns for each list.", - "type": "text" - } - ], - "itemName": "list", - "itemNamePlural": "lists", - "isConnectedTCR": true, - "requireRemovalEvidence": true, - "isTCRofTCRs": true, - "parentTCRAddress": "0x479083b5343aB89bb39608e3176D750c8A6957B5", - "relTcrDisabled": true - }, - "_v": "1.0.0", - "evidenceDisplayInterfaceRequiredParams": [ - "disputeID", - "arbitrableContractAddress", - "arbitratorContractAddress", - "arbitrableChainID", - "arbitrableJsonRpcUrl" - ] -} diff --git a/kleros-sdk/config/v1-metaevidence/lgtcr3.json b/kleros-sdk/config/v1-metaevidence/lgtcr3.json deleted file mode 100644 index 80d174641..000000000 --- a/kleros-sdk/config/v1-metaevidence/lgtcr3.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "title": "Add a validator to Consensus Layer Withdrawal Protection", - "description": "Someone requested to add a validator to Consensus Layer Withdrawal Protection", - "rulingOptions": { - "titles": [ - "Yes, Add It", - "No, Don't Add It" - ], - "descriptions": [ - "Select this if you think the validator complies with the required criteria and should be added.", - "Select this if you think the validator does not comply with the required criteria and should not be added." - ] - }, - "category": "Curated Lists", - "question": "Does the validator comply with the required criteria?", - "fileURI": "/ipfs/QmPtXtFKfVc3w5aGVNYrmBZWEHBLpk2XMLkYCnEioxwy43/clwp-acceptance-policy.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmQjJio59WkrQDzPC5kSP3EiGaqrWxjGfkvhmD2mWwm41M/index.html", - "metadata": { - "tcrTitle": "Consensus Layer Withdrawal Protection", - "tcrDescription": "Ethereum validators using CLWP to set their withdrawal address", - "columns": [ - { - "label": "validator_index", - "description": "The validator in question (integer) [required]", - "type": "number", - "isIdentifier": true - }, - { - "label": "from_bls_pubkey", - "description": "The public key of the validator withdrawal key (string) [required]", - "type": "text", - "isIdentifier": true - }, - { - "label": "to_execution_address", - "description": "An Ethereum execution layer withdrawal address (address) [required]", - "type": "address", - "isIdentifier": true - }, - { - "label": "CLWP File", - "description": "A text file which is named as the validator_index.json (file) [required]", - "type": "file", - "allowedFileTypes": "json" - }, - { - "label": "Item to supersede", - "description": "In case there is already an entry on the list for the same validator_index, this field needs to be populated with the ItemID of the other item in this Kleros Curate registry that this entry is meant to supersede. (string) [optional]", - "type": "text", - "isIdentifier": true - }, - { - "label": "Additional Information", - "description": "A .pdf file containing any evidence and proof to prove that you are the rightful owner of the validator node. (file) [optional]", - "type": "file", - "allowedFileTypes": "pdf" - } - ], - "itemName": "validator", - "itemNamePlural": "validators", - "logoURI": "/ipfs/QmXkGcS9Nw7jqaSaZZoKh3UQo8pwE8LWsdoUtjx1zTFLmJ/clwp-100-100-px-.svg", - "requireRemovalEvidence": true, - "isTCRofTCRs": false, - "relTcrDisabled": true - } -} diff --git a/kleros-sdk/config/v1-metaevidence/lgtcr4.json b/kleros-sdk/config/v1-metaevidence/lgtcr4.json deleted file mode 100644 index aec3e12b9..000000000 --- a/kleros-sdk/config/v1-metaevidence/lgtcr4.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "title": "Remove a validator from Consensus Layer Withdrawal Protection", - "description": "Someone requested to remove a validator from Consensus Layer Withdrawal Protection", - "rulingOptions": { - "titles": [ - "Yes, Remove It", - "No, Don't Remove It" - ], - "descriptions": [ - "Select this if you think the validator does not comply with the required criteria and should be removed.", - "Select this if you think the validator complies with the required criteria and should not be removed." - ] - }, - "category": "Curated Lists", - "question": "Does the validator comply with the required criteria?", - "fileURI": "/ipfs/QmPtXtFKfVc3w5aGVNYrmBZWEHBLpk2XMLkYCnEioxwy43/clwp-acceptance-policy.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmQjJio59WkrQDzPC5kSP3EiGaqrWxjGfkvhmD2mWwm41M/index.html", - "metadata": { - "tcrTitle": "Consensus Layer Withdrawal Protection", - "tcrDescription": "Ethereum validators using CLWP to set their withdrawal address", - "columns": [ - { - "label": "validator_index", - "description": "The validator in question (integer) [required]", - "type": "number", - "isIdentifier": true - }, - { - "label": "from_bls_pubkey", - "description": "The public key of the validator withdrawal key (string) [required]", - "type": "text", - "isIdentifier": true - }, - { - "label": "to_execution_address", - "description": "An Ethereum execution layer withdrawal address (address) [required]", - "type": "address", - "isIdentifier": true - }, - { - "label": "CLWP File", - "description": "A text file which is named as the validator_index.json (file) [required]", - "type": "file", - "allowedFileTypes": "json" - }, - { - "label": "Item to supersede", - "description": "In case there is already an entry on the list for the same validator_index, this field needs to be populated with the ItemID of the other item in this Kleros Curate registry that this entry is meant to supersede. (string) [optional]", - "type": "text", - "isIdentifier": true - }, - { - "label": "Additional Information", - "description": "A .pdf file containing any evidence and proof to prove that you are the rightful owner of the validator node. (file) [optional]", - "type": "file", - "allowedFileTypes": "pdf" - } - ], - "itemName": "validator", - "itemNamePlural": "validators", - "logoURI": "/ipfs/QmXkGcS9Nw7jqaSaZZoKh3UQo8pwE8LWsdoUtjx1zTFLmJ/clwp-100-100-px-.svg", - "requireRemovalEvidence": true, - "isTCRofTCRs": false, - "relTcrDisabled": true - } -} diff --git a/kleros-sdk/config/v1-metaevidence/lgtcr5.json b/kleros-sdk/config/v1-metaevidence/lgtcr5.json deleted file mode 100644 index 66e7424b8..000000000 --- a/kleros-sdk/config/v1-metaevidence/lgtcr5.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "title": "Add an entry to Ledger Contract Domain Name registry v2", - "description": "Someone requested to add an entry to Ledger Contract Domain Name registry v2", - "rulingOptions": { - "titles": [ - "Yes, Add It", - "No, Don't Add It" - ], - "descriptions": [ - "Select this if you think the entry complies with the required criteria and should be added.", - "Select this if you think the entry does not comply with the required criteria and should not be added." - ] - }, - "category": "Curated Lists", - "question": "Does the entry comply with the required criteria?", - "fileURI": "/ipfs/QmdvkC5Djgk8MfX5ijJR3NJzmvGugUqvui7bKuTErSD6cE/contract-domain-name-registry-for-ledger-policy-3-.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmNhJXtMrxeJu4fpchPruGrL93bm2M4VmDZ8pj4x6FqnHJ/index.html", - "metadata": { - "tcrTitle": "Ledger Contract Domain Name registry v2", - "tcrDescription": "A list of contract addresses and the domain names they are meant to be used from .", - "columns": [ - { - "label": "Contract address", - "description": "The address of the contract in question. Case-sensitive only if required by the blockchain that the address pertains to (e.g. Solana). ", - "type": "rich address", - "isIdentifier": true - }, - { - "label": "Domain name", - "description": "The specific (sub)domain name of the dApp where this contract is meant to be accessed from. Wildcards (*) are acceptable as part of this field if proof can be shown that the contract is intended to be used across multiple domains.", - "type": "text", - "isIdentifier": true - }, - { - "label": "Visual proof", - "description": "If the domain is a specific root or subdomain, this must be a screenshot of the exact page and setup where this particular address can be interacted from.", - "type": "image", - "isIdentifier": false - } - ], - "itemName": "entry", - "itemNamePlural": "entries", - "logoURI": "/ipfs/QmNNSDkpyDX1wB4NNFdAzaHsJihpvgNVV89zCH8FH9CVAz/ledger-white.png", - "requireRemovalEvidence": true, - "isTCRofTCRs": false, - "relTcrDisabled": true - } -} diff --git a/kleros-sdk/config/v1-metaevidence/lgtcr6.json b/kleros-sdk/config/v1-metaevidence/lgtcr6.json deleted file mode 100644 index 1dca32efa..000000000 --- a/kleros-sdk/config/v1-metaevidence/lgtcr6.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "title": "Remove an entry from Ledger Contract Domain Name registry v2", - "description": "Someone requested to remove an entry from Ledger Contract Domain Name registry v2", - "rulingOptions": { - "titles": [ - "Yes, Remove It", - "No, Don't Remove It" - ], - "descriptions": [ - "Select this if you think the entry does not comply with the required criteria and should be removed.", - "Select this if you think the entry complies with the required criteria and should not be removed." - ] - }, - "category": "Curated Lists", - "question": "Does the entry comply with the required criteria?", - "fileURI": "/ipfs/QmdvkC5Djgk8MfX5ijJR3NJzmvGugUqvui7bKuTErSD6cE/contract-domain-name-registry-for-ledger-policy-3-.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmNhJXtMrxeJu4fpchPruGrL93bm2M4VmDZ8pj4x6FqnHJ/index.html", - "metadata": { - "tcrTitle": "Ledger Contract Domain Name registry v2", - "tcrDescription": "A list of contract addresses and the domain names they are meant to be used from .", - "columns": [ - { - "label": "Contract address", - "description": "The address of the contract in question. Case-sensitive only if required by the blockchain that the address pertains to (e.g. Solana). ", - "type": "rich address", - "isIdentifier": true - }, - { - "label": "Domain name", - "description": "The specific (sub)domain name of the dApp where this contract is meant to be accessed from. Wildcards (*) are acceptable as part of this field if proof can be shown that the contract is intended to be used across multiple domains.", - "type": "text", - "isIdentifier": true - }, - { - "label": "Visual proof", - "description": "If the domain is a specific root or subdomain, this must be a screenshot of the exact page and setup where this particular address can be interacted from.", - "type": "image", - "isIdentifier": false - } - ], - "itemName": "entry", - "itemNamePlural": "entries", - "logoURI": "/ipfs/QmNNSDkpyDX1wB4NNFdAzaHsJihpvgNVV89zCH8FH9CVAz/ledger-white.png", - "requireRemovalEvidence": true, - "isTCRofTCRs": false, - "relTcrDisabled": true - } -} diff --git a/kleros-sdk/config/v1-metaevidence/linguo-meta-evidence1.json b/kleros-sdk/config/v1-metaevidence/linguo-meta-evidence1.json deleted file mode 100644 index f26134ee9..000000000 --- a/kleros-sdk/config/v1-metaevidence/linguo-meta-evidence1.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "title": "Review a translation from Linguo", - "description": "Someone challenged a translation", - "rulingOptions": { - "titles": [ - "Yes, the translation should be accepted", - "No, the translation should not be accepted" - ], - "descriptions": [ - "Select this if you think the translation complies with the required criteria.", - "Select this if you think the translation does not comply with the required criteria." - ] - }, - "aliases": { - "0xc3600bfC9Ec2c20E4c7d22c9235b6ddE63BA99a8": "Requester" - }, - "category": "Translation", - "question": "Does the translation comply with the required criteria?", - "fileURI": "/ipfs/QmVabp1VjJNYzXDxbcWFdeK17RvvA9eQy6eJVf1T1AzS1a/linguo-translation-quality-policy.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/Qmb5n6PgbshktJqGpwMAxP1moXEPaqq7ZvRufeXXhSPXxW/linguo-evidence-display/index.html", - "dynamicScriptURI": "/ipfs/QmPAHCRtSU844fdjNoEws8AgTpzzwsYwMF2wydtpvXAcoZ/linguo-script.js", - "dynamicScriptRequiredParams": [ - "disputeID", - "arbitrableContractAddress", - "arbitratorContractAddress", - "chainID", - "jsonRpcUrl" - ], - "metadata": { - "deadline": 1680307199, - "minPrice": "0", - "maxPrice": "500000000000000000000", - "sourceLanguage": "en-us", - "targetLanguage": "es", - "expectedQuality": "professional", - "title": "What do I think about network states?", - "wordCount": 7900, - "originalTextUrl": "https://vitalik.ca/general/2022/07/13/networkstates.html", - "originalTextFile": "/ipfs/QmY16SsM1uk7i2TLxGhUZR8iW74w4Luphry3SJeN6XyCTf/What do I think about network states.docx", - "__v": "1" - }, - "arbitrableChainID": 100, - "_v": "1.0.0" -} diff --git a/kleros-sdk/config/v1-metaevidence/linguo-meta-evidence2.json b/kleros-sdk/config/v1-metaevidence/linguo-meta-evidence2.json deleted file mode 100644 index a16247f43..000000000 --- a/kleros-sdk/config/v1-metaevidence/linguo-meta-evidence2.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "title": "Review a translation from Linguo", - "description": "Someone challenged a translation", - "rulingOptions": { - "titles": [ - "Yes, the translation should be accepted", - "No, the translation should not be accepted" - ], - "descriptions": [ - "Select this if you think the translation complies with the required criteria.", - "Select this if you think the translation does not comply with the required criteria." - ] - }, - "aliases": { - "0xc3600bfC9Ec2c20E4c7d22c9235b6ddE63BA99a8": "Requester" - }, - "category": "Translation", - "question": "Does the translation comply with the required criteria?", - "fileURI": "/ipfs/QmVabp1VjJNYzXDxbcWFdeK17RvvA9eQy6eJVf1T1AzS1a/linguo-translation-quality-policy.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/Qmb5n6PgbshktJqGpwMAxP1moXEPaqq7ZvRufeXXhSPXxW/linguo-evidence-display/index.html", - "dynamicScriptURI": "/ipfs/QmPAHCRtSU844fdjNoEws8AgTpzzwsYwMF2wydtpvXAcoZ/linguo-script.js", - "dynamicScriptRequiredParams": [ - "disputeID", - "arbitrableContractAddress", - "arbitratorContractAddress", - "chainID", - "jsonRpcUrl" - ], - "metadata": { - "deadline": 1704067199, - "minPrice": "0", - "maxPrice": "500000000000000000000", - "sourceLanguage": "en-us", - "targetLanguage": "es", - "expectedQuality": "professional", - "title": "Moving beyond coin voting governance", - "wordCount": 5100, - "originalTextUrl": "https://vitalik.ca/general/2021/08/16/voting3.html", - "originalTextFile": "/ipfs/Qmaq181thsnUyUknbnbQfJUHYRTFvA8z83f9BKY68t5pnf/Moving beyond coin voting governance.docx", - "__v": "1" - }, - "arbitrableChainID": 100, - "_v": "1.0.0" -} diff --git a/kleros-sdk/config/v1-metaevidence/omen1.json b/kleros-sdk/config/v1-metaevidence/omen1.json deleted file mode 100644 index a8ad1643a..000000000 --- a/kleros-sdk/config/v1-metaevidence/omen1.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "title": "Add a list to Omen Verified Market enabled badges", - "description": "Someone requested to add a list to Omen Verified Market enabled badges.", - "rulingOptions": { - "titles": [ - "Yes, Add It", - "No, Don't Add It" - ], - "descriptions": [ - "Select this if you think the list complies with the required criteria and should be added.", - "Select this if you think the list does not comply with the required criteria and should not be added." - ] - }, - "category": "Curated Lists", - "question": "Does the list comply with the required criteria?", - "fileURI": "/ipfs/QmZ7RVU7re1g8nXDbAFMHV99pyie3dn4cY7Ga2X4h8mDpV/reject-all-policy.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmUbBGRTCH3zxTFSNJ1asUFtpwvyXasrzhzLxYVMoEW8Nc/index.html", - "evidenceDisplayInterfaceHash": "Bcd2grgxgJ1i88wpbF6iD4kaGkjp4gZfcsYxKJVMELZQLGurwLXQMPMJiNmn5Q6ctUbgwDUpXXwLspTTaWQWEoceE5", - "metadata": { - "tcrTitle": "Omen Verified Market enabled badges", - "tcrDescription": "A List of lists related to Omen Verified Market", - "columns": [ - { - "label": "Address", - "description": "The Badges list address", - "type": "GTCR address", - "isIdentifier": true - }, - { - "label": "Match File URI", - "description": "The URI to the JSON file for matching columns for each list.", - "type": "text" - } - ], - "itemName": "list", - "itemNamePlural": "lists", - "isConnectedTCR": true, - "requireRemovalEvidence": true, - "isTCRofTCRs": true, - "parentTCRAddress": "0xb72103eE8819F2480c25d306eEAb7c3382fBA612", - "relTcrDisabled": true - } -} diff --git a/kleros-sdk/config/v1-metaevidence/omen2.json b/kleros-sdk/config/v1-metaevidence/omen2.json deleted file mode 100644 index 851954c68..000000000 --- a/kleros-sdk/config/v1-metaevidence/omen2.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "title": "Remove a list from Omen Verified Market enabled badges", - "description": "Someone requested to remove a list from Omen Verified Market enabled badges.", - "rulingOptions": { - "titles": [ - "Yes, Remove It", - "No, Don't Remove It" - ], - "descriptions": [ - "Select this if you think the list does not comply with the required criteria and should be removed.", - "Select this if you think the list complies with the required criteria and should not be removed." - ] - }, - "category": "Curated Lists", - "question": "Does the list comply with the required criteria?", - "fileURI": "/ipfs/QmZ7RVU7re1g8nXDbAFMHV99pyie3dn4cY7Ga2X4h8mDpV/reject-all-policy.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmUbBGRTCH3zxTFSNJ1asUFtpwvyXasrzhzLxYVMoEW8Nc/index.html", - "evidenceDisplayInterfaceHash": "Bcd2grgxgJ1i88wpbF6iD4kaGkjp4gZfcsYxKJVMELZQLGurwLXQMPMJiNmn5Q6ctUbgwDUpXXwLspTTaWQWEoceE5", - "metadata": { - "tcrTitle": "Omen Verified Market enabled badges", - "tcrDescription": "A List of lists related to Omen Verified Market", - "columns": [ - { - "label": "Address", - "description": "The Badges list address", - "type": "GTCR address", - "isIdentifier": true - }, - { - "label": "Match File URI", - "description": "The URI to the JSON file for matching columns for each list.", - "type": "text" - } - ], - "itemName": "list", - "itemNamePlural": "lists", - "isConnectedTCR": true, - "requireRemovalEvidence": true, - "isTCRofTCRs": true, - "parentTCRAddress": "0xb72103eE8819F2480c25d306eEAb7c3382fBA612", - "relTcrDisabled": true - } -} diff --git a/kleros-sdk/config/v1-metaevidence/omen3.json b/kleros-sdk/config/v1-metaevidence/omen3.json deleted file mode 100644 index f47dd55e9..000000000 --- a/kleros-sdk/config/v1-metaevidence/omen3.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "title": "Add a market to Omen Verified Market", - "description": "Someone requested to add a market to Omen Verified Market", - "rulingOptions": { - "titles": [ - "Yes, Add It", - "No, Don't Add It" - ], - "descriptions": [ - "Select this if you think the market complies with the required criteria and should be added.", - "Select this if you think the market does not comply with the required criteria and should not be added." - ] - }, - "category": "Curated Lists", - "question": "Does the market comply with the required criteria?", - "fileURI": "/ipfs/QmPhEBstumEP84eSftx9MwBmSXBCGRFJMPZauKVa9gBizh/omen-verified-market.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmUbBGRTCH3zxTFSNJ1asUFtpwvyXasrzhzLxYVMoEW8Nc/index.html", - "evidenceDisplayInterfaceHash": "Bcd2grgxgJ1i88wpbF6iD4kaGkjp4gZfcsYxKJVMELZQLGurwLXQMPMJiNmn5Q6ctUbgwDUpXXwLspTTaWQWEoceE5", - "metadata": { - "tcrTitle": "Omen Verified Market", - "tcrDescription": "Safe Omen markets which are unlikely to be considered invalid and are not tricky", - "columns": [ - { - "label": "Question", - "description": "The question of the market", - "type": "text", - "isIdentifier": true - }, - { - "label": "Market URL", - "description": "Link to the Omen market in the form https://omen.eth.link/#/MARKET_ADDRESS", - "type": "link", - "isIdentifier": true - } - ], - "itemName": "market", - "itemNamePlural": "markets", - "logoURI": "/ipfs/QmSvhGvYvwzWVeBPSvTmttAyFU3PLHczRtMMexVcSmfbbh/omen-badge-tcr-.png", - "requireRemovalEvidence": true, - "isTCRofTCRs": false, - "relTcrDisabled": true - } -} diff --git a/kleros-sdk/config/v1-metaevidence/omen4.json b/kleros-sdk/config/v1-metaevidence/omen4.json deleted file mode 100644 index c2665fec0..000000000 --- a/kleros-sdk/config/v1-metaevidence/omen4.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "title": "Remove a market from Omen Verified Market", - "description": "Someone requested to remove a market from Omen Verified Market", - "rulingOptions": { - "titles": [ - "Yes, Remove It", - "No, Don't Remove It" - ], - "descriptions": [ - "Select this if you think the market does not comply with the required criteria and should be removed.", - "Select this if you think the market complies with the required criteria and should not be removed." - ] - }, - "category": "Curated Lists", - "question": "Does the market comply with the required criteria?", - "fileURI": "/ipfs/QmPhEBstumEP84eSftx9MwBmSXBCGRFJMPZauKVa9gBizh/omen-verified-market.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmUbBGRTCH3zxTFSNJ1asUFtpwvyXasrzhzLxYVMoEW8Nc/index.html", - "evidenceDisplayInterfaceHash": "Bcd2grgxgJ1i88wpbF6iD4kaGkjp4gZfcsYxKJVMELZQLGurwLXQMPMJiNmn5Q6ctUbgwDUpXXwLspTTaWQWEoceE5", - "metadata": { - "tcrTitle": "Omen Verified Market", - "tcrDescription": "Safe Omen markets which are unlikely to be considered invalid and are not tricky", - "columns": [ - { - "label": "Question", - "description": "The question of the market", - "type": "text", - "isIdentifier": true - }, - { - "label": "Market URL", - "description": "Link to the Omen market in the form https://omen.eth.link/#/MARKET_ADDRESS", - "type": "link", - "isIdentifier": true - } - ], - "itemName": "market", - "itemNamePlural": "markets", - "logoURI": "/ipfs/QmSvhGvYvwzWVeBPSvTmttAyFU3PLHczRtMMexVcSmfbbh/omen-badge-tcr-.png", - "requireRemovalEvidence": true, - "isTCRofTCRs": false, - "relTcrDisabled": true - } -} diff --git a/kleros-sdk/config/v1-metaevidence/omen5.json b/kleros-sdk/config/v1-metaevidence/omen5.json deleted file mode 100644 index 8b6329f2b..000000000 --- a/kleros-sdk/config/v1-metaevidence/omen5.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "title": "Add a list to The Registry enabled badges", - "description": "Someone requested to add a list to The Registry enabled badges.", - "rulingOptions": { - "titles": [ - "Yes, Add It", - "No, Don't Add It" - ], - "descriptions": [ - "Select this if you think the list complies with the required criteria and should be added.", - "Select this if you think the list does not comply with the required criteria and should not be added." - ] - }, - "category": "Curated Lists", - "question": "Does the list comply with the required criteria?", - "fileURI": "/ipfs/QmZ7RVU7re1g8nXDbAFMHV99pyie3dn4cY7Ga2X4h8mDpV/reject-all-policy.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmWYu43qp5VTH9LFaUfFv7qDRfkSr7ZLNXZNxYqdpww3ts/index.html", - "evidenceDisplayInterfaceHash": "Bccx364PTgwmxVLmpoWgQMNMJLSAscbp7gbYf6aA9guUDW2wkzQHapcZNrgDcuxFVhngv8U8NAjrFUXfucSPUQ1b1W", - "metadata": { - "tcrTitle": "The Registry enabled badges", - "tcrDescription": "A List of lists related to The Registry", - "columns": [ - { - "label": "Address", - "description": "The Badges list address", - "type": "GTCR address", - "isIdentifier": true - }, - { - "label": "Match File URI", - "description": "The URI to the JSON file for matching columns for each list.", - "type": "text" - } - ], - "itemName": "list", - "itemNamePlural": "lists", - "isConnectedTCR": true, - "requireRemovalEvidence": true, - "isTCRofTCRs": true, - "parentTCRAddress": "0xbA0304273a54dfeC1Fc7f4BCCbf4b15519AEcF15", - "relTcrDisabled": true - } -} diff --git a/kleros-sdk/config/v1-metaevidence/poh1.json b/kleros-sdk/config/v1-metaevidence/poh1.json deleted file mode 100644 index 868e4dfd4..000000000 --- a/kleros-sdk/config/v1-metaevidence/poh1.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "category": "Curated List", - "title": "Proof of Humanity Registration Request", - "description": "A request to register the specified entry to a list of provable humans.", - "question": "Should the request to register be accepted?", - "fileURI": "/ipfs/QmXDiiBAizCPoLqHvcfTzuMT7uvFEe1j3s4TgoWWd4k5np/proof-of-humanity-registry-policy-v1.3.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmSL8d82dMhcThwERWaF4LtmCa4hgV7TyPjAo4fKCzPVkv/index.html", - "rulingOptions": { - "type": "single-select", - "titles": [ - "Yes", - "No" - ], - "descriptions": [ - "Accept the request to register the entry.", - "Deny the request." - ] - } -} diff --git a/kleros-sdk/config/v1-metaevidence/poh2.json b/kleros-sdk/config/v1-metaevidence/poh2.json deleted file mode 100644 index a3dcd1efe..000000000 --- a/kleros-sdk/config/v1-metaevidence/poh2.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "category": "Curated List", - "title": "Proof of Humanity Clearing Request", - "description": "A request to remove the specified entry from a list of provable humans.", - "question": "Should the request to remove be accepted?", - "fileURI": "/ipfs/QmXDiiBAizCPoLqHvcfTzuMT7uvFEe1j3s4TgoWWd4k5np/proof-of-humanity-registry-policy-v1.3.pdf", - "evidenceDisplayInterfaceURI": "/ipfs/QmSL8d82dMhcThwERWaF4LtmCa4hgV7TyPjAo4fKCzPVkv/index.html", - "rulingOptions": { - "type": "single-select", - "titles": [ - "Yes", - "No" - ], - "descriptions": [ - "Accept the request to remove the entry.", - "Deny the request." - ] - } -} diff --git a/kleros-sdk/config/v1-metaevidence/reality.json b/kleros-sdk/config/v1-metaevidence/reality.json deleted file mode 100644 index 3be4c7834..000000000 --- a/kleros-sdk/config/v1-metaevidence/reality.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "category": "Oracle", - "title": "Realitio Question", - "description": "A Realitio question has been raised to arbitration.", - "question": "Give the answer to the question.", - "evidenceDisplayInterfaceURI": "/ipfs/QmQTnGNbRFpsS8zevPZTZA2ZioBKWM6u1HVCf9vLWkRuEH/index.html", - "dynamicScriptURI": "/ipfs/QmNhs2mo7t8pydn7gg6ycrtT4mhfvhARLEoyMYgs9SDkH2" -} diff --git a/kleros-sdk/config/v1-metaevidence/realityWithAppeals-gnosis-moderate.json b/kleros-sdk/config/v1-metaevidence/realityWithAppeals-gnosis-moderate.json deleted file mode 100644 index 3c2dbcd71..000000000 --- a/kleros-sdk/config/v1-metaevidence/realityWithAppeals-gnosis-moderate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "category": "Oracle", - "title": "A reality.eth question", - "description": "A reality.eth question has been raised to arbitration.", - "question": "Give an answer to the question.", - "evidenceDisplayInterfaceURI": "/ipfs/QmVXEiTexPd4EcQTjrxbFa88ZNFkBB8kT8BQUxtVn8fZJB/index.html", - "dynamicScriptURI": "/ipfs/QmWWsDmvjhR9UVRgkcG75vAKzfK3vB85EkZzudnaxwfAWr/bundle.js", - "fileURI": "/ipfs/QmW4zDA8X95cyfAsW9Nq1t7XNTyP3sMQAWNRFoQhMpgAv7/Kleros%2520Moderate%2520x%2520Reality.eth%2520Oracle%2520-%2520Telegram%2520Content%2520Moderation%2520Question%2520Resolution%2520Policy.pdf", - "arbitrableChainID": "100", - "arbitratorChainID": "100", - "dynamicScriptRequiredParams": [ - "arbitrableChainID", - "arbitrableJsonRpcUrl", - "arbitrableContractAddress" - ], - "evidenceDisplayInterfaceRequiredParams": [ - "arbitrableChainID", - "arbitrableJsonRpcUrl", - "arbitrableContractAddress" - ] -} diff --git a/kleros-sdk/config/v1-metaevidence/realityWithAppeals-gnosis.json b/kleros-sdk/config/v1-metaevidence/realityWithAppeals-gnosis.json deleted file mode 100644 index ff785421f..000000000 --- a/kleros-sdk/config/v1-metaevidence/realityWithAppeals-gnosis.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "category": "Oracle", - "title": "A reality.eth question", - "description": "A reality.eth question has been raised to arbitration.", - "question": "Give an answer to the question.", - "evidenceDisplayInterfaceURI": "/ipfs/QmVXEiTexPd4EcQTjrxbFa88ZNFkBB8kT8BQUxtVn8fZJB/index.html", - "dynamicScriptURI": "/ipfs/QmceDSKpVa9o3ycQ1GD2mTTkAZ4AjPncucV4BcMdV4pazv/bundle.js", - "fileURI": "/ipfs/QmaUr6hnSVxYD899xdcn2GUVtXVjXoSXKZbce3zFtGWw4H/Question_Resolution_Policy.pdf", - "arbitrableChainID": "100", - "arbitratorChainID": "100", - "dynamicScriptRequiredParams": [ - "arbitrableChainID", - "arbitrableJsonRpcUrl", - "arbitrableContractAddress" - ], - "evidenceDisplayInterfaceRequiredParams": [ - "arbitrableChainID", - "arbitrableJsonRpcUrl", - "arbitrableContractAddress" - ] -} diff --git a/kleros-sdk/config/v1-metaevidence/realityWithAppeals.json b/kleros-sdk/config/v1-metaevidence/realityWithAppeals.json deleted file mode 100644 index 70ba17c44..000000000 --- a/kleros-sdk/config/v1-metaevidence/realityWithAppeals.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "category": "Oracle", - "title": "A reality.eth question", - "description": "A reality.eth question has been raised to arbitration.", - "question": "Give an answer to the question.", - "evidenceDisplayInterfaceURI": "/ipfs/QmWCmzMB4zbzii8HV9HFGa8Evgt5i63GyveJtw2umxRrcX/reality-evidence-display-4/index.html", - "dynamicScriptURI": "/ipfs/QmWWsDmvjhR9UVRgkcG75vAKzfK3vB85EkZzudnaxwfAWr/bundle.js", - "fileURI": "/ipfs/QmaUr6hnSVxYD899xdcn2GUVtXVjXoSXKZbce3zFtGWw4H/Question_Resolution_Policy.pdf", - "arbitrableChainID": "1", - "arbitratorChainID": "1", - "dynamicScriptRequiredParams": [ - "arbitrableChainID", - "arbitrableJsonRpcUrl", - "arbitrableContractAddress" - ], - "evidenceDisplayInterfaceRequiredParams": [ - "arbitrableChainID", - "arbitrableJsonRpcUrl", - "arbitrableContractAddress" - ] -} diff --git a/kleros-sdk/config/v1-metaevidence/resolver.json b/kleros-sdk/config/v1-metaevidence/resolver.json deleted file mode 100644 index 660c5bb3e..000000000 --- a/kleros-sdk/config/v1-metaevidence/resolver.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "title": "The Assassination Plot: The Case of Draco Malfoy vs. Albus Dumbledore", - "category": "Fictional", - "description": "In the Harry Potter and the Half-Blood Prince movie, there is a dispute between Albus Dumbledore and Draco Malfoy over the attempted assassination of Dumbledore.\n\n#Background: \nDraco Malfoy, a student at Hogwarts School of Witchcraft and Wizardry and a member of the pure-blood Malfoy family, is entrusted with the task of assassinating Dumbledore by Lord Voldemort. Dumbledore becomes aware of the plot and confronts Malfoy, offering him a chance to back out and revealing the true extent of the danger and moral implications of his actions. However, Malfoy ultimately decides to go through with the assassination attempt, leading to a confrontation between Dumbledore and Malfoy.\n\nAfter considering all the evidence, the jurors would have to decide whether Malfoy was guilty of attempted murder or if he was acting under duress. The Kleros Court's decision would be final and binding, bringing a resolution to the dispute.", - "aliases": {}, - "question": "Was Draco Malfoy guilty of attempted murder in the assassination plot against Albus Dumbledore?", - "rulingOptions": { - "type": "single-select", - "titles": [ - "Yes", - "No" - ], - "descriptions": [ - "Draco Malfoy is guilty of attempted murder in the assassination plot against Albus Dumbledore.", - "Draco Malfoy is not guilty of attempted murder in the assassination plot against Albus Dumbledore." - ] - }, - "fileURI": "", - "dynamicScriptURI": "/ipfs/QmZZHwVaXWtvChdFPG4UeXStKaC9aHamwQkNTEAfRmT2Fj" -} diff --git a/kleros-sdk/config/v1-metaevidence/tokens-ethfinex1.json b/kleros-sdk/config/v1-metaevidence/tokens-ethfinex1.json deleted file mode 100644 index 689ec2e79..000000000 --- a/kleros-sdk/config/v1-metaevidence/tokens-ethfinex1.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "category": "Curated Lists", - "title": "Add Ethfinex Badge to Token", - "description": "Someone requested to add the the Ethfinex badge to a token.\n\nDescription\n\nTokens with the Ethfinex badge can participate in the Ethfinex Community Vote to become traded on the Ethfinex platform. To be eligible to receive the badge, the project and it's associated token must comply with the minimum set of criteria defined in the criteria document.", - "aliases": { - "0x988b3a538b618c7a603e1c11ab82cd16dbe28069": "Arbitrator" - }, - "question": "Should the badge be added to the token?", - "rulingOptions": { - "titles": [ - "Yes, Add It", - "No, Don't Add It" - ], - "descriptions": [ - "Select this if you think the token and project comply with the required criteria and the badge should be added.", - "Select this if you think the token and/or project do(es) not comply with the required criteria and the badge should not be added." - ] - }, - "fileURI": "/ipfs/QmVzwEBpGsbFY3UgyjA3SxgGXx3r5gFGynNpaoXkp6jenu/Ethfinex%20Court%20Policy.pdf", - "evidenceDisplayInterfaceURL": "https://badge-evidence.netlify.com", - "evidenceDisplayInterfaceHash": "Bccx3a2NSSihnHisifP6H67uYw7BeECZkXKYnBB8Vb9zbACNwzLWFyBbyudkJuGZMtNphEnyuwq5zup8ewdAyEmhjb", - "variables": { - "title": "Ethfinex Listing", - "symbolURI": "/ipfs/QmW3JLmpHnf7qNT4FYaguAF1Awma8adk81jUTuFWY1HVge/ethfinex.svg", - "description": "Tokens compliant with the Ethfinex Listing Criteria are eligible to participate in the Ethfinex Community Vote and become traded on the Ethfinex platform.", - "criteriaDescription": "To be eligible to receive the badge, the project and it's associated token must comply with the Ethfinex Listing Criteria." - } -} diff --git a/kleros-sdk/config/v1-metaevidence/tokens-ethfinex2.json b/kleros-sdk/config/v1-metaevidence/tokens-ethfinex2.json deleted file mode 100644 index c5261f96f..000000000 --- a/kleros-sdk/config/v1-metaevidence/tokens-ethfinex2.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "category": "Curated Lists", - "title": "Remove Ethfinex Badge From Token", - "description": "Someone requested to remove the the Ethfinex badge from a token.\n\nDescription\n\nTokens with the Ethfinex badge can participate in the Ethfinex Community Vote to become traded on the Ethfinex platform. To be eligible to receive the badge, the project and it's associated token must comply with the minimum set of criteria defined in the criteria document.", - "aliases": { - "0x988b3a538b618c7a603e1c11ab82cd16dbe28069": "Arbitrator" - }, - "question": "Should the badge be removed from the token?", - "rulingOptions": { - "titles": [ - "Yes, Remove It", - "No, Don't Remove It" - ], - "descriptions": [ - "Select this if you think the token and/or project do(es) not comply with the required criteria and the badge should be removed.", - "Select this if you think the token and project comply with the required criteria and the badge should be kept." - ] - }, - "fileURI": "/ipfs/QmVzwEBpGsbFY3UgyjA3SxgGXx3r5gFGynNpaoXkp6jenu/Ethfinex%20Court%20Policy.pdf", - "evidenceDisplayInterfaceURL": "https://badge-evidence.netlify.com", - "evidenceDisplayInterfaceHash": "Bccx3a2NSSihnHisifP6H67uYw7BeECZkXKYnBB8Vb9zbACNwzLWFyBbyudkJuGZMtNphEnyuwq5zup8ewdAyEmhjb", - "variables": { - "title": "Ethfinex Listing", - "symbolURI": "/ipfs/QmW3JLmpHnf7qNT4FYaguAF1Awma8adk81jUTuFWY1HVge/ethfinex.svg", - "description": "Tokens compliant with the Ethfinex Listing Criteria are eligible to participate in the Ethfinex Community Vote and become traded on the Ethfinex platform.", - "criteriaDescription": "To be eligible to receive the badge, the project and it's associated token must comply with the Ethfinex Listing Criteria." - } -} diff --git a/kleros-sdk/config/v1-metaevidence/tokens1.json b/kleros-sdk/config/v1-metaevidence/tokens1.json deleted file mode 100644 index f8b1c1dee..000000000 --- a/kleros-sdk/config/v1-metaevidence/tokens1.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "category": "Curated Lists", - "title": "Add Token to Registry", - "description": "Someone requested to add a token to the token curated registry of tokens.", - "aliases": { - "0x988b3a538b618c7a603e1c11ab82cd16dbe28069": "Arbitrator" - }, - "question": "Should the token be added to the registry?", - "rulingOptions": { - "titles": [ - "Yes, Add It", - "No, Don't Add It" - ], - "descriptions": [ - "Select this if you think the token information is correct and the token should be added to the registry.", - "Select this if you think the token information is incorrect and the token should be not be added to the registry." - ] - }, - "fileURI": "/ipfs/QmTL1SCKpRcr7NRbVpXW6z9QoQXRHJT5cQr6PEge5qoLwU/t2cr-primary-document.pdf", - "evidenceDisplayInterfaceURL": "https://cdn.kleros.link/ipfs/QmYs17mAJTaQwYeXNTb6n4idoQXmRcAjREeUdjJShNSeKh/index.html" -} diff --git a/kleros-sdk/config/v1-metaevidence/tokens2.json b/kleros-sdk/config/v1-metaevidence/tokens2.json deleted file mode 100644 index 9f6ba948c..000000000 --- a/kleros-sdk/config/v1-metaevidence/tokens2.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "category": "Curated Lists", - "title": "Remove Token from Registry", - "description": "Someone requested to remove a token from a token curated registry of tokens.", - "aliases": { - "0x988b3a538b618c7a603e1c11ab82cd16dbe28069": "Arbitrator" - }, - "question": "Should the token be removed from the registry?", - "rulingOptions": { - "titles": [ - "Yes, Remove It", - "No, Keep It" - ], - "descriptions": [ - "Select this if you think the token information is incorrect and the token should be removed from the registry.", - "Select this if you think the token information is correct and the token should not be removed from the registry." - ] - }, - "fileURI": "/ipfs/QmTL1SCKpRcr7NRbVpXW6z9QoQXRHJT5cQr6PEge5qoLwU/t2cr-primary-document.pdf", - "evidenceDisplayInterfaceURL": "https://cdn.kleros.link/ipfs/QmYs17mAJTaQwYeXNTb6n4idoQXmRcAjREeUdjJShNSeKh/index.html" -} diff --git a/kleros-sdk/config/v1-metaevidence/unslashed.json b/kleros-sdk/config/v1-metaevidence/unslashed.json deleted file mode 100644 index 5745cda90..000000000 --- a/kleros-sdk/config/v1-metaevidence/unslashed.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "category": "Insurance", - "title": "Unslashed insurance claim", - "description": "The claimant requested a compensation for damages covered by Unslashed insurance in the provided amount.", - "question": "Should their claim be paid out?", - "rulingOptions": { - "type": "single-select", - "titles": [ - "Accept the claim", - "Reject the claim" - ], - "descriptions": [ - "Accept the claim if the claimant 1) incurred the alleged damages, 2) is covered by a relevant policy, 3) the damages and their cover are at least the claimed amount at the moment when the claim was filled.", - "Reject the claim if any of the acceptance criteria do not hold." - ] - }, - "fileURI": "/ipfs/QmeTBY7jZe2ut5WjifNASADo3E4zBxkMd62WwBpXtwP9pg", - "evidenceDisplayInterfaceURI": "https://app.unslashed.finance/embed/claims" -} diff --git a/kleros-sdk/config/v2-disputetemplate/DisputeDetails.default.jsonc b/kleros-sdk/config/v2-disputetemplate/DisputeDetails.default.jsonc deleted file mode 100644 index 6106c901a..000000000 --- a/kleros-sdk/config/v2-disputetemplate/DisputeDetails.default.jsonc +++ /dev/null @@ -1,23 +0,0 @@ -{ - // Sensible defaults which are not expected to be specified by the arbitrable. - "type": "single-select", - "answers": [ - { - "id": "0x00", - "title": "Invalid/Refuse to Arbitrate", - "reserved": true - }, - { - "id": "0x01", - "reserved": false - }, - { - "id": "0x02", - "reserved": false - } - ], - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "lang": "en_US", - "specification": "KIP000" -} diff --git a/kleros-sdk/config/v2-disputetemplate/NewDisputeTemplate.schema.json b/kleros-sdk/config/v2-disputetemplate/NewDisputeTemplate.schema.json deleted file mode 100644 index 2b6cf9a8f..000000000 --- a/kleros-sdk/config/v2-disputetemplate/NewDisputeTemplate.schema.json +++ /dev/null @@ -1,415 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2019-09/schema", - "$id": "NewDisputeTemplate.schema.json", - "type": "object", - "default": {}, - "title": "Root Schema", - "required": [ - "title", - "description", - "question", - "frontendUrl", - "policyURI", - "arbitrableChainID", - "arbitrableAddress", - "arbitratorChainID", - "arbitratorAddress" - ], - "additionalProperties": false, - "properties": { - "$schema": { - "description": "JSON Schema URI (used by some editors)", - "type": "string", - "default": "NewDisputeTemplate.schema.json" - }, - "title": { - "type": "string", - "default": "", - "title": "The title Schema", - "examples": [ - "A reality.eth question", - "Add Ethfinex Badge to Token", - "Add Token to Registry", - "Add a list to Consensus Layer Withdrawal Protection enabled badges", - "Add a list to Omen Verified Market enabled badges", - "Add a list to The Registry enabled badges", - "Add a market to Omen Verified Market", - "Add a validator to Consensus Layer Withdrawal Protection", - "Add an entry to Ledger Contract Domain Name registry v2", - "Proof of Humanity Clearing Request", - "Proof of Humanity Registration Request", - "Realitio Question", - "Remove Ethfinex Badge From Token", - "Remove Token from Registry", - "Remove a list from Consensus Layer Withdrawal Protection enabled badges", - "Remove a list from Omen Verified Market enabled badges", - "Remove a market from Omen Verified Market", - "Remove a validator from Consensus Layer Withdrawal Protection", - "Remove an entry from Ledger Contract Domain Name registry v2", - "Review a translation from Linguo", - "Unslashed insurance claim" - ] - }, - "description": { - "type": "string", - "default": "", - "title": "The description Schema", - "examples": [ - "A Reality.eth question has been raised to arbitration.", - "A request to register the specified entry to a list of provable humans.", - "A request to remove the specified entry from a list of provable humans.", - "Someone challenged a translation", - "Someone requested to add a list to Consensus Layer Withdrawal Protection enabled badges.", - "Someone requested to add a list to Omen Verified Market enabled badges.", - "Someone requested to add a list to The Registry enabled badges.", - "Someone requested to add a market to Omen Verified Market", - "Someone requested to add a token to the token curated registry of tokens.", - "Someone requested to add a validator to Consensus Layer Withdrawal Protection", - "Someone requested to add an entry to Ledger Contract Domain Name registry v2", - "Someone requested to add the the Ethfinex badge to a token.\n\nDescription\n\nTokens with the Ethfinex badge can participate in the Ethfinex Community Vote to become traded on the Ethfinex platform. To be eligible to receive the badge, the project and it's associated token must comply with the minimum set of criteria defined in the criteria document.", - "Someone requested to remove a list from Consensus Layer Withdrawal Protection enabled badges.", - "Someone requested to remove a list from Omen Verified Market enabled badges.", - "Someone requested to remove a market from Omen Verified Market", - "Someone requested to remove a token from a token curated registry of tokens.", - "Someone requested to remove a validator from Consensus Layer Withdrawal Protection", - "Someone requested to remove an entry from Ledger Contract Domain Name registry v2", - "Someone requested to remove the the Ethfinex badge from a token.\n\nDescription\n\nTokens with the Ethfinex badge can participate in the Ethfinex Community Vote to become traded on the Ethfinex platform. To be eligible to receive the badge, the project and it's associated token must comply with the minimum set of criteria defined in the criteria document.", - "The claimant requested a compensation for damages covered by Unslashed insurance in the provided amount." - ] - }, - "question": { - "type": "string", - "default": "", - "title": "The question Schema", - "examples": [ - "Does the entry comply with the required criteria?", - "Does the list comply with the required criteria?", - "Does the market comply with the required criteria?", - "Does the translation comply with the required criteria?", - "Does the validator comply with the required criteria?", - "Give the answer to the question.", - "Should the badge be added to the token?", - "Should the badge be removed from the token?", - "Should the request to register be accepted?", - "Should the request to remove be accepted?", - "Should the token be added to the registry?", - "Should the token be removed from the registry?", - "Should their claim be paid out?", - "Which party abided by terms of the contract?" - ] - }, - "type": { - "title": "The type Schema", - "description": "An explanation about the purpose of this instance.", - "type": "string", - "default": "single-select", - "examples": [ - "single-select" - ], - "enum": [ - "bool", - "uint", - "single-select", - "multiple-select", - "datetime" - ] - }, - "answers": { - "type": "array", - "default": [ - { - "id": "0x00", - "title": "Invalid/Refuse to Arbitrate", - "reserved": true - }, - { - "id": "0x01", - "title": "Yes", - "description": "Accept the request.", - "reserved": false - }, - { - "id": "0x02", - "title": "No", - "description": "Refuse the request.", - "reserved": false - } - ], - "title": "The answers Schema", - "items": { - "type": "object", - "default": {}, - "title": "A Schema", - "required": [ - "title" - ], - "dependentSchemas": { - "id": { - "properties": { - "reserved": { - "const": true - } - } - } - }, - "if": { - "properties": { - "reserved": { - "const": true - } - } - }, - "then": { - "dependentRequired": { - "id": true - } - }, - "additionalProperties": false, - "properties": { - "id": { - "type": "string", - "default": "", - "title": "The id Schema", - "examples": [ - "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ] - }, - "title": { - "type": "string", - "default": "", - "title": "The title Schema", - "examples": [ - "Accept the claim", - "No", - "No, Don't Add It", - "No, Don't Remove It", - "No, Keep It", - "No, the translation should not be accepted", - "Pay Receiver", - "Refund Sender", - "Reject the claim", - "Yes", - "Yes, Add It", - "Yes, Remove It", - "Yes, the translation should be accepted", - "Answered Too Soon", - "Invalid/Refuse to Arbitrate" - ] - }, - "description": { - "type": "string", - "default": "", - "title": "The description Schema", - "examples": [ - "Accept the request to register the entry.", - "Accept the request to remove the entry.", - "Deny the request.", - "Reject the claim if any of the acceptance criteria do not hold.", - "Select this if you think the entry complies with the required criteria and should be added.", - "Select this if you think the entry complies with the required criteria and should not be removed.", - "Select this if you think the entry does not comply with the required criteria and should be removed.", - "Select this if you think the entry does not comply with the required criteria and should not be added.", - "Select this if you think the list complies with the required criteria and should be added.", - "Select this if you think the list complies with the required criteria and should not be removed.", - "Select this if you think the list does not comply with the required criteria and should be removed.", - "Select this if you think the list does not comply with the required criteria and should not be added.", - "Select this if you think the market complies with the required criteria and should be added.", - "Select this if you think the market complies with the required criteria and should not be removed.", - "Select this if you think the market does not comply with the required criteria and should be removed.", - "Select this if you think the market does not comply with the required criteria and should not be added.", - "Select this if you think the token and project comply with the required criteria and the badge should be added.", - "Select this if you think the token and project comply with the required criteria and the badge should be kept.", - "Select this if you think the token and/or project do(es) not comply with the required criteria and the badge should be removed.", - "Select this if you think the token and/or project do(es) not comply with the required criteria and the badge should not be added.", - "Select this if you think the token information is correct and the token should be added to the registry.", - "Select this if you think the token information is correct and the token should not be removed from the registry.", - "Select this if you think the token information is incorrect and the token should be not be added to the registry.", - "Select this if you think the token information is incorrect and the token should be removed from the registry.", - "Select this if you think the translation complies with the required criteria.", - "Select this if you think the translation does not comply with the required criteria.", - "Select this if you think the validator complies with the required criteria and should be added.", - "Select this if you think the validator complies with the required criteria and should not be removed.", - "Select this if you think the validator does not comply with the required criteria and should be removed.", - "Select this if you think the validator does not comply with the required criteria and should not be added.", - "Select to release funds to the Receiver", - "Select to return funds to the Sender" - ] - }, - "reserved": { - "type": "boolean", - "default": false, - "title": "The reserved Schema", - "examples": [ - true, - false - ] - } - }, - "examples": [ - { - "title": "Yes", - "description": "Accept the request." - }, - { - "title": "No", - "description": "Refuse the request." - } - ] - } - }, - "frontendUrl": { - "type": "string", - "default": "", - "title": "The frontendUrl Schema", - "examples": [ - "https://curate.kleros.io/tcr/1/0x0000000000000000000000000000000000000000/0x0000000000000000000000000000000000000000000000000000000000000000", - "https://reality.eth.link/app/#!/question/0x0000000000000000000000000000000000000000000000000000000000000000/0" - ] - }, - "policyURI": { - "type": "string", - "default": "", - "title": "The policyURI Schema", - "examples": [ - "/ipfs/QmPhEBstumEP84eSftx9MwBmSXBCGRFJMPZauKVa9gBizh/omen-verified-market.pdf", - "/ipfs/QmPtXtFKfVc3w5aGVNYrmBZWEHBLpk2XMLkYCnEioxwy43/clwp-acceptance-policy.pdf", - "/ipfs/QmTL1SCKpRcr7NRbVpXW6z9QoQXRHJT5cQr6PEge5qoLwU/t2cr-primary-document.pdf", - "/ipfs/QmVabp1VjJNYzXDxbcWFdeK17RvvA9eQy6eJVf1T1AzS1a/linguo-translation-quality-policy.pdf", - "/ipfs/QmVzwEBpGsbFY3UgyjA3SxgGXx3r5gFGynNpaoXkp6jenu/Ethfinex%20Court%20Policy.pdf", - "/ipfs/QmW4zDA8X95cyfAsW9Nq1t7XNTyP3sMQAWNRFoQhMpgAv7/Kleros%2520Moderate%2520x%2520Reality.eth%2520Oracle%2520-%2520Telegram%2520Content%2520Moderation%2520Question%2520Resolution%2520Policy.pdf", - "/ipfs/QmXDiiBAizCPoLqHvcfTzuMT7uvFEe1j3s4TgoWWd4k5np/proof-of-humanity-registry-policy-v1.3.pdf", - "/ipfs/QmZ7RVU7re1g8nXDbAFMHV99pyie3dn4cY7Ga2X4h8mDpV/reject-all-policy.pdf", - "/ipfs/QmaUr6hnSVxYD899xdcn2GUVtXVjXoSXKZbce3zFtGWw4H/Question_Resolution_Policy.pdf", - "/ipfs/QmdvkC5Djgk8MfX5ijJR3NJzmvGugUqvui7bKuTErSD6cE/contract-domain-name-registry-for-ledger-policy-3-.pdf", - "/ipfs/QmeTBY7jZe2ut5WjifNASADo3E4zBxkMd62WwBpXtwP9pg" - ] - }, - "attachment": { - "type": "object", - "default": {}, - "title": "The attachment Schema", - "required": [ - "uri" - ], - "properties": { - "label": { - "type": "string", - "default": "", - "title": "The label Schema", - "examples": [ - "Terms" - ] - }, - "uri": { - "type": "string", - "default": "", - "title": "The uri Schema", - "examples": [ - "/ipfs//QmZ7R..7889/terms.json" - ] - } - } - }, - "arbitrableChainID": { - "type": "string", - "default": "", - "title": "The arbitrableChainID Schema", - "examples": [ - "1", - "100" - ] - }, - "arbitrableAddress": { - "type": "string", - "default": "", - "title": "The arbitrableAddress Schema", - "examples": [ - "0x2e39b8f43d0870ba896f516f78f57cde773cf805" - ] - }, - "arbitratorChainID": { - "type": "string", - "default": "", - "title": "The arbitratorChainID Schema", - "examples": [ - "421614" - ] - }, - "arbitratorAddress": { - "type": "string", - "default": "", - "title": "The arbitratorAddress Schema", - "examples": [ - "0xD08Ab99480d02bf9C092828043f611BcDFEA917b" - ] - }, - "metadata": { - "type": "object", - "default": {}, - "title": "The metadata Schema", - "required": [], - "properties": {}, - "examples": [ - {} - ] - }, - "aliases": { - "type": "object", - "default": {}, - "title": "The aliases Schema", - "properties": { - "Party1": { - "type": "string", - "default": "", - "title": "The Party1 Schema", - "examples": [ - "0x1234...CDEF" - ] - }, - "Party2": { - "type": "string", - "default": "", - "title": "The Party2 Schema", - "examples": [ - "0xFEDC...4321" - ] - } - } - }, - "category": { - "type": "string", - "default": "", - "title": "The category Schema", - "examples": [ - "Oracle" - ] - }, - "lang": { - "type": "string", - "default": "", - "title": "The lang Schema", - "examples": [ - "en_US" - ] - }, - "specification": { - "type": "string", - "default": "", - "title": "The specification Schema", - "examples": [ - "KIP00", - "KIP99" - ] - }, - "version": { - "type": "string", - "default": "1.0", - "title": "The version Schema", - "examples": [ - "1.0" - ] - } - } -} diff --git a/kleros-sdk/config/v2-disputetemplate/README.md b/kleros-sdk/config/v2-disputetemplate/README.md deleted file mode 100644 index 1122f0315..000000000 --- a/kleros-sdk/config/v2-disputetemplate/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# V2 BREAKING CHANGES - -## Onchain changes - -### IArbitrator - -#### The appeal events and functions have been removed - -The appeal concerns are deemed implementation-specific so they have been removed from the Arbitrator interface. - -The following have been removed from the Arbitrator interface but are available directly on KlerosCore: - -```solidity -function appealCost(uint256 _disputeID) external view returns (uint256 cost); - -function appealPeriod(uint256 _disputeID) external view returns (uint256 start, uint256 end); -``` - -The following have been removed entirely: - -```solidity -event AppealPossible(uint256 indexed _disputeID, IArbitrableV1 indexed _arbitrable); -event AppealDecision(uint256 indexed _disputeID, IArbitrableV1 indexed _arbitrable); -function appeal(uint256 _disputeID, bytes calldata _extraData) external payable; -``` - -The appeal requests are now the responsibility of the DisputeKit implementation. For example in the DisputeKitClassic there is now: - -```solidity -// DisputeKitClassic.sol -function fundAppeal(uint256 _coreDisputeID, uint256 _choice) payable; - -function getFundedChoices(uint256 _coreDisputeID) view returns (uint256[] memory fundedChoices); -``` - -#### `DisputeStatus` has been removed - -It was deemed redundant. An equivalent behavior can be emulated as follow: - -```solidity -// for a particular disputeID -(,,IArbitrator.Period period,,) = arbitrator.disputes(disputeID); - -if (period < IArbitratorV2.Period.appeal) - // Do DisputeStatus.Waiting stuffs -else if (_period < IArbitratorV2.Period.execution) - // Do DisputeStatus.Appealable stuffs -else - // Do DisputeStatus.Solved stuffs -} -``` diff --git a/kleros-sdk/config/v2-disputetemplate/curate/NewDisputeTemplate.curate.jsonc b/kleros-sdk/config/v2-disputetemplate/curate/NewDisputeTemplate.curate.jsonc deleted file mode 100644 index 55824e883..000000000 --- a/kleros-sdk/config/v2-disputetemplate/curate/NewDisputeTemplate.curate.jsonc +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "../NewDisputeTemplate.schema.json", - "title": "Add an entry to Ledger Contract Domain Name registry v2", - "description": "Someone requested to add an entry to Ledger Contract Domain Name registry v2", - "question": "Does the entry comply with the required criteria?", - "answers": [ - { - "title": "Yes, Add It", - "description": "Select this if you think the entry complies with the required criteria and should be added." - }, - { - "title": "No, Don't Add It", - "description": "Select this if you think the entry does not comply with the required criteria and should not be added." - } - ], - "policyURI": "/ipfs/QmdvkC5Djgk8MfX5ijJR3NJzmvGugUqvui7bKuTErSD6cE/contract-domain-name-registry-for-ledger-policy-3-.pdf", - "frontendUrl": "https://curate.kleros.io/tcr/%s/%s/%s", - "arbitrableChainID": "100", - "arbitrableAddress": "0x957A53A994860BE4750810131d9c876b2f52d6E1", - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "category": "Curated Lists", - "specification": "KIP88", - "version": "1.0" -} diff --git a/kleros-sdk/config/v2-disputetemplate/curate/example/DisputeDetails.curate.jsonc b/kleros-sdk/config/v2-disputetemplate/curate/example/DisputeDetails.curate.jsonc deleted file mode 100644 index ded467423..000000000 --- a/kleros-sdk/config/v2-disputetemplate/curate/example/DisputeDetails.curate.jsonc +++ /dev/null @@ -1,71 +0,0 @@ -{ - "$schema": "./DisputeDetails.curate.schema.json", - "title": "Add an entry to Ledger Contract Domain Name registry v2", - "description": "Someone requested to add an entry to Ledger Contract Domain Name registry v2", - "question": "Does the entry comply with the required criteria?", - "type": "single-select", - "answers": [ - { - "id": "0x00", - "title": "Invalid/Refuse to Arbitrate", - "reserved": true - }, - { - "id": "0x01", - "title": "Yes, Add It", - "description": "Select this if you think the entry complies with the required criteria and should be added.", - "reserved": false - }, - { - "id": "0x02", - "title": "No, Don't Add It", - "description": "Select this if you think the entry does not comply with the required criteria and should not be added.", - "reserved": false - } - ], - "policyURI": "/ipfs/QmdvkC5Djgk8MfX5ijJR3NJzmvGugUqvui7bKuTErSD6cE/contract-domain-name-registry-for-ledger-policy-3-.pdf", - "frontendUrl": "https://curate.kleros.io/tcr/100/0x957A53A994860BE4750810131d9c876b2f52d6E1/0xc2c1aa705632f53051f22a9f65967c0944370020a7489aba608bd0d755ca1234", - "arbitrableChainID": "100", - "arbitrableAddress": "0x957A53A994860BE4750810131d9c876b2f52d6E1", - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "category": "Curated Lists", - "lang": "en_US", - "specification": "KIP88", - "version": "1.0", - "metadata": { - "tcrTitle": "Ledger Contract Domain Name registry v2", - "tcrDescription": "A list of contract addresses and the domain names they are meant to be used from .", - "columns": [ - { - "label": "Contract address", - "description": "The address of the contract in question. Case-sensitive only if required by the blockchain that the address pertains to (e.g. Solana). ", - "type": "rich address", - "isIdentifier": true - }, - { - "label": "Domain name", - "description": "The specific (sub)domain name of the dApp where this contract is meant to be accessed from. Wildcards (*) are acceptable as part of this field if proof can be shown that the contract is intended to be used across multiple domains.", - "type": "text", - "isIdentifier": true - }, - { - "label": "Visual proof", - "description": "If the domain is a specific root or subdomain, this must be a screenshot of the exact page and setup where this particular address can be interacted from.", - "type": "image", - "isIdentifier": false - } - ], - "itemName": "entry", - "itemNamePlural": "entries", - "logoURI": "/ipfs/QmNNSDkpyDX1wB4NNFdAzaHsJihpvgNVV89zCH8FH9CVAz/ledger-white.png", - "requireRemovalEvidence": true, - "isTCRofTCRs": false, - "relTcrDisabled": true - }, - "externalDisputeID": "0x32554266108048001186322211785477470843107987690258181975452540727388224860514", // hash(itemID, requestID) - "arbitrableDisputeID": "91", - "arbitratorDisputeID": "4565", - "disputeTemplateID": "44", - "disputeTemplateHash": "0xD1u9...2254" -} diff --git a/kleros-sdk/config/v2-disputetemplate/curate/example/DisputeTemplateInputs.curate.txt b/kleros-sdk/config/v2-disputetemplate/curate/example/DisputeTemplateInputs.curate.txt deleted file mode 100644 index 186ef2be9..000000000 --- a/kleros-sdk/config/v2-disputetemplate/curate/example/DisputeTemplateInputs.curate.txt +++ /dev/null @@ -1,3 +0,0 @@ -100 -0x957A53A994860BE4750810131d9c876b2f52d6E1 -0xc2c1aa705632f53051f22a9f65967c0944370020a7489aba608bd0d755ca1234 \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/curate/example/NewDispute.curate.jsonc b/kleros-sdk/config/v2-disputetemplate/curate/example/NewDispute.curate.jsonc deleted file mode 100644 index f1535733b..000000000 --- a/kleros-sdk/config/v2-disputetemplate/curate/example/NewDispute.curate.jsonc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "externalDisputeID": "32554266108048001186322211785477470843107987690258181975452540727388224860514", // hash(itemID, requestID) - "arbitrableDisputeID": "91", - "templateID": "44" -} - -/** - Contribution._itemID = 0xC2C1AA705632F53051F22A9F65967C0944370020A7489ABA608BD0D755CA1234 - Contribution._requestID = 0 - Dispute._evidenceGroupID = hash(itemID, requestID) = 0x32554266108048001186322211785477470843107987690258181975452540727388224860514 -**/ \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/escrow/DisputeRequest.ts b/kleros-sdk/config/v2-disputetemplate/escrow/DisputeRequest.ts deleted file mode 100644 index 62606c295..000000000 --- a/kleros-sdk/config/v2-disputetemplate/escrow/DisputeRequest.ts +++ /dev/null @@ -1,7 +0,0 @@ -type DisputeRequest = { - arbitrator: string; // klerosCore address - arbitrableDisputeID: number; // dispute id - externalDisputeID: number; // Escrow transaction id - templateId: number; // Escrow configuration - templateUri: string; // empty -}; diff --git a/kleros-sdk/config/v2-disputetemplate/escrow/example1/DataMappings.escrow.jsonc b/kleros-sdk/config/v2-disputetemplate/escrow/example1/DataMappings.escrow.jsonc deleted file mode 100644 index 40e448678..000000000 --- a/kleros-sdk/config/v2-disputetemplate/escrow/example1/DataMappings.escrow.jsonc +++ /dev/null @@ -1,34 +0,0 @@ -[ - { - "type": "abi/event", - "abi": "event TransactionCreated(uint256 indexed _transactionID, string _transactionUri, address indexed _buyer, address indexed _seller, uint256 _amount, string _asset, uint256 _deadline)", - "address": "[FIX AFTER DEPLOY]", - "eventFilter": { - "fromBlock": "[FIX AFTER DEPLOY]", - "toBlock": "latest", - "args": { - "_transactionID": "[FROM EXTERNAL DISPUTE ID]" - } - }, - "seek": [ - "transactionUri", - "buyer", - "seller", - "amount", - "asset", - "deadline" - ], - "populate": [ - "_transactionUri", - "_buyer", - "_seller", - "_amount", - "_asset", - "_deadline" - ] - }, - { - "type":"fetch/ipfsJson", - "todo": "get title, description, extraDescriptionUri from _transactionUri" - } -] \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/escrow/example1/DisputeDetails.escrow.jsonc.mustache b/kleros-sdk/config/v2-disputetemplate/escrow/example1/DisputeDetails.escrow.jsonc.mustache deleted file mode 100644 index e62dd4b88..000000000 --- a/kleros-sdk/config/v2-disputetemplate/escrow/example1/DisputeDetails.escrow.jsonc.mustache +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$schema": "../NewDisputeTemplate.schema.json", - "title": "{{title}}", // from the form - "description": "{{description}}", // from the contract terms form - "question": "Which party abided by the terms of the contract?", - "answers": [ - { - "title": "Refund the Buyer", - "description": "Select this to return the funds to the Buyer." - }, - { - "title": "Pay the Seller", - "description": "Select this to release the funds to the Seller." - } - ], - "policyURI": "/ipfs/XxxxxXXX/escrow-general-policy.pdf", // not transaction-specific - "attachment": { // transaction-specific - "label": "Transaction Terms", - "uri": "{{extraDescriptionUri}}" - }, - "frontendUrl": "https://escrow-v2.kleros.builders/#/myTransactions/%s", // deployment specific, might break over time - "arbitrableChainID": "421614", - "arbitrableAddress": "0x??", // Escrow, hardcode after deploy-time - "arbitratorChainID": "421614", - "arbitratorAddress": "0x??", // KlerosCore, hardcode after deploy-time - "metadata": { - "buyer": "{{buyer}}", - "seller": "{{seller}}", - "amount": "{{amount}}", // in Wei or ERC20 units - "asset": "{{asset}}", // "0" or "native" or "0x1234..." or "erc20:0x1234...", cf. CAIP-19,20,21 - "deadline": "{{deadline}}", - "transactionUri": "{{transactionUri}}" // transaction-specific - }, - "category": "Escrow", - "specification": "KIPXXX", - "aliases": { - "Buyer": "{{buyer}}", - "Seller": "{{seller}}" - }, - "version": "1.0" -} diff --git a/kleros-sdk/config/v2-disputetemplate/escrow/example2/DisputeMappings.json.mustache b/kleros-sdk/config/v2-disputetemplate/escrow/example2/DisputeMappings.json.mustache deleted file mode 100644 index 6c7832dcf..000000000 --- a/kleros-sdk/config/v2-disputetemplate/escrow/example2/DisputeMappings.json.mustache +++ /dev/null @@ -1,40 +0,0 @@ -[ - { - "type": "graphql", - "endpoint": "https://api.thegraph.com/subgraphs/name/kemuru/escrow-v2-devnet", - "query": "query GetTransaction($transactionId: ID!) { escrow(id: $transactionId) { transactionUri buyer seller amount asset deadline } }", - "variables": { - "transactionId": "{{externalDisputeID}}" - }, - "seek": [ - "escrow.transactionUri", - "escrow.buyer", - "escrow.seller", - "escrow.amount", - "escrow.asset", - "escrow.deadline" - ], - "populate": [ - "transactionUri", - "address", - "sendingRecipientAddress", - "amount", - "asset", - "deadline" - ] - }, - { - "type": "fetch/ipfs/json", - "ipfsUri": "{{transactionUri}}", - "seek": [ - "title", - "description", - "extraDescriptionUri" - ], - "populate": [ - "escrowTitle", - "deliverableText", - "extraDescriptionUri" - ] - } -] \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/escrow/example2/DisputeTemplate.json.mustache b/kleros-sdk/config/v2-disputetemplate/escrow/example2/DisputeTemplate.json.mustache deleted file mode 100644 index b305e190d..000000000 --- a/kleros-sdk/config/v2-disputetemplate/escrow/example2/DisputeTemplate.json.mustache +++ /dev/null @@ -1,40 +0,0 @@ -{ - "title": "{{escrowTitle}}", - "description": "{{deliverableText}}", - "question": "Which party abided by the terms of the contract?", - "answers": [ - { - "title": "Refund the Buyer", - "description": "Select this to return the funds to the Buyer." - }, - { - "title": "Pay the Seller", - "description": "Select this to release the funds to the Seller." - } - ], - "policyURI": "ipfs://TODO", - "attachment": { - "label": "Transaction Terms", - "uri": "{{extraDescriptionUri}}" - }, - "frontendUrl": "https://escrow-v2.kleros.builders/#/myTransactions/{{externalDisputeID}}", - "arbitrableChainID": "421614", - "arbitrableAddress": "{{arbitrator}}", - "arbitratorChainID": "421614", - "arbitratorAddress": "{{arbitrable}}", - "metadata": { - "buyer": "{{address}}", - "seller": "{{sendingRecipientAddress}}", - "amount": "{{sendingQuantity}}", - "asset": "{{asset}}", - "deadline": "{{deadline}}", - "transactionUri": "{{transactionUri}}" - }, - "category": "Escrow", - "specification": "KIPXXX", - "aliases": { - "Buyer": "{{address}}", - "Seller": "{{sendingRecipientAddress}}" - }, - "version": "1.0" -} \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/kip-template.md b/kleros-sdk/config/v2-disputetemplate/kip-template.md deleted file mode 100644 index bb1f58f77..000000000 --- a/kleros-sdk/config/v2-disputetemplate/kip-template.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -kip: <#> -title: <title> -author: <a comma separated list of the author's or authors' name + GitHub username (in parenthesis), or name and email (in angle brackets). Example, FirstName LastName (@GitHubUsername), FirstName LastName <foo@bar.com>, FirstName (@GitHubUsername) and GitHubUsername (@GitHubUsername)> -discussions-to: https://forum.kleros.io/c/proposal/<#> -status: <Draft, Last Call, Approved, Final, Abandoned, Rejected> -type: <Core, Parameter, Arbitrable> -created: <yyyy-mm-dd> -requires: <KIP number(s)> # Only required when you reference an KIP in the `Specification` section. Otherwise, remove this field. ---- - -## Summary - -2-5 sentences providing a simplified and layman-accessible explanation of the issue. - -## Motivation - -The motivation is critical to change the KIP protocol. -It should clearly explain why the existing protocol specification is inadequate with respect to the issue raised. - -## Technical Specification - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174. - -The technical specification should describe the syntax and semantics of the proposed solution for the issue raised. -If a suggestion is proposed, provide sufficient details so that an implementation would be possible (Proof of Concepts are acceptable). - -## Rationale - -The rationale should flesh out the specification by describing what motivated the design and why particular design decisions were made, as well as any alternative designs that were considered. - -## Implementation - -An implementation must be completed before any KIP proceeds to “Last Call” status. - -## Backwards Compatibility - -## Security considerations - -All KIPs must include a discussion of the security implications/considerations relevant to the proposed change as well as proposed mitigations. A KIP cannot proceed to “Final” status without a sufficient security review from the core team. diff --git a/kleros-sdk/config/v2-disputetemplate/linguo/NewDisputeTemplate.linguo.jsonc b/kleros-sdk/config/v2-disputetemplate/linguo/NewDisputeTemplate.linguo.jsonc deleted file mode 100644 index 93f23afb7..000000000 --- a/kleros-sdk/config/v2-disputetemplate/linguo/NewDisputeTemplate.linguo.jsonc +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "../NewDisputeTemplate.schema.json", - "title": "Review a translation from Linguo", - "description": "Someone challenged a translation", - "question": "Does the translation comply with the required criteria?", - "answers": [ - { - "title": "Yes, the translation should be accepted", - "description": "Select this if you think the translation complies with the required criteria." - }, - { - "title": "No, the translation should not be accepted", - "description": "Select this if you think the translation does not comply with the required criteria." - } - ], - "policyURI": "/ipfs/QmVabp1VjJNYzXDxbcWFdeK17RvvA9eQy6eJVf1T1AzS1a/linguo-translation-quality-policy.pdf", - "frontendUrl": "https://linguo.kleros.io/translation/%s/%s", - "arbitrableChainID": "100", - "arbitrableAddress": "0xe78996a233895be74a66f451f1019ca9734205cc", - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "category": "Translation", - "specification": "KIP999", - "version": "1.0" -} diff --git a/kleros-sdk/config/v2-disputetemplate/linguo/example/DisputeDetails.linguo.jsonc b/kleros-sdk/config/v2-disputetemplate/linguo/example/DisputeDetails.linguo.jsonc deleted file mode 100644 index 5381444f8..000000000 --- a/kleros-sdk/config/v2-disputetemplate/linguo/example/DisputeDetails.linguo.jsonc +++ /dev/null @@ -1,62 +0,0 @@ -{ - "$schema": "./DisputeDetails.linguo.schema.json", - "title": "Review a translation from Linguo", - "description": "Someone challenged a translation", - "question": "Does the translation comply with the required criteria?", - "type": "single-select", - "answers": [ - { - "id": "0x00", - "title": "Invalid/Refuse to Arbitrate", - "reserved": true - }, - { - "id": "0x01", - "title": "Yes, the translation should be accepted", - "description": "Select this if you think the translation complies with the required criteria.", - "reserved": false - }, - { - "id": "0x02", - "title": "No, the translation should not be accepted", - "description": "Select this if you think the translation does not comply with the required criteria.", - "reserved": false - } - ], - "policyURI": "/ipfs/QmVabp1VjJNYzXDxbcWFdeK17RvvA9eQy6eJVf1T1AzS1a/linguo-translation-quality-policy.pdf", - "frontendUrl": "https://linguo.kleros.io/translation/0xe78996a233895be74a66f451f1019ca9734205cc/13", - "arbitrableChainID": "100", - "arbitrableAddress": "0xe78996a233895be74a66f451f1019ca9734205cc", - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "category": "Translation", - "lang": "en_US", - "specification": "KIP999", - "version": "1.0", - "metadata": { - "linguoAddress": "0xe78996a233895be74a66f451f1019ca9734205cc", - "linguoTranslationID": "76", - "linguoDeadline": "1680307199", - "linguoSourceLanguage": "en-us", - "linguoTargetLanguage": "es", - "linguoExpectedQuality": "professional", - "linguoTitle": "What do I think about network states?", - "linguoWordCount": "7900", - "linguoOriginalTextUrl": "https://vitalik.ca/general/2022/07/13/networkstates.html", - "linguoOriginalTextFile": "/ipfs/QmY16SsM1uk7i2TLxGhUZR8iW74w4Luphry3SJeN6XyCTf/What do I think about network states.docx", - "linguoAssignedPrice": "81670000000000000000", - "linguoMinimumPrice": "0", - "linguoMaximumPrice": "500000000000000000000", - - // https://github.com/kleros/linguo-script/blob/master/src/index.js#L31-L44 - "linguoRequester": "0xabc996a233895be74a66f451f1019ca97342aaaa", - "linguoTranslator": "0xbcd996a233895be74a66f451f1019ca97342bbbb", - "linguoChallenger": "0xcde996a233895be74a66f451f1019ca97342cccc", - "linguoFrontendUrl": "https://linguo.kleros.io/translation/0x0B928165A67df8254412483ae8C3b8cc7F2b4D36/35" - }, - "externalDisputeID": "13", // taskID - "arbitrableDisputeID": "7", - "arbitratorDisputeID": "4564", - "disputeTemplateID": "43", - "disputeTemplateHash": "0xD1u9...2254" -} diff --git a/kleros-sdk/config/v2-disputetemplate/linguo/example/DisputeTemplateInputs.linguo.txt b/kleros-sdk/config/v2-disputetemplate/linguo/example/DisputeTemplateInputs.linguo.txt deleted file mode 100644 index a4f8f13ce..000000000 --- a/kleros-sdk/config/v2-disputetemplate/linguo/example/DisputeTemplateInputs.linguo.txt +++ /dev/null @@ -1,2 +0,0 @@ -0xe78996a233895be74a66f451f1019ca9734205cc -13 \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/linguo/example/NewDispute.linguo.jsonc b/kleros-sdk/config/v2-disputetemplate/linguo/example/NewDispute.linguo.jsonc deleted file mode 100644 index d113123a1..000000000 --- a/kleros-sdk/config/v2-disputetemplate/linguo/example/NewDispute.linguo.jsonc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "externalDisputeID": "13", // taskID - "arbitrableDisputeID": "7", - "templateID": "43" -} diff --git a/kleros-sdk/config/v2-disputetemplate/moderate/DisputeDetails.moderate.json b/kleros-sdk/config/v2-disputetemplate/moderate/DisputeDetails.moderate.json deleted file mode 100644 index 4ce35ca10..000000000 --- a/kleros-sdk/config/v2-disputetemplate/moderate/DisputeDetails.moderate.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$schema": "./DisputeDetails.reality.schema.json", - "title": "A reality.eth question", - "description": "A reality.eth question has been raised to arbitration.", - "question": "**Kleros Moderate:** Did the user, **degenape6** (ID: 1554345080), break the Telegram group, ***[Kleros Trading Group]()*** (ID: -1001151472172), ***[rules](https://cdn.kleros.link/ipfs/Qme3Qbj9rKUNHUe9vj9rqCLnTVUCWKy2YfveQF8HiuWQSu/Kleros%20Moderate%20Community%20Rules.pdf)*** due to conduct related to the ***[message](https://t.me/c/1151472172/116662)*** (***[backup](https://cdn.kleros.link/ipfs/QmVbFrZR1bcyQzZjvLyXwL9ekDxrqHERykdreRxXrw4nqg/animations_file_23.mp4)***)?", - "answers": [ - { - "id": "0x01", - "title": "Yes", - "reserved": false - }, - { - "id": "0x02", - "title": "No", - "reserved": false - }, - { - "id": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - "title": "Answered Too Soon", - "reserved": true - } - ], - "policyURI": "/ipfs/QmZ5XaV2RVgBADq5qMpbuEwgCuPZdRgCeu8rhGtJWLV6yz", - "frontendUrl": "https://reality.eth.limo/app/#!/question/0xe78996a233895be74a66f451f1019ca9734205cc-0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39", - "arbitrableChainID": "100", - "arbitrableAddress": "0x2e39b8f43d0870ba896f516f78f57cde773cf805", - "arbitratorChainID": "421613", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", - "category": "Oracle", - "lang": "en_US", - "specification": "KIP99", - "version": "1.0" -} diff --git a/kleros-sdk/config/v2-disputetemplate/poh/NewDisputeTemplate.poh1.jsonc b/kleros-sdk/config/v2-disputetemplate/poh/NewDisputeTemplate.poh1.jsonc deleted file mode 100644 index c9024c846..000000000 --- a/kleros-sdk/config/v2-disputetemplate/poh/NewDisputeTemplate.poh1.jsonc +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "../NewDisputeTemplate.schema.json", - "title": "Proof of Humanity Registration Request", - "description": "A request to register the specified entry to a list of provable humans.", - "question": "Should the request to register be accepted?", - "answers": [ - { - "title": "Yes", - "description": "Accept the request to register the entry." - }, - { - "title": "No", - "description": "Deny the request." - } - ], - "policyURI": "/ipfs/QmXDiiBAizCPoLqHvcfTzuMT7uvFEe1j3s4TgoWWd4k5np/proof-of-humanity-registry-policy-v1.3.pdf", - "frontendUrl": "https://app.proofofhumanity.id/profile/%s", - "arbitrableChainID": "1", - "arbitrableAddress": "0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb", - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "category": "Curated Lists", - "specification": "KIP88", - "version": "1.0" -} diff --git a/kleros-sdk/config/v2-disputetemplate/poh/NewDisputeTemplate.poh2.jsonc b/kleros-sdk/config/v2-disputetemplate/poh/NewDisputeTemplate.poh2.jsonc deleted file mode 100644 index 5d039158d..000000000 --- a/kleros-sdk/config/v2-disputetemplate/poh/NewDisputeTemplate.poh2.jsonc +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "../NewDisputeTemplate.schema.json", - "title": "Proof of Humanity Clearing Request", - "description": "A request to remove the specified entry from a list of provable humans.", - "question": "Should the request to remove be accepted?", - "answers": [ - { - "title": "Yes", - "description": "Accept the request to register the entry." - }, - { - "title": "No", - "description": "Deny the request." - } - ], - "policyURI": "/ipfs/QmXDiiBAizCPoLqHvcfTzuMT7uvFEe1j3s4TgoWWd4k5np/proof-of-humanity-registry-policy-v1.3.pdf", - "frontendUrl": "https://app.proofofhumanity.id/profile/%s", - "arbitrableChainID": "1", - "arbitrableAddress": "0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb", - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "category": "Curated Lists", - "specification": "KIP88", - "version": "1.0" -} diff --git a/kleros-sdk/config/v2-disputetemplate/poh/example1-registration/DisputeDetails.poh1.jsonc b/kleros-sdk/config/v2-disputetemplate/poh/example1-registration/DisputeDetails.poh1.jsonc deleted file mode 100644 index e08fcd859..000000000 --- a/kleros-sdk/config/v2-disputetemplate/poh/example1-registration/DisputeDetails.poh1.jsonc +++ /dev/null @@ -1,43 +0,0 @@ -{ - "$schema": "./DisputeDetails.poh.schema.json", - "title": "Proof of Humanity Registration Request", - "description": "A request to register the specified entry to a list of provable humans.", - "question": "Should the request to register be accepted?", - "type": "single-select", - "answers": [ - { - "id": "0x00", - "title": "Invalid/Refuse to Arbitrate", - "reserved": true - }, - { - "id": "0x01", - "title": "Yes", - "description": "Accept the request to register the entry.", - "reserved": false - }, - { - "id": "0x02", - "title": "No", - "description": "Deny the request.", - "reserved": false - } - ], - "policyURI": "/ipfs/QmXDiiBAizCPoLqHvcfTzuMT7uvFEe1j3s4TgoWWd4k5np/proof-of-humanity-registry-policy-v1.3.pdf", - "frontendUrl": "https://app.proofofhumanity.id/profile/0x35998E80B3fa93cFD957D616e6f09cd830e9787c", - "arbitrableChainID": "1", - "arbitrableAddress": "0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb", - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "category": "Curated Lists", - "lang": "en_US", - "specification": "KIP77", - "version": "1.0", - "metadata": { - }, - "externalDisputeID": "0x306000938609016839401998194416306598562578921596", // hash(itemID, requestID) - "arbitrableDisputeID": "1556", - "arbitratorDisputeID": "4568", - "disputeTemplateID": "46", - "disputeTemplateHash": "0x51u9...2226" -} diff --git a/kleros-sdk/config/v2-disputetemplate/poh/example1-registration/DisputeTemplateInputs.poh1.txt b/kleros-sdk/config/v2-disputetemplate/poh/example1-registration/DisputeTemplateInputs.poh1.txt deleted file mode 100644 index ac0129395..000000000 --- a/kleros-sdk/config/v2-disputetemplate/poh/example1-registration/DisputeTemplateInputs.poh1.txt +++ /dev/null @@ -1 +0,0 @@ -0x35998E80B3fa93cFD957D616e6f09cd830e9787c \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/poh/example1-registration/NewDispute.poh1.jsonc b/kleros-sdk/config/v2-disputetemplate/poh/example1-registration/NewDispute.poh1.jsonc deleted file mode 100644 index 7733da305..000000000 --- a/kleros-sdk/config/v2-disputetemplate/poh/example1-registration/NewDispute.poh1.jsonc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "externalDisputeID": "0x306000938609016839401998194416306598562578921596", // hash(itemID, requestID) - "arbitrableDisputeID": "1556", - "templateID": "46" -} - -/** - SubmissionChallenged._submissionID = 0x35998E80B3fa93cFD957D616e6f09cd830e9787c - SubmissionChallenged._requestID = 0 - Dispute._evidenceGroupID = hash(_submissionID, _requestID) = 0x306000938609016839401998194416306598562578921596 -**/ \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/poh/example2-removal/DisputeDetails.poh2.jsonc b/kleros-sdk/config/v2-disputetemplate/poh/example2-removal/DisputeDetails.poh2.jsonc deleted file mode 100644 index 51214ca7d..000000000 --- a/kleros-sdk/config/v2-disputetemplate/poh/example2-removal/DisputeDetails.poh2.jsonc +++ /dev/null @@ -1,43 +0,0 @@ -{ - "$schema": "./DisputeDetails.poh.schema.json", - "title": "Proof of Humanity Clearing Request", - "description": "A request to remove the specified entry from a list of provable humans.", - "question": "Should the request to remove be accepted?", - "type": "single-select", - "answers": [ - { - "id": "0x00", - "title": "Invalid/Refuse to Arbitrate", - "reserved": true - }, - { - "id": "0x01", - "title": "Yes", - "description": "Accept the request to remove the entry.", - "reserved": false - }, - { - "id": "0x02", - "title": "No", - "description": "Deny the request.", - "reserved": false - } - ], - "policyURI": "/ipfs/QmXDiiBAizCPoLqHvcfTzuMT7uvFEe1j3s4TgoWWd4k5np/proof-of-humanity-registry-policy-v1.3.pdf", - "frontendUrl": "https://app.proofofhumanity.id/profile/0x35998E80B3fa93cFD957D616e6f09cd830e9787c", - "arbitrableChainID": "1", - "arbitrableAddress": "0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb", - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "category": "Curated Lists", - "lang": "en_US", - "specification": "KIP77", - "version": "1.0", - "metadata": { - }, - "externalDisputeID": "0x2f0c53ed326eb88ef6a01ff83df458c1cebe5b9ee5e8509525189d9422e28983", // hash(itemID, requestID) - "arbitrableDisputeID": "1557", - "arbitratorDisputeID": "4569", - "disputeTemplateID": "47", - "disputeTemplateHash": "0x31u9...5550" -} diff --git a/kleros-sdk/config/v2-disputetemplate/poh/example2-removal/DisputeTemplateInputs.poh2.txt b/kleros-sdk/config/v2-disputetemplate/poh/example2-removal/DisputeTemplateInputs.poh2.txt deleted file mode 100644 index ac0129395..000000000 --- a/kleros-sdk/config/v2-disputetemplate/poh/example2-removal/DisputeTemplateInputs.poh2.txt +++ /dev/null @@ -1 +0,0 @@ -0x35998E80B3fa93cFD957D616e6f09cd830e9787c \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/poh/example2-removal/NewDispute.poh2.jsonc b/kleros-sdk/config/v2-disputetemplate/poh/example2-removal/NewDispute.poh2.jsonc deleted file mode 100644 index f313a7bbb..000000000 --- a/kleros-sdk/config/v2-disputetemplate/poh/example2-removal/NewDispute.poh2.jsonc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "externalDisputeID": "0x2f0c53ed326eb88ef6a01ff83df458c1cebe5b9ee5e8509525189d9422e28983", // hash(itemID, requestID) - "arbitrableDisputeID": "1557", - "templateID": "47" -} - -/** - SubmissionChallenged._submissionID = 0x35998E80B3fa93cFD957D616e6f09cd830e9787c - SubmissionChallenged._requestID = 1 - Dispute._evidenceGroupID = hash(_submissionID, _requestID) = 0x2f0c53ed326eb88ef6a01ff83df458c1cebe5b9ee5e8509525189d9422e28983 -**/ \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/reality/DisputeDetails.reality.schema.json b/kleros-sdk/config/v2-disputetemplate/reality/DisputeDetails.reality.schema.json deleted file mode 100644 index bd595e2a7..000000000 --- a/kleros-sdk/config/v2-disputetemplate/reality/DisputeDetails.reality.schema.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2019-09/schema", - "$id": "DisputeDetails.reality.schema.json", - "title": "Root Schema", - "description": "The root schema is the schema that comprises the entire JSON document.", - "type": "object", - "required": [ - "title", - "description", - "question", - "type", - "answers", - "frontendUrl", - "policyURI", - "arbitrableChainID", - "arbitrableAddress", - "arbitratorChainID", - "arbitratorAddress", - "category", - "lang", - "specification", - "version", - "metadata", - "externalDisputeID", - "arbitrableDisputeID", - "arbitratorDisputeID", - "disputeTemplateID", - "disputeTemplateHash" - ], - "additionalProperties": false, - "properties": { - "title": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/title" - }, - "description": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/description" - }, - "question": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/question" - }, - "type": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/type" - }, - "answers": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/answers" - }, - "frontendUrl": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/frontendUrl" - }, - "policyURI": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/policyURI" - }, - "arbitrableChainID": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/arbitrableChainID" - }, - "arbitrableAddress": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/arbitrableAddress" - }, - "arbitratorChainID": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/arbitratorChainID" - }, - "arbitratorAddress": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/arbitratorAddress" - }, - "category": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/category" - }, - "lang": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/lang" - }, - "specification": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/specification" - }, - "version": { - "$ref": "../NewDisputeTemplate.schema.json#/properties/version" - }, - "metadata": { - "type": "object", - "default": {}, - "title": "The metadata Schema", - "required": [ - "realityAddress", - "realityTemplateID", - "realityQuestionID", - "realityUser", - "realityType", - "realityCategory", - "realityLang", - "realityFormat", - "realityTimeout", - "realityOpeningTime", - "realityCreationTime", - "realityNonce" - ], - "properties": { - "realityAddress": { - "type": "string", - "default": "", - "title": "The realityAddress Schema", - "examples": [ - "0xe78996a233895be74a66f451f1019ca9734205cc" - ] - }, - "realityTemplateID": { - "type": "string", - "default": "", - "title": "The realityTemplateID Schema", - "examples": [ - "76" - ] - }, - "realityQuestionID": { - "type": "string", - "default": "", - "title": "The realityQuestionID Schema", - "examples": [ - "0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39" - ] - }, - "realityUser": { - "type": "string", - "default": "", - "title": "The realityUser Schema", - "examples": [ - "0xe0441ecf50205d3548456b29fde2a3010f9a61f3" - ] - }, - "realityType": { - "type": "string", - "default": "", - "title": "The realityType Schema", - "examples": [ - "bool" - ] - }, - "realityCategory": { - "type": "string", - "default": "", - "title": "The realityCategory Schema", - "examples": [ - "content moderation" - ] - }, - "realityLang": { - "type": "string", - "default": "", - "title": "The realityLang Schema", - "examples": [ - "en_US" - ] - }, - "realityFormat": { - "type": "string", - "default": "", - "title": "The realityFormat Schema", - "examples": [ - "text/markdown" - ] - }, - "realityTimeout": { - "type": "string", - "default": "", - "title": "The realityTimeout Schema", - "examples": [ - "86400" - ] - }, - "realityOpeningTime": { - "type": "string", - "default": "", - "title": "The realityOpeningTime Schema", - "examples": [ - "1681263978" - ] - }, - "realityCreationTime": { - "type": "string", - "default": "", - "title": "The realityCreationTime Schema", - "examples": [ - "1681263995" - ] - }, - "realityNonce": { - "type": "string", - "default": "", - "title": "The realityNonce Schema", - "examples": [ - "3" - ] - } - }, - "examples": [ - { - "realityAddress": "0xe78996a233895be74a66f451f1019ca9734205cc", - "realityTemplateID": "76", - "realityQuestionID": "0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39", - "realityUser": "0xe0441ecf50205d3548456b29fde2a3010f9a61f3", - "realityType": "bool", - "realityCategory": "content moderation", - "realityLang": "en_US", - "realityFormat": "text/markdown", - "realityTimeout": "86400", - "realityOpeningTime": "1681263978", - "realityCreationTime": "1681263995", - "realityNonce": "3" - } - ] - }, - "externalDisputeID": { - "type": "string", - "default": "", - "title": "The externalDisputeID Schema", - "examples": [ - "0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39" - ] - }, - "arbitrableDisputeID": { - "type": "string", - "default": "", - "title": "The arbitrableDisputeID Schema", - "examples": [ - "245" - ] - }, - "arbitratorDisputeID": { - "type": "string", - "default": "", - "title": "The arbitratorDisputeID Schema", - "examples": [ - "4563" - ] - }, - "disputeTemplateID": { - "type": "string", - "default": "", - "title": "The disputeTemplateID Schema", - "examples": [ - "42" - ] - }, - "disputeTemplateHash": { - "type": "string", - "default": "", - "title": "The disputeTemplateHash Schema", - "examples": [ - "0xffbbbd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b82" - ] - } - } -} diff --git a/kleros-sdk/config/v2-disputetemplate/reality/NewDisputeTemplate.reality.jsonc b/kleros-sdk/config/v2-disputetemplate/reality/NewDisputeTemplate.reality.jsonc deleted file mode 100644 index bb4c28e29..000000000 --- a/kleros-sdk/config/v2-disputetemplate/reality/NewDisputeTemplate.reality.jsonc +++ /dev/null @@ -1,24 +0,0 @@ -{ - "$schema": "../NewDisputeTemplate.schema.json", - "title": "A reality.eth question", - "description": "A reality.eth question has been raised to arbitration.", - "question": "%s", - "type": "%s", - "answers": [ - { - "id": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - "title": "Answered Too Soon", - "reserved": true - } - %s // for custom answers - ], - "policyURI": "/ipfs/QmW4zDA8X95cyfAsW9Nq1t7XNTyP3sMQAWNRFoQhMpgAv7/Kleros%2520Moderate%2520x%2520Reality.eth%2520Oracle%2520-%2520Telegram%2520Content%2520Moderation%2520Question%2520Resolution%2520Policy.pdf", - "frontendUrl": "https://reality.eth.link/app/#!/question/%s-%s", - "arbitrableChainID": "100", - "arbitrableAddress": "0x2e39b8f43d0870ba896f516f78f57cde773cf805", // Realitio_v2_1_ArbitratorWithAppeals - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "category": "Oracle", - "specification": "KIP99", - "version": "1.0" -} diff --git a/kleros-sdk/config/v2-disputetemplate/reality/README.md b/kleros-sdk/config/v2-disputetemplate/reality/README.md deleted file mode 100644 index b06de559c..000000000 --- a/kleros-sdk/config/v2-disputetemplate/reality/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Dispute Standard for Reality.eth - -[Specs](./kip-99.md) -[New dispute template](./NewDisputeTemplate.reality.jsonc) -[Dispute details schema](./DisputeDetails.reality.schema.json) (optional) -SDK implementation (TODO) - -## Example 1: Kleros Moderate Question - -[New dispute parameters](./example1/NewDispute.reality1.jsonc) -[Inputs for the dispute template](./example1/DisputeTemplateInputs.reality1.txt) -[Dispute details output](./example1/DisputeDetails.reality1.jsonc) - -## Example 2: Formula1 Question - -[New dispute parameters](./example2/NewDispute.reality2.jsonc) -[Inputs for the dispute template](./example2/DisputeTemplateInputs.reality2.txt) -[Dispute details output](./example2/DisputeDetails.reality2.jsonc) diff --git a/kleros-sdk/config/v2-disputetemplate/reality/example1/DisputeDetails.reality1.jsonc b/kleros-sdk/config/v2-disputetemplate/reality/example1/DisputeDetails.reality1.jsonc deleted file mode 100644 index 37f299ccd..000000000 --- a/kleros-sdk/config/v2-disputetemplate/reality/example1/DisputeDetails.reality1.jsonc +++ /dev/null @@ -1,57 +0,0 @@ -{ - "$schema": "./DisputeDetails.reality.schema.json", - "title": "A reality.eth question", - "description": "A reality.eth question has been raised to arbitration.", - "question": "# [Kleros Moderate](https://kleros.io/moderate)\n---\nDid the user, **degenape6** (ID: 1554345080), break the Telegram group, ***[Kleros Trading Group]()*** (ID: -1001151472172), ***[rules](https://cdn.kleros.link/ipfs/Qme3Qbj9rKUNHUe9vj9rqCLnTVUCWKy2YfveQF8HiuWQSu/Kleros%20Moderate%20Community%20Rules.pdf)*** due to conduct related to the ***[message](https://t.me/c/1151472172/116662)*** (***[backup](https://cdn.kleros.link/ipfs/QmVbFrZR1bcyQzZjvLyXwL9ekDxrqHERykdreRxXrw4nqg/animations_file_23.mp4)***)?", - "answers": [ - { - "id": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - "title": "Answered Too Soon", - "reserved": true - }, - { - "id": "0x00", - "title": "Invalid/Refuse to Arbitrate", - "reserved": true - }, - { - "id": "0x01", - "title": "Yes", - "reserved": false - }, - { - "id": "0x02", - "title": "No", - "reserved": false - } - ], - "policyURI": "/ipfs/QmW4zDA8X95cyfAsW9Nq1t7XNTyP3sMQAWNRFoQhMpgAv7/Kleros%2520Moderate%2520x%2520Reality.eth%2520Oracle%2520-%2520Telegram%2520Content%2520Moderation%2520Question%2520Resolution%2520Policy.pdf", - "frontendUrl": "https://reality.eth.link/app/#!/question/0xe78996a233895be74a66f451f1019ca9734205cc-0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39", - "arbitrableChainID": "100", - "arbitrableAddress": "0x2e39b8f43d0870ba896f516f78f57cde773cf805", // Realitio_v2_1_ArbitratorWithAppeals - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "category": "Oracle", - "lang": "en_US", - "specification": "KIP99", - "version": "1.0", - "metadata": { - "realityAddress": "0xe78996a233895be74a66f451f1019ca9734205cc", - "realityTemplateID": "76", - "realityQuestionID": "0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39", - "realityUser": "0xe0441ecf50205d3548456b29fde2a3010f9a61f3", - "realityType": "bool", - "realityCategory": "content moderation", - "realityLang": "en_US", - "realityFormat": "text/markdown", - "realityTimeout": "86400", - "realityOpeningTime": "1681263978", - "realityCreationTime": "1681263995", - "realityNonce": "3" - }, - "externalDisputeID": "0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39", - "arbitrableDisputeID": "245", - "arbitratorDisputeID": "4563", - "disputeTemplateID": "42", - "disputeTemplateHash": "0xB5u9...2240" -} diff --git a/kleros-sdk/config/v2-disputetemplate/reality/example1/DisputeTemplateInputs.reality1.txt b/kleros-sdk/config/v2-disputetemplate/reality/example1/DisputeTemplateInputs.reality1.txt deleted file mode 100644 index 445c15a30..000000000 --- a/kleros-sdk/config/v2-disputetemplate/reality/example1/DisputeTemplateInputs.reality1.txt +++ /dev/null @@ -1,5 +0,0 @@ -# [Kleros Moderate](https://kleros.io/moderate)\n---\nDid the user, **degenape6** (ID: 1554345080), break the Telegram group, ***[Kleros Trading Group]()*** (ID: -1001151472172), ***[rules](https://cdn.kleros.link/ipfs/Qme3Qbj9rKUNHUe9vj9rqCLnTVUCWKy2YfveQF8HiuWQSu/Kleros%20Moderate%20Community%20Rules.pdf)*** due to conduct related to the ***[message](https://t.me/c/1151472172/116662)*** (***[backup](https://cdn.kleros.link/ipfs/QmVbFrZR1bcyQzZjvLyXwL9ekDxrqHERykdreRxXrw4nqg/animations_file_23.mp4)***)? -single-select -,{"id":"0x00","title":"Invalid/Refuse to Arbitrate","reserved":true},{"id":"0x01","title":"Yes","reserved":false},{"id":"0x02","title":"No","reserved":false} -0xe78996a233895be74a66f451f1019ca9734205cc -0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39 \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/reality/example1/NewDispute.reality1.jsonc b/kleros-sdk/config/v2-disputetemplate/reality/example1/NewDispute.reality1.jsonc deleted file mode 100644 index 95fb762f2..000000000 --- a/kleros-sdk/config/v2-disputetemplate/reality/example1/NewDispute.reality1.jsonc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "externalDisputeID": "0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39", // questionID - "arbitrableDisputeID": "245", - "templateID": "42" -} diff --git a/kleros-sdk/config/v2-disputetemplate/reality/example2/DisputeDetails.reality2.jsonc b/kleros-sdk/config/v2-disputetemplate/reality/example2/DisputeDetails.reality2.jsonc deleted file mode 100644 index d3526463a..000000000 --- a/kleros-sdk/config/v2-disputetemplate/reality/example2/DisputeDetails.reality2.jsonc +++ /dev/null @@ -1,60 +0,0 @@ -{ - "$schema": "./DisputeDetails.reality.schema.json", - "title": "A reality.eth question", - "description": "A reality.eth question has been raised to arbitration.", - "question": "Who will win the FORMULA 1 AWS GRAN PREMIO DE ESPAÑA 2023 ?", - "type": "single-select", - "answers": [ - { - "id": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - "title": "Answered Too Soon", - "reserved": true - }, - { - "id": "0x00", - "title": "Invalid/Refuse to Arbitrate", - "reserved": true - }, - { - "id": "0x01", - "title": "Max VERSTAPPEN", - "reserved": false - }, - { - "id": "0x02", - "title": "Sergio PEREZ", - "reserved": false - }, - { - "id": "0x03", - "title": "Fernando ALONSO", - "reserved": false - } - ], - "policyURI": "/ipfs/QmW4zDA8X95cyfAsW9Nq1t7XNTyP3sMQAWNRFoQhMpgAv7/Kleros%2520Moderate%2520x%2520Reality.eth%2520Oracle%2520-%2520Telegram%2520Content%2520Moderation%2520Question%2520Resolution%2520Policy.pdf", - "frontendUrl": "https://reality.eth.link/app/#!/question/", // SDK should not change it - "arbitrableChainID": "100", - "arbitrableAddress": "0x2e39b8f43d0870ba896f516f78f57cde773cf805", // Realitio_v2_1_ArbitratorWithAppeals - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "category": "Oracle", - "lang": "en_US", - "specification": "KIP99", - "version": "1.0", - "metadata": { - "realityAddress": "0xe78996a233895be74a66f451f1019ca9734205cc", - "realityTemplateID": "2", - "realityQuestionID": "0xc2a52d38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b42", - "realityUser": "0xe0441ecf50205d3548456b29fde2a3010f9a61f3", - "realityCategory": "sport", - "realityLang": "en_US", - "realityTimeout": "86400", - "realityOpeningTime": "1681263978", - "realityCreationTime": "1681263995" - }, - "externalDisputeID": "0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39", - "arbitrableDisputeID": "246", - "arbitratorDisputeID": "4564", - "disputeTemplateID": "2", - "disputeTemplateHash": "0xC5u9...2283" -} diff --git a/kleros-sdk/config/v2-disputetemplate/reality/example2/DisputeTemplateInputs.reality2.txt b/kleros-sdk/config/v2-disputetemplate/reality/example2/DisputeTemplateInputs.reality2.txt deleted file mode 100644 index 330b28da3..000000000 --- a/kleros-sdk/config/v2-disputetemplate/reality/example2/DisputeTemplateInputs.reality2.txt +++ /dev/null @@ -1,5 +0,0 @@ -Who will win the FORMULA 1 AWS GRAN PREMIO DE ESPAÑA 2023 ? -single-select -,{"id":"0x00","title":"Invalid/Refuse to Arbitrate","reserved":true},{"id":"0x01","title":"Max VERSTAPPEN","reserved":false},{"id":"0x02","title":"Sergio PEREZ","reserved":false},{"id":"0x03","title":"Fernando ALONSO","reserved":false} -0xe78996a233895be74a66f451f1019ca9734205cc -0xc2a52d38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b42 \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/reality/example2/NewDispute.reality2.jsonc b/kleros-sdk/config/v2-disputetemplate/reality/example2/NewDispute.reality2.jsonc deleted file mode 100644 index 21c23d34e..000000000 --- a/kleros-sdk/config/v2-disputetemplate/reality/example2/NewDispute.reality2.jsonc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "externalDisputeID": "0xc2a52d38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b42", // questionID - "arbitrableDisputeID": "246", - "templateID": "2" -} diff --git a/kleros-sdk/config/v2-disputetemplate/reality/example3/DisputeMappings.json b/kleros-sdk/config/v2-disputetemplate/reality/example3/DisputeMappings.json deleted file mode 100644 index 161381a8d..000000000 --- a/kleros-sdk/config/v2-disputetemplate/reality/example3/DisputeMappings.json +++ /dev/null @@ -1,50 +0,0 @@ -[ - { - "type": "json", - "value": { - "question": "**Kleros Moderate:** Did the user, **degenape6** (ID: 1554345080), break the Telegram group, ***[Kleros Trading Group]()*** (ID: -1001151472172), ***[rules](https://cdn.kleros.link/ipfs/Qme3Qbj9rKUNHUe9vj9rqCLnTVUCWKy2YfveQF8HiuWQSu/Kleros%20Moderate%20Community%20Rules.pdf)*** due to conduct related to the ***[message](https://t.me/c/1151472172/116662)*** (***[backup](https://cdn.kleros.link/ipfs/QmVbFrZR1bcyQzZjvLyXwL9ekDxrqHERykdreRxXrw4nqg/animations_file_23.mp4)***)?", - "type": "single-select", - "answers": [ - { - "title": "Refuse to Arbitrate or Invalid", - "id": "0x00", - "reserved": true - }, - { - "title": "Yes", - "description": "The user broke the rules.", - "id": "0x01", - "reserved": false - }, - { - "title": "No", - "description": "The user didnt break the rules.", - "id": "0x02", - "reserved": false - }, - { - "id": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - "title": "Answered Too Soon", - "reserved": true, - "last": true - } - ], - "questionId": "0xe2a3bd38e3ad4e22336ac35b221bbbdd808d716209f84014c7bc3bf62f8e3b39", - "realityAddress": "0x14a6748192aBC6E10CA694Ae07bDd4327D6c7A51" - }, - "seek": [ - "question", - "type", - "answers", - "questionId", - "realityAddress" - ], - "populate": [ - "question", - "type", - "answers", - "questionId", - "realityAddress" - ] - } -] diff --git a/kleros-sdk/config/v2-disputetemplate/reality/example3/DisputeTemplate.json.mustache b/kleros-sdk/config/v2-disputetemplate/reality/example3/DisputeTemplate.json.mustache deleted file mode 100644 index 10dc42896..000000000 --- a/kleros-sdk/config/v2-disputetemplate/reality/example3/DisputeTemplate.json.mustache +++ /dev/null @@ -1,27 +0,0 @@ -{ - "title": "A reality.eth question", - "description": "A reality.eth question has been raised to arbitration.", - "question": "{{ question }}", - "type": "{{ type }}", - "answers": [ - {{# answers }} - { - "title": "{{ title }}", - "description": "{{ description }}", - "id": "{{ id }}", - "reserved": {{ reserved }} - }{{^ last }},{{/ last }} - {{/ answers }} - - ], - "policyURI": "/ipfs/QmZ5XaV2RVgBADq5qMpbuEwgCuPZdRgCeu8rhGtJWLV6yz", - "frontendUrl": "https://reality.eth.limo/app/#!/question/{{ realityAddress }}-{{ questionId }}", - "arbitrableChainID": "100", - "arbitrableAddress": "0x2e39b8f43d0870ba896f516f78f57cde773cf805", - "arbitratorChainID": "421613", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", - "category": "Oracle", - "lang": "en_US", - "specification": "KIP99", - "version": "1.0" -} \ No newline at end of file diff --git a/kleros-sdk/config/v2-disputetemplate/reality/kip-99.md b/kleros-sdk/config/v2-disputetemplate/reality/kip-99.md deleted file mode 100644 index be6903267..000000000 --- a/kleros-sdk/config/v2-disputetemplate/reality/kip-99.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -kip: KIP-99 -title: Reality.eth v2.1 as an arbitrable -author: Jaybuidl (@jaybuidl) -discussions-to: https://forum.kleros.io/c/proposal/<#> -status: Draft -type: Arbitrable -created: 2023-04-08 ---- - -## Summary - -This proposal intends to provide an explicit specification describing how the Kleros protocol handles arbitration requests originating from the Reality.eth v2.1 protocol. - -## Motivation - -The Reality protocol is the most complex integration of the Kleros protocol so far. Prior to this proposal, there has been a lack of a comprehensive specification. - -Contributing to the complexity of this integration are: the dynamic nature of the questions and possible answers, an extra reserved answer ("answered too soon"), and a different encoding of the "invalid/refused to arbitrate" answer. - -## Technical Specification - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174. - -### Supported functionalities - -#### Question types - -| Reality | Kleros | -| --------------- | -------------------------- | -| bool | ✅ maps to `single-select` | -| uint | TBC | -| single-select | ✅ | -| multiple-select | TBC | -| datetime | TBC | - -### Dispute details document - -#### New reserved answer - -The answers must include: - -```json -{ - "id": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - "title": "Answered Too Soon", - "reserved": true -} -``` - -#### External dispute identifier - -``` -externalDisputeID = realityQuestionID -``` - -#### Metadata - -##### Population of the Reality template - -1. Retrieve the Reality contract address: it is the address calling into `arbitrable.requestArbitration()` -1. Querying the event `LogNewQuestion` for the requested `realityQuestionID` on the Reality contract. -1. Retrieve the reality template by querying the event `LogNewTemplate` for `template_id` on the Reality contract. -1. Execute the template: - -```typescript -rc_question = require("@reality.eth/reality-eth-lib/formatters/question.js"); -rc_question.populatedJSONForTemplate(LogNewTemplate.question_text, LogNewQuestion.question); -``` - -##### Metadata object - -```typescript -{ - realityAddress = callerOf(arbitrable.requestArbitration()); - realityTemplateID = LogNewQuestion.template_id; - realityQuestionID = LogNewQuestion.question_id; - realityUser = LogNewQuestion.user; - realityType = populatedJSONForTemplate.type; - realityCategory = populatedJSONForTemplate.category; - realityLang = populatedJSONForTemplate.lang; - realityFormat = populatedJSONForTemplate.format; - realityTimeout = LogNewQuestion.timeout; - realityOpeningTime = LogNewQuestion.opening_ts; - realityCreationTime = LogNewQuestion.created; - realityNonce = LogNewQuestion.nonce; - realityFrontendUrl = frontendUrl + metadata.realityAddress + "-" + metadata.realityQuestionID; -} -``` - -### Arbitrable contract requirements - -#### Answer encoding - -```typescript -realityRuling = bytes32(klerosRuling - 1); -``` - -#### Interaction sequence - -[TODO](https://github.com/RealityETH/reality-eth-monorepo/blob/5565f55d19f627179f04d79a577ed6906ba78462/packages/docs/arbitrators.rst#creating-and-using-an-arbitration-contract) - -#### Views - -[TODO](https://github.com/RealityETH/reality-eth-monorepo/blob/5565f55d19f627179f04d79a577ed6906ba78462/packages/docs/arbitrators.rst#getting-information-about-the-arbitrator): `realitio()` pointing to Reality, metadata indicating template restrictions, terms of services, cross-chain arbitration. - -## Rationale - -TODO: the rationale should flesh out the specification by describing what motivated the design and why particular design decisions were made, as well as any alternative designs that were considered. - -## Implementation - -TODO: an implementation must be completed before any KIP proceeds to “Last Call” status. - -## Backwards Compatibility - -TODO - -## Security considerations - -All KIPs must include a discussion of the security implications/considerations relevant to the proposed change as well as proposed mitigations. A KIP cannot proceed to “Final” status without a sufficient security review from the core team. diff --git a/kleros-sdk/config/v2-disputetemplate/simple/NewDisputeTemplate.simple.json b/kleros-sdk/config/v2-disputetemplate/simple/NewDisputeTemplate.simple.json deleted file mode 100644 index 4406a9b37..000000000 --- a/kleros-sdk/config/v2-disputetemplate/simple/NewDisputeTemplate.simple.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "../NewDisputeTemplate.schema.json", - "title": "Let's do this", - "description": "We want to do this: %s", - "question": "Does it comply with the policy?", - "answers": [ - { - "title": "Yes", - "description": "Select this if you agree that it must be done." - }, - { - "title": "No", - "description": "Select this if you do not agree that it must be done." - } - ], - "policyURI": "/ipfs/Qmdvk...rSD6cE/policy.pdf", - "frontendUrl": "https://kleros-v2.netlify.app/#/cases/%s/overview", - "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", - "category": "Others", - "specification": "KIP001", - "lang": "en_US" -} diff --git a/kleros-sdk/config/v2-disputetemplate/simple/example/DisputeDetails.simple.jsonc b/kleros-sdk/config/v2-disputetemplate/simple/example/DisputeDetails.simple.jsonc deleted file mode 100644 index 9bfb40556..000000000 --- a/kleros-sdk/config/v2-disputetemplate/simple/example/DisputeDetails.simple.jsonc +++ /dev/null @@ -1,44 +0,0 @@ -{ - "title": "Let's do this", - "description": "We want to do this: airdrop magic money", - "question": "Does it comply with the policy?", - "type": "single-select", - "answers": [ - { - "id": "0x00", - "title": "Invalid/Refuse to Arbitrate", - "reserved": true - }, - { - "id": "0x01", - "title": "Yes", - "description": "Select this if you agree that it must be done.", - "reserved": false - }, - { - "id": "0x02", - "title": "No", - "description": "Select this if you do not agree that it must be done.", - "reserved": false - } - ], - "policyURI": "/ipfs/Qmdvk...rSD6cE/policy.pdf", - "frontendUrl": "https://kleros-v2.netlify.app/#/cases/4564/overview", - "arbitrableChainID": "10200", // Chiado - "arbitrableAddress": "0x22f40371b1d1bd7e6229e33b832cbe00d0b991b2", - "arbitratorChainID": "421614", // ArbitrumSepolia - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", // KlerosCore - "category": "Others", - "specification": "KIP001", - "lang": "en_US", - "metadata": { - "aliases": { - "submitter": "0x5B0EdFcD1038746Cc1C1eE3aCdb31feD910B13f4" - } - }, - "externalDisputeID": "13", // hash(action) - "arbitrableDisputeID": "3", - "arbitratorDisputeID": "4564", - "disputeTemplateID": "1", - "disputeTemplateHash": "0xD1u9...2254" -} diff --git a/kleros-sdk/config/v2-disputetemplate/simple/example/DisputeTemplateInputs.simple.txt b/kleros-sdk/config/v2-disputetemplate/simple/example/DisputeTemplateInputs.simple.txt deleted file mode 100644 index 7f62d34be..000000000 --- a/kleros-sdk/config/v2-disputetemplate/simple/example/DisputeTemplateInputs.simple.txt +++ /dev/null @@ -1,2 +0,0 @@ -airdrop magic money -3 diff --git a/kleros-sdk/config/v2-disputetemplate/simple/example/NewDispute.simple.jsonc b/kleros-sdk/config/v2-disputetemplate/simple/example/NewDispute.simple.jsonc deleted file mode 100644 index 97c28de7e..000000000 --- a/kleros-sdk/config/v2-disputetemplate/simple/example/NewDispute.simple.jsonc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "externalDisputeID": "ea6ed15a0867e22f40371b1d1bd7e6229e33b832cbe00d0b991b2da19d4f951a", - "arbitrableDisputeID": "3", - "templateID": "1" -} - -// action = "airdrop magic money" -// externalDisputeID = hash(action) = 0xea6ed15a0867e22f40371b1d1bd7e6229e33b832cbe00d0b991b2da19d4f951a \ No newline at end of file diff --git a/kleros-sdk/package.json b/kleros-sdk/package.json deleted file mode 100644 index 50569ef07..000000000 --- a/kleros-sdk/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "@kleros/kleros-sdk", - "version": "2.3.1", - "description": "SDK for Kleros version 2", - "repository": "git@github.com:kleros/kleros-v2.git", - "homepage": "https://github.com/kleros/kleros-v2/tree/master/kleros-sdk#readme", - "author": "Kleros", - "license": "MIT", - "main": "./lib/src/index.js", - "types": "./lib/src/index.d.ts", - "module": "./lib/src/index.js", - "files": [ - "lib/**/*", - "!lib/**/test/*" - ], - "type": "commonjs", - "volta": { - "node": "20.18.3" - }, - "publishConfig": { - "access": "public", - "tag": "latest" - }, - "scripts": { - "clean": "rimraf lib", - "build": "yarn clean && tsc", - "test": "vitest", - "test:ui": "vitest --ui", - "test:run": "vitest run", - "release:patch": "scripts/publish.sh patch", - "release:minor": "scripts/publish.sh minor", - "release:major": "scripts/publish.sh major" - }, - "devDependencies": { - "@types/mustache": "^4.2.5", - "@types/node": "^20.17.6", - "@vitest/ui": "^1.6.1", - "mocha": "^10.8.2", - "rimraf": "^6.0.1", - "ts-node": "^10.9.2", - "typescript": "^5.6.3", - "viem": "^2.24.1", - "vitest": "^1.6.1" - }, - "dependencies": { - "@reality.eth/reality-eth-lib": "^3.4.14", - "@urql/core": "^5.0.8", - "mustache": "^4.2.0", - "zod": "^3.23.8" - }, - "peerDependencies": { - "viem": "^2.24.1" - } -} diff --git a/kleros-sdk/scripts/publish.sh b/kleros-sdk/scripts/publish.sh deleted file mode 100755 index f0b957963..000000000 --- a/kleros-sdk/scripts/publish.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -#-------------------------------------- -# Error handling -#-------------------------------------- - -set -Ee -function _catch { - # Don't propagate to outer shell - exit 0 -} -function _finally { - # TODO: rollback version bump - rm -rf $SCRIPT_DIR/../dist -} -trap _catch ERR -trap _finally EXIT - -#-------------------------------------- - -# Check if any tracked files are currently changed, ignoring untracked files -if [ -n "$(git status --porcelain -uno)" ]; then - echo "Error: There are uncommitted changes in tracked files. Please commit or stash them before publishing." - exit 1 -fi - -yarn version $1 - -version=$(cat package.json | jq -r .version) -echo "Publishing version $version" - -git add package.json -git commit -m "chore(sdk): release @kleros/kleros-sdk@$version" -git tag "@kleros/kleros-sdk@$version" -m "@kleros/kleros-sdk@$version" -git push -git push --tags - -yarn clean -yarn build -yarn npm publish diff --git a/kleros-sdk/src/consts.ts b/kleros-sdk/src/consts.ts deleted file mode 100644 index 4304a20a5..000000000 --- a/kleros-sdk/src/consts.ts +++ /dev/null @@ -1 +0,0 @@ -export const MAX_BYTE_SIZE = 1000000; diff --git a/kleros-sdk/src/dataMappings/actions/callAction.ts b/kleros-sdk/src/dataMappings/actions/callAction.ts deleted file mode 100644 index d8a2e7b0c..000000000 --- a/kleros-sdk/src/dataMappings/actions/callAction.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { parseAbiItem } from "viem"; -import { AbiCallMapping } from "../utils/actionTypes"; -import { createResultObject } from "../utils/createResultObject"; -import { getPublicClient } from "../../sdk"; -import { SdkNotConfiguredError } from "../../errors"; - -export const callAction = async (mapping: AbiCallMapping) => { - const publicClient = getPublicClient(); - - if (!publicClient) { - throw new SdkNotConfiguredError(); - } - - const { abi: source, address, functionName, args, seek, populate } = mapping; - const parsedAbi = typeof source === "string" ? parseAbiItem(source) : source; - - const data = await publicClient.readContract({ - address, - abi: [parsedAbi], - functionName, - args, - }); - - return createResultObject(data, seek, populate); -}; diff --git a/kleros-sdk/src/dataMappings/actions/eventAction.ts b/kleros-sdk/src/dataMappings/actions/eventAction.ts deleted file mode 100644 index 0f460af1d..000000000 --- a/kleros-sdk/src/dataMappings/actions/eventAction.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { parseAbiItem, type AbiEvent } from "viem"; -import { AbiEventMapping } from "../utils/actionTypes"; -import { createResultObject } from "../utils/createResultObject"; -import { getPublicClient } from "../../sdk"; -import { SdkNotConfiguredError } from "../../errors"; - -export const eventAction = async (mapping: AbiEventMapping) => { - const publicClient = getPublicClient(); - - if (!publicClient) { - throw new SdkNotConfiguredError(); - } - - const { abi: source, address, eventFilter, seek, populate } = mapping; - const parsedAbi = parseAbiItem(source) as AbiEvent; - - const filter = await publicClient.createEventFilter({ - address, - event: parsedAbi, - args: eventFilter.args, - fromBlock: eventFilter.fromBlock, - toBlock: eventFilter.toBlock, - }); - - const contractEvent = await publicClient.getFilterLogs({ filter }); - const eventData = contractEvent[0].args; - - return createResultObject(eventData, seek, populate); -}; diff --git a/kleros-sdk/src/dataMappings/actions/fetchIpfsJsonAction.ts b/kleros-sdk/src/dataMappings/actions/fetchIpfsJsonAction.ts deleted file mode 100644 index 7a648dd02..000000000 --- a/kleros-sdk/src/dataMappings/actions/fetchIpfsJsonAction.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { MAX_BYTE_SIZE } from "../../consts"; -import { RequestError } from "../../errors"; -import { FetchIpfsJsonMapping } from "../utils/actionTypes"; -import { createResultObject } from "../utils/createResultObject"; - -export const fetchIpfsJsonAction = async (mapping: FetchIpfsJsonMapping) => { - const { ipfsUri, seek, populate } = mapping; - - let httpUri; - if (ipfsUri.startsWith("/ipfs/")) { - httpUri = `https://ipfs.io${ipfsUri}`; - } else if (ipfsUri.startsWith("ipfs://")) { - httpUri = ipfsUri.replace("ipfs://", "https://ipfs.io/ipfs/"); - } else if (!ipfsUri.startsWith("http")) { - httpUri = `https://ipfs.io/ipfs/${ipfsUri}`; - } else { - throw new RequestError("Invalid IPFS URI format", httpUri); - } - - const response = await fetch(httpUri, { method: "GET" }); - - if (!response.ok) { - throw new RequestError("Failed to fetch data from IPFS", httpUri); - } - - const contentLength = response.headers.get("content-length"); - if (contentLength && parseInt(contentLength) > MAX_BYTE_SIZE) { - throw new RequestError("Response size is too large", httpUri); - } - - const contentType = response.headers.get("content-type"); - if (!contentType || !contentType.includes("application/json")) { - throw new RequestError("Fetched data is not JSON", httpUri); - } - - const data = (await response.json()) as any; - - return createResultObject(data, seek, populate); -}; diff --git a/kleros-sdk/src/dataMappings/actions/jsonAction.ts b/kleros-sdk/src/dataMappings/actions/jsonAction.ts deleted file mode 100644 index 86b14447d..000000000 --- a/kleros-sdk/src/dataMappings/actions/jsonAction.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { JsonMapping } from "../utils/actionTypes"; -import { createResultObject } from "../utils/createResultObject"; - -export const jsonAction = (mapping: JsonMapping) => { - const { value, seek, populate } = mapping; - - // Parse the source if it's a JSON string - const parsedValue = typeof value === "string" ? JSON.parse(value) : value; - - return createResultObject(parsedValue, seek, populate); -}; diff --git a/kleros-sdk/src/dataMappings/actions/subgraphAction.ts b/kleros-sdk/src/dataMappings/actions/subgraphAction.ts deleted file mode 100644 index d3d7b492b..000000000 --- a/kleros-sdk/src/dataMappings/actions/subgraphAction.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { SubgraphMapping } from "../utils/actionTypes"; -import { createResultObject } from "../utils/createResultObject"; - -export const subgraphAction = async (mapping: SubgraphMapping) => { - const { endpoint, query, variables, seek, populate } = mapping; - - const response = await fetch(endpoint, { - method: "POST", - headers: { - "Content-Type": "application/json", - Accept: "application/json", - }, - body: JSON.stringify({ query, variables }), - }); - - const { data } = (await response.json()) as any; - - return createResultObject(data, seek, populate); -}; diff --git a/kleros-sdk/src/dataMappings/executeActions.ts b/kleros-sdk/src/dataMappings/executeActions.ts deleted file mode 100644 index f78e4e3b6..000000000 --- a/kleros-sdk/src/dataMappings/executeActions.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { UnsupportedActionError } from "../errors"; -import { callAction } from "./actions/callAction"; -import { eventAction } from "./actions/eventAction"; -import { fetchIpfsJsonAction } from "./actions/fetchIpfsJsonAction"; -import { jsonAction } from "./actions/jsonAction"; -import { subgraphAction } from "./actions/subgraphAction"; -import { retrieveRealityData } from "./retrieveRealityData"; -import { - validateAbiCallMapping, - validateAbiEventMapping, - validateFetchIpfsJsonMapping, - validateJsonMapping, - validateRealityMapping, - validateSubgraphMapping, -} from "./utils/actionTypeValidators"; -import { ActionMapping } from "./utils/actionTypes"; -import { replacePlaceholdersWithValues } from "./utils/replacePlaceholdersWithValues"; -import { Address } from "viem"; - -// Add these type definitions at the top of the file -type ActionResult = Record<string, unknown> | null | undefined; - -// Update the function signature -export const executeAction = async ( - mapping: ActionMapping, - context: Record<string, unknown> = {} -): Promise<ActionResult> => { - mapping = replacePlaceholdersWithValues(mapping, context) as ActionMapping; - - switch (mapping.type) { - case "graphql": - return await subgraphAction(validateSubgraphMapping(mapping)); - case "json": - return jsonAction(validateJsonMapping(mapping)); - case "abi/call": - return await callAction(validateAbiCallMapping(mapping)); - case "abi/event": - return await eventAction(validateAbiEventMapping(mapping)); - case "fetch/ipfs/json": - return await fetchIpfsJsonAction(validateFetchIpfsJsonMapping(mapping)); - case "reality": - mapping = validateRealityMapping(mapping); - return await retrieveRealityData(mapping.realityQuestionID, context.arbitrableAddress as Address); - default: - throw new UnsupportedActionError(`Unsupported action type: ${JSON.stringify(mapping)}`); - } -}; - -export const executeActions = async ( - mappings: ActionMapping[], - initialContext: Record<string, unknown> = {} -): Promise<Record<string, unknown>> => { - const context: Record<string, unknown> = { ...initialContext }; - - for (const mapping of mappings) { - const actionResult = await executeAction(mapping, context); - - if (actionResult) { - Object.keys(actionResult).forEach((key) => { - context[key] = actionResult[key]; - }); - } - } - - return context; -}; diff --git a/kleros-sdk/src/dataMappings/index.ts b/kleros-sdk/src/dataMappings/index.ts deleted file mode 100644 index 74599330a..000000000 --- a/kleros-sdk/src/dataMappings/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./executeActions"; diff --git a/kleros-sdk/src/dataMappings/retrieveRealityData.ts b/kleros-sdk/src/dataMappings/retrieveRealityData.ts deleted file mode 100644 index e0a3907fe..000000000 --- a/kleros-sdk/src/dataMappings/retrieveRealityData.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { InvalidContextError, NotFoundError } from "../errors"; -import { executeAction } from "./executeActions"; -import { AbiEventMapping } from "./utils/actionTypes"; - -export type RealityAnswer = { - title: string; - description: string; - id: string; - reserved: boolean; - last?: boolean; -}; - -export const retrieveRealityData = async (realityQuestionID: string, arbitrable?: `0x${string}`) => { - if (!arbitrable) { - throw new InvalidContextError("No arbitrable address provided"); - } - const questionMapping: AbiEventMapping = { - type: "abi/event", - abi: "event LogNewQuestion(bytes32 indexed question_id, address indexed user, uint256 template_id, string question, bytes32 indexed content_hash, address arbitrator, uint32 timeout, uint32 opening_ts, uint256 nonce, uint256 created)", - address: arbitrable, - eventFilter: { - args: [realityQuestionID], - fromBlock: "earliest", - toBlock: "latest", - }, - seek: [ - "question_id", - "user", - "template_id", - "question", - "content_hash", - "arbitrator", - "timeout", - "opening_ts", - "nonce", - "created", - ], - populate: [ - "realityQuestionID", - "realityUser", - "realityTemplateID", - "realityQuestion", - "contentHash", - "arbitrator", - "timeout", - "openingTs", - "nonce", - "created", - ], - }; - - const questionData = await executeAction(questionMapping); - - const templateMapping: AbiEventMapping = { - type: "abi/event", - abi: "event LogNewTemplate(uint256 indexed template_id, address indexed user, string question_text)", - address: arbitrable, - eventFilter: { - args: [0], - fromBlock: "earliest", - toBlock: "latest", - }, - seek: ["template_id", "question_text"], - populate: ["templateID", "questionText"], - }; - - const templateData = await executeAction(templateMapping); - - if (!templateData) { - throw new NotFoundError("Template Data", "Failed to retrieve template data"); - } - - if (!questionData) { - throw new NotFoundError("Question Data", "Failed to retrieve question data"); - } - - const rc_question = require("@reality.eth/reality-eth-lib/formatters/question.js"); - const populatedTemplate = rc_question.populatedJSONForTemplate( - templateData.questionText, - questionData.realityQuestion - ); - - let answers: RealityAnswer[] = []; - if (populatedTemplate.type === "bool") { - answers = [ - { - title: "Yes", - description: "", - id: "0x01", - reserved: false, - }, - { - title: "No", - description: "", - id: "0x02", - reserved: false, - }, - ]; - } - - answers.push({ - id: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - title: "Answered Too Soon", - description: "", - reserved: true, - }); - - for (let i = 0; i < answers.length; i++) { - answers[i].last = i === answers.length - 1; - } - - return { - question: questionData.realityQuestion, - type: populatedTemplate.type, - realityAddress: questionData.arbitrator, - questionId: questionData.realityQuestionID, - realityUser: questionData.realityUser, - answers, - }; -}; diff --git a/kleros-sdk/src/dataMappings/utils/actionTypeValidators.ts b/kleros-sdk/src/dataMappings/utils/actionTypeValidators.ts deleted file mode 100644 index 74b064922..000000000 --- a/kleros-sdk/src/dataMappings/utils/actionTypeValidators.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { InvalidMappingError } from "../../errors"; -import { - SubgraphMapping, - AbiEventMapping, - AbiCallMapping, - JsonMapping, - ActionMapping, - FetchIpfsJsonMapping, -} from "./actionTypes"; - -export const validateSubgraphMapping = (mapping: ActionMapping) => { - return validateMapping(mapping as SubgraphMapping, ["endpoint"]); -}; - -export const validateAbiEventMapping = (mapping: ActionMapping) => { - return validateMapping(mapping as AbiEventMapping, ["abi", "eventFilter"]); -}; - -export const validateAbiCallMapping = (mapping: ActionMapping) => { - return validateMapping(mapping as AbiCallMapping, ["abi", "functionName"]); -}; - -export const validateJsonMapping = (mapping: ActionMapping) => { - return validateMapping(mapping as JsonMapping, ["value"]); -}; - -export const validateFetchIpfsJsonMapping = (mapping: ActionMapping) => { - return validateMapping(mapping as FetchIpfsJsonMapping, ["ipfsUri"]); -}; - -export const validateRealityMapping = (mapping: ActionMapping) => { - if (mapping.type !== "reality" || typeof mapping.realityQuestionID !== "string") { - throw new InvalidMappingError("Expected field 'realityQuestionID' to be a string."); - } - return mapping; -}; - -const validateMapping = <T extends ActionMapping>(mapping: T, requiredFields: (keyof T)[]) => { - for (const field of requiredFields) { - if (mapping[field] === undefined) { - throw new InvalidMappingError(`${field.toString()} is required for ${mapping.type}`); - } - } - return mapping; -}; diff --git a/kleros-sdk/src/dataMappings/utils/actionTypes.ts b/kleros-sdk/src/dataMappings/utils/actionTypes.ts deleted file mode 100644 index 630afda6b..000000000 --- a/kleros-sdk/src/dataMappings/utils/actionTypes.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { type Address, type BlockNumber, type BlockTag } from "viem"; - -type MappingType = "graphql" | "abi/call" | "abi/event" | "json" | "fetch/ipfs/json" | "reality"; - -type AbstractMapping<T extends MappingType> = { - type: T; - seek: string[]; - populate: string[]; -}; - -export type JsonMapping = AbstractMapping<"json"> & { - value: object; -}; - -export type SubgraphMapping = AbstractMapping<"graphql"> & { - endpoint: string; - query: string; - variables: { [key: string]: unknown }; -}; - -export type AbiCallMapping = AbstractMapping<"abi/call"> & { - abi: string; - address: Address; - functionName: string; - args: any[]; -}; - -export type AbiEventMapping = AbstractMapping<"abi/event"> & { - abi: string; - address: Address; - eventFilter: { - fromBlock: BlockNumber | BlockTag; - toBlock: BlockNumber | BlockTag; - args: any; - }; -}; - -export type FetchIpfsJsonMapping = AbstractMapping<"fetch/ipfs/json"> & { - ipfsUri: string; -}; - -export type RealityMapping = AbstractMapping<"reality"> & { - realityQuestionID: string; -}; - -export type ActionMapping = - | SubgraphMapping - | AbiEventMapping - | AbiCallMapping - | JsonMapping - | FetchIpfsJsonMapping - | RealityMapping; diff --git a/kleros-sdk/src/dataMappings/utils/createResultObject.ts b/kleros-sdk/src/dataMappings/utils/createResultObject.ts deleted file mode 100644 index 0dd0575ef..000000000 --- a/kleros-sdk/src/dataMappings/utils/createResultObject.ts +++ /dev/null @@ -1,26 +0,0 @@ -export const createResultObject = ( - sourceData: Record<string, any>, - seek: string[], - populate: string[] -): Record<string, any> => { - const result: Record<string, any> = {}; - - const getNestedValue = (obj: any, path: string) => { - return path.split(".").reduce((acc, part) => { - if (acc && part.includes("[")) { - const [key, index] = part.replace(/\]/g, "").split("["); - return acc[key]?.[index]; - } - return acc ? acc[part] : undefined; - }, obj); - }; - - seek.forEach((key, idx) => { - const foundValue = getNestedValue(sourceData, key); - if (foundValue !== undefined) { - result[populate[idx]] = foundValue; - } - }); - - return result; -}; diff --git a/kleros-sdk/src/dataMappings/utils/disputeDetailsSchema.ts b/kleros-sdk/src/dataMappings/utils/disputeDetailsSchema.ts deleted file mode 100644 index 78c4697a7..000000000 --- a/kleros-sdk/src/dataMappings/utils/disputeDetailsSchema.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { z } from "zod"; -import { isAddress } from "viem"; -import { normalize } from "viem/ens"; - -export const isHexAddress = (str: string): boolean => /^0x[a-fA-F0-9]{40}$/.test(str); -export const isHexId = (str: string): boolean => /^0x[a-fA-F0-9]{1,64}$/.test(str); -export const isMultiaddr = (str: string): boolean => - /^\/(?:ip4|ip6|dns4|dns6|dnsaddr|tcp|udp|utp|tls|ws|wss|p2p-circuit|p2p-webrtc-star|p2p-webrtc-direct|p2p-websocket-star|onion|ipfs)(\/[^\s\/]+)+$|^ipfs:\/\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)?$/.test( - str - ); - -export const ethAddressSchema = z.string().refine((value) => isAddress(value, { strict: false }), { - message: "Provided address is invalid.", -}); - -export const ensNameSchema = z - .string() - .refine((value) => typeof normalize(value) === "string" && value.endsWith(".eth"), { - message: "Provided ENS name is invalid.", - }); - -export const ethAddressOrEnsNameSchema = z.union([ethAddressSchema, ensNameSchema], { - errorMap: () => ({ message: "Provided address or ENS name is invalid." }), -}); - -export enum QuestionType { - Bool = "bool", - Datetime = "datetime", - MultipleSelect = "multiple-select", - SingleSelect = "single-select", - Uint = "uint", -} -export const QuestionTypeSchema = z.nativeEnum(QuestionType); - -export const AnswerSchema = z.object({ - id: z.string().regex(/^0x[0-9a-fA-F]+$/), - title: z.string(), - description: z.string(), - reserved: z.boolean().optional(), -}); - -export const RefuseToArbitrateAnswer = { - id: "0x0", - title: "Refuse to Arbitrate / Invalid", - description: "Refuse to Arbitrate / Invalid", - reserved: true, -}; - -export const AttachmentSchema = z.object({ - label: z.string(), - uri: z.string(), -}); - -export const AliasSchema = z.record(ethAddressOrEnsNameSchema); - -const MetadataSchema = z.record(z.unknown()); - -const DisputeDetailsSchema = z.object({ - title: z.string(), - description: z.string(), - question: z.string(), - answers: z.array(AnswerSchema), - policyURI: z.string().refine((value) => isMultiaddr(value), { - message: "Provided policy URI is not a valid multiaddr.", - }), - attachment: AttachmentSchema.optional(), - frontendUrl: z.string().optional(), - metadata: MetadataSchema.optional(), - arbitratorChainID: z.string(), - arbitratorAddress: ethAddressSchema, - category: z.string().optional(), - lang: z.string().optional(), - specification: z.string().optional(), - aliases: AliasSchema.optional(), - version: z.string(), -}); - -export default DisputeDetailsSchema; diff --git a/kleros-sdk/src/dataMappings/utils/disputeDetailsTypes.ts b/kleros-sdk/src/dataMappings/utils/disputeDetailsTypes.ts deleted file mode 100644 index 58d563932..000000000 --- a/kleros-sdk/src/dataMappings/utils/disputeDetailsTypes.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { z } from "zod"; -import DisputeDetailsSchema, { AliasSchema, AnswerSchema, AttachmentSchema } from "./disputeDetailsSchema"; - -export { QuestionType } from "./disputeDetailsSchema"; -export type DisputeDetails = z.infer<typeof DisputeDetailsSchema>; -export type Answer = z.infer<typeof AnswerSchema>; -export type Alias = z.infer<typeof AliasSchema>; -export type Attachment = z.infer<typeof AttachmentSchema>; diff --git a/kleros-sdk/src/dataMappings/utils/index.ts b/kleros-sdk/src/dataMappings/utils/index.ts deleted file mode 100644 index 1c9d85d45..000000000 --- a/kleros-sdk/src/dataMappings/utils/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from "./populateTemplate"; -export * from "./retrieveVariables"; -export * from "./disputeDetailsTypes"; - -export const isUndefined = (maybeObject: any): maybeObject is undefined | null => - typeof maybeObject === "undefined" || maybeObject === null; diff --git a/kleros-sdk/src/dataMappings/utils/lambdas.ts b/kleros-sdk/src/dataMappings/utils/lambdas.ts deleted file mode 100644 index af6a44b5b..000000000 --- a/kleros-sdk/src/dataMappings/utils/lambdas.ts +++ /dev/null @@ -1,13 +0,0 @@ -export const lambdas = { - // Converts a value to hex representation - hex: function () { - return function (text: string, render: (value: string) => string) { - const originalValueStr = render(text); - const num = parseInt(originalValueStr, 10); - if (!isNaN(num)) { - return "0x" + num.toString(16).toLowerCase(); - } - return originalValueStr; - }; - }, -}; diff --git a/kleros-sdk/src/dataMappings/utils/populateTemplate.ts b/kleros-sdk/src/dataMappings/utils/populateTemplate.ts deleted file mode 100644 index dc8ff8186..000000000 --- a/kleros-sdk/src/dataMappings/utils/populateTemplate.ts +++ /dev/null @@ -1,34 +0,0 @@ -import mustache from "mustache"; -import { DisputeDetails } from "./disputeDetailsTypes"; -import DisputeDetailsSchema, { RefuseToArbitrateAnswer } from "./disputeDetailsSchema"; -import { lambdas } from "./lambdas"; - -export const populateTemplate = (mustacheTemplate: string, data: any): DisputeDetails => { - const render = mustache.render(mustacheTemplate, { ...lambdas, ...data }); - const dispute = JSON.parse(render); - - const validation = DisputeDetailsSchema.safeParse(dispute); - if (!validation.success) { - throw validation.error; - } - - return findAndUpdateRTA(dispute); -}; - -// Filter out any existing answer with id 0 and add customised Refuse to Arbitrate option -const findAndUpdateRTA = (dispute: DisputeDetails) => { - const templateRTAIndex = (dispute as DisputeDetails).answers.findIndex( - (answer) => answer.id && BigInt(answer.id) === BigInt(0) - ); - - if (templateRTAIndex !== -1) { - dispute.answers[templateRTAIndex] = { - ...RefuseToArbitrateAnswer, - description: dispute.answers[templateRTAIndex].description ?? RefuseToArbitrateAnswer.description, - }; - } else { - dispute.answers = [RefuseToArbitrateAnswer, ...dispute.answers]; - } - - return dispute; -}; diff --git a/kleros-sdk/src/dataMappings/utils/replacePlaceholdersWithValues.ts b/kleros-sdk/src/dataMappings/utils/replacePlaceholdersWithValues.ts deleted file mode 100644 index 655cad0c5..000000000 --- a/kleros-sdk/src/dataMappings/utils/replacePlaceholdersWithValues.ts +++ /dev/null @@ -1,43 +0,0 @@ -import mustache from "mustache"; -import retrieveVariables from "./retrieveVariables"; -import { ActionMapping } from "./actionTypes"; -import { InvalidContextError } from "../../errors"; -import { isUndefined } from "."; - -export function replacePlaceholdersWithValues( - mapping: ActionMapping, - context: Record<string, unknown> -): ActionMapping | ActionMapping[] { - function replace(obj: ActionMapping): ActionMapping | ActionMapping[] { - if (typeof obj === "string") { - validateContext(obj, context); - return mustache.render(obj, context) as unknown as ActionMapping; - } else if (Array.isArray(obj)) { - return obj.map(replace) as unknown as ActionMapping[]; - } else if (typeof obj === "object" && obj !== null) { - return Object.fromEntries( - Object.entries(obj).map(([key, value]) => [key, replace(value)]) - ) as unknown as ActionMapping[]; - } else { - return obj; - } - } - - return replace(mapping); -} - -/** - * - * @param template - * @param context - * @description retrieves all variables from a template and validates if they are provided in the context - */ -const validateContext = (template: string, context: Record<string, unknown>) => { - const variables = retrieveVariables(template); - - variables.forEach((variable) => { - if (isUndefined(context[variable])) - throw new InvalidContextError(`Expected key "${variable}" to be provided in context.`); - }); - return true; -}; diff --git a/kleros-sdk/src/dataMappings/utils/retrieveVariables.ts b/kleros-sdk/src/dataMappings/utils/retrieveVariables.ts deleted file mode 100644 index 386dbe4a7..000000000 --- a/kleros-sdk/src/dataMappings/utils/retrieveVariables.ts +++ /dev/null @@ -1,20 +0,0 @@ -import mustache from "mustache"; - -/** - * - * @param template - * @returns Variables[] returns the variables in a template string - * @note This is a naive implementation and wil not work for complex tags, only works for {{}} and {{{}}} tags for now. - * Reference : https://github.com/janl/mustache.js/issues/538 - */ -const retrieveVariables = (template: string) => - mustache - .parse(template) - .filter(function (v) { - return v[0] === "name" || v[0] === "&"; - }) // add more conditions here to include more tags - .map(function (v) { - return v[1]; - }); - -export default retrieveVariables; diff --git a/kleros-sdk/src/errors/index.ts b/kleros-sdk/src/errors/index.ts deleted file mode 100644 index af000ba37..000000000 --- a/kleros-sdk/src/errors/index.ts +++ /dev/null @@ -1,57 +0,0 @@ -export class CustomError extends Error { - constructor(name: string, message: string) { - super(message); - this.name = name; - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - } -} - -export class InvalidContextError extends CustomError { - constructor(message: string) { - super("InvalidContextError", message); - } -} - -export class InvalidMappingError extends CustomError { - constructor(message: string) { - super("InvalidMappingError", message); - } -} - -export class NotFoundError extends CustomError { - public resourceName: string; - - constructor(resourceName: string, message: string) { - super("NotFoundError", message); - this.resourceName = resourceName; - } -} -export class RequestError extends CustomError { - public endpoint: string | undefined; - - constructor(message: string, endpoint?: string) { - super("RequestError", message); - this.endpoint = endpoint; - } -} - -export class UnsupportedActionError extends CustomError { - constructor(message: string) { - super("UnsupportedActionError", message); - } -} - -export class InvalidFormatError extends CustomError { - constructor(message: string) { - super("InvalidFormatError", message); - } -} - -export class SdkNotConfiguredError extends CustomError { - constructor() { - super("SdkNotConfiguredError", "SDK not configured. Please call `configureSDK` before using."); - } -} diff --git a/kleros-sdk/src/index.ts b/kleros-sdk/src/index.ts deleted file mode 100644 index 92719d922..000000000 --- a/kleros-sdk/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./sdk"; -export * from "./types"; -export * from "./utils"; -export * from "./dataMappings"; -export * from "./dataMappings/utils"; diff --git a/kleros-sdk/src/requests/fetchDisputeDetails.ts b/kleros-sdk/src/requests/fetchDisputeDetails.ts deleted file mode 100644 index adb58c3f8..000000000 --- a/kleros-sdk/src/requests/fetchDisputeDetails.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { RequestError } from "../errors"; -import { CombinedError, gql } from "@urql/core"; -import getClient from "./gqlClient"; - -type DisputeDetailsQueryResponse = { - dispute: { - arbitrated: { - id: string; - }; - arbitrableChainId: number; - externalDisputeId: number; - templateId: number; - }; -}; - -const query = gql` - query DisputeDetails($id: ID!) { - dispute(id: $id) { - arbitrated { - id - } - arbitrableChainId - externalDisputeId - templateId - } - } -`; - -const fetchDisputeDetails = async (endpoint: string, id: bigint) => { - const variables = { id: id.toString() }; - - try { - const client = getClient(endpoint); - return client - .query<DisputeDetailsQueryResponse>(query, variables) - .toPromise() - .then((res) => { - if (res?.error) { - throw res.error; - } - return res?.data; - }); - } catch (error: unknown) { - if (error instanceof CombinedError) { - throw error; - } else if (error instanceof Error) { - throw new RequestError(`Error querying Dispute Details: ${error.message}`, endpoint); - } - throw new RequestError("An unknown error occurred while querying Dispute Details", endpoint); - } -}; - -export default fetchDisputeDetails; diff --git a/kleros-sdk/src/requests/fetchDisputeTemplateFromId.ts b/kleros-sdk/src/requests/fetchDisputeTemplateFromId.ts deleted file mode 100644 index acc57a3f3..000000000 --- a/kleros-sdk/src/requests/fetchDisputeTemplateFromId.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { CombinedError, gql } from "@urql/core"; -import { RequestError } from "../errors"; -import getClient from "./gqlClient"; - -type DisputeTemplateQueryResponse = { - disputeTemplate: { - templateData: string; - templateDataMappings: string; - }; -}; -const query = gql` - query DisputeTemplate($id: ID!) { - disputeTemplate(id: $id) { - templateData - templateDataMappings - } - } -`; - -const fetchDisputeTemplateFromId = async (endpoint: string, id: number) => { - const variables = { id: id.toString() }; - - try { - const client = getClient(endpoint); - return client - .query<DisputeTemplateQueryResponse>(query, variables) - .toPromise() - .then((res) => { - if (res?.error) { - throw res.error; - } - return res?.data; - }); - } catch (error: unknown) { - if (error instanceof CombinedError) { - throw error; - } else if (error instanceof Error) { - throw new RequestError(`Error querying Dispute Template: ${error.message}`, endpoint); - } - throw new RequestError("An unknown error occurred while querying Dispute Template", endpoint); - } -}; - -export default fetchDisputeTemplateFromId; diff --git a/kleros-sdk/src/requests/gqlClient.ts b/kleros-sdk/src/requests/gqlClient.ts deleted file mode 100644 index dcae74a31..000000000 --- a/kleros-sdk/src/requests/gqlClient.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { cacheExchange, Client, fetchExchange } from "@urql/core"; - -const clients = new Map<string, Client>(); - -const getClient = (endpoint: string) => { - let client = clients.get(endpoint); - - if (!client) { - client = new Client({ - url: endpoint, - exchanges: [cacheExchange, fetchExchange], - }); - clients.set(endpoint, client); - } - return client; -}; - -export default getClient; diff --git a/kleros-sdk/src/sdk.ts b/kleros-sdk/src/sdk.ts deleted file mode 100644 index 00e9c2940..000000000 --- a/kleros-sdk/src/sdk.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { createPublicClient, type PublicClient } from "viem"; -import { SdkConfig } from "./types"; -import { SdkNotConfiguredError } from "./errors"; - -let publicClient: PublicClient | undefined; - -export const configureSDK = (config: SdkConfig) => { - if (config.client) { - publicClient = createPublicClient(config.client); - } -}; - -export const getPublicClient = (): PublicClient | undefined => { - if (!publicClient) { - throw new SdkNotConfiguredError(); - } - return publicClient; -}; diff --git a/kleros-sdk/src/types/index.ts b/kleros-sdk/src/types/index.ts deleted file mode 100644 index 1d4c58190..000000000 --- a/kleros-sdk/src/types/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { PublicClientConfig } from "viem"; - -export type SdkConfig = { - client: PublicClientConfig; -}; - -type GetDisputeParametersOptions = { - sdkConfig?: SdkConfig; - additionalContext?: Record<string, any>; -}; - -export type GetDisputeParameters = { - disputeId: bigint; - coreSubgraph: string; - dtrSubgraph: string; - options?: GetDisputeParametersOptions; -}; diff --git a/kleros-sdk/src/utils/getDispute.ts b/kleros-sdk/src/utils/getDispute.ts deleted file mode 100644 index c73fa1f24..000000000 --- a/kleros-sdk/src/utils/getDispute.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { executeActions } from "../dataMappings"; -import { DisputeDetails, populateTemplate } from "../dataMappings/utils"; -import { NotFoundError } from "../errors"; -import fetchDisputeDetails from "../requests/fetchDisputeDetails"; -import fetchDisputeTemplateFromId from "../requests/fetchDisputeTemplateFromId"; -import { configureSDK } from "../sdk"; -import { GetDisputeParameters } from "../types"; - -/** - * Retrieves dispute parameters based on the provided dispute ID and subgraph endpoints. - * - * @param {GetDisputeParameters} disputeParameters - The parameters required to get the dispute. - * @param {bigint} disputeParameters.disputeId - A unique numeric identifier of the dispute in the Kleros Core contract. - * @param {string} disputeParameters.coreSubgraph - Endpoint for the Kleros core subgraph to use. - * @param {string} disputeParameters.dtrSubgraph - Endpoint for the Kleros dispute template registry subgraph. - * @param {GetDisputeParametersOptions | undefined} disputeParameters.options - Optional parameters to configure the SDK and provide additional context, if not configured already. - */ -export const getDispute = async (disputeParameters: GetDisputeParameters): Promise<DisputeDetails | undefined> => { - if (disputeParameters.options?.sdkConfig) { - configureSDK(disputeParameters.options.sdkConfig); - } - const { disputeId, dtrSubgraph, coreSubgraph, options } = disputeParameters; - - const disputeDetails = await fetchDisputeDetails(coreSubgraph, disputeId); - - if (!disputeDetails?.dispute) { - throw new NotFoundError("Dispute Details", `Dispute details not found for disputeId: ${disputeId}`); - } - - const template = await fetchDisputeTemplateFromId(dtrSubgraph, disputeDetails.dispute.templateId); - - if (!template) { - throw new NotFoundError( - "Dispute Template", - `Template not found for template ID: ${disputeDetails.dispute.templateId}` - ); - } - - const { templateData, templateDataMappings } = template.disputeTemplate; - - const initialContext = { - arbitrableAddress: disputeDetails.dispute.arbitrated.id, - arbitrableChainID: disputeDetails.dispute.arbitrableChainId, - externalDisputeID: disputeDetails.dispute.externalDisputeId, - ...options?.additionalContext, - }; - - let data = {}; - if (templateDataMappings) { - try { - data = await executeActions(JSON.parse(templateDataMappings), initialContext); - } catch (err: any) { - throw err; - } - } - - const populatedTemplate = populateTemplate(templateData, data); - - return populatedTemplate; -}; diff --git a/kleros-sdk/src/utils/index.ts b/kleros-sdk/src/utils/index.ts deleted file mode 100644 index 4858866fa..000000000 --- a/kleros-sdk/src/utils/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./getDispute"; diff --git a/kleros-sdk/test/__snapshots__/disputeDetailsSchema.test.ts.snap b/kleros-sdk/test/__snapshots__/disputeDetailsSchema.test.ts.snap deleted file mode 100644 index 35eaeb093..000000000 --- a/kleros-sdk/test/__snapshots__/disputeDetailsSchema.test.ts.snap +++ /dev/null @@ -1,19 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Dispute Details Schema > snapshot 1`] = ` -{ - "foo": "bar", -} -`; - -exports[`Kleros SDK schema > snapshot 1`] = ` -{ - "foo": "bar", -} -`; - -exports[`Kleros SDK schemas > snapshot 1`] = ` -{ - "foo": "bar", -} -`; diff --git a/kleros-sdk/test/__snapshots__/schema.test.ts.snap b/kleros-sdk/test/__snapshots__/schema.test.ts.snap deleted file mode 100644 index 6ee93505c..000000000 --- a/kleros-sdk/test/__snapshots__/schema.test.ts.snap +++ /dev/null @@ -1,7 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Kleros SDK schema > snapshot 1`] = ` -{ - "foo": "bar", -} -`; diff --git a/kleros-sdk/test/dataMappings.test.ts b/kleros-sdk/test/dataMappings.test.ts deleted file mode 100644 index ecff6a1eb..000000000 --- a/kleros-sdk/test/dataMappings.test.ts +++ /dev/null @@ -1,460 +0,0 @@ -import { describe, expect, it, vi } from "vitest"; -import { createResultObject } from "../src/dataMappings/utils/createResultObject"; -import { executeActions, populateTemplate } from "../src"; -import { - AbiCallMapping, - AbiEventMapping, - FetchIpfsJsonMapping, - JsonMapping, - SubgraphMapping, -} from "../src/dataMappings/utils/actionTypes"; -import { jsonAction } from "../src/dataMappings/actions/jsonAction"; -import { subgraphAction } from "../src/dataMappings/actions/subgraphAction"; -import { callAction } from "../src/dataMappings/actions/callAction"; -import { eventAction } from "../src/dataMappings/actions/eventAction"; -import { fetchIpfsJsonAction } from "../src/dataMappings/actions/fetchIpfsJsonAction"; - -global.fetch = vi.fn().mockResolvedValue({ - json: async () => ({ - data: { - escrows: [ - { id: "1", amount: "1000", status: "Pending" }, - { id: "2", amount: "500", status: "Completed" }, - ], - }, - }), -}); - -vi.mock("../src/sdk", () => ({ - configureSDK: vi.fn(), - getPublicClient: vi.fn().mockReturnValue({ - readContract: vi.fn().mockResolvedValue([BigInt(1), false, false]), - createEventFilter: vi.fn().mockResolvedValue({}), - getFilterLogs: vi.fn().mockResolvedValue([ - { - args: { - from: "0x1234567890123456789012345678901234567890", - to: "0x0987654321098765432109876543210987654321", - value: BigInt(100), - }, - }, - ]), - }), -})); - -interface CallActionResult { - ruling: bigint; - tied: boolean; - overridden: boolean; -} - -interface EventActionResult { - fromAddress: string; - toAddress: string; - transferValue: bigint; -} - -interface SubgraphActionResult { - escrowsData: { id: string; amount: string; status: string }[]; -} - -interface FetchIpfsJsonActionResult { - name: string; - firstName: string; - lastName: string; - anotherFile: string; -} - -const exampleObject = { - evidence: { - fileURI: { - photo: "https://photo.url", - video: "https://video.url", - }, - }, -}; - -vi.mock("src/dataMappings/actions/subgraphAction", () => ({ - subgraphAction: vi.fn(async (mapping) => { - return createResultObject( - { - escrows: [ - { id: "1", amount: "1000", status: "Pending" }, - { id: "2", amount: "500", status: "Completed" }, - ], - }, - mapping.seek, - mapping.populate - ); - }), -})); - -vi.mock("src/dataMappings/actions/callAction", () => ({ - callAction: vi.fn(async (mapping) => { - return createResultObject([BigInt(1), false, false], mapping.seek, mapping.populate); - }), -})); - -vi.mock("src/dataMappings/actions/eventAction", () => ({ - eventAction: vi.fn(async (mapping) => { - const mockEventData = { - from: "0x1234567890123456789012345678901234567890", - to: "0x0987654321098765432109876543210987654321", - value: BigInt(100), - }; - return createResultObject(mockEventData, mapping.seek, mapping.populate); - }), -})); - -vi.mock("../src/dataMappings/actions/fetchIpfsJsonAction", () => ({ - fetchIpfsJsonAction: vi.fn(async (mapping) => { - return createResultObject( - { - name: "Mezozoic", - firstName: "Rafael", - lastName: "Camargo", - anotherFile: "/ipfs/QmUnPyGi31RoF4DRR8vT3u13YsppxtsbBKbdQAbcP8be4M/file.json", - }, - mapping.seek, - mapping.populate - ); - }), -})); - -describe("full flow test", () => { - it("should execute a full flow and return populated dispute details", async () => { - const dataMappingsInput = JSON.stringify([ - { - type: "graphql", - endpoint: "https://mocked_endpoint.com", - query: `query GetEscrows($buyer: Bytes!) { - escrows(where: {buyer: $buyer}) { - id - amount - status - } - }`, - variables: { buyer: "0x74199ddaC9607A3a694011793f674FA1E0d0Fe2D" }, - seek: ["escrows"], - populate: ["escrowsData"], - }, - { - type: "abi/call", - abi: "function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden)", - address: "0xA54e7A16d7460e38a8F324eF46782FB520d58CE8", - functionName: "currentRuling", - args: ["0"], - seek: ["0", "1", "2"], - populate: ["ruling", "tied", "overridden"], - }, - { - type: "abi/event", - abi: "event Transfer(address indexed from, address indexed to, uint256 value)", - address: "0xa8e4235129258404A2ed3D36DAd20708CcB2d0b7", - eventFilter: { - fromBlock: "123", - toBlock: "latest", - args: [], - }, - seek: ["from", "to", "value"], - populate: ["fromAddress", "toAddress", "transferValue"], - }, - { - type: "json", - value: { - title: "Dispute: Did the user break the rules?", - description: "Detailed description of the dispute", - category: "General", - }, - seek: ["title", "description", "category"], - populate: ["disputeTitle", "disputeDescription", "disputeCategory"], - }, - ]); - - const disputeTemplateInput = JSON.stringify({ - title: "{{disputeTitle}}", - description: "{{disputeDescription}}", - question: "Is the user responsible?", - category: "{{disputeCategory}}", - type: "single-select", - answers: [ - { title: "Yes", description: "User is responsible", id: "0x01" }, - { title: "No", description: "User is not responsible", id: "0x02" }, - ], - policyURI: "/ipfs/QmUnPyGi31RoF4DRR8vT3u13YsppxtsbBKbdQAbcP8be4M/file.json", - details: { - ruling: "{{ruling}}", - tied: "{{tied}}", - overridden: "{{overridden}}", - fromAddress: "{{fromAddress}}", - toAddress: "{{toAddress}}", - transferValue: "{{transferValue}}", - }, - arbitratorChainID: "421614", - arbitratorAddress: "0x0987654321098765432109876543210987654321", - version: "1.0", - }); - - const initialContext = { alchemyApiKey: "mocked_api_key" }; - - const data = await executeActions(JSON.parse(dataMappingsInput), initialContext); - const finalDisputeDetails = populateTemplate(disputeTemplateInput, data); - - expect(finalDisputeDetails).to.deep.equal({ - title: "Dispute: Did the user break the rules?", - description: "Detailed description of the dispute", - question: "Is the user responsible?", - category: "General", - type: "single-select", - answers: [ - { title: "Yes", description: "User is responsible", id: "0x01" }, - { title: "No", description: "User is not responsible", id: "0x02" }, - ], - policyURI: "/ipfs/QmUnPyGi31RoF4DRR8vT3u13YsppxtsbBKbdQAbcP8be4M/file.json", - details: { - ruling: "1", - tied: "false", - overridden: "false", - fromAddress: "0x1234567890123456789012345678901234567890", - toAddress: "0x0987654321098765432109876543210987654321", - transferValue: "100", - }, - arbitratorChainID: "421614", - arbitratorAddress: "0x0987654321098765432109876543210987654321", - version: "1.0", - }); - }); -}); - -describe("jsonAction", () => { - it("should extract and map data correctly", () => { - const mapping: JsonMapping = { - type: "json", - value: exampleObject.evidence.fileURI, - seek: ["photo", "video"], - populate: ["photoUrl", "videoUrl"], - }; - const result = jsonAction(mapping); - expect(result).to.eql({ - photoUrl: "https://photo.url", - videoUrl: "https://video.url", - }); - }); - - it("should handle empty JSON object gracefully", () => { - const mapping: JsonMapping = { - type: "json", - value: {}, - seek: ["nonexistentField"], - populate: ["resultField"], - }; - const result = jsonAction(mapping); - expect(result).to.eql({}); - }); -}); - -describe("subgraphAction with variables", () => { - it("should fetch GraphQL data with variables and return in expected format", async () => { - const mapping: SubgraphMapping = { - type: "graphql", - endpoint: "mocked_endpoint", - query: `query GetEscrows($buyer: Bytes!) { - escrows(where: {buyer: $buyer}) { - id - amount - status - } - }`, - variables: { buyer: "0x74199ddaC9607A3a694011793f674FA1E0d0Fe2D" }, - seek: ["escrows"], - populate: ["escrowsData"], - }; - - const result = (await subgraphAction(mapping)) as SubgraphActionResult; - - expect(result).to.have.property("escrowsData"); - expect(result.escrowsData).to.be.an("array"); - result.escrowsData.forEach((escrow) => { - expect(escrow).to.have.property("id"); - expect(escrow).to.have.property("amount"); - expect(escrow).to.have.property("status"); - }); - }); -}); - -describe("callAction", () => { - it("should call the contract and return in expected format", async () => { - const mapping: AbiCallMapping = { - type: "abi/call", - abi: "function currentRuling(uint256 _disputeID) public view returns (uint256 ruling, bool tied, bool overridden)", - functionName: "currentRuling", - address: "0xA54e7A16d7460e38a8F324eF46782FB520d58CE8", - args: ["0"], - seek: ["0", "1", "2"], - populate: ["ruling", "tied", "overridden"], - }; - - const result = (await callAction(mapping)) as CallActionResult; - - expect(result).to.have.property("ruling"); - expect(result.ruling).to.be.a("bigint"); - expect(result).to.have.property("tied"); - expect(result.tied).to.be.a("boolean"); - expect(result).to.have.property("overridden"); - expect(result.overridden).to.be.a("boolean"); - }); -}); - -describe("eventAction", () => { - it("should fetch event data and return populated data", async () => { - const mapping: AbiEventMapping = { - type: "abi/event", - abi: "event Transfer(address indexed from, address indexed to, uint256 value)", - address: "0xa8e4235129258404A2ed3D36DAd20708CcB2d0b7", - eventFilter: { - fromBlock: "earliest", - toBlock: "latest", - args: [], - }, - seek: ["from", "to", "value"], - populate: ["fromAddress", "toAddress", "transferValue"], - }; - - const result = (await eventAction(mapping)) as EventActionResult; - - expect(result).to.have.property("fromAddress", "0x1234567890123456789012345678901234567890"); - expect(result).to.have.property("toAddress", "0x0987654321098765432109876543210987654321"); - expect(result).to.have.property("transferValue", BigInt(100)); - }); -}); - -describe("fetchIpfsJsonAction", () => { - it("should fetch JSON data from IPFS and return the expected result", async () => { - const mapping: FetchIpfsJsonMapping = { - type: "fetch/ipfs/json", - ipfsUri: "/ipfs/QmQ2XoA25HmnPUEWDduxj6LYwMwp6jtXPFRMHcNF2EvJfU/file.json", - seek: ["name", "firstName", "lastName", "anotherFile"], - populate: ["name", "firstName", "lastName", "anotherFile"], - }; - - const result = (await fetchIpfsJsonAction(mapping)) as FetchIpfsJsonActionResult; - - expect(result).to.have.property("name", "Mezozoic"); - expect(result).to.have.property("firstName", "Rafael"); - expect(result).to.have.property("lastName", "Camargo"); - expect(result).to.have.property("anotherFile", "/ipfs/QmUnPyGi31RoF4DRR8vT3u13YsppxtsbBKbdQAbcP8be4M/file.json"); - }); -}); - -describe("populateTemplate", () => { - it("should correctly populate the template with provided data", () => { - const template = JSON.stringify({ - title: "Test Title", - description: "Test Description", - question: "{{question}}", - type: "single-select", - answers: [ - { - title: "Yes", - description: "Affirmative", - id: "0x01", - reserved: false, - }, - ], - policyURI: "/ipfs/QmUnPyGi31RoF4DRR8vT3u13YsppxtsbBKbdQAbcP8be4M/file.json", - arbitratorChainID: "421614", - arbitratorAddress: "0x0987654321098765432109876543210987654321", - category: "General", - lang: "en_US", - specification: "Spec", - version: "1.0", - }); - - const data = { - question: "Did the user break the rules?", - }; - - const result = populateTemplate(template, data); - - expect(result).to.deep.equal({ - title: "Test Title", - description: "Test Description", - question: "Did the user break the rules?", - type: "single-select", - answers: [ - { - title: "Yes", - description: "Affirmative", - id: "0x01", - reserved: false, - }, - ], - policyURI: "/ipfs/QmUnPyGi31RoF4DRR8vT3u13YsppxtsbBKbdQAbcP8be4M/file.json", - arbitratorChainID: "421614", - arbitratorAddress: "0x0987654321098765432109876543210987654321", - category: "General", - lang: "en_US", - specification: "Spec", - version: "1.0", - }); - }); - - it("should handle missing template variables gracefully", () => { - const template = JSON.stringify({ - title: "Test Title", - description: "Test Description", - question: "{{missingQuestion}}", - type: "single-select", - answers: [ - { - title: "Yes", - description: "Affirmative", - id: "0x01", - reserved: false, - }, - ], - policyURI: "/ipfs/QmUnPyGi31RoF4DRR8vT3u13YsppxtsbBKbdQAbcP8be4M/file.json", - arbitratorChainID: "421614", - arbitratorAddress: "0x0987654321098765432109876543210987654321", - category: "General", - lang: "en_US", - specification: "Spec", - version: "1.0", - }); - - const data = { - question: "Actual question", - }; - - const result = populateTemplate(template, data); - - expect(result).to.deep.equal({ - title: "Test Title", - description: "Test Description", - question: "", - type: "single-select", - answers: [ - { - title: "Yes", - description: "Affirmative", - id: "0x01", - reserved: false, - }, - ], - policyURI: "/ipfs/QmUnPyGi31RoF4DRR8vT3u13YsppxtsbBKbdQAbcP8be4M/file.json", - arbitratorChainID: "421614", - arbitratorAddress: "0x0987654321098765432109876543210987654321", - category: "General", - lang: "en_US", - specification: "Spec", - version: "1.0", - }); - }); - - it("should throw an error for invalid JSON", () => { - const template = '{"title": "{{name}"}'; - const data = { name: "Jane" }; - - expect(() => populateTemplate(template, data)).to.throw(); - }); -}); diff --git a/kleros-sdk/test/disputeDetailsSchema.test.ts b/kleros-sdk/test/disputeDetailsSchema.test.ts deleted file mode 100644 index d9f132e73..000000000 --- a/kleros-sdk/test/disputeDetailsSchema.test.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { - ethAddressSchema, - ensNameSchema, - ethAddressOrEnsNameSchema, -} from "../src/dataMappings/utils/disputeDetailsSchema"; - -describe("Dispute Details Schema", () => { - it("snapshot", () => { - expect({ foo: "bar" }).toMatchSnapshot(); - }); - - const validAddresses = [ - "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", // checksummed - "0xD8DA6BF26964AF9D7EED9E03E53415D37AA96045", // uppercase - "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", // lowercase - ]; - - const invalidAddressesNoEns = [ - "", - "yo", - "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA960", - "d8dA6BF26964aF9D7eEd9e03E53415D37aA960", - "xd8dA6BF26964aF9D7eEd9e03E53415D37aA960", - "0xd8Wa6bf26964af9d7eed9e03e53415d37aa96045", - ]; - - const validEnsNames = ["vitalik.eth", "vitalik.eth.eth"]; - - const invalidEnsNamesNoAddress = ["", "vitalik", "vitalik.ether", "vitalik.sol", "eth.vitalik"]; - - describe("ethAddressSchema", () => { - it("Should accept a valid address", async () => { - validAddresses.forEach((address) => { - expect(() => ethAddressSchema.parse(address)).not.toThrow(); - }); - }); - - it("Should refuse an invalid address", async () => { - expect(() => ethAddressSchema.parse(undefined)).toThrowError("invalid_type"); - - const invalidAddress = "Provided address is invalid."; - [...invalidAddressesNoEns, ...validEnsNames].forEach((address) => { - expect(() => ethAddressSchema.parse(address)).toThrowError(invalidAddress); - }); - }); - }); - - describe("ensNameSchema", () => { - it("Should accept a valid ENS name", async () => { - validEnsNames.forEach((ensName) => { - expect(() => ensNameSchema.parse(ensName)).not.toThrow(); - }); - }); - - it("Should refuse an invalid ENS name", async () => { - expect(() => ensNameSchema.parse(undefined)).toThrowError("invalid_type"); - - const invalidEns = "Provided ENS name is invalid."; - [...invalidEnsNamesNoAddress, ...validAddresses].forEach((ensName) => { - expect(() => ensNameSchema.parse(ensName)).toThrowError(invalidEns); - }); - }); - }); - - describe("ethAddressOrEnsNameSchema", () => { - it("Should accept a valid address", async () => { - validAddresses.forEach((address) => { - expect(() => ethAddressOrEnsNameSchema.parse(address)).not.toThrow(); - }); - }); - - it("Should accept a valid ENS name", async () => { - validEnsNames.forEach((ensName) => { - expect(() => ethAddressOrEnsNameSchema.parse(ensName)).not.toThrow(); - }); - }); - - it("Should refuse an invalid address", async () => { - expect(() => ethAddressOrEnsNameSchema.parse(undefined)).toThrowError("invalid_type"); - - invalidAddressesNoEns.forEach((address) => { - // FIXME: the errorMap is not working, expecting "Provided address or ENS name is invalid."); - expect(() => ethAddressOrEnsNameSchema.parse(address)).toThrowError("custom"); - }); - }); - - it("Should refuse an invalid ENS name", async () => { - expect(() => ethAddressOrEnsNameSchema.parse(undefined)).toThrowError("invalid_type"); - - invalidEnsNamesNoAddress.forEach((ensName) => { - // FIXME: the errorMap is not working, expecting "Provided address or ENS name is invalid."); - expect(() => ethAddressOrEnsNameSchema.parse(ensName)).toThrowError("custom"); - }); - }); - }); - - describe.skip("disputeDetailsSchema", () => { - // TODO: add tests - }); -}); diff --git a/kleros-sdk/test/getDispute.test.ts b/kleros-sdk/test/getDispute.test.ts deleted file mode 100644 index 553a0ec27..000000000 --- a/kleros-sdk/test/getDispute.test.ts +++ /dev/null @@ -1,216 +0,0 @@ -import { describe, it, expect, vi, beforeEach } from "vitest"; -import { getDispute } from "../src/utils/getDispute"; -import fetchDisputeDetails from "../src/requests/fetchDisputeDetails"; -import fetchDisputeTemplateFromId from "../src/requests/fetchDisputeTemplateFromId"; - -// Mock the dependencies -vi.mock("../src/requests/fetchDisputeDetails"); -vi.mock("../src/requests/fetchDisputeTemplateFromId"); - -describe("getDispute", () => { - const mockDisputeId = 123n; - const mockCoreSubgraph = "https://api.thegraph.com/subgraphs/name/kleros/core"; - const mockDtrSubgraph = "https://api.thegraph.com/subgraphs/name/kleros/dtr"; - - const standardRefuseToArbitrateAnswer = { - id: "0x0", - title: "Refuse to Arbitrate / Invalid", - description: "Refuse to Arbitrate / Invalid", - reserved: true, - }; - - const mockDisputeDetails = { - dispute: { - templateId: 1, - arbitrated: { id: "0x1234" }, - arbitrableChainId: 1, - externalDisputeId: 123, - }, - }; - - beforeEach(() => { - vi.resetAllMocks(); - }); - - it("should add Refuse to Arbitrate option when answers array is empty", async () => { - const mockTemplate = { - disputeTemplate: { - templateData: JSON.stringify({ - title: "Test Dispute", - description: "Test Description", - question: "Test Question", - answers: [], - policyURI: "/ipfs/test", - arbitratorChainID: "1", - arbitratorAddress: "0x1234567890123456789012345678901234567890", - version: "1.0.0", - }), - templateDataMappings: "", - }, - }; - - vi.mocked(fetchDisputeDetails).mockResolvedValue(mockDisputeDetails); - vi.mocked(fetchDisputeTemplateFromId).mockResolvedValue(mockTemplate); - - const result = await getDispute({ - disputeId: mockDisputeId, - coreSubgraph: mockCoreSubgraph, - dtrSubgraph: mockDtrSubgraph, - }); - - expect(result?.answers).toHaveLength(1); - expect(result?.answers[0]).toEqual(standardRefuseToArbitrateAnswer); - }); - - it("should add Refuse to Arbitrate option when it doesn't exist in answers", async () => { - const mockTemplate = { - disputeTemplate: { - templateData: JSON.stringify({ - title: "Test Dispute", - description: "Test Description", - question: "Test Question", - answers: [ - { - id: "0x1", - title: "Yes", - description: "Yes Description", - }, - { - id: "0x2", - title: "No", - description: "No Description", - }, - ], - policyURI: "/ipfs/test", - arbitratorChainID: "1", - arbitratorAddress: "0x1234567890123456789012345678901234567890", - version: "1.0.0", - }), - templateDataMappings: "", - }, - }; - - vi.mocked(fetchDisputeDetails).mockResolvedValue(mockDisputeDetails); - vi.mocked(fetchDisputeTemplateFromId).mockResolvedValue(mockTemplate); - - const result = await getDispute({ - disputeId: mockDisputeId, - coreSubgraph: mockCoreSubgraph, - dtrSubgraph: mockDtrSubgraph, - }); - - expect(result?.answers).toHaveLength(3); - expect(result?.answers[0]).toEqual(standardRefuseToArbitrateAnswer); - expect(result?.answers[1].id).toBe("0x1"); - expect(result?.answers[2].id).toBe("0x2"); - }); - - it("should only overwrite existing answer with id 0x0 or 0x00's title and not overwrite description", async () => { - const customRTAAnswer = { - id: "0x0", - title: "Custom Refuse Title", - description: "Custom Refuse Description", - reserved: true, - }; - - // Test with 0x0 - const mockTemplate0x0 = { - disputeTemplate: { - templateData: JSON.stringify({ - title: "Test Dispute", - description: "Test Description", - question: "Test Question", - answers: [ - customRTAAnswer, - { - id: "0x1", - title: "Yes", - description: "Yes Description", - }, - ], - policyURI: "/ipfs/test", - arbitratorChainID: "1", - arbitratorAddress: "0x1234567890123456789012345678901234567890", - version: "1.0.0", - }), - templateDataMappings: "", - }, - }; - - vi.mocked(fetchDisputeDetails).mockResolvedValue(mockDisputeDetails); - vi.mocked(fetchDisputeTemplateFromId).mockResolvedValue(mockTemplate0x0); - - let result = await getDispute({ - disputeId: mockDisputeId, - coreSubgraph: mockCoreSubgraph, - dtrSubgraph: mockDtrSubgraph, - }); - - expect(result?.answers).toHaveLength(2); - expect(result?.answers[0].title).toEqual(standardRefuseToArbitrateAnswer.title); - expect(result?.answers[0].description).toEqual(customRTAAnswer.description); - expect(result?.answers[1].id).toBe("0x1"); - - // Test with 0x00 - const mockTemplate0x00 = { - disputeTemplate: { - templateData: JSON.stringify({ - title: "Test Dispute", - description: "Test Description", - question: "Test Question", - answers: [ - customRTAAnswer, - { - id: "0x1", - title: "Yes", - description: "Yes Description", - }, - ], - policyURI: "/ipfs/test", - arbitratorChainID: "1", - arbitratorAddress: "0x1234567890123456789012345678901234567890", - version: "1.0.0", - }), - templateDataMappings: "", - }, - }; - - vi.mocked(fetchDisputeTemplateFromId).mockResolvedValue(mockTemplate0x00); - - result = await getDispute({ - disputeId: mockDisputeId, - coreSubgraph: mockCoreSubgraph, - dtrSubgraph: mockDtrSubgraph, - }); - - expect(result?.answers).toHaveLength(2); - expect(result?.answers[0].title).toEqual(standardRefuseToArbitrateAnswer.title); - expect(result?.answers[0].description).toEqual(customRTAAnswer.description); - expect(result?.answers[1].id).toBe("0x1"); - }); - - it("should throw NotFoundError when dispute details are not found", async () => { - vi.mocked(fetchDisputeDetails).mockResolvedValue({ dispute: null } as any); - - await expect( - getDispute({ - disputeId: mockDisputeId, - coreSubgraph: mockCoreSubgraph, - dtrSubgraph: mockDtrSubgraph, - }) - ).rejects.toThrow("Dispute details not found"); - }); - - it("should throw NotFoundError when template is not found", async () => { - vi.mocked(fetchDisputeDetails).mockResolvedValue(mockDisputeDetails); - vi.mocked(fetchDisputeTemplateFromId).mockResolvedValue(undefined); - - await expect( - getDispute({ - disputeId: mockDisputeId, - coreSubgraph: mockCoreSubgraph, - dtrSubgraph: mockDtrSubgraph, - }) - ).rejects.toThrow("Template not found"); - }); -}); diff --git a/kleros-sdk/tsconfig.json b/kleros-sdk/tsconfig.json deleted file mode 100644 index 8ce8e0686..000000000 --- a/kleros-sdk/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "extends": "@kleros/kleros-v2-tsconfig/base20.json", - "compilerOptions": { - "outDir": "lib", - "allowJs": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "removeComments": true, - "isolatedModules": true, - "noEmit": false, - "declaration": true - }, - "include": [ - "src", - "test" - ], - "exclude": [ - "build", - "dist", - "lib", - "node_modules", - "scripts", - "webpack" - ] -} diff --git a/kleros-sdk/vitest.config.ts b/kleros-sdk/vitest.config.ts deleted file mode 100644 index e87f6f23e..000000000 --- a/kleros-sdk/vitest.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { defineConfig, configDefaults } from "vitest/config"; - -export default defineConfig({ - test: { - exclude: [...configDefaults.exclude, "**/lib/**"], - }, -}); diff --git a/netlify.toml b/netlify.toml deleted file mode 120000 index 78bb10dbd..000000000 --- a/netlify.toml +++ /dev/null @@ -1 +0,0 @@ -web/netlify.toml \ No newline at end of file diff --git a/package.json b/package.json deleted file mode 100644 index 01e9468a1..000000000 --- a/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "name": "kleros-v2", - "version": "0.1.0", - "description": "Kleros version 2", - "main": "index.js", - "repository": "git@github.com:kleros/kleros-v2.git", - "author": { - "name": "Kleros", - "email": "contact@kleros.io", - "url": "https://kleros.io" - }, - "bugs": { - "url": "https://github.com/kleros/kleros-v2/issues", - "email": "contact@kleros.io" - }, - "license": "MIT", - "private": true, - "workspaces": [ - "bots", - "contracts", - "kleros-sdk", - "subgraph", - "web", - "web-devtools", - "eslint-config", - "prettier-config", - "tsconfig", - "kleros-app" - ], - "packageManager": "yarn@4.9.2", - "volta": { - "node": "20.18.3", - "yarn": "4.9.2" - }, - "devDependencies": { - "@commitlint/cli": "^17.8.1", - "@commitlint/config-conventional": "^17.8.1", - "assert": "^2.1.0", - "buffer": "^5.7.1", - "conventional-changelog-cli": "^2.2.2", - "crypto-browserify": "^3.12.1", - "husky": "^8.0.3", - "lint-staged": "^13.3.0", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "resolutions": { - "async@npm^2.4.0": "npm:2.6.4", - "ejs@npm^2.6.1": "npm:3.1.7", - "ejs@npm:3.1.6": "npm:3.1.8", - "loader-utils@npm:^1.0.2": "npm:1.4.2", - "loader-utils@npm:^1.1.0": "npm:1.4.2", - "lodash@npm^4.17.4": "npm:4.17.21", - "minimist@npm^1.2.0": "npm:1.2.7", - "minimatch@npm:3.0.4": "npm:3.0.8", - "minimatch@npm:^3.0.4": "npm:3.0.8", - "nanoid^3.3.1": "npm:3.3.4", - "node-fetch": "npm:node-fetch@2.7.0", - "underscore@npm^3.0.4": "npm:1.12.1", - "eth-sig-util@npm:^1.4.2": "npm:3.0.0", - "fast-xml-parser": "npm:fast-xml-parser@4.5.2", - "@babel/traverse:^7.22.5": "npm:7.23.6", - "yargs-unparser@npm:1.6.0": "npm:1.6.4", - "dompurify@npm:^2.4.0": "npm:2.5.7", - "secp256k1@npm:^4.0.1": "npm:4.0.4", - "ws@npm:^8.11.0": "npm:8.18.0", - "@openzeppelin/contracts@npm:4.5.0": "npm:4.9.6", - "@openzeppelin/contracts@npm:4.7.3": "npm:4.9.6", - "@openzeppelin/contracts@npm:4.8.3": "npm:4.9.6", - "@openzeppelin/contracts@npm:4.9.3": "npm:4.9.6", - "@openzeppelin/contracts-upgradeable@npm:4.5.2": "npm:4.9.6", - "@openzeppelin/contracts-upgradeable@npm:4.7.3": "npm:4.9.6", - "@openzeppelin/contracts-upgradeable@npm:4.8.3": "npm:4.9.6", - "@openzeppelin/contracts-upgradeable@npm:4.9.3": "npm:4.9.6", - "elliptic@npm:6.5.4": "npm:6.6.1", - "word-wrap@npm:~1.2.3": "npm:1.2.5", - "@codemirror/state": "npm:6.5.2", - "undici@npm:7.3.0": "npm:7.5.0", - "viem@npm:2.x": "npm:^2.23.2" - }, - "scripts": { - "check-prerequisites": "scripts/check-prerequisites.sh", - "local-stack": "scripts/tmux-local-stack.sh", - "changelog": "conventional-changelog --infile CHANGELOG.md --same-file --release-count 0 && prettier --write CHANGELOG.md", - "postinstall": "yarn check-prerequisites; husky install", - "reinstall": "YARN_CHECKSUM_BEHAVIOR=update yarn install --no-immutable", - "build:web:ci": "yarn workspaces focus @kleros/kleros-v2-web && yarn workspaces foreach -Ap --include kleros-app --include contracts run build && yarn workspace @kleros/kleros-v2-web build-netlify", - "build:web-devtools:ci": "yarn workspaces focus @kleros/kleros-v2-web-devtools && yarn workspaces foreach -Ap --include contracts run build && yarn workspace @kleros/kleros-v2-web-devtools build-netlify" - }, - "alias": { - "process": "process/browser.js", - "buffer": "buffer" - } -} diff --git a/prettier-config/.eslintrc b/prettier-config/.eslintrc deleted file mode 100644 index e26a94f0e..000000000 --- a/prettier-config/.eslintrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["@kleros/kleros-v2-eslint-config"] -} diff --git a/prettier-config/.prettierrc.js b/prettier-config/.prettierrc.js deleted file mode 100644 index 1c27044f4..000000000 --- a/prettier-config/.prettierrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - ...require("./index.js"), -}; diff --git a/prettier-config/index.js b/prettier-config/index.js deleted file mode 100644 index e99074590..000000000 --- a/prettier-config/index.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = { - htmlWhitespaceSensitivity: "css", - printWidth: 120, - trailingComma: "es5", - endOfLine: "lf", - overrides: [ - { - files: ["*.json"], - options: { - parser: "json-stringify", - }, - }, - { - files: ["*.sol"], - options: { - parser: "solidity-parse", - printWidth: 120, - tabWidth: 4, - useTabs: false, - singleQuote: false, - bracketSpacing: false, - explicitTypes: "preserve", - }, - }, - ], - plugins: ["prettier-plugin-solidity"], -}; diff --git a/prettier-config/package.json b/prettier-config/package.json deleted file mode 100644 index 906fe7732..000000000 --- a/prettier-config/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@kleros/kleros-v2-prettier-config", - "version": "1.0.0", - "main": "index.js", - "license": "MIT", - "dependencies": { - "eslint": "^9.15.0", - "prettier": "^3.3.3", - "prettier-plugin-solidity": "^1.4.1" - }, - "scripts": { - "lint:w": "eslint --fix '**/*.{gql,graphql,js,jsx,ts,tsx,json,md}'", - "lint": "eslint '**/*.{gql,graphql,js,jsx,ts,tsx,json,md}'", - "format": "prettier --write '**/*.{gql,graphql,js,jsx,ts,tsx,json,md}'", - "format:check": "prettier --check '**/*.{gql,graphql,js,jsx,ts,tsx,json,md}'" - } -} diff --git a/scripts/act-subgraph.yml b/scripts/act-subgraph.yml deleted file mode 100755 index 392575317..000000000 --- a/scripts/act-subgraph.yml +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -act workflow_dispatch -j buildAndDeploy --input graph_environment=graph-studio-devnet,update=true --env network=arbitrum-sepolia-devnet diff --git a/scripts/cancel-all-netlify-builds.sh b/scripts/cancel-all-netlify-builds.sh deleted file mode 100755 index d5ff73751..000000000 --- a/scripts/cancel-all-netlify-builds.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash - -function cancelSiteDeploy() #siteId -{ - local siteId=$1 - readarray -t builds < <(netlify api listSiteDeploys -d '{ "site_id": "'$siteId'", "state": "new"}' | jq --compact-output '.[]') - for build in "${builds[@]}" - do - local name=$(jq -r .name <<< $build) - local branch=$(jq -r .branch <<< $build) - if [[ "$branch" =~ ^dependabot/ || "$branch" =~ ^renovate/ ]]; then - echo "Cancelling build for $name $branch" - netlify api cancelSiteDeploy -d '{ "deploy_id": "'$(jq -r .id <<< $build)'"}' > /dev/null - fi - done -} - -# netlify api listSites | jq '. | map([.name, .id])' -sites=( - # v2Testnet - "86d94ae8-f655-46a4-a859-d68696173f3a" - # v2DevtoolsTestnet - "7b25b1a8-5fd4-41f7-8fd0-7fe4202229fb" - # v2Uni - "085e1305-e434-4d36-91a4-88e8cbc3aa46" - # v2Neo - "46f40014-ff00-4a9a-a1a2-4fefeeb1606a" - # v2DevtoolsNeo - "45cc81df-58a8-46cb-902f-1ccd3314ec70" - # v2ContractsSite - "dd8bc215-e054-407f-92ef-d61511720928" -) - -for site in "${sites[@]}"; do - cancelSiteDeploy $site -done diff --git a/scripts/check-prerequisites.sh b/scripts/check-prerequisites.sh deleted file mode 100755 index 5f34a2681..000000000 --- a/scripts/check-prerequisites.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash - -status=0 - -function require() #cmd -{ - local cmd=$1 - if [ ! -x "$(command -v $cmd)" ]; then - >&2 echo "error: $cmd not installed" - status=1 - fi -} - -# for the NPM and toolchain version management -require volta - -# for the local subgraph node -require docker -require docker-compose - -# for some contracts utilities -require cast -require forge - -# for the subgraph and contracts utilities -require jq -require yq - -# for the local testing of Github Actions -require act - -exit $status diff --git a/scripts/tmux-local-stack.sh b/scripts/tmux-local-stack.sh deleted file mode 100755 index bdea000b8..000000000 --- a/scripts/tmux-local-stack.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash - -session="local-stack" - -tmux has-session -t $session 2>/dev/null -if [ $? != 0 ]; then - # Session does not exist, set it up your session - tmux new-session -d -s $session -x $(tput cols) -y $(tput lines) - - tmux set-window-option automatic-rename off - tmux set pane-border-status top - tmux set pane-border-format " #{pane_index} - #{pane_title} " - - # Some users set 1 as the pane-base-index instead of 0 by default - index=$(tmux show-options -gv pane-base-index) - - tmux split-window -h - tmux split-window -v - tmux select-pane -t $index - tmux split-window -v - - tmux select-pane -t $index -T "HARDHAT RPC" - tmux send-keys -t $index 'cd contracts' Enter - tmux send-keys -t $index 'yarn start-local' - - (( ++index )) - tmux select-pane -t $index -T "GRAPH NODE" - tmux send-keys -t $index 'cd subgraph' Enter - tmux send-keys -t $index 'yarn start-local-indexer' - - (( ++index )) - tmux select-pane -t $index -T "SUBGRAPH DEPLOY" - tmux send-keys -t $index 'cd subgraph' Enter - tmux send-keys -t $index 'yarn rebuild-deploy:local' - - (( ++index )) - tmux select-pane -t $index -T "WEB" - tmux send-keys -t $index 'cd web' Enter - tmux send-keys -t $index 'yarn start-local' -fi - -tmux attach-session -t $session - diff --git a/services/bots/.gitignore b/services/bots/.gitignore deleted file mode 100644 index 87ad56dd5..000000000 --- a/services/bots/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -**/*.env.devnet -**/*.env.testnet -**/*.env.mainnet - -# the docker env file should not contain anything sensitive -!devnet/.env -!testnet/.env -!mainnet/.env \ No newline at end of file diff --git a/services/bots/base/Dockerfile b/services/bots/base/Dockerfile deleted file mode 100644 index 283ee4504..000000000 --- a/services/bots/base/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -FROM node:20-alpine@sha256:2cd2a6f4cb37cf8a007d5f1e9aef090ade6b62974c7a274098c390599e8c72b4 - -WORKDIR /usr/src/app - -RUN npm install --ignore-scripts -g pm2 - -COPY --chown=node:node "./contracts" "./contracts" -COPY --chown=node:node "./eslint-config" "./eslint-config" -COPY --chown=node:node "./prettier-config" "./prettier-config" -COPY --chown=node:node "./tsconfig" "./tsconfig" -COPY --chown=node:node "./.yarn" "./.yarn" -COPY --chown=node:node [ ".yarnrc.yml", ".nvmrc", ".eslintignore", "package.json", "yarn.lock", "./" ] - -RUN yarn set version 4.5.1 && \ - yarn --version && \ - node --version && \ - cd contracts && \ - yarn workspaces focus && \ - yarn build && \ - chown -R node:node . - -USER node -WORKDIR /usr/src/app/contracts -ENTRYPOINT [ "yarn" ] - -LABEL org.opencontainers.image.source=https://github.com/kleros/kleros-v2 -LABEL org.opencontainers.image.title="Kleros v2 Bots" -LABEL org.opencontainers.image.description="Bots for the Kleros v2 arbitration protocol." -LABEL org.opencontainers.image.licenses=MIT diff --git a/services/bots/base/bot-pm2.yml b/services/bots/base/bot-pm2.yml deleted file mode 100644 index 62717b675..000000000 --- a/services/bots/base/bot-pm2.yml +++ /dev/null @@ -1,11 +0,0 @@ -version: '3.3' -services: - bot-pm2: - extends: - file: bot.yml - service: bot - entrypoint: [ - "/bin/sh", - "-c", - "pm2-runtime ecosystem.config.js --no-auto-exit" - ] diff --git a/services/bots/base/bot.yml b/services/bots/base/bot.yml deleted file mode 100644 index 4e6dd0d6b..000000000 --- a/services/bots/base/bot.yml +++ /dev/null @@ -1,12 +0,0 @@ -version: '3.3' -services: - bot: - build: - context: ../../../ - dockerfile: ./services/bots/base/Dockerfile - tags: - - kleros-v2-bots - image: ghcr.io/kleros/kleros-v2-bots - pull_policy: missing - command: --help - env_file: ../${DEPLOYMENT}/bots.env.${DEPLOYMENT:?error} diff --git a/services/bots/devnet/.env b/services/bots/devnet/.env deleted file mode 100644 index b0e05b1f7..000000000 --- a/services/bots/devnet/.env +++ /dev/null @@ -1,2 +0,0 @@ -DEPLOYMENT=devnet -COMPOSE_PROJECT_NAME=bots-$DEPLOYMENT diff --git a/services/bots/devnet/bots.env.devnet.example b/services/bots/devnet/bots.env.devnet.example deleted file mode 100644 index 6c99db90b..000000000 --- a/services/bots/devnet/bots.env.devnet.example +++ /dev/null @@ -1,16 +0,0 @@ -# Bot account -PRIVATE_KEY=0x000000.....00000 - -# Bot subgraph -SUBGRAPH_URL=https://api.thegraph.com/subgraphs/name/<TESTNET-SUBGRAPH-URL> - -# Logging -LOG_LEVEL=debug -LOGTAIL_TOKEN_KEEPER_BOT=<optional token> -LOGTAIL_TOKEN_RELAYER_BOT=<optional token> - -# Heartbeat -HEARTBEAT_URL_KEEPER_BOT=<optional url> -HEARTBEAT_URL_RELAYER_BOT=<optional url> - -DISPUTES_TO_SKIP= \ No newline at end of file diff --git a/services/bots/devnet/compose.yml b/services/bots/devnet/compose.yml deleted file mode 100644 index 01dab97d1..000000000 --- a/services/bots/devnet/compose.yml +++ /dev/null @@ -1,60 +0,0 @@ -version: '3' -services: - keeper-bot: - container_name: keeper-bot-${DEPLOYMENT:?error} - extends: - file: ../base/bot-pm2.yml - service: bot-pm2 - volumes: - - type: bind - source: ./pm2.config.keeper-bot.${DEPLOYMENT}.js - target: /usr/src/app/contracts/ecosystem.config.js - - disputor-bot: - container_name: disputor-bot-${DEPLOYMENT:?error} - extends: - file: ../base/bot-pm2.yml - service: bot-pm2 - volumes: - - type: bind - source: ./pm2.config.disputor-bot.${DEPLOYMENT}.js - target: /usr/src/app/contracts/ecosystem.config.js - - relayer-bot-from-chiado: - container_name: relayer-bot-from-chiado-${DEPLOYMENT:?error} - extends: - file: ../base/bot-pm2.yml - service: bot-pm2 - volumes: - - type: bind - source: ./pm2.config.relayer-bot-from-chiado.${DEPLOYMENT}.js - target: /usr/src/app/contracts/ecosystem.config.js - profiles: - - chiado - - relayer-bot-from-sepolia: - container_name: relayer-bot-from-sepolia-${DEPLOYMENT:?error} - extends: - file: ../base/bot-pm2.yml - service: bot-pm2 - volumes: - - type: bind - source: ./pm2.config.relayer-bot-from-sepolia.${DEPLOYMENT}.js - target: /usr/src/app/contracts/ecosystem.config.js - profiles: - - sepolia - - relayer-bot-from-hardhat-host: - container_name: relayer-bot-from-hardhat-host-${DEPLOYMENT:?error} - extends: - file: ../base/bot.yml - service: bot - command: bot:relayer-from-hardhat --network dockerhost - extra_hosts: - - host.docker.internal:host-gateway - volumes: - - type: bind - source: ../../contracts/deployments/localhost - target: /usr/src/app/contracts/deployments/localhost - profiles: - - hardhat diff --git a/services/bots/devnet/pm2.config.disputor-bot.devnet.js b/services/bots/devnet/pm2.config.disputor-bot.devnet.js deleted file mode 100644 index a4c41a60e..000000000 --- a/services/bots/devnet/pm2.config.disputor-bot.devnet.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - apps: [ - { - name: "disputor-bot-devnet", - interpreter: "sh", - script: "yarn", - args: "bot:disputor --network arbitrumSepoliaDevnet", - restart_delay: 86400000, // 24 hours - autorestart: true, - }, - ], -}; diff --git a/services/bots/devnet/pm2.config.keeper-bot.devnet.js b/services/bots/devnet/pm2.config.keeper-bot.devnet.js deleted file mode 100644 index 9517a4787..000000000 --- a/services/bots/devnet/pm2.config.keeper-bot.devnet.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - apps: [ - { - name: "keeper-bot-devnet", - interpreter: "sh", - script: "yarn", - args: "bot:keeper --network arbitrumSepoliaDevnet", - restart_delay: 600000, // 10 minutes - autorestart: true, - }, - ], -}; diff --git a/services/bots/devnet/pm2.config.relayer-bot-from-chiado.devnet.js b/services/bots/devnet/pm2.config.relayer-bot-from-chiado.devnet.js deleted file mode 100644 index 76acd90a1..000000000 --- a/services/bots/devnet/pm2.config.relayer-bot-from-chiado.devnet.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - apps: [ - { - name: "relayer-bot-from-chiado-devnet", - interpreter: "sh", - script: "yarn", - args: "bot:relayer-from-chiado --network arbitrumSepoliaDevnet", - restart_delay: 5000, // 5 seconds - autorestart: true, - }, - ], -}; diff --git a/services/bots/devnet/pm2.config.relayer-bot-from-goerli.devnet.js b/services/bots/devnet/pm2.config.relayer-bot-from-goerli.devnet.js deleted file mode 100644 index d450f3b38..000000000 --- a/services/bots/devnet/pm2.config.relayer-bot-from-goerli.devnet.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - apps: [ - { - name: "relayer-bot-from-sepolia-devnet", - interpreter: "sh", - script: "yarn", - args: "bot:relayer-from-sepolia --network arbitrumSepoliaDevnet", - restart_delay: 5000, // 5 seconds - autorestart: true, - }, - ], -}; diff --git a/services/bots/mainnet-neo/.env b/services/bots/mainnet-neo/.env deleted file mode 100644 index a96a74cfd..000000000 --- a/services/bots/mainnet-neo/.env +++ /dev/null @@ -1,2 +0,0 @@ -DEPLOYMENT=mainnet-neo -COMPOSE_PROJECT_NAME=bots-$DEPLOYMENT \ No newline at end of file diff --git a/services/bots/mainnet-neo/bots.env.mainnet-neo.example b/services/bots/mainnet-neo/bots.env.mainnet-neo.example deleted file mode 100644 index 5343b7eda..000000000 --- a/services/bots/mainnet-neo/bots.env.mainnet-neo.example +++ /dev/null @@ -1,18 +0,0 @@ -# Bot account -PRIVATE_KEY=0x000000.....00000 - -# Bot subgraph -SUBGRAPH_URL=https://api.thegraph.com/subgraphs/name/alcercu/kleroscoretest - -# Logging -LOG_LEVEL=debug -LOGTAIL_TOKEN_KEEPER_BOT=<optional token> -LOGTAIL_TOKEN_RELAYER_BOT=<optional token> -LOGTAIL_TOKEN_DISPUTOR_BOT=<optional token> - -# Heartbeat -HEARTBEAT_URL_KEEPER_BOT=<optional url> -HEARTBEAT_URL_RELAYER_BOT=<optional url> -HEARTBEAT_URL_DISPUTOR_BOT=<optional url> - -DISPUTES_TO_SKIP= \ No newline at end of file diff --git a/services/bots/mainnet-neo/compose.yml b/services/bots/mainnet-neo/compose.yml deleted file mode 100644 index 01dab97d1..000000000 --- a/services/bots/mainnet-neo/compose.yml +++ /dev/null @@ -1,60 +0,0 @@ -version: '3' -services: - keeper-bot: - container_name: keeper-bot-${DEPLOYMENT:?error} - extends: - file: ../base/bot-pm2.yml - service: bot-pm2 - volumes: - - type: bind - source: ./pm2.config.keeper-bot.${DEPLOYMENT}.js - target: /usr/src/app/contracts/ecosystem.config.js - - disputor-bot: - container_name: disputor-bot-${DEPLOYMENT:?error} - extends: - file: ../base/bot-pm2.yml - service: bot-pm2 - volumes: - - type: bind - source: ./pm2.config.disputor-bot.${DEPLOYMENT}.js - target: /usr/src/app/contracts/ecosystem.config.js - - relayer-bot-from-chiado: - container_name: relayer-bot-from-chiado-${DEPLOYMENT:?error} - extends: - file: ../base/bot-pm2.yml - service: bot-pm2 - volumes: - - type: bind - source: ./pm2.config.relayer-bot-from-chiado.${DEPLOYMENT}.js - target: /usr/src/app/contracts/ecosystem.config.js - profiles: - - chiado - - relayer-bot-from-sepolia: - container_name: relayer-bot-from-sepolia-${DEPLOYMENT:?error} - extends: - file: ../base/bot-pm2.yml - service: bot-pm2 - volumes: - - type: bind - source: ./pm2.config.relayer-bot-from-sepolia.${DEPLOYMENT}.js - target: /usr/src/app/contracts/ecosystem.config.js - profiles: - - sepolia - - relayer-bot-from-hardhat-host: - container_name: relayer-bot-from-hardhat-host-${DEPLOYMENT:?error} - extends: - file: ../base/bot.yml - service: bot - command: bot:relayer-from-hardhat --network dockerhost - extra_hosts: - - host.docker.internal:host-gateway - volumes: - - type: bind - source: ../../contracts/deployments/localhost - target: /usr/src/app/contracts/deployments/localhost - profiles: - - hardhat diff --git a/services/bots/mainnet-neo/pm2.config.keeper-bot.mainnet-neo.js b/services/bots/mainnet-neo/pm2.config.keeper-bot.mainnet-neo.js deleted file mode 100644 index 6bbdc200c..000000000 --- a/services/bots/mainnet-neo/pm2.config.keeper-bot.mainnet-neo.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - apps: [ - { - name: "keeper-bot-mainnet-neo", - interpreter: "sh", - script: "yarn", - args: "bot:keeper --network arbitrum", - restart_delay: 600000, // 10 minutes - autorestart: true, - }, - ], -}; diff --git a/services/bots/testnet/.env b/services/bots/testnet/.env deleted file mode 100644 index a5937d186..000000000 --- a/services/bots/testnet/.env +++ /dev/null @@ -1,2 +0,0 @@ -DEPLOYMENT=testnet -COMPOSE_PROJECT_NAME=bots-$DEPLOYMENT \ No newline at end of file diff --git a/services/bots/testnet/bots.env.testnet.example b/services/bots/testnet/bots.env.testnet.example deleted file mode 100644 index 5343b7eda..000000000 --- a/services/bots/testnet/bots.env.testnet.example +++ /dev/null @@ -1,18 +0,0 @@ -# Bot account -PRIVATE_KEY=0x000000.....00000 - -# Bot subgraph -SUBGRAPH_URL=https://api.thegraph.com/subgraphs/name/alcercu/kleroscoretest - -# Logging -LOG_LEVEL=debug -LOGTAIL_TOKEN_KEEPER_BOT=<optional token> -LOGTAIL_TOKEN_RELAYER_BOT=<optional token> -LOGTAIL_TOKEN_DISPUTOR_BOT=<optional token> - -# Heartbeat -HEARTBEAT_URL_KEEPER_BOT=<optional url> -HEARTBEAT_URL_RELAYER_BOT=<optional url> -HEARTBEAT_URL_DISPUTOR_BOT=<optional url> - -DISPUTES_TO_SKIP= \ No newline at end of file diff --git a/services/bots/testnet/compose.yml b/services/bots/testnet/compose.yml deleted file mode 100644 index 01dab97d1..000000000 --- a/services/bots/testnet/compose.yml +++ /dev/null @@ -1,60 +0,0 @@ -version: '3' -services: - keeper-bot: - container_name: keeper-bot-${DEPLOYMENT:?error} - extends: - file: ../base/bot-pm2.yml - service: bot-pm2 - volumes: - - type: bind - source: ./pm2.config.keeper-bot.${DEPLOYMENT}.js - target: /usr/src/app/contracts/ecosystem.config.js - - disputor-bot: - container_name: disputor-bot-${DEPLOYMENT:?error} - extends: - file: ../base/bot-pm2.yml - service: bot-pm2 - volumes: - - type: bind - source: ./pm2.config.disputor-bot.${DEPLOYMENT}.js - target: /usr/src/app/contracts/ecosystem.config.js - - relayer-bot-from-chiado: - container_name: relayer-bot-from-chiado-${DEPLOYMENT:?error} - extends: - file: ../base/bot-pm2.yml - service: bot-pm2 - volumes: - - type: bind - source: ./pm2.config.relayer-bot-from-chiado.${DEPLOYMENT}.js - target: /usr/src/app/contracts/ecosystem.config.js - profiles: - - chiado - - relayer-bot-from-sepolia: - container_name: relayer-bot-from-sepolia-${DEPLOYMENT:?error} - extends: - file: ../base/bot-pm2.yml - service: bot-pm2 - volumes: - - type: bind - source: ./pm2.config.relayer-bot-from-sepolia.${DEPLOYMENT}.js - target: /usr/src/app/contracts/ecosystem.config.js - profiles: - - sepolia - - relayer-bot-from-hardhat-host: - container_name: relayer-bot-from-hardhat-host-${DEPLOYMENT:?error} - extends: - file: ../base/bot.yml - service: bot - command: bot:relayer-from-hardhat --network dockerhost - extra_hosts: - - host.docker.internal:host-gateway - volumes: - - type: bind - source: ../../contracts/deployments/localhost - target: /usr/src/app/contracts/deployments/localhost - profiles: - - hardhat diff --git a/services/bots/testnet/pm2.config.disputor-bot.testnet.js b/services/bots/testnet/pm2.config.disputor-bot.testnet.js deleted file mode 100644 index 1c1a435a2..000000000 --- a/services/bots/testnet/pm2.config.disputor-bot.testnet.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - apps: [ - { - name: "disputor-bot-testnet", - interpreter: "sh", - script: "yarn", - args: "bot:disputor --network arbitrumSepolia", - restart_delay: 86400000, // 24 hours - autorestart: true, - }, - ], -}; diff --git a/services/bots/testnet/pm2.config.keeper-bot.testnet.js b/services/bots/testnet/pm2.config.keeper-bot.testnet.js deleted file mode 100644 index 22471c6b4..000000000 --- a/services/bots/testnet/pm2.config.keeper-bot.testnet.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - apps: [ - { - name: "keeper-bot-testnet", - interpreter: "sh", - script: "yarn", - args: "bot:keeper --network arbitrumSepolia", - restart_delay: 600000, // 10 minutes - autorestart: true, - }, - ], -}; diff --git a/services/bots/testnet/pm2.config.relayer-bot-from-chiado.testnet.js b/services/bots/testnet/pm2.config.relayer-bot-from-chiado.testnet.js deleted file mode 100644 index 9265b1cde..000000000 --- a/services/bots/testnet/pm2.config.relayer-bot-from-chiado.testnet.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - apps: [ - { - name: "relayer-bot-from-chiado-testnet", - interpreter: "sh", - script: "yarn", - args: "bot:relayer-from-chiado --network arbitrumSepolia", - restart_delay: 5000, // 5 seconds - autorestart: true, - }, - ], -}; diff --git a/services/bots/testnet/pm2.config.relayer-bot-from-goerli.testnet.js b/services/bots/testnet/pm2.config.relayer-bot-from-goerli.testnet.js deleted file mode 100644 index f8620fafd..000000000 --- a/services/bots/testnet/pm2.config.relayer-bot-from-goerli.testnet.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - apps: [ - { - name: "relayer-bot-from-sepolia-testnet", - interpreter: "sh", - script: "yarn", - args: "bot:relayer-from-sepolia --network arbitrumSepolia", - restart_delay: 5000, // 5 seconds - autorestart: true, - }, - ], -}; diff --git a/services/graph-node/.gitignore b/services/graph-node/.gitignore deleted file mode 100644 index 1269488f7..000000000 --- a/services/graph-node/.gitignore +++ /dev/null @@ -1 +0,0 @@ -data diff --git a/services/graph-node/README.md b/services/graph-node/README.md deleted file mode 100644 index 07dbee724..000000000 --- a/services/graph-node/README.md +++ /dev/null @@ -1,81 +0,0 @@ -_Adapted from the [scaffold-eth service package](https://github.com/scaffold-eth/scaffold-eth/tree/master/packages/services/graph-node)_ - -# Graph Node Docker Image - -Preconfigured Docker image for running a Graph Node. - -## Usage - -```sh -docker run -it \ - -e postgres_host=<HOST>[:<PORT>] \ - -e postgres_user=<USER> \ - -e postgres_pass=<PASSWORD> \ - -e postgres_db=<DBNAME> \ - -e ipfs=<HOST>:<PORT> \ - -e ethereum=<NETWORK_NAME>:<ETHEREUM_RPC_URL> \ - graphprotocol/graph-node:latest -``` - -### Example usage - -```sh -docker run -it \ - -e postgres_host=host.docker.internal:5432 - -e postgres_user=graph-node \ - -e postgres_pass=oh-hello \ - -e postgres_db=graph-node \ - -e ipfs=host.docker.internal:5001 \ - -e ethereum=mainnet:http://localhost:8545/ \ - graphprotocol/graph-node:latest -``` - -## Docker Compose - -The Docker Compose setup requires an Ethereum network name and node -to connect to. By default, it will use `mainnet:http://host.docker.internal:8545` -in order to connect to an Ethereum node running on your host machine. -You can replace this with anything else in `docker-compose.yaml`. - -> **Note for Linux users:** On Linux, if you have docker v20.10 and above, you will need to make -> sure you have extra_hosts in the docker-compose.yml file. If you have a docker older than v20.10, -> `host.docker.internal` is not supported. Instead, you will have to replace it with the -> IP address of your Docker host (from the perspective of the Graph -> Node container). -> To do this, run: -> -> ``` -> CONTAINER_ID=$(docker container ls | grep graph-node | cut -d' ' -f1) -> docker exec $CONTAINER_ID /bin/bash -c 'ip route | awk \'/^default via /{print $3}\'' -> ``` -> -> This will print the host's IP address. Then, put it into `docker-compose.yml`: -> -> ``` -> sed -i -e 's/host.docker.internal/<IP ADDRESS>/g' docker-compose.yml -> ``` - -After you have set up an Ethereum node—e.g. Ganache or Parity—simply -clone this repository and run - -```sh -docker-compose up -``` - -This will start IPFS, Postgres and Graph Node in Docker and create persistent -data directories for IPFS and Postgres in `./data/ipfs` and `./data/postgres`. You -can access these via: - -- Graph Node: - - GraphiQL: `http://localhost:8000/` - - HTTP: `http://localhost:8000/subgraphs/name/<subgraph-name>` - - WebSockets: `ws://localhost:8001/subgraphs/name/<subgraph-name>` - - Admin: `http://localhost:8020/` -- IPFS: - - `127.0.0.1:5001` or `/ip4/127.0.0.1/tcp/5001` -- Postgres: - - `postgresql://graph-node:let-me-in@localhost:5432/graph-node` - -Once this is up and running, you can use -[`graph-cli`](https://github.com/graphprotocol/graph-cli) to create and -deploy your subgraph to the running Graph Node. diff --git a/services/graph-node/bin/create b/services/graph-node/bin/create deleted file mode 100755 index 9d9a4eb1f..000000000 --- a/services/graph-node/bin/create +++ /dev/null @@ -1,11 +0,0 @@ -#! /bin/bash - -if [ $# != 1 ]; then - echo "usage: create <name>" - exit 1 -fi - -api="http://index-node.default/" - -data=$(printf '{"jsonrpc": "2.0", "method": "subgraph_create", "params": {"name":"%s"}, "id":"1"}' "$1") -curl -s -H "content-type: application/json" --data "$data" "$api" diff --git a/services/graph-node/bin/debug b/services/graph-node/bin/debug deleted file mode 100755 index 87649f1fe..000000000 --- a/services/graph-node/bin/debug +++ /dev/null @@ -1,9 +0,0 @@ -#! /bin/bash - -if [ -f "$1" ] -then - exec rust-gdb -c "$1" /usr/local/cargo/bin/graph-node -else - echo "usage: debug <core-file>" - exit 1 -fi diff --git a/services/graph-node/bin/deploy b/services/graph-node/bin/deploy deleted file mode 100755 index f0c9833d7..000000000 --- a/services/graph-node/bin/deploy +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/bash - -if [ $# != 3 ]; then - echo "usage: deploy <name> <ipfs_hash> <node>" - exit 1 -fi - -api="http://index-node.default/" - -echo "Deploying $1 (deployment $2)" -data=$(printf '{"jsonrpc": "2.0", "method": "subgraph_deploy", "params": {"name":"%s", "ipfs_hash":"%s", "node_id":"%s"}, "id":"1"}' "$1" "$2" "$3") -curl -s -H "content-type: application/json" --data "$data" "$api" diff --git a/services/graph-node/bin/reassign b/services/graph-node/bin/reassign deleted file mode 100755 index a8eb70350..000000000 --- a/services/graph-node/bin/reassign +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/bash - -if [ $# -lt 3 ]; then - echo "usage: reassign <name> <ipfs_hash> <node>" - exit 1 -fi - -api="http://index-node.default/" - -echo Assigning to "$3" -data=$(printf '{"jsonrpc": "2.0", "method": "subgraph_reassign", "params": {"name":"%s", "ipfs_hash":"%s", "node_id":"%s"}, "id":"1"}' "$1" "$2" "$3") -curl -s -H "content-type: application/json" --data "$data" "$api" diff --git a/services/graph-node/bin/remove b/services/graph-node/bin/remove deleted file mode 100755 index baaad2bef..000000000 --- a/services/graph-node/bin/remove +++ /dev/null @@ -1,11 +0,0 @@ -#! /bin/bash - -if [ $# != 1 ]; then - echo "usage: create <name>" - exit 1 -fi - -api="http://index-node.default/" - -data=$(printf '{"jsonrpc": "2.0", "method": "subgraph_remove", "params": {"name":"%s"}, "id":"1"}' "$1") -curl -s -H "content-type: application/json" --data "$data" "$api" diff --git a/services/graph-node/docker-compose.yml b/services/graph-node/docker-compose.yml deleted file mode 100644 index 8ae23ea68..000000000 --- a/services/graph-node/docker-compose.yml +++ /dev/null @@ -1,49 +0,0 @@ -version: "3" -services: - graph-node: - image: graphprotocol/graph-node:latest - ports: - - "8000:8000" - - "8001:8001" - - "8020:8020" - - "8030:8030" - - "8040:8040" - depends_on: - - ipfs - - postgres - extra_hosts: - - host.docker.internal:host-gateway - environment: - postgres_host: postgres - postgres_user: graph-node - postgres_pass: let-me-in - postgres_db: graph-node - ipfs: "ipfs:5001" - ethereum: "mainnet:http://host.docker.internal:8545" - #ethereum: "arbitrum-goerli:https://goerli-rollup.arbitrum.io/rpc" - #ethereum: "arbitrum-goerli:https://goerli-rollup.arbitrum.io/rpc goerli:https://rpc.ankr.com/eth_goerli chiado:https://rpc.chiadochain.net gnosischain:https://rpc.ankr.com/gnosis mainnet:https://rpc.ankr.com/eth" - GRAPH_LOG: info - stop_grace_period: 5s - ipfs: - image: ipfs/go-ipfs:v0.33.2 - ports: - - "5001:5001" - volumes: - - ./data/ipfs:/data/ipfs - postgres: - image: postgres - ports: - - "5432:5432" - command: - [ - "postgres", - "-cshared_preload_libraries=pg_stat_statements" - ] - environment: - POSTGRES_USER: graph-node - POSTGRES_PASSWORD: let-me-in - POSTGRES_DB: graph-node - PGDATA: "/var/lib/postgresql/data" - POSTGRES_INITDB_ARGS: "-E UTF8 --locale=C" - volumes: - - ./data/postgres:/var/lib/postgresql/data diff --git a/sonar-project.properties b/sonar-project.properties deleted file mode 100644 index 5ae6e9cbc..000000000 --- a/sonar-project.properties +++ /dev/null @@ -1,3 +0,0 @@ -sonar.organization=kleros -sonar.projectKey=kleros_kleros-v2 -sonar.projectName=kleros-v2 diff --git a/subgraph/README.md b/subgraph/README.md deleted file mode 100644 index e061dfec3..000000000 --- a/subgraph/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# @kleros/kleros-v2-subgraph - -## Deployments - -### V2 Neo - -- [Core](https://thegraph.com/studio/subgraph/kleros-v2-coreneo/) -- [Dispute Registry Template - Arbitrum One](https://thegraph.com/studio/subgraph/kleros-v2-drt/) - -### Testnet - -- [Core](https://thegraph.com/studio/subgraph/kleros-v2-core-testnet/) -- [Dispute Registry Template - Arbitrum Sepolia](https://thegraph.com/studio/subgraph/kleros-v2-drt-arbisep-testnet/) - -### Devnet - -- [Core](https://thegraph.com/studio/subgraph/kleros-v2-core-devnet/) -- [Dispute Registry Template - Arbitrum Sepolia](https://thegraph.com/studio/subgraph/kleros-v2-drt-arbisep-devnet/) -- [Dispute Registry Template - Gnosis]() -- [Dispute Registry Template - Sepolia]() - -## Build - -```bash -# update subgraph.yml using the contract deployment artifacts -$ yarn update:arbitrum-sepolia-devnet - -$ yarn codegen - -$ yarn build -``` - -## Deployment to The Graph Studio - -### Using a personal account for development - -#### Authentication - -Get an API key from the thegraph.com, then authenticate. - -```bash -$ yarn run graph auth --studio -``` - -#### Deployment - -```bash -# bump the package version number -yarn version patch - -# deploy the new version -yarn deploy:arbitrum-sepolia-devnet - -# commit the new version number -git commit -m "chore: subgraph deployment" -``` - -### Using the Kleros organization account - -Go to the [Deploy Subgraph Action](https://github.com/kleros/kleros-v2/actions/workflows/deploy-subgraph.yml) and click the Run workflow button: - -<img width="1265" alt="image" src="https://github.com/kleros/kleros-v2/assets/22213980/da39f584-baaf-42a2-8c6a-6544aee29420"> - -Pick the appropriate network. There should be a corresponding yarn script in the form of `deploy:<network>` on the master branch. - -Then reach out to a maintainer and request his approval. -<img width="1265" alt="image" src="https://github.com/kleros/gtcr-subgraph/assets/22213980/3cea54fb-8382-42c4-a44a-37b4bfbeecee"> diff --git a/subgraph/core-neo/abi-migrations/KlerosCoreNeo.json b/subgraph/core-neo/abi-migrations/KlerosCoreNeo.json deleted file mode 100644 index 505b50298..000000000 --- a/subgraph/core-neo/abi-migrations/KlerosCoreNeo.json +++ /dev/null @@ -1,2059 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "AppealPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrableNotWhitelisted", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "CannotDisableClassicDK", - "type": "error" - }, - { - "inputs": [], - "name": "CommitPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitNotSupportedByCourt", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitOnly", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "DisputePeriodIsFinal", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeStillDrawing", - "type": "error" - }, - { - "inputs": [], - "name": "EvidenceNotPassedAndNotAppeal", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GuardianOrGovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDisputKitParent", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "MinStakeLowerThanParentCourt", - "type": "error" - }, - { - "inputs": [], - "name": "MustSupportDisputeKitClassic", - "type": "error" - }, - { - "inputs": [], - "name": "NotEligibleForStaking", - "type": "error" - }, - { - "inputs": [], - "name": "NotEvidencePeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotExecutionPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "SortitionModuleOnly", - "type": "error" - }, - { - "inputs": [], - "name": "StakingInTooManyCourts", - "type": "error" - }, - { - "inputs": [], - "name": "StakingLessThanCourtMinStake", - "type": "error" - }, - { - "inputs": [], - "name": "StakingMoreThanMaxStakePerJuror", - "type": "error" - }, - { - "inputs": [], - "name": "StakingMoreThanMaxTotalStaked", - "type": "error" - }, - { - "inputs": [], - "name": "StakingNotPossibleInThisCourt", - "type": "error" - }, - { - "inputs": [], - "name": "StakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "StakingZeroWhenNoStake", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnstakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "inputs": [], - "name": "UnsupportedDisputeKit", - "type": "error" - }, - { - "inputs": [], - "name": "VotePeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "WhenNotPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WhenPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WrongDisputeKitIndex", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "DisputeKitCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "DisputeKitEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_fromDisputeKitID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_toDisputeKitID", - "type": "uint256" - } - ], - "name": "DisputeKitJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "Draw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreBase.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "addNewDisputeKit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "arbitrableWhitelist", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arbitrable", - "type": "address" - }, - { - "internalType": "bool", - "name": "_allowed", - "type": "bool" - } - ], - "name": "changeArbitrableWhitelist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_guardian", - "type": "address" - } - ], - "name": "changeGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC721", - "name": "_jurorNft", - "type": "address" - } - ], - "name": "changeJurorNft", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - } - ], - "name": "changeJurorProsecutionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputeKits", - "outputs": [ - { - "internalType": "contract IDisputeKit", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreBase.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "lastPeriodChange", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "uint256", - "name": "nbDrawnJurors", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256[]", - "name": "_disputeKitIDs", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "enableDisputeKits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputeKitsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getPnkAtStakePerJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "disputeKitID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkAtStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVotes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "repartitions", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkPenalties", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "drawnJurors", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumPnkRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "drawIterations", - "type": "uint256" - } - ], - "internalType": "struct KlerosCoreBase.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "guardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - }, - { - "internalType": "contract IDisputeKit", - "name": "_disputeKit", - "type": "address" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModuleAddress", - "type": "address" - }, - { - "internalType": "contract IERC721", - "name": "_jurorNft", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize5", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "isDisputeKitJumping", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - } - ], - "name": "isSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorNft", - "outputs": [ - { - "internalType": "contract IERC721", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorProsecutionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "passPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "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": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStakeBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "contract ISortitionModule", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ] -} diff --git a/subgraph/core-neo/abi-migrations/SortitionModuleNeo.json b/subgraph/core-neo/abi-migrations/SortitionModuleNeo.json deleted file mode 100644 index 45981621f..000000000 --- a/subgraph/core-neo/abi-migrations/SortitionModuleNeo.json +++ /dev/null @@ -1,1129 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNK", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNKWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ISortitionModule.Phase", - "name": "_phase", - "type": "uint8" - } - ], - "name": "NewPhase", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeDelayed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_unlock", - "type": "bool" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amountAllCourts", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - } - ], - "name": "changeMaxDrawingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxStakePerJuror", - "type": "uint256" - } - ], - "name": "changeMaxStakePerJuror", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxTotalStaked", - "type": "uint256" - } - ], - "name": "changeMaxTotalStaked", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - } - ], - "name": "changeMinStakingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "changeRandomNumberGenerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDisputeHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createTree", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeReadIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeWriteIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "delayedStakes", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "alreadyTransferred", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputesWithoutJurors", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "executeDelayedStakes", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getJurorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalLocked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakedInCourt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbCourts", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorCourtIDs", - "outputs": [ - { - "internalType": "uint96[]", - "name": "", - "type": "uint96[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorLeftoverPNK", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - }, - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxTotalStaked", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize3", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "isJurorStaked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "jurors", - "outputs": [ - { - "internalType": "uint256", - "name": "stakedPnk", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lockedPnk", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPhaseChange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "jurorAccount", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtId", - "type": "uint96" - } - ], - "name": "latestDelayedStakeIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "lockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxDrawingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxStakePerJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxTotalStaked", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minStakingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_randomNumber", - "type": "uint256" - } - ], - "name": "notifyRandomNumber", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "passPhase", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "penalizeStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availablePenalty", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "phase", - "outputs": [ - { - "internalType": "enum ISortitionModule.Phase", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "postDrawHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumberRequestBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rng", - "outputs": [ - { - "internalType": "contract RNG", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rngLookahead", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "setJurorInactive", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_ID", - "type": "bytes32" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalStaked", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "unlockStake", - "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": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "validateStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "enum StakingResult", - "name": "stakingResult", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "withdrawLeftoverPNK", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ] -} diff --git a/subgraph/core-neo/schema.graphql b/subgraph/core-neo/schema.graphql deleted file mode 120000 index cfec42dfe..000000000 --- a/subgraph/core-neo/schema.graphql +++ /dev/null @@ -1 +0,0 @@ -../core/schema.graphql \ No newline at end of file diff --git a/subgraph/core-neo/src b/subgraph/core-neo/src deleted file mode 120000 index 5bc79fa78..000000000 --- a/subgraph/core-neo/src +++ /dev/null @@ -1 +0,0 @@ -../core/src \ No newline at end of file diff --git a/subgraph/core-neo/subgraph.template.yaml b/subgraph/core-neo/subgraph.template.yaml deleted file mode 100644 index fc47faeb8..000000000 --- a/subgraph/core-neo/subgraph.template.yaml +++ /dev/null @@ -1,287 +0,0 @@ -specVersion: 0.0.5 -description: Kleros v2 Core Neo -repository: https://github.com/kleros/kleros-v2/tree/dev/subgraph/core-neo -schema: - file: ./schema.graphql -features: - - fullTextSearch -dataSources: - - kind: ethereum - name: KlerosCore - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: KlerosCore - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - User - - Arbitrable - - TokenAndETHShift - - JurorTokensPerCourt - - Court - - Dispute - - Round - - Draw - - DisputeKit - - Counter - abis: - - name: SortitionModule - file: ../../contracts/deployments/_PLACEHOLDER_/SortitionModuleNeo.json - - name: DisputeKitClassic - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitClassicNeo.json - - name: KlerosCore - # FIX: temporarily point to the abi with event addition. - file: ./abi-migrations/KlerosCoreNeo.json - eventHandlers: - - event: AppealDecision(indexed uint256,indexed address) - handler: handleAppealDecision - - event: DisputeCreation(indexed uint256,indexed address) - handler: handleDisputeCreation - receipt: true - - event: Draw(indexed address,indexed uint256,uint256,uint256) - handler: handleDraw - - event: NewPeriod(indexed uint256,uint8) - handler: handleNewPeriod - - event: CourtCreated(indexed uint96,indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256[]) - handler: handleCourtCreated - # FIX: This is support for old signature - - event: CourtCreated(indexed uint256,indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256[]) - handler: handleCourtCreated - - event: CourtModified(indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4]) - handler: handleCourtModified - - event: DisputeKitCreated(indexed uint256,indexed address) - handler: handleDisputeKitCreated - - event: DisputeKitEnabled(indexed uint96,indexed uint256,indexed bool) - handler: handleDisputeKitEnabled - - event: TokenAndETHShift(indexed address,indexed uint256,indexed uint256,uint256,int256,int256,address) - handler: handleTokenAndETHShift - - event: Ruling(indexed address,indexed uint256,uint256) - handler: handleRuling - - event: AcceptedFeeToken(indexed address,indexed bool) - handler: handleAcceptedFeeToken - - event: CourtJump(indexed uint256,indexed uint256,indexed uint96,uint96) - handler: handleCourtJump - file: ./src/KlerosCore.ts - - kind: ethereum - name: PolicyRegistry - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: PolicyRegistry - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - Court - abis: - - name: PolicyRegistry - file: ../../contracts/deployments/_PLACEHOLDER_/PolicyRegistry.json - eventHandlers: - - event: PolicyUpdate(indexed uint256,string,string) - handler: handlePolicyUpdate - file: ./src/PolicyRegistry.ts - - kind: ethereum - name: DisputeKitClassic - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: DisputeKitClassic - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitClassic - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitClassicNeo.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCoreNeo.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: DisputeKitShutter - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: DisputeKitShutter - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitShutter - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitShutterNeo.json - - name: DisputeKitClassic # Required on Alchemy - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitClassicNeo.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCoreNeo.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: DisputeKitGated - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: DisputeKitGated - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitGated - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitGatedNeo.json - - name: DisputeKitClassic # Required on Alchemy - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitClassicNeo.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCoreNeo.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: DisputeKitGatedShutter - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: DisputeKitGatedShutter - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitGatedShutter - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitGatedShutterNeo.json - - name: DisputeKitClassic # Required on Alchemy - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitClassicNeo.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCoreNeo.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: EvidenceModule - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: EvidenceModule - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicEvidenceGroup - - ClassicEvidence - abis: - - name: EvidenceModule - file: ../../contracts/deployments/_PLACEHOLDER_/EvidenceModule.json - eventHandlers: - - event: Evidence(indexed uint256,indexed address,string) - handler: handleEvidenceEvent - file: ./src/EvidenceModule.ts - - kind: ethereum - name: SortitionModule - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: SortitionModule - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - JurorTokensPerCourt - abis: - - name: SortitionModule - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/SortitionModuleNeo.json - eventHandlers: - - event: StakeDelayed(indexed address,indexed uint96,uint256) - handler: handleStakeDelayed - - event: StakeLocked(indexed address,uint256,bool) - handler: handleStakeLocked - - event: StakeSet(indexed address,uint256,uint256,uint256) - handler: handleStakeSet - # FIX: old stake set signature - - event: StakeSet(indexed address,uint256,uint256) - handler: handleStakeSet - file: ./src/SortitionModule.ts diff --git a/subgraph/core-neo/subgraph.yaml b/subgraph/core-neo/subgraph.yaml deleted file mode 100644 index 664c1b68e..000000000 --- a/subgraph/core-neo/subgraph.yaml +++ /dev/null @@ -1,288 +0,0 @@ -# THIS FILE IS AUTO-GENERATED BY update.sh FROM subgraph.template.yaml, ANY CHANGES WILL BE LOST. -specVersion: 0.0.5 -description: Kleros v2 Core Neo -repository: https://github.com/kleros/kleros-v2/tree/dev/subgraph/core-neo -schema: - file: ./schema.graphql -features: - - fullTextSearch -dataSources: - - kind: ethereum - name: KlerosCore - network: arbitrum-one - source: - address: "0x991d2df165670b9cac3B022f4B68D65b664222ea" - abi: KlerosCore - startBlock: 272063254 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - User - - Arbitrable - - TokenAndETHShift - - JurorTokensPerCourt - - Court - - Dispute - - Round - - Draw - - DisputeKit - - Counter - abis: - - name: SortitionModule - file: ../../contracts/deployments/arbitrum/SortitionModuleNeo.json - - name: DisputeKitClassic - file: ../../contracts/deployments/arbitrum/DisputeKitClassicNeo.json - - name: KlerosCore - # FIX: temporarily point to the abi with event addition. - file: ./abi-migrations/KlerosCoreNeo.json - eventHandlers: - - event: AppealDecision(indexed uint256,indexed address) - handler: handleAppealDecision - - event: DisputeCreation(indexed uint256,indexed address) - handler: handleDisputeCreation - receipt: true - - event: Draw(indexed address,indexed uint256,uint256,uint256) - handler: handleDraw - - event: NewPeriod(indexed uint256,uint8) - handler: handleNewPeriod - - event: CourtCreated(indexed uint96,indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256[]) - handler: handleCourtCreated - # FIX: This is support for old signature - - event: CourtCreated(indexed uint256,indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256[]) - handler: handleCourtCreated - - event: CourtModified(indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4]) - handler: handleCourtModified - - event: DisputeKitCreated(indexed uint256,indexed address) - handler: handleDisputeKitCreated - - event: DisputeKitEnabled(indexed uint96,indexed uint256,indexed bool) - handler: handleDisputeKitEnabled - - event: TokenAndETHShift(indexed address,indexed uint256,indexed uint256,uint256,int256,int256,address) - handler: handleTokenAndETHShift - - event: Ruling(indexed address,indexed uint256,uint256) - handler: handleRuling - - event: AcceptedFeeToken(indexed address,indexed bool) - handler: handleAcceptedFeeToken - - event: CourtJump(indexed uint256,indexed uint256,indexed uint96,uint96) - handler: handleCourtJump - file: ./src/KlerosCore.ts - - kind: ethereum - name: PolicyRegistry - network: arbitrum-one - source: - address: "0x553dcbF6aB3aE06a1064b5200Df1B5A9fB403d3c" - abi: PolicyRegistry - startBlock: 272063037 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - Court - abis: - - name: PolicyRegistry - file: ../../contracts/deployments/arbitrum/PolicyRegistry.json - eventHandlers: - - event: PolicyUpdate(indexed uint256,string,string) - handler: handlePolicyUpdate - file: ./src/PolicyRegistry.ts - - kind: ethereum - name: DisputeKitClassic - network: arbitrum-one - source: - address: "0x70B464be85A547144C72485eBa2577E5D3A45421" - abi: DisputeKitClassic - startBlock: 272063168 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitClassic - file: ../../contracts/deployments/arbitrum/DisputeKitClassicNeo.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCoreNeo.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: DisputeKitShutter - network: arbitrum-one - source: - address: "0x9D3e3f1765744c2a1BC6F6088549770444BBC768" - abi: DisputeKitShutter - startBlock: 364034407 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitShutter - file: ../../contracts/deployments/arbitrum/DisputeKitShutterNeo.json - - name: DisputeKitClassic # Required on Alchemy - file: ../../contracts/deployments/arbitrum/DisputeKitClassicNeo.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCoreNeo.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: DisputeKitGated - network: arbitrum-one - source: - address: "0xaE1eed20C125B739b64c948820C61F809ad9a925" - abi: DisputeKitGated - startBlock: 364034429 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitGated - file: ../../contracts/deployments/arbitrum/DisputeKitGatedNeo.json - - name: DisputeKitClassic # Required on Alchemy - file: ../../contracts/deployments/arbitrum/DisputeKitClassicNeo.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCoreNeo.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: DisputeKitGatedShutter - network: arbitrum-one - source: - address: "0x788330092B9704809C19858E39EB9Ac402c2E47b" - abi: DisputeKitGatedShutter - startBlock: 364034451 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitGatedShutter - file: ../../contracts/deployments/arbitrum/DisputeKitGatedShutterNeo.json - - name: DisputeKitClassic # Required on Alchemy - file: ../../contracts/deployments/arbitrum/DisputeKitClassicNeo.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCoreNeo.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: EvidenceModule - network: arbitrum-one - source: - address: "0x48e052B4A6dC4F30e90930F1CeaAFd83b3981EB3" - abi: EvidenceModule - startBlock: 272063086 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicEvidenceGroup - - ClassicEvidence - abis: - - name: EvidenceModule - file: ../../contracts/deployments/arbitrum/EvidenceModule.json - eventHandlers: - - event: Evidence(indexed uint256,indexed address,string) - handler: handleEvidenceEvent - file: ./src/EvidenceModule.ts - - kind: ethereum - name: SortitionModule - network: arbitrum-one - source: - address: "0x21A9402aDb818744B296e1d1BE58C804118DC03D" - abi: SortitionModule - startBlock: 272063201 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - JurorTokensPerCourt - abis: - - name: SortitionModule - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/SortitionModuleNeo.json - eventHandlers: - - event: StakeDelayed(indexed address,indexed uint96,uint256) - handler: handleStakeDelayed - - event: StakeLocked(indexed address,uint256,bool) - handler: handleStakeLocked - - event: StakeSet(indexed address,uint256,uint256,uint256) - handler: handleStakeSet - # FIX: old stake set signature - - event: StakeSet(indexed address,uint256,uint256) - handler: handleStakeSet - file: ./src/SortitionModule.ts diff --git a/subgraph/core-neo/tests b/subgraph/core-neo/tests deleted file mode 120000 index 88b04eec1..000000000 --- a/subgraph/core-neo/tests +++ /dev/null @@ -1 +0,0 @@ -../core/tests \ No newline at end of file diff --git a/subgraph/core-university/schema.graphql b/subgraph/core-university/schema.graphql deleted file mode 120000 index cfec42dfe..000000000 --- a/subgraph/core-university/schema.graphql +++ /dev/null @@ -1 +0,0 @@ -../core/schema.graphql \ No newline at end of file diff --git a/subgraph/core-university/src/DisputeKitClassic.ts b/subgraph/core-university/src/DisputeKitClassic.ts deleted file mode 120000 index a3ac594c5..000000000 --- a/subgraph/core-university/src/DisputeKitClassic.ts +++ /dev/null @@ -1 +0,0 @@ -../../core/src/DisputeKitClassic.ts \ No newline at end of file diff --git a/subgraph/core-university/src/EvidenceModule.ts b/subgraph/core-university/src/EvidenceModule.ts deleted file mode 120000 index ea9f1ed0c..000000000 --- a/subgraph/core-university/src/EvidenceModule.ts +++ /dev/null @@ -1 +0,0 @@ -../../core/src/EvidenceModule.ts \ No newline at end of file diff --git a/subgraph/core-university/src/HomeGateway.ts b/subgraph/core-university/src/HomeGateway.ts deleted file mode 120000 index f242057fd..000000000 --- a/subgraph/core-university/src/HomeGateway.ts +++ /dev/null @@ -1 +0,0 @@ -../../core/src/HomeGateway.ts \ No newline at end of file diff --git a/subgraph/core-university/src/KlerosCore.ts b/subgraph/core-university/src/KlerosCore.ts deleted file mode 120000 index efac72b40..000000000 --- a/subgraph/core-university/src/KlerosCore.ts +++ /dev/null @@ -1 +0,0 @@ -../../core/src/KlerosCore.ts \ No newline at end of file diff --git a/subgraph/core-university/src/PolicyRegistry.ts b/subgraph/core-university/src/PolicyRegistry.ts deleted file mode 120000 index 50a23b6ed..000000000 --- a/subgraph/core-university/src/PolicyRegistry.ts +++ /dev/null @@ -1 +0,0 @@ -../../core/src/PolicyRegistry.ts \ No newline at end of file diff --git a/subgraph/core-university/src/SortitionModule.ts b/subgraph/core-university/src/SortitionModule.ts deleted file mode 100644 index 53241f322..000000000 --- a/subgraph/core-university/src/SortitionModule.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { SortitionModule, StakeLocked, StakeSet } from "../generated/SortitionModule/SortitionModule"; - -import { updateJurorDelayedStake, updateJurorStake } from "./entities/JurorTokensPerCourt"; -import { ensureUser } from "./entities/User"; -import { ZERO } from "./utils"; - -export function handleStakeSet(event: StakeSet): void { - const jurorAddress = event.params._address.toHexString(); - ensureUser(jurorAddress); - const courtID = event.params._courtID.toString(); - - updateJurorStake(jurorAddress, courtID.toString(), SortitionModule.bind(event.address), event.block.timestamp); - //stake is updated instantly so no delayed amount, set delay amount to zero - updateJurorDelayedStake(jurorAddress, courtID, ZERO); -} - -export function handleStakeLocked(event: StakeLocked): void { - // NOP -} diff --git a/subgraph/core-university/src/datapoint.ts b/subgraph/core-university/src/datapoint.ts deleted file mode 120000 index 8463d444c..000000000 --- a/subgraph/core-university/src/datapoint.ts +++ /dev/null @@ -1 +0,0 @@ -../../core/src/datapoint.ts \ No newline at end of file diff --git a/subgraph/core-university/src/entities b/subgraph/core-university/src/entities deleted file mode 120000 index 3ac4d7ef7..000000000 --- a/subgraph/core-university/src/entities +++ /dev/null @@ -1 +0,0 @@ -../../core/src/entities \ No newline at end of file diff --git a/subgraph/core-university/src/utils.ts b/subgraph/core-university/src/utils.ts deleted file mode 120000 index d012011d6..000000000 --- a/subgraph/core-university/src/utils.ts +++ /dev/null @@ -1 +0,0 @@ -../../core/src/utils.ts \ No newline at end of file diff --git a/subgraph/core-university/subgraph.template.yaml b/subgraph/core-university/subgraph.template.yaml deleted file mode 100644 index 9e83ab0ee..000000000 --- a/subgraph/core-university/subgraph.template.yaml +++ /dev/null @@ -1,162 +0,0 @@ -specVersion: 0.0.5 -description: Kleros v2 Core University -repository: https://github.com/kleros/kleros-v2/tree/dev/subgraph/core-university -schema: - file: ./schema.graphql -features: - - fullTextSearch -dataSources: - - kind: ethereum - name: KlerosCore - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: KlerosCore - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - User - - Arbitrable - - TokenAndETHShift - - JurorTokensPerCourt - - Court - - Dispute - - Round - - Draw - - DisputeKit - - Counter - abis: - - name: SortitionModule - file: ../../contracts/deployments/_PLACEHOLDER_/SortitionModuleUniversity.json - - name: DisputeKitClassic - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitClassicUniversity.json - - name: KlerosCore - file: ../../contracts/deployments/_PLACEHOLDER_/KlerosCoreUniversity.json - eventHandlers: - - event: AppealDecision(indexed uint256,indexed address) - handler: handleAppealDecision - - event: DisputeCreation(indexed uint256,indexed address) - handler: handleDisputeCreation - receipt: true - - event: Draw(indexed address,indexed uint256,uint256,uint256) - handler: handleDraw - - event: NewPeriod(indexed uint256,uint8) - handler: handleNewPeriod - - event: CourtCreated(indexed uint256,indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256[]) - handler: handleCourtCreated - - event: CourtModified(indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4]) - handler: handleCourtModified - - event: DisputeKitCreated(indexed uint256,indexed address) - handler: handleDisputeKitCreated - - event: DisputeKitEnabled(indexed uint96,indexed uint256,indexed bool) - handler: handleDisputeKitEnabled - - event: TokenAndETHShift(indexed address,indexed uint256,indexed uint256,uint256,int256,int256,address) - handler: handleTokenAndETHShift - - event: Ruling(indexed address,indexed uint256,uint256) - handler: handleRuling - - event: AcceptedFeeToken(indexed address,indexed bool) - handler: handleAcceptedFeeToken - - event: CourtJump(indexed uint256,indexed uint256,indexed uint96,uint96) - handler: handleCourtJump - file: ./src/KlerosCore.ts - - kind: ethereum - name: PolicyRegistry - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: PolicyRegistry - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - Court - abis: - - name: PolicyRegistry - file: ../../contracts/deployments/_PLACEHOLDER_/PolicyRegistry.json - eventHandlers: - - event: PolicyUpdate(indexed uint256,string,string) - handler: handlePolicyUpdate - file: ./src/PolicyRegistry.ts - - kind: ethereum - name: DisputeKitClassic - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: DisputeKitClassic - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitClassic - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitClassicUniversity.json - - name: KlerosCore - file: ../../contracts/deployments/_PLACEHOLDER_/KlerosCoreUniversity.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: EvidenceModule - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: EvidenceModule - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicEvidenceGroup - - ClassicEvidence - abis: - - name: EvidenceModule - file: ../../contracts/deployments/_PLACEHOLDER_/EvidenceModule.json - eventHandlers: - - event: Evidence(indexed uint256,indexed address,string) - handler: handleEvidenceEvent - file: ./src/EvidenceModule.ts - - kind: ethereum - name: SortitionModule - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: SortitionModule - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - JurorTokensPerCourt - abis: - - name: SortitionModule - file: ../../contracts/deployments/_PLACEHOLDER_/SortitionModuleUniversity.json - eventHandlers: - - event: StakeLocked(indexed address,uint256,bool) - handler: handleStakeLocked - - event: StakeSet(indexed address,uint256,uint256,uint256) - handler: handleStakeSet - file: ./src/SortitionModule.ts diff --git a/subgraph/core-university/subgraph.yaml b/subgraph/core-university/subgraph.yaml deleted file mode 100644 index d820954c8..000000000 --- a/subgraph/core-university/subgraph.yaml +++ /dev/null @@ -1,161 +0,0 @@ -# THIS FILE IS AUTO-GENERATED BY update.sh FROM subgraph.template.yaml, ANY CHANGES WILL BE LOST. -specVersion: 0.0.5 -schema: - file: ./schema.graphql -features: - - fullTextSearch -dataSources: - - kind: ethereum - name: KlerosCore - network: arbitrum-sepolia - source: - address: "0x5AB37F38778Bc175852fA353056591D91c744ce6" - abi: KlerosCore - startBlock: 96308609 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - User - - Arbitrable - - TokenAndETHShift - - JurorTokensPerCourt - - Court - - Dispute - - Round - - Draw - - DisputeKit - - Counter - abis: - - name: SortitionModule - file: ../../contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity.json - - name: DisputeKitClassic - file: ../../contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity.json - - name: KlerosCore - file: ../../contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity.json - eventHandlers: - - event: AppealDecision(indexed uint256,indexed address) - handler: handleAppealDecision - - event: DisputeCreation(indexed uint256,indexed address) - handler: handleDisputeCreation - receipt: true - - event: Draw(indexed address,indexed uint256,uint256,uint256) - handler: handleDraw - - event: NewPeriod(indexed uint256,uint8) - handler: handleNewPeriod - - event: CourtCreated(indexed uint256,indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256[]) - handler: handleCourtCreated - - event: CourtModified(indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4]) - handler: handleCourtModified - - event: DisputeKitCreated(indexed uint256,indexed address) - handler: handleDisputeKitCreated - - event: DisputeKitEnabled(indexed uint96,indexed uint256,indexed bool) - handler: handleDisputeKitEnabled - - event: TokenAndETHShift(indexed address,indexed uint256,indexed uint256,uint256,int256,int256,address) - handler: handleTokenAndETHShift - - event: Ruling(indexed address,indexed uint256,uint256) - handler: handleRuling - - event: AcceptedFeeToken(indexed address,indexed bool) - handler: handleAcceptedFeeToken - - event: CourtJump(indexed uint256,indexed uint256,indexed uint96,uint96) - handler: handleCourtJump - file: ./src/KlerosCore.ts - - kind: ethereum - name: PolicyRegistry - network: arbitrum-sepolia - source: - address: "0x31d067405184d7FaA64b0834511cBcFAF32CdC4b" - abi: PolicyRegistry - startBlock: 141215158 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - Court - abis: - - name: PolicyRegistry - file: ../../contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry.json - eventHandlers: - - event: PolicyUpdate(indexed uint256,string,string) - handler: handlePolicyUpdate - file: ./src/PolicyRegistry.ts - - kind: ethereum - name: DisputeKitClassic - network: arbitrum-sepolia - source: - address: "0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5" - abi: DisputeKitClassic - startBlock: 96308536 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitClassic - file: ../../contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassicUniversity.json - - name: KlerosCore - file: ../../contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: EvidenceModule - network: arbitrum-sepolia - source: - address: "0x990f44d19a5F46889801B31bf58e0536fBECf27C" - abi: EvidenceModule - startBlock: 141215177 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicEvidenceGroup - - ClassicEvidence - abis: - - name: EvidenceModule - file: ../../contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule.json - eventHandlers: - - event: Evidence(indexed uint256,indexed address,string) - handler: handleEvidenceEvent - file: ./src/EvidenceModule.ts - - kind: ethereum - name: SortitionModule - network: arbitrum-sepolia - source: - address: "0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79" - abi: SortitionModule - startBlock: 96308572 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - JurorTokensPerCourt - abis: - - name: SortitionModule - file: ../../contracts/deployments/arbitrumSepoliaDevnet/SortitionModuleUniversity.json - eventHandlers: - - event: StakeLocked(indexed address,uint256,bool) - handler: handleStakeLocked - - event: StakeSet(indexed address,uint256,uint256,uint256) - handler: handleStakeSet - file: ./src/SortitionModule.ts diff --git a/subgraph/core-university/tests b/subgraph/core-university/tests deleted file mode 120000 index 88b04eec1..000000000 --- a/subgraph/core-university/tests +++ /dev/null @@ -1 +0,0 @@ -../core/tests \ No newline at end of file diff --git a/subgraph/core/abi-migrations/KlerosCore.json b/subgraph/core/abi-migrations/KlerosCore.json deleted file mode 100644 index e7cd08ed5..000000000 --- a/subgraph/core/abi-migrations/KlerosCore.json +++ /dev/null @@ -1,1971 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "AppealFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "AppealPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "ArbitrationFeesNotEnough", - "type": "error" - }, - { - "inputs": [], - "name": "CannotDisableClassicDK", - "type": "error" - }, - { - "inputs": [], - "name": "CommitPeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitNotSupportedByCourt", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeKitOnly", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeNotAppealable", - "type": "error" - }, - { - "inputs": [], - "name": "DisputePeriodIsFinal", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeStillDrawing", - "type": "error" - }, - { - "inputs": [], - "name": "EvidenceNotPassedAndNotAppeal", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [], - "name": "GovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "GuardianOrGovernorOnly", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDisputKitParent", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidForkingCourtAsParent", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "MinStakeLowerThanParentCourt", - "type": "error" - }, - { - "inputs": [], - "name": "MustSupportDisputeKitClassic", - "type": "error" - }, - { - "inputs": [], - "name": "NotEvidencePeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotExecutionPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "RulingAlreadyExecuted", - "type": "error" - }, - { - "inputs": [], - "name": "SortitionModuleOnly", - "type": "error" - }, - { - "inputs": [], - "name": "StakingInTooManyCourts", - "type": "error" - }, - { - "inputs": [], - "name": "StakingLessThanCourtMinStake", - "type": "error" - }, - { - "inputs": [], - "name": "StakingNotPossibleInThisCourt", - "type": "error" - }, - { - "inputs": [], - "name": "StakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "StakingZeroWhenNoStake", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAccepted", - "type": "error" - }, - { - "inputs": [], - "name": "TransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "inputs": [], - "name": "UnstakingTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UnsuccessfulCall", - "type": "error" - }, - { - "inputs": [], - "name": "UnsupportedDisputeKit", - "type": "error" - }, - { - "inputs": [], - "name": "VotePeriodNotPassed", - "type": "error" - }, - { - "inputs": [], - "name": "WhenNotPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WhenPausedOnly", - "type": "error" - }, - { - "inputs": [], - "name": "WrongDisputeKitIndex", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_token", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "AcceptedFeeToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealDecision", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "AppealPossible", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_fromCourtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "_toCourtID", - "type": "uint96" - } - ], - "name": "CourtJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "CourtModified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - } - ], - "name": "DisputeCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "DisputeKitCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "DisputeKitEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_fromDisputeKitID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_toDisputeKitID", - "type": "uint256" - } - ], - "name": "DisputeKitJump", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_voteID", - "type": "uint256" - } - ], - "name": "Draw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_pnkAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "LeftoverRewardSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "NewCurrencyRate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum KlerosCoreBase.Period", - "name": "_period", - "type": "uint8" - } - ], - "name": "NewPeriod", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract IArbitrableV2", - "name": "_arbitrable", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_ruling", - "type": "uint256" - } - ], - "name": "Ruling", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "_roundID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_degreeOfCoherency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_pnkAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "int256", - "name": "_feeAmount", - "type": "int256" - }, - { - "indexed": false, - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "TokenAndETHShift", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IDisputeKit", - "name": "_disputeKitAddress", - "type": "address" - } - ], - "name": "addNewDisputeKit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "appealPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "bool", - "name": "_accepted", - "type": "bool" - } - ], - "name": "changeAcceptedFeeTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - } - ], - "name": "changeCourtParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "_rateDecimals", - "type": "uint8" - } - ], - "name": "changeCurrencyRates", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_guardian", - "type": "address" - } - ], - "name": "changeGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - } - ], - "name": "changeJurorProsecutionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - } - ], - "name": "changePinakion", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModule", - "type": "address" - } - ], - "name": "changeSortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_toToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amountInEth", - "type": "uint256" - } - ], - "name": "convertEthToTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "courts", - "outputs": [ - { - "internalType": "uint96", - "name": "parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "createCourt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numberOfChoices", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - }, - { - "internalType": "contract IERC20", - "name": "_feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "createDispute", - "outputs": [ - { - "internalType": "uint256", - "name": "disputeID", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "name": "currencyRates", - "outputs": [ - { - "internalType": "bool", - "name": "feePaymentAccepted", - "type": "bool" - }, - { - "internalType": "uint64", - "name": "rateInEth", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "rateDecimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "internalType": "uint256", - "name": "ruling", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "tied", - "type": "bool" - }, - { - "internalType": "bool", - "name": "overridden", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputeKits", - "outputs": [ - { - "internalType": "contract IDisputeKit", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "contract IArbitrableV2", - "name": "arbitrated", - "type": "address" - }, - { - "internalType": "enum KlerosCoreBase.Period", - "name": "period", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "ruled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "lastPeriodChange", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "uint256", - "name": "nbDrawnJurors", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256[]", - "name": "_disputeKitIDs", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "_enable", - "type": "bool" - } - ], - "name": "enableDisputeKits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "executeGovernorProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "executeRuling", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputeKitsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfRounds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "getNumberOfVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getPnkAtStakePerJuror", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_round", - "type": "uint256" - } - ], - "name": "getRoundInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "disputeKitID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkAtStakePerJuror", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalFeesForJurors", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbVotes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "repartitions", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkPenalties", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "drawnJurors", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "sumFeeRewardPaid", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sumPnkRewardPaid", - "type": "uint256" - }, - { - "internalType": "contract IERC20", - "name": "feeToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "drawIterations", - "type": "uint256" - } - ], - "internalType": "struct KlerosCoreBase.Round", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getTimesPerPeriod", - "outputs": [ - { - "internalType": "uint256[4]", - "name": "timesPerPeriod", - "type": "uint256[4]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "guardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "contract IERC20", - "name": "_pinakion", - "type": "address" - }, - { - "internalType": "address", - "name": "_jurorProsecutionModule", - "type": "address" - }, - { - "internalType": "contract IDisputeKit", - "name": "_disputeKit", - "type": "address" - }, - { - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "internalType": "uint256[4]", - "name": "_courtParameters", - "type": "uint256[4]" - }, - { - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "internalType": "bytes", - "name": "_sortitionExtraData", - "type": "bytes" - }, - { - "internalType": "contract ISortitionModule", - "name": "_sortitionModuleAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize5", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "isDisputeKitJumping", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_disputeKitID", - "type": "uint256" - } - ], - "name": "isSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "jurorProsecutionModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "passPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "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": "pinakion", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStakeBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sortitionModule", - "outputs": [ - { - "internalType": "contract ISortitionModule", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferBySortitionModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "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": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ] -} diff --git a/subgraph/core/abi-migrations/SortitionModule.json b/subgraph/core/abi-migrations/SortitionModule.json deleted file mode 100644 index 244546c90..000000000 --- a/subgraph/core/abi-migrations/SortitionModule.json +++ /dev/null @@ -1,1054 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDelegateCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [], - "name": "UUPSUnauthorizedCallContext", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "name": "UUPSUnsupportedProxiableUUID", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNK", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "LeftoverPNKWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum ISortitionModule.Phase", - "name": "_phase", - "type": "uint8" - } - ], - "name": "NewPhase", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeDelayed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_unlock", - "type": "bool" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amountAllCourts", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - } - ], - "name": "changeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - } - ], - "name": "changeMaxDrawingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - } - ], - "name": "changeMinStakingTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "changeRandomNumberGenerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract KlerosCore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "createDisputeHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createTree", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeReadIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayedStakeWriteIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "delayedStakes", - "outputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "alreadyTransferred", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputesWithoutJurors", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_coreDisputeID", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "draw", - "outputs": [ - { - "internalType": "address", - "name": "drawnAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_iterations", - "type": "uint256" - } - ], - "name": "executeDelayedStakes", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "getJurorBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalLocked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakedInCourt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nbCourts", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorCourtIDs", - "outputs": [ - { - "internalType": "uint96[]", - "name": "", - "type": "uint96[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "getJurorLeftoverPNK", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_governor", - "type": "address" - }, - { - "internalType": "contract KlerosCore", - "name": "_core", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_minStakingTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDrawingTime", - "type": "uint256" - }, - { - "internalType": "contract RNG", - "name": "_rng", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rngLookahead", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize3", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - } - ], - "name": "isJurorStaked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "jurors", - "outputs": [ - { - "internalType": "uint256", - "name": "stakedPnk", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lockedPnk", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPhaseChange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "jurorAccount", - "type": "address" - }, - { - "internalType": "uint96", - "name": "courtId", - "type": "uint96" - } - ], - "name": "latestDelayedStakeIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "lockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxDrawingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minStakingTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_randomNumber", - "type": "uint256" - } - ], - "name": "notifyRandomNumber", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "passPhase", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "penalizeStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availablePenalty", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "phase", - "outputs": [ - { - "internalType": "enum ISortitionModule.Phase", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "postDrawHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "randomNumberRequestBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rng", - "outputs": [ - { - "internalType": "contract RNG", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rngLookahead", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "setJurorInactive", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "setStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_ID", - "type": "bytes32" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_juror", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - } - ], - "name": "stakeOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relativeAmount", - "type": "uint256" - } - ], - "name": "unlockStake", - "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": "_account", - "type": "address" - }, - { - "internalType": "uint96", - "name": "_courtID", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "_newStake", - "type": "uint256" - } - ], - "name": "validateStake", - "outputs": [ - { - "internalType": "uint256", - "name": "pnkDeposit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "pnkWithdrawal", - "type": "uint256" - }, - { - "internalType": "enum StakingResult", - "name": "stakingResult", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "withdrawLeftoverPNK", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ] -} diff --git a/subgraph/core/schema.graphql b/subgraph/core/schema.graphql deleted file mode 100644 index b4b0626b5..000000000 --- a/subgraph/core/schema.graphql +++ /dev/null @@ -1,373 +0,0 @@ -######### -# Enums # -######### - -enum Period { - evidence - commit - vote - appeal - execution -} - -############## -# Interfaces # -############## - -interface DisputeKitDispute { - id: ID! - coreDispute: Dispute! - localRounds: [DisputeKitRound!]! @derivedFrom(field: "localDispute") - currentLocalRoundIndex: BigInt! - timestamp: BigInt! -} - -interface DisputeKitRound { - id: ID! - localDispute: DisputeKitDispute! - votes: [Vote!]! @derivedFrom(field: "localRound") -} - -interface Vote { - id: ID! - coreDispute: Dispute! - localRound: DisputeKitRound! - juror: User! - draw: Draw -} - -interface Contribution { - id: ID! - coreDispute: Dispute! - contributor: User! -} - -interface EvidenceGroup { - id: ID! - evidences: [Evidence!]! @derivedFrom(field: "evidenceGroup") - nextEvidenceIndex: BigInt! -} - -interface Evidence { - id: ID! - evidence: String! - evidenceGroup: EvidenceGroup! - evidenceIndex: String! - sender: User! - senderAddress: String! - timestamp: BigInt! - transactionHash: Bytes! - name: String - description: String - fileURI: String - fileTypeExtension: String -} - - -############ -# Entities # -############ - -type User @entity { - id: ID! # address - userAddress: String! - tokens: [JurorTokensPerCourt!]! @derivedFrom(field: "juror") - totalStake: BigInt! - totalDelayed: BigInt! - shifts: [TokenAndETHShift!]! @derivedFrom(field: "juror") - draws: [Draw!]! @derivedFrom(field: "juror") - activeDisputes: BigInt! - rounds: [Round!]! - disputes: [Dispute!]! - resolvedDisputes: [Dispute!]! - totalResolvedDisputes: BigInt! - totalDisputes: BigInt! - totalAppealingDisputes: BigInt! - totalCoherentVotes: BigInt! - totalResolvedVotes: BigInt! - coherenceScore: BigInt! - votes: [Vote!]! @derivedFrom(field: "juror") - contributions: [Contribution!]! @derivedFrom(field: "contributor") - evidences: [Evidence!]! @derivedFrom(field: "sender") - penalties: [Penalty!]! @derivedFrom(field: "juror") -} - -type Penalty @entity { - id: ID! # dispute.id-roundIndex-user.id - dispute: Dispute! - round: Round! - juror: User! - amount: BigInt! - numberDraws: BigInt! - degreeOfCoherency: BigInt! -} - -type Arbitrable @entity { - id: ID! # address - disputes: [Dispute!]! @derivedFrom(field: "arbitrated") - totalDisputes: BigInt! -} - -type TokenAndETHShift @entity { - id: ID! # user.id-dispute.id - juror: User! - dispute: Dispute! - pnkAmount: BigInt! - ethAmount: BigInt! - isNativeCurrency: Boolean! - feeTokenAmount: BigInt! - feeToken: FeeToken -} - -type JurorTokensPerCourt @entity { - id: ID! # user.id-court.id - juror: User! - court: Court! - effectiveStake: BigInt! - staked: BigInt! - locked: BigInt! - delayed: BigInt! -} - -type Court @entity { - id: ID! - policy: String - name: String - parent: Court - hiddenVotes: Boolean! - children: [Court!]! @derivedFrom(field: "parent") - minStake: BigInt! - alpha: BigInt! - feeForJuror: BigInt! - jurorsForCourtJump: BigInt! - timesPerPeriod: [BigInt!]! - supportedDisputeKits: [DisputeKit!]! - disputes: [Dispute!]! @derivedFrom(field: "court") - numberDisputes: BigInt! - numberClosedDisputes: BigInt! - numberVotingDisputes: BigInt! - numberAppealingDisputes: BigInt! - numberVotes: BigInt! - stakedJurors: [JurorTokensPerCourt!]! @derivedFrom(field: "court") - numberStakedJurors: BigInt! - effectiveNumberStakedJurors: BigInt! - stake: BigInt! - effectiveStake: BigInt! - delayedStake: BigInt! - paidETH: BigInt! - paidPNK: BigInt! -} - -type Dispute @entity { - id: ID! - disputeID: BigInt! - court: Court! - createdAt: BigInt - transactionHash: String! - arbitrated: Arbitrable! - period: Period! - ruled: Boolean! - currentRuling: BigInt! - tied: Boolean! - overridden: Boolean! - periodDeadline: BigInt! - periodNotificationIndex: BigInt! - lastPeriodChange: BigInt! - lastPeriodChangeBlockNumber: BigInt! - rounds: [Round!]! @derivedFrom(field: "dispute") - currentRound: Round! - currentRoundIndex: BigInt! - jurors: [User!]! @derivedFrom(field: "disputes") - shifts: [TokenAndETHShift!]! @derivedFrom(field: "dispute") - disputeKitDispute: [DisputeKitDispute!]! @derivedFrom(field: "coreDispute") - isCrossChain: Boolean - arbitrableChainId:BigInt - externalDisputeId:BigInt - templateId:BigInt - rulingTimestamp:BigInt - rulingTransactionHash:String -} - -type PeriodIndexCounter @entity { - id: String! - counter: BigInt! -} - -type Round @entity { - id: ID! # dispute.id-dispute.rounds.length - disputeKit: DisputeKit! - tokensAtStakePerJuror: BigInt! - totalFeesForJurors: BigInt! - nbVotes: BigInt! - isCurrentRound: Boolean! - repartitions: BigInt! - penalties: BigInt! - drawnJurors: [Draw!]! @derivedFrom(field: "round") - dispute: Dispute! - court: Court! - feeToken: FeeToken - timeline: [BigInt!]! - jurorsDrawn: Boolean! - jurorRewardsDispersed: Boolean! -} - -type Draw @entity(immutable: true) { - id: ID! # dispute.id-currentRound-voteID - blockNumber: BigInt! - dispute: Dispute! - round: Round! - juror: User! - voteIDNum: BigInt! - vote: Vote @derivedFrom(field: "draw") - drawNotificationIndex: BigInt -} - -type DisputeKit @entity { - id: ID! - address: Bytes - needsFreezing: Boolean! - rounds: [Round!]! @derivedFrom(field: "disputeKit") - courts: [Court!]! @derivedFrom(field: "supportedDisputeKits") -} - -type Counter @entity { - id: ID! # Will be the timestamp except for the counter which will be 0 - stakedPNK: BigInt! - redistributedPNK: BigInt! - paidETH: BigInt! - activeJurors: BigInt! - cases: BigInt! - casesVoting: BigInt! - casesRuled: BigInt! - casesAppealing: BigInt! - totalLeaderboardJurors: BigInt! -} - -type CourtCounter @entity { - id: ID! # court.id-timestamp - court: Court! - numberDisputes: BigInt! - numberVotes: BigInt! - effectiveStake: BigInt! - timestamp: BigInt! -} - -type FeeToken @entity { - id: ID! # The address of the ERC20 token. - accepted: Boolean! - rateInEth: BigInt! - rateDecimals: Int! - totalPaid: BigInt! - totalPaidInETH: BigInt! - rounds: [Round!] @derivedFrom(field: "feeToken") - tokenAndETHShift: [TokenAndETHShift!] @derivedFrom(field: "feeToken") -} - -##################### -# ClassicDisputeKit # -##################### - -type ClassicDispute implements DisputeKitDispute @entity { - id: ID! # disputeKit.id-coreDispute - coreDispute: Dispute! - localRounds: [DisputeKitRound!]! @derivedFrom(field: "localDispute") - currentLocalRoundIndex: BigInt! - timestamp: BigInt! - - numberOfChoices: BigInt! - extraData: Bytes! -} - -type Answer @entity { - id: ID! # classicRound.id-answerId - answerId: BigInt! - count: BigInt! - paidFee: BigInt! - funded: Boolean! - localRound: ClassicRound! -} - -type ClassicRound implements DisputeKitRound @entity { - id: ID! # disputeKit.id-coreDispute-dispute.rounds.length - localDispute: DisputeKitDispute! - votes: [Vote!]! @derivedFrom(field: "localRound") - answers: [Answer!]! @derivedFrom(field: "localRound") - - winningChoice: BigInt! - tied: Boolean! - totalVoted: BigInt! - totalCommited: BigInt! - contributions: [ClassicContribution!]! @derivedFrom(field: "localRound") - feeRewards: BigInt! - totalFeeDispersed: BigInt! - appealFeesDispersed: Boolean! - fundedChoices: [BigInt!]! - justifications: [ClassicJustification!] @derivedFrom(field: "localRound") -} - -type ClassicVote implements Vote @entity { - id: ID! # disputeKit.id-coreDispute-currentRound-voteID - coreDispute: Dispute! - localRound: DisputeKitRound! - juror: User! - draw: Draw - - commit: Bytes - commited: Boolean! - choice: BigInt - voted: Boolean! - justification: ClassicJustification -} - -type ClassicJustification @entity { - id: ID! # disputeKit.id-coreDispute-currentRound-voteIDs - coreDispute: Dispute! - localRound: ClassicRound! - juror: User! - choice: BigInt! - votes: [ClassicVote!]! @derivedFrom(field: "justification") - reference: String! - transactionHash: String! - timestamp: BigInt! -} - -type ClassicEvidenceGroup implements EvidenceGroup @entity { - id: ID! - evidences: [Evidence!]! @derivedFrom(field: "evidenceGroup") - nextEvidenceIndex: BigInt! -} - -type ClassicEvidence implements Evidence @entity(immutable: true) { - id: ID! # classicEvidenceGroup.id-nextEvidenceIndex - evidence: String! - evidenceGroup: EvidenceGroup! - evidenceIndex: String! - sender: User! - senderAddress: String! - timestamp: BigInt! - transactionHash: Bytes! - name: String - description: String - fileURI: String - fileTypeExtension: String -} - -type ClassicContribution implements Contribution @entity { - id: ID! # disputeKit.id-dispute.id-classicround.id-contributor-choice - contributor: User! - coreDispute: Dispute! - - localRound: ClassicRound! - amount: BigInt! - rewardAmount: BigInt - choice: BigInt! - rewardWithdrawn: Boolean! -} - -type _Schema_ - @fulltext( - name: "evidenceSearch" - language: en - algorithm: rank - include: [{ entity: "ClassicEvidence", fields: [{ name: "name" }, { name: "description" },{ name: "senderAddress"},{ name: "evidenceIndex"}] }] - ) \ No newline at end of file diff --git a/subgraph/core/src/DisputeKitClassic.ts b/subgraph/core/src/DisputeKitClassic.ts deleted file mode 100644 index 2b6e8b2c5..000000000 --- a/subgraph/core/src/DisputeKitClassic.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { BigInt } from "@graphprotocol/graph-ts"; -import { - DisputeKitClassic, - DisputeCreation, - VoteCast, - Contribution as ContributionEvent, - ChoiceFunded, - Withdrawal, - CommitCast, -} from "../generated/DisputeKitClassic/DisputeKitClassic"; -import { KlerosCore } from "../generated/KlerosCore/KlerosCore"; -import { ClassicDispute, ClassicJustification, ClassicRound, ClassicVote, Dispute, Round } from "../generated/schema"; -import { ensureClassicContributionFromEvent } from "./entities/ClassicContribution"; -import { createClassicDisputeFromEvent } from "./entities/ClassicDispute"; -import { - createClassicRound, - ensureAnswer, - updateChoiceFundingFromContributionEvent, - updateCountsAndGetCurrentRuling, -} from "./entities/ClassicRound"; -import { ensureClassicVote } from "./entities/ClassicVote"; -import { ONE, extractDisputeKitIDFromExtraData } from "./utils"; - -export function handleDisputeCreation(event: DisputeCreation): void { - const disputeID = event.params._coreDisputeID.toString(); - const disputeKitID = extractDisputeKitIDFromExtraData(event.params._extraData); - - const disputeKitClassic = DisputeKitClassic.bind(event.address); - const klerosCore = KlerosCore.bind(disputeKitClassic.core()); - const totalRounds = klerosCore.getNumberOfRounds(event.params._coreDisputeID); - const newRoundIndex = totalRounds.minus(ONE); - - createClassicDisputeFromEvent(event, disputeKitID, newRoundIndex); - createClassicRound(disputeID, event.params._numberOfChoices, newRoundIndex, disputeKitID); -} - -export function handleCommitCast(event: CommitCast): void { - const coreDisputeID = event.params._coreDisputeID.toString(); - const coreDispute = Dispute.load(coreDisputeID); - if (!coreDispute) return; - - const coreCurrentRound = Round.load(coreDispute.currentRound); - if (!coreCurrentRound) return; - - const disputeKitID = coreCurrentRound.disputeKit; - - const classicDisputeID = `${disputeKitID}-${coreDisputeID}`; - - const classicDispute = ClassicDispute.load(classicDisputeID); - if (!classicDispute) return; - - const currentLocalRoundID = classicDispute.id + "-" + classicDispute.currentLocalRoundIndex.toString(); - const voteIDs = event.params._voteIDs; - for (let i = 0; i < voteIDs.length; i++) { - const classicVote = ensureClassicVote( - currentLocalRoundID, - event.params._juror.toHexString(), - voteIDs[i], - coreDispute - ); - classicVote.commited = true; - classicVote.commit = event.params._commit; - classicVote.save(); - } -} - -export function handleVoteCast(event: VoteCast): void { - const juror = event.params._juror.toHexString(); - const coreDisputeID = event.params._coreDisputeID.toString(); - const coreDispute = Dispute.load(coreDisputeID); - if (!coreDispute) return; - - const coreCurrentRound = Round.load(coreDispute.currentRound); - if (!coreCurrentRound) return; - - const disputeKitID = coreCurrentRound.disputeKit; - - const classicDisputeID = `${disputeKitID}-${coreDisputeID}`; - - const classicDispute = ClassicDispute.load(classicDisputeID); - if (!classicDispute) return; - - const choice = event.params._choice; - const currentLocalRoundID = classicDispute.id + "-" + classicDispute.currentLocalRoundIndex.toString(); - const voteIDs = event.params._voteIDs; - const justification = new ClassicJustification(`${currentLocalRoundID}-${voteIDs.toString()}`); - justification.juror = juror; - justification.coreDispute = coreDisputeID; - justification.localRound = currentLocalRoundID; - justification.choice = choice; - justification.reference = event.params._justification; - justification.transactionHash = event.transaction.hash.toHexString(); - justification.timestamp = event.block.timestamp; - justification.save(); - - const currentRulingInfo = updateCountsAndGetCurrentRuling( - currentLocalRoundID, - choice, - BigInt.fromI32(voteIDs.length) - ); - coreDispute.currentRuling = currentRulingInfo.ruling; - coreDispute.tied = currentRulingInfo.tied; - coreDispute.save(); - - let classicVote: ClassicVote; - for (let i = 0; i < voteIDs.length; i++) { - classicVote = ensureClassicVote(currentLocalRoundID, juror, voteIDs[i], coreDispute); - classicVote.voted = true; - classicVote.choice = choice; - classicVote.justification = justification.id; - classicVote.save(); - } -} - -export function handleContributionEvent(event: ContributionEvent): void { - ensureClassicContributionFromEvent(event); - updateChoiceFundingFromContributionEvent(event); -} - -export function handleChoiceFunded(event: ChoiceFunded): void { - const coreDisputeID = event.params._coreDisputeID.toString(); - const coreRoundIndex = event.params._coreRoundID.toString(); - const choice = event.params._choice; - - const coreDispute = Dispute.load(coreDisputeID); - if (!coreDispute) return; - - const roundId = `${coreDisputeID}-${coreRoundIndex}`; - const coreRound = Round.load(roundId); - if (!coreRound) return; - const disputeKitID = coreRound.disputeKit; - - const roundID = `${disputeKitID}-${coreDisputeID}-${coreRoundIndex}`; - - const localRound = ClassicRound.load(roundID); - if (!localRound) return; - - const answer = ensureAnswer(roundID, choice); - - const currentFeeRewards = localRound.feeRewards; - const deltaFeeRewards = answer.paidFee; - localRound.feeRewards = currentFeeRewards.plus(deltaFeeRewards); - localRound.fundedChoices = localRound.fundedChoices.concat([choice]); - - answer.funded = true; - answer.save(); - - if (localRound.fundedChoices.length > 1) { - const disputeKitClassic = DisputeKitClassic.bind(event.address); - const klerosCore = KlerosCore.bind(disputeKitClassic.core()); - - // cannot use core.appealCost as that will give the cost for the newly created round - const numberOfRounds = klerosCore.getNumberOfRounds(BigInt.fromString(coreDisputeID)); - const roundInfo = klerosCore.getRoundInfo(BigInt.fromString(coreDisputeID), numberOfRounds.minus(ONE)); - const appealCost = roundInfo.totalFeesForJurors; - - localRound.feeRewards = localRound.feeRewards.minus(appealCost); - - const newDisputeKitID = roundInfo.disputeKitID; - - const localDispute = ClassicDispute.load(`${disputeKitID}-${coreDisputeID}`); - if (!localDispute) return; - - if (BigInt.fromString(disputeKitID).equals(newDisputeKitID)) { - const newRoundIndex = localDispute.currentLocalRoundIndex.plus(ONE); - const numberOfChoices = localDispute.numberOfChoices; - localDispute.currentLocalRoundIndex = newRoundIndex; - localDispute.save(); - createClassicRound(coreDisputeID, numberOfChoices, newRoundIndex, disputeKitID); - } - } - - localRound.save(); -} - -export function handleWithdrawal(event: Withdrawal): void { - const contribution = ensureClassicContributionFromEvent(event); - if (!contribution) return; - contribution.rewardWithdrawn = true; - contribution.rewardAmount = event.params._amount; - - // check if all appeal fees have been withdrawn - const coreDisputeID = event.params._coreDisputeID.toString(); - const coreRoundIndex = event.params._coreRoundID.toString(); - - const coreDispute = Dispute.load(coreDisputeID); - if (!coreDispute) return; - - const roundId = `${coreDisputeID}-${coreRoundIndex}`; - const coreRound = Round.load(roundId); - if (!coreRound) return; - const disputeKitID = coreRound.disputeKit; - - const roundID = `${disputeKitID}-${coreDisputeID}-${coreRoundIndex}`; - - const localRound = ClassicRound.load(roundID); - if (!localRound) return; - - localRound.totalFeeDispersed = localRound.totalFeeDispersed.plus(event.params._amount); - - if (localRound.totalFeeDispersed.equals(localRound.feeRewards)) { - localRound.appealFeesDispersed = true; - } - - contribution.save(); - localRound.save(); -} diff --git a/subgraph/core/src/EvidenceModule.ts b/subgraph/core/src/EvidenceModule.ts deleted file mode 100644 index 03a15c3b4..000000000 --- a/subgraph/core/src/EvidenceModule.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { json, JSONValueKind, log } from "@graphprotocol/graph-ts"; -import { Evidence as EvidenceEvent } from "../generated/EvidenceModule/EvidenceModule"; -import { ClassicEvidence } from "../generated/schema"; -import { ensureClassicEvidenceGroup } from "./entities/ClassicEvidenceGroup"; -import { ensureUser } from "./entities/User"; -import { ONE } from "./utils"; -import { JSONValueToMaybeString } from "../../utils"; - -export function handleEvidenceEvent(event: EvidenceEvent): void { - const evidenceGroupID = event.params._externalDisputeID.toString(); - const evidenceGroup = ensureClassicEvidenceGroup(evidenceGroupID); - const evidenceIndex = evidenceGroup.nextEvidenceIndex; - evidenceGroup.nextEvidenceIndex = evidenceGroup.nextEvidenceIndex.plus(ONE); - evidenceGroup.save(); - const evidenceId = `${evidenceGroupID}-${evidenceIndex.toString()}`; - const evidence = new ClassicEvidence(evidenceId); - evidence.evidenceIndex = evidenceIndex.plus(ONE).toString(); - const userId = event.params._party.toHexString(); - evidence.timestamp = event.block.timestamp; - evidence.transactionHash = event.transaction.hash; - evidence.evidence = event.params._evidence; - evidence.evidenceGroup = evidenceGroupID.toString(); - evidence.sender = userId; - evidence.senderAddress = userId; - ensureUser(userId); - - let jsonObjValueAndSuccess = json.try_fromString(event.params._evidence); - if (!jsonObjValueAndSuccess.isOk || jsonObjValueAndSuccess.isError) { - log.error(`Error getting json object for evidenceId {}`, [evidenceId]); - evidence.save(); - return; - } - - if (jsonObjValueAndSuccess.value.isNull() || jsonObjValueAndSuccess.value.kind !== JSONValueKind.OBJECT) { - log.error(`Encountered invalid parsed value for evidenceId {}`, [evidenceId]); - evidence.save(); - return; - } - - let jsonObj = jsonObjValueAndSuccess.value.toObject(); - if (!jsonObj) { - log.error(`Error converting json object for evidenceId {}`, [evidenceId]); - evidence.save(); - return; - } - - let name = jsonObj.get("name"); - let description = jsonObj.get("description"); - let fileURI = jsonObj.get("fileURI"); - let fileTypeExtension = jsonObj.get("fileTypeExtension"); - - evidence.name = JSONValueToMaybeString(name); - evidence.description = JSONValueToMaybeString(description); - - if (fileURI) { - evidence.fileURI = JSONValueToMaybeString(fileURI); - } - - if (fileTypeExtension) { - evidence.fileTypeExtension = JSONValueToMaybeString(fileTypeExtension); - } - - evidence.save(); -} diff --git a/subgraph/core/src/HomeGateway.ts b/subgraph/core/src/HomeGateway.ts deleted file mode 100644 index 3623dd8d4..000000000 --- a/subgraph/core/src/HomeGateway.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { HomeGateway, Dispute as DisputeEvent } from "../generated/HomeGateway/HomeGateway"; -import { GatewayDispute } from "../generated/schema"; - -export function handleDisputeEvent(event: DisputeEvent): void { - const contract = HomeGateway.bind(event.address); - const disputeID = event.params._disputeID; - const dispute = new GatewayDispute(disputeID.toString()); - dispute.homeDispute = disputeID.toString(); - dispute.arbitrator = contract.arbitrator(); - const disputeHash = contract.disputeIDtoHash(disputeID); - dispute.disputeHash = disputeHash; - const relayedData = contract.disputeHashtoRelayedData(disputeHash); - dispute.arbitrationCost = relayedData.value0; - dispute.relayer = relayedData.value1; - dispute.save(); -} diff --git a/subgraph/core/src/KlerosCore.ts b/subgraph/core/src/KlerosCore.ts deleted file mode 100644 index b3ae71915..000000000 --- a/subgraph/core/src/KlerosCore.ts +++ /dev/null @@ -1,311 +0,0 @@ -import { - KlerosCore, - AppealDecision, - DisputeCreation, - DisputeKitCreated, - DisputeKitEnabled, - CourtCreated, - CourtModified, - Draw as DrawEvent, - NewPeriod, - TokenAndETHShift as TokenAndETHShiftEvent, - CourtJump, - Ruling, - AcceptedFeeToken, -} from "../generated/KlerosCore/KlerosCore"; -import { ZERO, ONE } from "./utils"; -import { createCourtFromEvent } from "./entities/Court"; -import { createDisputeKitFromEvent, filterSupportedDisputeKits } from "./entities/DisputeKit"; -import { createDisputeFromEvent } from "./entities/Dispute"; -import { createRoundFromRoundInfo, updateRoundTimeline } from "./entities/Round"; -import { - updateCases, - updateCasesAppealing, - updateCasesRuled, - updateCasesVoting, - updateCourtCumulativeMetric, - updateTotalLeaderboardJurors, -} from "./datapoint"; -import { addUserActiveDispute, computeCoherenceScore, ensureUser } from "./entities/User"; -import { updateJurorStake } from "./entities/JurorTokensPerCourt"; -import { createDrawFromEvent } from "./entities/Draw"; -import { updateTokenAndEthShiftFromEvent } from "./entities/TokenAndEthShift"; -import { updateArbitrableCases } from "./entities/Arbitrable"; -import { ClassicVote, Court, Dispute, Draw, Round, User } from "../generated/schema"; -import { BigInt } from "@graphprotocol/graph-ts"; -import { updatePenalty } from "./entities/Penalty"; -import { ensureFeeToken } from "./entities/FeeToken"; -import { getAndIncrementPeriodCounter } from "./entities/PeriodIndexCounter"; -import { SortitionModule } from "../generated/SortitionModule/SortitionModule"; - -function getPeriodName(index: i32): string { - const periodArray = ["evidence", "commit", "vote", "appeal", "execution"]; - return periodArray.at(index) || "None"; -} - -export function handleCourtCreated(event: CourtCreated): void { - createCourtFromEvent(event); -} - -export function handleCourtModified(event: CourtModified): void { - const court = Court.load(event.params._courtID.toString()); - if (!court) return; - court.hiddenVotes = event.params._hiddenVotes; - court.minStake = event.params._minStake; - court.alpha = event.params._alpha; - court.feeForJuror = event.params._feeForJuror; - court.jurorsForCourtJump = event.params._jurorsForCourtJump; - court.timesPerPeriod = event.params._timesPerPeriod; - court.save(); -} - -export function handleDisputeKitCreated(event: DisputeKitCreated): void { - createDisputeKitFromEvent(event); -} - -export function handleDisputeKitEnabled(event: DisputeKitEnabled): void { - const court = Court.load(event.params._courtID.toString()); - if (!court) return; - const isEnable = event.params._enable; - const disputeKitID = event.params._disputeKitID.toString(); - court.supportedDisputeKits = isEnable - ? court.supportedDisputeKits.concat([disputeKitID]) - : filterSupportedDisputeKits(court.supportedDisputeKits, disputeKitID); - court.save(); -} - -export function handleDisputeCreation(event: DisputeCreation): void { - const contract = KlerosCore.bind(event.address); - const disputeID = event.params._disputeID; - const disputeStorage = contract.disputes(disputeID); - const courtID = disputeStorage.value0.toString(); - const court = Court.load(courtID); - if (!court) return; - court.numberDisputes = court.numberDisputes.plus(ONE); - updateCourtCumulativeMetric(courtID, ONE, event.block.timestamp, "numberDisputes"); - - const roundInfo = contract.getRoundInfo(disputeID, ZERO); - court.numberVotes = court.numberVotes.plus(roundInfo.nbVotes); - updateCourtCumulativeMetric(courtID, roundInfo.nbVotes, event.block.timestamp, "numberVotes"); - - court.save(); - createDisputeFromEvent(event); - createRoundFromRoundInfo(KlerosCore.bind(event.address), disputeID, ZERO, roundInfo); - const arbitrable = event.params._arbitrable.toHexString(); - updateArbitrableCases(arbitrable, ONE); - updateCases(ONE, event.block.timestamp); -} - -export function handleNewPeriod(event: NewPeriod): void { - const disputeID = event.params._disputeID; - const dispute = Dispute.load(disputeID.toString()); - if (!dispute) return; - const court = Court.load(dispute.court); - if (!court) return; - - if (dispute.period.includes("vote")) { - court.numberVotingDisputes = court.numberVotingDisputes.minus(ONE); - updateCasesVoting(BigInt.fromI32(-1), event.block.timestamp); - } else if (dispute.period.includes("appeal")) { - let juror: User; - for (let i = 0; i < dispute.jurors.entries.length; i++) { - juror = ensureUser(dispute.jurors.entries[i].value.toString()); - juror.totalAppealingDisputes = juror.totalAppealingDisputes.minus(ONE); - juror.save(); - } - court.numberAppealingDisputes = court.numberAppealingDisputes.minus(ONE); - updateCasesAppealing(BigInt.fromI32(-1), event.block.timestamp); - } - - const newPeriod = getPeriodName(event.params._period); - if (newPeriod === "vote") { - court.numberVotingDisputes = court.numberVotingDisputes.plus(ONE); - updateCasesVoting(ONE, event.block.timestamp); - } else if (newPeriod === "appeal") { - let juror: User; - for (let i = 0; i < dispute.jurors.entries.length; i++) { - juror = ensureUser(dispute.jurors.entries[i].value.toString()); - juror.totalAppealingDisputes = juror.totalAppealingDisputes.plus(ONE); - juror.save(); - } - court.numberAppealingDisputes = court.numberAppealingDisputes.plus(ONE); - updateCasesAppealing(ONE, event.block.timestamp); - } else if (newPeriod === "execution") { - const contract = KlerosCore.bind(event.address); - const currentRulingInfo = contract.currentRuling(disputeID); - dispute.currentRuling = currentRulingInfo.getRuling(); - dispute.overridden = currentRulingInfo.getOverridden(); - dispute.tied = currentRulingInfo.getTied(); - - const rounds = dispute.rounds.load(); - for (let i = 0; i < rounds.length; i++) { - const round = Round.load(rounds[i].id); - if (!round) continue; - - const draws = round.drawnJurors.load(); - // Iterate over all draws in the round - for (let j = 0; j < draws.length; j++) { - const draw = Draw.load(draws[j].id); - if (!draw) continue; - - const juror = ensureUser(draw.juror); - juror.totalResolvedVotes = juror.totalResolvedVotes.plus(ONE); - - // Increment totalLeaderboardJurors in the Counter entity if this is the first resolved vote for the juror - if (juror.totalResolvedVotes.equals(ONE)) { - updateTotalLeaderboardJurors(ONE, event.block.timestamp); - } - - // Since this is a ClassicVote entity, this will only work for the ClassicDisputeKit and ShutterDisputeKit. - const vote = ClassicVote.load(`${round.disputeKit}-${draw.id}`); - - if (!vote) { - // Recalculate coherenceScore - juror.coherenceScore = computeCoherenceScore(juror.totalCoherentVotes, juror.totalResolvedVotes); - juror.save(); - continue; - } - - if (vote.choice === null) { - juror.save(); - continue; - } - - // Check if the vote choice matches the final ruling - if (vote.choice!.equals(dispute.currentRuling)) { - juror.totalCoherentVotes = juror.totalCoherentVotes.plus(ONE); - } - - // Recalculate coherenceScore - juror.coherenceScore = computeCoherenceScore(juror.totalCoherentVotes, juror.totalResolvedVotes); - - juror.save(); - } - } - } - - dispute.period = newPeriod; - dispute.lastPeriodChange = event.block.timestamp; - dispute.lastPeriodChangeBlockNumber = event.block.number; - dispute.periodNotificationIndex = getAndIncrementPeriodCounter(newPeriod); - if (newPeriod !== "execution") { - dispute.periodDeadline = event.block.timestamp.plus(court.timesPerPeriod[event.params._period]); - } else { - dispute.periodDeadline = BigInt.fromU64(U64.MAX_VALUE); - } - updateRoundTimeline(disputeID.toString(), newPeriod, event.block.timestamp); - dispute.save(); - court.save(); -} - -export function handleRuling(event: Ruling): void { - updateCasesRuled(ONE, event.block.timestamp); - const disputeID = event.params._disputeID; - const dispute = Dispute.load(disputeID.toString()); - if (!dispute) return; - dispute.ruled = true; - dispute.rulingTransactionHash = event.transaction.hash.toHexString(); - dispute.rulingTimestamp = event.block.timestamp; - dispute.save(); - const court = Court.load(dispute.court); - if (!court) return; - court.numberClosedDisputes = court.numberClosedDisputes.plus(ONE); - court.save(); -} - -export function handleAppealDecision(event: AppealDecision): void { - const contract = KlerosCore.bind(event.address); - const disputeID = event.params._disputeID; - const dispute = Dispute.load(disputeID.toString()); - if (!dispute) return; - - // Load the current (previous) round - const previousRoundID = dispute.currentRound; - const previousRound = Round.load(previousRoundID); - if (previousRound) { - previousRound.isCurrentRound = false; - previousRound.save(); - } - - const newRoundIndex = dispute.currentRoundIndex.plus(ONE); - const newRoundID = `${disputeID}-${newRoundIndex.toString()}`; - dispute.currentRoundIndex = newRoundIndex; - dispute.currentRound = newRoundID; - dispute.save(); - const roundInfo = contract.getRoundInfo(disputeID, newRoundIndex); - - const disputeStorage = contract.disputes(disputeID); - const courtID = disputeStorage.value0.toString(); - const court = Court.load(courtID); - if (!court) return; - - court.numberVotes = court.numberVotes.plus(roundInfo.nbVotes); - updateCourtCumulativeMetric(courtID, roundInfo.nbVotes, event.block.timestamp, "numberVotes"); - court.save(); - - createRoundFromRoundInfo(KlerosCore.bind(event.address), disputeID, newRoundIndex, roundInfo); -} - -export function handleCourtJump(event: CourtJump): void { - const dispute = Dispute.load(event.params._disputeID.toString()); - if (!dispute) return; - dispute.court = event.params._toCourtID.toString(); - dispute.save(); -} - -export function handleDraw(event: DrawEvent): void { - createDrawFromEvent(event); - const disputeID = event.params._disputeID.toString(); - const dispute = Dispute.load(disputeID); - if (!dispute) return; - const klerosCore = KlerosCore.bind(event.address); - const sortitionModule = SortitionModule.bind(klerosCore.sortitionModule()); - - const jurorAddress = event.params._address.toHexString(); - updateJurorStake(jurorAddress, dispute.court, sortitionModule, event.block.timestamp); - addUserActiveDispute(jurorAddress, disputeID); - - const roundIndex = event.params._roundID; - const roundID = `${disputeID}-${roundIndex.toString()}`; - - const currentRound = Round.load(roundID); - if (!currentRound) return; - - if (currentRound.nbVotes.toI32() === currentRound.drawnJurors.load().length) { - currentRound.jurorsDrawn = true; - currentRound.save(); - } -} - -export function handleTokenAndETHShift(event: TokenAndETHShiftEvent): void { - updatePenalty(event); - updateTokenAndEthShiftFromEvent(event); - const jurorAddress = event.params._account.toHexString(); - const disputeID = event.params._disputeID.toString(); - const dispute = Dispute.load(disputeID); - if (!dispute) return; - const court = Court.load(dispute.court); - if (!court) return; - const klerosCore = KlerosCore.bind(event.address); - const sortitionModule = SortitionModule.bind(klerosCore.sortitionModule()); - updateJurorStake(jurorAddress, court.id, sortitionModule, event.block.timestamp); - - const roundIndex = event.params._roundID; - const roundID = `${disputeID}-${roundIndex.toString()}`; - - const round = Round.load(roundID); - if (!round) return; - - const roundInfo = klerosCore.getRoundInfo(event.params._disputeID, roundIndex); - const repartitions = roundInfo.repartitions; - const nbVotes = roundInfo.nbVotes; - - if (repartitions >= nbVotes) { - round.jurorRewardsDispersed = true; - round.save(); - } -} - -export function handleAcceptedFeeToken(event: AcceptedFeeToken): void { - ensureFeeToken(event.params._token, event.address); -} diff --git a/subgraph/core/src/PolicyRegistry.ts b/subgraph/core/src/PolicyRegistry.ts deleted file mode 100644 index 6820698e3..000000000 --- a/subgraph/core/src/PolicyRegistry.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { PolicyUpdate } from "../generated/PolicyRegistry/PolicyRegistry"; -import { Court } from "../generated/schema"; - -export function handlePolicyUpdate(event: PolicyUpdate): void { - const courtID = event.params._courtID.toString(); - const court = Court.load(courtID); - if (court) { - court.policy = event.params._policy; - court.name = event.params._courtName; - court.save(); - } -} diff --git a/subgraph/core/src/SortitionModule.ts b/subgraph/core/src/SortitionModule.ts deleted file mode 100644 index 672a994ba..000000000 --- a/subgraph/core/src/SortitionModule.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { SortitionModule, StakeDelayed, StakeLocked, StakeSet } from "../generated/SortitionModule/SortitionModule"; - -import { updateJurorDelayedStake, updateJurorStake } from "./entities/JurorTokensPerCourt"; -import { ensureUser } from "./entities/User"; -import { ZERO } from "./utils"; - -export function handleStakeDelayed(event: StakeDelayed): void { - updateJurorDelayedStake(event.params._address.toHexString(), event.params._courtID.toString(), event.params._amount); -} - -export function handleStakeSet(event: StakeSet): void { - const jurorAddress = event.params._address.toHexString(); - ensureUser(jurorAddress); - const courtID = event.params._courtID.toString(); - - updateJurorStake(jurorAddress, courtID.toString(), SortitionModule.bind(event.address), event.block.timestamp); - //stake is updated instantly so no delayed amount, set delay amount to zero - updateJurorDelayedStake(jurorAddress, courtID, ZERO); -} - -export function handleStakeLocked(event: StakeLocked): void {} diff --git a/subgraph/core/src/datapoint.ts b/subgraph/core/src/datapoint.ts deleted file mode 100644 index 6eeb07312..000000000 --- a/subgraph/core/src/datapoint.ts +++ /dev/null @@ -1,168 +0,0 @@ -import { BigInt, Entity, Value, store } from "@graphprotocol/graph-ts"; -import { Counter, CourtCounter } from "../generated/schema"; -import { ZERO } from "./utils"; - -export function getDelta(previousValue: BigInt, newValue: BigInt): BigInt { - return newValue.minus(previousValue); -} - -const VARIABLES = [ - "stakedPNK", - "redistributedPNK", - "paidETH", - "activeJurors", - "cases", - "casesVoting", - "casesRuled", - "casesAppealing", - "totalLeaderboardJurors", -]; - -function updateDataPoint(delta: BigInt, timestamp: BigInt, variable: string): void { - checkFirstDayActivity(); - const newCounter = new Entity(); - const counter = store.get("Counter", "0"); - for (let i = 0; i < VARIABLES.length; i++) { - const currentVar = VARIABLES[i]; - newCounter.set(currentVar, getNewValue(currentVar, variable, delta, counter)); - } - const dayID = timestamp.toI32() / 86400; - const dayStartTimestamp = dayID * 86400; - store.set("Counter", dayStartTimestamp.toString(), newCounter); - store.set("Counter", "0", newCounter); -} - -function checkFirstDayActivity(): void { - let counter = Counter.load("1691452800"); - if (!counter) { - counter = new Counter("1691452800"); - counter.stakedPNK = ZERO; - counter.redistributedPNK = ZERO; - counter.paidETH = ZERO; - counter.activeJurors = ZERO; - counter.cases = ZERO; - counter.casesVoting = ZERO; - counter.casesRuled = ZERO; - counter.casesAppealing = ZERO; - counter.totalLeaderboardJurors = ZERO; - counter.save(); - } -} - -function getNewValue(currentVar: string, targetVar: string, delta: BigInt, counter: Entity | null): Value { - if (currentVar === targetVar) { - return !counter ? Value.fromBigInt(delta) : Value.fromBigInt(counter.get(currentVar)!.toBigInt().plus(delta)); - } else { - return !counter ? Value.fromBigInt(ZERO) : counter.get(currentVar)!; - } -} - -export function updateStakedPNK(delta: BigInt, timestamp: BigInt): void { - updateDataPoint(delta, timestamp, "stakedPNK"); -} - -export function updateRedistributedPNK(delta: BigInt, timestamp: BigInt): void { - updateDataPoint(delta, timestamp, "redistributedPNK"); -} - -export function updatePaidETH(delta: BigInt, timestamp: BigInt): void { - updateDataPoint(delta, timestamp, "paidETH"); -} - -export function updateActiveJurors(delta: BigInt, timestamp: BigInt): void { - updateDataPoint(delta, timestamp, "activeJurors"); -} - -export function updateCases(delta: BigInt, timestamp: BigInt): void { - updateDataPoint(delta, timestamp, "cases"); -} - -export function updateCasesVoting(delta: BigInt, timestamp: BigInt): void { - updateDataPoint(delta, timestamp, "casesVoting"); -} - -export function updateCasesRuled(delta: BigInt, timestamp: BigInt): void { - updateDataPoint(delta, timestamp, "casesRuled"); -} - -export function updateCasesAppealing(delta: BigInt, timestamp: BigInt): void { - updateDataPoint(delta, timestamp, "casesAppealing"); -} - -export function updateTotalLeaderboardJurors(delta: BigInt, timestamp: BigInt): void { - updateDataPoint(delta, timestamp, "totalLeaderboardJurors"); -} - -export function updateCourtCumulativeMetric(courtId: string, delta: BigInt, timestamp: BigInt, metric: string): void { - // Load or create the current CourtCounter (ID: courtId-0) - let currentCounter = CourtCounter.load(courtId + "-0"); - if (!currentCounter) { - currentCounter = new CourtCounter(courtId + "-0"); - currentCounter.court = courtId; - currentCounter.numberDisputes = ZERO; - currentCounter.numberVotes = ZERO; - currentCounter.effectiveStake = ZERO; - currentCounter.timestamp = ZERO; - } - if (metric === "numberDisputes") { - currentCounter.numberDisputes = currentCounter.numberDisputes.plus(delta); - } else if (metric === "numberVotes") { - currentCounter.numberVotes = currentCounter.numberVotes.plus(delta); - } - currentCounter.save(); - - // Update daily snapshot - let dayID = timestamp.toI32() / 86400; // Seconds to days - let dayStartTimestamp = dayID * 86400; - let dailyCounter = CourtCounter.load(courtId + "-" + dayStartTimestamp.toString()); - if (!dailyCounter) { - dailyCounter = new CourtCounter(courtId + "-" + dayStartTimestamp.toString()); - dailyCounter.court = courtId; - dailyCounter.numberDisputes = currentCounter.numberDisputes.minus(delta); // State before this update - dailyCounter.numberVotes = currentCounter.numberVotes.minus(delta); - dailyCounter.effectiveStake = currentCounter.effectiveStake; - dailyCounter.timestamp = BigInt.fromI32(dayStartTimestamp); - } - if (metric === "numberDisputes") { - dailyCounter.numberDisputes = dailyCounter.numberDisputes.plus(delta); - } else if (metric === "numberVotes") { - dailyCounter.numberVotes = dailyCounter.numberVotes.plus(delta); - } - dailyCounter.save(); -} - -export function updateCourtStateVariable(courtId: string, newValue: BigInt, timestamp: BigInt, variable: string): void { - // Load or create the current CourtCounter (ID: courtId-0) - let currentCounter = CourtCounter.load(courtId + "-0"); - if (!currentCounter) { - currentCounter = new CourtCounter(courtId + "-0"); - currentCounter.court = courtId; - currentCounter.numberDisputes = ZERO; - currentCounter.numberVotes = ZERO; - currentCounter.effectiveStake = newValue; - currentCounter.timestamp = ZERO; - } else { - if (variable === "effectiveStake") { - currentCounter.effectiveStake = newValue; - } - currentCounter.save(); - } - - // Update daily snapshot - let dayID = timestamp.toI32() / 86400; - let dayStartTimestamp = dayID * 86400; - let dailyCounter = CourtCounter.load(courtId + "-" + dayStartTimestamp.toString()); - if (!dailyCounter) { - dailyCounter = new CourtCounter(courtId + "-" + dayStartTimestamp.toString()); - dailyCounter.court = courtId; - dailyCounter.numberDisputes = currentCounter.numberDisputes; - dailyCounter.numberVotes = currentCounter.numberVotes; - dailyCounter.effectiveStake = newValue; - dailyCounter.timestamp = BigInt.fromI32(dayStartTimestamp); - } else { - if (variable === "effectiveStake") { - dailyCounter.effectiveStake = newValue; - } - dailyCounter.save(); - } -} diff --git a/subgraph/core/src/entities/Arbitrable.ts b/subgraph/core/src/entities/Arbitrable.ts deleted file mode 100644 index 15ff1f231..000000000 --- a/subgraph/core/src/entities/Arbitrable.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { BigInt } from "@graphprotocol/graph-ts"; -import { Arbitrable } from "../../generated/schema"; -import { ZERO } from "../utils"; - -export function ensureArbitrable(id: string): Arbitrable { - let arbitrable = Arbitrable.load(id); - - if (arbitrable) return arbitrable; - - arbitrable = new Arbitrable(id); - arbitrable.totalDisputes = ZERO; - - return arbitrable; -} - -export function updateArbitrableCases(id: string, delta: BigInt): void { - const arbitrable = ensureArbitrable(id); - arbitrable.totalDisputes = arbitrable.totalDisputes.plus(delta); - arbitrable.save(); -} diff --git a/subgraph/core/src/entities/ClassicContribution.ts b/subgraph/core/src/entities/ClassicContribution.ts deleted file mode 100644 index 0473d0f39..000000000 --- a/subgraph/core/src/entities/ClassicContribution.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { ClassicContribution, Dispute, DisputeKit, Round } from "../../generated/schema"; -import { Contribution as ContributionEvent, Withdrawal } from "../../generated/DisputeKitClassic/DisputeKitClassic"; -import { ensureUser } from "./User"; - -export function ensureClassicContributionFromEvent<T>(event: T): ClassicContribution | null { - if (!(event instanceof ContributionEvent) && !(event instanceof Withdrawal)) return null; - const coreDisputeID = event.params._coreDisputeID.toString(); - const coreRoundIndex = event.params._coreRoundID.toString(); - - const coreDispute = Dispute.load(coreDisputeID); - if (!coreDispute) return null; - - const roundId = `${coreDisputeID}-${coreRoundIndex}`; - const coreRound = Round.load(roundId); - if (!coreRound) return null; - - const disputeKitID = coreRound.disputeKit; - - const roundID = `${disputeKitID}-${coreDisputeID}-${coreRoundIndex}`; - - ensureUser(event.params._contributor.toHexString()); - const contributor = event.params._contributor.toHexString(); - const choice = event.params._choice; - - const id = `${roundID}-${contributor}-${choice}`; - let classicContribution = ClassicContribution.load(id); - - if (!classicContribution) { - classicContribution = new ClassicContribution(id); - classicContribution.contributor = event.params._contributor.toHexString(); - classicContribution.coreDispute = coreDisputeID; - classicContribution.localRound = roundID; - classicContribution.amount = event.params._amount; - classicContribution.choice = event.params._choice; - classicContribution.rewardWithdrawn = false; - } else { - const currentAmount = classicContribution.amount; - // we dont want to increase amount on withdraw event, the amount in that event is reward/reimburse amount - if (event instanceof ContributionEvent) { - classicContribution.amount = currentAmount.plus(event.params._amount); - } - } - classicContribution.save(); - return classicContribution; -} diff --git a/subgraph/core/src/entities/ClassicDispute.ts b/subgraph/core/src/entities/ClassicDispute.ts deleted file mode 100644 index dfdd24532..000000000 --- a/subgraph/core/src/entities/ClassicDispute.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { BigInt } from "@graphprotocol/graph-ts"; -import { DisputeCreation } from "../../generated/DisputeKitClassic/DisputeKitClassic"; -import { ClassicDispute } from "../../generated/schema"; - -export function createClassicDisputeFromEvent(event: DisputeCreation, disputeKitID: string, roundIndex: BigInt): void { - const coreDisputeID = event.params._coreDisputeID.toString(); - const classicDispute = new ClassicDispute(`${disputeKitID}-${coreDisputeID}`); - classicDispute.coreDispute = coreDisputeID; - classicDispute.currentLocalRoundIndex = roundIndex; - classicDispute.numberOfChoices = event.params._numberOfChoices; - classicDispute.extraData = event.params._extraData; - classicDispute.timestamp = event.block.timestamp; - classicDispute.save(); -} diff --git a/subgraph/core/src/entities/ClassicEvidenceGroup.ts b/subgraph/core/src/entities/ClassicEvidenceGroup.ts deleted file mode 100644 index c9bad9ea1..000000000 --- a/subgraph/core/src/entities/ClassicEvidenceGroup.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ClassicEvidenceGroup } from "../../generated/schema"; -import { ZERO } from "../utils"; - -export function ensureClassicEvidenceGroup(id: string): ClassicEvidenceGroup { - let classicEvidenceGroup = ClassicEvidenceGroup.load(id); - - if (!classicEvidenceGroup) { - classicEvidenceGroup = new ClassicEvidenceGroup(id); - classicEvidenceGroup.nextEvidenceIndex = ZERO; - classicEvidenceGroup.save(); - } - - return classicEvidenceGroup; -} diff --git a/subgraph/core/src/entities/ClassicRound.ts b/subgraph/core/src/entities/ClassicRound.ts deleted file mode 100644 index 57862a347..000000000 --- a/subgraph/core/src/entities/ClassicRound.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { BigInt } from "@graphprotocol/graph-ts"; -import { Contribution } from "../../generated/DisputeKitClassic/DisputeKitClassic"; -import { Answer, ClassicRound, Dispute, Round } from "../../generated/schema"; -import { ZERO } from "../utils"; - -export function createClassicRound( - disputeID: string, - numberOfChoices: BigInt, - roundIndex: BigInt, - disputeKitID: string -): void { - const localDisputeID = `${disputeKitID}-${disputeID}`; - const id = `${localDisputeID}-${roundIndex.toString()}`; - const classicRound = new ClassicRound(id); - classicRound.localDispute = localDisputeID; - classicRound.winningChoice = ZERO; - classicRound.tied = true; - classicRound.totalVoted = ZERO; - classicRound.totalCommited = ZERO; - classicRound.feeRewards = ZERO; - classicRound.appealFeesDispersed = false; - classicRound.totalFeeDispersed = ZERO; - classicRound.fundedChoices = []; - classicRound.save(); -} - -class CurrentRulingInfo { - ruling: BigInt; - tied: boolean; -} - -export function ensureAnswer(localRoundId: string, answerId: BigInt): Answer { - const id = `${localRoundId}-${answerId}`; - let answer = Answer.load(id); - if (answer) return answer; - answer = new Answer(id); - answer.answerId = answerId; - answer.count = ZERO; - answer.paidFee = ZERO; - answer.funded = false; - answer.localRound = localRoundId; - return answer; -} - -export function updateCountsAndGetCurrentRuling(id: string, choice: BigInt, delta: BigInt): CurrentRulingInfo { - const round = ClassicRound.load(id); - if (!round) return { ruling: ZERO, tied: false }; - const answer = ensureAnswer(id, choice); - - answer.count = answer.count.plus(delta); - - const newChoiceCount = answer.count; - - const winningAnswer = ensureAnswer(id, round.winningChoice); - const currentWinningCount = winningAnswer.count; - - if (choice.equals(round.winningChoice)) { - if (round.tied) round.tied = false; - } else { - if (newChoiceCount.equals(currentWinningCount)) { - if (!round.tied) round.tied = true; - } else if (newChoiceCount.gt(currentWinningCount)) { - round.winningChoice = choice; - round.tied = false; - } - } - round.totalVoted = round.totalVoted.plus(delta); - - answer.save(); - round.save(); - return { ruling: round.winningChoice, tied: round.tied }; -} - -export function updateChoiceFundingFromContributionEvent(event: Contribution): void { - const coreDisputeID = event.params._coreDisputeID.toString(); - const coreRoundIndex = event.params._coreRoundID.toString(); - const coreDispute = Dispute.load(coreDisputeID); - if (!coreDispute) return; - - const roundId = `${coreDisputeID}-${coreRoundIndex}`; - const coreRound = Round.load(roundId); - if (!coreRound) return; - const disputeKitID = coreRound.disputeKit; - - const roundID = `${disputeKitID}-${coreDisputeID}-${coreRoundIndex}`; - - const classicRound = ClassicRound.load(roundID); - if (!classicRound) return; - - const choice = event.params._choice; - const amount = event.params._amount; - const answer = ensureAnswer(roundID, choice); - answer.paidFee = answer.paidFee.plus(amount); - - answer.save(); - classicRound.save(); -} diff --git a/subgraph/core/src/entities/ClassicVote.ts b/subgraph/core/src/entities/ClassicVote.ts deleted file mode 100644 index 1cd9a79d3..000000000 --- a/subgraph/core/src/entities/ClassicVote.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { BigInt } from "@graphprotocol/graph-ts"; -import { ClassicVote, Dispute } from "../../generated/schema"; - -export function ensureClassicVote( - localRoundID: string, - juror: string, - voteID: BigInt, - coreDispute: Dispute -): ClassicVote { - const id = `${localRoundID}-${voteID}`; - const classicVote = ClassicVote.load(id); - if (classicVote) return classicVote; - - return createClassicVote(id, juror, voteID, localRoundID, coreDispute); -} - -export function createClassicVote( - id: string, - juror: string, - voteID: BigInt, - localRoundID: string, - coreDispute: Dispute -): ClassicVote { - const roundIndex = coreDispute.currentRoundIndex; - const drawID = `${coreDispute.id}-${roundIndex.toString()}-${voteID.toString()}`; - const classicVote = new ClassicVote(id); - classicVote.coreDispute = coreDispute.id; - classicVote.localRound = localRoundID; - classicVote.juror = juror; - classicVote.draw = drawID; - classicVote.voted = false; - classicVote.commited = false; - - classicVote.save(); - return classicVote; -} diff --git a/subgraph/core/src/entities/Court.ts b/subgraph/core/src/entities/Court.ts deleted file mode 100644 index fee7fd146..000000000 --- a/subgraph/core/src/entities/Court.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { BigInt } from "@graphprotocol/graph-ts"; -import { CourtCreated } from "../../generated/KlerosCore/KlerosCore"; -import { Court } from "../../generated/schema"; -import { ZERO } from "../utils"; - -// This function calculates the "effective" stake, which is the specific stake -// of the current court + the specific stake of all of its children courts -export function updateEffectiveStake(courtID: string, delta: BigInt): void { - let court = Court.load(courtID); - if (!court) return; - - court.effectiveStake = court.effectiveStake.plus(delta); - court.save(); - - if (court.parent) { - updateEffectiveStake(court.parent as string, delta); - } -} - -export function createCourtFromEvent(event: CourtCreated): void { - const court = new Court(event.params._courtID.toString()); - court.hiddenVotes = event.params._hiddenVotes; - court.parent = event.params._parent.toString(); - court.minStake = event.params._minStake; - court.alpha = event.params._alpha; - court.feeForJuror = event.params._feeForJuror; - court.jurorsForCourtJump = event.params._jurorsForCourtJump; - court.timesPerPeriod = event.params._timesPerPeriod; - court.supportedDisputeKits = event.params._supportedDisputeKits.map<string>((value) => value.toString()); - court.numberDisputes = ZERO; - court.numberClosedDisputes = ZERO; - court.numberVotingDisputes = ZERO; - court.numberAppealingDisputes = ZERO; - court.numberVotes = ZERO; - court.numberStakedJurors = ZERO; - court.effectiveNumberStakedJurors = ZERO; - court.stake = ZERO; - court.effectiveStake = ZERO; - court.delayedStake = ZERO; - court.paidETH = ZERO; - court.paidPNK = ZERO; - court.save(); -} - -export function getFeeForJuror(id: string): BigInt { - const court = Court.load(id); - if (!court) return ZERO; - return court.feeForJuror; -} diff --git a/subgraph/core/src/entities/Dispute.ts b/subgraph/core/src/entities/Dispute.ts deleted file mode 100644 index f3bbf221e..000000000 --- a/subgraph/core/src/entities/Dispute.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { BigInt, ByteArray, crypto, dataSource, ethereum } from "@graphprotocol/graph-ts"; -import { KlerosCore, DisputeCreation } from "../../generated/KlerosCore/KlerosCore"; -import { Court, Dispute } from "../../generated/schema"; -import { ZERO } from "../utils"; -import { getAndIncrementPeriodCounter } from "./PeriodIndexCounter"; - -export function createDisputeFromEvent(event: DisputeCreation): void { - const disputeID = event.params._disputeID; - const disputeContractState = KlerosCore.bind(event.address).disputes(disputeID); - const dispute = new Dispute(disputeID.toString()); - const courtID = disputeContractState.value0.toString(); - dispute.court = courtID; - dispute.disputeID = disputeID; - dispute.createdAt = event.block.timestamp; - dispute.arbitrated = event.params._arbitrable.toHexString(); - dispute.period = "evidence"; - dispute.ruled = false; - dispute.currentRuling = ZERO; - dispute.tied = true; - dispute.overridden = false; - dispute.lastPeriodChange = event.block.timestamp; - dispute.lastPeriodChangeBlockNumber = event.block.number; - dispute.periodNotificationIndex = getAndIncrementPeriodCounter(dispute.period); - dispute.transactionHash = event.transaction.hash.toHexString(); - const court = Court.load(courtID); - if (!court) return; - dispute.periodDeadline = event.block.timestamp.plus(court.timesPerPeriod[0]); - dispute.currentRoundIndex = ZERO; - const roundID = `${disputeID.toString()}-${ZERO.toString()}`; - dispute.currentRound = roundID; - dispute.save(); - - updateDisputeRequestData(event); -} - -// source: contracts/src/arbitration/interfaces/IArbitrableV2.sol -const DisputeRequest = "DisputeRequest(address,uint256,uint256,uint256,string)"; -const DisputeRequestSignature = crypto.keccak256(ByteArray.fromUTF8(DisputeRequest)); - -// note : we are using bytes32 in place of string as strings cannot be decoded and it breaks the function. -// It is okay for us, as we are only interested in the uint256 in frontend. -const DisputeRequestTypestring = "(uint256,uint256,bytes32)"; // _externalDisputeId,_templateId,_templateUri - -// source: contracts/src/gateway/interfaces/IHomeGateway.sol -const CrossChainDisputeIncoming = - "CrossChainDisputeIncoming(address,uint256,address,uint256,uint256,uint256,uint256,string)"; -const CrossChainDisputeIncomingSignature = crypto.keccak256(ByteArray.fromUTF8(CrossChainDisputeIncoming)); - -// note : arbitrable is an indexed arg, so it will topic[1] -const CrossChainDisputeIncomingTypestring = "(address,uint256,uint256,uint256,string)"; // arbitrator, _arbitrableChainId, _externalDisputeId, _templateId, _templateUri - -export const updateDisputeRequestData = (event: DisputeCreation): void => { - const dispute = Dispute.load(event.params._disputeID.toString()); - if (!dispute) return; - - const receipt = event.receipt; - if (!receipt) return; - - const logs = receipt.logs; - const coreDisputeId = event.params._disputeID; - - // note that the topic at 0th index is always the event signature - // For DisputeRequestSignature - let disputeRequestEventIndex = -1; - for (let i = 0; i < logs.length; i++) { - let log = logs[i]; - if (log.topics.length > 2 && log.topics[0] == DisputeRequestSignature) { - // 3rd indexed argument in event is _arbitratorDisputeId - let decodedId = ethereum.decode("uint256", log.topics[2]); - if (decodedId != null && coreDisputeId.equals(decodedId.toBigInt())) { - disputeRequestEventIndex = i; - break; - } - } - } - - // For CrossChainDisputeIncomingSignature - let crossChainDisputeEventIndex = -1; - for (let i = 0; i < logs.length; i++) { - let log = logs[i]; - if (log.topics.length > 3 && log.topics[0] == CrossChainDisputeIncomingSignature) { - // 4th indexed argument in event is _arbitratorDisputeId - let decodedId = ethereum.decode("uint256", log.topics[3]); - if (decodedId != null && coreDisputeId.equals(decodedId.toBigInt())) { - crossChainDisputeEventIndex = i; - break; - } - } - } - - if (crossChainDisputeEventIndex !== -1) { - const crossChainDisputeEvent = logs[crossChainDisputeEventIndex]; - - const decoded = ethereum.decode(CrossChainDisputeIncomingTypestring, crossChainDisputeEvent.data); - if (!decoded) return; - dispute.isCrossChain = true; - dispute.arbitrableChainId = decoded.toTuple()[1].toBigInt(); - dispute.externalDisputeId = decoded.toTuple()[2].toBigInt(); - dispute.templateId = decoded.toTuple()[3].toBigInt(); - dispute.save(); - return; - } else if (disputeRequestEventIndex !== -1) { - const disputeRequestEvent = logs[disputeRequestEventIndex]; - - const decoded = ethereum.decode(DisputeRequestTypestring, disputeRequestEvent.data); - if (!decoded) return; - dispute.isCrossChain = false; - dispute.arbitrableChainId = getHomeChainId(dataSource.network()); - dispute.externalDisputeId = decoded.toTuple()[0].toBigInt(); - dispute.templateId = decoded.toTuple()[1].toBigInt(); - dispute.save(); - return; - } -}; - -// workaround, since hashmap don't work in subgraphs. -// https://thegraph.com/docs/en/developing/supported-networks/ -function getHomeChainId(name: string): BigInt { - if (name == "arbitrum-one") return BigInt.fromI32(42161); - else if (name == "arbitrum-sepolia") return BigInt.fromI32(421614); - else return BigInt.fromI32(1); -} diff --git a/subgraph/core/src/entities/DisputeKit.ts b/subgraph/core/src/entities/DisputeKit.ts deleted file mode 100644 index 150aaed0b..000000000 --- a/subgraph/core/src/entities/DisputeKit.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { DisputeKitCreated } from "../../generated/KlerosCore/KlerosCore"; -import { DisputeKit } from "../../generated/schema"; -import { ZERO, ONE } from "../utils"; - -export function createDisputeKitFromEvent(event: DisputeKitCreated): void { - const disputeKit = new DisputeKit(event.params._disputeKitID.toString()); - disputeKit.address = event.params._disputeKitAddress; - disputeKit.needsFreezing = false; - disputeKit.save(); -} - -export function filterSupportedDisputeKits(supportedDisputeKits: string[], disputeKitID: string): string[] { - let result: string[] = []; - for (let i = 0; i < supportedDisputeKits.length; i++) - if (supportedDisputeKits[i] !== disputeKitID) result = result.concat([supportedDisputeKits[i]]); - return result; -} diff --git a/subgraph/core/src/entities/Draw.ts b/subgraph/core/src/entities/Draw.ts deleted file mode 100644 index a62567b32..000000000 --- a/subgraph/core/src/entities/Draw.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Draw as DrawEvent } from "../../generated/KlerosCore/KlerosCore"; -import { Draw, User } from "../../generated/schema"; -import { getAndIncrementPeriodCounter } from "./PeriodIndexCounter"; - -export function createDrawFromEvent(event: DrawEvent): void { - const disputeID = event.params._disputeID.toString(); - const roundIndex = event.params._roundID; - const roundID = `${disputeID}-${roundIndex.toString()}`; - const voteID = event.params._voteID; - const drawID = `${disputeID}-${roundIndex.toString()}-${voteID.toString()}`; - const draw = new Draw(drawID); - draw.blockNumber = event.block.number; - const user = User.load(event.params._address.toHexString()); - if (user && !user.disputes.includes(disputeID)) { - draw.drawNotificationIndex = getAndIncrementPeriodCounter("draw"); - } - draw.dispute = disputeID; - draw.round = roundID; - draw.juror = event.params._address.toHexString(); - draw.voteIDNum = voteID; - draw.save(); -} diff --git a/subgraph/core/src/entities/FeeToken.ts b/subgraph/core/src/entities/FeeToken.ts deleted file mode 100644 index 18cccd867..000000000 --- a/subgraph/core/src/entities/FeeToken.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { BigInt, Address } from "@graphprotocol/graph-ts"; -import { FeeToken } from "../../generated/schema"; -import { KlerosCore } from "../../generated/KlerosCore/KlerosCore"; -import { ZERO } from "../utils"; - -export function ensureFeeToken(tokenAddress: Address, klerosCoreAddress: Address): FeeToken { - const hexTokenAddress = tokenAddress.toHexString(); - let feeToken = FeeToken.load(hexTokenAddress); - if (!feeToken) { - feeToken = new FeeToken(hexTokenAddress); - feeToken.totalPaid = ZERO; - feeToken.totalPaidInETH = ZERO; - } - const contract = KlerosCore.bind(klerosCoreAddress); - const currencyRate = contract.currencyRates(tokenAddress); - feeToken.accepted = currencyRate.value0; - feeToken.rateInEth = currencyRate.value1; - feeToken.rateDecimals = currencyRate.value2; - feeToken.save(); - return feeToken; -} - -export function updateFeeTokenRate(tokenAddress: Address, klerosCoreAddress: Address): void { - const feeToken = ensureFeeToken(tokenAddress, klerosCoreAddress); - const contract = KlerosCore.bind(klerosCoreAddress); - const currencyRate = contract.currencyRates(tokenAddress); - feeToken.accepted = currencyRate.value0; - feeToken.rateInEth = currencyRate.value1; - feeToken.rateDecimals = currencyRate.value2; - feeToken.save(); -} - -export function updateFeeTokenPaid(tokenAddress: Address, klerosCoreAddress: Address, amount: BigInt): void { - const feeToken = ensureFeeToken(tokenAddress, klerosCoreAddress); - const ethAmount = convertTokenAmountToEth(tokenAddress, amount, klerosCoreAddress); - feeToken.totalPaid = feeToken.totalPaid.plus(amount); - feeToken.totalPaidInETH = feeToken.totalPaidInETH.plus(ethAmount); - feeToken.save(); -} - -export function convertEthToTokenAmount(tokenAddress: Address, eth: BigInt, klerosCoreAddress: Address): BigInt { - const feeToken = ensureFeeToken(tokenAddress, klerosCoreAddress); - return eth.times(BigInt.fromI32(10 ** feeToken.rateDecimals)).div(feeToken.rateInEth); -} - -export function convertTokenAmountToEth( - tokenAddress: Address, - tokenAmount: BigInt, - klerosCoreAddress: Address -): BigInt { - const feeToken = ensureFeeToken(tokenAddress, klerosCoreAddress); - return tokenAmount.times(feeToken.rateInEth).div(BigInt.fromI32(10 ** feeToken.rateDecimals)); -} diff --git a/subgraph/core/src/entities/JurorTokensPerCourt.ts b/subgraph/core/src/entities/JurorTokensPerCourt.ts deleted file mode 100644 index 9aa21c03c..000000000 --- a/subgraph/core/src/entities/JurorTokensPerCourt.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { BigInt, Address } from "@graphprotocol/graph-ts"; -import { Court, JurorTokensPerCourt } from "../../generated/schema"; -import { updateActiveJurors, getDelta, updateStakedPNK, updateCourtStateVariable } from "../datapoint"; -import { ensureUser } from "./User"; -import { ONE, ZERO } from "../utils"; -import { SortitionModule } from "../../generated/SortitionModule/SortitionModule"; -import { updateEffectiveStake } from "./Court"; - -export function ensureJurorTokensPerCourt(jurorAddress: string, courtID: string): JurorTokensPerCourt { - const id = `${jurorAddress}-${courtID}`; - const jurorTokens = JurorTokensPerCourt.load(id); - - if (jurorTokens) { - return jurorTokens; - } - - return createJurorTokensPerCourt(jurorAddress, courtID); -} - -export function createJurorTokensPerCourt(jurorAddress: string, courtID: string): JurorTokensPerCourt { - const id = `${jurorAddress}-${courtID}`; - - const jurorTokens = new JurorTokensPerCourt(id); - jurorTokens.juror = jurorAddress; - jurorTokens.court = courtID; - jurorTokens.effectiveStake = ZERO; - jurorTokens.staked = ZERO; - jurorTokens.locked = ZERO; - jurorTokens.delayed = ZERO; - jurorTokens.save(); - - return jurorTokens; -} - -export function updateJurorEffectiveStake(jurorAddress: string, courtID: string, delta: BigInt): void { - let court = Court.load(courtID); - if (!court) return; - - const jurorTokensPerCourt = ensureJurorTokensPerCourt(jurorAddress, court.id); - const previousEffectiveStake = jurorTokensPerCourt.effectiveStake; - const newEffectiveStake = previousEffectiveStake.plus(delta); - - if (previousEffectiveStake.equals(ZERO) && newEffectiveStake.gt(ZERO)) { - court.effectiveNumberStakedJurors = court.effectiveNumberStakedJurors.plus(ONE); - } else if (previousEffectiveStake.gt(ZERO) && newEffectiveStake.equals(ZERO)) { - court.effectiveNumberStakedJurors = court.effectiveNumberStakedJurors.minus(ONE); - } - - jurorTokensPerCourt.effectiveStake = newEffectiveStake; - jurorTokensPerCourt.save(); - court.save(); - - if (court.parent) { - updateJurorEffectiveStake(jurorAddress, court.parent as string, delta); - } -} - -export function updateJurorStake( - jurorAddress: string, - courtID: string, - contract: SortitionModule, - timestamp: BigInt -): void { - const juror = ensureUser(jurorAddress); - const court = Court.load(courtID); - if (!court) return; - const jurorTokens = ensureJurorTokensPerCourt(jurorAddress, courtID); - - // TODO: index the sortition module and handle these events there - const jurorBalance = contract.getJurorBalance(Address.fromString(jurorAddress), BigInt.fromString(courtID)); - const previousStake = jurorTokens.staked; - const previousTotalStake = juror.totalStake; - jurorTokens.staked = jurorBalance.value2; - jurorTokens.locked = jurorBalance.value1; - jurorTokens.save(); - const stakeDelta = getDelta(previousStake, jurorTokens.staked); - const newTotalStake = juror.totalStake.plus(stakeDelta); - juror.totalStake = newTotalStake; - court.stake = court.stake.plus(stakeDelta); - updateStakedPNK(stakeDelta, timestamp); - const activeJurorsDelta = getActivityDelta(previousTotalStake, newTotalStake); - const stakedJurorsDelta = getActivityDelta(previousStake, jurorBalance.value2); - court.numberStakedJurors = court.numberStakedJurors.plus(stakedJurorsDelta); - updateActiveJurors(activeJurorsDelta, timestamp); - juror.save(); - court.save(); - updateEffectiveStake(courtID, stakeDelta); - updateJurorEffectiveStake(jurorAddress, courtID, stakeDelta); - updateCourtStateVariable(courtID, court.effectiveStake, timestamp, "effectiveStake"); -} - -export function updateJurorDelayedStake(jurorAddress: string, courtID: string, amount: BigInt): void { - const juror = ensureUser(jurorAddress); - const court = Court.load(courtID); - if (!court) return; - const jurorTokens = ensureJurorTokensPerCourt(jurorAddress, courtID); - let lastDelayedAmount = jurorTokens.delayed; - - jurorTokens.delayed = amount; - //since we need to track only the latest delay amount now, subtract the previous amount and add the new amount - juror.totalDelayed = juror.totalDelayed.plus(amount).minus(lastDelayedAmount); - court.delayedStake = court.stake.plus(amount).minus(lastDelayedAmount); - jurorTokens.save(); - juror.save(); - court.save(); -} - -function getActivityDelta(previousStake: BigInt, newStake: BigInt): BigInt { - if (previousStake.gt(ZERO)) { - return newStake.gt(ZERO) ? ZERO : BigInt.fromI32(-1); - } else { - return newStake.gt(ZERO) ? ONE : ZERO; - } -} diff --git a/subgraph/core/src/entities/Penalty.ts b/subgraph/core/src/entities/Penalty.ts deleted file mode 100644 index ec6e6c8f8..000000000 --- a/subgraph/core/src/entities/Penalty.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { TokenAndETHShift } from "../../generated/KlerosCore/KlerosCore"; -import { Penalty } from "../../generated/schema"; -import { ONE } from "../utils"; - -export function updatePenalty(event: TokenAndETHShift): void { - const disputeID = event.params._disputeID.toString(); - const roundIndex = event.params._roundID.toString(); - const roundID = `${disputeID}-${roundIndex}`; - const jurorAddress = event.params._account.toHexString(); - const penaltyID = `${roundID}-${jurorAddress}`; - const penalty = Penalty.load(penaltyID); - if (penalty) { - penalty.amount = penalty.amount.plus(event.params._pnkAmount); - const totalCoherency = penalty.degreeOfCoherency.times(penalty.numberDraws); - penalty.numberDraws = penalty.numberDraws.plus(ONE); - penalty.degreeOfCoherency = totalCoherency.plus(penalty.degreeOfCoherency).div(penalty.numberDraws); - penalty.save(); - } else { - createPenalty(event); - } -} - -export function createPenalty(event: TokenAndETHShift): void { - const disputeID = event.params._disputeID.toString(); - const roundIndex = event.params._roundID.toString(); - const roundID = `${disputeID}-${roundIndex}`; - const jurorAddress = event.params._account.toHexString(); - const penaltyID = `${roundID}-${jurorAddress}`; - const penalty = new Penalty(penaltyID); - penalty.dispute = disputeID; - penalty.round = roundID; - penalty.juror = jurorAddress; - penalty.numberDraws = ONE; - penalty.amount = event.params._pnkAmount; - penalty.degreeOfCoherency = event.params._degreeOfCoherency; - penalty.save(); -} diff --git a/subgraph/core/src/entities/PeriodIndexCounter.ts b/subgraph/core/src/entities/PeriodIndexCounter.ts deleted file mode 100644 index c685f8904..000000000 --- a/subgraph/core/src/entities/PeriodIndexCounter.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { PeriodIndexCounter } from "../../generated/schema"; -import { BigInt } from "@graphprotocol/graph-ts"; - -export function getAndIncrementPeriodCounter(id: string): BigInt { - let counter = PeriodIndexCounter.load(id); - if (!counter) { - counter = new PeriodIndexCounter(id); - counter.counter = BigInt.fromI32(0); - } - const counterOld = counter.counter; - counter.counter = counter.counter.plus(BigInt.fromI32(1)); - counter.save(); - return counterOld; -} diff --git a/subgraph/core/src/entities/Round.ts b/subgraph/core/src/entities/Round.ts deleted file mode 100644 index 24de32510..000000000 --- a/subgraph/core/src/entities/Round.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { BigInt } from "@graphprotocol/graph-ts"; -import { KlerosCore, KlerosCore__getRoundInfoResultValue0Struct } from "../../generated/KlerosCore/KlerosCore"; -import { Dispute, Round } from "../../generated/schema"; -import { ONE } from "../utils"; - -export function createRoundFromRoundInfo( - contract: KlerosCore, - disputeID: BigInt, - roundIndex: BigInt, - roundInfo: KlerosCore__getRoundInfoResultValue0Struct -): void { - const roundID = `${disputeID.toString()}-${roundIndex.toString()}`; - const round = new Round(roundID); - round.isCurrentRound = true; - const feeToken = roundInfo.feeToken.toHexString(); - round.feeToken = feeToken === "0x0000000000000000000000000000000000000000" ? null : feeToken; - round.disputeKit = roundInfo.disputeKitID.toString(); - round.tokensAtStakePerJuror = roundInfo.pnkAtStakePerJuror; - round.totalFeesForJurors = roundInfo.totalFeesForJurors; - round.nbVotes = roundInfo.nbVotes; - round.repartitions = roundInfo.repartitions; - round.penalties = roundInfo.pnkPenalties; - round.dispute = disputeID.toString(); - const courtID = contract.disputes(disputeID).value0.toString(); - round.court = courtID; - round.timeline = new Array<BigInt>(4).fill(new BigInt(0)); - round.jurorsDrawn = false; - round.jurorRewardsDispersed = false; - round.save(); -} - -function getIndexByPeriodName(periodName: string): i32 { - const periodArray = ["evidence", "commit", "vote", "appeal", "execution"]; - return periodArray.indexOf(periodName); -} - -export function updateRoundTimeline(disputeId: string, newPeriod: string, timestamp: BigInt): void { - const dispute = Dispute.load(disputeId); - if (!dispute) return; - //explanation: this to handle new round,since AppealDecision is emitted before NewPeriod, which changes the currentRoundIndex , - //hence when round changes we subtract 1 from current round index - const currentRoundIndex = - dispute.period.includes("appeal") && newPeriod === "evidence" - ? dispute.currentRoundIndex.minus(ONE) - : dispute.currentRoundIndex; - const roundID = `${disputeId}-${currentRoundIndex.toString()}`; - const round = Round.load(roundID); - if (!round) return; - - let timeline = round.timeline; - const period = getIndexByPeriodName(dispute.period); - timeline[period] = timestamp; - round.timeline = timeline; - round.save(); -} diff --git a/subgraph/core/src/entities/TokenAndEthShift.ts b/subgraph/core/src/entities/TokenAndEthShift.ts deleted file mode 100644 index 6225c3d17..000000000 --- a/subgraph/core/src/entities/TokenAndEthShift.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Address, BigInt } from "@graphprotocol/graph-ts"; -import { TokenAndETHShift as TokenAndETHShiftEvent } from "../../generated/KlerosCore/KlerosCore"; -import { Court, Dispute, TokenAndETHShift } from "../../generated/schema"; -import { updatePaidETH, updateRedistributedPNK } from "../datapoint"; -import { ZERO } from "../utils"; -import { convertTokenAmountToEth, updateFeeTokenPaid } from "./FeeToken"; -import { resolveUserDispute } from "./User"; - -export function updateTokenAndEthShiftFromEvent(event: TokenAndETHShiftEvent): void { - const jurorAddress = event.params._account; - const disputeID = event.params._disputeID; - const dispute = Dispute.load(disputeID.toString()); - if (!dispute) return; - const court = Court.load(dispute.court); - if (!court) return; - const roundIndex = event.params._roundID; - const feeTokenAddress = event.params._feeToken; - let shift = ensureTokenAndEthShift(jurorAddress, disputeID, roundIndex, feeTokenAddress); - const feeAmount = event.params._feeAmount; - const pnkAmount = event.params._pnkAmount; - let ethAmount: BigInt; - if (feeTokenAddress.toHexString() === "0x0000000000000000000000000000000000000000") { - updateFeeTokenPaid(feeTokenAddress, event.address, feeAmount); - ethAmount = convertTokenAmountToEth(feeTokenAddress, feeAmount, event.address); - shift.feeTokenAmount = shift.feeTokenAmount.plus(feeAmount); - } else { - ethAmount = feeAmount; - } - const previousEthAmount = shift.ethAmount; - const newEthAmount = previousEthAmount.plus(ethAmount); - shift.ethAmount = newEthAmount; - resolveUserDispute(jurorAddress.toHexString(), disputeID.toString()); - court.paidETH = court.paidETH.plus(ethAmount); - updatePaidETH(ethAmount, event.block.timestamp); - if (pnkAmount.gt(ZERO)) { - court.paidPNK = court.paidPNK.plus(pnkAmount); - updateRedistributedPNK(pnkAmount, event.block.timestamp); - } - shift.pnkAmount = shift.pnkAmount.plus(pnkAmount); - shift.save(); - court.save(); -} - -export function ensureTokenAndEthShift( - jurorAddress: Address, - disputeID: BigInt, - roundIndex: BigInt, - feeTokenAddress: Address -): TokenAndETHShift { - const shiftID = `${jurorAddress.toHexString()}-${disputeID.toString()}-${roundIndex.toString()}`; - let shift = TokenAndETHShift.load(shiftID); - if (!shift) { - shift = new TokenAndETHShift(shiftID); - if (feeTokenAddress !== Address.fromI32(0)) { - shift.isNativeCurrency = false; - shift.feeToken = feeTokenAddress.toHexString(); - } else { - shift.isNativeCurrency = true; - } - shift.feeTokenAmount = ZERO; - shift.ethAmount = ZERO; - shift.juror = jurorAddress.toHexString(); - shift.dispute = disputeID.toString(); - shift.pnkAmount = ZERO; - shift.save(); - } - return shift; -} diff --git a/subgraph/core/src/entities/User.ts b/subgraph/core/src/entities/User.ts deleted file mode 100644 index 95651dc32..000000000 --- a/subgraph/core/src/entities/User.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { BigInt, BigDecimal } from "@graphprotocol/graph-ts"; -import { User } from "../../generated/schema"; -import { ONE, ZERO } from "../utils"; - -export function computeCoherenceScore(totalCoherentVotes: BigInt, totalResolvedVotes: BigInt): BigInt { - const smoothingFactor = BigDecimal.fromString("10"); - - let denominator = totalResolvedVotes.toBigDecimal().plus(smoothingFactor); - let coherencyRatio = totalCoherentVotes.toBigDecimal().div(denominator); - - const coherencyScore = coherencyRatio.times(BigDecimal.fromString("100")); - - const roundedScore = coherencyScore.plus(BigDecimal.fromString("0.5")); - - return BigInt.fromString(roundedScore.toString().split(".")[0]); -} - -export function ensureUser(id: string): User { - const user = User.load(id); - - if (user) { - return user; - } - - return createUserFromAddress(id); -} - -export function createUserFromAddress(id: string): User { - const user = new User(id); - user.userAddress = id.toLowerCase(); - user.totalStake = ZERO; - user.totalDelayed = ZERO; - user.activeDisputes = ZERO; - user.disputes = []; - user.rounds = []; - user.resolvedDisputes = []; - user.totalResolvedDisputes = ZERO; - user.totalAppealingDisputes = ZERO; - user.totalDisputes = ZERO; - user.totalCoherentVotes = ZERO; - user.totalResolvedVotes = ZERO; - user.coherenceScore = ZERO; - user.save(); - - return user; -} - -export function addUserActiveDispute(id: string, disputeID: string): void { - const user = ensureUser(id); - if (user.disputes.includes(disputeID)) { - return; - } - user.disputes = user.disputes.concat([disputeID]); - user.activeDisputes = user.activeDisputes.plus(ONE); - user.totalDisputes = user.totalDisputes.plus(ONE); - user.save(); -} - -export function resolveUserDispute(id: string, disputeID: string): void { - const user = ensureUser(id); - if (user.resolvedDisputes.includes(disputeID)) { - return; - } - user.resolvedDisputes = user.resolvedDisputes.concat([disputeID]); - user.totalResolvedDisputes = user.totalResolvedDisputes.plus(ONE); - user.activeDisputes = user.activeDisputes.minus(ONE); - user.save(); -} diff --git a/subgraph/core/src/utils.ts b/subgraph/core/src/utils.ts deleted file mode 100644 index 8bae1a4ac..000000000 --- a/subgraph/core/src/utils.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { BigInt, Bytes } from "@graphprotocol/graph-ts"; - -export const ZERO = BigInt.fromI32(0); -export const ONE = BigInt.fromI32(1); - -export function extractDisputeKitIDFromExtraData(extraData: Bytes): string { - const littleEndian = extraData.subarray(64, 96).reverse(); - return BigInt.fromUnsignedBytes(Bytes.fromUint8Array(littleEndian)).toString(); -} diff --git a/subgraph/core/subgraph.template.yaml b/subgraph/core/subgraph.template.yaml deleted file mode 100644 index b4b033006..000000000 --- a/subgraph/core/subgraph.template.yaml +++ /dev/null @@ -1,287 +0,0 @@ -specVersion: 0.0.5 -description: Kleros v2 Core -repository: https://github.com/kleros/kleros-v2/tree/dev/subgraph/core -schema: - file: ./schema.graphql -features: - - fullTextSearch -dataSources: - - kind: ethereum - name: KlerosCore - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: KlerosCore - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - User - - Arbitrable - - TokenAndETHShift - - JurorTokensPerCourt - - Court - - Dispute - - Round - - Draw - - DisputeKit - - Counter - abis: - - name: SortitionModule - file: ../../contracts/deployments/_PLACEHOLDER_/SortitionModule.json - - name: DisputeKitClassic - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitClassic.json - - name: KlerosCore - # FIX: temporarily point to the abi with event addition. - file: ./abi-migrations/KlerosCore.json - eventHandlers: - - event: AppealDecision(indexed uint256,indexed address) - handler: handleAppealDecision - - event: DisputeCreation(indexed uint256,indexed address) - handler: handleDisputeCreation - receipt: true - - event: Draw(indexed address,indexed uint256,uint256,uint256) - handler: handleDraw - - event: NewPeriod(indexed uint256,uint8) - handler: handleNewPeriod - - event: CourtCreated(indexed uint96,indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256[]) - handler: handleCourtCreated - # FIX: This is support for old signature - - event: CourtCreated(indexed uint256,indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256[]) - handler: handleCourtCreated - - event: CourtModified(indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4]) - handler: handleCourtModified - - event: DisputeKitCreated(indexed uint256,indexed address) - handler: handleDisputeKitCreated - - event: DisputeKitEnabled(indexed uint96,indexed uint256,indexed bool) - handler: handleDisputeKitEnabled - - event: TokenAndETHShift(indexed address,indexed uint256,indexed uint256,uint256,int256,int256,address) - handler: handleTokenAndETHShift - - event: Ruling(indexed address,indexed uint256,uint256) - handler: handleRuling - - event: AcceptedFeeToken(indexed address,indexed bool) - handler: handleAcceptedFeeToken - - event: CourtJump(indexed uint256,indexed uint256,indexed uint96,uint96) - handler: handleCourtJump - file: ./src/KlerosCore.ts - - kind: ethereum - name: PolicyRegistry - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: PolicyRegistry - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - Court - abis: - - name: PolicyRegistry - file: ../../contracts/deployments/_PLACEHOLDER_/PolicyRegistry.json - eventHandlers: - - event: PolicyUpdate(indexed uint256,string,string) - handler: handlePolicyUpdate - file: ./src/PolicyRegistry.ts - - kind: ethereum - name: DisputeKitClassic - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: DisputeKitClassic - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitClassic - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitClassic.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCore.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: DisputeKitShutter - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: DisputeKitShutter - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitShutter - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitShutter.json - - name: DisputeKitClassic # Required on Alchemy - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitClassic.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCore.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: DisputeKitGated - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: DisputeKitGated - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitGated - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitGated.json - - name: DisputeKitClassic # Required on Alchemy - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitClassic.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCore.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: DisputeKitGatedShutter - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: DisputeKitGatedShutter - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitGatedShutter - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitGatedShutter.json - - name: DisputeKitClassic # Required on Alchemy - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeKitClassic.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCore.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: EvidenceModule - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: EvidenceModule - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicEvidenceGroup - - ClassicEvidence - abis: - - name: EvidenceModule - file: ../../contracts/deployments/_PLACEHOLDER_/EvidenceModule.json - eventHandlers: - - event: Evidence(indexed uint256,indexed address,string) - handler: handleEvidenceEvent - file: ./src/EvidenceModule.ts - - kind: ethereum - name: SortitionModule - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: SortitionModule - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - JurorTokensPerCourt - abis: - - name: SortitionModule - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/SortitionModule.json - eventHandlers: - - event: StakeDelayed(indexed address,indexed uint96,uint256) - handler: handleStakeDelayed - - event: StakeLocked(indexed address,uint256,bool) - handler: handleStakeLocked - - event: StakeSet(indexed address,uint256,uint256,uint256) - handler: handleStakeSet - # FIX: old stake set signature - - event: StakeSet(indexed address,uint256,uint256) - handler: handleStakeSet - file: ./src/SortitionModule.ts diff --git a/subgraph/core/subgraph.yaml b/subgraph/core/subgraph.yaml deleted file mode 100644 index 5b1c701be..000000000 --- a/subgraph/core/subgraph.yaml +++ /dev/null @@ -1,288 +0,0 @@ -# THIS FILE IS AUTO-GENERATED BY update.sh FROM subgraph.template.yaml, ANY CHANGES WILL BE LOST. -specVersion: 0.0.5 -description: Kleros v2 Core -repository: https://github.com/kleros/kleros-v2/tree/dev/subgraph/core -schema: - file: ./schema.graphql -features: - - fullTextSearch -dataSources: - - kind: ethereum - name: KlerosCore - network: arbitrum-sepolia - source: - address: "0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9" - abi: KlerosCore - startBlock: 175286093 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - User - - Arbitrable - - TokenAndETHShift - - JurorTokensPerCourt - - Court - - Dispute - - Round - - Draw - - DisputeKit - - Counter - abis: - - name: SortitionModule - file: ../../contracts/deployments/arbitrumSepoliaDevnet/SortitionModule.json - - name: DisputeKitClassic - file: ../../contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic.json - - name: KlerosCore - # FIX: temporarily point to the abi with event addition. - file: ./abi-migrations/KlerosCore.json - eventHandlers: - - event: AppealDecision(indexed uint256,indexed address) - handler: handleAppealDecision - - event: DisputeCreation(indexed uint256,indexed address) - handler: handleDisputeCreation - receipt: true - - event: Draw(indexed address,indexed uint256,uint256,uint256) - handler: handleDraw - - event: NewPeriod(indexed uint256,uint8) - handler: handleNewPeriod - - event: CourtCreated(indexed uint96,indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256[]) - handler: handleCourtCreated - # FIX: This is support for old signature - - event: CourtCreated(indexed uint256,indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256[]) - handler: handleCourtCreated - - event: CourtModified(indexed uint96,bool,uint256,uint256,uint256,uint256,uint256[4]) - handler: handleCourtModified - - event: DisputeKitCreated(indexed uint256,indexed address) - handler: handleDisputeKitCreated - - event: DisputeKitEnabled(indexed uint96,indexed uint256,indexed bool) - handler: handleDisputeKitEnabled - - event: TokenAndETHShift(indexed address,indexed uint256,indexed uint256,uint256,int256,int256,address) - handler: handleTokenAndETHShift - - event: Ruling(indexed address,indexed uint256,uint256) - handler: handleRuling - - event: AcceptedFeeToken(indexed address,indexed bool) - handler: handleAcceptedFeeToken - - event: CourtJump(indexed uint256,indexed uint256,indexed uint96,uint96) - handler: handleCourtJump - file: ./src/KlerosCore.ts - - kind: ethereum - name: PolicyRegistry - network: arbitrum-sepolia - source: - address: "0xd8681dBF525ecBda2F799BFddB96840065075e8A" - abi: PolicyRegistry - startBlock: 175286057 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - Court - abis: - - name: PolicyRegistry - file: ../../contracts/deployments/arbitrumSepoliaDevnet/PolicyRegistry.json - eventHandlers: - - event: PolicyUpdate(indexed uint256,string,string) - handler: handlePolicyUpdate - file: ./src/PolicyRegistry.ts - - kind: ethereum - name: DisputeKitClassic - network: arbitrum-sepolia - source: - address: "0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1" - abi: DisputeKitClassic - startBlock: 175286074 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitClassic - file: ../../contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCore.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: DisputeKitShutter - network: arbitrum-sepolia - source: - address: "0xfE0a958bc744Bb9E224E1822625B53134ac5CB69" - abi: DisputeKitShutter - startBlock: 175286126 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitShutter - file: ../../contracts/deployments/arbitrumSepoliaDevnet/DisputeKitShutter.json - - name: DisputeKitClassic # Required on Alchemy - file: ../../contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCore.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: DisputeKitGated - network: arbitrum-sepolia - source: - address: "0x677dA30B4b27D129354DdA1e219Bcc86802132d1" - abi: DisputeKitGated - startBlock: 175286139 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitGated - file: ../../contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGated.json - - name: DisputeKitClassic # Required on Alchemy - file: ../../contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCore.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: DisputeKitGatedShutter - network: arbitrum-sepolia - source: - address: "0xd86b84eb36Cd48f3f384b4490F255b494385F429" - abi: DisputeKitGatedShutter - startBlock: 175286153 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicDispute - - ClassicRound - - ClassicVote - - ClassicContribution - abis: - - name: DisputeKitGatedShutter - file: ../../contracts/deployments/arbitrumSepoliaDevnet/DisputeKitGatedShutter.json - - name: DisputeKitClassic # Required on Alchemy - file: ../../contracts/deployments/arbitrumSepoliaDevnet/DisputeKitClassic.json - - name: KlerosCore - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/KlerosCore.json - eventHandlers: - - event: DisputeCreation(indexed uint256,uint256,bytes) - handler: handleDisputeCreation - - event: Contribution(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleContributionEvent - - event: Withdrawal(indexed uint256,indexed uint256,uint256,indexed address,uint256) - handler: handleWithdrawal - - event: ChoiceFunded(indexed uint256,indexed uint256,indexed uint256) - handler: handleChoiceFunded - - event: VoteCast(indexed uint256,indexed address,uint256[],indexed uint256,string) - handler: handleVoteCast - - event: CommitCast(indexed uint256,indexed address,uint256[],bytes32) - handler: handleCommitCast - file: ./src/DisputeKitClassic.ts - - kind: ethereum - name: EvidenceModule - network: arbitrum-sepolia - source: - address: "0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49" - abi: EvidenceModule - startBlock: 175286065 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - ClassicEvidenceGroup - - ClassicEvidence - abis: - - name: EvidenceModule - file: ../../contracts/deployments/arbitrumSepoliaDevnet/EvidenceModule.json - eventHandlers: - - event: Evidence(indexed uint256,indexed address,string) - handler: handleEvidenceEvent - file: ./src/EvidenceModule.ts - - kind: ethereum - name: SortitionModule - network: arbitrum-sepolia - source: - address: "0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663" - abi: SortitionModule - startBlock: 175286083 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - JurorTokensPerCourt - abis: - - name: SortitionModule - # FIX: temporarily point to abi with event addition - file: ./abi-migrations/SortitionModule.json - eventHandlers: - - event: StakeDelayed(indexed address,indexed uint96,uint256) - handler: handleStakeDelayed - - event: StakeLocked(indexed address,uint256,bool) - handler: handleStakeLocked - - event: StakeSet(indexed address,uint256,uint256,uint256) - handler: handleStakeSet - # FIX: old stake set signature - - event: StakeSet(indexed address,uint256,uint256) - handler: handleStakeSet - file: ./src/SortitionModule.ts diff --git a/subgraph/core/tests/sortition-module-utils.ts b/subgraph/core/tests/sortition-module-utils.ts deleted file mode 100644 index f57f2fbed..000000000 --- a/subgraph/core/tests/sortition-module-utils.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { newMockEvent } from "matchstick-as"; -import { ethereum, BigInt, Address } from "@graphprotocol/graph-ts"; -import { StakeDelayed, StakeLocked, StakeSet } from "../generated/SortitionModule/SortitionModule"; - -export function createStakeDelayedEvent(_address: Address, _courtID: BigInt, _amount: BigInt): StakeDelayed { - let StakeDelayed: StakeDelayed = newMockEvent(); - - StakeDelayed.parameters = new Array(); - - StakeDelayed.parameters.push(new ethereum.EventParam("_address", ethereum.Value.fromAddress(_address))); - StakeDelayed.parameters.push(new ethereum.EventParam("_courtID", ethereum.Value.fromUnsignedBigInt(_courtID))); - StakeDelayed.parameters.push(new ethereum.EventParam("_amount", ethereum.Value.fromUnsignedBigInt(_amount))); - - return StakeDelayed; -} - -export function createStakeLockedEvent(_address: Address, _relativeAmount: BigInt, _unlock: boolean): StakeLocked { - let stakeLockedEvent = newMockEvent(); - - stakeLockedEvent.parameters = new Array(); - - stakeLockedEvent.parameters.push(new ethereum.EventParam("_address", ethereum.Value.fromAddress(_address))); - stakeLockedEvent.parameters.push( - new ethereum.EventParam("_relativeAmount", ethereum.Value.fromUnsignedBigInt(_relativeAmount)) - ); - stakeLockedEvent.parameters.push(new ethereum.EventParam("_unlock", ethereum.Value.fromBoolean(_unlock))); - - return stakeLockedEvent; -} - -export function createStakeSetEvent( - _address: Address, - _courtID: BigInt, - _amount: BigInt, - _amountAllCourts: BigInt -): StakeSet { - let stakeSetEvent = newMockEvent(); - - stakeSetEvent.parameters = new Array(); - - stakeSetEvent.parameters.push(new ethereum.EventParam("_address", ethereum.Value.fromAddress(_address))); - stakeSetEvent.parameters.push(new ethereum.EventParam("_courtID", ethereum.Value.fromUnsignedBigInt(_courtID))); - stakeSetEvent.parameters.push(new ethereum.EventParam("_amount", ethereum.Value.fromUnsignedBigInt(_amount))); - stakeSetEvent.parameters.push( - new ethereum.EventParam("_amountAllCourts", ethereum.Value.fromUnsignedBigInt(_amountAllCourts)) - ); - - return stakeSetEvent; -} diff --git a/subgraph/core/tests/sortition-module.test.ts b/subgraph/core/tests/sortition-module.test.ts deleted file mode 100644 index 6719aee57..000000000 --- a/subgraph/core/tests/sortition-module.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { assert, describe, test, clearStore, beforeAll, afterAll } from "matchstick-as/assembly/index"; -import { BigInt, Address } from "@graphprotocol/graph-ts"; -import { handleStakeSet } from "../src/SortitionModule"; -import { createStakeSetEvent } from "./sortition-module-utils"; - -// Tests structure (matchstick-as >=0.5.0) -// https://thegraph.com/docs/en/developer/matchstick/#tests-structure-0-5-0 - -describe("Describe event", () => { - beforeAll(() => { - let courtId = BigInt.fromI32(1); - let amount = BigInt.fromI32(1000); - let amountAllCourts = BigInt.fromI32(1000); - let jurorAddress = Address.fromString("0x922911F4f80a569a4425fa083456239838F7F003"); - let newStakeSetEvent = createStakeSetEvent(jurorAddress, courtId, amount, amountAllCourts); - handleStakeSet(newStakeSetEvent); - }); - - afterAll(() => { - clearStore(); - }); - - // For more test scenarios, see: - // https://thegraph.com/docs/en/developer/matchstick/#write-a-unit-test - - test("Initialized created and stored", () => { - assert.entityCount("Initialized", 1); - - // 0xa16081f360e3847006db660bae1c6d1b2e17ec2a is the default address used in newMockEvent() function - // assert.fieldEquals( - // "Initialized", - // "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", - // "version", - // "234" - // ) - - // More assert options: - // https://thegraph.com/docs/en/developer/matchstick/#asserts - }); -}); diff --git a/subgraph/core/tests/user.test.ts b/subgraph/core/tests/user.test.ts deleted file mode 100644 index c69548b48..000000000 --- a/subgraph/core/tests/user.test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { assert, test, describe } from "matchstick-as/assembly/index"; -import { BigInt } from "@graphprotocol/graph-ts"; -import { computeCoherenceScore } from "../src/entities/User"; - -describe("Compute coherence score", () => { - test("Slam BigInts together", () => { - assert.bigIntEquals(BigInt.fromI32(8), computeCoherenceScore(BigInt.fromI32(1), BigInt.fromI32(2))); - }); -}); diff --git a/subgraph/dispute-template-registry/schema.graphql b/subgraph/dispute-template-registry/schema.graphql deleted file mode 100644 index 3028702ab..000000000 --- a/subgraph/dispute-template-registry/schema.graphql +++ /dev/null @@ -1,6 +0,0 @@ -type DisputeTemplate @entity { - id: ID! # disputeTemplateId - templateTag: String - templateData: String! - templateDataMappings: String! -} diff --git a/subgraph/dispute-template-registry/src/DisputeTemplateRegistry.ts b/subgraph/dispute-template-registry/src/DisputeTemplateRegistry.ts deleted file mode 100644 index b3e990f88..000000000 --- a/subgraph/dispute-template-registry/src/DisputeTemplateRegistry.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { DisputeTemplate as DisputeTemplateEvent } from "../generated/DisputeTemplateRegistry/DisputeTemplateRegistry"; -import { DisputeTemplate } from "../generated/schema"; - -export function handleDisputeTemplate(event: DisputeTemplateEvent): void { - const disputeTemplateId = event.params._templateId.toString(); - const disputeTemplate = new DisputeTemplate(disputeTemplateId); - disputeTemplate.templateTag = event.params._templateTag.toHexString(); - disputeTemplate.templateData = event.params._templateData.toString(); - disputeTemplate.templateDataMappings = event.params._templateDataMappings.toString(); - disputeTemplate.save(); -} diff --git a/subgraph/dispute-template-registry/subgraph.template.yaml b/subgraph/dispute-template-registry/subgraph.template.yaml deleted file mode 100644 index b45f5c1f7..000000000 --- a/subgraph/dispute-template-registry/subgraph.template.yaml +++ /dev/null @@ -1,26 +0,0 @@ -specVersion: 0.0.5 -description: Kleros v2 Dispute Template Registry -repository: https://github.com/kleros/kleros-v2/tree/dev/subgraph/dispute-template-registry -schema: - file: schema.graphql -dataSources: - - kind: ethereum - name: DisputeTemplateRegistry - network: _PLACEHOLDER_ - source: - address: "_PLACEHOLDER_" - abi: DisputeTemplateRegistry - startBlock: _PLACEHOLDER_ - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - DisputeTemplate - abis: - - name: DisputeTemplateRegistry - file: ../../contracts/deployments/_PLACEHOLDER_/DisputeTemplateRegistry.json - eventHandlers: - - event: DisputeTemplate(indexed uint256,indexed string,string,string) - handler: handleDisputeTemplate - file: src/DisputeTemplateRegistry.ts diff --git a/subgraph/dispute-template-registry/subgraph.yaml b/subgraph/dispute-template-registry/subgraph.yaml deleted file mode 100644 index 0c0412d17..000000000 --- a/subgraph/dispute-template-registry/subgraph.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# THIS FILE IS AUTO-GENERATED BY update.sh FROM subgraph.template.yaml, ANY CHANGES WILL BE LOST. -specVersion: 0.0.5 -description: Kleros v2 Dispute Template Registry -repository: https://github.com/kleros/kleros-v2/tree/dev/subgraph/dispute-template-registry -schema: - file: schema.graphql -dataSources: - - kind: ethereum - name: DisputeTemplateRegistry - network: arbitrum-sepolia - source: - address: "0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f" - abi: DisputeTemplateRegistry - startBlock: 175286171 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - DisputeTemplate - abis: - - name: DisputeTemplateRegistry - file: ../../contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry.json - eventHandlers: - - event: DisputeTemplate(indexed uint256,indexed string,string,string) - handler: handleDisputeTemplate - file: src/DisputeTemplateRegistry.ts diff --git a/subgraph/package.json b/subgraph/package.json deleted file mode 100644 index 882e134f9..000000000 --- a/subgraph/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "name": "@kleros/kleros-v2-subgraph", - "version": "0.17.2", - "drtVersion": "0.13.0", - "license": "MIT", - "scripts": { - "update:core:arbitrum-sepolia-devnet": "./scripts/update.sh arbitrumSepoliaDevnet arbitrum-sepolia core/subgraph.yaml", - "update:core:arbitrum-sepolia": "./scripts/update.sh arbitrumSepolia arbitrum-sepolia core/subgraph.yaml", - "update:core:arbitrum": "./scripts/update.sh arbitrum arbitrum-one core/subgraph.yaml", - "update:core:local": "./scripts/update.sh localhost mainnet core/subgraph.yaml", - "codegen:core": "graph codegen --output-dir core/generated/ core/subgraph.yaml", - "build:core": "graph build --output-dir core/build/ core/subgraph.yaml", - "test:core": "cd core && graph test", - "clean:core": "graph clean --codegen-dir core/generated/ --build-dir core/build/ ; rm core/subgraph.yaml.bak.*", - "deploy:core:arbitrum-sepolia-devnet": "graph deploy kleros-v2-core-devnet -l v$npm_package_version core/subgraph.yaml", - "deploy:core:arbitrum-sepolia": "graph deploy kleros-v2-core-testnet -l v$npm_package_version core/subgraph.yaml", - "deploy:core:arbitrum": "graph deploy kleros-v2-core-mainnet -l v$npm_package_version core/subgraph.yaml", - "deploy:core:local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 kleros/kleros-v2-core-local --version-label v$(date +%s) core/subgraph.yaml", - "rebuild-deploy:core:local": "yarn update:core:local && yarn codegen:core && yarn build:core && yarn create:local kleros/kleros-v2-core-local && yarn deploy:core:local", - "": "------------------------------------------------------------------------------------------", - "update:core-neo:arbitrum-sepolia-devnet": "./scripts/update.sh arbitrumSepoliaDevnet arbitrum-sepolia core-neo/subgraph.yaml", - "update:core-neo:arbitrum": "./scripts/update.sh arbitrum arbitrum-one core-neo/subgraph.yaml", - "update:core-neo:local": "./scripts/update.sh localhost mainnet core-neo/subgraph.yaml", - "codegen:core-neo": "yarn codegen:core && graph codegen --output-dir core-neo/generated/ core-neo/subgraph.yaml", - "build:core-neo": "graph build --output-dir core-neo/build/ core-neo/subgraph.yaml", - "test:core-neo": "cd core-neo && graph test", - "clean:core-neo": "graph clean --codegen-dir core-neo/generated/ --build-dir core-neo/build/ ; rm core-neo/subgraph.yaml.bak.*", - "deploy:core-neo:arbitrum-sepolia-devnet": "graph deploy kleros-v2-coreneo-devnet -l v$npm_package_version core-neo/subgraph.yaml", - "deploy:core-neo:arbitrum": "graph deploy kleros-v2-coreneo -l v$npm_package_version core-neo/subgraph.yaml", - "deploy:core-neo:local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 kleros/kleros-v2-coreneo-local --version-label v$(date +%s) core-neo/subgraph.yaml", - "rebuild-deploy:core-neo:local": "yarn update:core-neo:local && yarn codegen:core-neo && yarn build:core-neo && yarn create:local kleros/kleros-v2-coreneo-local && yarn deploy:core-neo:local", - "-": "------------------------------------------------------------------------------------------", - "update:core-university:arbitrum-sepolia-devnet": "./scripts/update.sh arbitrumSepoliaDevnet arbitrum-sepolia core-university/subgraph.yaml", - "update:core-university:local": "./scripts/update.sh localhost mainnet core-university/subgraph.yaml", - "codegen:core-university": "yarn codegen:core && graph codegen --output-dir core-university/generated/ core-university/subgraph.yaml", - "build:core-university": "graph build --output-dir core-university/build/ core-university/subgraph.yaml", - "test:core-university": "cd core-university && graph test", - "clean:core-university": "graph clean --codegen-dir core-university/generated/ --build-dir core-university/build/ ; rm core-university/subgraph.yaml.bak.*", - "deploy:core-university:arbitrum-sepolia-devnet": "graph deploy kleros-v2-coreuni-devnet -l v$npm_package_version core-university/subgraph.yaml", - "deploy:core-university:local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 kleros/kleros-v2-coreuni-local --version-label v$(date +%s) core-university/subgraph.yaml", - "rebuild-deploy:core-university:local": "yarn update:core-university:local && yarn codegen:core-university && yarn build:core-university && yarn create:local kleros/kleros-v2-coreuni-local && yarn deploy:core-university:local", - "--": "-----------------------------------------------------------------------------------------", - "update:drt:arbitrum-sepolia-devnet": "./scripts/update.sh arbitrumSepoliaDevnet arbitrum-sepolia dispute-template-registry/subgraph.yaml", - "update:drt:arbitrum-sepolia": "./scripts/update.sh arbitrumSepolia arbitrum-sepolia dispute-template-registry/subgraph.yaml", - "update:drt:arbitrum": "./scripts/update.sh arbitrum arbitrum-one dispute-template-registry/subgraph.yaml", - "update:drt:local": "./scripts/update.sh localhost mainnet dispute-template-registry/subgraph.yaml", - "codegen:drt": "graph codegen --output-dir dispute-template-registry/generated/ dispute-template-registry/subgraph.yaml", - "build:drt": "graph build --output-dir dispute-template-registry/generated/ dispute-template-registry/subgraph.yaml", - "test:drt": "cd dispute-template-registry && graph test ", - "clean:drt": "graph clean --codegen-dir dispute-template-registry/generated/ --build-dir dispute-template-registry/build/ ; rm dispute-template-registry/subgraph.yaml.bak.*", - "deploy:drt:arbitrum-sepolia-devnet": "graph deploy kleros-v2-drt-arbisep-devnet -l v$(jq -r .drtVersion $npm_package_json) dispute-template-registry/subgraph.yaml", - "deploy:drt:arbitrum-sepolia": "graph deploy kleros-v2-drt-arbisep-testnet -l v$(jq -r .drtVersion $npm_package_json) dispute-template-registry/subgraph.yaml", - "deploy:drt:arbitrum": "graph deploy kleros-v2-drt -l v$(jq -r .drtVersion $npm_package_json) dispute-template-registry/subgraph.yaml", - "deploy:drt:local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 kleros/kleros-v2-drt-local --version-label v$(date +%s) dispute-template-registry/subgraph.yaml", - "rebuild-deploy:drt:local": "yarn update:drt:local && yarn codegen:drt && yarn build:drt && yarn create:local kleros/kleros-v2-drt-local && yarn deploy:drt:local", - "---": "----------------------------------------------------------------------------------------", - "update:arbitrum-sepolia-devnet": "./scripts/all.sh update arbitrum-sepolia-devnet", - "update:arbitrum-sepolia": "./scripts/all.sh update arbitrum-sepolia", - "update:arbitrum": "./scripts/all.sh update arbitrum arbitrum-one", - "update:local": "./scripts/all.sh update local", - "clean": "./scripts/all.sh clean", - "codegen": "./scripts/all.sh codegen", - "build": "./scripts/all.sh build", - "rebuild-deploy:local": "./scripts/all.sh rebuild-deploy local", - "----": "--------------------------------------------------------------------------------------", - "create:local": "graph create --node http://localhost:8020/", - "remove:local": "graph remove --node http://localhost:8020/", - "start-local-indexer": "docker compose -f ../services/graph-node/docker-compose.yml up -d && docker compose -f ../services/graph-node/docker-compose.yml logs -f", - "stop-local-indexer": "docker compose -f ../services/graph-node/docker-compose.yml down && rm -rf ../services/graph-node/data" - }, - "volta": { - "node": "20.18.3" - }, - "dependencies": { - "@graphprotocol/graph-ts": "^0.38.0" - }, - "devDependencies": { - "@graphprotocol/graph-cli": "^0.96.0", - "@kleros/kleros-v2-eslint-config": "workspace:^", - "@kleros/kleros-v2-prettier-config": "workspace:^", - "eslint": "^9.15.0", - "gluegun": "^5.2.0", - "matchstick-as": "0.6.0" - } -} diff --git a/subgraph/scripts/all.sh b/subgraph/scripts/all.sh deleted file mode 100755 index ba8c75163..000000000 --- a/subgraph/scripts/all.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -cmdPrefix="$1" -cmdPostfix="$2" -if [ -z "$cmdPrefix" ] -then - echo "Usage: $(basename $0) <cmdPrefix> [<cmdPostfix>]" - exit 1 -fi - -for subgraph in core core-neo core-university drt -do - echo "Running for ${cmdPrefix}:${subgraph}${cmdPostfix:+:}${cmdPostfix}" - yarn "${cmdPrefix}:${subgraph}${cmdPostfix:+:}${cmdPostfix}" -done \ No newline at end of file diff --git a/subgraph/scripts/update.sh b/subgraph/scripts/update.sh deleted file mode 100755 index 3459d30d9..000000000 --- a/subgraph/scripts/update.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" - -function isContractDeployed() { #hardhatNetwork #graphNetwork #subgraphConfig #dataSourceIndex #contract - local hardhatNetwork="$1" - local graphNetwork="$2" - local subgraphConfig="$3" - local dataSourceIndex="$4" - local dataSourceName="$5" - - # Get the deployment artifact - local contractName=$(basename $(yq '.dataSources['$dataSourceIndex'].mapping.abis[] | select(.name == "'$dataSourceName'") | .file' "$subgraphConfig") .json) - local artifact="$SCRIPT_DIR/../../contracts/deployments/$hardhatNetwork/$contractName.json" - - if [ -f "$artifact" ]; then - return 0 # success in bash - else - return 1 # failure in bash - fi -} - -function update() { #hardhatNetwork #graphNetwork #subgraphConfig #dataSourceIndex #contract - local hardhatNetwork="$1" - local graphNetwork="$2" - local subgraphConfig="$3" - local dataSourceIndex="$4" - local dataSourceName="$5" - - # Get the deployment artifact - local contractName=$(basename $(yq '.dataSources['$dataSourceIndex'].mapping.abis[] | select(.name == "'$dataSourceName'") | .file' "$subgraphConfig") .json) - local artifact="$SCRIPT_DIR/../../contracts/deployments/$hardhatNetwork/$contractName.json" - - echo "Updating $dataSourceName with $artifact" - - # Set the address - local address=$(cat "$artifact" | jq '.address') - yq -i ".dataSources[$dataSourceIndex].source.address=$address" "$subgraphConfig" - - # Set the start block - local blockNumber="$(cat "$artifact" | jq '.receipt.blockNumber')" - yq -i ".dataSources[$dataSourceIndex].source.startBlock=$blockNumber" "$subgraphConfig" - - # Set the Graph network - graphNetwork=$graphNetwork yq -i ".dataSources[$dataSourceIndex].network=env(graphNetwork)" "$subgraphConfig" - - # Set the ABIs path for this Hardhat network - local abiIndex=0 - for f in $(yq e .dataSources[$dataSourceIndex].mapping.abis[].file "$subgraphConfig" -o json -I 0 | jq -sr '.[]'); do - f2=$(echo $f | sed "s|\(.*\/deployments\/\).*\/|\1$hardhatNetwork\/|") - yq -i ".dataSources[$dataSourceIndex].mapping.abis[$abiIndex].file=\"$f2\"" "$subgraphConfig" - ((++abiIndex)) - done -} - -# as per ../contracts/hardhat.config.js -hardhatNetwork=${1:-arbitrumSepolia} - -# as per https://thegraph.com/docs/en/developing/supported-networks/ -graphNetwork=${2:-arbitrum\-sepolia} - -subgraphConfig="$SCRIPT_DIR/../${3:-core/subgraph.yaml}" -echo "Updating $subgraphConfig" - -# backup -cp "$subgraphConfig" "$subgraphConfig.bak.$(date +%s)" - -# initialize from template -template="${subgraphConfig%.yaml}.template.yaml" -echo '# THIS FILE IS AUTO-GENERATED BY update.sh FROM subgraph.template.yaml, ANY CHANGES WILL BE LOST.' > "$subgraphConfig" -cat "$template" >>"$subgraphConfig" - -# find contracts that are not deployed -notDeployedSourceIndices=() -i=0 -for contract in $(yq .dataSources[].name "$subgraphConfig"); do - if ! isContractDeployed $hardhatNetwork $graphNetwork "$subgraphConfig" $i $contract; then - echo -e "\e[1;31mContract $contract is not deployed\e[0m" - notDeployedSourceIndices+=($i) - fi - ((++i)) -done - -# delete the data sources for the contracts that are not deployed -for i in "${notDeployedSourceIndices[@]}"; do - echo -e "\e[1;31mDeleting data source $i\e[0m" - yq -i 'del(.dataSources['$i'])' "$subgraphConfig" -done - -# update the data sources -i=0 -for contract in $(yq .dataSources[].name "$subgraphConfig"); do - update $hardhatNetwork $graphNetwork "$subgraphConfig" $i $contract - ((++i)) -done diff --git a/subgraph/temp-older-events-addition.txt b/subgraph/temp-older-events-addition.txt deleted file mode 100644 index f049dcc70..000000000 --- a/subgraph/temp-older-events-addition.txt +++ /dev/null @@ -1,120 +0,0 @@ -// KlerosCore.json : for _courtID type change in CourtCreated - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint96", - "name": "_parent", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "bool", - "name": "_hiddenVotes", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_minStake", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_alpha", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_feeForJuror", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_jurorsForCourtJump", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[4]", - "name": "_timesPerPeriod", - "type": "uint256[4]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "_supportedDisputeKits", - "type": "uint256[]" - } - ], - "name": "CourtCreated", - "type": "event" - }, - - - -// Goes in SortitionModule.json : new param in StakeSet - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeSet", - "type": "event" - }, - - - -// NOT NEEDED ANYMORE: Goes in SortitionModule.json: rename of StakeDelayedAlreadyTransferred => StakeDelayedAlreadyTransferredDeposited - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_courtID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "StakeDelayedAlreadyTransferred", - "type": "event" - }, \ No newline at end of file diff --git a/subgraph/tsconfig.json b/subgraph/tsconfig.json deleted file mode 100644 index 5c5d17c92..000000000 --- a/subgraph/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "@graphprotocol/graph-ts/types/tsconfig.base.json", - "include": ["src"] -} diff --git a/subgraph/utils/index.ts b/subgraph/utils/index.ts deleted file mode 100644 index 56f65bce5..000000000 --- a/subgraph/utils/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { JSONValue, JSONValueKind } from "@graphprotocol/graph-ts"; - -export function JSONValueToMaybeString(value: JSONValue | null, _default: string = "-"): string { - // Subgraph considers an empty string to be null and - // the handler crashes when attempting to save the entity. - // This is a security vulnerability because an adversary - // could manually craft an item with missing columns - // and the item would not show up in the UI, passing - // the challenge period unoticed. - // - // We fix this by setting the field manually to a hifen. - if (value == null || value.isNull()) { - return "-"; - } - - switch (value.kind) { - case JSONValueKind.BOOL: - return value.toBool() == true ? "true" : "false"; - case JSONValueKind.STRING: - return value.toString(); - case JSONValueKind.NUMBER: - return value.toBigInt().toHexString(); - default: - return _default; - } -} diff --git a/tea.yaml b/tea.yaml deleted file mode 100644 index 9494e8cdf..000000000 --- a/tea.yaml +++ /dev/null @@ -1,9 +0,0 @@ -# https://tea.xyz/what-is-this-file ---- -version: 1.0.0 -codeOwners: - - '0x79AEf56BD3569b8Fc720Fa2c04878582E14b51AE' # jaybuidl - - '0xb66b98fd235c88cbE923759d0Dfe7D5bf44eFA19' # alcercu - - '0xE0836714d42d5aA57d624EE5D72a9f87D9201335' # kemuru - - '0x406eB1dD2A418686C1861a324D45ef2f12c30bB2' # harman-singh-waraich -quorum: 1 diff --git a/tsconfig/.eslintrc b/tsconfig/.eslintrc deleted file mode 100644 index c224a7c23..000000000 --- a/tsconfig/.eslintrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["@council/eslint-config"] -} diff --git a/tsconfig/README.md b/tsconfig/README.md deleted file mode 100644 index 0da79cf23..000000000 --- a/tsconfig/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `tsconfig` - -These are base shared `tsconfig.json`s from which all other `tsconfig.json`'s inherit from. diff --git a/tsconfig/base18.json b/tsconfig/base18.json deleted file mode 100644 index 8436dd693..000000000 --- a/tsconfig/base18.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "@tsconfig/node18/tsconfig.json", - "compilerOptions": { - "outDir": "dist" - }, - "exclude": [ - "node_modules" - ] -} diff --git a/tsconfig/base20.json b/tsconfig/base20.json deleted file mode 100644 index 45fcb964c..000000000 --- a/tsconfig/base20.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "@tsconfig/node20/tsconfig.json", - "compilerOptions": { - "outDir": "dist" - }, - "exclude": [ - "node_modules" - ] -} diff --git a/tsconfig/package.json b/tsconfig/package.json deleted file mode 100644 index 034b486ed..000000000 --- a/tsconfig/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "@kleros/kleros-v2-tsconfig", - "version": "1.0.0", - "private": true, - "files": [ - "base18.json", - "base20.json" - ], - "devDependencies": { - "@kleros/kleros-v2-eslint-config": "*", - "@tsconfig/node18": "^18.2.4", - "@tsconfig/node20": "^20.1.5", - "eslint": "^9.15.0" - } -} diff --git a/tsconfig/react-library.json b/tsconfig/react-library.json deleted file mode 100644 index 81ef5ffa7..000000000 --- a/tsconfig/react-library.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "display": "React Library", - "extends": "./base20.json", - "compilerOptions": { - "jsx": "react", - "lib": [ - "es6", - "dom", - "esnext.asynciterable", - "es2023" - ], - "module": "ESNext", - "target": "es6" - } -} diff --git a/web-devtools/.editorconfig b/web-devtools/.editorconfig deleted file mode 100644 index 332275afb..000000000 --- a/web-devtools/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -root = true - -[*] -end_of_line = lf -trim_trailing_whitespace = true -insert_final_newline = true -charset = utf-8 - -[*.{html,js,.json,mjs,rjson,ts}] -indent_style = space -indent_size = 2 - -[*.sol] -indent_style = space -indent_size = 4 diff --git a/web-devtools/.env.devnet-neo.public b/web-devtools/.env.devnet-neo.public deleted file mode 120000 index 8b5dd2848..000000000 --- a/web-devtools/.env.devnet-neo.public +++ /dev/null @@ -1 +0,0 @@ -../web/.env.devnet-neo.public \ No newline at end of file diff --git a/web-devtools/.env.devnet-university.public b/web-devtools/.env.devnet-university.public deleted file mode 120000 index 211635ced..000000000 --- a/web-devtools/.env.devnet-university.public +++ /dev/null @@ -1 +0,0 @@ -../web/.env.devnet-university.public \ No newline at end of file diff --git a/web-devtools/.env.devnet.public b/web-devtools/.env.devnet.public deleted file mode 120000 index 275502967..000000000 --- a/web-devtools/.env.devnet.public +++ /dev/null @@ -1 +0,0 @@ -../web/.env.devnet.public \ No newline at end of file diff --git a/web-devtools/.env.local.example b/web-devtools/.env.local.example deleted file mode 100644 index acab203c2..000000000 --- a/web-devtools/.env.local.example +++ /dev/null @@ -1,6 +0,0 @@ -# Do not enter sensitive information here. -export NEXT_PUBLIC_ALCHEMY_API_KEY= -export NEXT_PUBLIC_DEPLOYMENT=devnet -export NEXT_PUBLIC_CORE_SUBGRAPH=https://api.studio.thegraph.com/query/61738/kleros-v2-core-devnet/version/latest -export NEXT_PUBLIC_DRT_ARBSEPOLIA_SUBGRAPH=https://api.studio.thegraph.com/query/61738/kleros-v2-drt-arbisep-devnet/version/latest -export NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID= \ No newline at end of file diff --git a/web-devtools/.gitignore b/web-devtools/.gitignore deleted file mode 100644 index 5aa6001da..000000000 --- a/web-devtools/.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -# dependencies -/.yarn/* -!/.yarn/versions -!/.yarn/plugins -!/.yarn/releases -!/.yarn/sdks -/.pnp.* -node_modules - -# next.js -/.next/ -/out/ -development -build -dist - -# misc -*.pem -.eslintcache -.DS_Store -.env -.env.test -.env.testnet -.env.devnet -.env.local -.env.development.local -.env.test.local -.env.production.local -.env.devnet-university - -# generated code -src/hooks/contracts/generated.ts -src/graphql-generated -generatedGitInfo.json -generatedNetlifyInfo.json - -# logs -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# testing -/coverage - -# typescript -*.tsbuildinfo -next-env.d.ts - -.env* -.flaskenv* -!.env.project -!.env.vault \ No newline at end of file diff --git a/web-devtools/LICENSE b/web-devtools/LICENSE deleted file mode 100644 index 469d9f99c..000000000 --- a/web-devtools/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 Kleros - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/web-devtools/README.md b/web-devtools/README.md deleted file mode 100644 index ef1660604..000000000 --- a/web-devtools/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Dev Tools Frontend - -In construction diff --git a/web-devtools/codegen.ts b/web-devtools/codegen.ts deleted file mode 100644 index 48a5af00c..000000000 --- a/web-devtools/codegen.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { CodegenConfig } from "@graphql-codegen/cli"; - -import { getGraphqlUrl } from "./src/utils/getGraphqlUrl"; - -const config: CodegenConfig = { - overwrite: true, - schema: [getGraphqlUrl(false), getGraphqlUrl(true)], - documents: "./src/hooks/queries/*.ts", - generates: { - "./src/graphql-generated/": { - preset: "client", - }, - }, -}; - -export default config; diff --git a/web-devtools/eslint.config.mjs b/web-devtools/eslint.config.mjs deleted file mode 100644 index db3aa1a3d..000000000 --- a/web-devtools/eslint.config.mjs +++ /dev/null @@ -1,184 +0,0 @@ -import { fixupConfigRules, fixupPluginRules } from "@eslint/compat"; -import react from "eslint-plugin-react"; -import reactHooks from "eslint-plugin-react-hooks"; -import security from "eslint-plugin-security"; -import _import from "eslint-plugin-import"; -import globals from "globals"; -import tsParser from "@typescript-eslint/parser"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import js from "@eslint/js"; -import { FlatCompat } from "@eslint/eslintrc"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all, -}); - -export default [ - { - ignores: ["src/assets", "src/hooks/contracts/generated.ts", "src/graphql-generated/**/*.ts"], - }, - ...fixupConfigRules( - compat.extends( - "next/core-web-vitals", - "eslint:recommended", - "plugin:react/recommended", - "plugin:react-hooks/recommended", - "plugin:import/recommended", - "plugin:import/react", - "plugin:@typescript-eslint/recommended", - "plugin:prettier/recommended", - "prettier" - ) - ), - { - plugins: { - react: fixupPluginRules(react), - "react-hooks": fixupPluginRules(reactHooks), - security: fixupPluginRules(security), - }, - - languageOptions: { - globals: { - ...globals.browser, - ...globals.node, - Atomics: "readonly", - SharedArrayBuffer: "readonly", - }, - - parser: tsParser, - ecmaVersion: 2020, - sourceType: "module", - - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - }, - }, - - settings: { - react: { - version: "^16.12.0", - }, - - "import/resolver": { - typescript: { - alwaysTryTypes: true, - project: "./tsconfig.json", - }, - - node: { - extensions: [".js", ".jsx", ".ts", ".tsx"], - }, - }, - }, - - rules: { - "max-len": [ - "warn", - { - code: 120, - }, - ], - - "react/prop-types": 0, - "no-unused-vars": "off", - - "@typescript-eslint/no-unused-vars": [ - "error", - { - varsIgnorePattern: "(^_+[0-9]*$)|([iI]gnored$)|(^ignored)", - argsIgnorePattern: "(^_+[0-9]*$)|([iI]gnored$)|(^ignored)", - }, - ], - - "no-console": [ - "error", - { - allow: ["warn", "error", "info", "debug"], - }, - ], - - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-explicit-any": "off", - "security/detect-object-injection": "off", - "security/detect-non-literal-fs-filename": "off", - - "import/extensions": [ - "error", - "ignorePackages", - { - js: "never", - jsx: "never", - ts: "never", - tsx: "never", - }, - ], - - "import/no-unresolved": "off", - - "import/order": [ - "warn", - { - groups: ["builtin", "external", "internal", "parent", "sibling", "index"], - - pathGroups: [ - { - pattern: "{react,styled-components}", - group: "external", - position: "before", - }, - { - pattern: "@kleros/**", - group: "external", - position: "after", - }, - { - pattern: "{svgs/**,assets/**}", - group: "internal", - position: "after", - }, - { - pattern: "{hooks/**,utils/**,consts/**,types/**,context/**,connectors/**,}", - group: "internal", - position: "after", - }, - { - pattern: "{queries/**,}", - group: "internal", - position: "after", - }, - { - pattern: "{src/**,}", - group: "internal", - position: "after", - }, - { - pattern: "{styles/**,}", - group: "internal", - position: "after", - }, - { - pattern: "{layout/**,pages/**,components/**,}", - group: "internal", - position: "after", - }, - ], - - pathGroupsExcludedImportTypes: ["builtin"], - "newlines-between": "always", - - alphabetize: { - order: "asc", - caseInsensitive: true, - }, - }, - ], - }, - }, -]; diff --git a/web-devtools/global.d.ts b/web-devtools/global.d.ts deleted file mode 100644 index 09cc2ad78..000000000 --- a/web-devtools/global.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { DefaultTheme } from "styled-components"; -import { theme } from "styles/Theme"; -declare module "styled-components" { - type Theme = typeof theme; - export interface DefaultTheme extends Theme {} -} diff --git a/web-devtools/netlify.toml b/web-devtools/netlify.toml deleted file mode 100644 index f6ba62c58..000000000 --- a/web-devtools/netlify.toml +++ /dev/null @@ -1,11 +0,0 @@ -## Yarn 3 cache does not work out of the box as of Jan 2022. Context: -## https://github.com/netlify/build/issues/1535#issuecomment-1021947989 -[build.environment] -NETLIFY_USE_YARN = "true" -NETLIFY_YARN_WORKSPACES = "true" -YARN_ENABLE_GLOBAL_CACHE = "true" -# YARN_CACHE_FOLDER = "$HOME/.yarn_cache" -# YARN_VERSION = "3.2.0" - -[dev] -framework = "nextjs" \ No newline at end of file diff --git a/web-devtools/next.config.mjs b/web-devtools/next.config.mjs deleted file mode 100644 index 576875c28..000000000 --- a/web-devtools/next.config.mjs +++ /dev/null @@ -1,43 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - compiler: { - styledComponents: true, - }, - typescript: { - // !! WARN !! - // Dangerously allow production builds to successfully complete even if - // your project has type errors. - // !! WARN !! - // ignoreBuildErrors: true, - }, - webpack(config) { - // Grab the existing rule that handles SVG imports - const fileLoaderRule = config.module.rules.find((rule) => rule.test?.test?.(".svg")); - if (!fileLoaderRule) { - throw new Error("Could not find the existing SVG rule to modify."); - } - - config.module.rules.push( - // Reapply the existing rule, but only for svg imports ending in ?url - { - ...fileLoaderRule, - test: /\.svg$/i, - resourceQuery: /url/, // *.svg?url - }, - // Convert all other *.svg imports to React components - { - test: /\.svg$/i, - issuer: fileLoaderRule.issuer, - resourceQuery: { not: [...fileLoaderRule.resourceQuery.not, /url/] }, // exclude if *.svg?url - use: ["@svgr/webpack"], - } - ); - - // Modify the file loader rule to ignore *.svg, since we have it handled now. - fileLoaderRule.exclude = /\.svg$/i; - - return config; - }, -}; - -export default nextConfig; diff --git a/web-devtools/package.json b/web-devtools/package.json deleted file mode 100644 index 449163ba6..000000000 --- a/web-devtools/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "@kleros/kleros-v2-web-devtools", - "version": "0.1.0", - "source": "src/index.html", - "browserslist": "> 0.5%, not dead", - "repository": "", - "author": "", - "license": "MIT", - "type": "module", - "volta": { - "node": "20.18.3", - "yarn": "4.6.0" - }, - "scripts": { - "clean": "rimraf .next src/graphql-generated src/hooks/contracts/generated.ts", - "dev": "scripts/runEnv.sh local 'yarn generate && next dev'", - "start": "scripts/runEnv.sh local 'yarn generate && next start'", - "build": "scripts/runEnv.sh local 'yarn generate && next build'", - "build-netlify": "yarn generate && next build", - "lint": "next lint", - "generate": "yarn generate:gql && yarn generate:hooks", - "generate:gql": "graphql-codegen", - "generate:hooks": "NODE_NO_WARNINGS=1 wagmi generate" - }, - "prettier": "@kleros/kleros-v2-prettier-config", - "devDependencies": { - "@graphql-codegen/cli": "^5.0.3", - "@graphql-codegen/client-preset": "^4.5.1", - "@svgr/webpack": "^8.1.0", - "@types/node": "^20.17.6", - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", - "@types/react-is": "^18.3.0", - "@types/styled-components": "^5.1.34", - "@typescript-eslint/eslint-plugin": "^8.15.0", - "@typescript-eslint/parser": "^8.15.0", - "@typescript-eslint/utils": "^8.15.0", - "@wagmi/cli": "^2.2.0", - "eslint": "^9.15.0", - "eslint-config-next": "^15.0.3", - "eslint-config-prettier": "^9.1.0", - "eslint-import-resolver-typescript": "^3.6.3", - "eslint-plugin-react": "^7.37.2", - "eslint-plugin-react-hooks": "^5.0.0", - "rimraf": "^6.0.1", - "ts-node": "^10.9.2", - "typescript": "^5.6.3" - }, - "dependencies": { - "@codemirror/state": "^6.5.2", - "@coinbase/wallet-sdk": "^4.3.2", - "@kleros/kleros-sdk": "workspace:^", - "@kleros/kleros-v2-contracts": "workspace:^", - "@kleros/ui-components-library": "^2.20.0", - "@reown/appkit": "^1.7.1", - "@reown/appkit-adapter-wagmi": "^1.7.1", - "@tanstack/react-query": "^5.69.0", - "@wagmi/connectors": "^5.7.11", - "@wagmi/core": "^2.16.7", - "@yornaath/batshit": "^0.10.0", - "graphql": "^16.9.0", - "graphql-request": "^7.1.2", - "next": "14.2.28", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-is": "^18.3.1", - "react-loading-skeleton": "^3.5.0", - "react-markdown": "^9.0.1", - "react-toastify": "^10.0.6", - "react-use": "^17.5.1", - "styled-components": "^5.3.3", - "typewriter-effect": "^2.21.0", - "vanilla-jsoneditor": "^3.3.1", - "viem": "^2.24.1", - "wagmi": "^2.14.15" - } -} diff --git a/web-devtools/scripts/runEnv.sh b/web-devtools/scripts/runEnv.sh deleted file mode 100755 index 25f8a2031..000000000 --- a/web-devtools/scripts/runEnv.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" -RED='\033[0;31m' -GREEN='\033[0;32m' -NC='\033[0m' - -deployment="$1" -shift -commands="$*" - -if [[ -z "$deployment" ]]; then - echo "usage: $(basename "$0") <local|devnet|devnet-neo|devnet-university|testnet|mainnet-neo>" - exit 1 -fi - -valid_deployments=("local" "devnet" "devnet-neo" "devnet-university" "testnet" "mainnet-neo") -if [[ ! " ${valid_deployments[*]} " =~ ${deployment} ]]; then - echo "Invalid deployment option. Please choose either: ${valid_deployments[*]}." - exit 1 -fi - -function sourceEnvFile() { #envFile - local envFile="$1" - if [ -f "$envFile" ]; then - echo -e "${GREEN}✔${NC} $(basename "$envFile")" - # shellcheck source=SCRIPTDIR/../.env.devnet - . "$envFile" - else - echo -e "${RED}✖${NC} $(basename "$envFile")" - fi -} - -envFile="$SCRIPT_DIR/../.env.${deployment}" -sourceEnvFile "$envFile.public" -sourceEnvFile "$envFile" - -eval "$commands" diff --git a/web-devtools/src/app/(main)/(homepage)/Header.tsx b/web-devtools/src/app/(main)/(homepage)/Header.tsx deleted file mode 100644 index d2e9a21d6..000000000 --- a/web-devtools/src/app/(main)/(homepage)/Header.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import Typewriter from "typewriter-effect"; - -import { responsiveSize } from "styles/responsiveSize"; - -const StyledHeader = styled.div` - display: flex; - justify-content: space-between; -`; - -const StyledH1 = styled.h1` - display: flex; - gap: 8px; - font-size: ${responsiveSize(21, 24)}; - font-weight: 500; - margin-bottom: 48px; - letter-spacing: 1px; -`; - -const TypewriterContainer = styled.div` - .typewriter-text { - color: ${({ theme }) => theme.klerosUIComponentsSecondaryPurple}; - } -`; - -const Header: React.FC = () => { - const Phrases = ["Manage Courts", "Get Insights", "Edit Dispute Templates", "Get PNK Faucets", "Boost productivity"]; - - return ( - <StyledHeader> - <StyledH1> - Developer Toolkit: - <TypewriterContainer> - <Typewriter - options={{ - strings: Phrases, - autoStart: true, - loop: true, - wrapperClassName: "typewriter-text", - }} - /> - </TypewriterContainer> - </StyledH1> - </StyledHeader> - ); -}; - -export default Header; diff --git a/web-devtools/src/app/(main)/(homepage)/Tools.tsx b/web-devtools/src/app/(main)/(homepage)/Tools.tsx deleted file mode 100644 index f656fff4b..000000000 --- a/web-devtools/src/app/(main)/(homepage)/Tools.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import Link from "next/link"; - -import PaperIcon from "svgs/icons/arrow.svg"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - gap: 16px; - border-top: 3px solid ${({ theme }) => theme.klerosUIComponentsSecondaryPurple}; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - background-color: ${({ theme }) => theme.klerosUIComponentsWhiteBackground}; - padding: 16px; -`; - -const ToolList = styled.div` - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 8px; - width: 100%; - @media (max-width: 768px) { - grid-template-columns: 1fr; - } -`; - -const ToolItem = styled.li` - display: flex; - align-items: center; - gap: 8px; - padding: 16px 16px; - border: 1px solid ${({ theme }) => theme.klerosUIComponentsLightBlue}; - border-radius: 3px; - background-color: ${({ theme }) => theme.klerosUIComponentsLightBackground}; - width: 100%; - transition: background-color 0.3s; -`; - -const ToolLink = styled.div` - display: flex; - align-items: center; - text-decoration: none; - gap: 8px; - color: ${({ theme }) => theme.klerosUIComponentsSecondaryText}; - width: 100%; -`; - -const SVGContainer = styled.div` - display: flex; - align-items: center; - justify-content: center; - svg { - fill: ${({ theme }) => theme.klerosUIComponentsSecondaryPurple}; - height: 12px; - width: 12px; - } -`; - -const ToolName = styled.span` - font-size: 16px; -`; - -const tools = [ - { name: "Dispute Templates Preview", route: "/dispute-template" }, - { name: "Configure Ruler", route: "/ruler" }, - { name: "Courts Manager (coming soon)", route: "/" }, - { name: "Arbitrable Explorer (coming soon)", route: "/" }, -]; - -const Tools: React.FC = () => { - return ( - <Container> - <p>Tools</p> - <ToolList> - {tools.map((tool, index) => ( - <ToolItem key={index}> - <Link href={tool.route} passHref> - <ToolLink> - <SVGContainer> - <PaperIcon /> - </SVGContainer> - <ToolName>{tool.name}</ToolName> - </ToolLink> - </Link> - </ToolItem> - ))} - </ToolList> - </Container> - ); -}; - -export default Tools; diff --git a/web-devtools/src/app/(main)/(homepage)/page.tsx b/web-devtools/src/app/(main)/(homepage)/page.tsx deleted file mode 100644 index af318eed5..000000000 --- a/web-devtools/src/app/(main)/(homepage)/page.tsx +++ /dev/null @@ -1,32 +0,0 @@ -"use client"; -import React from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -import HeroImage from "components/HeroImage"; - -import Header from "./Header"; -import Tools from "./Tools"; - -const Container = styled.div` - width: 100%; - background-color: ${({ theme }) => theme.klerosUIComponentsLightBackground}; - padding: ${responsiveSize(32, 72)} ${responsiveSize(8, 132)} ${responsiveSize(76, 96)}; - max-width: 1780px; - margin: 0 auto; -`; - -const Home: React.FC = () => { - return ( - <div> - <HeroImage /> - <Container> - <Header /> - <Tools /> - </Container> - </div> - ); -}; - -export default Home; diff --git a/web-devtools/src/app/(main)/dispute-template/CustomContextInputs.tsx b/web-devtools/src/app/(main)/dispute-template/CustomContextInputs.tsx deleted file mode 100644 index b13af9d4b..000000000 --- a/web-devtools/src/app/(main)/dispute-template/CustomContextInputs.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import React, { useMemo, useState } from "react"; -import styled from "styled-components"; - -import { useDebounce } from "react-use"; - -import retrieveVariables from "@kleros/kleros-sdk/src/dataMappings/utils/retrieveVariables"; -import { Field } from "@kleros/ui-components-library"; - -import WithHelpTooltip from "components/WithHelpTooltip"; - -const Container = styled.div` - width: 100%; - display: flex; - flex-direction: column; - gap: 16px; - margin-top: 32px; -`; - -const Header = styled.h2` - margin: 0; -`; - -const InputContainer = styled.div` - display: flex; - gap: 16px; - flex-wrap: wrap; -`; -const VariableName = styled.p` - font-family: "Roboto Mono", monospace; -`; - -// prevent duplicating input fields -const DisputeRequestParams = [ - "arbitrator", - "arbitrable", - "arbitratorDisputeID", - "externalDisputeID", - "templateID", - "templateUri", -]; - -interface ICustomContextInputs { - dataMapping: string; - setCustomContext: (context: Record<string, string>) => void; -} -const CustomContextInputs: React.FC<ICustomContextInputs> = ({ dataMapping, setCustomContext }) => { - const [customContextInputs, setCustomContextInputs] = useState<Record<string, string>>(); - - const requiredVariables = useMemo(() => { - try { - return retrieveVariables(dataMapping); - } catch (error) { - console.error("Failed to parse dataMapping:", error); - return []; - } - }, [dataMapping]); - - useDebounce( - () => { - if (!customContextInputs) return; - setCustomContext(customContextInputs); - }, - 300, - [customContextInputs] - ); - - return requiredVariables.length ? ( - <Container> - <WithHelpTooltip tooltipMsg="These are additional variables required by the data mapping to be passed as initial context. Please ignore the variables that will come from the result of the preceeding data mappings"> - <Header>Additional Context</Header> - </WithHelpTooltip> - {requiredVariables.map((variable, index) => - DisputeRequestParams.includes(variable) ? null : ( - <InputContainer key={`${variable}-${index}`}> - <VariableName>{variable}:</VariableName> - <Field - type="text" - name={variable} - value={customContextInputs?.[variable]} - onChange={(e) => { - setCustomContextInputs((prev) => ({ ...prev, [variable]: e.target.value })); - }} - placeholder="0x..." - /> - </InputContainer> - ) - )} - </Container> - ) : null; -}; - -export default CustomContextInputs; diff --git a/web-devtools/src/app/(main)/dispute-template/FetchDisputeRequestInput.tsx b/web-devtools/src/app/(main)/dispute-template/FetchDisputeRequestInput.tsx deleted file mode 100644 index a14d08133..000000000 --- a/web-devtools/src/app/(main)/dispute-template/FetchDisputeRequestInput.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import React, { useEffect, useState } from "react"; -import styled from "styled-components"; - -import { useDebounce } from "react-use"; -import { type GetEventArgs } from "viem"; - -import { Field } from "@kleros/ui-components-library"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { iArbitrableV2Abi } from "hooks/contracts/generated"; -import { getDisputeRequestParamsFromTxn } from "utils/getDisputeRequestParamsFromTxn"; -import { isUndefined } from "utils/isUndefined"; - -const Container = styled.div` - display: flex; - flex-direction: column; - margin-top: 24px; - margin-left: 24px; -`; -const InputContainer = styled.div` - display: flex; - flex-wrap: wrap; - gap: 8px; -`; -const StyledChainInput = styled(Field)` - width: 120px; -`; -const StyledHeader = styled.h2` - margin-top: 24px; -`; - -const StyledH3 = styled.h3` - margin-top: 28px; -`; - -const PresetsContainer = styled.div` - display: flex; - gap: 16px; - flex-wrap: wrap; -`; - -const StyledA = styled.a` - cursor: pointer; -`; - -const presets = [ - { - title: "Dispute Resolver - Compensation Claim", - txnHash: "0x01db1d330acef1a0df007b0f9dcb56b7a88aeb49687f95cb5c58d5c36526ef70", - chainId: 42161, - }, -]; - -export type DisputeRequest = GetEventArgs<typeof iArbitrableV2Abi, "DisputeRequest", { IndexedOnly: false }> & { - _arbitrable: `0x${string}`; -}; - -interface IFetchDisputeRequestInput { - setParams: (params: DisputeRequest) => void; -} - -const FetchDisputeRequestInput: React.FC<IFetchDisputeRequestInput> = ({ setParams }) => { - const [chainId, setChainId] = useState<number>(DEFAULT_CHAIN); - const [txnHash, setTxnHash] = useState<string>(""); - const [debouncedTxnHash, setDebouncedTxnHash] = useState<string>(""); - const [loading, setLoading] = useState(false); - const [error, setError] = useState<string | null>(null); - - useDebounce( - () => { - setDebouncedTxnHash(txnHash); - }, - 1000, - [txnHash] - ); - - useEffect(() => { - const fetchData = async () => { - setLoading(true); - try { - const params = await getDisputeRequestParamsFromTxn(debouncedTxnHash as `0x${string}`, chainId); - if (!isUndefined(params)) setParams(params); - setError(null); - } catch (error) { - console.error("Error fetching dispute request params:", error); - setError("Failed to fetch dispute request parameters"); - } finally { - setLoading(false); - } - }; - if (debouncedTxnHash && chainId) fetchData(); - }, [debouncedTxnHash, chainId]); - - return ( - <Container> - <StyledHeader>Fetch Dispute Request params from transaction</StyledHeader> - <InputContainer> - <Field - value={txnHash} - placeholder="Enter transaction hash" - onChange={(e) => setTxnHash(e.target.value)} - message={loading ? "fetching ..." : error || ""} - /> - <StyledChainInput - value={chainId} - placeholder="Enter chain Id" - type="number" - onChange={(e: React.ChangeEvent<HTMLInputElement>) => setChainId(Number(e.target.value))} - /> - </InputContainer> - <StyledH3>Presets</StyledH3> - <PresetsContainer> - {presets.map((preset) => ( - <StyledA - key={preset.txnHash} - onClick={() => { - setTxnHash(preset.txnHash); - setChainId(preset.chainId); - }} - > - {preset.title} - </StyledA> - ))} - </PresetsContainer> - </Container> - ); -}; - -export default FetchDisputeRequestInput; diff --git a/web-devtools/src/app/(main)/dispute-template/FetchFromIdInput.tsx b/web-devtools/src/app/(main)/dispute-template/FetchFromIdInput.tsx deleted file mode 100644 index 2456b23cd..000000000 --- a/web-devtools/src/app/(main)/dispute-template/FetchFromIdInput.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import React, { useEffect, useState } from "react"; -import styled from "styled-components"; - -import { useDebounce } from "react-use"; - -import { Field } from "@kleros/ui-components-library"; - -import { useDisputeTemplateFromId } from "hooks/queries/useDisputeTemplateFromId"; -import { isUndefined } from "utils/isUndefined"; - -const Container = styled.div` - display: flex; - flex-direction: column; - margin-top: 24px; - margin-left: 24px; -`; - -const StyledInput = styled(Field)``; -const StyledHeader = styled.h2` - margin-top: 24px; -`; - -interface IFetchFromID { - setDisputeTemplateInput: (templateData: string) => void; - setDataMappingsInput: (dataMappings: string) => void; - defaultTemplateID: string; -} - -const FetchFromIDInput: React.FC<IFetchFromID> = ({ - setDisputeTemplateInput, - setDataMappingsInput, - defaultTemplateID = "", -}) => { - const [templateId, setTemplateId] = useState<string>(""); - const [debouncedTemplateId, setDebouncedTemplateId] = useState<string>(""); - useDebounce( - () => { - setDebouncedTemplateId(templateId); - }, - 1000, - [templateId] - ); - useEffect(() => setTemplateId(defaultTemplateID), [defaultTemplateID]); - const { data: templateFromId, isLoading, error } = useDisputeTemplateFromId(debouncedTemplateId); - - useEffect(() => { - const templateData = templateFromId?.disputeTemplate?.templateData; - const templateDataMappings = templateFromId?.disputeTemplate?.templateDataMappings; - if (!isUndefined(templateData)) setDisputeTemplateInput(tryPrettify(templateData)); - if (!isUndefined(templateDataMappings)) setDataMappingsInput(tryPrettify(templateDataMappings)); - if (error) { - console.error("Error fetching template:", error); - } - }, [templateFromId, error]); - - return ( - <Container> - <StyledHeader>Fetch dispute template from template ID</StyledHeader> - <StyledInput - value={templateId} - placeholder="Enter template Id" - message={isLoading ? "fetching ..." : ""} - onChange={(e: React.ChangeEvent<HTMLInputElement>) => setTemplateId(e.target.value)} - /> - </Container> - ); -}; -// will try to format else will be repaired in editor -const tryPrettify = (text: string) => { - try { - return JSON.stringify(JSON.parse(text), null, 2); - } catch { - return text; - } -}; -export default FetchFromIDInput; diff --git a/web-devtools/src/app/(main)/dispute-template/page.tsx b/web-devtools/src/app/(main)/dispute-template/page.tsx deleted file mode 100644 index e1522060b..000000000 --- a/web-devtools/src/app/(main)/dispute-template/page.tsx +++ /dev/null @@ -1,374 +0,0 @@ -"use client"; -import React, { useEffect, useState } from "react"; -import styled, { css } from "styled-components"; - -import Skeleton from "react-loading-skeleton"; -import { useDebounce } from "react-use"; -import { Mode } from "vanilla-jsoneditor"; - -import { executeActions } from "@kleros/kleros-sdk/src/dataMappings/executeActions"; -import { Answer, DisputeDetails } from "@kleros/kleros-sdk/src/dataMappings/utils/disputeDetailsTypes"; -import { populateTemplate } from "@kleros/kleros-sdk/src/dataMappings/utils/populateTemplate"; -import { Field } from "@kleros/ui-components-library"; - -import PolicyIcon from "svgs/icons/policy.svg"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { INVALID_DISPUTE_DATA_ERROR } from "consts/index"; -import { klerosCoreConfig } from "hooks/contracts/generated"; -import { getIpfsUrl } from "utils/getIpfsUrl"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import JSONEditor from "components/JSONEditor"; -import ReactMarkdown from "components/ReactMarkdown"; - -import FetchDisputeRequestInput, { DisputeRequest } from "./FetchDisputeRequestInput"; -import FetchFromIDInput from "./FetchFromIdInput"; -import CustomContextInputs from "./CustomContextInputs"; -import { debounceErrorToast } from "utils/debounceErrorToast"; -import { isEmpty } from "utils/isEmpty"; - -const Container = styled.div` - height: auto; - display: flex; - flex-direction: column; - gap: 16px; - - > h1 { - margin: 0; - } - - > hr { - width: 100%; - } -`; - -const QuestionAndDescription = styled.div` - display: flex; - flex-direction: column; - > * { - margin: 0px; - } -`; - -const VotingOptions = styled(QuestionAndDescription)` - display: flex; - flex-direction: column; - > span { - margin: 0px; - display: flex; - gap: 8px; - } -`; - -const ShadeArea = styled.div` - width: 100%; - padding: 16px; - margin-top: 16px; - background-color: ${({ theme }) => theme.klerosUIComponentsMediumBlue}; - > p { - margin-top: 0; - } -`; - -const StyledA = styled.a` - display: flex; - align-items: center; - gap: 4px; - > svg { - width: 16px; - fill: ${({ theme }) => theme.klerosUIComponentsPrimaryBlue}; - } -`; - -const LinkContainer = styled.div` - display: flex; - justify-content: space-between; -`; - -const LongTextSections = styled.div` - min-height: calc(100vh - 144px); - margin: 24px; - display: flex; - gap: 12px; - flex-direction: column; - ${landscapeStyle( - () => css` - flex-direction: row; - ` - )} -`; -const UpperContainer = styled.div` - display: grid; - grid-template-columns: 1fr; - ${landscapeStyle( - () => css` - grid-template-columns: 1fr 1fr; - ` - )} -`; - -const StyledForm = styled.form` - display: flex; - flex-direction: column; - justify-content: center; - margin-top: 24px; - margin-left: 24px; -`; - -const StyledRow = styled.div` - display: flex; - flex-direction: column; - ${landscapeStyle( - () => css` - flex-direction: row; - gap: 24px; - ` - )} -`; - -const StyledP = styled.p` - font-family: "Roboto Mono", monospace; -`; - -const StyledHeader = styled.h2` - margin-top: 24px; -`; - -const StyledTitle = styled.div` - margin-top: 16px; - display: flex; - justify-content: center; - align-items: center; -`; - -const LongText = styled.div` - display: flex; - flex-direction: column; - width: auto; -`; - -const DisputeTemplateView = () => { - const klerosCoreAddress = klerosCoreConfig.address[DEFAULT_CHAIN as keyof typeof klerosCoreConfig.address]; - const [disputeDetails, setDisputeDetails] = useState<DisputeDetails | undefined>(undefined); - const [disputeTemplateInput, setDisputeTemplateInput] = useState<string>(""); - const [dataMappingsInput, setDataMappingsInput] = useState<string>(""); - const [customContext, setCustomContext] = useState<Record<string, string>>(); - - const [params, setParams] = useState<DisputeRequest>({ - _arbitrable: "0x10f7A6f42Af606553883415bc8862643A6e63fdA", - _arbitrator: klerosCoreAddress as `0x${string}`, - }); - const [debouncedParams, setDebouncedParams] = useState(params); - const [loading, setLoading] = useState(false); - - useDebounce(() => setDebouncedParams(params), 350, [params]); - - const handleFormUpdate = (event: React.ChangeEvent<HTMLInputElement>) => { - const value = ["_arbitrator", "_arbitrable", "_templateUri"].includes(event.target.name) - ? event.target.value - : BigInt(event.target.value); - - setParams({ ...params, [event.target.name]: value }); - }; - - useEffect(() => { - let isFetchDataScheduled = false; - - const scheduleFetchData = () => { - if (!isFetchDataScheduled) { - isFetchDataScheduled = true; - - setLoading(true); - - setTimeout(() => { - let initialContext = { - arbitrator: debouncedParams._arbitrator, - arbitrable: debouncedParams._arbitrable, - arbitratorDisputeID: debouncedParams._arbitratorDisputeID, - externalDisputeID: debouncedParams._externalDisputeID, - templateID: debouncedParams._templateId, - templateUri: debouncedParams._templateUri, - }; - - if (customContext) initialContext = { ...initialContext, ...customContext }; - - const fetchData = async () => { - if (isEmpty(disputeTemplateInput)) return; - try { - const data = dataMappingsInput ? await executeActions(JSON.parse(dataMappingsInput), initialContext) : {}; - const finalDisputeDetails = populateTemplate(disputeTemplateInput, data); - setDisputeDetails(finalDisputeDetails); - } catch (e: any) { - console.error(e); - debounceErrorToast(e?.message); - setDisputeDetails(undefined); - } finally { - setLoading(false); - } - }; - - fetchData(); - - isFetchDataScheduled = false; - }, 350); - } - }; - - if (disputeTemplateInput || dataMappingsInput || debouncedParams) { - scheduleFetchData(); - } - }, [disputeTemplateInput, dataMappingsInput, debouncedParams, customContext]); - - return ( - <> - <StyledTitle> - <h1>Dispute Preview</h1> - </StyledTitle> - <UpperContainer> - <StyledForm> - <StyledHeader>Dispute Request event parameters</StyledHeader> - <StyledRow> - <StyledP>{"arbitrator :"}</StyledP> - <Field - type="text" - name="_arbitrator" - value={params._arbitrator} - onChange={handleFormUpdate} - placeholder="0x..." - /> - </StyledRow> - <StyledRow> - <StyledP>{"arbitrable :"}</StyledP> - <Field - type="text" - name="_arbitrable" - value={params._arbitrable} - onChange={handleFormUpdate} - placeholder="0x..." - /> - </StyledRow> - <StyledRow> - <StyledP>{"arbitratorDisputeID :"}</StyledP> - <Field - type="text" - name="_arbitratorDisputeID" - value={params._arbitratorDisputeID?.toString()} - onChange={handleFormUpdate} - placeholder="0" - /> - </StyledRow> - <StyledRow> - <StyledP>{"externalDisputeID :"}</StyledP> - <Field - type="text" - name="_externalDisputeID" - value={params._externalDisputeID?.toString()} - onChange={handleFormUpdate} - placeholder="0" - /> - </StyledRow> - <StyledRow> - <StyledP>{"templateID :"}</StyledP> - <Field - type="text" - name="_templateId" - value={params._templateId?.toString()} - onChange={handleFormUpdate} - placeholder="0" - /> - </StyledRow> - <StyledRow> - <StyledP>{"templateUri :"}</StyledP> - <Field - type="text" - name="_templateUri" - value={params._templateUri} - onChange={handleFormUpdate} - placeholder="/ipfs/... (optional)" - /> - </StyledRow> - <StyledRow> - <CustomContextInputs dataMapping={dataMappingsInput} setCustomContext={setCustomContext} /> - </StyledRow> - </StyledForm> - <div> - <FetchFromIDInput - {...{ setDataMappingsInput, setDisputeTemplateInput }} - defaultTemplateID={debouncedParams._templateId?.toString() ?? ""} - /> - <FetchDisputeRequestInput setParams={setParams} /> - </div> - </UpperContainer> - - <LongTextSections> - <LongText> - <StyledHeader>Template</StyledHeader> - <JSONEditor - content={{ text: disputeTemplateInput }} - mode={Mode.text} - onChange={(val: any) => { - setDisputeTemplateInput(val.text); - }} - /> - </LongText> - <LongText> - <StyledHeader>Data Mapping</StyledHeader> - <JSONEditor - content={{ text: dataMappingsInput }} - mode={Mode.text} - onChange={(val: any) => { - setDataMappingsInput(val.text); - }} - /> - </LongText> - <LongText> - <StyledHeader>Dispute Preview</StyledHeader> - <br /> - {loading ? <Skeleton /> : <Overview disputeDetails={disputeDetails} />} - </LongText> - </LongTextSections> - </> - ); -}; - -const Overview: React.FC<{ disputeDetails: DisputeDetails | undefined }> = ({ disputeDetails }) => { - return ( - <Container> - <h1>{disputeDetails?.title ?? INVALID_DISPUTE_DATA_ERROR}</h1> - <QuestionAndDescription> - <ReactMarkdown>{disputeDetails?.question ?? INVALID_DISPUTE_DATA_ERROR}</ReactMarkdown> - <ReactMarkdown>{disputeDetails?.description ?? INVALID_DISPUTE_DATA_ERROR}</ReactMarkdown> - </QuestionAndDescription> - {disputeDetails?.frontendUrl && ( - <a href={disputeDetails?.frontendUrl} target="_blank" rel="noreferrer"> - Go to arbitrable - </a> - )} - <VotingOptions> - {disputeDetails && <h3>Voting Options</h3>} - {disputeDetails?.answers?.map((answer: Answer, i: number) => ( - <span key={answer.id}> - <small>Option {i + 1}:</small> - <label>{answer.title}. </label> - <label>{answer.description}</label> - </span> - ))} - </VotingOptions> - <ShadeArea> - <p>Make sure you read and understand the Policies</p> - <LinkContainer> - {disputeDetails?.policyURI && ( - <StyledA href={getIpfsUrl(disputeDetails?.policyURI)} target="_blank" rel="noreferrer"> - <PolicyIcon /> - Dispute Policy - </StyledA> - )} - </LinkContainer> - </ShadeArea> - </Container> - ); -}; - -export default DisputeTemplateView; diff --git a/web-devtools/src/app/(main)/layout.tsx b/web-devtools/src/app/(main)/layout.tsx deleted file mode 100644 index 3d754b11f..000000000 --- a/web-devtools/src/app/(main)/layout.tsx +++ /dev/null @@ -1,37 +0,0 @@ -"use client"; -import React from "react"; -import styled from "styled-components"; - -import "react-toastify/dist/ReactToastify.css"; -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import { ToastContainer } from "react-toastify"; - -import GraphqlBatcherProvider from "context/GraphqlBatcher"; -import Web3Provider from "context/Web3Provider"; - -const Main = styled.main` - min-height: calc(100vh - 130px); -`; -const queryClient = new QueryClient(); - -const StyledToastContainer = styled(ToastContainer)` - padding: 16px; - padding-top: 70px; -`; - -const Layout = ({ children }: Readonly<{ children: React.ReactNode }>) => { - return ( - <Web3Provider> - <QueryClientProvider client={queryClient}> - <GraphqlBatcherProvider> - <Main> - <StyledToastContainer /> - {children} - </Main> - </GraphqlBatcherProvider> - </QueryClientProvider> - </Web3Provider> - ); -}; - -export default Layout; diff --git a/web-devtools/src/app/(main)/ruler/ChangeDeveloper.tsx b/web-devtools/src/app/(main)/ruler/ChangeDeveloper.tsx deleted file mode 100644 index 4a0031938..000000000 --- a/web-devtools/src/app/(main)/ruler/ChangeDeveloper.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import React, { useCallback, useMemo, useState } from "react"; -import styled from "styled-components"; - -import { type Address, isAddress } from "viem"; -import { useAccount, usePublicClient } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { useRulerContext } from "context/RulerContext"; -import { useSimulateKlerosCoreRulerChangeRuler, useWriteKlerosCoreRulerChangeRuler } from "hooks/contracts/generated"; -import { isUndefined } from "utils/isUndefined"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import LabeledInput from "components/LabeledInput"; - -import Header from "./Header"; - -const Container = styled.div` - width: 100%; - display: flex; - flex-direction: column; - gap: 32px; -`; - -const InputContainer = styled.div` - display: flex; - flex-direction: column; - gap: 16px; -`; - -const StyledLabel = styled.label` - word-wrap: break-word; -`; - -const ChangeDeveloper: React.FC = () => { - const { isConnected, chainId } = useAccount(); - const { arbitrable, currentDeveloper, refetchData } = useRulerContext(); - const [newDeveloper, setNewDeveloper] = useState(""); - const [isChanging, setIsChanging] = useState(false); - const publicClient = usePublicClient(); - - const isValid = useMemo(() => newDeveloper === "" || isAddress(newDeveloper), [newDeveloper]); - - const { - data: changeRulerConfig, - isLoading, - isError, - } = useSimulateKlerosCoreRulerChangeRuler({ - query: { - enabled: - !isUndefined(arbitrable) && !isUndefined(newDeveloper) && isAddress(arbitrable) && isAddress(newDeveloper), - }, - args: [arbitrable as Address, newDeveloper as Address], - }); - - const { writeContractAsync: changeRuler } = useWriteKlerosCoreRulerChangeRuler(); - - const handleClick = useCallback(() => { - if (!publicClient || !changeRulerConfig) return; - setIsChanging(true); - wrapWithToast(async () => changeRuler(changeRulerConfig.request), publicClient) - .then(() => refetchData()) - .finally(() => setIsChanging(false)); - }, [publicClient, changeRulerConfig, changeRuler, refetchData]); - - const isDisabled = useMemo( - () => - !isConnected || - chainId !== DEFAULT_CHAIN || - !changeRulerConfig || - isError || - isLoading || - isChanging || - isUndefined(arbitrable) || - !isValid, - [changeRulerConfig, isError, isLoading, isChanging, arbitrable, isValid, isConnected, chainId] - ); - return ( - <Container> - <Header text="Developer" tooltipMsg="Address of the current ruler of the selected arbitrable" /> - <InputContainer> - <StyledLabel>Current Developer : {currentDeveloper ?? "None"}</StyledLabel> - <LabeledInput - label="New Developer" - onChange={(e) => setNewDeveloper(e.target.value)} - message={isValid ? "" : "Invalid Address"} - variant={isValid ? "" : "error"} - /> - </InputContainer> - <Button text="Update" onClick={handleClick} isLoading={isLoading || isChanging} disabled={isDisabled} /> - </Container> - ); -}; - -export default ChangeDeveloper; diff --git a/web-devtools/src/app/(main)/ruler/Header.tsx b/web-devtools/src/app/(main)/ruler/Header.tsx deleted file mode 100644 index 0b86d0419..000000000 --- a/web-devtools/src/app/(main)/ruler/Header.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from "react"; -import styled from "styled-components"; -import WithHelpTooltip from "components/WithHelpTooltip"; - -const Container = styled.div` - width: 100%; - display: flex; - align-items: center; - border-bottom: 1px solid ${({ theme }) => theme.klerosUIComponentsStroke}; - padding: 8px 0px; -`; - -const Title = styled.h2` - margin: 0; -`; - -const Header: React.FC<{ text: string; tooltipMsg: string }> = ({ text, tooltipMsg }) => ( - <Container> - <WithHelpTooltip tooltipMsg={tooltipMsg} place="right"> - <Title>{text}</Title> - </WithHelpTooltip> - </Container> -); - -export default Header; diff --git a/web-devtools/src/app/(main)/ruler/ManualRuling.tsx b/web-devtools/src/app/(main)/ruler/ManualRuling.tsx deleted file mode 100644 index b48853066..000000000 --- a/web-devtools/src/app/(main)/ruler/ManualRuling.tsx +++ /dev/null @@ -1,136 +0,0 @@ -"use client"; -import React, { useCallback, useMemo, useState } from "react"; -import styled from "styled-components"; - -import { RULING_MODE } from "consts"; -import { useAccount, usePublicClient } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { useRulerContext } from "context/RulerContext"; -import { - useSimulateKlerosCoreRulerChangeRulingModeToManual, - useSimulateKlerosCoreRulerExecuteRuling, - useWriteKlerosCoreRulerChangeRulingModeToManual, - useWriteKlerosCoreRulerExecuteRuling, -} from "hooks/contracts/generated"; -import { isUndefined } from "utils/isUndefined"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import LabeledInput from "components/LabeledInput"; - -import Header from "./Header"; -import { DEFAULT_CHAIN } from "consts/chains"; - -const Container = styled.div` - width: 100%; - display: flex; - flex-direction: column; - gap: 32px; -`; - -const SelectContainer = styled.div` - display: flex; - gap: 16px; - justify-content: space-around; - flex-wrap: wrap; -`; - -const ManualRuling: React.FC = () => { - const { isConnected, chainId } = useAccount(); - const { arbitrable, arbitrableSettings } = useRulerContext(); - const [isSending, setIsSending] = useState<boolean>(false); - const [tie, setTie] = useState(arbitrableSettings?.tied ?? false); - const [overridden, setOverridden] = useState(arbitrableSettings?.overridden ?? false); - const [ruling, setRuling] = useState(arbitrableSettings?.ruling); - const [disputeId, setDisputeId] = useState<number>(); - - const publicClient = usePublicClient(); - - const { data: manualModeConfig } = useSimulateKlerosCoreRulerChangeRulingModeToManual({ - query: { - enabled: arbitrableSettings?.rulingMode !== RULING_MODE.Manual && !isUndefined(arbitrable), - }, - args: [arbitrable as `0x${string}`], - }); - const { writeContractAsync: changeToManualMode } = useWriteKlerosCoreRulerChangeRulingModeToManual(); - - const isDisabled = useMemo(() => { - return ( - !isConnected || - chainId !== DEFAULT_CHAIN || - isUndefined(disputeId) || - isUndefined(ruling) || - isUndefined(arbitrable) - ); - }, [disputeId, ruling, arbitrable, isConnected, chainId]); - - const { - data: executeConfig, - isLoading: isLoadingExecuteConfig, - isError, - } = useSimulateKlerosCoreRulerExecuteRuling({ - query: { - enabled: arbitrableSettings?.rulingMode === RULING_MODE.Manual && !isUndefined(arbitrable) && !isDisabled, - }, - args: [BigInt(disputeId ?? 0), BigInt(ruling ?? 0), tie, overridden], - }); - - const { writeContractAsync: executeRuling } = useWriteKlerosCoreRulerExecuteRuling(); - - const handleRuling = useCallback(async () => { - if (!publicClient) return; - if (arbitrableSettings?.rulingMode !== RULING_MODE.Manual) { - if (!manualModeConfig) return; - setIsSending(true); - - wrapWithToast(async () => await changeToManualMode(manualModeConfig.request), publicClient) - .then(async (res) => { - if (res.status && executeConfig) { - wrapWithToast(async () => await executeRuling(executeConfig.request), publicClient); - } - }) - .finally(() => setIsSending(false)); - } else if (executeConfig) { - setIsSending(true); - - wrapWithToast(async () => await executeRuling(executeConfig.request), publicClient).finally(() => - setIsSending(false) - ); - } - }, [publicClient, executeConfig, manualModeConfig, arbitrableSettings, changeToManualMode, executeRuling]); - - return ( - <Container> - <Header - text="Manual Ruling" - tooltipMsg="Provide Manual ruling for the arbitrator. This operation will change the ruling mode to Manual, if the ruling mode is not Manual" - /> - <SelectContainer> - <LabeledInput - label="Dispute ID" - type="number" - value={disputeId} - onChange={(e) => setDisputeId(Number(e.target.value))} - /> - - <LabeledInput label="Ruling" type="number" value={ruling} onChange={(e) => setRuling(Number(e.target.value))} /> - <LabeledInput label="Tie" inputType="checkbox" checked={tie} onChange={() => setTie((prev) => !prev)} /> - <LabeledInput - label="Overridden" - inputType="checkbox" - checked={overridden} - onChange={() => setOverridden((prev) => !prev)} - /> - </SelectContainer> - <Button - text="Rule" - onClick={handleRuling} - isLoading={isLoadingExecuteConfig || isSending} - disabled={isDisabled || isError || isSending || isLoadingExecuteConfig} - /> - </Container> - ); -}; - -export default ManualRuling; diff --git a/web-devtools/src/app/(main)/ruler/RulingModes.tsx b/web-devtools/src/app/(main)/ruler/RulingModes.tsx deleted file mode 100644 index 95539de87..000000000 --- a/web-devtools/src/app/(main)/ruler/RulingModes.tsx +++ /dev/null @@ -1,298 +0,0 @@ -import React, { useCallback, useMemo, useState } from "react"; -import styled from "styled-components"; - -import { RULING_MODE } from "consts"; -import { useAccount, usePublicClient } from "wagmi"; - -import { Button, Radio } from "@kleros/ui-components-library"; - -import { useRulerContext } from "context/RulerContext"; -import { - useSimulateKlerosCoreRulerChangeRulingModeToAutomaticPreset, - useSimulateKlerosCoreRulerChangeRulingModeToAutomaticRandom, - useSimulateKlerosCoreRulerChangeRulingModeToManual, - useWriteKlerosCoreRulerChangeRulingModeToAutomaticPreset, - useWriteKlerosCoreRulerChangeRulingModeToAutomaticRandom, - useWriteKlerosCoreRulerChangeRulingModeToManual, -} from "hooks/contracts/generated"; -import { isUndefined } from "utils/isUndefined"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import LabeledInput from "components/LabeledInput"; - -import Header from "./Header"; -import { DEFAULT_CHAIN } from "consts/chains"; - -const Container = styled.div` - width: 100%; - display: flex; - flex-direction: column; - gap: 32px; -`; - -const SelectContainer = styled.div` - width: 100%; - display: flex; - flex-direction: column; - flex-wrap: wrap; - gap: 16px; -`; - -const AutomaticPresetInputsContainer = styled.div` - display: flex; - gap: 16px; - justify-content: space-around; - flex-wrap: wrap; -`; - -const StyledLabel = styled.label``; - -const RulingModes: React.FC = () => { - const { isConnected, chainId } = useAccount(); - const { arbitrable, arbitrableSettings } = useRulerContext(); - const [rulingMode, setRulingMode] = useState<RULING_MODE>(RULING_MODE.Uninitialized); - const [tie, setTie] = useState(false); - const [overridden, setOverridden] = useState(false); - const [ruling, setRuling] = useState(0); - const [isSending, setIsSending] = useState(false); - - const publicClient = usePublicClient(); - - const { - data: manualModeConfig, - isError: manualModeConfigError, - isLoading: isLoadingManualConfig, - } = useSimulateKlerosCoreRulerChangeRulingModeToManual({ - query: { - enabled: - rulingMode === RULING_MODE.Manual && - !isUndefined(arbitrable) && - arbitrableSettings?.rulingMode !== RULING_MODE.Manual, - }, - args: [arbitrable as `0x${string}`], - }); - const { writeContractAsync: changeToManualMode, isPending: isChangingToManualMode } = - useWriteKlerosCoreRulerChangeRulingModeToManual(); - - const { - data: automaticPresetConfig, - isError: automaticPresetConfigError, - isLoading: isLoadingAutomaticPresetConfig, - } = useSimulateKlerosCoreRulerChangeRulingModeToAutomaticPreset({ - query: { - enabled: - rulingMode === RULING_MODE.AutomaticPreset && - !isUndefined(arbitrable) && - (arbitrableSettings?.rulingMode !== RULING_MODE.AutomaticPreset || - arbitrableSettings?.ruling !== ruling || - arbitrableSettings?.tied !== tie || - arbitrableSettings?.overridden !== overridden), - }, - args: [arbitrable as `0x${string}`, BigInt(ruling), tie, overridden], - }); - const { writeContractAsync: changeToAutomaticPreset, isPending: isChangingToAutomaticPreset } = - useWriteKlerosCoreRulerChangeRulingModeToAutomaticPreset(); - - const { - data: automaticRandomConfig, - isError: automaticRandomConfigError, - isLoading: isLoadingAutomaticRandomConfig, - } = useSimulateKlerosCoreRulerChangeRulingModeToAutomaticRandom({ - query: { - enabled: - rulingMode === RULING_MODE.AutomaticRandom && - !isUndefined(arbitrable) && - arbitrableSettings?.rulingMode !== RULING_MODE.AutomaticRandom, - }, - args: [arbitrable as `0x${string}`], - }); - const { writeContractAsync: changeToAutomaticRandom, isPending: isChangingToAutomaticRandom } = - useWriteKlerosCoreRulerChangeRulingModeToAutomaticRandom(); - - const isDisabled = useMemo(() => { - if (!arbitrable || !isConnected || chainId !== DEFAULT_CHAIN) return true; - switch (rulingMode) { - case RULING_MODE.Manual: - return ( - rulingMode === arbitrableSettings?.rulingMode || - manualModeConfigError || - isChangingToManualMode || - isLoadingManualConfig - ); - case RULING_MODE.AutomaticPreset: - return ( - automaticPresetConfigError || - isChangingToAutomaticPreset || - isLoadingAutomaticPresetConfig || - (rulingMode === arbitrableSettings?.rulingMode && - arbitrableSettings?.ruling === ruling && - arbitrableSettings?.tied === tie && - arbitrableSettings?.overridden === overridden) - ); - default: - return ( - rulingMode === arbitrableSettings?.rulingMode || - automaticRandomConfigError || - isChangingToAutomaticRandom || - isLoadingAutomaticRandomConfig - ); - } - }, [ - arbitrable, - rulingMode, - manualModeConfigError, - isChangingToManualMode, - automaticPresetConfigError, - isChangingToAutomaticPreset, - automaticRandomConfigError, - isChangingToAutomaticRandom, - isLoadingManualConfig, - isLoadingAutomaticRandomConfig, - isLoadingAutomaticPresetConfig, - arbitrableSettings, - tie, - overridden, - ruling, - isConnected, - chainId, - ]); - - const isLoading = useMemo(() => { - switch (rulingMode) { - case RULING_MODE.Manual: - return isChangingToManualMode || isLoadingManualConfig; - case RULING_MODE.AutomaticPreset: - return isChangingToAutomaticPreset || isLoadingAutomaticPresetConfig; - default: - return isChangingToAutomaticRandom || isLoadingAutomaticRandomConfig; - } - }, [ - rulingMode, - isChangingToManualMode, - isChangingToAutomaticPreset, - isChangingToAutomaticRandom, - isLoadingManualConfig, - isLoadingAutomaticRandomConfig, - isLoadingAutomaticPresetConfig, - ]); - - const handleUpdate = useCallback(() => { - if (!publicClient) return; - setIsSending(true); - switch (rulingMode) { - case RULING_MODE.Manual: - if (!manualModeConfig) return; - wrapWithToast(async () => await changeToManualMode(manualModeConfig.request), publicClient).finally(() => - setIsSending(false) - ); - return; - case RULING_MODE.AutomaticPreset: - if (!automaticPresetConfig) return; - wrapWithToast(async () => await changeToAutomaticPreset(automaticPresetConfig.request), publicClient).finally( - () => setIsSending(false) - ); - return; - default: - if (!automaticRandomConfig) return; - wrapWithToast(async () => await changeToAutomaticRandom(automaticRandomConfig.request), publicClient).finally( - () => setIsSending(false) - ); - return; - } - }, [ - rulingMode, - automaticPresetConfig, - manualModeConfig, - automaticRandomConfig, - publicClient, - changeToAutomaticPreset, - changeToAutomaticRandom, - changeToManualMode, - ]); - - return ( - <Container> - <Header - text="Ruling Mode" - tooltipMsg="Current Ruling mode of the arbitrator. Learn more about ruling modes here." - /> - <StyledLabel> - Current mode: <small>{getRulingModeText(arbitrableSettings?.rulingMode)}</small> - </StyledLabel> - <SelectContainer> - <Radio - small - label="Manual" - checked={rulingMode === RULING_MODE.Manual} - onChange={() => { - setRulingMode(RULING_MODE.Manual); - }} - /> - <Radio - small - label="Random Preset" - defaultChecked={arbitrableSettings?.rulingMode === RULING_MODE.AutomaticRandom} - checked={rulingMode === RULING_MODE.AutomaticRandom} - onChange={() => { - setRulingMode(RULING_MODE.AutomaticRandom); - }} - /> - <Radio - small - label="Automatic Preset" - checked={rulingMode === RULING_MODE.AutomaticPreset} - onChange={() => { - setRulingMode(RULING_MODE.AutomaticPreset); - }} - /> - {rulingMode === RULING_MODE.AutomaticPreset && ( - <AutomaticPresetInputsContainer> - <LabeledInput - label="Ruling" - type="number" - value={ruling} - onChange={(e) => setRuling(Number(e.target.value))} - disabled={rulingMode !== RULING_MODE.AutomaticPreset} - /> - <LabeledInput - label="Tie" - inputType="checkbox" - checked={tie} - onChange={() => setTie((prev) => !prev)} - disabled={rulingMode !== RULING_MODE.AutomaticPreset} - /> - <LabeledInput - label="Overridden" - inputType="checkbox" - checked={overridden} - onChange={() => setOverridden((prev) => !prev)} - disabled={rulingMode !== RULING_MODE.AutomaticPreset} - /> - </AutomaticPresetInputsContainer> - )} - </SelectContainer> - <Button - text="Update" - onClick={handleUpdate} - isLoading={isLoading || isSending} - disabled={isDisabled || isSending} - /> - </Container> - ); -}; - -const getRulingModeText = (mode?: RULING_MODE) => { - if (!mode) return "Uninitialized"; - switch (mode) { - case RULING_MODE.Manual: - return "Manual"; - case RULING_MODE.AutomaticRandom: - return "Automatic Random"; - case RULING_MODE.AutomaticPreset: - return "Automatic Preset"; - default: - return "Uninitialized"; - } -}; - -export default RulingModes; diff --git a/web-devtools/src/app/(main)/ruler/SelectArbitrable.tsx b/web-devtools/src/app/(main)/ruler/SelectArbitrable.tsx deleted file mode 100644 index 75fd74069..000000000 --- a/web-devtools/src/app/(main)/ruler/SelectArbitrable.tsx +++ /dev/null @@ -1,170 +0,0 @@ -import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import styled, { css } from "styled-components"; - -import { type Address, type PublicClient } from "viem"; -import { usePublicClient } from "wagmi"; - -import { Copiable, DropdownSelect, Field } from "@kleros/ui-components-library"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { useRulerContext } from "context/RulerContext"; -import { klerosCoreAddress } from "hooks/contracts/generated"; -import { shortenAddress } from "utils/shortenAddress"; -import { validateAddress } from "utils/validateAddressOrEns"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -const Container = styled.div` - width: 100%; - display: flex; - flex-wrap: wrap; - justify-content: space-around; - gap: 16px; - align-items: center; - margin: 16px 0; - padding: 8px 16px; - border-radius: 3px; - background-color: ${({ theme }) => theme.klerosUIComponentsWhiteBackground}; -`; - -const AddressContainer = styled.div` - display: flex; - gap: 8px; - flex-wrap: wrap; - align-items: center; - justify-content: center; -`; - -const Arbitrables = styled.div` - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: center; - align-items: center; - gap: 8px; -`; -const StyledLabel = styled.label``; - -const SelectContainer = styled.div` - position: relative; -`; - -const StyledField = styled(Field)` - width: auto; - ${landscapeStyle( - () => css` - min-width: 250px; - ` - )} -`; - -const StyledDropdown = styled(DropdownSelect)` - position: absolute; - z-index: 0; - top: 40px; - left: 0; - width: 100%; - > button { - display: none; - } - > div { - z-index: 1; - width: 100%; - > div { - width: 100%; - } - } - .simplebar-content { - > div { - width: 100%; - } - } -`; - -const ErrorMessage = styled.div` - color: red; - font-size: 14px; - margin-top: 4px; -`; - -const SelectArbitrable: React.FC = () => { - const { arbitrable, setArbitrable, knownArbitrables } = useRulerContext(); - const publicClient = usePublicClient({ chainId: 1 }) as PublicClient; - const ref = useRef<HTMLDivElement>(null); - const [isClient, setIsClient] = useState(false); - const [inputValue, setInputValue] = useState(""); - const [error, setError] = useState<string | null>(null); - - // hydration workaround, local storage is inevitably going to be different, so knownArbitrables will be different - // server and client side - useEffect(() => { - setIsClient(true); - }, []); - - const items = useMemo( - () => - !isClient ? [] : knownArbitrables.map((arbitrable) => ({ text: shortenAddress(arbitrable), value: arbitrable })), - [isClient, knownArbitrables] - ); - - const openDropdown = useCallback(() => { - if (!ref.current || knownArbitrables.length === 0) return; - - const child = ref.current.firstElementChild?.firstChild as HTMLButtonElement; - child.click(); - }, [knownArbitrables, ref]); - - const handleInputChange = useCallback( - async (value: string) => { - setInputValue(value); - setError(null); - - if (value) { - const isValid = await validateAddress(value, publicClient); - if (isValid) { - setArbitrable(value as Address); - } else { - setError("Invalid address or ENS name"); - } - } else { - setArbitrable("" as Address); - } - }, - [publicClient, setArbitrable] - ); - - const [[chainId, address]] = Object.entries(klerosCoreAddress); - if (chainId !== DEFAULT_CHAIN.toString()) { - console.error(`Kleros Core is not deployed on chain ${chainId}`); - } - - return ( - <Container> - <AddressContainer> - <StyledLabel>Ruler Address:</StyledLabel> - <Copiable copiableContent={address} info="Ruler Address"> - <StyledLabel>{shortenAddress(address)}</StyledLabel> - </Copiable> - </AddressContainer> - <Arbitrables suppressHydrationWarning={true}> - <StyledLabel>Arbitrable:</StyledLabel> - <SelectContainer ref={ref}> - <StyledDropdown - defaultValue={arbitrable} - items={items} - callback={(val) => handleInputChange(val.toString())} - /> - <StyledField - value={inputValue} - placeholder="Enter Arbitrable" - onChange={(e) => handleInputChange(e.target.value)} - onClick={openDropdown} - /> - {error && <ErrorMessage>{error}</ErrorMessage>} - </SelectContainer> - </Arbitrables> - </Container> - ); -}; - -export default SelectArbitrable; diff --git a/web-devtools/src/app/(main)/ruler/page.tsx b/web-devtools/src/app/(main)/ruler/page.tsx deleted file mode 100644 index e6f061969..000000000 --- a/web-devtools/src/app/(main)/ruler/page.tsx +++ /dev/null @@ -1,49 +0,0 @@ -"use client"; -import React, { useEffect, useState } from "react"; -import styled from "styled-components"; - -import RulerContextProvider from "context/RulerContext"; - -import { responsiveSize } from "styles/responsiveSize"; - -import ChangeDeveloper from "./ChangeDeveloper"; -import ManualRuling from "./ManualRuling"; -import RulingModes from "./RulingModes"; -import SelectArbitrable from "./SelectArbitrable"; -import ConnectWallet from "components/ConnectWallet"; -import { useAccount } from "wagmi"; -import { DEFAULT_CHAIN } from "consts/chains"; - -const Container = styled.div` - min-height: calc(100vh - 160px); - display: flex; - flex-direction: column; - gap: 48px; - margin: 16px 32px; - align-items: center; - padding: ${responsiveSize(32, 72)} ${responsiveSize(16, 132)} ${responsiveSize(76, 96)}; -`; - -const StyledConnectWallet = styled(ConnectWallet)` - align-self: flex-start; -`; - -const Ruler: React.FC = () => { - const { isConnected, chainId } = useAccount(); - const [isClient, setIsClient] = useState(false); - - useEffect(() => setIsClient(true), []); - return ( - <RulerContextProvider> - <Container> - <h1>Ruler</h1> - <SelectArbitrable /> - {isClient && (!isConnected || chainId !== DEFAULT_CHAIN) ? <StyledConnectWallet /> : null} - <RulingModes /> - <ManualRuling /> - <ChangeDeveloper /> - </Container> - </RulerContextProvider> - ); -}; -export default Ruler; diff --git a/web-devtools/src/app/favicon.ico b/web-devtools/src/app/favicon.ico deleted file mode 100644 index 16a8426eef8cff590208db71e7841c80044e72d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243998 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%0DJ@fXX10nj?Bb= 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 diff --git a/web-devtools/src/app/layout.tsx b/web-devtools/src/app/layout.tsx deleted file mode 100644 index 603954839..000000000 --- a/web-devtools/src/app/layout.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from "react"; - -import type { Metadata } from "next"; -import { Open_Sans } from "next/font/google"; - -import StyledComponentsProvider from "context/StyledComponentsProvider"; -import StyledComponentsRegistry from "context/StyledComponentsRegistry"; - -import Footer from "layout/Footer"; -import Header from "layout/Header"; - -const font = Open_Sans({ subsets: ["latin"] }); - -export const metadata: Metadata = { - title: "Dev Tools", -}; - -const RootLayout = ({ children }: Readonly<{ children: React.ReactNode }>) => { - return ( - <html lang="en"> - <body className={font.className}> - <StyledComponentsRegistry> - <StyledComponentsProvider> - <Header /> - {children} - <Footer /> - </StyledComponentsProvider> - </StyledComponentsRegistry> - </body> - </html> - ); -}; - -export default RootLayout; diff --git a/web-devtools/src/assets/svgs/footer/secured-by-kleros.svg b/web-devtools/src/assets/svgs/footer/secured-by-kleros.svg deleted file mode 100644 index a195863ea..000000000 --- a/web-devtools/src/assets/svgs/footer/secured-by-kleros.svg +++ /dev/null @@ -1,12 +0,0 @@ -<svg width="179" height="24" viewBox="0 0 179 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_14070_61093)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M5.59763 13.8605C5.59763 14.6389 5.31655 15.2497 4.7544 15.6927C4.19225 16.1359 3.41679 16.3574 2.42803 16.3574C1.43929 16.3574 0.629933 16.2037 0 15.8963V14.5431C0.398691 14.7308 0.821304 14.8785 1.26785 14.9863C1.71837 15.0939 2.13698 15.1478 2.52372 15.1478C3.08987 15.1478 3.50649 15.0402 3.77362 14.8246C4.04473 14.609 4.18029 14.3196 4.18029 13.9563C4.18029 13.629 4.05669 13.3516 3.8095 13.124C3.56231 12.8966 3.05198 12.6271 2.27852 12.3157C1.48113 11.9923 0.918984 11.6231 0.592057 11.208C0.26513 10.7929 0.101667 10.2939 0.101667 9.71104C0.101667 8.9806 0.360816 8.40579 0.879114 7.98661C1.39742 7.56743 2.09314 7.35791 2.96627 7.35791C3.80352 7.35791 4.63678 7.54156 5.46607 7.90874L5.01155 9.0764C4.23411 8.74911 3.54038 8.5854 2.93038 8.5854C2.4679 8.5854 2.11705 8.68714 1.87784 8.89073C1.63862 9.09041 1.51902 9.35585 1.51902 9.68718C1.51902 9.91463 1.56686 10.1103 1.66254 10.274C1.75822 10.4336 1.91571 10.5852 2.13498 10.729C2.35427 10.8726 2.74898 11.0623 3.3191 11.2979C3.96101 11.5652 4.43146 11.8147 4.73047 12.0462C5.02949 12.2778 5.24878 12.5392 5.38832 12.8307C5.52785 13.122 5.59763 13.4653 5.59763 13.8605ZM12.2361 16.2381H7.29029V7.4841H12.2361V8.69367H8.7196V11.0767H12.0148V12.2743H8.7196V15.0226H12.2361V16.2381ZM15.9146 9.45961C16.3851 8.87685 17.031 8.5854 17.8523 8.5854C18.2151 8.5854 18.5598 8.6393 18.8869 8.74709C19.2178 8.85085 19.5307 8.97265 19.8257 9.11225L20.3401 7.92073C19.5826 7.54547 18.7573 7.35791 17.8642 7.35791C17.0149 7.35791 16.2755 7.53954 15.6455 7.9028C15.0155 8.26607 14.5331 8.789 14.1983 9.4716C13.8674 10.1542 13.7019 10.9505 13.7019 11.8607C13.7019 13.3057 14.0447 14.4174 14.7305 15.1958C15.4163 15.9702 16.399 16.3574 17.6788 16.3574C18.548 16.3574 19.3254 16.2277 20.0112 15.9683V14.7408C19.6364 14.8565 19.2755 14.9523 18.9288 15.0282C18.5818 15.1 18.2231 15.136 17.8523 15.136C16.9951 15.136 16.3393 14.8604 15.8848 14.3096C15.4343 13.7588 15.2089 12.9464 15.2089 11.8727C15.2089 10.8468 15.4441 10.0423 15.9146 9.45961ZM28.7495 7.4841V13.1485C28.7495 13.7951 28.6099 14.362 28.3308 14.849C28.0557 15.332 27.6549 15.7052 27.1288 15.9687C26.6065 16.2281 25.9805 16.3579 25.2508 16.3579C24.1665 16.3579 23.3232 16.0705 22.7212 15.4957C22.1192 14.9209 21.8182 14.1305 21.8182 13.1245V7.4841H23.2535V13.0228C23.2535 13.7452 23.4209 14.2782 23.7558 14.6215C24.0907 14.9648 24.605 15.1365 25.2988 15.1365C26.6463 15.1365 27.3202 14.4279 27.3202 13.0108V7.4841H28.7495ZM33.4063 11.5557H32.4135V8.69367H33.3585C34.0084 8.69367 34.4947 8.80146 34.8177 9.01692C35.1405 9.2325 35.3021 9.58781 35.3021 10.0827C35.3021 10.5698 35.1525 10.937 34.8536 11.1845C34.5545 11.432 34.0722 11.5557 33.4063 11.5557ZM32.4135 16.2381V12.7413H33.825L35.918 16.2381H37.5448L35.0749 12.3641C36.2071 11.901 36.7732 11.1247 36.7732 10.0349C36.7732 9.18063 36.5022 8.54195 35.9599 8.11886C35.4177 7.69564 34.5825 7.4841 33.4542 7.4841H30.9843V16.2381H32.4135ZM43.7634 16.2381H38.8176V7.4841H43.7634V8.69367H40.247V11.0767H43.542V12.2743H40.247V15.0226H43.7634V16.2381ZM51.5701 15.0944C52.3714 14.328 52.772 13.2223 52.772 11.7773C52.772 10.4161 52.3853 9.36024 51.6119 8.60986C50.8385 7.85935 49.7559 7.4841 48.3646 7.4841H45.6614V16.2381H48.1074C49.6144 16.2381 50.7686 15.8569 51.5701 15.0944ZM48.3286 8.68168C50.2861 8.68168 51.2649 9.72956 51.2649 11.8252C51.2649 13.9647 50.2124 15.0346 48.1074 15.0346H47.0906V8.68168H48.3286ZM57.8836 7.4841H60.3534C61.5137 7.4841 62.3529 7.65778 62.8713 8.00501C63.3895 8.35237 63.6487 8.90118 63.6487 9.65168C63.6487 10.1706 63.5031 10.5997 63.2121 10.939C62.925 11.2744 62.5044 11.4918 61.9502 11.5917V11.6515C63.2778 11.8791 63.9417 12.5777 63.9417 13.7473C63.9417 14.5296 63.6765 15.1404 63.1463 15.5795C62.6201 16.0186 61.8824 16.2381 60.9335 16.2381H57.8836V7.4841ZM58.9002 11.2324H60.5747C61.2924 11.2324 61.8087 11.1206 62.1237 10.8971C62.4386 10.6695 62.5961 10.2883 62.5961 9.75342C62.5961 9.26242 62.4207 8.90925 62.0699 8.69367C61.719 8.47405 61.1608 8.36436 60.3954 8.36436H58.9002V11.2324ZM58.9002 12.0947V15.37H60.7243C61.43 15.37 61.9602 15.2341 62.315 14.9628C62.6739 14.6874 62.8532 14.2582 62.8532 13.6754C62.8532 13.1324 62.6698 12.7333 62.303 12.4779C61.9403 12.2224 61.386 12.0947 60.6405 12.0947H58.9002ZM70.3823 7.4841L68.05 11.8612L65.7357 7.4841H64.6233L67.5357 12.891V16.2381H68.5643V12.8432L71.4827 7.4841H70.3823Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M91.3872 0L104.954 0.607306L110.448 12.8297L102.698 24L89.0569 23.1252L83.4644 9.88237L91.3872 0ZM101.334 7.04523L91.5011 11.3475L99.9073 17.8565L101.334 7.04523ZM100.196 4.88942L92.3375 1.50108L90.6867 8.62522L100.196 4.88942ZM98.2038 19.4943L89.6636 13.3873L89.8702 21.6626L98.2038 19.4943ZM109.084 12.8027L103.264 6.88869L101.727 18.261L109.084 12.8027ZM100.206 20.8245L93.0036 22.7097L101.474 23.2528L100.206 20.8245ZM107.946 15.4858L101.642 20.1893L102.895 22.6411L107.946 15.4858ZM104.964 2.315L103.739 4.83252L108.297 9.47253L104.964 2.315ZM103.439 1.11028L95.4342 0.784918L102.037 3.67694L103.439 1.11028ZM90.2184 2.27448L84.612 9.36387L88.3603 10.159L90.2184 2.27448ZM88.1343 11.5497L84.3679 10.7511L88.2978 20.0227L88.1343 11.5497Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M119.791 11.1542H119.335V7.09532H118.115V16.6203H119.335V12.1593H119.755L123.598 16.8579L124.526 16.0718L120.829 11.5927L123.98 7.58914L123.051 6.85791L119.791 11.1542ZM130.41 7.09525H129.189V16.6202H135.381V15.5231H130.41V7.09525ZM139.879 7.09525H145.798V8.19215H141.099V11.0443H144.978V12.1411H141.099V15.5233H145.798V16.6204H139.879V7.09525ZM153.884 7.09525H150.66V16.6201H151.881V12.543H153.648L156.069 16.8577L157.125 16.2178L154.795 12.3604C155.941 12.0129 156.724 10.8611 156.724 9.69126C156.724 7.84483 155.468 7.09525 153.884 7.09525ZM155.449 9.69126C155.449 10.7701 154.666 11.4464 153.484 11.4464H151.881V8.19215H153.846C154.94 8.19215 155.449 8.83208 155.449 9.69126ZM167.708 11.8664C167.708 12.6343 167.653 16.7843 164.338 16.7843C162.808 16.7843 160.969 15.6875 160.969 11.8664C160.969 8.06372 162.773 6.93034 164.338 6.93034C165.85 6.93034 167.708 8.02725 167.708 11.8664ZM162.244 11.8664C162.244 13.2558 162.499 15.6325 164.338 15.6325C166.178 15.6325 166.433 13.2558 166.433 11.8664C166.433 10.4587 166.178 8.0821 164.338 8.0821C162.499 8.0821 162.244 10.4587 162.244 11.8664ZM175.357 15.6325C174.082 15.6325 173.517 14.7734 173.28 13.6033L172.188 13.9505C172.48 15.6506 173.59 16.7841 175.357 16.7841C177.105 16.7841 178.363 15.7603 178.363 13.9505C178.363 12.9633 177.906 12.1955 177.051 11.7201L175.029 10.8243C174.301 10.4954 173.754 10.2394 173.754 9.34345C173.754 8.48441 174.519 8.0821 175.302 8.0821C176.341 8.0821 176.832 8.74027 177.051 9.67253L178.217 9.32521C177.834 7.84447 176.905 6.93034 175.32 6.93034C173.827 6.93034 172.534 7.82624 172.534 9.43491C172.534 11.0689 173.625 11.5168 174.867 12.0268C174.987 12.076 175.108 12.1258 175.229 12.1772C175.305 12.2086 175.382 12.2394 175.458 12.2701C176.313 12.6149 177.141 12.9493 177.141 14.0237C177.141 15.0842 176.359 15.6325 175.357 15.6325Z" fill="white"/> -</g> -<defs> -<clipPath id="clip0_14070_61093"> -<rect width="178.725" height="24" fill="white"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/assets/svgs/header/devtools-logo.svg b/web-devtools/src/assets/svgs/header/devtools-logo.svg deleted file mode 100644 index f6b0a0185..000000000 --- a/web-devtools/src/assets/svgs/header/devtools-logo.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg width="194" height="46" viewBox="0 0 194 46" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M15.5618 0L42.2108 1.164L53 24.5901L37.7785 46L10.9846 44.3232L0 18.9412L15.5618 0ZM35.0991 13.5034L15.7856 21.7493L32.2974 34.2251L35.0991 13.5034ZM32.8631 9.37139L17.4284 2.87706L14.1862 16.5317L32.8631 9.37139ZM28.9509 37.3641L12.1764 25.6589L12.5822 41.5201L28.9509 37.3641ZM50.3207 24.5384L38.8897 13.2033L35.8726 35.0003L50.3207 24.5384ZM32.8838 39.9136L18.7368 43.527L35.3736 44.568L32.8838 39.9136ZM48.0868 29.6812L35.7031 38.6962L38.1637 43.3955L48.0868 29.6812ZM42.2292 4.43708L39.824 9.26233L48.7768 18.1556L42.2292 4.43708ZM39.2324 2.12804L23.511 1.50443L36.4793 7.04747L39.2324 2.12804ZM13.266 4.35942L2.25421 17.9475L9.6165 19.4714L13.266 4.35942ZM9.17257 22.1368L1.77479 20.6063L9.4938 38.3768L9.17257 22.1368Z" fill="white"/> -<path d="M62.6136 22.8182V21.9091L69.9318 18.1818V19.6364L64.3182 22.3409L64.3636 22.25V22.4773L64.3182 22.3864L69.9318 25.0909V26.5455L62.6136 22.8182ZM78.6269 28H75.036V16.3636H78.786C79.9148 16.3636 80.8807 16.5966 81.6837 17.0625C82.4867 17.5246 83.1023 18.1894 83.5303 19.0568C83.9583 19.9205 84.1723 20.9545 84.1723 22.1591C84.1723 23.3712 83.9564 24.4148 83.5246 25.2898C83.0928 26.161 82.464 26.8314 81.6382 27.3011C80.8125 27.767 79.8087 28 78.6269 28ZM76.4451 26.75H78.536C79.4981 26.75 80.2954 26.5644 80.928 26.1932C81.5606 25.822 82.0322 25.2936 82.3428 24.608C82.6534 23.9223 82.8087 23.1061 82.8087 22.1591C82.8087 21.2197 82.6553 20.411 82.3485 19.733C82.0416 19.0511 81.5833 18.5284 80.9735 18.1648C80.3636 17.7973 79.6041 17.6136 78.6951 17.6136H76.4451V26.75ZM88.616 28V16.3636H95.6387V17.6136H90.0251V21.5455H95.2751V22.7955H90.0251V26.75H95.7296V28H88.616ZM100.736 16.3636L104.19 26.1591H104.327L107.781 16.3636H109.258L104.986 28H103.531L99.2585 16.3636H100.736ZM112.515 17.6136V16.3636H121.242V17.6136H117.583V28H116.174V17.6136H112.515ZM134.83 22.1818C134.83 23.4091 134.609 24.4697 134.166 25.3636C133.722 26.2576 133.114 26.947 132.342 27.4318C131.569 27.9167 130.686 28.1591 129.694 28.1591C128.702 28.1591 127.819 27.9167 127.046 27.4318C126.274 26.947 125.666 26.2576 125.222 25.3636C124.779 24.4697 124.558 23.4091 124.558 22.1818C124.558 20.9545 124.779 19.8939 125.222 19C125.666 18.1061 126.274 17.4167 127.046 16.9318C127.819 16.447 128.702 16.2045 129.694 16.2045C130.686 16.2045 131.569 16.447 132.342 16.9318C133.114 17.4167 133.722 18.1061 134.166 19C134.609 19.8939 134.83 20.9545 134.83 22.1818ZM133.467 22.1818C133.467 21.1742 133.298 20.3239 132.961 19.6307C132.628 18.9375 132.175 18.4129 131.603 18.0568C131.035 17.7008 130.399 17.5227 129.694 17.5227C128.989 17.5227 128.351 17.7008 127.779 18.0568C127.211 18.4129 126.758 18.9375 126.421 19.6307C126.088 20.3239 125.921 21.1742 125.921 22.1818C125.921 23.1894 126.088 24.0398 126.421 24.733C126.758 25.4261 127.211 25.9508 127.779 26.3068C128.351 26.6629 128.989 26.8409 129.694 26.8409C130.399 26.8409 131.035 26.6629 131.603 26.3068C132.175 25.9508 132.628 25.4261 132.961 24.733C133.298 24.0398 133.467 23.1894 133.467 22.1818ZM149.098 22.1818C149.098 23.4091 148.876 24.4697 148.433 25.3636C147.99 26.2576 147.382 26.947 146.609 27.4318C145.837 27.9167 144.954 28.1591 143.962 28.1591C142.969 28.1591 142.087 27.9167 141.314 27.4318C140.541 26.947 139.933 26.2576 139.49 25.3636C139.047 24.4697 138.825 23.4091 138.825 22.1818C138.825 20.9545 139.047 19.8939 139.49 19C139.933 18.1061 140.541 17.4167 141.314 16.9318C142.087 16.447 142.969 16.2045 143.962 16.2045C144.954 16.2045 145.837 16.447 146.609 16.9318C147.382 17.4167 147.99 18.1061 148.433 19C148.876 19.8939 149.098 20.9545 149.098 22.1818ZM147.734 22.1818C147.734 21.1742 147.566 20.3239 147.229 19.6307C146.895 18.9375 146.443 18.4129 145.871 18.0568C145.302 17.7008 144.666 17.5227 143.962 17.5227C143.257 17.5227 142.619 17.7008 142.047 18.0568C141.479 18.4129 141.026 18.9375 140.689 19.6307C140.355 20.3239 140.189 21.1742 140.189 22.1818C140.189 23.1894 140.355 24.0398 140.689 24.733C141.026 25.4261 141.479 25.9508 142.047 26.3068C142.619 26.6629 143.257 26.8409 143.962 26.8409C144.666 26.8409 145.302 26.6629 145.871 26.3068C146.443 25.9508 146.895 25.4261 147.229 24.733C147.566 24.0398 147.734 23.1894 147.734 22.1818ZM153.547 28V16.3636H154.956V26.75H160.365V28H153.547ZM170.991 19.2727C170.923 18.697 170.646 18.25 170.161 17.9318C169.676 17.6136 169.082 17.4545 168.377 17.4545C167.862 17.4545 167.411 17.5379 167.025 17.7045C166.642 17.8712 166.343 18.1004 166.127 18.392C165.915 18.6837 165.809 19.0152 165.809 19.3864C165.809 19.697 165.883 19.964 166.031 20.1875C166.182 20.4072 166.375 20.5909 166.61 20.7386C166.845 20.8826 167.091 21.0019 167.349 21.0966C167.606 21.1875 167.843 21.2614 168.059 21.3182L169.241 21.6364C169.544 21.7159 169.881 21.8258 170.252 21.9659C170.627 22.1061 170.985 22.2973 171.326 22.5398C171.671 22.7784 171.955 23.0852 172.178 23.4602C172.402 23.8352 172.514 24.2955 172.514 24.8409C172.514 25.4697 172.349 26.0379 172.019 26.5455C171.694 27.053 171.216 27.4564 170.587 27.7557C169.962 28.0549 169.203 28.2045 168.309 28.2045C167.476 28.2045 166.754 28.0701 166.144 27.8011C165.538 27.5322 165.061 27.1572 164.712 26.6761C164.368 26.1951 164.173 25.6364 164.127 25H165.582C165.62 25.4394 165.767 25.803 166.025 26.0909C166.286 26.375 166.616 26.5871 167.014 26.7273C167.415 26.8636 167.847 26.9318 168.309 26.9318C168.847 26.9318 169.33 26.8447 169.758 26.6705C170.186 26.4924 170.525 26.2462 170.775 25.9318C171.025 25.6136 171.15 25.2424 171.15 24.8182C171.15 24.4318 171.042 24.1174 170.826 23.875C170.61 23.6326 170.326 23.4356 169.974 23.2841C169.622 23.1326 169.241 23 168.832 22.8864L167.4 22.4773C166.491 22.2159 165.771 21.8428 165.241 21.358C164.711 20.8731 164.445 20.2386 164.445 19.4545C164.445 18.803 164.622 18.2348 164.974 17.75C165.33 17.2614 165.807 16.8826 166.406 16.6136C167.008 16.3409 167.68 16.2045 168.423 16.2045C169.173 16.2045 169.839 16.339 170.423 16.608C171.006 16.8731 171.468 17.2367 171.809 17.6989C172.154 18.161 172.336 18.6856 172.354 19.2727H170.991ZM180.842 15.8182L177.092 29.75H175.865L179.615 15.8182H180.842ZM192.216 23.9091L184.898 27.6364V26.1818L190.512 23.4773L190.466 23.5682V23.3409L190.512 23.4318L184.898 20.7273V19.2727L192.216 23V23.9091Z" fill="white"/> -</svg> diff --git a/web-devtools/src/assets/svgs/header/hamburger.svg b/web-devtools/src/assets/svgs/header/hamburger.svg deleted file mode 100644 index c02f5de1f..000000000 --- a/web-devtools/src/assets/svgs/header/hamburger.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M0.571429 3.29169H15.4286C15.7442 3.29169 16 3.03054 16 2.70835V1.25002C16 0.927838 15.7442 0.666687 15.4286 0.666687H0.571429C0.255821 0.666687 0 0.927838 0 1.25002V2.70835C0 3.03054 0.255821 3.29169 0.571429 3.29169ZM0.571429 9.12502H15.4286C15.7442 9.12502 16 8.86387 16 8.54169V7.08335C16 6.76117 15.7442 6.50002 15.4286 6.50002H0.571429C0.255821 6.50002 0 6.76117 0 7.08335V8.54169C0 8.86387 0.255821 9.12502 0.571429 9.12502ZM0.571429 14.9584H15.4286C15.7442 14.9584 16 14.6972 16 14.375V12.9167C16 12.5945 15.7442 12.3334 15.4286 12.3334H0.571429C0.255821 12.3334 0 12.5945 0 12.9167V14.375C0 14.6972 0.255821 14.9584 0.571429 14.9584Z"/> -</svg> diff --git a/web-devtools/src/assets/svgs/hero/hero-darkmode-desktop.svg b/web-devtools/src/assets/svgs/hero/hero-darkmode-desktop.svg deleted file mode 100644 index 348292627..000000000 --- a/web-devtools/src/assets/svgs/hero/hero-darkmode-desktop.svg +++ /dev/null @@ -1,74 +0,0 @@ -<svg viewBox="0 0 1440 184" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_11691_168894)"> -<g clip-path="url(#clip1_11691_168894)"> -<path d="M1440 0H0V185H1440V0Z" fill="white"/> -<g style="mix-blend-mode:screen" opacity="0.085"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M614.293 20.39L874.267 32.025L979.521 266.179L831.028 480.179L569.64 463.419L462.48 209.719L614.293 20.39ZM804.889 155.365L616.476 237.784L777.553 362.485L804.889 155.365ZM783.075 114.065L632.502 49.148L600.872 185.632L783.075 114.065ZM744.91 393.865L581.267 276.865L585.225 435.404L744.91 393.865ZM953.382 265.665L841.868 152.365L812.435 370.235L953.382 265.665ZM783.277 419.345L645.266 455.465L807.566 465.871L783.277 419.345ZM931.59 317.065L810.78 407.175L834.785 454.147L931.59 317.065ZM874.446 64.741L850.981 112.971L938.321 201.863L874.446 64.741ZM845.211 41.665L691.841 35.432L818.353 90.833L845.211 41.665ZM591.896 63.965L484.47 199.783L556.293 215.015L591.896 63.965ZM551.962 241.658L479.793 226.358L555.093 403.983L551.962 241.658Z" fill="white"/> -</g> -<path d="M1440 57.936H0V184.936H1440V57.936Z" fill="url(#paint0_linear_11691_168894)"/> -<path d="M1440 0H0V185H1440V0Z" fill="url(#paint1_linear_11691_168894)"/> -<g style="mix-blend-mode:screen" opacity="0.085"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M614.293 11.3901L874.267 23.0251L979.521 257.179L831.028 471.179L569.64 454.419L462.48 200.719L614.293 11.3901ZM804.889 146.365L616.476 228.784L777.553 353.485L804.889 146.365ZM783.075 105.065L632.502 40.1481L600.872 176.632L783.075 105.065ZM744.91 384.865L581.267 267.865L585.225 426.404L744.91 384.865ZM953.382 256.665L841.868 143.365L812.435 361.235L953.382 256.665ZM783.277 410.345L645.266 446.465L807.566 456.871L783.277 410.345ZM931.59 308.065L810.78 398.175L834.785 445.147L931.59 308.065ZM874.446 55.7411L850.981 103.971L938.321 192.863L874.446 55.7411ZM845.211 32.6651L691.841 26.4321L818.353 81.8331L845.211 32.6651ZM591.896 54.9651L484.47 190.783L556.293 206.015L591.896 54.9651ZM551.962 232.658L479.793 217.358L555.093 394.983L551.962 232.658Z" fill="white"/> -</g> -<path d="M798.441 153.754C798.441 153.754 803.211 161.277 811.627 162.737C820.043 164.197 815.691 172.119 815.691 172.119L796.244 167.076L795.66 153.754H798.443H798.441Z" fill="#8C20FA"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M1383.6 100.527V101.897H1383.01V103.14H1378.9L1378.58 103.658H1378.19C1378.15 103.463 1378.13 103.267 1378.11 103.069V102.025C1377.92 102.017 1377.73 101.996 1377.53 101.962C1377.32 101.921 1377.07 101.897 1377.07 101.897V101.116H1375.77V101.897H1371.01V102.352H1370.04L1369.84 101.834C1369.61 101.662 1369.37 101.507 1369.12 101.371C1368.94 101.355 1368.77 101.355 1368.59 101.371C1368.59 101.371 1368.81 102.486 1368.59 102.486H1363.97V104.247H1362.72V104.573H1362.46L1362.52 104.962L1363.24 105.162V123.167H1361.09V123.109H1359.52V108.682L1359.92 108.293L1360.11 107.904L1359.01 107.25L1358.74 106.271C1358.74 106.271 1358.64 105.945 1358.42 105.945H1351.77V107.645H1350.33L1351.11 108.426V122.847H1348.83V124.28H1341.13C1341.06 124.28 1341.06 124.351 1341.06 124.406V128.324C1341.06 128.387 1341.06 128.452 1341.13 128.452H1356.65V128.778H1407.67V123.498H1386.4C1386.36 122.788 1386.4 119.716 1386.4 119.716H1386.01L1386.34 118.346L1386.28 110.51L1386.01 107.252L1386.14 105.952L1386.53 104.908C1386.53 104.908 1386.14 104.796 1386.14 104.445C1386.16 104.16 1386.2 103.877 1386.28 103.601C1386.28 103.601 1386.14 102.924 1386.14 102.749C1386.14 102.574 1385.62 102.034 1385.62 102.034C1385.62 102.034 1385.92 101.734 1385.75 101.516C1385.62 101.206 1385.55 100.872 1385.55 100.535L1383.6 100.527ZM1379.95 105.163H1383.08V121.735L1382.81 122.516H1379.95C1379.95 121.416 1379.98 120.302 1379.95 120.166C1379.87 119.866 1379.48 107.441 1379.48 107.441L1379.75 106.397L1380.01 105.879L1379.95 105.163ZM1374.27 105.355H1375.84V122.516H1373.23V107.249L1373.41 106.597L1373.55 106.008L1373.68 105.49L1374.27 105.355ZM1367.16 105.618H1368.66V122.518H1366.96V107.504L1367.16 106.597L1367.61 106.134L1367.16 105.618ZM1353.91 108.03H1357.11V108.682C1357.29 109.143 1357.42 109.625 1357.5 110.117C1357.44 110.339 1357.5 122.842 1357.5 122.842H1353.26C1353.04 122.451 1353.26 109.854 1353.26 109.854L1353.46 109.073L1353.26 108.681L1353.39 108.157L1353.91 108.03Z" fill="#1B023F"/> -<path d="M1408.52 104.966C1408.52 104.357 1404.8 103.779 1408.82 101.53C1408.95 101.857 1409.97 101.203 1410.18 101.181C1410.73 101.114 1410.9 101.016 1410.84 100.745C1410.82 100.58 1410.85 100.445 1410.96 100.396C1411.01 100.369 1411.04 100.329 1411.06 100.282C1411.08 100.234 1411.08 100.182 1411.06 100.133C1411.01 100.013 1411.05 99.957 1411.15 99.957C1411.27 99.957 1411.3 99.795 1411.29 99.183C1411.29 98.758 1411.26 98.462 1411.24 98.54C1411.19 98.627 1411.13 98.64 1410.99 98.56C1410.89 98.507 1410.78 98.485 1410.75 98.518C1410.72 98.551 1410.59 98.451 1410.47 98.3C1410.35 98.149 1410.21 98.026 1410.16 98.026C1410 98.026 1409.92 97.763 1409.92 97.35C1409.92 97.1774 1409.88 97.0069 1409.81 96.85C1409.74 96.75 1409.75 96.665 1409.84 96.621C1409.94 96.557 1409.94 96.534 1409.83 96.534C1409.69 95.7753 1409.73 94.9959 1409.93 94.252C1409.99 94.0359 1410.01 93.81 1409.98 93.587C1409.96 93.5498 1409.96 93.5077 1409.97 93.4679C1409.98 93.428 1410 93.3931 1410.04 93.369C1410.12 93.1168 1410.15 92.8489 1410.12 92.584C1410.1 92.2834 1410.11 91.9803 1410.17 91.684C1410.29 91.4023 1410.37 91.105 1410.41 90.801C1410.43 90.628 1410.45 90.027 1410.46 89.468C1410.46 89.0438 1410.49 88.6201 1410.57 88.203C1410.67 87.5821 1410.72 86.9545 1410.71 86.326C1410.8 83.491 1410.89 81.407 1410.94 80.968C1411.03 80.168 1411.03 80.108 1410.94 79.856C1410.89 79.714 1410.9 79.627 1410.95 79.656C1411.01 79.685 1411.05 79.393 1411.06 79C1411.07 78.607 1411.11 77.855 1411.14 77.321C1411.17 76.787 1411.25 75.444 1411.3 74.321C1411.41 72.354 1411.57 71.505 1411.83 71.421C1411.89 71.387 1411.95 71.474 1411.95 71.594C1411.96 71.7326 1412.02 71.8632 1412.11 71.966C1412.33 72.5873 1412.43 73.2482 1412.38 73.907C1412.38 74.027 1412.44 74.407 1412.49 74.759C1412.58 75.289 1412.63 75.8231 1412.66 76.359C1412.69 76.892 1412.72 77.471 1412.74 77.647C1412.76 77.823 1412.82 78.247 1412.84 78.597C1412.94 79.742 1413.04 80.321 1413.17 80.397C1413.26 80.464 1413.26 80.506 1413.17 80.562C1413.13 80.6003 1413.11 80.6472 1413.09 80.6985C1413.08 80.7497 1413.08 80.8035 1413.09 80.855C1413.11 80.975 1413.16 81.576 1413.18 82.188C1413.22 83.4 1413.25 83.562 1413.38 83.769C1413.43 83.847 1413.41 83.9 1413.36 83.9C1413.3 83.9 1413.27 84.294 1413.28 84.839C1413.33 86.213 1413.33 86.183 1413.5 86.104C1413.68 86.025 1413.71 86.16 1413.55 86.333C1413.42 86.464 1413.51 86.9 1413.67 86.9C1413.73 86.9 1413.7 87.012 1413.61 87.14C1413.48 87.34 1413.46 87.64 1413.49 88.604C1413.48 89.0342 1413.53 89.4638 1413.63 89.881C1413.69 89.9792 1413.71 90.0962 1413.69 90.208C1413.58 90.8467 1413.58 91.4974 1413.67 92.138C1413.72 92.138 1413.74 92.205 1413.71 92.292C1413.69 92.6134 1413.71 92.9364 1413.77 93.253C1413.97 94.519 1413.97 94.616 1413.81 94.999C1413.73 95.183 1413.71 95.348 1413.75 95.348C1413.86 95.348 1413.82 96.069 1413.68 96.678C1413.41 97.826 1413.31 98.131 1413.24 98.131C1413.21 98.131 1413.1 98.251 1413.02 98.394C1412.89 98.5882 1412.69 98.7274 1412.47 98.785C1412.06 98.905 1412.06 98.916 1412.06 99.472C1412.06 99.952 1412.11 100.053 1412.34 100.204C1412.5 100.315 1412.63 100.47 1412.71 100.651C1412.79 100.88 1412.84 100.891 1413.01 100.782C1413.31 100.598 1413.81 100.827 1413.74 101.12C1413.7 101.251 1413.73 101.307 1413.83 101.262C1413.87 101.252 1413.91 101.253 1413.95 101.267C1413.98 101.28 1414.02 101.304 1414.04 101.337C1414.1 101.437 1414.14 101.426 1414.21 101.329C1414.27 101.209 1414.34 101.209 1414.56 101.329C1414.97 101.513 1414.81 101.382 1415.4 101.622C1415.34 101.787 1415.55 101.907 1415.71 101.798C1415.93 101.678 1416.45 101.644 1416.45 101.765C1416.45 101.829 1416.5 101.852 1416.56 101.807C1416.59 101.783 1416.61 101.748 1416.62 101.708C1416.63 101.668 1416.63 101.626 1416.61 101.589C1416.59 101.513 1416.6 101.449 1416.65 101.449C1416.71 101.449 1416.78 101.536 1416.82 101.649C1416.86 101.811 1416.94 101.833 1417.16 101.78C1417.45 101.702 1417.45 101.691 1417.48 100.568C1417.54 100.168 1417.52 99.7593 1417.42 99.368C1417.35 99.326 1417.3 99.337 1417.3 99.39C1417.3 99.608 1416.52 99.379 1416.18 99.063C1415.58 98.485 1415.52 97.283 1415.96 94.621C1416.07 94.224 1416.09 93.8077 1416.03 93.4C1415.97 93.333 1416.01 93.171 1416.15 92.931C1416.44 92.2444 1416.55 91.4982 1416.48 90.758C1416.48 90.407 1416.53 90.0578 1416.63 89.722C1416.74 89.3869 1416.76 89.0314 1416.7 88.686C1416.65 88.119 1416.66 87.825 1416.76 87.716C1416.88 87.3269 1416.91 86.9193 1416.87 86.516C1416.85 85.185 1416.92 83.854 1417.07 82.532C1417.14 82.3206 1417.16 82.0983 1417.14 81.878C1417.13 81.616 1417.19 80.535 1417.27 79.478C1417.35 78.421 1417.44 77.143 1417.47 76.643C1417.48 75.8958 1417.58 75.1526 1417.76 74.428C1417.92 73.872 1418.12 73.76 1418.22 74.188C1418.25 74.361 1418.33 74.481 1418.37 74.451C1418.49 74.373 1418.59 74.789 1418.59 75.432C1418.61 75.9161 1418.67 76.3979 1418.77 76.873C1418.85 77.2533 1418.9 77.6401 1418.92 78.029C1418.89 78.3348 1418.9 78.644 1418.96 78.945C1419 79.174 1419.04 79.512 1419.05 79.688C1419.06 79.8371 1419.09 79.9843 1419.14 80.124C1419.2 80.3599 1419.23 80.602 1419.23 80.845C1419.24 81.1639 1419.28 81.4812 1419.35 81.792C1419.4 81.9241 1419.41 82.0681 1419.39 82.208C1419.38 82.2216 1419.38 82.2366 1419.38 82.252C1419.38 82.2675 1419.38 82.283 1419.38 82.2975C1419.39 82.312 1419.4 82.3253 1419.41 82.3364C1419.42 82.3475 1419.43 82.3562 1419.45 82.362C1419.47 82.389 1419.49 82.4246 1419.5 82.4637C1419.51 82.5028 1419.51 82.5435 1419.49 82.58C1419.47 82.8216 1419.48 83.0657 1419.54 83.301C1419.63 83.681 1419.63 83.868 1419.55 83.901C1419.54 83.9067 1419.53 83.9152 1419.52 83.9258C1419.51 83.9364 1419.5 83.9488 1419.5 83.9623C1419.5 83.9759 1419.49 83.9901 1419.5 84.0042C1419.5 84.0183 1419.5 84.0318 1419.51 84.044C1419.66 84.9752 1419.72 85.9173 1419.71 86.86C1419.66 87.419 1419.8 87.9778 1420.1 88.452C1420.29 88.583 1420.29 88.594 1420.07 88.77C1419.85 88.946 1419.86 89.03 1419.93 90.156C1419.94 90.6223 1420 91.0863 1420.1 91.542C1420.13 91.5984 1420.15 91.6626 1420.15 91.728C1420.15 91.7934 1420.13 91.8575 1420.1 91.914C1420.02 92.4012 1420.02 92.8976 1420.09 93.386C1420.13 93.5917 1420.15 93.8 1420.16 94.009C1420.15 94.2751 1420.2 94.5393 1420.31 94.783C1420.4 94.883 1420.42 95.154 1420.36 95.601C1420.33 95.973 1420.3 96.364 1420.3 96.484C1420.3 97.249 1420.29 97.456 1420.19 97.565C1420.1 97.7649 1420.04 97.9792 1420.01 98.199C1419.95 98.5413 1419.81 98.8616 1419.58 99.1265C1419.36 99.3914 1419.06 99.5912 1418.74 99.705C1418.41 99.769 1418.38 99.814 1418.35 100.163C1418.33 100.615 1418.36 101.068 1418.43 101.515C1418.45 101.635 1418.47 101.898 1418.48 102.104C1418.5 102.31 1418.53 102.404 1418.55 102.344C1418.64 102.137 1418.89 102.179 1418.96 102.419C1419.01 102.539 1419.11 102.637 1419.18 102.637C1419.41 102.637 1419.38 102.847 1419.15 102.858C1419.01 102.866 1419.02 102.889 1419.2 102.967C1419.34 103.009 1419.44 103.129 1419.44 103.207C1419.44 103.556 1421.49 103.807 1421.69 103.489C1421.75 103.402 1421.79 103.389 1421.84 103.478C1422.02 102.967 1422.89 102.048 1422.73 103.064C1422.86 103.206 1423.01 103.117 1422.96 103.402L1422.94 103.564L1423.23 103.864C1423.53 104.157 1423.83 104.164 1423.83 103.864C1423.83 103.821 1423.85 103.78 1423.88 103.749C1423.91 103.718 1423.95 103.7 1424 103.699C1424.1 103.699 1424.14 103.657 1424.1 103.599C1424.07 103.541 1424.1 103.49 1424.17 103.49C1424.23 103.477 1424.29 103.45 1424.33 103.412C1424.38 103.375 1424.42 103.327 1424.45 103.272C1424.49 103.214 1424.53 103.165 1424.59 103.128C1424.65 103.092 1424.71 103.071 1424.78 103.065C1425.02 103.065 1425.13 102.476 1425.15 100.981L1425.16 100.009L1424.63 99.953C1424.15 99.911 1423.52 99.595 1423.52 99.397C1423.52 99.355 1423.44 99.322 1423.36 99.322C1423.15 99.322 1422.9 98.917 1422.76 98.35C1422.7 98.1119 1422.61 97.8815 1422.5 97.663C1422.3 97.2789 1422.24 96.8332 1422.34 96.409C1422.42 96.267 1422.4 96.109 1422.28 95.875C1422.17 95.6427 1422.12 95.389 1422.12 95.132C1422.12 94.875 1422.17 94.6213 1422.28 94.389C1422.43 94.1404 1422.5 93.8564 1422.48 93.57C1422.48 93.3073 1422.52 93.0463 1422.6 92.796C1422.68 92.5082 1422.72 92.2113 1422.72 91.913C1422.75 91.301 1422.71 91.136 1422.54 90.963C1422.43 90.854 1422.39 90.763 1422.44 90.763C1422.64 90.763 1422.76 90.338 1422.82 89.411C1422.93 87.872 1422.92 87.711 1422.63 87.447C1422.41 87.24 1422.41 87.229 1422.6 87.087C1422.72 86.9842 1422.8 86.8463 1422.84 86.693C1422.85 86.5787 1422.89 86.4695 1422.96 86.377C1423.14 86.0591 1423.23 85.6944 1423.2 85.329C1423.16 85.318 1423.16 85.089 1423.2 84.849C1423.25 84.4945 1423.26 84.1351 1423.22 83.779C1423.18 83.321 1423.2 83.17 1423.3 83.17C1423.4 83.17 1423.42 83.039 1423.37 82.701C1423.33 82.401 1423.35 82.187 1423.44 82.112C1423.54 82.012 1423.53 81.958 1423.41 81.883C1423.29 81.808 1423.28 81.741 1423.37 81.583C1423.41 81.5278 1423.44 81.4623 1423.44 81.3947C1423.44 81.327 1423.42 81.2603 1423.39 81.203C1423.33 81.091 1423.33 81.027 1423.39 81.027C1423.54 81.027 1423.61 80.46 1423.49 80.306C1423.42 80.206 1423.42 80.163 1423.52 80.163C1423.59 80.163 1423.63 80.077 1423.59 79.956C1423.56 79.835 1423.57 79.738 1423.61 79.738C1423.71 79.738 1423.82 79.291 1423.9 78.615C1423.92 78.2552 1423.98 77.8977 1424.05 77.545C1424.19 77.1229 1424.26 76.6799 1424.25 76.235C1424.19 76.193 1424.24 76.017 1424.31 75.852C1424.36 75.7721 1424.39 75.6836 1424.4 75.5918C1424.41 75.5001 1424.41 75.4069 1424.38 75.318C1424.28 75.044 1424.36 74.391 1424.49 74.391C1424.54 74.391 1424.59 74.26 1424.59 74.098C1424.6 73.8723 1424.63 73.6483 1424.69 73.43C1424.77 73.0407 1424.82 72.6468 1424.84 72.251C1424.9 71.351 1424.97 71.075 1425.19 71.075C1425.28 71.075 1425.38 70.933 1425.41 70.757C1425.5 70.332 1425.83 70.321 1425.92 70.726C1425.97 70.8902 1426.04 71.0452 1426.14 71.184C1426.29 71.357 1426.37 71.924 1426.45 73.43C1426.48 73.9305 1426.53 74.4291 1426.61 74.924C1426.69 75.298 1426.73 75.6789 1426.73 76.061C1426.74 76.4736 1426.77 76.8852 1426.84 77.293C1426.92 77.8783 1426.96 78.4694 1426.96 79.061C1426.93 79.4811 1426.96 79.9031 1427.05 80.315C1427.15 80.7293 1427.2 81.1539 1427.2 81.58C1427.24 82.236 1427.31 83.217 1427.34 83.742C1427.37 84.267 1427.4 85.007 1427.39 85.368C1427.36 85.6859 1427.4 86.006 1427.51 86.307C1427.63 86.6608 1427.65 87.0414 1427.57 87.407C1427.51 88.107 1427.52 88.259 1427.69 88.499C1427.92 89.0311 1427.98 89.6196 1427.88 90.189C1427.86 90.2439 1427.85 90.303 1427.85 90.3616C1427.86 90.4202 1427.88 90.4768 1427.91 90.527C1427.99 90.7702 1428.03 91.0244 1428.04 91.281C1428.05 91.574 1428.11 91.815 1428.15 91.815C1428.19 91.815 1428.23 91.882 1428.23 91.969C1428.28 92.1263 1428.37 92.2683 1428.49 92.382C1428.64 92.558 1428.7 92.682 1428.62 92.7C1428.49 93.1611 1428.49 93.6489 1428.63 94.108C1428.7 94.261 1428.74 94.4275 1428.75 94.597C1428.77 94.8182 1428.83 95.035 1428.91 95.242C1429 95.4484 1429.03 95.6741 1429 95.896C1428.98 96.114 1429 96.323 1429.07 96.354C1429.22 96.454 1429.23 96.846 1429.07 96.846C1429 96.846 1429 96.913 1429.07 97.053C1429.15 97.1819 1429.19 97.3319 1429.19 97.4837C1429.18 97.6356 1429.13 97.7823 1429.04 97.905C1428.99 97.9749 1428.95 98.055 1428.92 98.1408C1428.9 98.2266 1428.89 98.3164 1428.9 98.405C1428.92 98.4915 1428.91 98.5802 1428.89 98.665C1428.87 98.7499 1428.83 98.8288 1428.77 98.8963C1428.71 98.9639 1428.64 99.0184 1428.57 99.0561C1428.49 99.0939 1428.4 99.114 1428.31 99.115C1428.15 99.123 1428.06 99.19 1428.08 99.266C1428.15 99.42 1427.8 99.626 1427.46 99.626C1427.24 99.6432 1427.02 99.6797 1426.81 99.735L1426.4 99.844L1426.45 101.044C1426.39 101.582 1426.48 102.125 1426.72 102.614C1426.98 103.064 1427 103.293 1426.78 103.477C1426.53 103.684 1426.58 103.877 1426.89 103.815C1426.96 103.812 1427.02 103.789 1427.06 103.75C1427.11 103.711 1427.15 103.657 1427.17 103.597C1427.17 103.455 1427.18 103.443 1427.25 103.563C1427.29 103.61 1427.34 103.643 1427.4 103.657C1427.46 103.671 1427.52 103.666 1427.57 103.641C1427.73 103.585 1427.82 103.619 1427.87 103.728C1427.94 103.912 1428.23 103.968 1428.23 103.792C1428.23 103.764 1428.24 103.737 1428.26 103.717C1428.28 103.697 1428.31 103.685 1428.34 103.683C1428.4 103.683 1428.45 103.783 1428.45 103.901C1428.45 103.931 1428.45 103.961 1428.46 103.989C1428.47 104.017 1428.49 104.042 1428.51 104.064C1428.53 104.086 1428.55 104.103 1428.58 104.114C1428.61 104.125 1428.64 104.131 1428.67 104.13C1428.77 104.141 1428.94 104.152 1429 104.164C1429.69 104.885 1430.45 105.354 1428.98 105.256C1427.78 105.097 1426.56 105.068 1425.35 105.169C1423.19 105.158 1410.58 105.233 1408.56 104.959L1408.52 104.966Z" fill="#1B023F"/> -<path d="M1308.63 141.922C1308.63 141.313 1304.91 140.735 1308.93 138.486C1309.06 138.813 1310.07 138.159 1310.28 138.137C1310.84 138.07 1311 137.972 1310.95 137.701C1310.93 137.536 1310.96 137.401 1311.07 137.352C1311.11 137.325 1311.15 137.285 1311.16 137.238C1311.18 137.19 1311.18 137.138 1311.17 137.089C1311.11 136.969 1311.16 136.913 1311.26 136.913C1311.38 136.913 1311.41 136.751 1311.4 136.139C1311.4 135.714 1311.36 135.418 1311.34 135.496C1311.3 135.583 1311.23 135.596 1311.09 135.516C1310.99 135.463 1310.88 135.441 1310.85 135.474C1310.82 135.507 1310.7 135.407 1310.58 135.256C1310.46 135.105 1310.32 134.982 1310.26 134.982C1310.11 134.982 1310.02 134.719 1310.02 134.306C1310.02 134.133 1309.99 133.963 1309.91 133.806C1309.85 133.706 1309.86 133.621 1309.95 133.577C1310.05 133.513 1310.05 133.49 1309.93 133.49C1309.8 132.731 1309.83 131.952 1310.03 131.208C1310.1 130.992 1310.11 130.766 1310.09 130.543C1310.07 130.506 1310.07 130.464 1310.08 130.424C1310.09 130.384 1310.11 130.349 1310.14 130.325C1310.23 130.073 1310.26 129.805 1310.23 129.54C1310.2 129.239 1310.22 128.936 1310.28 128.64C1310.4 128.358 1310.48 128.061 1310.51 127.757C1310.53 127.584 1310.56 126.983 1310.57 126.424C1310.56 126 1310.6 125.576 1310.68 125.159C1310.78 124.538 1310.82 123.91 1310.82 123.282C1310.91 120.447 1310.99 118.363 1311.05 117.924C1311.14 117.124 1311.14 117.064 1311.05 116.812C1310.99 116.67 1311 116.583 1311.06 116.612C1311.12 116.641 1311.16 116.349 1311.17 115.956C1311.18 115.563 1311.21 114.811 1311.24 114.277C1311.28 113.743 1311.35 112.4 1311.41 111.277C1311.52 109.31 1311.67 108.461 1311.93 108.377C1312 108.343 1312.05 108.43 1312.05 108.55C1312.07 108.689 1312.12 108.819 1312.22 108.922C1312.44 109.543 1312.53 110.204 1312.49 110.863C1312.49 110.983 1312.54 111.363 1312.6 111.715C1312.68 112.245 1312.74 112.779 1312.76 113.315C1312.8 113.848 1312.83 114.427 1312.85 114.603C1312.87 114.779 1312.93 115.203 1312.95 115.553C1313.05 116.698 1313.15 117.277 1313.28 117.353C1313.36 117.42 1313.36 117.462 1313.28 117.518C1313.24 117.556 1313.21 117.603 1313.2 117.654C1313.19 117.706 1313.19 117.76 1313.2 117.811C1313.22 117.931 1313.26 118.532 1313.29 119.144C1313.33 120.356 1313.35 120.518 1313.49 120.725C1313.53 120.803 1313.52 120.856 1313.46 120.856C1313.41 120.856 1313.38 121.25 1313.39 121.795C1313.43 123.169 1313.43 123.139 1313.61 123.06C1313.78 122.981 1313.81 123.116 1313.65 123.289C1313.52 123.42 1313.62 123.856 1313.78 123.856C1313.84 123.856 1313.8 123.968 1313.72 124.096C1313.59 124.296 1313.56 124.596 1313.6 125.56C1313.59 125.99 1313.63 126.42 1313.74 126.837C1313.8 126.935 1313.82 127.052 1313.79 127.164C1313.69 127.803 1313.68 128.453 1313.77 129.094C1313.83 129.094 1313.85 129.161 1313.82 129.248C1313.79 129.569 1313.81 129.892 1313.87 130.209C1314.07 131.475 1314.07 131.572 1313.91 131.955C1313.84 132.139 1313.81 132.304 1313.86 132.304C1313.97 132.304 1313.92 133.025 1313.78 133.634C1313.51 134.782 1313.41 135.087 1313.35 135.087C1313.31 135.087 1313.2 135.207 1313.13 135.35C1313 135.544 1312.8 135.683 1312.57 135.741C1312.17 135.861 1312.17 135.872 1312.17 136.428C1312.17 136.908 1312.21 137.009 1312.44 137.16C1312.61 137.271 1312.73 137.426 1312.81 137.607C1312.9 137.836 1312.94 137.847 1313.11 137.738C1313.41 137.554 1313.92 137.783 1313.84 138.076C1313.81 138.207 1313.83 138.263 1313.93 138.218C1313.97 138.208 1314.01 138.209 1314.05 138.223C1314.09 138.236 1314.12 138.26 1314.15 138.293C1314.21 138.393 1314.25 138.382 1314.31 138.285C1314.38 138.165 1314.45 138.165 1314.66 138.285C1315.08 138.469 1314.91 138.338 1315.5 138.578C1315.45 138.743 1315.66 138.863 1315.82 138.754C1316.04 138.634 1316.55 138.6 1316.55 138.721C1316.55 138.785 1316.61 138.808 1316.66 138.763C1316.7 138.739 1316.72 138.704 1316.73 138.664C1316.74 138.624 1316.73 138.582 1316.71 138.545C1316.69 138.469 1316.7 138.405 1316.76 138.405C1316.82 138.405 1316.89 138.492 1316.92 138.605C1316.97 138.767 1317.04 138.789 1317.27 138.736C1317.56 138.658 1317.56 138.647 1317.59 137.524C1317.65 137.124 1317.63 136.715 1317.52 136.324C1317.46 136.282 1317.4 136.293 1317.4 136.346C1317.4 136.564 1316.63 136.335 1316.29 136.019C1315.69 135.441 1315.63 134.239 1316.06 131.577C1316.17 131.18 1316.2 130.764 1316.14 130.356C1316.07 130.289 1316.11 130.127 1316.26 129.887C1316.54 129.2 1316.65 128.454 1316.58 127.714C1316.58 127.363 1316.64 127.014 1316.74 126.678C1316.84 126.343 1316.86 125.987 1316.8 125.642C1316.76 125.075 1316.77 124.781 1316.87 124.672C1316.98 124.283 1317.02 123.875 1316.98 123.472C1316.96 122.141 1317.02 120.81 1317.18 119.488C1317.24 119.277 1317.27 119.054 1317.24 118.834C1317.23 118.572 1317.3 117.491 1317.38 116.434C1317.45 115.377 1317.55 114.099 1317.58 113.599C1317.59 112.852 1317.69 112.109 1317.87 111.384C1318.02 110.828 1318.23 110.716 1318.33 111.144C1318.36 111.317 1318.44 111.437 1318.48 111.407C1318.6 111.329 1318.7 111.745 1318.7 112.388C1318.72 112.872 1318.78 113.354 1318.87 113.829C1318.96 114.209 1319.01 114.596 1319.03 114.985C1318.99 115.291 1319.01 115.6 1319.07 115.901C1319.1 116.13 1319.15 116.468 1319.16 116.644C1319.16 116.793 1319.19 116.94 1319.25 117.08C1319.3 117.316 1319.33 117.558 1319.33 117.801C1319.34 118.12 1319.38 118.437 1319.45 118.748C1319.51 118.88 1319.52 119.024 1319.5 119.164C1319.49 119.178 1319.48 119.193 1319.48 119.208C1319.48 119.223 1319.48 119.239 1319.49 119.253C1319.49 119.268 1319.5 119.281 1319.51 119.292C1319.52 119.304 1319.54 119.312 1319.55 119.318C1319.58 119.345 1319.6 119.381 1319.61 119.42C1319.62 119.459 1319.61 119.5 1319.6 119.536C1319.57 119.778 1319.59 120.022 1319.65 120.257C1319.74 120.637 1319.74 120.824 1319.66 120.857C1319.65 120.863 1319.64 120.871 1319.63 120.882C1319.62 120.892 1319.61 120.905 1319.61 120.918C1319.6 120.932 1319.6 120.946 1319.6 120.96C1319.6 120.974 1319.61 120.988 1319.62 121C1319.76 121.931 1319.83 122.873 1319.82 123.816C1319.77 124.375 1319.91 124.934 1320.21 125.408C1320.39 125.539 1320.39 125.55 1320.18 125.726C1319.96 125.902 1319.97 125.986 1320.03 127.112C1320.05 127.578 1320.11 128.042 1320.21 128.498C1320.24 128.554 1320.26 128.619 1320.26 128.684C1320.26 128.749 1320.24 128.814 1320.21 128.87C1320.13 129.357 1320.12 129.854 1320.19 130.342C1320.23 130.548 1320.25 130.756 1320.26 130.965C1320.26 131.231 1320.31 131.495 1320.42 131.739C1320.5 131.839 1320.52 132.11 1320.47 132.557C1320.43 132.929 1320.4 133.32 1320.4 133.44C1320.4 134.205 1320.39 134.412 1320.3 134.521C1320.2 134.721 1320.14 134.935 1320.12 135.155C1320.06 135.497 1319.91 135.818 1319.69 136.082C1319.46 136.347 1319.17 136.547 1318.84 136.661C1318.52 136.725 1318.48 136.77 1318.46 137.119C1318.44 137.571 1318.46 138.024 1318.54 138.471C1318.56 138.591 1318.58 138.854 1318.59 139.06C1318.6 139.266 1318.64 139.36 1318.66 139.3C1318.74 139.093 1319 139.135 1319.07 139.375C1319.12 139.495 1319.21 139.593 1319.29 139.593C1319.52 139.593 1319.49 139.803 1319.25 139.814C1319.11 139.822 1319.13 139.845 1319.31 139.923C1319.44 139.965 1319.55 140.085 1319.55 140.163C1319.55 140.512 1321.6 140.763 1321.8 140.445C1321.85 140.358 1321.9 140.345 1321.95 140.434C1322.13 139.923 1323 139.004 1322.84 140.02C1322.97 140.162 1323.12 140.073 1323.07 140.358L1323.04 140.52L1323.34 140.82C1323.64 141.113 1323.94 141.12 1323.94 140.82C1323.94 140.777 1323.96 140.736 1323.99 140.705C1324.02 140.674 1324.06 140.656 1324.1 140.655C1324.2 140.655 1324.24 140.613 1324.21 140.555C1324.18 140.497 1324.21 140.446 1324.27 140.446C1324.34 140.433 1324.39 140.406 1324.44 140.368C1324.49 140.331 1324.53 140.283 1324.56 140.228C1324.59 140.17 1324.64 140.121 1324.7 140.084C1324.75 140.048 1324.82 140.027 1324.89 140.021C1325.13 140.021 1325.24 139.432 1325.26 137.937L1325.27 136.965L1324.73 136.909C1324.26 136.867 1323.62 136.551 1323.62 136.353C1323.62 136.311 1323.55 136.278 1323.47 136.278C1323.26 136.278 1323.01 135.873 1322.87 135.306C1322.81 135.068 1322.72 134.837 1322.61 134.619C1322.4 134.235 1322.34 133.789 1322.44 133.365C1322.53 133.223 1322.51 133.065 1322.39 132.831C1322.28 132.599 1322.22 132.345 1322.22 132.088C1322.22 131.831 1322.28 131.577 1322.39 131.345C1322.53 131.096 1322.6 130.812 1322.59 130.526C1322.59 130.263 1322.63 130.002 1322.71 129.752C1322.79 129.464 1322.83 129.167 1322.83 128.869C1322.85 128.257 1322.82 128.092 1322.64 127.919C1322.53 127.81 1322.49 127.719 1322.54 127.719C1322.74 127.719 1322.86 127.294 1322.93 126.367C1323.03 124.828 1323.03 124.667 1322.74 124.403C1322.51 124.196 1322.51 124.185 1322.71 124.043C1322.83 123.94 1322.91 123.802 1322.95 123.649C1322.96 123.535 1323 123.425 1323.07 123.333C1323.25 123.015 1323.33 122.65 1323.31 122.285C1323.26 122.274 1323.26 122.045 1323.31 121.805C1323.36 121.451 1323.37 121.091 1323.33 120.735C1323.29 120.277 1323.31 120.126 1323.41 120.126C1323.5 120.126 1323.53 119.995 1323.48 119.657C1323.44 119.357 1323.46 119.143 1323.55 119.068C1323.65 118.968 1323.63 118.914 1323.51 118.839C1323.39 118.764 1323.38 118.697 1323.48 118.539C1323.52 118.484 1323.54 118.418 1323.54 118.351C1323.55 118.283 1323.53 118.216 1323.49 118.159C1323.44 118.047 1323.44 117.983 1323.49 117.983C1323.65 117.983 1323.72 117.416 1323.6 117.262C1323.53 117.162 1323.53 117.119 1323.62 117.119C1323.7 117.119 1323.73 117.033 1323.7 116.912C1323.66 116.791 1323.68 116.694 1323.72 116.694C1323.82 116.694 1323.93 116.247 1324.01 115.571C1324.03 115.211 1324.08 114.854 1324.16 114.501C1324.3 114.079 1324.37 113.636 1324.36 113.191C1324.3 113.149 1324.35 112.973 1324.42 112.808C1324.47 112.728 1324.5 112.64 1324.51 112.548C1324.52 112.456 1324.51 112.363 1324.49 112.274C1324.39 112 1324.47 111.347 1324.6 111.347C1324.65 111.347 1324.7 111.216 1324.7 111.054C1324.71 110.828 1324.74 110.604 1324.8 110.386C1324.87 109.997 1324.92 109.603 1324.95 109.207C1325 108.307 1325.08 108.031 1325.3 108.031C1325.39 108.031 1325.48 107.889 1325.52 107.713C1325.6 107.288 1325.93 107.277 1326.03 107.682C1326.07 107.846 1326.15 108.001 1326.25 108.14C1326.4 108.313 1326.48 108.88 1326.55 110.386C1326.58 110.886 1326.64 111.385 1326.72 111.88C1326.79 112.254 1326.83 112.635 1326.84 113.017C1326.84 113.43 1326.88 113.841 1326.94 114.249C1327.03 114.834 1327.07 115.425 1327.06 116.017C1327.04 116.437 1327.07 116.859 1327.15 117.271C1327.25 117.685 1327.3 118.11 1327.3 118.536C1327.35 119.192 1327.41 120.173 1327.45 120.698C1327.48 121.223 1327.5 121.963 1327.49 122.324C1327.46 122.642 1327.51 122.962 1327.61 123.263C1327.73 123.617 1327.76 123.997 1327.68 124.363C1327.61 125.063 1327.62 125.215 1327.8 125.455C1328.03 125.987 1328.09 126.576 1327.98 127.145C1327.96 127.2 1327.95 127.259 1327.96 127.318C1327.96 127.376 1327.98 127.433 1328.01 127.483C1328.1 127.726 1328.14 127.98 1328.14 128.237C1328.16 128.53 1328.21 128.771 1328.25 128.771C1328.3 128.771 1328.33 128.838 1328.33 128.925C1328.38 129.082 1328.47 129.224 1328.59 129.338C1328.75 129.514 1328.8 129.638 1328.72 129.656C1328.6 130.117 1328.6 130.605 1328.73 131.064C1328.81 131.217 1328.85 131.383 1328.85 131.553C1328.88 131.774 1328.94 131.991 1329.02 132.198C1329.11 132.404 1329.14 132.63 1329.11 132.852C1329.08 133.07 1329.11 133.279 1329.18 133.31C1329.32 133.41 1329.33 133.802 1329.18 133.802C1329.11 133.802 1329.11 133.869 1329.18 134.009C1329.26 134.138 1329.3 134.288 1329.3 134.44C1329.29 134.592 1329.24 134.738 1329.15 134.861C1329.09 134.931 1329.05 135.011 1329.03 135.097C1329 135.183 1329 135.272 1329.01 135.361C1329.02 135.447 1329.02 135.536 1329 135.621C1328.97 135.706 1328.93 135.785 1328.88 135.852C1328.82 135.92 1328.75 135.974 1328.67 136.012C1328.59 136.05 1328.51 136.07 1328.42 136.071C1328.25 136.079 1328.17 136.146 1328.19 136.222C1328.25 136.376 1327.9 136.582 1327.57 136.582C1327.35 136.599 1327.13 136.636 1326.91 136.691L1326.51 136.8L1326.55 138C1326.5 138.538 1326.59 139.081 1326.82 139.57C1327.09 140.02 1327.11 140.249 1326.89 140.433C1326.64 140.64 1326.69 140.833 1327 140.771C1327.06 140.768 1327.12 140.745 1327.17 140.706C1327.22 140.667 1327.26 140.613 1327.27 140.553C1327.27 140.411 1327.28 140.399 1327.36 140.519C1327.4 140.566 1327.45 140.599 1327.5 140.613C1327.56 140.627 1327.62 140.622 1327.68 140.597C1327.84 140.541 1327.93 140.575 1327.98 140.684C1328.05 140.868 1328.34 140.924 1328.34 140.748C1328.34 140.72 1328.35 140.693 1328.37 140.673C1328.39 140.653 1328.42 140.641 1328.44 140.639C1328.51 140.639 1328.55 140.739 1328.55 140.857C1328.55 140.887 1328.56 140.917 1328.57 140.945C1328.58 140.973 1328.59 140.998 1328.61 141.02C1328.63 141.042 1328.66 141.059 1328.68 141.07C1328.71 141.081 1328.74 141.087 1328.77 141.086C1328.88 141.097 1329.04 141.108 1329.11 141.12C1329.8 141.841 1330.55 142.31 1329.09 142.212C1327.88 142.053 1326.66 142.024 1325.45 142.125C1323.29 142.114 1310.69 142.189 1308.66 141.915L1308.63 141.922Z" fill="#1B023F"/> -<path d="M1185 168.582L1251.59 149.682L1320.03 128.605L1341.55 122.995H1380.64L1406.5 100.595H1440V184.004L1185 168.582Z" fill="#1B023F"/> -<path d="M666.834 141.229L733.373 139.045L795.773 141.292L774.217 149.953H660.566L666.834 141.229Z" fill="#1B023F"/> -<path d="M740.105 183.898L891.935 184.936C891.755 183.473 891.55 181.986 891.285 180.607C890.517 176.669 890.122 172.667 890.107 168.655V168.474C890.046 167.137 889.676 165.832 889.027 164.661C889.04 164.647 889.051 164.632 889.06 164.615C889.103 164.515 889.076 164.486 889.114 164.409C889.165 164.3 889.184 164.178 889.168 164.058C889.168 163.824 888.801 163.606 888.806 163.227C888.811 162.848 889.391 164.327 889.44 163.818C889.315 163.157 889.002 162.545 888.54 162.056C888.427 162.045 888.492 162.31 888.513 162.391C888.534 162.472 888.5 162.525 888.443 162.522C888.386 162.519 888.3 162.41 888.311 162.302C888.322 162.194 888.362 162.07 888.327 162.032C888.292 161.994 888.303 161.878 888.276 161.778C888.249 161.678 888.195 161.795 888.134 161.706C888.073 161.617 888.115 161.391 888.134 161.288C888.153 161.185 888.113 161.233 888.064 161.243C888.015 161.253 888.048 161.179 887.964 161.196C887.88 161.213 887.904 161.533 887.912 161.628C887.92 161.723 887.896 161.623 887.834 161.701C887.772 161.779 887.861 161.817 887.796 161.988C887.731 162.159 887.865 162.352 887.861 162.488C887.86 162.512 887.853 162.536 887.841 162.557C887.829 162.578 887.812 162.596 887.792 162.61C887.286 161.881 886.732 161.186 886.134 160.53C885.661 160.047 885.16 159.592 884.634 159.168C884.619 159.156 884.607 159.141 884.598 159.124C884.59 159.106 884.585 159.087 884.585 159.068V154.426C884.585 150.836 884.061 149.371 883.613 149.206C883.358 149.113 883.232 148.835 883.113 148.566C882.953 148.208 882.801 147.866 882.373 147.866C881.929 147.877 881.487 147.923 881.05 148.005C880.695 148.072 880.336 148.112 879.975 148.124C879.945 148.124 876.903 148.042 876.702 147.343C876.64 147.156 876.527 146.989 876.376 146.861C876.226 146.733 876.043 146.649 875.848 146.618C875.799 146.618 875.725 146.623 875.631 146.626C875.466 146.634 875.24 146.644 874.992 146.644C874.457 146.678 873.921 146.591 873.423 146.391C870.944 145.689 868.424 145.144 865.877 144.758C865.336 144.69 864.801 144.579 864.277 144.425C863.82 144.277 863.343 144.2 862.863 144.195C862.38 144.215 861.917 144.398 861.55 144.713C861.29 144.943 860.964 145.085 860.618 145.12C860.448 145.125 860.279 145.14 860.111 145.167C859.903 145.199 859.692 145.217 859.481 145.221C858.937 145.215 858.409 145.033 857.976 144.703C857.334 144.252 857.285 144.097 857.322 143.826C857.335 143.713 857.325 143.599 857.292 143.49C857.26 143.381 857.207 143.28 857.135 143.192C857.037 143.029 856.951 142.859 856.877 142.684C856.692 142.256 856.484 143.014 854.62 142.684L854.289 142.624V142.157H852.473V141.283H851.631L805.974 141.101L795.059 141.325V141.308H793.242V142.181H791.933C791.848 142.189 791.766 142.193 791.685 142.193C791.585 142.193 791.485 142.188 791.385 142.185C791.285 142.182 791.203 142.175 791.114 142.175C790.993 142.175 790.858 142.18 790.714 142.183C790.552 142.188 790.382 142.193 790.214 142.193C789.533 142.193 789.22 142.103 789.137 141.881C789.009 141.548 785.504 141.835 785.524 141.244C785.525 141.213 785.537 141.183 785.558 141.159C785.6 141.115 785.636 141.065 785.666 141.012H784.006C783.906 141.012 783.782 141.004 783.634 140.994C783.457 140.981 783.255 140.968 783.063 140.968C782.633 140.968 782.47 141.04 782.411 141.102C782.099 141.43 781.481 141.43 780.827 141.43C780.593 141.422 780.359 141.398 780.127 141.36C779.814 141.31 779.499 141.28 779.182 141.272C778.926 141.259 778.672 141.309 778.439 141.416C778.313 141.483 778.171 141.518 778.028 141.516C777.764 141.495 777.505 141.425 777.266 141.31C776.773 141.089 776.24 140.971 775.699 140.964C775.222 140.966 774.746 140.995 774.272 141.049C774.055 141.07 773.886 141.088 773.751 141.088C773.651 141.088 773.404 141.088 773.328 140.882C773.226 140.7 773.074 140.551 772.89 140.453C772.706 140.354 772.498 140.311 772.29 140.327C772.176 140.328 772.063 140.34 771.951 140.361C771.513 140.446 771.442 140.712 771.37 140.993C771.308 141.222 771.242 141.48 770.947 141.542C770.89 141.555 770.831 141.561 770.772 141.56C770.59 141.55 770.41 141.516 770.236 141.46C769.949 141.374 769.651 141.327 769.351 141.321C769.143 141.322 768.937 141.345 768.734 141.391C768.413 141.46 768.087 141.506 767.76 141.53C767.202 141.581 767.111 141.61 767.111 141.889C767.107 142.107 767.069 142.324 767 142.531C766.919 142.799 766.929 142.817 767.037 142.866C767.428 143.047 770.969 143.476 770.891 144.627C770.889 144.659 770.876 144.688 770.853 144.711C770.83 144.733 770.8 144.745 770.768 144.746H762.302C758.146 144.746 755.949 145.474 755.949 146.846C755.949 147.713 755.204 147.713 754.849 147.713C754.714 147.713 754.571 147.705 754.419 147.7C754.267 147.695 754.102 147.687 753.94 147.687C753.605 147.636 753.263 147.69 752.96 147.842C752.658 147.995 752.411 148.238 752.253 148.538C752.012 149.54 752.006 150.584 752.236 151.589C752.521 153.923 752.836 156.567 750.541 157.371C747.265 158.516 745.777 163.226 745.703 163.471C745.649 163.861 744.269 173.924 742.668 179.126C742.028 180.846 741.156 182.469 740.075 183.952" fill="#1B023F"/> -<path d="M636.105 183.898L787.935 184.936C787.755 183.473 787.55 181.986 787.285 180.607C786.517 176.669 786.122 172.667 786.107 168.655V168.474C786.046 167.137 785.676 165.832 785.027 164.661C785.04 164.647 785.051 164.632 785.06 164.615C785.103 164.515 785.076 164.486 785.114 164.409C785.165 164.3 785.184 164.178 785.168 164.058C785.168 163.824 784.801 163.606 784.806 163.227C784.811 162.848 785.391 164.327 785.44 163.818C785.315 163.157 785.002 162.545 784.54 162.056C784.427 162.045 784.492 162.31 784.513 162.391C784.534 162.472 784.5 162.525 784.443 162.522C784.386 162.519 784.3 162.41 784.311 162.302C784.322 162.194 784.362 162.07 784.327 162.032C784.292 161.994 784.303 161.878 784.276 161.778C784.249 161.678 784.195 161.795 784.134 161.706C784.073 161.617 784.115 161.391 784.134 161.288C784.153 161.185 784.113 161.233 784.064 161.243C784.015 161.253 784.048 161.179 783.964 161.196C783.88 161.213 783.904 161.533 783.912 161.628C783.92 161.723 783.896 161.623 783.834 161.701C783.772 161.779 783.861 161.817 783.796 161.988C783.731 162.159 783.865 162.352 783.861 162.488C783.86 162.512 783.853 162.536 783.841 162.557C783.829 162.578 783.812 162.596 783.792 162.61C783.286 161.881 782.732 161.186 782.134 160.53C781.661 160.047 781.16 159.592 780.634 159.168C780.619 159.156 780.607 159.141 780.598 159.124C780.59 159.106 780.585 159.087 780.585 159.068V154.426C780.585 150.836 780.061 149.371 779.613 149.206C779.358 149.113 779.232 148.835 779.113 148.566C778.953 148.208 778.801 147.866 778.373 147.866C777.929 147.877 777.487 147.923 777.05 148.005C776.695 148.072 776.336 148.112 775.975 148.124C775.945 148.124 772.903 148.042 772.702 147.343C772.64 147.156 772.527 146.989 772.376 146.861C772.226 146.733 772.043 146.649 771.848 146.618C771.799 146.618 771.725 146.623 771.631 146.626C771.466 146.634 771.24 146.644 770.992 146.644C770.457 146.678 769.921 146.591 769.423 146.391C766.944 145.689 764.424 145.144 761.877 144.758C761.336 144.69 760.801 144.579 760.277 144.425C759.82 144.277 759.343 144.2 758.863 144.195C758.38 144.215 757.917 144.398 757.55 144.713C757.29 144.943 756.964 145.085 756.618 145.12C756.448 145.125 756.279 145.14 756.111 145.167C755.903 145.199 755.692 145.217 755.481 145.221C754.937 145.215 754.409 145.033 753.976 144.703C753.334 144.252 753.285 144.097 753.322 143.826C753.335 143.713 753.325 143.599 753.292 143.49C753.26 143.381 753.207 143.28 753.135 143.192C753.037 143.029 752.951 142.859 752.877 142.684C752.692 142.256 752.653 142.166 750.789 141.836L750.458 141.776V141.309H748.642V140.435H747.8C687.859 143.903 666.84 144.75 658.311 144.75C654.155 144.75 651.958 145.478 651.958 146.85C651.958 147.717 651.213 147.717 650.858 147.717C650.723 147.717 650.58 147.709 650.428 147.704C650.276 147.699 650.111 147.691 649.949 147.691C649.614 147.64 649.272 147.694 648.969 147.847C648.667 147.999 648.42 148.242 648.262 148.542C648.021 149.544 648.015 150.588 648.245 151.593C648.53 153.927 648.845 156.571 646.55 157.375C643.274 158.52 641.786 163.23 641.712 163.475C641.658 163.865 640.278 173.928 638.677 179.13C638.037 180.85 637.165 182.473 636.084 183.956" fill="#1B023F"/> -<path d="M699.894 183.898L548.064 184.936C548.244 183.473 548.449 181.986 548.714 180.607C549.483 176.669 549.877 172.667 549.892 168.655V168.474C549.954 167.137 550.323 165.832 550.972 164.662C550.959 164.648 550.948 164.633 550.939 164.616C550.896 164.516 550.923 164.487 550.885 164.41C550.834 164.301 550.815 164.179 550.831 164.059C550.831 163.825 551.198 163.607 551.193 163.228C551.188 162.849 550.608 164.328 550.559 163.819C550.685 163.158 550.997 162.546 551.459 162.057C551.572 162.046 551.507 162.311 551.486 162.392C551.465 162.473 551.499 162.526 551.556 162.523C551.613 162.52 551.699 162.411 551.688 162.303C551.677 162.195 551.637 162.071 551.672 162.033C551.707 161.995 551.696 161.879 551.723 161.779C551.75 161.679 551.804 161.796 551.865 161.707C551.926 161.618 551.884 161.392 551.865 161.289C551.846 161.186 551.886 161.234 551.935 161.244C551.984 161.254 551.951 161.18 552.035 161.197C552.119 161.214 552.095 161.534 552.087 161.629C552.079 161.724 552.103 161.624 552.165 161.702C552.227 161.78 552.138 161.818 552.203 161.989C552.268 162.16 552.134 162.353 552.138 162.489C552.14 162.513 552.146 162.537 552.158 162.558C552.17 162.579 552.187 162.597 552.207 162.611C552.713 161.882 553.267 161.187 553.865 160.531C554.338 160.048 554.839 159.593 555.365 159.169C555.38 159.157 555.393 159.142 555.401 159.125C555.41 159.107 555.414 159.088 555.414 159.069V154.427C555.414 150.837 555.938 149.372 556.386 149.207C556.641 149.114 556.767 148.836 556.886 148.567C557.046 148.209 557.199 147.867 557.626 147.867C558.07 147.878 558.513 147.924 558.949 148.006C559.304 148.073 559.664 148.113 560.024 148.125C560.054 148.125 563.096 148.043 563.297 147.344C563.36 147.157 563.472 146.99 563.623 146.862C563.773 146.734 563.956 146.65 564.151 146.619C564.2 146.619 564.274 146.624 564.368 146.627C564.533 146.635 564.759 146.645 565.007 146.645C565.543 146.679 566.079 146.592 566.576 146.392C569.055 145.69 571.575 145.145 574.122 144.759C574.664 144.691 575.199 144.58 575.722 144.426C576.179 144.278 576.656 144.201 577.136 144.196C577.62 144.216 578.082 144.399 578.449 144.714C578.71 144.944 579.036 145.086 579.381 145.121C579.551 145.126 579.721 145.142 579.888 145.168C580.097 145.2 580.307 145.218 580.518 145.222C581.063 145.216 581.591 145.034 582.023 144.704C582.665 144.253 582.714 144.098 582.677 143.827C582.665 143.714 582.675 143.6 582.707 143.491C582.739 143.382 582.792 143.281 582.864 143.193C582.963 143.03 583.049 142.86 583.122 142.685C583.307 142.257 583.346 142.167 585.21 141.837L585.541 141.777V141.31H587.357V140.436H588.199L613.947 140.626H614.789V141.5H616.606V142.373H617.906V144.086C617.991 144.094 618.073 144.098 618.154 144.098C618.254 144.098 618.354 144.093 618.454 144.09C618.554 144.087 618.636 144.08 618.725 144.08C618.846 144.08 618.981 144.085 619.125 144.088C619.287 144.093 619.457 144.098 619.625 144.098C620.306 144.098 620.619 144.008 620.702 143.786V143.186L620.691 142.835L620.681 142.492C620.68 142.461 620.668 142.431 620.647 142.407C620.606 142.363 620.569 142.313 620.539 142.26C649.585 142.146 658.639 141.232 667.171 141.232C671.327 141.232 684.048 145.484 684.048 146.861C684.048 147.728 684.793 147.728 685.148 147.728C685.283 147.728 685.426 147.72 685.578 147.715C685.73 147.71 685.895 147.702 686.057 147.702C686.392 147.651 686.735 147.705 687.037 147.857C687.34 148.01 687.587 148.253 687.744 148.553C687.985 149.555 687.991 150.599 687.761 151.604C687.476 153.938 687.161 156.582 689.456 157.386C692.732 158.531 694.22 163.241 694.294 163.486C694.348 163.876 695.728 173.939 697.329 179.141C697.969 180.861 698.842 182.484 699.922 183.967" fill="#1B023F"/> -<path d="M945.83 184.325L794 184.939C794.171 184.075 794.388 183.22 794.65 182.379C795.41 180.099 795.808 177.714 795.828 175.311V175.204C795.918 174.351 796.3 173.555 796.908 172.95C796.896 172.943 796.884 172.933 796.875 172.922C796.832 172.866 796.859 172.846 796.821 172.8C796.783 172.754 796.767 172.731 796.767 172.592C796.767 172.453 797.134 172.325 797.129 172.1C797.124 171.875 796.544 172.752 796.495 172.45C796.446 172.148 797.283 171.414 797.395 171.408C797.507 171.402 797.443 171.558 797.422 171.608C797.401 171.658 797.435 171.687 797.492 171.686C797.549 171.685 797.635 171.62 797.624 171.556C797.613 171.492 797.573 171.419 797.608 171.396C797.643 171.373 797.632 171.305 797.659 171.246C797.686 171.187 797.74 171.256 797.801 171.203C797.862 171.15 797.82 171.016 797.801 170.955C797.782 170.894 797.822 170.922 797.871 170.929C797.92 170.936 797.887 170.891 797.971 170.901C798.055 170.911 798.031 171.101 798.023 171.156C798.015 171.211 798.039 171.156 798.101 171.199C798.163 171.242 798.074 171.267 798.139 171.369C798.204 171.471 798.07 171.584 798.074 171.664C798.074 171.697 798.105 171.718 798.143 171.736C798.669 171.291 799.222 170.88 799.801 170.506C800.465 170.096 801.301 169.706 801.301 169.701C801.333 169.686 801.35 169.665 801.35 169.64V166.895C801.35 164.772 801.874 163.906 802.322 163.808C802.531 163.752 802.711 163.616 802.822 163.43C802.895 163.3 803.003 163.192 803.134 163.12C803.264 163.047 803.413 163.012 803.562 163.018C804.01 163.018 804.455 163.059 804.885 163.1C805.269 163.137 805.633 163.17 805.96 163.17C805.99 163.17 809.032 163.121 809.233 162.708C809.335 162.578 809.464 162.472 809.612 162.398C809.759 162.324 809.922 162.284 810.087 162.28C810.136 162.28 810.21 162.28 810.304 162.28C810.469 162.28 810.695 162.291 810.943 162.291C811.47 162.312 811.998 162.262 812.512 162.142C813.171 161.942 818.547 161.289 820.058 161.176C820.781 161.123 821.248 161.046 821.658 160.976C822.124 160.888 822.597 160.842 823.072 160.84C823.527 160.845 823.975 160.95 824.385 161.147C824.676 161.291 824.993 161.373 825.317 161.388C825.479 161.388 825.646 161.402 825.824 161.416C826.024 161.431 826.224 161.448 826.454 161.448C826.971 161.45 827.483 161.346 827.959 161.142C828.601 160.875 828.65 160.784 828.613 160.623C828.598 160.551 828.579 160.461 828.8 160.248C828.895 160.156 828.981 160.056 829.058 159.948C829.243 159.695 829.282 159.642 831.146 159.448L831.477 159.413V159.137H833.293V158.62H890.877V159.137H892.694V159.653H893.994V160.666C894.079 160.666 894.161 160.673 894.242 160.673C894.342 160.673 894.442 160.673 894.542 160.673C894.642 160.673 894.724 160.667 894.813 160.667C894.934 160.667 895.069 160.667 895.213 160.667C895.375 160.667 895.545 160.673 895.713 160.673C896.394 160.673 896.707 160.62 896.79 160.488C896.867 159.726 896.871 158.957 896.8 158.194C896.798 158.184 896.795 158.174 896.789 158.165C896.783 158.156 896.775 158.149 896.766 158.144C896.726 158.12 896.69 158.09 896.658 158.057H898.318C898.418 158.057 898.542 158.057 898.69 158.047C898.867 158.039 899.069 158.032 899.261 158.032C899.481 158.009 899.704 158.036 899.913 158.111C900.42 158.293 900.961 158.36 901.497 158.305C901.691 158.305 901.935 158.285 902.197 158.264C902.497 158.24 902.832 158.212 903.142 158.212C903.392 158.204 903.643 158.232 903.885 158.297C904.018 158.339 904.157 158.359 904.296 158.358C904.554 158.347 904.809 158.306 905.058 158.236C905.57 158.104 906.096 158.037 906.625 158.036C907.225 158.036 907.705 158.065 908.052 158.086C908.269 158.098 908.438 158.109 908.573 158.109C908.673 158.109 908.92 158.109 908.996 157.987C909.136 157.862 909.301 157.768 909.48 157.712C909.659 157.655 909.848 157.637 910.034 157.659C910.147 157.66 910.26 157.667 910.373 157.679C910.811 157.73 910.882 157.887 910.954 158.053C910.982 158.145 911.038 158.225 911.114 158.283C911.189 158.341 911.281 158.375 911.377 158.378C911.435 158.386 911.493 158.389 911.552 158.389C911.732 158.384 911.911 158.364 912.088 158.331C912.38 158.279 912.676 158.251 912.973 158.248C913.179 158.248 913.385 158.262 913.59 158.289C913.984 158.341 914.303 158.358 914.564 158.371C915.122 158.402 915.213 158.418 915.213 158.583C915.218 158.717 915.257 158.847 915.324 158.963C915.405 159.122 915.395 159.132 915.287 159.163C914.896 159.27 914.97 160.427 915.049 161.108C915.049 161.148 915.108 161.178 915.172 161.178H923.638C927.794 161.178 929.991 161.608 929.991 162.423C929.991 162.935 930.736 162.935 931.091 162.935C931.226 162.935 931.369 162.935 931.521 162.927C931.673 162.919 931.838 162.919 932 162.919C932.301 162.876 932.607 162.898 932.898 162.985C933.189 163.071 933.458 163.219 933.687 163.419C933.994 163.8 933.854 164.491 933.704 165.219C933.419 166.599 933.104 168.162 935.399 168.638C936.412 168.87 937.365 169.31 938.198 169.931C939.031 170.552 939.725 171.34 940.237 172.244C940.951 175.42 941.967 178.52 943.272 181.502C943.978 182.586 944.854 183.549 945.865 184.356" fill="#1B023F"/> -<path d="M501.83 184.325L350 184.939C350.171 184.075 350.388 183.22 350.65 182.379C351.41 180.099 351.808 177.714 351.828 175.311V175.204C351.918 174.351 352.3 173.555 352.908 172.95C352.896 172.943 352.884 172.933 352.875 172.922C352.832 172.866 352.859 172.846 352.821 172.8C352.783 172.754 352.767 172.731 352.767 172.592C352.767 172.453 353.134 172.325 353.129 172.1C353.124 171.875 352.544 172.752 352.495 172.45C352.446 172.148 353.283 171.414 353.395 171.408C353.507 171.402 353.443 171.558 353.422 171.608C353.401 171.658 353.435 171.687 353.492 171.686C353.549 171.685 353.635 171.62 353.624 171.556C353.613 171.492 353.573 171.419 353.608 171.396C353.643 171.373 353.632 171.305 353.659 171.246C353.686 171.187 353.74 171.256 353.801 171.203C353.862 171.15 353.82 171.016 353.801 170.955C353.782 170.894 353.822 170.922 353.871 170.929C353.92 170.936 353.887 170.891 353.971 170.901C354.055 170.911 354.031 171.101 354.023 171.156C354.015 171.211 354.039 171.156 354.101 171.199C354.163 171.242 354.074 171.267 354.139 171.369C354.204 171.471 354.07 171.584 354.074 171.664C354.074 171.697 354.105 171.718 354.143 171.736C354.669 171.291 355.222 170.88 355.801 170.506C356.465 170.096 357.301 169.706 357.301 169.701C357.333 169.686 357.35 169.665 357.35 169.64V166.895C357.35 164.772 357.874 163.906 358.322 163.808C358.531 163.752 358.711 163.616 358.822 163.43C358.895 163.3 359.003 163.192 359.134 163.12C359.264 163.047 359.413 163.012 359.562 163.018C360.01 163.018 360.455 163.059 360.885 163.1C361.269 163.137 361.633 163.17 361.96 163.17C361.99 163.17 365.032 163.121 365.233 162.708C365.335 162.578 365.464 162.472 365.612 162.398C365.759 162.324 365.922 162.284 366.087 162.28C366.136 162.28 366.21 162.28 366.304 162.28C366.469 162.28 366.695 162.291 366.943 162.291C367.47 162.312 367.998 162.262 368.512 162.142C369.171 161.942 374.547 161.289 376.058 161.176C376.781 161.123 377.248 161.046 377.658 160.976C378.124 160.888 378.597 160.842 379.072 160.84C379.527 160.845 379.975 160.95 380.385 161.147C380.676 161.291 380.993 161.373 381.317 161.388C381.479 161.388 381.646 161.402 381.824 161.416C382.024 161.431 382.224 161.448 382.454 161.448C382.971 161.45 383.483 161.346 383.959 161.142C384.601 160.875 384.65 160.784 384.613 160.623C384.598 160.551 384.579 160.461 384.8 160.248C384.895 160.156 384.981 160.056 385.058 159.948C385.243 159.695 385.282 159.642 387.146 159.448L387.477 159.413V159.137H389.293V158.62H446.877V159.137H448.694V159.653H449.994V160.666C450.079 160.666 450.161 160.673 450.242 160.673C450.342 160.673 450.442 160.673 450.542 160.673C450.642 160.673 450.724 160.667 450.813 160.667C450.934 160.667 451.069 160.667 451.213 160.667C451.375 160.667 451.545 160.673 451.713 160.673C452.394 160.673 452.707 160.62 452.79 160.488C452.867 159.726 452.871 158.957 452.8 158.194C452.798 158.184 452.795 158.174 452.789 158.165C452.783 158.156 452.775 158.149 452.766 158.144C452.726 158.12 452.69 158.09 452.658 158.057H454.318C454.418 158.057 454.542 158.057 454.69 158.047C454.867 158.039 455.069 158.032 455.261 158.032C455.481 158.009 455.704 158.036 455.913 158.111C456.42 158.293 456.961 158.36 457.497 158.305C457.691 158.305 457.935 158.285 458.197 158.264C458.497 158.24 458.832 158.212 459.142 158.212C459.392 158.204 459.643 158.232 459.885 158.297C460.018 158.339 460.157 158.359 460.296 158.358C460.554 158.347 460.809 158.306 461.058 158.236C461.57 158.104 462.096 158.037 462.625 158.036C463.225 158.036 463.705 158.065 464.052 158.086C464.269 158.098 464.438 158.109 464.573 158.109C464.673 158.109 464.92 158.109 464.996 157.987C465.136 157.862 465.301 157.768 465.48 157.712C465.659 157.655 465.848 157.637 466.034 157.659C466.147 157.66 466.26 157.667 466.373 157.679C466.811 157.73 466.882 157.887 466.954 158.053C466.982 158.145 467.038 158.225 467.114 158.283C467.189 158.341 467.281 158.375 467.377 158.378C467.435 158.386 467.493 158.389 467.552 158.389C467.732 158.384 467.911 158.364 468.088 158.331C468.38 158.279 468.676 158.251 468.973 158.248C469.179 158.248 469.385 158.262 469.59 158.289C469.984 158.341 470.303 158.358 470.564 158.371C471.122 158.402 471.213 158.418 471.213 158.583C471.218 158.717 471.257 158.847 471.324 158.963C471.405 159.122 471.395 159.132 471.287 159.163C470.896 159.27 470.97 160.427 471.049 161.108C471.049 161.148 471.108 161.178 471.172 161.178H479.638C483.794 161.178 485.991 161.608 485.991 162.423C485.991 162.935 486.736 162.935 487.091 162.935C487.226 162.935 487.369 162.935 487.521 162.927C487.673 162.919 487.838 162.919 488 162.919C488.301 162.876 488.607 162.898 488.898 162.985C489.189 163.071 489.458 163.219 489.687 163.419C489.994 163.8 489.854 164.491 489.704 165.219C489.419 166.599 489.104 168.162 491.399 168.638C492.412 168.87 493.365 169.31 494.198 169.931C495.031 170.552 495.725 171.34 496.237 172.244C496.951 175.42 497.967 178.52 499.272 181.502C499.978 182.586 500.854 183.549 501.865 184.356" fill="#1B023F"/> -<path d="M382.83 184.325L231 184.939C231.171 184.075 231.388 183.22 231.65 182.379C232.41 180.099 232.808 177.714 232.828 175.311V175.204C232.918 174.351 233.3 173.555 233.908 172.95C233.896 172.943 233.884 172.933 233.875 172.922C233.832 172.866 233.859 172.846 233.821 172.8C233.783 172.754 233.767 172.731 233.767 172.592C233.767 172.453 234.134 172.325 234.129 172.1C234.124 171.875 233.544 172.752 233.495 172.45C233.446 172.148 234.283 171.414 234.395 171.408C234.507 171.402 234.443 171.558 234.422 171.608C234.401 171.658 234.435 171.687 234.492 171.686C234.549 171.685 234.635 171.62 234.624 171.556C234.613 171.492 234.573 171.419 234.608 171.396C234.643 171.373 234.632 171.305 234.659 171.246C234.686 171.187 234.74 171.256 234.801 171.203C234.862 171.15 234.82 171.016 234.801 170.955C234.782 170.894 234.822 170.922 234.871 170.929C234.92 170.936 234.887 170.891 234.971 170.901C235.055 170.911 235.031 171.101 235.023 171.156C235.015 171.211 235.039 171.156 235.101 171.199C235.163 171.242 235.074 171.267 235.139 171.369C235.204 171.471 235.07 171.584 235.074 171.664C235.074 171.697 235.105 171.718 235.143 171.736C235.669 171.291 236.222 170.88 236.801 170.506C237.465 170.096 238.301 169.706 238.301 169.701C238.333 169.686 238.35 169.665 238.35 169.64V166.895C238.35 164.772 238.874 163.906 239.322 163.808C239.531 163.752 239.711 163.616 239.822 163.43C239.895 163.3 240.003 163.192 240.134 163.12C240.264 163.047 240.413 163.012 240.562 163.018C241.01 163.018 241.455 163.059 241.885 163.1C242.269 163.137 242.633 163.17 242.96 163.17C242.99 163.17 246.032 163.121 246.233 162.708C246.335 162.578 246.464 162.472 246.612 162.398C246.759 162.324 246.922 162.284 247.087 162.28C247.136 162.28 247.21 162.28 247.304 162.28C247.469 162.28 247.695 162.291 247.943 162.291C248.47 162.312 248.998 162.262 249.512 162.142C250.171 161.942 255.547 161.289 257.058 161.176C257.781 161.123 258.248 161.046 258.658 160.976C259.124 160.888 259.597 160.842 260.072 160.84C260.527 160.845 260.975 160.95 261.385 161.147C261.676 161.291 261.993 161.373 262.317 161.388C262.479 161.388 262.646 161.402 262.824 161.416C263.024 161.431 263.224 161.448 263.454 161.448C263.971 161.45 264.483 161.346 264.959 161.142C265.601 160.875 265.65 160.784 265.613 160.623C265.598 160.551 265.579 160.461 265.8 160.248C265.895 160.156 265.981 160.056 266.058 159.948C266.243 159.695 266.282 159.642 268.146 159.448L268.477 159.413V159.137H270.293V158.62H327.877V159.137H329.694V159.653H330.994V160.666C331.079 160.666 331.161 160.673 331.242 160.673C331.342 160.673 331.442 160.673 331.542 160.673C331.642 160.673 331.724 160.667 331.813 160.667C331.934 160.667 332.069 160.667 332.213 160.667C332.375 160.667 332.545 160.673 332.713 160.673C333.394 160.673 333.707 160.62 333.79 160.488C333.867 159.726 333.871 158.957 333.8 158.194C333.798 158.184 333.795 158.174 333.789 158.165C333.783 158.156 333.775 158.149 333.766 158.144C333.726 158.12 333.69 158.09 333.658 158.057H335.318C335.418 158.057 335.542 158.057 335.69 158.047C335.867 158.039 336.069 158.032 336.261 158.032C336.481 158.009 336.704 158.036 336.913 158.111C337.42 158.293 337.961 158.36 338.497 158.305C338.691 158.305 338.935 158.285 339.197 158.264C339.497 158.24 339.832 158.212 340.142 158.212C340.392 158.204 340.643 158.232 340.885 158.297C341.018 158.339 341.157 158.359 341.296 158.358C341.554 158.347 341.809 158.306 342.058 158.236C342.57 158.104 343.096 158.037 343.625 158.036C344.225 158.036 344.705 158.065 345.052 158.086C345.269 158.098 345.438 158.109 345.573 158.109C345.673 158.109 345.92 158.109 345.996 157.987C346.136 157.862 346.301 157.768 346.48 157.712C346.659 157.655 346.848 157.637 347.034 157.659C347.147 157.66 347.26 157.667 347.373 157.679C347.811 157.73 347.882 157.887 347.954 158.053C347.982 158.145 348.038 158.225 348.114 158.283C348.189 158.341 348.281 158.375 348.377 158.378C348.435 158.386 348.493 158.389 348.552 158.389C348.732 158.384 348.911 158.364 349.088 158.331C349.38 158.279 349.676 158.251 349.973 158.248C350.179 158.248 350.385 158.262 350.59 158.289C350.984 158.341 351.303 158.358 351.564 158.371C352.122 158.402 352.213 158.418 352.213 158.583C352.218 158.717 352.257 158.847 352.324 158.963C352.405 159.122 352.395 159.132 352.287 159.163C351.896 159.27 351.97 160.427 352.049 161.108C352.049 161.148 352.108 161.178 352.172 161.178H360.638C364.794 161.178 366.991 161.608 366.991 162.423C366.991 162.935 367.736 162.935 368.091 162.935C368.226 162.935 368.369 162.935 368.521 162.927C368.673 162.919 368.838 162.919 369 162.919C369.301 162.876 369.607 162.898 369.898 162.985C370.189 163.071 370.458 163.219 370.687 163.419C370.994 163.8 370.854 164.491 370.704 165.219C370.419 166.599 370.104 168.162 372.399 168.638C373.412 168.87 374.365 169.31 375.198 169.931C376.031 170.552 376.725 171.34 377.237 172.244C377.951 175.42 378.967 178.52 380.272 181.502C380.978 182.586 381.854 183.549 382.865 184.356" fill="#1B023F"/> -<path d="M262.83 184.325L111 184.939C111.171 184.075 111.388 183.22 111.65 182.379C112.41 180.099 112.808 177.714 112.828 175.311V175.204C112.918 174.351 113.3 173.555 113.908 172.95C113.896 172.943 113.884 172.933 113.875 172.922C113.832 172.866 113.859 172.846 113.821 172.8C113.783 172.754 113.767 172.731 113.767 172.592C113.767 172.453 114.134 172.325 114.129 172.1C114.124 171.875 113.544 172.752 113.495 172.45C113.446 172.148 114.283 171.414 114.395 171.408C114.507 171.402 114.443 171.558 114.422 171.608C114.401 171.658 114.435 171.687 114.492 171.686C114.549 171.685 114.635 171.62 114.624 171.556C114.613 171.492 114.573 171.419 114.608 171.396C114.643 171.373 114.632 171.305 114.659 171.246C114.686 171.187 114.74 171.256 114.801 171.203C114.862 171.15 114.82 171.016 114.801 170.955C114.782 170.894 114.822 170.922 114.871 170.929C114.92 170.936 114.887 170.891 114.971 170.901C115.055 170.911 115.031 171.101 115.023 171.156C115.015 171.211 115.039 171.156 115.101 171.199C115.163 171.242 115.074 171.267 115.139 171.369C115.204 171.471 115.07 171.584 115.074 171.664C115.074 171.697 115.105 171.718 115.143 171.736C115.669 171.291 116.222 170.88 116.801 170.506C117.465 170.096 118.301 169.706 118.301 169.701C118.333 169.686 118.35 169.665 118.35 169.64V166.895C118.35 164.772 118.874 163.906 119.322 163.808C119.531 163.752 119.711 163.616 119.822 163.43C119.895 163.3 120.003 163.192 120.134 163.12C120.264 163.047 120.413 163.012 120.562 163.018C121.01 163.018 121.455 163.059 121.885 163.1C122.269 163.137 122.633 163.17 122.96 163.17C122.99 163.17 126.032 163.121 126.233 162.708C126.335 162.578 126.464 162.472 126.612 162.398C126.759 162.324 126.922 162.284 127.087 162.28C127.136 162.28 127.21 162.28 127.304 162.28C127.469 162.28 127.695 162.291 127.943 162.291C128.47 162.312 128.998 162.262 129.512 162.142C130.171 161.942 135.547 161.289 137.058 161.176C137.781 161.123 138.248 161.046 138.658 160.976C139.124 160.888 139.597 160.842 140.072 160.84C140.527 160.845 140.975 160.95 141.385 161.147C141.676 161.291 141.993 161.373 142.317 161.388C142.479 161.388 142.646 161.402 142.824 161.416C143.024 161.431 143.224 161.448 143.454 161.448C143.971 161.45 144.483 161.346 144.959 161.142C145.601 160.875 145.65 160.784 145.613 160.623C145.598 160.551 145.579 160.461 145.8 160.248C145.895 160.156 145.981 160.056 146.058 159.948C146.243 159.695 146.282 159.642 148.146 159.448L148.477 159.413V159.137H150.293V158.62H207.877V159.137H209.694V159.653H210.994V160.666C211.079 160.666 211.161 160.673 211.242 160.673C211.342 160.673 211.442 160.673 211.542 160.673C211.642 160.673 211.724 160.667 211.813 160.667C211.934 160.667 212.069 160.667 212.213 160.667C212.375 160.667 212.545 160.673 212.713 160.673C213.394 160.673 213.707 160.62 213.79 160.488C213.867 159.726 213.871 158.957 213.8 158.194C213.798 158.184 213.795 158.174 213.789 158.165C213.783 158.156 213.775 158.149 213.766 158.144C213.726 158.12 213.69 158.09 213.658 158.057H215.318C215.418 158.057 215.542 158.057 215.69 158.047C215.867 158.039 216.069 158.032 216.261 158.032C216.481 158.009 216.704 158.036 216.913 158.111C217.42 158.293 217.961 158.36 218.497 158.305C218.691 158.305 218.935 158.285 219.197 158.264C219.497 158.24 219.832 158.212 220.142 158.212C220.392 158.204 220.643 158.232 220.885 158.297C221.018 158.339 221.157 158.359 221.296 158.358C221.554 158.347 221.809 158.306 222.058 158.236C222.57 158.104 223.096 158.037 223.625 158.036C224.225 158.036 224.705 158.065 225.052 158.086C225.269 158.098 225.438 158.109 225.573 158.109C225.673 158.109 225.92 158.109 225.996 157.987C226.136 157.862 226.301 157.768 226.48 157.712C226.659 157.655 226.848 157.637 227.034 157.659C227.147 157.66 227.26 157.667 227.373 157.679C227.811 157.73 227.882 157.887 227.954 158.053C227.982 158.145 228.038 158.225 228.114 158.283C228.189 158.341 228.281 158.375 228.377 158.378C228.435 158.386 228.493 158.389 228.552 158.389C228.732 158.384 228.911 158.364 229.088 158.331C229.38 158.279 229.676 158.251 229.973 158.248C230.179 158.248 230.385 158.262 230.59 158.289C230.984 158.341 231.303 158.358 231.564 158.371C232.122 158.402 232.213 158.418 232.213 158.583C232.218 158.717 232.257 158.847 232.324 158.963C232.405 159.122 232.395 159.132 232.287 159.163C231.896 159.27 231.97 160.427 232.049 161.108C232.049 161.148 232.108 161.178 232.172 161.178H240.638C244.794 161.178 246.991 161.608 246.991 162.423C246.991 162.935 247.736 162.935 248.091 162.935C248.226 162.935 248.369 162.935 248.521 162.927C248.673 162.919 248.838 162.919 249 162.919C249.301 162.876 249.607 162.898 249.898 162.985C250.189 163.071 250.458 163.219 250.687 163.419C250.994 163.8 250.854 164.491 250.704 165.219C250.419 166.599 250.104 168.162 252.399 168.638C253.412 168.87 254.365 169.31 255.198 169.931C256.031 170.552 256.725 171.34 257.237 172.244C257.951 175.42 258.967 178.52 260.272 181.502C260.978 182.586 261.854 183.549 262.865 184.356" fill="#1B023F"/> -<path d="M151.83 184.325L0 184.939C0.170815 184.075 0.387695 183.22 0.649902 182.379C1.41047 180.099 1.80797 177.714 1.82788 175.311V175.204C1.91803 174.351 2.29952 173.555 2.90796 172.95C2.8955 172.943 2.8844 172.933 2.875 172.922C2.832 172.866 2.8588 172.846 2.8208 172.8C2.7828 172.754 2.76685 172.731 2.76685 172.592C2.76685 172.453 3.13391 172.325 3.12891 172.1C3.12391 171.875 2.54387 172.752 2.49487 172.45C2.44587 172.148 3.28278 171.414 3.39478 171.408C3.50678 171.402 3.44287 171.558 3.42188 171.608C3.40088 171.658 3.43494 171.687 3.49194 171.686C3.54894 171.685 3.63478 171.62 3.62378 171.556C3.61278 171.492 3.57291 171.419 3.60791 171.396C3.64291 171.373 3.63194 171.305 3.65894 171.246C3.68594 171.187 3.73978 171.256 3.80078 171.203C3.86178 171.15 3.81978 171.016 3.80078 170.955C3.78178 170.894 3.82185 170.922 3.87085 170.929C3.91985 170.936 3.88695 170.891 3.97095 170.901C4.05495 170.911 4.03095 171.101 4.02295 171.156C4.01495 171.211 4.03883 171.156 4.10083 171.199C4.16283 171.242 4.07392 171.267 4.13892 171.369C4.20392 171.471 4.06997 171.584 4.07397 171.664C4.07397 171.697 4.10482 171.718 4.14282 171.736C4.66873 171.291 5.22248 170.88 5.80078 170.506C6.46478 170.096 7.30078 169.706 7.30078 169.701C7.33278 169.686 7.34985 169.665 7.34985 169.64V166.895C7.34985 164.772 7.87378 163.906 8.32178 163.808C8.5314 163.752 8.71084 163.616 8.82178 163.43C8.89501 163.3 9.00292 163.192 9.13354 163.12C9.26417 163.047 9.41264 163.012 9.56201 163.018C10.01 163.018 10.455 163.059 10.885 163.1C11.269 163.137 11.633 163.17 11.96 163.17C11.99 163.17 15.0319 163.121 15.2329 162.708C15.3348 162.578 15.4642 162.472 15.6118 162.398C15.7595 162.324 15.9218 162.284 16.0869 162.28C16.1359 162.28 16.21 162.28 16.304 162.28C16.469 162.28 16.6949 162.291 16.9429 162.291C17.4702 162.312 17.998 162.262 18.512 162.142C19.171 161.942 24.5469 161.289 26.0579 161.176C26.7809 161.123 27.248 161.046 27.658 160.976C28.1242 160.888 28.5973 160.842 29.0718 160.84C29.5266 160.845 29.9751 160.95 30.385 161.147C30.6757 161.291 30.9929 161.373 31.3169 161.388C31.4789 161.388 31.646 161.402 31.824 161.416C32.024 161.431 32.2239 161.448 32.4539 161.448C32.9712 161.45 33.4835 161.346 33.959 161.142C34.601 160.875 34.6498 160.784 34.6128 160.623C34.5978 160.551 34.5788 160.461 34.7998 160.248C34.8946 160.156 34.981 160.056 35.0579 159.948C35.2429 159.695 35.282 159.642 37.146 159.448L37.4768 159.413V159.137H39.293V158.62H96.877V159.137H98.6938V159.653H99.9939V160.666C100.079 160.666 100.161 160.673 100.242 160.673C100.342 160.673 100.442 160.673 100.542 160.673C100.642 160.673 100.724 160.667 100.813 160.667C100.934 160.667 101.069 160.667 101.213 160.667C101.375 160.667 101.545 160.673 101.713 160.673C102.394 160.673 102.707 160.62 102.79 160.488C102.867 159.726 102.871 158.957 102.8 158.194C102.798 158.184 102.795 158.174 102.789 158.165C102.783 158.156 102.775 158.149 102.766 158.144C102.726 158.12 102.69 158.09 102.658 158.057H104.318C104.418 158.057 104.542 158.057 104.69 158.047C104.867 158.039 105.069 158.032 105.261 158.032C105.481 158.009 105.704 158.036 105.913 158.111C106.42 158.293 106.961 158.36 107.497 158.305C107.691 158.305 107.935 158.285 108.197 158.264C108.497 158.24 108.832 158.212 109.142 158.212C109.392 158.204 109.643 158.232 109.885 158.297C110.018 158.339 110.157 158.359 110.296 158.358C110.554 158.347 110.809 158.306 111.058 158.236C111.57 158.104 112.096 158.037 112.625 158.036C113.225 158.036 113.705 158.065 114.052 158.086C114.269 158.098 114.438 158.109 114.573 158.109C114.673 158.109 114.92 158.109 114.996 157.987C115.136 157.862 115.301 157.768 115.48 157.712C115.659 157.655 115.848 157.637 116.034 157.659C116.147 157.66 116.26 157.667 116.373 157.679C116.811 157.73 116.882 157.887 116.954 158.053C116.982 158.145 117.038 158.225 117.114 158.283C117.189 158.341 117.281 158.375 117.377 158.378C117.435 158.386 117.493 158.389 117.552 158.389C117.732 158.384 117.911 158.364 118.088 158.331C118.38 158.279 118.676 158.251 118.973 158.248C119.179 158.248 119.385 158.262 119.59 158.289C119.984 158.341 120.303 158.358 120.564 158.371C121.122 158.402 121.213 158.418 121.213 158.583C121.218 158.717 121.257 158.847 121.324 158.963C121.405 159.122 121.395 159.132 121.287 159.163C120.896 159.27 120.97 160.427 121.049 161.108C121.049 161.148 121.108 161.178 121.172 161.178H129.638C133.794 161.178 135.991 161.608 135.991 162.423C135.991 162.935 136.736 162.935 137.091 162.935C137.226 162.935 137.369 162.935 137.521 162.927C137.673 162.919 137.838 162.919 138 162.919C138.301 162.876 138.607 162.898 138.898 162.985C139.189 163.071 139.458 163.219 139.687 163.419C139.994 163.8 139.854 164.491 139.704 165.219C139.419 166.599 139.104 168.162 141.399 168.638C142.412 168.87 143.365 169.31 144.198 169.931C145.031 170.552 145.725 171.34 146.237 172.244C146.951 175.42 147.967 178.52 149.272 181.502C149.978 182.586 150.854 183.549 151.865 184.356" fill="#1B023F"/> -<path d="M918.041 184.325L1069.87 184.939C1069.7 184.075 1069.48 183.22 1069.22 182.379C1068.46 180.099 1068.06 177.714 1068.04 175.311V175.204C1067.95 174.351 1067.57 173.555 1066.96 172.95C1066.98 172.943 1066.99 172.933 1067 172.922C1067.04 172.866 1067.01 172.846 1067.05 172.8C1067.09 172.754 1067.1 172.731 1067.1 172.592C1067.1 172.453 1066.74 172.325 1066.74 172.1C1066.75 171.875 1067.33 172.752 1067.38 172.45C1067.42 172.148 1066.59 171.414 1066.48 171.408C1066.36 171.402 1066.43 171.558 1066.45 171.608C1066.47 171.658 1066.44 171.687 1066.38 171.686C1066.32 171.685 1066.24 171.62 1066.25 171.556C1066.26 171.492 1066.3 171.419 1066.26 171.396C1066.23 171.373 1066.24 171.305 1066.21 171.246C1066.18 171.187 1066.13 171.256 1066.07 171.203C1066.01 171.15 1066.05 171.016 1066.07 170.955C1066.09 170.894 1066.05 170.922 1066 170.929C1065.95 170.936 1065.98 170.891 1065.9 170.901C1065.82 170.911 1065.84 171.101 1065.85 171.156C1065.86 171.211 1065.83 171.156 1065.77 171.199C1065.71 171.242 1065.8 171.267 1065.73 171.369C1065.67 171.471 1065.8 171.584 1065.8 171.664C1065.8 171.697 1065.77 171.718 1065.73 171.736C1065.2 171.291 1064.65 170.88 1064.07 170.506C1063.41 170.096 1062.57 169.706 1062.57 169.701C1062.54 169.686 1062.52 169.665 1062.52 169.64V166.895C1062.52 164.772 1062 163.906 1061.55 163.808C1061.34 163.752 1061.16 163.616 1061.05 163.43C1060.98 163.3 1060.87 163.192 1060.74 163.12C1060.61 163.047 1060.46 163.012 1060.31 163.018C1059.86 163.018 1059.42 163.059 1058.99 163.1C1058.6 163.137 1058.24 163.17 1057.91 163.17C1057.88 163.17 1054.84 163.121 1054.64 162.708C1054.54 162.578 1054.41 162.472 1054.26 162.398C1054.11 162.324 1053.95 162.284 1053.78 162.28C1053.73 162.28 1053.66 162.28 1053.57 162.28C1053.4 162.28 1053.18 162.291 1052.93 162.291C1052.4 162.312 1051.87 162.262 1051.36 162.142C1050.7 161.942 1045.32 161.289 1043.81 161.176C1043.09 161.123 1042.62 161.046 1042.21 160.976C1041.75 160.888 1041.27 160.842 1040.8 160.84C1040.34 160.845 1039.9 160.95 1039.49 161.147C1039.2 161.291 1038.88 161.373 1038.55 161.388C1038.39 161.388 1038.22 161.402 1038.05 161.416C1037.85 161.431 1037.65 161.448 1037.42 161.448C1036.9 161.45 1036.39 161.346 1035.91 161.142C1035.27 160.875 1035.22 160.784 1035.26 160.623C1035.27 160.551 1035.29 160.461 1035.07 160.248C1034.98 160.156 1034.89 160.056 1034.81 159.948C1034.63 159.695 1034.59 159.642 1032.72 159.448L1032.39 159.413V159.137H1030.58V158.62H972.994V159.137H971.177V159.653H969.877V160.666C969.792 160.666 969.71 160.673 969.629 160.673C969.529 160.673 969.429 160.673 969.329 160.673C969.229 160.673 969.147 160.667 969.058 160.667C968.937 160.667 968.802 160.667 968.658 160.667C968.496 160.667 968.326 160.673 968.158 160.673C967.477 160.673 967.164 160.62 967.081 160.488C967.003 159.726 967 158.957 967.071 158.194C967.072 158.184 967.076 158.174 967.082 158.165C967.088 158.156 967.096 158.149 967.105 158.144C967.145 158.12 967.181 158.09 967.213 158.057H965.553C965.453 158.057 965.329 158.057 965.181 158.047C965.004 158.039 964.802 158.032 964.61 158.032C964.389 158.009 964.167 158.036 963.958 158.111C963.451 158.293 962.91 158.36 962.374 158.305C962.18 158.305 961.936 158.285 961.674 158.264C961.374 158.24 961.039 158.212 960.729 158.212C960.479 158.204 960.228 158.232 959.986 158.297C959.853 158.339 959.714 158.359 959.575 158.358C959.317 158.347 959.062 158.306 958.813 158.236C958.301 158.104 957.774 158.037 957.246 158.036C956.646 158.036 956.166 158.065 955.819 158.086C955.602 158.098 955.433 158.109 955.298 158.109C955.198 158.109 954.951 158.109 954.875 157.987C954.735 157.862 954.57 157.768 954.391 157.712C954.212 157.655 954.023 157.637 953.837 157.659C953.724 157.66 953.61 157.667 953.498 157.679C953.06 157.73 952.989 157.887 952.917 158.053C952.889 158.145 952.833 158.225 952.757 158.283C952.682 158.341 952.589 158.375 952.494 158.378C952.436 158.386 952.377 158.389 952.319 158.389C952.139 158.384 951.96 158.364 951.783 158.331C951.491 158.279 951.195 158.251 950.898 158.248C950.692 158.248 950.486 158.262 950.281 158.289C949.887 158.341 949.568 158.358 949.307 158.371C948.749 158.402 948.658 158.418 948.658 158.583C948.652 158.717 948.614 158.847 948.547 158.963C948.466 159.122 948.476 159.132 948.584 159.163C948.975 159.27 948.901 160.427 948.822 161.108C948.822 161.148 948.763 161.178 948.699 161.178H940.233C936.077 161.178 933.88 161.608 933.88 162.423C933.88 162.935 933.135 162.935 932.78 162.935C932.645 162.935 932.502 162.935 932.35 162.927C932.198 162.919 932.033 162.919 931.871 162.919C931.57 162.876 931.264 162.898 930.973 162.985C930.681 163.071 930.412 163.219 930.184 163.419C929.877 163.8 930.017 164.491 930.167 165.219C930.452 166.599 930.767 168.162 928.472 168.638C927.459 168.87 926.506 169.31 925.673 169.931C924.84 170.552 924.145 171.34 923.634 172.244C922.92 175.42 921.903 178.52 920.599 181.502C919.893 182.586 919.017 183.549 918.006 184.356" fill="#1B023F"/> -<path d="M1034.04 184.325L1185.87 184.939C1185.7 184.075 1185.48 183.22 1185.22 182.379C1184.46 180.099 1184.06 177.714 1184.04 175.311V175.204C1183.95 174.351 1183.57 173.555 1182.96 172.95C1182.98 172.943 1182.99 172.933 1183 172.922C1183.04 172.866 1183.01 172.846 1183.05 172.8C1183.09 172.754 1183.1 172.731 1183.1 172.592C1183.1 172.453 1182.74 172.325 1182.74 172.1C1182.75 171.875 1183.33 172.752 1183.38 172.45C1183.42 172.148 1182.59 171.414 1182.48 171.408C1182.36 171.402 1182.43 171.558 1182.45 171.608C1182.47 171.658 1182.44 171.687 1182.38 171.686C1182.32 171.685 1182.24 171.62 1182.25 171.556C1182.26 171.492 1182.3 171.419 1182.26 171.396C1182.23 171.373 1182.24 171.305 1182.21 171.246C1182.18 171.187 1182.13 171.256 1182.07 171.203C1182.01 171.15 1182.05 171.016 1182.07 170.955C1182.09 170.894 1182.05 170.922 1182 170.929C1181.95 170.936 1181.98 170.891 1181.9 170.901C1181.82 170.911 1181.84 171.101 1181.85 171.156C1181.86 171.211 1181.83 171.156 1181.77 171.199C1181.71 171.242 1181.8 171.267 1181.73 171.369C1181.67 171.471 1181.8 171.584 1181.8 171.664C1181.8 171.697 1181.77 171.718 1181.73 171.736C1181.2 171.291 1180.65 170.88 1180.07 170.506C1179.41 170.096 1178.57 169.706 1178.57 169.701C1178.54 169.686 1178.52 169.665 1178.52 169.64V166.895C1178.52 164.772 1178 163.906 1177.55 163.808C1177.34 163.752 1177.16 163.616 1177.05 163.43C1176.98 163.3 1176.87 163.192 1176.74 163.12C1176.61 163.047 1176.46 163.012 1176.31 163.018C1175.86 163.018 1175.42 163.059 1174.99 163.1C1174.6 163.137 1174.24 163.17 1173.91 163.17C1173.88 163.17 1170.84 163.121 1170.64 162.708C1170.54 162.578 1170.41 162.472 1170.26 162.398C1170.11 162.324 1169.95 162.284 1169.78 162.28C1169.73 162.28 1169.66 162.28 1169.57 162.28C1169.4 162.28 1169.18 162.291 1168.93 162.291C1168.4 162.312 1167.87 162.262 1167.36 162.142C1166.7 161.942 1161.32 161.289 1159.81 161.176C1159.09 161.123 1158.62 161.046 1158.21 160.976C1157.75 160.888 1157.27 160.842 1156.8 160.84C1156.34 160.845 1155.9 160.95 1155.49 161.147C1155.2 161.291 1154.88 161.373 1154.55 161.388C1154.39 161.388 1154.22 161.402 1154.05 161.416C1153.85 161.431 1153.65 161.448 1153.42 161.448C1152.9 161.45 1152.39 161.346 1151.91 161.142C1151.27 160.875 1151.22 160.784 1151.26 160.623C1151.27 160.551 1151.29 160.461 1151.07 160.248C1150.98 160.156 1150.89 160.056 1150.81 159.948C1150.63 159.695 1150.59 159.642 1148.72 159.448L1148.39 159.413V159.137H1146.58V158.62H1088.99V159.137H1087.18V159.653H1085.88V160.666C1085.79 160.666 1085.71 160.673 1085.63 160.673C1085.53 160.673 1085.43 160.673 1085.33 160.673C1085.23 160.673 1085.15 160.667 1085.06 160.667C1084.94 160.667 1084.8 160.667 1084.66 160.667C1084.5 160.667 1084.33 160.673 1084.16 160.673C1083.48 160.673 1083.16 160.62 1083.08 160.488C1083 159.726 1083 158.957 1083.07 158.194C1083.07 158.184 1083.08 158.174 1083.08 158.165C1083.09 158.156 1083.1 158.149 1083.1 158.144C1083.14 158.12 1083.18 158.09 1083.21 158.057H1081.55C1081.45 158.057 1081.33 158.057 1081.18 158.047C1081 158.039 1080.8 158.032 1080.61 158.032C1080.39 158.009 1080.17 158.036 1079.96 158.111C1079.45 158.293 1078.91 158.36 1078.37 158.305C1078.18 158.305 1077.94 158.285 1077.67 158.264C1077.37 158.24 1077.04 158.212 1076.73 158.212C1076.48 158.204 1076.23 158.232 1075.99 158.297C1075.85 158.339 1075.71 158.359 1075.57 158.358C1075.32 158.347 1075.06 158.306 1074.81 158.236C1074.3 158.104 1073.77 158.037 1073.25 158.036C1072.65 158.036 1072.17 158.065 1071.82 158.086C1071.6 158.098 1071.43 158.109 1071.3 158.109C1071.2 158.109 1070.95 158.109 1070.88 157.987C1070.73 157.862 1070.57 157.768 1070.39 157.712C1070.21 157.655 1070.02 157.637 1069.84 157.659C1069.72 157.66 1069.61 157.667 1069.5 157.679C1069.06 157.73 1068.99 157.887 1068.92 158.053C1068.89 158.145 1068.83 158.225 1068.76 158.283C1068.68 158.341 1068.59 158.375 1068.49 158.378C1068.44 158.386 1068.38 158.389 1068.32 158.389C1068.14 158.384 1067.96 158.364 1067.78 158.331C1067.49 158.279 1067.19 158.251 1066.9 158.248C1066.69 158.248 1066.49 158.262 1066.28 158.289C1065.89 158.341 1065.57 158.358 1065.31 158.371C1064.75 158.402 1064.66 158.418 1064.66 158.583C1064.65 158.717 1064.61 158.847 1064.55 158.963C1064.47 159.122 1064.48 159.132 1064.58 159.163C1064.97 159.27 1064.9 160.427 1064.82 161.108C1064.82 161.148 1064.76 161.178 1064.7 161.178H1056.23C1052.08 161.178 1049.88 161.608 1049.88 162.423C1049.88 162.935 1049.13 162.935 1048.78 162.935C1048.64 162.935 1048.5 162.935 1048.35 162.927C1048.2 162.919 1048.03 162.919 1047.87 162.919C1047.57 162.876 1047.26 162.898 1046.97 162.985C1046.68 163.071 1046.41 163.219 1046.18 163.419C1045.88 163.8 1046.02 164.491 1046.17 165.219C1046.45 166.599 1046.77 168.162 1044.47 168.638C1043.46 168.87 1042.51 169.31 1041.67 169.931C1040.84 170.552 1040.15 171.34 1039.63 172.244C1038.92 175.42 1037.9 178.52 1036.6 181.502C1035.89 182.586 1035.02 183.549 1034.01 184.356" fill="#1B023F"/> -<path d="M1164.04 184.325L1315.87 184.939C1315.7 184.075 1315.48 183.22 1315.22 182.379C1314.46 180.099 1314.06 177.714 1314.04 175.311V175.204C1313.95 174.351 1313.57 173.555 1312.96 172.95C1312.98 172.943 1312.99 172.933 1313 172.922C1313.04 172.866 1313.01 172.846 1313.05 172.8C1313.09 172.754 1313.1 172.731 1313.1 172.592C1313.1 172.453 1312.74 172.325 1312.74 172.1C1312.75 171.875 1313.33 172.752 1313.38 172.45C1313.42 172.148 1312.59 171.414 1312.48 171.408C1312.36 171.402 1312.43 171.558 1312.45 171.608C1312.47 171.658 1312.44 171.687 1312.38 171.686C1312.32 171.685 1312.24 171.62 1312.25 171.556C1312.26 171.492 1312.3 171.419 1312.26 171.396C1312.23 171.373 1312.24 171.305 1312.21 171.246C1312.18 171.187 1312.13 171.256 1312.07 171.203C1312.01 171.15 1312.05 171.016 1312.07 170.955C1312.09 170.894 1312.05 170.922 1312 170.929C1311.95 170.936 1311.98 170.891 1311.9 170.901C1311.82 170.911 1311.84 171.101 1311.85 171.156C1311.86 171.211 1311.83 171.156 1311.77 171.199C1311.71 171.242 1311.8 171.267 1311.73 171.369C1311.67 171.471 1311.8 171.584 1311.8 171.664C1311.8 171.697 1311.77 171.718 1311.73 171.736C1311.2 171.291 1310.65 170.88 1310.07 170.506C1309.41 170.096 1308.57 169.706 1308.57 169.701C1308.54 169.686 1308.52 169.665 1308.52 169.64V166.895C1308.52 164.772 1308 163.906 1307.55 163.808C1307.34 163.752 1307.16 163.616 1307.05 163.43C1306.98 163.3 1306.87 163.192 1306.74 163.12C1306.61 163.047 1306.46 163.012 1306.31 163.018C1305.86 163.018 1305.42 163.059 1304.99 163.1C1304.6 163.137 1304.24 163.17 1303.91 163.17C1303.88 163.17 1300.84 163.121 1300.64 162.708C1300.54 162.578 1300.41 162.472 1300.26 162.398C1300.11 162.324 1299.95 162.284 1299.78 162.28C1299.73 162.28 1299.66 162.28 1299.57 162.28C1299.4 162.28 1299.18 162.291 1298.93 162.291C1298.4 162.312 1297.87 162.262 1297.36 162.142C1296.7 161.942 1291.32 161.289 1289.81 161.176C1289.09 161.123 1288.62 161.046 1288.21 160.976C1287.75 160.888 1287.27 160.842 1286.8 160.84C1286.34 160.845 1285.9 160.95 1285.49 161.147C1285.2 161.291 1284.88 161.373 1284.55 161.388C1284.39 161.388 1284.22 161.402 1284.05 161.416C1283.85 161.431 1283.65 161.448 1283.42 161.448C1282.9 161.45 1282.39 161.346 1281.91 161.142C1281.27 160.875 1281.22 160.784 1281.26 160.623C1281.27 160.551 1281.29 160.461 1281.07 160.248C1280.98 160.156 1280.89 160.056 1280.81 159.948C1280.63 159.695 1280.59 159.642 1278.72 159.448L1278.39 159.413V159.137H1276.58V158.62H1218.99V159.137H1217.18V159.653H1215.88V160.666C1215.79 160.666 1215.71 160.673 1215.63 160.673C1215.53 160.673 1215.43 160.673 1215.33 160.673C1215.23 160.673 1215.15 160.667 1215.06 160.667C1214.94 160.667 1214.8 160.667 1214.66 160.667C1214.5 160.667 1214.33 160.673 1214.16 160.673C1213.48 160.673 1213.16 160.62 1213.08 160.488C1213 159.726 1213 158.957 1213.07 158.194C1213.07 158.184 1213.08 158.174 1213.08 158.165C1213.09 158.156 1213.1 158.149 1213.1 158.144C1213.14 158.12 1213.18 158.09 1213.21 158.057H1211.55C1211.45 158.057 1211.33 158.057 1211.18 158.047C1211 158.039 1210.8 158.032 1210.61 158.032C1210.39 158.009 1210.17 158.036 1209.96 158.111C1209.45 158.293 1208.91 158.36 1208.37 158.305C1208.18 158.305 1207.94 158.285 1207.67 158.264C1207.37 158.24 1207.04 158.212 1206.73 158.212C1206.48 158.204 1206.23 158.232 1205.99 158.297C1205.85 158.339 1205.71 158.359 1205.57 158.358C1205.32 158.347 1205.06 158.306 1204.81 158.236C1204.3 158.104 1203.77 158.037 1203.25 158.036C1202.65 158.036 1202.17 158.065 1201.82 158.086C1201.6 158.098 1201.43 158.109 1201.3 158.109C1201.2 158.109 1200.95 158.109 1200.88 157.987C1200.73 157.862 1200.57 157.768 1200.39 157.712C1200.21 157.655 1200.02 157.637 1199.84 157.659C1199.72 157.66 1199.61 157.667 1199.5 157.679C1199.06 157.73 1198.99 157.887 1198.92 158.053C1198.89 158.145 1198.83 158.225 1198.76 158.283C1198.68 158.341 1198.59 158.375 1198.49 158.378C1198.44 158.386 1198.38 158.389 1198.32 158.389C1198.14 158.384 1197.96 158.364 1197.78 158.331C1197.49 158.279 1197.19 158.251 1196.9 158.248C1196.69 158.248 1196.49 158.262 1196.28 158.289C1195.89 158.341 1195.57 158.358 1195.31 158.371C1194.75 158.402 1194.66 158.418 1194.66 158.583C1194.65 158.717 1194.61 158.847 1194.55 158.963C1194.47 159.122 1194.48 159.132 1194.58 159.163C1194.97 159.27 1194.9 160.427 1194.82 161.108C1194.82 161.148 1194.76 161.178 1194.7 161.178H1186.23C1182.08 161.178 1179.88 161.608 1179.88 162.423C1179.88 162.935 1179.13 162.935 1178.78 162.935C1178.64 162.935 1178.5 162.935 1178.35 162.927C1178.2 162.919 1178.03 162.919 1177.87 162.919C1177.57 162.876 1177.26 162.898 1176.97 162.985C1176.68 163.071 1176.41 163.219 1176.18 163.419C1175.88 163.8 1176.02 164.491 1176.17 165.219C1176.45 166.599 1176.77 168.162 1174.47 168.638C1173.46 168.87 1172.51 169.31 1171.67 169.931C1170.84 170.552 1170.15 171.34 1169.63 172.244C1168.92 175.42 1167.9 178.52 1166.6 181.502C1165.89 182.586 1165.02 183.549 1164.01 184.356" fill="#1B023F"/> -<path d="M1290.04 184.325L1441.87 184.939C1441.7 184.075 1441.48 183.22 1441.22 182.379C1440.46 180.099 1440.06 177.714 1440.04 175.311V175.204C1439.95 174.351 1439.57 173.555 1438.96 172.95C1438.98 172.943 1438.99 172.933 1439 172.922C1439.04 172.866 1439.01 172.846 1439.05 172.8C1439.09 172.754 1439.1 172.731 1439.1 172.592C1439.1 172.453 1438.74 172.325 1438.74 172.1C1438.75 171.875 1439.33 172.752 1439.38 172.45C1439.42 172.148 1438.59 171.414 1438.48 171.408C1438.36 171.402 1438.43 171.558 1438.45 171.608C1438.47 171.658 1438.44 171.687 1438.38 171.686C1438.32 171.685 1438.24 171.62 1438.25 171.556C1438.26 171.492 1438.3 171.419 1438.26 171.396C1438.23 171.373 1438.24 171.305 1438.21 171.246C1438.18 171.187 1438.13 171.256 1438.07 171.203C1438.01 171.15 1438.05 171.016 1438.07 170.955C1438.09 170.894 1438.05 170.922 1438 170.929C1437.95 170.936 1437.98 170.891 1437.9 170.901C1437.82 170.911 1437.84 171.101 1437.85 171.156C1437.86 171.211 1437.83 171.156 1437.77 171.199C1437.71 171.242 1437.8 171.267 1437.73 171.369C1437.67 171.471 1437.8 171.584 1437.8 171.664C1437.8 171.697 1437.77 171.718 1437.73 171.736C1437.2 171.291 1436.65 170.88 1436.07 170.506C1435.41 170.096 1434.57 169.706 1434.57 169.701C1434.54 169.686 1434.52 169.665 1434.52 169.64V166.895C1434.52 164.772 1434 163.906 1433.55 163.808C1433.34 163.752 1433.16 163.616 1433.05 163.43C1432.98 163.3 1432.87 163.192 1432.74 163.12C1432.61 163.047 1432.46 163.012 1432.31 163.018C1431.86 163.018 1431.42 163.059 1430.99 163.1C1430.6 163.137 1430.24 163.17 1429.91 163.17C1429.88 163.17 1426.84 163.121 1426.64 162.708C1426.54 162.578 1426.41 162.472 1426.26 162.398C1426.11 162.324 1425.95 162.284 1425.78 162.28C1425.73 162.28 1425.66 162.28 1425.57 162.28C1425.4 162.28 1425.18 162.291 1424.93 162.291C1424.4 162.312 1423.87 162.262 1423.36 162.142C1422.7 161.942 1417.32 161.289 1415.81 161.176C1415.09 161.123 1414.62 161.046 1414.21 160.976C1413.75 160.888 1413.27 160.842 1412.8 160.84C1412.34 160.845 1411.9 160.95 1411.49 161.147C1411.2 161.291 1410.88 161.373 1410.55 161.388C1410.39 161.388 1410.22 161.402 1410.05 161.416C1409.85 161.431 1409.65 161.448 1409.42 161.448C1408.9 161.45 1408.39 161.346 1407.91 161.142C1407.27 160.875 1407.22 160.784 1407.26 160.623C1407.27 160.551 1407.29 160.461 1407.07 160.248C1406.98 160.156 1406.89 160.056 1406.81 159.948C1406.63 159.695 1406.59 159.642 1404.72 159.448L1404.39 159.413V159.137H1402.58V158.62H1344.99V159.137H1343.18V159.653H1341.88V160.666C1341.79 160.666 1341.71 160.673 1341.63 160.673C1341.53 160.673 1341.43 160.673 1341.33 160.673C1341.23 160.673 1341.15 160.667 1341.06 160.667C1340.94 160.667 1340.8 160.667 1340.66 160.667C1340.5 160.667 1340.33 160.673 1340.16 160.673C1339.48 160.673 1339.16 160.62 1339.08 160.488C1339 159.726 1339 158.957 1339.07 158.194C1339.07 158.184 1339.08 158.174 1339.08 158.165C1339.09 158.156 1339.1 158.149 1339.1 158.144C1339.14 158.12 1339.18 158.09 1339.21 158.057H1337.55C1337.45 158.057 1337.33 158.057 1337.18 158.047C1337 158.039 1336.8 158.032 1336.61 158.032C1336.39 158.009 1336.17 158.036 1335.96 158.111C1335.45 158.293 1334.91 158.36 1334.37 158.305C1334.18 158.305 1333.94 158.285 1333.67 158.264C1333.37 158.24 1333.04 158.212 1332.73 158.212C1332.48 158.204 1332.23 158.232 1331.99 158.297C1331.85 158.339 1331.71 158.359 1331.57 158.358C1331.32 158.347 1331.06 158.306 1330.81 158.236C1330.3 158.104 1329.77 158.037 1329.25 158.036C1328.65 158.036 1328.17 158.065 1327.82 158.086C1327.6 158.098 1327.43 158.109 1327.3 158.109C1327.2 158.109 1326.95 158.109 1326.88 157.987C1326.73 157.862 1326.57 157.768 1326.39 157.712C1326.21 157.655 1326.02 157.637 1325.84 157.659C1325.72 157.66 1325.61 157.667 1325.5 157.679C1325.06 157.73 1324.99 157.887 1324.92 158.053C1324.89 158.145 1324.83 158.225 1324.76 158.283C1324.68 158.341 1324.59 158.375 1324.49 158.378C1324.44 158.386 1324.38 158.389 1324.32 158.389C1324.14 158.384 1323.96 158.364 1323.78 158.331C1323.49 158.279 1323.19 158.251 1322.9 158.248C1322.69 158.248 1322.49 158.262 1322.28 158.289C1321.89 158.341 1321.57 158.358 1321.31 158.371C1320.75 158.402 1320.66 158.418 1320.66 158.583C1320.65 158.717 1320.61 158.847 1320.55 158.963C1320.47 159.122 1320.48 159.132 1320.58 159.163C1320.97 159.27 1320.9 160.427 1320.82 161.108C1320.82 161.148 1320.76 161.178 1320.7 161.178H1312.23C1308.08 161.178 1305.88 161.608 1305.88 162.423C1305.88 162.935 1305.13 162.935 1304.78 162.935C1304.64 162.935 1304.5 162.935 1304.35 162.927C1304.2 162.919 1304.03 162.919 1303.87 162.919C1303.57 162.876 1303.26 162.898 1302.97 162.985C1302.68 163.071 1302.41 163.219 1302.18 163.419C1301.88 163.8 1302.02 164.491 1302.17 165.219C1302.45 166.599 1302.77 168.162 1300.47 168.638C1299.46 168.87 1298.51 169.31 1297.67 169.931C1296.84 170.552 1296.15 171.34 1295.63 172.244C1294.92 175.42 1293.9 178.52 1292.6 181.502C1291.89 182.586 1291.02 183.549 1290.01 184.356" fill="#1B023F"/> -<path d="M1327.04 184.325L1478.87 184.939C1478.7 184.075 1478.48 183.22 1478.22 182.379C1477.46 180.099 1477.06 177.714 1477.04 175.311V175.204C1476.95 174.351 1476.57 173.555 1475.96 172.95C1475.98 172.943 1475.99 172.933 1476 172.922C1476.04 172.866 1476.01 172.846 1476.05 172.8C1476.09 172.754 1476.1 172.731 1476.1 172.592C1476.1 172.453 1475.74 172.325 1475.74 172.1C1475.75 171.875 1476.33 172.752 1476.38 172.45C1476.42 172.148 1475.59 171.414 1475.48 171.408C1475.36 171.402 1475.43 171.558 1475.45 171.608C1475.47 171.658 1475.44 171.687 1475.38 171.686C1475.32 171.685 1475.24 171.62 1475.25 171.556C1475.26 171.492 1475.3 171.419 1475.26 171.396C1475.23 171.373 1475.24 171.305 1475.21 171.246C1475.18 171.187 1475.13 171.256 1475.07 171.203C1475.01 171.15 1475.05 171.016 1475.07 170.955C1475.09 170.894 1475.05 170.922 1475 170.929C1474.95 170.936 1474.98 170.891 1474.9 170.901C1474.82 170.911 1474.84 171.101 1474.85 171.156C1474.86 171.211 1474.83 171.156 1474.77 171.199C1474.71 171.242 1474.8 171.267 1474.73 171.369C1474.67 171.471 1474.8 171.584 1474.8 171.664C1474.8 171.697 1474.77 171.718 1474.73 171.736C1474.2 171.291 1473.65 170.88 1473.07 170.506C1472.41 170.096 1471.57 169.706 1471.57 169.701C1471.54 169.686 1471.52 169.665 1471.52 169.64V166.895C1471.52 164.772 1471 163.906 1470.55 163.808C1470.34 163.752 1470.16 163.616 1470.05 163.43C1469.98 163.3 1469.87 163.192 1469.74 163.12C1469.61 163.047 1469.46 163.012 1469.31 163.018C1468.86 163.018 1468.42 163.059 1467.99 163.1C1467.6 163.137 1467.24 163.17 1466.91 163.17C1466.88 163.17 1463.84 163.121 1463.64 162.708C1463.54 162.578 1463.41 162.472 1463.26 162.398C1463.11 162.324 1462.95 162.284 1462.78 162.28C1462.73 162.28 1462.66 162.28 1462.57 162.28C1462.4 162.28 1462.18 162.291 1461.93 162.291C1461.4 162.312 1460.87 162.262 1460.36 162.142C1459.7 161.942 1454.32 161.289 1452.81 161.176C1452.09 161.123 1451.62 161.046 1451.21 160.976C1450.75 160.888 1450.27 160.842 1449.8 160.84C1449.34 160.845 1448.9 160.95 1448.49 161.147C1448.2 161.291 1447.88 161.373 1447.55 161.388C1447.39 161.388 1447.22 161.402 1447.05 161.416C1446.85 161.431 1446.65 161.448 1446.42 161.448C1445.9 161.45 1445.39 161.346 1444.91 161.142C1444.27 160.875 1444.22 160.784 1444.26 160.623C1444.27 160.551 1444.29 160.461 1444.07 160.248C1443.98 160.156 1443.89 160.056 1443.81 159.948C1443.63 159.695 1443.59 159.642 1441.72 159.448L1441.39 159.413V159.137H1439.58V158.62H1381.99V159.137H1380.18V159.653H1378.88V160.666C1378.79 160.666 1378.71 160.673 1378.63 160.673C1378.53 160.673 1378.43 160.673 1378.33 160.673C1378.23 160.673 1378.15 160.667 1378.06 160.667C1377.94 160.667 1377.8 160.667 1377.66 160.667C1377.5 160.667 1377.33 160.673 1377.16 160.673C1376.48 160.673 1376.16 160.62 1376.08 160.488C1376 159.726 1376 158.957 1376.07 158.194C1376.07 158.184 1376.08 158.174 1376.08 158.165C1376.09 158.156 1376.1 158.149 1376.1 158.144C1376.14 158.12 1376.18 158.09 1376.21 158.057H1374.55C1374.45 158.057 1374.33 158.057 1374.18 158.047C1374 158.039 1373.8 158.032 1373.61 158.032C1373.39 158.009 1373.17 158.036 1372.96 158.111C1372.45 158.293 1371.91 158.36 1371.37 158.305C1371.18 158.305 1370.94 158.285 1370.67 158.264C1370.37 158.24 1370.04 158.212 1369.73 158.212C1369.48 158.204 1369.23 158.232 1368.99 158.297C1368.85 158.339 1368.71 158.359 1368.57 158.358C1368.32 158.347 1368.06 158.306 1367.81 158.236C1367.3 158.104 1366.77 158.037 1366.25 158.036C1365.65 158.036 1365.17 158.065 1364.82 158.086C1364.6 158.098 1364.43 158.109 1364.3 158.109C1364.2 158.109 1363.95 158.109 1363.88 157.987C1363.73 157.862 1363.57 157.768 1363.39 157.712C1363.21 157.655 1363.02 157.637 1362.84 157.659C1362.72 157.66 1362.61 157.667 1362.5 157.679C1362.06 157.73 1361.99 157.887 1361.92 158.053C1361.89 158.145 1361.83 158.225 1361.76 158.283C1361.68 158.341 1361.59 158.375 1361.49 158.378C1361.44 158.386 1361.38 158.389 1361.32 158.389C1361.14 158.384 1360.96 158.364 1360.78 158.331C1360.49 158.279 1360.19 158.251 1359.9 158.248C1359.69 158.248 1359.49 158.262 1359.28 158.289C1358.89 158.341 1358.57 158.358 1358.31 158.371C1357.75 158.402 1357.66 158.418 1357.66 158.583C1357.65 158.717 1357.61 158.847 1357.55 158.963C1357.47 159.122 1357.48 159.132 1357.58 159.163C1357.97 159.27 1357.9 160.427 1357.82 161.108C1357.82 161.148 1357.76 161.178 1357.7 161.178H1349.23C1345.08 161.178 1342.88 161.608 1342.88 162.423C1342.88 162.935 1342.13 162.935 1341.78 162.935C1341.64 162.935 1341.5 162.935 1341.35 162.927C1341.2 162.919 1341.03 162.919 1340.87 162.919C1340.57 162.876 1340.26 162.898 1339.97 162.985C1339.68 163.071 1339.41 163.219 1339.18 163.419C1338.88 163.8 1339.02 164.491 1339.17 165.219C1339.45 166.599 1339.77 168.162 1337.47 168.638C1336.46 168.87 1335.51 169.31 1334.67 169.931C1333.84 170.552 1333.15 171.34 1332.63 172.244C1331.92 175.42 1330.9 178.52 1329.6 181.502C1328.89 182.586 1328.02 183.549 1327.01 184.356" fill="#1B023F"/> -<path d="M556.641 153.808C556.641 153.808 552.754 157.578 544.209 158.902C535.664 160.226 518.217 158.902 518.217 158.902L510.6 164.484H492.994L487.895 160.379L484.295 162.144L492.988 185.001H556.635L556.641 153.808Z" fill="#1B023F"/> -<path d="M254.998 168.646L188.41 149.746L119.964 128.669L98.4471 123.059H59.3572L33.4961 100.659H-0.00390625V184.068L254.998 168.646Z" fill="#1B023F"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M56.3943 100.655V102.025H56.9833V103.268H61.0933L61.4193 103.786H61.8102C61.8448 103.591 61.8685 103.394 61.8813 103.197V102.153C62.0761 102.145 62.2702 102.124 62.4623 102.09C62.6763 102.049 62.9252 102.025 62.9252 102.025V101.244H64.2253V102.025H68.9872V102.48H69.9592L70.1592 101.962C70.3864 101.79 70.6264 101.635 70.8773 101.499C71.0522 101.483 71.2283 101.483 71.4033 101.499C71.4033 101.499 71.1873 102.614 71.4033 102.614H76.0292V104.375H77.2733V104.701H77.5363L77.4713 105.09L76.7563 105.29V123.295H78.9053V123.237H80.4753V108.81L80.0753 108.421L79.8832 108.032L80.9902 107.378L81.2532 106.399C81.2532 106.399 81.3533 106.073 81.5793 106.073H88.2292V107.773H89.6702L88.8813 108.554V122.975H91.1663V124.408H98.8663C98.9313 124.408 98.9313 124.479 98.9313 124.534V128.452C98.9313 128.515 98.9313 128.58 98.8663 128.58H83.3433V128.906H32.3223V123.626H53.5883C53.6373 122.916 53.5883 119.844 53.5883 119.844H53.9792L53.6533 118.474L53.7162 110.638L53.9792 107.38L53.8503 106.08L53.4612 105.036C53.4612 105.036 53.8503 104.924 53.8503 104.573C53.8346 104.288 53.7893 104.005 53.7153 103.729C53.7153 103.729 53.8503 103.052 53.8503 102.877C53.8503 102.702 54.3683 102.162 54.3683 102.162C54.3683 102.162 54.0682 101.862 54.2422 101.644C54.3739 101.334 54.4419 101 54.4423 100.663L56.3943 100.655ZM60.0493 105.291H56.9202V121.863L57.1832 122.644H60.0493C60.0413 121.544 60.0193 120.43 60.0493 120.294C60.1283 119.994 60.5123 107.569 60.5123 107.569L60.2493 106.525L59.9863 106.007L60.0493 105.291ZM65.7292 105.483H64.1592V122.644H66.7712V107.377L66.5823 106.725L66.4453 106.136L66.3193 105.618L65.7292 105.483ZM72.8403 105.746H71.3403V122.646H73.0403V107.632L72.8403 106.725L72.3853 106.262L72.8403 105.746ZM86.0833 108.158H82.8882V108.81C82.701 109.271 82.5698 109.753 82.4973 110.245C82.5523 110.467 82.4973 122.97 82.4973 122.97H86.7333C86.9573 122.579 86.7333 109.982 86.7333 109.982L86.5333 109.201L86.7333 108.809L86.6063 108.285L86.0833 108.158Z" fill="#1B023F"/> -<path d="M31.4795 105.094C31.4795 104.485 35.2005 103.907 31.1795 101.658C31.0485 101.985 30.0344 101.331 29.8274 101.309C29.2684 101.242 29.1064 101.144 29.1594 100.873C29.1814 100.708 29.1484 100.573 29.0394 100.524C28.996 100.497 28.9626 100.457 28.9445 100.41C28.9264 100.362 28.9246 100.31 28.9394 100.261C28.9954 100.141 28.9504 100.085 28.8534 100.085C28.7334 100.085 28.6994 99.923 28.7104 99.311C28.7104 98.886 28.7444 98.59 28.7664 98.668C28.8084 98.755 28.8754 98.768 29.0174 98.688C29.1174 98.635 29.2245 98.613 29.2555 98.646C29.2865 98.679 29.4094 98.579 29.5294 98.428C29.6494 98.277 29.7924 98.154 29.8454 98.154C29.9994 98.154 30.0854 97.891 30.0854 97.478C30.0854 97.3054 30.1226 97.1349 30.1944 96.978C30.2614 96.878 30.2504 96.793 30.1634 96.749C30.0634 96.685 30.0635 96.662 30.1745 96.662C30.3103 95.9033 30.2761 95.1239 30.0744 94.38C30.0137 94.1639 29.9957 93.938 30.0214 93.715C30.039 93.6778 30.0431 93.6357 30.0329 93.5959C30.0226 93.556 29.9987 93.5211 29.9654 93.497C29.8793 93.2448 29.8497 92.9769 29.8784 92.712C29.9064 92.4114 29.8912 92.1083 29.8335 91.812C29.7132 91.5303 29.6334 91.233 29.5965 90.929C29.5745 90.756 29.5514 90.155 29.5404 89.596C29.5456 89.1718 29.5091 88.7481 29.4314 88.331C29.3343 87.7101 29.2864 87.0825 29.2884 86.454C29.2024 83.619 29.1154 81.535 29.0594 81.096C28.9724 80.296 28.9724 80.236 29.0594 79.984C29.1154 79.842 29.1044 79.755 29.0484 79.784C28.9924 79.813 28.9484 79.521 28.9394 79.128C28.9304 78.735 28.8975 77.983 28.8645 77.449C28.8315 76.915 28.7554 75.572 28.6994 74.449C28.5904 72.482 28.4365 71.633 28.1775 71.549C28.1105 71.515 28.0575 71.602 28.0575 71.722C28.0443 71.8606 27.9864 71.9912 27.8924 72.094C27.669 72.7153 27.5767 73.3762 27.6214 74.035C27.6214 74.155 27.5654 74.535 27.5094 74.887C27.4265 75.417 27.3725 75.9511 27.3474 76.487C27.3134 77.02 27.2805 77.599 27.2605 77.775C27.2405 77.951 27.1824 78.375 27.1604 78.725C27.0604 79.87 26.9605 80.449 26.8335 80.525C26.7465 80.592 26.7465 80.634 26.8335 80.69C26.8701 80.7283 26.8965 80.7752 26.9101 80.8265C26.9238 80.8777 26.9243 80.9315 26.9115 80.983C26.8895 81.103 26.8444 81.704 26.8214 82.316C26.7794 83.528 26.7574 83.69 26.6214 83.897C26.5764 83.975 26.5884 84.028 26.6444 84.028C26.7004 84.028 26.7304 84.422 26.7194 84.967C26.6774 86.341 26.6774 86.311 26.5014 86.232C26.3254 86.153 26.2944 86.288 26.4564 86.461C26.5874 86.592 26.4895 87.028 26.3285 87.028C26.2725 87.028 26.3064 87.14 26.3924 87.268C26.5234 87.468 26.5464 87.768 26.5124 88.732C26.5231 89.1622 26.4749 89.5918 26.3694 90.009C26.3105 90.1072 26.2916 90.2242 26.3164 90.336C26.4201 90.9747 26.4264 91.6254 26.3354 92.266C26.2824 92.266 26.2604 92.333 26.2934 92.42C26.3163 92.7414 26.2975 93.0644 26.2374 93.381C26.0374 94.647 26.0375 94.744 26.1955 95.127C26.2705 95.311 26.2954 95.476 26.2484 95.476C26.1394 95.476 26.1844 96.197 26.3264 96.806C26.5974 97.954 26.6954 98.259 26.7624 98.259C26.7964 98.259 26.9054 98.379 26.9804 98.522C27.1114 98.7162 27.3094 98.8554 27.5365 98.913C27.9415 99.033 27.9414 99.044 27.9414 99.6C27.9414 100.08 27.8964 100.181 27.6674 100.332C27.5042 100.443 27.3756 100.598 27.2964 100.779C27.2104 101.008 27.1654 101.019 26.9964 100.91C26.6964 100.726 26.1894 100.955 26.2644 101.248C26.2984 101.379 26.2755 101.435 26.1775 101.39C26.1378 101.38 26.0959 101.381 26.0572 101.395C26.0184 101.408 25.9844 101.432 25.9594 101.465C25.9034 101.565 25.8595 101.554 25.7945 101.457C25.7305 101.337 25.6635 101.337 25.4455 101.457C25.0325 101.641 25.1945 101.51 24.6045 101.75C24.6605 101.915 24.4534 102.035 24.2884 101.926C24.0704 101.806 23.5564 101.772 23.5564 101.893C23.5564 101.957 23.5034 101.98 23.4474 101.935C23.4141 101.911 23.3905 101.876 23.3808 101.836C23.3711 101.796 23.3759 101.754 23.3944 101.717C23.4164 101.641 23.4054 101.577 23.3494 101.577C23.2934 101.577 23.2185 101.664 23.1875 101.777C23.1425 101.939 23.0675 101.961 22.8385 101.908C22.5535 101.83 22.5534 101.819 22.5194 100.696C22.4599 100.296 22.4827 99.8873 22.5864 99.496C22.6504 99.454 22.7064 99.465 22.7064 99.518C22.7064 99.736 23.4804 99.507 23.8184 99.191C24.4184 98.613 24.4834 97.411 24.0474 94.749C23.9355 94.352 23.9099 93.9357 23.9724 93.528C24.0364 93.461 23.9944 93.299 23.8524 93.059C23.5671 92.3724 23.4548 91.6262 23.5254 90.886C23.5255 90.535 23.4736 90.1858 23.3714 89.85C23.2669 89.5148 23.245 89.1594 23.3075 88.814C23.3495 88.247 23.3384 87.953 23.2404 87.844C23.1262 87.4549 23.0891 87.0473 23.1314 86.644C23.1542 85.313 23.0873 83.982 22.9314 82.66C22.8658 82.4486 22.8431 82.2263 22.8645 82.006C22.8755 81.744 22.8114 80.663 22.7334 79.606C22.6554 78.549 22.5604 77.271 22.5334 76.771C22.5214 76.0238 22.4231 75.2806 22.2404 74.556C22.0864 74 21.8804 73.888 21.7824 74.316C21.7494 74.489 21.6734 74.609 21.6284 74.579C21.5084 74.501 21.4104 74.917 21.4104 75.56C21.3886 76.0441 21.3298 76.5258 21.2345 77.001C21.1513 77.3813 21.1008 77.7681 21.0835 78.157C21.1171 78.4628 21.1019 78.772 21.0384 79.073C21.0044 79.302 20.9634 79.64 20.9514 79.816C20.945 79.9651 20.915 80.1123 20.8624 80.252C20.8045 80.4879 20.7753 80.73 20.7754 80.973C20.7674 81.2919 20.7272 81.6092 20.6554 81.92C20.6031 82.0521 20.5886 82.1961 20.6134 82.336C20.6207 82.3496 20.6251 82.3646 20.6262 82.38C20.6273 82.3955 20.6251 82.411 20.6198 82.4255C20.6145 82.44 20.6062 82.4533 20.5955 82.4644C20.5847 82.4755 20.5718 82.4842 20.5575 82.49C20.5281 82.517 20.508 82.5526 20.4999 82.5917C20.4918 82.6308 20.4962 82.6715 20.5124 82.708C20.5376 82.9496 20.5197 83.1937 20.4594 83.429C20.3724 83.809 20.3724 83.996 20.4484 84.029C20.4614 84.0347 20.4729 84.0432 20.4824 84.0538C20.4918 84.0644 20.4989 84.0768 20.5032 84.0903C20.5075 84.1039 20.5088 84.1181 20.5071 84.1322C20.5054 84.1463 20.5007 84.1598 20.4934 84.172C20.3468 85.1032 20.2799 86.0453 20.2934 86.988C20.3393 87.547 20.2021 88.1058 19.9024 88.58C19.7154 88.711 19.7154 88.722 19.9334 88.898C20.1514 89.074 20.1434 89.158 20.0764 90.284C20.0615 90.7503 20.0036 91.2143 19.9035 91.67C19.8705 91.7264 19.8531 91.7906 19.8531 91.856C19.8531 91.9214 19.8705 91.9855 19.9035 92.042C19.9823 92.5292 19.986 93.0256 19.9145 93.514C19.877 93.7197 19.8546 93.928 19.8474 94.137C19.8533 94.4031 19.8007 94.6673 19.6934 94.911C19.6074 95.011 19.5845 95.282 19.6405 95.729C19.6745 96.101 19.7044 96.492 19.7044 96.612C19.7044 97.377 19.7154 97.584 19.8134 97.693C19.9074 97.8929 19.9669 98.1072 19.9895 98.327C20.0481 98.6693 20.1975 98.9896 20.4221 99.2545C20.6468 99.5194 20.9383 99.7192 21.2664 99.833C21.5934 99.897 21.6264 99.942 21.6494 100.291C21.6722 100.743 21.646 101.196 21.5714 101.643C21.5524 101.763 21.5295 102.026 21.5185 102.232C21.5075 102.438 21.4734 102.532 21.4514 102.472C21.3644 102.265 21.1134 102.307 21.0384 102.547C20.9934 102.667 20.8955 102.765 20.8205 102.765C20.5915 102.765 20.6205 102.975 20.8545 102.986C20.9945 102.994 20.9824 103.017 20.7984 103.095C20.6674 103.137 20.5584 103.257 20.5584 103.335C20.5584 103.684 18.5084 103.935 18.3094 103.617C18.2564 103.53 18.2094 103.517 18.1584 103.606C17.9824 103.095 17.1104 102.176 17.2724 103.192C17.1414 103.334 16.9904 103.245 17.0434 103.53L17.0655 103.692L16.7724 103.992C16.4724 104.285 16.1724 104.292 16.1724 103.992C16.171 103.949 16.1531 103.908 16.1225 103.877C16.0918 103.846 16.0507 103.828 16.0074 103.827C15.9074 103.827 15.8655 103.785 15.8985 103.727C15.9315 103.669 15.8984 103.618 15.8344 103.618C15.7739 103.605 15.7171 103.578 15.6679 103.54C15.6186 103.503 15.5782 103.455 15.5495 103.4C15.5156 103.342 15.4682 103.293 15.4113 103.256C15.3544 103.22 15.2896 103.199 15.2224 103.193C14.9824 103.193 14.8734 102.604 14.8504 101.109L14.8394 100.137L15.3754 100.081C15.8534 100.039 16.4874 99.723 16.4874 99.525C16.4874 99.483 16.5634 99.45 16.6414 99.45C16.8484 99.45 17.0994 99.045 17.2414 98.478C17.302 98.2399 17.3892 98.0095 17.5014 97.791C17.7068 97.4069 17.7655 96.9612 17.6665 96.537C17.5795 96.395 17.5994 96.237 17.7194 96.003C17.8294 95.7707 17.8864 95.517 17.8864 95.26C17.8864 95.003 17.8294 94.7492 17.7194 94.517C17.5766 94.2684 17.5073 93.9844 17.5194 93.698C17.5194 93.4353 17.4789 93.1743 17.3994 92.924C17.3209 92.6362 17.2805 92.3393 17.2794 92.041C17.2574 91.429 17.2905 91.264 17.4665 91.091C17.5755 90.982 17.6174 90.891 17.5664 90.891C17.3664 90.891 17.2474 90.466 17.1834 89.539C17.0744 88 17.0834 87.839 17.3684 87.575C17.5974 87.368 17.5975 87.357 17.4015 87.215C17.282 87.1122 17.198 86.9743 17.1615 86.821C17.1508 86.7067 17.1094 86.5975 17.0415 86.505C16.8596 86.1871 16.776 85.8224 16.8014 85.457C16.8464 85.446 16.8464 85.217 16.8014 84.977C16.7506 84.6225 16.744 84.2631 16.7815 83.907C16.8235 83.449 16.8015 83.298 16.7035 83.298C16.6055 83.298 16.5834 83.167 16.6284 82.829C16.6704 82.529 16.6504 82.315 16.5614 82.24C16.4614 82.14 16.4744 82.086 16.5944 82.011C16.7144 81.936 16.7254 81.869 16.6284 81.711C16.5892 81.6558 16.5672 81.5903 16.5653 81.5227C16.5633 81.455 16.5815 81.3883 16.6175 81.331C16.6705 81.219 16.6705 81.155 16.6175 81.155C16.4635 81.155 16.3884 80.588 16.5084 80.434C16.5834 80.334 16.5834 80.291 16.4854 80.291C16.4104 80.291 16.3764 80.205 16.4104 80.084C16.4444 79.963 16.4324 79.866 16.3884 79.866C16.2884 79.866 16.1814 79.419 16.1034 78.743C16.0781 78.3832 16.0276 78.0257 15.9524 77.673C15.8117 77.2509 15.7441 76.8079 15.7525 76.363C15.8085 76.321 15.7634 76.145 15.6884 75.98C15.6418 75.9001 15.6119 75.8116 15.6004 75.7198C15.5889 75.6281 15.596 75.5349 15.6214 75.446C15.7214 75.172 15.6434 74.519 15.5124 74.519C15.4594 74.519 15.4124 74.388 15.4124 74.226C15.4037 74.0003 15.3702 73.7763 15.3125 73.558C15.2362 73.1687 15.1847 72.7748 15.1584 72.379C15.1054 71.479 15.0294 71.203 14.8094 71.203C14.7224 71.203 14.6255 71.061 14.5915 70.885C14.5045 70.46 14.1774 70.449 14.0804 70.854C14.035 71.0182 13.9612 71.1732 13.8624 71.312C13.7084 71.485 13.6334 72.052 13.5554 73.558C13.5275 74.0585 13.4734 74.5571 13.3935 75.052C13.3152 75.426 13.275 75.8069 13.2735 76.189C13.265 76.6016 13.2286 77.0132 13.1645 77.421C13.0787 78.0063 13.0386 78.5974 13.0445 79.189C13.0732 79.6091 13.0432 80.0311 12.9554 80.443C12.856 80.8573 12.8054 81.2819 12.8045 81.708C12.7595 82.364 12.6954 83.345 12.6624 83.87C12.6294 84.395 12.6065 85.135 12.6175 85.496C12.6444 85.8139 12.6035 86.134 12.4975 86.435C12.3756 86.7888 12.3534 87.1694 12.4334 87.535C12.4974 88.235 12.4864 88.387 12.3134 88.627C12.0839 89.1591 12.0188 89.7476 12.1264 90.317C12.1475 90.3719 12.1557 90.431 12.1503 90.4896C12.1449 90.5482 12.1261 90.6048 12.0954 90.655C12.0136 90.8982 11.9694 91.1524 11.9644 91.409C11.9534 91.702 11.8974 91.943 11.8554 91.943C11.8134 91.943 11.7774 92.01 11.7774 92.097C11.7267 92.2543 11.6373 92.3963 11.5174 92.51C11.3634 92.686 11.3074 92.81 11.3864 92.828C11.5142 93.2891 11.5104 93.7769 11.3754 94.236C11.3023 94.389 11.2614 94.5555 11.2555 94.725C11.2285 94.9462 11.173 95.163 11.0904 95.37C11.004 95.5764 10.974 95.8021 11.0034 96.024C11.0254 96.242 11.0034 96.451 10.9284 96.482C10.7854 96.582 10.7744 96.974 10.9284 96.974C11.0034 96.974 11.0034 97.041 10.9284 97.181C10.8479 97.3099 10.8079 97.4599 10.8134 97.6117C10.819 97.7636 10.8698 97.9103 10.9594 98.033C11.0149 98.1029 11.056 98.183 11.0803 98.2688C11.1047 98.3546 11.1119 98.4444 11.1015 98.533C11.0864 98.6195 11.0903 98.7082 11.1129 98.793C11.1355 98.8779 11.1763 98.9568 11.2324 99.0243C11.2885 99.0919 11.3586 99.1464 11.4378 99.1841C11.5171 99.2219 11.6036 99.242 11.6914 99.243C11.8564 99.251 11.9424 99.318 11.9204 99.394C11.8564 99.548 12.2054 99.754 12.5434 99.754C12.7642 99.7712 12.983 99.8077 13.1974 99.863L13.6024 99.972L13.5575 101.172C13.6131 101.71 13.5193 102.253 13.2865 102.742C13.0235 103.192 13.0014 103.421 13.2194 103.605C13.4704 103.812 13.4194 104.005 13.1104 103.943C13.0477 103.94 12.9875 103.917 12.9383 103.878C12.8892 103.839 12.8535 103.785 12.8364 103.725C12.8364 103.583 12.8254 103.571 12.7494 103.691C12.7134 103.738 12.6625 103.771 12.6051 103.785C12.5477 103.799 12.4872 103.794 12.4334 103.769C12.2684 103.713 12.1824 103.747 12.1334 103.856C12.0584 104.04 11.7735 104.096 11.7735 103.92C11.7716 103.892 11.7595 103.865 11.7394 103.845C11.7194 103.825 11.6927 103.813 11.6645 103.811C11.6005 103.811 11.5554 103.911 11.5554 104.029C11.5577 104.059 11.5537 104.089 11.5437 104.117C11.5337 104.145 11.5179 104.17 11.4973 104.192C11.4768 104.214 11.4519 104.231 11.4244 104.242C11.3969 104.253 11.3672 104.259 11.3374 104.258C11.2284 104.269 11.0664 104.28 10.9994 104.292C10.3124 105.013 9.55745 105.482 11.0214 105.384C12.2262 105.225 13.4444 105.196 14.6554 105.297C16.8144 105.286 29.4194 105.361 31.4474 105.087L31.4795 105.094Z" fill="#1B023F"/> -<path d="M131.372 142.05C131.372 141.441 135.093 140.863 131.072 138.614C130.941 138.941 129.927 138.287 129.72 138.265C129.161 138.198 128.999 138.1 129.052 137.829C129.074 137.664 129.041 137.529 128.932 137.48C128.889 137.453 128.855 137.413 128.837 137.366C128.819 137.318 128.817 137.266 128.832 137.217C128.888 137.097 128.843 137.041 128.746 137.041C128.626 137.041 128.592 136.879 128.603 136.267C128.603 135.842 128.637 135.546 128.659 135.624C128.701 135.711 128.768 135.724 128.91 135.644C129.01 135.591 129.117 135.569 129.148 135.602C129.179 135.635 129.302 135.535 129.422 135.384C129.542 135.233 129.685 135.11 129.738 135.11C129.892 135.11 129.978 134.847 129.978 134.434C129.978 134.261 130.015 134.091 130.087 133.934C130.154 133.834 130.143 133.749 130.056 133.705C129.956 133.641 129.956 133.618 130.067 133.618C130.203 132.859 130.169 132.08 129.967 131.336C129.906 131.12 129.888 130.894 129.914 130.671C129.932 130.634 129.936 130.592 129.925 130.552C129.915 130.512 129.891 130.477 129.858 130.453C129.772 130.201 129.742 129.933 129.771 129.668C129.799 129.367 129.784 129.064 129.726 128.768C129.606 128.486 129.526 128.189 129.489 127.885C129.467 127.712 129.444 127.111 129.433 126.552C129.438 126.128 129.402 125.704 129.324 125.287C129.227 124.666 129.179 124.038 129.181 123.41C129.095 120.575 129.008 118.491 128.952 118.052C128.865 117.252 128.865 117.192 128.952 116.94C129.008 116.798 128.997 116.711 128.941 116.74C128.885 116.769 128.841 116.477 128.832 116.084C128.823 115.691 128.79 114.939 128.757 114.405C128.724 113.871 128.648 112.528 128.592 111.405C128.483 109.438 128.329 108.589 128.07 108.505C128.003 108.471 127.95 108.558 127.95 108.678C127.937 108.817 127.879 108.947 127.785 109.05C127.562 109.671 127.469 110.332 127.514 110.991C127.514 111.111 127.458 111.491 127.402 111.843C127.319 112.373 127.265 112.907 127.24 113.443C127.206 113.976 127.173 114.555 127.153 114.731C127.133 114.907 127.075 115.331 127.053 115.681C126.953 116.826 126.853 117.405 126.726 117.481C126.639 117.548 126.639 117.59 126.726 117.646C126.763 117.684 126.789 117.731 126.803 117.782C126.816 117.834 126.817 117.888 126.804 117.939C126.782 118.059 126.737 118.66 126.714 119.272C126.672 120.484 126.65 120.646 126.514 120.853C126.469 120.931 126.481 120.984 126.537 120.984C126.593 120.984 126.623 121.378 126.612 121.923C126.57 123.297 126.57 123.267 126.394 123.188C126.218 123.109 126.187 123.244 126.349 123.417C126.48 123.548 126.382 123.984 126.221 123.984C126.165 123.984 126.199 124.096 126.285 124.224C126.416 124.424 126.439 124.724 126.405 125.688C126.416 126.118 126.368 126.548 126.262 126.965C126.203 127.063 126.184 127.18 126.209 127.292C126.313 127.931 126.319 128.581 126.228 129.222C126.175 129.222 126.153 129.289 126.186 129.376C126.209 129.697 126.19 130.02 126.13 130.337C125.93 131.603 125.93 131.7 126.088 132.083C126.163 132.267 126.188 132.432 126.141 132.432C126.032 132.432 126.077 133.153 126.219 133.762C126.49 134.91 126.588 135.215 126.655 135.215C126.689 135.215 126.798 135.335 126.873 135.478C127.004 135.672 127.202 135.811 127.429 135.869C127.834 135.989 127.834 136 127.834 136.556C127.834 137.036 127.789 137.137 127.56 137.288C127.397 137.399 127.268 137.554 127.189 137.735C127.103 137.964 127.058 137.975 126.889 137.866C126.589 137.682 126.082 137.911 126.157 138.204C126.191 138.335 126.168 138.391 126.07 138.346C126.03 138.336 125.988 138.337 125.95 138.351C125.911 138.364 125.877 138.388 125.852 138.421C125.796 138.521 125.752 138.51 125.687 138.413C125.623 138.293 125.556 138.293 125.338 138.413C124.925 138.597 125.087 138.466 124.497 138.706C124.553 138.871 124.346 138.991 124.181 138.882C123.963 138.762 123.449 138.728 123.449 138.849C123.449 138.913 123.396 138.936 123.34 138.891C123.307 138.867 123.283 138.832 123.273 138.792C123.264 138.752 123.269 138.71 123.287 138.673C123.309 138.597 123.298 138.533 123.242 138.533C123.186 138.533 123.111 138.62 123.08 138.733C123.035 138.895 122.96 138.917 122.731 138.864C122.446 138.786 122.446 138.775 122.412 137.652C122.352 137.252 122.375 136.843 122.479 136.452C122.543 136.41 122.599 136.421 122.599 136.474C122.599 136.692 123.373 136.463 123.711 136.147C124.311 135.569 124.376 134.367 123.94 131.705C123.828 131.308 123.802 130.892 123.865 130.484C123.929 130.417 123.887 130.255 123.745 130.015C123.46 129.328 123.347 128.582 123.418 127.842C123.418 127.491 123.366 127.142 123.264 126.806C123.16 126.471 123.138 126.115 123.2 125.77C123.242 125.203 123.231 124.909 123.133 124.8C123.019 124.411 122.982 124.003 123.024 123.6C123.047 122.269 122.98 120.938 122.824 119.616C122.758 119.405 122.736 119.182 122.757 118.962C122.768 118.7 122.704 117.619 122.626 116.562C122.548 115.505 122.453 114.227 122.426 113.727C122.414 112.98 122.316 112.237 122.133 111.512C121.979 110.956 121.773 110.844 121.675 111.272C121.642 111.445 121.566 111.565 121.521 111.535C121.401 111.457 121.303 111.873 121.303 112.516C121.281 113 121.222 113.482 121.127 113.957C121.044 114.337 120.993 114.724 120.976 115.113C121.01 115.419 120.994 115.728 120.931 116.029C120.897 116.258 120.856 116.596 120.844 116.772C120.838 116.921 120.808 117.068 120.755 117.208C120.697 117.444 120.668 117.686 120.668 117.929C120.66 118.248 120.62 118.565 120.548 118.876C120.496 119.008 120.481 119.152 120.506 119.292C120.513 119.306 120.518 119.321 120.519 119.336C120.52 119.351 120.518 119.367 120.512 119.381C120.507 119.396 120.499 119.409 120.488 119.42C120.477 119.432 120.464 119.44 120.45 119.446C120.421 119.473 120.401 119.509 120.392 119.548C120.384 119.587 120.389 119.628 120.405 119.664C120.43 119.906 120.412 120.15 120.352 120.385C120.265 120.765 120.265 120.952 120.341 120.985C120.354 120.991 120.366 120.999 120.375 121.01C120.384 121.02 120.392 121.033 120.396 121.046C120.4 121.06 120.401 121.074 120.4 121.088C120.398 121.102 120.393 121.116 120.386 121.128C120.239 122.059 120.172 123.001 120.186 123.944C120.232 124.503 120.095 125.062 119.795 125.536C119.608 125.667 119.608 125.678 119.826 125.854C120.044 126.03 120.036 126.114 119.969 127.24C119.954 127.706 119.896 128.17 119.796 128.626C119.763 128.682 119.746 128.747 119.746 128.812C119.746 128.877 119.763 128.942 119.796 128.998C119.875 129.485 119.879 129.982 119.807 130.47C119.77 130.676 119.747 130.884 119.74 131.093C119.746 131.359 119.693 131.623 119.586 131.867C119.5 131.967 119.477 132.238 119.533 132.685C119.567 133.057 119.597 133.448 119.597 133.568C119.597 134.333 119.608 134.54 119.706 134.649C119.8 134.849 119.859 135.063 119.882 135.283C119.941 135.625 120.09 135.946 120.315 136.21C120.539 136.475 120.831 136.675 121.159 136.789C121.486 136.853 121.519 136.898 121.542 137.247C121.565 137.699 121.539 138.152 121.464 138.599C121.445 138.719 121.422 138.982 121.411 139.188C121.4 139.394 121.366 139.488 121.344 139.428C121.257 139.221 121.006 139.263 120.931 139.503C120.886 139.623 120.788 139.721 120.713 139.721C120.484 139.721 120.513 139.931 120.747 139.942C120.887 139.95 120.875 139.973 120.691 140.051C120.56 140.093 120.451 140.213 120.451 140.291C120.451 140.64 118.401 140.891 118.202 140.573C118.149 140.486 118.102 140.473 118.051 140.562C117.875 140.051 117.003 139.132 117.165 140.148C117.034 140.29 116.883 140.201 116.936 140.486L116.958 140.648L116.665 140.948C116.365 141.241 116.065 141.248 116.065 140.948C116.064 140.905 116.046 140.864 116.015 140.833C115.984 140.802 115.943 140.784 115.9 140.783C115.8 140.783 115.758 140.741 115.791 140.683C115.824 140.625 115.791 140.574 115.727 140.574C115.667 140.561 115.61 140.534 115.56 140.496C115.511 140.459 115.471 140.411 115.442 140.356C115.408 140.298 115.361 140.249 115.304 140.212C115.247 140.176 115.182 140.155 115.115 140.149C114.875 140.149 114.766 139.56 114.743 138.065L114.732 137.093L115.268 137.037C115.746 136.995 116.38 136.679 116.38 136.481C116.38 136.439 116.456 136.406 116.534 136.406C116.741 136.406 116.992 136.001 117.134 135.434C117.195 135.196 117.282 134.965 117.394 134.747C117.599 134.363 117.658 133.917 117.559 133.493C117.472 133.351 117.492 133.193 117.612 132.959C117.722 132.727 117.779 132.473 117.779 132.216C117.779 131.959 117.722 131.705 117.612 131.473C117.469 131.224 117.4 130.94 117.412 130.654C117.412 130.391 117.372 130.13 117.292 129.88C117.213 129.592 117.173 129.295 117.172 128.997C117.15 128.385 117.183 128.22 117.359 128.047C117.468 127.938 117.51 127.847 117.459 127.847C117.259 127.847 117.14 127.422 117.076 126.495C116.967 124.956 116.976 124.795 117.261 124.531C117.49 124.324 117.49 124.313 117.294 124.171C117.175 124.068 117.091 123.93 117.054 123.777C117.043 123.663 117.002 123.553 116.934 123.461C116.752 123.143 116.669 122.778 116.694 122.413C116.739 122.402 116.739 122.173 116.694 121.933C116.643 121.579 116.637 121.219 116.674 120.863C116.716 120.405 116.694 120.254 116.596 120.254C116.498 120.254 116.476 120.123 116.521 119.785C116.563 119.485 116.543 119.271 116.454 119.196C116.354 119.096 116.367 119.042 116.487 118.967C116.607 118.892 116.618 118.825 116.521 118.667C116.482 118.612 116.46 118.546 116.458 118.479C116.456 118.411 116.474 118.344 116.51 118.287C116.563 118.175 116.563 118.111 116.51 118.111C116.356 118.111 116.281 117.544 116.401 117.39C116.476 117.29 116.476 117.247 116.378 117.247C116.303 117.247 116.269 117.161 116.303 117.04C116.337 116.919 116.325 116.822 116.281 116.822C116.181 116.822 116.074 116.375 115.996 115.699C115.971 115.339 115.92 114.982 115.845 114.629C115.704 114.207 115.637 113.764 115.645 113.319C115.701 113.277 115.656 113.101 115.581 112.936C115.534 112.856 115.504 112.768 115.493 112.676C115.481 112.584 115.489 112.491 115.514 112.402C115.614 112.128 115.536 111.475 115.405 111.475C115.352 111.475 115.305 111.344 115.305 111.182C115.296 110.956 115.263 110.732 115.205 110.514C115.129 110.125 115.077 109.731 115.051 109.335C114.998 108.435 114.922 108.159 114.702 108.159C114.615 108.159 114.518 108.017 114.484 107.841C114.397 107.416 114.07 107.405 113.973 107.81C113.928 107.974 113.854 108.129 113.755 108.268C113.601 108.441 113.526 109.008 113.448 110.514C113.42 111.014 113.366 111.513 113.286 112.008C113.208 112.382 113.168 112.763 113.166 113.145C113.158 113.558 113.121 113.969 113.057 114.377C112.971 114.962 112.931 115.553 112.937 116.145C112.966 116.565 112.936 116.987 112.848 117.399C112.749 117.813 112.698 118.238 112.697 118.664C112.652 119.32 112.588 120.301 112.555 120.826C112.522 121.351 112.499 122.091 112.51 122.452C112.537 122.77 112.496 123.09 112.39 123.391C112.268 123.745 112.246 124.125 112.326 124.491C112.39 125.191 112.379 125.343 112.206 125.583C111.977 126.115 111.911 126.704 112.019 127.273C112.04 127.328 112.048 127.387 112.043 127.446C112.037 127.504 112.019 127.561 111.988 127.611C111.906 127.854 111.862 128.108 111.857 128.365C111.846 128.658 111.79 128.899 111.748 128.899C111.706 128.899 111.67 128.966 111.67 129.053C111.619 129.21 111.53 129.352 111.41 129.466C111.256 129.642 111.2 129.766 111.279 129.784C111.407 130.245 111.403 130.733 111.268 131.192C111.195 131.345 111.154 131.511 111.148 131.681C111.121 131.902 111.066 132.119 110.983 132.326C110.897 132.532 110.867 132.758 110.896 132.98C110.918 133.198 110.896 133.407 110.821 133.438C110.678 133.538 110.667 133.93 110.821 133.93C110.896 133.93 110.896 133.997 110.821 134.137C110.741 134.266 110.7 134.416 110.706 134.568C110.712 134.72 110.762 134.866 110.852 134.989C110.907 135.059 110.949 135.139 110.973 135.225C110.997 135.311 111.004 135.4 110.994 135.489C110.979 135.575 110.983 135.664 111.005 135.749C111.028 135.834 111.069 135.913 111.125 135.98C111.181 136.048 111.251 136.102 111.33 136.14C111.41 136.178 111.496 136.198 111.584 136.199C111.749 136.207 111.835 136.274 111.813 136.35C111.749 136.504 112.098 136.71 112.436 136.71C112.657 136.727 112.876 136.764 113.09 136.819L113.495 136.928L113.45 138.128C113.506 138.666 113.412 139.209 113.179 139.698C112.916 140.148 112.894 140.377 113.112 140.561C113.363 140.768 113.312 140.961 113.003 140.899C112.94 140.896 112.88 140.873 112.831 140.834C112.782 140.795 112.746 140.741 112.729 140.681C112.729 140.539 112.718 140.527 112.642 140.647C112.606 140.694 112.555 140.727 112.498 140.741C112.44 140.755 112.38 140.75 112.326 140.725C112.161 140.669 112.075 140.703 112.026 140.812C111.951 140.996 111.666 141.052 111.666 140.876C111.664 140.848 111.652 140.821 111.632 140.801C111.612 140.781 111.585 140.769 111.557 140.767C111.493 140.767 111.448 140.867 111.448 140.985C111.45 141.015 111.446 141.045 111.436 141.073C111.426 141.101 111.41 141.126 111.39 141.148C111.369 141.17 111.345 141.187 111.317 141.198C111.289 141.209 111.26 141.215 111.23 141.214C111.121 141.225 110.959 141.236 110.892 141.248C110.205 141.969 109.45 142.438 110.914 142.34C112.119 142.181 113.337 142.152 114.548 142.253C116.707 142.242 129.312 142.317 131.34 142.043L131.372 142.05Z" fill="#1B023F"/> -<path d="M1262.44 128.996V128.822C1262.41 128.516 1262.32 128.217 1262.19 127.94C1262.06 127.672 1261.89 127.428 1261.68 127.219C1261.47 127.011 1261.22 126.842 1260.95 126.719C1260.68 126.593 1260.38 126.519 1260.08 126.501V126.141H1259.77V125.711H1260.05V125.251H1259.83L1259.88 125.125L1259.92 125.015L1259.95 124.934L1259.96 124.897C1259.97 124.862 1259.98 124.826 1259.98 124.79C1259.99 124.732 1260 124.656 1260.01 124.58C1260.02 124.504 1260.03 124.428 1260.04 124.368C1260.04 124.308 1260.05 124.268 1260.05 124.252C1260.05 124.236 1260.04 124.158 1260.02 124.041C1260.01 123.924 1259.99 123.772 1259.96 123.621L1259.91 123.213L1259.89 123.028L1259.81 122.686L1259.65 121.941L1259.49 121.189L1259.42 120.83C1259.4 120.785 1259.39 120.741 1259.37 120.698C1259.34 120.627 1259.31 120.535 1259.27 120.444L1259.18 120.197L1259.13 120.086L1259.03 119.05L1259.19 119.188L1259.2 119.21L1259.21 119.266L1259.23 119.322C1259.23 119.335 1259.24 119.348 1259.24 119.361L1259.25 119.411L1259.27 119.491L1259.29 119.566L1259.3 119.599V119.776C1259.3 119.791 1259.31 119.807 1259.31 119.821C1259.32 119.842 1259.33 119.862 1259.34 119.882L1259.36 119.936L1259.38 119.959L1259.41 119.967L1259.5 119.984C1259.53 119.99 1259.57 119.996 1259.6 120C1259.64 120.003 1259.67 120.003 1259.7 120C1259.72 119.999 1259.74 119.996 1259.76 119.991C1259.76 119.991 1259.76 119.99 1259.77 119.987C1259.77 119.985 1259.77 119.982 1259.77 119.978V119.967H1259.77L1259.79 119.921L1259.83 119.811C1259.85 119.768 1259.87 119.721 1259.89 119.677C1259.91 119.633 1259.93 119.591 1259.94 119.558C1259.95 119.533 1259.97 119.511 1259.99 119.496C1260.01 119.487 1260.03 119.483 1260.04 119.486C1260.06 119.488 1260.07 119.493 1260.08 119.501L1260.09 119.512V119.484C1260.1 119.462 1260.1 119.44 1260.11 119.419C1260.11 119.392 1260.12 119.366 1260.14 119.342C1260.15 119.318 1260.17 119.297 1260.19 119.28C1260.21 119.264 1260.23 119.246 1260.25 119.227C1260.27 119.208 1260.29 119.187 1260.3 119.165C1260.32 119.145 1260.33 119.125 1260.35 119.103C1260.36 119.086 1260.37 119.069 1260.37 119.05C1260.38 119.04 1260.38 119.03 1260.37 119.02C1260.37 119.01 1260.37 119.001 1260.36 118.993C1260.35 118.968 1260.33 118.945 1260.31 118.923C1260.29 118.899 1260.27 118.875 1260.26 118.855C1260.24 118.841 1260.24 118.824 1260.23 118.806C1260.23 118.793 1260.24 118.781 1260.25 118.772C1260.26 118.761 1260.27 118.751 1260.28 118.742L1260.31 118.721V118.714L1260.65 118.507V118.407C1260.65 118.395 1260.65 118.384 1260.65 118.372C1260.65 118.352 1260.65 118.331 1260.65 118.311V118.004C1260.65 117.983 1260.65 117.963 1260.64 117.942C1260.64 117.917 1260.64 117.892 1260.63 117.867C1260.63 117.842 1260.62 117.815 1260.61 117.792C1260.61 117.769 1260.6 117.747 1260.59 117.729C1260.59 117.71 1260.59 117.69 1260.58 117.67C1260.58 117.647 1260.58 117.623 1260.58 117.6V117.436C1260.58 117.414 1260.58 117.392 1260.58 117.37C1260.58 117.356 1260.58 117.342 1260.57 117.329L1260.54 117.289C1260.54 117.273 1260.53 117.257 1260.53 117.24C1260.53 117.216 1260.52 117.192 1260.52 117.169C1260.51 117.14 1260.49 117.109 1260.48 117.078L1260.44 116.984C1260.43 116.954 1260.42 116.925 1260.41 116.9C1260.4 116.875 1260.39 116.848 1260.37 116.821C1260.36 116.794 1260.35 116.765 1260.33 116.738L1260.29 116.659L1260.25 116.589L1260.19 116.464L1260.09 116.264L1260 116.077L1259.95 115.994L1259.62 115.12C1259.79 115.373 1259.96 115.614 1260.12 115.832C1260.28 116.037 1260.45 116.231 1260.63 116.411C1260.78 116.563 1260.95 116.691 1261.14 116.792C1261.3 116.878 1261.48 116.92 1261.67 116.912C1262.08 116.812 1262.24 116.392 1262.23 115.804C1262.19 115.087 1262.02 114.382 1261.75 113.717C1261.47 112.983 1261.1 112.287 1260.65 111.647C1260.36 111.154 1259.91 110.779 1259.37 110.589C1259.22 110.574 1259.06 110.613 1258.92 110.7C1258.81 110.781 1258.72 110.891 1258.66 111.02C1258.6 111.151 1258.56 111.291 1258.55 111.434C1258.53 111.564 1258.54 111.696 1258.56 111.825L1258.52 111.851L1258.44 111.91C1258.41 111.932 1258.39 111.955 1258.36 111.975C1258.35 111.987 1258.33 112.001 1258.32 112.018C1258.32 112.032 1258.33 112.045 1258.33 112.057C1258.34 112.076 1258.35 112.095 1258.37 112.113L1258.4 112.164L1258.42 112.189L1258.2 112.158L1258.19 112.148L1258.17 112.124L1258.14 112.094C1258.13 112.086 1258.12 112.077 1258.11 112.067C1258.11 112.056 1258.1 112.046 1258.09 112.039C1258.07 112.029 1258.05 112.019 1258.04 112.009L1257.99 111.989L1257.97 111.979L1257.94 111.953L1257.88 111.889C1257.85 111.867 1257.83 111.844 1257.81 111.825C1257.8 111.814 1257.78 111.802 1257.77 111.789C1257.77 111.778 1257.76 111.766 1257.76 111.754C1257.76 111.739 1257.76 111.721 1257.76 111.703C1257.76 111.685 1257.76 111.667 1257.76 111.649V111.314C1257.76 111.3 1257.76 111.285 1257.76 111.271C1257.76 111.26 1257.77 111.25 1257.77 111.24C1257.78 111.231 1257.78 111.223 1257.79 111.216C1257.8 111.206 1257.81 111.197 1257.82 111.189L1257.87 111.156L1257.93 111.119C1257.94 111.107 1257.96 111.093 1257.98 111.079C1257.99 111.07 1258 111.059 1258 111.047C1258.01 111.044 1258.01 111.04 1258.01 111.037C1258.01 111.034 1258.01 111.03 1258 111.027V111.012C1258 111.008 1258 111.005 1258 111C1258 110.996 1258 110.993 1258 110.989C1258.01 110.981 1258.01 110.971 1258.01 110.962C1258.01 110.948 1258.01 110.934 1258.02 110.921C1258.02 110.906 1258.02 110.89 1258.02 110.875C1258.03 110.86 1258.03 110.845 1258.04 110.831C1258.04 110.818 1258.05 110.804 1258.05 110.789C1258.05 110.777 1258.05 110.765 1258.05 110.753V110.674C1258.05 110.658 1258.05 110.643 1258.05 110.627C1258.05 110.61 1258.05 110.593 1258.05 110.578C1258.04 110.562 1258.04 110.546 1258.04 110.529C1258.04 110.513 1258.04 110.498 1258.04 110.482V110.426C1258.04 110.404 1258.04 110.382 1258.03 110.36C1258.03 110.338 1258.03 110.315 1258.02 110.295L1258.01 110.248C1258.01 110.234 1258.01 110.22 1258 110.207C1257.99 110.192 1257.99 110.178 1257.98 110.164C1257.97 110.15 1257.96 110.134 1257.95 110.119C1257.95 110.105 1257.94 110.09 1257.94 110.074C1257.94 110.059 1257.93 110.045 1257.93 110.031L1257.91 109.989L1257.9 109.953L1257.88 109.915C1257.87 109.899 1257.87 109.884 1257.86 109.87L1257.82 109.816C1257.81 109.797 1257.8 109.777 1257.79 109.756C1257.78 109.736 1257.77 109.715 1257.76 109.693C1257.76 109.676 1257.75 109.658 1257.75 109.64C1257.74 109.628 1257.74 109.615 1257.74 109.603C1257.74 109.593 1257.74 109.584 1257.74 109.574V109.547C1257.74 109.529 1257.73 109.512 1257.72 109.496C1257.71 109.473 1257.7 109.446 1257.69 109.417L1257.65 109.334L1257.61 109.27C1257.6 109.254 1257.6 109.248 1257.59 109.248C1257.58 109.248 1257.58 109.249 1257.57 109.251C1257.57 109.253 1257.57 109.256 1257.56 109.259C1257.56 109.266 1257.55 109.274 1257.55 109.282L1257.54 109.294L1257.31 109.425L1257.3 109.325L1257.3 109.281C1257.31 109.254 1257.32 109.218 1257.32 109.181C1257.33 109.144 1257.33 109.102 1257.34 109.068C1257.34 109.042 1257.35 109.016 1257.35 108.989C1257.35 108.983 1257.35 108.978 1257.35 108.973C1257.34 108.968 1257.34 108.965 1257.33 108.964C1257.32 108.963 1257.31 108.965 1257.29 108.97C1257.28 108.975 1257.27 108.98 1257.25 108.987L1257.24 108.997L1257.11 108.975L1257.12 108.959C1257.13 108.944 1257.13 108.93 1257.14 108.917C1257.15 108.9 1257.16 108.88 1257.16 108.858C1257.17 108.835 1257.17 108.812 1257.18 108.789C1257.18 108.775 1257.18 108.76 1257.18 108.746V108.735L1257.18 108.742V108.75L1257.21 108.575L1257.38 108.583H1257.39L1257.4 108.572L1257.43 108.555L1257.47 108.529C1257.48 108.522 1257.49 108.512 1257.5 108.5C1257.5 108.487 1257.51 108.474 1257.51 108.46C1257.51 108.442 1257.51 108.425 1257.52 108.408C1257.52 108.389 1257.51 108.368 1257.52 108.345C1257.53 108.327 1257.53 108.308 1257.53 108.289C1257.53 108.274 1257.53 108.26 1257.53 108.245V108.103C1257.53 108.07 1257.53 108.036 1257.54 108.003C1257.54 107.969 1257.54 107.924 1257.54 107.886C1257.54 107.853 1257.54 107.819 1257.54 107.786C1257.55 107.756 1257.55 107.725 1257.54 107.695C1257.54 107.672 1257.53 107.648 1257.52 107.626C1257.52 107.611 1257.51 107.596 1257.51 107.58L1257.5 107.562H1257.36L1257.05 107.569L1256.93 107.489L1256.73 107.389L1256.53 107.405L1256.32 107.55L1256.12 107.957L1255.99 108.472L1255.99 109.248L1255.79 109.494L1255.65 109.755L1255.8 109.939V110.723L1255.94 110.953L1256.15 111.091C1256.15 111.104 1256.15 111.117 1256.14 111.13C1256.14 111.154 1256.13 111.187 1256.13 111.223C1256.12 111.259 1256.11 111.296 1256.1 111.33C1256.1 111.359 1256.09 111.387 1256.07 111.413C1256.06 111.436 1256.05 111.46 1256.05 111.485C1256.04 111.514 1256.04 111.543 1256.03 111.573C1256.03 111.601 1256.03 111.63 1256.03 111.658C1256.03 111.679 1256.03 111.7 1256.03 111.721V112.044C1256.03 112.07 1256.02 112.096 1256.01 112.121C1256 112.148 1255.99 112.175 1255.98 112.201C1255.96 112.226 1255.95 112.248 1255.94 112.264L1255.92 112.289L1255.76 112.458L1255.69 112.5L1255.53 112.6L1255.35 112.708C1255.3 112.741 1255.25 112.769 1255.23 112.784C1255.21 112.799 1255.17 112.826 1255.13 112.858L1255.01 112.958L1254.91 113.049L1254.87 113.088L1254.69 113.825L1254.63 114.163L1254.58 114.378L1254.3 114.947L1253.72 115.44L1253.2 116.132L1252.43 116.887L1252.16 116.948H1251.73L1251.56 117.038L1249.86 113.63L1249.94 113.499V113.426C1249.94 113.409 1249.94 113.393 1249.94 113.376C1249.94 113.362 1249.94 113.353 1249.93 113.353H1249.8L1249.78 113.359C1249.77 113.361 1249.76 113.361 1249.75 113.359C1249.75 113.357 1249.74 113.355 1249.74 113.352C1249.74 113.349 1249.74 113.345 1249.73 113.341C1249.73 113.324 1249.73 113.307 1249.72 113.29C1249.71 113.267 1249.71 113.241 1249.7 113.216L1249.68 113.149L1249.68 113.12L1249.69 112.942L1248.5 111.186L1249.17 113.232L1249.32 113.271L1249.4 113.363L1249.44 113.44L1249.41 113.556L1249.4 113.649L1249.5 113.711L1249.58 113.718H1249.6L1251.38 117.286L1251.19 117.34L1251.17 117.509L1251.22 117.724L1251.37 117.939L1251.55 118.016L1251.66 118.293H1251.82L1251.87 118.273L1253.69 121.942V122.007L1253.73 122.073C1253.75 122.113 1253.78 122.166 1253.82 122.22C1253.85 122.274 1253.88 122.331 1253.92 122.376C1253.94 122.41 1253.96 122.441 1253.99 122.467C1254.01 122.48 1254.03 122.5 1254.04 122.523C1254.05 122.55 1254.05 122.578 1254.05 122.607C1254.06 122.636 1254.06 122.665 1254.05 122.694V122.829C1254.05 122.859 1254.06 122.893 1254.06 122.929C1254.07 122.965 1254.07 122.998 1254.07 123.029C1254.08 123.052 1254.08 123.076 1254.07 123.099C1254.07 123.145 1254.08 123.191 1254.08 123.237C1254.09 123.307 1254.1 123.396 1254.1 123.484C1254.11 123.572 1254.12 123.661 1254.13 123.731C1254.13 123.801 1254.14 123.853 1254.14 123.868C1254.13 123.896 1254.12 123.923 1254.1 123.947C1254.08 123.982 1254.06 124.022 1254.03 124.061C1254 124.1 1253.98 124.136 1253.96 124.161L1253.92 124.205L1254.07 124.481L1254.56 124.639V125.278H1254.08V125.739H1254.38V126.17H1254.07V126.531C1253.76 126.553 1253.46 126.63 1253.19 126.758C1252.92 126.883 1252.67 127.055 1252.46 127.265C1252.03 127.698 1251.76 128.269 1251.7 128.879V129.521L1251.7 129.552L1251.71 129.583L1251.72 129.613L1251.72 129.644L1251.73 129.677L1251.73 129.709L1251.74 129.741L1251.75 129.774V129.806C1251.81 130.046 1251.91 130.276 1252.04 130.488C1252.17 130.699 1252.33 130.891 1252.51 131.059C1252.69 131.227 1252.9 131.368 1253.12 131.48C1253.34 131.592 1253.57 131.67 1253.82 131.712H1254.69L1255.74 131.705L1257.8 131.697L1259.26 131.678L1259.88 131.686L1260.15 131.671H1259.66L1254.24 131.713L1259.94 131.682C1260.5 131.671 1261.04 131.474 1261.47 131.121C1261.9 130.771 1262.21 130.293 1262.35 129.756V129.729L1262.37 129.686L1262.38 129.645L1262.39 129.604L1262.39 129.562V129.018C1262.43 129.01 1262.44 129.003 1262.44 128.996ZM1254.02 119.943L1254 120.043L1253.97 120.277C1253.95 120.363 1253.94 120.452 1253.93 120.523C1253.91 120.594 1253.9 120.646 1253.9 120.662C1253.9 120.678 1253.89 120.708 1253.87 120.746L1253.83 120.87L1253.78 120.982L1253.76 121.031L1253.74 121.381L1252.12 118.13L1252.17 118.081L1252.23 118.031L1252.29 117.984L1252.33 117.945C1252.36 117.925 1252.38 117.904 1252.4 117.881L1252.48 117.799L1252.55 117.729L1252.57 117.699L1252.87 117.513L1253.94 116.836L1253.9 116.899L1253.81 117.023C1253.78 117.069 1253.75 117.117 1253.72 117.157C1253.71 117.187 1253.69 117.218 1253.67 117.25C1253.66 117.278 1253.66 117.307 1253.66 117.337C1253.66 117.374 1253.65 117.419 1253.65 117.465C1253.65 117.511 1253.65 117.558 1253.66 117.604C1253.66 117.645 1253.66 117.686 1253.67 117.726C1253.68 117.761 1253.69 117.794 1253.71 117.826C1253.73 117.858 1253.75 117.89 1253.77 117.92C1253.78 117.948 1253.8 117.971 1253.82 117.988L1253.84 118.014L1254.02 118.244L1254.01 118.286C1254 118.306 1253.99 118.334 1253.98 118.365C1253.97 118.396 1253.96 118.429 1253.95 118.465C1253.94 118.493 1253.94 118.521 1253.94 118.55C1253.94 118.586 1253.94 118.623 1253.95 118.658C1253.96 118.704 1253.97 118.758 1253.99 118.806C1254 118.854 1254.01 118.906 1254.02 118.937L1254.04 118.994L1254.1 119.348L1254.02 119.943ZM1262.93 146.981V151.338L1263.91 151.328V146.972L1262.93 146.981ZM1251.19 151.459L1263.91 151.328V146.972L1262.93 146.981V146.425L1261.7 146.436V145.742H1262.04V144.61L1261.11 144.618V142.798L1259.84 142.808V132.386L1254.3 132.418V142.853L1253.02 142.863V144.686L1252.08 144.694V145.825H1252.42V146.525L1251.19 146.536V147.806L1251.19 151.459ZM1250.21 147.099V151.47L1251.19 151.46V147.086L1250.21 147.099Z" fill="#1B023F"/> -<path d="M648.834 140.391L732.127 138.115V135.55L648.834 140.391Z" fill="#FAFBFC"/> -<path d="M734.129 131.52L734.328 140.22L788.039 141.9L734.129 131.52Z" fill="#1B023F"/> -<path d="M761.732 96.608L761.726 94.946L734.498 79.908L734.883 83.837L761.732 96.608ZM788.182 110.692L788.272 109.61L780.398 105.21L780.532 106.71L788.182 110.692ZM734.702 78.331L740.115 81.401L739.784 79.341L734.995 74.955L734.702 78.331ZM656.958 101.931L733.632 87.323L732.88 79.873L656.861 96.928L657.016 99.635L656.462 99.982L656.695 100.544L656.958 101.931ZM733.258 76.519L734.264 73.763L726.17 73.482L725.932 75.576L721.756 75.63L721.782 77.462L692.141 76.028L691.706 81.913L689.493 82.203L689.724 79.982L685.694 81.082L685.724 83.037L682.856 83.337L683.097 82.158L673.632 85.943L663.293 91.958L658.748 93.192L661.46 91.592L661.18 90.552L659.116 91.752L658.967 90.706L654.432 92.598L654.874 95.855L655.792 95.971L733.402 77.696L733.258 76.519ZM735.377 87.312L789.171 114.143L788.818 112.277L762.8 99.032L735.232 85.239L735.377 87.312ZM655.514 136.882L708.319 131.158L656.156 135.235L655.514 136.882ZM790.588 141.094L734.138 131.094L734.384 136.15L790.95 141.782L790.588 141.094ZM790.488 142.765L734.559 137.452L734.659 140.497L790.488 142.765ZM649.043 142.982L704.996 140.432L732.324 140.674L732.182 129.693L705.332 133.281L651.47 137.307L651.364 138.274L701.504 135.155L667.153 138.399L649.453 139.499L649.043 142.982ZM668.832 101.821L672.063 103.553V102.802L668.915 101.118L663.287 102.168L663.229 102.933L668.832 101.821ZM674.95 103.639L673.159 133.006L673.581 132.977L675.299 103.177C675.299 103.155 675.306 103.133 675.311 103.112C675.322 103.065 675.338 103.019 675.36 102.975C675.382 102.925 675.416 102.882 675.46 102.849C675.487 102.832 675.517 102.821 675.548 102.816C675.579 102.811 675.611 102.812 675.642 102.82C675.706 102.831 675.765 102.863 675.809 102.911C675.843 102.952 675.866 103 675.876 103.052C675.885 103.094 675.888 103.138 675.885 103.181C675.885 103.2 675.885 103.218 675.879 103.237L674.327 132.922L674.816 132.887L676.258 102.887C676.26 102.865 676.264 102.844 676.269 102.823C676.28 102.776 676.296 102.73 676.317 102.687C676.339 102.638 676.373 102.595 676.417 102.563C676.444 102.546 676.474 102.535 676.506 102.531C676.537 102.526 676.569 102.528 676.6 102.536C676.664 102.546 676.723 102.577 676.766 102.625C676.8 102.665 676.822 102.713 676.832 102.764C676.84 102.806 676.843 102.849 676.84 102.892C676.839 102.911 676.837 102.93 676.833 102.948L675.582 132.829L676.059 132.796L677.168 102.881C677.17 102.859 677.174 102.837 677.179 102.816C677.188 102.769 677.202 102.724 677.222 102.681C677.244 102.632 677.279 102.589 677.322 102.557C677.349 102.54 677.379 102.529 677.411 102.524C677.443 102.52 677.475 102.522 677.506 102.53C677.57 102.541 677.628 102.573 677.672 102.621C677.706 102.661 677.728 102.709 677.738 102.76C677.746 102.802 677.749 102.845 677.746 102.887C677.745 102.906 677.743 102.925 677.739 102.943L676.82 132.743L677.205 132.717L678.105 103.156C678.107 103.134 678.111 103.113 678.116 103.092C678.126 103.045 678.142 102.999 678.163 102.956C678.185 102.907 678.219 102.864 678.263 102.832C678.29 102.815 678.321 102.804 678.353 102.799C678.384 102.794 678.417 102.795 678.448 102.803C678.512 102.815 678.571 102.848 678.615 102.896C678.649 102.936 678.672 102.984 678.681 103.036C678.689 103.078 678.692 103.121 678.689 103.164C678.688 103.183 678.686 103.202 678.682 103.22L677.964 132.663L678.328 132.637L678.967 102.606C678.814 102.54 678.657 102.482 678.497 102.432C678.11 102.308 677.713 102.22 677.31 102.169C676.789 102.1 676.259 102.113 675.742 102.207C675.153 102.316 674.598 102.566 674.126 102.935C674.026 104.023 673.866 106.176 673.668 108.862C673.47 111.548 673.239 114.762 673.01 117.987C672.781 121.212 672.555 124.429 672.366 127.124C672.177 129.819 672.027 131.985 671.95 133.097L672.378 133.067L674.344 103.581C674.347 103.559 674.351 103.538 674.356 103.517C674.367 103.47 674.383 103.424 674.404 103.38C674.428 103.33 674.464 103.287 674.51 103.255C674.537 103.238 674.567 103.227 674.599 103.222C674.63 103.217 674.662 103.218 674.693 103.226C674.758 103.237 674.817 103.27 674.861 103.318C674.895 103.358 674.918 103.406 674.928 103.458C674.937 103.5 674.94 103.543 674.937 103.586C674.937 103.604 674.937 103.622 674.93 103.64L674.95 103.639ZM672.205 101.295L677.982 100.145L681.332 101.935L681.314 101.158L678.045 99.418L672.245 100.505L672.205 101.295ZM685.05 101.839L683.521 132.255L683.957 132.225L685.411 101.362C685.413 101.339 685.417 101.317 685.422 101.295C685.432 101.246 685.448 101.198 685.47 101.153C685.494 101.101 685.531 101.057 685.578 101.024C685.606 101.006 685.638 100.995 685.67 100.989C685.703 100.984 685.737 100.986 685.769 100.994C685.835 101.005 685.896 101.038 685.941 101.088C685.976 101.129 686 101.179 686.011 101.232C686.02 101.275 686.023 101.32 686.021 101.364C686.021 101.383 686.021 101.403 686.015 101.422L684.738 132.166L685.238 132.132L686.397 101.068C686.399 101.046 686.403 101.024 686.408 101.002C686.419 100.953 686.435 100.906 686.457 100.861C686.481 100.809 686.519 100.764 686.566 100.732C686.623 100.697 686.693 100.686 686.758 100.702C686.825 100.715 686.886 100.75 686.931 100.802C686.966 100.844 686.99 100.894 687.001 100.947C687.01 100.99 687.014 101.035 687.012 101.079C687.012 101.098 687.012 101.118 687.006 101.137L686.032 132.074L686.532 132.034L687.347 101.062C687.349 101.039 687.352 101.017 687.357 100.995C687.367 100.946 687.383 100.898 687.404 100.853C687.427 100.801 687.464 100.757 687.51 100.724C687.538 100.707 687.569 100.695 687.602 100.69C687.634 100.685 687.667 100.687 687.699 100.695C687.767 100.708 687.829 100.743 687.874 100.795C687.91 100.836 687.934 100.886 687.944 100.94C687.953 100.983 687.956 101.028 687.953 101.072C687.952 101.092 687.95 101.111 687.946 101.13L687.313 131.986L687.713 131.957L688.319 101.344C688.321 101.322 688.325 101.3 688.33 101.278C688.34 101.229 688.356 101.182 688.378 101.137C688.402 101.085 688.439 101.041 688.485 101.008C688.513 100.991 688.544 100.979 688.576 100.974C688.609 100.969 688.642 100.97 688.674 100.978C688.74 100.989 688.801 101.023 688.846 101.073C688.881 101.115 688.905 101.165 688.916 101.218C688.925 101.262 688.928 101.306 688.926 101.351C688.925 101.37 688.923 101.39 688.92 101.409L688.501 131.901L688.875 131.873L689.209 100.773C689.05 100.705 688.887 100.645 688.722 100.593C688.322 100.465 687.912 100.374 687.495 100.322C686.957 100.251 686.411 100.264 685.877 100.362C685.271 100.474 684.702 100.733 684.218 101.115C684.132 102.244 683.987 104.486 683.81 107.286C683.633 110.086 683.432 113.426 683.232 116.771C683.032 120.116 682.832 123.456 682.667 126.237C682.502 129.018 682.373 131.237 682.308 132.347L682.746 132.317L684.446 101.786C684.448 101.763 684.452 101.741 684.457 101.719C684.468 101.67 684.484 101.622 684.506 101.577C684.53 101.525 684.568 101.48 684.615 101.447C684.643 101.429 684.674 101.417 684.707 101.412C684.74 101.407 684.774 101.408 684.806 101.416C684.873 101.429 684.933 101.464 684.977 101.516C685.012 101.558 685.036 101.608 685.046 101.661C685.055 101.704 685.058 101.749 685.055 101.793C685.054 101.81 685.052 101.827 685.049 101.844L685.05 101.839ZM710.724 94.031L714.459 95.996L714.41 95.139L710.778 93.23L704.467 94.424L704.442 95.294L710.724 94.031ZM682.191 99.418L688.135 98.228L691.62 100.081L691.592 99.281L688.202 97.481L682.232 98.597L682.191 99.418ZM695.709 99.694L694.432 131.462L694.883 131.433L696.076 99.198C696.078 99.1751 696.082 99.1524 696.087 99.13C696.096 99.0787 696.111 99.0287 696.132 98.981C696.156 98.9278 696.193 98.8819 696.241 98.848C696.27 98.829 696.303 98.8163 696.338 98.8106C696.372 98.8049 696.407 98.8064 696.441 98.815C696.51 98.8279 696.572 98.863 696.619 98.915C696.655 98.958 696.68 99.0092 696.692 99.064C696.702 99.1086 696.706 99.1543 696.704 99.2C696.704 99.22 696.704 99.239 696.698 99.259L695.698 131.371L696.216 131.333L697.104 98.897C697.106 98.8741 697.11 98.8514 697.115 98.829C697.125 98.7786 697.141 98.7296 697.163 98.683C697.187 98.6294 697.224 98.583 697.272 98.549C697.3 98.5307 697.332 98.5183 697.365 98.5126C697.398 98.507 697.432 98.5081 697.465 98.516C697.535 98.5289 697.599 98.564 697.647 98.616C697.684 98.6582 697.71 98.7092 697.722 98.764C697.732 98.8083 697.736 98.8537 697.734 98.899C697.733 98.9188 697.731 98.9385 697.728 98.958L697.028 131.276L697.54 131.239L698.071 98.889C698.073 98.8662 698.077 98.8435 698.082 98.821C698.092 98.7706 698.108 98.7216 698.13 98.675C698.154 98.6213 698.192 98.5753 698.24 98.542C698.269 98.5234 698.302 98.5111 698.337 98.506C698.371 98.5008 698.406 98.5029 698.44 98.512C698.51 98.5238 698.573 98.5591 698.62 98.612C698.657 98.6551 698.682 98.7066 698.694 98.762C698.704 98.807 698.708 98.8531 698.706 98.899C698.706 98.919 698.704 98.939 698.7 98.959L698.355 131.181L698.772 131.149L699.086 99.179C699.088 99.1558 699.091 99.1328 699.096 99.11C699.106 99.0597 699.122 99.0106 699.143 98.964C699.167 98.9108 699.204 98.8649 699.252 98.831C699.282 98.8127 699.314 98.8006 699.349 98.7954C699.383 98.7903 699.419 98.7922 699.452 98.801C699.521 98.8139 699.583 98.849 699.63 98.901C699.666 98.9441 699.691 98.9952 699.703 99.05C699.713 99.0946 699.717 99.1404 699.715 99.186C699.715 99.206 699.713 99.226 699.709 99.246L699.584 131.09L699.976 131.065L700.002 98.593C699.839 98.522 699.672 98.46 699.502 98.407C699.089 98.2743 698.665 98.1799 698.235 98.125C697.681 98.0509 697.118 98.0641 696.568 98.164C695.946 98.2789 695.362 98.5451 694.868 98.939C694.787 100.139 694.653 102.569 694.493 105.583C694.333 108.597 694.15 112.199 693.972 115.759C693.794 119.319 693.619 122.833 693.48 125.676C693.341 128.519 693.234 130.688 693.192 131.557L693.646 131.524L695.104 99.632C695.106 99.6088 695.11 99.5857 695.115 99.563C695.125 99.5126 695.141 99.4636 695.163 99.417C695.187 99.3638 695.224 99.3179 695.272 99.284C695.301 99.2661 695.333 99.2543 695.366 99.2491C695.4 99.244 695.434 99.2457 695.467 99.254C695.536 99.2665 695.599 99.3017 695.646 99.354C695.682 99.3968 695.707 99.448 695.719 99.503C695.729 99.5479 695.733 99.594 695.731 99.64C695.727 99.6586 695.721 99.677 695.715 99.695L695.709 99.694ZM692.743 97.194L698.855 95.966L702.465 97.876L702.426 97.046L698.913 95.191L692.777 96.35L692.743 97.194ZM715.843 93.172L722.297 91.872L726.155 93.897L726.101 93.017L722.345 91.049L715.865 92.275L715.843 93.172ZM666.398 105.192L664.498 133.637L664.879 133.605L666.732 104.743C666.732 104.722 666.738 104.701 666.743 104.681C666.752 104.635 666.767 104.591 666.787 104.549C666.809 104.501 666.844 104.459 666.887 104.429C666.911 104.412 666.939 104.401 666.968 104.397C666.997 104.392 667.027 104.394 667.055 104.402C667.114 104.413 667.168 104.445 667.206 104.491C667.237 104.53 667.257 104.577 667.265 104.626C667.272 104.667 667.274 104.709 667.271 104.75C667.27 104.768 667.267 104.786 667.264 104.804L665.572 133.56L666.015 133.527L667.606 104.469C667.606 104.448 667.612 104.427 667.617 104.407C667.627 104.362 667.642 104.318 667.662 104.276C667.684 104.228 667.719 104.186 667.762 104.156C667.786 104.14 667.814 104.129 667.843 104.125C667.871 104.12 667.901 104.121 667.929 104.129C667.988 104.14 668.041 104.172 668.08 104.218C668.111 104.257 668.132 104.303 668.14 104.352C668.148 104.393 668.15 104.434 668.148 104.475C668.147 104.493 668.145 104.511 668.142 104.529L666.711 133.476L667.147 133.443L668.432 104.466C668.435 104.445 668.438 104.424 668.443 104.404C668.453 104.358 668.467 104.314 668.487 104.272C668.509 104.224 668.544 104.182 668.587 104.151C668.611 104.135 668.638 104.124 668.667 104.119C668.695 104.114 668.724 104.116 668.752 104.123C668.812 104.134 668.866 104.165 668.905 104.212C668.936 104.252 668.957 104.298 668.965 104.348C668.972 104.389 668.975 104.431 668.972 104.472C668.971 104.49 668.969 104.509 668.966 104.527L667.841 133.393L668.196 133.366L669.296 104.73C669.298 104.709 669.302 104.688 669.306 104.667C669.315 104.621 669.33 104.577 669.349 104.534C669.371 104.486 669.406 104.444 669.449 104.413C669.473 104.397 669.501 104.386 669.53 104.382C669.558 104.377 669.588 104.379 669.616 104.387C669.675 104.398 669.728 104.428 669.767 104.474C669.798 104.513 669.819 104.559 669.827 104.608C669.834 104.649 669.837 104.69 669.834 104.731C669.833 104.749 669.831 104.767 669.828 104.785L668.897 133.32L669.231 133.294L670.094 104.194C669.956 104.13 669.814 104.073 669.669 104.025C669.32 103.905 668.96 103.82 668.594 103.77C668.12 103.703 667.639 103.714 667.169 103.805C666.627 103.912 666.12 104.152 665.695 104.505C665.595 105.561 665.428 107.654 665.222 110.264C665.016 112.874 664.775 116 664.536 119.125C664.297 122.25 664.061 125.372 663.864 127.976C663.667 130.58 663.512 132.665 663.433 133.715L663.826 133.684L665.88 105.134C665.883 105.113 665.886 105.092 665.891 105.072C665.901 105.026 665.915 104.982 665.935 104.94C665.957 104.892 665.992 104.85 666.035 104.82C666.059 104.804 666.087 104.793 666.116 104.789C666.145 104.784 666.174 104.785 666.202 104.793C666.261 104.804 666.315 104.836 666.353 104.882C666.383 104.922 666.403 104.968 666.411 105.017C666.418 105.058 666.42 105.099 666.417 105.14C666.412 105.158 666.405 105.175 666.398 105.192ZM709.583 97.112L709.171 130.392L709.702 130.355L709.94 97.042C709.942 97.0182 709.945 96.9945 709.95 96.971C709.96 96.9193 709.975 96.869 709.997 96.821C710.021 96.7662 710.059 96.7188 710.108 96.684C710.137 96.6654 710.17 96.6529 710.205 96.6474C710.239 96.6419 710.274 96.6435 710.308 96.652C710.379 96.6642 710.445 96.6993 710.494 96.752C710.532 96.7962 710.559 96.8491 710.572 96.906C710.583 96.9518 710.588 96.9989 710.587 97.046C710.588 97.0663 710.588 97.0867 710.587 97.107L710.532 130.292L710.964 130.261L710.98 97.34C710.982 97.3162 710.985 97.2925 710.99 97.269C711 97.217 711.016 97.1663 711.038 97.118C711.062 97.0627 711.1 97.0147 711.149 96.979C711.178 96.9599 711.211 96.9469 711.245 96.9409C711.28 96.9349 711.315 96.936 711.349 96.944C711.42 96.9559 711.485 96.9911 711.534 97.044C711.572 97.0884 711.598 97.1418 711.61 97.199C711.62 97.2453 711.624 97.2927 711.622 97.34C711.621 97.3608 711.619 97.3815 711.616 97.402L711.796 130.202L712.196 130.173L711.91 96.732C711.74 96.6591 711.567 96.5951 711.391 96.54C710.967 96.4041 710.532 96.307 710.091 96.25C709.521 96.1731 708.943 96.187 708.378 96.291C707.739 96.409 707.14 96.6839 706.634 97.091C706.563 98.327 706.447 100.814 706.312 103.907C706.177 107 706.022 110.696 705.872 114.354C705.722 118.012 705.572 121.628 705.459 124.564C705.346 127.5 705.259 129.753 705.218 130.683L705.686 130.645L706.879 97.803C706.881 97.7795 706.884 97.7561 706.889 97.733C706.899 97.6813 706.915 97.6309 706.937 97.583C706.961 97.5281 707 97.4811 707.049 97.447C707.079 97.4288 707.112 97.4166 707.146 97.4113C707.18 97.406 707.215 97.4076 707.249 97.416C707.32 97.428 707.386 97.4631 707.435 97.516C707.473 97.5597 707.499 97.6124 707.511 97.669C707.521 97.715 707.525 97.762 707.523 97.809C707.523 97.829 707.523 97.85 707.517 97.87L706.511 130.588L706.974 130.555L707.896 97.361C707.898 97.3372 707.901 97.3135 707.906 97.29C707.916 97.2383 707.931 97.1879 707.953 97.14C707.976 97.085 708.014 97.0375 708.063 97.003C708.092 96.9842 708.125 96.9718 708.16 96.9665C708.194 96.9612 708.229 96.963 708.263 96.972C708.334 96.9839 708.4 97.019 708.449 97.072C708.487 97.1156 708.513 97.1678 708.526 97.224C708.537 97.2698 708.541 97.317 708.539 97.364C708.539 97.3844 708.537 97.4048 708.534 97.425L707.802 130.494L708.335 130.453L708.935 97.046C708.937 97.0221 708.941 96.9984 708.946 96.975C708.956 96.9233 708.973 96.8729 708.995 96.825C709.019 96.7701 709.058 96.7227 709.107 96.688C709.137 96.6698 709.17 96.6577 709.204 96.6523C709.238 96.647 709.273 96.6486 709.307 96.657C709.378 96.6694 709.443 96.7045 709.492 96.757C709.53 96.8009 709.556 96.8535 709.569 96.91C709.58 96.9556 709.584 97.0023 709.583 97.049C709.584 97.0703 709.584 97.0913 709.583 97.112ZM732.053 93.1L732.213 128.721L732.452 128.703L732.773 128.763L732.432 93.022C732.433 92.9969 732.436 92.9718 732.44 92.947C732.449 92.8923 732.464 92.8389 732.486 92.788C732.51 92.7297 732.549 92.6792 732.6 92.642C732.631 92.6222 732.666 92.6088 732.702 92.6028C732.739 92.5968 732.776 92.5982 732.812 92.607C732.889 92.6208 732.959 92.659 733.012 92.716C733.053 92.7628 733.082 92.8187 733.097 92.879C733.109 92.9274 733.115 92.9772 733.114 93.027C733.114 93.049 733.114 93.07 733.114 93.092L733.672 128.928L734.124 129.012L733.544 93.339C733.546 93.3138 733.549 93.2888 733.554 93.264C733.563 93.209 733.58 93.1552 733.602 93.104C733.626 93.0457 733.666 92.9951 733.717 92.958C733.748 92.9382 733.782 92.9251 733.819 92.9194C733.855 92.9137 733.892 92.9156 733.927 92.925C734.003 92.9379 734.073 92.9751 734.127 93.031C734.168 93.0773 734.197 93.1329 734.212 93.193C734.224 93.2413 734.23 93.2911 734.229 93.341C734.229 93.363 734.229 93.384 734.229 93.406L735.029 129.18H735.275V129.228L735.736 129.312L736.376 96.66C736.378 96.6362 736.381 96.6124 736.386 96.589C736.395 96.5366 736.411 96.4855 736.433 96.437C736.456 96.3814 736.494 96.3333 736.543 96.298C736.572 96.2792 736.605 96.2665 736.64 96.2609C736.674 96.2552 736.709 96.2566 736.743 96.265C736.816 96.2771 736.883 96.3121 736.935 96.365C736.975 96.4093 737.003 96.463 737.017 96.521C737.029 96.5677 737.035 96.6158 737.034 96.664C737.034 96.6847 737.034 96.7057 737.034 96.727L736.57 129.466L737.03 129.552L737.403 96.212C737.404 96.1879 737.407 96.1638 737.411 96.14C737.419 96.0873 737.434 96.0359 737.455 95.987C737.477 95.9311 737.515 95.8828 737.564 95.848C737.594 95.8297 737.627 95.8176 737.661 95.8123C737.695 95.8069 737.73 95.8086 737.764 95.817C737.836 95.8281 737.903 95.8633 737.953 95.917C737.992 95.9616 738.019 96.0153 738.032 96.073C738.043 96.1202 738.048 96.1686 738.046 96.217C738.046 96.2381 738.044 96.2592 738.041 96.28L737.861 129.707L738.397 129.807L738.432 95.896C738.432 95.872 738.435 95.848 738.441 95.824C738.45 95.7718 738.466 95.7207 738.487 95.672C738.51 95.6162 738.548 95.5681 738.597 95.533C738.626 95.5142 738.659 95.5016 738.694 95.496C738.728 95.4903 738.763 95.4917 738.797 95.5C738.869 95.5121 738.936 95.5472 738.986 95.6C739.025 95.6443 739.053 95.6975 739.067 95.755C739.078 95.8011 739.084 95.8485 739.083 95.896C739.083 95.917 739.083 95.937 739.083 95.958L739.225 129.964L739.762 130.064L739.44 95.887C739.44 95.863 739.445 95.839 739.449 95.816C739.458 95.7638 739.473 95.7127 739.494 95.664C739.517 95.6082 739.555 95.56 739.604 95.525C739.633 95.5064 739.666 95.4939 739.701 95.4884C739.735 95.4829 739.77 95.4845 739.804 95.493C739.876 95.505 739.942 95.5401 739.993 95.593C740.032 95.6374 740.06 95.6906 740.074 95.748C740.085 95.7945 740.091 95.8422 740.09 95.89C740.09 95.911 740.09 95.931 740.09 95.952L740.616 130.22L741.049 130.3L740.501 96.185C740.503 96.1611 740.506 96.1374 740.511 96.114C740.52 96.0617 740.536 96.0107 740.557 95.962C740.58 95.9069 740.618 95.8592 740.666 95.824C740.695 95.805 740.728 95.7925 740.763 95.7871C740.797 95.7818 740.832 95.7838 740.866 95.793C740.938 95.805 741.004 95.8401 741.055 95.893C741.094 95.9372 741.122 95.9905 741.136 96.048C741.148 96.0945 741.153 96.1421 741.153 96.19C741.153 96.211 741.153 96.231 741.153 96.252L741.898 130.352H742.308L741.432 95.572C741.26 95.4987 741.084 95.4343 740.905 95.379C740.474 95.2418 740.032 95.1441 739.583 95.087C739.008 95.01 738.425 95.0241 737.854 95.129C737.213 95.248 736.613 95.5261 736.108 95.938C736.066 96.938 736.008 98.749 735.947 101.038C735.886 103.327 735.812 106.085 735.74 108.987C735.668 111.889 735.595 114.931 735.528 117.787C735.461 120.643 735.399 123.294 735.35 125.426L734.518 92.701C734.337 92.6249 734.153 92.5581 733.965 92.501C733.513 92.357 733.049 92.2542 732.579 92.194C731.976 92.1131 731.364 92.128 730.766 92.238C730.094 92.3634 729.464 92.6557 728.934 93.088C728.878 94.446 728.797 97.226 728.706 100.667C728.615 104.108 728.514 108.21 728.418 112.216C728.322 116.222 728.232 120.128 728.163 123.183C728.094 126.238 728.045 128.439 728.033 129.033L728.524 129.001L729.205 93.843C729.207 93.8178 729.21 93.7928 729.215 93.768C729.225 93.7132 729.241 93.6598 729.264 93.609C729.288 93.5507 729.328 93.5002 729.379 93.463C729.41 93.4431 729.444 93.4298 729.48 93.4238C729.517 93.4177 729.554 93.4192 729.589 93.428C729.666 93.4413 729.736 93.4788 729.789 93.535C729.83 93.5818 729.859 93.6377 729.874 93.698C729.886 93.7467 729.892 93.7969 729.891 93.847C729.891 93.869 729.891 93.89 729.891 93.912L729.404 128.934L729.898 128.896L730.28 93.371C730.28 93.346 730.28 93.321 730.289 93.296C730.298 93.241 730.314 93.1873 730.336 93.136C730.36 93.0775 730.399 93.0267 730.45 92.989C730.481 92.9688 730.516 92.9551 730.552 92.9489C730.589 92.9427 730.626 92.9441 730.662 92.953C730.739 92.9668 730.809 93.005 730.862 93.062C730.903 93.1087 730.931 93.1647 730.945 93.225C730.956 93.2735 730.961 93.3233 730.959 93.373C730.959 93.395 730.959 93.416 730.953 93.438L730.774 128.838L731.338 128.798L731.38 93.042C731.382 93.0168 731.385 92.9918 731.39 92.967C731.4 92.9119 731.416 92.8582 731.439 92.807C731.463 92.7487 731.503 92.6982 731.554 92.661C731.585 92.6413 731.619 92.628 731.656 92.6222C731.692 92.6163 731.728 92.618 731.764 92.627C731.841 92.64 731.911 92.678 731.964 92.735C732.005 92.7817 732.034 92.8376 732.048 92.898C732.06 92.9467 732.066 92.9968 732.065 93.047C732.062 93.0665 732.059 93.0859 732.054 93.105L732.053 93.1ZM719.032 95.826L718.284 129.726L718.764 129.695L719.418 95.295C719.42 95.2705 719.423 95.2462 719.428 95.222C719.437 95.1686 719.453 95.1166 719.475 95.067C719.498 95.0101 719.537 94.9608 719.587 94.925C719.617 94.9068 719.649 94.8947 719.684 94.8893C719.718 94.884 719.753 94.8856 719.787 94.894C719.86 94.905 719.928 94.9402 719.979 94.994C720.018 95.0397 720.046 95.0943 720.059 95.153C720.07 95.2009 720.075 95.2499 720.074 95.299C720.075 95.3203 720.075 95.3417 720.074 95.363L719.616 129.625L720.163 129.589L720.493 94.972C720.493 94.948 720.493 94.923 720.502 94.899C720.511 94.8456 720.527 94.7936 720.549 94.744C720.572 94.6871 720.611 94.6378 720.661 94.602C720.691 94.5827 720.725 94.5698 720.76 94.5641C720.796 94.5585 720.832 94.5601 720.867 94.569C720.94 94.581 721.007 94.6161 721.059 94.669C721.099 94.7142 721.127 94.769 721.14 94.828C721.151 94.8755 721.156 94.9243 721.155 94.973C721.155 94.9944 721.153 95.0159 721.15 95.037L721.022 129.522L721.569 129.483L721.527 94.968C721.529 94.9438 721.532 94.9198 721.537 94.896C721.547 94.8433 721.563 94.792 721.585 94.743C721.609 94.6867 721.649 94.6382 721.699 94.603C721.729 94.5837 721.763 94.5709 721.799 94.5652C721.835 94.5595 721.871 94.5611 721.906 94.57C721.979 94.5819 722.045 94.617 722.096 94.67C722.135 94.7157 722.163 94.7703 722.176 94.829C722.187 94.8769 722.192 94.9259 722.191 94.975C722.191 94.996 722.191 95.018 722.191 95.039L722.449 129.429L722.885 129.393L722.602 95.281C722.604 95.2565 722.607 95.2321 722.612 95.208C722.622 95.1547 722.638 95.1027 722.66 95.053C722.684 94.9962 722.723 94.947 722.773 94.911C722.802 94.8922 722.835 94.8796 722.87 94.874C722.904 94.8683 722.939 94.8696 722.973 94.878C723.047 94.8898 723.115 94.9249 723.167 94.978C723.207 95.0231 723.235 95.0774 723.249 95.136C723.26 95.1832 723.265 95.2316 723.264 95.28C723.265 95.301 723.265 95.322 723.264 95.343L723.742 129.337L724.16 129.304L723.56 94.649C723.385 94.5729 723.205 94.5061 723.023 94.449C722.584 94.3081 722.133 94.2077 721.675 94.149C721.088 94.0708 720.492 94.0852 719.91 94.192C719.255 94.3134 718.64 94.5967 718.122 95.016C718.058 96.316 717.959 98.952 717.845 102.224C717.731 105.496 717.602 109.4 717.479 113.237C717.356 117.074 717.237 120.837 717.144 123.837C717.051 126.837 716.983 129.063 716.961 129.824L717.438 129.787L718.381 95.753C718.383 95.7285 718.386 95.7041 718.391 95.68C718.401 95.6267 718.417 95.5747 718.439 95.525C718.463 95.4682 718.503 95.419 718.553 95.383C718.583 95.3637 718.617 95.3508 718.653 95.3452C718.689 95.3395 718.725 95.3412 718.76 95.35C718.833 95.3618 718.9 95.3969 718.951 95.45C718.99 95.4957 719.018 95.5503 719.031 95.609C719.042 95.6565 719.047 95.7053 719.046 95.754C719.043 95.7783 719.038 95.8023 719.032 95.826ZM656.217 103.581L656.151 104.319L661.592 103.249L664.698 104.918V104.194L661.67 102.568L656.217 103.581ZM659.332 106.499L657.16 134.168L657.534 134.142L659.655 106.064C659.655 106.044 659.661 106.024 659.666 106.004C659.676 105.96 659.691 105.918 659.71 105.877C659.731 105.831 659.764 105.791 659.805 105.762C659.829 105.747 659.856 105.737 659.884 105.732C659.912 105.728 659.941 105.73 659.968 105.738C660.025 105.748 660.076 105.778 660.112 105.823C660.141 105.861 660.16 105.906 660.168 105.953C660.175 105.992 660.176 106.032 660.173 106.072C660.172 106.089 660.169 106.107 660.166 106.124L658.202 134.092L658.63 134.063L660.506 105.803C660.509 105.783 660.512 105.763 660.517 105.743C660.527 105.699 660.542 105.656 660.562 105.615C660.585 105.568 660.619 105.528 660.662 105.499C660.686 105.484 660.713 105.473 660.741 105.469C660.769 105.465 660.798 105.466 660.825 105.474C660.882 105.484 660.933 105.514 660.969 105.559C660.998 105.597 661.017 105.642 661.025 105.689C661.03 105.729 661.03 105.769 661.025 105.808C661.024 105.826 661.021 105.843 661.018 105.86L659.296 134.013L659.722 133.983L661.305 105.796C661.307 105.776 661.311 105.756 661.315 105.736C661.324 105.692 661.338 105.65 661.357 105.609C661.377 105.563 661.409 105.523 661.45 105.493C661.474 105.477 661.5 105.467 661.528 105.462C661.556 105.457 661.585 105.459 661.612 105.466C661.669 105.476 661.72 105.506 661.756 105.551C661.785 105.589 661.804 105.634 661.811 105.681C661.816 105.721 661.816 105.76 661.811 105.8C661.81 105.817 661.807 105.835 661.804 105.852L660.394 133.93L660.734 133.904L662.127 106.05C662.13 106.03 662.133 106.01 662.138 105.99C662.148 105.946 662.163 105.903 662.182 105.862C662.204 105.815 662.239 105.775 662.282 105.746C662.306 105.73 662.333 105.72 662.361 105.715C662.389 105.711 662.418 105.713 662.445 105.72C662.502 105.731 662.553 105.761 662.59 105.806C662.619 105.845 662.638 105.889 662.646 105.937C662.653 105.976 662.655 106.016 662.652 106.056C662.651 106.073 662.649 106.091 662.646 106.108L661.416 133.86L661.738 133.835L662.9 105.535C662.767 105.473 662.63 105.419 662.491 105.372C662.155 105.256 661.808 105.173 661.455 105.125C660.997 105.06 660.532 105.071 660.078 105.158C659.552 105.262 659.06 105.495 658.646 105.836C658.539 106.874 658.346 108.948 658.113 111.536C657.88 114.124 657.605 117.208 657.335 120.279C657.065 123.35 656.798 126.398 656.579 128.902C656.36 131.406 656.19 133.362 656.113 134.248L656.494 134.223L658.816 106.444C658.816 106.423 658.822 106.402 658.827 106.381C658.837 106.337 658.852 106.295 658.871 106.254C658.892 106.208 658.924 106.168 658.965 106.138C658.989 106.122 659.015 106.112 659.043 106.107C659.07 106.103 659.099 106.104 659.126 106.111C659.183 106.121 659.234 106.15 659.271 106.194C659.301 106.232 659.32 106.277 659.328 106.324C659.335 106.364 659.337 106.404 659.334 106.444C659.334 106.462 659.334 106.481 659.332 106.499ZM733.249 88.981L726.595 90.246L726.583 91.171L733.204 89.828L737.187 91.914L737.123 91.005L733.249 88.981ZM754.324 99.595L757.932 101.372L757.852 100.582L754.352 98.861L752.901 99.15L751.832 100.126L754.324 99.595ZM769.582 107.242L768.675 108.09L770.832 107.634L773.995 109.171L773.91 108.488L770.832 106.994L769.582 107.242ZM760.382 102.596L763.855 104.301L763.779 103.542L760.405 101.888L759.005 102.162L757.985 103.102L760.382 102.596ZM764.482 104.849L763.509 105.749L765.794 105.265L769.094 106.891L769.025 106.168L765.804 104.59L764.482 104.849ZM774.252 109.549L773.392 110.349L775.44 109.917L778.44 111.381L778.364 110.729L775.444 109.311L774.252 109.549ZM779.443 111.295L778.329 111.52L777.529 112.272L779.442 111.866L782.265 113.235L782.185 112.626L779.443 111.295ZM783.857 138.281L781.904 115.696C781.904 115.643 781.914 115.591 781.932 115.541C781.945 115.501 781.969 115.466 782.003 115.441C782.023 115.428 782.046 115.419 782.071 115.415C782.095 115.411 782.119 115.412 782.143 115.418C782.195 115.426 782.244 115.45 782.282 115.486C782.312 115.516 782.335 115.552 782.348 115.592C782.359 115.624 782.366 115.658 782.368 115.692C782.369 115.706 782.369 115.721 782.368 115.735L784.457 138.391L784.837 138.463L782.615 115.681C782.614 115.629 782.623 115.577 782.64 115.528C782.652 115.488 782.676 115.453 782.709 115.428C782.73 115.415 782.753 115.406 782.777 115.401C782.801 115.397 782.826 115.398 782.85 115.404C782.897 115.41 782.942 115.43 782.978 115.461C783.015 115.492 783.042 115.532 783.056 115.578C783.067 115.61 783.073 115.644 783.074 115.678C783.075 115.692 783.075 115.707 783.074 115.721L785.444 138.573L785.753 138.631L783.38 115.881C783.379 115.829 783.387 115.777 783.404 115.727C783.416 115.687 783.44 115.652 783.473 115.627C783.494 115.614 783.516 115.604 783.541 115.6C783.565 115.596 783.589 115.597 783.613 115.603C783.665 115.611 783.713 115.635 783.751 115.671C783.781 115.701 783.804 115.737 783.818 115.777C783.829 115.809 783.836 115.843 783.839 115.877C783.84 115.891 783.84 115.906 783.839 115.92L786.357 138.745L786.65 138.801L783.994 115.453C783.994 115.453 783.887 115.411 783.704 115.353C783.46 115.282 783.212 115.228 782.961 115.19C782.63 115.139 782.295 115.124 781.961 115.144C781.592 115.165 781.231 115.251 780.892 115.398L782.211 129.334L781.187 115.919C781.186 115.902 781.186 115.886 781.187 115.869C781.19 115.835 781.198 115.801 781.209 115.769C781.221 115.729 781.245 115.695 781.277 115.669C781.297 115.656 781.32 115.647 781.344 115.643C781.368 115.639 781.393 115.641 781.416 115.647C781.463 115.654 781.508 115.673 781.544 115.704C781.581 115.734 781.608 115.775 781.623 115.82C781.634 115.852 781.64 115.886 781.642 115.92C781.643 115.934 781.643 115.948 781.642 115.962L783.469 138.209L783.857 138.281ZM747.571 96.565L751.229 98.465L751.153 97.641L747.596 95.802L745.303 96.237L744.084 97.279L747.571 96.565ZM782.399 113.22L781.785 113.92L782.957 113.669L785.757 115.003L785.657 114.403L782.941 113.11L782.399 113.22ZM768.606 131.281L767.871 110.599C767.87 110.58 767.87 110.562 767.871 110.543C767.876 110.502 767.887 110.462 767.902 110.423C767.919 110.379 767.947 110.34 767.985 110.312C768.008 110.297 768.034 110.286 768.062 110.281C768.089 110.276 768.117 110.277 768.144 110.284C768.198 110.291 768.249 110.314 768.29 110.35C768.331 110.385 768.362 110.432 768.377 110.484C768.388 110.521 768.395 110.559 768.396 110.597C768.397 110.613 768.397 110.63 768.396 110.646L769.212 135.552L769.588 135.62L768.675 110.23C768.674 110.211 768.674 110.193 768.675 110.174C768.681 110.133 768.691 110.093 768.707 110.055C768.724 110.011 768.753 109.973 768.791 109.945C768.815 109.93 768.841 109.919 768.869 109.915C768.896 109.91 768.925 109.911 768.952 109.917C769.006 109.925 769.055 109.948 769.096 109.983C769.137 110.019 769.167 110.065 769.182 110.117C769.193 110.154 769.199 110.192 769.2 110.23C769.201 110.246 769.201 110.263 769.2 110.279L770.265 135.744L770.699 135.827L769.517 109.97C769.518 109.951 769.519 109.932 769.522 109.913C769.527 109.871 769.538 109.831 769.554 109.792C769.57 109.748 769.599 109.709 769.637 109.681C769.66 109.666 769.686 109.655 769.714 109.651C769.741 109.646 769.769 109.647 769.796 109.654C769.85 109.661 769.901 109.683 769.943 109.719C769.984 109.755 770.015 109.801 770.03 109.854C770.041 109.89 770.048 109.928 770.049 109.966C770.05 109.982 770.05 109.999 770.049 110.015L771.387 135.953L771.821 136.035L770.333 109.956C770.335 109.895 770.347 109.835 770.369 109.778C770.386 109.733 770.415 109.694 770.453 109.666C770.477 109.651 770.504 109.64 770.532 109.635C770.56 109.631 770.588 109.632 770.616 109.638C770.675 109.648 770.73 109.675 770.774 109.717C770.807 109.751 770.832 109.793 770.846 109.839C770.857 109.875 770.864 109.913 770.865 109.951C770.866 109.967 770.866 109.984 770.865 110L772.515 136.165L772.865 136.233L771.209 110.181C771.211 110.12 771.223 110.06 771.245 110.003C771.262 109.959 771.291 109.92 771.329 109.892C771.353 109.877 771.38 109.866 771.407 109.862C771.435 109.858 771.464 109.859 771.491 109.867C771.544 109.874 771.594 109.897 771.635 109.933C771.675 109.968 771.704 110.015 771.718 110.067C771.729 110.103 771.735 110.141 771.735 110.179C771.736 110.195 771.736 110.212 771.735 110.228L773.559 136.36L773.897 136.422L771.943 109.688C771.943 109.688 771.779 109.62 771.507 109.54C771.152 109.435 770.789 109.362 770.421 109.321C769.955 109.266 769.482 109.283 769.021 109.371C768.509 109.47 768.03 109.696 767.629 110.03C767.629 110.361 767.695 111.856 767.787 113.912C767.879 115.968 768.001 118.583 768.123 121.156C768.245 123.729 768.365 126.256 768.456 128.147C768.547 130.038 768.606 131.281 768.606 131.281ZM740.18 92.844L743.974 94.83L743.917 93.966L740.217 92.039L738.392 92.383L737.332 93.422L740.18 92.844ZM778.655 136.781L777.555 114.181C777.556 114.127 777.567 114.074 777.586 114.024C777.6 113.984 777.626 113.949 777.66 113.924C777.681 113.911 777.705 113.902 777.729 113.898C777.754 113.894 777.779 113.895 777.803 113.901C777.851 113.907 777.895 113.927 777.932 113.958C777.968 113.99 777.995 114.031 778.008 114.077C778.018 114.109 778.024 114.143 778.025 114.177C778.026 114.192 778.026 114.206 778.025 114.221L779.297 137.427L779.686 137.498L778.302 113.946C778.301 113.929 778.301 113.913 778.302 113.896C778.306 113.859 778.316 113.823 778.329 113.789C778.343 113.749 778.369 113.714 778.403 113.689C778.424 113.675 778.448 113.666 778.473 113.662C778.497 113.658 778.523 113.659 778.547 113.665C778.6 113.673 778.649 113.698 778.688 113.735C778.718 113.766 778.74 113.803 778.753 113.844C778.763 113.876 778.769 113.91 778.771 113.944C778.772 113.959 778.772 113.973 778.771 113.988L780.295 137.612L780.689 137.684L779.029 113.931C779.029 113.877 779.039 113.824 779.058 113.773C779.072 113.733 779.097 113.698 779.131 113.673C779.152 113.659 779.176 113.65 779.201 113.646C779.226 113.641 779.252 113.642 779.276 113.648C779.33 113.656 779.379 113.681 779.418 113.719C779.448 113.75 779.47 113.787 779.483 113.828C779.493 113.86 779.499 113.894 779.501 113.928C779.502 113.943 779.502 113.957 779.501 113.972L781.309 137.798L781.624 137.855L779.81 114.133C779.809 114.081 779.817 114.03 779.832 113.981C779.846 113.941 779.871 113.907 779.904 113.881C779.925 113.867 779.948 113.858 779.972 113.854C779.997 113.85 780.022 113.851 780.046 113.857C780.099 113.865 780.148 113.89 780.187 113.927C780.217 113.958 780.239 113.995 780.252 114.036C780.262 114.068 780.268 114.102 780.27 114.136C780.271 114.151 780.271 114.165 780.27 114.18L782.236 137.98L782.536 138.036L780.445 113.699C780.445 113.699 780.318 113.648 780.105 113.586C779.824 113.504 779.537 113.444 779.247 113.406C778.87 113.355 778.488 113.352 778.11 113.398C777.695 113.447 777.294 113.583 776.935 113.798L776.969 114.243L776.993 114.234L777.018 114.227H777.081C777.129 114.234 777.174 114.254 777.21 114.286C777.247 114.317 777.274 114.359 777.288 114.405C777.299 114.437 777.305 114.471 777.306 114.505C777.307 114.519 777.307 114.534 777.306 114.548L777.82 125.959L778.4 133.886L778.655 136.781ZM786.832 115.537L789.586 116.837L789.48 116.26L786.798 114.994L786.275 115.094L785.688 115.773L786.832 115.537ZM744.611 100.272L744.711 130.984L745.152 131.065L744.952 99.781C744.953 99.7582 744.956 99.7355 744.96 99.713C744.968 99.6631 744.982 99.6144 745.002 99.568C745.022 99.5151 745.057 99.469 745.102 99.435C745.13 99.4168 745.162 99.4046 745.195 99.3993C745.228 99.394 745.262 99.3955 745.294 99.404C745.364 99.4169 745.428 99.452 745.476 99.504C745.514 99.5465 745.541 99.5977 745.554 99.653C745.565 99.6974 745.571 99.7432 745.57 99.789C745.57 99.809 745.57 99.829 745.57 99.849L745.939 131.22L746.453 131.32L745.953 99.481C745.957 99.4075 745.973 99.3352 746.001 99.267C746.021 99.2145 746.056 99.1688 746.101 99.135C746.129 99.1171 746.161 99.1052 746.194 99.1002C746.227 99.0952 746.261 99.0972 746.293 99.106C746.363 99.1189 746.426 99.154 746.474 99.206C746.512 99.2478 746.54 99.2983 746.554 99.353C746.566 99.397 746.572 99.4424 746.572 99.488C746.572 99.508 746.572 99.527 746.572 99.547L747.257 131.468L747.77 131.568L746.913 99.481C746.914 99.4582 746.916 99.4355 746.92 99.413C746.927 99.3632 746.941 99.3144 746.961 99.268C746.981 99.2155 747.016 99.1698 747.061 99.136C747.089 99.1181 747.12 99.106 747.153 99.1007C747.186 99.0954 747.22 99.0969 747.252 99.105C747.322 99.1181 747.386 99.1531 747.435 99.205C747.473 99.2472 747.501 99.298 747.515 99.353C747.527 99.3974 747.533 99.4431 747.533 99.489C747.533 99.509 747.533 99.528 747.533 99.548L748.584 131.722L748.998 131.799L747.932 99.758C747.933 99.7352 747.936 99.7125 747.94 99.69C747.948 99.6402 747.962 99.5916 747.981 99.545C748.001 99.4925 748.036 99.4468 748.081 99.413C748.109 99.395 748.14 99.3829 748.172 99.3776C748.205 99.3722 748.238 99.3738 748.27 99.382C748.34 99.3951 748.404 99.4301 748.453 99.482C748.491 99.5245 748.519 99.5757 748.533 99.631C748.545 99.6754 748.551 99.7211 748.551 99.767C748.551 99.787 748.551 99.806 748.551 99.826L749.812 131.939L750.202 132.011L748.809 99.172C748.644 99.1017 748.475 99.04 748.303 98.987C747.89 98.8561 747.465 98.7628 747.035 98.708C746.486 98.6347 745.929 98.6483 745.384 98.748C744.775 98.86 744.205 99.1249 743.727 99.518C743.701 100.618 743.674 102.749 743.648 105.418C743.622 108.087 743.597 111.291 743.573 114.546C743.549 117.801 743.529 121.103 743.511 123.968C743.493 126.833 743.48 129.258 743.471 130.758L743.913 130.839L743.989 100.207C743.99 100.184 743.993 100.161 743.997 100.139C744.005 100.089 744.019 100.041 744.039 99.995C744.059 99.9425 744.094 99.8968 744.139 99.863C744.167 99.8448 744.199 99.8326 744.232 99.8273C744.265 99.8219 744.299 99.8236 744.332 99.832C744.402 99.8448 744.466 99.8798 744.514 99.932C744.552 99.9741 744.579 100.025 744.593 100.08C744.605 100.124 744.61 100.17 744.61 100.216C744.611 100.235 744.612 100.253 744.611 100.272ZM774.247 136.487L773.389 112.387C773.388 112.369 773.388 112.351 773.389 112.333C773.394 112.294 773.404 112.255 773.418 112.218C773.434 112.176 773.461 112.139 773.497 112.112C773.52 112.098 773.545 112.088 773.571 112.083C773.598 112.079 773.625 112.08 773.651 112.086C773.702 112.093 773.75 112.115 773.789 112.148C773.828 112.182 773.856 112.227 773.87 112.277C773.88 112.312 773.886 112.348 773.887 112.384C773.888 112.4 773.888 112.415 773.887 112.431L774.887 136.601L775.297 136.678L774.18 112.138C774.182 112.08 774.194 112.023 774.215 111.969C774.231 111.929 774.259 111.894 774.294 111.869C774.316 111.855 774.341 111.845 774.367 111.841C774.394 111.836 774.42 111.838 774.446 111.844C774.497 111.85 774.546 111.872 774.585 111.905C774.624 111.939 774.653 111.983 774.667 112.033C774.678 112.068 774.684 112.104 774.685 112.14C774.686 112.156 774.686 112.171 774.685 112.187L775.948 136.806L776.362 136.883L774.954 112.128C774.953 112.11 774.953 112.093 774.954 112.075C774.959 112.036 774.969 111.998 774.984 111.961C775.001 111.921 775.029 111.886 775.064 111.861C775.087 111.846 775.112 111.836 775.139 111.831C775.166 111.827 775.193 111.828 775.22 111.834C775.271 111.841 775.319 111.863 775.358 111.897C775.397 111.93 775.425 111.975 775.439 112.024C775.45 112.058 775.456 112.094 775.457 112.13C775.458 112.145 775.458 112.161 775.457 112.176L777.016 137.006L777.354 137.071L775.792 112.345C775.791 112.327 775.791 112.309 775.792 112.291C775.797 112.252 775.807 112.213 775.822 112.176C775.838 112.134 775.866 112.097 775.902 112.07C775.925 112.055 775.95 112.046 775.977 112.041C776.003 112.037 776.031 112.038 776.057 112.044C776.108 112.051 776.155 112.074 776.193 112.107C776.232 112.141 776.259 112.186 776.273 112.235C776.283 112.27 776.289 112.305 776.29 112.341C776.291 112.356 776.291 112.372 776.29 112.387L778.016 137.187L778.335 137.25L776.483 111.873C776.483 111.873 776.332 111.81 776.083 111.737C775.756 111.642 775.421 111.575 775.083 111.537C774.65 111.484 774.212 111.495 773.783 111.57C773.309 111.654 772.863 111.852 772.483 112.147L772.73 115.57L772.63 112.744C772.629 112.726 772.629 112.708 772.63 112.69C772.635 112.651 772.645 112.612 772.66 112.575C772.676 112.533 772.704 112.496 772.74 112.469C772.762 112.454 772.787 112.444 772.814 112.44C772.84 112.435 772.867 112.435 772.893 112.441C772.95 112.45 773.002 112.476 773.043 112.516C773.075 112.548 773.099 112.588 773.112 112.632C773.123 112.667 773.129 112.703 773.131 112.739C773.132 112.755 773.132 112.77 773.131 112.786L773.613 127.748L774.251 136.491L774.247 136.487ZM790.629 139.537L790.917 139.591L787.882 117.273C787.882 117.273 787.776 117.232 787.597 117.18C787.358 117.111 787.116 117.058 786.87 117.021C786.546 116.971 786.218 116.956 785.891 116.977C785.533 116.998 785.181 117.082 784.852 117.227L786.441 130.817L785.141 117.732C785.14 117.716 785.14 117.7 785.141 117.684C785.144 117.65 785.151 117.616 785.162 117.584C785.174 117.547 785.197 117.514 785.228 117.49C785.248 117.477 785.27 117.468 785.294 117.464C785.317 117.46 785.341 117.461 785.364 117.467C785.41 117.475 785.454 117.495 785.49 117.525C785.526 117.555 785.554 117.594 785.57 117.638C785.581 117.668 785.589 117.7 785.592 117.732C785.593 117.746 785.593 117.759 785.592 117.773L787.81 139.014L788.178 139.085L785.84 117.511C785.839 117.495 785.839 117.479 785.84 117.463C785.842 117.429 785.849 117.395 785.86 117.363C785.872 117.326 785.894 117.294 785.925 117.27C785.945 117.257 785.967 117.248 785.991 117.244C786.014 117.24 786.038 117.241 786.061 117.247C786.113 117.255 786.16 117.278 786.199 117.313C786.229 117.341 786.252 117.375 786.267 117.413C786.279 117.445 786.286 117.479 786.289 117.513C786.29 117.527 786.29 117.541 786.289 117.555L788.766 139.196L789.136 139.267L786.525 117.502C786.524 117.451 786.532 117.4 786.548 117.352C786.561 117.315 786.584 117.282 786.615 117.258C786.635 117.245 786.657 117.236 786.681 117.232C786.704 117.228 786.728 117.229 786.751 117.234C786.802 117.243 786.849 117.266 786.887 117.302C786.916 117.33 786.939 117.364 786.954 117.402C786.966 117.434 786.973 117.468 786.976 117.502C786.977 117.516 786.977 117.53 786.976 117.544L789.732 139.371L790.038 139.428L787.286 117.691C787.285 117.675 787.285 117.659 787.286 117.643C787.288 117.609 787.295 117.575 787.306 117.543C787.317 117.506 787.34 117.473 787.371 117.45C787.391 117.437 787.413 117.429 787.437 117.425C787.46 117.422 787.484 117.423 787.507 117.429C787.558 117.437 787.606 117.46 787.644 117.495C787.674 117.523 787.696 117.557 787.711 117.595C787.722 117.625 787.73 117.657 787.733 117.689C787.734 117.703 787.734 117.716 787.733 117.73L790.629 139.537ZM751.463 103.067L751.891 132.323L752.324 132.405L751.795 102.592C751.795 102.57 751.795 102.548 751.801 102.526C751.808 102.478 751.821 102.431 751.839 102.386C751.859 102.335 751.894 102.29 751.939 102.258C751.967 102.241 751.998 102.229 752.03 102.224C752.062 102.219 752.095 102.22 752.127 102.228C752.189 102.237 752.246 102.264 752.293 102.305C752.339 102.347 752.372 102.401 752.388 102.461C752.4 102.503 752.407 102.547 752.407 102.591C752.408 102.61 752.408 102.629 752.407 102.648L753.107 132.548L753.612 132.64L752.773 102.289C752.774 102.267 752.776 102.245 752.78 102.223C752.787 102.175 752.8 102.128 752.819 102.083C752.84 102.032 752.874 101.987 752.919 101.955C752.946 101.937 752.977 101.925 753.009 101.92C753.041 101.915 753.074 101.916 753.106 101.924C753.167 101.932 753.225 101.959 753.272 101.999C753.318 102.04 753.352 102.094 753.368 102.154C753.38 102.196 753.387 102.239 753.388 102.282C753.389 102.301 753.389 102.319 753.388 102.338L754.401 132.787L754.907 132.878L753.715 102.269C753.716 102.247 753.718 102.226 753.722 102.204C753.729 102.156 753.742 102.109 753.761 102.065C753.782 102.014 753.816 101.969 753.861 101.937C753.889 101.919 753.92 101.907 753.953 101.902C753.986 101.896 754.019 101.897 754.051 101.905C754.118 101.916 754.18 101.948 754.228 101.996C754.265 102.036 754.293 102.085 754.307 102.138C754.319 102.18 754.325 102.224 754.326 102.268C754.327 102.287 754.327 102.306 754.326 102.325L755.702 133.025L756.109 133.101L754.717 102.532C754.718 102.51 754.72 102.488 754.724 102.466C754.731 102.418 754.744 102.371 754.763 102.326C754.784 102.275 754.818 102.23 754.863 102.198C754.89 102.18 754.92 102.169 754.952 102.163C754.984 102.158 755.017 102.159 755.048 102.166C755.109 102.175 755.167 102.202 755.213 102.243C755.259 102.284 755.293 102.338 755.309 102.398C755.321 102.44 755.327 102.483 755.328 102.527C755.329 102.546 755.329 102.564 755.328 102.583L756.867 132.43V133.242L757.289 133.32L757.282 133.149L757.04 105.881C757.041 105.86 757.043 105.839 757.047 105.818C757.054 105.772 757.067 105.727 757.086 105.684C757.107 105.634 757.142 105.592 757.186 105.561C757.212 105.544 757.242 105.533 757.272 105.528C757.303 105.522 757.335 105.524 757.365 105.531C757.424 105.538 757.479 105.563 757.524 105.602C757.568 105.641 757.6 105.693 757.614 105.751C757.625 105.792 757.631 105.834 757.631 105.876C757.632 105.894 757.632 105.913 757.631 105.931L758.031 133.464L758.444 133.543L757.953 105.476C757.954 105.455 757.956 105.434 757.96 105.413C757.967 105.367 757.98 105.322 757.998 105.279C758.019 105.229 758.054 105.187 758.098 105.156C758.125 105.139 758.154 105.128 758.185 105.122C758.216 105.117 758.248 105.118 758.279 105.125C758.338 105.134 758.393 105.16 758.438 105.199C758.483 105.239 758.515 105.291 758.53 105.349C758.542 105.39 758.548 105.432 758.549 105.474C758.55 105.492 758.55 105.511 758.549 105.529L759.199 133.684L759.684 133.772L758.899 105.188C758.9 105.167 758.902 105.146 758.906 105.125C758.913 105.079 758.926 105.033 758.944 104.99C758.965 104.94 759 104.898 759.044 104.867C759.071 104.85 759.101 104.839 759.132 104.834C759.163 104.829 759.195 104.83 759.226 104.838C759.291 104.849 759.351 104.879 759.398 104.926C759.434 104.964 759.461 105.01 759.475 105.061C759.487 105.101 759.493 105.143 759.494 105.185C759.495 105.203 759.495 105.221 759.494 105.239L760.444 133.912L760.924 134.001L759.812 105.169C759.813 105.148 759.815 105.128 759.818 105.107C759.825 105.061 759.837 105.017 759.855 104.974C759.876 104.925 759.911 104.882 759.955 104.852C759.982 104.835 760.012 104.823 760.043 104.818C760.075 104.813 760.107 104.814 760.138 104.821C760.203 104.831 760.263 104.861 760.31 104.907C760.346 104.945 760.372 104.992 760.386 105.043C760.398 105.084 760.404 105.126 760.404 105.169C760.405 105.187 760.405 105.206 760.404 105.224L761.694 134.143L762.086 134.217L760.786 105.424C760.786 105.403 760.788 105.382 760.792 105.361C760.799 105.315 760.811 105.27 760.829 105.227C760.85 105.177 760.884 105.134 760.929 105.104C760.956 105.087 760.986 105.076 761.017 105.071C761.048 105.066 761.079 105.067 761.11 105.074C761.175 105.084 761.236 105.115 761.283 105.161C761.319 105.199 761.345 105.245 761.359 105.296C761.371 105.336 761.377 105.378 761.377 105.42C761.378 105.438 761.378 105.456 761.377 105.474L762.423 125.925C762.423 126.761 762.432 127.578 762.436 128.364C762.44 129.15 762.444 129.905 762.448 130.617C762.452 131.329 762.455 131.999 762.458 132.617C762.461 133.235 762.464 133.793 762.467 134.289L763.226 134.431L762.794 126.501L762.642 108.401C762.642 108.381 762.644 108.361 762.648 108.341C762.655 108.297 762.667 108.255 762.684 108.214C762.703 108.167 762.735 108.126 762.776 108.096C762.801 108.08 762.83 108.069 762.859 108.063C762.889 108.058 762.92 108.059 762.949 108.065C763.011 108.074 763.069 108.103 763.113 108.147C763.148 108.184 763.173 108.228 763.186 108.277C763.197 108.316 763.203 108.356 763.203 108.397C763.204 108.415 763.204 108.432 763.203 108.45L763.568 134.498L763.968 134.57L763.512 108.012C763.512 107.992 763.512 107.972 763.518 107.952C763.524 107.908 763.536 107.866 763.553 107.825C763.571 107.779 763.602 107.739 763.642 107.709C763.667 107.693 763.695 107.682 763.724 107.677C763.753 107.673 763.782 107.674 763.811 107.681C763.874 107.691 763.933 107.72 763.979 107.765C764.014 107.801 764.039 107.846 764.053 107.894C764.064 107.933 764.07 107.973 764.07 108.013C764.071 108.03 764.071 108.048 764.07 108.065L764.681 134.704L765.139 134.789L764.407 107.736C764.408 107.716 764.41 107.697 764.413 107.677C764.419 107.633 764.431 107.591 764.448 107.55C764.466 107.503 764.497 107.463 764.538 107.434C764.563 107.418 764.592 107.407 764.622 107.402C764.651 107.397 764.682 107.399 764.711 107.406C764.767 107.413 764.821 107.437 764.864 107.474C764.906 107.511 764.937 107.561 764.951 107.616C764.962 107.655 764.968 107.695 764.968 107.735C764.969 107.752 764.969 107.77 764.968 107.787L765.859 134.922L766.316 135.006L765.27 107.721C765.271 107.701 765.273 107.681 765.276 107.661C765.283 107.617 765.295 107.575 765.312 107.534C765.331 107.487 765.362 107.446 765.403 107.416C765.428 107.4 765.456 107.389 765.486 107.383C765.515 107.378 765.546 107.379 765.575 107.385C765.637 107.396 765.695 107.425 765.74 107.47C765.775 107.507 765.8 107.551 765.814 107.6C765.825 107.639 765.831 107.679 765.832 107.719C765.833 107.736 765.833 107.754 765.832 107.771L767.043 135.143L767.416 135.214L766.191 107.964C766.191 107.944 766.191 107.924 766.197 107.904C766.203 107.86 766.215 107.817 766.232 107.776C766.25 107.729 766.281 107.688 766.322 107.659C766.347 107.643 766.375 107.633 766.404 107.628C766.434 107.623 766.463 107.625 766.492 107.632C766.548 107.639 766.602 107.663 766.645 107.7C766.687 107.737 766.718 107.787 766.732 107.842C766.743 107.88 766.749 107.92 766.749 107.96C766.75 107.977 766.75 107.995 766.749 108.012L768.143 135.346L768.493 135.413L766.921 107.431C766.772 107.371 766.62 107.319 766.465 107.274C766.092 107.163 765.71 107.086 765.324 107.043C764.83 106.984 764.33 107.002 763.841 107.096C763.296 107.202 762.786 107.443 762.358 107.796C762.358 108.23 762.349 108.847 762.347 109.608C762.345 110.369 762.347 111.273 762.347 112.282C762.347 113.291 762.347 114.404 762.352 115.582C762.357 116.76 762.359 118.003 762.364 119.272L761.576 104.872C761.419 104.809 761.259 104.754 761.096 104.708C760.704 104.592 760.302 104.511 759.896 104.466C759.378 104.405 758.853 104.424 758.34 104.522C757.77 104.632 757.237 104.882 756.789 105.251C756.78 105.921 756.775 107.006 756.774 108.374C756.773 109.742 756.774 111.394 756.774 113.2C756.774 115.006 756.784 116.964 756.792 118.946C756.8 120.928 756.807 122.932 756.815 124.83L755.562 101.966C755.398 101.899 755.231 101.842 755.062 101.795C754.655 101.674 754.238 101.589 753.816 101.542C753.277 101.478 752.731 101.498 752.198 101.6C751.605 101.714 751.049 101.976 750.583 102.36C750.57 103.404 750.567 105.413 750.571 107.933C750.575 110.453 750.584 113.48 750.596 116.564C750.608 119.648 750.623 122.786 750.637 125.526C750.651 128.266 750.663 130.607 750.671 132.098L751.104 132.179L750.848 103.013C750.849 102.991 750.851 102.969 750.855 102.948C750.862 102.9 750.876 102.853 750.895 102.809C750.916 102.758 750.951 102.714 750.995 102.681C751.023 102.663 751.053 102.651 751.086 102.645C751.118 102.64 751.151 102.641 751.183 102.648C751.251 102.659 751.313 102.691 751.362 102.739C751.4 102.779 751.426 102.827 751.441 102.88C751.453 102.922 751.459 102.966 751.46 103.01C751.462 103.029 751.463 103.048 751.463 103.067Z" fill="#1B023F"/> -<path d="M1380 177H-60V233H1380V177Z" fill="#1B023F"/> -<path d="M178.477 129.125C178.477 129.125 178.477 129.118 178.477 129.114C178.477 129.11 178.477 129.107 178.477 129.103C178.477 129.099 178.477 129.096 178.477 129.092C178.477 129.088 178.477 129.085 178.477 129.081V129.049C178.477 129.038 178.477 129.027 178.477 129.016C178.477 129.005 178.477 128.994 178.477 128.983C178.477 128.972 178.477 128.961 178.477 128.951C178.506 128.645 178.588 128.346 178.721 128.069C178.849 127.801 179.022 127.557 179.234 127.348C179.444 127.14 179.689 126.971 179.958 126.848C180.234 126.722 180.531 126.649 180.834 126.63V126.27H181.142V125.84H180.864V125.38H181.077L181.032 125.254L180.992 125.144L180.962 125.064L180.948 125.027C180.939 124.992 180.932 124.956 180.928 124.92C180.919 124.862 180.91 124.786 180.9 124.71C180.89 124.634 180.882 124.558 180.875 124.498C180.868 124.438 180.864 124.398 180.864 124.382C180.864 124.366 180.874 124.288 180.89 124.171C180.906 124.054 180.926 123.902 180.947 123.751C180.968 123.6 180.989 123.451 181.004 123.34L181.03 123.155L181.102 122.814L181.26 122.069L181.419 121.317L181.495 120.958C181.495 120.948 181.515 120.897 181.542 120.826C181.569 120.755 181.603 120.663 181.642 120.572L181.736 120.325L181.779 120.214L181.879 119.178L181.722 119.316L181.715 119.338L181.699 119.389L181.681 119.445C181.676 119.462 181.671 119.476 181.67 119.484L181.658 119.534L181.638 119.614L181.619 119.689L181.611 119.722V119.744C181.611 119.757 181.611 119.776 181.611 119.796C181.611 119.816 181.611 119.837 181.611 119.855C181.611 119.873 181.611 119.889 181.611 119.899C181.609 119.915 181.605 119.93 181.599 119.944C181.592 119.963 181.583 119.985 181.573 120.005L181.547 120.059L181.535 120.082L181.499 120.09L181.413 120.107C181.379 120.113 181.342 120.119 181.307 120.123C181.275 120.126 181.244 120.126 181.212 120.123C181.194 120.122 181.176 120.119 181.158 120.114C181.147 120.114 181.143 120.105 181.142 120.101C181.141 120.099 181.141 120.097 181.141 120.095C181.141 120.094 181.141 120.092 181.142 120.09H181.147L181.129 120.044L181.085 119.934C181.067 119.891 181.048 119.844 181.028 119.8C181.008 119.756 180.989 119.714 180.972 119.681C180.961 119.656 180.943 119.634 180.92 119.619C180.906 119.61 180.889 119.606 180.872 119.609C180.859 119.611 180.847 119.617 180.837 119.624C180.832 119.627 180.827 119.631 180.823 119.635C180.823 119.635 180.823 119.624 180.823 119.607C180.819 119.585 180.815 119.563 180.809 119.542C180.802 119.515 180.792 119.49 180.779 119.465C180.767 119.441 180.75 119.42 180.729 119.403C180.707 119.387 180.687 119.369 180.668 119.35C180.649 119.33 180.63 119.31 180.613 119.288C180.597 119.268 180.582 119.248 180.569 119.226C180.558 119.209 180.549 119.192 180.542 119.173C180.54 119.163 180.54 119.153 180.543 119.143C180.545 119.133 180.549 119.124 180.555 119.116C180.57 119.091 180.586 119.068 180.605 119.046C180.624 119.022 180.644 118.998 180.659 118.978C180.671 118.964 180.68 118.947 180.684 118.929C180.683 118.916 180.678 118.904 180.669 118.895C180.659 118.884 180.647 118.874 180.635 118.865L180.601 118.844L180.602 118.843L180.264 118.636C180.264 118.636 180.264 118.629 180.264 118.619C180.264 118.609 180.264 118.594 180.264 118.579C180.264 118.564 180.264 118.547 180.264 118.533C180.263 118.521 180.263 118.51 180.264 118.498C180.267 118.478 180.268 118.457 180.269 118.437C180.269 118.406 180.269 118.368 180.269 118.328C180.269 118.288 180.269 118.247 180.269 118.212C180.269 118.177 180.269 118.147 180.269 118.13C180.269 118.109 180.271 118.089 180.274 118.068C180.274 118.044 180.282 118.018 180.287 117.993C180.292 117.968 180.298 117.941 180.304 117.918C180.31 117.895 180.316 117.873 180.322 117.855C180.328 117.836 180.332 117.816 180.333 117.796C180.334 117.773 180.334 117.749 180.333 117.726C180.333 117.701 180.333 117.675 180.333 117.647C180.333 117.619 180.333 117.591 180.333 117.562C180.331 117.54 180.331 117.518 180.333 117.496C180.335 117.482 180.338 117.468 180.342 117.455L180.354 117.42C180.359 117.404 180.363 117.388 180.366 117.371C180.376 117.344 180.388 117.319 180.402 117.294C180.412 117.265 180.424 117.234 180.436 117.202L180.475 117.108C180.488 117.078 180.499 117.049 180.509 117.024C180.519 116.999 180.53 116.972 180.543 116.945C180.556 116.918 180.57 116.889 180.584 116.862L180.625 116.783L180.662 116.714L180.725 116.589L180.825 116.389L180.919 116.202L180.961 116.119L181.292 115.245C181.126 115.498 180.959 115.739 180.792 115.957C180.638 116.162 180.469 116.356 180.286 116.536C180.135 116.688 179.962 116.816 179.773 116.917C179.613 117.003 179.432 117.045 179.25 117.037C178.839 116.937 178.675 116.517 178.684 115.929C178.729 115.212 178.891 114.507 179.165 113.842C179.442 113.108 179.812 112.413 180.265 111.772C180.553 111.281 181.005 110.908 181.542 110.719C181.701 110.704 181.86 110.743 181.994 110.83C182.109 110.911 182.2 111.021 182.257 111.15C182.316 111.281 182.353 111.421 182.367 111.564C182.381 111.694 182.379 111.826 182.36 111.955L182.395 111.981L182.473 112.04C182.502 112.062 182.531 112.085 182.553 112.105C182.569 112.117 182.583 112.131 182.593 112.148C182.593 112.162 182.589 112.175 182.582 112.187C182.574 112.204 182.562 112.224 182.55 112.243C182.538 112.262 182.526 112.28 182.517 112.294L182.502 112.314L182.713 112.283L182.725 112.273L182.752 112.249L182.782 112.219C182.79 112.211 182.796 112.203 182.802 112.194C182.81 112.183 182.819 112.173 182.831 112.166C182.845 112.156 182.863 112.146 182.879 112.136L182.927 112.114L182.947 112.104L182.976 112.078L183.039 112.014C183.063 111.992 183.087 111.969 183.106 111.95C183.119 111.939 183.132 111.927 183.143 111.914C183.148 111.903 183.151 111.891 183.153 111.879C183.153 111.864 183.158 111.846 183.16 111.828C183.162 111.81 183.16 111.791 183.16 111.774C183.16 111.757 183.16 111.742 183.16 111.73V111.503C183.16 111.478 183.16 111.457 183.16 111.44C183.159 111.426 183.157 111.411 183.154 111.397C183.152 111.386 183.148 111.376 183.143 111.366C183.138 111.357 183.132 111.349 183.125 111.342C183.115 111.332 183.105 111.323 183.094 111.314L183.045 111.281L182.99 111.244C182.972 111.232 182.955 111.218 182.939 111.204C182.928 111.195 182.919 111.184 182.912 111.172C182.909 111.166 182.909 111.158 182.912 111.152C182.912 111.147 182.912 111.142 182.912 111.137C182.914 111.133 182.914 111.129 182.914 111.125C182.913 111.121 182.911 111.117 182.909 111.114C182.905 111.106 182.903 111.097 182.902 111.088C182.902 111.076 182.902 111.062 182.896 111.047C182.89 111.032 182.896 111.016 182.89 111.001C182.888 110.986 182.884 110.971 182.878 110.957C182.87 110.943 182.864 110.929 182.86 110.914C182.859 110.902 182.859 110.89 182.86 110.878C182.86 110.866 182.86 110.854 182.86 110.841C182.86 110.828 182.86 110.814 182.86 110.799C182.859 110.783 182.859 110.768 182.86 110.752C182.86 110.736 182.86 110.72 182.868 110.703C182.876 110.686 182.874 110.67 182.876 110.654C182.877 110.638 182.877 110.623 182.876 110.607C182.876 110.592 182.876 110.572 182.876 110.551C182.876 110.53 182.876 110.507 182.882 110.485C182.888 110.463 182.882 110.44 182.889 110.42C182.896 110.4 182.889 110.382 182.896 110.369C182.898 110.355 182.903 110.341 182.909 110.328C182.915 110.314 182.923 110.299 182.931 110.285C182.939 110.271 182.947 110.255 182.954 110.24C182.961 110.226 182.967 110.211 182.971 110.195C182.971 110.18 182.979 110.166 182.983 110.152C182.987 110.138 182.996 110.13 183.002 110.114L183.016 110.078L183.032 110.04C183.039 110.025 183.047 110.009 183.056 109.995L183.089 109.941C183.101 109.922 183.113 109.902 183.123 109.881C183.134 109.861 183.143 109.84 183.151 109.818C183.157 109.801 183.163 109.783 183.167 109.765C183.17 109.753 183.173 109.74 183.174 109.728C183.174 109.718 183.174 109.709 183.174 109.699C183.174 109.69 183.174 109.681 183.174 109.672C183.177 109.654 183.182 109.637 183.19 109.621C183.2 109.598 183.213 109.571 183.227 109.542C183.241 109.513 183.256 109.485 183.269 109.459L183.302 109.399C183.31 109.384 183.318 109.377 183.326 109.377C183.33 109.377 183.335 109.378 183.339 109.38C183.343 109.382 183.347 109.385 183.35 109.388C183.357 109.395 183.364 109.403 183.369 109.411L183.376 109.423L183.603 109.554L183.618 109.454L183.608 109.414C183.603 109.387 183.596 109.351 183.59 109.314C183.584 109.277 183.577 109.235 183.572 109.201C183.567 109.172 183.564 109.143 183.563 109.114C183.562 109.108 183.563 109.102 183.567 109.098C183.57 109.093 183.575 109.09 183.581 109.089C183.594 109.088 183.608 109.09 183.62 109.095C183.633 109.1 183.646 109.105 183.659 109.112L183.677 109.122L183.798 109.099L183.789 109.084C183.789 109.074 183.778 109.06 183.772 109.042C183.766 109.024 183.758 109.005 183.752 108.983C183.745 108.96 183.74 108.937 183.737 108.914C183.734 108.9 183.733 108.885 183.732 108.871C183.732 108.863 183.732 108.86 183.732 108.86C183.732 108.86 183.732 108.86 183.738 108.867V108.875L183.702 108.701L183.536 108.709H183.529L183.511 108.698L183.483 108.681L183.447 108.66C183.435 108.653 183.425 108.643 183.419 108.631C183.413 108.618 183.409 108.605 183.407 108.591C183.407 108.576 183.407 108.558 183.402 108.539C183.397 108.52 183.402 108.499 183.395 108.476C183.388 108.453 183.384 108.428 183.381 108.414C183.378 108.4 183.381 108.383 183.381 108.37C183.381 108.357 183.381 108.345 183.381 108.333C183.381 108.321 183.381 108.309 183.381 108.296C183.381 108.283 183.381 108.258 183.381 108.228C183.381 108.198 183.381 108.162 183.376 108.128C183.371 108.094 183.376 108.049 183.371 108.011C183.366 107.973 183.371 107.938 183.371 107.911C183.367 107.881 183.366 107.851 183.368 107.821C183.373 107.798 183.379 107.775 183.387 107.752C183.393 107.732 183.402 107.714 183.402 107.705L183.413 107.688H183.548L183.857 107.695L183.977 107.614L184.177 107.514L184.377 107.53L184.588 107.676L184.788 108.083L184.916 108.598L184.924 109.373L185.124 109.619L185.259 109.88L185.109 110.064V110.848L184.973 111.078L184.762 111.217C184.762 111.217 184.762 111.232 184.768 111.256C184.774 111.28 184.777 111.313 184.783 111.349C184.789 111.385 184.798 111.422 184.807 111.456C184.814 111.485 184.824 111.513 184.838 111.539C184.85 111.562 184.859 111.586 184.864 111.611C184.87 111.64 184.875 111.669 184.877 111.699C184.877 111.729 184.877 111.758 184.882 111.784C184.887 111.81 184.882 111.832 184.882 111.847V112.17C184.883 112.196 184.888 112.222 184.898 112.247C184.908 112.274 184.92 112.301 184.934 112.327C184.947 112.352 184.96 112.374 184.97 112.39L184.986 112.415L185.152 112.584L185.222 112.626L185.382 112.726L185.559 112.834C185.613 112.867 185.659 112.895 185.679 112.91C185.699 112.925 185.736 112.952 185.774 112.984L185.894 113.084L185.994 113.175L186.032 113.214L186.212 113.951L186.272 114.289L186.317 114.504L186.603 115.073L187.176 115.566L187.703 116.258L188.472 117.013L188.744 117.074H189.166L189.34 117.164L191.04 113.756L190.957 113.625C190.957 113.625 190.957 113.616 190.957 113.602C190.957 113.588 190.957 113.57 190.957 113.552C190.955 113.535 190.955 113.519 190.957 113.502C190.957 113.488 190.964 113.479 190.972 113.479H191.102H191.111L191.131 113.485C191.138 113.487 191.146 113.487 191.154 113.485C191.158 113.484 191.161 113.481 191.164 113.478C191.167 113.475 191.17 113.472 191.171 113.468C191.171 113.458 191.18 113.44 191.187 113.417C191.194 113.394 191.2 113.368 191.207 113.343L191.224 113.276L191.231 113.247L191.217 113.069L192.412 111.314L191.74 113.36L191.589 113.399L191.513 113.491L191.476 113.568L191.506 113.684L191.513 113.777L191.413 113.839L191.33 113.846H191.307L189.537 117.414L189.726 117.468L189.741 117.637L189.696 117.852L189.544 118.067L189.363 118.144L189.257 118.421H189.091L189.042 118.401L187.218 122.07V122.135L187.182 122.201C187.16 122.241 187.129 122.294 187.096 122.349C187.063 122.404 187.028 122.46 186.996 122.505C186.975 122.539 186.948 122.57 186.917 122.596C186.897 122.61 186.883 122.629 186.876 122.652C186.867 122.679 186.861 122.707 186.859 122.736C186.857 122.765 186.857 122.794 186.859 122.823C186.859 122.85 186.859 122.873 186.859 122.888C186.859 122.903 186.859 122.928 186.859 122.958C186.859 122.988 186.852 123.022 186.848 123.058C186.844 123.094 186.84 123.127 186.837 123.158C186.834 123.189 186.837 123.213 186.837 123.228C186.837 123.243 186.837 123.296 186.828 123.366C186.819 123.436 186.815 123.525 186.807 123.613C186.799 123.701 186.792 123.79 186.786 123.86C186.78 123.93 186.776 123.982 186.776 123.997C186.782 124.025 186.793 124.052 186.809 124.076C186.829 124.111 186.855 124.151 186.882 124.19C186.909 124.229 186.935 124.265 186.954 124.29L186.987 124.334L186.836 124.61L186.347 124.768V125.407H186.829V125.868H186.536V126.299H186.846V126.66C187.15 126.681 187.448 126.758 187.725 126.886C187.995 127.011 188.241 127.183 188.452 127.393C188.886 127.826 189.155 128.397 189.212 129.007C189.212 129.015 189.212 129.022 189.212 129.03C189.212 129.038 189.212 129.045 189.212 129.053V129.14C189.212 129.147 189.212 129.153 189.212 129.16C189.212 129.167 189.212 129.173 189.212 129.18C189.212 129.187 189.212 129.19 189.212 129.194C189.212 129.198 189.212 129.204 189.212 129.208V129.222C189.212 129.222 189.212 129.232 189.212 129.236V129.263C189.212 129.27 189.212 129.276 189.212 129.282V129.321C189.212 129.327 189.212 129.334 189.212 129.34C189.212 129.346 189.212 129.349 189.212 129.354C189.212 129.359 189.212 129.363 189.212 129.368C189.212 129.373 189.212 129.378 189.212 129.382C189.212 129.386 189.212 129.392 189.212 129.397C189.212 129.402 189.212 129.416 189.212 129.425V129.453V129.481C189.212 129.49 189.212 129.499 189.212 129.508V129.533C189.212 129.533 189.212 129.542 189.212 129.546C189.212 129.55 189.212 129.554 189.212 129.558V129.583C189.212 129.583 189.212 129.591 189.212 129.595C189.212 129.599 189.212 129.603 189.212 129.607V129.619V129.631V129.644V129.656L189.207 129.687L189.201 129.718L189.195 129.748L189.189 129.779L189.183 129.812L189.177 129.844L189.17 129.876L189.163 129.909V129.917V129.925V129.933V129.941C189.099 130.181 189 130.411 188.87 130.623C188.74 130.834 188.582 131.026 188.4 131.194C188.218 131.362 188.014 131.504 187.793 131.615C187.573 131.727 187.337 131.805 187.093 131.847H186.704H186.22L185.171 131.834L183.116 131.826L181.649 131.807L181.032 131.814L180.761 131.799H180.967H181.255L186.676 131.841L180.976 131.81C180.416 131.799 179.876 131.602 179.441 131.249C179.228 131.077 179.045 130.873 178.896 130.644C178.745 130.41 178.631 130.154 178.561 129.885V129.858L178.543 129.814L178.535 129.773L178.527 129.732L178.519 129.69V129.668V129.646V129.624V129.602V129.577V129.552V129.527V129.503V129.472C178.519 129.456 178.519 129.441 178.519 129.425C178.519 129.409 178.519 129.394 178.519 129.379C178.519 129.364 178.519 129.348 178.519 129.332C178.519 129.316 178.519 129.3 178.519 129.285C178.519 129.27 178.519 129.272 178.519 129.266V129.247C178.519 129.24 178.519 129.234 178.519 129.228C178.519 129.222 178.519 129.215 178.519 129.209C178.519 129.203 178.519 129.195 178.519 129.188C178.519 129.181 178.519 129.174 178.519 129.167C178.519 129.16 178.519 129.153 178.519 129.146C178.519 129.139 178.477 129.132 178.477 129.125ZM186.891 120.072L186.908 120.172L186.946 120.406C186.96 120.492 186.975 120.581 186.986 120.652C186.997 120.723 187.007 120.775 187.011 120.791C187.015 120.807 187.025 120.837 187.039 120.875L187.085 120.999L187.128 121.111L187.147 121.16L187.173 121.51L188.794 118.259L188.738 118.21L188.68 118.16L188.625 118.113L188.579 118.074C188.56 118.059 188.536 118.036 188.51 118.01L188.431 117.928L188.366 117.858L188.339 117.828L188.039 117.642L186.969 116.965L187.013 117.028L187.098 117.152C187.129 117.198 187.161 117.245 187.186 117.286C187.206 117.316 187.224 117.347 187.239 117.38C187.248 117.408 187.254 117.437 187.256 117.467C187.256 117.504 187.262 117.549 187.262 117.595C187.262 117.641 187.262 117.689 187.256 117.734C187.253 117.775 187.247 117.816 187.239 117.856C187.23 117.891 187.217 117.924 187.2 117.956C187.184 117.988 187.165 118.02 187.145 118.05C187.126 118.078 187.108 118.101 187.095 118.118L187.073 118.144L186.893 118.374L186.902 118.414C186.91 118.434 186.922 118.462 186.933 118.493C186.944 118.524 186.955 118.557 186.964 118.593C186.972 118.621 186.977 118.649 186.978 118.678C186.976 118.714 186.97 118.751 186.962 118.786C186.952 118.832 186.939 118.886 186.926 118.934C186.913 118.982 186.9 119.034 186.89 119.065L186.874 119.122L186.814 119.476L186.891 120.072ZM177.979 147.114V151.471L177.002 151.457V147.101L177.979 147.114ZM189.721 151.592L177.002 151.457V147.101L177.98 147.11V146.554L179.211 146.565V145.871H178.869V144.739L179.803 144.747V142.926L181.076 142.936V132.514L186.613 132.545V142.982L187.89 142.993V144.814L188.829 144.822V145.953H188.49V146.653L189.723 146.664V147.934L189.721 151.592ZM190.707 147.227V151.598L189.723 151.588V147.214L190.707 147.227Z" fill="#1B023F"/> -</g> -<g clip-path="url(#clip2_11691_168894)"> -<path d="M1440 0H0V185H1440V0Z" fill="#7E1BD4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M952.586 185L880.033 23.5941L620.972 12L488 177.832V185H496.163L598.654 55.422L568.112 185H722.889L810.899 146.501L805.818 185H842.143L847.748 143.512L888.582 185H936.163L856.829 104.256L880.212 56.1953L940.212 185H952.586ZM639.117 40.657L789.161 105.346L607.598 176.662L639.117 40.657ZM698.248 26.9892L851.079 33.2003L824.316 82.1957L698.248 26.9892Z" fill="#892ED8"/> -<path d="M767.645 98.2871L767.638 96.398L736.555 79.3044L736.994 83.7705L767.645 98.2871ZM797.84 114.296L797.943 113.066L788.954 108.065L789.107 109.77L797.84 114.296ZM736.788 77.5118L742.967 81.0015L742.589 78.6599L737.122 73.6744L736.788 77.5118ZM648.036 104.338L735.566 87.7329L734.708 79.2646L647.925 98.6509L648.102 101.728L647.469 102.122L647.736 102.761L648.036 104.338ZM735.139 75.4522L736.288 72.3194L727.048 72L726.776 74.3802L722.009 74.4416L722.038 76.5241L688.201 74.894L687.704 81.5835L685.177 81.9131L685.441 79.3885L680.841 80.6389L680.875 82.8611L677.601 83.2021L677.876 81.862L667.071 86.1643L655.268 93.0015L650.079 94.4042L653.175 92.5855L652.855 91.4033L650.499 92.7674L650.329 91.5784L645.152 93.729L645.657 97.4312L646.705 97.5631L735.304 76.7901L735.139 75.4522ZM737.558 87.7205L798.969 118.219L798.566 116.098L768.864 101.043L737.393 85.3641L737.558 87.7205ZM646.387 144.066L706.669 137.56L647.12 142.194L646.387 144.066ZM800.587 148.854L736.144 137.487L736.425 143.234L801 149.636L800.587 148.854ZM800.473 150.753L736.625 144.714L736.739 148.175L800.473 150.753ZM639 151L702.876 148.101L734.073 148.377L733.911 135.895L703.259 139.973L641.771 144.549L641.65 145.649L698.889 142.103L659.674 145.791L639.468 147.041L639 151ZM661.591 104.213L665.279 106.181V105.328L661.686 103.414L655.261 104.607L655.195 105.477L661.591 104.213ZM668.575 106.279L666.531 139.66L667.013 139.627L668.974 105.754C668.974 105.729 668.982 105.704 668.987 105.68C669 105.626 669.019 105.574 669.043 105.524C669.069 105.468 669.108 105.418 669.157 105.381C669.188 105.362 669.222 105.349 669.258 105.343C669.294 105.338 669.33 105.339 669.365 105.348C669.438 105.361 669.505 105.398 669.556 105.452C669.595 105.498 669.621 105.553 669.632 105.612C669.643 105.66 669.646 105.709 669.643 105.759C669.643 105.78 669.643 105.801 669.636 105.822L667.864 139.565L668.422 139.525L670.069 105.424C670.071 105.4 670.075 105.376 670.081 105.352C670.093 105.298 670.112 105.246 670.136 105.197C670.161 105.141 670.2 105.092 670.25 105.056C670.281 105.037 670.316 105.025 670.351 105.02C670.387 105.014 670.424 105.016 670.459 105.025C670.532 105.036 670.599 105.072 670.649 105.127C670.687 105.172 670.713 105.226 670.724 105.285C670.733 105.333 670.736 105.381 670.733 105.43C670.732 105.452 670.729 105.473 670.725 105.494L669.297 139.459L669.841 139.422L671.107 105.418C671.11 105.393 671.114 105.368 671.12 105.344C671.13 105.291 671.146 105.239 671.169 105.19C671.194 105.134 671.234 105.086 671.283 105.049C671.314 105.03 671.349 105.018 671.385 105.012C671.421 105.007 671.458 105.009 671.493 105.019C671.566 105.031 671.633 105.068 671.683 105.122C671.721 105.167 671.747 105.222 671.758 105.28C671.767 105.328 671.771 105.376 671.767 105.424C671.766 105.446 671.764 105.467 671.759 105.488L670.71 139.361L671.15 139.332L672.177 105.73C672.179 105.706 672.184 105.681 672.19 105.657C672.201 105.604 672.219 105.552 672.243 105.503C672.268 105.447 672.307 105.398 672.357 105.362C672.388 105.343 672.423 105.33 672.46 105.324C672.496 105.318 672.533 105.32 672.569 105.329C672.642 105.343 672.709 105.38 672.759 105.435C672.798 105.48 672.824 105.535 672.835 105.594C672.844 105.642 672.847 105.691 672.844 105.739C672.843 105.761 672.84 105.782 672.836 105.803L672.016 139.271L672.432 139.241L673.161 105.105C672.986 105.03 672.807 104.964 672.625 104.907C672.183 104.766 671.729 104.666 671.27 104.608C670.674 104.53 670.07 104.545 669.479 104.651C668.806 104.775 668.174 105.059 667.635 105.479C667.52 106.716 667.338 109.163 667.112 112.216C666.886 115.269 666.622 118.923 666.361 122.588C666.099 126.254 665.841 129.911 665.625 132.974C665.41 136.038 665.238 138.5 665.15 139.764L665.639 139.73L667.883 106.213C667.887 106.189 667.891 106.165 667.897 106.141C667.91 106.087 667.928 106.035 667.952 105.985C667.979 105.928 668.021 105.879 668.073 105.843C668.104 105.824 668.138 105.811 668.174 105.805C668.21 105.8 668.247 105.801 668.282 105.81C668.356 105.823 668.423 105.86 668.474 105.914C668.513 105.96 668.539 106.015 668.55 106.073C668.56 106.121 668.564 106.17 668.56 106.219C668.56 106.239 668.56 106.26 668.552 106.28L668.575 106.279ZM665.442 103.615L672.037 102.308L675.861 104.342L675.84 103.459L672.108 101.481L665.487 102.717L665.442 103.615ZM680.105 104.233L678.36 138.807L678.858 138.773L680.518 103.691C680.52 103.665 680.524 103.64 680.53 103.615C680.542 103.559 680.56 103.505 680.585 103.453C680.612 103.394 680.655 103.344 680.708 103.307C680.74 103.287 680.776 103.273 680.814 103.267C680.851 103.262 680.889 103.263 680.926 103.273C681.002 103.285 681.071 103.323 681.122 103.38C681.162 103.426 681.19 103.483 681.202 103.543C681.212 103.593 681.216 103.643 681.214 103.693C681.214 103.715 681.214 103.738 681.207 103.759L679.749 138.706L680.32 138.667L681.643 103.357C681.646 103.331 681.65 103.306 681.656 103.282C681.668 103.226 681.687 103.173 681.712 103.121C681.739 103.062 681.782 103.012 681.836 102.975C681.902 102.935 681.981 102.923 682.055 102.941C682.132 102.956 682.202 102.996 682.253 103.054C682.293 103.102 682.32 103.159 682.333 103.219C682.343 103.269 682.347 103.319 682.345 103.369C682.345 103.391 682.345 103.414 682.338 103.435L681.226 138.601L681.797 138.556L682.728 103.35C682.73 103.324 682.734 103.299 682.739 103.274C682.75 103.218 682.769 103.164 682.793 103.112C682.819 103.054 682.861 103.003 682.914 102.966C682.946 102.946 682.981 102.933 683.018 102.927C683.055 102.921 683.093 102.923 683.129 102.933C683.207 102.947 683.277 102.987 683.329 103.046C683.37 103.094 683.397 103.15 683.409 103.211C683.419 103.261 683.423 103.311 683.42 103.361C683.419 103.383 683.416 103.405 683.411 103.427L682.689 138.501L683.146 138.468L683.837 103.67C683.84 103.645 683.844 103.62 683.85 103.595C683.861 103.54 683.879 103.486 683.905 103.435C683.931 103.376 683.974 103.326 684.027 103.289C684.059 103.269 684.094 103.256 684.131 103.25C684.168 103.244 684.206 103.246 684.243 103.254C684.318 103.268 684.387 103.306 684.439 103.362C684.479 103.41 684.506 103.467 684.519 103.527C684.529 103.577 684.533 103.628 684.53 103.678C684.529 103.701 684.527 103.723 684.523 103.744L684.045 138.404L684.472 138.373L684.853 103.021C684.672 102.944 684.486 102.875 684.297 102.817C683.841 102.671 683.372 102.568 682.897 102.509C682.282 102.428 681.659 102.443 681.049 102.554C680.358 102.682 679.708 102.976 679.156 103.41C679.057 104.693 678.892 107.242 678.69 110.425C678.488 113.607 678.258 117.404 678.03 121.206C677.802 125.008 677.573 128.805 677.385 131.966C677.197 135.127 677.049 137.65 676.975 138.911L677.475 138.877L679.416 104.173C679.418 104.147 679.422 104.122 679.428 104.097C679.441 104.041 679.46 103.987 679.484 103.935C679.512 103.876 679.555 103.825 679.609 103.788C679.641 103.767 679.677 103.754 679.714 103.748C679.752 103.742 679.79 103.743 679.827 103.752C679.903 103.767 679.972 103.807 680.022 103.866C680.062 103.913 680.089 103.97 680.101 104.031C680.111 104.08 680.114 104.131 680.111 104.181C680.11 104.2 680.108 104.22 680.104 104.239L680.105 104.233ZM709.415 95.3579L713.678 97.5915L713.622 96.6174L709.476 94.4474L702.272 95.8046L702.243 96.7935L709.415 95.3579ZM676.841 101.481L683.627 100.129L687.606 102.235L687.574 101.325L683.704 99.2795L676.888 100.548L676.841 101.481ZM692.274 101.795L690.816 137.905L691.331 137.872L692.692 101.231C692.695 101.205 692.699 101.179 692.705 101.154C692.715 101.096 692.733 101.039 692.757 100.985C692.784 100.924 692.827 100.872 692.881 100.833C692.914 100.812 692.952 100.797 692.991 100.791C693.031 100.784 693.071 100.786 693.109 100.796C693.188 100.81 693.259 100.85 693.313 100.91C693.354 100.958 693.382 101.016 693.396 101.079C693.407 101.13 693.412 101.182 693.41 101.233C693.41 101.256 693.409 101.278 693.403 101.301L692.261 137.802L692.852 137.759L693.866 100.889C693.868 100.863 693.873 100.837 693.879 100.812C693.89 100.754 693.909 100.699 693.934 100.646C693.961 100.585 694.003 100.532 694.058 100.493C694.09 100.473 694.126 100.459 694.164 100.452C694.202 100.446 694.241 100.447 694.278 100.456C694.358 100.471 694.431 100.51 694.486 100.57C694.528 100.618 694.558 100.675 694.572 100.738C694.583 100.788 694.588 100.84 694.585 100.891C694.584 100.914 694.582 100.936 694.579 100.958L693.779 137.694L694.364 137.652L694.97 100.88C694.973 100.854 694.977 100.828 694.983 100.803C694.994 100.745 695.013 100.69 695.038 100.637C695.065 100.576 695.108 100.523 695.163 100.485C695.197 100.464 695.234 100.45 695.274 100.445C695.313 100.439 695.353 100.441 695.391 100.451C695.471 100.465 695.543 100.505 695.597 100.565C695.639 100.614 695.668 100.673 695.681 100.736C695.693 100.787 695.697 100.839 695.695 100.891C695.695 100.914 695.693 100.937 695.688 100.96L695.294 137.586L695.77 137.55L696.129 101.21C696.131 101.183 696.135 101.157 696.14 101.131C696.151 101.074 696.169 101.018 696.194 100.965C696.221 100.905 696.264 100.852 696.318 100.814C696.352 100.793 696.39 100.779 696.429 100.774C696.468 100.768 696.508 100.77 696.547 100.78C696.625 100.795 696.697 100.834 696.75 100.894C696.791 100.942 696.82 101.001 696.833 101.063C696.845 101.114 696.849 101.166 696.847 101.218C696.847 101.24 696.845 101.263 696.84 101.286L696.697 137.483L697.145 137.454L697.174 100.543C696.988 100.463 696.798 100.392 696.604 100.332C696.132 100.181 695.648 100.074 695.157 100.011C694.525 99.9273 693.883 99.9423 693.254 100.056C692.545 100.186 691.878 100.489 691.313 100.937C691.221 102.301 691.068 105.063 690.885 108.489C690.703 111.915 690.494 116.009 690.291 120.056C690.087 124.103 689.888 128.097 689.729 131.328C689.57 134.56 689.448 137.026 689.4 138.013L689.918 137.976L691.583 101.724C691.585 101.698 691.59 101.672 691.595 101.646C691.607 101.589 691.626 101.533 691.65 101.48C691.678 101.42 691.72 101.367 691.775 101.329C691.808 101.309 691.844 101.295 691.883 101.289C691.921 101.283 691.96 101.285 691.997 101.295C692.076 101.309 692.148 101.349 692.202 101.408C692.243 101.457 692.272 101.515 692.285 101.578C692.296 101.629 692.301 101.681 692.299 101.734C692.294 101.755 692.288 101.776 692.281 101.796L692.274 101.795ZM688.888 98.9532L695.865 97.5574L699.986 99.7285L699.942 98.785L695.931 96.6765L688.927 97.9939L688.888 98.9532ZM715.258 94.3814L722.626 92.9038L727.031 95.2056L726.969 94.2053L722.681 91.9683L715.284 93.3619L715.258 94.3814ZM658.812 108.044L656.643 140.378L657.078 140.341L659.194 107.534C659.194 107.51 659.2 107.486 659.206 107.464C659.217 107.412 659.234 107.361 659.257 107.314C659.282 107.259 659.321 107.212 659.371 107.177C659.398 107.158 659.43 107.146 659.463 107.141C659.496 107.135 659.53 107.137 659.562 107.147C659.63 107.159 659.691 107.195 659.735 107.248C659.77 107.292 659.793 107.345 659.802 107.401C659.81 107.448 659.812 107.495 659.809 107.542C659.808 107.563 659.805 107.583 659.801 107.603L657.869 140.29L658.375 140.253L660.191 107.223C660.191 107.199 660.198 107.175 660.204 107.152C660.215 107.101 660.233 107.051 660.255 107.003C660.281 106.949 660.32 106.901 660.369 106.867C660.397 106.849 660.429 106.836 660.461 106.831C660.494 106.826 660.528 106.828 660.56 106.836C660.628 106.849 660.689 106.885 660.733 106.937C660.768 106.982 660.791 107.034 660.801 107.09C660.81 107.136 660.813 107.183 660.81 107.229C660.809 107.25 660.807 107.271 660.803 107.291L659.17 140.195L659.667 140.157L661.135 107.219C661.137 107.196 661.142 107.172 661.147 107.149C661.158 107.097 661.175 107.047 661.197 106.999C661.223 106.944 661.262 106.896 661.311 106.861C661.338 106.843 661.37 106.83 661.402 106.825C661.435 106.819 661.468 106.821 661.5 106.829C661.568 106.842 661.63 106.877 661.674 106.931C661.71 106.976 661.734 107.029 661.743 107.085C661.751 107.132 661.754 107.179 661.751 107.226C661.75 107.247 661.747 107.268 661.744 107.289L660.46 140.1L660.865 140.07L662.121 107.519C662.123 107.495 662.127 107.471 662.132 107.448C662.143 107.396 662.159 107.345 662.181 107.297C662.207 107.242 662.246 107.194 662.295 107.159C662.323 107.141 662.354 107.128 662.387 107.123C662.42 107.118 662.454 107.12 662.486 107.129C662.553 107.142 662.614 107.177 662.659 107.228C662.694 107.273 662.717 107.325 662.727 107.381C662.735 107.427 662.738 107.474 662.735 107.52C662.734 107.541 662.732 107.562 662.728 107.582L661.665 140.017L662.046 139.988L663.032 106.91C662.874 106.837 662.712 106.773 662.546 106.718C662.148 106.582 661.737 106.485 661.319 106.428C660.779 106.351 660.229 106.365 659.692 106.468C659.074 106.589 658.495 106.863 658.01 107.264C657.896 108.464 657.705 110.843 657.47 113.81C657.235 116.777 656.96 120.33 656.687 123.882C656.414 127.434 656.144 130.983 655.92 133.943C655.695 136.903 655.518 139.273 655.428 140.466L655.876 140.431L658.221 107.979C658.224 107.955 658.228 107.931 658.234 107.908C658.245 107.856 658.261 107.806 658.284 107.758C658.309 107.703 658.348 107.656 658.398 107.622C658.426 107.603 658.457 107.591 658.49 107.586C658.523 107.581 658.557 107.582 658.589 107.591C658.656 107.604 658.717 107.639 658.761 107.692C658.795 107.737 658.818 107.79 658.827 107.846C658.835 107.892 658.837 107.939 658.834 107.985C658.828 108.006 658.821 108.025 658.812 108.044ZM708.112 98.86L707.642 136.689L708.248 136.647L708.52 98.7804C708.522 98.7533 708.526 98.7264 708.531 98.6997C708.542 98.641 708.56 98.5838 708.585 98.5293C708.612 98.4669 708.656 98.413 708.711 98.3735C708.745 98.3523 708.783 98.3382 708.822 98.3319C708.861 98.3256 708.901 98.3275 708.94 98.3372C709.021 98.351 709.096 98.3909 709.152 98.4508C709.196 98.5011 709.226 98.5612 709.241 98.6259C709.254 98.6779 709.259 98.7314 709.258 98.785C709.26 98.8081 709.26 98.8312 709.258 98.8543L709.195 136.575L709.689 136.54L709.707 99.1192C709.709 99.0921 709.713 99.0651 709.718 99.0385C709.73 98.9793 709.748 98.9217 709.773 98.8669C709.801 98.804 709.844 98.7494 709.9 98.7088C709.933 98.6871 709.971 98.6724 710.01 98.6655C710.049 98.6587 710.089 98.6599 710.128 98.6691C710.209 98.6826 710.283 98.7226 710.339 98.7827C710.383 98.8332 710.413 98.8939 710.426 98.9589C710.438 99.0116 710.442 99.0654 710.44 99.1192C710.439 99.1428 710.436 99.1663 710.433 99.1897L710.639 136.473L711.095 136.44L710.768 98.4281C710.575 98.3452 710.377 98.2724 710.176 98.2099C709.693 98.0554 709.196 97.945 708.692 97.8802C708.042 97.7928 707.382 97.8085 706.736 97.9268C706.007 98.0609 705.323 98.3734 704.746 98.8361C704.664 100.241 704.532 103.068 704.378 106.584C704.224 110.1 704.047 114.301 703.876 118.459C703.704 122.617 703.533 126.727 703.404 130.064C703.275 133.402 703.176 135.963 703.129 137.02L703.663 136.977L705.025 99.6455C705.027 99.6188 705.031 99.5922 705.037 99.5659C705.048 99.5071 705.066 99.4498 705.091 99.3954C705.119 99.333 705.163 99.2795 705.219 99.2408C705.253 99.2201 705.291 99.2063 705.33 99.2002C705.369 99.1942 705.409 99.196 705.448 99.2056C705.529 99.2192 705.604 99.2591 705.66 99.3192C705.703 99.3689 705.733 99.4288 705.747 99.4931C705.758 99.5454 705.763 99.5989 705.76 99.6523C705.76 99.675 705.76 99.6989 705.754 99.7216L704.605 136.912L705.134 136.874L706.186 99.1431C706.188 99.116 706.192 99.089 706.198 99.0624C706.209 99.0036 706.227 98.9463 706.251 98.8918C706.278 98.8293 706.321 98.7753 706.377 98.7361C706.41 98.7148 706.448 98.7007 706.487 98.6946C706.527 98.6885 706.567 98.6907 706.605 98.7009C706.687 98.7144 706.761 98.7543 706.817 98.8146C706.861 98.8641 706.891 98.9234 706.906 98.9873C706.918 99.0394 706.923 99.093 706.92 99.1465C706.92 99.1697 706.918 99.1928 706.914 99.2158L706.079 136.805L706.687 136.758L707.372 98.785C707.375 98.7579 707.379 98.7309 707.385 98.7043C707.397 98.6455 707.416 98.5882 707.441 98.5338C707.469 98.4713 707.513 98.4175 707.569 98.378C707.602 98.3573 707.64 98.3436 707.679 98.3375C707.718 98.3315 707.759 98.3333 707.797 98.3429C707.878 98.3569 707.952 98.3968 708.008 98.4565C708.051 98.5064 708.082 98.5661 708.096 98.6304C708.108 98.6822 708.114 98.7353 708.112 98.7884C708.113 98.8127 708.113 98.8365 708.112 98.86ZM733.764 94.2996L733.946 134.79L734.219 134.769L734.586 134.837L734.196 94.211C734.198 94.1824 734.201 94.1539 734.205 94.1257C734.215 94.0636 734.233 94.0029 734.258 93.945C734.285 93.8787 734.33 93.8213 734.388 93.779C734.424 93.7564 734.463 93.7413 734.505 93.7344C734.547 93.7276 734.589 93.7292 734.63 93.7392C734.718 93.7549 734.798 93.7984 734.858 93.8631C734.905 93.9163 734.938 93.9799 734.955 94.0484C734.969 94.1034 734.976 94.16 734.975 94.2167C734.975 94.2417 734.975 94.2655 734.975 94.2906L735.612 135.025L736.128 135.12L735.466 94.5713C735.468 94.5427 735.472 94.5143 735.477 94.4861C735.488 94.4235 735.506 94.3623 735.532 94.3042C735.56 94.2378 735.605 94.1804 735.663 94.1382C735.698 94.1157 735.738 94.1007 735.779 94.0943C735.821 94.0878 735.863 94.09 735.903 94.1007C735.99 94.1153 736.07 94.1576 736.131 94.2212C736.178 94.2738 736.211 94.337 736.228 94.4053C736.242 94.4603 736.249 94.5169 736.248 94.5735C736.248 94.5986 736.248 94.6224 736.248 94.6474L737.161 135.311H737.442V135.366L737.968 135.461L738.699 98.3463C738.701 98.3191 738.705 98.2921 738.71 98.2655C738.721 98.2059 738.739 98.1479 738.764 98.0928C738.79 98.0295 738.834 97.9749 738.889 97.9348C738.923 97.9134 738.96 97.899 739 97.8925C739.039 97.8861 739.079 97.8877 739.118 97.8972C739.201 97.911 739.278 97.9508 739.337 98.0109C739.383 98.0613 739.415 98.1223 739.431 98.1882C739.444 98.2413 739.451 98.296 739.45 98.3508C739.45 98.3743 739.45 98.3981 739.45 98.4224L738.92 135.636L739.445 135.734L739.871 97.837C739.873 97.8096 739.876 97.7822 739.88 97.7552C739.89 97.6953 739.906 97.6368 739.931 97.5812C739.956 97.5177 739.999 97.4628 740.055 97.4233C740.089 97.4025 740.126 97.3887 740.166 97.3826C740.205 97.3765 740.245 97.3784 740.283 97.388C740.366 97.4006 740.442 97.4406 740.499 97.5017C740.544 97.5524 740.574 97.6133 740.589 97.679C740.602 97.7326 740.607 97.7877 740.605 97.8427C740.605 97.8667 740.603 97.8906 740.6 97.9143L740.394 135.91L741.006 136.024L741.046 97.4778C741.046 97.4505 741.049 97.4233 741.056 97.396C741.067 97.3366 741.085 97.2785 741.109 97.2232C741.135 97.1598 741.178 97.105 741.234 97.0652C741.268 97.0439 741.305 97.0295 741.345 97.0231C741.384 97.0166 741.424 97.0182 741.463 97.0277C741.545 97.0414 741.621 97.0813 741.678 97.1414C741.723 97.1917 741.755 97.2522 741.771 97.3175C741.784 97.37 741.79 97.4238 741.789 97.4778C741.789 97.5017 741.789 97.5244 741.789 97.5483L741.951 136.203L742.564 136.316L742.197 97.4676C742.197 97.4403 742.202 97.413 742.207 97.3869C742.217 97.3275 742.235 97.2695 742.258 97.2141C742.284 97.1506 742.328 97.0959 742.384 97.0561C742.417 97.0349 742.455 97.0207 742.494 97.0145C742.533 97.0082 742.574 97.01 742.612 97.0198C742.694 97.0334 742.77 97.0733 742.828 97.1334C742.872 97.1838 742.904 97.2443 742.92 97.3096C742.933 97.3624 742.94 97.4166 742.939 97.471C742.939 97.4949 742.939 97.5176 742.939 97.5415L743.539 136.494L744.034 136.584L743.408 97.8063C743.41 97.7792 743.414 97.7522 743.419 97.7256C743.43 97.6662 743.448 97.6082 743.472 97.5529C743.498 97.4902 743.541 97.4359 743.596 97.396C743.63 97.3744 743.667 97.3601 743.707 97.354C743.746 97.3479 743.786 97.3502 743.824 97.3607C743.907 97.3744 743.983 97.4142 744.04 97.4744C744.085 97.5247 744.117 97.5852 744.133 97.6506C744.146 97.7034 744.153 97.7576 744.152 97.812C744.152 97.8358 744.152 97.8586 744.152 97.8825L745.003 136.644H745.471L744.471 97.1095C744.274 97.0262 744.073 96.953 743.869 96.8902C743.377 96.7342 742.872 96.6231 742.36 96.5582C741.703 96.4706 741.037 96.4867 740.386 96.606C739.655 96.7412 738.969 97.0574 738.393 97.5255C738.345 98.6622 738.279 100.721 738.209 103.323C738.139 105.925 738.055 109.06 737.973 112.358C737.891 115.657 737.807 119.115 737.731 122.361C737.654 125.608 737.584 128.621 737.528 131.044L736.578 93.8461C736.371 93.7595 736.161 93.6837 735.946 93.6188C735.431 93.455 734.901 93.3382 734.364 93.2698C733.676 93.1778 732.978 93.1947 732.295 93.3198C731.527 93.4624 730.808 93.7946 730.203 94.286C730.139 95.8296 730.047 98.9896 729.943 102.901C729.839 106.812 729.724 111.475 729.614 116.029C729.504 120.582 729.402 125.022 729.323 128.495C729.244 131.967 729.188 134.469 729.174 135.144L729.735 135.108L730.512 95.1442C730.515 95.1156 730.518 95.0871 730.524 95.0589C730.535 94.9966 730.554 94.9359 730.58 94.8782C730.607 94.812 730.653 94.7546 730.711 94.7122C730.746 94.6896 730.786 94.6745 730.827 94.6676C730.868 94.6608 730.91 94.6625 730.951 94.6725C731.038 94.6875 731.118 94.7302 731.179 94.7941C731.226 94.8473 731.259 94.9108 731.276 94.9793C731.29 95.0347 731.297 95.0917 731.296 95.1488C731.296 95.1738 731.296 95.1976 731.296 95.2227L730.74 135.032L731.303 134.989L731.74 94.6077C731.74 94.5793 731.74 94.5508 731.75 94.5224C731.76 94.4598 731.778 94.3988 731.803 94.3406C731.831 94.2741 731.876 94.2162 731.934 94.1734C731.969 94.1504 732.009 94.1349 732.05 94.1279C732.092 94.1208 732.135 94.1224 732.176 94.1325C732.263 94.1482 732.343 94.1917 732.404 94.2564C732.45 94.3095 732.483 94.3732 732.499 94.4417C732.512 94.4969 732.517 94.5534 732.515 94.61C732.515 94.635 732.515 94.6588 732.508 94.6838L732.303 134.923L732.948 134.877L732.996 94.2337C732.998 94.205 733.001 94.1766 733.007 94.1485C733.018 94.0858 733.037 94.0247 733.063 93.9666C733.09 93.9003 733.136 93.8429 733.194 93.8006C733.229 93.7782 733.269 93.7631 733.31 93.7565C733.351 93.7498 733.393 93.7517 733.434 93.762C733.521 93.7767 733.602 93.8199 733.662 93.8848C733.709 93.9378 733.742 94.0014 733.758 94.07C733.772 94.1254 733.778 94.1823 733.777 94.2394C733.774 94.2616 733.77 94.2836 733.765 94.3053L733.764 94.2996ZM718.899 97.3982L718.045 135.932L718.593 135.897L719.34 96.7947C719.342 96.7668 719.346 96.7391 719.351 96.7117C719.362 96.651 719.38 96.5918 719.405 96.5355C719.431 96.4708 719.475 96.4148 719.532 96.374C719.566 96.3533 719.604 96.3396 719.643 96.3335C719.682 96.3275 719.723 96.3293 719.761 96.3389C719.845 96.3513 719.922 96.3913 719.98 96.4525C720.025 96.5044 720.056 96.5665 720.071 96.6332C720.084 96.6877 720.09 96.7434 720.088 96.7992C720.09 96.8234 720.09 96.8478 720.088 96.872L719.566 135.817L720.19 135.776L720.567 96.4275C720.567 96.4003 720.567 96.3718 720.577 96.3446C720.588 96.2839 720.606 96.2247 720.631 96.1683C720.657 96.1036 720.702 96.0476 720.759 96.0069C720.793 95.9849 720.832 95.9703 720.872 95.9639C720.913 95.9574 720.954 95.9593 720.994 95.9694C721.077 95.9831 721.154 96.0229 721.213 96.0831C721.259 96.1345 721.291 96.1967 721.306 96.2638C721.318 96.3178 721.324 96.3732 721.323 96.4286C721.322 96.453 721.321 96.4773 721.317 96.5014L721.171 135.7L721.795 135.656L721.747 96.423C721.75 96.3955 721.753 96.3681 721.759 96.3411C721.77 96.2812 721.788 96.2229 721.813 96.1672C721.841 96.1032 721.886 96.048 721.944 96.0081C721.978 95.9862 722.017 95.9715 722.058 95.9651C722.098 95.9586 722.14 95.9605 722.18 95.9705C722.263 95.984 722.339 96.024 722.397 96.0843C722.442 96.1362 722.473 96.1982 722.488 96.265C722.501 96.3194 722.506 96.3751 722.505 96.4309C722.505 96.4548 722.505 96.4798 722.505 96.5036L722.8 135.594L723.298 135.554L722.975 96.7787C722.977 96.7509 722.981 96.7232 722.986 96.6958C722.997 96.6351 723.016 96.5761 723.041 96.5196C723.068 96.455 723.112 96.3991 723.17 96.3582C723.203 96.3368 723.241 96.3225 723.28 96.316C723.319 96.3096 723.36 96.3111 723.398 96.3206C723.482 96.334 723.56 96.3739 723.619 96.4343C723.665 96.4856 723.697 96.5473 723.713 96.614C723.726 96.6676 723.731 96.7226 723.73 96.7776C723.732 96.8015 723.732 96.8254 723.73 96.8492L724.276 135.49L724.753 135.452L724.068 96.0604C723.868 95.9738 723.663 95.8979 723.455 95.833C722.954 95.6729 722.439 95.5588 721.916 95.492C721.246 95.4031 720.566 95.4195 719.901 95.5409C719.153 95.6789 718.452 96.0008 717.86 96.4775C717.787 97.9552 717.674 100.952 717.544 104.671C717.414 108.39 717.267 112.828 717.126 117.189C716.986 121.551 716.85 125.828 716.744 129.238C716.638 132.648 716.56 135.178 716.535 136.043L717.079 136.001L718.156 97.3152C718.158 97.2874 718.162 97.2596 718.167 97.2323C718.179 97.1716 718.197 97.1126 718.222 97.0561C718.25 96.9915 718.295 96.9356 718.352 96.8947C718.387 96.8727 718.426 96.8581 718.466 96.8516C718.507 96.8452 718.549 96.8471 718.588 96.8572C718.672 96.8706 718.748 96.9105 718.806 96.9708C718.851 97.0227 718.883 97.0848 718.898 97.1516C718.91 97.2056 718.916 97.261 718.915 97.3164C718.911 97.344 718.906 97.3713 718.899 97.3982ZM647.19 106.213L647.115 107.052L653.326 105.836L656.872 107.733V106.91L653.415 105.062L647.19 106.213ZM650.746 109.53L648.266 140.981L648.693 140.952L651.115 109.036C651.115 109.013 651.121 108.99 651.127 108.967C651.139 108.918 651.156 108.869 651.177 108.823C651.201 108.771 651.239 108.726 651.286 108.692C651.313 108.675 651.344 108.664 651.376 108.659C651.408 108.654 651.441 108.656 651.472 108.665C651.537 108.677 651.595 108.711 651.636 108.762C651.669 108.805 651.691 108.856 651.7 108.909C651.708 108.954 651.71 109 651.706 109.045C651.705 109.065 651.702 109.084 651.698 109.104L649.456 140.895L649.945 140.862L652.086 108.739C652.089 108.716 652.093 108.693 652.099 108.671C652.11 108.621 652.127 108.572 652.15 108.525C652.176 108.472 652.215 108.427 652.264 108.393C652.292 108.376 652.322 108.364 652.354 108.359C652.386 108.354 652.419 108.356 652.45 108.365C652.515 108.377 652.573 108.411 652.615 108.462C652.648 108.505 652.67 108.556 652.679 108.609C652.684 108.654 652.684 108.7 652.679 108.745C652.677 108.765 652.675 108.784 652.671 108.804L650.705 140.805L651.191 140.771L652.998 108.731C653.001 108.708 653.005 108.685 653.01 108.663C653.02 108.613 653.036 108.565 653.058 108.518C653.081 108.466 653.117 108.42 653.164 108.387C653.191 108.369 653.221 108.357 653.253 108.351C653.285 108.346 653.318 108.348 653.349 108.356C653.413 108.367 653.472 108.402 653.513 108.453C653.546 108.496 653.568 108.547 653.576 108.6C653.582 108.645 653.582 108.691 653.576 108.736C653.574 108.755 653.572 108.775 653.568 108.795L651.958 140.711L652.347 140.681L653.937 109.02C653.94 108.997 653.944 108.974 653.949 108.952C653.961 108.901 653.978 108.853 654 108.806C654.025 108.753 654.064 108.707 654.114 108.674C654.141 108.656 654.171 108.644 654.204 108.639C654.236 108.634 654.268 108.636 654.3 108.645C654.365 108.657 654.423 108.692 654.465 108.742C654.498 108.786 654.52 108.837 654.529 108.891C654.537 108.936 654.539 108.981 654.536 109.027C654.535 109.046 654.532 109.066 654.529 109.086L653.125 140.631L653.493 140.603L654.819 108.434C654.667 108.364 654.511 108.302 654.352 108.249C653.968 108.117 653.572 108.023 653.17 107.968C652.647 107.894 652.116 107.907 651.598 108.006C650.997 108.124 650.435 108.389 649.963 108.776C649.841 109.956 649.62 112.314 649.354 115.256C649.088 118.197 648.774 121.703 648.466 125.194C648.158 128.684 647.853 132.149 647.603 134.995C647.353 137.842 647.159 140.065 647.071 141.072L647.506 141.044L650.157 109.468C650.157 109.444 650.164 109.42 650.17 109.396C650.181 109.346 650.198 109.298 650.22 109.252C650.244 109.199 650.281 109.154 650.327 109.12C650.354 109.102 650.384 109.09 650.416 109.085C650.447 109.08 650.48 109.081 650.511 109.089C650.575 109.1 650.634 109.134 650.676 109.183C650.71 109.227 650.733 109.277 650.741 109.331C650.749 109.376 650.752 109.422 650.748 109.468C650.748 109.489 650.748 109.509 650.746 109.53ZM735.129 89.6176L727.533 91.0555L727.519 92.1069L735.078 90.5804L739.625 92.9515L739.552 91.9182L735.129 89.6176ZM759.188 101.682L763.307 103.702L763.216 102.804L759.22 100.848L757.564 101.177L756.343 102.286L759.188 101.682ZM776.607 110.375L775.571 111.339L778.034 110.82L781.644 112.567L781.547 111.791L778.034 110.093L776.607 110.375ZM766.104 105.094L770.069 107.032L769.982 106.169L766.13 104.289L764.532 104.6L763.368 105.669L766.104 105.094ZM770.784 107.655L769.674 108.678L772.282 108.127L776.049 109.976L775.971 109.154L772.294 107.36L770.784 107.655ZM781.938 112.997L780.956 113.906L783.294 113.415L786.719 115.079L786.632 114.338L783.299 112.727L781.938 112.997ZM787.864 114.982L786.592 115.237L785.679 116.092L787.863 115.631L791.085 117.187L790.994 116.495L787.864 114.982ZM792.903 145.656L790.673 119.984C790.674 119.924 790.684 119.865 790.705 119.808C790.72 119.763 790.748 119.723 790.786 119.694C790.81 119.679 790.836 119.669 790.863 119.665C790.891 119.66 790.919 119.661 790.946 119.668C791.006 119.677 791.061 119.704 791.105 119.746C791.139 119.779 791.165 119.821 791.18 119.866C791.193 119.903 791.2 119.941 791.203 119.98C791.204 119.996 791.204 120.012 791.203 120.029L793.588 145.781L794.021 145.863L791.485 119.967C791.484 119.908 791.494 119.849 791.514 119.793C791.527 119.748 791.555 119.709 791.592 119.68C791.616 119.664 791.642 119.654 791.67 119.649C791.698 119.645 791.726 119.646 791.753 119.652C791.807 119.66 791.858 119.682 791.9 119.717C791.941 119.752 791.972 119.798 791.988 119.85C792.001 119.887 792.008 119.925 792.009 119.964C792.01 119.98 792.01 119.996 792.009 120.013L794.715 145.988L795.067 146.054L792.358 120.195C792.357 120.135 792.366 120.076 792.386 120.019C792.399 119.974 792.427 119.934 792.465 119.906C792.488 119.891 792.514 119.88 792.541 119.876C792.569 119.871 792.597 119.872 792.624 119.879C792.683 119.888 792.738 119.915 792.782 119.956C792.816 119.99 792.842 120.031 792.858 120.076C792.871 120.113 792.879 120.151 792.882 120.19C792.883 120.206 792.883 120.223 792.882 120.239L795.757 146.184L796.091 146.248L793.059 119.708C793.059 119.708 792.937 119.66 792.728 119.594C792.45 119.514 792.166 119.452 791.88 119.409C791.502 119.351 791.12 119.334 790.738 119.357C790.318 119.381 789.905 119.478 789.518 119.646L791.024 135.487L789.855 120.238C789.854 120.219 789.854 120.2 789.855 120.181C789.858 120.142 789.867 120.104 789.88 120.067C789.893 120.022 789.921 119.983 789.958 119.954C789.981 119.938 790.007 119.928 790.034 119.924C790.062 119.92 790.089 119.921 790.116 119.929C790.17 119.936 790.221 119.958 790.263 119.993C790.305 120.028 790.336 120.074 790.352 120.125C790.365 120.162 790.372 120.2 790.374 120.239C790.375 120.255 790.375 120.271 790.374 120.287L792.46 145.575L792.903 145.656ZM751.479 98.2382L755.655 100.398L755.568 99.4613L751.507 97.3709L748.89 97.8654L747.498 99.0498L751.479 98.2382ZM791.238 117.17L790.537 117.966L791.875 117.68L795.072 119.197L794.958 118.515L791.857 117.045L791.238 117.17ZM775.492 137.7L774.653 114.191C774.652 114.169 774.652 114.148 774.653 114.127C774.659 114.08 774.671 114.034 774.689 113.991C774.708 113.94 774.74 113.896 774.783 113.864C774.81 113.847 774.839 113.835 774.871 113.829C774.902 113.824 774.934 113.825 774.965 113.832C775.027 113.841 775.084 113.867 775.132 113.907C775.179 113.947 775.213 114 775.231 114.06C775.244 114.102 775.251 114.145 775.253 114.188C775.254 114.207 775.254 114.225 775.253 114.244L776.184 142.554L776.613 142.632L775.571 113.771C775.57 113.75 775.57 113.729 775.571 113.707C775.578 113.661 775.59 113.616 775.608 113.572C775.627 113.522 775.66 113.479 775.704 113.447C775.73 113.43 775.761 113.418 775.792 113.413C775.824 113.407 775.856 113.408 775.887 113.415C775.948 113.424 776.005 113.451 776.052 113.491C776.098 113.531 776.133 113.584 776.15 113.643C776.162 113.684 776.169 113.728 776.17 113.771C776.171 113.79 776.171 113.808 776.17 113.827L777.386 142.773L777.882 142.867L776.532 113.476C776.533 113.454 776.535 113.432 776.538 113.411C776.544 113.364 776.556 113.317 776.574 113.273C776.593 113.223 776.626 113.179 776.669 113.147C776.696 113.13 776.726 113.118 776.757 113.113C776.788 113.107 776.82 113.109 776.851 113.116C776.913 113.124 776.971 113.15 777.018 113.19C777.066 113.231 777.101 113.284 777.118 113.344C777.131 113.385 777.138 113.428 777.14 113.471C777.141 113.49 777.141 113.508 777.14 113.527L778.667 143.01L779.163 143.103L777.464 113.46C777.466 113.39 777.48 113.322 777.505 113.257C777.524 113.207 777.557 113.162 777.601 113.13C777.628 113.113 777.659 113.101 777.691 113.095C777.723 113.09 777.755 113.091 777.787 113.098C777.855 113.109 777.917 113.141 777.967 113.188C778.005 113.227 778.034 113.275 778.049 113.327C778.062 113.368 778.07 113.411 778.071 113.454C778.072 113.473 778.072 113.491 778.071 113.51L779.955 143.251L780.354 143.329L778.464 113.715C778.466 113.646 778.48 113.578 778.505 113.513C778.525 113.463 778.558 113.419 778.601 113.387C778.628 113.369 778.659 113.358 778.69 113.353C778.722 113.348 778.755 113.35 778.786 113.358C778.847 113.367 778.904 113.393 778.95 113.433C778.996 113.474 779.029 113.527 779.045 113.586C779.057 113.627 779.064 113.67 779.064 113.713C779.066 113.732 779.066 113.75 779.064 113.769L781.147 143.473L781.532 143.543L779.302 113.155C779.302 113.155 779.115 113.078 778.804 112.987C778.399 112.868 777.984 112.784 777.564 112.738C777.032 112.675 776.493 112.695 775.966 112.795C775.381 112.907 774.835 113.165 774.377 113.544C774.377 113.92 774.452 115.619 774.557 117.956C774.662 120.293 774.802 123.266 774.941 126.191C775.08 129.115 775.217 131.988 775.321 134.137C775.425 136.287 775.492 137.7 775.492 137.7ZM743.041 94.0086L747.373 96.2661L747.308 95.284L743.084 93.0936L741 93.4846L739.79 94.6656L743.041 94.0086ZM786.964 143.951L785.708 118.262C785.71 118.201 785.722 118.141 785.744 118.084C785.76 118.038 785.789 117.999 785.828 117.97C785.852 117.955 785.879 117.945 785.907 117.94C785.935 117.936 785.964 117.937 785.992 117.944C786.046 117.951 786.097 117.974 786.138 118.009C786.18 118.045 786.21 118.092 786.226 118.144C786.237 118.181 786.244 118.219 786.245 118.258C786.246 118.274 786.246 118.291 786.245 118.308L787.697 144.686L788.141 144.766L786.561 117.995C786.56 117.976 786.56 117.957 786.561 117.938C786.566 117.897 786.577 117.856 786.592 117.817C786.608 117.771 786.638 117.732 786.677 117.703C786.701 117.687 786.728 117.677 786.756 117.672C786.784 117.668 786.813 117.669 786.841 117.676C786.902 117.685 786.958 117.713 787.002 117.755C787.036 117.79 787.061 117.833 787.076 117.879C787.087 117.916 787.094 117.954 787.097 117.993C787.098 118.009 787.098 118.026 787.097 118.043L788.836 144.896L789.286 144.978L787.391 117.978C787.391 117.917 787.403 117.856 787.424 117.798C787.44 117.753 787.469 117.713 787.508 117.685C787.532 117.669 787.559 117.658 787.587 117.653C787.616 117.649 787.645 117.65 787.673 117.656C787.734 117.666 787.791 117.694 787.835 117.737C787.869 117.772 787.895 117.814 787.909 117.861C787.921 117.898 787.928 117.936 787.93 117.975C787.931 117.991 787.931 118.008 787.93 118.025L789.994 145.107L790.354 145.172L788.283 118.208C788.282 118.149 788.29 118.091 788.308 118.035C788.324 117.99 788.352 117.95 788.39 117.921C788.414 117.906 788.44 117.895 788.468 117.89C788.496 117.886 788.525 117.887 788.552 117.894C788.613 117.903 788.669 117.931 788.713 117.973C788.747 118.008 788.773 118.051 788.787 118.097C788.799 118.134 788.806 118.172 788.808 118.211C788.809 118.228 788.809 118.244 788.808 118.261L791.052 145.314L791.395 145.378L789.008 117.714C789.008 117.714 788.863 117.656 788.619 117.586C788.299 117.493 787.971 117.424 787.64 117.381C787.21 117.323 786.773 117.32 786.342 117.372C785.868 117.428 785.41 117.583 785.001 117.827L785.039 118.333L785.067 118.322L785.095 118.314H785.167C785.222 118.322 785.273 118.345 785.315 118.381C785.357 118.417 785.388 118.464 785.404 118.517C785.416 118.554 785.423 118.592 785.424 118.63C785.425 118.647 785.425 118.663 785.424 118.679L786.011 131.65L786.673 140.661L786.964 143.951ZM796.299 119.804L799.443 121.281L799.322 120.625L796.26 119.186L795.663 119.3L794.993 120.072L796.299 119.804ZM748.1 102.452L748.214 137.362L748.717 137.454L748.489 101.894C748.491 101.868 748.493 101.842 748.498 101.817C748.507 101.76 748.523 101.704 748.546 101.652C748.569 101.592 748.609 101.539 748.66 101.501C748.692 101.48 748.729 101.466 748.766 101.46C748.804 101.454 748.842 101.456 748.879 101.465C748.959 101.48 749.032 101.52 749.087 101.579C749.131 101.627 749.161 101.685 749.176 101.748C749.189 101.799 749.195 101.851 749.195 101.903C749.195 101.926 749.195 101.948 749.195 101.971L749.616 137.63L750.203 137.744L749.632 101.553C749.636 101.469 749.655 101.387 749.687 101.31C749.71 101.25 749.749 101.198 749.801 101.16C749.833 101.139 749.869 101.126 749.907 101.12C749.944 101.114 749.983 101.117 750.02 101.127C750.099 101.141 750.172 101.181 750.227 101.24C750.27 101.288 750.301 101.345 750.318 101.407C750.332 101.457 750.339 101.509 750.338 101.561C750.338 101.584 750.338 101.605 750.338 101.628L751.121 137.912L751.706 138.026L750.728 101.553C750.729 101.527 750.731 101.501 750.736 101.476C750.744 101.419 750.76 101.363 750.782 101.311C750.806 101.251 750.845 101.199 750.897 101.161C750.929 101.14 750.965 101.127 751.002 101.121C751.04 101.114 751.078 101.116 751.115 101.125C751.195 101.14 751.268 101.18 751.324 101.239C751.367 101.287 751.399 101.345 751.415 101.407C751.429 101.458 751.436 101.51 751.435 101.562C751.435 101.585 751.435 101.606 751.435 101.629L752.635 138.201L753.108 138.288L751.891 101.868C751.893 101.842 751.895 101.816 751.9 101.79C751.909 101.734 751.925 101.679 751.947 101.626C751.97 101.566 752.01 101.514 752.061 101.476C752.093 101.455 752.128 101.441 752.165 101.435C752.203 101.429 752.24 101.431 752.277 101.44C752.357 101.455 752.43 101.495 752.486 101.554C752.53 101.602 752.561 101.66 752.577 101.723C752.591 101.774 752.598 101.826 752.598 101.878C752.598 101.901 752.598 101.922 752.598 101.945L754.037 138.448L754.483 138.529L752.892 101.202C752.703 101.122 752.511 101.052 752.315 100.991C751.843 100.843 751.358 100.736 750.867 100.674C750.24 100.591 749.604 100.606 748.982 100.72C748.287 100.847 747.636 101.148 747.091 101.595C747.061 102.845 747.03 105.268 747 108.301C746.971 111.335 746.942 114.977 746.915 118.677C746.887 122.377 746.865 126.13 746.844 129.387C746.823 132.644 746.809 135.4 746.798 137.105L747.303 137.197L747.39 102.378C747.391 102.352 747.394 102.326 747.399 102.301C747.408 102.244 747.424 102.189 747.447 102.137C747.47 102.077 747.509 102.025 747.561 101.987C747.593 101.966 747.629 101.952 747.667 101.946C747.705 101.94 747.744 101.942 747.781 101.952C747.861 101.966 747.934 102.006 747.989 102.065C748.032 102.113 748.063 102.171 748.079 102.234C748.093 102.284 748.099 102.336 748.099 102.388C748.1 102.409 748.101 102.431 748.1 102.452ZM781.932 143.617L780.952 116.223C780.951 116.203 780.951 116.182 780.952 116.162C780.958 116.117 780.97 116.073 780.986 116.031C781.004 115.983 781.035 115.941 781.076 115.91C781.102 115.894 781.13 115.883 781.161 115.878C781.191 115.873 781.222 115.874 781.252 115.881C781.31 115.889 781.365 115.913 781.41 115.952C781.454 115.99 781.486 116.041 781.502 116.098C781.513 116.138 781.52 116.178 781.521 116.22C781.522 116.237 781.522 116.255 781.521 116.273L782.663 143.747L783.131 143.834L781.855 115.94C781.858 115.874 781.872 115.809 781.896 115.748C781.914 115.702 781.945 115.663 781.986 115.634C782.011 115.618 782.04 115.607 782.07 115.602C782.099 115.597 782.13 115.598 782.159 115.606C782.218 115.613 782.273 115.637 782.318 115.675C782.363 115.714 782.395 115.764 782.411 115.821C782.424 115.86 782.431 115.901 782.432 115.942C782.433 115.96 782.433 115.978 782.432 115.996L783.874 143.98L784.347 144.067L782.739 115.929C782.738 115.908 782.738 115.888 782.739 115.868C782.745 115.824 782.756 115.78 782.774 115.739C782.793 115.693 782.824 115.654 782.865 115.625C782.891 115.608 782.92 115.597 782.951 115.591C782.981 115.586 783.013 115.587 783.043 115.594C783.101 115.603 783.156 115.627 783.2 115.666C783.244 115.704 783.276 115.754 783.293 115.81C783.305 115.849 783.312 115.89 783.313 115.931C783.314 115.948 783.314 115.966 783.313 115.983L785.093 144.207L785.479 144.281L783.696 116.175C783.695 116.155 783.695 116.134 783.696 116.114C783.702 116.069 783.713 116.025 783.73 115.983C783.749 115.935 783.78 115.893 783.821 115.863C783.847 115.846 783.876 115.835 783.907 115.83C783.937 115.825 783.968 115.826 783.998 115.833C784.056 115.842 784.11 115.867 784.154 115.905C784.198 115.944 784.229 115.994 784.245 116.05C784.257 116.089 784.263 116.13 784.264 116.171C784.265 116.188 784.265 116.206 784.264 116.223L786.235 144.413L786.599 144.484L784.485 115.639C784.485 115.639 784.312 115.567 784.028 115.484C783.655 115.376 783.273 115.3 782.886 115.257C782.393 115.196 781.892 115.209 781.402 115.294C780.861 115.39 780.352 115.615 779.918 115.95L780.2 119.841L780.086 116.629C780.085 116.608 780.085 116.588 780.086 116.567C780.092 116.523 780.103 116.479 780.12 116.437C780.139 116.389 780.171 116.347 780.212 116.316C780.237 116.3 780.266 116.288 780.296 116.283C780.326 116.277 780.357 116.278 780.386 116.284C780.451 116.295 780.511 116.324 780.558 116.37C780.594 116.407 780.621 116.452 780.636 116.501C780.649 116.541 780.656 116.582 780.658 116.623C780.659 116.641 780.659 116.659 780.658 116.677L781.208 133.684L781.937 143.622L781.932 143.617ZM800.634 147.084L800.962 147.145L797.498 121.777C797.498 121.777 797.377 121.73 797.172 121.671C796.9 121.593 796.623 121.532 796.342 121.49C795.973 121.433 795.598 121.417 795.225 121.44C794.816 121.464 794.414 121.56 794.039 121.725L795.853 137.172L794.369 122.299C794.368 122.28 794.368 122.262 794.369 122.244C794.372 122.205 794.38 122.167 794.393 122.13C794.407 122.088 794.433 122.051 794.468 122.023C794.491 122.009 794.516 121.999 794.543 121.994C794.57 121.99 794.597 121.991 794.623 121.997C794.676 122.006 794.726 122.029 794.767 122.063C794.809 122.097 794.84 122.142 794.858 122.192C794.871 122.226 794.88 122.262 794.883 122.299C794.885 122.314 794.885 122.33 794.883 122.345L797.416 146.49L797.836 146.57L795.167 122.047C795.165 122.029 795.165 122.011 795.167 121.993C795.169 121.954 795.177 121.916 795.189 121.879C795.203 121.837 795.229 121.8 795.264 121.773C795.286 121.759 795.312 121.749 795.339 121.744C795.365 121.74 795.393 121.741 795.419 121.747C795.478 121.756 795.532 121.782 795.576 121.822C795.61 121.854 795.637 121.893 795.654 121.936C795.668 121.973 795.676 122.011 795.679 122.05C795.68 122.066 795.68 122.081 795.679 122.097L798.507 146.697L798.929 146.777L795.949 122.037C795.947 121.979 795.956 121.922 795.975 121.867C795.989 121.824 796.016 121.787 796.051 121.76C796.074 121.745 796.1 121.735 796.126 121.73C796.153 121.726 796.18 121.726 796.206 121.733C796.265 121.742 796.319 121.769 796.362 121.81C796.395 121.842 796.421 121.881 796.438 121.924C796.452 121.96 796.46 121.998 796.463 122.037C796.465 122.053 796.465 122.069 796.463 122.085L799.61 146.895L799.959 146.96L796.817 122.252C796.816 122.234 796.816 122.216 796.817 122.197C796.82 122.159 796.827 122.12 796.84 122.084C796.853 122.041 796.879 122.004 796.914 121.978C796.937 121.964 796.963 121.954 796.989 121.95C797.016 121.946 797.044 121.947 797.07 121.954C797.128 121.963 797.182 121.989 797.226 122.029C797.26 122.061 797.286 122.1 797.302 122.143C797.315 122.177 797.324 122.213 797.327 122.25C797.329 122.265 797.329 122.281 797.327 122.296L800.634 147.084ZM755.922 105.629L756.411 138.884L756.905 138.977L756.301 105.089C756.301 105.064 756.301 105.039 756.308 105.014C756.316 104.959 756.331 104.906 756.351 104.855C756.375 104.797 756.414 104.746 756.465 104.709C756.497 104.69 756.532 104.677 756.569 104.671C756.606 104.665 756.644 104.666 756.68 104.675C756.75 104.685 756.816 104.716 756.869 104.763C756.922 104.81 756.96 104.872 756.978 104.94C756.992 104.988 756.999 105.038 757 105.088C757.001 105.11 757.001 105.131 757 105.153L757.799 139.14L758.375 139.244L757.417 104.745C757.418 104.719 757.421 104.694 757.425 104.67C757.433 104.615 757.449 104.561 757.47 104.511C757.494 104.452 757.533 104.402 757.584 104.365C757.615 104.345 757.65 104.331 757.687 104.325C757.724 104.319 757.761 104.321 757.798 104.33C757.868 104.339 757.934 104.369 757.987 104.416C758.04 104.462 758.078 104.523 758.097 104.591C758.111 104.638 758.118 104.687 758.119 104.737C758.121 104.758 758.121 104.779 758.119 104.8L759.276 139.411L759.854 139.515L758.493 104.722C758.494 104.697 758.496 104.673 758.501 104.648C758.509 104.594 758.524 104.541 758.545 104.49C758.569 104.432 758.609 104.381 758.66 104.345C758.691 104.324 758.727 104.311 758.764 104.305C758.802 104.298 758.84 104.3 758.876 104.308C758.953 104.321 759.024 104.357 759.079 104.412C759.121 104.457 759.152 104.513 759.169 104.573C759.182 104.621 759.189 104.671 759.19 104.721C759.192 104.742 759.192 104.764 759.19 104.786L760.761 139.682L761.226 139.768L759.637 105.021C759.638 104.996 759.64 104.971 759.645 104.946C759.653 104.891 759.668 104.838 759.689 104.787C759.713 104.728 759.752 104.678 759.803 104.641C759.834 104.621 759.869 104.608 759.905 104.601C759.941 104.595 759.979 104.596 760.015 104.605C760.085 104.615 760.15 104.646 760.203 104.692C760.256 104.739 760.294 104.801 760.313 104.869C760.326 104.916 760.333 104.966 760.334 105.015C760.335 105.036 760.335 105.058 760.334 105.079L762.091 139.006V139.929L762.573 140.017L762.565 139.823L762.289 108.828C762.29 108.804 762.292 108.78 762.297 108.756C762.305 108.704 762.32 108.652 762.341 108.604C762.365 108.547 762.405 108.499 762.455 108.464C762.485 108.445 762.519 108.432 762.554 108.426C762.589 108.42 762.625 108.421 762.66 108.43C762.727 108.438 762.79 108.466 762.841 108.511C762.892 108.555 762.928 108.614 762.944 108.68C762.957 108.726 762.963 108.774 762.963 108.822C762.965 108.843 762.965 108.864 762.963 108.885L763.42 140.181L763.892 140.271L763.331 108.367C763.332 108.343 763.335 108.319 763.339 108.296C763.347 108.243 763.362 108.192 763.382 108.143C763.406 108.087 763.446 108.038 763.497 108.004C763.527 107.984 763.561 107.971 763.596 107.965C763.632 107.959 763.668 107.96 763.703 107.968C763.771 107.978 763.834 108.008 763.885 108.053C763.935 108.098 763.972 108.157 763.99 108.223C764.003 108.269 764.01 108.317 764.011 108.365C764.013 108.386 764.013 108.407 764.011 108.428L764.753 140.431L765.307 140.531L764.411 108.04C764.412 108.016 764.415 107.992 764.419 107.968C764.427 107.916 764.442 107.864 764.462 107.815C764.486 107.758 764.526 107.71 764.576 107.675C764.607 107.656 764.641 107.643 764.677 107.637C764.713 107.632 764.749 107.633 764.784 107.642C764.859 107.654 764.927 107.689 764.98 107.742C765.022 107.785 765.052 107.838 765.069 107.896C765.082 107.941 765.089 107.989 765.09 108.037C765.091 108.057 765.091 108.077 765.09 108.098L766.175 140.69L766.723 140.791L765.453 108.018C765.454 107.995 765.457 107.971 765.46 107.948C765.468 107.896 765.482 107.845 765.502 107.797C765.526 107.741 765.566 107.693 765.616 107.658C765.647 107.639 765.681 107.625 765.717 107.619C765.753 107.613 765.79 107.615 765.825 107.623C765.899 107.634 765.968 107.668 766.022 107.721C766.063 107.764 766.093 107.817 766.108 107.875C766.122 107.922 766.129 107.97 766.129 108.018C766.13 108.039 766.13 108.06 766.129 108.081L767.602 140.953L768.049 141.037L766.565 108.308C766.565 108.285 766.567 108.261 766.572 108.237C766.58 108.184 766.594 108.133 766.614 108.084C766.638 108.027 766.677 107.979 766.728 107.944C766.759 107.925 766.793 107.912 766.828 107.907C766.864 107.901 766.9 107.902 766.935 107.91C767.01 107.922 767.079 107.957 767.132 108.009C767.174 108.053 767.204 108.105 767.219 108.163C767.232 108.209 767.239 108.256 767.24 108.304C767.241 108.324 767.241 108.345 767.24 108.365L768.434 131.611C768.434 132.562 768.444 133.49 768.449 134.384C768.453 135.277 768.458 136.136 768.462 136.945C768.467 137.754 768.47 138.516 768.474 139.218C768.477 139.921 768.481 140.555 768.484 141.119L769.351 141.28L768.857 132.266L768.684 111.692C768.684 111.669 768.686 111.647 768.691 111.624C768.699 111.574 768.712 111.526 768.732 111.48C768.754 111.426 768.79 111.38 768.837 111.345C768.866 111.327 768.898 111.314 768.932 111.308C768.966 111.302 769.001 111.303 769.034 111.31C769.105 111.32 769.171 111.353 769.222 111.403C769.261 111.445 769.29 111.496 769.305 111.551C769.318 111.596 769.324 111.641 769.324 111.688C769.326 111.708 769.326 111.728 769.324 111.748L769.741 141.356L770.198 141.438L769.677 111.25C769.677 111.227 769.677 111.204 769.684 111.182C769.691 111.132 769.704 111.084 769.724 111.037C769.745 110.985 769.78 110.939 769.826 110.906C769.854 110.887 769.885 110.875 769.919 110.87C769.952 110.864 769.986 110.866 770.018 110.874C770.091 110.885 770.158 110.918 770.21 110.969C770.25 111.01 770.279 111.061 770.295 111.116C770.307 111.16 770.314 111.205 770.314 111.251C770.315 111.271 770.315 111.29 770.314 111.31L771.012 141.591L771.534 141.687L770.699 110.936C770.7 110.914 770.702 110.891 770.706 110.869C770.713 110.82 770.726 110.771 770.746 110.725C770.766 110.672 770.802 110.626 770.848 110.593C770.877 110.574 770.91 110.562 770.944 110.557C770.978 110.551 771.012 110.553 771.046 110.561C771.11 110.569 771.171 110.596 771.22 110.638C771.269 110.681 771.303 110.737 771.32 110.8C771.332 110.844 771.339 110.889 771.339 110.935C771.34 110.955 771.34 110.975 771.339 110.994L772.356 141.838L772.878 141.934L771.684 110.919C771.685 110.896 771.687 110.874 771.691 110.851C771.699 110.801 771.712 110.753 771.732 110.707C771.753 110.653 771.789 110.607 771.836 110.572C771.865 110.554 771.897 110.541 771.93 110.535C771.964 110.529 771.999 110.53 772.032 110.537C772.103 110.549 772.169 110.583 772.22 110.634C772.26 110.676 772.289 110.726 772.305 110.782C772.317 110.826 772.324 110.871 772.326 110.917C772.327 110.937 772.327 110.956 772.326 110.976L773.708 142.089L774.134 142.17L772.735 111.195C772.735 111.173 772.735 111.15 772.742 111.127C772.749 111.077 772.763 111.028 772.782 110.982C772.803 110.928 772.839 110.882 772.885 110.849C772.913 110.831 772.945 110.819 772.979 110.813C773.012 110.808 773.046 110.81 773.079 110.818C773.143 110.826 773.204 110.853 773.253 110.895C773.302 110.938 773.337 110.994 773.353 111.057C773.366 111.1 773.372 111.145 773.372 111.191C773.374 111.211 773.374 111.23 773.372 111.25L774.964 142.32L775.363 142.396L773.569 110.59C773.398 110.521 773.225 110.462 773.048 110.411C772.623 110.285 772.187 110.197 771.746 110.149C771.182 110.082 770.611 110.102 770.053 110.209C769.431 110.329 768.848 110.603 768.36 111.004C768.36 111.498 768.349 112.199 768.347 113.064C768.345 113.929 768.347 114.957 768.347 116.104C768.347 117.251 768.347 118.516 768.353 119.855C768.359 121.194 768.361 122.607 768.367 124.049L767.467 107.681C767.288 107.609 767.105 107.547 766.919 107.494C766.471 107.363 766.013 107.27 765.549 107.219C764.957 107.15 764.358 107.171 763.773 107.283C763.122 107.408 762.514 107.692 762.002 108.112C761.992 108.873 761.986 110.106 761.985 111.661C761.984 113.216 761.985 115.094 761.985 117.147C761.985 119.2 761.996 121.426 762.006 123.679C762.015 125.931 762.023 128.209 762.032 130.367L760.601 104.378C760.414 104.302 760.224 104.237 760.031 104.183C759.566 104.045 759.09 103.949 758.608 103.896C757.993 103.823 757.37 103.845 756.761 103.962C756.084 104.091 755.45 104.388 754.917 104.825C754.903 106.012 754.899 108.296 754.904 111.16C754.908 114.025 754.918 117.465 754.932 120.971C754.946 124.476 754.963 128.043 754.979 131.158C754.995 134.272 755.009 136.933 755.018 138.628L755.512 138.72L755.22 105.568C755.221 105.543 755.224 105.518 755.228 105.494C755.236 105.439 755.252 105.386 755.274 105.336C755.297 105.278 755.337 105.227 755.388 105.19C755.419 105.17 755.454 105.156 755.491 105.15C755.528 105.143 755.566 105.144 755.602 105.153C755.68 105.165 755.751 105.202 755.807 105.256C755.849 105.301 755.88 105.356 755.897 105.416C755.91 105.465 755.918 105.514 755.919 105.564C755.921 105.586 755.922 105.607 755.922 105.629Z" fill="#1B023F"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M1426.43 100.596H1440V184.005L1440 184.005V185L0.00390623 185L0 185V100.658H13.5806L13.6063 99.9725L13.2013 99.8635C12.9869 99.8082 12.768 99.7717 12.5473 99.7545C12.2093 99.7545 11.8603 99.5485 11.9243 99.3945C11.9463 99.3186 11.8603 99.2515 11.6953 99.2435C11.6075 99.2425 11.521 99.2224 11.4417 99.1847C11.3624 99.1469 11.2924 99.0924 11.2362 99.0249C11.1801 98.9574 11.1393 98.8784 11.1167 98.7936C11.0941 98.7088 11.0903 98.62 11.1053 98.5336C11.1158 98.445 11.1086 98.3552 11.0842 98.2694C11.0598 98.1836 11.0187 98.1034 10.9633 98.0336C10.8737 97.9109 10.8228 97.7641 10.8173 97.6123C10.8118 97.4604 10.8518 97.3104 10.9323 97.1815C11.0073 97.0415 11.0073 96.9745 10.9323 96.9745C10.7783 96.9745 10.7893 96.5825 10.9323 96.4825C11.0073 96.4515 11.0293 96.2426 11.0073 96.0246C10.9779 95.8027 11.0079 95.577 11.0943 95.3705C11.1769 95.1636 11.2324 94.9468 11.2593 94.7255C11.2653 94.556 11.3062 94.3896 11.3793 94.2365C11.5143 93.7774 11.5181 93.2897 11.3903 92.8285C11.3113 92.8105 11.3673 92.6865 11.5213 92.5105C11.6412 92.3968 11.7306 92.2548 11.7813 92.0975C11.7813 92.0106 11.8173 91.9435 11.8593 91.9435C11.9013 91.9435 11.9573 91.7025 11.9683 91.4095C11.9733 91.153 12.0174 90.8987 12.0993 90.6555C12.13 90.6053 12.1488 90.5488 12.1541 90.4902C12.1595 90.4316 12.1514 90.3725 12.1303 90.3176C12.0227 89.7482 12.0878 89.1596 12.3173 88.6275C12.4903 88.3876 12.5013 88.2355 12.4373 87.5355C12.3573 87.1699 12.3794 86.7894 12.5013 86.4355C12.6074 86.1346 12.6483 85.8145 12.6213 85.4965C12.6103 85.1355 12.6333 84.3955 12.6663 83.8705C12.6993 83.3455 12.7633 82.3645 12.8083 81.7085C12.8092 81.2824 12.8599 80.8579 12.9593 80.4435C13.047 80.0317 13.077 79.6096 13.0483 79.1895C13.0424 78.598 13.0826 78.0069 13.1683 77.4215C13.2324 77.0138 13.2689 76.6022 13.2773 76.1895C13.2788 75.8074 13.319 75.4265 13.3973 75.0525C13.4773 74.5577 13.5314 74.059 13.5593 73.5585C13.6373 72.0526 13.7123 71.4855 13.8663 71.3125C13.9651 71.1737 14.0388 71.0187 14.0843 70.8545C14.1813 70.4495 14.5083 70.4605 14.5953 70.8855C14.6293 71.0615 14.7263 71.2035 14.8133 71.2035C15.0333 71.2035 15.1093 71.4795 15.1623 72.3795C15.1885 72.7754 15.24 73.1692 15.3163 73.5585C15.3741 73.7769 15.4076 74.0009 15.4163 74.2265C15.4163 74.3885 15.4633 74.5195 15.5163 74.5195C15.6473 74.5195 15.7253 75.1726 15.6253 75.4465C15.5999 75.5355 15.5927 75.6286 15.6042 75.7204C15.6157 75.8121 15.6457 75.9007 15.6923 75.9805C15.7673 76.1455 15.8123 76.3215 15.7563 76.3635C15.7479 76.8084 15.8155 77.2514 15.9563 77.6735C16.0315 78.0263 16.0819 78.3838 16.1073 78.7435C16.1853 79.4195 16.2923 79.8665 16.3923 79.8665C16.4363 79.8665 16.4483 79.9636 16.4143 80.0845C16.3803 80.2056 16.4143 80.2915 16.4893 80.2915C16.5873 80.2915 16.5873 80.3345 16.5123 80.4345C16.3923 80.5885 16.4673 81.1555 16.6213 81.1555C16.6743 81.1555 16.6743 81.2195 16.6213 81.3315C16.5853 81.3889 16.5672 81.4556 16.5691 81.5232C16.5711 81.5909 16.5931 81.6564 16.6323 81.7115C16.7293 81.8695 16.7183 81.9366 16.5983 82.0116C16.4783 82.0866 16.4653 82.1405 16.5653 82.2405C16.6543 82.3155 16.6743 82.5295 16.6323 82.8295C16.5873 83.1675 16.6093 83.2985 16.7073 83.2985C16.8053 83.2985 16.8273 83.4495 16.7853 83.9075C16.7478 84.2637 16.7545 84.6231 16.8053 84.9776C16.8503 85.2176 16.8503 85.4465 16.8053 85.4575C16.7799 85.8229 16.8634 86.1876 17.0453 86.5055C17.1132 86.5981 17.1547 86.7073 17.1653 86.8215C17.2019 86.9749 17.2858 87.1127 17.4053 87.2155C17.6013 87.3575 17.6013 87.3685 17.3723 87.5755C17.0873 87.8395 17.0783 88.0005 17.1873 89.5395C17.2513 90.4665 17.3703 90.8915 17.5703 90.8915C17.6213 90.8915 17.5793 90.9825 17.4703 91.0915C17.2943 91.2645 17.2613 91.4296 17.2833 92.0415C17.2844 92.3399 17.3247 92.6367 17.4033 92.9245C17.4828 93.1749 17.5232 93.4359 17.5233 93.6985C17.5111 93.985 17.5805 94.269 17.7233 94.5175C17.8332 94.7498 17.8902 95.0036 17.8902 95.2605C17.8902 95.5175 17.8332 95.7713 17.7233 96.0035C17.6033 96.2375 17.5833 96.3956 17.6703 96.5376C17.7694 96.9617 17.7107 97.4074 17.5053 97.7915C17.393 98.01 17.3058 98.2405 17.2453 98.4785C17.1033 99.0455 16.8523 99.4505 16.6453 99.4505C16.5673 99.4505 16.4913 99.4835 16.4913 99.5255C16.4913 99.7235 15.8573 100.04 15.3793 100.082L14.8433 100.138L14.8492 100.658H21.661C21.662 100.536 21.6594 100.414 21.6533 100.292C21.6303 99.9426 21.5973 99.8975 21.2703 99.8335C20.9421 99.7197 20.6506 99.5199 20.426 99.2551C20.2014 98.9902 20.0519 98.6698 19.9933 98.3275C19.9707 98.1078 19.9112 97.8934 19.8173 97.6935C19.7193 97.5845 19.7083 97.3775 19.7083 96.6125C19.7083 96.4925 19.6783 96.1015 19.6443 95.7295C19.5883 95.2825 19.6113 95.0115 19.6973 94.9115C19.8045 94.6679 19.8571 94.4037 19.8513 94.1375C19.8584 93.9285 19.8808 93.7203 19.9183 93.5145C19.9898 93.0262 19.9861 92.5298 19.9073 92.0425C19.8743 91.9861 19.8569 91.9219 19.8569 91.8566C19.8569 91.7912 19.8743 91.727 19.9073 91.6705C20.0074 91.2149 20.0653 90.7509 20.0803 90.2845L20.0828 90.2414C20.1474 89.1563 20.1524 89.0723 19.9373 88.8985C19.7193 88.7225 19.7193 88.7116 19.9063 88.5806C20.2059 88.1064 20.3432 87.5476 20.2972 86.9885C20.2837 86.0459 20.3506 85.1038 20.4973 84.1725C20.5046 84.1604 20.5092 84.1468 20.5109 84.1328C20.5126 84.1187 20.5113 84.1044 20.507 84.0909C20.5028 84.0774 20.4956 84.0649 20.4862 84.0543C20.4768 84.0438 20.4652 84.0353 20.4523 84.0295C20.3763 83.9965 20.3763 83.8096 20.4633 83.4296C20.5235 83.1943 20.5414 82.9501 20.5162 82.7085C20.5 82.6721 20.4957 82.6314 20.5037 82.5923C20.5118 82.5532 20.5319 82.5176 20.5613 82.4905C20.5756 82.4848 20.5886 82.4761 20.5993 82.465C20.6101 82.4538 20.6184 82.4406 20.6237 82.426C20.6289 82.4115 20.6311 82.396 20.63 82.3806C20.6289 82.3652 20.6245 82.3502 20.6172 82.3365C20.5924 82.1967 20.6069 82.0526 20.6592 81.9205C20.7311 81.6097 20.7713 81.2924 20.7792 80.9735C20.7791 80.7306 20.8083 80.4885 20.8663 80.2525C20.9188 80.1128 20.9488 79.9657 20.9553 79.8165C20.9673 79.6405 21.0082 79.3025 21.0422 79.0735C21.1057 78.7725 21.121 78.4633 21.0873 78.1575C21.1046 77.7686 21.1551 77.3819 21.2383 77.0015C21.3336 76.5264 21.3924 76.0447 21.4142 75.5605C21.4142 74.9175 21.5123 74.5015 21.6323 74.5795C21.6773 74.6095 21.7533 74.4895 21.7863 74.3165C21.8843 73.8885 22.0903 74.0005 22.2443 74.5565C22.4269 75.2811 22.5252 76.0244 22.5372 76.7715C22.5626 77.2408 22.6478 78.3953 22.7227 79.4093L22.7372 79.6066C22.8152 80.6636 22.8793 81.7445 22.8683 82.0065C22.8469 82.2268 22.8696 82.4492 22.9352 82.6605C23.0911 83.9826 23.158 85.3136 23.1352 86.6445C23.0929 87.0478 23.13 87.4555 23.2443 87.8445C23.3423 87.9535 23.3533 88.2475 23.3113 88.8145C23.2488 89.16 23.2708 89.5154 23.3752 89.8505C23.4774 90.1864 23.5293 90.5355 23.5292 90.8866C23.4586 91.6267 23.5709 92.3729 23.8562 93.0595C23.9982 93.2995 24.0402 93.4615 23.9762 93.5285C23.9137 93.9362 23.9393 94.3526 24.0513 94.7495C24.4873 97.4115 24.4222 98.6135 23.8223 99.1915C23.4843 99.5075 22.7103 99.7365 22.7103 99.5185C22.7103 99.4655 22.6543 99.4545 22.5903 99.4965C22.4898 99.8753 22.4652 100.27 22.5178 100.658H27.363C27.4409 100.529 27.5458 100.418 27.6712 100.333C27.9002 100.182 27.9452 100.081 27.9452 99.6005C27.9452 99.0447 27.9452 99.0335 27.5403 98.9135C27.3132 98.856 27.1152 98.7168 26.9842 98.5225C26.9092 98.3795 26.8002 98.2595 26.7662 98.2595C26.6992 98.2595 26.6012 97.9545 26.3302 96.8065C26.1882 96.1975 26.1432 95.4765 26.2522 95.4765C26.2992 95.4765 26.2743 95.3115 26.1993 95.1275C26.0413 94.7446 26.0412 94.6475 26.2412 93.3815C26.3013 93.065 26.3201 92.742 26.2972 92.4205C26.2642 92.3335 26.2862 92.2665 26.3392 92.2665C26.4302 91.6259 26.4239 90.9752 26.3202 90.3365C26.2954 90.2248 26.3143 90.1077 26.3732 90.0095C26.4787 89.5924 26.5269 89.1627 26.5162 88.7325C26.5502 87.7685 26.5272 87.4685 26.3962 87.2685C26.3102 87.1405 26.2763 87.0285 26.3323 87.0285C26.4932 87.0285 26.5912 86.5925 26.4602 86.4615C26.2982 86.2885 26.3292 86.1535 26.5052 86.2325L26.5161 86.2374C26.6812 86.3122 26.6821 86.3126 26.7232 84.9675C26.7342 84.4225 26.7042 84.0285 26.6482 84.0285C26.5922 84.0285 26.5802 83.9755 26.6252 83.8975C26.7612 83.6905 26.7832 83.5285 26.8252 82.3165C26.8482 81.7045 26.8933 81.1035 26.9153 80.9835C26.928 80.9321 26.9276 80.8783 26.9139 80.827C26.9003 80.7758 26.8739 80.7288 26.8373 80.6905C26.7503 80.6345 26.7503 80.5925 26.8373 80.5255C26.9643 80.4495 27.0642 79.8705 27.1642 78.7255C27.1814 78.4521 27.2206 78.1334 27.2465 77.9232C27.2537 77.8644 27.2599 77.814 27.2643 77.7755C27.2794 77.6425 27.3019 77.2792 27.3267 76.8796L27.3512 76.4875C27.3762 75.9517 27.4303 75.4175 27.5132 74.8875C27.5692 74.5355 27.6252 74.1555 27.6252 74.0355C27.5805 73.3768 27.6728 72.7159 27.8962 72.0945C27.9902 71.9917 28.0481 71.8612 28.0612 71.7225C28.0612 71.6026 28.1142 71.5155 28.1812 71.5495C28.4402 71.6335 28.5942 72.4825 28.7032 74.4495C28.7592 75.5725 28.8353 76.9155 28.8683 77.4495C28.9013 77.9835 28.9342 78.7355 28.9432 79.1285C28.9522 79.5215 28.9962 79.8135 29.0522 79.7845C29.1082 79.7555 29.1192 79.8425 29.0632 79.9845C28.9762 80.2365 28.9762 80.2965 29.0632 81.0965C29.1192 81.5355 29.2062 83.6195 29.2922 86.4545C29.2902 87.083 29.338 87.7106 29.4352 88.3315C29.5128 88.7486 29.5494 89.1723 29.5442 89.5965C29.5552 90.1555 29.5782 90.7566 29.6002 90.9296C29.6372 91.2336 29.717 91.5309 29.8372 91.8125C29.895 92.1089 29.9101 92.4119 29.8822 92.7125C29.8534 92.9774 29.8831 93.2454 29.9692 93.4975C30.0025 93.5216 30.0264 93.5566 30.0366 93.5964C30.0469 93.6362 30.0428 93.6784 30.0252 93.7155C29.9995 93.9385 30.0174 94.1644 30.0782 94.3805C30.2799 95.1245 30.3141 95.9038 30.1782 96.6626C30.0672 96.6626 30.0672 96.6855 30.1672 96.7495C30.2542 96.7935 30.2652 96.8785 30.1982 96.9785C30.1263 97.1354 30.0892 97.306 30.0892 97.4785C30.0892 97.8915 30.0032 98.1545 29.8492 98.1545C29.7962 98.1545 29.6532 98.2775 29.5332 98.4285C29.4132 98.5795 29.2902 98.6795 29.2592 98.6465C29.2282 98.6135 29.1212 98.6356 29.0212 98.6886C28.8792 98.7686 28.8122 98.7555 28.7702 98.6685C28.7482 98.5905 28.7142 98.8865 28.7142 99.3115C28.7032 99.9235 28.7372 100.086 28.8572 100.086C28.9542 100.086 28.9992 100.142 28.9432 100.262C28.9284 100.31 28.9302 100.363 28.9483 100.41C28.9664 100.458 28.9998 100.498 29.0432 100.525C29.0985 100.549 29.1343 100.596 29.1532 100.658H33.4999L53.6598 118.12L53.7199 110.637L53.9829 107.379L53.854 106.079L53.4649 105.035C53.4649 105.035 53.854 104.923 53.854 104.572C53.8383 104.287 53.793 104.004 53.719 103.728C53.719 103.728 53.854 103.051 53.854 102.876C53.854 102.701 54.372 102.161 54.372 102.161C54.372 102.161 54.0719 101.861 54.2459 101.643C54.3775 101.333 54.4456 100.999 54.4459 100.662L56.398 100.654V102.024H56.9869V103.267H61.0969L61.4229 103.785H61.8139C61.8484 103.59 61.8722 103.394 61.8849 103.196V102.152C62.0798 102.144 62.2738 102.123 62.4659 102.089C62.6799 102.048 62.9289 102.024 62.9289 102.024V101.243H64.2289V102.024H68.9909V102.479H69.9629L70.1629 101.961C70.39 101.789 70.6301 101.634 70.8809 101.498C71.0558 101.482 71.2319 101.482 71.4069 101.498C71.4069 101.498 71.1909 102.613 71.4069 102.613H76.0328V104.374H77.2768V104.7H77.5398L77.4748 105.089L76.7599 105.289V123.058H80.4789V108.809L80.0788 108.42L79.8868 108.031L80.9938 107.377L81.2568 106.398C81.2568 106.398 81.3569 106.072 81.5829 106.072H88.2328V107.772H89.6738L88.8848 108.553V122.974H91.1698V123.058H98.4507L111.976 126.584C111.993 126.241 112.072 125.902 112.209 125.583C112.382 125.343 112.393 125.191 112.329 124.491C112.249 124.125 112.272 123.744 112.393 123.391C112.5 123.09 112.54 122.77 112.513 122.452C112.502 122.091 112.525 121.351 112.558 120.826C112.591 120.301 112.655 119.32 112.7 118.664C112.701 118.238 112.752 117.813 112.851 117.399C112.939 116.987 112.969 116.565 112.94 116.145C112.935 115.553 112.975 114.962 113.06 114.377C113.125 113.969 113.161 113.557 113.169 113.145C113.171 112.763 113.211 112.382 113.289 112.008C113.369 111.513 113.424 111.014 113.451 110.514C113.529 109.008 113.604 108.441 113.758 108.268C113.857 108.129 113.931 107.974 113.976 107.81C114.073 107.405 114.4 107.416 114.487 107.841C114.521 108.017 114.618 108.159 114.705 108.159C114.925 108.159 115.001 108.435 115.054 109.335C115.081 109.73 115.132 110.124 115.208 110.514C115.266 110.732 115.3 110.956 115.308 111.182C115.308 111.344 115.355 111.475 115.408 111.475C115.539 111.475 115.617 112.128 115.517 112.402C115.492 112.491 115.485 112.584 115.496 112.675C115.508 112.767 115.538 112.856 115.584 112.936C115.659 113.101 115.704 113.277 115.648 113.319C115.64 113.763 115.708 114.207 115.848 114.629C115.924 114.981 115.974 115.339 115.999 115.699C116.077 116.375 116.184 116.822 116.284 116.822C116.328 116.822 116.34 116.919 116.306 117.04C116.272 117.161 116.306 117.247 116.381 117.247C116.479 117.247 116.479 117.29 116.404 117.39C116.284 117.544 116.359 118.111 116.513 118.111C116.566 118.111 116.566 118.175 116.513 118.287C116.478 118.344 116.459 118.411 116.461 118.478C116.463 118.546 116.485 118.611 116.524 118.667C116.621 118.825 116.61 118.892 116.49 118.967C116.37 119.042 116.357 119.096 116.457 119.196C116.546 119.271 116.566 119.485 116.524 119.785C116.479 120.123 116.501 120.254 116.599 120.254C116.697 120.254 116.719 120.405 116.677 120.863C116.64 121.219 116.647 121.578 116.697 121.933C116.742 122.173 116.742 122.402 116.697 122.413C116.672 122.778 116.756 123.143 116.937 123.461C117.005 123.553 117.047 123.662 117.057 123.777C117.094 123.93 117.178 124.068 117.297 124.171C117.493 124.313 117.493 124.324 117.264 124.531C116.979 124.795 116.97 124.956 117.079 126.495C117.143 127.422 117.262 127.847 117.462 127.847C117.506 127.847 117.482 127.913 117.406 128L119.8 128.624C119.9 128.169 119.958 127.706 119.972 127.24L119.975 127.196C120.04 126.111 120.045 126.027 119.829 125.854C119.611 125.678 119.611 125.667 119.798 125.536C120.098 125.061 120.235 124.503 120.189 123.944C120.176 123.001 120.243 122.059 120.389 121.128C120.397 121.115 120.401 121.102 120.403 121.088C120.405 121.074 120.403 121.06 120.399 121.046C120.395 121.032 120.388 121.02 120.378 121.009C120.369 120.999 120.357 120.99 120.344 120.985C120.268 120.952 120.268 120.765 120.355 120.385C120.416 120.149 120.434 119.905 120.408 119.664C120.392 119.627 120.388 119.586 120.396 119.547C120.404 119.508 120.424 119.473 120.453 119.446C120.468 119.44 120.481 119.431 120.491 119.42C120.502 119.409 120.511 119.396 120.516 119.381C120.519 119.372 120.521 119.363 120.522 119.354L120.522 119.348C120.523 119.344 120.522 119.34 120.522 119.336C120.521 119.32 120.517 119.305 120.509 119.292C120.485 119.152 120.499 119.008 120.551 118.876C120.623 118.565 120.663 118.248 120.671 117.929C120.671 117.686 120.701 117.444 120.758 117.208C120.811 117.068 120.841 116.921 120.847 116.772C120.859 116.596 120.9 116.258 120.934 116.029C120.998 115.728 121.013 115.418 120.979 115.113C120.997 114.724 121.047 114.337 121.13 113.957C121.226 113.481 121.285 113 121.306 112.516C121.306 111.873 121.404 111.457 121.524 111.535C121.569 111.565 121.645 111.445 121.678 111.272C121.776 110.844 121.982 110.956 122.136 111.512C122.319 112.236 122.417 112.979 122.429 113.727C122.455 114.196 122.54 115.352 122.615 116.366L122.629 116.562C122.707 117.619 122.771 118.7 122.76 118.962C122.739 119.182 122.762 119.404 122.827 119.616C122.983 120.938 123.05 122.269 123.027 123.6C122.985 124.003 123.022 124.411 123.136 124.8C123.234 124.909 123.245 125.203 123.203 125.77C123.141 126.115 123.163 126.47 123.267 126.806C123.37 127.141 123.422 127.491 123.421 127.842C123.358 128.508 123.443 129.179 123.668 129.808L126.099 130.556L126.133 130.337C126.194 130.02 126.212 129.697 126.189 129.376C126.156 129.289 126.178 129.222 126.231 129.222C126.322 128.581 126.316 127.93 126.212 127.292C126.188 127.18 126.206 127.063 126.265 126.965C126.371 126.547 126.419 126.118 126.408 125.688C126.442 124.724 126.419 124.424 126.288 124.224C126.202 124.096 126.168 123.984 126.224 123.984C126.385 123.984 126.483 123.548 126.352 123.417C126.19 123.244 126.221 123.109 126.397 123.188L126.408 123.193C126.573 123.267 126.574 123.268 126.615 121.923C126.626 121.378 126.596 120.984 126.54 120.984C126.484 120.984 126.472 120.931 126.517 120.853C126.653 120.646 126.675 120.484 126.717 119.272C126.74 118.66 126.785 118.059 126.807 117.939C126.82 117.887 126.82 117.833 126.806 117.782C126.792 117.731 126.766 117.684 126.729 117.646C126.642 117.59 126.642 117.548 126.729 117.481C126.856 117.405 126.956 116.826 127.056 115.681C127.074 115.407 127.113 115.089 127.139 114.878C127.146 114.82 127.152 114.769 127.156 114.731C127.172 114.598 127.194 114.234 127.219 113.835L127.22 113.814C127.228 113.691 127.236 113.566 127.243 113.443C127.268 112.907 127.322 112.373 127.405 111.843C127.461 111.491 127.517 111.111 127.517 110.991C127.473 110.332 127.565 109.671 127.788 109.05C127.882 108.947 127.94 108.816 127.953 108.678C127.953 108.558 128.006 108.471 128.073 108.505C128.332 108.589 128.486 109.438 128.595 111.405C128.651 112.528 128.727 113.871 128.76 114.405C128.793 114.939 128.826 115.691 128.835 116.084C128.844 116.477 128.888 116.769 128.944 116.74C129 116.711 129.011 116.798 128.955 116.94C128.868 117.192 128.868 117.252 128.955 118.052C129.011 118.491 129.098 120.575 129.184 123.41C129.182 124.038 129.23 124.666 129.327 125.287C129.405 125.704 129.442 126.127 129.436 126.552C129.447 127.111 129.47 127.712 129.492 127.885C129.529 128.189 129.609 128.486 129.729 128.768C129.787 129.064 129.802 129.367 129.774 129.668C129.746 129.932 129.775 130.2 129.861 130.453C129.895 130.477 129.919 130.512 129.929 130.551C129.939 130.591 129.935 130.633 129.917 130.671C129.892 130.894 129.91 131.12 129.97 131.336C130.01 131.482 130.043 131.63 130.07 131.779L178.051 146.554L179.214 146.565V145.871H178.872V144.739L179.806 144.747V142.926L181.079 142.936V132.514L186.616 132.545V142.982L187.893 142.993V144.814L188.832 144.822V145.953H188.493V146.653L189.726 146.664V147.214L190.71 147.227V150.397L219.251 158.498L219.336 158.492C219.626 158.474 219.946 158.453 220.243 158.453C220.493 158.446 220.744 158.469 220.986 158.522C221.12 158.555 221.258 158.572 221.398 158.571C221.656 158.561 221.912 158.529 222.16 158.472C222.673 158.366 223.2 158.312 223.729 158.311C224.329 158.311 224.81 158.335 225.157 158.351L225.255 158.356C225.426 158.364 225.565 158.37 225.679 158.37C225.779 158.37 226.026 158.37 226.102 158.272C226.242 158.171 226.407 158.095 226.586 158.05C226.765 158.004 226.954 157.99 227.141 158.007C227.182 158.007 227.223 158.008 227.264 158.01L227.298 158.011L227.337 158.013C227.385 158.016 227.432 158.019 227.48 158.023C227.918 158.064 227.99 158.191 228.062 158.325C228.09 158.399 228.146 158.463 228.221 158.51C228.297 158.557 228.389 158.584 228.485 158.587C228.543 158.593 228.602 158.596 228.66 158.596C228.84 158.591 229.02 158.576 229.197 158.549C229.489 158.507 229.785 158.485 230.082 158.482C230.289 158.482 230.495 158.493 230.7 158.515C231.094 158.557 231.414 158.571 231.675 158.581C232.233 158.606 232.324 158.619 232.324 158.752C232.33 158.86 232.368 158.965 232.436 159.058C232.517 159.187 232.507 159.195 232.398 159.22C232.007 159.306 232.081 160.239 232.16 160.788C232.16 160.82 232.219 160.844 232.283 160.844H240.757C244.917 160.844 247.116 161.191 247.116 161.848C247.116 162.142 247.495 162.227 247.841 162.251C247.88 162.251 247.92 162.252 247.961 162.252C248.489 162.271 249.017 162.225 249.531 162.115C250.191 161.932 255.572 161.334 257.084 161.23C257.808 161.182 258.275 161.111 258.685 161.047C259.152 160.966 259.626 160.924 260.1 160.922C260.556 160.927 261.005 161.023 261.415 161.204C261.706 161.336 262.023 161.411 262.348 161.424C262.5 161.424 262.658 161.436 262.825 161.448L262.855 161.45L262.912 161.454C263.093 161.467 263.277 161.479 263.486 161.479C264.003 161.481 264.516 161.386 264.992 161.199C265.635 160.954 265.683 160.871 265.646 160.724C265.631 160.658 265.612 160.575 265.834 160.38C265.928 160.296 266.015 160.204 266.092 160.105C266.277 159.873 266.316 159.825 268.182 159.647L268.513 159.615V159.362H270.331V158.889H327.966V159.362H329.784V159.835H331.085V160.763L331.112 160.763L331.134 160.764C331.16 160.764 331.187 160.765 331.212 160.766C331.253 160.768 331.294 160.769 331.334 160.769H331.634C331.666 160.769 331.696 160.769 331.725 160.768L331.778 160.767C331.82 160.765 331.862 160.764 331.905 160.764H332.305C332.386 160.764 332.468 160.765 332.551 160.767L332.625 160.768L332.673 160.768L332.727 160.769C332.753 160.769 332.78 160.769 332.806 160.769C333.487 160.769 333.801 160.721 333.884 160.6C333.961 159.901 333.965 159.198 333.894 158.498C333.893 158.495 333.893 158.492 333.891 158.489C333.89 158.483 333.887 158.477 333.883 158.472C333.877 158.464 333.869 158.457 333.86 158.453C333.82 158.43 333.784 158.403 333.752 158.373H335.413C335.456 158.373 335.504 158.373 335.556 158.372C335.624 158.371 335.701 158.369 335.786 158.364C335.963 158.356 336.165 158.35 336.357 158.35C336.578 158.329 336.801 158.354 337.01 158.422C337.517 158.589 338.059 158.65 338.595 158.6C338.784 158.6 339.02 158.583 339.273 158.564L339.335 158.56C339.625 158.538 339.945 158.515 340.241 158.515C340.492 158.507 340.743 158.533 340.985 158.593C341.118 158.631 341.257 158.65 341.396 158.649C341.655 158.638 341.91 158.601 342.159 158.537C342.671 158.416 343.199 158.354 343.728 158.354C344.328 158.354 344.809 158.38 345.156 158.399L345.254 158.404C345.425 158.413 345.563 158.42 345.677 158.42C345.777 158.42 346.025 158.42 346.101 158.309C346.241 158.194 346.406 158.108 346.585 158.057C346.764 158.005 346.953 157.988 347.14 158.008C347.207 158.009 347.274 158.011 347.34 158.015C347.387 158.018 347.433 158.022 347.479 158.027C347.917 158.073 347.988 158.217 348.06 158.369C348.088 158.453 348.144 158.527 348.22 158.58C348.296 158.633 348.388 158.664 348.484 158.667C348.504 158.669 348.524 158.671 348.544 158.673L348.567 158.674C348.586 158.676 348.605 158.676 348.625 158.677L348.639 158.677L348.659 158.677C348.839 158.672 349.018 158.654 349.195 158.624C349.488 158.576 349.784 158.551 350.081 158.548C350.288 158.548 350.494 158.561 350.699 158.585C351.093 158.633 351.412 158.649 351.674 158.661C352.232 158.689 352.323 158.704 352.323 158.855C352.329 158.977 352.367 159.097 352.434 159.203C352.515 159.348 352.505 159.358 352.397 159.386C352.006 159.484 352.08 160.544 352.159 161.168C352.159 161.205 352.218 161.232 352.282 161.232H360.756C364.691 161.232 366.872 161.585 367.095 162.255C367.578 162.263 368.06 162.216 368.531 162.115C369.19 161.932 374.571 161.334 376.083 161.23C376.807 161.182 377.275 161.111 377.685 161.047C378.152 160.966 378.625 160.924 379.1 160.922C379.555 160.927 380.004 161.023 380.414 161.204C380.705 161.336 381.023 161.411 381.347 161.424C381.5 161.424 381.657 161.436 381.824 161.448L381.855 161.45C382.055 161.464 382.255 161.479 382.485 161.479C383.003 161.481 383.516 161.386 383.992 161.199C384.634 160.954 384.683 160.871 384.646 160.724C384.631 160.658 384.612 160.575 384.833 160.38C384.928 160.296 385.014 160.204 385.091 160.105C385.277 159.873 385.316 159.825 387.181 159.647L387.512 159.615V159.362H389.33V158.889H446.965V159.362H448.784V159.835H450.085V160.763L450.115 160.763L450.143 160.764C450.166 160.764 450.189 160.765 450.212 160.766C450.253 160.768 450.293 160.769 450.333 160.769H450.633C450.685 160.769 450.732 160.768 450.777 160.767C450.82 160.765 450.862 160.764 450.905 160.764H451.305C451.385 160.764 451.468 160.765 451.551 160.767L451.554 160.767C451.637 160.768 451.722 160.769 451.805 160.769C452.487 160.769 452.8 160.721 452.883 160.6C452.961 159.901 452.964 159.198 452.893 158.498C452.892 158.489 452.888 158.48 452.882 158.472C452.879 158.468 452.876 158.464 452.872 158.461L452.868 158.458L452.865 158.456L452.863 158.454L452.859 158.453C452.82 158.43 452.784 158.403 452.751 158.373H454.413C454.441 158.373 454.471 158.373 454.504 158.373C454.528 158.372 454.554 158.372 454.58 158.372C454.642 158.371 454.711 158.368 454.785 158.364C454.825 158.362 454.866 158.36 454.907 158.359C454.949 158.357 454.991 158.356 455.034 158.355C455.141 158.352 455.25 158.35 455.357 158.35C455.577 158.329 455.8 158.354 456.009 158.422C456.516 158.589 457.058 158.65 457.594 158.6C457.783 158.6 458.019 158.583 458.273 158.564L458.335 158.56C458.625 158.538 458.944 158.515 459.241 158.515C459.492 158.507 459.742 158.533 459.985 158.593C460.118 158.631 460.257 158.65 460.396 158.649C460.654 158.638 460.91 158.601 461.159 158.537C461.671 158.416 462.198 158.354 462.727 158.354C463.328 158.354 463.808 158.38 464.155 158.399L464.253 158.404C464.424 158.413 464.563 158.42 464.677 158.42C464.777 158.42 465.024 158.42 465.1 158.309C465.24 158.194 465.405 158.108 465.584 158.057C465.763 158.005 465.953 157.988 466.139 158.008C466.252 158.009 466.366 158.015 466.478 158.027C466.917 158.073 466.988 158.217 467.06 158.369C467.088 158.453 467.144 158.527 467.22 158.58C467.296 158.633 467.388 158.664 467.483 158.667C467.541 158.674 467.6 158.677 467.659 158.677C467.839 158.672 468.018 158.654 468.195 158.624C468.487 158.576 468.784 158.551 469.081 158.548C469.287 158.548 469.493 158.561 469.698 158.585C470.093 158.633 470.412 158.649 470.673 158.661C471.232 158.689 471.323 158.704 471.323 158.855C471.328 158.977 471.366 159.097 471.434 159.203C471.515 159.348 471.505 159.358 471.397 159.386C471.005 159.484 471.079 160.544 471.158 161.168C471.158 161.205 471.218 161.232 471.282 161.232H479.755C483.915 161.232 486.114 161.626 486.114 162.373C486.114 162.842 486.859 162.842 487.215 162.842C487.35 162.842 487.493 162.842 487.645 162.834C487.796 162.827 487.96 162.827 488.121 162.827H488.125C488.426 162.787 488.732 162.808 489.024 162.887C489.315 162.966 489.584 163.102 489.813 163.285C490.12 163.634 489.98 164.267 489.83 164.934C489.545 166.198 489.23 167.63 491.527 168.066C492.54 168.279 493.494 168.682 494.328 169.251C494.66 169.477 494.97 169.728 495.255 170H525.004L525.002 163.271L529.29 163.779L530.763 163.213L534.935 165.845H549.337L555.568 162.266C555.568 162.266 569.841 163.115 576.832 162.266C581.584 161.689 584.575 160.387 586.003 159.612V158.963C586.003 156.407 586.431 155.364 586.797 155.246C587.005 155.18 587.108 154.982 587.205 154.79C587.336 154.535 587.461 154.292 587.809 154.292C588.172 154.3 588.533 154.333 588.89 154.391C589.179 154.439 589.473 154.467 589.767 154.476C589.792 154.476 592.276 154.417 592.44 153.919C592.491 153.786 592.583 153.667 592.706 153.576C592.829 153.485 592.978 153.425 593.137 153.403C593.16 153.403 593.189 153.404 593.225 153.406C593.251 153.407 593.281 153.408 593.315 153.409C593.449 153.415 593.634 153.422 593.836 153.422C594.273 153.446 594.711 153.384 595.117 153.242C597.141 152.742 599.199 152.353 601.279 152.079C601.721 152.03 602.158 151.951 602.586 151.841C602.959 151.736 603.348 151.681 603.74 151.678C604.135 151.692 604.513 151.822 604.812 152.046C605.025 152.21 605.291 152.312 605.573 152.336C605.712 152.34 605.85 152.351 605.987 152.37C606.158 152.393 606.329 152.405 606.502 152.408C606.946 152.404 607.377 152.275 607.731 152.039C608.255 151.718 608.295 151.608 608.265 151.415C608.254 151.335 608.263 151.253 608.289 151.176C608.315 151.098 608.359 151.026 608.417 150.963C608.498 150.847 608.568 150.727 608.628 150.602C608.779 150.297 608.811 150.233 610.333 149.998L610.603 149.955V149.622H612.086V149H612.774L633.798 149.135H634.486V149.758H635.969V150.379H637.031V151.599C637.1 151.605 637.167 151.608 637.233 151.608C637.292 151.608 637.351 151.606 637.409 151.604L637.478 151.602C637.511 151.601 637.541 151.6 637.571 151.599C637.591 151.598 637.61 151.597 637.629 151.596L637.663 151.595L637.677 151.595L637.7 151.595C637.767 151.595 637.839 151.597 637.915 151.598L637.961 151.599L638.026 151.601C638.087 151.602 638.149 151.604 638.212 151.605C638.286 151.607 638.36 151.608 638.435 151.608C638.991 151.608 639.246 151.544 639.314 151.386V150.958L639.305 150.708L639.297 150.464C639.297 150.455 639.294 150.445 639.291 150.436C639.289 150.432 639.287 150.427 639.285 150.423C639.283 150.42 639.281 150.417 639.278 150.414L639.275 150.41C639.273 150.408 639.271 150.406 639.269 150.404C639.235 150.372 639.205 150.337 639.181 150.299L675 146L727.426 146.969L732.001 145H737L736.5 140.5L790.01 148.599L827.185 148.739H827.87V149.412H829.349V149.772L829.618 149.818C830.504 149.967 830.93 149.83 831.162 149.755C831.327 149.702 831.393 149.681 831.456 149.818C831.516 149.954 831.586 150.084 831.666 150.21C831.724 150.277 831.768 150.355 831.794 150.439C831.82 150.523 831.828 150.611 831.818 150.698C831.788 150.907 831.828 151.026 832.351 151.374C832.703 151.628 833.133 151.768 833.576 151.773C833.748 151.77 833.919 151.756 834.089 151.731C834.127 151.725 834.165 151.72 834.203 151.716C834.225 151.714 834.247 151.711 834.269 151.709C834.347 151.702 834.424 151.697 834.502 151.695C834.783 151.668 835.049 151.559 835.261 151.381C835.56 151.139 835.936 150.998 836.33 150.982C836.721 150.986 837.109 151.046 837.481 151.16C837.907 151.278 838.343 151.364 838.784 151.416C840.858 151.713 842.91 152.133 844.928 152.674C845.333 152.828 845.77 152.895 846.205 152.869C846.407 152.869 846.591 152.861 846.726 152.855L846.753 152.854L846.786 152.853L846.815 152.852L846.818 152.852L846.866 152.85L846.885 152.849L846.902 152.849C847.061 152.873 847.21 152.938 847.333 153.036C847.455 153.135 847.547 153.263 847.598 153.408C847.761 153.946 850.238 154.009 850.263 154.009C850.556 154 850.849 153.969 851.138 153.918C851.493 153.855 851.853 153.819 852.215 153.81C852.563 153.81 852.687 154.073 852.817 154.348L852.817 154.35C852.914 154.557 853.017 154.771 853.225 154.843C853.589 154.97 854.016 156.098 854.016 158.864V162.44C854.016 162.447 854.017 162.454 854.019 162.461L854.019 162.464L854.02 162.468C854.021 162.471 854.022 162.474 854.023 162.476L854.027 162.483L854.029 162.487L854.031 162.49H859.328V162.912H860.81V163.332H861.87V164.158C861.905 164.158 861.939 164.16 861.973 164.161C862.007 164.163 862.039 164.164 862.072 164.164H862.317C862.359 164.164 862.397 164.163 862.434 164.162L862.478 164.16C862.498 164.16 862.517 164.159 862.538 164.159H862.864C862.929 164.159 862.996 164.16 863.064 164.162C863.133 164.163 863.202 164.164 863.271 164.164C863.827 164.164 864.082 164.121 864.15 164.013C864.213 163.391 864.216 162.765 864.158 162.143L864.157 162.138L864.156 162.135C864.155 162.132 864.154 162.13 864.153 162.127L864.151 162.123L864.149 162.119C864.147 162.116 864.144 162.113 864.142 162.111C864.14 162.109 864.138 162.107 864.136 162.106L864.134 162.105L864.13 162.102C864.098 162.082 864.068 162.058 864.042 162.031H865.396C865.477 162.031 865.578 162.031 865.699 162.023C865.788 162.019 865.886 162.015 865.984 162.013C866.044 162.012 866.105 162.011 866.164 162.011C866.344 161.992 866.526 162.014 866.696 162.075C867.109 162.224 867.551 162.278 867.988 162.233C868.141 162.233 868.334 162.218 868.541 162.201L868.591 162.197C868.827 162.178 869.087 162.157 869.329 162.157C869.533 162.151 869.737 162.174 869.935 162.227C870.043 162.261 870.156 162.277 870.27 162.276C870.48 162.267 870.689 162.234 870.891 162.177C871.309 162.069 871.738 162.015 872.169 162.014C872.658 162.014 873.05 162.038 873.333 162.055L873.412 162.059C873.552 162.067 873.664 162.073 873.757 162.073C873.839 162.073 874.04 162.073 874.102 161.974C874.216 161.872 874.351 161.796 874.497 161.75C874.643 161.703 874.797 161.689 874.949 161.707C875.041 161.707 875.133 161.713 875.225 161.723C875.582 161.764 875.64 161.892 875.699 162.028C875.721 162.102 875.767 162.168 875.829 162.215C875.891 162.263 875.966 162.29 876.044 162.293C876.091 162.299 876.139 162.302 876.186 162.302C876.333 162.297 876.479 162.281 876.623 162.254C876.862 162.212 877.103 162.19 877.345 162.187C877.513 162.187 877.681 162.198 877.848 162.22C878.169 162.263 878.43 162.277 878.642 162.287C879.097 162.312 879.171 162.325 879.171 162.46C879.176 162.569 879.207 162.675 879.262 162.77C879.328 162.899 879.32 162.908 879.232 162.933C878.913 163.02 878.973 163.964 879.038 164.519C879.038 164.551 879.086 164.576 879.138 164.576H886.041C889.43 164.576 891.221 164.927 891.221 165.591C891.221 166.009 891.829 166.008 892.118 166.008C892.228 166.008 892.345 166.008 892.469 166.002C892.592 165.995 892.725 165.995 892.856 165.995H892.859C893.104 165.96 893.354 165.978 893.592 166.049C893.829 166.119 894.049 166.24 894.235 166.403C894.485 166.714 894.371 167.277 894.249 167.871C894.111 168.537 894.62 168.499 895.446 168.437C896.016 168.395 896.736 168.342 897.5 168.5C897.875 168.586 899.212 167.984 900.624 167.349C902.322 166.585 904.129 165.772 904.5 166.049C905.111 167.161 908.734 165.69 911.559 164.544C913.361 163.812 914.838 163.213 915 163.5V170H924.271C924.676 169.549 925.147 169.146 925.674 168.801C926.508 168.255 927.462 167.868 928.475 167.664C930.773 167.245 930.457 165.87 930.172 164.657C930.022 164.016 929.882 163.409 930.189 163.074C930.418 162.898 930.687 162.767 930.978 162.691C931.27 162.616 931.577 162.596 931.877 162.634H931.881L932.018 162.634C932.054 162.634 932.09 162.634 932.125 162.635C932.204 162.636 932.282 162.637 932.357 162.641C932.438 162.645 932.517 162.646 932.594 162.647C932.66 162.648 932.724 162.648 932.787 162.648C933.143 162.648 933.888 162.648 933.888 162.198C933.888 161.481 936.087 161.103 940.247 161.103H948.72C948.785 161.103 948.843 161.076 948.843 161.041C948.922 160.442 948.997 159.425 948.605 159.331C948.497 159.303 948.487 159.295 948.568 159.155C948.636 159.053 948.674 158.938 948.679 158.82C948.679 158.675 948.77 158.661 949.329 158.634C949.59 158.623 949.91 158.608 950.304 158.562C950.509 158.538 950.715 158.526 950.921 158.526C951.218 158.529 951.515 158.553 951.807 158.599C951.984 158.628 952.164 158.645 952.344 158.65C952.387 158.65 952.43 158.648 952.473 158.645L952.499 158.642L952.519 158.64C952.614 158.637 952.707 158.608 952.782 158.557C952.858 158.505 952.914 158.435 952.942 158.354C953.014 158.208 953.085 158.07 953.524 158.025C953.584 158.02 953.645 158.015 953.706 158.012C953.758 158.01 953.81 158.008 953.863 158.008C954.049 157.989 954.239 158.005 954.418 158.054C954.597 158.104 954.762 158.187 954.902 158.296C954.978 158.404 955.225 158.404 955.325 158.404C955.46 158.404 955.629 158.394 955.847 158.383C956.194 158.365 956.675 158.339 957.275 158.339C957.804 158.34 958.331 158.399 958.843 158.515C959.092 158.577 959.348 158.613 959.606 158.623C959.745 158.624 959.884 158.605 960.017 158.569C960.26 158.512 960.51 158.487 960.761 158.494C961.058 158.494 961.377 158.517 961.667 158.537L961.729 158.542C961.983 158.559 962.219 158.576 962.407 158.576C962.944 158.624 963.486 158.566 963.993 158.405C964.202 158.34 964.425 158.316 964.645 158.336C964.838 158.336 965.04 158.342 965.217 158.349C965.302 158.354 965.38 158.356 965.45 158.357C965.5 158.358 965.547 158.358 965.589 158.358H967.251C967.219 158.387 967.182 158.413 967.143 158.434C967.134 158.439 967.126 158.445 967.12 158.453C967.118 158.455 967.116 158.458 967.115 158.461L967.113 158.465C967.111 158.469 967.109 158.474 967.109 158.478C967.038 159.15 967.041 159.825 967.119 160.496C967.202 160.612 967.515 160.659 968.197 160.659C968.239 160.659 968.282 160.658 968.325 160.658L968.569 160.654C968.612 160.654 968.655 160.653 968.697 160.653H969.097C969.141 160.653 969.182 160.655 969.225 160.656C969.261 160.657 969.299 160.658 969.339 160.659L969.369 160.659H969.669L969.69 160.659L969.706 160.658L969.73 160.658L969.79 160.656C969.832 160.654 969.874 160.652 969.917 160.652V159.762H971.218V159.308H973.037V158.853H1030.67V159.308H1032.49V159.551L1032.82 159.581C1034.69 159.752 1034.73 159.798 1034.91 160.021C1034.99 160.116 1035.07 160.204 1035.17 160.285C1035.39 160.472 1035.37 160.551 1035.36 160.615C1035.32 160.756 1035.37 160.836 1036.01 161.071C1036.49 161.25 1037 161.342 1037.52 161.34C1037.65 161.34 1037.77 161.335 1037.88 161.329L1037.97 161.324L1038.15 161.312L1038.18 161.31C1038.34 161.298 1038.5 161.287 1038.66 161.287C1038.98 161.274 1039.3 161.202 1039.59 161.076C1040 160.902 1040.45 160.81 1040.9 160.806C1041.38 160.807 1041.85 160.847 1042.32 160.925C1042.73 160.987 1043.19 161.054 1043.92 161.101C1045.05 161.176 1048.37 161.518 1050.23 161.758C1051 161.327 1053.04 161.103 1056.25 161.103H1064.72C1064.76 161.103 1064.8 161.092 1064.82 161.075C1064.83 161.066 1064.84 161.054 1064.84 161.041C1064.92 160.442 1065 159.425 1064.6 159.331C1064.5 159.303 1064.49 159.295 1064.57 159.155C1064.64 159.053 1064.67 158.938 1064.68 158.82C1064.68 158.675 1064.77 158.661 1065.33 158.634C1065.59 158.623 1065.91 158.608 1066.3 158.562C1066.51 158.538 1066.71 158.526 1066.92 158.526C1067.22 158.529 1067.51 158.553 1067.81 158.599C1067.98 158.628 1068.16 158.645 1068.34 158.65C1068.4 158.65 1068.46 158.647 1068.52 158.64C1068.61 158.637 1068.71 158.608 1068.78 158.557C1068.86 158.505 1068.91 158.435 1068.94 158.354C1069.01 158.208 1069.08 158.07 1069.52 158.025C1069.6 158.018 1069.68 158.013 1069.75 158.01L1069.78 158.009L1069.81 158.009L1069.86 158.008C1070.05 157.989 1070.24 158.005 1070.42 158.054C1070.6 158.104 1070.76 158.187 1070.9 158.296C1070.98 158.404 1071.22 158.404 1071.32 158.404C1071.44 158.404 1071.58 158.397 1071.75 158.388L1071.85 158.383C1072.19 158.365 1072.67 158.339 1073.27 158.339C1073.8 158.34 1074.33 158.399 1074.84 158.515C1075.09 158.577 1075.35 158.613 1075.61 158.623C1075.74 158.624 1075.88 158.605 1076.02 158.569C1076.26 158.512 1076.51 158.487 1076.76 158.494C1077.06 158.494 1077.38 158.517 1077.67 158.537L1077.73 158.542L1077.73 158.542C1077.84 158.55 1077.95 158.557 1078.05 158.563C1078.18 158.571 1078.3 158.576 1078.41 158.576C1078.94 158.624 1079.49 158.566 1079.99 158.405C1080.2 158.34 1080.42 158.316 1080.64 158.336C1080.84 158.336 1081.04 158.342 1081.22 158.349C1081.36 158.358 1081.49 158.358 1081.59 158.358H1083.25C1083.24 158.369 1083.23 158.38 1083.21 158.39C1083.2 158.402 1083.18 158.413 1083.16 158.423L1083.15 158.428L1083.14 158.434L1083.14 158.436L1083.14 158.438C1083.13 158.441 1083.13 158.444 1083.12 158.447L1083.12 158.45L1083.12 158.453C1083.11 158.461 1083.11 158.469 1083.11 158.478C1083.04 159.15 1083.04 159.825 1083.12 160.496C1083.2 160.612 1083.51 160.659 1084.2 160.659C1084.28 160.659 1084.37 160.657 1084.45 160.656L1084.53 160.655C1084.59 160.654 1084.64 160.653 1084.7 160.653H1085.1L1085.12 160.653L1085.16 160.654L1085.17 160.654L1085.27 160.657C1085.3 160.658 1085.33 160.659 1085.37 160.659H1085.67C1085.71 160.659 1085.75 160.657 1085.79 160.656C1085.83 160.654 1085.87 160.652 1085.92 160.652V159.762H1087.22V159.308H1089.04V158.853H1146.67V159.308H1148.49V159.551L1148.82 159.581C1150.69 159.752 1150.73 159.798 1150.91 160.021C1150.99 160.116 1151.07 160.204 1151.17 160.285C1151.39 160.472 1151.37 160.551 1151.36 160.615C1151.32 160.756 1151.37 160.836 1152.01 161.071C1152.49 161.25 1153 161.342 1153.52 161.34C1153.73 161.34 1153.91 161.328 1154.09 161.316L1154.15 161.312L1154.18 161.31C1154.26 161.304 1154.34 161.299 1154.42 161.295C1154.5 161.29 1154.58 161.287 1154.65 161.287C1154.98 161.274 1155.3 161.202 1155.59 161.076C1156 160.902 1156.45 160.81 1156.9 160.806C1157.38 160.807 1157.85 160.847 1158.32 160.925C1158.73 160.987 1159.19 161.054 1159.92 161.101C1161.43 161.2 1166.81 161.775 1167.47 161.951C1167.99 162.056 1168.51 162.1 1169.04 162.082C1169.08 162.082 1169.12 162.081 1169.16 162.081C1169.22 162.08 1169.27 162.079 1169.32 162.078L1169.53 162.074L1169.61 162.072C1169.63 162.072 1169.66 162.072 1169.68 162.072H1169.9C1170.06 162.075 1170.23 162.111 1170.37 162.176C1170.52 162.241 1170.65 162.334 1170.75 162.448C1170.95 162.812 1174 162.855 1174.03 162.855C1174.36 162.855 1174.72 162.826 1175.1 162.793C1175.53 162.757 1175.98 162.721 1176.43 162.721C1176.54 162.717 1176.65 162.732 1176.75 162.765C1176.77 162.755 1176.8 162.745 1176.83 162.735C1176.86 162.726 1176.88 162.718 1176.91 162.709C1176.93 162.703 1176.96 162.697 1176.98 162.691C1177.27 162.616 1177.58 162.596 1177.88 162.634H1177.88C1178.04 162.634 1178.21 162.634 1178.36 162.641C1178.51 162.648 1178.65 162.648 1178.79 162.648C1179.14 162.648 1179.89 162.648 1179.89 162.198C1179.89 161.481 1182.09 161.103 1186.25 161.103H1194.72C1194.78 161.103 1194.84 161.076 1194.84 161.041C1194.92 160.442 1195 159.425 1194.6 159.331C1194.5 159.303 1194.49 159.295 1194.57 159.155C1194.64 159.053 1194.67 158.938 1194.68 158.82C1194.68 158.675 1194.77 158.661 1195.33 158.634L1195.43 158.629L1195.5 158.626C1195.54 158.624 1195.58 158.622 1195.62 158.62C1195.71 158.615 1195.79 158.609 1195.89 158.602C1196.02 158.592 1196.15 158.579 1196.3 158.562C1196.43 158.547 1196.56 158.537 1196.69 158.531C1196.76 158.528 1196.84 158.526 1196.92 158.526C1197.22 158.529 1197.51 158.553 1197.81 158.599C1197.98 158.628 1198.16 158.645 1198.34 158.65C1198.36 158.65 1198.37 158.65 1198.39 158.649L1198.42 158.648L1198.45 158.646L1198.48 158.644L1198.5 158.642L1198.52 158.64C1198.61 158.637 1198.71 158.608 1198.78 158.557C1198.86 158.505 1198.91 158.435 1198.94 158.354C1199.01 158.208 1199.08 158.07 1199.52 158.025C1199.64 158.014 1199.75 158.009 1199.86 158.008C1200.05 157.989 1200.24 158.005 1200.42 158.054C1200.6 158.104 1200.76 158.187 1200.9 158.296C1200.98 158.404 1201.22 158.404 1201.32 158.404L1201.34 158.404L1201.4 158.403L1201.45 158.402L1201.49 158.4C1201.57 158.397 1201.65 158.393 1201.75 158.388L1201.85 158.383L1201.85 158.383C1202.19 158.365 1202.67 158.339 1203.27 158.339C1203.8 158.34 1204.33 158.399 1204.84 158.515C1205.09 158.577 1205.35 158.613 1205.61 158.623C1205.74 158.624 1205.88 158.605 1206.02 158.569C1206.26 158.512 1206.51 158.487 1206.76 158.494C1207.06 158.494 1207.38 158.517 1207.67 158.537L1207.73 158.542L1207.73 158.542C1207.86 158.551 1207.99 158.56 1208.11 158.567C1208.15 158.568 1208.18 158.57 1208.21 158.572C1208.28 158.574 1208.35 158.576 1208.41 158.576C1208.94 158.624 1209.49 158.566 1209.99 158.405C1210.2 158.34 1210.42 158.316 1210.64 158.336C1210.72 158.336 1210.79 158.337 1210.87 158.338C1210.99 158.341 1211.11 158.345 1211.22 158.349C1211.36 158.358 1211.49 158.358 1211.59 158.358H1213.25C1213.23 158.372 1213.22 158.386 1213.2 158.398C1213.19 158.406 1213.18 158.413 1213.17 158.419C1213.16 158.425 1213.15 158.43 1213.14 158.434C1213.14 158.436 1213.13 158.439 1213.13 158.441C1213.13 158.445 1213.12 158.449 1213.12 158.453C1213.12 158.456 1213.12 158.459 1213.11 158.462C1213.11 158.467 1213.11 158.473 1213.11 158.478C1213.04 159.15 1213.04 159.825 1213.12 160.496L1213.12 160.503L1213.13 160.513C1213.14 160.523 1213.15 160.532 1213.17 160.541C1213.18 160.551 1213.2 160.561 1213.23 160.571L1215.92 159.807V159.762H1216.08L1217.22 159.438V159.308H1217.68L1250.2 150.075V147.099L1251.19 147.086V146.536L1252.42 146.525V145.825H1252.08V144.694L1253.02 144.686V142.863L1254.3 142.853V132.418L1259.84 132.386V142.808L1261.11 142.798V144.618L1262.04 144.61V145.742H1261.7V146.436L1262.14 146.432L1309.92 131.719C1309.95 131.547 1309.99 131.377 1310.03 131.209C1310.1 130.993 1310.11 130.767 1310.09 130.544C1310.07 130.507 1310.07 130.464 1310.08 130.425C1310.08 130.408 1310.09 130.393 1310.09 130.379C1310.11 130.358 1310.12 130.34 1310.14 130.326C1310.23 130.074 1310.26 129.806 1310.23 129.541C1310.2 129.24 1310.22 128.937 1310.28 128.641C1310.4 128.359 1310.48 128.062 1310.51 127.758C1310.53 127.585 1310.56 126.984 1310.57 126.425C1310.56 126 1310.6 125.577 1310.68 125.16C1310.77 124.539 1310.82 123.911 1310.82 123.283C1310.91 120.448 1310.99 118.364 1311.05 117.925C1311.14 117.125 1311.14 117.065 1311.05 116.813C1310.99 116.671 1311 116.584 1311.06 116.613C1311.12 116.642 1311.16 116.35 1311.17 115.957C1311.18 115.564 1311.21 114.812 1311.24 114.278C1311.28 113.744 1311.35 112.401 1311.41 111.278C1311.52 109.311 1311.67 108.462 1311.93 108.378C1312 108.344 1312.05 108.431 1312.05 108.551C1312.06 108.689 1312.12 108.82 1312.22 108.923C1312.44 109.544 1312.53 110.205 1312.49 110.864C1312.49 110.984 1312.54 111.364 1312.6 111.716C1312.68 112.246 1312.74 112.78 1312.76 113.316L1312.8 113.948L1312.81 114.145C1312.83 114.355 1312.84 114.522 1312.85 114.604C1312.85 114.642 1312.86 114.692 1312.87 114.75L1312.87 114.757C1312.88 114.878 1312.9 115.033 1312.92 115.195C1312.93 115.315 1312.94 115.438 1312.95 115.554C1313.05 116.699 1313.15 117.278 1313.28 117.354C1313.36 117.421 1313.36 117.463 1313.28 117.519C1313.24 117.557 1313.21 117.604 1313.2 117.655L1313.2 117.668L1313.19 117.683L1313.19 117.693L1313.19 117.703C1313.19 117.714 1313.19 117.725 1313.19 117.736C1313.19 117.761 1313.19 117.787 1313.2 117.812C1313.22 117.932 1313.26 118.533 1313.29 119.145C1313.33 120.357 1313.35 120.519 1313.49 120.726C1313.53 120.804 1313.52 120.857 1313.46 120.857C1313.41 120.857 1313.38 121.251 1313.39 121.796C1313.43 123.141 1313.43 123.14 1313.6 123.066L1313.61 123.061C1313.78 122.982 1313.81 123.117 1313.65 123.29C1313.52 123.421 1313.62 123.857 1313.78 123.857C1313.84 123.857 1313.8 123.969 1313.72 124.097C1313.59 124.297 1313.56 124.597 1313.6 125.561C1313.59 125.991 1313.63 126.42 1313.74 126.838C1313.8 126.936 1313.82 127.053 1313.79 127.165C1313.69 127.803 1313.68 128.454 1313.77 129.095C1313.83 129.095 1313.85 129.162 1313.82 129.249C1313.79 129.57 1313.81 129.893 1313.87 130.21L1313.89 130.324L1313.92 130.489L1316.31 129.752C1316.56 129.103 1316.65 128.406 1316.58 127.715C1316.58 127.364 1316.64 127.014 1316.74 126.679C1316.84 126.344 1316.86 125.988 1316.8 125.643C1316.76 125.076 1316.77 124.782 1316.87 124.673C1316.98 124.284 1317.02 123.876 1316.98 123.473C1316.95 122.142 1317.02 120.811 1317.18 119.489C1317.24 119.277 1317.27 119.055 1317.24 118.835C1317.23 118.573 1317.3 117.492 1317.38 116.435L1317.39 116.249L1317.39 116.188C1317.47 115.186 1317.55 114.061 1317.58 113.6C1317.59 112.853 1317.69 112.109 1317.87 111.385C1318.02 110.829 1318.23 110.717 1318.33 111.145C1318.36 111.318 1318.44 111.438 1318.48 111.408C1318.6 111.33 1318.7 111.746 1318.7 112.389C1318.72 112.873 1318.78 113.355 1318.87 113.83C1318.96 114.21 1319.01 114.597 1319.03 114.986C1318.99 115.291 1319.01 115.601 1319.07 115.902C1319.1 116.131 1319.15 116.469 1319.16 116.645C1319.16 116.794 1319.19 116.941 1319.25 117.081C1319.3 117.317 1319.33 117.559 1319.33 117.802C1319.34 118.121 1319.38 118.438 1319.45 118.749C1319.51 118.881 1319.52 119.025 1319.5 119.165C1319.49 119.178 1319.48 119.193 1319.48 119.209C1319.48 119.216 1319.48 119.224 1319.48 119.232C1319.48 119.239 1319.49 119.247 1319.49 119.254C1319.49 119.269 1319.5 119.282 1319.51 119.293C1319.52 119.304 1319.54 119.313 1319.55 119.319C1319.58 119.346 1319.6 119.381 1319.61 119.42C1319.62 119.46 1319.61 119.5 1319.6 119.537C1319.57 119.778 1319.59 120.022 1319.65 120.258C1319.74 120.638 1319.74 120.825 1319.66 120.858C1319.65 120.861 1319.64 120.866 1319.64 120.872C1319.63 120.875 1319.63 120.879 1319.63 120.882L1319.62 120.888C1319.62 120.89 1319.62 120.892 1319.62 120.895C1319.61 120.898 1319.61 120.901 1319.61 120.904C1319.61 120.907 1319.61 120.91 1319.61 120.913L1319.61 120.919C1319.6 120.923 1319.6 120.926 1319.6 120.93L1319.6 120.934L1319.6 120.941C1319.6 120.943 1319.6 120.946 1319.6 120.948L1319.6 120.954L1319.6 120.961C1319.6 120.968 1319.6 120.975 1319.61 120.982C1319.61 120.988 1319.61 120.995 1319.62 121.001C1319.76 121.932 1319.83 122.874 1319.82 123.817C1319.77 124.376 1319.91 124.935 1320.21 125.409C1320.39 125.54 1320.39 125.551 1320.18 125.727C1319.96 125.9 1319.97 125.985 1320.03 127.07L1320.03 127.113C1320.05 127.579 1320.11 128.043 1320.21 128.499C1320.22 128.516 1320.22 128.535 1320.23 128.554L1322.65 127.924L1322.64 127.92C1322.53 127.811 1322.49 127.72 1322.54 127.72C1322.74 127.72 1322.86 127.295 1322.93 126.368C1323.03 124.829 1323.03 124.668 1322.74 124.404C1322.51 124.197 1322.51 124.186 1322.71 124.044C1322.83 123.941 1322.91 123.803 1322.95 123.65C1322.96 123.535 1323 123.426 1323.07 123.334C1323.25 123.016 1323.33 122.651 1323.31 122.286C1323.26 122.275 1323.26 122.046 1323.31 121.806C1323.36 121.451 1323.36 121.092 1323.33 120.736C1323.29 120.278 1323.31 120.127 1323.41 120.127C1323.5 120.127 1323.53 119.996 1323.48 119.658C1323.44 119.358 1323.46 119.144 1323.55 119.069C1323.65 118.969 1323.63 118.915 1323.51 118.84C1323.39 118.765 1323.38 118.698 1323.48 118.54C1323.49 118.525 1323.5 118.509 1323.51 118.493C1323.53 118.449 1323.54 118.401 1323.54 118.351C1323.55 118.284 1323.53 118.217 1323.49 118.16C1323.44 118.048 1323.44 117.984 1323.49 117.984C1323.65 117.984 1323.72 117.417 1323.6 117.263C1323.53 117.163 1323.53 117.12 1323.62 117.12C1323.7 117.12 1323.73 117.034 1323.7 116.913C1323.69 116.873 1323.68 116.836 1323.68 116.805C1323.68 116.759 1323.68 116.724 1323.7 116.707L1323.7 116.703C1323.7 116.7 1323.71 116.699 1323.71 116.698C1323.71 116.696 1323.72 116.695 1323.72 116.695C1323.82 116.695 1323.93 116.248 1324.01 115.572C1324.03 115.212 1324.08 114.854 1324.16 114.502C1324.3 114.08 1324.36 113.637 1324.36 113.192C1324.3 113.15 1324.35 112.974 1324.42 112.809C1324.47 112.729 1324.5 112.64 1324.51 112.549C1324.52 112.457 1324.51 112.364 1324.49 112.275C1324.39 112.001 1324.47 111.348 1324.6 111.348C1324.65 111.348 1324.7 111.217 1324.7 111.055C1324.71 110.829 1324.74 110.605 1324.8 110.387C1324.87 109.997 1324.92 109.604 1324.95 109.208C1325 108.308 1325.08 108.032 1325.3 108.032C1325.39 108.032 1325.48 107.89 1325.52 107.714C1325.6 107.289 1325.93 107.278 1326.03 107.683C1326.07 107.847 1326.15 108.002 1326.25 108.141C1326.4 108.314 1326.48 108.881 1326.55 110.387C1326.58 110.887 1326.64 111.386 1326.72 111.881C1326.79 112.255 1326.83 112.636 1326.84 113.018C1326.84 113.43 1326.88 113.842 1326.94 114.25C1327.03 114.835 1327.07 115.426 1327.06 116.018C1327.04 116.438 1327.07 116.86 1327.15 117.272C1327.25 117.686 1327.3 118.111 1327.3 118.537C1327.35 119.193 1327.41 120.174 1327.45 120.699C1327.48 121.224 1327.5 121.964 1327.49 122.325C1327.46 122.643 1327.51 122.963 1327.61 123.264C1327.73 123.618 1327.76 123.998 1327.68 124.364C1327.61 125.064 1327.62 125.216 1327.8 125.456C1327.94 125.794 1328.02 126.155 1328.03 126.52L1341.55 122.996H1348.82V122.847H1351.11V108.426L1350.32 107.645H1351.77V105.945H1358.41C1358.64 105.945 1358.74 106.271 1358.74 106.271L1359 107.25L1360.11 107.904L1359.92 108.293L1359.52 108.682V122.996H1363.24V105.162L1362.52 104.962L1362.46 104.573H1362.72V104.247H1363.96V102.486H1368.59C1368.81 102.486 1368.59 101.371 1368.59 101.371C1368.77 101.355 1368.94 101.355 1369.12 101.371C1369.37 101.507 1369.61 101.662 1369.83 101.834L1370.04 102.352H1371.01V101.897H1375.77V101.116H1377.07V101.897C1377.07 101.897 1377.32 101.921 1377.53 101.962C1377.72 101.996 1377.92 102.017 1378.11 102.025V103.069C1378.13 103.267 1378.15 103.463 1378.18 103.658H1378.57L1378.9 103.14H1383.01V101.897H1383.6V100.527L1385.55 100.535C1385.55 100.872 1385.62 101.206 1385.75 101.516C1385.92 101.734 1385.62 102.034 1385.62 102.034C1385.62 102.034 1386.14 102.574 1386.14 102.749C1386.14 102.924 1386.28 103.601 1386.28 103.601C1386.2 103.877 1386.16 104.16 1386.14 104.445C1386.14 104.796 1386.53 104.908 1386.53 104.908L1386.14 105.952L1386.01 107.252L1386.27 110.51L1386.34 118.062L1406.5 100.596H1410.84C1410.85 100.501 1410.89 100.429 1410.96 100.396C1411.01 100.369 1411.04 100.329 1411.06 100.281C1411.07 100.234 1411.08 100.181 1411.06 100.133C1411.01 100.013 1411.05 99.9566 1411.15 99.9566C1411.27 99.9566 1411.3 99.7946 1411.29 99.1826C1411.29 98.7576 1411.26 98.4616 1411.23 98.5396C1411.19 98.6266 1411.13 98.6396 1410.98 98.5596C1410.88 98.5066 1410.78 98.4846 1410.75 98.5176C1410.71 98.5506 1410.59 98.4506 1410.47 98.2996C1410.35 98.1486 1410.21 98.0256 1410.16 98.0256C1410 98.0256 1409.92 97.7626 1409.92 97.3496C1409.92 97.1771 1409.88 97.0065 1409.81 96.8496C1409.74 96.7496 1409.75 96.6646 1409.84 96.6206C1409.94 96.5566 1409.94 96.5336 1409.83 96.5336C1409.69 95.7749 1409.72 94.9956 1409.93 94.2516C1409.99 94.0355 1410.01 93.8096 1409.98 93.5866C1409.96 93.5495 1409.96 93.5073 1409.97 93.4675C1409.98 93.4277 1410 93.3927 1410.04 93.3686C1410.12 93.1165 1410.15 92.8485 1410.12 92.5836C1410.09 92.283 1410.11 91.98 1410.17 91.6836C1410.29 91.402 1410.37 91.1047 1410.4 90.8006C1410.43 90.6276 1410.45 90.0266 1410.46 89.4676C1410.46 89.0434 1410.49 88.6197 1410.57 88.2026C1410.67 87.5817 1410.71 86.9541 1410.71 86.3256C1410.8 83.4906 1410.89 81.4066 1410.94 80.9676C1411.03 80.1676 1411.03 80.1076 1410.94 79.8556C1410.89 79.7136 1410.9 79.6266 1410.95 79.6556C1411.01 79.6846 1411.05 79.3926 1411.06 78.9996C1411.07 78.6066 1411.1 77.8546 1411.14 77.3206C1411.17 76.7866 1411.25 75.4436 1411.3 74.3206C1411.41 72.3536 1411.56 71.5046 1411.82 71.4206C1411.89 71.3866 1411.94 71.4736 1411.94 71.5936C1411.96 71.7323 1412.01 71.8628 1412.11 71.9656C1412.33 72.587 1412.42 73.2479 1412.38 73.9066C1412.38 74.0266 1412.44 74.4066 1412.49 74.7586C1412.57 75.2886 1412.63 75.8228 1412.65 76.3586L1412.68 76.7547L1412.68 76.7992C1412.7 77.1795 1412.73 77.519 1412.74 77.6466L1412.75 77.7012L1412.76 77.7931C1412.78 78.0033 1412.82 78.3227 1412.84 78.5966C1412.94 79.7416 1413.04 80.3206 1413.17 80.3966C1413.25 80.4636 1413.25 80.5056 1413.17 80.5616C1413.13 80.5999 1413.1 80.6469 1413.09 80.6981C1413.08 80.7493 1413.08 80.8032 1413.09 80.8546C1413.11 80.9746 1413.16 81.5756 1413.18 82.1876C1413.22 83.3996 1413.24 83.5616 1413.38 83.7686C1413.42 83.8466 1413.41 83.8996 1413.36 83.8996C1413.3 83.8996 1413.27 84.2936 1413.28 84.8386C1413.32 86.1837 1413.32 86.1833 1413.49 86.1085L1413.5 86.1036C1413.68 86.0246 1413.71 86.1596 1413.54 86.3326C1413.41 86.4636 1413.51 86.8996 1413.67 86.8996C1413.73 86.8996 1413.69 87.0116 1413.61 87.1396C1413.48 87.3396 1413.45 87.6396 1413.49 88.6036C1413.48 89.0338 1413.53 89.4635 1413.63 89.8806C1413.69 89.9788 1413.71 90.0959 1413.68 90.2076C1413.58 90.8463 1413.57 91.497 1413.67 92.1376C1413.72 92.1376 1413.74 92.2046 1413.71 92.2916C1413.68 92.6131 1413.7 92.9361 1413.76 93.2526C1413.96 94.5186 1413.96 94.6156 1413.81 94.9986C1413.73 95.1826 1413.71 95.3476 1413.75 95.3476C1413.86 95.3476 1413.82 96.0686 1413.67 96.6776C1413.4 97.8256 1413.31 98.1306 1413.24 98.1306C1413.2 98.1306 1413.1 98.2506 1413.02 98.3936C1412.89 98.5879 1412.69 98.7271 1412.46 98.7846C1412.06 98.9046 1412.06 98.9156 1412.06 99.4716C1412.06 99.9516 1412.1 100.053 1412.33 100.204C1412.48 100.303 1412.6 100.438 1412.68 100.596H1417.48L1417.48 100.573V100.568C1417.54 100.167 1417.52 99.7589 1417.41 99.3676C1417.35 99.3256 1417.29 99.3366 1417.29 99.3896C1417.29 99.6076 1416.52 99.3786 1416.18 99.0626C1415.58 98.4846 1415.52 97.2826 1415.95 94.6206C1416.07 94.2237 1416.09 93.8073 1416.03 93.3996C1415.96 93.3326 1416.01 93.1706 1416.15 92.9306C1416.43 92.244 1416.55 91.4978 1416.48 90.7576C1416.48 90.4066 1416.53 90.0575 1416.63 89.7216C1416.73 89.3865 1416.76 89.0311 1416.69 88.6856C1416.65 88.1186 1416.66 87.8246 1416.76 87.7156C1416.87 87.3266 1416.91 86.9189 1416.87 86.5156C1416.85 85.1847 1416.91 83.8536 1417.07 82.5316C1417.14 82.3203 1417.16 82.0979 1417.14 81.8776C1417.13 81.6156 1417.19 80.5346 1417.27 79.4776L1417.28 79.2918L1417.29 79.2313C1417.36 78.2294 1417.44 77.1043 1417.47 76.6426C1417.48 75.8955 1417.58 75.1522 1417.76 74.4276C1417.91 73.8716 1418.12 73.7596 1418.22 74.1876C1418.25 74.3606 1418.33 74.4806 1418.37 74.4506C1418.49 74.3726 1418.59 74.7886 1418.59 75.4316C1418.61 75.9157 1418.67 76.3975 1418.77 76.8726C1418.85 77.253 1418.9 77.6397 1418.92 78.0286C1418.88 78.3344 1418.9 78.6436 1418.96 78.9446C1419 79.1736 1419.04 79.5116 1419.05 79.6876C1419.06 79.8368 1419.09 79.9839 1419.14 80.1236C1419.2 80.3596 1419.23 80.6017 1419.23 80.8446C1419.23 81.1635 1419.27 81.4808 1419.35 81.7916C1419.4 81.9237 1419.41 82.0677 1419.39 82.2076C1419.38 82.2213 1419.38 82.2363 1419.37 82.2517C1419.37 82.2671 1419.38 82.2826 1419.38 82.2971C1419.39 82.3117 1419.39 82.3249 1419.41 82.336C1419.42 82.3472 1419.43 82.3559 1419.44 82.3616C1419.47 82.3887 1419.49 82.4243 1419.5 82.4634C1419.51 82.5025 1419.5 82.5432 1419.49 82.5796C1419.46 82.8212 1419.48 83.0653 1419.54 83.3006C1419.63 83.6806 1419.63 83.8676 1419.55 83.9006C1419.54 83.9064 1419.53 83.9149 1419.52 83.9254C1419.51 83.936 1419.5 83.9485 1419.5 83.962C1419.49 83.9755 1419.49 83.9898 1419.49 84.0039C1419.5 84.0179 1419.5 84.0315 1419.51 84.0436C1419.65 84.9749 1419.72 85.917 1419.71 86.8596C1419.66 87.4187 1419.8 87.9775 1420.1 88.4516C1420.29 88.5826 1420.29 88.5936 1420.07 88.7696C1419.85 88.9434 1419.86 89.0275 1419.92 90.1133L1419.92 90.1556C1419.94 90.622 1420 91.0859 1420.1 91.5416C1420.13 91.5981 1420.15 91.6623 1420.15 91.7276C1420.15 91.7389 1420.15 91.7501 1420.15 91.7613C1420.14 91.7903 1420.14 91.8188 1420.13 91.8463C1420.12 91.8696 1420.11 91.8922 1420.1 91.9136C1420.02 92.4008 1420.02 92.8973 1420.09 93.3856C1420.12 93.5914 1420.15 93.7996 1420.15 94.0086C1420.15 94.2748 1420.2 94.539 1420.31 94.7826C1420.39 94.8826 1420.42 95.1536 1420.36 95.6006C1420.33 95.9726 1420.3 96.3636 1420.3 96.4836C1420.3 97.2486 1420.29 97.4556 1420.19 97.5646C1420.09 97.7645 1420.03 97.9789 1420.01 98.1986C1419.95 98.5409 1419.8 98.8613 1419.58 99.1261C1419.35 99.391 1419.06 99.5908 1418.73 99.7046C1418.41 99.7686 1418.37 99.8136 1418.35 100.163C1418.34 100.307 1418.34 100.451 1418.34 100.596H1425.15L1425.16 100.009L1424.63 99.9526C1424.15 99.9106 1423.51 99.5946 1423.51 99.3966C1423.51 99.3546 1423.44 99.3216 1423.36 99.3216C1423.15 99.3216 1422.9 98.9166 1422.76 98.3496C1422.7 98.1116 1422.61 97.8811 1422.5 97.6626C1422.29 97.2785 1422.24 96.8328 1422.33 96.4086C1422.42 96.2666 1422.4 96.1086 1422.28 95.8746C1422.17 95.6423 1422.11 95.3886 1422.11 95.1316C1422.11 94.8747 1422.17 94.6209 1422.28 94.3886C1422.42 94.1401 1422.49 93.856 1422.48 93.5696C1422.48 93.307 1422.52 93.046 1422.6 92.7956C1422.68 92.5078 1422.72 92.211 1422.72 91.9126C1422.74 91.3006 1422.71 91.1356 1422.53 90.9626C1422.43 90.8536 1422.38 90.7626 1422.43 90.7626C1422.63 90.7626 1422.75 90.3376 1422.82 89.4106C1422.93 87.8716 1422.92 87.7106 1422.63 87.4466C1422.4 87.2396 1422.4 87.2286 1422.6 87.0866C1422.72 86.9838 1422.8 86.846 1422.84 86.6926C1422.85 86.5784 1422.89 86.4691 1422.96 86.3766C1423.14 86.0587 1423.22 85.694 1423.2 85.3286C1423.15 85.3176 1423.15 85.0887 1423.2 84.8486C1423.25 84.4942 1423.26 84.1348 1423.22 83.7786C1423.18 83.3206 1423.2 83.1696 1423.3 83.1696C1423.4 83.1696 1423.42 83.0386 1423.37 82.7006C1423.33 82.4006 1423.35 82.1866 1423.44 82.1116C1423.54 82.0116 1423.53 81.9576 1423.41 81.8826C1423.29 81.8076 1423.28 81.7406 1423.37 81.5826C1423.39 81.5559 1423.41 81.5267 1423.42 81.496C1423.43 81.4634 1423.43 81.4291 1423.44 81.3943C1423.44 81.3267 1423.42 81.2599 1423.38 81.2026C1423.33 81.0906 1423.33 81.0266 1423.38 81.0266C1423.54 81.0266 1423.61 80.4596 1423.49 80.3056C1423.42 80.2056 1423.42 80.1626 1423.52 80.1626C1423.59 80.1626 1423.62 80.0766 1423.59 79.9556C1423.56 79.8346 1423.57 79.7376 1423.61 79.7376C1423.71 79.7376 1423.82 79.2906 1423.9 78.6146C1423.92 78.2549 1423.97 77.8973 1424.05 77.5446C1424.19 77.1225 1424.26 76.6795 1424.25 76.2346C1424.19 76.1926 1424.24 76.0166 1424.31 75.8516C1424.36 75.7717 1424.39 75.6832 1424.4 75.5915C1424.41 75.4997 1424.41 75.4066 1424.38 75.3176C1424.28 75.0436 1424.36 74.3906 1424.49 74.3906C1424.54 74.3906 1424.59 74.2596 1424.59 74.0976C1424.6 73.872 1424.63 73.648 1424.69 73.4296C1424.76 73.0403 1424.82 72.6465 1424.84 72.2506C1424.9 71.3506 1424.97 71.0746 1425.19 71.0746C1425.28 71.0746 1425.38 70.9326 1425.41 70.7566C1425.5 70.3316 1425.82 70.3206 1425.92 70.7256C1425.97 70.8898 1426.04 71.0448 1426.14 71.1836C1426.29 71.3566 1426.37 71.9236 1426.45 73.4296C1426.47 73.9301 1426.53 74.4288 1426.61 74.9236C1426.69 75.2976 1426.73 75.6785 1426.73 76.0606C1426.74 76.4733 1426.77 76.8849 1426.84 77.2926C1426.92 77.878 1426.96 78.4691 1426.96 79.0606C1426.93 79.4807 1426.96 79.9028 1427.05 80.3146C1427.15 80.729 1427.2 81.1535 1427.2 81.5796C1427.24 82.2356 1427.31 83.2166 1427.34 83.7416C1427.37 84.2666 1427.39 85.0066 1427.38 85.3676C1427.36 85.6856 1427.4 86.0057 1427.5 86.3066C1427.63 86.6605 1427.65 87.041 1427.57 87.4066C1427.5 88.1066 1427.51 88.2586 1427.69 88.4986C1427.92 89.0307 1427.98 89.6193 1427.87 90.1886C1427.85 90.2436 1427.85 90.3027 1427.85 90.3613C1427.86 90.4199 1427.87 90.4764 1427.91 90.5266C1427.99 90.7698 1428.03 91.0241 1428.04 91.2806C1428.05 91.5736 1428.1 91.8146 1428.15 91.8146C1428.19 91.8146 1428.22 91.8816 1428.22 91.9686C1428.27 92.1259 1428.36 92.2679 1428.48 92.3816C1428.64 92.5576 1428.69 92.6816 1428.61 92.6996C1428.49 93.1608 1428.49 93.6485 1428.63 94.1076C1428.7 94.2607 1428.74 94.4271 1428.75 94.5966C1428.77 94.8179 1428.83 95.0346 1428.91 95.2416C1429 95.4481 1429.03 95.6738 1429 95.8956C1428.98 96.1136 1429 96.3226 1429.07 96.3536C1429.22 96.4536 1429.23 96.8456 1429.07 96.8456C1429 96.8456 1429 96.9126 1429.07 97.0526C1429.15 97.1815 1429.19 97.3315 1429.19 97.4834C1429.18 97.6352 1429.13 97.782 1429.04 97.9046C1428.99 97.9745 1428.95 98.0546 1428.92 98.1405C1428.91 98.1741 1428.9 98.2084 1428.9 98.2429C1428.89 98.2965 1428.89 98.3508 1428.9 98.4046C1428.91 98.4911 1428.91 98.5798 1428.89 98.6647C1428.87 98.7495 1428.82 98.8285 1428.77 98.896C1428.71 98.9635 1428.64 99.018 1428.56 99.0558C1428.52 99.0752 1428.48 99.09 1428.44 99.0998C1428.42 99.1044 1428.4 99.1079 1428.37 99.1103C1428.35 99.1129 1428.33 99.1144 1428.31 99.1146C1428.14 99.1226 1428.06 99.1896 1428.08 99.2656C1428.14 99.4196 1427.8 99.6256 1427.46 99.6256C1427.24 99.6428 1427.02 99.6793 1426.8 99.7346L1426.4 99.8436L1426.43 100.596ZM189.726 150.118V147.934L189.725 150.117L189.726 150.118ZM58.8819 122.643H60.0529C60.0509 122.37 60.0481 122.095 60.0454 121.835C60.0372 121.05 60.0304 120.395 60.0529 120.293C60.1319 119.993 60.5159 107.568 60.5159 107.568L60.2529 106.524L59.9899 106.006L60.0529 105.29H56.9239V120.947L58.8819 122.643ZM1381.19 122.516L1383.07 120.887V105.163H1379.94L1380.01 105.879L1379.74 106.397L1379.48 107.441C1379.48 107.441 1379.87 119.866 1379.94 120.166C1379.97 120.268 1379.96 120.92 1379.95 121.704V121.711C1379.95 121.97 1379.95 122.244 1379.94 122.516H1381.19ZM1374.26 105.355H1375.83V122.516H1373.22V107.249L1373.41 106.597L1373.55 106.008L1373.68 105.49L1374.26 105.355ZM1367.15 105.618H1368.65V122.518H1366.95V107.504L1367.15 106.597L1367.61 106.134L1367.15 105.618ZM1353.91 108.03H1357.1V108.682C1357.29 109.143 1357.42 109.625 1357.49 110.117C1357.44 110.339 1357.49 122.842 1357.49 122.842H1353.26C1353.03 122.451 1353.26 109.854 1353.26 109.854L1353.46 109.073L1353.26 108.681L1353.39 108.157L1353.91 108.03ZM64.1629 105.482H65.7329L66.3229 105.617L66.4489 106.135L66.5859 106.724L66.7749 107.376V122.643H64.1629V105.482ZM71.3439 105.745H72.8439L72.3889 106.261L72.8439 106.724L73.0439 107.631V122.645H71.3439V105.745ZM82.8918 108.157H86.0868L86.6098 108.284L86.7368 108.808L86.5368 109.2L86.7368 109.981C86.7368 109.981 86.9608 122.578 86.7368 122.969H82.5008C82.5008 122.969 82.5558 110.466 82.5008 110.244C82.5733 109.752 82.7046 109.27 82.8918 108.809V108.157Z" fill="#1B023F"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M1262.43 128.996V128.822C1262.41 128.516 1262.32 128.217 1262.19 127.94C1262.06 127.672 1261.89 127.428 1261.68 127.219C1261.47 127.011 1261.22 126.841 1260.95 126.719C1260.68 126.593 1260.38 126.519 1260.08 126.501V126.141H1259.77V125.711H1260.05V125.251H1259.83L1259.88 125.125L1259.92 125.015L1259.95 124.934L1259.96 124.897C1259.97 124.862 1259.98 124.826 1259.98 124.79C1259.99 124.732 1260 124.656 1260.01 124.58L1260.02 124.493C1260.03 124.448 1260.03 124.405 1260.04 124.368L1260.04 124.317C1260.04 124.285 1260.05 124.263 1260.05 124.252C1260.05 124.236 1260.04 124.158 1260.02 124.041L1260 123.894C1259.99 123.808 1259.98 123.714 1259.96 123.621L1259.91 123.213L1259.88 123.028L1259.81 122.686L1259.42 120.83C1259.4 120.785 1259.39 120.741 1259.37 120.698L1259.33 120.598C1259.31 120.549 1259.29 120.496 1259.27 120.444L1259.18 120.197L1259.13 120.086L1259.03 119.05L1259.19 119.188L1259.2 119.21L1259.21 119.266L1259.23 119.322C1259.23 119.33 1259.23 119.339 1259.24 119.348L1259.24 119.361L1259.25 119.411L1259.27 119.491L1259.29 119.566L1259.3 119.599V119.776C1259.3 119.791 1259.3 119.806 1259.31 119.821C1259.32 119.841 1259.33 119.862 1259.34 119.882L1259.36 119.936L1259.37 119.959L1259.41 119.967L1259.5 119.984C1259.53 119.99 1259.57 119.996 1259.6 120C1259.64 120.003 1259.67 120.003 1259.7 120C1259.72 119.999 1259.74 119.996 1259.76 119.991C1259.76 119.991 1259.76 119.99 1259.77 119.987C1259.77 119.985 1259.77 119.981 1259.77 119.978V119.967H1259.77L1259.78 119.921L1259.83 119.811L1259.85 119.762C1259.86 119.743 1259.86 119.724 1259.87 119.705L1259.89 119.677L1259.89 119.672C1259.91 119.63 1259.93 119.589 1259.94 119.558C1259.95 119.545 1259.96 119.532 1259.96 119.522C1259.97 119.512 1259.98 119.503 1259.99 119.496C1260.01 119.486 1260.03 119.483 1260.04 119.486C1260.05 119.487 1260.05 119.488 1260.06 119.491C1260.07 119.493 1260.07 119.497 1260.08 119.501L1260.09 119.512V119.484C1260.09 119.462 1260.1 119.44 1260.1 119.419C1260.11 119.392 1260.12 119.366 1260.13 119.342C1260.15 119.318 1260.16 119.297 1260.18 119.28C1260.21 119.264 1260.23 119.246 1260.25 119.227C1260.27 119.207 1260.28 119.187 1260.3 119.165C1260.31 119.155 1260.32 119.144 1260.33 119.134C1260.33 119.124 1260.34 119.113 1260.35 119.103C1260.36 119.086 1260.37 119.068 1260.37 119.05C1260.37 119.043 1260.37 119.037 1260.37 119.031C1260.37 119.027 1260.37 119.023 1260.37 119.02C1260.37 119.015 1260.37 119.011 1260.37 119.007C1260.37 119.003 1260.36 119 1260.36 118.997L1260.36 118.993L1260.35 118.985C1260.35 118.976 1260.34 118.968 1260.34 118.96C1260.33 118.947 1260.32 118.935 1260.31 118.923C1260.29 118.899 1260.27 118.875 1260.26 118.855C1260.25 118.846 1260.24 118.836 1260.24 118.826C1260.23 118.819 1260.23 118.813 1260.23 118.806C1260.23 118.793 1260.24 118.781 1260.25 118.772C1260.26 118.76 1260.27 118.75 1260.28 118.742L1260.31 118.721V118.714L1260.65 118.507V118.407C1260.65 118.401 1260.65 118.395 1260.65 118.39C1260.65 118.384 1260.65 118.378 1260.65 118.372C1260.65 118.363 1260.65 118.354 1260.65 118.345L1260.65 118.326L1260.65 118.311V118.004C1260.65 117.983 1260.64 117.962 1260.64 117.942C1260.64 117.916 1260.64 117.891 1260.63 117.867C1260.63 117.851 1260.62 117.834 1260.62 117.818C1260.62 117.809 1260.61 117.8 1260.61 117.792L1260.61 117.767C1260.6 117.753 1260.6 117.74 1260.59 117.729C1260.59 117.723 1260.59 117.718 1260.59 117.712C1260.59 117.698 1260.58 117.684 1260.58 117.67V117.37C1260.58 117.356 1260.58 117.342 1260.57 117.329L1260.54 117.289C1260.54 117.273 1260.53 117.256 1260.53 117.24L1260.53 117.225L1260.52 117.21C1260.52 117.196 1260.52 117.182 1260.51 117.169C1260.51 117.156 1260.5 117.142 1260.5 117.128L1260.48 117.078L1260.44 116.984C1260.43 116.954 1260.42 116.925 1260.41 116.9C1260.4 116.888 1260.4 116.875 1260.39 116.863C1260.39 116.849 1260.38 116.835 1260.37 116.821L1260.35 116.784C1260.35 116.768 1260.34 116.753 1260.33 116.738L1260.29 116.659L1260.25 116.589L1260.19 116.464L1260.09 116.264L1260 116.077L1259.95 115.994L1259.62 115.12C1259.79 115.373 1259.96 115.614 1260.12 115.832C1260.28 116.037 1260.45 116.231 1260.63 116.411C1260.78 116.563 1260.95 116.691 1261.14 116.792C1261.3 116.878 1261.48 116.919 1261.66 116.912C1262.08 116.812 1262.24 116.392 1262.23 115.804C1262.19 115.086 1262.02 114.381 1261.75 113.717C1261.47 112.983 1261.1 112.287 1260.65 111.647C1260.36 111.154 1259.91 110.779 1259.37 110.589C1259.21 110.574 1259.05 110.613 1258.92 110.7C1258.81 110.781 1258.71 110.891 1258.66 111.02C1258.6 111.151 1258.56 111.291 1258.55 111.434C1258.53 111.564 1258.54 111.695 1258.55 111.825L1258.52 111.851L1258.44 111.91C1258.41 111.932 1258.38 111.955 1258.36 111.975C1258.35 111.986 1258.33 112.001 1258.32 112.018C1258.32 112.026 1258.32 112.034 1258.33 112.042C1258.33 112.047 1258.33 112.052 1258.33 112.057C1258.34 112.067 1258.34 112.077 1258.35 112.087L1258.36 112.101L1258.36 112.113L1258.4 112.164L1258.41 112.189L1258.2 112.158L1258.19 112.148L1258.16 112.124L1258.13 112.094C1258.13 112.086 1258.12 112.076 1258.11 112.067C1258.11 112.056 1258.1 112.046 1258.08 112.039C1258.08 112.033 1258.07 112.027 1258.06 112.021L1258.05 112.015L1258.04 112.009L1257.99 111.989L1257.97 111.979L1257.94 111.953L1257.88 111.889C1257.85 111.867 1257.83 111.844 1257.81 111.825C1257.8 111.814 1257.78 111.802 1257.77 111.789C1257.77 111.778 1257.76 111.766 1257.76 111.754C1257.76 111.745 1257.76 111.735 1257.76 111.724C1257.76 111.717 1257.76 111.71 1257.75 111.703C1257.75 111.685 1257.75 111.667 1257.75 111.649V111.314C1257.76 111.299 1257.76 111.285 1257.76 111.271C1257.76 111.26 1257.77 111.249 1257.77 111.24C1257.78 111.231 1257.78 111.223 1257.79 111.216L1257.8 111.204C1257.81 111.199 1257.81 111.194 1257.82 111.189L1257.92 111.119C1257.93 111.113 1257.94 111.107 1257.95 111.1C1257.96 111.093 1257.97 111.086 1257.98 111.079C1257.98 111.074 1257.99 111.07 1257.99 111.064C1258 111.059 1258 111.053 1258 111.047L1258 111.042L1258.01 111.039L1258.01 111.037L1258 111.032L1258 111.027V111.012L1258 111.006C1258 111.004 1258 111.002 1258 111C1258 110.998 1258 110.996 1258 110.994L1258 110.989C1258.01 110.98 1258.01 110.971 1258.01 110.962C1258.01 110.948 1258.01 110.934 1258.02 110.921C1258.02 110.913 1258.02 110.905 1258.02 110.898C1258.02 110.89 1258.02 110.882 1258.02 110.875C1258.02 110.86 1258.03 110.845 1258.03 110.831C1258.04 110.823 1258.04 110.816 1258.05 110.808C1258.05 110.801 1258.05 110.795 1258.05 110.789C1258.05 110.777 1258.05 110.765 1258.05 110.753V110.674C1258.05 110.658 1258.05 110.642 1258.05 110.627C1258.05 110.616 1258.05 110.606 1258.05 110.596L1258.05 110.587C1258.05 110.584 1258.05 110.581 1258.04 110.578C1258.04 110.562 1258.04 110.545 1258.04 110.529C1258.03 110.513 1258.03 110.497 1258.04 110.482V110.426C1258.04 110.403 1258.03 110.381 1258.03 110.36C1258.03 110.354 1258.03 110.349 1258.03 110.343L1258.03 110.332V110.327C1258.03 110.316 1258.03 110.305 1258.02 110.295L1258.01 110.248C1258.01 110.24 1258.01 110.232 1258.01 110.225C1258 110.219 1258 110.213 1258 110.207C1257.99 110.192 1257.98 110.178 1257.98 110.164C1257.97 110.15 1257.96 110.134 1257.95 110.119C1257.95 110.104 1257.94 110.089 1257.94 110.074C1257.93 110.059 1257.93 110.044 1257.92 110.031L1257.91 109.989L1257.9 109.953L1257.88 109.915L1257.87 109.9C1257.87 109.89 1257.86 109.88 1257.86 109.87L1257.82 109.816C1257.82 109.809 1257.82 109.802 1257.81 109.796C1257.8 109.783 1257.8 109.769 1257.79 109.756C1257.78 109.735 1257.77 109.714 1257.76 109.693C1257.76 109.675 1257.75 109.658 1257.75 109.64C1257.74 109.632 1257.74 109.625 1257.74 109.617L1257.74 109.603C1257.74 109.598 1257.74 109.594 1257.74 109.589C1257.74 109.584 1257.74 109.579 1257.74 109.574V109.547C1257.74 109.529 1257.73 109.512 1257.72 109.496C1257.71 109.473 1257.7 109.446 1257.69 109.417L1257.64 109.334L1257.61 109.27C1257.61 109.262 1257.6 109.256 1257.6 109.253C1257.59 109.249 1257.59 109.248 1257.59 109.248C1257.58 109.248 1257.58 109.249 1257.57 109.251C1257.57 109.252 1257.57 109.254 1257.57 109.256L1257.56 109.259C1257.56 109.266 1257.55 109.273 1257.54 109.282L1257.54 109.294L1257.31 109.425L1257.29 109.325L1257.3 109.281C1257.31 109.254 1257.31 109.218 1257.32 109.181C1257.33 109.144 1257.33 109.102 1257.34 109.068C1257.34 109.042 1257.35 109.015 1257.35 108.989C1257.35 108.983 1257.35 108.977 1257.34 108.973C1257.34 108.971 1257.34 108.969 1257.34 108.967C1257.34 108.966 1257.33 108.964 1257.33 108.964C1257.32 108.963 1257.3 108.965 1257.29 108.97C1257.28 108.974 1257.27 108.98 1257.25 108.987L1257.23 108.997L1257.11 108.975L1257.12 108.959C1257.13 108.944 1257.13 108.93 1257.14 108.917L1257.15 108.893C1257.15 108.882 1257.16 108.87 1257.16 108.858C1257.17 108.835 1257.17 108.812 1257.18 108.789C1257.18 108.774 1257.18 108.76 1257.18 108.746V108.735L1257.18 108.739L1257.21 108.575L1257.38 108.583H1257.38L1257.4 108.572L1257.43 108.555L1257.47 108.529C1257.48 108.522 1257.49 108.512 1257.5 108.5C1257.5 108.493 1257.5 108.487 1257.5 108.48C1257.51 108.474 1257.51 108.467 1257.51 108.46C1257.51 108.442 1257.51 108.425 1257.51 108.408C1257.52 108.399 1257.52 108.39 1257.52 108.38C1257.52 108.369 1257.52 108.357 1257.52 108.345C1257.52 108.333 1257.53 108.321 1257.53 108.309C1257.53 108.302 1257.53 108.295 1257.53 108.289C1257.53 108.274 1257.53 108.259 1257.53 108.245V108.103C1257.53 108.069 1257.53 108.036 1257.54 108.003C1257.54 107.969 1257.54 107.924 1257.54 107.886C1257.54 107.852 1257.54 107.819 1257.54 107.786C1257.54 107.755 1257.54 107.725 1257.54 107.695C1257.54 107.671 1257.53 107.648 1257.52 107.626C1257.52 107.611 1257.51 107.595 1257.51 107.58L1257.5 107.562H1257.36L1257.05 107.569L1256.93 107.489L1256.73 107.389L1256.53 107.405L1256.32 107.55L1256.12 107.957L1255.99 108.472L1255.98 109.248L1255.78 109.494L1255.65 109.755L1255.8 109.939V110.723L1255.94 110.953L1256.15 111.091C1256.15 111.096 1256.15 111.101 1256.15 111.106C1256.14 111.114 1256.14 111.122 1256.14 111.13C1256.14 111.144 1256.13 111.162 1256.13 111.181L1256.13 111.184C1256.13 111.196 1256.13 111.209 1256.13 111.223C1256.12 111.259 1256.11 111.296 1256.1 111.33C1256.1 111.359 1256.08 111.386 1256.07 111.413C1256.06 111.435 1256.05 111.46 1256.04 111.485C1256.04 111.514 1256.03 111.543 1256.03 111.573C1256.03 111.582 1256.03 111.591 1256.03 111.599C1256.03 111.619 1256.03 111.638 1256.03 111.658C1256.02 111.679 1256.02 111.7 1256.03 111.721V112.044C1256.03 112.07 1256.02 112.096 1256.01 112.121C1256 112.148 1255.99 112.175 1255.97 112.201C1255.96 112.226 1255.95 112.248 1255.94 112.264L1255.92 112.289L1255.76 112.458L1255.69 112.5L1255.53 112.6L1255.35 112.708L1255.34 112.713L1255.34 112.713C1255.29 112.744 1255.25 112.77 1255.23 112.784L1255.19 112.813L1255.13 112.858L1255.01 112.958L1254.91 113.049L1254.87 113.088L1254.69 113.825L1254.63 114.163L1254.58 114.378L1254.29 114.947L1253.72 115.44L1253.19 116.132L1252.43 116.887L1252.15 116.948H1251.73L1251.56 117.038L1249.86 113.63L1249.94 113.499V113.426C1249.94 113.417 1249.94 113.408 1249.94 113.399C1249.94 113.392 1249.94 113.384 1249.94 113.376C1249.94 113.362 1249.93 113.353 1249.93 113.353H1249.79L1249.77 113.359C1249.77 113.361 1249.76 113.361 1249.75 113.359C1249.75 113.357 1249.74 113.355 1249.74 113.352C1249.74 113.348 1249.74 113.345 1249.73 113.341C1249.73 113.323 1249.72 113.306 1249.72 113.29C1249.71 113.273 1249.71 113.255 1249.7 113.238L1249.7 113.216L1249.68 113.149L1249.67 113.12L1249.69 112.942L1248.5 111.186L1249.17 113.232L1249.32 113.271L1249.4 113.363L1249.43 113.44L1249.4 113.556L1249.4 113.649L1249.5 113.711L1249.58 113.718H1249.6L1251.37 117.286L1251.19 117.34L1251.17 117.509L1251.22 117.724L1251.37 117.939L1251.55 118.016L1251.65 118.293H1251.82L1251.87 118.273L1253.69 121.942V122.007L1253.73 122.073C1253.75 122.113 1253.78 122.166 1253.81 122.22C1253.85 122.274 1253.88 122.331 1253.91 122.376C1253.94 122.41 1253.96 122.441 1253.99 122.467C1254.01 122.48 1254.03 122.5 1254.03 122.523C1254.04 122.55 1254.05 122.578 1254.05 122.607C1254.05 122.636 1254.05 122.665 1254.05 122.694V122.829C1254.05 122.842 1254.05 122.855 1254.05 122.87L1254.06 122.894C1254.06 122.906 1254.06 122.917 1254.06 122.929L1254.07 122.956C1254.07 122.982 1254.07 123.006 1254.07 123.029C1254.08 123.052 1254.08 123.075 1254.07 123.099C1254.07 123.145 1254.08 123.191 1254.08 123.237C1254.09 123.278 1254.09 123.326 1254.1 123.377L1254.1 123.381C1254.1 123.414 1254.1 123.449 1254.1 123.484C1254.11 123.526 1254.11 123.569 1254.11 123.61L1254.12 123.731C1254.13 123.801 1254.13 123.853 1254.13 123.868C1254.13 123.879 1254.13 123.89 1254.12 123.9C1254.12 123.916 1254.11 123.932 1254.1 123.947C1254.09 123.969 1254.07 123.994 1254.06 124.019C1254.05 124.033 1254.04 124.047 1254.03 124.061C1254 124.1 1253.97 124.136 1253.95 124.161L1253.92 124.205L1254.07 124.481L1254.56 124.639V125.278H1254.08V125.739H1254.37V126.17H1254.06V126.531C1253.76 126.553 1253.46 126.63 1253.19 126.758C1252.92 126.883 1252.67 127.055 1252.46 127.265C1252.02 127.697 1251.76 128.268 1251.7 128.879V129.521L1251.7 129.552L1251.71 129.583L1251.72 129.613L1251.72 129.644L1251.73 129.677L1251.73 129.709L1251.74 129.741L1251.75 129.774V129.806C1251.81 130.046 1251.91 130.276 1252.04 130.488C1252.17 130.699 1252.33 130.891 1252.51 131.059C1252.69 131.226 1252.9 131.368 1253.12 131.48C1253.34 131.592 1253.57 131.67 1253.82 131.712H1254.69L1255.74 131.705L1257.79 131.697L1258.24 131.691L1259.68 131.683L1259.88 131.686L1259.93 131.682C1259.99 131.681 1260.04 131.678 1260.09 131.674L1260.13 131.671C1260.62 131.624 1261.08 131.433 1261.47 131.121C1261.9 130.771 1262.21 130.293 1262.35 129.756V129.729L1262.37 129.686L1262.38 129.645L1262.38 129.604L1262.39 129.562V129.018C1262.43 129.01 1262.43 129.003 1262.43 128.996ZM1254.02 119.943L1254 120.043L1253.96 120.277L1253.95 120.391L1253.92 120.523L1253.91 120.588C1253.91 120.625 1253.9 120.651 1253.9 120.662C1253.89 120.678 1253.88 120.708 1253.87 120.746L1253.82 120.87L1253.78 120.982L1253.76 121.031L1253.74 121.381L1252.12 118.13L1252.17 118.081L1252.23 118.031L1252.28 117.984L1252.33 117.945C1252.35 117.925 1252.38 117.903 1252.4 117.881L1252.48 117.799L1252.54 117.729L1252.57 117.699L1252.87 117.513L1253.94 116.836L1253.9 116.899L1253.81 117.023L1253.77 117.089C1253.75 117.113 1253.74 117.136 1253.72 117.157C1253.7 117.186 1253.69 117.217 1253.67 117.25C1253.66 117.278 1253.66 117.307 1253.65 117.337C1253.65 117.353 1253.65 117.371 1253.65 117.39L1253.65 117.394V117.395C1253.65 117.417 1253.65 117.441 1253.65 117.465C1253.65 117.511 1253.65 117.558 1253.65 117.604C1253.66 117.645 1253.66 117.685 1253.67 117.726C1253.68 117.76 1253.69 117.794 1253.71 117.826C1253.73 117.858 1253.74 117.89 1253.76 117.92C1253.78 117.943 1253.8 117.963 1253.81 117.979L1253.81 117.988L1253.84 118.014L1254.02 118.244L1254.01 118.286L1254 118.3C1254 118.318 1253.99 118.341 1253.98 118.365C1253.97 118.382 1253.97 118.4 1253.96 118.418C1253.96 118.433 1253.95 118.449 1253.95 118.465C1253.94 118.492 1253.94 118.521 1253.93 118.55C1253.94 118.586 1253.94 118.622 1253.95 118.658C1253.96 118.704 1253.97 118.758 1253.99 118.806C1254 118.854 1254.01 118.906 1254.02 118.937L1254.04 118.994L1254.1 119.348L1254.02 119.943Z" fill="#1B023F"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M178.48 129.125C178.48 129.132 178.522 129.139 178.522 129.146V129.69L178.53 129.732L178.546 129.814L178.564 129.858V129.885C178.635 130.154 178.748 130.41 178.899 130.644C179.048 130.873 179.232 131.077 179.444 131.249C179.829 131.561 180.296 131.752 180.787 131.799H180.764L180.825 131.802C180.867 131.805 180.908 131.808 180.95 131.809L181.035 131.814L181.255 131.811L182.539 131.818L183.119 131.826L185.174 131.834L186.223 131.847H187.096C187.34 131.805 187.576 131.727 187.796 131.615C188.017 131.503 188.221 131.362 188.403 131.194C188.585 131.026 188.743 130.834 188.873 130.623C189.004 130.411 189.102 130.181 189.166 129.941V129.909L189.173 129.876L189.18 129.844L189.186 129.812L189.192 129.779L189.198 129.748L189.204 129.718L189.21 129.687L189.215 129.656V129.007C189.158 128.396 188.889 127.825 188.455 127.393C188.244 127.183 187.998 127.011 187.728 126.886C187.451 126.758 187.153 126.681 186.849 126.66V126.299H186.539V125.868H186.832V125.407H186.35V124.768L186.839 124.61L186.99 124.334L186.957 124.29C186.938 124.265 186.912 124.229 186.885 124.19C186.874 124.173 186.863 124.157 186.852 124.141C186.837 124.118 186.824 124.096 186.812 124.076C186.796 124.052 186.785 124.025 186.779 123.997C186.779 123.982 186.783 123.93 186.789 123.86C186.791 123.835 186.793 123.809 186.796 123.781C186.8 123.728 186.805 123.67 186.81 123.613C186.813 123.578 186.816 123.544 186.818 123.51C186.822 123.458 186.826 123.408 186.831 123.366C186.84 123.296 186.84 123.243 186.84 123.228C186.84 123.22 186.839 123.211 186.839 123.2C186.839 123.188 186.839 123.174 186.84 123.158C186.843 123.127 186.847 123.094 186.851 123.058C186.852 123.046 186.854 123.034 186.856 123.022C186.859 122.999 186.862 122.978 186.862 122.958V122.823C186.861 122.794 186.861 122.765 186.862 122.736C186.864 122.707 186.87 122.679 186.879 122.652C186.886 122.629 186.901 122.609 186.92 122.596C186.951 122.57 186.978 122.539 186.999 122.505C187.031 122.46 187.066 122.404 187.099 122.349C187.132 122.294 187.163 122.241 187.185 122.201L187.221 122.135V122.07L189.045 118.401L189.094 118.421H189.26L189.366 118.144L189.547 118.067L189.699 117.852L189.744 117.637L189.729 117.468L189.54 117.414L191.31 113.846H191.333L191.416 113.839L191.516 113.777L191.509 113.684L191.479 113.568L191.516 113.491L191.592 113.399L191.743 113.36L192.415 111.314L191.22 113.069L191.234 113.247L191.227 113.276L191.21 113.343C191.207 113.353 191.204 113.364 191.202 113.374C191.198 113.389 191.194 113.403 191.19 113.417C191.183 113.44 191.174 113.458 191.174 113.468C191.173 113.47 191.171 113.473 191.171 113.473C191.17 113.475 191.169 113.477 191.167 113.478C191.165 113.481 191.161 113.483 191.157 113.485C191.15 113.487 191.142 113.487 191.134 113.485L191.114 113.479H190.975C190.967 113.479 190.96 113.488 190.96 113.502C190.959 113.518 190.959 113.535 190.96 113.552V113.625L191.043 113.756L189.343 117.164L189.169 117.074H188.747L188.475 117.013L187.706 116.258L187.179 115.566L186.606 115.073L186.32 114.504L186.275 114.289L186.215 113.951L186.035 113.214L185.997 113.175L185.897 113.084L185.777 112.984C185.744 112.956 185.712 112.932 185.691 112.916L185.682 112.91C185.663 112.895 185.619 112.869 185.568 112.837L185.385 112.726L185.225 112.626L185.155 112.584L184.989 112.415L184.973 112.39C184.963 112.374 184.95 112.352 184.937 112.327C184.923 112.301 184.911 112.274 184.901 112.247C184.892 112.222 184.886 112.196 184.885 112.17V111.847C184.885 111.84 184.886 111.831 184.887 111.822C184.888 111.81 184.888 111.798 184.885 111.784C184.882 111.769 184.881 111.753 184.88 111.736C184.88 111.724 184.88 111.711 184.88 111.699C184.878 111.669 184.873 111.64 184.867 111.611C184.865 111.6 184.862 111.59 184.859 111.58C184.854 111.566 184.848 111.552 184.841 111.539C184.827 111.512 184.817 111.484 184.81 111.456C184.801 111.422 184.792 111.385 184.786 111.349C184.784 111.335 184.782 111.322 184.78 111.309C184.777 111.289 184.775 111.271 184.771 111.256C184.765 111.232 184.765 111.217 184.765 111.217L184.976 111.078L185.112 110.848V110.064L185.262 109.88L185.127 109.619L184.927 109.373L184.919 108.598L184.791 108.083L184.591 107.676L184.38 107.53L184.18 107.514L183.98 107.614L183.86 107.695L183.551 107.688H183.416L183.405 107.705C183.405 107.714 183.396 107.732 183.39 107.752C183.386 107.763 183.382 107.775 183.379 107.787C183.376 107.798 183.373 107.809 183.371 107.821C183.369 107.851 183.37 107.881 183.374 107.911C183.374 107.926 183.372 107.944 183.372 107.963C183.372 107.978 183.372 107.994 183.374 108.011C183.377 108.03 183.377 108.05 183.377 108.071C183.377 108.091 183.377 108.111 183.379 108.128C183.384 108.162 183.384 108.198 183.384 108.228V108.37C183.384 108.374 183.384 108.379 183.383 108.385C183.383 108.394 183.382 108.405 183.384 108.414C183.385 108.417 183.386 108.421 183.387 108.426C183.389 108.44 183.393 108.458 183.398 108.476C183.402 108.488 183.402 108.5 183.402 108.511C183.403 108.521 183.403 108.53 183.405 108.539C183.41 108.558 183.41 108.576 183.41 108.591C183.412 108.605 183.416 108.618 183.422 108.631C183.429 108.643 183.438 108.653 183.45 108.66L183.486 108.681L183.514 108.698L183.532 108.709H183.539L183.705 108.701L183.739 108.864L183.735 108.86V108.871C183.735 108.878 183.736 108.885 183.737 108.892C183.738 108.899 183.739 108.906 183.74 108.914C183.743 108.93 183.746 108.947 183.75 108.963C183.752 108.97 183.753 108.976 183.755 108.983C183.759 108.997 183.764 109.01 183.768 109.023C183.771 109.029 183.773 109.035 183.775 109.042C183.781 109.06 183.792 109.074 183.792 109.084L183.801 109.099L183.68 109.122L183.662 109.112C183.65 109.105 183.636 109.099 183.623 109.095C183.611 109.089 183.597 109.087 183.584 109.089C183.578 109.09 183.573 109.093 183.57 109.097C183.568 109.1 183.567 109.104 183.566 109.107C183.566 109.109 183.566 109.111 183.566 109.114C183.567 109.143 183.57 109.172 183.575 109.201C183.58 109.235 183.587 109.277 183.593 109.314C183.598 109.343 183.603 109.372 183.608 109.396L183.611 109.414L183.621 109.454L183.606 109.554L183.379 109.423L183.372 109.411C183.367 109.402 183.36 109.395 183.353 109.388C183.35 109.384 183.346 109.382 183.342 109.38C183.338 109.378 183.334 109.377 183.329 109.377C183.321 109.377 183.313 109.384 183.305 109.399L183.272 109.459C183.259 109.485 183.244 109.513 183.23 109.542C183.216 109.571 183.203 109.598 183.193 109.621C183.191 109.625 183.189 109.63 183.187 109.635C183.182 109.647 183.179 109.659 183.177 109.672V109.699C183.178 109.708 183.178 109.718 183.177 109.728C183.176 109.74 183.173 109.753 183.17 109.765C183.166 109.783 183.16 109.8 183.154 109.818C183.146 109.839 183.137 109.86 183.126 109.881C183.116 109.902 183.104 109.922 183.092 109.941L183.059 109.995C183.053 110.004 183.048 110.013 183.043 110.023C183.04 110.028 183.038 110.034 183.035 110.04L183.019 110.078L183.005 110.114C183.002 110.121 182.999 110.127 182.995 110.133C182.992 110.139 182.988 110.144 182.986 110.152C182.983 110.161 182.979 110.171 182.976 110.181C182.975 110.185 182.974 110.19 182.974 110.195C182.97 110.21 182.964 110.225 182.957 110.24C182.95 110.255 182.942 110.271 182.934 110.285C182.926 110.299 182.918 110.314 182.912 110.328C182.906 110.341 182.902 110.354 182.899 110.369C182.892 110.382 182.899 110.4 182.892 110.42C182.89 110.427 182.889 110.434 182.888 110.442C182.888 110.456 182.889 110.471 182.885 110.485C182.879 110.507 182.879 110.53 182.879 110.551V110.607C182.88 110.622 182.88 110.638 182.879 110.654C182.877 110.67 182.879 110.686 182.871 110.703C182.865 110.715 182.864 110.726 182.863 110.738C182.863 110.743 182.863 110.747 182.863 110.752C182.863 110.76 182.862 110.769 182.862 110.778C182.862 110.785 182.863 110.792 182.863 110.799V110.878C182.862 110.89 182.862 110.902 182.863 110.914C182.867 110.929 182.873 110.943 182.881 110.957C182.887 110.971 182.891 110.986 182.893 111.001C182.896 111.008 182.896 111.016 182.896 111.024C182.896 111.031 182.896 111.039 182.899 111.047C182.905 111.062 182.905 111.076 182.905 111.088C182.906 111.097 182.908 111.105 182.912 111.114C182.915 111.117 182.916 111.121 182.917 111.125C182.917 111.129 182.917 111.133 182.915 111.137V111.152C182.913 111.158 182.913 111.165 182.915 111.172C182.922 111.184 182.931 111.195 182.942 111.204C182.951 111.211 182.959 111.218 182.968 111.225C182.976 111.232 182.985 111.238 182.993 111.244L183.097 111.314C183.108 111.322 183.118 111.332 183.128 111.342C183.132 111.346 183.135 111.35 183.139 111.354C183.141 111.358 183.144 111.362 183.146 111.366C183.151 111.375 183.155 111.386 183.157 111.397C183.16 111.411 183.162 111.425 183.163 111.44V111.774C183.163 111.779 183.163 111.785 183.164 111.791C183.164 111.803 183.164 111.816 183.163 111.828C183.162 111.835 183.161 111.842 183.16 111.849C183.158 111.86 183.156 111.87 183.156 111.879C183.154 111.891 183.151 111.902 183.146 111.914C183.135 111.927 183.123 111.939 183.109 111.95C183.09 111.969 183.066 111.992 183.042 112.014L182.979 112.078L182.95 112.104L182.93 112.114L182.882 112.136C182.866 112.146 182.848 112.156 182.834 112.166C182.824 112.172 182.814 112.181 182.807 112.191L182.805 112.194C182.799 112.203 182.793 112.211 182.785 112.219L182.755 112.249L182.728 112.273L182.716 112.283L182.505 112.314L182.52 112.294C182.529 112.28 182.541 112.262 182.553 112.243C182.565 112.224 182.577 112.204 182.585 112.187C182.589 112.18 182.592 112.173 182.594 112.165C182.595 112.159 182.596 112.154 182.596 112.148C182.586 112.131 182.572 112.116 182.556 112.105C182.534 112.085 182.505 112.062 182.476 112.04L182.398 111.981L182.363 111.955C182.382 111.825 182.385 111.694 182.37 111.564C182.356 111.421 182.319 111.281 182.26 111.15C182.203 111.021 182.112 110.91 181.997 110.83C181.863 110.743 181.704 110.704 181.545 110.719C181.008 110.908 180.556 111.281 180.268 111.772C179.815 112.412 179.446 113.108 179.168 113.842C178.894 114.506 178.732 115.211 178.687 115.929C178.678 116.517 178.842 116.937 179.253 117.037C179.435 117.044 179.616 117.003 179.776 116.917C179.965 116.816 180.138 116.687 180.289 116.536C180.472 116.355 180.641 116.162 180.795 115.957C180.962 115.739 181.129 115.498 181.295 115.245L180.964 116.119L180.922 116.202L180.828 116.389L180.728 116.589L180.665 116.714L180.628 116.783L180.587 116.862C180.573 116.889 180.559 116.918 180.546 116.945C180.533 116.972 180.522 116.999 180.512 117.024C180.509 117.03 180.507 117.037 180.504 117.045C180.496 117.064 180.488 117.086 180.478 117.108L180.439 117.202L180.43 117.226C180.421 117.249 180.413 117.272 180.405 117.294C180.391 117.318 180.379 117.344 180.369 117.371C180.366 117.387 180.362 117.404 180.357 117.42L180.345 117.455C180.341 117.468 180.338 117.482 180.336 117.496C180.335 117.518 180.335 117.54 180.336 117.562V117.726C180.337 117.736 180.337 117.746 180.337 117.756C180.337 117.769 180.337 117.782 180.336 117.796C180.335 117.816 180.331 117.835 180.325 117.855C180.322 117.864 180.319 117.874 180.316 117.885C180.313 117.895 180.31 117.906 180.307 117.918C180.301 117.941 180.295 117.968 180.29 117.993C180.285 118.018 180.277 118.044 180.277 118.068C180.274 118.088 180.272 118.109 180.272 118.13V118.437C180.272 118.457 180.27 118.477 180.267 118.498C180.266 118.509 180.266 118.521 180.267 118.533V118.636L180.605 118.843L180.604 118.844L180.638 118.865C180.651 118.873 180.662 118.883 180.672 118.895C180.674 118.896 180.675 118.898 180.676 118.9C180.683 118.908 180.686 118.918 180.687 118.929C180.683 118.947 180.675 118.964 180.662 118.978C180.647 118.998 180.627 119.022 180.608 119.046C180.59 119.068 180.573 119.091 180.558 119.116C180.552 119.124 180.548 119.133 180.546 119.143C180.545 119.148 180.544 119.153 180.544 119.158C180.544 119.163 180.544 119.168 180.545 119.173C180.549 119.184 180.555 119.195 180.56 119.205C180.564 119.212 180.568 119.219 180.572 119.226C180.586 119.247 180.6 119.268 180.616 119.288C180.633 119.309 180.652 119.33 180.671 119.35C180.69 119.369 180.71 119.387 180.732 119.403C180.745 119.413 180.757 119.426 180.767 119.44C180.773 119.448 180.778 119.456 180.782 119.465C180.795 119.489 180.805 119.515 180.812 119.542C180.815 119.552 180.818 119.562 180.82 119.573C180.822 119.584 180.824 119.595 180.826 119.607V119.635C180.83 119.631 180.835 119.627 180.84 119.624C180.851 119.616 180.863 119.611 180.875 119.609C180.892 119.606 180.909 119.609 180.923 119.619C180.946 119.634 180.964 119.656 180.975 119.681C180.992 119.714 181.011 119.756 181.031 119.8C181.051 119.844 181.07 119.891 181.088 119.934L181.132 120.044L181.15 120.09H181.145L181.144 120.095L181.145 120.101C181.146 120.105 181.15 120.114 181.161 120.114C181.179 120.119 181.197 120.122 181.215 120.123C181.247 120.125 181.279 120.125 181.31 120.123C181.345 120.119 181.382 120.113 181.416 120.107L181.502 120.09L181.538 120.082L181.55 120.059L181.576 120.005C181.586 119.985 181.595 119.963 181.602 119.944C181.608 119.929 181.612 119.914 181.614 119.899V119.722L181.622 119.689L181.641 119.614L181.661 119.534L181.673 119.484C181.674 119.476 181.679 119.462 181.684 119.445L181.702 119.389L181.718 119.338L181.725 119.316L181.882 119.178L181.782 120.214L181.739 120.325L181.645 120.572C181.615 120.642 181.588 120.714 181.564 120.775L181.545 120.826C181.53 120.865 181.517 120.898 181.509 120.922C181.502 120.941 181.498 120.953 181.498 120.958L181.033 123.155L181.007 123.34C180.996 123.419 180.983 123.517 180.968 123.622L180.95 123.751C180.929 123.902 180.909 124.054 180.893 124.171C180.884 124.236 180.877 124.289 180.873 124.326C180.869 124.355 180.867 124.375 180.867 124.382C180.867 124.398 180.871 124.438 180.878 124.498C180.88 124.515 180.882 124.534 180.884 124.553C180.89 124.602 180.896 124.656 180.903 124.71C180.908 124.748 180.913 124.786 180.918 124.823C180.922 124.858 180.927 124.891 180.931 124.92C180.935 124.956 180.942 124.992 180.951 125.027L180.965 125.064L180.995 125.144L181.035 125.254L181.08 125.38H180.867V125.84H181.145V126.27H180.837V126.63C180.534 126.648 180.237 126.722 179.961 126.848C179.692 126.971 179.447 127.14 179.237 127.348C179.026 127.556 178.852 127.8 178.724 128.069C178.592 128.346 178.509 128.645 178.48 128.951V129.125ZM186.911 120.172L186.894 120.072L186.817 119.476L186.877 119.122L186.893 119.065C186.9 119.043 186.909 119.01 186.918 118.976C186.921 118.962 186.925 118.948 186.929 118.934C186.942 118.886 186.955 118.832 186.965 118.786C186.974 118.75 186.979 118.714 186.981 118.678C186.98 118.649 186.975 118.62 186.967 118.593C186.958 118.557 186.947 118.524 186.936 118.493C186.928 118.469 186.919 118.447 186.912 118.43C186.909 118.424 186.907 118.419 186.905 118.414L186.896 118.374L187.076 118.144L187.098 118.118L187.103 118.111C187.116 118.095 187.131 118.074 187.148 118.05C187.168 118.019 187.187 117.988 187.203 117.956C187.22 117.924 187.233 117.89 187.242 117.856C187.25 117.815 187.256 117.775 187.259 117.734C187.265 117.689 187.265 117.641 187.265 117.595C187.265 117.57 187.263 117.546 187.262 117.524C187.26 117.503 187.259 117.484 187.259 117.467C187.257 117.437 187.251 117.408 187.242 117.38C187.227 117.347 187.209 117.316 187.189 117.286C187.164 117.245 187.132 117.198 187.101 117.152L187.016 117.028L186.972 116.965L188.042 117.642L188.342 117.828L188.369 117.858L188.434 117.928L188.513 118.01C188.539 118.036 188.563 118.059 188.582 118.074L188.628 118.113L188.683 118.16L188.741 118.21L188.797 118.259L187.176 121.51L187.15 121.16L187.131 121.111L187.088 120.999L187.042 120.875C187.028 120.837 187.018 120.807 187.014 120.791C187.01 120.775 187 120.723 186.989 120.652C186.978 120.581 186.963 120.492 186.949 120.406L186.911 120.172Z" fill="#1B023F"/> -</g> -</g> -<defs> -<linearGradient id="paint0_linear_11691_168894" x1="720" y1="57.936" x2="720" y2="184.936" gradientUnits="userSpaceOnUse"> -<stop stop-color="#4D14B4"/> -<stop offset="0.483" stop-color="#6118CB"/> -<stop offset="1" stop-color="#9021FE"/> -</linearGradient> -<linearGradient id="paint1_linear_11691_168894" x1="802.08" y1="185" x2="802.104" y2="17.0198" gradientUnits="userSpaceOnUse"> -<stop stop-color="#4D00B4"/> -<stop offset="1" stop-color="#7E1BD4"/> -</linearGradient> -<clipPath id="clip0_11691_168894"> -<rect width="1440" height="185" fill="white"/> -</clipPath> -<clipPath id="clip1_11691_168894"> -<rect width="1440" height="185" fill="white"/> -</clipPath> -<clipPath id="clip2_11691_168894"> -<rect width="1440" height="185" fill="white"/> -</clipPath> -</defs> -</svg> - diff --git a/web-devtools/src/assets/svgs/hero/hero-darkmode-mobile.svg b/web-devtools/src/assets/svgs/hero/hero-darkmode-mobile.svg deleted file mode 100644 index 19e028aa6..000000000 --- a/web-devtools/src/assets/svgs/hero/hero-darkmode-mobile.svg +++ /dev/null @@ -1,53 +0,0 @@ -<svg viewBox="0 0 390 150" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_16498_64792)"> -<path d="M390 0H0V151H390V0Z" fill="#7E1BD4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M380.152 150.559L320.784 18.487L108.806 9L0 144.694V150.559H6.67975L90.5434 44.5304L65.5521 150.559H192.2L264.215 119.057L260.057 150.559H289.78L294.367 116.61L327.78 150.559H366.713L301.797 84.4891L320.93 45.1631L370.026 150.559H380.152ZM123.653 32.4488L246.428 85.3812L97.8622 143.736L123.653 32.4488ZM172.037 21.265L297.093 26.3473L275.193 66.4381L172.037 21.265Z" fill="#892ED8"/> -<path d="M229.029 77.5718L229.033 78.9269L207.141 68.5137L206.827 65.31L229.029 77.5718Z" fill="#1B023F"/> -<path d="M250.674 89.5286L250.6 90.4108L244.363 87.1639L244.253 85.9409L250.674 89.5286Z" fill="#1B023F"/> -<path d="M211.407 66.5273L206.994 64.0241L207.232 61.2714L211.137 64.8477L211.407 66.5273Z" fill="#1B023F"/> -<path d="M206.121 71.3561L143.602 83.2672L143.388 82.1363L143.198 81.678L143.65 81.3951L143.523 79.1879L205.508 65.2815L206.121 71.3561Z" fill="#1B023F"/> -<path d="M206.636 60.2994L205.816 62.5467L205.934 63.5064L142.651 78.4075L141.903 78.313L141.543 75.6572L145.24 74.1145L145.362 74.9674L147.045 73.9889L147.273 74.837L145.062 76.1416L148.768 75.1354L157.198 70.2308L164.916 67.1446L164.719 68.106L167.058 67.8614L167.033 66.2673L170.319 65.3703L170.131 67.1813L171.935 66.9448L172.29 62.1463L196.459 63.3156L196.438 61.8218L199.843 61.7777L200.037 60.0703L206.636 60.2994Z" fill="#1B023F"/> -<path d="M251.407 93.2247L207.544 71.3471L207.426 69.6568L229.904 80.9034L251.119 91.7032L251.407 93.2247Z" fill="#1B023F"/> -<path d="M185.481 107.098L142.425 111.766L142.948 110.423L185.481 107.098Z" fill="#1B023F"/> -<path d="M206.534 107.046L252.562 115.2L252.683 115.43L252.698 115.43C252.773 115.428 252.844 115.426 252.91 115.426C252.954 115.426 252.995 115.428 253.039 115.43C253.068 115.432 253.098 115.433 253.131 115.434L253.2 115.436C253.258 115.438 253.317 115.44 253.375 115.44C253.441 115.44 253.508 115.437 253.577 115.431H254.643V114.758H256.122V114.771L265.01 114.599L302.184 114.739H302.87V115.412H304.348V115.772L304.618 115.818C305.503 115.967 305.93 115.83 306.161 115.755C306.327 115.702 306.393 115.681 306.456 115.818C306.515 115.954 306.585 116.084 306.665 116.21C306.724 116.277 306.767 116.355 306.794 116.439C306.82 116.523 306.828 116.611 306.818 116.698C306.788 116.907 306.827 117.026 307.35 117.374C307.703 117.628 308.132 117.768 308.576 117.773C308.747 117.77 308.919 117.756 309.089 117.731C309.225 117.711 309.363 117.699 309.501 117.695C309.783 117.668 310.048 117.559 310.26 117.381C310.559 117.139 310.936 116.998 311.329 116.982C311.72 116.986 312.109 117.046 312.481 117.16C312.907 117.278 313.343 117.364 313.783 117.416C315.857 117.713 317.909 118.133 319.927 118.674C320.333 118.828 320.769 118.895 321.205 118.869C321.407 118.869 321.591 118.861 321.725 118.855C321.758 118.854 321.788 118.853 321.815 118.852C321.85 118.85 321.879 118.849 321.902 118.849C322.061 118.873 322.209 118.938 322.332 119.036C322.455 119.135 322.546 119.263 322.597 119.408C322.761 119.946 325.238 120.009 325.262 120.009C325.556 120 325.848 119.969 326.137 119.918C326.493 119.855 326.853 119.819 327.215 119.81C327.562 119.81 327.686 120.073 327.816 120.348L327.817 120.35C327.914 120.557 328.016 120.771 328.224 120.843C328.589 120.97 329.016 122.098 329.016 124.864V128.44C329.016 128.447 329.016 128.453 329.018 128.46C329.02 128.468 329.022 128.476 329.026 128.483L329.028 128.487L329.03 128.49H334.328V128.912H335.809V129.332H336.869V130.158C336.904 130.158 336.939 130.16 336.973 130.161L337.008 130.163C337.03 130.164 337.051 130.164 337.072 130.164H337.316C337.358 130.164 337.396 130.163 337.433 130.162C337.453 130.161 337.472 130.16 337.491 130.16C337.507 130.159 337.522 130.159 337.537 130.159H337.863C337.929 130.159 337.996 130.16 338.064 130.162C338.105 130.162 338.147 130.163 338.189 130.164C338.216 130.164 338.244 130.164 338.271 130.164C338.826 130.164 339.081 130.121 339.149 130.013C339.212 129.391 339.215 128.765 339.157 128.143C339.156 128.134 339.153 128.126 339.148 128.119C339.146 128.116 339.144 128.113 339.141 128.11C339.137 128.107 339.134 128.104 339.13 128.102C339.097 128.082 339.068 128.058 339.042 128.031H340.395C340.477 128.031 340.578 128.031 340.699 128.023C340.843 128.016 341.008 128.011 341.164 128.011C341.344 127.992 341.525 128.014 341.696 128.075C342.109 128.224 342.55 128.278 342.987 128.233C343.141 128.233 343.333 128.218 343.54 128.201L343.59 128.197C343.827 128.178 344.087 128.157 344.329 128.157C344.533 128.151 344.737 128.174 344.934 128.227C345.043 128.261 345.156 128.277 345.27 128.276C345.48 128.267 345.688 128.234 345.891 128.177C346.308 128.069 346.738 128.015 347.169 128.014C347.658 128.014 348.049 128.038 348.332 128.055L348.412 128.059C348.551 128.067 348.664 128.073 348.757 128.073C348.839 128.073 349.04 128.073 349.102 127.974C349.216 127.872 349.35 127.796 349.496 127.75C349.642 127.703 349.796 127.689 349.948 127.707C350.041 127.707 350.133 127.713 350.225 127.723C350.582 127.764 350.64 127.892 350.698 128.028C350.721 128.102 350.767 128.168 350.828 128.215C350.89 128.263 350.965 128.29 351.043 128.293C351.091 128.299 351.138 128.302 351.186 128.302C351.333 128.297 351.479 128.281 351.623 128.254C351.861 128.212 352.103 128.19 352.345 128.187C352.513 128.187 352.681 128.198 352.848 128.22C353.169 128.263 353.429 128.277 353.642 128.287C354.097 128.312 354.171 128.325 354.171 128.46C354.176 128.569 354.207 128.675 354.262 128.77C354.328 128.899 354.319 128.908 354.231 128.933C353.913 129.02 353.973 129.963 354.037 130.519C354.037 130.551 354.085 130.576 354.138 130.576H361.041C364.429 130.576 366.221 130.927 366.221 131.591C366.221 132.009 366.828 132.008 367.118 132.008C367.228 132.008 367.345 132.008 367.468 132.002C367.591 131.995 367.725 131.995 367.856 131.995H367.859C368.104 131.96 368.354 131.978 368.591 132.049C368.829 132.119 369.048 132.24 369.235 132.403C369.485 132.714 369.371 133.277 369.248 133.871C369.111 134.537 369.619 134.499 370.445 134.437C371.015 134.395 371.736 134.342 372.5 134.5C372.875 134.586 374.211 133.985 375.623 133.35C377.322 132.585 379.129 131.772 379.5 132.049C380.111 133.161 383.734 131.69 386.559 130.544C388.361 129.812 389.838 129.213 390 129.5V151H0V144H0.00391911L0 129.271L4.28866 129.779L5.76102 129.213L9.93285 131.845H24.3353L30.5667 128.266C30.5667 128.266 44.8397 129.115 51.8301 128.266C56.5824 127.689 59.5734 126.387 61.0015 125.612V124.963C61.0015 122.407 61.4294 121.364 61.7952 121.246C62.0034 121.18 62.1063 120.982 62.2034 120.79C62.3341 120.535 62.4592 120.292 62.8079 120.292C63.1704 120.3 63.5317 120.333 63.8882 120.391C64.1778 120.439 64.4713 120.467 64.7659 120.476C64.7904 120.476 67.2743 120.417 67.4385 119.919C67.4894 119.786 67.5812 119.667 67.7042 119.576C67.8272 119.485 67.9765 119.425 68.1358 119.403C68.1586 119.403 68.188 119.404 68.2232 119.406L68.2623 119.407L68.313 119.409C68.4478 119.415 68.6322 119.422 68.8347 119.422C69.2719 119.446 69.7097 119.384 70.116 119.242C72.14 118.742 74.1978 118.353 76.2776 118.079C76.7197 118.03 77.1567 117.951 77.5842 117.841C77.9573 117.736 78.3465 117.681 78.7386 117.678C79.1334 117.692 79.5112 117.822 79.811 118.046C80.0235 118.21 80.2897 118.312 80.5719 118.336C80.7106 118.34 80.8489 118.351 80.986 118.37C81.1563 118.393 81.328 118.405 81.5003 118.408C81.9448 118.404 82.3759 118.275 82.7293 118.039C83.2535 117.718 83.2934 117.608 83.2632 117.415C83.2529 117.335 83.2611 117.253 83.2873 117.176C83.3135 117.098 83.3572 117.026 83.4159 116.963C83.4962 116.847 83.5666 116.727 83.6266 116.602C83.7777 116.297 83.8096 116.233 85.3317 115.998L85.6018 115.955V115.622H87.0848V115H87.7724L108.797 115.135H109.484V115.758H110.968V116.379H112.03V117.599C112.099 117.605 112.166 117.608 112.232 117.608C112.291 117.608 112.349 117.606 112.408 117.604L112.477 117.602C112.51 117.601 112.54 117.6 112.569 117.599C112.593 117.598 112.615 117.597 112.638 117.596L112.672 117.595L112.698 117.595C112.765 117.595 112.838 117.597 112.914 117.598C112.95 117.599 112.987 117.6 113.025 117.601C113.157 117.604 113.296 117.608 113.433 117.608C113.989 117.608 114.245 117.544 114.313 117.386V116.958L114.304 116.708L114.296 116.464C114.295 116.442 114.285 116.42 114.268 116.404C114.234 116.372 114.204 116.337 114.18 116.299C124.539 116.263 131.784 116.119 137.239 115.968L137.483 113.9L151.915 113.003L179.924 110.358L139.041 112.901L139.127 112.112L183.046 108.83L204.939 105.904L205.033 113.173L206.913 113.321L206.877 112.23L207 112.242V111.195L206.734 111.169L206.534 107.046Z" fill="#1B023F"/> -<path d="M155.919 84.5898L153.284 83.1775L148.716 84.0842L148.763 83.4605L153.352 82.6043L155.919 83.9774V84.5898Z" fill="#1B023F"/> -<path d="M156.812 108.605L158.273 84.6599L158.256 84.6607C158.262 84.646 158.262 84.6313 158.262 84.6167C158.264 84.5817 158.262 84.5466 158.255 84.5123C158.247 84.4702 158.228 84.4308 158.2 84.3981C158.164 84.3588 158.116 84.3325 158.063 84.3231C158.038 84.317 158.012 84.3159 157.986 84.32C157.961 84.3241 157.936 84.3331 157.914 84.3468C157.877 84.3727 157.847 84.4078 157.827 84.4487C157.81 84.4844 157.797 84.5219 157.788 84.5604C157.784 84.5776 157.781 84.595 157.779 84.6126L156.175 108.655L155.826 108.68C155.889 107.773 156.012 106.007 156.166 103.809C156.32 101.612 156.504 98.9886 156.691 96.359C156.878 93.7294 157.066 91.1087 157.227 88.9186C157.389 86.7285 157.519 84.973 157.601 84.0858C157.986 83.7847 158.438 83.5811 158.918 83.4923C159.34 83.4155 159.772 83.4051 160.197 83.4613C160.526 83.5029 160.85 83.5746 161.165 83.6757C161.295 83.7163 161.423 83.7636 161.548 83.8176L161.027 108.304L160.73 108.326L161.316 84.3182C161.319 84.3032 161.321 84.2879 161.321 84.2726C161.324 84.2376 161.322 84.2026 161.315 84.1682C161.307 84.1261 161.289 84.0867 161.261 84.054C161.225 84.0146 161.177 83.988 161.125 83.9782C161.099 83.9719 161.073 83.9706 161.047 83.9747C161.021 83.9788 160.996 83.988 160.974 84.0019C160.938 84.0278 160.91 84.0626 160.893 84.103C160.875 84.1382 160.862 84.1755 160.854 84.2139C160.85 84.231 160.847 84.2485 160.845 84.266L160.111 108.37L159.797 108.391L160.547 84.0924C160.55 84.0773 160.552 84.0621 160.553 84.0467C160.555 84.0121 160.553 83.9772 160.546 83.9432C160.538 83.9013 160.52 83.8623 160.492 83.8298C160.457 83.7908 160.409 83.7646 160.357 83.7556C160.332 83.7489 160.305 83.7473 160.279 83.7511C160.254 83.7549 160.229 83.7639 160.207 83.7776C160.171 83.8037 160.143 83.8386 160.125 83.8788C160.109 83.9139 160.097 83.9508 160.09 83.9888C160.086 84.0063 160.083 84.024 160.081 84.0418L159.177 108.434L158.788 108.461L159.808 84.0964C159.811 84.0814 159.813 84.0661 159.814 84.0508C159.816 84.0159 159.814 83.9808 159.807 83.9464C159.799 83.9046 159.781 83.8655 159.753 83.8331C159.718 83.794 159.67 83.7684 159.618 83.7605C159.593 83.7539 159.567 83.7525 159.541 83.7563C159.516 83.7601 159.491 83.769 159.469 83.7825C159.433 83.8085 159.405 83.8434 159.387 83.8836C159.37 83.9189 159.357 83.9561 159.348 83.9945C159.344 84.0117 159.341 84.0291 159.339 84.0467L158.163 108.508L157.765 108.537L159.03 84.3321C159.035 84.3166 159.035 84.3019 159.035 84.2864C159.037 84.2512 159.035 84.2158 159.028 84.1812C159.02 84.1389 159.001 84.0993 158.973 84.0663C158.937 84.0274 158.889 84.0014 158.837 83.9921C158.812 83.9857 158.786 83.9845 158.76 83.9886C158.735 83.9927 158.71 84.0019 158.688 84.0157C158.653 84.0424 158.625 84.0778 158.607 84.1185C158.589 84.154 158.576 84.1915 158.567 84.2302C158.566 84.2335 158.565 84.2369 158.564 84.2404C158.561 84.2544 158.557 84.2688 158.557 84.2832L157.156 108.582L156.812 108.605Z" fill="#1B023F"/> -<path d="M160.745 81.8109L156.034 82.7486L156.067 82.1045L160.796 81.2182L163.462 82.6369L163.476 83.2705L160.745 81.8109Z" fill="#1B023F"/> -<path d="M165.261 107.993L166.508 83.1922L166.507 83.1962C166.51 83.1825 166.511 83.1686 166.512 83.1547C166.514 83.1187 166.512 83.0824 166.505 83.047C166.496 83.0035 166.477 82.9628 166.449 82.9288C166.413 82.8866 166.364 82.8579 166.309 82.8473C166.283 82.8408 166.255 82.8397 166.229 82.844C166.202 82.8484 166.176 82.8581 166.153 82.8726C166.115 82.8995 166.084 82.9361 166.065 82.9786C166.047 83.0155 166.033 83.0543 166.025 83.0943C166.02 83.1123 166.017 83.1306 166.016 83.149L164.629 108.043L164.272 108.068L164.312 107.393C164.37 106.394 164.458 104.884 164.565 103.086C164.681 101.132 164.818 98.8398 164.958 96.4981L165.026 95.3675C165.189 92.64 165.353 89.9167 165.497 87.6336C165.641 85.3505 165.76 83.5224 165.83 82.6018C166.224 82.2902 166.688 82.0795 167.182 81.9879C167.618 81.9082 168.063 81.8972 168.502 81.9553C168.841 81.9978 169.176 82.0718 169.502 82.1762C169.637 82.2182 169.769 82.2672 169.899 82.323L169.627 107.681L169.322 107.704L169.663 82.8416C169.666 82.8259 169.668 82.8101 169.668 82.7943C169.67 82.7579 169.667 82.7215 169.66 82.6858C169.651 82.6423 169.632 82.6017 169.603 82.5676C169.566 82.5268 169.517 82.4995 169.463 82.4902C169.437 82.4837 169.41 82.4826 169.383 82.4868C169.357 82.491 169.332 82.5004 169.309 82.5146C169.271 82.5413 169.241 82.5776 169.222 82.6198C169.204 82.6563 169.191 82.6949 169.183 82.7348C169.178 82.7525 169.175 82.7704 169.174 82.7886L168.679 107.75L168.353 107.774L168.869 82.6141C168.871 82.6048 168.873 82.5955 168.874 82.5861C168.874 82.5797 168.875 82.5732 168.875 82.5668C168.878 82.5308 168.875 82.4945 168.868 82.4591C168.859 82.4154 168.84 82.3747 168.811 82.341C168.774 82.2984 168.723 82.2697 168.668 82.2594C168.642 82.2527 168.615 82.2513 168.589 82.2554C168.562 82.2594 168.537 82.2688 168.514 82.283C168.476 82.3098 168.446 82.3461 168.427 82.3882C168.41 82.4252 168.397 82.464 168.389 82.504C168.385 82.522 168.382 82.5403 168.381 82.5586L167.716 107.813L167.309 107.845L168.103 82.6198C168.108 82.6046 168.108 82.5887 168.108 82.5735C168.109 82.5374 168.106 82.5002 168.099 82.4649C168.09 82.4214 168.07 82.3808 168.042 82.3466C168.005 82.3045 167.956 82.2758 167.901 82.2651C167.847 82.2522 167.791 82.261 167.744 82.2895C167.706 82.316 167.675 82.3523 167.655 82.3948C167.638 82.4314 167.624 82.47 167.615 82.5097C167.611 82.5274 167.608 82.5454 167.606 82.5635L166.661 107.893L166.254 107.92L167.295 82.8522C167.3 82.8367 167.3 82.8204 167.3 82.8049C167.302 82.7688 167.299 82.7326 167.292 82.6972C167.283 82.6539 167.263 82.6135 167.234 82.5798C167.198 82.5393 167.148 82.5123 167.094 82.5032C167.068 82.4965 167.041 82.4953 167.014 82.4995C166.987 82.5037 166.962 82.5133 166.939 82.5277C166.9 82.5543 166.87 82.5906 166.85 82.6328C166.833 82.6696 166.82 82.7086 166.811 82.7486C166.807 82.7666 166.804 82.7848 166.802 82.8032L165.617 107.968L165.261 107.993Z" fill="#1B023F"/> -<path d="M190.488 78.4279L187.442 76.8257L182.32 77.8555L182.34 77.1461L187.486 76.1726L190.448 77.7291L190.488 78.4279Z" fill="#1B023F"/> -<path d="M169.023 80.2478L164.177 81.2182L164.21 80.5487L169.078 79.6387L171.842 81.1064L171.865 81.7587L169.023 80.2478Z" fill="#1B023F"/> -<path d="M174.158 107.346L175.199 81.4432L175.204 81.444C175.209 81.4293 175.214 81.4143 175.217 81.3992C175.219 81.3617 175.215 81.3241 175.207 81.2874C175.198 81.2426 175.177 81.2009 175.148 81.1659C175.11 81.1233 175.058 81.0946 175.002 81.0844C174.975 81.0776 174.947 81.0762 174.92 81.0805C174.893 81.0847 174.866 81.0943 174.843 81.1089C174.804 81.1365 174.774 81.1739 174.754 81.2173C174.736 81.2553 174.723 81.2952 174.715 81.3364C174.711 81.3549 174.708 81.3737 174.706 81.3926L173.517 107.397L173.147 107.424C173.166 107.033 173.201 106.32 173.247 105.369C173.285 104.597 173.331 103.668 173.382 102.629C173.495 100.31 173.638 97.4451 173.783 94.5424C173.928 91.6396 174.077 88.7026 174.208 86.245C174.338 83.7874 174.447 81.806 174.513 80.8276C174.917 80.5064 175.393 80.2893 175.9 80.1956C176.348 80.1142 176.807 80.1035 177.259 80.1638C177.61 80.2086 177.955 80.2856 178.292 80.3938C178.43 80.437 178.567 80.4876 178.7 80.5455L178.679 107.023L178.359 107.043L178.461 81.0779C178.464 81.0616 178.466 81.0453 178.466 81.029C178.467 80.9918 178.464 80.9544 178.456 80.9181C178.446 80.8734 178.426 80.8317 178.396 80.7966C178.358 80.7542 178.307 80.7255 178.251 80.7151C178.224 80.7078 178.195 80.7063 178.167 80.7105C178.139 80.7147 178.112 80.7246 178.088 80.7395C178.049 80.7671 178.019 80.8045 177.999 80.8479C177.982 80.8859 177.969 80.926 177.961 80.967C177.957 80.9856 177.954 81.0044 177.953 81.0233L177.697 107.091L177.357 107.117L177.638 80.8439C177.641 80.8276 177.643 80.8113 177.643 80.795C177.645 80.7575 177.641 80.7199 177.633 80.6833C177.624 80.6381 177.603 80.596 177.573 80.5609C177.535 80.5178 177.483 80.489 177.426 80.4794C177.399 80.472 177.37 80.4703 177.342 80.4745C177.314 80.4787 177.287 80.4887 177.263 80.5038C177.224 80.531 177.193 80.5685 177.173 80.6123C177.156 80.6503 177.142 80.6903 177.134 80.7314C177.13 80.7497 177.127 80.7682 177.125 80.7868L176.692 107.164L176.275 107.195L176.845 80.8431C176.848 80.8271 176.85 80.8111 176.85 80.795C176.852 80.758 176.849 80.721 176.841 80.6849C176.831 80.6401 176.81 80.5986 176.779 80.5642C176.74 80.5218 176.688 80.4931 176.631 80.4826C176.604 80.4762 176.577 80.4753 176.55 80.4799C176.523 80.4845 176.497 80.4946 176.474 80.5096C176.435 80.5373 176.404 80.5751 176.385 80.6189C176.367 80.6568 176.354 80.6968 176.346 80.7379C176.341 80.7561 176.338 80.7747 176.337 80.7933L175.613 107.241L175.19 107.272L176.006 81.0885C176.011 81.0722 176.011 81.0567 176.011 81.0404C176.012 81.0032 176.009 80.9659 176.001 80.9295C175.991 80.8848 175.971 80.8431 175.941 80.808C175.903 80.7656 175.852 80.7369 175.796 80.7265C175.768 80.7195 175.74 80.7182 175.712 80.7229C175.684 80.7275 175.657 80.7379 175.633 80.7534C175.594 80.781 175.564 80.8184 175.544 80.8618C175.527 80.9007 175.515 80.9415 175.507 80.9833C175.503 81.0016 175.5 81.0201 175.498 81.0387L174.526 107.323L174.158 107.346Z" fill="#1B023F"/> -<path d="M177.764 78.4034L172.781 79.4047L172.809 78.7166L177.812 77.7715L180.676 79.2841L180.708 79.9608L177.764 78.4034Z" fill="#1B023F"/> -<path d="M196.879 75.0652L191.616 76.1252L191.634 75.3939L196.918 74.3942L199.98 75.9989L200.024 76.7164L196.879 75.0652Z" fill="#1B023F"/> -<path d="M149.75 109.12L151.299 85.9262C151.305 85.9124 151.311 85.8982 151.315 85.8838C151.317 85.8503 151.316 85.8166 151.31 85.7835C151.304 85.7435 151.287 85.7057 151.263 85.6734C151.231 85.6356 151.188 85.61 151.14 85.6008C151.117 85.5947 151.093 85.5934 151.069 85.5972C151.046 85.601 151.023 85.6097 151.003 85.6228C150.968 85.6477 150.94 85.6814 150.922 85.7207C150.906 85.7551 150.894 85.7912 150.886 85.8283C150.882 85.845 150.879 85.8619 150.877 85.8789L149.202 109.158L148.882 109.183C148.902 108.913 148.929 108.559 148.961 108.133C149.03 107.211 149.123 105.957 149.233 104.504L149.247 104.325C149.405 102.238 149.592 99.7637 149.781 97.2869C149.976 94.7388 150.173 92.19 150.341 90.0618C150.508 87.9337 150.645 86.227 150.726 85.366C151.073 85.0784 151.486 84.8822 151.928 84.7952C152.311 84.7214 152.704 84.7117 153.09 84.7667C153.388 84.8073 153.682 84.8769 153.967 84.9746C154.085 85.0139 154.2 85.0599 154.313 85.1124L153.609 108.84L153.337 108.861L154.096 85.5943C154.099 85.5797 154.1 85.565 154.101 85.5503C154.103 85.5167 154.101 85.4831 154.096 85.45C154.089 85.4101 154.072 85.3725 154.047 85.3407C154.015 85.3036 153.971 85.2785 153.923 85.2698C153.9 85.2632 153.876 85.2617 153.853 85.2653C153.829 85.269 153.807 85.2777 153.787 85.291C153.752 85.3163 153.724 85.3503 153.706 85.3896C153.69 85.4243 153.678 85.4607 153.671 85.4981C153.667 85.5151 153.664 85.5322 153.663 85.5495L152.766 108.899L152.476 108.921L153.393 85.384C153.396 85.3691 153.397 85.3541 153.398 85.3391C153.4 85.3053 153.399 85.2713 153.393 85.238C153.386 85.1975 153.369 85.1594 153.344 85.1271C153.312 85.089 153.268 85.0633 153.219 85.0546C153.196 85.0484 153.172 85.0473 153.149 85.0512C153.126 85.0552 153.104 85.0641 153.084 85.0773C153.049 85.1027 153.021 85.1367 153.003 85.176C152.987 85.2104 152.975 85.2465 152.967 85.2836C152.965 85.292 152.963 85.3003 152.962 85.3088C152.96 85.3172 152.959 85.3257 152.958 85.3342L151.91 108.962L151.555 108.989L152.722 85.3856C152.723 85.3754 152.725 85.3651 152.725 85.3548C152.726 85.3504 152.726 85.346 152.726 85.3416C152.728 85.308 152.726 85.2743 152.72 85.2412C152.713 85.2013 152.696 85.1638 152.671 85.132C152.64 85.0944 152.596 85.0688 152.548 85.0594C152.525 85.0532 152.501 85.052 152.477 85.0557C152.454 85.0595 152.431 85.0683 152.412 85.0814C152.376 85.1063 152.348 85.14 152.33 85.1793C152.314 85.2134 152.302 85.2492 152.293 85.2861C152.291 85.2937 152.289 85.3014 152.288 85.3092C152.286 85.3182 152.284 85.3274 152.284 85.3366L150.987 109.03L150.626 109.057L152.006 85.6098C152.007 85.6034 152.008 85.597 152.009 85.5905C152.01 85.5823 152.011 85.574 152.011 85.5658C152.014 85.532 152.012 85.4981 152.007 85.4647C152 85.4245 151.983 85.3866 151.958 85.3546C151.927 85.3168 151.883 85.2912 151.835 85.282C151.812 85.2754 151.788 85.274 151.764 85.2778C151.741 85.2816 151.718 85.2905 151.698 85.304C151.663 85.3289 151.635 85.3626 151.617 85.4019C151.601 85.4362 151.588 85.4724 151.581 85.5095C151.577 85.5258 151.572 85.543 151.572 85.5601L150.061 109.094L149.75 109.12Z" fill="#1B023F"/> -<path d="M186.176 106.474L186.512 79.3379C186.512 79.321 186.512 79.3039 186.512 79.2865C186.513 79.2484 186.509 79.2103 186.501 79.1732C186.49 79.127 186.469 79.0842 186.438 79.0484C186.398 79.0056 186.345 78.9769 186.287 78.9669C186.259 78.96 186.231 78.9587 186.203 78.9631C186.175 78.9674 186.148 78.9773 186.124 78.9921C186.084 79.0204 186.052 79.0591 186.033 79.1038C186.014 79.1429 186.001 79.184 185.992 79.2262C185.99 79.2358 185.988 79.2455 185.987 79.2552C185.985 79.2648 185.984 79.2744 185.984 79.2841L185.494 106.524L185.06 106.557L185.656 79.5931C185.659 79.5766 185.661 79.56 185.661 79.5433C185.662 79.505 185.659 79.4666 185.65 79.4292C185.64 79.3833 185.618 79.3408 185.587 79.3053C185.547 79.2621 185.494 79.2334 185.435 79.2237C185.408 79.2164 185.379 79.2149 185.351 79.2192C185.323 79.2236 185.296 79.2337 185.272 79.249C185.233 79.2771 185.202 79.3158 185.183 79.3607C185.165 79.3998 185.152 79.4409 185.144 79.483C185.142 79.4936 185.14 79.5042 185.139 79.5149C185.138 79.5235 185.137 79.5322 185.136 79.5409L184.385 106.607L184.007 106.634L184.827 79.9559C184.832 79.94 184.832 79.9233 184.832 79.9074V79.9062C184.834 79.8679 184.831 79.8295 184.822 79.792C184.813 79.7458 184.791 79.7029 184.76 79.6673C184.72 79.6242 184.667 79.5955 184.609 79.5857C184.581 79.5789 184.553 79.5776 184.525 79.5819C184.497 79.5863 184.47 79.5962 184.446 79.611C184.406 79.6388 184.374 79.6772 184.354 79.7219C184.336 79.761 184.323 79.802 184.315 79.8442C184.311 79.8631 184.309 79.8821 184.307 79.9013L183.334 106.68L182.953 106.711C182.986 105.953 183.057 104.116 183.149 101.722C183.226 99.7253 183.324 97.3432 183.425 94.8772C183.445 94.3862 183.466 93.892 183.486 93.3967C183.608 90.414 183.735 87.4004 183.845 84.8784C183.955 82.3564 184.049 80.3285 184.107 79.3207C184.52 78.9888 185.008 78.7647 185.529 78.6684C185.99 78.5836 186.462 78.5723 186.926 78.635C187.286 78.6815 187.641 78.7607 187.986 78.8715C188.13 78.9164 188.271 78.9686 188.409 79.028L188.642 106.295L188.316 106.319L188.169 79.5743C188.172 79.5576 188.174 79.5407 188.174 79.5238C188.176 79.4852 188.173 79.4466 188.165 79.4088C188.155 79.3621 188.134 79.3186 188.103 79.2824C188.063 79.2393 188.01 79.2106 187.952 79.2009C187.924 79.1943 187.895 79.1935 187.867 79.1984C187.839 79.2033 187.812 79.2138 187.789 79.2294C187.749 79.2585 187.718 79.2977 187.698 79.3428C187.68 79.3821 187.667 79.4235 187.659 79.4659C187.655 79.485 187.652 79.5043 187.651 79.5238L187.638 106.367L187.286 106.392L187.33 79.3338C187.331 79.3172 187.331 79.3006 187.33 79.2841C187.331 79.2456 187.327 79.2072 187.318 79.1699C187.308 79.1235 187.286 79.0804 187.255 79.0443C187.214 79.0013 187.161 78.9727 187.103 78.9628C187.076 78.9558 187.047 78.9545 187.019 78.959C186.991 78.9635 186.964 78.9737 186.94 78.9889C186.9 79.0172 186.869 79.0559 186.849 79.1006C186.832 79.1397 186.819 79.1807 186.811 79.2229C186.807 79.242 186.804 79.2613 186.803 79.2808L186.609 106.444L186.176 106.474Z" fill="#1B023F"/> -<path d="M204.964 105.111L204.834 76.0666L204.834 76.0706C204.838 76.0551 204.841 76.0392 204.843 76.0233C204.844 75.9824 204.839 75.9416 204.83 75.9018C204.818 75.8526 204.794 75.807 204.761 75.769C204.718 75.7224 204.66 75.6914 204.598 75.6809C204.569 75.6735 204.539 75.6722 204.509 75.6769C204.48 75.6817 204.452 75.6925 204.427 75.7086C204.385 75.7389 204.353 75.7801 204.333 75.8276C204.314 75.8693 204.301 75.9132 204.293 75.9581C204.289 75.9783 204.286 75.9987 204.285 76.0192L204.251 105.174L203.791 105.207L203.937 76.3421C203.942 76.3242 203.941 76.3071 203.941 76.2892C203.943 76.2486 203.939 76.208 203.93 76.1685C203.919 76.1193 203.896 76.0736 203.862 76.0356C203.819 75.9891 203.762 75.9579 203.699 75.9467C203.67 75.9394 203.64 75.9383 203.61 75.9433C203.58 75.9484 203.552 75.9595 203.526 75.976C203.485 76.0067 203.453 76.0482 203.433 76.0959C203.415 76.1377 203.403 76.1815 203.395 76.2264C203.388 76.2467 203.388 76.2671 203.388 76.2875L203.076 105.254L202.674 105.285L203.071 76.7287V76.6757C203.071 76.6347 203.067 76.5939 203.057 76.5541C203.045 76.5049 203.021 76.4594 202.988 76.4213C202.944 76.3754 202.887 76.3448 202.825 76.334C202.796 76.3268 202.765 76.3256 202.736 76.3305C202.706 76.3354 202.678 76.3463 202.653 76.3625C202.612 76.3929 202.579 76.4341 202.559 76.4816C202.541 76.523 202.528 76.5665 202.52 76.6112C202.516 76.6314 202.513 76.6518 202.511 76.6724L201.956 105.34L201.556 105.366C201.565 104.881 201.605 103.087 201.662 100.596C201.718 98.1048 201.791 94.9199 201.87 91.6534C201.948 88.387 202.03 85.0423 202.104 82.2365C202.179 79.4308 202.245 77.164 202.29 76.0568C202.722 75.7043 203.236 75.466 203.784 75.3637C204.272 75.2739 204.771 75.2618 205.263 75.3278C205.646 75.3769 206.024 75.4607 206.393 75.5781C206.546 75.6247 206.696 75.6791 206.844 75.7412L207.522 102.425C207.562 100.686 207.612 98.5247 207.667 96.196C207.722 93.8672 207.781 91.3868 207.84 89.0205C207.894 86.8455 207.949 84.7697 207.996 82.9989L208.009 82.5391C208.058 80.6727 208.106 79.196 208.14 78.3806C208.552 78.0448 209.041 77.818 209.564 77.721C210.029 77.6354 210.505 77.6239 210.973 77.6867C211.339 77.7333 211.7 77.813 212.051 77.9248C212.197 77.9699 212.341 78.0224 212.481 78.0822L213.195 106.441H212.861L212.254 78.6366V78.5861C212.254 78.547 212.249 78.5082 212.24 78.4703C212.228 78.4234 212.206 78.38 212.174 78.3439C212.132 78.3008 212.078 78.2722 212.02 78.2624C211.992 78.2548 211.963 78.2532 211.935 78.2576C211.907 78.2619 211.88 78.2722 211.856 78.2877C211.817 78.3163 211.786 78.3553 211.768 78.4002C211.75 78.4399 211.738 78.4815 211.73 78.5241C211.728 78.5332 211.727 78.5423 211.725 78.5515C211.724 78.5616 211.723 78.5718 211.722 78.582L212.169 106.399L211.816 106.334L211.387 78.392V78.3415C211.387 78.3025 211.383 78.2636 211.374 78.2257C211.362 78.1789 211.34 78.1355 211.308 78.0993C211.266 78.0562 211.212 78.0276 211.154 78.0178C211.126 78.0108 211.097 78.0095 211.069 78.014C211.041 78.0185 211.014 78.0286 210.991 78.0439C210.95 78.0724 210.919 78.1117 210.901 78.1572C210.884 78.1969 210.871 78.2386 210.864 78.2811C210.861 78.2999 210.857 78.3195 210.857 78.339L211.119 106.206L210.682 106.125L210.566 78.3969V78.3463C210.566 78.3076 210.562 78.269 210.553 78.2314C210.541 78.1845 210.519 78.1411 210.487 78.105C210.445 78.0619 210.391 78.0333 210.333 78.0235C210.305 78.0166 210.276 78.0155 210.248 78.0202C210.22 78.0248 210.193 78.0351 210.169 78.0504C210.129 78.079 210.098 78.1182 210.08 78.1637C210.063 78.2034 210.05 78.245 210.042 78.2877C210.037 78.3072 210.035 78.3268 210.035 78.3463L210.006 105.997L209.569 105.915L209.716 78.6595C209.719 78.6425 209.72 78.6253 209.72 78.6081C209.722 78.5686 209.718 78.5291 209.709 78.4907C209.698 78.4436 209.676 78.3999 209.644 78.3635C209.604 78.3197 209.549 78.291 209.49 78.2819C209.463 78.275 209.434 78.2737 209.406 78.2781C209.378 78.2824 209.351 78.2923 209.327 78.3072C209.287 78.3356 209.256 78.375 209.238 78.4205C209.221 78.4604 209.209 78.5024 209.202 78.5453C209.199 78.5647 209.197 78.5843 209.196 78.604L208.892 105.789L208.517 105.719L208.895 79.0239V78.9726C208.896 78.9333 208.891 78.894 208.881 78.856C208.87 78.8086 208.847 78.7649 208.814 78.7288C208.772 78.6856 208.717 78.6571 208.658 78.6472C208.63 78.6404 208.601 78.6392 208.573 78.6439C208.545 78.6485 208.519 78.6588 208.495 78.6742C208.455 78.7029 208.424 78.7421 208.405 78.7875C208.387 78.827 208.374 78.8687 208.367 78.9114C208.364 78.923 208.362 78.9346 208.361 78.9464C208.36 78.954 208.359 78.9617 208.358 78.9693L207.837 105.593L207.461 105.525V105.486H207.26L206.608 76.316V76.263C206.609 76.2224 206.604 76.1818 206.594 76.1424C206.582 76.0934 206.558 76.048 206.525 76.0103C206.481 75.9647 206.424 75.9344 206.362 75.9238C206.333 75.9162 206.303 75.9146 206.273 75.9193C206.244 75.9239 206.215 75.9346 206.19 75.9508C206.149 75.981 206.116 76.0222 206.097 76.0698C206.078 76.1115 206.065 76.1554 206.057 76.2003C206.054 76.2205 206.051 76.2409 206.049 76.2614L206.522 105.349L206.154 105.28L205.699 76.06V76.007C205.699 75.9664 205.695 75.9258 205.685 75.8864C205.673 75.8372 205.649 75.7916 205.615 75.7534C205.572 75.707 205.515 75.6758 205.452 75.6645C205.423 75.6574 205.393 75.6562 205.363 75.6611C205.333 75.666 205.305 75.6769 205.28 75.6931C205.238 75.7234 205.206 75.7646 205.187 75.8122C205.169 75.8537 205.156 75.8972 205.149 75.9418C205.146 75.962 205.144 75.9825 205.143 76.003L205.421 105.146L205.159 105.097L204.964 105.111Z" fill="#1B023F"/> -<path d="M193.606 105.931L194.216 78.2893C194.221 78.2699 194.225 78.2504 194.228 78.2306C194.229 78.1908 194.225 78.1511 194.216 78.1123C194.205 78.0644 194.182 78.0199 194.15 77.9827C194.109 77.9394 194.054 77.9108 193.995 77.9012C193.966 77.8939 193.936 77.8926 193.907 77.8972C193.878 77.9018 193.851 77.9123 193.826 77.9281C193.785 77.9574 193.753 77.9975 193.733 78.0439C193.715 78.0844 193.702 78.1267 193.694 78.1702C193.69 78.1899 193.687 78.2097 193.686 78.2297L192.917 105.981L192.528 106.011C192.546 105.39 192.601 103.575 192.677 101.129C192.753 98.6829 192.85 95.6146 192.95 92.4859C193.05 89.3573 193.156 86.174 193.249 83.5061C193.341 80.8382 193.422 78.6888 193.474 77.6288C193.897 77.2869 194.398 77.0559 194.932 76.9569C195.407 76.8699 195.893 76.8581 196.372 76.9219C196.745 76.9698 197.112 77.0516 197.471 77.1665C197.619 77.2131 197.766 77.2675 197.909 77.3296L198.398 105.587L198.057 105.614L197.667 77.8955C197.668 77.8784 197.668 77.8612 197.667 77.8441C197.668 77.8046 197.664 77.7652 197.655 77.7267C197.644 77.6789 197.621 77.6346 197.588 77.5978C197.545 77.5545 197.49 77.5259 197.43 77.5163C197.402 77.5095 197.374 77.5084 197.346 77.513C197.318 77.5176 197.291 77.5279 197.267 77.5432C197.226 77.5726 197.194 77.6126 197.175 77.659C197.157 77.6995 197.144 77.7419 197.136 77.7854C197.132 77.805 197.129 77.8249 197.127 77.8449L197.358 105.659L197.003 105.689L196.792 77.6476V77.5954C196.793 77.5554 196.789 77.5154 196.78 77.4764C196.769 77.4285 196.747 77.384 196.715 77.3467C196.673 77.3035 196.619 77.2748 196.56 77.2652C196.531 77.2579 196.502 77.2566 196.473 77.2612C196.444 77.2658 196.416 77.2764 196.391 77.2921C196.35 77.3207 196.318 77.3603 196.298 77.4062C196.28 77.4461 196.267 77.488 196.259 77.531C196.255 77.5503 196.252 77.57 196.251 77.5897L196.285 105.733L195.839 105.764L195.944 77.646C195.946 77.6287 195.947 77.6112 195.948 77.5938C195.948 77.554 195.944 77.5143 195.935 77.4755C195.925 77.4274 195.902 77.3827 195.869 77.3459C195.827 77.3027 195.772 77.2741 195.713 77.2644C195.684 77.2571 195.655 77.2557 195.626 77.2604C195.597 77.265 195.569 77.2755 195.545 77.2912C195.504 77.3204 195.472 77.3606 195.453 77.407C195.436 77.4474 195.423 77.4899 195.415 77.5334C195.41 77.5459 195.409 77.5587 195.408 77.5714C195.408 77.5786 195.408 77.5859 195.408 77.593L195.139 105.819L194.693 105.848L195.066 77.9118C195.067 77.8944 195.067 77.8769 195.066 77.8596C195.067 77.8195 195.063 77.7796 195.054 77.7405C195.043 77.6926 195.021 77.6481 194.989 77.6109C194.947 77.567 194.892 77.5383 194.832 77.5294C194.805 77.5225 194.776 77.5212 194.748 77.5255C194.72 77.5299 194.693 77.5397 194.669 77.5546C194.628 77.5838 194.597 77.624 194.578 77.6704C194.56 77.7108 194.547 77.7533 194.539 77.7968C194.535 77.8165 194.533 77.8364 194.531 77.8563L193.998 105.906L193.606 105.931Z" fill="#1B023F"/> -<path d="M142.944 85.2144L142.998 84.6126L147.444 83.7866L149.913 85.1124V85.7028L147.381 84.3419L142.944 85.2144Z" fill="#1B023F"/> -<path d="M143.767 109.553L145.538 86.9919C145.539 86.977 145.54 86.962 145.54 86.947C145.542 86.9144 145.54 86.8815 145.535 86.8492C145.528 86.8105 145.512 86.7741 145.488 86.7432C145.458 86.7074 145.416 86.6835 145.37 86.6755C145.348 86.6698 145.325 86.6687 145.302 86.6725C145.279 86.6763 145.258 86.6848 145.239 86.6975C145.206 86.7221 145.179 86.7546 145.162 86.7921C145.147 86.8253 145.135 86.86 145.126 86.8957C145.122 86.9128 145.117 86.9299 145.117 86.947L143.224 109.598L142.913 109.618C142.976 108.896 143.115 107.301 143.293 105.259C143.472 103.217 143.689 100.732 143.91 98.2279C144.13 95.7238 144.354 93.2092 144.544 91.099C144.734 88.9888 144.891 87.2976 144.979 86.4513C145.316 86.1732 145.717 85.9833 146.146 85.8985C146.517 85.8276 146.896 85.8185 147.269 85.8715C147.557 85.9108 147.839 85.9782 148.114 86.0729C148.227 86.1111 148.339 86.1555 148.447 86.2059L147.5 109.281L147.237 109.302L148.24 86.6731C148.243 86.659 148.244 86.6449 148.245 86.6307C148.247 86.5983 148.246 86.5657 148.24 86.5336C148.234 86.4949 148.218 86.4583 148.195 86.4268C148.165 86.3903 148.123 86.3655 148.076 86.3567C148.054 86.3506 148.031 86.3493 148.008 86.3529C147.985 86.3566 147.963 86.3651 147.943 86.3779C147.908 86.4015 147.88 86.4342 147.862 86.4725C147.846 86.5059 147.834 86.5409 147.826 86.5768C147.822 86.593 147.819 86.6093 147.817 86.6258L146.681 109.337L146.404 109.359L147.554 86.4643C147.556 86.4503 147.558 86.4361 147.559 86.4219C147.564 86.3897 147.564 86.3571 147.559 86.3249C147.554 86.2863 147.538 86.2498 147.515 86.2189C147.485 86.1825 147.443 86.1579 147.397 86.1496C147.375 86.1437 147.351 86.1426 147.329 86.1464C147.306 86.1502 147.284 86.1588 147.265 86.1716C147.232 86.1959 147.205 86.2285 147.189 86.2662C147.174 86.2992 147.162 86.334 147.155 86.3697C147.151 86.3859 147.148 86.4022 147.147 86.4187L145.856 109.402L145.509 109.426L146.913 86.4709C146.916 86.4569 146.917 86.4427 146.919 86.4285C146.923 86.3963 146.923 86.3636 146.919 86.3314C146.912 86.293 146.896 86.2566 146.873 86.2254C146.843 86.189 146.801 86.1644 146.755 86.1561C146.733 86.1499 146.71 86.1485 146.687 86.152C146.664 86.1555 146.642 86.1639 146.623 86.1765C146.588 86.2004 146.559 86.233 146.541 86.2711C146.525 86.3043 146.512 86.3394 146.504 86.3755C146.502 86.384 146.5 86.3927 146.499 86.4013C146.497 86.409 146.496 86.4167 146.495 86.4244L144.966 109.467L144.617 109.491L146.218 86.6861C146.221 86.6721 146.223 86.6579 146.224 86.6437C146.227 86.6113 146.225 86.5787 146.22 86.5467C146.213 86.5082 146.197 86.4719 146.174 86.4407C146.144 86.4043 146.103 86.3797 146.057 86.3714C146.034 86.365 146.011 86.3635 145.988 86.3669C145.965 86.3702 145.943 86.3784 145.924 86.391C145.89 86.4148 145.863 86.4472 145.846 86.4847C145.831 86.5179 145.819 86.5526 145.81 86.5883C145.806 86.6046 145.801 86.6209 145.801 86.6372L144.072 109.532L143.767 109.553Z" fill="#1B023F"/> -<path d="M200.383 73.7394L205.809 72.708L208.968 74.3583L209.02 75.0995L205.772 73.3986L200.373 74.4937L200.383 73.7394Z" fill="#1B023F"/> -<path d="M225.935 82.8114L222.993 81.3625L220.961 81.7955L221.833 80.9996L223.016 80.764L225.87 82.1673L225.935 82.8114Z" fill="#1B023F"/> -<path d="M234.695 88.2892L235.434 87.5977L236.453 87.3955L238.963 88.6137L239.033 89.1706L236.453 87.9174L234.695 88.2892Z" fill="#1B023F"/> -<path d="M230.764 85.1997L227.933 83.8094L225.978 84.222L226.81 83.4556L227.951 83.2321L230.702 84.5808L230.764 85.1997Z" fill="#1B023F"/> -<path d="M230.482 86.3804L231.276 85.6465L232.354 85.4353L234.98 86.722L235.036 87.3115L232.345 85.9857L230.482 86.3804Z" fill="#1B023F"/> -<path d="M238.541 90.1311L239.242 89.4788L240.214 89.2848L242.595 90.4409L242.657 90.9726L240.211 89.7788L238.541 90.1311Z" fill="#1B023F"/> -<path d="M242.566 91.0859L243.475 90.9025L245.71 91.9878L245.776 92.4843L243.474 91.3681L241.914 91.6991L242.566 91.0859Z" fill="#1B023F"/> -<path d="M245.481 94.491L247.074 112.906L246.757 112.848L245.268 94.7079C245.269 94.6965 245.269 94.685 245.268 94.6736C245.266 94.6459 245.261 94.6184 245.252 94.5921C245.24 94.5551 245.218 94.5222 245.188 94.4973C245.158 94.4723 245.122 94.4563 245.083 94.451C245.064 94.4458 245.044 94.4447 245.025 94.4478C245.005 94.4509 244.987 94.4581 244.97 94.469C244.944 94.4898 244.924 94.5183 244.915 94.5505C244.905 94.5769 244.899 94.6042 244.897 94.632C244.896 94.6387 244.896 94.6454 244.896 94.6522C244.896 94.659 244.896 94.6659 244.897 94.6728L245.732 105.611L244.656 94.248C244.932 94.1281 245.227 94.058 245.528 94.0409C245.8 94.0244 246.073 94.037 246.343 94.0784C246.548 94.1092 246.75 94.1537 246.949 94.2113C247.098 94.2586 247.186 94.2928 247.186 94.2928L249.351 113.33L249.112 113.285L247.059 94.6736C247.06 94.662 247.06 94.6502 247.059 94.6386C247.057 94.6108 247.051 94.5834 247.042 94.557C247.031 94.5245 247.012 94.495 246.987 94.4706C246.956 94.4413 246.917 94.4221 246.875 94.4152C246.855 94.4104 246.835 94.4096 246.816 94.413C246.796 94.4163 246.777 94.4237 246.761 94.4347C246.734 94.4552 246.714 94.4837 246.704 94.5162C246.691 94.5566 246.684 94.5992 246.685 94.6418L248.62 113.192L248.368 113.145L246.435 94.5114C246.436 94.4997 246.436 94.488 246.435 94.4763C246.434 94.4486 246.43 94.421 246.421 94.3947C246.409 94.3576 246.387 94.3245 246.357 94.2993C246.327 94.2742 246.291 94.2581 246.253 94.2529C246.233 94.2481 246.213 94.2474 246.193 94.2508C246.173 94.2541 246.154 94.2615 246.138 94.2725C246.111 94.2932 246.091 94.3216 246.082 94.354C246.067 94.394 246.06 94.4363 246.061 94.4788L247.873 113.055L247.563 112.996L245.86 94.5228C245.861 94.5111 245.861 94.4994 245.86 94.4877C245.858 94.4599 245.853 94.4325 245.843 94.4062C245.833 94.3736 245.814 94.3439 245.789 94.3197C245.758 94.2902 245.719 94.2709 245.676 94.2643C245.657 94.2594 245.637 94.2585 245.617 94.2617C245.597 94.2649 245.579 94.2722 245.562 94.2831C245.535 94.3035 245.514 94.332 245.504 94.3646C245.489 94.4051 245.482 94.4479 245.481 94.491Z" fill="#1B023F"/> -<path d="M220.469 80.4411L217.487 78.8918L214.643 79.474L215.637 78.6244L217.507 78.2697L220.407 79.7692L220.469 80.4411Z" fill="#1B023F"/> -<path d="M245.384 93.0429L245.885 92.4721L246.327 92.3824L248.541 93.4367L248.623 93.9259L246.34 92.8382L245.384 93.0429Z" fill="#1B023F"/> -<path d="M234.039 90.3349L234.638 107.199C234.638 107.199 234.59 106.185 234.516 104.643C234.442 103.101 234.344 101.041 234.245 98.943C234.145 96.845 234.046 94.7128 233.971 93.0364C233.896 91.3599 233.842 90.1409 233.842 89.871C234.169 89.599 234.559 89.4141 234.977 89.3337C235.353 89.2619 235.738 89.2481 236.118 89.2929C236.418 89.3262 236.714 89.3859 237.004 89.4715C237.226 89.5367 237.359 89.5921 237.359 89.5921L238.952 111.391L238.677 111.34L237.19 90.0325C237.19 90.0233 237.19 90.0141 237.19 90.0049C237.19 90.0008 237.19 89.9966 237.19 89.9925C237.189 89.9616 237.184 89.9309 237.176 89.9012C237.164 89.8588 237.141 89.8208 237.108 89.7918C237.075 89.7628 237.034 89.7441 236.991 89.7381C236.968 89.732 236.945 89.7306 236.923 89.7342C236.9 89.7377 236.878 89.746 236.859 89.7585C236.828 89.7816 236.804 89.813 236.79 89.849C236.772 89.8954 236.762 89.9445 236.761 89.9941L238.111 111.237L237.826 111.181L236.48 89.8465C236.481 89.8332 236.481 89.8199 236.48 89.8066C236.479 89.7756 236.474 89.7449 236.465 89.7152C236.453 89.6779 236.433 89.6438 236.406 89.6158C236.37 89.5819 236.326 89.5594 236.277 89.5514C236.255 89.5461 236.231 89.5453 236.209 89.5493C236.186 89.5532 236.164 89.5617 236.144 89.5742C236.113 89.5974 236.089 89.6291 236.076 89.6655C236.058 89.7119 236.048 89.761 236.046 89.8106L237.26 111.075L236.906 111.008L235.815 89.8588C235.815 89.8541 235.815 89.8494 235.816 89.8447C235.816 89.8361 235.815 89.8274 235.815 89.8188C235.814 89.7878 235.809 89.7571 235.799 89.7275C235.787 89.6846 235.762 89.6464 235.728 89.6174C235.694 89.5884 235.653 89.57 235.609 89.5644C235.587 89.5589 235.564 89.558 235.541 89.5618C235.519 89.5656 235.498 89.574 235.479 89.5864C235.448 89.6095 235.425 89.6409 235.411 89.6769C235.398 89.7086 235.39 89.7417 235.385 89.7756C235.383 89.791 235.382 89.8065 235.381 89.8221L236.345 110.905L235.991 110.838L235.123 90.074C235.123 90.0607 235.123 90.0474 235.123 90.0341C235.122 90.0029 235.117 89.9719 235.108 89.9419C235.096 89.8997 235.071 89.8619 235.038 89.833C235.005 89.8041 234.964 89.7853 234.921 89.7788C234.898 89.7736 234.875 89.7729 234.852 89.7769C234.83 89.7808 234.808 89.7892 234.789 89.8017C234.758 89.8245 234.735 89.8556 234.721 89.8914C234.708 89.9225 234.699 89.9551 234.695 89.9884C234.694 90.0036 234.694 90.0189 234.695 90.0341L235.439 110.737L235.132 110.681L234.467 90.3733C234.468 90.36 234.468 90.3467 234.467 90.3334C234.466 90.3021 234.461 90.2711 234.452 90.2412C234.439 90.1986 234.414 90.1605 234.381 90.1315C234.347 90.1026 234.306 90.084 234.262 90.0781C234.24 90.0727 234.217 90.0719 234.194 90.0759C234.172 90.0798 234.151 90.0883 234.132 90.1009C234.101 90.124 234.078 90.1554 234.064 90.1915C234.052 90.2229 234.043 90.2558 234.039 90.2893C234.039 90.2977 234.038 90.3061 234.038 90.3145C234.039 90.3213 234.039 90.3281 234.039 90.3349Z" fill="#1B023F"/> -<path d="M214.554 77.4772L211.46 75.8578L209.138 76.3291L210.002 75.4819L211.49 75.2014L214.507 76.7727L214.554 77.4772Z" fill="#1B023F"/> -<path d="M241.935 93.2557L242.832 111.683L242.624 109.323L242.151 102.859L241.732 93.5549C241.733 93.5433 241.733 93.5315 241.732 93.5198C241.731 93.4921 241.726 93.4646 241.718 93.4383C241.706 93.4006 241.684 93.3668 241.654 93.3411C241.624 93.3154 241.588 93.2988 241.549 93.2932H241.497L241.477 93.2989L241.457 93.3062L241.43 92.9434C241.722 92.7681 242.049 92.657 242.388 92.6172C242.696 92.5798 243.007 92.582 243.315 92.6237C243.551 92.6547 243.785 92.7037 244.014 92.7705C244.188 92.8211 244.292 92.8627 244.292 92.8627L245.997 112.707L245.752 112.661L244.149 93.2548C244.15 93.2429 244.15 93.2309 244.149 93.219C244.147 93.1913 244.142 93.1639 244.134 93.1374C244.124 93.1041 244.106 93.0736 244.081 93.0485C244.05 93.0182 244.01 92.9983 243.966 92.9915C243.947 92.9865 243.926 92.9857 243.906 92.989C243.886 92.9924 243.867 92.9999 243.851 93.0111C243.824 93.0321 243.803 93.0604 243.792 93.0926C243.779 93.1327 243.773 93.1745 243.774 93.2165L245.253 112.559L244.996 112.513L243.522 93.0853C243.523 93.0733 243.523 93.0613 243.522 93.0494C243.52 93.0217 243.515 92.9943 243.507 92.9678C243.497 92.9345 243.479 92.904 243.454 92.8789C243.423 92.8482 243.382 92.828 243.339 92.8211C243.318 92.8162 243.298 92.8155 243.277 92.819C243.257 92.8225 243.238 92.8302 243.22 92.8415C243.193 92.8619 243.172 92.8904 243.161 92.923C243.145 92.9642 243.137 93.0078 243.137 93.0518L244.491 112.42L244.169 112.361L242.927 93.0983C242.927 93.0926 242.927 93.0868 242.927 93.0811C242.927 93.0749 242.927 93.0686 242.927 93.0624C242.925 93.0348 242.92 93.0073 242.912 92.9809C242.901 92.9475 242.883 92.9171 242.859 92.892C242.827 92.8617 242.787 92.8417 242.744 92.8349C242.724 92.83 242.704 92.8291 242.683 92.8325C242.663 92.8359 242.644 92.8434 242.627 92.8545C242.599 92.875 242.578 92.9034 242.566 92.936C242.555 92.964 242.548 92.9934 242.544 93.0233C242.543 93.0368 242.543 93.0505 242.544 93.0641L243.673 112.268L243.356 112.21L242.319 93.2883C242.319 93.2763 242.319 93.2643 242.319 93.2524C242.318 93.2247 242.313 93.1973 242.305 93.1709C242.294 93.1333 242.272 93.0997 242.242 93.0742C242.213 93.0487 242.176 93.0324 242.137 93.0273C242.118 93.0225 242.097 93.0216 242.077 93.0249C242.057 93.0281 242.038 93.0353 242.021 93.0461C241.993 93.0666 241.972 93.0951 241.96 93.1277C241.945 93.1686 241.936 93.2119 241.935 93.2557Z" fill="#1B023F"/> -<path d="M251.745 95.4213L249.5 94.3614L248.567 94.5538L249.045 94.0001L249.472 93.9186L251.659 94.9508L251.745 95.4213Z" fill="#1B023F"/> -<path d="M215.155 106.957L215.073 81.9145C215.074 81.8993 215.073 81.884 215.072 81.8688C215.073 81.8314 215.068 81.7941 215.058 81.7579C215.047 81.713 215.025 81.6716 214.994 81.6372C214.955 81.5947 214.903 81.5661 214.846 81.5557C214.819 81.5488 214.791 81.5475 214.764 81.5518C214.737 81.5562 214.711 81.5661 214.688 81.581C214.651 81.6085 214.623 81.6458 214.607 81.6886C214.591 81.7262 214.579 81.7656 214.573 81.8061C214.569 81.8244 214.567 81.8429 214.566 81.8615L214.504 106.838L214.144 106.772C214.146 106.359 214.149 105.859 214.152 105.288C214.159 104.171 214.166 102.782 214.176 101.236L214.183 100.2C214.196 98.1211 214.21 95.8232 214.227 93.5533C214.246 90.8992 214.267 88.2867 214.288 86.1105C214.309 83.9342 214.331 82.1966 214.352 81.2997C214.742 80.9792 215.207 80.7631 215.703 80.6719C216.148 80.5905 216.602 80.5795 217.05 80.6392C217.4 80.6839 217.746 80.76 218.084 80.8667C218.224 80.9099 218.361 80.9603 218.496 81.0175L219.632 107.794L219.314 107.735L218.286 81.5508V81.5027C218.286 81.4653 218.281 81.428 218.271 81.3918C218.259 81.3467 218.237 81.305 218.206 81.2703C218.166 81.228 218.114 81.1995 218.057 81.1888C218.031 81.1821 218.004 81.1808 217.977 81.1852C217.95 81.1895 217.925 81.1994 217.903 81.2141C217.866 81.2416 217.837 81.2789 217.821 81.3217C217.805 81.3597 217.794 81.3993 217.788 81.4399C217.784 81.4582 217.782 81.4768 217.781 81.4954L218.65 107.621L218.313 107.558L217.456 81.3242V81.276C217.456 81.2386 217.451 81.2013 217.441 81.1652C217.429 81.1202 217.407 81.0788 217.376 81.0445C217.336 81.0022 217.284 80.9736 217.227 80.9629C217.2 80.9563 217.173 80.9551 217.146 80.9594C217.119 80.9638 217.094 80.9736 217.071 80.9882C217.034 81.0157 217.006 81.053 216.989 81.0958C216.973 81.1337 216.962 81.1734 216.956 81.2141C216.953 81.2324 216.951 81.2509 216.95 81.2695L217.649 107.433L217.231 107.351L216.672 81.3233V81.2752C216.672 81.2381 216.667 81.201 216.657 81.1652C216.646 81.1205 216.623 81.0794 216.592 81.0453C216.553 81.0028 216.501 80.9742 216.445 80.9637C216.418 80.9566 216.391 80.9549 216.364 80.959C216.337 80.9631 216.311 80.9728 216.288 80.9874C216.251 81.0149 216.223 81.0522 216.207 81.095C216.184 81.1506 216.171 81.2096 216.167 81.2695L216.575 107.231L216.156 107.149L215.855 81.5696V81.5206C215.856 81.4833 215.851 81.446 215.842 81.4098C215.831 81.3647 215.809 81.3229 215.779 81.2883C215.739 81.2458 215.687 81.2172 215.63 81.2067C215.604 81.1998 215.576 81.1985 215.549 81.2029C215.522 81.2072 215.496 81.2171 215.474 81.232C215.437 81.2597 215.408 81.2973 215.392 81.3404C215.376 81.3783 215.364 81.418 215.358 81.4587C215.354 81.477 215.352 81.4955 215.351 81.5141L215.514 107.023L215.155 106.957Z" fill="#1B023F"/> -<path d="M239.235 111.365L239.238 111.444L239.241 111.447L239.235 111.365Z" fill="#1B023F"/> -<path d="M238.538 91.7929L239.235 111.365L238.721 104.318L238.328 92.1182C238.329 92.1054 238.329 92.0926 238.328 92.0799C238.326 92.0503 238.321 92.021 238.312 91.9926C238.302 91.957 238.282 91.9245 238.256 91.898C238.223 91.8656 238.18 91.8443 238.134 91.8369C238.113 91.8322 238.091 91.8318 238.069 91.8357C238.048 91.8396 238.027 91.8478 238.009 91.8597C237.98 91.8819 237.957 91.9118 237.944 91.9462C237.932 91.9762 237.924 92.0077 237.92 92.0399C237.919 92.0546 237.919 92.0693 237.92 92.084L238.001 94.3882L237.799 91.5972C238.109 91.3566 238.473 91.1951 238.86 91.1267C239.21 91.0656 239.567 91.0565 239.92 91.0998C240.195 91.1308 240.468 91.1854 240.735 91.2629C240.938 91.3224 241.061 91.3738 241.061 91.3738L242.571 112.066L242.311 112.014L240.904 91.7929C240.905 91.7804 240.905 91.7678 240.904 91.7553C240.903 91.7261 240.898 91.697 240.89 91.669C240.879 91.6287 240.856 91.5925 240.825 91.5649C240.794 91.5372 240.755 91.5193 240.714 91.5132C240.692 91.508 240.67 91.5072 240.648 91.5108C240.627 91.5145 240.606 91.5225 240.587 91.5344C240.558 91.5565 240.535 91.5865 240.522 91.6208C240.51 91.6509 240.502 91.6824 240.498 91.7146C240.497 91.7293 240.497 91.744 240.498 91.7586L241.771 111.92L241.496 111.867L240.225 91.6208C240.225 91.6083 240.225 91.5958 240.225 91.5833C240.224 91.5539 240.219 91.5249 240.21 91.4969C240.198 91.4566 240.175 91.4206 240.143 91.3931C240.112 91.3656 240.073 91.3479 240.031 91.342C240.01 91.3368 239.987 91.3361 239.965 91.3398C239.943 91.3436 239.923 91.3518 239.904 91.364C239.875 91.3847 239.853 91.4128 239.839 91.4455C239.827 91.4753 239.818 91.5065 239.814 91.5385C239.814 91.5529 239.814 91.5673 239.814 91.5817L240.962 111.767L240.625 111.704L239.595 91.6298C239.596 91.617 239.596 91.6042 239.595 91.5915C239.594 91.5618 239.589 91.5325 239.58 91.5042C239.569 91.4637 239.545 91.4275 239.513 91.4001C239.481 91.3727 239.442 91.3553 239.4 91.3501C239.379 91.3449 239.357 91.344 239.336 91.3475C239.315 91.351 239.294 91.3588 239.276 91.3705C239.247 91.391 239.225 91.4193 239.212 91.452C239.195 91.496 239.185 91.5426 239.183 91.5898L240.094 111.599L239.76 111.537L238.944 91.8288C238.945 91.816 238.945 91.8032 238.944 91.7904C238.943 91.7609 238.939 91.7316 238.931 91.7032C238.919 91.6626 238.896 91.6261 238.865 91.5984C238.833 91.5707 238.794 91.553 238.752 91.5474C238.731 91.5424 238.708 91.5416 238.687 91.5453C238.665 91.5489 238.645 91.5568 238.626 91.5686C238.597 91.5908 238.575 91.6208 238.562 91.6551C238.55 91.6853 238.543 91.7168 238.538 91.7488C238.537 91.7635 238.537 91.7782 238.538 91.7929Z" fill="#1B023F"/> -<path d="M252.83 113.975L252.596 113.931L250.234 96.1495C250.235 96.1384 250.235 96.1272 250.234 96.116C250.231 96.0898 250.225 96.0641 250.216 96.0394C250.204 96.0084 250.186 95.9805 250.162 95.9578C250.13 95.9293 250.092 95.9106 250.05 95.904C250.031 95.8991 250.012 95.898 249.993 95.901C249.974 95.9039 249.955 95.9108 249.939 95.9212C249.914 95.9401 249.895 95.9667 249.886 95.997C249.877 96.0233 249.871 96.0507 249.87 96.0785C249.869 96.0915 249.869 96.1047 249.87 96.1177L252.114 113.842L251.864 113.795L249.617 95.9978C249.617 95.9933 249.617 95.9888 249.618 95.9843C249.618 95.9774 249.617 95.9705 249.617 95.9636C249.615 95.9357 249.609 95.9083 249.599 95.882C249.587 95.8513 249.568 95.8235 249.544 95.8005C249.514 95.7714 249.475 95.7521 249.433 95.745C249.415 95.7406 249.395 95.7401 249.376 95.7435C249.357 95.7468 249.339 95.754 249.323 95.7646C249.297 95.7842 249.278 95.8109 249.268 95.8412C249.255 95.8806 249.248 95.922 249.249 95.9636L251.378 113.71L251.077 113.653L249.057 96.0068C249.058 95.9954 249.058 95.9839 249.057 95.9725C249.055 95.9446 249.049 95.9172 249.039 95.891C249.027 95.86 249.008 95.8322 248.983 95.8094C248.952 95.7808 248.913 95.7621 248.871 95.7556C248.852 95.7509 248.833 95.7501 248.814 95.7533C248.794 95.7566 248.776 95.7637 248.76 95.7744C248.735 95.7937 248.717 95.8202 248.707 95.8502C248.698 95.8765 248.692 95.904 248.691 95.9318C248.69 95.9448 248.69 95.9579 248.691 95.9709L250.597 113.562L250.297 113.504L248.488 96.1845C248.489 96.1795 248.489 96.1745 248.489 96.1695C248.489 96.1634 248.489 96.1572 248.488 96.1511C248.486 96.1249 248.48 96.0991 248.471 96.0744C248.457 96.0384 248.435 96.0066 248.405 95.9821C248.376 95.9576 248.34 95.9414 248.303 95.935C248.284 95.9303 248.264 95.9295 248.245 95.9327C248.226 95.9359 248.208 95.9431 248.192 95.9538C248.167 95.9735 248.148 96.0002 248.138 96.0304C248.129 96.0568 248.123 96.0842 248.121 96.112C248.12 96.125 248.12 96.138 248.121 96.1511L249.181 106.82L247.885 95.7393C248.153 95.6215 248.44 95.5524 248.732 95.5355C248.999 95.5184 249.267 95.5305 249.531 95.5713C249.731 95.6015 249.929 95.6448 250.123 95.701C250.269 95.7434 250.356 95.7768 250.356 95.7768L252.83 113.975Z" fill="#1B023F"/> -<path d="M221.009 108.048L220.66 84.1935C220.66 84.178 220.659 84.1624 220.658 84.147C220.657 84.1111 220.652 84.0755 220.642 84.041C220.63 83.998 220.608 83.9585 220.578 83.926C220.538 83.8868 220.487 83.8609 220.432 83.8518C220.406 83.8458 220.379 83.8451 220.353 83.8497C220.326 83.8543 220.301 83.8642 220.279 83.8788C220.242 83.9054 220.214 83.9415 220.197 83.9831C220.181 84.0193 220.17 84.0574 220.164 84.0964C220.161 84.114 220.16 84.1317 220.159 84.1494L220.367 107.931L220.014 107.865C220.008 106.649 219.998 104.74 219.987 102.506C219.975 100.272 219.963 97.7134 219.953 95.1987C219.943 92.6841 219.936 90.2159 219.933 88.1612C219.93 86.1064 219.932 84.4683 219.943 83.617C220.323 83.3036 220.776 83.0905 221.259 82.9973C221.694 82.914 222.139 82.898 222.579 82.95C222.923 82.9884 223.263 83.0575 223.595 83.1563C223.733 83.1949 223.869 83.2414 224.002 83.2957L225.024 101.939C225.02 101.065 225.017 100.163 225.014 99.2528C225.011 98.5512 225.008 97.8444 225.005 97.141C225.004 96.8396 225.003 96.5389 225.002 96.2395C224.996 94.9337 224.991 93.6537 224.991 92.4558C224.991 91.9456 224.991 91.4505 224.99 90.9749C224.99 90.0776 224.99 89.2497 224.991 88.5207C224.991 87.4053 224.996 86.5206 225.003 85.9743C225.368 85.6736 225.803 85.4693 226.268 85.3799C226.686 85.2999 227.114 85.2845 227.536 85.3342C227.868 85.3709 228.195 85.437 228.515 85.5315C228.647 85.5693 228.778 85.614 228.906 85.6652L229.549 97.4068C229.547 96.9109 229.545 96.42 229.544 95.9373C229.542 95.4129 229.541 94.8983 229.539 94.398C229.535 93.4375 229.535 92.53 229.535 91.7073C229.535 91.4215 229.535 91.146 229.534 90.8821C229.534 90.3865 229.534 89.9319 229.535 89.5269C229.536 89.203 229.538 88.9111 229.54 88.6556C229.542 88.4218 229.544 88.2186 229.544 88.0494C229.893 87.7614 230.309 87.5652 230.753 87.4787C231.151 87.402 231.559 87.3874 231.962 87.4355C232.277 87.4704 232.589 87.5335 232.893 87.6238C233.019 87.6603 233.143 87.703 233.264 87.7518L234.546 110.568L234.261 110.513L233.124 88.2256C233.125 88.2173 233.125 88.2089 233.125 88.2006C233.125 88.1948 233.124 88.189 233.124 88.1832C233.124 88.1506 233.119 88.1182 233.11 88.087C233.099 88.0421 233.074 88.0017 233.039 87.9712C233.004 87.9406 232.961 87.9213 232.915 87.9157C232.891 87.9097 232.867 87.9085 232.843 87.9123C232.819 87.9161 232.796 87.9247 232.776 87.9377C232.743 87.9618 232.717 87.9949 232.703 88.0331C232.689 88.0666 232.679 88.1016 232.674 88.1375C232.669 88.1538 232.669 88.1701 232.669 88.1864L233.668 110.406L233.364 110.348L232.376 88.029C232.377 88.0149 232.377 88.0008 232.376 87.9866C232.376 87.9538 232.371 87.9212 232.362 87.8896C232.351 87.8499 232.33 87.8135 232.301 87.7836C232.265 87.7473 232.218 87.7231 232.167 87.7143C232.143 87.709 232.118 87.7086 232.094 87.7129C232.07 87.7173 232.047 87.7263 232.027 87.7396C231.993 87.7641 231.968 87.7974 231.952 87.8358C231.938 87.869 231.929 87.9038 231.923 87.9394C231.921 87.9556 231.919 87.9719 231.918 87.9883L232.771 110.236L232.399 110.168L231.672 88.0421C231.673 88.028 231.673 88.0138 231.672 87.9997C231.672 87.9669 231.667 87.9342 231.658 87.9027C231.646 87.8578 231.622 87.8174 231.587 87.7869C231.552 87.7563 231.508 87.737 231.462 87.7314C231.439 87.7253 231.414 87.7242 231.389 87.7281C231.365 87.7321 231.342 87.741 231.321 87.7543C231.288 87.778 231.263 87.8108 231.248 87.8488C231.234 87.882 231.224 87.9168 231.219 87.9524C231.217 87.9683 231.215 87.9844 231.214 88.0005L231.811 110.059L231.438 109.99L230.94 88.2688C230.941 88.2546 230.941 88.2405 230.94 88.2264C230.94 88.1935 230.935 88.1609 230.926 88.1294C230.915 88.0899 230.894 88.0538 230.866 88.0242C230.828 87.9877 230.78 87.9637 230.729 87.9557C230.705 87.9498 230.681 87.9488 230.657 87.9527C230.634 87.9566 230.611 87.9654 230.591 87.9785C230.558 88.0027 230.533 88.0354 230.518 88.0731C230.504 88.1062 230.495 88.141 230.49 88.1766C230.485 88.193 230.485 88.2093 230.485 88.2256L230.857 109.881L230.53 109.822L230.233 88.5827C230.234 88.5683 230.234 88.5539 230.233 88.5395C230.233 88.5064 230.228 88.4735 230.219 88.4417C230.208 88.4019 230.188 88.3654 230.159 88.3356C230.123 88.2996 230.076 88.2761 230.026 88.2688C230.002 88.2635 229.977 88.263 229.953 88.2673C229.928 88.2717 229.905 88.2808 229.885 88.294C229.851 88.3185 229.825 88.3518 229.81 88.3902C229.796 88.4235 229.786 88.4583 229.78 88.4938C229.777 88.5101 229.775 88.5264 229.775 88.5427L229.899 103.301L230.252 109.767L229.633 109.651C229.63 109.247 229.628 108.792 229.625 108.288L229.623 107.906C229.622 107.512 229.62 107.094 229.617 106.657C229.614 106.077 229.611 105.461 229.607 104.82C229.606 104.601 229.605 104.379 229.603 104.154C229.6 103.722 229.597 103.28 229.597 102.832L228.744 86.1561C228.745 86.1414 228.745 86.1268 228.744 86.1121C228.743 86.0779 228.739 86.0439 228.729 86.011C228.718 85.9698 228.697 85.9319 228.667 85.9009C228.629 85.8631 228.58 85.8383 228.526 85.83C228.501 85.824 228.475 85.823 228.45 85.8272C228.425 85.8314 228.4 85.8407 228.379 85.8544C228.342 85.8791 228.314 85.914 228.297 85.9547C228.283 85.9897 228.272 86.0265 228.267 86.064C228.264 86.0814 228.262 86.0985 228.262 86.1153L229.322 109.593L229.002 109.532L227.951 85.9523C227.951 85.9373 227.951 85.9224 227.951 85.9074C227.951 85.8726 227.946 85.8381 227.936 85.8047C227.925 85.7632 227.903 85.7251 227.874 85.6938C227.836 85.656 227.787 85.6314 227.734 85.6237C227.708 85.6177 227.682 85.6169 227.657 85.6213C227.631 85.6256 227.606 85.635 227.584 85.6489C227.548 85.6737 227.52 85.7082 227.503 85.7484C227.488 85.7831 227.478 85.8196 227.473 85.8568C227.47 85.8736 227.469 85.8905 227.468 85.9074L228.375 109.417L227.983 109.344L227.209 85.9645C227.209 85.9498 227.209 85.9351 227.209 85.9205C227.208 85.8862 227.203 85.8523 227.193 85.8194C227.182 85.7781 227.16 85.7403 227.13 85.7093C227.092 85.6713 227.043 85.6462 226.99 85.6375C226.965 85.6312 226.939 85.6301 226.913 85.6341C226.888 85.6382 226.863 85.6474 226.842 85.6612C226.805 85.6862 226.777 85.721 226.76 85.7614C226.745 85.7967 226.735 85.8337 226.729 85.8715C226.726 85.8885 226.724 85.9057 226.723 85.9229L227.363 109.23L226.968 109.158L226.438 86.2009C226.439 86.1921 226.439 86.1833 226.439 86.1744C226.439 86.1683 226.438 86.1622 226.438 86.1561C226.437 86.1216 226.432 86.0873 226.423 86.0542C226.41 86.0071 226.384 85.9647 226.347 85.9322C226.311 85.8997 226.266 85.8787 226.218 85.8715C226.193 85.8657 226.167 85.8649 226.141 85.8692C226.116 85.8736 226.092 85.8829 226.07 85.8968C226.034 85.9219 226.006 85.9566 225.989 85.9971C225.974 86.0321 225.964 86.0688 225.958 86.1064C225.955 86.1234 225.953 86.1405 225.952 86.1577L226.352 109.043L226.016 108.979L225.69 86.5288C225.69 86.5138 225.69 86.4989 225.69 86.4839C225.689 86.4495 225.685 86.4152 225.676 86.382C225.664 86.335 225.638 86.2927 225.602 86.2606C225.566 86.2286 225.521 86.2083 225.473 86.2026C225.448 86.1965 225.422 86.1956 225.397 86.1998C225.372 86.204 225.348 86.2133 225.327 86.2271C225.291 86.2522 225.262 86.2869 225.245 86.3273C225.23 86.3622 225.219 86.3989 225.213 86.4366C225.212 86.4465 225.21 86.4565 225.209 86.4665C225.208 86.4736 225.208 86.4808 225.208 86.488L225.405 108.722L225.411 108.861L225.066 108.798V108.136L223.812 83.7988C223.813 83.7836 223.813 83.7684 223.812 83.7532C223.811 83.7176 223.806 83.6822 223.796 83.648C223.783 83.5992 223.756 83.5553 223.718 83.5217C223.68 83.4881 223.633 83.4663 223.583 83.4588C223.558 83.4527 223.531 83.4519 223.505 83.4564C223.479 83.4609 223.455 83.4705 223.432 83.4849C223.396 83.5113 223.368 83.5475 223.351 83.5893C223.335 83.6258 223.325 83.6642 223.319 83.7034C223.318 83.7107 223.317 83.7179 223.316 83.7253C223.315 83.7359 223.314 83.7466 223.313 83.7573L224.449 108.683L224.117 108.621L222.995 83.5885C222.995 83.5828 222.995 83.5772 222.995 83.5715C222.995 83.5617 222.995 83.5518 222.995 83.542C222.994 83.5061 222.989 83.4705 222.979 83.436C222.967 83.3927 222.945 83.353 222.915 83.3202C222.876 83.281 222.825 83.2551 222.77 83.246C222.744 83.2398 222.717 83.2389 222.69 83.2434C222.664 83.2479 222.638 83.2576 222.616 83.2721C222.579 83.2985 222.551 83.3347 222.534 83.3765C222.518 83.4127 222.508 83.4508 222.502 83.4898C222.499 83.5073 222.497 83.5251 222.496 83.5428L223.468 108.501L223.056 108.427L222.23 83.5991C222.231 83.5839 222.231 83.5686 222.23 83.5534C222.229 83.5181 222.223 83.483 222.213 83.449C222.2 83.4002 222.173 83.3564 222.135 83.323C222.097 83.2896 222.05 83.2683 222 83.2615C221.974 83.255 221.947 83.2539 221.921 83.2582C221.895 83.2626 221.87 83.2723 221.847 83.2868C221.811 83.3132 221.783 83.3494 221.766 83.3911C221.75 83.4277 221.74 83.4661 221.734 83.5053C221.733 83.5127 221.732 83.5202 221.731 83.5277C221.73 83.5381 221.729 83.5486 221.728 83.5591L222.412 108.307L222.001 108.232L221.43 83.8518C221.431 83.8363 221.431 83.8208 221.43 83.8053C221.43 83.7695 221.424 83.7338 221.414 83.6993C221.402 83.6502 221.375 83.606 221.337 83.5722C221.299 83.5384 221.252 83.5166 221.202 83.5094C221.176 83.503 221.149 83.5018 221.122 83.5061C221.096 83.5103 221.071 83.5197 221.048 83.5338C221.012 83.56 220.983 83.5963 220.967 83.6382C220.952 83.6749 220.942 83.7132 220.936 83.7523C220.931 83.7703 220.931 83.7883 220.931 83.8062L221.362 108.115L221.009 108.048Z" fill="#1B023F"/> -</g> -<defs> -<clipPath id="clip0_16498_64792"> -<rect width="390" height="151" fill="white"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/assets/svgs/icons/arrow.svg b/web-devtools/src/assets/svgs/icons/arrow.svg deleted file mode 100644 index ce9ad3625..000000000 --- a/web-devtools/src/assets/svgs/icons/arrow.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_13289_179238)"> -<path d="M6.5157 1.8027L7.30847 1.01855C7.64415 0.686524 8.18694 0.686524 8.51905 1.01855L15.4611 7.88165C15.7968 8.21367 15.7968 8.75057 15.4611 9.07907L8.51905 15.9457C8.18337 16.2777 7.64058 16.2777 7.30847 15.9457L6.5157 15.1615C6.17646 14.826 6.1836 14.2785 6.52999 13.95L10.8331 9.89501L0.569938 9.89501C0.0949908 9.89501 -0.287109 9.51706 -0.287109 9.04728L-0.287109 7.91697C-0.287109 7.44718 0.0949908 7.06924 0.569938 7.06924L10.8331 7.06924L6.52999 3.01425C6.18003 2.68576 6.17288 2.13826 6.5157 1.8027Z" fill="#009AFF"/> -</g> -<defs> -<clipPath id="clip0_13289_179238"> -<rect width="16" height="16" fill="white" transform="translate(0 0.482422)"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/assets/svgs/icons/help.svg b/web-devtools/src/assets/svgs/icons/help.svg deleted file mode 100644 index 35cea89d6..000000000 --- a/web-devtools/src/assets/svgs/icons/help.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> - <path - d="M8 0C3.58203 0 0 3.58332 0 8C0 12.4193 3.58203 16 8 16C12.418 16 16 12.4193 16 8C16 3.58332 12.418 0 8 0ZM8 14.4516C4.43445 14.4516 1.54839 11.5667 1.54839 8C1.54839 4.43564 4.43458 1.54839 8 1.54839C11.5642 1.54839 14.4516 4.43455 14.4516 8C14.4516 11.5655 11.5667 14.4516 8 14.4516ZM11.4595 6.21935C11.4595 8.38232 9.12332 8.41561 9.12332 9.21494V9.41935C9.12332 9.63313 8.95 9.80645 8.73623 9.80645H7.26374C7.04997 9.80645 6.87664 9.63313 6.87664 9.41935V9.14003C6.87664 7.98697 7.75084 7.52603 8.41145 7.15564C8.97794 6.83806 9.32513 6.62206 9.32513 6.20148C9.32513 5.64516 8.61548 5.2759 8.04177 5.2759C7.29374 5.2759 6.94842 5.63 6.463 6.24265C6.33213 6.40781 6.09332 6.43848 5.92539 6.31116L5.02784 5.63058C4.8631 5.50568 4.82619 5.27361 4.94255 5.10274C5.70471 3.98358 6.67548 3.35484 8.1869 3.35484C9.76984 3.35484 11.4595 4.59045 11.4595 6.21935V6.21935ZM9.35484 11.6129C9.35484 12.36 8.74706 12.9677 8 12.9677C7.25294 12.9677 6.64516 12.36 6.64516 11.6129C6.64516 10.8658 7.25294 10.2581 8 10.2581C8.74706 10.2581 9.35484 10.8658 9.35484 11.6129Z" - /> -</svg> diff --git a/web-devtools/src/assets/svgs/icons/policy.svg b/web-devtools/src/assets/svgs/icons/policy.svg deleted file mode 100644 index 14de6afe1..000000000 --- a/web-devtools/src/assets/svgs/icons/policy.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M12.5 2H10C10 0.896875 9.10313 0 8 0C6.89687 0 6 0.896875 6 2H3.5C2.67188 2 2 2.67188 2 3.5V14.5C2 15.3281 2.67188 16 3.5 16H12.5C13.3281 16 14 15.3281 14 14.5V3.5C14 2.67188 13.3281 2 12.5 2ZM8 1.25C8.41563 1.25 8.75 1.58438 8.75 2C8.75 2.41563 8.41563 2.75 8 2.75C7.58437 2.75 7.25 2.41563 7.25 2C7.25 1.58438 7.58437 1.25 8 1.25ZM11.7875 8.49375L7.31875 12.925C7.17188 13.0719 6.93437 13.0688 6.7875 12.9219L4.20625 10.3188C4.05938 10.1719 4.0625 9.93438 4.20937 9.7875L5.09687 8.90625C5.24375 8.75937 5.48125 8.7625 5.62812 8.90938L7.06563 10.3594L10.3781 7.07188C10.525 6.925 10.7625 6.92812 10.9094 7.075L11.7906 7.9625C11.9375 8.1125 11.9344 8.34687 11.7875 8.49375Z" /> -</svg> diff --git a/web-devtools/src/assets/svgs/socialmedia/discord.svg b/web-devtools/src/assets/svgs/socialmedia/discord.svg deleted file mode 100644 index 8689eefd8..000000000 --- a/web-devtools/src/assets/svgs/socialmedia/discord.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_11763_165988)"> -<path d="M14.1617 3.01131C14.1573 3.00284 14.1499 2.99621 14.1409 2.9926C13.1035 2.52514 12.0088 2.19181 10.8841 2.00094C10.8739 1.99907 10.8634 2.00042 10.854 2.00479C10.8446 2.00915 10.8368 2.01632 10.8318 2.02526C10.6827 2.29098 10.5474 2.56393 10.4264 2.84305C9.21403 2.6623 7.98085 2.6623 6.76851 2.84305C6.64665 2.56322 6.50916 2.29021 6.35667 2.02526C6.35144 2.01651 6.34365 2.00951 6.33431 2.00517C6.32497 2.00084 6.31452 1.99936 6.30432 2.00094C5.17952 2.19141 4.08472 2.52477 3.04749 2.99263C3.03861 2.99632 3.03112 3.00264 3.02605 3.01069C0.951781 6.05302 0.383561 9.02055 0.66231 11.9513C0.663094 11.9585 0.665341 11.9655 0.668917 11.9718C0.672494 11.9781 0.677326 11.9836 0.683127 11.9881C1.89095 12.8664 3.24192 13.5368 4.67838 13.9708C4.68849 13.9738 4.6993 13.9736 4.70933 13.9704C4.71937 13.9672 4.72816 13.961 4.73452 13.9527C5.04304 13.5404 5.31641 13.1038 5.55185 12.6474C5.55509 12.6411 5.55693 12.6343 5.55727 12.6273C5.55761 12.6202 5.55643 12.6132 5.55381 12.6067C5.55119 12.6002 5.54719 12.5943 5.54207 12.5893C5.53696 12.5844 5.53084 12.5807 5.52412 12.5782C5.09304 12.4162 4.67569 12.221 4.27601 11.9942C4.26875 11.99 4.26265 11.9841 4.25826 11.9771C4.25386 11.97 4.2513 11.962 4.2508 11.9538C4.2503 11.9455 4.25188 11.9373 4.2554 11.9297C4.25892 11.9222 4.26427 11.9157 4.27098 11.9107C4.35484 11.849 4.43876 11.7848 4.51884 11.7199C4.52596 11.7142 4.53456 11.7105 4.5437 11.7093C4.55283 11.7081 4.56213 11.7094 4.57054 11.7131C7.18903 12.8868 10.0239 12.8868 12.6114 11.7131C12.6198 11.7092 12.6292 11.7077 12.6385 11.7088C12.6477 11.7099 12.6565 11.7135 12.6637 11.7193C12.7438 11.7842 12.8277 11.849 12.9122 11.9107C12.919 11.9156 12.9244 11.9221 12.9279 11.9296C12.9315 11.9371 12.9332 11.9453 12.9327 11.9536C12.9323 11.9619 12.9298 11.9699 12.9254 11.977C12.9211 11.9841 12.915 11.99 12.9078 11.9942C12.509 12.2229 12.0913 12.418 11.6591 12.5776C11.6524 12.5801 11.6463 12.584 11.6412 12.589C11.6361 12.594 11.6322 12.5999 11.6296 12.6065C11.627 12.6131 11.6259 12.6202 11.6263 12.6272C11.6267 12.6343 11.6286 12.6411 11.6319 12.6474C11.8713 13.1013 12.1443 13.5373 12.4486 13.952C12.4548 13.9605 12.4635 13.9669 12.4736 13.9702C12.4837 13.9736 12.4946 13.9738 12.5047 13.9707C13.9438 13.5382 15.2971 12.8677 16.5064 11.9881C16.5123 11.9839 16.5172 11.9784 16.5208 11.9722C16.5244 11.966 16.5266 11.9591 16.5273 11.9519C16.861 8.56365 15.9686 5.62045 14.1617 3.01131ZM5.9429 10.1668C5.15454 10.1668 4.50496 9.45624 4.50496 8.58362C4.50496 7.71099 5.14195 7.0004 5.9429 7.0004C6.75011 7.0004 7.39341 7.71716 7.38081 8.58356C7.38081 9.45624 6.7438 10.1668 5.9429 10.1668ZM11.2594 10.1668C10.4711 10.1668 9.82147 9.45624 9.82147 8.58362C9.82147 7.71099 10.4585 7.0004 11.2594 7.0004C12.0666 7.0004 12.7099 7.71716 12.6973 8.58356C12.6973 9.45624 12.0666 10.1668 11.2594 10.1668Z"/> -</g> -<defs> -<clipPath id="clip0_11763_165988"> -<rect width="16" height="16" transform="translate(0.596191 0.00012207)"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/assets/svgs/socialmedia/etherscan.svg b/web-devtools/src/assets/svgs/socialmedia/etherscan.svg deleted file mode 100644 index 56aea0390..000000000 --- a/web-devtools/src/assets/svgs/socialmedia/etherscan.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_7838_1787)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M3.97333 7.35778C3.93906 7.4403 3.92143 7.52877 3.92144 7.61813H3.92171V11.8583C3.92157 11.9971 3.87039 12.1311 3.7779 12.2346C3.68541 12.3382 3.55808 12.4041 3.42016 12.4198C3.10329 12.457 2.83675 12.4836 2.62265 12.5025C2.43103 12.5196 2.23849 12.4817 2.06766 12.3932C1.89683 12.3046 1.75481 12.1692 1.65827 12.0027C0.958235 10.7856 0.591875 9.40508 0.59623 8.00087C0.595794 3.56325 4.26146 -0.0587576 8.69691 0.000847346C10.3418 0.0235218 11.9395 0.553883 13.2716 1.51941C14.6036 2.48494 15.6051 3.83851 16.139 5.39504C16.2002 5.573 16.2163 5.76334 16.186 5.94908C16.1558 6.13481 16.08 6.31016 15.9655 6.45948C15.1765 7.48818 14.1821 8.34374 13.201 9.05502V4.22642C13.201 4.04627 13.1295 3.8735 13.0021 3.74612C12.8748 3.61874 12.7021 3.54718 12.522 3.54718H11.3903C11.3011 3.54718 11.2128 3.56476 11.1305 3.5989C11.0481 3.63304 10.9733 3.68307 10.9102 3.74615C10.8472 3.80922 10.7972 3.8841 10.7631 3.9665C10.7289 4.04891 10.7114 4.13723 10.7114 4.22642V10.0903C10.7113 10.2017 10.6784 10.3105 10.6169 10.4033C10.5554 10.4961 10.4679 10.5687 10.3654 10.6121C10.0893 10.7286 9.80611 10.8434 9.80611 10.8434V5.92484C9.80611 5.74467 9.73458 5.57189 9.60725 5.44448C9.47991 5.31707 9.30721 5.24547 9.12711 5.24543H7.99542C7.81532 5.24546 7.6426 5.31705 7.51527 5.44446C7.38793 5.57188 7.31641 5.74467 7.31642 5.92484V11.2242C7.31639 11.3518 7.27329 11.4756 7.19412 11.5756C7.11494 11.6755 7.00434 11.7458 6.88022 11.7751C6.70147 11.817 6.5383 11.8572 6.41107 11.8949V7.62265C6.41107 7.4425 6.33954 7.26973 6.2122 7.14235C6.08487 7.01497 5.91216 6.94341 5.73208 6.94341L4.60267 6.9397C4.51335 6.93928 4.42483 6.95653 4.34219 6.99043C4.25955 7.02434 4.18442 7.07425 4.12112 7.13729C4.05782 7.20033 4.00759 7.27526 3.97333 7.35778ZM3.89701 14.47C3.89695 14.4699 3.89689 14.4699 3.89683 14.4699L3.89677 14.47C3.89685 14.47 3.89693 14.47 3.89701 14.47ZM3.89701 14.47C5.08983 15.338 6.49942 15.859 7.96985 15.9754C9.44036 16.0918 10.9144 15.799 12.2289 15.1293C13.5433 14.4597 14.647 13.4394 15.4178 12.1812C16.1886 10.923 16.5964 9.47608 16.5962 8.00043C16.5962 7.81622 16.5876 7.63409 16.5753 7.45293C13.6538 11.8115 8.25971 13.8495 3.89701 14.47Z"/> -</g> -<defs> -<clipPath id="clip0_7838_1787"> -<rect width="16" height="16" transform="translate(0.596191 0.00012207)"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/assets/svgs/socialmedia/ghost-blog.svg b/web-devtools/src/assets/svgs/socialmedia/ghost-blog.svg deleted file mode 100644 index cbd9a8137..000000000 --- a/web-devtools/src/assets/svgs/socialmedia/ghost-blog.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_7752_1887)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M0.596313 1.50012C0.596313 0.671696 1.26789 0.00012207 2.09631 0.00012207H8.50809C9.33652 0.00012207 10.0081 0.671695 10.0081 1.50012V1.79424C10.0081 2.62267 9.33652 3.29424 8.50809 3.29424H2.09631C1.26789 3.29424 0.596313 2.62267 0.596313 1.79424V1.50012ZM13.302 1.50099C13.302 0.672564 13.9735 0.000990136 14.802 0.000990136H15.0961C15.9245 0.000990136 16.5961 0.672563 16.5961 1.50099V1.79511C16.5961 2.62354 15.9245 3.29511 15.0961 3.29511H14.802C13.9735 3.29511 13.302 2.62354 13.302 1.79511V1.50099ZM11.508 12.706C10.6795 12.706 10.008 13.3776 10.008 14.206V14.5001C10.008 15.3285 10.6796 16.0001 11.508 16.0001H15.0962C15.9246 16.0001 16.5962 15.3285 16.5962 14.5001V14.206C16.5962 13.3776 15.9246 12.706 15.0962 12.706H11.508ZM0.596191 14.206C0.596191 13.3776 1.26776 12.706 2.09619 12.706H5.68443C6.51286 12.706 7.18444 13.3776 7.18444 14.206V14.5001C7.18444 15.3285 6.51286 16.0001 5.68444 16.0001H2.09619C1.26776 16.0001 0.596191 15.3285 0.596191 14.5001V14.206ZM2.09619 6.11825C1.26776 6.11825 0.596191 6.78982 0.596191 7.61825V7.91237C0.596191 8.7408 1.26776 9.41237 2.09619 9.41237H15.0962C15.9246 9.41237 16.5962 8.7408 16.5962 7.91237V7.61825C16.5962 6.78982 15.9246 6.11825 15.0962 6.11825H2.09619Z"/> -</g> -<defs> -<clipPath id="clip0_7752_1887"> -<rect width="16" height="16" transform="translate(0.596191 0.00012207)"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/assets/svgs/socialmedia/github.svg b/web-devtools/src/assets/svgs/socialmedia/github.svg deleted file mode 100644 index 74c5a4a9c..000000000 --- a/web-devtools/src/assets/svgs/socialmedia/github.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_7752_1965)"> -<path d="M5.9478 12.9645C5.9478 13.026 5.87361 13.0751 5.78006 13.0751C5.67361 13.0844 5.59942 13.0352 5.59942 12.9645C5.59942 12.9031 5.67361 12.8539 5.76716 12.8539C5.86393 12.8447 5.9478 12.8939 5.9478 12.9645ZM4.94458 12.8263C4.922 12.8877 4.98651 12.9584 5.08329 12.9768C5.16716 13.0075 5.26393 12.9768 5.28329 12.9154C5.30264 12.8539 5.24135 12.7832 5.14458 12.7556C5.06071 12.7341 4.96716 12.7648 4.94458 12.8263ZM6.37038 12.774C6.27684 12.7955 6.21232 12.8539 6.222 12.9246C6.23168 12.986 6.31555 13.026 6.41232 13.0045C6.50587 12.983 6.57038 12.9246 6.56071 12.8631C6.55103 12.8048 6.46393 12.7648 6.37038 12.774ZM8.49297 1.00012C4.01877 1.00012 0.596191 4.23549 0.596191 8.49708C0.596191 11.9045 2.8478 14.8203 6.06393 15.8466C6.47684 15.9172 6.622 15.6745 6.622 15.4748C6.622 15.2843 6.61232 14.2335 6.61232 13.5882C6.61232 13.5882 4.35426 14.0491 3.88006 12.6726C3.88006 12.6726 3.51232 11.7785 2.98329 11.5481C2.98329 11.5481 2.24458 11.0657 3.0349 11.0749C3.0349 11.0749 3.83813 11.1364 4.28006 11.8676C4.98651 13.0536 6.17038 12.7126 6.63168 12.5098C6.70587 12.0182 6.91555 11.6771 7.1478 11.4744C5.34458 11.2839 3.52522 11.035 3.52522 8.07921C3.52522 7.23427 3.77039 6.81026 4.28651 6.2695C4.20264 6.06978 3.92845 5.24635 4.37038 4.18326C5.04458 3.98354 6.59619 5.01284 6.59619 5.01284C7.24135 4.84078 7.9349 4.75167 8.622 4.75167C9.30909 4.75167 10.0026 4.84078 10.6478 5.01284C10.6478 5.01284 12.1994 3.98047 12.8736 4.18326C13.3155 5.24942 13.0414 6.06978 12.9575 6.2695C13.4736 6.81333 13.7897 7.23734 13.7897 8.07921C13.7897 11.0442 11.8897 11.2808 10.0865 11.4744C10.3833 11.7171 10.6349 12.178 10.6349 12.9C10.6349 13.9354 10.6252 15.2167 10.6252 15.4686C10.6252 15.6683 10.7736 15.9111 11.1833 15.8404C14.4091 14.8203 16.5962 11.9045 16.5962 8.49708C16.5962 4.23549 12.9672 1.00012 8.49297 1.00012ZM3.73168 11.5973C3.68974 11.628 3.69942 11.6986 3.75426 11.757C3.80587 11.8062 3.88006 11.8277 3.922 11.7877C3.96393 11.757 3.95426 11.6864 3.89942 11.628C3.8478 11.5788 3.77361 11.5573 3.73168 11.5973ZM3.38329 11.3484C3.36071 11.3883 3.39297 11.4375 3.45748 11.4682C3.50909 11.4989 3.57361 11.4897 3.59619 11.4467C3.61877 11.4068 3.58651 11.3576 3.522 11.3269C3.45748 11.3084 3.40587 11.3177 3.38329 11.3484ZM4.42845 12.4422C4.37684 12.4821 4.39619 12.5743 4.47038 12.6327C4.54458 12.7034 4.63813 12.7126 4.68006 12.6634C4.722 12.6235 4.70264 12.5313 4.63813 12.4729C4.56716 12.4023 4.47038 12.393 4.42845 12.4422ZM4.06071 11.9905C4.00909 12.0213 4.00909 12.1011 4.06071 12.1718C4.11232 12.2425 4.19942 12.2732 4.24135 12.2425C4.29297 12.2025 4.29297 12.1227 4.24135 12.052C4.19619 11.9813 4.11232 11.9506 4.06071 11.9905Z"/> -</g> -<defs> -<clipPath id="clip0_7752_1965"> -<rect width="16" height="16" transform="translate(0.596191 0.00012207)"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/assets/svgs/socialmedia/linkedin.svg b/web-devtools/src/assets/svgs/socialmedia/linkedin.svg deleted file mode 100644 index 0b10e33e9..000000000 --- a/web-devtools/src/assets/svgs/socialmedia/linkedin.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_7752_2158)"> -<path d="M4.16521 16.0001H0.859509V5.31798H4.16521V16.0001ZM2.51058 3.86084C1.45375 3.86084 0.596191 2.98227 0.596191 1.92155C0.596191 0.860837 1.45375 0.00012207 2.51058 0.00012207C3.56741 0.00012207 4.42497 0.860837 4.42497 1.92155C4.42497 2.98227 3.56741 3.86084 2.51058 3.86084ZM16.5376 16.0001H13.239V10.8001C13.239 9.56084 13.2141 7.97155 11.5203 7.97155C9.80163 7.97155 9.53831 9.31798 9.53831 10.7108V16.0001H6.23617V5.31798H9.40665V6.77512H9.45291C9.89414 5.93584 10.9723 5.05012 12.5807 5.05012C15.9255 5.05012 16.5411 7.26084 16.5411 10.1323V16.0001H16.5376Z"/> -</g> -<defs> -<clipPath id="clip0_7752_2158"> -<rect width="16" height="16" transform="translate(0.596191 0.00012207)"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/assets/svgs/socialmedia/reddit.svg b/web-devtools/src/assets/svgs/socialmedia/reddit.svg deleted file mode 100644 index 29638aba9..000000000 --- a/web-devtools/src/assets/svgs/socialmedia/reddit.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_7752_1653)"> -<path d="M14.812 5.78699C14.3062 5.78699 13.861 5.99607 13.5339 6.32318C12.33 5.49022 10.7079 4.95403 8.9105 4.8967L9.84462 0.688071L12.819 1.35579C12.819 2.0842 13.4125 2.67773 14.1409 2.67773C14.8828 2.67773 15.4797 2.06734 15.4797 1.33892C15.4797 0.610508 14.8862 0.00012207 14.1409 0.00012207C13.6216 0.00012207 13.1731 0.313746 12.9505 0.742028L9.66589 0.0136113C9.50065 -0.0302286 9.33878 0.0878019 9.29494 0.253044L8.26976 4.89333C6.48582 4.96752 4.8806 5.50371 3.67332 6.33667C3.34621 5.99607 2.8842 5.78699 2.37836 5.78699C0.503358 5.78699 -0.1104 8.30272 1.6061 9.16266C1.5454 9.42907 1.51842 9.71234 1.51842 9.99561C1.51842 12.8216 4.70187 15.1114 8.61036 15.1114C12.5357 15.1114 15.7192 12.8216 15.7192 9.99561C15.7192 9.71234 15.6888 9.41558 15.6146 9.14917C17.2974 8.28586 16.6769 5.78699 14.812 5.78699ZM4.32754 9.34139C4.32754 8.59948 4.92107 8.00259 5.66635 8.00259C6.39476 8.00259 6.98829 8.59611 6.98829 9.34139C6.98829 10.0698 6.39476 10.6633 5.66635 10.6633C4.92444 10.6667 4.32754 10.0698 4.32754 9.34139ZM11.5544 12.4945C10.3269 13.722 6.86351 13.722 5.636 12.4945C5.5011 12.3765 5.5011 12.1674 5.636 12.0325C5.75403 11.9145 5.96311 11.9145 6.08114 12.0325C7.01864 12.9936 10.1279 13.0104 11.1059 12.0325C11.2239 11.9145 11.433 11.9145 11.551 12.0325C11.6893 12.1674 11.6893 12.3765 11.5544 12.4945ZM11.5274 10.6667C10.799 10.6667 10.2055 10.0732 10.2055 9.34476C10.2055 8.60285 10.799 8.00596 11.5274 8.00596C12.2693 8.00596 12.8662 8.59948 12.8662 9.34476C12.8628 10.0698 12.2693 10.6667 11.5274 10.6667Z"/> -</g> -<defs> -<clipPath id="clip0_7752_1653"> -<rect width="16" height="16" transform="translate(0.596191 0.00012207)"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/assets/svgs/socialmedia/slack.svg b/web-devtools/src/assets/svgs/socialmedia/slack.svg deleted file mode 100644 index 25551ed1d..000000000 --- a/web-devtools/src/assets/svgs/socialmedia/slack.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_14018_54608)"> -<path d="M3.36143 10.6107C3.36143 11.5357 2.60571 12.2914 1.68071 12.2914C0.755714 12.2914 0 11.5357 0 10.6107C0 9.68571 0.755714 8.93 1.68071 8.93H3.36143V10.6107ZM4.20857 10.6107C4.20857 9.68571 4.96429 8.93 5.88929 8.93C6.81429 8.93 7.57 9.68571 7.57 10.6107V14.8193C7.57 15.7443 6.81429 16.5 5.88929 16.5C4.96429 16.5 4.20857 15.7443 4.20857 14.8193V10.6107ZM5.88929 3.86143C4.96429 3.86143 4.20857 3.10571 4.20857 2.18071C4.20857 1.25571 4.96429 0.5 5.88929 0.5C6.81429 0.5 7.57 1.25571 7.57 2.18071V3.86143H5.88929ZM5.88929 4.70857C6.81429 4.70857 7.57 5.46429 7.57 6.38929C7.57 7.31429 6.81429 8.07 5.88929 8.07H1.68071C0.755714 8.07 0 7.31429 0 6.38929C0 5.46429 0.755714 4.70857 1.68071 4.70857H5.88929ZM12.6386 6.38929C12.6386 5.46429 13.3943 4.70857 14.3193 4.70857C15.2443 4.70857 16 5.46429 16 6.38929C16 7.31429 15.2443 8.07 14.3193 8.07H12.6386V6.38929ZM11.7914 6.38929C11.7914 7.31429 11.0357 8.07 10.1107 8.07C9.18571 8.07 8.43 7.31429 8.43 6.38929V2.18071C8.43 1.25571 9.18571 0.5 10.1107 0.5C11.0357 0.5 11.7914 1.25571 11.7914 2.18071V6.38929ZM10.1107 13.1386C11.0357 13.1386 11.7914 13.8943 11.7914 14.8193C11.7914 15.7443 11.0357 16.5 10.1107 16.5C9.18571 16.5 8.43 15.7443 8.43 14.8193V13.1386H10.1107ZM10.1107 12.2914C9.18571 12.2914 8.43 11.5357 8.43 10.6107C8.43 9.68571 9.18571 8.93 10.1107 8.93H14.3193C15.2443 8.93 16 9.68571 16 10.6107C16 11.5357 15.2443 12.2914 14.3193 12.2914H10.1107Z"/> -</g> -<defs> -<clipPath id="clip0_14018_54608"> -<rect width="16" height="16" transform="translate(0 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/assets/svgs/socialmedia/snapshot.svg b/web-devtools/src/assets/svgs/socialmedia/snapshot.svg deleted file mode 100644 index fa69e3684..000000000 --- a/web-devtools/src/assets/svgs/socialmedia/snapshot.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_13092_194536)"> -<path d="M1.73393 8.64639L11.604 0.100116C11.9362 -0.187517 12.42 0.198474 12.2134 0.58627L8.99138 6.63339H14.5924C14.9606 6.63339 15.1299 7.0916 14.8502 7.33105L4.83779 15.9017C4.50623 16.1855 4.02638 15.8035 4.22865 15.4168L7.40552 9.34258H1.99345C1.62635 9.34258 1.45641 8.88669 1.73393 8.64639Z"/> -</g> -<defs> -<clipPath id="clip0_13092_194536"> -<rect width="16" height="16" transform="translate(0.596191 0.00012207)"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/assets/svgs/socialmedia/telegram.svg b/web-devtools/src/assets/svgs/socialmedia/telegram.svg deleted file mode 100644 index 22e46b18a..000000000 --- a/web-devtools/src/assets/svgs/socialmedia/telegram.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_7753_5195)"> -<path d="M16.5506 2.19725L14.1361 13.3562C13.9539 14.1438 13.4789 14.3398 12.8038 13.9688L9.12494 11.3121L7.34978 12.9852C7.15334 13.1777 6.98903 13.3387 6.61043 13.3387L6.87474 9.66692L13.6932 3.62888C13.9897 3.36985 13.6289 3.22634 13.2324 3.48536L4.80313 8.68683L1.17423 7.57373C0.384875 7.33221 0.370588 6.80016 1.33853 6.42913L15.5327 1.07015C16.1899 0.828628 16.7649 1.21366 16.5506 2.19725Z"/> -</g> -<defs> -<clipPath id="clip0_7753_5195"> -<rect width="16" height="16" fill="white" transform="translate(0.596191 0.00012207)"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/assets/svgs/socialmedia/x.svg b/web-devtools/src/assets/svgs/socialmedia/x.svg deleted file mode 100644 index e9faf4183..000000000 --- a/web-devtools/src/assets/svgs/socialmedia/x.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M12.9207 2.00012H15.127L10.3082 7.50637L15.977 15.0001H11.5395L8.06133 10.4564L4.08633 15.0001H1.87695L7.03008 9.1095L1.5957 2.00012H6.1457L9.28633 6.15325L12.9207 2.00012ZM12.1457 13.6814H13.3676L5.48008 3.25012H4.16758L12.1457 13.6814Z"/> -</svg> diff --git a/web-devtools/src/assets/svgs/socialmedia/youtube.svg b/web-devtools/src/assets/svgs/socialmedia/youtube.svg deleted file mode 100644 index 6411254ea..000000000 --- a/web-devtools/src/assets/svgs/socialmedia/youtube.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_22197_18763)"> -<path d="M16.2619 3.78224C16.0778 3.08071 15.5357 2.52821 14.8473 2.34071C13.5995 2 8.59619 2 8.59619 2C8.59619 2 3.59288 2 2.3451 2.34071C1.65671 2.52824 1.11454 3.08071 0.930527 3.78224C0.596191 5.05381 0.596191 7.70681 0.596191 7.70681C0.596191 7.70681 0.596191 10.3598 0.930527 11.6314C1.11454 12.3329 1.65671 12.8624 2.3451 13.0499C3.59288 13.3906 8.59619 13.3906 8.59619 13.3906C8.59619 13.3906 13.5995 13.3906 14.8473 13.0499C15.5357 12.8624 16.0778 12.3329 16.2619 11.6314C16.5962 10.3598 16.5962 7.70681 16.5962 7.70681C16.5962 7.70681 16.5962 5.05381 16.2619 3.78224ZM6.95982 10.1155V5.29809L11.1416 7.70687L6.95982 10.1155Z"/> -</g> -<defs> -<clipPath id="clip0_22197_18763"> -<rect width="16" height="16" transform="translate(0.596191)"/> -</clipPath> -</defs> -</svg> diff --git a/web-devtools/src/components/ConnectWallet/index.tsx b/web-devtools/src/components/ConnectWallet/index.tsx deleted file mode 100644 index ff9364429..000000000 --- a/web-devtools/src/components/ConnectWallet/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React, { useCallback, useState } from "react"; - -import { useAppKit, useAppKitState } from "@reown/appkit/react"; -import { useAccount, useSwitchChain } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { SUPPORTED_CHAINS, DEFAULT_CHAIN } from "consts/chains"; - -export const SwitchChainButton: React.FC<{ className?: string }> = ({ className }) => { - const { switchChain, isPending } = useSwitchChain(); - const [, setError] = useState<string | null>(null); - const handleSwitch = useCallback(() => { - if (!switchChain) { - setError("Cannot switch network. Please do it manually."); - return; - } - try { - switchChain({ chainId: DEFAULT_CHAIN }); - } catch (err) { - setError(err as string); - } - }, [switchChain, setError]); - return ( - <Button - {...{ className }} - isLoading={isPending} - disabled={isPending} - text={`Switch to ${SUPPORTED_CHAINS[DEFAULT_CHAIN].name}`} - onClick={handleSwitch} - /> - ); -}; - -const ConnectButton: React.FC<{ className?: string }> = ({ className }) => { - const { open } = useAppKit(); - const { open: isOpen } = useAppKitState(); - return ( - <Button - {...{ className }} - disabled={isOpen} - small - text={"Connect"} - onClick={async () => open({ view: "Connect" })} - /> - ); -}; - -const ConnectWallet: React.FC<{ className?: string }> = ({ className }) => { - const { isConnected, chainId } = useAccount(); - - if (isConnected && chainId !== DEFAULT_CHAIN) { - return <SwitchChainButton {...{ className }} />; - } else return <ConnectButton {...{ className }} />; -}; - -export default ConnectWallet; diff --git a/web-devtools/src/components/EnsureChain.tsx b/web-devtools/src/components/EnsureChain.tsx deleted file mode 100644 index 447863ebd..000000000 --- a/web-devtools/src/components/EnsureChain.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React, { useEffect, useState } from "react"; - -import { useAccount } from "wagmi"; - -import { DEFAULT_CHAIN } from "consts/chains"; - -import ConnectWallet from "components/ConnectWallet"; - -interface IEnsureChain { - children: React.ReactElement; - className?: string; -} - -export const EnsureChain: React.FC<IEnsureChain> = ({ children, className }) => { - const { chainId } = useAccount(); - const [isClient, setIsClient] = useState(false); - - // hydration error workaround, in server pre-render chainId is undefined so it mismatches with the client's initial render - useEffect(() => setIsClient(true), []); - - if (!isClient) return children; - - return chainId === DEFAULT_CHAIN ? children : <ConnectWallet {...{ className }} />; -}; diff --git a/web-devtools/src/components/HeroImage.tsx b/web-devtools/src/components/HeroImage.tsx deleted file mode 100644 index daddd108e..000000000 --- a/web-devtools/src/components/HeroImage.tsx +++ /dev/null @@ -1,31 +0,0 @@ -"use client"; -import React, { useEffect, useState } from "react"; - -import HeroDarkDesktop from "svgs/hero/hero-darkmode-desktop.svg"; -import HeroDarkMobile from "svgs/hero/hero-darkmode-mobile.svg"; - -import useIsDesktop from "hooks/useIsDesktop"; - -const HeroImage = () => { - const [isMounted, setIsMounted] = useState(false); - const isDesktop = useIsDesktop(); - useEffect(() => { - setIsMounted(true); - }, []); - - if (!isMounted) { - return <HeroDesktop />; - } - - return <div>{isDesktop ? <HeroDesktop /> : <HeroMobile />}</div>; -}; - -const HeroDesktop: React.FC = () => { - return <HeroDarkDesktop />; -}; - -const HeroMobile: React.FC = () => { - return <HeroDarkMobile />; -}; - -export default HeroImage; diff --git a/web-devtools/src/components/JSONEditor.tsx b/web-devtools/src/components/JSONEditor.tsx deleted file mode 100644 index 1baa82d37..000000000 --- a/web-devtools/src/components/JSONEditor.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import React, { useEffect, useRef } from "react"; -import styled, { css } from "styled-components"; - -import { - createJSONEditor, - type JSONEditorPropsOptional, - type JsonEditor as VanillaJsonEditor, -} from "vanilla-jsoneditor"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -const Container = styled.div` - width: 100%; - height: calc(100vh - 180px); - - --text-color: ${({ theme }) => theme.klerosUIComponentsPrimaryText}; - --jse-text-readonly: ${({ theme }) => theme.klerosUIComponentsPrimaryText}; - --jse-theme-color: ${({ theme }) => theme.klerosUIComponentsPrimaryPurple}; - --jse-background-color: ${({ theme }) => theme.klerosUIComponentsWhiteBackground}; - --jse-panel-background: ${({ theme }) => theme.klerosUIComponentsHoveredShadow}; - --jse-theme-color-highlight: ${({ theme }) => theme.klerosUIComponentsLightPurple}; - --jse-value-color-string: ${({ theme }) => theme.klerosUIComponentsPrimaryText}; - --jse-value-color-number: ${({ theme }) => theme.klerosUIComponentsPrimaryBlue}; - --jse-value-color-null: ${({ theme }) => theme.klerosUIComponentsError}; - --jse-main-border: 1px solid ${({ theme }) => theme.klerosUIComponentsStroke}; - --jse-key-color: ${({ theme }) => theme.klerosUIComponentsTint}; - --jse-value-color: ${({ theme }) => theme.klerosUIComponentsSuccess}; - --jse-delimiter-color: ${({ theme }) => theme.klerosUIComponentsPrimaryText}; - .cm-gutter-lint { - width: 0.6em; - } - ${landscapeStyle( - () => css` - width: 30vw; - height: calc(100vh - 300px); - ` - )} -`; - -const JSONEditor = (props: any) => { - const refContainer = useRef<HTMLDivElement | null>(null); - const refEditor = useRef<VanillaJsonEditor | null>(null); - const refPrevProps = useRef<JSONEditorPropsOptional>(props); - - useEffect(() => { - refEditor.current = createJSONEditor({ - target: refContainer.current as HTMLDivElement, - props, - }); - - return () => { - if (refEditor.current) { - refEditor.current.destroy(); - refEditor.current = null; - } - }; - }, []); - - // update props - useEffect(() => { - if (refEditor.current) { - const changedProps = filterUnchangedProps(props, refPrevProps.current); - refEditor.current.updateProps(changedProps); - refPrevProps.current = props; - } - }, [props]); - - return <Container ref={refContainer} className={props.className}></Container>; -}; - -function filterUnchangedProps( - props: JSONEditorPropsOptional, - prevProps: JSONEditorPropsOptional -): JSONEditorPropsOptional { - return Object.fromEntries( - Object.entries(props).filter(([key, value]) => value !== prevProps[key as keyof JSONEditorPropsOptional]) - ); -} - -export default JSONEditor; diff --git a/web-devtools/src/components/LabeledInput.tsx b/web-devtools/src/components/LabeledInput.tsx deleted file mode 100644 index e569f08ce..000000000 --- a/web-devtools/src/components/LabeledInput.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import React, { useLayoutEffect, useRef, useState } from "react"; -import styled, { css } from "styled-components"; - -import { Checkbox, Field, type CheckboxProps, type FieldProps } from "@kleros/ui-components-library"; - -const Container = styled.div` - display: flex; - align-items: center; - width: 280px; - max-width: 280px; - height: 46px; - position: relative; - box-sizing: border-box; -`; - -const ContainerCss = css` - flex: 1; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - border: 1px solid ${({ theme }) => theme.klerosUIComponentsStroke}; -`; - -const LabelContainer = styled.div<{ isField?: boolean }>` - ${ContainerCss} - border-radius: 3px 0px 0px 3px; - background-color: ${({ theme }) => theme.klerosUIComponentsLightBackground}; - ${({ isField }) => - isField && - css` - width: 50%; - height: 45px; - position: absolute; - top: 0.5px; - left: 0.5px; - z-index: 1; - `} -`; - -const Label = styled.label` - color: ${({ theme }) => theme.klerosUIComponentsPrimaryText}; -`; - -const InputContainer = styled.div<{ isField?: boolean }>` - ${ContainerCss} - position: relative; - border-radius: 0px 3px 3px 0px; - border-left: none; - background-color: ${({ theme }) => theme.klerosUIComponentsWhiteBackground}; - ${({ isField }) => - isField && - css` - width: 100%; - z-index: 0; - border-radius: 3px; - `} -`; - -const StyledField = styled(Field)<{ paddingLeft?: number }>` - width: 100%; - > input { - border: none; - box-sizing: border-box; - ${({ paddingLeft = 0 }) => - paddingLeft && - css` - padding-left: ${paddingLeft + 8}px; - `} - } -`; - -const StyledCheckbox = styled(Checkbox)` - height: 24px; - width: 24px; - padding: 0; -`; - -type BaseProps = { - inputType?: "field" | "checkbox"; - label: string; -}; - -type CheckboxInputProps = CheckboxProps & { inputType: "checkbox" }; -type DefaultInputProps = FieldProps & { inputType?: "field" }; - -type LabeledInputProps = BaseProps & (CheckboxInputProps | DefaultInputProps); - -const LabeledInput: React.FC<LabeledInputProps> = ({ inputType = "field", label, ...props }) => { - const labelRef = useRef<HTMLDivElement>(null); - const [labelWidth, setLabelWidth] = useState(0); - useLayoutEffect(() => { - if (labelRef.current) { - setLabelWidth(labelRef.current.offsetWidth); - } - }, []); - return ( - <Container> - <LabelContainer ref={labelRef} isField={inputType === "field"}> - <Label>{label}</Label> - </LabelContainer> - <InputContainer isField={inputType === "field"}> - {inputType === "field" && <StyledField {...props} paddingLeft={labelWidth} />} - {inputType === "checkbox" && <StyledCheckbox label="&nbsp;" {...props} />} - </InputContainer> - </Container> - ); -}; - -export default LabeledInput; diff --git a/web-devtools/src/components/LightButton.tsx b/web-devtools/src/components/LightButton.tsx deleted file mode 100644 index 2aada2445..000000000 --- a/web-devtools/src/components/LightButton.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { Button } from "@kleros/ui-components-library"; - -const StyledButton = styled(Button)` - .button-text { - font-weight: 400; - } - .button-svg { - fill: ${({ theme }) => theme.klerosUIComponentsSecondaryPurple}; - } -`; - -interface ILightButton { - text: string; - Icon?: React.FC<React.SVGAttributes<SVGElement>>; - onClick?: React.MouseEventHandler<HTMLButtonElement>; - disabled?: boolean; - className?: string; -} - -const LightButton: React.FC<ILightButton> = ({ text, Icon, onClick, disabled, className }) => ( - <StyledButton variant="primary" small {...{ text, Icon, onClick, disabled, className }} /> -); - -export default LightButton; diff --git a/web-devtools/src/components/ReactMarkdown.tsx b/web-devtools/src/components/ReactMarkdown.tsx deleted file mode 100644 index 68b561977..000000000 --- a/web-devtools/src/components/ReactMarkdown.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import Reactmkdwn from "react-markdown"; - -const StyledMarkdown = styled(Reactmkdwn)` - font-size: 16px; -`; - -const ReactMarkdown: React.FC<{ children: string }> = ({ children }) => { - if (!children) { - return <div>No content available</div>; - } - try { - return <StyledMarkdown>{children}</StyledMarkdown>; - } catch { - return <div>Error rendering content</div>; - } -}; - -export default ReactMarkdown; diff --git a/web-devtools/src/components/WithHelpTooltip.tsx b/web-devtools/src/components/WithHelpTooltip.tsx deleted file mode 100644 index 7f0524a17..000000000 --- a/web-devtools/src/components/WithHelpTooltip.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { Tooltip } from "@kleros/ui-components-library"; - -import _HelpIcon from "svgs/icons/help.svg"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -const Container = styled.div` - display: flex; - align-items: center; -`; - -const HelpIcon = styled(_HelpIcon)` - display: flex; - align-items: center; - height: 12px; - width: 12px; - fill: ${({ theme }) => theme.klerosUIComponentsSecondaryText}; - margin: 0 0 0 8px; - - ${landscapeStyle( - () => css` - height: 14px; - width: 14px; - ` - )} -`; - -interface IWithHelpTooltip { - tooltipMsg: string; - place?: "bottom" | "left" | "right" | "top"; - children?: React.ReactNode; -} - -const WithHelpTooltip: React.FC<IWithHelpTooltip> = ({ tooltipMsg, children, place }) => ( - <Container> - {children} - <Tooltip small text={tooltipMsg} {...{ place }}> - <HelpIcon /> - </Tooltip> - </Container> -); - -export default WithHelpTooltip; diff --git a/web-devtools/src/consts/arbitratorTypes.ts b/web-devtools/src/consts/arbitratorTypes.ts deleted file mode 100644 index 6c99041fe..000000000 --- a/web-devtools/src/consts/arbitratorTypes.ts +++ /dev/null @@ -1,8 +0,0 @@ -export enum ArbitratorTypes { - vanilla, - university, - neo, -} - -export const getArbitratorType = (id: keyof typeof ArbitratorTypes = "vanilla" as const): ArbitratorTypes => - ArbitratorTypes[id]; diff --git a/web-devtools/src/consts/chains.ts b/web-devtools/src/consts/chains.ts deleted file mode 100644 index 49864d02c..000000000 --- a/web-devtools/src/consts/chains.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { mainnet, arbitrumSepolia, gnosisChiado, arbitrum, gnosis, type AppKitNetwork } from "@reown/appkit/networks"; - -import { isProductionDeployment } from "./index"; - -export const DEFAULT_CHAIN = isProductionDeployment() ? arbitrum.id : arbitrumSepolia.id; - -export const SUPPORTED_CHAINS: Record<number, AppKitNetwork> = { - [isProductionDeployment() ? arbitrum.id : arbitrumSepolia.id]: isProductionDeployment() ? arbitrum : arbitrumSepolia, -}; - -export const QUERY_CHAINS: Record<number, AppKitNetwork> = { - [isProductionDeployment() ? gnosis.id : gnosisChiado.id]: isProductionDeployment() ? gnosis : gnosisChiado, - [mainnet.id]: mainnet, -}; - -export const ALL_CHAINS = [...Object.values(SUPPORTED_CHAINS), ...Object.values(QUERY_CHAINS)]; diff --git a/web-devtools/src/consts/index.ts b/web-devtools/src/consts/index.ts deleted file mode 100644 index f66cff574..000000000 --- a/web-devtools/src/consts/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -export const isProductionDeployment = () => process.env.NEXT_PUBLIC_DEPLOYMENT === "mainnet"; - -export const IPFS_GATEWAY = process.env.NEXT_PUBLIC_IPFS_GATEWAY || "https://cdn.kleros.link"; - -export const INVALID_DISPUTE_DATA_ERROR = `The dispute data is not valid, please vote "Refuse to arbitrate"`; -export const RPC_ERROR = `RPC Error: Unable to fetch dispute data. Please avoid voting.`; - -export enum RULING_MODE { - Uninitialized, - Manual, - AutomaticRandom, - AutomaticPreset, -} diff --git a/web-devtools/src/consts/socialmedia.tsx b/web-devtools/src/consts/socialmedia.tsx deleted file mode 100644 index 2318054d1..000000000 --- a/web-devtools/src/consts/socialmedia.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React from "react"; - -import DiscordLogo from "svgs/socialmedia/discord.svg"; -import GithubLogo from "svgs/socialmedia/github.svg"; -import LinkedinLogo from "svgs/socialmedia/linkedin.svg"; -import YouTubeLogo from "svgs/socialmedia/youtube.svg"; -import TelegramLogo from "svgs/socialmedia/telegram.svg"; -import XLogo from "svgs/socialmedia/x.svg"; - -export const socialmedia = { - telegram: { - icon: <TelegramLogo />, - url: "https://t.me/kleros", - }, - x: { - icon: <XLogo />, - url: "https://x.com/kleros_io", - }, - discord: { - icon: <DiscordLogo />, - url: "https://discord.com/invite/MhXQGCyHd9", - }, - youtube: { - icon: <YouTubeLogo />, - url: "https://youtube.com/@kleros_io", - }, - github: { - icon: <GithubLogo />, - url: "https://github.com/kleros", - }, - linkedin: { - icon: <LinkedinLogo />, - url: "https://www.linkedin.com/company/kleros/", - }, -}; diff --git a/web-devtools/src/context/GraphqlBatcher.tsx b/web-devtools/src/context/GraphqlBatcher.tsx deleted file mode 100644 index 74260761c..000000000 --- a/web-devtools/src/context/GraphqlBatcher.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React, { useMemo, createContext, useContext } from "react"; - -import { TypedDocumentNode } from "@graphql-typed-document-node/core"; -import { create, windowedFiniteBatchScheduler, type Batcher } from "@yornaath/batshit"; -import { request } from "graphql-request"; - -import { debounceErrorToast } from "utils/debounceErrorToast"; -import { getGraphqlUrl } from "utils/getGraphqlUrl"; - -interface IGraphqlBatcher { - graphqlBatcher: Batcher<any, IQuery>; -} - -interface IQuery { - id: string; - document: TypedDocumentNode<any, any>; - variables: Record<string, any>; - isDisputeTemplate?: boolean; - chainId?: number; -} - -const Context = createContext<IGraphqlBatcher | undefined>(undefined); - -const fetcher = async (queries: IQuery[]) => { - const promises = queries.map(async ({ id, document, variables, isDisputeTemplate, chainId }) => { - const url = getGraphqlUrl(isDisputeTemplate ?? false, chainId); - try { - return request(url, document, variables).then((result) => ({ id, result })); - } catch (error) { - console.error("Graph error: ", { error, query: { id, document, variables, isDisputeTemplate, chainId } }); - debounceErrorToast("Graph query error: failed to fetch data."); - return { id, result: {} }; - } - }); - const data = await Promise.all(promises); - return data; -}; - -const GraphqlBatcherProvider: React.FC<{ children?: React.ReactNode }> = ({ children }) => { - const graphqlBatcher = create({ - fetcher, - resolver: (results, query) => results.find((result) => result.id === query.id)!["result"], - scheduler: windowedFiniteBatchScheduler({ - windowMs: 100, - maxBatchSize: 5, - }), - }); - return <Context.Provider value={useMemo(() => ({ graphqlBatcher }), [graphqlBatcher])}>{children}</Context.Provider>; -}; - -export const useGraphqlBatcher = () => { - const context = useContext(Context); - if (!context) { - throw new Error("Context Provider not found."); - } - return context; -}; - -export default GraphqlBatcherProvider; diff --git a/web-devtools/src/context/RulerContext.tsx b/web-devtools/src/context/RulerContext.tsx deleted file mode 100644 index 148b9e332..000000000 --- a/web-devtools/src/context/RulerContext.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react"; - -import { type Address, isAddress } from "viem"; - -import { RULING_MODE } from "consts"; - -import { useReadKlerosCoreRulerRulers, useReadKlerosCoreRulerSettings } from "hooks/contracts/generated"; -import { useLocalStorage } from "hooks/useLocalStorage"; -import { isUndefined } from "utils/isUndefined"; - -const REFETCH_INTERVAL = 5000; - -type ArbitrableSettings = { - rulingMode: RULING_MODE; - ruling: number; - tied: boolean; - overridden: boolean; -}; - -interface IRulerContext { - arbitrable?: Address; - setArbitrable: (arbitrable: Address) => void; - arbitrableSettings?: ArbitrableSettings; - currentDeveloper?: Address; - refetchData: () => void; - knownArbitrables: string[]; -} -const RulerContext = createContext<IRulerContext | undefined>(undefined); - -const RulerContextProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { - const [arbitrable, setArbitrable] = useState<Address>(); - const [arbitrableSettings, setArbitrableSettings] = useState<ArbitrableSettings>(); - const [knownArbitrables, setKnownArbitrables] = useLocalStorage<string[]>("knownArbitrables", []); - - const { data: currentDeveloper, refetch: refetchDeveloper } = useReadKlerosCoreRulerRulers({ - query: { - enabled: !isUndefined(arbitrable), - refetchInterval: REFETCH_INTERVAL, - }, - args: [(arbitrable ?? "") as `0x${string}`], - }); - - const { data: arbitrableSettingsData, refetch: refetchArbitrableSettings } = useReadKlerosCoreRulerSettings({ - query: { - enabled: !isUndefined(arbitrable), - refetchInterval: REFETCH_INTERVAL, - }, - args: [(arbitrable ?? "") as `0x${string}`], - }); - - useEffect(() => { - if (!arbitrableSettingsData) return; - const [rulingMode, rulingRaw, tied, overridden] = arbitrableSettingsData; - setArbitrableSettings({ - rulingMode, - ruling: Number(rulingRaw), - tied, - overridden, - }); - }, [arbitrableSettingsData]); - - useEffect(() => { - if (isUndefined(arbitrable) || !isAddress(arbitrable) || knownArbitrables.includes(arbitrable?.toLowerCase())) - return; - - setKnownArbitrables([...knownArbitrables, arbitrable?.toLowerCase()]); - }, [arbitrable, knownArbitrables]); - - const refetchData = useCallback(() => { - refetchArbitrableSettings(); - refetchDeveloper(); - }, [refetchArbitrableSettings, refetchDeveloper]); - - return ( - <RulerContext.Provider - value={useMemo( - () => ({ - arbitrable, - setArbitrable, - arbitrableSettings, - currentDeveloper, - refetchData, - knownArbitrables, - }), - [arbitrable, arbitrableSettings, currentDeveloper, refetchData, knownArbitrables] - )} - > - {children} - </RulerContext.Provider> - ); -}; - -export const useRulerContext = () => { - const context = useContext(RulerContext); - if (!context) { - throw new Error("Context Provider not found."); - } - return context; -}; - -export default RulerContextProvider; diff --git a/web-devtools/src/context/StyledComponentsProvider.tsx b/web-devtools/src/context/StyledComponentsProvider.tsx deleted file mode 100644 index 4b51191ad..000000000 --- a/web-devtools/src/context/StyledComponentsProvider.tsx +++ /dev/null @@ -1,20 +0,0 @@ -"use client"; -import React from "react"; -import { ThemeProvider } from "styled-components"; - -import { theme } from "styles/Theme"; - -import { GlobalStyle } from "styles/global-style"; - -const StyledComponentsProvider: React.FC<{ - children: React.ReactNode; -}> = ({ children }) => { - return ( - <ThemeProvider theme={theme}> - <GlobalStyle /> - {children} - </ThemeProvider> - ); -}; - -export default StyledComponentsProvider; diff --git a/web-devtools/src/context/StyledComponentsRegistry.tsx b/web-devtools/src/context/StyledComponentsRegistry.tsx deleted file mode 100644 index 70b36c5d8..000000000 --- a/web-devtools/src/context/StyledComponentsRegistry.tsx +++ /dev/null @@ -1,22 +0,0 @@ -"use client"; -import React, { useState } from "react"; -import { ServerStyleSheet, StyleSheetManager } from "styled-components"; - -import { useServerInsertedHTML } from "next/navigation"; - -const StyledComponentsRegistry = ({ children }: { children: React.ReactNode }) => { - // Only create stylesheet once with lazy initial state - // x-ref: https://reactjs.org/docs/hooks-reference.html#lazy-initial-state - const [styledComponentsStyleSheet] = useState(() => new ServerStyleSheet()); - - useServerInsertedHTML(() => { - const styles = styledComponentsStyleSheet.getStyleElement(); - styledComponentsStyleSheet.instance.clearTag(); - return <>{styles}</>; - }); - - if (typeof window !== "undefined") return <>{children}</>; - - return <StyleSheetManager sheet={styledComponentsStyleSheet.instance}>{children}</StyleSheetManager>; -}; -export default StyledComponentsRegistry; diff --git a/web-devtools/src/context/Web3Provider.tsx b/web-devtools/src/context/Web3Provider.tsx deleted file mode 100644 index 9b99e12c5..000000000 --- a/web-devtools/src/context/Web3Provider.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React from "react"; - -import { type Chain } from "viem"; -import { fallback, http, WagmiProvider, webSocket } from "wagmi"; -import { mainnet, arbitrumSepolia, arbitrum, gnosisChiado, sepolia, gnosis } from "@reown/appkit/networks"; - -import { configureSDK } from "@kleros/kleros-sdk/src/sdk"; - -import { ALL_CHAINS, DEFAULT_CHAIN } from "consts/chains"; -import { isProductionDeployment } from "consts/index"; -import { createAppKit } from "@reown/appkit/react"; -import { WagmiAdapter } from "@reown/appkit-adapter-wagmi"; -import { theme } from "styles/Theme"; - -const alchemyApiKey = process.env.NEXT_PUBLIC_ALCHEMY_API_KEY; -if (!alchemyApiKey) { - throw new Error("Alchemy API key is not set in NEXT_PUBLIC_ALCHEMY_API_KEY environment variable."); -} - -const isProduction = isProductionDeployment(); - -// https://github.com/alchemyplatform/alchemy-sdk-js/blob/c4440cb/src/types/types.ts#L98-L153 -const alchemyToViemChain: Record<number, string> = { - [arbitrumSepolia.id]: "arb-sepolia", - [arbitrum.id]: "arb-mainnet", - [mainnet.id]: "eth-mainnet", - [sepolia.id]: "eth-sepolia", - [gnosis.id]: "gnosis-mainnet", - [gnosisChiado.id]: "gnosis-chiado", -}; - -type AlchemyProtocol = "https" | "wss"; - -// https://github.com/alchemyplatform/alchemy-sdk-js/blob/c4440cb/src/util/const.ts#L16-L18 -function alchemyURL(protocol: AlchemyProtocol, chainId: number): string { - const network = alchemyToViemChain[chainId]; - if (!network) { - throw new Error(`Unsupported chain ID: ${chainId}`); - } - return `${protocol}://${network}.g.alchemy.com/v2/${alchemyApiKey}`; -} - -export const getChainRpcUrl = (protocol: AlchemyProtocol, chainId: number) => { - return alchemyURL(protocol, chainId); -}; - -export const getDefaultChainRpcUrl = (protocol: AlchemyProtocol) => { - return getChainRpcUrl(protocol, DEFAULT_CHAIN); -}; - -export const getTransports = () => { - const alchemyTransport = (chain: Chain) => - fallback([http(alchemyURL("https", chain.id)), webSocket(alchemyURL("wss", chain.id))]); - const defaultTransport = (chain: Chain) => - fallback([http(chain.rpcUrls.default?.http?.[0]), webSocket(chain.rpcUrls.default?.webSocket?.[0])]); - - return { - [isProduction ? arbitrum.id : arbitrumSepolia.id]: isProduction - ? alchemyTransport(arbitrum) - : alchemyTransport(arbitrumSepolia), - [isProduction ? gnosis.id : gnosisChiado.id]: isProduction - ? defaultTransport(gnosis) - : defaultTransport(gnosisChiado), - [mainnet.id]: alchemyTransport(mainnet), // Always enabled for ENS resolution - }; -}; - -const chains = ALL_CHAINS as [Chain, ...Chain[]]; -const transports = getTransports(); - -const projectId = process.env.NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID; -if (!projectId) { - throw new Error("WalletConnect project ID is not set in NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID environment variable."); -} - -export const wagmiAdapter = new WagmiAdapter({ - networks: chains, - projectId, - transports, -}); - -configureSDK({ - client: { - chain: isProduction ? arbitrum : arbitrumSepolia, - transport: transports[isProduction ? arbitrum.id : arbitrumSepolia.id], - }, -}); - -createAppKit({ - adapters: [wagmiAdapter], - networks: chains, - defaultNetwork: isProduction ? arbitrum : arbitrumSepolia, - projectId, - themeVariables: { - "--w3m-color-mix": theme.klerosUIComponentsPrimaryPurple, - "--w3m-color-mix-strength": 20, - }, -}); -const Web3Provider: React.FC<{ children: React.ReactNode }> = ({ children }) => { - return <WagmiProvider config={wagmiAdapter.wagmiConfig}> {children} </WagmiProvider>; -}; - -export default Web3Provider; diff --git a/web-devtools/src/hooks/queries/useDisputeTemplateFromId.ts b/web-devtools/src/hooks/queries/useDisputeTemplateFromId.ts deleted file mode 100644 index 74f98ea1e..000000000 --- a/web-devtools/src/hooks/queries/useDisputeTemplateFromId.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; -import { isUndefined } from "utils/isUndefined"; - -import { graphql } from "src/graphql-generated"; -import { DisputeTemplateQuery } from "src/graphql-generated/graphql"; -import { isEmpty } from "utils/isEmpty"; - -const disputeTemplateQuery = graphql(` - query DisputeTemplate($id: ID!) { - disputeTemplate(id: $id) { - id - templateTag - templateData - templateDataMappings - } - } -`); - -export const useDisputeTemplateFromId = (templateId?: string) => { - const isEnabled = !isUndefined(templateId) && !isEmpty(templateId); - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<DisputeTemplateQuery>({ - queryKey: [`disputeTemplate${templateId}`], - enabled: isEnabled, - staleTime: Infinity, - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: disputeTemplateQuery, - variables: { id: templateId?.toString() }, - isDisputeTemplate: true, - }), - }); -}; diff --git a/web-devtools/src/hooks/useIsDesktop.tsx b/web-devtools/src/hooks/useIsDesktop.tsx deleted file mode 100644 index 1ff105d51..000000000 --- a/web-devtools/src/hooks/useIsDesktop.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { useMemo } from "react"; - -import { useWindowSize } from "react-use"; - -import { BREAKPOINT_LANDSCAPE } from "styles/landscapeStyle"; - -const useIsDesktop = () => { - const { width } = useWindowSize(); - return useMemo(() => width > BREAKPOINT_LANDSCAPE, [width]); -}; - -export default useIsDesktop; diff --git a/web-devtools/src/hooks/useLocalStorage.ts b/web-devtools/src/hooks/useLocalStorage.ts deleted file mode 100644 index d83f7bebf..000000000 --- a/web-devtools/src/hooks/useLocalStorage.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { useState } from "react"; - -export function useLocalStorage<T>(keyName: string, defaultValue: T) { - const [storedValue, setStoredValue] = useState(() => { - try { - const value = window.localStorage.getItem(keyName); - return value ? JSON.parse(value) : defaultValue; - } catch { - return defaultValue; - } - }); - - const setValue = (newValue: T) => { - try { - window.localStorage.setItem(keyName, JSON.stringify(newValue)); - } finally { - setStoredValue(newValue); - } - }; - - return [storedValue, setValue]; -} diff --git a/web-devtools/src/layout/Footer/index.tsx b/web-devtools/src/layout/Footer/index.tsx deleted file mode 100644 index e43422d9f..000000000 --- a/web-devtools/src/layout/Footer/index.tsx +++ /dev/null @@ -1,76 +0,0 @@ -"use client"; -import React from "react"; -import styled, { css } from "styled-components"; - -import SecuredByKlerosLogo from "svgs/footer/secured-by-kleros.svg"; - -import { socialmedia } from "consts/socialmedia"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -const Container = styled.div` - height: 122px; - width: 100%; - background-color: ${({ theme }) => theme.klerosUIComponentsPrimaryPurple}; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - padding: 0 32px 8px 32px; - gap: 24px; - - ${landscapeStyle( - () => css` - height: 64px; - flex-direction: row; - justify-content: space-between; - padding-bottom: 0; - ` - )} - - .secured-by-kleros { - min-height: 24px; - } - - .socialmedia { - display: flex; - gap: 16px; - justify-content: center; - - a { - display: inline-block; - svg { - height: 16px; - width: 16px; - max-height: 16px; - max-width: 16px; - fill: white; - } - } - } -`; - -const SecuredByKleros: React.FC = () => ( - <a className="secured-by-kleros" href="https://kleros.io" target="_blank" rel="noreferrer"> - <SecuredByKlerosLogo /> - </a> -); - -const SocialMedia = () => ( - <div className="socialmedia"> - {Object.values(socialmedia).map((site, i) => ( - <a key={i} href={site.url} target="_blank" rel="noreferrer"> - {site.icon} - </a> - ))} - </div> -); - -const Footer: React.FC = () => ( - <Container> - <SecuredByKleros /> - <SocialMedia /> - </Container> -); - -export default Footer; diff --git a/web-devtools/src/layout/Header/DesktopHeader.tsx b/web-devtools/src/layout/Header/DesktopHeader.tsx deleted file mode 100644 index 6554626c4..000000000 --- a/web-devtools/src/layout/Header/DesktopHeader.tsx +++ /dev/null @@ -1,53 +0,0 @@ -"use-client"; -import React from "react"; -import styled, { css } from "styled-components"; - -import KlerosDevtoolsLogo from "svgs/header/devtools-logo.svg"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import Explore from "./navbar/Explore"; - -const Container = styled.div` - display: none; - position: absolute; - - ${landscapeStyle( - () => css` - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - position: relative; - ` - )}; -`; - -const LeftSide = styled.div` - display: flex; -`; - -const MiddleSide = styled.div` - display: flex; - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - color: ${({ theme }) => theme.klerosUIComponentsWhite} !important; -`; - -const DesktopHeader: React.FC = () => { - return ( - <> - <Container> - <LeftSide> - <KlerosDevtoolsLogo /> - </LeftSide> - <MiddleSide> - <Explore /> - </MiddleSide> - </Container> - </> - ); -}; -export default DesktopHeader; diff --git a/web-devtools/src/layout/Header/MobileHeader.tsx b/web-devtools/src/layout/Header/MobileHeader.tsx deleted file mode 100644 index 7abd02c50..000000000 --- a/web-devtools/src/layout/Header/MobileHeader.tsx +++ /dev/null @@ -1,74 +0,0 @@ -"use client"; -import React, { useContext, useMemo, useRef, createContext } from "react"; -import styled, { css } from "styled-components"; - -import Link from "next/link"; -import { useClickAway, useToggle } from "react-use"; - -import KlerosDevtoolsLogo from "svgs/header/devtools-logo.svg"; -import HamburgerIcon from "svgs/header/hamburger.svg"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import LightButton from "components/LightButton"; - -import NavBar from "./navbar"; - -const Container = styled.div` - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - - ${landscapeStyle( - () => css` - display: none; - ` - )} -`; -const StyledLightButton = styled(LightButton)` - padding: 0; - background-color: transparent; - :hover { - background-color: transparent; - } - - .button-svg { - margin-right: 0px; - fill: white; - } - .button-text { - display: none; - } -`; - -const OpenContext = createContext({ - isOpen: false, - toggleIsOpen: () => { - // Placeholder - }, -}); - -export function useOpenContext() { - return useContext(OpenContext); -} - -const MobileHeader: React.FC = () => { - const [isOpen, toggleIsOpen] = useToggle(false); - const containerRef = useRef(null); - useClickAway(containerRef, () => toggleIsOpen(false)); - const memoizedContext = useMemo(() => ({ isOpen, toggleIsOpen }), [isOpen, toggleIsOpen]); - return ( - <Container ref={containerRef}> - <OpenContext.Provider value={memoizedContext}> - <Link href="/"> - <KlerosDevtoolsLogo /> - </Link> - <NavBar /> - <StyledLightButton text="" Icon={HamburgerIcon} onClick={toggleIsOpen} /> - </OpenContext.Provider> - </Container> - ); -}; - -export default MobileHeader; diff --git a/web-devtools/src/layout/Header/index.tsx b/web-devtools/src/layout/Header/index.tsx deleted file mode 100644 index c29bef5e9..000000000 --- a/web-devtools/src/layout/Header/index.tsx +++ /dev/null @@ -1,34 +0,0 @@ -"use client"; -import React from "react"; -import styled from "styled-components"; - -import DesktopHeader from "./DesktopHeader"; -import MobileHeader from "./MobileHeader"; - -const Container = styled.div` - position: sticky; - z-index: 1; - top: 0; - width: 100%; - background-color: ${({ theme }) => theme.klerosUIComponentsPrimaryPurple}; - display: flex; - flex-wrap: wrap; -`; - -const HeaderContainer = styled.div` - width: 100%; - padding: 8px 24px 8px; -`; - -const Header: React.FC = () => { - return ( - <Container> - <HeaderContainer> - <DesktopHeader /> - <MobileHeader /> - </HeaderContainer> - </Container> - ); -}; - -export default Header; diff --git a/web-devtools/src/layout/Header/navbar/Explore.tsx b/web-devtools/src/layout/Header/navbar/Explore.tsx deleted file mode 100644 index 7fd25668a..000000000 --- a/web-devtools/src/layout/Header/navbar/Explore.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import Link from "next/link"; -import { usePathname } from "next/navigation"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { useOpenContext } from "../MobileHeader"; - -const Container = styled.div` - display: flex; - gap: 0px; - flex-direction: column; - - ${landscapeStyle( - () => css` - flex-direction: row; - gap: ${responsiveSize(4, 16)}; - ` - )}; -`; - -const LinkContainer = styled.div` - display: flex; - min-height: 32px; - align-items: center; -`; - -const Title = styled.h1` - display: block; - - ${landscapeStyle( - () => css` - display: none; - ` - )}; -`; - -const StyledLink = styled(Link)<{ $isActive: boolean }>` - color: ${({ theme }) => theme.klerosUIComponentsPrimaryText}; - text-decoration: none; - font-size: 16px; - - font-weight: ${({ $isActive }) => ($isActive ? "600" : "normal")}; - - ${landscapeStyle( - () => css` - color: ${({ theme }) => theme.klerosUIComponentsWhite}; - ` - )}; -`; - -const links = [ - { to: "/", text: "Home" }, - { to: "/dispute-template", text: "Dispute Preview" }, - { to: "/ruler", text: "Configure Ruler" }, -]; - -const Explore: React.FC = () => { - const pathname = usePathname(); - const { toggleIsOpen } = useOpenContext(); - - return ( - <Container> - <Title>Explore</Title> - {links.map(({ to, text }) => ( - <LinkContainer key={text}> - <StyledLink - href={to} - onClick={toggleIsOpen} - $isActive={to === "/" ? pathname === "/" : pathname.startsWith(to)} - > - {text} - </StyledLink> - </LinkContainer> - ))} - </Container> - ); -}; - -export default Explore; diff --git a/web-devtools/src/layout/Header/navbar/index.tsx b/web-devtools/src/layout/Header/navbar/index.tsx deleted file mode 100644 index 07984b35a..000000000 --- a/web-devtools/src/layout/Header/navbar/index.tsx +++ /dev/null @@ -1,59 +0,0 @@ -"use client"; -import React from "react"; -import styled from "styled-components"; - -import { useLockBodyScroll } from "react-use"; - -import { useOpenContext } from "../MobileHeader"; - -import Explore from "./Explore"; - -const Wrapper = styled.div<{ $isOpen: boolean }>` - visibility: ${({ $isOpen }) => ($isOpen ? "visible" : "hidden")}; - position: absolute; - top: 100%; - left: 0; - width: 100vw; - z-index: 30; -`; - -const Container = styled.div<{ $isOpen: boolean }>` - position: absolute; - top: 0; - left: 0; - right: 0; - max-height: calc(100vh - 160px); - overflow-y: auto; - z-index: 1; - background-color: ${({ theme }) => theme.klerosUIComponentsWhiteBackground}; - border: 1px solid ${({ theme }) => theme.klerosUIComponentsStroke}; - box-shadow: 0px 2px 3px ${({ theme }) => theme.klerosUIComponentsDefaultShadow}; - transform-origin: top; - transform: scaleY(${({ $isOpen }) => ($isOpen ? "1" : "0")}); - visibility: ${({ $isOpen }) => ($isOpen ? "visible" : "hidden")}; - transition-property: transform, visibility; - transition-duration: ${({ theme }) => theme.klerosUIComponentsTransitionSpeed}; - transition-timing-function: ease; - padding: 24px; - - hr { - margin: 24px 0; - } -`; - -const NavBar: React.FC = () => { - const { isOpen } = useOpenContext(); - useLockBodyScroll(isOpen); - - return ( - <> - <Wrapper {...{ $isOpen: isOpen }}> - <Container {...{ $isOpen: isOpen }}> - <Explore /> - </Container> - </Wrapper> - </> - ); -}; - -export default NavBar; diff --git a/web-devtools/src/styles/Theme.tsx b/web-devtools/src/styles/Theme.tsx deleted file mode 100644 index 9e8816abd..000000000 --- a/web-devtools/src/styles/Theme.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { darkTheme } from "@kleros/ui-components-library"; - -export const theme = { - ...darkTheme, - klerosUIComponentsSkeletonBackground: "#EBEBEB", - klerosUIComponentsSkeletonHighlight: "#F5F5F5", - klerosUIComponentsVioletPurple: "#6A1DCD", - klerosUIComponentsLavenderPurple: "#BB72FF", - klerosUIComponentsWhite: "#FFFFFF", -}; diff --git a/web-devtools/src/styles/global-style.ts b/web-devtools/src/styles/global-style.ts deleted file mode 100644 index 897b73b0c..000000000 --- a/web-devtools/src/styles/global-style.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { createGlobalStyle } from "styled-components"; - -export const GlobalStyle = createGlobalStyle` - :root { - --toastify-color-info: ${({ theme }) => theme.klerosUIComponentsPrimaryBlue}; - --toastify-color-success: ${({ theme }) => theme.klerosUIComponentsSuccess}; - --toastify-color-warning: ${({ theme }) => theme.klerosUIComponentsWarning}; - --toastify-color-error: ${({ theme }) => theme.klerosUIComponentsError}; - } - - .react-loading-skeleton { - z-index: 0; - --base-color: ${({ theme }) => theme.klerosUIComponentsSkeletonBackground}; - --highlight-color: ${({ theme }) => theme.klerosUIComponentsSkeletonHighlight}; - } - - body { - font-family: "Open Sans", sans-serif; - margin: 0px; - background-color: ${({ theme }) => theme.klerosUIComponentsLightBackground}; - } - - html { - box-sizing: border-box; - } - - *, *:before, *:after { - box-sizing: inherit; - } - - *:focus { - outline: none; - } - - .ReactModal__Overlay { - background-color: #1b003fcc !important; - } - - h1 { - margin: 0 0 16px 0; - font-weight: 600; - font-size: 24px; - line-height: 32px; - color: ${({ theme }) => theme.klerosUIComponentsPrimaryText}; - } - - h2 { - margin: 0 0 16px 0; - font-weight: 400; - font-size: 24px; - line-height: 32px; - color: ${({ theme }) => theme.klerosUIComponentsPrimaryText}; - } - - h3 { - margin: 0 0 16px 0; - font-weight: 600; - font-size: 16px; - line-height: 24px; - color: ${({ theme }) => theme.klerosUIComponentsPrimaryText}; - } - - p { - font-weight: 400; - font-size: 16px; - line-height: 24px; - color: ${({ theme }) => theme.klerosUIComponentsPrimaryText}; - } - - textarea { - font-family: "Open Sans"; - font-size: 14px; - } - - small { - font-weight: 600; - font-size: 14px; - line-height: 18px; - color: ${({ theme }) => theme.klerosUIComponentsPrimaryText}; - } - - label { - font-weight: 400; - font-size: 14px; - line-height: 18px; - color: ${({ theme }) => theme.klerosUIComponentsSecondaryText}; - } - - a { - font-weight: 400; - font-size: 14px; - text-decoration: none; - color: ${({ theme }) => theme.klerosUIComponentsPrimaryBlue}; - } - - hr { - opacity: 1; - border: 1px solid ${({ theme }) => theme.klerosUIComponentsStroke}; - } - - svg, img { - display: inline-block; - vertical-align: middle; - visibility: visible; - - } - - ul, ol { - li { - color: ${({ theme }) => theme.klerosUIComponentsPrimaryText}; - } - } - - .os-theme-dark { - --os-handle-bg: ${({ theme }) => theme.klerosUIComponentsVioletPurple}; - --os-handle-bg-hover: ${({ theme }) => theme.klerosUIComponentsSecondaryPurple}; - --os-handle-bg-active: ${({ theme }) => theme.klerosUIComponentsLavenderPurple}; - } -`; diff --git a/web-devtools/src/styles/landscapeStyle.ts b/web-devtools/src/styles/landscapeStyle.ts deleted file mode 100644 index 353b33cf4..000000000 --- a/web-devtools/src/styles/landscapeStyle.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { type DefaultTheme, type ThemeProps, type FlattenInterpolation, css } from "styled-components"; - -export const BREAKPOINT_LANDSCAPE = 900; - -export const landscapeStyle = (styleFn: () => FlattenInterpolation<ThemeProps<DefaultTheme>>) => css` - @media (min-width: ${BREAKPOINT_LANDSCAPE}px) { - ${() => styleFn()} - } -`; diff --git a/web-devtools/src/styles/responsiveSize.ts b/web-devtools/src/styles/responsiveSize.ts deleted file mode 100644 index 75a5d60d5..000000000 --- a/web-devtools/src/styles/responsiveSize.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @description this func applies repsonsiveness to a css property, the value will range from minSize to maxSize - * @param minSize the minimum value of the property - * @param maxSize max value of the property - * @param minScreen the min screen width at which the property will be at minSize - * @param maxScreen the max screen width at which the property will be at maxSize - * - */ -export const responsiveSize = (minSize: number, maxSize: number, minScreen = 375, maxScreen = 1250) => - `calc(${minSize}px + (${maxSize} - ${minSize}) * (min(max(100vw, ${minScreen}px), ${maxScreen}px) - ${minScreen}px) / (${ - maxScreen - minScreen - }))`; diff --git a/web-devtools/src/utils/debounceErrorToast.ts b/web-devtools/src/utils/debounceErrorToast.ts deleted file mode 100644 index 9762c14c2..000000000 --- a/web-devtools/src/utils/debounceErrorToast.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { toast } from "react-toastify"; - -import { OPTIONS as toastOptions } from "utils/wrapWithToast"; - -let timeoutId: NodeJS.Timeout; -export const debounceErrorToast = (msg: string) => { - if (timeoutId) clearTimeout(timeoutId); - - timeoutId = setTimeout(() => { - toast.error(msg, toastOptions); - }, 5000); -}; diff --git a/web-devtools/src/utils/dummyData.ts b/web-devtools/src/utils/dummyData.ts deleted file mode 100644 index e2f88e38b..000000000 --- a/web-devtools/src/utils/dummyData.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const SelectArbitrable = [ - { - label: "0xb78......09e441", - value: "0xb7859f08d656c6e25d9ea0470860b28f7609e441", - }, - { - label: "0xb78......09e355", - value: "0xb7859f08d656c6e25d9ea0470860b28f7609e355", - }, - { - label: "0xb78......09e987", - value: "0xb7859f08d656c6e25d9ea0470860b28f7609e987", - }, - { - label: "0xb78......09e111", - value: "0xb7859f08d656c6e25d9ea0470860b28f7609e111", - }, -]; diff --git a/web-devtools/src/utils/getDisputeRequestParamsFromTxn.ts b/web-devtools/src/utils/getDisputeRequestParamsFromTxn.ts deleted file mode 100644 index c073c3391..000000000 --- a/web-devtools/src/utils/getDisputeRequestParamsFromTxn.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { getPublicClient } from "@wagmi/core"; -import { type GetTransactionReceiptReturnType, decodeEventLog, getEventSelector } from "viem"; - -import { wagmiAdapter } from "context/Web3Provider"; -import { iArbitrableV2Abi } from "hooks/contracts/generated"; -import { isUndefined } from "utils/isUndefined"; - -export const getDisputeRequestParamsFromTxn = async (hash: `0x${string}`, chainId: number) => { - try { - const publicClient = getPublicClient(wagmiAdapter.wagmiConfig, { chainId }); - if (!publicClient) return; - const txn: GetTransactionReceiptReturnType = await publicClient.getTransactionReceipt({ - hash, - }); - - const selector = getEventSelector("DisputeRequest(address,uint256,uint256,uint256,string)"); - const disputeRequestEvent = txn.logs.find((log) => log.topics[0] === selector); - if (isUndefined(disputeRequestEvent)) return undefined; - - const topics = decodeEventLog({ - abi: iArbitrableV2Abi, - eventName: "DisputeRequest", - topics: disputeRequestEvent?.topics, - data: disputeRequestEvent?.data, - }); - - return { - ...topics?.args, - _arbitrable: disputeRequestEvent.address, - }; - } catch (e) { - console.error(e); - return undefined; - } -}; diff --git a/web-devtools/src/utils/getGraphqlUrl.ts b/web-devtools/src/utils/getGraphqlUrl.ts deleted file mode 100644 index d04d0cc0b..000000000 --- a/web-devtools/src/utils/getGraphqlUrl.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { arbitrumSepolia, arbitrum } from "wagmi/chains"; - -import { DEFAULT_CHAIN } from "../consts/chains"; - -const throwIfNotSet = (key: string, value: string | undefined) => { - if (!value) throw new Error(`${key} not set.`); - return value; -}; - -// Warning: we cannot access process.env[key] with key a variable -// because of the way Next.js handles env variables, unless hacking next.config -// More info: https://stackoverflow.com/questions/64152943/cant-access-process-env-values-using-dynamic-keys -export const getGraphqlUrl = (isDisputeTemplate = false, chainId: number = DEFAULT_CHAIN) => { - if (!isDisputeTemplate) { - return throwIfNotSet("NEXT_PUBLIC_CORE_SUBGRAPH", process.env.NEXT_PUBLIC_CORE_SUBGRAPH); - } - switch (chainId) { - case arbitrumSepolia.id: - return throwIfNotSet("NEXT_PUBLIC_DRT_ARBSEPOLIA_SUBGRAPH", process.env.NEXT_PUBLIC_DRT_ARBSEPOLIA_SUBGRAPH); - case arbitrum.id: - return throwIfNotSet("NEXT_PUBLIC_DRT_ARBMAINNET_SUBGRAPH", process.env.NEXT_PUBLIC_DRT_ARBMAINNET_SUBGRAPH); - default: - throw new Error(`Unsupported chainId: ${chainId}`); - } -}; diff --git a/web-devtools/src/utils/getIpfsUrl.ts b/web-devtools/src/utils/getIpfsUrl.ts deleted file mode 100644 index c54a10617..000000000 --- a/web-devtools/src/utils/getIpfsUrl.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IPFS_GATEWAY } from "consts/index"; - -export const getIpfsUrl = (url: string) => { - const formatedIPFSPath = getFormattedPath(url); - return `${IPFS_GATEWAY}${formatedIPFSPath}`; -}; - -export const getFormattedPath = (url: string) => { - if (url.startsWith("/ipfs/")) return url; - else if (url.startsWith("ipfs/")) return "/" + url; - else if (url.startsWith("ipfs://")) return url.replace("ipfs://", "/ipfs/"); - return url; -}; diff --git a/web-devtools/src/utils/isEmpty.ts b/web-devtools/src/utils/isEmpty.ts deleted file mode 100644 index db4a97dbd..000000000 --- a/web-devtools/src/utils/isEmpty.ts +++ /dev/null @@ -1 +0,0 @@ -export const isEmpty = (str: string): boolean => str.trim() === ""; diff --git a/web-devtools/src/utils/isUndefined.ts b/web-devtools/src/utils/isUndefined.ts deleted file mode 100644 index b0d6c5b33..000000000 --- a/web-devtools/src/utils/isUndefined.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const isUndefined = (maybeObject: any): maybeObject is undefined | null => - typeof maybeObject === "undefined" || maybeObject === null; diff --git a/web-devtools/src/utils/parseWagmiError.ts b/web-devtools/src/utils/parseWagmiError.ts deleted file mode 100644 index ffd1ef597..000000000 --- a/web-devtools/src/utils/parseWagmiError.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { type SimulateContractErrorType } from "@wagmi/core"; - -type ExtendedWagmiError = SimulateContractErrorType & { shortMessage?: string; metaMessages?: string[] }; - -/** - * @param error - * @description Tries to extract the human readable error message, otherwise reverts to error.message - * @returns Human readable error if possible - */ -export const parseWagmiError = (error: SimulateContractErrorType) => { - const extError = error as ExtendedWagmiError; - - const metaMessage = extError?.metaMessages?.[0]; - const shortMessage = extError?.shortMessage; - - return metaMessage ?? shortMessage ?? error.message; -}; diff --git a/web-devtools/src/utils/shortenAddress.ts b/web-devtools/src/utils/shortenAddress.ts deleted file mode 100644 index 4acd6addc..000000000 --- a/web-devtools/src/utils/shortenAddress.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { getAddress, isAddress } from "viem"; - -export function shortenAddress(address: string): string { - if (!isAddress(address)) { - throw new TypeError("Invalid input: address must be a valid Ethereum address"); - } - try { - const formattedAddress = getAddress(address); - return formattedAddress.substring(0, 6) + "..." + formattedAddress.substring(formattedAddress.length - 4); - } catch { - throw new TypeError("Invalid input: address must be a valid Ethereum address"); - } -} diff --git a/web-devtools/src/utils/validateAddressOrEns.ts b/web-devtools/src/utils/validateAddressOrEns.ts deleted file mode 100644 index 36b76319a..000000000 --- a/web-devtools/src/utils/validateAddressOrEns.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type PublicClient, isAddress } from "viem"; -import { normalize } from "viem/ens"; - -export const validateAddress = async (address: string, publicClient: PublicClient): Promise<boolean> => { - try { - if (isAddress(address)) return true; - - const isValidEns = (await publicClient.getEnsAddress({ name: normalize(address) })) !== null; - - return isValidEns; - } catch { - return false; - } -}; diff --git a/web-devtools/src/utils/wrapWithToast.ts b/web-devtools/src/utils/wrapWithToast.ts deleted file mode 100644 index 7405c73c8..000000000 --- a/web-devtools/src/utils/wrapWithToast.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { toast, ToastPosition, Theme } from "react-toastify"; -import { type PublicClient, type TransactionReceipt } from "viem"; - -import { parseWagmiError } from "./parseWagmiError"; - -export const OPTIONS = { - position: "top-center" as ToastPosition, - autoClose: 5000, - hideProgressBar: false, - closeOnClick: true, - pauseOnHover: true, - draggable: true, - progress: undefined, - theme: "colored" as Theme, -}; - -type WrapWithToastReturnType = { - status: boolean; - result?: TransactionReceipt; -}; - -export async function wrapWithToast( - contractWrite: () => Promise<`0x${string}`>, - publicClient: PublicClient -): Promise<WrapWithToastReturnType> { - toast.info("Transaction initiated", OPTIONS); - return await contractWrite() - .then( - async (hash) => - await publicClient.waitForTransactionReceipt({ hash, confirmations: 2 }).then((res: TransactionReceipt) => { - const status = res.status === "success"; - - if (status) toast.success("Transaction mined!", OPTIONS); - else toast.error("Transaction reverted!", OPTIONS); - - return { status, result: res }; - }) - ) - .catch((error) => { - toast.error(parseWagmiError(error), OPTIONS); - return { status: false }; - }); -} - -export async function catchShortMessage(promise: Promise<any>) { - return await promise.catch((error) => toast.error(parseWagmiError(error), OPTIONS)); -} diff --git a/web-devtools/svgr.d.ts b/web-devtools/svgr.d.ts deleted file mode 100644 index c93607f36..000000000 --- a/web-devtools/svgr.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -declare module "*.svg" { - import { FC, SVGProps } from "react"; - const content: FC<SVGProps<SVGElement>>; - export default content; -} - -declare module "*.svg?url" { - const content: any; - export default content; -} diff --git a/web-devtools/tsconfig.json b/web-devtools/tsconfig.json deleted file mode 100644 index 597ef15a9..000000000 --- a/web-devtools/tsconfig.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "forceConsistentCasingInFileNames": true, - "strictNullChecks": true, - "noUnusedLocals": true, - "allowSyntheticDefaultImports": true, - "removeComments": true, - "plugins": [ - { - "name": "next" - } - ], - "baseUrl": "./src", - "paths": { - "~*": [ - "./*" - ], - "src*": [ - "./*" - ], - "svgs*": [ - "assets/svgs*" - ] - } - }, - "include": [ - "svgr.d.ts", - "next-env.d.ts", - "**/*.ts", - "**/*.tsx", - ".next/types/**/*.ts" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/web-devtools/wagmi.config.ts b/web-devtools/wagmi.config.ts deleted file mode 100644 index 46a9c7f24..000000000 --- a/web-devtools/wagmi.config.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { readdir, readFile } from "fs/promises"; -import { parse, join } from "path"; - -import { type Config, type ContractConfig, defineConfig } from "@wagmi/cli"; -import { react, actions } from "@wagmi/cli/plugins"; -import dotenv from "dotenv"; -import { type Chain, type Abi } from "viem"; -import { arbitrum, arbitrumSepolia, gnosis, gnosisChiado, mainnet, sepolia } from "viem/chains"; - -import IArbitrableV2 from "../contracts/artifacts/src/arbitration/interfaces/IArbitrableV2.sol/IArbitrableV2.json" assert { type: "json" }; -import * as devnetViem from "../contracts/deployments/devnet.viem"; -import * as mainnetViem from "../contracts/deployments/mainnet.viem"; -import * as testnetViem from "../contracts/deployments/testnet.viem"; - -import { ArbitratorTypes, getArbitratorType } from "./src/consts/arbitratorTypes"; - -dotenv.config(); - -const readArtifacts = async (type: ArbitratorTypes, viemChainName: string, hardhatChainName?: string) => { - const artifactSuffix = - type === ArbitratorTypes.vanilla - ? "" - : ArbitratorTypes[type].toString().charAt(0).toUpperCase() + ArbitratorTypes[type].toString().slice(1); - const vanillaArtifacts = [ - "KlerosCore", - "DisputeKitClassic", - "SortitionModule", - "DisputeResolver", - "KlerosCoreRuler", - "DisputeResolverRuler", - ]; - const typeSpecificArtifacts = vanillaArtifacts.map((artifact) => `${artifact}${artifactSuffix}`); - - const chainMap: Record<string, Chain> = { - arbitrum, - arbitrumSepolia, - sepolia, - mainnet, - gnosisChiado, - gnosis, - }; - - const chain = chainMap[viemChainName]; - if (!chain) { - throw new Error(`Viem chain ${viemChainName} not found`); - } - - const directoryPath = `../contracts/deployments/${hardhatChainName ?? viemChainName}`; - const files = await readdir(directoryPath); - - const results: ContractConfig[] = []; - for (const file of files) { - const { name, ext } = parse(file); - if (ext === ".json") { - let nameWithoutSuffix = name; - if (vanillaArtifacts.some((artifact) => name.startsWith(artifact))) { - if (!typeSpecificArtifacts.includes(name)) { - // console.debug(`Skipping ${name} for deployment type ${ArbitratorTypes[type]}`); - continue; - } - if (type !== ArbitratorTypes.vanilla) { - nameWithoutSuffix = name.slice(0, -artifactSuffix.length); - // console.debug(`Using ${nameWithoutSuffix} instead of ${name}`); - } - } - const filePath = join(directoryPath, file); - const fileContent = await readFile(filePath, "utf-8"); - const jsonContent = JSON.parse(fileContent); - results.push({ - name: nameWithoutSuffix, - address: { - [chain.id]: jsonContent.address as `0x{string}`, - }, - abi: jsonContent.abi as Abi, - }); - } - } - return results; -}; - -const getConfig = async (): Promise<Config> => { - const deployment = process.env.NEXT_PUBLIC_DEPLOYMENT ?? "testnet"; - const type = getArbitratorType( - process.env.NEXT_PUBLIC_ARBITRATOR_TYPE?.toLowerCase() as keyof typeof ArbitratorTypes - ); - - let viemNetwork: string; - let hardhatNetwork: string; - let arbitratorContracts; - switch (deployment) { - case "devnet": - viemNetwork = "arbitrumSepolia"; - hardhatNetwork = "arbitrumSepoliaDevnet"; - arbitratorContracts = devnetViem; - break; - case "testnet": - viemNetwork = "arbitrumSepolia"; - hardhatNetwork = "arbitrumSepolia"; - arbitratorContracts = testnetViem; - break; - case "mainnet": - viemNetwork = "arbitrum"; - hardhatNetwork = "arbitrum"; - arbitratorContracts = mainnetViem; - break; - default: - throw new Error(`Unknown deployment ${deployment}`); - } - - const deploymentContracts = await readArtifacts(type, viemNetwork, hardhatNetwork); - - return { - out: "src/hooks/contracts/generated.ts", - contracts: [ - ...deploymentContracts, - { - name: "IHomeGateway", - abi: arbitratorContracts.iHomeGatewayAbi as Abi, - }, - { - name: "IArbitrableV2", - abi: IArbitrableV2.abi as Abi, - }, - ], - plugins: [react(), actions()], - }; -}; - -export default defineConfig(getConfig); diff --git a/web/.editorconfig b/web/.editorconfig deleted file mode 100644 index af8a42e12..000000000 --- a/web/.editorconfig +++ /dev/null @@ -1,11 +0,0 @@ -root = true - -[*] -end_of_line = lf -trim_trailing_whitespace = true -insert_final_newline = true -charset = utf-8 - -[*.{js,jsx,ts,tsx,json,yml}] -indent_style = space -indent_size = 2 diff --git a/web/.env.devnet-neo.public b/web/.env.devnet-neo.public deleted file mode 100644 index c668f6cea..000000000 --- a/web/.env.devnet-neo.public +++ /dev/null @@ -1,12 +0,0 @@ -# Do not enter sensitive information here. -export REACT_APP_DEPLOYMENT=devnet -export REACT_APP_CORE_SUBGRAPH=https://api.studio.thegraph.com/query/61738/kleros-v2-coreneo-devnet/version/latest -export REACT_APP_DRT_ARBSEPOLIA_SUBGRAPH=https://api.studio.thegraph.com/query/61738/kleros-v2-drt-arbisep-devnet/version/latest -export REACT_APP_STATUS_URL=https://kleros-v2-devnet.betteruptime.com/badge -export REACT_APP_DEVTOOLS_URL=https://dev--kleros-v2-neo-devtools.netlify.app -export REACT_APP_ARBITRATOR_TYPE=neo -export REACT_APP_ATLAS_URI=http://localhost:3000 -export WALLETCONNECT_PROJECT_ID= -export ALCHEMY_API_KEY= -export NODE_OPTIONS='--max-old-space-size=7680' -export REACT_APP_SHUTTER_API="https://shutter-api.chiado.staging.shutter.network/api" diff --git a/web/.env.devnet-university.public b/web/.env.devnet-university.public deleted file mode 100644 index 3eccb65f7..000000000 --- a/web/.env.devnet-university.public +++ /dev/null @@ -1,14 +0,0 @@ -# Do not enter sensitive information here. -export REACT_APP_DEPLOYMENT=devnet -export REACT_APP_CORE_SUBGRAPH=https://api.studio.thegraph.com/query/61738/kleros-v2-coreuni-devnet/version/latest -export REACT_APP_DRT_ARBSEPOLIA_SUBGRAPH=https://api.studio.thegraph.com/query/61738/kleros-v2-drt-arbisep-devnet/version/latest -export REACT_APP_STATUS_URL=https://kleros-v2-devnet.betteruptime.com/badge -export REACT_APP_ARBITRATOR_TYPE=university -export REACT_APP_ATLAS_URI=http://localhost:3000 -export WALLETCONNECT_PROJECT_ID= -export ALCHEMY_API_KEY= -export NODE_OPTIONS='--max-old-space-size=7680' -export REACT_APP_SHUTTER_API="https://shutter-api.chiado.staging.shutter.network/api" - -# devtools -export REACT_APP_GRAPH_API_KEY= \ No newline at end of file diff --git a/web/.env.devnet.public b/web/.env.devnet.public deleted file mode 100644 index 975ffa68b..000000000 --- a/web/.env.devnet.public +++ /dev/null @@ -1,12 +0,0 @@ -# Do not enter sensitive information here. -export REACT_APP_DEPLOYMENT=devnet -export REACT_APP_CORE_SUBGRAPH=https://api.studio.thegraph.com/query/61738/kleros-v2-core-devnet/version/latest -export REACT_APP_DRT_ARBSEPOLIA_SUBGRAPH=https://api.studio.thegraph.com/query/61738/kleros-v2-drt-arbisep-devnet/version/latest -export REACT_APP_STATUS_URL=https://kleros-v2-devnet.betteruptime.com/badge -export REACT_APP_ATLAS_URI=http://localhost:3000 -export REACT_APP_DEVTOOLS_URL=https://dev--kleros-v2-testnet-devtools.netlify.app -export NODE_OPTIONS='--max-old-space-size=7680' -export REACT_APP_SPAM_EVIDENCES_IDS="0-2,3-1" -export REACT_APP_SHUTTER_API="https://shutter-api.chiado.staging.shutter.network/api" -# devtools -export REACT_APP_GRAPH_API_KEY= diff --git a/web/.env.local.public b/web/.env.local.public deleted file mode 100644 index e1c15b8bc..000000000 --- a/web/.env.local.public +++ /dev/null @@ -1,12 +0,0 @@ -# Do not enter sensitive information here. -export REACT_APP_DEPLOYMENT=devnet -export REACT_APP_CORE_SUBGRAPH=http://localhost:8000/subgraphs/name/kleros/kleros-v2-core-local -export REACT_APP_DRT_ARBSEPOLIA_SUBGRAPH=https://api.thegraph.com/subgraphs/name/alcercu/templateregistrydevnet -export REACT_APP_ATLAS_URI=http://localhost:3000 -export WALLETCONNECT_PROJECT_ID= -export ALCHEMY_API_KEY= -export NODE_OPTIONS='--max-old-space-size=7680' -export REACT_APP_SHUTTER_API="https://shutter-api.chiado.staging.shutter.network/api" - -# devtools -export REACT_APP_GRAPH_API_KEY= \ No newline at end of file diff --git a/web/.env.mainnet-neo.public b/web/.env.mainnet-neo.public deleted file mode 100644 index c3028e2d5..000000000 --- a/web/.env.mainnet-neo.public +++ /dev/null @@ -1,12 +0,0 @@ -# Do not enter sensitive information here. -export REACT_APP_DEPLOYMENT=mainnet -export REACT_APP_CORE_SUBGRAPH=https://api.studio.thegraph.com/query/61738/kleros-v2-coreneo/version/latest -export REACT_APP_DRT_ARBMAINNET_SUBGRAPH=https://api.studio.thegraph.com/query/61738/kleros-v2-drt/version/latest -export REACT_APP_STATUS_URL=https://kleros-v2-devnet.betteruptime.com/badge -export REACT_APP_DEVTOOLS_URL=https://devtools.v2.kleros.builders -export REACT_APP_ARBITRATOR_TYPE=neo -export REACT_APP_ATLAS_URI=http://localhost:3000 -export WALLETCONNECT_PROJECT_ID= -export ALCHEMY_API_KEY= -export NODE_OPTIONS='--max-old-space-size=7680' -export REACT_APP_SHUTTER_API="https://shutter-api.chiado.staging.shutter.network/api" \ No newline at end of file diff --git a/web/.env.testnet.public b/web/.env.testnet.public deleted file mode 100644 index 4d19e7c2a..000000000 --- a/web/.env.testnet.public +++ /dev/null @@ -1,13 +0,0 @@ -# Do not enter sensitive information here. -export REACT_APP_DEPLOYMENT=testnet -export REACT_APP_CORE_SUBGRAPH=https://api.studio.thegraph.com/query/61738/kleros-v2-core-testnet/version/latest -export REACT_APP_DRT_ARBSEPOLIA_SUBGRAPH=https://api.studio.thegraph.com/query/61738/kleros-v2-drt-arbisep-devnet/version/latest -export REACT_APP_STATUS_URL=https://kleros-v2.betteruptime.com/badge -export REACT_APP_ATLAS_URI=http://localhost:3000 -export REACT_APP_DEVTOOLS_URL=https://devtools.v2-testnet.kleros.builders -export WALLETCONNECT_PROJECT_ID= -export ALCHEMY_API_KEY= -export NODE_OPTIONS='--max-old-space-size=7680' -export REACT_APP_SHUTTER_API="https://shutter-api.chiado.staging.shutter.network/api" -# devtools -export REACT_APP_GRAPH_API_KEY= \ No newline at end of file diff --git a/web/.gitignore b/web/.gitignore deleted file mode 100644 index 922081d5b..000000000 --- a/web/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -/.yarn/* -!/.yarn/versions -!/.yarn/plugins -!/.yarn/releases -!/.yarn/sdks -/.pnp.* -node_modules - -# vite -development -build -dist - -# misc -.eslintcache -.DS_Store -.env -.env.test -.env.testnet -.env.devnet -.env.local -.env.development.local -.env.test.local -.env.production.local -.env.devnet-university - -# generated code -src/hooks/contracts/generated.ts -src/graphql -generatedGitInfo.json -generatedNetlifyInfo.json - -# logs -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/web/.yarnrc.yml b/web/.yarnrc.yml deleted file mode 100644 index c6e883c59..000000000 --- a/web/.yarnrc.yml +++ /dev/null @@ -1,2 +0,0 @@ -nodeLinker: node-modules - diff --git a/web/LICENSE b/web/LICENSE deleted file mode 100644 index 469d9f99c..000000000 --- a/web/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 Kleros - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/web/README.md b/web/README.md deleted file mode 100644 index e6b643337..000000000 --- a/web/README.md +++ /dev/null @@ -1,42 +0,0 @@ -<p align="center"> - <b style="font-size: 32px;">Kleros Court v2 </b> -</p> - -<p align="center"> - <a href="https://app.netlify.com/sites/kleros-v2-neo/deploys"><img src="https://api.netlify.com/api/v1/badges/46f40014-ff00-4a9a-a1a2-4fefeeb1606a/deploy-status" alt="Netlify Build Status"> Neo</a> - </br> - <a href="https://app.netlify.com/sites/kleros-v2-university/deploys"><img src="https://api.netlify.com/api/v1/badges/085e1305-e434-4d36-91a4-88e8cbc3aa46/deploy-status" alt="Netlify Build Status"> University</a> - </br> - <a href="https://app.netlify.com/sites/kleros-v2-testnet/deploys"><img src="https://api.netlify.com/api/v1/badges/86d94ae8-f655-46a4-a859-d68696173f3a/deploy-status" alt="Netlify Build Status"> Testnet / Devnet</a> -</p> - -## Court Deployments - -| Court | URL | Environment | Network | -| -------------------- | ------------------------------------------ | ----------- | ---------------- | -| **Neo Court** | https://v2.kleros.builders | Production | Arbitrum One | -| **University Court** | https://v2-university.kleros.builders | Staging | Arbitrum Sepolia | -| **Testnet Court** | https://v2-testnet.kleros.builders | Staging | Arbitrum Sepolia | -| **Devnet Court** | https://dev--kleros-v2-testnet.netlify.app | Staging | Arbitrum Sepolia | - -## Contributing - -### Pre-Requisites - -If you haven't already, you need to follow all the previous steps of the **Contributing** section of the repo's [Contribution Guidelines](../CONTRIBUTING.md) - -### Getting Started - -#### Compile the contracts - -```bash -$ cd kleros-v2/contracts -$ yarn build -``` - -#### Start the frontend - -```bash -$ cd kleros-v2/web -$ yarn start -``` diff --git a/web/codegen.ts b/web/codegen.ts deleted file mode 100644 index 0a7c95877..000000000 --- a/web/codegen.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { CodegenConfig } from "@graphql-codegen/cli"; - -import { getGraphqlUrl } from "utils/getGraphqlUrl"; - -const config: CodegenConfig = { - overwrite: true, - schema: [getGraphqlUrl(false), getGraphqlUrl(true)], - documents: "./src/hooks/queries/*.ts", - generates: { - "./src/graphql/": { - preset: "client", - }, - }, -}; - -export default config; diff --git a/web/eslint.config.mjs b/web/eslint.config.mjs deleted file mode 100644 index c7830b37a..000000000 --- a/web/eslint.config.mjs +++ /dev/null @@ -1,180 +0,0 @@ -import path from "node:path"; -import { fileURLToPath } from "node:url"; - -import { fixupConfigRules, fixupPluginRules } from "@eslint/compat"; -import { FlatCompat } from "@eslint/eslintrc"; -import js from "@eslint/js"; -import tsParser from "@typescript-eslint/parser"; -import _import from "eslint-plugin-import"; -import react from "eslint-plugin-react"; -import reactHooks from "eslint-plugin-react-hooks"; -import security from "eslint-plugin-security"; -import globals from "globals"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all, -}); - -export default [ - { - ignores: ["src/assets"], - }, - ...fixupConfigRules( - compat.extends( - "eslint:recommended", - "plugin:react/recommended", - "plugin:react-hooks/recommended", - "plugin:import/recommended", - "plugin:import/react", - "plugin:@typescript-eslint/recommended", - "plugin:prettier/recommended", - "prettier" - ) - ), - { - plugins: { - react: fixupPluginRules(react), - "react-hooks": fixupPluginRules(reactHooks), - security: fixupPluginRules(security), - import: fixupPluginRules(_import), - }, - - languageOptions: { - globals: { - ...globals.browser, - ...globals.node, - Atomics: "readonly", - SharedArrayBuffer: "readonly", - }, - - parser: tsParser, - ecmaVersion: 2020, - sourceType: "module", - - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - }, - }, - - settings: { - react: { - version: "^18.3.1", - }, - - "import/resolver": { - typescript: { - project: "./tsconfig.json", - }, - }, - }, - - rules: { - "max-len": [ - "warn", - { - code: 120, - }, - ], - - "react/prop-types": 0, - "no-unused-vars": "off", - - "@typescript-eslint/no-unused-vars": [ - "error", - { - varsIgnorePattern: "(^_+[0-9]*$)|([iI]gnored$)|(^ignored)", - argsIgnorePattern: "(^_+[0-9]*$)|([iI]gnored$)|(^ignored)", - }, - ], - - "no-console": [ - "error", - { - allow: ["warn", "error", "info", "debug"], - }, - ], - - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-explicit-any": "off", - "security/detect-object-injection": "off", - "security/detect-non-literal-fs-filename": "off", - - "import/extensions": [ - "error", - "ignorePackages", - { - js: "never", - jsx: "never", - ts: "never", - tsx: "never", - }, - ], - - "import/no-unresolved": "off", - - "import/order": [ - "warn", - { - groups: ["builtin", "external", "internal", "parent", "sibling", "index"], - - pathGroups: [ - { - pattern: "{react,styled-components}", - group: "external", - position: "before", - }, - { - pattern: "@kleros/**", - group: "external", - position: "after", - }, - { - pattern: "{svgs/**,assets/**}", - group: "internal", - position: "after", - }, - { - pattern: "{hooks/**,utils/**,consts/**,types/**,context/**,connectors/**,}", - group: "internal", - position: "after", - }, - { - pattern: "{queries/**,}", - group: "internal", - position: "after", - }, - { - pattern: "{src/**,}", - group: "internal", - position: "after", - }, - { - pattern: "{styles/**,}", - group: "internal", - position: "after", - }, - { - pattern: "{layout/**,pages/**,components/**,}", - group: "internal", - position: "after", - }, - ], - - pathGroupsExcludedImportTypes: ["builtin"], - "newlines-between": "always", - - alphabetize: { - order: "asc", - caseInsensitive: true, - }, - }, - ], - }, - }, -]; diff --git a/web/global.d.ts b/web/global.d.ts deleted file mode 100644 index 2fa15462b..000000000 --- a/web/global.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {} from "styled-components"; -import { lightTheme } from "styles/themes"; - -declare global { - module "*.svg" { - const content: React.FC<React.SVGAttributes<SVGElement>>; - export default content; - } - module "*.png" { - const path: string; - export default path; - } -} - -declare module "styled-components" { - type Theme = typeof lightTheme; - //eslint-disable-next-line @typescript-eslint/no-empty-interface - export interface DefaultTheme extends Theme {} -} - -declare module "chart.js" { - interface TooltipPositionerMap { - custom: TooltipPositionerFunction<ChartType>; - } -} diff --git a/web/netlify.toml b/web/netlify.toml deleted file mode 100644 index 3f6682c22..000000000 --- a/web/netlify.toml +++ /dev/null @@ -1,16 +0,0 @@ -## Yarn 3 cache does not work out of the box as of Jan 2022. Context: -## https://github.com/netlify/build/issues/1535#issuecomment-1021947989 -[build.environment] -NETLIFY_USE_YARN = "true" -NETLIFY_YARN_WORKSPACES = "true" -YARN_ENABLE_GLOBAL_CACHE = "true" -# YARN_CACHE_FOLDER = "$HOME/.yarn_cache" -# YARN_VERSION = "3.2.0" - -[functions] -directory = "web/netlify/functions/" - -[[headers]] - for = "/*" - [headers.values] - X-Robots-Tag = "llms-txt" \ No newline at end of file diff --git a/web/package.json b/web/package.json deleted file mode 100644 index 11d688844..000000000 --- a/web/package.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "name": "@kleros/kleros-v2-web", - "version": "0.2.0", - "source": "src/index.html", - "browserslist": "> 0.5%, not dead", - "repository": "", - "author": "", - "license": "MIT", - "type": "module", - "alias": { - "src": "./src", - "utils": "./src/utils", - "assets": "./src/assets", - "components": "./src/components", - "connectors": "./src/connectors", - "context": "./src/context", - "layout": "./src/layout", - "consts": "./src/consts", - "hooks": "./src/hooks", - "queries": "./src/hooks/queries", - "pages": "./src/pages", - "styles": "./src/styles", - "svgs": "./src/assets/svgs" - }, - "scripts": { - "clean": "rimraf node_modules/ dist/", - "start": "yarn start-devnet", - "start-local": "scripts/runEnv.sh local 'yarn generate && vite'", - "start-devnet": "scripts/runEnv.sh devnet 'yarn generate && vite'", - "start-devnet-neo": "scripts/runEnv.sh devnet-neo 'yarn generate && vite'", - "start-devnet-university": "scripts/runEnv.sh devnet-university 'yarn generate && vite'", - "start-testnet": "scripts/runEnv.sh testnet 'yarn generate && vite'", - "start-mainnet-neo": "scripts/runEnv.sh mainnet-neo 'yarn generate && vite'", - "build": "yarn build-devnet", - "build-local": "scripts/runEnv.sh local 'yarn generate && vite build'", - "build-devnet": "scripts/runEnv.sh devnet 'yarn generate && vite build'", - "build-devnet-neo": "scripts/runEnv.sh devnet-neo 'yarn generate && vite build'", - "build-devnet-university": "scripts/runEnv.sh devnet-university 'yarn generate && vite build'", - "build-testnet": "scripts/runEnv.sh testnet 'yarn generate && vite build'", - "build-mainnet-neo": "scripts/runEnv.sh mainnet-neo 'yarn generate && vite build'", - "build-netlify": "scripts/generateBuildInfo.sh && yarn generate && vite build", - "check-style": "eslint 'src/**/*.{js,jsx,ts,tsx}'", - "check-types": "tsc --noEmit", - "generate": "yarn generate:gql && yarn generate:hooks", - "generate:gql": "graphql-codegen --require tsconfig-paths/register", - "generate:hooks": "NODE_NO_WARNINGS=1 wagmi generate" - }, - "prettier": "@kleros/kleros-v2-prettier-config", - "devDependencies": { - "@eslint/compat": "^1.2.3", - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "^9.15.0", - "@graphql-codegen/cli": "^5.0.3", - "@graphql-codegen/client-preset": "^4.5.1", - "@kleros/kleros-v2-eslint-config": "workspace:^", - "@kleros/kleros-v2-prettier-config": "workspace:^", - "@kleros/kleros-v2-tsconfig": "workspace:^", - "@types/busboy": "^1.5.4", - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", - "@types/styled-components": "^5.1.34", - "@typescript-eslint/eslint-plugin": "^8.15.0", - "@typescript-eslint/parser": "^8.15.0", - "@typescript-eslint/utils": "^8.15.0", - "@wagmi/cli": "^2.2.0", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-import-resolver-typescript": "^3.6.3", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-react": "^7.37.2", - "eslint-plugin-react-hooks": "^4.6.2", - "globals": "^15.12.0", - "lru-cache": "^7.18.3", - "rimraf": "^6.0.1", - "typescript": "^5.6.3", - "vite": "^5.4.11", - "vite-plugin-node-polyfills": "^0.23.0", - "vite-plugin-static-copy": "^3.0.0", - "vite-plugin-svgr": "^4.3.0", - "vite-tsconfig-paths": "^4.3.2" - }, - "dependencies": { - "@bigmi/react": "^0.1.0", - "@coinbase/wallet-sdk": "^4.3.2", - "@cyntler/react-doc-viewer": "^1.17.0", - "@graphql-tools/batch-execute": "^9.0.11", - "@graphql-tools/utils": "^10.7.2", - "@kleros/kleros-app": "workspace:^", - "@kleros/kleros-sdk": "workspace:^", - "@kleros/kleros-v2-contracts": "workspace:^", - "@kleros/ui-components-library": "^2.20.0", - "@lifi/wallet-management": "^3.7.1", - "@lifi/widget": "^3.18.1", - "@reown/appkit": "^1.7.1", - "@reown/appkit-adapter-wagmi": "^1.7.1", - "@sentry/react": "^7.120.0", - "@sentry/tracing": "^7.120.0", - "@shutter-network/shutter-sdk": "0.0.2", - "@solana/wallet-adapter-react": "^0.15.36", - "@solana/web3.js": "^1.98.0", - "@tanstack/react-query": "^5.69.0", - "@types/react-modal": "^3.16.3", - "@wagmi/connectors": "^5.7.11", - "@wagmi/core": "^2.16.7", - "@yornaath/batshit": "^0.10.0", - "chart.js": "^3.9.1", - "chartjs-adapter-moment": "^1.0.1", - "chartjs-plugin-datalabels": "^2.2.0", - "core-js": "^3.39.0", - "ethers": "^5.8.0", - "graphql": "^16.9.0", - "graphql-request": "^7.1.2", - "jose": "^5.9.6", - "moment": "^2.30.1", - "overlayscrollbars": "^2.10.0", - "overlayscrollbars-react": "^0.5.6", - "react": "^18.3.1", - "react-chartjs-2": "^4.3.1", - "react-dom": "^18.3.1", - "react-error-boundary": "^4.1.2", - "react-identicons": "^1.2.5", - "react-is": "^18.3.1", - "react-loading-skeleton": "^3.5.0", - "react-markdown": "^8.0.7", - "react-modal": "^3.16.1", - "react-router-dom": "^6.28.0", - "react-scripts": "^5.0.1", - "react-toastify": "^9.1.3", - "react-use": "^17.5.1", - "styled-components": "^5.3.3", - "subgraph-status": "^1.2.4", - "viem": "^2.24.1", - "wagmi": "^2.14.15" - } -} diff --git a/web/scripts/generateBuildInfo.sh b/web/scripts/generateBuildInfo.sh deleted file mode 100755 index 2d2b7cc3e..000000000 --- a/web/scripts/generateBuildInfo.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -jq -n --arg primeUri "$DEPLOY_PRIME_URL" --arg uri "$URL" --arg deployUri "$DEPLOY_URL" '{ netlifyDeployPrimeUri: $primeUri, netlifyUri: $uri, netlifyDeployUri: $deployUri }' > src/generatedNetlifyInfo.json -node $SCRIPT_DIR/gitInfo.js \ No newline at end of file diff --git a/web/scripts/gitInfo.js b/web/scripts/gitInfo.js deleted file mode 100644 index 7f5c0c6fe..000000000 --- a/web/scripts/gitInfo.js +++ /dev/null @@ -1,42 +0,0 @@ -/* eslint-disable max-len */ -import { execSync } from "child_process"; -import fs from "fs"; -import path from "path"; - -import packageJson from "../package.json" assert { type: "json" }; - -const execSyncWrapper = (command) => { - let stdout = null; - try { - stdout = execSync(command).toString().trim(); - } catch (error) { - console.error(error); - } - return stdout; -}; - -const main = () => { - let version = packageJson.version; - let gitCommitHash = execSyncWrapper("git rev-parse HEAD"); - let gitCommitShortHash = execSyncWrapper("git rev-parse --short=7 HEAD"); - let gitBranch = execSyncWrapper("git rev-parse --abbrev-ref HEAD"); - let gitTags = execSyncWrapper("git tag --points-at HEAD | tr '\n' ',' | sed 's/,$//'"); - let clean = - execSyncWrapper(`[ -z "$(git status --short | grep -v '^??')" ] && echo clean || echo dirty`) === "clean"; - - const obj = { - version, - gitCommitHash, - gitCommitShortHash, - gitBranch, - gitTags, - clean, - }; - - const filePath = path.resolve("src", "generatedGitInfo.json"); - const fileContents = JSON.stringify(obj, null, 2); - - fs.writeFileSync(filePath, fileContents); -}; - -main(); diff --git a/web/scripts/runEnv.sh b/web/scripts/runEnv.sh deleted file mode 100755 index 25f8a2031..000000000 --- a/web/scripts/runEnv.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" -RED='\033[0;31m' -GREEN='\033[0;32m' -NC='\033[0m' - -deployment="$1" -shift -commands="$*" - -if [[ -z "$deployment" ]]; then - echo "usage: $(basename "$0") <local|devnet|devnet-neo|devnet-university|testnet|mainnet-neo>" - exit 1 -fi - -valid_deployments=("local" "devnet" "devnet-neo" "devnet-university" "testnet" "mainnet-neo") -if [[ ! " ${valid_deployments[*]} " =~ ${deployment} ]]; then - echo "Invalid deployment option. Please choose either: ${valid_deployments[*]}." - exit 1 -fi - -function sourceEnvFile() { #envFile - local envFile="$1" - if [ -f "$envFile" ]; then - echo -e "${GREEN}✔${NC} $(basename "$envFile")" - # shellcheck source=SCRIPTDIR/../.env.devnet - . "$envFile" - else - echo -e "${RED}✖${NC} $(basename "$envFile")" - fi -} - -envFile="$SCRIPT_DIR/../.env.${deployment}" -sourceEnvFile "$envFile.public" -sourceEnvFile "$envFile" - -eval "$commands" diff --git a/web/scripts/sentry-release.sh b/web/scripts/sentry-release.sh deleted file mode 100755 index 31817b488..000000000 --- a/web/scripts/sentry-release.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -cd $SCRIPT_DIR/.. - -version="court-v2@v$(cat package.json | jq -r .version)-$(git rev-parse --short HEAD)" -sentry-cli releases new "$version" -sentry-cli releases set-commits "$version" --auto - -rm -rf dist/ -yarn build -sentry-cli releases files $version upload-sourcemaps dist/ - -sentry-cli releases finalize "$version" - -cd - diff --git a/web/src/app.tsx b/web/src/app.tsx deleted file mode 100644 index 83f82eac0..000000000 --- a/web/src/app.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import React, { lazy, Suspense } from "react"; - -import { ErrorBoundary } from "react-error-boundary"; -import { Route } from "react-router-dom"; - -import "react-loading-skeleton/dist/skeleton.css"; -import "react-toastify/dist/ReactToastify.css"; - -import AtlasProvider from "context/AtlasProvider"; -import GraphqlBatcherProvider from "context/GraphqlBatcher"; -import IsListProvider from "context/IsListProvider"; -import { NewDisputeProvider } from "context/NewDisputeContext"; -import QueryClientProvider from "context/QueryClientProvider"; -import StyledComponentsProvider from "context/StyledComponentsProvider"; -const Home = lazy(() => import("./pages/Home")); -const Cases = lazy(() => import("./pages/Cases")); -const Profile = lazy(() => import("./pages/Profile")); -const Courts = lazy(() => import("./pages/Courts")); -const Jurors = lazy(() => import("./pages/Jurors")); -const DisputeResolver = lazy(() => import("./pages/Resolver")); -const GetPnk = lazy(() => import("./pages/GetPnk")); -const Settings = lazy(() => import("./pages/Settings")); -import Web3Provider from "context/Web3Provider"; - -import Loader from "components/Loader"; -import Layout from "layout/index"; - -import ErrorFallback from "./components/ErrorFallback"; -import AttachmentDisplay from "./pages/AttachmentDisplay"; -import { SentryRoutes } from "./utils/sentry"; - -const App: React.FC = () => { - return ( - <StyledComponentsProvider> - <ErrorBoundary FallbackComponent={ErrorFallback}> - <Web3Provider> - <QueryClientProvider> - <GraphqlBatcherProvider> - <AtlasProvider> - <IsListProvider> - <NewDisputeProvider> - <SentryRoutes> - <Route path="/" element={<Layout />}> - <Route - index - element={ - <Suspense fallback={<Loader width={"48px"} height={"48px"} />}> - <Home /> - </Suspense> - } - /> - <Route - path="cases/*" - element={ - <Suspense fallback={<Loader width={"48px"} height={"48px"} />}> - <Cases /> - </Suspense> - } - /> - <Route - path="courts/*" - element={ - <Suspense fallback={<Loader width={"48px"} height={"48px"} />}> - <Courts /> - </Suspense> - } - /> - <Route - path="jurors/:page/:order/:filter" - element={ - <Suspense fallback={<Loader width={"48px"} height={"48px"} />}> - <Jurors /> - </Suspense> - } - /> - <Route - path="profile/:page/:order/:filter" - element={ - <Suspense fallback={<Loader width={"48px"} height={"48px"} />}> - <Profile /> - </Suspense> - } - /> - <Route - path="resolver/*" - element={ - <Suspense fallback={<Loader width={"48px"} height={"48px"} />}> - <DisputeResolver /> - </Suspense> - } - /> - <Route - path="get-pnk/*" - element={ - <Suspense fallback={<Loader width={"48px"} height={"48px"} />}> - <GetPnk /> - </Suspense> - } - /> - <Route - path="settings/*" - element={ - <Suspense fallback={<Loader width={"48px"} height={"48px"} />}> - <Settings /> - </Suspense> - } - /> - <Route - path="attachment/*" - element={ - <Suspense fallback={<Loader width={"48px"} height={"48px"} />}> - <AttachmentDisplay /> - </Suspense> - } - /> - <Route path="*" element={<h1>Page not found</h1>} /> - </Route> - </SentryRoutes> - </NewDisputeProvider> - </IsListProvider> - </AtlasProvider> - </GraphqlBatcherProvider> - </QueryClientProvider> - </Web3Provider> - </ErrorBoundary> - </StyledComponentsProvider> - ); -}; - -export default App; diff --git a/web/src/assets/pngs/dashboard/aristoteles.png b/web/src/assets/pngs/dashboard/aristoteles.png deleted file mode 100644 index 9bc2f76fc7067d39e1af7609f71b1cb36d2b67f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22801 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 Z7(KOBvgPz(pmu%kx0oGQV)@<Q{!i_Z$SD8- diff --git a/web/src/assets/pngs/dashboard/diogenes.png b/web/src/assets/pngs/dashboard/diogenes.png deleted file mode 100644 index 74afcc18b70ecdb7324464e66fe6cf999b1722ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21028 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 diff --git a/web/src/assets/pngs/dashboard/plato.png b/web/src/assets/pngs/dashboard/plato.png deleted file mode 100644 index 5b0ec9a87e179e69a6a36fabd847a5a13f60a965..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22410 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 Y`&U8LUyK<qZ`J%3v$ra>{M&#0A6Z5D-T(jq diff --git a/web/src/assets/pngs/dashboard/pythagoras.png b/web/src/assets/pngs/dashboard/pythagoras.png deleted file mode 100644 index 327b1ea1b9809716c488f815ed95eeb7f2780034..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21335 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 Z`3om+ZMdNZU8@y89Q1at`u_Bl{{u-x;3@zB diff --git a/web/src/assets/pngs/dashboard/socrates.png b/web/src/assets/pngs/dashboard/socrates.png deleted file mode 100644 index 81d85195cbca5d8de96b6e4c4f9c3fb89ac20878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19524 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 diff --git a/web/src/assets/svgs/.gitkeep b/web/src/assets/svgs/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/web/src/assets/svgs/footer/secured-by-kleros.svg b/web/src/assets/svgs/footer/secured-by-kleros.svg deleted file mode 100644 index cceaf5c05..000000000 --- a/web/src/assets/svgs/footer/secured-by-kleros.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="176" height="24" viewBox="0 0 176 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_7764_14466)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M104.805 0.747746L91.3267 0.145996L83.4696 9.95989L89.0251 23.1151L102.578 23.9709L110.28 12.8867L104.805 0.747746ZM91.4534 11.4126L101.225 7.14392L99.8056 17.8811L91.4534 11.4126ZM92.2858 1.63454L100.093 4.99717L90.6479 8.71508L92.2858 1.63454ZM89.6337 13.4396L98.114 19.5087L89.8403 21.6685L89.6337 13.4396ZM103.14 6.98625L108.923 12.8447L101.605 18.2811L103.14 6.98625ZM92.9461 22.7006L100.099 20.8134L101.363 23.2425L92.9461 22.7006ZM101.528 20.1965L107.794 15.5312L102.775 22.6324L101.528 20.1965ZM103.605 4.94623L104.833 2.44421L108.136 9.54954L103.605 4.94623ZM95.3483 0.924691L103.297 1.24691L101.909 3.79436L95.3483 0.924691ZM84.6077 9.44558L90.1756 2.40153L88.3331 10.236L84.6077 9.44558ZM84.3632 10.815L88.108 11.6068L88.2567 20.0306L84.3632 10.815ZM117.755 11.3665H117.312V7.38006H116.112V16.7375H117.312V12.3545H117.72L121.493 16.9674L122.41 16.1998L118.778 11.7996L121.872 7.86546L120.961 7.14941L117.755 11.3665ZM128.18 7.38037H126.987V16.7371H133.065V15.6603H128.18V7.38037ZM137.485 7.38037H143.298V8.4627H138.685V11.2628H142.496V12.3369H138.687V15.6603H143.3V16.7371H137.485V7.38037ZM151.237 7.38037H148.07L148.104 16.7364H149.287V12.7321H151.02L153.386 16.9671L154.419 16.3398L152.13 12.5531C152.68 12.3678 153.159 12.015 153.498 11.5442C153.837 11.0734 154.021 10.5082 154.023 9.92782C154.023 8.11982 152.793 7.38037 151.237 7.38037ZM152.775 9.92989C152.775 10.9881 152.024 11.6567 150.841 11.6567H149.272V8.46338H151.205C151.292 8.45179 151.38 8.44879 151.467 8.45443C151.836 8.47677 152.181 8.64473 152.427 8.9214C152.672 9.19806 152.797 9.5608 152.775 9.92989ZM164.843 12.0703C164.843 12.8215 164.79 16.896 161.538 16.896C160.03 16.896 158.226 15.8199 158.226 12.0703C158.226 8.32073 160.001 7.22119 161.538 7.22119C163.076 7.22119 164.843 8.29732 164.843 12.0703ZM159.479 12.0703C159.479 13.4301 159.727 15.7662 161.537 15.7662C163.346 15.7662 163.589 13.4005 163.589 12.0703C163.589 10.7401 163.341 8.3524 161.537 8.3524C159.732 8.3524 159.449 10.6899 159.449 12.0703H159.479ZM172.324 15.7704C171.07 15.7704 170.52 14.9215 170.283 13.7738L169.223 14.1235C169.506 15.7904 170.612 16.903 172.333 16.903C174.054 16.903 175.294 15.8978 175.294 14.1235C175.31 13.6729 175.198 13.227 174.969 12.8383C174.741 12.4495 174.406 12.1342 174.004 11.9293L172.023 11.0542C171.307 10.7292 170.77 10.4421 170.77 9.59939C170.77 8.75666 171.522 8.36008 172.29 8.36008C173.307 8.36008 173.791 9.01072 174.004 9.92161L175.151 9.58424C174.773 8.11429 173.862 7.21924 172.307 7.21924C170.84 7.21924 169.569 8.09983 169.569 9.67925C169.569 11.2591 170.609 11.6969 171.807 12.2009L171.808 12.2013L171.809 12.2015C171.944 12.2583 172.081 12.3159 172.218 12.3761C172.296 12.4085 172.375 12.4402 172.453 12.4718C173.287 12.8091 174.098 13.1366 174.098 14.191C174.098 15.2334 173.306 15.7704 172.324 15.7704ZM5.598 13.8605C5.598 14.6389 5.31691 15.2497 4.75471 15.6927C4.19252 16.1358 3.41702 16.3574 2.42819 16.3574C1.43938 16.3574 0.629974 16.2036 0 15.8963V14.5431C0.398717 14.7308 0.821359 14.8784 1.26793 14.9862C1.71848 15.0939 2.13712 15.1478 2.52388 15.1478C3.09007 15.1478 3.50673 15.0401 3.77387 14.8245C4.04499 14.609 4.18056 14.3195 4.18056 13.9563C4.18056 13.629 4.05696 13.3515 3.80975 13.124C3.56254 12.8965 3.05218 12.627 2.27868 12.3157C1.48123 11.9923 0.919045 11.6231 0.592096 11.2079C0.265148 10.7928 0.101673 10.2938 0.101673 9.71096C0.101673 8.98053 0.36084 8.40572 0.879173 7.98654C1.39751 7.56736 2.09327 7.35783 2.96646 7.35783C3.80377 7.35783 4.63709 7.54148 5.46643 7.90866L5.01188 9.07633C4.23438 8.74904 3.54062 8.58533 2.93057 8.58533C2.46807 8.58533 2.11719 8.68706 1.87796 8.89066C1.63873 9.09034 1.51912 9.35578 1.51912 9.68711C1.51912 9.91456 1.56696 10.1102 1.66265 10.2739C1.75835 10.4336 1.91584 10.5852 2.13513 10.7289C2.35442 10.8726 2.74916 11.0623 3.31932 11.2978C3.96127 11.5651 4.43175 11.8147 4.73079 12.0462C5.02982 12.2778 5.24913 12.5392 5.38868 12.8306C5.52822 13.122 5.598 13.4653 5.598 13.8605ZM12.2369 16.2381H7.29078V7.48402H12.2369V8.69359H8.72018V11.0766H12.0156V12.2742H8.72018V15.0225H12.2369V16.2381ZM15.9157 9.45953C16.3862 8.87677 17.0321 8.58533 17.8535 8.58533C18.2163 8.58533 18.5611 8.63923 18.8882 8.74702C19.2191 8.85077 19.532 8.97257 19.827 9.11217L20.3414 7.92065C19.5838 7.5454 18.7586 7.35783 17.8654 7.35783C17.0161 7.35783 16.2765 7.53946 15.6465 7.90273C15.0165 8.26599 14.5341 8.78892 14.1992 9.47152C13.8683 10.1541 13.7028 10.9504 13.7028 11.8606C13.7028 13.3056 14.0456 14.4174 14.7315 15.1958C15.4173 15.9701 16.4001 16.3574 17.68 16.3574C18.5491 16.3574 19.3266 16.2276 20.0125 15.9682V14.7407C19.6377 14.8565 19.2768 14.9523 18.93 15.0281C18.5831 15.1 18.2242 15.1359 17.8535 15.1359C16.9962 15.1359 16.3403 14.8604 15.8858 14.3096C15.4352 13.7587 15.2099 12.9464 15.2099 11.8726C15.2099 10.8467 15.4452 10.0423 15.9157 9.45953ZM28.7514 7.48402V13.1484C28.7514 13.7951 28.6118 14.3619 28.3327 14.849C28.0576 15.3319 27.6568 15.7051 27.1306 15.9687C26.6082 16.2281 25.9823 16.3578 25.2526 16.3578C24.1681 16.3578 23.3248 16.0704 22.7228 15.4956C22.1206 14.9208 21.8197 14.1304 21.8197 13.1244V7.48402H23.255V13.0227C23.255 13.7452 23.4225 14.2781 23.7574 14.6214C24.0923 14.9647 24.6067 15.1364 25.3005 15.1364C26.6481 15.1364 27.3219 14.4278 27.3219 13.0107V7.48402H28.7514ZM33.4085 11.5556H32.4157V8.69359H33.3607C34.0106 8.69359 34.497 8.80139 34.82 9.01684C35.1429 9.23243 35.3044 9.58774 35.3044 10.0827C35.3044 10.5697 35.1549 10.9369 34.8558 11.1844C34.5568 11.4319 34.0744 11.5556 33.4085 11.5556ZM32.4157 16.2381V12.7412H33.8272L35.9204 16.2381H37.5473L35.0772 12.3641C36.2095 11.901 36.7757 11.1246 36.7757 10.0348C36.7757 9.18055 36.5046 8.54188 35.9623 8.11878C35.42 7.69557 34.5848 7.48402 33.4564 7.48402H30.9864V16.2381H32.4157ZM43.7663 16.2381H38.8202V7.48402H43.7663V8.69359H40.2496V11.0766H43.5449V12.2742H40.2496V15.0225H43.7663V16.2381ZM51.5734 15.0944C52.3749 14.328 52.7755 13.2223 52.7755 11.7773C52.7755 10.416 52.3888 9.36016 51.6153 8.60978C50.8418 7.85928 49.7592 7.48402 48.3677 7.48402H45.6645V16.2381H48.1105C49.6176 16.2381 50.772 15.8569 51.5734 15.0944ZM48.3318 8.6816C50.2895 8.6816 51.2683 9.72949 51.2683 11.8251C51.2683 13.9647 50.2157 15.0345 48.1105 15.0345H47.0938V8.6816H48.3318ZM57.8874 7.48402H60.3575C61.5177 7.48402 62.357 7.6577 62.8754 8.00493C63.3937 8.35229 63.6529 8.9011 63.6529 9.65161C63.6529 10.1705 63.5073 10.5997 63.2163 10.9389C62.9291 11.2743 62.5085 11.4918 61.9543 11.5916V11.6514C63.282 11.879 63.9459 12.5777 63.9459 13.7472C63.9459 14.5295 63.6808 15.1403 63.1505 15.5794C62.6242 16.0186 61.8865 16.2381 60.9375 16.2381H57.8874V7.48402ZM58.9041 11.2324H60.5787C61.2965 11.2324 61.8127 11.1206 62.1278 10.897C62.4427 10.6695 62.6002 10.2883 62.6002 9.75334C62.6002 9.26234 62.4248 8.90918 62.074 8.69359C61.7231 8.47397 61.1648 8.36428 60.3993 8.36428H58.9041V11.2324ZM58.9041 12.0946V15.3699H60.7282C61.434 15.3699 61.9643 15.2341 62.3192 14.9627C62.678 14.6873 62.8574 14.2582 62.8574 13.6754C62.8574 13.1324 62.674 12.7333 62.3072 12.4778C61.9444 12.2223 61.3901 12.0946 60.6445 12.0946H58.9041ZM70.387 7.48402L68.0545 11.8611L65.74 7.48402H64.6275L67.5402 12.8909V16.2381H68.5688V12.8431L71.4875 7.48402H70.387Z" fill="white"/> -</g> -<defs> -<clipPath id="clip0_7764_14466"> -<rect width="176" height="24" fill="white"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/header/hamburger.svg b/web/src/assets/svgs/header/hamburger.svg deleted file mode 100644 index c02f5de1f..000000000 --- a/web/src/assets/svgs/header/hamburger.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M0.571429 3.29169H15.4286C15.7442 3.29169 16 3.03054 16 2.70835V1.25002C16 0.927838 15.7442 0.666687 15.4286 0.666687H0.571429C0.255821 0.666687 0 0.927838 0 1.25002V2.70835C0 3.03054 0.255821 3.29169 0.571429 3.29169ZM0.571429 9.12502H15.4286C15.7442 9.12502 16 8.86387 16 8.54169V7.08335C16 6.76117 15.7442 6.50002 15.4286 6.50002H0.571429C0.255821 6.50002 0 6.76117 0 7.08335V8.54169C0 8.86387 0.255821 9.12502 0.571429 9.12502ZM0.571429 14.9584H15.4286C15.7442 14.9584 16 14.6972 16 14.375V12.9167C16 12.5945 15.7442 12.3334 15.4286 12.3334H0.571429C0.255821 12.3334 0 12.5945 0 12.9167V14.375C0 14.6972 0.255821 14.9584 0.571429 14.9584Z"/> -</svg> diff --git a/web/src/assets/svgs/header/kleros-court-university.svg b/web/src/assets/svgs/header/kleros-court-university.svg deleted file mode 100644 index ec2ec609b..000000000 --- a/web/src/assets/svgs/header/kleros-court-university.svg +++ /dev/null @@ -1,28 +0,0 @@ -<svg width="148" height="48" viewBox="0 0 148 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_19973_65254)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M15.6356 1L42.4109 2.19704L53.2512 26.288L37.9576 48.3055L11.0367 46.5812L0 20.4788L15.6356 1ZM35.2655 14.8866L15.8604 23.3666L32.4506 36.1964L35.2655 14.8866ZM33.0188 10.6374L17.511 3.95872L14.2534 18.0009L33.0188 10.6374ZM29.0882 39.4245L12.2342 27.3872L12.6418 43.6985L29.0882 39.4245ZM50.5592 26.2349L39.0741 14.5781L36.0427 36.9936L50.5592 26.2349ZM33.0397 42.0464L18.8256 45.7623L35.5413 46.8329L33.0397 42.0464ZM48.3148 31.5236L35.8723 40.7944L38.3447 45.6271L48.3148 31.5236ZM42.4294 5.56301L40.0127 10.5252L49.008 19.6709L42.4294 5.56301ZM39.4184 3.18844L23.6224 2.54712L36.6522 8.24748L39.4184 3.18844ZM13.3289 5.48314L2.26489 19.4568L9.66208 21.024L13.3289 5.48314ZM9.21605 23.7651L1.78321 22.1911L9.5388 40.466L9.21605 23.7651Z" fill="white"/> -<path d="M65.6824 13.9222H66.3101L70.8045 8L72.0852 9.00784L67.7412 14.5269L72.8384 20.701L71.5578 21.7848L66.2601 15.3077H65.6824V21.457H64V8.32709H65.6824V13.9222Z" fill="white"/> -<path d="M79.2669 8.32682H80.9492V19.9446H87.8041V21.4567H79.2669V8.32682Z" fill="white"/> -<path d="M102.167 8.32682H94.0067V21.4566H102.167V19.9445H95.6888V15.2822H101.037V13.7703H95.6888V9.83907H102.167V8.32682Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M108.872 8.32682H113.316C115.501 8.32682 117.233 9.36006 117.233 11.9055C117.233 13.5182 116.154 15.106 114.572 15.5847L117.786 20.9025L116.329 21.7845L112.99 15.8368H110.554V21.4567H108.872V8.32682ZM112.764 14.3247C114.396 14.3247 115.476 13.3922 115.476 11.9054C115.476 10.721 114.773 9.83907 113.266 9.83907H110.554V14.3247H112.764Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M127.729 21.6838C132.299 21.6838 132.375 15.963 132.375 14.9047C132.375 9.61234 129.813 8.10026 127.729 8.10026C125.57 8.10026 123.084 9.66265 123.084 14.9047C123.084 20.1717 125.62 21.6838 127.729 21.6838ZM127.729 20.096C125.193 20.096 124.842 16.8199 124.842 14.9047C124.842 12.9639 125.193 9.68789 127.729 9.68805C130.265 9.68805 130.617 12.9639 130.617 14.9047C130.617 16.8199 130.266 20.096 127.729 20.096Z" fill="white"/> -<path d="M140.059 17.2988C140.385 18.9115 141.163 20.096 142.921 20.096C144.302 20.096 145.382 19.34 145.382 17.8784C145.382 16.3974 144.239 15.9363 143.06 15.461C142.956 15.4187 142.85 15.3762 142.745 15.3329C142.578 15.2621 142.411 15.1937 142.246 15.126C140.534 14.423 139.029 13.8054 139.029 11.5528C139.029 9.33506 140.812 8.10026 142.871 8.10026C145.056 8.10026 146.336 9.3603 146.863 11.4017L145.256 11.8804C144.955 10.5951 144.277 9.68805 142.846 9.68805C141.766 9.68805 140.712 10.2423 140.712 11.4269C140.712 12.6617 141.465 13.0146 142.469 13.4682L145.256 14.703C146.437 15.3582 147.064 16.4166 147.064 17.7775C147.064 20.2725 145.332 21.6838 142.921 21.6838C140.486 21.6838 138.954 20.1212 138.552 17.7775L140.059 17.2988Z" fill="white"/> -<path d="M88.2318 26.9287C88.2318 26.6079 88.3147 26.3743 88.4806 26.228C88.6466 26.076 88.854 26 89.1029 26C89.3399 26 89.5444 26.076 89.7162 26.228C89.8881 26.3799 89.974 26.6135 89.974 26.9287C89.974 27.2439 89.8881 27.4803 89.7162 27.6379C89.5444 27.7899 89.3399 27.8659 89.1029 27.8659C88.854 27.8659 88.6466 27.7899 88.4806 27.6379C88.3147 27.4803 88.2318 27.2439 88.2318 26.9287Z" fill="white"/> -<path d="M89.8318 38.6898H88.3562V29.4363H89.8318V38.6898Z" fill="white"/> -<path d="M129.904 38.6898H128.428V29.4363H129.904V38.6898Z" fill="white"/> -<path d="M128.553 26.228C128.387 26.3743 128.304 26.6079 128.304 26.9287C128.304 27.2439 128.387 27.4803 128.553 27.6379C128.719 27.7899 128.926 27.8659 129.175 27.8659C129.412 27.8659 129.617 27.7899 129.788 27.6379C129.96 27.4803 130.046 27.2439 130.046 26.9287C130.046 26.6135 129.96 26.3799 129.788 26.228C129.617 26.076 129.412 26 129.175 26C128.926 26 128.719 26.076 128.553 26.228Z" fill="white"/> -<path d="M136.935 37.6515C136.692 37.6853 136.44 37.7022 136.18 37.7022C135.694 37.7022 135.312 37.553 135.033 37.2547C134.754 36.9564 134.615 36.5286 134.615 35.9714V30.5257H137.442V29.4365H134.615V27.292H133.762L133.14 29.2677L131.744 29.8502V30.5257H133.14V36.0305C133.14 37.9161 134.082 38.8589 135.966 38.8589C136.215 38.8589 136.494 38.8335 136.802 38.7829C137.116 38.7379 137.353 38.6788 137.513 38.6056V37.5333C137.371 37.5727 137.178 37.6121 136.935 37.6515Z" fill="white"/> -<path d="M137.922 29.4365H139.504L141.638 34.7134C142.106 35.9179 142.396 36.7875 142.509 37.3223H142.58C142.657 37.0352 142.817 36.5455 143.06 35.8532C143.309 35.1552 144.115 33.0163 145.478 29.4365H147.06L142.873 39.9734C142.458 41.0147 141.972 41.752 141.415 42.1854C140.864 42.6245 140.186 42.844 139.38 42.844C138.929 42.844 138.485 42.7961 138.046 42.7004V41.5775C138.372 41.6451 138.737 41.6788 139.14 41.6788C140.153 41.6788 140.876 41.1385 141.309 40.0578L141.851 38.7407L137.922 29.4365Z" fill="white"/> -<path d="M125.006 38.158C125.682 37.6909 126.019 37.0267 126.019 36.1655C126.019 35.552 125.815 35.0426 125.406 34.6373C125.003 34.2321 124.224 33.8296 123.068 33.43C122.227 33.1316 121.658 32.9037 121.362 32.7461C121.065 32.5885 120.849 32.4224 120.713 32.248C120.582 32.0735 120.517 31.8624 120.517 31.6147C120.517 31.2489 120.695 30.9618 121.05 30.7535C121.406 30.5453 121.933 30.4412 122.633 30.4412C123.427 30.4412 124.313 30.6325 125.291 31.0153L125.815 29.8755C124.813 29.4702 123.788 29.2676 122.739 29.2676C121.613 29.2676 120.727 29.4871 120.081 29.9261C119.436 30.3595 119.113 30.9534 119.113 31.7076C119.113 32.1297 119.204 32.4928 119.388 32.7967C119.578 33.1007 119.862 33.3737 120.241 33.6157C120.627 33.8521 121.273 34.1307 122.179 34.4516C123.133 34.8005 123.773 35.1045 124.099 35.3634C124.431 35.6167 124.597 35.9235 124.597 36.2837C124.597 36.7621 124.39 37.1196 123.975 37.356C123.56 37.5867 122.967 37.7021 122.197 37.7021C121.699 37.7021 121.181 37.6374 120.642 37.5079C120.108 37.3785 119.607 37.2012 119.139 36.976V38.2762C119.862 38.6646 120.87 38.8588 122.162 38.8588C123.382 38.8588 124.33 38.6252 125.006 38.158Z" fill="white"/> -<path d="M117.913 29.3689C117.569 29.3013 117.181 29.2676 116.748 29.2676C116.138 29.2676 115.578 29.4308 115.068 29.7573C114.558 30.0837 114.123 30.5481 113.761 31.1504H113.69L113.521 29.4364H112.303V38.6899H113.779V33.7255C113.779 32.8193 114.058 32.0622 114.615 31.4543C115.178 30.8464 115.853 30.5425 116.641 30.5425C116.95 30.5425 117.305 30.5847 117.708 30.6691L117.913 29.3689Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M102.783 37.6092C103.619 38.4423 104.757 38.8588 106.197 38.8588C106.854 38.8588 107.415 38.811 107.877 38.7153C108.345 38.6252 108.84 38.4732 109.361 38.2594V37.0098C108.336 37.4263 107.299 37.6346 106.25 37.6346C105.254 37.6346 104.481 37.3531 103.93 36.7903C103.385 36.2274 103.097 35.4028 103.068 34.3165H109.779V33.43C109.779 32.1804 109.423 31.1757 108.712 30.4158C108.001 29.6503 107.035 29.2676 105.814 29.2676C104.511 29.2676 103.471 29.7066 102.694 30.5847C101.924 31.4628 101.539 32.6476 101.539 34.1392C101.539 35.6195 101.954 36.7762 102.783 37.6092ZM103.921 31.1672C104.389 30.6832 105.014 30.4412 105.797 30.4412C106.567 30.4412 107.16 30.6776 107.575 31.1504C107.989 31.6175 108.197 32.293 108.197 33.1767H103.103C103.186 32.3211 103.459 31.6513 103.921 31.1672Z" fill="white"/> -<path d="M91.3963 29.4365L95.0942 38.69H96.8187L100.517 29.4365H98.9343C97.7254 32.5886 96.9461 34.6346 96.5964 35.5746C96.2527 36.5089 96.0483 37.1253 95.9831 37.4236H95.912C95.829 37.0408 95.5505 36.2078 95.0764 34.9245L92.9786 29.4365H91.3963Z" fill="white"/> -<path d="M83.8405 38.6899V32.7039C83.8405 31.9496 83.6598 31.3868 83.2983 31.0153C82.9368 30.6438 82.3709 30.458 81.6005 30.458C80.5812 30.458 79.8345 30.7198 79.3604 31.2432C78.8863 31.7667 78.6493 32.6307 78.6493 33.8352V38.6899H77.1737V29.4364H78.3737L78.6137 30.7029H78.6849C78.9871 30.247 79.4108 29.8952 79.956 29.6475C80.5012 29.3942 81.1086 29.2676 81.7783 29.2676C82.9516 29.2676 83.8346 29.5378 84.4272 30.0781C85.0198 30.6128 85.3161 31.4712 85.3161 32.6532V38.6899H83.8405Z" fill="white"/> -<path d="M73.9469 26.3462V34.3333C73.9469 35.7404 73.4995 36.8464 72.6047 37.6513C71.7098 38.4562 70.4802 38.8587 68.9157 38.8587C67.3512 38.8587 66.1393 38.4534 65.28 37.6429C64.4267 36.8324 64 35.7179 64 34.2995V26.3462H65.5112V34.4008C65.5112 35.4308 65.8075 36.2217 66.4001 36.7733C66.9927 37.3249 67.8638 37.6007 69.0135 37.6007C70.1098 37.6007 70.9543 37.3249 71.5469 36.7733C72.1395 36.216 72.4358 35.4196 72.4358 34.3839V26.3462H73.9469Z" fill="white"/> -</g> -<defs> -<clipPath id="clip0_19973_65254"> -<rect width="148" height="48" fill="white"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/header/kleros-court.svg b/web/src/assets/svgs/header/kleros-court.svg deleted file mode 100644 index 271675f2e..000000000 --- a/web/src/assets/svgs/header/kleros-court.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="185" height="48" viewBox="0 0 185 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M42.6705 1.49354L15.7143 0.290039L0 19.9178L11.111 46.2282L38.2159 47.9398L53.6205 25.7715L42.6705 1.49354ZM15.9677 22.8233L35.5115 14.2859L32.6721 35.7602L15.9677 22.8233ZM17.6325 3.26712L33.2477 9.9924L14.3566 17.4282L17.6325 3.26712ZM12.3283 26.8772L29.2888 39.0155L12.7414 43.3351L12.3283 26.8772ZM39.341 13.9706L50.9078 25.6875L36.2702 36.5603L39.341 13.9706ZM18.9531 45.3993L33.2587 41.6249L35.7869 46.483L18.9531 45.3993ZM36.1174 40.3911L48.6481 31.0605L38.6111 45.2629L36.1174 40.3911ZM40.2718 9.8905L42.727 4.88647L49.3339 19.0971L40.2718 9.8905ZM23.7574 1.84743L39.6549 2.49187L36.8789 7.58677L23.7574 1.84743ZM2.27618 18.8892L13.412 4.8011L9.72714 20.47L2.27618 18.8892ZM1.78735 21.6281L9.27686 23.2116L9.5743 40.0592L1.78735 21.6281ZM67.6843 22.731H68.5711L74.9824 14.2969L76.8042 15.729L70.6173 23.5972L77.881 32.3976L76.0468 33.9329L68.5009 24.707H67.6843V33.473H65.2842V14.7582H67.6843V22.731ZM87.0352 14.7588H89.4215V31.3186H99.1913V33.4723H87.0352V14.7588ZM119.658 14.7588H108.03V33.4723H119.66V31.3186H110.435V24.6718H118.052V22.5237H110.432V16.9234H119.658V14.7588ZM129.201 14.7588H135.535C138.646 14.7588 141.107 16.2377 141.107 19.8537C141.103 21.0145 140.736 22.1449 140.057 23.0865C139.378 24.0281 138.421 24.7337 137.321 25.1042L141.899 32.6777L139.833 33.9322L135.102 25.4622H131.634V33.4709H129.269L129.201 14.7588ZM134.744 23.3114C137.109 23.3114 138.612 21.9743 138.612 19.8578C138.656 19.1196 138.405 18.3942 137.914 17.8408C137.424 17.2875 136.733 16.9516 135.995 16.9069C135.82 16.8956 135.645 16.9016 135.471 16.9248H131.604V23.3114H134.744ZM156.137 33.7901C162.641 33.7901 162.747 25.641 162.747 24.1387C162.747 16.5927 159.212 14.4404 156.137 14.4404C153.062 14.4404 149.514 16.6395 149.514 24.1387C149.514 31.6378 153.121 33.7901 156.137 33.7901ZM156.134 31.5304C152.516 31.5304 152.018 26.8582 152.018 24.1387H151.959C151.959 21.3778 152.525 16.7028 156.134 16.7028C159.743 16.7028 160.239 21.4783 160.239 24.1387C160.239 26.799 159.753 31.5304 156.134 31.5304ZM173.628 27.5456C174.102 29.841 175.202 31.5389 177.709 31.5389C179.673 31.5389 181.256 30.4648 181.256 28.38C181.256 26.2713 179.636 25.6163 177.967 24.9417C177.81 24.8785 177.653 24.8151 177.497 24.7503C177.221 24.6295 176.946 24.5139 176.675 24.3999C174.279 23.3918 172.199 22.5163 172.199 19.3566C172.199 16.1977 174.74 14.4365 177.675 14.4365C180.785 14.4365 182.607 16.2266 183.363 19.1665L181.069 19.8413C180.644 18.0195 179.674 16.7182 177.64 16.7182C176.105 16.7182 174.6 17.5114 174.6 19.1968C174.6 20.8823 175.674 21.4565 177.108 22.1064L181.069 23.8566C181.872 24.2664 182.542 24.8971 182.999 25.6746C183.456 26.4521 183.681 27.3439 183.648 28.2451C183.648 31.7936 181.17 33.8041 177.727 33.8041C174.285 33.8041 172.073 31.5788 171.506 28.2451L173.628 27.5456Z" fill="white"/> -</svg> diff --git a/web/src/assets/svgs/hero/hero-darkmode-desktop.svg b/web/src/assets/svgs/hero/hero-darkmode-desktop.svg deleted file mode 100644 index 1e9ae698f..000000000 --- a/web/src/assets/svgs/hero/hero-darkmode-desktop.svg +++ /dev/null @@ -1,73 +0,0 @@ -<svg viewBox="0 0 1440 184" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_1702_46258)"> -<g clip-path="url(#clip1_1702_46258)"> -<path d="M1440 0H0V185H1440V0Z" fill="white"/> -<g style="mix-blend-mode:screen" opacity="0.085"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M614.293 20.3906L874.267 32.0256L979.521 266.18L831.028 480.18L569.64 463.42L462.48 209.72L614.293 20.3906ZM804.889 155.366L616.476 237.785L777.553 362.486L804.889 155.366ZM783.075 114.066L632.502 49.1486L600.872 185.633L783.075 114.066ZM744.91 393.866L581.267 276.866L585.225 435.405L744.91 393.866ZM953.382 265.666L841.868 152.366L812.435 370.236L953.382 265.666ZM783.277 419.346L645.266 455.466L807.566 465.872L783.277 419.346ZM931.59 317.066L810.78 407.176L834.785 454.148L931.59 317.066ZM874.446 64.7416L850.981 112.972L938.321 201.864L874.446 64.7416ZM845.211 41.6656L691.841 35.4326L818.353 90.8336L845.211 41.6656ZM591.896 63.9656L484.47 199.784L556.293 215.016L591.896 63.9656ZM551.962 241.659L479.793 226.359L555.093 403.984L551.962 241.659Z" fill="white"/> -</g> -<path d="M1440 57.9355H0V184.936H1440V57.9355Z" fill="url(#paint0_linear_1702_46258)"/> -<path d="M1440 0H0V185H1440V0Z" fill="url(#paint1_linear_1702_46258)"/> -<g style="mix-blend-mode:screen" opacity="0.085"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M614.293 11.3906L874.267 23.0256L979.521 257.18L831.028 471.18L569.64 454.42L462.48 200.72L614.293 11.3906ZM804.889 146.366L616.476 228.785L777.553 353.486L804.889 146.366ZM783.075 105.066L632.502 40.1486L600.872 176.633L783.075 105.066ZM744.91 384.866L581.267 267.866L585.225 426.405L744.91 384.866ZM953.382 256.666L841.868 143.366L812.435 361.236L953.382 256.666ZM783.277 410.346L645.266 446.466L807.566 456.872L783.277 410.346ZM931.59 308.066L810.78 398.176L834.785 445.148L931.59 308.066ZM874.446 55.7416L850.981 103.972L938.321 192.864L874.446 55.7416ZM845.211 32.6656L691.841 26.4326L818.353 81.8336L845.211 32.6656ZM591.896 54.9656L484.47 190.784L556.293 206.016L591.896 54.9656ZM551.962 232.659L479.793 217.359L555.093 394.984L551.962 232.659Z" fill="white"/> -</g> -<path d="M798.441 153.754C798.441 153.754 803.211 161.277 811.627 162.737C820.043 164.197 815.691 172.119 815.691 172.119L796.244 167.076L795.66 153.754H798.443H798.441Z" fill="#8C20FA"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M1383.6 100.527V101.897H1383.01V103.14H1378.9L1378.58 103.658H1378.19C1378.15 103.463 1378.13 103.267 1378.12 103.069V102.025C1377.92 102.017 1377.73 101.996 1377.54 101.962C1377.32 101.921 1377.07 101.897 1377.07 101.897V101.116H1375.77V101.897H1371.01V102.352H1370.04L1369.84 101.834C1369.61 101.662 1369.37 101.507 1369.12 101.371C1368.95 101.355 1368.77 101.355 1368.59 101.371C1368.59 101.371 1368.81 102.486 1368.59 102.486H1363.97V104.247H1362.72V104.573H1362.46L1362.53 104.962L1363.24 105.162V123.167H1361.09V123.109H1359.52V108.682L1359.92 108.293L1360.11 107.904L1359.01 107.25L1358.74 106.271C1358.74 106.271 1358.64 105.945 1358.42 105.945H1351.77V107.645H1350.33L1351.12 108.426V122.847H1348.83V124.28H1341.13C1341.06 124.28 1341.06 124.351 1341.06 124.406V128.324C1341.06 128.387 1341.06 128.452 1341.13 128.452H1356.66V128.778H1407.68V123.498H1386.41C1386.36 122.788 1386.41 119.716 1386.41 119.716H1386.02L1386.34 118.346L1386.28 110.51L1386.02 107.252L1386.14 105.952L1386.53 104.908C1386.53 104.908 1386.14 104.796 1386.14 104.445C1386.16 104.16 1386.21 103.877 1386.28 103.601C1386.28 103.601 1386.14 102.924 1386.14 102.749C1386.14 102.574 1385.63 102.034 1385.63 102.034C1385.63 102.034 1385.93 101.734 1385.75 101.516C1385.62 101.206 1385.55 100.872 1385.55 100.535L1383.6 100.527ZM1379.95 105.163H1383.08V121.735L1382.81 122.516H1379.95C1379.96 121.416 1379.98 120.302 1379.95 120.166C1379.87 119.866 1379.49 107.441 1379.49 107.441L1379.75 106.397L1380.01 105.879L1379.95 105.163ZM1374.27 105.355H1375.84V122.516H1373.23V107.249L1373.42 106.597L1373.55 106.008L1373.68 105.49L1374.27 105.355ZM1367.16 105.618H1368.66V122.518H1366.96V107.504L1367.16 106.597L1367.61 106.134L1367.16 105.618ZM1353.91 108.03H1357.11V108.682C1357.29 109.143 1357.43 109.625 1357.5 110.117C1357.44 110.339 1357.5 122.842 1357.5 122.842H1353.26C1353.04 122.451 1353.26 109.854 1353.26 109.854L1353.46 109.073L1353.26 108.681L1353.39 108.157L1353.91 108.03Z" fill="#1B023F"/> -<path d="M1408.52 104.966C1408.52 104.357 1404.8 103.779 1408.82 101.53C1408.95 101.857 1409.97 101.203 1410.17 101.181C1410.73 101.114 1410.89 101.016 1410.84 100.745C1410.82 100.58 1410.85 100.445 1410.96 100.396C1411 100.369 1411.04 100.329 1411.06 100.281C1411.07 100.234 1411.08 100.181 1411.06 100.133C1411.01 100.013 1411.05 99.9566 1411.15 99.9566C1411.27 99.9566 1411.3 99.7946 1411.29 99.1826C1411.29 98.7576 1411.26 98.4616 1411.23 98.5396C1411.19 98.6266 1411.13 98.6396 1410.98 98.5596C1410.88 98.5066 1410.78 98.4846 1410.75 98.5176C1410.71 98.5506 1410.59 98.4506 1410.47 98.2996C1410.35 98.1486 1410.21 98.0256 1410.16 98.0256C1410 98.0256 1409.92 97.7626 1409.92 97.3496C1409.92 97.1771 1409.88 97.0065 1409.81 96.8496C1409.74 96.7496 1409.75 96.6646 1409.84 96.6206C1409.94 96.5566 1409.94 96.5336 1409.83 96.5336C1409.69 95.7749 1409.72 94.9956 1409.93 94.2516C1409.99 94.0355 1410.01 93.8096 1409.98 93.5866C1409.96 93.5495 1409.96 93.5073 1409.97 93.4675C1409.98 93.4277 1410 93.3927 1410.04 93.3686C1410.12 93.1165 1410.15 92.8485 1410.12 92.5836C1410.09 92.283 1410.11 91.98 1410.17 91.6836C1410.29 91.402 1410.37 91.1047 1410.4 90.8006C1410.43 90.6276 1410.45 90.0266 1410.46 89.4676C1410.46 89.0434 1410.49 88.6197 1410.57 88.2026C1410.67 87.5817 1410.71 86.9541 1410.71 86.3256C1410.8 83.4906 1410.89 81.4066 1410.94 80.9676C1411.03 80.1676 1411.03 80.1076 1410.94 79.8556C1410.89 79.7136 1410.9 79.6266 1410.95 79.6556C1411.01 79.6846 1411.05 79.3926 1411.06 78.9996C1411.07 78.6066 1411.1 77.8546 1411.14 77.3206C1411.17 76.7866 1411.25 75.4436 1411.3 74.3206C1411.41 72.3536 1411.56 71.5046 1411.82 71.4206C1411.89 71.3866 1411.94 71.4736 1411.94 71.5936C1411.96 71.7323 1412.01 71.8628 1412.11 71.9656C1412.33 72.587 1412.42 73.2479 1412.38 73.9066C1412.38 74.0266 1412.44 74.4066 1412.49 74.7586C1412.57 75.2886 1412.63 75.8228 1412.65 76.3586C1412.69 76.8916 1412.72 77.4706 1412.74 77.6466C1412.76 77.8226 1412.82 78.2466 1412.84 78.5966C1412.94 79.7416 1413.04 80.3206 1413.17 80.3966C1413.25 80.4636 1413.25 80.5056 1413.17 80.5616C1413.13 80.5999 1413.1 80.6469 1413.09 80.6981C1413.08 80.7493 1413.08 80.8032 1413.09 80.8546C1413.11 80.9746 1413.16 81.5756 1413.18 82.1876C1413.22 83.3996 1413.24 83.5616 1413.38 83.7686C1413.42 83.8466 1413.41 83.8996 1413.36 83.8996C1413.3 83.8996 1413.27 84.2936 1413.28 84.8386C1413.32 86.2126 1413.32 86.1826 1413.5 86.1036C1413.68 86.0246 1413.71 86.1596 1413.54 86.3326C1413.41 86.4636 1413.51 86.8996 1413.67 86.8996C1413.73 86.8996 1413.69 87.0116 1413.61 87.1396C1413.48 87.3396 1413.45 87.6396 1413.49 88.6036C1413.48 89.0338 1413.53 89.4635 1413.63 89.8806C1413.69 89.9788 1413.71 90.0959 1413.68 90.2076C1413.58 90.8463 1413.57 91.497 1413.67 92.1376C1413.72 92.1376 1413.74 92.2046 1413.71 92.2916C1413.68 92.6131 1413.7 92.9361 1413.76 93.2526C1413.96 94.5186 1413.96 94.6156 1413.81 94.9986C1413.73 95.1826 1413.71 95.3476 1413.75 95.3476C1413.86 95.3476 1413.82 96.0686 1413.67 96.6776C1413.4 97.8256 1413.31 98.1306 1413.24 98.1306C1413.2 98.1306 1413.1 98.2506 1413.02 98.3936C1412.89 98.5879 1412.69 98.7271 1412.46 98.7846C1412.06 98.9046 1412.06 98.9156 1412.06 99.4716C1412.06 99.9516 1412.1 100.053 1412.33 100.204C1412.5 100.315 1412.63 100.47 1412.7 100.651C1412.79 100.88 1412.84 100.891 1413 100.782C1413.3 100.598 1413.81 100.827 1413.74 101.12C1413.7 101.251 1413.73 101.307 1413.82 101.262C1413.86 101.251 1413.9 101.253 1413.94 101.266C1413.98 101.28 1414.02 101.304 1414.04 101.337C1414.1 101.437 1414.14 101.426 1414.21 101.329C1414.27 101.209 1414.34 101.209 1414.56 101.329C1414.97 101.513 1414.81 101.382 1415.4 101.622C1415.34 101.787 1415.55 101.907 1415.71 101.798C1415.93 101.678 1416.44 101.644 1416.44 101.765C1416.44 101.829 1416.5 101.852 1416.55 101.807C1416.59 101.783 1416.61 101.747 1416.62 101.707C1416.63 101.667 1416.62 101.625 1416.61 101.589C1416.58 101.513 1416.6 101.449 1416.65 101.449C1416.71 101.449 1416.78 101.536 1416.81 101.649C1416.86 101.811 1416.93 101.833 1417.16 101.78C1417.45 101.702 1417.45 101.691 1417.48 100.568C1417.54 100.167 1417.52 99.7589 1417.41 99.3676C1417.35 99.3256 1417.29 99.3366 1417.29 99.3896C1417.29 99.6076 1416.52 99.3786 1416.18 99.0626C1415.58 98.4846 1415.52 97.2826 1415.95 94.6206C1416.07 94.2237 1416.09 93.8073 1416.03 93.3996C1415.96 93.3326 1416.01 93.1706 1416.15 92.9306C1416.43 92.244 1416.55 91.4978 1416.48 90.7576C1416.48 90.4066 1416.53 90.0575 1416.63 89.7216C1416.73 89.3865 1416.76 89.0311 1416.69 88.6856C1416.65 88.1186 1416.66 87.8246 1416.76 87.7156C1416.87 87.3266 1416.91 86.9189 1416.87 86.5156C1416.85 85.1847 1416.91 83.8536 1417.07 82.5316C1417.14 82.3203 1417.16 82.0979 1417.14 81.8776C1417.13 81.6156 1417.19 80.5346 1417.27 79.4776C1417.35 78.4206 1417.44 77.1426 1417.47 76.6426C1417.48 75.8955 1417.58 75.1522 1417.76 74.4276C1417.91 73.8716 1418.12 73.7596 1418.22 74.1876C1418.25 74.3606 1418.33 74.4806 1418.37 74.4506C1418.49 74.3726 1418.59 74.7886 1418.59 75.4316C1418.61 75.9157 1418.67 76.3975 1418.77 76.8726C1418.85 77.253 1418.9 77.6397 1418.92 78.0286C1418.88 78.3344 1418.9 78.6436 1418.96 78.9446C1419 79.1736 1419.04 79.5116 1419.05 79.6876C1419.06 79.8368 1419.09 79.9839 1419.14 80.1236C1419.2 80.3596 1419.23 80.6017 1419.23 80.8446C1419.23 81.1635 1419.27 81.4808 1419.35 81.7916C1419.4 81.9237 1419.41 82.0677 1419.39 82.2076C1419.38 82.2213 1419.38 82.2363 1419.37 82.2517C1419.37 82.2671 1419.38 82.2826 1419.38 82.2971C1419.39 82.3117 1419.39 82.3249 1419.41 82.336C1419.42 82.3472 1419.43 82.3559 1419.44 82.3616C1419.47 82.3887 1419.49 82.4243 1419.5 82.4634C1419.51 82.5025 1419.5 82.5432 1419.49 82.5796C1419.46 82.8212 1419.48 83.0653 1419.54 83.3006C1419.63 83.6806 1419.63 83.8676 1419.55 83.9006C1419.54 83.9064 1419.53 83.9149 1419.52 83.9254C1419.51 83.936 1419.5 83.9485 1419.5 83.962C1419.49 83.9755 1419.49 83.9898 1419.49 84.0039C1419.5 84.0179 1419.5 84.0315 1419.51 84.0436C1419.65 84.9749 1419.72 85.917 1419.71 86.8596C1419.66 87.4187 1419.8 87.9775 1420.1 88.4516C1420.29 88.5826 1420.29 88.5936 1420.07 88.7696C1419.85 88.9456 1419.86 89.0296 1419.92 90.1556C1419.94 90.622 1420 91.0859 1420.1 91.5416C1420.13 91.5981 1420.15 91.6623 1420.15 91.7276C1420.15 91.793 1420.13 91.8572 1420.1 91.9136C1420.02 92.4008 1420.01 92.8973 1420.09 93.3856C1420.12 93.5914 1420.15 93.7996 1420.15 94.0086C1420.15 94.2748 1420.2 94.539 1420.31 94.7826C1420.39 94.8826 1420.42 95.1536 1420.36 95.6006C1420.33 95.9726 1420.3 96.3636 1420.3 96.4836C1420.3 97.2486 1420.29 97.4556 1420.19 97.5646C1420.09 97.7645 1420.03 97.9789 1420.01 98.1986C1419.95 98.5409 1419.8 98.8613 1419.58 99.1261C1419.35 99.391 1419.06 99.5908 1418.73 99.7046C1418.41 99.7686 1418.37 99.8136 1418.35 100.163C1418.33 100.615 1418.35 101.068 1418.43 101.515C1418.45 101.635 1418.47 101.898 1418.48 102.104C1418.49 102.31 1418.53 102.404 1418.55 102.344C1418.64 102.137 1418.89 102.179 1418.96 102.419C1419.01 102.539 1419.11 102.637 1419.18 102.637C1419.41 102.637 1419.38 102.847 1419.15 102.858C1419.01 102.866 1419.02 102.889 1419.2 102.967C1419.33 103.009 1419.44 103.129 1419.44 103.207C1419.44 103.556 1421.49 103.807 1421.69 103.489C1421.74 103.402 1421.79 103.389 1421.84 103.478C1422.02 102.967 1422.89 102.048 1422.73 103.064C1422.86 103.206 1423.01 103.117 1422.96 103.402L1422.94 103.564L1423.23 103.864C1423.53 104.157 1423.83 104.164 1423.83 103.864C1423.83 103.82 1423.85 103.779 1423.88 103.749C1423.91 103.718 1423.95 103.7 1423.99 103.699C1424.09 103.699 1424.14 103.657 1424.1 103.599C1424.07 103.541 1424.1 103.49 1424.17 103.49C1424.23 103.476 1424.28 103.45 1424.33 103.412C1424.38 103.374 1424.42 103.327 1424.45 103.272C1424.49 103.213 1424.53 103.164 1424.59 103.128C1424.65 103.092 1424.71 103.07 1424.78 103.065C1425.02 103.065 1425.13 102.476 1425.15 100.981L1425.16 100.009L1424.63 99.9526C1424.15 99.9106 1423.51 99.5946 1423.51 99.3966C1423.51 99.3546 1423.44 99.3216 1423.36 99.3216C1423.15 99.3216 1422.9 98.9166 1422.76 98.3496C1422.7 98.1116 1422.61 97.8811 1422.5 97.6626C1422.29 97.2785 1422.24 96.8328 1422.33 96.4086C1422.42 96.2666 1422.4 96.1086 1422.28 95.8746C1422.17 95.6423 1422.11 95.3886 1422.11 95.1316C1422.11 94.8747 1422.17 94.6209 1422.28 94.3886C1422.42 94.14 1422.49 93.8561 1422.48 93.5696C1422.48 93.307 1422.52 93.046 1422.6 92.7956C1422.68 92.5078 1422.72 92.211 1422.72 91.9126C1422.74 91.3006 1422.71 91.1356 1422.53 90.9626C1422.43 90.8536 1422.38 90.7626 1422.43 90.7626C1422.63 90.7626 1422.75 90.3376 1422.82 89.4106C1422.93 87.8716 1422.92 87.7106 1422.63 87.4466C1422.4 87.2396 1422.4 87.2286 1422.6 87.0866C1422.72 86.9838 1422.8 86.846 1422.84 86.6926C1422.85 86.5784 1422.89 86.4691 1422.96 86.3766C1423.14 86.0587 1423.22 85.694 1423.2 85.3286C1423.15 85.3176 1423.15 85.0886 1423.2 84.8486C1423.25 84.4942 1423.26 84.1348 1423.22 83.7786C1423.18 83.3206 1423.2 83.1696 1423.3 83.1696C1423.4 83.1696 1423.42 83.0386 1423.37 82.7006C1423.33 82.4006 1423.35 82.1866 1423.44 82.1116C1423.54 82.0116 1423.53 81.9576 1423.41 81.8826C1423.29 81.8076 1423.28 81.7406 1423.37 81.5826C1423.41 81.5275 1423.43 81.4619 1423.44 81.3943C1423.44 81.3267 1423.42 81.2599 1423.38 81.2026C1423.33 81.0906 1423.33 81.0266 1423.38 81.0266C1423.54 81.0266 1423.61 80.4596 1423.49 80.3056C1423.42 80.2056 1423.42 80.1626 1423.52 80.1626C1423.59 80.1626 1423.62 80.0766 1423.59 79.9556C1423.56 79.8346 1423.57 79.7376 1423.61 79.7376C1423.71 79.7376 1423.82 79.2906 1423.9 78.6146C1423.92 78.2549 1423.97 77.8973 1424.05 77.5446C1424.19 77.1225 1424.26 76.6795 1424.25 76.2346C1424.19 76.1926 1424.24 76.0166 1424.31 75.8516C1424.36 75.7717 1424.39 75.6832 1424.4 75.5915C1424.41 75.4997 1424.4 75.4066 1424.38 75.3176C1424.28 75.0436 1424.36 74.3906 1424.49 74.3906C1424.54 74.3906 1424.59 74.2596 1424.59 74.0976C1424.6 73.872 1424.63 73.648 1424.69 73.4296C1424.76 73.0403 1424.82 72.6465 1424.84 72.2506C1424.9 71.3506 1424.97 71.0746 1425.19 71.0746C1425.28 71.0746 1425.38 70.9326 1425.41 70.7566C1425.5 70.3316 1425.82 70.3206 1425.92 70.7256C1425.97 70.8898 1426.04 71.0448 1426.14 71.1836C1426.29 71.3566 1426.37 71.9236 1426.45 73.4296C1426.47 73.9301 1426.53 74.4288 1426.61 74.9236C1426.69 75.2976 1426.73 75.6785 1426.73 76.0606C1426.74 76.4733 1426.77 76.8849 1426.84 77.2926C1426.92 77.878 1426.96 78.4691 1426.96 79.0606C1426.93 79.4807 1426.96 79.9028 1427.05 80.3146C1427.14 80.729 1427.2 81.1535 1427.2 81.5796C1427.24 82.2356 1427.31 83.2166 1427.34 83.7416C1427.37 84.2666 1427.39 85.0066 1427.38 85.3676C1427.36 85.6856 1427.4 86.0057 1427.5 86.3066C1427.63 86.6605 1427.65 87.041 1427.57 87.4066C1427.5 88.1066 1427.51 88.2586 1427.69 88.4986C1427.92 89.0307 1427.98 89.6193 1427.87 90.1886C1427.85 90.2436 1427.85 90.3026 1427.85 90.3613C1427.86 90.4199 1427.87 90.4764 1427.91 90.5266C1427.99 90.7698 1428.03 91.0241 1428.04 91.2806C1428.05 91.5736 1428.1 91.8146 1428.15 91.8146C1428.19 91.8146 1428.22 91.8816 1428.22 91.9686C1428.27 92.1259 1428.36 92.2679 1428.48 92.3816C1428.64 92.5576 1428.69 92.6816 1428.61 92.6996C1428.49 93.1608 1428.49 93.6485 1428.63 94.1076C1428.7 94.2607 1428.74 94.4271 1428.75 94.5966C1428.77 94.8179 1428.83 95.0346 1428.91 95.2416C1429 95.4481 1429.03 95.6738 1429 95.8956C1428.98 96.1136 1429 96.3226 1429.07 96.3536C1429.22 96.4536 1429.23 96.8456 1429.07 96.8456C1429 96.8456 1429 96.9126 1429.07 97.0526C1429.15 97.1815 1429.19 97.3315 1429.19 97.4834C1429.18 97.6352 1429.13 97.782 1429.04 97.9046C1428.99 97.9745 1428.94 98.0547 1428.92 98.1405C1428.9 98.2263 1428.89 98.3161 1428.9 98.4046C1428.91 98.4911 1428.91 98.5799 1428.89 98.6647C1428.87 98.7495 1428.82 98.8285 1428.77 98.896C1428.71 98.9635 1428.64 99.018 1428.56 99.0558C1428.48 99.0935 1428.4 99.1136 1428.31 99.1146C1428.14 99.1226 1428.06 99.1896 1428.08 99.2656C1428.14 99.4196 1427.8 99.6256 1427.46 99.6256C1427.24 99.6428 1427.02 99.6793 1426.8 99.7346L1426.4 99.8436L1426.44 101.044C1426.39 101.582 1426.48 102.125 1426.71 102.614C1426.98 103.064 1427 103.293 1426.78 103.477C1426.53 103.684 1426.58 103.877 1426.89 103.815C1426.95 103.812 1427.01 103.789 1427.06 103.75C1427.11 103.711 1427.15 103.657 1427.16 103.597C1427.16 103.455 1427.18 103.443 1427.25 103.563C1427.29 103.61 1427.34 103.643 1427.4 103.657C1427.45 103.671 1427.51 103.665 1427.57 103.641C1427.73 103.585 1427.82 103.619 1427.87 103.728C1427.94 103.912 1428.23 103.968 1428.23 103.792C1428.23 103.763 1428.24 103.737 1428.26 103.717C1428.28 103.697 1428.31 103.685 1428.34 103.683C1428.4 103.683 1428.45 103.783 1428.45 103.901C1428.44 103.93 1428.45 103.96 1428.46 103.988C1428.47 104.016 1428.48 104.042 1428.5 104.064C1428.52 104.085 1428.55 104.102 1428.58 104.114C1428.6 104.125 1428.63 104.13 1428.66 104.13C1428.77 104.141 1428.93 104.152 1429 104.164C1429.69 104.885 1430.44 105.354 1428.98 105.256C1427.77 105.097 1426.56 105.068 1425.35 105.169C1423.19 105.158 1410.58 105.233 1408.55 104.959L1408.52 104.966Z" fill="#1B023F"/> -<path d="M1308.63 141.923C1308.63 141.314 1304.91 140.736 1308.93 138.487C1309.06 138.814 1310.08 138.16 1310.28 138.138C1310.84 138.071 1311 137.973 1310.95 137.702C1310.93 137.537 1310.96 137.402 1311.07 137.353C1311.11 137.326 1311.15 137.286 1311.17 137.238C1311.18 137.191 1311.19 137.138 1311.17 137.09C1311.11 136.97 1311.16 136.914 1311.26 136.914C1311.38 136.914 1311.41 136.752 1311.4 136.14C1311.4 135.715 1311.37 135.419 1311.34 135.497C1311.3 135.584 1311.23 135.597 1311.09 135.517C1310.99 135.464 1310.89 135.442 1310.85 135.475C1310.82 135.508 1310.7 135.408 1310.58 135.257C1310.46 135.106 1310.32 134.983 1310.26 134.983C1310.11 134.983 1310.02 134.72 1310.02 134.307C1310.02 134.134 1309.99 133.964 1309.92 133.807C1309.85 133.707 1309.86 133.622 1309.95 133.578C1310.05 133.514 1310.05 133.491 1309.94 133.491C1309.8 132.732 1309.83 131.953 1310.04 131.209C1310.1 130.993 1310.11 130.767 1310.09 130.544C1310.07 130.507 1310.07 130.464 1310.08 130.425C1310.09 130.385 1310.11 130.35 1310.14 130.326C1310.23 130.074 1310.26 129.806 1310.23 129.541C1310.2 129.24 1310.22 128.937 1310.28 128.641C1310.4 128.359 1310.48 128.062 1310.51 127.758C1310.54 127.585 1310.56 126.984 1310.57 126.425C1310.56 126 1310.6 125.577 1310.68 125.16C1310.78 124.539 1310.82 123.911 1310.82 123.283C1310.91 120.448 1310.99 118.364 1311.05 117.925C1311.14 117.125 1311.14 117.065 1311.05 116.813C1310.99 116.671 1311.01 116.584 1311.06 116.613C1311.12 116.642 1311.16 116.35 1311.17 115.957C1311.18 115.564 1311.21 114.812 1311.25 114.278C1311.28 113.744 1311.35 112.401 1311.41 111.278C1311.52 109.311 1311.67 108.462 1311.93 108.378C1312 108.344 1312.05 108.431 1312.05 108.551C1312.07 108.689 1312.12 108.82 1312.22 108.923C1312.44 109.544 1312.53 110.205 1312.49 110.864C1312.49 110.984 1312.54 111.364 1312.6 111.716C1312.68 112.246 1312.74 112.78 1312.76 113.316C1312.8 113.849 1312.83 114.428 1312.85 114.604C1312.87 114.78 1312.93 115.204 1312.95 115.554C1313.05 116.699 1313.15 117.278 1313.28 117.354C1313.36 117.421 1313.36 117.463 1313.28 117.519C1313.24 117.557 1313.21 117.604 1313.2 117.655C1313.19 117.706 1313.19 117.76 1313.2 117.812C1313.22 117.932 1313.27 118.533 1313.29 119.145C1313.33 120.357 1313.35 120.519 1313.49 120.726C1313.53 120.804 1313.52 120.857 1313.47 120.857C1313.41 120.857 1313.38 121.251 1313.39 121.796C1313.43 123.17 1313.43 123.14 1313.61 123.061C1313.78 122.982 1313.82 123.117 1313.65 123.29C1313.52 123.421 1313.62 123.857 1313.78 123.857C1313.84 123.857 1313.8 123.969 1313.72 124.097C1313.59 124.297 1313.56 124.597 1313.6 125.561C1313.59 125.991 1313.64 126.42 1313.74 126.838C1313.8 126.936 1313.82 127.053 1313.79 127.165C1313.69 127.803 1313.68 128.454 1313.77 129.095C1313.83 129.095 1313.85 129.162 1313.82 129.249C1313.79 129.57 1313.81 129.893 1313.87 130.21C1314.07 131.476 1314.07 131.573 1313.91 131.956C1313.84 132.14 1313.81 132.305 1313.86 132.305C1313.97 132.305 1313.93 133.026 1313.78 133.635C1313.51 134.783 1313.41 135.088 1313.35 135.088C1313.31 135.088 1313.2 135.208 1313.13 135.351C1313 135.545 1312.8 135.684 1312.57 135.742C1312.17 135.862 1312.17 135.873 1312.17 136.429C1312.17 136.909 1312.21 137.01 1312.44 137.161C1312.61 137.272 1312.73 137.427 1312.81 137.608C1312.9 137.837 1312.94 137.848 1313.11 137.739C1313.41 137.555 1313.92 137.784 1313.85 138.077C1313.81 138.208 1313.83 138.264 1313.93 138.219C1313.97 138.208 1314.01 138.21 1314.05 138.223C1314.09 138.237 1314.13 138.261 1314.15 138.294C1314.21 138.394 1314.25 138.383 1314.32 138.286C1314.38 138.166 1314.45 138.166 1314.66 138.286C1315.08 138.47 1314.92 138.339 1315.51 138.579C1315.45 138.744 1315.66 138.864 1315.82 138.755C1316.04 138.635 1316.55 138.601 1316.55 138.722C1316.55 138.786 1316.61 138.809 1316.66 138.764C1316.7 138.74 1316.72 138.704 1316.73 138.664C1316.74 138.624 1316.73 138.582 1316.72 138.546C1316.69 138.47 1316.7 138.406 1316.76 138.406C1316.82 138.406 1316.89 138.493 1316.92 138.606C1316.97 138.768 1317.04 138.79 1317.27 138.737C1317.56 138.659 1317.56 138.648 1317.59 137.525C1317.65 137.124 1317.63 136.716 1317.52 136.325C1317.46 136.283 1317.4 136.294 1317.4 136.347C1317.4 136.565 1316.63 136.336 1316.29 136.02C1315.69 135.442 1315.63 134.24 1316.06 131.578C1316.17 131.181 1316.2 130.764 1316.14 130.357C1316.07 130.29 1316.12 130.128 1316.26 129.888C1316.54 129.201 1316.66 128.455 1316.58 127.715C1316.58 127.364 1316.64 127.014 1316.74 126.679C1316.84 126.344 1316.87 125.988 1316.8 125.643C1316.76 125.076 1316.77 124.782 1316.87 124.673C1316.98 124.284 1317.02 123.876 1316.98 123.473C1316.96 122.142 1317.02 120.811 1317.18 119.489C1317.24 119.277 1317.27 119.055 1317.25 118.835C1317.23 118.573 1317.3 117.492 1317.38 116.435C1317.45 115.378 1317.55 114.1 1317.58 113.6C1317.59 112.853 1317.69 112.109 1317.87 111.385C1318.02 110.829 1318.23 110.717 1318.33 111.145C1318.36 111.318 1318.44 111.438 1318.48 111.408C1318.6 111.33 1318.7 111.746 1318.7 112.389C1318.72 112.873 1318.78 113.355 1318.88 113.83C1318.96 114.21 1319.01 114.597 1319.03 114.986C1318.99 115.291 1319.01 115.601 1319.07 115.902C1319.11 116.131 1319.15 116.469 1319.16 116.645C1319.17 116.794 1319.2 116.941 1319.25 117.081C1319.31 117.317 1319.33 117.559 1319.33 117.802C1319.34 118.121 1319.38 118.438 1319.45 118.749C1319.51 118.881 1319.52 119.025 1319.5 119.165C1319.49 119.178 1319.49 119.193 1319.48 119.209C1319.48 119.224 1319.49 119.24 1319.49 119.254C1319.5 119.269 1319.5 119.282 1319.51 119.293C1319.53 119.304 1319.54 119.313 1319.55 119.319C1319.58 119.346 1319.6 119.381 1319.61 119.42C1319.62 119.46 1319.61 119.5 1319.6 119.537C1319.57 119.778 1319.59 120.022 1319.65 120.258C1319.74 120.638 1319.74 120.825 1319.66 120.858C1319.65 120.863 1319.64 120.872 1319.63 120.882C1319.62 120.893 1319.61 120.906 1319.61 120.919C1319.6 120.933 1319.6 120.947 1319.6 120.961C1319.6 120.975 1319.61 120.989 1319.62 121.001C1319.76 121.932 1319.83 122.874 1319.82 123.817C1319.77 124.376 1319.91 124.935 1320.21 125.409C1320.39 125.54 1320.39 125.551 1320.18 125.727C1319.96 125.903 1319.97 125.987 1320.03 127.113C1320.05 127.579 1320.11 128.043 1320.21 128.499C1320.24 128.555 1320.26 128.619 1320.26 128.685C1320.26 128.75 1320.24 128.814 1320.21 128.871C1320.13 129.358 1320.12 129.854 1320.2 130.343C1320.23 130.548 1320.26 130.757 1320.26 130.966C1320.26 131.232 1320.31 131.496 1320.42 131.74C1320.5 131.84 1320.53 132.111 1320.47 132.558C1320.44 132.93 1320.41 133.321 1320.41 133.441C1320.41 134.206 1320.39 134.413 1320.3 134.522C1320.2 134.722 1320.14 134.936 1320.12 135.156C1320.06 135.498 1319.91 135.818 1319.69 136.083C1319.46 136.348 1319.17 136.548 1318.84 136.662C1318.52 136.726 1318.48 136.771 1318.46 137.12C1318.44 137.572 1318.46 138.025 1318.54 138.472C1318.56 138.592 1318.58 138.855 1318.59 139.061C1318.6 139.267 1318.64 139.361 1318.66 139.301C1318.75 139.094 1319 139.136 1319.07 139.376C1319.12 139.496 1319.21 139.594 1319.29 139.594C1319.52 139.594 1319.49 139.804 1319.26 139.815C1319.12 139.823 1319.13 139.846 1319.31 139.924C1319.44 139.966 1319.55 140.086 1319.55 140.164C1319.55 140.513 1321.6 140.764 1321.8 140.446C1321.85 140.359 1321.9 140.346 1321.95 140.435C1322.13 139.924 1323 139.005 1322.84 140.021C1322.97 140.163 1323.12 140.074 1323.07 140.359L1323.04 140.521L1323.34 140.821C1323.64 141.114 1323.94 141.121 1323.94 140.821C1323.94 140.777 1323.96 140.736 1323.99 140.706C1324.02 140.675 1324.06 140.657 1324.1 140.656C1324.2 140.656 1324.24 140.614 1324.21 140.556C1324.18 140.498 1324.21 140.447 1324.28 140.447C1324.34 140.433 1324.39 140.407 1324.44 140.369C1324.49 140.331 1324.53 140.284 1324.56 140.229C1324.59 140.17 1324.64 140.121 1324.7 140.085C1324.76 140.049 1324.82 140.027 1324.89 140.022C1325.13 140.022 1325.24 139.433 1325.26 137.938L1325.27 136.966L1324.73 136.91C1324.26 136.868 1323.62 136.552 1323.62 136.354C1323.62 136.312 1323.55 136.279 1323.47 136.279C1323.26 136.279 1323.01 135.874 1322.87 135.307C1322.81 135.069 1322.72 134.838 1322.61 134.62C1322.4 134.236 1322.34 133.79 1322.44 133.366C1322.53 133.224 1322.51 133.066 1322.39 132.832C1322.28 132.599 1322.22 132.346 1322.22 132.089C1322.22 131.832 1322.28 131.578 1322.39 131.346C1322.53 131.097 1322.6 130.813 1322.59 130.527C1322.59 130.264 1322.63 130.003 1322.71 129.753C1322.79 129.465 1322.83 129.168 1322.83 128.87C1322.85 128.258 1322.82 128.093 1322.64 127.92C1322.53 127.811 1322.49 127.72 1322.54 127.72C1322.74 127.72 1322.86 127.295 1322.93 126.368C1323.04 124.829 1323.03 124.668 1322.74 124.404C1322.51 124.197 1322.51 124.186 1322.71 124.044C1322.83 123.941 1322.91 123.803 1322.95 123.65C1322.96 123.535 1323 123.426 1323.07 123.334C1323.25 123.016 1323.33 122.651 1323.31 122.286C1323.26 122.275 1323.26 122.046 1323.31 121.806C1323.36 121.451 1323.37 121.092 1323.33 120.736C1323.29 120.278 1323.31 120.127 1323.41 120.127C1323.5 120.127 1323.53 119.996 1323.48 119.658C1323.44 119.358 1323.46 119.144 1323.55 119.069C1323.65 118.969 1323.64 118.915 1323.52 118.84C1323.4 118.765 1323.38 118.698 1323.48 118.54C1323.52 118.485 1323.54 118.419 1323.54 118.351C1323.55 118.284 1323.53 118.217 1323.49 118.16C1323.44 118.048 1323.44 117.984 1323.49 117.984C1323.65 117.984 1323.72 117.417 1323.6 117.263C1323.53 117.163 1323.53 117.12 1323.62 117.12C1323.7 117.12 1323.73 117.034 1323.7 116.913C1323.67 116.792 1323.68 116.695 1323.72 116.695C1323.82 116.695 1323.93 116.248 1324.01 115.572C1324.03 115.212 1324.08 114.854 1324.16 114.502C1324.3 114.08 1324.37 113.637 1324.36 113.192C1324.3 113.15 1324.35 112.974 1324.42 112.809C1324.47 112.729 1324.5 112.64 1324.51 112.549C1324.52 112.457 1324.51 112.364 1324.49 112.275C1324.39 112.001 1324.47 111.348 1324.6 111.348C1324.65 111.348 1324.7 111.217 1324.7 111.055C1324.71 110.829 1324.74 110.605 1324.8 110.387C1324.87 109.997 1324.93 109.604 1324.95 109.208C1325 108.308 1325.08 108.032 1325.3 108.032C1325.39 108.032 1325.48 107.89 1325.52 107.714C1325.61 107.289 1325.93 107.278 1326.03 107.683C1326.08 107.847 1326.15 108.002 1326.25 108.141C1326.4 108.314 1326.48 108.881 1326.55 110.387C1326.58 110.887 1326.64 111.386 1326.72 111.881C1326.8 112.255 1326.84 112.636 1326.84 113.018C1326.85 113.43 1326.88 113.842 1326.95 114.25C1327.03 114.835 1327.07 115.426 1327.07 116.018C1327.04 116.438 1327.07 116.86 1327.15 117.272C1327.25 117.686 1327.3 118.111 1327.31 118.537C1327.35 119.193 1327.41 120.174 1327.45 120.699C1327.48 121.224 1327.5 121.964 1327.49 122.325C1327.47 122.643 1327.51 122.963 1327.61 123.264C1327.73 123.618 1327.76 123.998 1327.68 124.364C1327.61 125.064 1327.62 125.216 1327.8 125.456C1328.03 125.988 1328.09 126.576 1327.98 127.146C1327.96 127.201 1327.95 127.26 1327.96 127.318C1327.97 127.377 1327.98 127.433 1328.01 127.484C1328.1 127.727 1328.14 127.981 1328.15 128.238C1328.16 128.531 1328.21 128.772 1328.25 128.772C1328.3 128.772 1328.33 128.839 1328.33 128.926C1328.38 129.083 1328.47 129.225 1328.59 129.339C1328.75 129.515 1328.8 129.639 1328.72 129.657C1328.6 130.118 1328.6 130.606 1328.73 131.065C1328.81 131.218 1328.85 131.384 1328.85 131.554C1328.88 131.775 1328.94 131.992 1329.02 132.199C1329.11 132.405 1329.14 132.631 1329.11 132.853C1329.08 133.071 1329.11 133.28 1329.18 133.311C1329.32 133.411 1329.34 133.803 1329.18 133.803C1329.11 133.803 1329.11 133.87 1329.18 134.01C1329.26 134.139 1329.3 134.289 1329.3 134.44C1329.29 134.592 1329.24 134.739 1329.15 134.862C1329.1 134.932 1329.05 135.012 1329.03 135.097C1329.01 135.183 1329 135.273 1329.01 135.362C1329.02 135.448 1329.02 135.537 1329 135.622C1328.97 135.707 1328.93 135.785 1328.88 135.853C1328.82 135.921 1328.75 135.975 1328.67 136.013C1328.59 136.051 1328.51 136.071 1328.42 136.072C1328.25 136.08 1328.17 136.147 1328.19 136.223C1328.25 136.377 1327.9 136.583 1327.57 136.583C1327.35 136.6 1327.13 136.636 1326.91 136.692L1326.51 136.801L1326.55 138.001C1326.5 138.539 1326.59 139.082 1326.82 139.571C1327.09 140.021 1327.11 140.25 1326.89 140.434C1326.64 140.641 1326.69 140.834 1327 140.772C1327.06 140.769 1327.12 140.746 1327.17 140.707C1327.22 140.668 1327.26 140.614 1327.27 140.554C1327.27 140.412 1327.28 140.4 1327.36 140.52C1327.4 140.567 1327.45 140.6 1327.51 140.614C1327.56 140.628 1327.62 140.622 1327.68 140.598C1327.84 140.542 1327.93 140.576 1327.98 140.685C1328.05 140.869 1328.34 140.925 1328.34 140.749C1328.34 140.72 1328.35 140.694 1328.37 140.674C1328.39 140.654 1328.42 140.642 1328.45 140.64C1328.51 140.64 1328.55 140.74 1328.55 140.858C1328.55 140.887 1328.56 140.917 1328.57 140.945C1328.58 140.973 1328.59 140.999 1328.61 141.021C1328.63 141.042 1328.66 141.059 1328.69 141.071C1328.71 141.082 1328.74 141.087 1328.77 141.087C1328.88 141.098 1329.04 141.109 1329.11 141.121C1329.8 141.842 1330.55 142.311 1329.09 142.213C1327.88 142.054 1326.67 142.025 1325.45 142.126C1323.3 142.115 1310.69 142.19 1308.66 141.916L1308.63 141.923Z" fill="#1B023F"/> -<path d="M1185 168.583L1251.59 149.683L1320.03 128.606L1341.55 122.996H1380.64L1406.5 100.596H1440V184.005L1185 168.583Z" fill="#1B023F"/> -<path d="M666.834 141.229L733.373 139.045L795.773 141.292L774.217 149.953H660.566L666.834 141.229Z" fill="#1B023F"/> -<path d="M740.104 183.899L891.934 184.937C891.754 183.474 891.549 181.987 891.284 180.608C890.516 176.67 890.121 172.668 890.106 168.656V168.474C890.045 167.137 889.675 165.832 889.026 164.661C889.039 164.648 889.05 164.632 889.059 164.615C889.102 164.515 889.075 164.487 889.113 164.41C889.164 164.3 889.183 164.178 889.167 164.059C889.167 163.825 888.8 163.607 888.805 163.228C888.81 162.849 889.39 164.327 889.439 163.818C889.314 163.157 889.001 162.546 888.539 162.057C888.426 162.046 888.491 162.31 888.512 162.391C888.533 162.472 888.499 162.526 888.442 162.523C888.385 162.52 888.299 162.41 888.31 162.302C888.321 162.194 888.361 162.071 888.326 162.033C888.291 161.995 888.302 161.879 888.275 161.779C888.248 161.679 888.194 161.796 888.133 161.707C888.072 161.618 888.114 161.392 888.133 161.289C888.152 161.186 888.112 161.234 888.063 161.244C888.014 161.254 888.047 161.18 887.963 161.197C887.879 161.214 887.903 161.534 887.911 161.629C887.919 161.724 887.895 161.624 887.833 161.702C887.771 161.78 887.86 161.818 887.795 161.989C887.73 162.16 887.864 162.353 887.86 162.489C887.859 162.513 887.852 162.537 887.84 162.558C887.828 162.579 887.811 162.597 887.791 162.61C887.285 161.881 886.731 161.186 886.133 160.531C885.66 160.048 885.159 159.593 884.633 159.169C884.618 159.157 884.606 159.141 884.597 159.124C884.589 159.107 884.584 159.088 884.584 159.068V154.427C884.584 150.837 884.06 149.372 883.612 149.207C883.357 149.114 883.231 148.836 883.112 148.567C882.952 148.209 882.8 147.867 882.372 147.867C881.928 147.878 881.486 147.924 881.049 148.005C880.694 148.073 880.335 148.113 879.974 148.125C879.944 148.125 876.902 148.042 876.701 147.343C876.639 147.156 876.526 146.989 876.375 146.862C876.225 146.734 876.042 146.65 875.847 146.619C875.798 146.619 875.724 146.624 875.63 146.627C875.465 146.635 875.239 146.645 874.991 146.645C874.456 146.678 873.92 146.592 873.422 146.391C870.943 145.69 868.423 145.144 865.876 144.759C865.335 144.691 864.8 144.579 864.276 144.426C863.819 144.278 863.342 144.2 862.862 144.196C862.379 144.216 861.916 144.398 861.549 144.713C861.289 144.944 860.963 145.086 860.617 145.12C860.447 145.125 860.278 145.141 860.11 145.167C859.902 145.199 859.691 145.217 859.48 145.222C858.936 145.215 858.408 145.034 857.975 144.703C857.333 144.252 857.284 144.098 857.321 143.827C857.334 143.714 857.324 143.599 857.292 143.491C857.259 143.382 857.206 143.28 857.134 143.192C857.036 143.03 856.95 142.86 856.876 142.685C856.691 142.257 856.483 143.015 854.619 142.685L854.288 142.625V142.158H852.472V141.284H851.63L805.973 141.102L795.058 141.326V141.309H793.241V142.182H791.932C791.847 142.19 791.765 142.193 791.684 142.193C791.584 142.193 791.484 142.189 791.384 142.186C791.284 142.183 791.202 142.176 791.113 142.176C790.992 142.176 790.857 142.181 790.713 142.184C790.551 142.189 790.381 142.193 790.213 142.193C789.532 142.193 789.219 142.104 789.136 141.882C789.008 141.549 785.503 141.835 785.523 141.244C785.524 141.213 785.536 141.183 785.557 141.16C785.599 141.115 785.635 141.066 785.665 141.013H784.005C783.905 141.013 783.781 141.004 783.633 140.994C783.456 140.981 783.254 140.968 783.062 140.968C782.632 140.968 782.469 141.041 782.41 141.103C782.098 141.431 781.48 141.431 780.826 141.431C780.592 141.422 780.358 141.399 780.126 141.36C779.814 141.31 779.498 141.281 779.181 141.273C778.925 141.26 778.671 141.309 778.438 141.416C778.312 141.484 778.17 141.518 778.027 141.516C777.763 141.495 777.504 141.426 777.265 141.311C776.772 141.089 776.239 140.971 775.698 140.964C775.221 140.967 774.745 140.995 774.271 141.05C774.054 141.071 773.885 141.088 773.75 141.088C773.65 141.088 773.403 141.089 773.327 140.883C773.225 140.701 773.073 140.552 772.889 140.453C772.705 140.355 772.497 140.311 772.289 140.328C772.175 140.329 772.062 140.34 771.95 140.362C771.512 140.447 771.441 140.713 771.369 140.994C771.307 141.223 771.241 141.48 770.946 141.542C770.889 141.555 770.83 141.561 770.771 141.561C770.589 141.55 770.409 141.517 770.235 141.461C769.948 141.374 769.65 141.327 769.35 141.322C769.143 141.323 768.936 141.346 768.733 141.391C768.412 141.46 768.087 141.507 767.759 141.531C767.201 141.582 767.11 141.611 767.11 141.89C767.106 142.108 767.068 142.324 766.999 142.531C766.918 142.799 766.928 142.818 767.036 142.867C767.427 143.048 770.968 143.477 770.89 144.628C770.888 144.659 770.875 144.689 770.852 144.711C770.829 144.733 770.799 144.746 770.767 144.747H762.301C758.145 144.747 755.948 145.475 755.948 146.847C755.948 147.714 755.203 147.713 754.848 147.713C754.713 147.713 754.57 147.706 754.418 147.701C754.266 147.696 754.101 147.687 753.939 147.687C753.604 147.636 753.262 147.69 752.959 147.843C752.657 147.996 752.41 148.239 752.252 148.539C752.011 149.541 752.005 150.585 752.235 151.589C752.52 153.923 752.835 156.568 750.54 157.372C747.264 158.517 745.776 163.227 745.702 163.472C745.648 163.862 744.268 173.925 742.667 179.127C742.027 180.846 741.155 182.47 740.074 183.953" fill="#1B023F"/> -<path d="M636.103 183.899L787.933 184.937C787.753 183.474 787.548 181.987 787.283 180.608C786.515 176.67 786.12 172.668 786.105 168.656V168.474C786.044 167.137 785.674 165.832 785.025 164.661C785.038 164.648 785.049 164.632 785.058 164.615C785.101 164.515 785.074 164.487 785.112 164.41C785.163 164.3 785.182 164.178 785.166 164.059C785.166 163.825 784.799 163.607 784.804 163.228C784.809 162.849 785.389 164.327 785.438 163.818C785.313 163.157 785 162.546 784.538 162.057C784.425 162.046 784.49 162.31 784.511 162.391C784.532 162.472 784.498 162.526 784.441 162.523C784.384 162.52 784.298 162.41 784.309 162.302C784.32 162.194 784.36 162.071 784.325 162.033C784.29 161.995 784.301 161.879 784.274 161.779C784.247 161.679 784.193 161.796 784.132 161.707C784.071 161.618 784.113 161.392 784.132 161.289C784.151 161.186 784.111 161.234 784.062 161.244C784.013 161.254 784.046 161.18 783.962 161.197C783.878 161.214 783.902 161.534 783.91 161.629C783.918 161.724 783.894 161.624 783.832 161.702C783.77 161.78 783.859 161.818 783.794 161.989C783.729 162.16 783.863 162.353 783.859 162.489C783.858 162.513 783.851 162.537 783.839 162.558C783.827 162.579 783.81 162.597 783.79 162.61C783.284 161.881 782.73 161.186 782.132 160.531C781.659 160.048 781.158 159.593 780.632 159.169C780.617 159.157 780.605 159.141 780.596 159.124C780.588 159.107 780.583 159.088 780.583 159.068V154.427C780.583 150.837 780.059 149.372 779.611 149.207C779.356 149.114 779.23 148.836 779.111 148.567C778.951 148.209 778.799 147.867 778.371 147.867C777.927 147.878 777.485 147.924 777.048 148.005C776.693 148.073 776.334 148.113 775.973 148.125C775.943 148.125 772.901 148.043 772.7 147.344C772.638 147.156 772.525 146.989 772.375 146.862C772.224 146.734 772.041 146.65 771.846 146.619C771.797 146.619 771.723 146.624 771.629 146.627C771.464 146.635 771.238 146.645 770.99 146.645C770.455 146.678 769.919 146.592 769.421 146.391C766.942 145.69 764.422 145.144 761.875 144.759C761.334 144.691 760.799 144.579 760.275 144.426C759.818 144.278 759.341 144.2 758.861 144.196C758.378 144.216 757.915 144.398 757.548 144.714C757.288 144.944 756.962 145.086 756.616 145.12C756.446 145.125 756.277 145.141 756.109 145.167C755.901 145.199 755.69 145.217 755.479 145.222C754.935 145.215 754.407 145.034 753.974 144.703C753.332 144.252 753.283 144.098 753.32 143.827C753.333 143.714 753.323 143.599 753.291 143.491C753.258 143.382 753.205 143.28 753.133 143.193C753.035 143.03 752.949 142.86 752.875 142.685C752.69 142.257 752.651 142.167 750.787 141.837L750.456 141.776V141.31H748.64V140.436H747.798C687.857 143.904 666.838 144.75 658.309 144.75C654.153 144.75 651.956 145.479 651.956 146.851C651.956 147.718 651.211 147.718 650.856 147.718C650.721 147.718 650.578 147.71 650.426 147.705C650.274 147.7 650.109 147.692 649.947 147.692C649.612 147.64 649.27 147.694 648.968 147.847C648.665 148 648.418 148.243 648.26 148.542C648.019 149.545 648.013 150.589 648.243 151.594C648.528 153.928 648.843 156.571 646.548 157.375C643.272 158.52 641.784 163.231 641.71 163.476C641.656 163.866 640.276 173.928 638.675 179.13C638.035 180.85 637.163 182.474 636.082 183.957" fill="#1B023F"/> -<path d="M699.892 183.9L548.062 184.938C548.243 183.474 548.447 181.988 548.712 180.609C549.481 176.671 549.875 172.669 549.89 168.656V168.475C549.952 167.139 550.321 165.834 550.97 164.663C550.957 164.65 550.946 164.634 550.938 164.618C550.895 164.518 550.921 164.488 550.883 164.411C550.832 164.302 550.813 164.18 550.829 164.061C550.829 163.827 551.196 163.608 551.191 163.229C551.186 162.85 550.606 164.33 550.557 163.821C550.683 163.159 550.995 162.548 551.457 162.058C551.57 162.047 551.505 162.313 551.484 162.394C551.463 162.475 551.497 162.528 551.554 162.525C551.611 162.522 551.697 162.413 551.686 162.305C551.675 162.197 551.635 162.073 551.67 162.035C551.705 161.997 551.694 161.881 551.721 161.781C551.748 161.681 551.802 161.797 551.863 161.708C551.924 161.619 551.882 161.394 551.863 161.291C551.844 161.188 551.884 161.235 551.933 161.245C551.982 161.255 551.949 161.181 552.033 161.198C552.117 161.215 552.093 161.535 552.085 161.63C552.077 161.725 552.101 161.625 552.163 161.703C552.225 161.781 552.136 161.819 552.201 161.99C552.266 162.161 552.132 162.354 552.136 162.49C552.138 162.515 552.145 162.539 552.156 162.56C552.168 162.581 552.185 162.599 552.205 162.613C552.711 161.883 553.265 161.188 553.863 160.532C554.336 160.05 554.837 159.595 555.363 159.171C555.378 159.159 555.391 159.143 555.399 159.126C555.408 159.109 555.412 159.09 555.412 159.071V154.428C555.412 150.838 555.936 149.373 556.384 149.208C556.639 149.115 556.765 148.837 556.884 148.568C557.044 148.21 557.198 147.869 557.625 147.869C558.069 147.879 558.511 147.926 558.948 148.008C559.302 148.075 559.662 148.114 560.022 148.126C560.052 148.126 563.094 148.044 563.295 147.345C563.358 147.158 563.47 146.991 563.621 146.864C563.771 146.736 563.954 146.652 564.149 146.62C564.198 146.62 564.272 146.626 564.366 146.629C564.531 146.637 564.757 146.646 565.005 146.646C565.541 146.68 566.077 146.594 566.574 146.394C569.053 145.692 571.573 145.146 574.12 144.76C574.662 144.693 575.197 144.581 575.72 144.427C576.177 144.28 576.654 144.202 577.134 144.198C577.618 144.218 578.08 144.4 578.448 144.715C578.708 144.945 579.034 145.088 579.379 145.123C579.549 145.127 579.719 145.143 579.886 145.17C580.095 145.201 580.305 145.219 580.516 145.224C581.061 145.217 581.589 145.036 582.021 144.706C582.663 144.255 582.712 144.099 582.675 143.828C582.663 143.716 582.673 143.602 582.705 143.493C582.737 143.384 582.79 143.282 582.862 143.194C582.961 143.032 583.047 142.862 583.12 142.687C583.305 142.259 583.344 142.169 585.208 141.839L585.539 141.779V141.312H587.355V140.438H588.198L613.945 140.628H614.787V141.501H616.604V142.375H617.904V144.088C617.989 144.096 618.071 144.099 618.152 144.099C618.252 144.099 618.352 144.095 618.452 144.092C618.552 144.089 618.634 144.082 618.723 144.082C618.844 144.082 618.979 144.086 619.123 144.089C619.285 144.094 619.455 144.099 619.623 144.099C620.304 144.099 620.617 144.009 620.7 143.787V143.188L620.689 142.837L620.679 142.494C620.678 142.462 620.666 142.432 620.646 142.409C620.604 142.364 620.567 142.315 620.537 142.261C649.583 142.147 658.637 141.234 667.169 141.234C671.325 141.234 684.046 145.486 684.046 146.863C684.046 147.73 684.791 147.729 685.146 147.729C685.281 147.729 685.424 147.722 685.576 147.717C685.728 147.712 685.893 147.703 686.055 147.703C686.39 147.652 686.733 147.706 687.035 147.859C687.338 148.012 687.585 148.255 687.742 148.555C687.983 149.557 687.989 150.601 687.759 151.605C687.474 153.939 687.159 156.583 689.454 157.387C692.73 158.532 694.218 163.243 694.292 163.488C694.346 163.878 695.726 173.94 697.327 179.142C697.967 180.862 698.84 182.486 699.92 183.969" fill="#1B023F"/> -<path d="M945.83 184.325L794 184.939C794.171 184.075 794.388 183.22 794.65 182.379C795.41 180.1 795.808 177.715 795.828 175.311V175.204C795.918 174.351 796.3 173.555 796.908 172.95C796.896 172.943 796.884 172.933 796.875 172.922C796.832 172.866 796.859 172.846 796.821 172.8C796.783 172.754 796.767 172.731 796.767 172.592C796.767 172.453 797.134 172.325 797.129 172.1C797.124 171.875 796.544 172.752 796.495 172.45C796.446 172.148 797.283 171.414 797.395 171.408C797.507 171.402 797.443 171.558 797.422 171.608C797.401 171.658 797.435 171.687 797.492 171.686C797.549 171.685 797.635 171.62 797.624 171.556C797.613 171.492 797.573 171.419 797.608 171.396C797.643 171.373 797.632 171.305 797.659 171.246C797.686 171.187 797.74 171.256 797.801 171.203C797.862 171.15 797.82 171.016 797.801 170.955C797.782 170.894 797.822 170.922 797.871 170.929C797.92 170.936 797.887 170.891 797.971 170.901C798.055 170.911 798.031 171.101 798.023 171.156C798.015 171.211 798.039 171.156 798.101 171.199C798.163 171.242 798.074 171.267 798.139 171.369C798.204 171.471 798.07 171.584 798.074 171.664C798.074 171.697 798.105 171.718 798.143 171.736C798.669 171.291 799.222 170.881 799.801 170.506C800.465 170.096 801.301 169.706 801.301 169.701C801.333 169.686 801.35 169.665 801.35 169.64V166.895C801.35 164.772 801.874 163.906 802.322 163.808C802.531 163.753 802.711 163.617 802.822 163.43C802.895 163.3 803.003 163.193 803.134 163.12C803.264 163.047 803.413 163.012 803.562 163.018C804.01 163.018 804.455 163.059 804.885 163.1C805.269 163.137 805.633 163.17 805.96 163.17C805.99 163.17 809.032 163.121 809.233 162.708C809.335 162.578 809.464 162.472 809.612 162.398C809.759 162.324 809.922 162.284 810.087 162.28C810.136 162.28 810.21 162.28 810.304 162.28C810.469 162.28 810.695 162.291 810.943 162.291C811.47 162.312 811.998 162.262 812.512 162.142C813.171 161.942 818.547 161.289 820.058 161.176C820.781 161.123 821.248 161.046 821.658 160.976C822.124 160.888 822.597 160.843 823.072 160.84C823.527 160.845 823.975 160.95 824.385 161.147C824.676 161.291 824.993 161.373 825.317 161.388C825.479 161.388 825.646 161.402 825.824 161.416C826.024 161.431 826.224 161.448 826.454 161.448C826.971 161.45 827.483 161.346 827.959 161.142C828.601 160.875 828.65 160.784 828.613 160.623C828.598 160.551 828.579 160.461 828.8 160.248C828.895 160.156 828.981 160.056 829.058 159.948C829.243 159.695 829.282 159.642 831.146 159.448L831.477 159.413V159.137H833.293V158.62H890.877V159.137H892.694V159.653H893.994V160.666C894.079 160.666 894.161 160.673 894.242 160.673C894.342 160.673 894.442 160.673 894.542 160.673C894.642 160.673 894.724 160.667 894.813 160.667C894.934 160.667 895.069 160.667 895.213 160.667C895.375 160.667 895.545 160.673 895.713 160.673C896.394 160.673 896.707 160.62 896.79 160.488C896.867 159.726 896.871 158.958 896.8 158.194C896.798 158.184 896.795 158.174 896.789 158.165C896.783 158.157 896.775 158.149 896.766 158.144C896.726 158.12 896.69 158.091 896.658 158.057H898.318C898.418 158.057 898.542 158.057 898.69 158.047C898.867 158.039 899.069 158.032 899.261 158.032C899.481 158.01 899.704 158.037 899.913 158.111C900.42 158.294 900.961 158.36 901.497 158.305C901.691 158.305 901.935 158.285 902.197 158.264C902.497 158.24 902.832 158.212 903.142 158.212C903.392 158.204 903.643 158.233 903.885 158.297C904.018 158.339 904.157 158.359 904.296 158.358C904.554 158.347 904.809 158.306 905.058 158.236C905.57 158.104 906.096 158.037 906.625 158.036C907.225 158.036 907.705 158.065 908.052 158.086C908.269 158.098 908.438 158.109 908.573 158.109C908.673 158.109 908.92 158.109 908.996 157.987C909.136 157.862 909.301 157.769 909.48 157.712C909.659 157.656 909.848 157.638 910.034 157.659C910.147 157.66 910.26 157.667 910.373 157.679C910.811 157.73 910.882 157.887 910.954 158.053C910.982 158.145 911.038 158.225 911.114 158.283C911.189 158.342 911.281 158.375 911.377 158.378C911.435 158.386 911.493 158.39 911.552 158.389C911.732 158.384 911.911 158.364 912.088 158.331C912.38 158.279 912.676 158.252 912.973 158.248C913.179 158.249 913.385 158.262 913.59 158.289C913.984 158.341 914.303 158.358 914.564 158.371C915.122 158.402 915.213 158.418 915.213 158.583C915.218 158.717 915.257 158.848 915.324 158.963C915.405 159.122 915.395 159.132 915.287 159.163C914.896 159.27 914.97 160.427 915.049 161.108C915.049 161.148 915.108 161.178 915.172 161.178H923.638C927.794 161.178 929.991 161.608 929.991 162.423C929.991 162.935 930.736 162.935 931.091 162.935C931.226 162.935 931.369 162.935 931.521 162.927C931.673 162.919 931.838 162.919 932 162.919C932.301 162.876 932.607 162.898 932.898 162.985C933.189 163.071 933.458 163.219 933.687 163.419C933.994 163.8 933.854 164.491 933.704 165.219C933.419 166.599 933.104 168.162 935.399 168.638C936.412 168.87 937.365 169.311 938.198 169.931C939.031 170.552 939.725 171.34 940.237 172.244C940.951 175.42 941.967 178.52 943.272 181.502C943.978 182.586 944.854 183.55 945.865 184.356" fill="#1B023F"/> -<path d="M501.83 184.325L350 184.939C350.171 184.075 350.388 183.22 350.65 182.379C351.41 180.1 351.808 177.715 351.828 175.311V175.204C351.918 174.351 352.3 173.555 352.908 172.95C352.896 172.943 352.884 172.933 352.875 172.922C352.832 172.866 352.859 172.846 352.821 172.8C352.783 172.754 352.767 172.731 352.767 172.592C352.767 172.453 353.134 172.325 353.129 172.1C353.124 171.875 352.544 172.752 352.495 172.45C352.446 172.148 353.283 171.414 353.395 171.408C353.507 171.402 353.443 171.558 353.422 171.608C353.401 171.658 353.435 171.687 353.492 171.686C353.549 171.685 353.635 171.62 353.624 171.556C353.613 171.492 353.573 171.419 353.608 171.396C353.643 171.373 353.632 171.305 353.659 171.246C353.686 171.187 353.74 171.256 353.801 171.203C353.862 171.15 353.82 171.016 353.801 170.955C353.782 170.894 353.822 170.922 353.871 170.929C353.92 170.936 353.887 170.891 353.971 170.901C354.055 170.911 354.031 171.101 354.023 171.156C354.015 171.211 354.039 171.156 354.101 171.199C354.163 171.242 354.074 171.267 354.139 171.369C354.204 171.471 354.07 171.584 354.074 171.664C354.074 171.697 354.105 171.718 354.143 171.736C354.669 171.291 355.222 170.881 355.801 170.506C356.465 170.096 357.301 169.706 357.301 169.701C357.333 169.686 357.35 169.665 357.35 169.64V166.895C357.35 164.772 357.874 163.906 358.322 163.808C358.531 163.753 358.711 163.617 358.822 163.43C358.895 163.3 359.003 163.193 359.134 163.12C359.264 163.047 359.413 163.012 359.562 163.018C360.01 163.018 360.455 163.059 360.885 163.1C361.269 163.137 361.633 163.17 361.96 163.17C361.99 163.17 365.032 163.121 365.233 162.708C365.335 162.578 365.464 162.472 365.612 162.398C365.759 162.324 365.922 162.284 366.087 162.28C366.136 162.28 366.21 162.28 366.304 162.28C366.469 162.28 366.695 162.291 366.943 162.291C367.47 162.312 367.998 162.262 368.512 162.142C369.171 161.942 374.547 161.289 376.058 161.176C376.781 161.123 377.248 161.046 377.658 160.976C378.124 160.888 378.597 160.843 379.072 160.84C379.527 160.845 379.975 160.95 380.385 161.147C380.676 161.291 380.993 161.373 381.317 161.388C381.479 161.388 381.646 161.402 381.824 161.416C382.024 161.431 382.224 161.448 382.454 161.448C382.971 161.45 383.483 161.346 383.959 161.142C384.601 160.875 384.65 160.784 384.613 160.623C384.598 160.551 384.579 160.461 384.8 160.248C384.895 160.156 384.981 160.056 385.058 159.948C385.243 159.695 385.282 159.642 387.146 159.448L387.477 159.413V159.137H389.293V158.62H446.877V159.137H448.694V159.653H449.994V160.666C450.079 160.666 450.161 160.673 450.242 160.673C450.342 160.673 450.442 160.673 450.542 160.673C450.642 160.673 450.724 160.667 450.813 160.667C450.934 160.667 451.069 160.667 451.213 160.667C451.375 160.667 451.545 160.673 451.713 160.673C452.394 160.673 452.707 160.62 452.79 160.488C452.867 159.726 452.871 158.958 452.8 158.194C452.798 158.184 452.795 158.174 452.789 158.165C452.783 158.157 452.775 158.149 452.766 158.144C452.726 158.12 452.69 158.091 452.658 158.057H454.318C454.418 158.057 454.542 158.057 454.69 158.047C454.867 158.039 455.069 158.032 455.261 158.032C455.481 158.01 455.704 158.037 455.913 158.111C456.42 158.294 456.961 158.36 457.497 158.305C457.691 158.305 457.935 158.285 458.197 158.264C458.497 158.24 458.832 158.212 459.142 158.212C459.392 158.204 459.643 158.233 459.885 158.297C460.018 158.339 460.157 158.359 460.296 158.358C460.554 158.347 460.809 158.306 461.058 158.236C461.57 158.104 462.096 158.037 462.625 158.036C463.225 158.036 463.705 158.065 464.052 158.086C464.269 158.098 464.438 158.109 464.573 158.109C464.673 158.109 464.92 158.109 464.996 157.987C465.136 157.862 465.301 157.769 465.48 157.712C465.659 157.656 465.848 157.638 466.034 157.659C466.147 157.66 466.26 157.667 466.373 157.679C466.811 157.73 466.882 157.887 466.954 158.053C466.982 158.145 467.038 158.225 467.114 158.283C467.189 158.342 467.281 158.375 467.377 158.378C467.435 158.386 467.493 158.39 467.552 158.389C467.732 158.384 467.911 158.364 468.088 158.331C468.38 158.279 468.676 158.252 468.973 158.248C469.179 158.249 469.385 158.262 469.59 158.289C469.984 158.341 470.303 158.358 470.564 158.371C471.122 158.402 471.213 158.418 471.213 158.583C471.218 158.717 471.257 158.848 471.324 158.963C471.405 159.122 471.395 159.132 471.287 159.163C470.896 159.27 470.97 160.427 471.049 161.108C471.049 161.148 471.108 161.178 471.172 161.178H479.638C483.794 161.178 485.991 161.608 485.991 162.423C485.991 162.935 486.736 162.935 487.091 162.935C487.226 162.935 487.369 162.935 487.521 162.927C487.673 162.919 487.838 162.919 488 162.919C488.301 162.876 488.607 162.898 488.898 162.985C489.189 163.071 489.458 163.219 489.687 163.419C489.994 163.8 489.854 164.491 489.704 165.219C489.419 166.599 489.104 168.162 491.399 168.638C492.412 168.87 493.365 169.311 494.198 169.931C495.031 170.552 495.725 171.34 496.237 172.244C496.951 175.42 497.967 178.52 499.272 181.502C499.978 182.586 500.854 183.55 501.865 184.356" fill="#1B023F"/> -<path d="M382.83 184.325L231 184.939C231.171 184.075 231.388 183.22 231.65 182.379C232.41 180.1 232.808 177.715 232.828 175.311V175.204C232.918 174.351 233.3 173.555 233.908 172.95C233.896 172.943 233.884 172.933 233.875 172.922C233.832 172.866 233.859 172.846 233.821 172.8C233.783 172.754 233.767 172.731 233.767 172.592C233.767 172.453 234.134 172.325 234.129 172.1C234.124 171.875 233.544 172.752 233.495 172.45C233.446 172.148 234.283 171.414 234.395 171.408C234.507 171.402 234.443 171.558 234.422 171.608C234.401 171.658 234.435 171.687 234.492 171.686C234.549 171.685 234.635 171.62 234.624 171.556C234.613 171.492 234.573 171.419 234.608 171.396C234.643 171.373 234.632 171.305 234.659 171.246C234.686 171.187 234.74 171.256 234.801 171.203C234.862 171.15 234.82 171.016 234.801 170.955C234.782 170.894 234.822 170.922 234.871 170.929C234.92 170.936 234.887 170.891 234.971 170.901C235.055 170.911 235.031 171.101 235.023 171.156C235.015 171.211 235.039 171.156 235.101 171.199C235.163 171.242 235.074 171.267 235.139 171.369C235.204 171.471 235.07 171.584 235.074 171.664C235.074 171.697 235.105 171.718 235.143 171.736C235.669 171.291 236.222 170.881 236.801 170.506C237.465 170.096 238.301 169.706 238.301 169.701C238.333 169.686 238.35 169.665 238.35 169.64V166.895C238.35 164.772 238.874 163.906 239.322 163.808C239.531 163.753 239.711 163.617 239.822 163.43C239.895 163.3 240.003 163.193 240.134 163.12C240.264 163.047 240.413 163.012 240.562 163.018C241.01 163.018 241.455 163.059 241.885 163.1C242.269 163.137 242.633 163.17 242.96 163.17C242.99 163.17 246.032 163.121 246.233 162.708C246.335 162.578 246.464 162.472 246.612 162.398C246.759 162.324 246.922 162.284 247.087 162.28C247.136 162.28 247.21 162.28 247.304 162.28C247.469 162.28 247.695 162.291 247.943 162.291C248.47 162.312 248.998 162.262 249.512 162.142C250.171 161.942 255.547 161.289 257.058 161.176C257.781 161.123 258.248 161.046 258.658 160.976C259.124 160.888 259.597 160.843 260.072 160.84C260.527 160.845 260.975 160.95 261.385 161.147C261.676 161.291 261.993 161.373 262.317 161.388C262.479 161.388 262.646 161.402 262.824 161.416C263.024 161.431 263.224 161.448 263.454 161.448C263.971 161.45 264.483 161.346 264.959 161.142C265.601 160.875 265.65 160.784 265.613 160.623C265.598 160.551 265.579 160.461 265.8 160.248C265.895 160.156 265.981 160.056 266.058 159.948C266.243 159.695 266.282 159.642 268.146 159.448L268.477 159.413V159.137H270.293V158.62H327.877V159.137H329.694V159.653H330.994V160.666C331.079 160.666 331.161 160.673 331.242 160.673C331.342 160.673 331.442 160.673 331.542 160.673C331.642 160.673 331.724 160.667 331.813 160.667C331.934 160.667 332.069 160.667 332.213 160.667C332.375 160.667 332.545 160.673 332.713 160.673C333.394 160.673 333.707 160.62 333.79 160.488C333.867 159.726 333.871 158.958 333.8 158.194C333.798 158.184 333.795 158.174 333.789 158.165C333.783 158.157 333.775 158.149 333.766 158.144C333.726 158.12 333.69 158.091 333.658 158.057H335.318C335.418 158.057 335.542 158.057 335.69 158.047C335.867 158.039 336.069 158.032 336.261 158.032C336.481 158.01 336.704 158.037 336.913 158.111C337.42 158.294 337.961 158.36 338.497 158.305C338.691 158.305 338.935 158.285 339.197 158.264C339.497 158.24 339.832 158.212 340.142 158.212C340.392 158.204 340.643 158.233 340.885 158.297C341.018 158.339 341.157 158.359 341.296 158.358C341.554 158.347 341.809 158.306 342.058 158.236C342.57 158.104 343.096 158.037 343.625 158.036C344.225 158.036 344.705 158.065 345.052 158.086C345.269 158.098 345.438 158.109 345.573 158.109C345.673 158.109 345.92 158.109 345.996 157.987C346.136 157.862 346.301 157.769 346.48 157.712C346.659 157.656 346.848 157.638 347.034 157.659C347.147 157.66 347.26 157.667 347.373 157.679C347.811 157.73 347.882 157.887 347.954 158.053C347.982 158.145 348.038 158.225 348.114 158.283C348.189 158.342 348.281 158.375 348.377 158.378C348.435 158.386 348.493 158.39 348.552 158.389C348.732 158.384 348.911 158.364 349.088 158.331C349.38 158.279 349.676 158.252 349.973 158.248C350.179 158.249 350.385 158.262 350.59 158.289C350.984 158.341 351.303 158.358 351.564 158.371C352.122 158.402 352.213 158.418 352.213 158.583C352.218 158.717 352.257 158.848 352.324 158.963C352.405 159.122 352.395 159.132 352.287 159.163C351.896 159.27 351.97 160.427 352.049 161.108C352.049 161.148 352.108 161.178 352.172 161.178H360.638C364.794 161.178 366.991 161.608 366.991 162.423C366.991 162.935 367.736 162.935 368.091 162.935C368.226 162.935 368.369 162.935 368.521 162.927C368.673 162.919 368.838 162.919 369 162.919C369.301 162.876 369.607 162.898 369.898 162.985C370.189 163.071 370.458 163.219 370.687 163.419C370.994 163.8 370.854 164.491 370.704 165.219C370.419 166.599 370.104 168.162 372.399 168.638C373.412 168.87 374.365 169.311 375.198 169.931C376.031 170.552 376.725 171.34 377.237 172.244C377.951 175.42 378.967 178.52 380.272 181.502C380.978 182.586 381.854 183.55 382.865 184.356" fill="#1B023F"/> -<path d="M262.83 184.325L111 184.939C111.171 184.075 111.388 183.22 111.65 182.379C112.41 180.1 112.808 177.715 112.828 175.311V175.204C112.918 174.351 113.3 173.555 113.908 172.95C113.896 172.943 113.884 172.933 113.875 172.922C113.832 172.866 113.859 172.846 113.821 172.8C113.783 172.754 113.767 172.731 113.767 172.592C113.767 172.453 114.134 172.325 114.129 172.1C114.124 171.875 113.544 172.752 113.495 172.45C113.446 172.148 114.283 171.414 114.395 171.408C114.507 171.402 114.443 171.558 114.422 171.608C114.401 171.658 114.435 171.687 114.492 171.686C114.549 171.685 114.635 171.62 114.624 171.556C114.613 171.492 114.573 171.419 114.608 171.396C114.643 171.373 114.632 171.305 114.659 171.246C114.686 171.187 114.74 171.256 114.801 171.203C114.862 171.15 114.82 171.016 114.801 170.955C114.782 170.894 114.822 170.922 114.871 170.929C114.92 170.936 114.887 170.891 114.971 170.901C115.055 170.911 115.031 171.101 115.023 171.156C115.015 171.211 115.039 171.156 115.101 171.199C115.163 171.242 115.074 171.267 115.139 171.369C115.204 171.471 115.07 171.584 115.074 171.664C115.074 171.697 115.105 171.718 115.143 171.736C115.669 171.291 116.222 170.881 116.801 170.506C117.465 170.096 118.301 169.706 118.301 169.701C118.333 169.686 118.35 169.665 118.35 169.64V166.895C118.35 164.772 118.874 163.906 119.322 163.808C119.531 163.753 119.711 163.617 119.822 163.43C119.895 163.3 120.003 163.193 120.134 163.12C120.264 163.047 120.413 163.012 120.562 163.018C121.01 163.018 121.455 163.059 121.885 163.1C122.269 163.137 122.633 163.17 122.96 163.17C122.99 163.17 126.032 163.121 126.233 162.708C126.335 162.578 126.464 162.472 126.612 162.398C126.759 162.324 126.922 162.284 127.087 162.28C127.136 162.28 127.21 162.28 127.304 162.28C127.469 162.28 127.695 162.291 127.943 162.291C128.47 162.312 128.998 162.262 129.512 162.142C130.171 161.942 135.547 161.289 137.058 161.176C137.781 161.123 138.248 161.046 138.658 160.976C139.124 160.888 139.597 160.843 140.072 160.84C140.527 160.845 140.975 160.95 141.385 161.147C141.676 161.291 141.993 161.373 142.317 161.388C142.479 161.388 142.646 161.402 142.824 161.416C143.024 161.431 143.224 161.448 143.454 161.448C143.971 161.45 144.483 161.346 144.959 161.142C145.601 160.875 145.65 160.784 145.613 160.623C145.598 160.551 145.579 160.461 145.8 160.248C145.895 160.156 145.981 160.056 146.058 159.948C146.243 159.695 146.282 159.642 148.146 159.448L148.477 159.413V159.137H150.293V158.62H207.877V159.137H209.694V159.653H210.994V160.666C211.079 160.666 211.161 160.673 211.242 160.673C211.342 160.673 211.442 160.673 211.542 160.673C211.642 160.673 211.724 160.667 211.813 160.667C211.934 160.667 212.069 160.667 212.213 160.667C212.375 160.667 212.545 160.673 212.713 160.673C213.394 160.673 213.707 160.62 213.79 160.488C213.867 159.726 213.871 158.958 213.8 158.194C213.798 158.184 213.795 158.174 213.789 158.165C213.783 158.157 213.775 158.149 213.766 158.144C213.726 158.12 213.69 158.091 213.658 158.057H215.318C215.418 158.057 215.542 158.057 215.69 158.047C215.867 158.039 216.069 158.032 216.261 158.032C216.481 158.01 216.704 158.037 216.913 158.111C217.42 158.294 217.961 158.36 218.497 158.305C218.691 158.305 218.935 158.285 219.197 158.264C219.497 158.24 219.832 158.212 220.142 158.212C220.392 158.204 220.643 158.233 220.885 158.297C221.018 158.339 221.157 158.359 221.296 158.358C221.554 158.347 221.809 158.306 222.058 158.236C222.57 158.104 223.096 158.037 223.625 158.036C224.225 158.036 224.705 158.065 225.052 158.086C225.269 158.098 225.438 158.109 225.573 158.109C225.673 158.109 225.92 158.109 225.996 157.987C226.136 157.862 226.301 157.769 226.48 157.712C226.659 157.656 226.848 157.638 227.034 157.659C227.147 157.66 227.26 157.667 227.373 157.679C227.811 157.73 227.882 157.887 227.954 158.053C227.982 158.145 228.038 158.225 228.114 158.283C228.189 158.342 228.281 158.375 228.377 158.378C228.435 158.386 228.493 158.39 228.552 158.389C228.732 158.384 228.911 158.364 229.088 158.331C229.38 158.279 229.676 158.252 229.973 158.248C230.179 158.249 230.385 158.262 230.59 158.289C230.984 158.341 231.303 158.358 231.564 158.371C232.122 158.402 232.213 158.418 232.213 158.583C232.218 158.717 232.257 158.848 232.324 158.963C232.405 159.122 232.395 159.132 232.287 159.163C231.896 159.27 231.97 160.427 232.049 161.108C232.049 161.148 232.108 161.178 232.172 161.178H240.638C244.794 161.178 246.991 161.608 246.991 162.423C246.991 162.935 247.736 162.935 248.091 162.935C248.226 162.935 248.369 162.935 248.521 162.927C248.673 162.919 248.838 162.919 249 162.919C249.301 162.876 249.607 162.898 249.898 162.985C250.189 163.071 250.458 163.219 250.687 163.419C250.994 163.8 250.854 164.491 250.704 165.219C250.419 166.599 250.104 168.162 252.399 168.638C253.412 168.87 254.365 169.311 255.198 169.931C256.031 170.552 256.725 171.34 257.237 172.244C257.951 175.42 258.967 178.52 260.272 181.502C260.978 182.586 261.854 183.55 262.865 184.356" fill="#1B023F"/> -<path d="M151.83 184.325L0 184.939C0.170815 184.075 0.387695 183.22 0.649902 182.379C1.41047 180.1 1.80797 177.715 1.82788 175.311V175.204C1.91803 174.351 2.29952 173.555 2.90796 172.95C2.8955 172.943 2.8844 172.933 2.875 172.922C2.832 172.866 2.8588 172.846 2.8208 172.8C2.7828 172.754 2.76685 172.731 2.76685 172.592C2.76685 172.453 3.13391 172.325 3.12891 172.1C3.12391 171.875 2.54387 172.752 2.49487 172.45C2.44587 172.148 3.28278 171.414 3.39478 171.408C3.50678 171.402 3.44287 171.558 3.42188 171.608C3.40088 171.658 3.43494 171.687 3.49194 171.686C3.54894 171.685 3.63478 171.62 3.62378 171.556C3.61278 171.492 3.57291 171.419 3.60791 171.396C3.64291 171.373 3.63194 171.305 3.65894 171.246C3.68594 171.187 3.73978 171.256 3.80078 171.203C3.86178 171.15 3.81978 171.016 3.80078 170.955C3.78178 170.894 3.82185 170.922 3.87085 170.929C3.91985 170.936 3.88695 170.891 3.97095 170.901C4.05495 170.911 4.03095 171.101 4.02295 171.156C4.01495 171.211 4.03883 171.156 4.10083 171.199C4.16283 171.242 4.07392 171.267 4.13892 171.369C4.20392 171.471 4.06997 171.584 4.07397 171.664C4.07397 171.697 4.10482 171.718 4.14282 171.736C4.66873 171.291 5.22248 170.881 5.80078 170.506C6.46478 170.096 7.30078 169.706 7.30078 169.701C7.33278 169.686 7.34985 169.665 7.34985 169.64V166.895C7.34985 164.772 7.87378 163.906 8.32178 163.808C8.5314 163.753 8.71084 163.617 8.82178 163.43C8.89501 163.3 9.00292 163.193 9.13354 163.12C9.26417 163.047 9.41264 163.012 9.56201 163.018C10.01 163.018 10.455 163.059 10.885 163.1C11.269 163.137 11.633 163.17 11.96 163.17C11.99 163.17 15.0319 163.121 15.2329 162.708C15.3348 162.578 15.4642 162.472 15.6118 162.398C15.7595 162.324 15.9218 162.284 16.0869 162.28C16.1359 162.28 16.21 162.28 16.304 162.28C16.469 162.28 16.6949 162.291 16.9429 162.291C17.4702 162.312 17.998 162.262 18.512 162.142C19.171 161.942 24.5469 161.289 26.0579 161.176C26.7809 161.123 27.248 161.046 27.658 160.976C28.1242 160.888 28.5973 160.843 29.0718 160.84C29.5266 160.845 29.9751 160.95 30.385 161.147C30.6757 161.291 30.9929 161.373 31.3169 161.388C31.4789 161.388 31.646 161.402 31.824 161.416C32.024 161.431 32.2239 161.448 32.4539 161.448C32.9712 161.45 33.4835 161.346 33.959 161.142C34.601 160.875 34.6498 160.784 34.6128 160.623C34.5978 160.551 34.5788 160.461 34.7998 160.248C34.8946 160.156 34.981 160.056 35.0579 159.948C35.2429 159.695 35.282 159.642 37.146 159.448L37.4768 159.413V159.137H39.293V158.62H96.877V159.137H98.6938V159.653H99.9939V160.666C100.079 160.666 100.161 160.673 100.242 160.673C100.342 160.673 100.442 160.673 100.542 160.673C100.642 160.673 100.724 160.667 100.813 160.667C100.934 160.667 101.069 160.667 101.213 160.667C101.375 160.667 101.545 160.673 101.713 160.673C102.394 160.673 102.707 160.62 102.79 160.488C102.867 159.726 102.871 158.958 102.8 158.194C102.798 158.184 102.795 158.174 102.789 158.165C102.783 158.157 102.775 158.149 102.766 158.144C102.726 158.12 102.69 158.091 102.658 158.057H104.318C104.418 158.057 104.542 158.057 104.69 158.047C104.867 158.039 105.069 158.032 105.261 158.032C105.481 158.01 105.704 158.037 105.913 158.111C106.42 158.294 106.961 158.36 107.497 158.305C107.691 158.305 107.935 158.285 108.197 158.264C108.497 158.24 108.832 158.212 109.142 158.212C109.392 158.204 109.643 158.233 109.885 158.297C110.018 158.339 110.157 158.359 110.296 158.358C110.554 158.347 110.809 158.306 111.058 158.236C111.57 158.104 112.096 158.037 112.625 158.036C113.225 158.036 113.705 158.065 114.052 158.086C114.269 158.098 114.438 158.109 114.573 158.109C114.673 158.109 114.92 158.109 114.996 157.987C115.136 157.862 115.301 157.769 115.48 157.712C115.659 157.656 115.848 157.638 116.034 157.659C116.147 157.66 116.26 157.667 116.373 157.679C116.811 157.73 116.882 157.887 116.954 158.053C116.982 158.145 117.038 158.225 117.114 158.283C117.189 158.342 117.281 158.375 117.377 158.378C117.435 158.386 117.493 158.39 117.552 158.389C117.732 158.384 117.911 158.364 118.088 158.331C118.38 158.279 118.676 158.252 118.973 158.248C119.179 158.249 119.385 158.262 119.59 158.289C119.984 158.341 120.303 158.358 120.564 158.371C121.122 158.402 121.213 158.418 121.213 158.583C121.218 158.717 121.257 158.848 121.324 158.963C121.405 159.122 121.395 159.132 121.287 159.163C120.896 159.27 120.97 160.427 121.049 161.108C121.049 161.148 121.108 161.178 121.172 161.178H129.638C133.794 161.178 135.991 161.608 135.991 162.423C135.991 162.935 136.736 162.935 137.091 162.935C137.226 162.935 137.369 162.935 137.521 162.927C137.673 162.919 137.838 162.919 138 162.919C138.301 162.876 138.607 162.898 138.898 162.985C139.189 163.071 139.458 163.219 139.687 163.419C139.994 163.8 139.854 164.491 139.704 165.219C139.419 166.599 139.104 168.162 141.399 168.638C142.412 168.87 143.365 169.311 144.198 169.931C145.031 170.552 145.725 171.34 146.237 172.244C146.951 175.42 147.967 178.52 149.272 181.502C149.978 182.586 150.854 183.55 151.865 184.356" fill="#1B023F"/> -<path d="M918.043 184.325L1069.87 184.939C1069.7 184.075 1069.49 183.22 1069.22 182.379C1068.46 180.1 1068.06 177.715 1068.04 175.311V175.204C1067.95 174.351 1067.57 173.555 1066.96 172.95C1066.98 172.943 1066.99 172.933 1067 172.922C1067.04 172.866 1067.01 172.846 1067.05 172.8C1067.09 172.754 1067.11 172.731 1067.11 172.592C1067.11 172.453 1066.74 172.325 1066.74 172.1C1066.75 171.875 1067.33 172.752 1067.38 172.45C1067.43 172.148 1066.59 171.414 1066.48 171.408C1066.37 171.402 1066.43 171.558 1066.45 171.608C1066.47 171.658 1066.44 171.687 1066.38 171.686C1066.32 171.685 1066.24 171.62 1066.25 171.556C1066.26 171.492 1066.3 171.419 1066.26 171.396C1066.23 171.373 1066.24 171.305 1066.21 171.246C1066.19 171.187 1066.13 171.256 1066.07 171.203C1066.01 171.15 1066.05 171.016 1066.07 170.955C1066.09 170.894 1066.05 170.922 1066 170.929C1065.95 170.936 1065.99 170.891 1065.9 170.901C1065.82 170.911 1065.84 171.101 1065.85 171.156C1065.86 171.211 1065.83 171.156 1065.77 171.199C1065.71 171.242 1065.8 171.267 1065.73 171.369C1065.67 171.471 1065.8 171.584 1065.8 171.664C1065.8 171.697 1065.77 171.718 1065.73 171.736C1065.2 171.291 1064.65 170.881 1064.07 170.506C1063.41 170.096 1062.57 169.706 1062.57 169.701C1062.54 169.686 1062.52 169.665 1062.52 169.64V166.895C1062.52 164.772 1062 163.906 1061.55 163.808C1061.34 163.753 1061.16 163.617 1061.05 163.43C1060.98 163.3 1060.87 163.193 1060.74 163.12C1060.61 163.047 1060.46 163.012 1060.31 163.018C1059.86 163.018 1059.42 163.059 1058.99 163.1C1058.6 163.137 1058.24 163.17 1057.91 163.17C1057.88 163.17 1054.84 163.121 1054.64 162.708C1054.54 162.578 1054.41 162.472 1054.26 162.398C1054.11 162.324 1053.95 162.284 1053.79 162.28C1053.74 162.28 1053.66 162.28 1053.57 162.28C1053.4 162.28 1053.18 162.291 1052.93 162.291C1052.4 162.312 1051.87 162.262 1051.36 162.142C1050.7 161.942 1045.33 161.289 1043.81 161.176C1043.09 161.123 1042.62 161.046 1042.21 160.976C1041.75 160.888 1041.28 160.843 1040.8 160.84C1040.35 160.845 1039.9 160.95 1039.49 161.147C1039.2 161.291 1038.88 161.373 1038.56 161.388C1038.39 161.388 1038.23 161.402 1038.05 161.416C1037.85 161.431 1037.65 161.448 1037.42 161.448C1036.9 161.45 1036.39 161.346 1035.91 161.142C1035.27 160.875 1035.22 160.784 1035.26 160.623C1035.27 160.551 1035.29 160.461 1035.07 160.248C1034.98 160.156 1034.89 160.056 1034.81 159.948C1034.63 159.695 1034.59 159.642 1032.73 159.448L1032.4 159.413V159.137H1030.58V158.62H972.996V159.137H971.179V159.653H969.879V160.666C969.794 160.666 969.712 160.673 969.631 160.673C969.531 160.673 969.431 160.673 969.331 160.673C969.231 160.673 969.149 160.667 969.06 160.667C968.939 160.667 968.804 160.667 968.66 160.667C968.498 160.667 968.328 160.673 968.16 160.673C967.479 160.673 967.166 160.62 967.083 160.488C967.005 159.726 967.002 158.958 967.073 158.194C967.074 158.184 967.078 158.174 967.084 158.165C967.09 158.157 967.098 158.149 967.107 158.144C967.146 158.12 967.183 158.091 967.215 158.057H965.555C965.455 158.057 965.331 158.057 965.183 158.047C965.006 158.039 964.804 158.032 964.612 158.032C964.391 158.01 964.169 158.037 963.96 158.111C963.453 158.294 962.912 158.36 962.376 158.305C962.182 158.305 961.938 158.285 961.676 158.264C961.376 158.24 961.041 158.212 960.731 158.212C960.48 158.204 960.23 158.233 959.988 158.297C959.855 158.339 959.716 158.359 959.577 158.358C959.319 158.347 959.063 158.306 958.815 158.236C958.303 158.104 957.776 158.037 957.248 158.036C956.648 158.036 956.168 158.065 955.821 158.086C955.604 158.098 955.435 158.109 955.3 158.109C955.2 158.109 954.953 158.109 954.877 157.987C954.737 157.862 954.572 157.769 954.393 157.712C954.214 157.656 954.025 157.638 953.839 157.659C953.726 157.66 953.612 157.667 953.5 157.679C953.062 157.73 952.991 157.887 952.919 158.053C952.891 158.145 952.835 158.225 952.759 158.283C952.683 158.342 952.591 158.375 952.496 158.378C952.438 158.386 952.379 158.39 952.321 158.389C952.141 158.384 951.962 158.364 951.785 158.331C951.493 158.279 951.197 158.252 950.9 158.248C950.694 158.249 950.488 158.262 950.283 158.289C949.889 158.341 949.57 158.358 949.309 158.371C948.751 158.402 948.66 158.418 948.66 158.583C948.654 158.717 948.616 158.848 948.549 158.963C948.468 159.122 948.478 159.132 948.586 159.163C948.977 159.27 948.903 160.427 948.824 161.108C948.824 161.148 948.765 161.178 948.701 161.178H940.235C936.079 161.178 933.882 161.608 933.882 162.423C933.882 162.935 933.137 162.935 932.782 162.935C932.647 162.935 932.504 162.935 932.352 162.927C932.2 162.919 932.035 162.919 931.873 162.919C931.572 162.876 931.266 162.898 930.975 162.985C930.683 163.071 930.414 163.219 930.186 163.419C929.879 163.8 930.019 164.491 930.169 165.219C930.454 166.599 930.769 168.162 928.474 168.638C927.461 168.87 926.508 169.311 925.675 169.931C924.842 170.552 924.147 171.34 923.636 172.244C922.922 175.42 921.905 178.52 920.601 181.502C919.895 182.586 919.019 183.55 918.008 184.356" fill="#1B023F"/> -<path d="M1034.04 184.325L1185.87 184.939C1185.7 184.075 1185.49 183.22 1185.22 182.379C1184.46 180.1 1184.06 177.715 1184.04 175.311V175.204C1183.95 174.351 1183.57 173.555 1182.96 172.95C1182.98 172.943 1182.99 172.933 1183 172.922C1183.04 172.866 1183.01 172.846 1183.05 172.8C1183.09 172.754 1183.11 172.731 1183.11 172.592C1183.11 172.453 1182.74 172.325 1182.74 172.1C1182.75 171.875 1183.33 172.752 1183.38 172.45C1183.43 172.148 1182.59 171.414 1182.48 171.408C1182.37 171.402 1182.43 171.558 1182.45 171.608C1182.47 171.658 1182.44 171.687 1182.38 171.686C1182.32 171.685 1182.24 171.62 1182.25 171.556C1182.26 171.492 1182.3 171.419 1182.26 171.396C1182.23 171.373 1182.24 171.305 1182.21 171.246C1182.19 171.187 1182.13 171.256 1182.07 171.203C1182.01 171.15 1182.05 171.016 1182.07 170.955C1182.09 170.894 1182.05 170.922 1182 170.929C1181.95 170.936 1181.99 170.891 1181.9 170.901C1181.82 170.911 1181.84 171.101 1181.85 171.156C1181.86 171.211 1181.83 171.156 1181.77 171.199C1181.71 171.242 1181.8 171.267 1181.73 171.369C1181.67 171.471 1181.8 171.584 1181.8 171.664C1181.8 171.697 1181.77 171.718 1181.73 171.736C1181.2 171.291 1180.65 170.881 1180.07 170.506C1179.41 170.096 1178.57 169.706 1178.57 169.701C1178.54 169.686 1178.52 169.665 1178.52 169.64V166.895C1178.52 164.772 1178 163.906 1177.55 163.808C1177.34 163.753 1177.16 163.617 1177.05 163.43C1176.98 163.3 1176.87 163.193 1176.74 163.12C1176.61 163.047 1176.46 163.012 1176.31 163.018C1175.86 163.018 1175.42 163.059 1174.99 163.1C1174.6 163.137 1174.24 163.17 1173.91 163.17C1173.88 163.17 1170.84 163.121 1170.64 162.708C1170.54 162.578 1170.41 162.472 1170.26 162.398C1170.11 162.324 1169.95 162.284 1169.79 162.28C1169.74 162.28 1169.66 162.28 1169.57 162.28C1169.4 162.28 1169.18 162.291 1168.93 162.291C1168.4 162.312 1167.87 162.262 1167.36 162.142C1166.7 161.942 1161.33 161.289 1159.81 161.176C1159.09 161.123 1158.62 161.046 1158.21 160.976C1157.75 160.888 1157.28 160.843 1156.8 160.84C1156.35 160.845 1155.9 160.95 1155.49 161.147C1155.2 161.291 1154.88 161.373 1154.56 161.388C1154.39 161.388 1154.23 161.402 1154.05 161.416C1153.85 161.431 1153.65 161.448 1153.42 161.448C1152.9 161.45 1152.39 161.346 1151.91 161.142C1151.27 160.875 1151.22 160.784 1151.26 160.623C1151.27 160.551 1151.29 160.461 1151.07 160.248C1150.98 160.156 1150.89 160.056 1150.81 159.948C1150.63 159.695 1150.59 159.642 1148.73 159.448L1148.4 159.413V159.137H1146.58V158.62H1089V159.137H1087.18V159.653H1085.88V160.666C1085.79 160.666 1085.71 160.673 1085.63 160.673C1085.53 160.673 1085.43 160.673 1085.33 160.673C1085.23 160.673 1085.15 160.667 1085.06 160.667C1084.94 160.667 1084.8 160.667 1084.66 160.667C1084.5 160.667 1084.33 160.673 1084.16 160.673C1083.48 160.673 1083.17 160.62 1083.08 160.488C1083.01 159.726 1083 158.958 1083.07 158.194C1083.07 158.184 1083.08 158.174 1083.08 158.165C1083.09 158.157 1083.1 158.149 1083.11 158.144C1083.15 158.12 1083.18 158.091 1083.21 158.057H1081.55C1081.45 158.057 1081.33 158.057 1081.18 158.047C1081.01 158.039 1080.8 158.032 1080.61 158.032C1080.39 158.01 1080.17 158.037 1079.96 158.111C1079.45 158.294 1078.91 158.36 1078.38 158.305C1078.18 158.305 1077.94 158.285 1077.68 158.264C1077.38 158.24 1077.04 158.212 1076.73 158.212C1076.48 158.204 1076.23 158.233 1075.99 158.297C1075.85 158.339 1075.72 158.359 1075.58 158.358C1075.32 158.347 1075.06 158.306 1074.81 158.236C1074.3 158.104 1073.78 158.037 1073.25 158.036C1072.65 158.036 1072.17 158.065 1071.82 158.086C1071.6 158.098 1071.43 158.109 1071.3 158.109C1071.2 158.109 1070.95 158.109 1070.88 157.987C1070.74 157.862 1070.57 157.769 1070.39 157.712C1070.21 157.656 1070.03 157.638 1069.84 157.659C1069.73 157.66 1069.61 157.667 1069.5 157.679C1069.06 157.73 1068.99 157.887 1068.92 158.053C1068.89 158.145 1068.84 158.225 1068.76 158.283C1068.68 158.342 1068.59 158.375 1068.5 158.378C1068.44 158.386 1068.38 158.39 1068.32 158.389C1068.14 158.384 1067.96 158.364 1067.78 158.331C1067.49 158.279 1067.2 158.252 1066.9 158.248C1066.69 158.249 1066.49 158.262 1066.28 158.289C1065.89 158.341 1065.57 158.358 1065.31 158.371C1064.75 158.402 1064.66 158.418 1064.66 158.583C1064.65 158.717 1064.62 158.848 1064.55 158.963C1064.47 159.122 1064.48 159.132 1064.59 159.163C1064.98 159.27 1064.9 160.427 1064.82 161.108C1064.82 161.148 1064.76 161.178 1064.7 161.178H1056.23C1052.08 161.178 1049.88 161.608 1049.88 162.423C1049.88 162.935 1049.14 162.935 1048.78 162.935C1048.65 162.935 1048.5 162.935 1048.35 162.927C1048.2 162.919 1048.03 162.919 1047.87 162.919C1047.57 162.876 1047.27 162.898 1046.97 162.985C1046.68 163.071 1046.41 163.219 1046.19 163.419C1045.88 163.8 1046.02 164.491 1046.17 165.219C1046.45 166.599 1046.77 168.162 1044.47 168.638C1043.46 168.87 1042.51 169.311 1041.67 169.931C1040.84 170.552 1040.15 171.34 1039.64 172.244C1038.92 175.42 1037.91 178.52 1036.6 181.502C1035.89 182.586 1035.02 183.55 1034.01 184.356" fill="#1B023F"/> -<path d="M1164.04 184.325L1315.87 184.939C1315.7 184.075 1315.49 183.22 1315.22 182.379C1314.46 180.1 1314.06 177.715 1314.04 175.311V175.204C1313.95 174.351 1313.57 173.555 1312.96 172.95C1312.98 172.943 1312.99 172.933 1313 172.922C1313.04 172.866 1313.01 172.846 1313.05 172.8C1313.09 172.754 1313.11 172.731 1313.11 172.592C1313.11 172.453 1312.74 172.325 1312.74 172.1C1312.75 171.875 1313.33 172.752 1313.38 172.45C1313.43 172.148 1312.59 171.414 1312.48 171.408C1312.37 171.402 1312.43 171.558 1312.45 171.608C1312.47 171.658 1312.44 171.687 1312.38 171.686C1312.32 171.685 1312.24 171.62 1312.25 171.556C1312.26 171.492 1312.3 171.419 1312.26 171.396C1312.23 171.373 1312.24 171.305 1312.21 171.246C1312.19 171.187 1312.13 171.256 1312.07 171.203C1312.01 171.15 1312.05 171.016 1312.07 170.955C1312.09 170.894 1312.05 170.922 1312 170.929C1311.95 170.936 1311.99 170.891 1311.9 170.901C1311.82 170.911 1311.84 171.101 1311.85 171.156C1311.86 171.211 1311.83 171.156 1311.77 171.199C1311.71 171.242 1311.8 171.267 1311.73 171.369C1311.67 171.471 1311.8 171.584 1311.8 171.664C1311.8 171.697 1311.77 171.718 1311.73 171.736C1311.2 171.291 1310.65 170.881 1310.07 170.506C1309.41 170.096 1308.57 169.706 1308.57 169.701C1308.54 169.686 1308.52 169.665 1308.52 169.64V166.895C1308.52 164.772 1308 163.906 1307.55 163.808C1307.34 163.753 1307.16 163.617 1307.05 163.43C1306.98 163.3 1306.87 163.193 1306.74 163.12C1306.61 163.047 1306.46 163.012 1306.31 163.018C1305.86 163.018 1305.42 163.059 1304.99 163.1C1304.6 163.137 1304.24 163.17 1303.91 163.17C1303.88 163.17 1300.84 163.121 1300.64 162.708C1300.54 162.578 1300.41 162.472 1300.26 162.398C1300.11 162.324 1299.95 162.284 1299.79 162.28C1299.74 162.28 1299.66 162.28 1299.57 162.28C1299.4 162.28 1299.18 162.291 1298.93 162.291C1298.4 162.312 1297.87 162.262 1297.36 162.142C1296.7 161.942 1291.33 161.289 1289.81 161.176C1289.09 161.123 1288.62 161.046 1288.21 160.976C1287.75 160.888 1287.28 160.843 1286.8 160.84C1286.35 160.845 1285.9 160.95 1285.49 161.147C1285.2 161.291 1284.88 161.373 1284.56 161.388C1284.39 161.388 1284.23 161.402 1284.05 161.416C1283.85 161.431 1283.65 161.448 1283.42 161.448C1282.9 161.45 1282.39 161.346 1281.91 161.142C1281.27 160.875 1281.22 160.784 1281.26 160.623C1281.27 160.551 1281.29 160.461 1281.07 160.248C1280.98 160.156 1280.89 160.056 1280.81 159.948C1280.63 159.695 1280.59 159.642 1278.73 159.448L1278.4 159.413V159.137H1276.58V158.62H1219V159.137H1217.18V159.653H1215.88V160.666C1215.79 160.666 1215.71 160.673 1215.63 160.673C1215.53 160.673 1215.43 160.673 1215.33 160.673C1215.23 160.673 1215.15 160.667 1215.06 160.667C1214.94 160.667 1214.8 160.667 1214.66 160.667C1214.5 160.667 1214.33 160.673 1214.16 160.673C1213.48 160.673 1213.17 160.62 1213.08 160.488C1213.01 159.726 1213 158.958 1213.07 158.194C1213.07 158.184 1213.08 158.174 1213.08 158.165C1213.09 158.157 1213.1 158.149 1213.11 158.144C1213.15 158.12 1213.18 158.091 1213.21 158.057H1211.55C1211.45 158.057 1211.33 158.057 1211.18 158.047C1211.01 158.039 1210.8 158.032 1210.61 158.032C1210.39 158.01 1210.17 158.037 1209.96 158.111C1209.45 158.294 1208.91 158.36 1208.38 158.305C1208.18 158.305 1207.94 158.285 1207.68 158.264C1207.38 158.24 1207.04 158.212 1206.73 158.212C1206.48 158.204 1206.23 158.233 1205.99 158.297C1205.85 158.339 1205.72 158.359 1205.58 158.358C1205.32 158.347 1205.06 158.306 1204.81 158.236C1204.3 158.104 1203.78 158.037 1203.25 158.036C1202.65 158.036 1202.17 158.065 1201.82 158.086C1201.6 158.098 1201.43 158.109 1201.3 158.109C1201.2 158.109 1200.95 158.109 1200.88 157.987C1200.74 157.862 1200.57 157.769 1200.39 157.712C1200.21 157.656 1200.03 157.638 1199.84 157.659C1199.73 157.66 1199.61 157.667 1199.5 157.679C1199.06 157.73 1198.99 157.887 1198.92 158.053C1198.89 158.145 1198.84 158.225 1198.76 158.283C1198.68 158.342 1198.59 158.375 1198.5 158.378C1198.44 158.386 1198.38 158.39 1198.32 158.389C1198.14 158.384 1197.96 158.364 1197.78 158.331C1197.49 158.279 1197.2 158.252 1196.9 158.248C1196.69 158.249 1196.49 158.262 1196.28 158.289C1195.89 158.341 1195.57 158.358 1195.31 158.371C1194.75 158.402 1194.66 158.418 1194.66 158.583C1194.65 158.717 1194.62 158.848 1194.55 158.963C1194.47 159.122 1194.48 159.132 1194.59 159.163C1194.98 159.27 1194.9 160.427 1194.82 161.108C1194.82 161.148 1194.76 161.178 1194.7 161.178H1186.23C1182.08 161.178 1179.88 161.608 1179.88 162.423C1179.88 162.935 1179.14 162.935 1178.78 162.935C1178.65 162.935 1178.5 162.935 1178.35 162.927C1178.2 162.919 1178.03 162.919 1177.87 162.919C1177.57 162.876 1177.27 162.898 1176.97 162.985C1176.68 163.071 1176.41 163.219 1176.19 163.419C1175.88 163.8 1176.02 164.491 1176.17 165.219C1176.45 166.599 1176.77 168.162 1174.47 168.638C1173.46 168.87 1172.51 169.311 1171.67 169.931C1170.84 170.552 1170.15 171.34 1169.64 172.244C1168.92 175.42 1167.91 178.52 1166.6 181.502C1165.89 182.586 1165.02 183.55 1164.01 184.356" fill="#1B023F"/> -<path d="M1290.04 184.325L1441.87 184.939C1441.7 184.075 1441.49 183.22 1441.22 182.379C1440.46 180.1 1440.06 177.715 1440.04 175.311V175.204C1439.95 174.351 1439.57 173.555 1438.96 172.95C1438.98 172.943 1438.99 172.933 1439 172.922C1439.04 172.866 1439.01 172.846 1439.05 172.8C1439.09 172.754 1439.11 172.731 1439.11 172.592C1439.11 172.453 1438.74 172.325 1438.74 172.1C1438.75 171.875 1439.33 172.752 1439.38 172.45C1439.43 172.148 1438.59 171.414 1438.48 171.408C1438.37 171.402 1438.43 171.558 1438.45 171.608C1438.47 171.658 1438.44 171.687 1438.38 171.686C1438.32 171.685 1438.24 171.62 1438.25 171.556C1438.26 171.492 1438.3 171.419 1438.26 171.396C1438.23 171.373 1438.24 171.305 1438.21 171.246C1438.19 171.187 1438.13 171.256 1438.07 171.203C1438.01 171.15 1438.05 171.016 1438.07 170.955C1438.09 170.894 1438.05 170.922 1438 170.929C1437.95 170.936 1437.99 170.891 1437.9 170.901C1437.82 170.911 1437.84 171.101 1437.85 171.156C1437.86 171.211 1437.83 171.156 1437.77 171.199C1437.71 171.242 1437.8 171.267 1437.73 171.369C1437.67 171.471 1437.8 171.584 1437.8 171.664C1437.8 171.697 1437.77 171.718 1437.73 171.736C1437.2 171.291 1436.65 170.881 1436.07 170.506C1435.41 170.096 1434.57 169.706 1434.57 169.701C1434.54 169.686 1434.52 169.665 1434.52 169.64V166.895C1434.52 164.772 1434 163.906 1433.55 163.808C1433.34 163.753 1433.16 163.617 1433.05 163.43C1432.98 163.3 1432.87 163.193 1432.74 163.12C1432.61 163.047 1432.46 163.012 1432.31 163.018C1431.86 163.018 1431.42 163.059 1430.99 163.1C1430.6 163.137 1430.24 163.17 1429.91 163.17C1429.88 163.17 1426.84 163.121 1426.64 162.708C1426.54 162.578 1426.41 162.472 1426.26 162.398C1426.11 162.324 1425.95 162.284 1425.79 162.28C1425.74 162.28 1425.66 162.28 1425.57 162.28C1425.4 162.28 1425.18 162.291 1424.93 162.291C1424.4 162.312 1423.87 162.262 1423.36 162.142C1422.7 161.942 1417.33 161.289 1415.81 161.176C1415.09 161.123 1414.62 161.046 1414.21 160.976C1413.75 160.888 1413.28 160.843 1412.8 160.84C1412.35 160.845 1411.9 160.95 1411.49 161.147C1411.2 161.291 1410.88 161.373 1410.56 161.388C1410.39 161.388 1410.23 161.402 1410.05 161.416C1409.85 161.431 1409.65 161.448 1409.42 161.448C1408.9 161.45 1408.39 161.346 1407.91 161.142C1407.27 160.875 1407.22 160.784 1407.26 160.623C1407.27 160.551 1407.29 160.461 1407.07 160.248C1406.98 160.156 1406.89 160.056 1406.81 159.948C1406.63 159.695 1406.59 159.642 1404.73 159.448L1404.4 159.413V159.137H1402.58V158.62H1345V159.137H1343.18V159.653H1341.88V160.666C1341.79 160.666 1341.71 160.673 1341.63 160.673C1341.53 160.673 1341.43 160.673 1341.33 160.673C1341.23 160.673 1341.15 160.667 1341.06 160.667C1340.94 160.667 1340.8 160.667 1340.66 160.667C1340.5 160.667 1340.33 160.673 1340.16 160.673C1339.48 160.673 1339.17 160.62 1339.08 160.488C1339.01 159.726 1339 158.958 1339.07 158.194C1339.07 158.184 1339.08 158.174 1339.08 158.165C1339.09 158.157 1339.1 158.149 1339.11 158.144C1339.15 158.12 1339.18 158.091 1339.21 158.057H1337.55C1337.45 158.057 1337.33 158.057 1337.18 158.047C1337.01 158.039 1336.8 158.032 1336.61 158.032C1336.39 158.01 1336.17 158.037 1335.96 158.111C1335.45 158.294 1334.91 158.36 1334.38 158.305C1334.18 158.305 1333.94 158.285 1333.68 158.264C1333.38 158.24 1333.04 158.212 1332.73 158.212C1332.48 158.204 1332.23 158.233 1331.99 158.297C1331.85 158.339 1331.72 158.359 1331.58 158.358C1331.32 158.347 1331.06 158.306 1330.81 158.236C1330.3 158.104 1329.78 158.037 1329.25 158.036C1328.65 158.036 1328.17 158.065 1327.82 158.086C1327.6 158.098 1327.43 158.109 1327.3 158.109C1327.2 158.109 1326.95 158.109 1326.88 157.987C1326.74 157.862 1326.57 157.769 1326.39 157.712C1326.21 157.656 1326.03 157.638 1325.84 157.659C1325.73 157.66 1325.61 157.667 1325.5 157.679C1325.06 157.73 1324.99 157.887 1324.92 158.053C1324.89 158.145 1324.84 158.225 1324.76 158.283C1324.68 158.342 1324.59 158.375 1324.5 158.378C1324.44 158.386 1324.38 158.39 1324.32 158.389C1324.14 158.384 1323.96 158.364 1323.78 158.331C1323.49 158.279 1323.2 158.252 1322.9 158.248C1322.69 158.249 1322.49 158.262 1322.28 158.289C1321.89 158.341 1321.57 158.358 1321.31 158.371C1320.75 158.402 1320.66 158.418 1320.66 158.583C1320.65 158.717 1320.62 158.848 1320.55 158.963C1320.47 159.122 1320.48 159.132 1320.59 159.163C1320.98 159.27 1320.9 160.427 1320.82 161.108C1320.82 161.148 1320.76 161.178 1320.7 161.178H1312.23C1308.08 161.178 1305.88 161.608 1305.88 162.423C1305.88 162.935 1305.14 162.935 1304.78 162.935C1304.65 162.935 1304.5 162.935 1304.35 162.927C1304.2 162.919 1304.03 162.919 1303.87 162.919C1303.57 162.876 1303.27 162.898 1302.97 162.985C1302.68 163.071 1302.41 163.219 1302.19 163.419C1301.88 163.8 1302.02 164.491 1302.17 165.219C1302.45 166.599 1302.77 168.162 1300.47 168.638C1299.46 168.87 1298.51 169.311 1297.67 169.931C1296.84 170.552 1296.15 171.34 1295.64 172.244C1294.92 175.42 1293.91 178.52 1292.6 181.502C1291.89 182.586 1291.02 183.55 1290.01 184.356" fill="#1B023F"/> -<path d="M1327.04 184.325L1478.87 184.939C1478.7 184.075 1478.49 183.22 1478.22 182.379C1477.46 180.1 1477.06 177.715 1477.04 175.311V175.204C1476.95 174.351 1476.57 173.555 1475.96 172.95C1475.98 172.943 1475.99 172.933 1476 172.922C1476.04 172.866 1476.01 172.846 1476.05 172.8C1476.09 172.754 1476.11 172.731 1476.11 172.592C1476.11 172.453 1475.74 172.325 1475.74 172.1C1475.75 171.875 1476.33 172.752 1476.38 172.45C1476.43 172.148 1475.59 171.414 1475.48 171.408C1475.37 171.402 1475.43 171.558 1475.45 171.608C1475.47 171.658 1475.44 171.687 1475.38 171.686C1475.32 171.685 1475.24 171.62 1475.25 171.556C1475.26 171.492 1475.3 171.419 1475.26 171.396C1475.23 171.373 1475.24 171.305 1475.21 171.246C1475.19 171.187 1475.13 171.256 1475.07 171.203C1475.01 171.15 1475.05 171.016 1475.07 170.955C1475.09 170.894 1475.05 170.922 1475 170.929C1474.95 170.936 1474.99 170.891 1474.9 170.901C1474.82 170.911 1474.84 171.101 1474.85 171.156C1474.86 171.211 1474.83 171.156 1474.77 171.199C1474.71 171.242 1474.8 171.267 1474.73 171.369C1474.67 171.471 1474.8 171.584 1474.8 171.664C1474.8 171.697 1474.77 171.718 1474.73 171.736C1474.2 171.291 1473.65 170.881 1473.07 170.506C1472.41 170.096 1471.57 169.706 1471.57 169.701C1471.54 169.686 1471.52 169.665 1471.52 169.64V166.895C1471.52 164.772 1471 163.906 1470.55 163.808C1470.34 163.753 1470.16 163.617 1470.05 163.43C1469.98 163.3 1469.87 163.193 1469.74 163.12C1469.61 163.047 1469.46 163.012 1469.31 163.018C1468.86 163.018 1468.42 163.059 1467.99 163.1C1467.6 163.137 1467.24 163.17 1466.91 163.17C1466.88 163.17 1463.84 163.121 1463.64 162.708C1463.54 162.578 1463.41 162.472 1463.26 162.398C1463.11 162.324 1462.95 162.284 1462.79 162.28C1462.74 162.28 1462.66 162.28 1462.57 162.28C1462.4 162.28 1462.18 162.291 1461.93 162.291C1461.4 162.312 1460.87 162.262 1460.36 162.142C1459.7 161.942 1454.33 161.289 1452.81 161.176C1452.09 161.123 1451.62 161.046 1451.21 160.976C1450.75 160.888 1450.28 160.843 1449.8 160.84C1449.35 160.845 1448.9 160.95 1448.49 161.147C1448.2 161.291 1447.88 161.373 1447.56 161.388C1447.39 161.388 1447.23 161.402 1447.05 161.416C1446.85 161.431 1446.65 161.448 1446.42 161.448C1445.9 161.45 1445.39 161.346 1444.91 161.142C1444.27 160.875 1444.22 160.784 1444.26 160.623C1444.27 160.551 1444.29 160.461 1444.07 160.248C1443.98 160.156 1443.89 160.056 1443.81 159.948C1443.63 159.695 1443.59 159.642 1441.73 159.448L1441.4 159.413V159.137H1439.58V158.62H1382V159.137H1380.18V159.653H1378.88V160.666C1378.79 160.666 1378.71 160.673 1378.63 160.673C1378.53 160.673 1378.43 160.673 1378.33 160.673C1378.23 160.673 1378.15 160.667 1378.06 160.667C1377.94 160.667 1377.8 160.667 1377.66 160.667C1377.5 160.667 1377.33 160.673 1377.16 160.673C1376.48 160.673 1376.17 160.62 1376.08 160.488C1376.01 159.726 1376 158.958 1376.07 158.194C1376.07 158.184 1376.08 158.174 1376.08 158.165C1376.09 158.157 1376.1 158.149 1376.11 158.144C1376.15 158.12 1376.18 158.091 1376.21 158.057H1374.55C1374.45 158.057 1374.33 158.057 1374.18 158.047C1374.01 158.039 1373.8 158.032 1373.61 158.032C1373.39 158.01 1373.17 158.037 1372.96 158.111C1372.45 158.294 1371.91 158.36 1371.38 158.305C1371.18 158.305 1370.94 158.285 1370.68 158.264C1370.38 158.24 1370.04 158.212 1369.73 158.212C1369.48 158.204 1369.23 158.233 1368.99 158.297C1368.85 158.339 1368.72 158.359 1368.58 158.358C1368.32 158.347 1368.06 158.306 1367.81 158.236C1367.3 158.104 1366.78 158.037 1366.25 158.036C1365.65 158.036 1365.17 158.065 1364.82 158.086C1364.6 158.098 1364.43 158.109 1364.3 158.109C1364.2 158.109 1363.95 158.109 1363.88 157.987C1363.74 157.862 1363.57 157.769 1363.39 157.712C1363.21 157.656 1363.03 157.638 1362.84 157.659C1362.73 157.66 1362.61 157.667 1362.5 157.679C1362.06 157.73 1361.99 157.887 1361.92 158.053C1361.89 158.145 1361.84 158.225 1361.76 158.283C1361.68 158.342 1361.59 158.375 1361.5 158.378C1361.44 158.386 1361.38 158.39 1361.32 158.389C1361.14 158.384 1360.96 158.364 1360.78 158.331C1360.49 158.279 1360.2 158.252 1359.9 158.248C1359.69 158.249 1359.49 158.262 1359.28 158.289C1358.89 158.341 1358.57 158.358 1358.31 158.371C1357.75 158.402 1357.66 158.418 1357.66 158.583C1357.65 158.717 1357.62 158.848 1357.55 158.963C1357.47 159.122 1357.48 159.132 1357.59 159.163C1357.98 159.27 1357.9 160.427 1357.82 161.108C1357.82 161.148 1357.76 161.178 1357.7 161.178H1349.23C1345.08 161.178 1342.88 161.608 1342.88 162.423C1342.88 162.935 1342.14 162.935 1341.78 162.935C1341.65 162.935 1341.5 162.935 1341.35 162.927C1341.2 162.919 1341.03 162.919 1340.87 162.919C1340.57 162.876 1340.27 162.898 1339.97 162.985C1339.68 163.071 1339.41 163.219 1339.19 163.419C1338.88 163.8 1339.02 164.491 1339.17 165.219C1339.45 166.599 1339.77 168.162 1337.47 168.638C1336.46 168.87 1335.51 169.311 1334.67 169.931C1333.84 170.552 1333.15 171.34 1332.64 172.244C1331.92 175.42 1330.91 178.52 1329.6 181.502C1328.89 182.586 1328.02 183.55 1327.01 184.356" fill="#1B023F"/> -<path d="M556.639 153.809C556.639 153.809 552.752 157.578 544.207 158.902C535.662 160.226 518.215 158.902 518.215 158.902L510.598 164.484H492.992L487.893 160.379L484.293 162.145L492.986 185.001H556.633L556.639 153.809Z" fill="#1B023F"/> -<path d="M254.998 168.645L188.41 149.745L119.964 128.668L98.4471 123.058H59.3572L33.4961 100.658H-0.00390625V184.067L254.998 168.645Z" fill="#1B023F"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M56.3923 100.654V102.024H56.9813V103.267H61.0913L61.4173 103.785H61.8083C61.8428 103.59 61.8665 103.394 61.8793 103.196V102.152C62.0742 102.144 62.2682 102.123 62.4603 102.089C62.6743 102.048 62.9233 102.024 62.9233 102.024V101.243H64.2233V102.024H68.9853V102.479H69.9573L70.1573 101.961C70.3844 101.789 70.6245 101.634 70.8753 101.498C71.0503 101.482 71.2263 101.482 71.4013 101.498C71.4013 101.498 71.1853 102.613 71.4013 102.613H76.0273V104.374H77.2713V104.7H77.5343L77.4693 105.089L76.7543 105.289V123.294H78.9033V123.236H80.4733V108.809L80.0733 108.42L79.8813 108.031L80.9883 107.377L81.2513 106.398C81.2513 106.398 81.3513 106.072 81.5773 106.072H88.2273V107.772H89.6683L88.8793 108.553V122.974H91.1643V124.407H98.8643C98.9293 124.407 98.9293 124.478 98.9293 124.533V128.451C98.9293 128.514 98.9293 128.579 98.8643 128.579H83.3413V128.905H32.3203V123.625H53.5863C53.6353 122.915 53.5863 119.843 53.5863 119.843H53.9773L53.6513 118.473L53.7143 110.637L53.9773 107.379L53.8483 106.079L53.4593 105.035C53.4593 105.035 53.8483 104.923 53.8483 104.572C53.8326 104.287 53.7874 104.004 53.7133 103.728C53.7133 103.728 53.8483 103.051 53.8483 102.876C53.8483 102.701 54.3663 102.161 54.3663 102.161C54.3663 102.161 54.0663 101.861 54.2403 101.643C54.3719 101.333 54.4399 100.999 54.4403 100.662L56.3923 100.654ZM60.0473 105.29H56.9183V121.862L57.1813 122.643H60.0473C60.0393 121.543 60.0173 120.429 60.0473 120.293C60.1263 119.993 60.5103 107.568 60.5103 107.568L60.2473 106.524L59.9843 106.006L60.0473 105.29ZM65.7273 105.482H64.1573V122.643H66.7693V107.376L66.5803 106.724L66.4433 106.135L66.3173 105.617L65.7273 105.482ZM72.8383 105.745H71.3383V122.645H73.0383V107.631L72.8383 106.724L72.3833 106.261L72.8383 105.745ZM86.0813 108.157H82.8863V108.809C82.6991 109.27 82.5678 109.752 82.4953 110.244C82.5503 110.466 82.4953 122.969 82.4953 122.969H86.7313C86.9553 122.578 86.7313 109.981 86.7313 109.981L86.5313 109.2L86.7313 108.808L86.6043 108.284L86.0813 108.157Z" fill="#1B023F"/> -<path d="M31.4775 105.095C31.4775 104.486 35.1985 103.908 31.1775 101.659C31.0465 101.986 30.0325 101.332 29.8255 101.31C29.2665 101.243 29.1045 101.145 29.1575 100.874C29.1795 100.709 29.1465 100.574 29.0375 100.525C28.9941 100.498 28.9607 100.458 28.9426 100.41C28.9245 100.363 28.9227 100.31 28.9375 100.262C28.9935 100.142 28.9485 100.086 28.8515 100.086C28.7315 100.086 28.6975 99.9235 28.7085 99.3115C28.7085 98.8865 28.7425 98.5905 28.7645 98.6685C28.8065 98.7555 28.8735 98.7686 29.0155 98.6886C29.1155 98.6356 29.2225 98.6135 29.2535 98.6465C29.2845 98.6795 29.4075 98.5795 29.5275 98.4285C29.6475 98.2775 29.7905 98.1545 29.8435 98.1545C29.9975 98.1545 30.0835 97.8915 30.0835 97.4785C30.0834 97.306 30.1206 97.1354 30.1925 96.9785C30.2595 96.8785 30.2485 96.7935 30.1615 96.7495C30.0615 96.6855 30.0615 96.6626 30.1725 96.6626C30.3083 95.9039 30.2741 95.1245 30.0725 94.3805C30.0117 94.1644 29.9937 93.9385 30.0195 93.7155C30.0371 93.6784 30.0411 93.6362 30.0309 93.5964C30.0207 93.5566 29.9968 93.5216 29.9635 93.4975C29.8774 93.2454 29.8477 92.9774 29.8765 92.7125C29.9044 92.4119 29.8893 92.1089 29.8315 91.8125C29.7112 91.5309 29.6314 91.2336 29.5945 90.9296C29.5725 90.7566 29.5495 90.1555 29.5385 89.5965C29.5436 89.1723 29.5071 88.7486 29.4295 88.3315C29.3323 87.7106 29.2845 87.083 29.2865 86.4545C29.2005 83.6195 29.1135 81.5355 29.0575 81.0965C28.9705 80.2965 28.9705 80.2365 29.0575 79.9845C29.1135 79.8425 29.1025 79.7555 29.0465 79.7845C28.9905 79.8135 28.9465 79.5215 28.9375 79.1285C28.9285 78.7355 28.8955 77.9835 28.8625 77.4495C28.8295 76.9155 28.7535 75.5725 28.6975 74.4495C28.5885 72.4825 28.4345 71.6335 28.1755 71.5495C28.1085 71.5155 28.0555 71.6026 28.0555 71.7226C28.0424 71.8612 27.9844 71.9917 27.8905 72.0945C27.667 72.7159 27.5747 73.3768 27.6195 74.0355C27.6195 74.1555 27.5635 74.5355 27.5075 74.8875C27.4246 75.4175 27.3705 75.9517 27.3455 76.4875C27.3115 77.0205 27.2785 77.5995 27.2585 77.7755C27.2385 77.9515 27.1805 78.3755 27.1585 78.7255C27.0585 79.8705 26.9585 80.4495 26.8315 80.5255C26.7445 80.5925 26.7445 80.6345 26.8315 80.6905C26.8682 80.7288 26.8945 80.7758 26.9082 80.827C26.9218 80.8782 26.9223 80.9321 26.9095 80.9835C26.8875 81.1035 26.8425 81.7045 26.8195 82.3165C26.7775 83.5285 26.7555 83.6905 26.6195 83.8975C26.5745 83.9755 26.5865 84.0286 26.6425 84.0286C26.6985 84.0286 26.7285 84.4225 26.7175 84.9675C26.6755 86.3415 26.6755 86.3115 26.4995 86.2325C26.3235 86.1535 26.2925 86.2885 26.4545 86.4615C26.5855 86.5925 26.4875 87.0286 26.3265 87.0286C26.2705 87.0286 26.3045 87.1405 26.3905 87.2685C26.5215 87.4685 26.5445 87.7685 26.5105 88.7325C26.5211 89.1627 26.473 89.5924 26.3675 90.0095C26.3086 90.1077 26.2896 90.2248 26.3145 90.3365C26.4181 90.9752 26.4245 91.6259 26.3335 92.2665C26.2805 92.2665 26.2585 92.3335 26.2915 92.4205C26.3144 92.742 26.2956 93.065 26.2355 93.3815C26.0355 94.6475 26.0355 94.7446 26.1935 95.1276C26.2685 95.3116 26.2935 95.4765 26.2465 95.4765C26.1375 95.4765 26.1825 96.1975 26.3245 96.8065C26.5955 97.9545 26.6935 98.2595 26.7605 98.2595C26.7945 98.2595 26.9035 98.3795 26.9785 98.5225C27.1094 98.7168 27.3074 98.856 27.5345 98.9135C27.9395 99.0335 27.9395 99.0445 27.9395 99.6005C27.9395 100.081 27.8945 100.182 27.6655 100.333C27.5023 100.444 27.3737 100.599 27.2945 100.78C27.2085 101.009 27.1635 101.02 26.9945 100.911C26.6945 100.727 26.1875 100.956 26.2625 101.249C26.2965 101.38 26.2735 101.436 26.1755 101.391C26.1358 101.38 26.094 101.382 26.0552 101.395C26.0164 101.409 25.9825 101.433 25.9575 101.466C25.9015 101.566 25.8575 101.555 25.7925 101.458C25.7285 101.338 25.6615 101.338 25.4435 101.458C25.0305 101.642 25.1925 101.511 24.6025 101.751C24.6585 101.916 24.4515 102.036 24.2865 101.927C24.0685 101.807 23.5545 101.773 23.5545 101.894C23.5545 101.958 23.5015 101.981 23.4455 101.936C23.4122 101.911 23.3886 101.876 23.3789 101.836C23.3692 101.796 23.374 101.754 23.3925 101.718C23.4145 101.642 23.4035 101.578 23.3475 101.578C23.2915 101.578 23.2165 101.665 23.1855 101.778C23.1405 101.94 23.0655 101.962 22.8365 101.909C22.5515 101.831 22.5515 101.82 22.5175 100.697C22.4579 100.296 22.4808 99.8878 22.5845 99.4965C22.6485 99.4545 22.7045 99.4655 22.7045 99.5185C22.7045 99.7365 23.4785 99.5075 23.8165 99.1915C24.4165 98.6135 24.4815 97.4115 24.0455 94.7495C23.9335 94.3526 23.9079 93.9362 23.9705 93.5286C24.0345 93.4616 23.9925 93.2995 23.8505 93.0595C23.5651 92.3729 23.4528 91.6267 23.5235 90.8866C23.5236 90.5355 23.4717 90.1864 23.3695 89.8505C23.265 89.5154 23.2431 89.16 23.3055 88.8145C23.3475 88.2475 23.3365 87.9535 23.2385 87.8445C23.1242 87.4555 23.0872 87.0478 23.1295 86.6445C23.1522 85.3136 23.0854 83.9826 22.9295 82.6605C22.8638 82.4492 22.8411 82.2268 22.8625 82.0065C22.8735 81.7445 22.8095 80.6636 22.7315 79.6066C22.6535 78.5496 22.5585 77.2715 22.5315 76.7715C22.5194 76.0244 22.4211 75.2811 22.2385 74.5565C22.0845 74.0005 21.8785 73.8885 21.7805 74.3165C21.7475 74.4895 21.6715 74.6095 21.6265 74.5795C21.5065 74.5015 21.4085 74.9175 21.4085 75.5605C21.3867 76.0447 21.3279 76.5264 21.2325 77.0015C21.1493 77.3819 21.0988 77.7686 21.0815 78.1575C21.1152 78.4633 21.1 78.7725 21.0365 79.0735C21.0025 79.3025 20.9615 79.6405 20.9495 79.8165C20.9431 79.9657 20.913 80.1128 20.8605 80.2526C20.8026 80.4885 20.7733 80.7306 20.7735 80.9735C20.7655 81.2924 20.7253 81.6097 20.6535 81.9205C20.6012 82.0526 20.5866 82.1967 20.6115 82.3365C20.6188 82.3502 20.6231 82.3652 20.6242 82.3806C20.6253 82.396 20.6232 82.4115 20.6179 82.426C20.6126 82.4406 20.6043 82.4538 20.5935 82.465C20.5828 82.4761 20.5699 82.4848 20.5555 82.4905C20.5262 82.5176 20.506 82.5532 20.4979 82.5923C20.4899 82.6314 20.4942 82.6721 20.5105 82.7085C20.5356 82.9501 20.5177 83.1943 20.4575 83.4296C20.3705 83.8096 20.3705 83.9965 20.4465 84.0295C20.4594 84.0353 20.471 84.0438 20.4804 84.0543C20.4899 84.0649 20.497 84.0774 20.5012 84.0909C20.5055 84.1044 20.5068 84.1187 20.5051 84.1328C20.5035 84.1468 20.4988 84.1604 20.4915 84.1725C20.3448 85.1038 20.2779 86.0459 20.2915 86.9885C20.3374 87.5476 20.2001 88.1064 19.9005 88.5806C19.7135 88.7116 19.7135 88.7225 19.9315 88.8985C20.1495 89.0745 20.1415 89.1585 20.0745 90.2845C20.0596 90.7509 20.0017 91.2149 19.9015 91.6705C19.8686 91.727 19.8512 91.7912 19.8512 91.8566C19.8512 91.9219 19.8686 91.9861 19.9015 92.0425C19.9803 92.5298 19.984 93.0262 19.9125 93.5145C19.875 93.7203 19.8526 93.9285 19.8455 94.1375C19.8513 94.4037 19.7988 94.6679 19.6915 94.9115C19.6055 95.0115 19.5825 95.2825 19.6385 95.7295C19.6725 96.1015 19.7025 96.4925 19.7025 96.6125C19.7025 97.3775 19.7135 97.5845 19.8115 97.6935C19.9054 97.8934 19.965 98.1078 19.9875 98.3275C20.0462 98.6698 20.1956 98.9902 20.4202 99.2551C20.6448 99.5199 20.9364 99.7197 21.2645 99.8335C21.5915 99.8975 21.6245 99.9426 21.6475 100.292C21.6702 100.744 21.644 101.197 21.5695 101.644C21.5505 101.764 21.5275 102.027 21.5165 102.233C21.5055 102.439 21.4715 102.533 21.4495 102.473C21.3625 102.266 21.1115 102.308 21.0365 102.548C20.9915 102.668 20.8935 102.766 20.8185 102.766C20.5895 102.766 20.6185 102.976 20.8525 102.987C20.9925 102.995 20.9805 103.018 20.7965 103.096C20.6655 103.138 20.5565 103.258 20.5565 103.336C20.5565 103.685 18.5065 103.936 18.3075 103.618C18.2545 103.531 18.2075 103.518 18.1565 103.607C17.9805 103.096 17.1085 102.177 17.2705 103.193C17.1395 103.335 16.9885 103.246 17.0415 103.531L17.0635 103.693L16.7705 103.993C16.4705 104.286 16.1705 104.293 16.1705 103.993C16.169 103.949 16.1511 103.908 16.1205 103.878C16.0899 103.847 16.0487 103.829 16.0055 103.828C15.9055 103.828 15.8635 103.786 15.8965 103.728C15.9295 103.67 15.8965 103.619 15.8325 103.619C15.772 103.605 15.7151 103.579 15.6659 103.541C15.6167 103.503 15.5763 103.455 15.5475 103.401C15.5137 103.342 15.4662 103.293 15.4093 103.257C15.3524 103.221 15.2876 103.199 15.2205 103.194C14.9805 103.194 14.8715 102.605 14.8485 101.11L14.8375 100.138L15.3735 100.082C15.8515 100.04 16.4855 99.7235 16.4855 99.5255C16.4855 99.4835 16.5615 99.4505 16.6395 99.4505C16.8465 99.4505 17.0975 99.0455 17.2395 98.4785C17.3 98.2405 17.3873 98.01 17.4995 97.7916C17.7049 97.4074 17.7636 96.9617 17.6645 96.5376C17.5775 96.3956 17.5975 96.2375 17.7175 96.0035C17.8274 95.7713 17.8844 95.5175 17.8844 95.2605C17.8844 95.0036 17.8274 94.7498 17.7175 94.5175C17.5747 94.269 17.5053 93.985 17.5175 93.6985C17.5174 93.4359 17.477 93.1749 17.3975 92.9245C17.3189 92.6368 17.2786 92.3399 17.2775 92.0416C17.2555 91.4296 17.2885 91.2645 17.4645 91.0915C17.5735 90.9825 17.6155 90.8915 17.5645 90.8915C17.3645 90.8915 17.2455 90.4665 17.1815 89.5395C17.0725 88.0005 17.0815 87.8395 17.3665 87.5755C17.5955 87.3685 17.5955 87.3575 17.3995 87.2155C17.28 87.1127 17.1961 86.9749 17.1595 86.8216C17.1489 86.7073 17.1074 86.598 17.0395 86.5055C16.8576 86.1876 16.7741 85.8229 16.7995 85.4575C16.8445 85.4465 16.8445 85.2176 16.7995 84.9776C16.7487 84.6231 16.742 84.2637 16.7795 83.9075C16.8215 83.4495 16.7995 83.2985 16.7015 83.2985C16.6035 83.2985 16.5815 83.1675 16.6265 82.8295C16.6685 82.5295 16.6485 82.3155 16.5595 82.2405C16.4595 82.1405 16.4725 82.0866 16.5925 82.0116C16.7125 81.9366 16.7235 81.8695 16.6265 81.7115C16.5873 81.6564 16.5653 81.5909 16.5633 81.5232C16.5614 81.4556 16.5795 81.3889 16.6155 81.3315C16.6685 81.2195 16.6685 81.1555 16.6155 81.1555C16.4615 81.1555 16.3865 80.5885 16.5065 80.4345C16.5815 80.3345 16.5815 80.2916 16.4835 80.2916C16.4085 80.2916 16.3745 80.2056 16.4085 80.0846C16.4425 79.9636 16.4305 79.8665 16.3865 79.8665C16.2865 79.8665 16.1795 79.4195 16.1015 78.7435C16.0761 78.3838 16.0257 78.0262 15.9505 77.6735C15.8097 77.2514 15.7421 76.8084 15.7505 76.3635C15.8065 76.3215 15.7615 76.1455 15.6865 75.9805C15.6399 75.9007 15.6099 75.8122 15.5984 75.7204C15.5869 75.6286 15.5941 75.5355 15.6195 75.4466C15.7195 75.1726 15.6415 74.5195 15.5105 74.5195C15.4575 74.5195 15.4105 74.3885 15.4105 74.2265C15.4018 74.0009 15.3683 73.7769 15.3105 73.5586C15.2342 73.1692 15.1827 72.7754 15.1565 72.3795C15.1035 71.4795 15.0275 71.2035 14.8075 71.2035C14.7205 71.2035 14.6235 71.0615 14.5895 70.8855C14.5025 70.4605 14.1755 70.4495 14.0785 70.8545C14.033 71.0187 13.9593 71.1737 13.8605 71.3125C13.7065 71.4855 13.6315 72.0526 13.5535 73.5586C13.5255 74.059 13.4715 74.5577 13.3915 75.0525C13.3132 75.4265 13.273 75.8075 13.2715 76.1895C13.263 76.6022 13.2266 77.0138 13.1625 77.4215C13.0768 78.0069 13.0366 78.598 13.0425 79.1895C13.0712 79.6096 13.0412 80.0317 12.9535 80.4435C12.854 80.8579 12.8034 81.2824 12.8025 81.7085C12.7575 82.3645 12.6935 83.3455 12.6605 83.8705C12.6275 84.3955 12.6045 85.1355 12.6155 85.4965C12.6425 85.8145 12.6016 86.1346 12.4955 86.4355C12.3736 86.7894 12.3515 87.1699 12.4315 87.5355C12.4955 88.2355 12.4845 88.3876 12.3115 88.6276C12.082 89.1596 12.0169 89.7482 12.1245 90.3176C12.1456 90.3725 12.1537 90.4316 12.1483 90.4902C12.143 90.5488 12.1242 90.6053 12.0935 90.6555C12.0116 90.8987 11.9675 91.153 11.9625 91.4095C11.9515 91.7025 11.8955 91.9435 11.8535 91.9435C11.8115 91.9435 11.7755 92.0106 11.7755 92.0976C11.7248 92.2548 11.6354 92.3968 11.5155 92.5105C11.3615 92.6865 11.3055 92.8105 11.3845 92.8285C11.5123 93.2897 11.5085 93.7774 11.3735 94.2365C11.3003 94.3896 11.2595 94.556 11.2535 94.7255C11.2266 94.9468 11.1711 95.1635 11.0885 95.3705C11.0021 95.577 10.9721 95.8027 11.0015 96.0246C11.0235 96.2426 11.0015 96.4515 10.9265 96.4825C10.7835 96.5825 10.7725 96.9745 10.9265 96.9745C11.0015 96.9745 11.0015 97.0415 10.9265 97.1815C10.846 97.3104 10.806 97.4604 10.8115 97.6123C10.817 97.7641 10.8678 97.9109 10.9575 98.0336C11.0129 98.1034 11.054 98.1836 11.0784 98.2694C11.1028 98.3552 11.1099 98.445 11.0995 98.5336C11.0844 98.6201 11.0883 98.7088 11.1109 98.7936C11.1335 98.8784 11.1743 98.9574 11.2304 99.0249C11.2865 99.0924 11.3566 99.1469 11.4359 99.1847C11.5151 99.2224 11.6017 99.2425 11.6895 99.2435C11.8545 99.2515 11.9405 99.3185 11.9185 99.3945C11.8545 99.5485 12.2035 99.7545 12.5415 99.7545C12.7622 99.7717 12.981 99.8082 13.1955 99.8635L13.6005 99.9726L13.5555 101.173C13.6111 101.711 13.5174 102.254 13.2845 102.743C13.0215 103.193 12.9995 103.422 13.2175 103.606C13.4685 103.813 13.4175 104.006 13.1085 103.944C13.0457 103.94 12.9855 103.918 12.9364 103.879C12.8872 103.84 12.8516 103.786 12.8345 103.726C12.8345 103.584 12.8235 103.572 12.7475 103.692C12.7114 103.738 12.6605 103.772 12.6031 103.786C12.5457 103.8 12.4852 103.794 12.4315 103.77C12.2665 103.714 12.1805 103.748 12.1315 103.857C12.0565 104.041 11.7715 104.097 11.7715 103.921C11.7696 103.892 11.7575 103.866 11.7374 103.846C11.7174 103.826 11.6908 103.813 11.6625 103.812C11.5985 103.812 11.5535 103.912 11.5535 104.03C11.5557 104.059 11.5517 104.089 11.5417 104.117C11.5317 104.145 11.5159 104.171 11.4954 104.192C11.4748 104.214 11.45 104.231 11.4224 104.242C11.3949 104.254 11.3653 104.259 11.3355 104.259C11.2265 104.27 11.0645 104.281 10.9975 104.293C10.3105 105.014 9.55549 105.483 11.0195 105.385C12.2243 105.226 13.4425 105.197 14.6535 105.298C16.8125 105.287 29.4175 105.362 31.4455 105.088L31.4775 105.095Z" fill="#1B023F"/> -<path d="M131.372 142.05C131.372 141.441 135.093 140.863 131.072 138.614C130.941 138.941 129.927 138.287 129.72 138.265C129.161 138.198 128.999 138.1 129.052 137.829C129.074 137.664 129.041 137.529 128.932 137.48C128.889 137.453 128.855 137.413 128.837 137.365C128.819 137.318 128.817 137.265 128.832 137.217C128.888 137.097 128.843 137.041 128.746 137.041C128.626 137.041 128.592 136.879 128.603 136.267C128.603 135.842 128.637 135.546 128.659 135.624C128.701 135.711 128.768 135.724 128.91 135.644C129.01 135.591 129.117 135.569 129.148 135.602C129.179 135.635 129.302 135.535 129.422 135.384C129.542 135.233 129.685 135.11 129.738 135.11C129.892 135.11 129.978 134.847 129.978 134.434C129.978 134.261 130.015 134.091 130.087 133.934C130.154 133.834 130.143 133.749 130.056 133.705C129.956 133.641 129.956 133.618 130.067 133.618C130.203 132.859 130.169 132.08 129.967 131.336C129.906 131.12 129.888 130.894 129.914 130.671C129.932 130.633 129.936 130.591 129.925 130.552C129.915 130.512 129.891 130.477 129.858 130.453C129.772 130.2 129.742 129.933 129.771 129.668C129.799 129.367 129.784 129.064 129.726 128.768C129.606 128.486 129.526 128.189 129.489 127.885C129.467 127.712 129.444 127.111 129.433 126.552C129.438 126.127 129.402 125.704 129.324 125.287C129.227 124.666 129.179 124.038 129.181 123.41C129.095 120.575 129.008 118.491 128.952 118.052C128.865 117.252 128.865 117.192 128.952 116.94C129.008 116.798 128.997 116.711 128.941 116.74C128.885 116.769 128.841 116.477 128.832 116.084C128.823 115.691 128.79 114.939 128.757 114.405C128.724 113.871 128.648 112.528 128.592 111.405C128.483 109.438 128.329 108.589 128.07 108.505C128.003 108.471 127.95 108.558 127.95 108.678C127.937 108.816 127.879 108.947 127.785 109.05C127.562 109.671 127.469 110.332 127.514 110.991C127.514 111.111 127.458 111.491 127.402 111.843C127.319 112.373 127.265 112.907 127.24 113.443C127.206 113.976 127.173 114.555 127.153 114.731C127.133 114.907 127.075 115.331 127.053 115.681C126.953 116.826 126.853 117.405 126.726 117.481C126.639 117.548 126.639 117.59 126.726 117.646C126.763 117.684 126.789 117.731 126.803 117.782C126.816 117.833 126.817 117.887 126.804 117.939C126.782 118.059 126.737 118.66 126.714 119.272C126.672 120.484 126.65 120.646 126.514 120.853C126.469 120.931 126.481 120.984 126.537 120.984C126.593 120.984 126.623 121.378 126.612 121.923C126.57 123.297 126.57 123.267 126.394 123.188C126.218 123.109 126.187 123.244 126.349 123.417C126.48 123.548 126.382 123.984 126.221 123.984C126.165 123.984 126.199 124.096 126.285 124.224C126.416 124.424 126.439 124.724 126.405 125.688C126.416 126.118 126.368 126.547 126.262 126.965C126.203 127.063 126.184 127.18 126.209 127.292C126.313 127.93 126.319 128.581 126.228 129.222C126.175 129.222 126.153 129.289 126.186 129.376C126.209 129.697 126.19 130.02 126.13 130.337C125.93 131.603 125.93 131.7 126.088 132.083C126.163 132.267 126.188 132.432 126.141 132.432C126.032 132.432 126.077 133.153 126.219 133.762C126.49 134.91 126.588 135.215 126.655 135.215C126.689 135.215 126.798 135.335 126.873 135.478C127.004 135.672 127.202 135.811 127.429 135.869C127.834 135.989 127.834 136 127.834 136.556C127.834 137.036 127.789 137.137 127.56 137.288C127.397 137.399 127.268 137.554 127.189 137.735C127.103 137.964 127.058 137.975 126.889 137.866C126.589 137.682 126.082 137.911 126.157 138.204C126.191 138.335 126.168 138.391 126.07 138.346C126.03 138.335 125.988 138.337 125.95 138.35C125.911 138.364 125.877 138.388 125.852 138.421C125.796 138.521 125.752 138.51 125.687 138.413C125.623 138.293 125.556 138.293 125.338 138.413C124.925 138.597 125.087 138.466 124.497 138.706C124.553 138.871 124.346 138.991 124.181 138.882C123.963 138.762 123.449 138.728 123.449 138.849C123.449 138.913 123.396 138.936 123.34 138.891C123.307 138.866 123.283 138.831 123.273 138.791C123.264 138.751 123.269 138.709 123.287 138.673C123.309 138.597 123.298 138.533 123.242 138.533C123.186 138.533 123.111 138.62 123.08 138.733C123.035 138.895 122.96 138.917 122.731 138.864C122.446 138.786 122.446 138.775 122.412 137.652C122.352 137.251 122.375 136.843 122.479 136.452C122.543 136.41 122.599 136.421 122.599 136.474C122.599 136.692 123.373 136.463 123.711 136.147C124.311 135.569 124.376 134.367 123.94 131.705C123.828 131.308 123.802 130.891 123.865 130.484C123.929 130.417 123.887 130.255 123.745 130.015C123.46 129.328 123.347 128.582 123.418 127.842C123.418 127.491 123.366 127.141 123.264 126.806C123.16 126.47 123.138 126.115 123.2 125.77C123.242 125.203 123.231 124.909 123.133 124.8C123.019 124.411 122.982 124.003 123.024 123.6C123.047 122.269 122.98 120.938 122.824 119.616C122.758 119.404 122.736 119.182 122.757 118.962C122.768 118.7 122.704 117.619 122.626 116.562C122.548 115.505 122.453 114.227 122.426 113.727C122.414 112.979 122.316 112.236 122.133 111.512C121.979 110.956 121.773 110.844 121.675 111.272C121.642 111.445 121.566 111.565 121.521 111.535C121.401 111.457 121.303 111.873 121.303 112.516C121.281 113 121.222 113.481 121.127 113.957C121.044 114.337 120.993 114.724 120.976 115.113C121.01 115.418 120.994 115.728 120.931 116.029C120.897 116.258 120.856 116.596 120.844 116.772C120.838 116.921 120.808 117.068 120.755 117.208C120.697 117.444 120.668 117.686 120.668 117.929C120.66 118.248 120.62 118.565 120.548 118.876C120.496 119.008 120.481 119.152 120.506 119.292C120.513 119.305 120.518 119.32 120.519 119.336C120.52 119.351 120.518 119.367 120.512 119.381C120.507 119.396 120.499 119.409 120.488 119.42C120.477 119.431 120.464 119.44 120.45 119.446C120.421 119.473 120.401 119.508 120.392 119.547C120.384 119.586 120.389 119.627 120.405 119.664C120.43 119.905 120.412 120.149 120.352 120.385C120.265 120.765 120.265 120.952 120.341 120.985C120.354 120.99 120.366 120.999 120.375 121.009C120.384 121.02 120.392 121.032 120.396 121.046C120.4 121.059 120.401 121.074 120.4 121.088C120.398 121.102 120.393 121.115 120.386 121.128C120.239 122.059 120.172 123.001 120.186 123.944C120.232 124.503 120.095 125.061 119.795 125.536C119.608 125.667 119.608 125.678 119.826 125.854C120.044 126.03 120.036 126.114 119.969 127.24C119.954 127.706 119.896 128.17 119.796 128.626C119.763 128.682 119.746 128.746 119.746 128.812C119.746 128.877 119.763 128.941 119.796 128.998C119.875 129.485 119.879 129.981 119.807 130.47C119.77 130.675 119.747 130.884 119.74 131.093C119.746 131.359 119.693 131.623 119.586 131.867C119.5 131.967 119.477 132.238 119.533 132.685C119.567 133.057 119.597 133.448 119.597 133.568C119.597 134.333 119.608 134.54 119.706 134.649C119.8 134.849 119.859 135.063 119.882 135.283C119.941 135.625 120.09 135.945 120.315 136.21C120.539 136.475 120.831 136.675 121.159 136.789C121.486 136.853 121.519 136.898 121.542 137.247C121.565 137.699 121.539 138.152 121.464 138.599C121.445 138.719 121.422 138.982 121.411 139.188C121.4 139.394 121.366 139.488 121.344 139.428C121.257 139.221 121.006 139.263 120.931 139.503C120.886 139.623 120.788 139.721 120.713 139.721C120.484 139.721 120.513 139.931 120.747 139.942C120.887 139.95 120.875 139.973 120.691 140.051C120.56 140.093 120.451 140.213 120.451 140.291C120.451 140.64 118.401 140.891 118.202 140.573C118.149 140.486 118.102 140.473 118.051 140.562C117.875 140.051 117.003 139.132 117.165 140.148C117.034 140.29 116.883 140.201 116.936 140.486L116.958 140.648L116.665 140.948C116.365 141.241 116.065 141.248 116.065 140.948C116.064 140.904 116.046 140.863 116.015 140.833C115.984 140.802 115.943 140.784 115.9 140.783C115.8 140.783 115.758 140.741 115.791 140.683C115.824 140.625 115.791 140.574 115.727 140.574C115.667 140.56 115.61 140.534 115.56 140.496C115.511 140.458 115.471 140.41 115.442 140.356C115.408 140.297 115.361 140.248 115.304 140.212C115.247 140.176 115.182 140.154 115.115 140.149C114.875 140.149 114.766 139.56 114.743 138.065L114.732 137.093L115.268 137.037C115.746 136.995 116.38 136.679 116.38 136.481C116.38 136.439 116.456 136.406 116.534 136.406C116.741 136.406 116.992 136.001 117.134 135.434C117.195 135.196 117.282 134.965 117.394 134.747C117.599 134.363 117.658 133.917 117.559 133.493C117.472 133.351 117.492 133.193 117.612 132.959C117.722 132.726 117.779 132.473 117.779 132.216C117.779 131.959 117.722 131.705 117.612 131.473C117.469 131.224 117.4 130.94 117.412 130.654C117.412 130.391 117.372 130.13 117.292 129.88C117.213 129.592 117.173 129.295 117.172 128.997C117.15 128.385 117.183 128.22 117.359 128.047C117.468 127.938 117.51 127.847 117.459 127.847C117.259 127.847 117.14 127.422 117.076 126.495C116.967 124.956 116.976 124.795 117.261 124.531C117.49 124.324 117.49 124.313 117.294 124.171C117.175 124.068 117.091 123.93 117.054 123.777C117.043 123.662 117.002 123.553 116.934 123.461C116.752 123.143 116.669 122.778 116.694 122.413C116.739 122.402 116.739 122.173 116.694 121.933C116.643 121.578 116.637 121.219 116.674 120.863C116.716 120.405 116.694 120.254 116.596 120.254C116.498 120.254 116.476 120.123 116.521 119.785C116.563 119.485 116.543 119.271 116.454 119.196C116.354 119.096 116.367 119.042 116.487 118.967C116.607 118.892 116.618 118.825 116.521 118.667C116.482 118.611 116.46 118.546 116.458 118.478C116.456 118.411 116.474 118.344 116.51 118.287C116.563 118.175 116.563 118.111 116.51 118.111C116.356 118.111 116.281 117.544 116.401 117.39C116.476 117.29 116.476 117.247 116.378 117.247C116.303 117.247 116.269 117.161 116.303 117.04C116.337 116.919 116.325 116.822 116.281 116.822C116.181 116.822 116.074 116.375 115.996 115.699C115.971 115.339 115.92 114.981 115.845 114.629C115.704 114.207 115.637 113.763 115.645 113.319C115.701 113.277 115.656 113.101 115.581 112.936C115.534 112.856 115.504 112.767 115.493 112.675C115.481 112.584 115.489 112.491 115.514 112.402C115.614 112.128 115.536 111.475 115.405 111.475C115.352 111.475 115.305 111.344 115.305 111.182C115.296 110.956 115.263 110.732 115.205 110.514C115.129 110.124 115.077 109.73 115.051 109.335C114.998 108.435 114.922 108.159 114.702 108.159C114.615 108.159 114.518 108.017 114.484 107.841C114.397 107.416 114.07 107.405 113.973 107.81C113.928 107.974 113.854 108.129 113.755 108.268C113.601 108.441 113.526 109.008 113.448 110.514C113.42 111.014 113.366 111.513 113.286 112.008C113.208 112.382 113.168 112.763 113.166 113.145C113.158 113.557 113.121 113.969 113.057 114.377C112.971 114.962 112.931 115.553 112.937 116.145C112.966 116.565 112.936 116.987 112.848 117.399C112.749 117.813 112.698 118.238 112.697 118.664C112.652 119.32 112.588 120.301 112.555 120.826C112.522 121.351 112.499 122.091 112.51 122.452C112.537 122.77 112.496 123.09 112.39 123.391C112.268 123.744 112.246 124.125 112.326 124.491C112.39 125.191 112.379 125.343 112.206 125.583C111.977 126.115 111.911 126.703 112.019 127.273C112.04 127.328 112.048 127.387 112.043 127.445C112.037 127.504 112.019 127.56 111.988 127.611C111.906 127.854 111.862 128.108 111.857 128.365C111.846 128.658 111.79 128.899 111.748 128.899C111.706 128.899 111.67 128.966 111.67 129.053C111.619 129.21 111.53 129.352 111.41 129.466C111.256 129.642 111.2 129.766 111.279 129.784C111.407 130.245 111.403 130.732 111.268 131.192C111.195 131.345 111.154 131.511 111.148 131.681C111.121 131.902 111.066 132.119 110.983 132.326C110.897 132.532 110.867 132.758 110.896 132.98C110.918 133.198 110.896 133.407 110.821 133.438C110.678 133.538 110.667 133.93 110.821 133.93C110.896 133.93 110.896 133.997 110.821 134.137C110.741 134.265 110.7 134.416 110.706 134.567C110.712 134.719 110.762 134.866 110.852 134.989C110.907 135.059 110.949 135.139 110.973 135.224C110.997 135.31 111.004 135.4 110.994 135.489C110.979 135.575 110.983 135.664 111.005 135.749C111.028 135.834 111.069 135.912 111.125 135.98C111.181 136.047 111.251 136.102 111.33 136.14C111.41 136.178 111.496 136.198 111.584 136.199C111.749 136.207 111.835 136.274 111.813 136.35C111.749 136.504 112.098 136.71 112.436 136.71C112.657 136.727 112.876 136.763 113.09 136.819L113.495 136.928L113.45 138.128C113.506 138.666 113.412 139.209 113.179 139.698C112.916 140.148 112.894 140.377 113.112 140.561C113.363 140.768 113.312 140.961 113.003 140.899C112.94 140.896 112.88 140.873 112.831 140.834C112.782 140.795 112.746 140.741 112.729 140.681C112.729 140.539 112.718 140.527 112.642 140.647C112.606 140.694 112.555 140.727 112.498 140.741C112.44 140.755 112.38 140.749 112.326 140.725C112.161 140.669 112.075 140.703 112.026 140.812C111.951 140.996 111.666 141.052 111.666 140.876C111.664 140.847 111.652 140.821 111.632 140.801C111.612 140.781 111.585 140.768 111.557 140.767C111.493 140.767 111.448 140.867 111.448 140.985C111.45 141.014 111.446 141.044 111.436 141.072C111.426 141.1 111.41 141.126 111.39 141.148C111.369 141.169 111.345 141.186 111.317 141.198C111.289 141.209 111.26 141.214 111.23 141.214C111.121 141.225 110.959 141.236 110.892 141.248C110.205 141.969 109.45 142.438 110.914 142.34C112.119 142.181 113.337 142.152 114.548 142.253C116.707 142.242 129.312 142.317 131.34 142.043L131.372 142.05Z" fill="#1B023F"/> -<path d="M1262.44 128.996V128.822C1262.41 128.516 1262.32 128.217 1262.19 127.94C1262.06 127.672 1261.89 127.428 1261.68 127.219C1261.47 127.011 1261.22 126.841 1260.95 126.719C1260.68 126.593 1260.38 126.519 1260.08 126.501V126.141H1259.77V125.711H1260.05V125.251H1259.83L1259.88 125.125L1259.92 125.015L1259.95 124.934L1259.96 124.897C1259.97 124.862 1259.98 124.826 1259.98 124.79C1259.99 124.732 1260 124.656 1260.01 124.58C1260.02 124.504 1260.03 124.428 1260.04 124.368C1260.04 124.308 1260.05 124.268 1260.05 124.252C1260.05 124.236 1260.04 124.158 1260.02 124.041C1260.01 123.924 1259.99 123.772 1259.96 123.621L1259.91 123.213L1259.89 123.028L1259.81 122.686L1259.65 121.941L1259.49 121.189L1259.42 120.83C1259.4 120.785 1259.39 120.741 1259.37 120.698C1259.34 120.627 1259.31 120.535 1259.27 120.444L1259.18 120.197L1259.13 120.086L1259.03 119.05L1259.19 119.188L1259.2 119.21L1259.21 119.266L1259.23 119.322C1259.23 119.334 1259.24 119.347 1259.24 119.361L1259.25 119.411L1259.27 119.491L1259.29 119.566L1259.3 119.599V119.776C1259.3 119.791 1259.31 119.806 1259.31 119.821C1259.32 119.841 1259.33 119.862 1259.34 119.882L1259.36 119.936L1259.38 119.959L1259.41 119.967L1259.5 119.984C1259.53 119.99 1259.57 119.996 1259.6 120C1259.64 120.003 1259.67 120.003 1259.7 120C1259.72 119.999 1259.74 119.996 1259.76 119.991C1259.76 119.991 1259.76 119.99 1259.77 119.987C1259.77 119.985 1259.77 119.981 1259.77 119.978V119.967H1259.77L1259.79 119.921L1259.83 119.811C1259.85 119.768 1259.87 119.721 1259.89 119.677C1259.91 119.633 1259.93 119.591 1259.94 119.558C1259.95 119.532 1259.97 119.511 1259.99 119.496C1260.01 119.486 1260.03 119.483 1260.04 119.486C1260.06 119.488 1260.07 119.493 1260.08 119.501L1260.09 119.512V119.484C1260.1 119.462 1260.1 119.44 1260.11 119.419C1260.11 119.392 1260.12 119.366 1260.14 119.342C1260.15 119.318 1260.17 119.297 1260.19 119.28C1260.21 119.264 1260.23 119.246 1260.25 119.227C1260.27 119.207 1260.29 119.187 1260.3 119.165C1260.32 119.145 1260.33 119.124 1260.35 119.103C1260.36 119.086 1260.37 119.068 1260.37 119.05C1260.38 119.04 1260.38 119.03 1260.37 119.02C1260.37 119.01 1260.37 119.001 1260.36 118.993C1260.35 118.968 1260.33 118.945 1260.31 118.923C1260.29 118.899 1260.27 118.875 1260.26 118.855C1260.24 118.841 1260.24 118.824 1260.23 118.806C1260.23 118.793 1260.24 118.781 1260.25 118.772C1260.26 118.76 1260.27 118.75 1260.28 118.742L1260.31 118.721V118.714L1260.65 118.507V118.407C1260.65 118.395 1260.65 118.383 1260.65 118.372C1260.65 118.351 1260.65 118.331 1260.65 118.311V118.004C1260.65 117.983 1260.65 117.962 1260.64 117.942C1260.64 117.916 1260.64 117.891 1260.63 117.867C1260.63 117.842 1260.62 117.815 1260.61 117.792C1260.61 117.769 1260.6 117.747 1260.59 117.729C1260.59 117.71 1260.59 117.69 1260.58 117.67C1260.58 117.647 1260.58 117.623 1260.58 117.6V117.436C1260.58 117.414 1260.58 117.392 1260.58 117.37C1260.58 117.356 1260.58 117.342 1260.57 117.329L1260.54 117.289C1260.54 117.273 1260.53 117.256 1260.53 117.24C1260.53 117.216 1260.52 117.192 1260.52 117.169C1260.51 117.14 1260.49 117.109 1260.48 117.078L1260.44 116.984C1260.43 116.954 1260.42 116.925 1260.41 116.9C1260.4 116.875 1260.39 116.848 1260.37 116.821C1260.36 116.794 1260.35 116.765 1260.33 116.738L1260.29 116.659L1260.25 116.589L1260.19 116.464L1260.09 116.264L1260 116.077L1259.95 115.994L1259.62 115.12C1259.79 115.373 1259.96 115.614 1260.12 115.832C1260.28 116.037 1260.45 116.231 1260.63 116.411C1260.78 116.563 1260.95 116.691 1261.14 116.792C1261.3 116.878 1261.48 116.919 1261.67 116.912C1262.08 116.812 1262.24 116.392 1262.23 115.804C1262.19 115.086 1262.02 114.381 1261.75 113.717C1261.47 112.983 1261.1 112.287 1260.65 111.647C1260.36 111.154 1259.91 110.779 1259.37 110.589C1259.22 110.574 1259.06 110.613 1258.92 110.7C1258.81 110.78 1258.72 110.891 1258.66 111.02C1258.6 111.151 1258.56 111.291 1258.55 111.434C1258.53 111.564 1258.54 111.695 1258.56 111.825L1258.52 111.851L1258.44 111.91C1258.41 111.932 1258.39 111.955 1258.36 111.975C1258.35 111.986 1258.33 112.001 1258.32 112.018C1258.32 112.031 1258.33 112.045 1258.33 112.057C1258.34 112.076 1258.35 112.095 1258.37 112.113L1258.4 112.164L1258.42 112.189L1258.2 112.158L1258.19 112.148L1258.17 112.124L1258.14 112.094C1258.13 112.086 1258.12 112.076 1258.11 112.067C1258.11 112.056 1258.1 112.046 1258.09 112.039C1258.07 112.029 1258.05 112.019 1258.04 112.009L1257.99 111.989L1257.97 111.979L1257.94 111.953L1257.88 111.889C1257.85 111.867 1257.83 111.844 1257.81 111.825C1257.8 111.814 1257.78 111.802 1257.77 111.789C1257.77 111.778 1257.76 111.766 1257.76 111.754C1257.76 111.739 1257.76 111.721 1257.76 111.703C1257.76 111.685 1257.76 111.667 1257.76 111.649V111.314C1257.76 111.299 1257.76 111.285 1257.76 111.271C1257.76 111.26 1257.77 111.249 1257.77 111.24C1257.78 111.231 1257.78 111.223 1257.79 111.216C1257.8 111.206 1257.81 111.197 1257.82 111.189L1257.87 111.156L1257.93 111.119C1257.94 111.106 1257.96 111.093 1257.98 111.079C1257.99 111.07 1258 111.059 1258 111.047C1258.01 111.044 1258.01 111.04 1258.01 111.037C1258.01 111.033 1258.01 111.03 1258 111.027V111.012C1258 111.008 1258 111.004 1258 111C1258 110.996 1258 110.992 1258 110.989C1258.01 110.98 1258.01 110.971 1258.01 110.962C1258.01 110.948 1258.01 110.934 1258.02 110.921C1258.02 110.906 1258.02 110.89 1258.02 110.875C1258.03 110.86 1258.03 110.845 1258.04 110.831C1258.04 110.817 1258.05 110.803 1258.05 110.789C1258.05 110.777 1258.05 110.765 1258.05 110.753V110.674C1258.05 110.658 1258.05 110.642 1258.05 110.627C1258.05 110.61 1258.05 110.593 1258.05 110.578C1258.04 110.562 1258.04 110.545 1258.04 110.529C1258.04 110.513 1258.04 110.497 1258.04 110.482V110.426C1258.04 110.403 1258.04 110.381 1258.03 110.36C1258.03 110.338 1258.03 110.315 1258.02 110.295L1258.01 110.248C1258.01 110.233 1258.01 110.22 1258 110.207C1257.99 110.192 1257.99 110.178 1257.98 110.164C1257.97 110.15 1257.96 110.134 1257.95 110.119C1257.95 110.104 1257.94 110.089 1257.94 110.074C1257.94 110.059 1257.93 110.044 1257.93 110.031L1257.91 109.989L1257.9 109.953L1257.88 109.915C1257.87 109.899 1257.87 109.884 1257.86 109.87L1257.82 109.816C1257.81 109.796 1257.8 109.776 1257.79 109.756C1257.78 109.735 1257.77 109.714 1257.76 109.693C1257.76 109.675 1257.75 109.658 1257.75 109.64C1257.74 109.628 1257.74 109.615 1257.74 109.603C1257.74 109.593 1257.74 109.583 1257.74 109.574V109.547C1257.74 109.529 1257.73 109.512 1257.72 109.496C1257.71 109.473 1257.7 109.446 1257.69 109.417L1257.65 109.334L1257.61 109.27C1257.6 109.254 1257.6 109.248 1257.59 109.248C1257.58 109.248 1257.58 109.249 1257.57 109.251C1257.57 109.253 1257.57 109.255 1257.56 109.259C1257.56 109.266 1257.55 109.273 1257.55 109.282L1257.54 109.294L1257.31 109.425L1257.3 109.325L1257.3 109.281C1257.31 109.254 1257.32 109.218 1257.32 109.181C1257.33 109.144 1257.33 109.102 1257.34 109.068C1257.34 109.042 1257.35 109.015 1257.35 108.989C1257.35 108.983 1257.35 108.977 1257.35 108.973C1257.34 108.968 1257.34 108.965 1257.33 108.964C1257.32 108.963 1257.31 108.965 1257.29 108.97C1257.28 108.974 1257.27 108.98 1257.25 108.987L1257.24 108.997L1257.11 108.975L1257.12 108.959C1257.13 108.944 1257.13 108.93 1257.14 108.917C1257.15 108.9 1257.16 108.88 1257.16 108.858C1257.17 108.835 1257.17 108.812 1257.18 108.789C1257.18 108.774 1257.18 108.76 1257.18 108.746V108.735L1257.18 108.742V108.75L1257.21 108.575L1257.38 108.583H1257.39L1257.4 108.572L1257.43 108.555L1257.47 108.529C1257.48 108.522 1257.49 108.512 1257.5 108.5C1257.5 108.487 1257.51 108.474 1257.51 108.46C1257.51 108.442 1257.51 108.425 1257.52 108.408C1257.52 108.389 1257.51 108.368 1257.52 108.345C1257.53 108.326 1257.53 108.308 1257.53 108.289C1257.53 108.274 1257.53 108.259 1257.53 108.245V108.103C1257.53 108.069 1257.53 108.036 1257.54 108.003C1257.54 107.969 1257.54 107.924 1257.54 107.886C1257.54 107.852 1257.54 107.819 1257.54 107.786C1257.55 107.755 1257.55 107.725 1257.54 107.695C1257.54 107.671 1257.53 107.648 1257.52 107.626C1257.52 107.611 1257.51 107.595 1257.51 107.58L1257.5 107.562H1257.36L1257.05 107.569L1256.93 107.489L1256.73 107.389L1256.53 107.405L1256.32 107.55L1256.12 107.957L1255.99 108.472L1255.99 109.248L1255.79 109.494L1255.65 109.755L1255.8 109.939V110.723L1255.94 110.953L1256.15 111.091C1256.15 111.104 1256.15 111.117 1256.14 111.13C1256.14 111.154 1256.13 111.187 1256.13 111.223C1256.12 111.259 1256.11 111.296 1256.1 111.33C1256.1 111.359 1256.09 111.386 1256.07 111.413C1256.06 111.435 1256.05 111.46 1256.05 111.485C1256.04 111.514 1256.04 111.543 1256.03 111.573C1256.03 111.601 1256.03 111.63 1256.03 111.658C1256.03 111.679 1256.03 111.7 1256.03 111.721V112.044C1256.03 112.07 1256.02 112.096 1256.01 112.121C1256 112.148 1255.99 112.175 1255.98 112.201C1255.96 112.226 1255.95 112.248 1255.94 112.264L1255.92 112.289L1255.76 112.458L1255.69 112.5L1255.53 112.6L1255.35 112.708C1255.3 112.741 1255.25 112.769 1255.23 112.784C1255.21 112.799 1255.17 112.826 1255.13 112.858L1255.01 112.958L1254.91 113.049L1254.87 113.088L1254.69 113.825L1254.63 114.163L1254.58 114.378L1254.3 114.947L1253.72 115.44L1253.2 116.132L1252.43 116.887L1252.16 116.948H1251.73L1251.56 117.038L1249.86 113.63L1249.94 113.499V113.426C1249.94 113.409 1249.94 113.392 1249.94 113.376C1249.94 113.362 1249.94 113.353 1249.93 113.353H1249.8L1249.78 113.359C1249.77 113.361 1249.76 113.361 1249.75 113.359C1249.75 113.357 1249.74 113.355 1249.74 113.352C1249.74 113.348 1249.74 113.345 1249.73 113.341C1249.73 113.323 1249.73 113.306 1249.72 113.29C1249.71 113.267 1249.71 113.241 1249.7 113.216L1249.68 113.149L1249.68 113.12L1249.69 112.942L1248.5 111.186L1249.17 113.232L1249.32 113.271L1249.4 113.363L1249.44 113.44L1249.41 113.556L1249.4 113.649L1249.5 113.711L1249.58 113.718H1249.6L1251.38 117.286L1251.19 117.34L1251.17 117.509L1251.22 117.724L1251.37 117.939L1251.55 118.016L1251.66 118.293H1251.82L1251.87 118.273L1253.69 121.942V122.007L1253.73 122.073C1253.75 122.113 1253.78 122.166 1253.82 122.22C1253.85 122.274 1253.88 122.331 1253.92 122.376C1253.94 122.41 1253.96 122.441 1253.99 122.467C1254.01 122.48 1254.03 122.5 1254.04 122.523C1254.05 122.55 1254.05 122.578 1254.05 122.607C1254.06 122.636 1254.06 122.665 1254.05 122.694V122.829C1254.05 122.859 1254.06 122.893 1254.06 122.929C1254.07 122.965 1254.07 122.998 1254.07 123.029C1254.08 123.052 1254.08 123.075 1254.07 123.099C1254.07 123.145 1254.08 123.191 1254.08 123.237C1254.09 123.307 1254.1 123.396 1254.1 123.484C1254.11 123.572 1254.12 123.661 1254.13 123.731C1254.13 123.801 1254.14 123.853 1254.14 123.868C1254.13 123.896 1254.12 123.923 1254.1 123.947C1254.08 123.982 1254.06 124.022 1254.03 124.061C1254 124.1 1253.98 124.136 1253.96 124.161L1253.92 124.205L1254.07 124.481L1254.56 124.639V125.278H1254.08V125.739H1254.38V126.17H1254.07V126.531C1253.76 126.553 1253.46 126.63 1253.19 126.758C1252.92 126.883 1252.67 127.055 1252.46 127.265C1252.03 127.697 1251.76 128.268 1251.7 128.879V129.521L1251.7 129.552L1251.71 129.583L1251.72 129.613L1251.72 129.644L1251.73 129.677L1251.73 129.709L1251.74 129.741L1251.75 129.774V129.806C1251.81 130.046 1251.91 130.276 1252.04 130.488C1252.17 130.699 1252.33 130.891 1252.51 131.059C1252.69 131.226 1252.9 131.368 1253.12 131.48C1253.34 131.592 1253.57 131.67 1253.82 131.712H1254.69L1255.74 131.705L1257.8 131.697L1259.26 131.678L1259.88 131.686L1260.15 131.671H1259.66L1254.24 131.713L1259.94 131.682C1260.5 131.671 1261.04 131.473 1261.47 131.121C1261.9 130.771 1262.21 130.293 1262.35 129.756V129.729L1262.37 129.686L1262.38 129.645L1262.39 129.604L1262.39 129.562V129.018C1262.43 129.01 1262.44 129.003 1262.44 128.996ZM1254.02 119.943L1254 120.043L1253.97 120.277C1253.95 120.363 1253.94 120.452 1253.93 120.523C1253.91 120.594 1253.9 120.646 1253.9 120.662C1253.9 120.678 1253.89 120.708 1253.87 120.746L1253.83 120.87L1253.78 120.982L1253.76 121.031L1253.74 121.381L1252.12 118.13L1252.17 118.081L1252.23 118.031L1252.29 117.984L1252.33 117.945C1252.36 117.925 1252.38 117.903 1252.4 117.881L1252.48 117.799L1252.55 117.729L1252.57 117.699L1252.87 117.513L1253.94 116.836L1253.9 116.899L1253.81 117.023C1253.78 117.069 1253.75 117.117 1253.72 117.157C1253.71 117.186 1253.69 117.217 1253.67 117.25C1253.66 117.278 1253.66 117.307 1253.66 117.337C1253.66 117.374 1253.65 117.419 1253.65 117.465C1253.65 117.511 1253.65 117.558 1253.66 117.604C1253.66 117.645 1253.66 117.685 1253.67 117.726C1253.68 117.76 1253.69 117.794 1253.71 117.826C1253.73 117.858 1253.75 117.89 1253.77 117.92C1253.78 117.948 1253.8 117.971 1253.82 117.988L1253.84 118.014L1254.02 118.244L1254.01 118.286C1254 118.306 1253.99 118.334 1253.98 118.365C1253.97 118.396 1253.96 118.429 1253.95 118.465C1253.94 118.492 1253.94 118.521 1253.94 118.55C1253.94 118.586 1253.94 118.622 1253.95 118.658C1253.96 118.704 1253.97 118.758 1253.99 118.806C1254 118.854 1254.01 118.906 1254.02 118.937L1254.04 118.994L1254.1 119.348L1254.02 119.943ZM1262.93 146.981V151.338L1263.91 151.328V146.972L1262.93 146.981ZM1251.19 151.459L1263.91 151.328V146.972L1262.93 146.981V146.425L1261.7 146.436V145.742H1262.04V144.61L1261.11 144.618V142.798L1259.84 142.808V132.386L1254.3 132.418V142.853L1253.02 142.863V144.686L1252.08 144.694V145.825H1252.42V146.525L1251.19 146.536V147.806L1251.19 151.459ZM1250.21 147.099V151.47L1251.19 151.46V147.086L1250.21 147.099Z" fill="#1B023F"/> -<path d="M648.832 140.392L732.125 138.116V135.551L648.832 140.392Z" fill="#FAFBFC"/> -<path d="M734.129 131.52L734.328 140.22L788.039 141.899L734.129 131.52Z" fill="#1B023F"/> -<path d="M761.732 96.6085L761.726 94.9465L734.498 79.9084L734.883 83.8375L761.732 96.6085ZM788.182 110.692L788.272 109.61L780.398 105.21L780.532 106.71L788.182 110.692ZM734.702 78.3314L740.115 81.4014L739.784 79.3414L734.995 74.9554L734.702 78.3314ZM656.958 101.931L733.632 87.3234L732.88 79.8735L656.861 96.9285L657.016 99.6354L656.462 99.9824L656.695 100.544L656.958 101.931ZM733.258 76.5195L734.264 73.7634L726.17 73.4824L725.932 75.5764L721.756 75.6304L721.782 77.4625L692.141 76.0284L691.706 81.9135L689.493 82.2034L689.724 79.9824L685.694 81.0825L685.724 83.0375L682.856 83.3375L683.097 82.1584L673.632 85.9434L663.293 91.9584L658.748 93.1924L661.46 91.5925L661.18 90.5524L659.116 91.7524L658.967 90.7064L654.432 92.5984L654.874 95.8555L655.792 95.9714L733.402 77.6965L733.258 76.5195ZM735.377 87.3124L789.171 114.143L788.818 112.277L762.8 99.0325L735.232 85.2394L735.377 87.3124ZM655.514 136.882L708.319 131.158L656.156 135.235L655.514 136.882ZM790.588 141.094L734.138 131.094L734.384 136.15L790.95 141.782L790.588 141.094ZM790.488 142.765L734.559 137.452L734.659 140.497L790.488 142.765ZM649.043 142.982L704.996 140.432L732.324 140.674L732.182 129.693L705.332 133.281L651.47 137.307L651.364 138.274L701.504 135.155L667.153 138.399L649.453 139.499L649.043 142.982ZM668.832 101.821L672.063 103.553V102.802L668.915 101.118L663.287 102.168L663.229 102.933L668.832 101.821ZM674.95 103.639L673.159 133.006L673.581 132.977L675.299 103.177C675.299 103.155 675.306 103.133 675.311 103.112C675.322 103.065 675.338 103.019 675.36 102.975C675.382 102.926 675.416 102.882 675.46 102.849C675.487 102.832 675.517 102.821 675.548 102.816C675.579 102.811 675.611 102.813 675.642 102.82C675.706 102.832 675.765 102.864 675.809 102.911C675.843 102.952 675.866 103 675.876 103.052C675.885 103.095 675.888 103.138 675.885 103.181C675.885 103.2 675.885 103.218 675.879 103.237L674.327 132.922L674.816 132.887L676.258 102.887C676.26 102.866 676.264 102.844 676.269 102.823C676.28 102.776 676.296 102.731 676.317 102.687C676.339 102.638 676.373 102.595 676.417 102.563C676.444 102.547 676.474 102.536 676.506 102.531C676.537 102.527 676.569 102.528 676.6 102.536C676.664 102.546 676.723 102.578 676.766 102.625C676.8 102.665 676.822 102.713 676.832 102.764C676.84 102.807 676.843 102.85 676.84 102.892C676.839 102.911 676.837 102.93 676.833 102.948L675.582 132.829L676.059 132.796L677.168 102.881C677.17 102.86 677.174 102.838 677.179 102.816C677.188 102.77 677.202 102.725 677.222 102.681C677.244 102.632 677.279 102.589 677.322 102.557C677.349 102.541 677.379 102.53 677.411 102.525C677.443 102.52 677.475 102.522 677.506 102.53C677.57 102.542 677.628 102.574 677.672 102.621C677.706 102.661 677.728 102.709 677.738 102.76C677.746 102.802 677.749 102.845 677.746 102.887C677.745 102.906 677.743 102.925 677.739 102.943L676.82 132.743L677.205 132.717L678.105 103.156C678.107 103.135 678.111 103.114 678.116 103.092C678.126 103.045 678.142 103 678.163 102.956C678.185 102.907 678.219 102.864 678.263 102.832C678.29 102.815 678.321 102.804 678.353 102.799C678.384 102.794 678.417 102.796 678.448 102.803C678.512 102.815 678.571 102.848 678.615 102.896C678.649 102.937 678.672 102.985 678.681 103.036C678.689 103.079 678.692 103.122 678.689 103.164C678.688 103.183 678.686 103.202 678.682 103.22L677.964 132.663L678.328 132.637L678.967 102.606C678.814 102.54 678.657 102.482 678.497 102.432C678.11 102.308 677.713 102.22 677.31 102.169C676.789 102.101 676.259 102.113 675.742 102.207C675.153 102.316 674.598 102.566 674.126 102.935C674.026 104.023 673.866 106.176 673.668 108.862C673.47 111.548 673.239 114.762 673.01 117.987C672.781 121.212 672.555 124.429 672.366 127.124C672.177 129.819 672.027 131.985 671.95 133.097L672.378 133.067L674.344 103.581C674.347 103.56 674.351 103.539 674.356 103.517C674.367 103.47 674.383 103.424 674.404 103.38C674.428 103.33 674.464 103.287 674.51 103.255C674.537 103.239 674.567 103.228 674.599 103.223C674.63 103.218 674.662 103.219 674.693 103.226C674.758 103.238 674.817 103.27 674.861 103.318C674.895 103.359 674.918 103.407 674.928 103.458C674.937 103.5 674.94 103.544 674.937 103.586C674.937 103.604 674.937 103.622 674.93 103.64L674.95 103.639ZM672.205 101.295L677.982 100.145L681.332 101.935L681.314 101.158L678.045 99.4185L672.245 100.505L672.205 101.295ZM685.05 101.839L683.521 132.255L683.957 132.225L685.411 101.362C685.413 101.34 685.417 101.318 685.422 101.295C685.432 101.246 685.448 101.199 685.47 101.153C685.494 101.102 685.531 101.057 685.578 101.024C685.606 101.007 685.638 100.995 685.67 100.99C685.703 100.985 685.737 100.986 685.769 100.994C685.835 101.006 685.896 101.039 685.941 101.088C685.976 101.13 686 101.179 686.011 101.232C686.02 101.276 686.023 101.32 686.021 101.364C686.021 101.383 686.021 101.403 686.015 101.422L684.738 132.166L685.238 132.132L686.397 101.068C686.399 101.046 686.403 101.024 686.408 101.002C686.419 100.954 686.435 100.906 686.457 100.861C686.481 100.809 686.519 100.765 686.566 100.732C686.623 100.697 686.693 100.687 686.758 100.702C686.825 100.716 686.886 100.751 686.931 100.802C686.966 100.844 686.99 100.894 687.001 100.947C687.01 100.991 687.014 101.035 687.012 101.079C687.012 101.098 687.012 101.118 687.006 101.137L686.032 132.074L686.532 132.034L687.347 101.062C687.349 101.04 687.352 101.018 687.357 100.995C687.367 100.946 687.383 100.899 687.404 100.853C687.427 100.802 687.464 100.757 687.51 100.724C687.538 100.707 687.569 100.695 687.602 100.69C687.634 100.686 687.667 100.687 687.699 100.695C687.767 100.708 687.829 100.743 687.874 100.795C687.91 100.837 687.934 100.887 687.944 100.94C687.953 100.984 687.956 101.028 687.953 101.072C687.952 101.092 687.95 101.111 687.946 101.13L687.313 131.986L687.713 131.957L688.319 101.344C688.321 101.322 688.325 101.3 688.33 101.278C688.34 101.23 688.356 101.182 688.378 101.137C688.402 101.086 688.439 101.041 688.485 101.008C688.513 100.991 688.544 100.979 688.576 100.974C688.609 100.969 688.642 100.971 688.674 100.978C688.74 100.99 688.801 101.023 688.846 101.073C688.881 101.115 688.905 101.165 688.916 101.218C688.925 101.262 688.928 101.307 688.926 101.351C688.925 101.371 688.923 101.39 688.92 101.409L688.501 131.901L688.875 131.873L689.209 100.773C689.05 100.705 688.887 100.645 688.722 100.593C688.322 100.465 687.912 100.375 687.495 100.322C686.957 100.251 686.411 100.265 685.877 100.362C685.271 100.475 684.702 100.733 684.218 101.115C684.132 102.244 683.987 104.486 683.81 107.286C683.633 110.086 683.432 113.426 683.232 116.771C683.032 120.116 682.832 123.456 682.667 126.237C682.502 129.018 682.373 131.237 682.308 132.347L682.746 132.317L684.446 101.786C684.448 101.764 684.452 101.741 684.457 101.719C684.468 101.67 684.484 101.623 684.506 101.577C684.53 101.525 684.568 101.48 684.615 101.447C684.643 101.43 684.674 101.418 684.707 101.412C684.74 101.407 684.774 101.408 684.806 101.416C684.873 101.429 684.933 101.465 684.977 101.516C685.012 101.558 685.036 101.608 685.046 101.661C685.055 101.705 685.058 101.749 685.055 101.793C685.054 101.811 685.052 101.828 685.049 101.844L685.05 101.839ZM710.724 94.0314L714.459 95.9965L714.41 95.1395L710.778 93.2305L704.467 94.4244L704.442 95.2944L710.724 94.0314ZM682.191 99.4185L688.135 98.2285L691.62 100.081L691.592 99.2814L688.202 97.4814L682.232 98.5975L682.191 99.4185ZM695.709 99.6945L694.432 131.462L694.883 131.433L696.076 99.1984C696.078 99.1756 696.082 99.1529 696.087 99.1304C696.096 99.0792 696.111 99.0292 696.132 98.9814C696.156 98.9282 696.193 98.8823 696.241 98.8484C696.27 98.8295 696.303 98.8167 696.338 98.811C696.372 98.8054 696.407 98.8068 696.441 98.8154C696.51 98.8283 696.572 98.8635 696.619 98.9155C696.655 98.9585 696.68 99.0096 696.692 99.0645C696.702 99.1091 696.706 99.1548 696.704 99.2004C696.704 99.2204 696.704 99.2395 696.698 99.2595L695.698 131.371L696.216 131.333L697.104 98.8975C697.106 98.8746 697.11 98.8518 697.115 98.8295C697.125 98.7791 697.141 98.73 697.163 98.6835C697.187 98.6298 697.224 98.5835 697.272 98.5494C697.3 98.5311 697.332 98.5187 697.365 98.5131C697.398 98.5074 697.432 98.5085 697.465 98.5164C697.535 98.5293 697.599 98.5644 697.647 98.6165C697.684 98.6586 697.71 98.7096 697.722 98.7645C697.732 98.8087 697.736 98.8541 697.734 98.8995C697.733 98.9192 697.731 98.9389 697.728 98.9584L697.028 131.276L697.54 131.239L698.071 98.8895C698.073 98.8666 698.077 98.8439 698.082 98.8215C698.092 98.7711 698.108 98.722 698.13 98.6754C698.154 98.6218 698.192 98.5757 698.24 98.5424C698.269 98.5238 698.302 98.5116 698.337 98.5064C698.371 98.5012 698.406 98.5033 698.44 98.5125C698.51 98.5242 698.573 98.5595 698.62 98.6124C698.657 98.6555 698.682 98.7071 698.694 98.7625C698.704 98.8074 698.708 98.8535 698.706 98.8995C698.706 98.9195 698.704 98.9395 698.7 98.9595L698.355 131.181L698.772 131.149L699.086 99.1794C699.088 99.1562 699.091 99.1332 699.096 99.1105C699.106 99.0601 699.122 99.011 699.143 98.9644C699.167 98.9112 699.204 98.8653 699.252 98.8314C699.282 98.8131 699.314 98.801 699.349 98.7958C699.383 98.7907 699.419 98.7926 699.452 98.8015C699.521 98.8143 699.583 98.8494 699.63 98.9014C699.666 98.9445 699.691 98.9956 699.703 99.0504C699.713 99.095 699.717 99.1408 699.715 99.1865C699.715 99.2065 699.713 99.2265 699.709 99.2465L699.584 131.09L699.976 131.065L700.002 98.5934C699.839 98.5225 699.672 98.4604 699.502 98.4075C699.089 98.2747 698.665 98.1803 698.235 98.1254C697.681 98.0514 697.118 98.0645 696.568 98.1644C695.946 98.2793 695.362 98.5455 694.868 98.9395C694.787 100.139 694.653 102.569 694.493 105.583C694.333 108.597 694.15 112.199 693.972 115.759C693.794 119.319 693.619 122.833 693.48 125.676C693.341 128.519 693.234 130.688 693.192 131.557L693.646 131.524L695.104 99.6324C695.106 99.6092 695.11 99.5861 695.115 99.5634C695.125 99.513 695.141 99.464 695.163 99.4174C695.187 99.3642 695.224 99.3183 695.272 99.2844C695.301 99.2666 695.333 99.2547 695.366 99.2496C695.4 99.2444 695.434 99.2461 695.467 99.2545C695.536 99.267 695.599 99.3021 695.646 99.3544C695.682 99.3972 695.707 99.4484 695.719 99.5034C695.729 99.5484 695.733 99.5944 695.731 99.6404C695.727 99.6591 695.721 99.6774 695.715 99.6954L695.709 99.6945ZM692.743 97.1945L698.855 95.9664L702.465 97.8765L702.426 97.0464L698.913 95.1915L692.777 96.3505L692.743 97.1945ZM715.843 93.1724L722.297 91.8724L726.155 93.8975L726.101 93.0175L722.345 91.0494L715.865 92.2755L715.843 93.1724ZM666.398 105.192L664.498 133.637L664.879 133.605L666.732 104.743C666.732 104.722 666.738 104.701 666.743 104.681C666.752 104.636 666.767 104.592 666.787 104.549C666.809 104.501 666.844 104.46 666.887 104.429C666.911 104.413 666.939 104.402 666.968 104.397C666.997 104.393 667.027 104.394 667.055 104.402C667.114 104.414 667.168 104.445 667.206 104.491C667.237 104.531 667.257 104.577 667.265 104.626C667.272 104.667 667.274 104.709 667.271 104.75C667.27 104.769 667.267 104.787 667.264 104.804L665.572 133.56L666.015 133.527L667.606 104.469C667.606 104.448 667.612 104.427 667.617 104.407C667.627 104.362 667.642 104.318 667.662 104.276C667.684 104.228 667.719 104.187 667.762 104.156C667.786 104.14 667.814 104.13 667.843 104.125C667.871 104.12 667.901 104.122 667.929 104.129C667.988 104.141 668.041 104.172 668.08 104.218C668.111 104.257 668.132 104.303 668.14 104.352C668.148 104.393 668.15 104.434 668.148 104.475C668.147 104.494 668.145 104.512 668.142 104.529L666.711 133.476L667.147 133.443L668.432 104.466C668.435 104.446 668.438 104.425 668.443 104.404C668.453 104.359 668.467 104.315 668.487 104.272C668.509 104.224 668.544 104.182 668.587 104.151C668.611 104.135 668.638 104.124 668.667 104.119C668.695 104.115 668.724 104.116 668.752 104.123C668.812 104.134 668.866 104.166 668.905 104.212C668.936 104.252 668.957 104.299 668.965 104.348C668.972 104.389 668.975 104.431 668.972 104.472C668.971 104.491 668.969 104.509 668.966 104.527L667.841 133.393L668.196 133.366L669.296 104.73C669.298 104.709 669.302 104.688 669.306 104.667C669.315 104.622 669.33 104.577 669.349 104.534C669.371 104.486 669.406 104.445 669.449 104.413C669.473 104.397 669.501 104.386 669.53 104.382C669.558 104.377 669.588 104.379 669.616 104.387C669.675 104.398 669.728 104.429 669.767 104.474C669.798 104.513 669.819 104.56 669.827 104.608C669.834 104.649 669.837 104.69 669.834 104.731C669.833 104.75 669.831 104.768 669.828 104.785L668.897 133.32L669.231 133.294L670.094 104.194C669.956 104.13 669.814 104.074 669.669 104.025C669.32 103.906 668.96 103.82 668.594 103.77C668.12 103.703 667.639 103.715 667.169 103.805C666.627 103.912 666.12 104.153 665.695 104.505C665.595 105.561 665.428 107.654 665.222 110.264C665.016 112.874 664.775 116 664.536 119.125C664.297 122.25 664.061 125.372 663.864 127.976C663.667 130.58 663.512 132.665 663.433 133.715L663.826 133.684L665.88 105.134C665.883 105.114 665.886 105.093 665.891 105.072C665.901 105.027 665.915 104.983 665.935 104.94C665.957 104.892 665.992 104.851 666.035 104.82C666.059 104.804 666.087 104.794 666.116 104.789C666.145 104.784 666.174 104.786 666.202 104.793C666.261 104.805 666.315 104.836 666.353 104.882C666.383 104.922 666.403 104.968 666.411 105.017C666.418 105.058 666.42 105.099 666.417 105.14C666.412 105.158 666.405 105.176 666.398 105.192ZM709.583 97.1124L709.171 130.392L709.702 130.355L709.94 97.0424C709.942 97.0186 709.945 96.9949 709.95 96.9714C709.96 96.9197 709.975 96.8694 709.997 96.8215C710.021 96.7666 710.059 96.7192 710.108 96.6844C710.137 96.6658 710.17 96.6533 710.205 96.6478C710.239 96.6423 710.274 96.6439 710.308 96.6525C710.379 96.6646 710.445 96.6997 710.494 96.7524C710.532 96.7967 710.559 96.8495 710.572 96.9064C710.583 96.9522 710.588 96.9993 710.587 97.0464C710.588 97.0668 710.588 97.0871 710.587 97.1074L710.532 130.292L710.964 130.261L710.98 97.3405C710.982 97.3166 710.985 97.2929 710.99 97.2695C711 97.2174 711.016 97.1667 711.038 97.1185C711.062 97.0632 711.1 97.0152 711.149 96.9794C711.178 96.9603 711.211 96.9474 711.245 96.9413C711.28 96.9353 711.315 96.9364 711.349 96.9445C711.42 96.9564 711.485 96.9915 711.534 97.0444C711.572 97.0889 711.598 97.1422 711.61 97.1995C711.62 97.2458 711.624 97.2931 711.622 97.3405C711.621 97.3612 711.619 97.3819 711.616 97.4025L711.796 130.202L712.196 130.173L711.91 96.7324C711.74 96.6595 711.567 96.5955 711.391 96.5405C710.967 96.4046 710.532 96.3075 710.091 96.2504C709.521 96.1735 708.943 96.1874 708.378 96.2914C707.739 96.4094 707.14 96.6843 706.634 97.0914C706.563 98.3274 706.447 100.814 706.312 103.907C706.177 107 706.022 110.696 705.872 114.354C705.722 118.012 705.572 121.628 705.459 124.564C705.346 127.5 705.259 129.753 705.218 130.683L705.686 130.645L706.879 97.8035C706.881 97.7799 706.884 97.7566 706.889 97.7335C706.899 97.6817 706.915 97.6313 706.937 97.5834C706.961 97.5286 707 97.4815 707.049 97.4474C707.079 97.4292 707.112 97.4171 707.146 97.4117C707.18 97.4064 707.215 97.408 707.249 97.4164C707.32 97.4284 707.386 97.4636 707.435 97.5164C707.473 97.5601 707.499 97.6128 707.511 97.6694C707.521 97.7154 707.525 97.7625 707.523 97.8094C707.523 97.8294 707.523 97.8504 707.517 97.8704L706.511 130.588L706.974 130.555L707.896 97.3615C707.898 97.3376 707.901 97.3139 707.906 97.2905C707.916 97.2388 707.931 97.1884 707.953 97.1404C707.976 97.0854 708.014 97.0379 708.063 97.0034C708.092 96.9847 708.125 96.9723 708.16 96.9669C708.194 96.9616 708.229 96.9635 708.263 96.9725C708.334 96.9843 708.4 97.0195 708.449 97.0724C708.487 97.116 708.513 97.1682 708.526 97.2244C708.537 97.2703 708.541 97.3174 708.539 97.3644C708.539 97.3849 708.537 97.4052 708.534 97.4254L707.802 130.494L708.335 130.453L708.935 97.0464C708.937 97.0226 708.941 96.9989 708.946 96.9755C708.956 96.9237 708.973 96.8733 708.995 96.8254C709.019 96.7705 709.058 96.7231 709.107 96.6884C709.137 96.6702 709.17 96.6581 709.204 96.6528C709.238 96.6474 709.273 96.6491 709.307 96.6575C709.378 96.6698 709.443 96.7049 709.492 96.7574C709.53 96.8013 709.556 96.8539 709.569 96.9105C709.58 96.956 709.584 97.0027 709.583 97.0494C709.584 97.0708 709.584 97.0918 709.583 97.1124ZM732.053 93.1005L732.213 128.721L732.452 128.703L732.773 128.763L732.432 93.0225C732.433 92.9973 732.436 92.9723 732.44 92.9474C732.449 92.8928 732.464 92.8394 732.486 92.7885C732.51 92.7302 732.549 92.6796 732.6 92.6425C732.631 92.6226 732.666 92.6092 732.702 92.6032C732.739 92.5972 732.776 92.5986 732.812 92.6074C732.889 92.6212 732.959 92.6595 733.012 92.7164C733.053 92.7633 733.082 92.8192 733.097 92.8795C733.109 92.9278 733.115 92.9776 733.114 93.0275C733.114 93.0495 733.114 93.0705 733.114 93.0925L733.672 128.928L734.124 129.012L733.544 93.3394C733.546 93.3143 733.549 93.2893 733.554 93.2645C733.563 93.2094 733.58 93.1556 733.602 93.1044C733.626 93.0461 733.666 92.9956 733.717 92.9584C733.748 92.9386 733.782 92.9255 733.819 92.9198C733.855 92.9141 733.892 92.916 733.927 92.9254C734.003 92.9383 734.073 92.9755 734.127 93.0314C734.168 93.0778 734.197 93.1333 734.212 93.1934C734.224 93.2418 734.23 93.2916 734.229 93.3414C734.229 93.3634 734.229 93.3844 734.229 93.4064L735.029 129.18H735.275V129.228L735.736 129.312L736.376 96.6605C736.378 96.6366 736.381 96.6128 736.386 96.5894C736.395 96.537 736.411 96.486 736.433 96.4374C736.456 96.3818 736.494 96.3337 736.543 96.2985C736.572 96.2796 736.605 96.267 736.64 96.2613C736.674 96.2556 736.709 96.257 736.743 96.2654C736.816 96.2775 736.883 96.3125 736.935 96.3654C736.975 96.4098 737.003 96.4634 737.017 96.5214C737.029 96.5681 737.035 96.6162 737.034 96.6644C737.034 96.6851 737.034 96.7061 737.034 96.7274L736.57 129.466L737.03 129.552L737.403 96.2125C737.404 96.1883 737.407 96.1642 737.411 96.1404C737.419 96.0878 737.434 96.0363 737.455 95.9874C737.477 95.9315 737.515 95.8833 737.564 95.8484C737.594 95.8302 737.627 95.818 737.661 95.8127C737.695 95.8074 737.73 95.809 737.764 95.8174C737.836 95.8285 737.903 95.8637 737.953 95.9174C737.992 95.9621 738.019 96.0157 738.032 96.0734C738.043 96.1206 738.048 96.1691 738.046 96.2175C738.046 96.2386 738.044 96.2596 738.041 96.2805L737.861 129.707L738.397 129.807L738.432 95.8964C738.432 95.8724 738.435 95.8485 738.441 95.8245C738.45 95.7722 738.466 95.7211 738.487 95.6724C738.51 95.6167 738.548 95.5685 738.597 95.5334C738.626 95.5147 738.659 95.5021 738.694 95.4964C738.728 95.4907 738.763 95.4921 738.797 95.5004C738.869 95.5125 738.936 95.5476 738.986 95.6005C739.025 95.6448 739.053 95.6979 739.067 95.7554C739.078 95.8016 739.084 95.8489 739.083 95.8964C739.083 95.9174 739.083 95.9374 739.083 95.9584L739.225 129.964L739.762 130.064L739.44 95.8875C739.44 95.8635 739.445 95.8395 739.449 95.8165C739.458 95.7642 739.473 95.7132 739.494 95.6644C739.517 95.6086 739.555 95.5604 739.604 95.5255C739.633 95.5068 739.666 95.4943 739.701 95.4888C739.735 95.4833 739.77 95.4849 739.804 95.4935C739.876 95.5055 739.942 95.5405 739.993 95.5934C740.032 95.6378 740.06 95.691 740.074 95.7485C740.085 95.7949 740.091 95.8426 740.09 95.8904C740.09 95.9114 740.09 95.9315 740.09 95.9525L740.616 130.22L741.049 130.3L740.501 96.1854C740.503 96.1616 740.506 96.1379 740.511 96.1144C740.52 96.0622 740.536 96.0112 740.557 95.9625C740.58 95.9073 740.618 95.8596 740.666 95.8245C740.695 95.8055 740.728 95.7929 740.763 95.7875C740.797 95.7822 740.832 95.7842 740.866 95.7935C740.938 95.8055 741.004 95.8405 741.055 95.8934C741.094 95.9377 741.122 95.9909 741.136 96.0485C741.148 96.0949 741.153 96.1426 741.153 96.1904C741.153 96.2114 741.153 96.2314 741.153 96.2524L741.898 130.352H742.308L741.432 95.5724C741.26 95.4991 741.084 95.4347 740.905 95.3795C740.474 95.2423 740.032 95.1445 739.583 95.0875C739.008 95.0104 738.425 95.0245 737.854 95.1295C737.213 95.2484 736.613 95.5266 736.108 95.9384C736.066 96.9384 736.008 98.7495 735.947 101.038C735.886 103.327 735.812 106.085 735.74 108.987C735.668 111.889 735.595 114.931 735.528 117.787C735.461 120.643 735.399 123.294 735.35 125.426L734.518 92.7014C734.337 92.6253 734.153 92.5586 733.965 92.5015C733.513 92.3574 733.049 92.2546 732.579 92.1945C731.976 92.1135 731.364 92.1284 730.766 92.2385C730.094 92.3639 729.464 92.6561 728.934 93.0884C728.878 94.4464 728.797 97.2264 728.706 100.667C728.615 104.108 728.514 108.21 728.418 112.216C728.322 116.222 728.232 120.128 728.163 123.183C728.094 126.238 728.045 128.439 728.033 129.033L728.524 129.001L729.205 93.8434C729.207 93.8183 729.21 93.7932 729.215 93.7684C729.225 93.7136 729.241 93.6602 729.264 93.6094C729.288 93.5512 729.328 93.5007 729.379 93.4634C729.41 93.4436 729.444 93.4302 729.48 93.4242C729.517 93.4182 729.554 93.4196 729.589 93.4285C729.666 93.4417 729.736 93.4792 729.789 93.5355C729.83 93.5823 729.859 93.6381 729.874 93.6984C729.886 93.7471 729.892 93.7973 729.891 93.8475C729.891 93.8695 729.891 93.8905 729.891 93.9125L729.404 128.934L729.898 128.896L730.28 93.3715C730.28 93.3465 730.28 93.3214 730.289 93.2964C730.298 93.2414 730.314 93.1877 730.336 93.1365C730.36 93.078 730.399 93.0271 730.45 92.9894C730.481 92.9692 730.516 92.9555 730.552 92.9493C730.589 92.9431 730.626 92.9445 730.662 92.9534C730.739 92.9672 730.809 93.0055 730.862 93.0624C730.903 93.1091 730.931 93.1651 730.945 93.2255C730.956 93.274 730.961 93.3237 730.959 93.3735C730.959 93.3955 730.959 93.4164 730.953 93.4384L730.774 128.838L731.338 128.798L731.38 93.0424C731.382 93.0172 731.385 92.9922 731.39 92.9675C731.4 92.9123 731.416 92.8586 731.439 92.8074C731.463 92.7491 731.503 92.6986 731.554 92.6614C731.585 92.6417 731.619 92.6285 731.656 92.6226C731.692 92.6168 731.728 92.6184 731.764 92.6274C731.841 92.6404 731.911 92.6784 731.964 92.7355C732.005 92.7822 732.034 92.8381 732.048 92.8984C732.06 92.9472 732.066 92.9972 732.065 93.0474C732.062 93.067 732.059 93.0864 732.054 93.1055L732.053 93.1005ZM719.032 95.8264L718.284 129.726L718.764 129.695L719.418 95.2955C719.42 95.271 719.423 95.2466 719.428 95.2225C719.437 95.1691 719.453 95.117 719.475 95.0674C719.498 95.0105 719.537 94.9612 719.587 94.9254C719.617 94.9072 719.649 94.8951 719.684 94.8898C719.718 94.8844 719.753 94.8861 719.787 94.8945C719.86 94.9054 719.928 94.9406 719.979 94.9944C720.018 95.0401 720.046 95.0947 720.059 95.1534C720.07 95.2013 720.075 95.2503 720.074 95.2994C720.075 95.3207 720.075 95.3422 720.074 95.3635L719.616 129.625L720.163 129.589L720.493 94.9725C720.493 94.9485 720.493 94.9235 720.502 94.8995C720.511 94.8461 720.527 94.794 720.549 94.7444C720.572 94.6875 720.611 94.6382 720.661 94.6024C720.691 94.5831 720.725 94.5703 720.76 94.5646C720.796 94.5589 720.832 94.5606 720.867 94.5695C720.94 94.5815 721.007 94.6165 721.059 94.6694C721.099 94.7146 721.127 94.7694 721.14 94.8284C721.151 94.876 721.156 94.9247 721.155 94.9734C721.155 94.9949 721.153 95.0163 721.15 95.0375L721.022 129.522L721.569 129.483L721.527 94.9684C721.529 94.9443 721.532 94.9202 721.537 94.8964C721.547 94.8437 721.563 94.7924 721.585 94.7435C721.609 94.6871 721.649 94.6386 721.699 94.6035C721.729 94.5842 721.763 94.5713 721.799 94.5656C721.835 94.5599 721.871 94.5616 721.906 94.5704C721.979 94.5823 722.045 94.6174 722.096 94.6705C722.135 94.7162 722.163 94.7707 722.176 94.8295C722.187 94.8773 722.192 94.9264 722.191 94.9755C722.191 94.9965 722.191 95.0184 722.191 95.0394L722.449 129.429L722.885 129.393L722.602 95.2814C722.604 95.2569 722.607 95.2326 722.612 95.2084C722.622 95.1551 722.638 95.1031 722.66 95.0535C722.684 94.9966 722.723 94.9474 722.773 94.9114C722.802 94.8927 722.835 94.8801 722.87 94.8744C722.904 94.8687 722.939 94.8701 722.973 94.8784C723.047 94.8902 723.115 94.9253 723.167 94.9785C723.207 95.0235 723.235 95.0778 723.249 95.1365C723.26 95.1837 723.265 95.232 723.264 95.2805C723.265 95.3014 723.265 95.3225 723.264 95.3434L723.742 129.337L724.16 129.304L723.56 94.6495C723.385 94.5733 723.205 94.5066 723.023 94.4495C722.584 94.3086 722.133 94.2082 721.675 94.1495C721.088 94.0712 720.492 94.0857 719.91 94.1924C719.255 94.3139 718.64 94.5971 718.122 95.0164C718.058 96.3164 717.959 98.9524 717.845 102.224C717.731 105.496 717.602 109.4 717.479 113.237C717.356 117.074 717.237 120.837 717.144 123.837C717.051 126.837 716.983 129.063 716.961 129.824L717.438 129.787L718.381 95.7534C718.383 95.7289 718.386 95.7045 718.391 95.6804C718.401 95.6271 718.417 95.5751 718.439 95.5255C718.463 95.4686 718.503 95.4194 718.553 95.3834C718.583 95.3641 718.617 95.3513 718.653 95.3456C718.689 95.3399 718.725 95.3416 718.76 95.3505C718.833 95.3623 718.9 95.3973 718.951 95.4504C718.99 95.4961 719.018 95.5507 719.031 95.6094C719.042 95.657 719.047 95.7057 719.046 95.7545C719.043 95.7787 719.038 95.8027 719.032 95.8264ZM656.217 103.581L656.151 104.319L661.592 103.249L664.698 104.918V104.194L661.67 102.568L656.217 103.581ZM659.332 106.499L657.16 134.168L657.534 134.142L659.655 106.064C659.655 106.044 659.661 106.024 659.666 106.004C659.676 105.961 659.691 105.918 659.71 105.877C659.731 105.831 659.764 105.792 659.805 105.762C659.829 105.747 659.856 105.737 659.884 105.733C659.912 105.729 659.941 105.731 659.968 105.738C660.025 105.749 660.076 105.779 660.112 105.823C660.141 105.862 660.16 105.906 660.168 105.953C660.175 105.993 660.176 106.033 660.173 106.072C660.172 106.09 660.169 106.107 660.166 106.124L658.202 134.092L658.63 134.063L660.506 105.803C660.509 105.783 660.512 105.763 660.517 105.743C660.527 105.699 660.542 105.656 660.562 105.615C660.585 105.569 660.619 105.529 660.662 105.499C660.686 105.484 660.713 105.474 660.741 105.469C660.769 105.465 660.798 105.467 660.825 105.474C660.882 105.485 660.933 105.515 660.969 105.559C660.998 105.598 661.017 105.642 661.025 105.689C661.03 105.729 661.03 105.769 661.025 105.808C661.024 105.826 661.021 105.843 661.018 105.86L659.296 134.013L659.722 133.983L661.305 105.796C661.307 105.776 661.311 105.756 661.315 105.736C661.324 105.693 661.338 105.65 661.357 105.609C661.377 105.563 661.409 105.523 661.45 105.493C661.474 105.478 661.5 105.467 661.528 105.463C661.556 105.458 661.585 105.459 661.612 105.466C661.669 105.477 661.72 105.507 661.756 105.551C661.785 105.589 661.804 105.634 661.811 105.681C661.816 105.721 661.816 105.761 661.811 105.8C661.81 105.818 661.807 105.835 661.804 105.852L660.394 133.93L660.734 133.904L662.127 106.05C662.13 106.03 662.133 106.01 662.138 105.99C662.148 105.946 662.163 105.903 662.182 105.862C662.204 105.815 662.239 105.775 662.282 105.746C662.306 105.731 662.333 105.72 662.361 105.716C662.389 105.711 662.418 105.713 662.445 105.72C662.502 105.731 662.553 105.762 662.59 105.806C662.619 105.845 662.638 105.89 662.646 105.937C662.653 105.977 662.655 106.017 662.652 106.056C662.651 106.074 662.649 106.091 662.646 106.108L661.416 133.86L661.738 133.835L662.9 105.535C662.767 105.474 662.63 105.419 662.491 105.372C662.155 105.256 661.808 105.174 661.455 105.125C660.997 105.06 660.532 105.072 660.078 105.158C659.552 105.262 659.06 105.495 658.646 105.836C658.539 106.874 658.346 108.948 658.113 111.536C657.88 114.124 657.605 117.208 657.335 120.279C657.065 123.35 656.798 126.398 656.579 128.902C656.36 131.406 656.19 133.362 656.113 134.248L656.494 134.223L658.816 106.444C658.816 106.423 658.822 106.402 658.827 106.381C658.837 106.338 658.852 106.295 658.871 106.254C658.892 106.208 658.924 106.169 658.965 106.138C658.989 106.123 659.015 106.112 659.043 106.108C659.07 106.103 659.099 106.104 659.126 106.111C659.183 106.121 659.234 106.151 659.271 106.194C659.301 106.232 659.32 106.277 659.328 106.324C659.335 106.364 659.337 106.404 659.334 106.444C659.334 106.463 659.334 106.481 659.332 106.499ZM733.249 88.9814L726.595 90.2465L726.583 91.1714L733.204 89.8284L737.187 91.9144L737.123 91.0054L733.249 88.9814ZM754.324 99.5955L757.932 101.372L757.852 100.582L754.352 98.8615L752.901 99.1505L751.832 100.126L754.324 99.5955ZM769.582 107.242L768.675 108.09L770.832 107.634L773.995 109.171L773.91 108.488L770.832 106.994L769.582 107.242ZM760.382 102.596L763.855 104.301L763.779 103.542L760.405 101.888L759.005 102.162L757.985 103.102L760.382 102.596ZM764.482 104.849L763.509 105.749L765.794 105.265L769.094 106.891L769.025 106.168L765.804 104.59L764.482 104.849ZM774.252 109.549L773.392 110.349L775.44 109.917L778.44 111.381L778.364 110.729L775.444 109.311L774.252 109.549ZM779.443 111.295L778.329 111.52L777.529 112.272L779.442 111.866L782.265 113.235L782.185 112.626L779.443 111.295ZM783.857 138.281L781.904 115.696C781.904 115.644 781.914 115.591 781.932 115.541C781.945 115.501 781.969 115.467 782.003 115.441C782.023 115.428 782.046 115.419 782.071 115.415C782.095 115.411 782.119 115.412 782.143 115.418C782.195 115.426 782.244 115.45 782.282 115.486C782.312 115.516 782.335 115.552 782.348 115.592C782.359 115.625 782.366 115.658 782.368 115.692C782.369 115.707 782.369 115.721 782.368 115.735L784.457 138.391L784.837 138.463L782.615 115.681C782.614 115.629 782.623 115.578 782.64 115.528C782.652 115.489 782.676 115.454 782.709 115.428C782.73 115.415 782.753 115.406 782.777 115.402C782.801 115.398 782.826 115.399 782.85 115.404C782.897 115.411 782.942 115.431 782.978 115.461C783.015 115.492 783.042 115.533 783.056 115.578C783.067 115.611 783.073 115.644 783.074 115.678C783.075 115.693 783.075 115.707 783.074 115.721L785.444 138.573L785.753 138.631L783.38 115.881C783.379 115.829 783.387 115.777 783.404 115.727C783.416 115.688 783.44 115.653 783.473 115.627C783.494 115.614 783.516 115.605 783.541 115.601C783.565 115.597 783.589 115.598 783.613 115.603C783.665 115.612 783.713 115.636 783.751 115.671C783.781 115.701 783.804 115.738 783.818 115.777C783.829 115.81 783.836 115.843 783.839 115.877C783.84 115.892 783.84 115.906 783.839 115.92L786.357 138.745L786.65 138.801L783.994 115.453C783.994 115.453 783.887 115.411 783.704 115.353C783.46 115.283 783.212 115.228 782.961 115.19C782.63 115.14 782.295 115.124 781.961 115.144C781.592 115.165 781.231 115.251 780.892 115.398L782.211 129.334L781.187 115.919C781.186 115.903 781.186 115.886 781.187 115.869C781.19 115.835 781.198 115.802 781.209 115.769C781.221 115.73 781.245 115.695 781.277 115.669C781.297 115.656 781.32 115.647 781.344 115.643C781.368 115.64 781.393 115.641 781.416 115.647C781.463 115.654 781.508 115.674 781.544 115.704C781.581 115.735 781.608 115.775 781.623 115.82C781.634 115.853 781.64 115.886 781.642 115.92C781.643 115.934 781.643 115.948 781.642 115.962L783.469 138.209L783.857 138.281ZM747.571 96.5654L751.229 98.4655L751.153 97.6414L747.596 95.8024L745.303 96.2374L744.084 97.2794L747.571 96.5654ZM782.399 113.22L781.785 113.92L782.957 113.669L785.757 115.003L785.657 114.403L782.941 113.11L782.399 113.22ZM768.606 131.281L767.871 110.599C767.87 110.581 767.87 110.562 767.871 110.543C767.876 110.502 767.887 110.462 767.902 110.423C767.919 110.379 767.947 110.341 767.985 110.312C768.008 110.297 768.034 110.286 768.062 110.282C768.089 110.277 768.117 110.278 768.144 110.284C768.198 110.292 768.249 110.314 768.29 110.35C768.331 110.385 768.362 110.432 768.377 110.484C768.388 110.521 768.395 110.559 768.396 110.597C768.397 110.614 768.397 110.63 768.396 110.646L769.212 135.552L769.588 135.62L768.675 110.23C768.674 110.212 768.674 110.193 768.675 110.174C768.681 110.134 768.691 110.094 768.707 110.055C768.724 110.012 768.753 109.973 768.791 109.945C768.815 109.93 768.841 109.92 768.869 109.915C768.896 109.91 768.925 109.911 768.952 109.917C769.006 109.925 769.055 109.948 769.096 109.984C769.137 110.019 769.167 110.066 769.182 110.117C769.193 110.154 769.199 110.192 769.2 110.23C769.201 110.247 769.201 110.263 769.2 110.279L770.265 135.744L770.699 135.827L769.517 109.97C769.518 109.951 769.519 109.932 769.522 109.913C769.527 109.872 769.538 109.831 769.554 109.792C769.57 109.748 769.599 109.71 769.637 109.681C769.66 109.666 769.686 109.656 769.714 109.651C769.741 109.647 769.769 109.648 769.796 109.654C769.85 109.661 769.901 109.684 769.943 109.719C769.984 109.755 770.015 109.802 770.03 109.854C770.041 109.891 770.048 109.928 770.049 109.966C770.05 109.983 770.05 109.999 770.049 110.015L771.387 135.953L771.821 136.035L770.333 109.956C770.335 109.895 770.347 109.835 770.369 109.778C770.386 109.734 770.415 109.695 770.453 109.666C770.477 109.651 770.504 109.641 770.532 109.636C770.56 109.631 770.588 109.632 770.616 109.638C770.675 109.648 770.73 109.676 770.774 109.717C770.807 109.752 770.832 109.794 770.846 109.839C770.857 109.876 770.864 109.913 770.865 109.951C770.866 109.968 770.866 109.984 770.865 110L772.515 136.165L772.865 136.233L771.209 110.181C771.211 110.121 771.223 110.06 771.245 110.003C771.262 109.959 771.291 109.921 771.329 109.892C771.353 109.877 771.38 109.867 771.407 109.863C771.435 109.858 771.464 109.86 771.491 109.867C771.544 109.875 771.594 109.898 771.635 109.933C771.675 109.969 771.704 110.016 771.718 110.067C771.729 110.104 771.735 110.142 771.735 110.179C771.736 110.196 771.736 110.212 771.735 110.228L773.559 136.36L773.897 136.422L771.943 109.688C771.943 109.688 771.779 109.62 771.507 109.54C771.152 109.436 770.789 109.362 770.421 109.321C769.955 109.267 769.482 109.283 769.021 109.371C768.509 109.47 768.03 109.697 767.629 110.03C767.629 110.361 767.695 111.856 767.787 113.912C767.879 115.968 768.001 118.583 768.123 121.156C768.245 123.729 768.365 126.256 768.456 128.147C768.547 130.038 768.606 131.281 768.606 131.281ZM740.18 92.8444L743.974 94.8304L743.917 93.9664L740.217 92.0394L738.392 92.3834L737.332 93.4224L740.18 92.8444ZM778.655 136.781L777.555 114.181C777.556 114.128 777.567 114.075 777.586 114.024C777.6 113.984 777.626 113.95 777.66 113.924C777.681 113.911 777.705 113.902 777.729 113.898C777.754 113.894 777.779 113.895 777.803 113.901C777.851 113.908 777.895 113.928 777.932 113.959C777.968 113.99 777.995 114.031 778.008 114.077C778.018 114.11 778.024 114.143 778.025 114.177C778.026 114.192 778.026 114.207 778.025 114.221L779.297 137.427L779.686 137.498L778.302 113.946C778.301 113.93 778.301 113.913 778.302 113.896C778.306 113.86 778.316 113.824 778.329 113.789C778.343 113.749 778.369 113.715 778.403 113.689C778.424 113.676 778.448 113.667 778.473 113.662C778.497 113.658 778.523 113.659 778.547 113.665C778.6 113.674 778.649 113.698 778.688 113.735C778.718 113.766 778.74 113.804 778.753 113.844C778.763 113.877 778.769 113.911 778.771 113.944C778.772 113.959 778.772 113.974 778.771 113.988L780.295 137.612L780.689 137.684L779.029 113.931C779.029 113.877 779.039 113.824 779.058 113.773C779.072 113.733 779.097 113.699 779.131 113.673C779.152 113.66 779.176 113.65 779.201 113.646C779.226 113.642 779.252 113.642 779.276 113.648C779.33 113.657 779.379 113.682 779.418 113.719C779.448 113.75 779.47 113.788 779.483 113.828C779.493 113.861 779.499 113.895 779.501 113.928C779.502 113.943 779.502 113.958 779.501 113.972L781.309 137.798L781.624 137.855L779.81 114.133C779.809 114.082 779.817 114.031 779.832 113.981C779.846 113.942 779.871 113.907 779.904 113.881C779.925 113.868 779.948 113.859 779.972 113.854C779.997 113.85 780.022 113.851 780.046 113.857C780.099 113.866 780.148 113.89 780.187 113.927C780.217 113.958 780.239 113.996 780.252 114.036C780.262 114.069 780.268 114.103 780.27 114.136C780.271 114.151 780.271 114.166 780.27 114.18L782.236 137.98L782.536 138.036L780.445 113.699C780.445 113.699 780.318 113.648 780.105 113.586C779.824 113.505 779.537 113.444 779.247 113.406C778.87 113.355 778.488 113.353 778.11 113.398C777.695 113.447 777.294 113.584 776.935 113.798L776.969 114.243L776.993 114.234L777.018 114.227H777.081C777.129 114.234 777.174 114.255 777.21 114.286C777.247 114.318 777.274 114.359 777.288 114.405C777.299 114.438 777.305 114.471 777.306 114.505C777.307 114.52 777.307 114.534 777.306 114.548L777.82 125.959L778.4 133.886L778.655 136.781ZM786.832 115.537L789.586 116.837L789.48 116.26L786.798 114.994L786.275 115.094L785.688 115.773L786.832 115.537ZM744.611 100.272L744.711 130.984L745.152 131.065L744.952 99.7814C744.953 99.7586 744.956 99.7359 744.96 99.7134C744.968 99.6635 744.982 99.6148 745.002 99.5684C745.022 99.5155 745.057 99.4694 745.102 99.4354C745.13 99.4172 745.162 99.4051 745.195 99.3997C745.228 99.3944 745.262 99.396 745.294 99.4044C745.364 99.4173 745.428 99.4524 745.476 99.5045C745.514 99.547 745.541 99.5981 745.554 99.6534C745.565 99.6979 745.571 99.7436 745.57 99.7894C745.57 99.8094 745.57 99.8294 745.57 99.8494L745.939 131.22L746.453 131.32L745.953 99.4814C745.957 99.4079 745.973 99.3356 746.001 99.2675C746.021 99.2149 746.056 99.1692 746.101 99.1354C746.129 99.1175 746.161 99.1056 746.194 99.1006C746.227 99.0957 746.261 99.0976 746.293 99.1064C746.363 99.1193 746.426 99.1544 746.474 99.2064C746.512 99.2483 746.54 99.2987 746.554 99.3535C746.566 99.3975 746.572 99.4429 746.572 99.4885C746.572 99.5085 746.572 99.5274 746.572 99.5474L747.257 131.468L747.77 131.568L746.913 99.4814C746.914 99.4587 746.916 99.4359 746.92 99.4135C746.927 99.3636 746.941 99.3149 746.961 99.2684C746.981 99.2159 747.016 99.1702 747.061 99.1365C747.089 99.1185 747.12 99.1065 747.153 99.1011C747.186 99.0958 747.22 99.0973 747.252 99.1055C747.322 99.1185 747.386 99.1535 747.435 99.2054C747.473 99.2476 747.501 99.2984 747.515 99.3535C747.527 99.3978 747.533 99.4435 747.533 99.4894C747.533 99.5094 747.533 99.5285 747.533 99.5485L748.584 131.722L748.998 131.799L747.932 99.7584C747.933 99.7356 747.936 99.7129 747.94 99.6904C747.948 99.6407 747.962 99.5921 747.981 99.5455C748.001 99.493 748.036 99.4472 748.081 99.4135C748.109 99.3954 748.14 99.3833 748.172 99.378C748.205 99.3727 748.238 99.3742 748.27 99.3824C748.34 99.3955 748.404 99.4305 748.453 99.4824C748.491 99.5249 748.519 99.5761 748.533 99.6315C748.545 99.6758 748.551 99.7215 748.551 99.7675C748.551 99.7875 748.551 99.8064 748.551 99.8264L749.812 131.939L750.202 132.011L748.809 99.1724C748.644 99.1022 748.475 99.0404 748.303 98.9874C747.89 98.8566 747.465 98.7632 747.035 98.7084C746.486 98.6352 745.929 98.6487 745.384 98.7485C744.775 98.8604 744.205 99.1254 743.727 99.5184C743.701 100.618 743.674 102.749 743.648 105.418C743.622 108.087 743.597 111.291 743.573 114.546C743.549 117.801 743.529 121.103 743.511 123.968C743.493 126.833 743.48 129.258 743.471 130.758L743.913 130.839L743.989 100.207C743.99 100.185 743.993 100.162 743.997 100.139C744.005 100.09 744.019 100.041 744.039 99.9954C744.059 99.9429 744.094 99.8972 744.139 99.8635C744.167 99.8452 744.199 99.833 744.232 99.8277C744.265 99.8224 744.299 99.824 744.332 99.8325C744.402 99.8452 744.466 99.8803 744.514 99.9324C744.552 99.9746 744.579 100.025 744.593 100.08C744.605 100.125 744.61 100.171 744.61 100.216C744.611 100.235 744.612 100.254 744.611 100.272ZM774.247 136.487L773.389 112.387C773.388 112.369 773.388 112.351 773.389 112.333C773.394 112.294 773.404 112.256 773.418 112.218C773.434 112.176 773.461 112.14 773.497 112.112C773.52 112.098 773.545 112.088 773.571 112.084C773.598 112.079 773.625 112.08 773.651 112.086C773.702 112.093 773.75 112.115 773.789 112.149C773.828 112.183 773.856 112.228 773.87 112.277C773.88 112.312 773.886 112.348 773.887 112.384C773.888 112.4 773.888 112.416 773.887 112.431L774.887 136.601L775.297 136.678L774.18 112.138C774.182 112.081 774.194 112.023 774.215 111.969C774.231 111.929 774.259 111.895 774.294 111.869C774.316 111.855 774.341 111.845 774.367 111.841C774.394 111.837 774.42 111.838 774.446 111.844C774.497 111.851 774.546 111.872 774.585 111.906C774.624 111.939 774.653 111.984 774.667 112.033C774.678 112.068 774.684 112.104 774.685 112.14C774.686 112.156 774.686 112.172 774.685 112.187L775.948 136.806L776.362 136.883L774.954 112.128C774.953 112.111 774.953 112.093 774.954 112.075C774.959 112.036 774.969 111.998 774.984 111.961C775.001 111.921 775.029 111.887 775.064 111.861C775.087 111.847 775.112 111.836 775.139 111.832C775.166 111.827 775.193 111.828 775.22 111.834C775.271 111.842 775.319 111.863 775.358 111.897C775.397 111.931 775.425 111.975 775.439 112.024C775.45 112.059 775.456 112.094 775.457 112.13C775.458 112.146 775.458 112.161 775.457 112.176L777.016 137.006L777.354 137.071L775.792 112.345C775.791 112.327 775.791 112.309 775.792 112.291C775.797 112.252 775.807 112.213 775.822 112.176C775.838 112.134 775.866 112.098 775.902 112.07C775.925 112.056 775.95 112.046 775.977 112.042C776.003 112.037 776.031 112.038 776.057 112.044C776.108 112.052 776.155 112.074 776.193 112.108C776.232 112.142 776.259 112.186 776.273 112.235C776.283 112.27 776.289 112.306 776.29 112.341C776.291 112.357 776.291 112.372 776.29 112.387L778.016 137.187L778.335 137.25L776.483 111.873C776.483 111.873 776.332 111.81 776.083 111.737C775.756 111.642 775.421 111.576 775.083 111.537C774.65 111.484 774.212 111.495 773.783 111.57C773.309 111.654 772.863 111.852 772.483 112.147L772.73 115.57L772.63 112.744C772.629 112.726 772.629 112.708 772.63 112.69C772.635 112.651 772.645 112.612 772.66 112.575C772.676 112.533 772.704 112.497 772.74 112.469C772.762 112.455 772.787 112.445 772.814 112.44C772.84 112.435 772.867 112.436 772.893 112.441C772.95 112.45 773.002 112.477 773.043 112.516C773.075 112.549 773.099 112.589 773.112 112.632C773.123 112.667 773.129 112.703 773.131 112.739C773.132 112.755 773.132 112.771 773.131 112.786L773.613 127.748L774.251 136.491L774.247 136.487ZM790.629 139.537L790.917 139.591L787.882 117.273C787.882 117.273 787.776 117.232 787.597 117.18C787.358 117.112 787.116 117.058 786.87 117.021C786.546 116.971 786.218 116.957 785.891 116.977C785.533 116.998 785.181 117.083 784.852 117.227L786.441 130.817L785.141 117.732C785.14 117.716 785.14 117.7 785.141 117.684C785.144 117.65 785.151 117.617 785.162 117.584C785.174 117.547 785.197 117.515 785.228 117.49C785.248 117.477 785.27 117.469 785.294 117.465C785.317 117.461 785.341 117.462 785.364 117.467C785.41 117.475 785.454 117.495 785.49 117.525C785.526 117.555 785.554 117.594 785.57 117.638C785.581 117.669 785.589 117.7 785.592 117.732C785.593 117.746 785.593 117.76 785.592 117.773L787.81 139.014L788.178 139.085L785.84 117.511C785.839 117.495 785.839 117.479 785.84 117.463C785.842 117.429 785.849 117.396 785.86 117.363C785.872 117.327 785.894 117.294 785.925 117.27C785.945 117.257 785.967 117.249 785.991 117.245C786.014 117.241 786.038 117.242 786.061 117.247C786.113 117.255 786.16 117.278 786.199 117.313C786.229 117.341 786.252 117.375 786.267 117.413C786.279 117.446 786.286 117.479 786.289 117.513C786.29 117.527 786.29 117.541 786.289 117.555L788.766 139.196L789.136 139.267L786.525 117.502C786.524 117.451 786.532 117.401 786.548 117.352C786.561 117.315 786.584 117.282 786.615 117.258C786.635 117.245 786.657 117.237 786.681 117.233C786.704 117.228 786.728 117.229 786.751 117.234C786.802 117.243 786.849 117.267 786.887 117.302C786.916 117.331 786.939 117.365 786.954 117.402C786.966 117.435 786.973 117.468 786.976 117.502C786.977 117.516 786.977 117.53 786.976 117.544L789.732 139.371L790.038 139.428L787.286 117.691C787.285 117.675 787.285 117.659 787.286 117.643C787.288 117.609 787.295 117.576 787.306 117.543C787.317 117.506 787.34 117.474 787.371 117.45C787.391 117.438 787.413 117.429 787.437 117.426C787.46 117.422 787.484 117.423 787.507 117.429C787.558 117.437 787.606 117.46 787.644 117.495C787.674 117.523 787.696 117.557 787.711 117.595C787.722 117.626 787.73 117.657 787.733 117.689C787.734 117.703 787.734 117.717 787.733 117.73L790.629 139.537ZM751.463 103.067L751.891 132.323L752.324 132.405L751.795 102.592C751.795 102.57 751.795 102.548 751.801 102.526C751.808 102.478 751.821 102.431 751.839 102.386C751.859 102.335 751.894 102.291 751.939 102.258C751.967 102.241 751.998 102.23 752.03 102.224C752.062 102.219 752.095 102.221 752.127 102.228C752.189 102.237 752.246 102.264 752.293 102.306C752.339 102.347 752.372 102.401 752.388 102.461C752.4 102.504 752.407 102.547 752.407 102.591C752.408 102.61 752.408 102.629 752.407 102.648L753.107 132.548L753.612 132.64L752.773 102.289C752.774 102.267 752.776 102.245 752.78 102.223C752.787 102.175 752.8 102.128 752.819 102.083C752.84 102.032 752.874 101.988 752.919 101.955C752.946 101.938 752.977 101.926 753.009 101.92C753.041 101.915 753.074 101.916 753.106 101.924C753.167 101.933 753.225 101.959 753.272 102C753.318 102.041 753.352 102.095 753.368 102.154C753.38 102.196 753.387 102.239 753.388 102.282C753.389 102.301 753.389 102.32 753.388 102.338L754.401 132.787L754.907 132.878L753.715 102.269C753.716 102.248 753.718 102.226 753.722 102.204C753.729 102.157 753.742 102.11 753.761 102.065C753.782 102.014 753.816 101.97 753.861 101.937C753.889 101.92 753.92 101.908 753.953 101.902C753.986 101.897 754.019 101.898 754.051 101.905C754.118 101.917 754.18 101.948 754.228 101.996C754.265 102.037 754.293 102.085 754.307 102.138C754.319 102.181 754.325 102.224 754.326 102.268C754.327 102.287 754.327 102.306 754.326 102.325L755.702 133.025L756.109 133.101L754.717 102.532C754.718 102.51 754.72 102.488 754.724 102.466C754.731 102.418 754.744 102.371 754.763 102.326C754.784 102.275 754.818 102.231 754.863 102.198C754.89 102.181 754.92 102.169 754.952 102.163C754.984 102.158 755.017 102.159 755.048 102.166C755.109 102.176 755.167 102.202 755.213 102.244C755.259 102.285 755.293 102.339 755.309 102.398C755.321 102.44 755.327 102.484 755.328 102.527C755.329 102.546 755.329 102.565 755.328 102.583L756.867 132.43V133.242L757.289 133.32L757.282 133.149L757.04 105.881C757.041 105.86 757.043 105.839 757.047 105.818C757.054 105.772 757.067 105.727 757.086 105.684C757.107 105.635 757.142 105.592 757.186 105.561C757.212 105.545 757.242 105.533 757.272 105.528C757.303 105.523 757.335 105.524 757.365 105.531C757.424 105.538 757.479 105.563 757.524 105.603C757.568 105.642 757.6 105.694 757.614 105.751C757.625 105.792 757.631 105.834 757.631 105.876C757.632 105.895 757.632 105.913 757.631 105.931L758.031 133.464L758.444 133.543L757.953 105.476C757.954 105.455 757.956 105.434 757.96 105.413C757.967 105.367 757.98 105.322 757.998 105.279C758.019 105.23 758.054 105.187 758.098 105.156C758.125 105.139 758.154 105.128 758.185 105.123C758.216 105.117 758.248 105.118 758.279 105.125C758.338 105.134 758.393 105.16 758.438 105.2C758.483 105.24 758.515 105.292 758.53 105.349C758.542 105.39 758.548 105.432 758.549 105.474C758.55 105.493 758.55 105.511 758.549 105.529L759.199 133.684L759.684 133.772L758.899 105.188C758.9 105.167 758.902 105.146 758.906 105.125C758.913 105.079 758.926 105.034 758.944 104.99C758.965 104.941 759 104.898 759.044 104.867C759.071 104.851 759.101 104.839 759.132 104.834C759.163 104.829 759.195 104.831 759.226 104.838C759.291 104.849 759.351 104.88 759.398 104.926C759.434 104.964 759.461 105.011 759.475 105.061C759.487 105.102 759.493 105.143 759.494 105.185C759.495 105.203 759.495 105.221 759.494 105.239L760.444 133.912L760.924 134.001L759.812 105.169C759.813 105.149 759.815 105.128 759.818 105.107C759.825 105.062 759.837 105.017 759.855 104.974C759.876 104.925 759.911 104.883 759.955 104.852C759.982 104.835 760.012 104.824 760.043 104.818C760.075 104.813 760.107 104.814 760.138 104.821C760.203 104.831 760.263 104.861 760.31 104.907C760.346 104.946 760.372 104.993 760.386 105.043C760.398 105.084 760.404 105.127 760.404 105.169C760.405 105.188 760.405 105.206 760.404 105.224L761.694 134.143L762.086 134.217L760.786 105.424C760.786 105.404 760.788 105.383 760.792 105.361C760.799 105.315 760.811 105.27 760.829 105.227C760.85 105.177 760.884 105.135 760.929 105.104C760.956 105.088 760.986 105.076 761.017 105.071C761.048 105.066 761.079 105.067 761.11 105.074C761.175 105.085 761.236 105.115 761.283 105.161C761.319 105.2 761.345 105.246 761.359 105.296C761.371 105.337 761.377 105.379 761.377 105.42C761.378 105.438 761.378 105.456 761.377 105.474L762.423 125.925C762.423 126.761 762.432 127.578 762.436 128.364C762.44 129.15 762.444 129.905 762.448 130.617C762.452 131.329 762.455 131.999 762.458 132.617C762.461 133.235 762.464 133.793 762.467 134.289L763.226 134.431L762.794 126.501L762.642 108.401C762.642 108.381 762.644 108.361 762.648 108.341C762.655 108.298 762.667 108.255 762.684 108.214C762.703 108.167 762.735 108.126 762.776 108.096C762.801 108.08 762.83 108.069 762.859 108.064C762.889 108.058 762.92 108.059 762.949 108.065C763.011 108.074 763.069 108.103 763.113 108.147C763.148 108.184 763.173 108.229 763.186 108.277C763.197 108.316 763.203 108.357 763.203 108.397C763.204 108.415 763.204 108.433 763.203 108.45L763.568 134.498L763.968 134.57L763.512 108.012C763.512 107.992 763.512 107.972 763.518 107.952C763.524 107.909 763.536 107.866 763.553 107.825C763.571 107.779 763.602 107.739 763.642 107.709C763.667 107.693 763.695 107.683 763.724 107.678C763.753 107.673 763.782 107.674 763.811 107.681C763.874 107.691 763.933 107.721 763.979 107.765C764.014 107.802 764.039 107.846 764.053 107.894C764.064 107.933 764.07 107.973 764.07 108.013C764.071 108.031 764.071 108.048 764.07 108.065L764.681 134.704L765.139 134.789L764.407 107.736C764.408 107.717 764.41 107.697 764.413 107.677C764.419 107.634 764.431 107.591 764.448 107.55C764.466 107.504 764.497 107.464 764.538 107.434C764.563 107.418 764.592 107.407 764.622 107.402C764.651 107.398 764.682 107.399 764.711 107.406C764.767 107.413 764.821 107.437 764.864 107.474C764.906 107.512 764.937 107.561 764.951 107.616C764.962 107.655 764.968 107.695 764.968 107.735C764.969 107.753 764.969 107.77 764.968 107.787L765.859 134.922L766.316 135.006L765.27 107.721C765.271 107.701 765.273 107.681 765.276 107.661C765.283 107.618 765.295 107.575 765.312 107.534C765.331 107.487 765.362 107.447 765.403 107.416C765.428 107.4 765.456 107.389 765.486 107.384C765.515 107.378 765.546 107.379 765.575 107.385C765.637 107.396 765.695 107.426 765.74 107.47C765.775 107.507 765.8 107.552 765.814 107.6C765.825 107.639 765.831 107.679 765.832 107.719C765.833 107.737 765.833 107.754 765.832 107.771L767.043 135.143L767.416 135.214L766.191 107.964C766.191 107.944 766.191 107.924 766.197 107.904C766.203 107.86 766.215 107.817 766.232 107.776C766.25 107.73 766.281 107.689 766.322 107.659C766.347 107.644 766.375 107.633 766.404 107.628C766.434 107.624 766.463 107.625 766.492 107.632C766.548 107.639 766.602 107.663 766.645 107.7C766.687 107.738 766.718 107.787 766.732 107.842C766.743 107.881 766.749 107.921 766.749 107.96C766.75 107.978 766.75 107.995 766.749 108.012L768.143 135.346L768.493 135.413L766.921 107.431C766.772 107.372 766.62 107.319 766.465 107.274C766.092 107.164 765.71 107.086 765.324 107.043C764.83 106.985 764.33 107.002 763.841 107.096C763.296 107.203 762.786 107.443 762.358 107.796C762.358 108.23 762.349 108.847 762.347 109.608C762.345 110.369 762.347 111.273 762.347 112.282C762.347 113.291 762.347 114.404 762.352 115.582C762.357 116.76 762.359 118.003 762.364 119.272L761.576 104.872C761.419 104.81 761.259 104.755 761.096 104.708C760.704 104.592 760.302 104.511 759.896 104.466C759.378 104.405 758.853 104.424 758.34 104.522C757.77 104.632 757.237 104.883 756.789 105.251C756.78 105.921 756.775 107.006 756.774 108.374C756.773 109.742 756.774 111.394 756.774 113.2C756.774 115.006 756.784 116.964 756.792 118.946C756.8 120.928 756.807 122.932 756.815 124.83L755.562 101.966C755.398 101.9 755.231 101.843 755.062 101.795C754.655 101.674 754.238 101.59 753.816 101.542C753.277 101.479 752.731 101.498 752.198 101.6C751.605 101.715 751.049 101.976 750.583 102.36C750.57 103.404 750.567 105.413 750.571 107.933C750.575 110.453 750.584 113.48 750.596 116.564C750.608 119.648 750.623 122.786 750.637 125.526C750.651 128.266 750.663 130.607 750.671 132.098L751.104 132.179L750.848 103.013C750.849 102.992 750.851 102.97 750.855 102.948C750.862 102.901 750.876 102.854 750.895 102.809C750.916 102.758 750.951 102.714 750.995 102.681C751.023 102.664 751.053 102.651 751.086 102.646C751.118 102.64 751.151 102.641 751.183 102.648C751.251 102.66 751.313 102.691 751.362 102.739C751.4 102.779 751.426 102.828 751.441 102.88C751.453 102.923 751.459 102.966 751.46 103.01C751.462 103.029 751.463 103.048 751.463 103.067Z" fill="#1B023F"/> -<path d="M1380 177H-60V233H1380V177Z" fill="#1B023F"/> -<path d="M178.479 129.125C178.479 129.125 178.479 129.118 178.479 129.114C178.479 129.11 178.479 129.107 178.479 129.103C178.479 129.099 178.479 129.096 178.479 129.092C178.479 129.088 178.479 129.085 178.479 129.081V129.049C178.479 129.038 178.479 129.027 178.479 129.016C178.479 129.005 178.479 128.994 178.479 128.983C178.479 128.972 178.479 128.961 178.479 128.951C178.508 128.645 178.59 128.346 178.723 128.069C178.851 127.8 179.024 127.556 179.236 127.348C179.446 127.14 179.691 126.971 179.96 126.848C180.236 126.722 180.533 126.648 180.836 126.63V126.27H181.144V125.84H180.866V125.38H181.079L181.034 125.254L180.994 125.144L180.964 125.064L180.95 125.027C180.941 124.992 180.934 124.956 180.93 124.92C180.921 124.862 180.912 124.786 180.902 124.71C180.892 124.634 180.884 124.558 180.877 124.498C180.87 124.438 180.866 124.398 180.866 124.382C180.866 124.366 180.876 124.288 180.892 124.171C180.908 124.054 180.928 123.902 180.949 123.751C180.97 123.6 180.991 123.451 181.006 123.34L181.032 123.155L181.104 122.814L181.262 122.069L181.421 121.317L181.497 120.958C181.497 120.948 181.517 120.897 181.544 120.826C181.571 120.755 181.605 120.663 181.644 120.572L181.738 120.325L181.781 120.214L181.881 119.178L181.724 119.316L181.717 119.338L181.701 119.389L181.683 119.445C181.678 119.462 181.673 119.476 181.672 119.484L181.66 119.534L181.64 119.614L181.621 119.689L181.613 119.722V119.744C181.613 119.757 181.613 119.776 181.613 119.796C181.613 119.816 181.613 119.837 181.613 119.855C181.613 119.873 181.613 119.889 181.613 119.899C181.611 119.914 181.607 119.929 181.601 119.944C181.594 119.963 181.585 119.985 181.575 120.005L181.549 120.059L181.537 120.082L181.501 120.09L181.415 120.107C181.381 120.113 181.344 120.119 181.309 120.123C181.277 120.125 181.246 120.125 181.214 120.123C181.196 120.122 181.177 120.119 181.16 120.114C181.149 120.114 181.145 120.105 181.144 120.101C181.143 120.099 181.143 120.097 181.143 120.095C181.143 120.093 181.143 120.091 181.144 120.09H181.149L181.131 120.044L181.087 119.934C181.069 119.891 181.05 119.844 181.03 119.8C181.01 119.756 180.991 119.714 180.974 119.681C180.963 119.656 180.945 119.634 180.922 119.619C180.908 119.609 180.891 119.606 180.874 119.609C180.861 119.611 180.849 119.616 180.839 119.624C180.834 119.627 180.829 119.631 180.825 119.635C180.825 119.635 180.825 119.624 180.825 119.607C180.821 119.585 180.817 119.563 180.811 119.542C180.804 119.515 180.794 119.489 180.781 119.465C180.769 119.441 180.752 119.419 180.731 119.403C180.709 119.387 180.689 119.369 180.67 119.35C180.65 119.33 180.632 119.309 180.615 119.288C180.599 119.268 180.584 119.247 180.571 119.226C180.56 119.209 180.551 119.191 180.544 119.173C180.542 119.163 180.542 119.153 180.545 119.143C180.547 119.133 180.551 119.124 180.557 119.116C180.572 119.091 180.588 119.068 180.607 119.046C180.626 119.022 180.646 118.998 180.661 118.978C180.673 118.964 180.682 118.947 180.686 118.929C180.685 118.916 180.68 118.904 180.671 118.895C180.661 118.883 180.649 118.873 180.637 118.865L180.603 118.844L180.604 118.843L180.266 118.636C180.266 118.636 180.266 118.629 180.266 118.619C180.266 118.609 180.266 118.594 180.266 118.579C180.266 118.564 180.266 118.547 180.266 118.533C180.265 118.521 180.265 118.509 180.266 118.498C180.269 118.477 180.27 118.457 180.271 118.437C180.271 118.406 180.271 118.368 180.271 118.328C180.271 118.288 180.271 118.247 180.271 118.212C180.271 118.177 180.271 118.147 180.271 118.13C180.271 118.109 180.273 118.088 180.276 118.068C180.276 118.044 180.284 118.018 180.289 117.993C180.294 117.968 180.3 117.941 180.306 117.918C180.312 117.895 180.318 117.873 180.324 117.855C180.33 117.835 180.334 117.816 180.335 117.796C180.336 117.772 180.336 117.749 180.335 117.726C180.335 117.701 180.335 117.675 180.335 117.647C180.335 117.619 180.335 117.591 180.335 117.562C180.333 117.54 180.333 117.518 180.335 117.496C180.337 117.482 180.34 117.468 180.344 117.455L180.356 117.42C180.361 117.404 180.365 117.387 180.368 117.371C180.378 117.344 180.39 117.318 180.404 117.294C180.414 117.265 180.426 117.234 180.438 117.202L180.477 117.108C180.49 117.078 180.501 117.049 180.511 117.024C180.521 116.999 180.532 116.972 180.545 116.945C180.558 116.918 180.572 116.889 180.586 116.862L180.627 116.783L180.664 116.714L180.727 116.589L180.827 116.389L180.921 116.202L180.963 116.119L181.294 115.245C181.128 115.498 180.961 115.739 180.794 115.957C180.64 116.162 180.471 116.355 180.288 116.536C180.137 116.687 179.964 116.816 179.775 116.917C179.614 117.003 179.434 117.044 179.252 117.037C178.841 116.937 178.677 116.517 178.686 115.929C178.731 115.211 178.893 114.506 179.167 113.842C179.444 113.108 179.814 112.412 180.267 111.772C180.555 111.281 181.007 110.908 181.544 110.719C181.703 110.704 181.862 110.743 181.996 110.83C182.111 110.91 182.202 111.021 182.259 111.15C182.318 111.281 182.355 111.421 182.369 111.564C182.383 111.694 182.381 111.825 182.362 111.955L182.397 111.981L182.475 112.04C182.504 112.062 182.533 112.085 182.555 112.105C182.571 112.116 182.585 112.131 182.595 112.148C182.595 112.161 182.591 112.175 182.584 112.187C182.576 112.204 182.564 112.224 182.552 112.243C182.54 112.262 182.528 112.28 182.519 112.294L182.504 112.314L182.715 112.283L182.727 112.273L182.754 112.249L182.784 112.219C182.792 112.211 182.798 112.203 182.804 112.194C182.812 112.182 182.821 112.173 182.833 112.166C182.847 112.156 182.865 112.146 182.881 112.136L182.929 112.114L182.949 112.104L182.978 112.078L183.041 112.014C183.065 111.992 183.089 111.969 183.108 111.95C183.121 111.939 183.134 111.927 183.145 111.914C183.15 111.902 183.153 111.891 183.155 111.879C183.155 111.864 183.16 111.846 183.162 111.828C183.164 111.81 183.162 111.791 183.162 111.774C183.162 111.757 183.162 111.742 183.162 111.73V111.503C183.162 111.478 183.162 111.457 183.162 111.44C183.161 111.425 183.159 111.411 183.156 111.397C183.154 111.386 183.15 111.375 183.145 111.366C183.14 111.357 183.134 111.349 183.127 111.342C183.117 111.332 183.107 111.322 183.096 111.314L183.047 111.281L182.992 111.244C182.974 111.231 182.957 111.218 182.941 111.204C182.93 111.195 182.921 111.184 182.914 111.172C182.911 111.165 182.911 111.158 182.914 111.152C182.914 111.147 182.914 111.142 182.914 111.137C182.915 111.133 182.916 111.129 182.916 111.125C182.915 111.121 182.913 111.117 182.911 111.114C182.907 111.105 182.905 111.097 182.904 111.088C182.904 111.076 182.904 111.062 182.898 111.047C182.892 111.032 182.898 111.016 182.892 111.001C182.89 110.986 182.885 110.971 182.88 110.957C182.872 110.943 182.866 110.929 182.862 110.914C182.861 110.902 182.861 110.89 182.862 110.878C182.862 110.866 182.862 110.854 182.862 110.841C182.862 110.828 182.862 110.814 182.862 110.799C182.861 110.783 182.861 110.767 182.862 110.752C182.862 110.736 182.862 110.72 182.87 110.703C182.878 110.686 182.876 110.67 182.878 110.654C182.879 110.638 182.879 110.622 182.878 110.607C182.878 110.592 182.878 110.572 182.878 110.551C182.878 110.53 182.878 110.507 182.884 110.485C182.89 110.463 182.884 110.44 182.891 110.42C182.898 110.4 182.891 110.382 182.898 110.369C182.9 110.354 182.905 110.341 182.911 110.328C182.917 110.314 182.925 110.299 182.933 110.285C182.941 110.271 182.949 110.255 182.956 110.24C182.963 110.225 182.969 110.21 182.973 110.195C182.973 110.18 182.981 110.166 182.985 110.152C182.989 110.138 182.998 110.13 183.004 110.114L183.018 110.078L183.034 110.04C183.041 110.024 183.049 110.009 183.058 109.995L183.091 109.941C183.103 109.922 183.115 109.902 183.125 109.881C183.136 109.86 183.145 109.839 183.153 109.818C183.159 109.8 183.164 109.783 183.169 109.765C183.172 109.753 183.174 109.74 183.176 109.728C183.176 109.718 183.176 109.708 183.176 109.699C183.176 109.69 183.176 109.681 183.176 109.672C183.179 109.654 183.184 109.637 183.192 109.621C183.202 109.598 183.215 109.571 183.229 109.542C183.243 109.513 183.258 109.485 183.271 109.459L183.304 109.399C183.312 109.384 183.32 109.377 183.328 109.377C183.332 109.377 183.337 109.378 183.341 109.38C183.345 109.382 183.349 109.384 183.352 109.388C183.359 109.395 183.366 109.402 183.371 109.411L183.378 109.423L183.605 109.554L183.62 109.454L183.61 109.414C183.605 109.387 183.598 109.351 183.592 109.314C183.586 109.277 183.579 109.235 183.574 109.201C183.569 109.172 183.566 109.143 183.565 109.114C183.564 109.108 183.565 109.102 183.569 109.097C183.572 109.093 183.577 109.09 183.583 109.089C183.596 109.087 183.61 109.089 183.622 109.095C183.635 109.099 183.648 109.105 183.661 109.112L183.679 109.122L183.8 109.099L183.791 109.084C183.791 109.074 183.78 109.06 183.774 109.042C183.768 109.024 183.76 109.005 183.754 108.983C183.747 108.96 183.742 108.937 183.739 108.914C183.736 108.899 183.735 108.885 183.734 108.871C183.734 108.863 183.734 108.86 183.734 108.86C183.734 108.86 183.734 108.86 183.74 108.867V108.875L183.704 108.701L183.538 108.709H183.531L183.513 108.698L183.485 108.681L183.449 108.66C183.437 108.653 183.427 108.643 183.421 108.631C183.415 108.618 183.411 108.605 183.409 108.591C183.409 108.576 183.409 108.558 183.404 108.539C183.399 108.52 183.404 108.499 183.397 108.476C183.39 108.453 183.386 108.428 183.383 108.414C183.38 108.4 183.383 108.383 183.383 108.37C183.383 108.357 183.383 108.345 183.383 108.333C183.383 108.321 183.383 108.309 183.383 108.296C183.383 108.283 183.383 108.258 183.383 108.228C183.383 108.198 183.383 108.162 183.378 108.128C183.373 108.094 183.378 108.049 183.373 108.011C183.368 107.973 183.373 107.938 183.373 107.911C183.369 107.881 183.368 107.851 183.37 107.821C183.375 107.797 183.381 107.774 183.389 107.752C183.395 107.732 183.404 107.714 183.404 107.705L183.415 107.688H183.55L183.859 107.695L183.979 107.614L184.179 107.514L184.379 107.53L184.59 107.676L184.79 108.083L184.918 108.598L184.926 109.373L185.126 109.619L185.261 109.88L185.111 110.064V110.848L184.975 111.078L184.764 111.217C184.764 111.217 184.764 111.232 184.77 111.256C184.776 111.28 184.779 111.313 184.785 111.349C184.791 111.385 184.8 111.422 184.809 111.456C184.816 111.484 184.826 111.512 184.84 111.539C184.852 111.561 184.861 111.585 184.866 111.611C184.872 111.64 184.876 111.669 184.879 111.699C184.879 111.729 184.879 111.758 184.884 111.784C184.889 111.81 184.884 111.832 184.884 111.847V112.17C184.885 112.196 184.89 112.222 184.9 112.247C184.91 112.274 184.922 112.301 184.936 112.327C184.949 112.352 184.962 112.374 184.972 112.39L184.988 112.415L185.154 112.584L185.224 112.626L185.384 112.726L185.561 112.834C185.615 112.867 185.661 112.895 185.681 112.91C185.701 112.925 185.738 112.952 185.776 112.984L185.896 113.084L185.996 113.175L186.034 113.214L186.214 113.951L186.274 114.289L186.319 114.504L186.605 115.073L187.178 115.566L187.705 116.258L188.474 117.013L188.746 117.074H189.168L189.342 117.164L191.042 113.756L190.959 113.625C190.959 113.625 190.959 113.616 190.959 113.602C190.959 113.588 190.959 113.57 190.959 113.552C190.957 113.535 190.957 113.518 190.959 113.502C190.959 113.488 190.966 113.479 190.974 113.479H191.104H191.113L191.133 113.485C191.14 113.487 191.148 113.487 191.156 113.485C191.16 113.483 191.163 113.481 191.166 113.478C191.169 113.475 191.172 113.472 191.173 113.468C191.173 113.458 191.182 113.44 191.189 113.417C191.196 113.394 191.202 113.368 191.209 113.343L191.226 113.276L191.233 113.247L191.219 113.069L192.414 111.314L191.742 113.36L191.591 113.399L191.515 113.491L191.478 113.568L191.508 113.684L191.515 113.777L191.415 113.839L191.332 113.846H191.309L189.539 117.414L189.728 117.468L189.743 117.637L189.698 117.852L189.546 118.067L189.365 118.144L189.259 118.421H189.093L189.044 118.401L187.22 122.07V122.135L187.184 122.201C187.162 122.241 187.131 122.294 187.098 122.349C187.065 122.404 187.03 122.46 186.998 122.505C186.977 122.539 186.95 122.57 186.919 122.596C186.899 122.609 186.885 122.629 186.878 122.652C186.869 122.679 186.863 122.707 186.861 122.736C186.859 122.765 186.859 122.794 186.861 122.823C186.861 122.85 186.861 122.873 186.861 122.888C186.861 122.903 186.861 122.928 186.861 122.958C186.861 122.988 186.854 123.022 186.85 123.058C186.846 123.094 186.842 123.127 186.839 123.158C186.836 123.189 186.839 123.213 186.839 123.228C186.839 123.243 186.839 123.296 186.83 123.366C186.821 123.436 186.817 123.525 186.809 123.613C186.801 123.701 186.794 123.79 186.788 123.86C186.782 123.93 186.778 123.982 186.778 123.997C186.784 124.025 186.795 124.052 186.811 124.076C186.831 124.111 186.857 124.151 186.884 124.19C186.911 124.229 186.937 124.265 186.956 124.29L186.989 124.334L186.838 124.61L186.349 124.768V125.407H186.831V125.868H186.538V126.299H186.848V126.66C187.152 126.681 187.45 126.758 187.727 126.886C187.997 127.011 188.243 127.183 188.454 127.393C188.888 127.825 189.157 128.396 189.214 129.007C189.214 129.015 189.214 129.022 189.214 129.03C189.214 129.038 189.214 129.045 189.214 129.053V129.14C189.214 129.147 189.214 129.153 189.214 129.16C189.214 129.167 189.214 129.173 189.214 129.18C189.214 129.187 189.214 129.19 189.214 129.194C189.214 129.198 189.214 129.204 189.214 129.208V129.222C189.214 129.222 189.214 129.232 189.214 129.236V129.263C189.214 129.27 189.214 129.276 189.214 129.282V129.321C189.214 129.327 189.214 129.334 189.214 129.34C189.214 129.346 189.214 129.349 189.214 129.354C189.214 129.359 189.214 129.363 189.214 129.368C189.214 129.373 189.214 129.378 189.214 129.382C189.214 129.386 189.214 129.392 189.214 129.397C189.214 129.402 189.214 129.416 189.214 129.425V129.453V129.481C189.214 129.49 189.214 129.499 189.214 129.508V129.533C189.214 129.533 189.214 129.542 189.214 129.546C189.214 129.55 189.214 129.554 189.214 129.558V129.583C189.214 129.583 189.214 129.591 189.214 129.595C189.214 129.599 189.214 129.603 189.214 129.607V129.619V129.631V129.644V129.656L189.209 129.687L189.203 129.718L189.197 129.748L189.191 129.779L189.185 129.812L189.179 129.844L189.172 129.876L189.165 129.909V129.917V129.925V129.933V129.941C189.101 130.181 189.002 130.411 188.872 130.623C188.742 130.834 188.584 131.026 188.402 131.194C188.22 131.362 188.016 131.503 187.795 131.615C187.574 131.726 187.339 131.805 187.095 131.847H186.706H186.222L185.173 131.834L183.118 131.826L181.651 131.807L181.034 131.814L180.763 131.799H180.969H181.257L186.678 131.841L180.978 131.81C180.418 131.799 179.878 131.602 179.443 131.249C179.23 131.077 179.046 130.873 178.898 130.644C178.747 130.41 178.633 130.154 178.563 129.885V129.858L178.545 129.814L178.537 129.773L178.529 129.732L178.521 129.69V129.668V129.646V129.624V129.602V129.577V129.552V129.527V129.503V129.472C178.521 129.456 178.521 129.441 178.521 129.425C178.521 129.409 178.521 129.394 178.521 129.379C178.521 129.364 178.521 129.348 178.521 129.332C178.521 129.316 178.521 129.3 178.521 129.285C178.521 129.27 178.521 129.272 178.521 129.266V129.247C178.521 129.24 178.521 129.234 178.521 129.228C178.521 129.222 178.521 129.215 178.521 129.209C178.521 129.203 178.521 129.195 178.521 129.188C178.521 129.181 178.521 129.174 178.521 129.167C178.521 129.16 178.521 129.153 178.521 129.146C178.521 129.139 178.479 129.132 178.479 129.125ZM186.893 120.072L186.91 120.172L186.948 120.406C186.962 120.492 186.977 120.581 186.988 120.652C186.999 120.723 187.009 120.775 187.013 120.791C187.017 120.807 187.027 120.837 187.041 120.875L187.087 120.999L187.13 121.111L187.149 121.16L187.175 121.51L188.796 118.259L188.74 118.21L188.682 118.16L188.627 118.113L188.581 118.074C188.562 118.059 188.538 118.036 188.512 118.01L188.433 117.928L188.368 117.858L188.341 117.828L188.041 117.642L186.971 116.965L187.015 117.028L187.1 117.152C187.131 117.198 187.163 117.245 187.188 117.286C187.208 117.316 187.226 117.347 187.241 117.38C187.25 117.408 187.256 117.437 187.258 117.467C187.258 117.504 187.264 117.549 187.264 117.595C187.264 117.641 187.264 117.689 187.258 117.734C187.255 117.775 187.249 117.815 187.241 117.856C187.232 117.89 187.219 117.924 187.202 117.956C187.186 117.988 187.167 118.019 187.147 118.05C187.128 118.078 187.11 118.101 187.097 118.118L187.075 118.144L186.895 118.374L186.904 118.414C186.912 118.434 186.924 118.462 186.935 118.493C186.946 118.524 186.957 118.557 186.966 118.593C186.974 118.62 186.979 118.649 186.98 118.678C186.978 118.714 186.972 118.75 186.964 118.786C186.954 118.832 186.941 118.886 186.928 118.934C186.915 118.982 186.902 119.034 186.892 119.065L186.876 119.122L186.816 119.476L186.893 120.072ZM177.981 147.114V151.471L177.004 151.457V147.101L177.981 147.114ZM189.723 151.592L177.004 151.457V147.101L177.982 147.11V146.554L179.213 146.565V145.871H178.871V144.739L179.805 144.747V142.926L181.078 142.936V132.514L186.615 132.545V142.982L187.892 142.993V144.814L188.831 144.822V145.953H188.492V146.653L189.725 146.664V147.934L189.723 151.592ZM190.709 147.227V151.598L189.725 151.588V147.214L190.709 147.227Z" fill="#1B023F"/> -</g> -<g clip-path="url(#clip2_1702_46258)"> -<path d="M1440 0H0V185H1440V0Z" fill="#2A1260"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M952.586 185L880.033 23.5941L620.972 12L488 177.832V185H496.163L598.654 55.422L568.112 185H722.889L810.899 146.501L805.818 185H842.143L847.748 143.512L888.582 185H936.163L856.829 104.256L880.212 56.1953L940.212 185H952.586ZM639.117 40.657L789.161 105.346L607.598 176.662L639.117 40.657ZM698.248 26.9892L851.079 33.2003L824.316 82.1957L698.248 26.9892Z" fill="#892ED8" fill-opacity="0.15"/> -<path d="M767.645 98.2871L767.638 96.398L736.555 79.3044L736.994 83.7705L767.645 98.2871ZM797.84 114.296L797.943 113.066L788.954 108.065L789.107 109.77L797.84 114.296ZM736.788 77.5118L742.967 81.0015L742.589 78.6599L737.122 73.6744L736.788 77.5118ZM648.036 104.338L735.566 87.7329L734.708 79.2646L647.925 98.6509L648.102 101.728L647.469 102.122L647.736 102.761L648.036 104.338ZM735.139 75.4522L736.288 72.3194L727.048 72L726.776 74.3802L722.009 74.4416L722.038 76.5241L688.201 74.894L687.704 81.5835L685.177 81.9131L685.441 79.3885L680.841 80.6389L680.875 82.8611L677.601 83.2021L677.876 81.862L667.071 86.1643L655.268 93.0015L650.079 94.4042L653.175 92.5855L652.855 91.4033L650.499 92.7674L650.329 91.5784L645.152 93.729L645.657 97.4312L646.705 97.5631L735.304 76.7901L735.139 75.4522ZM737.558 87.7205L798.969 118.219L798.566 116.098L768.864 101.043L737.393 85.3641L737.558 87.7205ZM646.387 144.066L706.669 137.56L647.12 142.194L646.387 144.066ZM800.587 148.854L736.144 137.487L736.425 143.234L801 149.636L800.587 148.854ZM800.473 150.753L736.625 144.714L736.739 148.175L800.473 150.753ZM639 151L702.876 148.101L734.073 148.377L733.911 135.895L703.259 139.973L641.771 144.549L641.65 145.649L698.889 142.103L659.674 145.791L639.468 147.041L639 151ZM661.591 104.213L665.279 106.181V105.328L661.686 103.414L655.261 104.607L655.195 105.477L661.591 104.213ZM668.575 106.279L666.531 139.66L667.013 139.627L668.974 105.754C668.974 105.729 668.982 105.704 668.987 105.68C669 105.626 669.019 105.574 669.043 105.524C669.069 105.468 669.108 105.418 669.157 105.381C669.188 105.362 669.222 105.349 669.258 105.343C669.294 105.338 669.33 105.339 669.365 105.348C669.438 105.361 669.505 105.398 669.556 105.452C669.595 105.498 669.621 105.553 669.632 105.612C669.643 105.66 669.646 105.709 669.643 105.759C669.643 105.78 669.643 105.801 669.636 105.822L667.864 139.565L668.422 139.525L670.069 105.424C670.071 105.4 670.075 105.376 670.081 105.352C670.093 105.298 670.112 105.246 670.136 105.197C670.161 105.141 670.2 105.092 670.25 105.056C670.281 105.037 670.316 105.025 670.351 105.02C670.387 105.014 670.424 105.016 670.459 105.025C670.532 105.036 670.599 105.072 670.649 105.127C670.687 105.172 670.713 105.226 670.724 105.285C670.733 105.333 670.736 105.381 670.733 105.43C670.732 105.452 670.729 105.473 670.725 105.494L669.297 139.459L669.841 139.422L671.107 105.418C671.11 105.393 671.114 105.368 671.12 105.344C671.13 105.291 671.146 105.239 671.169 105.19C671.194 105.134 671.234 105.086 671.283 105.049C671.314 105.03 671.349 105.018 671.385 105.012C671.421 105.007 671.458 105.009 671.493 105.019C671.566 105.031 671.633 105.068 671.683 105.122C671.721 105.167 671.747 105.222 671.758 105.28C671.767 105.328 671.771 105.376 671.767 105.424C671.766 105.446 671.764 105.467 671.759 105.488L670.71 139.361L671.15 139.332L672.177 105.73C672.179 105.706 672.184 105.681 672.19 105.657C672.201 105.604 672.219 105.552 672.243 105.503C672.268 105.447 672.307 105.398 672.357 105.362C672.388 105.343 672.423 105.33 672.46 105.324C672.496 105.318 672.533 105.32 672.569 105.329C672.642 105.343 672.709 105.38 672.759 105.435C672.798 105.48 672.824 105.535 672.835 105.594C672.844 105.642 672.847 105.691 672.844 105.739C672.843 105.761 672.84 105.782 672.836 105.803L672.016 139.271L672.432 139.241L673.161 105.105C672.986 105.03 672.807 104.964 672.625 104.907C672.183 104.766 671.729 104.666 671.27 104.608C670.674 104.53 670.07 104.545 669.479 104.651C668.806 104.775 668.174 105.059 667.635 105.479C667.52 106.716 667.338 109.163 667.112 112.216C666.886 115.269 666.622 118.923 666.361 122.588C666.099 126.254 665.841 129.911 665.625 132.974C665.41 136.038 665.238 138.5 665.15 139.764L665.639 139.73L667.883 106.213C667.887 106.189 667.891 106.165 667.897 106.141C667.91 106.087 667.928 106.035 667.952 105.985C667.979 105.928 668.021 105.879 668.073 105.843C668.104 105.824 668.138 105.811 668.174 105.805C668.21 105.8 668.247 105.801 668.282 105.81C668.356 105.823 668.423 105.86 668.474 105.914C668.513 105.96 668.539 106.015 668.55 106.073C668.56 106.121 668.564 106.17 668.56 106.219C668.56 106.239 668.56 106.26 668.552 106.28L668.575 106.279ZM665.442 103.615L672.037 102.308L675.861 104.342L675.84 103.459L672.108 101.481L665.487 102.717L665.442 103.615ZM680.105 104.233L678.36 138.807L678.858 138.773L680.518 103.691C680.52 103.665 680.524 103.64 680.53 103.615C680.542 103.559 680.56 103.505 680.585 103.453C680.612 103.394 680.655 103.344 680.708 103.307C680.74 103.287 680.776 103.273 680.814 103.267C680.851 103.262 680.889 103.263 680.926 103.273C681.002 103.285 681.071 103.323 681.122 103.38C681.162 103.426 681.19 103.483 681.202 103.543C681.212 103.593 681.216 103.643 681.214 103.693C681.214 103.715 681.214 103.738 681.207 103.759L679.749 138.706L680.32 138.667L681.643 103.357C681.646 103.331 681.65 103.306 681.656 103.282C681.668 103.226 681.687 103.173 681.712 103.121C681.739 103.062 681.782 103.012 681.836 102.975C681.902 102.935 681.981 102.923 682.055 102.941C682.132 102.956 682.202 102.996 682.253 103.054C682.293 103.102 682.32 103.159 682.333 103.219C682.343 103.269 682.347 103.319 682.345 103.369C682.345 103.391 682.345 103.414 682.338 103.435L681.226 138.601L681.797 138.556L682.728 103.35C682.73 103.324 682.734 103.299 682.739 103.274C682.75 103.218 682.769 103.164 682.793 103.112C682.819 103.054 682.861 103.003 682.914 102.966C682.946 102.946 682.981 102.933 683.018 102.927C683.055 102.921 683.093 102.923 683.129 102.933C683.207 102.947 683.277 102.987 683.329 103.046C683.37 103.094 683.397 103.15 683.409 103.211C683.419 103.261 683.423 103.311 683.42 103.361C683.419 103.383 683.416 103.405 683.411 103.427L682.689 138.501L683.146 138.468L683.837 103.67C683.84 103.645 683.844 103.62 683.85 103.595C683.861 103.54 683.879 103.486 683.905 103.435C683.931 103.376 683.974 103.326 684.027 103.289C684.059 103.269 684.094 103.256 684.131 103.25C684.168 103.244 684.206 103.246 684.243 103.254C684.318 103.268 684.387 103.306 684.439 103.362C684.479 103.41 684.506 103.467 684.519 103.527C684.529 103.577 684.533 103.628 684.53 103.678C684.529 103.701 684.527 103.723 684.523 103.744L684.045 138.404L684.472 138.373L684.853 103.021C684.672 102.944 684.486 102.875 684.297 102.817C683.841 102.671 683.372 102.568 682.897 102.509C682.282 102.428 681.659 102.443 681.049 102.554C680.358 102.682 679.708 102.976 679.156 103.41C679.057 104.693 678.892 107.242 678.69 110.425C678.488 113.607 678.258 117.404 678.03 121.206C677.802 125.008 677.573 128.805 677.385 131.966C677.197 135.127 677.049 137.65 676.975 138.911L677.475 138.877L679.416 104.173C679.418 104.147 679.422 104.122 679.428 104.097C679.441 104.041 679.46 103.987 679.484 103.935C679.512 103.876 679.555 103.825 679.609 103.788C679.641 103.767 679.677 103.754 679.714 103.748C679.752 103.742 679.79 103.743 679.827 103.752C679.903 103.767 679.972 103.807 680.022 103.866C680.062 103.913 680.089 103.97 680.101 104.031C680.111 104.08 680.114 104.131 680.111 104.181C680.11 104.2 680.108 104.22 680.104 104.239L680.105 104.233ZM709.415 95.3579L713.678 97.5915L713.622 96.6174L709.476 94.4474L702.272 95.8046L702.243 96.7935L709.415 95.3579ZM676.841 101.481L683.627 100.129L687.606 102.235L687.574 101.325L683.704 99.2795L676.888 100.548L676.841 101.481ZM692.274 101.795L690.816 137.905L691.331 137.872L692.692 101.231C692.695 101.205 692.699 101.179 692.705 101.154C692.715 101.096 692.733 101.039 692.757 100.985C692.784 100.924 692.827 100.872 692.881 100.833C692.914 100.812 692.952 100.797 692.991 100.791C693.031 100.784 693.071 100.786 693.109 100.796C693.188 100.81 693.259 100.85 693.313 100.91C693.354 100.958 693.382 101.016 693.396 101.079C693.407 101.13 693.412 101.182 693.41 101.233C693.41 101.256 693.409 101.278 693.403 101.301L692.261 137.802L692.852 137.759L693.866 100.889C693.868 100.863 693.873 100.837 693.879 100.812C693.89 100.754 693.909 100.699 693.934 100.646C693.961 100.585 694.003 100.532 694.058 100.493C694.09 100.473 694.126 100.459 694.164 100.452C694.202 100.446 694.241 100.447 694.278 100.456C694.358 100.471 694.431 100.51 694.486 100.57C694.528 100.618 694.558 100.675 694.572 100.738C694.583 100.788 694.588 100.84 694.585 100.891C694.584 100.914 694.582 100.936 694.579 100.958L693.779 137.694L694.364 137.652L694.97 100.88C694.973 100.854 694.977 100.828 694.983 100.803C694.994 100.745 695.013 100.69 695.038 100.637C695.065 100.576 695.108 100.523 695.163 100.485C695.197 100.464 695.234 100.45 695.274 100.445C695.313 100.439 695.353 100.441 695.391 100.451C695.471 100.465 695.543 100.505 695.597 100.565C695.639 100.614 695.668 100.673 695.681 100.736C695.693 100.787 695.697 100.839 695.695 100.891C695.695 100.914 695.693 100.937 695.688 100.96L695.294 137.586L695.77 137.55L696.129 101.21C696.131 101.183 696.135 101.157 696.14 101.131C696.151 101.074 696.169 101.018 696.194 100.965C696.221 100.905 696.264 100.852 696.318 100.814C696.352 100.793 696.39 100.779 696.429 100.774C696.468 100.768 696.508 100.77 696.547 100.78C696.625 100.795 696.697 100.834 696.75 100.894C696.791 100.942 696.82 101.001 696.833 101.063C696.845 101.114 696.849 101.166 696.847 101.218C696.847 101.24 696.845 101.263 696.84 101.286L696.697 137.483L697.145 137.454L697.174 100.543C696.988 100.463 696.798 100.392 696.604 100.332C696.132 100.181 695.648 100.074 695.157 100.011C694.525 99.9273 693.883 99.9423 693.254 100.056C692.545 100.186 691.878 100.489 691.313 100.937C691.221 102.301 691.068 105.063 690.885 108.489C690.703 111.915 690.494 116.009 690.291 120.056C690.087 124.103 689.888 128.097 689.729 131.328C689.57 134.56 689.448 137.026 689.4 138.013L689.918 137.976L691.583 101.724C691.585 101.698 691.59 101.672 691.595 101.646C691.607 101.589 691.626 101.533 691.65 101.48C691.678 101.42 691.72 101.367 691.775 101.329C691.808 101.309 691.844 101.295 691.883 101.289C691.921 101.283 691.96 101.285 691.997 101.295C692.076 101.309 692.148 101.349 692.202 101.408C692.243 101.457 692.272 101.515 692.285 101.578C692.296 101.629 692.301 101.681 692.299 101.734C692.294 101.755 692.288 101.776 692.281 101.796L692.274 101.795ZM688.888 98.9532L695.865 97.5574L699.986 99.7285L699.942 98.785L695.931 96.6765L688.927 97.9939L688.888 98.9532ZM715.258 94.3814L722.626 92.9038L727.031 95.2056L726.969 94.2053L722.681 91.9683L715.284 93.3619L715.258 94.3814ZM658.812 108.044L656.643 140.378L657.078 140.341L659.194 107.534C659.194 107.51 659.2 107.486 659.206 107.464C659.217 107.412 659.234 107.361 659.257 107.314C659.282 107.259 659.321 107.212 659.371 107.177C659.398 107.158 659.43 107.146 659.463 107.141C659.496 107.135 659.53 107.137 659.562 107.147C659.63 107.159 659.691 107.195 659.735 107.248C659.77 107.292 659.793 107.345 659.802 107.401C659.81 107.448 659.812 107.495 659.809 107.542C659.808 107.563 659.805 107.583 659.801 107.603L657.869 140.29L658.375 140.253L660.191 107.223C660.191 107.199 660.198 107.175 660.204 107.152C660.215 107.101 660.233 107.051 660.255 107.003C660.281 106.949 660.32 106.901 660.369 106.867C660.397 106.849 660.429 106.836 660.461 106.831C660.494 106.826 660.528 106.828 660.56 106.836C660.628 106.849 660.689 106.885 660.733 106.937C660.768 106.982 660.791 107.034 660.801 107.09C660.81 107.136 660.813 107.183 660.81 107.229C660.809 107.25 660.807 107.271 660.803 107.291L659.17 140.195L659.667 140.157L661.135 107.219C661.137 107.196 661.142 107.172 661.147 107.149C661.158 107.097 661.175 107.047 661.197 106.999C661.223 106.944 661.262 106.896 661.311 106.861C661.338 106.843 661.37 106.83 661.402 106.825C661.435 106.819 661.468 106.821 661.5 106.829C661.568 106.842 661.63 106.877 661.674 106.931C661.71 106.976 661.734 107.029 661.743 107.085C661.751 107.132 661.754 107.179 661.751 107.226C661.75 107.247 661.747 107.268 661.744 107.289L660.46 140.1L660.865 140.07L662.121 107.519C662.123 107.495 662.127 107.471 662.132 107.448C662.143 107.396 662.159 107.345 662.181 107.297C662.207 107.242 662.246 107.194 662.295 107.159C662.323 107.141 662.354 107.128 662.387 107.123C662.42 107.118 662.454 107.12 662.486 107.129C662.553 107.142 662.614 107.177 662.659 107.228C662.694 107.273 662.717 107.325 662.727 107.381C662.735 107.427 662.738 107.474 662.735 107.52C662.734 107.541 662.732 107.562 662.728 107.582L661.665 140.017L662.046 139.988L663.032 106.91C662.874 106.837 662.712 106.773 662.546 106.718C662.148 106.582 661.737 106.485 661.319 106.428C660.779 106.351 660.229 106.365 659.692 106.468C659.074 106.589 658.495 106.863 658.01 107.264C657.896 108.464 657.705 110.843 657.47 113.81C657.235 116.777 656.96 120.33 656.687 123.882C656.414 127.434 656.144 130.983 655.92 133.943C655.695 136.903 655.518 139.273 655.428 140.466L655.876 140.431L658.221 107.979C658.224 107.955 658.228 107.931 658.234 107.908C658.245 107.856 658.261 107.806 658.284 107.758C658.309 107.703 658.348 107.656 658.398 107.622C658.426 107.603 658.457 107.591 658.49 107.586C658.523 107.581 658.557 107.582 658.589 107.591C658.656 107.604 658.717 107.639 658.761 107.692C658.795 107.737 658.818 107.79 658.827 107.846C658.835 107.892 658.837 107.939 658.834 107.985C658.828 108.006 658.821 108.025 658.812 108.044ZM708.112 98.86L707.642 136.689L708.248 136.647L708.52 98.7804C708.522 98.7533 708.526 98.7264 708.531 98.6997C708.542 98.641 708.56 98.5838 708.585 98.5293C708.612 98.4669 708.656 98.413 708.711 98.3735C708.745 98.3523 708.783 98.3382 708.822 98.3319C708.861 98.3256 708.901 98.3275 708.94 98.3372C709.021 98.351 709.096 98.3909 709.152 98.4508C709.196 98.5011 709.226 98.5612 709.241 98.6259C709.254 98.6779 709.259 98.7314 709.258 98.785C709.26 98.8081 709.26 98.8312 709.258 98.8543L709.195 136.575L709.689 136.54L709.707 99.1192C709.709 99.0921 709.713 99.0651 709.718 99.0385C709.73 98.9793 709.748 98.9217 709.773 98.8669C709.801 98.804 709.844 98.7494 709.9 98.7088C709.933 98.6871 709.971 98.6724 710.01 98.6655C710.049 98.6587 710.089 98.6599 710.128 98.6691C710.209 98.6826 710.283 98.7226 710.339 98.7827C710.383 98.8332 710.413 98.8939 710.426 98.9589C710.438 99.0116 710.442 99.0654 710.44 99.1192C710.439 99.1428 710.436 99.1663 710.433 99.1897L710.639 136.473L711.095 136.44L710.768 98.4281C710.575 98.3452 710.377 98.2724 710.176 98.2099C709.693 98.0554 709.196 97.945 708.692 97.8802C708.042 97.7928 707.382 97.8085 706.736 97.9268C706.007 98.0609 705.323 98.3734 704.746 98.8361C704.664 100.241 704.532 103.068 704.378 106.584C704.224 110.1 704.047 114.301 703.876 118.459C703.704 122.617 703.533 126.727 703.404 130.064C703.275 133.402 703.176 135.963 703.129 137.02L703.663 136.977L705.025 99.6455C705.027 99.6188 705.031 99.5922 705.037 99.5659C705.048 99.5071 705.066 99.4498 705.091 99.3954C705.119 99.333 705.163 99.2795 705.219 99.2408C705.253 99.2201 705.291 99.2063 705.33 99.2002C705.369 99.1942 705.409 99.196 705.448 99.2056C705.529 99.2192 705.604 99.2591 705.66 99.3192C705.703 99.3689 705.733 99.4288 705.747 99.4931C705.758 99.5454 705.763 99.5989 705.76 99.6523C705.76 99.675 705.76 99.6989 705.754 99.7216L704.605 136.912L705.134 136.874L706.186 99.1431C706.188 99.116 706.192 99.089 706.198 99.0624C706.209 99.0036 706.227 98.9463 706.251 98.8918C706.278 98.8293 706.321 98.7753 706.377 98.7361C706.41 98.7148 706.448 98.7007 706.487 98.6946C706.527 98.6885 706.567 98.6907 706.605 98.7009C706.687 98.7144 706.761 98.7543 706.817 98.8146C706.861 98.8641 706.891 98.9234 706.906 98.9873C706.918 99.0394 706.923 99.093 706.92 99.1465C706.92 99.1697 706.918 99.1928 706.914 99.2158L706.079 136.805L706.687 136.758L707.372 98.785C707.375 98.7579 707.379 98.7309 707.385 98.7043C707.397 98.6455 707.416 98.5882 707.441 98.5338C707.469 98.4713 707.513 98.4175 707.569 98.378C707.602 98.3573 707.64 98.3436 707.679 98.3375C707.718 98.3315 707.759 98.3333 707.797 98.3429C707.878 98.3569 707.952 98.3968 708.008 98.4565C708.051 98.5064 708.082 98.5661 708.096 98.6304C708.108 98.6822 708.114 98.7353 708.112 98.7884C708.113 98.8127 708.113 98.8365 708.112 98.86ZM733.764 94.2996L733.946 134.79L734.219 134.769L734.586 134.837L734.196 94.211C734.198 94.1824 734.201 94.1539 734.205 94.1257C734.215 94.0636 734.233 94.0029 734.258 93.945C734.285 93.8787 734.33 93.8213 734.388 93.779C734.424 93.7564 734.463 93.7413 734.505 93.7344C734.547 93.7276 734.589 93.7292 734.63 93.7392C734.718 93.7549 734.798 93.7984 734.858 93.8631C734.905 93.9163 734.938 93.9799 734.955 94.0484C734.969 94.1034 734.976 94.16 734.975 94.2167C734.975 94.2417 734.975 94.2655 734.975 94.2906L735.612 135.025L736.128 135.12L735.466 94.5713C735.468 94.5427 735.472 94.5143 735.477 94.4861C735.488 94.4235 735.506 94.3623 735.532 94.3042C735.56 94.2378 735.605 94.1804 735.663 94.1382C735.698 94.1157 735.738 94.1007 735.779 94.0943C735.821 94.0878 735.863 94.09 735.903 94.1007C735.99 94.1153 736.07 94.1576 736.131 94.2212C736.178 94.2738 736.211 94.337 736.228 94.4053C736.242 94.4603 736.249 94.5169 736.248 94.5735C736.248 94.5986 736.248 94.6224 736.248 94.6474L737.161 135.311H737.442V135.366L737.968 135.461L738.699 98.3463C738.701 98.3191 738.705 98.2921 738.71 98.2655C738.721 98.2059 738.739 98.1479 738.764 98.0928C738.79 98.0295 738.834 97.9749 738.889 97.9348C738.923 97.9134 738.96 97.899 739 97.8925C739.039 97.8861 739.079 97.8877 739.118 97.8972C739.201 97.911 739.278 97.9508 739.337 98.0109C739.383 98.0613 739.415 98.1223 739.431 98.1882C739.444 98.2413 739.451 98.296 739.45 98.3508C739.45 98.3743 739.45 98.3981 739.45 98.4224L738.92 135.636L739.445 135.734L739.871 97.837C739.873 97.8096 739.876 97.7822 739.88 97.7552C739.89 97.6953 739.906 97.6368 739.931 97.5812C739.956 97.5177 739.999 97.4628 740.055 97.4233C740.089 97.4025 740.126 97.3887 740.166 97.3826C740.205 97.3765 740.245 97.3784 740.283 97.388C740.366 97.4006 740.442 97.4406 740.499 97.5017C740.544 97.5524 740.574 97.6133 740.589 97.679C740.602 97.7326 740.607 97.7877 740.605 97.8427C740.605 97.8667 740.603 97.8906 740.6 97.9143L740.394 135.91L741.006 136.024L741.046 97.4778C741.046 97.4505 741.049 97.4233 741.056 97.396C741.067 97.3366 741.085 97.2785 741.109 97.2232C741.135 97.1598 741.178 97.105 741.234 97.0652C741.268 97.0439 741.305 97.0295 741.345 97.0231C741.384 97.0166 741.424 97.0182 741.463 97.0277C741.545 97.0414 741.621 97.0813 741.678 97.1414C741.723 97.1917 741.755 97.2522 741.771 97.3175C741.784 97.37 741.79 97.4238 741.789 97.4778C741.789 97.5017 741.789 97.5244 741.789 97.5483L741.951 136.203L742.564 136.316L742.197 97.4676C742.197 97.4403 742.202 97.413 742.207 97.3869C742.217 97.3275 742.235 97.2695 742.258 97.2141C742.284 97.1506 742.328 97.0959 742.384 97.0561C742.417 97.0349 742.455 97.0207 742.494 97.0145C742.533 97.0082 742.574 97.01 742.612 97.0198C742.694 97.0334 742.77 97.0733 742.828 97.1334C742.872 97.1838 742.904 97.2443 742.92 97.3096C742.933 97.3624 742.94 97.4166 742.939 97.471C742.939 97.4949 742.939 97.5176 742.939 97.5415L743.539 136.494L744.034 136.584L743.408 97.8063C743.41 97.7792 743.414 97.7522 743.419 97.7256C743.43 97.6662 743.448 97.6082 743.472 97.5529C743.498 97.4902 743.541 97.4359 743.596 97.396C743.63 97.3744 743.667 97.3601 743.707 97.354C743.746 97.3479 743.786 97.3502 743.824 97.3607C743.907 97.3744 743.983 97.4142 744.04 97.4744C744.085 97.5247 744.117 97.5852 744.133 97.6506C744.146 97.7034 744.153 97.7576 744.152 97.812C744.152 97.8358 744.152 97.8586 744.152 97.8825L745.003 136.644H745.471L744.471 97.1095C744.274 97.0262 744.073 96.953 743.869 96.8902C743.377 96.7342 742.872 96.6231 742.36 96.5582C741.703 96.4706 741.037 96.4867 740.386 96.606C739.655 96.7412 738.969 97.0574 738.393 97.5255C738.345 98.6622 738.279 100.721 738.209 103.323C738.139 105.925 738.055 109.06 737.973 112.358C737.891 115.657 737.807 119.115 737.731 122.361C737.654 125.608 737.584 128.621 737.528 131.044L736.578 93.8461C736.371 93.7595 736.161 93.6837 735.946 93.6188C735.431 93.455 734.901 93.3382 734.364 93.2698C733.676 93.1778 732.978 93.1947 732.295 93.3198C731.527 93.4624 730.808 93.7946 730.203 94.286C730.139 95.8296 730.047 98.9896 729.943 102.901C729.839 106.812 729.724 111.475 729.614 116.029C729.504 120.582 729.402 125.022 729.323 128.495C729.244 131.967 729.188 134.469 729.174 135.144L729.735 135.108L730.512 95.1442C730.515 95.1156 730.518 95.0871 730.524 95.0589C730.535 94.9966 730.554 94.9359 730.58 94.8782C730.607 94.812 730.653 94.7546 730.711 94.7122C730.746 94.6896 730.786 94.6745 730.827 94.6676C730.868 94.6608 730.91 94.6625 730.951 94.6725C731.038 94.6875 731.118 94.7302 731.179 94.7941C731.226 94.8473 731.259 94.9108 731.276 94.9793C731.29 95.0347 731.297 95.0917 731.296 95.1488C731.296 95.1738 731.296 95.1976 731.296 95.2227L730.74 135.032L731.303 134.989L731.74 94.6077C731.74 94.5793 731.74 94.5508 731.75 94.5224C731.76 94.4598 731.778 94.3988 731.803 94.3406C731.831 94.2741 731.876 94.2162 731.934 94.1734C731.969 94.1504 732.009 94.1349 732.05 94.1279C732.092 94.1208 732.135 94.1224 732.176 94.1325C732.263 94.1482 732.343 94.1917 732.404 94.2564C732.45 94.3095 732.483 94.3732 732.499 94.4417C732.512 94.4969 732.517 94.5534 732.515 94.61C732.515 94.635 732.515 94.6588 732.508 94.6838L732.303 134.923L732.948 134.877L732.996 94.2337C732.998 94.205 733.001 94.1766 733.007 94.1485C733.018 94.0858 733.037 94.0247 733.063 93.9666C733.09 93.9003 733.136 93.8429 733.194 93.8006C733.229 93.7782 733.269 93.7631 733.31 93.7565C733.351 93.7498 733.393 93.7517 733.434 93.762C733.521 93.7767 733.602 93.8199 733.662 93.8848C733.709 93.9378 733.742 94.0014 733.758 94.07C733.772 94.1254 733.778 94.1823 733.777 94.2394C733.774 94.2616 733.77 94.2836 733.765 94.3053L733.764 94.2996ZM718.899 97.3982L718.045 135.932L718.593 135.897L719.34 96.7947C719.342 96.7668 719.346 96.7391 719.351 96.7117C719.362 96.651 719.38 96.5918 719.405 96.5355C719.431 96.4708 719.475 96.4148 719.532 96.374C719.566 96.3533 719.604 96.3396 719.643 96.3335C719.682 96.3275 719.723 96.3293 719.761 96.3389C719.845 96.3513 719.922 96.3913 719.98 96.4525C720.025 96.5044 720.056 96.5665 720.071 96.6332C720.084 96.6877 720.09 96.7434 720.088 96.7992C720.09 96.8234 720.09 96.8478 720.088 96.872L719.566 135.817L720.19 135.776L720.567 96.4275C720.567 96.4003 720.567 96.3718 720.577 96.3446C720.588 96.2839 720.606 96.2247 720.631 96.1683C720.657 96.1036 720.702 96.0476 720.759 96.0069C720.793 95.9849 720.832 95.9703 720.872 95.9639C720.913 95.9574 720.954 95.9593 720.994 95.9694C721.077 95.9831 721.154 96.0229 721.213 96.0831C721.259 96.1345 721.291 96.1967 721.306 96.2638C721.318 96.3178 721.324 96.3732 721.323 96.4286C721.322 96.453 721.321 96.4773 721.317 96.5014L721.171 135.7L721.795 135.656L721.747 96.423C721.75 96.3955 721.753 96.3681 721.759 96.3411C721.77 96.2812 721.788 96.2229 721.813 96.1672C721.841 96.1032 721.886 96.048 721.944 96.0081C721.978 95.9862 722.017 95.9715 722.058 95.9651C722.098 95.9586 722.14 95.9605 722.18 95.9705C722.263 95.984 722.339 96.024 722.397 96.0843C722.442 96.1362 722.473 96.1982 722.488 96.265C722.501 96.3194 722.506 96.3751 722.505 96.4309C722.505 96.4548 722.505 96.4798 722.505 96.5036L722.8 135.594L723.298 135.554L722.975 96.7787C722.977 96.7509 722.981 96.7232 722.986 96.6958C722.997 96.6351 723.016 96.5761 723.041 96.5196C723.068 96.455 723.112 96.3991 723.17 96.3582C723.203 96.3368 723.241 96.3225 723.28 96.316C723.319 96.3096 723.36 96.3111 723.398 96.3206C723.482 96.334 723.56 96.3739 723.619 96.4343C723.665 96.4856 723.697 96.5473 723.713 96.614C723.726 96.6676 723.731 96.7226 723.73 96.7776C723.732 96.8015 723.732 96.8254 723.73 96.8492L724.276 135.49L724.753 135.452L724.068 96.0604C723.868 95.9738 723.663 95.8979 723.455 95.833C722.954 95.6729 722.439 95.5588 721.916 95.492C721.246 95.4031 720.566 95.4195 719.901 95.5409C719.153 95.6789 718.452 96.0008 717.86 96.4775C717.787 97.9552 717.674 100.952 717.544 104.671C717.414 108.39 717.267 112.828 717.126 117.189C716.986 121.551 716.85 125.828 716.744 129.238C716.638 132.648 716.56 135.178 716.535 136.043L717.079 136.001L718.156 97.3152C718.158 97.2874 718.162 97.2596 718.167 97.2323C718.179 97.1716 718.197 97.1126 718.222 97.0561C718.25 96.9915 718.295 96.9356 718.352 96.8947C718.387 96.8727 718.426 96.8581 718.466 96.8516C718.507 96.8452 718.549 96.8471 718.588 96.8572C718.672 96.8706 718.748 96.9105 718.806 96.9708C718.851 97.0227 718.883 97.0848 718.898 97.1516C718.91 97.2056 718.916 97.261 718.915 97.3164C718.911 97.344 718.906 97.3713 718.899 97.3982ZM647.19 106.213L647.115 107.052L653.326 105.836L656.872 107.733V106.91L653.415 105.062L647.19 106.213ZM650.746 109.53L648.266 140.981L648.693 140.952L651.115 109.036C651.115 109.013 651.121 108.99 651.127 108.967C651.139 108.918 651.156 108.869 651.177 108.823C651.201 108.771 651.239 108.726 651.286 108.692C651.313 108.675 651.344 108.664 651.376 108.659C651.408 108.654 651.441 108.656 651.472 108.665C651.537 108.677 651.595 108.711 651.636 108.762C651.669 108.805 651.691 108.856 651.7 108.909C651.708 108.954 651.71 109 651.706 109.045C651.705 109.065 651.702 109.084 651.698 109.104L649.456 140.895L649.945 140.862L652.086 108.739C652.089 108.716 652.093 108.693 652.099 108.671C652.11 108.621 652.127 108.572 652.15 108.525C652.176 108.472 652.215 108.427 652.264 108.393C652.292 108.376 652.322 108.364 652.354 108.359C652.386 108.354 652.419 108.356 652.45 108.365C652.515 108.377 652.573 108.411 652.615 108.462C652.648 108.505 652.67 108.556 652.679 108.609C652.684 108.654 652.684 108.7 652.679 108.745C652.677 108.765 652.675 108.784 652.671 108.804L650.705 140.805L651.191 140.771L652.998 108.731C653.001 108.708 653.005 108.685 653.01 108.663C653.02 108.613 653.036 108.565 653.058 108.518C653.081 108.466 653.117 108.42 653.164 108.387C653.191 108.369 653.221 108.357 653.253 108.351C653.285 108.346 653.318 108.348 653.349 108.356C653.413 108.367 653.472 108.402 653.513 108.453C653.546 108.496 653.568 108.547 653.576 108.6C653.582 108.645 653.582 108.691 653.576 108.736C653.574 108.755 653.572 108.775 653.568 108.795L651.958 140.711L652.347 140.681L653.937 109.02C653.94 108.997 653.944 108.974 653.949 108.952C653.961 108.901 653.978 108.853 654 108.806C654.025 108.753 654.064 108.707 654.114 108.674C654.141 108.656 654.171 108.644 654.204 108.639C654.236 108.634 654.268 108.636 654.3 108.645C654.365 108.657 654.423 108.692 654.465 108.742C654.498 108.786 654.52 108.837 654.529 108.891C654.537 108.936 654.539 108.981 654.536 109.027C654.535 109.046 654.532 109.066 654.529 109.086L653.125 140.631L653.493 140.603L654.819 108.434C654.667 108.364 654.511 108.302 654.352 108.249C653.968 108.117 653.572 108.023 653.17 107.968C652.647 107.894 652.116 107.907 651.598 108.006C650.997 108.124 650.435 108.389 649.963 108.776C649.841 109.956 649.62 112.314 649.354 115.256C649.088 118.197 648.774 121.703 648.466 125.194C648.158 128.684 647.853 132.149 647.603 134.995C647.353 137.842 647.159 140.065 647.071 141.072L647.506 141.044L650.157 109.468C650.157 109.444 650.164 109.42 650.17 109.396C650.181 109.346 650.198 109.298 650.22 109.252C650.244 109.199 650.281 109.154 650.327 109.12C650.354 109.102 650.384 109.09 650.416 109.085C650.447 109.08 650.48 109.081 650.511 109.089C650.575 109.1 650.634 109.134 650.676 109.183C650.71 109.227 650.733 109.277 650.741 109.331C650.749 109.376 650.752 109.422 650.748 109.468C650.748 109.489 650.748 109.509 650.746 109.53ZM735.129 89.6176L727.533 91.0555L727.519 92.1069L735.078 90.5804L739.625 92.9515L739.552 91.9182L735.129 89.6176ZM759.188 101.682L763.307 103.702L763.216 102.804L759.22 100.848L757.564 101.177L756.343 102.286L759.188 101.682ZM776.607 110.375L775.571 111.339L778.034 110.82L781.644 112.567L781.547 111.791L778.034 110.093L776.607 110.375ZM766.104 105.094L770.069 107.032L769.982 106.169L766.13 104.289L764.532 104.6L763.368 105.669L766.104 105.094ZM770.784 107.655L769.674 108.678L772.282 108.127L776.049 109.976L775.971 109.154L772.294 107.36L770.784 107.655ZM781.938 112.997L780.956 113.906L783.294 113.415L786.719 115.079L786.632 114.338L783.299 112.727L781.938 112.997ZM787.864 114.982L786.592 115.237L785.679 116.092L787.863 115.631L791.085 117.187L790.994 116.495L787.864 114.982ZM792.903 145.656L790.673 119.984C790.674 119.924 790.684 119.865 790.705 119.808C790.72 119.763 790.748 119.723 790.786 119.694C790.81 119.679 790.836 119.669 790.863 119.665C790.891 119.66 790.919 119.661 790.946 119.668C791.006 119.677 791.061 119.704 791.105 119.746C791.139 119.779 791.165 119.821 791.18 119.866C791.193 119.903 791.2 119.941 791.203 119.98C791.204 119.996 791.204 120.012 791.203 120.029L793.588 145.781L794.021 145.863L791.485 119.967C791.484 119.908 791.494 119.849 791.514 119.793C791.527 119.748 791.555 119.709 791.592 119.68C791.616 119.664 791.642 119.654 791.67 119.649C791.698 119.645 791.726 119.646 791.753 119.652C791.807 119.66 791.858 119.682 791.9 119.717C791.941 119.752 791.972 119.798 791.988 119.85C792.001 119.887 792.008 119.925 792.009 119.964C792.01 119.98 792.01 119.996 792.009 120.013L794.715 145.988L795.067 146.054L792.358 120.195C792.357 120.135 792.366 120.076 792.386 120.019C792.399 119.974 792.427 119.934 792.465 119.906C792.488 119.891 792.514 119.88 792.541 119.876C792.569 119.871 792.597 119.872 792.624 119.879C792.683 119.888 792.738 119.915 792.782 119.956C792.816 119.99 792.842 120.031 792.858 120.076C792.871 120.113 792.879 120.151 792.882 120.19C792.883 120.206 792.883 120.223 792.882 120.239L795.757 146.184L796.091 146.248L793.059 119.708C793.059 119.708 792.937 119.66 792.728 119.594C792.45 119.514 792.166 119.452 791.88 119.409C791.502 119.351 791.12 119.334 790.738 119.357C790.318 119.381 789.905 119.478 789.518 119.646L791.024 135.487L789.855 120.238C789.854 120.219 789.854 120.2 789.855 120.181C789.858 120.142 789.867 120.104 789.88 120.067C789.893 120.022 789.921 119.983 789.958 119.954C789.981 119.938 790.007 119.928 790.034 119.924C790.062 119.92 790.089 119.921 790.116 119.929C790.17 119.936 790.221 119.958 790.263 119.993C790.305 120.028 790.336 120.074 790.352 120.125C790.365 120.162 790.372 120.2 790.374 120.239C790.375 120.255 790.375 120.271 790.374 120.287L792.46 145.575L792.903 145.656ZM751.479 98.2382L755.655 100.398L755.568 99.4613L751.507 97.3709L748.89 97.8654L747.498 99.0498L751.479 98.2382ZM791.238 117.17L790.537 117.966L791.875 117.68L795.072 119.197L794.958 118.515L791.857 117.045L791.238 117.17ZM775.492 137.7L774.653 114.191C774.652 114.169 774.652 114.148 774.653 114.127C774.659 114.08 774.671 114.034 774.689 113.991C774.708 113.94 774.74 113.896 774.783 113.864C774.81 113.847 774.839 113.835 774.871 113.829C774.902 113.824 774.934 113.825 774.965 113.832C775.027 113.841 775.084 113.867 775.132 113.907C775.179 113.947 775.213 114 775.231 114.06C775.244 114.102 775.251 114.145 775.253 114.188C775.254 114.207 775.254 114.225 775.253 114.244L776.184 142.554L776.613 142.632L775.571 113.771C775.57 113.75 775.57 113.729 775.571 113.707C775.578 113.661 775.59 113.616 775.608 113.572C775.627 113.522 775.66 113.479 775.704 113.447C775.73 113.43 775.761 113.418 775.792 113.413C775.824 113.407 775.856 113.408 775.887 113.415C775.948 113.424 776.005 113.451 776.052 113.491C776.098 113.531 776.133 113.584 776.15 113.643C776.162 113.684 776.169 113.728 776.17 113.771C776.171 113.79 776.171 113.808 776.17 113.827L777.386 142.773L777.882 142.867L776.532 113.476C776.533 113.454 776.535 113.432 776.538 113.411C776.544 113.364 776.556 113.317 776.574 113.273C776.593 113.223 776.626 113.179 776.669 113.147C776.696 113.13 776.726 113.118 776.757 113.113C776.788 113.107 776.82 113.109 776.851 113.116C776.913 113.124 776.971 113.15 777.018 113.19C777.066 113.231 777.101 113.284 777.118 113.344C777.131 113.385 777.138 113.428 777.14 113.471C777.141 113.49 777.141 113.508 777.14 113.527L778.667 143.01L779.163 143.103L777.464 113.46C777.466 113.39 777.48 113.322 777.505 113.257C777.524 113.207 777.557 113.162 777.601 113.13C777.628 113.113 777.659 113.101 777.691 113.095C777.723 113.09 777.755 113.091 777.787 113.098C777.855 113.109 777.917 113.141 777.967 113.188C778.005 113.227 778.034 113.275 778.049 113.327C778.062 113.368 778.07 113.411 778.071 113.454C778.072 113.473 778.072 113.491 778.071 113.51L779.955 143.251L780.354 143.329L778.464 113.715C778.466 113.646 778.48 113.578 778.505 113.513C778.525 113.463 778.558 113.419 778.601 113.387C778.628 113.369 778.659 113.358 778.69 113.353C778.722 113.348 778.755 113.35 778.786 113.358C778.847 113.367 778.904 113.393 778.95 113.433C778.996 113.474 779.029 113.527 779.045 113.586C779.057 113.627 779.064 113.67 779.064 113.713C779.066 113.732 779.066 113.75 779.064 113.769L781.147 143.473L781.532 143.543L779.302 113.155C779.302 113.155 779.115 113.078 778.804 112.987C778.399 112.868 777.984 112.784 777.564 112.738C777.032 112.675 776.493 112.695 775.966 112.795C775.381 112.907 774.835 113.165 774.377 113.544C774.377 113.92 774.452 115.619 774.557 117.956C774.662 120.293 774.802 123.266 774.941 126.191C775.08 129.115 775.217 131.988 775.321 134.137C775.425 136.287 775.492 137.7 775.492 137.7ZM743.041 94.0086L747.373 96.2661L747.308 95.284L743.084 93.0936L741 93.4846L739.79 94.6656L743.041 94.0086ZM786.964 143.951L785.708 118.262C785.71 118.201 785.722 118.141 785.744 118.084C785.76 118.038 785.789 117.999 785.828 117.97C785.852 117.955 785.879 117.945 785.907 117.94C785.935 117.936 785.964 117.937 785.992 117.944C786.046 117.951 786.097 117.974 786.138 118.009C786.18 118.045 786.21 118.092 786.226 118.144C786.237 118.181 786.244 118.219 786.245 118.258C786.246 118.274 786.246 118.291 786.245 118.308L787.697 144.686L788.141 144.766L786.561 117.995C786.56 117.976 786.56 117.957 786.561 117.938C786.566 117.897 786.577 117.856 786.592 117.817C786.608 117.771 786.638 117.732 786.677 117.703C786.701 117.687 786.728 117.677 786.756 117.672C786.784 117.668 786.813 117.669 786.841 117.676C786.902 117.685 786.958 117.713 787.002 117.755C787.036 117.79 787.061 117.833 787.076 117.879C787.087 117.916 787.094 117.954 787.097 117.993C787.098 118.009 787.098 118.026 787.097 118.043L788.836 144.896L789.286 144.978L787.391 117.978C787.391 117.917 787.403 117.856 787.424 117.798C787.44 117.753 787.469 117.713 787.508 117.685C787.532 117.669 787.559 117.658 787.587 117.653C787.616 117.649 787.645 117.65 787.673 117.656C787.734 117.666 787.791 117.694 787.835 117.737C787.869 117.772 787.895 117.814 787.909 117.861C787.921 117.898 787.928 117.936 787.93 117.975C787.931 117.991 787.931 118.008 787.93 118.025L789.994 145.107L790.354 145.172L788.283 118.208C788.282 118.149 788.29 118.091 788.308 118.035C788.324 117.99 788.352 117.95 788.39 117.921C788.414 117.906 788.44 117.895 788.468 117.89C788.496 117.886 788.525 117.887 788.552 117.894C788.613 117.903 788.669 117.931 788.713 117.973C788.747 118.008 788.773 118.051 788.787 118.097C788.799 118.134 788.806 118.172 788.808 118.211C788.809 118.228 788.809 118.244 788.808 118.261L791.052 145.314L791.395 145.378L789.008 117.714C789.008 117.714 788.863 117.656 788.619 117.586C788.299 117.493 787.971 117.424 787.64 117.381C787.21 117.323 786.773 117.32 786.342 117.372C785.868 117.428 785.41 117.583 785.001 117.827L785.039 118.333L785.067 118.322L785.095 118.314H785.167C785.222 118.322 785.273 118.345 785.315 118.381C785.357 118.417 785.388 118.464 785.404 118.517C785.416 118.554 785.423 118.592 785.424 118.63C785.425 118.647 785.425 118.663 785.424 118.679L786.011 131.65L786.673 140.661L786.964 143.951ZM796.299 119.804L799.443 121.281L799.322 120.625L796.26 119.186L795.663 119.3L794.993 120.072L796.299 119.804ZM748.1 102.452L748.214 137.362L748.717 137.454L748.489 101.894C748.491 101.868 748.493 101.842 748.498 101.817C748.507 101.76 748.523 101.704 748.546 101.652C748.569 101.592 748.609 101.539 748.66 101.501C748.692 101.48 748.729 101.466 748.766 101.46C748.804 101.454 748.842 101.456 748.879 101.465C748.959 101.48 749.032 101.52 749.087 101.579C749.131 101.627 749.161 101.685 749.176 101.748C749.189 101.799 749.195 101.851 749.195 101.903C749.195 101.926 749.195 101.948 749.195 101.971L749.616 137.63L750.203 137.744L749.632 101.553C749.636 101.469 749.655 101.387 749.687 101.31C749.71 101.25 749.749 101.198 749.801 101.16C749.833 101.139 749.869 101.126 749.907 101.12C749.944 101.114 749.983 101.117 750.02 101.127C750.099 101.141 750.172 101.181 750.227 101.24C750.27 101.288 750.301 101.345 750.318 101.407C750.332 101.457 750.339 101.509 750.338 101.561C750.338 101.584 750.338 101.605 750.338 101.628L751.121 137.912L751.706 138.026L750.728 101.553C750.729 101.527 750.731 101.501 750.736 101.476C750.744 101.419 750.76 101.363 750.782 101.311C750.806 101.251 750.845 101.199 750.897 101.161C750.929 101.14 750.965 101.127 751.002 101.121C751.04 101.114 751.078 101.116 751.115 101.125C751.195 101.14 751.268 101.18 751.324 101.239C751.367 101.287 751.399 101.345 751.415 101.407C751.429 101.458 751.436 101.51 751.435 101.562C751.435 101.585 751.435 101.606 751.435 101.629L752.635 138.201L753.108 138.288L751.891 101.868C751.893 101.842 751.895 101.816 751.9 101.79C751.909 101.734 751.925 101.679 751.947 101.626C751.97 101.566 752.01 101.514 752.061 101.476C752.093 101.455 752.128 101.441 752.165 101.435C752.203 101.429 752.24 101.431 752.277 101.44C752.357 101.455 752.43 101.495 752.486 101.554C752.53 101.602 752.561 101.66 752.577 101.723C752.591 101.774 752.598 101.826 752.598 101.878C752.598 101.901 752.598 101.922 752.598 101.945L754.037 138.448L754.483 138.529L752.892 101.202C752.703 101.122 752.511 101.052 752.315 100.991C751.843 100.843 751.358 100.736 750.867 100.674C750.24 100.591 749.604 100.606 748.982 100.72C748.287 100.847 747.636 101.148 747.091 101.595C747.061 102.845 747.03 105.268 747 108.301C746.971 111.335 746.942 114.977 746.915 118.677C746.887 122.377 746.865 126.13 746.844 129.387C746.823 132.644 746.809 135.4 746.798 137.105L747.303 137.197L747.39 102.378C747.391 102.352 747.394 102.326 747.399 102.301C747.408 102.244 747.424 102.189 747.447 102.137C747.47 102.077 747.509 102.025 747.561 101.987C747.593 101.966 747.629 101.952 747.667 101.946C747.705 101.94 747.744 101.942 747.781 101.952C747.861 101.966 747.934 102.006 747.989 102.065C748.032 102.113 748.063 102.171 748.079 102.234C748.093 102.284 748.099 102.336 748.099 102.388C748.1 102.409 748.101 102.431 748.1 102.452ZM781.932 143.617L780.952 116.223C780.951 116.203 780.951 116.182 780.952 116.162C780.958 116.117 780.97 116.073 780.986 116.031C781.004 115.983 781.035 115.941 781.076 115.91C781.102 115.894 781.13 115.883 781.161 115.878C781.191 115.873 781.222 115.874 781.252 115.881C781.31 115.889 781.365 115.913 781.41 115.952C781.454 115.99 781.486 116.041 781.502 116.098C781.513 116.138 781.52 116.178 781.521 116.22C781.522 116.237 781.522 116.255 781.521 116.273L782.663 143.747L783.131 143.834L781.855 115.94C781.858 115.874 781.872 115.809 781.896 115.748C781.914 115.702 781.945 115.663 781.986 115.634C782.011 115.618 782.04 115.607 782.07 115.602C782.099 115.597 782.13 115.598 782.159 115.606C782.218 115.613 782.273 115.637 782.318 115.675C782.363 115.714 782.395 115.764 782.411 115.821C782.424 115.86 782.431 115.901 782.432 115.942C782.433 115.96 782.433 115.978 782.432 115.996L783.874 143.98L784.347 144.067L782.739 115.929C782.738 115.908 782.738 115.888 782.739 115.868C782.745 115.824 782.756 115.78 782.774 115.739C782.793 115.693 782.824 115.654 782.865 115.625C782.891 115.608 782.92 115.597 782.951 115.591C782.981 115.586 783.013 115.587 783.043 115.594C783.101 115.603 783.156 115.627 783.2 115.666C783.244 115.704 783.276 115.754 783.293 115.81C783.305 115.849 783.312 115.89 783.313 115.931C783.314 115.948 783.314 115.966 783.313 115.983L785.093 144.207L785.479 144.281L783.696 116.175C783.695 116.155 783.695 116.134 783.696 116.114C783.702 116.069 783.713 116.025 783.73 115.983C783.749 115.935 783.78 115.893 783.821 115.863C783.847 115.846 783.876 115.835 783.907 115.83C783.937 115.825 783.968 115.826 783.998 115.833C784.056 115.842 784.11 115.867 784.154 115.905C784.198 115.944 784.229 115.994 784.245 116.05C784.257 116.089 784.263 116.13 784.264 116.171C784.265 116.188 784.265 116.206 784.264 116.223L786.235 144.413L786.599 144.484L784.485 115.639C784.485 115.639 784.312 115.567 784.028 115.484C783.655 115.376 783.273 115.3 782.886 115.257C782.393 115.196 781.892 115.209 781.402 115.294C780.861 115.39 780.352 115.615 779.918 115.95L780.2 119.841L780.086 116.629C780.085 116.608 780.085 116.588 780.086 116.567C780.092 116.523 780.103 116.479 780.12 116.437C780.139 116.389 780.171 116.347 780.212 116.316C780.237 116.3 780.266 116.288 780.296 116.283C780.326 116.277 780.357 116.278 780.386 116.284C780.451 116.295 780.511 116.324 780.558 116.37C780.594 116.407 780.621 116.452 780.636 116.501C780.649 116.541 780.656 116.582 780.658 116.623C780.659 116.641 780.659 116.659 780.658 116.677L781.208 133.684L781.937 143.622L781.932 143.617ZM800.634 147.084L800.962 147.145L797.498 121.777C797.498 121.777 797.377 121.73 797.172 121.671C796.9 121.593 796.623 121.532 796.342 121.49C795.973 121.433 795.598 121.417 795.225 121.44C794.816 121.464 794.414 121.56 794.039 121.725L795.853 137.172L794.369 122.299C794.368 122.28 794.368 122.262 794.369 122.244C794.372 122.205 794.38 122.167 794.393 122.13C794.407 122.088 794.433 122.051 794.468 122.023C794.491 122.009 794.516 121.999 794.543 121.994C794.57 121.99 794.597 121.991 794.623 121.997C794.676 122.006 794.726 122.029 794.767 122.063C794.809 122.097 794.84 122.142 794.858 122.192C794.871 122.226 794.88 122.262 794.883 122.299C794.885 122.314 794.885 122.33 794.883 122.345L797.416 146.49L797.836 146.57L795.167 122.047C795.165 122.029 795.165 122.011 795.167 121.993C795.169 121.954 795.177 121.916 795.189 121.879C795.203 121.837 795.229 121.8 795.264 121.773C795.286 121.759 795.312 121.749 795.339 121.744C795.365 121.74 795.393 121.741 795.419 121.747C795.478 121.756 795.532 121.782 795.576 121.822C795.61 121.854 795.637 121.893 795.654 121.936C795.668 121.973 795.676 122.011 795.679 122.05C795.68 122.066 795.68 122.081 795.679 122.097L798.507 146.697L798.929 146.777L795.949 122.037C795.947 121.979 795.956 121.922 795.975 121.867C795.989 121.824 796.016 121.787 796.051 121.76C796.074 121.745 796.1 121.735 796.126 121.73C796.153 121.726 796.18 121.726 796.206 121.733C796.265 121.742 796.319 121.769 796.362 121.81C796.395 121.842 796.421 121.881 796.438 121.924C796.452 121.96 796.46 121.998 796.463 122.037C796.465 122.053 796.465 122.069 796.463 122.085L799.61 146.895L799.959 146.96L796.817 122.252C796.816 122.234 796.816 122.216 796.817 122.197C796.82 122.159 796.827 122.12 796.84 122.084C796.853 122.041 796.879 122.004 796.914 121.978C796.937 121.964 796.963 121.954 796.989 121.95C797.016 121.946 797.044 121.947 797.07 121.954C797.128 121.963 797.182 121.989 797.226 122.029C797.26 122.061 797.286 122.1 797.302 122.143C797.315 122.177 797.324 122.213 797.327 122.25C797.329 122.265 797.329 122.281 797.327 122.296L800.634 147.084ZM755.922 105.629L756.411 138.884L756.905 138.977L756.301 105.089C756.301 105.064 756.301 105.039 756.308 105.014C756.316 104.959 756.331 104.906 756.351 104.855C756.375 104.797 756.414 104.746 756.465 104.709C756.497 104.69 756.532 104.677 756.569 104.671C756.606 104.665 756.644 104.666 756.68 104.675C756.75 104.685 756.816 104.716 756.869 104.763C756.922 104.81 756.96 104.872 756.978 104.94C756.992 104.988 756.999 105.038 757 105.088C757.001 105.11 757.001 105.131 757 105.153L757.799 139.14L758.375 139.244L757.417 104.745C757.418 104.719 757.421 104.694 757.425 104.67C757.433 104.615 757.449 104.561 757.47 104.511C757.494 104.452 757.533 104.402 757.584 104.365C757.615 104.345 757.65 104.331 757.687 104.325C757.724 104.319 757.761 104.321 757.798 104.33C757.868 104.339 757.934 104.369 757.987 104.416C758.04 104.462 758.078 104.523 758.097 104.591C758.111 104.638 758.118 104.687 758.119 104.737C758.121 104.758 758.121 104.779 758.119 104.8L759.276 139.411L759.854 139.515L758.493 104.722C758.494 104.697 758.496 104.673 758.501 104.648C758.509 104.594 758.524 104.541 758.545 104.49C758.569 104.432 758.609 104.381 758.66 104.345C758.691 104.324 758.727 104.311 758.764 104.305C758.802 104.298 758.84 104.3 758.876 104.308C758.953 104.321 759.024 104.357 759.079 104.412C759.121 104.457 759.152 104.513 759.169 104.573C759.182 104.621 759.189 104.671 759.19 104.721C759.192 104.742 759.192 104.764 759.19 104.786L760.761 139.682L761.226 139.768L759.637 105.021C759.638 104.996 759.64 104.971 759.645 104.946C759.653 104.891 759.668 104.838 759.689 104.787C759.713 104.728 759.752 104.678 759.803 104.641C759.834 104.621 759.869 104.608 759.905 104.601C759.941 104.595 759.979 104.596 760.015 104.605C760.085 104.615 760.15 104.646 760.203 104.692C760.256 104.739 760.294 104.801 760.313 104.869C760.326 104.916 760.333 104.966 760.334 105.015C760.335 105.036 760.335 105.058 760.334 105.079L762.091 139.006V139.929L762.573 140.017L762.565 139.823L762.289 108.828C762.29 108.804 762.292 108.78 762.297 108.756C762.305 108.704 762.32 108.652 762.341 108.604C762.365 108.547 762.405 108.499 762.455 108.464C762.485 108.445 762.519 108.432 762.554 108.426C762.589 108.42 762.625 108.421 762.66 108.43C762.727 108.438 762.79 108.466 762.841 108.511C762.892 108.555 762.928 108.614 762.944 108.68C762.957 108.726 762.963 108.774 762.963 108.822C762.965 108.843 762.965 108.864 762.963 108.885L763.42 140.181L763.892 140.271L763.331 108.367C763.332 108.343 763.335 108.319 763.339 108.296C763.347 108.243 763.362 108.192 763.382 108.143C763.406 108.087 763.446 108.038 763.497 108.004C763.527 107.984 763.561 107.971 763.596 107.965C763.632 107.959 763.668 107.96 763.703 107.968C763.771 107.978 763.834 108.008 763.885 108.053C763.935 108.098 763.972 108.157 763.99 108.223C764.003 108.269 764.01 108.317 764.011 108.365C764.013 108.386 764.013 108.407 764.011 108.428L764.753 140.431L765.307 140.531L764.411 108.04C764.412 108.016 764.415 107.992 764.419 107.968C764.427 107.916 764.442 107.864 764.462 107.815C764.486 107.758 764.526 107.71 764.576 107.675C764.607 107.656 764.641 107.643 764.677 107.637C764.713 107.632 764.749 107.633 764.784 107.642C764.859 107.654 764.927 107.689 764.98 107.742C765.022 107.785 765.052 107.838 765.069 107.896C765.082 107.941 765.089 107.989 765.09 108.037C765.091 108.057 765.091 108.077 765.09 108.098L766.175 140.69L766.723 140.791L765.453 108.018C765.454 107.995 765.457 107.971 765.46 107.948C765.468 107.896 765.482 107.845 765.502 107.797C765.526 107.741 765.566 107.693 765.616 107.658C765.647 107.639 765.681 107.625 765.717 107.619C765.753 107.613 765.79 107.615 765.825 107.623C765.899 107.634 765.968 107.668 766.022 107.721C766.063 107.764 766.093 107.817 766.108 107.875C766.122 107.922 766.129 107.97 766.129 108.018C766.13 108.039 766.13 108.06 766.129 108.081L767.602 140.953L768.049 141.037L766.565 108.308C766.565 108.285 766.567 108.261 766.572 108.237C766.58 108.184 766.594 108.133 766.614 108.084C766.638 108.027 766.677 107.979 766.728 107.944C766.759 107.925 766.793 107.912 766.828 107.907C766.864 107.901 766.9 107.902 766.935 107.91C767.01 107.922 767.079 107.957 767.132 108.009C767.174 108.053 767.204 108.105 767.219 108.163C767.232 108.209 767.239 108.256 767.24 108.304C767.241 108.324 767.241 108.345 767.24 108.365L768.434 131.611C768.434 132.562 768.444 133.49 768.449 134.384C768.453 135.277 768.458 136.136 768.462 136.945C768.467 137.754 768.47 138.516 768.474 139.218C768.477 139.921 768.481 140.555 768.484 141.119L769.351 141.28L768.857 132.266L768.684 111.692C768.684 111.669 768.686 111.647 768.691 111.624C768.699 111.574 768.712 111.526 768.732 111.48C768.754 111.426 768.79 111.38 768.837 111.345C768.866 111.327 768.898 111.314 768.932 111.308C768.966 111.302 769.001 111.303 769.034 111.31C769.105 111.32 769.171 111.353 769.222 111.403C769.261 111.445 769.29 111.496 769.305 111.551C769.318 111.596 769.324 111.641 769.324 111.688C769.326 111.708 769.326 111.728 769.324 111.748L769.741 141.356L770.198 141.438L769.677 111.25C769.677 111.227 769.677 111.204 769.684 111.182C769.691 111.132 769.704 111.084 769.724 111.037C769.745 110.985 769.78 110.939 769.826 110.906C769.854 110.887 769.885 110.875 769.919 110.87C769.952 110.864 769.986 110.866 770.018 110.874C770.091 110.885 770.158 110.918 770.21 110.969C770.25 111.01 770.279 111.061 770.295 111.116C770.307 111.16 770.314 111.205 770.314 111.251C770.315 111.271 770.315 111.29 770.314 111.31L771.012 141.591L771.534 141.687L770.699 110.936C770.7 110.914 770.702 110.891 770.706 110.869C770.713 110.82 770.726 110.771 770.746 110.725C770.766 110.672 770.802 110.626 770.848 110.593C770.877 110.574 770.91 110.562 770.944 110.557C770.978 110.551 771.012 110.553 771.046 110.561C771.11 110.569 771.171 110.596 771.22 110.638C771.269 110.681 771.303 110.737 771.32 110.8C771.332 110.844 771.339 110.889 771.339 110.935C771.34 110.955 771.34 110.975 771.339 110.994L772.356 141.838L772.878 141.934L771.684 110.919C771.685 110.896 771.687 110.874 771.691 110.851C771.699 110.801 771.712 110.753 771.732 110.707C771.753 110.653 771.789 110.607 771.836 110.572C771.865 110.554 771.897 110.541 771.93 110.535C771.964 110.529 771.999 110.53 772.032 110.537C772.103 110.549 772.169 110.583 772.22 110.634C772.26 110.676 772.289 110.726 772.305 110.782C772.317 110.826 772.324 110.871 772.326 110.917C772.327 110.937 772.327 110.956 772.326 110.976L773.708 142.089L774.134 142.17L772.735 111.195C772.735 111.173 772.735 111.15 772.742 111.127C772.749 111.077 772.763 111.028 772.782 110.982C772.803 110.928 772.839 110.882 772.885 110.849C772.913 110.831 772.945 110.819 772.979 110.813C773.012 110.808 773.046 110.81 773.079 110.818C773.143 110.826 773.204 110.853 773.253 110.895C773.302 110.938 773.337 110.994 773.353 111.057C773.366 111.1 773.372 111.145 773.372 111.191C773.374 111.211 773.374 111.23 773.372 111.25L774.964 142.32L775.363 142.396L773.569 110.59C773.398 110.521 773.225 110.462 773.048 110.411C772.623 110.285 772.187 110.197 771.746 110.149C771.182 110.082 770.611 110.102 770.053 110.209C769.431 110.329 768.848 110.603 768.36 111.004C768.36 111.498 768.349 112.199 768.347 113.064C768.345 113.929 768.347 114.957 768.347 116.104C768.347 117.251 768.347 118.516 768.353 119.855C768.359 121.194 768.361 122.607 768.367 124.049L767.467 107.681C767.288 107.609 767.105 107.547 766.919 107.494C766.471 107.363 766.013 107.27 765.549 107.219C764.957 107.15 764.358 107.171 763.773 107.283C763.122 107.408 762.514 107.692 762.002 108.112C761.992 108.873 761.986 110.106 761.985 111.661C761.984 113.216 761.985 115.094 761.985 117.147C761.985 119.2 761.996 121.426 762.006 123.679C762.015 125.931 762.023 128.209 762.032 130.367L760.601 104.378C760.414 104.302 760.224 104.237 760.031 104.183C759.566 104.045 759.09 103.949 758.608 103.896C757.993 103.823 757.37 103.845 756.761 103.962C756.084 104.091 755.45 104.388 754.917 104.825C754.903 106.012 754.899 108.296 754.904 111.16C754.908 114.025 754.918 117.465 754.932 120.971C754.946 124.476 754.963 128.043 754.979 131.158C754.995 134.272 755.009 136.933 755.018 138.628L755.512 138.72L755.22 105.568C755.221 105.543 755.224 105.518 755.228 105.494C755.236 105.439 755.252 105.386 755.274 105.336C755.297 105.278 755.337 105.227 755.388 105.19C755.419 105.17 755.454 105.156 755.491 105.15C755.528 105.143 755.566 105.144 755.602 105.153C755.68 105.165 755.751 105.202 755.807 105.256C755.849 105.301 755.88 105.356 755.897 105.416C755.91 105.465 755.918 105.514 755.919 105.564C755.921 105.586 755.922 105.607 755.922 105.629Z" fill="#1B023F"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M1426.43 100.596H1440V184.005L1440 184.005V185L0.00390623 185L0 185V100.658H13.5806L13.6063 99.9725L13.2013 99.8635C12.9869 99.8082 12.768 99.7717 12.5473 99.7545C12.2093 99.7545 11.8603 99.5485 11.9243 99.3945C11.9463 99.3186 11.8603 99.2515 11.6953 99.2435C11.6075 99.2425 11.521 99.2224 11.4417 99.1847C11.3624 99.1469 11.2924 99.0924 11.2362 99.0249C11.1801 98.9574 11.1393 98.8784 11.1167 98.7936C11.0941 98.7088 11.0903 98.62 11.1053 98.5336C11.1158 98.445 11.1086 98.3552 11.0842 98.2694C11.0598 98.1836 11.0187 98.1034 10.9633 98.0336C10.8737 97.9109 10.8228 97.7641 10.8173 97.6123C10.8118 97.4604 10.8518 97.3104 10.9323 97.1815C11.0073 97.0415 11.0073 96.9745 10.9323 96.9745C10.7783 96.9745 10.7893 96.5825 10.9323 96.4825C11.0073 96.4515 11.0293 96.2426 11.0073 96.0246C10.9779 95.8027 11.0079 95.577 11.0943 95.3705C11.1769 95.1636 11.2324 94.9468 11.2593 94.7255C11.2653 94.556 11.3062 94.3896 11.3793 94.2365C11.5143 93.7774 11.5181 93.2897 11.3903 92.8285C11.3113 92.8105 11.3673 92.6865 11.5213 92.5105C11.6412 92.3968 11.7306 92.2548 11.7813 92.0975C11.7813 92.0106 11.8173 91.9435 11.8593 91.9435C11.9013 91.9435 11.9573 91.7025 11.9683 91.4095C11.9733 91.153 12.0174 90.8987 12.0993 90.6555C12.13 90.6053 12.1488 90.5488 12.1541 90.4902C12.1595 90.4316 12.1514 90.3725 12.1303 90.3176C12.0227 89.7482 12.0878 89.1596 12.3173 88.6275C12.4903 88.3876 12.5013 88.2355 12.4373 87.5355C12.3573 87.1699 12.3794 86.7894 12.5013 86.4355C12.6074 86.1346 12.6483 85.8145 12.6213 85.4965C12.6103 85.1355 12.6333 84.3955 12.6663 83.8705C12.6993 83.3455 12.7633 82.3645 12.8083 81.7085C12.8092 81.2824 12.8599 80.8579 12.9593 80.4435C13.047 80.0317 13.077 79.6096 13.0483 79.1895C13.0424 78.598 13.0826 78.0069 13.1683 77.4215C13.2324 77.0138 13.2689 76.6022 13.2773 76.1895C13.2788 75.8074 13.319 75.4265 13.3973 75.0525C13.4773 74.5577 13.5314 74.059 13.5593 73.5585C13.6373 72.0526 13.7123 71.4855 13.8663 71.3125C13.9651 71.1737 14.0388 71.0187 14.0843 70.8545C14.1813 70.4495 14.5083 70.4605 14.5953 70.8855C14.6293 71.0615 14.7263 71.2035 14.8133 71.2035C15.0333 71.2035 15.1093 71.4795 15.1623 72.3795C15.1885 72.7754 15.24 73.1692 15.3163 73.5585C15.3741 73.7769 15.4076 74.0009 15.4163 74.2265C15.4163 74.3885 15.4633 74.5195 15.5163 74.5195C15.6473 74.5195 15.7253 75.1726 15.6253 75.4465C15.5999 75.5355 15.5927 75.6286 15.6042 75.7204C15.6157 75.8121 15.6457 75.9007 15.6923 75.9805C15.7673 76.1455 15.8123 76.3215 15.7563 76.3635C15.7479 76.8084 15.8155 77.2514 15.9563 77.6735C16.0315 78.0263 16.0819 78.3838 16.1073 78.7435C16.1853 79.4195 16.2923 79.8665 16.3923 79.8665C16.4363 79.8665 16.4483 79.9636 16.4143 80.0845C16.3803 80.2056 16.4143 80.2915 16.4893 80.2915C16.5873 80.2915 16.5873 80.3345 16.5123 80.4345C16.3923 80.5885 16.4673 81.1555 16.6213 81.1555C16.6743 81.1555 16.6743 81.2195 16.6213 81.3315C16.5853 81.3889 16.5672 81.4556 16.5691 81.5232C16.5711 81.5909 16.5931 81.6564 16.6323 81.7115C16.7293 81.8695 16.7183 81.9366 16.5983 82.0116C16.4783 82.0866 16.4653 82.1405 16.5653 82.2405C16.6543 82.3155 16.6743 82.5295 16.6323 82.8295C16.5873 83.1675 16.6093 83.2985 16.7073 83.2985C16.8053 83.2985 16.8273 83.4495 16.7853 83.9075C16.7478 84.2637 16.7545 84.6231 16.8053 84.9776C16.8503 85.2176 16.8503 85.4465 16.8053 85.4575C16.7799 85.8229 16.8634 86.1876 17.0453 86.5055C17.1132 86.5981 17.1547 86.7073 17.1653 86.8215C17.2019 86.9749 17.2858 87.1127 17.4053 87.2155C17.6013 87.3575 17.6013 87.3685 17.3723 87.5755C17.0873 87.8395 17.0783 88.0005 17.1873 89.5395C17.2513 90.4665 17.3703 90.8915 17.5703 90.8915C17.6213 90.8915 17.5793 90.9825 17.4703 91.0915C17.2943 91.2645 17.2613 91.4296 17.2833 92.0415C17.2844 92.3399 17.3247 92.6367 17.4033 92.9245C17.4828 93.1749 17.5232 93.4359 17.5233 93.6985C17.5111 93.985 17.5805 94.269 17.7233 94.5175C17.8332 94.7498 17.8902 95.0036 17.8902 95.2605C17.8902 95.5175 17.8332 95.7713 17.7233 96.0035C17.6033 96.2375 17.5833 96.3956 17.6703 96.5376C17.7694 96.9617 17.7107 97.4074 17.5053 97.7915C17.393 98.01 17.3058 98.2405 17.2453 98.4785C17.1033 99.0455 16.8523 99.4505 16.6453 99.4505C16.5673 99.4505 16.4913 99.4835 16.4913 99.5255C16.4913 99.7235 15.8573 100.04 15.3793 100.082L14.8433 100.138L14.8492 100.658H21.661C21.662 100.536 21.6594 100.414 21.6533 100.292C21.6303 99.9426 21.5973 99.8975 21.2703 99.8335C20.9421 99.7197 20.6506 99.5199 20.426 99.2551C20.2014 98.9902 20.0519 98.6698 19.9933 98.3275C19.9707 98.1078 19.9112 97.8934 19.8173 97.6935C19.7193 97.5845 19.7083 97.3775 19.7083 96.6125C19.7083 96.4925 19.6783 96.1015 19.6443 95.7295C19.5883 95.2825 19.6113 95.0115 19.6973 94.9115C19.8045 94.6679 19.8571 94.4037 19.8513 94.1375C19.8584 93.9285 19.8808 93.7203 19.9183 93.5145C19.9898 93.0262 19.9861 92.5298 19.9073 92.0425C19.8743 91.9861 19.8569 91.9219 19.8569 91.8566C19.8569 91.7912 19.8743 91.727 19.9073 91.6705C20.0074 91.2149 20.0653 90.7509 20.0803 90.2845L20.0828 90.2414C20.1474 89.1563 20.1524 89.0723 19.9373 88.8985C19.7193 88.7225 19.7193 88.7116 19.9063 88.5806C20.2059 88.1064 20.3432 87.5476 20.2972 86.9885C20.2837 86.0459 20.3506 85.1038 20.4973 84.1725C20.5046 84.1604 20.5092 84.1468 20.5109 84.1328C20.5126 84.1187 20.5113 84.1044 20.507 84.0909C20.5028 84.0774 20.4956 84.0649 20.4862 84.0543C20.4768 84.0438 20.4652 84.0353 20.4523 84.0295C20.3763 83.9965 20.3763 83.8096 20.4633 83.4296C20.5235 83.1943 20.5414 82.9501 20.5162 82.7085C20.5 82.6721 20.4957 82.6314 20.5037 82.5923C20.5118 82.5532 20.5319 82.5176 20.5613 82.4905C20.5756 82.4848 20.5886 82.4761 20.5993 82.465C20.6101 82.4538 20.6184 82.4406 20.6237 82.426C20.6289 82.4115 20.6311 82.396 20.63 82.3806C20.6289 82.3652 20.6245 82.3502 20.6172 82.3365C20.5924 82.1967 20.6069 82.0526 20.6592 81.9205C20.7311 81.6097 20.7713 81.2924 20.7792 80.9735C20.7791 80.7306 20.8083 80.4885 20.8663 80.2525C20.9188 80.1128 20.9488 79.9657 20.9553 79.8165C20.9673 79.6405 21.0082 79.3025 21.0422 79.0735C21.1057 78.7725 21.121 78.4633 21.0873 78.1575C21.1046 77.7686 21.1551 77.3819 21.2383 77.0015C21.3336 76.5264 21.3924 76.0447 21.4142 75.5605C21.4142 74.9175 21.5123 74.5015 21.6323 74.5795C21.6773 74.6095 21.7533 74.4895 21.7863 74.3165C21.8843 73.8885 22.0903 74.0005 22.2443 74.5565C22.4269 75.2811 22.5252 76.0244 22.5372 76.7715C22.5626 77.2408 22.6478 78.3953 22.7227 79.4093L22.7372 79.6066C22.8152 80.6636 22.8793 81.7445 22.8683 82.0065C22.8469 82.2268 22.8696 82.4492 22.9352 82.6605C23.0911 83.9826 23.158 85.3136 23.1352 86.6445C23.0929 87.0478 23.13 87.4555 23.2443 87.8445C23.3423 87.9535 23.3533 88.2475 23.3113 88.8145C23.2488 89.16 23.2708 89.5154 23.3752 89.8505C23.4774 90.1864 23.5293 90.5355 23.5292 90.8866C23.4586 91.6267 23.5709 92.3729 23.8562 93.0595C23.9982 93.2995 24.0402 93.4615 23.9762 93.5285C23.9137 93.9362 23.9393 94.3526 24.0513 94.7495C24.4873 97.4115 24.4222 98.6135 23.8223 99.1915C23.4843 99.5075 22.7103 99.7365 22.7103 99.5185C22.7103 99.4655 22.6543 99.4545 22.5903 99.4965C22.4898 99.8753 22.4652 100.27 22.5178 100.658H27.363C27.4409 100.529 27.5458 100.418 27.6712 100.333C27.9002 100.182 27.9452 100.081 27.9452 99.6005C27.9452 99.0447 27.9452 99.0335 27.5403 98.9135C27.3132 98.856 27.1152 98.7168 26.9842 98.5225C26.9092 98.3795 26.8002 98.2595 26.7662 98.2595C26.6992 98.2595 26.6012 97.9545 26.3302 96.8065C26.1882 96.1975 26.1432 95.4765 26.2522 95.4765C26.2992 95.4765 26.2743 95.3115 26.1993 95.1275C26.0413 94.7446 26.0412 94.6475 26.2412 93.3815C26.3013 93.065 26.3201 92.742 26.2972 92.4205C26.2642 92.3335 26.2862 92.2665 26.3392 92.2665C26.4302 91.6259 26.4239 90.9752 26.3202 90.3365C26.2954 90.2248 26.3143 90.1077 26.3732 90.0095C26.4787 89.5924 26.5269 89.1627 26.5162 88.7325C26.5502 87.7685 26.5272 87.4685 26.3962 87.2685C26.3102 87.1405 26.2763 87.0285 26.3323 87.0285C26.4932 87.0285 26.5912 86.5925 26.4602 86.4615C26.2982 86.2885 26.3292 86.1535 26.5052 86.2325L26.5161 86.2374C26.6812 86.3122 26.6821 86.3126 26.7232 84.9675C26.7342 84.4225 26.7042 84.0285 26.6482 84.0285C26.5922 84.0285 26.5802 83.9755 26.6252 83.8975C26.7612 83.6905 26.7832 83.5285 26.8252 82.3165C26.8482 81.7045 26.8933 81.1035 26.9153 80.9835C26.928 80.9321 26.9276 80.8783 26.9139 80.827C26.9003 80.7758 26.8739 80.7288 26.8373 80.6905C26.7503 80.6345 26.7503 80.5925 26.8373 80.5255C26.9643 80.4495 27.0642 79.8705 27.1642 78.7255C27.1814 78.4521 27.2206 78.1334 27.2465 77.9232C27.2537 77.8644 27.2599 77.814 27.2643 77.7755C27.2794 77.6425 27.3019 77.2792 27.3267 76.8796L27.3512 76.4875C27.3762 75.9517 27.4303 75.4175 27.5132 74.8875C27.5692 74.5355 27.6252 74.1555 27.6252 74.0355C27.5805 73.3768 27.6728 72.7159 27.8962 72.0945C27.9902 71.9917 28.0481 71.8612 28.0612 71.7225C28.0612 71.6026 28.1142 71.5155 28.1812 71.5495C28.4402 71.6335 28.5942 72.4825 28.7032 74.4495C28.7592 75.5725 28.8353 76.9155 28.8683 77.4495C28.9013 77.9835 28.9342 78.7355 28.9432 79.1285C28.9522 79.5215 28.9962 79.8135 29.0522 79.7845C29.1082 79.7555 29.1192 79.8425 29.0632 79.9845C28.9762 80.2365 28.9762 80.2965 29.0632 81.0965C29.1192 81.5355 29.2062 83.6195 29.2922 86.4545C29.2902 87.083 29.338 87.7106 29.4352 88.3315C29.5128 88.7486 29.5494 89.1723 29.5442 89.5965C29.5552 90.1555 29.5782 90.7566 29.6002 90.9296C29.6372 91.2336 29.717 91.5309 29.8372 91.8125C29.895 92.1089 29.9101 92.4119 29.8822 92.7125C29.8534 92.9774 29.8831 93.2454 29.9692 93.4975C30.0025 93.5216 30.0264 93.5566 30.0366 93.5964C30.0469 93.6362 30.0428 93.6784 30.0252 93.7155C29.9995 93.9385 30.0174 94.1644 30.0782 94.3805C30.2799 95.1245 30.3141 95.9038 30.1782 96.6626C30.0672 96.6626 30.0672 96.6855 30.1672 96.7495C30.2542 96.7935 30.2652 96.8785 30.1982 96.9785C30.1263 97.1354 30.0892 97.306 30.0892 97.4785C30.0892 97.8915 30.0032 98.1545 29.8492 98.1545C29.7962 98.1545 29.6532 98.2775 29.5332 98.4285C29.4132 98.5795 29.2902 98.6795 29.2592 98.6465C29.2282 98.6135 29.1212 98.6356 29.0212 98.6886C28.8792 98.7686 28.8122 98.7555 28.7702 98.6685C28.7482 98.5905 28.7142 98.8865 28.7142 99.3115C28.7032 99.9235 28.7372 100.086 28.8572 100.086C28.9542 100.086 28.9992 100.142 28.9432 100.262C28.9284 100.31 28.9302 100.363 28.9483 100.41C28.9664 100.458 28.9998 100.498 29.0432 100.525C29.0985 100.549 29.1343 100.596 29.1532 100.658H33.4999L53.6598 118.12L53.7199 110.637L53.9829 107.379L53.854 106.079L53.4649 105.035C53.4649 105.035 53.854 104.923 53.854 104.572C53.8383 104.287 53.793 104.004 53.719 103.728C53.719 103.728 53.854 103.051 53.854 102.876C53.854 102.701 54.372 102.161 54.372 102.161C54.372 102.161 54.0719 101.861 54.2459 101.643C54.3775 101.333 54.4456 100.999 54.4459 100.662L56.398 100.654V102.024H56.9869V103.267H61.0969L61.4229 103.785H61.8139C61.8484 103.59 61.8722 103.394 61.8849 103.196V102.152C62.0798 102.144 62.2738 102.123 62.4659 102.089C62.6799 102.048 62.9289 102.024 62.9289 102.024V101.243H64.2289V102.024H68.9909V102.479H69.9629L70.1629 101.961C70.39 101.789 70.6301 101.634 70.8809 101.498C71.0558 101.482 71.2319 101.482 71.4069 101.498C71.4069 101.498 71.1909 102.613 71.4069 102.613H76.0328V104.374H77.2768V104.7H77.5398L77.4748 105.089L76.7599 105.289V123.058H80.4789V108.809L80.0788 108.42L79.8868 108.031L80.9938 107.377L81.2568 106.398C81.2568 106.398 81.3569 106.072 81.5829 106.072H88.2328V107.772H89.6738L88.8848 108.553V122.974H91.1698V123.058H98.4507L111.976 126.584C111.993 126.241 112.072 125.902 112.209 125.583C112.382 125.343 112.393 125.191 112.329 124.491C112.249 124.125 112.272 123.744 112.393 123.391C112.5 123.09 112.54 122.77 112.513 122.452C112.502 122.091 112.525 121.351 112.558 120.826C112.591 120.301 112.655 119.32 112.7 118.664C112.701 118.238 112.752 117.813 112.851 117.399C112.939 116.987 112.969 116.565 112.94 116.145C112.935 115.553 112.975 114.962 113.06 114.377C113.125 113.969 113.161 113.557 113.169 113.145C113.171 112.763 113.211 112.382 113.289 112.008C113.369 111.513 113.424 111.014 113.451 110.514C113.529 109.008 113.604 108.441 113.758 108.268C113.857 108.129 113.931 107.974 113.976 107.81C114.073 107.405 114.4 107.416 114.487 107.841C114.521 108.017 114.618 108.159 114.705 108.159C114.925 108.159 115.001 108.435 115.054 109.335C115.081 109.73 115.132 110.124 115.208 110.514C115.266 110.732 115.3 110.956 115.308 111.182C115.308 111.344 115.355 111.475 115.408 111.475C115.539 111.475 115.617 112.128 115.517 112.402C115.492 112.491 115.485 112.584 115.496 112.675C115.508 112.767 115.538 112.856 115.584 112.936C115.659 113.101 115.704 113.277 115.648 113.319C115.64 113.763 115.708 114.207 115.848 114.629C115.924 114.981 115.974 115.339 115.999 115.699C116.077 116.375 116.184 116.822 116.284 116.822C116.328 116.822 116.34 116.919 116.306 117.04C116.272 117.161 116.306 117.247 116.381 117.247C116.479 117.247 116.479 117.29 116.404 117.39C116.284 117.544 116.359 118.111 116.513 118.111C116.566 118.111 116.566 118.175 116.513 118.287C116.478 118.344 116.459 118.411 116.461 118.478C116.463 118.546 116.485 118.611 116.524 118.667C116.621 118.825 116.61 118.892 116.49 118.967C116.37 119.042 116.357 119.096 116.457 119.196C116.546 119.271 116.566 119.485 116.524 119.785C116.479 120.123 116.501 120.254 116.599 120.254C116.697 120.254 116.719 120.405 116.677 120.863C116.64 121.219 116.647 121.578 116.697 121.933C116.742 122.173 116.742 122.402 116.697 122.413C116.672 122.778 116.756 123.143 116.937 123.461C117.005 123.553 117.047 123.662 117.057 123.777C117.094 123.93 117.178 124.068 117.297 124.171C117.493 124.313 117.493 124.324 117.264 124.531C116.979 124.795 116.97 124.956 117.079 126.495C117.143 127.422 117.262 127.847 117.462 127.847C117.506 127.847 117.482 127.913 117.406 128L119.8 128.624C119.9 128.169 119.958 127.706 119.972 127.24L119.975 127.196C120.04 126.111 120.045 126.027 119.829 125.854C119.611 125.678 119.611 125.667 119.798 125.536C120.098 125.061 120.235 124.503 120.189 123.944C120.176 123.001 120.243 122.059 120.389 121.128C120.397 121.115 120.401 121.102 120.403 121.088C120.405 121.074 120.403 121.06 120.399 121.046C120.395 121.032 120.388 121.02 120.378 121.009C120.369 120.999 120.357 120.99 120.344 120.985C120.268 120.952 120.268 120.765 120.355 120.385C120.416 120.149 120.434 119.905 120.408 119.664C120.392 119.627 120.388 119.586 120.396 119.547C120.404 119.508 120.424 119.473 120.453 119.446C120.468 119.44 120.481 119.431 120.491 119.42C120.502 119.409 120.511 119.396 120.516 119.381C120.519 119.372 120.521 119.363 120.522 119.354L120.522 119.348C120.523 119.344 120.522 119.34 120.522 119.336C120.521 119.32 120.517 119.305 120.509 119.292C120.485 119.152 120.499 119.008 120.551 118.876C120.623 118.565 120.663 118.248 120.671 117.929C120.671 117.686 120.701 117.444 120.758 117.208C120.811 117.068 120.841 116.921 120.847 116.772C120.859 116.596 120.9 116.258 120.934 116.029C120.998 115.728 121.013 115.418 120.979 115.113C120.997 114.724 121.047 114.337 121.13 113.957C121.226 113.481 121.285 113 121.306 112.516C121.306 111.873 121.404 111.457 121.524 111.535C121.569 111.565 121.645 111.445 121.678 111.272C121.776 110.844 121.982 110.956 122.136 111.512C122.319 112.236 122.417 112.979 122.429 113.727C122.455 114.196 122.54 115.352 122.615 116.366L122.629 116.562C122.707 117.619 122.771 118.7 122.76 118.962C122.739 119.182 122.762 119.404 122.827 119.616C122.983 120.938 123.05 122.269 123.027 123.6C122.985 124.003 123.022 124.411 123.136 124.8C123.234 124.909 123.245 125.203 123.203 125.77C123.141 126.115 123.163 126.47 123.267 126.806C123.37 127.141 123.422 127.491 123.421 127.842C123.358 128.508 123.443 129.179 123.668 129.808L126.099 130.556L126.133 130.337C126.194 130.02 126.212 129.697 126.189 129.376C126.156 129.289 126.178 129.222 126.231 129.222C126.322 128.581 126.316 127.93 126.212 127.292C126.188 127.18 126.206 127.063 126.265 126.965C126.371 126.547 126.419 126.118 126.408 125.688C126.442 124.724 126.419 124.424 126.288 124.224C126.202 124.096 126.168 123.984 126.224 123.984C126.385 123.984 126.483 123.548 126.352 123.417C126.19 123.244 126.221 123.109 126.397 123.188L126.408 123.193C126.573 123.267 126.574 123.268 126.615 121.923C126.626 121.378 126.596 120.984 126.54 120.984C126.484 120.984 126.472 120.931 126.517 120.853C126.653 120.646 126.675 120.484 126.717 119.272C126.74 118.66 126.785 118.059 126.807 117.939C126.82 117.887 126.82 117.833 126.806 117.782C126.792 117.731 126.766 117.684 126.729 117.646C126.642 117.59 126.642 117.548 126.729 117.481C126.856 117.405 126.956 116.826 127.056 115.681C127.074 115.407 127.113 115.089 127.139 114.878C127.146 114.82 127.152 114.769 127.156 114.731C127.172 114.598 127.194 114.234 127.219 113.835L127.22 113.814C127.228 113.691 127.236 113.566 127.243 113.443C127.268 112.907 127.322 112.373 127.405 111.843C127.461 111.491 127.517 111.111 127.517 110.991C127.473 110.332 127.565 109.671 127.788 109.05C127.882 108.947 127.94 108.816 127.953 108.678C127.953 108.558 128.006 108.471 128.073 108.505C128.332 108.589 128.486 109.438 128.595 111.405C128.651 112.528 128.727 113.871 128.76 114.405C128.793 114.939 128.826 115.691 128.835 116.084C128.844 116.477 128.888 116.769 128.944 116.74C129 116.711 129.011 116.798 128.955 116.94C128.868 117.192 128.868 117.252 128.955 118.052C129.011 118.491 129.098 120.575 129.184 123.41C129.182 124.038 129.23 124.666 129.327 125.287C129.405 125.704 129.442 126.127 129.436 126.552C129.447 127.111 129.47 127.712 129.492 127.885C129.529 128.189 129.609 128.486 129.729 128.768C129.787 129.064 129.802 129.367 129.774 129.668C129.746 129.932 129.775 130.2 129.861 130.453C129.895 130.477 129.919 130.512 129.929 130.551C129.939 130.591 129.935 130.633 129.917 130.671C129.892 130.894 129.91 131.12 129.97 131.336C130.01 131.482 130.043 131.63 130.07 131.779L178.051 146.554L179.214 146.565V145.871H178.872V144.739L179.806 144.747V142.926L181.079 142.936V132.514L186.616 132.545V142.982L187.893 142.993V144.814L188.832 144.822V145.953H188.493V146.653L189.726 146.664V147.214L190.71 147.227V150.397L219.251 158.498L219.336 158.492C219.626 158.474 219.946 158.453 220.243 158.453C220.493 158.446 220.744 158.469 220.986 158.522C221.12 158.555 221.258 158.572 221.398 158.571C221.656 158.561 221.912 158.529 222.16 158.472C222.673 158.366 223.2 158.312 223.729 158.311C224.329 158.311 224.81 158.335 225.157 158.351L225.255 158.356C225.426 158.364 225.565 158.37 225.679 158.37C225.779 158.37 226.026 158.37 226.102 158.272C226.242 158.171 226.407 158.095 226.586 158.05C226.765 158.004 226.954 157.99 227.141 158.007C227.182 158.007 227.223 158.008 227.264 158.01L227.298 158.011L227.337 158.013C227.385 158.016 227.432 158.019 227.48 158.023C227.918 158.064 227.99 158.191 228.062 158.325C228.09 158.399 228.146 158.463 228.221 158.51C228.297 158.557 228.389 158.584 228.485 158.587C228.543 158.593 228.602 158.596 228.66 158.596C228.84 158.591 229.02 158.576 229.197 158.549C229.489 158.507 229.785 158.485 230.082 158.482C230.289 158.482 230.495 158.493 230.7 158.515C231.094 158.557 231.414 158.571 231.675 158.581C232.233 158.606 232.324 158.619 232.324 158.752C232.33 158.86 232.368 158.965 232.436 159.058C232.517 159.187 232.507 159.195 232.398 159.22C232.007 159.306 232.081 160.239 232.16 160.788C232.16 160.82 232.219 160.844 232.283 160.844H240.757C244.917 160.844 247.116 161.191 247.116 161.848C247.116 162.142 247.495 162.227 247.841 162.251C247.88 162.251 247.92 162.252 247.961 162.252C248.489 162.271 249.017 162.225 249.531 162.115C250.191 161.932 255.572 161.334 257.084 161.23C257.808 161.182 258.275 161.111 258.685 161.047C259.152 160.966 259.626 160.924 260.1 160.922C260.556 160.927 261.005 161.023 261.415 161.204C261.706 161.336 262.023 161.411 262.348 161.424C262.5 161.424 262.658 161.436 262.825 161.448L262.855 161.45L262.912 161.454C263.093 161.467 263.277 161.479 263.486 161.479C264.003 161.481 264.516 161.386 264.992 161.199C265.635 160.954 265.683 160.871 265.646 160.724C265.631 160.658 265.612 160.575 265.834 160.38C265.928 160.296 266.015 160.204 266.092 160.105C266.277 159.873 266.316 159.825 268.182 159.647L268.513 159.615V159.362H270.331V158.889H327.966V159.362H329.784V159.835H331.085V160.763L331.112 160.763L331.134 160.764C331.16 160.764 331.187 160.765 331.212 160.766C331.253 160.768 331.294 160.769 331.334 160.769H331.634C331.666 160.769 331.696 160.769 331.725 160.768L331.778 160.767C331.82 160.765 331.862 160.764 331.905 160.764H332.305C332.386 160.764 332.468 160.765 332.551 160.767L332.625 160.768L332.673 160.768L332.727 160.769C332.753 160.769 332.78 160.769 332.806 160.769C333.487 160.769 333.801 160.721 333.884 160.6C333.961 159.901 333.965 159.198 333.894 158.498C333.893 158.495 333.893 158.492 333.891 158.489C333.89 158.483 333.887 158.477 333.883 158.472C333.877 158.464 333.869 158.457 333.86 158.453C333.82 158.43 333.784 158.403 333.752 158.373H335.413C335.456 158.373 335.504 158.373 335.556 158.372C335.624 158.371 335.701 158.369 335.786 158.364C335.963 158.356 336.165 158.35 336.357 158.35C336.578 158.329 336.801 158.354 337.01 158.422C337.517 158.589 338.059 158.65 338.595 158.6C338.784 158.6 339.02 158.583 339.273 158.564L339.335 158.56C339.625 158.538 339.945 158.515 340.241 158.515C340.492 158.507 340.743 158.533 340.985 158.593C341.118 158.631 341.257 158.65 341.396 158.649C341.655 158.638 341.91 158.601 342.159 158.537C342.671 158.416 343.199 158.354 343.728 158.354C344.328 158.354 344.809 158.38 345.156 158.399L345.254 158.404C345.425 158.413 345.563 158.42 345.677 158.42C345.777 158.42 346.025 158.42 346.101 158.309C346.241 158.194 346.406 158.108 346.585 158.057C346.764 158.005 346.953 157.988 347.14 158.008C347.207 158.009 347.274 158.011 347.34 158.015C347.387 158.018 347.433 158.022 347.479 158.027C347.917 158.073 347.988 158.217 348.06 158.369C348.088 158.453 348.144 158.527 348.22 158.58C348.296 158.633 348.388 158.664 348.484 158.667C348.504 158.669 348.524 158.671 348.544 158.673L348.567 158.674C348.586 158.676 348.605 158.676 348.625 158.677L348.639 158.677L348.659 158.677C348.839 158.672 349.018 158.654 349.195 158.624C349.488 158.576 349.784 158.551 350.081 158.548C350.288 158.548 350.494 158.561 350.699 158.585C351.093 158.633 351.412 158.649 351.674 158.661C352.232 158.689 352.323 158.704 352.323 158.855C352.329 158.977 352.367 159.097 352.434 159.203C352.515 159.348 352.505 159.358 352.397 159.386C352.006 159.484 352.08 160.544 352.159 161.168C352.159 161.205 352.218 161.232 352.282 161.232H360.756C364.691 161.232 366.872 161.585 367.095 162.255C367.578 162.263 368.06 162.216 368.531 162.115C369.19 161.932 374.571 161.334 376.083 161.23C376.807 161.182 377.275 161.111 377.685 161.047C378.152 160.966 378.625 160.924 379.1 160.922C379.555 160.927 380.004 161.023 380.414 161.204C380.705 161.336 381.023 161.411 381.347 161.424C381.5 161.424 381.657 161.436 381.824 161.448L381.855 161.45C382.055 161.464 382.255 161.479 382.485 161.479C383.003 161.481 383.516 161.386 383.992 161.199C384.634 160.954 384.683 160.871 384.646 160.724C384.631 160.658 384.612 160.575 384.833 160.38C384.928 160.296 385.014 160.204 385.091 160.105C385.277 159.873 385.316 159.825 387.181 159.647L387.512 159.615V159.362H389.33V158.889H446.965V159.362H448.784V159.835H450.085V160.763L450.115 160.763L450.143 160.764C450.166 160.764 450.189 160.765 450.212 160.766C450.253 160.768 450.293 160.769 450.333 160.769H450.633C450.685 160.769 450.732 160.768 450.777 160.767C450.82 160.765 450.862 160.764 450.905 160.764H451.305C451.385 160.764 451.468 160.765 451.551 160.767L451.554 160.767C451.637 160.768 451.722 160.769 451.805 160.769C452.487 160.769 452.8 160.721 452.883 160.6C452.961 159.901 452.964 159.198 452.893 158.498C452.892 158.489 452.888 158.48 452.882 158.472C452.879 158.468 452.876 158.464 452.872 158.461L452.868 158.458L452.865 158.456L452.863 158.454L452.859 158.453C452.82 158.43 452.784 158.403 452.751 158.373H454.413C454.441 158.373 454.471 158.373 454.504 158.373C454.528 158.372 454.554 158.372 454.58 158.372C454.642 158.371 454.711 158.368 454.785 158.364C454.825 158.362 454.866 158.36 454.907 158.359C454.949 158.357 454.991 158.356 455.034 158.355C455.141 158.352 455.25 158.35 455.357 158.35C455.577 158.329 455.8 158.354 456.009 158.422C456.516 158.589 457.058 158.65 457.594 158.6C457.783 158.6 458.019 158.583 458.273 158.564L458.335 158.56C458.625 158.538 458.944 158.515 459.241 158.515C459.492 158.507 459.742 158.533 459.985 158.593C460.118 158.631 460.257 158.65 460.396 158.649C460.654 158.638 460.91 158.601 461.159 158.537C461.671 158.416 462.198 158.354 462.727 158.354C463.328 158.354 463.808 158.38 464.155 158.399L464.253 158.404C464.424 158.413 464.563 158.42 464.677 158.42C464.777 158.42 465.024 158.42 465.1 158.309C465.24 158.194 465.405 158.108 465.584 158.057C465.763 158.005 465.953 157.988 466.139 158.008C466.252 158.009 466.366 158.015 466.478 158.027C466.917 158.073 466.988 158.217 467.06 158.369C467.088 158.453 467.144 158.527 467.22 158.58C467.296 158.633 467.388 158.664 467.483 158.667C467.541 158.674 467.6 158.677 467.659 158.677C467.839 158.672 468.018 158.654 468.195 158.624C468.487 158.576 468.784 158.551 469.081 158.548C469.287 158.548 469.493 158.561 469.698 158.585C470.093 158.633 470.412 158.649 470.673 158.661C471.232 158.689 471.323 158.704 471.323 158.855C471.328 158.977 471.366 159.097 471.434 159.203C471.515 159.348 471.505 159.358 471.397 159.386C471.005 159.484 471.079 160.544 471.158 161.168C471.158 161.205 471.218 161.232 471.282 161.232H479.755C483.915 161.232 486.114 161.626 486.114 162.373C486.114 162.842 486.859 162.842 487.215 162.842C487.35 162.842 487.493 162.842 487.645 162.834C487.796 162.827 487.96 162.827 488.121 162.827H488.125C488.426 162.787 488.732 162.808 489.024 162.887C489.315 162.966 489.584 163.102 489.813 163.285C490.12 163.634 489.98 164.267 489.83 164.934C489.545 166.198 489.23 167.63 491.527 168.066C492.54 168.279 493.494 168.682 494.328 169.251C494.66 169.477 494.97 169.728 495.255 170H525.004L525.002 163.271L529.29 163.779L530.763 163.213L534.935 165.845H549.337L555.568 162.266C555.568 162.266 569.841 163.115 576.832 162.266C581.584 161.689 584.575 160.387 586.003 159.612V158.963C586.003 156.407 586.431 155.364 586.797 155.246C587.005 155.18 587.108 154.982 587.205 154.79C587.336 154.535 587.461 154.292 587.809 154.292C588.172 154.3 588.533 154.333 588.89 154.391C589.179 154.439 589.473 154.467 589.767 154.476C589.792 154.476 592.276 154.417 592.44 153.919C592.491 153.786 592.583 153.667 592.706 153.576C592.829 153.485 592.978 153.425 593.137 153.403C593.16 153.403 593.189 153.404 593.225 153.406C593.251 153.407 593.281 153.408 593.315 153.409C593.449 153.415 593.634 153.422 593.836 153.422C594.273 153.446 594.711 153.384 595.117 153.242C597.141 152.742 599.199 152.353 601.279 152.079C601.721 152.03 602.158 151.951 602.586 151.841C602.959 151.736 603.348 151.681 603.74 151.678C604.135 151.692 604.513 151.822 604.812 152.046C605.025 152.21 605.291 152.312 605.573 152.336C605.712 152.34 605.85 152.351 605.987 152.37C606.158 152.393 606.329 152.405 606.502 152.408C606.946 152.404 607.377 152.275 607.731 152.039C608.255 151.718 608.295 151.608 608.265 151.415C608.254 151.335 608.263 151.253 608.289 151.176C608.315 151.098 608.359 151.026 608.417 150.963C608.498 150.847 608.568 150.727 608.628 150.602C608.779 150.297 608.811 150.233 610.333 149.998L610.603 149.955V149.622H612.086V149H612.774L633.798 149.135H634.486V149.758H635.969V150.379H637.031V151.599C637.1 151.605 637.167 151.608 637.233 151.608C637.292 151.608 637.351 151.606 637.409 151.604L637.478 151.602C637.511 151.601 637.541 151.6 637.571 151.599C637.591 151.598 637.61 151.597 637.629 151.596L637.663 151.595L637.677 151.595L637.7 151.595C637.767 151.595 637.839 151.597 637.915 151.598L637.961 151.599L638.026 151.601C638.087 151.602 638.149 151.604 638.212 151.605C638.286 151.607 638.36 151.608 638.435 151.608C638.991 151.608 639.246 151.544 639.314 151.386V150.958L639.305 150.708L639.297 150.464C639.297 150.455 639.294 150.445 639.291 150.436C639.289 150.432 639.287 150.427 639.285 150.423C639.283 150.42 639.281 150.417 639.278 150.414L639.275 150.41C639.273 150.408 639.271 150.406 639.269 150.404C639.235 150.372 639.205 150.337 639.181 150.299L675 146L727.426 146.969L732.001 145H737L736.5 140.5L790.01 148.599L827.185 148.739H827.87V149.412H829.349V149.772L829.618 149.818C830.504 149.967 830.93 149.83 831.162 149.755C831.327 149.702 831.393 149.681 831.456 149.818C831.516 149.954 831.586 150.084 831.666 150.21C831.724 150.277 831.768 150.355 831.794 150.439C831.82 150.523 831.828 150.611 831.818 150.698C831.788 150.907 831.828 151.026 832.351 151.374C832.703 151.628 833.133 151.768 833.576 151.773C833.748 151.77 833.919 151.756 834.089 151.731C834.127 151.725 834.165 151.72 834.203 151.716C834.225 151.714 834.247 151.711 834.269 151.709C834.347 151.702 834.424 151.697 834.502 151.695C834.783 151.668 835.049 151.559 835.261 151.381C835.56 151.139 835.936 150.998 836.33 150.982C836.721 150.986 837.109 151.046 837.481 151.16C837.907 151.278 838.343 151.364 838.784 151.416C840.858 151.713 842.91 152.133 844.928 152.674C845.333 152.828 845.77 152.895 846.205 152.869C846.407 152.869 846.591 152.861 846.726 152.855L846.753 152.854L846.786 152.853L846.815 152.852L846.818 152.852L846.866 152.85L846.885 152.849L846.902 152.849C847.061 152.873 847.21 152.938 847.333 153.036C847.455 153.135 847.547 153.263 847.598 153.408C847.761 153.946 850.238 154.009 850.263 154.009C850.556 154 850.849 153.969 851.138 153.918C851.493 153.855 851.853 153.819 852.215 153.81C852.563 153.81 852.687 154.073 852.817 154.348L852.817 154.35C852.914 154.557 853.017 154.771 853.225 154.843C853.589 154.97 854.016 156.098 854.016 158.864V162.44C854.016 162.447 854.017 162.454 854.019 162.461L854.019 162.464L854.02 162.468C854.021 162.471 854.022 162.474 854.023 162.476L854.027 162.483L854.029 162.487L854.031 162.49H859.328V162.912H860.81V163.332H861.87V164.158C861.905 164.158 861.939 164.16 861.973 164.161C862.007 164.163 862.039 164.164 862.072 164.164H862.317C862.359 164.164 862.397 164.163 862.434 164.162L862.478 164.16C862.498 164.16 862.517 164.159 862.538 164.159H862.864C862.929 164.159 862.996 164.16 863.064 164.162C863.133 164.163 863.202 164.164 863.271 164.164C863.827 164.164 864.082 164.121 864.15 164.013C864.213 163.391 864.216 162.765 864.158 162.143L864.157 162.138L864.156 162.135C864.155 162.132 864.154 162.13 864.153 162.127L864.151 162.123L864.149 162.119C864.147 162.116 864.144 162.113 864.142 162.111C864.14 162.109 864.138 162.107 864.136 162.106L864.134 162.105L864.13 162.102C864.098 162.082 864.068 162.058 864.042 162.031H865.396C865.477 162.031 865.578 162.031 865.699 162.023C865.788 162.019 865.886 162.015 865.984 162.013C866.044 162.012 866.105 162.011 866.164 162.011C866.344 161.992 866.526 162.014 866.696 162.075C867.109 162.224 867.551 162.278 867.988 162.233C868.141 162.233 868.334 162.218 868.541 162.201L868.591 162.197C868.827 162.178 869.087 162.157 869.329 162.157C869.533 162.151 869.737 162.174 869.935 162.227C870.043 162.261 870.156 162.277 870.27 162.276C870.48 162.267 870.689 162.234 870.891 162.177C871.309 162.069 871.738 162.015 872.169 162.014C872.658 162.014 873.05 162.038 873.333 162.055L873.412 162.059C873.552 162.067 873.664 162.073 873.757 162.073C873.839 162.073 874.04 162.073 874.102 161.974C874.216 161.872 874.351 161.796 874.497 161.75C874.643 161.703 874.797 161.689 874.949 161.707C875.041 161.707 875.133 161.713 875.225 161.723C875.582 161.764 875.64 161.892 875.699 162.028C875.721 162.102 875.767 162.168 875.829 162.215C875.891 162.263 875.966 162.29 876.044 162.293C876.091 162.299 876.139 162.302 876.186 162.302C876.333 162.297 876.479 162.281 876.623 162.254C876.862 162.212 877.103 162.19 877.345 162.187C877.513 162.187 877.681 162.198 877.848 162.22C878.169 162.263 878.43 162.277 878.642 162.287C879.097 162.312 879.171 162.325 879.171 162.46C879.176 162.569 879.207 162.675 879.262 162.77C879.328 162.899 879.32 162.908 879.232 162.933C878.913 163.02 878.973 163.964 879.038 164.519C879.038 164.551 879.086 164.576 879.138 164.576H886.041C889.43 164.576 891.221 164.927 891.221 165.591C891.221 166.009 891.829 166.008 892.118 166.008C892.228 166.008 892.345 166.008 892.469 166.002C892.592 165.995 892.725 165.995 892.856 165.995H892.859C893.104 165.96 893.354 165.978 893.592 166.049C893.829 166.119 894.049 166.24 894.235 166.403C894.485 166.714 894.371 167.277 894.249 167.871C894.111 168.537 894.62 168.499 895.446 168.437C896.016 168.395 896.736 168.342 897.5 168.5C897.875 168.586 899.212 167.984 900.624 167.349C902.322 166.585 904.129 165.772 904.5 166.049C905.111 167.161 908.734 165.69 911.559 164.544C913.361 163.812 914.838 163.213 915 163.5V170H924.271C924.676 169.549 925.147 169.146 925.674 168.801C926.508 168.255 927.462 167.868 928.475 167.664C930.773 167.245 930.457 165.87 930.172 164.657C930.022 164.016 929.882 163.409 930.189 163.074C930.418 162.898 930.687 162.767 930.978 162.691C931.27 162.616 931.577 162.596 931.877 162.634H931.881L932.018 162.634C932.054 162.634 932.09 162.634 932.125 162.635C932.204 162.636 932.282 162.637 932.357 162.641C932.438 162.645 932.517 162.646 932.594 162.647C932.66 162.648 932.724 162.648 932.787 162.648C933.143 162.648 933.888 162.648 933.888 162.198C933.888 161.481 936.087 161.103 940.247 161.103H948.72C948.785 161.103 948.843 161.076 948.843 161.041C948.922 160.442 948.997 159.425 948.605 159.331C948.497 159.303 948.487 159.295 948.568 159.155C948.636 159.053 948.674 158.938 948.679 158.82C948.679 158.675 948.77 158.661 949.329 158.634C949.59 158.623 949.91 158.608 950.304 158.562C950.509 158.538 950.715 158.526 950.921 158.526C951.218 158.529 951.515 158.553 951.807 158.599C951.984 158.628 952.164 158.645 952.344 158.65C952.387 158.65 952.43 158.648 952.473 158.645L952.499 158.642L952.519 158.64C952.614 158.637 952.707 158.608 952.782 158.557C952.858 158.505 952.914 158.435 952.942 158.354C953.014 158.208 953.085 158.07 953.524 158.025C953.584 158.02 953.645 158.015 953.706 158.012C953.758 158.01 953.81 158.008 953.863 158.008C954.049 157.989 954.239 158.005 954.418 158.054C954.597 158.104 954.762 158.187 954.902 158.296C954.978 158.404 955.225 158.404 955.325 158.404C955.46 158.404 955.629 158.394 955.847 158.383C956.194 158.365 956.675 158.339 957.275 158.339C957.804 158.34 958.331 158.399 958.843 158.515C959.092 158.577 959.348 158.613 959.606 158.623C959.745 158.624 959.884 158.605 960.017 158.569C960.26 158.512 960.51 158.487 960.761 158.494C961.058 158.494 961.377 158.517 961.667 158.537L961.729 158.542C961.983 158.559 962.219 158.576 962.407 158.576C962.944 158.624 963.486 158.566 963.993 158.405C964.202 158.34 964.425 158.316 964.645 158.336C964.838 158.336 965.04 158.342 965.217 158.349C965.302 158.354 965.38 158.356 965.45 158.357C965.5 158.358 965.547 158.358 965.589 158.358H967.251C967.219 158.387 967.182 158.413 967.143 158.434C967.134 158.439 967.126 158.445 967.12 158.453C967.118 158.455 967.116 158.458 967.115 158.461L967.113 158.465C967.111 158.469 967.109 158.474 967.109 158.478C967.038 159.15 967.041 159.825 967.119 160.496C967.202 160.612 967.515 160.659 968.197 160.659C968.239 160.659 968.282 160.658 968.325 160.658L968.569 160.654C968.612 160.654 968.655 160.653 968.697 160.653H969.097C969.141 160.653 969.182 160.655 969.225 160.656C969.261 160.657 969.299 160.658 969.339 160.659L969.369 160.659H969.669L969.69 160.659L969.706 160.658L969.73 160.658L969.79 160.656C969.832 160.654 969.874 160.652 969.917 160.652V159.762H971.218V159.308H973.037V158.853H1030.67V159.308H1032.49V159.551L1032.82 159.581C1034.69 159.752 1034.73 159.798 1034.91 160.021C1034.99 160.116 1035.07 160.204 1035.17 160.285C1035.39 160.472 1035.37 160.551 1035.36 160.615C1035.32 160.756 1035.37 160.836 1036.01 161.071C1036.49 161.25 1037 161.342 1037.52 161.34C1037.65 161.34 1037.77 161.335 1037.88 161.329L1037.97 161.324L1038.15 161.312L1038.18 161.31C1038.34 161.298 1038.5 161.287 1038.66 161.287C1038.98 161.274 1039.3 161.202 1039.59 161.076C1040 160.902 1040.45 160.81 1040.9 160.806C1041.38 160.807 1041.85 160.847 1042.32 160.925C1042.73 160.987 1043.19 161.054 1043.92 161.101C1045.05 161.176 1048.37 161.518 1050.23 161.758C1051 161.327 1053.04 161.103 1056.25 161.103H1064.72C1064.76 161.103 1064.8 161.092 1064.82 161.075C1064.83 161.066 1064.84 161.054 1064.84 161.041C1064.92 160.442 1065 159.425 1064.6 159.331C1064.5 159.303 1064.49 159.295 1064.57 159.155C1064.64 159.053 1064.67 158.938 1064.68 158.82C1064.68 158.675 1064.77 158.661 1065.33 158.634C1065.59 158.623 1065.91 158.608 1066.3 158.562C1066.51 158.538 1066.71 158.526 1066.92 158.526C1067.22 158.529 1067.51 158.553 1067.81 158.599C1067.98 158.628 1068.16 158.645 1068.34 158.65C1068.4 158.65 1068.46 158.647 1068.52 158.64C1068.61 158.637 1068.71 158.608 1068.78 158.557C1068.86 158.505 1068.91 158.435 1068.94 158.354C1069.01 158.208 1069.08 158.07 1069.52 158.025C1069.6 158.018 1069.68 158.013 1069.75 158.01L1069.78 158.009L1069.81 158.009L1069.86 158.008C1070.05 157.989 1070.24 158.005 1070.42 158.054C1070.6 158.104 1070.76 158.187 1070.9 158.296C1070.98 158.404 1071.22 158.404 1071.32 158.404C1071.44 158.404 1071.58 158.397 1071.75 158.388L1071.85 158.383C1072.19 158.365 1072.67 158.339 1073.27 158.339C1073.8 158.34 1074.33 158.399 1074.84 158.515C1075.09 158.577 1075.35 158.613 1075.61 158.623C1075.74 158.624 1075.88 158.605 1076.02 158.569C1076.26 158.512 1076.51 158.487 1076.76 158.494C1077.06 158.494 1077.38 158.517 1077.67 158.537L1077.73 158.542L1077.73 158.542C1077.84 158.55 1077.95 158.557 1078.05 158.563C1078.18 158.571 1078.3 158.576 1078.41 158.576C1078.94 158.624 1079.49 158.566 1079.99 158.405C1080.2 158.34 1080.42 158.316 1080.64 158.336C1080.84 158.336 1081.04 158.342 1081.22 158.349C1081.36 158.358 1081.49 158.358 1081.59 158.358H1083.25C1083.24 158.369 1083.23 158.38 1083.21 158.39C1083.2 158.402 1083.18 158.413 1083.16 158.423L1083.15 158.428L1083.14 158.434L1083.14 158.436L1083.14 158.438C1083.13 158.441 1083.13 158.444 1083.12 158.447L1083.12 158.45L1083.12 158.453C1083.11 158.461 1083.11 158.469 1083.11 158.478C1083.04 159.15 1083.04 159.825 1083.12 160.496C1083.2 160.612 1083.51 160.659 1084.2 160.659C1084.28 160.659 1084.37 160.657 1084.45 160.656L1084.53 160.655C1084.59 160.654 1084.64 160.653 1084.7 160.653H1085.1L1085.12 160.653L1085.16 160.654L1085.17 160.654L1085.27 160.657C1085.3 160.658 1085.33 160.659 1085.37 160.659H1085.67C1085.71 160.659 1085.75 160.657 1085.79 160.656C1085.83 160.654 1085.87 160.652 1085.92 160.652V159.762H1087.22V159.308H1089.04V158.853H1146.67V159.308H1148.49V159.551L1148.82 159.581C1150.69 159.752 1150.73 159.798 1150.91 160.021C1150.99 160.116 1151.07 160.204 1151.17 160.285C1151.39 160.472 1151.37 160.551 1151.36 160.615C1151.32 160.756 1151.37 160.836 1152.01 161.071C1152.49 161.25 1153 161.342 1153.52 161.34C1153.73 161.34 1153.91 161.328 1154.09 161.316L1154.15 161.312L1154.18 161.31C1154.26 161.304 1154.34 161.299 1154.42 161.295C1154.5 161.29 1154.58 161.287 1154.65 161.287C1154.98 161.274 1155.3 161.202 1155.59 161.076C1156 160.902 1156.45 160.81 1156.9 160.806C1157.38 160.807 1157.85 160.847 1158.32 160.925C1158.73 160.987 1159.19 161.054 1159.92 161.101C1161.43 161.2 1166.81 161.775 1167.47 161.951C1167.99 162.056 1168.51 162.1 1169.04 162.082C1169.08 162.082 1169.12 162.081 1169.16 162.081C1169.22 162.08 1169.27 162.079 1169.32 162.078L1169.53 162.074L1169.61 162.072C1169.63 162.072 1169.66 162.072 1169.68 162.072H1169.9C1170.06 162.075 1170.23 162.111 1170.37 162.176C1170.52 162.241 1170.65 162.334 1170.75 162.448C1170.95 162.812 1174 162.855 1174.03 162.855C1174.36 162.855 1174.72 162.826 1175.1 162.793C1175.53 162.757 1175.98 162.721 1176.43 162.721C1176.54 162.717 1176.65 162.732 1176.75 162.765C1176.77 162.755 1176.8 162.745 1176.83 162.735C1176.86 162.726 1176.88 162.718 1176.91 162.709C1176.93 162.703 1176.96 162.697 1176.98 162.691C1177.27 162.616 1177.58 162.596 1177.88 162.634H1177.88C1178.04 162.634 1178.21 162.634 1178.36 162.641C1178.51 162.648 1178.65 162.648 1178.79 162.648C1179.14 162.648 1179.89 162.648 1179.89 162.198C1179.89 161.481 1182.09 161.103 1186.25 161.103H1194.72C1194.78 161.103 1194.84 161.076 1194.84 161.041C1194.92 160.442 1195 159.425 1194.6 159.331C1194.5 159.303 1194.49 159.295 1194.57 159.155C1194.64 159.053 1194.67 158.938 1194.68 158.82C1194.68 158.675 1194.77 158.661 1195.33 158.634L1195.43 158.629L1195.5 158.626C1195.54 158.624 1195.58 158.622 1195.62 158.62C1195.71 158.615 1195.79 158.609 1195.89 158.602C1196.02 158.592 1196.15 158.579 1196.3 158.562C1196.43 158.547 1196.56 158.537 1196.69 158.531C1196.76 158.528 1196.84 158.526 1196.92 158.526C1197.22 158.529 1197.51 158.553 1197.81 158.599C1197.98 158.628 1198.16 158.645 1198.34 158.65C1198.36 158.65 1198.37 158.65 1198.39 158.649L1198.42 158.648L1198.45 158.646L1198.48 158.644L1198.5 158.642L1198.52 158.64C1198.61 158.637 1198.71 158.608 1198.78 158.557C1198.86 158.505 1198.91 158.435 1198.94 158.354C1199.01 158.208 1199.08 158.07 1199.52 158.025C1199.64 158.014 1199.75 158.009 1199.86 158.008C1200.05 157.989 1200.24 158.005 1200.42 158.054C1200.6 158.104 1200.76 158.187 1200.9 158.296C1200.98 158.404 1201.22 158.404 1201.32 158.404L1201.34 158.404L1201.4 158.403L1201.45 158.402L1201.49 158.4C1201.57 158.397 1201.65 158.393 1201.75 158.388L1201.85 158.383L1201.85 158.383C1202.19 158.365 1202.67 158.339 1203.27 158.339C1203.8 158.34 1204.33 158.399 1204.84 158.515C1205.09 158.577 1205.35 158.613 1205.61 158.623C1205.74 158.624 1205.88 158.605 1206.02 158.569C1206.26 158.512 1206.51 158.487 1206.76 158.494C1207.06 158.494 1207.38 158.517 1207.67 158.537L1207.73 158.542L1207.73 158.542C1207.86 158.551 1207.99 158.56 1208.11 158.567C1208.15 158.568 1208.18 158.57 1208.21 158.572C1208.28 158.574 1208.35 158.576 1208.41 158.576C1208.94 158.624 1209.49 158.566 1209.99 158.405C1210.2 158.34 1210.42 158.316 1210.64 158.336C1210.72 158.336 1210.79 158.337 1210.87 158.338C1210.99 158.341 1211.11 158.345 1211.22 158.349C1211.36 158.358 1211.49 158.358 1211.59 158.358H1213.25C1213.23 158.372 1213.22 158.386 1213.2 158.398C1213.19 158.406 1213.18 158.413 1213.17 158.419C1213.16 158.425 1213.15 158.43 1213.14 158.434C1213.14 158.436 1213.13 158.439 1213.13 158.441C1213.13 158.445 1213.12 158.449 1213.12 158.453C1213.12 158.456 1213.12 158.459 1213.11 158.462C1213.11 158.467 1213.11 158.473 1213.11 158.478C1213.04 159.15 1213.04 159.825 1213.12 160.496L1213.12 160.503L1213.13 160.513C1213.14 160.523 1213.15 160.532 1213.17 160.541C1213.18 160.551 1213.2 160.561 1213.23 160.571L1215.92 159.807V159.762H1216.08L1217.22 159.438V159.308H1217.68L1250.2 150.075V147.099L1251.19 147.086V146.536L1252.42 146.525V145.825H1252.08V144.694L1253.02 144.686V142.863L1254.3 142.853V132.418L1259.84 132.386V142.808L1261.11 142.798V144.618L1262.04 144.61V145.742H1261.7V146.436L1262.14 146.432L1309.92 131.719C1309.95 131.547 1309.99 131.377 1310.03 131.209C1310.1 130.993 1310.11 130.767 1310.09 130.544C1310.07 130.507 1310.07 130.464 1310.08 130.425C1310.08 130.408 1310.09 130.393 1310.09 130.379C1310.11 130.358 1310.12 130.34 1310.14 130.326C1310.23 130.074 1310.26 129.806 1310.23 129.541C1310.2 129.24 1310.22 128.937 1310.28 128.641C1310.4 128.359 1310.48 128.062 1310.51 127.758C1310.53 127.585 1310.56 126.984 1310.57 126.425C1310.56 126 1310.6 125.577 1310.68 125.16C1310.77 124.539 1310.82 123.911 1310.82 123.283C1310.91 120.448 1310.99 118.364 1311.05 117.925C1311.14 117.125 1311.14 117.065 1311.05 116.813C1310.99 116.671 1311 116.584 1311.06 116.613C1311.12 116.642 1311.16 116.35 1311.17 115.957C1311.18 115.564 1311.21 114.812 1311.24 114.278C1311.28 113.744 1311.35 112.401 1311.41 111.278C1311.52 109.311 1311.67 108.462 1311.93 108.378C1312 108.344 1312.05 108.431 1312.05 108.551C1312.06 108.689 1312.12 108.82 1312.22 108.923C1312.44 109.544 1312.53 110.205 1312.49 110.864C1312.49 110.984 1312.54 111.364 1312.6 111.716C1312.68 112.246 1312.74 112.78 1312.76 113.316L1312.8 113.948L1312.81 114.145C1312.83 114.355 1312.84 114.522 1312.85 114.604C1312.85 114.642 1312.86 114.692 1312.87 114.75L1312.87 114.757C1312.88 114.878 1312.9 115.033 1312.92 115.195C1312.93 115.315 1312.94 115.438 1312.95 115.554C1313.05 116.699 1313.15 117.278 1313.28 117.354C1313.36 117.421 1313.36 117.463 1313.28 117.519C1313.24 117.557 1313.21 117.604 1313.2 117.655L1313.2 117.668L1313.19 117.683L1313.19 117.693L1313.19 117.703C1313.19 117.714 1313.19 117.725 1313.19 117.736C1313.19 117.761 1313.19 117.787 1313.2 117.812C1313.22 117.932 1313.26 118.533 1313.29 119.145C1313.33 120.357 1313.35 120.519 1313.49 120.726C1313.53 120.804 1313.52 120.857 1313.46 120.857C1313.41 120.857 1313.38 121.251 1313.39 121.796C1313.43 123.141 1313.43 123.14 1313.6 123.066L1313.61 123.061C1313.78 122.982 1313.81 123.117 1313.65 123.29C1313.52 123.421 1313.62 123.857 1313.78 123.857C1313.84 123.857 1313.8 123.969 1313.72 124.097C1313.59 124.297 1313.56 124.597 1313.6 125.561C1313.59 125.991 1313.63 126.42 1313.74 126.838C1313.8 126.936 1313.82 127.053 1313.79 127.165C1313.69 127.803 1313.68 128.454 1313.77 129.095C1313.83 129.095 1313.85 129.162 1313.82 129.249C1313.79 129.57 1313.81 129.893 1313.87 130.21L1313.89 130.324L1313.92 130.489L1316.31 129.752C1316.56 129.103 1316.65 128.406 1316.58 127.715C1316.58 127.364 1316.64 127.014 1316.74 126.679C1316.84 126.344 1316.86 125.988 1316.8 125.643C1316.76 125.076 1316.77 124.782 1316.87 124.673C1316.98 124.284 1317.02 123.876 1316.98 123.473C1316.95 122.142 1317.02 120.811 1317.18 119.489C1317.24 119.277 1317.27 119.055 1317.24 118.835C1317.23 118.573 1317.3 117.492 1317.38 116.435L1317.39 116.249L1317.39 116.188C1317.47 115.186 1317.55 114.061 1317.58 113.6C1317.59 112.853 1317.69 112.109 1317.87 111.385C1318.02 110.829 1318.23 110.717 1318.33 111.145C1318.36 111.318 1318.44 111.438 1318.48 111.408C1318.6 111.33 1318.7 111.746 1318.7 112.389C1318.72 112.873 1318.78 113.355 1318.87 113.83C1318.96 114.21 1319.01 114.597 1319.03 114.986C1318.99 115.291 1319.01 115.601 1319.07 115.902C1319.1 116.131 1319.15 116.469 1319.16 116.645C1319.16 116.794 1319.19 116.941 1319.25 117.081C1319.3 117.317 1319.33 117.559 1319.33 117.802C1319.34 118.121 1319.38 118.438 1319.45 118.749C1319.51 118.881 1319.52 119.025 1319.5 119.165C1319.49 119.178 1319.48 119.193 1319.48 119.209C1319.48 119.216 1319.48 119.224 1319.48 119.232C1319.48 119.239 1319.49 119.247 1319.49 119.254C1319.49 119.269 1319.5 119.282 1319.51 119.293C1319.52 119.304 1319.54 119.313 1319.55 119.319C1319.58 119.346 1319.6 119.381 1319.61 119.42C1319.62 119.46 1319.61 119.5 1319.6 119.537C1319.57 119.778 1319.59 120.022 1319.65 120.258C1319.74 120.638 1319.74 120.825 1319.66 120.858C1319.65 120.861 1319.64 120.866 1319.64 120.872C1319.63 120.875 1319.63 120.879 1319.63 120.882L1319.62 120.888C1319.62 120.89 1319.62 120.892 1319.62 120.895C1319.61 120.898 1319.61 120.901 1319.61 120.904C1319.61 120.907 1319.61 120.91 1319.61 120.913L1319.61 120.919C1319.6 120.923 1319.6 120.926 1319.6 120.93L1319.6 120.934L1319.6 120.941C1319.6 120.943 1319.6 120.946 1319.6 120.948L1319.6 120.954L1319.6 120.961C1319.6 120.968 1319.6 120.975 1319.61 120.982C1319.61 120.988 1319.61 120.995 1319.62 121.001C1319.76 121.932 1319.83 122.874 1319.82 123.817C1319.77 124.376 1319.91 124.935 1320.21 125.409C1320.39 125.54 1320.39 125.551 1320.18 125.727C1319.96 125.9 1319.97 125.985 1320.03 127.07L1320.03 127.113C1320.05 127.579 1320.11 128.043 1320.21 128.499C1320.22 128.516 1320.22 128.535 1320.23 128.554L1322.65 127.924L1322.64 127.92C1322.53 127.811 1322.49 127.72 1322.54 127.72C1322.74 127.72 1322.86 127.295 1322.93 126.368C1323.03 124.829 1323.03 124.668 1322.74 124.404C1322.51 124.197 1322.51 124.186 1322.71 124.044C1322.83 123.941 1322.91 123.803 1322.95 123.65C1322.96 123.535 1323 123.426 1323.07 123.334C1323.25 123.016 1323.33 122.651 1323.31 122.286C1323.26 122.275 1323.26 122.046 1323.31 121.806C1323.36 121.451 1323.36 121.092 1323.33 120.736C1323.29 120.278 1323.31 120.127 1323.41 120.127C1323.5 120.127 1323.53 119.996 1323.48 119.658C1323.44 119.358 1323.46 119.144 1323.55 119.069C1323.65 118.969 1323.63 118.915 1323.51 118.84C1323.39 118.765 1323.38 118.698 1323.48 118.54C1323.49 118.525 1323.5 118.509 1323.51 118.493C1323.53 118.449 1323.54 118.401 1323.54 118.351C1323.55 118.284 1323.53 118.217 1323.49 118.16C1323.44 118.048 1323.44 117.984 1323.49 117.984C1323.65 117.984 1323.72 117.417 1323.6 117.263C1323.53 117.163 1323.53 117.12 1323.62 117.12C1323.7 117.12 1323.73 117.034 1323.7 116.913C1323.69 116.873 1323.68 116.836 1323.68 116.805C1323.68 116.759 1323.68 116.724 1323.7 116.707L1323.7 116.703C1323.7 116.7 1323.71 116.699 1323.71 116.698C1323.71 116.696 1323.72 116.695 1323.72 116.695C1323.82 116.695 1323.93 116.248 1324.01 115.572C1324.03 115.212 1324.08 114.854 1324.16 114.502C1324.3 114.08 1324.36 113.637 1324.36 113.192C1324.3 113.15 1324.35 112.974 1324.42 112.809C1324.47 112.729 1324.5 112.64 1324.51 112.549C1324.52 112.457 1324.51 112.364 1324.49 112.275C1324.39 112.001 1324.47 111.348 1324.6 111.348C1324.65 111.348 1324.7 111.217 1324.7 111.055C1324.71 110.829 1324.74 110.605 1324.8 110.387C1324.87 109.997 1324.92 109.604 1324.95 109.208C1325 108.308 1325.08 108.032 1325.3 108.032C1325.39 108.032 1325.48 107.89 1325.52 107.714C1325.6 107.289 1325.93 107.278 1326.03 107.683C1326.07 107.847 1326.15 108.002 1326.25 108.141C1326.4 108.314 1326.48 108.881 1326.55 110.387C1326.58 110.887 1326.64 111.386 1326.72 111.881C1326.79 112.255 1326.83 112.636 1326.84 113.018C1326.84 113.43 1326.88 113.842 1326.94 114.25C1327.03 114.835 1327.07 115.426 1327.06 116.018C1327.04 116.438 1327.07 116.86 1327.15 117.272C1327.25 117.686 1327.3 118.111 1327.3 118.537C1327.35 119.193 1327.41 120.174 1327.45 120.699C1327.48 121.224 1327.5 121.964 1327.49 122.325C1327.46 122.643 1327.51 122.963 1327.61 123.264C1327.73 123.618 1327.76 123.998 1327.68 124.364C1327.61 125.064 1327.62 125.216 1327.8 125.456C1327.94 125.794 1328.02 126.155 1328.03 126.52L1341.55 122.996H1348.82V122.847H1351.11V108.426L1350.32 107.645H1351.77V105.945H1358.41C1358.64 105.945 1358.74 106.271 1358.74 106.271L1359 107.25L1360.11 107.904L1359.92 108.293L1359.52 108.682V122.996H1363.24V105.162L1362.52 104.962L1362.46 104.573H1362.72V104.247H1363.96V102.486H1368.59C1368.81 102.486 1368.59 101.371 1368.59 101.371C1368.77 101.355 1368.94 101.355 1369.12 101.371C1369.37 101.507 1369.61 101.662 1369.83 101.834L1370.04 102.352H1371.01V101.897H1375.77V101.116H1377.07V101.897C1377.07 101.897 1377.32 101.921 1377.53 101.962C1377.72 101.996 1377.92 102.017 1378.11 102.025V103.069C1378.13 103.267 1378.15 103.463 1378.18 103.658H1378.57L1378.9 103.14H1383.01V101.897H1383.6V100.527L1385.55 100.535C1385.55 100.872 1385.62 101.206 1385.75 101.516C1385.92 101.734 1385.62 102.034 1385.62 102.034C1385.62 102.034 1386.14 102.574 1386.14 102.749C1386.14 102.924 1386.28 103.601 1386.28 103.601C1386.2 103.877 1386.16 104.16 1386.14 104.445C1386.14 104.796 1386.53 104.908 1386.53 104.908L1386.14 105.952L1386.01 107.252L1386.27 110.51L1386.34 118.062L1406.5 100.596H1410.84C1410.85 100.501 1410.89 100.429 1410.96 100.396C1411.01 100.369 1411.04 100.329 1411.06 100.281C1411.07 100.234 1411.08 100.181 1411.06 100.133C1411.01 100.013 1411.05 99.9566 1411.15 99.9566C1411.27 99.9566 1411.3 99.7946 1411.29 99.1826C1411.29 98.7576 1411.26 98.4616 1411.23 98.5396C1411.19 98.6266 1411.13 98.6396 1410.98 98.5596C1410.88 98.5066 1410.78 98.4846 1410.75 98.5176C1410.71 98.5506 1410.59 98.4506 1410.47 98.2996C1410.35 98.1486 1410.21 98.0256 1410.16 98.0256C1410 98.0256 1409.92 97.7626 1409.92 97.3496C1409.92 97.1771 1409.88 97.0065 1409.81 96.8496C1409.74 96.7496 1409.75 96.6646 1409.84 96.6206C1409.94 96.5566 1409.94 96.5336 1409.83 96.5336C1409.69 95.7749 1409.72 94.9956 1409.93 94.2516C1409.99 94.0355 1410.01 93.8096 1409.98 93.5866C1409.96 93.5495 1409.96 93.5073 1409.97 93.4675C1409.98 93.4277 1410 93.3927 1410.04 93.3686C1410.12 93.1165 1410.15 92.8485 1410.12 92.5836C1410.09 92.283 1410.11 91.98 1410.17 91.6836C1410.29 91.402 1410.37 91.1047 1410.4 90.8006C1410.43 90.6276 1410.45 90.0266 1410.46 89.4676C1410.46 89.0434 1410.49 88.6197 1410.57 88.2026C1410.67 87.5817 1410.71 86.9541 1410.71 86.3256C1410.8 83.4906 1410.89 81.4066 1410.94 80.9676C1411.03 80.1676 1411.03 80.1076 1410.94 79.8556C1410.89 79.7136 1410.9 79.6266 1410.95 79.6556C1411.01 79.6846 1411.05 79.3926 1411.06 78.9996C1411.07 78.6066 1411.1 77.8546 1411.14 77.3206C1411.17 76.7866 1411.25 75.4436 1411.3 74.3206C1411.41 72.3536 1411.56 71.5046 1411.82 71.4206C1411.89 71.3866 1411.94 71.4736 1411.94 71.5936C1411.96 71.7323 1412.01 71.8628 1412.11 71.9656C1412.33 72.587 1412.42 73.2479 1412.38 73.9066C1412.38 74.0266 1412.44 74.4066 1412.49 74.7586C1412.57 75.2886 1412.63 75.8228 1412.65 76.3586L1412.68 76.7547L1412.68 76.7992C1412.7 77.1795 1412.73 77.519 1412.74 77.6466L1412.75 77.7012L1412.76 77.7931C1412.78 78.0033 1412.82 78.3227 1412.84 78.5966C1412.94 79.7416 1413.04 80.3206 1413.17 80.3966C1413.25 80.4636 1413.25 80.5056 1413.17 80.5616C1413.13 80.5999 1413.1 80.6469 1413.09 80.6981C1413.08 80.7493 1413.08 80.8032 1413.09 80.8546C1413.11 80.9746 1413.16 81.5756 1413.18 82.1876C1413.22 83.3996 1413.24 83.5616 1413.38 83.7686C1413.42 83.8466 1413.41 83.8996 1413.36 83.8996C1413.3 83.8996 1413.27 84.2936 1413.28 84.8386C1413.32 86.1837 1413.32 86.1833 1413.49 86.1085L1413.5 86.1036C1413.68 86.0246 1413.71 86.1596 1413.54 86.3326C1413.41 86.4636 1413.51 86.8996 1413.67 86.8996C1413.73 86.8996 1413.69 87.0116 1413.61 87.1396C1413.48 87.3396 1413.45 87.6396 1413.49 88.6036C1413.48 89.0338 1413.53 89.4635 1413.63 89.8806C1413.69 89.9788 1413.71 90.0959 1413.68 90.2076C1413.58 90.8463 1413.57 91.497 1413.67 92.1376C1413.72 92.1376 1413.74 92.2046 1413.71 92.2916C1413.68 92.6131 1413.7 92.9361 1413.76 93.2526C1413.96 94.5186 1413.96 94.6156 1413.81 94.9986C1413.73 95.1826 1413.71 95.3476 1413.75 95.3476C1413.86 95.3476 1413.82 96.0686 1413.67 96.6776C1413.4 97.8256 1413.31 98.1306 1413.24 98.1306C1413.2 98.1306 1413.1 98.2506 1413.02 98.3936C1412.89 98.5879 1412.69 98.7271 1412.46 98.7846C1412.06 98.9046 1412.06 98.9156 1412.06 99.4716C1412.06 99.9516 1412.1 100.053 1412.33 100.204C1412.48 100.303 1412.6 100.438 1412.68 100.596H1417.48L1417.48 100.573V100.568C1417.54 100.167 1417.52 99.7589 1417.41 99.3676C1417.35 99.3256 1417.29 99.3366 1417.29 99.3896C1417.29 99.6076 1416.52 99.3786 1416.18 99.0626C1415.58 98.4846 1415.52 97.2826 1415.95 94.6206C1416.07 94.2237 1416.09 93.8073 1416.03 93.3996C1415.96 93.3326 1416.01 93.1706 1416.15 92.9306C1416.43 92.244 1416.55 91.4978 1416.48 90.7576C1416.48 90.4066 1416.53 90.0575 1416.63 89.7216C1416.73 89.3865 1416.76 89.0311 1416.69 88.6856C1416.65 88.1186 1416.66 87.8246 1416.76 87.7156C1416.87 87.3266 1416.91 86.9189 1416.87 86.5156C1416.85 85.1847 1416.91 83.8536 1417.07 82.5316C1417.14 82.3203 1417.16 82.0979 1417.14 81.8776C1417.13 81.6156 1417.19 80.5346 1417.27 79.4776L1417.28 79.2918L1417.29 79.2313C1417.36 78.2294 1417.44 77.1043 1417.47 76.6426C1417.48 75.8955 1417.58 75.1522 1417.76 74.4276C1417.91 73.8716 1418.12 73.7596 1418.22 74.1876C1418.25 74.3606 1418.33 74.4806 1418.37 74.4506C1418.49 74.3726 1418.59 74.7886 1418.59 75.4316C1418.61 75.9157 1418.67 76.3975 1418.77 76.8726C1418.85 77.253 1418.9 77.6397 1418.92 78.0286C1418.88 78.3344 1418.9 78.6436 1418.96 78.9446C1419 79.1736 1419.04 79.5116 1419.05 79.6876C1419.06 79.8368 1419.09 79.9839 1419.14 80.1236C1419.2 80.3596 1419.23 80.6017 1419.23 80.8446C1419.23 81.1635 1419.27 81.4808 1419.35 81.7916C1419.4 81.9237 1419.41 82.0677 1419.39 82.2076C1419.38 82.2213 1419.38 82.2363 1419.37 82.2517C1419.37 82.2671 1419.38 82.2826 1419.38 82.2971C1419.39 82.3117 1419.39 82.3249 1419.41 82.336C1419.42 82.3472 1419.43 82.3559 1419.44 82.3616C1419.47 82.3887 1419.49 82.4243 1419.5 82.4634C1419.51 82.5025 1419.5 82.5432 1419.49 82.5796C1419.46 82.8212 1419.48 83.0653 1419.54 83.3006C1419.63 83.6806 1419.63 83.8676 1419.55 83.9006C1419.54 83.9064 1419.53 83.9149 1419.52 83.9254C1419.51 83.936 1419.5 83.9485 1419.5 83.962C1419.49 83.9755 1419.49 83.9898 1419.49 84.0039C1419.5 84.0179 1419.5 84.0315 1419.51 84.0436C1419.65 84.9749 1419.72 85.917 1419.71 86.8596C1419.66 87.4187 1419.8 87.9775 1420.1 88.4516C1420.29 88.5826 1420.29 88.5936 1420.07 88.7696C1419.85 88.9434 1419.86 89.0275 1419.92 90.1133L1419.92 90.1556C1419.94 90.622 1420 91.0859 1420.1 91.5416C1420.13 91.5981 1420.15 91.6623 1420.15 91.7276C1420.15 91.7389 1420.15 91.7501 1420.15 91.7613C1420.14 91.7903 1420.14 91.8188 1420.13 91.8463C1420.12 91.8696 1420.11 91.8922 1420.1 91.9136C1420.02 92.4008 1420.02 92.8973 1420.09 93.3856C1420.12 93.5914 1420.15 93.7996 1420.15 94.0086C1420.15 94.2748 1420.2 94.539 1420.31 94.7826C1420.39 94.8826 1420.42 95.1536 1420.36 95.6006C1420.33 95.9726 1420.3 96.3636 1420.3 96.4836C1420.3 97.2486 1420.29 97.4556 1420.19 97.5646C1420.09 97.7645 1420.03 97.9789 1420.01 98.1986C1419.95 98.5409 1419.8 98.8613 1419.58 99.1261C1419.35 99.391 1419.06 99.5908 1418.73 99.7046C1418.41 99.7686 1418.37 99.8136 1418.35 100.163C1418.34 100.307 1418.34 100.451 1418.34 100.596H1425.15L1425.16 100.009L1424.63 99.9526C1424.15 99.9106 1423.51 99.5946 1423.51 99.3966C1423.51 99.3546 1423.44 99.3216 1423.36 99.3216C1423.15 99.3216 1422.9 98.9166 1422.76 98.3496C1422.7 98.1116 1422.61 97.8811 1422.5 97.6626C1422.29 97.2785 1422.24 96.8328 1422.33 96.4086C1422.42 96.2666 1422.4 96.1086 1422.28 95.8746C1422.17 95.6423 1422.11 95.3886 1422.11 95.1316C1422.11 94.8747 1422.17 94.6209 1422.28 94.3886C1422.42 94.1401 1422.49 93.856 1422.48 93.5696C1422.48 93.307 1422.52 93.046 1422.6 92.7956C1422.68 92.5078 1422.72 92.211 1422.72 91.9126C1422.74 91.3006 1422.71 91.1356 1422.53 90.9626C1422.43 90.8536 1422.38 90.7626 1422.43 90.7626C1422.63 90.7626 1422.75 90.3376 1422.82 89.4106C1422.93 87.8716 1422.92 87.7106 1422.63 87.4466C1422.4 87.2396 1422.4 87.2286 1422.6 87.0866C1422.72 86.9838 1422.8 86.846 1422.84 86.6926C1422.85 86.5784 1422.89 86.4691 1422.96 86.3766C1423.14 86.0587 1423.22 85.694 1423.2 85.3286C1423.15 85.3176 1423.15 85.0887 1423.2 84.8486C1423.25 84.4942 1423.26 84.1348 1423.22 83.7786C1423.18 83.3206 1423.2 83.1696 1423.3 83.1696C1423.4 83.1696 1423.42 83.0386 1423.37 82.7006C1423.33 82.4006 1423.35 82.1866 1423.44 82.1116C1423.54 82.0116 1423.53 81.9576 1423.41 81.8826C1423.29 81.8076 1423.28 81.7406 1423.37 81.5826C1423.39 81.5559 1423.41 81.5267 1423.42 81.496C1423.43 81.4634 1423.43 81.4291 1423.44 81.3943C1423.44 81.3267 1423.42 81.2599 1423.38 81.2026C1423.33 81.0906 1423.33 81.0266 1423.38 81.0266C1423.54 81.0266 1423.61 80.4596 1423.49 80.3056C1423.42 80.2056 1423.42 80.1626 1423.52 80.1626C1423.59 80.1626 1423.62 80.0766 1423.59 79.9556C1423.56 79.8346 1423.57 79.7376 1423.61 79.7376C1423.71 79.7376 1423.82 79.2906 1423.9 78.6146C1423.92 78.2549 1423.97 77.8973 1424.05 77.5446C1424.19 77.1225 1424.26 76.6795 1424.25 76.2346C1424.19 76.1926 1424.24 76.0166 1424.31 75.8516C1424.36 75.7717 1424.39 75.6832 1424.4 75.5915C1424.41 75.4997 1424.41 75.4066 1424.38 75.3176C1424.28 75.0436 1424.36 74.3906 1424.49 74.3906C1424.54 74.3906 1424.59 74.2596 1424.59 74.0976C1424.6 73.872 1424.63 73.648 1424.69 73.4296C1424.76 73.0403 1424.82 72.6465 1424.84 72.2506C1424.9 71.3506 1424.97 71.0746 1425.19 71.0746C1425.28 71.0746 1425.38 70.9326 1425.41 70.7566C1425.5 70.3316 1425.82 70.3206 1425.92 70.7256C1425.97 70.8898 1426.04 71.0448 1426.14 71.1836C1426.29 71.3566 1426.37 71.9236 1426.45 73.4296C1426.47 73.9301 1426.53 74.4288 1426.61 74.9236C1426.69 75.2976 1426.73 75.6785 1426.73 76.0606C1426.74 76.4733 1426.77 76.8849 1426.84 77.2926C1426.92 77.878 1426.96 78.4691 1426.96 79.0606C1426.93 79.4807 1426.96 79.9028 1427.05 80.3146C1427.15 80.729 1427.2 81.1535 1427.2 81.5796C1427.24 82.2356 1427.31 83.2166 1427.34 83.7416C1427.37 84.2666 1427.39 85.0066 1427.38 85.3676C1427.36 85.6856 1427.4 86.0057 1427.5 86.3066C1427.63 86.6605 1427.65 87.041 1427.57 87.4066C1427.5 88.1066 1427.51 88.2586 1427.69 88.4986C1427.92 89.0307 1427.98 89.6193 1427.87 90.1886C1427.85 90.2436 1427.85 90.3027 1427.85 90.3613C1427.86 90.4199 1427.87 90.4764 1427.91 90.5266C1427.99 90.7698 1428.03 91.0241 1428.04 91.2806C1428.05 91.5736 1428.1 91.8146 1428.15 91.8146C1428.19 91.8146 1428.22 91.8816 1428.22 91.9686C1428.27 92.1259 1428.36 92.2679 1428.48 92.3816C1428.64 92.5576 1428.69 92.6816 1428.61 92.6996C1428.49 93.1608 1428.49 93.6485 1428.63 94.1076C1428.7 94.2607 1428.74 94.4271 1428.75 94.5966C1428.77 94.8179 1428.83 95.0346 1428.91 95.2416C1429 95.4481 1429.03 95.6738 1429 95.8956C1428.98 96.1136 1429 96.3226 1429.07 96.3536C1429.22 96.4536 1429.23 96.8456 1429.07 96.8456C1429 96.8456 1429 96.9126 1429.07 97.0526C1429.15 97.1815 1429.19 97.3315 1429.19 97.4834C1429.18 97.6352 1429.13 97.782 1429.04 97.9046C1428.99 97.9745 1428.95 98.0546 1428.92 98.1405C1428.91 98.1741 1428.9 98.2084 1428.9 98.2429C1428.89 98.2965 1428.89 98.3508 1428.9 98.4046C1428.91 98.4911 1428.91 98.5798 1428.89 98.6647C1428.87 98.7495 1428.82 98.8285 1428.77 98.896C1428.71 98.9635 1428.64 99.018 1428.56 99.0558C1428.52 99.0752 1428.48 99.09 1428.44 99.0998C1428.42 99.1044 1428.4 99.1079 1428.37 99.1103C1428.35 99.1129 1428.33 99.1144 1428.31 99.1146C1428.14 99.1226 1428.06 99.1896 1428.08 99.2656C1428.14 99.4196 1427.8 99.6256 1427.46 99.6256C1427.24 99.6428 1427.02 99.6793 1426.8 99.7346L1426.4 99.8436L1426.43 100.596ZM189.726 150.118V147.934L189.725 150.117L189.726 150.118ZM58.8819 122.643H60.0529C60.0509 122.37 60.0481 122.095 60.0454 121.835C60.0372 121.05 60.0304 120.395 60.0529 120.293C60.1319 119.993 60.5159 107.568 60.5159 107.568L60.2529 106.524L59.9899 106.006L60.0529 105.29H56.9239V120.947L58.8819 122.643ZM1381.19 122.516L1383.07 120.887V105.163H1379.94L1380.01 105.879L1379.74 106.397L1379.48 107.441C1379.48 107.441 1379.87 119.866 1379.94 120.166C1379.97 120.268 1379.96 120.92 1379.95 121.704V121.711C1379.95 121.97 1379.95 122.244 1379.94 122.516H1381.19ZM1374.26 105.355H1375.83V122.516H1373.22V107.249L1373.41 106.597L1373.55 106.008L1373.68 105.49L1374.26 105.355ZM1367.15 105.618H1368.65V122.518H1366.95V107.504L1367.15 106.597L1367.61 106.134L1367.15 105.618ZM1353.91 108.03H1357.1V108.682C1357.29 109.143 1357.42 109.625 1357.49 110.117C1357.44 110.339 1357.49 122.842 1357.49 122.842H1353.26C1353.03 122.451 1353.26 109.854 1353.26 109.854L1353.46 109.073L1353.26 108.681L1353.39 108.157L1353.91 108.03ZM64.1629 105.482H65.7329L66.3229 105.617L66.4489 106.135L66.5859 106.724L66.7749 107.376V122.643H64.1629V105.482ZM71.3439 105.745H72.8439L72.3889 106.261L72.8439 106.724L73.0439 107.631V122.645H71.3439V105.745ZM82.8918 108.157H86.0868L86.6098 108.284L86.7368 108.808L86.5368 109.2L86.7368 109.981C86.7368 109.981 86.9608 122.578 86.7368 122.969H82.5008C82.5008 122.969 82.5558 110.466 82.5008 110.244C82.5733 109.752 82.7046 109.27 82.8918 108.809V108.157Z" fill="#1B023F"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M1262.43 128.996V128.822C1262.41 128.516 1262.32 128.217 1262.19 127.94C1262.06 127.672 1261.89 127.428 1261.68 127.219C1261.47 127.011 1261.22 126.841 1260.95 126.719C1260.68 126.593 1260.38 126.519 1260.08 126.501V126.141H1259.77V125.711H1260.05V125.251H1259.83L1259.88 125.125L1259.92 125.015L1259.95 124.934L1259.96 124.897C1259.97 124.862 1259.98 124.826 1259.98 124.79C1259.99 124.732 1260 124.656 1260.01 124.58L1260.02 124.493C1260.03 124.448 1260.03 124.405 1260.04 124.368L1260.04 124.317C1260.04 124.285 1260.05 124.263 1260.05 124.252C1260.05 124.236 1260.04 124.158 1260.02 124.041L1260 123.894C1259.99 123.808 1259.98 123.714 1259.96 123.621L1259.91 123.213L1259.88 123.028L1259.81 122.686L1259.42 120.83C1259.4 120.785 1259.39 120.741 1259.37 120.698L1259.33 120.598C1259.31 120.549 1259.29 120.496 1259.27 120.444L1259.18 120.197L1259.13 120.086L1259.03 119.05L1259.19 119.188L1259.2 119.21L1259.21 119.266L1259.23 119.322C1259.23 119.33 1259.23 119.339 1259.24 119.348L1259.24 119.361L1259.25 119.411L1259.27 119.491L1259.29 119.566L1259.3 119.599V119.776C1259.3 119.791 1259.3 119.806 1259.31 119.821C1259.32 119.841 1259.33 119.862 1259.34 119.882L1259.36 119.936L1259.37 119.959L1259.41 119.967L1259.5 119.984C1259.53 119.99 1259.57 119.996 1259.6 120C1259.64 120.003 1259.67 120.003 1259.7 120C1259.72 119.999 1259.74 119.996 1259.76 119.991C1259.76 119.991 1259.76 119.99 1259.77 119.987C1259.77 119.985 1259.77 119.981 1259.77 119.978V119.967H1259.77L1259.78 119.921L1259.83 119.811L1259.85 119.762C1259.86 119.743 1259.86 119.724 1259.87 119.705L1259.89 119.677L1259.89 119.672C1259.91 119.63 1259.93 119.589 1259.94 119.558C1259.95 119.545 1259.96 119.532 1259.96 119.522C1259.97 119.512 1259.98 119.503 1259.99 119.496C1260.01 119.486 1260.03 119.483 1260.04 119.486C1260.05 119.487 1260.05 119.488 1260.06 119.491C1260.07 119.493 1260.07 119.497 1260.08 119.501L1260.09 119.512V119.484C1260.09 119.462 1260.1 119.44 1260.1 119.419C1260.11 119.392 1260.12 119.366 1260.13 119.342C1260.15 119.318 1260.16 119.297 1260.18 119.28C1260.21 119.264 1260.23 119.246 1260.25 119.227C1260.27 119.207 1260.28 119.187 1260.3 119.165C1260.31 119.155 1260.32 119.144 1260.33 119.134C1260.33 119.124 1260.34 119.113 1260.35 119.103C1260.36 119.086 1260.37 119.068 1260.37 119.05C1260.37 119.043 1260.37 119.037 1260.37 119.031C1260.37 119.027 1260.37 119.023 1260.37 119.02C1260.37 119.015 1260.37 119.011 1260.37 119.007C1260.37 119.003 1260.36 119 1260.36 118.997L1260.36 118.993L1260.35 118.985C1260.35 118.976 1260.34 118.968 1260.34 118.96C1260.33 118.947 1260.32 118.935 1260.31 118.923C1260.29 118.899 1260.27 118.875 1260.26 118.855C1260.25 118.846 1260.24 118.836 1260.24 118.826C1260.23 118.819 1260.23 118.813 1260.23 118.806C1260.23 118.793 1260.24 118.781 1260.25 118.772C1260.26 118.76 1260.27 118.75 1260.28 118.742L1260.31 118.721V118.714L1260.65 118.507V118.407C1260.65 118.401 1260.65 118.395 1260.65 118.39C1260.65 118.384 1260.65 118.378 1260.65 118.372C1260.65 118.363 1260.65 118.354 1260.65 118.345L1260.65 118.326L1260.65 118.311V118.004C1260.65 117.983 1260.64 117.962 1260.64 117.942C1260.64 117.916 1260.64 117.891 1260.63 117.867C1260.63 117.851 1260.62 117.834 1260.62 117.818C1260.62 117.809 1260.61 117.8 1260.61 117.792L1260.61 117.767C1260.6 117.753 1260.6 117.74 1260.59 117.729C1260.59 117.723 1260.59 117.718 1260.59 117.712C1260.59 117.698 1260.58 117.684 1260.58 117.67V117.37C1260.58 117.356 1260.58 117.342 1260.57 117.329L1260.54 117.289C1260.54 117.273 1260.53 117.256 1260.53 117.24L1260.53 117.225L1260.52 117.21C1260.52 117.196 1260.52 117.182 1260.51 117.169C1260.51 117.156 1260.5 117.142 1260.5 117.128L1260.48 117.078L1260.44 116.984C1260.43 116.954 1260.42 116.925 1260.41 116.9C1260.4 116.888 1260.4 116.875 1260.39 116.863C1260.39 116.849 1260.38 116.835 1260.37 116.821L1260.35 116.784C1260.35 116.768 1260.34 116.753 1260.33 116.738L1260.29 116.659L1260.25 116.589L1260.19 116.464L1260.09 116.264L1260 116.077L1259.95 115.994L1259.62 115.12C1259.79 115.373 1259.96 115.614 1260.12 115.832C1260.28 116.037 1260.45 116.231 1260.63 116.411C1260.78 116.563 1260.95 116.691 1261.14 116.792C1261.3 116.878 1261.48 116.919 1261.66 116.912C1262.08 116.812 1262.24 116.392 1262.23 115.804C1262.19 115.086 1262.02 114.381 1261.75 113.717C1261.47 112.983 1261.1 112.287 1260.65 111.647C1260.36 111.154 1259.91 110.779 1259.37 110.589C1259.21 110.574 1259.05 110.613 1258.92 110.7C1258.81 110.781 1258.71 110.891 1258.66 111.02C1258.6 111.151 1258.56 111.291 1258.55 111.434C1258.53 111.564 1258.54 111.695 1258.55 111.825L1258.52 111.851L1258.44 111.91C1258.41 111.932 1258.38 111.955 1258.36 111.975C1258.35 111.986 1258.33 112.001 1258.32 112.018C1258.32 112.026 1258.32 112.034 1258.33 112.042C1258.33 112.047 1258.33 112.052 1258.33 112.057C1258.34 112.067 1258.34 112.077 1258.35 112.087L1258.36 112.101L1258.36 112.113L1258.4 112.164L1258.41 112.189L1258.2 112.158L1258.19 112.148L1258.16 112.124L1258.13 112.094C1258.13 112.086 1258.12 112.076 1258.11 112.067C1258.11 112.056 1258.1 112.046 1258.08 112.039C1258.08 112.033 1258.07 112.027 1258.06 112.021L1258.05 112.015L1258.04 112.009L1257.99 111.989L1257.97 111.979L1257.94 111.953L1257.88 111.889C1257.85 111.867 1257.83 111.844 1257.81 111.825C1257.8 111.814 1257.78 111.802 1257.77 111.789C1257.77 111.778 1257.76 111.766 1257.76 111.754C1257.76 111.745 1257.76 111.735 1257.76 111.724C1257.76 111.717 1257.76 111.71 1257.75 111.703C1257.75 111.685 1257.75 111.667 1257.75 111.649V111.314C1257.76 111.299 1257.76 111.285 1257.76 111.271C1257.76 111.26 1257.77 111.249 1257.77 111.24C1257.78 111.231 1257.78 111.223 1257.79 111.216L1257.8 111.204C1257.81 111.199 1257.81 111.194 1257.82 111.189L1257.92 111.119C1257.93 111.113 1257.94 111.107 1257.95 111.1C1257.96 111.093 1257.97 111.086 1257.98 111.079C1257.98 111.074 1257.99 111.07 1257.99 111.064C1258 111.059 1258 111.053 1258 111.047L1258 111.042L1258.01 111.039L1258.01 111.037L1258 111.032L1258 111.027V111.012L1258 111.006C1258 111.004 1258 111.002 1258 111C1258 110.998 1258 110.996 1258 110.994L1258 110.989C1258.01 110.98 1258.01 110.971 1258.01 110.962C1258.01 110.948 1258.01 110.934 1258.02 110.921C1258.02 110.913 1258.02 110.905 1258.02 110.898C1258.02 110.89 1258.02 110.882 1258.02 110.875C1258.02 110.86 1258.03 110.845 1258.03 110.831C1258.04 110.823 1258.04 110.816 1258.05 110.808C1258.05 110.801 1258.05 110.795 1258.05 110.789C1258.05 110.777 1258.05 110.765 1258.05 110.753V110.674C1258.05 110.658 1258.05 110.642 1258.05 110.627C1258.05 110.616 1258.05 110.606 1258.05 110.596L1258.05 110.587C1258.05 110.584 1258.05 110.581 1258.04 110.578C1258.04 110.562 1258.04 110.545 1258.04 110.529C1258.03 110.513 1258.03 110.497 1258.04 110.482V110.426C1258.04 110.403 1258.03 110.381 1258.03 110.36C1258.03 110.354 1258.03 110.349 1258.03 110.343L1258.03 110.332V110.327C1258.03 110.316 1258.03 110.305 1258.02 110.295L1258.01 110.248C1258.01 110.24 1258.01 110.232 1258.01 110.225C1258 110.219 1258 110.213 1258 110.207C1257.99 110.192 1257.98 110.178 1257.98 110.164C1257.97 110.15 1257.96 110.134 1257.95 110.119C1257.95 110.104 1257.94 110.089 1257.94 110.074C1257.93 110.059 1257.93 110.044 1257.92 110.031L1257.91 109.989L1257.9 109.953L1257.88 109.915L1257.87 109.9C1257.87 109.89 1257.86 109.88 1257.86 109.87L1257.82 109.816C1257.82 109.809 1257.82 109.802 1257.81 109.796C1257.8 109.783 1257.8 109.769 1257.79 109.756C1257.78 109.735 1257.77 109.714 1257.76 109.693C1257.76 109.675 1257.75 109.658 1257.75 109.64C1257.74 109.632 1257.74 109.625 1257.74 109.617L1257.74 109.603C1257.74 109.598 1257.74 109.594 1257.74 109.589C1257.74 109.584 1257.74 109.579 1257.74 109.574V109.547C1257.74 109.529 1257.73 109.512 1257.72 109.496C1257.71 109.473 1257.7 109.446 1257.69 109.417L1257.64 109.334L1257.61 109.27C1257.61 109.262 1257.6 109.256 1257.6 109.253C1257.59 109.249 1257.59 109.248 1257.59 109.248C1257.58 109.248 1257.58 109.249 1257.57 109.251C1257.57 109.252 1257.57 109.254 1257.57 109.256L1257.56 109.259C1257.56 109.266 1257.55 109.273 1257.54 109.282L1257.54 109.294L1257.31 109.425L1257.29 109.325L1257.3 109.281C1257.31 109.254 1257.31 109.218 1257.32 109.181C1257.33 109.144 1257.33 109.102 1257.34 109.068C1257.34 109.042 1257.35 109.015 1257.35 108.989C1257.35 108.983 1257.35 108.977 1257.34 108.973C1257.34 108.971 1257.34 108.969 1257.34 108.967C1257.34 108.966 1257.33 108.964 1257.33 108.964C1257.32 108.963 1257.3 108.965 1257.29 108.97C1257.28 108.974 1257.27 108.98 1257.25 108.987L1257.23 108.997L1257.11 108.975L1257.12 108.959C1257.13 108.944 1257.13 108.93 1257.14 108.917L1257.15 108.893C1257.15 108.882 1257.16 108.87 1257.16 108.858C1257.17 108.835 1257.17 108.812 1257.18 108.789C1257.18 108.774 1257.18 108.76 1257.18 108.746V108.735L1257.18 108.739L1257.21 108.575L1257.38 108.583H1257.38L1257.4 108.572L1257.43 108.555L1257.47 108.529C1257.48 108.522 1257.49 108.512 1257.5 108.5C1257.5 108.493 1257.5 108.487 1257.5 108.48C1257.51 108.474 1257.51 108.467 1257.51 108.46C1257.51 108.442 1257.51 108.425 1257.51 108.408C1257.52 108.399 1257.52 108.39 1257.52 108.38C1257.52 108.369 1257.52 108.357 1257.52 108.345C1257.52 108.333 1257.53 108.321 1257.53 108.309C1257.53 108.302 1257.53 108.295 1257.53 108.289C1257.53 108.274 1257.53 108.259 1257.53 108.245V108.103C1257.53 108.069 1257.53 108.036 1257.54 108.003C1257.54 107.969 1257.54 107.924 1257.54 107.886C1257.54 107.852 1257.54 107.819 1257.54 107.786C1257.54 107.755 1257.54 107.725 1257.54 107.695C1257.54 107.671 1257.53 107.648 1257.52 107.626C1257.52 107.611 1257.51 107.595 1257.51 107.58L1257.5 107.562H1257.36L1257.05 107.569L1256.93 107.489L1256.73 107.389L1256.53 107.405L1256.32 107.55L1256.12 107.957L1255.99 108.472L1255.98 109.248L1255.78 109.494L1255.65 109.755L1255.8 109.939V110.723L1255.94 110.953L1256.15 111.091C1256.15 111.096 1256.15 111.101 1256.15 111.106C1256.14 111.114 1256.14 111.122 1256.14 111.13C1256.14 111.144 1256.13 111.162 1256.13 111.181L1256.13 111.184C1256.13 111.196 1256.13 111.209 1256.13 111.223C1256.12 111.259 1256.11 111.296 1256.1 111.33C1256.1 111.359 1256.08 111.386 1256.07 111.413C1256.06 111.435 1256.05 111.46 1256.04 111.485C1256.04 111.514 1256.03 111.543 1256.03 111.573C1256.03 111.582 1256.03 111.591 1256.03 111.599C1256.03 111.619 1256.03 111.638 1256.03 111.658C1256.02 111.679 1256.02 111.7 1256.03 111.721V112.044C1256.03 112.07 1256.02 112.096 1256.01 112.121C1256 112.148 1255.99 112.175 1255.97 112.201C1255.96 112.226 1255.95 112.248 1255.94 112.264L1255.92 112.289L1255.76 112.458L1255.69 112.5L1255.53 112.6L1255.35 112.708L1255.34 112.713L1255.34 112.713C1255.29 112.744 1255.25 112.77 1255.23 112.784L1255.19 112.813L1255.13 112.858L1255.01 112.958L1254.91 113.049L1254.87 113.088L1254.69 113.825L1254.63 114.163L1254.58 114.378L1254.29 114.947L1253.72 115.44L1253.19 116.132L1252.43 116.887L1252.15 116.948H1251.73L1251.56 117.038L1249.86 113.63L1249.94 113.499V113.426C1249.94 113.417 1249.94 113.408 1249.94 113.399C1249.94 113.392 1249.94 113.384 1249.94 113.376C1249.94 113.362 1249.93 113.353 1249.93 113.353H1249.79L1249.77 113.359C1249.77 113.361 1249.76 113.361 1249.75 113.359C1249.75 113.357 1249.74 113.355 1249.74 113.352C1249.74 113.348 1249.74 113.345 1249.73 113.341C1249.73 113.323 1249.72 113.306 1249.72 113.29C1249.71 113.273 1249.71 113.255 1249.7 113.238L1249.7 113.216L1249.68 113.149L1249.67 113.12L1249.69 112.942L1248.5 111.186L1249.17 113.232L1249.32 113.271L1249.4 113.363L1249.43 113.44L1249.4 113.556L1249.4 113.649L1249.5 113.711L1249.58 113.718H1249.6L1251.37 117.286L1251.19 117.34L1251.17 117.509L1251.22 117.724L1251.37 117.939L1251.55 118.016L1251.65 118.293H1251.82L1251.87 118.273L1253.69 121.942V122.007L1253.73 122.073C1253.75 122.113 1253.78 122.166 1253.81 122.22C1253.85 122.274 1253.88 122.331 1253.91 122.376C1253.94 122.41 1253.96 122.441 1253.99 122.467C1254.01 122.48 1254.03 122.5 1254.03 122.523C1254.04 122.55 1254.05 122.578 1254.05 122.607C1254.05 122.636 1254.05 122.665 1254.05 122.694V122.829C1254.05 122.842 1254.05 122.855 1254.05 122.87L1254.06 122.894C1254.06 122.906 1254.06 122.917 1254.06 122.929L1254.07 122.956C1254.07 122.982 1254.07 123.006 1254.07 123.029C1254.08 123.052 1254.08 123.075 1254.07 123.099C1254.07 123.145 1254.08 123.191 1254.08 123.237C1254.09 123.278 1254.09 123.326 1254.1 123.377L1254.1 123.381C1254.1 123.414 1254.1 123.449 1254.1 123.484C1254.11 123.526 1254.11 123.569 1254.11 123.61L1254.12 123.731C1254.13 123.801 1254.13 123.853 1254.13 123.868C1254.13 123.879 1254.13 123.89 1254.12 123.9C1254.12 123.916 1254.11 123.932 1254.1 123.947C1254.09 123.969 1254.07 123.994 1254.06 124.019C1254.05 124.033 1254.04 124.047 1254.03 124.061C1254 124.1 1253.97 124.136 1253.95 124.161L1253.92 124.205L1254.07 124.481L1254.56 124.639V125.278H1254.08V125.739H1254.37V126.17H1254.06V126.531C1253.76 126.553 1253.46 126.63 1253.19 126.758C1252.92 126.883 1252.67 127.055 1252.46 127.265C1252.02 127.697 1251.76 128.268 1251.7 128.879V129.521L1251.7 129.552L1251.71 129.583L1251.72 129.613L1251.72 129.644L1251.73 129.677L1251.73 129.709L1251.74 129.741L1251.75 129.774V129.806C1251.81 130.046 1251.91 130.276 1252.04 130.488C1252.17 130.699 1252.33 130.891 1252.51 131.059C1252.69 131.226 1252.9 131.368 1253.12 131.48C1253.34 131.592 1253.57 131.67 1253.82 131.712H1254.69L1255.74 131.705L1257.79 131.697L1258.24 131.691L1259.68 131.683L1259.88 131.686L1259.93 131.682C1259.99 131.681 1260.04 131.678 1260.09 131.674L1260.13 131.671C1260.62 131.624 1261.08 131.433 1261.47 131.121C1261.9 130.771 1262.21 130.293 1262.35 129.756V129.729L1262.37 129.686L1262.38 129.645L1262.38 129.604L1262.39 129.562V129.018C1262.43 129.01 1262.43 129.003 1262.43 128.996ZM1254.02 119.943L1254 120.043L1253.96 120.277L1253.95 120.391L1253.92 120.523L1253.91 120.588C1253.91 120.625 1253.9 120.651 1253.9 120.662C1253.89 120.678 1253.88 120.708 1253.87 120.746L1253.82 120.87L1253.78 120.982L1253.76 121.031L1253.74 121.381L1252.12 118.13L1252.17 118.081L1252.23 118.031L1252.28 117.984L1252.33 117.945C1252.35 117.925 1252.38 117.903 1252.4 117.881L1252.48 117.799L1252.54 117.729L1252.57 117.699L1252.87 117.513L1253.94 116.836L1253.9 116.899L1253.81 117.023L1253.77 117.089C1253.75 117.113 1253.74 117.136 1253.72 117.157C1253.7 117.186 1253.69 117.217 1253.67 117.25C1253.66 117.278 1253.66 117.307 1253.65 117.337C1253.65 117.353 1253.65 117.371 1253.65 117.39L1253.65 117.394V117.395C1253.65 117.417 1253.65 117.441 1253.65 117.465C1253.65 117.511 1253.65 117.558 1253.65 117.604C1253.66 117.645 1253.66 117.685 1253.67 117.726C1253.68 117.76 1253.69 117.794 1253.71 117.826C1253.73 117.858 1253.74 117.89 1253.76 117.92C1253.78 117.943 1253.8 117.963 1253.81 117.979L1253.81 117.988L1253.84 118.014L1254.02 118.244L1254.01 118.286L1254 118.3C1254 118.318 1253.99 118.341 1253.98 118.365C1253.97 118.382 1253.97 118.4 1253.96 118.418C1253.96 118.433 1253.95 118.449 1253.95 118.465C1253.94 118.492 1253.94 118.521 1253.93 118.55C1253.94 118.586 1253.94 118.622 1253.95 118.658C1253.96 118.704 1253.97 118.758 1253.99 118.806C1254 118.854 1254.01 118.906 1254.02 118.937L1254.04 118.994L1254.1 119.348L1254.02 119.943Z" fill="#1B023F"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M178.48 129.125C178.48 129.132 178.522 129.139 178.522 129.146V129.69L178.53 129.732L178.546 129.814L178.564 129.858V129.885C178.635 130.154 178.748 130.41 178.899 130.644C179.048 130.873 179.232 131.077 179.444 131.249C179.829 131.561 180.296 131.752 180.787 131.799H180.764L180.825 131.802C180.867 131.805 180.908 131.808 180.95 131.809L181.035 131.814L181.255 131.811L182.539 131.818L183.119 131.826L185.174 131.834L186.223 131.847H187.096C187.34 131.805 187.576 131.727 187.796 131.615C188.017 131.503 188.221 131.362 188.403 131.194C188.585 131.026 188.743 130.834 188.873 130.623C189.004 130.411 189.102 130.181 189.166 129.941V129.909L189.173 129.876L189.18 129.844L189.186 129.812L189.192 129.779L189.198 129.748L189.204 129.718L189.21 129.687L189.215 129.656V129.007C189.158 128.396 188.889 127.825 188.455 127.393C188.244 127.183 187.998 127.011 187.728 126.886C187.451 126.758 187.153 126.681 186.849 126.66V126.299H186.539V125.868H186.832V125.407H186.35V124.768L186.839 124.61L186.99 124.334L186.957 124.29C186.938 124.265 186.912 124.229 186.885 124.19C186.874 124.173 186.863 124.157 186.852 124.141C186.837 124.118 186.824 124.096 186.812 124.076C186.796 124.052 186.785 124.025 186.779 123.997C186.779 123.982 186.783 123.93 186.789 123.86C186.791 123.835 186.793 123.809 186.796 123.781C186.8 123.728 186.805 123.67 186.81 123.613C186.813 123.578 186.816 123.544 186.818 123.51C186.822 123.458 186.826 123.408 186.831 123.366C186.84 123.296 186.84 123.243 186.84 123.228C186.84 123.22 186.839 123.211 186.839 123.2C186.839 123.188 186.839 123.174 186.84 123.158C186.843 123.127 186.847 123.094 186.851 123.058C186.852 123.046 186.854 123.034 186.856 123.022C186.859 122.999 186.862 122.978 186.862 122.958V122.823C186.861 122.794 186.861 122.765 186.862 122.736C186.864 122.707 186.87 122.679 186.879 122.652C186.886 122.629 186.901 122.609 186.92 122.596C186.951 122.57 186.978 122.539 186.999 122.505C187.031 122.46 187.066 122.404 187.099 122.349C187.132 122.294 187.163 122.241 187.185 122.201L187.221 122.135V122.07L189.045 118.401L189.094 118.421H189.26L189.366 118.144L189.547 118.067L189.699 117.852L189.744 117.637L189.729 117.468L189.54 117.414L191.31 113.846H191.333L191.416 113.839L191.516 113.777L191.509 113.684L191.479 113.568L191.516 113.491L191.592 113.399L191.743 113.36L192.415 111.314L191.22 113.069L191.234 113.247L191.227 113.276L191.21 113.343C191.207 113.353 191.204 113.364 191.202 113.374C191.198 113.389 191.194 113.403 191.19 113.417C191.183 113.44 191.174 113.458 191.174 113.468C191.173 113.47 191.171 113.473 191.171 113.473C191.17 113.475 191.169 113.477 191.167 113.478C191.165 113.481 191.161 113.483 191.157 113.485C191.15 113.487 191.142 113.487 191.134 113.485L191.114 113.479H190.975C190.967 113.479 190.96 113.488 190.96 113.502C190.959 113.518 190.959 113.535 190.96 113.552V113.625L191.043 113.756L189.343 117.164L189.169 117.074H188.747L188.475 117.013L187.706 116.258L187.179 115.566L186.606 115.073L186.32 114.504L186.275 114.289L186.215 113.951L186.035 113.214L185.997 113.175L185.897 113.084L185.777 112.984C185.744 112.956 185.712 112.932 185.691 112.916L185.682 112.91C185.663 112.895 185.619 112.869 185.568 112.837L185.385 112.726L185.225 112.626L185.155 112.584L184.989 112.415L184.973 112.39C184.963 112.374 184.95 112.352 184.937 112.327C184.923 112.301 184.911 112.274 184.901 112.247C184.892 112.222 184.886 112.196 184.885 112.17V111.847C184.885 111.84 184.886 111.831 184.887 111.822C184.888 111.81 184.888 111.798 184.885 111.784C184.882 111.769 184.881 111.753 184.88 111.736C184.88 111.724 184.88 111.711 184.88 111.699C184.878 111.669 184.873 111.64 184.867 111.611C184.865 111.6 184.862 111.59 184.859 111.58C184.854 111.566 184.848 111.552 184.841 111.539C184.827 111.512 184.817 111.484 184.81 111.456C184.801 111.422 184.792 111.385 184.786 111.349C184.784 111.335 184.782 111.322 184.78 111.309C184.777 111.289 184.775 111.271 184.771 111.256C184.765 111.232 184.765 111.217 184.765 111.217L184.976 111.078L185.112 110.848V110.064L185.262 109.88L185.127 109.619L184.927 109.373L184.919 108.598L184.791 108.083L184.591 107.676L184.38 107.53L184.18 107.514L183.98 107.614L183.86 107.695L183.551 107.688H183.416L183.405 107.705C183.405 107.714 183.396 107.732 183.39 107.752C183.386 107.763 183.382 107.775 183.379 107.787C183.376 107.798 183.373 107.809 183.371 107.821C183.369 107.851 183.37 107.881 183.374 107.911C183.374 107.926 183.372 107.944 183.372 107.963C183.372 107.978 183.372 107.994 183.374 108.011C183.377 108.03 183.377 108.05 183.377 108.071C183.377 108.091 183.377 108.111 183.379 108.128C183.384 108.162 183.384 108.198 183.384 108.228V108.37C183.384 108.374 183.384 108.379 183.383 108.385C183.383 108.394 183.382 108.405 183.384 108.414C183.385 108.417 183.386 108.421 183.387 108.426C183.389 108.44 183.393 108.458 183.398 108.476C183.402 108.488 183.402 108.5 183.402 108.511C183.403 108.521 183.403 108.53 183.405 108.539C183.41 108.558 183.41 108.576 183.41 108.591C183.412 108.605 183.416 108.618 183.422 108.631C183.429 108.643 183.438 108.653 183.45 108.66L183.486 108.681L183.514 108.698L183.532 108.709H183.539L183.705 108.701L183.739 108.864L183.735 108.86V108.871C183.735 108.878 183.736 108.885 183.737 108.892C183.738 108.899 183.739 108.906 183.74 108.914C183.743 108.93 183.746 108.947 183.75 108.963C183.752 108.97 183.753 108.976 183.755 108.983C183.759 108.997 183.764 109.01 183.768 109.023C183.771 109.029 183.773 109.035 183.775 109.042C183.781 109.06 183.792 109.074 183.792 109.084L183.801 109.099L183.68 109.122L183.662 109.112C183.65 109.105 183.636 109.099 183.623 109.095C183.611 109.089 183.597 109.087 183.584 109.089C183.578 109.09 183.573 109.093 183.57 109.097C183.568 109.1 183.567 109.104 183.566 109.107C183.566 109.109 183.566 109.111 183.566 109.114C183.567 109.143 183.57 109.172 183.575 109.201C183.58 109.235 183.587 109.277 183.593 109.314C183.598 109.343 183.603 109.372 183.608 109.396L183.611 109.414L183.621 109.454L183.606 109.554L183.379 109.423L183.372 109.411C183.367 109.402 183.36 109.395 183.353 109.388C183.35 109.384 183.346 109.382 183.342 109.38C183.338 109.378 183.334 109.377 183.329 109.377C183.321 109.377 183.313 109.384 183.305 109.399L183.272 109.459C183.259 109.485 183.244 109.513 183.23 109.542C183.216 109.571 183.203 109.598 183.193 109.621C183.191 109.625 183.189 109.63 183.187 109.635C183.182 109.647 183.179 109.659 183.177 109.672V109.699C183.178 109.708 183.178 109.718 183.177 109.728C183.176 109.74 183.173 109.753 183.17 109.765C183.166 109.783 183.16 109.8 183.154 109.818C183.146 109.839 183.137 109.86 183.126 109.881C183.116 109.902 183.104 109.922 183.092 109.941L183.059 109.995C183.053 110.004 183.048 110.013 183.043 110.023C183.04 110.028 183.038 110.034 183.035 110.04L183.019 110.078L183.005 110.114C183.002 110.121 182.999 110.127 182.995 110.133C182.992 110.139 182.988 110.144 182.986 110.152C182.983 110.161 182.979 110.171 182.976 110.181C182.975 110.185 182.974 110.19 182.974 110.195C182.97 110.21 182.964 110.225 182.957 110.24C182.95 110.255 182.942 110.271 182.934 110.285C182.926 110.299 182.918 110.314 182.912 110.328C182.906 110.341 182.902 110.354 182.899 110.369C182.892 110.382 182.899 110.4 182.892 110.42C182.89 110.427 182.889 110.434 182.888 110.442C182.888 110.456 182.889 110.471 182.885 110.485C182.879 110.507 182.879 110.53 182.879 110.551V110.607C182.88 110.622 182.88 110.638 182.879 110.654C182.877 110.67 182.879 110.686 182.871 110.703C182.865 110.715 182.864 110.726 182.863 110.738C182.863 110.743 182.863 110.747 182.863 110.752C182.863 110.76 182.862 110.769 182.862 110.778C182.862 110.785 182.863 110.792 182.863 110.799V110.878C182.862 110.89 182.862 110.902 182.863 110.914C182.867 110.929 182.873 110.943 182.881 110.957C182.887 110.971 182.891 110.986 182.893 111.001C182.896 111.008 182.896 111.016 182.896 111.024C182.896 111.031 182.896 111.039 182.899 111.047C182.905 111.062 182.905 111.076 182.905 111.088C182.906 111.097 182.908 111.105 182.912 111.114C182.915 111.117 182.916 111.121 182.917 111.125C182.917 111.129 182.917 111.133 182.915 111.137V111.152C182.913 111.158 182.913 111.165 182.915 111.172C182.922 111.184 182.931 111.195 182.942 111.204C182.951 111.211 182.959 111.218 182.968 111.225C182.976 111.232 182.985 111.238 182.993 111.244L183.097 111.314C183.108 111.322 183.118 111.332 183.128 111.342C183.132 111.346 183.135 111.35 183.139 111.354C183.141 111.358 183.144 111.362 183.146 111.366C183.151 111.375 183.155 111.386 183.157 111.397C183.16 111.411 183.162 111.425 183.163 111.44V111.774C183.163 111.779 183.163 111.785 183.164 111.791C183.164 111.803 183.164 111.816 183.163 111.828C183.162 111.835 183.161 111.842 183.16 111.849C183.158 111.86 183.156 111.87 183.156 111.879C183.154 111.891 183.151 111.902 183.146 111.914C183.135 111.927 183.123 111.939 183.109 111.95C183.09 111.969 183.066 111.992 183.042 112.014L182.979 112.078L182.95 112.104L182.93 112.114L182.882 112.136C182.866 112.146 182.848 112.156 182.834 112.166C182.824 112.172 182.814 112.181 182.807 112.191L182.805 112.194C182.799 112.203 182.793 112.211 182.785 112.219L182.755 112.249L182.728 112.273L182.716 112.283L182.505 112.314L182.52 112.294C182.529 112.28 182.541 112.262 182.553 112.243C182.565 112.224 182.577 112.204 182.585 112.187C182.589 112.18 182.592 112.173 182.594 112.165C182.595 112.159 182.596 112.154 182.596 112.148C182.586 112.131 182.572 112.116 182.556 112.105C182.534 112.085 182.505 112.062 182.476 112.04L182.398 111.981L182.363 111.955C182.382 111.825 182.385 111.694 182.37 111.564C182.356 111.421 182.319 111.281 182.26 111.15C182.203 111.021 182.112 110.91 181.997 110.83C181.863 110.743 181.704 110.704 181.545 110.719C181.008 110.908 180.556 111.281 180.268 111.772C179.815 112.412 179.446 113.108 179.168 113.842C178.894 114.506 178.732 115.211 178.687 115.929C178.678 116.517 178.842 116.937 179.253 117.037C179.435 117.044 179.616 117.003 179.776 116.917C179.965 116.816 180.138 116.687 180.289 116.536C180.472 116.355 180.641 116.162 180.795 115.957C180.962 115.739 181.129 115.498 181.295 115.245L180.964 116.119L180.922 116.202L180.828 116.389L180.728 116.589L180.665 116.714L180.628 116.783L180.587 116.862C180.573 116.889 180.559 116.918 180.546 116.945C180.533 116.972 180.522 116.999 180.512 117.024C180.509 117.03 180.507 117.037 180.504 117.045C180.496 117.064 180.488 117.086 180.478 117.108L180.439 117.202L180.43 117.226C180.421 117.249 180.413 117.272 180.405 117.294C180.391 117.318 180.379 117.344 180.369 117.371C180.366 117.387 180.362 117.404 180.357 117.42L180.345 117.455C180.341 117.468 180.338 117.482 180.336 117.496C180.335 117.518 180.335 117.54 180.336 117.562V117.726C180.337 117.736 180.337 117.746 180.337 117.756C180.337 117.769 180.337 117.782 180.336 117.796C180.335 117.816 180.331 117.835 180.325 117.855C180.322 117.864 180.319 117.874 180.316 117.885C180.313 117.895 180.31 117.906 180.307 117.918C180.301 117.941 180.295 117.968 180.29 117.993C180.285 118.018 180.277 118.044 180.277 118.068C180.274 118.088 180.272 118.109 180.272 118.13V118.437C180.272 118.457 180.27 118.477 180.267 118.498C180.266 118.509 180.266 118.521 180.267 118.533V118.636L180.605 118.843L180.604 118.844L180.638 118.865C180.651 118.873 180.662 118.883 180.672 118.895C180.674 118.896 180.675 118.898 180.676 118.9C180.683 118.908 180.686 118.918 180.687 118.929C180.683 118.947 180.675 118.964 180.662 118.978C180.647 118.998 180.627 119.022 180.608 119.046C180.59 119.068 180.573 119.091 180.558 119.116C180.552 119.124 180.548 119.133 180.546 119.143C180.545 119.148 180.544 119.153 180.544 119.158C180.544 119.163 180.544 119.168 180.545 119.173C180.549 119.184 180.555 119.195 180.56 119.205C180.564 119.212 180.568 119.219 180.572 119.226C180.586 119.247 180.6 119.268 180.616 119.288C180.633 119.309 180.652 119.33 180.671 119.35C180.69 119.369 180.71 119.387 180.732 119.403C180.745 119.413 180.757 119.426 180.767 119.44C180.773 119.448 180.778 119.456 180.782 119.465C180.795 119.489 180.805 119.515 180.812 119.542C180.815 119.552 180.818 119.562 180.82 119.573C180.822 119.584 180.824 119.595 180.826 119.607V119.635C180.83 119.631 180.835 119.627 180.84 119.624C180.851 119.616 180.863 119.611 180.875 119.609C180.892 119.606 180.909 119.609 180.923 119.619C180.946 119.634 180.964 119.656 180.975 119.681C180.992 119.714 181.011 119.756 181.031 119.8C181.051 119.844 181.07 119.891 181.088 119.934L181.132 120.044L181.15 120.09H181.145L181.144 120.095L181.145 120.101C181.146 120.105 181.15 120.114 181.161 120.114C181.179 120.119 181.197 120.122 181.215 120.123C181.247 120.125 181.279 120.125 181.31 120.123C181.345 120.119 181.382 120.113 181.416 120.107L181.502 120.09L181.538 120.082L181.55 120.059L181.576 120.005C181.586 119.985 181.595 119.963 181.602 119.944C181.608 119.929 181.612 119.914 181.614 119.899V119.722L181.622 119.689L181.641 119.614L181.661 119.534L181.673 119.484C181.674 119.476 181.679 119.462 181.684 119.445L181.702 119.389L181.718 119.338L181.725 119.316L181.882 119.178L181.782 120.214L181.739 120.325L181.645 120.572C181.615 120.642 181.588 120.714 181.564 120.775L181.545 120.826C181.53 120.865 181.517 120.898 181.509 120.922C181.502 120.941 181.498 120.953 181.498 120.958L181.033 123.155L181.007 123.34C180.996 123.419 180.983 123.517 180.968 123.622L180.95 123.751C180.929 123.902 180.909 124.054 180.893 124.171C180.884 124.236 180.877 124.289 180.873 124.326C180.869 124.355 180.867 124.375 180.867 124.382C180.867 124.398 180.871 124.438 180.878 124.498C180.88 124.515 180.882 124.534 180.884 124.553C180.89 124.602 180.896 124.656 180.903 124.71C180.908 124.748 180.913 124.786 180.918 124.823C180.922 124.858 180.927 124.891 180.931 124.92C180.935 124.956 180.942 124.992 180.951 125.027L180.965 125.064L180.995 125.144L181.035 125.254L181.08 125.38H180.867V125.84H181.145V126.27H180.837V126.63C180.534 126.648 180.237 126.722 179.961 126.848C179.692 126.971 179.447 127.14 179.237 127.348C179.026 127.556 178.852 127.8 178.724 128.069C178.592 128.346 178.509 128.645 178.48 128.951V129.125ZM186.911 120.172L186.894 120.072L186.817 119.476L186.877 119.122L186.893 119.065C186.9 119.043 186.909 119.01 186.918 118.976C186.921 118.962 186.925 118.948 186.929 118.934C186.942 118.886 186.955 118.832 186.965 118.786C186.974 118.75 186.979 118.714 186.981 118.678C186.98 118.649 186.975 118.62 186.967 118.593C186.958 118.557 186.947 118.524 186.936 118.493C186.928 118.469 186.919 118.447 186.912 118.43C186.909 118.424 186.907 118.419 186.905 118.414L186.896 118.374L187.076 118.144L187.098 118.118L187.103 118.111C187.116 118.095 187.131 118.074 187.148 118.05C187.168 118.019 187.187 117.988 187.203 117.956C187.22 117.924 187.233 117.89 187.242 117.856C187.25 117.815 187.256 117.775 187.259 117.734C187.265 117.689 187.265 117.641 187.265 117.595C187.265 117.57 187.263 117.546 187.262 117.524C187.26 117.503 187.259 117.484 187.259 117.467C187.257 117.437 187.251 117.408 187.242 117.38C187.227 117.347 187.209 117.316 187.189 117.286C187.164 117.245 187.132 117.198 187.101 117.152L187.016 117.028L186.972 116.965L188.042 117.642L188.342 117.828L188.369 117.858L188.434 117.928L188.513 118.01C188.539 118.036 188.563 118.059 188.582 118.074L188.628 118.113L188.683 118.16L188.741 118.21L188.797 118.259L187.176 121.51L187.15 121.16L187.131 121.111L187.088 120.999L187.042 120.875C187.028 120.837 187.018 120.807 187.014 120.791C187.01 120.775 187 120.723 186.989 120.652C186.978 120.581 186.963 120.492 186.949 120.406L186.911 120.172Z" fill="#1B023F"/> -</g> -</g> -<defs> -<linearGradient id="paint0_linear_1702_46258" x1="720" y1="57.9355" x2="720" y2="184.936" gradientUnits="userSpaceOnUse"> -<stop stop-color="#4D14B4"/> -<stop offset="0.483" stop-color="#6118CB"/> -<stop offset="1" stop-color="#9021FE"/> -</linearGradient> -<linearGradient id="paint1_linear_1702_46258" x1="802.08" y1="185" x2="802.104" y2="17.0198" gradientUnits="userSpaceOnUse"> -<stop stop-color="#4D00B4"/> -<stop offset="1" stop-color="#7E1BD4"/> -</linearGradient> -<clipPath id="clip0_1702_46258"> -<rect width="1440" height="185" fill="white"/> -</clipPath> -<clipPath id="clip1_1702_46258"> -<rect width="1440" height="185" fill="white"/> -</clipPath> -<clipPath id="clip2_1702_46258"> -<rect width="1440" height="185" fill="white"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/hero/hero-darkmode-mobile.svg b/web/src/assets/svgs/hero/hero-darkmode-mobile.svg deleted file mode 100644 index 31d670c8a..000000000 --- a/web/src/assets/svgs/hero/hero-darkmode-mobile.svg +++ /dev/null @@ -1,53 +0,0 @@ -<svg viewBox="0 0 390 150" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_22553_72489)"> -<path d="M390 0H0V151H390V0Z" fill="#2A1260"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M380.152 150.559L320.784 18.487L108.806 9L0 144.694V150.559H6.67975L90.5434 44.5304L65.5521 150.559H192.2L264.215 119.057L260.057 150.559H289.78L294.367 116.61L327.78 150.559H366.713L301.797 84.4891L320.93 45.1631L370.026 150.559H380.152ZM123.653 32.4488L246.428 85.3812L97.8622 143.736L123.653 32.4488ZM172.037 21.265L297.093 26.3473L275.193 66.4381L172.037 21.265Z" fill="#892ED8" fill-opacity="0.15"/> -<path d="M229.029 77.5718L229.033 78.9269L207.141 68.5137L206.827 65.31L229.029 77.5718Z" fill="#1B023F"/> -<path d="M250.674 89.5286L250.6 90.4108L244.363 87.1639L244.253 85.9409L250.674 89.5286Z" fill="#1B023F"/> -<path d="M211.407 66.5273L206.994 64.0241L207.232 61.2714L211.137 64.8477L211.407 66.5273Z" fill="#1B023F"/> -<path d="M206.121 71.3561L143.602 83.2672L143.388 82.1363L143.198 81.678L143.65 81.3951L143.523 79.1879L205.508 65.2815L206.121 71.3561Z" fill="#1B023F"/> -<path d="M206.636 60.2994L205.816 62.5467L205.934 63.5064L142.651 78.4075L141.903 78.313L141.543 75.6572L145.24 74.1145L145.362 74.9674L147.045 73.9889L147.273 74.837L145.062 76.1416L148.768 75.1354L157.198 70.2308L164.916 67.1446L164.719 68.106L167.058 67.8614L167.033 66.2673L170.319 65.3703L170.131 67.1813L171.935 66.9448L172.29 62.1463L196.459 63.3156L196.438 61.8218L199.843 61.7777L200.037 60.0703L206.636 60.2994Z" fill="#1B023F"/> -<path d="M251.407 93.2247L207.544 71.3471L207.426 69.6568L229.904 80.9034L251.119 91.7032L251.407 93.2247Z" fill="#1B023F"/> -<path d="M185.481 107.098L142.425 111.766L142.948 110.423L185.481 107.098Z" fill="#1B023F"/> -<path d="M206.534 107.046L252.562 115.2L252.683 115.43L252.698 115.43C252.773 115.428 252.844 115.426 252.91 115.426C252.954 115.426 252.995 115.428 253.039 115.43C253.068 115.432 253.098 115.433 253.131 115.434L253.2 115.436C253.258 115.438 253.317 115.44 253.375 115.44C253.441 115.44 253.508 115.437 253.577 115.431H254.643V114.758H256.122V114.771L265.01 114.599L302.184 114.739H302.87V115.412H304.348V115.772L304.618 115.818C305.503 115.967 305.93 115.83 306.161 115.755C306.327 115.702 306.393 115.681 306.456 115.818C306.515 115.954 306.585 116.084 306.665 116.21C306.724 116.277 306.767 116.355 306.794 116.439C306.82 116.523 306.828 116.611 306.818 116.698C306.788 116.907 306.827 117.026 307.35 117.374C307.703 117.628 308.132 117.768 308.576 117.773C308.747 117.77 308.919 117.756 309.089 117.731C309.225 117.711 309.363 117.699 309.501 117.695C309.783 117.668 310.048 117.559 310.26 117.381C310.559 117.139 310.936 116.998 311.329 116.982C311.72 116.986 312.109 117.046 312.481 117.16C312.907 117.278 313.343 117.364 313.783 117.416C315.857 117.713 317.909 118.133 319.927 118.674C320.333 118.828 320.769 118.895 321.205 118.869C321.407 118.869 321.591 118.861 321.725 118.855C321.758 118.854 321.788 118.853 321.815 118.852C321.85 118.85 321.879 118.849 321.902 118.849C322.061 118.873 322.209 118.938 322.332 119.036C322.455 119.135 322.546 119.263 322.597 119.408C322.761 119.946 325.238 120.009 325.262 120.009C325.556 120 325.848 119.969 326.137 119.918C326.493 119.855 326.853 119.819 327.215 119.81C327.562 119.81 327.686 120.073 327.816 120.348L327.817 120.35C327.914 120.557 328.016 120.771 328.224 120.843C328.589 120.97 329.016 122.098 329.016 124.864V128.44C329.016 128.447 329.016 128.453 329.018 128.46C329.02 128.468 329.022 128.476 329.026 128.483L329.028 128.487L329.03 128.49H334.328V128.912H335.809V129.332H336.869V130.158C336.904 130.158 336.939 130.16 336.973 130.161L337.008 130.163C337.03 130.164 337.051 130.164 337.072 130.164H337.316C337.358 130.164 337.396 130.163 337.433 130.162C337.453 130.161 337.472 130.16 337.491 130.16C337.507 130.159 337.522 130.159 337.537 130.159H337.863C337.929 130.159 337.996 130.16 338.064 130.162C338.105 130.162 338.147 130.163 338.189 130.164C338.216 130.164 338.244 130.164 338.271 130.164C338.826 130.164 339.081 130.121 339.149 130.013C339.212 129.391 339.215 128.765 339.157 128.143C339.156 128.134 339.153 128.126 339.148 128.119C339.146 128.116 339.144 128.113 339.141 128.11C339.137 128.107 339.134 128.104 339.13 128.102C339.097 128.082 339.068 128.058 339.042 128.031H340.395C340.477 128.031 340.578 128.031 340.699 128.023C340.843 128.016 341.008 128.011 341.164 128.011C341.344 127.992 341.525 128.014 341.696 128.075C342.109 128.224 342.55 128.278 342.987 128.233C343.141 128.233 343.333 128.218 343.54 128.201L343.59 128.197C343.827 128.178 344.087 128.157 344.329 128.157C344.533 128.151 344.737 128.174 344.934 128.227C345.043 128.261 345.156 128.277 345.27 128.276C345.48 128.267 345.688 128.234 345.891 128.177C346.308 128.069 346.738 128.015 347.169 128.014C347.658 128.014 348.049 128.038 348.332 128.055L348.412 128.059C348.551 128.067 348.664 128.073 348.757 128.073C348.839 128.073 349.04 128.073 349.102 127.974C349.216 127.872 349.35 127.796 349.496 127.75C349.642 127.703 349.796 127.689 349.948 127.707C350.041 127.707 350.133 127.713 350.225 127.723C350.582 127.764 350.64 127.892 350.698 128.028C350.721 128.102 350.767 128.168 350.828 128.215C350.89 128.263 350.965 128.29 351.043 128.293C351.091 128.299 351.138 128.302 351.186 128.302C351.333 128.297 351.479 128.281 351.623 128.254C351.861 128.212 352.103 128.19 352.345 128.187C352.513 128.187 352.681 128.198 352.848 128.22C353.169 128.263 353.429 128.277 353.642 128.287C354.097 128.312 354.171 128.325 354.171 128.46C354.176 128.569 354.207 128.675 354.262 128.77C354.328 128.899 354.319 128.908 354.231 128.933C353.913 129.02 353.973 129.963 354.037 130.519C354.037 130.551 354.085 130.576 354.138 130.576H361.041C364.429 130.576 366.221 130.927 366.221 131.591C366.221 132.009 366.828 132.008 367.118 132.008C367.228 132.008 367.345 132.008 367.468 132.002C367.591 131.995 367.725 131.995 367.856 131.995H367.859C368.104 131.96 368.354 131.978 368.591 132.049C368.829 132.119 369.048 132.24 369.235 132.403C369.485 132.714 369.371 133.277 369.248 133.871C369.111 134.537 369.619 134.499 370.445 134.437C371.015 134.395 371.736 134.342 372.5 134.5C372.875 134.586 374.211 133.985 375.623 133.35C377.322 132.585 379.129 131.772 379.5 132.049C380.111 133.161 383.734 131.69 386.559 130.544C388.361 129.812 389.838 129.213 390 129.5V151H0V144H0.00391911L0 129.271L4.28866 129.779L5.76102 129.213L9.93285 131.845H24.3353L30.5667 128.266C30.5667 128.266 44.8397 129.115 51.8301 128.266C56.5824 127.689 59.5734 126.387 61.0015 125.612V124.963C61.0015 122.407 61.4294 121.364 61.7952 121.246C62.0034 121.18 62.1063 120.982 62.2034 120.79C62.3341 120.535 62.4592 120.292 62.8079 120.292C63.1704 120.3 63.5317 120.333 63.8882 120.391C64.1778 120.439 64.4713 120.467 64.7659 120.476C64.7904 120.476 67.2743 120.417 67.4385 119.919C67.4894 119.786 67.5812 119.667 67.7042 119.576C67.8272 119.485 67.9765 119.425 68.1358 119.403C68.1586 119.403 68.188 119.404 68.2232 119.406L68.2623 119.407L68.313 119.409C68.4478 119.415 68.6322 119.422 68.8347 119.422C69.2719 119.446 69.7097 119.384 70.116 119.242C72.14 118.742 74.1978 118.353 76.2776 118.079C76.7197 118.03 77.1567 117.951 77.5842 117.841C77.9573 117.736 78.3465 117.681 78.7386 117.678C79.1334 117.692 79.5112 117.822 79.811 118.046C80.0235 118.21 80.2897 118.312 80.5719 118.336C80.7106 118.34 80.8489 118.351 80.986 118.37C81.1563 118.393 81.328 118.405 81.5003 118.408C81.9448 118.404 82.3759 118.275 82.7293 118.039C83.2535 117.718 83.2934 117.608 83.2632 117.415C83.2529 117.335 83.2611 117.253 83.2873 117.176C83.3135 117.098 83.3572 117.026 83.4159 116.963C83.4962 116.847 83.5666 116.727 83.6266 116.602C83.7777 116.297 83.8096 116.233 85.3317 115.998L85.6018 115.955V115.622H87.0848V115H87.7724L108.797 115.135H109.484V115.758H110.968V116.379H112.03V117.599C112.099 117.605 112.166 117.608 112.232 117.608C112.291 117.608 112.349 117.606 112.408 117.604L112.477 117.602C112.51 117.601 112.54 117.6 112.569 117.599C112.593 117.598 112.615 117.597 112.638 117.596L112.672 117.595L112.698 117.595C112.765 117.595 112.838 117.597 112.914 117.598C112.95 117.599 112.987 117.6 113.025 117.601C113.157 117.604 113.296 117.608 113.433 117.608C113.989 117.608 114.245 117.544 114.313 117.386V116.958L114.304 116.708L114.296 116.464C114.295 116.442 114.285 116.42 114.268 116.404C114.234 116.372 114.204 116.337 114.18 116.299C124.539 116.263 131.784 116.119 137.239 115.968L137.483 113.9L151.915 113.003L179.924 110.358L139.041 112.901L139.127 112.112L183.046 108.83L204.939 105.904L205.033 113.173L206.913 113.321L206.877 112.23L207 112.242V111.195L206.734 111.169L206.534 107.046Z" fill="#1B023F"/> -<path d="M155.919 84.5898L153.284 83.1775L148.716 84.0842L148.763 83.4605L153.352 82.6043L155.919 83.9774V84.5898Z" fill="#1B023F"/> -<path d="M156.812 108.605L158.273 84.6599L158.256 84.6607C158.262 84.646 158.262 84.6313 158.262 84.6167C158.264 84.5817 158.262 84.5466 158.255 84.5123C158.247 84.4702 158.228 84.4308 158.2 84.3981C158.164 84.3588 158.116 84.3325 158.063 84.3231C158.038 84.317 158.012 84.3159 157.986 84.32C157.961 84.3241 157.936 84.3331 157.914 84.3468C157.877 84.3727 157.847 84.4078 157.827 84.4487C157.81 84.4844 157.797 84.5219 157.788 84.5604C157.784 84.5776 157.781 84.595 157.779 84.6126L156.175 108.655L155.826 108.68C155.889 107.773 156.012 106.007 156.166 103.809C156.32 101.612 156.504 98.9886 156.691 96.359C156.878 93.7294 157.066 91.1087 157.227 88.9186C157.389 86.7285 157.519 84.973 157.601 84.0858C157.986 83.7847 158.438 83.5811 158.918 83.4923C159.34 83.4155 159.772 83.4051 160.197 83.4613C160.526 83.5029 160.85 83.5746 161.165 83.6757C161.295 83.7163 161.423 83.7636 161.548 83.8176L161.027 108.304L160.73 108.326L161.316 84.3182C161.319 84.3032 161.321 84.2879 161.321 84.2726C161.324 84.2376 161.322 84.2026 161.315 84.1682C161.307 84.1261 161.289 84.0867 161.261 84.054C161.225 84.0146 161.177 83.988 161.125 83.9782C161.099 83.9719 161.073 83.9706 161.047 83.9747C161.021 83.9788 160.996 83.988 160.974 84.0019C160.938 84.0278 160.91 84.0626 160.893 84.103C160.875 84.1382 160.862 84.1755 160.854 84.2139C160.85 84.231 160.847 84.2485 160.845 84.266L160.111 108.37L159.797 108.391L160.547 84.0924C160.55 84.0773 160.552 84.0621 160.553 84.0467C160.555 84.0121 160.553 83.9772 160.546 83.9432C160.538 83.9013 160.52 83.8623 160.492 83.8298C160.457 83.7908 160.409 83.7646 160.357 83.7556C160.332 83.7489 160.305 83.7473 160.279 83.7511C160.254 83.7549 160.229 83.7639 160.207 83.7776C160.171 83.8037 160.143 83.8386 160.125 83.8788C160.109 83.9139 160.097 83.9508 160.09 83.9888C160.086 84.0063 160.083 84.024 160.081 84.0418L159.177 108.434L158.788 108.461L159.808 84.0964C159.811 84.0814 159.813 84.0661 159.814 84.0508C159.816 84.0159 159.814 83.9808 159.807 83.9464C159.799 83.9046 159.781 83.8655 159.753 83.8331C159.718 83.794 159.67 83.7684 159.618 83.7605C159.593 83.7539 159.567 83.7525 159.541 83.7563C159.516 83.7601 159.491 83.769 159.469 83.7825C159.433 83.8085 159.405 83.8434 159.387 83.8836C159.37 83.9189 159.357 83.9561 159.348 83.9945C159.344 84.0117 159.341 84.0291 159.339 84.0467L158.163 108.508L157.765 108.537L159.03 84.3321C159.035 84.3166 159.035 84.3019 159.035 84.2864C159.037 84.2512 159.035 84.2158 159.028 84.1812C159.02 84.1389 159.001 84.0993 158.973 84.0663C158.937 84.0274 158.889 84.0014 158.837 83.9921C158.812 83.9857 158.786 83.9845 158.76 83.9886C158.735 83.9927 158.71 84.0019 158.688 84.0157C158.653 84.0424 158.625 84.0778 158.607 84.1185C158.589 84.154 158.576 84.1915 158.567 84.2302C158.566 84.2335 158.565 84.2369 158.564 84.2404C158.561 84.2544 158.557 84.2688 158.557 84.2832L157.156 108.582L156.812 108.605Z" fill="#1B023F"/> -<path d="M160.745 81.8109L156.034 82.7486L156.067 82.1045L160.796 81.2182L163.462 82.6369L163.476 83.2705L160.745 81.8109Z" fill="#1B023F"/> -<path d="M165.261 107.993L166.508 83.1922L166.507 83.1962C166.51 83.1825 166.511 83.1686 166.512 83.1547C166.514 83.1187 166.512 83.0824 166.505 83.047C166.496 83.0035 166.477 82.9628 166.449 82.9288C166.413 82.8866 166.364 82.8579 166.309 82.8473C166.283 82.8408 166.255 82.8397 166.229 82.844C166.202 82.8484 166.176 82.8581 166.153 82.8726C166.115 82.8995 166.084 82.9361 166.065 82.9786C166.047 83.0155 166.033 83.0543 166.025 83.0943C166.02 83.1123 166.017 83.1306 166.016 83.149L164.629 108.043L164.272 108.068L164.312 107.393C164.37 106.394 164.458 104.884 164.565 103.086C164.681 101.132 164.818 98.8398 164.958 96.4981L165.026 95.3675C165.189 92.64 165.353 89.9167 165.497 87.6336C165.641 85.3505 165.76 83.5224 165.83 82.6018C166.224 82.2902 166.688 82.0795 167.182 81.9879C167.618 81.9082 168.063 81.8972 168.502 81.9553C168.841 81.9978 169.176 82.0718 169.502 82.1762C169.637 82.2182 169.769 82.2672 169.899 82.323L169.627 107.681L169.322 107.704L169.663 82.8416C169.666 82.8259 169.668 82.8101 169.668 82.7943C169.67 82.7579 169.667 82.7215 169.66 82.6858C169.651 82.6423 169.632 82.6017 169.603 82.5676C169.566 82.5268 169.517 82.4995 169.463 82.4902C169.437 82.4837 169.41 82.4826 169.383 82.4868C169.357 82.491 169.332 82.5004 169.309 82.5146C169.271 82.5413 169.241 82.5776 169.222 82.6198C169.204 82.6563 169.191 82.6949 169.183 82.7348C169.178 82.7525 169.175 82.7704 169.174 82.7886L168.679 107.75L168.353 107.774L168.869 82.6141C168.871 82.6048 168.873 82.5955 168.874 82.5861C168.874 82.5797 168.875 82.5732 168.875 82.5668C168.878 82.5308 168.875 82.4945 168.868 82.4591C168.859 82.4154 168.84 82.3747 168.811 82.341C168.774 82.2984 168.723 82.2697 168.668 82.2594C168.642 82.2527 168.615 82.2513 168.589 82.2554C168.562 82.2594 168.537 82.2688 168.514 82.283C168.476 82.3098 168.446 82.3461 168.427 82.3882C168.41 82.4252 168.397 82.464 168.389 82.504C168.385 82.522 168.382 82.5403 168.381 82.5586L167.716 107.813L167.309 107.845L168.103 82.6198C168.108 82.6046 168.108 82.5887 168.108 82.5735C168.109 82.5374 168.106 82.5002 168.099 82.4649C168.09 82.4214 168.07 82.3808 168.042 82.3466C168.005 82.3045 167.956 82.2758 167.901 82.2651C167.847 82.2522 167.791 82.261 167.744 82.2895C167.706 82.316 167.675 82.3523 167.655 82.3948C167.638 82.4314 167.624 82.47 167.615 82.5097C167.611 82.5274 167.608 82.5454 167.606 82.5635L166.661 107.893L166.254 107.92L167.295 82.8522C167.3 82.8367 167.3 82.8204 167.3 82.8049C167.302 82.7688 167.299 82.7326 167.292 82.6972C167.283 82.6539 167.263 82.6135 167.234 82.5798C167.198 82.5393 167.148 82.5123 167.094 82.5032C167.068 82.4965 167.041 82.4953 167.014 82.4995C166.987 82.5037 166.962 82.5133 166.939 82.5277C166.9 82.5543 166.87 82.5906 166.85 82.6328C166.833 82.6696 166.82 82.7086 166.811 82.7486C166.807 82.7666 166.804 82.7848 166.802 82.8032L165.617 107.968L165.261 107.993Z" fill="#1B023F"/> -<path d="M190.488 78.4279L187.442 76.8257L182.32 77.8555L182.34 77.1461L187.486 76.1726L190.448 77.7291L190.488 78.4279Z" fill="#1B023F"/> -<path d="M169.023 80.2478L164.177 81.2182L164.21 80.5487L169.078 79.6387L171.842 81.1064L171.865 81.7587L169.023 80.2478Z" fill="#1B023F"/> -<path d="M174.158 107.346L175.199 81.4432L175.204 81.444C175.209 81.4293 175.214 81.4143 175.217 81.3992C175.219 81.3617 175.215 81.3241 175.207 81.2874C175.198 81.2426 175.177 81.2009 175.148 81.1659C175.11 81.1233 175.058 81.0946 175.002 81.0844C174.975 81.0776 174.947 81.0762 174.92 81.0805C174.893 81.0847 174.866 81.0943 174.843 81.1089C174.804 81.1365 174.774 81.1739 174.754 81.2173C174.736 81.2553 174.723 81.2952 174.715 81.3364C174.711 81.3549 174.708 81.3737 174.706 81.3926L173.517 107.397L173.147 107.424C173.166 107.033 173.201 106.32 173.247 105.369C173.285 104.597 173.331 103.668 173.382 102.629C173.495 100.31 173.638 97.4451 173.783 94.5424C173.928 91.6396 174.077 88.7026 174.208 86.245C174.338 83.7874 174.447 81.806 174.513 80.8276C174.917 80.5064 175.393 80.2893 175.9 80.1956C176.348 80.1142 176.807 80.1035 177.259 80.1638C177.61 80.2086 177.955 80.2856 178.292 80.3938C178.43 80.437 178.567 80.4876 178.7 80.5455L178.679 107.023L178.359 107.043L178.461 81.0779C178.464 81.0616 178.466 81.0453 178.466 81.029C178.467 80.9918 178.464 80.9544 178.456 80.9181C178.446 80.8734 178.426 80.8317 178.396 80.7966C178.358 80.7542 178.307 80.7255 178.251 80.7151C178.224 80.7078 178.195 80.7063 178.167 80.7105C178.139 80.7147 178.112 80.7246 178.088 80.7395C178.049 80.7671 178.019 80.8045 177.999 80.8479C177.982 80.8859 177.969 80.926 177.961 80.967C177.957 80.9856 177.954 81.0044 177.953 81.0233L177.697 107.091L177.357 107.117L177.638 80.8439C177.641 80.8276 177.643 80.8113 177.643 80.795C177.645 80.7575 177.641 80.7199 177.633 80.6833C177.624 80.6381 177.603 80.596 177.573 80.5609C177.535 80.5178 177.483 80.489 177.426 80.4794C177.399 80.472 177.37 80.4703 177.342 80.4745C177.314 80.4787 177.287 80.4887 177.263 80.5038C177.224 80.531 177.193 80.5685 177.173 80.6123C177.156 80.6503 177.142 80.6903 177.134 80.7314C177.13 80.7497 177.127 80.7682 177.125 80.7868L176.692 107.164L176.275 107.195L176.845 80.8431C176.848 80.8271 176.85 80.8111 176.85 80.795C176.852 80.758 176.849 80.721 176.841 80.6849C176.831 80.6401 176.81 80.5986 176.779 80.5642C176.74 80.5218 176.688 80.4931 176.631 80.4826C176.604 80.4762 176.577 80.4753 176.55 80.4799C176.523 80.4845 176.497 80.4946 176.474 80.5096C176.435 80.5373 176.404 80.5751 176.385 80.6189C176.367 80.6568 176.354 80.6968 176.346 80.7379C176.341 80.7561 176.338 80.7747 176.337 80.7933L175.613 107.241L175.19 107.272L176.006 81.0885C176.011 81.0722 176.011 81.0567 176.011 81.0404C176.012 81.0032 176.009 80.9659 176.001 80.9295C175.991 80.8848 175.971 80.8431 175.941 80.808C175.903 80.7656 175.852 80.7369 175.796 80.7265C175.768 80.7195 175.74 80.7182 175.712 80.7229C175.684 80.7275 175.657 80.7379 175.633 80.7534C175.594 80.781 175.564 80.8184 175.544 80.8618C175.527 80.9007 175.515 80.9415 175.507 80.9833C175.503 81.0016 175.5 81.0201 175.498 81.0387L174.526 107.323L174.158 107.346Z" fill="#1B023F"/> -<path d="M177.764 78.4034L172.781 79.4047L172.809 78.7166L177.812 77.7715L180.676 79.2841L180.708 79.9608L177.764 78.4034Z" fill="#1B023F"/> -<path d="M196.879 75.0652L191.616 76.1252L191.634 75.3939L196.918 74.3942L199.98 75.9989L200.024 76.7164L196.879 75.0652Z" fill="#1B023F"/> -<path d="M149.75 109.12L151.299 85.9262C151.305 85.9124 151.311 85.8982 151.315 85.8838C151.317 85.8503 151.316 85.8166 151.31 85.7835C151.304 85.7435 151.287 85.7057 151.263 85.6734C151.231 85.6356 151.188 85.61 151.14 85.6008C151.117 85.5947 151.093 85.5934 151.069 85.5972C151.046 85.601 151.023 85.6097 151.003 85.6228C150.968 85.6477 150.94 85.6814 150.922 85.7207C150.906 85.7551 150.894 85.7912 150.886 85.8283C150.882 85.845 150.879 85.8619 150.877 85.8789L149.202 109.158L148.882 109.183C148.902 108.913 148.929 108.559 148.961 108.133C149.03 107.211 149.123 105.957 149.233 104.504L149.247 104.325C149.405 102.238 149.592 99.7637 149.781 97.2869C149.976 94.7388 150.173 92.19 150.341 90.0618C150.508 87.9337 150.645 86.227 150.726 85.366C151.073 85.0784 151.486 84.8822 151.928 84.7952C152.311 84.7214 152.704 84.7117 153.09 84.7667C153.388 84.8073 153.682 84.8769 153.967 84.9746C154.085 85.0139 154.2 85.0599 154.313 85.1124L153.609 108.84L153.337 108.861L154.096 85.5943C154.099 85.5797 154.1 85.565 154.101 85.5503C154.103 85.5167 154.101 85.4831 154.096 85.45C154.089 85.4101 154.072 85.3725 154.047 85.3407C154.015 85.3036 153.971 85.2785 153.923 85.2698C153.9 85.2632 153.876 85.2617 153.853 85.2653C153.829 85.269 153.807 85.2777 153.787 85.291C153.752 85.3163 153.724 85.3503 153.706 85.3896C153.69 85.4243 153.678 85.4607 153.671 85.4981C153.667 85.5151 153.664 85.5322 153.663 85.5495L152.766 108.899L152.476 108.921L153.393 85.384C153.396 85.3691 153.397 85.3541 153.398 85.3391C153.4 85.3053 153.399 85.2713 153.393 85.238C153.386 85.1975 153.369 85.1594 153.344 85.1271C153.312 85.089 153.268 85.0633 153.219 85.0546C153.196 85.0484 153.172 85.0473 153.149 85.0512C153.126 85.0552 153.104 85.0641 153.084 85.0773C153.049 85.1027 153.021 85.1367 153.003 85.176C152.987 85.2104 152.975 85.2465 152.967 85.2836C152.965 85.292 152.963 85.3003 152.962 85.3088C152.96 85.3172 152.959 85.3257 152.958 85.3342L151.91 108.962L151.555 108.989L152.722 85.3856C152.723 85.3754 152.725 85.3651 152.725 85.3548C152.726 85.3504 152.726 85.346 152.726 85.3416C152.728 85.308 152.726 85.2743 152.72 85.2412C152.713 85.2013 152.696 85.1638 152.671 85.132C152.64 85.0944 152.596 85.0688 152.548 85.0594C152.525 85.0532 152.501 85.052 152.477 85.0557C152.454 85.0595 152.431 85.0683 152.412 85.0814C152.376 85.1063 152.348 85.14 152.33 85.1793C152.314 85.2134 152.302 85.2492 152.293 85.2861C152.291 85.2937 152.289 85.3014 152.288 85.3092C152.286 85.3182 152.284 85.3274 152.284 85.3366L150.987 109.03L150.626 109.057L152.006 85.6098C152.007 85.6034 152.008 85.597 152.009 85.5905C152.01 85.5823 152.011 85.574 152.011 85.5658C152.014 85.532 152.012 85.4981 152.007 85.4647C152 85.4245 151.983 85.3866 151.958 85.3546C151.927 85.3168 151.883 85.2912 151.835 85.282C151.812 85.2754 151.788 85.274 151.764 85.2778C151.741 85.2816 151.718 85.2905 151.698 85.304C151.663 85.3289 151.635 85.3626 151.617 85.4019C151.601 85.4362 151.588 85.4724 151.581 85.5095C151.577 85.5258 151.572 85.543 151.572 85.5601L150.061 109.094L149.75 109.12Z" fill="#1B023F"/> -<path d="M186.176 106.474L186.512 79.3379C186.512 79.321 186.512 79.3039 186.512 79.2865C186.513 79.2484 186.509 79.2103 186.501 79.1732C186.49 79.127 186.469 79.0842 186.438 79.0484C186.398 79.0056 186.345 78.9769 186.287 78.9669C186.259 78.96 186.231 78.9587 186.203 78.9631C186.175 78.9674 186.148 78.9773 186.124 78.9921C186.084 79.0204 186.052 79.0591 186.033 79.1038C186.014 79.1429 186.001 79.184 185.992 79.2262C185.99 79.2358 185.988 79.2455 185.987 79.2552C185.985 79.2648 185.984 79.2744 185.984 79.2841L185.494 106.524L185.06 106.557L185.656 79.5931C185.659 79.5766 185.661 79.56 185.661 79.5433C185.662 79.505 185.659 79.4666 185.65 79.4292C185.64 79.3833 185.618 79.3408 185.587 79.3053C185.547 79.2621 185.494 79.2334 185.435 79.2237C185.408 79.2164 185.379 79.2149 185.351 79.2192C185.323 79.2236 185.296 79.2337 185.272 79.249C185.233 79.2771 185.202 79.3158 185.183 79.3607C185.165 79.3998 185.152 79.4409 185.144 79.483C185.142 79.4936 185.14 79.5042 185.139 79.5149C185.138 79.5235 185.137 79.5322 185.136 79.5409L184.385 106.607L184.007 106.634L184.827 79.9559C184.832 79.94 184.832 79.9233 184.832 79.9074V79.9062C184.834 79.8679 184.831 79.8295 184.822 79.792C184.813 79.7458 184.791 79.7029 184.76 79.6673C184.72 79.6242 184.667 79.5955 184.609 79.5857C184.581 79.5789 184.553 79.5776 184.525 79.5819C184.497 79.5863 184.47 79.5962 184.446 79.611C184.406 79.6388 184.374 79.6772 184.354 79.7219C184.336 79.761 184.323 79.802 184.315 79.8442C184.311 79.8631 184.309 79.8821 184.307 79.9013L183.334 106.68L182.953 106.711C182.986 105.953 183.057 104.116 183.149 101.722C183.226 99.7253 183.324 97.3432 183.425 94.8772C183.445 94.3862 183.466 93.892 183.486 93.3967C183.608 90.414 183.735 87.4004 183.845 84.8784C183.955 82.3564 184.049 80.3285 184.107 79.3207C184.52 78.9888 185.008 78.7647 185.529 78.6684C185.99 78.5836 186.462 78.5723 186.926 78.635C187.286 78.6815 187.641 78.7607 187.986 78.8715C188.13 78.9164 188.271 78.9686 188.409 79.028L188.642 106.295L188.316 106.319L188.169 79.5743C188.172 79.5576 188.174 79.5407 188.174 79.5238C188.176 79.4852 188.173 79.4466 188.165 79.4088C188.155 79.3621 188.134 79.3186 188.103 79.2824C188.063 79.2393 188.01 79.2106 187.952 79.2009C187.924 79.1943 187.895 79.1935 187.867 79.1984C187.839 79.2033 187.812 79.2138 187.789 79.2294C187.749 79.2585 187.718 79.2977 187.698 79.3428C187.68 79.3821 187.667 79.4235 187.659 79.4659C187.655 79.485 187.652 79.5043 187.651 79.5238L187.638 106.367L187.286 106.392L187.33 79.3338C187.331 79.3172 187.331 79.3006 187.33 79.2841C187.331 79.2456 187.327 79.2072 187.318 79.1699C187.308 79.1235 187.286 79.0804 187.255 79.0443C187.214 79.0013 187.161 78.9727 187.103 78.9628C187.076 78.9558 187.047 78.9545 187.019 78.959C186.991 78.9635 186.964 78.9737 186.94 78.9889C186.9 79.0172 186.869 79.0559 186.849 79.1006C186.832 79.1397 186.819 79.1807 186.811 79.2229C186.807 79.242 186.804 79.2613 186.803 79.2808L186.609 106.444L186.176 106.474Z" fill="#1B023F"/> -<path d="M204.964 105.111L204.834 76.0666L204.834 76.0706C204.838 76.0551 204.841 76.0392 204.843 76.0233C204.844 75.9824 204.839 75.9416 204.83 75.9018C204.818 75.8526 204.794 75.807 204.761 75.769C204.718 75.7224 204.66 75.6914 204.598 75.6809C204.569 75.6735 204.539 75.6722 204.509 75.6769C204.48 75.6817 204.452 75.6925 204.427 75.7086C204.385 75.7389 204.353 75.7801 204.333 75.8276C204.314 75.8693 204.301 75.9132 204.293 75.9581C204.289 75.9783 204.286 75.9987 204.285 76.0192L204.251 105.174L203.791 105.207L203.937 76.3421C203.942 76.3242 203.941 76.3071 203.941 76.2892C203.943 76.2486 203.939 76.208 203.93 76.1685C203.919 76.1193 203.896 76.0736 203.862 76.0356C203.819 75.9891 203.762 75.9579 203.699 75.9467C203.67 75.9394 203.64 75.9383 203.61 75.9433C203.58 75.9484 203.552 75.9595 203.526 75.976C203.485 76.0067 203.453 76.0482 203.433 76.0959C203.415 76.1377 203.403 76.1815 203.395 76.2264C203.388 76.2467 203.388 76.2671 203.388 76.2875L203.076 105.254L202.674 105.285L203.071 76.7287V76.6757C203.071 76.6347 203.067 76.5939 203.057 76.5541C203.045 76.5049 203.021 76.4594 202.988 76.4213C202.944 76.3754 202.887 76.3448 202.825 76.334C202.796 76.3268 202.765 76.3256 202.736 76.3305C202.706 76.3354 202.678 76.3463 202.653 76.3625C202.612 76.3929 202.579 76.4341 202.559 76.4816C202.541 76.523 202.528 76.5665 202.52 76.6112C202.516 76.6314 202.513 76.6518 202.511 76.6724L201.956 105.34L201.556 105.366C201.565 104.881 201.605 103.087 201.662 100.596C201.718 98.1048 201.791 94.9199 201.87 91.6534C201.948 88.387 202.03 85.0423 202.104 82.2365C202.179 79.4308 202.245 77.164 202.29 76.0568C202.722 75.7043 203.236 75.466 203.784 75.3637C204.272 75.2739 204.771 75.2618 205.263 75.3278C205.646 75.3769 206.024 75.4607 206.393 75.5781C206.546 75.6247 206.696 75.6791 206.844 75.7412L207.522 102.425C207.562 100.686 207.612 98.5247 207.667 96.196C207.722 93.8672 207.781 91.3868 207.84 89.0205C207.894 86.8455 207.949 84.7697 207.996 82.9989L208.009 82.5391C208.058 80.6727 208.106 79.196 208.14 78.3806C208.552 78.0448 209.041 77.818 209.564 77.721C210.029 77.6354 210.505 77.6239 210.973 77.6867C211.339 77.7333 211.7 77.813 212.051 77.9248C212.197 77.9699 212.341 78.0224 212.481 78.0822L213.195 106.441H212.861L212.254 78.6366V78.5861C212.254 78.547 212.249 78.5082 212.24 78.4703C212.228 78.4234 212.206 78.38 212.174 78.3439C212.132 78.3008 212.078 78.2722 212.02 78.2624C211.992 78.2548 211.963 78.2532 211.935 78.2576C211.907 78.2619 211.88 78.2722 211.856 78.2877C211.817 78.3163 211.786 78.3553 211.768 78.4002C211.75 78.4399 211.738 78.4815 211.73 78.5241C211.728 78.5332 211.727 78.5423 211.725 78.5515C211.724 78.5616 211.723 78.5718 211.722 78.582L212.169 106.399L211.816 106.334L211.387 78.392V78.3415C211.387 78.3025 211.383 78.2636 211.374 78.2257C211.362 78.1789 211.34 78.1355 211.308 78.0993C211.266 78.0562 211.212 78.0276 211.154 78.0178C211.126 78.0108 211.097 78.0095 211.069 78.014C211.041 78.0185 211.014 78.0286 210.991 78.0439C210.95 78.0724 210.919 78.1117 210.901 78.1572C210.884 78.1969 210.871 78.2386 210.864 78.2811C210.861 78.2999 210.857 78.3195 210.857 78.339L211.119 106.206L210.682 106.125L210.566 78.3969V78.3463C210.566 78.3076 210.562 78.269 210.553 78.2314C210.541 78.1845 210.519 78.1411 210.487 78.105C210.445 78.0619 210.391 78.0333 210.333 78.0235C210.305 78.0166 210.276 78.0155 210.248 78.0202C210.22 78.0248 210.193 78.0351 210.169 78.0504C210.129 78.079 210.098 78.1182 210.08 78.1637C210.063 78.2034 210.05 78.245 210.042 78.2877C210.037 78.3072 210.035 78.3268 210.035 78.3463L210.006 105.997L209.569 105.915L209.716 78.6595C209.719 78.6425 209.72 78.6253 209.72 78.6081C209.722 78.5686 209.718 78.5291 209.709 78.4907C209.698 78.4436 209.676 78.3999 209.644 78.3635C209.604 78.3197 209.549 78.291 209.49 78.2819C209.463 78.275 209.434 78.2737 209.406 78.2781C209.378 78.2824 209.351 78.2923 209.327 78.3072C209.287 78.3356 209.256 78.375 209.238 78.4205C209.221 78.4604 209.209 78.5024 209.202 78.5453C209.199 78.5647 209.197 78.5843 209.196 78.604L208.892 105.789L208.517 105.719L208.895 79.0239V78.9726C208.896 78.9333 208.891 78.894 208.881 78.856C208.87 78.8086 208.847 78.7649 208.814 78.7288C208.772 78.6856 208.717 78.6571 208.658 78.6472C208.63 78.6404 208.601 78.6392 208.573 78.6439C208.545 78.6485 208.519 78.6588 208.495 78.6742C208.455 78.7029 208.424 78.7421 208.405 78.7875C208.387 78.827 208.374 78.8687 208.367 78.9114C208.364 78.923 208.362 78.9346 208.361 78.9464C208.36 78.954 208.359 78.9617 208.358 78.9693L207.837 105.593L207.461 105.525V105.486H207.26L206.608 76.316V76.263C206.609 76.2224 206.604 76.1818 206.594 76.1424C206.582 76.0934 206.558 76.048 206.525 76.0103C206.481 75.9647 206.424 75.9344 206.362 75.9238C206.333 75.9162 206.303 75.9146 206.273 75.9193C206.244 75.9239 206.215 75.9346 206.19 75.9508C206.149 75.981 206.116 76.0222 206.097 76.0698C206.078 76.1115 206.065 76.1554 206.057 76.2003C206.054 76.2205 206.051 76.2409 206.049 76.2614L206.522 105.349L206.154 105.28L205.699 76.06V76.007C205.699 75.9664 205.695 75.9258 205.685 75.8864C205.673 75.8372 205.649 75.7916 205.615 75.7534C205.572 75.707 205.515 75.6758 205.452 75.6645C205.423 75.6574 205.393 75.6562 205.363 75.6611C205.333 75.666 205.305 75.6769 205.28 75.6931C205.238 75.7234 205.206 75.7646 205.187 75.8122C205.169 75.8537 205.156 75.8972 205.149 75.9418C205.146 75.962 205.144 75.9825 205.143 76.003L205.421 105.146L205.159 105.097L204.964 105.111Z" fill="#1B023F"/> -<path d="M193.606 105.931L194.216 78.2893C194.221 78.2699 194.225 78.2504 194.228 78.2306C194.229 78.1908 194.225 78.1511 194.216 78.1123C194.205 78.0644 194.182 78.0199 194.15 77.9827C194.109 77.9394 194.054 77.9108 193.995 77.9012C193.966 77.8939 193.936 77.8926 193.907 77.8972C193.878 77.9018 193.851 77.9123 193.826 77.9281C193.785 77.9574 193.753 77.9975 193.733 78.0439C193.715 78.0844 193.702 78.1267 193.694 78.1702C193.69 78.1899 193.687 78.2097 193.686 78.2297L192.917 105.981L192.528 106.011C192.546 105.39 192.601 103.575 192.677 101.129C192.753 98.6829 192.85 95.6146 192.95 92.4859C193.05 89.3573 193.156 86.174 193.249 83.5061C193.341 80.8382 193.422 78.6888 193.474 77.6288C193.897 77.2869 194.398 77.0559 194.932 76.9569C195.407 76.8699 195.893 76.8581 196.372 76.9219C196.745 76.9698 197.112 77.0516 197.471 77.1665C197.619 77.2131 197.766 77.2675 197.909 77.3296L198.398 105.587L198.057 105.614L197.667 77.8955C197.668 77.8784 197.668 77.8612 197.667 77.8441C197.668 77.8046 197.664 77.7652 197.655 77.7267C197.644 77.6789 197.621 77.6346 197.588 77.5978C197.545 77.5545 197.49 77.5259 197.43 77.5163C197.402 77.5095 197.374 77.5084 197.346 77.513C197.318 77.5176 197.291 77.5279 197.267 77.5432C197.226 77.5726 197.194 77.6126 197.175 77.659C197.157 77.6995 197.144 77.7419 197.136 77.7854C197.132 77.805 197.129 77.8249 197.127 77.8449L197.358 105.659L197.003 105.689L196.792 77.6476V77.5954C196.793 77.5554 196.789 77.5154 196.78 77.4764C196.769 77.4285 196.747 77.384 196.715 77.3467C196.673 77.3035 196.619 77.2748 196.56 77.2652C196.531 77.2579 196.502 77.2566 196.473 77.2612C196.444 77.2658 196.416 77.2764 196.391 77.2921C196.35 77.3207 196.318 77.3603 196.298 77.4062C196.28 77.4461 196.267 77.488 196.259 77.531C196.255 77.5503 196.252 77.57 196.251 77.5897L196.285 105.733L195.839 105.764L195.944 77.646C195.946 77.6287 195.947 77.6112 195.948 77.5938C195.948 77.554 195.944 77.5143 195.935 77.4755C195.925 77.4274 195.902 77.3827 195.869 77.3459C195.827 77.3027 195.772 77.2741 195.713 77.2644C195.684 77.2571 195.655 77.2557 195.626 77.2604C195.597 77.265 195.569 77.2755 195.545 77.2912C195.504 77.3204 195.472 77.3606 195.453 77.407C195.436 77.4474 195.423 77.4899 195.415 77.5334C195.41 77.5459 195.409 77.5587 195.408 77.5714C195.408 77.5786 195.408 77.5859 195.408 77.593L195.139 105.819L194.693 105.848L195.066 77.9118C195.067 77.8944 195.067 77.8769 195.066 77.8596C195.067 77.8195 195.063 77.7796 195.054 77.7405C195.043 77.6926 195.021 77.6481 194.989 77.6109C194.947 77.567 194.892 77.5383 194.832 77.5294C194.805 77.5225 194.776 77.5212 194.748 77.5255C194.72 77.5299 194.693 77.5397 194.669 77.5546C194.628 77.5838 194.597 77.624 194.578 77.6704C194.56 77.7108 194.547 77.7533 194.539 77.7968C194.535 77.8165 194.533 77.8364 194.531 77.8563L193.998 105.906L193.606 105.931Z" fill="#1B023F"/> -<path d="M142.944 85.2144L142.998 84.6126L147.444 83.7866L149.913 85.1124V85.7028L147.381 84.3419L142.944 85.2144Z" fill="#1B023F"/> -<path d="M143.767 109.553L145.538 86.9919C145.539 86.977 145.54 86.962 145.54 86.947C145.542 86.9144 145.54 86.8815 145.535 86.8492C145.528 86.8105 145.512 86.7741 145.488 86.7432C145.458 86.7074 145.416 86.6835 145.37 86.6755C145.348 86.6698 145.325 86.6687 145.302 86.6725C145.279 86.6763 145.258 86.6848 145.239 86.6975C145.206 86.7221 145.179 86.7546 145.162 86.7921C145.147 86.8253 145.135 86.86 145.126 86.8957C145.122 86.9128 145.117 86.9299 145.117 86.947L143.224 109.598L142.913 109.618C142.976 108.896 143.115 107.301 143.293 105.259C143.472 103.217 143.689 100.732 143.91 98.2279C144.13 95.7238 144.354 93.2092 144.544 91.099C144.734 88.9888 144.891 87.2976 144.979 86.4513C145.316 86.1732 145.717 85.9833 146.146 85.8985C146.517 85.8276 146.896 85.8185 147.269 85.8715C147.557 85.9108 147.839 85.9782 148.114 86.0729C148.227 86.1111 148.339 86.1555 148.447 86.2059L147.5 109.281L147.237 109.302L148.24 86.6731C148.243 86.659 148.244 86.6449 148.245 86.6307C148.247 86.5983 148.246 86.5657 148.24 86.5336C148.234 86.4949 148.218 86.4583 148.195 86.4268C148.165 86.3903 148.123 86.3655 148.076 86.3567C148.054 86.3506 148.031 86.3493 148.008 86.3529C147.985 86.3566 147.963 86.3651 147.943 86.3779C147.908 86.4015 147.88 86.4342 147.862 86.4725C147.846 86.5059 147.834 86.5409 147.826 86.5768C147.822 86.593 147.819 86.6093 147.817 86.6258L146.681 109.337L146.404 109.359L147.554 86.4643C147.556 86.4503 147.558 86.4361 147.559 86.4219C147.564 86.3897 147.564 86.3571 147.559 86.3249C147.554 86.2863 147.538 86.2498 147.515 86.2189C147.485 86.1825 147.443 86.1579 147.397 86.1496C147.375 86.1437 147.351 86.1426 147.329 86.1464C147.306 86.1502 147.284 86.1588 147.265 86.1716C147.232 86.1959 147.205 86.2285 147.189 86.2662C147.174 86.2992 147.162 86.334 147.155 86.3697C147.151 86.3859 147.148 86.4022 147.147 86.4187L145.856 109.402L145.509 109.426L146.913 86.4709C146.916 86.4569 146.917 86.4427 146.919 86.4285C146.923 86.3963 146.923 86.3636 146.919 86.3314C146.912 86.293 146.896 86.2566 146.873 86.2254C146.843 86.189 146.801 86.1644 146.755 86.1561C146.733 86.1499 146.71 86.1485 146.687 86.152C146.664 86.1555 146.642 86.1639 146.623 86.1765C146.588 86.2004 146.559 86.233 146.541 86.2711C146.525 86.3043 146.512 86.3394 146.504 86.3755C146.502 86.384 146.5 86.3927 146.499 86.4013C146.497 86.409 146.496 86.4167 146.495 86.4244L144.966 109.467L144.617 109.491L146.218 86.6861C146.221 86.6721 146.223 86.6579 146.224 86.6437C146.227 86.6113 146.225 86.5787 146.22 86.5467C146.213 86.5082 146.197 86.4719 146.174 86.4407C146.144 86.4043 146.103 86.3797 146.057 86.3714C146.034 86.365 146.011 86.3635 145.988 86.3669C145.965 86.3702 145.943 86.3784 145.924 86.391C145.89 86.4148 145.863 86.4472 145.846 86.4847C145.831 86.5179 145.819 86.5526 145.81 86.5883C145.806 86.6046 145.801 86.6209 145.801 86.6372L144.072 109.532L143.767 109.553Z" fill="#1B023F"/> -<path d="M200.383 73.7394L205.809 72.708L208.968 74.3583L209.02 75.0995L205.772 73.3986L200.373 74.4937L200.383 73.7394Z" fill="#1B023F"/> -<path d="M225.935 82.8114L222.993 81.3625L220.961 81.7955L221.833 80.9996L223.016 80.764L225.87 82.1673L225.935 82.8114Z" fill="#1B023F"/> -<path d="M234.695 88.2892L235.434 87.5977L236.453 87.3955L238.963 88.6137L239.033 89.1706L236.453 87.9174L234.695 88.2892Z" fill="#1B023F"/> -<path d="M230.764 85.1997L227.933 83.8094L225.978 84.222L226.81 83.4556L227.951 83.2321L230.702 84.5808L230.764 85.1997Z" fill="#1B023F"/> -<path d="M230.482 86.3804L231.276 85.6465L232.354 85.4353L234.98 86.722L235.036 87.3115L232.345 85.9857L230.482 86.3804Z" fill="#1B023F"/> -<path d="M238.541 90.1311L239.242 89.4788L240.214 89.2848L242.595 90.4409L242.657 90.9726L240.211 89.7788L238.541 90.1311Z" fill="#1B023F"/> -<path d="M242.566 91.0859L243.475 90.9025L245.71 91.9878L245.776 92.4843L243.474 91.3681L241.914 91.6991L242.566 91.0859Z" fill="#1B023F"/> -<path d="M245.481 94.491L247.074 112.906L246.757 112.848L245.268 94.7079C245.269 94.6965 245.269 94.685 245.268 94.6736C245.266 94.6459 245.261 94.6184 245.252 94.5921C245.24 94.5551 245.218 94.5222 245.188 94.4973C245.158 94.4723 245.122 94.4563 245.083 94.451C245.064 94.4458 245.044 94.4447 245.025 94.4478C245.005 94.4509 244.987 94.4581 244.97 94.469C244.944 94.4898 244.924 94.5183 244.915 94.5505C244.905 94.5769 244.899 94.6042 244.897 94.632C244.896 94.6387 244.896 94.6454 244.896 94.6522C244.896 94.659 244.896 94.6659 244.897 94.6728L245.732 105.611L244.656 94.248C244.932 94.1281 245.227 94.058 245.528 94.0409C245.8 94.0244 246.073 94.037 246.343 94.0784C246.548 94.1092 246.75 94.1537 246.949 94.2113C247.098 94.2586 247.186 94.2928 247.186 94.2928L249.351 113.33L249.112 113.285L247.059 94.6736C247.06 94.662 247.06 94.6502 247.059 94.6386C247.057 94.6108 247.051 94.5834 247.042 94.557C247.031 94.5245 247.012 94.495 246.987 94.4706C246.956 94.4413 246.917 94.4221 246.875 94.4152C246.855 94.4104 246.835 94.4096 246.816 94.413C246.796 94.4163 246.777 94.4237 246.761 94.4347C246.734 94.4552 246.714 94.4837 246.704 94.5162C246.691 94.5566 246.684 94.5992 246.685 94.6418L248.62 113.192L248.368 113.145L246.435 94.5114C246.436 94.4997 246.436 94.488 246.435 94.4763C246.434 94.4486 246.43 94.421 246.421 94.3947C246.409 94.3576 246.387 94.3245 246.357 94.2993C246.327 94.2742 246.291 94.2581 246.253 94.2529C246.233 94.2481 246.213 94.2474 246.193 94.2508C246.173 94.2541 246.154 94.2615 246.138 94.2725C246.111 94.2932 246.091 94.3216 246.082 94.354C246.067 94.394 246.06 94.4363 246.061 94.4788L247.873 113.055L247.563 112.996L245.86 94.5228C245.861 94.5111 245.861 94.4994 245.86 94.4877C245.858 94.4599 245.853 94.4325 245.843 94.4062C245.833 94.3736 245.814 94.3439 245.789 94.3197C245.758 94.2902 245.719 94.2709 245.676 94.2643C245.657 94.2594 245.637 94.2585 245.617 94.2617C245.597 94.2649 245.579 94.2722 245.562 94.2831C245.535 94.3035 245.514 94.332 245.504 94.3646C245.489 94.4051 245.482 94.4479 245.481 94.491Z" fill="#1B023F"/> -<path d="M220.469 80.4411L217.487 78.8918L214.643 79.474L215.637 78.6244L217.507 78.2697L220.407 79.7692L220.469 80.4411Z" fill="#1B023F"/> -<path d="M245.384 93.0429L245.885 92.4721L246.327 92.3824L248.541 93.4367L248.623 93.9259L246.34 92.8382L245.384 93.0429Z" fill="#1B023F"/> -<path d="M234.039 90.3349L234.638 107.199C234.638 107.199 234.59 106.185 234.516 104.643C234.442 103.101 234.344 101.041 234.245 98.943C234.145 96.845 234.046 94.7128 233.971 93.0364C233.896 91.3599 233.842 90.1409 233.842 89.871C234.169 89.599 234.559 89.4141 234.977 89.3337C235.353 89.2619 235.738 89.2481 236.118 89.2929C236.418 89.3262 236.714 89.3859 237.004 89.4715C237.226 89.5367 237.359 89.5921 237.359 89.5921L238.952 111.391L238.677 111.34L237.19 90.0325C237.19 90.0233 237.19 90.0141 237.19 90.0049C237.19 90.0008 237.19 89.9966 237.19 89.9925C237.189 89.9616 237.184 89.9309 237.176 89.9012C237.164 89.8588 237.141 89.8208 237.108 89.7918C237.075 89.7628 237.034 89.7441 236.991 89.7381C236.968 89.732 236.945 89.7306 236.923 89.7342C236.9 89.7377 236.878 89.746 236.859 89.7585C236.828 89.7816 236.804 89.813 236.79 89.849C236.772 89.8954 236.762 89.9445 236.761 89.9941L238.111 111.237L237.826 111.181L236.48 89.8465C236.481 89.8332 236.481 89.8199 236.48 89.8066C236.479 89.7756 236.474 89.7449 236.465 89.7152C236.453 89.6779 236.433 89.6438 236.406 89.6158C236.37 89.5819 236.326 89.5594 236.277 89.5514C236.255 89.5461 236.231 89.5453 236.209 89.5493C236.186 89.5532 236.164 89.5617 236.144 89.5742C236.113 89.5974 236.089 89.6291 236.076 89.6655C236.058 89.7119 236.048 89.761 236.046 89.8106L237.26 111.075L236.906 111.008L235.815 89.8588C235.815 89.8541 235.815 89.8494 235.816 89.8447C235.816 89.8361 235.815 89.8274 235.815 89.8188C235.814 89.7878 235.809 89.7571 235.799 89.7275C235.787 89.6846 235.762 89.6464 235.728 89.6174C235.694 89.5884 235.653 89.57 235.609 89.5644C235.587 89.5589 235.564 89.558 235.541 89.5618C235.519 89.5656 235.498 89.574 235.479 89.5864C235.448 89.6095 235.425 89.6409 235.411 89.6769C235.398 89.7086 235.39 89.7417 235.385 89.7756C235.383 89.791 235.382 89.8065 235.381 89.8221L236.345 110.905L235.991 110.838L235.123 90.074C235.123 90.0607 235.123 90.0474 235.123 90.0341C235.122 90.0029 235.117 89.9719 235.108 89.9419C235.096 89.8997 235.071 89.8619 235.038 89.833C235.005 89.8041 234.964 89.7853 234.921 89.7788C234.898 89.7736 234.875 89.7729 234.852 89.7769C234.83 89.7808 234.808 89.7892 234.789 89.8017C234.758 89.8245 234.735 89.8556 234.721 89.8914C234.708 89.9225 234.699 89.9551 234.695 89.9884C234.694 90.0036 234.694 90.0189 234.695 90.0341L235.439 110.737L235.132 110.681L234.467 90.3733C234.468 90.36 234.468 90.3467 234.467 90.3334C234.466 90.3021 234.461 90.2711 234.452 90.2412C234.439 90.1986 234.414 90.1605 234.381 90.1315C234.347 90.1026 234.306 90.084 234.262 90.0781C234.24 90.0727 234.217 90.0719 234.194 90.0759C234.172 90.0798 234.151 90.0883 234.132 90.1009C234.101 90.124 234.078 90.1554 234.064 90.1915C234.052 90.2229 234.043 90.2558 234.039 90.2893C234.039 90.2977 234.038 90.3061 234.038 90.3145C234.039 90.3213 234.039 90.3281 234.039 90.3349Z" fill="#1B023F"/> -<path d="M214.554 77.4772L211.46 75.8578L209.138 76.3291L210.002 75.4819L211.49 75.2014L214.507 76.7727L214.554 77.4772Z" fill="#1B023F"/> -<path d="M241.935 93.2557L242.832 111.683L242.624 109.323L242.151 102.859L241.732 93.5549C241.733 93.5433 241.733 93.5315 241.732 93.5198C241.731 93.4921 241.726 93.4646 241.718 93.4383C241.706 93.4006 241.684 93.3668 241.654 93.3411C241.624 93.3154 241.588 93.2988 241.549 93.2932H241.497L241.477 93.2989L241.457 93.3062L241.43 92.9434C241.722 92.7681 242.049 92.657 242.388 92.6172C242.696 92.5798 243.007 92.582 243.315 92.6237C243.551 92.6547 243.785 92.7037 244.014 92.7705C244.188 92.8211 244.292 92.8627 244.292 92.8627L245.997 112.707L245.752 112.661L244.149 93.2548C244.15 93.2429 244.15 93.2309 244.149 93.219C244.147 93.1913 244.142 93.1639 244.134 93.1374C244.124 93.1041 244.106 93.0736 244.081 93.0485C244.05 93.0182 244.01 92.9983 243.966 92.9915C243.947 92.9865 243.926 92.9857 243.906 92.989C243.886 92.9924 243.867 92.9999 243.851 93.0111C243.824 93.0321 243.803 93.0604 243.792 93.0926C243.779 93.1327 243.773 93.1745 243.774 93.2165L245.253 112.559L244.996 112.513L243.522 93.0853C243.523 93.0733 243.523 93.0613 243.522 93.0494C243.52 93.0217 243.515 92.9943 243.507 92.9678C243.497 92.9345 243.479 92.904 243.454 92.8789C243.423 92.8482 243.382 92.828 243.339 92.8211C243.318 92.8162 243.298 92.8155 243.277 92.819C243.257 92.8225 243.238 92.8302 243.22 92.8415C243.193 92.8619 243.172 92.8904 243.161 92.923C243.145 92.9642 243.137 93.0078 243.137 93.0518L244.491 112.42L244.169 112.361L242.927 93.0983C242.927 93.0926 242.927 93.0868 242.927 93.0811C242.927 93.0749 242.927 93.0686 242.927 93.0624C242.925 93.0348 242.92 93.0073 242.912 92.9809C242.901 92.9475 242.883 92.9171 242.859 92.892C242.827 92.8617 242.787 92.8417 242.744 92.8349C242.724 92.83 242.704 92.8291 242.683 92.8325C242.663 92.8359 242.644 92.8434 242.627 92.8545C242.599 92.875 242.578 92.9034 242.566 92.936C242.555 92.964 242.548 92.9934 242.544 93.0233C242.543 93.0368 242.543 93.0505 242.544 93.0641L243.673 112.268L243.356 112.21L242.319 93.2883C242.319 93.2763 242.319 93.2643 242.319 93.2524C242.318 93.2247 242.313 93.1973 242.305 93.1709C242.294 93.1333 242.272 93.0997 242.242 93.0742C242.213 93.0487 242.176 93.0324 242.137 93.0273C242.118 93.0225 242.097 93.0216 242.077 93.0249C242.057 93.0281 242.038 93.0353 242.021 93.0461C241.993 93.0666 241.972 93.0951 241.96 93.1277C241.945 93.1686 241.936 93.2119 241.935 93.2557Z" fill="#1B023F"/> -<path d="M251.745 95.4213L249.5 94.3614L248.567 94.5538L249.045 94.0001L249.472 93.9186L251.659 94.9508L251.745 95.4213Z" fill="#1B023F"/> -<path d="M215.155 106.957L215.073 81.9145C215.074 81.8993 215.073 81.884 215.072 81.8688C215.073 81.8314 215.068 81.7941 215.058 81.7579C215.047 81.713 215.025 81.6716 214.994 81.6372C214.955 81.5947 214.903 81.5661 214.846 81.5557C214.819 81.5488 214.791 81.5475 214.764 81.5518C214.737 81.5562 214.711 81.5661 214.688 81.581C214.651 81.6085 214.623 81.6458 214.607 81.6886C214.591 81.7262 214.579 81.7656 214.573 81.8061C214.569 81.8244 214.567 81.8429 214.566 81.8615L214.504 106.838L214.144 106.772C214.146 106.359 214.149 105.859 214.152 105.288C214.159 104.171 214.166 102.782 214.176 101.236L214.183 100.2C214.196 98.1211 214.21 95.8232 214.227 93.5533C214.246 90.8992 214.267 88.2867 214.288 86.1105C214.309 83.9342 214.331 82.1966 214.352 81.2997C214.742 80.9792 215.207 80.7631 215.703 80.6719C216.148 80.5905 216.602 80.5795 217.05 80.6392C217.4 80.6839 217.746 80.76 218.084 80.8667C218.224 80.9099 218.361 80.9603 218.496 81.0175L219.632 107.794L219.314 107.735L218.286 81.5508V81.5027C218.286 81.4653 218.281 81.428 218.271 81.3918C218.259 81.3467 218.237 81.305 218.206 81.2703C218.166 81.228 218.114 81.1995 218.057 81.1888C218.031 81.1821 218.004 81.1808 217.977 81.1852C217.95 81.1895 217.925 81.1994 217.903 81.2141C217.866 81.2416 217.837 81.2789 217.821 81.3217C217.805 81.3597 217.794 81.3993 217.788 81.4399C217.784 81.4582 217.782 81.4768 217.781 81.4954L218.65 107.621L218.313 107.558L217.456 81.3242V81.276C217.456 81.2386 217.451 81.2013 217.441 81.1652C217.429 81.1202 217.407 81.0788 217.376 81.0445C217.336 81.0022 217.284 80.9736 217.227 80.9629C217.2 80.9563 217.173 80.9551 217.146 80.9594C217.119 80.9638 217.094 80.9736 217.071 80.9882C217.034 81.0157 217.006 81.053 216.989 81.0958C216.973 81.1337 216.962 81.1734 216.956 81.2141C216.953 81.2324 216.951 81.2509 216.95 81.2695L217.649 107.433L217.231 107.351L216.672 81.3233V81.2752C216.672 81.2381 216.667 81.201 216.657 81.1652C216.646 81.1205 216.623 81.0794 216.592 81.0453C216.553 81.0028 216.501 80.9742 216.445 80.9637C216.418 80.9566 216.391 80.9549 216.364 80.959C216.337 80.9631 216.311 80.9728 216.288 80.9874C216.251 81.0149 216.223 81.0522 216.207 81.095C216.184 81.1506 216.171 81.2096 216.167 81.2695L216.575 107.231L216.156 107.149L215.855 81.5696V81.5206C215.856 81.4833 215.851 81.446 215.842 81.4098C215.831 81.3647 215.809 81.3229 215.779 81.2883C215.739 81.2458 215.687 81.2172 215.63 81.2067C215.604 81.1998 215.576 81.1985 215.549 81.2029C215.522 81.2072 215.496 81.2171 215.474 81.232C215.437 81.2597 215.408 81.2973 215.392 81.3404C215.376 81.3783 215.364 81.418 215.358 81.4587C215.354 81.477 215.352 81.4955 215.351 81.5141L215.514 107.023L215.155 106.957Z" fill="#1B023F"/> -<path d="M239.235 111.365L239.238 111.444L239.241 111.447L239.235 111.365Z" fill="#1B023F"/> -<path d="M238.538 91.7929L239.235 111.365L238.721 104.318L238.328 92.1182C238.329 92.1054 238.329 92.0926 238.328 92.0799C238.326 92.0503 238.321 92.021 238.312 91.9926C238.302 91.957 238.282 91.9245 238.256 91.898C238.223 91.8656 238.18 91.8443 238.134 91.8369C238.113 91.8322 238.091 91.8318 238.069 91.8357C238.048 91.8396 238.027 91.8478 238.009 91.8597C237.98 91.8819 237.957 91.9118 237.944 91.9462C237.932 91.9762 237.924 92.0077 237.92 92.0399C237.919 92.0546 237.919 92.0693 237.92 92.084L238.001 94.3882L237.799 91.5972C238.109 91.3566 238.473 91.1951 238.86 91.1267C239.21 91.0656 239.567 91.0565 239.92 91.0998C240.195 91.1308 240.468 91.1854 240.735 91.2629C240.938 91.3224 241.061 91.3738 241.061 91.3738L242.571 112.066L242.311 112.014L240.904 91.7929C240.905 91.7804 240.905 91.7678 240.904 91.7553C240.903 91.7261 240.898 91.697 240.89 91.669C240.879 91.6287 240.856 91.5925 240.825 91.5649C240.794 91.5372 240.755 91.5193 240.714 91.5132C240.692 91.508 240.67 91.5072 240.648 91.5108C240.627 91.5145 240.606 91.5225 240.587 91.5344C240.558 91.5565 240.535 91.5865 240.522 91.6208C240.51 91.6509 240.502 91.6824 240.498 91.7146C240.497 91.7293 240.497 91.744 240.498 91.7586L241.771 111.92L241.496 111.867L240.225 91.6208C240.225 91.6083 240.225 91.5958 240.225 91.5833C240.224 91.5539 240.219 91.5249 240.21 91.4969C240.198 91.4566 240.175 91.4206 240.143 91.3931C240.112 91.3656 240.073 91.3479 240.031 91.342C240.01 91.3368 239.987 91.3361 239.965 91.3398C239.943 91.3436 239.923 91.3518 239.904 91.364C239.875 91.3847 239.853 91.4128 239.839 91.4455C239.827 91.4753 239.818 91.5065 239.814 91.5385C239.814 91.5529 239.814 91.5673 239.814 91.5817L240.962 111.767L240.625 111.704L239.595 91.6298C239.596 91.617 239.596 91.6042 239.595 91.5915C239.594 91.5618 239.589 91.5325 239.58 91.5042C239.569 91.4637 239.545 91.4275 239.513 91.4001C239.481 91.3727 239.442 91.3553 239.4 91.3501C239.379 91.3449 239.357 91.344 239.336 91.3475C239.315 91.351 239.294 91.3588 239.276 91.3705C239.247 91.391 239.225 91.4193 239.212 91.452C239.195 91.496 239.185 91.5426 239.183 91.5898L240.094 111.599L239.76 111.537L238.944 91.8288C238.945 91.816 238.945 91.8032 238.944 91.7904C238.943 91.7609 238.939 91.7316 238.931 91.7032C238.919 91.6626 238.896 91.6261 238.865 91.5984C238.833 91.5707 238.794 91.553 238.752 91.5474C238.731 91.5424 238.708 91.5416 238.687 91.5453C238.665 91.5489 238.645 91.5568 238.626 91.5686C238.597 91.5908 238.575 91.6208 238.562 91.6551C238.55 91.6853 238.543 91.7168 238.538 91.7488C238.537 91.7635 238.537 91.7782 238.538 91.7929Z" fill="#1B023F"/> -<path d="M252.83 113.975L252.596 113.931L250.234 96.1495C250.235 96.1384 250.235 96.1272 250.234 96.116C250.231 96.0898 250.225 96.0641 250.216 96.0394C250.204 96.0084 250.186 95.9805 250.162 95.9578C250.13 95.9293 250.092 95.9106 250.05 95.904C250.031 95.8991 250.012 95.898 249.993 95.901C249.974 95.9039 249.955 95.9108 249.939 95.9212C249.914 95.9401 249.895 95.9667 249.886 95.997C249.877 96.0233 249.871 96.0507 249.87 96.0785C249.869 96.0915 249.869 96.1047 249.87 96.1177L252.114 113.842L251.864 113.795L249.617 95.9978C249.617 95.9933 249.617 95.9888 249.618 95.9843C249.618 95.9774 249.617 95.9705 249.617 95.9636C249.615 95.9357 249.609 95.9083 249.599 95.882C249.587 95.8513 249.568 95.8235 249.544 95.8005C249.514 95.7714 249.475 95.7521 249.433 95.745C249.415 95.7406 249.395 95.7401 249.376 95.7435C249.357 95.7468 249.339 95.754 249.323 95.7646C249.297 95.7842 249.278 95.8109 249.268 95.8412C249.255 95.8806 249.248 95.922 249.249 95.9636L251.378 113.71L251.077 113.653L249.057 96.0068C249.058 95.9954 249.058 95.9839 249.057 95.9725C249.055 95.9446 249.049 95.9172 249.039 95.891C249.027 95.86 249.008 95.8322 248.983 95.8094C248.952 95.7808 248.913 95.7621 248.871 95.7556C248.852 95.7509 248.833 95.7501 248.814 95.7533C248.794 95.7566 248.776 95.7637 248.76 95.7744C248.735 95.7937 248.717 95.8202 248.707 95.8502C248.698 95.8765 248.692 95.904 248.691 95.9318C248.69 95.9448 248.69 95.9579 248.691 95.9709L250.597 113.562L250.297 113.504L248.488 96.1845C248.489 96.1795 248.489 96.1745 248.489 96.1695C248.489 96.1634 248.489 96.1572 248.488 96.1511C248.486 96.1249 248.48 96.0991 248.471 96.0744C248.457 96.0384 248.435 96.0066 248.405 95.9821C248.376 95.9576 248.34 95.9414 248.303 95.935C248.284 95.9303 248.264 95.9295 248.245 95.9327C248.226 95.9359 248.208 95.9431 248.192 95.9538C248.167 95.9735 248.148 96.0002 248.138 96.0304C248.129 96.0568 248.123 96.0842 248.121 96.112C248.12 96.125 248.12 96.138 248.121 96.1511L249.181 106.82L247.885 95.7393C248.153 95.6215 248.44 95.5524 248.732 95.5355C248.999 95.5184 249.267 95.5305 249.531 95.5713C249.731 95.6015 249.929 95.6448 250.123 95.701C250.269 95.7434 250.356 95.7768 250.356 95.7768L252.83 113.975Z" fill="#1B023F"/> -<path d="M221.009 108.048L220.66 84.1935C220.66 84.178 220.659 84.1624 220.658 84.147C220.657 84.1111 220.652 84.0755 220.642 84.041C220.63 83.998 220.608 83.9585 220.578 83.926C220.538 83.8868 220.487 83.8609 220.432 83.8518C220.406 83.8458 220.379 83.8451 220.353 83.8497C220.326 83.8543 220.301 83.8642 220.279 83.8788C220.242 83.9054 220.214 83.9415 220.197 83.9831C220.181 84.0193 220.17 84.0574 220.164 84.0964C220.161 84.114 220.16 84.1317 220.159 84.1494L220.367 107.931L220.014 107.865C220.008 106.649 219.998 104.74 219.987 102.506C219.975 100.272 219.963 97.7134 219.953 95.1987C219.943 92.6841 219.936 90.2159 219.933 88.1612C219.93 86.1064 219.932 84.4683 219.943 83.617C220.323 83.3036 220.776 83.0905 221.259 82.9973C221.694 82.914 222.139 82.898 222.579 82.95C222.923 82.9884 223.263 83.0575 223.595 83.1563C223.733 83.1949 223.869 83.2414 224.002 83.2957L225.024 101.939C225.02 101.065 225.017 100.163 225.014 99.2528C225.011 98.5512 225.008 97.8444 225.005 97.141C225.004 96.8396 225.003 96.5389 225.002 96.2395C224.996 94.9337 224.991 93.6537 224.991 92.4558C224.991 91.9456 224.991 91.4505 224.99 90.9749C224.99 90.0776 224.99 89.2497 224.991 88.5207C224.991 87.4053 224.996 86.5206 225.003 85.9743C225.368 85.6736 225.803 85.4693 226.268 85.3799C226.686 85.2999 227.114 85.2845 227.536 85.3342C227.868 85.3709 228.195 85.437 228.515 85.5315C228.647 85.5693 228.778 85.614 228.906 85.6652L229.549 97.4068C229.547 96.9109 229.545 96.42 229.544 95.9373C229.542 95.4129 229.541 94.8983 229.539 94.398C229.535 93.4375 229.535 92.53 229.535 91.7073C229.535 91.4215 229.535 91.146 229.534 90.8821C229.534 90.3865 229.534 89.9319 229.535 89.5269C229.536 89.203 229.538 88.9111 229.54 88.6556C229.542 88.4218 229.544 88.2186 229.544 88.0494C229.893 87.7614 230.309 87.5652 230.753 87.4787C231.151 87.402 231.559 87.3874 231.962 87.4355C232.277 87.4704 232.589 87.5335 232.893 87.6238C233.019 87.6603 233.143 87.703 233.264 87.7518L234.546 110.568L234.261 110.513L233.124 88.2256C233.125 88.2173 233.125 88.2089 233.125 88.2006C233.125 88.1948 233.124 88.189 233.124 88.1832C233.124 88.1506 233.119 88.1182 233.11 88.087C233.099 88.0421 233.074 88.0017 233.039 87.9712C233.004 87.9406 232.961 87.9213 232.915 87.9157C232.891 87.9097 232.867 87.9085 232.843 87.9123C232.819 87.9161 232.796 87.9247 232.776 87.9377C232.743 87.9618 232.717 87.9949 232.703 88.0331C232.689 88.0666 232.679 88.1016 232.674 88.1375C232.669 88.1538 232.669 88.1701 232.669 88.1864L233.668 110.406L233.364 110.348L232.376 88.029C232.377 88.0149 232.377 88.0008 232.376 87.9866C232.376 87.9538 232.371 87.9212 232.362 87.8896C232.351 87.8499 232.33 87.8135 232.301 87.7836C232.265 87.7473 232.218 87.7231 232.167 87.7143C232.143 87.709 232.118 87.7086 232.094 87.7129C232.07 87.7173 232.047 87.7263 232.027 87.7396C231.993 87.7641 231.968 87.7974 231.952 87.8358C231.938 87.869 231.929 87.9038 231.923 87.9394C231.921 87.9556 231.919 87.9719 231.918 87.9883L232.771 110.236L232.399 110.168L231.672 88.0421C231.673 88.028 231.673 88.0138 231.672 87.9997C231.672 87.9669 231.667 87.9342 231.658 87.9027C231.646 87.8578 231.622 87.8174 231.587 87.7869C231.552 87.7563 231.508 87.737 231.462 87.7314C231.439 87.7253 231.414 87.7242 231.389 87.7281C231.365 87.7321 231.342 87.741 231.321 87.7543C231.288 87.778 231.263 87.8108 231.248 87.8488C231.234 87.882 231.224 87.9168 231.219 87.9524C231.217 87.9683 231.215 87.9844 231.214 88.0005L231.811 110.059L231.438 109.99L230.94 88.2688C230.941 88.2546 230.941 88.2405 230.94 88.2264C230.94 88.1935 230.935 88.1609 230.926 88.1294C230.915 88.0899 230.894 88.0538 230.866 88.0242C230.828 87.9877 230.78 87.9637 230.729 87.9557C230.705 87.9498 230.681 87.9488 230.657 87.9527C230.634 87.9566 230.611 87.9654 230.591 87.9785C230.558 88.0027 230.533 88.0354 230.518 88.0731C230.504 88.1062 230.495 88.141 230.49 88.1766C230.485 88.193 230.485 88.2093 230.485 88.2256L230.857 109.881L230.53 109.822L230.233 88.5827C230.234 88.5683 230.234 88.5539 230.233 88.5395C230.233 88.5064 230.228 88.4735 230.219 88.4417C230.208 88.4019 230.188 88.3654 230.159 88.3356C230.123 88.2996 230.076 88.2761 230.026 88.2688C230.002 88.2635 229.977 88.263 229.953 88.2673C229.928 88.2717 229.905 88.2808 229.885 88.294C229.851 88.3185 229.825 88.3518 229.81 88.3902C229.796 88.4235 229.786 88.4583 229.78 88.4938C229.777 88.5101 229.775 88.5264 229.775 88.5427L229.899 103.301L230.252 109.767L229.633 109.651C229.63 109.247 229.628 108.792 229.625 108.288L229.623 107.906C229.622 107.512 229.62 107.094 229.617 106.657C229.614 106.077 229.611 105.461 229.607 104.82C229.606 104.601 229.605 104.379 229.603 104.154C229.6 103.722 229.597 103.28 229.597 102.832L228.744 86.1561C228.745 86.1414 228.745 86.1268 228.744 86.1121C228.743 86.0779 228.739 86.0439 228.729 86.011C228.718 85.9698 228.697 85.9319 228.667 85.9009C228.629 85.8631 228.58 85.8383 228.526 85.83C228.501 85.824 228.475 85.823 228.45 85.8272C228.425 85.8314 228.4 85.8407 228.379 85.8544C228.342 85.8791 228.314 85.914 228.297 85.9547C228.283 85.9897 228.272 86.0265 228.267 86.064C228.264 86.0814 228.262 86.0985 228.262 86.1153L229.322 109.593L229.002 109.532L227.951 85.9523C227.951 85.9373 227.951 85.9224 227.951 85.9074C227.951 85.8726 227.946 85.8381 227.936 85.8047C227.925 85.7632 227.903 85.7251 227.874 85.6938C227.836 85.656 227.787 85.6314 227.734 85.6237C227.708 85.6177 227.682 85.6169 227.657 85.6213C227.631 85.6256 227.606 85.635 227.584 85.6489C227.548 85.6737 227.52 85.7082 227.503 85.7484C227.488 85.7831 227.478 85.8196 227.473 85.8568C227.47 85.8736 227.469 85.8905 227.468 85.9074L228.375 109.417L227.983 109.344L227.209 85.9645C227.209 85.9498 227.209 85.9351 227.209 85.9205C227.208 85.8862 227.203 85.8523 227.193 85.8194C227.182 85.7781 227.16 85.7403 227.13 85.7093C227.092 85.6713 227.043 85.6462 226.99 85.6375C226.965 85.6312 226.939 85.6301 226.913 85.6341C226.888 85.6382 226.863 85.6474 226.842 85.6612C226.805 85.6862 226.777 85.721 226.76 85.7614C226.745 85.7967 226.735 85.8337 226.729 85.8715C226.726 85.8885 226.724 85.9057 226.723 85.9229L227.363 109.23L226.968 109.158L226.438 86.2009C226.439 86.1921 226.439 86.1833 226.439 86.1744C226.439 86.1683 226.438 86.1622 226.438 86.1561C226.437 86.1216 226.432 86.0873 226.423 86.0542C226.41 86.0071 226.384 85.9647 226.347 85.9322C226.311 85.8997 226.266 85.8787 226.218 85.8715C226.193 85.8657 226.167 85.8649 226.141 85.8692C226.116 85.8736 226.092 85.8829 226.07 85.8968C226.034 85.9219 226.006 85.9566 225.989 85.9971C225.974 86.0321 225.964 86.0688 225.958 86.1064C225.955 86.1234 225.953 86.1405 225.952 86.1577L226.352 109.043L226.016 108.979L225.69 86.5288C225.69 86.5138 225.69 86.4989 225.69 86.4839C225.689 86.4495 225.685 86.4152 225.676 86.382C225.664 86.335 225.638 86.2927 225.602 86.2606C225.566 86.2286 225.521 86.2083 225.473 86.2026C225.448 86.1965 225.422 86.1956 225.397 86.1998C225.372 86.204 225.348 86.2133 225.327 86.2271C225.291 86.2522 225.262 86.2869 225.245 86.3273C225.23 86.3622 225.219 86.3989 225.213 86.4366C225.212 86.4465 225.21 86.4565 225.209 86.4665C225.208 86.4736 225.208 86.4808 225.208 86.488L225.405 108.722L225.411 108.861L225.066 108.798V108.136L223.812 83.7988C223.813 83.7836 223.813 83.7684 223.812 83.7532C223.811 83.7176 223.806 83.6822 223.796 83.648C223.783 83.5992 223.756 83.5553 223.718 83.5217C223.68 83.4881 223.633 83.4663 223.583 83.4588C223.558 83.4527 223.531 83.4519 223.505 83.4564C223.479 83.4609 223.455 83.4705 223.432 83.4849C223.396 83.5113 223.368 83.5475 223.351 83.5893C223.335 83.6258 223.325 83.6642 223.319 83.7034C223.318 83.7107 223.317 83.7179 223.316 83.7253C223.315 83.7359 223.314 83.7466 223.313 83.7573L224.449 108.683L224.117 108.621L222.995 83.5885C222.995 83.5828 222.995 83.5772 222.995 83.5715C222.995 83.5617 222.995 83.5518 222.995 83.542C222.994 83.5061 222.989 83.4705 222.979 83.436C222.967 83.3927 222.945 83.353 222.915 83.3202C222.876 83.281 222.825 83.2551 222.77 83.246C222.744 83.2398 222.717 83.2389 222.69 83.2434C222.664 83.2479 222.638 83.2576 222.616 83.2721C222.579 83.2985 222.551 83.3347 222.534 83.3765C222.518 83.4127 222.508 83.4508 222.502 83.4898C222.499 83.5073 222.497 83.5251 222.496 83.5428L223.468 108.501L223.056 108.427L222.23 83.5991C222.231 83.5839 222.231 83.5686 222.23 83.5534C222.229 83.5181 222.223 83.483 222.213 83.449C222.2 83.4002 222.173 83.3564 222.135 83.323C222.097 83.2896 222.05 83.2683 222 83.2615C221.974 83.255 221.947 83.2539 221.921 83.2582C221.895 83.2626 221.87 83.2723 221.847 83.2868C221.811 83.3132 221.783 83.3494 221.766 83.3911C221.75 83.4277 221.74 83.4661 221.734 83.5053C221.733 83.5127 221.732 83.5202 221.731 83.5277C221.73 83.5381 221.729 83.5486 221.728 83.5591L222.412 108.307L222.001 108.232L221.43 83.8518C221.431 83.8363 221.431 83.8208 221.43 83.8053C221.43 83.7695 221.424 83.7338 221.414 83.6993C221.402 83.6502 221.375 83.606 221.337 83.5722C221.299 83.5384 221.252 83.5166 221.202 83.5094C221.176 83.503 221.149 83.5018 221.122 83.5061C221.096 83.5103 221.071 83.5197 221.048 83.5338C221.012 83.56 220.983 83.5963 220.967 83.6382C220.952 83.6749 220.942 83.7132 220.936 83.7523C220.931 83.7703 220.931 83.7883 220.931 83.8062L221.362 108.115L221.009 108.048Z" fill="#1B023F"/> -</g> -<defs> -<clipPath id="clip0_22553_72489"> -<rect width="390" height="151" fill="white"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/hero/hero-lightmode-desktop.svg b/web/src/assets/svgs/hero/hero-lightmode-desktop.svg deleted file mode 100644 index ffd6e9135..000000000 --- a/web/src/assets/svgs/hero/hero-lightmode-desktop.svg +++ /dev/null @@ -1,15 +0,0 @@ -<svg viewBox="0 0 1440 184" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_10831_116781)"> -<path d="M1440 0H0V185H1440V0Z" fill="#4D00B4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M952.586 185L880.033 23.5941L620.972 12L488 177.832V185H496.163L598.654 55.422L568.112 185H722.889L810.899 146.501L805.818 185H842.143L847.748 143.512L888.582 185H936.163L856.829 104.256L880.212 56.1953L940.212 185H952.586ZM639.117 40.657L789.161 105.346L607.598 176.662L639.117 40.657ZM698.248 26.9892L851.079 33.2003L824.316 82.1957L698.248 26.9892Z" fill="#5C16BA"/> -<path d="M767.645 98.2871L767.638 96.398L736.555 79.3044L736.994 83.7705L767.645 98.2871ZM797.84 114.296L797.943 113.066L788.954 108.065L789.107 109.77L797.84 114.296ZM736.788 77.5118L742.967 81.0015L742.589 78.6599L737.122 73.6744L736.788 77.5118ZM648.036 104.338L735.566 87.7329L734.708 79.2646L647.925 98.6509L648.102 101.728L647.469 102.122L647.736 102.761L648.036 104.338ZM735.139 75.4522L736.288 72.3194L727.048 72L726.776 74.3802L722.009 74.4416L722.038 76.5241L688.201 74.894L687.704 81.5835L685.177 81.9131L685.441 79.3885L680.841 80.6389L680.875 82.8611L677.601 83.2021L677.876 81.862L667.071 86.1643L655.268 93.0015L650.079 94.4042L653.175 92.5855L652.855 91.4033L650.499 92.7674L650.329 91.5784L645.152 93.729L645.657 97.4312L646.705 97.5631L735.304 76.7901L735.139 75.4522ZM737.558 87.7205L798.969 118.219L798.566 116.098L768.864 101.043L737.393 85.3641L737.558 87.7205ZM646.387 144.066L706.669 137.56L647.12 142.194L646.387 144.066ZM800.587 148.854L736.144 137.487L736.425 143.234L801 149.636L800.587 148.854ZM800.473 150.753L736.625 144.714L736.739 148.175L800.473 150.753ZM639 151L702.876 148.101L734.073 148.377L733.911 135.895L703.259 139.973L641.771 144.549L641.65 145.649L698.889 142.103L659.674 145.791L639.468 147.041L639 151ZM661.591 104.213L665.279 106.181V105.328L661.686 103.414L655.261 104.607L655.195 105.477L661.591 104.213ZM668.575 106.279L666.531 139.66L667.013 139.627L668.974 105.754C668.974 105.729 668.982 105.704 668.987 105.68C669 105.626 669.019 105.574 669.043 105.524C669.069 105.468 669.108 105.418 669.157 105.381C669.188 105.362 669.222 105.349 669.258 105.343C669.294 105.338 669.33 105.339 669.365 105.348C669.438 105.361 669.505 105.398 669.556 105.452C669.595 105.498 669.621 105.553 669.632 105.612C669.643 105.66 669.646 105.709 669.643 105.759C669.643 105.78 669.643 105.801 669.636 105.822L667.864 139.565L668.422 139.525L670.069 105.424C670.071 105.4 670.075 105.376 670.081 105.352C670.093 105.298 670.112 105.246 670.136 105.197C670.161 105.141 670.2 105.092 670.25 105.056C670.281 105.037 670.316 105.025 670.351 105.02C670.387 105.014 670.424 105.016 670.459 105.025C670.532 105.036 670.599 105.072 670.649 105.127C670.687 105.172 670.713 105.226 670.724 105.285C670.733 105.333 670.736 105.381 670.733 105.43C670.732 105.452 670.729 105.473 670.725 105.494L669.297 139.459L669.841 139.422L671.107 105.418C671.11 105.393 671.114 105.368 671.12 105.344C671.13 105.291 671.146 105.239 671.169 105.19C671.194 105.134 671.234 105.086 671.283 105.049C671.314 105.03 671.349 105.018 671.385 105.012C671.421 105.007 671.458 105.009 671.493 105.019C671.566 105.031 671.633 105.068 671.683 105.122C671.721 105.167 671.747 105.222 671.758 105.28C671.767 105.328 671.771 105.376 671.767 105.424C671.766 105.446 671.764 105.467 671.759 105.488L670.71 139.361L671.15 139.332L672.177 105.73C672.179 105.706 672.184 105.681 672.19 105.657C672.201 105.604 672.219 105.552 672.243 105.503C672.268 105.447 672.307 105.398 672.357 105.362C672.388 105.343 672.423 105.33 672.46 105.324C672.496 105.318 672.533 105.32 672.569 105.329C672.642 105.343 672.709 105.38 672.759 105.435C672.798 105.48 672.824 105.535 672.835 105.594C672.844 105.642 672.847 105.691 672.844 105.739C672.843 105.761 672.84 105.782 672.836 105.803L672.016 139.271L672.432 139.241L673.161 105.105C672.986 105.03 672.807 104.964 672.625 104.907C672.183 104.766 671.729 104.666 671.27 104.608C670.674 104.53 670.07 104.545 669.479 104.651C668.806 104.775 668.174 105.059 667.635 105.479C667.52 106.716 667.338 109.163 667.112 112.216C666.886 115.269 666.622 118.923 666.361 122.588C666.099 126.254 665.841 129.911 665.625 132.974C665.41 136.038 665.238 138.5 665.15 139.764L665.639 139.73L667.883 106.213C667.887 106.189 667.891 106.165 667.897 106.141C667.91 106.087 667.928 106.035 667.952 105.985C667.979 105.928 668.021 105.879 668.073 105.843C668.104 105.824 668.138 105.811 668.174 105.805C668.21 105.8 668.247 105.801 668.282 105.81C668.356 105.823 668.423 105.86 668.474 105.914C668.513 105.96 668.539 106.015 668.55 106.073C668.56 106.121 668.564 106.17 668.56 106.219C668.56 106.239 668.56 106.26 668.552 106.28L668.575 106.279ZM665.442 103.615L672.037 102.308L675.861 104.342L675.84 103.459L672.108 101.481L665.487 102.717L665.442 103.615ZM680.105 104.233L678.36 138.807L678.858 138.773L680.518 103.691C680.52 103.665 680.524 103.64 680.53 103.615C680.542 103.559 680.56 103.505 680.585 103.453C680.612 103.394 680.655 103.344 680.708 103.307C680.74 103.287 680.776 103.273 680.814 103.267C680.851 103.262 680.889 103.263 680.926 103.273C681.002 103.285 681.071 103.323 681.122 103.38C681.162 103.426 681.19 103.483 681.202 103.543C681.212 103.593 681.216 103.643 681.214 103.693C681.214 103.715 681.214 103.738 681.207 103.759L679.749 138.706L680.32 138.667L681.643 103.357C681.646 103.331 681.65 103.306 681.656 103.282C681.668 103.226 681.687 103.173 681.712 103.121C681.739 103.062 681.782 103.012 681.836 102.975C681.902 102.935 681.981 102.923 682.055 102.941C682.132 102.956 682.202 102.996 682.253 103.054C682.293 103.102 682.32 103.159 682.333 103.219C682.343 103.269 682.347 103.319 682.345 103.369C682.345 103.391 682.345 103.414 682.338 103.435L681.226 138.601L681.797 138.556L682.728 103.35C682.73 103.324 682.734 103.299 682.739 103.274C682.75 103.218 682.769 103.164 682.793 103.112C682.819 103.054 682.861 103.003 682.914 102.966C682.946 102.946 682.981 102.933 683.018 102.927C683.055 102.921 683.093 102.923 683.129 102.933C683.207 102.947 683.277 102.987 683.329 103.046C683.37 103.094 683.397 103.15 683.409 103.211C683.419 103.261 683.423 103.311 683.42 103.361C683.419 103.383 683.416 103.405 683.411 103.427L682.689 138.501L683.146 138.468L683.837 103.67C683.84 103.645 683.844 103.62 683.85 103.595C683.861 103.54 683.879 103.486 683.905 103.435C683.931 103.376 683.974 103.326 684.027 103.289C684.059 103.269 684.094 103.256 684.131 103.25C684.168 103.244 684.206 103.246 684.243 103.254C684.318 103.268 684.387 103.306 684.439 103.362C684.479 103.41 684.506 103.467 684.519 103.527C684.529 103.577 684.533 103.628 684.53 103.678C684.529 103.701 684.527 103.723 684.523 103.744L684.045 138.404L684.472 138.373L684.853 103.021C684.672 102.944 684.486 102.875 684.297 102.817C683.841 102.671 683.372 102.568 682.897 102.509C682.282 102.428 681.659 102.443 681.049 102.554C680.358 102.682 679.708 102.976 679.156 103.41C679.057 104.693 678.892 107.242 678.69 110.425C678.488 113.607 678.258 117.404 678.03 121.206C677.802 125.008 677.573 128.805 677.385 131.966C677.197 135.127 677.049 137.65 676.975 138.911L677.475 138.877L679.416 104.173C679.418 104.147 679.422 104.122 679.428 104.097C679.441 104.041 679.46 103.987 679.484 103.935C679.512 103.876 679.555 103.825 679.609 103.788C679.641 103.767 679.677 103.754 679.714 103.748C679.752 103.742 679.79 103.743 679.827 103.752C679.903 103.767 679.972 103.807 680.022 103.866C680.062 103.913 680.089 103.97 680.101 104.031C680.111 104.08 680.114 104.131 680.111 104.181C680.11 104.2 680.108 104.22 680.104 104.239L680.105 104.233ZM709.415 95.3579L713.678 97.5915L713.622 96.6174L709.476 94.4474L702.272 95.8046L702.243 96.7935L709.415 95.3579ZM676.841 101.481L683.627 100.129L687.606 102.235L687.574 101.325L683.704 99.2795L676.888 100.548L676.841 101.481ZM692.274 101.795L690.816 137.905L691.331 137.872L692.692 101.231C692.695 101.205 692.699 101.179 692.705 101.154C692.715 101.096 692.733 101.039 692.757 100.985C692.784 100.924 692.827 100.872 692.881 100.833C692.914 100.812 692.952 100.797 692.991 100.791C693.031 100.784 693.071 100.786 693.109 100.796C693.188 100.81 693.259 100.85 693.313 100.91C693.354 100.958 693.382 101.016 693.396 101.079C693.407 101.13 693.412 101.182 693.41 101.233C693.41 101.256 693.409 101.278 693.403 101.301L692.261 137.802L692.852 137.759L693.866 100.889C693.868 100.863 693.873 100.837 693.879 100.812C693.89 100.754 693.909 100.699 693.934 100.646C693.961 100.585 694.003 100.532 694.058 100.493C694.09 100.473 694.126 100.459 694.164 100.452C694.202 100.446 694.241 100.447 694.278 100.456C694.358 100.471 694.431 100.51 694.486 100.57C694.528 100.618 694.558 100.675 694.572 100.738C694.583 100.788 694.588 100.84 694.585 100.891C694.584 100.914 694.582 100.936 694.579 100.958L693.779 137.694L694.364 137.652L694.97 100.88C694.973 100.854 694.977 100.828 694.983 100.803C694.994 100.745 695.013 100.69 695.038 100.637C695.065 100.576 695.108 100.523 695.163 100.485C695.197 100.464 695.234 100.45 695.274 100.445C695.313 100.439 695.353 100.441 695.391 100.451C695.471 100.465 695.543 100.505 695.597 100.565C695.639 100.614 695.668 100.673 695.681 100.736C695.693 100.787 695.697 100.839 695.695 100.891C695.695 100.914 695.693 100.937 695.688 100.96L695.294 137.586L695.77 137.55L696.129 101.21C696.131 101.183 696.135 101.157 696.14 101.131C696.151 101.074 696.169 101.018 696.194 100.965C696.221 100.905 696.264 100.852 696.318 100.814C696.352 100.793 696.39 100.779 696.429 100.774C696.468 100.768 696.508 100.77 696.547 100.78C696.625 100.795 696.697 100.834 696.75 100.894C696.791 100.942 696.82 101.001 696.833 101.063C696.845 101.114 696.849 101.166 696.847 101.218C696.847 101.24 696.845 101.263 696.84 101.286L696.697 137.483L697.145 137.454L697.174 100.543C696.988 100.463 696.798 100.392 696.604 100.332C696.132 100.181 695.648 100.074 695.157 100.011C694.525 99.9273 693.883 99.9423 693.254 100.056C692.545 100.186 691.878 100.489 691.313 100.937C691.221 102.301 691.068 105.063 690.885 108.489C690.703 111.915 690.494 116.009 690.291 120.056C690.087 124.103 689.888 128.097 689.729 131.328C689.57 134.56 689.448 137.026 689.4 138.013L689.918 137.976L691.583 101.724C691.585 101.698 691.59 101.672 691.595 101.646C691.607 101.589 691.626 101.533 691.65 101.48C691.678 101.42 691.72 101.367 691.775 101.329C691.808 101.309 691.844 101.295 691.883 101.289C691.921 101.283 691.96 101.285 691.997 101.295C692.076 101.309 692.148 101.349 692.202 101.408C692.243 101.457 692.272 101.515 692.285 101.578C692.296 101.629 692.301 101.681 692.299 101.734C692.294 101.755 692.288 101.776 692.281 101.796L692.274 101.795ZM688.888 98.9532L695.865 97.5574L699.986 99.7285L699.942 98.785L695.931 96.6765L688.927 97.9939L688.888 98.9532ZM715.258 94.3814L722.626 92.9038L727.031 95.2056L726.969 94.2053L722.681 91.9683L715.284 93.3619L715.258 94.3814ZM658.812 108.044L656.643 140.378L657.078 140.341L659.194 107.534C659.194 107.51 659.2 107.486 659.206 107.464C659.217 107.412 659.234 107.361 659.257 107.314C659.282 107.259 659.321 107.212 659.371 107.177C659.398 107.158 659.43 107.146 659.463 107.141C659.496 107.135 659.53 107.137 659.562 107.147C659.63 107.159 659.691 107.195 659.735 107.248C659.77 107.292 659.793 107.345 659.802 107.401C659.81 107.448 659.812 107.495 659.809 107.542C659.808 107.563 659.805 107.583 659.801 107.603L657.869 140.29L658.375 140.253L660.191 107.223C660.191 107.199 660.198 107.175 660.204 107.152C660.215 107.101 660.233 107.051 660.255 107.003C660.281 106.949 660.32 106.901 660.369 106.867C660.397 106.849 660.429 106.836 660.461 106.831C660.494 106.826 660.528 106.828 660.56 106.836C660.628 106.849 660.689 106.885 660.733 106.937C660.768 106.982 660.791 107.034 660.801 107.09C660.81 107.136 660.813 107.183 660.81 107.229C660.809 107.25 660.807 107.271 660.803 107.291L659.17 140.195L659.667 140.157L661.135 107.219C661.137 107.196 661.142 107.172 661.147 107.149C661.158 107.097 661.175 107.047 661.197 106.999C661.223 106.944 661.262 106.896 661.311 106.861C661.338 106.843 661.37 106.83 661.402 106.825C661.435 106.819 661.468 106.821 661.5 106.829C661.568 106.842 661.63 106.877 661.674 106.931C661.71 106.976 661.734 107.029 661.743 107.085C661.751 107.132 661.754 107.179 661.751 107.226C661.75 107.247 661.747 107.268 661.744 107.289L660.46 140.1L660.865 140.07L662.121 107.519C662.123 107.495 662.127 107.471 662.132 107.448C662.143 107.396 662.159 107.345 662.181 107.297C662.207 107.242 662.246 107.194 662.295 107.159C662.323 107.141 662.354 107.128 662.387 107.123C662.42 107.118 662.454 107.12 662.486 107.129C662.553 107.142 662.614 107.177 662.659 107.228C662.694 107.273 662.717 107.325 662.727 107.381C662.735 107.427 662.738 107.474 662.735 107.52C662.734 107.541 662.732 107.562 662.728 107.582L661.665 140.017L662.046 139.988L663.032 106.91C662.874 106.837 662.712 106.773 662.546 106.718C662.148 106.582 661.737 106.485 661.319 106.428C660.779 106.351 660.229 106.365 659.692 106.468C659.074 106.589 658.495 106.863 658.01 107.264C657.896 108.464 657.705 110.843 657.47 113.81C657.235 116.777 656.96 120.33 656.687 123.882C656.414 127.434 656.144 130.983 655.92 133.943C655.695 136.903 655.518 139.273 655.428 140.466L655.876 140.431L658.221 107.979C658.224 107.955 658.228 107.931 658.234 107.908C658.245 107.856 658.261 107.806 658.284 107.758C658.309 107.703 658.348 107.656 658.398 107.622C658.426 107.603 658.457 107.591 658.49 107.586C658.523 107.581 658.557 107.582 658.589 107.591C658.656 107.604 658.717 107.639 658.761 107.692C658.795 107.737 658.818 107.79 658.827 107.846C658.835 107.892 658.837 107.939 658.834 107.985C658.828 108.006 658.821 108.025 658.812 108.044ZM708.112 98.86L707.642 136.689L708.248 136.647L708.52 98.7804C708.522 98.7533 708.526 98.7264 708.531 98.6997C708.542 98.641 708.56 98.5838 708.585 98.5293C708.612 98.4669 708.656 98.413 708.711 98.3735C708.745 98.3523 708.783 98.3382 708.822 98.3319C708.861 98.3256 708.901 98.3275 708.94 98.3372C709.021 98.351 709.096 98.3909 709.152 98.4508C709.196 98.5011 709.226 98.5612 709.241 98.6259C709.254 98.6779 709.259 98.7314 709.258 98.785C709.26 98.8081 709.26 98.8312 709.258 98.8543L709.195 136.575L709.689 136.54L709.707 99.1192C709.709 99.0921 709.713 99.0651 709.718 99.0385C709.73 98.9793 709.748 98.9217 709.773 98.8669C709.801 98.804 709.844 98.7494 709.9 98.7088C709.933 98.6871 709.971 98.6724 710.01 98.6655C710.049 98.6587 710.089 98.6599 710.128 98.6691C710.209 98.6826 710.283 98.7226 710.339 98.7827C710.383 98.8332 710.413 98.8939 710.426 98.9589C710.438 99.0116 710.442 99.0654 710.44 99.1192C710.439 99.1428 710.436 99.1663 710.433 99.1897L710.639 136.473L711.095 136.44L710.768 98.4281C710.575 98.3452 710.377 98.2724 710.176 98.2099C709.693 98.0554 709.196 97.945 708.692 97.8802C708.042 97.7928 707.382 97.8085 706.736 97.9268C706.007 98.0609 705.323 98.3734 704.746 98.8361C704.664 100.241 704.532 103.068 704.378 106.584C704.224 110.1 704.047 114.301 703.876 118.459C703.704 122.617 703.533 126.727 703.404 130.064C703.275 133.402 703.176 135.963 703.129 137.02L703.663 136.977L705.025 99.6455C705.027 99.6188 705.031 99.5922 705.037 99.5659C705.048 99.5071 705.066 99.4498 705.091 99.3954C705.119 99.333 705.163 99.2795 705.219 99.2408C705.253 99.2201 705.291 99.2063 705.33 99.2002C705.369 99.1942 705.409 99.196 705.448 99.2056C705.529 99.2192 705.604 99.2591 705.66 99.3192C705.703 99.3689 705.733 99.4288 705.747 99.4931C705.758 99.5454 705.763 99.5989 705.76 99.6523C705.76 99.675 705.76 99.6989 705.754 99.7216L704.605 136.912L705.134 136.874L706.186 99.1431C706.188 99.116 706.192 99.089 706.198 99.0624C706.209 99.0036 706.227 98.9463 706.251 98.8918C706.278 98.8293 706.321 98.7753 706.377 98.7361C706.41 98.7148 706.448 98.7007 706.487 98.6946C706.527 98.6885 706.567 98.6907 706.605 98.7009C706.687 98.7144 706.761 98.7543 706.817 98.8146C706.861 98.8641 706.891 98.9234 706.906 98.9873C706.918 99.0394 706.923 99.093 706.92 99.1465C706.92 99.1697 706.918 99.1928 706.914 99.2158L706.079 136.805L706.687 136.758L707.372 98.785C707.375 98.7579 707.379 98.7309 707.385 98.7043C707.397 98.6455 707.416 98.5882 707.441 98.5338C707.469 98.4713 707.513 98.4175 707.569 98.378C707.602 98.3573 707.64 98.3436 707.679 98.3375C707.718 98.3315 707.759 98.3333 707.797 98.3429C707.878 98.3569 707.952 98.3968 708.008 98.4565C708.051 98.5064 708.082 98.5661 708.096 98.6304C708.108 98.6822 708.114 98.7353 708.112 98.7884C708.113 98.8127 708.113 98.8365 708.112 98.86ZM733.764 94.2996L733.946 134.79L734.219 134.769L734.586 134.837L734.196 94.211C734.198 94.1824 734.201 94.1539 734.205 94.1257C734.215 94.0636 734.233 94.0029 734.258 93.945C734.285 93.8787 734.33 93.8213 734.388 93.779C734.424 93.7564 734.463 93.7413 734.505 93.7344C734.547 93.7276 734.589 93.7292 734.63 93.7392C734.718 93.7549 734.798 93.7984 734.858 93.8631C734.905 93.9163 734.938 93.9799 734.955 94.0484C734.969 94.1034 734.976 94.16 734.975 94.2167C734.975 94.2417 734.975 94.2655 734.975 94.2906L735.612 135.025L736.128 135.12L735.466 94.5713C735.468 94.5427 735.472 94.5143 735.477 94.4861C735.488 94.4235 735.506 94.3623 735.532 94.3042C735.56 94.2378 735.605 94.1804 735.663 94.1382C735.698 94.1157 735.738 94.1007 735.779 94.0943C735.821 94.0878 735.863 94.09 735.903 94.1007C735.99 94.1153 736.07 94.1576 736.131 94.2212C736.178 94.2738 736.211 94.337 736.228 94.4053C736.242 94.4603 736.249 94.5169 736.248 94.5735C736.248 94.5986 736.248 94.6224 736.248 94.6474L737.161 135.311H737.442V135.366L737.968 135.461L738.699 98.3463C738.701 98.3191 738.705 98.2921 738.71 98.2655C738.721 98.2059 738.739 98.1479 738.764 98.0928C738.79 98.0295 738.834 97.9749 738.889 97.9348C738.923 97.9134 738.96 97.899 739 97.8925C739.039 97.8861 739.079 97.8877 739.118 97.8972C739.201 97.911 739.278 97.9508 739.337 98.0109C739.383 98.0613 739.415 98.1223 739.431 98.1882C739.444 98.2413 739.451 98.296 739.45 98.3508C739.45 98.3743 739.45 98.3981 739.45 98.4224L738.92 135.636L739.445 135.734L739.871 97.837C739.873 97.8096 739.876 97.7822 739.88 97.7552C739.89 97.6953 739.906 97.6368 739.931 97.5812C739.956 97.5177 739.999 97.4628 740.055 97.4233C740.089 97.4025 740.126 97.3887 740.166 97.3826C740.205 97.3765 740.245 97.3784 740.283 97.388C740.366 97.4006 740.442 97.4406 740.499 97.5017C740.544 97.5524 740.574 97.6133 740.589 97.679C740.602 97.7326 740.607 97.7877 740.605 97.8427C740.605 97.8667 740.603 97.8906 740.6 97.9143L740.394 135.91L741.006 136.024L741.046 97.4778C741.046 97.4505 741.049 97.4233 741.056 97.396C741.067 97.3366 741.085 97.2785 741.109 97.2232C741.135 97.1598 741.178 97.105 741.234 97.0652C741.268 97.0439 741.305 97.0295 741.345 97.0231C741.384 97.0166 741.424 97.0182 741.463 97.0277C741.545 97.0414 741.621 97.0813 741.678 97.1414C741.723 97.1917 741.755 97.2522 741.771 97.3175C741.784 97.37 741.79 97.4238 741.789 97.4778C741.789 97.5017 741.789 97.5244 741.789 97.5483L741.951 136.203L742.564 136.316L742.197 97.4676C742.197 97.4403 742.202 97.413 742.207 97.3869C742.217 97.3275 742.235 97.2695 742.258 97.2141C742.284 97.1506 742.328 97.0959 742.384 97.0561C742.417 97.0349 742.455 97.0207 742.494 97.0145C742.533 97.0082 742.574 97.01 742.612 97.0198C742.694 97.0334 742.77 97.0733 742.828 97.1334C742.872 97.1838 742.904 97.2443 742.92 97.3096C742.933 97.3624 742.94 97.4166 742.939 97.471C742.939 97.4949 742.939 97.5176 742.939 97.5415L743.539 136.494L744.034 136.584L743.408 97.8063C743.41 97.7792 743.414 97.7522 743.419 97.7256C743.43 97.6662 743.448 97.6082 743.472 97.5529C743.498 97.4902 743.541 97.4359 743.596 97.396C743.63 97.3744 743.667 97.3601 743.707 97.354C743.746 97.3479 743.786 97.3502 743.824 97.3607C743.907 97.3744 743.983 97.4142 744.04 97.4744C744.085 97.5247 744.117 97.5852 744.133 97.6506C744.146 97.7034 744.153 97.7576 744.152 97.812C744.152 97.8358 744.152 97.8586 744.152 97.8825L745.003 136.644H745.471L744.471 97.1095C744.274 97.0262 744.073 96.953 743.869 96.8902C743.377 96.7342 742.872 96.6231 742.36 96.5582C741.703 96.4706 741.037 96.4867 740.386 96.606C739.655 96.7412 738.969 97.0574 738.393 97.5255C738.345 98.6622 738.279 100.721 738.209 103.323C738.139 105.925 738.055 109.06 737.973 112.358C737.891 115.657 737.807 119.115 737.731 122.361C737.654 125.608 737.584 128.621 737.528 131.044L736.578 93.8461C736.371 93.7595 736.161 93.6837 735.946 93.6188C735.431 93.455 734.901 93.3382 734.364 93.2698C733.676 93.1778 732.978 93.1947 732.295 93.3198C731.527 93.4624 730.808 93.7946 730.203 94.286C730.139 95.8296 730.047 98.9896 729.943 102.901C729.839 106.812 729.724 111.475 729.614 116.029C729.504 120.582 729.402 125.022 729.323 128.495C729.244 131.967 729.188 134.469 729.174 135.144L729.735 135.108L730.512 95.1442C730.515 95.1156 730.518 95.0871 730.524 95.0589C730.535 94.9966 730.554 94.9359 730.58 94.8782C730.607 94.812 730.653 94.7546 730.711 94.7122C730.746 94.6896 730.786 94.6745 730.827 94.6676C730.868 94.6608 730.91 94.6625 730.951 94.6725C731.038 94.6875 731.118 94.7302 731.179 94.7941C731.226 94.8473 731.259 94.9108 731.276 94.9793C731.29 95.0347 731.297 95.0917 731.296 95.1488C731.296 95.1738 731.296 95.1976 731.296 95.2227L730.74 135.032L731.303 134.989L731.74 94.6077C731.74 94.5793 731.74 94.5508 731.75 94.5224C731.76 94.4598 731.778 94.3988 731.803 94.3406C731.831 94.2741 731.876 94.2162 731.934 94.1734C731.969 94.1504 732.009 94.1349 732.05 94.1279C732.092 94.1208 732.135 94.1224 732.176 94.1325C732.263 94.1482 732.343 94.1917 732.404 94.2564C732.45 94.3095 732.483 94.3732 732.499 94.4417C732.512 94.4969 732.517 94.5534 732.515 94.61C732.515 94.635 732.515 94.6588 732.508 94.6838L732.303 134.923L732.948 134.877L732.996 94.2337C732.998 94.205 733.001 94.1766 733.007 94.1485C733.018 94.0858 733.037 94.0247 733.063 93.9666C733.09 93.9003 733.136 93.8429 733.194 93.8006C733.229 93.7782 733.269 93.7631 733.31 93.7565C733.351 93.7498 733.393 93.7517 733.434 93.762C733.521 93.7767 733.602 93.8199 733.662 93.8848C733.709 93.9378 733.742 94.0014 733.758 94.07C733.772 94.1254 733.778 94.1823 733.777 94.2394C733.774 94.2616 733.77 94.2836 733.765 94.3053L733.764 94.2996ZM718.899 97.3982L718.045 135.932L718.593 135.897L719.34 96.7947C719.342 96.7668 719.346 96.7391 719.351 96.7117C719.362 96.651 719.38 96.5918 719.405 96.5355C719.431 96.4708 719.475 96.4148 719.532 96.374C719.566 96.3533 719.604 96.3396 719.643 96.3335C719.682 96.3275 719.723 96.3293 719.761 96.3389C719.845 96.3513 719.922 96.3913 719.98 96.4525C720.025 96.5044 720.056 96.5665 720.071 96.6332C720.084 96.6877 720.09 96.7434 720.088 96.7992C720.09 96.8234 720.09 96.8478 720.088 96.872L719.566 135.817L720.19 135.776L720.567 96.4275C720.567 96.4003 720.567 96.3718 720.577 96.3446C720.588 96.2839 720.606 96.2247 720.631 96.1683C720.657 96.1036 720.702 96.0476 720.759 96.0069C720.793 95.9849 720.832 95.9703 720.872 95.9639C720.913 95.9574 720.954 95.9593 720.994 95.9694C721.077 95.9831 721.154 96.0229 721.213 96.0831C721.259 96.1345 721.291 96.1967 721.306 96.2638C721.318 96.3178 721.324 96.3732 721.323 96.4286C721.322 96.453 721.321 96.4773 721.317 96.5014L721.171 135.7L721.795 135.656L721.747 96.423C721.75 96.3955 721.753 96.3681 721.759 96.3411C721.77 96.2812 721.788 96.2229 721.813 96.1672C721.841 96.1032 721.886 96.048 721.944 96.0081C721.978 95.9862 722.017 95.9715 722.058 95.9651C722.098 95.9586 722.14 95.9605 722.18 95.9705C722.263 95.984 722.339 96.024 722.397 96.0843C722.442 96.1362 722.473 96.1982 722.488 96.265C722.501 96.3194 722.506 96.3751 722.505 96.4309C722.505 96.4548 722.505 96.4798 722.505 96.5036L722.8 135.594L723.298 135.554L722.975 96.7787C722.977 96.7509 722.981 96.7232 722.986 96.6958C722.997 96.6351 723.016 96.5761 723.041 96.5196C723.068 96.455 723.112 96.3991 723.17 96.3582C723.203 96.3368 723.241 96.3225 723.28 96.316C723.319 96.3096 723.36 96.3111 723.398 96.3206C723.482 96.334 723.56 96.3739 723.619 96.4343C723.665 96.4856 723.697 96.5473 723.713 96.614C723.726 96.6676 723.731 96.7226 723.73 96.7776C723.732 96.8015 723.732 96.8254 723.73 96.8492L724.276 135.49L724.753 135.452L724.068 96.0604C723.868 95.9738 723.663 95.8979 723.455 95.833C722.954 95.6729 722.439 95.5588 721.916 95.492C721.246 95.4031 720.566 95.4195 719.901 95.5409C719.153 95.6789 718.452 96.0008 717.86 96.4775C717.787 97.9552 717.674 100.952 717.544 104.671C717.414 108.39 717.267 112.828 717.126 117.189C716.986 121.551 716.85 125.828 716.744 129.238C716.638 132.648 716.56 135.178 716.535 136.043L717.079 136.001L718.156 97.3152C718.158 97.2874 718.162 97.2596 718.167 97.2323C718.179 97.1716 718.197 97.1126 718.222 97.0561C718.25 96.9915 718.295 96.9356 718.352 96.8947C718.387 96.8727 718.426 96.8581 718.466 96.8516C718.507 96.8452 718.549 96.8471 718.588 96.8572C718.672 96.8706 718.748 96.9105 718.806 96.9708C718.851 97.0227 718.883 97.0848 718.898 97.1516C718.91 97.2056 718.916 97.261 718.915 97.3164C718.911 97.344 718.906 97.3713 718.899 97.3982ZM647.19 106.213L647.115 107.052L653.326 105.836L656.872 107.733V106.91L653.415 105.062L647.19 106.213ZM650.746 109.53L648.266 140.981L648.693 140.952L651.115 109.036C651.115 109.013 651.121 108.99 651.127 108.967C651.139 108.918 651.156 108.869 651.177 108.823C651.201 108.771 651.239 108.726 651.286 108.692C651.313 108.675 651.344 108.664 651.376 108.659C651.408 108.654 651.441 108.656 651.472 108.665C651.537 108.677 651.595 108.711 651.636 108.762C651.669 108.805 651.691 108.856 651.7 108.909C651.708 108.954 651.71 109 651.706 109.045C651.705 109.065 651.702 109.084 651.698 109.104L649.456 140.895L649.945 140.862L652.086 108.739C652.089 108.716 652.093 108.693 652.099 108.671C652.11 108.621 652.127 108.572 652.15 108.525C652.176 108.472 652.215 108.427 652.264 108.393C652.292 108.376 652.322 108.364 652.354 108.359C652.386 108.354 652.419 108.356 652.45 108.365C652.515 108.377 652.573 108.411 652.615 108.462C652.648 108.505 652.67 108.556 652.679 108.609C652.684 108.654 652.684 108.7 652.679 108.745C652.677 108.765 652.675 108.784 652.671 108.804L650.705 140.805L651.191 140.771L652.998 108.731C653.001 108.708 653.005 108.685 653.01 108.663C653.02 108.613 653.036 108.565 653.058 108.518C653.081 108.466 653.117 108.42 653.164 108.387C653.191 108.369 653.221 108.357 653.253 108.351C653.285 108.346 653.318 108.348 653.349 108.356C653.413 108.367 653.472 108.402 653.513 108.453C653.546 108.496 653.568 108.547 653.576 108.6C653.582 108.645 653.582 108.691 653.576 108.736C653.574 108.755 653.572 108.775 653.568 108.795L651.958 140.711L652.347 140.681L653.937 109.02C653.94 108.997 653.944 108.974 653.949 108.952C653.961 108.901 653.978 108.853 654 108.806C654.025 108.753 654.064 108.707 654.114 108.674C654.141 108.656 654.171 108.644 654.204 108.639C654.236 108.634 654.268 108.636 654.3 108.645C654.365 108.657 654.423 108.692 654.465 108.742C654.498 108.786 654.52 108.837 654.529 108.891C654.537 108.936 654.539 108.981 654.536 109.027C654.535 109.046 654.532 109.066 654.529 109.086L653.125 140.631L653.493 140.603L654.819 108.434C654.667 108.364 654.511 108.302 654.352 108.249C653.968 108.117 653.572 108.023 653.17 107.968C652.647 107.894 652.116 107.907 651.598 108.006C650.997 108.124 650.435 108.389 649.963 108.776C649.841 109.956 649.62 112.314 649.354 115.256C649.088 118.197 648.774 121.703 648.466 125.194C648.158 128.684 647.853 132.149 647.603 134.995C647.353 137.842 647.159 140.065 647.071 141.072L647.506 141.044L650.157 109.468C650.157 109.444 650.164 109.42 650.17 109.396C650.181 109.346 650.198 109.298 650.22 109.252C650.244 109.199 650.281 109.154 650.327 109.12C650.354 109.102 650.384 109.09 650.416 109.085C650.447 109.08 650.48 109.081 650.511 109.089C650.575 109.1 650.634 109.134 650.676 109.183C650.71 109.227 650.733 109.277 650.741 109.331C650.749 109.376 650.752 109.422 650.748 109.468C650.748 109.489 650.748 109.509 650.746 109.53ZM735.129 89.6176L727.533 91.0555L727.519 92.1069L735.078 90.5804L739.625 92.9515L739.552 91.9182L735.129 89.6176ZM759.188 101.682L763.307 103.702L763.216 102.804L759.22 100.848L757.564 101.177L756.343 102.286L759.188 101.682ZM776.607 110.375L775.571 111.339L778.034 110.82L781.644 112.567L781.547 111.791L778.034 110.093L776.607 110.375ZM766.104 105.094L770.069 107.032L769.982 106.169L766.13 104.289L764.532 104.6L763.368 105.669L766.104 105.094ZM770.784 107.655L769.674 108.678L772.282 108.127L776.049 109.976L775.971 109.154L772.294 107.36L770.784 107.655ZM781.938 112.997L780.956 113.906L783.294 113.415L786.719 115.079L786.632 114.338L783.299 112.727L781.938 112.997ZM787.864 114.982L786.592 115.237L785.679 116.092L787.863 115.631L791.085 117.187L790.994 116.495L787.864 114.982ZM792.903 145.656L790.673 119.984C790.674 119.924 790.684 119.865 790.705 119.808C790.72 119.763 790.748 119.723 790.786 119.694C790.81 119.679 790.836 119.669 790.863 119.665C790.891 119.66 790.919 119.661 790.946 119.668C791.006 119.677 791.061 119.704 791.105 119.746C791.139 119.779 791.165 119.821 791.18 119.866C791.193 119.903 791.2 119.941 791.203 119.98C791.204 119.996 791.204 120.012 791.203 120.029L793.588 145.781L794.021 145.863L791.485 119.967C791.484 119.908 791.494 119.849 791.514 119.793C791.527 119.748 791.555 119.709 791.592 119.68C791.616 119.664 791.642 119.654 791.67 119.649C791.698 119.645 791.726 119.646 791.753 119.652C791.807 119.66 791.858 119.682 791.9 119.717C791.941 119.752 791.972 119.798 791.988 119.85C792.001 119.887 792.008 119.925 792.009 119.964C792.01 119.98 792.01 119.996 792.009 120.013L794.715 145.988L795.067 146.054L792.358 120.195C792.357 120.135 792.366 120.076 792.386 120.019C792.399 119.974 792.427 119.934 792.465 119.906C792.488 119.891 792.514 119.88 792.541 119.876C792.569 119.871 792.597 119.872 792.624 119.879C792.683 119.888 792.738 119.915 792.782 119.956C792.816 119.99 792.842 120.031 792.858 120.076C792.871 120.113 792.879 120.151 792.882 120.19C792.883 120.206 792.883 120.223 792.882 120.239L795.757 146.184L796.091 146.248L793.059 119.708C793.059 119.708 792.937 119.66 792.728 119.594C792.45 119.514 792.166 119.452 791.88 119.409C791.502 119.351 791.12 119.334 790.738 119.357C790.318 119.381 789.905 119.478 789.518 119.646L791.024 135.487L789.855 120.238C789.854 120.219 789.854 120.2 789.855 120.181C789.858 120.142 789.867 120.104 789.88 120.067C789.893 120.022 789.921 119.983 789.958 119.954C789.981 119.938 790.007 119.928 790.034 119.924C790.062 119.92 790.089 119.921 790.116 119.929C790.17 119.936 790.221 119.958 790.263 119.993C790.305 120.028 790.336 120.074 790.352 120.125C790.365 120.162 790.372 120.2 790.374 120.239C790.375 120.255 790.375 120.271 790.374 120.287L792.46 145.575L792.903 145.656ZM751.479 98.2382L755.655 100.398L755.568 99.4613L751.507 97.3709L748.89 97.8654L747.498 99.0498L751.479 98.2382ZM791.238 117.17L790.537 117.966L791.875 117.68L795.072 119.197L794.958 118.515L791.857 117.045L791.238 117.17ZM775.492 137.7L774.653 114.191C774.652 114.169 774.652 114.148 774.653 114.127C774.659 114.08 774.671 114.034 774.689 113.991C774.708 113.94 774.74 113.896 774.783 113.864C774.81 113.847 774.839 113.835 774.871 113.829C774.902 113.824 774.934 113.825 774.965 113.832C775.027 113.841 775.084 113.867 775.132 113.907C775.179 113.947 775.213 114 775.231 114.06C775.244 114.102 775.251 114.145 775.253 114.188C775.254 114.207 775.254 114.225 775.253 114.244L776.184 142.554L776.613 142.632L775.571 113.771C775.57 113.75 775.57 113.729 775.571 113.707C775.578 113.661 775.59 113.616 775.608 113.572C775.627 113.522 775.66 113.479 775.704 113.447C775.73 113.43 775.761 113.418 775.792 113.413C775.824 113.407 775.856 113.408 775.887 113.415C775.948 113.424 776.005 113.451 776.052 113.491C776.098 113.531 776.133 113.584 776.15 113.643C776.162 113.684 776.169 113.728 776.17 113.771C776.171 113.79 776.171 113.808 776.17 113.827L777.386 142.773L777.882 142.867L776.532 113.476C776.533 113.454 776.535 113.432 776.538 113.411C776.544 113.364 776.556 113.317 776.574 113.273C776.593 113.223 776.626 113.179 776.669 113.147C776.696 113.13 776.726 113.118 776.757 113.113C776.788 113.107 776.82 113.109 776.851 113.116C776.913 113.124 776.971 113.15 777.018 113.19C777.066 113.231 777.101 113.284 777.118 113.344C777.131 113.385 777.138 113.428 777.14 113.471C777.141 113.49 777.141 113.508 777.14 113.527L778.667 143.01L779.163 143.103L777.464 113.46C777.466 113.39 777.48 113.322 777.505 113.257C777.524 113.207 777.557 113.162 777.601 113.13C777.628 113.113 777.659 113.101 777.691 113.095C777.723 113.09 777.755 113.091 777.787 113.098C777.855 113.109 777.917 113.141 777.967 113.188C778.005 113.227 778.034 113.275 778.049 113.327C778.062 113.368 778.07 113.411 778.071 113.454C778.072 113.473 778.072 113.491 778.071 113.51L779.955 143.251L780.354 143.329L778.464 113.715C778.466 113.646 778.48 113.578 778.505 113.513C778.525 113.463 778.558 113.419 778.601 113.387C778.628 113.369 778.659 113.358 778.69 113.353C778.722 113.348 778.755 113.35 778.786 113.358C778.847 113.367 778.904 113.393 778.95 113.433C778.996 113.474 779.029 113.527 779.045 113.586C779.057 113.627 779.064 113.67 779.064 113.713C779.066 113.732 779.066 113.75 779.064 113.769L781.147 143.473L781.532 143.543L779.302 113.155C779.302 113.155 779.115 113.078 778.804 112.987C778.399 112.868 777.984 112.784 777.564 112.738C777.032 112.675 776.493 112.695 775.966 112.795C775.381 112.907 774.835 113.165 774.377 113.544C774.377 113.92 774.452 115.619 774.557 117.956C774.662 120.293 774.802 123.266 774.941 126.191C775.08 129.115 775.217 131.988 775.321 134.137C775.425 136.287 775.492 137.7 775.492 137.7ZM743.041 94.0086L747.373 96.2661L747.308 95.284L743.084 93.0936L741 93.4846L739.79 94.6656L743.041 94.0086ZM786.964 143.951L785.708 118.262C785.71 118.201 785.722 118.141 785.744 118.084C785.76 118.038 785.789 117.999 785.828 117.97C785.852 117.955 785.879 117.945 785.907 117.94C785.935 117.936 785.964 117.937 785.992 117.944C786.046 117.951 786.097 117.974 786.138 118.009C786.18 118.045 786.21 118.092 786.226 118.144C786.237 118.181 786.244 118.219 786.245 118.258C786.246 118.274 786.246 118.291 786.245 118.308L787.697 144.686L788.141 144.766L786.561 117.995C786.56 117.976 786.56 117.957 786.561 117.938C786.566 117.897 786.577 117.856 786.592 117.817C786.608 117.771 786.638 117.732 786.677 117.703C786.701 117.687 786.728 117.677 786.756 117.672C786.784 117.668 786.813 117.669 786.841 117.676C786.902 117.685 786.958 117.713 787.002 117.755C787.036 117.79 787.061 117.833 787.076 117.879C787.087 117.916 787.094 117.954 787.097 117.993C787.098 118.009 787.098 118.026 787.097 118.043L788.836 144.896L789.286 144.978L787.391 117.978C787.391 117.917 787.403 117.856 787.424 117.798C787.44 117.753 787.469 117.713 787.508 117.685C787.532 117.669 787.559 117.658 787.587 117.653C787.616 117.649 787.645 117.65 787.673 117.656C787.734 117.666 787.791 117.694 787.835 117.737C787.869 117.772 787.895 117.814 787.909 117.861C787.921 117.898 787.928 117.936 787.93 117.975C787.931 117.991 787.931 118.008 787.93 118.025L789.994 145.107L790.354 145.172L788.283 118.208C788.282 118.149 788.29 118.091 788.308 118.035C788.324 117.99 788.352 117.95 788.39 117.921C788.414 117.906 788.44 117.895 788.468 117.89C788.496 117.886 788.525 117.887 788.552 117.894C788.613 117.903 788.669 117.931 788.713 117.973C788.747 118.008 788.773 118.051 788.787 118.097C788.799 118.134 788.806 118.172 788.808 118.211C788.809 118.228 788.809 118.244 788.808 118.261L791.052 145.314L791.395 145.378L789.008 117.714C789.008 117.714 788.863 117.656 788.619 117.586C788.299 117.493 787.971 117.424 787.64 117.381C787.21 117.323 786.773 117.32 786.342 117.372C785.868 117.428 785.41 117.583 785.001 117.827L785.039 118.333L785.067 118.322L785.095 118.314H785.167C785.222 118.322 785.273 118.345 785.315 118.381C785.357 118.417 785.388 118.464 785.404 118.517C785.416 118.554 785.423 118.592 785.424 118.63C785.425 118.647 785.425 118.663 785.424 118.679L786.011 131.65L786.673 140.661L786.964 143.951ZM796.299 119.804L799.443 121.281L799.322 120.625L796.26 119.186L795.663 119.3L794.993 120.072L796.299 119.804ZM748.1 102.452L748.214 137.362L748.717 137.454L748.489 101.894C748.491 101.868 748.493 101.842 748.498 101.817C748.507 101.76 748.523 101.704 748.546 101.652C748.569 101.592 748.609 101.539 748.66 101.501C748.692 101.48 748.729 101.466 748.766 101.46C748.804 101.454 748.842 101.456 748.879 101.465C748.959 101.48 749.032 101.52 749.087 101.579C749.131 101.627 749.161 101.685 749.176 101.748C749.189 101.799 749.195 101.851 749.195 101.903C749.195 101.926 749.195 101.948 749.195 101.971L749.616 137.63L750.203 137.744L749.632 101.553C749.636 101.469 749.655 101.387 749.687 101.31C749.71 101.25 749.749 101.198 749.801 101.16C749.833 101.139 749.869 101.126 749.907 101.12C749.944 101.114 749.983 101.117 750.02 101.127C750.099 101.141 750.172 101.181 750.227 101.24C750.27 101.288 750.301 101.345 750.318 101.407C750.332 101.457 750.339 101.509 750.338 101.561C750.338 101.584 750.338 101.605 750.338 101.628L751.121 137.912L751.706 138.026L750.728 101.553C750.729 101.527 750.731 101.501 750.736 101.476C750.744 101.419 750.76 101.363 750.782 101.311C750.806 101.251 750.845 101.199 750.897 101.161C750.929 101.14 750.965 101.127 751.002 101.121C751.04 101.114 751.078 101.116 751.115 101.125C751.195 101.14 751.268 101.18 751.324 101.239C751.367 101.287 751.399 101.345 751.415 101.407C751.429 101.458 751.436 101.51 751.435 101.562C751.435 101.585 751.435 101.606 751.435 101.629L752.635 138.201L753.108 138.288L751.891 101.868C751.893 101.842 751.895 101.816 751.9 101.79C751.909 101.734 751.925 101.679 751.947 101.626C751.97 101.566 752.01 101.514 752.061 101.476C752.093 101.455 752.128 101.441 752.165 101.435C752.203 101.429 752.24 101.431 752.277 101.44C752.357 101.455 752.43 101.495 752.486 101.554C752.53 101.602 752.561 101.66 752.577 101.723C752.591 101.774 752.598 101.826 752.598 101.878C752.598 101.901 752.598 101.922 752.598 101.945L754.037 138.448L754.483 138.529L752.892 101.202C752.703 101.122 752.511 101.052 752.315 100.991C751.843 100.843 751.358 100.736 750.867 100.674C750.24 100.591 749.604 100.606 748.982 100.72C748.287 100.847 747.636 101.148 747.091 101.595C747.061 102.845 747.03 105.268 747 108.301C746.971 111.335 746.942 114.977 746.915 118.677C746.887 122.377 746.865 126.13 746.844 129.387C746.823 132.644 746.809 135.4 746.798 137.105L747.303 137.197L747.39 102.378C747.391 102.352 747.394 102.326 747.399 102.301C747.408 102.244 747.424 102.189 747.447 102.137C747.47 102.077 747.509 102.025 747.561 101.987C747.593 101.966 747.629 101.952 747.667 101.946C747.705 101.94 747.744 101.942 747.781 101.952C747.861 101.966 747.934 102.006 747.989 102.065C748.032 102.113 748.063 102.171 748.079 102.234C748.093 102.284 748.099 102.336 748.099 102.388C748.1 102.409 748.101 102.431 748.1 102.452ZM781.932 143.617L780.952 116.223C780.951 116.203 780.951 116.182 780.952 116.162C780.958 116.117 780.97 116.073 780.986 116.031C781.004 115.983 781.035 115.941 781.076 115.91C781.102 115.894 781.13 115.883 781.161 115.878C781.191 115.873 781.222 115.874 781.252 115.881C781.31 115.889 781.365 115.913 781.41 115.952C781.454 115.99 781.486 116.041 781.502 116.098C781.513 116.138 781.52 116.178 781.521 116.22C781.522 116.237 781.522 116.255 781.521 116.273L782.663 143.747L783.131 143.834L781.855 115.94C781.858 115.874 781.872 115.809 781.896 115.748C781.914 115.702 781.945 115.663 781.986 115.634C782.011 115.618 782.04 115.607 782.07 115.602C782.099 115.597 782.13 115.598 782.159 115.606C782.218 115.613 782.273 115.637 782.318 115.675C782.363 115.714 782.395 115.764 782.411 115.821C782.424 115.86 782.431 115.901 782.432 115.942C782.433 115.96 782.433 115.978 782.432 115.996L783.874 143.98L784.347 144.067L782.739 115.929C782.738 115.908 782.738 115.888 782.739 115.868C782.745 115.824 782.756 115.78 782.774 115.739C782.793 115.693 782.824 115.654 782.865 115.625C782.891 115.608 782.92 115.597 782.951 115.591C782.981 115.586 783.013 115.587 783.043 115.594C783.101 115.603 783.156 115.627 783.2 115.666C783.244 115.704 783.276 115.754 783.293 115.81C783.305 115.849 783.312 115.89 783.313 115.931C783.314 115.948 783.314 115.966 783.313 115.983L785.093 144.207L785.479 144.281L783.696 116.175C783.695 116.155 783.695 116.134 783.696 116.114C783.702 116.069 783.713 116.025 783.73 115.983C783.749 115.935 783.78 115.893 783.821 115.863C783.847 115.846 783.876 115.835 783.907 115.83C783.937 115.825 783.968 115.826 783.998 115.833C784.056 115.842 784.11 115.867 784.154 115.905C784.198 115.944 784.229 115.994 784.245 116.05C784.257 116.089 784.263 116.13 784.264 116.171C784.265 116.188 784.265 116.206 784.264 116.223L786.235 144.413L786.599 144.484L784.485 115.639C784.485 115.639 784.312 115.567 784.028 115.484C783.655 115.376 783.273 115.3 782.886 115.257C782.393 115.196 781.892 115.209 781.402 115.294C780.861 115.39 780.352 115.615 779.918 115.95L780.2 119.841L780.086 116.629C780.085 116.608 780.085 116.588 780.086 116.567C780.092 116.523 780.103 116.479 780.12 116.437C780.139 116.389 780.171 116.347 780.212 116.316C780.237 116.3 780.266 116.288 780.296 116.283C780.326 116.277 780.357 116.278 780.386 116.284C780.451 116.295 780.511 116.324 780.558 116.37C780.594 116.407 780.621 116.452 780.636 116.501C780.649 116.541 780.656 116.582 780.658 116.623C780.659 116.641 780.659 116.659 780.658 116.677L781.208 133.684L781.937 143.622L781.932 143.617ZM800.634 147.084L800.962 147.145L797.498 121.777C797.498 121.777 797.377 121.73 797.172 121.671C796.9 121.593 796.623 121.532 796.342 121.49C795.973 121.433 795.598 121.417 795.225 121.44C794.816 121.464 794.414 121.56 794.039 121.725L795.853 137.172L794.369 122.299C794.368 122.28 794.368 122.262 794.369 122.244C794.372 122.205 794.38 122.167 794.393 122.13C794.407 122.088 794.433 122.051 794.468 122.023C794.491 122.009 794.516 121.999 794.543 121.994C794.57 121.99 794.597 121.991 794.623 121.997C794.676 122.006 794.726 122.029 794.767 122.063C794.809 122.097 794.84 122.142 794.858 122.192C794.871 122.226 794.88 122.262 794.883 122.299C794.885 122.314 794.885 122.33 794.883 122.345L797.416 146.49L797.836 146.57L795.167 122.047C795.165 122.029 795.165 122.011 795.167 121.993C795.169 121.954 795.177 121.916 795.189 121.879C795.203 121.837 795.229 121.8 795.264 121.773C795.286 121.759 795.312 121.749 795.339 121.744C795.365 121.74 795.393 121.741 795.419 121.747C795.478 121.756 795.532 121.782 795.576 121.822C795.61 121.854 795.637 121.893 795.654 121.936C795.668 121.973 795.676 122.011 795.679 122.05C795.68 122.066 795.68 122.081 795.679 122.097L798.507 146.697L798.929 146.777L795.949 122.037C795.947 121.979 795.956 121.922 795.975 121.867C795.989 121.824 796.016 121.787 796.051 121.76C796.074 121.745 796.1 121.735 796.126 121.73C796.153 121.726 796.18 121.726 796.206 121.733C796.265 121.742 796.319 121.769 796.362 121.81C796.395 121.842 796.421 121.881 796.438 121.924C796.452 121.96 796.46 121.998 796.463 122.037C796.465 122.053 796.465 122.069 796.463 122.085L799.61 146.895L799.959 146.96L796.817 122.252C796.816 122.234 796.816 122.216 796.817 122.197C796.82 122.159 796.827 122.12 796.84 122.084C796.853 122.041 796.879 122.004 796.914 121.978C796.937 121.964 796.963 121.954 796.989 121.95C797.016 121.946 797.044 121.947 797.07 121.954C797.128 121.963 797.182 121.989 797.226 122.029C797.26 122.061 797.286 122.1 797.302 122.143C797.315 122.177 797.324 122.213 797.327 122.25C797.329 122.265 797.329 122.281 797.327 122.296L800.634 147.084ZM755.922 105.629L756.411 138.884L756.905 138.977L756.301 105.089C756.301 105.064 756.301 105.039 756.308 105.014C756.316 104.959 756.331 104.906 756.351 104.855C756.375 104.797 756.414 104.746 756.465 104.709C756.497 104.69 756.532 104.677 756.569 104.671C756.606 104.665 756.644 104.666 756.68 104.675C756.75 104.685 756.816 104.716 756.869 104.763C756.922 104.81 756.96 104.872 756.978 104.94C756.992 104.988 756.999 105.038 757 105.088C757.001 105.11 757.001 105.131 757 105.153L757.799 139.14L758.375 139.244L757.417 104.745C757.418 104.719 757.421 104.694 757.425 104.67C757.433 104.615 757.449 104.561 757.47 104.511C757.494 104.452 757.533 104.402 757.584 104.365C757.615 104.345 757.65 104.331 757.687 104.325C757.724 104.319 757.761 104.321 757.798 104.33C757.868 104.339 757.934 104.369 757.987 104.416C758.04 104.462 758.078 104.523 758.097 104.591C758.111 104.638 758.118 104.687 758.119 104.737C758.121 104.758 758.121 104.779 758.119 104.8L759.276 139.411L759.854 139.515L758.493 104.722C758.494 104.697 758.496 104.673 758.501 104.648C758.509 104.594 758.524 104.541 758.545 104.49C758.569 104.432 758.609 104.381 758.66 104.345C758.691 104.324 758.727 104.311 758.764 104.305C758.802 104.298 758.84 104.3 758.876 104.308C758.953 104.321 759.024 104.357 759.079 104.412C759.121 104.457 759.152 104.513 759.169 104.573C759.182 104.621 759.189 104.671 759.19 104.721C759.192 104.742 759.192 104.764 759.19 104.786L760.761 139.682L761.226 139.768L759.637 105.021C759.638 104.996 759.64 104.971 759.645 104.946C759.653 104.891 759.668 104.838 759.689 104.787C759.713 104.728 759.752 104.678 759.803 104.641C759.834 104.621 759.869 104.608 759.905 104.601C759.941 104.595 759.979 104.596 760.015 104.605C760.085 104.615 760.15 104.646 760.203 104.692C760.256 104.739 760.294 104.801 760.313 104.869C760.326 104.916 760.333 104.966 760.334 105.015C760.335 105.036 760.335 105.058 760.334 105.079L762.091 139.006V139.929L762.573 140.017L762.565 139.823L762.289 108.828C762.29 108.804 762.292 108.78 762.297 108.756C762.305 108.704 762.32 108.652 762.341 108.604C762.365 108.547 762.405 108.499 762.455 108.464C762.485 108.445 762.519 108.432 762.554 108.426C762.589 108.42 762.625 108.421 762.66 108.43C762.727 108.438 762.79 108.466 762.841 108.511C762.892 108.555 762.928 108.614 762.944 108.68C762.957 108.726 762.963 108.774 762.963 108.822C762.965 108.843 762.965 108.864 762.963 108.885L763.42 140.181L763.892 140.271L763.331 108.367C763.332 108.343 763.335 108.319 763.339 108.296C763.347 108.243 763.362 108.192 763.382 108.143C763.406 108.087 763.446 108.038 763.497 108.004C763.527 107.984 763.561 107.971 763.596 107.965C763.632 107.959 763.668 107.96 763.703 107.968C763.771 107.978 763.834 108.008 763.885 108.053C763.935 108.098 763.972 108.157 763.99 108.223C764.003 108.269 764.01 108.317 764.011 108.365C764.013 108.386 764.013 108.407 764.011 108.428L764.753 140.431L765.307 140.531L764.411 108.04C764.412 108.016 764.415 107.992 764.419 107.968C764.427 107.916 764.442 107.864 764.462 107.815C764.486 107.758 764.526 107.71 764.576 107.675C764.607 107.656 764.641 107.643 764.677 107.637C764.713 107.632 764.749 107.633 764.784 107.642C764.859 107.654 764.927 107.689 764.98 107.742C765.022 107.785 765.052 107.838 765.069 107.896C765.082 107.941 765.089 107.989 765.09 108.037C765.091 108.057 765.091 108.077 765.09 108.098L766.175 140.69L766.723 140.791L765.453 108.018C765.454 107.995 765.457 107.971 765.46 107.948C765.468 107.896 765.482 107.845 765.502 107.797C765.526 107.741 765.566 107.693 765.616 107.658C765.647 107.639 765.681 107.625 765.717 107.619C765.753 107.613 765.79 107.615 765.825 107.623C765.899 107.634 765.968 107.668 766.022 107.721C766.063 107.764 766.093 107.817 766.108 107.875C766.122 107.922 766.129 107.97 766.129 108.018C766.13 108.039 766.13 108.06 766.129 108.081L767.602 140.953L768.049 141.037L766.565 108.308C766.565 108.285 766.567 108.261 766.572 108.237C766.58 108.184 766.594 108.133 766.614 108.084C766.638 108.027 766.677 107.979 766.728 107.944C766.759 107.925 766.793 107.912 766.828 107.907C766.864 107.901 766.9 107.902 766.935 107.91C767.01 107.922 767.079 107.957 767.132 108.009C767.174 108.053 767.204 108.105 767.219 108.163C767.232 108.209 767.239 108.256 767.24 108.304C767.241 108.324 767.241 108.345 767.24 108.365L768.434 131.611C768.434 132.562 768.444 133.49 768.449 134.384C768.453 135.277 768.458 136.136 768.462 136.945C768.467 137.754 768.47 138.516 768.474 139.218C768.477 139.921 768.481 140.555 768.484 141.119L769.351 141.28L768.857 132.266L768.684 111.692C768.684 111.669 768.686 111.647 768.691 111.624C768.699 111.574 768.712 111.526 768.732 111.48C768.754 111.426 768.79 111.38 768.837 111.345C768.866 111.327 768.898 111.314 768.932 111.308C768.966 111.302 769.001 111.303 769.034 111.31C769.105 111.32 769.171 111.353 769.222 111.403C769.261 111.445 769.29 111.496 769.305 111.551C769.318 111.596 769.324 111.641 769.324 111.688C769.326 111.708 769.326 111.728 769.324 111.748L769.741 141.356L770.198 141.438L769.677 111.25C769.677 111.227 769.677 111.204 769.684 111.182C769.691 111.132 769.704 111.084 769.724 111.037C769.745 110.985 769.78 110.939 769.826 110.906C769.854 110.887 769.885 110.875 769.919 110.87C769.952 110.864 769.986 110.866 770.018 110.874C770.091 110.885 770.158 110.918 770.21 110.969C770.25 111.01 770.279 111.061 770.295 111.116C770.307 111.16 770.314 111.205 770.314 111.251C770.315 111.271 770.315 111.29 770.314 111.31L771.012 141.591L771.534 141.687L770.699 110.936C770.7 110.914 770.702 110.891 770.706 110.869C770.713 110.82 770.726 110.771 770.746 110.725C770.766 110.672 770.802 110.626 770.848 110.593C770.877 110.574 770.91 110.562 770.944 110.557C770.978 110.551 771.012 110.553 771.046 110.561C771.11 110.569 771.171 110.596 771.22 110.638C771.269 110.681 771.303 110.737 771.32 110.8C771.332 110.844 771.339 110.889 771.339 110.935C771.34 110.955 771.34 110.975 771.339 110.994L772.356 141.838L772.878 141.934L771.684 110.919C771.685 110.896 771.687 110.874 771.691 110.851C771.699 110.801 771.712 110.753 771.732 110.707C771.753 110.653 771.789 110.607 771.836 110.572C771.865 110.554 771.897 110.541 771.93 110.535C771.964 110.529 771.999 110.53 772.032 110.537C772.103 110.549 772.169 110.583 772.22 110.634C772.26 110.676 772.289 110.726 772.305 110.782C772.317 110.826 772.324 110.871 772.326 110.917C772.327 110.937 772.327 110.956 772.326 110.976L773.708 142.089L774.134 142.17L772.735 111.195C772.735 111.173 772.735 111.15 772.742 111.127C772.749 111.077 772.763 111.028 772.782 110.982C772.803 110.928 772.839 110.882 772.885 110.849C772.913 110.831 772.945 110.819 772.979 110.813C773.012 110.808 773.046 110.81 773.079 110.818C773.143 110.826 773.204 110.853 773.253 110.895C773.302 110.938 773.337 110.994 773.353 111.057C773.366 111.1 773.372 111.145 773.372 111.191C773.374 111.211 773.374 111.23 773.372 111.25L774.964 142.32L775.363 142.396L773.569 110.59C773.398 110.521 773.225 110.462 773.048 110.411C772.623 110.285 772.187 110.197 771.746 110.149C771.182 110.082 770.611 110.102 770.053 110.209C769.431 110.329 768.848 110.603 768.36 111.004C768.36 111.498 768.349 112.199 768.347 113.064C768.345 113.929 768.347 114.957 768.347 116.104C768.347 117.251 768.347 118.516 768.353 119.855C768.359 121.194 768.361 122.607 768.367 124.049L767.467 107.681C767.288 107.609 767.105 107.547 766.919 107.494C766.471 107.363 766.013 107.27 765.549 107.219C764.957 107.15 764.358 107.171 763.773 107.283C763.122 107.408 762.514 107.692 762.002 108.112C761.992 108.873 761.986 110.106 761.985 111.661C761.984 113.216 761.985 115.094 761.985 117.147C761.985 119.2 761.996 121.426 762.006 123.679C762.015 125.931 762.023 128.209 762.032 130.367L760.601 104.378C760.414 104.302 760.224 104.237 760.031 104.183C759.566 104.045 759.09 103.949 758.608 103.896C757.993 103.823 757.37 103.845 756.761 103.962C756.084 104.091 755.45 104.388 754.917 104.825C754.903 106.012 754.899 108.296 754.904 111.16C754.908 114.025 754.918 117.465 754.932 120.971C754.946 124.476 754.963 128.043 754.979 131.158C754.995 134.272 755.009 136.933 755.018 138.628L755.512 138.72L755.22 105.568C755.221 105.543 755.224 105.518 755.228 105.494C755.236 105.439 755.252 105.386 755.274 105.336C755.297 105.278 755.337 105.227 755.388 105.19C755.419 105.17 755.454 105.156 755.491 105.15C755.528 105.143 755.566 105.144 755.602 105.153C755.68 105.165 755.751 105.202 755.807 105.256C755.849 105.301 755.88 105.356 755.897 105.416C755.91 105.465 755.918 105.514 755.919 105.564C755.921 105.586 755.922 105.607 755.922 105.629Z" fill="#FAFBFC"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M1426.43 100.596H1440V184.005L1440 184.005V185L0.00390623 185L0 185V100.658H13.5806L13.6063 99.9725L13.2013 99.8635C12.9869 99.8082 12.768 99.7717 12.5473 99.7545C12.2093 99.7545 11.8603 99.5485 11.9243 99.3945C11.9463 99.3186 11.8603 99.2515 11.6953 99.2435C11.6075 99.2425 11.521 99.2224 11.4417 99.1847C11.3624 99.1469 11.2924 99.0924 11.2362 99.0249C11.1801 98.9574 11.1393 98.8784 11.1167 98.7936C11.0941 98.7088 11.0903 98.62 11.1053 98.5336C11.1158 98.445 11.1086 98.3552 11.0842 98.2694C11.0598 98.1836 11.0187 98.1034 10.9633 98.0336C10.8737 97.9109 10.8228 97.7641 10.8173 97.6123C10.8118 97.4604 10.8518 97.3104 10.9323 97.1815C11.0073 97.0415 11.0073 96.9745 10.9323 96.9745C10.7783 96.9745 10.7893 96.5825 10.9323 96.4825C11.0073 96.4515 11.0293 96.2426 11.0073 96.0246C10.9779 95.8027 11.0079 95.577 11.0943 95.3705C11.1769 95.1636 11.2324 94.9468 11.2593 94.7255C11.2653 94.556 11.3062 94.3896 11.3793 94.2365C11.5143 93.7774 11.5181 93.2897 11.3903 92.8285C11.3113 92.8105 11.3673 92.6865 11.5213 92.5105C11.6412 92.3968 11.7306 92.2548 11.7813 92.0975C11.7813 92.0106 11.8173 91.9435 11.8593 91.9435C11.9013 91.9435 11.9573 91.7025 11.9683 91.4095C11.9733 91.153 12.0174 90.8987 12.0993 90.6555C12.13 90.6053 12.1488 90.5488 12.1541 90.4902C12.1595 90.4316 12.1514 90.3725 12.1303 90.3176C12.0227 89.7482 12.0878 89.1596 12.3173 88.6275C12.4903 88.3876 12.5013 88.2355 12.4373 87.5355C12.3573 87.1699 12.3794 86.7894 12.5013 86.4355C12.6074 86.1346 12.6483 85.8145 12.6213 85.4965C12.6103 85.1355 12.6333 84.3955 12.6663 83.8705C12.6993 83.3455 12.7633 82.3645 12.8083 81.7085C12.8092 81.2824 12.8599 80.8579 12.9593 80.4435C13.047 80.0317 13.077 79.6096 13.0483 79.1895C13.0424 78.598 13.0826 78.0069 13.1683 77.4215C13.2324 77.0138 13.2689 76.6022 13.2773 76.1895C13.2788 75.8074 13.319 75.4265 13.3973 75.0525C13.4773 74.5577 13.5314 74.059 13.5593 73.5585C13.6373 72.0526 13.7123 71.4855 13.8663 71.3125C13.9651 71.1737 14.0388 71.0187 14.0843 70.8545C14.1813 70.4495 14.5083 70.4605 14.5953 70.8855C14.6293 71.0615 14.7263 71.2035 14.8133 71.2035C15.0333 71.2035 15.1093 71.4795 15.1623 72.3795C15.1885 72.7754 15.24 73.1692 15.3163 73.5585C15.3741 73.7769 15.4076 74.0009 15.4163 74.2265C15.4163 74.3885 15.4633 74.5195 15.5163 74.5195C15.6473 74.5195 15.7253 75.1726 15.6253 75.4465C15.5999 75.5355 15.5927 75.6286 15.6042 75.7204C15.6157 75.8121 15.6457 75.9007 15.6923 75.9805C15.7673 76.1455 15.8123 76.3215 15.7563 76.3635C15.7479 76.8084 15.8155 77.2514 15.9563 77.6735C16.0315 78.0263 16.0819 78.3838 16.1073 78.7435C16.1853 79.4195 16.2923 79.8665 16.3923 79.8665C16.4363 79.8665 16.4483 79.9636 16.4143 80.0845C16.3803 80.2056 16.4143 80.2915 16.4893 80.2915C16.5873 80.2915 16.5873 80.3345 16.5123 80.4345C16.3923 80.5885 16.4673 81.1555 16.6213 81.1555C16.6743 81.1555 16.6743 81.2195 16.6213 81.3315C16.5853 81.3889 16.5672 81.4556 16.5691 81.5232C16.5711 81.5909 16.5931 81.6564 16.6323 81.7115C16.7293 81.8695 16.7183 81.9366 16.5983 82.0116C16.4783 82.0866 16.4653 82.1405 16.5653 82.2405C16.6543 82.3155 16.6743 82.5295 16.6323 82.8295C16.5873 83.1675 16.6093 83.2985 16.7073 83.2985C16.8053 83.2985 16.8273 83.4495 16.7853 83.9075C16.7478 84.2637 16.7545 84.6231 16.8053 84.9776C16.8503 85.2176 16.8503 85.4465 16.8053 85.4575C16.7799 85.8229 16.8634 86.1876 17.0453 86.5055C17.1132 86.5981 17.1547 86.7073 17.1653 86.8215C17.2019 86.9749 17.2858 87.1127 17.4053 87.2155C17.6013 87.3575 17.6013 87.3685 17.3723 87.5755C17.0873 87.8395 17.0783 88.0005 17.1873 89.5395C17.2513 90.4665 17.3703 90.8915 17.5703 90.8915C17.6213 90.8915 17.5793 90.9825 17.4703 91.0915C17.2943 91.2645 17.2613 91.4296 17.2833 92.0415C17.2844 92.3399 17.3247 92.6367 17.4033 92.9245C17.4828 93.1749 17.5232 93.4359 17.5233 93.6985C17.5111 93.985 17.5805 94.269 17.7233 94.5175C17.8332 94.7498 17.8902 95.0036 17.8902 95.2605C17.8902 95.5175 17.8332 95.7713 17.7233 96.0035C17.6033 96.2375 17.5833 96.3956 17.6703 96.5376C17.7694 96.9617 17.7107 97.4074 17.5053 97.7915C17.393 98.01 17.3058 98.2405 17.2453 98.4785C17.1033 99.0455 16.8523 99.4505 16.6453 99.4505C16.5673 99.4505 16.4913 99.4835 16.4913 99.5255C16.4913 99.7235 15.8573 100.04 15.3793 100.082L14.8433 100.138L14.8492 100.658H21.661C21.662 100.536 21.6594 100.414 21.6533 100.292C21.6303 99.9426 21.5973 99.8975 21.2703 99.8335C20.9421 99.7197 20.6506 99.5199 20.426 99.2551C20.2014 98.9902 20.0519 98.6698 19.9933 98.3275C19.9707 98.1078 19.9112 97.8934 19.8173 97.6935C19.7193 97.5845 19.7083 97.3775 19.7083 96.6125C19.7083 96.4925 19.6783 96.1015 19.6443 95.7295C19.5883 95.2825 19.6113 95.0115 19.6973 94.9115C19.8045 94.6679 19.8571 94.4037 19.8513 94.1375C19.8584 93.9285 19.8808 93.7203 19.9183 93.5145C19.9898 93.0262 19.9861 92.5298 19.9073 92.0425C19.8743 91.9861 19.8569 91.9219 19.8569 91.8566C19.8569 91.7912 19.8743 91.727 19.9073 91.6705C20.0074 91.2149 20.0653 90.7509 20.0803 90.2845L20.0828 90.2414C20.1474 89.1563 20.1524 89.0723 19.9373 88.8985C19.7193 88.7225 19.7193 88.7116 19.9063 88.5806C20.2059 88.1064 20.3432 87.5476 20.2972 86.9885C20.2837 86.0459 20.3506 85.1038 20.4973 84.1725C20.5046 84.1604 20.5092 84.1468 20.5109 84.1328C20.5126 84.1187 20.5113 84.1044 20.507 84.0909C20.5028 84.0774 20.4956 84.0649 20.4862 84.0543C20.4768 84.0438 20.4652 84.0353 20.4523 84.0295C20.3763 83.9965 20.3763 83.8096 20.4633 83.4296C20.5235 83.1943 20.5414 82.9501 20.5162 82.7085C20.5 82.6721 20.4957 82.6314 20.5037 82.5923C20.5118 82.5532 20.5319 82.5176 20.5613 82.4905C20.5756 82.4848 20.5886 82.4761 20.5993 82.465C20.6101 82.4538 20.6184 82.4406 20.6237 82.426C20.6289 82.4115 20.6311 82.396 20.63 82.3806C20.6289 82.3652 20.6245 82.3502 20.6172 82.3365C20.5924 82.1967 20.6069 82.0526 20.6592 81.9205C20.7311 81.6097 20.7713 81.2924 20.7792 80.9735C20.7791 80.7306 20.8083 80.4885 20.8663 80.2525C20.9188 80.1128 20.9488 79.9657 20.9553 79.8165C20.9673 79.6405 21.0082 79.3025 21.0422 79.0735C21.1057 78.7725 21.121 78.4633 21.0873 78.1575C21.1046 77.7686 21.1551 77.3819 21.2383 77.0015C21.3336 76.5264 21.3924 76.0447 21.4142 75.5605C21.4142 74.9175 21.5123 74.5015 21.6323 74.5795C21.6773 74.6095 21.7533 74.4895 21.7863 74.3165C21.8843 73.8885 22.0903 74.0005 22.2443 74.5565C22.4269 75.2811 22.5252 76.0244 22.5372 76.7715C22.5626 77.2408 22.6478 78.3953 22.7227 79.4093L22.7372 79.6066C22.8152 80.6636 22.8793 81.7445 22.8683 82.0065C22.8469 82.2268 22.8696 82.4492 22.9352 82.6605C23.0911 83.9826 23.158 85.3136 23.1352 86.6445C23.0929 87.0478 23.13 87.4555 23.2443 87.8445C23.3423 87.9535 23.3533 88.2475 23.3113 88.8145C23.2488 89.16 23.2708 89.5154 23.3752 89.8505C23.4774 90.1864 23.5293 90.5355 23.5292 90.8866C23.4586 91.6267 23.5709 92.3729 23.8562 93.0595C23.9982 93.2995 24.0402 93.4615 23.9762 93.5285C23.9137 93.9362 23.9393 94.3526 24.0513 94.7495C24.4873 97.4115 24.4222 98.6135 23.8223 99.1915C23.4843 99.5075 22.7103 99.7365 22.7103 99.5185C22.7103 99.4655 22.6543 99.4545 22.5903 99.4965C22.4898 99.8753 22.4652 100.27 22.5178 100.658H27.363C27.4409 100.529 27.5458 100.418 27.6712 100.333C27.9002 100.182 27.9452 100.081 27.9452 99.6005C27.9452 99.0447 27.9452 99.0335 27.5403 98.9135C27.3132 98.856 27.1152 98.7168 26.9842 98.5225C26.9092 98.3795 26.8002 98.2595 26.7662 98.2595C26.6992 98.2595 26.6012 97.9545 26.3302 96.8065C26.1882 96.1975 26.1432 95.4765 26.2522 95.4765C26.2992 95.4765 26.2743 95.3115 26.1993 95.1275C26.0413 94.7446 26.0412 94.6475 26.2412 93.3815C26.3013 93.065 26.3201 92.742 26.2972 92.4205C26.2642 92.3335 26.2862 92.2665 26.3392 92.2665C26.4302 91.6259 26.4239 90.9752 26.3202 90.3365C26.2954 90.2248 26.3143 90.1077 26.3732 90.0095C26.4787 89.5924 26.5269 89.1627 26.5162 88.7325C26.5502 87.7685 26.5272 87.4685 26.3962 87.2685C26.3102 87.1405 26.2763 87.0285 26.3323 87.0285C26.4932 87.0285 26.5912 86.5925 26.4602 86.4615C26.2982 86.2885 26.3292 86.1535 26.5052 86.2325L26.5161 86.2374C26.6812 86.3122 26.6821 86.3126 26.7232 84.9675C26.7342 84.4225 26.7042 84.0285 26.6482 84.0285C26.5922 84.0285 26.5802 83.9755 26.6252 83.8975C26.7612 83.6905 26.7832 83.5285 26.8252 82.3165C26.8482 81.7045 26.8933 81.1035 26.9153 80.9835C26.928 80.9321 26.9276 80.8783 26.9139 80.827C26.9003 80.7758 26.8739 80.7288 26.8373 80.6905C26.7503 80.6345 26.7503 80.5925 26.8373 80.5255C26.9643 80.4495 27.0642 79.8705 27.1642 78.7255C27.1814 78.4521 27.2206 78.1334 27.2465 77.9232C27.2537 77.8644 27.2599 77.814 27.2643 77.7755C27.2794 77.6425 27.3019 77.2792 27.3267 76.8796L27.3512 76.4875C27.3762 75.9517 27.4303 75.4175 27.5132 74.8875C27.5692 74.5355 27.6252 74.1555 27.6252 74.0355C27.5805 73.3768 27.6728 72.7159 27.8962 72.0945C27.9902 71.9917 28.0481 71.8612 28.0612 71.7225C28.0612 71.6026 28.1142 71.5155 28.1812 71.5495C28.4402 71.6335 28.5942 72.4825 28.7032 74.4495C28.7592 75.5725 28.8353 76.9155 28.8683 77.4495C28.9013 77.9835 28.9342 78.7355 28.9432 79.1285C28.9522 79.5215 28.9962 79.8135 29.0522 79.7845C29.1082 79.7555 29.1192 79.8425 29.0632 79.9845C28.9762 80.2365 28.9762 80.2965 29.0632 81.0965C29.1192 81.5355 29.2062 83.6195 29.2922 86.4545C29.2902 87.083 29.338 87.7106 29.4352 88.3315C29.5128 88.7486 29.5494 89.1723 29.5442 89.5965C29.5552 90.1555 29.5782 90.7566 29.6002 90.9296C29.6372 91.2336 29.717 91.5309 29.8372 91.8125C29.895 92.1089 29.9101 92.4119 29.8822 92.7125C29.8534 92.9774 29.8831 93.2454 29.9692 93.4975C30.0025 93.5216 30.0264 93.5566 30.0366 93.5964C30.0469 93.6362 30.0428 93.6784 30.0252 93.7155C29.9995 93.9385 30.0174 94.1644 30.0782 94.3805C30.2799 95.1245 30.3141 95.9038 30.1782 96.6626C30.0672 96.6626 30.0672 96.6855 30.1672 96.7495C30.2542 96.7935 30.2652 96.8785 30.1982 96.9785C30.1263 97.1354 30.0892 97.306 30.0892 97.4785C30.0892 97.8915 30.0032 98.1545 29.8492 98.1545C29.7962 98.1545 29.6532 98.2775 29.5332 98.4285C29.4132 98.5795 29.2902 98.6795 29.2592 98.6465C29.2282 98.6135 29.1212 98.6356 29.0212 98.6886C28.8792 98.7686 28.8122 98.7555 28.7702 98.6685C28.7482 98.5905 28.7142 98.8865 28.7142 99.3115C28.7032 99.9235 28.7372 100.086 28.8572 100.086C28.9542 100.086 28.9992 100.142 28.9432 100.262C28.9284 100.31 28.9302 100.363 28.9483 100.41C28.9664 100.458 28.9998 100.498 29.0432 100.525C29.0985 100.549 29.1343 100.596 29.1532 100.658H33.4999L53.6598 118.12L53.7199 110.637L53.9829 107.379L53.854 106.079L53.4649 105.035C53.4649 105.035 53.854 104.923 53.854 104.572C53.8383 104.287 53.793 104.004 53.719 103.728C53.719 103.728 53.854 103.051 53.854 102.876C53.854 102.701 54.372 102.161 54.372 102.161C54.372 102.161 54.0719 101.861 54.2459 101.643C54.3775 101.333 54.4456 100.999 54.4459 100.662L56.398 100.654V102.024H56.9869V103.267H61.0969L61.4229 103.785H61.8139C61.8484 103.59 61.8722 103.394 61.8849 103.196V102.152C62.0798 102.144 62.2738 102.123 62.4659 102.089C62.6799 102.048 62.9289 102.024 62.9289 102.024V101.243H64.2289V102.024H68.9909V102.479H69.9629L70.1629 101.961C70.39 101.789 70.6301 101.634 70.8809 101.498C71.0558 101.482 71.2319 101.482 71.4069 101.498C71.4069 101.498 71.1909 102.613 71.4069 102.613H76.0328V104.374H77.2768V104.7H77.5398L77.4748 105.089L76.7599 105.289V123.058H80.4789V108.809L80.0788 108.42L79.8868 108.031L80.9938 107.377L81.2568 106.398C81.2568 106.398 81.3569 106.072 81.5829 106.072H88.2328V107.772H89.6738L88.8848 108.553V122.974H91.1698V123.058H98.4507L111.976 126.584C111.993 126.241 112.072 125.902 112.209 125.583C112.382 125.343 112.393 125.191 112.329 124.491C112.249 124.125 112.272 123.744 112.393 123.391C112.5 123.09 112.54 122.77 112.513 122.452C112.502 122.091 112.525 121.351 112.558 120.826C112.591 120.301 112.655 119.32 112.7 118.664C112.701 118.238 112.752 117.813 112.851 117.399C112.939 116.987 112.969 116.565 112.94 116.145C112.935 115.553 112.975 114.962 113.06 114.377C113.125 113.969 113.161 113.557 113.169 113.145C113.171 112.763 113.211 112.382 113.289 112.008C113.369 111.513 113.424 111.014 113.451 110.514C113.529 109.008 113.604 108.441 113.758 108.268C113.857 108.129 113.931 107.974 113.976 107.81C114.073 107.405 114.4 107.416 114.487 107.841C114.521 108.017 114.618 108.159 114.705 108.159C114.925 108.159 115.001 108.435 115.054 109.335C115.081 109.73 115.132 110.124 115.208 110.514C115.266 110.732 115.3 110.956 115.308 111.182C115.308 111.344 115.355 111.475 115.408 111.475C115.539 111.475 115.617 112.128 115.517 112.402C115.492 112.491 115.485 112.584 115.496 112.675C115.508 112.767 115.538 112.856 115.584 112.936C115.659 113.101 115.704 113.277 115.648 113.319C115.64 113.763 115.708 114.207 115.848 114.629C115.924 114.981 115.974 115.339 115.999 115.699C116.077 116.375 116.184 116.822 116.284 116.822C116.328 116.822 116.34 116.919 116.306 117.04C116.272 117.161 116.306 117.247 116.381 117.247C116.479 117.247 116.479 117.29 116.404 117.39C116.284 117.544 116.359 118.111 116.513 118.111C116.566 118.111 116.566 118.175 116.513 118.287C116.478 118.344 116.459 118.411 116.461 118.478C116.463 118.546 116.485 118.611 116.524 118.667C116.621 118.825 116.61 118.892 116.49 118.967C116.37 119.042 116.357 119.096 116.457 119.196C116.546 119.271 116.566 119.485 116.524 119.785C116.479 120.123 116.501 120.254 116.599 120.254C116.697 120.254 116.719 120.405 116.677 120.863C116.64 121.219 116.647 121.578 116.697 121.933C116.742 122.173 116.742 122.402 116.697 122.413C116.672 122.778 116.756 123.143 116.937 123.461C117.005 123.553 117.047 123.662 117.057 123.777C117.094 123.93 117.178 124.068 117.297 124.171C117.493 124.313 117.493 124.324 117.264 124.531C116.979 124.795 116.97 124.956 117.079 126.495C117.143 127.422 117.262 127.847 117.462 127.847C117.506 127.847 117.482 127.913 117.406 128L119.8 128.624C119.9 128.169 119.958 127.706 119.972 127.24L119.975 127.196C120.04 126.111 120.045 126.027 119.829 125.854C119.611 125.678 119.611 125.667 119.798 125.536C120.098 125.061 120.235 124.503 120.189 123.944C120.176 123.001 120.243 122.059 120.389 121.128C120.397 121.115 120.401 121.102 120.403 121.088C120.405 121.074 120.403 121.06 120.399 121.046C120.395 121.032 120.388 121.02 120.378 121.009C120.369 120.999 120.357 120.99 120.344 120.985C120.268 120.952 120.268 120.765 120.355 120.385C120.416 120.149 120.434 119.905 120.408 119.664C120.392 119.627 120.388 119.586 120.396 119.547C120.404 119.508 120.424 119.473 120.453 119.446C120.468 119.44 120.481 119.431 120.491 119.42C120.502 119.409 120.511 119.396 120.516 119.381C120.519 119.372 120.521 119.363 120.522 119.354L120.522 119.348C120.523 119.344 120.522 119.34 120.522 119.336C120.521 119.32 120.517 119.305 120.509 119.292C120.485 119.152 120.499 119.008 120.551 118.876C120.623 118.565 120.663 118.248 120.671 117.929C120.671 117.686 120.701 117.444 120.758 117.208C120.811 117.068 120.841 116.921 120.847 116.772C120.859 116.596 120.9 116.258 120.934 116.029C120.998 115.728 121.013 115.418 120.979 115.113C120.997 114.724 121.047 114.337 121.13 113.957C121.226 113.481 121.285 113 121.306 112.516C121.306 111.873 121.404 111.457 121.524 111.535C121.569 111.565 121.645 111.445 121.678 111.272C121.776 110.844 121.982 110.956 122.136 111.512C122.319 112.236 122.417 112.979 122.429 113.727C122.455 114.196 122.54 115.352 122.615 116.366L122.629 116.562C122.707 117.619 122.771 118.7 122.76 118.962C122.739 119.182 122.762 119.404 122.827 119.616C122.983 120.938 123.05 122.269 123.027 123.6C122.985 124.003 123.022 124.411 123.136 124.8C123.234 124.909 123.245 125.203 123.203 125.77C123.141 126.115 123.163 126.47 123.267 126.806C123.37 127.141 123.422 127.491 123.421 127.842C123.358 128.508 123.443 129.179 123.668 129.808L126.099 130.556L126.133 130.337C126.194 130.02 126.212 129.697 126.189 129.376C126.156 129.289 126.178 129.222 126.231 129.222C126.322 128.581 126.316 127.93 126.212 127.292C126.188 127.18 126.206 127.063 126.265 126.965C126.371 126.547 126.419 126.118 126.408 125.688C126.442 124.724 126.419 124.424 126.288 124.224C126.202 124.096 126.168 123.984 126.224 123.984C126.385 123.984 126.483 123.548 126.352 123.417C126.19 123.244 126.221 123.109 126.397 123.188L126.408 123.193C126.573 123.267 126.574 123.268 126.615 121.923C126.626 121.378 126.596 120.984 126.54 120.984C126.484 120.984 126.472 120.931 126.517 120.853C126.653 120.646 126.675 120.484 126.717 119.272C126.74 118.66 126.785 118.059 126.807 117.939C126.82 117.887 126.82 117.833 126.806 117.782C126.792 117.731 126.766 117.684 126.729 117.646C126.642 117.59 126.642 117.548 126.729 117.481C126.856 117.405 126.956 116.826 127.056 115.681C127.074 115.407 127.113 115.089 127.139 114.878C127.146 114.82 127.152 114.769 127.156 114.731C127.172 114.598 127.194 114.234 127.219 113.835L127.22 113.814C127.228 113.691 127.236 113.566 127.243 113.443C127.268 112.907 127.322 112.373 127.405 111.843C127.461 111.491 127.517 111.111 127.517 110.991C127.473 110.332 127.565 109.671 127.788 109.05C127.882 108.947 127.94 108.816 127.953 108.678C127.953 108.558 128.006 108.471 128.073 108.505C128.332 108.589 128.486 109.438 128.595 111.405C128.651 112.528 128.727 113.871 128.76 114.405C128.793 114.939 128.826 115.691 128.835 116.084C128.844 116.477 128.888 116.769 128.944 116.74C129 116.711 129.011 116.798 128.955 116.94C128.868 117.192 128.868 117.252 128.955 118.052C129.011 118.491 129.098 120.575 129.184 123.41C129.182 124.038 129.23 124.666 129.327 125.287C129.405 125.704 129.442 126.127 129.436 126.552C129.447 127.111 129.47 127.712 129.492 127.885C129.529 128.189 129.609 128.486 129.729 128.768C129.787 129.064 129.802 129.367 129.774 129.668C129.746 129.932 129.775 130.2 129.861 130.453C129.895 130.477 129.919 130.512 129.929 130.551C129.939 130.591 129.935 130.633 129.917 130.671C129.892 130.894 129.91 131.12 129.97 131.336C130.01 131.482 130.043 131.63 130.07 131.779L178.051 146.554L179.214 146.565V145.871H178.872V144.739L179.806 144.747V142.926L181.079 142.936V132.514L186.616 132.545V142.982L187.893 142.993V144.814L188.832 144.822V145.953H188.493V146.653L189.726 146.664V147.214L190.71 147.227V150.397L219.251 158.498L219.336 158.492C219.626 158.474 219.946 158.453 220.243 158.453C220.493 158.446 220.744 158.469 220.986 158.522C221.12 158.555 221.258 158.572 221.398 158.571C221.656 158.561 221.912 158.529 222.16 158.472C222.673 158.366 223.2 158.312 223.729 158.311C224.329 158.311 224.81 158.335 225.157 158.351L225.255 158.356C225.426 158.364 225.565 158.37 225.679 158.37C225.779 158.37 226.026 158.37 226.102 158.272C226.242 158.171 226.407 158.095 226.586 158.05C226.765 158.004 226.954 157.99 227.141 158.007C227.182 158.007 227.223 158.008 227.264 158.01L227.298 158.011L227.337 158.013C227.385 158.016 227.432 158.019 227.48 158.023C227.918 158.064 227.99 158.191 228.062 158.325C228.09 158.399 228.146 158.463 228.221 158.51C228.297 158.557 228.389 158.584 228.485 158.587C228.543 158.593 228.602 158.596 228.66 158.596C228.84 158.591 229.02 158.576 229.197 158.549C229.489 158.507 229.785 158.485 230.082 158.482C230.289 158.482 230.495 158.493 230.7 158.515C231.094 158.557 231.414 158.571 231.675 158.581C232.233 158.606 232.324 158.619 232.324 158.752C232.33 158.86 232.368 158.965 232.436 159.058C232.517 159.187 232.507 159.195 232.398 159.22C232.007 159.306 232.081 160.239 232.16 160.788C232.16 160.82 232.219 160.844 232.283 160.844H240.757C244.917 160.844 247.116 161.191 247.116 161.848C247.116 162.142 247.495 162.227 247.841 162.251C247.88 162.251 247.92 162.252 247.961 162.252C248.489 162.271 249.017 162.225 249.531 162.115C250.191 161.932 255.572 161.334 257.084 161.23C257.808 161.182 258.275 161.111 258.685 161.047C259.152 160.966 259.626 160.924 260.1 160.922C260.556 160.927 261.005 161.023 261.415 161.204C261.706 161.336 262.023 161.411 262.348 161.424C262.5 161.424 262.658 161.436 262.825 161.448L262.855 161.45L262.912 161.454C263.093 161.467 263.277 161.479 263.486 161.479C264.003 161.481 264.516 161.386 264.992 161.199C265.635 160.954 265.683 160.871 265.646 160.724C265.631 160.658 265.612 160.575 265.834 160.38C265.928 160.296 266.015 160.204 266.092 160.105C266.277 159.873 266.316 159.825 268.182 159.647L268.513 159.615V159.362H270.331V158.889H327.966V159.362H329.784V159.835H331.085V160.763L331.112 160.763L331.134 160.764C331.16 160.764 331.187 160.765 331.212 160.766C331.253 160.768 331.294 160.769 331.334 160.769H331.634C331.666 160.769 331.696 160.769 331.725 160.768L331.778 160.767C331.82 160.765 331.862 160.764 331.905 160.764H332.305C332.386 160.764 332.468 160.765 332.551 160.767L332.625 160.768L332.673 160.768L332.727 160.769C332.753 160.769 332.78 160.769 332.806 160.769C333.487 160.769 333.801 160.721 333.884 160.6C333.961 159.901 333.965 159.198 333.894 158.498C333.893 158.495 333.893 158.492 333.891 158.489C333.89 158.483 333.887 158.477 333.883 158.472C333.877 158.464 333.869 158.457 333.86 158.453C333.82 158.43 333.784 158.403 333.752 158.373H335.413C335.456 158.373 335.504 158.373 335.556 158.372C335.624 158.371 335.701 158.369 335.786 158.364C335.963 158.356 336.165 158.35 336.357 158.35C336.578 158.329 336.801 158.354 337.01 158.422C337.517 158.589 338.059 158.65 338.595 158.6C338.784 158.6 339.02 158.583 339.273 158.564L339.335 158.56C339.625 158.538 339.945 158.515 340.241 158.515C340.492 158.507 340.743 158.533 340.985 158.593C341.118 158.631 341.257 158.65 341.396 158.649C341.655 158.638 341.91 158.601 342.159 158.537C342.671 158.416 343.199 158.354 343.728 158.354C344.328 158.354 344.809 158.38 345.156 158.399L345.254 158.404C345.425 158.413 345.563 158.42 345.677 158.42C345.777 158.42 346.025 158.42 346.101 158.309C346.241 158.194 346.406 158.108 346.585 158.057C346.764 158.005 346.953 157.988 347.14 158.008C347.207 158.009 347.274 158.011 347.34 158.015C347.387 158.018 347.433 158.022 347.479 158.027C347.917 158.073 347.988 158.217 348.06 158.369C348.088 158.453 348.144 158.527 348.22 158.58C348.296 158.633 348.388 158.664 348.484 158.667C348.504 158.669 348.524 158.671 348.544 158.673L348.567 158.674C348.586 158.676 348.605 158.676 348.625 158.677L348.639 158.677L348.659 158.677C348.839 158.672 349.018 158.654 349.195 158.624C349.488 158.576 349.784 158.551 350.081 158.548C350.288 158.548 350.494 158.561 350.699 158.585C351.093 158.633 351.412 158.649 351.674 158.661C352.232 158.689 352.323 158.704 352.323 158.855C352.329 158.977 352.367 159.097 352.434 159.203C352.515 159.348 352.505 159.358 352.397 159.386C352.006 159.484 352.08 160.544 352.159 161.168C352.159 161.205 352.218 161.232 352.282 161.232H360.756C364.691 161.232 366.872 161.585 367.095 162.255C367.578 162.263 368.06 162.216 368.531 162.115C369.19 161.932 374.571 161.334 376.083 161.23C376.807 161.182 377.275 161.111 377.685 161.047C378.152 160.966 378.625 160.924 379.1 160.922C379.555 160.927 380.004 161.023 380.414 161.204C380.705 161.336 381.023 161.411 381.347 161.424C381.5 161.424 381.657 161.436 381.824 161.448L381.855 161.45C382.055 161.464 382.255 161.479 382.485 161.479C383.003 161.481 383.516 161.386 383.992 161.199C384.634 160.954 384.683 160.871 384.646 160.724C384.631 160.658 384.612 160.575 384.833 160.38C384.928 160.296 385.014 160.204 385.091 160.105C385.277 159.873 385.316 159.825 387.181 159.647L387.512 159.615V159.362H389.33V158.889H446.965V159.362H448.784V159.835H450.085V160.763L450.115 160.763L450.143 160.764C450.166 160.764 450.189 160.765 450.212 160.766C450.253 160.768 450.293 160.769 450.333 160.769H450.633C450.685 160.769 450.732 160.768 450.777 160.767C450.82 160.765 450.862 160.764 450.905 160.764H451.305C451.385 160.764 451.468 160.765 451.551 160.767L451.554 160.767C451.637 160.768 451.722 160.769 451.805 160.769C452.487 160.769 452.8 160.721 452.883 160.6C452.961 159.901 452.964 159.198 452.893 158.498C452.892 158.489 452.888 158.48 452.882 158.472C452.879 158.468 452.876 158.464 452.872 158.461L452.868 158.458L452.865 158.456L452.863 158.454L452.859 158.453C452.82 158.43 452.784 158.403 452.751 158.373H454.413C454.441 158.373 454.471 158.373 454.504 158.373C454.528 158.372 454.554 158.372 454.58 158.372C454.642 158.371 454.711 158.368 454.785 158.364C454.825 158.362 454.866 158.36 454.907 158.359C454.949 158.357 454.991 158.356 455.034 158.355C455.141 158.352 455.25 158.35 455.357 158.35C455.577 158.329 455.8 158.354 456.009 158.422C456.516 158.589 457.058 158.65 457.594 158.6C457.783 158.6 458.019 158.583 458.273 158.564L458.335 158.56C458.625 158.538 458.944 158.515 459.241 158.515C459.492 158.507 459.742 158.533 459.985 158.593C460.118 158.631 460.257 158.65 460.396 158.649C460.654 158.638 460.91 158.601 461.159 158.537C461.671 158.416 462.198 158.354 462.727 158.354C463.328 158.354 463.808 158.38 464.155 158.399L464.253 158.404C464.424 158.413 464.563 158.42 464.677 158.42C464.777 158.42 465.024 158.42 465.1 158.309C465.24 158.194 465.405 158.108 465.584 158.057C465.763 158.005 465.953 157.988 466.139 158.008C466.252 158.009 466.366 158.015 466.478 158.027C466.917 158.073 466.988 158.217 467.06 158.369C467.088 158.453 467.144 158.527 467.22 158.58C467.296 158.633 467.388 158.664 467.483 158.667C467.541 158.674 467.6 158.677 467.659 158.677C467.839 158.672 468.018 158.654 468.195 158.624C468.487 158.576 468.784 158.551 469.081 158.548C469.287 158.548 469.493 158.561 469.698 158.585C470.093 158.633 470.412 158.649 470.673 158.661C471.232 158.689 471.323 158.704 471.323 158.855C471.328 158.977 471.366 159.097 471.434 159.203C471.515 159.348 471.505 159.358 471.397 159.386C471.005 159.484 471.079 160.544 471.158 161.168C471.158 161.205 471.218 161.232 471.282 161.232H479.755C483.915 161.232 486.114 161.626 486.114 162.373C486.114 162.842 486.859 162.842 487.215 162.842C487.35 162.842 487.493 162.842 487.645 162.834C487.796 162.827 487.96 162.827 488.121 162.827H488.125C488.426 162.787 488.732 162.808 489.024 162.887C489.315 162.966 489.584 163.102 489.813 163.285C490.12 163.634 489.98 164.267 489.83 164.934C489.545 166.198 489.23 167.63 491.527 168.066C492.54 168.279 493.494 168.682 494.328 169.251C494.66 169.477 494.97 169.728 495.255 170H525.004L525.002 163.271L529.29 163.779L530.763 163.213L534.935 165.845H549.337L555.568 162.266C555.568 162.266 569.841 163.115 576.832 162.266C581.584 161.689 584.575 160.387 586.003 159.612V158.963C586.003 156.407 586.431 155.364 586.797 155.246C587.005 155.18 587.108 154.982 587.205 154.79C587.336 154.535 587.461 154.292 587.809 154.292C588.172 154.3 588.533 154.333 588.89 154.391C589.179 154.439 589.473 154.467 589.767 154.476C589.792 154.476 592.276 154.417 592.44 153.919C592.491 153.786 592.583 153.667 592.706 153.576C592.829 153.485 592.978 153.425 593.137 153.403C593.16 153.403 593.189 153.404 593.225 153.406C593.251 153.407 593.281 153.408 593.315 153.409C593.449 153.415 593.634 153.422 593.836 153.422C594.273 153.446 594.711 153.384 595.117 153.242C597.141 152.742 599.199 152.353 601.279 152.079C601.721 152.03 602.158 151.951 602.586 151.841C602.959 151.736 603.348 151.681 603.74 151.678C604.135 151.692 604.513 151.822 604.812 152.046C605.025 152.21 605.291 152.312 605.573 152.336C605.712 152.34 605.85 152.351 605.987 152.37C606.158 152.393 606.329 152.405 606.502 152.408C606.946 152.404 607.377 152.275 607.731 152.039C608.255 151.718 608.295 151.608 608.265 151.415C608.254 151.335 608.263 151.253 608.289 151.176C608.315 151.098 608.359 151.026 608.417 150.963C608.498 150.847 608.568 150.727 608.628 150.602C608.779 150.297 608.811 150.233 610.333 149.998L610.603 149.955V149.622H612.086V149H612.774L633.798 149.135H634.486V149.758H635.969V150.379H637.031V151.599C637.1 151.605 637.167 151.608 637.233 151.608C637.292 151.608 637.351 151.606 637.409 151.604L637.478 151.602C637.511 151.601 637.541 151.6 637.571 151.599C637.591 151.598 637.61 151.597 637.629 151.596L637.663 151.595L637.677 151.595L637.7 151.595C637.767 151.595 637.839 151.597 637.915 151.598L637.961 151.599L638.026 151.601C638.087 151.602 638.149 151.604 638.212 151.605C638.286 151.607 638.36 151.608 638.435 151.608C638.991 151.608 639.246 151.544 639.314 151.386V150.958L639.305 150.708L639.297 150.464C639.297 150.455 639.294 150.445 639.291 150.436C639.289 150.432 639.287 150.427 639.285 150.423C639.283 150.42 639.281 150.417 639.278 150.414L639.275 150.41C639.273 150.408 639.271 150.406 639.269 150.404C639.235 150.372 639.205 150.337 639.181 150.299L675 146L727.426 146.969L732.001 145H737L736.5 140.5L790.01 148.599L827.185 148.739H827.87V149.412H829.349V149.772L829.618 149.818C830.504 149.967 830.93 149.83 831.162 149.755C831.327 149.702 831.393 149.681 831.456 149.818C831.516 149.954 831.586 150.084 831.666 150.21C831.724 150.277 831.768 150.355 831.794 150.439C831.82 150.523 831.828 150.611 831.818 150.698C831.788 150.907 831.828 151.026 832.351 151.374C832.703 151.628 833.133 151.768 833.576 151.773C833.748 151.77 833.919 151.756 834.089 151.731C834.127 151.725 834.165 151.72 834.203 151.716C834.225 151.714 834.247 151.711 834.269 151.709C834.347 151.702 834.424 151.697 834.502 151.695C834.783 151.668 835.049 151.559 835.261 151.381C835.56 151.139 835.936 150.998 836.33 150.982C836.721 150.986 837.109 151.046 837.481 151.16C837.907 151.278 838.343 151.364 838.784 151.416C840.858 151.713 842.91 152.133 844.928 152.674C845.333 152.828 845.77 152.895 846.205 152.869C846.407 152.869 846.591 152.861 846.726 152.855L846.753 152.854L846.786 152.853L846.815 152.852L846.818 152.852L846.866 152.85L846.885 152.849L846.902 152.849C847.061 152.873 847.21 152.938 847.333 153.036C847.455 153.135 847.547 153.263 847.598 153.408C847.761 153.946 850.238 154.009 850.263 154.009C850.556 154 850.849 153.969 851.138 153.918C851.493 153.855 851.853 153.819 852.215 153.81C852.563 153.81 852.687 154.073 852.817 154.348L852.817 154.35C852.914 154.557 853.017 154.771 853.225 154.843C853.589 154.97 854.016 156.098 854.016 158.864V162.44C854.016 162.447 854.017 162.454 854.019 162.461L854.019 162.464L854.02 162.468C854.021 162.471 854.022 162.474 854.023 162.476L854.027 162.483L854.029 162.487L854.031 162.49H859.328V162.912H860.81V163.332H861.87V164.158C861.905 164.158 861.939 164.16 861.973 164.161C862.007 164.163 862.039 164.164 862.072 164.164H862.317C862.359 164.164 862.397 164.163 862.434 164.162L862.478 164.16C862.498 164.16 862.517 164.159 862.538 164.159H862.864C862.929 164.159 862.996 164.16 863.064 164.162C863.133 164.163 863.202 164.164 863.271 164.164C863.827 164.164 864.082 164.121 864.15 164.013C864.213 163.391 864.216 162.765 864.158 162.143L864.157 162.138L864.156 162.135C864.155 162.132 864.154 162.13 864.153 162.127L864.151 162.123L864.149 162.119C864.147 162.116 864.144 162.113 864.142 162.111C864.14 162.109 864.138 162.107 864.136 162.106L864.134 162.105L864.13 162.102C864.098 162.082 864.068 162.058 864.042 162.031H865.396C865.477 162.031 865.578 162.031 865.699 162.023C865.788 162.019 865.886 162.015 865.984 162.013C866.044 162.012 866.105 162.011 866.164 162.011C866.344 161.992 866.526 162.014 866.696 162.075C867.109 162.224 867.551 162.278 867.988 162.233C868.141 162.233 868.334 162.218 868.541 162.201L868.591 162.197C868.827 162.178 869.087 162.157 869.329 162.157C869.533 162.151 869.737 162.174 869.935 162.227C870.043 162.261 870.156 162.277 870.27 162.276C870.48 162.267 870.689 162.234 870.891 162.177C871.309 162.069 871.738 162.015 872.169 162.014C872.658 162.014 873.05 162.038 873.333 162.055L873.412 162.059C873.552 162.067 873.664 162.073 873.757 162.073C873.839 162.073 874.04 162.073 874.102 161.974C874.216 161.872 874.351 161.796 874.497 161.75C874.643 161.703 874.797 161.689 874.949 161.707C875.041 161.707 875.133 161.713 875.225 161.723C875.582 161.764 875.64 161.892 875.699 162.028C875.721 162.102 875.767 162.168 875.829 162.215C875.891 162.263 875.966 162.29 876.044 162.293C876.091 162.299 876.139 162.302 876.186 162.302C876.333 162.297 876.479 162.281 876.623 162.254C876.862 162.212 877.103 162.19 877.345 162.187C877.513 162.187 877.681 162.198 877.848 162.22C878.169 162.263 878.43 162.277 878.642 162.287C879.097 162.312 879.171 162.325 879.171 162.46C879.176 162.569 879.207 162.675 879.262 162.77C879.328 162.899 879.32 162.908 879.232 162.933C878.913 163.02 878.973 163.964 879.038 164.519C879.038 164.551 879.086 164.576 879.138 164.576H886.041C889.43 164.576 891.221 164.927 891.221 165.591C891.221 166.009 891.829 166.008 892.118 166.008C892.228 166.008 892.345 166.008 892.469 166.002C892.592 165.995 892.725 165.995 892.856 165.995H892.859C893.104 165.96 893.354 165.978 893.592 166.049C893.829 166.119 894.049 166.24 894.235 166.403C894.485 166.714 894.371 167.277 894.249 167.871C894.111 168.537 894.62 168.499 895.446 168.437C896.016 168.395 896.736 168.342 897.5 168.5C897.875 168.586 899.212 167.984 900.624 167.349C902.322 166.585 904.129 165.772 904.5 166.049C905.111 167.161 908.734 165.69 911.559 164.544C913.361 163.812 914.838 163.213 915 163.5V170H924.271C924.676 169.549 925.147 169.146 925.674 168.801C926.508 168.255 927.462 167.868 928.475 167.664C930.773 167.245 930.457 165.87 930.172 164.657C930.022 164.016 929.882 163.409 930.189 163.074C930.418 162.898 930.687 162.767 930.978 162.691C931.27 162.616 931.577 162.596 931.877 162.634H931.881L932.018 162.634C932.054 162.634 932.09 162.634 932.125 162.635C932.204 162.636 932.282 162.637 932.357 162.641C932.438 162.645 932.517 162.646 932.594 162.647C932.66 162.648 932.724 162.648 932.787 162.648C933.143 162.648 933.888 162.648 933.888 162.198C933.888 161.481 936.087 161.103 940.247 161.103H948.72C948.785 161.103 948.843 161.076 948.843 161.041C948.922 160.442 948.997 159.425 948.605 159.331C948.497 159.303 948.487 159.295 948.568 159.155C948.636 159.053 948.674 158.938 948.679 158.82C948.679 158.675 948.77 158.661 949.329 158.634C949.59 158.623 949.91 158.608 950.304 158.562C950.509 158.538 950.715 158.526 950.921 158.526C951.218 158.529 951.515 158.553 951.807 158.599C951.984 158.628 952.164 158.645 952.344 158.65C952.387 158.65 952.43 158.648 952.473 158.645L952.499 158.642L952.519 158.64C952.614 158.637 952.707 158.608 952.782 158.557C952.858 158.505 952.914 158.435 952.942 158.354C953.014 158.208 953.085 158.07 953.524 158.025C953.584 158.02 953.645 158.015 953.706 158.012C953.758 158.01 953.81 158.008 953.863 158.008C954.049 157.989 954.239 158.005 954.418 158.054C954.597 158.104 954.762 158.187 954.902 158.296C954.978 158.404 955.225 158.404 955.325 158.404C955.46 158.404 955.629 158.394 955.847 158.383C956.194 158.365 956.675 158.339 957.275 158.339C957.804 158.34 958.331 158.399 958.843 158.515C959.092 158.577 959.348 158.613 959.606 158.623C959.745 158.624 959.884 158.605 960.017 158.569C960.26 158.512 960.51 158.487 960.761 158.494C961.058 158.494 961.377 158.517 961.667 158.537L961.729 158.542C961.983 158.559 962.219 158.576 962.407 158.576C962.944 158.624 963.486 158.566 963.993 158.405C964.202 158.34 964.425 158.316 964.645 158.336C964.838 158.336 965.04 158.342 965.217 158.349C965.302 158.354 965.38 158.356 965.45 158.357C965.5 158.358 965.547 158.358 965.589 158.358H967.251C967.219 158.387 967.182 158.413 967.143 158.434C967.134 158.439 967.126 158.445 967.12 158.453C967.118 158.455 967.116 158.458 967.115 158.461L967.113 158.465C967.111 158.469 967.109 158.474 967.109 158.478C967.038 159.15 967.041 159.825 967.119 160.496C967.202 160.612 967.515 160.659 968.197 160.659C968.239 160.659 968.282 160.658 968.325 160.658L968.569 160.654C968.612 160.654 968.655 160.653 968.697 160.653H969.097C969.141 160.653 969.182 160.655 969.225 160.656C969.261 160.657 969.299 160.658 969.339 160.659L969.369 160.659H969.669L969.69 160.659L969.706 160.658L969.73 160.658L969.79 160.656C969.832 160.654 969.874 160.652 969.917 160.652V159.762H971.218V159.308H973.037V158.853H1030.67V159.308H1032.49V159.551L1032.82 159.581C1034.69 159.752 1034.73 159.798 1034.91 160.021C1034.99 160.116 1035.07 160.204 1035.17 160.285C1035.39 160.472 1035.37 160.551 1035.36 160.615C1035.32 160.756 1035.37 160.836 1036.01 161.071C1036.49 161.25 1037 161.342 1037.52 161.34C1037.65 161.34 1037.77 161.335 1037.88 161.329L1037.97 161.324L1038.15 161.312L1038.18 161.31C1038.34 161.298 1038.5 161.287 1038.66 161.287C1038.98 161.274 1039.3 161.202 1039.59 161.076C1040 160.902 1040.45 160.81 1040.9 160.806C1041.38 160.807 1041.85 160.847 1042.32 160.925C1042.73 160.987 1043.19 161.054 1043.92 161.101C1045.05 161.176 1048.37 161.518 1050.23 161.758C1051 161.327 1053.04 161.103 1056.25 161.103H1064.72C1064.76 161.103 1064.8 161.092 1064.82 161.075C1064.83 161.066 1064.84 161.054 1064.84 161.041C1064.92 160.442 1065 159.425 1064.6 159.331C1064.5 159.303 1064.49 159.295 1064.57 159.155C1064.64 159.053 1064.67 158.938 1064.68 158.82C1064.68 158.675 1064.77 158.661 1065.33 158.634C1065.59 158.623 1065.91 158.608 1066.3 158.562C1066.51 158.538 1066.71 158.526 1066.92 158.526C1067.22 158.529 1067.51 158.553 1067.81 158.599C1067.98 158.628 1068.16 158.645 1068.34 158.65C1068.4 158.65 1068.46 158.647 1068.52 158.64C1068.61 158.637 1068.71 158.608 1068.78 158.557C1068.86 158.505 1068.91 158.435 1068.94 158.354C1069.01 158.208 1069.08 158.07 1069.52 158.025C1069.6 158.018 1069.68 158.013 1069.75 158.01L1069.78 158.009L1069.81 158.009L1069.86 158.008C1070.05 157.989 1070.24 158.005 1070.42 158.054C1070.6 158.104 1070.76 158.187 1070.9 158.296C1070.98 158.404 1071.22 158.404 1071.32 158.404C1071.44 158.404 1071.58 158.397 1071.75 158.388L1071.85 158.383C1072.19 158.365 1072.67 158.339 1073.27 158.339C1073.8 158.34 1074.33 158.399 1074.84 158.515C1075.09 158.577 1075.35 158.613 1075.61 158.623C1075.74 158.624 1075.88 158.605 1076.02 158.569C1076.26 158.512 1076.51 158.487 1076.76 158.494C1077.06 158.494 1077.38 158.517 1077.67 158.537L1077.73 158.542L1077.73 158.542C1077.84 158.55 1077.95 158.557 1078.05 158.563C1078.18 158.571 1078.3 158.576 1078.41 158.576C1078.94 158.624 1079.49 158.566 1079.99 158.405C1080.2 158.34 1080.42 158.316 1080.64 158.336C1080.84 158.336 1081.04 158.342 1081.22 158.349C1081.36 158.358 1081.49 158.358 1081.59 158.358H1083.25C1083.24 158.369 1083.23 158.38 1083.21 158.39C1083.2 158.402 1083.18 158.413 1083.16 158.423L1083.15 158.428L1083.14 158.434L1083.14 158.436L1083.14 158.438C1083.13 158.441 1083.13 158.444 1083.12 158.447L1083.12 158.45L1083.12 158.453C1083.11 158.461 1083.11 158.469 1083.11 158.478C1083.04 159.15 1083.04 159.825 1083.12 160.496C1083.2 160.612 1083.51 160.659 1084.2 160.659C1084.28 160.659 1084.37 160.657 1084.45 160.656L1084.53 160.655C1084.59 160.654 1084.64 160.653 1084.7 160.653H1085.1L1085.12 160.653L1085.16 160.654L1085.17 160.654L1085.27 160.657C1085.3 160.658 1085.33 160.659 1085.37 160.659H1085.67C1085.71 160.659 1085.75 160.657 1085.79 160.656C1085.83 160.654 1085.87 160.652 1085.92 160.652V159.762H1087.22V159.308H1089.04V158.853H1146.67V159.308H1148.49V159.551L1148.82 159.581C1150.69 159.752 1150.73 159.798 1150.91 160.021C1150.99 160.116 1151.07 160.204 1151.17 160.285C1151.39 160.472 1151.37 160.551 1151.36 160.615C1151.32 160.756 1151.37 160.836 1152.01 161.071C1152.49 161.25 1153 161.342 1153.52 161.34C1153.73 161.34 1153.91 161.328 1154.09 161.316L1154.15 161.312L1154.18 161.31C1154.26 161.304 1154.34 161.299 1154.42 161.295C1154.5 161.29 1154.58 161.287 1154.65 161.287C1154.98 161.274 1155.3 161.202 1155.59 161.076C1156 160.902 1156.45 160.81 1156.9 160.806C1157.38 160.807 1157.85 160.847 1158.32 160.925C1158.73 160.987 1159.19 161.054 1159.92 161.101C1161.43 161.2 1166.81 161.775 1167.47 161.951C1167.99 162.056 1168.51 162.1 1169.04 162.082C1169.08 162.082 1169.12 162.081 1169.16 162.081C1169.22 162.08 1169.27 162.079 1169.32 162.078L1169.53 162.074L1169.61 162.072C1169.63 162.072 1169.66 162.072 1169.68 162.072H1169.9C1170.06 162.075 1170.23 162.111 1170.37 162.176C1170.52 162.241 1170.65 162.334 1170.75 162.448C1170.95 162.812 1174 162.855 1174.03 162.855C1174.36 162.855 1174.72 162.826 1175.1 162.793C1175.53 162.757 1175.98 162.721 1176.43 162.721C1176.54 162.717 1176.65 162.732 1176.75 162.765C1176.77 162.755 1176.8 162.745 1176.83 162.735C1176.86 162.726 1176.88 162.718 1176.91 162.709C1176.93 162.703 1176.96 162.697 1176.98 162.691C1177.27 162.616 1177.58 162.596 1177.88 162.634H1177.88C1178.04 162.634 1178.21 162.634 1178.36 162.641C1178.51 162.648 1178.65 162.648 1178.79 162.648C1179.14 162.648 1179.89 162.648 1179.89 162.198C1179.89 161.481 1182.09 161.103 1186.25 161.103H1194.72C1194.78 161.103 1194.84 161.076 1194.84 161.041C1194.92 160.442 1195 159.425 1194.6 159.331C1194.5 159.303 1194.49 159.295 1194.57 159.155C1194.64 159.053 1194.67 158.938 1194.68 158.82C1194.68 158.675 1194.77 158.661 1195.33 158.634L1195.43 158.629L1195.5 158.626C1195.54 158.624 1195.58 158.622 1195.62 158.62C1195.71 158.615 1195.79 158.609 1195.89 158.602C1196.02 158.592 1196.15 158.579 1196.3 158.562C1196.43 158.547 1196.56 158.537 1196.69 158.531C1196.76 158.528 1196.84 158.526 1196.92 158.526C1197.22 158.529 1197.51 158.553 1197.81 158.599C1197.98 158.628 1198.16 158.645 1198.34 158.65C1198.36 158.65 1198.37 158.65 1198.39 158.649L1198.42 158.648L1198.45 158.646L1198.48 158.644L1198.5 158.642L1198.52 158.64C1198.61 158.637 1198.71 158.608 1198.78 158.557C1198.86 158.505 1198.91 158.435 1198.94 158.354C1199.01 158.208 1199.08 158.07 1199.52 158.025C1199.64 158.014 1199.75 158.009 1199.86 158.008C1200.05 157.989 1200.24 158.005 1200.42 158.054C1200.6 158.104 1200.76 158.187 1200.9 158.296C1200.98 158.404 1201.22 158.404 1201.32 158.404L1201.34 158.404L1201.4 158.403L1201.45 158.402L1201.49 158.4C1201.57 158.397 1201.65 158.393 1201.75 158.388L1201.85 158.383L1201.85 158.383C1202.19 158.365 1202.67 158.339 1203.27 158.339C1203.8 158.34 1204.33 158.399 1204.84 158.515C1205.09 158.577 1205.35 158.613 1205.61 158.623C1205.74 158.624 1205.88 158.605 1206.02 158.569C1206.26 158.512 1206.51 158.487 1206.76 158.494C1207.06 158.494 1207.38 158.517 1207.67 158.537L1207.73 158.542L1207.73 158.542C1207.86 158.551 1207.99 158.56 1208.11 158.567C1208.15 158.568 1208.18 158.57 1208.21 158.572C1208.28 158.574 1208.35 158.576 1208.41 158.576C1208.94 158.624 1209.49 158.566 1209.99 158.405C1210.2 158.34 1210.42 158.316 1210.64 158.336C1210.72 158.336 1210.79 158.337 1210.87 158.338C1210.99 158.341 1211.11 158.345 1211.22 158.349C1211.36 158.358 1211.49 158.358 1211.59 158.358H1213.25C1213.23 158.372 1213.22 158.386 1213.2 158.398C1213.19 158.406 1213.18 158.413 1213.17 158.419C1213.16 158.425 1213.15 158.43 1213.14 158.434C1213.14 158.436 1213.13 158.439 1213.13 158.441C1213.13 158.445 1213.12 158.449 1213.12 158.453C1213.12 158.456 1213.12 158.459 1213.11 158.462C1213.11 158.467 1213.11 158.473 1213.11 158.478C1213.04 159.15 1213.04 159.825 1213.12 160.496L1213.12 160.503L1213.13 160.513C1213.14 160.523 1213.15 160.532 1213.17 160.541C1213.18 160.551 1213.2 160.561 1213.23 160.571L1215.92 159.807V159.762H1216.08L1217.22 159.438V159.308H1217.68L1250.2 150.075V147.099L1251.19 147.086V146.536L1252.42 146.525V145.825H1252.08V144.694L1253.02 144.686V142.863L1254.3 142.853V132.418L1259.84 132.386V142.808L1261.11 142.798V144.618L1262.04 144.61V145.742H1261.7V146.436L1262.14 146.432L1309.92 131.719C1309.95 131.547 1309.99 131.377 1310.03 131.209C1310.1 130.993 1310.11 130.767 1310.09 130.544C1310.07 130.507 1310.07 130.464 1310.08 130.425C1310.08 130.408 1310.09 130.393 1310.09 130.379C1310.11 130.358 1310.12 130.34 1310.14 130.326C1310.23 130.074 1310.26 129.806 1310.23 129.541C1310.2 129.24 1310.22 128.937 1310.28 128.641C1310.4 128.359 1310.48 128.062 1310.51 127.758C1310.53 127.585 1310.56 126.984 1310.57 126.425C1310.56 126 1310.6 125.577 1310.68 125.16C1310.77 124.539 1310.82 123.911 1310.82 123.283C1310.91 120.448 1310.99 118.364 1311.05 117.925C1311.14 117.125 1311.14 117.065 1311.05 116.813C1310.99 116.671 1311 116.584 1311.06 116.613C1311.12 116.642 1311.16 116.35 1311.17 115.957C1311.18 115.564 1311.21 114.812 1311.24 114.278C1311.28 113.744 1311.35 112.401 1311.41 111.278C1311.52 109.311 1311.67 108.462 1311.93 108.378C1312 108.344 1312.05 108.431 1312.05 108.551C1312.06 108.689 1312.12 108.82 1312.22 108.923C1312.44 109.544 1312.53 110.205 1312.49 110.864C1312.49 110.984 1312.54 111.364 1312.6 111.716C1312.68 112.246 1312.74 112.78 1312.76 113.316L1312.8 113.948L1312.81 114.145C1312.83 114.355 1312.84 114.522 1312.85 114.604C1312.85 114.642 1312.86 114.692 1312.87 114.75L1312.87 114.757C1312.88 114.878 1312.9 115.033 1312.92 115.195C1312.93 115.315 1312.94 115.438 1312.95 115.554C1313.05 116.699 1313.15 117.278 1313.28 117.354C1313.36 117.421 1313.36 117.463 1313.28 117.519C1313.24 117.557 1313.21 117.604 1313.2 117.655L1313.2 117.668L1313.19 117.683L1313.19 117.693L1313.19 117.703C1313.19 117.714 1313.19 117.725 1313.19 117.736C1313.19 117.761 1313.19 117.787 1313.2 117.812C1313.22 117.932 1313.26 118.533 1313.29 119.145C1313.33 120.357 1313.35 120.519 1313.49 120.726C1313.53 120.804 1313.52 120.857 1313.46 120.857C1313.41 120.857 1313.38 121.251 1313.39 121.796C1313.43 123.141 1313.43 123.14 1313.6 123.066L1313.61 123.061C1313.78 122.982 1313.81 123.117 1313.65 123.29C1313.52 123.421 1313.62 123.857 1313.78 123.857C1313.84 123.857 1313.8 123.969 1313.72 124.097C1313.59 124.297 1313.56 124.597 1313.6 125.561C1313.59 125.991 1313.63 126.42 1313.74 126.838C1313.8 126.936 1313.82 127.053 1313.79 127.165C1313.69 127.803 1313.68 128.454 1313.77 129.095C1313.83 129.095 1313.85 129.162 1313.82 129.249C1313.79 129.57 1313.81 129.893 1313.87 130.21L1313.89 130.324L1313.92 130.489L1316.31 129.752C1316.56 129.103 1316.65 128.406 1316.58 127.715C1316.58 127.364 1316.64 127.014 1316.74 126.679C1316.84 126.344 1316.86 125.988 1316.8 125.643C1316.76 125.076 1316.77 124.782 1316.87 124.673C1316.98 124.284 1317.02 123.876 1316.98 123.473C1316.95 122.142 1317.02 120.811 1317.18 119.489C1317.24 119.277 1317.27 119.055 1317.24 118.835C1317.23 118.573 1317.3 117.492 1317.38 116.435L1317.39 116.249L1317.39 116.188C1317.47 115.186 1317.55 114.061 1317.58 113.6C1317.59 112.853 1317.69 112.109 1317.87 111.385C1318.02 110.829 1318.23 110.717 1318.33 111.145C1318.36 111.318 1318.44 111.438 1318.48 111.408C1318.6 111.33 1318.7 111.746 1318.7 112.389C1318.72 112.873 1318.78 113.355 1318.87 113.83C1318.96 114.21 1319.01 114.597 1319.03 114.986C1318.99 115.291 1319.01 115.601 1319.07 115.902C1319.1 116.131 1319.15 116.469 1319.16 116.645C1319.16 116.794 1319.19 116.941 1319.25 117.081C1319.3 117.317 1319.33 117.559 1319.33 117.802C1319.34 118.121 1319.38 118.438 1319.45 118.749C1319.51 118.881 1319.52 119.025 1319.5 119.165C1319.49 119.178 1319.48 119.193 1319.48 119.209C1319.48 119.216 1319.48 119.224 1319.48 119.232C1319.48 119.239 1319.49 119.247 1319.49 119.254C1319.49 119.269 1319.5 119.282 1319.51 119.293C1319.52 119.304 1319.54 119.313 1319.55 119.319C1319.58 119.346 1319.6 119.381 1319.61 119.42C1319.62 119.46 1319.61 119.5 1319.6 119.537C1319.57 119.778 1319.59 120.022 1319.65 120.258C1319.74 120.638 1319.74 120.825 1319.66 120.858C1319.65 120.861 1319.64 120.866 1319.64 120.872C1319.63 120.875 1319.63 120.879 1319.63 120.882L1319.62 120.888C1319.62 120.89 1319.62 120.892 1319.62 120.895C1319.61 120.898 1319.61 120.901 1319.61 120.904C1319.61 120.907 1319.61 120.91 1319.61 120.913L1319.61 120.919C1319.6 120.923 1319.6 120.926 1319.6 120.93L1319.6 120.934L1319.6 120.941C1319.6 120.943 1319.6 120.946 1319.6 120.948L1319.6 120.954L1319.6 120.961C1319.6 120.968 1319.6 120.975 1319.61 120.982C1319.61 120.988 1319.61 120.995 1319.62 121.001C1319.76 121.932 1319.83 122.874 1319.82 123.817C1319.77 124.376 1319.91 124.935 1320.21 125.409C1320.39 125.54 1320.39 125.551 1320.18 125.727C1319.96 125.9 1319.97 125.985 1320.03 127.07L1320.03 127.113C1320.05 127.579 1320.11 128.043 1320.21 128.499C1320.22 128.516 1320.22 128.535 1320.23 128.554L1322.65 127.924L1322.64 127.92C1322.53 127.811 1322.49 127.72 1322.54 127.72C1322.74 127.72 1322.86 127.295 1322.93 126.368C1323.03 124.829 1323.03 124.668 1322.74 124.404C1322.51 124.197 1322.51 124.186 1322.71 124.044C1322.83 123.941 1322.91 123.803 1322.95 123.65C1322.96 123.535 1323 123.426 1323.07 123.334C1323.25 123.016 1323.33 122.651 1323.31 122.286C1323.26 122.275 1323.26 122.046 1323.31 121.806C1323.36 121.451 1323.36 121.092 1323.33 120.736C1323.29 120.278 1323.31 120.127 1323.41 120.127C1323.5 120.127 1323.53 119.996 1323.48 119.658C1323.44 119.358 1323.46 119.144 1323.55 119.069C1323.65 118.969 1323.63 118.915 1323.51 118.84C1323.39 118.765 1323.38 118.698 1323.48 118.54C1323.49 118.525 1323.5 118.509 1323.51 118.493C1323.53 118.449 1323.54 118.401 1323.54 118.351C1323.55 118.284 1323.53 118.217 1323.49 118.16C1323.44 118.048 1323.44 117.984 1323.49 117.984C1323.65 117.984 1323.72 117.417 1323.6 117.263C1323.53 117.163 1323.53 117.12 1323.62 117.12C1323.7 117.12 1323.73 117.034 1323.7 116.913C1323.69 116.873 1323.68 116.836 1323.68 116.805C1323.68 116.759 1323.68 116.724 1323.7 116.707L1323.7 116.703C1323.7 116.7 1323.71 116.699 1323.71 116.698C1323.71 116.696 1323.72 116.695 1323.72 116.695C1323.82 116.695 1323.93 116.248 1324.01 115.572C1324.03 115.212 1324.08 114.854 1324.16 114.502C1324.3 114.08 1324.36 113.637 1324.36 113.192C1324.3 113.15 1324.35 112.974 1324.42 112.809C1324.47 112.729 1324.5 112.64 1324.51 112.549C1324.52 112.457 1324.51 112.364 1324.49 112.275C1324.39 112.001 1324.47 111.348 1324.6 111.348C1324.65 111.348 1324.7 111.217 1324.7 111.055C1324.71 110.829 1324.74 110.605 1324.8 110.387C1324.87 109.997 1324.92 109.604 1324.95 109.208C1325 108.308 1325.08 108.032 1325.3 108.032C1325.39 108.032 1325.48 107.89 1325.52 107.714C1325.6 107.289 1325.93 107.278 1326.03 107.683C1326.07 107.847 1326.15 108.002 1326.25 108.141C1326.4 108.314 1326.48 108.881 1326.55 110.387C1326.58 110.887 1326.64 111.386 1326.72 111.881C1326.79 112.255 1326.83 112.636 1326.84 113.018C1326.84 113.43 1326.88 113.842 1326.94 114.25C1327.03 114.835 1327.07 115.426 1327.06 116.018C1327.04 116.438 1327.07 116.86 1327.15 117.272C1327.25 117.686 1327.3 118.111 1327.3 118.537C1327.35 119.193 1327.41 120.174 1327.45 120.699C1327.48 121.224 1327.5 121.964 1327.49 122.325C1327.46 122.643 1327.51 122.963 1327.61 123.264C1327.73 123.618 1327.76 123.998 1327.68 124.364C1327.61 125.064 1327.62 125.216 1327.8 125.456C1327.94 125.794 1328.02 126.155 1328.03 126.52L1341.55 122.996H1348.82V122.847H1351.11V108.426L1350.32 107.645H1351.77V105.945H1358.41C1358.64 105.945 1358.74 106.271 1358.74 106.271L1359 107.25L1360.11 107.904L1359.92 108.293L1359.52 108.682V122.996H1363.24V105.162L1362.52 104.962L1362.46 104.573H1362.72V104.247H1363.96V102.486H1368.59C1368.81 102.486 1368.59 101.371 1368.59 101.371C1368.77 101.355 1368.94 101.355 1369.12 101.371C1369.37 101.507 1369.61 101.662 1369.83 101.834L1370.04 102.352H1371.01V101.897H1375.77V101.116H1377.07V101.897C1377.07 101.897 1377.32 101.921 1377.53 101.962C1377.72 101.996 1377.92 102.017 1378.11 102.025V103.069C1378.13 103.267 1378.15 103.463 1378.18 103.658H1378.57L1378.9 103.14H1383.01V101.897H1383.6V100.527L1385.55 100.535C1385.55 100.872 1385.62 101.206 1385.75 101.516C1385.92 101.734 1385.62 102.034 1385.62 102.034C1385.62 102.034 1386.14 102.574 1386.14 102.749C1386.14 102.924 1386.28 103.601 1386.28 103.601C1386.2 103.877 1386.16 104.16 1386.14 104.445C1386.14 104.796 1386.53 104.908 1386.53 104.908L1386.14 105.952L1386.01 107.252L1386.27 110.51L1386.34 118.062L1406.5 100.596H1410.84C1410.85 100.501 1410.89 100.429 1410.96 100.396C1411.01 100.369 1411.04 100.329 1411.06 100.281C1411.07 100.234 1411.08 100.181 1411.06 100.133C1411.01 100.013 1411.05 99.9566 1411.15 99.9566C1411.27 99.9566 1411.3 99.7946 1411.29 99.1826C1411.29 98.7576 1411.26 98.4616 1411.23 98.5396C1411.19 98.6266 1411.13 98.6396 1410.98 98.5596C1410.88 98.5066 1410.78 98.4846 1410.75 98.5176C1410.71 98.5506 1410.59 98.4506 1410.47 98.2996C1410.35 98.1486 1410.21 98.0256 1410.16 98.0256C1410 98.0256 1409.92 97.7626 1409.92 97.3496C1409.92 97.1771 1409.88 97.0065 1409.81 96.8496C1409.74 96.7496 1409.75 96.6646 1409.84 96.6206C1409.94 96.5566 1409.94 96.5336 1409.83 96.5336C1409.69 95.7749 1409.72 94.9956 1409.93 94.2516C1409.99 94.0355 1410.01 93.8096 1409.98 93.5866C1409.96 93.5495 1409.96 93.5073 1409.97 93.4675C1409.98 93.4277 1410 93.3927 1410.04 93.3686C1410.12 93.1165 1410.15 92.8485 1410.12 92.5836C1410.09 92.283 1410.11 91.98 1410.17 91.6836C1410.29 91.402 1410.37 91.1047 1410.4 90.8006C1410.43 90.6276 1410.45 90.0266 1410.46 89.4676C1410.46 89.0434 1410.49 88.6197 1410.57 88.2026C1410.67 87.5817 1410.71 86.9541 1410.71 86.3256C1410.8 83.4906 1410.89 81.4066 1410.94 80.9676C1411.03 80.1676 1411.03 80.1076 1410.94 79.8556C1410.89 79.7136 1410.9 79.6266 1410.95 79.6556C1411.01 79.6846 1411.05 79.3926 1411.06 78.9996C1411.07 78.6066 1411.1 77.8546 1411.14 77.3206C1411.17 76.7866 1411.25 75.4436 1411.3 74.3206C1411.41 72.3536 1411.56 71.5046 1411.82 71.4206C1411.89 71.3866 1411.94 71.4736 1411.94 71.5936C1411.96 71.7323 1412.01 71.8628 1412.11 71.9656C1412.33 72.587 1412.42 73.2479 1412.38 73.9066C1412.38 74.0266 1412.44 74.4066 1412.49 74.7586C1412.57 75.2886 1412.63 75.8228 1412.65 76.3586L1412.68 76.7547L1412.68 76.7992C1412.7 77.1795 1412.73 77.519 1412.74 77.6466L1412.75 77.7012L1412.76 77.7931C1412.78 78.0033 1412.82 78.3227 1412.84 78.5966C1412.94 79.7416 1413.04 80.3206 1413.17 80.3966C1413.25 80.4636 1413.25 80.5056 1413.17 80.5616C1413.13 80.5999 1413.1 80.6469 1413.09 80.6981C1413.08 80.7493 1413.08 80.8032 1413.09 80.8546C1413.11 80.9746 1413.16 81.5756 1413.18 82.1876C1413.22 83.3996 1413.24 83.5616 1413.38 83.7686C1413.42 83.8466 1413.41 83.8996 1413.36 83.8996C1413.3 83.8996 1413.27 84.2936 1413.28 84.8386C1413.32 86.1837 1413.32 86.1833 1413.49 86.1085L1413.5 86.1036C1413.68 86.0246 1413.71 86.1596 1413.54 86.3326C1413.41 86.4636 1413.51 86.8996 1413.67 86.8996C1413.73 86.8996 1413.69 87.0116 1413.61 87.1396C1413.48 87.3396 1413.45 87.6396 1413.49 88.6036C1413.48 89.0338 1413.53 89.4635 1413.63 89.8806C1413.69 89.9788 1413.71 90.0959 1413.68 90.2076C1413.58 90.8463 1413.57 91.497 1413.67 92.1376C1413.72 92.1376 1413.74 92.2046 1413.71 92.2916C1413.68 92.6131 1413.7 92.9361 1413.76 93.2526C1413.96 94.5186 1413.96 94.6156 1413.81 94.9986C1413.73 95.1826 1413.71 95.3476 1413.75 95.3476C1413.86 95.3476 1413.82 96.0686 1413.67 96.6776C1413.4 97.8256 1413.31 98.1306 1413.24 98.1306C1413.2 98.1306 1413.1 98.2506 1413.02 98.3936C1412.89 98.5879 1412.69 98.7271 1412.46 98.7846C1412.06 98.9046 1412.06 98.9156 1412.06 99.4716C1412.06 99.9516 1412.1 100.053 1412.33 100.204C1412.48 100.303 1412.6 100.438 1412.68 100.596H1417.48L1417.48 100.573V100.568C1417.54 100.167 1417.52 99.7589 1417.41 99.3676C1417.35 99.3256 1417.29 99.3366 1417.29 99.3896C1417.29 99.6076 1416.52 99.3786 1416.18 99.0626C1415.58 98.4846 1415.52 97.2826 1415.95 94.6206C1416.07 94.2237 1416.09 93.8073 1416.03 93.3996C1415.96 93.3326 1416.01 93.1706 1416.15 92.9306C1416.43 92.244 1416.55 91.4978 1416.48 90.7576C1416.48 90.4066 1416.53 90.0575 1416.63 89.7216C1416.73 89.3865 1416.76 89.0311 1416.69 88.6856C1416.65 88.1186 1416.66 87.8246 1416.76 87.7156C1416.87 87.3266 1416.91 86.9189 1416.87 86.5156C1416.85 85.1847 1416.91 83.8536 1417.07 82.5316C1417.14 82.3203 1417.16 82.0979 1417.14 81.8776C1417.13 81.6156 1417.19 80.5346 1417.27 79.4776L1417.28 79.2918L1417.29 79.2313C1417.36 78.2294 1417.44 77.1043 1417.47 76.6426C1417.48 75.8955 1417.58 75.1522 1417.76 74.4276C1417.91 73.8716 1418.12 73.7596 1418.22 74.1876C1418.25 74.3606 1418.33 74.4806 1418.37 74.4506C1418.49 74.3726 1418.59 74.7886 1418.59 75.4316C1418.61 75.9157 1418.67 76.3975 1418.77 76.8726C1418.85 77.253 1418.9 77.6397 1418.92 78.0286C1418.88 78.3344 1418.9 78.6436 1418.96 78.9446C1419 79.1736 1419.04 79.5116 1419.05 79.6876C1419.06 79.8368 1419.09 79.9839 1419.14 80.1236C1419.2 80.3596 1419.23 80.6017 1419.23 80.8446C1419.23 81.1635 1419.27 81.4808 1419.35 81.7916C1419.4 81.9237 1419.41 82.0677 1419.39 82.2076C1419.38 82.2213 1419.38 82.2363 1419.37 82.2517C1419.37 82.2671 1419.38 82.2826 1419.38 82.2971C1419.39 82.3117 1419.39 82.3249 1419.41 82.336C1419.42 82.3472 1419.43 82.3559 1419.44 82.3616C1419.47 82.3887 1419.49 82.4243 1419.5 82.4634C1419.51 82.5025 1419.5 82.5432 1419.49 82.5796C1419.46 82.8212 1419.48 83.0653 1419.54 83.3006C1419.63 83.6806 1419.63 83.8676 1419.55 83.9006C1419.54 83.9064 1419.53 83.9149 1419.52 83.9254C1419.51 83.936 1419.5 83.9485 1419.5 83.962C1419.49 83.9755 1419.49 83.9898 1419.49 84.0039C1419.5 84.0179 1419.5 84.0315 1419.51 84.0436C1419.65 84.9749 1419.72 85.917 1419.71 86.8596C1419.66 87.4187 1419.8 87.9775 1420.1 88.4516C1420.29 88.5826 1420.29 88.5936 1420.07 88.7696C1419.85 88.9434 1419.86 89.0275 1419.92 90.1133L1419.92 90.1556C1419.94 90.622 1420 91.0859 1420.1 91.5416C1420.13 91.5981 1420.15 91.6623 1420.15 91.7276C1420.15 91.7389 1420.15 91.7501 1420.15 91.7613C1420.14 91.7903 1420.14 91.8188 1420.13 91.8463C1420.12 91.8696 1420.11 91.8922 1420.1 91.9136C1420.02 92.4008 1420.02 92.8973 1420.09 93.3856C1420.12 93.5914 1420.15 93.7996 1420.15 94.0086C1420.15 94.2748 1420.2 94.539 1420.31 94.7826C1420.39 94.8826 1420.42 95.1536 1420.36 95.6006C1420.33 95.9726 1420.3 96.3636 1420.3 96.4836C1420.3 97.2486 1420.29 97.4556 1420.19 97.5646C1420.09 97.7645 1420.03 97.9789 1420.01 98.1986C1419.95 98.5409 1419.8 98.8613 1419.58 99.1261C1419.35 99.391 1419.06 99.5908 1418.73 99.7046C1418.41 99.7686 1418.37 99.8136 1418.35 100.163C1418.34 100.307 1418.34 100.451 1418.34 100.596H1425.15L1425.16 100.009L1424.63 99.9526C1424.15 99.9106 1423.51 99.5946 1423.51 99.3966C1423.51 99.3546 1423.44 99.3216 1423.36 99.3216C1423.15 99.3216 1422.9 98.9166 1422.76 98.3496C1422.7 98.1116 1422.61 97.8811 1422.5 97.6626C1422.29 97.2785 1422.24 96.8328 1422.33 96.4086C1422.42 96.2666 1422.4 96.1086 1422.28 95.8746C1422.17 95.6423 1422.11 95.3886 1422.11 95.1316C1422.11 94.8747 1422.17 94.6209 1422.28 94.3886C1422.42 94.1401 1422.49 93.856 1422.48 93.5696C1422.48 93.307 1422.52 93.046 1422.6 92.7956C1422.68 92.5078 1422.72 92.211 1422.72 91.9126C1422.74 91.3006 1422.71 91.1356 1422.53 90.9626C1422.43 90.8536 1422.38 90.7626 1422.43 90.7626C1422.63 90.7626 1422.75 90.3376 1422.82 89.4106C1422.93 87.8716 1422.92 87.7106 1422.63 87.4466C1422.4 87.2396 1422.4 87.2286 1422.6 87.0866C1422.72 86.9838 1422.8 86.846 1422.84 86.6926C1422.85 86.5784 1422.89 86.4691 1422.96 86.3766C1423.14 86.0587 1423.22 85.694 1423.2 85.3286C1423.15 85.3176 1423.15 85.0887 1423.2 84.8486C1423.25 84.4942 1423.26 84.1348 1423.22 83.7786C1423.18 83.3206 1423.2 83.1696 1423.3 83.1696C1423.4 83.1696 1423.42 83.0386 1423.37 82.7006C1423.33 82.4006 1423.35 82.1866 1423.44 82.1116C1423.54 82.0116 1423.53 81.9576 1423.41 81.8826C1423.29 81.8076 1423.28 81.7406 1423.37 81.5826C1423.39 81.5559 1423.41 81.5267 1423.42 81.496C1423.43 81.4634 1423.43 81.4291 1423.44 81.3943C1423.44 81.3267 1423.42 81.2599 1423.38 81.2026C1423.33 81.0906 1423.33 81.0266 1423.38 81.0266C1423.54 81.0266 1423.61 80.4596 1423.49 80.3056C1423.42 80.2056 1423.42 80.1626 1423.52 80.1626C1423.59 80.1626 1423.62 80.0766 1423.59 79.9556C1423.56 79.8346 1423.57 79.7376 1423.61 79.7376C1423.71 79.7376 1423.82 79.2906 1423.9 78.6146C1423.92 78.2549 1423.97 77.8973 1424.05 77.5446C1424.19 77.1225 1424.26 76.6795 1424.25 76.2346C1424.19 76.1926 1424.24 76.0166 1424.31 75.8516C1424.36 75.7717 1424.39 75.6832 1424.4 75.5915C1424.41 75.4997 1424.41 75.4066 1424.38 75.3176C1424.28 75.0436 1424.36 74.3906 1424.49 74.3906C1424.54 74.3906 1424.59 74.2596 1424.59 74.0976C1424.6 73.872 1424.63 73.648 1424.69 73.4296C1424.76 73.0403 1424.82 72.6465 1424.84 72.2506C1424.9 71.3506 1424.97 71.0746 1425.19 71.0746C1425.28 71.0746 1425.38 70.9326 1425.41 70.7566C1425.5 70.3316 1425.82 70.3206 1425.92 70.7256C1425.97 70.8898 1426.04 71.0448 1426.14 71.1836C1426.29 71.3566 1426.37 71.9236 1426.45 73.4296C1426.47 73.9301 1426.53 74.4288 1426.61 74.9236C1426.69 75.2976 1426.73 75.6785 1426.73 76.0606C1426.74 76.4733 1426.77 76.8849 1426.84 77.2926C1426.92 77.878 1426.96 78.4691 1426.96 79.0606C1426.93 79.4807 1426.96 79.9028 1427.05 80.3146C1427.15 80.729 1427.2 81.1535 1427.2 81.5796C1427.24 82.2356 1427.31 83.2166 1427.34 83.7416C1427.37 84.2666 1427.39 85.0066 1427.38 85.3676C1427.36 85.6856 1427.4 86.0057 1427.5 86.3066C1427.63 86.6605 1427.65 87.041 1427.57 87.4066C1427.5 88.1066 1427.51 88.2586 1427.69 88.4986C1427.92 89.0307 1427.98 89.6193 1427.87 90.1886C1427.85 90.2436 1427.85 90.3027 1427.85 90.3613C1427.86 90.4199 1427.87 90.4764 1427.91 90.5266C1427.99 90.7698 1428.03 91.0241 1428.04 91.2806C1428.05 91.5736 1428.1 91.8146 1428.15 91.8146C1428.19 91.8146 1428.22 91.8816 1428.22 91.9686C1428.27 92.1259 1428.36 92.2679 1428.48 92.3816C1428.64 92.5576 1428.69 92.6816 1428.61 92.6996C1428.49 93.1608 1428.49 93.6485 1428.63 94.1076C1428.7 94.2607 1428.74 94.4271 1428.75 94.5966C1428.77 94.8179 1428.83 95.0346 1428.91 95.2416C1429 95.4481 1429.03 95.6738 1429 95.8956C1428.98 96.1136 1429 96.3226 1429.07 96.3536C1429.22 96.4536 1429.23 96.8456 1429.07 96.8456C1429 96.8456 1429 96.9126 1429.07 97.0526C1429.15 97.1815 1429.19 97.3315 1429.19 97.4834C1429.18 97.6352 1429.13 97.782 1429.04 97.9046C1428.99 97.9745 1428.95 98.0546 1428.92 98.1405C1428.91 98.1741 1428.9 98.2084 1428.9 98.2429C1428.89 98.2965 1428.89 98.3508 1428.9 98.4046C1428.91 98.4911 1428.91 98.5798 1428.89 98.6647C1428.87 98.7495 1428.82 98.8285 1428.77 98.896C1428.71 98.9635 1428.64 99.018 1428.56 99.0558C1428.52 99.0752 1428.48 99.09 1428.44 99.0998C1428.42 99.1044 1428.4 99.1079 1428.37 99.1103C1428.35 99.1129 1428.33 99.1144 1428.31 99.1146C1428.14 99.1226 1428.06 99.1896 1428.08 99.2656C1428.14 99.4196 1427.8 99.6256 1427.46 99.6256C1427.24 99.6428 1427.02 99.6793 1426.8 99.7346L1426.4 99.8436L1426.43 100.596ZM189.726 150.118V147.934L189.725 150.117L189.726 150.118ZM58.8819 122.643H60.0529C60.0509 122.37 60.0481 122.095 60.0454 121.835C60.0372 121.05 60.0304 120.395 60.0529 120.293C60.1319 119.993 60.5159 107.568 60.5159 107.568L60.2529 106.524L59.9899 106.006L60.0529 105.29H56.9239V120.947L58.8819 122.643ZM1381.19 122.516L1383.07 120.887V105.163H1379.94L1380.01 105.879L1379.74 106.397L1379.48 107.441C1379.48 107.441 1379.87 119.866 1379.94 120.166C1379.97 120.268 1379.96 120.92 1379.95 121.704V121.711C1379.95 121.97 1379.95 122.244 1379.94 122.516H1381.19ZM1374.26 105.355H1375.83V122.516H1373.22V107.249L1373.41 106.597L1373.55 106.008L1373.68 105.49L1374.26 105.355ZM1367.15 105.618H1368.65V122.518H1366.95V107.504L1367.15 106.597L1367.61 106.134L1367.15 105.618ZM1353.91 108.03H1357.1V108.682C1357.29 109.143 1357.42 109.625 1357.49 110.117C1357.44 110.339 1357.49 122.842 1357.49 122.842H1353.26C1353.03 122.451 1353.26 109.854 1353.26 109.854L1353.46 109.073L1353.26 108.681L1353.39 108.157L1353.91 108.03ZM64.1629 105.482H65.7329L66.3229 105.617L66.4489 106.135L66.5859 106.724L66.7749 107.376V122.643H64.1629V105.482ZM71.3439 105.745H72.8439L72.3889 106.261L72.8439 106.724L73.0439 107.631V122.645H71.3439V105.745ZM82.8918 108.157H86.0868L86.6098 108.284L86.7368 108.808L86.5368 109.2L86.7368 109.981C86.7368 109.981 86.9608 122.578 86.7368 122.969H82.5008C82.5008 122.969 82.5558 110.466 82.5008 110.244C82.5733 109.752 82.7046 109.27 82.8918 108.809V108.157Z" fill="#FAFBFC"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M1262.43 128.996V128.822C1262.41 128.516 1262.32 128.217 1262.19 127.94C1262.06 127.672 1261.89 127.428 1261.68 127.219C1261.47 127.011 1261.22 126.841 1260.95 126.719C1260.68 126.593 1260.38 126.519 1260.08 126.501V126.141H1259.77V125.711H1260.05V125.251H1259.83L1259.88 125.125L1259.92 125.015L1259.95 124.934L1259.96 124.897C1259.97 124.862 1259.98 124.826 1259.98 124.79C1259.99 124.732 1260 124.656 1260.01 124.58L1260.02 124.493C1260.03 124.448 1260.03 124.405 1260.04 124.368L1260.04 124.317C1260.04 124.285 1260.05 124.263 1260.05 124.252C1260.05 124.236 1260.04 124.158 1260.02 124.041L1260 123.894C1259.99 123.808 1259.98 123.714 1259.96 123.621L1259.91 123.213L1259.88 123.028L1259.81 122.686L1259.42 120.83C1259.4 120.785 1259.39 120.741 1259.37 120.698L1259.33 120.598C1259.31 120.549 1259.29 120.496 1259.27 120.444L1259.18 120.197L1259.13 120.086L1259.03 119.05L1259.19 119.188L1259.2 119.21L1259.21 119.266L1259.23 119.322C1259.23 119.33 1259.23 119.339 1259.24 119.348L1259.24 119.361L1259.25 119.411L1259.27 119.491L1259.29 119.566L1259.3 119.599V119.776C1259.3 119.791 1259.3 119.806 1259.31 119.821C1259.32 119.841 1259.33 119.862 1259.34 119.882L1259.36 119.936L1259.37 119.959L1259.41 119.967L1259.5 119.984C1259.53 119.99 1259.57 119.996 1259.6 120C1259.64 120.003 1259.67 120.003 1259.7 120C1259.72 119.999 1259.74 119.996 1259.76 119.991C1259.76 119.991 1259.76 119.99 1259.77 119.987C1259.77 119.985 1259.77 119.981 1259.77 119.978V119.967H1259.77L1259.78 119.921L1259.83 119.811L1259.85 119.762C1259.86 119.743 1259.86 119.724 1259.87 119.705L1259.89 119.677L1259.89 119.672C1259.91 119.63 1259.93 119.589 1259.94 119.558C1259.95 119.545 1259.96 119.532 1259.96 119.522C1259.97 119.512 1259.98 119.503 1259.99 119.496C1260.01 119.486 1260.03 119.483 1260.04 119.486C1260.05 119.487 1260.05 119.488 1260.06 119.491C1260.07 119.493 1260.07 119.497 1260.08 119.501L1260.09 119.512V119.484C1260.09 119.462 1260.1 119.44 1260.1 119.419C1260.11 119.392 1260.12 119.366 1260.13 119.342C1260.15 119.318 1260.16 119.297 1260.18 119.28C1260.21 119.264 1260.23 119.246 1260.25 119.227C1260.27 119.207 1260.28 119.187 1260.3 119.165C1260.31 119.155 1260.32 119.144 1260.33 119.134C1260.33 119.124 1260.34 119.113 1260.35 119.103C1260.36 119.086 1260.37 119.068 1260.37 119.05C1260.37 119.043 1260.37 119.037 1260.37 119.031C1260.37 119.027 1260.37 119.023 1260.37 119.02C1260.37 119.015 1260.37 119.011 1260.37 119.007C1260.37 119.003 1260.36 119 1260.36 118.997L1260.36 118.993L1260.35 118.985C1260.35 118.976 1260.34 118.968 1260.34 118.96C1260.33 118.947 1260.32 118.935 1260.31 118.923C1260.29 118.899 1260.27 118.875 1260.26 118.855C1260.25 118.846 1260.24 118.836 1260.24 118.826C1260.23 118.819 1260.23 118.813 1260.23 118.806C1260.23 118.793 1260.24 118.781 1260.25 118.772C1260.26 118.76 1260.27 118.75 1260.28 118.742L1260.31 118.721V118.714L1260.65 118.507V118.407C1260.65 118.401 1260.65 118.395 1260.65 118.39C1260.65 118.384 1260.65 118.378 1260.65 118.372C1260.65 118.363 1260.65 118.354 1260.65 118.345L1260.65 118.326L1260.65 118.311V118.004C1260.65 117.983 1260.64 117.962 1260.64 117.942C1260.64 117.916 1260.64 117.891 1260.63 117.867C1260.63 117.851 1260.62 117.834 1260.62 117.818C1260.62 117.809 1260.61 117.8 1260.61 117.792L1260.61 117.767C1260.6 117.753 1260.6 117.74 1260.59 117.729C1260.59 117.723 1260.59 117.718 1260.59 117.712C1260.59 117.698 1260.58 117.684 1260.58 117.67V117.37C1260.58 117.356 1260.58 117.342 1260.57 117.329L1260.54 117.289C1260.54 117.273 1260.53 117.256 1260.53 117.24L1260.53 117.225L1260.52 117.21C1260.52 117.196 1260.52 117.182 1260.51 117.169C1260.51 117.156 1260.5 117.142 1260.5 117.128L1260.48 117.078L1260.44 116.984C1260.43 116.954 1260.42 116.925 1260.41 116.9C1260.4 116.888 1260.4 116.875 1260.39 116.863C1260.39 116.849 1260.38 116.835 1260.37 116.821L1260.35 116.784C1260.35 116.768 1260.34 116.753 1260.33 116.738L1260.29 116.659L1260.25 116.589L1260.19 116.464L1260.09 116.264L1260 116.077L1259.95 115.994L1259.62 115.12C1259.79 115.373 1259.96 115.614 1260.12 115.832C1260.28 116.037 1260.45 116.231 1260.63 116.411C1260.78 116.563 1260.95 116.691 1261.14 116.792C1261.3 116.878 1261.48 116.919 1261.66 116.912C1262.08 116.812 1262.24 116.392 1262.23 115.804C1262.19 115.086 1262.02 114.381 1261.75 113.717C1261.47 112.983 1261.1 112.287 1260.65 111.647C1260.36 111.154 1259.91 110.779 1259.37 110.589C1259.21 110.574 1259.05 110.613 1258.92 110.7C1258.81 110.781 1258.71 110.891 1258.66 111.02C1258.6 111.151 1258.56 111.291 1258.55 111.434C1258.53 111.564 1258.54 111.695 1258.55 111.825L1258.52 111.851L1258.44 111.91C1258.41 111.932 1258.38 111.955 1258.36 111.975C1258.35 111.986 1258.33 112.001 1258.32 112.018C1258.32 112.026 1258.32 112.034 1258.33 112.042C1258.33 112.047 1258.33 112.052 1258.33 112.057C1258.34 112.067 1258.34 112.077 1258.35 112.087L1258.36 112.101L1258.36 112.113L1258.4 112.164L1258.41 112.189L1258.2 112.158L1258.19 112.148L1258.16 112.124L1258.13 112.094C1258.13 112.086 1258.12 112.076 1258.11 112.067C1258.11 112.056 1258.1 112.046 1258.08 112.039C1258.08 112.033 1258.07 112.027 1258.06 112.021L1258.05 112.015L1258.04 112.009L1257.99 111.989L1257.97 111.979L1257.94 111.953L1257.88 111.889C1257.85 111.867 1257.83 111.844 1257.81 111.825C1257.8 111.814 1257.78 111.802 1257.77 111.789C1257.77 111.778 1257.76 111.766 1257.76 111.754C1257.76 111.745 1257.76 111.735 1257.76 111.724C1257.76 111.717 1257.76 111.71 1257.75 111.703C1257.75 111.685 1257.75 111.667 1257.75 111.649V111.314C1257.76 111.299 1257.76 111.285 1257.76 111.271C1257.76 111.26 1257.77 111.249 1257.77 111.24C1257.78 111.231 1257.78 111.223 1257.79 111.216L1257.8 111.204C1257.81 111.199 1257.81 111.194 1257.82 111.189L1257.92 111.119C1257.93 111.113 1257.94 111.107 1257.95 111.1C1257.96 111.093 1257.97 111.086 1257.98 111.079C1257.98 111.074 1257.99 111.07 1257.99 111.064C1258 111.059 1258 111.053 1258 111.047L1258 111.042L1258.01 111.039L1258.01 111.037L1258 111.032L1258 111.027V111.012L1258 111.006C1258 111.004 1258 111.002 1258 111C1258 110.998 1258 110.996 1258 110.994L1258 110.989C1258.01 110.98 1258.01 110.971 1258.01 110.962C1258.01 110.948 1258.01 110.934 1258.02 110.921C1258.02 110.913 1258.02 110.905 1258.02 110.898C1258.02 110.89 1258.02 110.882 1258.02 110.875C1258.02 110.86 1258.03 110.845 1258.03 110.831C1258.04 110.823 1258.04 110.816 1258.05 110.808C1258.05 110.801 1258.05 110.795 1258.05 110.789C1258.05 110.777 1258.05 110.765 1258.05 110.753V110.674C1258.05 110.658 1258.05 110.642 1258.05 110.627C1258.05 110.616 1258.05 110.606 1258.05 110.596L1258.05 110.587C1258.05 110.584 1258.05 110.581 1258.04 110.578C1258.04 110.562 1258.04 110.545 1258.04 110.529C1258.03 110.513 1258.03 110.497 1258.04 110.482V110.426C1258.04 110.403 1258.03 110.381 1258.03 110.36C1258.03 110.354 1258.03 110.349 1258.03 110.343L1258.03 110.332V110.327C1258.03 110.316 1258.03 110.305 1258.02 110.295L1258.01 110.248C1258.01 110.24 1258.01 110.232 1258.01 110.225C1258 110.219 1258 110.213 1258 110.207C1257.99 110.192 1257.98 110.178 1257.98 110.164C1257.97 110.15 1257.96 110.134 1257.95 110.119C1257.95 110.104 1257.94 110.089 1257.94 110.074C1257.93 110.059 1257.93 110.044 1257.92 110.031L1257.91 109.989L1257.9 109.953L1257.88 109.915L1257.87 109.9C1257.87 109.89 1257.86 109.88 1257.86 109.87L1257.82 109.816C1257.82 109.809 1257.82 109.802 1257.81 109.796C1257.8 109.783 1257.8 109.769 1257.79 109.756C1257.78 109.735 1257.77 109.714 1257.76 109.693C1257.76 109.675 1257.75 109.658 1257.75 109.64C1257.74 109.632 1257.74 109.625 1257.74 109.617L1257.74 109.603C1257.74 109.598 1257.74 109.594 1257.74 109.589C1257.74 109.584 1257.74 109.579 1257.74 109.574V109.547C1257.74 109.529 1257.73 109.512 1257.72 109.496C1257.71 109.473 1257.7 109.446 1257.69 109.417L1257.64 109.334L1257.61 109.27C1257.61 109.262 1257.6 109.256 1257.6 109.253C1257.59 109.249 1257.59 109.248 1257.59 109.248C1257.58 109.248 1257.58 109.249 1257.57 109.251C1257.57 109.252 1257.57 109.254 1257.57 109.256L1257.56 109.259C1257.56 109.266 1257.55 109.273 1257.54 109.282L1257.54 109.294L1257.31 109.425L1257.29 109.325L1257.3 109.281C1257.31 109.254 1257.31 109.218 1257.32 109.181C1257.33 109.144 1257.33 109.102 1257.34 109.068C1257.34 109.042 1257.35 109.015 1257.35 108.989C1257.35 108.983 1257.35 108.977 1257.34 108.973C1257.34 108.971 1257.34 108.969 1257.34 108.967C1257.34 108.966 1257.33 108.964 1257.33 108.964C1257.32 108.963 1257.3 108.965 1257.29 108.97C1257.28 108.974 1257.27 108.98 1257.25 108.987L1257.23 108.997L1257.11 108.975L1257.12 108.959C1257.13 108.944 1257.13 108.93 1257.14 108.917L1257.15 108.893C1257.15 108.882 1257.16 108.87 1257.16 108.858C1257.17 108.835 1257.17 108.812 1257.18 108.789C1257.18 108.774 1257.18 108.76 1257.18 108.746V108.735L1257.18 108.739L1257.21 108.575L1257.38 108.583H1257.38L1257.4 108.572L1257.43 108.555L1257.47 108.529C1257.48 108.522 1257.49 108.512 1257.5 108.5C1257.5 108.493 1257.5 108.487 1257.5 108.48C1257.51 108.474 1257.51 108.467 1257.51 108.46C1257.51 108.442 1257.51 108.425 1257.51 108.408C1257.52 108.399 1257.52 108.39 1257.52 108.38C1257.52 108.369 1257.52 108.357 1257.52 108.345C1257.52 108.333 1257.53 108.321 1257.53 108.309C1257.53 108.302 1257.53 108.295 1257.53 108.289C1257.53 108.274 1257.53 108.259 1257.53 108.245V108.103C1257.53 108.069 1257.53 108.036 1257.54 108.003C1257.54 107.969 1257.54 107.924 1257.54 107.886C1257.54 107.852 1257.54 107.819 1257.54 107.786C1257.54 107.755 1257.54 107.725 1257.54 107.695C1257.54 107.671 1257.53 107.648 1257.52 107.626C1257.52 107.611 1257.51 107.595 1257.51 107.58L1257.5 107.562H1257.36L1257.05 107.569L1256.93 107.489L1256.73 107.389L1256.53 107.405L1256.32 107.55L1256.12 107.957L1255.99 108.472L1255.98 109.248L1255.78 109.494L1255.65 109.755L1255.8 109.939V110.723L1255.94 110.953L1256.15 111.091C1256.15 111.096 1256.15 111.101 1256.15 111.106C1256.14 111.114 1256.14 111.122 1256.14 111.13C1256.14 111.144 1256.13 111.162 1256.13 111.181L1256.13 111.184C1256.13 111.196 1256.13 111.209 1256.13 111.223C1256.12 111.259 1256.11 111.296 1256.1 111.33C1256.1 111.359 1256.08 111.386 1256.07 111.413C1256.06 111.435 1256.05 111.46 1256.04 111.485C1256.04 111.514 1256.03 111.543 1256.03 111.573C1256.03 111.582 1256.03 111.591 1256.03 111.599C1256.03 111.619 1256.03 111.638 1256.03 111.658C1256.02 111.679 1256.02 111.7 1256.03 111.721V112.044C1256.03 112.07 1256.02 112.096 1256.01 112.121C1256 112.148 1255.99 112.175 1255.97 112.201C1255.96 112.226 1255.95 112.248 1255.94 112.264L1255.92 112.289L1255.76 112.458L1255.69 112.5L1255.53 112.6L1255.35 112.708L1255.34 112.713L1255.34 112.713C1255.29 112.744 1255.25 112.77 1255.23 112.784L1255.19 112.813L1255.13 112.858L1255.01 112.958L1254.91 113.049L1254.87 113.088L1254.69 113.825L1254.63 114.163L1254.58 114.378L1254.29 114.947L1253.72 115.44L1253.19 116.132L1252.43 116.887L1252.15 116.948H1251.73L1251.56 117.038L1249.86 113.63L1249.94 113.499V113.426C1249.94 113.417 1249.94 113.408 1249.94 113.399C1249.94 113.392 1249.94 113.384 1249.94 113.376C1249.94 113.362 1249.93 113.353 1249.93 113.353H1249.79L1249.77 113.359C1249.77 113.361 1249.76 113.361 1249.75 113.359C1249.75 113.357 1249.74 113.355 1249.74 113.352C1249.74 113.348 1249.74 113.345 1249.73 113.341C1249.73 113.323 1249.72 113.306 1249.72 113.29C1249.71 113.273 1249.71 113.255 1249.7 113.238L1249.7 113.216L1249.68 113.149L1249.67 113.12L1249.69 112.942L1248.5 111.186L1249.17 113.232L1249.32 113.271L1249.4 113.363L1249.43 113.44L1249.4 113.556L1249.4 113.649L1249.5 113.711L1249.58 113.718H1249.6L1251.37 117.286L1251.19 117.34L1251.17 117.509L1251.22 117.724L1251.37 117.939L1251.55 118.016L1251.65 118.293H1251.82L1251.87 118.273L1253.69 121.942V122.007L1253.73 122.073C1253.75 122.113 1253.78 122.166 1253.81 122.22C1253.85 122.274 1253.88 122.331 1253.91 122.376C1253.94 122.41 1253.96 122.441 1253.99 122.467C1254.01 122.48 1254.03 122.5 1254.03 122.523C1254.04 122.55 1254.05 122.578 1254.05 122.607C1254.05 122.636 1254.05 122.665 1254.05 122.694V122.829C1254.05 122.842 1254.05 122.855 1254.05 122.87L1254.06 122.894C1254.06 122.906 1254.06 122.917 1254.06 122.929L1254.07 122.956C1254.07 122.982 1254.07 123.006 1254.07 123.029C1254.08 123.052 1254.08 123.075 1254.07 123.099C1254.07 123.145 1254.08 123.191 1254.08 123.237C1254.09 123.278 1254.09 123.326 1254.1 123.377L1254.1 123.381C1254.1 123.414 1254.1 123.449 1254.1 123.484C1254.11 123.526 1254.11 123.569 1254.11 123.61L1254.12 123.731C1254.13 123.801 1254.13 123.853 1254.13 123.868C1254.13 123.879 1254.13 123.89 1254.12 123.9C1254.12 123.916 1254.11 123.932 1254.1 123.947C1254.09 123.969 1254.07 123.994 1254.06 124.019C1254.05 124.033 1254.04 124.047 1254.03 124.061C1254 124.1 1253.97 124.136 1253.95 124.161L1253.92 124.205L1254.07 124.481L1254.56 124.639V125.278H1254.08V125.739H1254.37V126.17H1254.06V126.531C1253.76 126.553 1253.46 126.63 1253.19 126.758C1252.92 126.883 1252.67 127.055 1252.46 127.265C1252.02 127.697 1251.76 128.268 1251.7 128.879V129.521L1251.7 129.552L1251.71 129.583L1251.72 129.613L1251.72 129.644L1251.73 129.677L1251.73 129.709L1251.74 129.741L1251.75 129.774V129.806C1251.81 130.046 1251.91 130.276 1252.04 130.488C1252.17 130.699 1252.33 130.891 1252.51 131.059C1252.69 131.226 1252.9 131.368 1253.12 131.48C1253.34 131.592 1253.57 131.67 1253.82 131.712H1254.69L1255.74 131.705L1257.79 131.697L1258.24 131.691L1259.68 131.683L1259.88 131.686L1259.93 131.682C1259.99 131.681 1260.04 131.678 1260.09 131.674L1260.13 131.671C1260.62 131.624 1261.08 131.433 1261.47 131.121C1261.9 130.771 1262.21 130.293 1262.35 129.756V129.729L1262.37 129.686L1262.38 129.645L1262.38 129.604L1262.39 129.562V129.018C1262.43 129.01 1262.43 129.003 1262.43 128.996ZM1254.02 119.943L1254 120.043L1253.96 120.277L1253.95 120.391L1253.92 120.523L1253.91 120.588C1253.91 120.625 1253.9 120.651 1253.9 120.662C1253.89 120.678 1253.88 120.708 1253.87 120.746L1253.82 120.87L1253.78 120.982L1253.76 121.031L1253.74 121.381L1252.12 118.13L1252.17 118.081L1252.23 118.031L1252.28 117.984L1252.33 117.945C1252.35 117.925 1252.38 117.903 1252.4 117.881L1252.48 117.799L1252.54 117.729L1252.57 117.699L1252.87 117.513L1253.94 116.836L1253.9 116.899L1253.81 117.023L1253.77 117.089C1253.75 117.113 1253.74 117.136 1253.72 117.157C1253.7 117.186 1253.69 117.217 1253.67 117.25C1253.66 117.278 1253.66 117.307 1253.65 117.337C1253.65 117.353 1253.65 117.371 1253.65 117.39L1253.65 117.394V117.395C1253.65 117.417 1253.65 117.441 1253.65 117.465C1253.65 117.511 1253.65 117.558 1253.65 117.604C1253.66 117.645 1253.66 117.685 1253.67 117.726C1253.68 117.76 1253.69 117.794 1253.71 117.826C1253.73 117.858 1253.74 117.89 1253.76 117.92C1253.78 117.943 1253.8 117.963 1253.81 117.979L1253.81 117.988L1253.84 118.014L1254.02 118.244L1254.01 118.286L1254 118.3C1254 118.318 1253.99 118.341 1253.98 118.365C1253.97 118.382 1253.97 118.4 1253.96 118.418C1253.96 118.433 1253.95 118.449 1253.95 118.465C1253.94 118.492 1253.94 118.521 1253.93 118.55C1253.94 118.586 1253.94 118.622 1253.95 118.658C1253.96 118.704 1253.97 118.758 1253.99 118.806C1254 118.854 1254.01 118.906 1254.02 118.937L1254.04 118.994L1254.1 119.348L1254.02 119.943Z" fill="#FAFBFC"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M178.48 129.125C178.48 129.132 178.522 129.139 178.522 129.146V129.69L178.53 129.732L178.546 129.814L178.564 129.858V129.885C178.635 130.154 178.748 130.41 178.899 130.644C179.048 130.873 179.232 131.077 179.444 131.249C179.829 131.561 180.296 131.752 180.787 131.799H180.764L180.825 131.802C180.867 131.805 180.908 131.808 180.95 131.809L181.035 131.814L181.255 131.811L182.539 131.818L183.119 131.826L185.174 131.834L186.223 131.847H187.096C187.34 131.805 187.576 131.727 187.796 131.615C188.017 131.503 188.221 131.362 188.403 131.194C188.585 131.026 188.743 130.834 188.873 130.623C189.004 130.411 189.102 130.181 189.166 129.941V129.909L189.173 129.876L189.18 129.844L189.186 129.812L189.192 129.779L189.198 129.748L189.204 129.718L189.21 129.687L189.215 129.656V129.007C189.158 128.396 188.889 127.825 188.455 127.393C188.244 127.183 187.998 127.011 187.728 126.886C187.451 126.758 187.153 126.681 186.849 126.66V126.299H186.539V125.868H186.832V125.407H186.35V124.768L186.839 124.61L186.99 124.334L186.957 124.29C186.938 124.265 186.912 124.229 186.885 124.19C186.874 124.173 186.863 124.157 186.852 124.141C186.837 124.118 186.824 124.096 186.812 124.076C186.796 124.052 186.785 124.025 186.779 123.997C186.779 123.982 186.783 123.93 186.789 123.86C186.791 123.835 186.793 123.809 186.796 123.781C186.8 123.728 186.805 123.67 186.81 123.613C186.813 123.578 186.816 123.544 186.818 123.51C186.822 123.458 186.826 123.408 186.831 123.366C186.84 123.296 186.84 123.243 186.84 123.228C186.84 123.22 186.839 123.211 186.839 123.2C186.839 123.188 186.839 123.174 186.84 123.158C186.843 123.127 186.847 123.094 186.851 123.058C186.852 123.046 186.854 123.034 186.856 123.022C186.859 122.999 186.862 122.978 186.862 122.958V122.823C186.861 122.794 186.861 122.765 186.862 122.736C186.864 122.707 186.87 122.679 186.879 122.652C186.886 122.629 186.901 122.609 186.92 122.596C186.951 122.57 186.978 122.539 186.999 122.505C187.031 122.46 187.066 122.404 187.099 122.349C187.132 122.294 187.163 122.241 187.185 122.201L187.221 122.135V122.07L189.045 118.401L189.094 118.421H189.26L189.366 118.144L189.547 118.067L189.699 117.852L189.744 117.637L189.729 117.468L189.54 117.414L191.31 113.846H191.333L191.416 113.839L191.516 113.777L191.509 113.684L191.479 113.568L191.516 113.491L191.592 113.399L191.743 113.36L192.415 111.314L191.22 113.069L191.234 113.247L191.227 113.276L191.21 113.343C191.207 113.353 191.204 113.364 191.202 113.374C191.198 113.389 191.194 113.403 191.19 113.417C191.183 113.44 191.174 113.458 191.174 113.468C191.173 113.47 191.171 113.473 191.171 113.473C191.17 113.475 191.169 113.477 191.167 113.478C191.165 113.481 191.161 113.483 191.157 113.485C191.15 113.487 191.142 113.487 191.134 113.485L191.114 113.479H190.975C190.967 113.479 190.96 113.488 190.96 113.502C190.959 113.518 190.959 113.535 190.96 113.552V113.625L191.043 113.756L189.343 117.164L189.169 117.074H188.747L188.475 117.013L187.706 116.258L187.179 115.566L186.606 115.073L186.32 114.504L186.275 114.289L186.215 113.951L186.035 113.214L185.997 113.175L185.897 113.084L185.777 112.984C185.744 112.956 185.712 112.932 185.691 112.916L185.682 112.91C185.663 112.895 185.619 112.869 185.568 112.837L185.385 112.726L185.225 112.626L185.155 112.584L184.989 112.415L184.973 112.39C184.963 112.374 184.95 112.352 184.937 112.327C184.923 112.301 184.911 112.274 184.901 112.247C184.892 112.222 184.886 112.196 184.885 112.17V111.847C184.885 111.84 184.886 111.831 184.887 111.822C184.888 111.81 184.888 111.798 184.885 111.784C184.882 111.769 184.881 111.753 184.88 111.736C184.88 111.724 184.88 111.711 184.88 111.699C184.878 111.669 184.873 111.64 184.867 111.611C184.865 111.6 184.862 111.59 184.859 111.58C184.854 111.566 184.848 111.552 184.841 111.539C184.827 111.512 184.817 111.484 184.81 111.456C184.801 111.422 184.792 111.385 184.786 111.349C184.784 111.335 184.782 111.322 184.78 111.309C184.777 111.289 184.775 111.271 184.771 111.256C184.765 111.232 184.765 111.217 184.765 111.217L184.976 111.078L185.112 110.848V110.064L185.262 109.88L185.127 109.619L184.927 109.373L184.919 108.598L184.791 108.083L184.591 107.676L184.38 107.53L184.18 107.514L183.98 107.614L183.86 107.695L183.551 107.688H183.416L183.405 107.705C183.405 107.714 183.396 107.732 183.39 107.752C183.386 107.763 183.382 107.775 183.379 107.787C183.376 107.798 183.373 107.809 183.371 107.821C183.369 107.851 183.37 107.881 183.374 107.911C183.374 107.926 183.372 107.944 183.372 107.963C183.372 107.978 183.372 107.994 183.374 108.011C183.377 108.03 183.377 108.05 183.377 108.071C183.377 108.091 183.377 108.111 183.379 108.128C183.384 108.162 183.384 108.198 183.384 108.228V108.37C183.384 108.374 183.384 108.379 183.383 108.385C183.383 108.394 183.382 108.405 183.384 108.414C183.385 108.417 183.386 108.421 183.387 108.426C183.389 108.44 183.393 108.458 183.398 108.476C183.402 108.488 183.402 108.5 183.402 108.511C183.403 108.521 183.403 108.53 183.405 108.539C183.41 108.558 183.41 108.576 183.41 108.591C183.412 108.605 183.416 108.618 183.422 108.631C183.429 108.643 183.438 108.653 183.45 108.66L183.486 108.681L183.514 108.698L183.532 108.709H183.539L183.705 108.701L183.739 108.864L183.735 108.86V108.871C183.735 108.878 183.736 108.885 183.737 108.892C183.738 108.899 183.739 108.906 183.74 108.914C183.743 108.93 183.746 108.947 183.75 108.963C183.752 108.97 183.753 108.976 183.755 108.983C183.759 108.997 183.764 109.01 183.768 109.023C183.771 109.029 183.773 109.035 183.775 109.042C183.781 109.06 183.792 109.074 183.792 109.084L183.801 109.099L183.68 109.122L183.662 109.112C183.65 109.105 183.636 109.099 183.623 109.095C183.611 109.089 183.597 109.087 183.584 109.089C183.578 109.09 183.573 109.093 183.57 109.097C183.568 109.1 183.567 109.104 183.566 109.107C183.566 109.109 183.566 109.111 183.566 109.114C183.567 109.143 183.57 109.172 183.575 109.201C183.58 109.235 183.587 109.277 183.593 109.314C183.598 109.343 183.603 109.372 183.608 109.396L183.611 109.414L183.621 109.454L183.606 109.554L183.379 109.423L183.372 109.411C183.367 109.402 183.36 109.395 183.353 109.388C183.35 109.384 183.346 109.382 183.342 109.38C183.338 109.378 183.334 109.377 183.329 109.377C183.321 109.377 183.313 109.384 183.305 109.399L183.272 109.459C183.259 109.485 183.244 109.513 183.23 109.542C183.216 109.571 183.203 109.598 183.193 109.621C183.191 109.625 183.189 109.63 183.187 109.635C183.182 109.647 183.179 109.659 183.177 109.672V109.699C183.178 109.708 183.178 109.718 183.177 109.728C183.176 109.74 183.173 109.753 183.17 109.765C183.166 109.783 183.16 109.8 183.154 109.818C183.146 109.839 183.137 109.86 183.126 109.881C183.116 109.902 183.104 109.922 183.092 109.941L183.059 109.995C183.053 110.004 183.048 110.013 183.043 110.023C183.04 110.028 183.038 110.034 183.035 110.04L183.019 110.078L183.005 110.114C183.002 110.121 182.999 110.127 182.995 110.133C182.992 110.139 182.988 110.144 182.986 110.152C182.983 110.161 182.979 110.171 182.976 110.181C182.975 110.185 182.974 110.19 182.974 110.195C182.97 110.21 182.964 110.225 182.957 110.24C182.95 110.255 182.942 110.271 182.934 110.285C182.926 110.299 182.918 110.314 182.912 110.328C182.906 110.341 182.902 110.354 182.899 110.369C182.892 110.382 182.899 110.4 182.892 110.42C182.89 110.427 182.889 110.434 182.888 110.442C182.888 110.456 182.889 110.471 182.885 110.485C182.879 110.507 182.879 110.53 182.879 110.551V110.607C182.88 110.622 182.88 110.638 182.879 110.654C182.877 110.67 182.879 110.686 182.871 110.703C182.865 110.715 182.864 110.726 182.863 110.738C182.863 110.743 182.863 110.747 182.863 110.752C182.863 110.76 182.862 110.769 182.862 110.778C182.862 110.785 182.863 110.792 182.863 110.799V110.878C182.862 110.89 182.862 110.902 182.863 110.914C182.867 110.929 182.873 110.943 182.881 110.957C182.887 110.971 182.891 110.986 182.893 111.001C182.896 111.008 182.896 111.016 182.896 111.024C182.896 111.031 182.896 111.039 182.899 111.047C182.905 111.062 182.905 111.076 182.905 111.088C182.906 111.097 182.908 111.105 182.912 111.114C182.915 111.117 182.916 111.121 182.917 111.125C182.917 111.129 182.917 111.133 182.915 111.137V111.152C182.913 111.158 182.913 111.165 182.915 111.172C182.922 111.184 182.931 111.195 182.942 111.204C182.951 111.211 182.959 111.218 182.968 111.225C182.976 111.232 182.985 111.238 182.993 111.244L183.097 111.314C183.108 111.322 183.118 111.332 183.128 111.342C183.132 111.346 183.135 111.35 183.139 111.354C183.141 111.358 183.144 111.362 183.146 111.366C183.151 111.375 183.155 111.386 183.157 111.397C183.16 111.411 183.162 111.425 183.163 111.44V111.774C183.163 111.779 183.163 111.785 183.164 111.791C183.164 111.803 183.164 111.816 183.163 111.828C183.162 111.835 183.161 111.842 183.16 111.849C183.158 111.86 183.156 111.87 183.156 111.879C183.154 111.891 183.151 111.902 183.146 111.914C183.135 111.927 183.123 111.939 183.109 111.95C183.09 111.969 183.066 111.992 183.042 112.014L182.979 112.078L182.95 112.104L182.93 112.114L182.882 112.136C182.866 112.146 182.848 112.156 182.834 112.166C182.824 112.172 182.814 112.181 182.807 112.191L182.805 112.194C182.799 112.203 182.793 112.211 182.785 112.219L182.755 112.249L182.728 112.273L182.716 112.283L182.505 112.314L182.52 112.294C182.529 112.28 182.541 112.262 182.553 112.243C182.565 112.224 182.577 112.204 182.585 112.187C182.589 112.18 182.592 112.173 182.594 112.165C182.595 112.159 182.596 112.154 182.596 112.148C182.586 112.131 182.572 112.116 182.556 112.105C182.534 112.085 182.505 112.062 182.476 112.04L182.398 111.981L182.363 111.955C182.382 111.825 182.385 111.694 182.37 111.564C182.356 111.421 182.319 111.281 182.26 111.15C182.203 111.021 182.112 110.91 181.997 110.83C181.863 110.743 181.704 110.704 181.545 110.719C181.008 110.908 180.556 111.281 180.268 111.772C179.815 112.412 179.446 113.108 179.168 113.842C178.894 114.506 178.732 115.211 178.687 115.929C178.678 116.517 178.842 116.937 179.253 117.037C179.435 117.044 179.616 117.003 179.776 116.917C179.965 116.816 180.138 116.687 180.289 116.536C180.472 116.355 180.641 116.162 180.795 115.957C180.962 115.739 181.129 115.498 181.295 115.245L180.964 116.119L180.922 116.202L180.828 116.389L180.728 116.589L180.665 116.714L180.628 116.783L180.587 116.862C180.573 116.889 180.559 116.918 180.546 116.945C180.533 116.972 180.522 116.999 180.512 117.024C180.509 117.03 180.507 117.037 180.504 117.045C180.496 117.064 180.488 117.086 180.478 117.108L180.439 117.202L180.43 117.226C180.421 117.249 180.413 117.272 180.405 117.294C180.391 117.318 180.379 117.344 180.369 117.371C180.366 117.387 180.362 117.404 180.357 117.42L180.345 117.455C180.341 117.468 180.338 117.482 180.336 117.496C180.335 117.518 180.335 117.54 180.336 117.562V117.726C180.337 117.736 180.337 117.746 180.337 117.756C180.337 117.769 180.337 117.782 180.336 117.796C180.335 117.816 180.331 117.835 180.325 117.855C180.322 117.864 180.319 117.874 180.316 117.885C180.313 117.895 180.31 117.906 180.307 117.918C180.301 117.941 180.295 117.968 180.29 117.993C180.285 118.018 180.277 118.044 180.277 118.068C180.274 118.088 180.272 118.109 180.272 118.13V118.437C180.272 118.457 180.27 118.477 180.267 118.498C180.266 118.509 180.266 118.521 180.267 118.533V118.636L180.605 118.843L180.604 118.844L180.638 118.865C180.651 118.873 180.662 118.883 180.672 118.895C180.674 118.896 180.675 118.898 180.676 118.9C180.683 118.908 180.686 118.918 180.687 118.929C180.683 118.947 180.675 118.964 180.662 118.978C180.647 118.998 180.627 119.022 180.608 119.046C180.59 119.068 180.573 119.091 180.558 119.116C180.552 119.124 180.548 119.133 180.546 119.143C180.545 119.148 180.544 119.153 180.544 119.158C180.544 119.163 180.544 119.168 180.545 119.173C180.549 119.184 180.555 119.195 180.56 119.205C180.564 119.212 180.568 119.219 180.572 119.226C180.586 119.247 180.6 119.268 180.616 119.288C180.633 119.309 180.652 119.33 180.671 119.35C180.69 119.369 180.71 119.387 180.732 119.403C180.745 119.413 180.757 119.426 180.767 119.44C180.773 119.448 180.778 119.456 180.782 119.465C180.795 119.489 180.805 119.515 180.812 119.542C180.815 119.552 180.818 119.562 180.82 119.573C180.822 119.584 180.824 119.595 180.826 119.607V119.635C180.83 119.631 180.835 119.627 180.84 119.624C180.851 119.616 180.863 119.611 180.875 119.609C180.892 119.606 180.909 119.609 180.923 119.619C180.946 119.634 180.964 119.656 180.975 119.681C180.992 119.714 181.011 119.756 181.031 119.8C181.051 119.844 181.07 119.891 181.088 119.934L181.132 120.044L181.15 120.09H181.145L181.144 120.095L181.145 120.101C181.146 120.105 181.15 120.114 181.161 120.114C181.179 120.119 181.197 120.122 181.215 120.123C181.247 120.125 181.279 120.125 181.31 120.123C181.345 120.119 181.382 120.113 181.416 120.107L181.502 120.09L181.538 120.082L181.55 120.059L181.576 120.005C181.586 119.985 181.595 119.963 181.602 119.944C181.608 119.929 181.612 119.914 181.614 119.899V119.722L181.622 119.689L181.641 119.614L181.661 119.534L181.673 119.484C181.674 119.476 181.679 119.462 181.684 119.445L181.702 119.389L181.718 119.338L181.725 119.316L181.882 119.178L181.782 120.214L181.739 120.325L181.645 120.572C181.615 120.642 181.588 120.714 181.564 120.775L181.545 120.826C181.53 120.865 181.517 120.898 181.509 120.922C181.502 120.941 181.498 120.953 181.498 120.958L181.033 123.155L181.007 123.34C180.996 123.419 180.983 123.517 180.968 123.622L180.95 123.751C180.929 123.902 180.909 124.054 180.893 124.171C180.884 124.236 180.877 124.289 180.873 124.326C180.869 124.355 180.867 124.375 180.867 124.382C180.867 124.398 180.871 124.438 180.878 124.498C180.88 124.515 180.882 124.534 180.884 124.553C180.89 124.602 180.896 124.656 180.903 124.71C180.908 124.748 180.913 124.786 180.918 124.823C180.922 124.858 180.927 124.891 180.931 124.92C180.935 124.956 180.942 124.992 180.951 125.027L180.965 125.064L180.995 125.144L181.035 125.254L181.08 125.38H180.867V125.84H181.145V126.27H180.837V126.63C180.534 126.648 180.237 126.722 179.961 126.848C179.692 126.971 179.447 127.14 179.237 127.348C179.026 127.556 178.852 127.8 178.724 128.069C178.592 128.346 178.509 128.645 178.48 128.951V129.125ZM186.911 120.172L186.894 120.072L186.817 119.476L186.877 119.122L186.893 119.065C186.9 119.043 186.909 119.01 186.918 118.976C186.921 118.962 186.925 118.948 186.929 118.934C186.942 118.886 186.955 118.832 186.965 118.786C186.974 118.75 186.979 118.714 186.981 118.678C186.98 118.649 186.975 118.62 186.967 118.593C186.958 118.557 186.947 118.524 186.936 118.493C186.928 118.469 186.919 118.447 186.912 118.43C186.909 118.424 186.907 118.419 186.905 118.414L186.896 118.374L187.076 118.144L187.098 118.118L187.103 118.111C187.116 118.095 187.131 118.074 187.148 118.05C187.168 118.019 187.187 117.988 187.203 117.956C187.22 117.924 187.233 117.89 187.242 117.856C187.25 117.815 187.256 117.775 187.259 117.734C187.265 117.689 187.265 117.641 187.265 117.595C187.265 117.57 187.263 117.546 187.262 117.524C187.26 117.503 187.259 117.484 187.259 117.467C187.257 117.437 187.251 117.408 187.242 117.38C187.227 117.347 187.209 117.316 187.189 117.286C187.164 117.245 187.132 117.198 187.101 117.152L187.016 117.028L186.972 116.965L188.042 117.642L188.342 117.828L188.369 117.858L188.434 117.928L188.513 118.01C188.539 118.036 188.563 118.059 188.582 118.074L188.628 118.113L188.683 118.16L188.741 118.21L188.797 118.259L187.176 121.51L187.15 121.16L187.131 121.111L187.088 120.999L187.042 120.875C187.028 120.837 187.018 120.807 187.014 120.791C187.01 120.775 187 120.723 186.989 120.652C186.978 120.581 186.963 120.492 186.949 120.406L186.911 120.172Z" fill="#FAFBFC"/> -</g> -<defs> -<clipPath id="clip0_10831_116781"> -<rect width="1440" height="185" fill="white"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/hero/hero-lightmode-mobile.svg b/web/src/assets/svgs/hero/hero-lightmode-mobile.svg deleted file mode 100644 index f0170be39..000000000 --- a/web/src/assets/svgs/hero/hero-lightmode-mobile.svg +++ /dev/null @@ -1,53 +0,0 @@ -<svg viewBox="0 0 390 150" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_16498_64793)"> -<path d="M390 0H0V151H390V0Z" fill="#4D00B4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M380.152 150.559L320.784 18.487L108.806 9L0 144.694V150.559H6.67975L90.5434 44.5304L65.5521 150.559H192.2L264.215 119.057L260.057 150.559H289.78L294.367 116.61L327.78 150.559H366.713L301.797 84.4891L320.93 45.1631L370.026 150.559H380.152ZM123.653 32.4488L246.428 85.3812L97.8622 143.736L123.653 32.4488ZM172.037 21.265L297.093 26.3473L275.193 66.4381L172.037 21.265Z" fill="#5C16BA"/> -<path d="M229.029 77.5718L229.033 78.9269L207.141 68.5137L206.827 65.31L229.029 77.5718Z" fill="#FAFBFC"/> -<path d="M250.674 89.5286L250.6 90.4108L244.363 87.1639L244.253 85.9409L250.674 89.5286Z" fill="#FAFBFC"/> -<path d="M211.407 66.5273L206.994 64.0241L207.232 61.2714L211.137 64.8477L211.407 66.5273Z" fill="#FAFBFC"/> -<path d="M206.121 71.3561L143.602 83.2672L143.388 82.1363L143.198 81.678L143.65 81.3951L143.523 79.1879L205.508 65.2815L206.121 71.3561Z" fill="#FAFBFC"/> -<path d="M206.636 60.2994L205.816 62.5467L205.934 63.5064L142.651 78.4075L141.903 78.313L141.543 75.6572L145.24 74.1145L145.362 74.9674L147.045 73.9889L147.273 74.837L145.062 76.1416L148.768 75.1354L157.198 70.2308L164.916 67.1446L164.719 68.106L167.058 67.8614L167.033 66.2673L170.319 65.3703L170.131 67.1813L171.935 66.9448L172.29 62.1463L196.459 63.3156L196.438 61.8218L199.843 61.7777L200.037 60.0703L206.636 60.2994Z" fill="#FAFBFC"/> -<path d="M251.407 93.2247L207.544 71.3471L207.426 69.6568L229.904 80.9034L251.119 91.7032L251.407 93.2247Z" fill="#FAFBFC"/> -<path d="M185.481 107.098L142.425 111.766L142.948 110.423L185.481 107.098Z" fill="#FAFBFC"/> -<path d="M206.534 107.046L252.562 115.2L252.683 115.43L252.698 115.43C252.773 115.428 252.844 115.426 252.91 115.426C252.954 115.426 252.995 115.428 253.039 115.43C253.068 115.432 253.098 115.433 253.131 115.434L253.2 115.436C253.258 115.438 253.317 115.44 253.375 115.44C253.441 115.44 253.508 115.437 253.577 115.431H254.643V114.758H256.122V114.771L265.01 114.599L302.184 114.739H302.87V115.412H304.348V115.772L304.618 115.818C305.503 115.967 305.93 115.83 306.161 115.755C306.327 115.702 306.393 115.681 306.456 115.818C306.515 115.954 306.585 116.084 306.665 116.21C306.724 116.277 306.767 116.355 306.794 116.439C306.82 116.523 306.828 116.611 306.818 116.698C306.788 116.907 306.827 117.026 307.35 117.374C307.703 117.628 308.132 117.768 308.576 117.773C308.747 117.77 308.919 117.756 309.089 117.731C309.225 117.711 309.363 117.699 309.501 117.695C309.783 117.668 310.048 117.559 310.26 117.381C310.559 117.139 310.936 116.998 311.329 116.982C311.72 116.986 312.109 117.046 312.481 117.16C312.907 117.278 313.343 117.364 313.783 117.416C315.857 117.713 317.909 118.133 319.927 118.674C320.333 118.828 320.769 118.895 321.205 118.869C321.407 118.869 321.591 118.861 321.725 118.855C321.758 118.854 321.788 118.853 321.815 118.852C321.85 118.85 321.879 118.849 321.902 118.849C322.061 118.873 322.209 118.938 322.332 119.036C322.455 119.135 322.546 119.263 322.597 119.408C322.761 119.946 325.238 120.009 325.262 120.009C325.556 120 325.848 119.969 326.137 119.918C326.493 119.855 326.853 119.819 327.215 119.81C327.562 119.81 327.686 120.073 327.816 120.348L327.817 120.35C327.914 120.557 328.016 120.771 328.224 120.843C328.589 120.97 329.016 122.098 329.016 124.864V128.44C329.016 128.447 329.016 128.453 329.018 128.46C329.02 128.468 329.022 128.476 329.026 128.483L329.028 128.487L329.03 128.49H334.328V128.912H335.809V129.332H336.869V130.158C336.904 130.158 336.939 130.16 336.973 130.161L337.008 130.163C337.03 130.164 337.051 130.164 337.072 130.164H337.316C337.358 130.164 337.396 130.163 337.433 130.162C337.453 130.161 337.472 130.16 337.491 130.16C337.507 130.159 337.522 130.159 337.537 130.159H337.863C337.929 130.159 337.996 130.16 338.064 130.162C338.105 130.162 338.147 130.163 338.189 130.164C338.216 130.164 338.244 130.164 338.271 130.164C338.826 130.164 339.081 130.121 339.149 130.013C339.212 129.391 339.215 128.765 339.157 128.143C339.156 128.134 339.153 128.126 339.148 128.119C339.146 128.116 339.144 128.113 339.141 128.11C339.137 128.107 339.134 128.104 339.13 128.102C339.097 128.082 339.068 128.058 339.042 128.031H340.395C340.477 128.031 340.578 128.031 340.699 128.023C340.843 128.016 341.008 128.011 341.164 128.011C341.344 127.992 341.525 128.014 341.696 128.075C342.109 128.224 342.55 128.278 342.987 128.233C343.141 128.233 343.333 128.218 343.54 128.201L343.59 128.197C343.827 128.178 344.087 128.157 344.329 128.157C344.533 128.151 344.737 128.174 344.934 128.227C345.043 128.261 345.156 128.277 345.27 128.276C345.48 128.267 345.688 128.234 345.891 128.177C346.308 128.069 346.738 128.015 347.169 128.014C347.658 128.014 348.049 128.038 348.332 128.055L348.412 128.059C348.551 128.067 348.664 128.073 348.757 128.073C348.839 128.073 349.04 128.073 349.102 127.974C349.216 127.872 349.35 127.796 349.496 127.75C349.642 127.703 349.796 127.689 349.948 127.707C350.041 127.707 350.133 127.713 350.225 127.723C350.582 127.764 350.64 127.892 350.698 128.028C350.721 128.102 350.767 128.168 350.828 128.215C350.89 128.263 350.965 128.29 351.043 128.293C351.091 128.299 351.138 128.302 351.186 128.302C351.333 128.297 351.479 128.281 351.623 128.254C351.861 128.212 352.103 128.19 352.345 128.187C352.513 128.187 352.681 128.198 352.848 128.22C353.169 128.263 353.429 128.277 353.642 128.287C354.097 128.312 354.171 128.325 354.171 128.46C354.176 128.569 354.207 128.675 354.262 128.77C354.328 128.899 354.319 128.908 354.231 128.933C353.913 129.02 353.973 129.963 354.037 130.519C354.037 130.551 354.085 130.576 354.138 130.576H361.041C364.429 130.576 366.221 130.927 366.221 131.591C366.221 132.009 366.828 132.008 367.118 132.008C367.228 132.008 367.345 132.008 367.468 132.002C367.591 131.995 367.725 131.995 367.856 131.995H367.859C368.104 131.96 368.354 131.978 368.591 132.049C368.829 132.119 369.048 132.24 369.235 132.403C369.485 132.714 369.371 133.277 369.248 133.871C369.111 134.537 369.619 134.499 370.445 134.437C371.015 134.395 371.736 134.342 372.5 134.5C372.875 134.586 374.211 133.985 375.623 133.35C377.322 132.585 379.129 131.772 379.5 132.049C380.111 133.161 383.734 131.69 386.559 130.544C388.361 129.812 389.838 129.213 390 129.5V151H0V144H0.00391911L0 129.271L4.28866 129.779L5.76102 129.213L9.93285 131.845H24.3353L30.5667 128.266C30.5667 128.266 44.8397 129.115 51.8301 128.266C56.5824 127.689 59.5734 126.387 61.0015 125.612V124.963C61.0015 122.407 61.4294 121.364 61.7952 121.246C62.0034 121.18 62.1063 120.982 62.2034 120.79C62.3341 120.535 62.4592 120.292 62.8079 120.292C63.1704 120.3 63.5317 120.333 63.8882 120.391C64.1778 120.439 64.4713 120.467 64.7659 120.476C64.7904 120.476 67.2743 120.417 67.4385 119.919C67.4894 119.786 67.5812 119.667 67.7042 119.576C67.8272 119.485 67.9765 119.425 68.1358 119.403C68.1586 119.403 68.188 119.404 68.2232 119.406L68.2623 119.407L68.313 119.409C68.4478 119.415 68.6322 119.422 68.8347 119.422C69.2719 119.446 69.7097 119.384 70.116 119.242C72.14 118.742 74.1978 118.353 76.2776 118.079C76.7197 118.03 77.1567 117.951 77.5842 117.841C77.9573 117.736 78.3465 117.681 78.7386 117.678C79.1334 117.692 79.5112 117.822 79.811 118.046C80.0235 118.21 80.2897 118.312 80.5719 118.336C80.7106 118.34 80.8489 118.351 80.986 118.37C81.1563 118.393 81.328 118.405 81.5003 118.408C81.9448 118.404 82.3759 118.275 82.7293 118.039C83.2535 117.718 83.2934 117.608 83.2632 117.415C83.2529 117.335 83.2611 117.253 83.2873 117.176C83.3135 117.098 83.3572 117.026 83.4159 116.963C83.4962 116.847 83.5666 116.727 83.6266 116.602C83.7777 116.297 83.8096 116.233 85.3317 115.998L85.6018 115.955V115.622H87.0848V115H87.7724L108.797 115.135H109.484V115.758H110.968V116.379H112.03V117.599C112.099 117.605 112.166 117.608 112.232 117.608C112.291 117.608 112.349 117.606 112.408 117.604L112.477 117.602C112.51 117.601 112.54 117.6 112.569 117.599C112.593 117.598 112.615 117.597 112.638 117.596L112.672 117.595L112.698 117.595C112.765 117.595 112.838 117.597 112.914 117.598C112.95 117.599 112.987 117.6 113.025 117.601C113.157 117.604 113.296 117.608 113.433 117.608C113.989 117.608 114.245 117.544 114.313 117.386V116.958L114.304 116.708L114.296 116.464C114.295 116.442 114.285 116.42 114.268 116.404C114.234 116.372 114.204 116.337 114.18 116.299C124.539 116.263 131.784 116.119 137.239 115.968L137.483 113.9L151.915 113.003L179.924 110.358L139.041 112.901L139.127 112.112L183.046 108.83L204.939 105.904L205.033 113.173L206.913 113.321L206.877 112.23L207 112.242V111.195L206.734 111.169L206.534 107.046Z" fill="#FAFBFC"/> -<path d="M155.919 84.5898L153.284 83.1775L148.716 84.0842L148.763 83.4605L153.352 82.6043L155.919 83.9774V84.5898Z" fill="#FAFBFC"/> -<path d="M156.812 108.605L158.273 84.6599L158.256 84.6607C158.262 84.646 158.262 84.6313 158.262 84.6167C158.264 84.5817 158.262 84.5466 158.255 84.5123C158.247 84.4702 158.228 84.4308 158.2 84.3981C158.164 84.3588 158.116 84.3325 158.063 84.3231C158.038 84.317 158.012 84.3159 157.986 84.32C157.961 84.3241 157.936 84.3331 157.914 84.3468C157.877 84.3727 157.847 84.4078 157.827 84.4487C157.81 84.4844 157.797 84.5219 157.788 84.5604C157.784 84.5776 157.781 84.595 157.779 84.6126L156.175 108.655L155.826 108.68C155.889 107.773 156.012 106.007 156.166 103.809C156.32 101.612 156.504 98.9886 156.691 96.359C156.878 93.7294 157.066 91.1087 157.227 88.9186C157.389 86.7285 157.519 84.973 157.601 84.0858C157.986 83.7847 158.438 83.5811 158.918 83.4923C159.34 83.4155 159.772 83.4051 160.197 83.4613C160.526 83.5029 160.85 83.5746 161.165 83.6757C161.295 83.7163 161.423 83.7636 161.548 83.8176L161.027 108.304L160.73 108.326L161.316 84.3182C161.319 84.3032 161.321 84.2879 161.321 84.2726C161.324 84.2376 161.322 84.2026 161.315 84.1682C161.307 84.1261 161.289 84.0867 161.261 84.054C161.225 84.0146 161.177 83.988 161.125 83.9782C161.099 83.9719 161.073 83.9706 161.047 83.9747C161.021 83.9788 160.996 83.988 160.974 84.0019C160.938 84.0278 160.91 84.0626 160.893 84.103C160.875 84.1382 160.862 84.1755 160.854 84.2139C160.85 84.231 160.847 84.2485 160.845 84.266L160.111 108.37L159.797 108.391L160.547 84.0924C160.55 84.0773 160.552 84.0621 160.553 84.0467C160.555 84.0121 160.553 83.9772 160.546 83.9432C160.538 83.9013 160.52 83.8623 160.492 83.8298C160.457 83.7908 160.409 83.7646 160.357 83.7556C160.332 83.7489 160.305 83.7473 160.279 83.7511C160.254 83.7549 160.229 83.7639 160.207 83.7776C160.171 83.8037 160.143 83.8386 160.125 83.8788C160.109 83.9139 160.097 83.9508 160.09 83.9888C160.086 84.0063 160.083 84.024 160.081 84.0418L159.177 108.434L158.788 108.461L159.808 84.0964C159.811 84.0814 159.813 84.0661 159.814 84.0508C159.816 84.0159 159.814 83.9808 159.807 83.9464C159.799 83.9046 159.781 83.8655 159.753 83.8331C159.718 83.794 159.67 83.7684 159.618 83.7605C159.593 83.7539 159.567 83.7525 159.541 83.7563C159.516 83.7601 159.491 83.769 159.469 83.7825C159.433 83.8085 159.405 83.8434 159.387 83.8836C159.37 83.9189 159.357 83.9561 159.348 83.9945C159.344 84.0117 159.341 84.0291 159.339 84.0467L158.163 108.508L157.765 108.537L159.03 84.3321C159.035 84.3166 159.035 84.3019 159.035 84.2864C159.037 84.2512 159.035 84.2158 159.028 84.1812C159.02 84.1389 159.001 84.0993 158.973 84.0663C158.937 84.0274 158.889 84.0014 158.837 83.9921C158.812 83.9857 158.786 83.9845 158.76 83.9886C158.735 83.9927 158.71 84.0019 158.688 84.0157C158.653 84.0424 158.625 84.0778 158.607 84.1185C158.589 84.154 158.576 84.1915 158.567 84.2302C158.566 84.2335 158.565 84.2369 158.564 84.2404C158.561 84.2544 158.557 84.2688 158.557 84.2832L157.156 108.582L156.812 108.605Z" fill="#FAFBFC"/> -<path d="M160.745 81.8109L156.034 82.7486L156.067 82.1045L160.796 81.2182L163.462 82.6369L163.476 83.2705L160.745 81.8109Z" fill="#FAFBFC"/> -<path d="M165.261 107.993L166.508 83.1922L166.507 83.1962C166.51 83.1825 166.511 83.1686 166.512 83.1547C166.514 83.1187 166.512 83.0824 166.505 83.047C166.496 83.0035 166.477 82.9628 166.449 82.9288C166.413 82.8866 166.364 82.8579 166.309 82.8473C166.283 82.8408 166.255 82.8397 166.229 82.844C166.202 82.8484 166.176 82.8581 166.153 82.8726C166.115 82.8995 166.084 82.9361 166.065 82.9786C166.047 83.0155 166.033 83.0543 166.025 83.0943C166.02 83.1123 166.017 83.1306 166.016 83.149L164.629 108.043L164.272 108.068L164.312 107.393C164.37 106.394 164.458 104.884 164.565 103.086C164.681 101.132 164.818 98.8398 164.958 96.4981L165.026 95.3675C165.189 92.64 165.353 89.9167 165.497 87.6336C165.641 85.3505 165.76 83.5224 165.83 82.6018C166.224 82.2902 166.688 82.0795 167.182 81.9879C167.618 81.9082 168.063 81.8972 168.502 81.9553C168.841 81.9978 169.176 82.0718 169.502 82.1762C169.637 82.2182 169.769 82.2672 169.899 82.323L169.627 107.681L169.322 107.704L169.663 82.8416C169.666 82.8259 169.668 82.8101 169.668 82.7943C169.67 82.7579 169.667 82.7215 169.66 82.6858C169.651 82.6423 169.632 82.6017 169.603 82.5676C169.566 82.5268 169.517 82.4995 169.463 82.4902C169.437 82.4837 169.41 82.4826 169.383 82.4868C169.357 82.491 169.332 82.5004 169.309 82.5146C169.271 82.5413 169.241 82.5776 169.222 82.6198C169.204 82.6563 169.191 82.6949 169.183 82.7348C169.178 82.7525 169.175 82.7704 169.174 82.7886L168.679 107.75L168.353 107.774L168.869 82.6141C168.871 82.6048 168.873 82.5955 168.874 82.5861C168.874 82.5797 168.875 82.5732 168.875 82.5668C168.878 82.5308 168.875 82.4945 168.868 82.4591C168.859 82.4154 168.84 82.3747 168.811 82.341C168.774 82.2984 168.723 82.2697 168.668 82.2594C168.642 82.2527 168.615 82.2513 168.589 82.2554C168.562 82.2594 168.537 82.2688 168.514 82.283C168.476 82.3098 168.446 82.3461 168.427 82.3882C168.41 82.4252 168.397 82.464 168.389 82.504C168.385 82.522 168.382 82.5403 168.381 82.5586L167.716 107.813L167.309 107.845L168.103 82.6198C168.108 82.6046 168.108 82.5887 168.108 82.5735C168.109 82.5374 168.106 82.5002 168.099 82.4649C168.09 82.4214 168.07 82.3808 168.042 82.3466C168.005 82.3045 167.956 82.2758 167.901 82.2651C167.847 82.2522 167.791 82.261 167.744 82.2895C167.706 82.316 167.675 82.3523 167.655 82.3948C167.638 82.4314 167.624 82.47 167.615 82.5097C167.611 82.5274 167.608 82.5454 167.606 82.5635L166.661 107.893L166.254 107.92L167.295 82.8522C167.3 82.8367 167.3 82.8204 167.3 82.8049C167.302 82.7688 167.299 82.7326 167.292 82.6972C167.283 82.6539 167.263 82.6135 167.234 82.5798C167.198 82.5393 167.148 82.5123 167.094 82.5032C167.068 82.4965 167.041 82.4953 167.014 82.4995C166.987 82.5037 166.962 82.5133 166.939 82.5277C166.9 82.5543 166.87 82.5906 166.85 82.6328C166.833 82.6696 166.82 82.7086 166.811 82.7486C166.807 82.7666 166.804 82.7848 166.802 82.8032L165.617 107.968L165.261 107.993Z" fill="#FAFBFC"/> -<path d="M190.488 78.4279L187.442 76.8257L182.32 77.8555L182.34 77.1461L187.486 76.1726L190.448 77.7291L190.488 78.4279Z" fill="#FAFBFC"/> -<path d="M169.023 80.2478L164.177 81.2182L164.21 80.5487L169.078 79.6387L171.842 81.1064L171.865 81.7587L169.023 80.2478Z" fill="#FAFBFC"/> -<path d="M174.158 107.346L175.199 81.4432L175.204 81.444C175.209 81.4293 175.214 81.4143 175.217 81.3992C175.219 81.3617 175.215 81.3241 175.207 81.2874C175.198 81.2426 175.177 81.2009 175.148 81.1659C175.11 81.1233 175.058 81.0946 175.002 81.0844C174.975 81.0776 174.947 81.0762 174.92 81.0805C174.893 81.0847 174.866 81.0943 174.843 81.1089C174.804 81.1365 174.774 81.1739 174.754 81.2173C174.736 81.2553 174.723 81.2952 174.715 81.3364C174.711 81.3549 174.708 81.3737 174.706 81.3926L173.517 107.397L173.147 107.424C173.166 107.033 173.201 106.32 173.247 105.369C173.285 104.597 173.331 103.668 173.382 102.629C173.495 100.31 173.638 97.4451 173.783 94.5424C173.928 91.6396 174.077 88.7026 174.208 86.245C174.338 83.7874 174.447 81.806 174.513 80.8276C174.917 80.5064 175.393 80.2893 175.9 80.1956C176.348 80.1142 176.807 80.1035 177.259 80.1638C177.61 80.2086 177.955 80.2856 178.292 80.3938C178.43 80.437 178.567 80.4876 178.7 80.5455L178.679 107.023L178.359 107.043L178.461 81.0779C178.464 81.0616 178.466 81.0453 178.466 81.029C178.467 80.9918 178.464 80.9544 178.456 80.9181C178.446 80.8734 178.426 80.8317 178.396 80.7966C178.358 80.7542 178.307 80.7255 178.251 80.7151C178.224 80.7078 178.195 80.7063 178.167 80.7105C178.139 80.7147 178.112 80.7246 178.088 80.7395C178.049 80.7671 178.019 80.8045 177.999 80.8479C177.982 80.8859 177.969 80.926 177.961 80.967C177.957 80.9856 177.954 81.0044 177.953 81.0233L177.697 107.091L177.357 107.117L177.638 80.8439C177.641 80.8276 177.643 80.8113 177.643 80.795C177.645 80.7575 177.641 80.7199 177.633 80.6833C177.624 80.6381 177.603 80.596 177.573 80.5609C177.535 80.5178 177.483 80.489 177.426 80.4794C177.399 80.472 177.37 80.4703 177.342 80.4745C177.314 80.4787 177.287 80.4887 177.263 80.5038C177.224 80.531 177.193 80.5685 177.173 80.6123C177.156 80.6503 177.142 80.6903 177.134 80.7314C177.13 80.7497 177.127 80.7682 177.125 80.7868L176.692 107.164L176.275 107.195L176.845 80.8431C176.848 80.8271 176.85 80.8111 176.85 80.795C176.852 80.758 176.849 80.721 176.841 80.6849C176.831 80.6401 176.81 80.5986 176.779 80.5642C176.74 80.5218 176.688 80.4931 176.631 80.4826C176.604 80.4762 176.577 80.4753 176.55 80.4799C176.523 80.4845 176.497 80.4946 176.474 80.5096C176.435 80.5373 176.404 80.5751 176.385 80.6189C176.367 80.6568 176.354 80.6968 176.346 80.7379C176.341 80.7561 176.338 80.7747 176.337 80.7933L175.613 107.241L175.19 107.272L176.006 81.0885C176.011 81.0722 176.011 81.0567 176.011 81.0404C176.012 81.0032 176.009 80.9659 176.001 80.9295C175.991 80.8848 175.971 80.8431 175.941 80.808C175.903 80.7656 175.852 80.7369 175.796 80.7265C175.768 80.7195 175.74 80.7182 175.712 80.7229C175.684 80.7275 175.657 80.7379 175.633 80.7534C175.594 80.781 175.564 80.8184 175.544 80.8618C175.527 80.9007 175.515 80.9415 175.507 80.9833C175.503 81.0016 175.5 81.0201 175.498 81.0387L174.526 107.323L174.158 107.346Z" fill="#FAFBFC"/> -<path d="M177.764 78.4034L172.781 79.4047L172.809 78.7166L177.812 77.7715L180.676 79.2841L180.708 79.9608L177.764 78.4034Z" fill="#FAFBFC"/> -<path d="M196.879 75.0652L191.616 76.1252L191.634 75.3939L196.918 74.3942L199.98 75.9989L200.024 76.7164L196.879 75.0652Z" fill="#FAFBFC"/> -<path d="M149.75 109.12L151.299 85.9262C151.305 85.9124 151.311 85.8982 151.315 85.8838C151.317 85.8503 151.316 85.8166 151.31 85.7835C151.304 85.7435 151.287 85.7057 151.263 85.6734C151.231 85.6356 151.188 85.61 151.14 85.6008C151.117 85.5947 151.093 85.5934 151.069 85.5972C151.046 85.601 151.023 85.6097 151.003 85.6228C150.968 85.6477 150.94 85.6814 150.922 85.7207C150.906 85.7551 150.894 85.7912 150.886 85.8283C150.882 85.845 150.879 85.8619 150.877 85.8789L149.202 109.158L148.882 109.183C148.902 108.913 148.929 108.559 148.961 108.133C149.03 107.211 149.123 105.957 149.233 104.504L149.247 104.325C149.405 102.238 149.592 99.7637 149.781 97.2869C149.976 94.7388 150.173 92.19 150.341 90.0618C150.508 87.9337 150.645 86.227 150.726 85.366C151.073 85.0784 151.486 84.8822 151.928 84.7952C152.311 84.7214 152.704 84.7117 153.09 84.7667C153.388 84.8073 153.682 84.8769 153.967 84.9746C154.085 85.0139 154.2 85.0599 154.313 85.1124L153.609 108.84L153.337 108.861L154.096 85.5943C154.099 85.5797 154.1 85.565 154.101 85.5503C154.103 85.5167 154.101 85.4831 154.096 85.45C154.089 85.4101 154.072 85.3725 154.047 85.3407C154.015 85.3036 153.971 85.2785 153.923 85.2698C153.9 85.2632 153.876 85.2617 153.853 85.2653C153.829 85.269 153.807 85.2777 153.787 85.291C153.752 85.3163 153.724 85.3503 153.706 85.3896C153.69 85.4243 153.678 85.4607 153.671 85.4981C153.667 85.5151 153.664 85.5322 153.663 85.5495L152.766 108.899L152.476 108.921L153.393 85.384C153.396 85.3691 153.397 85.3541 153.398 85.3391C153.4 85.3053 153.399 85.2713 153.393 85.238C153.386 85.1975 153.369 85.1594 153.344 85.1271C153.312 85.089 153.268 85.0633 153.219 85.0546C153.196 85.0484 153.172 85.0473 153.149 85.0512C153.126 85.0552 153.104 85.0641 153.084 85.0773C153.049 85.1027 153.021 85.1367 153.003 85.176C152.987 85.2104 152.975 85.2465 152.967 85.2836C152.965 85.292 152.963 85.3003 152.962 85.3088C152.96 85.3172 152.959 85.3257 152.958 85.3342L151.91 108.962L151.555 108.989L152.722 85.3856C152.723 85.3754 152.725 85.3651 152.725 85.3548C152.726 85.3504 152.726 85.346 152.726 85.3416C152.728 85.308 152.726 85.2743 152.72 85.2412C152.713 85.2013 152.696 85.1638 152.671 85.132C152.64 85.0944 152.596 85.0688 152.548 85.0594C152.525 85.0532 152.501 85.052 152.477 85.0557C152.454 85.0595 152.431 85.0683 152.412 85.0814C152.376 85.1063 152.348 85.14 152.33 85.1793C152.314 85.2134 152.302 85.2492 152.293 85.2861C152.291 85.2937 152.289 85.3014 152.288 85.3092C152.286 85.3182 152.284 85.3274 152.284 85.3366L150.987 109.03L150.626 109.057L152.006 85.6098C152.007 85.6034 152.008 85.597 152.009 85.5905C152.01 85.5823 152.011 85.574 152.011 85.5658C152.014 85.532 152.012 85.4981 152.007 85.4647C152 85.4245 151.983 85.3866 151.958 85.3546C151.927 85.3168 151.883 85.2912 151.835 85.282C151.812 85.2754 151.788 85.274 151.764 85.2778C151.741 85.2816 151.718 85.2905 151.698 85.304C151.663 85.3289 151.635 85.3626 151.617 85.4019C151.601 85.4362 151.588 85.4724 151.581 85.5095C151.577 85.5258 151.572 85.543 151.572 85.5601L150.061 109.094L149.75 109.12Z" fill="#FAFBFC"/> -<path d="M186.176 106.474L186.512 79.3379C186.512 79.321 186.512 79.3039 186.512 79.2865C186.513 79.2484 186.509 79.2103 186.501 79.1732C186.49 79.127 186.469 79.0842 186.438 79.0484C186.398 79.0056 186.345 78.9769 186.287 78.9669C186.259 78.96 186.231 78.9587 186.203 78.9631C186.175 78.9674 186.148 78.9773 186.124 78.9921C186.084 79.0204 186.052 79.0591 186.033 79.1038C186.014 79.1429 186.001 79.184 185.992 79.2262C185.99 79.2358 185.988 79.2455 185.987 79.2552C185.985 79.2648 185.984 79.2744 185.984 79.2841L185.494 106.524L185.06 106.557L185.656 79.5931C185.659 79.5766 185.661 79.56 185.661 79.5433C185.662 79.505 185.659 79.4666 185.65 79.4292C185.64 79.3833 185.618 79.3408 185.587 79.3053C185.547 79.2621 185.494 79.2334 185.435 79.2237C185.408 79.2164 185.379 79.2149 185.351 79.2192C185.323 79.2236 185.296 79.2337 185.272 79.249C185.233 79.2771 185.202 79.3158 185.183 79.3607C185.165 79.3998 185.152 79.4409 185.144 79.483C185.142 79.4936 185.14 79.5042 185.139 79.5149C185.138 79.5235 185.137 79.5322 185.136 79.5409L184.385 106.607L184.007 106.634L184.827 79.9559C184.832 79.94 184.832 79.9233 184.832 79.9074V79.9062C184.834 79.8679 184.831 79.8295 184.822 79.792C184.813 79.7458 184.791 79.7029 184.76 79.6673C184.72 79.6242 184.667 79.5955 184.609 79.5857C184.581 79.5789 184.553 79.5776 184.525 79.5819C184.497 79.5863 184.47 79.5962 184.446 79.611C184.406 79.6388 184.374 79.6772 184.354 79.7219C184.336 79.761 184.323 79.802 184.315 79.8442C184.311 79.8631 184.309 79.8821 184.307 79.9013L183.334 106.68L182.953 106.711C182.986 105.953 183.057 104.116 183.149 101.722C183.226 99.7253 183.324 97.3432 183.425 94.8772C183.445 94.3862 183.466 93.892 183.486 93.3967C183.608 90.414 183.735 87.4004 183.845 84.8784C183.955 82.3564 184.049 80.3285 184.107 79.3207C184.52 78.9888 185.008 78.7647 185.529 78.6684C185.99 78.5836 186.462 78.5723 186.926 78.635C187.286 78.6815 187.641 78.7607 187.986 78.8715C188.13 78.9164 188.271 78.9686 188.409 79.028L188.642 106.295L188.316 106.319L188.169 79.5743C188.172 79.5576 188.174 79.5407 188.174 79.5238C188.176 79.4852 188.173 79.4466 188.165 79.4088C188.155 79.3621 188.134 79.3186 188.103 79.2824C188.063 79.2393 188.01 79.2106 187.952 79.2009C187.924 79.1943 187.895 79.1935 187.867 79.1984C187.839 79.2033 187.812 79.2138 187.789 79.2294C187.749 79.2585 187.718 79.2977 187.698 79.3428C187.68 79.3821 187.667 79.4235 187.659 79.4659C187.655 79.485 187.652 79.5043 187.651 79.5238L187.638 106.367L187.286 106.392L187.33 79.3338C187.331 79.3172 187.331 79.3006 187.33 79.2841C187.331 79.2456 187.327 79.2072 187.318 79.1699C187.308 79.1235 187.286 79.0804 187.255 79.0443C187.214 79.0013 187.161 78.9727 187.103 78.9628C187.076 78.9558 187.047 78.9545 187.019 78.959C186.991 78.9635 186.964 78.9737 186.94 78.9889C186.9 79.0172 186.869 79.0559 186.849 79.1006C186.832 79.1397 186.819 79.1807 186.811 79.2229C186.807 79.242 186.804 79.2613 186.803 79.2808L186.609 106.444L186.176 106.474Z" fill="#FAFBFC"/> -<path d="M204.964 105.111L204.834 76.0666L204.834 76.0706C204.838 76.0551 204.841 76.0392 204.843 76.0233C204.844 75.9824 204.839 75.9416 204.83 75.9018C204.818 75.8526 204.794 75.807 204.761 75.769C204.718 75.7224 204.66 75.6914 204.598 75.6809C204.569 75.6735 204.539 75.6722 204.509 75.6769C204.48 75.6817 204.452 75.6925 204.427 75.7086C204.385 75.7389 204.353 75.7801 204.333 75.8276C204.314 75.8693 204.301 75.9132 204.293 75.9581C204.289 75.9783 204.286 75.9987 204.285 76.0192L204.251 105.174L203.791 105.207L203.937 76.3421C203.942 76.3242 203.941 76.3071 203.941 76.2892C203.943 76.2486 203.939 76.208 203.93 76.1685C203.919 76.1193 203.896 76.0736 203.862 76.0356C203.819 75.9891 203.762 75.9579 203.699 75.9467C203.67 75.9394 203.64 75.9383 203.61 75.9433C203.58 75.9484 203.552 75.9595 203.526 75.976C203.485 76.0067 203.453 76.0482 203.433 76.0959C203.415 76.1377 203.403 76.1815 203.395 76.2264C203.388 76.2467 203.388 76.2671 203.388 76.2875L203.076 105.254L202.674 105.285L203.071 76.7287V76.6757C203.071 76.6347 203.067 76.5939 203.057 76.5541C203.045 76.5049 203.021 76.4594 202.988 76.4213C202.944 76.3754 202.887 76.3448 202.825 76.334C202.796 76.3268 202.765 76.3256 202.736 76.3305C202.706 76.3354 202.678 76.3463 202.653 76.3625C202.612 76.3929 202.579 76.4341 202.559 76.4816C202.541 76.523 202.528 76.5665 202.52 76.6112C202.516 76.6314 202.513 76.6518 202.511 76.6724L201.956 105.34L201.556 105.366C201.565 104.881 201.605 103.087 201.662 100.596C201.718 98.1048 201.791 94.9199 201.87 91.6534C201.948 88.387 202.03 85.0423 202.104 82.2365C202.179 79.4308 202.245 77.164 202.29 76.0568C202.722 75.7043 203.236 75.466 203.784 75.3637C204.272 75.2739 204.771 75.2618 205.263 75.3278C205.646 75.3769 206.024 75.4607 206.393 75.5781C206.546 75.6247 206.696 75.6791 206.844 75.7412L207.522 102.425C207.562 100.686 207.612 98.5247 207.667 96.196C207.722 93.8672 207.781 91.3868 207.84 89.0205C207.894 86.8455 207.949 84.7697 207.996 82.9989L208.009 82.5391C208.058 80.6727 208.106 79.196 208.14 78.3806C208.552 78.0448 209.041 77.818 209.564 77.721C210.029 77.6354 210.505 77.6239 210.973 77.6867C211.339 77.7333 211.7 77.813 212.051 77.9248C212.197 77.9699 212.341 78.0224 212.481 78.0822L213.195 106.441H212.861L212.254 78.6366V78.5861C212.254 78.547 212.249 78.5082 212.24 78.4703C212.228 78.4234 212.206 78.38 212.174 78.3439C212.132 78.3008 212.078 78.2722 212.02 78.2624C211.992 78.2548 211.963 78.2532 211.935 78.2576C211.907 78.2619 211.88 78.2722 211.856 78.2877C211.817 78.3163 211.786 78.3553 211.768 78.4002C211.75 78.4399 211.738 78.4815 211.73 78.5241C211.728 78.5332 211.727 78.5423 211.725 78.5515C211.724 78.5616 211.723 78.5718 211.722 78.582L212.169 106.399L211.816 106.334L211.387 78.392V78.3415C211.387 78.3025 211.383 78.2636 211.374 78.2257C211.362 78.1789 211.34 78.1355 211.308 78.0993C211.266 78.0562 211.212 78.0276 211.154 78.0178C211.126 78.0108 211.097 78.0095 211.069 78.014C211.041 78.0185 211.014 78.0286 210.991 78.0439C210.95 78.0724 210.919 78.1117 210.901 78.1572C210.884 78.1969 210.871 78.2386 210.864 78.2811C210.861 78.2999 210.857 78.3195 210.857 78.339L211.119 106.206L210.682 106.125L210.566 78.3969V78.3463C210.566 78.3076 210.562 78.269 210.553 78.2314C210.541 78.1845 210.519 78.1411 210.487 78.105C210.445 78.0619 210.391 78.0333 210.333 78.0235C210.305 78.0166 210.276 78.0155 210.248 78.0202C210.22 78.0248 210.193 78.0351 210.169 78.0504C210.129 78.079 210.098 78.1182 210.08 78.1637C210.063 78.2034 210.05 78.245 210.042 78.2877C210.037 78.3072 210.035 78.3268 210.035 78.3463L210.006 105.997L209.569 105.915L209.716 78.6595C209.719 78.6425 209.72 78.6253 209.72 78.6081C209.722 78.5686 209.718 78.5291 209.709 78.4907C209.698 78.4436 209.676 78.3999 209.644 78.3635C209.604 78.3197 209.549 78.291 209.49 78.2819C209.463 78.275 209.434 78.2737 209.406 78.2781C209.378 78.2824 209.351 78.2923 209.327 78.3072C209.287 78.3356 209.256 78.375 209.238 78.4205C209.221 78.4604 209.209 78.5024 209.202 78.5453C209.199 78.5647 209.197 78.5843 209.196 78.604L208.892 105.789L208.517 105.719L208.895 79.0239V78.9726C208.896 78.9333 208.891 78.894 208.881 78.856C208.87 78.8086 208.847 78.7649 208.814 78.7288C208.772 78.6856 208.717 78.6571 208.658 78.6472C208.63 78.6404 208.601 78.6392 208.573 78.6439C208.545 78.6485 208.519 78.6588 208.495 78.6742C208.455 78.7029 208.424 78.7421 208.405 78.7875C208.387 78.827 208.374 78.8687 208.367 78.9114C208.364 78.923 208.362 78.9346 208.361 78.9464C208.36 78.954 208.359 78.9617 208.358 78.9693L207.837 105.593L207.461 105.525V105.486H207.26L206.608 76.316V76.263C206.609 76.2224 206.604 76.1818 206.594 76.1424C206.582 76.0934 206.558 76.048 206.525 76.0103C206.481 75.9647 206.424 75.9344 206.362 75.9238C206.333 75.9162 206.303 75.9146 206.273 75.9193C206.244 75.9239 206.215 75.9346 206.19 75.9508C206.149 75.981 206.116 76.0222 206.097 76.0698C206.078 76.1115 206.065 76.1554 206.057 76.2003C206.054 76.2205 206.051 76.2409 206.049 76.2614L206.522 105.349L206.154 105.28L205.699 76.06V76.007C205.699 75.9664 205.695 75.9258 205.685 75.8864C205.673 75.8372 205.649 75.7916 205.615 75.7534C205.572 75.707 205.515 75.6758 205.452 75.6645C205.423 75.6574 205.393 75.6562 205.363 75.6611C205.333 75.666 205.305 75.6769 205.28 75.6931C205.238 75.7234 205.206 75.7646 205.187 75.8122C205.169 75.8537 205.156 75.8972 205.149 75.9418C205.146 75.962 205.144 75.9825 205.143 76.003L205.421 105.146L205.159 105.097L204.964 105.111Z" fill="#FAFBFC"/> -<path d="M193.606 105.931L194.216 78.2893C194.221 78.2699 194.225 78.2504 194.228 78.2306C194.229 78.1908 194.225 78.1511 194.216 78.1123C194.205 78.0644 194.182 78.0199 194.15 77.9827C194.109 77.9394 194.054 77.9108 193.995 77.9012C193.966 77.8939 193.936 77.8926 193.907 77.8972C193.878 77.9018 193.851 77.9123 193.826 77.9281C193.785 77.9574 193.753 77.9975 193.733 78.0439C193.715 78.0844 193.702 78.1267 193.694 78.1702C193.69 78.1899 193.687 78.2097 193.686 78.2297L192.917 105.981L192.528 106.011C192.546 105.39 192.601 103.575 192.677 101.129C192.753 98.6829 192.85 95.6146 192.95 92.4859C193.05 89.3573 193.156 86.174 193.249 83.5061C193.341 80.8382 193.422 78.6888 193.474 77.6288C193.897 77.2869 194.398 77.0559 194.932 76.9569C195.407 76.8699 195.893 76.8581 196.372 76.9219C196.745 76.9698 197.112 77.0516 197.471 77.1665C197.619 77.2131 197.766 77.2675 197.909 77.3296L198.398 105.587L198.057 105.614L197.667 77.8955C197.668 77.8784 197.668 77.8612 197.667 77.8441C197.668 77.8046 197.664 77.7652 197.655 77.7267C197.644 77.6789 197.621 77.6346 197.588 77.5978C197.545 77.5545 197.49 77.5259 197.43 77.5163C197.402 77.5095 197.374 77.5084 197.346 77.513C197.318 77.5176 197.291 77.5279 197.267 77.5432C197.226 77.5726 197.194 77.6126 197.175 77.659C197.157 77.6995 197.144 77.7419 197.136 77.7854C197.132 77.805 197.129 77.8249 197.127 77.8449L197.358 105.659L197.003 105.689L196.792 77.6476V77.5954C196.793 77.5554 196.789 77.5154 196.78 77.4764C196.769 77.4285 196.747 77.384 196.715 77.3467C196.673 77.3035 196.619 77.2748 196.56 77.2652C196.531 77.2579 196.502 77.2566 196.473 77.2612C196.444 77.2658 196.416 77.2764 196.391 77.2921C196.35 77.3207 196.318 77.3603 196.298 77.4062C196.28 77.4461 196.267 77.488 196.259 77.531C196.255 77.5503 196.252 77.57 196.251 77.5897L196.285 105.733L195.839 105.764L195.944 77.646C195.946 77.6287 195.947 77.6112 195.948 77.5938C195.948 77.554 195.944 77.5143 195.935 77.4755C195.925 77.4274 195.902 77.3827 195.869 77.3459C195.827 77.3027 195.772 77.2741 195.713 77.2644C195.684 77.2571 195.655 77.2557 195.626 77.2604C195.597 77.265 195.569 77.2755 195.545 77.2912C195.504 77.3204 195.472 77.3606 195.453 77.407C195.436 77.4474 195.423 77.4899 195.415 77.5334C195.41 77.5459 195.409 77.5587 195.408 77.5714C195.408 77.5786 195.408 77.5859 195.408 77.593L195.139 105.819L194.693 105.848L195.066 77.9118C195.067 77.8944 195.067 77.8769 195.066 77.8596C195.067 77.8195 195.063 77.7796 195.054 77.7405C195.043 77.6926 195.021 77.6481 194.989 77.6109C194.947 77.567 194.892 77.5383 194.832 77.5294C194.805 77.5225 194.776 77.5212 194.748 77.5255C194.72 77.5299 194.693 77.5397 194.669 77.5546C194.628 77.5838 194.597 77.624 194.578 77.6704C194.56 77.7108 194.547 77.7533 194.539 77.7968C194.535 77.8165 194.533 77.8364 194.531 77.8563L193.998 105.906L193.606 105.931Z" fill="#FAFBFC"/> -<path d="M142.944 85.2144L142.998 84.6126L147.444 83.7866L149.913 85.1124V85.7028L147.381 84.3419L142.944 85.2144Z" fill="#FAFBFC"/> -<path d="M143.767 109.553L145.538 86.9919C145.539 86.977 145.54 86.962 145.54 86.947C145.542 86.9144 145.54 86.8815 145.535 86.8492C145.528 86.8105 145.512 86.7741 145.488 86.7432C145.458 86.7074 145.416 86.6835 145.37 86.6755C145.348 86.6698 145.325 86.6687 145.302 86.6725C145.279 86.6763 145.258 86.6848 145.239 86.6975C145.206 86.7221 145.179 86.7546 145.162 86.7921C145.147 86.8253 145.135 86.86 145.126 86.8957C145.122 86.9128 145.117 86.9299 145.117 86.947L143.224 109.598L142.913 109.618C142.976 108.896 143.115 107.301 143.293 105.259C143.472 103.217 143.689 100.732 143.91 98.2279C144.13 95.7238 144.354 93.2092 144.544 91.099C144.734 88.9888 144.891 87.2976 144.979 86.4513C145.316 86.1732 145.717 85.9833 146.146 85.8985C146.517 85.8276 146.896 85.8185 147.269 85.8715C147.557 85.9108 147.839 85.9782 148.114 86.0729C148.227 86.1111 148.339 86.1555 148.447 86.2059L147.5 109.281L147.237 109.302L148.24 86.6731C148.243 86.659 148.244 86.6449 148.245 86.6307C148.247 86.5983 148.246 86.5657 148.24 86.5336C148.234 86.4949 148.218 86.4583 148.195 86.4268C148.165 86.3903 148.123 86.3655 148.076 86.3567C148.054 86.3506 148.031 86.3493 148.008 86.3529C147.985 86.3566 147.963 86.3651 147.943 86.3779C147.908 86.4015 147.88 86.4342 147.862 86.4725C147.846 86.5059 147.834 86.5409 147.826 86.5768C147.822 86.593 147.819 86.6093 147.817 86.6258L146.681 109.337L146.404 109.359L147.554 86.4643C147.556 86.4503 147.558 86.4361 147.559 86.4219C147.564 86.3897 147.564 86.3571 147.559 86.3249C147.554 86.2863 147.538 86.2498 147.515 86.2189C147.485 86.1825 147.443 86.1579 147.397 86.1496C147.375 86.1437 147.351 86.1426 147.329 86.1464C147.306 86.1502 147.284 86.1588 147.265 86.1716C147.232 86.1959 147.205 86.2285 147.189 86.2662C147.174 86.2992 147.162 86.334 147.155 86.3697C147.151 86.3859 147.148 86.4022 147.147 86.4187L145.856 109.402L145.509 109.426L146.913 86.4709C146.916 86.4569 146.917 86.4427 146.919 86.4285C146.923 86.3963 146.923 86.3636 146.919 86.3314C146.912 86.293 146.896 86.2566 146.873 86.2254C146.843 86.189 146.801 86.1644 146.755 86.1561C146.733 86.1499 146.71 86.1485 146.687 86.152C146.664 86.1555 146.642 86.1639 146.623 86.1765C146.588 86.2004 146.559 86.233 146.541 86.2711C146.525 86.3043 146.512 86.3394 146.504 86.3755C146.502 86.384 146.5 86.3927 146.499 86.4013C146.497 86.409 146.496 86.4167 146.495 86.4244L144.966 109.467L144.617 109.491L146.218 86.6861C146.221 86.6721 146.223 86.6579 146.224 86.6437C146.227 86.6113 146.225 86.5787 146.22 86.5467C146.213 86.5082 146.197 86.4719 146.174 86.4407C146.144 86.4043 146.103 86.3797 146.057 86.3714C146.034 86.365 146.011 86.3635 145.988 86.3669C145.965 86.3702 145.943 86.3784 145.924 86.391C145.89 86.4148 145.863 86.4472 145.846 86.4847C145.831 86.5179 145.819 86.5526 145.81 86.5883C145.806 86.6046 145.801 86.6209 145.801 86.6372L144.072 109.532L143.767 109.553Z" fill="#FAFBFC"/> -<path d="M200.383 73.7394L205.809 72.708L208.968 74.3583L209.02 75.0995L205.772 73.3986L200.373 74.4937L200.383 73.7394Z" fill="#FAFBFC"/> -<path d="M225.935 82.8114L222.993 81.3625L220.961 81.7955L221.833 80.9996L223.016 80.764L225.87 82.1673L225.935 82.8114Z" fill="#FAFBFC"/> -<path d="M234.695 88.2892L235.434 87.5977L236.453 87.3955L238.963 88.6137L239.033 89.1706L236.453 87.9174L234.695 88.2892Z" fill="#FAFBFC"/> -<path d="M230.764 85.1997L227.933 83.8094L225.978 84.222L226.81 83.4556L227.951 83.2321L230.702 84.5808L230.764 85.1997Z" fill="#FAFBFC"/> -<path d="M230.482 86.3804L231.276 85.6465L232.354 85.4353L234.98 86.722L235.036 87.3115L232.345 85.9857L230.482 86.3804Z" fill="#FAFBFC"/> -<path d="M238.541 90.1311L239.242 89.4788L240.214 89.2848L242.595 90.4409L242.657 90.9726L240.211 89.7788L238.541 90.1311Z" fill="#FAFBFC"/> -<path d="M242.566 91.0859L243.475 90.9025L245.71 91.9878L245.776 92.4843L243.474 91.3681L241.914 91.6991L242.566 91.0859Z" fill="#FAFBFC"/> -<path d="M245.481 94.491L247.074 112.906L246.757 112.848L245.268 94.7079C245.269 94.6965 245.269 94.685 245.268 94.6736C245.266 94.6459 245.261 94.6184 245.252 94.5921C245.24 94.5551 245.218 94.5222 245.188 94.4973C245.158 94.4723 245.122 94.4563 245.083 94.451C245.064 94.4458 245.044 94.4447 245.025 94.4478C245.005 94.4509 244.987 94.4581 244.97 94.469C244.944 94.4898 244.924 94.5183 244.915 94.5505C244.905 94.5769 244.899 94.6042 244.897 94.632C244.896 94.6387 244.896 94.6454 244.896 94.6522C244.896 94.659 244.896 94.6659 244.897 94.6728L245.732 105.611L244.656 94.248C244.932 94.1281 245.227 94.058 245.528 94.0409C245.8 94.0244 246.073 94.037 246.343 94.0784C246.548 94.1092 246.75 94.1537 246.949 94.2113C247.098 94.2586 247.186 94.2928 247.186 94.2928L249.351 113.33L249.112 113.285L247.059 94.6736C247.06 94.662 247.06 94.6502 247.059 94.6386C247.057 94.6108 247.051 94.5834 247.042 94.557C247.031 94.5245 247.012 94.495 246.987 94.4706C246.956 94.4413 246.917 94.4221 246.875 94.4152C246.855 94.4104 246.835 94.4096 246.816 94.413C246.796 94.4163 246.777 94.4237 246.761 94.4347C246.734 94.4552 246.714 94.4837 246.704 94.5162C246.691 94.5566 246.684 94.5992 246.685 94.6418L248.62 113.192L248.368 113.145L246.435 94.5114C246.436 94.4997 246.436 94.488 246.435 94.4763C246.434 94.4486 246.43 94.421 246.421 94.3947C246.409 94.3576 246.387 94.3245 246.357 94.2993C246.327 94.2742 246.291 94.2581 246.253 94.2529C246.233 94.2481 246.213 94.2474 246.193 94.2508C246.173 94.2541 246.154 94.2615 246.138 94.2725C246.111 94.2932 246.091 94.3216 246.082 94.354C246.067 94.394 246.06 94.4363 246.061 94.4788L247.873 113.055L247.563 112.996L245.86 94.5228C245.861 94.5111 245.861 94.4994 245.86 94.4877C245.858 94.4599 245.853 94.4325 245.843 94.4062C245.833 94.3736 245.814 94.3439 245.789 94.3197C245.758 94.2902 245.719 94.2709 245.676 94.2643C245.657 94.2594 245.637 94.2585 245.617 94.2617C245.597 94.2649 245.579 94.2722 245.562 94.2831C245.535 94.3035 245.514 94.332 245.504 94.3646C245.489 94.4051 245.482 94.4479 245.481 94.491Z" fill="#FAFBFC"/> -<path d="M220.469 80.4411L217.487 78.8918L214.643 79.474L215.637 78.6244L217.507 78.2697L220.407 79.7692L220.469 80.4411Z" fill="#FAFBFC"/> -<path d="M245.384 93.0429L245.885 92.4721L246.327 92.3824L248.541 93.4367L248.623 93.9259L246.34 92.8382L245.384 93.0429Z" fill="#FAFBFC"/> -<path d="M234.039 90.3349L234.638 107.199C234.638 107.199 234.59 106.185 234.516 104.643C234.442 103.101 234.344 101.041 234.245 98.943C234.145 96.845 234.046 94.7128 233.971 93.0364C233.896 91.3599 233.842 90.1409 233.842 89.871C234.169 89.599 234.559 89.4141 234.977 89.3337C235.353 89.2619 235.738 89.2481 236.118 89.2929C236.418 89.3262 236.714 89.3859 237.004 89.4715C237.226 89.5367 237.359 89.5921 237.359 89.5921L238.952 111.391L238.677 111.34L237.19 90.0325C237.19 90.0233 237.19 90.0141 237.19 90.0049C237.19 90.0008 237.19 89.9966 237.19 89.9925C237.189 89.9616 237.184 89.9309 237.176 89.9012C237.164 89.8588 237.141 89.8208 237.108 89.7918C237.075 89.7628 237.034 89.7441 236.991 89.7381C236.968 89.732 236.945 89.7306 236.923 89.7342C236.9 89.7377 236.878 89.746 236.859 89.7585C236.828 89.7816 236.804 89.813 236.79 89.849C236.772 89.8954 236.762 89.9445 236.761 89.9941L238.111 111.237L237.826 111.181L236.48 89.8465C236.481 89.8332 236.481 89.8199 236.48 89.8066C236.479 89.7756 236.474 89.7449 236.465 89.7152C236.453 89.6779 236.433 89.6438 236.406 89.6158C236.37 89.5819 236.326 89.5594 236.277 89.5514C236.255 89.5461 236.231 89.5453 236.209 89.5493C236.186 89.5532 236.164 89.5617 236.144 89.5742C236.113 89.5974 236.089 89.6291 236.076 89.6655C236.058 89.7119 236.048 89.761 236.046 89.8106L237.26 111.075L236.906 111.008L235.815 89.8588C235.815 89.8541 235.815 89.8494 235.816 89.8447C235.816 89.8361 235.815 89.8274 235.815 89.8188C235.814 89.7878 235.809 89.7571 235.799 89.7275C235.787 89.6846 235.762 89.6464 235.728 89.6174C235.694 89.5884 235.653 89.57 235.609 89.5644C235.587 89.5589 235.564 89.558 235.541 89.5618C235.519 89.5656 235.498 89.574 235.479 89.5864C235.448 89.6095 235.425 89.6409 235.411 89.6769C235.398 89.7086 235.39 89.7417 235.385 89.7756C235.383 89.791 235.382 89.8065 235.381 89.8221L236.345 110.905L235.991 110.838L235.123 90.074C235.123 90.0607 235.123 90.0474 235.123 90.0341C235.122 90.0029 235.117 89.9719 235.108 89.9419C235.096 89.8997 235.071 89.8619 235.038 89.833C235.005 89.8041 234.964 89.7853 234.921 89.7788C234.898 89.7736 234.875 89.7729 234.852 89.7769C234.83 89.7808 234.808 89.7892 234.789 89.8017C234.758 89.8245 234.735 89.8556 234.721 89.8914C234.708 89.9225 234.699 89.9551 234.695 89.9884C234.694 90.0036 234.694 90.0189 234.695 90.0341L235.439 110.737L235.132 110.681L234.467 90.3733C234.468 90.36 234.468 90.3467 234.467 90.3334C234.466 90.3021 234.461 90.2711 234.452 90.2412C234.439 90.1986 234.414 90.1605 234.381 90.1315C234.347 90.1026 234.306 90.084 234.262 90.0781C234.24 90.0727 234.217 90.0719 234.194 90.0759C234.172 90.0798 234.151 90.0883 234.132 90.1009C234.101 90.124 234.078 90.1554 234.064 90.1915C234.052 90.2229 234.043 90.2558 234.039 90.2893C234.039 90.2977 234.038 90.3061 234.038 90.3145C234.039 90.3213 234.039 90.3281 234.039 90.3349Z" fill="#FAFBFC"/> -<path d="M214.554 77.4772L211.46 75.8578L209.138 76.3291L210.002 75.4819L211.49 75.2014L214.507 76.7727L214.554 77.4772Z" fill="#FAFBFC"/> -<path d="M241.935 93.2557L242.832 111.683L242.624 109.323L242.151 102.859L241.732 93.5549C241.733 93.5433 241.733 93.5315 241.732 93.5198C241.731 93.4921 241.726 93.4646 241.718 93.4383C241.706 93.4006 241.684 93.3668 241.654 93.3411C241.624 93.3154 241.588 93.2988 241.549 93.2932H241.497L241.477 93.2989L241.457 93.3062L241.43 92.9434C241.722 92.7681 242.049 92.657 242.388 92.6172C242.696 92.5798 243.007 92.582 243.315 92.6237C243.551 92.6547 243.785 92.7037 244.014 92.7705C244.188 92.8211 244.292 92.8627 244.292 92.8627L245.997 112.707L245.752 112.661L244.149 93.2548C244.15 93.2429 244.15 93.2309 244.149 93.219C244.147 93.1913 244.142 93.1639 244.134 93.1374C244.124 93.1041 244.106 93.0736 244.081 93.0485C244.05 93.0182 244.01 92.9983 243.966 92.9915C243.947 92.9865 243.926 92.9857 243.906 92.989C243.886 92.9924 243.867 92.9999 243.851 93.0111C243.824 93.0321 243.803 93.0604 243.792 93.0926C243.779 93.1327 243.773 93.1745 243.774 93.2165L245.253 112.559L244.996 112.513L243.522 93.0853C243.523 93.0733 243.523 93.0613 243.522 93.0494C243.52 93.0217 243.515 92.9943 243.507 92.9678C243.497 92.9345 243.479 92.904 243.454 92.8789C243.423 92.8482 243.382 92.828 243.339 92.8211C243.318 92.8162 243.298 92.8155 243.277 92.819C243.257 92.8225 243.238 92.8302 243.22 92.8415C243.193 92.8619 243.172 92.8904 243.161 92.923C243.145 92.9642 243.137 93.0078 243.137 93.0518L244.491 112.42L244.169 112.361L242.927 93.0983C242.927 93.0926 242.927 93.0868 242.927 93.0811C242.927 93.0749 242.927 93.0686 242.927 93.0624C242.925 93.0348 242.92 93.0073 242.912 92.9809C242.901 92.9475 242.883 92.9171 242.859 92.892C242.827 92.8617 242.787 92.8417 242.744 92.8349C242.724 92.83 242.704 92.8291 242.683 92.8325C242.663 92.8359 242.644 92.8434 242.627 92.8545C242.599 92.875 242.578 92.9034 242.566 92.936C242.555 92.964 242.548 92.9934 242.544 93.0233C242.543 93.0368 242.543 93.0505 242.544 93.0641L243.673 112.268L243.356 112.21L242.319 93.2883C242.319 93.2763 242.319 93.2643 242.319 93.2524C242.318 93.2247 242.313 93.1973 242.305 93.1709C242.294 93.1333 242.272 93.0997 242.242 93.0742C242.213 93.0487 242.176 93.0324 242.137 93.0273C242.118 93.0225 242.097 93.0216 242.077 93.0249C242.057 93.0281 242.038 93.0353 242.021 93.0461C241.993 93.0666 241.972 93.0951 241.96 93.1277C241.945 93.1686 241.936 93.2119 241.935 93.2557Z" fill="#FAFBFC"/> -<path d="M251.745 95.4213L249.5 94.3614L248.567 94.5538L249.045 94.0001L249.472 93.9186L251.659 94.9508L251.745 95.4213Z" fill="#FAFBFC"/> -<path d="M215.155 106.957L215.073 81.9145C215.074 81.8993 215.073 81.884 215.072 81.8688C215.073 81.8314 215.068 81.7941 215.058 81.7579C215.047 81.713 215.025 81.6716 214.994 81.6372C214.955 81.5947 214.903 81.5661 214.846 81.5557C214.819 81.5488 214.791 81.5475 214.764 81.5518C214.737 81.5562 214.711 81.5661 214.688 81.581C214.651 81.6085 214.623 81.6458 214.607 81.6886C214.591 81.7262 214.579 81.7656 214.573 81.8061C214.569 81.8244 214.567 81.8429 214.566 81.8615L214.504 106.838L214.144 106.772C214.146 106.359 214.149 105.859 214.152 105.288C214.159 104.171 214.166 102.782 214.176 101.236L214.183 100.2C214.196 98.1211 214.21 95.8232 214.227 93.5533C214.246 90.8992 214.267 88.2867 214.288 86.1105C214.309 83.9342 214.331 82.1966 214.352 81.2997C214.742 80.9792 215.207 80.7631 215.703 80.6719C216.148 80.5905 216.602 80.5795 217.05 80.6392C217.4 80.6839 217.746 80.76 218.084 80.8667C218.224 80.9099 218.361 80.9603 218.496 81.0175L219.632 107.794L219.314 107.735L218.286 81.5508V81.5027C218.286 81.4653 218.281 81.428 218.271 81.3918C218.259 81.3467 218.237 81.305 218.206 81.2703C218.166 81.228 218.114 81.1995 218.057 81.1888C218.031 81.1821 218.004 81.1808 217.977 81.1852C217.95 81.1895 217.925 81.1994 217.903 81.2141C217.866 81.2416 217.837 81.2789 217.821 81.3217C217.805 81.3597 217.794 81.3993 217.788 81.4399C217.784 81.4582 217.782 81.4768 217.781 81.4954L218.65 107.621L218.313 107.558L217.456 81.3242V81.276C217.456 81.2386 217.451 81.2013 217.441 81.1652C217.429 81.1202 217.407 81.0788 217.376 81.0445C217.336 81.0022 217.284 80.9736 217.227 80.9629C217.2 80.9563 217.173 80.9551 217.146 80.9594C217.119 80.9638 217.094 80.9736 217.071 80.9882C217.034 81.0157 217.006 81.053 216.989 81.0958C216.973 81.1337 216.962 81.1734 216.956 81.2141C216.953 81.2324 216.951 81.2509 216.95 81.2695L217.649 107.433L217.231 107.351L216.672 81.3233V81.2752C216.672 81.2381 216.667 81.201 216.657 81.1652C216.646 81.1205 216.623 81.0794 216.592 81.0453C216.553 81.0028 216.501 80.9742 216.445 80.9637C216.418 80.9566 216.391 80.9549 216.364 80.959C216.337 80.9631 216.311 80.9728 216.288 80.9874C216.251 81.0149 216.223 81.0522 216.207 81.095C216.184 81.1506 216.171 81.2096 216.167 81.2695L216.575 107.231L216.156 107.149L215.855 81.5696V81.5206C215.856 81.4833 215.851 81.446 215.842 81.4098C215.831 81.3647 215.809 81.3229 215.779 81.2883C215.739 81.2458 215.687 81.2172 215.63 81.2067C215.604 81.1998 215.576 81.1985 215.549 81.2029C215.522 81.2072 215.496 81.2171 215.474 81.232C215.437 81.2597 215.408 81.2973 215.392 81.3404C215.376 81.3783 215.364 81.418 215.358 81.4587C215.354 81.477 215.352 81.4955 215.351 81.5141L215.514 107.023L215.155 106.957Z" fill="#FAFBFC"/> -<path d="M239.235 111.365L239.238 111.444L239.241 111.447L239.235 111.365Z" fill="#FAFBFC"/> -<path d="M238.538 91.7929L239.235 111.365L238.721 104.318L238.328 92.1182C238.329 92.1054 238.329 92.0926 238.328 92.0799C238.326 92.0503 238.321 92.021 238.312 91.9926C238.302 91.957 238.282 91.9245 238.256 91.898C238.223 91.8656 238.18 91.8443 238.134 91.8369C238.113 91.8322 238.091 91.8318 238.069 91.8357C238.048 91.8396 238.027 91.8478 238.009 91.8597C237.98 91.8819 237.957 91.9118 237.944 91.9462C237.932 91.9762 237.924 92.0077 237.92 92.0399C237.919 92.0546 237.919 92.0693 237.92 92.084L238.001 94.3882L237.799 91.5972C238.109 91.3566 238.473 91.1951 238.86 91.1267C239.21 91.0656 239.567 91.0565 239.92 91.0998C240.195 91.1308 240.468 91.1854 240.735 91.2629C240.938 91.3224 241.061 91.3738 241.061 91.3738L242.571 112.066L242.311 112.014L240.904 91.7929C240.905 91.7804 240.905 91.7678 240.904 91.7553C240.903 91.7261 240.898 91.697 240.89 91.669C240.879 91.6287 240.856 91.5925 240.825 91.5649C240.794 91.5372 240.755 91.5193 240.714 91.5132C240.692 91.508 240.67 91.5072 240.648 91.5108C240.627 91.5145 240.606 91.5225 240.587 91.5344C240.558 91.5565 240.535 91.5865 240.522 91.6208C240.51 91.6509 240.502 91.6824 240.498 91.7146C240.497 91.7293 240.497 91.744 240.498 91.7586L241.771 111.92L241.496 111.867L240.225 91.6208C240.225 91.6083 240.225 91.5958 240.225 91.5833C240.224 91.5539 240.219 91.5249 240.21 91.4969C240.198 91.4566 240.175 91.4206 240.143 91.3931C240.112 91.3656 240.073 91.3479 240.031 91.342C240.01 91.3368 239.987 91.3361 239.965 91.3398C239.943 91.3436 239.923 91.3518 239.904 91.364C239.875 91.3847 239.853 91.4128 239.839 91.4455C239.827 91.4753 239.818 91.5065 239.814 91.5385C239.814 91.5529 239.814 91.5673 239.814 91.5817L240.962 111.767L240.625 111.704L239.595 91.6298C239.596 91.617 239.596 91.6042 239.595 91.5915C239.594 91.5618 239.589 91.5325 239.58 91.5042C239.569 91.4637 239.545 91.4275 239.513 91.4001C239.481 91.3727 239.442 91.3553 239.4 91.3501C239.379 91.3449 239.357 91.344 239.336 91.3475C239.315 91.351 239.294 91.3588 239.276 91.3705C239.247 91.391 239.225 91.4193 239.212 91.452C239.195 91.496 239.185 91.5426 239.183 91.5898L240.094 111.599L239.76 111.537L238.944 91.8288C238.945 91.816 238.945 91.8032 238.944 91.7904C238.943 91.7609 238.939 91.7316 238.931 91.7032C238.919 91.6626 238.896 91.6261 238.865 91.5984C238.833 91.5707 238.794 91.553 238.752 91.5474C238.731 91.5424 238.708 91.5416 238.687 91.5453C238.665 91.5489 238.645 91.5568 238.626 91.5686C238.597 91.5908 238.575 91.6208 238.562 91.6551C238.55 91.6853 238.543 91.7168 238.538 91.7488C238.537 91.7635 238.537 91.7782 238.538 91.7929Z" fill="#FAFBFC"/> -<path d="M252.83 113.975L252.596 113.931L250.234 96.1495C250.235 96.1384 250.235 96.1272 250.234 96.116C250.231 96.0898 250.225 96.0641 250.216 96.0394C250.204 96.0084 250.186 95.9805 250.162 95.9578C250.13 95.9293 250.092 95.9106 250.05 95.904C250.031 95.8991 250.012 95.898 249.993 95.901C249.974 95.9039 249.955 95.9108 249.939 95.9212C249.914 95.9401 249.895 95.9667 249.886 95.997C249.877 96.0233 249.871 96.0507 249.87 96.0785C249.869 96.0915 249.869 96.1047 249.87 96.1177L252.114 113.842L251.864 113.795L249.617 95.9978C249.617 95.9933 249.617 95.9888 249.618 95.9843C249.618 95.9774 249.617 95.9705 249.617 95.9636C249.615 95.9357 249.609 95.9083 249.599 95.882C249.587 95.8513 249.568 95.8235 249.544 95.8005C249.514 95.7714 249.475 95.7521 249.433 95.745C249.415 95.7406 249.395 95.7401 249.376 95.7435C249.357 95.7468 249.339 95.754 249.323 95.7646C249.297 95.7842 249.278 95.8109 249.268 95.8412C249.255 95.8806 249.248 95.922 249.249 95.9636L251.378 113.71L251.077 113.653L249.057 96.0068C249.058 95.9954 249.058 95.9839 249.057 95.9725C249.055 95.9446 249.049 95.9172 249.039 95.891C249.027 95.86 249.008 95.8322 248.983 95.8094C248.952 95.7808 248.913 95.7621 248.871 95.7556C248.852 95.7509 248.833 95.7501 248.814 95.7533C248.794 95.7566 248.776 95.7637 248.76 95.7744C248.735 95.7937 248.717 95.8202 248.707 95.8502C248.698 95.8765 248.692 95.904 248.691 95.9318C248.69 95.9448 248.69 95.9579 248.691 95.9709L250.597 113.562L250.297 113.504L248.488 96.1845C248.489 96.1795 248.489 96.1745 248.489 96.1695C248.489 96.1634 248.489 96.1572 248.488 96.1511C248.486 96.1249 248.48 96.0991 248.471 96.0744C248.457 96.0384 248.435 96.0066 248.405 95.9821C248.376 95.9576 248.34 95.9414 248.303 95.935C248.284 95.9303 248.264 95.9295 248.245 95.9327C248.226 95.9359 248.208 95.9431 248.192 95.9538C248.167 95.9735 248.148 96.0002 248.138 96.0304C248.129 96.0568 248.123 96.0842 248.121 96.112C248.12 96.125 248.12 96.138 248.121 96.1511L249.181 106.82L247.885 95.7393C248.153 95.6215 248.44 95.5524 248.732 95.5355C248.999 95.5184 249.267 95.5305 249.531 95.5713C249.731 95.6015 249.929 95.6448 250.123 95.701C250.269 95.7434 250.356 95.7768 250.356 95.7768L252.83 113.975Z" fill="#FAFBFC"/> -<path d="M221.009 108.048L220.66 84.1935C220.66 84.178 220.659 84.1624 220.658 84.147C220.657 84.1111 220.652 84.0755 220.642 84.041C220.63 83.998 220.608 83.9585 220.578 83.926C220.538 83.8868 220.487 83.8609 220.432 83.8518C220.406 83.8458 220.379 83.8451 220.353 83.8497C220.326 83.8543 220.301 83.8642 220.279 83.8788C220.242 83.9054 220.214 83.9415 220.197 83.9831C220.181 84.0193 220.17 84.0574 220.164 84.0964C220.161 84.114 220.16 84.1317 220.159 84.1494L220.367 107.931L220.014 107.865C220.008 106.649 219.998 104.74 219.987 102.506C219.975 100.272 219.963 97.7134 219.953 95.1987C219.943 92.6841 219.936 90.2159 219.933 88.1612C219.93 86.1064 219.932 84.4683 219.943 83.617C220.323 83.3036 220.776 83.0905 221.259 82.9973C221.694 82.914 222.139 82.898 222.579 82.95C222.923 82.9884 223.263 83.0575 223.595 83.1563C223.733 83.1949 223.869 83.2414 224.002 83.2957L225.024 101.939C225.02 101.065 225.017 100.163 225.014 99.2528C225.011 98.5512 225.008 97.8444 225.005 97.141C225.004 96.8396 225.003 96.5389 225.002 96.2395C224.996 94.9337 224.991 93.6537 224.991 92.4558C224.991 91.9456 224.991 91.4505 224.99 90.9749C224.99 90.0776 224.99 89.2497 224.991 88.5207C224.991 87.4053 224.996 86.5206 225.003 85.9743C225.368 85.6736 225.803 85.4693 226.268 85.3799C226.686 85.2999 227.114 85.2845 227.536 85.3342C227.868 85.3709 228.195 85.437 228.515 85.5315C228.647 85.5693 228.778 85.614 228.906 85.6652L229.549 97.4068C229.547 96.9109 229.545 96.42 229.544 95.9373C229.542 95.4129 229.541 94.8983 229.539 94.398C229.535 93.4375 229.535 92.53 229.535 91.7073C229.535 91.4215 229.535 91.146 229.534 90.8821C229.534 90.3865 229.534 89.9319 229.535 89.5269C229.536 89.203 229.538 88.9111 229.54 88.6556C229.542 88.4218 229.544 88.2186 229.544 88.0494C229.893 87.7614 230.309 87.5652 230.753 87.4787C231.151 87.402 231.559 87.3874 231.962 87.4355C232.277 87.4704 232.589 87.5335 232.893 87.6238C233.019 87.6603 233.143 87.703 233.264 87.7518L234.546 110.568L234.261 110.513L233.124 88.2256C233.125 88.2173 233.125 88.2089 233.125 88.2006C233.125 88.1948 233.124 88.189 233.124 88.1832C233.124 88.1506 233.119 88.1182 233.11 88.087C233.099 88.0421 233.074 88.0017 233.039 87.9712C233.004 87.9406 232.961 87.9213 232.915 87.9157C232.891 87.9097 232.867 87.9085 232.843 87.9123C232.819 87.9161 232.796 87.9247 232.776 87.9377C232.743 87.9618 232.717 87.9949 232.703 88.0331C232.689 88.0666 232.679 88.1016 232.674 88.1375C232.669 88.1538 232.669 88.1701 232.669 88.1864L233.668 110.406L233.364 110.348L232.376 88.029C232.377 88.0149 232.377 88.0008 232.376 87.9866C232.376 87.9538 232.371 87.9212 232.362 87.8896C232.351 87.8499 232.33 87.8135 232.301 87.7836C232.265 87.7473 232.218 87.7231 232.167 87.7143C232.143 87.709 232.118 87.7086 232.094 87.7129C232.07 87.7173 232.047 87.7263 232.027 87.7396C231.993 87.7641 231.968 87.7974 231.952 87.8358C231.938 87.869 231.929 87.9038 231.923 87.9394C231.921 87.9556 231.919 87.9719 231.918 87.9883L232.771 110.236L232.399 110.168L231.672 88.0421C231.673 88.028 231.673 88.0138 231.672 87.9997C231.672 87.9669 231.667 87.9342 231.658 87.9027C231.646 87.8578 231.622 87.8174 231.587 87.7869C231.552 87.7563 231.508 87.737 231.462 87.7314C231.439 87.7253 231.414 87.7242 231.389 87.7281C231.365 87.7321 231.342 87.741 231.321 87.7543C231.288 87.778 231.263 87.8108 231.248 87.8488C231.234 87.882 231.224 87.9168 231.219 87.9524C231.217 87.9683 231.215 87.9844 231.214 88.0005L231.811 110.059L231.438 109.99L230.94 88.2688C230.941 88.2546 230.941 88.2405 230.94 88.2264C230.94 88.1935 230.935 88.1609 230.926 88.1294C230.915 88.0899 230.894 88.0538 230.866 88.0242C230.828 87.9877 230.78 87.9637 230.729 87.9557C230.705 87.9498 230.681 87.9488 230.657 87.9527C230.634 87.9566 230.611 87.9654 230.591 87.9785C230.558 88.0027 230.533 88.0354 230.518 88.0731C230.504 88.1062 230.495 88.141 230.49 88.1766C230.485 88.193 230.485 88.2093 230.485 88.2256L230.857 109.881L230.53 109.822L230.233 88.5827C230.234 88.5683 230.234 88.5539 230.233 88.5395C230.233 88.5064 230.228 88.4735 230.219 88.4417C230.208 88.4019 230.188 88.3654 230.159 88.3356C230.123 88.2996 230.076 88.2761 230.026 88.2688C230.002 88.2635 229.977 88.263 229.953 88.2673C229.928 88.2717 229.905 88.2808 229.885 88.294C229.851 88.3185 229.825 88.3518 229.81 88.3902C229.796 88.4235 229.786 88.4583 229.78 88.4938C229.777 88.5101 229.775 88.5264 229.775 88.5427L229.899 103.301L230.252 109.767L229.633 109.651C229.63 109.247 229.628 108.792 229.625 108.288L229.623 107.906C229.622 107.512 229.62 107.094 229.617 106.657C229.614 106.077 229.611 105.461 229.607 104.82C229.606 104.601 229.605 104.379 229.603 104.154C229.6 103.722 229.597 103.28 229.597 102.832L228.744 86.1561C228.745 86.1414 228.745 86.1268 228.744 86.1121C228.743 86.0779 228.739 86.0439 228.729 86.011C228.718 85.9698 228.697 85.9319 228.667 85.9009C228.629 85.8631 228.58 85.8383 228.526 85.83C228.501 85.824 228.475 85.823 228.45 85.8272C228.425 85.8314 228.4 85.8407 228.379 85.8544C228.342 85.8791 228.314 85.914 228.297 85.9547C228.283 85.9897 228.272 86.0265 228.267 86.064C228.264 86.0814 228.262 86.0985 228.262 86.1153L229.322 109.593L229.002 109.532L227.951 85.9523C227.951 85.9373 227.951 85.9224 227.951 85.9074C227.951 85.8726 227.946 85.8381 227.936 85.8047C227.925 85.7632 227.903 85.7251 227.874 85.6938C227.836 85.656 227.787 85.6314 227.734 85.6237C227.708 85.6177 227.682 85.6169 227.657 85.6213C227.631 85.6256 227.606 85.635 227.584 85.6489C227.548 85.6737 227.52 85.7082 227.503 85.7484C227.488 85.7831 227.478 85.8196 227.473 85.8568C227.47 85.8736 227.469 85.8905 227.468 85.9074L228.375 109.417L227.983 109.344L227.209 85.9645C227.209 85.9498 227.209 85.9351 227.209 85.9205C227.208 85.8862 227.203 85.8523 227.193 85.8194C227.182 85.7781 227.16 85.7403 227.13 85.7093C227.092 85.6713 227.043 85.6462 226.99 85.6375C226.965 85.6312 226.939 85.6301 226.913 85.6341C226.888 85.6382 226.863 85.6474 226.842 85.6612C226.805 85.6862 226.777 85.721 226.76 85.7614C226.745 85.7967 226.735 85.8337 226.729 85.8715C226.726 85.8885 226.724 85.9057 226.723 85.9229L227.363 109.23L226.968 109.158L226.438 86.2009C226.439 86.1921 226.439 86.1833 226.439 86.1744C226.439 86.1683 226.438 86.1622 226.438 86.1561C226.437 86.1216 226.432 86.0873 226.423 86.0542C226.41 86.0071 226.384 85.9647 226.347 85.9322C226.311 85.8997 226.266 85.8787 226.218 85.8715C226.193 85.8657 226.167 85.8649 226.141 85.8692C226.116 85.8736 226.092 85.8829 226.07 85.8968C226.034 85.9219 226.006 85.9566 225.989 85.9971C225.974 86.0321 225.964 86.0688 225.958 86.1064C225.955 86.1234 225.953 86.1405 225.952 86.1577L226.352 109.043L226.016 108.979L225.69 86.5288C225.69 86.5138 225.69 86.4989 225.69 86.4839C225.689 86.4495 225.685 86.4152 225.676 86.382C225.664 86.335 225.638 86.2927 225.602 86.2606C225.566 86.2286 225.521 86.2083 225.473 86.2026C225.448 86.1965 225.422 86.1956 225.397 86.1998C225.372 86.204 225.348 86.2133 225.327 86.2271C225.291 86.2522 225.262 86.2869 225.245 86.3273C225.23 86.3622 225.219 86.3989 225.213 86.4366C225.212 86.4465 225.21 86.4565 225.209 86.4665C225.208 86.4736 225.208 86.4808 225.208 86.488L225.405 108.722L225.411 108.861L225.066 108.798V108.136L223.812 83.7988C223.813 83.7836 223.813 83.7684 223.812 83.7532C223.811 83.7176 223.806 83.6822 223.796 83.648C223.783 83.5992 223.756 83.5553 223.718 83.5217C223.68 83.4881 223.633 83.4663 223.583 83.4588C223.558 83.4527 223.531 83.4519 223.505 83.4564C223.479 83.4609 223.455 83.4705 223.432 83.4849C223.396 83.5113 223.368 83.5475 223.351 83.5893C223.335 83.6258 223.325 83.6642 223.319 83.7034C223.318 83.7107 223.317 83.7179 223.316 83.7253C223.315 83.7359 223.314 83.7466 223.313 83.7573L224.449 108.683L224.117 108.621L222.995 83.5885C222.995 83.5828 222.995 83.5772 222.995 83.5715C222.995 83.5617 222.995 83.5518 222.995 83.542C222.994 83.5061 222.989 83.4705 222.979 83.436C222.967 83.3927 222.945 83.353 222.915 83.3202C222.876 83.281 222.825 83.2551 222.77 83.246C222.744 83.2398 222.717 83.2389 222.69 83.2434C222.664 83.2479 222.638 83.2576 222.616 83.2721C222.579 83.2985 222.551 83.3347 222.534 83.3765C222.518 83.4127 222.508 83.4508 222.502 83.4898C222.499 83.5073 222.497 83.5251 222.496 83.5428L223.468 108.501L223.056 108.427L222.23 83.5991C222.231 83.5839 222.231 83.5686 222.23 83.5534C222.229 83.5181 222.223 83.483 222.213 83.449C222.2 83.4002 222.173 83.3564 222.135 83.323C222.097 83.2896 222.05 83.2683 222 83.2615C221.974 83.255 221.947 83.2539 221.921 83.2582C221.895 83.2626 221.87 83.2723 221.847 83.2868C221.811 83.3132 221.783 83.3494 221.766 83.3911C221.75 83.4277 221.74 83.4661 221.734 83.5053C221.733 83.5127 221.732 83.5202 221.731 83.5277C221.73 83.5381 221.729 83.5486 221.728 83.5591L222.412 108.307L222.001 108.232L221.43 83.8518C221.431 83.8363 221.431 83.8208 221.43 83.8053C221.43 83.7695 221.424 83.7338 221.414 83.6993C221.402 83.6502 221.375 83.606 221.337 83.5722C221.299 83.5384 221.252 83.5166 221.202 83.5094C221.176 83.503 221.149 83.5018 221.122 83.5061C221.096 83.5103 221.071 83.5197 221.048 83.5338C221.012 83.56 220.983 83.5963 220.967 83.6382C220.952 83.6749 220.942 83.7132 220.936 83.7523C220.931 83.7703 220.931 83.7883 220.931 83.8062L221.362 108.115L221.009 108.048Z" fill="#FAFBFC"/> -</g> -<defs> -<clipPath id="clip0_16498_64793"> -<rect width="390" height="151" fill="white"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/appeal.png b/web/src/assets/svgs/icons/appeal.png deleted file mode 100644 index d0faae6827111e2d3daef5deb2fcd4877bcc6fec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23985 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 IGQhC^0T2ni00000 diff --git a/web/src/assets/svgs/icons/appeal.svg b/web/src/assets/svgs/icons/appeal.svg deleted file mode 100644 index a5afa1e66..000000000 --- a/web/src/assets/svgs/icons/appeal.svg +++ /dev/null @@ -1,9 +0,0 @@ -<svg viewBox="0 0 350 350" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fillRule="evenodd" clipRule="evenodd" d="M326.109 87.5L174.554 0L23 87.5V262.5L174.554 350L326.109 262.5V87.5ZM307.641 97.973L174.435 21.0664L41.2285 97.973V251.786L174.435 328.693L307.641 251.786V97.973Z" fill="#F0F9FF"/> -<path d="M174.435 21.0664L307.641 97.973V251.786L174.435 328.693L41.2285 251.786V97.973L174.435 21.0664Z" fill="#7E1BD4"/> -<path d="M290.662 261.589L174.435 328.693L58.4463 261.727V214.021H290.662V261.589Z" fill="#973AE8"/> -<path d="M139.093 254.796H129.821L127.409 260.056H123.888L134.604 237.037L144.943 260.056H141.366L139.093 254.796ZM137.761 251.724L134.548 244.359L131.182 251.724H137.761ZM150.918 251.261V260.056H147.65V238.398H151.353C153.167 238.398 154.537 238.524 155.463 238.776C156.398 239.029 157.221 239.506 157.932 240.207C159.176 241.423 159.797 242.957 159.797 244.808C159.797 246.791 159.133 248.362 157.806 249.521C156.478 250.681 154.687 251.261 152.433 251.261H150.918ZM150.918 248.231H152.139C155.14 248.231 156.641 247.076 156.641 244.766C156.641 242.531 155.094 241.414 151.998 241.414H150.918V248.231ZM166.432 251.261V260.056H163.164V238.398H166.867C168.681 238.398 170.051 238.524 170.977 238.776C171.912 239.029 172.735 239.506 173.446 240.207C174.69 241.423 175.312 242.957 175.312 244.808C175.312 246.791 174.648 248.362 173.32 249.521C171.992 250.681 170.201 251.261 167.947 251.261H166.432ZM166.432 248.231H167.653C170.655 248.231 172.155 247.076 172.155 244.766C172.155 242.531 170.608 241.414 167.512 241.414H166.432V248.231ZM190.629 241.47H181.946V246.674H190.377V249.746H181.946V256.984H190.629V260.056H178.678V238.398H190.629V241.47ZM207.644 254.796H198.372L195.96 260.056H192.439L203.156 237.037L213.494 260.056H209.917L207.644 254.796ZM206.312 251.724L203.099 244.359L199.733 251.724H206.312ZM219.469 238.398V256.984H225.838V260.056H216.201V238.398H219.469Z" fill="white"/> -<path d="M117.316 90.3982C113.386 90.3982 110.328 91.2378 108.145 92.917C106.034 94.5232 104.978 97.2611 104.978 101.131C104.978 102.883 105.342 104.379 106.07 105.621C106.798 106.862 107.708 107.92 108.8 108.796C109.965 109.673 111.275 110.403 112.731 110.987C114.259 111.498 115.788 111.936 117.316 112.301V90.3982ZM103.341 136.832C103.268 141.65 104.323 145.447 106.507 148.221C108.691 150.996 112.294 152.456 117.316 152.602V126.1C114.332 125.296 111.348 124.347 108.363 123.252C105.452 122.084 102.795 120.624 100.393 118.872C98.0635 117.046 96.171 114.783 94.7152 112.082C93.2594 109.381 92.5315 106.022 92.5315 102.007C92.5315 98.5022 93.1866 95.4358 94.4968 92.8075C95.8798 90.1062 97.6996 87.8794 99.956 86.1272C102.285 84.302 104.942 82.9148 107.926 81.9657C110.911 81.0166 114.041 80.542 117.316 80.542V72H122.011V80.542C125.287 80.542 128.38 80.9801 131.292 81.8562C134.203 82.7323 136.715 84.0465 138.825 85.7987C141.009 87.5509 142.72 89.7776 143.957 92.479C145.267 95.1803 145.922 98.3197 145.922 101.897H133.475C133.33 98.1737 132.347 95.3263 130.527 93.3551C128.781 91.3838 125.942 90.3982 122.011 90.3982V113.506C125.287 114.382 128.489 115.404 131.619 116.572C134.749 117.74 137.515 119.237 139.917 121.062C142.319 122.887 144.248 125.15 145.704 127.852C147.16 130.553 147.888 133.875 147.888 137.817C147.888 141.906 147.196 145.483 145.813 148.55C144.503 151.543 142.683 154.062 140.354 156.106C138.025 158.077 135.295 159.574 132.165 160.596C129.035 161.691 125.651 162.312 122.011 162.458V171H117.316V162.458C113.386 162.385 109.783 161.764 106.507 160.596C103.232 159.428 100.429 157.785 98.0999 155.668C95.7706 153.478 93.9509 150.813 92.6407 147.674C91.4033 144.534 90.821 140.92 90.8938 136.832H103.341ZM122.011 152.602C125.942 152.31 129.144 151.178 131.619 149.207C134.167 147.163 135.441 143.95 135.441 139.57C135.441 137.525 135.04 135.81 134.24 134.423C133.512 133.035 132.493 131.867 131.183 130.918C129.945 129.969 128.526 129.202 126.924 128.618C125.323 128.034 123.685 127.523 122.011 127.085V152.602Z" fill="#4D00B4"/> -<path d="M228.316 133.398C224.386 133.398 221.328 134.238 219.145 135.917C217.034 137.523 215.978 140.261 215.978 144.131C215.978 145.883 216.342 147.379 217.07 148.621C217.798 149.862 218.708 150.92 219.8 151.796C220.965 152.673 222.275 153.403 223.731 153.987C225.259 154.498 226.788 154.936 228.316 155.301V133.398ZM214.341 179.832C214.268 184.65 215.323 188.447 217.507 191.221C219.691 193.996 223.294 195.456 228.316 195.602V169.1C225.332 168.296 222.348 167.347 219.363 166.252C216.452 165.084 213.795 163.624 211.393 161.872C209.063 160.046 207.171 157.783 205.715 155.082C204.259 152.381 203.532 149.022 203.532 145.007C203.532 141.502 204.187 138.436 205.497 135.808C206.88 133.106 208.7 130.879 210.956 129.127C213.285 127.302 215.942 125.915 218.926 124.966C221.911 124.017 225.041 123.542 228.316 123.542V115H233.011V123.542C236.287 123.542 239.38 123.98 242.292 124.856C245.203 125.732 247.715 127.046 249.825 128.799C252.009 130.551 253.72 132.778 254.957 135.479C256.267 138.18 256.922 141.32 256.922 144.897H244.475C244.33 141.174 243.347 138.326 241.527 136.355C239.781 134.384 236.942 133.398 233.011 133.398V156.506C236.287 157.382 239.489 158.404 242.619 159.572C245.749 160.74 248.515 162.237 250.917 164.062C253.319 165.887 255.248 168.15 256.704 170.852C258.16 173.553 258.888 176.875 258.888 180.817C258.888 184.906 258.196 188.483 256.813 191.55C255.503 194.543 253.683 197.062 251.354 199.106C249.025 201.077 246.295 202.574 243.165 203.596C240.035 204.691 236.651 205.312 233.011 205.458V214H228.316V205.458C224.386 205.385 220.783 204.764 217.507 203.596C214.232 202.428 211.429 200.785 209.1 198.668C206.771 196.478 204.951 193.813 203.641 190.674C202.403 187.534 201.821 183.92 201.894 179.832H214.341ZM233.011 195.602C236.942 195.31 240.144 194.178 242.619 192.207C245.167 190.163 246.441 186.95 246.441 182.57C246.441 180.525 246.04 178.81 245.24 177.423C244.512 176.035 243.493 174.867 242.183 173.918C240.945 172.969 239.526 172.202 237.924 171.618C236.323 171.034 234.685 170.523 233.011 170.085V195.602Z" fill="#4D00B4"/> -<path d="M121.888 172.91V181.75C121.888 189.058 139.524 195 161.263 195C183.001 195 200.638 189.058 200.638 181.75V172.91C192.168 178.934 176.685 181.75 161.263 181.75C145.841 181.75 130.357 178.934 121.888 172.91ZM187.513 115.5C209.251 115.5 226.888 109.558 226.888 102.25C226.888 94.9418 209.251 89 187.513 89C165.774 89 148.138 94.9418 148.138 102.25C148.138 109.558 165.774 115.5 187.513 115.5ZM121.888 151.192V161.875C121.888 169.183 139.524 175.125 161.263 175.125C183.001 175.125 200.638 169.183 200.638 161.875V151.192C192.168 158.231 176.664 161.875 161.263 161.875C145.861 161.875 130.357 158.231 121.888 151.192ZM207.2 153.47C218.951 151.171 226.888 146.907 226.888 142V133.16C222.13 136.555 215.137 138.874 207.2 140.302V153.47ZM161.263 122.125C139.524 122.125 121.888 129.537 121.888 138.688C121.888 147.838 139.524 155.25 161.263 155.25C183.001 155.25 200.638 147.838 200.638 138.688C200.638 129.537 183.001 122.125 161.263 122.125ZM206.236 133.781C218.541 131.545 226.888 127.156 226.888 122.125V113.285C219.607 118.481 207.098 121.276 193.932 121.939C199.981 124.899 204.432 128.874 206.236 133.781Z" fill="white"/> -</svg> diff --git a/web/src/assets/svgs/icons/arrow-down.svg b/web/src/assets/svgs/icons/arrow-down.svg deleted file mode 100644 index 97be1a02a..000000000 --- a/web/src/assets/svgs/icons/arrow-down.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 17 17" fill="none"> - <g clip-path="url(#clip0_13095_238428)"> - <path d="M15.1464 7.30281L15.9366 8.09558C16.2712 8.43126 16.2712 8.97405 15.9366 9.30616L9.02065 16.2482C8.68607 16.5839 8.14504 16.5839 7.81401 16.2482L0.894494 9.30616C0.559908 8.97048 0.559908 8.42769 0.894494 8.09558L1.68469 7.30281C2.02283 6.96356 2.57454 6.97071 2.90557 7.3171L6.99178 11.6202V1.35705C6.99178 0.8821 7.37264 0.5 7.84604 0.5H8.98506C9.45846 0.5 9.83932 0.8821 9.83932 1.35705V11.6202L13.9255 7.3171C14.2566 6.96714 14.8083 6.95999 15.1464 7.30281Z" fill="#009AFF"/> - </g> - <defs> - <clipPath id="clip0_13095_238428"> - <rect width="16" height="16" fill="white" transform="translate(0.643555 0.5)"/> - </clipPath> - </defs> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/arrow-left.svg b/web/src/assets/svgs/icons/arrow-left.svg deleted file mode 100644 index 235cf7d28..000000000 --- a/web/src/assets/svgs/icons/arrow-left.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"> - <g clip-path="url(#clip0_12105_170850)"> - <path d="M8.92961 14.6965L8.13684 15.4827C7.80116 15.8155 7.25837 15.8155 6.92626 15.4827L-0.0158205 8.60196C-0.351497 8.26908 -0.351497 7.73081 -0.0158205 7.40147L6.92626 0.517238C7.26194 0.184358 7.80474 0.184358 8.13684 0.517238L8.92961 1.3034C9.26886 1.63982 9.26172 2.18872 8.91533 2.51806L4.61224 6.58344L14.8754 6.58344C15.3503 6.58344 15.7324 6.96235 15.7324 7.43334V8.56655C15.7324 9.03754 15.3503 9.41645 14.8754 9.41645L4.61224 9.41645L8.91533 13.4818C9.26529 13.8112 9.27243 14.3601 8.92961 14.6965Z" fill="#009AFF"/> - </g> - <defs> - <clipPath id="clip0_12105_170850"> - <rect width="16" height="16" fill="white"/> - </clipPath> - </defs> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/arrow-right.svg b/web/src/assets/svgs/icons/arrow-right.svg deleted file mode 100644 index a46908344..000000000 --- a/web/src/assets/svgs/icons/arrow-right.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="12" height="13" viewBox="0 0 12 13" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_22126_42369)"> -<path d="M9.5418 6.96634L4.0487 12.3068C3.78378 12.5644 3.35426 12.5644 3.08937 12.3068L2.44869 11.6839C2.18421 11.4268 2.18371 11.0101 2.44756 10.7524L6.80093 6.49999L2.44756 2.24765C2.18371 1.98991 2.18421 1.57318 2.44869 1.31606L3.08937 0.693175C3.35429 0.435608 3.7838 0.435608 4.0487 0.693175L9.54177 6.03366C9.80669 6.2912 9.8067 6.70878 9.5418 6.96634Z"/> -</g> -<defs> -<clipPath id="clip0_22126_42369"> -<rect width="12" height="12" fill="white" transform="translate(0 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/arrow.svg b/web/src/assets/svgs/icons/arrow.svg deleted file mode 100644 index ce9ad3625..000000000 --- a/web/src/assets/svgs/icons/arrow.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_13289_179238)"> -<path d="M6.5157 1.8027L7.30847 1.01855C7.64415 0.686524 8.18694 0.686524 8.51905 1.01855L15.4611 7.88165C15.7968 8.21367 15.7968 8.75057 15.4611 9.07907L8.51905 15.9457C8.18337 16.2777 7.64058 16.2777 7.30847 15.9457L6.5157 15.1615C6.17646 14.826 6.1836 14.2785 6.52999 13.95L10.8331 9.89501L0.569938 9.89501C0.0949908 9.89501 -0.287109 9.51706 -0.287109 9.04728L-0.287109 7.91697C-0.287109 7.44718 0.0949908 7.06924 0.569938 7.06924L10.8331 7.06924L6.52999 3.01425C6.18003 2.68576 6.17288 2.13826 6.5157 1.8027Z" fill="#009AFF"/> -</g> -<defs> -<clipPath id="clip0_13289_179238"> -<rect width="16" height="16" fill="white" transform="translate(0 0.482422)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/attachment.svg b/web/src/assets/svgs/icons/attachment.svg deleted file mode 100644 index df0b9a062..000000000 --- a/web/src/assets/svgs/icons/attachment.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_14494_52647)"> -<path d="M2.09129 12.7461C0.447944 11.0975 0.478572 8.43913 2.13027 6.79659L8.02976 0.9297C9.27614 -0.309845 11.3021 -0.309955 12.5486 0.9297C13.783 2.15727 13.7845 4.13791 12.5486 5.36693L7.406 10.4762C6.56633 11.3111 5.19445 11.2995 4.36901 10.4489C3.57378 9.62937 3.59929 8.33047 4.40985 7.52437L8.45262 3.50936C8.62649 3.33671 8.91139 3.33376 9.08897 3.50277L9.73194 4.1147C9.90955 4.28373 9.91256 4.56073 9.73872 4.73337L5.69637 8.748C5.55766 8.88595 5.54911 9.11518 5.67815 9.24818C5.80111 9.37489 5.99441 9.37699 6.11937 9.25269L11.262 4.14349C11.8136 3.59492 11.8136 2.70179 11.2617 2.15292C10.722 1.61625 9.85664 1.61597 9.31673 2.15292L3.41721 8.01979C2.4395 8.99213 2.42443 10.566 3.38371 11.5283C4.34024 12.4879 5.88641 12.4891 6.84471 11.5362L11.6839 6.7237C11.8576 6.55091 12.1425 6.54779 12.3203 6.7167L12.9637 7.32821C13.1414 7.49711 13.1446 7.7741 12.9709 7.94689L8.13168 12.7593C6.45611 14.4256 3.74579 14.4059 2.09129 12.7461Z"/> -</g> -<defs> -<clipPath id="clip0_14494_52647"> -<rect width="14" height="14" fill="white"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/balance.svg b/web/src/assets/svgs/icons/balance.svg deleted file mode 100644 index 25c5a37f9..000000000 --- a/web/src/assets/svgs/icons/balance.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg viewBox="0 0 350 350" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fillRule="evenodd" clipRule="evenodd" d="M326.109 87.5L174.554 0L23 87.5V262.5L174.554 350L326.109 262.5V87.5ZM307.641 97.973L174.435 21.0664L41.2285 97.973V251.786L174.435 328.693L307.641 251.786V97.973Z" fill="#F0F9FF"/> -<path d="M174.435 21.0664L307.641 97.973V251.786L174.435 328.693L41.2285 251.786V97.973L174.435 21.0664Z" fill="#7E1BD4"/> -<path fillRule="evenodd" clipRule="evenodd" d="M174.554 62.3547L77.002 118.677V231.321L174.554 287.643L272.107 231.321V118.677L174.554 62.3547ZM275.107 116.945L174.554 58.8906L74.002 116.945V233.053L174.554 291.107L275.107 233.053V116.945Z" fill="#B45FFF"/> -<path d="M238.247 57.4617V231.26L174.835 195.35L110.888 231.26V58.0695L175.094 21L238.247 57.4617Z" fill="#4D00B4"/> -<path d="M230.985 53.268V227.14L229.039 226.038V52.1445L230.985 53.268Z" fill="#9013FE"/> -<path d="M120.309 52.6292V225.968L118.363 227.061V53.7527L120.309 52.6292Z" fill="#9013FE"/> -<path fillRule="evenodd" clipRule="evenodd" d="M149.657 66.9959L146.28 69.7649L147.869 65.6974L144.192 63.3412L148.552 63.5963L149.657 59.3711L150.761 63.5963L155.121 63.3412L151.444 65.6974L153.034 69.7649L149.657 66.9959ZM162.584 66.9959L159.207 69.7649L160.797 65.6974L157.12 63.3412L161.479 63.5963L162.584 59.3711L163.689 63.5963L168.048 63.3412L164.371 65.6974L165.961 69.7649L162.584 66.9959ZM172.135 69.7649L175.512 66.9959L178.889 69.7649L177.299 65.6974L180.976 63.3412L176.616 63.5963L175.512 59.3711L174.407 63.5963L170.047 63.3412L173.724 65.6974L172.135 69.7649ZM188.439 66.9959L185.062 69.7649L186.652 65.6974L182.975 63.3412L187.335 63.5963L188.439 59.3711L189.544 63.5963L193.904 63.3412L190.227 65.6974L191.817 69.7649L188.439 66.9959ZM197.99 69.7649L201.367 66.9959L204.744 69.7649L203.154 65.6974L206.831 63.3412L202.471 63.5963L201.367 59.3711L200.262 63.5963L195.902 63.3412L199.579 65.6974L197.99 69.7649Z" fill="#FCFEFF"/> -<path fillRule="evenodd" clipRule="evenodd" d="M180.315 104.18C180.315 106.747 179.736 108.223 178.799 109.059L204.699 116.787C205.408 116.175 206.331 115.803 207.344 115.803C209.579 115.803 211.391 117.608 211.391 119.835C211.391 121.454 210.432 122.846 209.05 123.488L218.114 149.563C220.988 150.02 222.888 150.694 222.888 151.586C222.888 155.244 215.724 158.21 206.888 158.21C198.051 158.21 190.888 155.244 190.888 151.586C190.888 150.638 193.034 149.936 196.214 149.48L205.308 123.316C204.473 122.831 203.83 122.058 203.514 121.132C203.208 119.863 202.498 119.062 201.382 118.729C200.048 118.331 198.741 118.286 197.282 118.235C195.439 118.172 193.352 118.1 190.661 117.297L177.502 113.371V140.19C178.527 140.922 179.197 142.115 179.197 143.467C179.197 144.363 178.9 145.189 178.403 145.859C179.74 146.85 180.609 148.431 180.609 150.219C180.609 152.382 179.338 154.245 177.502 155.121V160.721C183.478 161.032 188.03 162.643 188.03 164.584C188.03 164.616 188.029 164.649 188.026 164.682C197.672 165.513 204.331 167.284 204.331 169.334L204.378 172.194C204.378 175.043 191.547 177.329 175.69 177.329C159.833 177.329 147.002 174.996 147.002 172.147L146.908 169.334C146.908 167.317 153.356 165.57 162.752 164.723C162.747 164.676 162.745 164.63 162.745 164.584C162.745 162.675 167.151 161.085 172.984 160.737V155.212C171.046 154.376 169.689 152.456 169.689 150.219C169.689 148.432 170.559 146.85 171.895 145.859C171.399 145.189 171.101 144.364 171.101 143.467C171.101 142.034 171.854 140.779 172.984 140.064V112.022L157.977 107.544C156.978 107.246 155.517 106.455 153.955 105.609L153.955 105.609C152.163 104.639 150.239 103.598 148.732 103.148C147.688 102.836 146.616 103.062 145.516 103.826C145.304 103.998 145.074 104.148 144.83 104.276L153.874 130.295C156.882 130.753 158.888 131.439 158.888 132.355C158.888 136.014 151.724 138.98 142.888 138.98C134.051 138.98 126.888 136.014 126.888 132.355C126.888 131.467 128.775 130.794 131.634 130.337L140.758 104.088C139.645 103.369 138.907 102.123 138.907 100.704C138.907 98.4766 140.719 96.6712 142.955 96.6712C144.776 96.6712 146.315 97.8695 146.824 99.5175L170.083 106.458C169.955 105.815 169.887 105.062 169.887 104.18C169.887 100.745 171.625 96.6846 175.101 92C178.577 96.6846 180.315 100.745 180.315 104.18ZM208.25 123.762L217.17 149.425C211.541 148.671 202.966 148.648 197.154 149.355L206.084 123.665C206.481 123.795 206.904 123.867 207.344 123.867C207.656 123.867 207.958 123.828 208.25 123.762ZM132.578 130.198L141.521 104.471C141.967 104.64 142.449 104.736 142.955 104.736C143.331 104.736 143.694 104.681 144.04 104.585L152.931 130.163C147.109 129.416 138.308 129.427 132.578 130.198Z" fill="white"/> -<path d="M167.799 222.45L184.771 223.207L191.643 238.447L181.948 252.375L164.884 251.284L157.888 234.772L167.799 222.45ZM180.242 231.235L167.941 236.599L178.458 244.715L180.242 231.235ZM178.818 228.547L168.988 224.322L166.923 233.205L178.818 228.547ZM176.326 246.757L165.643 239.142L165.901 249.461L176.326 246.757ZM189.936 238.413L182.656 231.039L180.735 245.219L189.936 238.413ZM178.831 248.416L169.821 250.766L180.417 251.443L178.831 248.416ZM188.514 241.759L180.627 247.624L182.194 250.681L188.514 241.759ZM184.783 225.337L183.251 228.476L188.953 234.261L184.783 225.337ZM182.874 223.835L172.862 223.429L181.121 227.035L182.874 223.835ZM166.337 225.286L159.323 234.126L164.012 235.117L166.337 225.286ZM163.73 236.851L159.018 235.855L163.934 247.416L163.73 236.851Z" fill="white"/> -</svg> diff --git a/web/src/assets/svgs/icons/book-open.svg b/web/src/assets/svgs/icons/book-open.svg deleted file mode 100644 index fb1010fb1..000000000 --- a/web/src/assets/svgs/icons/book-open.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M15.0617 2.00153C13.5394 2.089 10.5139 2.40737 8.64611 3.565C8.51722 3.64487 8.44417 3.7869 8.44417 3.9354V14.1692C8.44417 14.4941 8.795 14.6994 9.09083 14.5486C11.0125 13.5693 13.7917 13.3021 15.1658 13.229C15.635 13.204 15.9997 12.8232 15.9997 12.3667V2.86496C16 2.36687 15.5733 1.97228 15.0617 2.00153ZM7.35361 3.565C5.48611 2.40737 2.46056 2.08928 0.938333 2.00153C0.426667 1.97228 0 2.36687 0 2.86496V12.367C0 12.8237 0.364722 13.2046 0.833889 13.2293C2.20861 13.3024 4.98917 13.5699 6.91083 14.5498C7.20583 14.7002 7.55556 14.4952 7.55556 14.1712V3.93034C7.55556 3.78156 7.48278 3.64515 7.35361 3.565Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/book.svg b/web/src/assets/svgs/icons/book.svg deleted file mode 100644 index a66d9df01..000000000 --- a/web/src/assets/svgs/icons/book.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="M14.8378 11.25V0.75C14.8378 0.334375 14.5073 0 14.0965 0H3.96525C2.32819 0 1 1.34375 1 3V13C1 14.6562 2.32819 16 3.96525 16H14.0965C14.5073 16 14.8378 15.6656 14.8378 15.25V14.75C14.8378 14.5156 14.7297 14.3031 14.5629 14.1656C14.4332 13.6844 14.4332 12.3125 14.5629 11.8313C14.7297 11.6969 14.8378 11.4844 14.8378 11.25ZM4.95367 4.1875C4.95367 4.08437 5.03707 4 5.139 4H11.6873C11.7892 4 11.8726 4.08437 11.8726 4.1875V4.8125C11.8726 4.91563 11.7892 5 11.6873 5H5.139C5.03707 5 4.95367 4.91563 4.95367 4.8125V4.1875ZM4.95367 6.1875C4.95367 6.08437 5.03707 6 5.139 6H11.6873C11.7892 6 11.8726 6.08437 11.8726 6.1875V6.8125C11.8726 6.91563 11.7892 7 11.6873 7H5.139C5.03707 7 4.95367 6.91563 4.95367 6.8125V6.1875ZM12.7807 14H3.96525C3.41853 14 2.97683 13.5531 2.97683 13C2.97683 12.45 3.42162 12 3.96525 12H12.7807C12.722 12.5344 12.722 13.4656 12.7807 14Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/bookmark.svg b/web/src/assets/svgs/icons/bookmark.svg deleted file mode 100644 index 4865cfa89..000000000 --- a/web/src/assets/svgs/icons/bookmark.svg +++ /dev/null @@ -1,44 +0,0 @@ -<svg - fill="#000000" - width="24px" - height="24px" - viewBox="8 8 48 48" - version="1.1" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - xml:space="preserve" - xmlns:serif="http://www.serif.com/" - style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" -><g id="SVGRepo_bgCarrier" stroke-width="0" /><g - id="SVGRepo_tracerCarrier" - stroke-linecap="round" - stroke-linejoin="round" - /><g id="SVGRepo_iconCarrier"> <rect id="Icons" x="-384" y="-320" width="1280" height="800" style="fill:none;" /> <g - id="Icons1" - serif:id="Icons" - > <g id="Strike"> </g> <g id="H1"> </g> <g id="H2"> </g> <g id="H3"> </g> <g id="list-ul"> </g> <g - id="hamburger-1" - > </g> <g id="hamburger-2"> </g> <g id="list-ol"> </g> <g id="list-task"> </g> <g id="trash"> </g> <g - id="vertical-menu" - > </g> <g id="horizontal-menu"> </g> <g id="sidebar-2"> </g> <g id="Pen"> </g> <g - id="Pen1" - serif:id="Pen" - > </g> <g id="clock"> </g> <g id="external-link"> </g> <g id="hr"> </g> <g id="info"> </g> <g - id="warning" - > </g> <g id="plus-circle"> </g> <g id="minus-circle"> </g> <g id="vue"> </g> <g id="cog"> </g> <g - id="logo" - > </g> <g id="radio-check"> </g> <g id="eye-slash"> </g> <g id="eye"> </g> <g id="toggle-off"> </g> <g - id="shredder" - > </g> <g> <path - d="M9.89,30.496c-1.14,1.122 -1.784,2.653 -1.791,4.252c-0.006,1.599 0.627,3.135 1.758,4.266c3.028,3.028 7.071,7.071 10.081,10.082c2.327,2.326 6.093,2.349 8.448,0.051c5.91,-5.768 16.235,-15.846 19.334,-18.871c0.578,-0.564 0.905,-1.338 0.905,-2.146c0,-4.228 0,-17.607 0,-17.607l-17.22,0c-0.788,0 -1.544,0.309 -2.105,0.862c-3.065,3.018 -13.447,13.239 -19.41,19.111Zm34.735,-15.973l0,11.945c0,0.811 -0.329,1.587 -0.91,2.152c-3.069,2.981 -13.093,12.718 -17.485,16.984c-1.161,1.127 -3.012,1.114 -4.157,-0.031c-2.387,-2.386 -6.296,-6.296 -8.709,-8.709c-0.562,-0.562 -0.876,-1.325 -0.872,-2.12c0.003,-0.795 0.324,-1.555 0.892,-2.112c4.455,-4.373 14.545,-14.278 17.573,-17.25c0.561,-0.551 1.316,-0.859 2.102,-0.859c3.202,0 11.566,0 11.566,0Zm-7.907,2.462c-1.751,0.015 -3.45,1.017 -4.266,2.553c-0.708,1.331 -0.75,2.987 -0.118,4.356c0.836,1.812 2.851,3.021 4.882,2.809c2.042,-0.212 3.899,-1.835 4.304,-3.896c0.296,-1.503 -0.162,-3.136 -1.213,-4.251c-0.899,-0.953 -2.18,-1.548 -3.495,-1.57c-0.031,-0.001 -0.062,-0.001 -0.094,-0.001Zm0.008,2.519c1.105,0.007 2.142,0.849 2.343,1.961c0.069,0.384 0.043,0.786 -0.09,1.154c-0.393,1.079 -1.62,1.811 -2.764,1.536c-1.139,-0.274 -1.997,-1.489 -1.802,-2.67c0.177,-1.069 1.146,-1.963 2.27,-1.981c0.014,0 0.029,0 0.043,0Z" - /> <path - d="M48.625,13.137l0,4.001l3.362,0l0,11.945c0,0.811 -0.328,1.587 -0.909,2.152c-3.069,2.981 -13.093,12.717 -17.485,16.983c-1.161,1.128 -3.013,1.114 -4.157,-0.03l-0.034,-0.034l-1.016,0.993c-0.663,0.646 -1.437,1.109 -2.259,1.389l1.174,1.174c2.327,2.327 6.093,2.35 8.447,0.051c5.91,-5.768 16.235,-15.845 19.335,-18.87c0.578,-0.565 0.904,-1.339 0.904,-2.147c0,-4.227 0,-17.607 0,-17.607l-7.362,0Z" - /> </g> <g id="spinner--loading--dots-" serif:id="spinner [loading, dots]"> </g> <g id="react"> </g> <g - id="check-selected" - > </g> <g id="turn-off"> </g> <g id="code-block"> </g> <g id="user"> </g> <g id="coffee-bean"> </g> <g - id="coffee-beans" - > <g id="coffee-bean1" serif:id="coffee-bean"> </g> </g> <g id="coffee-bean-filled"> </g> <g - id="coffee-beans-filled" - > <g id="coffee-bean2" serif:id="coffee-bean"> </g> </g> <g id="clipboard"> </g> <g id="clipboard-paste"> </g> <g - id="clipboard-copy" - > </g> <g id="Layer1"> </g> </g> </g></svg> diff --git a/web/src/assets/svgs/icons/bug.svg b/web/src/assets/svgs/icons/bug.svg deleted file mode 100644 index 02608f603..000000000 --- a/web/src/assets/svgs/icons/bug.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_15973_30608)"> -<path d="M15.9996 9.02812C15.9847 9.57281 15.5241 9.99999 14.9792 9.99999H13.25V10.5C13.25 11.1832 13.0974 11.8307 12.825 12.4108L14.7071 14.2929C15.0976 14.6834 15.0976 15.3166 14.7071 15.7071C14.3165 16.0976 13.6834 16.0976 13.2928 15.7071L11.5823 13.9966C10.8089 14.6239 9.82344 15 8.74997 15V7.37499C8.74997 7.1679 8.58207 7 8.37497 7H7.62498C7.41788 7 7.24998 7.1679 7.24998 7.37499V15C6.17651 15 5.19104 14.6239 4.4176 13.9966L2.7071 15.7071C2.31654 16.0976 1.68339 16.0976 1.29286 15.7071C0.902355 15.3166 0.902355 14.6834 1.29286 14.2929L3.17498 12.4108C2.90254 11.8307 2.74998 11.1832 2.74998 10.5V9.99999H1.02079C0.475918 9.99999 0.0153249 9.57281 0.000387374 9.02812C-0.0151439 8.46299 0.438356 7.99999 0.99998 7.99999H2.74998V6.16421L1.29286 4.70709C0.902355 4.31656 0.902355 3.6834 1.29286 3.29287C1.68342 2.90234 2.31654 2.90234 2.7071 3.29287L4.4142 5H11.5857L13.2928 3.2929C13.6834 2.90237 14.3165 2.90237 14.7071 3.2929C15.0976 3.68343 15.0976 4.31659 14.7071 4.70712L13.25 6.16421V7.99999H15C15.5616 7.99999 16.0151 8.46299 15.9996 9.02812ZM8.03122 0C6.09823 0 4.53123 1.567 4.53123 3.5H11.5312C11.5312 1.567 9.96422 0 8.03122 0Z" /> -</g> -<defs> -<clipPath id="clip0_15973_30608"> -<rect width="16" height="16" fill="none"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/bullhorn.svg b/web/src/assets/svgs/icons/bullhorn.svg deleted file mode 100644 index e3ad46660..000000000 --- a/web/src/assets/svgs/icons/bullhorn.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M16 7.61765C16 6.96608 15.6403 6.40331 15.1111 6.09779V1.88263C15.1111 1.64136 14.9172 1 14.2222 1C14.0244 1 13.8281 1.06563 13.6672 1.19357L11.3053 3.06939C10.1189 4.01075 8.62944 4.52941 7.11111 4.52941H1.77778C0.795833 4.52941 0 5.31939 0 6.29412V8.94118C0 9.9159 0.795833 10.7059 1.77778 10.7059H2.71389C2.67528 10.9949 2.65333 11.2888 2.65333 11.5882C2.65333 12.6848 2.91056 13.721 3.36333 14.6472C3.5075 14.942 3.82222 15.1176 4.15222 15.1176H6.21556C6.93917 15.1176 7.37361 14.2949 6.935 13.7235C6.47944 13.1301 6.20861 12.3901 6.20861 11.5882C6.20861 11.2819 6.25361 10.9874 6.33111 10.7059H7.11111C8.62944 10.7059 10.1189 11.2245 11.305 12.1659L13.6669 14.0417C13.8245 14.1669 14.0202 14.2351 14.2219 14.2353C14.9142 14.2353 15.1108 13.6072 15.1108 13.3529V9.13778C15.6403 8.83199 16 8.26921 16 7.61765ZM13.3333 11.5171L12.4153 10.7881C10.9153 9.59688 9.03111 8.94118 7.11111 8.94118V6.29412C9.03111 6.29412 10.9153 5.63842 12.4153 4.44724L13.3333 3.7182V11.5171Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/calendar.svg b/web/src/assets/svgs/icons/calendar.svg deleted file mode 100644 index 7f8393539..000000000 --- a/web/src/assets/svgs/icons/calendar.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg height="24" width="32" viewBox="0 0 14 15" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_11557_149808)"> -<path d="M4.92188 8.375H3.82812C3.64766 8.375 3.5 8.22734 3.5 8.04688V6.95312C3.5 6.77266 3.64766 6.625 3.82812 6.625H4.92188C5.10234 6.625 5.25 6.77266 5.25 6.95312V8.04688C5.25 8.22734 5.10234 8.375 4.92188 8.375ZM7.875 8.04688V6.95312C7.875 6.77266 7.72734 6.625 7.54688 6.625H6.45312C6.27266 6.625 6.125 6.77266 6.125 6.95312V8.04688C6.125 8.22734 6.27266 8.375 6.45312 8.375H7.54688C7.72734 8.375 7.875 8.22734 7.875 8.04688ZM10.5 8.04688V6.95312C10.5 6.77266 10.3523 6.625 10.1719 6.625H9.07812C8.89766 6.625 8.75 6.77266 8.75 6.95312V8.04688C8.75 8.22734 8.89766 8.375 9.07812 8.375H10.1719C10.3523 8.375 10.5 8.22734 10.5 8.04688ZM7.875 10.6719V9.57812C7.875 9.39766 7.72734 9.25 7.54688 9.25H6.45312C6.27266 9.25 6.125 9.39766 6.125 9.57812V10.6719C6.125 10.8523 6.27266 11 6.45312 11H7.54688C7.72734 11 7.875 10.8523 7.875 10.6719ZM5.25 10.6719V9.57812C5.25 9.39766 5.10234 9.25 4.92188 9.25H3.82812C3.64766 9.25 3.5 9.39766 3.5 9.57812V10.6719C3.5 10.8523 3.64766 11 3.82812 11H4.92188C5.10234 11 5.25 10.8523 5.25 10.6719ZM10.5 10.6719V9.57812C10.5 9.39766 10.3523 9.25 10.1719 9.25H9.07812C8.89766 9.25 8.75 9.39766 8.75 9.57812V10.6719C8.75 10.8523 8.89766 11 9.07812 11H10.1719C10.3523 11 10.5 10.8523 10.5 10.6719ZM13.125 3.5625V13.1875C13.125 13.9121 12.5371 14.5 11.8125 14.5H2.1875C1.46289 14.5 0.875 13.9121 0.875 13.1875V3.5625C0.875 2.83789 1.46289 2.25 2.1875 2.25H3.5V0.828125C3.5 0.647656 3.64766 0.5 3.82812 0.5H4.92188C5.10234 0.5 5.25 0.647656 5.25 0.828125V2.25H8.75V0.828125C8.75 0.647656 8.89766 0.5 9.07812 0.5H10.1719C10.3523 0.5 10.5 0.647656 10.5 0.828125V2.25H11.8125C12.5371 2.25 13.125 2.83789 13.125 3.5625ZM11.8125 13.0234V4.875H2.1875V13.0234C2.1875 13.1137 2.26133 13.1875 2.35156 13.1875H11.6484C11.7387 13.1875 11.8125 13.1137 11.8125 13.0234Z" /> -</g> -<defs> -<clipPath id="clip0_11557_149808"> -<rect width="14" height="15" transform="translate(0 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/caseFromScratch.svg b/web/src/assets/svgs/icons/caseFromScratch.svg deleted file mode 100644 index d19aab741..000000000 --- a/web/src/assets/svgs/icons/caseFromScratch.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 80 80" fill="none"> - <circle cx="40" cy="40" r="39.5" fill="#2A1260" stroke="#BECCE5"/> - <path d="M47.0508 17C48.2809 17 49.443 17.5664 50.2012 18.5352L57.1504 27.4141C57.701 28.1177 57.9999 28.9855 58 29.8789V59C58 61.2091 56.2091 63 54 63H26L25.7939 62.9951C23.6806 62.8879 22 61.14 22 59V21C22 18.7909 23.7909 17 26 17H47.0508ZM26 19C24.8954 19 24 19.8954 24 21V59C24 60.1046 24.8954 61 26 61H54C55.1046 61 56 60.1046 56 59V29.8789C56 29.7509 55.986 29.6243 55.9619 29.5H47V19H26ZM51.5 49.5H29V46.5H51.5V49.5ZM51.5 39.5H29V36.5H51.5V39.5ZM48 28.5H55.4609L48.626 19.7676C48.454 19.5478 48.2394 19.3715 48 19.2422V28.5Z" fill="white"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/chart.svg b/web/src/assets/svgs/icons/chart.svg deleted file mode 100644 index ddb1787bb..000000000 --- a/web/src/assets/svgs/icons/chart.svg +++ /dev/null @@ -1,15 +0,0 @@ -<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_21837_70275)"> -<g clip-path="url(#clip1_21837_70275)"> -<path d="M11.3344 10.125H11.9469C12.1219 10.125 12.2969 9.95 12.2969 9.775V3.475C12.2969 3.3 12.1219 3.125 11.9469 3.125H11.3344C11.1594 3.125 10.9844 3.3 10.9844 3.475V9.775C10.9844 9.95 11.1594 10.125 11.3344 10.125ZM6.08437 10.125H6.69688C6.87187 10.125 7.04688 9.95 7.04688 9.775V4.35C7.04688 4.175 6.87187 4 6.69688 4H6.08437C5.90938 4 5.73438 4.175 5.73438 4.35V9.775C5.73438 9.95 5.90938 10.125 6.08437 10.125ZM8.70937 10.125H9.32188C9.49688 10.125 9.67188 9.95 9.67188 9.775V6.1C9.67188 5.925 9.49688 5.75 9.32188 5.75H8.70937C8.53437 5.75 8.35938 5.925 8.35938 6.1V9.775C8.35938 9.95 8.53437 10.125 8.70937 10.125ZM14.0469 11.4375H1.79688V2.6875C1.79688 2.44578 1.60109 2.25 1.35938 2.25H0.921875C0.680156 2.25 0.484375 2.44578 0.484375 2.6875V11.875C0.484375 12.3582 0.876211 12.75 1.35938 12.75H14.0469C14.2886 12.75 14.4844 12.5542 14.4844 12.3125V11.875C14.4844 11.6333 14.2886 11.4375 14.0469 11.4375ZM3.45938 10.125H4.07187C4.24687 10.125 4.42188 9.95 4.42188 9.775V7.85C4.42188 7.675 4.24687 7.5 4.07187 7.5H3.45938C3.28438 7.5 3.10938 7.675 3.10938 7.85V9.775C3.10938 9.95 3.28438 10.125 3.45938 10.125Z"/> -</g> -</g> -<defs> -<clipPath id="clip0_21837_70275"> -<rect width="14" height="14" fill="white" transform="translate(0.484375 0.5)"/> -</clipPath> -<clipPath id="clip1_21837_70275"> -<rect width="14" height="14" fill="white" transform="translate(0.484375 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/chat.svg b/web/src/assets/svgs/icons/chat.svg deleted file mode 100644 index a2695a81d..000000000 --- a/web/src/assets/svgs/icons/chat.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_14018_54599)"> -<path d="M4.50207 7C3.94895 7 3.50207 7.44688 3.50207 8C3.50207 8.55312 3.94895 9 4.50207 9C5.0552 9 5.50207 8.55312 5.50207 8C5.50207 7.44688 5.0552 7 4.50207 7ZM8.00207 7C7.44895 7 7.00207 7.44688 7.00207 8C7.00207 8.55312 7.44895 9 8.00207 9C8.5552 9 9.00207 8.55312 9.00207 8C9.00207 7.44688 8.5552 7 8.00207 7ZM11.5021 7C10.9489 7 10.5021 7.44688 10.5021 8C10.5021 8.55312 10.9489 9 11.5021 9C12.0552 9 12.5021 8.55312 12.5021 8C12.5021 7.44688 12.0552 7 11.5021 7ZM8.00207 1.5C3.58332 1.5 0.00207401 4.40937 0.00207401 8C0.00207401 9.4875 0.623949 10.85 1.6552 11.9469C1.18957 13.1781 0.220824 14.2219 0.205199 14.2344C-0.00105099 14.4531 -0.057301 14.7719 0.061449 15.0469C0.180199 15.3219 0.452074 15.5 0.752074 15.5C2.67395 15.5 4.18957 14.6969 5.09895 14.0531C6.00207 14.3375 6.97707 14.5 8.00207 14.5C12.4208 14.5 16.0021 11.5906 16.0021 8C16.0021 4.40937 12.4208 1.5 8.00207 1.5ZM8.00207 13C7.1677 13 6.3427 12.8719 5.55207 12.6219L4.8427 12.3969L4.23332 12.8281C3.78645 13.1438 3.17395 13.4969 2.43645 13.7344C2.66457 13.3562 2.88645 12.9312 3.05832 12.4781L3.38957 11.6L2.74582 10.9187C2.1802 10.3156 1.50207 9.31875 1.50207 8C1.50207 5.24375 4.4177 3 8.00207 3C11.5864 3 14.5021 5.24375 14.5021 8C14.5021 10.7563 11.5864 13 8.00207 13Z"/> -</g> -<defs> -<clipPath id="clip0_14018_54599"> -<rect width="16" height="17" transform="translate(0 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/check-circle-outline.svg b/web/src/assets/svgs/icons/check-circle-outline.svg deleted file mode 100644 index 7f5c00b2b..000000000 --- a/web/src/assets/svgs/icons/check-circle-outline.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_13289_179292)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M0 8.5C0 4.08214 3.58214 0.5 8 0.5C12.4179 0.5 16 4.08214 16 8.5C16 12.9179 12.4179 16.5 8 16.5C3.58214 16.5 0 12.9179 0 8.5ZM1.35714 8.5C1.35714 12.1679 4.33214 15.1429 8 15.1429C11.6679 15.1429 14.6429 12.1679 14.6429 8.5C14.6429 4.83214 11.6679 1.85714 8 1.85714C4.33214 1.85714 1.35714 4.83214 1.35714 8.5ZM10.5017 5.66016H11.3392C11.4553 5.66016 11.5232 5.7923 11.4535 5.88694L7.6928 11.1012C7.64024 11.1746 7.57095 11.2344 7.49067 11.2756C7.4104 11.3168 7.32145 11.3384 7.2312 11.3384C7.14095 11.3384 7.052 11.3168 6.97172 11.2756C6.89144 11.2344 6.82215 11.1746 6.76959 11.1012L4.54459 8.01551C4.47673 7.92087 4.54459 7.78873 4.66066 7.78873H5.49816C5.68209 7.78873 5.85352 7.87801 5.96066 8.02623L7.23209 9.79051L10.0392 5.89766C10.1464 5.74766 10.3196 5.66016 10.5017 5.66016Z" fill="#00C42B"/> -</g> -<defs> -<clipPath id="clip0_13289_179292"> -<rect width="16" height="16" fill="white" transform="translate(0 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/clock.svg b/web/src/assets/svgs/icons/clock.svg deleted file mode 100644 index 26231aaf4..000000000 --- a/web/src/assets/svgs/icons/clock.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="17" viewBox="0 0 16 17" fill="none"> - <g clip-path="url(#clip0_19668_84870)"> - <path d="M8 0.5C3.58065 0.5 0 4.08065 0 8.5C0 12.9194 3.58065 16.5 8 16.5C12.4194 16.5 16 12.9194 16 8.5C16 4.08065 12.4194 0.5 8 0.5ZM8 14.9516C4.43548 14.9516 1.54839 12.0645 1.54839 8.5C1.54839 4.93548 4.43548 2.04839 8 2.04839C11.5645 2.04839 14.4516 4.93548 14.4516 8.5C14.4516 12.0645 11.5645 14.9516 8 14.9516ZM9.99355 11.5839L7.25484 9.59355C7.15484 9.51935 7.09677 9.40323 7.09677 9.28065V3.98387C7.09677 3.77097 7.27097 3.59677 7.48387 3.59677H8.51613C8.72903 3.59677 8.90323 3.77097 8.90323 3.98387V8.55484L11.0581 10.1226C11.2323 10.2484 11.2677 10.4903 11.1419 10.6645L10.5355 11.5C10.4097 11.671 10.1677 11.7097 9.99355 11.5839Z"/> - </g> - <defs> - <clipPath id="clip0_19668_84870"> - <rect width="16" height="16" fill="white" transform="translate(0 0.5)"/> - </clipPath> - </defs> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/close-circle.svg b/web/src/assets/svgs/icons/close-circle.svg deleted file mode 100644 index 1f4c4efd6..000000000 --- a/web/src/assets/svgs/icons/close-circle.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M0 8C0 3.58214 3.58214 0 8 0C12.4179 0 16 3.58214 16 8C16 12.4179 12.4179 16 8 16C3.58214 16 0 12.4179 0 8ZM1.35714 8C1.35714 11.6679 4.33214 14.6429 8 14.6429C11.6679 14.6429 14.6429 11.6679 14.6429 8C14.6429 4.33214 11.6679 1.35714 8 1.35714C4.33214 1.35714 1.35714 4.33214 1.35714 8ZM10.9533 5.03302C11.0319 5.03302 11.0962 5.0973 11.0962 5.17587C11.0962 5.2098 11.0855 5.24373 11.064 5.26873L8.74082 8.03659L11.0605 10.8027C11.0819 10.8294 11.0944 10.8616 11.0944 10.8955C11.0944 10.9759 11.0301 11.0384 10.9515 11.0384L9.77297 11.033L7.99975 8.91873L6.22654 11.0348L5.04618 11.0402C4.96761 11.0402 4.90332 10.9759 4.90332 10.8973C4.9037 10.8634 4.91567 10.8306 4.93725 10.8044L7.26046 8.03837L4.93725 5.27052C4.91582 5.24373 4.90332 5.21159 4.90332 5.17766C4.90332 5.0973 4.96761 5.0348 5.04618 5.0348L6.22654 5.04016L7.99975 7.15445L9.77475 5.03837L10.9533 5.03302Z" fill="none"/> -</svg> diff --git a/web/src/assets/svgs/icons/close.svg b/web/src/assets/svgs/icons/close.svg deleted file mode 100644 index e2c3c9d66..000000000 --- a/web/src/assets/svgs/icons/close.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"> - <path d="M12.9029 11.0657L9.22641 7.38919L12.863 3.75264C13.3092 3.30641 13.3052 2.57866 12.8541 2.12752L12.0371 1.31052C11.5859 0.859377 10.8582 0.8554 10.412 1.30164L6.7754 4.93818L3.09889 1.26167C2.64776 0.810535 1.92 0.806558 1.47377 1.25279L0.665647 2.06092C0.219412 2.50715 0.223389 3.2349 0.674528 3.68604L4.35104 7.36255L0.714489 10.9991C0.268254 11.4453 0.272231 12.1731 0.72337 12.6242L1.54037 13.4412C1.99151 13.8924 2.71926 13.8963 3.1655 13.4501L6.80205 9.81356L10.4786 13.4901C10.9297 13.9412 11.6574 13.9452 12.1037 13.4989L12.9118 12.6908C13.358 12.2446 13.3541 11.5168 12.9029 11.0657Z" /> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/code.svg b/web/src/assets/svgs/icons/code.svg deleted file mode 100644 index ee8f0de12..000000000 --- a/web/src/assets/svgs/icons/code.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M16.4425 7.32787C16.7196 7.01999 17.1938 6.99503 17.5017 7.27213L19.2392 8.83587C19.9756 9.49853 20.5864 10.0482 21.0058 10.5468C21.4468 11.071 21.7603 11.6343 21.7603 12.3296C21.7603 13.0249 21.4468 13.5882 21.0058 14.1124C20.5864 14.611 19.9756 15.1607 19.2392 15.8233L17.5017 17.3871C17.1938 17.6642 16.7196 17.6392 16.4425 17.3313C16.1654 17.0234 16.1904 16.5492 16.4983 16.2721L18.1947 14.7453C18.9826 14.0362 19.5138 13.5558 19.8579 13.1468C20.1882 12.7542 20.2603 12.525 20.2603 12.3296C20.2603 12.1342 20.1882 11.905 19.8579 11.5124C19.5138 11.1034 18.9826 10.623 18.1947 9.91389L16.4983 8.38707C16.1904 8.10997 16.1654 7.63576 16.4425 7.32787Z"/> -<path d="M7.50178 8.38707C7.80966 8.10997 7.83462 7.63576 7.55752 7.32787C7.28043 7.01999 6.80621 6.99503 6.49833 7.27213L4.76084 8.83587C4.0245 9.49853 3.41369 10.0482 2.99428 10.5468C2.55325 11.071 2.23975 11.6343 2.23975 12.3296C2.23975 13.0249 2.55325 13.5882 2.99428 14.1124C3.41369 14.611 4.02449 15.1607 4.76082 15.8233L6.49833 17.3871C6.80621 17.6642 7.28043 17.6392 7.55752 17.3313C7.83462 17.0234 7.80966 16.5492 7.50178 16.2721L5.80531 14.7453C5.01743 14.0362 4.48623 13.5558 4.14213 13.1468C3.81188 12.7542 3.73975 12.525 3.73975 12.3296C3.73975 12.1342 3.81188 11.905 4.14213 11.5124C4.48623 11.1034 5.01743 10.623 5.80531 9.91389L7.50178 8.38707Z"/> -<path d="M14.1816 4.2755C14.5817 4.3827 14.8191 4.79396 14.7119 5.19406L10.7383 20.0238C10.6311 20.4239 10.2198 20.6613 9.81974 20.5541C9.41964 20.4469 9.18221 20.0356 9.28941 19.6355L13.263 4.80583C13.3702 4.40573 13.7815 4.16829 14.1816 4.2755Z"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/curate-image.png b/web/src/assets/svgs/icons/curate-image.png deleted file mode 100644 index 9a61ecfde00cb15f2185358590d177c98b94707f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13822 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 diff --git a/web/src/assets/svgs/icons/curate.svg b/web/src/assets/svgs/icons/curate.svg deleted file mode 100644 index 2cd271e6d..000000000 --- a/web/src/assets/svgs/icons/curate.svg +++ /dev/null @@ -1,30 +0,0 @@ -<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<defs> -<linearGradient id="gradientcurate" x1="23.7907" y1="45.796" x2="23.7907" y2="2.12909" gradientUnits="userSpaceOnUse"> -<stop stop-color="#9013FE"/> -<stop offset="1" stop-color="#4D00B4"/> -</linearGradient> -</defs> -<path fill-rule="evenodd" clip-rule="evenodd" d="M24.2665 0.117778L44.219 11.6782C44.4901 11.8352 44.6571 12.1255 44.6571 12.4397V35.5603C44.6571 35.8745 44.4901 36.1648 44.219 36.3218L24.2665 47.8822C23.9955 48.0393 23.6616 48.0393 23.3905 47.8822L3.43808 36.3218C3.167 36.1648 3 35.8745 3 35.5603V12.4397C3 12.1255 3.167 11.8352 3.43808 11.6782L23.3905 0.117778C23.6616 -0.0392594 23.9955 -0.0392594 24.2665 0.117778Z" fill="#AE52FF"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M24.2287 45.6782L42.3115 35.2011C42.5826 35.044 42.7496 34.7537 42.7496 34.4396V13.4855C42.7496 13.1714 42.5826 12.8811 42.3115 12.724L24.2287 2.24687C23.9576 2.08984 23.6237 2.08984 23.3527 2.24687L5.26987 12.724C4.99879 12.8811 4.83179 13.1714 4.83179 13.4855V34.4396C4.83179 34.7537 4.99879 35.044 5.26987 35.2011L23.3527 45.6782C23.6237 45.8353 23.9576 45.8353 24.2287 45.6782Z" fill="url(#gradientcurate)"/> -<path d="M35.8349 12.3307H11.7463V13.699H35.8349V12.3307Z" fill="#9013FE"/> -<path d="M35.8349 16.6635H11.7463V18.0318H35.8349V16.6635Z" fill="#9013FE"/> -<path d="M35.8349 20.9973H11.7463V22.3657H35.8349V20.9973Z" fill="#9013FE"/> -<path d="M35.8349 25.3302H11.7463V26.6985H35.8349V25.3302Z" fill="#9013FE"/> -<path d="M35.8349 29.6641H11.7463V31.0324H35.8349V29.6641Z" fill="#9013FE"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M23.8421 46.0261L4.84072 35.2745C4.74345 35.2195 4.70905 35.0957 4.76389 34.9981C4.78196 34.9659 4.80843 34.9393 4.84045 34.9211L23.9422 24.0753L42.7539 34.903C42.8508 34.9588 42.8842 35.0828 42.8287 35.18C42.8108 35.2112 42.785 35.2372 42.7539 35.2551L24.042 46.0254C23.9801 46.061 23.9042 46.0613 23.8421 46.0261Z" fill="#4D00B4"/> -<path d="M13.7457 33.7895L29.123 43.2158C29.3015 43.3252 29.5346 43.2687 29.6436 43.0896C29.7527 42.9104 29.6963 42.6765 29.5178 42.5671L14.1406 33.1407C13.9621 33.0313 13.729 33.0878 13.6199 33.267C13.5109 33.4461 13.5672 33.6801 13.7457 33.7895Z" fill="#9013FE"/> -<path d="M22.9873 28.4675L38.3646 37.8939C38.5431 38.0033 38.7762 37.9468 38.8853 37.7676C38.9943 37.5885 38.938 37.3545 38.7595 37.2451L23.3821 27.8187C23.2036 27.7093 22.9705 27.7658 22.8615 27.945C22.7525 28.1241 22.8088 28.358 22.9873 28.4675Z" fill="#9013FE"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M23.9254 32.778L30.9279 28.722C31.0113 28.6737 31.0627 28.5843 31.0627 28.4877V13.0504C31.0627 12.9537 31.0113 12.8644 30.9279 12.8161L23.9254 8.76007C23.842 8.71177 23.7393 8.71177 23.656 8.76007L16.6535 12.8161C16.5701 12.8644 16.5187 12.9537 16.5187 13.0504V28.4877C16.5187 28.5843 16.5701 28.6737 16.6535 28.722L23.656 32.778C23.7393 32.8263 23.842 32.8263 23.9254 32.778Z" fill="white"/> -<path d="M22.5988 18.3067L20.26 15.9544C20.1195 15.8131 20.1195 15.584 20.26 15.4426L20.7689 14.9308C20.9094 14.7895 21.1372 14.7895 21.2777 14.9308L22.8533 16.5154L26.2278 13.1214C26.3684 12.9801 26.5962 12.9801 26.7367 13.1214L27.2455 13.6332C27.3861 13.7745 27.3861 14.0036 27.2455 14.145L23.1077 18.3067C22.9672 18.4481 22.7393 18.4481 22.5988 18.3067Z" fill="#4D00B4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M14.8732 37.4152L20.2126 34.3215C20.296 34.2732 20.3474 34.1839 20.3474 34.0872V27.9C20.3474 27.8034 20.296 27.7141 20.2126 27.6657L14.8732 24.5721C14.7898 24.5238 14.6871 24.5238 14.6037 24.5721L9.26431 27.6657C9.1809 27.7141 9.12952 27.8034 9.12952 27.9V34.0872C9.12952 34.1839 9.1809 34.2732 9.26431 34.3215L14.6037 37.4152C14.6871 37.4635 14.7898 37.4635 14.8732 37.4152Z" fill="#EBD4FF"/> -<path d="M14.7385 33.6159C16.1818 33.6159 17.3519 32.4417 17.3519 30.9933C17.3519 29.5448 16.1818 28.3706 14.7385 28.3706C13.2952 28.3706 12.1251 29.5448 12.1251 30.9933C12.1251 32.4417 13.2952 33.6159 14.7385 33.6159ZM14.7385 32.7037C13.7972 32.7037 13.0341 31.9379 13.0341 30.9933C13.0341 30.0486 13.7972 29.2828 14.7385 29.2828C15.6798 29.2828 16.4429 30.0486 16.4429 30.9933C16.4429 31.9379 15.6798 32.7037 14.7385 32.7037Z" fill="#9013FE"/> -<path d="M29.775 32.5525C30.026 32.5525 30.2295 32.3483 30.2295 32.0964C30.2295 31.8445 30.026 31.6403 29.775 31.6403C29.5239 31.6403 29.3204 31.8445 29.3204 32.0964C29.3204 32.3483 29.5239 32.5525 29.775 32.5525Z" fill="white"/> -<path d="M30.9112 33.2363C31.1622 33.2363 31.3657 33.0321 31.3657 32.7802C31.3657 32.5283 31.1622 32.3241 30.9112 32.3241C30.6602 32.3241 30.4567 32.5283 30.4567 32.7802C30.4567 33.0321 30.6602 33.2363 30.9112 33.2363Z" fill="white"/> -<path d="M32.0474 33.92C32.2984 33.92 32.5019 33.7158 32.5019 33.4639C32.5019 33.212 32.2984 33.0078 32.0474 33.0078C31.7964 33.0078 31.5929 33.212 31.5929 33.4639C31.5929 33.7158 31.7964 33.92 32.0474 33.92Z" fill="white"/> -<path d="M36.441 36.6571C36.692 36.6571 36.8955 36.4529 36.8955 36.201C36.8955 35.9491 36.692 35.7449 36.441 35.7449C36.1899 35.7449 35.9865 35.9491 35.9865 36.201C35.9865 36.4529 36.1899 36.6571 36.441 36.6571Z" fill="white"/> -<path d="M19.3213 37.1136C19.5723 37.1136 19.7758 36.9094 19.7758 36.6575C19.7758 36.4056 19.5723 36.2014 19.3213 36.2014C19.0703 36.2014 18.8668 36.4056 18.8668 36.6575C18.8668 36.9094 19.0703 37.1136 19.3213 37.1136Z" fill="white"/> -<path d="M23.1847 39.5454C23.4357 39.5454 23.6392 39.3412 23.6392 39.0893C23.6392 38.8374 23.4357 38.6332 23.1847 38.6332C22.9337 38.6332 22.7302 38.8374 22.7302 39.0893C22.7302 39.3412 22.9337 39.5454 23.1847 39.5454Z" fill="white"/> -<path d="M24.3208 40.2301C24.5718 40.2301 24.7753 40.0259 24.7753 39.774C24.7753 39.5221 24.5718 39.3179 24.3208 39.3179C24.0698 39.3179 23.8663 39.5221 23.8663 39.774C23.8663 40.0259 24.0698 40.2301 24.3208 40.2301Z" fill="white"/> - -</svg> diff --git a/web/src/assets/svgs/icons/dice.svg b/web/src/assets/svgs/icons/dice.svg deleted file mode 100644 index 7f527f391..000000000 --- a/web/src/assets/svgs/icons/dice.svg +++ /dev/null @@ -1,27 +0,0 @@ -<svg height="800px" width="800px" version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" - viewBox="0 0 512 512" xml:space="preserve"> -<g> - <path class="st0" d="M454.609,111.204L280.557,6.804C272.992,2.268,264.503,0,255.999,0c-8.507,0-16.995,2.268-24.557,6.796 - L57.391,111.204c-5.346,3.202-9.917,7.369-13.556,12.192l207.904,124.708c2.622,1.575,5.9,1.575,8.519,0L468.16,123.396 - C464.524,118.573,459.951,114.406,454.609,111.204z M157.711,130.313c-10.96,7.611-28.456,7.422-39.081-0.452 - c-10.618-7.859-10.342-20.413,0.618-28.031c10.964-7.626,28.46-7.422,39.081,0.438C168.95,110.134,168.674,122.68,157.711,130.313z - M274.159,131.021c-10.594,7.362-27.496,7.166-37.762-0.429c-10.263-7.596-9.992-19.727,0.599-27.089 - c10.591-7.362,27.492-7.174,37.759,0.43C285.018,111.528,284.75,123.659,274.159,131.021z M391.908,132.702 - c-10.964,7.618-28.461,7.414-39.085-0.444c-10.617-7.86-10.343-20.42,0.621-28.046c10.957-7.61,28.456-7.422,39.078,0.452 - C403.147,112.523,402.868,125.076,391.908,132.702z"/> - <path class="st0" d="M246.136,258.366L38.007,133.523c-2.46,5.802-3.798,12.117-3.798,18.62v208.084 - c0,16.773,8.797,32.311,23.182,40.946l174.051,104.392c5.829,3.497,12.204,5.629,18.714,6.435V265.464 - C250.156,262.556,248.63,259.858,246.136,258.366z M75.845,369.736c-12.056-6.57-21.829-21.671-21.829-33.727 - c0-12.056,9.773-16.502,21.829-9.932c12.056,6.571,21.826,21.671,21.826,33.728C97.671,371.861,87.901,376.307,75.845,369.736z - M75.845,247.87c-12.056-6.579-21.829-21.679-21.829-33.728c0-12.056,9.773-16.502,21.829-9.931 - c12.056,6.57,21.826,21.671,21.826,33.728C97.671,249.987,87.901,254.44,75.845,247.87z M197.715,436.158 - c-12.052-6.57-21.826-21.671-21.826-33.728c0-12.048,9.773-16.494,21.826-9.924c12.056,6.571,21.826,21.671,21.826,33.72 - C219.541,438.284,209.771,442.729,197.715,436.158z M197.715,314.292c-12.052-6.571-21.826-21.671-21.826-33.728 - s9.773-16.502,21.826-9.931c12.056,6.57,21.826,21.671,21.826,33.727C219.541,316.417,209.771,320.862,197.715,314.292z"/> - <path class="st0" d="M473.993,133.523l-208.13,124.843c-2.494,1.492-4.02,4.19-4.02,7.099V512 - c6.511-0.806,12.886-2.938,18.714-6.435l174.052-104.392c14.38-8.635,23.182-24.173,23.182-40.946V152.142 - C477.791,145.64,476.453,139.325,473.993,133.523z M370.478,355.11c-19.287,10.512-34.922,3.398-34.922-15.892 - c0-19.282,15.635-43.447,34.922-53.951c19.293-10.519,34.925-3.406,34.925,15.884C405.403,320.434,389.771,344.598,370.478,355.11z - "/> -</g> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/dispute-resolver.svg b/web/src/assets/svgs/icons/dispute-resolver.svg deleted file mode 100644 index 8c3d66861..000000000 --- a/web/src/assets/svgs/icons/dispute-resolver.svg +++ /dev/null @@ -1,19 +0,0 @@ -<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_12574_209960)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M47.9531 23.909C47.9531 37.137 37.2072 47.8517 23.9623 47.8517C10.7173 47.8517 -0.0285645 37.137 -0.0285645 23.909C-0.0285645 10.681 10.7173 -0.0336914 23.9623 -0.0336914C37.2072 -0.0336914 47.9531 10.681 47.9531 23.909ZM45.6531 23.909C45.6531 35.8619 35.9418 45.5517 23.9623 45.5517C11.9828 45.5517 2.27144 35.8619 2.27144 23.909C2.27144 11.9561 11.9828 2.26631 23.9623 2.26631C35.9418 2.26631 45.6531 11.9561 45.6531 23.909Z" fill="#9013FE"/> -<path d="M23.9623 45.5515C35.9419 45.5515 45.6532 35.8617 45.6532 23.9088C45.6532 11.9559 35.9419 2.26611 23.9623 2.26611C11.9828 2.26611 2.27148 11.9559 2.27148 23.9088C2.27148 35.8617 11.9828 45.5515 23.9623 45.5515Z" fill="#1E075F"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M21.6679 19L27.9491 19.2772L30.4921 24.8554L26.9044 29.9535L20.5891 29.5543L18 23.5103L21.6679 19ZM25.7045 28.4736L22.3729 29.3293L26.2908 29.5758L25.7045 28.4736ZM29.2846 26.0504L26.3684 28.1853L26.9478 29.2982L29.2846 26.0504ZM20.828 25.0979L20.9236 28.854L24.7783 27.8698L20.828 25.0979ZM18.3785 23.9013L20.1963 28.1097L20.1207 24.2638L18.3785 23.9013ZM27.1188 22.1482L26.4083 27.31L29.8107 24.8325L27.1188 22.1482ZM26.2261 22.2192L21.678 24.172L25.5664 27.1265L26.2261 22.2192ZM21.0846 20.0538L18.4914 23.2717L20.2252 23.6326L21.0846 20.0538ZM27.9052 20.0722L27.3388 21.2149L29.4471 23.321L27.9052 20.0722ZM22.0648 19.7028L21.3013 22.9364L25.6996 21.2407L22.0648 19.7028ZM23.4972 19.3777L26.5512 20.6904L27.1995 19.5254L23.4972 19.3777Z" fill="#9013FE"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M43.5332 31.5745C43.5332 33.2929 40.1347 34.6859 35.9425 34.6859C31.7503 34.6859 28.3518 33.2929 28.3518 31.5745C28.3518 29.856 43.5332 29.856 43.5332 31.5745ZM43.0032 31.5904C43.0032 31.945 39.8338 32.2325 35.9243 32.2325C32.0148 32.2325 28.8455 31.945 28.8455 31.5904C28.8455 31.2357 32.0148 30.9482 35.9243 30.9482C39.8338 30.9482 43.0032 31.2357 43.0032 31.5904Z" fill="white"/> -<path d="M35.9243 32.2325C39.8338 32.2325 43.0032 31.945 43.0032 31.5904C43.0032 31.2357 39.8338 30.9482 35.9243 30.9482C32.0148 30.9482 28.8455 31.2357 28.8455 31.5904C28.8455 31.945 32.0148 32.2325 35.9243 32.2325Z" fill="#009AFF"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M19.5329 31.5745C19.5329 33.2929 16.1344 34.6859 11.9422 34.6859C7.75002 34.6859 4.35156 33.2929 4.35156 31.5745C4.35156 29.856 19.5329 29.856 19.5329 31.5745ZM19.0029 31.5904C19.0029 31.945 15.8336 32.2325 11.9241 32.2325C8.01453 32.2325 4.84521 31.945 4.84521 31.5904C4.84521 31.2357 8.01453 30.9482 11.9241 30.9482C15.8336 30.9482 19.0029 31.2357 19.0029 31.5904Z" fill="white"/> -<path d="M11.9241 32.2325C15.8336 32.2325 19.0029 31.945 19.0029 31.5904C19.0029 31.2357 15.8336 30.9482 11.9241 30.9482C8.01453 30.9482 4.84521 31.2357 4.84521 31.5904C4.84521 31.945 8.01453 32.2325 11.9241 32.2325Z" fill="#009AFF"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M13.0977 20.8494C13.0977 21.642 12.4536 22.2846 11.6592 22.2846C10.8647 22.2846 10.2207 21.642 10.2207 20.8494C10.2207 20.0567 10.8647 19.4141 11.6592 19.4141C12.4536 19.4141 13.0977 20.0567 13.0977 20.8494ZM12.492 20.8495C12.492 21.3084 12.1192 21.6805 11.6592 21.6805C11.1993 21.6805 10.8264 21.3084 10.8264 20.8495C10.8264 20.3906 11.1993 20.0186 11.6592 20.0186C12.1192 20.0186 12.492 20.3906 12.492 20.8495Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M37.9307 20.8494C37.9307 21.642 37.2866 22.2846 36.4922 22.2846C35.6977 22.2846 35.0537 21.642 35.0537 20.8494C35.0537 20.0567 35.6977 19.4141 36.4922 19.4141C37.2866 19.4141 37.9307 20.0567 37.9307 20.8494ZM37.3248 20.8495C37.3248 21.3084 36.9519 21.6805 36.492 21.6805C36.032 21.6805 35.6592 21.3084 35.6592 20.8495C35.6592 20.3906 36.032 20.0186 36.492 20.0186C36.9519 20.0186 37.3248 20.3906 37.3248 20.8495Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M24.1513 11.5284L24.1891 2.76554C24.1897 2.61952 24.0716 2.50063 23.9253 2.5C23.779 2.49938 23.6598 2.61724 23.6592 2.76326L23.6213 11.5261C23.6212 11.5601 23.6275 11.5926 23.6391 11.6226L21.4514 13.8054C18.2323 14.4442 15.1619 16.3617 12.2454 19.5382C12.6048 19.6985 12.8862 20.0015 13.0173 20.3751C16.4781 16.5783 20.0976 14.6995 23.8863 14.6995C27.6759 14.6995 31.4235 16.5788 35.1348 20.3732C35.266 20.0008 35.5467 19.6987 35.9051 19.5386C32.779 16.3552 29.5821 14.4368 26.3174 13.8018L24.1335 11.6227C24.1448 11.5934 24.1511 11.5616 24.1513 11.5284ZM37.8675 20.4274C37.9086 20.5608 37.9307 20.7025 37.9307 20.8494C37.9307 21.1081 37.8621 21.3509 37.742 21.5605H39.8428C40.1564 21.5605 40.4106 21.3069 40.4106 20.994C40.4106 20.681 40.1564 20.4274 39.8428 20.4274H37.8675ZM36.9471 22.2114C36.8197 22.2537 36.6843 22.2788 36.5438 22.2837L41.9958 30.7585C42.1904 30.8007 42.37 30.8456 42.5324 30.8934L36.9471 22.2114ZM28.483 32.1532C28.4777 32.1418 28.4726 32.1304 28.4677 32.1189L28.4419 32.1532H28.483ZM29.3986 30.8801C29.5734 30.8302 29.767 30.7835 29.9771 30.7399L36.3369 22.2764C36.1977 22.2615 36.0644 22.2267 35.9399 22.1751L29.3986 30.8801ZM8.28877 20.4274H10.2839C10.2428 20.5608 10.2207 20.7025 10.2207 20.8494C10.2207 21.1081 10.2893 21.3509 10.4094 21.5605H8.28877C7.97517 21.5605 7.72095 21.3069 7.72095 20.994C7.72095 20.681 7.97517 20.4274 8.28877 20.4274ZM4.46899 32.1531L4.47705 32.1409L4.48259 32.1531H4.46899ZM5.83511 30.7703C5.63533 30.8148 5.45211 30.8623 5.28773 30.9129L11.0672 22.1579C11.1861 22.2115 11.3136 22.2495 11.4471 22.2691L5.83511 30.7703ZM18.4213 30.862C18.2488 30.8147 18.059 30.7704 17.8542 30.7289L11.6508 22.2846L11.6592 22.2846C11.8039 22.2846 11.9436 22.2633 12.0754 22.2237L18.4213 30.862ZM24.7082 13.5931L23.9244 12.811L23.1455 13.5882C23.3916 13.5737 23.6386 13.5664 23.8863 13.5664C24.1608 13.5664 24.4347 13.5753 24.7082 13.5931Z" fill="#E1BEFF"/> -</g> -<defs> -<clipPath id="clip0_12574_209960"> -<rect width="48" height="48" fill="white"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/dispute.svg b/web/src/assets/svgs/icons/dispute.svg deleted file mode 100644 index e3622bf1d..000000000 --- a/web/src/assets/svgs/icons/dispute.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg viewBox="0 0 275 275" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M256.227 68.75L137.149 0L18.0703 68.75V206.25L137.149 275L256.227 206.25V68.75ZM241.717 76.9788L137.055 16.5522L32.3927 76.9788V197.832L137.055 258.259L241.717 197.832V76.9788Z" fill="#F0F9FF"/> -<path d="M137.057 16.5508L241.719 76.9774V197.831L137.057 258.257L32.3945 197.831V76.9774L137.057 16.5508Z" fill="#7E1BD4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M137.15 48.9913L60.5017 93.2443V181.75L137.15 226.003L213.799 181.75V93.2443L137.15 48.9913ZM216.156 91.8834L137.15 46.2695L58.1445 91.8834V183.111L137.15 228.725L216.156 183.111V91.8834Z" fill="#B45FFF"/> -<path d="M187.193 45.1485V181.704L137.369 153.489L87.125 181.704V45.626L137.573 16.5L187.193 45.1485Z" fill="#4D00B4"/> -<path d="M181.489 41.8515V178.465L179.96 177.599V40.9688L181.489 41.8515Z" fill="#9013FE"/> -<path d="M94.529 41.3496V177.545L93 178.403V42.2323L94.529 41.3496Z" fill="#9013FE"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M117.586 52.6394L114.933 54.815L116.182 51.6191L113.293 49.7678L116.718 49.9682L117.586 46.6484L118.454 49.9682L121.88 49.7678L118.991 51.6191L120.24 54.815L117.586 52.6394ZM127.744 52.6394L125.09 54.815L126.339 51.6191L123.45 49.7678L126.876 49.9682L127.744 46.6484L128.611 49.9682L132.037 49.7678L129.148 51.6191L130.397 54.815L127.744 52.6394ZM135.248 54.815L137.901 52.6394L140.554 54.815L139.305 51.6191L142.194 49.7678L138.769 49.9682L137.901 46.6484L137.033 49.9682L133.608 49.7678L136.497 51.6191L135.248 54.815ZM148.059 52.6394L145.405 54.815L146.654 51.6191L143.765 49.7678L147.191 49.9682L148.059 46.6484L148.926 49.9682L152.352 49.7678L149.463 51.6191L150.712 54.815L148.059 52.6394ZM155.562 54.815L158.216 52.6394L160.869 54.815L159.62 51.6191L162.509 49.7678L159.084 49.9682L158.216 46.6484L157.348 49.9682L153.922 49.7678L156.811 51.6191L155.562 54.815Z" fill="#FCFEFF"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M141.678 81.8553C141.678 83.8718 141.223 85.0319 140.487 85.6885L160.836 91.7608C161.394 91.2802 162.119 90.9873 162.915 90.9873C164.671 90.9873 166.095 92.4058 166.095 94.1556C166.095 95.4275 165.341 96.5213 164.255 97.0255L171.377 117.513C173.635 117.872 175.128 118.402 175.128 119.102C175.128 121.977 169.499 124.307 162.556 124.307C155.613 124.307 149.985 121.977 149.985 119.102C149.985 118.358 151.671 117.807 154.17 117.448L161.315 96.8909C160.659 96.5096 160.154 95.9021 159.905 95.1747C159.666 94.1774 159.107 93.548 158.23 93.2863C157.182 92.9736 156.155 92.9382 155.009 92.8987C153.561 92.8488 151.922 92.7924 149.807 92.1613L139.468 89.0763V110.149C140.273 110.724 140.799 111.661 140.799 112.723C140.799 113.428 140.566 114.076 140.175 114.603C141.226 115.382 141.909 116.624 141.909 118.029C141.909 119.729 140.91 121.192 139.468 121.88V126.28C144.163 126.525 147.74 127.791 147.74 129.315C147.74 129.341 147.739 129.367 147.737 129.392C155.315 130.046 160.548 131.437 160.548 133.048L160.585 135.295C160.585 137.533 150.503 139.329 138.044 139.329C125.585 139.329 115.503 137.496 115.503 135.258L115.43 133.048C115.43 131.462 120.496 130.09 127.879 129.424C127.875 129.388 127.873 129.352 127.873 129.315C127.873 127.815 131.335 126.566 135.918 126.293V121.951C134.395 121.295 133.329 119.787 133.329 118.029C133.329 116.625 134.012 115.382 135.062 114.603C134.672 114.077 134.438 113.428 134.438 112.724C134.438 111.598 135.03 110.612 135.918 110.05V88.017L124.127 84.4984C123.342 84.2643 122.193 83.6424 120.966 82.978L120.966 82.978C119.558 82.2159 118.047 81.3977 116.863 81.0443C116.042 80.7994 115.2 80.9769 114.336 81.5767C114.169 81.7122 113.989 81.8301 113.797 81.9302L120.903 102.374C123.266 102.734 124.842 103.273 124.842 103.993C124.842 106.867 119.214 109.198 112.271 109.198C105.328 109.198 99.6992 106.867 99.6992 103.993C99.6992 103.295 101.182 102.766 103.428 102.407L110.597 81.7825C109.723 81.218 109.143 80.2392 109.143 79.1237C109.143 77.3739 110.567 75.9554 112.323 75.9554C113.754 75.9554 114.964 76.8969 115.363 78.1918L133.638 83.645C133.538 83.14 133.484 82.5482 133.484 81.8553C133.484 79.1559 134.85 75.9659 137.581 72.2852C140.312 75.9659 141.678 79.1559 141.678 81.8553ZM163.626 97.241L170.635 117.405C166.213 116.813 159.475 116.794 154.909 117.35L161.925 97.165C162.237 97.2667 162.569 97.3235 162.915 97.3235C163.16 97.3235 163.397 97.2932 163.626 97.241ZM104.17 102.298L111.197 82.0838C111.548 82.2162 111.926 82.2921 112.323 82.2921C112.619 82.2921 112.904 82.2487 113.176 82.1736L120.162 102.271C115.587 101.683 108.672 101.692 104.17 102.298Z" fill="white"/> -<path d="M131.842 174.781L145.178 175.376L150.577 187.35L142.96 198.294L129.552 197.436L124.055 184.463L131.842 174.781ZM141.619 181.683L131.954 185.898L140.217 192.275L141.619 181.683ZM140.5 179.571L132.776 176.252L131.154 183.231L140.5 179.571ZM138.542 193.879L130.148 187.896L130.351 196.004L138.542 193.879ZM149.236 187.324L143.516 181.53L142.006 192.671L149.236 187.324ZM140.51 195.183L133.431 197.029L141.756 197.562L140.51 195.183ZM148.118 189.952L141.921 194.56L143.152 196.962L148.118 189.952ZM145.187 177.049L143.983 179.516L148.463 184.061L145.187 177.049ZM143.687 175.869L135.82 175.55L142.309 178.383L143.687 175.869ZM130.693 177.01L125.183 183.955L128.867 184.734L130.693 177.01ZM128.645 186.096L124.943 185.314L128.806 194.397L128.645 186.096Z" fill="white"/> -</svg> diff --git a/web/src/assets/svgs/icons/doc.svg b/web/src/assets/svgs/icons/doc.svg deleted file mode 100644 index bf2adf79d..000000000 --- a/web/src/assets/svgs/icons/doc.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M11.2308 7.75V8.625C11.2308 8.83125 11.0577 9 10.8462 9H5.46154C5.25 9 5.07692 8.83125 5.07692 8.625V7.75C5.07692 7.54375 5.25 7.375 5.46154 7.375H10.8462C11.0577 7.375 11.2308 7.54375 11.2308 7.75ZM10.8462 10H5.46154C5.25 10 5.07692 10.1687 5.07692 10.375V11.25C5.07692 11.4563 5.25 11.625 5.46154 11.625H10.8462C11.0577 11.625 11.2308 11.4563 11.2308 11.25V10.375C11.2308 10.1687 11.0577 10 10.8462 10ZM14.3077 4.12187V14.5C14.3077 15.3281 13.6186 16 12.7692 16H3.53846C2.6891 16 2 15.3281 2 14.5V1.5C2 0.671875 2.6891 0 3.53846 0H10.0801C10.4872 0 10.8782 0.159375 11.1667 0.440625L13.8558 3.0625C14.1442 3.34063 14.3077 3.725 14.3077 4.12187ZM10.2051 1.62188V4H12.6442L10.2051 1.62188ZM12.7692 14.5V5.5H9.4359C9.00962 5.5 8.66667 5.16563 8.66667 4.75V1.5H3.53846V14.5H12.7692Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/dollar.svg b/web/src/assets/svgs/icons/dollar.svg deleted file mode 100644 index b6c4ae1f8..000000000 --- a/web/src/assets/svgs/icons/dollar.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="14" height="15" viewBox="0 0 14 15" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_22126_42353)"> -<path d="M6.81115 3.10177C6.25363 3.10177 5.82 3.2205 5.51026 3.45796C5.21085 3.6851 5.06115 4.07227 5.06115 4.61947C5.06115 4.86726 5.11277 5.07891 5.21602 5.25442C5.31926 5.42994 5.44832 5.57965 5.60318 5.70354C5.76838 5.82743 5.95422 5.93068 6.16071 6.01327C6.37752 6.08555 6.59433 6.14749 6.81115 6.19911V3.10177ZM4.82885 9.66814C4.81852 10.3496 4.96823 10.8864 5.27796 11.2788C5.5877 11.6711 6.09876 11.8776 6.81115 11.8982V8.15044C6.38784 8.03687 5.96454 7.90265 5.54124 7.74779C5.12826 7.5826 4.75141 7.37611 4.41071 7.12832C4.08032 6.87021 3.81189 6.55015 3.6054 6.16814C3.39891 5.78614 3.29566 5.31121 3.29566 4.74336C3.29566 4.24779 3.38858 3.81416 3.57442 3.44248C3.77059 3.06047 4.0287 2.74557 4.34876 2.49779C4.67914 2.23968 5.05599 2.04351 5.47929 1.90929C5.90259 1.77507 6.34655 1.70796 6.81115 1.70796V0.5H7.47708V1.70796C7.94168 1.70796 8.38047 1.76991 8.79345 1.8938C9.20643 2.0177 9.56262 2.20354 9.86203 2.45133C10.1718 2.69911 10.4144 3.01401 10.5899 3.39602C10.7758 3.77802 10.8687 4.22198 10.8687 4.72788H9.10318C9.08253 4.20133 8.94315 3.79867 8.68504 3.51991C8.43725 3.24115 8.0346 3.10177 7.47708 3.10177V6.36947C7.94168 6.49336 8.39596 6.6379 8.83991 6.8031C9.28386 6.96829 9.67619 7.17994 10.0169 7.43805C10.3576 7.69616 10.6312 8.01622 10.8377 8.39823C11.0442 8.78024 11.1474 9.25 11.1474 9.80752C11.1474 10.3857 11.0493 10.8916 10.8532 11.3252C10.6673 11.7485 10.4092 12.1047 10.0788 12.3938C9.74846 12.6726 9.3613 12.8842 8.91734 13.0288C8.47339 13.1836 7.9933 13.2714 7.47708 13.292V14.5H6.81115V13.292C6.25363 13.2817 5.74256 13.194 5.27796 13.0288C4.81336 12.8636 4.41587 12.6313 4.08548 12.3319C3.7551 12.0221 3.49699 11.6453 3.31115 11.2013C3.13563 10.7574 3.05304 10.2463 3.06336 9.66814H4.82885ZM7.47708 11.8982C8.0346 11.8569 8.48888 11.6969 8.83991 11.4181C9.20127 11.1291 9.38195 10.6748 9.38195 10.0553C9.38195 9.76622 9.32516 9.5236 9.21159 9.32743C9.10835 9.13127 8.9638 8.96607 8.77796 8.83186C8.60245 8.69764 8.40112 8.58923 8.17398 8.50664C7.94684 8.42404 7.71454 8.35177 7.47708 8.28982V11.8982Z" fill="#B45FFF"/> -</g> -<defs> -<clipPath id="clip0_22126_42353"> -<rect width="14" height="14" fill="white" transform="translate(0 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/dotted-menu.svg b/web/src/assets/svgs/icons/dotted-menu.svg deleted file mode 100644 index 41caab13f..000000000 --- a/web/src/assets/svgs/icons/dotted-menu.svg +++ /dev/null @@ -1 +0,0 @@ -<svg fill="#000000" width="64px" height="64px" viewBox="-13.5 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <path d="M2.48 11.84c-1.36 0-2.48-1.12-2.48-2.48s1.12-2.48 2.48-2.48 2.48 1.12 2.48 2.48-1.12 2.48-2.48 2.48zM2.48 8.56c-0.44 0-0.8 0.36-0.8 0.8s0.36 0.8 0.8 0.8 0.8-0.36 0.8-0.8c0-0.44-0.36-0.8-0.8-0.8zM2.48 18.48c-1.36 0-2.48-1.12-2.48-2.48s1.12-2.48 2.48-2.48 2.48 1.12 2.48 2.48-1.12 2.48-2.48 2.48zM2.48 15.2c-0.44 0-0.8 0.36-0.8 0.8s0.36 0.8 0.8 0.8 0.8-0.36 0.8-0.8-0.36-0.8-0.8-0.8zM2.48 25.12c-1.36 0-2.48-1.12-2.48-2.48s1.12-2.48 2.48-2.48 2.48 1.12 2.48 2.48c0 1.36-1.12 2.48-2.48 2.48zM2.48 21.84c-0.44 0-0.8 0.36-0.8 0.8s0.36 0.8 0.8 0.8 0.8-0.36 0.8-0.8-0.36-0.8-0.8-0.8z"></path> </g></svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/down-arrow.svg b/web/src/assets/svgs/icons/down-arrow.svg deleted file mode 100644 index d67c73b6a..000000000 --- a/web/src/assets/svgs/icons/down-arrow.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg width="38" height="38" viewBox="0 0 38 38" fill="none" xmlns="http://www.w3.org/2000/svg"> -<circle cx="19" cy="19" r="19" fill="#009AFF"/> -<g clip-path="url(#clip0_0_768)"> -<path d="M25.5029 17.8028L26.2931 18.5956C26.6276 18.9313 26.6276 19.4741 26.2931 19.8062L19.3771 26.7482C19.0425 27.0839 18.5015 27.0839 18.1705 26.7482L11.2509 19.8062C10.9164 19.4705 10.9164 18.9277 11.2509 18.5956L12.0411 17.8028C12.3793 17.4636 12.931 17.4707 13.262 17.8171L17.3482 22.1202V11.857C17.3482 11.3821 17.7291 11 18.2025 11H19.3415C19.8149 11 20.1958 11.3821 20.1958 11.857V22.1202L24.282 17.8171C24.613 17.4671 25.1647 17.46 25.5029 17.8028Z" fill="white"/> -</g> -<defs> -<clipPath id="clip0_0_768"> -<rect width="16" height="16" fill="white" transform="translate(11 11)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/duplicateCase.svg b/web/src/assets/svgs/icons/duplicateCase.svg deleted file mode 100644 index 91ce906f1..000000000 --- a/web/src/assets/svgs/icons/duplicateCase.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 80 80" fill="none"> - <circle cx="40" cy="40" r="39.5" fill="#2A1260" stroke="#BECCE5"/> - <path d="M35.9473 54.123L35.7812 54.1191C34.0757 54.0326 32.7197 52.6216 32.7197 50.8945V27.4912H22.2285C21.3371 27.4912 20.6143 28.2141 20.6143 29.1055V59.7715C20.6143 60.6629 21.3371 61.3857 22.2285 61.3857H44.8242C45.7156 61.3857 46.4385 60.6629 46.4385 59.7715V54.123H35.9473ZM35.9473 18.6143C35.0559 18.6143 34.333 19.3371 34.333 20.2285V50.8945C34.333 51.7859 35.0559 52.5087 35.9473 52.5088H58.5439C59.4353 52.5087 60.1582 51.7859 60.1582 50.8945V27.3936C60.1582 27.2903 60.1464 27.1881 60.127 27.0879H52.8945V18.6143H35.9473ZM56.5264 43.2285H38.3682V40.8066H56.5264V43.2285ZM56.5264 35.1582H38.3682V32.7373H56.5264V35.1582ZM53.7021 26.2803H59.7227L54.207 19.2334C54.0683 19.0562 53.8952 18.9139 53.7021 18.8096V26.2803ZM48.0527 59.7715C48.0527 61.5543 46.607 63 44.8242 63H22.2285L22.0615 62.9961C20.3561 62.9094 19 61.4984 19 59.7715V29.1055C19 27.3227 20.4457 25.877 22.2285 25.877H32.7197V20.2285C32.7197 18.4457 34.1645 17.0001 35.9473 17H52.9355C53.9283 17 54.8667 17.4575 55.4785 18.2393L61.0859 25.4043C61.5302 25.9721 61.7714 26.6725 61.7715 27.3936V50.8945C61.7715 52.6773 60.3267 54.123 58.5439 54.123H48.0527V59.7715Z" fill="white"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/ellipse.svg b/web/src/assets/svgs/icons/ellipse.svg deleted file mode 100644 index 05629b571..000000000 --- a/web/src/assets/svgs/icons/ellipse.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> -<circle cx="16" cy="16" r="16" fill="#009AFF"/> -</svg> diff --git a/web/src/assets/svgs/icons/escrow.svg b/web/src/assets/svgs/icons/escrow.svg deleted file mode 100644 index 3da89c3d8..000000000 --- a/web/src/assets/svgs/icons/escrow.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M3 11.9983L23.8053 0L44.549 11.9987V12.5925C44.549 27.7491 37.6953 39.4767 24.1142 47.6846L23.5924 48L23.0651 47.694C9.73123 39.9574 3.02436 28.212 3.0009 12.5941L3 11.9983ZM43.5195 12.5925C43.5195 27.3668 36.8736 38.7704 23.5817 46.8036C10.5704 39.2541 4.05332 27.8505 4.03039 12.5925L23.8045 1.18887L43.5195 12.5925Z" fill="#4D00B4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M23.5986 43.7522C35.0993 36.7088 40.8632 26.8088 40.9506 14.0089L23.8031 4.09397L6.60375 14.0092C6.70673 27.2412 12.3627 37.1338 23.5986 43.7522ZM6.08777 13.7126C6.10831 27.3773 11.947 37.5902 23.6039 44.3513C35.5121 37.157 41.4662 26.9441 41.4662 13.7126L23.8035 3.49976L6.08777 13.7126Z" fill="#4D00B4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M18.6386 12.7626L30.438 13.2836L35.2152 23.7703L28.4755 33.3545L16.612 32.6039L11.7483 21.2416L18.6386 12.7626ZM26.2686 30.6602L20.0188 32.2711L27.3686 32.7352L26.2686 30.6602ZM32.985 26.0984L27.5141 30.1174L28.6012 32.2124L32.985 26.0984ZM17.1206 24.3052L17.2998 31.3764L24.5312 29.5235L17.1206 24.3052ZM12.5253 22.0526L15.9354 29.975L15.7935 22.735L12.5253 22.0526ZM28.9219 18.7523L27.589 28.4697L33.9719 23.8057L28.9219 18.7523ZM27.2473 18.886L18.715 22.5622L26.0096 28.1241L27.2473 18.886ZM17.6019 14.8095L12.7371 20.8673L15.9896 21.5467L17.6019 14.8095ZM30.3972 14.8441L29.3346 16.9953L33.2898 20.9601L30.3972 14.8441ZM19.4408 14.1487L18.0084 20.2361L26.2595 17.0439L19.4408 14.1487ZM22.1279 13.5367L27.857 16.0079L29.0733 13.8147L22.1279 13.5367Z" fill="#9013FE"/> -</svg> diff --git a/web/src/assets/svgs/icons/eth.svg b/web/src/assets/svgs/icons/eth.svg deleted file mode 100644 index 28595a80c..000000000 --- a/web/src/assets/svgs/icons/eth.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M12.4455 8.15L7.72432 11.05L3 8.15L7.72432 0L12.4455 8.15ZM7.72432 11.9812L3 9.08125L7.72432 16L12.4486 9.08125L7.72432 11.9812Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/ethereum-vote.svg b/web/src/assets/svgs/icons/ethereum-vote.svg deleted file mode 100644 index 43285b356..000000000 --- a/web/src/assets/svgs/icons/ethereum-vote.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="32" height="33" viewBox="0 0 32 33" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M16.3335 15.2479L19.9978 12.9521L16.3335 6.5L12.6668 12.9521L16.3335 15.2479ZM12.6668 13.6893L16.3335 15.9852L20.0002 13.6893L16.3335 19.1667L12.6668 13.6893ZM16.6823 23.1653C16.6823 23.7979 16.5238 24.2896 16.2066 24.6404C15.8912 24.9913 15.4438 25.1667 14.8644 25.1667C14.2779 25.1667 13.827 24.993 13.5116 24.6457C13.1979 24.2967 13.0411 23.8014 13.0411 23.16C13.0411 22.5186 13.1988 22.026 13.5142 21.6823C13.8314 21.3385 14.2832 21.1667 14.8697 21.1667C15.4473 21.1667 15.8939 21.3412 16.2092 21.6903C16.5246 22.0393 16.6823 22.531 16.6823 23.1653ZM13.7162 23.1653C13.7162 23.6437 13.8128 24.007 14.0059 24.255C14.1991 24.5013 14.4852 24.6245 14.8644 24.6245C15.2418 24.6245 15.5262 24.5022 15.7175 24.2577C15.9107 24.0132 16.0072 23.6491 16.0072 23.1653C16.0072 22.6887 15.9116 22.3272 15.7202 22.081C15.5306 21.8347 15.2471 21.7115 14.8697 21.7115C14.4888 21.7115 14.2008 21.8347 14.0059 22.081C13.8128 22.3272 13.7162 22.6887 13.7162 23.1653ZM12.0604 21.2278H12.7195L11.3587 25.1135H10.689L9.3335 21.2278H9.98732L10.7979 23.6437C10.8405 23.7589 10.8857 23.9078 10.9335 24.0903C10.9813 24.271 11.0123 24.4056 11.0265 24.4942C11.0496 24.3596 11.085 24.2037 11.1328 24.0265C11.1807 23.8493 11.2197 23.7182 11.2498 23.6331L12.0604 21.2278ZM18.2239 25.1135H18.8591V21.7726H20.0019V21.2278H17.081V21.7726H18.2239V25.1135ZM22.7979 25.1135H20.5999V21.2278H22.7979V21.7647H21.2352V22.8225H22.6996V23.354H21.2352V24.574H22.7979V25.1135Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/ethereum.svg b/web/src/assets/svgs/icons/ethereum.svg deleted file mode 100644 index 7c5b0ec47..000000000 --- a/web/src/assets/svgs/icons/ethereum.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="32" height="32" viewBox="0 0 13 22" xmlns="http://www.w3.org/2000/svg"> -<path d="M12.6666 11.1969L6.53378 15.0031L0.396973 11.1969L6.53378 0.5L12.6666 11.1969ZM6.53378 16.2254L0.396973 12.4191L6.53378 21.5L12.6706 12.4191L6.53378 16.2254V16.2254Z" /> -</svg> diff --git a/web/src/assets/svgs/icons/eye.svg b/web/src/assets/svgs/icons/eye.svg deleted file mode 100644 index c0ca4bf57..000000000 --- a/web/src/assets/svgs/icons/eye.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_11047_6900)"> -<path d="M7.9995 5.05078C7.70509 5.05544 7.41286 5.1028 7.13172 5.19141C7.26176 5.42296 7.331 5.68441 7.33283 5.95078C7.33283 6.15761 7.29259 6.36242 7.21442 6.55351C7.13625 6.7446 7.02166 6.91822 6.87722 7.06447C6.73277 7.21073 6.56129 7.32674 6.37256 7.40589C6.18383 7.48504 5.98155 7.52578 5.77727 7.52578C5.51419 7.52393 5.25597 7.45383 5.02727 7.32216C4.84684 7.95575 4.86787 8.63077 5.08739 9.2516C5.3069 9.87242 5.71378 10.4076 6.25038 10.7813C6.78698 11.1549 7.4261 11.3482 8.07721 11.3337C8.72832 11.3192 9.35842 11.0976 9.87824 10.7003C10.3981 10.3031 10.7813 9.75031 10.9736 9.1203C11.1659 8.49028 11.1575 7.81498 10.9497 7.19004C10.7419 6.56511 10.3451 6.02222 9.81563 5.63827C9.28614 5.25433 8.65076 5.04879 7.9995 5.05078ZM15.9028 7.79016C14.3964 4.81425 11.4142 2.80078 7.9995 2.80078C4.58477 2.80078 1.60172 4.81566 0.0961632 7.79044C0.0326193 7.91771 -0.000488281 8.05832 -0.000488281 8.20092C-0.000488281 8.34353 0.0326193 8.48414 0.0961632 8.61141C1.60255 11.5873 4.58477 13.6008 7.9995 13.6008C11.4142 13.6008 14.3973 11.5859 15.9028 8.61112C15.9664 8.48386 15.9995 8.34325 15.9995 8.20064C15.9995 8.05803 15.9664 7.91742 15.9028 7.79016ZM7.9995 12.2508C5.25922 12.2508 2.747 10.7039 1.39033 8.20078C2.747 5.69766 5.25894 4.15078 7.9995 4.15078C10.7401 4.15078 13.252 5.69766 14.6087 8.20078C13.2523 10.7039 10.7401 12.2508 7.9995 12.2508Z"/> -</g> -<defs> -<clipPath id="clip0_11047_6900"> -<rect width="16" height="14.4" transform="translate(0 1)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/faucet.svg b/web/src/assets/svgs/icons/faucet.svg deleted file mode 100644 index 67e4fd115..000000000 --- a/web/src/assets/svgs/icons/faucet.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="17" viewBox="0 0 16 17" fill="none"> - <g clip-path="url(#clip0_19884_66179)"> - <path d="M7 0.5C7.55312 0.5 8 0.946875 8 1.5V1.875L11 1.5C11.5531 1.5 12 1.94687 12 2.5C12 3.05312 11.5531 3.5 11 3.5L8 3.125L7.03125 3.00312L7 3L6.96875 3.00312L6 3.125L3 3.5C2.44688 3.5 2 3.05312 2 2.5C2 1.94687 2.44688 1.5 3 1.5L6 1.875V1.5C6 0.946875 6.44688 0.5 7 0.5ZM0 7.5C0 6.94688 0.446875 6.5 1 6.5H4L4.70625 5.79375C4.89375 5.60625 5.14687 5.5 5.4125 5.5H6V4.13125L7 4.00625L8 4.13125V5.5H8.58438C8.85 5.5 9.10312 5.60625 9.29062 5.79375L10 6.5H11C13.7625 6.5 16 8.7375 16 11.5C16 12.0531 15.5531 12.5 15 12.5H13C12.4469 12.5 12 12.0531 12 11.5C12 10.9469 11.5531 10.5 11 10.5H9.87187C9.24062 11.4062 8.1875 12 7 12C5.8125 12 4.75938 11.4062 4.12813 10.5H1C0.446875 10.5 0 10.0531 0 9.5V7.5ZM13.65 13.7312C13.7094 13.5906 13.8469 13.5 14 13.5C14.1531 13.5 14.2875 13.5906 14.35 13.7312L14.9187 15.0562C14.975 15.1844 15.0031 15.325 15.0031 15.4656V15.5C15.0031 16.0531 14.5563 16.5 14.0031 16.5C13.45 16.5 13.0031 16.0531 13.0031 15.5V15.4625C13.0031 15.3219 13.0312 15.1844 13.0875 15.0531L13.6562 13.7281L13.65 13.7312Z" /> - </g> - <defs> - <clipPath id="clip0_19884_66179"> - <rect width="16" height="16" fill="white" transform="translate(0 0.5)"/> - </clipPath> - </defs> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/french-flag.svg b/web/src/assets/svgs/icons/french-flag.svg deleted file mode 100644 index 1e72458c1..000000000 --- a/web/src/assets/svgs/icons/french-flag.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> -<rect y="3.5" width="5.33333" height="10.4762" fill="#003493"/> -<rect x="5.3335" y="3.5" width="5.33333" height="10.4762" fill="white"/> -<rect x="10.6665" y="3.5" width="5.33333" height="10.4762" fill="#DD4D48"/> -</svg> diff --git a/web/src/assets/svgs/icons/gas.svg b/web/src/assets/svgs/icons/gas.svg deleted file mode 100644 index c80c9171d..000000000 --- a/web/src/assets/svgs/icons/gas.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="17" viewBox="0 0 16 17" fill="none"> - <g clip-path="url(#clip0_19668_84865)"> - <path d="M1 2.5C1 1.39688 1.89688 0.5 3 0.5H8C9.10312 0.5 10 1.39688 10 2.5V8.5H10.25C11.7688 8.5 13 9.73125 13 11.25V12.25C13 12.6656 13.3344 13 13.75 13C14.1656 13 14.5 12.6656 14.5 12.25V7.4375C13.6375 7.21562 13 6.43125 13 5.5V3.5L12 2.5C11.725 2.225 11.725 1.775 12 1.5C12.275 1.225 12.725 1.225 13 1.5L15.4156 3.91563C15.7906 4.29063 16 4.8 16 5.33125V5.75V6.5V7.5V12.25C16 13.4937 14.9937 14.5 13.75 14.5C12.5063 14.5 11.5 13.4937 11.5 12.25V11.25C11.5 10.5594 10.9406 10 10.25 10H10V14.5C10.5531 14.5 11 14.9469 11 15.5C11 16.0531 10.5531 16.5 10 16.5H1C0.446875 16.5 0 16.0531 0 15.5C0 14.9469 0.446875 14.5 1 14.5V2.5ZM3 3V6C3 6.275 3.225 6.5 3.5 6.5H7.5C7.775 6.5 8 6.275 8 6V3C8 2.725 7.775 2.5 7.5 2.5H3.5C3.225 2.5 3 2.725 3 3Z" fill="#999999"/> - </g> - <defs> - <clipPath id="clip0_19668_84865"> - <rect width="16" height="16" fill="white" transform="translate(0 0.5)"/> - </clipPath> - </defs> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/gavel-executed.svg b/web/src/assets/svgs/icons/gavel-executed.svg deleted file mode 100644 index 5e9b5777f..000000000 --- a/web/src/assets/svgs/icons/gavel-executed.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M15.849 8.62302L15.3629 8.13689C15.1615 7.93552 14.835 7.93552 14.6337 8.13689L14.5121 8.25843L12.0814 5.82776L12.203 5.70622C12.4043 5.50485 12.4043 5.17837 12.203 4.97702L11.7168 4.49087C11.5155 4.2895 11.189 4.2895 10.9876 4.49087L8.31388 7.16462C8.1125 7.36599 8.1125 7.69247 8.31388 7.89382L8.8 8.37994C9.00138 8.58131 9.32785 8.58131 9.5292 8.37994L9.65074 8.25841L10.5015 9.10914L8.76039 10.8502L8.63885 10.7287C8.37036 10.4602 7.93506 10.4602 7.66657 10.7287L5.20137 13.1939C4.93288 13.4624 4.93288 13.8977 5.20137 14.1662L6.17364 15.1385C6.44213 15.407 6.87743 15.407 7.14592 15.1385L9.61115 12.6733C9.87964 12.4048 9.87964 11.9695 9.61115 11.701L9.48961 11.5795L11.2307 9.83836L12.0814 10.6891L11.9599 10.8106C11.7585 11.012 11.7585 11.3385 11.9599 11.5398L12.446 12.026C12.6474 12.2273 12.9739 12.2273 13.1752 12.026L15.849 9.35221C16.0503 9.15086 16.0503 8.82439 15.849 8.62302Z" fill="#65DC7F"/> -<g clip-path="url(#clip0_24237_1972)"> -<path d="M3.5 2.33984C5.43281 2.33984 7 3.90703 7 5.83984C7 7.77266 5.43281 9.33984 3.5 9.33984C1.56719 9.33984 0 7.77266 0 5.83984C0 3.90703 1.56719 2.33984 3.5 2.33984ZM3.5 2.93359C1.89531 2.93359 0.59375 4.23516 0.59375 5.83984C0.59375 7.44453 1.89531 8.74609 3.5 8.74609C5.10469 8.74609 6.40625 7.44453 6.40625 5.83984C6.40625 4.23516 5.10469 2.93359 3.5 2.93359ZM4.96094 4.59766C5.01165 4.59767 5.04104 4.6549 5.01074 4.69629L3.36523 6.97754C3.34231 7.00954 3.31233 7.03568 3.27734 7.05371C3.24235 7.07169 3.20341 7.08197 3.16406 7.08203C3.12458 7.08203 3.08493 7.07175 3.0498 7.05371C3.01487 7.03568 2.98481 7.0095 2.96191 6.97754L1.98828 5.62793C1.95859 5.58652 1.98828 5.52832 2.03906 5.52832H2.40527C2.48574 5.52832 2.56055 5.56798 2.60742 5.63281L3.16406 6.4043L4.39258 4.70117C4.43947 4.63573 4.51516 4.59766 4.59473 4.59766H4.96094Z" fill="#65DC7F"/> -</g> -<defs> -<clipPath id="clip0_24237_1972"> -<rect width="7" height="7" fill="white" transform="translate(0 2.33984)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/gavel.svg b/web/src/assets/svgs/icons/gavel.svg deleted file mode 100644 index 09a015734..000000000 --- a/web/src/assets/svgs/icons/gavel.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 12 13" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M11.8352 5.17255L11.3049 4.64223C11.0852 4.42255 10.7291 4.42255 10.5094 4.64223L10.3768 4.77482L7.72516 2.12318L7.85775 1.99059C8.07743 1.77091 8.07743 1.41476 7.85775 1.1951L7.32743 0.664759C7.10775 0.44508 6.75159 0.44508 6.53194 0.664759L3.61512 3.58157C3.39545 3.80125 3.39545 4.15741 3.61512 4.37706L4.14544 4.90738C4.36512 5.12706 4.72128 5.12706 4.94093 4.90738L5.07352 4.77479L6.00159 5.70287L4.10222 7.60224L3.96964 7.46965C3.67674 7.17676 3.20188 7.17676 2.90898 7.46965L0.219673 10.159C-0.0732244 10.4519 -0.0732244 10.9268 0.219673 11.2197L1.28033 12.2803C1.57323 12.5732 2.0481 12.5732 2.341 12.2803L5.03032 9.591C5.32322 9.2981 5.32322 8.82324 5.03032 8.53034L4.89774 8.39775L6.79711 6.49838L7.72518 7.42646L7.5926 7.55904C7.37292 7.77872 7.37292 8.13488 7.5926 8.35453L8.12292 8.88485C8.3426 9.10453 8.69875 9.10453 8.91841 8.88485L11.8352 5.96804C12.0549 5.74838 12.0549 5.39223 11.8352 5.17255Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/governor.svg b/web/src/assets/svgs/icons/governor.svg deleted file mode 100644 index d067c43e1..000000000 --- a/web/src/assets/svgs/icons/governor.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M23.2043 47.7778C23.4564 47.9234 23.7423 48 24.0334 48C24.3245 48 24.6105 47.9234 24.8626 47.7778L44.2383 36.6041C44.4903 36.4592 44.6997 36.2505 44.8454 35.9989C44.991 35.7473 45.0678 35.4617 45.0679 35.171V12.8279C45.068 12.537 44.9913 12.2512 44.8456 11.9994C44.7 11.7476 44.4905 11.5386 44.2383 11.3936L24.8626 0.222168C24.6105 0.0766231 24.3245 0 24.0334 0C23.7423 0 23.4564 0.0766231 23.2043 0.222168L3.8286 11.3948C3.57669 11.5397 3.36744 11.7485 3.22197 12.0001C3.07649 12.2518 2.99993 12.5373 3 12.8279V35.1721C2.99997 35.4628 3.07659 35.7483 3.22212 35.9999C3.36766 36.2515 3.57696 36.4603 3.82892 36.6052L23.2043 47.7778ZM24.0329 46.3437L4.6572 35.1721V12.8279L24.0329 1.65417L43.4086 12.8279V35.1721L24.0329 46.3437Z" fill="#4D00B4"/> -<path d="M40.4055 13.7857L24.7052 4.73465C24.5004 4.61706 24.2684 4.55518 24.0323 4.55518C23.7962 4.55518 23.5642 4.61706 23.3594 4.73465L7.65908 13.7857C7.45516 13.9032 7.28577 14.0723 7.16793 14.276C7.05009 14.4797 6.98797 14.7108 6.98779 14.9462V33.0482C6.98789 33.2837 7.04997 33.5151 7.16781 33.719C7.28564 33.9229 7.45508 34.0921 7.65908 34.2098L23.3594 43.2608C23.5638 43.3794 23.796 43.4418 24.0323 43.4418C24.2686 43.4418 24.5008 43.3794 24.7052 43.2608L40.4055 34.2098C40.6095 34.0921 40.779 33.9229 40.8968 33.719C41.0146 33.5151 41.0767 33.2837 41.0768 33.0482V14.9462C41.0766 14.7108 41.0145 14.4797 40.8967 14.276C40.7788 14.0723 40.6094 13.9032 40.4055 13.7857ZM40.2751 32.6291C40.2749 32.8529 40.2157 33.0727 40.1035 33.2664C39.9914 33.4601 39.8302 33.6208 39.6362 33.7325L24.6729 42.3622C24.4781 42.4729 24.2579 42.5311 24.0339 42.5311C23.8099 42.5311 23.5897 42.4729 23.395 42.3622L8.43273 33.7325C8.23813 33.6206 8.07648 33.4594 7.9641 33.2651C7.85173 33.0708 7.7926 32.8503 7.79269 32.6259V15.3718C7.79315 15.1474 7.8525 14.9271 7.96482 14.7329C8.07715 14.5387 8.23849 14.3774 8.43273 14.2652L23.4003 5.63975C23.5944 5.52696 23.8148 5.46754 24.0393 5.46754C24.2638 5.46754 24.4842 5.52696 24.6783 5.63975L39.6416 14.2663C39.8347 14.379 39.9948 14.5404 40.106 14.7344C40.2171 14.9284 40.2755 15.1482 40.2751 15.3718V32.6291Z" fill="#4D00B4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M21.3918 14.6095L23.6554 12.3458C23.6979 12.3033 23.7668 12.3033 23.8093 12.3458L29.3842 17.9207C29.4267 17.9632 29.4267 18.0321 29.3842 18.0746L27.1206 20.3383C27.0781 20.3808 27.0092 20.3808 26.9667 20.3383L21.3918 14.7634C21.3493 14.7209 21.3493 14.652 21.3918 14.6095ZM16.1058 21.4697L21.449 16.1264C21.6443 15.9312 21.9608 15.9312 22.1561 16.1264L25.606 19.5763C25.8013 19.7716 25.8013 20.0881 25.606 20.2834L20.2627 25.6266C20.0675 25.8219 19.7509 25.8219 19.5556 25.6266L16.1058 22.1768C15.9105 21.9815 15.9105 21.6649 16.1058 21.4697ZM14.5588 21.4443L12.2952 23.708C12.2527 23.7505 12.2527 23.8194 12.2952 23.8619L17.8701 29.4368C17.9126 29.4793 17.9815 29.4793 18.024 29.4368L20.2877 27.1731C20.3302 27.1306 20.3302 27.0617 20.2877 27.0192L14.7127 21.4443C14.6702 21.4018 14.6013 21.4018 14.5588 21.4443ZM22.7262 23.4812L31.5052 33.2418C31.7201 33.481 32.2301 33.3308 32.6367 32.907C33.0468 32.4851 33.1877 31.9547 32.9576 31.7312L23.5723 22.6003L22.7262 23.4812Z" fill="#9021FE"/> -</svg> diff --git a/web/src/assets/svgs/icons/grid.svg b/web/src/assets/svgs/icons/grid.svg deleted file mode 100644 index eb3fa4e05..000000000 --- a/web/src/assets/svgs/icons/grid.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M4.66666 2.25V4.75C4.66666 5.16422 4.33087 5.5 3.91666 5.5H0.75C0.335781 5.5 0 5.16422 0 4.75V2.25C0 1.83578 0.335781 1.5 0.75 1.5H3.91666C4.33087 1.5 4.66666 1.83578 4.66666 2.25ZM10.3333 9.75V7.25C10.3333 6.83578 9.99756 6.5 9.58334 6.5H6.41666C6.00244 6.5 5.66666 6.83578 5.66666 7.25V9.75C5.66666 10.1642 6.00244 10.5 6.41666 10.5H9.58331C9.99756 10.5 10.3333 10.1642 10.3333 9.75ZM11.3333 2.25V4.75C11.3333 5.16422 11.6691 5.5 12.0833 5.5H15.25C15.6642 5.5 16 5.16422 16 4.75V2.25C16 1.83578 15.6642 1.5 15.25 1.5H12.0833C11.6691 1.5 11.3333 1.83578 11.3333 2.25ZM10.3333 4.75V2.25C10.3333 1.83578 9.99756 1.5 9.58334 1.5H6.41666C6.00244 1.5 5.66666 1.83578 5.66666 2.25V4.75C5.66666 5.16422 6.00244 5.5 6.41666 5.5H9.58331C9.99756 5.5 10.3333 5.16422 10.3333 4.75ZM3.91666 6.5H0.75C0.335781 6.5 0 6.83578 0 7.25V9.75C0 10.1642 0.335781 10.5 0.75 10.5H3.91666C4.33087 10.5 4.66666 10.1642 4.66666 9.75V7.25C4.66666 6.83578 4.33087 6.5 3.91666 6.5ZM0 12.25V14.75C0 15.1642 0.335781 15.5 0.75 15.5H3.91666C4.33087 15.5 4.66666 15.1642 4.66666 14.75V12.25C4.66666 11.8358 4.33087 11.5 3.91666 11.5H0.75C0.335781 11.5 0 11.8358 0 12.25ZM12.0833 10.5H15.25C15.6642 10.5 16 10.1642 16 9.75V7.25C16 6.83578 15.6642 6.5 15.25 6.5H12.0833C11.6691 6.5 11.3333 6.83578 11.3333 7.25V9.75C11.3333 10.1642 11.6691 10.5 12.0833 10.5ZM12.0833 15.5H15.25C15.6642 15.5 16 15.1642 16 14.75V12.25C16 11.8358 15.6642 11.5 15.25 11.5H12.0833C11.6691 11.5 11.3333 11.8358 11.3333 12.25V14.75C11.3333 15.1642 11.6691 15.5 12.0833 15.5ZM5.66666 12.25V14.75C5.66666 15.1642 6.00244 15.5 6.41666 15.5H9.58331C9.99753 15.5 10.3333 15.1642 10.3333 14.75V12.25C10.3333 11.8358 9.99753 11.5 9.58331 11.5H6.41666C6.00244 11.5 5.66666 11.8358 5.66666 12.25Z" /> -</svg> diff --git a/web/src/assets/svgs/icons/hourglass.svg b/web/src/assets/svgs/icons/hourglass.svg deleted file mode 100644 index 7b2102723..000000000 --- a/web/src/assets/svgs/icons/hourglass.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg viewBox="0 0 14 15" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_15151_15061)"> -<path d="M2.275 14.5L11.585 14.5C11.9523 14.5 12.25 14.2062 12.25 13.8438L12.25 13.4062C12.25 13.0438 11.9523 12.75 11.585 12.75C11.585 10.2627 10.1714 8.16352 8.23667 7.5C10.1714 6.83648 11.585 4.73732 11.585 2.25C11.9523 2.25 12.25 1.95619 12.25 1.59375L12.25 1.15625C12.25 0.793809 11.9523 0.5 11.585 0.5L2.275 0.499999C1.90773 0.499999 1.61 0.793808 1.61 1.15625L1.61 1.59375C1.61 1.95619 1.90773 2.25 2.275 2.25C2.275 4.73732 3.68857 6.83648 5.62333 7.5C3.68857 8.16352 2.275 10.2627 2.275 12.75C1.90773 12.75 1.61 13.0438 1.61 13.4062L1.61 13.8437C1.61 14.2062 1.90773 14.5 2.275 14.5ZM4.04833 2.25L9.81167 2.25C9.81167 4.36799 8.53143 6.1875 6.93 6.1875C5.32885 6.1875 4.04833 4.36868 4.04833 2.25Z" /> -</g> -<defs> -<clipPath id="clip0_15151_15061"> -<rect width="14" height="14" fill="white" transform="translate(0 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/info-circle.svg b/web/src/assets/svgs/icons/info-circle.svg deleted file mode 100644 index bcb80ff1e..000000000 --- a/web/src/assets/svgs/icons/info-circle.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_16527_27048)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M0 8C0 3.58214 3.58214 0 8 0C12.4179 0 16 3.58214 16 8C16 12.4179 12.4179 16 8 16C3.58214 16 0 12.4179 0 8ZM1.35714 8C1.35714 11.6679 4.33214 14.6429 8 14.6429C11.6679 14.6429 14.6429 11.6679 14.6429 8C14.6429 4.33214 11.6679 1.35714 8 1.35714C4.33214 1.35714 1.35714 4.33214 1.35714 8ZM7.39363 5.46323C7.23288 5.30249 7.14258 5.08447 7.14258 4.85714C7.14258 4.62981 7.23288 4.4118 7.39363 4.25105C7.55437 4.09031 7.77239 4 7.99972 4C8.22705 4 8.44507 4.09031 8.60581 4.25105C8.76656 4.4118 8.85686 4.62981 8.85686 4.85714C8.85686 5.08447 8.76656 5.30249 8.60581 5.46323C8.44507 5.62398 8.22705 5.71429 7.99972 5.71429C7.77239 5.71429 7.55437 5.62398 7.39363 5.46323ZM7.57115 6.85714H8.42829C8.50686 6.85714 8.57115 6.92143 8.57115 7V11.8571C8.57115 11.9357 8.50686 12 8.42829 12H7.57115C7.49258 12 7.42829 11.9357 7.42829 11.8571V7C7.42829 6.92143 7.49258 6.85714 7.57115 6.85714Z" fill="#6CC5FF"/> -</g> -<defs> -<clipPath id="clip0_16527_27048"> -<rect width="16" height="16" fill="white"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/kleros.svg b/web/src/assets/svgs/icons/kleros.svg deleted file mode 100644 index e0dc1a0fd..000000000 --- a/web/src/assets/svgs/icons/kleros.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M14.0937 3L38.2287 4.079L48 25.7943L34.2145 45.6406L9.94832 44.0863L0 20.5579L14.0937 3ZM31.7879 15.5172L14.2964 23.161L29.2505 34.7256L31.7879 15.5172ZM29.7628 11.687L15.7842 5.66695L12.8478 18.3244L29.7628 11.687ZM26.2197 37.6354L11.0277 26.7851L11.3952 41.4879L26.2197 37.6354ZM45.5734 25.7464L35.2209 15.2391L32.4884 35.4442L45.5734 25.7464ZM29.7816 39.9987L16.9691 43.3482L32.0365 44.3132L29.7816 39.9987ZM43.5503 30.5136L32.3348 38.8702L34.5634 43.2263L43.5503 30.5136ZM38.2453 7.11304L36.067 11.5859L44.1752 19.8297L38.2453 7.11304ZM35.5312 4.97263L21.293 4.39456L33.0378 9.53279L35.5312 4.97263ZM12.0145 7.04105L2.04155 19.6368L8.70928 21.0494L12.0145 7.04105ZM8.30723 23.5202L1.60736 22.1014L8.59816 38.5742L8.30723 23.5202Z" fill="#9013FE"/> -</svg> diff --git a/web/src/assets/svgs/icons/law-balance-hourglass.svg b/web/src/assets/svgs/icons/law-balance-hourglass.svg deleted file mode 100644 index fd82a58de..000000000 --- a/web/src/assets/svgs/icons/law-balance-hourglass.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="32" height="33" viewBox="0 0 32 33" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M17.4926 11.1957C17.6278 11.0739 17.7114 10.8586 17.7114 10.4843C17.7114 9.98327 17.4605 9.39117 16.9588 8.70801C16.4571 9.39117 16.2062 9.98327 16.2062 10.4843C16.2062 10.6129 16.2161 10.7227 16.2345 10.8165L12.8775 9.80431C12.8041 9.56397 12.5819 9.38923 12.3191 9.38923C11.9964 9.38923 11.7349 9.65251 11.7349 9.97729C11.7349 10.1843 11.8414 10.366 12.002 10.4708L10.6851 14.2988C10.2726 14.3654 10.0001 14.4636 10.0001 14.5931C10.0001 15.1267 11.034 15.5592 12.3094 15.5592C13.5848 15.5592 14.6187 15.1267 14.6187 14.5931C14.6187 14.4596 14.3292 14.3594 13.8951 14.2927L12.5897 10.4982C12.625 10.4796 12.6582 10.4577 12.6888 10.4326C12.8475 10.3212 13.0022 10.2883 13.1529 10.3338C13.3705 10.3993 13.6481 10.5512 13.9067 10.6927C14.1321 10.816 14.3431 10.9314 14.4873 10.9749L16.6532 11.6279V15.7174C16.4901 15.8216 16.3815 16.0047 16.3815 16.2136C16.3815 16.3444 16.4244 16.4648 16.4961 16.5624C16.3032 16.707 16.1777 16.9377 16.1777 17.1983C16.1777 17.5246 16.3736 17.8045 16.6532 17.9264V18.7321C15.8113 18.7828 15.1754 19.0147 15.1754 19.2931C15.1754 19.2999 15.1758 19.3067 15.1765 19.3134C13.8204 19.437 12.8897 19.6917 12.8897 19.9859L12.9033 20.3962C12.9033 20.8116 14.7552 21.1518 17.0438 21.1518C19.3325 21.1518 21.1844 20.8184 21.1844 20.403L21.1776 19.9859C21.1776 19.6869 20.2164 19.4287 18.8243 19.3074C18.8245 19.3046 18.8247 19.3018 18.8248 19.2989C18.8249 19.297 18.8249 19.2951 18.8249 19.2931C18.8249 19.0102 18.1679 18.7752 17.3054 18.7298V17.9132C17.5704 17.7854 17.7538 17.5138 17.7538 17.1983C17.7538 16.9376 17.6283 16.707 17.4354 16.5624C17.5071 16.4647 17.55 16.3444 17.55 16.2136C17.55 16.0165 17.4533 15.8424 17.3054 15.7357V11.8245L19.2046 12.3971C19.5931 12.5143 19.8942 12.5248 20.1602 12.534C20.3708 12.5413 20.5594 12.5479 20.7519 12.606C20.913 12.6545 21.0156 12.7713 21.0597 12.9564C21.1053 13.0915 21.1982 13.2042 21.3186 13.275L20.006 17.0904C19.547 17.157 19.2373 17.2594 19.2373 17.3976C19.2373 17.9311 20.2712 18.3636 21.5466 18.3636C22.822 18.3636 23.8559 17.9311 23.8559 17.3976C23.8559 17.2676 23.5817 17.1693 23.1669 17.1026L21.8587 13.3C22.0581 13.2064 22.1966 13.0034 22.1966 12.7673C22.1966 12.4425 21.9351 12.1792 21.6124 12.1792C21.4663 12.1792 21.333 12.2336 21.2306 12.3228L17.4926 11.1957ZM23.0307 17.0825L21.7432 13.34C21.7011 13.3497 21.6575 13.3553 21.6125 13.3553C21.5489 13.3553 21.4879 13.3447 21.4306 13.3259L20.1418 17.0723C20.9806 16.9692 22.2182 16.9726 23.0307 17.0825ZM12.1122 10.5267L10.8214 14.2786C11.6484 14.1662 12.9186 14.1645 13.7589 14.2735L12.4757 10.5434C12.4258 10.5573 12.3734 10.5653 12.3191 10.5653C12.2461 10.5653 12.1766 10.5513 12.1122 10.5267ZM11.7468 23.1663H8.20011C8.0602 23.1663 7.94678 23.0544 7.94678 22.9163V22.7497C7.94678 22.6116 8.0602 22.4997 8.20011 22.4997C8.20011 21.5521 8.73861 20.7524 9.47567 20.4997C8.73861 20.2469 8.20011 19.4472 8.20011 18.4997C8.0602 18.4997 7.94678 18.3877 7.94678 18.2497V18.083C7.94678 17.9449 8.0602 17.833 8.20011 17.833H11.7468C11.8867 17.833 12.0001 17.9449 12.0001 18.083V18.2497C12.0001 18.3877 11.8867 18.4997 11.7468 18.4997C11.7468 19.4472 11.2083 20.2469 10.4712 20.4997C11.2083 20.7524 11.7468 21.5521 11.7468 22.4997C11.8867 22.4997 12.0001 22.6116 12.0001 22.7497V22.9163C12.0001 23.0544 11.8867 23.1663 11.7468 23.1663ZM11.0712 18.4997H8.87567C8.87567 19.3068 9.36348 19.9997 9.97344 19.9997C10.5835 19.9997 11.0712 19.3065 11.0712 18.4997Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/law-balance-with-pnk.svg b/web/src/assets/svgs/icons/law-balance-with-pnk.svg deleted file mode 100644 index 99a844905..000000000 --- a/web/src/assets/svgs/icons/law-balance-with-pnk.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 49 48" fill="none"> - <path fill-rule="evenodd" clip-rule="evenodd" d="M28.2488 16.6644C28.2488 17.2258 28.1235 17.5488 27.9206 17.7316L33.5277 19.4222C33.6813 19.2884 33.8812 19.2068 34.1003 19.2068C34.5843 19.2068 34.9767 19.6018 34.9767 20.0889C34.9767 20.443 34.7689 20.7476 34.4698 20.8879L36.4321 26.5919C37.0543 26.6919 37.4656 26.8394 37.4656 27.0344C37.4656 27.8347 35.9147 28.4834 34.0017 28.4834C32.0886 28.4834 30.5377 27.8347 30.5377 27.0344C30.5377 26.8271 31.0023 26.6736 31.6908 26.5736L33.6597 20.8505C33.479 20.7443 33.3396 20.5752 33.2712 20.3726C33.2051 20.095 33.0512 19.9198 32.8096 19.8469C32.5208 19.7599 32.2379 19.75 31.9221 19.739C31.523 19.7251 31.0713 19.7094 30.4886 19.5337L27.6398 18.6748V24.5416C27.8617 24.7016 28.0067 24.9627 28.0067 25.2584C28.0067 25.4545 27.9424 25.6351 27.8348 25.7816C28.1241 25.9984 28.3124 26.3444 28.3124 26.7354C28.3124 27.2087 28.0373 27.6161 27.6398 27.8078V29.0326C28.9335 29.1008 29.9191 29.4532 29.9191 29.8777L29.9189 29.8864L29.9182 29.8992C32.0064 30.081 33.4481 30.4683 33.4481 30.9168L33.4584 31.5425C33.4584 32.1657 30.6804 32.6656 27.2474 32.6656C23.8145 32.6656 21.0366 32.1554 21.0366 31.5323L21.0162 30.9168C21.0162 30.4755 22.4123 30.0934 24.4465 29.908C24.4454 29.898 24.4448 29.8878 24.4448 29.8777C24.4448 29.4601 25.3987 29.1123 26.6615 29.0362V27.8275C26.242 27.6448 25.9483 27.2248 25.9483 26.7355C25.9483 26.3445 26.1365 25.9985 26.4259 25.7816C26.3184 25.6351 26.254 25.4546 26.254 25.2584C26.254 24.945 26.4169 24.6705 26.6615 24.514V18.3799L23.4126 17.4003C23.1964 17.3351 22.8799 17.162 22.5418 16.977C22.1539 16.7648 21.7374 16.537 21.4111 16.4386C21.185 16.3704 20.9529 16.4199 20.7149 16.5869C20.669 16.6246 20.6192 16.6574 20.5663 16.6853L22.5244 22.3771C23.1755 22.4771 23.6098 22.6273 23.6098 22.8277C23.6098 23.628 22.0589 24.2768 20.1458 24.2768C18.2327 24.2768 16.6819 23.628 16.6819 22.8277C16.6819 22.6333 17.0906 22.4862 17.7094 22.3862L19.6848 16.6442C19.4438 16.487 19.284 16.2145 19.284 15.9039C19.284 15.4168 19.6763 15.0218 20.1603 15.0218C20.5546 15.0218 20.8879 15.2839 20.998 15.6445L26.0335 17.1627C26.0059 17.0221 25.9911 16.8573 25.9911 16.6644C25.9911 15.9129 26.3674 15.0247 27.1199 14C27.8725 15.0247 28.2488 15.9129 28.2488 16.6644ZM34.2965 20.9479L36.2278 26.5618C35.0091 26.3969 33.1526 26.3918 31.8943 26.5464L33.8276 20.9268C33.9135 20.9551 34.0051 20.9709 34.1004 20.9709C34.1679 20.9709 34.2334 20.9625 34.2965 20.9479ZM17.9139 22.3559L19.85 16.728C19.9466 16.7649 20.0509 16.786 20.1603 16.786C20.2418 16.786 20.3204 16.7739 20.3952 16.753L22.3201 22.3482C21.0596 22.1847 19.1542 22.1873 17.9139 22.3559ZM18.0533 26.8646L14.0308 26.6875L11.6819 29.5699L13.3399 33.4323L17.3843 33.6875L19.6819 30.4295L18.0533 26.8646ZM14.0646 29.9972L16.9799 28.7424L16.557 31.8957L14.0646 29.9972ZM14.3126 27.1253L16.6423 28.1136L13.8232 29.2032L14.3126 27.1253ZM13.5198 30.5921L16.0518 32.3733L13.5811 33.0058L13.5198 30.5921ZM17.552 28.6967L19.2775 30.4216L17.0966 32.0136L17.552 28.6967ZM14.5101 33.3112L16.6455 32.7613L17.0213 33.4696L14.5101 33.3112ZM17.071 32.576L18.9403 31.2042L17.4425 33.2912L17.071 32.576ZM17.693 28.097L18.0561 27.3627L19.0444 29.4503L17.693 28.097ZM15.2307 26.9164L17.6038 27.0113L17.1882 27.7599L15.2307 26.9164ZM12.0221 29.4186L13.6843 27.3509L13.1334 29.6505L12.0221 29.4186ZM11.9498 29.8232L13.0664 30.0562L13.1149 32.5275L11.9498 29.8232Z"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/law-balance.svg b/web/src/assets/svgs/icons/law-balance.svg deleted file mode 100644 index 473e946a3..000000000 --- a/web/src/assets/svgs/icons/law-balance.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg height="24" width="20" viewBox="0 0 14 15" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_12054_167323)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M7.79156 3.15129C7.79156 3.52555 7.70712 3.74087 7.57048 3.86274L11.3474 4.98979C11.4509 4.90059 11.5856 4.84623 11.7332 4.84623C12.0592 4.84623 12.3235 5.10951 12.3235 5.43429C12.3235 5.67037 12.1835 5.87337 11.982 5.96696L13.3039 9.76961C13.723 9.83625 14 9.93458 14 10.0646C14 10.5981 12.9553 11.0306 11.6667 11.0306C10.378 11.0306 9.33337 10.5981 9.33337 10.0646C9.33337 9.92642 9.64629 9.82404 10.1101 9.75743L11.4363 5.94197C11.3146 5.8712 11.2207 5.75845 11.1747 5.62343C11.1301 5.43834 11.0265 5.32151 10.8637 5.27295C10.6692 5.2149 10.4786 5.20833 10.2659 5.201C9.99706 5.19174 9.6928 5.18126 9.30029 5.06414L7.38131 4.49154V8.40273C7.53077 8.5094 7.62846 8.68344 7.62846 8.88059C7.62846 9.01134 7.58514 9.13172 7.51265 9.22937C7.70758 9.37395 7.83439 9.60457 7.83439 9.86526C7.83439 10.1808 7.64906 10.4524 7.38131 10.5802V11.3968C8.25276 11.4422 8.91665 11.6771 8.91665 11.9601C8.91665 11.9649 8.91645 11.9697 8.91607 11.9744C10.3227 12.0957 11.2938 12.3539 11.2938 12.6529L11.3007 13.07C11.3007 13.4854 9.42951 13.8188 7.11703 13.8188C4.80456 13.8188 2.93338 13.4786 2.93338 13.0632L2.91966 12.6529C2.91966 12.3587 3.86005 12.104 5.2303 11.9804C5.22955 11.9736 5.22916 11.9669 5.22916 11.9601C5.22916 11.6817 5.87174 11.4498 6.72236 11.3991V10.5934C6.43979 10.4715 6.2419 10.1916 6.2419 9.86531C6.2419 9.60465 6.36871 9.37399 6.56364 9.22941C6.49119 9.13176 6.44782 9.01142 6.44782 8.88063C6.44782 8.67167 6.55754 8.48864 6.72236 8.38435V4.29493L4.53389 3.64186C4.38825 3.5984 4.17506 3.48298 3.94728 3.35966L3.94727 3.35966L3.94727 3.35966L3.94726 3.35966L3.94726 3.35966C3.68597 3.2182 3.40547 3.06634 3.18566 3.00075C3.03336 2.9553 2.87703 2.98824 2.71666 3.09957C2.68578 3.12472 2.65221 3.14659 2.61659 3.16518L3.93556 6.95973C4.37412 7.02642 4.66664 7.12656 4.66664 7.26014C4.66664 7.79367 3.62198 8.22618 2.33332 8.22618C1.04466 8.22618 0 7.79367 0 7.26014C0 7.13055 0.275299 7.03244 0.692166 6.9658L2.02279 3.13777C1.86048 3.03298 1.75282 2.85131 1.75282 2.64428C1.75282 2.3195 2.0171 2.05622 2.34312 2.05622C2.60872 2.05622 2.83322 2.23096 2.90739 2.47131L6.29933 3.48345C6.2807 3.38972 6.27073 3.27989 6.27073 3.15129C6.27073 2.65026 6.5242 2.05816 7.03114 1.375C7.53808 2.05816 7.79156 2.65026 7.79156 3.15129ZM11.8653 6.00696L13.1662 9.74952C12.3453 9.63958 11.0947 9.63618 10.2472 9.73929L11.5495 5.99285C11.6073 6.01172 11.669 6.02227 11.7332 6.02227C11.7787 6.02227 11.8228 6.01665 11.8653 6.00696ZM0.829894 6.94559L2.13407 3.19369C2.19914 3.21827 2.2694 3.23234 2.34312 3.23234C2.39802 3.23234 2.45094 3.2243 2.50135 3.21035L3.79797 6.9405C2.9489 6.83147 1.66543 6.83317 0.829894 6.94559Z" /> -</g> -<defs> -<clipPath id="clip0_12054_167323"> -<rect width="14" height="15" transform="translate(0 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/linguo.svg b/web/src/assets/svgs/icons/linguo.svg deleted file mode 100644 index 7c8c9ae2d..000000000 --- a/web/src/assets/svgs/icons/linguo.svg +++ /dev/null @@ -1,48 +0,0 @@ -<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M35.3 27.2703C35.3012 27.2879 35.3012 27.3057 35.3 27.3233V27.2703ZM19.8194 18.1093C19.4769 17.4628 18.4083 16.3099 16.8164 16.5824C16.2011 16.6715 15.6341 16.9658 15.2072 17.4176C14.7802 17.8695 14.5186 18.4524 14.4646 19.0717C14.458 19.1835 14.4959 19.2935 14.57 19.3775C14.6441 19.4615 14.7484 19.5129 14.8602 19.5203H14.8891C14.9949 19.5202 15.0969 19.4805 15.1749 19.4091C15.253 19.3377 15.3016 19.2397 15.3113 19.1344C15.3559 18.7065 15.5423 18.3058 15.8408 17.9959C16.1393 17.6861 16.5327 17.4848 16.9587 17.4242C18.3384 17.183 19.0427 18.4614 19.0692 18.5145C19.122 18.614 19.2122 18.6884 19.3198 18.7214C19.4275 18.7544 19.5438 18.7433 19.6433 18.6906C19.7428 18.6378 19.8172 18.5477 19.8502 18.44C19.8833 18.3323 19.8722 18.216 19.8194 18.1165V18.1093ZM28.8357 16.3678C28.4932 15.7213 27.4246 14.5684 25.8327 14.8409C25.2174 14.9299 24.6503 15.2243 24.2234 15.6761C23.7965 16.128 23.5349 16.7109 23.4809 17.3302C23.4743 17.4427 23.5124 17.5532 23.587 17.6377C23.6615 17.7222 23.7665 17.7738 23.8789 17.7812H23.9054C24.0131 17.7808 24.1167 17.7395 24.1951 17.6656C24.2734 17.5917 24.3208 17.4907 24.3275 17.3832C24.3593 17.1193 24.4412 16.8639 24.5687 16.6307C24.7095 16.3696 24.9105 16.1459 25.1551 15.9781C25.3997 15.8103 25.6807 15.7032 25.975 15.6658C27.3547 15.4246 28.059 16.703 28.0855 16.7561C28.1387 16.8552 28.229 16.9291 28.3366 16.9617C28.4443 16.9942 28.5604 16.9827 28.6596 16.9298C28.7568 16.878 28.8298 16.79 28.8628 16.6848C28.8957 16.5797 28.886 16.4658 28.8357 16.3678ZM23.6835 2.44776C22.7402 2.44811 21.7977 2.5061 20.8614 2.62143C20.7495 2.92726 20.5649 3.20127 20.3235 3.41982L21.0833 6.01761C21.4355 5.98866 21.7876 5.97419 22.1398 5.97419C26.4574 5.97419 30.3722 8.15952 32.7529 12.5953C32.7529 12.5953 33.7732 14.4236 34.504 17.581C35.8717 17.5087 37.1332 18.6857 37.3744 20.3139C37.6156 21.8624 36.8389 23.288 35.6208 23.7101L36.3444 27.8347C36.3918 28.0894 36.3444 28.3526 36.2111 28.5748C36.0778 28.7969 35.8678 28.9627 35.6208 29.0407C23.8379 33.5489 12.658 33.3824 12.658 33.3824C12.4072 33.3999 12.1589 33.3237 11.9611 33.1686C11.7633 33.0136 11.63 32.7907 11.587 32.543L10.8224 28.2013C10.6805 28.2065 10.5383 28.1984 10.3979 28.1772C8.95065 27.9625 7.98582 26.3971 8.22703 24.6821C8.28936 24.1835 8.46474 23.7057 8.73979 23.2852C9.01485 22.8647 9.38232 22.5125 9.81417 22.2556C9.65738 20.9893 9.45718 18.9101 9.59708 17.4122L9.61879 17.2168C9.64291 17.019 9.67185 16.8309 9.71045 16.6596C10.5064 11.3024 13.893 7.77359 18.4373 6.49519L18.2636 3.79369C17.9878 3.68181 17.7405 3.50955 17.54 3.28957C13.6154 4.38755 10.0599 6.52454 7.24868 9.47505C4.43749 12.4256 2.47484 16.0802 1.56783 20.0533C0.660822 24.0264 0.843078 28.1707 2.09537 32.0488C3.34767 35.927 5.62356 39.3952 8.68291 42.0876C10.8538 38.7903 13.6662 37.1018 15.345 38.0715L15.4101 38.1101C16.3283 36.7478 17.5941 35.656 19.0765 34.9479C21.2348 33.9559 23.5852 33.4518 25.9605 33.4717C28.5612 33.4481 31.1282 34.0608 33.4379 35.2566C33.7533 34.4164 34.1381 33.604 34.5884 32.8277C35.6112 31.0548 36.8895 29.5666 38.1921 28.6331C39.5935 27.6273 40.8839 27.3716 41.8101 27.9095C42.7364 28.4474 43.173 29.6968 43.0017 31.4142C42.8425 33.0086 42.1937 34.861 41.1709 36.6315C40.3085 38.1828 39.1564 39.5543 37.7772 40.6717C37.9522 41.2899 38.0574 41.9259 38.0908 42.5676C41.6921 39.6016 44.2893 35.5956 45.5272 31.0973C46.7651 26.5991 46.5832 21.8283 45.0064 17.4374C43.4296 13.0464 40.5349 9.24979 36.7181 6.56669C32.9014 3.88359 28.349 2.44503 23.6835 2.44776ZM25.9267 22.9647C25.8877 22.9251 25.8411 22.8936 25.7898 22.8721C25.7384 22.8505 25.6833 22.8395 25.6276 22.8395C25.572 22.8395 25.5168 22.8505 25.4655 22.8721C25.4142 22.8936 25.3676 22.9251 25.3285 22.9647C25.3285 22.9647 24.6049 23.6425 23.136 23.9054C22.2811 24.0642 21.401 24.0229 20.5647 23.7848C20.5113 23.7615 20.4536 23.7493 20.3952 23.7492C20.3369 23.7491 20.2791 23.7611 20.2256 23.7843C20.1721 23.8075 20.1239 23.8415 20.0841 23.8842C20.0443 23.9269 20.0137 23.9773 19.9943 24.0323C19.9748 24.0873 19.9669 24.1457 19.9711 24.2039C19.9752 24.2621 19.9913 24.3188 20.0184 24.3705C20.0454 24.4222 20.0828 24.4678 20.1283 24.5044C20.1737 24.541 20.2262 24.5678 20.2825 24.5832C20.8595 24.7568 21.4602 24.8382 22.0626 24.8244C22.4719 24.8246 22.8803 24.7883 23.2831 24.7159C25.0029 24.4096 25.8761 23.5871 25.9123 23.5509C25.9907 23.4744 26.0361 23.3703 26.0388 23.2608C26.0415 23.1512 26.0013 23.045 25.9267 22.9647ZM27.497 8.16434C27.4661 9.20471 27.1544 10.2174 26.5949 11.095C28.2679 11.2699 29.9179 11.62 31.5179 12.1394C30.5307 10.4993 29.1483 9.13265 27.497 8.16434ZM14.8264 45.9541L14.6938 45.8962L14.8337 45.9565L14.8264 45.9541ZM14.9084 38.8289C14.7119 38.7188 14.4896 38.663 14.2644 38.6673C12.9185 38.6673 10.902 40.3026 9.36311 42.6423V42.6568C10.728 43.7698 12.2183 44.7194 13.8037 45.4861V43.3539C13.8042 41.7808 14.2025 40.2333 14.9615 38.8554L14.9084 38.8289Z" fill="#7BC8F9"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M15.2028 13.0587C13.5611 13.8884 12.0337 14.927 10.6584 16.1486C11.0313 13.9614 12.0309 11.9295 13.536 10.2993C13.8247 11.356 14.4018 12.3115 15.2028 13.0587Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M31.518 12.1396C29.918 11.6202 28.268 11.2701 26.595 11.0952C27.1554 10.2178 27.4679 9.20515 27.4995 8.16455C29.1499 9.13318 30.5315 10.4998 31.518 12.1396Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M37.3745 20.3141C37.1333 18.686 35.8718 17.5089 34.5041 17.5812C33.7805 14.4239 32.753 12.5955 32.753 12.5955C30.3819 8.15974 26.4671 5.97441 22.1399 5.97441C21.7878 5.97441 21.4356 5.98889 21.0834 6.01783L20.3236 3.42004C20.5615 3.20042 20.7428 2.9265 20.8519 2.62165C20.9671 2.30107 20.9954 1.9557 20.9339 1.62064C20.8809 1.32688 20.7618 1.04901 20.5857 0.807989C20.4096 0.566972 20.181 0.369113 19.9172 0.229349C19.6535 0.089586 19.3614 0.0115701 19.0631 0.00119157C18.7647 -0.00918695 18.468 0.0483429 18.1951 0.169438C17.9223 0.290534 17.6805 0.47203 17.4881 0.700226C17.2956 0.928422 17.1576 1.19735 17.0842 1.48672C17.0109 1.77609 17.0043 2.07832 17.0649 2.37062C17.1255 2.66291 17.2517 2.93762 17.434 3.17401L17.5305 3.28979C17.731 3.50978 17.9782 3.68203 18.2541 3.79391L18.4278 6.49542C13.8931 7.77381 10.5065 11.3027 9.71056 16.6574C9.67197 16.8287 9.64303 17.0168 9.61891 17.2146L9.5972 17.41C9.4573 18.9079 9.6575 20.9871 9.81428 22.2534C9.38259 22.5108 9.01541 22.8635 8.74076 23.2844C8.46612 23.7054 8.29127 24.1835 8.22956 24.6824C7.97388 26.3973 8.95318 27.9628 10.4004 28.1774C10.5409 28.1986 10.683 28.2067 10.8249 28.2015L11.5896 32.5433C11.6325 32.7909 11.7658 33.0138 11.9637 33.1689C12.1615 33.3239 12.4098 33.4001 12.6605 33.3827C12.6605 33.3827 23.8404 33.5443 35.6233 29.0409C35.8704 28.9629 36.0803 28.7972 36.2136 28.575C36.3469 28.3529 36.3943 28.0896 36.3469 27.8349L35.6233 23.7103C36.839 23.2882 37.606 21.8627 37.3745 20.3141ZM31.518 12.1396C29.9181 11.6202 28.268 11.2701 26.595 11.0952C27.1554 10.2178 27.4679 9.20516 27.4995 8.16456C29.15 9.13319 30.5315 10.4998 31.518 12.1396ZM19.0983 7.1322L18.7076 3.1909C18.5922 3.16667 18.4809 3.12606 18.3771 3.07029C18.1242 2.93663 17.9225 2.72331 17.8031 2.46337C17.6838 2.20343 17.6535 1.91139 17.7169 1.63248C17.7804 1.35358 17.934 1.10339 18.1541 0.92066C18.3741 0.737933 18.6483 0.632875 18.9341 0.62176C19.2199 0.610645 19.5014 0.694094 19.735 0.85918C19.9686 1.02427 20.1412 1.26177 20.2261 1.5349C20.311 1.80804 20.3035 2.10155 20.2047 2.36997C20.1059 2.6384 19.9213 2.86674 19.6796 3.01964L20.6444 6.8524C22.6743 6.58699 24.7381 6.88575 26.6095 7.71592C26.6649 8.0922 26.7518 9.38748 25.6229 11.0132C23.856 10.8911 22.0808 10.9891 20.3381 11.3051C18.8471 11.5834 17.3951 12.0402 16.0133 12.6655C14.4213 11.2399 14.2935 9.81441 14.2742 9.59009C15.6604 8.3936 17.3155 7.55031 19.0983 7.1322ZM13.5361 10.2992C13.8247 11.3559 14.4019 12.3114 15.2028 13.0586C13.5612 13.8884 12.0337 14.9269 10.6585 16.1485C11.0314 13.9613 12.031 11.9294 13.5361 10.2992ZM35.2929 27.4755C35.2929 27.49 35.2929 27.5045 35.2929 27.5189C35.2676 27.7291 35.1874 27.9289 35.0603 28.0983C34.9333 28.2677 34.7639 28.4006 34.5693 28.4838C34.4916 28.5218 34.4109 28.5533 34.3281 28.5778C32.3178 29.3023 30.2721 29.9246 28.199 30.4424C25.6647 31.0712 23.0965 31.5544 20.5069 31.8896C18.1787 32.2153 15.8315 32.3861 13.4806 32.4009H13.3287H13.278L13.2056 32.3865L13.1357 32.3696L13.0657 32.3479L12.9982 32.3213L12.9307 32.29L12.8824 32.2659L12.8487 32.2466L12.8149 32.2273L12.7763 32.2007L12.7136 32.1525C12.68 32.1269 12.6485 32.0987 12.6195 32.0681C12.593 32.044 12.5713 32.0198 12.5471 31.9933L12.5254 31.9619C12.5161 31.9526 12.508 31.942 12.5013 31.9306L12.47 31.8872L12.4362 31.8365L12.4169 31.8028C12.4079 31.7888 12.3999 31.7743 12.3928 31.7593C12.3928 31.7352 12.3711 31.7135 12.3614 31.6894L12.3494 31.6604L12.3349 31.6218C12.3298 31.6102 12.3258 31.5981 12.3228 31.5857C12.3228 31.564 12.3084 31.5398 12.3035 31.5181C12.3035 31.4916 12.2915 31.4627 12.2866 31.4337L12.0864 30.2807C16.2073 29.9395 20.3083 29.3897 24.3735 28.6333C30.2734 27.5455 33.8215 26.4263 35.0879 25.98L35.071 25.8836L35.0903 25.98L35.276 27.0582C35.2899 27.1331 35.2979 27.2089 35.3001 27.285V27.3356C35.3001 27.3774 35.2977 27.4241 35.2929 27.4755ZM35.4472 22.7213C35.3246 22.7738 35.1957 22.8103 35.0637 22.8299C34.8905 22.8589 34.7136 22.8589 34.5403 22.8299L34.7164 23.8405L34.9335 25.0828H34.919C34.3425 25.2854 32.8109 25.8064 30.3361 26.4142C28.7007 26.8267 26.6553 27.285 24.2046 27.736C19.9425 28.5199 16.322 28.9589 14.074 29.1833C13.0826 29.2846 12.3518 29.3425 11.9465 29.3738L11.7053 27.9941L11.5365 27.0293C11.2679 27.1695 10.9655 27.2322 10.6633 27.2102H10.5596C9.56584 27.0631 8.90011 26.0042 9.07619 24.8174C9.11163 24.5137 9.20732 24.22 9.35767 23.9537C9.50801 23.6874 9.70999 23.4537 9.95177 23.2665C10.2004 23.0819 10.4949 22.9693 10.8032 22.9408L10.7092 22.4005C10.685 22.2558 10.6609 22.1135 10.6392 21.9712C10.3966 20.4943 10.3383 18.9929 10.4655 17.5016C11.2085 16.7467 14.9616 13.1599 20.4997 12.1396C26.443 11.0422 31.7086 13.1045 32.1427 13.2805C32.8421 14.7118 33.349 16.2293 33.6503 17.7935C33.6864 17.972 33.7202 18.1553 33.754 18.3362L33.8336 18.8018C34.0143 18.6893 34.2163 18.6153 34.4269 18.5847C34.5195 18.5703 34.6132 18.5654 34.7067 18.5702C35.592 18.5991 36.3831 19.3806 36.5399 20.4419C36.6967 21.4526 36.2215 22.3909 35.4472 22.7213Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M25.9146 23.5632C25.8785 23.5993 25.0053 24.4219 23.2855 24.7282C22.8827 24.8006 22.4742 24.8369 22.065 24.8367C21.4626 24.8505 20.8619 24.7691 20.2849 24.5955C20.2317 24.5771 20.1826 24.5485 20.1405 24.5111C20.0983 24.4738 20.064 24.4285 20.0393 24.3779C20.0147 24.3273 20.0003 24.2723 19.9969 24.2161C19.9935 24.1599 20.0012 24.1036 20.0196 24.0504C20.0379 23.9972 20.0666 23.9481 20.1039 23.906C20.1413 23.8638 20.1866 23.8295 20.2372 23.8048C20.2878 23.7802 20.3428 23.7658 20.399 23.7624C20.4552 23.759 20.5115 23.7667 20.5647 23.7851C21.4012 24.0187 22.2803 24.0559 23.1335 23.8936C24.6025 23.6307 25.3189 22.9577 25.3261 22.9529C25.407 22.8752 25.5155 22.8328 25.6277 22.835C25.7399 22.8373 25.8466 22.884 25.9243 22.965C26.002 23.0459 26.0444 23.1544 26.0421 23.2666C26.0399 23.3787 25.9932 23.4854 25.9122 23.5632H25.9146Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M19.6433 18.6835C19.5437 18.7356 19.4276 18.7464 19.3201 18.7134C19.2126 18.6804 19.1225 18.6064 19.0692 18.5074C19.0427 18.4543 18.3456 17.1807 16.9587 17.4171C16.5316 17.4781 16.1373 17.6803 15.8387 17.9916C15.5401 18.3029 15.3544 18.7053 15.3112 19.1345C15.3033 19.2412 15.2555 19.3409 15.1772 19.4138C15.099 19.4867 14.9961 19.5274 14.8891 19.5277H14.8602C14.7484 19.5202 14.6441 19.4689 14.57 19.3849C14.4959 19.3008 14.458 19.1909 14.4646 19.079C14.5186 18.4597 14.7802 17.8769 15.2071 17.425C15.6341 16.9731 16.2011 16.6788 16.8164 16.5898C18.4083 16.3172 19.4696 17.4702 19.8194 18.1166C19.8693 18.2155 19.8788 18.3299 19.846 18.4356C19.8131 18.5414 19.7404 18.6303 19.6433 18.6835Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M28.6597 16.9399C28.5605 16.9928 28.4443 17.0043 28.3367 16.9718C28.2291 16.9392 28.1388 16.8653 28.0856 16.7662C28.0591 16.7131 27.362 15.442 25.975 15.6759C25.6808 15.7133 25.3997 15.8204 25.1551 15.9882C24.9106 16.156 24.7096 16.3797 24.5688 16.6408C24.4412 16.874 24.3594 17.1294 24.3276 17.3933C24.3209 17.5008 24.2735 17.6018 24.1951 17.6757C24.1168 17.7496 24.0132 17.7909 23.9055 17.7913H23.879C23.7665 17.7839 23.6616 17.7323 23.587 17.6478C23.5125 17.5633 23.4743 17.4528 23.481 17.3403C23.5349 16.721 23.7966 16.1381 24.2235 15.6862C24.6504 15.2344 25.2175 14.94 25.8327 14.851C27.4247 14.5785 28.486 15.7314 28.8357 16.3779C28.886 16.4759 28.8958 16.5898 28.8628 16.6949C28.8299 16.8001 28.7569 16.8881 28.6597 16.9399Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M35.0877 25.9632H35.0852L35.0684 25.8667L35.0877 25.9632Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M35.3 27.3358C35.3013 27.3181 35.3013 27.3004 35.3 27.2827V27.3358Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M15.2028 13.0587C13.5611 13.8884 12.0337 14.927 10.6584 16.1486C11.0313 13.9614 12.0309 11.9295 13.536 10.2993C13.8247 11.356 14.4018 12.3115 15.2028 13.0587Z" fill="#4AA8F7"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M31.518 12.1396C29.918 11.6202 28.268 11.2701 26.595 11.0952C27.1554 10.2178 27.4679 9.20515 27.4995 8.16455C29.1499 9.13318 30.5315 10.4998 31.518 12.1396Z" fill="#4AA8F7"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M36.5446 20.4393C36.3878 19.378 35.5967 18.5965 34.7114 18.5676C34.6179 18.5628 34.5242 18.5677 34.4316 18.582C34.221 18.6127 34.019 18.6866 33.8383 18.7991L33.7587 18.3336C33.7249 18.1527 33.6911 17.9694 33.655 17.7909C33.3522 16.2264 32.8436 14.7089 32.1426 13.2779C31.7084 13.1018 26.4429 11.0395 20.4996 12.137C14.9518 13.1597 11.2083 16.7441 10.4654 17.499C10.3382 18.9903 10.3965 20.4916 10.6391 21.9686C10.6608 22.1109 10.6849 22.2532 10.709 22.3979L10.8031 22.9382C10.4948 22.9666 10.2002 23.0793 9.95163 23.2639C9.70747 23.4475 9.50237 23.6779 9.3483 23.9418C9.19424 24.2056 9.0943 24.4975 9.05435 24.8003C8.87827 25.975 9.53676 27.046 10.5378 27.1931H10.6415C10.9437 27.2151 11.2461 27.1525 11.5146 27.0122L11.6835 27.977L11.9247 29.3567C12.3299 29.3254 13.0608 29.2675 14.0521 29.1662C16.3122 28.937 19.9327 28.498 24.1949 27.7189C26.6455 27.2679 28.6909 26.8096 30.3263 26.3971C32.7963 25.7772 34.3279 25.2683 34.9092 25.0657H34.9237L34.7066 23.8235L34.5305 22.8128C34.7038 22.8418 34.8807 22.8418 35.0539 22.8128C35.1859 22.7932 35.3148 22.7567 35.4375 22.7043C36.2214 22.3907 36.6966 21.4524 36.5446 20.4393ZM19.6433 18.6833C19.5437 18.7355 19.4276 18.7463 19.3201 18.7133C19.2126 18.6803 19.1225 18.6063 19.0692 18.5073C19.0427 18.4542 18.3456 17.1806 16.9587 17.417C16.5316 17.4779 16.1373 17.6802 15.8387 17.9915C15.5401 18.3028 15.3544 18.7052 15.3112 19.1344C15.3033 19.2411 15.2555 19.3408 15.1772 19.4137C15.099 19.4866 14.9961 19.5273 14.8891 19.5276H14.8602C14.7484 19.5201 14.6441 19.4688 14.57 19.3847C14.4959 19.3007 14.458 19.1908 14.4646 19.0789C14.5186 18.4596 14.7802 17.8768 15.2071 17.4249C15.634 16.973 16.2011 16.6787 16.8164 16.5897C18.4083 16.3171 19.4696 17.4701 19.8194 18.1165C19.8693 18.2154 19.8788 18.3298 19.8459 18.4355C19.8131 18.5413 19.7404 18.6302 19.6433 18.6833ZM25.9146 23.5629C25.8785 23.5991 25.0053 24.4216 23.2855 24.728C22.8827 24.8004 22.4743 24.8367 22.065 24.8365C21.4626 24.8503 20.8619 24.7689 20.2849 24.5953C20.2317 24.5769 20.1826 24.5483 20.1405 24.5109C20.0983 24.4736 20.064 24.4283 20.0393 24.3777C20.0147 24.3271 20.0003 24.2721 19.9969 24.2159C19.9935 24.1597 20.0012 24.1034 20.0196 24.0502C20.0379 23.997 20.0666 23.9479 20.104 23.9058C20.1413 23.8636 20.1866 23.8293 20.2372 23.8046C20.2878 23.78 20.3428 23.7656 20.399 23.7622C20.4552 23.7588 20.5115 23.7665 20.5647 23.7849C21.4012 24.0185 22.2803 24.0557 23.1335 23.8934C24.6025 23.6305 25.3189 22.9575 25.3261 22.9527C25.407 22.875 25.5155 22.8326 25.6277 22.8348C25.7399 22.8371 25.8466 22.8838 25.9243 22.9648C26.002 23.0457 26.0444 23.1542 26.0422 23.2664C26.0399 23.3785 25.9932 23.4852 25.9122 23.5629H25.9146ZM28.6596 16.9394C28.5604 16.9924 28.4442 17.0039 28.3366 16.9713C28.229 16.9388 28.1387 16.8648 28.0855 16.7658C28.059 16.7127 27.3619 15.4415 25.975 15.6755C25.6807 15.7129 25.3996 15.8199 25.1551 15.9877C24.9105 16.1555 24.7095 16.3793 24.5687 16.6403C24.4412 16.8736 24.3593 17.129 24.3275 17.3929C24.3208 17.5004 24.2734 17.6013 24.195 17.6752C24.1167 17.7491 24.0131 17.7905 23.9054 17.7909H23.8789C23.7664 17.7834 23.6615 17.7318 23.5869 17.6474C23.5124 17.5629 23.4743 17.4523 23.4809 17.3398C23.5348 16.7205 23.7965 16.1377 24.2234 15.6858C24.6503 15.2339 25.2174 14.9396 25.8326 14.8506C27.4246 14.578 28.4859 15.731 28.8357 16.3774C28.886 16.4755 28.8957 16.5893 28.8627 16.6945C28.8298 16.7996 28.7568 16.8876 28.6596 16.9394Z" fill="#7BC8F9"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M19.6433 18.6835C19.5437 18.7356 19.4276 18.7464 19.3201 18.7134C19.2126 18.6804 19.1225 18.6064 19.0692 18.5074C19.0427 18.4543 18.3456 17.1807 16.9587 17.4171C16.5316 17.4781 16.1373 17.6803 15.8387 17.9916C15.5401 18.3029 15.3544 18.7053 15.3112 19.1345C15.3033 19.2412 15.2555 19.3409 15.1772 19.4138C15.099 19.4867 14.9961 19.5274 14.8891 19.5277H14.8602C14.7484 19.5202 14.6441 19.4689 14.57 19.3849C14.4959 19.3008 14.458 19.1909 14.4646 19.079C14.5186 18.4597 14.7802 17.8769 15.2071 17.425C15.6341 16.9731 16.2011 16.6788 16.8164 16.5898C18.4083 16.3172 19.4696 17.4702 19.8194 18.1166C19.8693 18.2155 19.8788 18.3299 19.846 18.4356C19.8131 18.5414 19.7404 18.6303 19.6433 18.6835Z" fill="#4AA8F7"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M28.6597 16.9399C28.5605 16.9928 28.4443 17.0043 28.3367 16.9718C28.2291 16.9392 28.1388 16.8653 28.0856 16.7662C28.0591 16.7131 27.362 15.442 25.975 15.6759C25.6808 15.7133 25.3997 15.8204 25.1551 15.9882C24.9106 16.156 24.7096 16.3797 24.5688 16.6408C24.4412 16.874 24.3594 17.1294 24.3276 17.3933C24.3209 17.5008 24.2735 17.6018 24.1951 17.6757C24.1168 17.7496 24.0132 17.7909 23.9055 17.7913H23.879C23.7665 17.7839 23.6616 17.7323 23.587 17.6478C23.5125 17.5633 23.4743 17.4528 23.481 17.3403C23.5349 16.721 23.7966 16.1381 24.2235 15.6862C24.6504 15.2344 25.2175 14.94 25.8327 14.851C27.4247 14.5785 28.486 15.7314 28.8357 16.3779C28.886 16.4759 28.8958 16.5898 28.8628 16.6949C28.8299 16.8001 28.7569 16.8881 28.6597 16.9399Z" fill="#4AA8F7"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M31.518 12.1396C29.918 11.6202 28.268 11.2701 26.595 11.0952C27.1554 10.2178 27.4679 9.20515 27.4995 8.16455C29.1499 9.13318 30.5315 10.4998 31.518 12.1396Z" fill="#1746BD"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M15.2028 13.0587C13.5611 13.8884 12.0337 14.927 10.6584 16.1486C11.0313 13.9614 12.0309 11.9295 13.536 10.2993C13.8247 11.356 14.4018 12.3115 15.2028 13.0587Z" fill="#1746BD"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M34.0094 36.4028L33.9877 36.4824L33.9226 36.4365C33.9226 36.41 33.9371 36.3835 33.9443 36.3569L34.0094 36.4028Z" fill="#4AA8F7"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M41.9428 32.4394C41.6187 33.756 41.1035 35.0181 40.4136 36.1854C39.6572 37.5419 38.6685 38.7551 37.4925 39.7697C36.8356 38.1249 35.6994 36.7155 34.2314 35.7246C34.5393 34.8759 34.9227 34.0565 35.3772 33.2764C35.9643 32.2435 36.6773 31.2875 37.4998 30.4302C38.8028 31.4389 40.3248 32.1272 41.9428 32.4394Z" fill="#4AA8F7"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M42.1285 31.3277C42.1285 31.4194 42.1092 31.511 42.0972 31.6051C40.6572 31.3209 39.2995 30.7167 38.1245 29.837C38.3247 29.6658 38.5249 29.5066 38.7251 29.3546C39.4801 28.8143 40.1724 28.5297 40.7512 28.5297C40.9719 28.524 41.19 28.5773 41.3832 28.6841C41.9886 29.0411 42.2733 30.0035 42.1285 31.3277Z" fill="#4AA8F7"/> -<path d="M42.1285 31.3277C42.1285 31.4194 42.1092 31.511 42.0972 31.6051C40.6572 31.3209 39.2995 30.7167 38.1245 29.837C38.3247 29.6658 38.5249 29.5066 38.7251 29.3546C39.4801 28.8143 40.1724 28.5297 40.7512 28.5297C40.9719 28.524 41.19 28.5773 41.3832 28.6841C41.9886 29.0411 42.2733 30.0035 42.1285 31.3277Z" fill="#1746BD"/> -<path d="M33.9443 36.3569C33.9443 36.3835 33.9274 36.41 33.9226 36.4365L33.9877 36.4824L34.0094 36.4028L33.9443 36.3569ZM33.9443 36.3569C33.9443 36.3835 33.9274 36.41 33.9226 36.4365L33.9877 36.4824L34.0094 36.4028L33.9443 36.3569ZM33.9443 36.3569C33.9443 36.3835 33.9274 36.41 33.9226 36.4365L33.9877 36.4824L34.0094 36.4028L33.9443 36.3569ZM33.9443 36.3569C33.9443 36.3835 33.9274 36.41 33.9226 36.4365L33.9877 36.4824L34.0094 36.4028L33.9443 36.3569ZM33.9443 36.3569C33.9443 36.3835 33.9274 36.41 33.9226 36.4365L33.9877 36.4824L34.0094 36.4028L33.9443 36.3569ZM33.9443 36.3569C33.9443 36.3835 33.9274 36.41 33.9226 36.4365L33.9877 36.4824L34.0094 36.4028L33.9443 36.3569ZM33.9443 36.3569C33.9443 36.3835 33.9274 36.41 33.9226 36.4365L33.9877 36.4824L34.0094 36.4028L33.9443 36.3569ZM33.9443 36.3569C33.9443 36.3835 33.9274 36.41 33.9226 36.4365L33.9877 36.4824L34.0094 36.4028L33.9443 36.3569ZM33.9443 36.3569C33.9443 36.3835 33.9274 36.41 33.9226 36.4365L33.9877 36.4824L34.0094 36.4028L33.9443 36.3569ZM33.9443 36.3569C33.9443 36.3835 33.9274 36.41 33.9226 36.4365L33.9877 36.4824L34.0094 36.4028L33.9443 36.3569Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M14.9543 38.8554C14.1953 40.2333 13.7971 41.7808 13.7966 43.3539V45.4862C12.2111 44.7194 10.7208 43.7698 9.35596 42.6568V42.6424C10.9021 40.3027 12.9186 38.6721 14.2645 38.6721C14.4897 38.6678 14.712 38.7236 14.9085 38.8337L14.9543 38.8554Z" fill="#4AA8F7"/> -<path d="M14.8265 45.9544L14.6938 45.8965L14.8337 45.9568L14.8265 45.9544Z" fill="white"/> -<path d="M14.8265 45.9544L14.6938 45.8965L14.8337 45.9568L14.8265 45.9544Z" fill="white"/> -<path d="M15.7117 46.3062L15.5887 46.2628L15.3885 46.1832L15.21 46.1133L15.7117 46.3062Z" fill="#1746BD"/> -<path d="M15.9674 46.4029H15.9408L15.854 46.3691L15.9674 46.4029Z" fill="#1746BD"/> -<path d="M22.5282 47.7174C22.3376 47.7174 22.1471 47.6981 21.9565 47.6836L22.5282 47.7174Z" fill="#1746BD"/> -<path d="M24.424 47.7344C24.1828 47.7344 23.9416 47.7464 23.6835 47.7464C23.9416 47.7464 24.1828 47.744 24.424 47.7344Z" fill="#1746BD"/> -<path d="M26.3706 47.5967C26.0498 47.6353 25.7266 47.6666 25.4058 47.6907C25.7266 47.657 26.0498 47.628 26.3706 47.5967Z" fill="#1746BD"/> -<path d="M37.2804 42.7365V43.2189L37.1959 43.2816L37.167 43.3033L37.1381 43.325C36.8969 43.4987 36.6556 43.6675 36.4144 43.8315C36.371 43.8629 36.3276 43.8894 36.2842 43.9184L36.1732 43.9932L36.0116 44.0993L35.8162 44.2247L35.5895 44.367L35.4231 44.4683L35.3025 44.5407C35.2446 44.5769 35.1891 44.6106 35.1312 44.642C35.0227 44.7071 34.9117 44.7698 34.8032 44.8301L34.6223 44.9314C34.562 44.9652 34.5017 44.999 34.439 45.0303C34.3352 45.0882 34.2291 45.1437 34.123 45.1992L33.9517 45.286L33.5561 45.4838L33.3559 45.5779C33.2233 45.643 33.0882 45.7033 32.9531 45.7636C32.8181 45.8239 32.6733 45.8866 32.5334 45.9469L32.3163 46.0362C32.174 46.0965 32.0293 46.1544 31.8846 46.2098L31.6651 46.2943C31.4456 46.3763 31.2261 46.4559 31.0018 46.5355L30.7799 46.6102C30.7051 46.6368 30.6303 46.6585 30.5555 46.6826L30.3312 46.7526L30.1045 46.8225L29.8778 46.8876L29.6486 46.9503L29.4195 47.0106C29.1638 47.0782 28.9057 47.1409 28.6452 47.1988L28.3171 47.2687L28.0181 47.329L27.7455 47.3797L27.5766 47.4086L27.3354 47.4521L27.0942 47.4882L26.8144 47.5292L26.6359 47.5534H26.5877L26.3754 47.5799C26.0546 47.6185 25.7314 47.6474 25.4106 47.674L24.9282 47.7053H24.687H24.4458C24.2046 47.7053 23.9634 47.7174 23.7053 47.7174C23.5147 47.7174 23.3242 47.7174 23.136 47.7174H23.0878C22.9093 47.7174 22.7284 47.7053 22.5499 47.6957L21.9783 47.6619L21.7033 47.6378L21.4211 47.6112L21.1075 47.5968C20.9676 47.5823 20.8253 47.5654 20.6854 47.5461L20.5069 47.522L20.2657 47.4858L20.0534 47.4545L19.7133 47.3966L19.4359 47.3556L19.161 47.3001L18.9728 47.2639L18.8788 47.2422L18.5917 47.1795L18.3505 47.1192C17.8319 46.9962 17.3182 46.8514 16.814 46.6923L16.7561 46.673L16.5149 46.5982L16.3364 46.5379L16.1362 46.4679L15.9626 46.4076L15.8492 46.3642L15.7407 46.3184H15.7117L15.21 46.1254L15.1111 46.0844H15.0918L14.9471 46.0241L14.8434 45.9807L14.7107 45.9228L14.6625 45.9011V43.354C14.6538 42.4189 14.8005 41.4888 15.0966 40.6018C15.0966 40.6018 15.0966 40.5849 15.0966 40.5753C15.1159 40.515 15.1377 40.4547 15.1594 40.3968C15.2593 40.1298 15.3728 39.8682 15.4995 39.6129C15.5284 39.5526 15.5598 39.4923 15.5911 39.4319C15.6225 39.3716 15.6514 39.3186 15.6828 39.2631C15.7141 39.2076 15.7334 39.1714 15.76 39.1256C15.7865 39.0798 15.8106 39.0388 15.8371 38.9954C15.8637 38.952 15.895 38.8989 15.9264 38.8506C15.9578 38.8024 15.9867 38.7542 16.0181 38.7059C16.8593 37.4125 18.04 36.3752 19.4311 35.7077C21.4732 34.7702 23.6968 34.2942 25.9437 34.3136C28.5704 34.3136 31.1248 34.9335 33.1582 36.0623L33.2281 36.1009L33.2956 36.1419C33.3801 36.1901 33.4669 36.2432 33.5513 36.2963C33.6357 36.3493 33.7226 36.4072 33.8094 36.4651L33.8745 36.5109C33.898 36.5256 33.9206 36.5418 33.9421 36.5592C34.1133 36.6798 34.2774 36.8004 34.439 36.9451L34.5837 37.0681L34.6126 37.0971C35.5812 37.9669 36.3216 39.0609 36.769 40.2834C36.769 40.3075 36.7883 40.3316 36.7955 40.3558C36.8028 40.3799 36.8148 40.4064 36.8221 40.4305C36.8558 40.527 36.8872 40.6235 36.9161 40.72C36.9475 40.8189 36.974 40.9154 37.0006 41.0143C37.0006 41.0408 37.015 41.0673 37.0199 41.0939C37.0247 41.1204 37.0343 41.1445 37.0392 41.171C37.1717 41.6835 37.2525 42.2079 37.2804 42.7365Z" fill="#1746BD"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M25.6302 11.013C23.8633 10.8909 22.088 10.9889 20.3453 11.3048C18.8544 11.5832 17.4023 12.04 16.0205 12.6652C14.4213 11.2397 14.2935 9.81419 14.2742 9.58987C15.6604 8.39337 17.3155 7.55008 19.0983 7.13198L18.7075 3.19067C18.8731 3.22453 19.0437 3.22453 19.2092 3.19067C19.3806 3.16334 19.5446 3.10182 19.6917 3.00977L20.6565 6.84253C22.6864 6.57711 24.7502 6.87588 26.6215 7.70605C26.677 8.09198 26.7638 9.38725 25.6302 11.013Z" fill="#4AA8F7"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M35.3 27.2706C35.3012 27.2883 35.3012 27.306 35.3 27.3237V27.2706ZM25.9267 22.9651C25.8876 22.9254 25.8411 22.8939 25.7897 22.8724C25.7384 22.8509 25.6833 22.8398 25.6276 22.8398C25.5719 22.8398 25.5168 22.8509 25.4655 22.8724C25.4141 22.8939 25.3676 22.9254 25.3285 22.9651C25.3285 22.9651 24.6049 23.6429 23.1359 23.9058C22.281 24.0646 21.401 24.0233 20.5647 23.7852C20.5112 23.7618 20.4535 23.7497 20.3952 23.7496C20.3368 23.7495 20.2791 23.7614 20.2256 23.7847C20.172 23.8079 20.1239 23.8419 20.0841 23.8846C20.0443 23.9272 20.0137 23.9776 19.9942 24.0327C19.9748 24.0877 19.9669 24.1461 19.971 24.2043C19.9752 24.2625 19.9913 24.3192 20.0183 24.3709C20.0454 24.4226 20.0828 24.4682 20.1282 24.5048C20.1737 24.5414 20.2262 24.5682 20.2825 24.5836C20.8594 24.7572 21.4602 24.8386 22.0626 24.8248C22.4718 24.825 22.8803 24.7887 23.2831 24.7163C25.0029 24.4099 25.876 23.5874 25.9122 23.5512C25.9906 23.4748 26.0361 23.3706 26.0388 23.2611C26.0415 23.1516 26.0012 23.0454 25.9267 22.9651Z" fill="#4AA8F7"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M20.268 1.6884C20.2296 1.47009 20.1361 1.26517 19.9965 1.09298C19.8569 0.920789 19.6758 0.787 19.4701 0.704233C19.2645 0.621467 19.0411 0.592451 18.8212 0.619924C18.6012 0.647396 18.3919 0.730451 18.2129 0.861253C18.0339 0.992055 17.8912 1.16629 17.7983 1.36753C17.7053 1.56877 17.6651 1.79037 17.6816 2.01144C17.698 2.2325 17.7704 2.44574 17.8921 2.63104C18.0138 2.81633 18.1807 2.96758 18.377 3.07051C18.4808 3.12627 18.5921 3.16689 18.7074 3.19111C18.873 3.22497 19.0436 3.22497 19.2091 3.19111C19.378 3.1614 19.5394 3.09871 19.684 3.00661C19.8286 2.91451 19.9537 2.79482 20.052 2.65436C20.1503 2.51391 20.22 2.35546 20.2571 2.18806C20.2942 2.02065 20.2979 1.84759 20.268 1.67875V1.6884ZM19.0162 2.05744C18.9743 2.06447 18.9314 2.05475 18.8966 2.03038C18.8619 2.00601 18.8381 1.96894 18.8305 1.92719C18.8247 1.89565 18.8284 1.86311 18.8412 1.8337C18.854 1.80428 18.8752 1.77934 18.9022 1.76203C18.9292 1.74472 18.9607 1.73583 18.9928 1.73649C19.0248 1.73716 19.056 1.74734 19.0822 1.76575C19.1085 1.78417 19.1286 1.80997 19.1402 1.83988C19.1517 1.8698 19.1541 1.90247 19.147 1.93375C19.14 1.96502 19.1237 1.99348 19.1004 2.01551C19.0771 2.03754 19.0478 2.05213 19.0162 2.05744Z" fill="#1746BD"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M25.9146 23.5632C25.8785 23.5993 25.0053 24.4219 23.2855 24.7282C22.8827 24.8006 22.4742 24.8369 22.065 24.8367C21.4626 24.8505 20.8619 24.7691 20.2849 24.5955C20.2317 24.5771 20.1826 24.5485 20.1405 24.5111C20.0983 24.4738 20.064 24.4285 20.0393 24.3779C20.0147 24.3273 20.0003 24.2723 19.9969 24.2161C19.9935 24.1599 20.0012 24.1036 20.0196 24.0504C20.0379 23.9972 20.0666 23.9481 20.1039 23.906C20.1413 23.8638 20.1866 23.8295 20.2372 23.8048C20.2878 23.7802 20.3428 23.7658 20.399 23.7624C20.4552 23.759 20.5115 23.7667 20.5647 23.7851C21.4012 24.0187 22.2803 24.0559 23.1335 23.8936C24.6025 23.6307 25.3189 22.9577 25.3261 22.9529C25.407 22.8752 25.5155 22.8328 25.6277 22.835C25.7399 22.8373 25.8466 22.884 25.9243 22.965C26.002 23.0459 26.0444 23.1544 26.0421 23.2666C26.0399 23.3787 25.9932 23.4854 25.9122 23.5632H25.9146Z" fill="#4AA8F7"/> -<path d="M19.6433 18.6835C19.5437 18.7356 19.4276 18.7464 19.3201 18.7134C19.2126 18.6804 19.1225 18.6064 19.0692 18.5074C19.0427 18.4543 18.3456 17.1807 16.9587 17.4171C16.5316 17.4781 16.1373 17.6803 15.8387 17.9916C15.5401 18.3029 15.3544 18.7053 15.3112 19.1345C15.3033 19.2412 15.2555 19.3409 15.1772 19.4138C15.099 19.4867 14.9961 19.5274 14.8891 19.5277H14.8602C14.7484 19.5202 14.6441 19.4689 14.57 19.3849C14.4959 19.3008 14.458 19.1909 14.4646 19.079C14.5186 18.4597 14.7802 17.8769 15.2071 17.425C15.6341 16.9731 16.2011 16.6788 16.8164 16.5898C18.4083 16.3172 19.4696 17.4702 19.8194 18.1166C19.8693 18.2155 19.8788 18.3299 19.846 18.4356C19.8131 18.5414 19.7404 18.6303 19.6433 18.6835Z" fill="white"/> -<path d="M28.6597 16.9399C28.5605 16.9928 28.4443 17.0043 28.3367 16.9718C28.2291 16.9392 28.1388 16.8653 28.0856 16.7662C28.0591 16.7131 27.362 15.442 25.975 15.6759C25.6808 15.7133 25.3997 15.8204 25.1551 15.9882C24.9106 16.156 24.7096 16.3797 24.5688 16.6408C24.4412 16.874 24.3594 17.1294 24.3276 17.3933C24.3209 17.5008 24.2735 17.6018 24.1951 17.6757C24.1168 17.7496 24.0132 17.7909 23.9055 17.7913H23.879C23.7665 17.7839 23.6616 17.7323 23.587 17.6478C23.5125 17.5633 23.4743 17.4528 23.481 17.3403C23.5349 16.721 23.7966 16.1381 24.2235 15.6862C24.6504 15.2344 25.2175 14.94 25.8327 14.851C27.4247 14.5785 28.486 15.7314 28.8357 16.3779C28.886 16.4759 28.8958 16.5898 28.8628 16.6949C28.8299 16.8001 28.7569 16.8881 28.6597 16.9399Z" fill="white"/> -<path d="M25.9146 23.5632C25.8785 23.5993 25.0053 24.4219 23.2855 24.7282C22.8827 24.8006 22.4742 24.8369 22.065 24.8367C21.4626 24.8505 20.8619 24.7691 20.2849 24.5955C20.2317 24.5771 20.1826 24.5485 20.1405 24.5111C20.0983 24.4738 20.064 24.4285 20.0393 24.3779C20.0147 24.3273 20.0003 24.2723 19.9969 24.2161C19.9935 24.1599 20.0012 24.1036 20.0196 24.0504C20.0379 23.9972 20.0666 23.9481 20.1039 23.906C20.1413 23.8638 20.1866 23.8295 20.2372 23.8048C20.2878 23.7802 20.3428 23.7658 20.399 23.7624C20.4552 23.759 20.5115 23.7667 20.5647 23.7851C21.4012 24.0187 22.2803 24.0559 23.1335 23.8936C24.6025 23.6307 25.3189 22.9577 25.3261 22.9529C25.407 22.8752 25.5155 22.8328 25.6277 22.835C25.7399 22.8373 25.8466 22.884 25.9243 22.965C26.002 23.0459 26.0444 23.1544 26.0421 23.2666C26.0399 23.3787 25.9932 23.4854 25.9122 23.5632H25.9146Z" fill="white"/> -<path d="M9.62111 17.2051L9.5994 17.4005C9.59211 17.3345 9.59952 17.2678 9.62111 17.2051Z" fill="white"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M35.3001 27.3356C35.3001 27.3854 35.3001 27.4361 35.3001 27.4875C35.3001 27.502 35.3001 27.5165 35.3001 27.5309C35.2748 27.7411 35.1946 27.9409 35.0675 28.1103C34.9405 28.2797 34.7712 28.4126 34.5765 28.4958C34.4988 28.5338 34.4182 28.5653 34.3353 28.5898C32.325 29.3143 30.2794 29.9366 28.2062 30.4544C25.6719 31.0832 23.1037 31.5664 20.5142 31.9016C18.1833 32.2236 15.8336 32.3904 13.4806 32.4009H13.3286H13.278L13.2056 32.3864L13.1357 32.3695L13.0657 32.3478L12.9982 32.3213L12.9306 32.2899L12.8824 32.2658L12.8486 32.2465L12.8149 32.2272L12.7763 32.2007L12.7136 32.1524C12.68 32.1269 12.6485 32.0986 12.6195 32.068L12.5471 31.9932L12.5254 31.9619C12.5161 31.9525 12.508 31.942 12.5013 31.9305L12.4699 31.8871L12.4362 31.8365L12.4169 31.8027C12.4079 31.7887 12.3999 31.7742 12.3928 31.7593C12.3928 31.7352 12.371 31.7134 12.3614 31.6893L12.3493 31.6604L12.3349 31.6218C12.3298 31.6101 12.3257 31.598 12.3228 31.5856C12.3228 31.5639 12.3083 31.5398 12.3035 31.5181C12.3035 31.4915 12.2915 31.4626 12.2866 31.4337L12.0864 30.2807C16.2073 29.9395 20.3082 29.3896 24.3735 28.6332C30.2734 27.5454 33.8215 26.4262 35.0878 25.98L35.2736 27.0582C35.2874 27.133 35.2955 27.2088 35.2977 27.2849C35.2996 27.3017 35.3004 27.3186 35.3001 27.3356Z" fill="#1746BD"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M35.0877 25.9632H35.0852L35.0684 25.8667L35.0877 25.9632Z" fill="#1746BD"/> -<path d="M37.7048 42.9006C37.7222 42.884 37.7408 42.8687 37.7603 42.8547L37.7048 42.9006ZM37.8713 42.7679L38.0401 42.6328C37.9846 42.6786 37.9316 42.7221 37.8713 42.7727V42.7679Z" fill="white"/> -<path d="M37.7603 42.8574C37.7408 42.8714 37.7222 42.8867 37.7048 42.9032L37.7603 42.8574Z" fill="white"/> -<path d="M37.7048 42.9008C37.7222 42.8842 37.7408 42.8689 37.7603 42.855L37.7048 42.9008Z" fill="white"/> -<path d="M37.8713 42.7728L38.0402 42.6377C37.9847 42.6787 37.9316 42.7221 37.8713 42.7728Z" fill="white"/> -<path d="M33.9443 36.3569C33.9443 36.3835 33.9274 36.41 33.9226 36.4365L33.9877 36.4824L34.0094 36.4028L33.9443 36.3569Z" fill="white"/> -<path d="M41.8318 27.912C40.8935 27.3717 39.6031 27.6274 38.2137 28.6357C36.9112 29.5691 35.6328 31.0477 34.6101 32.8302C34.1598 33.6065 33.775 34.419 33.4596 35.2592C31.1499 34.0634 28.5829 33.4506 25.9822 33.4742C23.6069 33.4544 21.2565 33.9584 19.0982 34.9504C17.6158 35.6585 16.3499 36.7504 15.4318 38.1126L15.3667 38.074C13.6783 37.1092 10.8875 38.7977 8.70459 42.0901L8.82278 42.1938L9.03745 42.3772L9.25695 42.5605L9.37755 42.6594V42.6449C10.902 40.3028 12.9185 38.6722 14.2644 38.6722C14.4896 38.668 14.7119 38.7238 14.9084 38.8338L14.9542 38.8604C14.1952 40.2383 13.797 41.7857 13.7964 43.3589V45.4911L13.8736 45.5297L14.2161 45.6913L14.2789 45.7203L14.4212 45.783L14.5538 45.8409L14.631 45.8747V43.354C14.6324 42.4172 14.7897 41.4871 15.0965 40.6019C15.0965 40.6019 15.0965 40.585 15.0965 40.5754C15.1158 40.5151 15.1376 40.4548 15.1593 40.3969C15.2592 40.1299 15.3727 39.8683 15.4994 39.6129C15.5283 39.5526 15.5597 39.4923 15.591 39.432C15.6224 39.3717 15.6513 39.3187 15.6827 39.2632C15.714 39.2077 15.7333 39.1715 15.7599 39.1257C15.7864 39.0799 15.8105 39.0389 15.8371 38.9955C15.8636 38.952 15.8949 38.899 15.9263 38.8507C15.9577 38.8025 15.9866 38.7542 16.018 38.706C16.8592 37.4125 18.0399 36.3753 19.431 35.7078C21.4731 34.7703 23.6967 34.2943 25.9436 34.3136C28.5703 34.3136 31.1247 34.9335 33.1581 36.0624L33.228 36.101L33.2955 36.142C33.38 36.1902 33.4668 36.2433 33.5512 36.2964C33.6356 36.3494 33.7225 36.4073 33.8093 36.4652L33.8744 36.511C33.8979 36.5257 33.9205 36.5418 33.942 36.5593C34.1132 36.6799 34.2773 36.8005 34.4389 36.9452L34.5836 37.0682L34.6125 37.0972C35.5811 37.967 36.3215 39.061 36.7689 40.2835C36.7689 40.3076 36.7882 40.3317 36.7954 40.3559C36.8027 40.38 36.8147 40.4065 36.822 40.4306C36.8557 40.5271 36.8871 40.6236 36.916 40.7201C36.9474 40.819 36.9739 40.9155 37.0005 41.0144C37.0005 41.0409 37.0149 41.0674 37.0198 41.0939C37.0246 41.1205 37.0342 41.1446 37.0391 41.1711C37.1633 41.6836 37.236 42.2072 37.2561 42.7341V43.2166L37.3333 43.1587L37.4829 43.0429C37.5456 42.9971 37.6059 42.9488 37.6662 42.9006L37.7217 42.8572L37.7747 42.8137L37.8302 42.7679C37.8881 42.7221 37.9436 42.6787 37.9991 42.6304L38.0714 42.5701C38.038 41.9284 37.9329 41.2925 37.7579 40.6742C39.1371 39.5569 40.2891 38.1854 41.1516 36.634C42.1743 34.8636 42.8232 33.016 42.9824 31.4168C43.1946 29.6994 42.7701 28.4548 41.8318 27.912ZM33.9878 36.4821L33.9227 36.4363C33.9227 36.4097 33.9372 36.3832 33.9444 36.3567L34.0095 36.4025L33.9878 36.4821ZM40.4135 36.1854C39.6572 37.542 38.6685 38.7552 37.4925 39.7697C36.8356 38.1249 35.6994 36.7156 34.2314 35.7247C34.5393 34.876 34.9227 34.0566 35.3772 33.2765C35.9643 32.2436 36.6772 31.2875 37.4998 30.4302C38.8028 31.439 40.3248 32.1272 41.9428 32.4395C41.6187 33.7561 41.1034 35.0181 40.4135 36.1854ZM42.1285 31.3275C42.1285 31.4192 42.1092 31.5108 42.0972 31.6049C40.6572 31.3207 39.2995 30.7165 38.1245 29.8369C38.3247 29.6656 38.5249 29.5064 38.7251 29.3544C39.4801 28.8141 40.1723 28.5295 40.7512 28.5295C40.9719 28.5238 41.19 28.5771 41.3832 28.6839C41.9886 29.0409 42.2732 30.0033 42.1285 31.3275Z" fill="white"/> -</svg> diff --git a/web/src/assets/svgs/icons/list.svg b/web/src/assets/svgs/icons/list.svg deleted file mode 100644 index 338c5b4a4..000000000 --- a/web/src/assets/svgs/icons/list.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M3 3C3 3.82844 2.32844 4.5 1.5 4.5C0.671562 4.5 0 3.82844 0 3C0 2.17156 0.671562 1.5 1.5 1.5C2.32844 1.5 3 2.17156 3 3ZM1.5 6.5C0.671562 6.5 0 7.17156 0 8C0 8.82844 0.671562 9.5 1.5 9.5C2.32844 9.5 3 8.82844 3 8C3 7.17156 2.32844 6.5 1.5 6.5ZM1.5 11.5C0.671562 11.5 0 12.1716 0 13C0 13.8284 0.671562 14.5 1.5 14.5C2.32844 14.5 3 13.8284 3 13C3 12.1716 2.32844 11.5 1.5 11.5ZM4.5 4.125H15.5C15.7762 4.125 16 3.90116 16 3.625V2.375C16 2.09884 15.7762 1.875 15.5 1.875H4.5C4.22384 1.875 4 2.09884 4 2.375V3.625C4 3.90116 4.22384 4.125 4.5 4.125ZM4.5 9.125H15.5C15.7762 9.125 16 8.90116 16 8.625V7.375C16 7.09884 15.7762 6.875 15.5 6.875H4.5C4.22384 6.875 4 7.09884 4 7.375V8.625C4 8.90116 4.22384 9.125 4.5 9.125ZM4.5 14.125H15.5C15.7762 14.125 16 13.9012 16 13.625V12.375C16 12.0988 15.7762 11.875 15.5 11.875H4.5C4.22384 11.875 4 12.0988 4 12.375V13.625C4 13.9012 4.22384 14.125 4.5 14.125Z" /> -</svg> diff --git a/web/src/assets/svgs/icons/locker.svg b/web/src/assets/svgs/icons/locker.svg deleted file mode 100644 index 5047c6ba3..000000000 --- a/web/src/assets/svgs/icons/locker.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 14 15" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M11.7083 6.625H11.0583V4.65625C11.0583 2.36484 9.21125 0.5 6.94167 0.5C4.67208 0.5 2.825 2.36484 2.825 4.65625V6.625H2.175C1.45729 6.625 0.875 7.21289 0.875 7.9375V13.1875C0.875 13.9121 1.45729 14.5 2.175 14.5H11.7083C12.426 14.5 13.0083 13.9121 13.0083 13.1875V7.9375C13.0083 7.21289 12.426 6.625 11.7083 6.625ZM8.89167 6.625H4.99167V4.65625C4.99167 3.5707 5.86646 2.6875 6.94167 2.6875C8.01688 2.6875 8.89167 3.5707 8.89167 4.65625V6.625Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/long-arrow-up.svg b/web/src/assets/svgs/icons/long-arrow-up.svg deleted file mode 100644 index e9cb6227d..000000000 --- a/web/src/assets/svgs/icons/long-arrow-up.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_21959_49121)"> -<path d="M6.19082 4.68936V14.125C6.19082 14.3321 6.35873 14.5 6.56582 14.5H8.31582C8.52291 14.5 8.69082 14.3321 8.69082 14.125V4.68936H10.1302C10.7983 4.68936 11.133 3.88152 10.6605 3.40902L7.97116 0.719679C7.67826 0.426774 7.20338 0.426774 6.91051 0.719679L4.22117 3.40902C3.7487 3.88149 4.08333 4.68936 4.75151 4.68936H6.19082Z" fill="#B45FFF"/> -</g> -<defs> -<clipPath id="clip0_21959_49121"> -<rect width="14" height="14" fill="white" transform="translate(0.5 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/min-stake.svg b/web/src/assets/svgs/icons/min-stake.svg deleted file mode 100644 index f32930b31..000000000 --- a/web/src/assets/svgs/icons/min-stake.svg +++ /dev/null @@ -1,13 +0,0 @@ -<svg width="32" height="32" viewBox="10 9 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_14856_32616)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M19.6025 9.3125L30.0528 9.78456L34.2837 19.285L28.3147 27.9678L17.8076 27.2878L13.5 16.9941L19.6025 9.3125ZM27.264 14.7888L19.6903 18.1329L26.1653 23.1925L27.264 14.7888ZM26.3871 13.1131L20.3345 10.4793L19.063 16.0169L26.3871 13.1131ZM24.853 24.4655L18.2749 19.7185L18.4341 26.1509L24.853 24.4655ZM33.233 19.264L28.7504 14.6671L27.5673 23.5068L33.233 19.264ZM26.3952 25.4994L20.8475 26.9648L27.3716 27.387L26.3952 25.4994ZM32.357 21.3497L27.5008 25.0057L28.4657 26.9115L32.357 21.3497ZM30.06 11.112L29.1168 13.0688L32.6276 16.6755L30.06 11.112ZM28.8848 10.1755L22.7197 9.92262L27.8052 12.1706L28.8848 10.1755ZM18.7022 11.0805L14.384 16.5911L17.2711 17.2091L18.7022 11.0805ZM17.097 18.2901L14.196 17.6694L17.2229 24.8762L17.097 18.2901Z"/> -</g> -<path fill-rule="evenodd" clip-rule="evenodd" d="M18.5937 37L16.8536 31.9891H16.8208C16.8673 32.7332 16.8906 33.4309 16.8906 34.0821V37H16V31H17.383L19.0492 35.7729H19.0739L20.7893 31H22.1765V37H21.2326V34.0328C21.2326 33.7346 21.2394 33.3461 21.2531 32.8673C21.2695 32.3885 21.2832 32.0985 21.2941 31.9973H21.2613L19.4596 37H18.5937Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M23.7565 37V31H24.7373V37H23.7565Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M31.3242 37H30.1217L27.171 32.2189H27.1382L27.1587 32.4856C27.197 32.9945 27.2161 33.4596 27.2161 33.881V37H26.3256V31H27.5157L30.4583 35.7565H30.4829C30.4774 35.6936 30.4665 35.4651 30.4501 35.0711C30.4337 34.6744 30.4254 34.3653 30.4254 34.1436V31H31.3242V37Z"/> -<defs> -<clipPath id="clip0_14856_32616"> -<rect width="20.7837" height="21" fill="white" transform="translate(13.5 8)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/minus.svg b/web/src/assets/svgs/icons/minus.svg deleted file mode 100644 index 76b4d2a91..000000000 --- a/web/src/assets/svgs/icons/minus.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"> - <path d="M15.8261 7.33203H0.173913C0.0782609 7.33203 0 7.41029 0 7.50594V8.81029C0 8.90595 0.0782609 8.98421 0.173913 8.98421H15.8261C15.9217 8.98421 16 8.90595 16 8.81029V7.50594C16 7.41029 15.9217 7.33203 15.8261 7.33203Z" fill="white"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/new-tab.svg b/web/src/assets/svgs/icons/new-tab.svg deleted file mode 100644 index 5bc0dec10..000000000 --- a/web/src/assets/svgs/icons/new-tab.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="16" height="16" viewBox="0 0 48 48"> -<path d="M 40.960938 4.9804688 A 2.0002 2.0002 0 0 0 40.740234 5 L 28 5 A 2.0002 2.0002 0 1 0 28 9 L 36.171875 9 L 22.585938 22.585938 A 2.0002 2.0002 0 1 0 25.414062 25.414062 L 39 11.828125 L 39 20 A 2.0002 2.0002 0 1 0 43 20 L 43 7.2460938 A 2.0002 2.0002 0 0 0 40.960938 4.9804688 z M 12.5 8 C 8.3826878 8 5 11.382688 5 15.5 L 5 35.5 C 5 39.617312 8.3826878 43 12.5 43 L 32.5 43 C 36.617312 43 40 39.617312 40 35.5 L 40 26 A 2.0002 2.0002 0 1 0 36 26 L 36 35.5 C 36 37.446688 34.446688 39 32.5 39 L 12.5 39 C 10.553312 39 9 37.446688 9 35.5 L 9 15.5 C 9 13.553312 10.553312 12 12.5 12 L 22 12 A 2.0002 2.0002 0 1 0 22 8 L 12.5 8 z"></path> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/paperclip.svg b/web/src/assets/svgs/icons/paperclip.svg deleted file mode 100644 index 733c87215..000000000 --- a/web/src/assets/svgs/icons/paperclip.svg +++ /dev/null @@ -1,17 +0,0 @@ -<svg fill="#000000" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 373.482 373.482" xml:space="preserve"> -<g> - <path d="M355.488,84.873c-2.401-22.768-13.499-43.217-31.249-57.579l-10.213-8.266C298.863,6.757,279.765,0,260.246,0 - c-26.031,0-50.317,11.563-66.632,31.726L36.583,225.781c-14.386,17.773-20.989,40.088-18.591,62.831 - c2.398,22.741,13.51,43.188,31.288,57.576l10.213,8.266c15.161,12.271,34.258,19.028,53.772,19.028 - c3.013,0,6.061-0.161,9.059-0.479c22.604-2.383,42.957-13.367,57.251-30.859c0.048-0.056,0.076-0.089,105.94-130.895 - c18.854-23.303,15.236-57.602-8.063-76.458l-5.353-4.329c-9.628-7.792-21.757-12.083-34.149-12.083 - c-16.527,0-31.947,7.343-42.307,20.145L89.902,269.192c-6.909,8.54-5.584,21.11,2.956,28.021c3.534,2.859,7.981,4.434,12.521,4.434 - c6.048,0,11.697-2.691,15.5-7.389l105.739-130.668c2.766-3.417,6.886-5.377,11.302-5.377c3.356,0,6.507,1.115,9.113,3.224 - l5.354,4.334c3.008,2.434,4.888,5.9,5.295,9.762c0.406,3.862-0.709,7.645-3.144,10.651l-105.618,130.52 - c-8.721,10.77-21.703,16.945-35.618,16.946c-10.432,0-20.64-3.611-28.744-10.171l-10.213-8.264 - c-9.504-7.693-15.445-18.625-16.726-30.781c-1.282-12.157,2.247-24.088,9.938-33.59L224.589,56.791 - c8.721-10.776,21.707-16.957,35.628-16.957c10.433,0,20.642,3.611,28.744,10.169l10.212,8.264 - c19.619,15.877,22.664,44.754,6.789,64.372c-3.348,4.138-4.884,9.33-4.326,14.623c0.559,5.292,3.145,10.051,7.28,13.397 - c3.535,2.86,7.982,4.436,12.522,4.436l0,0c6.048,0,11.696-2.693,15.498-7.39C351.301,129.955,357.89,107.64,355.488,84.873z"/> -</g> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/phone.svg b/web/src/assets/svgs/icons/phone.svg deleted file mode 100644 index 4164619d2..000000000 --- a/web/src/assets/svgs/icons/phone.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_14018_54611)"> -<path d="M15.975 12.5939L15.2484 15.7439C15.1464 16.1892 14.755 16.5008 14.2966 16.5008C6.4125 16.5002 0 10.0877 0 2.20331C0 1.74518 0.311531 1.35331 0.756875 1.25175L3.90687 0.525184C4.36562 0.418872 4.83437 0.656996 5.025 1.09143L6.47875 4.48205C6.64869 4.88143 6.53406 5.34674 6.19812 5.62112L4.51562 6.97205C5.5775 9.13517 7.33625 10.8939 9.5 11.9564L10.8775 10.2752C11.149 9.9383 11.6178 9.82174 12.0172 9.9947L15.4078 11.4481C15.8156 11.6627 16.0813 12.1377 15.975 12.5939Z"/> -</g> -</svg> diff --git a/web/src/assets/svgs/icons/pile-coins.svg b/web/src/assets/svgs/icons/pile-coins.svg deleted file mode 100644 index 9e366311e..000000000 --- a/web/src/assets/svgs/icons/pile-coins.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg viewBox="0 0 14 15" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_11557_149813)"> -<path d="M0 11.5824V12.75C0 13.7152 2.35156 14.5 5.25 14.5C8.14844 14.5 10.5 13.7152 10.5 12.75V11.5824C9.3707 12.3781 7.30625 12.75 5.25 12.75C3.19375 12.75 1.1293 12.3781 0 11.5824ZM8.75 4C11.6484 4 14 3.21523 14 2.25C14 1.28477 11.6484 0.5 8.75 0.5C5.85156 0.5 3.5 1.28477 3.5 2.25C3.5 3.21523 5.85156 4 8.75 4ZM0 8.71406V10.125C0 11.0902 2.35156 11.875 5.25 11.875C8.14844 11.875 10.5 11.0902 10.5 10.125V8.71406C9.3707 9.64375 7.30352 10.125 5.25 10.125C3.19648 10.125 1.1293 9.64375 0 8.71406ZM11.375 9.01484C12.9418 8.71133 14 8.14805 14 7.5V6.33242C13.3656 6.78086 12.4332 7.08711 11.375 7.27578V9.01484ZM5.25 4.875C2.35156 4.875 0 5.85391 0 7.0625C0 8.27109 2.35156 9.25 5.25 9.25C8.14844 9.25 10.5 8.27109 10.5 7.0625C10.5 5.85391 8.14844 4.875 5.25 4.875ZM11.2465 6.41445C12.8871 6.11914 14 5.53945 14 4.875V3.70742C13.0293 4.39375 11.3613 4.76289 9.60586 4.85039C10.4125 5.24141 11.0059 5.76641 11.2465 6.41445Z" /> -</g> -<defs> -<clipPath id="clip0_11557_149813"> -<rect width="14" height="15" transform="translate(0 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/plus.svg b/web/src/assets/svgs/icons/plus.svg deleted file mode 100644 index 7a1ce9bc3..000000000 --- a/web/src/assets/svgs/icons/plus.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g id="Icons/Plus" clip-path="url(#clip0_13549_180111)"> -<path id="Icon plus" fill-rule="evenodd" clip-rule="evenodd" d="M8.69715 0H7.3018C7.17777 0 7.11576 0.0592593 7.11576 0.177778V7.15547H0.186047C0.0620155 7.15547 0 7.21473 0 7.33325V8.66658C0 8.7851 0.0620155 8.84436 0.186047 8.84436H7.11576V15.8222C7.11576 15.9407 7.17777 16 7.3018 16H8.69715C8.82118 16 8.8832 15.9407 8.8832 15.8222V8.84436H15.814C15.938 8.84436 16 8.7851 16 8.66658V7.33325C16 7.21473 15.938 7.15547 15.814 7.15547H8.8832V0.177778C8.8832 0.0592593 8.82118 0 8.69715 0Z" fill="white"/> -</g> -<defs> -<clipPath id="clip0_13549_180111"> -<rect width="16" height="16" fill="white"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/pnk-eth.svg b/web/src/assets/svgs/icons/pnk-eth.svg deleted file mode 100644 index 209c55976..000000000 --- a/web/src/assets/svgs/icons/pnk-eth.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="49" height="48" viewBox="0 0 49 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M27.335 27.575L34.3304 23.225L27.335 11L20.335 23.225L27.335 27.575ZM20.335 24.6219L27.335 28.9719L34.335 24.6219L27.335 35L20.335 24.6219ZM13.2712 26L18.2993 26.2277L20.335 30.8111L17.463 35L12.4075 34.6719L10.335 29.7059L13.2712 26ZM16.9574 28.642L13.3134 30.2553L16.4288 32.6962L16.9574 28.642ZM16.5355 27.8335L13.6233 26.5629L13.0116 29.2345L16.5355 27.8335ZM15.7974 33.3104L12.6324 31.0202L12.709 34.1235L15.7974 33.3104ZM19.8294 30.801L17.6726 28.5833L17.1034 32.8479L19.8294 30.801ZM16.5395 33.8092L13.8702 34.5161L17.0092 34.7198L16.5395 33.8092ZM19.4079 31.8072L17.0714 33.571L17.5357 34.4904L19.4079 31.8072ZM18.3027 26.8681L17.8489 27.8122L19.5381 29.5522L18.3027 26.8681ZM17.7373 26.4164L14.771 26.2943L17.2178 27.3789L17.7373 26.4164ZM12.838 26.8529L10.7603 29.5115L12.1494 29.8096L12.838 26.8529ZM12.0656 30.3311L10.6698 30.0317L12.1262 33.5085L12.0656 30.3311Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/pnk-usd.svg b/web/src/assets/svgs/icons/pnk-usd.svg deleted file mode 100644 index c4abeeb06..000000000 --- a/web/src/assets/svgs/icons/pnk-usd.svg +++ /dev/null @@ -1,8 +0,0 @@ -<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M29.5858 9.43018L20.5351 9L15.25 16L18.9806 25.3803L28.0804 26L33.25 18.0876L29.5858 9.43018ZM20.6112 17.0378L27.1705 13.9904L26.2189 21.6484L20.6112 17.0378ZM21.1691 10.0633L26.411 12.4633L20.0679 15.1095L21.1691 10.0633ZM19.3854 18.4827L25.0824 22.8085L19.5232 24.3444L19.3854 18.4827ZM28.4578 13.8795L32.34 18.0686L27.4332 21.9349L28.4578 13.8795ZM21.6134 25.0861L26.4181 23.7507L27.2637 25.4708L21.6134 25.0861ZM27.3756 23.3008L31.5814 19.9691L28.2113 25.0375L27.3756 23.3008ZM28.7751 12.423L29.592 10.6398L31.8157 15.7097L28.7751 12.423ZM23.2349 9.55598L28.5742 9.78645L27.6392 11.6045L23.2349 9.55598ZM16.0156 15.6328L19.7554 10.6111L18.516 16.1959L16.0156 15.6328ZM15.8528 16.6154L18.3652 17.181L18.4743 23.1827L15.8528 16.6154Z"/> -<path d="M9 29C9 28.8619 9.11193 28.75 9.25 28.75L39.25 28.75C39.3881 28.75 39.5 28.8619 39.5 29C39.5 29.1381 39.3881 29.25 39.25 29.25L9.25 29.25C9.11193 29.25 9 29.1381 9 29Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M13.8424 36.2389C13.836 36.6283 13.9286 36.9351 14.1201 37.1593C14.3117 37.3835 14.6277 37.5015 15.0683 37.5133V35.3717C14.8065 35.3068 14.5447 35.2301 14.2829 35.1416C14.0275 35.0472 13.7945 34.9292 13.5838 34.7876C13.3795 34.6401 13.2134 34.4572 13.0857 34.2389C12.958 34.0206 12.8942 33.7493 12.8942 33.4248C12.8942 33.1416 12.9517 32.8938 13.0666 32.6814C13.1879 32.4631 13.3475 32.2832 13.5455 32.1416C13.7498 31.9941 13.9828 31.882 14.2446 31.8053C14.5064 31.7286 14.781 31.6903 15.0683 31.6903V31H15.4801V31.6903C15.7675 31.6903 16.0388 31.7257 16.2942 31.7965C16.5496 31.8673 16.7699 31.9735 16.9551 32.115C17.1466 32.2566 17.2967 32.4366 17.4052 32.6549C17.5201 32.8732 17.5776 33.1268 17.5776 33.4159H16.4858C16.473 33.115 16.3868 32.885 16.2272 32.7257C16.0739 32.5664 15.8249 32.4867 15.4801 32.4867V34.354C15.7675 34.4248 16.0484 34.5074 16.3229 34.6018C16.5975 34.6962 16.8401 34.8171 17.0508 34.9646C17.2615 35.1121 17.4307 35.295 17.5584 35.5133C17.6861 35.7316 17.75 36 17.75 36.3186C17.75 36.649 17.6893 36.9381 17.568 37.1858C17.4531 37.4277 17.2935 37.6313 17.0892 37.7965C16.8848 37.9558 16.6454 38.0767 16.3708 38.1593C16.0963 38.2478 15.7994 38.2979 15.4801 38.3097V39H15.0683V38.3097C14.7235 38.3038 14.4074 38.2537 14.1201 38.1593C13.8328 38.0649 13.587 37.9322 13.3826 37.7611C13.1783 37.5841 13.0187 37.3687 12.9038 37.115C12.7952 36.8614 12.7441 36.5693 12.7505 36.2389H13.8424ZM15.0683 32.4867C14.7235 32.4867 14.4553 32.5546 14.2638 32.6903C14.0786 32.8201 13.986 33.0413 13.986 33.354C13.986 33.4956 14.018 33.6165 14.0818 33.7168C14.1457 33.8171 14.2255 33.9027 14.3212 33.9735C14.4234 34.0442 14.5383 34.1032 14.666 34.1504C14.8001 34.1917 14.9342 34.2271 15.0683 34.2566V32.4867ZM15.4801 37.5133C15.8249 37.4897 16.1059 37.3982 16.3229 37.2389C16.5464 37.0737 16.6582 36.8142 16.6582 36.4602C16.6582 36.295 16.623 36.1563 16.5528 36.0442C16.489 35.9322 16.3996 35.8378 16.2846 35.7611C16.1761 35.6844 16.0516 35.6224 15.9111 35.5752C15.7706 35.528 15.627 35.4867 15.4801 35.4513V37.5133Z"/> -<path d="M30.4014 36.3812C30.4014 36.9181 30.2073 37.3393 29.8191 37.6449C29.431 37.9505 28.8955 38.1033 28.2127 38.1033C27.53 38.1033 26.9711 37.9973 26.5361 37.7853V36.852C26.8114 36.9814 27.1033 37.0833 27.4116 37.1576C27.7227 37.2319 28.0118 37.2691 28.2788 37.2691C28.6698 37.2691 28.9574 37.1948 29.1419 37.0461C29.3291 36.8974 29.4227 36.6978 29.4227 36.4473C29.4227 36.2216 29.3374 36.0302 29.1667 35.8733C28.996 35.7164 28.6436 35.5306 28.1095 35.3158C27.5589 35.0928 27.1707 34.8382 26.945 34.5518C26.7192 34.2655 26.6063 33.9214 26.6063 33.5194C26.6063 33.0156 26.7853 32.6192 27.1432 32.3301C27.5011 32.0411 27.9815 31.8965 28.5844 31.8965C29.1625 31.8965 29.7379 32.0232 30.3106 32.2764L29.9967 33.0817C29.4599 32.856 28.9808 32.7431 28.5596 32.7431C28.2403 32.7431 27.998 32.8133 27.8328 32.9537C27.6676 33.0913 27.585 33.2744 27.585 33.5029C27.585 33.6599 27.6181 33.7948 27.6842 33.9076C27.7502 34.0178 27.859 34.1224 28.0104 34.2215C28.1618 34.3206 28.4344 34.4514 28.828 34.6138C29.2713 34.7982 29.5962 34.9703 29.8026 35.13C30.0091 35.2897 30.1605 35.47 30.2569 35.671C30.3532 35.8719 30.4014 36.1087 30.4014 36.3812Z"/> -<path d="M25.5362 31.94V35.8466C25.5362 36.2926 25.4398 36.6835 25.2471 37.0194C25.0572 37.3525 24.7805 37.6099 24.4171 37.7916C24.0564 37.9705 23.6242 38.06 23.1204 38.06C22.3715 38.06 21.7893 37.8618 21.3736 37.4654C20.9579 37.0689 20.75 36.5238 20.75 35.83V31.94H21.7411V35.7598C21.7411 36.2581 21.8567 36.6257 22.088 36.8624C22.3192 37.0992 22.6744 37.2176 23.1534 37.2176C24.0839 37.2176 24.5492 36.7289 24.5492 35.7516V31.94H25.5362Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M35.4814 37.2297C36.0348 36.7011 36.3114 35.9385 36.3114 34.9419C36.3114 34.0031 36.0444 33.2749 35.5103 32.7574C34.9762 32.2398 34.2288 31.981 33.2679 31.981H31.4014V38.0184H33.0904C34.131 38.0184 34.928 37.7555 35.4814 37.2297ZM33.2432 32.8069C34.5949 32.8069 35.2708 33.5296 35.2708 34.9749C35.2708 36.4506 34.544 37.1884 33.0904 37.1884H32.3883V32.8069H33.2432Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/pnk.svg b/web/src/assets/svgs/icons/pnk.svg deleted file mode 100644 index ba8427141..000000000 --- a/web/src/assets/svgs/icons/pnk.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg height="32" width="32" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_13719_38976)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M6.60249 1.8125L17.0528 2.28456L21.2837 11.785L15.3147 20.4678L4.80756 19.7878L0.5 9.49409L6.60249 1.8125ZM14.264 7.28878L6.69025 10.6329L13.1653 15.6925L14.264 7.28878ZM13.3871 5.61306L7.33447 2.97929L6.06304 8.51691L13.3871 5.61306ZM11.853 16.9655L5.27494 12.2185L5.43405 18.6509L11.853 16.9655ZM20.233 11.764L15.7504 7.1671L14.5673 16.0068L20.233 11.764ZM13.3952 17.9994L7.84753 19.4648L14.3716 19.887L13.3952 17.9994ZM19.357 13.8497L14.5008 17.5057L15.4657 19.4115L19.357 13.8497ZM17.06 3.61196L16.1168 5.56883L19.6276 9.1755L17.06 3.61196ZM15.8848 2.67553L9.71972 2.42262L14.8052 4.6706L15.8848 2.67553ZM5.7022 3.58046L1.38398 9.09109L4.27107 9.7091L5.7022 3.58046ZM4.09698 10.7901L1.19598 10.1694L4.22295 17.3762L4.09698 10.7901Z" /> -</g> -<defs> -<clipPath id="clip0_13719_38976"> -<rect width="22" height="22" transform="translate(0.5 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/poh-image.png b/web/src/assets/svgs/icons/poh-image.png deleted file mode 100644 index 3f7e06a1c0ab47989b321693decea814e875e2f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24540 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 LNkvXXu0mjfB6E%r diff --git a/web/src/assets/svgs/icons/poh.svg b/web/src/assets/svgs/icons/poh.svg deleted file mode 100644 index 8bfdaee0c..000000000 --- a/web/src/assets/svgs/icons/poh.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 48 48"> -<defs><linearGradient id="gradientpoh" x1="2.981%" x2="45.577%" y1="23.872%" y2="23.872%" gradientUnits=><stop stop-color="#FF993B"/><stop offset="1" stop-color="#FF8CA7"/></linearGradient></defs> -<path fill="url(#gradientpoh)" d="M45.41 27.503a4.313 4.313 0 0 0-.456-.788c-1.08-1.411-2.2-2.801-3.322-4.15a4.44 4.44 0 0 1-1.079-3.113c.22-2.263.135-4.545-.25-6.785a12.884 12.884 0 0 0-2.988-6.433A18.33 18.33 0 0 0 23.552.01a21.16 21.16 0 0 0-8.179 1.39 20.758 20.758 0 0 0-9.777 7.284 13.962 13.962 0 0 0-2.594 7.574c-.026 2.054.275 4.1.892 6.059.747 2.324 1.744 4.565 2.657 6.827a63.116 63.116 0 0 1 2.491 6.66c.957 3.012.913 6.251-.124 9.235v.27a1.307 1.307 0 0 0 .871 1.784 30.297 30.297 0 0 0 8.843.872 31.832 31.832 0 0 0 8.698-.789 2.49 2.49 0 0 0 1.723-2.075c.094-.462.233-.914.415-1.349.196-.444.512-.826.913-1.1a3.614 3.614 0 0 1 2.076-.601c1.074.007 2.145.118 3.197.332.934.124 1.806.27 2.72.332a2.782 2.782 0 0 0 2.324-.872 3.797 3.797 0 0 0 .83-3.963 1.557 1.557 0 0 1 .395-1.66c.254-.24.525-.462.81-.664a1.037 1.037 0 0 0 .394-.934.996.996 0 0 0-.664-.788c0-.146-.332-.27 0-.332.332-.063.726 0 .913-.478a.996.996 0 0 0 0-1.203c-.124-.187-.27-.332-.394-.52a.975.975 0 0 1 .394-1.472l.81-.395c.332-.186.726-.332 1.058-.518a1.183 1.183 0 0 0 .166-1.412Zm-23.145 5.022-6.643-9.815 6.643 4.15 6.643-4.15-6.643 9.815Zm0-6.889-6.643-4.15 6.643-11.62 6.643 11.62-6.643 4.15Z"/></svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/policy.svg b/web/src/assets/svgs/icons/policy.svg deleted file mode 100644 index 14de6afe1..000000000 --- a/web/src/assets/svgs/icons/policy.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M12.5 2H10C10 0.896875 9.10313 0 8 0C6.89687 0 6 0.896875 6 2H3.5C2.67188 2 2 2.67188 2 3.5V14.5C2 15.3281 2.67188 16 3.5 16H12.5C13.3281 16 14 15.3281 14 14.5V3.5C14 2.67188 13.3281 2 12.5 2ZM8 1.25C8.41563 1.25 8.75 1.58438 8.75 2C8.75 2.41563 8.41563 2.75 8 2.75C7.58437 2.75 7.25 2.41563 7.25 2C7.25 1.58438 7.58437 1.25 8 1.25ZM11.7875 8.49375L7.31875 12.925C7.17188 13.0719 6.93437 13.0688 6.7875 12.9219L4.20625 10.3188C4.05938 10.1719 4.0625 9.93438 4.20937 9.7875L5.09687 8.90625C5.24375 8.75937 5.48125 8.7625 5.62812 8.90938L7.06563 10.3594L10.3781 7.07188C10.525 6.925 10.7625 6.92812 10.9094 7.075L11.7906 7.9625C11.9375 8.1125 11.9344 8.34687 11.7875 8.49375Z" /> -</svg> diff --git a/web/src/assets/svgs/icons/ranking.svg b/web/src/assets/svgs/icons/ranking.svg deleted file mode 100644 index fb06f2bc0..000000000 --- a/web/src/assets/svgs/icons/ranking.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M8.845 2.3746L8.255 1.16093C8.1575 0.950184 7.8525 0.942566 7.745 1.16093L7.155 2.3746L5.8475 2.56503C5.615 2.60057 5.515 2.89257 5.6875 3.06776L6.6375 4.00722L6.4125 5.33007C6.3775 5.5662 6.6175 5.74901 6.8325 5.63983L8.005 5.01014L9.17 5.62968C9.385 5.73886 9.6275 5.55604 9.59 5.31991L9.365 3.99706L10.315 3.06776C10.485 2.89511 10.3875 2.60311 10.155 2.56503L8.8475 2.3746H8.845ZM6.4 7.50096C5.9575 7.50096 5.6 7.86405 5.6 8.31346V13.1885C5.6 13.6379 5.9575 14.001 6.4 14.001H9.6C10.0425 14.001 10.4 13.6379 10.4 13.1885V8.31346C10.4 7.86405 10.0425 7.50096 9.6 7.50096H6.4ZM0.8 9.12597C0.3575 9.12597 0 9.48905 0 9.93847V13.1885C0 13.6379 0.3575 14.001 0.8 14.001H4C4.4425 14.001 4.8 13.6379 4.8 13.1885V9.93847C4.8 9.48905 4.4425 9.12597 4 9.12597H0.8ZM11.2 11.5635V13.1885C11.2 13.6379 11.5575 14.001 12 14.001H15.2C15.6425 14.001 16 13.6379 16 13.1885V11.5635C16 11.1141 15.6425 10.751 15.2 10.751H12C11.5575 10.751 11.2 11.1141 11.2 11.5635Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/redistributed-pnk.svg b/web/src/assets/svgs/icons/redistributed-pnk.svg deleted file mode 100644 index d02975112..000000000 --- a/web/src/assets/svgs/icons/redistributed-pnk.svg +++ /dev/null @@ -1,34 +0,0 @@ -<svg width="32" height="32" viewBox="6 6 36 36" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_13762_38788)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M19.6025 14.8125L30.0528 15.2846L34.2837 24.785L28.3147 33.4678L17.8076 32.7878L13.5 22.4941L19.6025 14.8125ZM27.264 20.2888L19.6903 23.6329L26.1653 28.6925L27.264 20.2888ZM26.3871 18.6131L20.3345 15.9793L19.063 21.5169L26.3871 18.6131ZM24.853 29.9655L18.2749 25.2185L18.4341 31.6509L24.853 29.9655ZM33.233 24.764L28.7504 20.1671L27.5673 29.0068L33.233 24.764ZM26.3952 30.9994L20.8475 32.4648L27.3716 32.887L26.3952 30.9994ZM32.357 26.8497L27.5008 30.5057L28.4657 32.4115L32.357 26.8497ZM30.06 16.612L29.1168 18.5688L32.6276 22.1755L30.06 16.612ZM28.8848 15.6755L22.7197 15.4226L27.8052 17.6706L28.8848 15.6755ZM18.7022 16.5805L14.384 22.0911L17.2711 22.7091L18.7022 16.5805ZM17.097 23.7901L14.196 23.1694L17.2229 30.3762L17.097 23.7901Z" /> -</g> -<g clip-path="url(#clip1_13762_38788)"> -<path d="M8.2993 25.6257L8.1011 25.8233C8.01718 25.9069 7.88149 25.9069 7.79846 25.8233L6.06294 24.0943C5.97902 24.0106 5.97902 23.8754 6.06294 23.7926L7.79846 22.0627C7.88238 21.9791 8.01808 21.9791 8.1011 22.0627L8.2993 22.2603C8.38411 22.3448 8.38232 22.4827 8.29573 22.5655L7.21995 23.5871L9.78574 23.5871C9.90447 23.5871 10 23.6823 10 23.8006L10 24.0854C10 24.2037 9.90447 24.2989 9.78574 24.2989L7.21995 24.2989L8.29573 25.3205C8.38322 25.4033 8.385 25.5412 8.2993 25.6257V25.6257Z" /> -</g> -<g clip-path="url(#clip2_13762_38788)"> -<path d="M39.7007 22.3743L39.8989 22.1767C39.9828 22.0931 40.1185 22.0931 40.2015 22.1767L41.9371 23.9057C42.021 23.9894 42.021 24.1246 41.9371 24.2074L40.2015 25.9373C40.1176 26.0209 39.9819 26.0209 39.8989 25.9373L39.7007 25.7397C39.6159 25.6552 39.6177 25.5173 39.7043 25.4345L40.78 24.4129L38.2143 24.4129C38.0955 24.4129 38 24.3177 38 24.1994L38 23.9146C38 23.7963 38.0955 23.7011 38.2143 23.7011L40.78 23.7011L39.7043 22.6795C39.6168 22.5967 39.615 22.4588 39.7007 22.3743V22.3743Z" /> -</g> -<g clip-path="url(#clip3_13762_38788)"> -<path d="M22.3743 8.2993L22.1767 8.1011C22.0931 8.01718 22.0931 7.88149 22.1767 7.79846L23.9057 6.06294C23.9894 5.97902 24.1246 5.97902 24.2074 6.06294L25.9373 7.79846C26.0209 7.88238 26.0209 8.01808 25.9373 8.1011L25.7397 8.2993C25.6552 8.38411 25.5173 8.38232 25.4345 8.29573L24.4129 7.21995L24.4129 9.78574C24.4129 9.90447 24.3177 10 24.1994 10L23.9146 10C23.7963 10 23.7011 9.90447 23.7011 9.78574L23.7011 7.21995L22.6795 8.29573C22.5967 8.38322 22.4588 8.385 22.3743 8.2993V8.2993Z" /> -</g> -<g clip-path="url(#clip4_13762_38788)"> -<path d="M25.6257 39.7007L25.8233 39.8989C25.9069 39.9828 25.9069 40.1185 25.8233 40.2015L24.0943 41.9371C24.0106 42.021 23.8754 42.021 23.7926 41.9371L22.0627 40.2015C21.9791 40.1176 21.9791 39.9819 22.0627 39.8989L22.2603 39.7007C22.3448 39.6159 22.4827 39.6177 22.5655 39.7043L23.5871 40.78L23.5871 38.2143C23.5871 38.0955 23.6823 38 23.8006 38L24.0854 38C24.2037 38 24.2989 38.0955 24.2989 38.2143L24.2989 40.78L25.3205 39.7043C25.4033 39.6168 25.5412 39.615 25.6257 39.7007V39.7007Z" /> -</g> -<defs> -<clipPath id="clip0_13762_38788"> -<rect width="36" height="36" transform="translate(13.5 13.5)"/> -</clipPath> -<clipPath id="clip1_13762_38788"> -<rect width="36" height="36" transform="translate(6 26) rotate(-90)"/> -</clipPath> -<clipPath id="clip2_13762_38788"> -<rect width="36" height="36" transform="translate(42 22) rotate(90)"/> -</clipPath> -<clipPath id="clip3_13762_38788"> -<rect width="36" height="36" transform="translate(22 6)"/> -</clipPath> -<clipPath id="clip4_13762_38788"> -<rect width="36" height="36" transform="translate(26 42) rotate(-180)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/rewards-per-pnk.svg b/web/src/assets/svgs/icons/rewards-per-pnk.svg deleted file mode 100644 index f0808ea2e..000000000 --- a/web/src/assets/svgs/icons/rewards-per-pnk.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M14 29.6236V31.375C14 32.8229 17.5273 34 21.875 34C26.2227 34 29.75 32.8229 29.75 31.375V29.6236C28.0561 30.8172 24.9594 31.375 21.875 31.375C18.7906 31.375 15.6939 30.8172 14 29.6236ZM27.125 18.25C31.4727 18.25 35 17.0729 35 15.625C35 14.1771 31.4727 13 27.125 13C22.7773 13 19.25 14.1771 19.25 15.625C19.25 17.0729 22.7773 18.25 27.125 18.25ZM14 25.3211V27.4375C14 28.8854 17.5273 30.0625 21.875 30.0625C26.2227 30.0625 29.75 28.8854 29.75 27.4375V25.3211C28.0561 26.7156 24.9553 27.4375 21.875 27.4375C18.7947 27.4375 15.6939 26.7156 14 25.3211ZM31.0625 25.7723C33.4127 25.317 35 24.4721 35 23.5V21.7486C34.0484 22.4213 32.6498 22.8807 31.0625 23.1637V25.7723ZM21.875 19.5625C17.5273 19.5625 14 21.0309 14 22.8438C14 24.6566 17.5273 26.125 21.875 26.125C26.2227 26.125 29.75 24.6566 29.75 22.8438C29.75 21.0309 26.2227 19.5625 21.875 19.5625ZM30.8697 21.8717C33.3307 21.4287 35 20.5592 35 19.5625V17.8111C33.5439 18.8406 31.042 19.3943 28.4088 19.5256C29.6187 20.1121 30.5088 20.8996 30.8697 21.8717Z"/> -</svg> diff --git a/web/src/assets/svgs/icons/round.svg b/web/src/assets/svgs/icons/round.svg deleted file mode 100644 index 3e36edfdd..000000000 --- a/web/src/assets/svgs/icons/round.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_16930_50355)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M1.96382 5.27C1.68215 5.935 1.53215 6.64167 1.51549 7.37C1.51382 7.44167 1.45549 7.5 1.38215 7.5H0.382154C0.364361 7.50001 0.346746 7.49645 0.330348 7.48954C0.31395 7.48263 0.299101 7.47251 0.286675 7.45978C0.274249 7.44704 0.264499 7.43195 0.257997 7.41538C0.251496 7.39882 0.248376 7.38112 0.248821 7.36333C0.320488 3.56 3.42715 0.5 7.24549 0.5C9.48549 0.5 11.4788 1.55167 12.7605 3.19167L13.7005 2.45667C13.7872 2.38667 13.9155 2.45 13.9155 2.56167L13.9022 5.57667C13.9022 5.66167 13.8205 5.725 13.7372 5.705L10.8088 4.98833C10.7844 4.98239 10.7622 4.96968 10.7447 4.95167C10.7273 4.93367 10.7152 4.91109 10.71 4.88654C10.7048 4.86199 10.7066 4.83647 10.7152 4.8129C10.7239 4.78934 10.739 4.76869 10.7588 4.75333L11.7622 3.97C11.6188 3.78667 11.4638 3.61167 11.2988 3.44667C10.7773 2.9222 10.1585 2.50441 9.47715 2.21667C8.77215 1.91833 8.02215 1.76667 7.24715 1.76667C6.47215 1.76667 5.72215 1.91833 5.01549 2.21667C4.33215 2.505 3.71882 2.91833 3.19215 3.44667C2.66549 3.975 2.25215 4.58667 1.96382 5.27ZM13.1155 7.5H14.1155C14.1333 7.49999 14.1509 7.50355 14.1673 7.51046C14.1837 7.51737 14.1985 7.52749 14.211 7.54022C14.2234 7.55296 14.2331 7.56805 14.2396 7.58462C14.2461 7.60118 14.2493 7.61888 14.2488 7.63667C14.1772 11.4383 11.0722 14.5 7.25215 14.5C5.01215 14.5 3.01882 13.4483 1.73715 11.81L0.797154 12.545C0.710488 12.615 0.582154 12.5517 0.582154 12.44L0.593821 9.42333C0.593821 9.33833 0.675488 9.275 0.758821 9.295L3.68715 10.0117C3.71154 10.0176 3.73375 10.0303 3.75123 10.0483C3.76872 10.0663 3.78076 10.0889 3.78599 10.1135C3.79121 10.138 3.7894 10.1635 3.78076 10.1871C3.77212 10.2107 3.75701 10.2313 3.73715 10.2467L2.73382 11.03C2.87715 11.2133 3.03215 11.3883 3.19715 11.5533C3.72843 12.0871 4.36013 12.5103 5.05582 12.7987C5.75151 13.087 6.49741 13.2347 7.25049 13.2333C8.00381 13.2348 8.74998 13.0871 9.44594 12.7987C10.1419 12.5104 10.7739 12.0871 11.3055 11.5533C11.8322 11.0267 12.2455 10.4133 12.5338 9.73C12.8155 9.065 12.9655 8.35833 12.9822 7.63C12.9838 7.55833 13.0422 7.5 13.1155 7.5ZM9.56967 6.68723L9.80169 6.91924C9.89779 7.01535 9.89779 7.17117 9.80169 7.26727L8.52558 8.54337C8.42948 8.63948 8.27367 8.63948 8.17756 8.54337L7.94554 8.31136C7.84943 8.21526 7.84943 8.05944 7.94554 7.96333L8.00355 7.90533L7.59751 7.49929L6.76654 8.33027L6.82455 8.38827C6.95269 8.51641 6.95269 8.72417 6.82455 8.85231L5.64796 10.0289C5.51982 10.157 5.31207 10.157 5.18393 10.0289L4.71989 9.56485C4.59174 9.43671 4.59174 9.22896 4.71989 9.10081L5.89646 7.92422C6.0246 7.79608 6.23235 7.79608 6.3605 7.92422L6.4185 7.98223L7.24948 7.15126L6.84344 6.74522L6.78544 6.80323C6.68934 6.89934 6.53352 6.89934 6.43741 6.80323L6.2054 6.57121C6.10929 6.47511 6.10929 6.3193 6.2054 6.22319L7.4815 4.94708C7.5776 4.85097 7.73342 4.85097 7.82953 4.94708L8.06154 5.17911C8.15765 5.27521 8.15765 5.43102 8.06154 5.52713L8.00354 5.58514L9.16364 6.74523L9.22165 6.68723C9.31775 6.59112 9.47356 6.59112 9.56967 6.68723Z" fill="#B45FFF"/> -</g> -<defs> -<clipPath id="clip0_16930_50355"> -<rect width="14" height="14" fill="white" transform="translate(0.248779 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/snapshot-color.svg b/web/src/assets/svgs/icons/snapshot-color.svg deleted file mode 100644 index 683389dd3..000000000 --- a/web/src/assets/svgs/icons/snapshot-color.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 14 17" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M0.137738 9.14627L10.0078 0.599994C10.34 0.312361 10.8238 0.698352 10.6172 1.08615L7.39519 7.13327H12.9962C13.3644 7.13327 13.5337 7.59148 13.254 7.83092L3.24159 16.4016C2.91004 16.6854 2.43019 16.3034 2.63246 15.9166L5.80933 9.84245H0.397261C0.0301627 9.84245 -0.139783 9.38656 0.137738 9.14627Z" fill="#FFAC32"/> -</svg> diff --git a/web/src/assets/svgs/icons/spinner.svg b/web/src/assets/svgs/icons/spinner.svg deleted file mode 100644 index 621e0a0c5..000000000 --- a/web/src/assets/svgs/icons/spinner.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none"> - <path d="M1.26671 6.87C1.28337 6.14167 1.43337 5.435 1.71504 4.77C2.00337 4.08667 2.41671 3.475 2.94337 2.94667C3.47004 2.41833 4.08337 2.005 4.76671 1.71667C5.47337 1.41833 6.22337 1.26667 6.99837 1.26667C7.77337 1.26667 8.52337 1.41833 9.22837 1.71667C9.90975 2.00441 10.5285 2.4222 11.05 2.94667C11.215 3.11167 11.37 3.28667 11.5134 3.47L10.51 4.25333C10.4902 4.26869 10.4751 4.28934 10.4664 4.3129C10.4578 4.33647 10.456 4.36199 10.4612 4.38654C10.4664 4.41109 10.4785 4.43367 10.496 4.45167C10.5134 4.46968 10.5357 4.48239 10.56 4.48833L13.4884 5.205C13.5717 5.225 13.6534 5.16167 13.6534 5.07667L13.6667 2.06167C13.6667 1.95 13.5384 1.88667 13.4517 1.95667L12.5117 2.69167C11.23 1.05167 9.23671 0 6.99671 0C3.17837 0 0.0717083 3.06 4.16767e-05 6.86333C-0.000403165 6.88112 0.00271688 6.89882 0.00921806 6.91538C0.0157192 6.93195 0.02547 6.94704 0.0378957 6.95978C0.0503214 6.97251 0.0651708 6.98263 0.0815687 6.98954C0.0979666 6.99645 0.115581 7.00001 0.133375 7H1.13337C1.20671 7 1.26504 6.94167 1.26671 6.87ZM13.8667 7H12.8667C12.7934 7 12.735 7.05833 12.7334 7.13C12.7167 7.85833 12.5667 8.565 12.285 9.23C11.9967 9.91333 11.5834 10.5267 11.0567 11.0533C10.5251 11.5871 9.89312 12.0104 9.19716 12.2987C8.5012 12.5871 7.75503 12.7348 7.00171 12.7333C6.24863 12.7347 5.50273 12.587 4.80704 12.2987C4.11135 12.0103 3.47965 11.5871 2.94837 11.0533C2.78337 10.8883 2.62837 10.7133 2.48504 10.53L3.48837 9.74667C3.50823 9.73131 3.52334 9.71066 3.53198 9.6871C3.54062 9.66353 3.54243 9.63801 3.53721 9.61346C3.53198 9.58891 3.51994 9.56633 3.50245 9.54833C3.48497 9.53032 3.46276 9.51761 3.43837 9.51167L0.510042 8.795C0.426708 8.775 0.345042 8.83833 0.345042 8.92333L0.333375 11.94C0.333375 12.0517 0.461708 12.115 0.548375 12.045L1.48837 11.31C2.77004 12.9483 4.76337 14 7.00337 14C10.8234 14 13.9284 10.9383 14 7.13667C14.0005 7.11888 13.9974 7.10118 13.9909 7.08462C13.9844 7.06806 13.9746 7.05296 13.9622 7.04022C13.9498 7.02749 13.9349 7.01737 13.9185 7.01046C13.9021 7.00355 13.8845 6.99999 13.8667 7Z" fill="#E5E5E5"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/star.svg b/web/src/assets/svgs/icons/star.svg deleted file mode 100644 index 055e853c0..000000000 --- a/web/src/assets/svgs/icons/star.svg +++ /dev/null @@ -1 +0,0 @@ -<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <path d="M11.2691 4.41115C11.5006 3.89177 11.6164 3.63208 11.7776 3.55211C11.9176 3.48263 12.082 3.48263 12.222 3.55211C12.3832 3.63208 12.499 3.89177 12.7305 4.41115L14.5745 8.54808C14.643 8.70162 14.6772 8.77839 14.7302 8.83718C14.777 8.8892 14.8343 8.93081 14.8982 8.95929C14.9705 8.99149 15.0541 9.00031 15.2213 9.01795L19.7256 9.49336C20.2911 9.55304 20.5738 9.58288 20.6997 9.71147C20.809 9.82316 20.8598 9.97956 20.837 10.1342C20.8108 10.3122 20.5996 10.5025 20.1772 10.8832L16.8125 13.9154C16.6877 14.0279 16.6252 14.0842 16.5857 14.1527C16.5507 14.2134 16.5288 14.2807 16.5215 14.3503C16.5132 14.429 16.5306 14.5112 16.5655 14.6757L17.5053 19.1064C17.6233 19.6627 17.6823 19.9408 17.5989 20.1002C17.5264 20.2388 17.3934 20.3354 17.2393 20.3615C17.0619 20.3915 16.8156 20.2495 16.323 19.9654L12.3995 17.7024C12.2539 17.6184 12.1811 17.5765 12.1037 17.56C12.0352 17.5455 11.9644 17.5455 11.8959 17.56C11.8185 17.5765 11.7457 17.6184 11.6001 17.7024L7.67662 19.9654C7.18404 20.2495 6.93775 20.3915 6.76034 20.3615C6.60623 20.3354 6.47319 20.2388 6.40075 20.1002C6.31736 19.9408 6.37635 19.6627 6.49434 19.1064L7.4341 14.6757C7.46898 14.5112 7.48642 14.429 7.47814 14.3503C7.47081 14.2807 7.44894 14.2134 7.41394 14.1527C7.37439 14.0842 7.31195 14.0279 7.18708 13.9154L3.82246 10.8832C3.40005 10.5025 3.18884 10.3122 3.16258 10.1342C3.13978 9.97956 3.19059 9.82316 3.29993 9.71147C3.42581 9.58288 3.70856 9.55304 4.27406 9.49336L8.77835 9.01795C8.94553 9.00031 9.02911 8.99149 9.10139 8.95929C9.16534 8.93081 9.2226 8.8892 9.26946 8.83718C9.32241 8.77839 9.35663 8.70162 9.42508 8.54808L11.2691 4.41115Z" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </g></svg> \ No newline at end of file diff --git a/web/src/assets/svgs/icons/tokens.svg b/web/src/assets/svgs/icons/tokens.svg deleted file mode 100644 index d3a708dcd..000000000 --- a/web/src/assets/svgs/icons/tokens.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M23.2042 47.7782C23.717 48.0739 24.3487 48.0739 24.8615 47.7782L44.237 36.6058C44.7498 36.3102 45.0657 35.7638 45.0657 35.1724V12.8276C45.0657 12.2363 44.7498 11.6898 44.237 11.3942L24.8615 0.221752C24.3487 -0.0739136 23.717 -0.0739136 23.2042 0.221752L3.82863 11.3942C3.31587 11.6898 3 12.2363 3 12.8276V35.1724C3 35.7638 3.31587 36.3102 3.82863 36.6058L23.2042 47.7782ZM24.0328 46.3448L4.65726 35.1724V12.8276L24.0328 1.65517L43.4084 12.8276V35.1724L24.0328 46.3448Z" fill="#4D00B4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M18.6377 13.7129L31.0577 14.2614L36.0861 25.2996L28.992 35.3878L16.5045 34.5977L11.385 22.6379L18.6377 13.7129ZM26.669 32.5518L20.0905 34.2474L27.8268 34.7359L26.669 32.5518ZM33.7386 27.7501L27.98 31.9804L29.1243 34.1857L33.7386 27.7501ZM17.0398 25.8626L17.2285 33.3056L24.8402 31.3553L17.0398 25.8626ZM12.2029 23.4915L15.7924 31.8306L15.643 24.2098L12.2029 23.4915ZM29.4618 20.0176L28.0589 30.2461L34.7774 25.3367L29.4618 20.0176ZM27.6992 20.1584L18.7181 24.0279L26.3964 29.8823L27.6992 20.1584ZM17.5465 15.8675L12.4259 22.2439L15.8494 22.959L17.5465 15.8675ZM31.0148 15.9039L29.8963 18.1682L34.0595 22.3415L31.0148 15.9039ZM19.4821 15.1719L17.9744 21.5795L26.6594 18.2194L19.4821 15.1719ZM22.3105 14.5277L28.341 17.1289L29.6212 14.8204L22.3105 14.5277Z" fill="#9013FE"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M44.0625 12.6081L37.8125 16.215L37.6875 15.9985L43.9375 12.3916L44.0625 12.6081ZM10.3124 32.1461L4.31244 35.6081L4.1875 35.3916L10.1875 31.9295L10.3124 32.1461Z" fill="#4D00B4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M43.9368 35.6085L37.7099 31.9613L37.8363 31.7456L44.0632 35.3928L43.9368 35.6085ZM10.1619 16.1103L3.9355 12.3574L4.06456 12.1433L10.2909 15.8962L10.1619 16.1103Z" fill="#4D00B4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M24.0231 47L24.0231 39.746L24.2731 39.746L24.2731 47L24.0231 47ZM23.9764 7.96479L23.9764 0.999689L24.2264 0.999689L24.2264 7.96479L23.9764 7.96479Z" fill="#4D00B4"/> -</svg> diff --git a/web/src/assets/svgs/icons/user.svg b/web/src/assets/svgs/icons/user.svg deleted file mode 100644 index f20f6f875..000000000 --- a/web/src/assets/svgs/icons/user.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg height="24" width="24" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"> -<path d="M10.8919 12.3125C14.119 12.3125 16.7373 9.66699 16.7373 6.40625C16.7373 3.14551 14.119 0.5 10.8919 0.5C7.6647 0.5 5.04644 3.14551 5.04644 6.40625C5.04644 9.66699 7.6647 12.3125 10.8919 12.3125ZM16.0878 13.625H13.8511C12.9499 14.0434 11.9473 14.2812 10.8919 14.2812C9.83643 14.2812 8.83784 14.0434 7.93261 13.625H5.69593C2.82599 13.625 0.5 15.9752 0.5 18.875V19.5312C0.5 20.6182 1.37275 21.5 2.44847 21.5H19.3352C20.411 21.5 21.2837 20.6182 21.2837 19.5312V18.875C21.2837 15.9752 18.9577 13.625 16.0878 13.625Z" /> -</svg> diff --git a/web/src/assets/svgs/icons/vea.svg b/web/src/assets/svgs/icons/vea.svg deleted file mode 100644 index 1fa6470d0..000000000 --- a/web/src/assets/svgs/icons/vea.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M1.29724 16.6048H15.3832L8.34022 31.9371L1.29724 16.6048ZM8.34022 30.0395L14.1593 17.4026H2.54265L8.34022 30.0395Z" fill="#9013FE"/> -<path d="M19.0815 16.6263H29.603V17.4242H19.876V23.5054H28.3362V24.3033H19.876V30.8374H29.603V31.6352H19.0815V16.6263Z" fill="#9013FE"/> -<path d="M47.1726 31.6352H33.0866L40.1296 16.3029L47.1726 31.6352ZM34.332 30.8374H45.9272L40.1296 18.2005L34.332 30.8374Z" fill="#9013FE"/> -</svg> diff --git a/web/src/assets/svgs/icons/vote-stake.svg b/web/src/assets/svgs/icons/vote-stake.svg deleted file mode 100644 index 2ee706e41..000000000 --- a/web/src/assets/svgs/icons/vote-stake.svg +++ /dev/null @@ -1,14 +0,0 @@ -<svg width="32" height="32" viewBox="10 9 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_14856_32598)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M19.6025 9.3125L30.0528 9.78456L34.2837 19.285L28.3147 27.9678L17.8076 27.2878L13.5 16.9941L19.6025 9.3125ZM27.264 14.7888L19.6903 18.1329L26.1653 23.1925L27.264 14.7888ZM26.3871 13.1131L20.3345 10.4793L19.063 16.0169L26.3871 13.1131ZM24.853 24.4655L18.2749 19.7185L18.4341 26.1509L24.853 24.4655ZM33.233 19.264L28.7504 14.6671L27.5673 23.5068L33.233 19.264ZM26.3952 25.4994L20.8475 26.9648L27.3716 27.387L26.3952 25.4994ZM32.357 21.3497L27.5008 25.0057L28.4657 26.9115L32.357 21.3497ZM30.06 11.112L29.1168 13.0688L32.6276 16.6755L30.06 11.112ZM28.8848 10.1755L22.7197 9.92262L27.8052 12.1706L28.8848 10.1755ZM18.7022 11.0805L14.384 16.5911L17.2711 17.2091L18.7022 11.0805ZM17.097 18.2901L14.196 17.6694L17.2229 24.8762L17.097 18.2901Z"/> -</g> -<path fill-rule="evenodd" clip-rule="evenodd" d="M18.0904 31.0917H19.0791L17.0379 36.9203H16.0332L14 31.0917H14.9807L16.1967 34.7156C16.2605 34.8884 16.3282 35.1116 16.4 35.3854C16.4718 35.6565 16.5183 35.8585 16.5395 35.9914C16.5741 35.7894 16.6272 35.5555 16.699 35.2897C16.7708 35.0239 16.8292 34.8272 16.8744 34.6997L18.0904 31.0917Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M25.0233 33.998C25.0233 34.9468 24.7854 35.6844 24.3096 36.2106C23.8365 36.7369 23.1654 37 22.2963 37C21.4166 37 20.7402 36.7395 20.2671 36.2186C19.7967 35.695 19.5615 34.9522 19.5615 33.99C19.5615 33.0279 19.798 32.289 20.2711 31.7734C20.7468 31.2578 21.4246 31 22.3043 31C23.1708 31 23.8405 31.2618 24.3136 31.7854C24.7867 32.309 25.0233 33.0465 25.0233 33.998ZM20.5741 33.998C20.5741 34.7156 20.7189 35.2605 21.0086 35.6326C21.2983 36.002 21.7276 36.1867 22.2963 36.1867C22.8625 36.1867 23.289 36.0033 23.5761 35.6365C23.8658 35.2698 24.0106 34.7236 24.0106 33.998C24.0106 33.2831 23.8671 32.7409 23.5801 32.3714C23.2957 32.002 22.8704 31.8173 22.3043 31.8173C21.7329 31.8173 21.301 32.002 21.0086 32.3714C20.7189 32.7409 20.5741 33.2831 20.5741 33.998Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M28.2884 36.9203H27.3355V31.909H25.6213V31.0917H30.0027V31.909H28.2884V36.9203Z"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M34.1967 36.9203H30.8997V31.0917H34.1967V31.897H31.8525V33.4837H34.0492V34.2811H31.8525V36.111H34.1967V36.9203Z"/> -<defs> -<clipPath id="clip0_14856_32598"> -<rect width="20.7837" height="21" fill="white" transform="translate(13.5 8)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/icons/voted.svg b/web/src/assets/svgs/icons/voted.svg deleted file mode 100644 index d43f24ad6..000000000 --- a/web/src/assets/svgs/icons/voted.svg +++ /dev/null @@ -1,13 +0,0 @@ -<svg viewBox="0 0 350 350" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fillRule="evenodd" clipRule="evenodd" d="M326.109 87.5L174.554 0L23 87.5V262.5L174.554 350L326.109 262.5V87.5ZM307.641 97.973L174.435 21.0664L41.2285 97.973V251.786L174.435 328.693L307.641 251.786V97.973Z" fill="#F0F9FF"/> -<path d="M174.435 21.0664L307.641 97.973V251.786L174.435 328.693L41.2285 251.786V97.973L174.435 21.0664Z" fill="#7E1BD4"/> -<path d="M290.662 261.589L174.435 328.693L58.4463 261.727V214.021H290.662V261.589Z" fill="#973AE8"/> -<path d="M89.2074 82.832H260.379C262.296 82.832 263.849 84.3856 263.849 86.3021V86.3045C263.849 88.221 262.296 89.7746 260.379 89.7746H89.2074C87.2909 89.7746 85.7373 88.221 85.7373 86.3045V86.3021C85.7373 84.3856 87.2909 82.832 89.2074 82.832Z" fill="#4D00B4"/> -<path d="M89.2074 105.335H260.379C262.296 105.335 263.849 106.889 263.849 108.806V108.808C263.849 110.724 262.296 112.278 260.379 112.278H89.2074C87.2909 112.278 85.7373 110.724 85.7373 108.808V108.806C85.7373 106.889 87.2909 105.335 89.2074 105.335Z" fill="#4D00B4"/> -<path d="M260.379 127.839H89.2074C87.2909 127.839 85.7373 129.392 85.7373 131.309V131.311C85.7373 133.228 87.2909 134.781 89.2074 134.781H260.379C262.296 134.781 263.849 133.228 263.849 131.311V131.309C263.849 129.392 262.296 127.839 260.379 127.839Z" fill="#4D00B4"/> -<path d="M89.2074 150.342H260.379C262.296 150.342 263.849 151.896 263.849 153.812V153.815C263.849 155.731 262.296 157.285 260.379 157.285H89.2074C87.2909 157.285 85.7373 155.731 85.7373 153.815V153.812C85.7373 151.896 87.2909 150.342 89.2074 150.342Z" fill="#4D00B4"/> -<path d="M260.379 172.846H89.2074C87.2909 172.846 85.7373 174.399 85.7373 176.316V176.318C85.7373 178.235 87.2909 179.788 89.2074 179.788H260.379C262.296 179.788 263.849 178.235 263.849 176.318V176.316C263.849 174.399 262.296 172.846 260.379 172.846Z" fill="#4D00B4"/> -<path d="M89.2074 195.349H260.379C262.296 195.349 263.849 196.903 263.849 198.819V198.822C263.849 200.738 262.296 202.292 260.379 202.292H89.2074C87.2909 202.292 85.7373 200.738 85.7373 198.822V198.819C85.7373 196.903 87.2909 195.349 89.2074 195.349Z" fill="#4D00B4"/> -<path d="M131.092 236.614L137.08 251.618L143.152 236.614H146.727L137.01 259.891L127.517 236.614H131.092ZM147.386 247.341C147.386 244.293 148.504 241.676 150.738 239.488C152.963 237.301 155.636 236.207 158.759 236.207C161.844 236.207 164.489 237.31 166.695 239.516C168.911 241.723 170.019 244.373 170.019 247.467C170.019 250.58 168.906 253.221 166.681 255.39C164.447 257.568 161.75 258.657 158.59 258.657C155.795 258.657 153.285 257.689 151.06 255.754C148.611 253.614 147.386 250.809 147.386 247.341ZM150.682 247.383C150.682 249.776 151.486 251.744 153.094 253.286C154.692 254.829 156.538 255.6 158.632 255.6C160.904 255.6 162.82 254.815 164.382 253.244C165.943 251.655 166.723 249.72 166.723 247.439C166.723 245.13 165.952 243.195 164.41 241.634C162.876 240.063 160.979 239.278 158.717 239.278C156.464 239.278 154.561 240.063 153.009 241.634C151.458 243.186 150.682 245.102 150.682 247.383ZM179.33 239.685V258.264H176.062V239.685H171.084V236.614H184.293V239.685H179.33ZM199.157 239.685H190.477V244.887H198.905V247.958H190.477V255.193H199.157V258.264H187.21V236.614H199.157V239.685ZM203.448 258.264V236.614H207.991C210.17 236.614 211.89 236.829 213.152 237.259C214.507 237.679 215.736 238.395 216.84 239.404C219.074 241.442 220.191 244.12 220.191 247.439C220.191 250.767 219.027 253.459 216.699 255.516C215.531 256.544 214.306 257.259 213.025 257.661C211.829 258.063 210.132 258.264 207.935 258.264H203.448ZM206.715 255.193H208.188C209.655 255.193 210.875 255.039 211.848 254.731C212.82 254.403 213.698 253.885 214.484 253.174C216.092 251.706 216.896 249.795 216.896 247.439C216.896 245.065 216.101 243.139 214.512 241.662C213.081 240.344 210.973 239.685 208.188 239.685H206.715V255.193Z" fill="white"/> -<path fillRule="evenodd" clipRule="evenodd" d="M184.273 95.4367C184.273 99.8744 183.272 102.427 181.652 103.872L226.436 117.236C227.662 116.178 229.259 115.534 231.009 115.534C234.875 115.534 238.009 118.656 238.009 122.507C238.009 125.306 236.349 127.713 233.96 128.823L249.633 173.911C254.603 174.701 257.888 175.867 257.888 177.409C257.888 183.735 245.501 188.863 230.221 188.863C214.941 188.863 202.555 183.735 202.555 177.409C202.555 175.77 206.265 174.556 211.764 173.767L227.49 128.526C226.046 127.687 224.933 126.35 224.387 124.749C223.859 122.555 222.63 121.169 220.7 120.594C218.394 119.905 216.134 119.827 213.612 119.74C210.424 119.631 206.816 119.506 202.162 118.118L179.409 111.328V157.704C181.181 158.969 182.339 161.032 182.339 163.37C182.339 164.92 181.825 166.348 180.966 167.505C183.277 169.22 184.781 171.954 184.781 175.045C184.781 178.786 182.583 182.007 179.409 183.522V193.204C189.742 193.744 197.613 196.529 197.613 199.884C197.613 199.941 197.611 199.998 197.607 200.054C214.285 201.492 225.8 204.553 225.8 208.099L225.882 213.045C225.882 217.97 203.694 221.922 176.275 221.922C148.856 221.922 126.669 217.889 126.669 212.963L126.506 208.099C126.506 204.61 137.657 201.59 153.904 200.124C153.895 200.045 153.89 199.965 153.89 199.884C153.89 196.583 161.509 193.834 171.595 193.232V183.678C168.245 182.234 165.899 178.914 165.899 175.046C165.899 171.955 167.402 169.22 169.713 167.506C168.854 166.348 168.34 164.921 168.34 163.37C168.34 160.893 169.641 158.722 171.595 157.486V108.997L145.646 101.253C143.92 100.738 141.392 99.3696 138.691 97.9074C135.593 96.2301 132.267 94.4294 129.66 93.6517C127.854 93.1128 126.001 93.5034 124.099 94.8235C123.733 95.1217 123.335 95.381 122.913 95.6014L138.552 140.594C143.752 141.385 147.221 142.572 147.221 144.156C147.221 150.482 134.834 155.61 119.554 155.61C104.274 155.61 91.8877 150.482 91.8877 144.156C91.8877 142.619 95.1518 141.456 100.095 140.666L115.872 95.2764C113.947 94.034 112.671 91.8798 112.671 89.4251C112.671 85.5741 115.805 82.4524 119.67 82.4524C122.819 82.4524 125.481 84.5243 126.361 87.3741L166.579 99.3752C166.359 98.2638 166.24 96.9615 166.24 95.4367C166.24 89.4959 169.246 82.4754 175.257 74.375C181.268 82.4754 184.273 89.4959 184.273 95.4367ZM232.576 129.297L248.001 173.673C238.268 172.369 223.439 172.329 213.39 173.552L228.831 129.129C229.517 129.353 230.249 129.478 231.01 129.478C231.549 129.478 232.072 129.412 232.576 129.297ZM101.728 140.426L117.191 95.9395C117.963 96.2309 118.796 96.3978 119.67 96.3978C120.321 96.3978 120.949 96.3024 121.546 96.137L136.921 140.366C126.853 139.073 111.635 139.093 101.728 140.426Z" fill="white"/> -</svg> diff --git a/web/src/assets/svgs/icons/votes-per-pnk.svg b/web/src/assets/svgs/icons/votes-per-pnk.svg deleted file mode 100644 index 7c859a439..000000000 --- a/web/src/assets/svgs/icons/votes-per-pnk.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 49 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M19.1196 11L29.5699 11.4721L33.8008 20.9725L27.8318 29.6553L17.3247 28.9753L13.0171 18.6816L19.1196 11ZM26.781 16.4763L19.2073 19.8204L25.6824 24.88L26.781 16.4763ZM25.9042 14.8006L19.8516 12.1668L18.5801 17.7044L25.9042 14.8006ZM24.3701 26.153L17.792 21.406L17.9511 27.8384L24.3701 26.153ZM32.7501 20.9515L28.2675 16.3546L27.0844 25.1943L32.7501 20.9515ZM25.9123 27.1869L20.3646 28.6523L26.8887 29.0745L25.9123 27.1869ZM31.8741 23.0372L27.0179 26.6932L27.9828 28.599L31.8741 23.0372ZM29.5771 12.7995L28.6339 14.7563L32.1447 18.363L29.5771 12.7995ZM28.4019 11.863L22.2368 11.6101L27.3223 13.8581L28.4019 11.863ZM18.2193 12.768L13.9011 18.2786L16.7882 18.8966L18.2193 12.768ZM16.6141 19.9776L13.7131 19.3569L16.74 26.5637L16.6141 19.9776ZM11.0171 30.1C11.0171 28.9406 11.9647 28 13.1326 28H13.8378V33.5999H33.5826V28H34.2878C35.4557 28 36.4033 28.9406 36.4033 30.1V34.2999C36.4033 35.4592 35.4557 36.3999 34.2878 36.3999H13.1326C11.9647 36.3999 11.0171 35.4592 11.0171 34.2999V30.1Z" fill="#B45FFF"/> -</svg> diff --git a/web/src/assets/svgs/icons/warning-outline.svg b/web/src/assets/svgs/icons/warning-outline.svg deleted file mode 100644 index fc09d8ca3..000000000 --- a/web/src/assets/svgs/icons/warning-outline.svg +++ /dev/null @@ -1,15 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" fill="none"> - <g clip-path="url(#clip0_21895_68964)"> - <path - fill-rule="evenodd" - clip-rule="evenodd" - d="M0 32C0 14.3286 14.3286 0 32 0C49.6714 0 64 14.3286 64 32C64 49.6714 49.6714 64 32 64C14.3286 64 0 49.6714 0 32ZM5.42857 32C5.42857 46.6714 17.3286 58.5714 32 58.5714C46.6714 58.5714 58.5714 46.6714 58.5714 32C58.5714 17.3286 46.6714 5.42857 32 5.42857C17.3286 5.42857 5.42857 17.3286 5.42857 32ZM29.5745 46.9958C28.9315 46.3528 28.5703 45.4807 28.5703 44.5714C28.5703 43.6621 28.9315 42.79 29.5745 42.1471C30.2175 41.5041 31.0896 41.1429 31.9989 41.1429C32.9082 41.1429 33.7803 41.5041 34.4232 42.1471C35.0662 42.79 35.4275 43.6621 35.4275 44.5714C35.4275 45.4807 35.0662 46.3528 34.4232 46.9958C33.7803 47.6388 32.9082 48 31.9989 48C31.0896 48 30.2175 47.6388 29.5745 46.9958ZM33.7132 36.5714H30.2846C29.9703 36.5714 29.7132 36.3143 29.7132 36V16.5714C29.7132 16.2571 29.9703 16 30.2846 16H33.7132C34.0275 16 34.2846 16.2571 34.2846 16.5714V36C34.2846 36.3143 34.0275 36.5714 33.7132 36.5714Z" - fill="#FFC46B" - /> - </g> - <defs> - <clipPath id="clip0_21895_68964"> - <rect width="64" height="64" fill="white" /> - </clipPath> - </defs> -</svg> diff --git a/web/src/assets/svgs/label-icons/appeal.svg b/web/src/assets/svgs/label-icons/appeal.svg deleted file mode 100644 index f7157ec13..000000000 --- a/web/src/assets/svgs/label-icons/appeal.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none"> - <g clip-path="url(#clip0_18852_64721)"> - <path fill-rule="evenodd" clip-rule="evenodd" d="M1.09609 7.38938C0.942854 7.19321 0.868788 6.92478 0.873896 6.58407H0.000425668C-0.00468235 6.87316 0.0361818 7.12869 0.123018 7.35066C0.214962 7.57264 0.342663 7.76106 0.506119 7.91593C0.669575 8.06563 0.866234 8.18178 1.09609 8.26438C1.32596 8.34698 1.5788 8.39086 1.85463 8.39602V9H2.1841V8.39602C2.4395 8.38569 2.67702 8.34181 2.89667 8.26438C3.11631 8.19211 3.30786 8.08628 3.47132 7.9469C3.63478 7.80236 3.76248 7.62426 3.85442 7.41261C3.95147 7.1958 4 6.94285 4 6.65376C4 6.375 3.94892 6.14012 3.84676 5.94911C3.7446 5.75811 3.60924 5.59808 3.44067 5.46903C3.27211 5.33997 3.078 5.23414 2.85836 5.15155C2.63871 5.06895 2.41396 4.99668 2.1841 4.93473V3.30088C2.45993 3.30088 2.65915 3.37058 2.78174 3.50996C2.90944 3.64934 2.9784 3.85066 2.98861 4.11394H3.86208C3.86208 3.86099 3.81611 3.63901 3.72417 3.44801C3.63733 3.25701 3.51729 3.09956 3.36405 2.97566C3.21592 2.85177 3.03969 2.75885 2.83537 2.6969C2.63105 2.63496 2.41396 2.60398 2.1841 2.60398V2H1.85463V2.60398C1.62477 2.60398 1.40513 2.63754 1.1957 2.70465C0.986272 2.77175 0.79983 2.86984 0.636373 2.99889C0.478025 3.12279 0.350325 3.28024 0.253272 3.47124C0.161328 3.65708 0.115356 3.87389 0.115356 4.12168C0.115356 4.4056 0.166436 4.64307 0.268596 4.83407C0.370757 5.02507 0.503565 5.1851 0.667021 5.31416C0.835586 5.43805 1.02203 5.5413 1.22635 5.62389C1.43578 5.70133 1.64521 5.76844 1.85463 5.82522V7.69911C1.50218 7.68879 1.24933 7.58555 1.09609 7.38938ZM1.21102 3.47898C1.36427 3.36025 1.5788 3.30088 1.85463 3.30088V4.84956C1.74737 4.82375 1.6401 4.79277 1.53283 4.75664C1.43067 4.71534 1.33873 4.66372 1.257 4.60177C1.18038 4.53982 1.11653 4.46497 1.06545 4.37721C1.01437 4.28945 0.988826 4.18363 0.988826 4.05973C0.988826 3.78614 1.06289 3.59255 1.21102 3.47898ZM2.85836 7.45907C2.68469 7.59845 2.45993 7.67847 2.1841 7.69911V5.89491C2.30159 5.92588 2.41652 5.96202 2.52889 6.00332C2.64127 6.04462 2.74087 6.09882 2.82771 6.16593C2.91965 6.23304 2.99117 6.31563 3.04225 6.41372C3.09844 6.5118 3.12653 6.63311 3.12653 6.77765C3.12653 7.08739 3.03714 7.31453 2.85836 7.45907Z" fill="#DDB6FF"/> - <path fill-rule="evenodd" clip-rule="evenodd" d="M13.5 6.88875C13.7977 7.06187 14 7.38078 14 7.75C14 8.11922 13.7977 8.43813 13.4998 8.61141V11C13.4998 11.1441 13.3892 11.5 12.9998 11.5C12.8864 11.4999 12.7763 11.4612 12.6877 11.3903L11.3591 10.3273C10.6919 9.79391 9.85406 9.5 9 9.5H8.56125C8.51766 9.65953 8.49234 9.82641 8.49234 10C8.49234 10.4544 8.64469 10.8737 8.90094 11.21C9.14766 11.5337 8.90328 12 8.49625 12H7.33562C7.15 12 6.97297 11.9005 6.89188 11.7334C6.63719 11.2086 6.4925 10.6214 6.4925 10C6.4925 9.83031 6.50484 9.66375 6.52656 9.5H6C5.44766 9.5 5 9.05234 5 8.5V7C5 6.44766 5.44766 6 6 6H9C9.85406 6 10.6919 5.70609 11.3592 5.17266L12.6878 4.10969C12.7783 4.03719 12.8888 4 13 4C13.3909 4 13.5 4.36344 13.5 4.50016V6.88875ZM11.9836 9.54656L12.5 9.95969V5.54031L11.9836 5.95344C11.1398 6.62844 10.08 7 9 7V8.5C10.08 8.5 11.1398 8.87156 11.9836 9.54656Z" fill="#DDB6FF"/> - </g> - <defs> - <clipPath id="clip0_18852_64721"> - <rect width="14" height="14" fill="white"/> - </clipPath> - </defs> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/label-icons/evidence.svg b/web/src/assets/svgs/label-icons/evidence.svg deleted file mode 100644 index 79148204e..000000000 --- a/web/src/assets/svgs/label-icons/evidence.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14" fill="none"> - <path fill-rule="evenodd" clip-rule="evenodd" d="M2.79522 1.75H3.32938C3.37686 1.75 3.4006 1.77269 3.4006 1.81806V4.4892H6.05378C6.10126 4.4892 6.125 4.51189 6.125 4.55726V5.06768C6.125 5.11305 6.10126 5.13573 6.05378 5.13573H3.4006V7.80695C3.4006 7.85232 3.37686 7.875 3.32938 7.875H2.79522C2.74774 7.875 2.724 7.85232 2.724 7.80695V5.13573H0.0712209C0.0237403 5.13573 0 5.11305 0 5.06768V4.55726C0 4.51189 0.0237403 4.4892 0.0712209 4.4892H2.724V1.81806C2.724 1.77269 2.74774 1.75 2.79522 1.75ZM12.25 7.3418V6.86328C12.25 6.75049 12.1516 6.6582 12.0312 6.6582H8.96875C8.84844 6.6582 8.75 6.75049 8.75 6.86328V7.3418C8.75 7.45459 8.84844 7.54688 8.96875 7.54688H12.0312C12.1516 7.54688 12.25 7.45459 12.25 7.3418ZM8.96875 8.09375H12.0312C12.1516 8.09375 12.25 8.18604 12.25 8.29883V8.77734C12.25 8.89014 12.1516 8.98242 12.0312 8.98242H8.96875C8.84844 8.98242 8.75 8.89014 8.75 8.77734V8.29883C8.75 8.18604 8.84844 8.09375 8.96875 8.09375ZM14 10.5547V4.87915C14 4.66211 13.907 4.4519 13.743 4.2998L12.2135 2.86597C12.0495 2.71216 11.8271 2.625 11.5956 2.625H7.875C7.39193 2.625 7 2.99243 7 3.44531V10.5547C7 11.0076 7.39193 11.375 7.875 11.375H13.125C13.6081 11.375 14 11.0076 14 10.5547ZM11.6667 4.8125V3.51196L13.0539 4.8125H11.6667ZM13.125 5.63281V10.5547H7.875V3.44531H10.7917V5.22266C10.7917 5.44995 10.9867 5.63281 11.2292 5.63281H13.125Z" fill="#6CC5FF"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/label-icons/forgot-vote.svg b/web/src/assets/svgs/label-icons/forgot-vote.svg deleted file mode 100644 index 61df7f53d..000000000 --- a/web/src/assets/svgs/label-icons/forgot-vote.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none"> - <path d="M9.60918 2.73048L7.43279 5.25L9.60918 7.76952C9.64566 7.81139 9.61498 7.875 9.55861 7.875H8.89698C8.85719 7.875 8.81988 7.85809 8.795 7.8291L7 5.75084L5.205 7.8291C5.17929 7.85809 5.14198 7.875 5.10302 7.875H4.44139C4.42878 7.87507 4.41641 7.87162 4.40575 7.86506C4.3951 7.8585 4.3866 7.84911 4.38128 7.83801C4.37595 7.8269 4.37402 7.81454 4.37571 7.8024C4.37741 7.79026 4.38265 7.77885 4.39082 7.76952L6.56721 5.25L4.39082 2.73048C4.35434 2.68861 4.38502 2.625 4.44139 2.625H5.10302C5.14281 2.625 5.18012 2.64191 5.205 2.6709L7 4.74916L8.795 2.6709C8.82071 2.64191 8.85802 2.625 8.89698 2.625H9.55861C9.61498 2.625 9.64566 2.68861 9.60918 2.73048Z" fill="#B45FFF"/> - <path fill-rule="evenodd" clip-rule="evenodd" d="M11.6667 2.80512L11.6 2.36352C11.4706 1.50772 10.7351 0.875 9.8696 0.875H4.13044C3.26492 0.875 2.52941 1.50772 2.40008 2.36352L2.33335 2.80512V10.1397H11.6667V2.80512ZM2.77085 2.83799V9.70218H11.2292V2.83799L11.1674 2.42889C11.0704 1.78704 10.5187 1.3125 9.8696 1.3125H4.13044C3.4813 1.3125 2.92966 1.78704 2.83267 2.42889L2.77085 2.83799Z" fill="#B45FFF"/> - <path d="M1.16667 7.82373C0.522569 7.82373 0 8.34246 0 8.98182V11.298C0 11.9374 0.522569 12.4561 1.16667 12.4561H12.8333C13.4774 12.4561 14 11.9374 14 11.298V8.98182C14 8.34246 13.4774 7.82373 12.8333 7.82373H12.4444V10.912H1.55556V7.82373H1.16667Z" fill="#B45FFF"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/label-icons/funded.svg b/web/src/assets/svgs/label-icons/funded.svg deleted file mode 100644 index 7e02541da..000000000 --- a/web/src/assets/svgs/label-icons/funded.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none"> - <path d="M3.32938 1.75H2.79522C2.74774 1.75 2.724 1.77269 2.724 1.81806V4.4892H0.0712209C0.0237403 4.4892 0 4.51189 0 4.55726V5.06768C0 5.11305 0.0237403 5.13573 0.0712209 5.13573H2.724V7.80694C2.724 7.85231 2.74774 7.875 2.79522 7.875H3.32938C3.37686 7.875 3.4006 7.85231 3.4006 7.80694V5.13573H6.05378C6.10126 5.13573 6.125 5.11305 6.125 5.06768V4.55726C6.125 4.51189 6.10126 4.4892 6.05378 4.4892H3.4006V1.81806C3.4006 1.77269 3.37686 1.75 3.32938 1.75Z" fill="#DDB6FF"/> - <path fill-rule="evenodd" clip-rule="evenodd" d="M13.5 6.88875C13.7977 7.06187 14 7.38078 14 7.75C14 8.11922 13.7977 8.43813 13.4998 8.61141V11C13.4998 11.1441 13.3892 11.5 12.9998 11.5C12.8864 11.4999 12.7763 11.4612 12.6877 11.3903L11.3591 10.3273C10.6919 9.79391 9.85406 9.5 9 9.5H8.56125C8.51766 9.65953 8.49234 9.82641 8.49234 10C8.49234 10.4544 8.64469 10.8737 8.90094 11.21C9.14766 11.5337 8.90328 12 8.49625 12H7.33562C7.15 12 6.97297 11.9005 6.89188 11.7334C6.63719 11.2086 6.4925 10.6214 6.4925 10C6.4925 9.83031 6.50484 9.66375 6.52656 9.5H6C5.44766 9.5 5 9.05234 5 8.5V7C5 6.44766 5.44766 6 6 6H9C9.85406 6 10.6919 5.70609 11.3592 5.17266L12.6878 4.10969C12.7783 4.03719 12.8888 4 13 4C13.3909 4 13.5 4.36344 13.5 4.50016V6.88875ZM11.9836 9.54656L12.5 9.95969V5.54031L11.9836 5.95344C11.1398 6.62844 10.08 7 9 7V8.5C10.08 8.5 11.1398 8.87156 11.9836 9.54656Z" fill="#DDB6FF"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/label-icons/minus-circle.svg b/web/src/assets/svgs/label-icons/minus-circle.svg deleted file mode 100644 index 2d0319676..000000000 --- a/web/src/assets/svgs/label-icons/minus-circle.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none"> - <g clip-path="url(#clip0_18847_75711)"> - <path fill-rule="evenodd" clip-rule="evenodd" d="M0 7C0 3.13438 3.13438 0 7 0C10.8656 0 14 3.13438 14 7C14 10.8656 10.8656 14 7 14C3.13438 14 0 10.8656 0 7ZM1.1875 7C1.1875 10.2094 3.79063 12.8125 7 12.8125C10.2094 12.8125 12.8125 10.2094 12.8125 7C12.8125 3.79063 10.2094 1.1875 7 1.1875C3.79063 1.1875 1.1875 3.79063 1.1875 7ZM4 6.625C4 6.55625 4.05625 6.5 4.125 6.5H9.875C9.94375 6.5 10 6.55625 10 6.625V7.375C10 7.44375 9.94375 7.5 9.875 7.5H4.125C4.05625 7.5 4 7.44375 4 7.375V6.625Z" fill="#BECCE5"/> - </g> - <defs> - <clipPath id="clip0_18847_75711"> - <rect width="14" height="14" fill="white"/> - </clipPath> - </defs> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/label-icons/rewards-lost.svg b/web/src/assets/svgs/label-icons/rewards-lost.svg deleted file mode 100644 index 6367e7b16..000000000 --- a/web/src/assets/svgs/label-icons/rewards-lost.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none"> - <path fill-rule="evenodd" clip-rule="evenodd" d="M5.25 10.2812V9.55151C5.95581 10.0488 7.24609 10.2812 8.53125 10.2812C9.81641 10.2812 11.1067 10.0488 11.8125 9.55151V10.2812C11.8125 10.8845 10.3428 11.375 8.53125 11.375C6.71973 11.375 5.25 10.8845 5.25 10.2812ZM14 3.71875C14 4.32202 12.5303 4.8125 10.7188 4.8125C8.90723 4.8125 7.4375 4.32202 7.4375 3.71875C7.4375 3.11548 8.90723 2.625 10.7188 2.625C12.5303 2.625 14 3.11548 14 3.71875ZM5.25 8.64062V7.75879C5.95581 8.33984 7.2478 8.64062 8.53125 8.64062C9.8147 8.64062 11.1067 8.33984 11.8125 7.75879V8.64062C11.8125 9.2439 10.3428 9.73438 8.53125 9.73438C6.71973 9.73438 5.25 9.2439 5.25 8.64062ZM14 7C14 7.40503 13.3386 7.75708 12.3594 7.94678V6.85986C13.0208 6.74194 13.6035 6.55054 14 6.27026V7ZM5.25 6.72656C5.25 5.97119 6.71973 5.35938 8.53125 5.35938C10.3428 5.35938 11.8125 5.97119 11.8125 6.72656C11.8125 7.48193 10.3428 8.09375 8.53125 8.09375C6.71973 8.09375 5.25 7.48193 5.25 6.72656ZM14 5.35938C14 5.77466 13.3044 6.13696 12.2791 6.32153C12.1287 5.9165 11.7578 5.58838 11.2537 5.34399C12.3508 5.28931 13.3933 5.05859 14 4.62964V5.35938ZM0.0665761 3.5H6.05842C6.09504 3.5 6.125 3.54145 6.125 3.59211V4.28289C6.125 4.33355 6.09504 4.375 6.05842 4.375H0.0665761C0.0299592 4.375 0 4.33355 0 4.28289V3.59211C0 3.54145 0.0299592 3.5 0.0665761 3.5Z" fill="#FF5A78"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/label-icons/rewards-won.svg b/web/src/assets/svgs/label-icons/rewards-won.svg deleted file mode 100644 index 54195deb4..000000000 --- a/web/src/assets/svgs/label-icons/rewards-won.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none"> - <path fill-rule="evenodd" clip-rule="evenodd" d="M2.79522 1.75H3.32938C3.37686 1.75 3.4006 1.77269 3.4006 1.81806V4.4892H6.05378C6.10126 4.4892 6.125 4.51189 6.125 4.55726V5.06768C6.125 5.11305 6.10126 5.13573 6.05378 5.13573H3.4006V7.80694C3.4006 7.85231 3.37686 7.875 3.32938 7.875H2.79522C2.74774 7.875 2.724 7.85231 2.724 7.80694V5.13573H0.0712209C0.0237403 5.13573 0 5.11305 0 5.06768V4.55726C0 4.51189 0.0237403 4.4892 0.0712209 4.4892H2.724V1.81806C2.724 1.77269 2.74774 1.75 2.79522 1.75ZM5.25 11.1562V10.4265C5.95581 10.9238 7.24609 11.1562 8.53125 11.1562C9.81641 11.1562 11.1067 10.9238 11.8125 10.4265V11.1562C11.8125 11.7595 10.3428 12.25 8.53125 12.25C6.71973 12.25 5.25 11.7595 5.25 11.1562ZM14 4.59375C14 5.19702 12.5303 5.6875 10.7188 5.6875C8.90723 5.6875 7.4375 5.19702 7.4375 4.59375C7.4375 3.99048 8.90723 3.5 10.7188 3.5C12.5303 3.5 14 3.99048 14 4.59375ZM5.25 9.51562V8.63379C5.95581 9.21484 7.2478 9.51562 8.53125 9.51562C9.8147 9.51562 11.1067 9.21484 11.8125 8.63379V9.51562C11.8125 10.1189 10.3428 10.6094 8.53125 10.6094C6.71973 10.6094 5.25 10.1189 5.25 9.51562ZM14 7.875C14 8.28003 13.3386 8.63208 12.3594 8.82178V7.73486C13.0208 7.61694 13.6035 7.42554 14 7.14526V7.875ZM5.25 7.60156C5.25 6.84619 6.71973 6.23438 8.53125 6.23438C10.3428 6.23438 11.8125 6.84619 11.8125 7.60156C11.8125 8.35693 10.3428 8.96875 8.53125 8.96875C6.71973 8.96875 5.25 8.35693 5.25 7.60156ZM14 6.23438C14 6.64966 13.3044 7.01196 12.2791 7.19653C12.1287 6.7915 11.7578 6.46338 11.2537 6.21899C12.3508 6.16431 13.3933 5.93359 14 5.50464V6.23438Z" fill="#65DC7F"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/label-icons/vote.svg b/web/src/assets/svgs/label-icons/vote.svg deleted file mode 100644 index da71a498b..000000000 --- a/web/src/assets/svgs/label-icons/vote.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none"> - <path fill-rule="evenodd" clip-rule="evenodd" d="M10.0625 9.625L3.9375 9.625C3.69587 9.625 3.5 9.44137 3.5 9.21484V8.94141C3.5 8.71488 3.69587 8.53125 3.9375 8.53125C3.9375 6.97667 4.86748 5.6647 6.14035 5.25C4.86748 4.8353 3.9375 3.52333 3.9375 1.96875C3.69587 1.96875 3.5 1.78512 3.5 1.55859V1.28516C3.5 1.05863 3.69587 0.875 3.9375 0.875H10.0625C10.3041 0.875 10.5 1.05863 10.5 1.28516V1.55859C10.5 1.78512 10.3041 1.96875 10.0625 1.96875C10.0625 3.52333 9.13252 4.8353 7.85965 5.25C9.13252 5.6647 10.0625 6.97667 10.0625 8.53125C10.3041 8.53125 10.5 8.71488 10.5 8.94141V9.21484C10.5 9.44137 10.3041 9.625 10.0625 9.625ZM8.89583 1.96875L5.10417 1.96875C5.10417 3.29292 5.94661 4.42969 7 4.42969C8.05357 4.42969 8.89583 3.2925 8.89583 1.96875Z" fill="#6CC5FF"/> - <path d="M1.16667 7.82373C0.522569 7.82373 0 8.34246 0 8.98182V11.298C0 11.9374 0.522569 12.4561 1.16667 12.4561H12.8333C13.4774 12.4561 14 11.9374 14 11.298V8.98182C14 8.34246 13.4774 7.82373 12.8333 7.82373H12.4444V10.912H1.55556V7.82373H1.16667Z" fill="#6CC5FF"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/label-icons/voted.svg b/web/src/assets/svgs/label-icons/voted.svg deleted file mode 100644 index 2876498b5..000000000 --- a/web/src/assets/svgs/label-icons/voted.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none"> - <path d="M9.83163 2.625H10.4312C10.4887 2.625 10.5204 2.69105 10.4853 2.7348L6.29574 8.04378C6.18508 8.18275 5.97406 8.18275 5.86426 8.04378L3.51472 5.06718C3.47955 5.02258 3.51129 4.95652 3.56876 4.95652H4.16837C4.20983 4.95658 4.25075 4.96602 4.28804 4.98414C4.32533 5.00227 4.35803 5.02861 4.38368 5.06118L6.07957 7.20999L9.61632 2.72965C9.66779 2.6636 9.74756 2.625 9.83163 2.625Z" fill="#B45FFF"/> - <path fill-rule="evenodd" clip-rule="evenodd" d="M11.6 2.36352L11.6667 2.80512V10.1397H2.33335V2.80512L2.40008 2.36352C2.52941 1.50772 3.26492 0.875 4.13044 0.875H9.8696C10.7351 0.875 11.4706 1.50772 11.6 2.36352ZM2.77085 9.70218V2.83799L2.83267 2.42889C2.92966 1.78704 3.4813 1.3125 4.13044 1.3125H9.8696C10.5187 1.3125 11.0704 1.78704 11.1674 2.42889L11.2292 2.83799V9.70218H2.77085Z" fill="#B45FFF"/> - <path d="M0 8.98182C0 8.34246 0.522569 7.82373 1.16667 7.82373H1.55556V10.912H12.4444V7.82373H12.8333C13.4774 7.82373 14 8.34246 14 8.98182V11.298C14 11.9374 13.4774 12.4561 12.8333 12.4561H1.16667C0.522569 12.4561 0 11.9374 0 11.298V8.98182Z" fill="#B45FFF"/> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/menu-icons/dark-mode.svg b/web/src/assets/svgs/menu-icons/dark-mode.svg deleted file mode 100644 index ca7106896..000000000 --- a/web/src/assets/svgs/menu-icons/dark-mode.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="15" height="16" viewBox="0 0 15 16" xmlns="http://www.w3.org/2000/svg"> -<path d="M8 16C10.4676 16 12.7212 14.8773 14.2143 13.0378C14.4352 12.7656 14.1943 12.3681 13.853 12.4331C9.97163 13.1722 6.40728 10.1963 6.40728 6.27825C6.40728 4.02131 7.61547 1.94591 9.57909 0.828438C9.88178 0.656188 9.80566 0.197281 9.46172 0.13375C8.97956 0.0448416 8.49029 7.30105e-05 8 0C3.58409 0 0 3.57847 0 8C0 12.4159 3.57847 16 8 16Z" /> -</svg> diff --git a/web/src/assets/svgs/menu-icons/help.svg b/web/src/assets/svgs/menu-icons/help.svg deleted file mode 100644 index 1c89e1fcf..000000000 --- a/web/src/assets/svgs/menu-icons/help.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> - <path d="M8 0C3.58203 0 0 3.58332 0 8C0 12.4193 3.58203 16 8 16C12.418 16 16 12.4193 16 8C16 3.58332 12.418 0 8 0ZM8 14.4516C4.43445 14.4516 1.54839 11.5667 1.54839 8C1.54839 4.43564 4.43458 1.54839 8 1.54839C11.5642 1.54839 14.4516 4.43455 14.4516 8C14.4516 11.5655 11.5667 14.4516 8 14.4516ZM11.4595 6.21935C11.4595 8.38232 9.12332 8.41561 9.12332 9.21494V9.41935C9.12332 9.63313 8.95 9.80645 8.73623 9.80645H7.26374C7.04997 9.80645 6.87664 9.63313 6.87664 9.41935V9.14003C6.87664 7.98697 7.75084 7.52603 8.41145 7.15564C8.97794 6.83806 9.32513 6.62206 9.32513 6.20148C9.32513 5.64516 8.61548 5.2759 8.04177 5.2759C7.29374 5.2759 6.94842 5.63 6.463 6.24265C6.33213 6.40781 6.09332 6.43848 5.92539 6.31116L5.02784 5.63058C4.8631 5.50568 4.82619 5.27361 4.94255 5.10274C5.70471 3.98358 6.67548 3.35484 8.1869 3.35484C9.76984 3.35484 11.4595 4.59045 11.4595 6.21935V6.21935ZM9.35484 11.6129C9.35484 12.36 8.74706 12.9677 8 12.9677C7.25294 12.9677 6.64516 12.36 6.64516 11.6129C6.64516 10.8658 7.25294 10.2581 8 10.2581C8.74706 10.2581 9.35484 10.8658 9.35484 11.6129Z" /> -</svg> diff --git a/web/src/assets/svgs/menu-icons/kleros-solutions.svg b/web/src/assets/svgs/menu-icons/kleros-solutions.svg deleted file mode 100644 index 0e5cdf722..000000000 --- a/web/src/assets/svgs/menu-icons/kleros-solutions.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="16" height="14" viewBox="0 0 16 14" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2C4 3.10457 3.10457 4 2 4C0.895431 4 0 3.10457 0 2C0 0.895431 0.895431 0 2 0C3.10457 0 4 0.895431 4 2ZM4 7C4 8.10457 3.10457 9 2 9C0.895431 9 0 8.10457 0 7C0 5.89543 0.895431 5 2 5C3.10457 5 4 5.89543 4 7ZM2 14C3.10457 14 4 13.1046 4 12C4 10.8954 3.10457 10 2 10C0.895431 10 0 10.8954 0 12C0 13.1046 0.895431 14 2 14ZM10 2C10 3.10457 9.10457 4 8 4C6.89543 4 6 3.10457 6 2C6 0.895431 6.89543 0 8 0C9.10457 0 10 0.895431 10 2ZM8 9C9.10457 9 10 8.10457 10 7C10 5.89543 9.10457 5 8 5C6.89543 5 6 5.89543 6 7C6 8.10457 6.89543 9 8 9ZM10 12C10 13.1046 9.10457 14 8 14C6.89543 14 6 13.1046 6 12C6 10.8954 6.89543 10 8 10C9.10457 10 10 10.8954 10 12ZM14 4C15.1046 4 16 3.10457 16 2C16 0.895431 15.1046 0 14 0C12.8954 0 12 0.895431 12 2C12 3.10457 12.8954 4 14 4ZM16 7C16 8.10457 15.1046 9 14 9C12.8954 9 12 8.10457 12 7C12 5.89543 12.8954 5 14 5C15.1046 5 16 5.89543 16 7ZM14 14C15.1046 14 16 13.1046 16 12C16 10.8954 15.1046 10 14 10C12.8954 10 12 10.8954 12 12C12 13.1046 12.8954 14 14 14Z" /> -</svg> diff --git a/web/src/assets/svgs/menu-icons/light-mode.svg b/web/src/assets/svgs/menu-icons/light-mode.svg deleted file mode 100644 index e5140867a..000000000 --- a/web/src/assets/svgs/menu-icons/light-mode.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" xmlns="http://www.w3.org/2000/svg"> -<path d="M8.76855 5C7.11543 5 5.76855 6.34688 5.76855 8C5.76855 9.65312 7.11543 11 8.76855 11C10.4217 11 11.7686 9.65312 11.7686 8C11.7686 6.34688 10.4217 5 8.76855 5ZM16.4686 7.51562L13.5092 6.0375L14.5561 2.9C14.6967 2.475 14.2936 2.07188 13.8717 2.21563L10.7342 3.2625L9.25293 0.3C9.05293 -0.1 8.48418 -0.1 8.28418 0.3L6.80605 3.25938L3.66543 2.2125C3.24043 2.07188 2.8373 2.475 2.98105 2.89687L4.02793 6.03438L1.06855 7.51562C0.668555 7.71562 0.668555 8.28438 1.06855 8.48438L4.02793 9.9625L2.98105 13.1031C2.84043 13.5281 3.24355 13.9313 3.66543 13.7875L6.80293 12.7406L8.28105 15.7C8.48105 16.1 9.0498 16.1 9.2498 15.7L10.7279 12.7406L13.8654 13.7875C14.2904 13.9281 14.6936 13.525 14.5498 13.1031L13.5029 9.96562L16.4623 8.4875C16.8686 8.28438 16.8686 7.71562 16.4686 7.51562ZM11.5967 10.8281C10.0373 12.3875 7.4998 12.3875 5.94043 10.8281C4.38105 9.26875 4.38105 6.73125 5.94043 5.17188C7.4998 3.6125 10.0373 3.6125 11.5967 5.17188C13.1561 6.73125 13.1561 9.26875 11.5967 10.8281Z" /> -</svg> diff --git a/web/src/assets/svgs/menu-icons/notifications.svg b/web/src/assets/svgs/menu-icons/notifications.svg deleted file mode 100644 index c13406ca9..000000000 --- a/web/src/assets/svgs/menu-icons/notifications.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="14" height="16" viewBox="0 0 14 16" xmlns="http://www.w3.org/2000/svg"> -<path d="M13.6807 11.3216C13.0791 10.6728 11.9536 9.69687 11.9536 6.5C11.9536 4.07188 10.2573 2.12812 7.97009 1.65125V1C7.97009 0.447812 7.52423 0 6.97437 0C6.42452 0 5.97866 0.447812 5.97866 1V1.65125C3.69145 2.12812 1.99518 4.07188 1.99518 6.5C1.99518 9.69687 0.869636 10.6728 0.268098 11.3216C0.0812852 11.5231 -0.00153525 11.7641 2.15267e-05 12C0.00344643 12.5125 0.40416 13 0.999471 13H12.9493C13.5446 13 13.9456 12.5125 13.9487 12C13.9503 11.7641 13.8675 11.5228 13.6807 11.3216ZM2.1026 11.5C2.7633 10.6259 3.48564 9.17719 3.48907 6.51813C3.48907 6.51188 3.4872 6.50625 3.4872 6.5C3.4872 4.56687 5.04833 3 6.97437 3C8.90042 3 10.4616 4.56687 10.4616 6.5C10.4616 6.50625 10.4597 6.51188 10.4597 6.51813C10.4631 9.1775 11.1855 10.6263 11.8461 11.5H2.1026ZM6.97437 16C8.07408 16 8.96611 15.1047 8.96611 14H4.98264C4.98264 15.1047 5.87467 16 6.97437 16Z" /> -</svg> diff --git a/web/src/assets/svgs/menu-icons/settings.svg b/web/src/assets/svgs/menu-icons/settings.svg deleted file mode 100644 index 69e5d81eb..000000000 --- a/web/src/assets/svgs/menu-icons/settings.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="M15.1211 9.92257L13.7469 9.12903C13.8856 8.38064 13.8856 7.6129 13.7469 6.86452L15.1211 6.07097C15.2792 5.98065 15.3501 5.79356 15.2985 5.61936C14.9405 4.47098 14.3308 3.43228 13.534 2.56776C13.4114 2.4355 13.2114 2.40325 13.0566 2.49357L11.6824 3.28711C11.105 2.79034 10.4405 2.40647 9.72113 2.15486V0.570996C9.72113 0.390351 9.59532 0.232287 9.4179 0.193578C8.23404 -0.0709372 7.02114 -0.0580341 5.89534 0.193578C5.71792 0.232287 5.59211 0.390351 5.59211 0.570996V2.15809C4.87598 2.41292 4.21147 2.79679 3.63083 3.29034L2.25987 2.49679C2.1018 2.40647 1.90503 2.4355 1.78245 2.57099C0.985677 3.43228 0.376002 4.47098 0.0179393 5.62259C-0.0368992 5.79678 0.037294 5.98388 0.195358 6.0742L1.56955 6.86775C1.43084 7.61613 1.43084 8.38387 1.56955 9.13225L0.195358 9.9258C0.037294 10.0161 -0.0336734 10.2032 0.0179393 10.3774C0.376002 11.5258 0.985677 12.5645 1.78245 13.429C1.90503 13.5613 2.10503 13.5935 2.25987 13.5032L3.63405 12.7097C4.21147 13.2064 4.87599 13.5903 5.59534 13.8419V15.429C5.59534 15.6096 5.72114 15.7677 5.89856 15.8064C7.08243 16.0709 8.29533 16.058 9.42113 15.8064C9.59855 15.7677 9.72435 15.6096 9.72435 15.429V13.8419C10.4405 13.5871 11.105 13.2032 11.6856 12.7097L13.0598 13.5032C13.2179 13.5935 13.4147 13.5645 13.5372 13.429C14.334 12.5677 14.9437 11.529 15.3017 10.3774C15.3501 10.2 15.2792 10.0129 15.1211 9.92257ZM7.65662 10.5774C6.23404 10.5774 5.07598 9.41935 5.07598 7.99677C5.07598 6.5742 6.23404 5.41614 7.65662 5.41614C9.07919 5.41614 10.2373 6.5742 10.2373 7.99677C10.2373 9.41935 9.07919 10.5774 7.65662 10.5774Z" /> -</svg> diff --git a/web/src/assets/svgs/mini-guides/appeal/crowdfund-appeal.svg b/web/src/assets/svgs/mini-guides/appeal/crowdfund-appeal.svg deleted file mode 100644 index ff5a5f1ca..000000000 --- a/web/src/assets/svgs/mini-guides/appeal/crowdfund-appeal.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg viewBox="0 0 373 255" fill="none" xmlns="http://www.w3.org/2000/svg"> -<rect x="0.4117" y="0.4117" width="372.177" height="253.607" rx="2.0585" class="rect-bg" stroke-width="0.8234"/> -<path d="M34.213 35.016C32.8878 35.016 31.8457 35.4856 31.0866 36.4247C30.3276 37.3639 29.948 38.6601 29.948 40.3134C29.948 42.0438 30.3115 43.3529 31.0384 44.2406C31.7717 45.1283 32.8299 45.5722 34.213 45.5722C34.8112 45.5722 35.3902 45.5143 35.9498 45.3985C36.5095 45.2763 37.0917 45.1219 37.6964 44.9354V46.9134C36.5899 47.3316 35.3355 47.5406 33.9332 47.5406C31.8682 47.5406 30.2825 46.9167 29.1761 45.6687C28.0697 44.4143 27.5164 42.6228 27.5164 40.2941C27.5164 38.8274 27.7834 37.5441 28.3173 36.444C28.8577 35.344 29.636 34.5013 30.6524 33.9159C31.6688 33.3306 32.8621 33.0379 34.2323 33.0379C35.6732 33.0379 37.0048 33.3402 38.2271 33.9449L37.3972 35.8651C36.9212 35.6399 36.4162 35.4437 35.8823 35.2765C35.3548 35.1028 34.7984 35.016 34.213 35.016ZM45.9078 36.4826C46.3646 36.4826 46.7409 36.5148 47.0368 36.5791L46.8149 38.6923C46.4932 38.6151 46.1587 38.5765 45.8113 38.5765C44.9043 38.5765 44.1678 38.8724 43.6017 39.4642C43.042 40.0561 42.7622 40.8248 42.7622 41.7704V47.3477H40.4946V36.6756H42.2701L42.5692 38.5572H42.685C43.0388 37.9204 43.4987 37.4154 44.0648 37.0423C44.6374 36.6692 45.2517 36.4826 45.9078 36.4826ZM58.4904 41.9923C58.4904 43.7356 58.0433 45.0962 57.1492 46.074C56.255 47.0517 55.0103 47.5406 53.4149 47.5406C52.4178 47.5406 51.5365 47.3155 50.771 46.8652C50.0055 46.4149 49.4169 45.7684 49.0052 44.9257C48.5935 44.083 48.3877 43.1052 48.3877 41.9923C48.3877 40.2619 48.8315 38.911 49.7193 37.9397C50.607 36.9683 51.8582 36.4826 53.4728 36.4826C55.0167 36.4826 56.2389 36.9812 57.1395 37.9783C58.0401 38.9689 58.4904 40.3069 58.4904 41.9923ZM50.7228 41.9923C50.7228 44.4561 51.633 45.688 53.4535 45.688C55.2547 45.688 56.1553 44.4561 56.1553 41.9923C56.1553 39.5543 55.2483 38.3353 53.4342 38.3353C52.4822 38.3353 51.7906 38.6505 51.3596 39.2809C50.9351 39.9113 50.7228 40.8151 50.7228 41.9923ZM69.8572 47.3477L68.4773 42.3687C68.3101 41.8412 68.0078 40.6157 67.5703 38.6923H67.4835C67.1104 40.4292 66.8145 41.6611 66.5958 42.388L65.1773 47.3477H62.6685L59.6773 36.6756H61.9931L63.3536 41.9344C63.6624 43.2339 63.8811 44.3468 64.0098 45.2731H64.0677C64.132 44.8035 64.2285 44.2663 64.3571 43.6617C64.4922 43.0505 64.608 42.5938 64.7045 42.2915L66.3256 36.6756H68.8151L70.3879 42.2915C70.4844 42.6067 70.6034 43.0891 70.7449 43.7389C70.8929 44.3886 70.9797 44.8935 71.0054 45.2538H71.0826C71.1791 44.4625 71.4043 43.3561 71.7581 41.9344L73.1379 36.6756H75.4151L72.4046 47.3477H69.8572ZM80.8573 47.5406C79.5257 47.5406 78.4868 47.0582 77.7406 46.0933C76.9944 45.1283 76.6213 43.7742 76.6213 42.0309C76.6213 40.2812 76.9976 38.9207 77.7502 37.9493C78.5093 36.9715 79.5579 36.4826 80.8959 36.4826C82.2982 36.4826 83.3661 37.0005 84.0994 38.0362H84.2152C84.1059 37.2707 84.0512 36.666 84.0512 36.2221V32.3335H86.3284V47.3477H84.5529L84.1573 45.9485H84.0512C83.3243 47.0099 82.2596 47.5406 80.8573 47.5406ZM81.4652 45.7073C82.3979 45.7073 83.0766 45.4468 83.5012 44.9257C83.9257 44.3982 84.1445 43.5459 84.1573 42.3687V42.0502C84.1573 40.7058 83.9386 39.7505 83.5012 39.1844C83.0637 38.6183 82.3786 38.3353 81.4459 38.3353C80.6482 38.3353 80.0339 38.6601 79.6029 39.3099C79.1719 39.9531 78.9564 40.873 78.9564 42.0695C78.9564 43.2532 79.1655 44.157 79.5836 44.781C80.0017 45.3985 80.6289 45.7073 81.4652 45.7073ZM94.9258 38.3932H92.3206V47.3477H90.0433V38.3932H88.2872V37.3318L90.0433 36.637V35.9423C90.0433 34.6815 90.3393 33.7487 90.9311 33.144C91.5229 32.5329 92.4267 32.2273 93.6425 32.2273C94.4402 32.2273 95.225 32.3592 95.9969 32.623L95.3987 34.3405C94.839 34.1604 94.3051 34.0703 93.7969 34.0703C93.2823 34.0703 92.9059 34.2312 92.6679 34.5528C92.4363 34.868 92.3206 35.344 92.3206 35.9809V36.6756H94.9258V38.3932ZM104.276 47.3477L103.958 45.9485H103.842C103.527 46.4438 103.076 46.833 102.491 47.1161C101.912 47.3991 101.249 47.5406 100.503 47.5406C99.2101 47.5406 98.2452 47.219 97.6083 46.5757C96.9715 45.9324 96.6531 44.9579 96.6531 43.652V36.6756H98.9399V43.2564C98.9399 44.0734 99.1072 44.6877 99.4417 45.0994C99.7762 45.5047 100.3 45.7073 101.014 45.7073C101.967 45.7073 102.665 45.4242 103.108 44.8582C103.559 44.2856 103.784 43.3304 103.784 41.9923V36.6756H106.061V47.3477H104.276ZM118.682 47.3477H116.405V40.7862C116.405 39.9628 116.238 39.3485 115.903 38.9432C115.575 38.5379 115.051 38.3353 114.33 38.3353C113.372 38.3353 112.671 38.6183 112.227 39.1844C111.783 39.7505 111.561 40.6993 111.561 42.0309V47.3477H109.294V36.6756H111.069L111.387 38.0748H111.503C111.825 37.5666 112.282 37.1742 112.873 36.8976C113.465 36.6209 114.121 36.4826 114.842 36.4826C117.402 36.4826 118.682 37.7853 118.682 40.3906V47.3477ZM125.437 47.5406C124.105 47.5406 123.066 47.0582 122.32 46.0933C121.574 45.1283 121.201 43.7742 121.201 42.0309C121.201 40.2812 121.577 38.9207 122.33 37.9493C123.089 36.9715 124.137 36.4826 125.475 36.4826C126.878 36.4826 127.945 37.0005 128.679 38.0362H128.795C128.685 37.2707 128.631 36.666 128.631 36.2221V32.3335H130.908V47.3477H129.132L128.737 45.9485H128.631C127.904 47.0099 126.839 47.5406 125.437 47.5406ZM126.045 45.7073C126.977 45.7073 127.656 45.4468 128.081 44.9257C128.505 44.3982 128.724 43.5459 128.737 42.3687V42.0502C128.737 40.7058 128.518 39.7505 128.081 39.1844C127.643 38.6183 126.958 38.3353 126.025 38.3353C125.228 38.3353 124.613 38.6601 124.182 39.3099C123.751 39.9531 123.536 40.873 123.536 42.0695C123.536 43.2532 123.745 44.157 124.163 44.781C124.581 45.3985 125.208 45.7073 126.045 45.7073ZM136.417 47.3477H134.15V36.6756H136.417V47.3477ZM134.015 33.8484C134.015 33.4431 134.124 33.1311 134.343 32.9124C134.568 32.6937 134.886 32.5844 135.298 32.5844C135.697 32.5844 136.006 32.6937 136.224 32.9124C136.45 33.1311 136.562 33.4431 136.562 33.8484C136.562 34.2344 136.45 34.5399 136.224 34.7651C136.006 34.9838 135.697 35.0932 135.298 35.0932C134.886 35.0932 134.568 34.9838 134.343 34.7651C134.124 34.5399 134.015 34.2344 134.015 33.8484ZM149.058 47.3477H146.781V40.7862C146.781 39.9628 146.613 39.3485 146.279 38.9432C145.951 38.5379 145.427 38.3353 144.706 38.3353C143.748 38.3353 143.046 38.6183 142.603 39.1844C142.159 39.7505 141.937 40.6993 141.937 42.0309V47.3477H139.669V36.6756H141.445L141.763 38.0748H141.879C142.201 37.5666 142.657 37.1742 143.249 36.8976C143.841 36.6209 144.497 36.4826 145.218 36.4826C147.778 36.4826 149.058 37.7853 149.058 40.3906V47.3477ZM161.226 36.6756V37.9204L159.402 38.2581C159.569 38.4832 159.707 38.7599 159.817 39.0879C159.926 39.416 159.981 39.7634 159.981 40.13C159.981 41.2301 159.601 42.0953 158.842 42.7257C158.083 43.3561 157.038 43.6713 155.706 43.6713C155.365 43.6713 155.057 43.6456 154.78 43.5941C154.291 43.8965 154.047 44.2503 154.047 44.6555C154.047 44.9 154.159 45.0833 154.384 45.2055C154.616 45.3278 155.037 45.3889 155.648 45.3889H157.511C158.688 45.3889 159.582 45.6397 160.193 46.1415C160.804 46.6433 161.11 47.367 161.11 48.3126C161.11 49.5219 160.611 50.4547 159.614 51.1108C158.617 51.767 157.176 52.0951 155.291 52.0951C153.838 52.0951 152.728 51.8378 151.962 51.3231C151.197 50.8085 150.814 50.0752 150.814 49.1231C150.814 48.467 151.02 47.9137 151.432 47.4634C151.85 47.0196 152.432 46.7108 153.178 46.5371C152.876 46.4085 152.625 46.2026 152.426 45.9196C152.233 45.6301 152.136 45.3278 152.136 45.0125C152.136 44.6137 152.249 44.276 152.474 43.9994C152.699 43.7228 153.033 43.4494 153.477 43.1792C152.924 42.9412 152.474 42.5552 152.126 42.0213C151.785 41.4809 151.615 40.8505 151.615 40.13C151.615 38.9721 151.978 38.0748 152.705 37.4379C153.439 36.8011 154.481 36.4826 155.832 36.4826C156.134 36.4826 156.449 36.5052 156.777 36.5502C157.112 36.5888 157.363 36.6306 157.53 36.6756H161.226ZM152.84 49.0073C152.84 49.4962 153.059 49.8725 153.497 50.1363C153.94 50.4 154.561 50.5319 155.359 50.5319C156.594 50.5319 157.514 50.355 158.119 50.0012C158.723 49.6474 159.026 49.1778 159.026 48.5924C159.026 48.1292 158.858 47.798 158.524 47.5985C158.196 47.4056 157.581 47.3091 156.681 47.3091H154.963C154.314 47.3091 153.796 47.4602 153.41 47.7626C153.03 48.0713 152.84 48.4863 152.84 49.0073ZM153.815 40.13C153.815 40.7991 153.985 41.3137 154.326 41.6739C154.674 42.0342 155.169 42.2143 155.812 42.2143C157.125 42.2143 157.781 41.5131 157.781 40.1107C157.781 39.416 157.617 38.8821 157.289 38.509C156.967 38.1294 156.475 37.9397 155.812 37.9397C155.156 37.9397 154.658 38.1262 154.317 38.4993C153.982 38.8724 153.815 39.416 153.815 40.13ZM172.322 45.7073C172.875 45.7073 173.429 45.6204 173.982 45.4468V47.1547C173.731 47.264 173.406 47.3541 173.007 47.4248C172.615 47.502 172.206 47.5406 171.782 47.5406C169.633 47.5406 168.559 46.4085 168.559 44.1441V38.3932H167.102V37.3897L168.665 36.5598L169.437 34.3019H170.836V36.6756H173.876V38.3932H170.836V44.1055C170.836 44.6523 170.971 45.0576 171.241 45.3213C171.518 45.5786 171.878 45.7073 172.322 45.7073ZM185.513 47.3477H183.235V40.7862C183.235 39.9628 183.068 39.3485 182.734 38.9432C182.406 38.5379 181.881 38.3353 181.161 38.3353C180.209 38.3353 179.508 38.6216 179.057 39.1941C178.613 39.7602 178.392 40.7122 178.392 42.0502V47.3477H176.124V32.3335H178.392V36.1449C178.392 36.756 178.353 37.409 178.276 38.1037H178.42C178.729 37.5891 179.157 37.1902 179.704 36.9072C180.257 36.6242 180.9 36.4826 181.634 36.4826C184.22 36.4826 185.513 37.7853 185.513 40.3906V47.3477ZM193.329 47.5406C191.669 47.5406 190.369 47.0582 189.43 46.0933C188.497 45.1219 188.031 43.7871 188.031 42.0888C188.031 40.3455 188.465 38.9754 189.334 37.9783C190.202 36.9812 191.395 36.4826 192.914 36.4826C194.322 36.4826 195.435 36.9104 196.252 37.766C197.069 38.6216 197.478 39.7988 197.478 41.2976V42.523H190.366C190.398 43.5587 190.678 44.3564 191.206 44.9161C191.733 45.4693 192.476 45.7459 193.435 45.7459C194.065 45.7459 194.65 45.688 195.191 45.5722C195.738 45.45 196.323 45.2506 196.947 44.9739V46.8169C196.394 47.0807 195.834 47.2672 195.268 47.3766C194.702 47.486 194.055 47.5406 193.329 47.5406ZM192.914 38.2002C192.193 38.2002 191.614 38.4286 191.177 38.8853C190.746 39.342 190.488 40.0078 190.405 40.8827H195.249C195.236 40.0014 195.024 39.3356 194.612 38.8853C194.2 38.4286 193.634 38.2002 192.914 38.2002ZM214.18 47.3477L212.772 43.4301H207.378L205.998 47.3477H203.566L208.844 33.1826H211.353L216.631 47.3477H214.18ZM212.164 41.4423L210.842 37.6019C210.745 37.3446 210.61 36.9394 210.437 36.3861C210.269 35.8329 210.154 35.4277 210.089 35.1703C209.916 35.9616 209.661 36.8268 209.327 37.766L208.053 41.4423H212.164ZM223.666 47.5406C222.315 47.5406 221.266 47.055 220.52 46.0836H220.385C220.475 46.9842 220.52 47.531 220.52 47.724V52.0951H218.252V36.6756H220.086C220.137 36.875 220.243 37.3511 220.404 38.1037H220.52C221.228 37.023 222.289 36.4826 223.704 36.4826C225.036 36.4826 226.072 36.9651 226.811 37.93C227.558 38.8949 227.931 40.2491 227.931 41.9923C227.931 43.7356 227.551 45.0962 226.792 46.074C226.039 47.0517 224.997 47.5406 223.666 47.5406ZM223.116 38.3353C222.215 38.3353 221.556 38.599 221.138 39.1265C220.726 39.654 220.52 40.4967 220.52 41.6546V41.9923C220.52 43.2918 220.726 44.2342 221.138 44.8196C221.549 45.3985 222.221 45.688 223.154 45.688C223.939 45.688 224.544 45.3664 224.968 44.7231C225.393 44.0798 225.605 43.1631 225.605 41.973C225.605 40.7765 225.393 39.8727 224.968 39.2616C224.55 38.6441 223.933 38.3353 223.116 38.3353ZM235.978 47.5406C234.627 47.5406 233.579 47.055 232.832 46.0836H232.697C232.787 46.9842 232.832 47.531 232.832 47.724V52.0951H230.565V36.6756H232.398C232.45 36.875 232.556 37.3511 232.717 38.1037H232.832C233.54 37.023 234.601 36.4826 236.017 36.4826C237.348 36.4826 238.384 36.9651 239.124 37.93C239.87 38.8949 240.243 40.2491 240.243 41.9923C240.243 43.7356 239.863 45.0962 239.104 46.074C238.352 47.0517 237.31 47.5406 235.978 47.5406ZM235.428 38.3353C234.527 38.3353 233.868 38.599 233.45 39.1265C233.038 39.654 232.832 40.4967 232.832 41.6546V41.9923C232.832 43.2918 233.038 44.2342 233.45 44.8196C233.862 45.3985 234.534 45.688 235.467 45.688C236.251 45.688 236.856 45.3664 237.281 44.7231C237.705 44.0798 237.918 43.1631 237.918 41.973C237.918 40.7765 237.705 39.8727 237.281 39.2616C236.863 38.6441 236.245 38.3353 235.428 38.3353ZM247.538 47.5406C245.878 47.5406 244.579 47.0582 243.64 46.0933C242.707 45.1219 242.24 43.7871 242.24 42.0888C242.24 40.3455 242.675 38.9754 243.543 37.9783C244.411 36.9812 245.605 36.4826 247.123 36.4826C248.532 36.4826 249.645 36.9104 250.462 37.766C251.278 38.6216 251.687 39.7988 251.687 41.2976V42.523H244.576C244.608 43.5587 244.888 44.3564 245.415 44.9161C245.942 45.4693 246.685 45.7459 247.644 45.7459C248.274 45.7459 248.86 45.688 249.4 45.5722C249.947 45.45 250.532 45.2506 251.156 44.9739V46.8169C250.603 47.0807 250.043 47.2672 249.477 47.3766C248.911 47.486 248.265 47.5406 247.538 47.5406ZM247.123 38.2002C246.402 38.2002 245.823 38.4286 245.386 38.8853C244.955 39.342 244.698 40.0078 244.614 40.8827H249.458C249.445 40.0014 249.233 39.3356 248.821 38.8853C248.409 38.4286 247.843 38.2002 247.123 38.2002ZM260.941 47.3477L260.487 45.8617H260.41C259.895 46.5114 259.377 46.9553 258.856 47.1933C258.335 47.4248 257.666 47.5406 256.849 47.5406C255.801 47.5406 254.981 47.2576 254.389 46.6915C253.803 46.1254 253.511 45.3245 253.511 44.2889C253.511 43.1888 253.919 42.359 254.736 41.7994C255.553 41.2397 256.798 40.9341 258.47 40.8827L260.313 40.8248V40.2555C260.313 39.5736 260.153 39.0654 259.831 38.7309C259.516 38.39 259.024 38.2195 258.355 38.2195C257.808 38.2195 257.284 38.2999 256.782 38.4607C256.28 38.6216 255.798 38.8113 255.334 39.03L254.601 37.409C255.18 37.1066 255.814 36.8783 256.502 36.7239C257.19 36.5631 257.84 36.4826 258.451 36.4826C259.808 36.4826 260.831 36.7786 261.52 37.3704C262.214 37.9622 262.562 38.8917 262.562 40.159V47.3477H260.941ZM257.563 45.8038C258.387 45.8038 259.046 45.5754 259.541 45.1187C260.043 44.6555 260.294 44.009 260.294 43.1792V42.2529L258.924 42.3108C257.856 42.3494 257.078 42.5295 256.589 42.8511C256.106 43.1663 255.865 43.652 255.865 44.3082C255.865 44.7842 256.007 45.1541 256.29 45.4178C256.573 45.6751 256.997 45.8038 257.563 45.8038ZM267.994 47.3477H265.727V32.3335H267.994V47.3477Z" class="path-1" /> -<rect x="26.7525" y="191.783" width="319.844" height="35.5382" rx="2.01922" class="rect-fg" stroke-width="0.807686"/> -<path d="M46.3996 208.543C46.3996 210.168 46.1423 211.382 45.6277 212.184C45.1173 212.985 44.3347 213.386 43.2797 213.386C42.2676 213.386 41.4978 212.977 40.9703 212.158C40.4428 211.334 40.1791 210.129 40.1791 208.543C40.1791 206.904 40.4343 205.689 40.9446 204.895C41.4549 204.102 42.2333 203.705 43.2797 203.705C44.3004 203.705 45.0745 204.119 45.602 204.947C46.1337 205.774 46.3996 206.973 46.3996 208.543ZM41.2598 208.543C41.2598 209.911 41.4206 210.908 41.7423 211.534C42.0639 212.156 42.5764 212.467 43.2797 212.467C43.9916 212.467 44.5062 212.151 44.8236 211.521C45.1452 210.886 45.306 209.893 45.306 208.543C45.306 207.192 45.1452 206.203 44.8236 205.577C44.5062 204.947 43.9916 204.631 43.2797 204.631C42.5764 204.631 42.0639 204.942 41.7423 205.564C41.4206 206.182 41.2598 207.175 41.2598 208.543ZM48.04 212.576C48.04 212.289 48.1043 212.072 48.233 211.926C48.3659 211.776 48.5546 211.701 48.7991 211.701C49.0478 211.701 49.2408 211.776 49.378 211.926C49.5195 212.072 49.5903 212.289 49.5903 212.576C49.5903 212.855 49.5195 213.069 49.378 213.219C49.2365 213.369 49.0435 213.444 48.7991 213.444C48.5803 213.444 48.3981 213.378 48.2523 213.245C48.1107 213.108 48.04 212.885 48.04 212.576ZM57.4512 208.543C57.4512 210.168 57.1939 211.382 56.6793 212.184C56.1689 212.985 55.3863 213.386 54.3313 213.386C53.3192 213.386 52.5494 212.977 52.0219 212.158C51.4944 211.334 51.2307 210.129 51.2307 208.543C51.2307 206.904 51.4858 205.689 51.9962 204.895C52.5065 204.102 53.2849 203.705 54.3313 203.705C55.3519 203.705 56.126 204.119 56.6535 204.947C57.1853 205.774 57.4512 206.973 57.4512 208.543ZM52.3114 208.543C52.3114 209.911 52.4722 210.908 52.7938 211.534C53.1155 212.156 53.628 212.467 54.3313 212.467C55.0432 212.467 55.5578 212.151 55.8752 211.521C56.1968 210.886 56.3576 209.893 56.3576 208.543C56.3576 207.192 56.1968 206.203 55.8752 205.577C55.5578 204.947 55.0432 204.631 54.3313 204.631C53.628 204.631 53.1155 204.942 52.7938 205.564C52.4722 206.182 52.3114 207.175 52.3114 208.543ZM64.9904 208.543C64.9904 210.168 64.7331 211.382 64.2185 212.184C63.7082 212.985 62.9255 213.386 61.8705 213.386C60.8584 213.386 60.0886 212.977 59.5612 212.158C59.0337 211.334 58.7699 210.129 58.7699 208.543C58.7699 206.904 59.0251 205.689 59.5354 204.895C60.0458 204.102 60.8241 203.705 61.8705 203.705C62.8912 203.705 63.6653 204.119 64.1928 204.947C64.7246 205.774 64.9904 206.973 64.9904 208.543ZM59.8506 208.543C59.8506 209.911 60.0114 210.908 60.3331 211.534C60.6547 212.156 61.1672 212.467 61.8705 212.467C62.5824 212.467 63.0971 212.151 63.4144 211.521C63.736 210.886 63.8969 209.893 63.8969 208.543C63.8969 207.192 63.736 206.203 63.4144 205.577C63.0971 204.947 62.5824 204.631 61.8705 204.631C61.1672 204.631 60.6547 204.942 60.3331 205.564C60.0114 206.182 59.8506 207.175 59.8506 208.543ZM72.9221 211.096H71.5262V213.258H70.5034V211.096H65.9296V210.164L70.394 203.802H71.5262V210.125H72.9221V211.096ZM70.5034 210.125V206.999C70.5034 206.385 70.5248 205.693 70.5677 204.921H70.5162C70.3104 205.333 70.1174 205.674 69.9373 205.944L66.9975 210.125H70.5034ZM83.1503 213.258H77.9075V203.853H83.1503V204.824H79.0011V207.854H82.8994V208.819H79.0011V212.28H83.1503V213.258ZM88.1357 213.258H87.0421V204.824H84.0637V203.853H91.1141V204.824H88.1357V213.258ZM99.6761 213.258H98.5826V208.832H93.6293V213.258H92.5357V203.853H93.6293V207.854H98.5826V203.853H99.6761V213.258Z" class="path-2" /> -<path d="M33.7279 177.5H32.771V173.627H28.4369V177.5H27.48V169.271H28.4369V172.772H32.771V169.271H33.7279V177.5ZM41.1747 174.41C41.1747 175.416 40.9214 176.202 40.4148 176.768C39.9082 177.331 39.2084 177.613 38.3153 177.613C37.7637 177.613 37.274 177.483 36.8462 177.224C36.4184 176.965 36.0882 176.594 35.8555 176.11C35.6229 175.626 35.5065 175.059 35.5065 174.41C35.5065 173.404 35.758 172.622 36.2608 172.063C36.7636 171.5 37.4616 171.218 38.3547 171.218C39.2177 171.218 39.9026 171.505 40.4091 172.08C40.9195 172.654 41.1747 173.43 41.1747 174.41ZM36.4747 174.41C36.4747 175.198 36.6323 175.798 36.9475 176.211C37.2627 176.624 37.7261 176.83 38.3378 176.83C38.9494 176.83 39.4129 176.626 39.7281 176.217C40.047 175.804 40.2065 175.202 40.2065 174.41C40.2065 173.626 40.047 173.031 39.7281 172.626C39.4129 172.217 38.9457 172.012 38.3265 172.012C37.7149 172.012 37.2533 172.213 36.9419 172.614C36.6304 173.016 36.4747 173.614 36.4747 174.41ZM47.8559 177.5L46.7246 173.881C46.6533 173.659 46.52 173.157 46.3249 172.372H46.2799C46.1298 173.029 45.9985 173.536 45.8859 173.892L44.7207 177.5H43.64L41.957 171.331H42.9364C43.3342 172.881 43.6363 174.061 43.8427 174.871C44.0528 175.682 44.1729 176.228 44.2029 176.509H44.2479C44.2892 176.295 44.3549 176.02 44.4449 175.682C44.5387 175.34 44.6194 175.07 44.687 174.871L45.8183 171.331H46.8315L47.9347 174.871C48.1449 175.517 48.2875 176.059 48.3625 176.498H48.4075C48.4226 176.363 48.462 176.155 48.5257 175.873C48.5933 175.592 48.9854 174.078 49.7021 171.331H50.6703L48.9648 177.5H47.8559ZM62.6482 177.5V173.487C62.6482 172.995 62.5431 172.627 62.333 172.384C62.1228 172.136 61.7964 172.012 61.3536 172.012C60.7719 172.012 60.3423 172.179 60.0646 172.513C59.7869 172.847 59.6481 173.361 59.6481 174.055V177.5H58.7137V173.487C58.7137 172.995 58.6086 172.627 58.3985 172.384C58.1884 172.136 57.86 172.012 57.4135 172.012C56.8281 172.012 56.3984 172.188 56.1245 172.541C55.8543 172.89 55.7192 173.464 55.7192 174.263V177.5H54.7849V171.331H55.5447L55.6967 172.175H55.7417C55.9181 171.875 56.1658 171.641 56.4847 171.472C56.8074 171.303 57.1677 171.218 57.5654 171.218C58.5298 171.218 59.1602 171.567 59.4567 172.265H59.5017C59.6856 171.943 59.952 171.687 60.301 171.5C60.65 171.312 61.0477 171.218 61.4943 171.218C62.1922 171.218 62.7138 171.398 63.0591 171.759C63.408 172.115 63.5825 172.687 63.5825 173.475V177.5H62.6482ZM66.3913 171.331V175.333C66.3913 175.836 66.5057 176.211 66.7346 176.459C66.9635 176.706 67.3219 176.83 67.8097 176.83C68.4551 176.83 68.9261 176.654 69.2225 176.301C69.5227 175.948 69.6728 175.372 69.6728 174.573V171.331H70.6072V177.5H69.836L69.7009 176.673H69.6503C69.4589 176.977 69.1925 177.209 68.851 177.371C68.5133 177.532 68.1268 177.613 67.6915 177.613C66.941 177.613 66.3781 177.434 66.0029 177.078C65.6314 176.721 65.4456 176.151 65.4456 175.367V171.331H66.3913ZM75.0595 177.613C74.1664 177.613 73.4741 177.339 72.9825 176.791C72.4947 176.239 72.2507 175.461 72.2507 174.455C72.2507 173.423 72.4984 172.626 72.9937 172.063C73.4928 171.5 74.202 171.218 75.1214 171.218C75.4178 171.218 75.7143 171.25 76.0107 171.314C76.3072 171.378 76.5398 171.453 76.7087 171.539L76.4216 172.333C76.2152 172.25 75.9901 172.183 75.7462 172.13C75.5023 172.074 75.2865 172.046 75.0989 172.046C73.8455 172.046 73.2189 172.845 73.2189 174.444C73.2189 175.202 73.3709 175.783 73.6748 176.189C73.9825 176.594 74.4366 176.796 75.037 176.796C75.551 176.796 76.0783 176.686 76.6186 176.464V177.292C76.2059 177.506 75.6861 177.613 75.0595 177.613ZM82.3093 177.5V173.509C82.3093 173.006 82.1948 172.631 81.9659 172.384C81.737 172.136 81.3786 172.012 80.8908 172.012C80.2416 172.012 79.767 172.188 79.4668 172.541C79.1703 172.894 79.0221 173.472 79.0221 174.275V177.5H78.0877V168.742H79.0221V171.393C79.0221 171.712 79.0071 171.976 78.9771 172.186H79.0333C79.2172 171.89 79.478 171.657 79.8157 171.489C80.1572 171.316 80.5456 171.23 80.9809 171.23C81.7351 171.23 82.2999 171.41 82.6751 171.77C83.0541 172.126 83.2436 172.695 83.2436 173.475V177.5H82.3093ZM92.3621 176.673H92.3115C91.8799 177.299 91.2345 177.613 90.3752 177.613C89.5684 177.613 88.9399 177.337 88.4896 176.785C88.043 176.234 87.8198 175.449 87.8198 174.432C87.8198 173.415 88.0449 172.626 88.4952 172.063C88.9455 171.5 89.5722 171.218 90.3752 171.218C91.212 171.218 91.8537 171.522 92.3002 172.13H92.3734L92.334 171.686L92.3115 171.252V168.742H93.2458V177.5H92.486L92.3621 176.673ZM90.4934 176.83C91.1313 176.83 91.5929 176.658 91.8781 176.312C92.167 175.963 92.3115 175.402 92.3115 174.629V174.432C92.3115 173.558 92.1651 172.935 91.8724 172.564C91.5835 172.188 91.1201 172.001 90.4821 172.001C89.9343 172.001 89.514 172.215 89.2213 172.642C88.9324 173.066 88.7879 173.667 88.7879 174.444C88.7879 175.232 88.9324 175.826 89.2213 176.228C89.5102 176.629 89.9343 176.83 90.4934 176.83ZM100.558 174.41C100.558 175.416 100.304 176.202 99.7976 176.768C99.2911 177.331 98.5912 177.613 97.6981 177.613C97.1465 177.613 96.6568 177.483 96.229 177.224C95.8013 176.965 95.471 176.594 95.2384 176.11C95.0057 175.626 94.8894 175.059 94.8894 174.41C94.8894 173.404 95.1408 172.622 95.6437 172.063C96.1465 171.5 96.8445 171.218 97.7375 171.218C98.6006 171.218 99.2854 171.505 99.792 172.08C100.302 172.654 100.558 173.43 100.558 174.41ZM95.8576 174.41C95.8576 175.198 96.0152 175.798 96.3304 176.211C96.6456 176.624 97.109 176.83 97.7207 176.83C98.3323 176.83 98.7957 176.626 99.1109 176.217C99.4299 175.804 99.5894 175.202 99.5894 174.41C99.5894 173.626 99.4299 173.031 99.1109 172.626C98.7957 172.217 98.3286 172.012 97.7094 172.012C97.0977 172.012 96.6362 172.213 96.3247 172.614C96.0133 173.016 95.8576 173.614 95.8576 174.41ZM104.216 171.331H105.218L106.569 174.849C106.865 175.652 107.049 176.232 107.121 176.588H107.166C107.214 176.397 107.316 176.07 107.47 175.609C107.627 175.143 108.138 173.718 109.001 171.331H110.002L107.351 178.356C107.089 179.05 106.781 179.541 106.428 179.83C106.079 180.123 105.65 180.269 105.139 180.269C104.854 180.269 104.573 180.237 104.295 180.174V179.425C104.501 179.47 104.732 179.493 104.987 179.493C105.629 179.493 106.087 179.132 106.361 178.412L106.704 177.534L104.216 171.331ZM116.329 174.41C116.329 175.416 116.076 176.202 115.569 176.768C115.063 177.331 114.363 177.613 113.47 177.613C112.918 177.613 112.428 177.483 112.001 177.224C111.573 176.965 111.243 176.594 111.01 176.11C110.777 175.626 110.661 175.059 110.661 174.41C110.661 173.404 110.912 172.622 111.415 172.063C111.918 171.5 112.616 171.218 113.509 171.218C114.372 171.218 115.057 171.505 115.564 172.08C116.074 172.654 116.329 173.43 116.329 174.41ZM111.629 174.41C111.629 175.198 111.787 175.798 112.102 176.211C112.417 176.624 112.881 176.83 113.492 176.83C114.104 176.83 114.567 176.626 114.883 176.217C115.202 175.804 115.361 175.202 115.361 174.41C115.361 173.626 115.202 173.031 114.883 172.626C114.567 172.217 114.1 172.012 113.481 172.012C112.869 172.012 112.408 172.213 112.096 172.614C111.785 173.016 111.629 173.614 111.629 174.41ZM118.851 171.331V175.333C118.851 175.836 118.965 176.211 119.194 176.459C119.423 176.706 119.781 176.83 120.269 176.83C120.915 176.83 121.386 176.654 121.682 176.301C121.982 175.948 122.132 175.372 122.132 174.573V171.331H123.067V177.5H122.296L122.161 176.673H122.11C121.918 176.977 121.652 177.209 121.311 177.371C120.973 177.532 120.586 177.613 120.151 177.613C119.401 177.613 118.838 177.434 118.462 177.078C118.091 176.721 117.905 176.151 117.905 175.367V171.331H118.851ZM133.086 177.5L131.954 173.881C131.883 173.659 131.75 173.157 131.555 172.372H131.51C131.36 173.029 131.228 173.536 131.116 173.892L129.951 177.5H128.87L127.187 171.331H128.166C128.564 172.881 128.866 174.061 129.073 174.871C129.283 175.682 129.403 176.228 129.433 176.509H129.478C129.519 176.295 129.585 176.02 129.675 175.682C129.769 175.34 129.849 175.07 129.917 174.871L131.048 171.331H132.061L133.165 174.871C133.375 175.517 133.517 176.059 133.592 176.498H133.637C133.652 176.363 133.692 176.155 133.756 175.873C133.823 175.592 134.215 174.078 134.932 171.331H135.9L134.195 177.5H133.086ZM140.814 177.5L140.628 176.622H140.583C140.276 177.008 139.968 177.271 139.66 177.41C139.356 177.545 138.975 177.613 138.518 177.613C137.906 177.613 137.426 177.455 137.077 177.14C136.731 176.825 136.559 176.376 136.559 175.795C136.559 174.549 137.555 173.896 139.548 173.836L140.595 173.802V173.419C140.595 172.935 140.489 172.579 140.279 172.35C140.073 172.117 139.741 172.001 139.283 172.001C138.769 172.001 138.187 172.158 137.538 172.474L137.251 171.759C137.555 171.594 137.887 171.464 138.247 171.37C138.611 171.277 138.975 171.23 139.339 171.23C140.075 171.23 140.619 171.393 140.972 171.719C141.328 172.046 141.506 172.569 141.506 173.29V177.5H140.814ZM138.703 176.841C139.285 176.841 139.741 176.682 140.071 176.363C140.405 176.044 140.572 175.597 140.572 175.023V174.466L139.638 174.506C138.895 174.532 138.358 174.648 138.028 174.855C137.701 175.057 137.538 175.374 137.538 175.806C137.538 176.143 137.639 176.401 137.842 176.577C138.048 176.753 138.336 176.841 138.703 176.841ZM147.659 177.5V173.509C147.659 173.006 147.544 172.631 147.315 172.384C147.086 172.136 146.728 172.012 146.24 172.012C145.595 172.012 145.122 172.186 144.822 172.535C144.521 172.884 144.371 173.46 144.371 174.263V177.5H143.437V171.331H144.197L144.349 172.175H144.394C144.585 171.871 144.854 171.637 145.199 171.472C145.544 171.303 145.929 171.218 146.353 171.218C147.096 171.218 147.655 171.398 148.03 171.759C148.405 172.115 148.593 172.687 148.593 173.475V177.5H147.659ZM152.51 176.841C152.676 176.841 152.835 176.83 152.989 176.808C153.143 176.781 153.265 176.755 153.355 176.729V177.444C153.253 177.492 153.103 177.532 152.905 177.562C152.709 177.596 152.533 177.613 152.375 177.613C151.182 177.613 150.585 176.984 150.585 175.727V172.057H149.702V171.607L150.585 171.218L150.979 169.901H151.52V171.331H153.31V172.057H151.52V175.688C151.52 176.059 151.608 176.344 151.784 176.543C151.961 176.742 152.203 176.841 152.51 176.841ZM159.58 176.841C159.745 176.841 159.905 176.83 160.059 176.808C160.212 176.781 160.334 176.755 160.424 176.729V177.444C160.323 177.492 160.173 177.532 159.974 177.562C159.779 177.596 159.603 177.613 159.445 177.613C158.252 177.613 157.655 176.984 157.655 175.727V172.057H156.771V171.607L157.655 171.218L158.049 169.901H158.59V171.331H160.379V172.057H158.59V175.688C158.59 176.059 158.678 176.344 158.854 176.543C159.03 176.742 159.272 176.841 159.58 176.841ZM166.988 174.41C166.988 175.416 166.734 176.202 166.228 176.768C165.721 177.331 165.021 177.613 164.128 177.613C163.577 177.613 163.087 177.483 162.659 177.224C162.231 176.965 161.901 176.594 161.668 176.11C161.436 175.626 161.319 175.059 161.319 174.41C161.319 173.404 161.571 172.622 162.074 172.063C162.577 171.5 163.274 171.218 164.168 171.218C165.031 171.218 165.715 171.505 166.222 172.08C166.732 172.654 166.988 173.43 166.988 174.41ZM162.288 174.41C162.288 175.198 162.445 175.798 162.76 176.211C163.076 176.624 163.539 176.83 164.151 176.83C164.762 176.83 165.226 176.626 165.541 176.217C165.86 175.804 166.019 175.202 166.019 174.41C166.019 173.626 165.86 173.031 165.541 172.626C165.226 172.217 164.759 172.012 164.139 172.012C163.528 172.012 163.066 172.213 162.755 172.614C162.443 173.016 162.288 173.614 162.288 174.41ZM174.406 172.057H172.836V177.5H171.901V172.057H170.798V171.635L171.901 171.297V170.954C171.901 169.438 172.564 168.68 173.888 168.68C174.215 168.68 174.598 168.745 175.037 168.877L174.795 169.625C174.434 169.509 174.127 169.451 173.871 169.451C173.519 169.451 173.258 169.569 173.089 169.806C172.92 170.038 172.836 170.413 172.836 170.931V171.331H174.406V172.057ZM176.41 171.331V175.333C176.41 175.836 176.524 176.211 176.753 176.459C176.982 176.706 177.341 176.83 177.828 176.83C178.474 176.83 178.945 176.654 179.241 176.301C179.541 175.948 179.692 175.372 179.692 174.573V171.331H180.626V177.5H179.855L179.72 176.673H179.669C179.478 176.977 179.211 177.209 178.87 177.371C178.532 177.532 178.146 177.613 177.71 177.613C176.96 177.613 176.397 177.434 176.022 177.078C175.65 176.721 175.464 176.151 175.464 175.367V171.331H176.41ZM186.834 177.5V173.509C186.834 173.006 186.72 172.631 186.491 172.384C186.262 172.136 185.904 172.012 185.416 172.012C184.771 172.012 184.298 172.186 183.997 172.535C183.697 172.884 183.547 173.46 183.547 174.263V177.5H182.613V171.331H183.373L183.525 172.175H183.57C183.761 171.871 184.029 171.637 184.375 171.472C184.72 171.303 185.104 171.218 185.529 171.218C186.271 171.218 186.831 171.398 187.206 171.759C187.581 172.115 187.769 172.687 187.769 173.475V177.5H186.834ZM193.893 176.673H193.842C193.411 177.299 192.765 177.613 191.906 177.613C191.099 177.613 190.471 177.337 190.02 176.785C189.574 176.234 189.35 175.449 189.35 174.432C189.35 173.415 189.576 172.626 190.026 172.063C190.476 171.5 191.103 171.218 191.906 171.218C192.743 171.218 193.384 171.522 193.831 172.13H193.904L193.865 171.686L193.842 171.252V168.742H194.776V177.5H194.017L193.893 176.673ZM192.024 176.83C192.662 176.83 193.124 176.658 193.409 176.312C193.698 175.963 193.842 175.402 193.842 174.629V174.432C193.842 173.558 193.696 172.935 193.403 172.564C193.114 172.188 192.651 172.001 192.013 172.001C191.465 172.001 191.045 172.215 190.752 172.642C190.463 173.066 190.319 173.667 190.319 174.444C190.319 175.232 190.463 175.826 190.752 176.228C191.041 176.629 191.465 176.83 192.024 176.83ZM197.399 175.232V174.928C197.399 174.489 197.467 174.128 197.602 173.847C197.737 173.562 197.989 173.262 198.356 172.946C198.867 172.515 199.188 172.19 199.319 171.973C199.454 171.755 199.521 171.492 199.521 171.185C199.521 170.802 199.398 170.507 199.15 170.301C198.906 170.091 198.553 169.986 198.092 169.986C197.795 169.986 197.506 170.021 197.225 170.093C196.944 170.16 196.621 170.286 196.257 170.47L195.925 169.71C196.634 169.338 197.375 169.153 198.148 169.153C198.865 169.153 199.422 169.329 199.82 169.682C200.218 170.034 200.416 170.532 200.416 171.173C200.416 171.447 200.379 171.689 200.304 171.899C200.233 172.106 200.126 172.303 199.983 172.49C199.84 172.674 199.533 172.973 199.06 173.385C198.681 173.708 198.43 173.976 198.306 174.19C198.186 174.404 198.126 174.689 198.126 175.046V175.232H197.399ZM197.124 176.903C197.124 176.393 197.349 176.138 197.799 176.138C198.017 176.138 198.184 176.204 198.3 176.335C198.42 176.466 198.48 176.656 198.48 176.903C198.48 177.144 198.42 177.331 198.3 177.466C198.18 177.598 198.013 177.663 197.799 177.663C197.604 177.663 197.443 177.605 197.315 177.489C197.187 177.369 197.124 177.174 197.124 176.903ZM204.182 174.342C204.182 173.348 204.327 172.417 204.615 171.55C204.908 170.684 205.328 169.924 205.876 169.271H206.788C206.248 169.995 205.841 170.791 205.567 171.657C205.297 172.524 205.161 173.415 205.161 174.331C205.161 175.232 205.3 176.112 205.578 176.971C205.856 177.83 206.255 178.614 206.777 179.324H205.876C205.325 178.686 204.904 177.941 204.615 177.089C204.327 176.237 204.182 175.322 204.182 174.342ZM212.85 177.5H208.263V169.271H212.85V170.121H209.22V172.772H212.631V173.616H209.22V176.644H212.85V177.5ZM217.213 177.5H216.256V170.121H213.65V169.271H219.819V170.121H217.213V177.5ZM227.31 177.5H226.354V173.627H222.019V177.5H221.063V169.271H222.019V172.772H226.354V169.271H227.31V177.5ZM231.391 174.342C231.391 175.329 231.245 176.249 230.952 177.1C230.663 177.952 230.245 178.693 229.697 179.324H228.796C229.318 178.618 229.718 177.836 229.995 176.977C230.273 176.113 230.412 175.232 230.412 174.331C230.412 173.415 230.275 172.524 230.001 171.657C229.731 170.791 229.325 169.995 228.785 169.271H229.697C230.249 169.928 230.669 170.691 230.958 171.562C231.247 172.429 231.391 173.355 231.391 174.342Z" class="path-3"/> -<rect x="262.541" y="191.023" width="84.6976" height="37.053" rx="2.4702" class="rect-accent"/> -<path d="M291.683 214.551H290.158V205.146H295.465V206.445H291.683V209.385H295.227V210.691H291.683V214.551ZM302.027 214.551L301.815 213.618H301.737C301.527 213.948 301.227 214.208 300.837 214.396C300.451 214.585 300.009 214.679 299.512 214.679C298.65 214.679 298.006 214.465 297.582 214.036C297.157 213.607 296.945 212.958 296.945 212.087V207.436H298.469V211.823C298.469 212.368 298.581 212.777 298.804 213.052C299.027 213.322 299.376 213.457 299.853 213.457C300.487 213.457 300.953 213.269 301.248 212.891C301.549 212.509 301.699 211.873 301.699 210.981V207.436H303.217V214.551H302.027ZM311.631 214.551H310.113V210.176C310.113 209.628 310.001 209.218 309.778 208.948C309.56 208.678 309.21 208.543 308.73 208.543C308.091 208.543 307.623 208.731 307.327 209.109C307.032 209.486 306.884 210.119 306.884 211.006V214.551H305.372V207.436H306.556L306.768 208.369H306.845C307.059 208.03 307.364 207.768 307.758 207.584C308.153 207.4 308.59 207.307 309.071 207.307C310.778 207.307 311.631 208.176 311.631 209.913V214.551ZM316.134 214.679C315.246 214.679 314.554 214.358 314.056 213.715C313.559 213.071 313.31 212.168 313.31 211.006C313.31 209.84 313.561 208.933 314.063 208.285C314.569 207.633 315.268 207.307 316.16 207.307C317.095 207.307 317.806 207.653 318.295 208.343H318.373C318.3 207.833 318.263 207.43 318.263 207.134V204.541H319.781V214.551H318.598L318.334 213.618H318.263C317.779 214.326 317.069 214.679 316.134 214.679ZM316.539 213.457C317.161 213.457 317.614 213.284 317.897 212.936C318.18 212.584 318.325 212.016 318.334 211.231V211.019C318.334 210.123 318.188 209.486 317.897 209.109C317.605 208.731 317.148 208.543 316.526 208.543C315.995 208.543 315.585 208.759 315.298 209.192C315.01 209.621 314.867 210.234 314.867 211.032C314.867 211.821 315.006 212.424 315.285 212.84C315.564 213.251 315.982 213.457 316.539 213.457Z" class="path-4"/> -<path d="M30.5366 87.2812H29.4431V78.8478H26.4647V77.8765H33.515V78.8478H30.5366V87.2812ZM39.6005 87.2812V82.7204C39.6005 82.1457 39.4697 81.7169 39.2081 81.4338C38.9465 81.1508 38.5369 81.0093 37.9794 81.0093C37.2375 81.0093 36.695 81.2108 36.3519 81.6139C36.0131 82.0171 35.8437 82.6775 35.8437 83.5953V87.2812H34.7759V77.2718H35.8437V80.3017C35.8437 80.6662 35.8265 80.9685 35.7922 81.2087H35.8566C36.0667 80.8699 36.3648 80.604 36.7507 80.411C37.141 80.2137 37.5849 80.1151 38.0823 80.1151C38.9443 80.1151 39.5897 80.321 40.0186 80.7327C40.4517 81.1401 40.6683 81.7898 40.6683 82.6818V87.2812H39.6005ZM45.8467 87.4099C44.8046 87.4099 43.9812 87.0926 43.3765 86.4579C42.7761 85.8231 42.4759 84.9419 42.4759 83.814C42.4759 82.6775 42.7547 81.7748 43.3122 81.1058C43.874 80.4367 44.6266 80.1022 45.5701 80.1022C46.4536 80.1022 47.1526 80.3939 47.6672 80.9771C48.1818 81.556 48.4391 82.3216 48.4391 83.2736V83.9491H43.5824C43.6038 84.7767 43.8118 85.405 44.2064 85.8339C44.6052 86.2627 45.1648 86.4771 45.8853 86.4771C46.6444 86.4771 47.3949 86.3185 48.1368 86.0011V86.9532C47.7594 87.1161 47.4013 87.2319 47.0625 87.3005C46.728 87.3735 46.3227 87.4099 45.8467 87.4099ZM45.5572 80.9964C44.9912 80.9964 44.5387 81.1808 44.1999 81.5496C43.8654 81.9184 43.6681 82.4288 43.6081 83.0806H47.2941C47.2941 82.4073 47.144 81.8927 46.8438 81.5368C46.5436 81.1765 46.1148 80.9964 45.5572 80.9964ZM52.8328 90.4462C52.4253 90.4462 52.0951 90.3926 51.8421 90.2854V89.4169C52.138 89.5027 52.4296 89.5456 52.717 89.5456C53.0515 89.5456 53.2959 89.4534 53.4503 89.269C53.609 89.0889 53.6883 88.8123 53.6883 88.4392V80.2309H54.7562V88.362C54.7562 89.7514 54.115 90.4462 52.8328 90.4462ZM53.5983 78.3203C53.5983 78.0759 53.6583 77.8979 53.7784 77.7864C53.8985 77.6706 54.0486 77.6127 54.2287 77.6127C54.4002 77.6127 54.5482 77.6706 54.6725 77.7864C54.7969 77.9022 54.8591 78.0802 54.8591 78.3203C54.8591 78.5605 54.7969 78.7406 54.6725 78.8607C54.5482 78.9765 54.4002 79.0344 54.2287 79.0344C54.0486 79.0344 53.8985 78.9765 53.7784 78.8607C53.6583 78.7406 53.5983 78.5605 53.5983 78.3203ZM58.024 80.2309V84.8046C58.024 85.3793 58.1548 85.8081 58.4164 86.0912C58.678 86.3742 59.0876 86.5157 59.6451 86.5157C60.3827 86.5157 60.9209 86.3142 61.2597 85.9111C61.6028 85.5079 61.7744 84.8496 61.7744 83.9362V80.2309H62.8422V87.2812H61.9609L61.8065 86.3356H61.7486C61.5299 86.683 61.2254 86.9489 60.8352 87.1333C60.4492 87.3177 60.0075 87.4099 59.51 87.4099C58.6523 87.4099 58.009 87.2062 57.5802 86.7988C57.1556 86.3914 56.9433 85.7395 56.9433 84.8432V80.2309H58.024ZM68.3294 80.1022C68.6425 80.1022 68.9234 80.128 69.1721 80.1794L69.0241 81.1701C68.7325 81.1058 68.4752 81.0736 68.2522 81.0736C67.6818 81.0736 67.1929 81.3052 66.7855 81.7683C66.3824 82.2315 66.1808 82.8083 66.1808 83.4988V87.2812H65.113V80.2309H65.9943L66.1165 81.5368H66.168C66.4296 81.0779 66.7448 80.7241 67.1136 80.4753C67.4824 80.2266 67.8877 80.1022 68.3294 80.1022ZM69.3715 80.2309H70.5165L72.0604 84.2514C72.3992 85.1691 72.6094 85.8317 72.6908 86.2391H72.7423C72.798 86.0204 72.9138 85.6473 73.0897 85.1198C73.2698 84.588 73.853 82.9584 74.8394 80.2309H75.9844L72.9546 88.259C72.6544 89.0524 72.3027 89.6142 71.8996 89.9444C71.5008 90.2789 71.0097 90.4462 70.4265 90.4462C70.1006 90.4462 69.7789 90.4097 69.4616 90.3368V89.4813C69.6974 89.5327 69.9612 89.5585 70.2528 89.5585C70.9861 89.5585 71.5093 89.1468 71.8224 88.3234L72.2148 87.3198L69.3715 80.2309ZM85.3506 86.3356H85.2927C84.7995 87.0518 84.0619 87.4099 83.0798 87.4099C82.1578 87.4099 81.4395 87.0947 80.9248 86.4643C80.4145 85.8339 80.1593 84.9376 80.1593 83.7754C80.1593 82.6132 80.4166 81.7104 80.9313 81.0672C81.4459 80.4239 82.1621 80.1022 83.0798 80.1022C84.0362 80.1022 84.7695 80.4496 85.2798 81.1443H85.3635L85.3184 80.6362L85.2927 80.1408V77.2718H86.3606V87.2812H85.4921L85.3506 86.3356ZM83.2149 86.5157C83.944 86.5157 84.4715 86.3185 84.7974 85.9239C85.1276 85.5251 85.2927 84.884 85.2927 84.0005V83.7754C85.2927 82.7761 85.1255 82.0642 84.791 81.6397C84.4607 81.2108 83.9311 80.9964 83.202 80.9964C82.5759 80.9964 82.0956 81.2408 81.7611 81.7297C81.4309 82.2143 81.2658 82.9005 81.2658 83.7882C81.2658 84.6888 81.4309 85.3686 81.7611 85.8274C82.0913 86.2863 82.5759 86.5157 83.2149 86.5157ZM91.6097 87.4099C90.5676 87.4099 89.7442 87.0926 89.1395 86.4579C88.5391 85.8231 88.2389 84.9419 88.2389 83.814C88.2389 82.6775 88.5177 81.7748 89.0752 81.1058C89.637 80.4367 90.3896 80.1022 91.3331 80.1022C92.2166 80.1022 92.9156 80.3939 93.4302 80.9771C93.9448 81.556 94.2022 82.3216 94.2022 83.2736V83.9491H89.3454C89.3668 84.7767 89.5748 85.405 89.9694 85.8339C90.3682 86.2627 90.9279 86.4771 91.6483 86.4771C92.4074 86.4771 93.1579 86.3185 93.8998 86.0011V86.9532C93.5224 87.1161 93.1643 87.2319 92.8255 87.3005C92.491 87.3735 92.0858 87.4099 91.6097 87.4099ZM91.3203 80.9964C90.7542 80.9964 90.3017 81.1808 89.9629 81.5496C89.6284 81.9184 89.4312 82.4288 89.3711 83.0806H93.0571C93.0571 82.4073 92.907 81.8927 92.6068 81.5368C92.3066 81.1765 91.8778 80.9964 91.3203 80.9964ZM98.8466 87.4099C97.826 87.4099 97.0347 87.0968 96.4729 86.4707C95.9154 85.8403 95.6367 84.9504 95.6367 83.8011C95.6367 82.6218 95.9197 81.7104 96.4858 81.0672C97.0562 80.4239 97.8667 80.1022 98.9174 80.1022C99.2562 80.1022 99.595 80.1387 99.9338 80.2116C100.273 80.2845 100.538 80.3703 100.731 80.4689L100.403 81.3759C100.168 81.2816 99.9102 81.2044 99.6314 81.1443C99.3527 81.08 99.1061 81.0479 98.8917 81.0479C97.4593 81.0479 96.7431 81.9613 96.7431 83.7882C96.7431 84.6545 96.9168 85.3192 97.2642 85.7824C97.6158 86.2456 98.1347 86.4771 98.8209 86.4771C99.4084 86.4771 100.011 86.3506 100.629 86.0976V87.0432C100.157 87.2877 99.5628 87.4099 98.8466 87.4099ZM103.375 87.2812H102.307V80.2309H103.375V87.2812ZM102.217 78.3203C102.217 78.0759 102.277 77.8979 102.398 77.7864C102.518 77.6706 102.668 77.6127 102.848 77.6127C103.019 77.6127 103.167 77.6706 103.292 77.7864C103.416 77.9022 103.478 78.0802 103.478 78.3203C103.478 78.5605 103.416 78.7406 103.292 78.8607C103.167 78.9765 103.019 79.0344 102.848 79.0344C102.668 79.0344 102.518 78.9765 102.398 78.8607C102.277 78.7406 102.217 78.5605 102.217 78.3203ZM110.188 85.3578C110.188 86.014 109.943 86.52 109.454 86.876C108.965 87.2319 108.279 87.4099 107.396 87.4099C106.461 87.4099 105.732 87.262 105.209 86.966V85.9754C105.547 86.1469 105.91 86.282 106.296 86.3807C106.686 86.4793 107.061 86.5286 107.422 86.5286C107.979 86.5286 108.408 86.4407 108.708 86.2649C109.008 86.0847 109.158 85.8124 109.158 85.4479C109.158 85.1734 109.038 84.9397 108.798 84.7467C108.562 84.5495 108.099 84.3179 107.409 84.052C106.753 83.8075 106.285 83.5953 106.006 83.4151C105.732 83.2307 105.526 83.0227 105.389 82.7911C105.256 82.5596 105.189 82.283 105.189 81.9613C105.189 81.3867 105.423 80.9342 105.891 80.604C106.358 80.2695 106.999 80.1022 107.814 80.1022C108.573 80.1022 109.315 80.2566 110.04 80.5654L109.66 81.4338C108.953 81.1422 108.311 80.9964 107.737 80.9964C107.231 80.9964 106.849 81.0757 106.592 81.2344C106.334 81.3931 106.206 81.6118 106.206 81.8906C106.206 82.0793 106.253 82.2401 106.347 82.373C106.446 82.506 106.602 82.6325 106.817 82.7526C107.031 82.8726 107.443 83.0463 108.052 83.2736C108.888 83.5781 109.452 83.8847 109.744 84.1935C110.04 84.5023 110.188 84.8904 110.188 85.3578ZM112.999 87.2812H111.931V80.2309H112.999V87.2812ZM111.841 78.3203C111.841 78.0759 111.901 77.8979 112.021 77.7864C112.141 77.6706 112.291 77.6127 112.471 77.6127C112.643 77.6127 112.791 77.6706 112.915 77.7864C113.04 77.9022 113.102 78.0802 113.102 78.3203C113.102 78.5605 113.04 78.7406 112.915 78.8607C112.791 78.9765 112.643 79.0344 112.471 79.0344C112.291 79.0344 112.141 78.9765 112.021 78.8607C111.901 78.7406 111.841 78.5605 111.841 78.3203ZM121.349 83.7496C121.349 84.899 121.059 85.7974 120.48 86.445C119.901 87.0883 119.101 87.4099 118.081 87.4099C117.45 87.4099 116.891 87.262 116.402 86.966C115.913 86.6701 115.535 86.2456 115.27 85.6923C115.004 85.1391 114.871 84.4916 114.871 83.7496C114.871 82.6003 115.158 81.7061 115.733 81.0672C116.307 80.4239 117.105 80.1022 118.126 80.1022C119.112 80.1022 119.895 80.4303 120.474 81.0865C121.057 81.7426 121.349 82.6303 121.349 83.7496ZM115.977 83.7496C115.977 84.6502 116.157 85.3364 116.518 85.8081C116.878 86.2799 117.407 86.5157 118.106 86.5157C118.806 86.5157 119.335 86.282 119.695 85.8146C120.06 85.3428 120.242 84.6545 120.242 83.7496C120.242 82.8533 120.06 82.1736 119.695 81.7104C119.335 81.243 118.801 81.0093 118.094 81.0093C117.395 81.0093 116.867 81.2387 116.511 81.6976C116.155 82.1564 115.977 82.8405 115.977 83.7496ZM128.052 87.2812V82.7204C128.052 82.1457 127.921 81.7169 127.659 81.4338C127.398 81.1508 126.988 81.0093 126.431 81.0093C125.693 81.0093 125.153 81.2087 124.809 81.6075C124.466 82.0063 124.295 82.6646 124.295 83.5824V87.2812H123.227V80.2309H124.095L124.269 81.1958H124.321C124.539 80.8484 124.846 80.5804 125.24 80.3917C125.635 80.1987 126.075 80.1022 126.559 80.1022C127.408 80.1022 128.047 80.3081 128.476 80.7198C128.905 81.1272 129.119 81.7812 129.119 82.6818V87.2812H128.052ZM135.81 87.2812H134.742V80.2309H135.81V87.2812ZM134.652 78.3203C134.652 78.0759 134.712 77.8979 134.832 77.7864C134.952 77.6706 135.102 77.6127 135.282 77.6127C135.454 77.6127 135.602 77.6706 135.726 77.7864C135.85 77.9022 135.912 78.0802 135.912 78.3203C135.912 78.5605 135.85 78.7406 135.726 78.8607C135.602 78.9765 135.454 79.0344 135.282 79.0344C135.102 79.0344 134.952 78.9765 134.832 78.8607C134.712 78.7406 134.652 78.5605 134.652 78.3203ZM142.622 85.3578C142.622 86.014 142.377 86.52 141.889 86.876C141.4 87.2319 140.714 87.4099 139.83 87.4099C138.895 87.4099 138.166 87.262 137.643 86.966V85.9754C137.982 86.1469 138.344 86.282 138.73 86.3807C139.12 86.4793 139.496 86.5286 139.856 86.5286C140.413 86.5286 140.842 86.4407 141.142 86.2649C141.443 86.0847 141.593 85.8124 141.593 85.4479C141.593 85.1734 141.473 84.9397 141.232 84.7467C140.997 84.5495 140.533 84.3179 139.843 84.052C139.187 83.8075 138.719 83.5953 138.441 83.4151C138.166 83.2307 137.96 83.0227 137.823 82.7911C137.69 82.5596 137.624 82.283 137.624 81.9613C137.624 81.3867 137.857 80.9342 138.325 80.604C138.792 80.2695 139.433 80.1022 140.248 80.1022C141.007 80.1022 141.749 80.2566 142.474 80.5654L142.094 81.4338C141.387 81.1422 140.746 80.9964 140.171 80.9964C139.665 80.9964 139.283 81.0757 139.026 81.2344C138.769 81.3931 138.64 81.6118 138.64 81.8906C138.64 82.0793 138.687 82.2401 138.782 82.373C138.88 82.506 139.037 82.6325 139.251 82.7526C139.466 82.8726 139.877 83.0463 140.486 83.2736C141.322 83.5781 141.886 83.8847 142.178 84.1935C142.474 84.5023 142.622 84.8904 142.622 85.3578ZM152.123 87.2812L151.911 86.2777H151.859C151.508 86.7195 151.156 87.0196 150.804 87.1783C150.457 87.3327 150.022 87.4099 149.499 87.4099C148.8 87.4099 148.251 87.2298 147.852 86.8696C147.457 86.5093 147.26 85.9968 147.26 85.3321C147.26 83.9083 148.399 83.1621 150.676 83.0935L151.872 83.0549V82.6175C151.872 82.0642 151.752 81.6568 151.512 81.3952C151.276 81.1293 150.897 80.9964 150.373 80.9964C149.786 80.9964 149.121 81.1765 148.379 81.5368L148.051 80.7198C148.399 80.5311 148.778 80.3831 149.19 80.2759C149.606 80.1687 150.022 80.1151 150.438 80.1151C151.278 80.1151 151.9 80.3017 152.303 80.6748C152.711 81.0479 152.914 81.6461 152.914 82.4695V87.2812H152.123ZM149.711 86.5286C150.376 86.5286 150.897 86.3463 151.274 85.9818C151.656 85.6173 151.847 85.107 151.847 84.4508V83.814L150.779 83.859C149.93 83.889 149.316 84.022 148.939 84.2578C148.566 84.4894 148.379 84.8518 148.379 85.345C148.379 85.7309 148.495 86.0247 148.727 86.2263C148.963 86.4278 149.291 86.5286 149.711 86.5286ZM158.402 87.4099C157.943 87.4099 157.522 87.3263 157.141 87.159C156.763 86.9875 156.446 86.7259 156.189 86.3742H156.112C156.163 86.7859 156.189 87.1762 156.189 87.545V90.4462H155.121V80.2309H155.989L156.137 81.1958H156.189C156.463 80.8098 156.783 80.5311 157.147 80.3595C157.512 80.188 157.93 80.1022 158.402 80.1022C159.336 80.1022 160.057 80.4217 160.563 81.0607C161.073 81.6997 161.329 82.596 161.329 83.7496C161.329 84.9075 161.069 85.8081 160.55 86.4514C160.036 87.0904 159.319 87.4099 158.402 87.4099ZM158.247 81.0093C157.527 81.0093 157.006 81.2087 156.684 81.6075C156.362 82.0063 156.197 82.6411 156.189 83.5116V83.7496C156.189 84.7403 156.354 85.45 156.684 85.8789C157.014 86.3035 157.544 86.5157 158.273 86.5157C158.882 86.5157 159.358 86.2692 159.701 85.776C160.048 85.2828 160.222 84.6031 160.222 83.7368C160.222 82.8576 160.048 82.1843 159.701 81.7169C159.358 81.2451 158.873 81.0093 158.247 81.0093ZM166.481 87.4099C166.022 87.4099 165.602 87.3263 165.22 87.159C164.843 86.9875 164.526 86.7259 164.268 86.3742H164.191C164.243 86.7859 164.268 87.1762 164.268 87.545V90.4462H163.2V80.2309H164.069L164.217 81.1958H164.268C164.543 80.8098 164.862 80.5311 165.227 80.3595C165.591 80.188 166.009 80.1022 166.481 80.1022C167.416 80.1022 168.137 80.4217 168.643 81.0607C169.153 81.6997 169.408 82.596 169.408 83.7496C169.408 84.9075 169.149 85.8081 168.63 86.4514C168.115 87.0904 167.399 87.4099 166.481 87.4099ZM166.327 81.0093C165.606 81.0093 165.085 81.2087 164.764 81.6075C164.442 82.0063 164.277 82.6411 164.268 83.5116V83.7496C164.268 84.7403 164.433 85.45 164.764 85.8789C165.094 86.3035 165.623 86.5157 166.353 86.5157C166.962 86.5157 167.438 86.2692 167.781 85.776C168.128 85.2828 168.302 84.6031 168.302 83.7368C168.302 82.8576 168.128 82.1843 167.781 81.7169C167.438 81.2451 166.953 81.0093 166.327 81.0093ZM174.258 87.4099C173.216 87.4099 172.393 87.0926 171.788 86.4579C171.188 85.8231 170.888 84.9419 170.888 83.814C170.888 82.6775 171.166 81.7748 171.724 81.1058C172.286 80.4367 173.038 80.1022 173.982 80.1022C174.865 80.1022 175.564 80.3939 176.079 80.9771C176.594 81.556 176.851 82.3216 176.851 83.2736V83.9491H171.994C172.016 84.7767 172.224 85.405 172.618 85.8339C173.017 86.2627 173.577 86.4771 174.297 86.4771C175.056 86.4771 175.807 86.3185 176.549 86.0011V86.9532C176.171 87.1161 175.813 87.2319 175.474 87.3005C175.14 87.3735 174.734 87.4099 174.258 87.4099ZM173.969 80.9964C173.403 80.9964 172.95 81.1808 172.612 81.5496C172.277 81.9184 172.08 82.4288 172.02 83.0806H175.706C175.706 82.4073 175.556 81.8927 175.256 81.5368C174.955 81.1765 174.527 80.9964 173.969 80.9964ZM183.014 87.2812L182.801 86.2777H182.75C182.398 86.7195 182.046 87.0196 181.695 87.1783C181.347 87.3327 180.912 87.4099 180.389 87.4099C179.69 87.4099 179.141 87.2298 178.742 86.8696C178.348 86.5093 178.15 85.9968 178.15 85.3321C178.15 83.9083 179.289 83.1621 181.566 83.0935L182.763 83.0549V82.6175C182.763 82.0642 182.643 81.6568 182.402 81.3952C182.167 81.1293 181.787 80.9964 181.264 80.9964C180.676 80.9964 180.012 81.1765 179.27 81.5368L178.942 80.7198C179.289 80.5311 179.668 80.3831 180.08 80.2759C180.496 80.1687 180.912 80.1151 181.328 80.1151C182.169 80.1151 182.791 80.3017 183.194 80.6748C183.601 81.0479 183.805 81.6461 183.805 82.4695V87.2812H183.014ZM180.601 86.5286C181.266 86.5286 181.787 86.3463 182.164 85.9818C182.546 85.6173 182.737 85.107 182.737 84.4508V83.814L181.669 83.859C180.82 83.889 180.207 84.022 179.829 84.2578C179.456 84.4894 179.27 84.8518 179.27 85.345C179.27 85.7309 179.385 86.0247 179.617 86.2263C179.853 86.4278 180.181 86.5286 180.601 86.5286ZM187.079 87.2812H186.011V77.2718H187.079V87.2812ZM192.322 87.4099C191.28 87.4099 190.456 87.0926 189.852 86.4579C189.251 85.8231 188.951 84.9419 188.951 83.814C188.951 82.6775 189.23 81.7748 189.787 81.1058C190.349 80.4367 191.102 80.1022 192.045 80.1022C192.929 80.1022 193.628 80.3939 194.142 80.9771C194.657 81.556 194.914 82.3216 194.914 83.2736V83.9491H190.057C190.079 84.7767 190.287 85.405 190.681 85.8339C191.08 86.2627 191.64 86.4771 192.36 86.4771C193.119 86.4771 193.87 86.3185 194.612 86.0011V86.9532C194.234 87.1161 193.876 87.2319 193.538 87.3005C193.203 87.3735 192.798 87.4099 192.322 87.4099ZM192.032 80.9964C191.466 80.9964 191.014 81.1808 190.675 81.5496C190.34 81.9184 190.143 82.4288 190.083 83.0806H193.769C193.769 82.4073 193.619 81.8927 193.319 81.5368C193.019 81.1765 192.59 80.9964 192.032 80.9964ZM201.54 86.3356H201.482C200.989 87.0518 200.251 87.4099 199.269 87.4099C198.347 87.4099 197.629 87.0947 197.114 86.4643C196.604 85.8339 196.349 84.9376 196.349 83.7754C196.349 82.6132 196.606 81.7104 197.121 81.0672C197.635 80.4239 198.351 80.1022 199.269 80.1022C200.226 80.1022 200.959 80.4496 201.469 81.1443H201.553L201.508 80.6362L201.482 80.1408V77.2718H202.55V87.2812H201.682L201.54 86.3356ZM199.404 86.5157C200.133 86.5157 200.661 86.3185 200.987 85.9239C201.317 85.5251 201.482 84.884 201.482 84.0005V83.7754C201.482 82.7761 201.315 82.0642 200.98 81.6397C200.65 81.2108 200.121 80.9964 199.391 80.9964C198.765 80.9964 198.285 81.2408 197.951 81.7297C197.62 82.2143 197.455 82.9005 197.455 83.7882C197.455 84.6888 197.62 85.3686 197.951 85.8274C198.281 86.2863 198.765 86.5157 199.404 86.5157ZM214 87.2812L212.707 83.145C212.626 82.8919 212.474 82.3173 212.251 81.421H212.199C212.028 82.1715 211.878 82.7504 211.749 83.1578L210.417 87.2812H209.182L207.259 80.2309H208.378C208.833 82.0021 209.178 83.3508 209.414 84.2771C209.654 85.2035 209.791 85.8274 209.825 86.1491H209.877C209.924 85.9046 209.999 85.5894 210.102 85.2035C210.209 84.8132 210.301 84.5044 210.379 84.2771L211.672 80.2309H212.83L214.09 84.2771C214.331 85.0148 214.494 85.6345 214.579 86.1362H214.631C214.648 85.9818 214.693 85.7438 214.766 85.4222C214.843 85.1005 215.291 83.3701 216.11 80.2309H217.217L215.268 87.2812H214ZM223.321 87.2812V82.7204C223.321 82.1457 223.191 81.7169 222.929 81.4338C222.667 81.1508 222.258 81.0093 221.7 81.0093C220.959 81.0093 220.416 81.2108 220.073 81.6139C219.734 82.0171 219.565 82.6775 219.565 83.5953V87.2812H218.497V77.2718H219.565V80.3017C219.565 80.6662 219.548 80.9685 219.513 81.2087H219.578C219.788 80.8699 220.086 80.604 220.472 80.411C220.862 80.2137 221.306 80.1151 221.803 80.1151C222.665 80.1151 223.311 80.321 223.74 80.7327C224.173 81.1401 224.389 81.7898 224.389 82.6818V87.2812H223.321ZM229.568 87.4099C228.526 87.4099 227.702 87.0926 227.098 86.4579C226.497 85.8231 226.197 84.9419 226.197 83.814C226.197 82.6775 226.476 81.7748 227.033 81.1058C227.595 80.4367 228.348 80.1022 229.291 80.1022C230.175 80.1022 230.874 80.3939 231.388 80.9771C231.903 81.556 232.16 82.3216 232.16 83.2736V83.9491H227.303C227.325 84.7767 227.533 85.405 227.927 85.8339C228.326 86.2627 228.886 86.4771 229.606 86.4771C230.365 86.4771 231.116 86.3185 231.858 86.0011V86.9532C231.48 87.1161 231.122 87.2319 230.784 87.3005C230.449 87.3735 230.044 87.4099 229.568 87.4099ZM229.278 80.9964C228.712 80.9964 228.26 81.1808 227.921 81.5496C227.586 81.9184 227.389 82.4288 227.329 83.0806H231.015C231.015 82.4073 230.865 81.8927 230.565 81.5368C230.265 81.1765 229.836 80.9964 229.278 80.9964ZM238.812 87.2812V82.7204C238.812 82.1457 238.681 81.7169 238.419 81.4338C238.158 81.1508 237.748 81.0093 237.191 81.0093C236.453 81.0093 235.913 81.2087 235.57 81.6075C235.226 82.0063 235.055 82.6646 235.055 83.5824V87.2812H233.987V80.2309H234.856L235.029 81.1958H235.081C235.299 80.8484 235.606 80.5804 236.001 80.3917C236.395 80.1987 236.835 80.1022 237.319 80.1022C238.168 80.1022 238.807 80.3081 239.236 80.7198C239.665 81.1272 239.88 81.7812 239.88 82.6818V87.2812H238.812ZM250.05 85.3578C250.05 86.014 249.805 86.52 249.316 86.876C248.828 87.2319 248.141 87.4099 247.258 87.4099C246.323 87.4099 245.594 87.262 245.071 86.966V85.9754C245.41 86.1469 245.772 86.282 246.158 86.3807C246.548 86.4793 246.923 86.5286 247.284 86.5286C247.841 86.5286 248.27 86.4407 248.57 86.2649C248.87 86.0847 249.021 85.8124 249.021 85.4479C249.021 85.1734 248.901 84.9397 248.66 84.7467C248.424 84.5495 247.961 84.3179 247.271 84.052C246.615 83.8075 246.147 83.5953 245.869 83.4151C245.594 83.2307 245.388 83.0227 245.251 82.7911C245.118 82.5596 245.052 82.283 245.052 81.9613C245.052 81.3867 245.285 80.9342 245.753 80.604C246.22 80.2695 246.861 80.1022 247.676 80.1022C248.435 80.1022 249.177 80.2566 249.902 80.5654L249.522 81.4338C248.815 81.1422 248.174 80.9964 247.599 80.9964C247.093 80.9964 246.711 81.0757 246.454 81.2344C246.197 81.3931 246.068 81.6118 246.068 81.8906C246.068 82.0793 246.115 82.2401 246.209 82.373C246.308 82.506 246.465 82.6325 246.679 82.7526C246.893 82.8726 247.305 83.0463 247.914 83.2736C248.75 83.5781 249.314 83.8847 249.606 84.1935C249.902 84.5023 250.05 84.8904 250.05 85.3578ZM254.07 86.5286C254.259 86.5286 254.441 86.5157 254.617 86.49C254.793 86.46 254.932 86.43 255.035 86.4V87.2169C254.919 87.2727 254.748 87.3177 254.521 87.352C254.298 87.3906 254.096 87.4099 253.916 87.4099C252.552 87.4099 251.87 86.6916 251.87 85.2549V81.0607H250.86V80.5461L251.87 80.1022L252.321 78.597H252.938V80.2309H254.984V81.0607H252.938V85.2099C252.938 85.6345 253.039 85.9604 253.24 86.1877C253.442 86.415 253.719 86.5286 254.07 86.5286ZM260.786 87.2812L260.574 86.2777H260.522C260.171 86.7195 259.819 87.0196 259.467 87.1783C259.12 87.3327 258.685 87.4099 258.162 87.4099C257.463 87.4099 256.914 87.2298 256.515 86.8696C256.12 86.5093 255.923 85.9968 255.923 85.3321C255.923 83.9083 257.062 83.1621 259.339 83.0935L260.535 83.0549V82.6175C260.535 82.0642 260.415 81.6568 260.175 81.3952C259.939 81.1293 259.56 80.9964 259.036 80.9964C258.449 80.9964 257.784 81.1765 257.042 81.5368L256.714 80.7198C257.062 80.5311 257.441 80.3831 257.853 80.2759C258.269 80.1687 258.685 80.1151 259.101 80.1151C259.941 80.1151 260.563 80.3017 260.966 80.6748C261.374 81.0479 261.577 81.6461 261.577 82.4695V87.2812H260.786ZM258.374 86.5286C259.039 86.5286 259.56 86.3463 259.937 85.9818C260.319 85.6173 260.51 85.107 260.51 84.4508V83.814L259.442 83.859C258.593 83.889 257.979 84.022 257.602 84.2578C257.229 84.4894 257.042 84.8518 257.042 85.345C257.042 85.7309 257.158 86.0247 257.39 86.2263C257.626 86.4278 257.954 86.5286 258.374 86.5286ZM269.554 80.2309V80.9063L268.248 81.0607C268.368 81.2108 268.476 81.4081 268.57 81.6525C268.664 81.8927 268.711 82.165 268.711 82.4695C268.711 83.16 268.476 83.711 268.004 84.1227C267.532 84.5344 266.884 84.7403 266.061 84.7403C265.851 84.7403 265.654 84.7231 265.469 84.6888C265.015 84.929 264.787 85.2313 264.787 85.5959C264.787 85.7888 264.867 85.9325 265.025 86.0269C265.184 86.1169 265.456 86.1619 265.842 86.1619H267.09C267.854 86.1619 268.439 86.3228 268.846 86.6444C269.258 86.966 269.464 87.4335 269.464 88.0468C269.464 88.8273 269.151 89.4212 268.525 89.8286C267.899 90.2403 266.985 90.4462 265.784 90.4462C264.862 90.4462 264.151 90.2747 263.649 89.9316C263.151 89.5885 262.903 89.1039 262.903 88.4778C262.903 88.0489 263.04 87.6779 263.314 87.3649C263.589 87.0518 263.975 86.8395 264.472 86.728C264.292 86.6465 264.14 86.52 264.015 86.3485C263.895 86.177 263.835 85.9775 263.835 85.7502C263.835 85.4929 263.904 85.2678 264.041 85.0748C264.178 84.8818 264.395 84.6953 264.691 84.5151C264.326 84.365 264.028 84.1099 263.797 83.7496C263.569 83.3894 263.456 82.9777 263.456 82.5145C263.456 81.7426 263.687 81.1486 264.151 80.7327C264.614 80.3124 265.27 80.1022 266.119 80.1022C266.488 80.1022 266.82 80.1451 267.116 80.2309H269.554ZM263.932 88.4649C263.932 88.8466 264.093 89.136 264.414 89.3333C264.736 89.5306 265.197 89.6292 265.797 89.6292C266.694 89.6292 267.356 89.4941 267.785 89.224C268.218 88.9581 268.435 88.5957 268.435 88.1368C268.435 87.7551 268.317 87.4892 268.081 87.3391C267.845 87.1933 267.401 87.1204 266.749 87.1204H265.469C264.985 87.1204 264.607 87.2362 264.337 87.4678C264.067 87.6994 263.932 88.0317 263.932 88.4649ZM264.511 82.4888C264.511 82.982 264.65 83.3551 264.929 83.6081C265.208 83.8611 265.596 83.9877 266.093 83.9877C267.135 83.9877 267.656 83.4816 267.656 82.4695C267.656 81.4102 267.129 80.8806 266.074 80.8806C265.572 80.8806 265.186 81.0157 264.916 81.2859C264.646 81.556 264.511 81.957 264.511 82.4888ZM273.98 87.4099C272.938 87.4099 272.114 87.0926 271.51 86.4579C270.909 85.8231 270.609 84.9419 270.609 83.814C270.609 82.6775 270.888 81.7748 271.445 81.1058C272.007 80.4367 272.76 80.1022 273.703 80.1022C274.587 80.1022 275.286 80.3939 275.8 80.9771C276.315 81.556 276.572 82.3216 276.572 83.2736V83.9491H271.716C271.737 84.7767 271.945 85.405 272.34 85.8339C272.738 86.2627 273.298 86.4771 274.018 86.4771C274.778 86.4771 275.528 86.3185 276.27 86.0011V86.9532C275.893 87.1161 275.534 87.2319 275.196 87.3005C274.861 87.3735 274.456 87.4099 273.98 87.4099ZM273.69 80.9964C273.124 80.9964 272.672 81.1808 272.333 81.5496C271.999 81.9184 271.801 82.4288 271.741 83.0806H275.427C275.427 82.4073 275.277 81.8927 274.977 81.5368C274.677 81.1765 274.248 80.9964 273.69 80.9964ZM282.947 85.3578C282.947 86.014 282.703 86.52 282.214 86.876C281.725 87.2319 281.039 87.4099 280.155 87.4099C279.22 87.4099 278.491 87.262 277.968 86.966V85.9754C278.307 86.1469 278.669 86.282 279.055 86.3807C279.446 86.4793 279.821 86.5286 280.181 86.5286C280.739 86.5286 281.167 86.4407 281.468 86.2649C281.768 86.0847 281.918 85.8124 281.918 85.4479C281.918 85.1734 281.798 84.9397 281.558 84.7467C281.322 84.5495 280.859 84.3179 280.168 84.052C279.512 83.8075 279.045 83.5953 278.766 83.4151C278.491 83.2307 278.286 83.0227 278.148 82.7911C278.015 82.5596 277.949 82.283 277.949 81.9613C277.949 81.3867 278.183 80.9342 278.65 80.604C279.118 80.2695 279.759 80.1022 280.574 80.1022C281.333 80.1022 282.074 80.2566 282.799 80.5654L282.42 81.4338C281.712 81.1422 281.071 80.9964 280.496 80.9964C279.99 80.9964 279.609 81.0757 279.351 81.2344C279.094 81.3931 278.965 81.6118 278.965 81.8906C278.965 82.0793 279.012 82.2401 279.107 82.373C279.205 82.506 279.362 82.6325 279.576 82.7526C279.791 82.8726 280.203 83.0463 280.812 83.2736C281.648 83.5781 282.212 83.8847 282.503 84.1935C282.799 84.5023 282.947 84.8904 282.947 85.3578ZM291.58 87.2812H290.538V80.5783C290.538 80.0208 290.555 79.4933 290.589 78.9958C290.499 79.0859 290.399 79.1802 290.287 79.2788C290.176 79.3775 289.665 79.7956 288.756 80.5332L288.19 79.7999L290.679 77.8765H291.58V87.2812ZM303.41 87.2812L303.198 86.2777H303.146C302.795 86.7195 302.443 87.0196 302.091 87.1783C301.744 87.3327 301.309 87.4099 300.785 87.4099C300.086 87.4099 299.537 87.2298 299.139 86.8696C298.744 86.5093 298.547 85.9968 298.547 85.3321C298.547 83.9083 299.685 83.1621 301.963 83.0935L303.159 83.0549V82.6175C303.159 82.0642 303.039 81.6568 302.799 81.3952C302.563 81.1293 302.183 80.9964 301.66 80.9964C301.073 80.9964 300.408 81.1765 299.666 81.5368L299.338 80.7198C299.685 80.5311 300.065 80.3831 300.477 80.2759C300.893 80.1687 301.309 80.1151 301.725 80.1151C302.565 80.1151 303.187 80.3017 303.59 80.6748C303.997 81.0479 304.201 81.6461 304.201 82.4695V87.2812H303.41ZM300.998 86.5286C301.662 86.5286 302.183 86.3463 302.561 85.9818C302.943 85.6173 303.133 85.107 303.133 84.4508V83.814L302.066 83.859C301.216 83.889 300.603 84.022 300.226 84.2578C299.853 84.4894 299.666 84.8518 299.666 85.345C299.666 85.7309 299.782 86.0247 300.013 86.2263C300.249 86.4278 300.577 86.5286 300.998 86.5286ZM311.232 87.2812V82.7204C311.232 82.1457 311.101 81.7169 310.84 81.4338C310.578 81.1508 310.169 81.0093 309.611 81.0093C308.874 81.0093 308.333 81.2087 307.99 81.6075C307.647 82.0063 307.476 82.6646 307.476 83.5824V87.2812H306.408V80.2309H307.276L307.45 81.1958H307.501C307.72 80.8484 308.027 80.5804 308.421 80.3917C308.816 80.1987 309.255 80.1022 309.74 80.1022C310.589 80.1022 311.228 80.3081 311.657 80.7198C312.086 81.1272 312.3 81.7812 312.3 82.6818V87.2812H311.232ZM319.299 86.3356H319.241C318.748 87.0518 318.01 87.4099 317.028 87.4099C316.106 87.4099 315.388 87.0947 314.873 86.4643C314.363 85.8339 314.108 84.9376 314.108 83.7754C314.108 82.6132 314.365 81.7104 314.88 81.0672C315.394 80.4239 316.111 80.1022 317.028 80.1022C317.985 80.1022 318.718 80.4496 319.228 81.1443H319.312L319.267 80.6362L319.241 80.1408V77.2718H320.309V87.2812H319.441L319.299 86.3356ZM317.163 86.5157C317.892 86.5157 318.42 86.3185 318.746 85.9239C319.076 85.5251 319.241 84.884 319.241 84.0005V83.7754C319.241 82.7761 319.074 82.0642 318.739 81.6397C318.409 81.2108 317.88 80.9964 317.15 80.9964C316.524 80.9964 316.044 81.2408 315.71 81.7297C315.379 82.2143 315.214 82.9005 315.214 83.7882C315.214 84.6888 315.379 85.3686 315.71 85.8274C316.04 86.2863 316.524 86.5157 317.163 86.5157ZM331.695 87.2812H325.513V86.3614L327.99 83.8719C328.745 83.1085 329.242 82.5639 329.482 82.2379C329.722 81.912 329.902 81.5946 330.023 81.2859C330.143 80.9771 330.203 80.6447 330.203 80.2888C330.203 79.787 330.05 79.3903 329.746 79.0987C329.441 78.8028 329.019 78.6549 328.479 78.6549C328.088 78.6549 327.717 78.7192 327.366 78.8478C327.018 78.9765 326.63 79.2102 326.201 79.549L325.635 78.8221C326.502 78.1016 327.445 77.7414 328.466 77.7414C329.349 77.7414 330.042 77.9687 330.544 78.4233C331.045 78.8736 331.296 79.4804 331.296 80.2438C331.296 80.8399 331.129 81.4295 330.794 82.0128C330.46 82.596 329.834 83.3336 328.916 84.2257L326.858 86.2391V86.2906H331.695V87.2812ZM31.8168 105.281L31.6045 104.278H31.553C31.2014 104.719 30.8497 105.02 30.498 105.178C30.1507 105.333 29.7154 105.41 29.1922 105.41C28.4931 105.41 27.9442 105.23 27.5454 104.87C27.1508 104.509 26.9536 103.997 26.9536 103.332C26.9536 101.908 28.0922 101.162 30.3694 101.093L31.5659 101.055V100.617C31.5659 100.064 31.4458 99.6568 31.2056 99.3952C30.9698 99.1293 30.5902 98.9964 30.067 98.9964C29.4795 98.9964 28.8148 99.1765 28.0729 99.5368L27.7448 98.7198C28.0922 98.5311 28.4717 98.3831 28.8834 98.2759C29.2994 98.1687 29.7154 98.1151 30.1314 98.1151C30.9719 98.1151 31.5938 98.3017 31.9969 98.6748C32.4043 99.0479 32.608 99.6461 32.608 100.47V105.281H31.8168ZM29.4045 104.529C30.0692 104.529 30.5902 104.346 30.9676 103.982C31.3493 103.617 31.5402 103.107 31.5402 102.451V101.814L30.4723 101.859C29.6232 101.889 29.0099 102.022 28.6325 102.258C28.2594 102.489 28.0729 102.852 28.0729 103.345C28.0729 103.731 28.1887 104.025 28.4202 104.226C28.6561 104.428 28.9842 104.529 29.4045 104.529ZM38.0309 98.1022C38.3439 98.1022 38.6248 98.128 38.8736 98.1794L38.7256 99.1701C38.434 99.1058 38.1767 99.0736 37.9537 99.0736C37.3833 99.0736 36.8944 99.3052 36.487 99.7683C36.0839 100.231 35.8823 100.808 35.8823 101.499V105.281H34.8145V98.2309H35.6957L35.818 99.5368H35.8694C36.131 99.0779 36.4462 98.7241 36.8151 98.4753C37.1839 98.2266 37.5891 98.1022 38.0309 98.1022ZM43.1707 105.41C42.1286 105.41 41.3052 105.093 40.7005 104.458C40.1001 103.823 39.7999 102.942 39.7999 101.814C39.7999 100.678 40.0786 99.7748 40.6361 99.1058C41.1979 98.4367 41.9506 98.1022 42.8941 98.1022C43.7775 98.1022 44.4765 98.3939 44.9912 98.9771C45.5058 99.556 45.7631 100.322 45.7631 101.274V101.949H40.9063C40.9278 102.777 41.1358 103.405 41.5303 103.834C41.9291 104.263 42.4888 104.477 43.2093 104.477C43.9683 104.477 44.7188 104.318 45.4608 104.001V104.953C45.0834 105.116 44.7253 105.232 44.3865 105.301C44.052 105.373 43.6467 105.41 43.1707 105.41ZM42.8812 98.9964C42.3151 98.9964 41.8627 99.1808 41.5239 99.5496C41.1894 99.9184 40.9921 100.429 40.9321 101.081H44.6181C44.6181 100.407 44.468 99.8927 44.1678 99.5368C43.8676 99.1765 43.4387 98.9964 42.8812 98.9964ZM54.1901 99.0607H52.3953V105.281H51.3275V99.0607H50.0666V98.5783L51.3275 98.1923V97.7999C51.3275 96.0673 52.0844 95.201 53.5983 95.201C53.9714 95.201 54.4088 95.2761 54.9105 95.4262L54.6339 96.2817C54.2222 96.1488 53.8706 96.0823 53.579 96.0823C53.1758 96.0823 52.8778 96.2174 52.6848 96.4876C52.4918 96.7535 52.3953 97.1823 52.3953 97.7742V98.2309H54.1901V99.0607ZM56.4802 98.2309V102.805C56.4802 103.379 56.611 103.808 56.8726 104.091C57.1342 104.374 57.5437 104.516 58.1012 104.516C58.8389 104.516 59.3771 104.314 59.7159 103.911C60.0589 103.508 60.2305 102.85 60.2305 101.936V98.2309H61.2983V105.281H60.417L60.2626 104.336H60.2048C59.986 104.683 59.6816 104.949 59.2913 105.133C58.9053 105.318 58.4636 105.41 57.9661 105.41C57.1084 105.41 56.4651 105.206 56.0363 104.799C55.6117 104.391 55.3994 103.74 55.3994 102.843V98.2309H56.4802ZM64.637 105.281H63.5691V95.2718H64.637V105.281ZM67.9692 105.281H66.9013V95.2718H67.9692V105.281ZM69.1142 98.2309H70.2592L71.8031 102.251C72.1419 103.169 72.352 103.832 72.4335 104.239H72.485C72.5407 104.02 72.6565 103.647 72.8324 103.12C73.0125 102.588 73.5957 100.958 74.5821 98.2309H75.7271L72.6973 106.259C72.3971 107.052 72.0454 107.614 71.6423 107.944C71.2435 108.279 70.7524 108.446 70.1692 108.446C69.8432 108.446 69.5216 108.41 69.2043 108.337V107.481C69.4401 107.533 69.7039 107.558 69.9955 107.558C70.7288 107.558 71.252 107.147 71.5651 106.323L71.9575 105.32L69.1142 98.2309ZM83.4722 99.0607H81.6775V105.281H80.6096V99.0607H79.3488V98.5783L80.6096 98.1923V97.7999C80.6096 96.0673 81.3666 95.201 82.8804 95.201C83.2535 95.201 83.6909 95.2761 84.1927 95.4262L83.9161 96.2817C83.5044 96.1488 83.1527 96.0823 82.8611 96.0823C82.458 96.0823 82.1599 96.2174 81.9669 96.4876C81.774 96.7535 81.6775 97.1823 81.6775 97.7742V98.2309H83.4722V99.0607ZM85.7623 98.2309V102.805C85.7623 103.379 85.8931 103.808 86.1547 104.091C86.4163 104.374 86.8259 104.516 87.3834 104.516C88.121 104.516 88.6592 104.314 88.998 103.911C89.3411 103.508 89.5126 102.85 89.5126 101.936V98.2309H90.5805V105.281H89.6992L89.5448 104.336H89.4869C89.2682 104.683 88.9637 104.949 88.5734 105.133C88.1875 105.318 87.7458 105.41 87.2483 105.41C86.3906 105.41 85.7473 105.206 85.3184 104.799C84.8939 104.391 84.6816 103.74 84.6816 102.843V98.2309H85.7623ZM97.6759 105.281V100.72C97.6759 100.146 97.5451 99.7169 97.2835 99.4338C97.0219 99.1508 96.6123 99.0093 96.0548 99.0093C95.3172 99.0093 94.7768 99.2087 94.4337 99.6075C94.0906 100.006 93.9191 100.665 93.9191 101.582V105.281H92.8513V98.2309H93.7197L93.8934 99.1958H93.9448C94.1636 98.8484 94.4702 98.5804 94.8647 98.3917C95.2593 98.1987 95.6989 98.1022 96.1835 98.1022C97.0326 98.1022 97.6716 98.3081 98.1004 98.7198C98.5293 99.1272 98.7437 99.7812 98.7437 100.682V105.281H97.6759ZM105.743 104.336H105.685C105.192 105.052 104.454 105.41 103.472 105.41C102.55 105.41 101.831 105.095 101.317 104.464C100.807 103.834 100.551 102.938 100.551 101.775C100.551 100.613 100.809 99.7104 101.323 99.0672C101.838 98.4239 102.554 98.1022 103.472 98.1022C104.428 98.1022 105.162 98.4496 105.672 99.1443H105.755L105.71 98.6362L105.685 98.1408V95.2718H106.753V105.281H105.884L105.743 104.336ZM103.607 104.516C104.336 104.516 104.863 104.318 105.189 103.924C105.52 103.525 105.685 102.884 105.685 102.001V101.775C105.685 100.776 105.517 100.064 105.183 99.6397C104.853 99.2108 104.323 98.9964 103.594 98.9964C102.968 98.9964 102.488 99.2408 102.153 99.7297C101.823 100.214 101.658 100.901 101.658 101.788C101.658 102.689 101.823 103.369 102.153 103.827C102.483 104.286 102.968 104.516 103.607 104.516ZM112.002 105.41C110.96 105.41 110.136 105.093 109.532 104.458C108.931 103.823 108.631 102.942 108.631 101.814C108.631 100.678 108.91 99.7748 109.467 99.1058C110.029 98.4367 110.782 98.1022 111.725 98.1022C112.609 98.1022 113.308 98.3939 113.822 98.9771C114.337 99.556 114.594 100.322 114.594 101.274V101.949H109.737C109.759 102.777 109.967 103.405 110.361 103.834C110.76 104.263 111.32 104.477 112.04 104.477C112.799 104.477 113.55 104.318 114.292 104.001V104.953C113.914 105.116 113.556 105.232 113.218 105.301C112.883 105.373 112.478 105.41 112.002 105.41ZM111.712 98.9964C111.146 98.9964 110.694 99.1808 110.355 99.5496C110.02 99.9184 109.823 100.429 109.763 101.081H113.449C113.449 100.407 113.299 99.8927 112.999 99.5368C112.699 99.1765 112.27 98.9964 111.712 98.9964ZM121.22 104.336H121.162C120.669 105.052 119.931 105.41 118.949 105.41C118.027 105.41 117.309 105.095 116.794 104.464C116.284 103.834 116.029 102.938 116.029 101.775C116.029 100.613 116.286 99.7104 116.801 99.0672C117.315 98.4239 118.031 98.1022 118.949 98.1022C119.906 98.1022 120.639 98.4496 121.149 99.1443H121.233L121.188 98.6362L121.162 98.1408V95.2718H122.23V105.281H121.361L121.22 104.336ZM119.084 104.516C119.813 104.516 120.341 104.318 120.667 103.924C120.997 103.525 121.162 102.884 121.162 102.001V101.775C121.162 100.776 120.995 100.064 120.66 99.6397C120.33 99.2108 119.8 98.9964 119.071 98.9964C118.445 98.9964 117.965 99.2408 117.63 99.7297C117.3 100.214 117.135 100.901 117.135 101.788C117.135 102.689 117.3 103.369 117.63 103.827C117.961 104.286 118.445 104.516 119.084 104.516ZM124.346 104.599C124.346 104.312 124.411 104.095 124.539 103.95C124.672 103.8 124.861 103.725 125.105 103.725C125.354 103.725 125.547 103.8 125.684 103.95C125.826 104.095 125.897 104.312 125.897 104.599C125.897 104.878 125.826 105.093 125.684 105.243C125.543 105.393 125.35 105.468 125.105 105.468C124.887 105.468 124.704 105.401 124.559 105.268C124.417 105.131 124.346 104.908 124.346 104.599Z" class="path-5"/> -</svg> diff --git a/web/src/assets/svgs/mini-guides/appeal/payoff-simulator.svg b/web/src/assets/svgs/mini-guides/appeal/payoff-simulator.svg deleted file mode 100644 index c01b0acf7..000000000 --- a/web/src/assets/svgs/mini-guides/appeal/payoff-simulator.svg +++ /dev/null @@ -1,45 +0,0 @@ -<svg viewBox="0 0 332 346" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M0.364835 2.18903C0.364835 1.18156 1.18155 0.364835 2.18901 0.364835H329.811C330.818 0.364835 331.635 1.18155 331.635 2.18901V343.675C331.635 344.682 330.818 345.499 329.811 345.499H2.18903C1.18156 345.499 0.364835 344.682 0.364835 343.675V2.18903Z" class="path-1" stroke-width="0.72967"/> -<circle cx="191.174" cy="313.032" r="17.5121" class="circle-1" /> -<g clip-path="url(#clip0_13917_211177)"> -<path d="M187.827 309.727C188.814 308.73 188.814 307.112 187.827 306.115C186.84 305.118 185.239 305.118 184.252 306.115C183.265 307.112 183.265 308.73 184.252 309.727C185.24 310.724 186.84 310.724 187.827 309.727ZM197.937 316.331C196.95 315.333 195.349 315.333 194.363 316.331C193.376 317.328 193.376 318.945 194.363 319.942C195.349 320.94 196.95 320.94 197.937 319.942C198.924 318.945 198.924 317.328 197.937 316.331ZM197.86 307.096L196.967 306.193C196.473 305.694 195.673 305.694 195.18 306.193L184.329 317.157C183.836 317.655 183.836 318.464 184.329 318.962L185.223 319.865C185.716 320.364 186.517 320.364 187.01 319.865L197.86 308.901C198.354 308.403 198.354 307.594 197.86 307.096Z" class="path-2"/> -</g> -<circle cx="36.4835" cy="313.032" r="17.5121" class="circle-2"/> -<g clip-path="url(#clip1_13917_211177)"> -<path d="M40.6183 313.172L36.1434 315.95L31.6655 313.172L36.1434 305.367L40.6183 313.172ZM36.1434 316.842L31.6655 314.064L36.1434 320.69L40.6212 314.064L36.1434 316.842Z" class="path-3"/> -</g> -<path d="M71.8327 313.106C71.8327 314.554 71.599 315.63 71.1315 316.333C70.6679 317.036 69.9572 317.387 68.9995 317.387C68.0722 317.387 67.3692 317.025 66.8903 316.299C66.4115 315.573 66.1721 314.509 66.1721 313.106C66.1721 311.636 66.4039 310.552 66.8675 309.857C67.335 309.158 68.0456 308.808 68.9995 308.808C69.9306 308.808 70.6356 309.173 71.1144 309.903C71.5933 310.632 71.8327 311.7 71.8327 313.106ZM67.5288 313.106C67.5288 314.243 67.6447 315.054 67.8765 315.54C68.1121 316.027 68.4865 316.27 68.9995 316.27C69.5126 316.27 69.8869 316.023 70.1225 315.529C70.362 315.035 70.4817 314.227 70.4817 313.106C70.4817 311.989 70.362 311.181 70.1225 310.684C69.8869 310.182 69.5126 309.931 68.9995 309.931C68.4865 309.931 68.1121 310.176 67.8765 310.667C67.6447 311.157 67.5288 311.97 67.5288 313.106ZM73.0982 316.561C73.0982 316.283 73.1704 316.071 73.3148 315.922C73.4593 315.774 73.6683 315.7 73.9419 315.7C74.2193 315.7 74.4303 315.778 74.5747 315.934C74.7191 316.086 74.7913 316.295 74.7913 316.561C74.7913 316.831 74.7172 317.045 74.569 317.205C74.4246 317.361 74.2155 317.439 73.9419 317.439C73.6683 317.439 73.4593 317.361 73.3148 317.205C73.1704 317.049 73.0982 316.834 73.0982 316.561ZM81.7175 313.106C81.7175 314.554 81.4837 315.63 81.0163 316.333C80.5526 317.036 79.842 317.387 78.8843 317.387C77.957 317.387 77.2539 317.025 76.7751 316.299C76.2962 315.573 76.0568 314.509 76.0568 313.106C76.0568 311.636 76.2886 310.552 76.7523 309.857C77.2197 309.158 77.9304 308.808 78.8843 308.808C79.8154 308.808 80.5203 309.173 80.9992 309.903C81.478 310.632 81.7175 311.7 81.7175 313.106ZM77.4135 313.106C77.4135 314.243 77.5295 315.054 77.7613 315.54C77.9969 316.027 78.3712 316.27 78.8843 316.27C79.3973 316.27 79.7717 316.023 80.0073 315.529C80.2467 315.035 80.3664 314.227 80.3664 313.106C80.3664 311.989 80.2467 311.181 80.0073 310.684C79.7717 310.182 79.3973 309.931 78.8843 309.931C78.3712 309.931 77.9969 310.176 77.7613 310.667C77.5295 311.157 77.4135 311.97 77.4135 313.106ZM86.6712 317.273H85.3316V311.892C85.3316 311.25 85.3468 310.741 85.3772 310.364C85.2898 310.456 85.1815 310.556 85.0523 310.667C84.9269 310.777 84.5012 311.126 83.7754 311.715L83.1027 310.866L85.5539 308.939H86.6712V317.273ZM89.4303 313.722C89.4303 310.461 90.7585 308.831 93.415 308.831C93.833 308.831 94.1865 308.863 94.4753 308.928V310.045C94.1865 309.962 93.852 309.92 93.472 309.92C92.5789 309.92 91.9081 310.159 91.4597 310.638C91.0113 311.117 90.768 311.885 90.73 312.941H90.7984C90.9771 312.633 91.2279 312.396 91.5509 312.228C91.8739 312.057 92.254 311.972 92.691 311.972C93.4473 311.972 94.0363 312.204 94.4582 312.667C94.88 313.131 95.0909 313.76 95.0909 314.554C95.0909 315.428 94.8458 316.12 94.3556 316.629C93.8691 317.135 93.2041 317.387 92.3604 317.387C91.7637 317.387 91.245 317.245 90.8041 316.96C90.3633 316.671 90.0232 316.253 89.7837 315.706C89.5481 315.155 89.4303 314.493 89.4303 313.722ZM92.3376 316.282C92.7974 316.282 93.1509 316.133 93.3979 315.837C93.6487 315.54 93.7741 315.117 93.7741 314.566C93.7741 314.087 93.6563 313.711 93.4207 313.437C93.1889 313.163 92.8392 313.027 92.3718 313.027C92.083 313.027 91.8169 313.089 91.5737 313.215C91.3305 313.336 91.1386 313.505 90.998 313.722C90.8573 313.935 90.787 314.153 90.787 314.378C90.787 314.913 90.9314 315.366 91.2203 315.734C91.5129 316.099 91.8853 316.282 92.3376 316.282ZM104.411 317.273H99.697V308.939H104.411V310.091H101.059V312.36H104.2V313.5H101.059V316.116H104.411V317.273ZM109.097 317.273H107.735V310.108H105.284V308.939H111.548V310.108H109.097V317.273ZM119.404 317.273H118.036V313.517H114.193V317.273H112.831V308.939H114.193V312.348H118.036V308.939H119.404V317.273Z" class="path-4"/> -<path d="M224.807 317.273H223.467V311.892C223.467 311.25 223.483 310.741 223.513 310.364C223.426 310.456 223.317 310.556 223.188 310.667C223.063 310.777 222.637 311.126 221.911 311.715L221.238 310.866L223.69 308.939H224.807V317.273ZM233.193 313.106C233.193 314.554 232.959 315.63 232.491 316.333C232.028 317.036 231.317 317.387 230.359 317.387C229.432 317.387 228.729 317.025 228.25 316.299C227.771 315.573 227.532 314.509 227.532 313.106C227.532 311.636 227.764 310.552 228.227 309.857C228.695 309.158 229.405 308.808 230.359 308.808C231.29 308.808 231.995 309.173 232.474 309.903C232.953 310.632 233.193 311.7 233.193 313.106ZM228.889 313.106C228.889 314.243 229.005 315.054 229.236 315.54C229.472 316.027 229.846 316.27 230.359 316.27C230.872 316.27 231.247 316.023 231.482 315.529C231.722 315.035 231.842 314.227 231.842 313.106C231.842 311.989 231.722 311.181 231.482 310.684C231.247 310.182 230.872 309.931 230.359 309.931C229.846 309.931 229.472 310.176 229.236 310.667C229.005 311.157 228.889 311.97 228.889 313.106ZM239.862 313.106C239.862 314.554 239.628 315.63 239.161 316.333C238.697 317.036 237.987 317.387 237.029 317.387C236.102 317.387 235.399 317.025 234.92 316.299C234.441 315.573 234.202 314.509 234.202 313.106C234.202 311.636 234.433 310.552 234.897 309.857C235.364 309.158 236.075 308.808 237.029 308.808C237.96 308.808 238.665 309.173 239.144 309.903C239.623 310.632 239.862 311.7 239.862 313.106ZM235.558 313.106C235.558 314.243 235.674 315.054 235.906 315.54C236.142 316.027 236.516 316.27 237.029 316.27C237.542 316.27 237.916 316.023 238.152 315.529C238.391 315.035 238.511 314.227 238.511 313.106C238.511 311.989 238.391 311.181 238.152 310.684C237.916 310.182 237.542 309.931 237.029 309.931C236.516 309.931 236.142 310.176 235.906 310.667C235.674 311.157 235.558 311.97 235.558 313.106ZM241.96 311.436C241.96 312.002 242.015 312.424 242.125 312.702C242.236 312.979 242.416 313.118 242.667 313.118C243.168 313.118 243.419 312.557 243.419 311.436C243.419 310.315 243.168 309.754 242.667 309.754C242.416 309.754 242.236 309.893 242.125 310.171C242.015 310.448 241.96 310.87 241.96 311.436ZM244.525 311.425C244.525 312.299 244.368 312.956 244.052 313.397C243.74 313.834 243.279 314.053 242.667 314.053C242.089 314.053 241.641 313.827 241.322 313.374C241.006 312.918 240.848 312.268 240.848 311.425C240.848 309.688 241.455 308.82 242.667 308.82C243.264 308.82 243.721 309.046 244.041 309.498C244.364 309.946 244.525 310.589 244.525 311.425ZM247.387 314.765C247.387 315.331 247.442 315.755 247.552 316.036C247.666 316.318 247.849 316.458 248.099 316.458C248.597 316.458 248.846 315.894 248.846 314.765C248.846 313.652 248.597 313.095 248.099 313.095C247.849 313.095 247.666 313.232 247.552 313.505C247.442 313.779 247.387 314.199 247.387 314.765ZM249.952 314.765C249.952 315.639 249.794 316.295 249.479 316.732C249.164 317.169 248.704 317.387 248.099 317.387C247.522 317.387 247.073 317.163 246.754 316.715C246.435 316.263 246.275 315.613 246.275 314.765C246.275 313.028 246.883 312.16 248.099 312.16C248.685 312.16 249.139 312.384 249.462 312.833C249.789 313.281 249.952 313.925 249.952 314.765ZM248.259 308.939L243.636 317.273H242.53L247.153 308.939H248.259ZM255.932 312.816H256.878C257.513 312.816 257.973 312.698 258.258 312.462C258.543 312.227 258.685 311.877 258.685 311.413C258.685 310.942 258.531 310.604 258.224 310.399C257.916 310.193 257.452 310.091 256.833 310.091H255.932V312.816ZM255.932 313.944V317.273H254.57V308.939H256.924C257.999 308.939 258.796 309.141 259.312 309.543C259.829 309.946 260.088 310.554 260.088 311.368C260.088 312.405 259.548 313.144 258.469 313.585L260.823 317.273H259.273L257.277 313.944H255.932ZM269.437 313.095C269.437 314.452 269.096 315.506 268.416 316.259C267.74 317.011 266.78 317.387 265.537 317.387C264.28 317.387 263.312 317.015 262.636 316.27C261.963 315.521 261.627 314.459 261.627 313.084C261.627 311.708 261.965 310.651 262.642 309.914C263.322 309.177 264.291 308.808 265.549 308.808C266.788 308.808 267.745 309.182 268.422 309.931C269.098 310.68 269.437 311.734 269.437 313.095ZM263.075 313.095C263.075 314.121 263.282 314.9 263.696 315.432C264.11 315.96 264.724 316.225 265.537 316.225C266.347 316.225 266.957 315.962 267.367 315.438C267.782 314.913 267.989 314.132 267.989 313.095C267.989 312.073 267.783 311.297 267.373 310.769C266.966 310.241 266.358 309.977 265.549 309.977C264.732 309.977 264.114 310.241 263.696 310.769C263.282 311.297 263.075 312.073 263.075 313.095ZM271.227 317.273V308.939H272.589V317.273H271.227Z" class="path-5"/> -<path d="M20.822 269.92V272.953H19.974V265.661H21.9742C22.8687 265.661 23.5288 265.832 23.9544 266.174C24.3834 266.517 24.5979 267.032 24.5979 267.721C24.5979 268.685 24.1091 269.337 23.1314 269.676L25.1116 272.953H24.1091L22.3433 269.92H20.822ZM20.822 269.192H21.9842C22.5827 269.192 23.0217 269.074 23.301 268.838C23.5803 268.599 23.72 268.241 23.72 267.766C23.72 267.283 23.577 266.936 23.291 266.723C23.0084 266.51 22.5528 266.404 21.9243 266.404H20.822V269.192ZM28.4735 273.053C27.6655 273.053 27.027 272.807 26.5582 272.315C26.0926 271.823 25.8598 271.139 25.8598 270.265C25.8598 269.383 26.076 268.683 26.5083 268.165C26.9439 267.646 27.5275 267.387 28.2591 267.387C28.9441 267.387 29.4861 267.613 29.8851 268.065C30.2842 268.514 30.4837 269.107 30.4837 269.846V270.369H26.7178C26.7344 271.011 26.8957 271.498 27.2016 271.831C27.5109 272.163 27.9448 272.33 28.5035 272.33C29.092 272.33 29.674 272.207 30.2493 271.961V272.699C29.9566 272.825 29.679 272.915 29.4163 272.968C29.1569 273.025 28.8426 273.053 28.4735 273.053ZM28.2491 268.08C27.8101 268.08 27.4593 268.223 27.1966 268.509C26.9372 268.795 26.7843 269.191 26.7377 269.696H29.5958C29.5958 269.174 29.4794 268.775 29.2467 268.499C29.0139 268.22 28.6814 268.08 28.2491 268.08ZM33.666 272.37C33.8123 272.37 33.9537 272.36 34.09 272.34C34.2263 272.316 34.3344 272.293 34.4142 272.27V272.903C34.3244 272.946 34.1914 272.981 34.0152 273.008C33.8423 273.038 33.686 273.053 33.5463 273.053C32.4889 273.053 31.9601 272.496 31.9601 271.382V268.13H31.177V267.731L31.9601 267.387L32.3093 266.219H32.7881V267.486H34.3743V268.13H32.7881V271.347C32.7881 271.676 32.8663 271.929 33.0226 272.105C33.1789 272.281 33.3934 272.37 33.666 272.37ZM36.2897 267.486V271.033C36.2897 271.478 36.3911 271.811 36.594 272.03C36.7968 272.25 37.1144 272.36 37.5467 272.36C38.1186 272.36 38.536 272.203 38.7987 271.891C39.0647 271.578 39.1977 271.068 39.1977 270.359V267.486H40.0257V272.953H39.3423L39.2226 272.22H39.1777C39.0082 272.489 38.7721 272.695 38.4695 272.838C38.1702 272.981 37.8277 273.053 37.4419 273.053C36.7769 273.053 36.2781 272.895 35.9455 272.579C35.6163 272.263 35.4517 271.758 35.4517 271.063V267.486H36.2897ZM44.2805 267.387C44.5232 267.387 44.741 267.406 44.9339 267.446L44.8192 268.215C44.593 268.165 44.3935 268.14 44.2206 268.14C43.7783 268.14 43.3992 268.319 43.0833 268.678C42.7708 269.038 42.6145 269.485 42.6145 270.02V272.953H41.7865V267.486H42.4698L42.5646 268.499H42.6045C42.8073 268.143 43.0517 267.869 43.3377 267.676C43.6237 267.483 43.9379 267.387 44.2805 267.387ZM49.6974 272.953V269.417C49.6974 268.971 49.596 268.639 49.3931 268.419C49.1903 268.2 48.8727 268.09 48.4404 268.09C47.8685 268.09 47.4495 268.244 47.1835 268.554C46.9174 268.863 46.7844 269.373 46.7844 270.085V272.953H45.9564V267.486H46.6298L46.7645 268.234H46.8044C46.974 267.965 47.2117 267.757 47.5177 267.611C47.8236 267.461 48.1644 267.387 48.5402 267.387C49.1986 267.387 49.6941 267.546 50.0266 267.865C50.3591 268.181 50.5254 268.688 50.5254 269.387V272.953H49.6974ZM59.6035 270.215C59.6035 271.106 59.3791 271.803 58.9301 272.305C58.4812 272.803 57.8611 273.053 57.0696 273.053C56.5808 273.053 56.1469 272.938 55.7678 272.709C55.3887 272.479 55.0961 272.15 54.8899 271.721C54.6837 271.292 54.5806 270.79 54.5806 270.215C54.5806 269.324 54.8034 268.63 55.249 268.135C55.6946 267.636 56.3131 267.387 57.1045 267.387C57.8694 267.387 58.4762 267.641 58.9252 268.15C59.3774 268.658 59.6035 269.347 59.6035 270.215ZM55.4386 270.215C55.4386 270.913 55.5782 271.445 55.8576 271.811C56.1369 272.177 56.5476 272.36 57.0896 272.36C57.6316 272.36 58.0423 272.178 58.3216 271.816C58.6043 271.45 58.7456 270.916 58.7456 270.215C58.7456 269.52 58.6043 268.993 58.3216 268.634C58.0423 268.271 57.6283 268.09 57.0796 268.09C56.5376 268.09 56.1286 268.268 55.8526 268.624C55.5766 268.979 55.4386 269.51 55.4386 270.215ZM63.5241 268.13H62.1324V272.953H61.3044V268.13H60.3268V267.756L61.3044 267.456V267.152C61.3044 265.809 61.8913 265.137 63.0652 265.137C63.3545 265.137 63.6937 265.195 64.0827 265.312L63.8683 265.975C63.549 265.872 63.2763 265.82 63.0502 265.82C62.7376 265.82 62.5065 265.925 62.3569 266.135C62.2073 266.341 62.1324 266.673 62.1324 267.132V267.486H63.5241V268.13Z" class="path-6"/> -<rect x="19.3363" y="206.134" width="293.327" height="32.1055" rx="1.82418" class="rect-1" stroke-width="0.72967"/> -<rect x="143.745" y="206.5" width="168.554" height="31.3758" rx="2.18901" class="rect-2"/> -<path d="M173.828 223.058C173.828 224.076 173.572 224.873 173.059 225.446C172.546 226.016 171.837 226.302 170.932 226.302C170.374 226.302 169.878 226.17 169.445 225.908C169.011 225.646 168.677 225.27 168.441 224.779C168.206 224.289 168.088 223.715 168.088 223.058C168.088 222.039 168.342 221.247 168.852 220.681C169.361 220.111 170.068 219.826 170.972 219.826C171.846 219.826 172.54 220.116 173.053 220.698C173.57 221.279 173.828 222.066 173.828 223.058ZM169.068 223.058C169.068 223.856 169.228 224.464 169.547 224.882C169.866 225.3 170.336 225.509 170.955 225.509C171.575 225.509 172.044 225.302 172.363 224.888C172.686 224.47 172.848 223.86 172.848 223.058C172.848 222.264 172.686 221.661 172.363 221.251C172.044 220.837 171.571 220.629 170.944 220.629C170.324 220.629 169.857 220.833 169.541 221.239C169.226 221.646 169.068 222.252 169.068 223.058ZM176.382 219.94V223.993C176.382 224.502 176.498 224.882 176.73 225.133C176.962 225.384 177.325 225.509 177.819 225.509C178.472 225.509 178.949 225.331 179.249 224.973C179.554 224.616 179.706 224.033 179.706 223.223V219.94H180.652V226.188H179.871L179.734 225.35H179.683C179.489 225.657 179.219 225.893 178.873 226.056C178.531 226.22 178.14 226.302 177.699 226.302C176.939 226.302 176.369 226.121 175.989 225.76C175.613 225.399 175.424 224.821 175.424 224.027V219.94H176.382ZM184.682 225.521C184.849 225.521 185.011 225.509 185.167 225.486C185.322 225.46 185.446 225.433 185.537 225.407V226.13C185.435 226.18 185.283 226.22 185.081 226.25C184.884 226.284 184.705 226.302 184.545 226.302C183.337 226.302 182.733 225.665 182.733 224.392V220.675H181.838V220.219L182.733 219.826L183.132 218.492H183.679V219.94H185.492V220.675H183.679V224.352C183.679 224.728 183.768 225.017 183.947 225.218C184.125 225.42 184.37 225.521 184.682 225.521ZM195.217 223.058C195.217 224.076 194.96 224.873 194.447 225.446C193.934 226.016 193.225 226.302 192.321 226.302C191.762 226.302 191.266 226.17 190.833 225.908C190.4 225.646 190.065 225.27 189.83 224.779C189.594 224.289 189.476 223.715 189.476 223.058C189.476 222.039 189.731 221.247 190.24 220.681C190.749 220.111 191.456 219.826 192.361 219.826C193.235 219.826 193.928 220.116 194.441 220.698C194.958 221.279 195.217 222.066 195.217 223.058ZM190.457 223.058C190.457 223.856 190.616 224.464 190.936 224.882C191.255 225.3 191.724 225.509 192.344 225.509C192.963 225.509 193.432 225.302 193.752 224.888C194.075 224.47 194.236 223.86 194.236 223.058C194.236 222.264 194.075 221.661 193.752 221.251C193.432 220.837 192.959 220.629 192.332 220.629C191.713 220.629 191.245 220.833 190.93 221.239C190.614 221.646 190.457 222.252 190.457 223.058ZM199.697 220.675H198.107V226.188H197.161V220.675H196.043V220.248L197.161 219.905V219.558C197.161 218.022 197.831 217.255 199.173 217.255C199.504 217.255 199.891 217.321 200.336 217.454L200.091 218.212C199.726 218.095 199.414 218.036 199.156 218.036C198.799 218.036 198.534 218.155 198.363 218.395C198.192 218.63 198.107 219.011 198.107 219.535V219.94H199.697V220.675ZM208.961 222.009C208.961 223.449 208.733 224.525 208.277 225.236C207.824 225.946 207.131 226.302 206.196 226.302C205.299 226.302 204.617 225.939 204.149 225.213C203.682 224.483 203.448 223.415 203.448 222.009C203.448 220.557 203.674 219.48 204.127 218.777C204.579 218.074 205.269 217.722 206.196 217.722C207.1 217.722 207.786 218.089 208.254 218.822C208.725 219.556 208.961 220.618 208.961 222.009ZM204.406 222.009C204.406 223.221 204.549 224.105 204.834 224.66C205.119 225.211 205.573 225.486 206.196 225.486C206.827 225.486 207.283 225.207 207.564 224.648C207.849 224.086 207.992 223.206 207.992 222.009C207.992 220.812 207.849 219.936 207.564 219.381C207.283 218.822 206.827 218.543 206.196 218.543C205.573 218.543 205.119 218.819 204.834 219.37C204.549 219.917 204.406 220.797 204.406 222.009ZM210.414 225.583C210.414 225.329 210.471 225.137 210.585 225.007C210.703 224.874 210.87 224.808 211.087 224.808C211.307 224.808 211.479 224.874 211.6 225.007C211.726 225.137 211.788 225.329 211.788 225.583C211.788 225.83 211.726 226.02 211.6 226.153C211.475 226.286 211.304 226.353 211.087 226.353C210.893 226.353 210.732 226.294 210.603 226.176C210.477 226.054 210.414 225.857 210.414 225.583ZM218.754 222.009C218.754 223.449 218.526 224.525 218.07 225.236C217.618 225.946 216.924 226.302 215.99 226.302C215.093 226.302 214.41 225.939 213.943 225.213C213.476 224.483 213.242 223.415 213.242 222.009C213.242 220.557 213.468 219.48 213.92 218.777C214.372 218.074 215.062 217.722 215.99 217.722C216.894 217.722 217.58 218.089 218.047 218.822C218.519 219.556 218.754 220.618 218.754 222.009ZM214.2 222.009C214.2 223.221 214.342 224.105 214.627 224.66C214.912 225.211 215.366 225.486 215.99 225.486C216.62 225.486 217.076 225.207 217.358 224.648C217.643 224.086 217.785 223.206 217.785 222.009C217.785 220.812 217.643 219.936 217.358 219.381C217.076 218.822 216.62 218.543 215.99 218.543C215.366 218.543 214.912 218.819 214.627 219.37C214.342 219.917 214.2 220.797 214.2 222.009ZM223.417 226.188H222.494V220.248C222.494 219.753 222.509 219.286 222.539 218.845C222.46 218.925 222.37 219.009 222.272 219.096C222.173 219.183 221.72 219.554 220.915 220.208L220.413 219.558L222.619 217.853H223.417V226.188ZM234.847 226.188H230.201V217.853H234.847V218.714H231.17V221.399H234.625V222.254H231.17V225.321H234.847V226.188ZM239.265 226.188H238.296V218.714H235.656V217.853H241.904V218.714H239.265V226.188ZM249.492 226.188H248.523V222.266H244.133V226.188H243.164V217.853H244.133V221.399H248.523V217.853H249.492V226.188ZM257.524 219.826C257.801 219.826 258.05 219.848 258.271 219.894L258.139 220.772C257.881 220.715 257.653 220.686 257.455 220.686C256.95 220.686 256.517 220.892 256.156 221.302C255.798 221.713 255.62 222.224 255.62 222.836V226.188H254.673V219.94H255.454L255.563 221.097H255.608C255.84 220.69 256.12 220.377 256.446 220.156C256.773 219.936 257.132 219.826 257.524 219.826ZM262.078 226.302C261.155 226.302 260.425 226.02 259.889 225.458C259.357 224.895 259.091 224.114 259.091 223.115C259.091 222.108 259.338 221.308 259.832 220.715C260.33 220.122 260.997 219.826 261.833 219.826C262.616 219.826 263.236 220.084 263.692 220.601C264.148 221.114 264.376 221.792 264.376 222.636V223.235H260.072C260.091 223.968 260.275 224.525 260.625 224.905C260.978 225.285 261.474 225.475 262.113 225.475C262.785 225.475 263.45 225.334 264.108 225.053V225.897C263.773 226.041 263.456 226.144 263.156 226.205C262.859 226.269 262.5 226.302 262.078 226.302ZM261.822 220.618C261.32 220.618 260.919 220.781 260.619 221.108C260.323 221.435 260.148 221.887 260.095 222.465H263.361C263.361 221.868 263.228 221.412 262.962 221.097C262.696 220.778 262.316 220.618 261.822 220.618ZM268.355 225.509C268.986 225.509 269.445 225.34 269.734 225.002C270.023 224.664 270.177 224.093 270.196 223.292V223.081C270.196 222.207 270.048 221.578 269.751 221.194C269.455 220.81 268.986 220.618 268.343 220.618C267.789 220.618 267.363 220.835 267.066 221.268C266.774 221.697 266.628 222.305 266.628 223.092C266.628 223.879 266.772 224.479 267.061 224.893C267.353 225.304 267.785 225.509 268.355 225.509ZM268.212 226.302C267.407 226.302 266.778 226.018 266.325 225.452C265.873 224.886 265.647 224.095 265.647 223.081C265.647 222.058 265.875 221.26 266.331 220.686C266.787 220.113 267.422 219.826 268.235 219.826C269.09 219.826 269.748 220.149 270.207 220.795H270.259L270.396 219.94H271.142V228.992H270.196V226.319C270.196 225.939 270.217 225.616 270.259 225.35H270.185C269.748 225.984 269.09 226.302 268.212 226.302ZM274.044 219.94V223.993C274.044 224.502 274.16 224.882 274.392 225.133C274.623 225.384 274.986 225.509 275.48 225.509C276.134 225.509 276.611 225.331 276.911 224.973C277.215 224.616 277.367 224.033 277.367 223.223V219.94H278.314V226.188H277.533L277.396 225.35H277.345C277.151 225.657 276.881 225.893 276.535 226.056C276.193 226.22 275.802 226.302 275.361 226.302C274.601 226.302 274.031 226.121 273.651 225.76C273.274 225.399 273.086 224.821 273.086 224.027V219.94H274.044ZM281.272 226.188H280.326V219.94H281.272V226.188ZM280.246 218.247C280.246 218.03 280.299 217.872 280.406 217.773C280.512 217.671 280.645 217.62 280.805 217.62C280.957 217.62 281.088 217.671 281.198 217.773C281.308 217.876 281.363 218.034 281.363 218.247C281.363 218.459 281.308 218.619 281.198 218.725C281.088 218.828 280.957 218.879 280.805 218.879C280.645 218.879 280.512 218.828 280.406 218.725C280.299 218.619 280.246 218.459 280.246 218.247ZM286.129 219.826C286.407 219.826 286.655 219.848 286.876 219.894L286.745 220.772C286.486 220.715 286.258 220.686 286.061 220.686C285.555 220.686 285.122 220.892 284.761 221.302C284.404 221.713 284.225 222.224 284.225 222.836V226.188H283.279V219.94H284.06L284.168 221.097H284.214C284.446 220.69 284.725 220.377 285.052 220.156C285.379 219.936 285.738 219.826 286.129 219.826ZM290.684 226.302C289.76 226.302 289.031 226.02 288.495 225.458C287.963 224.895 287.697 224.114 287.697 223.115C287.697 222.108 287.944 221.308 288.438 220.715C288.936 220.122 289.603 219.826 290.439 219.826C291.222 219.826 291.841 220.084 292.297 220.601C292.753 221.114 292.981 221.792 292.981 222.636V223.235H288.677C288.696 223.968 288.881 224.525 289.23 224.905C289.584 225.285 290.08 225.475 290.718 225.475C291.391 225.475 292.056 225.334 292.713 225.053V225.897C292.379 226.041 292.061 226.144 291.761 226.205C291.465 226.269 291.106 226.302 290.684 226.302ZM290.427 220.618C289.926 220.618 289.525 220.781 289.225 221.108C288.928 221.435 288.753 221.887 288.7 222.465H291.966C291.966 221.868 291.833 221.412 291.567 221.097C291.301 220.778 290.921 220.618 290.427 220.618ZM298.853 225.35H298.801C298.364 225.984 297.711 226.302 296.84 226.302C296.023 226.302 295.387 226.022 294.931 225.464C294.479 224.905 294.252 224.111 294.252 223.081C294.252 222.051 294.48 221.251 294.936 220.681C295.392 220.111 296.027 219.826 296.84 219.826C297.688 219.826 298.338 220.134 298.79 220.749H298.864L298.824 220.299L298.801 219.86V217.317H299.748V226.188H298.978L298.853 225.35ZM296.96 225.509C297.606 225.509 298.074 225.334 298.362 224.985C298.655 224.631 298.801 224.063 298.801 223.28V223.081C298.801 222.195 298.653 221.564 298.357 221.188C298.064 220.808 297.595 220.618 296.949 220.618C296.394 220.618 295.968 220.835 295.672 221.268C295.379 221.697 295.233 222.305 295.233 223.092C295.233 223.89 295.379 224.493 295.672 224.899C295.964 225.306 296.394 225.509 296.96 225.509Z" class="path-7"/> -<path d="M36.7401 221.884C36.7401 223.324 36.5121 224.4 36.0561 225.111C35.6038 225.821 34.9103 226.177 33.9754 226.177C33.0785 226.177 32.3963 225.814 31.9289 225.088C31.4614 224.358 31.2277 223.29 31.2277 221.884C31.2277 220.432 31.4538 219.355 31.9061 218.652C32.3583 217.949 33.0481 217.597 33.9754 217.597C34.8798 217.597 35.5658 217.964 36.0333 218.697C36.5045 219.431 36.7401 220.493 36.7401 221.884ZM32.1854 221.884C32.1854 223.096 32.3279 223.98 32.6129 224.535C32.898 225.086 33.3521 225.361 33.9754 225.361C34.6062 225.361 35.0623 225.082 35.3435 224.523C35.6285 223.961 35.771 223.081 35.771 221.884C35.771 220.687 35.6285 219.811 35.3435 219.256C35.0623 218.697 34.6062 218.418 33.9754 218.418C33.3521 218.418 32.898 218.694 32.6129 219.245C32.3279 219.792 32.1854 220.672 32.1854 221.884ZM38.1938 225.458C38.1938 225.204 38.2508 225.012 38.3648 224.882C38.4826 224.749 38.6498 224.683 38.8664 224.683C39.0869 224.683 39.2579 224.749 39.3795 224.882C39.5049 225.012 39.5676 225.204 39.5676 225.458C39.5676 225.705 39.5049 225.895 39.3795 226.028C39.2541 226.161 39.0831 226.228 38.8664 226.228C38.6726 226.228 38.5111 226.169 38.3819 226.051C38.2565 225.929 38.1938 225.732 38.1938 225.458ZM46.5337 221.884C46.5337 223.324 46.3056 224.4 45.8496 225.111C45.3974 225.821 44.7038 226.177 43.7689 226.177C42.872 226.177 42.1899 225.814 41.7224 225.088C41.255 224.358 41.0212 223.29 41.0212 221.884C41.0212 220.432 41.2474 219.355 41.6996 218.652C42.1518 217.949 42.8416 217.597 43.7689 217.597C44.6734 217.597 45.3594 217.964 45.8268 218.697C46.298 219.431 46.5337 220.493 46.5337 221.884ZM41.9789 221.884C41.9789 223.096 42.1214 223.98 42.4065 224.535C42.6915 225.086 43.1456 225.361 43.7689 225.361C44.3998 225.361 44.8558 225.082 45.137 224.523C45.4221 223.961 45.5646 223.081 45.5646 221.884C45.5646 220.687 45.4221 219.811 45.137 219.256C44.8558 218.697 44.3998 218.418 43.7689 218.418C43.1456 218.418 42.6915 218.694 42.4065 219.245C42.1214 219.792 41.9789 220.672 41.9789 221.884ZM53.2147 221.884C53.2147 223.324 52.9867 224.4 52.5307 225.111C52.0784 225.821 51.3848 226.177 50.4499 226.177C49.5531 226.177 48.8709 225.814 48.4035 225.088C47.936 224.358 47.7023 223.29 47.7023 221.884C47.7023 220.432 47.9284 219.355 48.3807 218.652C48.8329 217.949 49.5227 217.597 50.4499 217.597C51.3544 217.597 52.0404 217.964 52.5078 218.697C52.9791 219.431 53.2147 220.493 53.2147 221.884ZM48.66 221.884C48.66 223.096 48.8025 223.98 49.0875 224.535C49.3725 225.086 49.8267 225.361 50.4499 225.361C51.0808 225.361 51.5369 225.082 51.8181 224.523C52.1031 223.961 52.2456 223.081 52.2456 221.884C52.2456 220.687 52.1031 219.811 51.8181 219.256C51.5369 218.697 51.0808 218.418 50.4499 218.418C49.8267 218.418 49.3725 218.694 49.0875 219.245C48.8025 219.792 48.66 220.672 48.66 221.884ZM57.131 217.609C57.8911 217.609 58.4934 217.785 58.9381 218.139C59.3827 218.492 59.605 218.981 59.605 219.604C59.605 220.014 59.4777 220.389 59.2231 220.727C58.9685 221.065 58.5618 221.373 58.0032 221.65C58.6796 221.973 59.1604 222.313 59.4454 222.671C59.7304 223.024 59.873 223.435 59.873 223.902C59.873 224.594 59.6316 225.147 59.149 225.561C58.6663 225.971 58.0051 226.177 57.1652 226.177C56.2759 226.177 55.5918 225.983 55.113 225.595C54.6342 225.204 54.3947 224.651 54.3947 223.936C54.3947 222.982 54.9762 222.239 56.1391 221.707C55.6146 221.411 55.2384 221.092 55.0104 220.75C54.7824 220.404 54.6684 220.018 54.6684 219.592C54.6684 218.988 54.8907 218.507 55.3353 218.15C55.7838 217.789 56.3823 217.609 57.131 217.609ZM55.3296 223.959C55.3296 224.415 55.4873 224.77 55.8028 225.025C56.122 225.28 56.5685 225.407 57.1424 225.407C57.7086 225.407 58.1495 225.274 58.4649 225.008C58.7804 224.742 58.9381 224.377 58.9381 223.913C58.9381 223.545 58.7899 223.218 58.4934 222.933C58.197 222.644 57.6801 222.365 56.9429 222.095C56.3766 222.338 55.9662 222.608 55.7116 222.904C55.4569 223.197 55.3296 223.549 55.3296 223.959ZM57.1196 218.378C56.6445 218.378 56.2721 218.492 56.0023 218.72C55.7325 218.948 55.5975 219.252 55.5975 219.632C55.5975 219.982 55.7097 220.282 55.9339 220.533C56.1581 220.784 56.5723 221.035 57.1766 221.285C57.72 221.057 58.1039 220.812 58.3281 220.55C58.5561 220.288 58.6701 219.982 58.6701 219.632C58.6701 219.248 58.5314 218.944 58.254 218.72C57.9804 218.492 57.6022 218.378 57.1196 218.378ZM69.3074 226.062H64.6614V217.728H69.3074V218.589H65.6305V221.274H69.085V222.129H65.6305V225.196H69.3074V226.062ZM73.7253 226.062H72.7562V218.589H70.1168V217.728H76.3646V218.589H73.7253V226.062ZM83.9521 226.062H82.983V222.141H78.5936V226.062H77.6245V217.728H78.5936V221.274H82.983V217.728H83.9521V226.062Z" class="path-8"/> -<path d="M24.558 194.148L23.6502 191.829H20.7272L19.8294 194.148H18.9714L21.8545 186.826H22.5678L25.4359 194.148H24.558ZM23.3858 191.066L22.5378 188.806C22.4281 188.52 22.315 188.17 22.1987 187.754C22.1255 188.073 22.0208 188.424 21.8844 188.806L21.0265 191.066H23.3858ZM33.282 194.148V190.592C33.282 190.156 33.1888 189.831 33.0026 189.614C32.8164 189.395 32.5271 189.285 32.1347 189.285C31.6193 189.285 31.2385 189.433 30.9925 189.729C30.7464 190.025 30.6234 190.481 30.6234 191.096V194.148H29.7954V190.592C29.7954 190.156 29.7022 189.831 29.516 189.614C29.3298 189.395 29.0388 189.285 28.6431 189.285C28.1244 189.285 27.7436 189.441 27.5009 189.754C27.2615 190.063 27.1417 190.572 27.1417 191.28V194.148H26.3137V188.682H26.9871L27.1218 189.43H27.1617C27.318 189.164 27.5375 188.956 27.8201 188.806C28.1061 188.657 28.4253 188.582 28.7778 188.582C29.6324 188.582 30.1911 188.891 30.4538 189.51H30.4937C30.6566 189.224 30.8927 188.998 31.202 188.831C31.5112 188.665 31.8637 188.582 32.2594 188.582C32.8779 188.582 33.3401 188.741 33.6461 189.061C33.9553 189.377 34.11 189.884 34.11 190.582V194.148H33.282ZM40.5395 191.41C40.5395 192.301 40.315 192.998 39.8661 193.5C39.4172 193.999 38.797 194.248 38.0056 194.248C37.5167 194.248 37.0828 194.133 36.7037 193.904C36.3246 193.675 36.032 193.345 35.8258 192.916C35.6197 192.487 35.5166 191.985 35.5166 191.41C35.5166 190.519 35.7394 189.826 36.185 189.33C36.6306 188.831 37.2491 188.582 38.0405 188.582C38.8053 188.582 39.4122 188.836 39.8611 189.345C40.3133 189.854 40.5395 190.542 40.5395 191.41ZM36.3745 191.41C36.3745 192.108 36.5142 192.64 36.7935 193.006C37.0728 193.372 37.4835 193.555 38.0255 193.555C38.5675 193.555 38.9782 193.374 39.2576 193.011C39.5402 192.645 39.6815 192.112 39.6815 191.41C39.6815 190.715 39.5402 190.188 39.2576 189.829C38.9782 189.466 38.5642 189.285 38.0155 189.285C37.4735 189.285 37.0645 189.463 36.7885 189.819C36.5125 190.175 36.3745 190.705 36.3745 191.41ZM42.7741 188.682V192.228C42.7741 192.674 42.8755 193.006 43.0783 193.226C43.2812 193.445 43.5988 193.555 44.0311 193.555C44.603 193.555 45.0203 193.399 45.283 193.086C45.5491 192.773 45.6821 192.263 45.6821 191.555V188.682H46.5101V194.148H45.8267L45.707 193.415H45.6621C45.4925 193.685 45.2564 193.891 44.9538 194.034C44.6545 194.177 44.312 194.248 43.9263 194.248C43.2612 194.248 42.7624 194.09 42.4299 193.774C42.1007 193.458 41.9361 192.953 41.9361 192.258V188.682H42.7741ZM52.0118 194.148V190.612C52.0118 190.166 51.9104 189.834 51.7076 189.614C51.5047 189.395 51.1871 189.285 50.7548 189.285C50.1829 189.285 49.7639 189.44 49.4979 189.749C49.2319 190.058 49.0988 190.569 49.0988 191.28V194.148H48.2708V188.682H48.9442L49.0789 189.43H49.1188C49.2884 189.16 49.5261 188.953 49.8321 188.806C50.138 188.657 50.4788 188.582 50.8546 188.582C51.513 188.582 52.0085 188.741 52.341 189.061C52.6736 189.377 52.8398 189.884 52.8398 190.582V194.148H52.0118ZM56.3115 193.565C56.4578 193.565 56.5991 193.555 56.7354 193.535C56.8718 193.512 56.9799 193.488 57.0597 193.465V194.099C56.9699 194.142 56.8369 194.177 56.6606 194.203C56.4877 194.233 56.3314 194.248 56.1917 194.248C55.1343 194.248 54.6056 193.691 54.6056 192.577V189.325H53.8225V188.926L54.6056 188.582L54.9547 187.415H55.4336V188.682H57.0198V189.325H55.4336V192.542C55.4336 192.872 55.5117 193.124 55.668 193.3C55.8243 193.477 56.0388 193.565 56.3115 193.565ZM63.2747 189.325H61.883V194.148H61.055V189.325H60.0774V188.951L61.055 188.652V188.347C61.055 187.004 61.642 186.332 62.8158 186.332C63.1051 186.332 63.4443 186.39 63.8333 186.507L63.6189 187.17C63.2996 187.067 63.0269 187.016 62.8008 187.016C62.4882 187.016 62.2571 187.12 62.1075 187.33C61.9579 187.536 61.883 187.869 61.883 188.327V188.682H63.2747V189.325ZM65.0504 188.682V192.228C65.0504 192.674 65.1518 193.006 65.3547 193.226C65.5575 193.445 65.8751 193.555 66.3074 193.555C66.8793 193.555 67.2967 193.399 67.5594 193.086C67.8254 192.773 67.9584 192.263 67.9584 191.555V188.682H68.7864V194.148H68.103L67.9833 193.415H67.9384C67.7689 193.685 67.5328 193.891 67.2302 194.034C66.9309 194.177 66.5884 194.248 66.2026 194.248C65.5376 194.248 65.0388 194.09 64.7062 193.774C64.377 193.458 64.2124 192.953 64.2124 192.258V188.682H65.0504ZM74.2881 194.148V190.612C74.2881 190.166 74.1867 189.834 73.9839 189.614C73.781 189.395 73.4635 189.285 73.0312 189.285C72.4592 189.285 72.0402 189.44 71.7742 189.749C71.5082 190.058 71.3752 190.569 71.3752 191.28V194.148H70.5472V188.682H71.2205L71.3552 189.43H71.3951C71.5647 189.16 71.8025 188.953 72.1084 188.806C72.4143 188.657 72.7552 188.582 73.1309 188.582C73.7893 188.582 74.2848 188.741 74.6174 189.061C74.9499 189.377 75.1161 189.884 75.1161 190.582V194.148H74.2881ZM80.5431 193.415H80.4982C80.1158 193.971 79.5438 194.248 78.7823 194.248C78.0674 194.248 77.5104 194.004 77.1113 193.515C76.7156 193.026 76.5178 192.331 76.5178 191.43C76.5178 190.529 76.7173 189.829 77.1163 189.33C77.5154 188.831 78.0707 188.582 78.7823 188.582C79.5239 188.582 80.0925 188.851 80.4882 189.39H80.553L80.5181 188.996L80.4982 188.612V186.387H81.3262V194.148H80.6528L80.5431 193.415ZM78.8871 193.555C79.4524 193.555 79.8614 193.402 80.1141 193.096C80.3702 192.787 80.4982 192.29 80.4982 191.605V191.43C80.4982 190.655 80.3685 190.103 80.1091 189.774C79.8531 189.441 79.4424 189.275 78.8771 189.275C78.3916 189.275 78.0192 189.465 77.7598 189.844C77.5037 190.22 77.3757 190.752 77.3757 191.44C77.3757 192.138 77.5037 192.665 77.7598 193.021C78.0158 193.377 78.3916 193.555 78.8871 193.555ZM85.3964 194.248C84.5883 194.248 83.9499 194.002 83.481 193.51C83.0154 193.018 82.7827 192.334 82.7827 191.46C82.7827 190.579 82.9988 189.879 83.4311 189.36C83.8667 188.841 84.4503 188.582 85.1819 188.582C85.8669 188.582 86.4089 188.808 86.808 189.26C87.207 189.709 87.4065 190.303 87.4065 191.041V191.565H83.6406C83.6572 192.206 83.8185 192.694 84.1244 193.026C84.4337 193.359 84.8677 193.525 85.4263 193.525C86.0149 193.525 86.5968 193.402 87.1721 193.156V193.894C86.8795 194.02 86.6018 194.11 86.3391 194.163C86.0797 194.22 85.7655 194.248 85.3964 194.248ZM85.1719 189.275C84.733 189.275 84.3822 189.418 84.1195 189.704C83.8601 189.99 83.7071 190.386 83.6606 190.891H86.5187C86.5187 190.369 86.4023 189.97 86.1695 189.694C85.9367 189.415 85.6042 189.275 85.1719 189.275ZM92.5442 193.415H92.4993C92.1169 193.971 91.5449 194.248 90.7834 194.248C90.0685 194.248 89.5115 194.004 89.1124 193.515C88.7167 193.026 88.5189 192.331 88.5189 191.43C88.5189 190.529 88.7184 189.829 89.1174 189.33C89.5165 188.831 90.0718 188.582 90.7834 188.582C91.5249 188.582 92.0936 188.851 92.4893 189.39H92.5541L92.5192 188.996L92.4993 188.612V186.387H93.3273V194.148H92.6539L92.5442 193.415ZM90.8881 193.555C91.4534 193.555 91.8625 193.402 92.1152 193.096C92.3712 192.787 92.4993 192.29 92.4993 191.605V191.43C92.4993 190.655 92.3696 190.103 92.1102 189.774C91.8542 189.441 91.4435 189.275 90.8782 189.275C90.3927 189.275 90.0202 189.465 89.7609 189.844C89.5048 190.22 89.3768 190.752 89.3768 191.44C89.3768 192.138 89.5048 192.665 89.7609 193.021C90.0169 193.377 90.3927 193.555 90.8881 193.555Z" class="path-9"/> -<line x1="18.9714" y1="158.702" x2="313.029" y2="158.702" stroke-width="0.72967" class="line-1"/> -<path d="M48.1118 114.635C48.1118 115.396 47.8624 115.98 47.3636 116.386C46.8649 116.791 46.1549 116.994 45.2338 116.994H44.4756V119.723H43.2835V112.43H45.3834C46.2946 112.43 46.9762 112.616 47.4285 112.989C47.8841 113.361 48.1118 113.91 48.1118 114.635ZM44.4756 115.992H45.1091C45.7209 115.992 46.1699 115.885 46.4558 115.672C46.7418 115.46 46.8848 115.127 46.8848 114.675C46.8848 114.256 46.7568 113.943 46.5007 113.737C46.2447 113.531 45.8456 113.428 45.3036 113.428H44.4756V115.992ZM52.8953 119.723L52.6609 118.955H52.621C52.355 119.29 52.0873 119.52 51.8179 119.643C51.5486 119.763 51.2027 119.822 50.7804 119.822C50.2384 119.822 49.8144 119.676 49.5085 119.383C49.2059 119.091 49.0546 118.677 49.0546 118.141C49.0546 117.573 49.2657 117.144 49.688 116.855C50.1104 116.565 50.7538 116.407 51.6184 116.381L52.5711 116.351V116.056C52.5711 115.704 52.488 115.441 52.3217 115.268C52.1588 115.092 51.9044 115.004 51.5585 115.004C51.2759 115.004 51.0049 115.046 50.7455 115.129C50.4861 115.212 50.2367 115.31 49.9973 115.423L49.6182 114.585C49.9175 114.429 50.245 114.311 50.6008 114.231C50.9567 114.148 51.2925 114.106 51.6084 114.106C52.3101 114.106 52.8388 114.259 53.1946 114.565C53.5537 114.871 53.7333 115.352 53.7333 116.007V119.723H52.8953ZM51.1495 118.925C51.5752 118.925 51.916 118.807 52.1721 118.57C52.4314 118.331 52.5611 117.997 52.5611 117.568V117.089L51.8528 117.119C51.3008 117.139 50.8985 117.232 50.6457 117.398C50.3963 117.561 50.2716 117.812 50.2716 118.151C50.2716 118.398 50.3448 118.589 50.4911 118.725C50.6374 118.858 50.8569 118.925 51.1495 118.925ZM54.5314 114.206H55.8083L56.9306 117.333C57.1002 117.779 57.2132 118.198 57.2698 118.59H57.3097C57.3396 118.407 57.3945 118.186 57.4743 117.927C57.5541 117.664 57.9764 116.424 58.7412 114.206H60.0082L57.6489 120.456C57.2199 121.603 56.505 122.177 55.504 122.177C55.2447 122.177 54.9919 122.148 54.7459 122.092V121.164C54.9221 121.204 55.1233 121.224 55.3494 121.224C55.9147 121.224 56.3121 120.896 56.5415 120.241L56.746 119.723L54.5314 114.206ZM68.0538 119.723H63.1107V118.835L64.9912 116.944C65.5465 116.376 65.914 115.973 66.0935 115.737C66.2764 115.498 66.4094 115.273 66.4926 115.064C66.5757 114.854 66.6173 114.63 66.6173 114.391C66.6173 114.061 66.5175 113.802 66.318 113.612C66.1218 113.423 65.8491 113.328 65.4999 113.328C65.2206 113.328 64.9496 113.38 64.6869 113.483C64.4275 113.586 64.1266 113.772 63.7841 114.041L63.1506 113.268C63.5563 112.926 63.9503 112.683 64.3328 112.54C64.7152 112.397 65.1225 112.325 65.5548 112.325C66.2332 112.325 66.7769 112.503 67.1859 112.859C67.5949 113.212 67.7994 113.687 67.7994 114.286C67.7994 114.615 67.7396 114.928 67.6198 115.223C67.5035 115.519 67.3222 115.825 67.0761 116.141C66.8334 116.454 66.4277 116.878 65.8591 117.413L64.5921 118.64V118.69H68.0538V119.723ZM73.6154 114.106C73.6154 114.568 73.4807 114.954 73.2114 115.263C72.942 115.569 72.5629 115.776 72.0741 115.882V115.922C72.6594 115.995 73.0983 116.178 73.3909 116.47C73.6836 116.76 73.8299 117.146 73.8299 117.628C73.8299 118.329 73.5821 118.871 73.0867 119.254C72.5912 119.633 71.8862 119.822 70.9718 119.822C70.1637 119.822 69.482 119.691 68.9267 119.428V118.386C69.2359 118.539 69.5635 118.657 69.9093 118.74C70.2552 118.823 70.5877 118.865 70.9069 118.865C71.4722 118.865 71.8945 118.76 72.1739 118.55C72.4532 118.341 72.5929 118.017 72.5929 117.578C72.5929 117.189 72.4382 116.903 72.129 116.72C71.8197 116.537 71.3342 116.446 70.6725 116.446H70.039V115.493H70.6825C71.8463 115.493 72.4283 115.09 72.4283 114.286C72.4283 113.973 72.3268 113.732 72.124 113.563C71.9211 113.393 71.6219 113.308 71.2261 113.308C70.9501 113.308 70.6841 113.348 70.4281 113.428C70.172 113.504 69.8694 113.656 69.5203 113.882L68.9466 113.064C69.615 112.572 70.3915 112.325 71.276 112.325C72.0109 112.325 72.5845 112.483 72.9969 112.799C73.4092 113.115 73.6154 113.551 73.6154 114.106ZM79.7257 116.076C79.7257 117.343 79.5212 118.284 79.1121 118.9C78.7065 119.515 78.0846 119.822 77.2466 119.822C76.4353 119.822 75.8201 119.505 75.4011 118.87C74.9821 118.235 74.7726 117.303 74.7726 116.076C74.7726 114.79 74.9754 113.842 75.3811 113.233C75.7902 112.621 76.412 112.316 77.2466 112.316C78.0613 112.316 78.6782 112.635 79.0972 113.273C79.5162 113.912 79.7257 114.846 79.7257 116.076ZM75.9597 116.076C75.9597 117.071 76.0612 117.781 76.264 118.206C76.4702 118.632 76.7977 118.845 77.2466 118.845C77.6956 118.845 78.0231 118.629 78.2293 118.196C78.4388 117.764 78.5435 117.057 78.5435 116.076C78.5435 115.099 78.4388 114.392 78.2293 113.957C78.0231 113.518 77.6956 113.298 77.2466 113.298C76.7977 113.298 76.4702 113.513 76.264 113.942C76.0612 114.371 75.9597 115.082 75.9597 116.076ZM89.7166 116.007C89.7166 117.21 89.3824 118.131 88.714 118.77C88.0456 119.405 87.0829 119.723 85.826 119.723H83.7859V112.43H86.0405C87.201 112.43 88.1038 112.743 88.7489 113.368C89.394 113.993 89.7166 114.873 89.7166 116.007ZM88.4596 116.047C88.4596 114.301 87.6433 113.428 86.0105 113.428H84.978V118.72H85.826C87.5817 118.72 88.4596 117.829 88.4596 116.047ZM95.8119 119.723L95.0837 117.698H92.2954L91.5821 119.723H90.3251L93.0536 112.4H94.3504L97.0789 119.723H95.8119ZM94.7694 116.67L94.0861 114.685C94.0362 114.552 93.9664 114.342 93.8766 114.056C93.7901 113.77 93.7303 113.561 93.697 113.428C93.6072 113.837 93.4759 114.284 93.303 114.77L92.6445 116.67H94.7694ZM98.0415 119.723V112.43H99.2337V119.723H98.0415Z" class="path-10"/> -<rect x="18.9714" y="107.266" width="17.5121" height="17.5121" rx="2.18901" class="rect-3"/> -<path d="M33.1392 111.645H31.8477C31.5668 111.645 31.2997 111.779 31.1345 112.011L26.8058 118.014L24.8452 115.293C24.68 115.065 24.4156 114.927 24.132 114.927H22.8405C22.6615 114.927 22.5569 115.131 22.6615 115.277L26.0926 120.035C26.1736 120.148 26.2805 120.24 26.4043 120.304C26.5281 120.367 26.6652 120.401 26.8044 120.401C26.9436 120.401 27.0807 120.367 27.2045 120.304C27.3283 120.24 27.4352 120.148 27.5162 120.035L33.3154 111.994C33.4228 111.848 33.3182 111.645 33.1392 111.645Z" class="path-11"/> -<path d="M147.347 114.635C147.347 115.396 147.098 115.98 146.599 116.386C146.1 116.791 145.39 116.994 144.469 116.994H143.711V119.723H142.519V112.43H144.619C145.53 112.43 146.211 112.616 146.664 112.989C147.119 113.361 147.347 113.91 147.347 114.635ZM143.711 115.992H144.344C144.956 115.992 145.405 115.885 145.691 115.672C145.977 115.46 146.12 115.127 146.12 114.675C146.12 114.256 145.992 113.943 145.736 113.737C145.48 113.531 145.081 113.428 144.539 113.428H143.711V115.992ZM152.13 119.723L151.896 118.955H151.856C151.59 119.29 151.322 119.52 151.053 119.643C150.784 119.763 150.438 119.822 150.016 119.822C149.473 119.822 149.05 119.676 148.744 119.383C148.441 119.091 148.29 118.677 148.29 118.141C148.29 117.573 148.501 117.144 148.923 116.855C149.345 116.565 149.989 116.407 150.854 116.381L151.806 116.351V116.056C151.806 115.704 151.723 115.441 151.557 115.268C151.394 115.092 151.139 115.004 150.794 115.004C150.511 115.004 150.24 115.046 149.981 115.129C149.721 115.212 149.472 115.31 149.232 115.423L148.853 114.585C149.153 114.429 149.48 114.311 149.836 114.231C150.192 114.148 150.528 114.106 150.844 114.106C151.545 114.106 152.074 114.259 152.43 114.565C152.789 114.871 152.968 115.352 152.968 116.007V119.723H152.13ZM150.385 118.925C150.81 118.925 151.151 118.807 151.407 118.57C151.667 118.331 151.796 117.997 151.796 117.568V117.089L151.088 117.119C150.536 117.139 150.134 117.232 149.881 117.398C149.631 117.561 149.507 117.812 149.507 118.151C149.507 118.398 149.58 118.589 149.726 118.725C149.873 118.858 150.092 118.925 150.385 118.925ZM153.766 114.206H155.043L156.166 117.333C156.335 117.779 156.448 118.198 156.505 118.59H156.545C156.575 118.407 156.63 118.186 156.709 117.927C156.789 117.664 157.212 116.424 157.976 114.206H159.243L156.884 120.456C156.455 121.603 155.74 122.177 154.739 122.177C154.48 122.177 154.227 122.148 153.981 122.092V121.164C154.157 121.204 154.358 121.224 154.585 121.224C155.15 121.224 155.547 120.896 155.777 120.241L155.981 119.723L153.766 114.206ZM165.788 119.723H164.615V115.014C164.615 114.452 164.629 114.006 164.655 113.677C164.579 113.757 164.484 113.845 164.371 113.942C164.261 114.038 163.889 114.344 163.254 114.859L162.665 114.116L164.81 112.43H165.788V119.723ZM173.115 115.543C173.115 116.979 172.826 118.052 172.247 118.76C171.668 119.468 170.797 119.822 169.633 119.822C169.191 119.822 168.873 119.796 168.681 119.743V118.76C168.977 118.843 169.274 118.885 169.573 118.885C170.365 118.885 170.955 118.672 171.344 118.246C171.733 117.821 171.946 117.152 171.983 116.241H171.923C171.727 116.54 171.489 116.756 171.209 116.889C170.933 117.022 170.609 117.089 170.237 117.089C169.592 117.089 169.085 116.888 168.715 116.485C168.346 116.083 168.162 115.531 168.162 114.829C168.162 114.068 168.375 113.463 168.8 113.014C169.229 112.562 169.813 112.335 170.551 112.335C171.07 112.335 171.522 112.462 171.908 112.715C172.294 112.967 172.591 113.335 172.801 113.817C173.01 114.296 173.115 114.871 173.115 115.543ZM170.571 113.308C170.165 113.308 169.854 113.441 169.638 113.707C169.422 113.97 169.314 114.341 169.314 114.819C169.314 115.235 169.414 115.563 169.613 115.802C169.816 116.038 170.122 116.156 170.531 116.156C170.927 116.156 171.259 116.038 171.529 115.802C171.798 115.566 171.933 115.29 171.933 114.974C171.933 114.678 171.875 114.402 171.758 114.146C171.645 113.887 171.485 113.682 171.279 113.533C171.073 113.383 170.837 113.308 170.571 113.308ZM178.961 116.076C178.961 117.343 178.756 118.284 178.347 118.9C177.942 119.515 177.32 119.822 176.482 119.822C175.67 119.822 175.055 119.505 174.636 118.87C174.217 118.235 174.008 117.303 174.008 116.076C174.008 114.79 174.211 113.842 174.616 113.233C175.025 112.621 175.647 112.316 176.482 112.316C177.296 112.316 177.913 112.635 178.332 113.273C178.751 113.912 178.961 114.846 178.961 116.076ZM175.195 116.076C175.195 117.071 175.296 117.781 175.499 118.206C175.705 118.632 176.033 118.845 176.482 118.845C176.931 118.845 177.258 118.629 177.464 118.196C177.674 117.764 177.779 117.057 177.779 116.076C177.779 115.099 177.674 114.392 177.464 113.957C177.258 113.518 176.931 113.298 176.482 113.298C176.033 113.298 175.705 113.513 175.499 113.942C175.296 114.371 175.195 115.082 175.195 116.076ZM188.952 116.007C188.952 117.21 188.618 118.131 187.949 118.77C187.281 119.405 186.318 119.723 185.061 119.723H183.021V112.43H185.276C186.436 112.43 187.339 112.743 187.984 113.368C188.629 113.993 188.952 114.873 188.952 116.007ZM187.695 116.047C187.695 114.301 186.878 113.428 185.246 113.428H184.213V118.72H185.061C186.817 118.72 187.695 117.829 187.695 116.047ZM195.047 119.723L194.319 117.698H191.53L190.817 119.723H189.56L192.289 112.4H193.586L196.314 119.723H195.047ZM194.005 116.67L193.321 114.685C193.271 114.552 193.201 114.342 193.112 114.056C193.025 113.77 192.965 113.561 192.932 113.428C192.842 113.837 192.711 114.284 192.538 114.77L191.88 116.67H194.005ZM197.277 119.723V112.43H198.469V119.723H197.277Z" class="path-12"/> -<rect x="118.207" y="107.266" width="17.5121" height="17.5121" rx="2.18901" class="rect-4"/> -<path d="M132.374 111.645H131.083C130.802 111.645 130.535 111.779 130.37 112.011L126.041 118.014L124.08 115.293C123.915 115.065 123.651 114.927 123.367 114.927H122.076C121.897 114.927 121.792 115.131 121.897 115.277L125.328 120.035C125.409 120.148 125.516 120.24 125.639 120.304C125.763 120.367 125.9 120.401 126.04 120.401C126.179 120.401 126.316 120.367 126.44 120.304C126.563 120.24 126.67 120.148 126.751 120.035L132.551 111.994C132.658 111.848 132.553 111.645 132.374 111.645Z" class="path-13"/> -<path d="M246.582 114.635C246.582 115.396 246.333 115.98 245.834 116.386C245.335 116.791 244.625 116.994 243.704 116.994H242.946V119.723H241.754V112.43H243.854C244.765 112.43 245.447 112.616 245.899 112.989C246.355 113.361 246.582 113.91 246.582 114.635ZM242.946 115.992H243.58C244.191 115.992 244.64 115.885 244.926 115.672C245.212 115.46 245.355 115.127 245.355 114.675C245.355 114.256 245.227 113.943 244.971 113.737C244.715 113.531 244.316 113.428 243.774 113.428H242.946V115.992ZM251.366 119.723L251.131 118.955H251.091C250.825 119.29 250.558 119.52 250.288 119.643C250.019 119.763 249.673 119.822 249.251 119.822C248.709 119.822 248.285 119.676 247.979 119.383C247.676 119.091 247.525 118.677 247.525 118.141C247.525 117.573 247.736 117.144 248.159 116.855C248.581 116.565 249.224 116.407 250.089 116.381L251.042 116.351V116.056C251.042 115.704 250.958 115.441 250.792 115.268C250.629 115.092 250.375 115.004 250.029 115.004C249.746 115.004 249.475 115.046 249.216 115.129C248.957 115.212 248.707 115.31 248.468 115.423L248.089 114.585C248.388 114.429 248.715 114.311 249.071 114.231C249.427 114.148 249.763 114.106 250.079 114.106C250.781 114.106 251.309 114.259 251.665 114.565C252.024 114.871 252.204 115.352 252.204 116.007V119.723H251.366ZM249.62 118.925C250.046 118.925 250.386 118.807 250.643 118.57C250.902 118.331 251.032 117.997 251.032 117.568V117.089L250.323 117.119C249.771 117.139 249.369 117.232 249.116 117.398C248.867 117.561 248.742 117.812 248.742 118.151C248.742 118.398 248.815 118.589 248.962 118.725C249.108 118.858 249.327 118.925 249.62 118.925ZM253.002 114.206H254.279L255.401 117.333C255.571 117.779 255.684 118.198 255.74 118.59H255.78C255.81 118.407 255.865 118.186 255.945 117.927C256.025 117.664 256.447 116.424 257.212 114.206H258.479L256.119 120.456C255.69 121.603 254.975 122.177 253.974 122.177C253.715 122.177 253.462 122.148 253.216 122.092V121.164C253.393 121.204 253.594 121.224 253.82 121.224C254.385 121.224 254.783 120.896 255.012 120.241L255.217 119.723L253.002 114.206ZM265.023 119.723H263.851V115.014C263.851 114.452 263.864 114.006 263.891 113.677C263.814 113.757 263.719 113.845 263.606 113.942C263.497 114.038 263.124 114.344 262.489 114.859L261.9 114.116L264.045 112.43H265.023V119.723ZM269.891 115.169C270.626 115.169 271.208 115.363 271.637 115.752C272.066 116.141 272.28 116.672 272.28 117.343C272.28 118.122 272.036 118.73 271.547 119.169C271.062 119.605 270.37 119.822 269.472 119.822C268.657 119.822 268.017 119.691 267.552 119.428V118.366C267.821 118.519 268.13 118.637 268.48 118.72C268.829 118.803 269.153 118.845 269.452 118.845C269.981 118.845 270.383 118.727 270.659 118.491C270.935 118.255 271.073 117.909 271.073 117.453C271.073 116.582 270.518 116.146 269.407 116.146C269.251 116.146 269.058 116.163 268.829 116.196C268.599 116.226 268.398 116.261 268.225 116.301L267.701 115.992L267.981 112.43H271.772V113.473H269.013L268.849 115.278C268.965 115.258 269.106 115.235 269.273 115.209C269.442 115.182 269.648 115.169 269.891 115.169ZM278.196 116.076C278.196 117.343 277.992 118.284 277.583 118.9C277.177 119.515 276.555 119.822 275.717 119.822C274.906 119.822 274.291 119.505 273.872 118.87C273.453 118.235 273.243 117.303 273.243 116.076C273.243 114.79 273.446 113.842 273.852 113.233C274.261 112.621 274.882 112.316 275.717 112.316C276.532 112.316 277.149 112.635 277.568 113.273C277.987 113.912 278.196 114.846 278.196 116.076ZM274.43 116.076C274.43 117.071 274.532 117.781 274.734 118.206C274.941 118.632 275.268 118.845 275.717 118.845C276.166 118.845 276.494 118.629 276.7 118.196C276.909 117.764 277.014 117.057 277.014 116.076C277.014 115.099 276.909 114.392 276.7 113.957C276.494 113.518 276.166 113.298 275.717 113.298C275.268 113.298 274.941 113.513 274.734 113.942C274.532 114.371 274.43 115.082 274.43 116.076ZM288.187 116.007C288.187 117.21 287.853 118.131 287.184 118.77C286.516 119.405 285.553 119.723 284.296 119.723H282.256V112.43H284.511C285.671 112.43 286.574 112.743 287.219 113.368C287.864 113.993 288.187 114.873 288.187 116.007ZM286.93 116.047C286.93 114.301 286.114 113.428 284.481 113.428H283.448V118.72H284.296C286.052 118.72 286.93 117.829 286.93 116.047ZM294.282 119.723L293.554 117.698H290.766L290.053 119.723H288.796L291.524 112.4H292.821L295.549 119.723H294.282ZM293.24 116.67L292.557 114.685C292.507 114.552 292.437 114.342 292.347 114.056C292.261 113.77 292.201 113.561 292.167 113.428C292.078 113.837 291.946 114.284 291.773 114.77L291.115 116.67H293.24ZM296.512 119.723V112.43H297.704V119.723H296.512Z" class="path-14"/> -<rect x="217.807" y="107.63" width="16.7824" height="16.7824" rx="1.82418" stroke-width="0.72967" class="rect-5"/> -<path d="M26.3038 77.3907C26.3038 78.5579 26.0078 79.4757 25.4159 80.1441C24.8273 80.8124 24.0076 81.1466 22.9568 81.1466C21.8828 81.1466 21.0531 80.8191 20.4678 80.164C19.8859 79.5056 19.5949 78.5778 19.5949 77.3807C19.5949 76.1936 19.8876 75.2741 20.4728 74.6224C21.0581 73.9673 21.8894 73.6397 22.9668 73.6397C24.0143 73.6397 24.8323 73.9723 25.4209 74.6373C26.0095 75.3024 26.3038 76.2202 26.3038 77.3907ZM20.4928 77.3907C20.4928 78.3783 20.7023 79.1282 21.1213 79.6403C21.5436 80.149 22.1554 80.4034 22.9568 80.4034C23.7649 80.4034 24.3751 80.149 24.7874 79.6403C25.1998 79.1315 25.4059 78.3816 25.4059 77.3907C25.4059 76.4097 25.1998 75.6665 24.7874 75.1611C24.3784 74.6523 23.7715 74.3979 22.9668 74.3979C22.1588 74.3979 21.5436 74.6539 21.1213 75.166C20.7023 75.6748 20.4928 76.4164 20.4928 77.3907ZM30.354 81.1466C29.9982 81.1466 29.6723 81.0818 29.3764 80.9521C29.0837 80.8191 28.8377 80.6162 28.6381 80.3436H28.5783C28.6182 80.6628 28.6381 80.9654 28.6381 81.2514V83.501H27.8101V75.58H28.4835L28.5982 76.3282H28.6381C28.851 76.029 29.0987 75.8128 29.3814 75.6798C29.664 75.5468 29.9882 75.4803 30.354 75.4803C31.0789 75.4803 31.6376 75.728 32.03 76.2235C32.4257 76.719 32.6235 77.414 32.6235 78.3085C32.6235 79.2063 32.4224 79.9046 32.02 80.4034C31.621 80.8989 31.0656 81.1466 30.354 81.1466ZM30.2343 76.1836C29.6756 76.1836 29.2716 76.3382 29.0222 76.6475C28.7728 76.9567 28.6448 77.4489 28.6381 78.1239V78.3085C28.6381 79.0766 28.7662 79.627 29.0222 79.9595C29.2783 80.2887 29.6889 80.4533 30.2542 80.4533C30.7264 80.4533 31.0956 80.2621 31.3616 79.8797C31.6309 79.4973 31.7656 78.9702 31.7656 78.2985C31.7656 77.6168 31.6309 77.0947 31.3616 76.7323C31.0956 76.3665 30.7198 76.1836 30.2343 76.1836ZM35.8408 80.4633C35.9871 80.4633 36.1284 80.4533 36.2648 80.4334C36.4011 80.4101 36.5092 80.3868 36.589 80.3635V80.997C36.4992 81.0402 36.3662 81.0751 36.1899 81.1017C36.017 81.1317 35.8607 81.1466 35.7211 81.1466C34.6636 81.1466 34.1349 80.5896 34.1349 79.4757V76.2235H33.3518V75.8245L34.1349 75.4803L34.4841 74.3131H34.9629V75.58H36.5491V76.2235H34.9629V79.4407C34.9629 79.77 35.041 80.0227 35.1973 80.1989C35.3536 80.3752 35.5681 80.4633 35.8408 80.4633ZM38.5143 81.0469H37.6863V75.58H38.5143V81.0469ZM37.6165 74.0986C37.6165 73.9091 37.6631 73.7711 37.7562 73.6846C37.8493 73.5948 37.9657 73.5499 38.1053 73.5499C38.2383 73.5499 38.3531 73.5948 38.4495 73.6846C38.5459 73.7744 38.5942 73.9124 38.5942 74.0986C38.5942 74.2848 38.5459 74.4245 38.4495 74.5176C38.3531 74.6074 38.2383 74.6523 38.1053 74.6523C37.9657 74.6523 37.8493 74.6074 37.7562 74.5176C37.6631 74.4245 37.6165 74.2848 37.6165 74.0986ZM44.9887 78.3085C44.9887 79.1997 44.7643 79.8963 44.3154 80.3984C43.8664 80.8972 43.2463 81.1466 42.4548 81.1466C41.966 81.1466 41.5321 81.0319 41.153 80.8025C40.7739 80.573 40.4813 80.2438 40.2751 79.8148C40.0689 79.3859 39.9658 78.8838 39.9658 78.3085C39.9658 77.4173 40.1886 76.724 40.6342 76.2285C41.0798 75.7297 41.6983 75.4803 42.4898 75.4803C43.2546 75.4803 43.8615 75.7347 44.3104 76.2434C44.7626 76.7522 44.9887 77.4406 44.9887 78.3085ZM40.8238 78.3085C40.8238 79.0068 40.9634 79.5388 41.2428 79.9046C41.5221 80.2704 41.9328 80.4533 42.4748 80.4533C43.0168 80.4533 43.4275 80.2721 43.7068 79.9096C43.9895 79.5438 44.1308 79.0101 44.1308 78.3085C44.1308 77.6135 43.9895 77.0864 43.7068 76.7273C43.4275 76.3648 43.0135 76.1836 42.4648 76.1836C41.9228 76.1836 41.5138 76.3615 41.2378 76.7173C40.9618 77.0731 40.8238 77.6035 40.8238 78.3085ZM50.1862 81.0469V77.5104C50.1862 77.0648 50.0848 76.7323 49.882 76.5128C49.6791 76.2933 49.3615 76.1836 48.9292 76.1836C48.3573 76.1836 47.9383 76.3382 47.6723 76.6475C47.4063 76.9567 47.2732 77.4672 47.2732 78.1788V81.0469H46.4452V75.58H47.1186L47.2533 76.3282H47.2932C47.4628 76.0589 47.7005 75.8511 48.0065 75.7047C48.3124 75.5551 48.6532 75.4803 49.029 75.4803C49.6874 75.4803 50.1829 75.6399 50.5154 75.9591C50.848 76.275 51.0142 76.7822 51.0142 77.4805V81.0469H50.1862ZM56.2466 79.5555C56.2466 80.0642 56.0571 80.4566 55.678 80.7326C55.2989 81.0086 54.7668 81.1466 54.0818 81.1466C53.3569 81.1466 52.7916 81.0319 52.3859 80.8025V80.0343C52.6486 80.1673 52.9296 80.2721 53.2289 80.3486C53.5315 80.425 53.8225 80.4633 54.1018 80.4633C54.5341 80.4633 54.8666 80.3951 55.0994 80.2588C55.3322 80.1191 55.4485 79.908 55.4485 79.6253C55.4485 79.4125 55.3554 79.2313 55.1692 79.0816C54.9863 78.9286 54.6272 78.7491 54.0918 78.5429C53.583 78.3534 53.2206 78.1888 53.0044 78.0491C52.7916 77.9061 52.632 77.7448 52.5256 77.5653C52.4225 77.3857 52.371 77.1712 52.371 76.9218C52.371 76.4762 52.5522 76.1254 52.9146 75.8694C53.2771 75.61 53.7742 75.4803 54.4061 75.4803C54.9946 75.4803 55.5699 75.6 56.1319 75.8394L55.8376 76.5128C55.2889 76.2867 54.7918 76.1736 54.3462 76.1736C53.9538 76.1736 53.6579 76.2351 53.4583 76.3582C53.2588 76.4812 53.1591 76.6508 53.1591 76.8669C53.1591 77.0133 53.1956 77.138 53.2688 77.241C53.3453 77.3441 53.4666 77.4422 53.6329 77.5353C53.7992 77.6284 54.1184 77.7631 54.5906 77.9394C55.239 78.1755 55.6763 78.4132 55.9024 78.6526C56.1319 78.8921 56.2466 79.193 56.2466 79.5555ZM62.716 76.2235H61.3244V81.0469H60.4964V76.2235H59.5187V75.8494L60.4964 75.5501V75.2459C60.4964 73.9024 61.0833 73.2307 62.2571 73.2307C62.5464 73.2307 62.8856 73.2889 63.2747 73.4053L63.0602 74.0687C62.741 73.9656 62.4683 73.9141 62.2422 73.9141C61.9296 73.9141 61.6985 74.0188 61.5488 74.2283C61.3992 74.4345 61.3244 74.767 61.3244 75.2259V75.58H62.716V76.2235ZM64.4917 75.58V79.1265C64.4917 79.5721 64.5932 79.9046 64.796 80.1241C64.9989 80.3436 65.3164 80.4533 65.7487 80.4533C66.3207 80.4533 66.738 80.297 67.0007 79.9844C67.2667 79.6719 67.3997 79.1614 67.3997 78.4531V75.58H68.2277V81.0469H67.5444L67.4247 80.3136H67.3798C67.2102 80.583 66.9741 80.7892 66.6715 80.9322C66.3722 81.0751 66.0297 81.1466 65.644 81.1466C64.9789 81.1466 64.4801 80.9887 64.1476 80.6728C63.8184 80.3569 63.6538 79.8514 63.6538 79.1564V75.58H64.4917ZM73.7295 81.0469V77.5104C73.7295 77.0648 73.6281 76.7323 73.4252 76.5128C73.2224 76.2933 72.9048 76.1836 72.4725 76.1836C71.9006 76.1836 71.4816 76.3382 71.2155 76.6475C70.9495 76.9567 70.8165 77.4672 70.8165 78.1788V81.0469H69.9885V75.58H70.6619L70.7966 76.3282H70.8365C71.0061 76.0589 71.2438 75.8511 71.5497 75.7047C71.8557 75.5551 72.1965 75.4803 72.5723 75.4803C73.2307 75.4803 73.7262 75.6399 74.0587 75.9591C74.3912 76.275 74.5575 76.7822 74.5575 77.4805V81.0469H73.7295ZM79.9844 80.3136H79.9395C79.5571 80.869 78.9852 81.1466 78.2237 81.1466C77.5087 81.1466 76.9517 80.9022 76.5527 80.4134C76.157 79.9246 75.9591 79.2296 75.9591 78.3284C75.9591 77.4273 76.1586 76.7273 76.5577 76.2285C76.9567 75.7297 77.512 75.4803 78.2237 75.4803C78.9652 75.4803 79.5338 75.7496 79.9295 76.2883H79.9944L79.9595 75.8943L79.9395 75.5102V73.2856H80.7675V81.0469H80.0942L79.9844 80.3136ZM78.3284 80.4533C78.8937 80.4533 79.3027 80.3003 79.5554 79.9944C79.8115 79.6852 79.9395 79.188 79.9395 78.503V78.3284C79.9395 77.5536 79.8098 77.0016 79.5505 76.6724C79.2944 76.3399 78.8837 76.1736 78.3184 76.1736C77.8329 76.1736 77.4605 76.3632 77.2011 76.7422C76.9451 77.118 76.817 77.6501 76.817 78.3384C76.817 79.0367 76.9451 79.5638 77.2011 79.9196C77.4572 80.2754 77.8329 80.4533 78.3284 80.4533ZM84.8377 81.1466C84.0297 81.1466 83.3912 80.9006 82.9223 80.4084C82.4568 79.9163 82.224 79.2329 82.224 78.3584C82.224 77.4771 82.4402 76.7772 82.8725 76.2584C83.3081 75.7397 83.8917 75.4803 84.6232 75.4803C85.3083 75.4803 85.8503 75.7064 86.2493 76.1587C86.6484 76.6076 86.8479 77.2011 86.8479 77.9394V78.4631H83.082C83.0986 79.1049 83.2599 79.592 83.5658 79.9246C83.875 80.2571 84.309 80.4234 84.8676 80.4234C85.4562 80.4234 86.0382 80.3003 86.6134 80.0543V80.7925C86.3208 80.9189 86.0432 81.0086 85.7805 81.0618C85.5211 81.1184 85.2068 81.1466 84.8377 81.1466ZM84.6133 76.1736C84.1743 76.1736 83.8235 76.3166 83.5608 76.6026C83.3014 76.8886 83.1485 77.2843 83.1019 77.7897H85.96C85.96 77.2676 85.8436 76.8686 85.6109 76.5926C85.3781 76.3133 85.0456 76.1736 84.6133 76.1736ZM91.9855 80.3136H91.9406C91.5582 80.869 90.9862 81.1466 90.2247 81.1466C89.5098 81.1466 88.9528 80.9022 88.5538 80.4134C88.1581 79.9246 87.9602 79.2296 87.9602 78.3284C87.9602 77.4273 88.1597 76.7273 88.5588 76.2285C88.9578 75.7297 89.5131 75.4803 90.2247 75.4803C90.9663 75.4803 91.5349 75.7496 91.9306 76.2883H91.9955L91.9606 75.8943L91.9406 75.5102V73.2856H92.7686V81.0469H92.0952L91.9855 80.3136ZM90.3295 80.4533C90.8948 80.4533 91.3038 80.3003 91.5565 79.9944C91.8126 79.6852 91.9406 79.188 91.9406 78.503V78.3284C91.9406 77.5536 91.8109 77.0016 91.5515 76.6724C91.2955 76.3399 90.8848 76.1736 90.3195 76.1736C89.834 76.1736 89.4616 76.3632 89.2022 76.7422C88.9462 77.118 88.8181 77.6501 88.8181 78.3384C88.8181 79.0367 88.9462 79.5638 89.2022 79.9196C89.4583 80.2754 89.834 80.4533 90.3295 80.4533Z" class="path-15"/> -<line x1="18.9714" y1="46.3344" x2="313.029" y2="46.3344" stroke-width="0.72967" class="line-2"/> -<g clip-path="url(#clip2_13917_211177)"> -<path d="M26.9173 23.5121L23.903 25.3636L20.8867 23.5121L23.903 18.3086L26.9173 23.5121ZM23.903 25.9582L20.8867 24.1066L23.903 28.524L26.9193 24.1066L23.903 25.9582Z" class="path-16"/> -</g> -<path d="M40.1418 25.4776C40.1418 26.1194 39.9091 26.6199 39.4435 26.979C38.978 27.3382 38.3462 27.5177 37.5481 27.5177C36.6835 27.5177 36.0184 27.4063 35.5529 27.1835V26.3655C35.8522 26.4919 36.1781 26.5916 36.5305 26.6648C36.883 26.7379 37.2322 26.7745 37.578 26.7745C38.1433 26.7745 38.569 26.6681 38.8549 26.4553C39.1409 26.2391 39.2839 25.9399 39.2839 25.5575C39.2839 25.3047 39.2324 25.0986 39.1293 24.9389C39.0295 24.776 38.8599 24.6264 38.6205 24.49C38.3844 24.3537 38.0236 24.1991 37.5381 24.0261C36.8597 23.7834 36.3743 23.4958 36.0816 23.1632C35.7923 22.8307 35.6477 22.3967 35.6477 21.8614C35.6477 21.2994 35.8588 20.8521 36.2811 20.5196C36.7035 20.1871 37.2621 20.0208 37.9571 20.0208C38.682 20.0208 39.3487 20.1538 39.9573 20.4198L39.6929 21.1581C39.091 20.9053 38.5058 20.779 37.9372 20.779C37.4882 20.779 37.1374 20.8754 36.8847 21.0683C36.632 21.2611 36.5056 21.5288 36.5056 21.8713C36.5056 22.1241 36.5522 22.3319 36.6453 22.4948C36.7384 22.6544 36.8947 22.8024 37.1141 22.9388C37.3369 23.0718 37.6761 23.2198 38.1317 23.3827C38.8965 23.6554 39.4219 23.948 39.7079 24.2606C39.9972 24.5732 40.1418 24.9788 40.1418 25.4776ZM43.818 27.5177C43.0099 27.5177 42.3715 27.2717 41.9026 26.7795C41.4371 26.2874 41.2043 25.604 41.2043 24.7294C41.2043 23.8482 41.4204 23.1483 41.8527 22.6295C42.2883 22.1108 42.8719 21.8514 43.6035 21.8514C44.2885 21.8514 44.8305 22.0775 45.2296 22.5297C45.6286 22.9787 45.8281 23.5722 45.8281 24.3105V24.8342H42.0622C42.0788 25.476 42.2401 25.9631 42.546 26.2957C42.8553 26.6282 43.2893 26.7945 43.8479 26.7945C44.4365 26.7945 45.0184 26.6714 45.5937 26.4254V27.1636C45.3011 27.2899 45.0234 27.3797 44.7607 27.4329C44.5013 27.4895 44.1871 27.5177 43.818 27.5177ZM43.5935 22.5447C43.1546 22.5447 42.8038 22.6877 42.5411 22.9737C42.2817 23.2597 42.1287 23.6554 42.0822 24.1608H44.9403C44.9403 23.6387 44.8239 23.2397 44.5911 22.9637C44.3583 22.6844 44.0258 22.5447 43.5935 22.5447ZM49.5542 27.5177C48.7461 27.5177 48.1076 27.2717 47.6388 26.7795C47.1732 26.2874 46.9405 25.604 46.9405 24.7294C46.9405 23.8482 47.1566 23.1483 47.5889 22.6295C48.0245 22.1108 48.6081 21.8514 49.3397 21.8514C50.0247 21.8514 50.5667 22.0775 50.9658 22.5297C51.3648 22.9787 51.5643 23.5722 51.5643 24.3105V24.8342H47.7984C47.815 25.476 47.9763 25.9631 48.2822 26.2957C48.5915 26.6282 49.0254 26.7945 49.5841 26.7945C50.1727 26.7945 50.7546 26.6714 51.3299 26.4254V27.1636C51.0373 27.2899 50.7596 27.3797 50.4969 27.4329C50.2375 27.4895 49.9233 27.5177 49.5542 27.5177ZM49.3297 22.5447C48.8908 22.5447 48.5399 22.6877 48.2772 22.9737C48.0179 23.2597 47.8649 23.6554 47.8183 24.1608H50.6765C50.6765 23.6387 50.5601 23.2397 50.3273 22.9637C50.0945 22.6844 49.762 22.5447 49.3297 22.5447ZM59.3755 27.418V23.8815C59.3755 23.4359 59.2741 23.1034 59.0712 22.8839C58.8684 22.6644 58.5508 22.5547 58.1185 22.5547C57.5432 22.5547 57.1226 22.711 56.8566 23.0236C56.5939 23.3361 56.4625 23.8482 56.4625 24.5599V27.418H55.6345V19.6567H56.4625V22.006C56.4625 22.2887 56.4492 22.5231 56.4226 22.7093H56.4725C56.6354 22.4466 56.8665 22.2404 57.1658 22.0908C57.4684 21.9378 57.8126 21.8614 58.1983 21.8614C58.8667 21.8614 59.3672 22.021 59.6997 22.3402C60.0356 22.6561 60.2035 23.1599 60.2035 23.8516V27.418H59.3755ZM66.628 24.6796C66.628 25.5708 66.4036 26.2674 65.9546 26.7695C65.5057 27.2683 64.8855 27.5177 64.0941 27.5177C63.6053 27.5177 63.1713 27.403 62.7923 27.1736C62.4132 26.9441 62.1205 26.6149 61.9144 26.1859C61.7082 25.757 61.6051 25.2548 61.6051 24.6796C61.6051 23.7884 61.8279 23.0951 62.2735 22.5996C62.7191 22.1008 63.3376 21.8514 64.129 21.8514C64.8939 21.8514 65.5007 22.1058 65.9497 22.6145C66.4019 23.1233 66.628 23.8117 66.628 24.6796ZM62.4631 24.6796C62.4631 25.3779 62.6027 25.9099 62.882 26.2757C63.1614 26.6415 63.572 26.8244 64.1141 26.8244C64.6561 26.8244 65.0668 26.6432 65.3461 26.2807C65.6288 25.9149 65.7701 25.3812 65.7701 24.6796C65.7701 23.9846 65.6288 23.4575 65.3461 23.0984C65.0668 22.7359 64.6528 22.5547 64.1041 22.5547C63.5621 22.5547 63.1531 22.7326 62.8771 23.0884C62.6011 23.4442 62.4631 23.9746 62.4631 24.6796ZM72.5488 27.418L71.5462 24.2107C71.483 24.0145 71.3649 23.5689 71.192 22.8739H71.1521C71.0191 23.4558 70.9027 23.9048 70.803 24.2207L69.7704 27.418H68.8128L67.3213 21.9511H68.1893C68.5417 23.3245 68.8094 24.3703 68.9923 25.0886C69.1785 25.8069 69.2849 26.2907 69.3116 26.5401H69.3515C69.388 26.3505 69.4462 26.1061 69.526 25.8069C69.6092 25.5042 69.6807 25.2648 69.7405 25.0886L70.7431 21.9511H71.6409L72.6186 25.0886C72.8048 25.6605 72.9312 26.141 72.9977 26.5301H73.0376C73.0509 26.4104 73.0858 26.2258 73.1423 25.9764C73.2022 25.727 73.5497 24.3853 74.1848 21.9511H75.0427L73.5314 27.418H72.5488ZM85.6572 27.418V23.8615C85.6572 23.4259 85.5641 23.1 85.3778 22.8839C85.1916 22.6644 84.9023 22.5547 84.5099 22.5547C83.9945 22.5547 83.6138 22.7027 83.3677 22.9986C83.1216 23.2946 82.9986 23.7501 82.9986 24.3653V27.418H82.1706V23.8615C82.1706 23.4259 82.0775 23.1 81.8912 22.8839C81.705 22.6644 81.4141 22.5547 81.0183 22.5547C80.4996 22.5547 80.1188 22.711 79.8761 23.0236C79.6367 23.3328 79.517 23.8416 79.517 24.5499V27.418H78.689V21.9511H79.3623L79.497 22.6993H79.5369C79.6932 22.4333 79.9127 22.2255 80.1953 22.0758C80.4813 21.9262 80.8005 21.8514 81.153 21.8514C82.0076 21.8514 82.5663 22.1606 82.829 22.7791H82.8689C83.0318 22.4932 83.2679 22.267 83.5772 22.1008C83.8864 21.9345 84.2389 21.8514 84.6346 21.8514C85.2531 21.8514 85.7154 22.011 86.0213 22.3302C86.3305 22.6461 86.4852 23.1532 86.4852 23.8516V27.418H85.6572ZM88.9742 21.9511V25.4976C88.9742 25.9432 89.0756 26.2757 89.2784 26.4952C89.4813 26.7147 89.7989 26.8244 90.2311 26.8244C90.8031 26.8244 91.2204 26.6681 91.4831 26.3555C91.7492 26.0429 91.8822 25.5325 91.8822 24.8242V21.9511H92.7102V27.418H92.0268L91.9071 26.6847H91.8622C91.6926 26.9541 91.4565 27.1603 91.1539 27.3032C90.8546 27.4462 90.5121 27.5177 90.1264 27.5177C89.4613 27.5177 88.9625 27.3598 88.63 27.0439C88.3008 26.728 88.1362 26.2225 88.1362 25.5275V21.9511H88.9742ZM96.6557 27.5177C95.8642 27.5177 95.2507 27.275 94.8151 26.7895C94.3828 26.3007 94.1667 25.6107 94.1667 24.7195C94.1667 23.805 94.3861 23.0984 94.8251 22.5996C95.2673 22.1008 95.8958 21.8514 96.7105 21.8514C96.9732 21.8514 97.2359 21.8796 97.4986 21.9362C97.7613 21.9927 97.9675 22.0592 98.1171 22.1357L97.8628 22.839C97.6799 22.7658 97.4803 22.706 97.2642 22.6594C97.048 22.6096 96.8568 22.5846 96.6906 22.5846C95.5799 22.5846 95.0246 23.2929 95.0246 24.7095C95.0246 25.3812 95.1593 25.8966 95.4286 26.2558C95.7013 26.6149 96.1037 26.7945 96.6357 26.7945C97.0913 26.7945 97.5585 26.6964 98.0373 26.5002V27.2334C97.6715 27.423 97.211 27.5177 96.6557 27.5177ZM103.08 27.418V23.8815C103.08 23.4359 102.979 23.1034 102.776 22.8839C102.573 22.6644 102.255 22.5547 101.823 22.5547C101.248 22.5547 100.827 22.711 100.561 23.0236C100.299 23.3361 100.167 23.8482 100.167 24.5599V27.418H99.3392V19.6567H100.167V22.006C100.167 22.2887 100.154 22.5231 100.127 22.7093H100.177C100.34 22.4466 100.571 22.2404 100.871 22.0908C101.173 21.9378 101.517 21.8614 101.903 21.8614C102.571 21.8614 103.072 22.021 103.404 22.3402C103.74 22.6561 103.908 23.1599 103.908 23.8516V27.418H103.08ZM107.4 21.9511H108.288L109.485 25.0686C109.747 25.7802 109.91 26.294 109.974 26.6099H110.013C110.057 26.4403 110.146 26.151 110.283 25.742C110.422 25.3297 110.875 24.066 111.64 21.9511H112.527L110.178 28.1761C109.945 28.7913 109.673 29.2269 109.36 29.483C109.051 29.7424 108.67 29.8721 108.218 29.8721C107.965 29.8721 107.716 29.8438 107.47 29.7873V29.1239C107.652 29.1638 107.857 29.1837 108.083 29.1837C108.652 29.1837 109.057 28.8645 109.3 28.226L109.604 27.4479L107.4 21.9511ZM118.134 24.6796C118.134 25.5708 117.909 26.2674 117.461 26.7695C117.012 27.2683 116.391 27.5177 115.6 27.5177C115.111 27.5177 114.677 27.403 114.298 27.1736C113.919 26.9441 113.626 26.6149 113.42 26.1859C113.214 25.757 113.111 25.2548 113.111 24.6796C113.111 23.7884 113.334 23.0951 113.779 22.5996C114.225 22.1008 114.844 21.8514 115.635 21.8514C116.4 21.8514 117.007 22.1058 117.456 22.6145C117.908 23.1233 118.134 23.8117 118.134 24.6796ZM113.969 24.6796C113.969 25.3779 114.109 25.9099 114.388 26.2757C114.667 26.6415 115.078 26.8244 115.62 26.8244C116.162 26.8244 116.573 26.6432 116.852 26.2807C117.135 25.9149 117.276 25.3812 117.276 24.6796C117.276 23.9846 117.135 23.4575 116.852 23.0984C116.573 22.7359 116.159 22.5547 115.61 22.5547C115.068 22.5547 114.659 22.7326 114.383 23.0884C114.107 23.4442 113.969 23.9746 113.969 24.6796ZM120.369 21.9511V25.4976C120.369 25.9432 120.47 26.2757 120.673 26.4952C120.876 26.7147 121.193 26.8244 121.625 26.8244C122.197 26.8244 122.615 26.6681 122.877 26.3555C123.143 26.0429 123.277 25.5325 123.277 24.8242V21.9511H124.105V27.418H123.421L123.301 26.6847H123.257C123.087 26.9541 122.851 27.1603 122.548 27.3032C122.249 27.4462 121.906 27.5177 121.521 27.5177C120.856 27.5177 120.357 27.3598 120.024 27.0439C119.695 26.728 119.531 26.2225 119.531 25.5275V21.9511H120.369ZM130.704 27.5177C129.912 27.5177 129.299 27.275 128.863 26.7895C128.431 26.3007 128.215 25.6107 128.215 24.7195C128.215 23.805 128.434 23.0984 128.873 22.5996C129.315 22.1008 129.944 21.8514 130.758 21.8514C131.021 21.8514 131.284 21.8796 131.547 21.9362C131.809 21.9927 132.015 22.0592 132.165 22.1357L131.911 22.839C131.728 22.7658 131.528 22.706 131.312 22.6594C131.096 22.6096 130.905 22.5846 130.739 22.5846C129.628 22.5846 129.073 23.2929 129.073 24.7095C129.073 25.3812 129.207 25.8966 129.477 26.2558C129.749 26.6149 130.152 26.7945 130.684 26.7945C131.139 26.7945 131.606 26.6964 132.085 26.5002V27.2334C131.72 27.423 131.259 27.5177 130.704 27.5177ZM136.749 27.418L136.584 26.6398H136.545C136.272 26.9824 135.999 27.2151 135.727 27.3382C135.457 27.4579 135.12 27.5177 134.714 27.5177C134.172 27.5177 133.746 27.3781 133.437 27.0987C133.131 26.8194 132.978 26.422 132.978 25.9066C132.978 24.8026 133.861 24.224 135.627 24.1708L136.555 24.1409V23.8017C136.555 23.3727 136.461 23.0568 136.275 22.854C136.092 22.6478 135.798 22.5447 135.392 22.5447C134.937 22.5447 134.421 22.6844 133.846 22.9637L133.592 22.3302C133.861 22.1839 134.155 22.0692 134.475 21.9861C134.797 21.9029 135.12 21.8614 135.442 21.8614C136.094 21.8614 136.576 22.006 136.889 22.2953C137.205 22.5846 137.363 23.0485 137.363 23.687V27.418H136.749ZM134.879 26.8344C135.394 26.8344 135.798 26.693 136.091 26.4104C136.387 26.1277 136.535 25.732 136.535 25.2233V24.7294L135.707 24.7644C135.048 24.7876 134.573 24.8907 134.28 25.0736C133.991 25.2532 133.846 25.5342 133.846 25.9166C133.846 26.2159 133.936 26.4436 134.115 26.5999C134.298 26.7562 134.553 26.8344 134.879 26.8344ZM142.814 27.418V23.8815C142.814 23.4359 142.713 23.1034 142.51 22.8839C142.307 22.6644 141.99 22.5547 141.557 22.5547C140.986 22.5547 140.567 22.7093 140.3 23.0186C140.034 23.3278 139.901 23.8383 139.901 24.5499V27.418H139.073V21.9511H139.747L139.882 22.6993H139.921C140.091 22.43 140.329 22.2222 140.635 22.0758C140.941 21.9262 141.281 21.8514 141.657 21.8514C142.316 21.8514 142.811 22.011 143.144 22.3302C143.476 22.6461 143.642 23.1532 143.642 23.8516V27.418H142.814ZM150.311 27.5177C149.503 27.5177 148.865 27.2717 148.396 26.7795C147.93 26.2874 147.698 25.604 147.698 24.7294C147.698 23.8482 147.914 23.1483 148.346 22.6295C148.782 22.1108 149.365 21.8514 150.097 21.8514C150.782 21.8514 151.324 22.0775 151.723 22.5297C152.122 22.9787 152.322 23.5722 152.322 24.3105V24.8342H148.556C148.572 25.476 148.734 25.9631 149.039 26.2957C149.349 26.6282 149.783 26.7945 150.341 26.7945C150.93 26.7945 151.512 26.6714 152.087 26.4254V27.1636C151.794 27.2899 151.517 27.3797 151.254 27.4329C150.995 27.4895 150.68 27.5177 150.311 27.5177ZM150.087 22.5447C149.648 22.5447 149.297 22.6877 149.034 22.9737C148.775 23.2597 148.622 23.6554 148.576 24.1608H151.434C151.434 23.6387 151.317 23.2397 151.085 22.9637C150.852 22.6844 150.519 22.5447 150.087 22.5447ZM157.1 27.418L156.935 26.6398H156.896C156.623 26.9824 156.35 27.2151 156.077 27.3382C155.808 27.4579 155.471 27.5177 155.065 27.5177C154.523 27.5177 154.097 27.3781 153.788 27.0987C153.482 26.8194 153.329 26.422 153.329 25.9066C153.329 24.8026 154.212 24.224 155.978 24.1708L156.905 24.1409V23.8017C156.905 23.3727 156.812 23.0568 156.626 22.854C156.443 22.6478 156.149 22.5447 155.743 22.5447C155.288 22.5447 154.772 22.6844 154.197 22.9637L153.943 22.3302C154.212 22.1839 154.506 22.0692 154.825 21.9861C155.148 21.9029 155.471 21.8614 155.793 21.8614C156.445 21.8614 156.927 22.006 157.24 22.2953C157.556 22.5846 157.714 23.0485 157.714 23.687V27.418H157.1ZM155.23 26.8344C155.745 26.8344 156.149 26.693 156.442 26.4104C156.738 26.1277 156.886 25.732 156.886 25.2233V24.7294L156.058 24.7644C155.399 24.7876 154.924 24.8907 154.631 25.0736C154.342 25.2532 154.197 25.5342 154.197 25.9166C154.197 26.2159 154.287 26.4436 154.466 26.5999C154.649 26.7562 154.904 26.8344 155.23 26.8344ZM161.918 21.8514C162.161 21.8514 162.379 21.8713 162.572 21.9112L162.457 22.6794C162.231 22.6295 162.031 22.6046 161.859 22.6046C161.416 22.6046 161.037 22.7841 160.721 23.1433C160.409 23.5024 160.252 23.9497 160.252 24.485V27.418H159.424V21.9511H160.108L160.203 22.9637H160.242C160.445 22.6079 160.69 22.3336 160.976 22.1407C161.262 21.9478 161.576 21.8514 161.918 21.8514ZM167.335 27.418V23.8815C167.335 23.4359 167.234 23.1034 167.031 22.8839C166.828 22.6644 166.511 22.5547 166.078 22.5547C165.506 22.5547 165.087 22.7093 164.821 23.0186C164.555 23.3278 164.422 23.8383 164.422 24.5499V27.418H163.594V21.9511H164.268L164.402 22.6993H164.442C164.612 22.43 164.85 22.2222 165.156 22.0758C165.462 21.9262 165.802 21.8514 166.178 21.8514C166.837 21.8514 167.332 22.011 167.665 22.3302C167.997 22.6461 168.163 23.1532 168.163 23.8516V27.418H167.335ZM175.067 21.8614C175.785 21.8614 176.342 22.1074 176.738 22.5996C177.137 23.0884 177.336 23.7817 177.336 24.6796C177.336 25.5774 177.135 26.2757 176.733 26.7745C176.334 27.27 175.778 27.5177 175.067 27.5177C174.711 27.5177 174.385 27.4529 174.089 27.3232C173.796 27.1902 173.55 26.9873 173.351 26.7147H173.291L173.116 27.418H172.523V19.6567H173.351V21.5421C173.351 21.9644 173.338 22.3435 173.311 22.6794H173.351C173.737 22.134 174.309 21.8614 175.067 21.8614ZM174.947 22.5547C174.382 22.5547 173.974 22.7176 173.725 23.0435C173.476 23.3661 173.351 23.9114 173.351 24.6796C173.351 25.4477 173.479 25.9981 173.735 26.3306C173.991 26.6598 174.402 26.8244 174.967 26.8244C175.476 26.8244 175.855 26.6398 176.104 26.2707C176.354 25.8983 176.478 25.3646 176.478 24.6696C176.478 23.958 176.354 23.4276 176.104 23.0784C175.855 22.7293 175.469 22.5547 174.947 22.5547ZM177.92 21.9511H178.808L180.005 25.0686C180.268 25.7802 180.43 26.294 180.494 26.6099H180.534C180.577 26.4403 180.667 26.151 180.803 25.742C180.943 25.3297 181.395 24.066 182.16 21.9511H183.047L180.698 28.1761C180.465 28.7913 180.193 29.2269 179.88 29.483C179.571 29.7424 179.19 29.8721 178.738 29.8721C178.485 29.8721 178.236 29.8438 177.99 29.7873V29.1239C178.173 29.1638 178.377 29.1837 178.603 29.1837C179.172 29.1837 179.578 28.8645 179.82 28.226L180.125 27.4479L177.92 21.9511ZM189.053 22.5946H187.661V27.418H186.833V22.5946H185.856V22.2205L186.833 21.9212V21.6169C186.833 20.2735 187.42 19.6018 188.594 19.6018C188.883 19.6018 189.223 19.66 189.612 19.7764L189.397 20.4398C189.078 20.3367 188.805 20.2852 188.579 20.2852C188.267 20.2852 188.035 20.3899 187.886 20.5994C187.736 20.8056 187.661 21.1381 187.661 21.597V21.9511H189.053V22.5946ZM190.829 21.9511V25.4976C190.829 25.9432 190.93 26.2757 191.133 26.4952C191.336 26.7147 191.653 26.8244 192.086 26.8244C192.658 26.8244 193.075 26.6681 193.338 26.3555C193.604 26.0429 193.737 25.5325 193.737 24.8242V21.9511H194.565V27.418H193.881L193.762 26.6847H193.717C193.547 26.9541 193.311 27.1603 193.008 27.3032C192.709 27.4462 192.367 27.5177 191.981 27.5177C191.316 27.5177 190.817 27.3598 190.485 27.0439C190.155 26.728 189.991 26.2225 189.991 25.5275V21.9511H190.829ZM200.066 27.418V23.8815C200.066 23.4359 199.965 23.1034 199.762 22.8839C199.559 22.6644 199.242 22.5547 198.81 22.5547C198.238 22.5547 197.819 22.7093 197.553 23.0186C197.287 23.3278 197.153 23.8383 197.153 24.5499V27.418H196.325V21.9511H196.999L197.134 22.6993H197.173C197.343 22.43 197.581 22.2222 197.887 22.0758C198.193 21.9262 198.533 21.8514 198.909 21.8514C199.568 21.8514 200.063 22.011 200.396 22.3302C200.728 22.6461 200.894 23.1532 200.894 23.8516V27.418H200.066ZM206.321 26.6847H206.277C205.894 27.2401 205.322 27.5177 204.561 27.5177C203.846 27.5177 203.289 27.2733 202.89 26.7845C202.494 26.2957 202.296 25.6007 202.296 24.6995C202.296 23.7984 202.496 23.0984 202.895 22.5996C203.294 22.1008 203.849 21.8514 204.561 21.8514C205.302 21.8514 205.871 22.1207 206.267 22.6594H206.331L206.296 22.2654L206.277 21.8813V19.6567H207.105V27.418H206.431L206.321 26.6847ZM204.665 26.8244C205.231 26.8244 205.64 26.6714 205.892 26.3655C206.148 26.0563 206.277 25.5591 206.277 24.8741V24.6995C206.277 23.9247 206.147 23.3727 205.887 23.0435C205.631 22.711 205.221 22.5447 204.655 22.5447C204.17 22.5447 203.797 22.7343 203.538 23.1133C203.282 23.4891 203.154 24.0212 203.154 24.7095C203.154 25.4078 203.282 25.9349 203.538 26.2907C203.794 26.6465 204.17 26.8244 204.665 26.8244ZM209.693 27.418H208.865V21.9511H209.693V27.418ZM208.795 20.4697C208.795 20.2802 208.842 20.1422 208.935 20.0557C209.028 19.9659 209.145 19.921 209.284 19.921C209.417 19.921 209.532 19.9659 209.628 20.0557C209.725 20.1455 209.773 20.2835 209.773 20.4697C209.773 20.6559 209.725 20.7956 209.628 20.8887C209.532 20.9785 209.417 21.0234 209.284 21.0234C209.145 21.0234 209.028 20.9785 208.935 20.8887C208.842 20.7956 208.795 20.6559 208.795 20.4697ZM215.19 27.418V23.8815C215.19 23.4359 215.089 23.1034 214.886 22.8839C214.683 22.6644 214.365 22.5547 213.933 22.5547C213.361 22.5547 212.942 22.7093 212.676 23.0186C212.41 23.3278 212.277 23.8383 212.277 24.5499V27.418H211.449V21.9511H212.122L212.257 22.6993H212.297C212.467 22.43 212.704 22.2222 213.01 22.0758C213.316 21.9262 213.657 21.8514 214.033 21.8514C214.691 21.8514 215.187 22.011 215.519 22.3302C215.852 22.6461 216.018 23.1532 216.018 23.8516V27.418H215.19ZM222.198 21.9511V22.4749L221.186 22.5946C221.279 22.711 221.362 22.8639 221.435 23.0535C221.508 23.2397 221.545 23.4509 221.545 23.687C221.545 24.2223 221.362 24.6496 220.996 24.9689C220.63 25.2881 220.128 25.4477 219.49 25.4477C219.327 25.4477 219.174 25.4344 219.031 25.4078C218.678 25.594 218.502 25.8285 218.502 26.1111C218.502 26.2608 218.564 26.3722 218.687 26.4453C218.81 26.5151 219.021 26.5501 219.32 26.5501H220.288C220.88 26.5501 221.334 26.6748 221.649 26.9242C221.969 27.1736 222.128 27.536 222.128 28.0115C222.128 28.6167 221.886 29.0773 221.4 29.3932C220.915 29.7124 220.206 29.8721 219.275 29.8721C218.56 29.8721 218.008 29.739 217.619 29.473C217.233 29.207 217.041 28.8312 217.041 28.3457C217.041 28.0132 217.147 27.7256 217.36 27.4828C217.573 27.2401 217.872 27.0755 218.258 26.989C218.118 26.9258 218 26.8277 217.903 26.6947C217.81 26.5617 217.764 26.4071 217.764 26.2308C217.764 26.0313 217.817 25.8567 217.923 25.7071C218.03 25.5575 218.198 25.4128 218.427 25.2731C218.145 25.1568 217.913 24.9589 217.734 24.6796C217.558 24.4002 217.47 24.081 217.47 23.7219C217.47 23.1233 217.649 22.6628 218.008 22.3402C218.367 22.0143 218.876 21.8514 219.535 21.8514C219.821 21.8514 220.078 21.8846 220.308 21.9511H222.198ZM217.839 28.3358C217.839 28.6317 217.963 28.8562 218.213 29.0091C218.462 29.1621 218.82 29.2386 219.285 29.2386C219.98 29.2386 220.494 29.1338 220.826 28.9243C221.162 28.7182 221.33 28.4372 221.33 28.0814C221.33 27.7854 221.239 27.5792 221.056 27.4629C220.873 27.3498 220.529 27.2933 220.023 27.2933H219.031C218.655 27.2933 218.362 27.3831 218.153 27.5626C217.943 27.7422 217.839 27.9999 217.839 28.3358ZM218.288 23.7019C218.288 24.0843 218.396 24.3736 218.612 24.5698C218.828 24.766 219.129 24.8641 219.515 24.8641C220.323 24.8641 220.727 24.4717 220.727 23.687C220.727 22.8656 220.318 22.4549 219.5 22.4549C219.111 22.4549 218.811 22.5597 218.602 22.7692C218.392 22.9787 218.288 23.2896 218.288 23.7019ZM229.336 27.418L229.171 26.6398H229.131C228.859 26.9824 228.586 27.2151 228.313 27.3382C228.044 27.4579 227.707 27.5177 227.301 27.5177C226.759 27.5177 226.333 27.3781 226.024 27.0987C225.718 26.8194 225.565 26.422 225.565 25.9066C225.565 24.8026 226.448 24.224 228.214 24.1708L229.141 24.1409V23.8017C229.141 23.3727 229.048 23.0568 228.862 22.854C228.679 22.6478 228.385 22.5447 227.979 22.5447C227.524 22.5447 227.008 22.6844 226.433 22.9637L226.179 22.3302C226.448 22.1839 226.742 22.0692 227.061 21.9861C227.384 21.9029 227.707 21.8614 228.029 21.8614C228.681 21.8614 229.163 22.006 229.476 22.2953C229.792 22.5846 229.949 23.0485 229.949 23.687V27.418H229.336ZM227.465 26.8344C227.981 26.8344 228.385 26.693 228.678 26.4104C228.973 26.1277 229.121 25.732 229.121 25.2233V24.7294L228.293 24.7644C227.635 24.7876 227.16 24.8907 226.867 25.0736C226.578 25.2532 226.433 25.5342 226.433 25.9166C226.433 26.2159 226.523 26.4436 226.702 26.5999C226.885 26.7562 227.14 26.8344 227.465 26.8344ZM234.204 27.5177C233.848 27.5177 233.523 27.4529 233.227 27.3232C232.934 27.1902 232.688 26.9873 232.488 26.7147H232.428C232.468 27.0339 232.488 27.3365 232.488 27.6225V29.8721H231.66V21.9511H232.334L232.448 22.6993H232.488C232.701 22.4001 232.949 22.1839 233.232 22.0509C233.514 21.9179 233.838 21.8514 234.204 21.8514C234.929 21.8514 235.488 22.0991 235.88 22.5946C236.276 23.0901 236.474 23.7851 236.474 24.6796C236.474 25.5774 236.273 26.2757 235.87 26.7745C235.471 27.27 234.916 27.5177 234.204 27.5177ZM234.084 22.5547C233.526 22.5547 233.122 22.7093 232.872 23.0186C232.623 23.3278 232.495 23.82 232.488 24.495V24.6796C232.488 25.4477 232.616 25.9981 232.872 26.3306C233.128 26.6598 233.539 26.8244 234.104 26.8244C234.577 26.8244 234.946 26.6332 235.212 26.2508C235.481 25.8684 235.616 25.3413 235.616 24.6696C235.616 23.9879 235.481 23.4658 235.212 23.1034C234.946 22.7376 234.57 22.5547 234.084 22.5547ZM240.469 27.5177C240.113 27.5177 239.787 27.4529 239.491 27.3232C239.199 27.1902 238.953 26.9873 238.753 26.7147H238.693C238.733 27.0339 238.753 27.3365 238.753 27.6225V29.8721H237.925V21.9511H238.599L238.713 22.6993H238.753C238.966 22.4001 239.214 22.1839 239.496 22.0509C239.779 21.9179 240.103 21.8514 240.469 21.8514C241.194 21.8514 241.753 22.0991 242.145 22.5946C242.541 23.0901 242.739 23.7851 242.739 24.6796C242.739 25.5774 242.537 26.2757 242.135 26.7745C241.736 27.27 241.181 27.5177 240.469 27.5177ZM240.349 22.5547C239.791 22.5547 239.387 22.7093 239.137 23.0186C238.888 23.3278 238.76 23.82 238.753 24.495V24.6796C238.753 25.4477 238.881 25.9981 239.137 26.3306C239.393 26.6598 239.804 26.8244 240.369 26.8244C240.842 26.8244 241.211 26.6332 241.477 26.2508C241.746 25.8684 241.881 25.3413 241.881 24.6696C241.881 23.9879 241.746 23.4658 241.477 23.1034C241.211 22.7376 240.835 22.5547 240.349 22.5547ZM246.5 27.5177C245.692 27.5177 245.053 27.2717 244.584 26.7795C244.119 26.2874 243.886 25.604 243.886 24.7294C243.886 23.8482 244.102 23.1483 244.534 22.6295C244.97 22.1108 245.554 21.8514 246.285 21.8514C246.97 21.8514 247.512 22.0775 247.911 22.5297C248.31 22.9787 248.51 23.5722 248.51 24.3105V24.8342H244.744C244.76 25.476 244.922 25.9631 245.228 26.2957C245.537 26.6282 245.971 26.7945 246.53 26.7945C247.118 26.7945 247.7 26.6714 248.275 26.4254V27.1636C247.983 27.2899 247.705 27.3797 247.442 27.4329C247.183 27.4895 246.869 27.5177 246.5 27.5177ZM246.275 22.5447C245.836 22.5447 245.485 22.6877 245.223 22.9737C244.963 23.2597 244.81 23.6554 244.764 24.1608H247.622C247.622 23.6387 247.506 23.2397 247.273 22.9637C247.04 22.6844 246.707 22.5447 246.275 22.5447ZM253.288 27.418L253.124 26.6398H253.084C252.811 26.9824 252.538 27.2151 252.266 27.3382C251.996 27.4579 251.659 27.5177 251.253 27.5177C250.711 27.5177 250.285 27.3781 249.976 27.0987C249.67 26.8194 249.517 26.422 249.517 25.9066C249.517 24.8026 250.4 24.224 252.166 24.1708L253.094 24.1409V23.8017C253.094 23.3727 253.001 23.0568 252.814 22.854C252.631 22.6478 252.337 22.5447 251.931 22.5447C251.476 22.5447 250.961 22.6844 250.385 22.9637L250.131 22.3302C250.4 22.1839 250.694 22.0692 251.014 21.9861C251.336 21.9029 251.659 21.8614 251.981 21.8614C252.633 21.8614 253.115 22.006 253.428 22.2953C253.744 22.5846 253.902 23.0485 253.902 23.687V27.418H253.288ZM251.418 26.8344C251.933 26.8344 252.337 26.693 252.63 26.4104C252.926 26.1277 253.074 25.732 253.074 25.2233V24.7294L252.246 24.7644C251.587 24.7876 251.112 24.8907 250.819 25.0736C250.53 25.2532 250.385 25.5342 250.385 25.9166C250.385 26.2159 250.475 26.4436 250.655 26.5999C250.837 26.7562 251.092 26.8344 251.418 26.8344ZM256.441 27.418H255.613V19.6567H256.441V27.418ZM261.723 25.9266C261.723 26.4353 261.533 26.8277 261.154 27.1037C260.775 27.3797 260.243 27.5177 259.558 27.5177C258.833 27.5177 258.268 27.403 257.862 27.1736V26.4054C258.125 26.5384 258.406 26.6432 258.705 26.7197C259.008 26.7961 259.299 26.8344 259.578 26.8344C260.01 26.8344 260.343 26.7662 260.576 26.6299C260.808 26.4902 260.925 26.279 260.925 25.9964C260.925 25.7836 260.832 25.6023 260.645 25.4527C260.463 25.2997 260.103 25.1202 259.568 24.914C259.059 24.7245 258.697 24.5599 258.481 24.4202C258.268 24.2772 258.108 24.1159 258.002 23.9364C257.899 23.7568 257.847 23.5423 257.847 23.2929C257.847 22.8473 258.028 22.4965 258.391 22.2404C258.753 21.9811 259.251 21.8514 259.882 21.8514C260.471 21.8514 261.046 21.9711 261.608 22.2105L261.314 22.8839C260.765 22.6578 260.268 22.5447 259.822 22.5447C259.43 22.5447 259.134 22.6062 258.935 22.7293C258.735 22.8523 258.635 23.0219 258.635 23.238C258.635 23.3844 258.672 23.5091 258.745 23.6121C258.822 23.7152 258.943 23.8133 259.109 23.9064C259.275 23.9995 259.595 24.1342 260.067 24.3105C260.715 24.5466 261.153 24.7843 261.379 25.0237C261.608 25.2632 261.723 25.5641 261.723 25.9266ZM262.955 26.8892C262.955 26.6664 263.005 26.4985 263.105 26.3855C263.208 26.2691 263.354 26.2109 263.544 26.2109C263.736 26.2109 263.886 26.2691 263.992 26.3855C264.102 26.4985 264.157 26.6664 264.157 26.8892C264.157 27.1054 264.102 27.2717 263.992 27.388C263.883 27.5044 263.733 27.5626 263.544 27.5626C263.374 27.5626 263.233 27.5111 263.12 27.408C263.01 27.3016 262.955 27.1287 262.955 26.8892Z" class="path-17"/> -<defs> -<clipPath id="clip0_13917_211177"> -<rect width="15.1653" height="15.3231" fill="white" transform="translate(183.512 305.367)" class="rect-6"/> -</clipPath> -<clipPath id="clip1_13917_211177"> -<rect width="15.1653" height="15.3231" fill="white" transform="translate(28.822 305.367)" class="rect-7"/> -</clipPath> -<clipPath id="clip2_13917_211177"> -<rect width="10.2154" height="10.2154" fill="white" transform="translate(18.9714 18.3086)" class="rect-8"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/appeal/stage-one.svg b/web/src/assets/svgs/mini-guides/appeal/stage-one.svg deleted file mode 100644 index fe3933e8d..000000000 --- a/web/src/assets/svgs/mini-guides/appeal/stage-one.svg +++ /dev/null @@ -1,59 +0,0 @@ -<svg viewBox="0 0 335 339" fill="none" xmlns="http://www.w3.org/2000/svg"> -<rect width="335" height="339" rx="3" class="rect-1"/> -<g filter="url(#filter0_d_14063_183957)"> -<rect x="13" y="88" width="308" height="113.099" rx="2.13395" class="rect-2"/> -<rect x="13.3557" y="88.3557" width="307.289" height="112.388" rx="1.77829" stroke-width="0.711316" class="rect-3"/> -</g> -<rect x="30.0715" y="178.336" width="273.857" height="5.69053" rx="2.84527" class="rect-4"/> -<rect x="30.0715" y="178.336" width="164.314" height="5.69053" rx="2.84527" class="rect-5"/> -<path d="M91.1747 160.877C91.1747 162.106 90.9802 163.023 90.5912 163.629C90.2055 164.236 89.6139 164.539 88.8164 164.539C88.0514 164.539 87.4695 164.229 87.0708 163.61C86.672 162.988 86.4727 162.077 86.4727 160.877C86.4727 159.639 86.6656 158.72 87.0513 158.12C87.4371 157.52 88.0254 157.221 88.8164 157.221C89.5879 157.221 90.1731 157.533 90.5718 158.159C90.9738 158.785 91.1747 159.691 91.1747 160.877ZM87.2896 160.877C87.2896 161.911 87.4111 162.665 87.6543 163.138C87.8974 163.608 88.2848 163.843 88.8164 163.843C89.3545 163.843 89.7435 163.605 89.9834 163.129C90.2265 162.649 90.3481 161.898 90.3481 160.877C90.3481 159.856 90.2265 159.109 89.9834 158.636C89.7435 158.159 89.3545 157.921 88.8164 157.921C88.2848 157.921 87.8974 158.156 87.6543 158.626C87.4111 159.093 87.2896 159.843 87.2896 160.877ZM92.4147 163.926C92.4147 163.709 92.4633 163.545 92.5606 163.435C92.661 163.321 92.8037 163.265 92.9885 163.265C93.1765 163.265 93.3223 163.321 93.4261 163.435C93.5331 163.545 93.5865 163.709 93.5865 163.926C93.5865 164.137 93.5331 164.299 93.4261 164.412C93.3191 164.526 93.1732 164.582 92.9885 164.582C92.8231 164.582 92.6854 164.532 92.5751 164.432C92.4682 164.328 92.4147 164.159 92.4147 163.926ZM99.5285 160.877C99.5285 162.106 99.334 163.023 98.945 163.629C98.5593 164.236 97.9677 164.539 97.1702 164.539C96.4052 164.539 95.8233 164.229 95.4246 163.61C95.0258 162.988 94.8265 162.077 94.8265 160.877C94.8265 159.639 95.0194 158.72 95.4051 158.12C95.7909 157.52 96.3792 157.221 97.1702 157.221C97.9417 157.221 98.5269 157.533 98.9256 158.159C99.3275 158.785 99.5285 159.691 99.5285 160.877ZM95.6434 160.877C95.6434 161.911 95.7649 162.665 96.0081 163.138C96.2512 163.608 96.6386 163.843 97.1702 163.843C97.7083 163.843 98.0973 163.605 98.3372 163.129C98.5803 162.649 98.7019 161.898 98.7019 160.877C98.7019 159.856 98.5803 159.109 98.3372 158.636C98.0973 158.159 97.7083 157.921 97.1702 157.921C96.6386 157.921 96.2512 158.156 96.0081 158.626C95.7649 159.093 95.6434 159.843 95.6434 160.877ZM105.227 160.877C105.227 162.106 105.033 163.023 104.644 163.629C104.258 164.236 103.667 164.539 102.869 164.539C102.104 164.539 101.522 164.229 101.123 163.61C100.725 162.988 100.525 162.077 100.525 160.877C100.525 159.639 100.718 158.72 101.104 158.12C101.49 157.52 102.078 157.221 102.869 157.221C103.641 157.221 104.226 157.533 104.624 158.159C105.026 158.785 105.227 159.691 105.227 160.877ZM101.342 160.877C101.342 161.911 101.464 162.665 101.707 163.138C101.95 163.608 102.337 163.843 102.869 163.843C103.407 163.843 103.796 163.605 104.036 163.129C104.279 162.649 104.401 161.898 104.401 160.877C104.401 159.856 104.279 159.109 104.036 158.636C103.796 158.159 103.407 157.921 102.869 157.921C102.337 157.921 101.95 158.156 101.707 158.626C101.464 159.093 101.342 159.843 101.342 160.877ZM111.223 162.808H110.168V164.441H109.395V162.808H105.937V162.103L109.312 157.294H110.168V162.073H111.223V162.808ZM109.395 162.073V159.71C109.395 159.247 109.411 158.723 109.443 158.14H109.404C109.249 158.451 109.103 158.709 108.967 158.913L106.745 162.073H109.395ZM118.954 164.441H114.991V157.332H118.954V158.067H115.818V160.357H118.765V161.086H115.818V163.702H118.954V164.441ZM122.723 164.441H121.896V158.067H119.645V157.332H124.974V158.067H122.723V164.441ZM131.446 164.441H130.619V161.096H126.875V164.441H126.049V157.332H126.875V160.357H130.619V157.332H131.446V164.441ZM140.466 161.772C140.466 162.641 140.247 163.32 139.81 163.809C139.372 164.296 138.767 164.539 137.996 164.539C137.519 164.539 137.096 164.427 136.727 164.203C136.357 163.979 136.072 163.659 135.871 163.24C135.67 162.822 135.569 162.333 135.569 161.772C135.569 160.903 135.787 160.227 136.221 159.744C136.655 159.258 137.258 159.015 138.03 159.015C138.776 159.015 139.367 159.263 139.805 159.759C140.246 160.255 140.466 160.926 140.466 161.772ZM136.406 161.772C136.406 162.453 136.542 162.971 136.814 163.328C137.087 163.684 137.487 163.863 138.015 163.863C138.544 163.863 138.944 163.686 139.216 163.333C139.492 162.976 139.63 162.456 139.63 161.772C139.63 161.094 139.492 160.581 139.216 160.23C138.944 159.877 138.54 159.7 138.006 159.7C137.477 159.7 137.078 159.874 136.809 160.221C136.54 160.568 136.406 161.085 136.406 161.772ZM142.644 159.112V162.569C142.644 163.004 142.743 163.328 142.941 163.542C143.139 163.756 143.448 163.863 143.87 163.863C144.427 163.863 144.834 163.71 145.09 163.406C145.35 163.101 145.479 162.603 145.479 161.913V159.112H146.286V164.441H145.62L145.504 163.727H145.46C145.295 163.989 145.064 164.19 144.769 164.33C144.478 164.469 144.144 164.539 143.768 164.539C143.119 164.539 142.633 164.385 142.309 164.077C141.988 163.769 141.828 163.276 141.828 162.599V159.112H142.644ZM149.724 163.872C149.867 163.872 150.005 163.863 150.138 163.843C150.27 163.821 150.376 163.798 150.454 163.775V164.393C150.366 164.435 150.236 164.469 150.065 164.495C149.896 164.524 149.744 164.539 149.608 164.539C148.577 164.539 148.061 163.996 148.061 162.91V159.739H147.298V159.35L148.061 159.015L148.402 157.877H148.868V159.112H150.415V159.739H148.868V162.876C148.868 163.197 148.945 163.443 149.097 163.615C149.249 163.787 149.458 163.872 149.724 163.872ZM158.71 161.772C158.71 162.641 158.491 163.32 158.054 163.809C157.616 164.296 157.012 164.539 156.24 164.539C155.764 164.539 155.34 164.427 154.971 164.203C154.601 163.979 154.316 163.659 154.115 163.24C153.914 162.822 153.814 162.333 153.814 161.772C153.814 160.903 154.031 160.227 154.465 159.744C154.9 159.258 155.503 159.015 156.274 159.015C157.02 159.015 157.611 159.263 158.049 159.759C158.49 160.255 158.71 160.926 158.71 161.772ZM154.65 161.772C154.65 162.453 154.786 162.971 155.058 163.328C155.331 163.684 155.731 163.863 156.259 163.863C156.788 163.863 157.188 163.686 157.461 163.333C157.736 162.976 157.874 162.456 157.874 161.772C157.874 161.094 157.736 160.581 157.461 160.23C157.188 159.877 156.785 159.7 156.25 159.7C155.721 159.7 155.323 159.874 155.054 160.221C154.785 160.568 154.65 161.085 154.65 161.772ZM162.532 159.739H161.175V164.441H160.368V159.739H159.415V159.375L160.368 159.083V158.786C160.368 157.477 160.94 156.822 162.085 156.822C162.367 156.822 162.697 156.879 163.077 156.992L162.868 157.639C162.556 157.538 162.291 157.488 162.07 157.488C161.765 157.488 161.54 157.59 161.394 157.794C161.248 157.995 161.175 158.32 161.175 158.767V159.112H162.532V159.739ZM170.434 160.877C170.434 162.106 170.239 163.023 169.85 163.629C169.464 164.236 168.873 164.539 168.075 164.539C167.31 164.539 166.728 164.229 166.33 163.61C165.931 162.988 165.732 162.077 165.732 160.877C165.732 159.639 165.925 158.72 166.31 158.12C166.696 157.52 167.284 157.221 168.075 157.221C168.847 157.221 169.432 157.533 169.831 158.159C170.233 158.785 170.434 159.691 170.434 160.877ZM166.549 160.877C166.549 161.911 166.67 162.665 166.913 163.138C167.156 163.608 167.544 163.843 168.075 163.843C168.614 163.843 169.003 163.605 169.242 163.129C169.486 162.649 169.607 161.898 169.607 160.877C169.607 159.856 169.486 159.109 169.242 158.636C169.003 158.159 168.614 157.921 168.075 157.921C167.544 157.921 167.156 158.156 166.913 158.626C166.67 159.093 166.549 159.843 166.549 160.877ZM171.674 163.926C171.674 163.709 171.722 163.545 171.82 163.435C171.92 163.321 172.063 163.265 172.247 163.265C172.435 163.265 172.581 163.321 172.685 163.435C172.792 163.545 172.846 163.709 172.846 163.926C172.846 164.137 172.792 164.299 172.685 164.412C172.578 164.526 172.432 164.582 172.247 164.582C172.082 164.582 171.944 164.532 171.834 164.432C171.727 164.328 171.674 164.159 171.674 163.926ZM178.788 160.877C178.788 162.106 178.593 163.023 178.204 163.629C177.818 164.236 177.227 164.539 176.429 164.539C175.664 164.539 175.082 164.229 174.684 163.61C174.285 162.988 174.085 162.077 174.085 160.877C174.085 159.639 174.278 158.72 174.664 158.12C175.05 157.52 175.638 157.221 176.429 157.221C177.201 157.221 177.786 157.533 178.185 158.159C178.587 158.785 178.788 159.691 178.788 160.877ZM174.902 160.877C174.902 161.911 175.024 162.665 175.267 163.138C175.51 163.608 175.898 163.843 176.429 163.843C176.967 163.843 177.356 163.605 177.596 163.129C177.839 162.649 177.961 161.898 177.961 160.877C177.961 159.856 177.839 159.109 177.596 158.636C177.356 158.159 176.967 157.921 176.429 157.921C175.898 157.921 175.51 158.156 175.267 158.626C175.024 159.093 174.902 159.843 174.902 160.877ZM182.765 164.441H181.977V159.375C181.977 158.953 181.99 158.555 182.016 158.178C181.948 158.247 181.872 158.318 181.788 158.392C181.703 158.467 181.318 158.783 180.63 159.341L180.203 158.786L182.084 157.332H182.765V164.441ZM192.514 164.441H188.551V157.332H192.514V158.067H189.378V160.357H192.325V161.086H189.378V163.702H192.514V164.441ZM196.283 164.441H195.456V158.067H193.205V157.332H198.534V158.067H196.283V164.441ZM205.006 164.441H204.18V161.096H200.435V164.441H199.609V157.332H200.435V160.357H204.18V157.332H205.006V164.441ZM211.857 159.015C212.094 159.015 212.306 159.034 212.494 159.073L212.383 159.822C212.162 159.773 211.968 159.749 211.799 159.749C211.368 159.749 210.998 159.924 210.69 160.274C210.386 160.624 210.233 161.06 210.233 161.582V164.441H209.426V159.112H210.092L210.185 160.099H210.224C210.421 159.752 210.66 159.485 210.938 159.297C211.217 159.109 211.524 159.015 211.857 159.015ZM215.743 164.539C214.955 164.539 214.333 164.299 213.875 163.819C213.422 163.339 213.195 162.673 213.195 161.821C213.195 160.961 213.405 160.279 213.827 159.773C214.251 159.268 214.82 159.015 215.534 159.015C216.201 159.015 216.73 159.235 217.119 159.676C217.508 160.114 217.702 160.692 217.702 161.412V161.923H214.031C214.047 162.548 214.204 163.023 214.503 163.347C214.804 163.672 215.227 163.834 215.772 163.834C216.346 163.834 216.913 163.714 217.474 163.474V164.193C217.188 164.317 216.918 164.404 216.662 164.456C216.409 164.511 216.102 164.539 215.743 164.539ZM215.524 159.691C215.096 159.691 214.754 159.83 214.498 160.109C214.245 160.388 214.096 160.773 214.05 161.266H216.837C216.837 160.757 216.723 160.368 216.496 160.099C216.269 159.827 215.945 159.691 215.524 159.691ZM221.096 163.863C221.634 163.863 222.027 163.719 222.273 163.43C222.519 163.141 222.651 162.655 222.667 161.971V161.791C222.667 161.046 222.54 160.509 222.288 160.182C222.035 159.854 221.634 159.691 221.087 159.691C220.613 159.691 220.25 159.876 219.997 160.245C219.748 160.611 219.623 161.13 219.623 161.801C219.623 162.472 219.746 162.984 219.992 163.338C220.242 163.688 220.61 163.863 221.096 163.863ZM220.975 164.539C220.287 164.539 219.751 164.297 219.365 163.814C218.979 163.331 218.787 162.657 218.787 161.791C218.787 160.919 218.981 160.239 219.37 159.749C219.759 159.26 220.3 159.015 220.994 159.015C221.724 159.015 222.284 159.29 222.677 159.841H222.72L222.837 159.112H223.474V166.834H222.667V164.553C222.667 164.229 222.685 163.954 222.72 163.727H222.657C222.284 164.268 221.724 164.539 220.975 164.539ZM225.949 159.112V162.569C225.949 163.004 226.048 163.328 226.246 163.542C226.443 163.756 226.753 163.863 227.174 163.863C227.732 163.863 228.139 163.71 228.395 163.406C228.654 163.101 228.784 162.603 228.784 161.913V159.112H229.591V164.441H228.925L228.808 163.727H228.764C228.599 163.989 228.369 164.19 228.074 164.33C227.782 164.469 227.448 164.539 227.072 164.539C226.424 164.539 225.938 164.385 225.614 164.077C225.293 163.769 225.132 163.276 225.132 162.599V159.112H225.949ZM232.115 164.441H231.308V159.112H232.115V164.441ZM231.239 157.668C231.239 157.483 231.285 157.349 231.376 157.264C231.466 157.177 231.58 157.133 231.716 157.133C231.846 157.133 231.957 157.177 232.051 157.264C232.145 157.352 232.193 157.486 232.193 157.668C232.193 157.849 232.145 157.986 232.051 158.076C231.957 158.164 231.846 158.208 231.716 158.208C231.58 158.208 231.466 158.164 231.376 158.076C231.285 157.986 231.239 157.849 231.239 157.668ZM236.258 159.015C236.494 159.015 236.707 159.034 236.895 159.073L236.783 159.822C236.562 159.773 236.368 159.749 236.199 159.749C235.768 159.749 235.399 159.924 235.091 160.274C234.786 160.624 234.633 161.06 234.633 161.582V164.441H233.826V159.112H234.492L234.585 160.099H234.624C234.822 159.752 235.06 159.485 235.339 159.297C235.617 159.109 235.924 159.015 236.258 159.015ZM240.143 164.539C239.355 164.539 238.733 164.299 238.276 163.819C237.822 163.339 237.595 162.673 237.595 161.821C237.595 160.961 237.805 160.279 238.227 159.773C238.652 159.268 239.22 159.015 239.934 159.015C240.601 159.015 241.13 159.235 241.519 159.676C241.908 160.114 242.102 160.692 242.102 161.412V161.923H238.431C238.447 162.548 238.605 163.023 238.903 163.347C239.204 163.672 239.627 163.834 240.172 163.834C240.746 163.834 241.313 163.714 241.874 163.474V164.193C241.589 164.317 241.318 164.404 241.062 164.456C240.809 164.511 240.503 164.539 240.143 164.539ZM239.924 159.691C239.496 159.691 239.154 159.83 238.898 160.109C238.645 160.388 238.496 160.773 238.451 161.266H241.237C241.237 160.757 241.123 160.368 240.896 160.099C240.67 159.827 240.345 159.691 239.924 159.691ZM247.111 163.727H247.067C246.694 164.268 246.137 164.539 245.394 164.539C244.697 164.539 244.154 164.3 243.765 163.824C243.38 163.347 243.187 162.67 243.187 161.791C243.187 160.913 243.381 160.23 243.77 159.744C244.159 159.258 244.701 159.015 245.394 159.015C246.117 159.015 246.671 159.277 247.057 159.803H247.12L247.086 159.418L247.067 159.044V156.875H247.874V164.441H247.218L247.111 163.727ZM245.496 163.863C246.047 163.863 246.446 163.714 246.693 163.415C246.942 163.114 247.067 162.629 247.067 161.962V161.791C247.067 161.036 246.941 160.498 246.688 160.177C246.438 159.853 246.038 159.691 245.487 159.691C245.013 159.691 244.65 159.876 244.397 160.245C244.148 160.611 244.023 161.13 244.023 161.801C244.023 162.482 244.148 162.996 244.397 163.342C244.647 163.689 245.013 163.863 245.496 163.863Z" class="path-1"/> -<path d="M35.7169 111.111C35.7169 111.853 35.4738 112.422 34.9875 112.817C34.5013 113.213 33.8092 113.411 32.9112 113.411H32.1721V116.07H31.01V108.961H33.0571C33.9453 108.961 34.6099 109.143 35.0507 109.506C35.4949 109.869 35.7169 110.404 35.7169 111.111ZM32.1721 112.433H32.7897C33.3861 112.433 33.8238 112.329 34.1026 112.122C34.3813 111.914 34.5207 111.59 34.5207 111.149C34.5207 110.741 34.3959 110.436 34.1463 110.235C33.8967 110.034 33.5077 109.934 32.9793 109.934H32.1721V112.433ZM40.3801 116.07L40.1515 115.321H40.1126C39.8533 115.649 39.5923 115.873 39.3298 115.993C39.0672 116.109 38.7301 116.168 38.3184 116.168C37.79 116.168 37.3767 116.025 37.0784 115.74C36.7834 115.454 36.6359 115.051 36.6359 114.529C36.6359 113.975 36.8418 113.556 37.2535 113.274C37.6652 112.992 38.2924 112.838 39.1353 112.812L40.064 112.783V112.496C40.064 112.153 39.983 111.897 39.8209 111.728C39.662 111.556 39.414 111.47 39.0769 111.47C38.8014 111.47 38.5372 111.511 38.2843 111.592C38.0315 111.673 37.7883 111.769 37.5549 111.879L37.1854 111.062C37.4771 110.91 37.7964 110.794 38.1433 110.717C38.4902 110.636 38.8176 110.595 39.1255 110.595C39.8095 110.595 40.325 110.744 40.6718 111.042C41.0219 111.341 41.197 111.809 41.197 112.448V116.07H40.3801ZM38.6782 115.292C39.0931 115.292 39.4254 115.177 39.675 114.947C39.9278 114.714 40.0543 114.388 40.0543 113.97V113.503L39.3638 113.532C38.8257 113.552 38.4334 113.642 38.1871 113.804C37.9439 113.963 37.8224 114.208 37.8224 114.539C37.8224 114.779 37.8937 114.965 38.0363 115.098C38.179 115.227 38.3929 115.292 38.6782 115.292ZM41.975 110.692H43.2198L44.3138 113.741C44.4792 114.176 44.5894 114.584 44.6445 114.967H44.6834C44.7126 114.788 44.7661 114.573 44.8439 114.32C44.9217 114.064 45.3333 112.855 46.0789 110.692H47.314L45.014 116.785C44.5959 117.903 43.8989 118.463 42.9232 118.463C42.6703 118.463 42.4239 118.435 42.1841 118.38V117.476C42.3559 117.514 42.552 117.534 42.7724 117.534C43.3235 117.534 43.7109 117.215 43.9346 116.576L44.1339 116.07L41.975 110.692ZM55.1572 116.07H50.3385V115.205L52.1717 113.362C52.713 112.808 53.0712 112.415 53.2463 112.185C53.4246 111.952 53.5542 111.733 53.6353 111.529C53.7163 111.324 53.7568 111.106 53.7568 110.872C53.7568 110.551 53.6596 110.299 53.4651 110.114C53.2738 109.929 53.008 109.837 52.6676 109.837C52.3953 109.837 52.1311 109.887 51.875 109.987C51.6222 110.088 51.3288 110.269 50.9949 110.532L50.3774 109.778C50.7729 109.444 51.157 109.208 51.5298 109.068C51.9026 108.929 52.2997 108.859 52.7211 108.859C53.3824 108.859 53.9124 109.033 54.3112 109.379C54.7099 109.723 54.9093 110.187 54.9093 110.77C54.9093 111.091 54.8509 111.396 54.7342 111.684C54.6207 111.973 54.4441 112.271 54.2042 112.579C53.9676 112.884 53.5721 113.297 53.0177 113.819L51.7827 115.015V115.064H55.1572V116.07ZM60.5789 110.595C60.5789 111.046 60.4477 111.422 60.1851 111.723C59.9225 112.021 59.553 112.222 59.0764 112.326V112.365C59.647 112.436 60.0749 112.615 60.3601 112.9C60.6454 113.182 60.788 113.558 60.788 114.028C60.788 114.712 60.5465 115.24 60.0635 115.613C59.5805 115.983 58.8933 116.168 58.0018 116.168C57.2141 116.168 56.5495 116.04 56.0082 115.783V114.767C56.3097 114.916 56.629 115.031 56.9661 115.112C57.3032 115.193 57.6274 115.234 57.9386 115.234C58.4897 115.234 58.9014 115.132 59.1737 114.928C59.446 114.723 59.5821 114.407 59.5821 113.979C59.5821 113.6 59.4314 113.321 59.1299 113.143C58.8284 112.965 58.3552 112.876 57.7101 112.876H57.0925V111.947H57.7198C58.8544 111.947 59.4217 111.555 59.4217 110.77C59.4217 110.465 59.3228 110.23 59.1251 110.065C58.9273 109.9 58.6356 109.817 58.2498 109.817C57.9807 109.817 57.7214 109.856 57.4718 109.934C57.2222 110.008 56.9272 110.156 56.5868 110.376L56.0276 109.579C56.6792 109.099 57.4361 108.859 58.2984 108.859C59.0148 108.859 59.574 109.013 59.976 109.321C60.378 109.629 60.5789 110.054 60.5789 110.595ZM66.5355 112.516C66.5355 113.751 66.3362 114.668 65.9374 115.268C65.542 115.868 64.9358 116.168 64.1189 116.168C63.3279 116.168 62.7282 115.858 62.3197 115.239C61.9113 114.62 61.7071 113.712 61.7071 112.516C61.7071 111.261 61.9048 110.337 62.3003 109.744C62.699 109.148 63.3052 108.849 64.1189 108.849C64.9131 108.849 65.5144 109.161 65.9229 109.783C66.3313 110.405 66.5355 111.316 66.5355 112.516ZM62.8643 112.516C62.8643 113.485 62.9632 114.177 63.1609 114.592C63.3619 115.007 63.6812 115.215 64.1189 115.215C64.5565 115.215 64.8758 115.004 65.0768 114.582C65.281 114.161 65.3831 113.472 65.3831 112.516C65.3831 111.563 65.281 110.874 65.0768 110.449C64.8758 110.021 64.5565 109.807 64.1189 109.807C63.6812 109.807 63.3619 110.016 63.1609 110.435C62.9632 110.853 62.8643 111.547 62.8643 112.516ZM76.2751 112.448C76.2751 113.621 75.9494 114.519 75.2978 115.142C74.6462 115.761 73.7077 116.07 72.4824 116.07H70.4936V108.961H72.6915C73.8228 108.961 74.7029 109.266 75.3318 109.875C75.9607 110.485 76.2751 111.342 76.2751 112.448ZM75.0498 112.487C75.0498 110.785 74.254 109.934 72.6623 109.934H71.6558V115.093H72.4824C74.194 115.093 75.0498 114.224 75.0498 112.487ZM82.2171 116.07L81.5072 114.096H78.7891L78.0937 116.07H76.8684L79.5282 108.932H80.7924L83.4522 116.07H82.2171ZM81.2009 113.094L80.5347 111.159C80.4861 111.03 80.418 110.825 80.3305 110.546C80.2462 110.268 80.1878 110.063 80.1554 109.934C80.0679 110.333 79.9399 110.769 79.7713 111.242L79.1294 113.094H81.2009ZM84.3907 116.07V108.961H85.5528V116.07H84.3907Z" class="path-2"/> -<circle cx="295.393" cy="113.606" r="8.18014" stroke-width="0.711316" class="circle-1"/> -<g clip-path="url(#clip0_14063_183957)"> -<path d="M38.4901 125.062L38.1129 124.685C37.9566 124.528 37.7033 124.528 37.547 124.685L37.4527 124.779L35.5666 122.893L35.6609 122.799C35.8171 122.642 35.8171 122.389 35.6609 122.233L35.2837 121.855C35.1274 121.699 34.8741 121.699 34.7178 121.855L32.643 123.93C32.4868 124.087 32.4868 124.34 32.643 124.496L33.0203 124.873C33.1765 125.03 33.4299 125.03 33.5861 124.873L33.6804 124.779L34.3406 125.439L32.9895 126.79L32.8952 126.696C32.6869 126.488 32.3491 126.488 32.1407 126.696L30.2278 128.609C30.0194 128.817 30.0194 129.155 30.2278 129.363L30.9823 130.118C31.1906 130.326 31.5284 130.326 31.7367 130.118L33.6497 128.205C33.858 127.997 33.858 127.659 33.6497 127.45L33.5554 127.356L34.9064 126.005L35.5666 126.665L35.4723 126.759C35.316 126.916 35.316 127.169 35.4723 127.325L35.8495 127.703C36.0058 127.859 36.2591 127.859 36.4153 127.703L38.4901 125.628C38.6464 125.472 38.6464 125.218 38.4901 125.062Z" class="path-3"/> -</g> -<path d="M41.9693 130.612C41.7082 130.612 41.5025 130.575 41.3525 130.5V129.896C41.5498 129.951 41.7554 129.979 41.9693 129.979C42.2444 129.979 42.4528 129.896 42.5945 129.729C42.739 129.562 42.8113 129.322 42.8113 129.008V122.914H43.5198V128.949C43.5198 129.477 43.3864 129.886 43.1197 130.175C42.8529 130.467 42.4695 130.612 41.9693 130.612ZM45.6871 124.44V127.403C45.6871 127.776 45.7718 128.053 45.9413 128.237C46.1108 128.42 46.3762 128.512 46.7374 128.512C47.2153 128.512 47.564 128.381 47.7835 128.12C48.0058 127.859 48.1169 127.432 48.1169 126.841V124.44H48.8088V129.008H48.2378L48.1378 128.395H48.1003C47.9586 128.62 47.7613 128.792 47.5084 128.912C47.2584 129.031 46.9722 129.091 46.6499 129.091C46.0941 129.091 45.6774 128.959 45.3995 128.695C45.1244 128.431 44.9869 128.009 44.9869 127.428V124.44H45.6871ZM52.364 124.356C52.5668 124.356 52.7488 124.373 52.91 124.406L52.8141 125.048C52.6252 125.007 52.4585 124.986 52.314 124.986C51.9444 124.986 51.6277 125.136 51.3637 125.436C51.1025 125.736 50.9719 126.11 50.9719 126.557V129.008H50.2801V124.44H50.8511L50.9303 125.286H50.9636C51.1331 124.989 51.3373 124.759 51.5763 124.598C51.8152 124.437 52.0778 124.356 52.364 124.356ZM53.0392 124.44H53.7811L54.7814 127.045C55.0009 127.639 55.137 128.069 55.1898 128.333H55.2232C55.2593 128.191 55.3343 127.949 55.4482 127.607C55.5649 127.263 55.9428 126.207 56.5819 124.44H57.3238L55.3607 129.641C55.1662 130.155 54.9384 130.519 54.6772 130.733C54.4188 130.95 54.1006 131.058 53.7227 131.058C53.5116 131.058 53.3032 131.035 53.0976 130.988V130.433C53.2504 130.467 53.4213 130.483 53.6102 130.483C54.0853 130.483 54.4243 130.216 54.6272 129.683L54.8814 129.033L53.0392 124.44ZM63.3922 128.395H63.3547C63.0351 128.859 62.5572 129.091 61.9209 129.091C61.3235 129.091 60.8581 128.887 60.5247 128.478C60.194 128.07 60.0287 127.489 60.0287 126.736C60.0287 125.983 60.1954 125.398 60.5289 124.982C60.8623 124.565 61.3263 124.356 61.9209 124.356C62.5406 124.356 63.0157 124.582 63.3463 125.032H63.4005L63.3714 124.702L63.3547 124.381V122.523H64.0465V129.008H63.4839L63.3922 128.395ZM62.0085 128.512C62.4808 128.512 62.8226 128.384 63.0338 128.128C63.2477 127.87 63.3547 127.455 63.3547 126.882V126.736C63.3547 126.089 63.2463 125.628 63.0296 125.353C62.8156 125.075 62.4725 124.936 62.0001 124.936C61.5945 124.936 61.2832 125.094 61.0665 125.411C60.8526 125.725 60.7456 126.169 60.7456 126.745C60.7456 127.328 60.8526 127.769 61.0665 128.066C61.2805 128.363 61.5945 128.512 62.0085 128.512ZM67.4475 129.091C66.7723 129.091 66.2388 128.886 65.8471 128.474C65.4581 128.063 65.2636 127.492 65.2636 126.761C65.2636 126.025 65.4442 125.44 65.8054 125.007C66.1694 124.573 66.657 124.356 67.2683 124.356C67.8407 124.356 68.2936 124.545 68.627 124.923C68.9605 125.298 69.1272 125.794 69.1272 126.411V126.849H65.9804C65.9943 127.385 66.1291 127.792 66.3847 128.07C66.6431 128.348 67.0057 128.487 67.4725 128.487C67.9643 128.487 68.4506 128.384 68.9313 128.178V128.795C68.6868 128.901 68.4548 128.976 68.2353 129.02C68.0185 129.068 67.756 129.091 67.4475 129.091ZM67.26 124.936C66.8932 124.936 66.6001 125.055 66.3806 125.294C66.1638 125.533 66.036 125.864 65.9971 126.286H68.3853C68.3853 125.85 68.288 125.517 68.0935 125.286C67.899 125.053 67.6212 124.936 67.26 124.936ZM72.1364 129.091C71.4751 129.091 70.9624 128.888 70.5984 128.483C70.2372 128.074 70.0566 127.498 70.0566 126.753C70.0566 125.989 70.24 125.398 70.6068 124.982C70.9763 124.565 71.5015 124.356 72.1822 124.356C72.4017 124.356 72.6212 124.38 72.8408 124.427C73.0603 124.475 73.2325 124.53 73.3576 124.594L73.145 125.182C72.9922 125.121 72.8255 125.071 72.6449 125.032C72.4643 124.99 72.3045 124.969 72.1656 124.969C71.2375 124.969 70.7735 125.561 70.7735 126.745C70.7735 127.306 70.886 127.737 71.1111 128.037C71.3389 128.337 71.6751 128.487 72.1197 128.487C72.5004 128.487 72.8908 128.405 73.2909 128.241V128.854C72.9852 129.012 72.6004 129.091 72.1364 129.091ZM75.0706 129.008H74.3787V124.44H75.0706V129.008ZM74.3203 123.202C74.3203 123.044 74.3592 122.928 74.437 122.856C74.5148 122.781 74.6121 122.744 74.7288 122.744C74.8399 122.744 74.9358 122.781 75.0164 122.856C75.097 122.931 75.1372 123.046 75.1372 123.202C75.1372 123.358 75.097 123.474 75.0164 123.552C74.9358 123.627 74.8399 123.665 74.7288 123.665C74.6121 123.665 74.5148 123.627 74.437 123.552C74.3592 123.474 74.3203 123.358 74.3203 123.202ZM79.4843 127.762C79.4843 128.187 79.326 128.515 79.0092 128.745C78.6924 128.976 78.2479 129.091 77.6755 129.091C77.0698 129.091 76.5974 128.995 76.2584 128.804V128.162C76.4779 128.273 76.7127 128.36 76.9628 128.424C77.2156 128.488 77.4588 128.52 77.6922 128.52C78.0534 128.52 78.3312 128.463 78.5257 128.349C78.7202 128.233 78.8175 128.056 78.8175 127.82C78.8175 127.642 78.7397 127.491 78.5841 127.366C78.4313 127.238 78.1312 127.088 77.6838 126.916C77.2587 126.757 76.9558 126.62 76.7752 126.503C76.5974 126.383 76.464 126.249 76.3751 126.099C76.289 125.949 76.2459 125.769 76.2459 125.561C76.2459 125.189 76.3973 124.896 76.7002 124.682C77.0031 124.465 77.4185 124.356 77.9464 124.356C78.4382 124.356 78.9189 124.456 79.3885 124.657L79.1426 125.219C78.6841 125.03 78.2687 124.936 77.8964 124.936C77.5685 124.936 77.3212 124.987 77.1545 125.09C76.9878 125.193 76.9044 125.335 76.9044 125.515C76.9044 125.637 76.935 125.742 76.9961 125.828C77.06 125.914 77.1614 125.996 77.3004 126.074C77.4393 126.151 77.706 126.264 78.1006 126.411C78.6424 126.609 79.0078 126.807 79.1968 127.007C79.3885 127.207 79.4843 127.459 79.4843 127.762ZM81.3057 129.008H80.6138V124.44H81.3057V129.008ZM80.5555 123.202C80.5555 123.044 80.5944 122.928 80.6722 122.856C80.75 122.781 80.8472 122.744 80.9639 122.744C81.0751 122.744 81.1709 122.781 81.2515 122.856C81.3321 122.931 81.3724 123.046 81.3724 123.202C81.3724 123.358 81.3321 123.474 81.2515 123.552C81.1709 123.627 81.0751 123.665 80.9639 123.665C80.8472 123.665 80.75 123.627 80.6722 123.552C80.5944 123.474 80.5555 123.358 80.5555 123.202ZM86.7156 126.72C86.7156 127.464 86.528 128.046 86.1529 128.466C85.7778 128.883 85.2596 129.091 84.5983 129.091C84.1899 129.091 83.8273 128.995 83.5105 128.804C83.1937 128.612 82.9492 128.337 82.777 127.978C82.6047 127.62 82.5185 127.2 82.5185 126.72C82.5185 125.975 82.7047 125.396 83.077 124.982C83.4494 124.565 83.9662 124.356 84.6275 124.356C85.2666 124.356 85.7737 124.569 86.1488 124.994C86.5266 125.419 86.7156 125.994 86.7156 126.72ZM83.2354 126.72C83.2354 127.303 83.3521 127.748 83.5855 128.053C83.8189 128.359 84.1621 128.512 84.615 128.512C85.0679 128.512 85.411 128.36 85.6444 128.058C85.8806 127.752 85.9987 127.306 85.9987 126.72C85.9987 126.139 85.8806 125.699 85.6444 125.398C85.411 125.096 85.0651 124.944 84.6066 124.944C84.1537 124.944 83.812 125.093 83.5814 125.39C83.3507 125.687 83.2354 126.131 83.2354 126.72ZM91.0585 129.008V126.053C91.0585 125.68 90.9738 125.403 90.8043 125.219C90.6348 125.036 90.3694 124.944 90.0082 124.944C89.5303 124.944 89.1802 125.073 88.9579 125.332C88.7356 125.59 88.6245 126.017 88.6245 126.611V129.008H87.9326V124.44H88.4953L88.6078 125.065H88.6411C88.7829 124.84 88.9815 124.666 89.2372 124.544C89.4928 124.419 89.7776 124.356 90.0916 124.356C90.6417 124.356 91.0557 124.49 91.3336 124.757C91.6114 125.021 91.7504 125.444 91.7504 126.028V129.008H91.0585ZM95.0097 127.036V126.403H97.0561V127.036H95.0097ZM105.784 129.008H105.083L103.854 124.927C103.796 124.747 103.73 124.519 103.658 124.244C103.586 123.969 103.548 123.804 103.545 123.748C103.484 124.115 103.387 124.516 103.254 124.952L102.062 129.008H101.361L99.7402 122.914H100.49L101.453 126.678C101.587 127.206 101.684 127.684 101.745 128.112C101.82 127.603 101.931 127.106 102.078 126.62L103.17 122.914H103.921L105.067 126.653C105.2 127.084 105.313 127.57 105.404 128.112C105.457 127.717 105.557 127.236 105.704 126.67L106.663 122.914H107.413L105.784 129.008ZM108.955 129.008H108.263V124.44H108.955V129.008ZM108.205 123.202C108.205 123.044 108.244 122.928 108.322 122.856C108.4 122.781 108.497 122.744 108.614 122.744C108.725 122.744 108.821 122.781 108.901 122.856C108.982 122.931 109.022 123.046 109.022 123.202C109.022 123.358 108.982 123.474 108.901 123.552C108.821 123.627 108.725 123.665 108.614 123.665C108.497 123.665 108.4 123.627 108.322 123.552C108.244 123.474 108.205 123.358 108.205 123.202ZM113.548 129.008V126.053C113.548 125.68 113.464 125.403 113.294 125.219C113.125 125.036 112.859 124.944 112.498 124.944C112.02 124.944 111.67 125.073 111.448 125.332C111.225 125.59 111.114 126.017 111.114 126.611V129.008H110.422V124.44H110.985L111.098 125.065H111.131C111.273 124.84 111.471 124.666 111.727 124.544C111.983 124.419 112.267 124.356 112.581 124.356C113.132 124.356 113.546 124.49 113.823 124.757C114.101 125.021 114.24 125.444 114.24 126.028V129.008H113.548ZM118.792 129.008V126.053C118.792 125.68 118.707 125.403 118.537 125.219C118.368 125.036 118.102 124.944 117.741 124.944C117.263 124.944 116.913 125.073 116.691 125.332C116.469 125.59 116.357 126.017 116.357 126.611V129.008H115.666V124.44H116.228L116.341 125.065H116.374C116.516 124.84 116.715 124.666 116.97 124.544C117.226 124.419 117.511 124.356 117.825 124.356C118.375 124.356 118.789 124.49 119.067 124.757C119.344 125.021 119.483 125.444 119.483 126.028V129.008H118.792ZM122.839 129.091C122.163 129.091 121.63 128.886 121.238 128.474C120.849 128.063 120.655 127.492 120.655 126.761C120.655 126.025 120.835 125.44 121.196 125.007C121.56 124.573 122.048 124.356 122.659 124.356C123.232 124.356 123.685 124.545 124.018 124.923C124.351 125.298 124.518 125.794 124.518 126.411V126.849H121.371C121.385 127.385 121.52 127.792 121.776 128.07C122.034 128.348 122.397 128.487 122.864 128.487C123.355 128.487 123.842 128.384 124.322 128.178V128.795C124.078 128.901 123.846 128.976 123.626 129.02C123.41 129.068 123.147 129.091 122.839 129.091ZM122.651 124.936C122.284 124.936 121.991 125.055 121.772 125.294C121.555 125.533 121.427 125.864 121.388 126.286H123.776C123.776 125.85 123.679 125.517 123.485 125.286C123.29 125.053 123.012 124.936 122.651 124.936ZM127.786 124.356C127.989 124.356 128.171 124.373 128.332 124.406L128.236 125.048C128.047 125.007 127.88 124.986 127.736 124.986C127.366 124.986 127.049 125.136 126.785 125.436C126.524 125.736 126.394 126.11 126.394 126.557V129.008H125.702V124.44H126.273L126.352 125.286H126.385C126.555 124.989 126.759 124.759 126.998 124.598C127.237 124.437 127.5 124.356 127.786 124.356Z" class="path-4"/> -<g filter="url(#filter1_d_14063_183957)"> -<rect x="13" y="210.348" width="308" height="113.099" rx="2.13395" class="rect-6"/> -<rect x="13.3557" y="210.703" width="307.289" height="112.388" rx="1.77829" stroke-width="0.711316" class="rect-7"/> -</g> -<rect x="30.0715" y="300.684" width="273.857" height="5.69053" rx="2.84527" class="rect-8"/> -<rect x="30.0715" y="300.684" width="164.314" height="5.69053" rx="2.84527" class="rect-9"/> -<path d="M91.1747 283.225C91.1747 284.453 90.9802 285.371 90.5912 285.977C90.2055 286.583 89.6139 286.886 88.8164 286.886C88.0514 286.886 87.4695 286.577 87.0708 285.958C86.672 285.335 86.4727 284.424 86.4727 283.225C86.4727 281.987 86.6656 281.068 87.0513 280.468C87.4371 279.868 88.0254 279.568 88.8164 279.568C89.5879 279.568 90.1731 279.881 90.5718 280.507C90.9738 281.132 91.1747 282.038 91.1747 283.225ZM87.2896 283.225C87.2896 284.259 87.4111 285.013 87.6543 285.486C87.8974 285.956 88.2848 286.191 88.8164 286.191C89.3545 286.191 89.7435 285.953 89.9834 285.476C90.2265 284.996 90.3481 284.246 90.3481 283.225C90.3481 282.204 90.2265 281.457 89.9834 280.983C89.7435 280.507 89.3545 280.268 88.8164 280.268C88.2848 280.268 87.8974 280.503 87.6543 280.973C87.4111 281.44 87.2896 282.191 87.2896 283.225ZM92.4147 286.274C92.4147 286.056 92.4633 285.893 92.5606 285.783C92.661 285.669 92.8037 285.612 92.9885 285.612C93.1765 285.612 93.3223 285.669 93.4261 285.783C93.5331 285.893 93.5865 286.056 93.5865 286.274C93.5865 286.484 93.5331 286.646 93.4261 286.76C93.3191 286.873 93.1732 286.93 92.9885 286.93C92.8231 286.93 92.6854 286.88 92.5751 286.779C92.4682 286.676 92.4147 286.507 92.4147 286.274ZM99.5285 283.225C99.5285 284.453 99.334 285.371 98.945 285.977C98.5593 286.583 97.9677 286.886 97.1702 286.886C96.4052 286.886 95.8233 286.577 95.4246 285.958C95.0258 285.335 94.8265 284.424 94.8265 283.225C94.8265 281.987 95.0194 281.068 95.4051 280.468C95.7909 279.868 96.3792 279.568 97.1702 279.568C97.9417 279.568 98.5269 279.881 98.9256 280.507C99.3275 281.132 99.5285 282.038 99.5285 283.225ZM95.6434 283.225C95.6434 284.259 95.7649 285.013 96.0081 285.486C96.2512 285.956 96.6386 286.191 97.1702 286.191C97.7083 286.191 98.0973 285.953 98.3372 285.476C98.5803 284.996 98.7019 284.246 98.7019 283.225C98.7019 282.204 98.5803 281.457 98.3372 280.983C98.0973 280.507 97.7083 280.268 97.1702 280.268C96.6386 280.268 96.2512 280.503 96.0081 280.973C95.7649 281.44 95.6434 282.191 95.6434 283.225ZM105.227 283.225C105.227 284.453 105.033 285.371 104.644 285.977C104.258 286.583 103.667 286.886 102.869 286.886C102.104 286.886 101.522 286.577 101.123 285.958C100.725 285.335 100.525 284.424 100.525 283.225C100.525 281.987 100.718 281.068 101.104 280.468C101.49 279.868 102.078 279.568 102.869 279.568C103.641 279.568 104.226 279.881 104.624 280.507C105.026 281.132 105.227 282.038 105.227 283.225ZM101.342 283.225C101.342 284.259 101.464 285.013 101.707 285.486C101.95 285.956 102.337 286.191 102.869 286.191C103.407 286.191 103.796 285.953 104.036 285.476C104.279 284.996 104.401 284.246 104.401 283.225C104.401 282.204 104.279 281.457 104.036 280.983C103.796 280.507 103.407 280.268 102.869 280.268C102.337 280.268 101.95 280.503 101.707 280.973C101.464 281.44 101.342 282.191 101.342 283.225ZM111.223 285.155H110.168V286.789H109.395V285.155H105.937V284.45L109.312 279.641H110.168V284.421H111.223V285.155ZM109.395 284.421V282.058C109.395 281.594 109.411 281.071 109.443 280.487H109.404C109.249 280.798 109.103 281.056 108.967 281.26L106.745 284.421H109.395ZM118.954 286.789H114.991V279.68H118.954V280.414H115.818V282.705H118.765V283.434H115.818V286.05H118.954V286.789ZM122.723 286.789H121.896V280.414H119.645V279.68H124.974V280.414H122.723V286.789ZM131.446 286.789H130.619V283.444H126.875V286.789H126.049V279.68H126.875V282.705H130.619V279.68H131.446V286.789ZM140.466 284.12C140.466 284.988 140.247 285.667 139.81 286.157C139.372 286.643 138.767 286.886 137.996 286.886C137.519 286.886 137.096 286.774 136.727 286.551C136.357 286.327 136.072 286.006 135.871 285.588C135.67 285.17 135.569 284.68 135.569 284.12C135.569 283.251 135.787 282.575 136.221 282.092C136.655 281.606 137.258 281.362 138.03 281.362C138.776 281.362 139.367 281.61 139.805 282.106C140.246 282.602 140.466 283.273 140.466 284.12ZM136.406 284.12C136.406 284.8 136.542 285.319 136.814 285.676C137.087 286.032 137.487 286.21 138.015 286.21C138.544 286.21 138.944 286.034 139.216 285.68C139.492 285.324 139.63 284.804 139.63 284.12C139.63 283.442 139.492 282.928 139.216 282.578C138.944 282.225 138.54 282.048 138.006 282.048C137.477 282.048 137.078 282.222 136.809 282.568C136.54 282.915 136.406 283.432 136.406 284.12ZM142.644 281.46V284.917C142.644 285.351 142.743 285.676 142.941 285.889C143.139 286.103 143.448 286.21 143.87 286.21C144.427 286.21 144.834 286.058 145.09 285.753C145.35 285.449 145.479 284.951 145.479 284.261V281.46H146.286V286.789H145.62L145.504 286.074H145.46C145.295 286.337 145.064 286.538 144.769 286.677C144.478 286.817 144.144 286.886 143.768 286.886C143.119 286.886 142.633 286.732 142.309 286.424C141.988 286.116 141.828 285.624 141.828 284.946V281.46H142.644ZM149.724 286.22C149.867 286.22 150.005 286.21 150.138 286.191C150.27 286.168 150.376 286.146 150.454 286.123V286.74C150.366 286.783 150.236 286.817 150.065 286.843C149.896 286.872 149.744 286.886 149.608 286.886C148.577 286.886 148.061 286.343 148.061 285.257V282.087H147.298V281.698L148.061 281.362L148.402 280.225H148.868V281.46H150.415V282.087H148.868V285.223C148.868 285.544 148.945 285.791 149.097 285.962C149.249 286.134 149.458 286.22 149.724 286.22ZM158.71 284.12C158.71 284.988 158.491 285.667 158.054 286.157C157.616 286.643 157.012 286.886 156.24 286.886C155.764 286.886 155.34 286.774 154.971 286.551C154.601 286.327 154.316 286.006 154.115 285.588C153.914 285.17 153.814 284.68 153.814 284.12C153.814 283.251 154.031 282.575 154.465 282.092C154.9 281.606 155.503 281.362 156.274 281.362C157.02 281.362 157.611 281.61 158.049 282.106C158.49 282.602 158.71 283.273 158.71 284.12ZM154.65 284.12C154.65 284.8 154.786 285.319 155.058 285.676C155.331 286.032 155.731 286.21 156.259 286.21C156.788 286.21 157.188 286.034 157.461 285.68C157.736 285.324 157.874 284.804 157.874 284.12C157.874 283.442 157.736 282.928 157.461 282.578C157.188 282.225 156.785 282.048 156.25 282.048C155.721 282.048 155.323 282.222 155.054 282.568C154.785 282.915 154.65 283.432 154.65 284.12ZM162.532 282.087H161.175V286.789H160.368V282.087H159.415V281.722L160.368 281.431V281.134C160.368 279.824 160.94 279.17 162.085 279.17C162.367 279.17 162.697 279.226 163.077 279.34L162.868 279.986C162.556 279.886 162.291 279.836 162.07 279.836C161.765 279.836 161.54 279.938 161.394 280.142C161.248 280.343 161.175 280.667 161.175 281.115V281.46H162.532V282.087ZM170.434 283.225C170.434 284.453 170.239 285.371 169.85 285.977C169.464 286.583 168.873 286.886 168.075 286.886C167.31 286.886 166.728 286.577 166.33 285.958C165.931 285.335 165.732 284.424 165.732 283.225C165.732 281.987 165.925 281.068 166.31 280.468C166.696 279.868 167.284 279.568 168.075 279.568C168.847 279.568 169.432 279.881 169.831 280.507C170.233 281.132 170.434 282.038 170.434 283.225ZM166.549 283.225C166.549 284.259 166.67 285.013 166.913 285.486C167.156 285.956 167.544 286.191 168.075 286.191C168.614 286.191 169.003 285.953 169.242 285.476C169.486 284.996 169.607 284.246 169.607 283.225C169.607 282.204 169.486 281.457 169.242 280.983C169.003 280.507 168.614 280.268 168.075 280.268C167.544 280.268 167.156 280.503 166.913 280.973C166.67 281.44 166.549 282.191 166.549 283.225ZM171.674 286.274C171.674 286.056 171.722 285.893 171.82 285.783C171.92 285.669 172.063 285.612 172.247 285.612C172.435 285.612 172.581 285.669 172.685 285.783C172.792 285.893 172.846 286.056 172.846 286.274C172.846 286.484 172.792 286.646 172.685 286.76C172.578 286.873 172.432 286.93 172.247 286.93C172.082 286.93 171.944 286.88 171.834 286.779C171.727 286.676 171.674 286.507 171.674 286.274ZM178.788 283.225C178.788 284.453 178.593 285.371 178.204 285.977C177.818 286.583 177.227 286.886 176.429 286.886C175.664 286.886 175.082 286.577 174.684 285.958C174.285 285.335 174.085 284.424 174.085 283.225C174.085 281.987 174.278 281.068 174.664 280.468C175.05 279.868 175.638 279.568 176.429 279.568C177.201 279.568 177.786 279.881 178.185 280.507C178.587 281.132 178.788 282.038 178.788 283.225ZM174.902 283.225C174.902 284.259 175.024 285.013 175.267 285.486C175.51 285.956 175.898 286.191 176.429 286.191C176.967 286.191 177.356 285.953 177.596 285.476C177.839 284.996 177.961 284.246 177.961 283.225C177.961 282.204 177.839 281.457 177.596 280.983C177.356 280.507 176.967 280.268 176.429 280.268C175.898 280.268 175.51 280.503 175.267 280.973C175.024 281.44 174.902 282.191 174.902 283.225ZM182.765 286.789H181.977V281.722C181.977 281.301 181.99 280.902 182.016 280.526C181.948 280.594 181.872 280.666 181.788 280.74C181.703 280.815 181.318 281.131 180.63 281.688L180.203 281.134L182.084 279.68H182.765V286.789ZM192.514 286.789H188.551V279.68H192.514V280.414H189.378V282.705H192.325V283.434H189.378V286.05H192.514V286.789ZM196.283 286.789H195.456V280.414H193.205V279.68H198.534V280.414H196.283V286.789ZM205.006 286.789H204.18V283.444H200.435V286.789H199.609V279.68H200.435V282.705H204.18V279.68H205.006V286.789ZM211.857 281.362C212.094 281.362 212.306 281.382 212.494 281.421L212.383 282.17C212.162 282.121 211.968 282.097 211.799 282.097C211.368 282.097 210.998 282.272 210.69 282.622C210.386 282.972 210.233 283.408 210.233 283.93V286.789H209.426V281.46H210.092L210.185 282.447H210.224C210.421 282.1 210.66 281.833 210.938 281.645C211.217 281.457 211.524 281.362 211.857 281.362ZM215.743 286.886C214.955 286.886 214.333 286.646 213.875 286.167C213.422 285.687 213.195 285.021 213.195 284.168C213.195 283.309 213.405 282.627 213.827 282.121C214.251 281.615 214.82 281.362 215.534 281.362C216.201 281.362 216.73 281.583 217.119 282.024C217.508 282.461 217.702 283.04 217.702 283.76V284.27H214.031C214.047 284.896 214.204 285.371 214.503 285.695C214.804 286.019 215.227 286.181 215.772 286.181C216.346 286.181 216.913 286.061 217.474 285.821V286.541C217.188 286.664 216.918 286.752 216.662 286.804C216.409 286.859 216.102 286.886 215.743 286.886ZM215.524 282.038C215.096 282.038 214.754 282.178 214.498 282.457C214.245 282.735 214.096 283.121 214.05 283.614H216.837C216.837 283.105 216.723 282.716 216.496 282.447C216.269 282.175 215.945 282.038 215.524 282.038ZM221.096 286.21C221.634 286.21 222.027 286.066 222.273 285.778C222.519 285.489 222.651 285.003 222.667 284.319V284.139C222.667 283.393 222.54 282.857 222.288 282.529C222.035 282.202 221.634 282.038 221.087 282.038C220.613 282.038 220.25 282.223 219.997 282.593C219.748 282.959 219.623 283.478 219.623 284.149C219.623 284.82 219.746 285.332 219.992 285.685C220.242 286.035 220.61 286.21 221.096 286.21ZM220.975 286.886C220.287 286.886 219.751 286.645 219.365 286.162C218.979 285.679 218.787 285.005 218.787 284.139C218.787 283.267 218.981 282.586 219.37 282.097C219.759 281.607 220.3 281.362 220.994 281.362C221.724 281.362 222.284 281.638 222.677 282.189H222.72L222.837 281.46H223.474V289.181H222.667V286.901C222.667 286.577 222.685 286.301 222.72 286.074H222.657C222.284 286.616 221.724 286.886 220.975 286.886ZM225.949 281.46V284.917C225.949 285.351 226.048 285.676 226.246 285.889C226.443 286.103 226.753 286.21 227.174 286.21C227.732 286.21 228.139 286.058 228.395 285.753C228.654 285.449 228.784 284.951 228.784 284.261V281.46H229.591V286.789H228.925L228.808 286.074H228.764C228.599 286.337 228.369 286.538 228.074 286.677C227.782 286.817 227.448 286.886 227.072 286.886C226.424 286.886 225.938 286.732 225.614 286.424C225.293 286.116 225.132 285.624 225.132 284.946V281.46H225.949ZM232.115 286.789H231.308V281.46H232.115V286.789ZM231.239 280.016C231.239 279.831 231.285 279.696 231.376 279.612C231.466 279.524 231.58 279.481 231.716 279.481C231.846 279.481 231.957 279.524 232.051 279.612C232.145 279.7 232.193 279.834 232.193 280.016C232.193 280.197 232.145 280.333 232.051 280.424C231.957 280.512 231.846 280.555 231.716 280.555C231.58 280.555 231.466 280.512 231.376 280.424C231.285 280.333 231.239 280.197 231.239 280.016ZM236.258 281.362C236.494 281.362 236.707 281.382 236.895 281.421L236.783 282.17C236.562 282.121 236.368 282.097 236.199 282.097C235.768 282.097 235.399 282.272 235.091 282.622C234.786 282.972 234.633 283.408 234.633 283.93V286.789H233.826V281.46H234.492L234.585 282.447H234.624C234.822 282.1 235.06 281.833 235.339 281.645C235.617 281.457 235.924 281.362 236.258 281.362ZM240.143 286.886C239.355 286.886 238.733 286.646 238.276 286.167C237.822 285.687 237.595 285.021 237.595 284.168C237.595 283.309 237.805 282.627 238.227 282.121C238.652 281.615 239.22 281.362 239.934 281.362C240.601 281.362 241.13 281.583 241.519 282.024C241.908 282.461 242.102 283.04 242.102 283.76V284.27H238.431C238.447 284.896 238.605 285.371 238.903 285.695C239.204 286.019 239.627 286.181 240.172 286.181C240.746 286.181 241.313 286.061 241.874 285.821V286.541C241.589 286.664 241.318 286.752 241.062 286.804C240.809 286.859 240.503 286.886 240.143 286.886ZM239.924 282.038C239.496 282.038 239.154 282.178 238.898 282.457C238.645 282.735 238.496 283.121 238.451 283.614H241.237C241.237 283.105 241.123 282.716 240.896 282.447C240.67 282.175 240.345 282.038 239.924 282.038ZM247.111 286.074H247.067C246.694 286.616 246.137 286.886 245.394 286.886C244.697 286.886 244.154 286.648 243.765 286.172C243.38 285.695 243.187 285.017 243.187 284.139C243.187 283.26 243.381 282.578 243.77 282.092C244.159 281.606 244.701 281.362 245.394 281.362C246.117 281.362 246.671 281.625 247.057 282.15H247.12L247.086 281.766L247.067 281.392V279.223H247.874V286.789H247.218L247.111 286.074ZM245.496 286.21C246.047 286.21 246.446 286.061 246.693 285.763C246.942 285.462 247.067 284.977 247.067 284.309V284.139C247.067 283.384 246.941 282.846 246.688 282.525C246.438 282.2 246.038 282.038 245.487 282.038C245.013 282.038 244.65 282.223 244.397 282.593C244.148 282.959 244.023 283.478 244.023 284.149C244.023 284.829 244.148 285.343 244.397 285.69C244.647 286.037 245.013 286.21 245.496 286.21Z" class="path-5"/> -<path d="M35.7169 233.458C35.7169 234.201 35.4738 234.769 34.9875 235.165C34.5013 235.56 33.8092 235.758 32.9112 235.758H32.1721V238.418H31.01V231.309H33.0571C33.9453 231.309 34.6099 231.491 35.0507 231.854C35.4949 232.217 35.7169 232.752 35.7169 233.458ZM32.1721 234.781H32.7897C33.3861 234.781 33.8238 234.677 34.1026 234.47C34.3813 234.262 34.5207 233.938 34.5207 233.497C34.5207 233.089 34.3959 232.784 34.1463 232.583C33.8967 232.382 33.5077 232.281 32.9793 232.281H32.1721V234.781ZM40.3801 238.418L40.1515 237.669H40.1126C39.8533 237.997 39.5923 238.22 39.3298 238.34C39.0672 238.457 38.7301 238.515 38.3184 238.515C37.79 238.515 37.3767 238.373 37.0784 238.087C36.7834 237.802 36.6359 237.398 36.6359 236.877C36.6359 236.322 36.8418 235.904 37.2535 235.622C37.6652 235.34 38.2924 235.186 39.1353 235.16L40.064 235.131V234.844C40.064 234.5 39.983 234.244 39.8209 234.076C39.662 233.904 39.414 233.818 39.0769 233.818C38.8014 233.818 38.5372 233.859 38.2843 233.94C38.0315 234.021 37.7883 234.116 37.5549 234.226L37.1854 233.41C37.4771 233.257 37.7964 233.142 38.1433 233.064C38.4902 232.983 38.8176 232.943 39.1255 232.943C39.8095 232.943 40.325 233.092 40.6718 233.39C41.0219 233.688 41.197 234.157 41.197 234.795V238.418H40.3801ZM38.6782 237.64C39.0931 237.64 39.4254 237.525 39.675 237.295C39.9278 237.061 40.0543 236.736 40.0543 236.317V235.851L39.3638 235.88C38.8257 235.899 38.4334 235.99 38.1871 236.152C37.9439 236.311 37.8224 236.556 37.8224 236.886C37.8224 237.126 37.8937 237.313 38.0363 237.445C38.179 237.575 38.3929 237.64 38.6782 237.64ZM41.975 233.04H43.2198L44.3138 236.089C44.4792 236.523 44.5894 236.932 44.6445 237.314H44.6834C44.7126 237.136 44.7661 236.92 44.8439 236.667C44.9217 236.411 45.3333 235.202 46.0789 233.04H47.314L45.014 239.133C44.5959 240.251 43.8989 240.81 42.9232 240.81C42.6703 240.81 42.4239 240.783 42.1841 240.728V239.823C42.3559 239.862 42.552 239.882 42.7724 239.882C43.3235 239.882 43.7109 239.562 43.9346 238.924L44.1339 238.418L41.975 233.04ZM55.1572 238.418H50.3385V237.552L52.1717 235.71C52.713 235.155 53.0712 234.763 53.2463 234.533C53.4246 234.299 53.5542 234.081 53.6353 233.876C53.7163 233.672 53.7568 233.453 53.7568 233.22C53.7568 232.899 53.6596 232.646 53.4651 232.461C53.2738 232.277 53.008 232.184 52.6676 232.184C52.3953 232.184 52.1311 232.234 51.875 232.335C51.6222 232.435 51.3288 232.617 50.9949 232.88L50.3774 232.126C50.7729 231.792 51.157 231.555 51.5298 231.416C51.9026 231.277 52.2997 231.207 52.7211 231.207C53.3824 231.207 53.9124 231.38 54.3112 231.727C54.7099 232.071 54.9093 232.534 54.9093 233.118C54.9093 233.439 54.8509 233.743 54.7342 234.032C54.6207 234.32 54.4441 234.619 54.2042 234.927C53.9676 235.231 53.5721 235.645 53.0177 236.167L51.7827 237.363V237.411H55.1572V238.418ZM58.4394 233.978C59.1559 233.978 59.7231 234.168 60.1413 234.547C60.5595 234.927 60.7686 235.444 60.7686 236.099C60.7686 236.857 60.5303 237.45 60.0538 237.878C59.5805 238.303 58.9062 238.515 58.031 238.515C57.2368 238.515 56.6128 238.387 56.1589 238.131V237.095C56.4215 237.244 56.723 237.36 57.0633 237.441C57.4037 237.522 57.7198 237.562 58.0115 237.562C58.527 237.562 58.9192 237.447 59.1883 237.217C59.4573 236.987 59.5919 236.65 59.5919 236.206C59.5919 235.356 59.0505 234.932 57.9678 234.932C57.8154 234.932 57.6274 234.948 57.4037 234.98C57.18 235.009 56.9839 235.043 56.8154 235.082L56.3048 234.781L56.5771 231.309H60.2726V232.325H57.5836L57.4232 234.085C57.5366 234.066 57.6744 234.043 57.8365 234.017C58.0018 233.991 58.2028 233.978 58.4394 233.978ZM66.5355 234.863C66.5355 236.099 66.3362 237.016 65.9374 237.616C65.542 238.215 64.9358 238.515 64.1189 238.515C63.3279 238.515 62.7282 238.206 62.3197 237.586C61.9113 236.967 61.7071 236.06 61.7071 234.863C61.7071 233.609 61.9048 232.685 62.3003 232.092C62.699 231.495 63.3052 231.197 64.1189 231.197C64.9131 231.197 65.5144 231.508 65.9229 232.131C66.3313 232.753 66.5355 233.664 66.5355 234.863ZM62.8643 234.863C62.8643 235.833 62.9632 236.525 63.1609 236.94C63.3619 237.355 63.6812 237.562 64.1189 237.562C64.5565 237.562 64.8758 237.351 65.0768 236.93C65.281 236.509 65.3831 235.82 65.3831 234.863C65.3831 233.91 65.281 233.222 65.0768 232.797C64.8758 232.369 64.5565 232.155 64.1189 232.155C63.6812 232.155 63.3619 232.364 63.1609 232.782C62.9632 233.2 62.8643 233.894 62.8643 234.863ZM76.2751 234.795C76.2751 235.969 75.9494 236.867 75.2978 237.489C74.6462 238.108 73.7077 238.418 72.4824 238.418H70.4936V231.309H72.6915C73.8228 231.309 74.7029 231.614 75.3318 232.223C75.9607 232.833 76.2751 233.69 76.2751 234.795ZM75.0498 234.834C75.0498 233.132 74.254 232.281 72.6623 232.281H71.6558V237.441H72.4824C74.194 237.441 75.0498 236.572 75.0498 234.834ZM82.2171 238.418L81.5072 236.444H78.7891L78.0937 238.418H76.8684L79.5282 231.28H80.7924L83.4522 238.418H82.2171ZM81.2009 235.442L80.5347 233.507C80.4861 233.377 80.418 233.173 80.3305 232.894C80.2462 232.615 80.1878 232.411 80.1554 232.281C80.0679 232.68 79.9399 233.116 79.7713 233.589L79.1294 235.442H81.2009ZM84.3907 238.418V231.309H85.5528V238.418H84.3907Z" class="path-6"/> -<circle cx="295.393" cy="235.954" r="8.18014" stroke-width="0.711316" class="circle-2"/> -<circle cx="295.393" cy="235.957" r="4.04327" class="circle-3"/> -<g clip-path="url(#clip1_14063_183957)"> -<path d="M38.4901 247.41L38.1129 247.032C37.9566 246.876 37.7033 246.876 37.547 247.032L37.4527 247.127L35.5666 245.241L35.6609 245.146C35.8171 244.99 35.8171 244.737 35.6609 244.58L35.2837 244.203C35.1274 244.047 34.8741 244.047 34.7178 244.203L32.643 246.278C32.4868 246.434 32.4868 246.688 32.643 246.844L33.0203 247.221C33.1765 247.377 33.4299 247.377 33.5861 247.221L33.6804 247.127L34.3406 247.787L32.9895 249.138L32.8952 249.044C32.6869 248.835 32.3491 248.835 32.1407 249.044L30.2278 250.957C30.0194 251.165 30.0194 251.503 30.2278 251.711L30.9823 252.465C31.1906 252.674 31.5284 252.674 31.7367 252.465L33.6497 250.553C33.858 250.344 33.858 250.006 33.6497 249.798L33.5554 249.704L34.9064 248.353L35.5666 249.013L35.4723 249.107C35.316 249.263 35.316 249.517 35.4723 249.673L35.8495 250.05C36.0058 250.206 36.2591 250.206 36.4153 250.05L38.4901 247.975C38.6464 247.819 38.6464 247.566 38.4901 247.41Z" class="path-7"/> -</g> -<path d="M42.3424 251.355V245.262H43.0509V250.714H45.7392V251.355H42.3424ZM50.6156 249.067C50.6156 249.812 50.428 250.394 50.0529 250.814C49.6778 251.23 49.1596 251.439 48.4983 251.439C48.0899 251.439 47.7273 251.343 47.4105 251.151C47.0937 250.96 46.8492 250.684 46.677 250.326C46.5047 249.968 46.4186 249.548 46.4186 249.067C46.4186 248.323 46.6047 247.743 46.977 247.329C47.3494 246.913 47.8662 246.704 48.5275 246.704C49.1666 246.704 49.6737 246.917 50.0488 247.342C50.4267 247.767 50.6156 248.342 50.6156 249.067ZM47.1354 249.067C47.1354 249.651 47.2521 250.095 47.4855 250.401C47.7189 250.707 48.0621 250.859 48.515 250.859C48.9679 250.859 49.3111 250.708 49.5445 250.405C49.7806 250.1 49.8987 249.654 49.8987 249.067C49.8987 248.487 49.7806 248.046 49.5445 247.746C49.3111 247.443 48.9651 247.292 48.5067 247.292C48.0537 247.292 47.712 247.44 47.4814 247.738C47.2507 248.035 47.1354 248.478 47.1354 249.067ZM54.7793 250.109C54.7793 250.534 54.6209 250.862 54.3042 251.093C53.9874 251.324 53.5428 251.439 52.9704 251.439C52.3647 251.439 51.8924 251.343 51.5534 251.151V250.509C51.7729 250.621 52.0077 250.708 52.2577 250.772C52.5106 250.836 52.7537 250.868 52.9871 250.868C53.3483 250.868 53.6262 250.811 53.8207 250.697C54.0152 250.58 54.1124 250.404 54.1124 250.168C54.1124 249.99 54.0346 249.838 53.879 249.713C53.7262 249.586 53.4261 249.435 52.9788 249.263C52.5537 249.105 52.2508 248.967 52.0702 248.851C51.8924 248.731 51.759 248.596 51.6701 248.446C51.5839 248.296 51.5409 248.117 51.5409 247.909C51.5409 247.536 51.6923 247.243 51.9952 247.029C52.298 246.812 52.7134 246.704 53.2414 246.704C53.7332 246.704 54.2139 246.804 54.6834 247.004L54.4375 247.567C53.9791 247.378 53.5637 247.283 53.1913 247.283C52.8635 247.283 52.6162 247.335 52.4495 247.438C52.2827 247.54 52.1994 247.682 52.1994 247.863C52.1994 247.985 52.23 248.089 52.2911 248.175C52.355 248.262 52.4564 248.343 52.5953 248.421C52.7343 248.499 53.001 248.612 53.3956 248.759C53.9374 248.956 54.3028 249.155 54.4917 249.355C54.6834 249.555 54.7793 249.806 54.7793 250.109ZM57.8385 251.439C57.1633 251.439 56.6298 251.233 56.2381 250.822C55.8491 250.411 55.6546 249.84 55.6546 249.109C55.6546 248.373 55.8352 247.788 56.1964 247.354C56.5604 246.921 57.048 246.704 57.6593 246.704C58.2317 246.704 58.6846 246.893 59.018 247.271C59.3515 247.646 59.5182 248.142 59.5182 248.759V249.197H56.3714C56.3853 249.733 56.5201 250.14 56.7757 250.418C57.0341 250.696 57.3967 250.834 57.8635 250.834C58.3553 250.834 58.8416 250.732 59.3223 250.526V251.143C59.0778 251.248 58.8458 251.324 58.6262 251.368C58.4095 251.415 58.1469 251.439 57.8385 251.439ZM57.651 247.283C57.2842 247.283 56.991 247.403 56.7715 247.642C56.5548 247.881 56.427 248.212 56.3881 248.634H58.7763C58.7763 248.198 58.679 247.864 58.4845 247.634C58.29 247.4 58.0122 247.283 57.651 247.283ZM62.7858 246.704C62.9886 246.704 63.1706 246.721 63.3318 246.754L63.2359 247.396C63.047 247.354 62.8802 247.333 62.7358 247.333C62.3662 247.333 62.0495 247.484 61.7855 247.784C61.5243 248.084 61.3937 248.457 61.3937 248.905V251.355H60.7018V246.787H61.2728L61.352 247.634H61.3854C61.5549 247.336 61.7591 247.107 61.9981 246.946C62.237 246.785 62.4996 246.704 62.7858 246.704Z" class="path-8"/> -<rect x="13.5" y="14.7656" width="59" height="56.7358" rx="1.19811" class="rect-10"/> -<path d="M44.2118 53.6055H42.653V47.3437C42.653 46.5963 42.6707 46.0038 42.706 45.566C42.6043 45.6721 42.4783 45.7893 42.3279 45.9175C42.182 46.0458 41.6867 46.4526 40.8421 47.138L40.0594 46.1497L42.9117 43.9077H44.2118V53.6055Z" class="path-9"/> -<path d="M36.2541 31.3506C36.2541 31.8536 36.0722 32.2483 35.7085 32.5346C35.3447 32.8209 34.843 32.9641 34.2033 32.9641C33.5635 32.9641 33.0399 32.8648 32.6323 32.6662V31.7917C32.8903 31.9129 33.1637 32.0084 33.4526 32.078C33.7441 32.1477 34.015 32.1825 34.2652 32.1825C34.6315 32.1825 34.9011 32.1128 35.0739 31.9735C35.2493 31.8342 35.337 31.6472 35.337 31.4125C35.337 31.201 35.257 31.0217 35.0971 30.8746C34.9372 30.7276 34.607 30.5535 34.1065 30.3523C33.5906 30.1433 33.2269 29.9047 33.0154 29.6364C32.8038 29.3681 32.6981 29.0457 32.6981 28.6691C32.6981 28.197 32.8658 27.8255 33.2011 27.5547C33.5365 27.2838 33.9866 27.1484 34.5515 27.1484C35.0932 27.1484 35.6324 27.2671 36.1689 27.5044L35.8749 28.2589C35.3718 28.0474 34.923 27.9416 34.5283 27.9416C34.2291 27.9416 34.0021 28.0074 33.8473 28.139C33.6925 28.2679 33.6151 28.4395 33.6151 28.6536C33.6151 28.8006 33.6461 28.927 33.708 29.0328C33.7699 29.136 33.8718 29.234 34.0137 29.3269C34.1556 29.4197 34.4109 29.5423 34.7798 29.6945C35.1951 29.8673 35.4995 30.0285 35.693 30.1781C35.8865 30.3278 36.0283 30.4967 36.1186 30.685C36.2089 30.8733 36.2541 31.0952 36.2541 31.3506ZM38.8466 32.2289C39.0684 32.2289 39.2902 32.1941 39.5121 32.1244V32.8093C39.4115 32.8532 39.2812 32.8893 39.1213 32.9177C38.9639 32.9486 38.8001 32.9641 38.6299 32.9641C37.7683 32.9641 37.3375 32.5101 37.3375 31.6021V29.2959H36.7532V28.8935L37.3801 28.5607L37.6896 27.6553H38.2507V28.6072H39.4695V29.2959H38.2507V31.5866C38.2507 31.8059 38.3048 31.9684 38.4132 32.0741C38.5241 32.1773 38.6686 32.2289 38.8466 32.2289ZM43.0487 32.8867L42.8669 32.2908H42.8359C42.6295 32.5514 42.4219 32.7294 42.2129 32.8248C42.004 32.9177 41.7357 32.9641 41.4081 32.9641C40.9876 32.9641 40.6587 32.8506 40.4214 32.6236C40.1867 32.3966 40.0693 32.0754 40.0693 31.6601C40.0693 31.219 40.2331 30.8862 40.5607 30.6618C40.8883 30.4374 41.3875 30.3149 42.0582 30.2942L42.7972 30.271V30.0427C42.7972 29.7693 42.7327 29.5655 42.6037 29.4313C42.4773 29.2946 42.28 29.2263 42.0117 29.2263C41.7925 29.2263 41.5822 29.2585 41.381 29.323C41.1798 29.3875 40.9863 29.4636 40.8006 29.5513L40.5065 28.9012C40.7387 28.78 40.9928 28.6884 41.2688 28.6265C41.5448 28.562 41.8054 28.5298 42.0504 28.5298C42.5947 28.5298 43.0049 28.6484 43.2809 28.8858C43.5595 29.1231 43.6988 29.4958 43.6988 30.004V32.8867H43.0487ZM41.6944 32.2676C42.0246 32.2676 42.289 32.176 42.4877 31.9929C42.6889 31.8072 42.7895 31.5479 42.7895 31.2151V30.8437L42.24 30.8669C41.8118 30.8824 41.4997 30.9546 41.3036 31.0836C41.1102 31.21 41.0134 31.4047 41.0134 31.6679C41.0134 31.8587 41.0702 32.0071 41.1837 32.1128C41.2972 32.216 41.4674 32.2676 41.6944 32.2676ZM48.582 28.6072V29.1063L47.8506 29.2417C47.9177 29.332 47.9732 29.443 48.017 29.5745C48.0609 29.7061 48.0828 29.8454 48.0828 29.9924C48.0828 30.4335 47.9306 30.7805 47.6262 31.0333C47.3218 31.2861 46.9026 31.4125 46.3687 31.4125C46.2319 31.4125 46.1081 31.4022 45.9972 31.3815C45.8012 31.5028 45.7031 31.6446 45.7031 31.8072C45.7031 31.9052 45.7483 31.9787 45.8386 32.0277C45.9314 32.0767 46.1004 32.1012 46.3454 32.1012H47.0922C47.5643 32.1012 47.9229 32.2018 48.1679 32.403C48.413 32.6043 48.5355 32.8945 48.5355 33.2737C48.5355 33.7586 48.3356 34.1327 47.9358 34.3958C47.5359 34.6589 46.9581 34.7905 46.2023 34.7905C45.6193 34.7905 45.1743 34.6873 44.8673 34.4809C44.5604 34.2745 44.4069 33.9805 44.4069 33.5987C44.4069 33.3356 44.4894 33.1137 44.6545 32.9332C44.8222 32.7552 45.0556 32.6313 45.3549 32.5617C45.2336 32.5101 45.133 32.4276 45.0531 32.314C44.9757 32.198 44.937 32.0767 44.937 31.9503C44.937 31.7904 44.9821 31.655 45.0724 31.544C45.1627 31.4331 45.2968 31.3235 45.4748 31.2151C45.253 31.1197 45.0724 30.9649 44.9331 30.7508C44.7964 30.5341 44.728 30.2813 44.728 29.9924C44.728 29.5281 44.8738 29.1682 45.1653 28.9128C45.4594 28.6575 45.8773 28.5298 46.419 28.5298C46.5402 28.5298 46.6666 28.5388 46.7982 28.5569C46.9323 28.5723 47.0329 28.5891 47.1 28.6072H48.582ZM45.2195 33.5523C45.2195 33.7483 45.3072 33.8992 45.4826 34.005C45.6606 34.1107 45.9095 34.1636 46.2294 34.1636C46.7247 34.1636 47.0935 34.0927 47.336 33.9508C47.5785 33.8089 47.6997 33.6206 47.6997 33.3859C47.6997 33.2001 47.6327 33.0673 47.4985 32.9873C47.367 32.9099 47.1206 32.8712 46.7595 32.8712H46.0707C45.8102 32.8712 45.6025 32.9319 45.4477 33.0531C45.2956 33.1769 45.2195 33.3433 45.2195 33.5523ZM45.6103 29.9924C45.6103 30.2607 45.6786 30.4671 45.8153 30.6115C45.9546 30.756 46.1533 30.8282 46.4112 30.8282C46.9375 30.8282 47.2006 30.547 47.2006 29.9847C47.2006 29.7061 47.1348 29.492 47.0032 29.3423C46.8743 29.1902 46.6769 29.1141 46.4112 29.1141C46.1481 29.1141 45.9482 29.1889 45.8115 29.3385C45.6773 29.4881 45.6103 29.7061 45.6103 29.9924ZM51.248 32.9641C50.5824 32.9641 50.0614 32.7706 49.6847 32.3837C49.3107 31.9942 49.1237 31.4589 49.1237 30.7779C49.1237 30.0788 49.2978 29.5294 49.646 29.1295C49.9943 28.7297 50.4728 28.5298 51.0816 28.5298C51.6465 28.5298 52.0928 28.7013 52.4204 29.0444C52.748 29.3875 52.9118 29.8596 52.9118 30.4606V30.952H50.0601C50.073 31.3673 50.1852 31.6872 50.3967 31.9116C50.6082 32.1335 50.9062 32.2444 51.2905 32.2444C51.5433 32.2444 51.7781 32.2212 51.9948 32.1747C52.214 32.1257 52.4488 32.0458 52.699 31.9348V32.6739C52.4772 32.7797 52.2527 32.8545 52.0257 32.8983C51.7987 32.9422 51.5395 32.9641 51.248 32.9641ZM51.0816 29.2185C50.7927 29.2185 50.5605 29.3101 50.3851 29.4933C50.2123 29.6764 50.1091 29.9434 50.0755 30.2942H52.018C52.0128 29.9408 51.9277 29.6738 51.7626 29.4933C51.5975 29.3101 51.3705 29.2185 51.0816 29.2185Z" class="path-10"/> -<defs> -<filter id="filter0_d_14063_183957" x="10" y="87" width="314" height="119.098" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="2"/> -<feGaussianBlur stdDeviation="1.5"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_14063_183957"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_14063_183957" result="shape"/> -</filter> -<filter id="filter1_d_14063_183957" x="10" y="209.348" width="314" height="119.098" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="2"/> -<feGaussianBlur stdDeviation="1.5"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_14063_183957"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_14063_183957" result="shape"/> -</filter> -<clipPath id="clip0_14063_183957"> -<rect width="8.5358" height="8.5358" class="path-9" transform="translate(30.0715 121.738)" class="rect-11"/> -</clipPath> -<clipPath id="clip1_14063_183957"> -<rect width="8.5358" height="8.5358" transform="translate(30.0715 244.086)" class="rect-12"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/appeal/stage-two.svg b/web/src/assets/svgs/mini-guides/appeal/stage-two.svg deleted file mode 100644 index acea9b8a3..000000000 --- a/web/src/assets/svgs/mini-guides/appeal/stage-two.svg +++ /dev/null @@ -1,24 +0,0 @@ -<svg viewBox="0 0 415 217" fill="none" xmlns="http://www.w3.org/2000/svg"> -<rect width="415" height="217" rx="3" class="rect-1"/> -<rect x="13.4422" y="88.4422" width="388.116" height="112.116" rx="2.21093" stroke-width="0.884371" class="rect-2"/> -<line x1="23" y1="144.558" x2="391" y2="144.558" stroke-width="0.884371" class="line-1"/> -<rect x="304.722" y="113.648" width="75.1715" height="7.07497" rx="3.53748" class="rect-3"/> -<path d="M41.1233 105.447C41.1233 106.37 40.821 107.077 40.2165 107.569C39.6119 108.061 38.7515 108.306 37.6351 108.306H36.7162V111.613H35.2713V102.775H37.8164C38.9207 102.775 39.747 103 40.2951 103.452C40.8472 103.903 41.1233 104.568 41.1233 105.447ZM36.7162 107.091H37.4839C38.2255 107.091 38.7696 106.962 39.1162 106.704C39.4628 106.446 39.6361 106.043 39.6361 105.495C39.6361 104.987 39.481 104.609 39.1706 104.359C38.8603 104.109 38.3766 103.984 37.7197 103.984H36.7162V107.091ZM46.921 111.613L46.6368 110.682H46.5885C46.266 111.089 45.9416 111.367 45.6151 111.517C45.2887 111.662 44.8695 111.734 44.3577 111.734C43.7007 111.734 43.1869 111.557 42.8161 111.202C42.4493 110.848 42.2659 110.346 42.2659 109.697C42.2659 109.008 42.5218 108.488 43.0337 108.137C43.5456 107.786 44.3254 107.595 45.3733 107.563L46.528 107.527V107.17C46.528 106.743 46.4272 106.424 46.2257 106.215C46.0282 106.001 45.7199 105.894 45.3008 105.894C44.9582 105.894 44.6297 105.945 44.3153 106.045C44.001 106.146 43.6987 106.265 43.4085 106.402L42.9491 105.386C43.3118 105.197 43.7088 105.054 44.14 104.957C44.5713 104.856 44.9783 104.806 45.3612 104.806C46.2116 104.806 46.8524 104.991 47.2837 105.362C47.719 105.733 47.9366 106.315 47.9366 107.109V111.613H46.921ZM44.805 110.646C45.3209 110.646 45.734 110.503 46.0444 110.217C46.3587 109.927 46.5159 109.522 46.5159 109.002V108.421L45.6575 108.458C44.9884 108.482 44.5007 108.595 44.1944 108.796C43.8922 108.994 43.741 109.298 43.741 109.709C43.741 110.007 43.8297 110.239 44.007 110.404C44.1844 110.565 44.4504 110.646 44.805 110.646ZM48.9039 104.927H50.4515L51.8118 108.717C52.0173 109.258 52.1544 109.765 52.2229 110.241H52.2712C52.3075 110.019 52.374 109.751 52.4707 109.437C52.5675 109.119 53.0793 107.615 54.0063 104.927H55.5419L52.6823 112.502C52.1624 113.892 51.2959 114.588 50.0828 114.588C49.7684 114.588 49.4621 114.553 49.1638 114.485V113.36C49.3775 113.409 49.6213 113.433 49.8953 113.433C50.5805 113.433 51.0621 113.036 51.3402 112.242L51.5881 111.613L48.9039 104.927ZM65.2933 111.613H59.3022V110.537L61.5813 108.246C62.2544 107.557 62.6997 107.069 62.9174 106.783C63.139 106.493 63.3002 106.221 63.401 105.967C63.5018 105.713 63.5521 105.441 63.5521 105.151C63.5521 104.752 63.4312 104.437 63.1894 104.208C62.9516 103.978 62.6211 103.863 62.198 103.863C61.8594 103.863 61.5309 103.925 61.2125 104.05C60.8982 104.175 60.5334 104.401 60.1183 104.727L59.3505 103.79C59.8422 103.375 60.3198 103.081 60.7833 102.908C61.2468 102.734 61.7405 102.648 62.2645 102.648C63.0866 102.648 63.7456 102.863 64.2413 103.295C64.7371 103.722 64.9849 104.298 64.9849 105.024C64.9849 105.423 64.9124 105.802 64.7673 106.16C64.6262 106.519 64.4066 106.89 64.1083 107.273C63.8141 107.651 63.3224 108.165 62.6332 108.814L61.0977 110.301V110.362H65.2933V111.613ZM69.374 106.094C70.2647 106.094 70.97 106.33 71.4899 106.801C72.0098 107.273 72.2698 107.915 72.2698 108.73C72.2698 109.673 71.9735 110.41 71.3811 110.942C70.7926 111.47 69.9543 111.734 68.8661 111.734C67.8787 111.734 67.1029 111.575 66.5386 111.257V109.969C66.8651 110.154 67.2399 110.297 67.6631 110.398C68.0863 110.499 68.4792 110.549 68.842 110.549C69.4828 110.549 69.9705 110.406 70.305 110.12C70.6395 109.834 70.8067 109.415 70.8067 108.863C70.8067 107.807 70.1337 107.279 68.7876 107.279C68.5981 107.279 68.3644 107.299 68.0863 107.339C67.8082 107.375 67.5643 107.418 67.3548 107.466L66.72 107.091L67.0585 102.775H71.6531V104.038H68.31L68.1105 106.227C68.2515 106.203 68.4228 106.174 68.6243 106.142C68.8299 106.11 69.0797 106.094 69.374 106.094ZM79.4397 107.194C79.4397 108.73 79.1919 109.87 78.6961 110.616C78.2044 111.361 77.4508 111.734 76.4351 111.734C75.4517 111.734 74.7061 111.349 74.1983 110.579C73.6905 109.81 73.4365 108.681 73.4365 107.194C73.4365 105.634 73.6824 104.486 74.1741 103.748C74.6698 103.006 75.4235 102.636 76.4351 102.636C77.4225 102.636 78.1702 103.023 78.678 103.796C79.1858 104.57 79.4397 105.703 79.4397 107.194ZM74.8754 107.194C74.8754 108.399 74.9983 109.26 75.2442 109.775C75.494 110.291 75.891 110.549 76.4351 110.549C76.9792 110.549 77.3762 110.287 77.6261 109.763C77.88 109.239 78.0069 108.383 78.0069 107.194C78.0069 106.009 77.88 105.153 77.6261 104.625C77.3762 104.093 76.9792 103.827 76.4351 103.827C75.891 103.827 75.494 104.087 75.2442 104.607C74.9983 105.126 74.8754 105.989 74.8754 107.194ZM91.5489 107.109C91.5489 108.568 91.1438 109.685 90.3337 110.459C89.5236 111.228 88.3568 111.613 86.8334 111.613H84.3608V102.775H87.0933C88.4999 102.775 89.5942 103.154 90.376 103.911C91.1579 104.669 91.5489 105.735 91.5489 107.109ZM90.0254 107.158C90.0254 105.042 89.036 103.984 87.0571 103.984H85.8056V110.398H86.8334C88.9614 110.398 90.0254 109.318 90.0254 107.158ZM98.9365 111.613L98.0538 109.159H94.6744L93.8099 111.613H92.2864L95.5933 102.738H97.1651L100.472 111.613H98.9365ZM97.673 107.913L96.8447 105.507C96.7843 105.346 96.6996 105.092 96.5908 104.746C96.486 104.399 96.4135 104.145 96.3732 103.984C96.2644 104.48 96.1052 105.022 95.8956 105.61L95.0976 107.913H97.673ZM101.639 111.613V102.775H103.084V111.613H101.639Z" class="path-1"/> -<g clip-path="url(#clip0_14063_183893)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M34.1045 124.685C34.1045 121.755 36.4804 119.379 39.4107 119.379C42.341 119.379 44.7169 121.755 44.7169 124.685C44.7169 127.615 42.341 129.991 39.4107 129.991C36.4804 129.991 34.1045 127.615 34.1045 124.685ZM35.0047 124.685C35.0047 127.118 36.9779 129.091 39.4107 129.091C41.8435 129.091 43.8168 127.118 43.8168 124.685C43.8168 122.252 41.8435 120.279 39.4107 120.279C36.9779 120.279 35.0047 122.252 35.0047 124.685ZM41.0701 122.802H41.6256C41.7025 122.802 41.7476 122.89 41.7014 122.953L39.207 126.411C39.1721 126.46 39.1261 126.5 39.0729 126.527C39.0196 126.554 38.9606 126.569 38.9008 126.569C38.8409 126.569 38.7819 126.554 38.7287 126.527C38.6754 126.5 38.6295 126.46 38.5946 126.411L37.1188 124.365C37.0738 124.302 37.1188 124.214 37.1958 124.214H37.7513C37.8733 124.214 37.987 124.273 38.0581 124.372L38.9014 125.542L40.7633 122.96C40.8344 122.86 40.9493 122.802 41.0701 122.802Z" class="path-2"/> -</g> -<path d="M56.2665 124.385C56.2665 125.598 55.9591 126.551 55.3441 127.246C54.7327 127.94 53.8811 128.287 52.7895 128.287C51.6737 128.287 50.8117 127.947 50.2037 127.266C49.5992 126.582 49.2969 125.619 49.2969 124.375C49.2969 123.142 49.6009 122.186 50.2089 121.509C50.8169 120.829 51.6806 120.489 52.7999 120.489C53.888 120.489 54.7379 120.834 55.3493 121.525C55.9608 122.216 56.2665 123.169 56.2665 124.385ZM50.2297 124.385C50.2297 125.411 50.4473 126.19 50.8826 126.722C51.3213 127.251 51.9569 127.515 52.7895 127.515C53.629 127.515 54.2629 127.251 54.6912 126.722C55.1196 126.194 55.3338 125.415 55.3338 124.385C55.3338 123.366 55.1196 122.594 54.6912 122.069C54.2663 121.54 53.6359 121.276 52.7999 121.276C51.9604 121.276 51.3213 121.542 50.8826 122.074C50.4473 122.603 50.2297 123.373 50.2297 124.385ZM60.4742 128.287C60.1046 128.287 59.766 128.22 59.4585 128.085C59.1545 127.947 58.8989 127.736 58.6916 127.453H58.6294C58.6709 127.785 58.6916 128.099 58.6916 128.396V130.733H57.8314V122.504H58.531L58.6502 123.282H58.6916C58.9127 122.971 59.1701 122.746 59.4637 122.608C59.7574 122.47 60.0942 122.401 60.4742 122.401C61.2273 122.401 61.8077 122.658 62.2153 123.173C62.6264 123.687 62.8319 124.409 62.8319 125.339C62.8319 126.271 62.6229 126.997 62.2049 127.515C61.7904 128.03 61.2135 128.287 60.4742 128.287ZM60.3498 123.131C59.7695 123.131 59.3497 123.292 59.0906 123.613C58.8315 123.934 58.6985 124.446 58.6916 125.147V125.339C58.6916 126.137 58.8246 126.708 59.0906 127.054C59.3566 127.396 59.7833 127.567 60.3706 127.567C60.8611 127.567 61.2446 127.368 61.5209 126.971C61.8007 126.574 61.9407 126.026 61.9407 125.328C61.9407 124.62 61.8007 124.078 61.5209 123.701C61.2446 123.321 60.8542 123.131 60.3498 123.131ZM66.1742 127.577C66.3262 127.577 66.4731 127.567 66.6147 127.546C66.7563 127.522 66.8686 127.498 66.9515 127.474V128.132C66.8582 128.177 66.7201 128.213 66.537 128.241C66.3573 128.272 66.195 128.287 66.0499 128.287C64.9513 128.287 64.402 127.709 64.402 126.551V123.173H63.5885V122.758L64.402 122.401L64.7648 121.188H65.2622V122.504H66.9101V123.173H65.2622V126.515C65.2622 126.857 65.3434 127.12 65.5058 127.303C65.6681 127.486 65.891 127.577 66.1742 127.577ZM68.9517 128.184H68.0915V122.504H68.9517V128.184ZM68.019 120.965C68.019 120.768 68.0673 120.625 68.1641 120.535C68.2608 120.442 68.3817 120.395 68.5268 120.395C68.665 120.395 68.7842 120.442 68.8844 120.535C68.9845 120.628 69.0346 120.772 69.0346 120.965C69.0346 121.159 68.9845 121.304 68.8844 121.401C68.7842 121.494 68.665 121.54 68.5268 121.54C68.3817 121.54 68.2608 121.494 68.1641 121.401C68.0673 121.304 68.019 121.159 68.019 120.965ZM75.6778 125.339C75.6778 126.265 75.4446 126.988 74.9782 127.51C74.5119 128.028 73.8676 128.287 73.0454 128.287C72.5376 128.287 72.0867 128.168 71.6929 127.93C71.2991 127.691 70.9951 127.349 70.7809 126.904C70.5667 126.458 70.4596 125.936 70.4596 125.339C70.4596 124.413 70.6911 123.693 71.154 123.178C71.6169 122.66 72.2595 122.401 73.0817 122.401C73.8762 122.401 74.5067 122.665 74.973 123.193C75.4429 123.722 75.6778 124.437 75.6778 125.339ZM71.3509 125.339C71.3509 126.064 71.496 126.617 71.7862 126.997C72.0764 127.377 72.503 127.567 73.0661 127.567C73.6292 127.567 74.0558 127.379 74.346 127.002C74.6397 126.622 74.7865 126.068 74.7865 125.339C74.7865 124.617 74.6397 124.069 74.346 123.696C74.0558 123.32 73.6258 123.131 73.0558 123.131C72.4927 123.131 72.0677 123.316 71.781 123.686C71.4943 124.055 71.3509 124.606 71.3509 125.339ZM81.0773 128.184V124.51C81.0773 124.047 80.9719 123.701 80.7612 123.473C80.5505 123.245 80.2205 123.131 79.7714 123.131C79.1773 123.131 78.742 123.292 78.4656 123.613C78.1892 123.934 78.0511 124.465 78.0511 125.204V128.184H77.1909V122.504H77.8904L78.0303 123.282H78.0718C78.248 123.002 78.495 122.786 78.8128 122.634C79.1306 122.478 79.4847 122.401 79.8751 122.401C80.5591 122.401 81.0738 122.566 81.4193 122.898C81.7647 123.226 81.9375 123.753 81.9375 124.479V128.184H81.0773ZM89.0262 123.173H87.5805V128.184H86.7203V123.173H85.7047V122.784L86.7203 122.473V122.157C86.7203 120.761 87.3301 120.064 88.5495 120.064C88.8501 120.064 89.2024 120.124 89.6066 120.245L89.3838 120.934C89.0522 120.827 88.7689 120.774 88.534 120.774C88.2092 120.774 87.9691 120.882 87.8137 121.1C87.6582 121.314 87.5805 121.66 87.5805 122.136V122.504H89.0262V123.173ZM90.871 122.504V126.189C90.871 126.651 90.9764 126.997 91.1871 127.225C91.3978 127.453 91.7277 127.567 92.1768 127.567C92.771 127.567 93.2046 127.405 93.4775 127.08C93.7538 126.755 93.892 126.225 93.892 125.489V122.504H94.7522V128.184H94.0423L93.9179 127.422H93.8713C93.6951 127.702 93.4498 127.916 93.1355 128.064C92.8246 128.213 92.4687 128.287 92.068 128.287C91.3771 128.287 90.8589 128.123 90.5134 127.795C90.1714 127.467 90.0004 126.942 90.0004 126.22V122.504H90.871ZM97.4416 128.184H96.5814V120.121H97.4416V128.184ZM100.126 128.184H99.2656V120.121H100.126V128.184ZM101.048 122.504H101.971L103.214 125.743C103.487 126.482 103.656 127.016 103.722 127.344H103.763C103.808 127.168 103.902 126.867 104.043 126.442C104.188 126.014 104.658 124.701 105.453 122.504H106.375L103.934 128.971C103.693 129.61 103.409 130.063 103.085 130.329C102.763 130.598 102.368 130.733 101.898 130.733C101.635 130.733 101.376 130.704 101.121 130.645V129.956C101.311 129.997 101.523 130.018 101.758 130.018C102.349 130.018 102.77 129.686 103.022 129.023L103.339 128.215L101.048 122.504ZM112.614 123.173H111.168V128.184H110.308V123.173H109.293V122.784L110.308 122.473V122.157C110.308 120.761 110.918 120.064 112.137 120.064C112.438 120.064 112.79 120.124 113.194 120.245L112.972 120.934C112.64 120.827 112.357 120.774 112.122 120.774C111.797 120.774 111.557 120.882 111.402 121.1C111.246 121.314 111.168 121.66 111.168 122.136V122.504H112.614V123.173ZM114.459 122.504V126.189C114.459 126.651 114.564 126.997 114.775 127.225C114.986 127.453 115.316 127.567 115.765 127.567C116.359 127.567 116.792 127.405 117.065 127.08C117.342 126.755 117.48 126.225 117.48 125.489V122.504H118.34V128.184H117.63L117.506 127.422H117.459C117.283 127.702 117.038 127.916 116.723 128.064C116.412 128.213 116.057 128.287 115.656 128.287C114.965 128.287 114.447 128.123 114.101 127.795C113.759 127.467 113.588 126.942 113.588 126.22V122.504H114.459ZM124.056 128.184V124.51C124.056 124.047 123.95 123.701 123.74 123.473C123.529 123.245 123.199 123.131 122.75 123.131C122.156 123.131 121.72 123.292 121.444 123.613C121.168 123.934 121.029 124.465 121.029 125.204V128.184H120.169V122.504H120.869L121.009 123.282H121.05C121.226 123.002 121.473 122.786 121.791 122.634C122.109 122.478 122.463 122.401 122.853 122.401C123.537 122.401 124.052 122.566 124.398 122.898C124.743 123.226 124.916 123.753 124.916 124.479V128.184H124.056ZM130.554 127.422H130.507C130.11 127.999 129.516 128.287 128.724 128.287C127.982 128.287 127.403 128.033 126.989 127.525C126.577 127.018 126.372 126.296 126.372 125.359C126.372 124.423 126.579 123.696 126.994 123.178C127.408 122.66 127.985 122.401 128.724 122.401C129.495 122.401 130.086 122.68 130.497 123.24H130.564L130.528 122.831L130.507 122.432V120.121H131.367V128.184H130.668L130.554 127.422ZM128.833 127.567C129.421 127.567 129.845 127.408 130.108 127.09C130.374 126.769 130.507 126.252 130.507 125.541V125.359C130.507 124.555 130.372 123.981 130.103 123.639C129.837 123.294 129.41 123.121 128.823 123.121C128.319 123.121 127.932 123.318 127.662 123.712C127.396 124.102 127.263 124.655 127.263 125.37C127.263 126.095 127.396 126.643 127.662 127.012C127.928 127.382 128.319 127.567 128.833 127.567ZM135.596 128.287C134.756 128.287 134.093 128.032 133.606 127.52C133.122 127.009 132.88 126.299 132.88 125.391C132.88 124.475 133.105 123.748 133.554 123.209C134.007 122.67 134.613 122.401 135.373 122.401C136.084 122.401 136.648 122.636 137.062 123.105C137.477 123.572 137.684 124.188 137.684 124.955V125.499H133.772C133.789 126.166 133.956 126.672 134.274 127.018C134.596 127.363 135.046 127.536 135.627 127.536C136.238 127.536 136.843 127.408 137.44 127.152V127.919C137.136 128.051 136.848 128.144 136.575 128.199C136.306 128.258 135.979 128.287 135.596 128.287ZM135.362 123.121C134.906 123.121 134.542 123.269 134.269 123.567C134 123.864 133.841 124.275 133.792 124.8H136.762C136.762 124.257 136.641 123.843 136.399 123.556C136.157 123.266 135.812 123.121 135.362 123.121ZM143.021 127.422H142.975C142.577 127.999 141.983 128.287 141.192 128.287C140.449 128.287 139.871 128.033 139.456 127.525C139.045 127.018 138.839 126.296 138.839 125.359C138.839 124.423 139.047 123.696 139.461 123.178C139.876 122.66 140.453 122.401 141.192 122.401C141.962 122.401 142.553 122.68 142.964 123.24H143.032L142.995 122.831L142.975 122.432V120.121H143.835V128.184H143.135L143.021 127.422ZM141.301 127.567C141.888 127.567 142.313 127.408 142.576 127.09C142.842 126.769 142.975 126.252 142.975 125.541V125.359C142.975 124.555 142.84 123.981 142.57 123.639C142.304 123.294 141.878 123.121 141.29 123.121C140.786 123.121 140.399 123.318 140.13 123.712C139.864 124.102 139.731 124.655 139.731 125.37C139.731 126.095 139.864 126.643 140.13 127.012C140.396 127.382 140.786 127.567 141.301 127.567ZM151.913 128.184L151.742 127.375H151.701C151.418 127.731 151.134 127.973 150.851 128.101C150.571 128.225 150.221 128.287 149.799 128.287C149.236 128.287 148.794 128.142 148.473 127.852C148.155 127.562 147.996 127.149 147.996 126.613C147.996 125.467 148.913 124.865 150.747 124.81L151.711 124.779V124.427C151.711 123.981 151.614 123.653 151.421 123.442C151.231 123.228 150.925 123.121 150.504 123.121C150.031 123.121 149.495 123.266 148.897 123.556L148.633 122.898C148.913 122.746 149.219 122.627 149.55 122.541C149.885 122.454 150.221 122.411 150.556 122.411C151.233 122.411 151.734 122.561 152.058 122.862C152.387 123.162 152.551 123.644 152.551 124.308V128.184H151.913ZM149.97 127.577C150.506 127.577 150.925 127.43 151.229 127.137C151.537 126.843 151.69 126.432 151.69 125.904V125.391L150.83 125.427C150.146 125.451 149.652 125.558 149.348 125.748C149.048 125.935 148.897 126.227 148.897 126.624C148.897 126.935 148.991 127.171 149.177 127.334C149.367 127.496 149.632 127.577 149.97 127.577ZM156.162 127.577C156.314 127.577 156.461 127.567 156.603 127.546C156.745 127.522 156.857 127.498 156.94 127.474V128.132C156.846 128.177 156.708 128.213 156.525 128.241C156.346 128.272 156.183 128.287 156.038 128.287C154.94 128.287 154.39 127.709 154.39 126.551V123.173H153.577V122.758L154.39 122.401L154.753 121.188H155.25V122.504H156.898V123.173H155.25V126.515C155.25 126.857 155.332 127.12 155.494 127.303C155.656 127.486 155.879 127.577 156.162 127.577ZM164.5 126.634C164.5 127.163 164.303 127.57 163.909 127.857C163.515 128.144 162.963 128.287 162.251 128.287C161.498 128.287 160.911 128.168 160.489 127.93V127.132C160.762 127.27 161.054 127.379 161.365 127.458C161.679 127.538 161.982 127.577 162.272 127.577C162.721 127.577 163.066 127.506 163.308 127.365C163.55 127.22 163.671 127 163.671 126.707C163.671 126.486 163.574 126.297 163.381 126.142C163.191 125.983 162.818 125.796 162.261 125.582C161.733 125.385 161.356 125.214 161.132 125.069C160.911 124.921 160.745 124.753 160.634 124.567C160.527 124.38 160.474 124.157 160.474 123.898C160.474 123.435 160.662 123.071 161.039 122.805C161.415 122.535 161.932 122.401 162.588 122.401C163.199 122.401 163.797 122.525 164.381 122.774L164.075 123.473C163.505 123.238 162.989 123.121 162.526 123.121C162.118 123.121 161.811 123.185 161.603 123.313C161.396 123.44 161.292 123.617 161.292 123.841C161.292 123.993 161.33 124.123 161.406 124.23C161.486 124.337 161.612 124.439 161.785 124.536C161.957 124.632 162.289 124.772 162.78 124.955C163.453 125.201 163.908 125.448 164.143 125.696C164.381 125.945 164.5 126.258 164.5 126.634ZM167.739 127.577C167.891 127.577 168.038 127.567 168.179 127.546C168.321 127.522 168.433 127.498 168.516 127.474V128.132C168.423 128.177 168.285 128.213 168.101 128.241C167.922 128.272 167.759 128.287 167.614 128.287C166.516 128.287 165.967 127.709 165.967 126.551V123.173H165.153V122.758L165.967 122.401L166.329 121.188H166.827V122.504H168.475V123.173H166.827V126.515C166.827 126.857 166.908 127.12 167.07 127.303C167.233 127.486 167.455 127.577 167.739 127.577ZM173.149 128.184L172.978 127.375H172.936C172.653 127.731 172.37 127.973 172.086 128.101C171.806 128.225 171.456 128.287 171.034 128.287C170.471 128.287 170.029 128.142 169.708 127.852C169.39 127.562 169.231 127.149 169.231 126.613C169.231 125.467 170.148 124.865 171.983 124.81L172.946 124.779V124.427C172.946 123.981 172.85 123.653 172.656 123.442C172.466 123.228 172.161 123.121 171.739 123.121C171.266 123.121 170.73 123.266 170.133 123.556L169.868 122.898C170.148 122.746 170.454 122.627 170.786 122.541C171.121 122.454 171.456 122.411 171.791 122.411C172.468 122.411 172.969 122.561 173.294 122.862C173.622 123.162 173.786 123.644 173.786 124.308V128.184H173.149ZM171.205 127.577C171.741 127.577 172.161 127.43 172.465 127.137C172.772 126.843 172.926 126.432 172.926 125.904V125.391L172.066 125.427C171.382 125.451 170.888 125.558 170.584 125.748C170.283 125.935 170.133 126.227 170.133 126.624C170.133 126.935 170.226 127.171 170.413 127.334C170.603 127.496 170.867 127.577 171.205 127.577ZM180.211 122.504V123.048L179.16 123.173C179.256 123.294 179.343 123.453 179.419 123.649C179.495 123.843 179.533 124.062 179.533 124.308C179.533 124.864 179.343 125.308 178.963 125.639C178.583 125.971 178.061 126.137 177.398 126.137C177.228 126.137 177.07 126.123 176.921 126.095C176.555 126.289 176.372 126.532 176.372 126.826C176.372 126.981 176.436 127.097 176.563 127.173C176.691 127.246 176.911 127.282 177.222 127.282H178.227C178.842 127.282 179.313 127.411 179.641 127.671C179.973 127.93 180.139 128.306 180.139 128.8C180.139 129.429 179.887 129.907 179.382 130.236C178.878 130.567 178.142 130.733 177.175 130.733C176.432 130.733 175.859 130.595 175.455 130.319C175.054 130.042 174.853 129.652 174.853 129.147C174.853 128.802 174.964 128.503 175.185 128.251C175.406 127.999 175.717 127.828 176.118 127.738C175.973 127.672 175.85 127.57 175.75 127.432C175.653 127.294 175.605 127.133 175.605 126.95C175.605 126.743 175.66 126.562 175.771 126.406C175.881 126.251 176.056 126.1 176.294 125.955C176 125.834 175.76 125.629 175.574 125.339C175.391 125.049 175.299 124.717 175.299 124.344C175.299 123.722 175.486 123.244 175.859 122.908C176.232 122.57 176.76 122.401 177.444 122.401C177.741 122.401 178.009 122.435 178.248 122.504H180.211ZM175.683 129.137C175.683 129.445 175.812 129.678 176.071 129.837C176.33 129.996 176.702 130.075 177.185 130.075C177.907 130.075 178.441 129.966 178.786 129.749C179.135 129.534 179.31 129.242 179.31 128.873C179.31 128.565 179.215 128.351 179.025 128.23C178.835 128.113 178.477 128.054 177.952 128.054H176.921C176.531 128.054 176.227 128.147 176.009 128.334C175.791 128.52 175.683 128.788 175.683 129.137ZM176.149 124.323C176.149 124.72 176.261 125.021 176.486 125.225C176.71 125.429 177.023 125.53 177.424 125.53C178.263 125.53 178.683 125.123 178.683 124.308C178.683 123.454 178.258 123.028 177.408 123.028C177.004 123.028 176.693 123.136 176.475 123.354C176.258 123.572 176.149 123.895 176.149 124.323ZM183.777 128.287C182.937 128.287 182.274 128.032 181.787 127.52C181.303 127.009 181.061 126.299 181.061 125.391C181.061 124.475 181.286 123.748 181.735 123.209C182.187 122.67 182.794 122.401 183.554 122.401C184.265 122.401 184.828 122.636 185.243 123.105C185.658 123.572 185.865 124.188 185.865 124.955V125.499H181.953C181.97 126.166 182.137 126.672 182.455 127.018C182.776 127.363 183.227 127.536 183.808 127.536C184.419 127.536 185.024 127.408 185.621 127.152V127.919C185.317 128.051 185.029 128.144 184.756 128.199C184.486 128.258 184.16 128.287 183.777 128.287ZM183.543 123.121C183.087 123.121 182.723 123.269 182.45 123.567C182.181 123.864 182.022 124.275 181.973 124.8H184.942C184.942 124.257 184.822 123.843 184.58 123.556C184.338 123.266 183.992 123.121 183.543 123.121ZM192.886 128.184H192.047V122.784C192.047 122.335 192.061 121.91 192.088 121.509C192.016 121.582 191.935 121.658 191.845 121.737C191.755 121.817 191.344 122.154 190.611 122.748L190.155 122.157L192.161 120.608H192.886V128.184Z" class="path-3"/> -<path d="M39.6439 179.217C39.6439 180.527 39.4366 181.504 39.0221 182.15C38.611 182.796 37.9805 183.119 37.1307 183.119C36.3154 183.119 35.6953 182.789 35.2704 182.13C34.8455 181.466 34.633 180.496 34.633 179.217C34.633 177.898 34.8386 176.918 35.2497 176.279C35.6608 175.64 36.2878 175.321 37.1307 175.321C37.9529 175.321 38.5764 175.654 39.0014 176.321C39.4297 176.987 39.6439 177.953 39.6439 179.217ZM35.5036 179.217C35.5036 180.319 35.6331 181.123 35.8922 181.627C36.1513 182.128 36.5641 182.378 37.1307 182.378C37.7042 182.378 38.1187 182.124 38.3743 181.617C38.6334 181.105 38.763 180.306 38.763 179.217C38.763 178.129 38.6334 177.333 38.3743 176.828C38.1187 176.321 37.7042 176.067 37.1307 176.067C36.5641 176.067 36.1513 176.317 35.8922 176.818C35.6331 177.316 35.5036 178.115 35.5036 179.217ZM40.9653 182.466C40.9653 182.235 41.0171 182.06 41.1207 181.943C41.2278 181.822 41.3798 181.762 41.5767 181.762C41.7771 181.762 41.9326 181.822 42.0431 181.943C42.1571 182.06 42.2141 182.235 42.2141 182.466C42.2141 182.691 42.1571 182.864 42.0431 182.985C41.9291 183.105 41.7736 183.166 41.5767 183.166C41.4006 183.166 41.2537 183.112 41.1363 183.005C41.0223 182.895 40.9653 182.715 40.9653 182.466ZM48.5463 179.217C48.5463 180.527 48.3391 181.504 47.9245 182.15C47.5134 182.796 46.883 183.119 46.0331 183.119C45.2179 183.119 44.5978 182.789 44.1728 182.13C43.7479 181.466 43.5355 180.496 43.5355 179.217C43.5355 177.898 43.741 176.918 44.1521 176.279C44.5632 175.64 45.1902 175.321 46.0331 175.321C46.8553 175.321 47.4789 175.654 47.9038 176.321C48.3322 176.987 48.5463 177.953 48.5463 179.217ZM44.406 179.217C44.406 180.319 44.5356 181.123 44.7947 181.627C45.0538 182.128 45.4666 182.378 46.0331 182.378C46.6066 182.378 47.0211 182.124 47.2768 181.617C47.5359 181.105 47.6654 180.306 47.6654 179.217C47.6654 178.129 47.5359 177.333 47.2768 176.828C47.0211 176.321 46.6066 176.067 46.0331 176.067C45.4666 176.067 45.0538 176.317 44.7947 176.818C44.5356 177.316 44.406 178.115 44.406 179.217ZM54.6195 179.217C54.6195 180.527 54.4122 181.504 53.9977 182.15C53.5866 182.796 52.9561 183.119 52.1063 183.119C51.291 183.119 50.6709 182.789 50.246 182.13C49.8211 181.466 49.6086 180.496 49.6086 179.217C49.6086 177.898 49.8142 176.918 50.2253 176.279C50.6364 175.64 51.2634 175.321 52.1063 175.321C52.9285 175.321 53.552 175.654 53.9769 176.321C54.4053 176.987 54.6195 177.953 54.6195 179.217ZM50.4792 179.217C50.4792 180.319 50.6087 181.123 50.8678 181.627C51.1269 182.128 51.5397 182.378 52.1063 182.378C52.6797 182.378 53.0943 182.124 53.3499 181.617C53.609 181.105 53.7386 180.306 53.7386 179.217C53.7386 178.129 53.609 177.333 53.3499 176.828C53.0943 176.321 52.6797 176.067 52.1063 176.067C51.5397 176.067 51.1269 176.317 50.8678 176.818C50.6087 177.316 50.4792 178.115 50.4792 179.217ZM58.0395 178.388C58.8375 178.388 59.4645 178.587 59.9205 178.984C60.38 179.378 60.6097 179.919 60.6097 180.606C60.6097 181.39 60.3593 182.005 59.8583 182.451C59.3609 182.896 58.6734 183.119 57.796 183.119C56.9427 183.119 56.2915 182.983 55.8424 182.71V181.881C56.0842 182.036 56.3848 182.159 56.744 182.249C57.1033 182.335 57.4574 182.378 57.8063 182.378C58.4143 182.378 58.8859 182.235 59.221 181.948C59.5595 181.661 59.7288 181.247 59.7288 180.705C59.7288 179.647 59.0811 179.119 57.7856 179.119C57.4574 179.119 57.0187 179.169 56.4694 179.269L56.0238 178.984L56.3088 175.44H60.076V176.233H57.0446L56.8529 178.507C57.2501 178.428 57.6457 178.388 58.0395 178.388ZM61.8326 179.777C61.8326 178.288 62.1211 177.176 62.698 176.44C63.2784 175.701 64.1351 175.331 65.2682 175.331C65.6586 175.331 65.966 175.364 66.1906 175.429V176.17C65.9246 176.084 65.6206 176.041 65.2786 176.041C64.4667 176.041 63.8466 176.295 63.4183 176.803C62.9899 177.307 62.755 178.101 62.7135 179.186H62.7757C63.1557 178.592 63.7568 178.295 64.579 178.295C65.2596 178.295 65.795 178.5 66.1854 178.912C66.5792 179.323 66.7761 179.881 66.7761 180.585C66.7761 181.373 66.5602 181.993 66.1284 182.446C65.7 182.895 65.1197 183.119 64.3873 183.119C63.6031 183.119 62.9813 182.826 62.5218 182.238C62.0624 181.648 61.8326 180.827 61.8326 179.777ZM64.3769 182.389C64.8675 182.389 65.2475 182.235 65.5169 181.927C65.7898 181.617 65.9263 181.169 65.9263 180.585C65.9263 180.084 65.8002 179.691 65.548 179.404C65.2958 179.117 64.9193 178.974 64.4184 178.974C64.1075 178.974 63.8225 179.038 63.5634 179.166C63.3043 179.293 63.097 179.47 62.9415 179.694C62.7895 179.919 62.7135 180.152 62.7135 180.394C62.7135 180.749 62.7826 181.081 62.9208 181.389C63.059 181.696 63.2542 181.94 63.5064 182.119C63.762 182.299 64.0522 182.389 64.3769 182.389ZM75.321 183.016H71.0978V175.44H75.321V176.222H71.9787V178.663H75.1189V179.44H71.9787V182.228H75.321V183.016ZM79.337 183.016H78.456V176.222H76.0568V175.44H81.7362V176.222H79.337V183.016ZM88.6332 183.016H87.7523V179.451H83.7623V183.016H82.8814V175.44H83.7623V178.663H87.7523V175.44H88.6332V183.016ZM98.2456 180.171C98.2456 181.097 98.0124 181.82 97.546 182.342C97.0796 182.86 96.4354 183.119 95.6132 183.119C95.1054 183.119 94.6545 183 94.2607 182.762C93.8669 182.523 93.5629 182.181 93.3487 181.736C93.1345 181.29 93.0274 180.768 93.0274 180.171C93.0274 179.245 93.2589 178.525 93.7218 178.01C94.1847 177.492 94.8273 177.233 95.6495 177.233C96.444 177.233 97.0745 177.497 97.5408 178.025C98.0107 178.554 98.2456 179.269 98.2456 180.171ZM93.9187 180.171C93.9187 180.896 94.0638 181.449 94.354 181.829C94.6442 182.209 95.0708 182.399 95.6339 182.399C96.197 182.399 96.6236 182.211 96.9138 181.834C97.2075 181.454 97.3543 180.9 97.3543 180.171C97.3543 179.449 97.2075 178.901 96.9138 178.528C96.6236 178.152 96.1935 177.963 95.6235 177.963C95.0604 177.963 94.6355 178.148 94.3488 178.518C94.0621 178.887 93.9187 179.438 93.9187 180.171ZM100.567 177.336V181.021C100.567 181.484 100.672 181.829 100.883 182.057C101.094 182.285 101.424 182.399 101.873 182.399C102.467 182.399 102.901 182.237 103.174 181.912C103.45 181.587 103.588 181.057 103.588 180.321V177.336H104.448V183.016H103.738L103.614 182.254H103.567C103.391 182.534 103.146 182.748 102.832 182.896C102.521 183.045 102.165 183.119 101.764 183.119C101.073 183.119 100.555 182.955 100.209 182.627C99.8675 182.299 99.6965 181.774 99.6965 181.052V177.336H100.567ZM108.112 182.409C108.264 182.409 108.411 182.399 108.552 182.378C108.694 182.354 108.806 182.33 108.889 182.306V182.964C108.796 183.009 108.658 183.045 108.475 183.073C108.295 183.104 108.133 183.119 107.987 183.119C106.889 183.119 106.34 182.541 106.34 181.383V178.005H105.526V177.59L106.34 177.233L106.702 176.02H107.2V177.336H108.848V178.005H107.2V181.347C107.2 181.689 107.281 181.952 107.443 182.135C107.606 182.318 107.829 182.409 108.112 182.409ZM117.688 180.171C117.688 181.097 117.455 181.82 116.988 182.342C116.522 182.86 115.878 183.119 115.056 183.119C114.548 183.119 114.097 183 113.703 182.762C113.309 182.523 113.005 182.181 112.791 181.736C112.577 181.29 112.47 180.768 112.47 180.171C112.47 179.245 112.701 178.525 113.164 178.01C113.627 177.492 114.27 177.233 115.092 177.233C115.886 177.233 116.517 177.497 116.983 178.025C117.453 178.554 117.688 179.269 117.688 180.171ZM113.361 180.171C113.361 180.896 113.506 181.449 113.796 181.829C114.087 182.209 114.513 182.399 115.076 182.399C115.639 182.399 116.066 182.211 116.356 181.834C116.65 181.454 116.797 180.9 116.797 180.171C116.797 179.449 116.65 178.901 116.356 178.528C116.066 178.152 115.636 177.963 115.066 177.963C114.503 177.963 114.078 178.148 113.791 178.518C113.504 178.887 113.361 179.438 113.361 180.171ZM121.761 178.005H120.315V183.016H119.455V178.005H118.439V177.616L119.455 177.305V176.989C119.455 175.593 120.065 174.896 121.284 174.896C121.585 174.896 121.937 174.956 122.341 175.077L122.118 175.766C121.787 175.659 121.503 175.606 121.269 175.606C120.944 175.606 120.704 175.714 120.548 175.932C120.393 176.146 120.315 176.492 120.315 176.968V177.336H121.761V178.005ZM130.181 179.217C130.181 180.527 129.974 181.504 129.56 182.15C129.148 182.796 128.518 183.119 127.668 183.119C126.853 183.119 126.233 182.789 125.808 182.13C125.383 181.466 125.171 180.496 125.171 179.217C125.171 177.898 125.376 176.918 125.787 176.279C126.198 175.64 126.825 175.321 127.668 175.321C128.49 175.321 129.114 175.654 129.539 176.321C129.967 176.987 130.181 177.953 130.181 179.217ZM126.041 179.217C126.041 180.319 126.171 181.123 126.43 181.627C126.689 182.128 127.102 182.378 127.668 182.378C128.242 182.378 128.656 182.124 128.912 181.617C129.171 181.105 129.3 180.306 129.3 179.217C129.3 178.129 129.171 177.333 128.912 176.828C128.656 176.321 128.242 176.067 127.668 176.067C127.102 176.067 126.689 176.317 126.43 176.818C126.171 177.316 126.041 178.115 126.041 179.217ZM131.503 182.466C131.503 182.235 131.555 182.06 131.658 181.943C131.765 181.822 131.917 181.762 132.114 181.762C132.315 181.762 132.47 181.822 132.581 181.943C132.695 182.06 132.752 182.235 132.752 182.466C132.752 182.691 132.695 182.864 132.581 182.985C132.467 183.105 132.311 183.166 132.114 183.166C131.938 183.166 131.791 183.112 131.674 183.005C131.56 182.895 131.503 182.715 131.503 182.466ZM139.084 179.217C139.084 180.527 138.877 181.504 138.462 182.15C138.051 182.796 137.42 183.119 136.571 183.119C135.755 183.119 135.135 182.789 134.71 182.13C134.285 181.466 134.073 180.496 134.073 179.217C134.073 177.898 134.279 176.918 134.69 176.279C135.101 175.64 135.728 175.321 136.571 175.321C137.393 175.321 138.016 175.654 138.441 176.321C138.87 176.987 139.084 177.953 139.084 179.217ZM134.944 179.217C134.944 180.319 135.073 181.123 135.332 181.627C135.591 182.128 136.004 182.378 136.571 182.378C137.144 182.378 137.559 182.124 137.814 181.617C138.073 181.105 138.203 180.306 138.203 179.217C138.203 178.129 138.073 177.333 137.814 176.828C137.559 176.321 137.144 176.067 136.571 176.067C136.004 176.067 135.591 176.317 135.332 176.818C135.073 177.316 134.944 178.115 134.944 179.217ZM143.323 183.016H142.483V177.616C142.483 177.167 142.497 176.742 142.525 176.341C142.452 176.414 142.371 176.49 142.281 176.569C142.191 176.649 141.78 176.986 141.048 177.58L140.592 176.989L142.597 175.44H143.323V183.016ZM153.712 183.016H149.489V175.44H153.712V176.222H150.37V178.663H153.51V179.44H150.37V182.228H153.712V183.016ZM157.728 183.016H156.847V176.222H154.448V175.44H160.127V176.222H157.728V183.016ZM167.024 183.016H166.143V179.451H162.153V183.016H161.273V175.44H162.153V178.663H166.143V175.44H167.024V183.016ZM174.326 177.233C174.578 177.233 174.804 177.253 175.004 177.295L174.885 178.093C174.65 178.041 174.443 178.015 174.263 178.015C173.804 178.015 173.41 178.202 173.082 178.575C172.757 178.948 172.595 179.413 172.595 179.969V183.016H171.735V177.336H172.445L172.543 178.388H172.585C172.795 178.019 173.049 177.734 173.346 177.533C173.643 177.333 173.97 177.233 174.326 177.233ZM178.466 183.119C177.627 183.119 176.963 182.864 176.476 182.352C175.992 181.841 175.751 181.131 175.751 180.223C175.751 179.307 175.975 178.58 176.424 178.041C176.877 177.502 177.483 177.233 178.243 177.233C178.955 177.233 179.518 177.468 179.932 177.937C180.347 178.404 180.554 179.02 180.554 179.787V180.331H176.642C176.659 180.998 176.827 181.504 177.145 181.85C177.466 182.195 177.917 182.368 178.497 182.368C179.109 182.368 179.713 182.24 180.311 181.984V182.751C180.007 182.883 179.718 182.976 179.445 183.031C179.176 183.09 178.849 183.119 178.466 183.119ZM178.233 177.953C177.777 177.953 177.412 178.101 177.139 178.399C176.87 178.696 176.711 179.107 176.663 179.632H179.632C179.632 179.09 179.511 178.675 179.269 178.388C179.027 178.098 178.682 177.953 178.233 177.953ZM184.171 182.399C184.745 182.399 185.163 182.245 185.425 181.938C185.688 181.63 185.828 181.112 185.845 180.383V180.192C185.845 179.397 185.71 178.825 185.441 178.476C185.171 178.127 184.745 177.953 184.161 177.953C183.656 177.953 183.27 178.15 183 178.544C182.734 178.934 182.601 179.487 182.601 180.202C182.601 180.917 182.732 181.463 182.995 181.839C183.261 182.212 183.653 182.399 184.171 182.399ZM184.042 183.119C183.309 183.119 182.738 182.862 182.326 182.347C181.915 181.832 181.71 181.114 181.71 180.192C181.71 179.262 181.917 178.537 182.332 178.015C182.746 177.493 183.323 177.233 184.062 177.233C184.84 177.233 185.437 177.526 185.855 178.114H185.902L186.026 177.336H186.705V185.565H185.845V183.135C185.845 182.789 185.864 182.496 185.902 182.254H185.835C185.437 182.831 184.84 183.119 184.042 183.119ZM189.343 177.336V181.021C189.343 181.484 189.448 181.829 189.659 182.057C189.87 182.285 190.199 182.399 190.649 182.399C191.243 182.399 191.676 182.237 191.949 181.912C192.226 181.587 192.364 181.057 192.364 180.321V177.336H193.224V183.016H192.514L192.39 182.254H192.343C192.167 182.534 191.922 182.748 191.607 182.896C191.296 183.045 190.94 183.119 190.54 183.119C189.849 183.119 189.331 182.955 188.985 182.627C188.643 182.299 188.472 181.774 188.472 181.052V177.336H189.343ZM195.913 183.016H195.053V177.336H195.913V183.016ZM194.981 175.797C194.981 175.6 195.029 175.457 195.126 175.367C195.222 175.274 195.343 175.227 195.488 175.227C195.627 175.227 195.746 175.274 195.846 175.367C195.946 175.46 195.996 175.604 195.996 175.797C195.996 175.991 195.946 176.136 195.846 176.233C195.746 176.326 195.627 176.372 195.488 176.372C195.343 176.372 195.222 176.326 195.126 176.233C195.029 176.136 194.981 175.991 194.981 175.797ZM200.328 177.233C200.58 177.233 200.807 177.253 201.007 177.295L200.888 178.093C200.653 178.041 200.446 178.015 200.266 178.015C199.807 178.015 199.413 178.202 199.085 178.575C198.76 178.948 198.597 179.413 198.597 179.969V183.016H197.737V177.336H198.447L198.546 178.388H198.587C198.798 178.019 199.052 177.734 199.349 177.533C199.646 177.333 199.972 177.233 200.328 177.233ZM204.469 183.119C203.629 183.119 202.966 182.864 202.479 182.352C201.995 181.841 201.753 181.131 201.753 180.223C201.753 179.307 201.978 178.58 202.427 178.041C202.879 177.502 203.486 177.233 204.246 177.233C204.957 177.233 205.52 177.468 205.935 177.937C206.35 178.404 206.557 179.02 206.557 179.787V180.331H202.645C202.662 180.998 202.829 181.504 203.147 181.85C203.468 182.195 203.919 182.368 204.5 182.368C205.111 182.368 205.716 182.24 206.313 181.984V182.751C206.009 182.883 205.721 182.976 205.448 183.031C205.178 183.09 204.852 183.119 204.469 183.119ZM204.235 177.953C203.779 177.953 203.415 178.101 203.142 178.399C202.873 178.696 202.714 179.107 202.665 179.632H205.634C205.634 179.09 205.514 178.675 205.272 178.388C205.03 178.098 204.684 177.953 204.235 177.953ZM211.894 182.254H211.848C211.45 182.831 210.856 183.119 210.065 183.119C209.322 183.119 208.744 182.865 208.329 182.358C207.918 181.85 207.712 181.128 207.712 180.192C207.712 179.255 207.92 178.528 208.334 178.01C208.749 177.492 209.326 177.233 210.065 177.233C210.835 177.233 211.426 177.512 211.837 178.072H211.905L211.868 177.663L211.848 177.264V174.953H212.708V183.016H212.008L211.894 182.254ZM210.174 182.399C210.761 182.399 211.186 182.24 211.449 181.922C211.715 181.601 211.848 181.085 211.848 180.373V180.192C211.848 179.387 211.713 178.813 211.443 178.471C211.177 178.126 210.751 177.953 210.163 177.953C209.659 177.953 209.272 178.15 209.003 178.544C208.737 178.934 208.604 179.487 208.604 180.202C208.604 180.927 208.737 181.475 209.003 181.845C209.269 182.214 209.659 182.399 210.174 182.399Z" class="path-4"/> -<path d="M43.1183 162.014C43.1183 163.453 42.7576 164.571 42.0362 165.369C41.3188 166.167 40.3011 166.566 38.9832 166.566C37.6492 166.566 36.6235 166.171 35.9061 165.381C35.1927 164.587 34.836 163.461 34.836 162.002C34.836 160.543 35.1947 159.422 35.9121 158.641C36.6335 157.859 37.6613 157.468 38.9953 157.468C40.3092 157.468 41.3248 157.865 42.0422 158.659C42.7596 159.453 43.1183 160.571 43.1183 162.014ZM36.3716 162.014C36.3716 163.102 36.5912 163.928 37.0305 164.493C37.4698 165.053 38.1207 165.333 38.9832 165.333C39.8417 165.333 40.4885 165.055 40.9238 164.499C41.3631 163.942 41.5828 163.114 41.5828 162.014C41.5828 160.93 41.3651 160.108 40.9299 159.547C40.4986 158.987 39.8538 158.707 38.9953 158.707C38.1288 158.707 37.4739 158.987 37.0305 159.547C36.5912 160.108 36.3716 160.93 36.3716 162.014ZM47.3562 165.418C47.7028 165.418 48.0495 165.363 48.3961 165.254V166.324C48.2389 166.393 48.0353 166.449 47.7855 166.494C47.5396 166.542 47.2837 166.566 47.0177 166.566C45.6716 166.566 44.9985 165.857 44.9985 164.438V160.835H44.0856V160.206L45.065 159.686L45.5486 158.272H46.4252V159.759H48.3296V160.835H46.4252V164.414C46.4252 164.757 46.5099 165.011 46.6791 165.176C46.8524 165.337 47.0781 165.418 47.3562 165.418ZM55.6204 166.445H54.1937V162.334C54.1937 161.818 54.0889 161.434 53.8793 161.18C53.6738 160.926 53.3453 160.799 52.8939 160.799C52.2974 160.799 51.8581 160.978 51.576 161.337C51.2979 161.692 51.1589 162.288 51.1589 163.126V166.445H49.7382V157.039H51.1589V159.426C51.1589 159.809 51.1347 160.218 51.0863 160.654H51.177C51.3705 160.331 51.6385 160.081 51.981 159.904C52.3277 159.727 52.7307 159.638 53.1901 159.638C54.8103 159.638 55.6204 160.454 55.6204 162.087V166.445ZM60.5173 166.566C59.4775 166.566 58.6633 166.264 58.0749 165.659C57.4905 165.051 57.1983 164.215 57.1983 163.151C57.1983 162.058 57.4704 161.2 58.0145 160.575C58.5586 159.95 59.3062 159.638 60.2573 159.638C61.14 159.638 61.8372 159.906 62.3491 160.442C62.8609 160.978 63.1169 161.716 63.1169 162.655V163.423H58.6613C58.6815 164.071 58.8568 164.571 59.1873 164.922C59.5178 165.268 59.9833 165.442 60.5838 165.442C60.9788 165.442 61.3455 165.405 61.6841 165.333C62.0267 165.256 62.3934 165.131 62.7844 164.958V166.113C62.4378 166.278 62.0871 166.395 61.7324 166.463C61.3778 166.532 60.9727 166.566 60.5173 166.566ZM60.2573 160.714C59.8059 160.714 59.4432 160.857 59.1692 161.143C58.8991 161.43 58.7379 161.847 58.6855 162.395H61.7204C61.7123 161.843 61.5793 161.426 61.3214 161.143C61.0634 160.857 60.7087 160.714 60.2573 160.714ZM68.1225 159.638C68.4087 159.638 68.6445 159.658 68.8299 159.699L68.6908 161.022C68.4893 160.974 68.2797 160.95 68.0621 160.95C67.4938 160.95 67.0323 161.135 66.6777 161.506C66.327 161.877 66.1517 162.359 66.1517 162.951V166.445H64.731V159.759H65.8434L66.0308 160.938H66.1033C66.325 160.539 66.6132 160.222 66.9679 159.989C67.3266 159.755 67.7115 159.638 68.1225 159.638ZM79.2221 163.09C79.2221 164.182 78.942 165.035 78.3818 165.647C77.8215 166.26 77.0417 166.566 76.0422 166.566C75.4175 166.566 74.8653 166.425 74.3857 166.143C73.9061 165.861 73.5373 165.456 73.2794 164.928C73.0214 164.4 72.8924 163.787 72.8924 163.09C72.8924 162.006 73.1705 161.16 73.7267 160.551C74.2829 159.942 75.0668 159.638 76.0784 159.638C77.0457 159.638 77.8115 159.95 78.3757 160.575C78.94 161.196 79.2221 162.034 79.2221 163.09ZM74.3555 163.09C74.3555 164.634 74.9258 165.405 76.0663 165.405C77.1948 165.405 77.7591 164.634 77.7591 163.09C77.7591 161.563 77.1908 160.799 76.0542 160.799C75.4578 160.799 75.0245 160.996 74.7545 161.391C74.4885 161.786 74.3555 162.353 74.3555 163.09ZM84.252 166.566C83.4056 166.566 82.7486 166.262 82.2811 165.653H82.1965C82.2529 166.218 82.2811 166.56 82.2811 166.681V169.42H80.8604V159.759H82.0091C82.0413 159.884 82.1078 160.182 82.2086 160.654H82.2811C82.7245 159.977 83.3895 159.638 84.2761 159.638C85.1104 159.638 85.7593 159.94 86.2228 160.545C86.6903 161.149 86.9241 161.998 86.9241 163.09C86.9241 164.182 86.6863 165.035 86.2107 165.647C85.7391 166.26 85.0862 166.566 84.252 166.566ZM83.9074 160.799C83.3431 160.799 82.93 160.964 82.668 161.295C82.4101 161.625 82.2811 162.153 82.2811 162.878V163.09C82.2811 163.904 82.4101 164.495 82.668 164.861C82.926 165.224 83.3471 165.405 83.9315 165.405C84.4232 165.405 84.8021 165.204 85.0681 164.801C85.3341 164.398 85.4671 163.824 85.4671 163.078C85.4671 162.328 85.3341 161.762 85.0681 161.379C84.8061 160.992 84.4192 160.799 83.9074 160.799ZM91.0652 165.418C91.4118 165.418 91.7585 165.363 92.1051 165.254V166.324C91.9479 166.393 91.7443 166.449 91.4945 166.494C91.2486 166.542 90.9927 166.566 90.7267 166.566C89.3806 166.566 88.7075 165.857 88.7075 164.438V160.835H87.7946V160.206L88.774 159.686L89.2576 158.272H90.1342V159.759H92.0386V160.835H90.1342V164.414C90.1342 164.757 90.2189 165.011 90.3881 165.176C90.5614 165.337 90.7871 165.418 91.0652 165.418ZM94.8679 166.445H93.4472V159.759H94.8679V166.445ZM93.3625 157.988C93.3625 157.734 93.431 157.538 93.5681 157.401C93.7091 157.264 93.9086 157.196 94.1666 157.196C94.4165 157.196 94.6099 157.264 94.7469 157.401C94.888 157.538 94.9585 157.734 94.9585 157.988C94.9585 158.229 94.888 158.421 94.7469 158.562C94.6099 158.699 94.4165 158.768 94.1666 158.768C93.9086 158.768 93.7091 158.699 93.5681 158.562C93.431 158.421 93.3625 158.229 93.3625 157.988ZM102.836 163.09C102.836 164.182 102.556 165.035 101.996 165.647C101.435 166.26 100.655 166.566 99.6559 166.566C99.0312 166.566 98.479 166.425 97.9994 166.143C97.5198 165.861 97.151 165.456 96.8931 164.928C96.6352 164.4 96.5062 163.787 96.5062 163.09C96.5062 162.006 96.7843 161.16 97.3405 160.551C97.8967 159.942 98.6806 159.638 99.6922 159.638C100.659 159.638 101.425 159.95 101.989 160.575C102.554 161.196 102.836 162.034 102.836 163.09ZM97.9692 163.09C97.9692 164.634 98.5395 165.405 99.6801 165.405C100.809 165.405 101.373 164.634 101.373 163.09C101.373 161.563 100.805 160.799 99.668 160.799C99.0715 160.799 98.6382 160.996 98.3682 161.391C98.1022 161.786 97.9692 162.353 97.9692 163.09ZM110.356 166.445H108.93V162.334C108.93 161.818 108.825 161.434 108.615 161.18C108.41 160.926 108.081 160.799 107.63 160.799C107.029 160.799 106.59 160.976 106.312 161.331C106.034 161.685 105.895 162.28 105.895 163.114V166.445H104.474V159.759H105.587L105.786 160.636H105.859C106.06 160.317 106.346 160.071 106.717 159.898C107.088 159.725 107.499 159.638 107.95 159.638C109.554 159.638 110.356 160.454 110.356 162.087V166.445ZM116.825 164.541C116.825 165.194 116.587 165.696 116.112 166.046C115.636 166.393 114.955 166.566 114.068 166.566C113.178 166.566 112.462 166.431 111.922 166.161V164.934C112.708 165.297 113.44 165.478 114.117 165.478C114.991 165.478 115.429 165.214 115.429 164.686C115.429 164.517 115.38 164.376 115.284 164.263C115.187 164.15 115.028 164.033 114.806 163.912C114.584 163.791 114.276 163.654 113.881 163.501C113.111 163.203 112.589 162.905 112.315 162.606C112.045 162.308 111.91 161.921 111.91 161.446C111.91 160.873 112.14 160.43 112.599 160.116C113.063 159.797 113.692 159.638 114.486 159.638C115.271 159.638 116.015 159.797 116.716 160.116L116.257 161.186C115.535 160.887 114.929 160.738 114.437 160.738C113.688 160.738 113.313 160.952 113.313 161.379C113.313 161.589 113.409 161.766 113.603 161.911C113.8 162.056 114.228 162.256 114.885 162.51C115.437 162.723 115.838 162.919 116.088 163.096C116.337 163.273 116.523 163.479 116.644 163.713C116.765 163.942 116.825 164.219 116.825 164.541ZM119.558 157.607L119.31 160.799H118.403L118.155 157.607H119.558ZM129.085 164.541C129.085 165.194 128.848 165.696 128.372 166.046C127.896 166.393 127.215 166.566 126.329 166.566C125.438 166.566 124.723 166.431 124.183 166.161V164.934C124.968 165.297 125.7 165.478 126.377 165.478C127.252 165.478 127.689 165.214 127.689 164.686C127.689 164.517 127.641 164.376 127.544 164.263C127.447 164.15 127.288 164.033 127.066 163.912C126.845 163.791 126.536 163.654 126.141 163.501C125.371 163.203 124.85 162.905 124.575 162.606C124.305 162.308 124.17 161.921 124.17 161.446C124.17 160.873 124.4 160.43 124.86 160.116C125.323 159.797 125.952 159.638 126.746 159.638C127.532 159.638 128.275 159.797 128.977 160.116L128.517 161.186C127.796 160.887 127.189 160.738 126.697 160.738C125.948 160.738 125.573 160.952 125.573 161.379C125.573 161.589 125.67 161.766 125.863 161.911C126.061 162.056 126.488 162.256 127.145 162.51C127.697 162.723 128.098 162.919 128.348 163.096C128.598 163.273 128.783 163.479 128.904 163.713C129.025 163.942 129.085 164.219 129.085 164.541ZM135.343 166.445L135.143 165.569H135.07C134.873 165.879 134.591 166.123 134.224 166.3C133.861 166.478 133.446 166.566 132.979 166.566C132.169 166.566 131.564 166.365 131.165 165.962C130.766 165.559 130.567 164.948 130.567 164.13V159.759H131.999V163.882C131.999 164.394 132.104 164.779 132.314 165.037C132.523 165.291 132.852 165.418 133.299 165.418C133.896 165.418 134.333 165.24 134.611 164.886C134.893 164.527 135.034 163.928 135.034 163.09V159.759H136.461V166.445H135.343ZM144.121 166.445H142.694V162.322C142.694 161.81 142.597 161.43 142.404 161.18C142.21 160.926 141.908 160.799 141.497 160.799C140.949 160.799 140.546 160.978 140.288 161.337C140.034 161.692 139.907 162.284 139.907 163.114V166.445H138.486V159.759H139.599L139.798 160.636H139.871C140.056 160.317 140.324 160.071 140.675 159.898C141.029 159.725 141.418 159.638 141.841 159.638C142.869 159.638 143.55 159.989 143.885 160.69H143.982C144.179 160.36 144.457 160.102 144.816 159.916C145.175 159.731 145.586 159.638 146.049 159.638C146.847 159.638 147.427 159.84 147.79 160.243C148.157 160.646 148.34 161.26 148.34 162.087V166.445H146.92V162.322C146.92 161.81 146.821 161.43 146.623 161.18C146.43 160.926 146.128 160.799 145.717 160.799C145.164 160.799 144.759 160.972 144.501 161.319C144.248 161.661 144.121 162.189 144.121 162.903V166.445ZM159.47 163.09C159.47 164.182 159.19 165.035 158.63 165.647C158.07 166.26 157.29 166.566 156.29 166.566C155.665 166.566 155.113 166.425 154.634 166.143C154.154 165.861 153.785 165.456 153.527 164.928C153.269 164.4 153.14 163.787 153.14 163.09C153.14 162.006 153.419 161.16 153.975 160.551C154.531 159.942 155.315 159.638 156.326 159.638C157.294 159.638 158.06 159.95 158.624 160.575C159.188 161.196 159.47 162.034 159.47 163.09ZM154.603 163.09C154.603 164.634 155.174 165.405 156.314 165.405C157.443 165.405 158.007 164.634 158.007 163.09C158.007 161.563 157.439 160.799 156.302 160.799C155.706 160.799 155.273 160.996 155.002 161.391C154.736 161.786 154.603 162.353 154.603 163.09ZM164.464 160.835H162.831V166.445H161.405V160.835H160.304V160.17L161.405 159.735V159.3C161.405 158.51 161.59 157.925 161.961 157.546C162.332 157.163 162.898 156.972 163.66 156.972C164.159 156.972 164.651 157.055 165.135 157.22L164.76 158.296C164.409 158.183 164.075 158.127 163.756 158.127C163.434 158.127 163.198 158.227 163.049 158.429C162.904 158.626 162.831 158.925 162.831 159.324V159.759H164.464V160.835ZM172.178 160.835H170.545V166.445H169.119V160.835H168.018V160.17L169.119 159.735V159.3C169.119 158.51 169.304 157.925 169.675 157.546C170.046 157.163 170.612 156.972 171.374 156.972C171.873 156.972 172.365 157.055 172.849 157.22L172.474 158.296C172.123 158.183 171.789 158.127 171.47 158.127C171.148 158.127 170.912 158.227 170.763 158.429C170.618 158.626 170.545 158.925 170.545 159.324V159.759H172.178V160.835ZM178.036 166.445L177.836 165.569H177.764C177.566 165.879 177.284 166.123 176.917 166.3C176.555 166.478 176.14 166.566 175.672 166.566C174.862 166.566 174.257 166.365 173.858 165.962C173.459 165.559 173.26 164.948 173.26 164.13V159.759H174.693V163.882C174.693 164.394 174.797 164.779 175.007 165.037C175.217 165.291 175.545 165.418 175.992 165.418C176.589 165.418 177.026 165.24 177.304 164.886C177.586 164.527 177.728 163.928 177.728 163.09V159.759H179.154V166.445H178.036ZM187.062 166.445H185.635V162.334C185.635 161.818 185.53 161.434 185.321 161.18C185.115 160.926 184.787 160.799 184.335 160.799C183.735 160.799 183.295 160.976 183.017 161.331C182.739 161.685 182.6 162.28 182.6 163.114V166.445H181.18V159.759H182.292L182.491 160.636H182.564C182.765 160.317 183.052 160.071 183.422 159.898C183.793 159.725 184.204 159.638 184.656 159.638C186.26 159.638 187.062 160.454 187.062 162.087V166.445ZM191.294 166.566C190.459 166.566 189.808 166.264 189.341 165.659C188.873 165.055 188.64 164.206 188.64 163.114C188.64 162.018 188.875 161.166 189.347 160.557C189.823 159.944 190.48 159.638 191.318 159.638C192.196 159.638 192.865 159.963 193.325 160.611H193.397C193.329 160.132 193.295 159.753 193.295 159.475V157.039H194.721V166.445H193.609L193.361 165.569H193.295C192.839 166.234 192.172 166.566 191.294 166.566ZM191.675 165.418C192.259 165.418 192.684 165.254 192.95 164.928C193.216 164.597 193.353 164.063 193.361 163.326V163.126C193.361 162.284 193.224 161.685 192.95 161.331C192.676 160.976 192.247 160.799 191.662 160.799C191.163 160.799 190.778 161.002 190.508 161.409C190.238 161.812 190.103 162.389 190.103 163.138C190.103 163.88 190.234 164.446 190.496 164.837C190.758 165.224 191.151 165.418 191.675 165.418ZM201.245 164.541C201.245 165.194 201.007 165.696 200.531 166.046C200.056 166.393 199.374 166.566 198.488 166.566C197.597 166.566 196.882 166.431 196.342 166.161V164.934C197.128 165.297 197.859 165.478 198.536 165.478C199.411 165.478 199.848 165.214 199.848 164.686C199.848 164.517 199.8 164.376 199.703 164.263C199.606 164.15 199.447 164.033 199.225 163.912C199.004 163.791 198.695 163.654 198.3 163.501C197.531 163.203 197.009 162.905 196.735 162.606C196.465 162.308 196.33 161.921 196.33 161.446C196.33 160.873 196.559 160.43 197.019 160.116C197.482 159.797 198.111 159.638 198.905 159.638C199.691 159.638 200.434 159.797 201.136 160.116L200.676 161.186C199.955 160.887 199.348 160.738 198.857 160.738C198.107 160.738 197.732 160.952 197.732 161.379C197.732 161.589 197.829 161.766 198.022 161.911C198.22 162.056 198.647 162.256 199.304 162.51C199.856 162.723 200.257 162.919 200.507 163.096C200.757 163.273 200.942 163.479 201.063 163.713C201.184 163.942 201.245 164.219 201.245 164.541Z" class="path-5"/> -<path d="M269.814 170.773C270.745 170.773 271.476 171.005 272.008 171.468C272.544 171.928 272.812 172.559 272.812 173.361C272.812 174.276 272.52 174.993 271.936 175.513C271.355 176.033 270.553 176.293 269.53 176.293C268.534 176.293 267.774 176.134 267.25 175.815V174.848C267.533 175.029 267.883 175.172 268.302 175.277C268.722 175.378 269.135 175.428 269.542 175.428C270.251 175.428 270.801 175.261 271.192 174.927C271.587 174.592 271.785 174.108 271.785 173.476C271.785 172.242 271.029 171.626 269.518 171.626C269.135 171.626 268.623 171.684 267.982 171.801L267.462 171.468L267.795 167.333H272.19V168.258H268.653L268.429 170.912C268.893 170.82 269.354 170.773 269.814 170.773ZM274.239 172.393C274.239 170.656 274.576 169.359 275.249 168.5C275.926 167.638 276.925 167.206 278.247 167.206C278.703 167.206 279.061 167.245 279.323 167.321V168.186C279.013 168.085 278.658 168.035 278.259 168.035C277.312 168.035 276.589 168.331 276.089 168.923C275.589 169.512 275.315 170.439 275.267 171.704H275.339C275.783 171.011 276.484 170.664 277.443 170.664C278.237 170.664 278.862 170.904 279.317 171.384C279.777 171.863 280.006 172.514 280.006 173.337C280.006 174.255 279.755 174.979 279.251 175.507C278.751 176.031 278.074 176.293 277.22 176.293C276.305 176.293 275.579 175.95 275.043 175.265C274.507 174.576 274.239 173.619 274.239 172.393ZM277.207 175.44C277.78 175.44 278.223 175.261 278.537 174.902C278.856 174.54 279.015 174.018 279.015 173.337C279.015 172.752 278.868 172.293 278.574 171.958C278.279 171.624 277.84 171.456 277.256 171.456C276.893 171.456 276.561 171.531 276.258 171.68C275.956 171.829 275.714 172.035 275.533 172.297C275.355 172.559 275.267 172.831 275.267 173.113C275.267 173.528 275.347 173.915 275.509 174.274C275.67 174.632 275.898 174.916 276.192 175.126C276.49 175.336 276.829 175.44 277.207 175.44ZM282.08 169.969C282.08 170.654 282.155 171.168 282.304 171.511C282.453 171.853 282.695 172.025 283.029 172.025C283.69 172.025 284.021 171.34 284.021 169.969C284.021 168.607 283.69 167.926 283.029 167.926C282.695 167.926 282.453 168.095 282.304 168.434C282.155 168.772 282.08 169.284 282.08 169.969ZM284.849 169.969C284.849 170.888 284.694 171.583 284.383 172.055C284.077 172.522 283.626 172.756 283.029 172.756C282.465 172.756 282.026 172.516 281.711 172.037C281.401 171.557 281.246 170.868 281.246 169.969C281.246 169.054 281.395 168.365 281.693 167.902C281.995 167.438 282.441 167.206 283.029 167.206C283.614 167.206 284.063 167.446 284.377 167.926C284.692 168.405 284.849 169.087 284.849 169.969ZM287.4 173.512C287.4 174.201 287.475 174.717 287.624 175.06C287.773 175.398 288.017 175.567 288.355 175.567C288.694 175.567 288.944 175.4 289.105 175.066C289.266 174.727 289.347 174.209 289.347 173.512C289.347 172.823 289.266 172.313 289.105 171.982C288.944 171.648 288.694 171.481 288.355 171.481C288.017 171.481 287.773 171.648 287.624 171.982C287.475 172.313 287.4 172.823 287.4 173.512ZM290.175 173.512C290.175 174.427 290.02 175.12 289.71 175.592C289.403 176.059 288.952 176.293 288.355 176.293C287.783 176.293 287.342 176.053 287.031 175.573C286.725 175.094 286.572 174.407 286.572 173.512C286.572 172.597 286.721 171.908 287.019 171.444C287.322 170.981 287.767 170.749 288.355 170.749C288.928 170.749 289.373 170.987 289.691 171.462C290.014 171.934 290.175 172.617 290.175 173.512ZM288.615 167.333L283.712 176.172H282.824L287.727 167.333H288.615Z" class="path-6"/> -<rect x="304.722" y="169.359" width="75.1715" height="7.07497" rx="3.53748" class="rect-4"/> -<rect x="304.722" y="169.359" width="51.69" height="7.07497" rx="3.53748" class="rect-5"/> -<rect x="13.5" y="14.7656" width="59" height="56.7358" rx="1.19811" fill="#2A1260" class="rect-6"/> -<path d="M46.2084 53.6055H39.6348V52.4247L42.1356 49.9107C42.8741 49.1546 43.3627 48.6195 43.6015 48.3055C43.8447 47.9871 44.0216 47.6886 44.1322 47.41C44.2427 47.1314 44.298 46.8329 44.298 46.5145C44.298 46.0767 44.1653 45.7318 43.9 45.4797C43.6391 45.2277 43.2765 45.1016 42.8122 45.1016C42.4407 45.1016 42.0803 45.1702 41.7309 45.3073C41.386 45.4444 40.9858 45.692 40.5303 46.0502L39.6879 45.022C40.2274 44.5666 40.7514 44.2437 41.26 44.0536C41.7685 43.8634 42.3102 43.7684 42.8851 43.7684C43.7873 43.7684 44.5103 44.0049 45.0542 44.4781C45.5981 44.9469 45.8701 45.5792 45.8701 46.3752C45.8701 46.813 45.7905 47.2287 45.6313 47.6223C45.4765 48.0158 45.2355 48.4227 44.9083 48.8428C44.5855 49.2585 44.0459 49.8223 43.2898 50.5343L41.6049 52.1661V52.2324H46.2084V53.6055Z" class="path-7"/> -<path d="M36.2541 31.3506C36.2541 31.8536 36.0722 32.2483 35.7085 32.5346C35.3447 32.8209 34.843 32.9641 34.2033 32.9641C33.5635 32.9641 33.0399 32.8648 32.6323 32.6662V31.7917C32.8903 31.9129 33.1637 32.0084 33.4526 32.078C33.7441 32.1477 34.015 32.1825 34.2652 32.1825C34.6315 32.1825 34.9011 32.1128 35.0739 31.9735C35.2493 31.8342 35.337 31.6472 35.337 31.4125C35.337 31.201 35.257 31.0217 35.0971 30.8746C34.9372 30.7276 34.607 30.5535 34.1065 30.3523C33.5906 30.1433 33.2269 29.9047 33.0154 29.6364C32.8038 29.3681 32.6981 29.0457 32.6981 28.6691C32.6981 28.197 32.8658 27.8255 33.2011 27.5547C33.5365 27.2838 33.9866 27.1484 34.5515 27.1484C35.0932 27.1484 35.6324 27.2671 36.1689 27.5044L35.8749 28.2589C35.3718 28.0474 34.923 27.9416 34.5283 27.9416C34.2291 27.9416 34.0021 28.0074 33.8473 28.139C33.6925 28.2679 33.6151 28.4395 33.6151 28.6536C33.6151 28.8006 33.6461 28.927 33.708 29.0328C33.7699 29.136 33.8718 29.234 34.0137 29.3269C34.1556 29.4197 34.4109 29.5423 34.7798 29.6945C35.1951 29.8673 35.4995 30.0285 35.693 30.1781C35.8865 30.3278 36.0283 30.4967 36.1186 30.685C36.2089 30.8733 36.2541 31.0952 36.2541 31.3506ZM38.8466 32.2289C39.0684 32.2289 39.2902 32.1941 39.5121 32.1244V32.8093C39.4115 32.8532 39.2812 32.8893 39.1213 32.9177C38.9639 32.9486 38.8001 32.9641 38.6299 32.9641C37.7683 32.9641 37.3375 32.5101 37.3375 31.6021V29.2959H36.7532V28.8935L37.3801 28.5607L37.6896 27.6553H38.2507V28.6072H39.4695V29.2959H38.2507V31.5866C38.2507 31.8059 38.3048 31.9684 38.4132 32.0741C38.5241 32.1773 38.6686 32.2289 38.8466 32.2289ZM43.0487 32.8867L42.8669 32.2908H42.8359C42.6295 32.5514 42.4219 32.7294 42.2129 32.8248C42.004 32.9177 41.7357 32.9641 41.4081 32.9641C40.9876 32.9641 40.6587 32.8506 40.4214 32.6236C40.1867 32.3966 40.0693 32.0754 40.0693 31.6601C40.0693 31.219 40.2331 30.8862 40.5607 30.6618C40.8883 30.4374 41.3875 30.3149 42.0582 30.2942L42.7972 30.271V30.0427C42.7972 29.7693 42.7327 29.5655 42.6037 29.4313C42.4773 29.2946 42.28 29.2263 42.0117 29.2263C41.7925 29.2263 41.5822 29.2585 41.381 29.323C41.1798 29.3875 40.9863 29.4636 40.8006 29.5513L40.5065 28.9012C40.7387 28.78 40.9928 28.6884 41.2688 28.6265C41.5448 28.562 41.8054 28.5298 42.0504 28.5298C42.5947 28.5298 43.0049 28.6484 43.2809 28.8858C43.5595 29.1231 43.6988 29.4958 43.6988 30.004V32.8867H43.0487ZM41.6944 32.2676C42.0246 32.2676 42.289 32.176 42.4877 31.9929C42.6889 31.8072 42.7895 31.5479 42.7895 31.2151V30.8437L42.24 30.8669C41.8118 30.8824 41.4997 30.9546 41.3036 31.0836C41.1102 31.21 41.0134 31.4047 41.0134 31.6679C41.0134 31.8587 41.0702 32.0071 41.1837 32.1128C41.2972 32.216 41.4674 32.2676 41.6944 32.2676ZM48.582 28.6072V29.1063L47.8506 29.2417C47.9177 29.332 47.9732 29.443 48.017 29.5745C48.0609 29.7061 48.0828 29.8454 48.0828 29.9924C48.0828 30.4335 47.9306 30.7805 47.6262 31.0333C47.3218 31.2861 46.9026 31.4125 46.3687 31.4125C46.2319 31.4125 46.1081 31.4022 45.9972 31.3815C45.8012 31.5028 45.7031 31.6446 45.7031 31.8072C45.7031 31.9052 45.7483 31.9787 45.8386 32.0277C45.9314 32.0767 46.1004 32.1012 46.3454 32.1012H47.0922C47.5643 32.1012 47.9229 32.2018 48.1679 32.403C48.413 32.6043 48.5355 32.8945 48.5355 33.2737C48.5355 33.7586 48.3356 34.1327 47.9358 34.3958C47.5359 34.6589 46.9581 34.7905 46.2023 34.7905C45.6193 34.7905 45.1743 34.6873 44.8673 34.4809C44.5604 34.2745 44.4069 33.9805 44.4069 33.5987C44.4069 33.3356 44.4894 33.1137 44.6545 32.9332C44.8222 32.7552 45.0556 32.6313 45.3549 32.5617C45.2336 32.5101 45.133 32.4276 45.0531 32.314C44.9757 32.198 44.937 32.0767 44.937 31.9503C44.937 31.7904 44.9821 31.655 45.0724 31.544C45.1627 31.4331 45.2968 31.3235 45.4748 31.2151C45.253 31.1197 45.0724 30.9649 44.9331 30.7508C44.7964 30.5341 44.728 30.2813 44.728 29.9924C44.728 29.5281 44.8738 29.1682 45.1653 28.9128C45.4594 28.6575 45.8773 28.5298 46.419 28.5298C46.5402 28.5298 46.6666 28.5388 46.7982 28.5569C46.9323 28.5723 47.0329 28.5891 47.1 28.6072H48.582ZM45.2195 33.5523C45.2195 33.7483 45.3072 33.8992 45.4826 34.005C45.6606 34.1107 45.9095 34.1636 46.2294 34.1636C46.7247 34.1636 47.0935 34.0927 47.336 33.9508C47.5785 33.8089 47.6997 33.6206 47.6997 33.3859C47.6997 33.2001 47.6327 33.0673 47.4985 32.9873C47.367 32.9099 47.1206 32.8712 46.7595 32.8712H46.0707C45.8102 32.8712 45.6025 32.9319 45.4477 33.0531C45.2956 33.1769 45.2195 33.3433 45.2195 33.5523ZM45.6103 29.9924C45.6103 30.2607 45.6786 30.4671 45.8153 30.6115C45.9546 30.756 46.1533 30.8282 46.4112 30.8282C46.9375 30.8282 47.2006 30.547 47.2006 29.9847C47.2006 29.7061 47.1348 29.492 47.0032 29.3423C46.8743 29.1902 46.6769 29.1141 46.4112 29.1141C46.1481 29.1141 45.9482 29.1889 45.8115 29.3385C45.6773 29.4881 45.6103 29.7061 45.6103 29.9924ZM51.248 32.9641C50.5824 32.9641 50.0614 32.7706 49.6847 32.3837C49.3107 31.9942 49.1237 31.4589 49.1237 30.7779C49.1237 30.0788 49.2978 29.5294 49.646 29.1295C49.9943 28.7297 50.4728 28.5298 51.0816 28.5298C51.6465 28.5298 52.0928 28.7013 52.4204 29.0444C52.748 29.3875 52.9118 29.8596 52.9118 30.4606V30.952H50.0601C50.073 31.3673 50.1852 31.6872 50.3967 31.9116C50.6082 32.1335 50.9062 32.2444 51.2905 32.2444C51.5433 32.2444 51.7781 32.2212 51.9948 32.1747C52.214 32.1257 52.4488 32.0458 52.699 31.9348V32.6739C52.4772 32.7797 52.2527 32.8545 52.0257 32.8983C51.7987 32.9422 51.5395 32.9641 51.248 32.9641ZM51.0816 29.2185C50.7927 29.2185 50.5605 29.3101 50.3851 29.4933C50.2123 29.6764 50.1091 29.9434 50.0755 30.2942H52.018C52.0128 29.9408 51.9277 29.6738 51.7626 29.4933C51.5975 29.3101 51.3705 29.2185 51.0816 29.2185Z" class="path-8"/> -<defs> -<clipPath id="clip0_14063_183893"> -<rect width="10.6125" height="10.6125" transform="translate(34.1045 119.379)" class="rect-7"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/appeal/who-wins-rewards.svg b/web/src/assets/svgs/mini-guides/appeal/who-wins-rewards.svg deleted file mode 100644 index b73b553db..000000000 --- a/web/src/assets/svgs/mini-guides/appeal/who-wins-rewards.svg +++ /dev/null @@ -1,38 +0,0 @@ -<svg width="332" height="268" viewBox="0 0 332 268" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M0.364835 2.18902C0.364835 1.18155 1.18155 0.364835 2.18901 0.364835H329.811C330.818 0.364835 331.635 1.18155 331.635 2.18901V265.811C331.635 266.818 330.818 267.635 329.811 267.635H2.18903C1.18156 267.635 0.364835 266.818 0.364835 265.811V2.18902Z" stroke-width="0.72967" class="path-1"/> -<path d="M56.9932 32.9014C55.8949 32.9014 55.0267 33.2682 54.3887 34.002C53.7552 34.7311 53.4385 35.7314 53.4385 37.0029C53.4385 38.3109 53.7438 39.3226 54.3545 40.0381C54.9697 40.749 55.8447 41.1045 56.9795 41.1045C57.6768 41.1045 58.472 40.9792 59.3652 40.7285V41.7471C58.6725 42.0068 57.818 42.1367 56.8018 42.1367C55.3298 42.1367 54.1927 41.6901 53.3906 40.7969C52.5931 39.9036 52.1943 38.6344 52.1943 36.9893C52.1943 35.9593 52.3857 35.057 52.7686 34.2822C53.1559 33.5075 53.7119 32.9105 54.4365 32.4912C55.1657 32.0719 56.0225 31.8623 57.0068 31.8623C58.055 31.8623 58.971 32.0537 59.7549 32.4365L59.2627 33.4346C58.5062 33.0791 57.7497 32.9014 56.9932 32.9014ZM64.793 34.3711C65.1257 34.3711 65.4242 34.3984 65.6885 34.4531L65.5312 35.5059C65.2214 35.4375 64.9479 35.4033 64.7109 35.4033C64.1048 35.4033 63.5853 35.6494 63.1523 36.1416C62.724 36.6338 62.5098 37.2467 62.5098 37.9805V42H61.375V34.5078H62.3115L62.4414 35.8955H62.4961C62.7741 35.4079 63.109 35.0319 63.501 34.7676C63.8929 34.5033 64.3236 34.3711 64.793 34.3711ZM73.5566 38.2471C73.5566 39.4684 73.249 40.4232 72.6338 41.1113C72.0186 41.7949 71.1686 42.1367 70.084 42.1367C69.4141 42.1367 68.8193 41.9795 68.2998 41.665C67.7803 41.3506 67.3792 40.8994 67.0967 40.3115C66.8141 39.7236 66.6729 39.0355 66.6729 38.2471C66.6729 37.0257 66.9782 36.0755 67.5889 35.3965C68.1995 34.7129 69.0472 34.3711 70.1318 34.3711C71.18 34.3711 72.0117 34.7197 72.627 35.417C73.2467 36.1143 73.5566 37.0576 73.5566 38.2471ZM67.8486 38.2471C67.8486 39.2041 68.04 39.9333 68.4229 40.4346C68.8057 40.9359 69.3685 41.1865 70.1113 41.1865C70.8542 41.1865 71.417 40.9382 71.7998 40.4414C72.1872 39.9401 72.3809 39.2087 72.3809 38.2471C72.3809 37.2946 72.1872 36.5723 71.7998 36.0801C71.417 35.5833 70.8496 35.335 70.0977 35.335C69.3548 35.335 68.7943 35.5788 68.416 36.0664C68.0378 36.554 67.8486 37.2809 67.8486 38.2471ZM81.6709 42L80.2969 37.6045C80.2103 37.3356 80.0485 36.7249 79.8115 35.7725H79.7568C79.5745 36.57 79.415 37.1852 79.2783 37.6182L77.8633 42H76.5508L74.5068 34.5078H75.6963C76.1794 36.39 76.5462 37.8232 76.7969 38.8076C77.0521 39.792 77.1979 40.4551 77.2344 40.7969H77.2891C77.3392 40.5371 77.4189 40.2021 77.5283 39.792C77.6423 39.3773 77.7402 39.0492 77.8223 38.8076L79.1963 34.5078H80.4268L81.7666 38.8076C82.0218 39.5915 82.195 40.25 82.2861 40.7832H82.3408C82.359 40.6191 82.4069 40.3662 82.4844 40.0244C82.5664 39.6826 83.0426 37.8438 83.9131 34.5078H85.0889L83.0176 42H81.6709ZM91.5488 40.9951H91.4873C90.9632 41.7562 90.1794 42.1367 89.1357 42.1367C88.1559 42.1367 87.3926 41.8018 86.8457 41.1318C86.3034 40.4619 86.0322 39.5094 86.0322 38.2744C86.0322 37.0394 86.3057 36.0801 86.8525 35.3965C87.3994 34.7129 88.1605 34.3711 89.1357 34.3711C90.152 34.3711 90.9313 34.7402 91.4736 35.4785H91.5625L91.5146 34.9385L91.4873 34.4121V31.3633H92.6221V42H91.6992L91.5488 40.9951ZM89.2793 41.1865C90.054 41.1865 90.6146 40.9769 90.9609 40.5576C91.3118 40.1338 91.4873 39.4525 91.4873 38.5137V38.2744C91.4873 37.2126 91.3096 36.4561 90.9541 36.0049C90.6032 35.5492 90.0404 35.3213 89.2656 35.3213C88.6003 35.3213 88.0898 35.5811 87.7344 36.1006C87.3835 36.6156 87.208 37.3447 87.208 38.2881C87.208 39.2451 87.3835 39.9674 87.7344 40.4551C88.0853 40.9427 88.6003 41.1865 89.2793 41.1865ZM98.4121 35.3896H96.5049V42H95.3701V35.3896H94.0303V34.877L95.3701 34.4668V34.0498C95.3701 32.2087 96.1745 31.2881 97.7832 31.2881C98.1797 31.2881 98.6445 31.3678 99.1777 31.5273L98.8838 32.4365C98.4463 32.2952 98.0726 32.2246 97.7627 32.2246C97.3343 32.2246 97.0176 32.3682 96.8125 32.6553C96.6074 32.9378 96.5049 33.3936 96.5049 34.0225V34.5078H98.4121V35.3896ZM100.846 34.5078V39.3682C100.846 39.9788 100.985 40.4346 101.263 40.7354C101.541 41.0361 101.976 41.1865 102.568 41.1865C103.352 41.1865 103.924 40.9723 104.284 40.5439C104.649 40.1156 104.831 39.416 104.831 38.4453V34.5078H105.966V42H105.029L104.865 40.9951H104.804C104.571 41.3643 104.248 41.6468 103.833 41.8428C103.423 42.0387 102.953 42.1367 102.425 42.1367C101.513 42.1367 100.83 41.9202 100.374 41.4873C99.9229 41.0544 99.6973 40.3617 99.6973 39.4092V34.5078H100.846ZM113.506 42V37.1533C113.506 36.5426 113.367 36.0869 113.089 35.7861C112.811 35.4854 112.376 35.335 111.783 35.335C110.999 35.335 110.425 35.5469 110.061 35.9707C109.696 36.3945 109.514 37.0941 109.514 38.0693V42H108.379V34.5078H109.302L109.486 35.5332H109.541C109.773 35.1641 110.099 34.8792 110.519 34.6787C110.938 34.4736 111.405 34.3711 111.92 34.3711C112.822 34.3711 113.501 34.5898 113.957 35.0273C114.413 35.4603 114.641 36.1553 114.641 37.1123V42H113.506ZM122.078 40.9951H122.017C121.493 41.7562 120.709 42.1367 119.665 42.1367C118.685 42.1367 117.922 41.8018 117.375 41.1318C116.833 40.4619 116.562 39.5094 116.562 38.2744C116.562 37.0394 116.835 36.0801 117.382 35.3965C117.929 34.7129 118.69 34.3711 119.665 34.3711C120.681 34.3711 121.461 34.7402 122.003 35.4785H122.092L122.044 34.9385L122.017 34.4121V31.3633H123.151V42H122.229L122.078 40.9951ZM119.809 41.1865C120.583 41.1865 121.144 40.9769 121.49 40.5576C121.841 40.1338 122.017 39.4525 122.017 38.5137V38.2744C122.017 37.2126 121.839 36.4561 121.483 36.0049C121.132 35.5492 120.57 35.3213 119.795 35.3213C119.13 35.3213 118.619 35.5811 118.264 36.1006C117.913 36.6156 117.737 37.3447 117.737 38.2881C117.737 39.2451 117.913 39.9674 118.264 40.4551C118.615 40.9427 119.13 41.1865 119.809 41.1865ZM126.699 42H125.564V34.5078H126.699V42ZM125.469 32.4775C125.469 32.2178 125.533 32.0286 125.66 31.9102C125.788 31.7871 125.947 31.7256 126.139 31.7256C126.321 31.7256 126.478 31.7871 126.61 31.9102C126.743 32.0332 126.809 32.2223 126.809 32.4775C126.809 32.7327 126.743 32.9242 126.61 33.0518C126.478 33.1748 126.321 33.2363 126.139 33.2363C125.947 33.2363 125.788 33.1748 125.66 33.0518C125.533 32.9242 125.469 32.7327 125.469 32.4775ZM134.232 42V37.1533C134.232 36.5426 134.093 36.0869 133.815 35.7861C133.537 35.4854 133.102 35.335 132.51 35.335C131.726 35.335 131.152 35.5469 130.787 35.9707C130.423 36.3945 130.24 37.0941 130.24 38.0693V42H129.105V34.5078H130.028L130.213 35.5332H130.268C130.5 35.1641 130.826 34.8792 131.245 34.6787C131.664 34.4736 132.132 34.3711 132.646 34.3711C133.549 34.3711 134.228 34.5898 134.684 35.0273C135.139 35.4603 135.367 36.1553 135.367 37.1123V42H134.232ZM143.837 34.5078V35.2256L142.449 35.3896C142.577 35.5492 142.691 35.7588 142.791 36.0186C142.891 36.2738 142.941 36.5632 142.941 36.8867C142.941 37.6204 142.691 38.2061 142.189 38.6436C141.688 39.0811 141 39.2998 140.125 39.2998C139.902 39.2998 139.692 39.2816 139.496 39.2451C139.013 39.5003 138.771 39.8216 138.771 40.209C138.771 40.4141 138.856 40.5667 139.024 40.667C139.193 40.7627 139.482 40.8105 139.893 40.8105H141.219C142.03 40.8105 142.652 40.9814 143.085 41.3232C143.522 41.665 143.741 42.1618 143.741 42.8135C143.741 43.6429 143.409 44.2741 142.743 44.707C142.078 45.1445 141.107 45.3633 139.831 45.3633C138.851 45.3633 138.095 45.181 137.562 44.8164C137.033 44.4518 136.769 43.9368 136.769 43.2715C136.769 42.8158 136.914 42.4215 137.206 42.0889C137.498 41.7562 137.908 41.5306 138.437 41.4121C138.245 41.3255 138.083 41.1911 137.951 41.0088C137.824 40.8265 137.76 40.6146 137.76 40.373C137.76 40.0996 137.833 39.8604 137.979 39.6553C138.124 39.4502 138.354 39.252 138.669 39.0605C138.282 38.901 137.965 38.6299 137.719 38.2471C137.477 37.8643 137.356 37.4268 137.356 36.9346C137.356 36.1143 137.603 35.4831 138.095 35.041C138.587 34.5944 139.284 34.3711 140.187 34.3711C140.578 34.3711 140.932 34.4167 141.246 34.5078H143.837ZM137.862 43.2578C137.862 43.6634 138.033 43.971 138.375 44.1807C138.717 44.3903 139.207 44.4951 139.845 44.4951C140.797 44.4951 141.501 44.3516 141.957 44.0645C142.417 43.7819 142.647 43.3968 142.647 42.9092C142.647 42.5036 142.522 42.221 142.271 42.0615C142.021 41.9066 141.549 41.8291 140.856 41.8291H139.496C138.981 41.8291 138.58 41.9521 138.293 42.1982C138.006 42.4443 137.862 42.7975 137.862 43.2578ZM138.478 36.9072C138.478 37.4313 138.626 37.8278 138.922 38.0967C139.218 38.3656 139.631 38.5 140.159 38.5C141.267 38.5 141.82 37.9622 141.82 36.8867C141.82 35.7611 141.26 35.1982 140.139 35.1982C139.605 35.1982 139.195 35.3418 138.908 35.6289C138.621 35.916 138.478 36.3421 138.478 36.9072ZM150.345 37.8438V42H149.183V32.0059H151.924C153.15 32.0059 154.054 32.2406 154.638 32.71C155.226 33.1794 155.52 33.8857 155.52 34.8291C155.52 36.1507 154.85 37.0439 153.51 37.5088L156.224 42H154.85L152.43 37.8438H150.345ZM150.345 36.8457H151.938C152.758 36.8457 153.359 36.6839 153.742 36.3604C154.125 36.0322 154.316 35.5423 154.316 34.8906C154.316 34.2298 154.12 33.7536 153.729 33.4619C153.341 33.1702 152.717 33.0244 151.855 33.0244H150.345V36.8457ZM160.831 42.1367C159.724 42.1367 158.849 41.7995 158.206 41.125C157.568 40.4505 157.249 39.514 157.249 38.3154C157.249 37.1077 157.545 36.1484 158.138 35.4375C158.735 34.7266 159.535 34.3711 160.537 34.3711C161.476 34.3711 162.219 34.681 162.766 35.3008C163.312 35.916 163.586 36.7295 163.586 37.7412V38.459H158.425C158.448 39.3385 158.669 40.0062 159.088 40.4619C159.512 40.9176 160.106 41.1455 160.872 41.1455C161.679 41.1455 162.476 40.9769 163.265 40.6396V41.6514C162.864 41.8245 162.483 41.9476 162.123 42.0205C161.768 42.098 161.337 42.1367 160.831 42.1367ZM160.523 35.3213C159.922 35.3213 159.441 35.5173 159.081 35.9092C158.726 36.3011 158.516 36.8434 158.452 37.5361H162.369C162.369 36.8206 162.21 36.2738 161.891 35.8955C161.572 35.5127 161.116 35.3213 160.523 35.3213ZM171.646 42L170.271 37.6045C170.185 37.3356 170.023 36.7249 169.786 35.7725H169.731C169.549 36.57 169.39 37.1852 169.253 37.6182L167.838 42H166.525L164.481 34.5078H165.671C166.154 36.39 166.521 37.8232 166.771 38.8076C167.027 39.792 167.173 40.4551 167.209 40.7969H167.264C167.314 40.5371 167.394 40.2021 167.503 39.792C167.617 39.3773 167.715 39.0492 167.797 38.8076L169.171 34.5078H170.401L171.741 38.8076C171.996 39.5915 172.17 40.25 172.261 40.7832H172.315C172.334 40.6191 172.382 40.3662 172.459 40.0244C172.541 39.6826 173.017 37.8438 173.888 34.5078H175.063L172.992 42H171.646ZM181.031 42L180.806 40.9336H180.751C180.377 41.403 180.004 41.722 179.63 41.8906C179.261 42.0547 178.798 42.1367 178.242 42.1367C177.499 42.1367 176.916 41.9453 176.492 41.5625C176.073 41.1797 175.863 40.6351 175.863 39.9287C175.863 38.4157 177.073 37.6227 179.493 37.5498L180.765 37.5088V37.0439C180.765 36.4561 180.637 36.0231 180.382 35.7451C180.131 35.4626 179.728 35.3213 179.172 35.3213C178.548 35.3213 177.841 35.5127 177.053 35.8955L176.704 35.0273C177.073 34.8268 177.477 34.6696 177.914 34.5557C178.356 34.4417 178.798 34.3848 179.24 34.3848C180.133 34.3848 180.794 34.583 181.223 34.9795C181.656 35.376 181.872 36.0117 181.872 36.8867V42H181.031ZM178.468 41.2002C179.174 41.2002 179.728 41.0065 180.129 40.6191C180.535 40.2318 180.737 39.6895 180.737 38.9922V38.3154L179.603 38.3633C178.7 38.3952 178.049 38.5365 177.647 38.7871C177.251 39.0332 177.053 39.4183 177.053 39.9424C177.053 40.3525 177.176 40.6647 177.422 40.8789C177.673 41.0931 178.021 41.2002 178.468 41.2002ZM187.635 34.3711C187.967 34.3711 188.266 34.3984 188.53 34.4531L188.373 35.5059C188.063 35.4375 187.79 35.4033 187.553 35.4033C186.947 35.4033 186.427 35.6494 185.994 36.1416C185.566 36.6338 185.352 37.2467 185.352 37.9805V42H184.217V34.5078H185.153L185.283 35.8955H185.338C185.616 35.4079 185.951 35.0319 186.343 34.7676C186.735 34.5033 187.165 34.3711 187.635 34.3711ZM195.031 40.9951H194.97C194.446 41.7562 193.662 42.1367 192.618 42.1367C191.638 42.1367 190.875 41.8018 190.328 41.1318C189.786 40.4619 189.515 39.5094 189.515 38.2744C189.515 37.0394 189.788 36.0801 190.335 35.3965C190.882 34.7129 191.643 34.3711 192.618 34.3711C193.634 34.3711 194.414 34.7402 194.956 35.4785H195.045L194.997 34.9385L194.97 34.4121V31.3633H196.104V42H195.182L195.031 40.9951ZM192.762 41.1865C193.536 41.1865 194.097 40.9769 194.443 40.5576C194.794 40.1338 194.97 39.4525 194.97 38.5137V38.2744C194.97 37.2126 194.792 36.4561 194.437 36.0049C194.086 35.5492 193.523 35.3213 192.748 35.3213C192.083 35.3213 191.572 35.5811 191.217 36.1006C190.866 36.6156 190.69 37.3447 190.69 38.2881C190.69 39.2451 190.866 39.9674 191.217 40.4551C191.568 40.9427 192.083 41.1865 192.762 41.1865ZM203.351 39.9561C203.351 40.6533 203.091 41.1911 202.571 41.5693C202.052 41.9476 201.323 42.1367 200.384 42.1367C199.39 42.1367 198.616 41.9795 198.06 41.665V40.6123C198.42 40.7946 198.805 40.9382 199.215 41.043C199.63 41.1478 200.028 41.2002 200.411 41.2002C201.004 41.2002 201.459 41.1068 201.778 40.9199C202.097 40.7285 202.257 40.4391 202.257 40.0518C202.257 39.7601 202.129 39.5117 201.874 39.3066C201.623 39.097 201.131 38.8509 200.397 38.5684C199.7 38.3086 199.203 38.083 198.907 37.8916C198.616 37.6956 198.397 37.4746 198.251 37.2285C198.11 36.9824 198.039 36.6885 198.039 36.3467C198.039 35.736 198.287 35.2552 198.784 34.9043C199.281 34.5488 199.962 34.3711 200.828 34.3711C201.635 34.3711 202.423 34.5352 203.193 34.8633L202.79 35.7861C202.038 35.4762 201.357 35.3213 200.746 35.3213C200.208 35.3213 199.803 35.4056 199.529 35.5742C199.256 35.7428 199.119 35.9753 199.119 36.2715C199.119 36.472 199.169 36.6429 199.27 36.7842C199.374 36.9255 199.541 37.0599 199.769 37.1875C199.996 37.3151 200.434 37.4997 201.081 37.7412C201.97 38.0648 202.569 38.3906 202.879 38.7188C203.193 39.0469 203.351 39.4593 203.351 39.9561Z" class="path-2"/> -<line x1="19" y1="61.6352" x2="313.057" y2="61.6352" stroke-width="0.72967" class="line-1"/> -<path d="M114.016 94V85.4336H115.012V94H114.016ZM125.583 94L124.405 90.2324C124.331 90.002 124.192 89.4785 123.989 88.6621H123.942C123.786 89.3457 123.649 89.873 123.532 90.2441L122.319 94H121.194L119.442 87.5781H120.462C120.876 89.1914 121.19 90.4199 121.405 91.2637C121.624 92.1074 121.749 92.6758 121.78 92.9688H121.827C121.87 92.7461 121.938 92.459 122.032 92.1074C122.13 91.752 122.214 91.4707 122.284 91.2637L123.462 87.5781H124.516L125.665 91.2637C125.884 91.9355 126.032 92.5 126.11 92.957H126.157C126.173 92.8164 126.214 92.5996 126.28 92.3066C126.35 92.0137 126.759 90.4375 127.505 87.5781H128.512L126.737 94H125.583ZM135.221 90.7832C135.221 91.8301 134.958 92.6484 134.43 93.2383C133.903 93.8242 133.175 94.1172 132.245 94.1172C131.671 94.1172 131.161 93.9824 130.716 93.7129C130.27 93.4434 129.927 93.0566 129.684 92.5527C129.442 92.0488 129.321 91.459 129.321 90.7832C129.321 89.7363 129.583 88.9219 130.106 88.3398C130.63 87.7539 131.356 87.4609 132.286 87.4609C133.184 87.4609 133.897 87.7598 134.425 88.3574C134.956 88.9551 135.221 89.7637 135.221 90.7832ZM130.329 90.7832C130.329 91.6035 130.493 92.2285 130.821 92.6582C131.149 93.0879 131.632 93.3027 132.268 93.3027C132.905 93.3027 133.387 93.0898 133.716 92.6641C134.048 92.2344 134.214 91.6074 134.214 90.7832C134.214 89.9668 134.048 89.3477 133.716 88.9258C133.387 88.5 132.901 88.2871 132.257 88.2871C131.62 88.2871 131.139 88.4961 130.815 88.9141C130.491 89.332 130.329 89.9551 130.329 90.7832ZM141.327 94V89.8457C141.327 89.3223 141.208 88.9316 140.969 88.6738C140.731 88.416 140.358 88.2871 139.85 88.2871C139.178 88.2871 138.686 88.4688 138.374 88.832C138.061 89.1953 137.905 89.7949 137.905 90.6309V94H136.932V87.5781H137.723L137.882 88.457H137.928C138.128 88.1406 138.407 87.8965 138.766 87.7246C139.126 87.5488 139.526 87.4609 139.968 87.4609C140.741 87.4609 141.323 87.6484 141.714 88.0234C142.104 88.3945 142.3 88.9902 142.3 89.8105V94H141.327ZM144.163 93.3789C144.163 93.1172 144.221 92.9199 144.339 92.7871C144.46 92.6504 144.632 92.582 144.854 92.582C145.081 92.582 145.257 92.6504 145.382 92.7871C145.51 92.9199 145.575 93.1172 145.575 93.3789C145.575 93.6328 145.51 93.8281 145.382 93.9648C145.253 94.1016 145.077 94.1699 144.854 94.1699C144.655 94.1699 144.489 94.1094 144.356 93.9883C144.227 93.8633 144.163 93.6602 144.163 93.3789ZM144.163 88.2051C144.163 87.6777 144.393 87.4141 144.854 87.4141C145.335 87.4141 145.575 87.6777 145.575 88.2051C145.575 88.459 145.51 88.6543 145.382 88.791C145.253 88.9277 145.077 88.9961 144.854 88.9961C144.655 88.9961 144.489 88.9355 144.356 88.8145C144.227 88.6895 144.163 88.4863 144.163 88.2051Z" class="path-3"/> -<rect x="19" y="113" width="85" height="22" rx="11" class="rect-1"/> -<path d="M30.3294 118.75H29.7952C29.7477 118.75 29.724 118.773 29.724 118.818V121.489H27.0712C27.0237 121.489 27 121.512 27 121.557V122.068C27 122.113 27.0237 122.136 27.0712 122.136H29.724V124.807C29.724 124.852 29.7477 124.875 29.7952 124.875H30.3294C30.3769 124.875 30.4006 124.852 30.4006 124.807V122.136H33.0538C33.1013 122.136 33.125 122.113 33.125 122.068V121.557C33.125 121.512 33.1013 121.489 33.0538 121.489H30.4006V118.818C30.4006 118.773 30.3769 118.75 30.3294 118.75Z" class="path-4"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M40.5 123.889C40.7977 124.062 41 124.381 41 124.75C41 125.119 40.7977 125.438 40.4998 125.611V128C40.4998 128.144 40.3892 128.5 39.9998 128.5C39.8864 128.5 39.7763 128.461 39.6877 128.39L38.3591 127.327C37.6919 126.794 36.8541 126.5 36 126.5H35.5612C35.5177 126.66 35.4923 126.826 35.4923 127C35.4923 127.454 35.6447 127.874 35.9009 128.21C36.1477 128.534 35.9033 129 35.4963 129H34.3356C34.15 129 33.973 128.9 33.8919 128.733C33.6372 128.209 33.4925 127.621 33.4925 127C33.4925 126.83 33.5048 126.664 33.5266 126.5H33C32.4477 126.5 32 126.052 32 125.5V124C32 123.448 32.4477 123 33 123H36C36.8541 123 37.6919 122.706 38.3592 122.173L39.6878 121.11C39.7783 121.037 39.8888 121 40 121C40.3909 121 40.5 121.363 40.5 121.5V123.889ZM38.9836 126.547L39.5 126.96V122.54L38.9836 122.953C38.1398 123.628 37.08 124 36 124V125.5C37.08 125.5 38.1398 125.872 38.9836 126.547Z" class="path-5"/> -<path d="M50.1777 128.5V119.934H51.1738V128.5H50.1777ZM59.3945 122.834H57.7598V128.5H56.7871V122.834H55.6387V122.395L56.7871 122.043V121.686C56.7871 120.107 57.4766 119.318 58.8555 119.318C59.1953 119.318 59.5938 119.387 60.0508 119.523L59.7988 120.303C59.4238 120.182 59.1035 120.121 58.8379 120.121C58.4707 120.121 58.1992 120.244 58.0234 120.49C57.8477 120.732 57.7598 121.123 57.7598 121.662V122.078H59.3945V122.834ZM61.4805 122.078V126.244C61.4805 126.768 61.5996 127.158 61.8379 127.416C62.0762 127.674 62.4492 127.803 62.957 127.803C63.6289 127.803 64.1191 127.619 64.4277 127.252C64.7402 126.885 64.8965 126.285 64.8965 125.453V122.078H65.8691V128.5H65.0664L64.9258 127.639H64.873C64.6738 127.955 64.3965 128.197 64.041 128.365C63.6895 128.533 63.2871 128.617 62.834 128.617C62.0527 128.617 61.4668 128.432 61.0762 128.061C60.6895 127.689 60.4961 127.096 60.4961 126.279V122.078H61.4805ZM72.332 128.5V124.346C72.332 123.822 72.2129 123.432 71.9746 123.174C71.7363 122.916 71.3633 122.787 70.8555 122.787C70.1836 122.787 69.6914 122.969 69.3789 123.332C69.0664 123.695 68.9102 124.295 68.9102 125.131V128.5H67.9375V122.078H68.7285L68.8867 122.957H68.9336C69.1328 122.641 69.4121 122.396 69.7715 122.225C70.1309 122.049 70.5312 121.961 70.9727 121.961C71.7461 121.961 72.3281 122.148 72.7188 122.523C73.1094 122.895 73.3047 123.49 73.3047 124.311V128.5H72.332ZM79.6797 127.639H79.627C79.1777 128.291 78.5059 128.617 77.6113 128.617C76.7715 128.617 76.1172 128.33 75.6484 127.756C75.1836 127.182 74.9512 126.365 74.9512 125.307C74.9512 124.248 75.1855 123.426 75.6543 122.84C76.123 122.254 76.7754 121.961 77.6113 121.961C78.4824 121.961 79.1504 122.277 79.6152 122.91H79.6914L79.6504 122.447L79.627 121.996V119.383H80.5996V128.5H79.8086L79.6797 127.639ZM77.7344 127.803C78.3984 127.803 78.8789 127.623 79.1758 127.264C79.4766 126.9 79.627 126.316 79.627 125.512V125.307C79.627 124.396 79.4746 123.748 79.1699 123.361C78.8691 122.971 78.3867 122.775 77.7227 122.775C77.1523 122.775 76.7148 122.998 76.4102 123.443C76.1094 123.885 75.959 124.51 75.959 125.318C75.959 126.139 76.1094 126.758 76.4102 127.176C76.7109 127.594 77.1523 127.803 77.7344 127.803ZM85.3809 128.617C84.4316 128.617 83.6816 128.328 83.1309 127.75C82.584 127.172 82.3105 126.369 82.3105 125.342C82.3105 124.307 82.5645 123.484 83.0723 122.875C83.584 122.266 84.2695 121.961 85.1289 121.961C85.9336 121.961 86.5703 122.227 87.0391 122.758C87.5078 123.285 87.7422 123.982 87.7422 124.85V125.465H83.3184C83.3379 126.219 83.5273 126.791 83.8867 127.182C84.25 127.572 84.7598 127.768 85.416 127.768C86.1074 127.768 86.791 127.623 87.4668 127.334V128.201C87.123 128.35 86.7969 128.455 86.4883 128.518C86.1836 128.584 85.8145 128.617 85.3809 128.617ZM85.1172 122.775C84.6016 122.775 84.1895 122.943 83.8809 123.279C83.5762 123.615 83.3965 124.08 83.3418 124.674H86.6992C86.6992 124.061 86.5625 123.592 86.2891 123.268C86.0156 122.939 85.625 122.775 85.1172 122.775ZM93.7773 127.639H93.7246C93.2754 128.291 92.6035 128.617 91.709 128.617C90.8691 128.617 90.2148 128.33 89.7461 127.756C89.2812 127.182 89.0488 126.365 89.0488 125.307C89.0488 124.248 89.2832 123.426 89.752 122.84C90.2207 122.254 90.873 121.961 91.709 121.961C92.5801 121.961 93.248 122.277 93.7129 122.91H93.7891L93.748 122.447L93.7246 121.996V119.383H94.6973V128.5H93.9062L93.7773 127.639ZM91.832 127.803C92.4961 127.803 92.9766 127.623 93.2734 127.264C93.5742 126.9 93.7246 126.316 93.7246 125.512V125.307C93.7246 124.396 93.5723 123.748 93.2676 123.361C92.9668 122.971 92.4844 122.775 91.8203 122.775C91.25 122.775 90.8125 122.998 90.5078 123.443C90.207 123.885 90.0566 124.51 90.0566 125.318C90.0566 126.139 90.207 126.758 90.5078 127.176C90.8086 127.594 91.25 127.803 91.832 127.803Z" class="path-6"/> -<path d="M116.291 124.365H118.705V125.174H116.291V127.67H115.477V125.174H113.074V124.365H115.477V121.857H116.291V124.365ZM125.596 124.705C125.596 126.186 125.361 127.291 124.893 128.021C124.428 128.752 123.715 129.117 122.754 129.117C121.832 129.117 121.131 128.744 120.65 127.998C120.17 127.248 119.93 126.15 119.93 124.705C119.93 123.213 120.162 122.105 120.627 121.383C121.092 120.66 121.801 120.299 122.754 120.299C123.684 120.299 124.389 120.676 124.869 121.43C125.354 122.184 125.596 123.275 125.596 124.705ZM120.914 124.705C120.914 125.951 121.061 126.859 121.354 127.43C121.646 127.996 122.113 128.279 122.754 128.279C123.402 128.279 123.871 127.992 124.16 127.418C124.453 126.84 124.6 125.936 124.6 124.705C124.6 123.475 124.453 122.574 124.16 122.004C123.871 121.43 123.402 121.143 122.754 121.143C122.113 121.143 121.646 121.426 121.354 121.992C121.061 122.555 120.914 123.459 120.914 124.705ZM127.09 128.379C127.09 128.117 127.148 127.92 127.266 127.787C127.387 127.65 127.559 127.582 127.781 127.582C128.008 127.582 128.184 127.65 128.309 127.787C128.438 127.92 128.502 128.117 128.502 128.379C128.502 128.633 128.438 128.828 128.309 128.965C128.18 129.102 128.004 129.17 127.781 129.17C127.582 129.17 127.416 129.109 127.283 128.988C127.154 128.863 127.09 128.66 127.09 128.379ZM135.662 124.705C135.662 126.186 135.428 127.291 134.959 128.021C134.494 128.752 133.781 129.117 132.82 129.117C131.898 129.117 131.197 128.744 130.717 127.998C130.236 127.248 129.996 126.15 129.996 124.705C129.996 123.213 130.229 122.105 130.693 121.383C131.158 120.66 131.867 120.299 132.82 120.299C133.75 120.299 134.455 120.676 134.936 121.43C135.42 122.184 135.662 123.275 135.662 124.705ZM130.98 124.705C130.98 125.951 131.127 126.859 131.42 127.43C131.713 127.996 132.18 128.279 132.82 128.279C133.469 128.279 133.938 127.992 134.227 127.418C134.52 126.84 134.666 125.936 134.666 124.705C134.666 123.475 134.52 122.574 134.227 122.004C133.938 121.43 133.469 121.143 132.82 121.143C132.18 121.143 131.713 121.426 131.42 121.992C131.127 122.555 130.98 123.459 130.98 124.705ZM142.529 124.705C142.529 126.186 142.295 127.291 141.826 128.021C141.361 128.752 140.648 129.117 139.688 129.117C138.766 129.117 138.064 128.744 137.584 127.998C137.104 127.248 136.863 126.15 136.863 124.705C136.863 123.213 137.096 122.105 137.561 121.383C138.025 120.66 138.734 120.299 139.688 120.299C140.617 120.299 141.322 120.676 141.803 121.43C142.287 122.184 142.529 123.275 142.529 124.705ZM137.848 124.705C137.848 125.951 137.994 126.859 138.287 127.43C138.58 127.996 139.047 128.279 139.688 128.279C140.336 128.279 140.805 127.992 141.094 127.418C141.387 126.84 141.533 125.936 141.533 124.705C141.533 123.475 141.387 122.574 141.094 122.004C140.805 121.43 140.336 121.143 139.688 121.143C139.047 121.143 138.58 121.426 138.287 121.992C137.994 122.555 137.848 123.459 137.848 124.705ZM147.322 129H146.373V122.895C146.373 122.387 146.389 121.906 146.42 121.453C146.338 121.535 146.246 121.621 146.145 121.711C146.043 121.801 145.578 122.182 144.75 122.854L144.234 122.186L146.502 120.434H147.322V129Z" class="path-7"/> -<path d="M163.334 124.112L159.793 126.288L156.25 124.112L159.793 118L163.334 124.112ZM159.793 126.986L156.25 124.811L159.793 130L163.336 124.811L159.793 126.986Z" class="path-8"/> -<path d="M174.291 124.365H176.705V125.174H174.291V127.67H173.477V125.174H171.074V124.365H173.477V121.857H174.291V124.365ZM183.549 129H177.918V128.162L180.174 125.895C180.861 125.199 181.314 124.703 181.533 124.406C181.752 124.109 181.916 123.82 182.025 123.539C182.135 123.258 182.189 122.955 182.189 122.631C182.189 122.174 182.051 121.812 181.773 121.547C181.496 121.277 181.111 121.143 180.619 121.143C180.264 121.143 179.926 121.201 179.605 121.318C179.289 121.436 178.936 121.648 178.545 121.957L178.029 121.295C178.818 120.639 179.678 120.311 180.607 120.311C181.412 120.311 182.043 120.518 182.5 120.932C182.957 121.342 183.186 121.895 183.186 122.59C183.186 123.133 183.033 123.67 182.729 124.201C182.424 124.732 181.854 125.404 181.018 126.217L179.143 128.051V128.098H183.549V129ZM184.885 125.338C184.885 123.654 185.211 122.396 185.863 121.564C186.52 120.729 187.488 120.311 188.77 120.311C189.211 120.311 189.559 120.348 189.812 120.422V121.26C189.512 121.162 189.168 121.113 188.781 121.113C187.863 121.113 187.162 121.4 186.678 121.975C186.193 122.545 185.928 123.443 185.881 124.67H185.951C186.381 123.998 187.061 123.662 187.99 123.662C188.76 123.662 189.365 123.895 189.807 124.359C190.252 124.824 190.475 125.455 190.475 126.252C190.475 127.143 190.23 127.844 189.742 128.355C189.258 128.863 188.602 129.117 187.773 129.117C186.887 129.117 186.184 128.785 185.664 128.121C185.145 127.453 184.885 126.525 184.885 125.338ZM187.762 128.291C188.316 128.291 188.746 128.117 189.051 127.77C189.359 127.418 189.514 126.912 189.514 126.252C189.514 125.686 189.371 125.24 189.086 124.916C188.801 124.592 188.375 124.43 187.809 124.43C187.457 124.43 187.135 124.502 186.842 124.646C186.549 124.791 186.314 124.99 186.139 125.244C185.967 125.498 185.881 125.762 185.881 126.035C185.881 126.438 185.959 126.812 186.115 127.16C186.271 127.508 186.492 127.783 186.777 127.986C187.066 128.189 187.395 128.291 187.762 128.291ZM197.283 129H191.652V128.162L193.908 125.895C194.596 125.199 195.049 124.703 195.268 124.406C195.486 124.109 195.65 123.82 195.76 123.539C195.869 123.258 195.924 122.955 195.924 122.631C195.924 122.174 195.785 121.812 195.508 121.547C195.23 121.277 194.846 121.143 194.354 121.143C193.998 121.143 193.66 121.201 193.34 121.318C193.023 121.436 192.67 121.648 192.279 121.957L191.764 121.295C192.553 120.639 193.412 120.311 194.342 120.311C195.146 120.311 195.777 120.518 196.234 120.932C196.691 121.342 196.92 121.895 196.92 122.59C196.92 123.133 196.768 123.67 196.463 124.201C196.158 124.732 195.588 125.404 194.752 126.217L192.877 128.051V128.098H197.283V129ZM198.824 128.379C198.824 128.117 198.883 127.92 199 127.787C199.121 127.65 199.293 127.582 199.516 127.582C199.742 127.582 199.918 127.65 200.043 127.787C200.172 127.92 200.236 128.117 200.236 128.379C200.236 128.633 200.172 128.828 200.043 128.965C199.914 129.102 199.738 129.17 199.516 129.17C199.316 129.17 199.15 129.109 199.018 128.988C198.889 128.863 198.824 128.66 198.824 128.379ZM204.396 123.768C205.299 123.768 206.008 123.992 206.523 124.441C207.043 124.887 207.303 125.498 207.303 126.275C207.303 127.162 207.02 127.857 206.453 128.361C205.891 128.865 205.113 129.117 204.121 129.117C203.156 129.117 202.42 128.963 201.912 128.654V127.717C202.186 127.893 202.525 128.031 202.932 128.133C203.338 128.23 203.738 128.279 204.133 128.279C204.82 128.279 205.354 128.117 205.732 127.793C206.115 127.469 206.307 127 206.307 126.387C206.307 125.191 205.574 124.594 204.109 124.594C203.738 124.594 203.242 124.65 202.621 124.764L202.117 124.441L202.439 120.434H206.699V121.33H203.271L203.055 123.902C203.504 123.812 203.951 123.768 204.396 123.768Z" class="path-9"/> -<g clip-path="url(#clip0_19989_140015)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M215.523 118.75L221.557 119.02L224 124.449L220.554 129.41L214.487 129.022L212 123.139L215.523 118.75ZM219.947 121.879L215.574 123.79L219.313 126.681L219.947 121.879ZM219.441 120.922L215.946 119.417L215.212 122.581L219.441 120.922ZM218.555 127.409L214.757 124.696L214.849 128.372L218.555 127.409ZM223.393 124.437L220.805 121.81L220.122 126.861L223.393 124.437ZM219.445 128L216.242 128.837L220.009 129.078L219.445 128ZM222.888 125.628L220.084 127.718L220.641 128.807L222.888 125.628ZM221.561 119.778L221.017 120.896L223.044 122.957L221.561 119.778ZM220.883 119.243L217.323 119.099L220.259 120.383L220.883 119.243ZM215.004 119.76L212.51 122.909L214.177 123.262L215.004 119.76ZM214.077 123.88L212.402 123.525L214.15 127.644L214.077 123.88Z" class="path-10"/> -</g> -<line x1="19" y1="150.635" x2="313.057" y2="150.635" stroke-width="0.72967" class="line-2"/> -<path d="M115.719 183V174.434H116.716V183H115.719ZM123.014 183H122.042V173.883H123.014V183ZM130.62 179.783C130.62 180.83 130.356 181.648 129.829 182.238C129.302 182.824 128.573 183.117 127.643 183.117C127.069 183.117 126.559 182.982 126.114 182.713C125.669 182.443 125.325 182.057 125.083 181.553C124.841 181.049 124.719 180.459 124.719 179.783C124.719 178.736 124.981 177.922 125.505 177.34C126.028 176.754 126.755 176.461 127.684 176.461C128.583 176.461 129.296 176.76 129.823 177.357C130.354 177.955 130.62 178.764 130.62 179.783ZM125.727 179.783C125.727 180.604 125.891 181.229 126.219 181.658C126.548 182.088 127.03 182.303 127.667 182.303C128.303 182.303 128.786 182.09 129.114 181.664C129.446 181.234 129.612 180.607 129.612 179.783C129.612 178.967 129.446 178.348 129.114 177.926C128.786 177.5 128.3 177.287 127.655 177.287C127.018 177.287 126.538 177.496 126.214 177.914C125.889 178.332 125.727 178.955 125.727 179.783ZM136.473 181.248C136.473 181.846 136.251 182.307 135.805 182.631C135.36 182.955 134.735 183.117 133.93 183.117C133.079 183.117 132.415 182.982 131.938 182.713V181.811C132.247 181.967 132.577 182.09 132.928 182.18C133.284 182.27 133.626 182.314 133.954 182.314C134.462 182.314 134.852 182.234 135.126 182.074C135.399 181.91 135.536 181.662 135.536 181.33C135.536 181.08 135.427 180.867 135.208 180.691C134.993 180.512 134.571 180.301 133.942 180.059C133.344 179.836 132.919 179.643 132.665 179.479C132.415 179.311 132.227 179.121 132.102 178.91C131.981 178.699 131.921 178.447 131.921 178.154C131.921 177.631 132.134 177.219 132.559 176.918C132.985 176.613 133.569 176.461 134.311 176.461C135.003 176.461 135.678 176.602 136.339 176.883L135.993 177.674C135.348 177.408 134.764 177.275 134.241 177.275C133.78 177.275 133.432 177.348 133.198 177.492C132.964 177.637 132.846 177.836 132.846 178.09C132.846 178.262 132.889 178.408 132.975 178.529C133.065 178.65 133.208 178.766 133.403 178.875C133.598 178.984 133.973 179.143 134.528 179.35C135.29 179.627 135.803 179.906 136.069 180.188C136.339 180.469 136.473 180.822 136.473 181.248ZM140.135 182.314C140.307 182.314 140.473 182.303 140.634 182.279C140.794 182.252 140.921 182.225 141.014 182.197V182.941C140.909 182.992 140.753 183.033 140.546 183.064C140.343 183.1 140.159 183.117 139.995 183.117C138.753 183.117 138.132 182.463 138.132 181.154V177.334H137.212V176.865L138.132 176.461L138.542 175.09H139.104V176.578H140.968V177.334H139.104V181.113C139.104 181.5 139.196 181.797 139.38 182.004C139.563 182.211 139.815 182.314 140.135 182.314ZM142.163 182.379C142.163 182.117 142.221 181.92 142.339 181.787C142.46 181.65 142.632 181.582 142.854 181.582C143.081 181.582 143.257 181.65 143.382 181.787C143.51 181.92 143.575 182.117 143.575 182.379C143.575 182.633 143.51 182.828 143.382 182.965C143.253 183.102 143.077 183.17 142.854 183.17C142.655 183.17 142.489 183.109 142.356 182.988C142.227 182.863 142.163 182.66 142.163 182.379ZM142.163 177.205C142.163 176.678 142.393 176.414 142.854 176.414C143.335 176.414 143.575 176.678 143.575 177.205C143.575 177.459 143.51 177.654 143.382 177.791C143.253 177.928 143.077 177.996 142.854 177.996C142.655 177.996 142.489 177.936 142.356 177.814C142.227 177.689 142.163 177.486 142.163 177.205Z" class="path-11"/> -<rect x="19" y="202" width="85" height="22" rx="11" class="rect-2"/> -<path d="M30.3294 207.75H29.7952C29.7477 207.75 29.724 207.773 29.724 207.818V210.489H27.0712C27.0237 210.489 27 210.512 27 210.557V211.068C27 211.113 27.0237 211.136 27.0712 211.136H29.724V213.807C29.724 213.852 29.7477 213.875 29.7952 213.875H30.3294C30.3769 213.875 30.4006 213.852 30.4006 213.807V211.136H33.0538C33.1013 211.136 33.125 211.113 33.125 211.068V210.557C33.125 210.512 33.1013 210.489 33.0538 210.489H30.4006V207.818C30.4006 207.773 30.3769 207.75 30.3294 207.75Z" class="path-12"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M40.5 212.889C40.7977 213.062 41 213.381 41 213.75C41 214.119 40.7977 214.438 40.4998 214.611V217C40.4998 217.144 40.3892 217.5 39.9998 217.5C39.8864 217.5 39.7763 217.461 39.6877 217.39L38.3591 216.327C37.6919 215.794 36.8541 215.5 36 215.5H35.5612C35.5177 215.66 35.4923 215.826 35.4923 216C35.4923 216.454 35.6447 216.874 35.9009 217.21C36.1477 217.534 35.9033 218 35.4963 218H34.3356C34.15 218 33.973 217.9 33.8919 217.733C33.6372 217.209 33.4925 216.621 33.4925 216C33.4925 215.83 33.5048 215.664 33.5266 215.5H33C32.4477 215.5 32 215.052 32 214.5V213C32 212.448 32.4477 212 33 212H36C36.8541 212 37.6919 211.706 38.3592 211.173L39.6878 210.11C39.7783 210.037 39.8888 210 40 210C40.3909 210 40.5 210.363 40.5 210.5V212.889ZM38.9836 215.547L39.5 215.96V211.54L38.9836 211.953C38.1398 212.628 37.08 213 36 213V214.5C37.08 214.5 38.1398 214.872 38.9836 215.547Z" class="path-13"/> -<path d="M50.1777 217.5V208.934H51.1738V217.5H50.1777ZM59.3945 211.834H57.7598V217.5H56.7871V211.834H55.6387V211.395L56.7871 211.043V210.686C56.7871 209.107 57.4766 208.318 58.8555 208.318C59.1953 208.318 59.5938 208.387 60.0508 208.523L59.7988 209.303C59.4238 209.182 59.1035 209.121 58.8379 209.121C58.4707 209.121 58.1992 209.244 58.0234 209.49C57.8477 209.732 57.7598 210.123 57.7598 210.662V211.078H59.3945V211.834ZM61.4805 211.078V215.244C61.4805 215.768 61.5996 216.158 61.8379 216.416C62.0762 216.674 62.4492 216.803 62.957 216.803C63.6289 216.803 64.1191 216.619 64.4277 216.252C64.7402 215.885 64.8965 215.285 64.8965 214.453V211.078H65.8691V217.5H65.0664L64.9258 216.639H64.873C64.6738 216.955 64.3965 217.197 64.041 217.365C63.6895 217.533 63.2871 217.617 62.834 217.617C62.0527 217.617 61.4668 217.432 61.0762 217.061C60.6895 216.689 60.4961 216.096 60.4961 215.279V211.078H61.4805ZM72.332 217.5V213.346C72.332 212.822 72.2129 212.432 71.9746 212.174C71.7363 211.916 71.3633 211.787 70.8555 211.787C70.1836 211.787 69.6914 211.969 69.3789 212.332C69.0664 212.695 68.9102 213.295 68.9102 214.131V217.5H67.9375V211.078H68.7285L68.8867 211.957H68.9336C69.1328 211.641 69.4121 211.396 69.7715 211.225C70.1309 211.049 70.5312 210.961 70.9727 210.961C71.7461 210.961 72.3281 211.148 72.7188 211.523C73.1094 211.895 73.3047 212.49 73.3047 213.311V217.5H72.332ZM79.6797 216.639H79.627C79.1777 217.291 78.5059 217.617 77.6113 217.617C76.7715 217.617 76.1172 217.33 75.6484 216.756C75.1836 216.182 74.9512 215.365 74.9512 214.307C74.9512 213.248 75.1855 212.426 75.6543 211.84C76.123 211.254 76.7754 210.961 77.6113 210.961C78.4824 210.961 79.1504 211.277 79.6152 211.91H79.6914L79.6504 211.447L79.627 210.996V208.383H80.5996V217.5H79.8086L79.6797 216.639ZM77.7344 216.803C78.3984 216.803 78.8789 216.623 79.1758 216.264C79.4766 215.9 79.627 215.316 79.627 214.512V214.307C79.627 213.396 79.4746 212.748 79.1699 212.361C78.8691 211.971 78.3867 211.775 77.7227 211.775C77.1523 211.775 76.7148 211.998 76.4102 212.443C76.1094 212.885 75.959 213.51 75.959 214.318C75.959 215.139 76.1094 215.758 76.4102 216.176C76.7109 216.594 77.1523 216.803 77.7344 216.803ZM85.3809 217.617C84.4316 217.617 83.6816 217.328 83.1309 216.75C82.584 216.172 82.3105 215.369 82.3105 214.342C82.3105 213.307 82.5645 212.484 83.0723 211.875C83.584 211.266 84.2695 210.961 85.1289 210.961C85.9336 210.961 86.5703 211.227 87.0391 211.758C87.5078 212.285 87.7422 212.982 87.7422 213.85V214.465H83.3184C83.3379 215.219 83.5273 215.791 83.8867 216.182C84.25 216.572 84.7598 216.768 85.416 216.768C86.1074 216.768 86.791 216.623 87.4668 216.334V217.201C87.123 217.35 86.7969 217.455 86.4883 217.518C86.1836 217.584 85.8145 217.617 85.3809 217.617ZM85.1172 211.775C84.6016 211.775 84.1895 211.943 83.8809 212.279C83.5762 212.615 83.3965 213.08 83.3418 213.674H86.6992C86.6992 213.061 86.5625 212.592 86.2891 212.268C86.0156 211.939 85.625 211.775 85.1172 211.775ZM93.7773 216.639H93.7246C93.2754 217.291 92.6035 217.617 91.709 217.617C90.8691 217.617 90.2148 217.33 89.7461 216.756C89.2812 216.182 89.0488 215.365 89.0488 214.307C89.0488 213.248 89.2832 212.426 89.752 211.84C90.2207 211.254 90.873 210.961 91.709 210.961C92.5801 210.961 93.248 211.277 93.7129 211.91H93.7891L93.748 211.447L93.7246 210.996V208.383H94.6973V217.5H93.9062L93.7773 216.639ZM91.832 216.803C92.4961 216.803 92.9766 216.623 93.2734 216.264C93.5742 215.9 93.7246 215.316 93.7246 214.512V214.307C93.7246 213.396 93.5723 212.748 93.2676 212.361C92.9668 211.971 92.4844 211.775 91.8203 211.775C91.25 211.775 90.8125 211.998 90.5078 212.443C90.207 212.885 90.0566 213.51 90.0566 214.318C90.0566 215.139 90.207 215.758 90.5078 216.176C90.8086 216.594 91.25 216.803 91.832 216.803Z" class="path-14"/> -<path d="M116.291 213.365H118.705V214.174H116.291V216.67H115.477V214.174H113.074V213.365H115.477V210.857H116.291V213.365ZM125.596 213.705C125.596 215.186 125.361 216.291 124.893 217.021C124.428 217.752 123.715 218.117 122.754 218.117C121.832 218.117 121.131 217.744 120.65 216.998C120.17 216.248 119.93 215.15 119.93 213.705C119.93 212.213 120.162 211.105 120.627 210.383C121.092 209.66 121.801 209.299 122.754 209.299C123.684 209.299 124.389 209.676 124.869 210.43C125.354 211.184 125.596 212.275 125.596 213.705ZM120.914 213.705C120.914 214.951 121.061 215.859 121.354 216.43C121.646 216.996 122.113 217.279 122.754 217.279C123.402 217.279 123.871 216.992 124.16 216.418C124.453 215.84 124.6 214.936 124.6 213.705C124.6 212.475 124.453 211.574 124.16 211.004C123.871 210.43 123.402 210.143 122.754 210.143C122.113 210.143 121.646 210.426 121.354 210.992C121.061 211.555 120.914 212.459 120.914 213.705ZM127.09 217.379C127.09 217.117 127.148 216.92 127.266 216.787C127.387 216.65 127.559 216.582 127.781 216.582C128.008 216.582 128.184 216.65 128.309 216.787C128.438 216.92 128.502 217.117 128.502 217.379C128.502 217.633 128.438 217.828 128.309 217.965C128.18 218.102 128.004 218.17 127.781 218.17C127.582 218.17 127.416 218.109 127.283 217.988C127.154 217.863 127.09 217.66 127.09 217.379ZM135.662 213.705C135.662 215.186 135.428 216.291 134.959 217.021C134.494 217.752 133.781 218.117 132.82 218.117C131.898 218.117 131.197 217.744 130.717 216.998C130.236 216.248 129.996 215.15 129.996 213.705C129.996 212.213 130.229 211.105 130.693 210.383C131.158 209.66 131.867 209.299 132.82 209.299C133.75 209.299 134.455 209.676 134.936 210.43C135.42 211.184 135.662 212.275 135.662 213.705ZM130.98 213.705C130.98 214.951 131.127 215.859 131.42 216.43C131.713 216.996 132.18 217.279 132.82 217.279C133.469 217.279 133.938 216.992 134.227 216.418C134.52 215.84 134.666 214.936 134.666 213.705C134.666 212.475 134.52 211.574 134.227 211.004C133.938 210.43 133.469 210.143 132.82 210.143C132.18 210.143 131.713 210.426 131.42 210.992C131.127 211.555 130.98 212.459 130.98 213.705ZM142.529 213.705C142.529 215.186 142.295 216.291 141.826 217.021C141.361 217.752 140.648 218.117 139.688 218.117C138.766 218.117 138.064 217.744 137.584 216.998C137.104 216.248 136.863 215.15 136.863 213.705C136.863 212.213 137.096 211.105 137.561 210.383C138.025 209.66 138.734 209.299 139.688 209.299C140.617 209.299 141.322 209.676 141.803 210.43C142.287 211.184 142.529 212.275 142.529 213.705ZM137.848 213.705C137.848 214.951 137.994 215.859 138.287 216.43C138.58 216.996 139.047 217.279 139.688 217.279C140.336 217.279 140.805 216.992 141.094 216.418C141.387 215.84 141.533 214.936 141.533 213.705C141.533 212.475 141.387 211.574 141.094 211.004C140.805 210.43 140.336 210.143 139.688 210.143C139.047 210.143 138.58 210.426 138.287 210.992C137.994 211.555 137.848 212.459 137.848 213.705ZM147.322 218H146.373V211.895C146.373 211.387 146.389 210.906 146.42 210.453C146.338 210.535 146.246 210.621 146.145 210.711C146.043 210.801 145.578 211.182 144.75 211.854L144.234 211.186L146.502 209.434H147.322V218Z" class="path-15"/> -<path d="M163.334 213.112L159.793 215.288L156.25 213.112L159.793 207L163.334 213.112ZM159.793 215.986L156.25 213.811L159.793 219L163.336 213.811L159.793 215.986Z" class="path-16"/> -<path d="M174.291 213.365H176.705V214.174H174.291V216.67H173.477V214.174H171.074V213.365H173.477V210.857H174.291V213.365ZM183.549 218H177.918V217.162L180.174 214.895C180.861 214.199 181.314 213.703 181.533 213.406C181.752 213.109 181.916 212.82 182.025 212.539C182.135 212.258 182.189 211.955 182.189 211.631C182.189 211.174 182.051 210.812 181.773 210.547C181.496 210.277 181.111 210.143 180.619 210.143C180.264 210.143 179.926 210.201 179.605 210.318C179.289 210.436 178.936 210.648 178.545 210.957L178.029 210.295C178.818 209.639 179.678 209.311 180.607 209.311C181.412 209.311 182.043 209.518 182.5 209.932C182.957 210.342 183.186 210.895 183.186 211.59C183.186 212.133 183.033 212.67 182.729 213.201C182.424 213.732 181.854 214.404 181.018 215.217L179.143 217.051V217.098H183.549V218ZM184.885 214.338C184.885 212.654 185.211 211.396 185.863 210.564C186.52 209.729 187.488 209.311 188.77 209.311C189.211 209.311 189.559 209.348 189.812 209.422V210.26C189.512 210.162 189.168 210.113 188.781 210.113C187.863 210.113 187.162 210.4 186.678 210.975C186.193 211.545 185.928 212.443 185.881 213.67H185.951C186.381 212.998 187.061 212.662 187.99 212.662C188.76 212.662 189.365 212.895 189.807 213.359C190.252 213.824 190.475 214.455 190.475 215.252C190.475 216.143 190.23 216.844 189.742 217.355C189.258 217.863 188.602 218.117 187.773 218.117C186.887 218.117 186.184 217.785 185.664 217.121C185.145 216.453 184.885 215.525 184.885 214.338ZM187.762 217.291C188.316 217.291 188.746 217.117 189.051 216.77C189.359 216.418 189.514 215.912 189.514 215.252C189.514 214.686 189.371 214.24 189.086 213.916C188.801 213.592 188.375 213.43 187.809 213.43C187.457 213.43 187.135 213.502 186.842 213.646C186.549 213.791 186.314 213.99 186.139 214.244C185.967 214.498 185.881 214.762 185.881 215.035C185.881 215.438 185.959 215.812 186.115 216.16C186.271 216.508 186.492 216.783 186.777 216.986C187.066 217.189 187.395 217.291 187.762 217.291ZM197.283 218H191.652V217.162L193.908 214.895C194.596 214.199 195.049 213.703 195.268 213.406C195.486 213.109 195.65 212.82 195.76 212.539C195.869 212.258 195.924 211.955 195.924 211.631C195.924 211.174 195.785 210.812 195.508 210.547C195.23 210.277 194.846 210.143 194.354 210.143C193.998 210.143 193.66 210.201 193.34 210.318C193.023 210.436 192.67 210.648 192.279 210.957L191.764 210.295C192.553 209.639 193.412 209.311 194.342 209.311C195.146 209.311 195.777 209.518 196.234 209.932C196.691 210.342 196.92 210.895 196.92 211.59C196.92 212.133 196.768 212.67 196.463 213.201C196.158 213.732 195.588 214.404 194.752 215.217L192.877 217.051V217.098H197.283V218ZM198.824 217.379C198.824 217.117 198.883 216.92 199 216.787C199.121 216.65 199.293 216.582 199.516 216.582C199.742 216.582 199.918 216.65 200.043 216.787C200.172 216.92 200.236 217.117 200.236 217.379C200.236 217.633 200.172 217.828 200.043 217.965C199.914 218.102 199.738 218.17 199.516 218.17C199.316 218.17 199.15 218.109 199.018 217.988C198.889 217.863 198.824 217.66 198.824 217.379ZM204.396 212.768C205.299 212.768 206.008 212.992 206.523 213.441C207.043 213.887 207.303 214.498 207.303 215.275C207.303 216.162 207.02 216.857 206.453 217.361C205.891 217.865 205.113 218.117 204.121 218.117C203.156 218.117 202.42 217.963 201.912 217.654V216.717C202.186 216.893 202.525 217.031 202.932 217.133C203.338 217.23 203.738 217.279 204.133 217.279C204.82 217.279 205.354 217.117 205.732 216.793C206.115 216.469 206.307 216 206.307 215.387C206.307 214.191 205.574 213.594 204.109 213.594C203.738 213.594 203.242 213.65 202.621 213.764L202.117 213.441L202.439 209.434H206.699V210.33H203.271L203.055 212.902C203.504 212.812 203.951 212.768 204.396 212.768Z" class="path-17"/> -<g clip-path="url(#clip1_19989_140015)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M215.523 207.75L221.557 208.02L224 213.449L220.554 218.41L214.487 218.022L212 212.139L215.523 207.75ZM219.947 210.879L215.574 212.79L219.313 215.681L219.947 210.879ZM219.441 209.922L215.946 208.417L215.212 211.581L219.441 209.922ZM218.555 216.409L214.757 213.696L214.849 217.372L218.555 216.409ZM223.393 213.437L220.805 210.81L220.122 215.861L223.393 213.437ZM219.445 217L216.242 217.837L220.009 218.078L219.445 217ZM222.888 214.628L220.084 216.718L220.641 217.807L222.888 214.628ZM221.561 208.778L221.017 209.896L223.044 211.957L221.561 208.778ZM220.883 208.243L217.323 208.099L220.259 209.383L220.883 208.243ZM215.004 208.76L212.51 211.909L214.177 212.262L215.004 208.76ZM214.077 212.88L212.402 212.525L214.15 216.644L214.077 212.88Z" class="path-18"/> -</g> -<path d="M24.7075 28H23.7918C23.7104 28 23.6697 28.0389 23.6697 28.1167V32.6958H19.1221C19.0407 32.6958 19 32.7347 19 32.8124V33.6874C19 33.7652 19.0407 33.8041 19.1221 33.8041H23.6697V38.3833C23.6697 38.4611 23.7104 38.5 23.7918 38.5H24.7075C24.7889 38.5 24.8296 38.4611 24.8296 38.3833V33.8041H29.3779C29.4593 33.8041 29.5 33.7652 29.5 33.6874V32.8124C29.5 32.7347 29.4593 32.6958 29.3779 32.6958H24.8296V28.1167C24.8296 28.0389 24.7889 28 24.7075 28Z" class="path-19"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M42.1429 36.8093C42.6531 37.1061 43 37.6528 43 38.2857C43 38.9187 42.6531 39.4654 42.1426 39.7624V43.8571C42.1426 44.1041 41.9529 44.7143 41.2854 44.7143C41.0909 44.7141 40.9022 44.6478 40.7503 44.5262L38.4727 42.704C37.3289 41.7896 35.8927 41.2857 34.4286 41.2857H33.6764C33.6017 41.5592 33.5583 41.8453 33.5583 42.1429C33.5583 42.9218 33.8195 43.6407 34.2588 44.2171C34.6817 44.7721 34.2628 45.5714 33.565 45.5714H31.5754C31.2571 45.5714 30.9537 45.4008 30.8146 45.1145C30.378 44.2147 30.13 43.2081 30.13 42.1429C30.13 41.852 30.1512 41.5664 30.1884 41.2857H29.2857C28.3388 41.2857 27.5714 40.5183 27.5714 39.5714V37C27.5714 36.0531 28.3388 35.2857 29.2857 35.2857H34.4286C35.8927 35.2857 37.3289 34.7819 38.4729 33.8674L40.7505 32.0452C40.9056 31.9209 41.095 31.8571 41.2857 31.8571C41.9559 31.8571 42.1429 32.4802 42.1429 32.7146V36.8093ZM39.5433 41.3655L40.4286 42.0738V34.4977L39.5433 35.2059C38.0969 36.363 36.28 37 34.4286 37V39.5714C36.28 39.5714 38.0969 40.2084 39.5433 41.3655Z" class="path-20"/> -<defs> -<clipPath id="clip0_19989_140015"> -<rect width="12" height="12" fill="white" transform="translate(212 118)"/> -</clipPath> -<clipPath id="clip1_19989_140015"> -<rect width="12" height="12" fill="white" transform="translate(212 207)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/binary-voting/private-voting.svg b/web/src/assets/svgs/mini-guides/binary-voting/private-voting.svg deleted file mode 100644 index 0135c28b1..000000000 --- a/web/src/assets/svgs/mini-guides/binary-voting/private-voting.svg +++ /dev/null @@ -1,17 +0,0 @@ -<svg width="384" height="301" viewBox="0 0 384 301" fill="none" xmlns="http://www.w3.org/2000/svg"> -<rect x="0.5" y="0.5" width="383" height="300" rx="2.5" class="rect-1"/> -<path d="M83.9609 195.602C82.7057 195.602 81.7135 196.021 80.9844 196.859C80.2604 197.693 79.8984 198.836 79.8984 200.289C79.8984 201.784 80.2474 202.94 80.9453 203.758C81.6484 204.57 82.6484 204.977 83.9453 204.977C84.7422 204.977 85.651 204.833 86.6719 204.547V205.711C85.8802 206.008 84.9036 206.156 83.7422 206.156C82.0599 206.156 80.7604 205.646 79.8438 204.625C78.9323 203.604 78.4766 202.154 78.4766 200.273C78.4766 199.096 78.6953 198.065 79.1328 197.18C79.5755 196.294 80.2109 195.612 81.0391 195.133C81.8724 194.654 82.8516 194.414 83.9766 194.414C85.1745 194.414 86.2214 194.633 87.1172 195.07L86.5547 196.211C85.6901 195.805 84.8255 195.602 83.9609 195.602ZM96.3594 201.711C96.3594 203.107 96.0078 204.198 95.3047 204.984C94.6016 205.766 93.6302 206.156 92.3906 206.156C91.625 206.156 90.9453 205.977 90.3516 205.617C89.7578 205.258 89.2995 204.742 88.9766 204.07C88.6536 203.398 88.4922 202.612 88.4922 201.711C88.4922 200.315 88.8411 199.229 89.5391 198.453C90.237 197.672 91.2057 197.281 92.4453 197.281C93.6432 197.281 94.5938 197.68 95.2969 198.477C96.0052 199.273 96.3594 200.352 96.3594 201.711ZM89.8359 201.711C89.8359 202.805 90.0547 203.638 90.4922 204.211C90.9297 204.784 91.5729 205.07 92.4219 205.07C93.2708 205.07 93.9141 204.786 94.3516 204.219C94.7943 203.646 95.0156 202.81 95.0156 201.711C95.0156 200.622 94.7943 199.797 94.3516 199.234C93.9141 198.667 93.2656 198.383 92.4062 198.383C91.5573 198.383 90.9167 198.661 90.4844 199.219C90.0521 199.776 89.8359 200.607 89.8359 201.711ZM99.8594 197.438V202.992C99.8594 203.69 100.018 204.211 100.336 204.555C100.654 204.898 101.151 205.07 101.828 205.07C102.724 205.07 103.378 204.826 103.789 204.336C104.206 203.846 104.414 203.047 104.414 201.938V197.438H105.711V206H104.641L104.453 204.852H104.383C104.117 205.273 103.747 205.596 103.273 205.82C102.805 206.044 102.268 206.156 101.664 206.156C100.622 206.156 99.8411 205.909 99.3203 205.414C98.8047 204.919 98.5469 204.128 98.5469 203.039V197.438H99.8594ZM112.375 197.281C112.755 197.281 113.096 197.312 113.398 197.375L113.219 198.578C112.865 198.5 112.552 198.461 112.281 198.461C111.589 198.461 110.995 198.742 110.5 199.305C110.01 199.867 109.766 200.568 109.766 201.406V206H108.469V197.438H109.539L109.688 199.023H109.75C110.068 198.466 110.451 198.036 110.898 197.734C111.346 197.432 111.839 197.281 112.375 197.281ZM117.766 205.086C117.995 205.086 118.216 205.07 118.43 205.039C118.643 205.003 118.812 204.966 118.938 204.93V205.922C118.797 205.99 118.589 206.044 118.312 206.086C118.042 206.133 117.797 206.156 117.578 206.156C115.922 206.156 115.094 205.284 115.094 203.539V198.445H113.867V197.82L115.094 197.281L115.641 195.453H116.391V197.438H118.875V198.445H116.391V203.484C116.391 204 116.513 204.396 116.758 204.672C117.003 204.948 117.339 205.086 117.766 205.086ZM126.18 203.664C126.18 204.461 125.883 205.076 125.289 205.508C124.695 205.94 123.862 206.156 122.789 206.156C121.654 206.156 120.768 205.977 120.133 205.617V204.414C120.544 204.622 120.984 204.786 121.453 204.906C121.927 205.026 122.383 205.086 122.82 205.086C123.497 205.086 124.018 204.979 124.383 204.766C124.747 204.547 124.93 204.216 124.93 203.773C124.93 203.44 124.784 203.156 124.492 202.922C124.206 202.682 123.643 202.401 122.805 202.078C122.008 201.781 121.44 201.523 121.102 201.305C120.768 201.081 120.518 200.828 120.352 200.547C120.19 200.266 120.109 199.93 120.109 199.539C120.109 198.841 120.393 198.292 120.961 197.891C121.529 197.484 122.307 197.281 123.297 197.281C124.219 197.281 125.12 197.469 126 197.844L125.539 198.898C124.68 198.544 123.901 198.367 123.203 198.367C122.589 198.367 122.125 198.464 121.812 198.656C121.5 198.849 121.344 199.115 121.344 199.453C121.344 199.682 121.401 199.878 121.516 200.039C121.635 200.201 121.826 200.354 122.086 200.5C122.346 200.646 122.846 200.857 123.586 201.133C124.602 201.503 125.286 201.875 125.641 202.25C126 202.625 126.18 203.096 126.18 203.664ZM139.445 206L137.875 200.977C137.776 200.669 137.591 199.971 137.32 198.883H137.258C137.049 199.794 136.867 200.497 136.711 200.992L135.094 206H133.594L131.258 197.438H132.617C133.169 199.589 133.589 201.227 133.875 202.352C134.167 203.477 134.333 204.234 134.375 204.625H134.438C134.495 204.328 134.586 203.945 134.711 203.477C134.841 203.003 134.953 202.628 135.047 202.352L136.617 197.438H138.023L139.555 202.352C139.846 203.247 140.044 204 140.148 204.609H140.211C140.232 204.422 140.286 204.133 140.375 203.742C140.469 203.352 141.013 201.25 142.008 197.438H143.352L140.984 206H139.445ZM146.203 206H144.906V197.438H146.203V206ZM144.797 195.117C144.797 194.82 144.87 194.604 145.016 194.469C145.161 194.328 145.344 194.258 145.562 194.258C145.771 194.258 145.951 194.328 146.102 194.469C146.253 194.609 146.328 194.826 146.328 195.117C146.328 195.409 146.253 195.628 146.102 195.773C145.951 195.914 145.771 195.984 145.562 195.984C145.344 195.984 145.161 195.914 145.016 195.773C144.87 195.628 144.797 195.409 144.797 195.117ZM151.719 205.086C151.948 205.086 152.169 205.07 152.383 205.039C152.596 205.003 152.766 204.966 152.891 204.93V205.922C152.75 205.99 152.542 206.044 152.266 206.086C151.995 206.133 151.75 206.156 151.531 206.156C149.875 206.156 149.047 205.284 149.047 203.539V198.445H147.82V197.82L149.047 197.281L149.594 195.453H150.344V197.438H152.828V198.445H150.344V203.484C150.344 204 150.466 204.396 150.711 204.672C150.956 204.948 151.292 205.086 151.719 205.086ZM160.469 206V200.461C160.469 199.763 160.31 199.242 159.992 198.898C159.674 198.555 159.177 198.383 158.5 198.383C157.599 198.383 156.94 198.628 156.523 199.117C156.112 199.607 155.906 200.409 155.906 201.523V206H154.609V193.844H155.906V197.523C155.906 197.966 155.885 198.333 155.844 198.625H155.922C156.177 198.214 156.539 197.891 157.008 197.656C157.482 197.417 158.021 197.297 158.625 197.297C159.672 197.297 160.456 197.547 160.977 198.047C161.503 198.542 161.766 199.331 161.766 200.414V206H160.469ZM172.016 206.156C170.776 206.156 169.815 205.776 169.133 205.016C168.456 204.25 168.117 203.169 168.117 201.773C168.117 200.341 168.461 199.234 169.148 198.453C169.841 197.672 170.826 197.281 172.102 197.281C172.513 197.281 172.924 197.326 173.336 197.414C173.747 197.503 174.07 197.607 174.305 197.727L173.906 198.828C173.62 198.714 173.307 198.62 172.969 198.547C172.63 198.469 172.331 198.43 172.07 198.43C170.331 198.43 169.461 199.539 169.461 201.758C169.461 202.81 169.672 203.617 170.094 204.18C170.521 204.742 171.151 205.023 171.984 205.023C172.698 205.023 173.43 204.87 174.18 204.562V205.711C173.607 206.008 172.885 206.156 172.016 206.156ZM183.609 201.711C183.609 203.107 183.258 204.198 182.555 204.984C181.852 205.766 180.88 206.156 179.641 206.156C178.875 206.156 178.195 205.977 177.602 205.617C177.008 205.258 176.549 204.742 176.227 204.07C175.904 203.398 175.742 202.612 175.742 201.711C175.742 200.315 176.091 199.229 176.789 198.453C177.487 197.672 178.456 197.281 179.695 197.281C180.893 197.281 181.844 197.68 182.547 198.477C183.255 199.273 183.609 200.352 183.609 201.711ZM177.086 201.711C177.086 202.805 177.305 203.638 177.742 204.211C178.18 204.784 178.823 205.07 179.672 205.07C180.521 205.07 181.164 204.786 181.602 204.219C182.044 203.646 182.266 202.81 182.266 201.711C182.266 200.622 182.044 199.797 181.602 199.234C181.164 198.667 180.516 198.383 179.656 198.383C178.807 198.383 178.167 198.661 177.734 199.219C177.302 199.776 177.086 200.607 177.086 201.711ZM196.805 206V200.43C196.805 199.747 196.659 199.237 196.367 198.898C196.076 198.555 195.622 198.383 195.008 198.383C194.201 198.383 193.604 198.615 193.219 199.078C192.833 199.542 192.641 200.255 192.641 201.219V206H191.344V200.43C191.344 199.747 191.198 199.237 190.906 198.898C190.615 198.555 190.159 198.383 189.539 198.383C188.727 198.383 188.13 198.628 187.75 199.117C187.375 199.602 187.188 200.398 187.188 201.508V206H185.891V197.438H186.945L187.156 198.609H187.219C187.464 198.193 187.807 197.867 188.25 197.633C188.698 197.398 189.198 197.281 189.75 197.281C191.089 197.281 191.964 197.766 192.375 198.734H192.438C192.693 198.286 193.062 197.932 193.547 197.672C194.031 197.411 194.583 197.281 195.203 197.281C196.172 197.281 196.896 197.531 197.375 198.031C197.859 198.526 198.102 199.32 198.102 200.414V206H196.805ZM211.695 206V200.43C211.695 199.747 211.549 199.237 211.258 198.898C210.966 198.555 210.513 198.383 209.898 198.383C209.091 198.383 208.495 198.615 208.109 199.078C207.724 199.542 207.531 200.255 207.531 201.219V206H206.234V200.43C206.234 199.747 206.089 199.237 205.797 198.898C205.505 198.555 205.049 198.383 204.43 198.383C203.617 198.383 203.021 198.628 202.641 199.117C202.266 199.602 202.078 200.398 202.078 201.508V206H200.781V197.438H201.836L202.047 198.609H202.109C202.354 198.193 202.698 197.867 203.141 197.633C203.589 197.398 204.089 197.281 204.641 197.281C205.979 197.281 206.854 197.766 207.266 198.734H207.328C207.583 198.286 207.953 197.932 208.438 197.672C208.922 197.411 209.474 197.281 210.094 197.281C211.062 197.281 211.786 197.531 212.266 198.031C212.75 198.526 212.992 199.32 212.992 200.414V206H211.695ZM216.969 206H215.672V197.438H216.969V206ZM215.562 195.117C215.562 194.82 215.635 194.604 215.781 194.469C215.927 194.328 216.109 194.258 216.328 194.258C216.536 194.258 216.716 194.328 216.867 194.469C217.018 194.609 217.094 194.826 217.094 195.117C217.094 195.409 217.018 195.628 216.867 195.773C216.716 195.914 216.536 195.984 216.328 195.984C216.109 195.984 215.927 195.914 215.781 195.773C215.635 195.628 215.562 195.409 215.562 195.117ZM222.484 205.086C222.714 205.086 222.935 205.07 223.148 205.039C223.362 205.003 223.531 204.966 223.656 204.93V205.922C223.516 205.99 223.307 206.044 223.031 206.086C222.76 206.133 222.516 206.156 222.297 206.156C220.641 206.156 219.812 205.284 219.812 203.539V198.445H218.586V197.82L219.812 197.281L220.359 195.453H221.109V197.438H223.594V198.445H221.109V203.484C221.109 204 221.232 204.396 221.477 204.672C221.721 204.948 222.057 205.086 222.484 205.086ZM234.797 206L234.539 204.781H234.477C234.049 205.318 233.622 205.682 233.195 205.875C232.773 206.062 232.245 206.156 231.609 206.156C230.76 206.156 230.094 205.938 229.609 205.5C229.13 205.062 228.891 204.44 228.891 203.633C228.891 201.904 230.273 200.997 233.039 200.914L234.492 200.867V200.336C234.492 199.664 234.346 199.169 234.055 198.852C233.768 198.529 233.307 198.367 232.672 198.367C231.958 198.367 231.151 198.586 230.25 199.023L229.852 198.031C230.273 197.802 230.734 197.622 231.234 197.492C231.74 197.362 232.245 197.297 232.75 197.297C233.771 197.297 234.526 197.523 235.016 197.977C235.51 198.43 235.758 199.156 235.758 200.156V206H234.797ZM231.867 205.086C232.674 205.086 233.307 204.865 233.766 204.422C234.229 203.979 234.461 203.359 234.461 202.562V201.789L233.164 201.844C232.133 201.88 231.388 202.042 230.93 202.328C230.477 202.609 230.25 203.049 230.25 203.648C230.25 204.117 230.391 204.474 230.672 204.719C230.958 204.964 231.357 205.086 231.867 205.086ZM244.297 206V200.461C244.297 199.763 244.138 199.242 243.82 198.898C243.503 198.555 243.005 198.383 242.328 198.383C241.432 198.383 240.776 198.625 240.359 199.109C239.943 199.594 239.734 200.393 239.734 201.508V206H238.438V197.438H239.492L239.703 198.609H239.766C240.031 198.188 240.404 197.862 240.883 197.633C241.362 197.398 241.896 197.281 242.484 197.281C243.516 197.281 244.292 197.531 244.812 198.031C245.333 198.526 245.594 199.32 245.594 200.414V206H244.297ZM254.094 204.852H254.023C253.424 205.721 252.529 206.156 251.336 206.156C250.216 206.156 249.344 205.773 248.719 205.008C248.099 204.242 247.789 203.154 247.789 201.742C247.789 200.331 248.102 199.234 248.727 198.453C249.352 197.672 250.221 197.281 251.336 197.281C252.497 197.281 253.388 197.703 254.008 198.547H254.109L254.055 197.93L254.023 197.328V193.844H255.32V206H254.266L254.094 204.852ZM251.5 205.07C252.385 205.07 253.026 204.831 253.422 204.352C253.823 203.867 254.023 203.089 254.023 202.016V201.742C254.023 200.529 253.82 199.664 253.414 199.148C253.013 198.628 252.37 198.367 251.484 198.367C250.724 198.367 250.141 198.664 249.734 199.258C249.333 199.846 249.133 200.68 249.133 201.758C249.133 202.852 249.333 203.677 249.734 204.234C250.135 204.792 250.724 205.07 251.5 205.07ZM266.141 197.281C266.521 197.281 266.862 197.312 267.164 197.375L266.984 198.578C266.63 198.5 266.318 198.461 266.047 198.461C265.354 198.461 264.76 198.742 264.266 199.305C263.776 199.867 263.531 200.568 263.531 201.406V206H262.234V197.438H263.305L263.453 199.023H263.516C263.833 198.466 264.216 198.036 264.664 197.734C265.112 197.432 265.604 197.281 266.141 197.281ZM272.383 206.156C271.117 206.156 270.117 205.771 269.383 205C268.654 204.229 268.289 203.159 268.289 201.789C268.289 200.409 268.628 199.312 269.305 198.5C269.987 197.688 270.901 197.281 272.047 197.281C273.12 197.281 273.969 197.635 274.594 198.344C275.219 199.047 275.531 199.977 275.531 201.133V201.953H269.633C269.659 202.958 269.911 203.721 270.391 204.242C270.875 204.763 271.555 205.023 272.43 205.023C273.352 205.023 274.263 204.831 275.164 204.445V205.602C274.706 205.799 274.271 205.94 273.859 206.023C273.453 206.112 272.961 206.156 272.383 206.156ZM272.031 198.367C271.344 198.367 270.794 198.591 270.383 199.039C269.977 199.487 269.737 200.107 269.664 200.898H274.141C274.141 200.081 273.958 199.456 273.594 199.023C273.229 198.586 272.708 198.367 272.031 198.367ZM279.625 206L276.375 197.438H277.766L279.609 202.516C280.026 203.703 280.271 204.474 280.344 204.828H280.406C280.464 204.552 280.643 203.982 280.945 203.117C281.253 202.247 281.938 200.354 283 197.438H284.391L281.141 206H279.625ZM289.383 206.156C288.117 206.156 287.117 205.771 286.383 205C285.654 204.229 285.289 203.159 285.289 201.789C285.289 200.409 285.628 199.312 286.305 198.5C286.987 197.688 287.901 197.281 289.047 197.281C290.12 197.281 290.969 197.635 291.594 198.344C292.219 199.047 292.531 199.977 292.531 201.133V201.953H286.633C286.659 202.958 286.911 203.721 287.391 204.242C287.875 204.763 288.555 205.023 289.43 205.023C290.352 205.023 291.263 204.831 292.164 204.445V205.602C291.706 205.799 291.271 205.94 290.859 206.023C290.453 206.112 289.961 206.156 289.383 206.156ZM289.031 198.367C288.344 198.367 287.794 198.591 287.383 199.039C286.977 199.487 286.737 200.107 286.664 200.898H291.141C291.141 200.081 290.958 199.456 290.594 199.023C290.229 198.586 289.708 198.367 289.031 198.367ZM300.016 206L299.758 204.781H299.695C299.268 205.318 298.841 205.682 298.414 205.875C297.992 206.062 297.464 206.156 296.828 206.156C295.979 206.156 295.312 205.938 294.828 205.5C294.349 205.062 294.109 204.44 294.109 203.633C294.109 201.904 295.492 200.997 298.258 200.914L299.711 200.867V200.336C299.711 199.664 299.565 199.169 299.273 198.852C298.987 198.529 298.526 198.367 297.891 198.367C297.177 198.367 296.37 198.586 295.469 199.023L295.07 198.031C295.492 197.802 295.953 197.622 296.453 197.492C296.958 197.362 297.464 197.297 297.969 197.297C298.99 197.297 299.745 197.523 300.234 197.977C300.729 198.43 300.977 199.156 300.977 200.156V206H300.016ZM297.086 205.086C297.893 205.086 298.526 204.865 298.984 204.422C299.448 203.979 299.68 203.359 299.68 202.562V201.789L298.383 201.844C297.352 201.88 296.607 202.042 296.148 202.328C295.695 202.609 295.469 203.049 295.469 203.648C295.469 204.117 295.609 204.474 295.891 204.719C296.177 204.964 296.576 205.086 297.086 205.086ZM304.953 206H303.656V193.844H304.953V206Z" class="path-1"/> -<circle cx="43" cy="247" r="11.5" class="circle-1"/> -<path d="M45.9062 251H40.0996V249.957L42.3086 247.736C42.9609 247.068 43.3926 246.596 43.6035 246.318C43.8184 246.037 43.9746 245.773 44.0723 245.527C44.1699 245.281 44.2188 245.018 44.2188 244.736C44.2188 244.35 44.1016 244.045 43.8672 243.822C43.6367 243.6 43.3164 243.488 42.9062 243.488C42.5781 243.488 42.2598 243.549 41.9512 243.67C41.6465 243.791 41.293 244.01 40.8906 244.326L40.1465 243.418C40.623 243.016 41.0859 242.73 41.5352 242.562C41.9844 242.395 42.4629 242.311 42.9707 242.311C43.7676 242.311 44.4062 242.52 44.8867 242.938C45.3672 243.352 45.6074 243.91 45.6074 244.613C45.6074 245 45.5371 245.367 45.3965 245.715C45.2598 246.062 45.0469 246.422 44.7578 246.793C44.4727 247.16 43.9961 247.658 43.3281 248.287L41.8398 249.729V249.787H45.9062V251Z" class="path-2"/> -<path d="M68.5713 243.764C67.6325 243.764 66.8942 244.096 66.3564 244.762C65.8187 245.427 65.5498 246.345 65.5498 247.517C65.5498 248.743 65.8073 249.67 66.3223 250.299C66.8418 250.928 67.5915 251.242 68.5713 251.242C68.9951 251.242 69.4053 251.201 69.8018 251.119C70.1982 251.033 70.6107 250.923 71.0391 250.791V252.192C70.2552 252.489 69.3665 252.637 68.373 252.637C66.9102 252.637 65.7868 252.195 65.0029 251.311C64.2191 250.422 63.8271 249.153 63.8271 247.503C63.8271 246.464 64.0163 245.555 64.3945 244.775C64.7773 243.996 65.3288 243.399 66.0488 242.984C66.7689 242.57 67.6143 242.362 68.585 242.362C69.6058 242.362 70.5492 242.576 71.415 243.005L70.8271 244.365C70.4899 244.206 70.1322 244.067 69.7539 243.948C69.3802 243.825 68.986 243.764 68.5713 243.764ZM79.7275 248.706C79.7275 249.941 79.4108 250.905 78.7773 251.598C78.1439 252.29 77.262 252.637 76.1318 252.637C75.4255 252.637 74.8011 252.477 74.2588 252.158C73.7165 251.839 73.2995 251.381 73.0078 250.784C72.7161 250.187 72.5703 249.494 72.5703 248.706C72.5703 247.48 72.8848 246.523 73.5137 245.835C74.1426 245.147 75.029 244.803 76.1729 244.803C77.2666 244.803 78.1325 245.156 78.7705 245.862C79.4085 246.564 79.7275 247.512 79.7275 248.706ZM74.2246 248.706C74.2246 250.451 74.8695 251.324 76.1592 251.324C77.4352 251.324 78.0732 250.451 78.0732 248.706C78.0732 246.979 77.4307 246.115 76.1455 246.115C75.471 246.115 74.9811 246.339 74.6758 246.785C74.375 247.232 74.2246 247.872 74.2246 248.706ZM87.9512 252.5H86.3379V247.838C86.3379 247.259 86.2285 246.828 86.0098 246.546C85.791 246.259 85.4492 246.115 84.9844 246.115C84.3646 246.115 83.9089 246.318 83.6172 246.724C83.3301 247.125 83.1865 247.795 83.1865 248.733V252.5H81.5801V244.939H82.8379L83.0635 245.931H83.1455C83.3551 245.571 83.6582 245.293 84.0547 245.097C84.4557 244.901 84.8955 244.803 85.374 244.803C86.5361 244.803 87.3063 245.199 87.6846 245.992H87.7939C88.0173 245.618 88.3317 245.327 88.7373 245.117C89.1429 244.908 89.6077 244.803 90.1318 244.803C91.0342 244.803 91.6904 245.031 92.1006 245.486C92.5153 245.942 92.7227 246.637 92.7227 247.571V252.5H91.1162V247.838C91.1162 247.259 91.0046 246.828 90.7812 246.546C90.5625 246.259 90.2207 246.115 89.7559 246.115C89.1315 246.115 88.6735 246.311 88.3818 246.703C88.0947 247.09 87.9512 247.688 87.9512 248.494V252.5ZM101.336 252.5H99.7227V247.838C99.7227 247.259 99.6133 246.828 99.3945 246.546C99.1758 246.259 98.834 246.115 98.3691 246.115C97.7493 246.115 97.2936 246.318 97.002 246.724C96.7148 247.125 96.5713 247.795 96.5713 248.733V252.5H94.9648V244.939H96.2227L96.4482 245.931H96.5303C96.7399 245.571 97.043 245.293 97.4395 245.097C97.8405 244.901 98.2803 244.803 98.7588 244.803C99.9209 244.803 100.691 245.199 101.069 245.992H101.179C101.402 245.618 101.716 245.327 102.122 245.117C102.528 244.908 102.993 244.803 103.517 244.803C104.419 244.803 105.075 245.031 105.485 245.486C105.9 245.942 106.107 246.637 106.107 247.571V252.5H104.501V247.838C104.501 247.259 104.389 246.828 104.166 246.546C103.947 246.259 103.605 246.115 103.141 246.115C102.516 246.115 102.058 246.311 101.767 246.703C101.479 247.09 101.336 247.688 101.336 248.494V252.5ZM109.956 252.5H108.35V244.939H109.956V252.5ZM108.254 242.937C108.254 242.649 108.331 242.428 108.486 242.273C108.646 242.118 108.871 242.041 109.163 242.041C109.446 242.041 109.664 242.118 109.819 242.273C109.979 242.428 110.059 242.649 110.059 242.937C110.059 243.21 109.979 243.426 109.819 243.586C109.664 243.741 109.446 243.818 109.163 243.818C108.871 243.818 108.646 243.741 108.486 243.586C108.331 243.426 108.254 243.21 108.254 242.937ZM115.076 251.338C115.468 251.338 115.86 251.276 116.252 251.153V252.363C116.074 252.441 115.844 252.505 115.562 252.555C115.284 252.609 114.994 252.637 114.693 252.637C113.171 252.637 112.41 251.835 112.41 250.23V246.156H111.378V245.445L112.485 244.857L113.032 243.258H114.023V244.939H116.177V246.156H114.023V250.203C114.023 250.59 114.119 250.878 114.311 251.064C114.507 251.247 114.762 251.338 115.076 251.338ZM128.194 245.527C128.194 246.571 127.853 247.371 127.169 247.927C126.485 248.483 125.512 248.761 124.25 248.761H123.211V252.5H121.577V242.506H124.455C125.704 242.506 126.638 242.761 127.258 243.271C127.882 243.782 128.194 244.534 128.194 245.527ZM123.211 247.387H124.079C124.918 247.387 125.533 247.241 125.925 246.949C126.317 246.658 126.513 246.202 126.513 245.582C126.513 245.008 126.337 244.579 125.986 244.297C125.635 244.014 125.089 243.873 124.346 243.873H123.211V247.387ZM133.321 252.637C132.146 252.637 131.225 252.295 130.56 251.611C129.899 250.923 129.568 249.978 129.568 248.774C129.568 247.539 129.876 246.569 130.491 245.862C131.106 245.156 131.952 244.803 133.027 244.803C134.025 244.803 134.814 245.106 135.393 245.712C135.971 246.318 136.261 247.152 136.261 248.214V249.082H131.223C131.245 249.816 131.444 250.381 131.817 250.777C132.191 251.169 132.717 251.365 133.396 251.365C133.843 251.365 134.258 251.324 134.641 251.242C135.028 251.156 135.443 251.014 135.885 250.818V252.124C135.493 252.311 135.096 252.443 134.695 252.521C134.294 252.598 133.836 252.637 133.321 252.637ZM133.027 246.02C132.517 246.02 132.107 246.181 131.797 246.505C131.492 246.828 131.309 247.3 131.25 247.92H134.682C134.673 247.296 134.522 246.824 134.23 246.505C133.939 246.181 133.538 246.02 133.027 246.02ZM141.921 244.803C142.244 244.803 142.511 244.826 142.721 244.871L142.563 246.368C142.336 246.313 142.099 246.286 141.853 246.286C141.21 246.286 140.688 246.496 140.287 246.915C139.891 247.334 139.692 247.879 139.692 248.549V252.5H138.086V244.939H139.344L139.556 246.272H139.638C139.888 245.821 140.214 245.464 140.615 245.199C141.021 244.935 141.456 244.803 141.921 244.803ZM145.735 252.5H144.129V244.939H145.735V252.5ZM144.033 242.937C144.033 242.649 144.111 242.428 144.266 242.273C144.425 242.118 144.651 242.041 144.942 242.041C145.225 242.041 145.444 242.118 145.599 242.273C145.758 242.428 145.838 242.649 145.838 242.937C145.838 243.21 145.758 243.426 145.599 243.586C145.444 243.741 145.225 243.818 144.942 243.818C144.651 243.818 144.425 243.741 144.266 243.586C144.111 243.426 144.033 243.21 144.033 242.937ZM154.745 248.706C154.745 249.941 154.428 250.905 153.795 251.598C153.161 252.29 152.28 252.637 151.149 252.637C150.443 252.637 149.819 252.477 149.276 252.158C148.734 251.839 148.317 251.381 148.025 250.784C147.734 250.187 147.588 249.494 147.588 248.706C147.588 247.48 147.902 246.523 148.531 245.835C149.16 245.147 150.047 244.803 151.19 244.803C152.284 244.803 153.15 245.156 153.788 245.862C154.426 246.564 154.745 247.512 154.745 248.706ZM149.242 248.706C149.242 250.451 149.887 251.324 151.177 251.324C152.453 251.324 153.091 250.451 153.091 248.706C153.091 246.979 152.448 246.115 151.163 246.115C150.489 246.115 149.999 246.339 149.693 246.785C149.393 247.232 149.242 247.872 149.242 248.706ZM159.147 252.637C158.204 252.637 157.468 252.295 156.939 251.611C156.411 250.928 156.146 249.968 156.146 248.733C156.146 247.494 156.413 246.53 156.946 245.842C157.484 245.149 158.227 244.803 159.175 244.803C160.168 244.803 160.925 245.17 161.444 245.903H161.526C161.449 245.361 161.41 244.933 161.41 244.618V241.863H163.023V252.5H161.766L161.485 251.509H161.41C160.895 252.261 160.141 252.637 159.147 252.637ZM159.578 251.338C160.239 251.338 160.72 251.153 161.021 250.784C161.321 250.41 161.476 249.807 161.485 248.973V248.747C161.485 247.795 161.33 247.118 161.021 246.717C160.711 246.316 160.225 246.115 159.564 246.115C158.999 246.115 158.564 246.345 158.259 246.806C157.953 247.261 157.801 247.913 157.801 248.761C157.801 249.599 157.949 250.24 158.245 250.682C158.541 251.119 158.986 251.338 159.578 251.338Z" class="path-3"/> -<path d="M181 247L214 247" class="path-4"/> -<circle cx="242" cy="247" r="11.5" class="circle-2"/> -<path d="M244.584 244.402C244.584 244.945 244.426 245.398 244.109 245.762C243.793 246.121 243.348 246.363 242.773 246.488V246.535C243.461 246.621 243.977 246.836 244.32 247.18C244.664 247.52 244.836 247.973 244.836 248.539C244.836 249.363 244.545 250 243.963 250.449C243.381 250.895 242.553 251.117 241.479 251.117C240.529 251.117 239.729 250.963 239.076 250.654V249.43C239.439 249.609 239.824 249.748 240.23 249.846C240.637 249.943 241.027 249.992 241.402 249.992C242.066 249.992 242.562 249.869 242.891 249.623C243.219 249.377 243.383 248.996 243.383 248.48C243.383 248.023 243.201 247.688 242.838 247.473C242.475 247.258 241.904 247.15 241.127 247.15H240.383V246.031H241.139C242.506 246.031 243.189 245.559 243.189 244.613C243.189 244.246 243.07 243.963 242.832 243.764C242.594 243.564 242.242 243.465 241.777 243.465C241.453 243.465 241.141 243.512 240.84 243.605C240.539 243.695 240.184 243.873 239.773 244.139L239.1 243.178C239.885 242.6 240.797 242.311 241.836 242.311C242.699 242.311 243.373 242.496 243.857 242.867C244.342 243.238 244.584 243.75 244.584 244.402Z" class="path-5"/> -<path d="M269.014 242.506H270.709L267.209 252.5H265.486L262 242.506H263.682L265.767 248.72C265.876 249.016 265.992 249.399 266.115 249.868C266.238 250.333 266.318 250.679 266.354 250.907C266.414 250.561 266.505 250.16 266.628 249.704C266.751 249.248 266.851 248.911 266.929 248.692L269.014 242.506ZM278.563 248.706C278.563 249.941 278.247 250.905 277.613 251.598C276.98 252.29 276.098 252.637 274.968 252.637C274.261 252.637 273.637 252.477 273.095 252.158C272.552 251.839 272.135 251.381 271.844 250.784C271.552 250.187 271.406 249.494 271.406 248.706C271.406 247.48 271.721 246.523 272.35 245.835C272.979 245.147 273.865 244.803 275.009 244.803C276.103 244.803 276.968 245.156 277.606 245.862C278.244 246.564 278.563 247.512 278.563 248.706ZM273.061 248.706C273.061 250.451 273.705 251.324 274.995 251.324C276.271 251.324 276.909 250.451 276.909 248.706C276.909 246.979 276.267 246.115 274.981 246.115C274.307 246.115 273.817 246.339 273.512 246.785C273.211 247.232 273.061 247.872 273.061 248.706ZM283.232 251.338C283.624 251.338 284.016 251.276 284.408 251.153V252.363C284.23 252.441 284 252.505 283.718 252.555C283.44 252.609 283.15 252.637 282.85 252.637C281.327 252.637 280.566 251.835 280.566 250.23V246.156H279.534V245.445L280.642 244.857L281.188 243.258H282.18V244.939H284.333V246.156H282.18V250.203C282.18 250.59 282.275 250.878 282.467 251.064C282.663 251.247 282.918 251.338 283.232 251.338ZM287.532 252.5H285.926V244.939H287.532V252.5ZM285.83 242.937C285.83 242.649 285.908 242.428 286.062 242.273C286.222 242.118 286.448 242.041 286.739 242.041C287.022 242.041 287.241 242.118 287.396 242.273C287.555 242.428 287.635 242.649 287.635 242.937C287.635 243.21 287.555 243.426 287.396 243.586C287.241 243.741 287.022 243.818 286.739 243.818C286.448 243.818 286.222 243.741 286.062 243.586C285.908 243.426 285.83 243.21 285.83 242.937ZM296.487 252.5H294.874V247.852C294.874 247.268 294.756 246.833 294.519 246.546C294.286 246.259 293.915 246.115 293.404 246.115C292.725 246.115 292.229 246.316 291.914 246.717C291.6 247.118 291.442 247.79 291.442 248.733V252.5H289.836V244.939H291.094L291.319 245.931H291.401C291.629 245.571 291.953 245.293 292.372 245.097C292.791 244.901 293.256 244.803 293.767 244.803C295.58 244.803 296.487 245.726 296.487 247.571V252.5ZM305.107 244.939V245.821L303.815 246.061C303.934 246.22 304.032 246.416 304.109 246.648C304.187 246.881 304.226 247.127 304.226 247.387C304.226 248.166 303.957 248.779 303.419 249.226C302.881 249.672 302.141 249.896 301.197 249.896C300.956 249.896 300.737 249.877 300.541 249.841C300.195 250.055 300.021 250.306 300.021 250.593C300.021 250.766 300.101 250.896 300.261 250.982C300.425 251.069 300.723 251.112 301.156 251.112H302.476C303.31 251.112 303.943 251.29 304.376 251.646C304.809 252.001 305.025 252.514 305.025 253.184C305.025 254.04 304.672 254.701 303.966 255.166C303.259 255.631 302.239 255.863 300.903 255.863C299.873 255.863 299.087 255.681 298.545 255.316C298.003 254.952 297.731 254.432 297.731 253.758C297.731 253.293 297.877 252.901 298.169 252.582C298.465 252.268 298.878 252.049 299.406 251.926C299.192 251.835 299.014 251.689 298.873 251.488C298.736 251.283 298.668 251.069 298.668 250.846C298.668 250.563 298.748 250.324 298.907 250.128C299.067 249.932 299.304 249.738 299.618 249.547C299.226 249.378 298.907 249.105 298.661 248.727C298.42 248.344 298.299 247.897 298.299 247.387C298.299 246.566 298.556 245.931 299.071 245.479C299.591 245.028 300.329 244.803 301.286 244.803C301.5 244.803 301.724 244.819 301.956 244.851C302.193 244.878 302.371 244.908 302.489 244.939H305.107ZM299.167 253.676C299.167 254.022 299.322 254.289 299.632 254.476C299.946 254.662 300.386 254.756 300.951 254.756C301.826 254.756 302.478 254.631 302.906 254.38C303.335 254.129 303.549 253.797 303.549 253.382C303.549 253.054 303.43 252.819 303.193 252.678C302.961 252.541 302.526 252.473 301.888 252.473H300.671C300.211 252.473 299.844 252.58 299.57 252.794C299.301 253.013 299.167 253.307 299.167 253.676ZM299.857 247.387C299.857 247.861 299.978 248.225 300.22 248.48C300.466 248.736 300.817 248.863 301.272 248.863C302.202 248.863 302.667 248.367 302.667 247.373C302.667 246.881 302.551 246.503 302.318 246.238C302.09 245.969 301.742 245.835 301.272 245.835C300.808 245.835 300.454 245.967 300.213 246.231C299.976 246.496 299.857 246.881 299.857 247.387ZM316.94 245.527C316.94 246.571 316.599 247.371 315.915 247.927C315.231 248.483 314.258 248.761 312.996 248.761H311.957V252.5H310.323V242.506H313.201C314.45 242.506 315.384 242.761 316.004 243.271C316.628 243.782 316.94 244.534 316.94 245.527ZM311.957 247.387H312.825C313.664 247.387 314.279 247.241 314.671 246.949C315.063 246.658 315.259 246.202 315.259 245.582C315.259 245.008 315.083 244.579 314.732 244.297C314.382 244.014 313.835 243.873 313.092 243.873H311.957V247.387ZM322.067 252.637C320.892 252.637 319.971 252.295 319.306 251.611C318.645 250.923 318.314 249.978 318.314 248.774C318.314 247.539 318.622 246.569 319.237 245.862C319.853 245.156 320.698 244.803 321.773 244.803C322.771 244.803 323.56 245.106 324.139 245.712C324.717 246.318 325.007 247.152 325.007 248.214V249.082H319.969C319.992 249.816 320.19 250.381 320.563 250.777C320.937 251.169 321.464 251.365 322.143 251.365C322.589 251.365 323.004 251.324 323.387 251.242C323.774 251.156 324.189 251.014 324.631 250.818V252.124C324.239 252.311 323.842 252.443 323.441 252.521C323.04 252.598 322.582 252.637 322.067 252.637ZM321.773 246.02C321.263 246.02 320.853 246.181 320.543 246.505C320.238 246.828 320.055 247.3 319.996 247.92H323.428C323.419 247.296 323.268 246.824 322.977 246.505C322.685 246.181 322.284 246.02 321.773 246.02ZM330.667 244.803C330.991 244.803 331.257 244.826 331.467 244.871L331.31 246.368C331.082 246.313 330.845 246.286 330.599 246.286C329.956 246.286 329.434 246.496 329.033 246.915C328.637 247.334 328.438 247.879 328.438 248.549V252.5H326.832V244.939H328.09L328.302 246.272H328.384C328.634 245.821 328.96 245.464 329.361 245.199C329.767 244.935 330.202 244.803 330.667 244.803ZM334.481 252.5H332.875V244.939H334.481V252.5ZM332.779 242.937C332.779 242.649 332.857 242.428 333.012 242.273C333.171 242.118 333.397 242.041 333.688 242.041C333.971 242.041 334.19 242.118 334.345 242.273C334.504 242.428 334.584 242.649 334.584 242.937C334.584 243.21 334.504 243.426 334.345 243.586C334.19 243.741 333.971 243.818 333.688 243.818C333.397 243.818 333.171 243.741 333.012 243.586C332.857 243.426 332.779 243.21 332.779 242.937ZM343.491 248.706C343.491 249.941 343.174 250.905 342.541 251.598C341.908 252.29 341.026 252.637 339.896 252.637C339.189 252.637 338.565 252.477 338.022 252.158C337.48 251.839 337.063 251.381 336.771 250.784C336.48 250.187 336.334 249.494 336.334 248.706C336.334 247.48 336.648 246.523 337.277 245.835C337.906 245.147 338.793 244.803 339.937 244.803C341.03 244.803 341.896 245.156 342.534 245.862C343.172 246.564 343.491 247.512 343.491 248.706ZM337.988 248.706C337.988 250.451 338.633 251.324 339.923 251.324C341.199 251.324 341.837 250.451 341.837 248.706C341.837 246.979 341.194 246.115 339.909 246.115C339.235 246.115 338.745 246.339 338.439 246.785C338.139 247.232 337.988 247.872 337.988 248.706ZM347.894 252.637C346.95 252.637 346.214 252.295 345.686 251.611C345.157 250.928 344.893 249.968 344.893 248.733C344.893 247.494 345.159 246.53 345.692 245.842C346.23 245.149 346.973 244.803 347.921 244.803C348.914 244.803 349.671 245.17 350.19 245.903H350.272C350.195 245.361 350.156 244.933 350.156 244.618V241.863H351.77V252.5H350.512L350.231 251.509H350.156C349.641 252.261 348.887 252.637 347.894 252.637ZM348.324 251.338C348.985 251.338 349.466 251.153 349.767 250.784C350.067 250.41 350.222 249.807 350.231 248.973V248.747C350.231 247.795 350.076 247.118 349.767 246.717C349.457 246.316 348.971 246.115 348.311 246.115C347.745 246.115 347.31 246.345 347.005 246.806C346.7 247.261 346.547 247.913 346.547 248.761C346.547 249.599 346.695 250.24 346.991 250.682C347.287 251.119 347.732 251.338 348.324 251.338Z" class="path-6"/> -<path d="M71.4609 48.6016C70.2057 48.6016 69.2135 49.0208 68.4844 49.8594C67.7604 50.6927 67.3984 51.8359 67.3984 53.2891C67.3984 54.7839 67.7474 55.9401 68.4453 56.7578C69.1484 57.5703 70.1484 57.9766 71.4453 57.9766C72.2422 57.9766 73.151 57.8333 74.1719 57.5469V58.7109C73.3802 59.0078 72.4036 59.1562 71.2422 59.1562C69.5599 59.1562 68.2604 58.6458 67.3438 57.625C66.4323 56.6042 65.9766 55.1536 65.9766 53.2734C65.9766 52.0964 66.1953 51.0651 66.6328 50.1797C67.0755 49.2943 67.7109 48.612 68.5391 48.1328C69.3724 47.6536 70.3516 47.4141 71.4766 47.4141C72.6745 47.4141 73.7214 47.6328 74.6172 48.0703L74.0547 49.2109C73.1901 48.8047 72.3255 48.6016 71.4609 48.6016ZM83.8594 54.7109C83.8594 56.1068 83.5078 57.1979 82.8047 57.9844C82.1016 58.7656 81.1302 59.1562 79.8906 59.1562C79.125 59.1562 78.4453 58.9766 77.8516 58.6172C77.2578 58.2578 76.7995 57.7422 76.4766 57.0703C76.1536 56.3984 75.9922 55.612 75.9922 54.7109C75.9922 53.3151 76.3411 52.2292 77.0391 51.4531C77.737 50.6719 78.7057 50.2812 79.9453 50.2812C81.1432 50.2812 82.0938 50.6797 82.7969 51.4766C83.5052 52.2734 83.8594 53.3516 83.8594 54.7109ZM77.3359 54.7109C77.3359 55.8047 77.5547 56.638 77.9922 57.2109C78.4297 57.7839 79.0729 58.0703 79.9219 58.0703C80.7708 58.0703 81.4141 57.7865 81.8516 57.2188C82.2943 56.6458 82.5156 55.8099 82.5156 54.7109C82.5156 53.6224 82.2943 52.7969 81.8516 52.2344C81.4141 51.6667 80.7656 51.3828 79.9062 51.3828C79.0573 51.3828 78.4167 51.6615 77.9844 52.2188C77.5521 52.776 77.3359 53.6068 77.3359 54.7109ZM87.3594 50.4375V55.9922C87.3594 56.6901 87.5182 57.2109 87.8359 57.5547C88.1536 57.8984 88.651 58.0703 89.3281 58.0703C90.224 58.0703 90.8776 57.8255 91.2891 57.3359C91.7057 56.8464 91.9141 56.0469 91.9141 54.9375V50.4375H93.2109V59H92.1406L91.9531 57.8516H91.8828C91.6172 58.2734 91.2474 58.5964 90.7734 58.8203C90.3047 59.0443 89.7682 59.1562 89.1641 59.1562C88.1224 59.1562 87.3411 58.9089 86.8203 58.4141C86.3047 57.9193 86.0469 57.1276 86.0469 56.0391V50.4375H87.3594ZM99.875 50.2812C100.255 50.2812 100.596 50.3125 100.898 50.375L100.719 51.5781C100.365 51.5 100.052 51.4609 99.7812 51.4609C99.0885 51.4609 98.4948 51.7422 98 52.3047C97.5104 52.8672 97.2656 53.5677 97.2656 54.4062V59H95.9688V50.4375H97.0391L97.1875 52.0234H97.25C97.5677 51.4661 97.9505 51.0365 98.3984 50.7344C98.8464 50.4323 99.3385 50.2812 99.875 50.2812ZM105.266 58.0859C105.495 58.0859 105.716 58.0703 105.93 58.0391C106.143 58.0026 106.312 57.9661 106.438 57.9297V58.9219C106.297 58.9896 106.089 59.0443 105.812 59.0859C105.542 59.1328 105.297 59.1562 105.078 59.1562C103.422 59.1562 102.594 58.2839 102.594 56.5391V51.4453H101.367V50.8203L102.594 50.2812L103.141 48.4531H103.891V50.4375H106.375V51.4453H103.891V56.4844C103.891 57 104.013 57.3958 104.258 57.6719C104.503 57.9479 104.839 58.0859 105.266 58.0859ZM113.68 56.6641C113.68 57.4609 113.383 58.0755 112.789 58.5078C112.195 58.9401 111.362 59.1562 110.289 59.1562C109.154 59.1562 108.268 58.9766 107.633 58.6172V57.4141C108.044 57.6224 108.484 57.7865 108.953 57.9062C109.427 58.026 109.883 58.0859 110.32 58.0859C110.997 58.0859 111.518 57.9792 111.883 57.7656C112.247 57.5469 112.43 57.2161 112.43 56.7734C112.43 56.4401 112.284 56.1562 111.992 55.9219C111.706 55.6823 111.143 55.401 110.305 55.0781C109.508 54.7812 108.94 54.5234 108.602 54.3047C108.268 54.0807 108.018 53.8281 107.852 53.5469C107.69 53.2656 107.609 52.9297 107.609 52.5391C107.609 51.8411 107.893 51.2917 108.461 50.8906C109.029 50.4844 109.807 50.2812 110.797 50.2812C111.719 50.2812 112.62 50.4688 113.5 50.8438L113.039 51.8984C112.18 51.5443 111.401 51.3672 110.703 51.3672C110.089 51.3672 109.625 51.4635 109.312 51.6562C109 51.849 108.844 52.1146 108.844 52.4531C108.844 52.6823 108.901 52.8776 109.016 53.0391C109.135 53.2005 109.326 53.3542 109.586 53.5C109.846 53.6458 110.346 53.8568 111.086 54.1328C112.102 54.5026 112.786 54.875 113.141 55.25C113.5 55.625 113.68 56.0964 113.68 56.6641ZM126.945 59L125.375 53.9766C125.276 53.6693 125.091 52.9714 124.82 51.8828H124.758C124.549 52.7943 124.367 53.4974 124.211 53.9922L122.594 59H121.094L118.758 50.4375H120.117C120.669 52.5885 121.089 54.2266 121.375 55.3516C121.667 56.4766 121.833 57.2344 121.875 57.625H121.938C121.995 57.3281 122.086 56.9453 122.211 56.4766C122.341 56.0026 122.453 55.6276 122.547 55.3516L124.117 50.4375H125.523L127.055 55.3516C127.346 56.2474 127.544 57 127.648 57.6094H127.711C127.732 57.4219 127.786 57.1328 127.875 56.7422C127.969 56.3516 128.513 54.25 129.508 50.4375H130.852L128.484 59H126.945ZM133.703 59H132.406V50.4375H133.703V59ZM132.297 48.1172C132.297 47.8203 132.37 47.6042 132.516 47.4688C132.661 47.3281 132.844 47.2578 133.062 47.2578C133.271 47.2578 133.451 47.3281 133.602 47.4688C133.753 47.6094 133.828 47.8255 133.828 48.1172C133.828 48.4089 133.753 48.6276 133.602 48.7734C133.451 48.9141 133.271 48.9844 133.062 48.9844C132.844 48.9844 132.661 48.9141 132.516 48.7734C132.37 48.6276 132.297 48.4089 132.297 48.1172ZM139.219 58.0859C139.448 58.0859 139.669 58.0703 139.883 58.0391C140.096 58.0026 140.266 57.9661 140.391 57.9297V58.9219C140.25 58.9896 140.042 59.0443 139.766 59.0859C139.495 59.1328 139.25 59.1562 139.031 59.1562C137.375 59.1562 136.547 58.2839 136.547 56.5391V51.4453H135.32V50.8203L136.547 50.2812L137.094 48.4531H137.844V50.4375H140.328V51.4453H137.844V56.4844C137.844 57 137.966 57.3958 138.211 57.6719C138.456 57.9479 138.792 58.0859 139.219 58.0859ZM147.969 59V53.4609C147.969 52.763 147.81 52.2422 147.492 51.8984C147.174 51.5547 146.677 51.3828 146 51.3828C145.099 51.3828 144.44 51.6276 144.023 52.1172C143.612 52.6068 143.406 53.4089 143.406 54.5234V59H142.109V46.8438H143.406V50.5234C143.406 50.9661 143.385 51.3333 143.344 51.625H143.422C143.677 51.2135 144.039 50.8906 144.508 50.6562C144.982 50.4167 145.521 50.2969 146.125 50.2969C147.172 50.2969 147.956 50.5469 148.477 51.0469C149.003 51.5417 149.266 52.3307 149.266 53.4141V59H147.969ZM159.328 54.7109C159.328 56.1068 158.977 57.1979 158.273 57.9844C157.57 58.7656 156.599 59.1562 155.359 59.1562C154.594 59.1562 153.914 58.9766 153.32 58.6172C152.727 58.2578 152.268 57.7422 151.945 57.0703C151.622 56.3984 151.461 55.612 151.461 54.7109C151.461 53.3151 151.81 52.2292 152.508 51.4531C153.206 50.6719 154.174 50.2812 155.414 50.2812C156.612 50.2812 157.562 50.6797 158.266 51.4766C158.974 52.2734 159.328 53.3516 159.328 54.7109ZM152.805 54.7109C152.805 55.8047 153.023 56.638 153.461 57.2109C153.898 57.7839 154.542 58.0703 155.391 58.0703C156.24 58.0703 156.883 57.7865 157.32 57.2188C157.763 56.6458 157.984 55.8099 157.984 54.7109C157.984 53.6224 157.763 52.7969 157.32 52.2344C156.883 51.6667 156.234 51.3828 155.375 51.3828C154.526 51.3828 153.885 51.6615 153.453 52.2188C153.021 52.776 152.805 53.6068 152.805 54.7109ZM162.828 50.4375V55.9922C162.828 56.6901 162.987 57.2109 163.305 57.5547C163.622 57.8984 164.12 58.0703 164.797 58.0703C165.693 58.0703 166.346 57.8255 166.758 57.3359C167.174 56.8464 167.383 56.0469 167.383 54.9375V50.4375H168.68V59H167.609L167.422 57.8516H167.352C167.086 58.2734 166.716 58.5964 166.242 58.8203C165.773 59.0443 165.237 59.1562 164.633 59.1562C163.591 59.1562 162.81 58.9089 162.289 58.4141C161.773 57.9193 161.516 57.1276 161.516 56.0391V50.4375H162.828ZM174.203 58.0859C174.432 58.0859 174.654 58.0703 174.867 58.0391C175.081 58.0026 175.25 57.9661 175.375 57.9297V58.9219C175.234 58.9896 175.026 59.0443 174.75 59.0859C174.479 59.1328 174.234 59.1562 174.016 59.1562C172.359 59.1562 171.531 58.2839 171.531 56.5391V51.4453H170.305V50.8203L171.531 50.2812L172.078 48.4531H172.828V50.4375H175.312V51.4453H172.828V56.4844C172.828 57 172.951 57.3958 173.195 57.6719C173.44 57.9479 173.776 58.0859 174.203 58.0859ZM184.672 59.1562C183.432 59.1562 182.471 58.776 181.789 58.0156C181.112 57.25 180.773 56.1693 180.773 54.7734C180.773 53.3411 181.117 52.2344 181.805 51.4531C182.497 50.6719 183.482 50.2812 184.758 50.2812C185.169 50.2812 185.581 50.3255 185.992 50.4141C186.404 50.5026 186.727 50.6068 186.961 50.7266L186.562 51.8281C186.276 51.7135 185.964 51.6198 185.625 51.5469C185.286 51.4688 184.987 51.4297 184.727 51.4297C182.987 51.4297 182.117 52.5391 182.117 54.7578C182.117 55.8099 182.328 56.6172 182.75 57.1797C183.177 57.7422 183.807 58.0234 184.641 58.0234C185.354 58.0234 186.086 57.8698 186.836 57.5625V58.7109C186.263 59.0078 185.542 59.1562 184.672 59.1562ZM196.266 54.7109C196.266 56.1068 195.914 57.1979 195.211 57.9844C194.508 58.7656 193.536 59.1562 192.297 59.1562C191.531 59.1562 190.852 58.9766 190.258 58.6172C189.664 58.2578 189.206 57.7422 188.883 57.0703C188.56 56.3984 188.398 55.612 188.398 54.7109C188.398 53.3151 188.747 52.2292 189.445 51.4531C190.143 50.6719 191.112 50.2812 192.352 50.2812C193.549 50.2812 194.5 50.6797 195.203 51.4766C195.911 52.2734 196.266 53.3516 196.266 54.7109ZM189.742 54.7109C189.742 55.8047 189.961 56.638 190.398 57.2109C190.836 57.7839 191.479 58.0703 192.328 58.0703C193.177 58.0703 193.82 57.7865 194.258 57.2188C194.701 56.6458 194.922 55.8099 194.922 54.7109C194.922 53.6224 194.701 52.7969 194.258 52.2344C193.82 51.6667 193.172 51.3828 192.312 51.3828C191.464 51.3828 190.823 51.6615 190.391 52.2188C189.958 52.776 189.742 53.6068 189.742 54.7109ZM209.461 59V53.4297C209.461 52.7474 209.315 52.237 209.023 51.8984C208.732 51.5547 208.279 51.3828 207.664 51.3828C206.857 51.3828 206.26 51.6146 205.875 52.0781C205.49 52.5417 205.297 53.2552 205.297 54.2188V59H204V53.4297C204 52.7474 203.854 52.237 203.562 51.8984C203.271 51.5547 202.815 51.3828 202.195 51.3828C201.383 51.3828 200.786 51.6276 200.406 52.1172C200.031 52.6016 199.844 53.3984 199.844 54.5078V59H198.547V50.4375H199.602L199.812 51.6094H199.875C200.12 51.1927 200.464 50.8672 200.906 50.6328C201.354 50.3984 201.854 50.2812 202.406 50.2812C203.745 50.2812 204.62 50.7656 205.031 51.7344H205.094C205.349 51.2865 205.719 50.9323 206.203 50.6719C206.688 50.4115 207.24 50.2812 207.859 50.2812C208.828 50.2812 209.552 50.5312 210.031 51.0312C210.516 51.526 210.758 52.3203 210.758 53.4141V59H209.461ZM224.352 59V53.4297C224.352 52.7474 224.206 52.237 223.914 51.8984C223.622 51.5547 223.169 51.3828 222.555 51.3828C221.747 51.3828 221.151 51.6146 220.766 52.0781C220.38 52.5417 220.188 53.2552 220.188 54.2188V59H218.891V53.4297C218.891 52.7474 218.745 52.237 218.453 51.8984C218.161 51.5547 217.706 51.3828 217.086 51.3828C216.273 51.3828 215.677 51.6276 215.297 52.1172C214.922 52.6016 214.734 53.3984 214.734 54.5078V59H213.438V50.4375H214.492L214.703 51.6094H214.766C215.01 51.1927 215.354 50.8672 215.797 50.6328C216.245 50.3984 216.745 50.2812 217.297 50.2812C218.635 50.2812 219.51 50.7656 219.922 51.7344H219.984C220.24 51.2865 220.609 50.9323 221.094 50.6719C221.578 50.4115 222.13 50.2812 222.75 50.2812C223.719 50.2812 224.443 50.5312 224.922 51.0312C225.406 51.526 225.648 52.3203 225.648 53.4141V59H224.352ZM229.625 59H228.328V50.4375H229.625V59ZM228.219 48.1172C228.219 47.8203 228.292 47.6042 228.438 47.4688C228.583 47.3281 228.766 47.2578 228.984 47.2578C229.193 47.2578 229.372 47.3281 229.523 47.4688C229.674 47.6094 229.75 47.8255 229.75 48.1172C229.75 48.4089 229.674 48.6276 229.523 48.7734C229.372 48.9141 229.193 48.9844 228.984 48.9844C228.766 48.9844 228.583 48.9141 228.438 48.7734C228.292 48.6276 228.219 48.4089 228.219 48.1172ZM235.141 58.0859C235.37 58.0859 235.591 58.0703 235.805 58.0391C236.018 58.0026 236.188 57.9661 236.312 57.9297V58.9219C236.172 58.9896 235.964 59.0443 235.688 59.0859C235.417 59.1328 235.172 59.1562 234.953 59.1562C233.297 59.1562 232.469 58.2839 232.469 56.5391V51.4453H231.242V50.8203L232.469 50.2812L233.016 48.4531H233.766V50.4375H236.25V51.4453H233.766V56.4844C233.766 57 233.888 57.3958 234.133 57.6719C234.378 57.9479 234.714 58.0859 235.141 58.0859ZM247.453 59L247.195 57.7812H247.133C246.706 58.3177 246.279 58.6823 245.852 58.875C245.43 59.0625 244.901 59.1562 244.266 59.1562C243.417 59.1562 242.75 58.9375 242.266 58.5C241.786 58.0625 241.547 57.4401 241.547 56.6328C241.547 54.9036 242.93 53.9974 245.695 53.9141L247.148 53.8672V53.3359C247.148 52.6641 247.003 52.1693 246.711 51.8516C246.424 51.5286 245.964 51.3672 245.328 51.3672C244.615 51.3672 243.807 51.5859 242.906 52.0234L242.508 51.0312C242.93 50.8021 243.391 50.6224 243.891 50.4922C244.396 50.362 244.901 50.2969 245.406 50.2969C246.427 50.2969 247.182 50.5234 247.672 50.9766C248.167 51.4297 248.414 52.1562 248.414 53.1562V59H247.453ZM244.523 58.0859C245.331 58.0859 245.964 57.8646 246.422 57.4219C246.885 56.9792 247.117 56.3594 247.117 55.5625V54.7891L245.82 54.8438C244.789 54.8802 244.044 55.0417 243.586 55.3281C243.133 55.6094 242.906 56.0495 242.906 56.6484C242.906 57.1172 243.047 57.474 243.328 57.7188C243.615 57.9635 244.013 58.0859 244.523 58.0859ZM256.953 59V53.4609C256.953 52.763 256.794 52.2422 256.477 51.8984C256.159 51.5547 255.661 51.3828 254.984 51.3828C254.089 51.3828 253.432 51.625 253.016 52.1094C252.599 52.5938 252.391 53.3932 252.391 54.5078V59H251.094V50.4375H252.148L252.359 51.6094H252.422C252.688 51.1875 253.06 50.862 253.539 50.6328C254.018 50.3984 254.552 50.2812 255.141 50.2812C256.172 50.2812 256.948 50.5312 257.469 51.0312C257.99 51.526 258.25 52.3203 258.25 53.4141V59H256.953ZM266.75 57.8516H266.68C266.081 58.7214 265.185 59.1562 263.992 59.1562C262.872 59.1562 262 58.7734 261.375 58.0078C260.755 57.2422 260.445 56.1536 260.445 54.7422C260.445 53.3307 260.758 52.2344 261.383 51.4531C262.008 50.6719 262.878 50.2812 263.992 50.2812C265.154 50.2812 266.044 50.7031 266.664 51.5469H266.766L266.711 50.9297L266.68 50.3281V46.8438H267.977V59H266.922L266.75 57.8516ZM264.156 58.0703C265.042 58.0703 265.682 57.8307 266.078 57.3516C266.479 56.8672 266.68 56.0885 266.68 55.0156V54.7422C266.68 53.5286 266.477 52.6641 266.07 52.1484C265.669 51.6276 265.026 51.3672 264.141 51.3672C263.38 51.3672 262.797 51.6641 262.391 52.2578C261.99 52.8464 261.789 53.6797 261.789 54.7578C261.789 55.8516 261.99 56.6771 262.391 57.2344C262.792 57.7917 263.38 58.0703 264.156 58.0703ZM278.797 50.2812C279.177 50.2812 279.518 50.3125 279.82 50.375L279.641 51.5781C279.286 51.5 278.974 51.4609 278.703 51.4609C278.01 51.4609 277.417 51.7422 276.922 52.3047C276.432 52.8672 276.188 53.5677 276.188 54.4062V59H274.891V50.4375H275.961L276.109 52.0234H276.172C276.49 51.4661 276.872 51.0365 277.32 50.7344C277.768 50.4323 278.26 50.2812 278.797 50.2812ZM285.039 59.1562C283.773 59.1562 282.773 58.7708 282.039 58C281.31 57.2292 280.945 56.1589 280.945 54.7891C280.945 53.4089 281.284 52.3125 281.961 51.5C282.643 50.6875 283.557 50.2812 284.703 50.2812C285.776 50.2812 286.625 50.6354 287.25 51.3438C287.875 52.0469 288.188 52.9766 288.188 54.1328V54.9531H282.289C282.315 55.9583 282.568 56.7214 283.047 57.2422C283.531 57.763 284.211 58.0234 285.086 58.0234C286.008 58.0234 286.919 57.8307 287.82 57.4453V58.6016C287.362 58.7995 286.927 58.9401 286.516 59.0234C286.109 59.112 285.617 59.1562 285.039 59.1562ZM284.688 51.3672C284 51.3672 283.451 51.5911 283.039 52.0391C282.633 52.487 282.393 53.1068 282.32 53.8984H286.797C286.797 53.0807 286.615 52.4557 286.25 52.0234C285.885 51.5859 285.365 51.3672 284.688 51.3672ZM292.281 59L289.031 50.4375H290.422L292.266 55.5156C292.682 56.7031 292.927 57.474 293 57.8281H293.062C293.12 57.5521 293.299 56.9818 293.602 56.1172C293.909 55.2474 294.594 53.3542 295.656 50.4375H297.047L293.797 59H292.281ZM302.039 59.1562C300.773 59.1562 299.773 58.7708 299.039 58C298.31 57.2292 297.945 56.1589 297.945 54.7891C297.945 53.4089 298.284 52.3125 298.961 51.5C299.643 50.6875 300.557 50.2812 301.703 50.2812C302.776 50.2812 303.625 50.6354 304.25 51.3438C304.875 52.0469 305.188 52.9766 305.188 54.1328V54.9531H299.289C299.315 55.9583 299.568 56.7214 300.047 57.2422C300.531 57.763 301.211 58.0234 302.086 58.0234C303.008 58.0234 303.919 57.8307 304.82 57.4453V58.6016C304.362 58.7995 303.927 58.9401 303.516 59.0234C303.109 59.112 302.617 59.1562 302.039 59.1562ZM301.688 51.3672C301 51.3672 300.451 51.5911 300.039 52.0391C299.633 52.487 299.393 53.1068 299.32 53.8984H303.797C303.797 53.0807 303.615 52.4557 303.25 52.0234C302.885 51.5859 302.365 51.3672 301.688 51.3672ZM312.672 59L312.414 57.7812H312.352C311.924 58.3177 311.497 58.6823 311.07 58.875C310.648 59.0625 310.12 59.1562 309.484 59.1562C308.635 59.1562 307.969 58.9375 307.484 58.5C307.005 58.0625 306.766 57.4401 306.766 56.6328C306.766 54.9036 308.148 53.9974 310.914 53.9141L312.367 53.8672V53.3359C312.367 52.6641 312.221 52.1693 311.93 51.8516C311.643 51.5286 311.182 51.3672 310.547 51.3672C309.833 51.3672 309.026 51.5859 308.125 52.0234L307.727 51.0312C308.148 50.8021 308.609 50.6224 309.109 50.4922C309.615 50.362 310.12 50.2969 310.625 50.2969C311.646 50.2969 312.401 50.5234 312.891 50.9766C313.385 51.4297 313.633 52.1562 313.633 53.1562V59H312.672ZM309.742 58.0859C310.549 58.0859 311.182 57.8646 311.641 57.4219C312.104 56.9792 312.336 56.3594 312.336 55.5625V54.7891L311.039 54.8438C310.008 54.8802 309.263 55.0417 308.805 55.3281C308.352 55.6094 308.125 56.0495 308.125 56.6484C308.125 57.1172 308.266 57.474 308.547 57.7188C308.833 57.9635 309.232 58.0859 309.742 58.0859ZM317.609 59H316.312V46.8438H317.609V59Z" class="path-7"/> -<path d="M81.5 100L114.5 100" class="path-8"/> -<circle cx="142.5" cy="100" r="11.5" class="circle-3"/> -<path d="M145.406 104H139.6V102.957L141.809 100.736C142.461 100.068 142.893 99.5957 143.104 99.3184C143.318 99.0371 143.475 98.7734 143.572 98.5273C143.67 98.2812 143.719 98.0176 143.719 97.7363C143.719 97.3496 143.602 97.0449 143.367 96.8223C143.137 96.5996 142.816 96.4883 142.406 96.4883C142.078 96.4883 141.76 96.5488 141.451 96.6699C141.146 96.791 140.793 97.0098 140.391 97.3262L139.646 96.418C140.123 96.0156 140.586 95.7305 141.035 95.5625C141.484 95.3945 141.963 95.3105 142.471 95.3105C143.268 95.3105 143.906 95.5195 144.387 95.9375C144.867 96.3516 145.107 96.9102 145.107 97.6133C145.107 98 145.037 98.3672 144.896 98.7148C144.76 99.0625 144.547 99.4219 144.258 99.793C143.973 100.16 143.496 100.658 142.828 101.287L141.34 102.729V102.787H145.406V104Z" class="path-9"/> -<path d="M169.514 95.5059H171.209L167.709 105.5H165.986L162.5 95.5059H164.182L166.267 101.72C166.376 102.016 166.492 102.399 166.615 102.868C166.738 103.333 166.818 103.679 166.854 103.907C166.914 103.561 167.005 103.16 167.128 102.704C167.251 102.248 167.351 101.911 167.429 101.692L169.514 95.5059ZM179.063 101.706C179.063 102.941 178.747 103.905 178.113 104.598C177.48 105.29 176.598 105.637 175.468 105.637C174.761 105.637 174.137 105.477 173.595 105.158C173.052 104.839 172.635 104.381 172.344 103.784C172.052 103.187 171.906 102.494 171.906 101.706C171.906 100.48 172.221 99.5231 172.85 98.835C173.479 98.1468 174.365 97.8027 175.509 97.8027C176.603 97.8027 177.468 98.1559 178.106 98.8623C178.744 99.5641 179.063 100.512 179.063 101.706ZM173.561 101.706C173.561 103.451 174.205 104.324 175.495 104.324C176.771 104.324 177.409 103.451 177.409 101.706C177.409 99.9788 176.767 99.1152 175.481 99.1152C174.807 99.1152 174.317 99.3385 174.012 99.7852C173.711 100.232 173.561 100.872 173.561 101.706ZM183.732 104.338C184.124 104.338 184.516 104.276 184.908 104.153V105.363C184.73 105.441 184.5 105.505 184.218 105.555C183.94 105.609 183.65 105.637 183.35 105.637C181.827 105.637 181.066 104.835 181.066 103.23V99.1562H180.034V98.4453L181.142 97.8574L181.688 96.2578H182.68V97.9395H184.833V99.1562H182.68V103.203C182.68 103.59 182.775 103.878 182.967 104.064C183.163 104.247 183.418 104.338 183.732 104.338ZM188.032 105.5H186.426V97.9395H188.032V105.5ZM186.33 95.9365C186.33 95.6494 186.408 95.4284 186.562 95.2734C186.722 95.1185 186.948 95.041 187.239 95.041C187.522 95.041 187.741 95.1185 187.896 95.2734C188.055 95.4284 188.135 95.6494 188.135 95.9365C188.135 96.21 188.055 96.4264 187.896 96.5859C187.741 96.7409 187.522 96.8184 187.239 96.8184C186.948 96.8184 186.722 96.7409 186.562 96.5859C186.408 96.4264 186.33 96.21 186.33 95.9365ZM196.987 105.5H195.374V100.852C195.374 100.268 195.256 99.833 195.019 99.5459C194.786 99.2588 194.415 99.1152 193.904 99.1152C193.225 99.1152 192.729 99.3158 192.414 99.7168C192.1 100.118 191.942 100.79 191.942 101.733V105.5H190.336V97.9395H191.594L191.819 98.9307H191.901C192.129 98.5706 192.453 98.2926 192.872 98.0967C193.291 97.9007 193.756 97.8027 194.267 97.8027C196.08 97.8027 196.987 98.7256 196.987 100.571V105.5ZM205.607 97.9395V98.8213L204.315 99.0605C204.434 99.2201 204.532 99.416 204.609 99.6484C204.687 99.8809 204.726 100.127 204.726 100.387C204.726 101.166 204.457 101.779 203.919 102.226C203.381 102.672 202.641 102.896 201.697 102.896C201.456 102.896 201.237 102.877 201.041 102.841C200.695 103.055 200.521 103.306 200.521 103.593C200.521 103.766 200.601 103.896 200.761 103.982C200.925 104.069 201.223 104.112 201.656 104.112H202.976C203.81 104.112 204.443 104.29 204.876 104.646C205.309 105.001 205.525 105.514 205.525 106.184C205.525 107.04 205.172 107.701 204.466 108.166C203.759 108.631 202.739 108.863 201.403 108.863C200.373 108.863 199.587 108.681 199.045 108.316C198.503 107.952 198.231 107.432 198.231 106.758C198.231 106.293 198.377 105.901 198.669 105.582C198.965 105.268 199.378 105.049 199.906 104.926C199.692 104.835 199.514 104.689 199.373 104.488C199.236 104.283 199.168 104.069 199.168 103.846C199.168 103.563 199.248 103.324 199.407 103.128C199.567 102.932 199.804 102.738 200.118 102.547C199.726 102.378 199.407 102.105 199.161 101.727C198.92 101.344 198.799 100.897 198.799 100.387C198.799 99.5664 199.056 98.9307 199.571 98.4795C200.091 98.0283 200.829 97.8027 201.786 97.8027C202 97.8027 202.224 97.8187 202.456 97.8506C202.693 97.8779 202.871 97.9076 202.989 97.9395H205.607ZM199.667 106.676C199.667 107.022 199.822 107.289 200.132 107.476C200.446 107.662 200.886 107.756 201.451 107.756C202.326 107.756 202.978 107.631 203.406 107.38C203.835 107.129 204.049 106.797 204.049 106.382C204.049 106.054 203.93 105.819 203.693 105.678C203.461 105.541 203.026 105.473 202.388 105.473H201.171C200.711 105.473 200.344 105.58 200.07 105.794C199.801 106.013 199.667 106.307 199.667 106.676ZM200.357 100.387C200.357 100.861 200.478 101.225 200.72 101.48C200.966 101.736 201.317 101.863 201.772 101.863C202.702 101.863 203.167 101.367 203.167 100.373C203.167 99.8809 203.051 99.5026 202.818 99.2383C202.59 98.9694 202.242 98.835 201.772 98.835C201.308 98.835 200.954 98.9671 200.713 99.2314C200.476 99.4958 200.357 99.8809 200.357 100.387ZM217.44 98.5273C217.44 99.571 217.099 100.371 216.415 100.927C215.731 101.483 214.758 101.761 213.496 101.761H212.457V105.5H210.823V95.5059H213.701C214.95 95.5059 215.884 95.7611 216.504 96.2715C217.128 96.7819 217.44 97.5339 217.44 98.5273ZM212.457 100.387H213.325C214.164 100.387 214.779 100.241 215.171 99.9492C215.563 99.6576 215.759 99.2018 215.759 98.582C215.759 98.0078 215.583 97.5794 215.232 97.2969C214.882 97.0143 214.335 96.873 213.592 96.873H212.457V100.387ZM222.567 105.637C221.392 105.637 220.471 105.295 219.806 104.611C219.145 103.923 218.814 102.978 218.814 101.774C218.814 100.539 219.122 99.5687 219.737 98.8623C220.353 98.1559 221.198 97.8027 222.273 97.8027C223.271 97.8027 224.06 98.1058 224.639 98.7119C225.217 99.318 225.507 100.152 225.507 101.214V102.082H220.469C220.492 102.816 220.69 103.381 221.063 103.777C221.437 104.169 221.964 104.365 222.643 104.365C223.089 104.365 223.504 104.324 223.887 104.242C224.274 104.156 224.689 104.014 225.131 103.818V105.124C224.739 105.311 224.342 105.443 223.941 105.521C223.54 105.598 223.082 105.637 222.567 105.637ZM222.273 99.0195C221.763 99.0195 221.353 99.1813 221.043 99.5049C220.738 99.8285 220.555 100.3 220.496 100.92H223.928C223.919 100.296 223.768 99.8239 223.477 99.5049C223.185 99.1813 222.784 99.0195 222.273 99.0195ZM231.167 97.8027C231.491 97.8027 231.757 97.8255 231.967 97.8711L231.81 99.3682C231.582 99.3135 231.345 99.2861 231.099 99.2861C230.456 99.2861 229.934 99.4958 229.533 99.915C229.137 100.334 228.938 100.879 228.938 101.549V105.5H227.332V97.9395H228.59L228.802 99.2725H228.884C229.134 98.8213 229.46 98.4635 229.861 98.1992C230.267 97.9349 230.702 97.8027 231.167 97.8027ZM234.981 105.5H233.375V97.9395H234.981V105.5ZM233.279 95.9365C233.279 95.6494 233.357 95.4284 233.512 95.2734C233.671 95.1185 233.897 95.041 234.188 95.041C234.471 95.041 234.69 95.1185 234.845 95.2734C235.004 95.4284 235.084 95.6494 235.084 95.9365C235.084 96.21 235.004 96.4264 234.845 96.5859C234.69 96.7409 234.471 96.8184 234.188 96.8184C233.897 96.8184 233.671 96.7409 233.512 96.5859C233.357 96.4264 233.279 96.21 233.279 95.9365ZM243.991 101.706C243.991 102.941 243.674 103.905 243.041 104.598C242.408 105.29 241.526 105.637 240.396 105.637C239.689 105.637 239.065 105.477 238.522 105.158C237.98 104.839 237.563 104.381 237.271 103.784C236.98 103.187 236.834 102.494 236.834 101.706C236.834 100.48 237.148 99.5231 237.777 98.835C238.406 98.1468 239.293 97.8027 240.437 97.8027C241.53 97.8027 242.396 98.1559 243.034 98.8623C243.672 99.5641 243.991 100.512 243.991 101.706ZM238.488 101.706C238.488 103.451 239.133 104.324 240.423 104.324C241.699 104.324 242.337 103.451 242.337 101.706C242.337 99.9788 241.694 99.1152 240.409 99.1152C239.735 99.1152 239.245 99.3385 238.939 99.7852C238.639 100.232 238.488 100.872 238.488 101.706ZM248.394 105.637C247.45 105.637 246.714 105.295 246.186 104.611C245.657 103.928 245.393 102.968 245.393 101.733C245.393 100.494 245.659 99.5299 246.192 98.8418C246.73 98.1491 247.473 97.8027 248.421 97.8027C249.414 97.8027 250.171 98.1696 250.69 98.9033H250.772C250.695 98.361 250.656 97.9326 250.656 97.6182V94.8633H252.27V105.5H251.012L250.731 104.509H250.656C250.141 105.261 249.387 105.637 248.394 105.637ZM248.824 104.338C249.485 104.338 249.966 104.153 250.267 103.784C250.567 103.41 250.722 102.807 250.731 101.973V101.747C250.731 100.795 250.576 100.118 250.267 99.7168C249.957 99.3158 249.471 99.1152 248.811 99.1152C248.245 99.1152 247.81 99.3454 247.505 99.8057C247.2 100.261 247.047 100.913 247.047 101.761C247.047 102.599 247.195 103.24 247.491 103.682C247.787 104.119 248.232 104.338 248.824 104.338Z" class="path-10"/> -<path d="M269.5 100L302.5 100" class="path-11"/> -</svg> diff --git a/web/src/assets/svgs/mini-guides/binary-voting/voting-module.svg b/web/src/assets/svgs/mini-guides/binary-voting/voting-module.svg deleted file mode 100644 index 791289b53..000000000 --- a/web/src/assets/svgs/mini-guides/binary-voting/voting-module.svg +++ /dev/null @@ -1,12 +0,0 @@ -<svg viewBox="0 0 384 301" fill="none" xmlns="http://www.w3.org/2000/svg"> -<rect x="0.5" y="0.5" width="383" height="300" rx="2.5" class="rect-1"/> -<rect x="25" y="98.7461" width="155" height="45" rx="3" class="rect-2"/> -<path d="M66.2422 119.277C66.2422 120.47 65.8516 121.384 65.0703 122.02C64.2891 122.655 63.1771 122.973 61.7344 122.973H60.5469V127.246H58.6797V115.824H61.9688C63.3958 115.824 64.4635 116.116 65.1719 116.699C65.8854 117.283 66.2422 118.142 66.2422 119.277ZM60.5469 121.402H61.5391C62.4974 121.402 63.2005 121.236 63.6484 120.902C64.0964 120.569 64.3203 120.048 64.3203 119.34C64.3203 118.684 64.1198 118.194 63.7188 117.871C63.3177 117.548 62.6927 117.387 61.8438 117.387H60.5469V121.402ZM73.7344 127.246L73.3672 126.043H73.3047C72.888 126.569 72.4688 126.928 72.0469 127.121C71.625 127.309 71.0833 127.402 70.4219 127.402C69.5729 127.402 68.9089 127.173 68.4297 126.715C67.9557 126.257 67.7188 125.608 67.7188 124.77C67.7188 123.879 68.0495 123.207 68.7109 122.754C69.3724 122.301 70.3802 122.053 71.7344 122.012L73.2266 121.965V121.504C73.2266 120.952 73.0964 120.54 72.8359 120.27C72.5807 119.993 72.1823 119.855 71.6406 119.855C71.1979 119.855 70.7734 119.921 70.3672 120.051C69.9609 120.181 69.5703 120.335 69.1953 120.512L68.6016 119.199C69.0703 118.954 69.5833 118.77 70.1406 118.645C70.6979 118.514 71.224 118.449 71.7188 118.449C72.8177 118.449 73.6458 118.689 74.2031 119.168C74.7656 119.647 75.0469 120.4 75.0469 121.426V127.246H73.7344ZM71 125.996C71.6667 125.996 72.2005 125.811 72.6016 125.441C73.0078 125.066 73.2109 124.543 73.2109 123.871V123.121L72.1016 123.168C71.237 123.199 70.6068 123.345 70.2109 123.605C69.8203 123.861 69.625 124.254 69.625 124.785C69.625 125.171 69.7396 125.47 69.9688 125.684C70.1979 125.892 70.5417 125.996 71 125.996ZM76.2969 118.605H78.2969L80.0547 123.504C80.3203 124.202 80.4974 124.858 80.5859 125.473H80.6484C80.6953 125.186 80.7812 124.84 80.9062 124.434C81.0312 124.022 81.6927 122.079 82.8906 118.605H84.875L81.1797 128.395C80.5078 130.191 79.388 131.09 77.8203 131.09C77.4141 131.09 77.0182 131.046 76.6328 130.957V129.504C76.9089 129.566 77.224 129.598 77.5781 129.598C78.4635 129.598 79.0859 129.085 79.4453 128.059L79.7656 127.246L76.2969 118.605ZM97.4766 127.246H89.7344V125.855L92.6797 122.895C93.5495 122.004 94.125 121.374 94.4062 121.004C94.6927 120.629 94.901 120.277 95.0312 119.949C95.1615 119.621 95.2266 119.27 95.2266 118.895C95.2266 118.379 95.0703 117.973 94.7578 117.676C94.4505 117.379 94.0234 117.23 93.4766 117.23C93.0391 117.23 92.6146 117.311 92.2031 117.473C91.7969 117.634 91.3255 117.926 90.7891 118.348L89.7969 117.137C90.4323 116.6 91.0495 116.22 91.6484 115.996C92.2474 115.772 92.8854 115.66 93.5625 115.66C94.625 115.66 95.4766 115.939 96.1172 116.496C96.7578 117.048 97.0781 117.793 97.0781 118.73C97.0781 119.246 96.9844 119.736 96.7969 120.199C96.6146 120.663 96.3307 121.142 95.9453 121.637C95.5651 122.126 94.9297 122.79 94.0391 123.629L92.0547 125.551V125.629H97.4766V127.246ZM102.75 120.113C103.901 120.113 104.812 120.418 105.484 121.027C106.156 121.637 106.492 122.467 106.492 123.52C106.492 124.738 106.109 125.691 105.344 126.379C104.583 127.061 103.5 127.402 102.094 127.402C100.818 127.402 99.8151 127.197 99.0859 126.785V125.121C99.5078 125.361 99.9922 125.546 100.539 125.676C101.086 125.806 101.594 125.871 102.062 125.871C102.891 125.871 103.521 125.686 103.953 125.316C104.385 124.947 104.602 124.405 104.602 123.691C104.602 122.327 103.732 121.645 101.992 121.645C101.747 121.645 101.445 121.671 101.086 121.723C100.727 121.77 100.411 121.824 100.141 121.887L99.3203 121.402L99.7578 115.824H105.695V117.457H101.375L101.117 120.285C101.299 120.254 101.521 120.217 101.781 120.176C102.047 120.134 102.37 120.113 102.75 120.113ZM115.758 121.535C115.758 123.52 115.438 124.993 114.797 125.957C114.161 126.921 113.188 127.402 111.875 127.402C110.604 127.402 109.641 126.905 108.984 125.91C108.328 124.915 108 123.457 108 121.535C108 119.52 108.318 118.035 108.953 117.082C109.594 116.124 110.568 115.645 111.875 115.645C113.151 115.645 114.117 116.145 114.773 117.145C115.43 118.145 115.758 119.608 115.758 121.535ZM109.859 121.535C109.859 123.092 110.018 124.204 110.336 124.871C110.659 125.538 111.172 125.871 111.875 125.871C112.578 125.871 113.091 125.533 113.414 124.855C113.742 124.178 113.906 123.072 113.906 121.535C113.906 120.004 113.742 118.897 113.414 118.215C113.091 117.527 112.578 117.184 111.875 117.184C111.172 117.184 110.659 117.52 110.336 118.191C110.018 118.863 109.859 119.978 109.859 121.535ZM131.406 121.426C131.406 123.311 130.883 124.754 129.836 125.754C128.789 126.749 127.281 127.246 125.312 127.246H122.117V115.824H125.648C127.466 115.824 128.88 116.314 129.891 117.293C130.901 118.272 131.406 119.65 131.406 121.426ZM129.438 121.488C129.438 118.754 128.159 117.387 125.602 117.387H123.984V125.676H125.312C128.062 125.676 129.438 124.28 129.438 121.488ZM140.953 127.246L139.812 124.074H135.445L134.328 127.246H132.359L136.633 115.777H138.664L142.938 127.246H140.953ZM139.32 122.465L138.25 119.355C138.172 119.147 138.062 118.819 137.922 118.371C137.786 117.923 137.693 117.595 137.641 117.387C137.5 118.027 137.294 118.728 137.023 119.488L135.992 122.465H139.32ZM144.445 127.246V115.824H146.312V127.246H144.445Z" class="path-1"/> -<rect x="204" y="98.7461" width="155" height="45" rx="3" class="rect-3"/> -<path d="M245.242 119.277C245.242 120.47 244.852 121.384 244.07 122.02C243.289 122.655 242.177 122.973 240.734 122.973H239.547V127.246H237.68V115.824H240.969C242.396 115.824 243.464 116.116 244.172 116.699C244.885 117.283 245.242 118.142 245.242 119.277ZM239.547 121.402H240.539C241.497 121.402 242.201 121.236 242.648 120.902C243.096 120.569 243.32 120.048 243.32 119.34C243.32 118.684 243.12 118.194 242.719 117.871C242.318 117.548 241.693 117.387 240.844 117.387H239.547V121.402ZM252.734 127.246L252.367 126.043H252.305C251.888 126.569 251.469 126.928 251.047 127.121C250.625 127.309 250.083 127.402 249.422 127.402C248.573 127.402 247.909 127.173 247.43 126.715C246.956 126.257 246.719 125.608 246.719 124.77C246.719 123.879 247.049 123.207 247.711 122.754C248.372 122.301 249.38 122.053 250.734 122.012L252.227 121.965V121.504C252.227 120.952 252.096 120.54 251.836 120.27C251.581 119.993 251.182 119.855 250.641 119.855C250.198 119.855 249.773 119.921 249.367 120.051C248.961 120.181 248.57 120.335 248.195 120.512L247.602 119.199C248.07 118.954 248.583 118.77 249.141 118.645C249.698 118.514 250.224 118.449 250.719 118.449C251.818 118.449 252.646 118.689 253.203 119.168C253.766 119.647 254.047 120.4 254.047 121.426V127.246H252.734ZM250 125.996C250.667 125.996 251.201 125.811 251.602 125.441C252.008 125.066 252.211 124.543 252.211 123.871V123.121L251.102 123.168C250.237 123.199 249.607 123.345 249.211 123.605C248.82 123.861 248.625 124.254 248.625 124.785C248.625 125.171 248.74 125.47 248.969 125.684C249.198 125.892 249.542 125.996 250 125.996ZM255.297 118.605H257.297L259.055 123.504C259.32 124.202 259.497 124.858 259.586 125.473H259.648C259.695 125.186 259.781 124.84 259.906 124.434C260.031 124.022 260.693 122.079 261.891 118.605H263.875L260.18 128.395C259.508 130.191 258.388 131.09 256.82 131.09C256.414 131.09 256.018 131.046 255.633 130.957V129.504C255.909 129.566 256.224 129.598 256.578 129.598C257.464 129.598 258.086 129.085 258.445 128.059L258.766 127.246L255.297 118.605ZM274.125 127.246H272.289V119.871C272.289 118.991 272.31 118.293 272.352 117.777C272.232 117.902 272.083 118.04 271.906 118.191C271.734 118.342 271.151 118.822 270.156 119.629L269.234 118.465L272.594 115.824H274.125V127.246ZM281.75 120.113C282.901 120.113 283.812 120.418 284.484 121.027C285.156 121.637 285.492 122.467 285.492 123.52C285.492 124.738 285.109 125.691 284.344 126.379C283.583 127.061 282.5 127.402 281.094 127.402C279.818 127.402 278.815 127.197 278.086 126.785V125.121C278.508 125.361 278.992 125.546 279.539 125.676C280.086 125.806 280.594 125.871 281.062 125.871C281.891 125.871 282.521 125.686 282.953 125.316C283.385 124.947 283.602 124.405 283.602 123.691C283.602 122.327 282.732 121.645 280.992 121.645C280.747 121.645 280.445 121.671 280.086 121.723C279.727 121.77 279.411 121.824 279.141 121.887L278.32 121.402L278.758 115.824H284.695V117.457H280.375L280.117 120.285C280.299 120.254 280.521 120.217 280.781 120.176C281.047 120.134 281.37 120.113 281.75 120.113ZM294.758 121.535C294.758 123.52 294.438 124.993 293.797 125.957C293.161 126.921 292.188 127.402 290.875 127.402C289.604 127.402 288.641 126.905 287.984 125.91C287.328 124.915 287 123.457 287 121.535C287 119.52 287.318 118.035 287.953 117.082C288.594 116.124 289.568 115.645 290.875 115.645C292.151 115.645 293.117 116.145 293.773 117.145C294.43 118.145 294.758 119.608 294.758 121.535ZM288.859 121.535C288.859 123.092 289.018 124.204 289.336 124.871C289.659 125.538 290.172 125.871 290.875 125.871C291.578 125.871 292.091 125.533 292.414 124.855C292.742 124.178 292.906 123.072 292.906 121.535C292.906 120.004 292.742 118.897 292.414 118.215C292.091 117.527 291.578 117.184 290.875 117.184C290.172 117.184 289.659 117.52 289.336 118.191C289.018 118.863 288.859 119.978 288.859 121.535ZM310.406 121.426C310.406 123.311 309.883 124.754 308.836 125.754C307.789 126.749 306.281 127.246 304.312 127.246H301.117V115.824H304.648C306.466 115.824 307.88 116.314 308.891 117.293C309.901 118.272 310.406 119.65 310.406 121.426ZM308.438 121.488C308.438 118.754 307.159 117.387 304.602 117.387H302.984V125.676H304.312C307.062 125.676 308.438 124.28 308.438 121.488ZM319.953 127.246L318.812 124.074H314.445L313.328 127.246H311.359L315.633 115.777H317.664L321.938 127.246H319.953ZM318.32 122.465L317.25 119.355C317.172 119.147 317.062 118.819 316.922 118.371C316.786 117.923 316.693 117.595 316.641 117.387C316.5 118.027 316.294 118.728 316.023 119.488L314.992 122.465H318.32ZM323.445 127.246V115.824H325.312V127.246H323.445Z" class="path-2"/> -<path d="M1 192H383V298C383 299.105 382.105 300 381 300H3C1.89543 300 1 299.105 1 298V192Z" class="path-3"/> -<rect x="87.5" y="224.246" width="210" height="44" rx="2.5" class="rect-4"/> -<path d="M122.5 246.137H123.797C124.667 246.137 125.297 245.975 125.688 245.652C126.078 245.329 126.273 244.85 126.273 244.215C126.273 243.569 126.062 243.105 125.641 242.824C125.219 242.543 124.583 242.402 123.734 242.402H122.5V246.137ZM122.5 247.684V252.246H120.633V240.824H123.859C125.333 240.824 126.424 241.1 127.133 241.652C127.841 242.204 128.195 243.038 128.195 244.152C128.195 245.574 127.456 246.587 125.977 247.191L129.203 252.246H127.078L124.344 247.684H122.5ZM134.445 252.402C133.102 252.402 132.049 252.012 131.289 251.23C130.534 250.444 130.156 249.363 130.156 247.988C130.156 246.577 130.508 245.467 131.211 244.66C131.914 243.853 132.88 243.449 134.109 243.449C135.25 243.449 136.151 243.796 136.812 244.488C137.474 245.181 137.805 246.134 137.805 247.348V248.34H132.047C132.073 249.178 132.299 249.824 132.727 250.277C133.154 250.725 133.755 250.949 134.531 250.949C135.042 250.949 135.516 250.902 135.953 250.809C136.396 250.71 136.87 250.548 137.375 250.324V251.816C136.927 252.03 136.474 252.181 136.016 252.27C135.557 252.358 135.034 252.402 134.445 252.402ZM134.109 244.84C133.526 244.84 133.057 245.025 132.703 245.395C132.354 245.764 132.146 246.303 132.078 247.012H136C135.99 246.298 135.818 245.759 135.484 245.395C135.151 245.025 134.693 244.84 134.109 244.84ZM144.227 244.996H142.117V252.246H140.273V244.996H138.852V244.137L140.273 243.574V243.012C140.273 241.991 140.513 241.236 140.992 240.746C141.471 240.251 142.203 240.004 143.188 240.004C143.833 240.004 144.469 240.111 145.094 240.324L144.609 241.715C144.156 241.569 143.724 241.496 143.312 241.496C142.896 241.496 142.591 241.626 142.398 241.887C142.211 242.142 142.117 242.527 142.117 243.043V243.605H144.227V244.996ZM151.797 252.246L151.539 251.113H151.445C151.19 251.514 150.826 251.829 150.352 252.059C149.883 252.288 149.346 252.402 148.742 252.402C147.695 252.402 146.914 252.142 146.398 251.621C145.883 251.1 145.625 250.311 145.625 249.254V243.605H147.477V248.934C147.477 249.595 147.612 250.092 147.883 250.426C148.154 250.754 148.578 250.918 149.156 250.918C149.927 250.918 150.492 250.689 150.852 250.23C151.216 249.767 151.398 248.993 151.398 247.91V243.605H153.242V252.246H151.797ZM161.664 249.785C161.664 250.629 161.357 251.277 160.742 251.73C160.128 252.178 159.247 252.402 158.102 252.402C156.951 252.402 156.026 252.228 155.328 251.879V250.293C156.344 250.762 157.289 250.996 158.164 250.996C159.294 250.996 159.859 250.655 159.859 249.973C159.859 249.754 159.797 249.572 159.672 249.426C159.547 249.28 159.341 249.129 159.055 248.973C158.768 248.816 158.37 248.639 157.859 248.441C156.865 248.056 156.19 247.671 155.836 247.285C155.487 246.9 155.312 246.4 155.312 245.785C155.312 245.046 155.609 244.473 156.203 244.066C156.802 243.655 157.615 243.449 158.641 243.449C159.656 243.449 160.617 243.655 161.523 244.066L160.93 245.449C159.997 245.064 159.214 244.871 158.578 244.871C157.609 244.871 157.125 245.147 157.125 245.699C157.125 245.97 157.25 246.199 157.5 246.387C157.755 246.574 158.307 246.832 159.156 247.16C159.87 247.436 160.388 247.689 160.711 247.918C161.034 248.147 161.273 248.413 161.43 248.715C161.586 249.012 161.664 249.368 161.664 249.785ZM167.43 252.402C166.086 252.402 165.034 252.012 164.273 251.23C163.518 250.444 163.141 249.363 163.141 247.988C163.141 246.577 163.492 245.467 164.195 244.66C164.898 243.853 165.865 243.449 167.094 243.449C168.234 243.449 169.135 243.796 169.797 244.488C170.458 245.181 170.789 246.134 170.789 247.348V248.34H165.031C165.057 249.178 165.284 249.824 165.711 250.277C166.138 250.725 166.74 250.949 167.516 250.949C168.026 250.949 168.5 250.902 168.938 250.809C169.38 250.71 169.854 250.548 170.359 250.324V251.816C169.911 252.03 169.458 252.181 169 252.27C168.542 252.358 168.018 252.402 167.43 252.402ZM167.094 244.84C166.51 244.84 166.042 245.025 165.688 245.395C165.339 245.764 165.13 246.303 165.062 247.012H168.984C168.974 246.298 168.802 245.759 168.469 245.395C168.135 245.025 167.677 244.84 167.094 244.84ZM180.25 250.918C180.698 250.918 181.146 250.848 181.594 250.707V252.09C181.391 252.178 181.128 252.251 180.805 252.309C180.487 252.371 180.156 252.402 179.812 252.402C178.073 252.402 177.203 251.486 177.203 249.652V244.996H176.023V244.184L177.289 243.512L177.914 241.684H179.047V243.605H181.508V244.996H179.047V249.621C179.047 250.064 179.156 250.392 179.375 250.605C179.599 250.814 179.891 250.918 180.25 250.918ZM190.992 247.91C190.992 249.322 190.63 250.423 189.906 251.215C189.182 252.007 188.174 252.402 186.883 252.402C186.076 252.402 185.362 252.22 184.742 251.855C184.122 251.491 183.646 250.967 183.312 250.285C182.979 249.603 182.812 248.811 182.812 247.91C182.812 246.509 183.172 245.415 183.891 244.629C184.609 243.842 185.622 243.449 186.93 243.449C188.18 243.449 189.169 243.853 189.898 244.66C190.628 245.462 190.992 246.546 190.992 247.91ZM184.703 247.91C184.703 249.905 185.44 250.902 186.914 250.902C188.372 250.902 189.102 249.905 189.102 247.91C189.102 245.936 188.367 244.949 186.898 244.949C186.128 244.949 185.568 245.204 185.219 245.715C184.875 246.225 184.703 246.957 184.703 247.91ZM204.547 252.246L203.406 249.074H199.039L197.922 252.246H195.953L200.227 240.777H202.258L206.531 252.246H204.547ZM202.914 247.465L201.844 244.355C201.766 244.147 201.656 243.819 201.516 243.371C201.38 242.923 201.286 242.595 201.234 242.387C201.094 243.027 200.888 243.728 200.617 244.488L199.586 247.465H202.914ZM212.227 243.449C212.596 243.449 212.901 243.475 213.141 243.527L212.961 245.238C212.701 245.176 212.43 245.145 212.148 245.145C211.414 245.145 210.818 245.384 210.359 245.863C209.906 246.342 209.68 246.965 209.68 247.73V252.246H207.844V243.605H209.281L209.523 245.129H209.617C209.904 244.613 210.276 244.204 210.734 243.902C211.198 243.6 211.695 243.449 212.227 243.449ZM219.164 243.449C220.242 243.449 221.081 243.84 221.68 244.621C222.284 245.402 222.586 246.499 222.586 247.91C222.586 249.327 222.281 250.431 221.672 251.223C221.062 252.009 220.216 252.402 219.133 252.402C218.039 252.402 217.19 252.009 216.586 251.223H216.461L216.125 252.246H214.75V240.09H216.586V242.98C216.586 243.194 216.576 243.512 216.555 243.934C216.534 244.355 216.518 244.624 216.508 244.738H216.586C217.169 243.879 218.029 243.449 219.164 243.449ZM218.688 244.949C217.948 244.949 217.414 245.168 217.086 245.605C216.763 246.038 216.596 246.764 216.586 247.785V247.91C216.586 248.962 216.753 249.725 217.086 250.199C217.419 250.668 217.964 250.902 218.719 250.902C219.37 250.902 219.862 250.645 220.195 250.129C220.534 249.613 220.703 248.868 220.703 247.895C220.703 245.931 220.031 244.949 218.688 244.949ZM226.555 252.246H224.719V243.605H226.555V252.246ZM224.609 241.316C224.609 240.988 224.698 240.736 224.875 240.559C225.057 240.382 225.315 240.293 225.648 240.293C225.971 240.293 226.221 240.382 226.398 240.559C226.581 240.736 226.672 240.988 226.672 241.316C226.672 241.629 226.581 241.876 226.398 242.059C226.221 242.236 225.971 242.324 225.648 242.324C225.315 242.324 225.057 242.236 224.875 242.059C224.698 241.876 224.609 241.629 224.609 241.316ZM232.406 250.918C232.854 250.918 233.302 250.848 233.75 250.707V252.09C233.547 252.178 233.284 252.251 232.961 252.309C232.643 252.371 232.312 252.402 231.969 252.402C230.229 252.402 229.359 251.486 229.359 249.652V244.996H228.18V244.184L229.445 243.512L230.07 241.684H231.203V243.605H233.664V244.996H231.203V249.621C231.203 250.064 231.312 250.392 231.531 250.605C231.755 250.814 232.047 250.918 232.406 250.918ZM239.867 243.449C240.237 243.449 240.542 243.475 240.781 243.527L240.602 245.238C240.341 245.176 240.07 245.145 239.789 245.145C239.055 245.145 238.458 245.384 238 245.863C237.547 246.342 237.32 246.965 237.32 247.73V252.246H235.484V243.605H236.922L237.164 245.129H237.258C237.544 244.613 237.917 244.204 238.375 243.902C238.839 243.6 239.336 243.449 239.867 243.449ZM247.797 252.246L247.43 251.043H247.367C246.951 251.569 246.531 251.928 246.109 252.121C245.688 252.309 245.146 252.402 244.484 252.402C243.635 252.402 242.971 252.173 242.492 251.715C242.018 251.257 241.781 250.608 241.781 249.77C241.781 248.879 242.112 248.207 242.773 247.754C243.435 247.301 244.443 247.053 245.797 247.012L247.289 246.965V246.504C247.289 245.952 247.159 245.54 246.898 245.27C246.643 244.993 246.245 244.855 245.703 244.855C245.26 244.855 244.836 244.921 244.43 245.051C244.023 245.181 243.633 245.335 243.258 245.512L242.664 244.199C243.133 243.954 243.646 243.77 244.203 243.645C244.76 243.514 245.286 243.449 245.781 243.449C246.88 243.449 247.708 243.689 248.266 244.168C248.828 244.647 249.109 245.4 249.109 246.426V252.246H247.797ZM245.062 250.996C245.729 250.996 246.263 250.811 246.664 250.441C247.07 250.066 247.273 249.543 247.273 248.871V248.121L246.164 248.168C245.299 248.199 244.669 248.345 244.273 248.605C243.883 248.861 243.688 249.254 243.688 249.785C243.688 250.171 243.802 250.47 244.031 250.684C244.26 250.892 244.604 250.996 245.062 250.996ZM254.891 250.918C255.339 250.918 255.786 250.848 256.234 250.707V252.09C256.031 252.178 255.768 252.251 255.445 252.309C255.128 252.371 254.797 252.402 254.453 252.402C252.714 252.402 251.844 251.486 251.844 249.652V244.996H250.664V244.184L251.93 243.512L252.555 241.684H253.688V243.605H256.148V244.996H253.688V249.621C253.688 250.064 253.797 250.392 254.016 250.605C254.24 250.814 254.531 250.918 254.891 250.918ZM261.742 252.402C260.398 252.402 259.346 252.012 258.586 251.23C257.831 250.444 257.453 249.363 257.453 247.988C257.453 246.577 257.805 245.467 258.508 244.66C259.211 243.853 260.177 243.449 261.406 243.449C262.547 243.449 263.448 243.796 264.109 244.488C264.771 245.181 265.102 246.134 265.102 247.348V248.34H259.344C259.37 249.178 259.596 249.824 260.023 250.277C260.451 250.725 261.052 250.949 261.828 250.949C262.339 250.949 262.812 250.902 263.25 250.809C263.693 250.71 264.167 250.548 264.672 250.324V251.816C264.224 252.03 263.771 252.181 263.312 252.27C262.854 252.358 262.331 252.402 261.742 252.402ZM261.406 244.84C260.823 244.84 260.354 245.025 260 245.395C259.651 245.764 259.443 246.303 259.375 247.012H263.297C263.286 246.298 263.115 245.759 262.781 245.395C262.448 245.025 261.99 244.84 261.406 244.84Z" class="path-4"/> -<rect x="87.5" y="224.246" width="210" height="44" rx="2.5" class="rect-5"/> -<path d="M146.094 50.3242H147.523L143.406 61.7461H142.094L138 50.3242H139.406L142.031 57.7148C142.333 58.5638 142.573 59.3893 142.75 60.1914C142.938 59.3477 143.182 58.5065 143.484 57.668L146.094 50.3242ZM156.297 57.457C156.297 58.8529 155.945 59.944 155.242 60.7305C154.539 61.5117 153.568 61.9023 152.328 61.9023C151.562 61.9023 150.883 61.7227 150.289 61.3633C149.695 61.0039 149.237 60.4883 148.914 59.8164C148.591 59.1445 148.43 58.3581 148.43 57.457C148.43 56.0612 148.779 54.9753 149.477 54.1992C150.174 53.418 151.143 53.0273 152.383 53.0273C153.581 53.0273 154.531 53.4258 155.234 54.2227C155.943 55.0195 156.297 56.0977 156.297 57.457ZM149.773 57.457C149.773 58.5508 149.992 59.3841 150.43 59.957C150.867 60.5299 151.51 60.8164 152.359 60.8164C153.208 60.8164 153.852 60.5326 154.289 59.9648C154.732 59.3919 154.953 58.556 154.953 57.457C154.953 56.3685 154.732 55.543 154.289 54.9805C153.852 54.4128 153.203 54.1289 152.344 54.1289C151.495 54.1289 150.854 54.4076 150.422 54.9648C149.99 55.5221 149.773 56.3529 149.773 57.457ZM161.344 60.832C161.573 60.832 161.794 60.8164 162.008 60.7852C162.221 60.7487 162.391 60.7122 162.516 60.6758V61.668C162.375 61.7357 162.167 61.7904 161.891 61.832C161.62 61.8789 161.375 61.9023 161.156 61.9023C159.5 61.9023 158.672 61.0299 158.672 59.2852V54.1914H157.445V53.5664L158.672 53.0273L159.219 51.1992H159.969V53.1836H162.453V54.1914H159.969V59.2305C159.969 59.7461 160.091 60.1419 160.336 60.418C160.581 60.694 160.917 60.832 161.344 60.832ZM165.531 61.7461H164.234V53.1836H165.531V61.7461ZM164.125 50.8633C164.125 50.5664 164.198 50.3503 164.344 50.2148C164.49 50.0742 164.672 50.0039 164.891 50.0039C165.099 50.0039 165.279 50.0742 165.43 50.2148C165.581 50.3555 165.656 50.5716 165.656 50.8633C165.656 51.1549 165.581 51.3737 165.43 51.5195C165.279 51.6602 165.099 51.7305 164.891 51.7305C164.672 51.7305 164.49 51.6602 164.344 51.5195C164.198 51.3737 164.125 51.1549 164.125 50.8633ZM174.141 61.7461V56.207C174.141 55.5091 173.982 54.9883 173.664 54.6445C173.346 54.3008 172.849 54.1289 172.172 54.1289C171.276 54.1289 170.62 54.3711 170.203 54.8555C169.786 55.3398 169.578 56.1393 169.578 57.2539V61.7461H168.281V53.1836H169.336L169.547 54.3555H169.609C169.875 53.9336 170.247 53.6081 170.727 53.3789C171.206 53.1445 171.74 53.0273 172.328 53.0273C173.359 53.0273 174.135 53.2773 174.656 53.7773C175.177 54.2721 175.438 55.0664 175.438 56.1602V61.7461H174.141ZM185.117 53.1836V54.0039L183.531 54.1914C183.677 54.3737 183.807 54.6133 183.922 54.9102C184.036 55.2018 184.094 55.5326 184.094 55.9023C184.094 56.7409 183.807 57.4102 183.234 57.9102C182.661 58.4102 181.875 58.6602 180.875 58.6602C180.62 58.6602 180.38 58.6393 180.156 58.5977C179.604 58.8893 179.328 59.2565 179.328 59.6992C179.328 59.9336 179.424 60.1081 179.617 60.2227C179.81 60.332 180.141 60.3867 180.609 60.3867H182.125C183.052 60.3867 183.763 60.582 184.258 60.9727C184.758 61.3633 185.008 61.931 185.008 62.6758C185.008 63.6237 184.628 64.3451 183.867 64.8398C183.107 65.3398 181.997 65.5898 180.539 65.5898C179.419 65.5898 178.555 65.3815 177.945 64.9648C177.341 64.5482 177.039 63.9596 177.039 63.1992C177.039 62.6784 177.206 62.2279 177.539 61.8477C177.872 61.4674 178.341 61.2096 178.945 61.0742C178.727 60.9753 178.542 60.8216 178.391 60.6133C178.245 60.4049 178.172 60.1628 178.172 59.8867C178.172 59.5742 178.255 59.3008 178.422 59.0664C178.589 58.832 178.852 58.6055 179.211 58.3867C178.768 58.2044 178.406 57.8945 178.125 57.457C177.849 57.0195 177.711 56.5195 177.711 55.957C177.711 55.0195 177.992 54.2982 178.555 53.793C179.117 53.2826 179.914 53.0273 180.945 53.0273C181.393 53.0273 181.797 53.0794 182.156 53.1836H185.117ZM178.289 63.1836C178.289 63.6471 178.484 63.9987 178.875 64.2383C179.266 64.4779 179.826 64.5977 180.555 64.5977C181.643 64.5977 182.448 64.4336 182.969 64.1055C183.495 63.7826 183.758 63.3424 183.758 62.7852C183.758 62.3216 183.615 61.9987 183.328 61.8164C183.042 61.6393 182.503 61.5508 181.711 61.5508H180.156C179.568 61.5508 179.109 61.6914 178.781 61.9727C178.453 62.2539 178.289 62.6576 178.289 63.1836ZM178.992 55.9258C178.992 56.5247 179.161 56.9779 179.5 57.2852C179.839 57.5924 180.31 57.7461 180.914 57.7461C182.18 57.7461 182.812 57.1315 182.812 55.9023C182.812 54.6159 182.172 53.9727 180.891 53.9727C180.281 53.9727 179.812 54.1367 179.484 54.4648C179.156 54.793 178.992 55.2799 178.992 55.9258ZM198.422 57.457C198.422 58.8529 198.07 59.944 197.367 60.7305C196.664 61.5117 195.693 61.9023 194.453 61.9023C193.688 61.9023 193.008 61.7227 192.414 61.3633C191.82 61.0039 191.362 60.4883 191.039 59.8164C190.716 59.1445 190.555 58.3581 190.555 57.457C190.555 56.0612 190.904 54.9753 191.602 54.1992C192.299 53.418 193.268 53.0273 194.508 53.0273C195.706 53.0273 196.656 53.4258 197.359 54.2227C198.068 55.0195 198.422 56.0977 198.422 57.457ZM191.898 57.457C191.898 58.5508 192.117 59.3841 192.555 59.957C192.992 60.5299 193.635 60.8164 194.484 60.8164C195.333 60.8164 195.977 60.5326 196.414 59.9648C196.857 59.3919 197.078 58.556 197.078 57.457C197.078 56.3685 196.857 55.543 196.414 54.9805C195.977 54.4128 195.328 54.1289 194.469 54.1289C193.62 54.1289 192.979 54.4076 192.547 54.9648C192.115 55.5221 191.898 56.3529 191.898 57.457ZM204.688 61.9023C204.13 61.9023 203.62 61.8008 203.156 61.5977C202.698 61.3893 202.312 61.0716 202 60.6445H201.906C201.969 61.1445 202 61.6185 202 62.0664V65.5898H200.703V53.1836H201.758L201.938 54.3555H202C202.333 53.8867 202.721 53.5482 203.164 53.3398C203.607 53.1315 204.115 53.0273 204.688 53.0273C205.823 53.0273 206.698 53.4154 207.312 54.1914C207.932 54.9674 208.242 56.056 208.242 57.457C208.242 58.8633 207.927 59.957 207.297 60.7383C206.672 61.5143 205.802 61.9023 204.688 61.9023ZM204.5 54.1289C203.625 54.1289 202.992 54.3711 202.602 54.8555C202.211 55.3398 202.01 56.1107 202 57.168V57.457C202 58.6602 202.201 59.5221 202.602 60.043C203.003 60.5586 203.646 60.8164 204.531 60.8164C205.271 60.8164 205.849 60.5169 206.266 59.918C206.688 59.319 206.898 58.4935 206.898 57.4414C206.898 56.3737 206.688 55.556 206.266 54.9883C205.849 54.4154 205.26 54.1289 204.5 54.1289ZM213.281 60.832C213.51 60.832 213.732 60.8164 213.945 60.7852C214.159 60.7487 214.328 60.7122 214.453 60.6758V61.668C214.312 61.7357 214.104 61.7904 213.828 61.832C213.557 61.8789 213.312 61.9023 213.094 61.9023C211.438 61.9023 210.609 61.0299 210.609 59.2852V54.1914H209.383V53.5664L210.609 53.0273L211.156 51.1992H211.906V53.1836H214.391V54.1914H211.906V59.2305C211.906 59.7461 212.029 60.1419 212.273 60.418C212.518 60.694 212.854 60.832 213.281 60.832ZM217.469 61.7461H216.172V53.1836H217.469V61.7461ZM216.062 50.8633C216.062 50.5664 216.135 50.3503 216.281 50.2148C216.427 50.0742 216.609 50.0039 216.828 50.0039C217.036 50.0039 217.216 50.0742 217.367 50.2148C217.518 50.3555 217.594 50.5716 217.594 50.8633C217.594 51.1549 217.518 51.3737 217.367 51.5195C217.216 51.6602 217.036 51.7305 216.828 51.7305C216.609 51.7305 216.427 51.6602 216.281 51.5195C216.135 51.3737 216.062 51.1549 216.062 50.8633ZM227.609 57.457C227.609 58.8529 227.258 59.944 226.555 60.7305C225.852 61.5117 224.88 61.9023 223.641 61.9023C222.875 61.9023 222.195 61.7227 221.602 61.3633C221.008 61.0039 220.549 60.4883 220.227 59.8164C219.904 59.1445 219.742 58.3581 219.742 57.457C219.742 56.0612 220.091 54.9753 220.789 54.1992C221.487 53.418 222.456 53.0273 223.695 53.0273C224.893 53.0273 225.844 53.4258 226.547 54.2227C227.255 55.0195 227.609 56.0977 227.609 57.457ZM221.086 57.457C221.086 58.5508 221.305 59.3841 221.742 59.957C222.18 60.5299 222.823 60.8164 223.672 60.8164C224.521 60.8164 225.164 60.5326 225.602 59.9648C226.044 59.3919 226.266 58.556 226.266 57.457C226.266 56.3685 226.044 55.543 225.602 54.9805C225.164 54.4128 224.516 54.1289 223.656 54.1289C222.807 54.1289 222.167 54.4076 221.734 54.9648C221.302 55.5221 221.086 56.3529 221.086 57.457ZM235.75 61.7461V56.207C235.75 55.5091 235.591 54.9883 235.273 54.6445C234.956 54.3008 234.458 54.1289 233.781 54.1289C232.885 54.1289 232.229 54.3711 231.812 54.8555C231.396 55.3398 231.188 56.1393 231.188 57.2539V61.7461H229.891V53.1836H230.945L231.156 54.3555H231.219C231.484 53.9336 231.857 53.6081 232.336 53.3789C232.815 53.1445 233.349 53.0273 233.938 53.0273C234.969 53.0273 235.745 53.2773 236.266 53.7773C236.786 54.2721 237.047 55.0664 237.047 56.1602V61.7461H235.75ZM245.242 59.4102C245.242 60.207 244.945 60.8216 244.352 61.2539C243.758 61.6862 242.924 61.9023 241.852 61.9023C240.716 61.9023 239.831 61.7227 239.195 61.3633V60.1602C239.607 60.3685 240.047 60.5326 240.516 60.6523C240.99 60.7721 241.445 60.832 241.883 60.832C242.56 60.832 243.081 60.7253 243.445 60.5117C243.81 60.293 243.992 59.9622 243.992 59.5195C243.992 59.1862 243.846 58.9023 243.555 58.668C243.268 58.4284 242.706 58.1471 241.867 57.8242C241.07 57.5273 240.503 57.2695 240.164 57.0508C239.831 56.8268 239.581 56.5742 239.414 56.293C239.253 56.0117 239.172 55.6758 239.172 55.2852C239.172 54.5872 239.456 54.0378 240.023 53.6367C240.591 53.2305 241.37 53.0273 242.359 53.0273C243.281 53.0273 244.182 53.2148 245.062 53.5898L244.602 54.6445C243.742 54.2904 242.964 54.1133 242.266 54.1133C241.651 54.1133 241.188 54.2096 240.875 54.4023C240.562 54.5951 240.406 54.8607 240.406 55.1992C240.406 55.4284 240.464 55.6237 240.578 55.7852C240.698 55.9466 240.888 56.1003 241.148 56.2461C241.409 56.3919 241.909 56.6029 242.648 56.8789C243.664 57.2487 244.349 57.6211 244.703 57.9961C245.062 58.3711 245.242 58.8424 245.242 59.4102Z" class="path-5"/> -</svg> diff --git a/web/src/assets/svgs/mini-guides/dispute-resolver/parameters.svg b/web/src/assets/svgs/mini-guides/dispute-resolver/parameters.svg deleted file mode 100644 index 097bd593f..000000000 --- a/web/src/assets/svgs/mini-guides/dispute-resolver/parameters.svg +++ /dev/null @@ -1,42 +0,0 @@ -<svg width="346" height="403" viewBox="0 0 346 403" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g filter="url(#filter0_d_21428_72841)"> -<rect x="3" y="1" width="340" height="398" rx="2.31757" class="rect-1"/> -<rect x="3.38626" y="1.38626" width="339.227" height="397.227" rx="1.93131" stroke-width="0.772523" class="rect-2"/> -</g> -<path d="M107.203 61H104.492L97.8388 50.2203H97.7648L97.811 50.8218C97.8974 51.9691 97.9406 53.0178 97.9406 53.9678V61H95.9327V47.4722H98.616L105.25 58.1964H105.306C105.294 58.0545 105.269 57.5394 105.232 56.6511C105.195 55.7567 105.176 55.0596 105.176 54.56V47.4722H107.203V61ZM117.76 61L117.455 59.6583H117.344C117.042 60.1333 116.61 60.5065 116.049 60.7779C115.493 61.0493 114.858 61.1851 114.142 61.1851C112.903 61.1851 111.977 60.8766 111.367 60.2598C110.756 59.6429 110.451 58.7084 110.451 57.4561V50.7663H112.643V57.0768C112.643 57.8602 112.804 58.4493 113.125 58.8441C113.445 59.2327 113.948 59.427 114.633 59.427C115.546 59.427 116.215 59.1556 116.641 58.6127C117.073 58.0637 117.288 57.1477 117.288 55.8646V50.7663H119.472V61H117.76ZM131.196 61H129.012V54.6895C129.012 53.9061 128.864 53.3232 128.568 52.9407C128.272 52.5521 127.809 52.3578 127.18 52.3578C126.341 52.3578 125.724 52.6323 125.329 53.1813C124.941 53.7241 124.746 54.6309 124.746 55.9016V61H122.572V50.7663H124.274L124.58 52.1079H124.691C124.975 51.6206 125.385 51.2443 125.921 50.9791C126.464 50.7138 127.06 50.5812 127.707 50.5812C129.28 50.5812 130.323 51.1179 130.835 52.1912H130.983C131.285 51.6854 131.711 51.2906 132.26 51.0068C132.809 50.7231 133.438 50.5812 134.147 50.5812C135.369 50.5812 136.257 50.8896 136.812 51.5065C137.373 52.1234 137.654 53.0641 137.654 54.3286V61H135.48V54.6895C135.48 53.9061 135.329 53.3232 135.026 52.9407C134.73 52.5521 134.268 52.3578 133.638 52.3578C132.793 52.3578 132.173 52.623 131.779 53.1535C131.39 53.6778 131.196 54.4859 131.196 55.5778V61ZM145.917 50.5812C147.194 50.5812 148.187 51.0438 148.896 51.9691C149.612 52.8944 149.97 54.1929 149.97 55.8646C149.97 57.5425 149.609 58.8502 148.887 59.7879C148.165 60.7193 147.163 61.1851 145.88 61.1851C144.585 61.1851 143.579 60.7193 142.864 59.7879H142.716L142.318 61H140.689V46.6024H142.864V50.026C142.864 50.2789 142.851 50.6552 142.827 51.1549C142.802 51.6545 142.783 51.9722 142.771 52.1079H142.864C143.554 51.0901 144.572 50.5812 145.917 50.5812ZM145.353 52.3578C144.477 52.3578 143.844 52.6168 143.456 53.135C143.073 53.647 142.876 54.5075 142.864 55.7166V55.8646C142.864 57.1107 143.061 58.0144 143.456 58.5757C143.851 59.1309 144.495 59.4085 145.39 59.4085C146.161 59.4085 146.744 59.1031 147.138 58.4925C147.539 57.8818 147.74 56.9996 147.74 55.8461C147.74 53.5205 146.944 52.3578 145.353 52.3578ZM156.965 61.1851C155.374 61.1851 154.127 60.7224 153.227 59.7971C152.332 58.8657 151.885 57.5857 151.885 55.9572C151.885 54.2855 152.302 52.9715 153.134 52.0154C153.967 51.0593 155.111 50.5812 156.567 50.5812C157.918 50.5812 158.985 50.9914 159.769 51.8118C160.552 52.6323 160.944 53.7611 160.944 55.1984V56.3735H154.124C154.155 57.3667 154.424 58.1316 154.929 58.6683C155.435 59.1988 156.148 59.464 157.067 59.464C157.671 59.464 158.233 59.4085 158.751 59.2975C159.275 59.1803 159.837 58.989 160.435 58.7238V60.4911C159.904 60.744 159.368 60.9229 158.825 61.0278C158.282 61.1326 157.662 61.1851 156.965 61.1851ZM156.567 52.2282C155.876 52.2282 155.321 52.4472 154.902 52.8852C154.488 53.3232 154.242 53.9616 154.161 54.8005H158.806C158.794 53.9554 158.59 53.317 158.196 52.8852C157.801 52.4472 157.258 52.2282 156.567 52.2282ZM168.605 50.5812C169.043 50.5812 169.404 50.612 169.688 50.6737L169.475 52.7001C169.167 52.6261 168.846 52.5891 168.513 52.5891C167.643 52.5891 166.937 52.8728 166.394 53.4404C165.857 54.0079 165.589 54.745 165.589 55.6518V61H163.414V50.7663H165.117L165.404 52.5706H165.515C165.854 51.9599 166.295 51.4757 166.838 51.1179C167.387 50.7601 167.976 50.5812 168.605 50.5812ZM185.594 55.8646C185.594 57.5363 185.165 58.841 184.307 59.7786C183.45 60.7162 182.256 61.1851 180.727 61.1851C179.77 61.1851 178.925 60.9692 178.191 60.5374C177.457 60.1056 176.893 59.4856 176.498 58.6775C176.103 57.8694 175.906 56.9318 175.906 55.8646C175.906 54.2053 176.331 52.9099 177.183 51.9784C178.034 51.0469 179.234 50.5812 180.782 50.5812C182.263 50.5812 183.435 51.0593 184.298 52.0154C185.162 52.9654 185.594 54.2484 185.594 55.8646ZM178.145 55.8646C178.145 58.2272 179.018 59.4085 180.764 59.4085C182.491 59.4085 183.354 58.2272 183.354 55.8646C183.354 53.5267 182.485 52.3578 180.745 52.3578C179.832 52.3578 179.169 52.66 178.756 53.2646C178.349 53.8691 178.145 54.7358 178.145 55.8646ZM193.236 52.4133H190.738V61H188.555V52.4133H186.87V51.3955L188.555 50.7292V50.063C188.555 48.854 188.838 47.9595 189.406 47.3797C189.973 46.7937 190.84 46.5007 192.006 46.5007C192.771 46.5007 193.523 46.6271 194.264 46.88L193.69 48.5271C193.153 48.3543 192.641 48.268 192.154 48.268C191.66 48.268 191.3 48.4222 191.071 48.7306C190.849 49.0329 190.738 49.4894 190.738 50.1V50.7663H193.236V52.4133ZM198.862 65.5524C198.208 65.5524 197.666 65.4753 197.234 65.3211V63.6001C197.653 63.7111 198.082 63.7666 198.52 63.7666C199.445 63.7666 199.908 63.2423 199.908 62.1936V50.7663H202.082V62.3417C202.082 63.3965 201.805 64.1953 201.25 64.7382C200.701 65.281 199.905 65.5524 198.862 65.5524ZM199.778 48.0552C199.778 47.6665 199.883 47.3673 200.093 47.1576C200.309 46.9479 200.614 46.843 201.009 46.843C201.391 46.843 201.688 46.9479 201.897 47.1576C202.113 47.3673 202.221 47.6665 202.221 48.0552C202.221 48.4253 202.113 48.7183 201.897 48.9342C201.688 49.1439 201.391 49.2488 201.009 49.2488C200.614 49.2488 200.309 49.1439 200.093 48.9342C199.883 48.7183 199.778 48.4253 199.778 48.0552ZM212.418 61L212.112 59.6583H212.001C211.699 60.1333 211.267 60.5065 210.706 60.7779C210.151 61.0493 209.515 61.1851 208.8 61.1851C207.56 61.1851 206.635 60.8766 206.024 60.2598C205.413 59.6429 205.108 58.7084 205.108 57.4561V50.7663H207.301V57.0768C207.301 57.8602 207.461 58.4493 207.782 58.8441C208.103 59.2327 208.606 59.427 209.29 59.427C210.203 59.427 210.873 59.1556 211.298 58.6127C211.73 58.0637 211.946 57.1477 211.946 55.8646V50.7663H214.13V61H212.418ZM222.42 50.5812C222.858 50.5812 223.219 50.612 223.503 50.6737L223.29 52.7001C222.982 52.6261 222.661 52.5891 222.328 52.5891C221.458 52.5891 220.752 52.8728 220.209 53.4404C219.672 54.0079 219.404 54.745 219.404 55.6518V61H217.229V50.7663H218.932L219.219 52.5706H219.33C219.669 51.9599 220.11 51.4757 220.653 51.1179C221.202 50.7601 221.791 50.5812 222.42 50.5812ZM234.486 55.8646C234.486 57.5363 234.057 58.841 233.2 59.7786C232.342 60.7162 231.149 61.1851 229.619 61.1851C228.663 61.1851 227.818 60.9692 227.084 60.5374C226.35 60.1056 225.785 59.4856 225.39 58.6775C224.996 57.8694 224.798 56.9318 224.798 55.8646C224.798 54.2053 225.224 52.9099 226.075 51.9784C226.926 51.0469 228.126 50.5812 229.675 50.5812C231.155 50.5812 232.327 51.0593 233.191 52.0154C234.054 52.9654 234.486 54.2484 234.486 55.8646ZM227.037 55.8646C227.037 58.2272 227.91 59.4085 229.656 59.4085C231.383 59.4085 232.247 58.2272 232.247 55.8646C232.247 53.5267 231.377 52.3578 229.638 52.3578C228.725 52.3578 228.061 52.66 227.648 53.2646C227.241 53.8691 227.037 54.7358 227.037 55.8646ZM242.185 50.5812C242.622 50.5812 242.983 50.612 243.267 50.6737L243.054 52.7001C242.746 52.6261 242.425 52.5891 242.092 52.5891C241.222 52.5891 240.516 52.8728 239.973 53.4404C239.436 54.0079 239.168 54.745 239.168 55.6518V61H236.994V50.7663H238.696L238.983 52.5706H239.094C239.433 51.9599 239.874 51.4757 240.417 51.1179C240.966 50.7601 241.555 50.5812 242.185 50.5812ZM252.048 58.0853C252.048 59.0846 251.684 59.8526 250.956 60.3893C250.228 60.9198 249.186 61.1851 247.829 61.1851C246.466 61.1851 245.371 60.9784 244.544 60.5651V58.6868C245.747 59.2419 246.866 59.5195 247.903 59.5195C249.241 59.5195 249.911 59.1155 249.911 58.3074C249.911 58.0483 249.837 57.8324 249.689 57.6597C249.541 57.487 249.297 57.3081 248.958 57.123C248.618 56.938 248.146 56.7282 247.542 56.4938C246.364 56.0373 245.565 55.5809 245.145 55.1244C244.732 54.6679 244.526 54.0757 244.526 53.3478C244.526 52.4719 244.877 51.7933 245.58 51.3122C246.29 50.8249 247.252 50.5812 248.467 50.5812C249.67 50.5812 250.808 50.8249 251.882 51.3122L251.178 52.95C250.074 52.4935 249.146 52.2652 248.393 52.2652C247.246 52.2652 246.672 52.5922 246.672 53.246C246.672 53.5668 246.82 53.8382 247.116 54.0603C247.419 54.2824 248.072 54.5877 249.078 54.9763C249.923 55.3033 250.537 55.6025 250.919 55.8739C251.302 56.1453 251.585 56.4599 251.771 56.8177C251.956 57.1693 252.048 57.5918 252.048 58.0853Z" class="path-1"/> -<rect x="36.5" y="299.5" width="116" height="44" rx="2.5" class="rect-3"/> -<rect x="36.5" y="299.5" width="116" height="44" rx="2.5" class="rect-4"/> -<path d="M71.3906 321.391H72.6875C73.5573 321.391 74.1875 321.229 74.5781 320.906C74.9688 320.583 75.1641 320.104 75.1641 319.469C75.1641 318.823 74.9531 318.359 74.5312 318.078C74.1094 317.797 73.474 317.656 72.625 317.656H71.3906V321.391ZM71.3906 322.938V327.5H69.5234V316.078H72.75C74.224 316.078 75.3151 316.354 76.0234 316.906C76.7318 317.458 77.0859 318.292 77.0859 319.406C77.0859 320.828 76.3464 321.841 74.8672 322.445L78.0938 327.5H75.9688L73.2344 322.938H71.3906ZM83.3359 327.656C81.9922 327.656 80.9401 327.266 80.1797 326.484C79.4245 325.698 79.0469 324.617 79.0469 323.242C79.0469 321.831 79.3984 320.721 80.1016 319.914C80.8047 319.107 81.7708 318.703 83 318.703C84.1406 318.703 85.0417 319.049 85.7031 319.742C86.3646 320.435 86.6953 321.388 86.6953 322.602V323.594H80.9375C80.9635 324.432 81.1901 325.078 81.6172 325.531C82.0443 325.979 82.6458 326.203 83.4219 326.203C83.9323 326.203 84.4062 326.156 84.8438 326.062C85.2865 325.964 85.7604 325.802 86.2656 325.578V327.07C85.8177 327.284 85.3646 327.435 84.9062 327.523C84.4479 327.612 83.9245 327.656 83.3359 327.656ZM83 320.094C82.4167 320.094 81.9479 320.279 81.5938 320.648C81.2448 321.018 81.0365 321.557 80.9688 322.266H84.8906C84.8802 321.552 84.7083 321.013 84.375 320.648C84.0417 320.279 83.5833 320.094 83 320.094ZM92 326.172C92.4479 326.172 92.8958 326.102 93.3438 325.961V327.344C93.1406 327.432 92.8776 327.505 92.5547 327.562C92.237 327.625 91.9062 327.656 91.5625 327.656C89.8229 327.656 88.9531 326.74 88.9531 324.906V320.25H87.7734V319.438L89.0391 318.766L89.6641 316.938H90.7969V318.859H93.2578V320.25H90.7969V324.875C90.7969 325.318 90.9062 325.646 91.125 325.859C91.349 326.068 91.6406 326.172 92 326.172ZM101.172 327.5L100.914 326.367H100.82C100.565 326.768 100.201 327.083 99.7266 327.312C99.2578 327.542 98.7214 327.656 98.1172 327.656C97.0703 327.656 96.2891 327.396 95.7734 326.875C95.2578 326.354 95 325.565 95 324.508V318.859H96.8516V324.188C96.8516 324.849 96.987 325.346 97.2578 325.68C97.5286 326.008 97.9531 326.172 98.5312 326.172C99.3021 326.172 99.8672 325.943 100.227 325.484C100.591 325.021 100.773 324.247 100.773 323.164V318.859H102.617V327.5H101.172ZM109.617 318.703C109.987 318.703 110.292 318.729 110.531 318.781L110.352 320.492C110.091 320.43 109.82 320.398 109.539 320.398C108.805 320.398 108.208 320.638 107.75 321.117C107.297 321.596 107.07 322.219 107.07 322.984V327.5H105.234V318.859H106.672L106.914 320.383H107.008C107.294 319.867 107.667 319.458 108.125 319.156C108.589 318.854 109.086 318.703 109.617 318.703ZM119.742 327.5H117.898V322.188C117.898 321.521 117.763 321.023 117.492 320.695C117.227 320.367 116.802 320.203 116.219 320.203C115.443 320.203 114.875 320.432 114.516 320.891C114.156 321.349 113.977 322.117 113.977 323.195V327.5H112.141V318.859H113.578L113.836 319.992H113.93C114.19 319.581 114.56 319.263 115.039 319.039C115.518 318.815 116.049 318.703 116.633 318.703C118.706 318.703 119.742 319.758 119.742 321.867V327.5Z" class="path-2"/> -<rect x="177" y="299" width="133" height="45" rx="3" class="rect-5"/> -<path d="M236.094 327.5H233.805L228.188 318.398H228.125L228.164 318.906C228.237 319.875 228.273 320.76 228.273 321.562V327.5H226.578V316.078H228.844L234.445 325.133H234.492C234.482 325.013 234.461 324.578 234.43 323.828C234.398 323.073 234.383 322.484 234.383 322.062V316.078H236.094V327.5ZM242.688 327.656C241.344 327.656 240.292 327.266 239.531 326.484C238.776 325.698 238.398 324.617 238.398 323.242C238.398 321.831 238.75 320.721 239.453 319.914C240.156 319.107 241.122 318.703 242.352 318.703C243.492 318.703 244.393 319.049 245.055 319.742C245.716 320.435 246.047 321.388 246.047 322.602V323.594H240.289C240.315 324.432 240.542 325.078 240.969 325.531C241.396 325.979 241.997 326.203 242.773 326.203C243.284 326.203 243.758 326.156 244.195 326.062C244.638 325.964 245.112 325.802 245.617 325.578V327.07C245.169 327.284 244.716 327.435 244.258 327.523C243.799 327.612 243.276 327.656 242.688 327.656ZM242.352 320.094C241.768 320.094 241.299 320.279 240.945 320.648C240.596 321.018 240.388 321.557 240.32 322.266H244.242C244.232 321.552 244.06 321.013 243.727 320.648C243.393 320.279 242.935 320.094 242.352 320.094ZM250.055 323.086L247.156 318.859H249.25L251.219 321.883L253.203 318.859H255.281L252.375 323.086L255.43 327.5H253.352L251.219 324.266L249.094 327.5H247.016L250.055 323.086ZM260.164 326.172C260.612 326.172 261.06 326.102 261.508 325.961V327.344C261.305 327.432 261.042 327.505 260.719 327.562C260.401 327.625 260.07 327.656 259.727 327.656C257.987 327.656 257.117 326.74 257.117 324.906V320.25H255.938V319.438L257.203 318.766L257.828 316.938H258.961V318.859H261.422V320.25H258.961V324.875C258.961 325.318 259.07 325.646 259.289 325.859C259.513 326.068 259.805 326.172 260.164 326.172Z" class="path-3"/> -<rect x="36.5" y="99.5" width="273" height="44" rx="2.5" class="rect-6"/> -<path d="M59.8594 118.266C59.8594 118.995 59.6536 119.591 59.2422 120.055C58.8359 120.518 58.2578 120.828 57.5078 120.984V121.047C58.4245 121.161 59.1042 121.453 59.5469 121.922C59.9896 122.391 60.2109 123.005 60.2109 123.766C60.2109 124.854 59.8333 125.693 59.0781 126.281C58.3229 126.865 57.25 127.156 55.8594 127.156C55.2552 127.156 54.7005 127.109 54.1953 127.016C53.6953 126.927 53.2083 126.768 52.7344 126.539V125.305C53.2292 125.549 53.7552 125.737 54.3125 125.867C54.875 125.992 55.4062 126.055 55.9062 126.055C57.8802 126.055 58.8672 125.281 58.8672 123.734C58.8672 122.349 57.7786 121.656 55.6016 121.656H54.4766V120.539H55.6172C56.5078 120.539 57.2135 120.344 57.7344 119.953C58.2552 119.557 58.5156 119.01 58.5156 118.312C58.5156 117.755 58.3229 117.318 57.9375 117C57.5573 116.682 57.0391 116.523 56.3828 116.523C55.8828 116.523 55.4115 116.591 54.9688 116.727C54.526 116.862 54.0208 117.112 53.4531 117.477L52.7969 116.602C53.2656 116.232 53.8047 115.943 54.4141 115.734C55.0286 115.521 55.6745 115.414 56.3516 115.414C57.4609 115.414 58.3229 115.669 58.9375 116.18C59.5521 116.685 59.8594 117.38 59.8594 118.266Z" class="path-4"/> -<path d="M293.597 117.25H282.403C282.067 117.25 281.879 117.605 282.087 117.847L287.685 124.337C287.845 124.523 288.153 124.523 288.315 124.337L293.913 117.847C294.121 117.605 293.933 117.25 293.597 117.25Z" class="path-5"/> -<g filter="url(#filter1_d_21428_72841)"> -<rect x="36" y="207" width="274" height="45" rx="3" class="rect-7"/> -<rect x="36.5" y="207.5" width="273" height="44" rx="2.5" class="rect-8"/> -</g> -<path d="M64.4455 229.15L59.7243 232.05L55 229.15L59.7243 221L64.4455 229.15ZM59.7243 232.981L55 230.081L59.7243 237L64.4486 230.081L59.7243 232.981Z" class="path-6"/> -<path d="M84.4453 229.289C84.4453 231.273 84.125 232.747 83.4844 233.711C82.849 234.674 81.875 235.156 80.5625 235.156C79.2917 235.156 78.3281 234.659 77.6719 233.664C77.0156 232.669 76.6875 231.211 76.6875 229.289C76.6875 227.273 77.0052 225.789 77.6406 224.836C78.2812 223.878 79.2552 223.398 80.5625 223.398C81.8385 223.398 82.8047 223.898 83.4609 224.898C84.1172 225.898 84.4453 227.362 84.4453 229.289ZM78.5469 229.289C78.5469 230.846 78.7057 231.958 79.0234 232.625C79.3464 233.292 79.8594 233.625 80.5625 233.625C81.2656 233.625 81.7786 233.286 82.1016 232.609C82.4297 231.932 82.5938 230.826 82.5938 229.289C82.5938 227.758 82.4297 226.651 82.1016 225.969C81.7786 225.281 81.2656 224.938 80.5625 224.938C79.8594 224.938 79.3464 225.273 79.0234 225.945C78.7057 226.617 78.5469 227.732 78.5469 229.289ZM86.1797 234.023C86.1797 233.643 86.2786 233.352 86.4766 233.148C86.6745 232.945 86.9609 232.844 87.3359 232.844C87.7161 232.844 88.0052 232.951 88.2031 233.164C88.401 233.372 88.5 233.659 88.5 234.023C88.5 234.393 88.3984 234.688 88.1953 234.906C87.9974 235.12 87.7109 235.227 87.3359 235.227C86.9609 235.227 86.6745 235.12 86.4766 234.906C86.2786 234.693 86.1797 234.398 86.1797 234.023ZM97.9922 229.289C97.9922 231.273 97.6719 232.747 97.0312 233.711C96.3958 234.674 95.4219 235.156 94.1094 235.156C92.8385 235.156 91.875 234.659 91.2188 233.664C90.5625 232.669 90.2344 231.211 90.2344 229.289C90.2344 227.273 90.5521 225.789 91.1875 224.836C91.8281 223.878 92.8021 223.398 94.1094 223.398C95.3854 223.398 96.3516 223.898 97.0078 224.898C97.6641 225.898 97.9922 227.362 97.9922 229.289ZM92.0938 229.289C92.0938 230.846 92.2526 231.958 92.5703 232.625C92.8932 233.292 93.4062 233.625 94.1094 233.625C94.8125 233.625 95.3255 233.286 95.6484 232.609C95.9766 231.932 96.1406 230.826 96.1406 229.289C96.1406 227.758 95.9766 226.651 95.6484 225.969C95.3255 225.281 94.8125 224.938 94.1094 224.938C93.4062 224.938 92.8932 225.273 92.5703 225.945C92.2526 226.617 92.0938 227.732 92.0938 229.289ZM107.133 229.289C107.133 231.273 106.812 232.747 106.172 233.711C105.536 234.674 104.562 235.156 103.25 235.156C101.979 235.156 101.016 234.659 100.359 233.664C99.7031 232.669 99.375 231.211 99.375 229.289C99.375 227.273 99.6927 225.789 100.328 224.836C100.969 223.878 101.943 223.398 103.25 223.398C104.526 223.398 105.492 223.898 106.148 224.898C106.805 225.898 107.133 227.362 107.133 229.289ZM101.234 229.289C101.234 230.846 101.393 231.958 101.711 232.625C102.034 233.292 102.547 233.625 103.25 233.625C103.953 233.625 104.466 233.286 104.789 232.609C105.117 231.932 105.281 230.826 105.281 229.289C105.281 227.758 105.117 226.651 104.789 225.969C104.466 225.281 103.953 224.938 103.25 224.938C102.547 224.938 102.034 225.273 101.711 225.945C101.393 226.617 101.234 227.732 101.234 229.289ZM117.75 235H115.602L112.742 230.328L109.859 235H107.859L111.648 229.078L108.102 223.578H110.18L112.82 227.898L115.461 223.578H117.477L113.906 229.109L117.75 235ZM129.906 235H123.445V223.578H129.906V225.156H125.312V228.266H129.617V229.828H125.312V233.414H129.906V235ZM136.328 235H134.461V225.18H131.102V223.578H139.688V225.18H136.328V235ZM150.453 235H148.578V229.852H143.312V235H141.445V223.578H143.312V228.25H148.578V223.578H150.453V235Z" class="path-7"/> -<path d="M43.6562 191L42.4121 187.821H38.4062L37.1758 191H36L39.9512 180.965H40.9287L44.8594 191H43.6562ZM42.0498 186.775L40.8877 183.679C40.7373 183.287 40.5824 182.806 40.4229 182.236C40.3226 182.674 40.179 183.155 39.9922 183.679L38.8164 186.775H42.0498ZM49.4805 183.371C49.8132 183.371 50.1117 183.398 50.376 183.453L50.2188 184.506C49.9089 184.438 49.6354 184.403 49.3984 184.403C48.7923 184.403 48.2728 184.649 47.8398 185.142C47.4115 185.634 47.1973 186.247 47.1973 186.98V191H46.0625V183.508H46.999L47.1289 184.896H47.1836C47.4616 184.408 47.7965 184.032 48.1885 183.768C48.5804 183.503 49.0111 183.371 49.4805 183.371ZM55.2637 183.385C56.248 183.385 57.0114 183.722 57.5537 184.396C58.1006 185.066 58.374 186.017 58.374 187.247C58.374 188.478 58.0983 189.435 57.5469 190.118C57 190.797 56.2389 191.137 55.2637 191.137C54.776 191.137 54.3294 191.048 53.9238 190.87C53.5228 190.688 53.1855 190.41 52.9121 190.036H52.8301L52.5908 191H51.7773V180.363H52.9121V182.947C52.9121 183.526 52.8939 184.046 52.8574 184.506H52.9121C53.4408 183.758 54.2246 183.385 55.2637 183.385ZM55.0996 184.335C54.3249 184.335 53.7666 184.558 53.4248 185.005C53.083 185.447 52.9121 186.194 52.9121 187.247C52.9121 188.3 53.0876 189.054 53.4385 189.51C53.7894 189.961 54.3522 190.187 55.127 190.187C55.8242 190.187 56.3438 189.934 56.6855 189.428C57.0273 188.917 57.1982 188.186 57.1982 187.233C57.1982 186.258 57.0273 185.531 56.6855 185.053C56.3438 184.574 55.8151 184.335 55.0996 184.335ZM61.498 191H60.3633V183.508H61.498V191ZM60.2676 181.478C60.2676 181.218 60.3314 181.029 60.459 180.91C60.5866 180.787 60.7461 180.726 60.9375 180.726C61.1198 180.726 61.277 180.787 61.4092 180.91C61.5413 181.033 61.6074 181.222 61.6074 181.478C61.6074 181.733 61.5413 181.924 61.4092 182.052C61.277 182.175 61.1198 182.236 60.9375 182.236C60.7461 182.236 60.5866 182.175 60.459 182.052C60.3314 181.924 60.2676 181.733 60.2676 181.478ZM66.3242 190.2C66.5247 190.2 66.7184 190.187 66.9053 190.159C67.0921 190.127 67.2402 190.095 67.3496 190.063V190.932C67.2266 190.991 67.0443 191.039 66.8027 191.075C66.5658 191.116 66.3516 191.137 66.1602 191.137C64.7109 191.137 63.9863 190.373 63.9863 188.847V184.39H62.9131V183.843L63.9863 183.371L64.4648 181.771H65.1211V183.508H67.2949V184.39H65.1211V188.799C65.1211 189.25 65.2282 189.596 65.4424 189.838C65.6566 190.079 65.9505 190.2 66.3242 190.2ZM72.2715 183.371C72.6042 183.371 72.9027 183.398 73.167 183.453L73.0098 184.506C72.6999 184.438 72.4264 184.403 72.1895 184.403C71.5833 184.403 71.0638 184.649 70.6309 185.142C70.2025 185.634 69.9883 186.247 69.9883 186.98V191H68.8535V183.508H69.79L69.9199 184.896H69.9746C70.2526 184.408 70.5876 184.032 70.9795 183.768C71.3714 183.503 71.8021 183.371 72.2715 183.371ZM79.1758 191L78.9502 189.934H78.8955C78.5218 190.403 78.1481 190.722 77.7744 190.891C77.4053 191.055 76.9427 191.137 76.3867 191.137C75.6439 191.137 75.0605 190.945 74.6367 190.562C74.2174 190.18 74.0078 189.635 74.0078 188.929C74.0078 187.416 75.2178 186.623 77.6377 186.55L78.9092 186.509V186.044C78.9092 185.456 78.7816 185.023 78.5264 184.745C78.2757 184.463 77.8724 184.321 77.3164 184.321C76.6921 184.321 75.9857 184.513 75.1973 184.896L74.8486 184.027C75.2178 183.827 75.6211 183.67 76.0586 183.556C76.5007 183.442 76.9427 183.385 77.3848 183.385C78.278 183.385 78.9388 183.583 79.3672 183.979C79.8001 184.376 80.0166 185.012 80.0166 185.887V191H79.1758ZM76.6123 190.2C77.3187 190.2 77.8724 190.007 78.2734 189.619C78.679 189.232 78.8818 188.689 78.8818 187.992V187.315L77.7471 187.363C76.8447 187.395 76.193 187.536 75.792 187.787C75.3955 188.033 75.1973 188.418 75.1973 188.942C75.1973 189.353 75.3203 189.665 75.5664 189.879C75.8171 190.093 76.1657 190.2 76.6123 190.2ZM84.7812 190.2C84.9818 190.2 85.1755 190.187 85.3623 190.159C85.5492 190.127 85.6973 190.095 85.8066 190.063V190.932C85.6836 190.991 85.5013 191.039 85.2598 191.075C85.0228 191.116 84.8086 191.137 84.6172 191.137C83.168 191.137 82.4434 190.373 82.4434 188.847V184.39H81.3701V183.843L82.4434 183.371L82.9219 181.771H83.5781V183.508H85.752V184.39H83.5781V188.799C83.5781 189.25 83.6852 189.596 83.8994 189.838C84.1136 190.079 84.4076 190.2 84.7812 190.2ZM88.4453 191H87.3105V183.508H88.4453V191ZM87.2148 181.478C87.2148 181.218 87.2786 181.029 87.4062 180.91C87.5339 180.787 87.6934 180.726 87.8848 180.726C88.0671 180.726 88.2243 180.787 88.3564 180.91C88.4886 181.033 88.5547 181.222 88.5547 181.478C88.5547 181.733 88.4886 181.924 88.3564 182.052C88.2243 182.175 88.0671 182.236 87.8848 182.236C87.6934 182.236 87.5339 182.175 87.4062 182.052C87.2786 181.924 87.2148 181.733 87.2148 181.478ZM97.3184 187.247C97.3184 188.468 97.0107 189.423 96.3955 190.111C95.7803 190.795 94.9303 191.137 93.8457 191.137C93.1758 191.137 92.5811 190.979 92.0615 190.665C91.542 190.351 91.141 189.899 90.8584 189.312C90.5758 188.724 90.4346 188.035 90.4346 187.247C90.4346 186.026 90.7399 185.076 91.3506 184.396C91.9613 183.713 92.8089 183.371 93.8936 183.371C94.9417 183.371 95.7734 183.72 96.3887 184.417C97.0085 185.114 97.3184 186.058 97.3184 187.247ZM91.6104 187.247C91.6104 188.204 91.8018 188.933 92.1846 189.435C92.5674 189.936 93.1302 190.187 93.873 190.187C94.6159 190.187 95.1787 189.938 95.5615 189.441C95.9489 188.94 96.1426 188.209 96.1426 187.247C96.1426 186.295 95.9489 185.572 95.5615 185.08C95.1787 184.583 94.6113 184.335 93.8594 184.335C93.1165 184.335 92.556 184.579 92.1777 185.066C91.7995 185.554 91.6104 186.281 91.6104 187.247ZM104.441 191V186.153C104.441 185.543 104.302 185.087 104.024 184.786C103.746 184.485 103.311 184.335 102.719 184.335C101.935 184.335 101.361 184.547 100.996 184.971C100.632 185.395 100.449 186.094 100.449 187.069V191H99.3145V183.508H100.237L100.422 184.533H100.477C100.709 184.164 101.035 183.879 101.454 183.679C101.873 183.474 102.34 183.371 102.855 183.371C103.758 183.371 104.437 183.59 104.893 184.027C105.348 184.46 105.576 185.155 105.576 186.112V191H104.441ZM114.545 191.137C113.46 191.137 112.619 190.804 112.022 190.139C111.43 189.469 111.134 188.523 111.134 187.302C111.134 186.049 111.435 185.08 112.036 184.396C112.642 183.713 113.504 183.371 114.62 183.371C114.98 183.371 115.34 183.41 115.7 183.487C116.06 183.565 116.343 183.656 116.548 183.761L116.199 184.725C115.949 184.624 115.675 184.542 115.379 184.479C115.083 184.41 114.821 184.376 114.593 184.376C113.071 184.376 112.31 185.347 112.31 187.288C112.31 188.209 112.494 188.915 112.863 189.407C113.237 189.899 113.788 190.146 114.518 190.146C115.142 190.146 115.782 190.011 116.438 189.742V190.747C115.937 191.007 115.306 191.137 114.545 191.137ZM124.689 187.247C124.689 188.468 124.382 189.423 123.767 190.111C123.151 190.795 122.301 191.137 121.217 191.137C120.547 191.137 119.952 190.979 119.433 190.665C118.913 190.351 118.512 189.899 118.229 189.312C117.947 188.724 117.806 188.035 117.806 187.247C117.806 186.026 118.111 185.076 118.722 184.396C119.332 183.713 120.18 183.371 121.265 183.371C122.313 183.371 123.145 183.72 123.76 184.417C124.38 185.114 124.689 186.058 124.689 187.247ZM118.981 187.247C118.981 188.204 119.173 188.933 119.556 189.435C119.938 189.936 120.501 190.187 121.244 190.187C121.987 190.187 122.55 189.938 122.933 189.441C123.32 188.94 123.514 188.209 123.514 187.247C123.514 186.295 123.32 185.572 122.933 185.08C122.55 184.583 121.982 184.335 121.23 184.335C120.488 184.335 119.927 184.579 119.549 185.066C119.171 185.554 118.981 186.281 118.981 187.247ZM131.519 188.956C131.519 189.653 131.259 190.191 130.739 190.569C130.22 190.948 129.491 191.137 128.552 191.137C127.558 191.137 126.784 190.979 126.228 190.665V189.612C126.588 189.795 126.973 189.938 127.383 190.043C127.798 190.148 128.196 190.2 128.579 190.2C129.172 190.2 129.627 190.107 129.946 189.92C130.265 189.729 130.425 189.439 130.425 189.052C130.425 188.76 130.297 188.512 130.042 188.307C129.791 188.097 129.299 187.851 128.565 187.568C127.868 187.309 127.371 187.083 127.075 186.892C126.784 186.696 126.565 186.475 126.419 186.229C126.278 185.982 126.207 185.688 126.207 185.347C126.207 184.736 126.455 184.255 126.952 183.904C127.449 183.549 128.13 183.371 128.996 183.371C129.803 183.371 130.591 183.535 131.361 183.863L130.958 184.786C130.206 184.476 129.525 184.321 128.914 184.321C128.376 184.321 127.971 184.406 127.697 184.574C127.424 184.743 127.287 184.975 127.287 185.271C127.287 185.472 127.337 185.643 127.438 185.784C127.542 185.925 127.709 186.06 127.937 186.188C128.164 186.315 128.602 186.5 129.249 186.741C130.138 187.065 130.737 187.391 131.047 187.719C131.361 188.047 131.519 188.459 131.519 188.956ZM135.791 190.2C135.992 190.2 136.185 190.187 136.372 190.159C136.559 190.127 136.707 190.095 136.816 190.063V190.932C136.693 190.991 136.511 191.039 136.27 191.075C136.033 191.116 135.818 191.137 135.627 191.137C134.178 191.137 133.453 190.373 133.453 188.847V184.39H132.38V183.843L133.453 183.371L133.932 181.771H134.588V183.508H136.762V184.39H134.588V188.799C134.588 189.25 134.695 189.596 134.909 189.838C135.123 190.079 135.417 190.2 135.791 190.2Z" class="path-8"/> -<defs> -<filter id="filter0_d_21428_72841" x="0.682432" y="0.227477" width="344.635" height="402.635" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.54505"/> -<feGaussianBlur stdDeviation="1.15878"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_21428_72841"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_21428_72841" result="shape"/> -</filter> -<filter id="filter1_d_21428_72841" x="33" y="206" width="280" height="51" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="2"/> -<feGaussianBlur stdDeviation="1.5"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_21428_72841"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_21428_72841" result="shape"/> -</filter> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/dispute-resolver/parties.svg b/web/src/assets/svgs/mini-guides/dispute-resolver/parties.svg deleted file mode 100644 index 9cff755b8..000000000 --- a/web/src/assets/svgs/mini-guides/dispute-resolver/parties.svg +++ /dev/null @@ -1,29 +0,0 @@ -<svg width="346" height="403" viewBox="0 0 346 403" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g filter="url(#filter0_d_21428_72880)"> -<rect x="3" y="1" width="340" height="398" rx="2.31757" class="rect-1"/> -<rect x="3.38626" y="1.38626" width="339.227" height="397.227" rx="1.93131" stroke-width="0.772523" class="rect-2"/> -</g> -<rect x="36.5" y="52.5" width="273" height="44" rx="2.5" class="rect-3"/> -<path d="M60.75 79L59.3281 75.3672H54.75L53.3438 79H52L56.5156 67.5312H57.6328L62.125 79H60.75ZM58.9141 74.1719L57.5859 70.6328C57.4141 70.1849 57.237 69.6354 57.0547 68.9844C56.9401 69.4844 56.776 70.0339 56.5625 70.6328L55.2188 74.1719H58.9141ZM64.7969 79H63.5V66.8438H64.7969V79ZM68.8438 79H67.5469V70.4375H68.8438V79ZM67.4375 68.1172C67.4375 67.8203 67.5104 67.6042 67.6562 67.4688C67.8021 67.3281 67.9844 67.2578 68.2031 67.2578C68.4115 67.2578 68.5911 67.3281 68.7422 67.4688C68.8932 67.6094 68.9688 67.8255 68.9688 68.1172C68.9688 68.4089 68.8932 68.6276 68.7422 68.7734C68.5911 68.9141 68.4115 68.9844 68.2031 68.9844C67.9844 68.9844 67.8021 68.9141 67.6562 68.7734C67.5104 68.6276 67.4375 68.4089 67.4375 68.1172ZM75.0156 79.1562C73.776 79.1562 72.8151 78.776 72.1328 78.0156C71.4557 77.25 71.1172 76.1693 71.1172 74.7734C71.1172 73.3411 71.4609 72.2344 72.1484 71.4531C72.8411 70.6719 73.8255 70.2812 75.1016 70.2812C75.513 70.2812 75.9245 70.3255 76.3359 70.4141C76.7474 70.5026 77.0703 70.6068 77.3047 70.7266L76.9062 71.8281C76.6198 71.7135 76.3073 71.6198 75.9688 71.5469C75.6302 71.4688 75.3307 71.4297 75.0703 71.4297C73.3307 71.4297 72.4609 72.5391 72.4609 74.7578C72.4609 75.8099 72.6719 76.6172 73.0938 77.1797C73.5208 77.7422 74.151 78.0234 74.9844 78.0234C75.6979 78.0234 76.4297 77.8698 77.1797 77.5625V78.7109C76.6068 79.0078 75.8854 79.1562 75.0156 79.1562ZM82.8359 79.1562C81.5703 79.1562 80.5703 78.7708 79.8359 78C79.1068 77.2292 78.7422 76.1589 78.7422 74.7891C78.7422 73.4089 79.0807 72.3125 79.7578 71.5C80.4401 70.6875 81.3542 70.2812 82.5 70.2812C83.5729 70.2812 84.4219 70.6354 85.0469 71.3438C85.6719 72.0469 85.9844 72.9766 85.9844 74.1328V74.9531H80.0859C80.112 75.9583 80.3646 76.7214 80.8438 77.2422C81.3281 77.763 82.0078 78.0234 82.8828 78.0234C83.8047 78.0234 84.7161 77.8307 85.6172 77.4453V78.6016C85.1589 78.7995 84.724 78.9401 84.3125 79.0234C83.9062 79.112 83.4141 79.1562 82.8359 79.1562ZM82.4844 71.3672C81.7969 71.3672 81.2474 71.5911 80.8359 72.0391C80.4297 72.487 80.1901 73.1068 80.1172 73.8984H84.5938C84.5938 73.0807 84.4115 72.4557 84.0469 72.0234C83.6823 71.5859 83.1615 71.3672 82.4844 71.3672Z" class="path-1"/> -<path d="M43.7109 29.918C43.7109 30.9297 43.3646 31.709 42.6719 32.2559C41.9837 32.7982 40.9971 33.0693 39.7119 33.0693H38.5361V37H37.374V27.0059H39.9648C42.4622 27.0059 43.7109 27.9766 43.7109 29.918ZM38.5361 32.0713H39.582C40.612 32.0713 41.3571 31.9049 41.8174 31.5723C42.2777 31.2396 42.5078 30.7064 42.5078 29.9727C42.5078 29.3118 42.2913 28.8197 41.8584 28.4961C41.4255 28.1725 40.751 28.0107 39.835 28.0107H38.5361V32.0713ZM50.2461 37L50.0205 35.9336H49.9658C49.5921 36.403 49.2184 36.722 48.8447 36.8906C48.4756 37.0547 48.013 37.1367 47.457 37.1367C46.7142 37.1367 46.1309 36.9453 45.707 36.5625C45.2878 36.1797 45.0781 35.6351 45.0781 34.9287C45.0781 33.4157 46.2881 32.6227 48.708 32.5498L49.9795 32.5088V32.0439C49.9795 31.4561 49.8519 31.0231 49.5967 30.7451C49.346 30.4626 48.9427 30.3213 48.3867 30.3213C47.7624 30.3213 47.056 30.5127 46.2676 30.8955L45.9189 30.0273C46.2881 29.8268 46.6914 29.6696 47.1289 29.5557C47.571 29.4417 48.013 29.3848 48.4551 29.3848C49.3483 29.3848 50.0091 29.583 50.4375 29.9795C50.8704 30.376 51.0869 31.0117 51.0869 31.8867V37H50.2461ZM47.6826 36.2002C48.389 36.2002 48.9427 36.0065 49.3438 35.6191C49.7493 35.2318 49.9521 34.6895 49.9521 33.9922V33.3154L48.8174 33.3633C47.915 33.3952 47.2633 33.5365 46.8623 33.7871C46.4658 34.0332 46.2676 34.4183 46.2676 34.9424C46.2676 35.3525 46.3906 35.6647 46.6367 35.8789C46.8874 36.0931 47.236 36.2002 47.6826 36.2002ZM56.8496 29.3711C57.1823 29.3711 57.4808 29.3984 57.7451 29.4531L57.5879 30.5059C57.278 30.4375 57.0046 30.4033 56.7676 30.4033C56.1615 30.4033 55.6419 30.6494 55.209 31.1416C54.7806 31.6338 54.5664 32.2467 54.5664 32.9805V37H53.4316V29.5078H54.3682L54.498 30.8955H54.5527C54.8307 30.4079 55.1657 30.0319 55.5576 29.7676C55.9495 29.5033 56.3802 29.3711 56.8496 29.3711ZM61.5664 36.2002C61.7669 36.2002 61.9606 36.1865 62.1475 36.1592C62.3343 36.1273 62.4824 36.0954 62.5918 36.0635V36.9316C62.4688 36.9909 62.2865 37.0387 62.0449 37.0752C61.8079 37.1162 61.5938 37.1367 61.4023 37.1367C59.9531 37.1367 59.2285 36.3734 59.2285 34.8467V30.3896H58.1553V29.8428L59.2285 29.3711L59.707 27.7715H60.3633V29.5078H62.5371V30.3896H60.3633V34.7988C60.3633 35.25 60.4704 35.5964 60.6846 35.8379C60.8988 36.0794 61.1927 36.2002 61.5664 36.2002ZM62.9062 29.5078H64.123L65.7637 33.7803C66.1237 34.7555 66.347 35.4596 66.4336 35.8926H66.4883C66.5475 35.6602 66.6706 35.2637 66.8574 34.7031C67.0488 34.138 67.6686 32.4062 68.7168 29.5078H69.9336L66.7139 38.0391C66.3949 38.8822 66.0212 39.4792 65.5928 39.8301C65.1689 40.1855 64.6471 40.3633 64.0273 40.3633C63.681 40.3633 63.3392 40.3245 63.002 40.2471V39.3379C63.2526 39.3926 63.5329 39.4199 63.8428 39.4199C64.6221 39.4199 65.1781 38.9824 65.5107 38.1074L65.9277 37.041L62.9062 29.5078ZM78.4717 37H77.3643V29.877C77.3643 29.2845 77.3825 28.724 77.4189 28.1953C77.3232 28.291 77.2161 28.3913 77.0977 28.4961C76.9792 28.6009 76.4368 29.0452 75.4707 29.8291L74.8691 29.0498L77.5146 27.0059H78.4717V37Z" class="path-2"/> -<rect x="36.5" y="143.5" width="273" height="44" rx="2.5" class="rect-4"/> -<path d="M60.75 170L59.3281 166.367H54.75L53.3438 170H52L56.5156 158.531H57.6328L62.125 170H60.75ZM58.9141 165.172L57.5859 161.633C57.4141 161.185 57.237 160.635 57.0547 159.984C56.9401 160.484 56.776 161.034 56.5625 161.633L55.2188 165.172H58.9141ZM64.7969 170H63.5V157.844H64.7969V170ZM68.8438 170H67.5469V161.438H68.8438V170ZM67.4375 159.117C67.4375 158.82 67.5104 158.604 67.6562 158.469C67.8021 158.328 67.9844 158.258 68.2031 158.258C68.4115 158.258 68.5911 158.328 68.7422 158.469C68.8932 158.609 68.9688 158.826 68.9688 159.117C68.9688 159.409 68.8932 159.628 68.7422 159.773C68.5911 159.914 68.4115 159.984 68.2031 159.984C67.9844 159.984 67.8021 159.914 67.6562 159.773C67.5104 159.628 67.4375 159.409 67.4375 159.117ZM75.0156 170.156C73.776 170.156 72.8151 169.776 72.1328 169.016C71.4557 168.25 71.1172 167.169 71.1172 165.773C71.1172 164.341 71.4609 163.234 72.1484 162.453C72.8411 161.672 73.8255 161.281 75.1016 161.281C75.513 161.281 75.9245 161.326 76.3359 161.414C76.7474 161.503 77.0703 161.607 77.3047 161.727L76.9062 162.828C76.6198 162.714 76.3073 162.62 75.9688 162.547C75.6302 162.469 75.3307 162.43 75.0703 162.43C73.3307 162.43 72.4609 163.539 72.4609 165.758C72.4609 166.81 72.6719 167.617 73.0938 168.18C73.5208 168.742 74.151 169.023 74.9844 169.023C75.6979 169.023 76.4297 168.87 77.1797 168.562V169.711C76.6068 170.008 75.8854 170.156 75.0156 170.156ZM82.8359 170.156C81.5703 170.156 80.5703 169.771 79.8359 169C79.1068 168.229 78.7422 167.159 78.7422 165.789C78.7422 164.409 79.0807 163.312 79.7578 162.5C80.4401 161.688 81.3542 161.281 82.5 161.281C83.5729 161.281 84.4219 161.635 85.0469 162.344C85.6719 163.047 85.9844 163.977 85.9844 165.133V165.953H80.0859C80.112 166.958 80.3646 167.721 80.8438 168.242C81.3281 168.763 82.0078 169.023 82.8828 169.023C83.8047 169.023 84.7161 168.831 85.6172 168.445V169.602C85.1589 169.799 84.724 169.94 84.3125 170.023C83.9062 170.112 83.4141 170.156 82.8359 170.156ZM82.4844 162.367C81.7969 162.367 81.2474 162.591 80.8359 163.039C80.4297 163.487 80.1901 164.107 80.1172 164.898H84.5938C84.5938 164.081 84.4115 163.456 84.0469 163.023C83.6823 162.586 83.1615 162.367 82.4844 162.367ZM88.0156 169.172C88.0156 168.823 88.0938 168.56 88.25 168.383C88.4115 168.201 88.6406 168.109 88.9375 168.109C89.2396 168.109 89.474 168.201 89.6406 168.383C89.8125 168.56 89.8984 168.823 89.8984 169.172C89.8984 169.51 89.8125 169.771 89.6406 169.953C89.4688 170.135 89.2344 170.227 88.9375 170.227C88.6719 170.227 88.4505 170.146 88.2734 169.984C88.1016 169.818 88.0156 169.547 88.0156 169.172ZM96.0859 170.156C94.8203 170.156 93.8203 169.771 93.0859 169C92.3568 168.229 91.9922 167.159 91.9922 165.789C91.9922 164.409 92.3307 163.312 93.0078 162.5C93.6901 161.688 94.6042 161.281 95.75 161.281C96.8229 161.281 97.6719 161.635 98.2969 162.344C98.9219 163.047 99.2344 163.977 99.2344 165.133V165.953H93.3359C93.362 166.958 93.6146 167.721 94.0938 168.242C94.5781 168.763 95.2578 169.023 96.1328 169.023C97.0547 169.023 97.9661 168.831 98.8672 168.445V169.602C98.4089 169.799 97.974 169.94 97.5625 170.023C97.1562 170.112 96.6641 170.156 96.0859 170.156ZM95.7344 162.367C95.0469 162.367 94.4974 162.591 94.0859 163.039C93.6797 163.487 93.4401 164.107 93.3672 164.898H97.8438C97.8438 164.081 97.6615 163.456 97.2969 163.023C96.9323 162.586 96.4115 162.367 95.7344 162.367ZM104.219 169.086C104.448 169.086 104.669 169.07 104.883 169.039C105.096 169.003 105.266 168.966 105.391 168.93V169.922C105.25 169.99 105.042 170.044 104.766 170.086C104.495 170.133 104.25 170.156 104.031 170.156C102.375 170.156 101.547 169.284 101.547 167.539V162.445H100.32V161.82L101.547 161.281L102.094 159.453H102.844V161.438H105.328V162.445H102.844V167.484C102.844 168 102.966 168.396 103.211 168.672C103.456 168.948 103.792 169.086 104.219 169.086ZM112.969 170V164.461C112.969 163.763 112.81 163.242 112.492 162.898C112.174 162.555 111.677 162.383 111 162.383C110.099 162.383 109.44 162.628 109.023 163.117C108.612 163.607 108.406 164.409 108.406 165.523V170H107.109V157.844H108.406V161.523C108.406 161.966 108.385 162.333 108.344 162.625H108.422C108.677 162.214 109.039 161.891 109.508 161.656C109.982 161.417 110.521 161.297 111.125 161.297C112.172 161.297 112.956 161.547 113.477 162.047C114.003 162.542 114.266 163.331 114.266 164.414V170H112.969Z" class="path-3"/> -<path d="M43.7109 120.918C43.7109 121.93 43.3646 122.709 42.6719 123.256C41.9837 123.798 40.9971 124.069 39.7119 124.069H38.5361V128H37.374V118.006H39.9648C42.4622 118.006 43.7109 118.977 43.7109 120.918ZM38.5361 123.071H39.582C40.612 123.071 41.3571 122.905 41.8174 122.572C42.2777 122.24 42.5078 121.706 42.5078 120.973C42.5078 120.312 42.2913 119.82 41.8584 119.496C41.4255 119.173 40.751 119.011 39.835 119.011H38.5361V123.071ZM50.2461 128L50.0205 126.934H49.9658C49.5921 127.403 49.2184 127.722 48.8447 127.891C48.4756 128.055 48.013 128.137 47.457 128.137C46.7142 128.137 46.1309 127.945 45.707 127.562C45.2878 127.18 45.0781 126.635 45.0781 125.929C45.0781 124.416 46.2881 123.623 48.708 123.55L49.9795 123.509V123.044C49.9795 122.456 49.8519 122.023 49.5967 121.745C49.346 121.463 48.9427 121.321 48.3867 121.321C47.7624 121.321 47.056 121.513 46.2676 121.896L45.9189 121.027C46.2881 120.827 46.6914 120.67 47.1289 120.556C47.571 120.442 48.013 120.385 48.4551 120.385C49.3483 120.385 50.0091 120.583 50.4375 120.979C50.8704 121.376 51.0869 122.012 51.0869 122.887V128H50.2461ZM47.6826 127.2C48.389 127.2 48.9427 127.007 49.3438 126.619C49.7493 126.232 49.9521 125.689 49.9521 124.992V124.315L48.8174 124.363C47.915 124.395 47.2633 124.536 46.8623 124.787C46.4658 125.033 46.2676 125.418 46.2676 125.942C46.2676 126.353 46.3906 126.665 46.6367 126.879C46.8874 127.093 47.236 127.2 47.6826 127.2ZM56.8496 120.371C57.1823 120.371 57.4808 120.398 57.7451 120.453L57.5879 121.506C57.278 121.438 57.0046 121.403 56.7676 121.403C56.1615 121.403 55.6419 121.649 55.209 122.142C54.7806 122.634 54.5664 123.247 54.5664 123.98V128H53.4316V120.508H54.3682L54.498 121.896H54.5527C54.8307 121.408 55.1657 121.032 55.5576 120.768C55.9495 120.503 56.3802 120.371 56.8496 120.371ZM61.5664 127.2C61.7669 127.2 61.9606 127.187 62.1475 127.159C62.3343 127.127 62.4824 127.095 62.5918 127.063V127.932C62.4688 127.991 62.2865 128.039 62.0449 128.075C61.8079 128.116 61.5938 128.137 61.4023 128.137C59.9531 128.137 59.2285 127.373 59.2285 125.847V121.39H58.1553V120.843L59.2285 120.371L59.707 118.771H60.3633V120.508H62.5371V121.39H60.3633V125.799C60.3633 126.25 60.4704 126.596 60.6846 126.838C60.8988 127.079 61.1927 127.2 61.5664 127.2ZM62.9062 120.508H64.123L65.7637 124.78C66.1237 125.756 66.347 126.46 66.4336 126.893H66.4883C66.5475 126.66 66.6706 126.264 66.8574 125.703C67.0488 125.138 67.6686 123.406 68.7168 120.508H69.9336L66.7139 129.039C66.3949 129.882 66.0212 130.479 65.5928 130.83C65.1689 131.186 64.6471 131.363 64.0273 131.363C63.681 131.363 63.3392 131.325 63.002 131.247V130.338C63.2526 130.393 63.5329 130.42 63.8428 130.42C64.6221 130.42 65.1781 129.982 65.5107 129.107L65.9277 128.041L62.9062 120.508ZM78.4717 128H77.3643V120.877C77.3643 120.285 77.3825 119.724 77.4189 119.195C77.3232 119.291 77.2161 119.391 77.0977 119.496C76.9792 119.601 76.4368 120.045 75.4707 120.829L74.8691 120.05L77.5146 118.006H78.4717V128ZM92.8887 128L91.6445 124.821H87.6387L86.4082 128H85.2324L89.1836 117.965H90.1611L94.0918 128H92.8887ZM91.2822 123.775L90.1201 120.679C89.9697 120.287 89.8148 119.806 89.6553 119.236C89.555 119.674 89.4115 120.155 89.2246 120.679L88.0488 123.775H91.2822ZM100.395 126.995H100.333C99.8089 127.756 99.0251 128.137 97.9814 128.137C97.0016 128.137 96.2383 127.802 95.6914 127.132C95.1491 126.462 94.8779 125.509 94.8779 124.274C94.8779 123.039 95.1514 122.08 95.6982 121.396C96.2451 120.713 97.0062 120.371 97.9814 120.371C98.9977 120.371 99.777 120.74 100.319 121.479H100.408L100.36 120.938L100.333 120.412V117.363H101.468V128H100.545L100.395 126.995ZM98.125 127.187C98.8997 127.187 99.4603 126.977 99.8066 126.558C100.158 126.134 100.333 125.452 100.333 124.514V124.274C100.333 123.213 100.155 122.456 99.7998 122.005C99.4489 121.549 98.8861 121.321 98.1113 121.321C97.446 121.321 96.9355 121.581 96.5801 122.101C96.2292 122.616 96.0537 123.345 96.0537 124.288C96.0537 125.245 96.2292 125.967 96.5801 126.455C96.931 126.943 97.446 127.187 98.125 127.187ZM108.98 126.995H108.919C108.395 127.756 107.611 128.137 106.567 128.137C105.588 128.137 104.824 127.802 104.277 127.132C103.735 126.462 103.464 125.509 103.464 124.274C103.464 123.039 103.737 122.08 104.284 121.396C104.831 120.713 105.592 120.371 106.567 120.371C107.584 120.371 108.363 120.74 108.905 121.479H108.994L108.946 120.938L108.919 120.412V117.363H110.054V128H109.131L108.98 126.995ZM106.711 127.187C107.486 127.187 108.046 126.977 108.393 126.558C108.743 126.134 108.919 125.452 108.919 124.514V124.274C108.919 123.213 108.741 122.456 108.386 122.005C108.035 121.549 107.472 121.321 106.697 121.321C106.032 121.321 105.521 121.581 105.166 122.101C104.815 122.616 104.64 123.345 104.64 124.288C104.64 125.245 104.815 125.967 105.166 126.455C105.517 126.943 106.032 127.187 106.711 127.187ZM115.885 120.371C116.217 120.371 116.516 120.398 116.78 120.453L116.623 121.506C116.313 121.438 116.04 121.403 115.803 121.403C115.197 121.403 114.677 121.649 114.244 122.142C113.816 122.634 113.602 123.247 113.602 123.98V128H112.467V120.508H113.403L113.533 121.896H113.588C113.866 121.408 114.201 121.032 114.593 120.768C114.985 120.503 115.415 120.371 115.885 120.371ZM121.347 128.137C120.239 128.137 119.364 127.799 118.722 127.125C118.084 126.451 117.765 125.514 117.765 124.315C117.765 123.108 118.061 122.148 118.653 121.438C119.25 120.727 120.05 120.371 121.053 120.371C121.992 120.371 122.734 120.681 123.281 121.301C123.828 121.916 124.102 122.729 124.102 123.741V124.459H118.94C118.963 125.339 119.184 126.006 119.604 126.462C120.027 126.918 120.622 127.146 121.388 127.146C122.194 127.146 122.992 126.977 123.78 126.64V127.651C123.379 127.825 122.999 127.948 122.639 128.021C122.283 128.098 121.853 128.137 121.347 128.137ZM121.039 121.321C120.438 121.321 119.957 121.517 119.597 121.909C119.241 122.301 119.032 122.843 118.968 123.536H122.885C122.885 122.821 122.725 122.274 122.406 121.896C122.087 121.513 121.632 121.321 121.039 121.321ZM130.876 125.956C130.876 126.653 130.616 127.191 130.097 127.569C129.577 127.948 128.848 128.137 127.909 128.137C126.916 128.137 126.141 127.979 125.585 127.665V126.612C125.945 126.795 126.33 126.938 126.74 127.043C127.155 127.148 127.554 127.2 127.937 127.2C128.529 127.2 128.985 127.107 129.304 126.92C129.623 126.729 129.782 126.439 129.782 126.052C129.782 125.76 129.655 125.512 129.399 125.307C129.149 125.097 128.657 124.851 127.923 124.568C127.226 124.309 126.729 124.083 126.433 123.892C126.141 123.696 125.922 123.475 125.776 123.229C125.635 122.982 125.564 122.688 125.564 122.347C125.564 121.736 125.813 121.255 126.31 120.904C126.806 120.549 127.488 120.371 128.354 120.371C129.16 120.371 129.949 120.535 130.719 120.863L130.315 121.786C129.563 121.476 128.882 121.321 128.271 121.321C127.734 121.321 127.328 121.406 127.055 121.574C126.781 121.743 126.645 121.975 126.645 122.271C126.645 122.472 126.695 122.643 126.795 122.784C126.9 122.925 127.066 123.06 127.294 123.188C127.522 123.315 127.959 123.5 128.606 123.741C129.495 124.065 130.094 124.391 130.404 124.719C130.719 125.047 130.876 125.459 130.876 125.956ZM137.562 125.956C137.562 126.653 137.302 127.191 136.782 127.569C136.263 127.948 135.534 128.137 134.595 128.137C133.601 128.137 132.826 127.979 132.271 127.665V126.612C132.631 126.795 133.016 126.938 133.426 127.043C133.84 127.148 134.239 127.2 134.622 127.2C135.215 127.2 135.67 127.107 135.989 126.92C136.308 126.729 136.468 126.439 136.468 126.052C136.468 125.76 136.34 125.512 136.085 125.307C135.834 125.097 135.342 124.851 134.608 124.568C133.911 124.309 133.414 124.083 133.118 123.892C132.826 123.696 132.608 123.475 132.462 123.229C132.321 122.982 132.25 122.688 132.25 122.347C132.25 121.736 132.498 121.255 132.995 120.904C133.492 120.549 134.173 120.371 135.039 120.371C135.846 120.371 136.634 120.535 137.404 120.863L137.001 121.786C136.249 121.476 135.568 121.321 134.957 121.321C134.419 121.321 134.014 121.406 133.74 121.574C133.467 121.743 133.33 121.975 133.33 122.271C133.33 122.472 133.38 122.643 133.48 122.784C133.585 122.925 133.752 123.06 133.979 123.188C134.207 123.315 134.645 123.5 135.292 123.741C136.181 124.065 136.78 124.391 137.09 124.719C137.404 125.047 137.562 125.459 137.562 125.956Z" class="path-4"/> -<rect x="36.5" y="234.5" width="273" height="44" rx="2.5" class="rect-5"/> -<path d="M56.9922 261.156C55.7266 261.156 54.7266 260.771 53.9922 260C53.263 259.229 52.8984 258.159 52.8984 256.789C52.8984 255.409 53.237 254.312 53.9141 253.5C54.5964 252.688 55.5104 252.281 56.6562 252.281C57.7292 252.281 58.5781 252.635 59.2031 253.344C59.8281 254.047 60.1406 254.977 60.1406 256.133V256.953H54.2422C54.2682 257.958 54.5208 258.721 55 259.242C55.4844 259.763 56.1641 260.023 57.0391 260.023C57.9609 260.023 58.8724 259.831 59.7734 259.445V260.602C59.3151 260.799 58.8802 260.94 58.4688 261.023C58.0625 261.112 57.5703 261.156 56.9922 261.156ZM56.6406 253.367C55.9531 253.367 55.4036 253.591 54.9922 254.039C54.5859 254.487 54.3464 255.107 54.2734 255.898H58.75C58.75 255.081 58.5677 254.456 58.2031 254.023C57.8385 253.586 57.3177 253.367 56.6406 253.367ZM69.3672 252.438V253.258L67.7812 253.445C67.9271 253.628 68.0573 253.867 68.1719 254.164C68.2865 254.456 68.3438 254.786 68.3438 255.156C68.3438 255.995 68.0573 256.664 67.4844 257.164C66.9115 257.664 66.125 257.914 65.125 257.914C64.8698 257.914 64.6302 257.893 64.4062 257.852C63.8542 258.143 63.5781 258.51 63.5781 258.953C63.5781 259.188 63.6745 259.362 63.8672 259.477C64.0599 259.586 64.3906 259.641 64.8594 259.641H66.375C67.3021 259.641 68.013 259.836 68.5078 260.227C69.0078 260.617 69.2578 261.185 69.2578 261.93C69.2578 262.878 68.8776 263.599 68.1172 264.094C67.3568 264.594 66.2474 264.844 64.7891 264.844C63.6693 264.844 62.8047 264.635 62.1953 264.219C61.5911 263.802 61.2891 263.214 61.2891 262.453C61.2891 261.932 61.4557 261.482 61.7891 261.102C62.1224 260.721 62.5911 260.464 63.1953 260.328C62.9766 260.229 62.7917 260.076 62.6406 259.867C62.4948 259.659 62.4219 259.417 62.4219 259.141C62.4219 258.828 62.5052 258.555 62.6719 258.32C62.8385 258.086 63.1016 257.859 63.4609 257.641C63.0182 257.458 62.6562 257.148 62.375 256.711C62.099 256.273 61.9609 255.773 61.9609 255.211C61.9609 254.273 62.2422 253.552 62.8047 253.047C63.3672 252.536 64.1641 252.281 65.1953 252.281C65.6432 252.281 66.0469 252.333 66.4062 252.438H69.3672ZM62.5391 262.438C62.5391 262.901 62.7344 263.253 63.125 263.492C63.5156 263.732 64.0755 263.852 64.8047 263.852C65.8932 263.852 66.6979 263.688 67.2188 263.359C67.7448 263.036 68.0078 262.596 68.0078 262.039C68.0078 261.576 67.8646 261.253 67.5781 261.07C67.2917 260.893 66.7526 260.805 65.9609 260.805H64.4062C63.8177 260.805 63.3594 260.945 63.0312 261.227C62.7031 261.508 62.5391 261.911 62.5391 262.438ZM63.2422 255.18C63.2422 255.779 63.4115 256.232 63.75 256.539C64.0885 256.846 64.5599 257 65.1641 257C66.4297 257 67.0625 256.385 67.0625 255.156C67.0625 253.87 66.4219 253.227 65.1406 253.227C64.5312 253.227 64.0625 253.391 63.7344 253.719C63.4062 254.047 63.2422 254.534 63.2422 255.18ZM70.9375 260.172C70.9375 259.823 71.0156 259.56 71.1719 259.383C71.3333 259.201 71.5625 259.109 71.8594 259.109C72.1615 259.109 72.3958 259.201 72.5625 259.383C72.7344 259.56 72.8203 259.823 72.8203 260.172C72.8203 260.51 72.7344 260.771 72.5625 260.953C72.3906 261.135 72.1562 261.227 71.8594 261.227C71.5938 261.227 71.3724 261.146 71.1953 260.984C71.0234 260.818 70.9375 260.547 70.9375 260.172ZM79.7422 249.578H82.9688C84.4844 249.578 85.5807 249.805 86.2578 250.258C86.9349 250.711 87.2734 251.427 87.2734 252.406C87.2734 253.083 87.0833 253.643 86.7031 254.086C86.3281 254.523 85.7786 254.807 85.0547 254.938V255.016C86.7891 255.312 87.6562 256.224 87.6562 257.75C87.6562 258.771 87.3099 259.568 86.6172 260.141C85.9297 260.714 84.9661 261 83.7266 261H79.7422V249.578ZM81.0703 254.469H83.2578C84.1953 254.469 84.8698 254.323 85.2812 254.031C85.6927 253.734 85.8984 253.237 85.8984 252.539C85.8984 251.898 85.6693 251.438 85.2109 251.156C84.7526 250.87 84.0234 250.727 83.0234 250.727H81.0703V254.469ZM81.0703 255.594V259.867H83.4531C84.375 259.867 85.0677 259.69 85.5312 259.336C86 258.977 86.2344 258.417 86.2344 257.656C86.2344 256.948 85.9948 256.427 85.5156 256.094C85.0417 255.76 84.3177 255.594 83.3438 255.594H81.0703ZM97.3125 256.711C97.3125 258.107 96.9609 259.198 96.2578 259.984C95.5547 260.766 94.5833 261.156 93.3438 261.156C92.5781 261.156 91.8984 260.977 91.3047 260.617C90.7109 260.258 90.2526 259.742 89.9297 259.07C89.6068 258.398 89.4453 257.612 89.4453 256.711C89.4453 255.315 89.7943 254.229 90.4922 253.453C91.1901 252.672 92.1589 252.281 93.3984 252.281C94.5964 252.281 95.5469 252.68 96.25 253.477C96.9583 254.273 97.3125 255.352 97.3125 256.711ZM90.7891 256.711C90.7891 257.805 91.0078 258.638 91.4453 259.211C91.8828 259.784 92.526 260.07 93.375 260.07C94.224 260.07 94.8672 259.786 95.3047 259.219C95.7474 258.646 95.9688 257.81 95.9688 256.711C95.9688 255.622 95.7474 254.797 95.3047 254.234C94.8672 253.667 94.2188 253.383 93.3594 253.383C92.5104 253.383 91.8698 253.661 91.4375 254.219C91.0052 254.776 90.7891 255.607 90.7891 256.711ZM103.578 252.297C104.703 252.297 105.576 252.682 106.195 253.453C106.82 254.219 107.133 255.305 107.133 256.711C107.133 258.117 106.818 259.211 106.188 259.992C105.562 260.768 104.693 261.156 103.578 261.156C103.021 261.156 102.51 261.055 102.047 260.852C101.589 260.643 101.203 260.326 100.891 259.898H100.797L100.523 261H99.5938V248.844H100.891V251.797C100.891 252.458 100.87 253.052 100.828 253.578H100.891C101.495 252.724 102.391 252.297 103.578 252.297ZM103.391 253.383C102.505 253.383 101.867 253.638 101.477 254.148C101.086 254.654 100.891 255.508 100.891 256.711C100.891 257.914 101.091 258.776 101.492 259.297C101.893 259.812 102.536 260.07 103.422 260.07C104.219 260.07 104.812 259.781 105.203 259.203C105.594 258.62 105.789 257.784 105.789 256.695C105.789 255.581 105.594 254.75 105.203 254.203C104.812 253.656 104.208 253.383 103.391 253.383Z" class="path-5"/> -<path d="M43.7109 211.918C43.7109 212.93 43.3646 213.709 42.6719 214.256C41.9837 214.798 40.9971 215.069 39.7119 215.069H38.5361V219H37.374V209.006H39.9648C42.4622 209.006 43.7109 209.977 43.7109 211.918ZM38.5361 214.071H39.582C40.612 214.071 41.3571 213.905 41.8174 213.572C42.2777 213.24 42.5078 212.706 42.5078 211.973C42.5078 211.312 42.2913 210.82 41.8584 210.496C41.4255 210.173 40.751 210.011 39.835 210.011H38.5361V214.071ZM50.2461 219L50.0205 217.934H49.9658C49.5921 218.403 49.2184 218.722 48.8447 218.891C48.4756 219.055 48.013 219.137 47.457 219.137C46.7142 219.137 46.1309 218.945 45.707 218.562C45.2878 218.18 45.0781 217.635 45.0781 216.929C45.0781 215.416 46.2881 214.623 48.708 214.55L49.9795 214.509V214.044C49.9795 213.456 49.8519 213.023 49.5967 212.745C49.346 212.463 48.9427 212.321 48.3867 212.321C47.7624 212.321 47.056 212.513 46.2676 212.896L45.9189 212.027C46.2881 211.827 46.6914 211.67 47.1289 211.556C47.571 211.442 48.013 211.385 48.4551 211.385C49.3483 211.385 50.0091 211.583 50.4375 211.979C50.8704 212.376 51.0869 213.012 51.0869 213.887V219H50.2461ZM47.6826 218.2C48.389 218.2 48.9427 218.007 49.3438 217.619C49.7493 217.232 49.9521 216.689 49.9521 215.992V215.315L48.8174 215.363C47.915 215.395 47.2633 215.536 46.8623 215.787C46.4658 216.033 46.2676 216.418 46.2676 216.942C46.2676 217.353 46.3906 217.665 46.6367 217.879C46.8874 218.093 47.236 218.2 47.6826 218.2ZM56.8496 211.371C57.1823 211.371 57.4808 211.398 57.7451 211.453L57.5879 212.506C57.278 212.438 57.0046 212.403 56.7676 212.403C56.1615 212.403 55.6419 212.649 55.209 213.142C54.7806 213.634 54.5664 214.247 54.5664 214.98V219H53.4316V211.508H54.3682L54.498 212.896H54.5527C54.8307 212.408 55.1657 212.032 55.5576 211.768C55.9495 211.503 56.3802 211.371 56.8496 211.371ZM61.5664 218.2C61.7669 218.2 61.9606 218.187 62.1475 218.159C62.3343 218.127 62.4824 218.095 62.5918 218.063V218.932C62.4688 218.991 62.2865 219.039 62.0449 219.075C61.8079 219.116 61.5938 219.137 61.4023 219.137C59.9531 219.137 59.2285 218.373 59.2285 216.847V212.39H58.1553V211.843L59.2285 211.371L59.707 209.771H60.3633V211.508H62.5371V212.39H60.3633V216.799C60.3633 217.25 60.4704 217.596 60.6846 217.838C60.8988 218.079 61.1927 218.2 61.5664 218.2ZM62.9062 211.508H64.123L65.7637 215.78C66.1237 216.756 66.347 217.46 66.4336 217.893H66.4883C66.5475 217.66 66.6706 217.264 66.8574 216.703C67.0488 216.138 67.6686 214.406 68.7168 211.508H69.9336L66.7139 220.039C66.3949 220.882 66.0212 221.479 65.5928 221.83C65.1689 222.186 64.6471 222.363 64.0273 222.363C63.681 222.363 63.3392 222.325 63.002 222.247V221.338C63.2526 221.393 63.5329 221.42 63.8428 221.42C64.6221 221.42 65.1781 220.982 65.5107 220.107L65.9277 219.041L62.9062 211.508ZM80.8369 219H74.2676V218.022L76.8994 215.377C77.7015 214.566 78.2301 213.987 78.4854 213.641C78.7406 213.294 78.932 212.957 79.0596 212.629C79.1872 212.301 79.251 211.948 79.251 211.569C79.251 211.036 79.0892 210.615 78.7656 210.305C78.4421 209.99 77.9932 209.833 77.4189 209.833C77.0042 209.833 76.61 209.901 76.2363 210.038C75.8672 210.175 75.4548 210.423 74.999 210.783L74.3975 210.011C75.318 209.245 76.3206 208.862 77.4053 208.862C78.3441 208.862 79.0801 209.104 79.6133 209.587C80.1465 210.065 80.4131 210.71 80.4131 211.521C80.4131 212.155 80.2354 212.782 79.8799 213.401C79.5244 214.021 78.859 214.805 77.8838 215.753L75.6963 217.893V217.947H80.8369V219Z" class="path-6"/> -<rect x="36.5" y="325.5" width="273" height="44" rx="2.5" class="rect-6"/> -<path d="M60.3516 346.273C60.3516 348.247 60.0391 349.721 59.4141 350.695C58.7943 351.669 57.8438 352.156 56.5625 352.156C55.3333 352.156 54.3984 351.659 53.7578 350.664C53.1172 349.664 52.7969 348.201 52.7969 346.273C52.7969 344.284 53.1068 342.807 53.7266 341.844C54.3464 340.88 55.2917 340.398 56.5625 340.398C57.8021 340.398 58.7422 340.901 59.3828 341.906C60.0286 342.911 60.3516 344.367 60.3516 346.273ZM54.1094 346.273C54.1094 347.935 54.3047 349.146 54.6953 349.906C55.0859 350.661 55.7083 351.039 56.5625 351.039C57.4271 351.039 58.0521 350.656 58.4375 349.891C58.8281 349.12 59.0234 347.914 59.0234 346.273C59.0234 344.633 58.8281 343.432 58.4375 342.672C58.0521 341.906 57.4271 341.523 56.5625 341.523C55.7083 341.523 55.0859 341.901 54.6953 342.656C54.3047 343.406 54.1094 344.612 54.1094 346.273ZM64.5938 347.617L61.6172 343.438H63.0938L65.3516 346.719L67.6016 343.438H69.0625L66.0859 347.617L69.2188 352H67.75L65.3516 348.531L62.9297 352H61.4609L64.5938 347.617ZM75.1328 352H73.8672V343.859C73.8672 343.182 73.888 342.542 73.9297 341.938C73.8203 342.047 73.6979 342.161 73.5625 342.281C73.4271 342.401 72.8073 342.909 71.7031 343.805L71.0156 342.914L74.0391 340.578H75.1328V352ZM86.9922 352H79.4844V350.883L82.4922 347.859C83.4089 346.932 84.013 346.271 84.3047 345.875C84.5964 345.479 84.8151 345.094 84.9609 344.719C85.1068 344.344 85.1797 343.94 85.1797 343.508C85.1797 342.898 84.9948 342.417 84.625 342.062C84.2552 341.703 83.7422 341.523 83.0859 341.523C82.612 341.523 82.1615 341.602 81.7344 341.758C81.3125 341.914 80.8411 342.198 80.3203 342.609L79.6328 341.727C80.6849 340.852 81.8307 340.414 83.0703 340.414C84.1432 340.414 84.9844 340.69 85.5938 341.242C86.2031 341.789 86.5078 342.526 86.5078 343.453C86.5078 344.177 86.3047 344.893 85.8984 345.602C85.4922 346.31 84.7318 347.206 83.6172 348.289L81.1172 350.734V350.797H86.9922V352ZM95.7188 343.266C95.7188 343.995 95.513 344.591 95.1016 345.055C94.6953 345.518 94.1172 345.828 93.3672 345.984V346.047C94.2839 346.161 94.9635 346.453 95.4062 346.922C95.849 347.391 96.0703 348.005 96.0703 348.766C96.0703 349.854 95.6927 350.693 94.9375 351.281C94.1823 351.865 93.1094 352.156 91.7188 352.156C91.1146 352.156 90.5599 352.109 90.0547 352.016C89.5547 351.927 89.0677 351.768 88.5938 351.539V350.305C89.0885 350.549 89.6146 350.737 90.1719 350.867C90.7344 350.992 91.2656 351.055 91.7656 351.055C93.7396 351.055 94.7266 350.281 94.7266 348.734C94.7266 347.349 93.638 346.656 91.4609 346.656H90.3359V345.539H91.4766C92.3672 345.539 93.0729 345.344 93.5938 344.953C94.1146 344.557 94.375 344.01 94.375 343.312C94.375 342.755 94.1823 342.318 93.7969 342C93.4167 341.682 92.8984 341.523 92.2422 341.523C91.7422 341.523 91.2708 341.591 90.8281 341.727C90.3854 341.862 89.8802 342.112 89.3125 342.477L88.6562 341.602C89.125 341.232 89.6641 340.943 90.2734 340.734C90.888 340.521 91.5339 340.414 92.2109 340.414C93.3203 340.414 94.1823 340.669 94.7969 341.18C95.4115 341.685 95.7188 342.38 95.7188 343.266ZM105.844 349.375H104.148V352H102.906V349.375H97.3516V348.242L102.773 340.516H104.148V348.195H105.844V349.375ZM102.906 348.195V344.398C102.906 343.654 102.932 342.812 102.984 341.875H102.922C102.672 342.375 102.438 342.789 102.219 343.117L98.6484 348.195H102.906ZM107.359 351.172C107.359 350.823 107.438 350.56 107.594 350.383C107.755 350.201 107.984 350.109 108.281 350.109C108.583 350.109 108.818 350.201 108.984 350.383C109.156 350.56 109.242 350.823 109.242 351.172C109.242 351.51 109.156 351.771 108.984 351.953C108.812 352.135 108.578 352.227 108.281 352.227C108.016 352.227 107.794 352.146 107.617 351.984C107.445 351.818 107.359 351.547 107.359 351.172ZM111.625 351.172C111.625 350.823 111.703 350.56 111.859 350.383C112.021 350.201 112.25 350.109 112.547 350.109C112.849 350.109 113.083 350.201 113.25 350.383C113.422 350.56 113.508 350.823 113.508 351.172C113.508 351.51 113.422 351.771 113.25 351.953C113.078 352.135 112.844 352.227 112.547 352.227C112.281 352.227 112.06 352.146 111.883 351.984C111.711 351.818 111.625 351.547 111.625 351.172ZM115.891 351.172C115.891 350.823 115.969 350.56 116.125 350.383C116.286 350.201 116.516 350.109 116.812 350.109C117.115 350.109 117.349 350.201 117.516 350.383C117.688 350.56 117.773 350.823 117.773 351.172C117.773 351.51 117.688 351.771 117.516 351.953C117.344 352.135 117.109 352.227 116.812 352.227C116.547 352.227 116.326 352.146 116.148 351.984C115.977 351.818 115.891 351.547 115.891 351.172ZM127.797 349.375H126.102V352H124.859V349.375H119.305V348.242L124.727 340.516H126.102V348.195H127.797V349.375ZM124.859 348.195V344.398C124.859 343.654 124.885 342.812 124.938 341.875H124.875C124.625 342.375 124.391 342.789 124.172 343.117L120.602 348.195H124.859ZM135.984 343.266C135.984 343.995 135.779 344.591 135.367 345.055C134.961 345.518 134.383 345.828 133.633 345.984V346.047C134.549 346.161 135.229 346.453 135.672 346.922C136.115 347.391 136.336 348.005 136.336 348.766C136.336 349.854 135.958 350.693 135.203 351.281C134.448 351.865 133.375 352.156 131.984 352.156C131.38 352.156 130.826 352.109 130.32 352.016C129.82 351.927 129.333 351.768 128.859 351.539V350.305C129.354 350.549 129.88 350.737 130.438 350.867C131 350.992 131.531 351.055 132.031 351.055C134.005 351.055 134.992 350.281 134.992 348.734C134.992 347.349 133.904 346.656 131.727 346.656H130.602V345.539H131.742C132.633 345.539 133.339 345.344 133.859 344.953C134.38 344.557 134.641 344.01 134.641 343.312C134.641 342.755 134.448 342.318 134.062 342C133.682 341.682 133.164 341.523 132.508 341.523C132.008 341.523 131.536 341.591 131.094 341.727C130.651 341.862 130.146 342.112 129.578 342.477L128.922 341.602C129.391 341.232 129.93 340.943 130.539 340.734C131.154 340.521 131.799 340.414 132.477 340.414C133.586 340.414 134.448 340.669 135.062 341.18C135.677 341.685 135.984 342.38 135.984 343.266ZM145.57 352H138.062V350.883L141.07 347.859C141.987 346.932 142.591 346.271 142.883 345.875C143.174 345.479 143.393 345.094 143.539 344.719C143.685 344.344 143.758 343.94 143.758 343.508C143.758 342.898 143.573 342.417 143.203 342.062C142.833 341.703 142.32 341.523 141.664 341.523C141.19 341.523 140.74 341.602 140.312 341.758C139.891 341.914 139.419 342.198 138.898 342.609L138.211 341.727C139.263 340.852 140.409 340.414 141.648 340.414C142.721 340.414 143.562 340.69 144.172 341.242C144.781 341.789 145.086 342.526 145.086 343.453C145.086 344.177 144.883 344.893 144.477 345.602C144.07 346.31 143.31 347.206 142.195 348.289L139.695 350.734V350.797H145.57V352ZM152.023 352H150.758V343.859C150.758 343.182 150.779 342.542 150.82 341.938C150.711 342.047 150.589 342.161 150.453 342.281C150.318 342.401 149.698 342.909 148.594 343.805L147.906 342.914L150.93 340.578H152.023V352Z" class="path-7"/> -<path d="M43.7109 302.918C43.7109 303.93 43.3646 304.709 42.6719 305.256C41.9837 305.798 40.9971 306.069 39.7119 306.069H38.5361V310H37.374V300.006H39.9648C42.4622 300.006 43.7109 300.977 43.7109 302.918ZM38.5361 305.071H39.582C40.612 305.071 41.3571 304.905 41.8174 304.572C42.2777 304.24 42.5078 303.706 42.5078 302.973C42.5078 302.312 42.2913 301.82 41.8584 301.496C41.4255 301.173 40.751 301.011 39.835 301.011H38.5361V305.071ZM50.2461 310L50.0205 308.934H49.9658C49.5921 309.403 49.2184 309.722 48.8447 309.891C48.4756 310.055 48.013 310.137 47.457 310.137C46.7142 310.137 46.1309 309.945 45.707 309.562C45.2878 309.18 45.0781 308.635 45.0781 307.929C45.0781 306.416 46.2881 305.623 48.708 305.55L49.9795 305.509V305.044C49.9795 304.456 49.8519 304.023 49.5967 303.745C49.346 303.463 48.9427 303.321 48.3867 303.321C47.7624 303.321 47.056 303.513 46.2676 303.896L45.9189 303.027C46.2881 302.827 46.6914 302.67 47.1289 302.556C47.571 302.442 48.013 302.385 48.4551 302.385C49.3483 302.385 50.0091 302.583 50.4375 302.979C50.8704 303.376 51.0869 304.012 51.0869 304.887V310H50.2461ZM47.6826 309.2C48.389 309.2 48.9427 309.007 49.3438 308.619C49.7493 308.232 49.9521 307.689 49.9521 306.992V306.315L48.8174 306.363C47.915 306.395 47.2633 306.536 46.8623 306.787C46.4658 307.033 46.2676 307.418 46.2676 307.942C46.2676 308.353 46.3906 308.665 46.6367 308.879C46.8874 309.093 47.236 309.2 47.6826 309.2ZM56.8496 302.371C57.1823 302.371 57.4808 302.398 57.7451 302.453L57.5879 303.506C57.278 303.438 57.0046 303.403 56.7676 303.403C56.1615 303.403 55.6419 303.649 55.209 304.142C54.7806 304.634 54.5664 305.247 54.5664 305.98V310H53.4316V302.508H54.3682L54.498 303.896H54.5527C54.8307 303.408 55.1657 303.032 55.5576 302.768C55.9495 302.503 56.3802 302.371 56.8496 302.371ZM61.5664 309.2C61.7669 309.2 61.9606 309.187 62.1475 309.159C62.3343 309.127 62.4824 309.095 62.5918 309.063V309.932C62.4688 309.991 62.2865 310.039 62.0449 310.075C61.8079 310.116 61.5938 310.137 61.4023 310.137C59.9531 310.137 59.2285 309.373 59.2285 307.847V303.39H58.1553V302.843L59.2285 302.371L59.707 300.771H60.3633V302.508H62.5371V303.39H60.3633V307.799C60.3633 308.25 60.4704 308.596 60.6846 308.838C60.8988 309.079 61.1927 309.2 61.5664 309.2ZM62.9062 302.508H64.123L65.7637 306.78C66.1237 307.756 66.347 308.46 66.4336 308.893H66.4883C66.5475 308.66 66.6706 308.264 66.8574 307.703C67.0488 307.138 67.6686 305.406 68.7168 302.508H69.9336L66.7139 311.039C66.3949 311.882 66.0212 312.479 65.5928 312.83C65.1689 313.186 64.6471 313.363 64.0273 313.363C63.681 313.363 63.3392 313.325 63.002 313.247V312.338C63.2526 312.393 63.5329 312.42 63.8428 312.42C64.6221 312.42 65.1781 311.982 65.5107 311.107L65.9277 310.041L62.9062 302.508ZM80.8369 310H74.2676V309.022L76.8994 306.377C77.7015 305.566 78.2301 304.987 78.4854 304.641C78.7406 304.294 78.932 303.957 79.0596 303.629C79.1872 303.301 79.251 302.948 79.251 302.569C79.251 302.036 79.0892 301.615 78.7656 301.305C78.4421 300.99 77.9932 300.833 77.4189 300.833C77.0042 300.833 76.61 300.901 76.2363 301.038C75.8672 301.175 75.4548 301.423 74.999 301.783L74.3975 301.011C75.318 300.245 76.3206 299.862 77.4053 299.862C78.3441 299.862 79.0801 300.104 79.6133 300.587C80.1465 301.065 80.4131 301.71 80.4131 302.521C80.4131 303.155 80.2354 303.782 79.8799 304.401C79.5244 305.021 78.859 305.805 77.8838 306.753L75.6963 308.893V308.947H80.8369V310ZM92.8887 310L91.6445 306.821H87.6387L86.4082 310H85.2324L89.1836 299.965H90.1611L94.0918 310H92.8887ZM91.2822 305.775L90.1201 302.679C89.9697 302.287 89.8148 301.806 89.6553 301.236C89.555 301.674 89.4115 302.155 89.2246 302.679L88.0488 305.775H91.2822ZM100.395 308.995H100.333C99.8089 309.756 99.0251 310.137 97.9814 310.137C97.0016 310.137 96.2383 309.802 95.6914 309.132C95.1491 308.462 94.8779 307.509 94.8779 306.274C94.8779 305.039 95.1514 304.08 95.6982 303.396C96.2451 302.713 97.0062 302.371 97.9814 302.371C98.9977 302.371 99.777 302.74 100.319 303.479H100.408L100.36 302.938L100.333 302.412V299.363H101.468V310H100.545L100.395 308.995ZM98.125 309.187C98.8997 309.187 99.4603 308.977 99.8066 308.558C100.158 308.134 100.333 307.452 100.333 306.514V306.274C100.333 305.213 100.155 304.456 99.7998 304.005C99.4489 303.549 98.8861 303.321 98.1113 303.321C97.446 303.321 96.9355 303.581 96.5801 304.101C96.2292 304.616 96.0537 305.345 96.0537 306.288C96.0537 307.245 96.2292 307.967 96.5801 308.455C96.931 308.943 97.446 309.187 98.125 309.187ZM108.98 308.995H108.919C108.395 309.756 107.611 310.137 106.567 310.137C105.588 310.137 104.824 309.802 104.277 309.132C103.735 308.462 103.464 307.509 103.464 306.274C103.464 305.039 103.737 304.08 104.284 303.396C104.831 302.713 105.592 302.371 106.567 302.371C107.584 302.371 108.363 302.74 108.905 303.479H108.994L108.946 302.938L108.919 302.412V299.363H110.054V310H109.131L108.98 308.995ZM106.711 309.187C107.486 309.187 108.046 308.977 108.393 308.558C108.743 308.134 108.919 307.452 108.919 306.514V306.274C108.919 305.213 108.741 304.456 108.386 304.005C108.035 303.549 107.472 303.321 106.697 303.321C106.032 303.321 105.521 303.581 105.166 304.101C104.815 304.616 104.64 305.345 104.64 306.288C104.64 307.245 104.815 307.967 105.166 308.455C105.517 308.943 106.032 309.187 106.711 309.187ZM115.885 302.371C116.217 302.371 116.516 302.398 116.78 302.453L116.623 303.506C116.313 303.438 116.04 303.403 115.803 303.403C115.197 303.403 114.677 303.649 114.244 304.142C113.816 304.634 113.602 305.247 113.602 305.98V310H112.467V302.508H113.403L113.533 303.896H113.588C113.866 303.408 114.201 303.032 114.593 302.768C114.985 302.503 115.415 302.371 115.885 302.371ZM121.347 310.137C120.239 310.137 119.364 309.799 118.722 309.125C118.084 308.451 117.765 307.514 117.765 306.315C117.765 305.108 118.061 304.148 118.653 303.438C119.25 302.727 120.05 302.371 121.053 302.371C121.992 302.371 122.734 302.681 123.281 303.301C123.828 303.916 124.102 304.729 124.102 305.741V306.459H118.94C118.963 307.339 119.184 308.006 119.604 308.462C120.027 308.918 120.622 309.146 121.388 309.146C122.194 309.146 122.992 308.977 123.78 308.64V309.651C123.379 309.825 122.999 309.948 122.639 310.021C122.283 310.098 121.853 310.137 121.347 310.137ZM121.039 303.321C120.438 303.321 119.957 303.517 119.597 303.909C119.241 304.301 119.032 304.843 118.968 305.536H122.885C122.885 304.821 122.725 304.274 122.406 303.896C122.087 303.513 121.632 303.321 121.039 303.321ZM130.876 307.956C130.876 308.653 130.616 309.191 130.097 309.569C129.577 309.948 128.848 310.137 127.909 310.137C126.916 310.137 126.141 309.979 125.585 309.665V308.612C125.945 308.795 126.33 308.938 126.74 309.043C127.155 309.148 127.554 309.2 127.937 309.2C128.529 309.2 128.985 309.107 129.304 308.92C129.623 308.729 129.782 308.439 129.782 308.052C129.782 307.76 129.655 307.512 129.399 307.307C129.149 307.097 128.657 306.851 127.923 306.568C127.226 306.309 126.729 306.083 126.433 305.892C126.141 305.696 125.922 305.475 125.776 305.229C125.635 304.982 125.564 304.688 125.564 304.347C125.564 303.736 125.813 303.255 126.31 302.904C126.806 302.549 127.488 302.371 128.354 302.371C129.16 302.371 129.949 302.535 130.719 302.863L130.315 303.786C129.563 303.476 128.882 303.321 128.271 303.321C127.734 303.321 127.328 303.406 127.055 303.574C126.781 303.743 126.645 303.975 126.645 304.271C126.645 304.472 126.695 304.643 126.795 304.784C126.9 304.925 127.066 305.06 127.294 305.188C127.522 305.315 127.959 305.5 128.606 305.741C129.495 306.065 130.094 306.391 130.404 306.719C130.719 307.047 130.876 307.459 130.876 307.956ZM137.562 307.956C137.562 308.653 137.302 309.191 136.782 309.569C136.263 309.948 135.534 310.137 134.595 310.137C133.601 310.137 132.826 309.979 132.271 309.665V308.612C132.631 308.795 133.016 308.938 133.426 309.043C133.84 309.148 134.239 309.2 134.622 309.2C135.215 309.2 135.67 309.107 135.989 308.92C136.308 308.729 136.468 308.439 136.468 308.052C136.468 307.76 136.34 307.512 136.085 307.307C135.834 307.097 135.342 306.851 134.608 306.568C133.911 306.309 133.414 306.083 133.118 305.892C132.826 305.696 132.608 305.475 132.462 305.229C132.321 304.982 132.25 304.688 132.25 304.347C132.25 303.736 132.498 303.255 132.995 302.904C133.492 302.549 134.173 302.371 135.039 302.371C135.846 302.371 136.634 302.535 137.404 302.863L137.001 303.786C136.249 303.476 135.568 303.321 134.957 303.321C134.419 303.321 134.014 303.406 133.74 303.574C133.467 303.743 133.33 303.975 133.33 304.271C133.33 304.472 133.38 304.643 133.48 304.784C133.585 304.925 133.752 305.06 133.979 305.188C134.207 305.315 134.645 305.5 135.292 305.741C136.181 306.065 136.78 306.391 137.09 306.719C137.404 307.047 137.562 307.459 137.562 307.956Z" class="path-8"/> -<defs> -<filter id="filter0_d_21428_72880" x="0.682432" y="0.227477" width="344.635" height="402.635" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.54505"/> -<feGaussianBlur stdDeviation="1.15878"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_21428_72880"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_21428_72880" result="shape"/> -</filter> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/dispute-resolver/policy.svg b/web/src/assets/svgs/mini-guides/dispute-resolver/policy.svg deleted file mode 100644 index ccc5496d0..000000000 --- a/web/src/assets/svgs/mini-guides/dispute-resolver/policy.svg +++ /dev/null @@ -1,37 +0,0 @@ -<svg width="346" height="403" viewBox="0 0 346 403" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g filter="url(#filter0_d_21428_72890)"> -<rect x="3" y="1" width="340" height="398" rx="2.31757" class="rect-1"/> -<rect x="3.38626" y="1.38626" width="339.227" height="397.227" rx="1.93131" stroke-width="0.772523" class="rect-2"/> -</g> -<path d="M63.5234 122.348C63.5234 123.871 62.9727 125.066 61.8711 125.934C60.7695 126.801 59.25 127.234 57.3125 127.234C55.375 127.234 53.7891 126.934 52.5547 126.332V123.684C53.3359 124.051 54.1641 124.34 55.0391 124.551C55.9219 124.762 56.7422 124.867 57.5 124.867C58.6094 124.867 59.4258 124.656 59.9492 124.234C60.4805 123.812 60.7461 123.246 60.7461 122.535C60.7461 121.895 60.5039 121.352 60.0195 120.906C59.5352 120.461 58.5352 119.934 57.0195 119.324C55.457 118.691 54.3555 117.969 53.7148 117.156C53.0742 116.344 52.7539 115.367 52.7539 114.227C52.7539 112.797 53.2617 111.672 54.2773 110.852C55.293 110.031 56.6562 109.621 58.3672 109.621C60.0078 109.621 61.6406 109.98 63.2656 110.699L62.375 112.984C60.8516 112.344 59.4922 112.023 58.2969 112.023C57.3906 112.023 56.7031 112.223 56.2344 112.621C55.7656 113.012 55.5312 113.531 55.5312 114.18C55.5312 114.625 55.625 115.008 55.8125 115.328C56 115.641 56.3086 115.938 56.7383 116.219C57.168 116.5 57.9414 116.871 59.0586 117.332C60.3164 117.855 61.2383 118.344 61.8242 118.797C62.4102 119.25 62.8398 119.762 63.1133 120.332C63.3867 120.902 63.5234 121.574 63.5234 122.348ZM75.6875 127L75.3008 125.301H75.1602C74.7773 125.902 74.2305 126.375 73.5195 126.719C72.8164 127.062 72.0117 127.234 71.1055 127.234C69.5352 127.234 68.3633 126.844 67.5898 126.062C66.8164 125.281 66.4297 124.098 66.4297 122.512V114.039H69.207V122.031C69.207 123.023 69.4102 123.77 69.8164 124.27C70.2227 124.762 70.8594 125.008 71.7266 125.008C72.8828 125.008 73.7305 124.664 74.2695 123.977C74.8164 123.281 75.0898 122.121 75.0898 120.496V114.039H77.8555V127H75.6875ZM88.4023 113.805C90.0195 113.805 91.2773 114.391 92.1758 115.562C93.082 116.734 93.5352 118.379 93.5352 120.496C93.5352 122.621 93.0781 124.277 92.1641 125.465C91.25 126.645 89.9805 127.234 88.3555 127.234C86.7148 127.234 85.4414 126.645 84.5352 125.465H84.3477L83.8438 127H81.7812V108.766H84.5352V113.102C84.5352 113.422 84.5195 113.898 84.4883 114.531C84.457 115.164 84.4336 115.566 84.418 115.738H84.5352C85.4102 114.449 86.6992 113.805 88.4023 113.805ZM87.6875 116.055C86.5781 116.055 85.7773 116.383 85.2852 117.039C84.8008 117.688 84.5508 118.777 84.5352 120.309V120.496C84.5352 122.074 84.7852 123.219 85.2852 123.93C85.7852 124.633 86.6016 124.984 87.7344 124.984C88.7109 124.984 89.4492 124.598 89.9492 123.824C90.457 123.051 90.7109 121.934 90.7109 120.473C90.7109 117.527 89.7031 116.055 87.6875 116.055ZM107.656 127H104.891V119.008C104.891 118.016 104.703 117.277 104.328 116.793C103.953 116.301 103.367 116.055 102.57 116.055C101.508 116.055 100.727 116.402 100.227 117.098C99.7344 117.785 99.4883 118.934 99.4883 120.543V127H96.7344V114.039H98.8906L99.2773 115.738H99.418C99.7773 115.121 100.297 114.645 100.977 114.309C101.664 113.973 102.418 113.805 103.238 113.805C105.23 113.805 106.551 114.484 107.199 115.844H107.387C107.77 115.203 108.309 114.703 109.004 114.344C109.699 113.984 110.496 113.805 111.395 113.805C112.941 113.805 114.066 114.195 114.77 114.977C115.48 115.758 115.836 116.949 115.836 118.551V127H113.082V119.008C113.082 118.016 112.891 117.277 112.508 116.793C112.133 116.301 111.547 116.055 110.75 116.055C109.68 116.055 108.895 116.391 108.395 117.062C107.902 117.727 107.656 118.75 107.656 120.133V127ZM122.434 127H119.68V114.039H122.434V127ZM119.516 110.605C119.516 110.113 119.648 109.734 119.914 109.469C120.188 109.203 120.574 109.07 121.074 109.07C121.559 109.07 121.934 109.203 122.199 109.469C122.473 109.734 122.609 110.113 122.609 110.605C122.609 111.074 122.473 111.445 122.199 111.719C121.934 111.984 121.559 112.117 121.074 112.117C120.574 112.117 120.188 111.984 119.914 111.719C119.648 111.445 119.516 111.074 119.516 110.605ZM131.211 125.008C131.883 125.008 132.555 124.902 133.227 124.691V126.766C132.922 126.898 132.527 127.008 132.043 127.094C131.566 127.188 131.07 127.234 130.555 127.234C127.945 127.234 126.641 125.859 126.641 123.109V116.125H124.871V114.906L126.77 113.898L127.707 111.156H129.406V114.039H133.098V116.125H129.406V123.062C129.406 123.727 129.57 124.219 129.898 124.539C130.234 124.852 130.672 125.008 131.211 125.008ZM146.891 125.008C147.562 125.008 148.234 124.902 148.906 124.691V126.766C148.602 126.898 148.207 127.008 147.723 127.094C147.246 127.188 146.75 127.234 146.234 127.234C143.625 127.234 142.32 125.859 142.32 123.109V116.125H140.551V114.906L142.449 113.898L143.387 111.156H145.086V114.039H148.777V116.125H145.086V123.062C145.086 123.727 145.25 124.219 145.578 124.539C145.914 124.852 146.352 125.008 146.891 125.008ZM162.91 127H160.145V119.031C160.145 118.031 159.941 117.285 159.535 116.793C159.137 116.301 158.5 116.055 157.625 116.055C156.469 116.055 155.617 116.402 155.07 117.098C154.531 117.785 154.262 118.941 154.262 120.566V127H151.508V108.766H154.262V113.395C154.262 114.137 154.215 114.93 154.121 115.773H154.297C154.672 115.148 155.191 114.664 155.855 114.32C156.527 113.977 157.309 113.805 158.199 113.805C161.34 113.805 162.91 115.387 162.91 118.551V127ZM172.402 127.234C170.387 127.234 168.809 126.648 167.668 125.477C166.535 124.297 165.969 122.676 165.969 120.613C165.969 118.496 166.496 116.832 167.551 115.621C168.605 114.41 170.055 113.805 171.898 113.805C173.609 113.805 174.961 114.324 175.953 115.363C176.945 116.402 177.441 117.832 177.441 119.652V121.141H168.805C168.844 122.398 169.184 123.367 169.824 124.047C170.465 124.719 171.367 125.055 172.531 125.055C173.297 125.055 174.008 124.984 174.664 124.844C175.328 124.695 176.039 124.453 176.797 124.117V126.355C176.125 126.676 175.445 126.902 174.758 127.035C174.07 127.168 173.285 127.234 172.402 127.234ZM171.898 115.891C171.023 115.891 170.32 116.168 169.789 116.723C169.266 117.277 168.953 118.086 168.852 119.148H174.734C174.719 118.078 174.461 117.27 173.961 116.723C173.461 116.168 172.773 115.891 171.898 115.891ZM198.441 115.047C198.441 116.836 197.855 118.207 196.684 119.16C195.512 120.113 193.844 120.59 191.68 120.59H189.898V127H187.098V109.867H192.031C194.172 109.867 195.773 110.305 196.836 111.18C197.906 112.055 198.441 113.344 198.441 115.047ZM189.898 118.234H191.387C192.824 118.234 193.879 117.984 194.551 117.484C195.223 116.984 195.559 116.203 195.559 115.141C195.559 114.156 195.258 113.422 194.656 112.938C194.055 112.453 193.117 112.211 191.844 112.211H189.898V118.234ZM213.066 120.496C213.066 122.613 212.523 124.266 211.438 125.453C210.352 126.641 208.84 127.234 206.902 127.234C205.691 127.234 204.621 126.961 203.691 126.414C202.762 125.867 202.047 125.082 201.547 124.059C201.047 123.035 200.797 121.848 200.797 120.496C200.797 118.395 201.336 116.754 202.414 115.574C203.492 114.395 205.012 113.805 206.973 113.805C208.848 113.805 210.332 114.41 211.426 115.621C212.52 116.824 213.066 118.449 213.066 120.496ZM203.633 120.496C203.633 123.488 204.738 124.984 206.949 124.984C209.137 124.984 210.23 123.488 210.23 120.496C210.23 117.535 209.129 116.055 206.926 116.055C205.77 116.055 204.93 116.438 204.406 117.203C203.891 117.969 203.633 119.066 203.633 120.496ZM218.996 127H216.242V108.766H218.996V127ZM225.699 127H222.945V114.039H225.699V127ZM222.781 110.605C222.781 110.113 222.914 109.734 223.18 109.469C223.453 109.203 223.84 109.07 224.34 109.07C224.824 109.07 225.199 109.203 225.465 109.469C225.738 109.734 225.875 110.113 225.875 110.605C225.875 111.074 225.738 111.445 225.465 111.719C225.199 111.984 224.824 112.117 224.34 112.117C223.84 112.117 223.453 111.984 223.18 111.719C222.914 111.445 222.781 111.074 222.781 110.605ZM234.875 127.234C232.914 127.234 231.422 126.664 230.398 125.523C229.383 124.375 228.875 122.73 228.875 120.59C228.875 118.41 229.406 116.734 230.469 115.562C231.539 114.391 233.082 113.805 235.098 113.805C236.465 113.805 237.695 114.059 238.789 114.566L237.957 116.781C236.793 116.328 235.832 116.102 235.074 116.102C232.832 116.102 231.711 117.59 231.711 120.566C231.711 122.02 231.988 123.113 232.543 123.848C233.105 124.574 233.926 124.938 235.004 124.938C236.23 124.938 237.391 124.633 238.484 124.023V126.426C237.992 126.715 237.465 126.922 236.902 127.047C236.348 127.172 235.672 127.234 234.875 127.234ZM239.562 114.039H242.562L245.199 121.387C245.598 122.434 245.863 123.418 245.996 124.34H246.09C246.16 123.91 246.289 123.391 246.477 122.781C246.664 122.164 247.656 119.25 249.453 114.039H252.43L246.887 128.723C245.879 131.418 244.199 132.766 241.848 132.766C241.238 132.766 240.645 132.699 240.066 132.566V130.387C240.48 130.48 240.953 130.527 241.484 130.527C242.812 130.527 243.746 129.758 244.285 128.219L244.766 127L239.562 114.039ZM267.137 116.125H263.973V127H261.207V116.125H259.074V114.836L261.207 113.992V113.148C261.207 111.617 261.566 110.484 262.285 109.75C263.004 109.008 264.102 108.637 265.578 108.637C266.547 108.637 267.5 108.797 268.438 109.117L267.711 111.203C267.031 110.984 266.383 110.875 265.766 110.875C265.141 110.875 264.684 111.07 264.395 111.461C264.113 111.844 263.973 112.422 263.973 113.195V114.039H267.137V116.125ZM272.094 127H269.34V114.039H272.094V127ZM269.176 110.605C269.176 110.113 269.309 109.734 269.574 109.469C269.848 109.203 270.234 109.07 270.734 109.07C271.219 109.07 271.594 109.203 271.859 109.469C272.133 109.734 272.27 110.113 272.27 110.605C272.27 111.074 272.133 111.445 271.859 111.719C271.594 111.984 271.219 112.117 270.734 112.117C270.234 112.117 269.848 111.984 269.574 111.719C269.309 111.445 269.176 111.074 269.176 110.605ZM278.809 127H276.055V108.766H278.809V127ZM288.418 127.234C286.402 127.234 284.824 126.648 283.684 125.477C282.551 124.297 281.984 122.676 281.984 120.613C281.984 118.496 282.512 116.832 283.566 115.621C284.621 114.41 286.07 113.805 287.914 113.805C289.625 113.805 290.977 114.324 291.969 115.363C292.961 116.402 293.457 117.832 293.457 119.652V121.141H284.82C284.859 122.398 285.199 123.367 285.84 124.047C286.48 124.719 287.383 125.055 288.547 125.055C289.312 125.055 290.023 124.984 290.68 124.844C291.344 124.695 292.055 124.453 292.812 124.117V126.355C292.141 126.676 291.461 126.902 290.773 127.035C290.086 127.168 289.301 127.234 288.418 127.234ZM287.914 115.891C287.039 115.891 286.336 116.168 285.805 116.723C285.281 117.277 284.969 118.086 284.867 119.148H290.75C290.734 118.078 290.477 117.27 289.977 116.723C289.477 116.168 288.789 115.891 287.914 115.891Z" class="path-1"/> -<rect x="36.5" y="164.5" width="273" height="63" rx="2.5" stroke-dasharray="6 6" class="rect-3"/> -<g clip-path="url(#clip0_21428_72890)"> -<g clip-path="url(#clip1_21428_72890)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M36 254C36 249.582 39.5821 246 44 246C48.4179 246 52 249.582 52 254C52 258.418 48.4179 262 44 262C39.5821 262 36 258.418 36 254ZM37.3571 254C37.3571 257.668 40.3321 260.643 44 260.643C47.6679 260.643 50.6429 257.668 50.6429 254C50.6429 250.332 47.6679 247.357 44 247.357C40.3321 247.357 37.3571 250.332 37.3571 254ZM43.3936 251.463C43.2329 251.302 43.1426 251.084 43.1426 250.857C43.1426 250.63 43.2329 250.412 43.3936 250.251C43.5544 250.09 43.7724 250 43.9997 250C44.227 250 44.4451 250.09 44.6058 250.251C44.7666 250.412 44.8569 250.63 44.8569 250.857C44.8569 251.084 44.7666 251.302 44.6058 251.463C44.4451 251.624 44.227 251.714 43.9997 251.714C43.7724 251.714 43.5544 251.624 43.3936 251.463ZM43.5711 252.857H44.4283C44.5069 252.857 44.5711 252.921 44.5711 253V257.857C44.5711 257.936 44.5069 258 44.4283 258H43.5711C43.4926 258 43.4283 257.936 43.4283 257.857V253C43.4283 252.921 43.4926 252.857 43.5711 252.857Z" class="path-2"/> -</g> -<path d="M63.917 254.003L66.583 249.006H67.8408L64.5049 255.124V259H63.3291V255.179L60 249.006H61.2715L63.917 254.003ZM75.5176 255.247C75.5176 256.468 75.21 257.423 74.5947 258.111C73.9795 258.795 73.1296 259.137 72.0449 259.137C71.375 259.137 70.7803 258.979 70.2607 258.665C69.7412 258.351 69.3402 257.899 69.0576 257.312C68.7751 256.724 68.6338 256.035 68.6338 255.247C68.6338 254.026 68.9391 253.076 69.5498 252.396C70.1605 251.713 71.0081 251.371 72.0928 251.371C73.141 251.371 73.9727 251.72 74.5879 252.417C75.2077 253.114 75.5176 254.058 75.5176 255.247ZM69.8096 255.247C69.8096 256.204 70.001 256.933 70.3838 257.435C70.7666 257.936 71.3294 258.187 72.0723 258.187C72.8151 258.187 73.3779 257.938 73.7607 257.441C74.1481 256.94 74.3418 256.209 74.3418 255.247C74.3418 254.295 74.1481 253.572 73.7607 253.08C73.3779 252.583 72.8105 252.335 72.0586 252.335C71.3158 252.335 70.7552 252.579 70.377 253.066C69.9987 253.554 69.8096 254.281 69.8096 255.247ZM78.5801 251.508V256.368C78.5801 256.979 78.7191 257.435 78.9971 257.735C79.2751 258.036 79.7103 258.187 80.3027 258.187C81.0866 258.187 81.6585 257.972 82.0186 257.544C82.3831 257.116 82.5654 256.416 82.5654 255.445V251.508H83.7002V259H82.7637L82.5996 257.995H82.5381C82.3057 258.364 81.9821 258.647 81.5674 258.843C81.1572 259.039 80.6878 259.137 80.1592 259.137C79.2477 259.137 78.5641 258.92 78.1084 258.487C77.6572 258.054 77.4316 257.362 77.4316 256.409V251.508H78.5801ZM92.7441 259.137C91.6595 259.137 90.8187 258.804 90.2217 258.139C89.6292 257.469 89.333 256.523 89.333 255.302C89.333 254.049 89.6338 253.08 90.2354 252.396C90.8415 251.713 91.7028 251.371 92.8193 251.371C93.1794 251.371 93.5394 251.41 93.8994 251.487C94.2594 251.565 94.542 251.656 94.7471 251.761L94.3984 252.725C94.1478 252.624 93.8743 252.542 93.5781 252.479C93.2819 252.41 93.0199 252.376 92.792 252.376C91.2699 252.376 90.5088 253.347 90.5088 255.288C90.5088 256.209 90.6934 256.915 91.0625 257.407C91.4362 257.899 91.9876 258.146 92.7168 258.146C93.3411 258.146 93.9814 258.011 94.6377 257.742V258.747C94.1364 259.007 93.5052 259.137 92.7441 259.137ZM101.029 259L100.804 257.934H100.749C100.375 258.403 100.002 258.722 99.6279 258.891C99.2588 259.055 98.7962 259.137 98.2402 259.137C97.4974 259.137 96.9141 258.945 96.4902 258.562C96.071 258.18 95.8613 257.635 95.8613 256.929C95.8613 255.416 97.0713 254.623 99.4912 254.55L100.763 254.509V254.044C100.763 253.456 100.635 253.023 100.38 252.745C100.129 252.463 99.7259 252.321 99.1699 252.321C98.5456 252.321 97.8392 252.513 97.0508 252.896L96.7021 252.027C97.0713 251.827 97.4746 251.67 97.9121 251.556C98.3542 251.442 98.7962 251.385 99.2383 251.385C100.132 251.385 100.792 251.583 101.221 251.979C101.654 252.376 101.87 253.012 101.87 253.887V259H101.029ZM98.4658 258.2C99.1722 258.2 99.7259 258.007 100.127 257.619C100.533 257.232 100.735 256.689 100.735 255.992V255.315L99.6006 255.363C98.6982 255.395 98.0465 255.536 97.6455 255.787C97.249 256.033 97.0508 256.418 97.0508 256.942C97.0508 257.353 97.1738 257.665 97.4199 257.879C97.6706 258.093 98.0192 258.2 98.4658 258.2ZM109.342 259V254.153C109.342 253.543 109.203 253.087 108.925 252.786C108.647 252.485 108.212 252.335 107.619 252.335C106.835 252.335 106.261 252.547 105.896 252.971C105.532 253.395 105.35 254.094 105.35 255.069V259H104.215V251.508H105.138L105.322 252.533H105.377C105.609 252.164 105.935 251.879 106.354 251.679C106.774 251.474 107.241 251.371 107.756 251.371C108.658 251.371 109.337 251.59 109.793 252.027C110.249 252.46 110.477 253.155 110.477 254.112V259H109.342ZM121.059 259L120.833 257.934H120.778C120.405 258.403 120.031 258.722 119.657 258.891C119.288 259.055 118.826 259.137 118.27 259.137C117.527 259.137 116.943 258.945 116.52 258.562C116.1 258.18 115.891 257.635 115.891 256.929C115.891 255.416 117.101 254.623 119.521 254.55L120.792 254.509V254.044C120.792 253.456 120.664 253.023 120.409 252.745C120.159 252.463 119.755 252.321 119.199 252.321C118.575 252.321 117.868 252.513 117.08 252.896L116.731 252.027C117.101 251.827 117.504 251.67 117.941 251.556C118.383 251.442 118.826 251.385 119.268 251.385C120.161 251.385 120.822 251.583 121.25 251.979C121.683 252.376 121.899 253.012 121.899 253.887V259H121.059ZM118.495 258.2C119.201 258.2 119.755 258.007 120.156 257.619C120.562 257.232 120.765 256.689 120.765 255.992V255.315L119.63 255.363C118.728 255.395 118.076 255.536 117.675 255.787C117.278 256.033 117.08 256.418 117.08 256.942C117.08 257.353 117.203 257.665 117.449 257.879C117.7 258.093 118.049 258.2 118.495 258.2ZM126.664 258.2C126.865 258.2 127.058 258.187 127.245 258.159C127.432 258.127 127.58 258.095 127.689 258.063V258.932C127.566 258.991 127.384 259.039 127.143 259.075C126.906 259.116 126.691 259.137 126.5 259.137C125.051 259.137 124.326 258.373 124.326 256.847V252.39H123.253V251.843L124.326 251.371L124.805 249.771H125.461V251.508H127.635V252.39H125.461V256.799C125.461 257.25 125.568 257.596 125.782 257.838C125.996 258.079 126.29 258.2 126.664 258.2ZM131.613 258.2C131.814 258.2 132.007 258.187 132.194 258.159C132.381 258.127 132.529 258.095 132.639 258.063V258.932C132.516 258.991 132.333 259.039 132.092 259.075C131.855 259.116 131.641 259.137 131.449 259.137C130 259.137 129.275 258.373 129.275 256.847V252.39H128.202V251.843L129.275 251.371L129.754 249.771H130.41V251.508H132.584V252.39H130.41V256.799C130.41 257.25 130.517 257.596 130.731 257.838C130.946 258.079 131.24 258.2 131.613 258.2ZM138.75 259L138.524 257.934H138.47C138.096 258.403 137.722 258.722 137.349 258.891C136.979 259.055 136.517 259.137 135.961 259.137C135.218 259.137 134.635 258.945 134.211 258.562C133.792 258.18 133.582 257.635 133.582 256.929C133.582 255.416 134.792 254.623 137.212 254.55L138.483 254.509V254.044C138.483 253.456 138.356 253.023 138.101 252.745C137.85 252.463 137.447 252.321 136.891 252.321C136.266 252.321 135.56 252.513 134.771 252.896L134.423 252.027C134.792 251.827 135.195 251.67 135.633 251.556C136.075 251.442 136.517 251.385 136.959 251.385C137.852 251.385 138.513 251.583 138.941 251.979C139.374 252.376 139.591 253.012 139.591 253.887V259H138.75ZM136.187 258.2C136.893 258.2 137.447 258.007 137.848 257.619C138.253 257.232 138.456 256.689 138.456 255.992V255.315L137.321 255.363C136.419 255.395 135.767 255.536 135.366 255.787C134.97 256.033 134.771 256.418 134.771 256.942C134.771 257.353 134.895 257.665 135.141 257.879C135.391 258.093 135.74 258.2 136.187 258.2ZM144.93 259.137C143.845 259.137 143.004 258.804 142.407 258.139C141.815 257.469 141.519 256.523 141.519 255.302C141.519 254.049 141.819 253.08 142.421 252.396C143.027 251.713 143.888 251.371 145.005 251.371C145.365 251.371 145.725 251.41 146.085 251.487C146.445 251.565 146.728 251.656 146.933 251.761L146.584 252.725C146.333 252.624 146.06 252.542 145.764 252.479C145.467 252.41 145.205 252.376 144.978 252.376C143.455 252.376 142.694 253.347 142.694 255.288C142.694 256.209 142.879 256.915 143.248 257.407C143.622 257.899 144.173 258.146 144.902 258.146C145.527 258.146 146.167 258.011 146.823 257.742V258.747C146.322 259.007 145.691 259.137 144.93 259.137ZM153.734 259V254.153C153.734 253.543 153.595 253.087 153.317 252.786C153.039 252.485 152.604 252.335 152.012 252.335C151.223 252.335 150.647 252.549 150.282 252.978C149.922 253.406 149.742 254.108 149.742 255.083V259H148.607V248.363H149.742V251.583C149.742 251.97 149.724 252.292 149.688 252.547H149.756C149.979 252.187 150.296 251.904 150.706 251.699C151.121 251.49 151.592 251.385 152.121 251.385C153.037 251.385 153.723 251.604 154.179 252.041C154.639 252.474 154.869 253.164 154.869 254.112V259H153.734ZM165.451 259L165.226 257.934H165.171C164.797 258.403 164.424 258.722 164.05 258.891C163.681 259.055 163.218 259.137 162.662 259.137C161.919 259.137 161.336 258.945 160.912 258.562C160.493 258.18 160.283 257.635 160.283 256.929C160.283 255.416 161.493 254.623 163.913 254.55L165.185 254.509V254.044C165.185 253.456 165.057 253.023 164.802 252.745C164.551 252.463 164.148 252.321 163.592 252.321C162.967 252.321 162.261 252.513 161.473 252.896L161.124 252.027C161.493 251.827 161.896 251.67 162.334 251.556C162.776 251.442 163.218 251.385 163.66 251.385C164.553 251.385 165.214 251.583 165.643 251.979C166.076 252.376 166.292 253.012 166.292 253.887V259H165.451ZM162.888 258.2C163.594 258.2 164.148 258.007 164.549 257.619C164.954 257.232 165.157 256.689 165.157 255.992V255.315L164.022 255.363C163.12 255.395 162.468 255.536 162.067 255.787C161.671 256.033 161.473 256.418 161.473 256.942C161.473 257.353 161.596 257.665 161.842 257.879C162.092 258.093 162.441 258.2 162.888 258.2ZM173.736 257.995H173.675C173.151 258.756 172.367 259.137 171.323 259.137C170.343 259.137 169.58 258.802 169.033 258.132C168.491 257.462 168.22 256.509 168.22 255.274C168.22 254.039 168.493 253.08 169.04 252.396C169.587 251.713 170.348 251.371 171.323 251.371C172.34 251.371 173.119 251.74 173.661 252.479H173.75L173.702 251.938L173.675 251.412V248.363H174.81V259H173.887L173.736 257.995ZM171.467 258.187C172.242 258.187 172.802 257.977 173.148 257.558C173.499 257.134 173.675 256.452 173.675 255.514V255.274C173.675 254.213 173.497 253.456 173.142 253.005C172.791 252.549 172.228 252.321 171.453 252.321C170.788 252.321 170.277 252.581 169.922 253.101C169.571 253.616 169.396 254.345 169.396 255.288C169.396 256.245 169.571 256.967 169.922 257.455C170.273 257.943 170.788 258.187 171.467 258.187ZM182.322 257.995H182.261C181.737 258.756 180.953 259.137 179.909 259.137C178.929 259.137 178.166 258.802 177.619 258.132C177.077 257.462 176.806 256.509 176.806 255.274C176.806 254.039 177.079 253.08 177.626 252.396C178.173 251.713 178.934 251.371 179.909 251.371C180.925 251.371 181.705 251.74 182.247 252.479H182.336L182.288 251.938L182.261 251.412V248.363H183.396V259H182.473L182.322 257.995ZM180.053 258.187C180.827 258.187 181.388 257.977 181.734 257.558C182.085 257.134 182.261 256.452 182.261 255.514V255.274C182.261 254.213 182.083 253.456 181.728 253.005C181.377 252.549 180.814 252.321 180.039 252.321C179.374 252.321 178.863 252.581 178.508 253.101C178.157 253.616 177.981 254.345 177.981 255.288C177.981 256.245 178.157 256.967 178.508 257.455C178.859 257.943 179.374 258.187 180.053 258.187ZM186.943 259H185.809V251.508H186.943V259ZM185.713 249.478C185.713 249.218 185.777 249.029 185.904 248.91C186.032 248.787 186.191 248.726 186.383 248.726C186.565 248.726 186.722 248.787 186.854 248.91C186.987 249.033 187.053 249.222 187.053 249.478C187.053 249.733 186.987 249.924 186.854 250.052C186.722 250.175 186.565 250.236 186.383 250.236C186.191 250.236 186.032 250.175 185.904 250.052C185.777 249.924 185.713 249.733 185.713 249.478ZM191.77 258.2C191.97 258.2 192.164 258.187 192.351 258.159C192.537 258.127 192.686 258.095 192.795 258.063V258.932C192.672 258.991 192.49 259.039 192.248 259.075C192.011 259.116 191.797 259.137 191.605 259.137C190.156 259.137 189.432 258.373 189.432 256.847V252.39H188.358V251.843L189.432 251.371L189.91 249.771H190.566V251.508H192.74V252.39H190.566V256.799C190.566 257.25 190.674 257.596 190.888 257.838C191.102 258.079 191.396 258.2 191.77 258.2ZM195.434 259H194.299V251.508H195.434V259ZM194.203 249.478C194.203 249.218 194.267 249.029 194.395 248.91C194.522 248.787 194.682 248.726 194.873 248.726C195.055 248.726 195.213 248.787 195.345 248.91C195.477 249.033 195.543 249.222 195.543 249.478C195.543 249.733 195.477 249.924 195.345 250.052C195.213 250.175 195.055 250.236 194.873 250.236C194.682 250.236 194.522 250.175 194.395 250.052C194.267 249.924 194.203 249.733 194.203 249.478ZM204.307 255.247C204.307 256.468 203.999 257.423 203.384 258.111C202.769 258.795 201.919 259.137 200.834 259.137C200.164 259.137 199.569 258.979 199.05 258.665C198.53 258.351 198.129 257.899 197.847 257.312C197.564 256.724 197.423 256.035 197.423 255.247C197.423 254.026 197.728 253.076 198.339 252.396C198.95 251.713 199.797 251.371 200.882 251.371C201.93 251.371 202.762 251.72 203.377 252.417C203.997 253.114 204.307 254.058 204.307 255.247ZM198.599 255.247C198.599 256.204 198.79 256.933 199.173 257.435C199.556 257.936 200.118 258.187 200.861 258.187C201.604 258.187 202.167 257.938 202.55 257.441C202.937 256.94 203.131 256.209 203.131 255.247C203.131 254.295 202.937 253.572 202.55 253.08C202.167 252.583 201.6 252.335 200.848 252.335C200.105 252.335 199.544 252.579 199.166 253.066C198.788 253.554 198.599 254.281 198.599 255.247ZM211.43 259V254.153C211.43 253.543 211.291 253.087 211.013 252.786C210.735 252.485 210.299 252.335 209.707 252.335C208.923 252.335 208.349 252.547 207.984 252.971C207.62 253.395 207.438 254.094 207.438 255.069V259H206.303V251.508H207.226L207.41 252.533H207.465C207.697 252.164 208.023 251.879 208.442 251.679C208.862 251.474 209.329 251.371 209.844 251.371C210.746 251.371 211.425 251.59 211.881 252.027C212.337 252.46 212.564 253.155 212.564 254.112V259H211.43ZM219.51 259L219.284 257.934H219.229C218.856 258.403 218.482 258.722 218.108 258.891C217.739 259.055 217.277 259.137 216.721 259.137C215.978 259.137 215.395 258.945 214.971 258.562C214.551 258.18 214.342 257.635 214.342 256.929C214.342 255.416 215.552 254.623 217.972 254.55L219.243 254.509V254.044C219.243 253.456 219.116 253.023 218.86 252.745C218.61 252.463 218.206 252.321 217.65 252.321C217.026 252.321 216.32 252.513 215.531 252.896L215.183 252.027C215.552 251.827 215.955 251.67 216.393 251.556C216.835 251.442 217.277 251.385 217.719 251.385C218.612 251.385 219.273 251.583 219.701 251.979C220.134 252.376 220.351 253.012 220.351 253.887V259H219.51ZM216.946 258.2C217.653 258.2 218.206 258.007 218.607 257.619C219.013 257.232 219.216 256.689 219.216 255.992V255.315L218.081 255.363C217.179 255.395 216.527 255.536 216.126 255.787C215.729 256.033 215.531 256.418 215.531 256.942C215.531 257.353 215.654 257.665 215.9 257.879C216.151 258.093 216.5 258.2 216.946 258.2ZM223.83 259H222.695V248.363H223.83V259ZM231.008 259H229.873V251.508H231.008V259ZM229.777 249.478C229.777 249.218 229.841 249.029 229.969 248.91C230.096 248.787 230.256 248.726 230.447 248.726C230.63 248.726 230.787 248.787 230.919 248.91C231.051 249.033 231.117 249.222 231.117 249.478C231.117 249.733 231.051 249.924 230.919 250.052C230.787 250.175 230.63 250.236 230.447 250.236C230.256 250.236 230.096 250.175 229.969 250.052C229.841 249.924 229.777 249.733 229.777 249.478ZM238.541 259V254.153C238.541 253.543 238.402 253.087 238.124 252.786C237.846 252.485 237.411 252.335 236.818 252.335C236.035 252.335 235.46 252.547 235.096 252.971C234.731 253.395 234.549 254.094 234.549 255.069V259H233.414V251.508H234.337L234.521 252.533H234.576C234.809 252.164 235.134 251.879 235.554 251.679C235.973 251.474 236.44 251.371 236.955 251.371C237.857 251.371 238.536 251.59 238.992 252.027C239.448 252.46 239.676 253.155 239.676 254.112V259H238.541ZM245.391 252.39H243.483V259H242.349V252.39H241.009V251.877L242.349 251.467V251.05C242.349 249.209 243.153 248.288 244.762 248.288C245.158 248.288 245.623 248.368 246.156 248.527L245.862 249.437C245.425 249.295 245.051 249.225 244.741 249.225C244.313 249.225 243.996 249.368 243.791 249.655C243.586 249.938 243.483 250.394 243.483 251.022V251.508H245.391V252.39ZM253.225 255.247C253.225 256.468 252.917 257.423 252.302 258.111C251.687 258.795 250.837 259.137 249.752 259.137C249.082 259.137 248.487 258.979 247.968 258.665C247.448 258.351 247.047 257.899 246.765 257.312C246.482 256.724 246.341 256.035 246.341 255.247C246.341 254.026 246.646 253.076 247.257 252.396C247.868 251.713 248.715 251.371 249.8 251.371C250.848 251.371 251.68 251.72 252.295 252.417C252.915 253.114 253.225 254.058 253.225 255.247ZM247.517 255.247C247.517 256.204 247.708 256.933 248.091 257.435C248.474 257.936 249.036 258.187 249.779 258.187C250.522 258.187 251.085 257.938 251.468 257.441C251.855 256.94 252.049 256.209 252.049 255.247C252.049 254.295 251.855 253.572 251.468 253.08C251.085 252.583 250.518 252.335 249.766 252.335C249.023 252.335 248.462 252.579 248.084 253.066C247.706 253.554 247.517 254.281 247.517 255.247ZM258.639 251.371C258.971 251.371 259.27 251.398 259.534 251.453L259.377 252.506C259.067 252.438 258.794 252.403 258.557 252.403C257.951 252.403 257.431 252.649 256.998 253.142C256.57 253.634 256.355 254.247 256.355 254.98V259H255.221V251.508H256.157L256.287 252.896H256.342C256.62 252.408 256.955 252.032 257.347 251.768C257.739 251.503 258.169 251.371 258.639 251.371ZM270.485 259V254.126C270.485 253.529 270.358 253.082 270.103 252.786C269.847 252.485 269.451 252.335 268.913 252.335C268.207 252.335 267.685 252.538 267.348 252.943C267.01 253.349 266.842 253.973 266.842 254.816V259H265.707V254.126C265.707 253.529 265.579 253.082 265.324 252.786C265.069 252.485 264.67 252.335 264.128 252.335C263.417 252.335 262.895 252.549 262.562 252.978C262.234 253.401 262.07 254.099 262.07 255.069V259H260.936V251.508H261.858L262.043 252.533H262.098C262.312 252.169 262.613 251.884 263 251.679C263.392 251.474 263.829 251.371 264.312 251.371C265.484 251.371 266.249 251.795 266.609 252.643H266.664C266.887 252.251 267.211 251.941 267.635 251.713C268.059 251.485 268.542 251.371 269.084 251.371C269.932 251.371 270.565 251.59 270.984 252.027C271.408 252.46 271.62 253.155 271.62 254.112V259H270.485ZM278.572 259L278.347 257.934H278.292C277.918 258.403 277.545 258.722 277.171 258.891C276.802 259.055 276.339 259.137 275.783 259.137C275.04 259.137 274.457 258.945 274.033 258.562C273.614 258.18 273.404 257.635 273.404 256.929C273.404 255.416 274.614 254.623 277.034 254.55L278.306 254.509V254.044C278.306 253.456 278.178 253.023 277.923 252.745C277.672 252.463 277.269 252.321 276.713 252.321C276.089 252.321 275.382 252.513 274.594 252.896L274.245 252.027C274.614 251.827 275.018 251.67 275.455 251.556C275.897 251.442 276.339 251.385 276.781 251.385C277.674 251.385 278.335 251.583 278.764 251.979C279.197 252.376 279.413 253.012 279.413 253.887V259H278.572ZM276.009 258.2C276.715 258.2 277.269 258.007 277.67 257.619C278.076 257.232 278.278 256.689 278.278 255.992V255.315L277.144 255.363C276.241 255.395 275.59 255.536 275.188 255.787C274.792 256.033 274.594 256.418 274.594 256.942C274.594 257.353 274.717 257.665 274.963 257.879C275.214 258.093 275.562 258.2 276.009 258.2ZM284.178 258.2C284.378 258.2 284.572 258.187 284.759 258.159C284.946 258.127 285.094 258.095 285.203 258.063V258.932C285.08 258.991 284.898 259.039 284.656 259.075C284.419 259.116 284.205 259.137 284.014 259.137C282.564 259.137 281.84 258.373 281.84 256.847V252.39H280.767V251.843L281.84 251.371L282.318 249.771H282.975V251.508H285.148V252.39H282.975V256.799C282.975 257.25 283.082 257.596 283.296 257.838C283.51 258.079 283.804 258.2 284.178 258.2ZM287.842 259H286.707V251.508H287.842V259ZM286.611 249.478C286.611 249.218 286.675 249.029 286.803 248.91C286.93 248.787 287.09 248.726 287.281 248.726C287.464 248.726 287.621 248.787 287.753 248.91C287.885 249.033 287.951 249.222 287.951 249.478C287.951 249.733 287.885 249.924 287.753 250.052C287.621 250.175 287.464 250.236 287.281 250.236C287.09 250.236 286.93 250.175 286.803 250.052C286.675 249.924 286.611 249.733 286.611 249.478ZM296.715 255.247C296.715 256.468 296.407 257.423 295.792 258.111C295.177 258.795 294.327 259.137 293.242 259.137C292.572 259.137 291.978 258.979 291.458 258.665C290.938 258.351 290.537 257.899 290.255 257.312C289.972 256.724 289.831 256.035 289.831 255.247C289.831 254.026 290.136 253.076 290.747 252.396C291.358 251.713 292.205 251.371 293.29 251.371C294.338 251.371 295.17 251.72 295.785 252.417C296.405 253.114 296.715 254.058 296.715 255.247ZM291.007 255.247C291.007 256.204 291.198 256.933 291.581 257.435C291.964 257.936 292.527 258.187 293.27 258.187C294.012 258.187 294.575 257.938 294.958 257.441C295.345 256.94 295.539 256.209 295.539 255.247C295.539 254.295 295.345 253.572 294.958 253.08C294.575 252.583 294.008 252.335 293.256 252.335C292.513 252.335 291.952 252.579 291.574 253.066C291.196 253.554 291.007 254.281 291.007 255.247ZM303.838 259V254.153C303.838 253.543 303.699 253.087 303.421 252.786C303.143 252.485 302.708 252.335 302.115 252.335C301.331 252.335 300.757 252.547 300.393 252.971C300.028 253.395 299.846 254.094 299.846 255.069V259H298.711V251.508H299.634L299.818 252.533H299.873C300.105 252.164 300.431 251.879 300.851 251.679C301.27 251.474 301.737 251.371 302.252 251.371C303.154 251.371 303.833 251.59 304.289 252.027C304.745 252.46 304.973 253.155 304.973 254.112V259H303.838ZM65.8105 278L65.585 276.934H65.5303C65.1566 277.403 64.7829 277.722 64.4092 277.891C64.04 278.055 63.5775 278.137 63.0215 278.137C62.2786 278.137 61.6953 277.945 61.2715 277.562C60.8522 277.18 60.6426 276.635 60.6426 275.929C60.6426 274.416 61.8525 273.623 64.2725 273.55L65.5439 273.509V273.044C65.5439 272.456 65.4163 272.023 65.1611 271.745C64.9105 271.463 64.5072 271.321 63.9512 271.321C63.3268 271.321 62.6204 271.513 61.832 271.896L61.4834 271.027C61.8525 270.827 62.2559 270.67 62.6934 270.556C63.1354 270.442 63.5775 270.385 64.0195 270.385C64.9128 270.385 65.5736 270.583 66.002 270.979C66.4349 271.376 66.6514 272.012 66.6514 272.887V278H65.8105ZM63.2471 277.2C63.9535 277.2 64.5072 277.007 64.9082 276.619C65.3138 276.232 65.5166 275.689 65.5166 274.992V274.315L64.3818 274.363C63.4795 274.395 62.8278 274.536 62.4268 274.787C62.0303 275.033 61.832 275.418 61.832 275.942C61.832 276.353 61.9551 276.665 62.2012 276.879C62.4518 277.093 62.8005 277.2 63.2471 277.2ZM73.8291 275.956C73.8291 276.653 73.5693 277.191 73.0498 277.569C72.5303 277.948 71.8011 278.137 70.8623 278.137C69.8688 278.137 69.0941 277.979 68.5381 277.665V276.612C68.8981 276.795 69.2832 276.938 69.6934 277.043C70.1081 277.148 70.5068 277.2 70.8896 277.2C71.4821 277.2 71.9378 277.107 72.2568 276.92C72.5758 276.729 72.7354 276.439 72.7354 276.052C72.7354 275.76 72.6077 275.512 72.3525 275.307C72.1019 275.097 71.6097 274.851 70.876 274.568C70.1787 274.309 69.682 274.083 69.3857 273.892C69.0941 273.696 68.8753 273.475 68.7295 273.229C68.5882 272.982 68.5176 272.688 68.5176 272.347C68.5176 271.736 68.766 271.255 69.2627 270.904C69.7594 270.549 70.4408 270.371 71.3066 270.371C72.1133 270.371 72.9017 270.535 73.6719 270.863L73.2686 271.786C72.5166 271.476 71.8353 271.321 71.2246 271.321C70.6868 271.321 70.2812 271.406 70.0078 271.574C69.7344 271.743 69.5977 271.975 69.5977 272.271C69.5977 272.472 69.6478 272.643 69.748 272.784C69.8529 272.925 70.0192 273.06 70.2471 273.188C70.4749 273.315 70.9124 273.5 71.5596 273.741C72.4482 274.065 73.0475 274.391 73.3574 274.719C73.6719 275.047 73.8291 275.459 73.8291 275.956ZM83.9258 278L83.7002 276.934H83.6455C83.2718 277.403 82.8981 277.722 82.5244 277.891C82.1553 278.055 81.6927 278.137 81.1367 278.137C80.3939 278.137 79.8105 277.945 79.3867 277.562C78.9674 277.18 78.7578 276.635 78.7578 275.929C78.7578 274.416 79.9678 273.623 82.3877 273.55L83.6592 273.509V273.044C83.6592 272.456 83.5316 272.023 83.2764 271.745C83.0257 271.463 82.6224 271.321 82.0664 271.321C81.4421 271.321 80.7357 271.513 79.9473 271.896L79.5986 271.027C79.9678 270.827 80.3711 270.67 80.8086 270.556C81.2507 270.442 81.6927 270.385 82.1348 270.385C83.028 270.385 83.6888 270.583 84.1172 270.979C84.5501 271.376 84.7666 272.012 84.7666 272.887V278H83.9258ZM81.3623 277.2C82.0687 277.2 82.6224 277.007 83.0234 276.619C83.429 276.232 83.6318 275.689 83.6318 274.992V274.315L82.4971 274.363C81.5947 274.395 80.943 274.536 80.542 274.787C80.1455 275.033 79.9473 275.418 79.9473 275.942C79.9473 276.353 80.0703 276.665 80.3164 276.879C80.5671 277.093 80.9157 277.2 81.3623 277.2ZM97.2559 270.918C97.2559 271.93 96.9095 272.709 96.2168 273.256C95.5286 273.798 94.542 274.069 93.2568 274.069H92.0811V278H90.9189V268.006H93.5098C96.0072 268.006 97.2559 268.977 97.2559 270.918ZM92.0811 273.071H93.127C94.1569 273.071 94.902 272.905 95.3623 272.572C95.8226 272.24 96.0527 271.706 96.0527 270.973C96.0527 270.312 95.8363 269.82 95.4033 269.496C94.9704 269.173 94.2959 269.011 93.3799 269.011H92.0811V273.071ZM107.332 272.907C107.332 274.557 106.883 275.819 105.985 276.694C105.092 277.565 103.805 278 102.123 278H99.3545V268.006H102.417C103.971 268.006 105.179 268.437 106.04 269.298C106.901 270.159 107.332 271.362 107.332 272.907ZM106.102 272.948C106.102 271.645 105.773 270.663 105.117 270.002C104.465 269.341 103.495 269.011 102.205 269.011H100.517V276.995H101.932C103.317 276.995 104.358 276.656 105.056 275.977C105.753 275.293 106.102 274.284 106.102 272.948ZM110.729 278H109.567V268.006H115.139V269.038H110.729V272.695H114.872V273.728H110.729V278ZM123.643 271.39H121.735V278H120.601V271.39H119.261V270.877L120.601 270.467V270.05C120.601 268.209 121.405 267.288 123.014 267.288C123.41 267.288 123.875 267.368 124.408 267.527L124.114 268.437C123.677 268.295 123.303 268.225 122.993 268.225C122.565 268.225 122.248 268.368 122.043 268.655C121.838 268.938 121.735 269.394 121.735 270.022V270.508H123.643V271.39ZM126.145 278H125.01V270.508H126.145V278ZM124.914 268.478C124.914 268.218 124.978 268.029 125.105 267.91C125.233 267.787 125.393 267.726 125.584 267.726C125.766 267.726 125.924 267.787 126.056 267.91C126.188 268.033 126.254 268.222 126.254 268.478C126.254 268.733 126.188 268.924 126.056 269.052C125.924 269.175 125.766 269.236 125.584 269.236C125.393 269.236 125.233 269.175 125.105 269.052C124.978 268.924 124.914 268.733 124.914 268.478ZM129.686 278H128.551V267.363H129.686V278ZM135.257 278.137C134.149 278.137 133.274 277.799 132.632 277.125C131.994 276.451 131.675 275.514 131.675 274.315C131.675 273.108 131.971 272.148 132.563 271.438C133.16 270.727 133.96 270.371 134.963 270.371C135.902 270.371 136.645 270.681 137.191 271.301C137.738 271.916 138.012 272.729 138.012 273.741V274.459H132.851C132.873 275.339 133.094 276.006 133.514 276.462C133.938 276.918 134.532 277.146 135.298 277.146C136.104 277.146 136.902 276.977 137.69 276.64V277.651C137.289 277.825 136.909 277.948 136.549 278.021C136.193 278.098 135.763 278.137 135.257 278.137ZM134.949 271.321C134.348 271.321 133.867 271.517 133.507 271.909C133.151 272.301 132.942 272.843 132.878 273.536H136.795C136.795 272.821 136.635 272.274 136.316 271.896C135.997 271.513 135.542 271.321 134.949 271.321ZM139.789 277.275C139.789 276.97 139.857 276.74 139.994 276.585C140.135 276.425 140.336 276.346 140.596 276.346C140.86 276.346 141.065 276.425 141.211 276.585C141.361 276.74 141.437 276.97 141.437 277.275C141.437 277.572 141.361 277.799 141.211 277.959C141.061 278.118 140.855 278.198 140.596 278.198C140.363 278.198 140.17 278.128 140.015 277.986C139.864 277.84 139.789 277.604 139.789 277.275Z" class="path-3"/> -</g> -<g clip-path="url(#clip2_21428_72890)"> -<path d="M169.406 188.378H171.778V199.91C171.778 200.06 171.893 200.182 172.034 200.182H173.959C174.101 200.182 174.216 200.06 174.216 199.91V188.378H176.594C176.809 188.378 176.927 188.115 176.796 187.938L173.202 183.105C173.178 183.072 173.147 183.046 173.112 183.028C173.077 183.009 173.039 183 173 183C172.961 183 172.923 183.009 172.888 183.028C172.853 183.046 172.822 183.072 172.798 183.105L169.204 187.935C169.073 188.116 169.191 188.378 169.406 188.378ZM184.743 198.887H182.818C182.677 198.887 182.561 199.01 182.561 199.16V204.409H163.439V199.16C163.439 199.01 163.323 198.887 163.182 198.887H161.257C161.116 198.887 161 199.01 161 199.16V205.909C161 206.513 161.459 207 162.027 207H183.973C184.541 207 185 206.513 185 205.909V199.16C185 199.01 184.884 198.887 184.743 198.887Z" class="path-4"/> -</g> -<defs> -<filter id="filter0_d_21428_72890" x="0.682432" y="0.227477" width="344.635" height="402.635" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.54505"/> -<feGaussianBlur stdDeviation="1.15878"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_21428_72890"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_21428_72890" result="shape"/> -</filter> -<clipPath id="clip0_21428_72890"> -<rect width="274" height="83" fill="white" transform="translate(36 246)"/> -</clipPath> -<clipPath id="clip1_21428_72890"> -<rect width="16" height="16" fill="white" transform="translate(36 246)"/> -</clipPath> -<clipPath id="clip2_21428_72890"> -<rect width="24" height="24" fill="white" transform="translate(161 183)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/dispute-resolver/start-a-case.svg b/web/src/assets/svgs/mini-guides/dispute-resolver/start-a-case.svg deleted file mode 100644 index 30319a8ba..000000000 --- a/web/src/assets/svgs/mini-guides/dispute-resolver/start-a-case.svg +++ /dev/null @@ -1,39 +0,0 @@ -<svg width="300" height="403" viewBox="0 0 300 403" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g filter="url(#filter0_d_21428_72850)"> -<rect x="3" y="1" width="294" height="398" rx="2.31757" class="rect-1"/> -<rect x="3.38626" y="1.38626" width="293.227" height="397.227" rx="1.93131" stroke-width="0.772523" class="rect-2"/> -</g> -<circle cx="47" cy="50" r="11.5" class="circle-1"/> -<path d="M48.1426 54H46.7656V48.4688C46.7656 47.8086 46.7812 47.2852 46.8125 46.8984C46.7227 46.9922 46.6113 47.0957 46.4785 47.209C46.3496 47.3223 45.9121 47.6816 45.166 48.2871L44.4746 47.4141L46.9941 45.4336H48.1426V54Z" class="path-1"/> -<path d="M76.3193 43.0059H79.2861C80.6624 43.0059 81.6559 43.2064 82.2666 43.6074C82.8818 44.0085 83.1895 44.6419 83.1895 45.5078C83.1895 46.0911 83.0391 46.5765 82.7383 46.9639C82.4375 47.3512 82.0046 47.5951 81.4395 47.6953V47.7637C82.1413 47.8958 82.6562 48.1579 82.9844 48.5498C83.3171 48.9372 83.4834 49.4635 83.4834 50.1289C83.4834 51.0267 83.1689 51.7308 82.54 52.2412C81.9157 52.7471 81.0452 53 79.9287 53H76.3193V43.0059ZM77.9531 47.1348H79.5254C80.209 47.1348 80.708 47.0277 81.0225 46.8135C81.3369 46.5947 81.4941 46.2256 81.4941 45.7061C81.4941 45.2367 81.3232 44.8971 80.9814 44.6875C80.6442 44.4779 80.1064 44.373 79.3682 44.373H77.9531V47.1348ZM77.9531 48.4609V51.626H79.6895C80.373 51.626 80.888 51.4961 81.2344 51.2363C81.5853 50.972 81.7607 50.5573 81.7607 49.9922C81.7607 49.4727 81.583 49.0876 81.2275 48.8369C80.8721 48.5863 80.332 48.4609 79.6074 48.4609H77.9531ZM89.2256 45.3027C89.5492 45.3027 89.8158 45.3255 90.0254 45.3711L89.8682 46.8682C89.6403 46.8135 89.4033 46.7861 89.1572 46.7861C88.5146 46.7861 87.9928 46.9958 87.5918 47.415C87.1953 47.8343 86.9971 48.3789 86.9971 49.0488V53H85.3906V45.4395H86.6484L86.8604 46.7725H86.9424C87.193 46.3213 87.5189 45.9635 87.9199 45.6992C88.3255 45.4349 88.7607 45.3027 89.2256 45.3027ZM93.04 53H91.4336V45.4395H93.04V53ZM91.3379 43.4365C91.3379 43.1494 91.4154 42.9284 91.5703 42.7734C91.7298 42.6185 91.9554 42.541 92.2471 42.541C92.5296 42.541 92.7484 42.6185 92.9033 42.7734C93.0628 42.9284 93.1426 43.1494 93.1426 43.4365C93.1426 43.71 93.0628 43.9264 92.9033 44.0859C92.7484 44.2409 92.5296 44.3184 92.2471 44.3184C91.9554 44.3184 91.7298 44.2409 91.5703 44.0859C91.4154 43.9264 91.3379 43.71 91.3379 43.4365ZM98.6455 53.1367C97.4697 53.1367 96.5492 52.7949 95.8838 52.1113C95.223 51.4232 94.8926 50.4775 94.8926 49.2744C94.8926 48.0394 95.2002 47.0687 95.8154 46.3623C96.4307 45.6559 97.276 45.3027 98.3516 45.3027C99.3496 45.3027 100.138 45.6058 100.717 46.2119C101.296 46.818 101.585 47.652 101.585 48.7139V49.582H96.5469C96.5697 50.3158 96.7679 50.8809 97.1416 51.2773C97.5153 51.6693 98.0417 51.8652 98.7207 51.8652C99.1673 51.8652 99.582 51.8242 99.9648 51.7422C100.352 51.6556 100.767 51.5143 101.209 51.3184V52.624C100.817 52.8109 100.421 52.943 100.02 53.0205C99.6185 53.098 99.1605 53.1367 98.6455 53.1367ZM98.3516 46.5195C97.8411 46.5195 97.431 46.6813 97.1211 47.0049C96.8158 47.3285 96.6335 47.8001 96.5742 48.4199H100.006C99.9967 47.7956 99.8464 47.3239 99.5547 47.0049C99.263 46.6813 98.862 46.5195 98.3516 46.5195ZM107.204 46.6562H105.358V53H103.745V46.6562H102.501V45.9043L103.745 45.4121V44.9199C103.745 44.0267 103.955 43.3659 104.374 42.9375C104.793 42.5046 105.434 42.2881 106.295 42.2881C106.86 42.2881 107.416 42.3815 107.963 42.5684L107.539 43.7852C107.143 43.6576 106.764 43.5938 106.404 43.5938C106.04 43.5938 105.773 43.7077 105.604 43.9355C105.44 44.1589 105.358 44.4961 105.358 44.9473V45.4395H107.204V46.6562ZM110.096 53H108.489V45.4395H110.096V53ZM108.394 43.4365C108.394 43.1494 108.471 42.9284 108.626 42.7734C108.785 42.6185 109.011 42.541 109.303 42.541C109.585 42.541 109.804 42.6185 109.959 42.7734C110.118 42.9284 110.198 43.1494 110.198 43.4365C110.198 43.71 110.118 43.9264 109.959 44.0859C109.804 44.2409 109.585 44.3184 109.303 44.3184C109.011 44.3184 108.785 44.2409 108.626 44.0859C108.471 43.9264 108.394 43.71 108.394 43.4365ZM119.058 53H117.444V48.3516C117.444 47.7682 117.326 47.333 117.089 47.0459C116.856 46.7588 116.485 46.6152 115.975 46.6152C115.296 46.6152 114.799 46.8158 114.484 47.2168C114.17 47.6178 114.013 48.29 114.013 49.2334V53H112.406V45.4395H113.664L113.89 46.4307H113.972C114.2 46.0706 114.523 45.7926 114.942 45.5967C115.362 45.4007 115.826 45.3027 116.337 45.3027C118.151 45.3027 119.058 46.2256 119.058 48.0713V53ZM127.678 45.4395V46.3213L126.386 46.5605C126.504 46.7201 126.602 46.916 126.68 47.1484C126.757 47.3809 126.796 47.627 126.796 47.8867C126.796 48.666 126.527 49.279 125.989 49.7256C125.451 50.1722 124.711 50.3955 123.768 50.3955C123.526 50.3955 123.307 50.3773 123.111 50.3408C122.765 50.555 122.592 50.8057 122.592 51.0928C122.592 51.266 122.672 51.3958 122.831 51.4824C122.995 51.569 123.294 51.6123 123.727 51.6123H125.046C125.88 51.6123 126.513 51.79 126.946 52.1455C127.379 52.501 127.596 53.0137 127.596 53.6836C127.596 54.5404 127.243 55.2012 126.536 55.666C125.83 56.1309 124.809 56.3633 123.474 56.3633C122.444 56.3633 121.658 56.181 121.115 55.8164C120.573 55.4518 120.302 54.9323 120.302 54.2578C120.302 53.793 120.448 53.401 120.739 53.082C121.035 52.7676 121.448 52.5488 121.977 52.4258C121.762 52.3346 121.585 52.1888 121.443 51.9883C121.307 51.7832 121.238 51.569 121.238 51.3457C121.238 51.0632 121.318 50.8239 121.478 50.6279C121.637 50.432 121.874 50.2383 122.188 50.0469C121.797 49.8783 121.478 49.6048 121.231 49.2266C120.99 48.8438 120.869 48.3971 120.869 47.8867C120.869 47.0664 121.127 46.4307 121.642 45.9795C122.161 45.5283 122.899 45.3027 123.856 45.3027C124.071 45.3027 124.294 45.3187 124.526 45.3506C124.763 45.3779 124.941 45.4076 125.06 45.4395H127.678ZM121.737 54.1758C121.737 54.5221 121.892 54.7887 122.202 54.9756C122.517 55.1624 122.956 55.2559 123.521 55.2559C124.396 55.2559 125.048 55.1305 125.477 54.8799C125.905 54.6292 126.119 54.2965 126.119 53.8818C126.119 53.5537 126.001 53.319 125.764 53.1777C125.531 53.041 125.096 52.9727 124.458 52.9727H123.241C122.781 52.9727 122.414 53.0798 122.141 53.2939C121.872 53.5127 121.737 53.8066 121.737 54.1758ZM122.428 47.8867C122.428 48.3607 122.549 48.7253 122.79 48.9805C123.036 49.2357 123.387 49.3633 123.843 49.3633C124.772 49.3633 125.237 48.8665 125.237 47.873C125.237 47.3809 125.121 47.0026 124.889 46.7383C124.661 46.4694 124.312 46.335 123.843 46.335C123.378 46.335 123.025 46.4671 122.783 46.7314C122.546 46.9958 122.428 47.3809 122.428 47.8867Z" class="path-18"/> -<path d="M78.8145 70H77.8184V62.3184H75.1055V61.4336H81.5273V62.3184H78.8145V70ZM83.6484 70H82.6758V63.5781H83.6484V70ZM82.5938 61.8379C82.5938 61.6152 82.6484 61.4531 82.7578 61.3516C82.8672 61.2461 83.0039 61.1934 83.168 61.1934C83.3242 61.1934 83.459 61.2461 83.5723 61.3516C83.6855 61.457 83.7422 61.6191 83.7422 61.8379C83.7422 62.0566 83.6855 62.2207 83.5723 62.3301C83.459 62.4355 83.3242 62.4883 83.168 62.4883C83.0039 62.4883 82.8672 62.4355 82.7578 62.3301C82.6484 62.2207 82.5938 62.0566 82.5938 61.8379ZM87.7852 69.3145C87.957 69.3145 88.123 69.3027 88.2832 69.2793C88.4434 69.252 88.5703 69.2246 88.6641 69.1973V69.9414C88.5586 69.9922 88.4023 70.0332 88.1953 70.0645C87.9922 70.0996 87.8086 70.1172 87.6445 70.1172C86.4023 70.1172 85.7812 69.4629 85.7812 68.1543V64.334H84.8613V63.8652L85.7812 63.4609L86.1914 62.0898H86.7539V63.5781H88.6172V64.334H86.7539V68.1133C86.7539 68.5 86.8457 68.7969 87.0293 69.0039C87.2129 69.2109 87.4648 69.3145 87.7852 69.3145ZM90.9258 70H89.9531V60.8828H90.9258V70ZM95.7012 70.1172C94.752 70.1172 94.002 69.8281 93.4512 69.25C92.9043 68.6719 92.6309 67.8691 92.6309 66.8418C92.6309 65.8066 92.8848 64.9844 93.3926 64.375C93.9043 63.7656 94.5898 63.4609 95.4492 63.4609C96.2539 63.4609 96.8906 63.7266 97.3594 64.2578C97.8281 64.7852 98.0625 65.4824 98.0625 66.3496V66.9648H93.6387C93.6582 67.7188 93.8477 68.291 94.207 68.6816C94.5703 69.0723 95.0801 69.2676 95.7363 69.2676C96.4277 69.2676 97.1113 69.123 97.7871 68.834V69.7012C97.4434 69.8496 97.1172 69.9551 96.8086 70.0176C96.5039 70.084 96.1348 70.1172 95.7012 70.1172ZM95.4375 64.2754C94.9219 64.2754 94.5098 64.4434 94.2012 64.7793C93.8965 65.1152 93.7168 65.5801 93.6621 66.1738H97.0195C97.0195 65.5605 96.8828 65.0918 96.6094 64.7676C96.3359 64.4395 95.9453 64.2754 95.4375 64.2754Z" class="path-2"/> -<path d="M83.0156 81.6348C83.0156 83.0488 82.6309 84.1309 81.8613 84.8809C81.0957 85.627 79.9922 86 78.5508 86H76.1777V77.4336H78.8027C80.1348 77.4336 81.1699 77.8027 81.9082 78.541C82.6465 79.2793 83.0156 80.3105 83.0156 81.6348ZM81.9609 81.6699C81.9609 80.5527 81.6797 79.7109 81.1172 79.1445C80.5586 78.5781 79.7266 78.2949 78.6211 78.2949H77.1738V85.1387H78.3867C79.5742 85.1387 80.4668 84.8477 81.0645 84.2656C81.6621 83.6797 81.9609 82.8145 81.9609 81.6699ZM87.498 86.1172C86.5488 86.1172 85.7988 85.8281 85.248 85.25C84.7012 84.6719 84.4277 83.8691 84.4277 82.8418C84.4277 81.8066 84.6816 80.9844 85.1895 80.375C85.7012 79.7656 86.3867 79.4609 87.2461 79.4609C88.0508 79.4609 88.6875 79.7266 89.1562 80.2578C89.625 80.7852 89.8594 81.4824 89.8594 82.3496V82.9648H85.4355C85.4551 83.7188 85.6445 84.291 86.0039 84.6816C86.3672 85.0723 86.877 85.2676 87.5332 85.2676C88.2246 85.2676 88.9082 85.123 89.584 84.834V85.7012C89.2402 85.8496 88.9141 85.9551 88.6055 86.0176C88.3008 86.084 87.9316 86.1172 87.498 86.1172ZM87.2344 80.2754C86.7188 80.2754 86.3066 80.4434 85.998 80.7793C85.6934 81.1152 85.5137 81.5801 85.459 82.1738H88.8164C88.8164 81.5605 88.6797 81.0918 88.4062 80.7676C88.1328 80.4395 87.7422 80.2754 87.2344 80.2754ZM95.666 84.248C95.666 84.8457 95.4434 85.3066 94.998 85.6309C94.5527 85.9551 93.9277 86.1172 93.123 86.1172C92.2715 86.1172 91.6074 85.9824 91.1309 85.7129V84.8105C91.4395 84.9668 91.7695 85.0898 92.1211 85.1797C92.4766 85.2695 92.8184 85.3145 93.1465 85.3145C93.6543 85.3145 94.0449 85.2344 94.3184 85.0742C94.5918 84.9102 94.7285 84.6621 94.7285 84.3301C94.7285 84.0801 94.6191 83.8672 94.4004 83.6914C94.1855 83.5117 93.7637 83.3008 93.1348 83.0586C92.5371 82.8359 92.1113 82.6426 91.8574 82.4785C91.6074 82.3105 91.4199 82.1211 91.2949 81.9102C91.1738 81.6992 91.1133 81.4473 91.1133 81.1543C91.1133 80.6309 91.3262 80.2188 91.752 79.918C92.1777 79.6133 92.7617 79.4609 93.5039 79.4609C94.1953 79.4609 94.8711 79.6016 95.5312 79.8828L95.1855 80.6738C94.541 80.4082 93.957 80.2754 93.4336 80.2754C92.9727 80.2754 92.625 80.3477 92.3906 80.4922C92.1562 80.6367 92.0391 80.8359 92.0391 81.0898C92.0391 81.2617 92.082 81.4082 92.168 81.5293C92.2578 81.6504 92.4004 81.7656 92.5957 81.875C92.791 81.9844 93.166 82.1426 93.7207 82.3496C94.4824 82.627 94.9961 82.9062 95.2617 83.1875C95.5312 83.4688 95.666 83.8223 95.666 84.248ZM99.8203 86.1172C98.8906 86.1172 98.1699 85.832 97.6582 85.2617C97.1504 84.6875 96.8965 83.877 96.8965 82.8301C96.8965 81.7559 97.1543 80.9258 97.6699 80.3398C98.1895 79.7539 98.9277 79.4609 99.8848 79.4609C100.193 79.4609 100.502 79.4941 100.811 79.5605C101.119 79.627 101.361 79.7051 101.537 79.7949L101.238 80.6211C101.023 80.5352 100.789 80.4648 100.535 80.4102C100.281 80.3516 100.057 80.3223 99.8613 80.3223C98.5566 80.3223 97.9043 81.1543 97.9043 82.8184C97.9043 83.6074 98.0625 84.2129 98.3789 84.6348C98.6992 85.0566 99.1719 85.2676 99.7969 85.2676C100.332 85.2676 100.881 85.1523 101.443 84.9219V85.7832C101.014 86.0059 100.473 86.1172 99.8203 86.1172ZM105.902 79.4609C106.188 79.4609 106.443 79.4844 106.67 79.5312L106.535 80.4336C106.27 80.375 106.035 80.3457 105.832 80.3457C105.312 80.3457 104.867 80.5566 104.496 80.9785C104.129 81.4004 103.945 81.9258 103.945 82.5547V86H102.973V79.5781H103.775L103.887 80.7676H103.934C104.172 80.3496 104.459 80.0273 104.795 79.8008C105.131 79.5742 105.5 79.4609 105.902 79.4609ZM108.844 86H107.871V79.5781H108.844V86ZM107.789 77.8379C107.789 77.6152 107.844 77.4531 107.953 77.3516C108.062 77.2461 108.199 77.1934 108.363 77.1934C108.52 77.1934 108.654 77.2461 108.768 77.3516C108.881 77.457 108.938 77.6191 108.938 77.8379C108.938 78.0566 108.881 78.2207 108.768 78.3301C108.654 78.4355 108.52 78.4883 108.363 78.4883C108.199 78.4883 108.062 78.4355 107.953 78.3301C107.844 78.2207 107.789 78.0566 107.789 77.8379ZM113.895 86.1172C113.477 86.1172 113.094 86.041 112.746 85.8887C112.402 85.7324 112.113 85.4941 111.879 85.1738H111.809C111.855 85.5488 111.879 85.9043 111.879 86.2402V88.8828H110.906V79.5781H111.697L111.832 80.457H111.879C112.129 80.1055 112.42 79.8516 112.752 79.6953C113.084 79.5391 113.465 79.4609 113.895 79.4609C114.746 79.4609 115.402 79.752 115.863 80.334C116.328 80.916 116.561 81.7324 116.561 82.7832C116.561 83.8379 116.324 84.6582 115.852 85.2441C115.383 85.8262 114.73 86.1172 113.895 86.1172ZM113.754 80.2871C113.098 80.2871 112.623 80.4688 112.33 80.832C112.037 81.1953 111.887 81.7734 111.879 82.5664V82.7832C111.879 83.6855 112.029 84.332 112.33 84.7227C112.631 85.1094 113.113 85.3027 113.777 85.3027C114.332 85.3027 114.766 85.0781 115.078 84.6289C115.395 84.1797 115.553 83.5605 115.553 82.7715C115.553 81.9707 115.395 81.3574 115.078 80.9316C114.766 80.502 114.324 80.2871 113.754 80.2871ZM120.34 85.3145C120.512 85.3145 120.678 85.3027 120.838 85.2793C120.998 85.252 121.125 85.2246 121.219 85.1973V85.9414C121.113 85.9922 120.957 86.0332 120.75 86.0645C120.547 86.0996 120.363 86.1172 120.199 86.1172C118.957 86.1172 118.336 85.4629 118.336 84.1543V80.334H117.416V79.8652L118.336 79.4609L118.746 78.0898H119.309V79.5781H121.172V80.334H119.309V84.1133C119.309 84.5 119.4 84.7969 119.584 85.0039C119.768 85.2109 120.02 85.3145 120.34 85.3145ZM123.48 86H122.508V79.5781H123.48V86ZM122.426 77.8379C122.426 77.6152 122.48 77.4531 122.59 77.3516C122.699 77.2461 122.836 77.1934 123 77.1934C123.156 77.1934 123.291 77.2461 123.404 77.3516C123.518 77.457 123.574 77.6191 123.574 77.8379C123.574 78.0566 123.518 78.2207 123.404 78.3301C123.291 78.4355 123.156 78.4883 123 78.4883C122.836 78.4883 122.699 78.4355 122.59 78.3301C122.48 78.2207 122.426 78.0566 122.426 77.8379ZM131.086 82.7832C131.086 83.8301 130.822 84.6484 130.295 85.2383C129.768 85.8242 129.039 86.1172 128.109 86.1172C127.535 86.1172 127.025 85.9824 126.58 85.7129C126.135 85.4434 125.791 85.0566 125.549 84.5527C125.307 84.0488 125.186 83.459 125.186 82.7832C125.186 81.7363 125.447 80.9219 125.971 80.3398C126.494 79.7539 127.221 79.4609 128.15 79.4609C129.049 79.4609 129.762 79.7598 130.289 80.3574C130.82 80.9551 131.086 81.7637 131.086 82.7832ZM126.193 82.7832C126.193 83.6035 126.357 84.2285 126.686 84.6582C127.014 85.0879 127.496 85.3027 128.133 85.3027C128.77 85.3027 129.252 85.0898 129.58 84.6641C129.912 84.2344 130.078 83.6074 130.078 82.7832C130.078 81.9668 129.912 81.3477 129.58 80.9258C129.252 80.5 128.766 80.2871 128.121 80.2871C127.484 80.2871 127.004 80.4961 126.68 80.9141C126.355 81.332 126.193 81.9551 126.193 82.7832ZM137.191 86V81.8457C137.191 81.3223 137.072 80.9316 136.834 80.6738C136.596 80.416 136.223 80.2871 135.715 80.2871C135.043 80.2871 134.551 80.4688 134.238 80.832C133.926 81.1953 133.77 81.7949 133.77 82.6309V86H132.797V79.5781H133.588L133.746 80.457H133.793C133.992 80.1406 134.271 79.8965 134.631 79.7246C134.99 79.5488 135.391 79.4609 135.832 79.4609C136.605 79.4609 137.188 79.6484 137.578 80.0234C137.969 80.3945 138.164 80.9902 138.164 81.8105V86H137.191Z" class="path-3"/> -<circle cx="47" cy="141" r="11.5" class="circle-2"/> -<path d="M49.9062 145H44.0996V143.957L46.3086 141.736C46.9609 141.068 47.3926 140.596 47.6035 140.318C47.8184 140.037 47.9746 139.773 48.0723 139.527C48.1699 139.281 48.2188 139.018 48.2188 138.736C48.2188 138.35 48.1016 138.045 47.8672 137.822C47.6367 137.6 47.3164 137.488 46.9062 137.488C46.5781 137.488 46.2598 137.549 45.9512 137.67C45.6465 137.791 45.293 138.01 44.8906 138.326L44.1465 137.418C44.623 137.016 45.0859 136.73 45.5352 136.562C45.9844 136.395 46.4629 136.311 46.9707 136.311C47.7676 136.311 48.4062 136.52 48.8867 136.938C49.3672 137.352 49.6074 137.91 49.6074 138.613C49.6074 139 49.5371 139.367 49.3965 139.715C49.2598 140.062 49.0469 140.422 48.7578 140.793C48.4727 141.16 47.9961 141.658 47.3281 142.287L45.8398 143.729V143.787H49.9062V145Z" class="path-4"/> -<path d="M82.9365 137.027C82.9365 138.071 82.5947 138.871 81.9111 139.427C81.2275 139.983 80.2546 140.261 78.9922 140.261H77.9531V144H76.3193V134.006H79.1973C80.446 134.006 81.3802 134.261 82 134.771C82.6243 135.282 82.9365 136.034 82.9365 137.027ZM77.9531 138.887H78.8213C79.6598 138.887 80.2751 138.741 80.667 138.449C81.0589 138.158 81.2549 137.702 81.2549 137.082C81.2549 136.508 81.0794 136.079 80.7285 135.797C80.3776 135.514 79.8307 135.373 79.0879 135.373H77.9531V138.887ZM89.4922 144L89.1709 142.947H89.1162C88.7516 143.408 88.3848 143.722 88.0156 143.891C87.6465 144.055 87.1725 144.137 86.5938 144.137C85.8509 144.137 85.2699 143.936 84.8506 143.535C84.4359 143.134 84.2285 142.567 84.2285 141.833C84.2285 141.054 84.5179 140.466 85.0967 140.069C85.6755 139.673 86.5573 139.456 87.7422 139.42L89.0479 139.379V138.976C89.0479 138.493 88.9339 138.132 88.7061 137.896C88.4827 137.654 88.1341 137.533 87.6602 137.533C87.2728 137.533 86.9014 137.59 86.5459 137.704C86.1904 137.818 85.8486 137.952 85.5205 138.107L85.001 136.959C85.4111 136.745 85.86 136.583 86.3477 136.474C86.8353 136.36 87.2956 136.303 87.7285 136.303C88.6901 136.303 89.4147 136.512 89.9023 136.932C90.3945 137.351 90.6406 138.009 90.6406 138.907V144H89.4922ZM87.0996 142.906C87.6829 142.906 88.1501 142.744 88.501 142.421C88.8564 142.093 89.0342 141.635 89.0342 141.047V140.391L88.0635 140.432C87.307 140.459 86.7555 140.587 86.4092 140.814C86.0674 141.038 85.8965 141.382 85.8965 141.847C85.8965 142.184 85.9967 142.446 86.1973 142.633C86.3978 142.815 86.6986 142.906 87.0996 142.906ZM96.7178 136.303C97.0413 136.303 97.3079 136.326 97.5176 136.371L97.3604 137.868C97.1325 137.813 96.8955 137.786 96.6494 137.786C96.0068 137.786 95.485 137.996 95.084 138.415C94.6875 138.834 94.4893 139.379 94.4893 140.049V144H92.8828V136.439H94.1406L94.3525 137.772H94.4346C94.6852 137.321 95.0111 136.964 95.4121 136.699C95.8177 136.435 96.2529 136.303 96.7178 136.303ZM103.656 144L103.335 142.947H103.28C102.916 143.408 102.549 143.722 102.18 143.891C101.811 144.055 101.337 144.137 100.758 144.137C100.015 144.137 99.4339 143.936 99.0146 143.535C98.5999 143.134 98.3926 142.567 98.3926 141.833C98.3926 141.054 98.682 140.466 99.2607 140.069C99.8395 139.673 100.721 139.456 101.906 139.42L103.212 139.379V138.976C103.212 138.493 103.098 138.132 102.87 137.896C102.647 137.654 102.298 137.533 101.824 137.533C101.437 137.533 101.065 137.59 100.71 137.704C100.354 137.818 100.013 137.952 99.6846 138.107L99.165 136.959C99.5752 136.745 100.024 136.583 100.512 136.474C100.999 136.36 101.46 136.303 101.893 136.303C102.854 136.303 103.579 136.512 104.066 136.932C104.559 137.351 104.805 138.009 104.805 138.907V144H103.656ZM101.264 142.906C101.847 142.906 102.314 142.744 102.665 142.421C103.021 142.093 103.198 141.635 103.198 141.047V140.391L102.228 140.432C101.471 140.459 100.92 140.587 100.573 140.814C100.231 141.038 100.061 141.382 100.061 141.847C100.061 142.184 100.161 142.446 100.361 142.633C100.562 142.815 100.863 142.906 101.264 142.906ZM113.418 144H111.805V139.338C111.805 138.759 111.695 138.328 111.477 138.046C111.258 137.759 110.916 137.615 110.451 137.615C109.831 137.615 109.376 137.818 109.084 138.224C108.797 138.625 108.653 139.295 108.653 140.233V144H107.047V136.439H108.305L108.53 137.431H108.612C108.822 137.071 109.125 136.793 109.521 136.597C109.923 136.401 110.362 136.303 110.841 136.303C112.003 136.303 112.773 136.699 113.151 137.492H113.261C113.484 137.118 113.799 136.827 114.204 136.617C114.61 136.408 115.075 136.303 115.599 136.303C116.501 136.303 117.157 136.531 117.567 136.986C117.982 137.442 118.189 138.137 118.189 139.071V144H116.583V139.338C116.583 138.759 116.471 138.328 116.248 138.046C116.029 137.759 115.688 137.615 115.223 137.615C114.598 137.615 114.14 137.811 113.849 138.203C113.562 138.59 113.418 139.188 113.418 139.994V144ZM123.733 144.137C122.558 144.137 121.637 143.795 120.972 143.111C120.311 142.423 119.98 141.478 119.98 140.274C119.98 139.039 120.288 138.069 120.903 137.362C121.519 136.656 122.364 136.303 123.439 136.303C124.438 136.303 125.226 136.606 125.805 137.212C126.383 137.818 126.673 138.652 126.673 139.714V140.582H121.635C121.658 141.316 121.856 141.881 122.229 142.277C122.603 142.669 123.13 142.865 123.809 142.865C124.255 142.865 124.67 142.824 125.053 142.742C125.44 142.656 125.855 142.514 126.297 142.318V143.624C125.905 143.811 125.508 143.943 125.107 144.021C124.706 144.098 124.248 144.137 123.733 144.137ZM123.439 137.52C122.929 137.52 122.519 137.681 122.209 138.005C121.904 138.328 121.721 138.8 121.662 139.42H125.094C125.085 138.796 124.934 138.324 124.643 138.005C124.351 137.681 123.95 137.52 123.439 137.52ZM131.314 142.838C131.706 142.838 132.098 142.776 132.49 142.653V143.863C132.312 143.941 132.082 144.005 131.8 144.055C131.522 144.109 131.232 144.137 130.932 144.137C129.41 144.137 128.648 143.335 128.648 141.73V137.656H127.616V136.945L128.724 136.357L129.271 134.758H130.262V136.439H132.415V137.656H130.262V141.703C130.262 142.09 130.357 142.378 130.549 142.564C130.745 142.747 131 142.838 131.314 142.838ZM137.31 144.137C136.134 144.137 135.213 143.795 134.548 143.111C133.887 142.423 133.557 141.478 133.557 140.274C133.557 139.039 133.864 138.069 134.479 137.362C135.095 136.656 135.94 136.303 137.016 136.303C138.014 136.303 138.802 136.606 139.381 137.212C139.96 137.818 140.249 138.652 140.249 139.714V140.582H135.211C135.234 141.316 135.432 141.881 135.806 142.277C136.179 142.669 136.706 142.865 137.385 142.865C137.831 142.865 138.246 142.824 138.629 142.742C139.016 142.656 139.431 142.514 139.873 142.318V143.624C139.481 143.811 139.085 143.943 138.684 144.021C138.283 144.098 137.825 144.137 137.31 144.137ZM137.016 137.52C136.505 137.52 136.095 137.681 135.785 138.005C135.48 138.328 135.298 138.8 135.238 139.42H138.67C138.661 138.796 138.51 138.324 138.219 138.005C137.927 137.681 137.526 137.52 137.016 137.52ZM145.909 136.303C146.233 136.303 146.499 136.326 146.709 136.371L146.552 137.868C146.324 137.813 146.087 137.786 145.841 137.786C145.198 137.786 144.676 137.996 144.275 138.415C143.879 138.834 143.681 139.379 143.681 140.049V144H142.074V136.439H143.332L143.544 137.772H143.626C143.877 137.321 144.202 136.964 144.604 136.699C145.009 136.435 145.444 136.303 145.909 136.303ZM153.196 141.847C153.196 142.585 152.927 143.152 152.39 143.549C151.852 143.941 151.082 144.137 150.079 144.137C149.072 144.137 148.263 143.984 147.652 143.679V142.291C148.541 142.701 149.368 142.906 150.134 142.906C151.123 142.906 151.617 142.608 151.617 142.011C151.617 141.819 151.562 141.66 151.453 141.532C151.344 141.405 151.164 141.272 150.913 141.136C150.662 140.999 150.314 140.844 149.867 140.671C148.997 140.334 148.407 139.996 148.097 139.659C147.791 139.322 147.639 138.884 147.639 138.347C147.639 137.7 147.898 137.198 148.418 136.843C148.942 136.483 149.653 136.303 150.551 136.303C151.439 136.303 152.28 136.483 153.073 136.843L152.554 138.053C151.738 137.715 151.052 137.547 150.496 137.547C149.648 137.547 149.225 137.788 149.225 138.271C149.225 138.508 149.334 138.709 149.553 138.873C149.776 139.037 150.259 139.263 151.002 139.55C151.626 139.791 152.08 140.012 152.362 140.213C152.645 140.413 152.854 140.646 152.991 140.91C153.128 141.17 153.196 141.482 153.196 141.847Z" class="path-5"/> -<path d="M79.8457 153.201C78.9043 153.201 78.1602 153.516 77.6133 154.145C77.0703 154.77 76.7988 155.627 76.7988 156.717C76.7988 157.838 77.0605 158.705 77.584 159.318C78.1113 159.928 78.8613 160.232 79.834 160.232C80.4316 160.232 81.1133 160.125 81.8789 159.91V160.783C81.2852 161.006 80.5527 161.117 79.6816 161.117C78.4199 161.117 77.4453 160.734 76.7578 159.969C76.0742 159.203 75.7324 158.115 75.7324 156.705C75.7324 155.822 75.8965 155.049 76.2246 154.385C76.5566 153.721 77.0332 153.209 77.6543 152.85C78.2793 152.49 79.0137 152.311 79.8574 152.311C80.7559 152.311 81.541 152.475 82.2129 152.803L81.791 153.658C81.1426 153.354 80.4941 153.201 79.8457 153.201ZM89.1445 157.783C89.1445 158.83 88.8809 159.648 88.3535 160.238C87.8262 160.824 87.0977 161.117 86.168 161.117C85.5938 161.117 85.084 160.982 84.6387 160.713C84.1934 160.443 83.8496 160.057 83.6074 159.553C83.3652 159.049 83.2441 158.459 83.2441 157.783C83.2441 156.736 83.5059 155.922 84.0293 155.34C84.5527 154.754 85.2793 154.461 86.209 154.461C87.1074 154.461 87.8203 154.76 88.3477 155.357C88.8789 155.955 89.1445 156.764 89.1445 157.783ZM84.252 157.783C84.252 158.604 84.416 159.229 84.7441 159.658C85.0723 160.088 85.5547 160.303 86.1914 160.303C86.8281 160.303 87.3105 160.09 87.6387 159.664C87.9707 159.234 88.1367 158.607 88.1367 157.783C88.1367 156.967 87.9707 156.348 87.6387 155.926C87.3105 155.5 86.8242 155.287 86.1797 155.287C85.543 155.287 85.0625 155.496 84.7383 155.914C84.4141 156.332 84.252 156.955 84.252 157.783ZM91.7695 154.578V158.744C91.7695 159.268 91.8887 159.658 92.127 159.916C92.3652 160.174 92.7383 160.303 93.2461 160.303C93.918 160.303 94.4082 160.119 94.7168 159.752C95.0293 159.385 95.1855 158.785 95.1855 157.953V154.578H96.1582V161H95.3555L95.2148 160.139H95.1621C94.9629 160.455 94.6855 160.697 94.3301 160.865C93.9785 161.033 93.5762 161.117 93.123 161.117C92.3418 161.117 91.7559 160.932 91.3652 160.561C90.9785 160.189 90.7852 159.596 90.7852 158.779V154.578H91.7695ZM101.156 154.461C101.441 154.461 101.697 154.484 101.924 154.531L101.789 155.434C101.523 155.375 101.289 155.346 101.086 155.346C100.566 155.346 100.121 155.557 99.75 155.979C99.3828 156.4 99.1992 156.926 99.1992 157.555V161H98.2266V154.578H99.0293L99.1406 155.768H99.1875C99.4258 155.35 99.7129 155.027 100.049 154.801C100.385 154.574 100.754 154.461 101.156 154.461ZM105.199 160.314C105.371 160.314 105.537 160.303 105.697 160.279C105.857 160.252 105.984 160.225 106.078 160.197V160.941C105.973 160.992 105.816 161.033 105.609 161.064C105.406 161.1 105.223 161.117 105.059 161.117C103.816 161.117 103.195 160.463 103.195 159.154V155.334H102.275V154.865L103.195 154.461L103.605 153.09H104.168V154.578H106.031V155.334H104.168V159.113C104.168 159.5 104.26 159.797 104.443 160.004C104.627 160.211 104.879 160.314 105.199 160.314Z" class="path-6"/> -<path d="M79.8457 169.201C78.9043 169.201 78.1602 169.516 77.6133 170.145C77.0703 170.77 76.7988 171.627 76.7988 172.717C76.7988 173.838 77.0605 174.705 77.584 175.318C78.1113 175.928 78.8613 176.232 79.834 176.232C80.4316 176.232 81.1133 176.125 81.8789 175.91V176.783C81.2852 177.006 80.5527 177.117 79.6816 177.117C78.4199 177.117 77.4453 176.734 76.7578 175.969C76.0742 175.203 75.7324 174.115 75.7324 172.705C75.7324 171.822 75.8965 171.049 76.2246 170.385C76.5566 169.721 77.0332 169.209 77.6543 168.85C78.2793 168.49 79.0137 168.311 79.8574 168.311C80.7559 168.311 81.541 168.475 82.2129 168.803L81.791 169.658C81.1426 169.354 80.4941 169.201 79.8457 169.201ZM87.5508 177L87.3574 176.086H87.3105C86.9902 176.488 86.6699 176.762 86.3496 176.906C86.0332 177.047 85.6367 177.117 85.1602 177.117C84.5234 177.117 84.0234 176.953 83.6602 176.625C83.3008 176.297 83.1211 175.83 83.1211 175.225C83.1211 173.928 84.1582 173.248 86.2324 173.186L87.3223 173.15V172.752C87.3223 172.248 87.2129 171.877 86.9941 171.639C86.7793 171.396 86.4336 171.275 85.957 171.275C85.4219 171.275 84.8164 171.439 84.1406 171.768L83.8418 171.023C84.1582 170.852 84.5039 170.717 84.8789 170.619C85.2578 170.521 85.6367 170.473 86.0156 170.473C86.7812 170.473 87.3477 170.643 87.7148 170.982C88.0859 171.322 88.2715 171.867 88.2715 172.617V177H87.5508ZM85.3535 176.314C85.959 176.314 86.4336 176.148 86.7773 175.816C87.125 175.484 87.2988 175.02 87.2988 174.422V173.842L86.3262 173.883C85.5527 173.91 84.9941 174.031 84.6504 174.246C84.3105 174.457 84.1406 174.787 84.1406 175.236C84.1406 175.588 84.2461 175.855 84.457 176.039C84.6719 176.223 84.9707 176.314 85.3535 176.314ZM92.3555 176.314C92.5273 176.314 92.6934 176.303 92.8535 176.279C93.0137 176.252 93.1406 176.225 93.2344 176.197V176.941C93.1289 176.992 92.9727 177.033 92.7656 177.064C92.5625 177.1 92.3789 177.117 92.2148 177.117C90.9727 177.117 90.3516 176.463 90.3516 175.154V171.334H89.4316V170.865L90.3516 170.461L90.7617 169.09H91.3242V170.578H93.1875V171.334H91.3242V175.113C91.3242 175.5 91.416 175.797 91.5996 176.004C91.7832 176.211 92.0352 176.314 92.3555 176.314ZM97.2363 177.117C96.2871 177.117 95.5371 176.828 94.9863 176.25C94.4395 175.672 94.166 174.869 94.166 173.842C94.166 172.807 94.4199 171.984 94.9277 171.375C95.4395 170.766 96.125 170.461 96.9844 170.461C97.7891 170.461 98.4258 170.727 98.8945 171.258C99.3633 171.785 99.5977 172.482 99.5977 173.35V173.965H95.1738C95.1934 174.719 95.3828 175.291 95.7422 175.682C96.1055 176.072 96.6152 176.268 97.2715 176.268C97.9629 176.268 98.6465 176.123 99.3223 175.834V176.701C98.9785 176.85 98.6523 176.955 98.3438 177.018C98.0391 177.084 97.6699 177.117 97.2363 177.117ZM96.9727 171.275C96.457 171.275 96.0449 171.443 95.7363 171.779C95.4316 172.115 95.252 172.58 95.1973 173.174H98.5547C98.5547 172.561 98.418 172.092 98.1445 171.768C97.8711 171.439 97.4805 171.275 96.9727 171.275ZM106.518 170.578V171.193L105.328 171.334C105.438 171.471 105.535 171.65 105.621 171.873C105.707 172.092 105.75 172.34 105.75 172.617C105.75 173.246 105.535 173.748 105.105 174.123C104.676 174.498 104.086 174.686 103.336 174.686C103.145 174.686 102.965 174.67 102.797 174.639C102.383 174.857 102.176 175.133 102.176 175.465C102.176 175.641 102.248 175.771 102.393 175.857C102.537 175.939 102.785 175.98 103.137 175.98H104.273C104.969 175.98 105.502 176.127 105.873 176.42C106.248 176.713 106.436 177.139 106.436 177.697C106.436 178.408 106.15 178.949 105.58 179.32C105.01 179.695 104.178 179.883 103.084 179.883C102.244 179.883 101.596 179.727 101.139 179.414C100.686 179.102 100.459 178.66 100.459 178.09C100.459 177.699 100.584 177.361 100.834 177.076C101.084 176.791 101.436 176.598 101.889 176.496C101.725 176.422 101.586 176.307 101.473 176.15C101.363 175.994 101.309 175.812 101.309 175.605C101.309 175.371 101.371 175.166 101.496 174.99C101.621 174.814 101.818 174.645 102.088 174.48C101.756 174.344 101.484 174.111 101.273 173.783C101.066 173.455 100.963 173.08 100.963 172.658C100.963 171.955 101.174 171.414 101.596 171.035C102.018 170.652 102.615 170.461 103.389 170.461C103.725 170.461 104.027 170.5 104.297 170.578H106.518ZM101.396 178.078C101.396 178.426 101.543 178.689 101.836 178.869C102.129 179.049 102.549 179.139 103.096 179.139C103.912 179.139 104.516 179.016 104.906 178.77C105.301 178.527 105.498 178.197 105.498 177.779C105.498 177.432 105.391 177.189 105.176 177.053C104.961 176.92 104.557 176.854 103.963 176.854H102.797C102.355 176.854 102.012 176.959 101.766 177.17C101.52 177.381 101.396 177.684 101.396 178.078ZM101.924 172.635C101.924 173.084 102.051 173.424 102.305 173.654C102.559 173.885 102.912 174 103.365 174C104.314 174 104.789 173.539 104.789 172.617C104.789 171.652 104.309 171.17 103.348 171.17C102.891 171.17 102.539 171.293 102.293 171.539C102.047 171.785 101.924 172.15 101.924 172.635ZM113.379 173.783C113.379 174.83 113.115 175.648 112.588 176.238C112.061 176.824 111.332 177.117 110.402 177.117C109.828 177.117 109.318 176.982 108.873 176.713C108.428 176.443 108.084 176.057 107.842 175.553C107.6 175.049 107.479 174.459 107.479 173.783C107.479 172.736 107.74 171.922 108.264 171.34C108.787 170.754 109.514 170.461 110.443 170.461C111.342 170.461 112.055 170.76 112.582 171.357C113.113 171.955 113.379 172.764 113.379 173.783ZM108.486 173.783C108.486 174.604 108.65 175.229 108.979 175.658C109.307 176.088 109.789 176.303 110.426 176.303C111.062 176.303 111.545 176.09 111.873 175.664C112.205 175.234 112.371 174.607 112.371 173.783C112.371 172.967 112.205 172.348 111.873 171.926C111.545 171.5 111.059 171.287 110.414 171.287C109.777 171.287 109.297 171.496 108.973 171.914C108.648 172.332 108.486 172.955 108.486 173.783ZM118.02 170.461C118.305 170.461 118.561 170.484 118.787 170.531L118.652 171.434C118.387 171.375 118.152 171.346 117.949 171.346C117.43 171.346 116.984 171.557 116.613 171.979C116.246 172.4 116.062 172.926 116.062 173.555V177H115.09V170.578H115.893L116.004 171.768H116.051C116.289 171.35 116.576 171.027 116.912 170.801C117.248 170.574 117.617 170.461 118.02 170.461ZM118.969 170.578H120.012L121.418 174.24C121.727 175.076 121.918 175.68 121.992 176.051H122.039C122.09 175.852 122.195 175.512 122.355 175.031C122.52 174.547 123.051 173.062 123.949 170.578H124.992L122.232 177.891C121.959 178.613 121.639 179.125 121.271 179.426C120.908 179.73 120.461 179.883 119.93 179.883C119.633 179.883 119.34 179.85 119.051 179.783V179.004C119.266 179.051 119.506 179.074 119.771 179.074C120.439 179.074 120.916 178.699 121.201 177.949L121.559 177.035L118.969 170.578Z" class="path-7"/> -<path d="M74.9297 195.256C74.5625 195.256 74.2734 195.203 74.0625 195.098V194.248C74.3398 194.326 74.6289 194.365 74.9297 194.365C75.3164 194.365 75.6094 194.248 75.8086 194.014C76.0117 193.779 76.1133 193.441 76.1133 193V184.434H77.1094V192.918C77.1094 193.66 76.9219 194.234 76.5469 194.641C76.1719 195.051 75.6328 195.256 74.9297 195.256ZM80.1562 186.578V190.744C80.1562 191.268 80.2754 191.658 80.5137 191.916C80.752 192.174 81.125 192.303 81.6328 192.303C82.3047 192.303 82.7949 192.119 83.1035 191.752C83.416 191.385 83.5723 190.785 83.5723 189.953V186.578H84.5449V193H83.7422L83.6016 192.139H83.5488C83.3496 192.455 83.0723 192.697 82.7168 192.865C82.3652 193.033 81.9629 193.117 81.5098 193.117C80.7285 193.117 80.1426 192.932 79.752 192.561C79.3652 192.189 79.1719 191.596 79.1719 190.779V186.578H80.1562ZM89.543 186.461C89.8281 186.461 90.084 186.484 90.3105 186.531L90.1758 187.434C89.9102 187.375 89.6758 187.346 89.4727 187.346C88.9531 187.346 88.5078 187.557 88.1367 187.979C87.7695 188.4 87.5859 188.926 87.5859 189.555V193H86.6133V186.578H87.416L87.5273 187.768H87.5742C87.8125 187.35 88.0996 187.027 88.4355 186.801C88.7715 186.574 89.1406 186.461 89.543 186.461ZM97.0547 189.783C97.0547 190.83 96.791 191.648 96.2637 192.238C95.7363 192.824 95.0078 193.117 94.0781 193.117C93.5039 193.117 92.9941 192.982 92.5488 192.713C92.1035 192.443 91.7598 192.057 91.5176 191.553C91.2754 191.049 91.1543 190.459 91.1543 189.783C91.1543 188.736 91.416 187.922 91.9395 187.34C92.4629 186.754 93.1895 186.461 94.1191 186.461C95.0176 186.461 95.7305 186.76 96.2578 187.357C96.7891 187.955 97.0547 188.764 97.0547 189.783ZM92.1621 189.783C92.1621 190.604 92.3262 191.229 92.6543 191.658C92.9824 192.088 93.4648 192.303 94.1016 192.303C94.7383 192.303 95.2207 192.09 95.5488 191.664C95.8809 191.234 96.0469 190.607 96.0469 189.783C96.0469 188.967 95.8809 188.348 95.5488 187.926C95.2207 187.5 94.7344 187.287 94.0898 187.287C93.4531 187.287 92.9727 187.496 92.6484 187.914C92.3242 188.332 92.1621 188.955 92.1621 189.783ZM101.695 186.461C101.98 186.461 102.236 186.484 102.463 186.531L102.328 187.434C102.062 187.375 101.828 187.346 101.625 187.346C101.105 187.346 100.66 187.557 100.289 187.979C99.9219 188.4 99.7383 188.926 99.7383 189.555V193H98.7656V186.578H99.5684L99.6797 187.768H99.7266C99.9648 187.35 100.252 187.027 100.588 186.801C100.924 186.574 101.293 186.461 101.695 186.461ZM107.807 191.248C107.807 191.846 107.584 192.307 107.139 192.631C106.693 192.955 106.068 193.117 105.264 193.117C104.412 193.117 103.748 192.982 103.271 192.713V191.811C103.58 191.967 103.91 192.09 104.262 192.18C104.617 192.27 104.959 192.314 105.287 192.314C105.795 192.314 106.186 192.234 106.459 192.074C106.732 191.91 106.869 191.662 106.869 191.33C106.869 191.08 106.76 190.867 106.541 190.691C106.326 190.512 105.904 190.301 105.275 190.059C104.678 189.836 104.252 189.643 103.998 189.479C103.748 189.311 103.561 189.121 103.436 188.91C103.314 188.699 103.254 188.447 103.254 188.154C103.254 187.631 103.467 187.219 103.893 186.918C104.318 186.613 104.902 186.461 105.645 186.461C106.336 186.461 107.012 186.602 107.672 186.883L107.326 187.674C106.682 187.408 106.098 187.275 105.574 187.275C105.113 187.275 104.766 187.348 104.531 187.492C104.297 187.637 104.18 187.836 104.18 188.09C104.18 188.262 104.223 188.408 104.309 188.529C104.398 188.65 104.541 188.766 104.736 188.875C104.932 188.984 105.307 189.143 105.861 189.35C106.623 189.627 107.137 189.906 107.402 190.188C107.672 190.469 107.807 190.822 107.807 191.248Z" class="path-8"/> -<path d="M81.0703 200.434H82.1426L79.0547 209H78.0703L75 200.434H76.0547L78.0234 205.977C78.25 206.613 78.4297 207.232 78.5625 207.834C78.7031 207.201 78.8867 206.57 79.1133 205.941L81.0703 200.434ZM88.7227 205.783C88.7227 206.83 88.459 207.648 87.9316 208.238C87.4043 208.824 86.6758 209.117 85.7461 209.117C85.1719 209.117 84.6621 208.982 84.2168 208.713C83.7715 208.443 83.4277 208.057 83.1855 207.553C82.9434 207.049 82.8223 206.459 82.8223 205.783C82.8223 204.736 83.084 203.922 83.6074 203.34C84.1309 202.754 84.8574 202.461 85.7871 202.461C86.6855 202.461 87.3984 202.76 87.9258 203.357C88.457 203.955 88.7227 204.764 88.7227 205.783ZM83.8301 205.783C83.8301 206.604 83.9941 207.229 84.3223 207.658C84.6504 208.088 85.1328 208.303 85.7695 208.303C86.4062 208.303 86.8887 208.09 87.2168 207.664C87.5488 207.234 87.7148 206.607 87.7148 205.783C87.7148 204.967 87.5488 204.348 87.2168 203.926C86.8887 203.5 86.4023 203.287 85.7578 203.287C85.1211 203.287 84.6406 203.496 84.3164 203.914C83.9922 204.332 83.8301 204.955 83.8301 205.783ZM92.5078 208.314C92.6797 208.314 92.8457 208.303 93.0059 208.279C93.166 208.252 93.293 208.225 93.3867 208.197V208.941C93.2812 208.992 93.125 209.033 92.918 209.064C92.7148 209.1 92.5312 209.117 92.3672 209.117C91.125 209.117 90.5039 208.463 90.5039 207.154V203.334H89.584V202.865L90.5039 202.461L90.9141 201.09H91.4766V202.578H93.3398V203.334H91.4766V207.113C91.4766 207.5 91.5684 207.797 91.752 208.004C91.9355 208.211 92.1875 208.314 92.5078 208.314ZM95.6484 209H94.6758V202.578H95.6484V209ZM94.5938 200.838C94.5938 200.615 94.6484 200.453 94.7578 200.352C94.8672 200.246 95.0039 200.193 95.168 200.193C95.3242 200.193 95.459 200.246 95.5723 200.352C95.6855 200.457 95.7422 200.619 95.7422 200.838C95.7422 201.057 95.6855 201.221 95.5723 201.33C95.459 201.436 95.3242 201.488 95.168 201.488C95.0039 201.488 94.8672 201.436 94.7578 201.33C94.6484 201.221 94.5938 201.057 94.5938 200.838ZM102.105 209V204.846C102.105 204.322 101.986 203.932 101.748 203.674C101.51 203.416 101.137 203.287 100.629 203.287C99.957 203.287 99.4648 203.469 99.1523 203.832C98.8398 204.195 98.6836 204.795 98.6836 205.631V209H97.7109V202.578H98.502L98.6602 203.457H98.707C98.9062 203.141 99.1855 202.896 99.5449 202.725C99.9043 202.549 100.305 202.461 100.746 202.461C101.52 202.461 102.102 202.648 102.492 203.023C102.883 203.395 103.078 203.99 103.078 204.811V209H102.105ZM110.338 202.578V203.193L109.148 203.334C109.258 203.471 109.355 203.65 109.441 203.873C109.527 204.092 109.57 204.34 109.57 204.617C109.57 205.246 109.355 205.748 108.926 206.123C108.496 206.498 107.906 206.686 107.156 206.686C106.965 206.686 106.785 206.67 106.617 206.639C106.203 206.857 105.996 207.133 105.996 207.465C105.996 207.641 106.068 207.771 106.213 207.857C106.357 207.939 106.605 207.98 106.957 207.98H108.094C108.789 207.98 109.322 208.127 109.693 208.42C110.068 208.713 110.256 209.139 110.256 209.697C110.256 210.408 109.971 210.949 109.4 211.32C108.83 211.695 107.998 211.883 106.904 211.883C106.064 211.883 105.416 211.727 104.959 211.414C104.506 211.102 104.279 210.66 104.279 210.09C104.279 209.699 104.404 209.361 104.654 209.076C104.904 208.791 105.256 208.598 105.709 208.496C105.545 208.422 105.406 208.307 105.293 208.15C105.184 207.994 105.129 207.812 105.129 207.605C105.129 207.371 105.191 207.166 105.316 206.99C105.441 206.814 105.639 206.645 105.908 206.48C105.576 206.344 105.305 206.111 105.094 205.783C104.887 205.455 104.783 205.08 104.783 204.658C104.783 203.955 104.994 203.414 105.416 203.035C105.838 202.652 106.436 202.461 107.209 202.461C107.545 202.461 107.848 202.5 108.117 202.578H110.338ZM105.217 210.078C105.217 210.426 105.363 210.689 105.656 210.869C105.949 211.049 106.369 211.139 106.916 211.139C107.732 211.139 108.336 211.016 108.727 210.77C109.121 210.527 109.318 210.197 109.318 209.779C109.318 209.432 109.211 209.189 108.996 209.053C108.781 208.92 108.377 208.854 107.783 208.854H106.617C106.176 208.854 105.832 208.959 105.586 209.17C105.34 209.381 105.217 209.684 105.217 210.078ZM105.744 204.635C105.744 205.084 105.871 205.424 106.125 205.654C106.379 205.885 106.732 206 107.186 206C108.135 206 108.609 205.539 108.609 204.617C108.609 203.652 108.129 203.17 107.168 203.17C106.711 203.17 106.359 203.293 106.113 203.539C105.867 203.785 105.744 204.15 105.744 204.635ZM120.316 205.783C120.316 206.83 120.053 207.648 119.525 208.238C118.998 208.824 118.27 209.117 117.34 209.117C116.766 209.117 116.256 208.982 115.811 208.713C115.365 208.443 115.021 208.057 114.779 207.553C114.537 207.049 114.416 206.459 114.416 205.783C114.416 204.736 114.678 203.922 115.201 203.34C115.725 202.754 116.451 202.461 117.381 202.461C118.279 202.461 118.992 202.76 119.52 203.357C120.051 203.955 120.316 204.764 120.316 205.783ZM115.424 205.783C115.424 206.604 115.588 207.229 115.916 207.658C116.244 208.088 116.727 208.303 117.363 208.303C118 208.303 118.482 208.09 118.811 207.664C119.143 207.234 119.309 206.607 119.309 205.783C119.309 204.967 119.143 204.348 118.811 203.926C118.482 203.5 117.996 203.287 117.352 203.287C116.715 203.287 116.234 203.496 115.91 203.914C115.586 204.332 115.424 204.955 115.424 205.783ZM125.016 209.117C124.598 209.117 124.215 209.041 123.867 208.889C123.523 208.732 123.234 208.494 123 208.174H122.93C122.977 208.549 123 208.904 123 209.24V211.883H122.027V202.578H122.818L122.953 203.457H123C123.25 203.105 123.541 202.852 123.873 202.695C124.205 202.539 124.586 202.461 125.016 202.461C125.867 202.461 126.523 202.752 126.984 203.334C127.449 203.916 127.682 204.732 127.682 205.783C127.682 206.838 127.445 207.658 126.973 208.244C126.504 208.826 125.852 209.117 125.016 209.117ZM124.875 203.287C124.219 203.287 123.744 203.469 123.451 203.832C123.158 204.195 123.008 204.773 123 205.566V205.783C123 206.686 123.15 207.332 123.451 207.723C123.752 208.109 124.234 208.303 124.898 208.303C125.453 208.303 125.887 208.078 126.199 207.629C126.516 207.18 126.674 206.561 126.674 205.771C126.674 204.971 126.516 204.357 126.199 203.932C125.887 203.502 125.445 203.287 124.875 203.287ZM131.461 208.314C131.633 208.314 131.799 208.303 131.959 208.279C132.119 208.252 132.246 208.225 132.34 208.197V208.941C132.234 208.992 132.078 209.033 131.871 209.064C131.668 209.1 131.484 209.117 131.32 209.117C130.078 209.117 129.457 208.463 129.457 207.154V203.334H128.537V202.865L129.457 202.461L129.867 201.09H130.43V202.578H132.293V203.334H130.43V207.113C130.43 207.5 130.521 207.797 130.705 208.004C130.889 208.211 131.141 208.314 131.461 208.314ZM134.602 209H133.629V202.578H134.602V209ZM133.547 200.838C133.547 200.615 133.602 200.453 133.711 200.352C133.82 200.246 133.957 200.193 134.121 200.193C134.277 200.193 134.412 200.246 134.525 200.352C134.639 200.457 134.695 200.619 134.695 200.838C134.695 201.057 134.639 201.221 134.525 201.33C134.412 201.436 134.277 201.488 134.121 201.488C133.957 201.488 133.82 201.436 133.711 201.33C133.602 201.221 133.547 201.057 133.547 200.838ZM142.207 205.783C142.207 206.83 141.943 207.648 141.416 208.238C140.889 208.824 140.16 209.117 139.23 209.117C138.656 209.117 138.146 208.982 137.701 208.713C137.256 208.443 136.912 208.057 136.67 207.553C136.428 207.049 136.307 206.459 136.307 205.783C136.307 204.736 136.568 203.922 137.092 203.34C137.615 202.754 138.342 202.461 139.271 202.461C140.17 202.461 140.883 202.76 141.41 203.357C141.941 203.955 142.207 204.764 142.207 205.783ZM137.314 205.783C137.314 206.604 137.479 207.229 137.807 207.658C138.135 208.088 138.617 208.303 139.254 208.303C139.891 208.303 140.373 208.09 140.701 207.664C141.033 207.234 141.199 206.607 141.199 205.783C141.199 204.967 141.033 204.348 140.701 203.926C140.373 203.5 139.887 203.287 139.242 203.287C138.605 203.287 138.125 203.496 137.801 203.914C137.477 204.332 137.314 204.955 137.314 205.783ZM148.312 209V204.846C148.312 204.322 148.193 203.932 147.955 203.674C147.717 203.416 147.344 203.287 146.836 203.287C146.164 203.287 145.672 203.469 145.359 203.832C145.047 204.195 144.891 204.795 144.891 205.631V209H143.918V202.578H144.709L144.867 203.457H144.914C145.113 203.141 145.393 202.896 145.752 202.725C146.111 202.549 146.512 202.461 146.953 202.461C147.727 202.461 148.309 202.648 148.699 203.023C149.09 203.395 149.285 203.99 149.285 204.811V209H148.312ZM155.432 207.248C155.432 207.846 155.209 208.307 154.764 208.631C154.318 208.955 153.693 209.117 152.889 209.117C152.037 209.117 151.373 208.982 150.896 208.713V207.811C151.205 207.967 151.535 208.09 151.887 208.18C152.242 208.27 152.584 208.314 152.912 208.314C153.42 208.314 153.811 208.234 154.084 208.074C154.357 207.91 154.494 207.662 154.494 207.33C154.494 207.08 154.385 206.867 154.166 206.691C153.951 206.512 153.529 206.301 152.9 206.059C152.303 205.836 151.877 205.643 151.623 205.479C151.373 205.311 151.186 205.121 151.061 204.91C150.939 204.699 150.879 204.447 150.879 204.154C150.879 203.631 151.092 203.219 151.518 202.918C151.943 202.613 152.527 202.461 153.27 202.461C153.961 202.461 154.637 202.602 155.297 202.883L154.951 203.674C154.307 203.408 153.723 203.275 153.199 203.275C152.738 203.275 152.391 203.348 152.156 203.492C151.922 203.637 151.805 203.836 151.805 204.09C151.805 204.262 151.848 204.408 151.934 204.529C152.023 204.65 152.166 204.766 152.361 204.875C152.557 204.984 152.932 205.143 153.486 205.35C154.248 205.627 154.762 205.906 155.027 206.188C155.297 206.469 155.432 206.822 155.432 207.248Z" class="path-9"/> -<path d="M79.8457 217.201C78.9043 217.201 78.1602 217.516 77.6133 218.145C77.0703 218.77 76.7988 219.627 76.7988 220.717C76.7988 221.838 77.0605 222.705 77.584 223.318C78.1113 223.928 78.8613 224.232 79.834 224.232C80.4316 224.232 81.1133 224.125 81.8789 223.91V224.783C81.2852 225.006 80.5527 225.117 79.6816 225.117C78.4199 225.117 77.4453 224.734 76.7578 223.969C76.0742 223.203 75.7324 222.115 75.7324 220.705C75.7324 219.822 75.8965 219.049 76.2246 218.385C76.5566 217.721 77.0332 217.209 77.6543 216.85C78.2793 216.49 79.0137 216.311 79.8574 216.311C80.7559 216.311 81.541 216.475 82.2129 216.803L81.791 217.658C81.1426 217.354 80.4941 217.201 79.8457 217.201ZM89.1445 221.783C89.1445 222.83 88.8809 223.648 88.3535 224.238C87.8262 224.824 87.0977 225.117 86.168 225.117C85.5938 225.117 85.084 224.982 84.6387 224.713C84.1934 224.443 83.8496 224.057 83.6074 223.553C83.3652 223.049 83.2441 222.459 83.2441 221.783C83.2441 220.736 83.5059 219.922 84.0293 219.34C84.5527 218.754 85.2793 218.461 86.209 218.461C87.1074 218.461 87.8203 218.76 88.3477 219.357C88.8789 219.955 89.1445 220.764 89.1445 221.783ZM84.252 221.783C84.252 222.604 84.416 223.229 84.7441 223.658C85.0723 224.088 85.5547 224.303 86.1914 224.303C86.8281 224.303 87.3105 224.09 87.6387 223.664C87.9707 223.234 88.1367 222.607 88.1367 221.783C88.1367 220.967 87.9707 220.348 87.6387 219.926C87.3105 219.5 86.8242 219.287 86.1797 219.287C85.543 219.287 85.0625 219.496 84.7383 219.914C84.4141 220.332 84.252 220.955 84.252 221.783ZM91.7695 218.578V222.744C91.7695 223.268 91.8887 223.658 92.127 223.916C92.3652 224.174 92.7383 224.303 93.2461 224.303C93.918 224.303 94.4082 224.119 94.7168 223.752C95.0293 223.385 95.1855 222.785 95.1855 221.953V218.578H96.1582V225H95.3555L95.2148 224.139H95.1621C94.9629 224.455 94.6855 224.697 94.3301 224.865C93.9785 225.033 93.5762 225.117 93.123 225.117C92.3418 225.117 91.7559 224.932 91.3652 224.561C90.9785 224.189 90.7852 223.596 90.7852 222.779V218.578H91.7695ZM102.621 225V220.846C102.621 220.322 102.502 219.932 102.264 219.674C102.025 219.416 101.652 219.287 101.145 219.287C100.473 219.287 99.9805 219.469 99.668 219.832C99.3555 220.195 99.1992 220.795 99.1992 221.631V225H98.2266V218.578H99.0176L99.1758 219.457H99.2227C99.4219 219.141 99.7012 218.896 100.061 218.725C100.42 218.549 100.82 218.461 101.262 218.461C102.035 218.461 102.617 218.648 103.008 219.023C103.398 219.395 103.594 219.99 103.594 220.811V225H102.621ZM107.672 224.314C107.844 224.314 108.01 224.303 108.17 224.279C108.33 224.252 108.457 224.225 108.551 224.197V224.941C108.445 224.992 108.289 225.033 108.082 225.064C107.879 225.1 107.695 225.117 107.531 225.117C106.289 225.117 105.668 224.463 105.668 223.154V219.334H104.748V218.865L105.668 218.461L106.078 217.09H106.641V218.578H108.504V219.334H106.641V223.113C106.641 223.5 106.732 223.797 106.916 224.004C107.1 224.211 107.352 224.314 107.672 224.314ZM112.553 225.117C111.604 225.117 110.854 224.828 110.303 224.25C109.756 223.672 109.482 222.869 109.482 221.842C109.482 220.807 109.736 219.984 110.244 219.375C110.756 218.766 111.441 218.461 112.301 218.461C113.105 218.461 113.742 218.727 114.211 219.258C114.68 219.785 114.914 220.482 114.914 221.35V221.965H110.49C110.51 222.719 110.699 223.291 111.059 223.682C111.422 224.072 111.932 224.268 112.588 224.268C113.279 224.268 113.963 224.123 114.639 223.834V224.701C114.295 224.85 113.969 224.955 113.66 225.018C113.355 225.084 112.986 225.117 112.553 225.117ZM112.289 219.275C111.773 219.275 111.361 219.443 111.053 219.779C110.748 220.115 110.568 220.58 110.514 221.174H113.871C113.871 220.561 113.734 220.092 113.461 219.768C113.188 219.439 112.797 219.275 112.289 219.275ZM119.508 218.461C119.793 218.461 120.049 218.484 120.275 218.531L120.141 219.434C119.875 219.375 119.641 219.346 119.438 219.346C118.918 219.346 118.473 219.557 118.102 219.979C117.734 220.4 117.551 220.926 117.551 221.555V225H116.578V218.578H117.381L117.492 219.768H117.539C117.777 219.35 118.064 219.027 118.4 218.801C118.736 218.574 119.105 218.461 119.508 218.461ZM124.465 225.117C124.047 225.117 123.664 225.041 123.316 224.889C122.973 224.732 122.684 224.494 122.449 224.174H122.379C122.426 224.549 122.449 224.904 122.449 225.24V227.883H121.477V218.578H122.268L122.402 219.457H122.449C122.699 219.105 122.99 218.852 123.322 218.695C123.654 218.539 124.035 218.461 124.465 218.461C125.316 218.461 125.973 218.752 126.434 219.334C126.898 219.916 127.131 220.732 127.131 221.783C127.131 222.838 126.895 223.658 126.422 224.244C125.953 224.826 125.301 225.117 124.465 225.117ZM124.324 219.287C123.668 219.287 123.193 219.469 122.9 219.832C122.607 220.195 122.457 220.773 122.449 221.566V221.783C122.449 222.686 122.6 223.332 122.9 223.723C123.201 224.109 123.684 224.303 124.348 224.303C124.902 224.303 125.336 224.078 125.648 223.629C125.965 223.18 126.123 222.561 126.123 221.771C126.123 220.971 125.965 220.357 125.648 219.932C125.336 219.502 124.895 219.287 124.324 219.287ZM132.785 225L132.592 224.086H132.545C132.225 224.488 131.904 224.762 131.584 224.906C131.268 225.047 130.871 225.117 130.395 225.117C129.758 225.117 129.258 224.953 128.895 224.625C128.535 224.297 128.355 223.83 128.355 223.225C128.355 221.928 129.393 221.248 131.467 221.186L132.557 221.15V220.752C132.557 220.248 132.447 219.877 132.229 219.639C132.014 219.396 131.668 219.275 131.191 219.275C130.656 219.275 130.051 219.439 129.375 219.768L129.076 219.023C129.393 218.852 129.738 218.717 130.113 218.619C130.492 218.521 130.871 218.473 131.25 218.473C132.016 218.473 132.582 218.643 132.949 218.982C133.32 219.322 133.506 219.867 133.506 220.617V225H132.785ZM130.588 224.314C131.193 224.314 131.668 224.148 132.012 223.816C132.359 223.484 132.533 223.02 132.533 222.422V221.842L131.561 221.883C130.787 221.91 130.229 222.031 129.885 222.246C129.545 222.457 129.375 222.787 129.375 223.236C129.375 223.588 129.48 223.855 129.691 224.039C129.906 224.223 130.205 224.314 130.588 224.314ZM138.445 218.461C138.73 218.461 138.986 218.484 139.213 218.531L139.078 219.434C138.812 219.375 138.578 219.346 138.375 219.346C137.855 219.346 137.41 219.557 137.039 219.979C136.672 220.4 136.488 220.926 136.488 221.555V225H135.516V218.578H136.318L136.43 219.768H136.477C136.715 219.35 137.002 219.027 137.338 218.801C137.674 218.574 138.043 218.461 138.445 218.461ZM142.488 224.314C142.66 224.314 142.826 224.303 142.986 224.279C143.146 224.252 143.273 224.225 143.367 224.197V224.941C143.262 224.992 143.105 225.033 142.898 225.064C142.695 225.1 142.512 225.117 142.348 225.117C141.105 225.117 140.484 224.463 140.484 223.154V219.334H139.564V218.865L140.484 218.461L140.895 217.09H141.457V218.578H143.32V219.334H141.457V223.113C141.457 223.5 141.549 223.797 141.732 224.004C141.916 224.211 142.168 224.314 142.488 224.314ZM145.629 225H144.656V218.578H145.629V225ZM144.574 216.838C144.574 216.615 144.629 216.453 144.738 216.352C144.848 216.246 144.984 216.193 145.148 216.193C145.305 216.193 145.439 216.246 145.553 216.352C145.666 216.457 145.723 216.619 145.723 216.838C145.723 217.057 145.666 217.221 145.553 217.33C145.439 217.436 145.305 217.488 145.148 217.488C144.984 217.488 144.848 217.436 144.738 217.33C144.629 217.221 144.574 217.057 144.574 216.838ZM150.404 225.117C149.455 225.117 148.705 224.828 148.154 224.25C147.607 223.672 147.334 222.869 147.334 221.842C147.334 220.807 147.588 219.984 148.096 219.375C148.607 218.766 149.293 218.461 150.152 218.461C150.957 218.461 151.594 218.727 152.062 219.258C152.531 219.785 152.766 220.482 152.766 221.35V221.965H148.342C148.361 222.719 148.551 223.291 148.91 223.682C149.273 224.072 149.783 224.268 150.439 224.268C151.131 224.268 151.814 224.123 152.49 223.834V224.701C152.146 224.85 151.82 224.955 151.512 225.018C151.207 225.084 150.838 225.117 150.404 225.117ZM150.141 219.275C149.625 219.275 149.213 219.443 148.904 219.779C148.6 220.115 148.42 220.58 148.365 221.174H151.723C151.723 220.561 151.586 220.092 151.312 219.768C151.039 219.439 150.648 219.275 150.141 219.275ZM158.572 223.248C158.572 223.846 158.35 224.307 157.904 224.631C157.459 224.955 156.834 225.117 156.029 225.117C155.178 225.117 154.514 224.982 154.037 224.713V223.811C154.346 223.967 154.676 224.09 155.027 224.18C155.383 224.27 155.725 224.314 156.053 224.314C156.561 224.314 156.951 224.234 157.225 224.074C157.498 223.91 157.635 223.662 157.635 223.33C157.635 223.08 157.525 222.867 157.307 222.691C157.092 222.512 156.67 222.301 156.041 222.059C155.443 221.836 155.018 221.643 154.764 221.479C154.514 221.311 154.326 221.121 154.201 220.91C154.08 220.699 154.02 220.447 154.02 220.154C154.02 219.631 154.232 219.219 154.658 218.918C155.084 218.613 155.668 218.461 156.41 218.461C157.102 218.461 157.777 218.602 158.438 218.883L158.092 219.674C157.447 219.408 156.863 219.275 156.34 219.275C155.879 219.275 155.531 219.348 155.297 219.492C155.062 219.637 154.945 219.836 154.945 220.09C154.945 220.262 154.988 220.408 155.074 220.529C155.164 220.65 155.307 220.766 155.502 220.875C155.697 220.984 156.072 221.143 156.627 221.35C157.389 221.627 157.902 221.906 158.168 222.188C158.438 222.469 158.572 222.822 158.572 223.248Z" class="path-10"/> -<path d="M47 71L47 121" class="path-11"/> -<path d="M47 161L47 250" class="path-12"/> -<path d="M47 297L47 323" class="path-13"/> -<circle cx="47" cy="277" r="11.5" class="circle-3"/> -<path d="M49.584 274.402C49.584 274.945 49.4258 275.398 49.1094 275.762C48.793 276.121 48.3477 276.363 47.7734 276.488V276.535C48.4609 276.621 48.9766 276.836 49.3203 277.18C49.6641 277.52 49.8359 277.973 49.8359 278.539C49.8359 279.363 49.5449 280 48.9629 280.449C48.3809 280.895 47.5527 281.117 46.4785 281.117C45.5293 281.117 44.7285 280.963 44.0762 280.654V279.43C44.4395 279.609 44.8242 279.748 45.2305 279.846C45.6367 279.943 46.0273 279.992 46.4023 279.992C47.0664 279.992 47.5625 279.869 47.8906 279.623C48.2188 279.377 48.3828 278.996 48.3828 278.48C48.3828 278.023 48.2012 277.688 47.8379 277.473C47.4746 277.258 46.9043 277.15 46.127 277.15H45.3828V276.031H46.1387C47.5059 276.031 48.1895 275.559 48.1895 274.613C48.1895 274.246 48.0703 273.963 47.832 273.764C47.5938 273.564 47.2422 273.465 46.7773 273.465C46.4531 273.465 46.1406 273.512 45.8398 273.605C45.5391 273.695 45.1836 273.873 44.7734 274.139L44.0996 273.178C44.8848 272.6 45.7969 272.311 46.8359 272.311C47.6992 272.311 48.373 272.496 48.8574 272.867C49.3418 273.238 49.584 273.75 49.584 274.402Z" class="path-14"/> -<path d="M82.9365 275.527C82.9365 276.571 82.5947 277.371 81.9111 277.927C81.2275 278.483 80.2546 278.761 78.9922 278.761H77.9531V282.5H76.3193V272.506H79.1973C80.446 272.506 81.3802 272.761 82 273.271C82.6243 273.782 82.9365 274.534 82.9365 275.527ZM77.9531 277.387H78.8213C79.6598 277.387 80.2751 277.241 80.667 276.949C81.0589 276.658 81.2549 276.202 81.2549 275.582C81.2549 275.008 81.0794 274.579 80.7285 274.297C80.3776 274.014 79.8307 273.873 79.0879 273.873H77.9531V277.387ZM91.4678 278.706C91.4678 279.941 91.151 280.905 90.5176 281.598C89.8841 282.29 89.0023 282.637 87.8721 282.637C87.1657 282.637 86.5413 282.477 85.999 282.158C85.4567 281.839 85.0397 281.381 84.748 280.784C84.4564 280.187 84.3105 279.494 84.3105 278.706C84.3105 277.48 84.625 276.523 85.2539 275.835C85.8828 275.147 86.7692 274.803 87.9131 274.803C89.0068 274.803 89.8727 275.156 90.5107 275.862C91.1488 276.564 91.4678 277.512 91.4678 278.706ZM85.9648 278.706C85.9648 280.451 86.6097 281.324 87.8994 281.324C89.1755 281.324 89.8135 280.451 89.8135 278.706C89.8135 276.979 89.1709 276.115 87.8857 276.115C87.2113 276.115 86.7214 276.339 86.416 276.785C86.1152 277.232 85.9648 277.872 85.9648 278.706ZM94.9268 282.5H93.3203V271.863H94.9268V282.5ZM98.8369 282.5H97.2305V274.939H98.8369V282.5ZM97.1348 272.937C97.1348 272.649 97.2122 272.428 97.3672 272.273C97.5267 272.118 97.7523 272.041 98.0439 272.041C98.3265 272.041 98.5452 272.118 98.7002 272.273C98.8597 272.428 98.9395 272.649 98.9395 272.937C98.9395 273.21 98.8597 273.426 98.7002 273.586C98.5452 273.741 98.3265 273.818 98.0439 273.818C97.7523 273.818 97.5267 273.741 97.3672 273.586C97.2122 273.426 97.1348 273.21 97.1348 272.937ZM104.189 282.637C103.046 282.637 102.175 282.304 101.578 281.639C100.986 280.969 100.689 280.009 100.689 278.761C100.689 277.489 100.999 276.512 101.619 275.828C102.243 275.145 103.144 274.803 104.319 274.803C105.117 274.803 105.835 274.951 106.473 275.247L105.987 276.539C105.308 276.275 104.748 276.143 104.306 276.143C102.998 276.143 102.344 277.011 102.344 278.747C102.344 279.595 102.506 280.233 102.829 280.661C103.157 281.085 103.636 281.297 104.265 281.297C104.98 281.297 105.657 281.119 106.295 280.764V282.165C106.008 282.334 105.7 282.454 105.372 282.527C105.049 282.6 104.654 282.637 104.189 282.637ZM106.924 274.939H108.674L110.212 279.226C110.444 279.836 110.599 280.41 110.677 280.948H110.731C110.772 280.698 110.848 280.395 110.957 280.039C111.066 279.679 111.645 277.979 112.693 274.939H114.43L111.196 283.505C110.608 285.077 109.629 285.863 108.257 285.863C107.901 285.863 107.555 285.825 107.218 285.747V284.476C107.459 284.53 107.735 284.558 108.045 284.558C108.82 284.558 109.364 284.109 109.679 283.211L109.959 282.5L106.924 274.939Z" class="path-15"/> -<circle cx="47" cy="343" r="11.5" class="circle-4"/> -<path d="M50.2109 345.131H49.0566V347H47.7148V345.131H43.8008V344.07L47.7148 338.41H49.0566V343.988H50.2109V345.131ZM47.7148 343.988V341.838C47.7148 341.072 47.7344 340.445 47.7734 339.957H47.7266C47.6172 340.215 47.4453 340.527 47.2109 340.895L45.084 343.988H47.7148Z" class="path-16"/> -<path d="M82.9365 341.527C82.9365 342.571 82.5947 343.371 81.9111 343.927C81.2275 344.483 80.2546 344.761 78.9922 344.761H77.9531V348.5H76.3193V338.506H79.1973C80.446 338.506 81.3802 338.761 82 339.271C82.6243 339.782 82.9365 340.534 82.9365 341.527ZM77.9531 343.387H78.8213C79.6598 343.387 80.2751 343.241 80.667 342.949C81.0589 342.658 81.2549 342.202 81.2549 341.582C81.2549 341.008 81.0794 340.579 80.7285 340.297C80.3776 340.014 79.8307 339.873 79.0879 339.873H77.9531V343.387ZM88.5967 340.803C88.9202 340.803 89.1868 340.826 89.3965 340.871L89.2393 342.368C89.0114 342.313 88.7744 342.286 88.5283 342.286C87.8857 342.286 87.3639 342.496 86.9629 342.915C86.5664 343.334 86.3682 343.879 86.3682 344.549V348.5H84.7617V340.939H86.0195L86.2314 342.272H86.3135C86.5641 341.821 86.89 341.464 87.291 341.199C87.6966 340.935 88.1318 340.803 88.5967 340.803ZM94.1064 348.637C92.9307 348.637 92.0101 348.295 91.3447 347.611C90.6839 346.923 90.3535 345.978 90.3535 344.774C90.3535 343.539 90.6611 342.569 91.2764 341.862C91.8916 341.156 92.737 340.803 93.8125 340.803C94.8105 340.803 95.599 341.106 96.1777 341.712C96.7565 342.318 97.0459 343.152 97.0459 344.214V345.082H92.0078C92.0306 345.816 92.2288 346.381 92.6025 346.777C92.9762 347.169 93.5026 347.365 94.1816 347.365C94.6283 347.365 95.043 347.324 95.4258 347.242C95.8132 347.156 96.2279 347.014 96.6699 346.818V348.124C96.278 348.311 95.8815 348.443 95.4805 348.521C95.0794 348.598 94.6214 348.637 94.1064 348.637ZM93.8125 342.02C93.3021 342.02 92.8919 342.181 92.582 342.505C92.2767 342.828 92.0944 343.3 92.0352 343.92H95.4668C95.4577 343.296 95.3073 342.824 95.0156 342.505C94.724 342.181 94.3229 342.02 93.8125 342.02ZM100.594 348.5L97.7227 340.939H99.418L100.956 345.335C101.22 346.073 101.38 346.67 101.435 347.126H101.489C101.53 346.798 101.69 346.201 101.968 345.335L103.506 340.939H105.215L102.33 348.5H100.594ZM107.97 348.5H106.363V340.939H107.97V348.5ZM106.268 338.937C106.268 338.649 106.345 338.428 106.5 338.273C106.66 338.118 106.885 338.041 107.177 338.041C107.459 338.041 107.678 338.118 107.833 338.273C107.993 338.428 108.072 338.649 108.072 338.937C108.072 339.21 107.993 339.426 107.833 339.586C107.678 339.741 107.459 339.818 107.177 339.818C106.885 339.818 106.66 339.741 106.5 339.586C106.345 339.426 106.268 339.21 106.268 338.937ZM113.575 348.637C112.399 348.637 111.479 348.295 110.813 347.611C110.153 346.923 109.822 345.978 109.822 344.774C109.822 343.539 110.13 342.569 110.745 341.862C111.36 341.156 112.206 340.803 113.281 340.803C114.279 340.803 115.068 341.106 115.646 341.712C116.225 342.318 116.515 343.152 116.515 344.214V345.082H111.477C111.499 345.816 111.698 346.381 112.071 346.777C112.445 347.169 112.971 347.365 113.65 347.365C114.097 347.365 114.512 347.324 114.895 347.242C115.282 347.156 115.697 347.014 116.139 346.818V348.124C115.747 348.311 115.35 348.443 114.949 348.521C114.548 348.598 114.09 348.637 113.575 348.637ZM113.281 342.02C112.771 342.02 112.361 342.181 112.051 342.505C111.745 342.828 111.563 343.3 111.504 343.92H114.936C114.926 343.296 114.776 342.824 114.484 342.505C114.193 342.181 113.792 342.02 113.281 342.02ZM124.54 348.5L123.562 344.973C123.444 344.599 123.23 343.731 122.92 342.368H122.858C122.594 343.599 122.384 344.471 122.229 344.986L121.225 348.5H119.447L117.328 340.939H118.969L119.933 344.665C120.151 345.586 120.306 346.374 120.397 347.03H120.438C120.484 346.698 120.552 346.317 120.644 345.889C120.739 345.456 120.821 345.132 120.89 344.918L122.038 340.939H123.802L124.916 344.918C124.984 345.141 125.069 345.483 125.169 345.943C125.274 346.404 125.335 346.761 125.354 347.017H125.408C125.477 346.456 125.636 345.672 125.887 344.665L126.864 340.939H128.478L126.345 348.5H124.54Z" class="path-17"/> -<defs> -<filter id="filter0_d_21428_72850" x="0.682432" y="0.227477" width="298.635" height="402.635" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.54505"/> -<feGaussianBlur stdDeviation="1.15878"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_21428_72850"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_21428_72850" result="shape"/> -</filter> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/dispute-resolver/voting-options.svg b/web/src/assets/svgs/mini-guides/dispute-resolver/voting-options.svg deleted file mode 100644 index ca93d9c9d..000000000 --- a/web/src/assets/svgs/mini-guides/dispute-resolver/voting-options.svg +++ /dev/null @@ -1,53 +0,0 @@ -<svg width="346" height="403" viewBox="0 0 346 403" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g filter="url(#filter0_d_21428_72863)"> -<rect x="3" y="1" width="340" height="398" rx="2.31757" class="rect-1"/> -<rect x="3.38626" y="1.38626" width="339.227" height="397.227" rx="1.93131" stroke-width="0.772523" class="rect-2"/> -</g> -<path d="M116.75 30.4715H119.045L114.307 44H111.976L107.256 30.4715H109.533L112.355 38.8829C112.503 39.2838 112.66 39.802 112.827 40.4374C112.994 41.0667 113.101 41.5355 113.151 41.844C113.231 41.3751 113.354 40.8322 113.521 40.2154C113.688 39.5985 113.823 39.142 113.928 38.8458L116.75 30.4715ZM129.677 38.8644C129.677 40.5361 129.249 41.8409 128.391 42.7785C127.534 43.7162 126.34 44.1851 124.81 44.1851C123.854 44.1851 123.009 43.9692 122.275 43.5373C121.541 43.1055 120.976 42.4855 120.581 41.6774C120.187 40.8693 119.989 39.9316 119.989 38.8644C119.989 37.2049 120.415 35.9094 121.266 34.9779C122.117 34.0464 123.317 33.5806 124.866 33.5806C126.346 33.5806 127.518 34.0587 128.382 35.0149C129.246 35.9649 129.677 37.2481 129.677 38.8644ZM122.228 38.8644C122.228 41.2271 123.101 42.4084 124.847 42.4084C126.574 42.4084 127.438 41.2271 127.438 38.8644C127.438 36.5263 126.568 35.3573 124.829 35.3573C123.916 35.3573 123.252 35.6596 122.839 36.2641C122.432 36.8687 122.228 37.7354 122.228 38.8644ZM135.998 42.4269C136.528 42.4269 137.059 42.3436 137.589 42.1771V43.8149C137.349 43.9198 137.037 44.0062 136.655 44.074C136.278 44.1481 135.886 44.1851 135.479 44.1851C133.419 44.1851 132.389 43.0993 132.389 40.9279V35.4128H130.991V34.4505L132.49 33.6547L133.231 31.4894H134.572V33.7657H137.487V35.4128H134.572V40.8909C134.572 41.4152 134.702 41.8039 134.961 42.0568C135.226 42.3035 135.572 42.4269 135.998 42.4269ZM141.818 44H139.643V33.7657H141.818V44ZM139.514 31.0545C139.514 30.6658 139.619 30.3666 139.828 30.1569C140.044 29.9471 140.35 29.8423 140.745 29.8423C141.127 29.8423 141.423 29.9471 141.633 30.1569C141.849 30.3666 141.957 30.6658 141.957 31.0545C141.957 31.4246 141.849 31.7176 141.633 31.9335C141.423 32.1433 141.127 32.2482 140.745 32.2482C140.35 32.2482 140.044 32.1433 139.828 31.9335C139.619 31.7176 139.514 31.4246 139.514 31.0545ZM153.94 44H151.756V37.7077C151.756 36.918 151.596 36.3289 151.275 35.9403C150.96 35.5516 150.458 35.3573 149.767 35.3573C148.847 35.3573 148.175 35.6287 147.749 36.1716C147.324 36.7145 147.111 37.6244 147.111 38.9014V44H144.936V33.7657H146.639L146.944 35.1075H147.055C147.364 34.6201 147.802 34.2438 148.369 33.9785C148.937 33.7133 149.566 33.5806 150.257 33.5806C152.712 33.5806 153.94 34.8299 153.94 37.3283V44ZM165.608 33.7657V34.9594L163.86 35.2833C164.02 35.4992 164.153 35.7645 164.257 36.0791C164.362 36.3937 164.415 36.7268 164.415 37.0784C164.415 38.1333 164.051 38.9631 163.323 39.5676C162.595 40.1722 161.592 40.4744 160.316 40.4744C159.989 40.4744 159.692 40.4498 159.427 40.4004C158.958 40.6904 158.724 41.0297 158.724 41.4183C158.724 41.6527 158.832 41.8285 159.048 41.9457C159.27 42.063 159.674 42.1216 160.26 42.1216H162.046C163.175 42.1216 164.032 42.3621 164.618 42.8433C165.204 43.3245 165.497 44.0185 165.497 44.9253C165.497 46.0851 165.019 46.9796 164.063 47.6088C163.107 48.2381 161.725 48.5527 159.918 48.5527C158.523 48.5527 157.459 48.3059 156.725 47.8124C155.991 47.3189 155.624 46.6156 155.624 45.7026C155.624 45.0734 155.821 44.5429 156.216 44.111C156.617 43.6854 157.176 43.3893 157.891 43.2227C157.601 43.0993 157.361 42.9019 157.169 42.6305C156.984 42.3529 156.892 42.063 156.892 41.7607C156.892 41.3782 157 41.0543 157.216 40.7891C157.432 40.5238 157.752 40.2616 158.178 40.0025C157.647 39.7743 157.216 39.4041 156.882 38.8921C156.556 38.3739 156.392 37.7694 156.392 37.0784C156.392 35.968 156.741 35.1075 157.438 34.4967C158.141 33.886 159.14 33.5806 160.436 33.5806C160.726 33.5806 161.028 33.6022 161.343 33.6454C161.663 33.6824 161.904 33.7225 162.064 33.7657H165.608ZM157.567 45.5916C157.567 46.0604 157.777 46.4213 158.196 46.6742C158.622 46.9272 159.217 47.0536 159.982 47.0536C161.167 47.0536 162.049 46.884 162.629 46.5447C163.209 46.2054 163.499 45.7551 163.499 45.1937C163.499 44.7495 163.338 44.4318 163.018 44.2406C162.703 44.0555 162.114 43.963 161.25 43.963H159.603C158.98 43.963 158.483 44.108 158.113 44.3979C157.749 44.694 157.567 45.0919 157.567 45.5916ZM158.502 37.0784C158.502 37.72 158.665 38.2135 158.992 38.559C159.325 38.9044 159.8 39.0772 160.417 39.0772C161.676 39.0772 162.305 38.4048 162.305 37.0599C162.305 36.3937 162.148 35.8817 161.833 35.5239C161.525 35.1599 161.053 34.9779 160.417 34.9779C159.788 34.9779 159.31 35.1568 158.983 35.5146C158.662 35.8724 158.502 36.3937 158.502 37.0784ZM181.515 38.8644C181.515 40.5361 181.086 41.8409 180.229 42.7785C179.371 43.7162 178.178 44.1851 176.648 44.1851C175.692 44.1851 174.846 43.9692 174.112 43.5373C173.378 43.1055 172.814 42.4855 172.419 41.6774C172.024 40.8693 171.827 39.9316 171.827 38.8644C171.827 37.2049 172.252 35.9094 173.104 34.9779C173.955 34.0464 175.155 33.5806 176.703 33.5806C178.184 33.5806 179.356 34.0587 180.22 35.0149C181.083 35.9649 181.515 37.2481 181.515 38.8644ZM174.066 38.8644C174.066 41.2271 174.939 42.4084 176.685 42.4084C178.412 42.4084 179.276 41.2271 179.276 38.8644C179.276 36.5263 178.406 35.3573 176.666 35.3573C175.753 35.3573 175.09 35.6596 174.677 36.2641C174.27 36.8687 174.066 37.7354 174.066 38.8644ZM189.214 44.1851C187.918 44.1851 186.913 43.7193 186.197 42.7878H186.068C186.154 43.6515 186.197 44.1758 186.197 44.3609V48.5527H184.023V33.7657H185.781C185.83 33.957 185.932 34.4135 186.086 35.1352H186.197C186.876 34.0988 187.894 33.5806 189.251 33.5806C190.528 33.5806 191.521 34.0433 192.231 34.9687C192.946 35.894 193.304 37.1926 193.304 38.8644C193.304 40.5361 192.94 41.8409 192.212 42.7785C191.49 43.7162 190.491 44.1851 189.214 44.1851ZM188.687 35.3573C187.823 35.3573 187.191 35.6102 186.79 36.1161C186.395 36.6219 186.197 37.4301 186.197 38.5405V38.8644C186.197 40.1105 186.395 41.0142 186.79 41.5756C187.184 42.1308 187.829 42.4084 188.724 42.4084C189.476 42.4084 190.056 42.1 190.463 41.4831C190.87 40.8662 191.074 39.9871 191.074 38.8458C191.074 37.6984 190.87 36.8317 190.463 36.2456C190.062 35.6534 189.47 35.3573 188.687 35.3573ZM199.643 42.4269C200.173 42.4269 200.704 42.3436 201.234 42.1771V43.8149C200.994 43.9198 200.682 44.0062 200.3 44.074C199.923 44.1481 199.532 44.1851 199.124 44.1851C197.064 44.1851 196.034 43.0993 196.034 40.9279V35.4128H194.636V34.4505L196.136 33.6547L196.876 31.4894H198.218V33.7657H201.132V35.4128H198.218V40.8909C198.218 41.4152 198.347 41.8039 198.606 42.0568C198.871 42.3035 199.217 42.4269 199.643 42.4269ZM205.463 44H203.288V33.7657H205.463V44ZM203.159 31.0545C203.159 30.6658 203.264 30.3666 203.473 30.1569C203.689 29.9471 203.995 29.8423 204.39 29.8423C204.772 29.8423 205.068 29.9471 205.278 30.1569C205.494 30.3666 205.602 30.6658 205.602 31.0545C205.602 31.4246 205.494 31.7176 205.278 31.9335C205.068 32.1433 204.772 32.2482 204.39 32.2482C203.995 32.2482 203.689 32.1433 203.473 31.9335C203.264 31.7176 203.159 31.4246 203.159 31.0545ZM217.659 38.8644C217.659 40.5361 217.23 41.8409 216.373 42.7785C215.515 43.7162 214.322 44.1851 212.792 44.1851C211.835 44.1851 210.99 43.9692 210.256 43.5373C209.522 43.1055 208.958 42.4855 208.563 41.6774C208.168 40.8693 207.971 39.9316 207.971 38.8644C207.971 37.2049 208.396 35.9094 209.248 34.9779C210.099 34.0464 211.299 33.5806 212.847 33.5806C214.328 33.5806 215.5 34.0587 216.363 35.0149C217.227 35.9649 217.659 37.2481 217.659 38.8644ZM210.21 38.8644C210.21 41.2271 211.083 42.4084 212.829 42.4084C214.556 42.4084 215.42 41.2271 215.42 38.8644C215.42 36.5263 214.55 35.3573 212.81 35.3573C211.897 35.3573 211.234 35.6596 210.821 36.2641C210.414 36.8687 210.21 37.7354 210.21 38.8644ZM229.17 44H226.986V37.7077C226.986 36.918 226.826 36.3289 226.505 35.9403C226.191 35.5516 225.688 35.3573 224.997 35.3573C224.078 35.3573 223.405 35.6287 222.98 36.1716C222.554 36.7145 222.341 37.6244 222.341 38.9014V44H220.167V33.7657H221.869L222.175 35.1075H222.286C222.594 34.6201 223.032 34.2438 223.6 33.9785C224.167 33.7133 224.796 33.5806 225.487 33.5806C227.943 33.5806 229.17 34.8299 229.17 37.3283V44ZM239.071 41.0852C239.071 42.0845 238.707 42.8526 237.979 43.3893C237.252 43.9198 236.209 44.1851 234.852 44.1851C233.488 44.1851 232.393 43.9784 231.567 43.5651V41.6866C232.77 42.2418 233.889 42.5195 234.926 42.5195C236.265 42.5195 236.934 42.1154 236.934 41.3073C236.934 41.0482 236.86 40.8322 236.712 40.6595C236.564 40.4868 236.32 40.3079 235.981 40.1228C235.641 39.9377 235.17 39.728 234.565 39.4936C233.387 39.0371 232.588 38.5806 232.168 38.1241C231.755 37.6676 231.548 37.0754 231.548 36.3474C231.548 35.4714 231.9 34.7928 232.603 34.3117C233.313 33.8243 234.275 33.5806 235.49 33.5806C236.693 33.5806 237.831 33.8243 238.905 34.3117L238.202 35.9495C237.097 35.493 236.169 35.2648 235.416 35.2648C234.269 35.2648 233.695 35.5917 233.695 36.2456C233.695 36.5664 233.843 36.8379 234.139 37.0599C234.442 37.282 235.095 37.5874 236.101 37.976C236.946 38.303 237.56 38.6022 237.942 38.8736C238.325 39.145 238.609 39.4597 238.794 39.8175C238.979 40.1691 239.071 40.5917 239.071 41.0852Z" class="path-1"/> -<rect x="36.3948" y="214.801" width="273.21" height="34.7435" rx="1.97406" stroke-width="0.789625" class="rect-3"/> -<path d="M55.5924 228.914C55.5924 229.827 55.2798 230.53 54.6547 231.023C54.0337 231.513 53.1433 231.758 51.9835 231.758H50.9225V235.305H49.8737V226.286H52.2118C54.4655 226.286 55.5924 227.162 55.5924 228.914ZM50.9225 230.857H51.8663C52.7958 230.857 53.4682 230.707 53.8836 230.407C54.2989 230.106 54.5066 229.625 54.5066 228.963C54.5066 228.367 54.3113 227.923 53.9206 227.631C53.5299 227.339 52.9212 227.193 52.0946 227.193H50.9225V230.857ZM61.4899 235.305L61.2863 234.342H61.237C60.8997 234.766 60.5625 235.054 60.2252 235.206C59.8921 235.354 59.4747 235.428 58.9729 235.428C58.3026 235.428 57.7762 235.255 57.3937 234.91C57.0153 234.564 56.8262 234.073 56.8262 233.435C56.8262 232.07 57.9181 231.355 60.1019 231.289L61.2493 231.252V230.832C61.2493 230.302 61.1341 229.911 60.9038 229.66C60.6776 229.405 60.3137 229.278 59.8119 229.278C59.2485 229.278 58.611 229.45 57.8995 229.796L57.5849 229.012C57.9181 228.831 58.282 228.69 58.6768 228.587C59.0758 228.484 59.4747 228.432 59.8736 228.432C60.6797 228.432 61.276 228.611 61.6626 228.969C62.0533 229.327 62.2487 229.901 62.2487 230.69V235.305H61.4899ZM59.1765 234.583C59.814 234.583 60.3137 234.408 60.6756 234.059C61.0416 233.709 61.2246 233.22 61.2246 232.59V231.98L60.2006 232.023C59.3863 232.052 58.7982 232.179 58.4362 232.405C58.0784 232.627 57.8995 232.975 57.8995 233.448C57.8995 233.818 58.0106 234.1 58.2327 234.293C58.4589 234.486 58.7735 234.583 59.1765 234.583ZM63.2912 228.544H64.3893L65.8698 232.399C66.1947 233.279 66.3962 233.915 66.4744 234.305H66.5237C66.5772 234.096 66.6882 233.738 66.8569 233.232C67.0296 232.722 67.5889 231.159 68.5348 228.544H69.6329L66.7273 236.242C66.4394 237.003 66.1022 237.542 65.7156 237.859C65.3331 238.179 64.8622 238.34 64.3029 238.34C63.9904 238.34 63.6819 238.305 63.3776 238.235V237.414C63.6038 237.464 63.8567 237.488 64.1364 237.488C64.8396 237.488 65.3414 237.094 65.6416 236.304L66.0179 235.342L63.2912 228.544ZM79.4724 235.305H73.544V234.423L75.919 232.035C76.6429 231.303 77.1199 230.781 77.3502 230.468C77.5805 230.156 77.7533 229.851 77.8684 229.555C77.9836 229.259 78.0412 228.94 78.0412 228.599C78.0412 228.118 77.8952 227.737 77.6032 227.458C77.3112 227.174 76.9061 227.032 76.3879 227.032C76.0136 227.032 75.6579 227.094 75.3207 227.217C74.9875 227.341 74.6153 227.565 74.2041 227.89L73.6612 227.193C74.492 226.502 75.3967 226.156 76.3755 226.156C77.2228 226.156 77.8869 226.374 78.3681 226.81C78.8493 227.242 79.0899 227.824 79.0899 228.556C79.0899 229.128 78.9295 229.693 78.6087 230.252C78.2879 230.812 77.6875 231.519 76.8074 232.374L74.8333 234.305V234.355H79.4724V235.305ZM83.5932 229.796C84.5432 229.796 85.2897 230.032 85.8325 230.505C86.3795 230.974 86.653 231.618 86.653 232.436C86.653 233.37 86.3549 234.102 85.7585 234.632C85.1663 235.163 84.3479 235.428 83.3033 235.428C82.2875 235.428 81.5122 235.266 80.9776 234.941V233.954C81.2655 234.139 81.6233 234.285 82.051 234.392C82.4787 234.494 82.9002 234.546 83.3156 234.546C84.0394 234.546 84.6008 234.375 84.9997 234.034C85.4028 233.693 85.6043 233.199 85.6043 232.553C85.6043 231.295 84.8332 230.666 83.2909 230.666C82.9002 230.666 82.3779 230.725 81.724 230.845L81.1935 230.505L81.5328 226.286H86.0176V227.23H82.4088L82.1805 229.938C82.6535 229.843 83.1244 229.796 83.5932 229.796ZM93.9817 230.783C93.9817 232.342 93.735 233.505 93.2415 234.274C92.7521 235.044 92.0015 235.428 90.9898 235.428C90.0192 235.428 89.281 235.035 88.7751 234.25C88.2693 233.46 88.0164 232.305 88.0164 230.783C88.0164 229.212 88.2611 228.046 88.7505 227.285C89.2399 226.524 89.9863 226.144 90.9898 226.144C91.9686 226.144 92.7109 226.541 93.2168 227.334C93.7267 228.128 93.9817 229.278 93.9817 230.783ZM89.0527 230.783C89.0527 232.095 89.207 233.051 89.5154 233.651C89.8239 234.248 90.3153 234.546 90.9898 234.546C91.6725 234.546 92.166 234.244 92.4703 233.639C92.7788 233.03 92.933 232.078 92.933 230.783C92.933 229.487 92.7788 228.539 92.4703 227.939C92.166 227.334 91.6725 227.032 90.9898 227.032C90.3153 227.032 89.8239 227.33 89.5154 227.927C89.207 228.519 89.0527 229.471 89.0527 230.783ZM106.338 230.709C106.338 232.198 105.933 233.337 105.123 234.126C104.317 234.912 103.155 235.305 101.637 235.305H99.139V226.286H101.903C103.305 226.286 104.395 226.674 105.172 227.452C105.949 228.229 106.338 229.315 106.338 230.709ZM105.228 230.746C105.228 229.57 104.932 228.683 104.339 228.087C103.751 227.491 102.875 227.193 101.711 227.193H100.188V234.398H101.465C102.715 234.398 103.655 234.091 104.284 233.479C104.913 232.862 105.228 231.951 105.228 230.746ZM114.025 235.305L112.902 232.436H109.287L108.176 235.305H107.115L110.681 226.249H111.563L115.11 235.305H114.025ZM112.575 231.492L111.526 228.698C111.39 228.344 111.251 227.91 111.107 227.396C111.016 227.791 110.887 228.225 110.718 228.698L109.657 231.492H112.575ZM116.35 235.305V226.286H117.399V235.305H116.35Z" class="path-2"/> -<path d="M41.5922 194.827H42.58L39.7353 202.719H38.8285L36 194.827H36.9716L38.7853 199.933C38.994 200.52 39.1595 201.09 39.2819 201.645C39.4114 201.062 39.5806 200.48 39.7893 199.901L41.5922 194.827ZM48.6417 199.755C48.6417 200.72 48.3988 201.474 47.913 202.017C47.4272 202.557 46.7561 202.827 45.8996 202.827C45.3706 202.827 44.901 202.703 44.4908 202.454C44.0806 202.206 43.7639 201.85 43.5408 201.385C43.3177 200.921 43.2061 200.378 43.2061 199.755C43.2061 198.791 43.4472 198.041 43.9294 197.504C44.4116 196.965 45.0809 196.695 45.9374 196.695C46.7651 196.695 47.4218 196.97 47.9076 197.521C48.397 198.071 48.6417 198.816 48.6417 199.755ZM44.1345 199.755C44.1345 200.511 44.2857 201.087 44.5879 201.483C44.8902 201.878 45.3346 202.076 45.9212 202.076C46.5078 202.076 46.9522 201.88 47.2545 201.488C47.5604 201.092 47.7133 200.515 47.7133 199.755C47.7133 199.003 47.5604 198.433 47.2545 198.044C46.9522 197.652 46.5042 197.456 45.9104 197.456C45.3239 197.456 44.8812 197.648 44.5825 198.033C44.2839 198.418 44.1345 198.992 44.1345 199.755ZM52.1287 202.087C52.2871 202.087 52.44 202.076 52.5875 202.055C52.7351 202.03 52.852 202.004 52.9384 201.979V202.665C52.8412 202.712 52.6973 202.749 52.5066 202.778C52.3194 202.811 52.1503 202.827 51.9992 202.827C50.8548 202.827 50.2827 202.224 50.2827 201.018V197.499H49.4352V197.067L50.2827 196.695L50.6605 195.432H51.1787V196.803H52.8952V197.499H51.1787V200.981C51.1787 201.337 51.2633 201.61 51.4324 201.801C51.6015 201.992 51.8336 202.087 52.1287 202.087ZM55.022 202.719H54.1259V196.803H55.022V202.719ZM54.0503 195.2C54.0503 194.994 54.1007 194.845 54.2015 194.752C54.3022 194.654 54.4282 194.606 54.5793 194.606C54.7233 194.606 54.8474 194.654 54.9518 194.752C55.0561 194.849 55.1083 194.998 55.1083 195.2C55.1083 195.401 55.0561 195.552 54.9518 195.653C54.8474 195.75 54.7233 195.799 54.5793 195.799C54.4282 195.799 54.3022 195.75 54.2015 195.653C54.1007 195.552 54.0503 195.401 54.0503 195.2ZM60.9704 202.719V198.892C60.9704 198.409 60.8606 198.05 60.6411 197.812C60.4216 197.575 60.0779 197.456 59.6101 197.456C58.9912 197.456 58.5377 197.623 58.2499 197.958C57.962 198.293 57.818 198.845 57.818 199.615V202.719H56.922V196.803H57.6507L57.7964 197.612H57.8396C58.0231 197.321 58.2804 197.096 58.6115 196.938C58.9426 196.776 59.3114 196.695 59.7181 196.695C60.4306 196.695 60.9668 196.868 61.3266 197.213C61.6865 197.555 61.8664 198.104 61.8664 198.859V202.719H60.9704ZM68.5543 196.803V197.37L67.4586 197.499C67.5593 197.625 67.6493 197.791 67.7284 197.996C67.8076 198.197 67.8472 198.426 67.8472 198.681C67.8472 199.261 67.6493 199.723 67.2534 200.068C66.8576 200.414 66.3142 200.587 65.6233 200.587C65.447 200.587 65.2814 200.572 65.1267 200.543C64.7452 200.745 64.5545 200.999 64.5545 201.305C64.5545 201.466 64.6211 201.587 64.7542 201.666C64.8874 201.742 65.1159 201.78 65.4398 201.78H66.4869C67.1275 201.78 67.6187 201.914 67.9605 202.184C68.306 202.454 68.4787 202.846 68.4787 203.361C68.4787 204.016 68.216 204.514 67.6907 204.856C67.1653 205.202 66.3988 205.374 65.3912 205.374C64.6175 205.374 64.0201 205.231 63.5991 204.943C63.1817 204.655 62.973 204.248 62.973 203.723C62.973 203.363 63.0881 203.052 63.3184 202.789C63.5487 202.526 63.8726 202.348 64.29 202.255C64.1389 202.186 64.0111 202.08 63.9068 201.936C63.806 201.792 63.7556 201.625 63.7556 201.434C63.7556 201.218 63.8132 201.029 63.9284 200.867C64.0435 200.705 64.2253 200.549 64.4736 200.398C64.1677 200.272 63.9176 200.058 63.7233 199.755C63.5325 199.453 63.4372 199.108 63.4372 198.719C63.4372 198.071 63.6315 197.573 64.0201 197.224C64.4088 196.871 64.9594 196.695 65.6719 196.695C65.9813 196.695 66.2602 196.731 66.5085 196.803H68.5543ZM63.8366 203.712C63.8366 204.032 63.9716 204.275 64.2414 204.441C64.5113 204.606 64.8982 204.689 65.402 204.689C66.1541 204.689 66.7101 204.576 67.0699 204.349C67.4334 204.126 67.6151 203.822 67.6151 203.437C67.6151 203.116 67.5161 202.893 67.3182 202.767C67.1203 202.645 66.7478 202.584 66.2009 202.584H65.1267C64.7201 202.584 64.4034 202.681 64.1767 202.875C63.95 203.07 63.8366 203.348 63.8366 203.712ZM64.3224 198.697C64.3224 199.111 64.4394 199.424 64.6733 199.637C64.9072 199.849 65.2328 199.955 65.6503 199.955C66.5247 199.955 66.962 199.53 66.962 198.681C66.962 197.792 66.5193 197.348 65.6341 197.348C65.2131 197.348 64.8892 197.461 64.6625 197.688C64.4358 197.915 64.3224 198.251 64.3224 198.697ZM79.6253 198.762C79.6253 200.025 79.305 201.018 78.6644 201.742C78.0275 202.465 77.1405 202.827 76.0033 202.827C74.841 202.827 73.9431 202.472 73.3098 201.763C72.6801 201.051 72.3652 200.047 72.3652 198.751C72.3652 197.467 72.6819 196.472 73.3152 195.766C73.9485 195.057 74.8482 194.703 76.0141 194.703C77.1477 194.703 78.0329 195.063 78.6698 195.783C79.3068 196.502 79.6253 197.495 79.6253 198.762ZM73.3368 198.762C73.3368 199.831 73.5635 200.642 74.0169 201.197C74.4739 201.747 75.1361 202.022 76.0033 202.022C76.8778 202.022 77.5381 201.747 77.9843 201.197C78.4305 200.646 78.6536 199.835 78.6536 198.762C78.6536 197.701 78.4305 196.896 77.9843 196.349C77.5417 195.799 76.885 195.523 76.0141 195.523C75.1397 195.523 74.4739 195.801 74.0169 196.355C73.5635 196.905 73.3368 197.708 73.3368 198.762ZM84.0083 202.827C83.6233 202.827 83.2706 202.757 82.9503 202.616C82.6336 202.472 82.3674 202.253 82.1514 201.958H82.0867C82.1299 202.303 82.1514 202.631 82.1514 202.94V205.374H81.2554V196.803H81.9841L82.1083 197.612H82.1514C82.3818 197.289 82.6498 197.055 82.9557 196.911C83.2616 196.767 83.6125 196.695 84.0083 196.695C84.7928 196.695 85.3973 196.963 85.822 197.499C86.2502 198.035 86.4643 198.787 86.4643 199.755C86.4643 200.727 86.2466 201.483 85.8112 202.022C85.3793 202.559 84.7784 202.827 84.0083 202.827ZM83.8787 197.456C83.2742 197.456 82.837 197.623 82.5671 197.958C82.2972 198.293 82.1586 198.825 82.1514 199.556V199.755C82.1514 200.587 82.29 201.182 82.5671 201.542C82.8442 201.898 83.2886 202.076 83.9003 202.076C84.4113 202.076 84.8108 201.869 85.0987 201.456C85.3901 201.042 85.5359 200.471 85.5359 199.745C85.5359 199.007 85.3901 198.442 85.0987 198.05C84.8108 197.654 84.4041 197.456 83.8787 197.456ZM89.9459 202.087C90.1042 202.087 90.2572 202.076 90.4047 202.055C90.5523 202.03 90.6692 202.004 90.7556 201.979V202.665C90.6584 202.712 90.5145 202.749 90.3238 202.778C90.1366 202.811 89.9675 202.827 89.8164 202.827C88.672 202.827 88.0999 202.224 88.0999 201.018V197.499H87.2524V197.067L88.0999 196.695L88.4777 195.432H88.9959V196.803H90.7124V197.499H88.9959V200.981C88.9959 201.337 89.0805 201.61 89.2496 201.801C89.4187 201.992 89.6508 202.087 89.9459 202.087ZM92.8391 202.719H91.9431V196.803H92.8391V202.719ZM91.8675 195.2C91.8675 194.994 91.9179 194.845 92.0187 194.752C92.1194 194.654 92.2454 194.606 92.3965 194.606C92.5405 194.606 92.6646 194.654 92.769 194.752C92.8733 194.849 92.9255 194.998 92.9255 195.2C92.9255 195.401 92.8733 195.552 92.769 195.653C92.6646 195.75 92.5405 195.799 92.3965 195.799C92.2454 195.799 92.1194 195.75 92.0187 195.653C91.9179 195.552 91.8675 195.401 91.8675 195.2ZM99.8455 199.755C99.8455 200.72 99.6026 201.474 99.1168 202.017C98.631 202.557 97.9599 202.827 97.1034 202.827C96.5744 202.827 96.1048 202.703 95.6946 202.454C95.2844 202.206 94.9677 201.85 94.7446 201.385C94.5215 200.921 94.4099 200.378 94.4099 199.755C94.4099 198.791 94.651 198.041 95.1332 197.504C95.6154 196.965 96.2848 196.695 97.1412 196.695C97.9689 196.695 98.6256 196.97 99.1114 197.521C99.6008 198.071 99.8455 198.816 99.8455 199.755ZM95.3383 199.755C95.3383 200.511 95.4895 201.087 95.7918 201.483C96.094 201.878 96.5385 202.076 97.125 202.076C97.7116 202.076 98.156 201.88 98.4583 201.488C98.7642 201.092 98.9171 200.515 98.9171 199.755C98.9171 199.003 98.7642 198.433 98.4583 198.044C98.156 197.652 97.708 197.456 97.1142 197.456C96.5277 197.456 96.085 197.648 95.7864 198.033C95.4877 198.418 95.3383 198.992 95.3383 199.755ZM105.47 202.719V198.892C105.47 198.409 105.36 198.05 105.141 197.812C104.921 197.575 104.578 197.456 104.11 197.456C103.491 197.456 103.037 197.623 102.75 197.958C102.462 198.293 102.318 198.845 102.318 199.615V202.719H101.422V196.803H102.15L102.296 197.612H102.339C102.523 197.321 102.78 197.096 103.111 196.938C103.442 196.776 103.811 196.695 104.218 196.695C104.93 196.695 105.466 196.868 105.826 197.213C106.186 197.555 106.366 198.104 106.366 198.859V202.719H105.47ZM113.993 202.719H113.119V197.094C113.119 196.626 113.133 196.184 113.162 195.766C113.086 195.842 113.002 195.921 112.908 196.004C112.815 196.087 112.386 196.437 111.624 197.056L111.149 196.441L113.238 194.827H113.993V202.719Z" class="path-3"/> -<rect x="36.3948" y="286.293" width="273.21" height="34.7435" rx="1.97406" stroke-width="0.789625" class="rect-4"/> -<path d="M55.5924 300.406C55.5924 301.319 55.2798 302.022 54.6547 302.516C54.0337 303.005 53.1433 303.25 51.9835 303.25H50.9225V306.797H49.8737V297.778H52.2118C54.4655 297.778 55.5924 298.654 55.5924 300.406ZM50.9225 302.349H51.8663C52.7958 302.349 53.4682 302.199 53.8836 301.899C54.2989 301.599 54.5066 301.117 54.5066 300.455C54.5066 299.859 54.3113 299.415 53.9206 299.123C53.5299 298.831 52.9212 298.685 52.0946 298.685H50.9225V302.349ZM61.4899 306.797L61.2863 305.835H61.237C60.8997 306.258 60.5625 306.546 60.2252 306.698C59.8921 306.846 59.4747 306.92 58.9729 306.92C58.3026 306.92 57.7762 306.748 57.3937 306.402C57.0153 306.057 56.8262 305.565 56.8262 304.928C56.8262 303.562 57.9181 302.847 60.1019 302.781L61.2493 302.744V302.324C61.2493 301.794 61.1341 301.403 60.9038 301.152C60.6776 300.897 60.3137 300.77 59.8119 300.77C59.2485 300.77 58.611 300.943 57.8995 301.288L57.5849 300.505C57.9181 300.324 58.282 300.182 58.6768 300.079C59.0758 299.976 59.4747 299.925 59.8736 299.925C60.6797 299.925 61.276 300.104 61.6626 300.461C62.0533 300.819 62.2487 301.393 62.2487 302.183V306.797H61.4899ZM59.1765 306.075C59.814 306.075 60.3137 305.9 60.6756 305.551C61.0416 305.201 61.2246 304.712 61.2246 304.083V303.472L60.2006 303.515C59.3863 303.544 58.7982 303.671 58.4362 303.897C58.0784 304.12 57.8995 304.467 57.8995 304.94C57.8995 305.31 58.0106 305.592 58.2327 305.785C58.4589 305.978 58.7735 306.075 59.1765 306.075ZM63.2912 300.036H64.3893L65.8698 303.891C66.1947 304.771 66.3962 305.407 66.4744 305.798H66.5237C66.5772 305.588 66.6882 305.23 66.8569 304.724C67.0296 304.214 67.5889 302.651 68.5348 300.036H69.6329L66.7273 307.735C66.4394 308.495 66.1022 309.034 65.7156 309.351C65.3331 309.672 64.8622 309.832 64.3029 309.832C63.9904 309.832 63.6819 309.797 63.3776 309.727V308.907C63.6038 308.956 63.8567 308.981 64.1364 308.981C64.8396 308.981 65.3414 308.586 65.6416 307.796L66.0179 306.834L63.2912 300.036ZM77.3379 306.797H76.3385V300.369C76.3385 299.834 76.355 299.328 76.3879 298.851C76.3015 298.938 76.2049 299.028 76.0979 299.123C75.991 299.217 75.5016 299.618 74.6297 300.326L74.0869 299.622L76.4743 297.778H77.3379V306.797ZM86.7517 302.275C86.7517 303.834 86.505 304.998 86.0114 305.767C85.522 306.536 84.7715 306.92 83.7598 306.92C82.7892 306.92 82.051 306.527 81.5451 305.742C81.0393 304.952 80.7863 303.797 80.7863 302.275C80.7863 300.704 81.031 299.538 81.5205 298.777C82.0099 298.016 82.7563 297.636 83.7598 297.636C84.7386 297.636 85.4809 298.033 85.9868 298.827C86.4967 299.62 86.7517 300.77 86.7517 302.275ZM81.8227 302.275C81.8227 303.587 81.977 304.543 82.2854 305.144C82.5938 305.74 83.0853 306.038 83.7598 306.038C84.4425 306.038 84.936 305.736 85.2403 305.131C85.5488 304.523 85.703 303.571 85.703 302.275C85.703 300.98 85.5488 300.032 85.2403 299.431C84.936 298.827 84.4425 298.524 83.7598 298.524C83.0853 298.524 82.5938 298.822 82.2854 299.419C81.977 300.011 81.8227 300.963 81.8227 302.275ZM93.9817 302.275C93.9817 303.834 93.735 304.998 93.2415 305.767C92.7521 306.536 92.0015 306.92 90.9898 306.92C90.0192 306.92 89.281 306.527 88.7751 305.742C88.2693 304.952 88.0164 303.797 88.0164 302.275C88.0164 300.704 88.2611 299.538 88.7505 298.777C89.2399 298.016 89.9863 297.636 90.9898 297.636C91.9686 297.636 92.7109 298.033 93.2168 298.827C93.7267 299.62 93.9817 300.77 93.9817 302.275ZM89.0527 302.275C89.0527 303.587 89.207 304.543 89.5154 305.144C89.8239 305.74 90.3153 306.038 90.9898 306.038C91.6725 306.038 92.166 305.736 92.4703 305.131C92.7788 304.523 92.933 303.571 92.933 302.275C92.933 300.98 92.7788 300.032 92.4703 299.431C92.166 298.827 91.6725 298.524 90.9898 298.524C90.3153 298.524 89.8239 298.822 89.5154 299.419C89.207 300.011 89.0527 300.963 89.0527 302.275ZM106.338 302.201C106.338 303.69 105.933 304.829 105.123 305.619C104.317 306.404 103.155 306.797 101.637 306.797H99.139V297.778H101.903C103.305 297.778 104.395 298.167 105.172 298.944C105.949 299.721 106.338 300.807 106.338 302.201ZM105.228 302.238C105.228 301.062 104.932 300.176 104.339 299.579C103.751 298.983 102.875 298.685 101.711 298.685H100.188V305.89H101.465C102.715 305.89 103.655 305.584 104.284 304.971C104.913 304.354 105.228 303.443 105.228 302.238ZM114.025 306.797L112.902 303.928H109.287L108.176 306.797H107.115L110.681 297.741H111.563L115.11 306.797H114.025ZM112.575 302.984L111.526 300.19C111.39 299.836 111.251 299.402 111.107 298.888C111.016 299.283 110.887 299.717 110.718 300.19L109.657 302.984H112.575ZM116.35 306.797V297.778H117.399V306.797H116.35Z" class="path-4"/> -<path d="M41.5922 266.319H42.58L39.7353 274.211H38.8285L36 266.319H36.9716L38.7853 271.426C38.994 272.012 39.1595 272.583 39.2819 273.137C39.4114 272.554 39.5806 271.973 39.7893 271.393L41.5922 266.319ZM48.6417 271.248C48.6417 272.212 48.3988 272.966 47.913 273.509C47.4272 274.049 46.7561 274.319 45.8996 274.319C45.3706 274.319 44.901 274.195 44.4908 273.946C44.0806 273.698 43.7639 273.342 43.5408 272.878C43.3177 272.413 43.2061 271.87 43.2061 271.248C43.2061 270.283 43.4472 269.533 43.9294 268.997C44.4116 268.457 45.0809 268.187 45.9374 268.187C46.7651 268.187 47.4218 268.462 47.9076 269.013C48.397 269.563 48.6417 270.308 48.6417 271.248ZM44.1345 271.248C44.1345 272.003 44.2857 272.579 44.5879 272.975C44.8902 273.371 45.3346 273.569 45.9212 273.569C46.5078 273.569 46.9522 273.372 47.2545 272.98C47.5604 272.584 47.7133 272.007 47.7133 271.248C47.7133 270.495 47.5604 269.925 47.2545 269.536C46.9522 269.144 46.5042 268.948 45.9104 268.948C45.3239 268.948 44.8812 269.141 44.5825 269.526C44.2839 269.911 44.1345 270.485 44.1345 271.248ZM52.1287 273.579C52.2871 273.579 52.44 273.569 52.5875 273.547C52.7351 273.522 52.852 273.497 52.9384 273.471V274.157C52.8412 274.204 52.6973 274.242 52.5066 274.27C52.3194 274.303 52.1503 274.319 51.9992 274.319C50.8548 274.319 50.2827 273.716 50.2827 272.511V268.991H49.4352V268.559L50.2827 268.187L50.6605 266.924H51.1787V268.295H52.8952V268.991H51.1787V272.473C51.1787 272.829 51.2633 273.103 51.4324 273.293C51.6015 273.484 51.8336 273.579 52.1287 273.579ZM55.022 274.211H54.1259V268.295H55.022V274.211ZM54.0503 266.692C54.0503 266.487 54.1007 266.337 54.2015 266.244C54.3022 266.147 54.4282 266.098 54.5793 266.098C54.7233 266.098 54.8474 266.147 54.9518 266.244C55.0561 266.341 55.1083 266.49 55.1083 266.692C55.1083 266.893 55.0561 267.044 54.9518 267.145C54.8474 267.242 54.7233 267.291 54.5793 267.291C54.4282 267.291 54.3022 267.242 54.2015 267.145C54.1007 267.044 54.0503 266.893 54.0503 266.692ZM60.9704 274.211V270.384C60.9704 269.902 60.8606 269.542 60.6411 269.304C60.4216 269.067 60.0779 268.948 59.6101 268.948C58.9912 268.948 58.5377 269.115 58.2499 269.45C57.962 269.785 57.818 270.337 57.818 271.107V274.211H56.922V268.295H57.6507L57.7964 269.105H57.8396C58.0231 268.813 58.2804 268.588 58.6115 268.43C58.9426 268.268 59.3114 268.187 59.7181 268.187C60.4306 268.187 60.9668 268.36 61.3266 268.705C61.6865 269.047 61.8664 269.596 61.8664 270.351V274.211H60.9704ZM68.5543 268.295V268.862L67.4586 268.991C67.5593 269.117 67.6493 269.283 67.7284 269.488C67.8076 269.689 67.8472 269.918 67.8472 270.173C67.8472 270.753 67.6493 271.215 67.2534 271.561C66.8576 271.906 66.3142 272.079 65.6233 272.079C65.447 272.079 65.2814 272.064 65.1267 272.036C64.7452 272.237 64.5545 272.491 64.5545 272.797C64.5545 272.959 64.6211 273.079 64.7542 273.158C64.8874 273.234 65.1159 273.272 65.4398 273.272H66.4869C67.1275 273.272 67.6187 273.407 67.9605 273.677C68.306 273.946 68.4787 274.339 68.4787 274.853C68.4787 275.508 68.216 276.007 67.6907 276.348C67.1653 276.694 66.3988 276.867 65.3912 276.867C64.6175 276.867 64.0201 276.723 63.5991 276.435C63.1817 276.147 62.973 275.74 62.973 275.215C62.973 274.855 63.0881 274.544 63.3184 274.281C63.5487 274.018 63.8726 273.84 64.29 273.747C64.1389 273.678 64.0111 273.572 63.9068 273.428C63.806 273.284 63.7556 273.117 63.7556 272.926C63.7556 272.71 63.8132 272.521 63.9284 272.359C64.0435 272.198 64.2253 272.041 64.4736 271.89C64.1677 271.764 63.9176 271.55 63.7233 271.248C63.5325 270.945 63.4372 270.6 63.4372 270.211C63.4372 269.563 63.6315 269.065 64.0201 268.716C64.4088 268.363 64.9594 268.187 65.6719 268.187C65.9813 268.187 66.2602 268.223 66.5085 268.295H68.5543ZM63.8366 275.204C63.8366 275.524 63.9716 275.767 64.2414 275.933C64.5113 276.098 64.8982 276.181 65.402 276.181C66.1541 276.181 66.7101 276.068 67.0699 275.841C67.4334 275.618 67.6151 275.314 67.6151 274.929C67.6151 274.609 67.5161 274.385 67.3182 274.26C67.1203 274.137 66.7478 274.076 66.2009 274.076H65.1267C64.7201 274.076 64.4034 274.173 64.1767 274.367C63.95 274.562 63.8366 274.841 63.8366 275.204ZM64.3224 270.19C64.3224 270.603 64.4394 270.916 64.6733 271.129C64.9072 271.341 65.2328 271.447 65.6503 271.447C66.5247 271.447 66.962 271.023 66.962 270.173C66.962 269.285 66.5193 268.84 65.6341 268.84C65.2131 268.84 64.8892 268.953 64.6625 269.18C64.4358 269.407 64.3224 269.743 64.3224 270.19ZM79.6253 270.254C79.6253 271.517 79.305 272.511 78.6644 273.234C78.0275 273.957 77.1405 274.319 76.0033 274.319C74.841 274.319 73.9431 273.964 73.3098 273.256C72.6801 272.543 72.3652 271.539 72.3652 270.244C72.3652 268.959 72.6819 267.964 73.3152 267.259C73.9485 266.55 74.8482 266.195 76.0141 266.195C77.1477 266.195 78.0329 266.555 78.6698 267.275C79.3068 267.994 79.6253 268.988 79.6253 270.254ZM73.3368 270.254C73.3368 271.323 73.5635 272.135 74.0169 272.689C74.4739 273.239 75.1361 273.515 76.0033 273.515C76.8778 273.515 77.5381 273.239 77.9843 272.689C78.4305 272.138 78.6536 271.327 78.6536 270.254C78.6536 269.193 78.4305 268.388 77.9843 267.841C77.5417 267.291 76.885 267.016 76.0141 267.016C75.1397 267.016 74.4739 267.293 74.0169 267.847C73.5635 268.397 73.3368 269.2 73.3368 270.254ZM84.0083 274.319C83.6233 274.319 83.2706 274.249 82.9503 274.108C82.6336 273.964 82.3674 273.745 82.1514 273.45H82.0867C82.1299 273.795 82.1514 274.123 82.1514 274.432V276.867H81.2554V268.295H81.9841L82.1083 269.105H82.1514C82.3818 268.781 82.6498 268.547 82.9557 268.403C83.2616 268.259 83.6125 268.187 84.0083 268.187C84.7928 268.187 85.3973 268.455 85.822 268.991C86.2502 269.527 86.4643 270.28 86.4643 271.248C86.4643 272.219 86.2466 272.975 85.8112 273.515C85.3793 274.051 84.7784 274.319 84.0083 274.319ZM83.8787 268.948C83.2742 268.948 82.837 269.115 82.5671 269.45C82.2972 269.785 82.1586 270.317 82.1514 271.048V271.248C82.1514 272.079 82.29 272.674 82.5671 273.034C82.8442 273.39 83.2886 273.569 83.9003 273.569C84.4113 273.569 84.8108 273.362 85.0987 272.948C85.3901 272.534 85.5359 271.964 85.5359 271.237C85.5359 270.499 85.3901 269.934 85.0987 269.542C84.8108 269.146 84.4041 268.948 83.8787 268.948ZM89.9459 273.579C90.1042 273.579 90.2572 273.569 90.4047 273.547C90.5523 273.522 90.6692 273.497 90.7556 273.471V274.157C90.6584 274.204 90.5145 274.242 90.3238 274.27C90.1366 274.303 89.9675 274.319 89.8164 274.319C88.672 274.319 88.0999 273.716 88.0999 272.511V268.991H87.2524V268.559L88.0999 268.187L88.4777 266.924H88.9959V268.295H90.7124V268.991H88.9959V272.473C88.9959 272.829 89.0805 273.103 89.2496 273.293C89.4187 273.484 89.6508 273.579 89.9459 273.579ZM92.8391 274.211H91.9431V268.295H92.8391V274.211ZM91.8675 266.692C91.8675 266.487 91.9179 266.337 92.0187 266.244C92.1194 266.147 92.2454 266.098 92.3965 266.098C92.5405 266.098 92.6646 266.147 92.769 266.244C92.8733 266.341 92.9255 266.49 92.9255 266.692C92.9255 266.893 92.8733 267.044 92.769 267.145C92.6646 267.242 92.5405 267.291 92.3965 267.291C92.2454 267.291 92.1194 267.242 92.0187 267.145C91.9179 267.044 91.8675 266.893 91.8675 266.692ZM99.8455 271.248C99.8455 272.212 99.6026 272.966 99.1168 273.509C98.631 274.049 97.9599 274.319 97.1034 274.319C96.5744 274.319 96.1048 274.195 95.6946 273.946C95.2844 273.698 94.9677 273.342 94.7446 272.878C94.5215 272.413 94.4099 271.87 94.4099 271.248C94.4099 270.283 94.651 269.533 95.1332 268.997C95.6154 268.457 96.2848 268.187 97.1412 268.187C97.9689 268.187 98.6256 268.462 99.1114 269.013C99.6008 269.563 99.8455 270.308 99.8455 271.248ZM95.3383 271.248C95.3383 272.003 95.4895 272.579 95.7918 272.975C96.094 273.371 96.5385 273.569 97.125 273.569C97.7116 273.569 98.156 273.372 98.4583 272.98C98.7642 272.584 98.9171 272.007 98.9171 271.248C98.9171 270.495 98.7642 269.925 98.4583 269.536C98.156 269.144 97.708 268.948 97.1142 268.948C96.5277 268.948 96.085 269.141 95.7864 269.526C95.4877 269.911 95.3383 270.485 95.3383 271.248ZM105.47 274.211V270.384C105.47 269.902 105.36 269.542 105.141 269.304C104.921 269.067 104.578 268.948 104.11 268.948C103.491 268.948 103.037 269.115 102.75 269.45C102.462 269.785 102.318 270.337 102.318 271.107V274.211H101.422V268.295H102.15L102.296 269.105H102.339C102.523 268.813 102.78 268.588 103.111 268.43C103.442 268.268 103.811 268.187 104.218 268.187C104.93 268.187 105.466 268.36 105.826 268.705C106.186 269.047 106.366 269.596 106.366 270.351V274.211H105.47ZM115.861 274.211H110.674V273.439L112.752 271.35C113.385 270.71 113.803 270.253 114.004 269.979C114.206 269.706 114.357 269.439 114.457 269.18C114.558 268.921 114.609 268.642 114.609 268.343C114.609 267.922 114.481 267.59 114.225 267.345C113.97 267.097 113.615 266.972 113.162 266.972C112.835 266.972 112.523 267.026 112.228 267.134C111.937 267.242 111.611 267.438 111.251 267.723L110.776 267.113C111.503 266.508 112.295 266.206 113.151 266.206C113.892 266.206 114.474 266.397 114.895 266.778C115.316 267.156 115.526 267.665 115.526 268.306C115.526 268.806 115.386 269.301 115.105 269.79C114.825 270.28 114.299 270.898 113.529 271.647L111.802 273.336V273.38H115.861V274.211Z" class="path-5"/> -<rect x="36.3948" y="97.8284" width="273.21" height="34.7435" rx="1.97406" stroke-width="0.789625" class="rect-5"/> -<path d="M56.7213 118.332H55.6726V114.088H50.9225V118.332H49.8737V109.313H50.9225V113.15H55.6726V109.313H56.7213V118.332ZM64.8828 114.945C64.8828 116.047 64.6052 116.909 64.05 117.53C63.4948 118.147 62.7278 118.455 61.749 118.455C61.1444 118.455 60.6077 118.314 60.1389 118.03C59.67 117.746 59.3081 117.339 59.0531 116.808C58.7982 116.278 58.6707 115.657 58.6707 114.945C58.6707 113.843 58.9462 112.986 59.4973 112.373C60.0484 111.756 60.8133 111.447 61.7922 111.447C62.7381 111.447 63.4886 111.762 64.0438 112.391C64.6031 113.021 64.8828 113.872 64.8828 114.945ZM59.7317 114.945C59.7317 115.809 59.9045 116.467 60.2499 116.919C60.5954 117.372 61.1033 117.598 61.7736 117.598C62.444 117.598 62.9519 117.374 63.2974 116.926C63.647 116.473 63.8217 115.813 63.8217 114.945C63.8217 114.086 63.647 113.434 63.2974 112.99C62.9519 112.541 62.4399 112.317 61.7613 112.317C61.091 112.317 60.5851 112.537 60.2437 112.977C59.9024 113.417 59.7317 114.073 59.7317 114.945ZM72.2053 118.332L70.9654 114.365C70.8872 114.123 70.7412 113.572 70.5274 112.712H70.478C70.3135 113.432 70.1696 113.987 70.0462 114.378L68.7692 118.332H67.5848L65.7403 111.571H66.8137C67.2496 113.269 67.5807 114.563 67.8069 115.451C68.0372 116.339 68.1688 116.938 68.2017 117.246H68.251C68.2963 117.012 68.3683 116.71 68.467 116.339C68.5698 115.965 68.6582 115.669 68.7322 115.451L69.9722 111.571H71.0826L72.2917 115.451C72.522 116.159 72.6783 116.753 72.7605 117.234H72.8099C72.8263 117.086 72.8695 116.858 72.9394 116.549C73.0135 116.241 73.4432 114.581 74.2288 111.571H75.2898L73.4206 118.332H72.2053ZM88.4173 118.332V113.934C88.4173 113.395 88.3022 112.992 88.0719 112.724C87.8416 112.453 87.4838 112.317 86.9985 112.317C86.361 112.317 85.8901 112.5 85.5858 112.866C85.2815 113.232 85.1293 113.796 85.1293 114.557V118.332H84.1052V113.934C84.1052 113.395 83.9901 112.992 83.7598 112.724C83.5295 112.453 83.1696 112.317 82.6802 112.317C82.0386 112.317 81.5677 112.511 81.2675 112.897C80.9714 113.28 80.8234 113.909 80.8234 114.785V118.332H79.7993V111.571H80.6321L80.7987 112.496H80.848C81.0413 112.167 81.3128 111.91 81.6623 111.725C82.016 111.54 82.4108 111.447 82.8468 111.447C83.9037 111.447 84.5946 111.83 84.9195 112.595H84.9689C85.1704 112.241 85.4624 111.962 85.8449 111.756C86.2274 111.55 86.6633 111.447 87.1527 111.447C87.9177 111.447 88.4893 111.645 88.8677 112.04C89.2501 112.43 89.4414 113.058 89.4414 113.921V118.332H88.4173ZM92.5197 111.571V115.957C92.5197 116.508 92.6451 116.919 92.896 117.191C93.1469 117.462 93.5396 117.598 94.0743 117.598C94.7816 117.598 95.2978 117.405 95.6227 117.018C95.9517 116.631 96.1162 116 96.1162 115.124V111.571H97.1402V118.332H96.2951L96.147 117.425H96.0915C95.8818 117.758 95.5898 118.013 95.2155 118.19C94.8454 118.367 94.4218 118.455 93.9447 118.455C93.1222 118.455 92.5053 118.26 92.094 117.869C91.6869 117.479 91.4833 116.854 91.4833 115.994V111.571H92.5197ZM102.02 118.455C101.041 118.455 100.282 118.155 99.7435 117.555C99.2089 116.95 98.9416 116.097 98.9416 114.995C98.9416 113.864 99.213 112.99 99.7559 112.373C100.303 111.756 101.08 111.447 102.088 111.447C102.413 111.447 102.738 111.482 103.062 111.552C103.387 111.622 103.642 111.705 103.827 111.799L103.513 112.669C103.287 112.578 103.04 112.504 102.772 112.447C102.505 112.385 102.269 112.354 102.063 112.354C100.689 112.354 100.003 113.23 100.003 114.982C100.003 115.813 100.169 116.451 100.502 116.895C100.84 117.339 101.337 117.561 101.995 117.561C102.559 117.561 103.136 117.44 103.729 117.197V118.104C103.276 118.338 102.707 118.455 102.02 118.455ZM109.965 118.332V113.958C109.965 113.407 109.84 112.996 109.589 112.724C109.338 112.453 108.946 112.317 108.411 112.317C107.699 112.317 107.179 112.511 106.85 112.897C106.525 113.284 106.363 113.917 106.363 114.797V118.332H105.339V108.733H106.363V111.639C106.363 111.988 106.346 112.278 106.313 112.509H106.375C106.577 112.184 106.862 111.929 107.233 111.744C107.607 111.554 108.033 111.46 108.51 111.46C109.336 111.46 109.955 111.657 110.366 112.052C110.782 112.443 110.99 113.066 110.99 113.921V118.332H109.965ZM120.743 116.488C120.743 117.117 120.508 117.602 120.039 117.943C119.571 118.285 118.913 118.455 118.065 118.455C117.169 118.455 116.47 118.314 115.968 118.03V117.08C116.293 117.244 116.64 117.374 117.01 117.468C117.385 117.563 117.745 117.61 118.09 117.61C118.625 117.61 119.036 117.526 119.324 117.357C119.612 117.185 119.756 116.923 119.756 116.574C119.756 116.311 119.64 116.087 119.41 115.901C119.184 115.712 118.74 115.49 118.078 115.235C117.448 115.001 117 114.797 116.733 114.624C116.47 114.448 116.272 114.248 116.141 114.026C116.013 113.804 115.949 113.539 115.949 113.23C115.949 112.679 116.173 112.245 116.622 111.929C117.07 111.608 117.685 111.447 118.466 111.447C119.194 111.447 119.906 111.596 120.601 111.892L120.237 112.724C119.558 112.445 118.943 112.305 118.392 112.305C117.907 112.305 117.541 112.381 117.294 112.533C117.047 112.685 116.924 112.895 116.924 113.162C116.924 113.343 116.969 113.498 117.06 113.625C117.154 113.753 117.304 113.874 117.51 113.989C117.716 114.104 118.111 114.271 118.695 114.489C119.496 114.781 120.037 115.075 120.317 115.371C120.601 115.667 120.743 116.039 120.743 116.488ZM127.041 118.332V113.958C127.041 113.407 126.916 112.996 126.665 112.724C126.414 112.453 126.021 112.317 125.487 112.317C124.775 112.317 124.255 112.511 123.926 112.897C123.601 113.284 123.438 113.917 123.438 114.797V118.332H122.414V108.733H123.438V111.639C123.438 111.988 123.422 112.278 123.389 112.509H123.451C123.652 112.184 123.938 111.929 124.308 111.744C124.683 111.554 125.108 111.46 125.585 111.46C126.412 111.46 127.031 111.657 127.442 112.052C127.857 112.443 128.065 113.066 128.065 113.921V118.332H127.041ZM136.011 114.945C136.011 116.047 135.733 116.909 135.178 117.53C134.623 118.147 133.856 118.455 132.877 118.455C132.272 118.455 131.736 118.314 131.267 118.03C130.798 117.746 130.436 117.339 130.181 116.808C129.926 116.278 129.799 115.657 129.799 114.945C129.799 113.843 130.074 112.986 130.625 112.373C131.176 111.756 131.941 111.447 132.92 111.447C133.866 111.447 134.617 111.762 135.172 112.391C135.731 113.021 136.011 113.872 136.011 114.945ZM130.86 114.945C130.86 115.809 131.032 116.467 131.378 116.919C131.723 117.372 132.231 117.598 132.902 117.598C133.572 117.598 134.08 117.374 134.425 116.926C134.775 116.473 134.95 115.813 134.95 114.945C134.95 114.086 134.775 113.434 134.425 112.99C134.08 112.541 133.568 112.317 132.889 112.317C132.219 112.317 131.713 112.537 131.372 112.977C131.03 113.417 130.86 114.073 130.86 114.945ZM138.774 111.571V115.957C138.774 116.508 138.9 116.919 139.151 117.191C139.402 117.462 139.794 117.598 140.329 117.598C141.036 117.598 141.553 117.405 141.877 117.018C142.206 116.631 142.371 116 142.371 115.124V111.571H143.395V118.332H142.55L142.402 117.425H142.346C142.137 117.758 141.845 118.013 141.47 118.19C141.1 118.367 140.677 118.455 140.199 118.455C139.377 118.455 138.76 118.26 138.349 117.869C137.942 117.479 137.738 116.854 137.738 115.994V111.571H138.774ZM146.597 118.332H145.573V108.733H146.597V118.332ZM153.37 117.425H153.315C152.842 118.112 152.134 118.455 151.193 118.455C150.308 118.455 149.619 118.153 149.126 117.549C148.637 116.944 148.392 116.084 148.392 114.97C148.392 113.855 148.639 112.99 149.132 112.373C149.626 111.756 150.312 111.447 151.193 111.447C152.11 111.447 152.813 111.781 153.302 112.447H153.383L153.339 111.96L153.315 111.484V108.733H154.339V118.332H153.506L153.37 117.425ZM151.322 117.598C152.021 117.598 152.527 117.409 152.84 117.03C153.156 116.648 153.315 116.033 153.315 115.186V114.97C153.315 114.012 153.154 113.329 152.833 112.922C152.517 112.511 152.009 112.305 151.31 112.305C150.709 112.305 150.249 112.539 149.928 113.008C149.611 113.473 149.453 114.131 149.453 114.982C149.453 115.846 149.611 116.498 149.928 116.938C150.245 117.378 150.709 117.598 151.322 117.598ZM165.622 118.332L164.499 115.463H160.884L159.774 118.332H158.712L162.278 109.276H163.16L166.707 118.332H165.622ZM164.172 114.52L163.123 111.725C162.988 111.371 162.848 110.938 162.704 110.423C162.613 110.818 162.484 111.252 162.315 111.725L161.254 114.52H164.172ZM168.817 118.332H167.793V108.733H168.817V118.332ZM172.013 118.332H170.989V111.571H172.013V118.332ZM170.902 109.739C170.902 109.504 170.96 109.334 171.075 109.227C171.19 109.116 171.334 109.06 171.507 109.06C171.671 109.06 171.813 109.116 171.933 109.227C172.052 109.338 172.111 109.508 172.111 109.739C172.111 109.969 172.052 110.142 171.933 110.257C171.813 110.368 171.671 110.423 171.507 110.423C171.334 110.423 171.19 110.368 171.075 110.257C170.96 110.142 170.902 109.969 170.902 109.739ZM176.886 118.455C175.907 118.455 175.149 118.155 174.61 117.555C174.075 116.95 173.808 116.097 173.808 114.995C173.808 113.864 174.079 112.99 174.622 112.373C175.169 111.756 175.946 111.447 176.954 111.447C177.279 111.447 177.604 111.482 177.929 111.552C178.254 111.622 178.509 111.705 178.694 111.799L178.379 112.669C178.153 112.578 177.906 112.504 177.639 112.447C177.372 112.385 177.135 112.354 176.929 112.354C175.556 112.354 174.869 113.23 174.869 114.982C174.869 115.813 175.036 116.451 175.369 116.895C175.706 117.339 176.204 117.561 176.862 117.561C177.425 117.561 178.003 117.44 178.595 117.197V118.104C178.143 118.338 177.573 118.455 176.886 118.455ZM183.061 118.455C182.062 118.455 181.272 118.151 180.692 117.542C180.117 116.934 179.829 116.089 179.829 115.007C179.829 113.917 180.096 113.051 180.631 112.41C181.17 111.768 181.891 111.447 182.796 111.447C183.643 111.447 184.314 111.727 184.807 112.286C185.301 112.842 185.547 113.576 185.547 114.489V115.137H180.89C180.91 115.93 181.11 116.533 181.488 116.944C181.871 117.355 182.407 117.561 183.098 117.561C183.826 117.561 184.546 117.409 185.257 117.104V118.017C184.896 118.174 184.552 118.285 184.227 118.351C183.906 118.42 183.518 118.455 183.061 118.455ZM182.784 112.305C182.241 112.305 181.807 112.482 181.482 112.835C181.161 113.189 180.972 113.679 180.915 114.304H184.449C184.449 113.658 184.305 113.165 184.018 112.823C183.73 112.478 183.318 112.305 182.784 112.305ZM193.666 111.447C193.966 111.447 194.235 111.472 194.474 111.522L194.332 112.472C194.052 112.41 193.806 112.379 193.592 112.379C193.045 112.379 192.576 112.601 192.185 113.045C191.799 113.489 191.605 114.043 191.605 114.705V118.332H190.581V111.571H191.426L191.544 112.823H191.593C191.844 112.383 192.146 112.044 192.5 111.805C192.854 111.567 193.242 111.447 193.666 111.447ZM198.595 118.455C197.595 118.455 196.806 118.151 196.226 117.542C195.65 116.934 195.362 116.089 195.362 115.007C195.362 113.917 195.63 113.051 196.164 112.41C196.703 111.768 197.425 111.447 198.329 111.447C199.177 111.447 199.847 111.727 200.341 112.286C200.834 112.842 201.081 113.576 201.081 114.489V115.137H196.423C196.444 115.93 196.643 116.533 197.022 116.944C197.404 117.355 197.941 117.561 198.632 117.561C199.36 117.561 200.079 117.409 200.791 117.104V118.017C200.429 118.174 200.086 118.285 199.761 118.351C199.44 118.42 199.051 118.455 198.595 118.455ZM198.317 112.305C197.774 112.305 197.34 112.482 197.015 112.835C196.695 113.189 196.506 113.679 196.448 114.304H199.983C199.983 113.658 199.839 113.165 199.551 112.823C199.263 112.478 198.852 112.305 198.317 112.305ZM205.535 118.455C204.556 118.455 203.797 118.155 203.258 117.555C202.724 116.95 202.457 116.097 202.457 114.995C202.457 113.864 202.728 112.99 203.271 112.373C203.818 111.756 204.595 111.447 205.603 111.447C205.928 111.447 206.252 111.482 206.577 111.552C206.902 111.622 207.157 111.705 207.342 111.799L207.028 112.669C206.802 112.578 206.555 112.504 206.287 112.447C206.02 112.385 205.784 112.354 205.578 112.354C204.204 112.354 203.518 113.23 203.518 114.982C203.518 115.813 203.684 116.451 204.017 116.895C204.354 117.339 204.852 117.561 205.51 117.561C206.074 117.561 206.651 117.44 207.244 117.197V118.104C206.791 118.338 206.222 118.455 205.535 118.455ZM211.71 118.455C210.711 118.455 209.921 118.151 209.341 117.542C208.765 116.934 208.477 116.089 208.477 115.007C208.477 113.917 208.745 113.051 209.279 112.41C209.818 111.768 210.54 111.447 211.445 111.447C212.292 111.447 212.962 111.727 213.456 112.286C213.949 112.842 214.196 113.576 214.196 114.489V115.137H209.538C209.559 115.93 209.758 116.533 210.137 116.944C210.519 117.355 211.056 117.561 211.747 117.561C212.475 117.561 213.195 117.409 213.906 117.104V118.017C213.544 118.174 213.201 118.285 212.876 118.351C212.555 118.42 212.166 118.455 211.71 118.455ZM211.432 112.305C210.889 112.305 210.456 112.482 210.131 112.835C209.81 113.189 209.621 113.679 209.563 114.304H213.098C213.098 113.658 212.954 113.165 212.666 112.823C212.378 112.478 211.967 112.305 211.432 112.305ZM216.972 118.332H215.948V111.571H216.972V118.332ZM215.862 109.739C215.862 109.504 215.919 109.334 216.034 109.227C216.15 109.116 216.293 109.06 216.466 109.06C216.631 109.06 216.773 109.116 216.892 109.227C217.011 109.338 217.071 109.508 217.071 109.739C217.071 109.969 217.011 110.142 216.892 110.257C216.773 110.368 216.631 110.423 216.466 110.423C216.293 110.423 216.15 110.368 216.034 110.257C215.919 110.142 215.862 109.969 215.862 109.739ZM220.624 118.332L218.058 111.571H219.156L220.612 115.581C220.941 116.518 221.134 117.127 221.192 117.407H221.241C221.286 117.189 221.428 116.738 221.667 116.056C221.909 115.369 222.45 113.874 223.289 111.571H224.387L221.821 118.332H220.624ZM228.329 118.455C227.33 118.455 226.54 118.151 225.96 117.542C225.384 116.934 225.097 116.089 225.097 115.007C225.097 113.917 225.364 113.051 225.899 112.41C226.437 111.768 227.159 111.447 228.064 111.447C228.911 111.447 229.581 111.727 230.075 112.286C230.568 112.842 230.815 113.576 230.815 114.489V115.137H226.158C226.178 115.93 226.378 116.533 226.756 116.944C227.138 117.355 227.675 117.561 228.366 117.561C229.094 117.561 229.814 117.409 230.525 117.104V118.017C230.163 118.174 229.82 118.285 229.495 118.351C229.174 118.42 228.786 118.455 228.329 118.455ZM228.051 112.305C227.509 112.305 227.075 112.482 226.75 112.835C226.429 113.189 226.24 113.679 226.182 114.304H229.717C229.717 113.658 229.573 113.165 229.285 112.823C228.997 112.478 228.586 112.305 228.051 112.305ZM233.264 115.846V115.513C233.264 115.032 233.338 114.637 233.486 114.328C233.634 114.016 233.91 113.687 234.313 113.341C234.872 112.868 235.224 112.513 235.368 112.274C235.516 112.036 235.59 111.748 235.59 111.41C235.59 110.991 235.454 110.668 235.183 110.442C234.915 110.212 234.529 110.096 234.023 110.096C233.698 110.096 233.381 110.136 233.073 110.214C232.765 110.288 232.411 110.425 232.012 110.627L231.648 109.794C232.425 109.387 233.238 109.183 234.085 109.183C234.87 109.183 235.481 109.377 235.917 109.763C236.353 110.15 236.571 110.695 236.571 111.398C236.571 111.698 236.53 111.964 236.447 112.194C236.369 112.42 236.252 112.636 236.096 112.842C235.94 113.043 235.602 113.37 235.084 113.823C234.669 114.176 234.393 114.47 234.257 114.705C234.126 114.939 234.06 115.252 234.06 115.642V115.846H233.264ZM232.962 117.678C232.962 117.119 233.209 116.839 233.702 116.839C233.941 116.839 234.124 116.911 234.251 117.055C234.383 117.199 234.449 117.407 234.449 117.678C234.449 117.941 234.383 118.147 234.251 118.295C234.12 118.439 233.937 118.511 233.702 118.511C233.488 118.511 233.312 118.447 233.172 118.32C233.032 118.188 232.962 117.974 232.962 117.678Z" class="path-6"/> -<path d="M43.9348 81.7895C43.9348 82.8007 43.7315 83.6409 43.3249 84.3103C42.9182 84.9796 42.3442 85.433 41.6029 85.6705L43.4814 87.6245H42.1481L40.6097 85.8433L40.3129 85.8541C39.1505 85.8541 38.2527 85.4996 37.6193 84.7907C36.9896 84.0782 36.6747 83.0742 36.6747 81.7787C36.6747 80.494 36.9914 79.499 37.6247 78.7937C38.2581 78.0848 39.1577 77.7303 40.3237 77.7303C41.4572 77.7303 42.3424 78.0902 42.9794 78.8099C43.6163 79.5296 43.9348 80.5228 43.9348 81.7895ZM37.6463 81.7895C37.6463 82.8583 37.873 83.6697 38.3265 84.2239C38.7835 84.7745 39.4456 85.0498 40.3129 85.0498C41.1873 85.0498 41.8476 84.7745 42.2939 84.2239C42.7401 83.6733 42.9632 82.8619 42.9632 81.7895C42.9632 80.7279 42.7401 79.9236 42.2939 79.3767C41.8512 78.8261 41.1945 78.5508 40.3237 78.5508C39.4492 78.5508 38.7835 78.8279 38.3265 79.3821C37.873 79.9326 37.6463 80.7351 37.6463 81.7895ZM46.407 79.8301V83.6679C46.407 84.1501 46.5168 84.51 46.7363 84.7475C46.9558 84.985 47.2995 85.1038 47.7673 85.1038C48.3862 85.1038 48.8378 84.9346 49.1221 84.5964C49.41 84.2581 49.554 83.7057 49.554 82.9392V79.8301H50.45V85.7461H49.7105L49.5809 84.9526H49.5324C49.3488 85.2441 49.0933 85.4672 48.7659 85.6219C48.442 85.7767 48.0713 85.8541 47.6539 85.8541C46.9342 85.8541 46.3944 85.6831 46.0346 85.3413C45.6783 84.9994 45.5002 84.4524 45.5002 83.7003V79.8301H46.407ZM54.8546 85.8541C53.9802 85.8541 53.2892 85.5878 52.7819 85.0552C52.2781 84.5226 52.0262 83.7831 52.0262 82.8367C52.0262 81.883 52.2601 81.1256 52.7279 80.5642C53.1993 80.0028 53.8308 79.7221 54.6225 79.7221C55.3638 79.7221 55.9504 79.9668 56.3822 80.4562C56.814 80.942 57.0299 81.5844 57.0299 82.3832V82.95H52.9546C52.9726 83.6445 53.1471 84.1717 53.4782 84.5316C53.8128 84.8914 54.2824 85.0714 54.887 85.0714C55.5239 85.0714 56.1537 84.9382 56.7762 84.6719V85.4708C56.4596 85.6075 56.1591 85.7047 55.8748 85.7623C55.5941 85.8235 55.2541 85.8541 54.8546 85.8541ZM54.6117 80.4724C54.1367 80.4724 53.7571 80.6272 53.4728 80.9366C53.1921 81.2461 53.0266 81.6743 52.9762 82.2213H56.0691C56.0691 81.6563 55.9432 81.2245 55.6913 80.9258C55.4394 80.6236 55.0795 80.4724 54.6117 80.4724ZM62.3792 84.1321C62.3792 84.6827 62.1741 85.1074 61.7638 85.406C61.3536 85.7047 60.7778 85.8541 60.0365 85.8541C59.2521 85.8541 58.6403 85.7299 58.2013 85.4816V84.6503C58.4856 84.7943 58.7896 84.9076 59.1135 84.9904C59.441 85.0732 59.7558 85.1145 60.0581 85.1145C60.5259 85.1145 60.8858 85.0408 61.1377 84.8932C61.3896 84.7421 61.5155 84.5136 61.5155 84.2077C61.5155 83.9774 61.4148 83.7813 61.2133 83.6193C61.0153 83.4538 60.6267 83.2595 60.0473 83.0364C59.4968 82.8313 59.1045 82.6531 58.8706 82.502C58.6403 82.3473 58.4676 82.1727 58.3524 81.9784C58.2409 81.7841 58.1851 81.552 58.1851 81.2821C58.1851 80.7999 58.3812 80.4202 58.7734 80.1431C59.1657 79.8625 59.7037 79.7221 60.3874 79.7221C61.0243 79.7221 61.6469 79.8517 62.255 80.1108L61.9366 80.8395C61.3428 80.5948 60.8048 80.4724 60.3226 80.4724C59.898 80.4724 59.5777 80.539 59.3618 80.6721C59.1459 80.8053 59.0379 80.9888 59.0379 81.2227C59.0379 81.381 59.0775 81.516 59.1567 81.6275C59.2395 81.7391 59.3708 81.8453 59.5507 81.946C59.7307 82.0468 60.0761 82.1925 60.5871 82.3832C61.2888 82.6387 61.762 82.896 62.0067 83.1551C62.255 83.4142 62.3792 83.7399 62.3792 84.1321ZM65.7528 85.1145C65.9112 85.1145 66.0641 85.1038 66.2117 85.0822C66.3592 85.057 66.4761 85.0318 66.5625 85.0066V85.6921C66.4654 85.7389 66.3214 85.7767 66.1307 85.8055C65.9436 85.8379 65.7744 85.8541 65.6233 85.8541C64.4789 85.8541 63.9068 85.2513 63.9068 84.0458V80.5264H63.0593V80.0946L63.9068 79.7221L64.2846 78.459H64.8028V79.8301H66.5193V80.5264H64.8028V84.008C64.8028 84.3642 64.8874 84.6377 65.0565 84.8285C65.2256 85.0192 65.4578 85.1145 65.7528 85.1145ZM68.6461 85.7461H67.75V79.8301H68.6461V85.7461ZM67.6745 78.2269C67.6745 78.0218 67.7248 77.8725 67.8256 77.7789C67.9264 77.6817 68.0523 77.6332 68.2035 77.6332C68.3474 77.6332 68.4715 77.6817 68.5759 77.7789C68.6803 77.8761 68.7324 78.0254 68.7324 78.2269C68.7324 78.4284 68.6803 78.5796 68.5759 78.6803C68.4715 78.7775 68.3474 78.8261 68.2035 78.8261C68.0523 78.8261 67.9264 78.7775 67.8256 78.6803C67.7248 78.5796 67.6745 78.4284 67.6745 78.2269ZM75.6525 82.7827C75.6525 83.7471 75.4096 84.501 74.9238 85.0444C74.4379 85.5842 73.7668 85.8541 72.9104 85.8541C72.3814 85.8541 71.9118 85.7299 71.5015 85.4816C71.0913 85.2333 70.7746 84.877 70.5515 84.4128C70.3284 83.9486 70.2168 83.4052 70.2168 82.7827C70.2168 81.8183 70.4579 81.068 70.9402 80.5318C71.4224 79.992 72.0917 79.7221 72.9481 79.7221C73.7758 79.7221 74.4325 79.9974 74.9184 80.548C75.4078 81.0986 75.6525 81.8435 75.6525 82.7827ZM71.1453 82.7827C71.1453 83.5384 71.2964 84.1141 71.5987 84.51C71.901 84.9058 72.3454 85.1038 72.932 85.1038C73.5185 85.1038 73.9629 84.9076 74.2652 84.5154C74.5711 84.1195 74.724 83.542 74.724 82.7827C74.724 82.0306 74.5711 81.4602 74.2652 81.0716C73.9629 80.6793 73.5149 80.4832 72.9212 80.4832C72.3346 80.4832 71.892 80.6757 71.5933 81.0608C71.2946 81.4458 71.1453 82.0198 71.1453 82.7827ZM81.277 85.7461V81.919C81.277 81.4368 81.1672 81.077 80.9477 80.8395C80.7282 80.602 80.3846 80.4832 79.9167 80.4832C79.2978 80.4832 78.8444 80.6505 78.5565 80.9852C78.2686 81.3199 78.1247 81.8723 78.1247 82.6423V85.7461H77.2286V79.8301H77.9573L78.1031 80.6397H78.1463C78.3298 80.3483 78.5871 80.1234 78.9181 79.965C79.2492 79.8031 79.6181 79.7221 80.0247 79.7221C80.7372 79.7221 81.2734 79.8948 81.6333 80.2403C81.9931 80.5822 82.173 81.1309 82.173 81.8866V85.7461H81.277Z" class="path-7"/> -<g clip-path="url(#clip0_21428_72863)"> -<g clip-path="url(#clip1_21428_72863)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M36 152.708C36 149.219 38.8286 146.391 42.317 146.391C45.8055 146.391 48.634 149.219 48.634 152.708C48.634 156.196 45.8055 159.025 42.317 159.025C38.8286 159.025 36 156.196 36 152.708ZM37.0716 152.708C37.0716 155.604 39.4208 157.953 42.317 157.953C45.2132 157.953 47.5624 155.604 47.5624 152.708C47.5624 149.811 45.2132 147.462 42.317 147.462C39.4208 147.462 37.0716 149.811 37.0716 152.708ZM41.8382 150.705C41.7113 150.578 41.64 150.405 41.64 150.226C41.64 150.046 41.7113 149.874 41.8382 149.747C41.9651 149.62 42.1373 149.549 42.3168 149.549C42.4963 149.549 42.6684 149.62 42.7954 149.747C42.9223 149.874 42.9936 150.046 42.9936 150.226C42.9936 150.405 42.9223 150.578 42.7954 150.705C42.6684 150.831 42.4963 150.903 42.3168 150.903C42.1373 150.903 41.9651 150.831 41.8382 150.705ZM41.8656 151.918C41.8656 151.856 41.9163 151.805 41.9784 151.805H42.6552C42.7172 151.805 42.768 151.856 42.768 151.918V155.753C42.768 155.815 42.7172 155.866 42.6552 155.866H41.9784C41.9163 155.866 41.8656 155.815 41.8656 155.753V151.918Z" class="path-8"/> -</g> -<path d="M58.4652 156.812H57.5475V149.736H55.0483V148.921H60.9644V149.736H58.4652V156.812ZM61.0831 150.896H62.0439L63.3394 154.27C63.6237 155.04 63.8 155.596 63.8684 155.938H63.9116C63.9584 155.755 64.0555 155.441 64.2031 154.999C64.3542 154.553 64.8436 153.185 65.6713 150.896H66.6321L64.0897 157.633C63.8378 158.299 63.5427 158.77 63.2045 159.047C62.8698 159.328 62.4578 159.468 61.9684 159.468C61.6949 159.468 61.425 159.438 61.1587 159.376V158.659C61.3566 158.702 61.5779 158.723 61.8226 158.723C62.438 158.723 62.877 158.378 63.1397 157.687L63.4689 156.845L61.0831 150.896ZM70.3458 156.92C69.9607 156.92 69.6081 156.85 69.2878 156.71C68.9711 156.566 68.7048 156.346 68.4889 156.051H68.4242C68.4673 156.397 68.4889 156.724 68.4889 157.034V159.468H67.5929V150.896H68.3216L68.4457 151.706H68.4889C68.7192 151.382 68.9873 151.148 69.2932 151.004C69.5991 150.86 69.9499 150.789 70.3458 150.789C71.1303 150.789 71.7348 151.057 72.1595 151.593C72.5877 152.129 72.8018 152.881 72.8018 153.849C72.8018 154.821 72.5841 155.576 72.1487 156.116C71.7168 156.652 71.1159 156.92 70.3458 156.92ZM70.2162 151.55C69.6117 151.55 69.1745 151.717 68.9046 152.052C68.6347 152.386 68.4961 152.919 68.4889 153.649V153.849C68.4889 154.68 68.6275 155.276 68.9046 155.636C69.1817 155.992 69.6261 156.17 70.2378 156.17C70.7488 156.17 71.1483 155.963 71.4361 155.549C71.7276 155.136 71.8734 154.565 71.8734 153.838C71.8734 153.101 71.7276 152.536 71.4361 152.143C71.1483 151.748 70.7416 151.55 70.2162 151.55ZM76.8718 156.92C75.9973 156.92 75.3064 156.654 74.799 156.122C74.2952 155.589 74.0433 154.849 74.0433 153.903C74.0433 152.949 74.2772 152.192 74.745 151.631C75.2164 151.069 75.848 150.789 76.6397 150.789C77.381 150.789 77.9675 151.033 78.3993 151.523C78.8312 152.008 79.0471 152.651 79.0471 153.45V154.016H74.9717C74.9897 154.711 75.1642 155.238 75.4953 155.598C75.83 155.958 76.2996 156.138 76.9041 156.138C77.5411 156.138 78.1708 156.005 78.7934 155.738V156.537C78.4767 156.674 78.1762 156.771 77.8919 156.829C77.6113 156.89 77.2712 156.92 76.8718 156.92ZM76.6289 151.539C76.1538 151.539 75.7742 151.694 75.4899 152.003C75.2092 152.313 75.0437 152.741 74.9933 153.288H78.0863C78.0863 152.723 77.9603 152.291 77.7084 151.992C77.4565 151.69 77.0967 151.539 76.6289 151.539ZM85.3625 156.181C85.5209 156.181 85.6738 156.17 85.8214 156.149C85.9689 156.123 86.0859 156.098 86.1722 156.073V156.759C86.0751 156.805 85.9311 156.843 85.7404 156.872C85.5533 156.904 85.3841 156.92 85.233 156.92C84.0887 156.92 83.5165 156.318 83.5165 155.112V151.593H82.669V151.161L83.5165 150.789L83.8943 149.525H84.4125V150.896H86.129V151.593H84.4125V155.074C84.4125 155.431 84.4971 155.704 84.6662 155.895C84.8354 156.086 85.0675 156.181 85.3625 156.181ZM91.4081 156.812V152.985C91.4081 152.503 91.2984 152.143 91.0788 151.906C90.8593 151.668 90.5157 151.55 90.0479 151.55C89.4253 151.55 88.9701 151.719 88.6822 152.057C88.3979 152.395 88.2558 152.949 88.2558 153.72V156.812H87.3597V148.413H88.2558V150.956C88.2558 151.262 88.2414 151.515 88.2126 151.717H88.2666C88.4429 151.433 88.693 151.21 89.0169 151.048C89.3443 150.882 89.7168 150.799 90.1342 150.799C90.8575 150.799 91.3991 150.972 91.759 151.318C92.1224 151.659 92.3042 152.205 92.3042 152.953V156.812H91.4081ZM96.6494 156.92C95.775 156.92 95.084 156.654 94.5766 156.122C94.0728 155.589 93.8209 154.849 93.8209 153.903C93.8209 152.949 94.0549 152.192 94.5227 151.631C94.9941 151.069 95.6256 150.789 96.4173 150.789C97.1586 150.789 97.7452 151.033 98.177 151.523C98.6088 152.008 98.8247 152.651 98.8247 153.45V154.016H94.7494C94.7674 154.711 94.9419 155.238 95.273 155.598C95.6076 155.958 96.0772 156.138 96.6818 156.138C97.3187 156.138 97.9485 156.005 98.571 155.738V156.537C98.2544 156.674 97.9539 156.771 97.6696 156.829C97.3889 156.89 97.0488 156.92 96.6494 156.92ZM96.4065 151.539C95.9315 151.539 95.5518 151.694 95.2676 152.003C94.9869 152.313 94.8213 152.741 94.771 153.288H97.8639C97.8639 152.723 97.738 152.291 97.4861 151.992C97.2342 151.69 96.8743 151.539 96.4065 151.539ZM105.464 156.17C106.061 156.17 106.497 156.01 106.77 155.69C107.044 155.369 107.19 154.83 107.208 154.07V153.871C107.208 153.043 107.067 152.447 106.787 152.084C106.506 151.721 106.061 151.539 105.453 151.539C104.928 151.539 104.525 151.744 104.244 152.154C103.967 152.561 103.829 153.137 103.829 153.881C103.829 154.626 103.965 155.195 104.239 155.587C104.516 155.976 104.924 156.17 105.464 156.17ZM105.329 156.92C104.566 156.92 103.971 156.652 103.542 156.116C103.114 155.58 102.9 154.831 102.9 153.871C102.9 152.903 103.116 152.147 103.548 151.604C103.98 151.06 104.581 150.789 105.351 150.789C106.16 150.789 106.783 151.094 107.218 151.706H107.267L107.396 150.896H108.104V159.468H107.208V156.937C107.208 156.577 107.227 156.271 107.267 156.019H107.197C106.783 156.62 106.16 156.92 105.329 156.92ZM110.851 150.896V154.734C110.851 155.217 110.961 155.576 111.18 155.814C111.4 156.051 111.744 156.17 112.211 156.17C112.83 156.17 113.282 156.001 113.566 155.663C113.854 155.324 113.998 154.772 113.998 154.006V150.896H114.894V156.812H114.155L114.025 156.019H113.976C113.793 156.311 113.537 156.534 113.21 156.688C112.886 156.843 112.515 156.92 112.098 156.92C111.378 156.92 110.839 156.75 110.479 156.408C110.122 156.066 109.944 155.519 109.944 154.767V150.896H110.851ZM119.299 156.92C118.424 156.92 117.733 156.654 117.226 156.122C116.722 155.589 116.47 154.849 116.47 153.903C116.47 152.949 116.704 152.192 117.172 151.631C117.643 151.069 118.275 150.789 119.067 150.789C119.808 150.789 120.394 151.033 120.826 151.523C121.258 152.008 121.474 152.651 121.474 153.45V154.016H117.399C117.417 154.711 117.591 155.238 117.922 155.598C118.257 155.958 118.727 156.138 119.331 156.138C119.968 156.138 120.598 156.005 121.22 155.738V156.537C120.904 156.674 120.603 156.771 120.319 156.829C120.038 156.89 119.698 156.92 119.299 156.92ZM119.056 151.539C118.581 151.539 118.201 151.694 117.917 152.003C117.636 152.313 117.471 152.741 117.42 153.288H120.513C120.513 152.723 120.387 152.291 120.135 151.992C119.883 151.69 119.524 151.539 119.056 151.539ZM126.823 155.199C126.823 155.749 126.618 156.174 126.208 156.472C125.798 156.771 125.222 156.92 124.481 156.92C123.696 156.92 123.084 156.796 122.645 156.548V155.717C122.93 155.861 123.234 155.974 123.558 156.057C123.885 156.14 124.2 156.181 124.502 156.181C124.97 156.181 125.33 156.107 125.582 155.96C125.834 155.809 125.96 155.58 125.96 155.274C125.96 155.044 125.859 154.848 125.657 154.686C125.459 154.52 125.071 154.326 124.491 154.103C123.941 153.898 123.549 153.72 123.315 153.568C123.084 153.414 122.912 153.239 122.796 153.045C122.685 152.85 122.629 152.618 122.629 152.348C122.629 151.866 122.825 151.487 123.218 151.21C123.61 150.929 124.148 150.789 124.831 150.789C125.468 150.789 126.091 150.918 126.699 151.177L126.381 151.906C125.787 151.661 125.249 151.539 124.767 151.539C124.342 151.539 124.022 151.605 123.806 151.739C123.59 151.872 123.482 152.055 123.482 152.289C123.482 152.447 123.522 152.582 123.601 152.694C123.684 152.806 123.815 152.912 123.995 153.012C124.175 153.113 124.52 153.259 125.031 153.45C125.733 153.705 126.206 153.962 126.451 154.222C126.699 154.481 126.823 154.806 126.823 155.199ZM130.197 156.181C130.355 156.181 130.508 156.17 130.656 156.149C130.803 156.123 130.92 156.098 131.007 156.073V156.759C130.909 156.805 130.765 156.843 130.575 156.872C130.388 156.904 130.219 156.92 130.067 156.92C128.923 156.92 128.351 156.318 128.351 155.112V151.593H127.503V151.161L128.351 150.789L128.729 149.525H129.247V150.896H130.963V151.593H129.247V155.074C129.247 155.431 129.331 155.704 129.501 155.895C129.67 156.086 129.902 156.181 130.197 156.181ZM133.09 156.812H132.194V150.896H133.09V156.812ZM132.119 149.293C132.119 149.088 132.169 148.939 132.27 148.845C132.37 148.748 132.496 148.7 132.648 148.7C132.791 148.7 132.916 148.748 133.02 148.845C133.124 148.942 133.177 149.092 133.177 149.293C133.177 149.495 133.124 149.646 133.02 149.747C132.916 149.844 132.791 149.892 132.648 149.892C132.496 149.892 132.37 149.844 132.27 149.747C132.169 149.646 132.119 149.495 132.119 149.293ZM140.097 153.849C140.097 154.814 139.854 155.567 139.368 156.111C138.882 156.651 138.211 156.92 137.354 156.92C136.825 156.92 136.356 156.796 135.946 156.548C135.535 156.3 135.219 155.943 134.996 155.479C134.772 155.015 134.661 154.472 134.661 153.849C134.661 152.885 134.902 152.134 135.384 151.598C135.866 151.058 136.536 150.789 137.392 150.789C138.22 150.789 138.877 151.064 139.362 151.614C139.852 152.165 140.097 152.91 140.097 153.849ZM135.589 153.849C135.589 154.605 135.74 155.181 136.043 155.576C136.345 155.972 136.789 156.17 137.376 156.17C137.963 156.17 138.407 155.974 138.709 155.582C139.015 155.186 139.168 154.608 139.168 153.849C139.168 153.097 139.015 152.527 138.709 152.138C138.407 151.746 137.959 151.55 137.365 151.55C136.779 151.55 136.336 151.742 136.037 152.127C135.739 152.512 135.589 153.086 135.589 153.849ZM145.721 156.812V152.985C145.721 152.503 145.611 152.143 145.392 151.906C145.172 151.668 144.829 151.55 144.361 151.55C143.742 151.55 143.288 151.717 143.001 152.052C142.713 152.386 142.569 152.939 142.569 153.709V156.812H141.673V150.896H142.401L142.547 151.706H142.59C142.774 151.415 143.031 151.19 143.362 151.031C143.693 150.869 144.062 150.789 144.469 150.789C145.181 150.789 145.717 150.961 146.077 151.307C146.437 151.649 146.617 152.197 146.617 152.953V156.812H145.721ZM150.617 159.468C150.275 159.468 149.998 159.423 149.786 159.333V158.605C150.034 158.677 150.279 158.713 150.52 158.713C150.8 158.713 151.006 158.635 151.135 158.48C151.268 158.329 151.335 158.097 151.335 157.784V150.896H152.231V157.719C152.231 158.885 151.693 159.468 150.617 159.468ZM151.259 149.293C151.259 149.088 151.31 148.939 151.41 148.845C151.511 148.748 151.637 148.7 151.788 148.7C151.932 148.7 152.056 148.748 152.161 148.845C152.265 148.942 152.317 149.092 152.317 149.293C152.317 149.495 152.265 149.646 152.161 149.747C152.056 149.844 151.932 149.892 151.788 149.892C151.637 149.892 151.511 149.844 151.41 149.747C151.31 149.646 151.259 149.495 151.259 149.293ZM154.973 150.896V154.734C154.973 155.217 155.083 155.576 155.302 155.814C155.522 156.051 155.865 156.17 156.333 156.17C156.952 156.17 157.404 156.001 157.688 155.663C157.976 155.324 158.12 154.772 158.12 154.006V150.896H159.016V156.812H158.276L158.147 156.019H158.098C157.915 156.311 157.659 156.534 157.332 156.688C157.008 156.843 156.637 156.92 156.22 156.92C155.5 156.92 154.96 156.75 154.601 156.408C154.244 156.066 154.066 155.519 154.066 154.767V150.896H154.973ZM163.62 150.789C163.883 150.789 164.119 150.81 164.327 150.853L164.203 151.685C163.959 151.631 163.743 151.604 163.556 151.604C163.077 151.604 162.667 151.798 162.325 152.187C161.987 152.575 161.817 153.059 161.817 153.639V156.812H160.921V150.896H161.661L161.763 151.992H161.807C162.026 151.607 162.291 151.31 162.6 151.102C162.91 150.893 163.25 150.789 163.62 150.789ZM170.54 153.849C170.54 154.814 170.297 155.567 169.812 156.111C169.326 156.651 168.655 156.92 167.798 156.92C167.269 156.92 166.8 156.796 166.389 156.548C165.979 156.3 165.662 155.943 165.439 155.479C165.216 155.015 165.105 154.472 165.105 153.849C165.105 152.885 165.346 152.134 165.828 151.598C166.31 151.058 166.98 150.789 167.836 150.789C168.664 150.789 169.32 151.064 169.806 151.614C170.296 152.165 170.54 152.91 170.54 153.849ZM166.033 153.849C166.033 154.605 166.184 155.181 166.487 155.576C166.789 155.972 167.233 156.17 167.82 156.17C168.406 156.17 168.851 155.974 169.153 155.582C169.459 155.186 169.612 154.608 169.612 153.849C169.612 153.097 169.459 152.527 169.153 152.138C168.851 151.746 168.403 151.55 167.809 151.55C167.222 151.55 166.78 151.742 166.481 152.127C166.182 152.512 166.033 153.086 166.033 153.849ZM174.815 150.789C175.078 150.789 175.314 150.81 175.522 150.853L175.398 151.685C175.154 151.631 174.938 151.604 174.751 151.604C174.272 151.604 173.862 151.798 173.52 152.187C173.182 152.575 173.013 153.059 173.013 153.639V156.812H172.116V150.896H172.856L172.959 151.992H173.002C173.221 151.607 173.486 151.31 173.795 151.102C174.105 150.893 174.445 150.789 174.815 150.789ZM180.445 155.199C180.445 155.749 180.24 156.174 179.83 156.472C179.42 156.771 178.844 156.92 178.103 156.92C177.318 156.92 176.706 156.796 176.267 156.548V155.717C176.552 155.861 176.856 155.974 177.18 156.057C177.507 156.14 177.822 156.181 178.124 156.181C178.592 156.181 178.952 156.107 179.204 155.96C179.456 155.809 179.582 155.58 179.582 155.274C179.582 155.044 179.481 154.848 179.279 154.686C179.081 154.52 178.693 154.326 178.113 154.103C177.563 153.898 177.171 153.72 176.937 153.568C176.706 153.414 176.534 153.239 176.419 153.045C176.307 152.85 176.251 152.618 176.251 152.348C176.251 151.866 176.447 151.487 176.84 151.21C177.232 150.929 177.77 150.789 178.454 150.789C179.09 150.789 179.713 150.918 180.321 151.177L180.003 151.906C179.409 151.661 178.871 151.539 178.389 151.539C177.964 151.539 177.644 151.605 177.428 151.739C177.212 151.872 177.104 152.055 177.104 152.289C177.104 152.447 177.144 152.582 177.223 152.694C177.306 152.806 177.437 152.912 177.617 153.012C177.797 153.113 178.142 153.259 178.653 153.45C179.355 153.705 179.828 153.962 180.073 154.222C180.321 154.481 180.445 154.806 180.445 155.199ZM189.611 156.812L188.526 153.342C188.457 153.129 188.33 152.647 188.143 151.895H188.099C187.955 152.525 187.83 153.011 187.722 153.352L186.604 156.812H185.568L183.954 150.896H184.893C185.275 152.383 185.564 153.514 185.762 154.292C185.964 155.069 186.079 155.593 186.108 155.862H186.151C186.19 155.657 186.253 155.393 186.34 155.069C186.43 154.742 186.507 154.482 186.572 154.292L187.657 150.896H188.628L189.686 154.292C189.888 154.911 190.025 155.431 190.097 155.852H190.14C190.154 155.722 190.192 155.522 190.253 155.253C190.318 154.983 190.694 153.531 191.381 150.896H192.31L190.674 156.812H189.611ZM194.28 156.812H193.384V150.896H194.28V156.812ZM193.308 149.293C193.308 149.088 193.359 148.939 193.459 148.845C193.56 148.748 193.686 148.7 193.837 148.7C193.981 148.7 194.105 148.748 194.21 148.845C194.314 148.942 194.366 149.092 194.366 149.293C194.366 149.495 194.314 149.646 194.21 149.747C194.105 149.844 193.981 149.892 193.837 149.892C193.686 149.892 193.56 149.844 193.459 149.747C193.359 149.646 193.308 149.495 193.308 149.293ZM197.076 156.812H196.18V148.413H197.076V156.812ZM199.872 156.812H198.976V148.413H199.872V156.812ZM208.46 155.199C208.46 155.749 208.255 156.174 207.845 156.472C207.434 156.771 206.859 156.92 206.117 156.92C205.333 156.92 204.721 156.796 204.282 156.548V155.717C204.566 155.861 204.87 155.974 205.194 156.057C205.522 156.14 205.837 156.181 206.139 156.181C206.607 156.181 206.967 156.107 207.219 155.96C207.47 155.809 207.596 155.58 207.596 155.274C207.596 155.044 207.496 154.848 207.294 154.686C207.096 154.52 206.708 154.326 206.128 154.103C205.578 153.898 205.185 153.72 204.951 153.568C204.721 153.414 204.548 153.239 204.433 153.045C204.322 152.85 204.266 152.618 204.266 152.348C204.266 151.866 204.462 151.487 204.854 151.21C205.247 150.929 205.785 150.789 206.468 150.789C207.105 150.789 207.728 150.918 208.336 151.177L208.017 151.906C207.424 151.661 206.886 151.539 206.403 151.539C205.979 151.539 205.659 151.605 205.443 151.739C205.227 151.872 205.119 152.055 205.119 152.289C205.119 152.447 205.158 152.582 205.238 152.694C205.32 152.806 205.452 152.912 205.632 153.012C205.812 153.113 206.157 153.259 206.668 153.45C207.37 153.705 207.843 153.962 208.088 154.222C208.336 154.481 208.46 154.806 208.46 155.199ZM212.422 156.92C211.548 156.92 210.857 156.654 210.349 156.122C209.845 155.589 209.594 154.849 209.594 153.903C209.594 152.949 209.827 152.192 210.295 151.631C210.767 151.069 211.398 150.789 212.19 150.789C212.931 150.789 213.518 151.033 213.95 151.523C214.381 152.008 214.597 152.651 214.597 153.45V154.016H210.522C210.54 154.711 210.715 155.238 211.046 155.598C211.38 155.958 211.85 156.138 212.454 156.138C213.091 156.138 213.721 156.005 214.344 155.738V156.537C214.027 156.674 213.727 156.771 213.442 156.829C213.162 156.89 212.821 156.92 212.422 156.92ZM212.179 151.539C211.704 151.539 211.324 151.694 211.04 152.003C210.76 152.313 210.594 152.741 210.544 153.288H213.637C213.637 152.723 213.511 152.291 213.259 151.992C213.007 151.69 212.647 151.539 212.179 151.539ZM218.63 156.92C217.755 156.92 217.064 156.654 216.557 156.122C216.053 155.589 215.801 154.849 215.801 153.903C215.801 152.949 216.035 152.192 216.503 151.631C216.974 151.069 217.606 150.789 218.397 150.789C219.139 150.789 219.725 151.033 220.157 151.523C220.589 152.008 220.805 152.651 220.805 153.45V154.016H216.73C216.748 154.711 216.922 155.238 217.253 155.598C217.588 155.958 218.057 156.138 218.662 156.138C219.299 156.138 219.929 156.005 220.551 155.738V156.537C220.235 156.674 219.934 156.771 219.65 156.829C219.369 156.89 219.029 156.92 218.63 156.92ZM218.387 151.539C217.912 151.539 217.532 151.694 217.248 152.003C216.967 152.313 216.801 152.741 216.751 153.288H219.844C219.844 152.723 219.718 152.291 219.466 151.992C219.214 151.69 218.854 151.539 218.387 151.539ZM230.041 156.812L228.956 153.342C228.887 153.129 228.759 152.647 228.572 151.895H228.529C228.385 152.525 228.259 153.011 228.151 153.352L227.034 156.812H225.998L224.384 150.896H225.323C225.704 152.383 225.994 153.514 226.192 154.292C226.393 155.069 226.509 155.593 226.537 155.862H226.581C226.62 155.657 226.683 155.393 226.769 155.069C226.859 154.742 226.937 154.482 227.002 154.292L228.087 150.896H229.058L230.116 154.292C230.318 154.911 230.454 155.431 230.526 155.852H230.57C230.584 155.722 230.622 155.522 230.683 155.253C230.748 154.983 231.124 153.531 231.811 150.896H232.739L231.104 156.812H230.041ZM237.862 156.812V152.985C237.862 152.503 237.752 152.143 237.533 151.906C237.313 151.668 236.97 151.55 236.502 151.55C235.879 151.55 235.424 151.719 235.136 152.057C234.852 152.395 234.71 152.949 234.71 153.72V156.812H233.814V148.413H234.71V150.956C234.71 151.262 234.695 151.515 234.667 151.717H234.72C234.897 151.433 235.147 151.21 235.471 151.048C235.798 150.882 236.171 150.799 236.588 150.799C237.311 150.799 237.853 150.972 238.213 151.318C238.576 151.659 238.758 152.205 238.758 152.953V156.812H237.862ZM243.103 156.92C242.229 156.92 241.538 156.654 241.031 156.122C240.527 155.589 240.275 154.849 240.275 153.903C240.275 152.949 240.509 152.192 240.977 151.631C241.448 151.069 242.08 150.789 242.871 150.789C243.613 150.789 244.199 151.033 244.631 151.523C245.063 152.008 245.279 152.651 245.279 153.45V154.016H241.203C241.221 154.711 241.396 155.238 241.727 155.598C242.062 155.958 242.531 156.138 243.136 156.138C243.773 156.138 244.402 156.005 245.025 155.738V156.537C244.708 156.674 244.408 156.771 244.124 156.829C243.843 156.89 243.503 156.92 243.103 156.92ZM242.86 151.539C242.385 151.539 242.006 151.694 241.721 152.003C241.441 152.313 241.275 152.741 241.225 153.288H244.318C244.318 152.723 244.192 152.291 243.94 151.992C243.688 151.69 243.328 151.539 242.86 151.539ZM250.86 156.812V152.985C250.86 152.503 250.75 152.143 250.531 151.906C250.311 151.668 249.968 151.55 249.5 151.55C248.881 151.55 248.427 151.717 248.14 152.052C247.852 152.386 247.708 152.939 247.708 153.709V156.812H246.812V150.896H247.54L247.686 151.706H247.729C247.913 151.415 248.17 151.19 248.501 151.031C248.832 150.869 249.201 150.789 249.608 150.789C250.32 150.789 250.856 150.961 251.216 151.307C251.576 151.649 251.756 152.197 251.756 152.953V156.812H250.86ZM257.769 156.812L255.524 150.896H256.485L257.758 154.405C258.046 155.226 258.215 155.758 258.266 156.003H258.309C258.349 155.812 258.473 155.418 258.681 154.821C258.894 154.22 259.367 152.912 260.101 150.896H261.062L258.816 156.812H257.769ZM267.118 153.849C267.118 154.814 266.875 155.567 266.39 156.111C265.904 156.651 265.233 156.92 264.376 156.92C263.847 156.92 263.378 156.796 262.967 156.548C262.557 156.3 262.24 155.943 262.017 155.479C261.794 155.015 261.683 154.472 261.683 153.849C261.683 152.885 261.924 152.134 262.406 151.598C262.888 151.058 263.558 150.789 264.414 150.789C265.242 150.789 265.898 151.064 266.384 151.614C266.874 152.165 267.118 152.91 267.118 153.849ZM262.611 153.849C262.611 154.605 262.762 155.181 263.064 155.576C263.367 155.972 263.811 156.17 264.398 156.17C264.984 156.17 265.429 155.974 265.731 155.582C266.037 155.186 266.19 154.608 266.19 153.849C266.19 153.097 266.037 152.527 265.731 152.138C265.429 151.746 264.981 151.55 264.387 151.55C263.8 151.55 263.358 151.742 263.059 152.127C262.76 152.512 262.611 153.086 262.611 153.849ZM270.605 156.181C270.764 156.181 270.917 156.17 271.064 156.149C271.212 156.123 271.329 156.098 271.415 156.073V156.759C271.318 156.805 271.174 156.843 270.983 156.872C270.796 156.904 270.627 156.92 270.476 156.92C269.331 156.92 268.759 156.318 268.759 155.112V151.593H267.912V151.161L268.759 150.789L269.137 149.525H269.655V150.896H271.372V151.593H269.655V155.074C269.655 155.431 269.74 155.704 269.909 155.895C270.078 156.086 270.31 156.181 270.605 156.181ZM273.499 156.812H272.602V150.896H273.499V156.812ZM272.527 149.293C272.527 149.088 272.577 148.939 272.678 148.845C272.779 148.748 272.905 148.7 273.056 148.7C273.2 148.7 273.324 148.748 273.428 148.845C273.533 148.942 273.585 149.092 273.585 149.293C273.585 149.495 273.533 149.646 273.428 149.747C273.324 149.844 273.2 149.892 273.056 149.892C272.905 149.892 272.779 149.844 272.678 149.747C272.577 149.646 272.527 149.495 272.527 149.293ZM279.447 156.812V152.985C279.447 152.503 279.337 152.143 279.118 151.906C278.898 151.668 278.554 151.55 278.087 151.55C277.468 151.55 277.014 151.717 276.726 152.052C276.439 152.386 276.295 152.939 276.295 153.709V156.812H275.399V150.896H276.127L276.273 151.706H276.316C276.5 151.415 276.757 151.19 277.088 151.031C277.419 150.869 277.788 150.789 278.195 150.789C278.907 150.789 279.443 150.961 279.803 151.307C280.163 151.649 280.343 152.197 280.343 152.953V156.812H279.447ZM287.031 150.896V151.463L285.935 151.593C286.036 151.719 286.126 151.884 286.205 152.089C286.284 152.291 286.324 152.519 286.324 152.775C286.324 153.354 286.126 153.817 285.73 154.162C285.334 154.508 284.791 154.68 284.1 154.68C283.924 154.68 283.758 154.666 283.603 154.637C283.222 154.839 283.031 155.092 283.031 155.398C283.031 155.56 283.098 155.681 283.231 155.76C283.364 155.835 283.592 155.873 283.916 155.873H284.963C285.604 155.873 286.095 156.008 286.437 156.278C286.783 156.548 286.955 156.94 286.955 157.455C286.955 158.11 286.693 158.608 286.167 158.95C285.642 159.296 284.875 159.468 283.868 159.468C283.094 159.468 282.497 159.324 282.076 159.036C281.658 158.749 281.449 158.342 281.449 157.816C281.449 157.457 281.565 157.145 281.795 156.883C282.025 156.62 282.349 156.442 282.767 156.348C282.615 156.28 282.488 156.174 282.383 156.03C282.283 155.886 282.232 155.719 282.232 155.528C282.232 155.312 282.29 155.123 282.405 154.961C282.52 154.799 282.702 154.643 282.95 154.491C282.644 154.365 282.394 154.151 282.2 153.849C282.009 153.547 281.914 153.201 281.914 152.813C281.914 152.165 282.108 151.667 282.497 151.318C282.885 150.965 283.436 150.789 284.148 150.789C284.458 150.789 284.737 150.825 284.985 150.896H287.031ZM282.313 157.806C282.313 158.126 282.448 158.369 282.718 158.534C282.988 158.7 283.375 158.783 283.879 158.783C284.631 158.783 285.187 158.669 285.546 158.443C285.91 158.22 286.092 157.915 286.092 157.53C286.092 157.21 285.993 156.987 285.795 156.861C285.597 156.739 285.224 156.678 284.677 156.678H283.603C283.197 156.678 282.88 156.775 282.653 156.969C282.427 157.163 282.313 157.442 282.313 157.806ZM282.799 152.791C282.799 153.205 282.916 153.518 283.15 153.73C283.384 153.943 283.709 154.049 284.127 154.049C285.001 154.049 285.438 153.624 285.438 152.775C285.438 151.886 284.996 151.442 284.111 151.442C283.69 151.442 283.366 151.555 283.139 151.782C282.912 152.008 282.799 152.345 282.799 152.791ZM288.116 156.24C288.116 155.999 288.17 155.818 288.278 155.695C288.389 155.569 288.548 155.506 288.753 155.506C288.961 155.506 289.123 155.569 289.239 155.695C289.357 155.818 289.417 155.999 289.417 156.24C289.417 156.474 289.357 156.654 289.239 156.78C289.12 156.906 288.958 156.969 288.753 156.969C288.569 156.969 288.416 156.913 288.294 156.802C288.175 156.687 288.116 156.499 288.116 156.24Z" class="path-9"/> -</g> -<circle cx="79.75" cy="355.5" r="12.5" fill-opacity="0.12" class="circle-1"/> -<g clip-path="url(#clip2_21428_72863)"> -<path d="M85.8641 354.977H73.6359C73.5611 354.977 73.5 355.038 73.5 355.112V356.131C73.5 356.206 73.5611 356.267 73.6359 356.267H85.8641C85.9389 356.267 86 356.206 86 356.131V355.112C86 355.038 85.9389 354.977 85.8641 354.977Z" fill="white" class="path-10"/> -</g> -<circle cx="48.5" cy="355.5" r="12.5" class="circle-2"/> -<g clip-path="url(#clip3_21428_72863)"> -<path d="M49.0447 349.246H47.9545C47.8576 349.246 47.8092 349.292 47.8092 349.385V354.836H42.3953C42.2984 354.836 42.25 354.883 42.25 354.975V356.017C42.25 356.109 42.2984 356.156 42.3953 356.156H47.8092V361.607C47.8092 361.7 47.8576 361.746 47.9545 361.746H49.0447C49.1415 361.746 49.19 361.7 49.19 361.607V356.156H54.6047C54.7016 356.156 54.75 356.109 54.75 356.017V354.975C54.75 354.883 54.7016 354.836 54.6047 354.836H49.19V349.385C49.19 349.292 49.1415 349.246 49.0447 349.246Z" fill="white" class="path-11"/> -</g> -<defs> -<filter id="filter0_d_21428_72863" x="0.682432" y="0.227477" width="344.635" height="402.635" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.54505"/> -<feGaussianBlur stdDeviation="1.15878"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_21428_72863"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_21428_72863" result="shape"/> -</filter> -<clipPath id="clip0_21428_72863"> -<rect width="274" height="14.2133" fill="white" transform="translate(36 146.391)" class="rect-6"/> -</clipPath> -<clipPath id="clip1_21428_72863"> -<rect width="12.634" height="12.634" fill="white" transform="translate(36 146.391)" class="rect-7"/> -</clipPath> -<clipPath id="clip2_21428_72863"> -<rect width="12.5" height="12.5" fill="white" transform="translate(73.5 349.246)" class="rect-8"/> -</clipPath> -<clipPath id="clip3_21428_72863"> -<rect width="12.5" height="12.5" fill="white" transform="translate(42.25 349.246)" class="rect-9"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/dispute-resolver/well-done.svg b/web/src/assets/svgs/mini-guides/dispute-resolver/well-done.svg deleted file mode 100644 index e00059dde..000000000 --- a/web/src/assets/svgs/mini-guides/dispute-resolver/well-done.svg +++ /dev/null @@ -1,80 +0,0 @@ -<svg width="346" height="403" viewBox="0 0 346 403" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<g filter="url(#filter0_d_22982_89608)"> -<rect x="3" y="1" width="340" height="398" rx="2.31757" class="rect-1"/> -<rect x="3.38626" y="1.38626" width="339.227" height="397.227" rx="1.93131" stroke-width="0.772523" class="rect-2"/> -</g> -<path d="M39.3161 40H37.4927V28.7518H43.84V30.3059H39.3161V33.822H43.5553V35.3838H39.3161V40ZM50.0027 31.3369C50.3668 31.3369 50.6669 31.3625 50.9028 31.4138L50.7259 33.0988C50.4694 33.0372 50.2027 33.0064 49.9257 33.0064C49.2025 33.0064 48.6152 33.2424 48.1639 33.7142C47.7176 34.1861 47.4945 34.7991 47.4945 35.553V40H45.6865V31.4908H47.1021L47.3406 32.991H47.433C47.7151 32.4833 48.0818 32.0806 48.5332 31.7831C48.9896 31.4856 49.4795 31.3369 50.0027 31.3369ZM56.2038 40.1539C54.8805 40.1539 53.8444 39.7692 53.0955 38.9998C52.3518 38.2253 51.9799 37.161 51.9799 35.8069C51.9799 34.4169 52.3261 33.3244 53.0186 32.5294C53.711 31.7344 54.6625 31.3369 55.8729 31.3369C56.9962 31.3369 57.8836 31.678 58.535 32.3602C59.1864 33.0423 59.5121 33.981 59.5121 35.1761V36.1532H53.8418C53.8675 36.9789 54.0906 37.615 54.5112 38.0612C54.9317 38.5023 55.5242 38.7228 56.2884 38.7228C56.7911 38.7228 57.2578 38.6767 57.6887 38.5844C58.1246 38.4869 58.5914 38.3279 59.0889 38.1073V39.5768C58.6478 39.7871 58.2016 39.9359 57.7502 40.0231C57.2988 40.1103 56.7834 40.1539 56.2038 40.1539ZM55.8729 32.7064C55.2985 32.7064 54.8369 32.8885 54.4881 33.2526C54.1444 33.6168 53.9393 34.1477 53.8726 34.8452H57.7348C57.7246 34.1425 57.5553 33.6117 57.227 33.2526C56.8988 32.8885 56.4474 32.7064 55.8729 32.7064ZM65.2823 40.1539C63.959 40.1539 62.9229 39.7692 62.1741 38.9998C61.4304 38.2253 61.0585 37.161 61.0585 35.8069C61.0585 34.4169 61.4047 33.3244 62.0971 32.5294C62.7896 31.7344 63.741 31.3369 64.9515 31.3369C66.0748 31.3369 66.9621 31.678 67.6135 32.3602C68.2649 33.0423 68.5906 33.981 68.5906 35.1761V36.1532H62.9204C62.946 36.9789 63.1691 37.615 63.5897 38.0612C64.0103 38.5023 64.6027 38.7228 65.367 38.7228C65.8696 38.7228 66.3364 38.6767 66.7672 38.5844C67.2032 38.4869 67.67 38.3279 68.1675 38.1073V39.5768C67.7264 39.7871 67.2801 39.9359 66.8288 40.0231C66.3774 40.1103 65.8619 40.1539 65.2823 40.1539ZM64.9515 32.7064C64.377 32.7064 63.9154 32.8885 63.5666 33.2526C63.223 33.6168 63.0178 34.1477 62.9511 34.8452H66.8134C66.8031 34.1425 66.6339 33.6117 66.3056 33.2526C65.9773 32.8885 65.526 32.7064 64.9515 32.7064ZM72.4529 40H70.6448V28.0286H72.4529V40ZM80.3697 40L80.0081 38.8152H79.9465C79.5362 39.3332 79.1233 39.6871 78.7078 39.8769C78.2924 40.0615 77.759 40.1539 77.1076 40.1539C76.2715 40.1539 75.6175 39.9282 75.1457 39.4768C74.6789 39.0255 74.4455 38.3869 74.4455 37.5611C74.4455 36.684 74.7712 36.0224 75.4226 35.5761C76.074 35.1299 77.0665 34.8863 78.4001 34.8452L79.8696 34.7991V34.3451C79.8696 33.8014 79.7414 33.3962 79.4849 33.1295C79.2336 32.8577 78.8412 32.7218 78.3078 32.7218C77.8718 32.7218 77.4538 32.7859 77.0537 32.9141C76.6536 33.0423 76.2689 33.1936 75.8996 33.368L75.3149 32.0755C75.7765 31.8344 76.2818 31.6523 76.8306 31.5292C77.3794 31.401 77.8974 31.3369 78.3847 31.3369C79.467 31.3369 80.2825 31.5728 80.8313 32.0447C81.3853 32.5166 81.6622 33.2578 81.6622 34.2682V40H80.3697ZM77.6769 38.769C78.3334 38.769 78.8592 38.5869 79.2541 38.2228C79.6542 37.8535 79.8542 37.338 79.8542 36.6763V35.9377L78.7617 35.9839C77.9103 36.0147 77.2896 36.1583 76.8998 36.4147C76.5151 36.6661 76.3228 37.0533 76.3228 37.5765C76.3228 37.956 76.4356 38.251 76.6613 38.4613C76.887 38.6664 77.2255 38.769 77.6769 38.769ZM91.6717 40H89.856V34.7683C89.856 34.1118 89.7227 33.6219 89.4559 33.2988C89.1944 32.9757 88.7763 32.8141 88.2019 32.8141C87.4376 32.8141 86.8786 33.0398 86.5246 33.4911C86.1707 33.9425 85.9938 34.699 85.9938 35.7608V40H84.1858V31.4908H85.6014L85.8553 32.6064H85.9476C86.2041 32.2012 86.5682 31.8883 87.0401 31.6677C87.512 31.4472 88.0352 31.3369 88.6096 31.3369C90.651 31.3369 91.6717 32.3755 91.6717 34.4528V40ZM97.619 40.1539C96.3315 40.1539 95.3519 39.7794 94.68 39.0306C94.0132 38.2766 93.6798 37.1969 93.6798 35.7915C93.6798 34.3605 94.0286 33.2603 94.7261 32.4909C95.4288 31.7216 96.4418 31.3369 97.7651 31.3369C98.6627 31.3369 99.4706 31.5036 100.189 31.837L99.6424 33.2911C98.8782 32.9936 98.2473 32.8449 97.7498 32.8449C96.2777 32.8449 95.5417 33.822 95.5417 35.7762C95.5417 36.7302 95.7237 37.4483 96.0879 37.9304C96.4572 38.4074 96.9958 38.6459 97.7036 38.6459C98.5089 38.6459 99.2705 38.4459 99.9886 38.0458V39.623C99.6655 39.8128 99.3193 39.9487 98.95 40.0308C98.5858 40.1128 98.1421 40.1539 97.619 40.1539ZM105.705 40.1539C104.382 40.1539 103.346 39.7692 102.597 38.9998C101.853 38.2253 101.481 37.161 101.481 35.8069C101.481 34.4169 101.827 33.3244 102.52 32.5294C103.212 31.7344 104.164 31.3369 105.374 31.3369C106.497 31.3369 107.385 31.678 108.036 32.3602C108.688 33.0423 109.013 33.981 109.013 35.1761V36.1532H103.343C103.369 36.9789 103.592 37.615 104.012 38.0612C104.433 38.5023 105.025 38.7228 105.79 38.7228C106.292 38.7228 106.759 38.6767 107.19 38.5844C107.626 38.4869 108.093 38.3279 108.59 38.1073V39.5768C108.149 39.7871 107.703 39.9359 107.251 40.0231C106.8 40.1103 106.285 40.1539 105.705 40.1539ZM105.374 32.7064C104.8 32.7064 104.338 32.8885 103.989 33.2526C103.646 33.6168 103.441 34.1477 103.374 34.8452H107.236C107.226 34.1425 107.057 33.6117 106.728 33.2526C106.4 32.8885 105.949 32.7064 105.374 32.7064ZM122.139 40L121.039 36.0301C120.905 35.6095 120.664 34.6324 120.315 33.0988H120.246C119.949 34.4836 119.713 35.4658 119.538 36.0454L118.407 40H116.407L114.022 31.4908H115.868L116.953 35.6838C117.199 36.7199 117.374 37.6073 117.476 38.3459H117.523C117.574 37.9714 117.651 37.5431 117.753 37.061C117.861 36.5737 117.953 36.2096 118.03 35.9685L119.323 31.4908H121.308L122.562 35.9685C122.639 36.2198 122.734 36.6045 122.847 37.1226C122.965 37.6406 123.034 38.0432 123.054 38.3305H123.116C123.193 37.6996 123.372 36.8174 123.654 35.6838L124.755 31.4908H126.57L124.17 40H122.139ZM135.587 35.73C135.587 37.12 135.231 38.2048 134.518 38.9844C133.805 39.7641 132.813 40.1539 131.54 40.1539C130.745 40.1539 130.043 39.9744 129.432 39.6153C128.822 39.2563 128.353 38.7408 128.024 38.0689C127.696 37.397 127.532 36.6173 127.532 35.73C127.532 34.3503 127.886 33.2731 128.594 32.4986C129.302 31.7241 130.299 31.3369 131.587 31.3369C132.818 31.3369 133.792 31.7344 134.51 32.5294C135.228 33.3193 135.587 34.3862 135.587 35.73ZM129.394 35.73C129.394 37.6945 130.12 38.6767 131.571 38.6767C133.007 38.6767 133.725 37.6945 133.725 35.73C133.725 33.7861 133.002 32.8141 131.556 32.8141C130.797 32.8141 130.245 33.0654 129.902 33.5681C129.563 34.0707 129.394 34.7914 129.394 35.73ZM141.989 31.3369C142.353 31.3369 142.653 31.3625 142.889 31.4138L142.712 33.0988C142.455 33.0372 142.189 33.0064 141.912 33.0064C141.188 33.0064 140.601 33.2424 140.15 33.7142C139.703 34.1861 139.48 34.7991 139.48 35.553V40H137.672V31.4908H139.088L139.327 32.991H139.419C139.701 32.4833 140.068 32.0806 140.519 31.7831C140.976 31.4856 141.465 31.3369 141.989 31.3369ZM146.22 35.5069L147.243 34.2297L149.813 31.4908H151.898L148.474 35.1453L152.113 40H149.99L147.259 36.2686L146.266 37.0841V40H144.474V28.0286H146.266V33.8681L146.174 35.5069H146.22ZM160.453 40.1539C159.392 40.1539 158.563 39.7692 157.968 38.9998C157.373 38.2304 157.076 37.1508 157.076 35.7608C157.076 34.3656 157.376 33.2808 157.976 32.5063C158.581 31.7267 159.417 31.3369 160.484 31.3369C161.602 31.3369 162.454 31.7498 163.038 32.5756H163.131C163.044 31.9652 163 31.4831 163 31.1292V28.0286H164.816V40H163.4L163.085 38.8844H163C162.42 39.7307 161.572 40.1539 160.453 40.1539ZM160.938 38.6921C161.682 38.6921 162.223 38.4843 162.561 38.0689C162.9 37.6483 163.074 36.9687 163.085 36.0301V35.7762C163.085 34.7042 162.91 33.9425 162.561 33.4911C162.213 33.0398 161.666 32.8141 160.923 32.8141C160.287 32.8141 159.797 33.0731 159.453 33.5911C159.11 34.1041 158.938 34.8375 158.938 35.7915C158.938 36.7353 159.104 37.456 159.438 37.9535C159.771 38.4459 160.271 38.6921 160.938 38.6921ZM169.209 40H167.401V31.4908H169.209V40ZM167.293 29.2365C167.293 28.9134 167.38 28.6646 167.555 28.4902C167.734 28.3158 167.988 28.2286 168.316 28.2286C168.634 28.2286 168.881 28.3158 169.055 28.4902C169.234 28.6646 169.324 28.9134 169.324 29.2365C169.324 29.5443 169.234 29.7879 169.055 29.9674C168.881 30.1418 168.634 30.229 168.316 30.229C167.988 30.229 167.734 30.1418 167.555 29.9674C167.38 29.7879 167.293 29.5443 167.293 29.2365ZM177.518 37.5765C177.518 38.4074 177.215 39.046 176.61 39.4922C176.005 39.9333 175.138 40.1539 174.01 40.1539C172.876 40.1539 171.966 39.982 171.278 39.6384V38.0766C172.279 38.5382 173.21 38.769 174.071 38.769C175.184 38.769 175.741 38.433 175.741 37.7611C175.741 37.5457 175.679 37.3662 175.556 37.2226C175.433 37.079 175.23 36.9302 174.948 36.7763C174.666 36.6225 174.274 36.4481 173.771 36.2532C172.792 35.8736 172.127 35.4941 171.779 35.1145C171.435 34.7349 171.263 34.2425 171.263 33.6373C171.263 32.909 171.555 32.3448 172.14 31.9447C172.73 31.5395 173.53 31.3369 174.541 31.3369C175.541 31.3369 176.487 31.5395 177.38 31.9447L176.795 33.3065C175.877 32.9269 175.105 32.7371 174.479 32.7371C173.525 32.7371 173.048 33.009 173.048 33.5527C173.048 33.8194 173.171 34.0451 173.417 34.2297C173.669 34.4144 174.212 34.6683 175.048 34.9914C175.751 35.2632 176.261 35.512 176.579 35.7377C176.897 35.9634 177.133 36.225 177.287 36.5224C177.441 36.8148 177.518 37.1662 177.518 37.5765ZM184.804 40L184.442 38.8152H184.381C183.97 39.3332 183.558 39.6871 183.142 39.8769C182.727 40.0615 182.193 40.1539 181.542 40.1539C180.706 40.1539 180.052 39.9282 179.58 39.4768C179.113 39.0255 178.88 38.3869 178.88 37.5611C178.88 36.684 179.206 36.0224 179.857 35.5761C180.508 35.1299 181.501 34.8863 182.834 34.8452L184.304 34.7991V34.3451C184.304 33.8014 184.176 33.3962 183.919 33.1295C183.668 32.8577 183.275 32.7218 182.742 32.7218C182.306 32.7218 181.888 32.7859 181.488 32.9141C181.088 33.0423 180.703 33.1936 180.334 33.368L179.749 32.0755C180.211 31.8344 180.716 31.6523 181.265 31.5292C181.814 31.401 182.332 31.3369 182.819 31.3369C183.901 31.3369 184.717 31.5728 185.266 32.0447C185.82 32.5166 186.097 33.2578 186.097 34.2682V40H184.804ZM182.111 38.769C182.768 38.769 183.293 38.5869 183.688 38.2228C184.088 37.8535 184.288 37.338 184.288 36.6763V35.9377L183.196 35.9839C182.345 36.0147 181.724 36.1583 181.334 36.4147C180.949 36.6661 180.757 37.0533 180.757 37.5765C180.757 37.956 180.87 38.251 181.096 38.4613C181.321 38.6664 181.66 38.769 182.111 38.769ZM195.806 31.4908V32.4833L194.352 32.7525C194.485 32.9321 194.595 33.1526 194.683 33.4142C194.77 33.6758 194.813 33.9528 194.813 34.2451C194.813 35.1222 194.511 35.8121 193.906 36.3147C193.3 36.8174 192.467 37.0687 191.405 37.0687C191.133 37.0687 190.887 37.0482 190.667 37.0072C190.277 37.2482 190.082 37.5303 190.082 37.8535C190.082 38.0484 190.172 38.1945 190.351 38.292C190.536 38.3895 190.872 38.4382 191.359 38.4382H192.844C193.783 38.4382 194.495 38.6382 194.983 39.0383C195.47 39.4384 195.714 40.0154 195.714 40.7694C195.714 41.7336 195.316 42.4774 194.521 43.0005C193.726 43.5237 192.577 43.7853 191.074 43.7853C189.915 43.7853 189.03 43.5801 188.42 43.1698C187.81 42.7595 187.504 42.1748 187.504 41.4156C187.504 40.8925 187.669 40.4514 187.997 40.0923C188.33 39.7384 188.794 39.4922 189.389 39.3537C189.148 39.2511 188.948 39.087 188.789 38.8613C188.635 38.6305 188.558 38.3895 188.558 38.1381C188.558 37.8201 188.648 37.5508 188.828 37.3303C189.007 37.1097 189.274 36.8917 189.628 36.6763C189.187 36.4865 188.828 36.1788 188.551 35.7531C188.279 35.3222 188.143 34.8196 188.143 34.2451C188.143 33.3219 188.433 32.6064 189.012 32.0986C189.597 31.5908 190.428 31.3369 191.505 31.3369C191.746 31.3369 191.998 31.3548 192.259 31.3908C192.526 31.4215 192.726 31.4549 192.859 31.4908H195.806ZM189.12 41.3233C189.12 41.7131 189.295 42.0132 189.643 42.2235C189.997 42.4338 190.492 42.5389 191.128 42.5389C192.113 42.5389 192.846 42.3979 193.329 42.1158C193.811 41.8337 194.052 41.4592 194.052 40.9925C194.052 40.6232 193.918 40.359 193.652 40.2C193.39 40.0462 192.9 39.9692 192.182 39.9692H190.813C190.295 39.9692 189.882 40.0898 189.574 40.3308C189.271 40.577 189.12 40.9079 189.12 41.3233ZM189.897 34.2451C189.897 34.7785 190.033 35.1889 190.305 35.4761C190.582 35.7633 190.977 35.907 191.49 35.907C192.536 35.907 193.059 35.3479 193.059 34.2297C193.059 33.6758 192.929 33.2501 192.667 32.9526C192.41 32.65 192.018 32.4986 191.49 32.4986C190.967 32.4986 190.569 32.6474 190.297 32.9449C190.031 33.2424 189.897 33.6758 189.897 34.2451ZM201.707 31.3369C202.071 31.3369 202.371 31.3625 202.607 31.4138L202.43 33.0988C202.174 33.0372 201.907 33.0064 201.63 33.0064C200.907 33.0064 200.32 33.2424 199.868 33.7142C199.422 34.1861 199.199 34.7991 199.199 35.553V40H197.391V31.4908H198.806L199.045 32.991H199.137C199.419 32.4833 199.786 32.0806 200.238 31.7831C200.694 31.4856 201.184 31.3369 201.707 31.3369ZM207.908 40.1539C206.585 40.1539 205.549 39.7692 204.8 38.9998C204.056 38.2253 203.684 37.161 203.684 35.8069C203.684 34.4169 204.031 33.3244 204.723 32.5294C205.415 31.7344 206.367 31.3369 207.577 31.3369C208.701 31.3369 209.588 31.678 210.239 32.3602C210.891 33.0423 211.216 33.981 211.216 35.1761V36.1532H205.546C205.572 36.9789 205.795 37.615 206.216 38.0612C206.636 38.5023 207.229 38.7228 207.993 38.7228C208.495 38.7228 208.962 38.6767 209.393 38.5844C209.829 38.4869 210.296 38.3279 210.793 38.1073V39.5768C210.352 39.7871 209.906 39.9359 209.455 40.0231C209.003 40.1103 208.488 40.1539 207.908 40.1539ZM207.577 32.7064C207.003 32.7064 206.541 32.8885 206.192 33.2526C205.849 33.6168 205.644 34.1477 205.577 34.8452H209.439C209.429 34.1425 209.26 33.6117 208.931 33.2526C208.603 32.8885 208.152 32.7064 207.577 32.7064ZM216.987 40.1539C215.663 40.1539 214.627 39.7692 213.878 38.9998C213.135 38.2253 212.763 37.161 212.763 35.8069C212.763 34.4169 213.109 33.3244 213.802 32.5294C214.494 31.7344 215.445 31.3369 216.656 31.3369C217.779 31.3369 218.666 31.678 219.318 32.3602C219.969 33.0423 220.295 33.981 220.295 35.1761V36.1532H214.625C214.65 36.9789 214.873 37.615 215.294 38.0612C215.715 38.5023 216.307 38.7228 217.071 38.7228C217.574 38.7228 218.041 38.6767 218.472 38.5844C218.908 38.4869 219.374 38.3279 219.872 38.1073V39.5768C219.431 39.7871 218.984 39.9359 218.533 40.0231C218.082 40.1103 217.566 40.1539 216.987 40.1539ZM216.656 32.7064C216.081 32.7064 215.62 32.8885 215.271 33.2526C214.927 33.6168 214.722 34.1477 214.656 34.8452H218.518C218.507 34.1425 218.338 33.6117 218.01 33.2526C217.682 32.8885 217.23 32.7064 216.656 32.7064ZM229.52 40H227.704V34.7529C227.704 34.1015 227.581 33.6168 227.335 33.2988C227.089 32.9757 226.704 32.8141 226.181 32.8141C225.483 32.8141 224.97 33.0423 224.642 33.4988C224.319 33.9502 224.157 34.7042 224.157 35.7608V40H222.349V31.4908H223.765L224.019 32.6064H224.111C224.347 32.2012 224.688 31.8883 225.134 31.6677C225.586 31.4472 226.081 31.3369 226.619 31.3369C227.927 31.3369 228.794 31.7831 229.22 32.6756H229.343C229.594 32.255 229.948 31.9267 230.405 31.6908C230.861 31.4549 231.384 31.3369 231.974 31.3369C232.99 31.3369 233.728 31.5934 234.19 32.1063C234.657 32.6192 234.89 33.4014 234.89 34.4528V40H233.082V34.7529C233.082 34.1015 232.956 33.6168 232.705 33.2988C232.459 32.9757 232.074 32.8141 231.551 32.8141C230.848 32.8141 230.333 33.0346 230.004 33.4757C229.681 33.9117 229.52 34.5836 229.52 35.4915V40ZM241.13 40.1539C239.806 40.1539 238.77 39.7692 238.021 38.9998C237.278 38.2253 236.906 37.161 236.906 35.8069C236.906 34.4169 237.252 33.3244 237.944 32.5294C238.637 31.7344 239.588 31.3369 240.799 31.3369C241.922 31.3369 242.809 31.678 243.461 32.3602C244.112 33.0423 244.438 33.981 244.438 35.1761V36.1532H238.768C238.793 36.9789 239.016 37.615 239.437 38.0612C239.858 38.5023 240.45 38.7228 241.214 38.7228C241.717 38.7228 242.184 38.6767 242.614 38.5844C243.05 38.4869 243.517 38.3279 244.015 38.1073V39.5768C243.574 39.7871 243.127 39.9359 242.676 40.0231C242.225 40.1103 241.709 40.1539 241.13 40.1539ZM240.799 32.7064C240.224 32.7064 239.763 32.8885 239.414 33.2526C239.07 33.6168 238.865 34.1477 238.798 34.8452H242.661C242.65 34.1425 242.481 33.6117 242.153 33.2526C241.825 32.8885 241.373 32.7064 240.799 32.7064ZM253.978 40H252.162V34.7683C252.162 34.1118 252.029 33.6219 251.762 33.2988C251.501 32.9757 251.083 32.8141 250.508 32.8141C249.744 32.8141 249.185 33.0398 248.831 33.4911C248.477 33.9425 248.3 34.699 248.3 35.7608V40H246.492V31.4908H247.908L248.162 32.6064H248.254C248.51 32.2012 248.875 31.8883 249.346 31.6677C249.818 31.4472 250.341 31.3369 250.916 31.3369C252.957 31.3369 253.978 32.3755 253.978 34.4528V40ZM259.664 38.6921C260.105 38.6921 260.546 38.6228 260.987 38.4843V39.8461C260.787 39.9333 260.528 40.0051 260.21 40.0615C259.897 40.1231 259.571 40.1539 259.233 40.1539C257.52 40.1539 256.663 39.2511 256.663 37.4457V32.8602H255.501V32.0601L256.748 31.3984L257.363 29.5981H258.479V31.4908H260.902V32.8602H258.479V37.4149C258.479 37.8509 258.587 38.174 258.802 38.3843C259.023 38.5895 259.31 38.6921 259.664 38.6921ZM41.6473 52.3369C42.709 52.3369 43.5348 52.7216 44.1247 53.4909C44.7196 54.2603 45.0171 55.34 45.0171 56.73C45.0171 58.1251 44.7171 59.2125 44.117 59.9921C43.5169 60.7666 42.6834 61.1539 41.6165 61.1539C40.5394 61.1539 39.7034 60.7666 39.1084 59.9921H38.9853L38.6544 61H37.3004V49.0286H39.1084V51.8753C39.1084 52.0856 39.0981 52.3984 39.0776 52.8139C39.0571 53.2294 39.0417 53.4935 39.0314 53.6064H39.1084C39.6828 52.76 40.5291 52.3369 41.6473 52.3369ZM41.178 53.8141C40.4496 53.8141 39.9239 54.0295 39.6008 54.4604C39.2828 54.8861 39.1186 55.6016 39.1084 56.6069V56.73C39.1084 57.7661 39.2725 58.5175 39.6008 58.9843C39.929 59.4459 40.465 59.6767 41.2088 59.6767C41.8499 59.6767 42.3346 59.4228 42.6629 58.915C42.9963 58.4072 43.163 57.6738 43.163 56.7146C43.163 54.7809 42.5013 53.8141 41.178 53.8141ZM50.8336 61.1539C49.5103 61.1539 48.4742 60.7692 47.7253 59.9998C46.9816 59.2253 46.6097 58.161 46.6097 56.8069C46.6097 55.4169 46.9559 54.3244 47.6484 53.5294C48.3408 52.7344 49.2923 52.3369 50.5027 52.3369C51.626 52.3369 52.5134 52.678 53.1648 53.3602C53.8162 54.0423 54.1419 54.981 54.1419 56.1761V57.1532H48.4716C48.4973 57.9789 48.7204 58.615 49.141 59.0612C49.5615 59.5023 50.154 59.7228 50.9182 59.7228C51.4209 59.7228 51.8876 59.6767 52.3185 59.5844C52.7544 59.4869 53.2212 59.3279 53.7187 59.1073V60.5768C53.2776 60.7871 52.8314 60.9359 52.38 61.0231C51.9286 61.1103 51.4132 61.1539 50.8336 61.1539ZM50.5027 53.7064C49.9283 53.7064 49.4667 53.8885 49.1179 54.2526C48.7742 54.6168 48.5691 55.1477 48.5024 55.8452H52.3646C52.3544 55.1425 52.1851 54.6117 51.8568 54.2526C51.5286 53.8885 51.0772 53.7064 50.5027 53.7064ZM59.3659 59.6921C59.807 59.6921 60.2481 59.6228 60.6892 59.4843V60.8461C60.4892 60.9333 60.2301 61.0051 59.9121 61.0615C59.5993 61.1231 59.2736 61.1539 58.935 61.1539C57.2219 61.1539 56.3653 60.2511 56.3653 58.4457V53.8602H55.2036V53.0601L56.45 52.3984L57.0655 50.5981H58.1811V52.4908H60.6046V53.8602H58.1811V58.4149C58.1811 58.8509 58.2888 59.174 58.5042 59.3843C58.7247 59.5895 59.012 59.6921 59.3659 59.6921ZM69.3754 61L68.2752 57.0301C68.1418 56.6095 67.9008 55.6324 67.552 54.0988H67.4827C67.1852 55.4836 66.9493 56.4658 66.7749 57.0454L65.6439 61H63.6436L61.2585 52.4908H63.105L64.1898 56.6838C64.436 57.7199 64.6104 58.6073 64.713 59.3459H64.7592C64.8105 58.9714 64.8874 58.5431 64.99 58.061C65.0977 57.5737 65.19 57.2096 65.267 56.9685L66.5595 52.4908H68.5445L69.7985 56.9685C69.8755 57.2198 69.9704 57.6045 70.0832 58.1226C70.2012 58.6406 70.2704 59.0432 70.2909 59.3305H70.3525C70.4294 58.6996 70.6089 57.8174 70.891 56.6838L71.9912 52.4908H73.807L71.4065 61H69.3754ZM78.9925 61.1539C77.6692 61.1539 76.6331 60.7692 75.8843 59.9998C75.1405 59.2253 74.7687 58.161 74.7687 56.8069C74.7687 55.4169 75.1149 54.3244 75.8073 53.5294C76.4998 52.7344 77.4512 52.3369 78.6617 52.3369C79.785 52.3369 80.6723 52.678 81.3237 53.3602C81.9751 54.0423 82.3008 54.981 82.3008 56.1761V57.1532H76.6305C76.6562 57.9789 76.8793 58.615 77.2999 59.0612C77.7205 59.5023 78.3129 59.7228 79.0771 59.7228C79.5798 59.7228 80.0465 59.6767 80.4774 59.5844C80.9134 59.4869 81.3801 59.3279 81.8776 59.1073V60.5768C81.4365 60.7871 80.9903 60.9359 80.5389 61.0231C80.0876 61.1103 79.5721 61.1539 78.9925 61.1539ZM78.6617 53.7064C78.0872 53.7064 77.6256 53.8885 77.2768 54.2526C76.9332 54.6168 76.728 55.1477 76.6613 55.8452H80.5236C80.5133 55.1425 80.344 54.6117 80.0158 54.2526C79.6875 53.8885 79.2361 53.7064 78.6617 53.7064ZM88.0711 61.1539C86.7478 61.1539 85.7117 60.7692 84.9628 59.9998C84.2191 59.2253 83.8472 58.161 83.8472 56.8069C83.8472 55.4169 84.1935 54.3244 84.8859 53.5294C85.5783 52.7344 86.5298 52.3369 87.7403 52.3369C88.8635 52.3369 89.7509 52.678 90.4023 53.3602C91.0537 54.0423 91.3794 54.981 91.3794 56.1761V57.1532H85.7091C85.7348 57.9789 85.9579 58.615 86.3785 59.0612C86.7991 59.5023 87.3915 59.7228 88.1557 59.7228C88.6584 59.7228 89.1251 59.6767 89.556 59.5844C89.9919 59.4869 90.4587 59.3279 90.9562 59.1073V60.5768C90.5151 60.7871 90.0689 60.9359 89.6175 61.0231C89.1661 61.1103 88.6507 61.1539 88.0711 61.1539ZM87.7403 53.7064C87.1658 53.7064 86.7042 53.8885 86.3554 54.2526C86.0117 54.6168 85.8066 55.1477 85.7399 55.8452H89.6021C89.5919 55.1425 89.4226 54.6117 89.0943 54.2526C88.7661 53.8885 88.3147 53.7064 87.7403 53.7064ZM100.92 61H99.1038V55.7683C99.1038 55.1118 98.9705 54.6219 98.7038 54.2988C98.4422 53.9757 98.0242 53.8141 97.4497 53.8141C96.6855 53.8141 96.1264 54.0398 95.7725 54.4911C95.4186 54.9425 95.2416 55.699 95.2416 56.7608V61H93.4336V52.4908H94.8492L95.1031 53.6064H95.1954C95.4519 53.2012 95.8161 52.8883 96.2879 52.6677C96.7598 52.4472 97.283 52.3369 97.8575 52.3369C99.8989 52.3369 100.92 53.3755 100.92 55.4528V61ZM114.699 61L113.576 57.8764H109.275L108.175 61H106.236L110.444 49.7056H112.445L116.653 61H114.699ZM113.091 56.2915L112.037 53.2294C111.96 53.0242 111.852 52.7011 111.714 52.26C111.58 51.8189 111.488 51.4957 111.437 51.2906C111.298 51.9214 111.096 52.6113 110.829 53.3602L109.813 56.2915H113.091ZM119.754 61H117.946V49.0286H119.754V61ZM124.155 61H122.347V52.4908H124.155V61ZM122.239 50.2365C122.239 49.9134 122.326 49.6646 122.5 49.4902C122.68 49.3158 122.934 49.2286 123.262 49.2286C123.58 49.2286 123.826 49.3158 124.001 49.4902C124.18 49.6646 124.27 49.9134 124.27 50.2365C124.27 50.5443 124.18 50.7879 124.001 50.9674C123.826 51.1418 123.58 51.229 123.262 51.229C122.934 51.229 122.68 51.1418 122.5 50.9674C122.326 50.7879 122.239 50.5443 122.239 50.2365ZM130.179 61.1539C128.891 61.1539 127.912 60.7794 127.24 60.0306C126.573 59.2766 126.24 58.1969 126.24 56.7915C126.24 55.3605 126.588 54.2603 127.286 53.4909C127.989 52.7216 129.002 52.3369 130.325 52.3369C131.222 52.3369 132.03 52.5036 132.748 52.837L132.202 54.2911C131.438 53.9936 130.807 53.8449 130.309 53.8449C128.837 53.8449 128.101 54.822 128.101 56.7762C128.101 57.7302 128.283 58.4483 128.648 58.9304C129.017 59.4074 129.556 59.6459 130.263 59.6459C131.069 59.6459 131.83 59.4459 132.548 59.0458V60.623C132.225 60.8128 131.879 60.9487 131.51 61.0308C131.146 61.1128 130.702 61.1539 130.179 61.1539ZM138.265 61.1539C136.941 61.1539 135.905 60.7692 135.157 59.9998C134.413 59.2253 134.041 58.161 134.041 56.8069C134.041 55.4169 134.387 54.3244 135.08 53.5294C135.772 52.7344 136.723 52.3369 137.934 52.3369C139.057 52.3369 139.945 52.678 140.596 53.3602C141.247 54.0423 141.573 54.981 141.573 56.1761V57.1532H135.903C135.928 57.9789 136.152 58.615 136.572 59.0612C136.993 59.5023 137.585 59.7228 138.349 59.7228C138.852 59.7228 139.319 59.6767 139.75 59.5844C140.186 59.4869 140.652 59.3279 141.15 59.1073V60.5768C140.709 60.7871 140.263 60.9359 139.811 61.0231C139.36 61.1103 138.844 61.1539 138.265 61.1539ZM137.934 53.7064C137.359 53.7064 136.898 53.8885 136.549 54.2526C136.205 54.6168 136 55.1477 135.934 55.8452H139.796C139.786 55.1425 139.616 54.6117 139.288 54.2526C138.96 53.8885 138.508 53.7064 137.934 53.7064ZM153.044 61L152.683 59.8152H152.621C152.211 60.3332 151.798 60.6871 151.383 60.8769C150.967 61.0615 150.434 61.1539 149.782 61.1539C148.946 61.1539 148.292 60.9282 147.82 60.4768C147.354 60.0255 147.12 59.3869 147.12 58.5611C147.12 57.684 147.446 57.0224 148.097 56.5761C148.749 56.1299 149.741 55.8863 151.075 55.8452L152.544 55.7991V55.3451C152.544 54.8014 152.416 54.3962 152.16 54.1295C151.908 53.8577 151.516 53.7218 150.982 53.7218C150.546 53.7218 150.128 53.7859 149.728 53.9141C149.328 54.0423 148.944 54.1936 148.574 54.368L147.99 53.0755C148.451 52.8344 148.956 52.6523 149.505 52.5292C150.054 52.401 150.572 52.3369 151.059 52.3369C152.142 52.3369 152.957 52.5728 153.506 53.0447C154.06 53.5166 154.337 54.2578 154.337 55.2682V61H153.044ZM150.352 59.769C151.008 59.769 151.534 59.5869 151.929 59.2228C152.329 58.8535 152.529 58.338 152.529 57.6763V56.9377L151.436 56.9839C150.585 57.0147 149.964 57.1583 149.575 57.4147C149.19 57.6661 148.997 58.0533 148.997 58.5765C148.997 58.956 149.11 59.251 149.336 59.4613C149.562 59.6664 149.9 59.769 150.352 59.769ZM164.346 61H162.531V55.7683C162.531 55.1118 162.397 54.6219 162.131 54.2988C161.869 53.9757 161.451 53.8141 160.877 53.8141C160.112 53.8141 159.553 54.0398 159.199 54.4911C158.845 54.9425 158.668 55.699 158.668 56.7608V61H156.86V52.4908H158.276L158.53 53.6064H158.622C158.879 53.2012 159.243 52.8883 159.715 52.6677C160.187 52.4472 160.71 52.3369 161.284 52.3369C163.326 52.3369 164.346 53.3755 164.346 55.4528V61ZM169.732 61.1539C168.67 61.1539 167.842 60.7692 167.247 59.9998C166.652 59.2304 166.354 58.1508 166.354 56.7608C166.354 55.3656 166.655 54.2808 167.255 53.5063C167.86 52.7267 168.696 52.3369 169.763 52.3369C170.881 52.3369 171.732 52.7498 172.317 53.5756H172.409C172.322 52.9652 172.279 52.4831 172.279 52.1292V49.0286H174.094V61H172.679L172.363 59.8844H172.279C171.699 60.7307 170.85 61.1539 169.732 61.1539ZM170.217 59.6921C170.96 59.6921 171.502 59.4843 171.84 59.0689C172.179 58.6483 172.353 57.9687 172.363 57.0301V56.7762C172.363 55.7042 172.189 54.9425 171.84 54.4911C171.491 54.0398 170.945 53.8141 170.201 53.8141C169.565 53.8141 169.075 54.0731 168.732 54.5911C168.388 55.1041 168.216 55.8375 168.216 56.7915C168.216 57.7353 168.383 58.456 168.716 58.9535C169.05 59.4459 169.55 59.6921 170.217 59.6921ZM180.965 49.7518H184.304C185.853 49.7518 186.971 49.9775 187.658 50.4289C188.351 50.8802 188.697 51.5932 188.697 52.5677C188.697 53.2242 188.528 53.7705 188.189 54.2065C187.851 54.6424 187.363 54.9168 186.727 55.0297V55.1066C187.517 55.2554 188.097 55.5503 188.466 55.9914C188.841 56.4274 189.028 57.0198 189.028 57.7686C189.028 58.7791 188.674 59.5715 187.966 60.146C187.263 60.7153 186.284 61 185.027 61H180.965V49.7518ZM182.804 54.3988H184.573C185.343 54.3988 185.904 54.2783 186.258 54.0372C186.612 53.791 186.789 53.3755 186.789 52.7908C186.789 52.2625 186.597 51.8804 186.212 51.6445C185.832 51.4085 185.227 51.2906 184.396 51.2906H182.804V54.3988ZM182.804 55.8914V59.4536H184.758C185.527 59.4536 186.107 59.3074 186.497 59.015C186.892 58.7175 187.089 58.2508 187.089 57.6148C187.089 57.0301 186.889 56.5966 186.489 56.3145C186.089 56.0324 185.481 55.8914 184.665 55.8914H182.804ZM198.722 56.73C198.722 58.12 198.365 59.2048 197.652 59.9844C196.939 60.7641 195.947 61.1539 194.675 61.1539C193.88 61.1539 193.177 60.9744 192.567 60.6153C191.957 60.2563 191.487 59.7408 191.159 59.0689C190.831 58.397 190.667 57.6173 190.667 56.73C190.667 55.3503 191.02 54.2731 191.728 53.4986C192.436 52.7241 193.434 52.3369 194.721 52.3369C195.952 52.3369 196.927 52.7344 197.645 53.5294C198.363 54.3193 198.722 55.3862 198.722 56.73ZM192.528 56.73C192.528 58.6945 193.254 59.6767 194.706 59.6767C196.142 59.6767 196.86 58.6945 196.86 56.73C196.86 54.7861 196.137 53.8141 194.69 53.8141C193.931 53.8141 193.38 54.0654 193.036 54.5681C192.698 55.0707 192.528 55.7914 192.528 56.73ZM205.154 52.3369C206.216 52.3369 207.041 52.7216 207.631 53.4909C208.226 54.2603 208.524 55.34 208.524 56.73C208.524 58.1251 208.224 59.2125 207.623 59.9921C207.023 60.7666 206.19 61.1539 205.123 61.1539C204.046 61.1539 203.21 60.7666 202.615 59.9921H202.492L202.161 61H200.807V49.0286H202.615V51.8753C202.615 52.0856 202.605 52.3984 202.584 52.8139C202.564 53.2294 202.548 53.4935 202.538 53.6064H202.615C203.189 52.76 204.036 52.3369 205.154 52.3369ZM204.684 53.8141C203.956 53.8141 203.43 54.0295 203.107 54.4604C202.789 54.8861 202.625 55.6016 202.615 56.6069V56.73C202.615 57.7661 202.779 58.5175 203.107 58.9843C203.436 59.4459 203.972 59.6767 204.715 59.6767C205.356 59.6767 205.841 59.4228 206.169 58.915C206.503 58.4072 206.669 57.6738 206.669 56.7146C206.669 54.7809 206.008 53.8141 204.684 53.8141Z" fill="#DAF0FF" class="path-1"/> -<path d="M42.9273 97H41.6963V93.6199H38.2392V97H37.0134V89.5012H38.2392V92.5684H41.6963V89.5012H42.9273V97ZM49.8054 94.1533C49.8054 95.08 49.5678 95.8032 49.0925 96.323C48.6172 96.8427 47.9555 97.1026 47.1075 97.1026C46.5775 97.1026 46.109 96.9829 45.7021 96.7435C45.2952 96.5042 44.9823 96.1605 44.7635 95.7126C44.5446 95.2646 44.4352 94.7449 44.4352 94.1533C44.4352 93.2335 44.6712 92.5154 45.143 91.9991C45.6149 91.4828 46.28 91.2246 47.1383 91.2246C47.9589 91.2246 48.6086 91.4896 49.0873 92.0196C49.5661 92.5462 49.8054 93.2574 49.8054 94.1533ZM45.6765 94.1533C45.6765 95.463 46.1603 96.1178 47.128 96.1178C48.0854 96.1178 48.5642 95.463 48.5642 94.1533C48.5642 92.8574 48.082 92.2094 47.1178 92.2094C46.6117 92.2094 46.2441 92.3769 46.015 92.712C45.7893 93.0471 45.6765 93.5276 45.6765 94.1533ZM55.8475 97L55.1141 94.3534C55.0252 94.073 54.8645 93.4216 54.6319 92.3992H54.5858C54.3874 93.3224 54.2301 93.9772 54.1139 94.3636L53.3599 97H52.0263L50.4363 91.3272H51.6673L52.3905 94.1226C52.5546 94.8133 52.6709 95.4048 52.7393 95.8972H52.7701C52.8043 95.6476 52.8555 95.3621 52.9239 95.0407C52.9957 94.7158 53.0573 94.473 53.1086 94.3123L53.9703 91.3272H55.2936L56.1296 94.3123C56.1809 94.4799 56.2442 94.7363 56.3194 95.0817C56.3981 95.4271 56.4442 95.6955 56.4579 95.887H56.4989C56.5502 95.4664 56.6699 94.8782 56.858 94.1226L57.5914 91.3272H58.8019L57.2016 97H55.8475ZM67.2906 97H66.0802V93.5019C66.0802 93.0677 65.9981 92.7445 65.834 92.5325C65.6698 92.3171 65.4134 92.2094 65.0646 92.2094C64.5995 92.2094 64.2576 92.3616 64.0388 92.6659C63.8233 92.9668 63.7156 93.4694 63.7156 94.1738V97H62.5103V91.3272H63.454L63.6233 92.0709H63.6849C63.8421 91.8008 64.0695 91.5922 64.367 91.4451C64.6679 91.2981 64.9979 91.2246 65.3569 91.2246C66.2289 91.2246 66.8068 91.5221 67.0906 92.1171H67.1727C67.3402 91.8367 67.5762 91.6178 67.8805 91.4605C68.1848 91.3032 68.5336 91.2246 68.9268 91.2246C69.6039 91.2246 70.0963 91.3956 70.404 91.7375C70.7152 92.0795 70.8708 92.6009 70.8708 93.3019V97H69.6654V93.5019C69.6654 93.0677 69.5816 92.7445 69.4141 92.5325C69.25 92.3171 68.9935 92.2094 68.6447 92.2094C68.1763 92.2094 67.8326 92.3564 67.6138 92.6505C67.3983 92.9411 67.2906 93.3891 67.2906 93.9943V97ZM76.5538 97L76.3846 96.2563H76.323C76.1555 96.5196 75.9161 96.7264 75.605 96.8769C75.2972 97.0274 74.945 97.1026 74.5484 97.1026C73.8611 97.1026 73.3481 96.9316 73.0096 96.5897C72.6711 96.2477 72.5018 95.7297 72.5018 95.0355V91.3272H73.7174V94.8252C73.7174 95.2595 73.8063 95.5861 73.9842 95.8049C74.162 96.0203 74.4406 96.128 74.8202 96.128C75.3263 96.128 75.6973 95.9776 75.9332 95.6767C76.1726 95.3724 76.2923 94.8646 76.2923 94.1533V91.3272H77.5027V97H76.5538ZM81.5086 97.1026C80.6503 97.1026 79.9972 96.853 79.5493 96.3537C79.1047 95.8511 78.8825 95.1313 78.8825 94.1944C78.8825 93.2403 79.115 92.5069 79.58 91.994C80.0485 91.4811 80.7238 91.2246 81.606 91.2246C82.2044 91.2246 82.743 91.3357 83.2217 91.558L82.8575 92.5274C82.3481 92.3291 81.9275 92.2299 81.5958 92.2299C80.6144 92.2299 80.1237 92.8813 80.1237 94.1841C80.1237 94.8201 80.2451 95.2988 80.4879 95.6203C80.7341 95.9383 81.0931 96.0973 81.565 96.0973C82.1019 96.0973 82.6096 95.9639 83.0884 95.6972V96.7487C82.8729 96.8752 82.6421 96.9658 82.3959 97.0205C82.1531 97.0752 81.8574 97.1026 81.5086 97.1026ZM89.4126 97H88.2021V93.5122C88.2021 93.0745 88.1132 92.7479 87.9354 92.5325C87.761 92.3171 87.4823 92.2094 87.0993 92.2094C86.5933 92.2094 86.2206 92.3616 85.9812 92.6659C85.7453 92.9668 85.6273 93.4729 85.6273 94.1841V97H84.4219V89.0191H85.6273V91.0451C85.6273 91.3699 85.6068 91.717 85.5657 92.0863H85.6427C85.8068 91.8127 86.0342 91.6007 86.3248 91.4503C86.6189 91.2998 86.9609 91.2246 87.3507 91.2246C88.7253 91.2246 89.4126 91.917 89.4126 93.3019V97ZM97.6295 95.3843C97.6295 95.9383 97.4277 96.364 97.0242 96.6615C96.6207 96.9555 96.0428 97.1026 95.2906 97.1026C94.5349 97.1026 93.9279 96.988 93.4697 96.7589V95.7177C94.1365 96.0255 94.7571 96.1793 95.3316 96.1793C96.0736 96.1793 96.4446 95.9554 96.4446 95.5074C96.4446 95.3638 96.4036 95.2441 96.3215 95.1484C96.2395 95.0526 96.1044 94.9535 95.9163 94.8509C95.7283 94.7483 95.4667 94.6321 95.1316 94.5021C94.4785 94.2491 94.0356 93.996 93.8031 93.743C93.574 93.49 93.4595 93.1617 93.4595 92.7582C93.4595 92.2726 93.6544 91.8965 94.0442 91.6298C94.4374 91.3597 94.9709 91.2246 95.6445 91.2246C96.3113 91.2246 96.9422 91.3597 97.5371 91.6298L97.1473 92.5377C96.5352 92.2846 96.0206 92.1581 95.6034 92.1581C94.9674 92.1581 94.6494 92.3393 94.6494 92.7018C94.6494 92.8796 94.7315 93.0301 94.8956 93.1532C95.0632 93.2762 95.4256 93.4455 95.983 93.6609C96.4515 93.8422 96.7917 94.008 97.0037 94.1585C97.2157 94.3089 97.373 94.4833 97.4756 94.6816C97.5782 94.8765 97.6295 95.1108 97.6295 95.3843ZM103.928 97H102.718V93.5122C102.718 93.0745 102.629 92.7479 102.451 92.5325C102.276 92.3171 101.998 92.2094 101.615 92.2094C101.109 92.2094 100.736 92.3616 100.497 92.6659C100.261 92.9668 100.143 93.4729 100.143 94.1841V97H98.9374V89.0191H100.143V91.0451C100.143 91.3699 100.122 91.717 100.081 92.0863H100.158C100.322 91.8127 100.55 91.6007 100.84 91.4503C101.134 91.2998 101.476 91.2246 101.866 91.2246C103.241 91.2246 103.928 91.917 103.928 93.3019V97ZM110.637 94.1533C110.637 95.08 110.399 95.8032 109.924 96.323C109.449 96.8427 108.787 97.1026 107.939 97.1026C107.409 97.1026 106.941 96.9829 106.534 96.7435C106.127 96.5042 105.814 96.1605 105.595 95.7126C105.376 95.2646 105.267 94.7449 105.267 94.1533C105.267 93.2335 105.503 92.5154 105.975 91.9991C106.446 91.4828 107.112 91.2246 107.97 91.2246C108.79 91.2246 109.44 91.4896 109.919 92.0196C110.398 92.5462 110.637 93.2574 110.637 94.1533ZM106.508 94.1533C106.508 95.463 106.992 96.1178 107.96 96.1178C108.917 96.1178 109.396 95.463 109.396 94.1533C109.396 92.8574 108.914 92.2094 107.949 92.2094C107.443 92.2094 107.076 92.3769 106.847 92.712C106.621 93.0471 106.508 93.5276 106.508 94.1533ZM116.028 97L115.858 96.2563H115.797C115.629 96.5196 115.39 96.7264 115.079 96.8769C114.771 97.0274 114.419 97.1026 114.022 97.1026C113.335 97.1026 112.822 96.9316 112.483 96.5897C112.145 96.2477 111.976 95.7297 111.976 95.0355V91.3272H113.191V94.8252C113.191 95.2595 113.28 95.5861 113.458 95.8049C113.636 96.0203 113.914 96.128 114.294 96.128C114.8 96.128 115.171 95.9776 115.407 95.6767C115.646 95.3724 115.766 94.8646 115.766 94.1533V91.3272H116.977V97H116.028ZM119.9 97H118.695V89.0191H119.9V97ZM123.542 97.1026C122.834 97.1026 122.282 96.8461 121.885 96.3332C121.488 95.8203 121.29 95.1005 121.29 94.1738C121.29 93.2438 121.49 92.5206 121.89 92.0042C122.294 91.4845 122.851 91.2246 123.562 91.2246C124.308 91.2246 124.875 91.4999 125.265 92.0504H125.327C125.269 91.6435 125.24 91.322 125.24 91.0861V89.0191H126.45V97H125.506L125.296 96.2563H125.24C124.853 96.8205 124.287 97.1026 123.542 97.1026ZM123.865 96.128C124.361 96.128 124.722 95.9896 124.947 95.7126C125.173 95.4322 125.289 94.9791 125.296 94.3534V94.1841C125.296 93.4694 125.18 92.9617 124.947 92.6608C124.715 92.3598 124.351 92.2094 123.855 92.2094C123.431 92.2094 123.104 92.3821 122.875 92.7274C122.646 93.0694 122.531 93.5584 122.531 94.1944C122.531 94.8235 122.643 95.304 122.865 95.6357C123.087 95.9639 123.42 96.128 123.865 96.128ZM135.682 97L134.934 94.9176H132.066L131.333 97H130.04L132.846 89.4704H134.18L136.985 97H135.682ZM134.611 93.861L133.908 91.8196C133.857 91.6828 133.785 91.4674 133.692 91.1733C133.603 90.8792 133.542 90.6638 133.508 90.527C133.415 90.9476 133.28 91.4075 133.103 91.9068L132.425 93.861H134.611ZM139.052 97H137.847V89.0191H139.052V97ZM141.986 97H140.781V91.3272H141.986V97ZM140.709 89.8243C140.709 89.6089 140.767 89.4431 140.883 89.3268C141.003 89.2106 141.172 89.1524 141.391 89.1524C141.603 89.1524 141.767 89.2106 141.884 89.3268C142.003 89.4431 142.063 89.6089 142.063 89.8243C142.063 90.0295 142.003 90.1919 141.884 90.3116C141.767 90.4279 141.603 90.486 141.391 90.486C141.172 90.486 141.003 90.4279 140.883 90.3116C140.767 90.1919 140.709 90.0295 140.709 89.8243ZM146.002 97.1026C145.144 97.1026 144.491 96.853 144.043 96.3537C143.598 95.8511 143.376 95.1313 143.376 94.1944C143.376 93.2403 143.609 92.5069 144.074 91.994C144.542 91.4811 145.218 91.2246 146.1 91.2246C146.698 91.2246 147.237 91.3357 147.715 91.558L147.351 92.5274C146.842 92.3291 146.421 92.2299 146.09 92.2299C145.108 92.2299 144.617 92.8813 144.617 94.1841C144.617 94.8201 144.739 95.2988 144.982 95.6203C145.228 95.9383 145.587 96.0973 146.059 96.0973C146.596 96.0973 147.103 95.9639 147.582 95.6972V96.7487C147.367 96.8752 147.136 96.9658 146.89 97.0205C146.647 97.0752 146.351 97.1026 146.002 97.1026ZM151.393 97.1026C150.511 97.1026 149.82 96.8461 149.321 96.3332C148.825 95.8169 148.577 95.1073 148.577 94.2046C148.577 93.278 148.808 92.5496 149.27 92.0196C149.731 91.4896 150.365 91.2246 151.172 91.2246C151.921 91.2246 152.513 91.452 152.947 91.9068C153.381 92.3616 153.599 92.9873 153.599 93.784V94.4354H149.818C149.835 94.986 149.984 95.41 150.265 95.7075C150.545 96.0015 150.94 96.1486 151.449 96.1486C151.785 96.1486 152.096 96.1178 152.383 96.0562C152.674 95.9913 152.985 95.8853 153.316 95.7382V96.7179C153.022 96.8581 152.725 96.9573 152.424 97.0154C152.123 97.0735 151.779 97.1026 151.393 97.1026ZM151.172 92.1376C150.789 92.1376 150.482 92.259 150.249 92.5018C150.02 92.7445 149.883 93.0984 149.839 93.5635H152.414C152.407 93.095 152.294 92.7411 152.075 92.5018C151.856 92.259 151.555 92.1376 151.172 92.1376ZM160.574 91.2246C160.817 91.2246 161.017 91.2417 161.174 91.2759L161.056 92.3992C160.885 92.3581 160.708 92.3376 160.523 92.3376C160.041 92.3376 159.649 92.4949 159.348 92.8095C159.051 93.1241 158.902 93.5327 158.902 94.0354V97H157.697V91.3272H158.64L158.799 92.3274H158.861C159.049 91.9888 159.294 91.7204 159.595 91.5221C159.899 91.3238 160.225 91.2246 160.574 91.2246ZM164.708 97.1026C163.826 97.1026 163.135 96.8461 162.636 96.3332C162.14 95.8169 161.892 95.1073 161.892 94.2046C161.892 93.278 162.123 92.5496 162.585 92.0196C163.046 91.4896 163.681 91.2246 164.488 91.2246C165.237 91.2246 165.828 91.452 166.262 91.9068C166.697 92.3616 166.914 92.9873 166.914 93.784V94.4354H163.134C163.151 94.986 163.299 95.41 163.58 95.7075C163.86 96.0015 164.255 96.1486 164.765 96.1486C165.1 96.1486 165.411 96.1178 165.698 96.0562C165.989 95.9913 166.3 95.8853 166.632 95.7382V96.7179C166.338 96.8581 166.04 96.9573 165.739 97.0154C165.438 97.0735 165.095 97.1026 164.708 97.1026ZM164.488 92.1376C164.105 92.1376 163.797 92.259 163.564 92.5018C163.335 92.7445 163.199 93.0984 163.154 93.5635H165.729C165.722 93.095 165.609 92.7411 165.39 92.5018C165.172 92.259 164.871 92.1376 164.488 92.1376ZM170.571 97.1026C169.713 97.1026 169.059 96.853 168.612 96.3537C168.167 95.8511 167.945 95.1313 167.945 94.1944C167.945 93.2403 168.177 92.5069 168.642 91.994C169.111 91.4811 169.786 91.2246 170.668 91.2246C171.267 91.2246 171.805 91.3357 172.284 91.558L171.92 92.5274C171.41 92.3291 170.99 92.2299 170.658 92.2299C169.677 92.2299 169.186 92.8813 169.186 94.1841C169.186 94.8201 169.307 95.2988 169.55 95.6203C169.796 95.9383 170.155 96.0973 170.627 96.0973C171.164 96.0973 171.672 95.9639 172.151 95.6972V96.7487C171.935 96.8752 171.704 96.9658 171.458 97.0205C171.215 97.0752 170.92 97.1026 170.571 97.1026ZM175.962 97.1026C175.079 97.1026 174.389 96.8461 173.889 96.3332C173.394 95.8169 173.146 95.1073 173.146 94.2046C173.146 93.278 173.376 92.5496 173.838 92.0196C174.3 91.4896 174.934 91.2246 175.741 91.2246C176.49 91.2246 177.081 91.452 177.516 91.9068C177.95 92.3616 178.167 92.9873 178.167 93.784V94.4354H174.387C174.404 94.986 174.553 95.41 174.833 95.7075C175.114 96.0015 175.508 96.1486 176.018 96.1486C176.353 96.1486 176.664 96.1178 176.951 96.0562C177.242 95.9913 177.553 95.8853 177.885 95.7382V96.7179C177.591 96.8581 177.293 96.9573 176.993 97.0154C176.692 97.0735 176.348 97.1026 175.962 97.1026ZM175.741 92.1376C175.358 92.1376 175.05 92.259 174.818 92.5018C174.589 92.7445 174.452 93.0984 174.407 93.5635H176.982C176.975 93.095 176.863 92.7411 176.644 92.5018C176.425 92.259 176.124 92.1376 175.741 92.1376ZM180.742 97H179.537V91.3272H180.742V97ZM179.465 89.8243C179.465 89.6089 179.523 89.4431 179.639 89.3268C179.759 89.2106 179.928 89.1524 180.147 89.1524C180.359 89.1524 180.523 89.2106 180.639 89.3268C180.759 89.4431 180.819 89.6089 180.819 89.8243C180.819 90.0295 180.759 90.1919 180.639 90.3116C180.523 90.4279 180.359 90.486 180.147 90.486C179.928 90.486 179.759 90.4279 179.639 90.3116C179.523 90.1919 179.465 90.0295 179.465 89.8243ZM183.763 97L181.609 91.3272H182.881L184.035 94.6252C184.233 95.1792 184.353 95.6271 184.394 95.969H184.435C184.466 95.7228 184.585 95.2749 184.794 94.6252L185.948 91.3272H187.23L185.066 97H183.763ZM190.569 97.1026C189.687 97.1026 188.996 96.8461 188.497 96.3332C188.001 95.8169 187.753 95.1073 187.753 94.2046C187.753 93.278 187.984 92.5496 188.446 92.0196C188.907 91.4896 189.542 91.2246 190.349 91.2246C191.098 91.2246 191.689 91.452 192.123 91.9068C192.558 92.3616 192.775 92.9873 192.775 93.784V94.4354H188.995C189.012 94.986 189.161 95.41 189.441 95.7075C189.721 96.0015 190.116 96.1486 190.626 96.1486C190.961 96.1486 191.272 96.1178 191.559 96.0562C191.85 95.9913 192.161 95.8853 192.493 95.7382V96.7179C192.199 96.8581 191.901 96.9573 191.6 97.0154C191.299 97.0735 190.956 97.1026 190.569 97.1026ZM190.349 92.1376C189.966 92.1376 189.658 92.259 189.426 92.5018C189.196 92.7445 189.06 93.0984 189.015 93.5635H191.59C191.583 93.095 191.47 92.7411 191.252 92.5018C191.033 92.259 190.732 92.1376 190.349 92.1376ZM194.734 94.7227V94.3944C194.734 94.0183 194.803 93.7054 194.939 93.4558C195.076 93.2062 195.316 92.948 195.657 92.6813C196.064 92.3598 196.326 92.1102 196.442 91.9324C196.562 91.7546 196.622 91.5426 196.622 91.2964C196.622 91.0092 196.526 90.7886 196.334 90.6347C196.143 90.4809 195.868 90.4039 195.509 90.4039C195.184 90.4039 194.883 90.4501 194.606 90.5424C194.329 90.6347 194.059 90.7459 193.796 90.8758L193.365 89.9731C194.059 89.5867 194.803 89.3935 195.596 89.3935C196.266 89.3935 196.798 89.5576 197.191 89.8859C197.584 90.2142 197.781 90.6672 197.781 91.2451C197.781 91.5016 197.743 91.7307 197.668 91.9324C197.593 92.1307 197.478 92.3205 197.324 92.5018C197.174 92.683 196.912 92.9189 196.54 93.2096C196.222 93.4592 196.008 93.6661 195.899 93.8302C195.793 93.9943 195.74 94.2149 195.74 94.4919V94.7227H194.734ZM194.524 96.3589C194.524 95.8425 194.775 95.5844 195.278 95.5844C195.524 95.5844 195.712 95.6527 195.842 95.7895C195.972 95.9229 196.037 96.1127 196.037 96.3589C196.037 96.6016 195.97 96.7948 195.837 96.9385C195.707 97.0786 195.521 97.1487 195.278 97.1487C195.035 97.1487 194.849 97.0804 194.719 96.9436C194.589 96.8034 194.524 96.6085 194.524 96.3589Z" class="path-2"/> -<path d="M37.0388 114.493H39.1571C40.1522 114.493 40.8719 114.642 41.3165 114.94C41.761 115.237 41.9833 115.707 41.9833 116.35C41.9833 116.795 41.8584 117.162 41.6088 117.453C41.3626 117.74 41.0019 117.926 40.5266 118.012V118.063C41.6652 118.258 42.2346 118.857 42.2346 119.858C42.2346 120.529 42.0072 121.052 41.5524 121.428C41.101 121.804 40.4684 121.992 39.6546 121.992H37.0388V114.493ZM37.9107 117.704H39.3469C39.9624 117.704 40.4052 117.608 40.6753 117.417C40.9455 117.222 41.0805 116.896 41.0805 116.437C41.0805 116.017 40.9301 115.714 40.6292 115.529C40.3283 115.341 39.8495 115.247 39.193 115.247H37.9107V117.704ZM37.9107 118.443V121.248H39.4751C40.0803 121.248 40.5351 121.132 40.8395 120.9C41.1472 120.664 41.3011 120.296 41.3011 119.797C41.3011 119.332 41.1438 118.99 40.8292 118.771C40.518 118.552 40.0427 118.443 39.4033 118.443H37.9107ZM48.5742 119.176C48.5742 120.093 48.3434 120.809 47.8818 121.325C47.4201 121.838 46.7824 122.095 45.9686 122.095C45.4659 122.095 45.0197 121.977 44.6299 121.741C44.2401 121.505 43.9392 121.166 43.7272 120.725C43.5152 120.284 43.4092 119.768 43.4092 119.176C43.4092 118.26 43.6383 117.547 44.0965 117.037C44.5547 116.525 45.1907 116.268 46.0045 116.268C46.791 116.268 47.415 116.53 47.8766 117.053C48.3417 117.576 48.5742 118.284 48.5742 119.176ZM44.2914 119.176C44.2914 119.894 44.435 120.441 44.7222 120.818C45.0094 121.194 45.4317 121.382 45.9891 121.382C46.5465 121.382 46.9688 121.195 47.256 120.823C47.5467 120.447 47.692 119.898 47.692 119.176C47.692 118.462 47.5467 117.92 47.256 117.55C46.9688 117.178 46.5431 116.991 45.9788 116.991C45.4215 116.991 45.0009 117.174 44.7171 117.54C44.4333 117.906 44.2914 118.451 44.2914 119.176ZM52.6878 116.278C53.4263 116.278 53.9991 116.531 54.406 117.037C54.8163 117.54 55.0215 118.253 55.0215 119.176C55.0215 120.1 54.8146 120.818 54.4009 121.331C53.9906 121.84 53.4195 122.095 52.6878 122.095C52.3219 122.095 51.9868 122.028 51.6824 121.895C51.3815 121.758 51.1285 121.549 50.9233 121.269H50.8618L50.6823 121.992H50.0719V114.011H50.9233V115.95C50.9233 116.384 50.9097 116.774 50.8823 117.12H50.9233C51.32 116.559 51.9081 116.278 52.6878 116.278ZM52.5647 116.991C51.9834 116.991 51.5645 117.159 51.308 117.494C51.0516 117.826 50.9233 118.386 50.9233 119.176C50.9233 119.966 51.055 120.532 51.3183 120.874C51.5816 121.213 52.0039 121.382 52.5852 121.382C53.1083 121.382 53.4982 121.192 53.7546 120.812C54.0111 120.43 54.1393 119.881 54.1393 119.166C54.1393 118.434 54.0111 117.889 53.7546 117.53C53.4982 117.171 53.1015 116.991 52.5647 116.991ZM63.0896 121.992V118.356C63.0896 117.897 62.9853 117.555 62.7768 117.33C62.5682 117.104 62.2416 116.991 61.7971 116.991C61.2055 116.991 60.773 117.152 60.4994 117.473C60.2293 117.795 60.0942 118.321 60.0942 119.053V121.992H59.2428V114.011H60.0942V116.427C60.0942 116.718 60.0805 116.959 60.0532 117.15H60.1045C60.272 116.88 60.5097 116.668 60.8174 116.514C61.1286 116.357 61.4825 116.278 61.8792 116.278C62.5665 116.278 63.0811 116.442 63.423 116.771C63.7684 117.096 63.9411 117.614 63.9411 118.325V121.992H63.0896ZM66.5467 121.992H65.6952V116.371H66.5467V121.992ZM65.6234 114.847C65.6234 114.652 65.6713 114.51 65.767 114.422C65.8628 114.329 65.9825 114.283 66.1261 114.283C66.2629 114.283 66.3808 114.329 66.48 114.422C66.5792 114.514 66.6287 114.656 66.6287 114.847C66.6287 115.039 66.5792 115.182 66.48 115.278C66.3808 115.37 66.2629 115.417 66.1261 115.417C65.9825 115.417 65.8628 115.37 65.767 115.278C65.6713 115.182 65.6234 115.039 65.6234 114.847ZM70.9167 116.268C71.1663 116.268 71.3903 116.289 71.5886 116.33L71.4706 117.12C71.2381 117.068 71.033 117.043 70.8551 117.043C70.4004 117.043 70.0105 117.227 69.6857 117.597C69.3643 117.966 69.2036 118.426 69.2036 118.976V121.992H68.3521V116.371H69.0548L69.1523 117.412H69.1933C69.4019 117.046 69.6532 116.764 69.9473 116.566C70.2414 116.367 70.5645 116.268 70.9167 116.268ZM75.0149 122.095C74.184 122.095 73.5274 121.842 73.0453 121.336C72.5666 120.83 72.3272 120.127 72.3272 119.228C72.3272 118.321 72.5495 117.602 72.994 117.068C73.4419 116.535 74.042 116.268 74.7943 116.268C75.4987 116.268 76.0561 116.501 76.4664 116.966C76.8767 117.427 77.0819 118.038 77.0819 118.797V119.335H73.2094C73.2265 119.995 73.3924 120.496 73.7069 120.838C74.0249 121.18 74.4712 121.351 75.0456 121.351C75.6509 121.351 76.2493 121.225 76.8408 120.971V121.731C76.5399 121.861 76.2544 121.953 75.9843 122.008C75.7176 122.066 75.3944 122.095 75.0149 122.095ZM74.7841 116.981C74.3327 116.981 73.9719 117.128 73.7018 117.422C73.4351 117.716 73.2778 118.123 73.2299 118.643H76.1689C76.1689 118.106 76.0492 117.696 75.8099 117.412C75.5705 117.125 75.2286 116.981 74.7841 116.981ZM82.3649 121.238H82.3188C81.9255 121.809 81.3374 122.095 80.5543 122.095C79.8192 122.095 79.2464 121.843 78.8361 121.341C78.4292 120.838 78.2257 120.123 78.2257 119.197C78.2257 118.27 78.4309 117.55 78.8412 117.037C79.2515 116.525 79.8226 116.268 80.5543 116.268C81.3169 116.268 81.9016 116.545 82.3085 117.099H82.3752L82.3393 116.694L82.3188 116.299V114.011H83.1702V121.992H82.4778L82.3649 121.238ZM80.662 121.382C81.2433 121.382 81.6639 121.225 81.9238 120.91C82.1871 120.592 82.3188 120.081 82.3188 119.376V119.197C82.3188 118.4 82.1854 117.832 81.9187 117.494C81.6554 117.152 81.2331 116.981 80.6518 116.981C80.1526 116.981 79.7696 117.176 79.5029 117.566C79.2396 117.952 79.1079 118.499 79.1079 119.207C79.1079 119.925 79.2396 120.467 79.5029 120.833C79.7662 121.199 80.1526 121.382 80.662 121.382ZM92.5514 121.992L91.6179 119.607H88.6122L87.689 121.992H86.8067L89.7714 114.463H90.5049L93.4541 121.992H92.5514ZM91.346 118.822L90.4741 116.499C90.3612 116.205 90.245 115.844 90.1253 115.417C90.0501 115.745 89.9424 116.106 89.8022 116.499L88.92 118.822H91.346ZM95.2083 121.992H94.3568V114.011H95.2083V121.992ZM97.8652 121.992H97.0137V116.371H97.8652V121.992ZM96.9419 114.847C96.9419 114.652 96.9898 114.51 97.0855 114.422C97.1813 114.329 97.301 114.283 97.4446 114.283C97.5813 114.283 97.6993 114.329 97.7985 114.422C97.8976 114.514 97.9472 114.656 97.9472 114.847C97.9472 115.039 97.8976 115.182 97.7985 115.278C97.6993 115.37 97.5813 115.417 97.4446 115.417C97.301 115.417 97.1813 115.37 97.0855 115.278C96.9898 115.182 96.9419 115.039 96.9419 114.847ZM101.917 122.095C101.103 122.095 100.472 121.845 100.025 121.346C99.58 120.843 99.3577 120.134 99.3577 119.217C99.3577 118.277 99.5834 117.55 100.035 117.037C100.49 116.525 101.136 116.268 101.974 116.268C102.244 116.268 102.514 116.297 102.784 116.355C103.054 116.413 103.266 116.482 103.42 116.56L103.158 117.284C102.97 117.208 102.765 117.147 102.543 117.099C102.321 117.048 102.124 117.022 101.953 117.022C100.811 117.022 100.24 117.75 100.24 119.207C100.24 119.898 100.378 120.428 100.655 120.797C100.936 121.166 101.35 121.351 101.897 121.351C102.365 121.351 102.846 121.25 103.338 121.048V121.802C102.962 121.997 102.488 122.095 101.917 122.095ZM107.051 122.095C106.221 122.095 105.564 121.842 105.082 121.336C104.603 120.83 104.364 120.127 104.364 119.228C104.364 118.321 104.586 117.602 105.031 117.068C105.478 116.535 106.079 116.268 106.831 116.268C107.535 116.268 108.093 116.501 108.503 116.966C108.913 117.427 109.118 118.038 109.118 118.797V119.335H105.246C105.263 119.995 105.429 120.496 105.744 120.838C106.062 121.18 106.508 121.351 107.082 121.351C107.687 121.351 108.286 121.225 108.877 120.971V121.731C108.576 121.861 108.291 121.953 108.021 122.008C107.754 122.066 107.431 122.095 107.051 122.095ZM106.821 116.981C106.369 116.981 106.009 117.128 105.738 117.422C105.472 117.716 105.314 118.123 105.266 118.643H108.205C108.205 118.106 108.086 117.696 107.846 117.412C107.607 117.125 107.265 116.981 106.821 116.981ZM115.12 121.392C115.27 121.392 115.415 121.382 115.556 121.361C115.696 121.337 115.807 121.313 115.889 121.289V121.941C115.797 121.985 115.66 122.021 115.479 122.049C115.301 122.079 115.14 122.095 114.996 122.095C113.909 122.095 113.365 121.522 113.365 120.377V117.032H112.56V116.622L113.365 116.268L113.724 115.068H114.217V116.371H115.848V117.032H114.217V120.341C114.217 120.679 114.297 120.939 114.458 121.12C114.619 121.301 114.839 121.392 115.12 121.392ZM121.869 119.176C121.869 120.093 121.639 120.809 121.177 121.325C120.715 121.838 120.078 122.095 119.264 122.095C118.761 122.095 118.315 121.977 117.925 121.741C117.535 121.505 117.234 121.166 117.022 120.725C116.81 120.284 116.704 119.768 116.704 119.176C116.704 118.26 116.934 117.547 117.392 117.037C117.85 116.525 118.486 116.268 119.3 116.268C120.086 116.268 120.71 116.53 121.172 117.053C121.637 117.576 121.869 118.284 121.869 119.176ZM117.587 119.176C117.587 119.894 117.73 120.441 118.018 120.818C118.305 121.194 118.727 121.382 119.284 121.382C119.842 121.382 120.264 121.195 120.551 120.823C120.842 120.447 120.987 119.898 120.987 119.176C120.987 118.462 120.842 117.92 120.551 117.55C120.264 117.178 119.838 116.991 119.274 116.991C118.717 116.991 118.296 117.174 118.012 117.54C117.729 117.906 117.587 118.451 117.587 119.176ZM129.922 121.238H129.876C129.483 121.809 128.895 122.095 128.112 122.095C127.376 122.095 126.804 121.843 126.393 121.341C125.986 120.838 125.783 120.123 125.783 119.197C125.783 118.27 125.988 117.55 126.399 117.037C126.809 116.525 127.38 116.268 128.112 116.268C128.874 116.268 129.459 116.545 129.866 117.099H129.932L129.897 116.694L129.876 116.299V114.011H130.728V121.992H130.035L129.922 121.238ZM128.219 121.382C128.801 121.382 129.221 121.225 129.481 120.91C129.744 120.592 129.876 120.081 129.876 119.376V119.197C129.876 118.4 129.743 117.832 129.476 117.494C129.213 117.152 128.79 116.981 128.209 116.981C127.71 116.981 127.327 117.176 127.06 117.566C126.797 117.952 126.665 118.499 126.665 119.207C126.665 119.925 126.797 120.467 127.06 120.833C127.323 121.199 127.71 121.382 128.219 121.382ZM134.913 122.095C134.082 122.095 133.425 121.842 132.943 121.336C132.465 120.83 132.225 120.127 132.225 119.228C132.225 118.321 132.447 117.602 132.892 117.068C133.34 116.535 133.94 116.268 134.692 116.268C135.397 116.268 135.954 116.501 136.364 116.966C136.775 117.427 136.98 118.038 136.98 118.797V119.335H133.107C133.125 119.995 133.29 120.496 133.605 120.838C133.923 121.18 134.369 121.351 134.944 121.351C135.549 121.351 136.147 121.225 136.739 120.971V121.731C136.438 121.861 136.152 121.953 135.882 122.008C135.616 122.066 135.292 122.095 134.913 122.095ZM134.682 116.981C134.231 116.981 133.87 117.128 133.6 117.422C133.333 117.716 133.176 118.123 133.128 118.643H136.067C136.067 118.106 135.947 117.696 135.708 117.412C135.469 117.125 135.127 116.981 134.682 116.981ZM139.668 121.992L137.534 116.371H138.447L139.657 119.705C139.931 120.484 140.092 120.99 140.139 121.223H140.18C140.218 121.042 140.336 120.667 140.534 120.1C140.736 119.528 141.186 118.286 141.883 116.371H142.796L140.663 121.992H139.668ZM146.074 122.095C145.243 122.095 144.586 121.842 144.104 121.336C143.626 120.83 143.386 120.127 143.386 119.228C143.386 118.321 143.608 117.602 144.053 117.068C144.501 116.535 145.101 116.268 145.853 116.268C146.558 116.268 147.115 116.501 147.525 116.966C147.936 117.427 148.141 118.038 148.141 118.797V119.335H144.268C144.286 119.995 144.451 120.496 144.766 120.838C145.084 121.18 145.53 121.351 146.105 121.351C146.71 121.351 147.308 121.225 147.9 120.971V121.731C147.599 121.861 147.313 121.953 147.043 122.008C146.777 122.066 146.453 122.095 146.074 122.095ZM145.843 116.981C145.392 116.981 145.031 117.128 144.761 117.422C144.494 117.716 144.337 118.123 144.289 118.643H147.228C147.228 118.106 147.108 117.696 146.869 117.412C146.63 117.125 146.288 116.981 145.843 116.981ZM150.449 121.992H149.598V114.011H150.449V121.992ZM157.107 119.176C157.107 120.093 156.876 120.809 156.414 121.325C155.953 121.838 155.315 122.095 154.501 122.095C153.998 122.095 153.552 121.977 153.162 121.741C152.773 121.505 152.472 121.166 152.26 120.725C152.048 120.284 151.942 119.768 151.942 119.176C151.942 118.26 152.171 117.547 152.629 117.037C153.087 116.525 153.723 116.268 154.537 116.268C155.323 116.268 155.947 116.53 156.409 117.053C156.874 117.576 157.107 118.284 157.107 119.176ZM152.824 119.176C152.824 119.894 152.967 120.441 153.255 120.818C153.542 121.194 153.964 121.382 154.522 121.382C155.079 121.382 155.501 121.195 155.788 120.823C156.079 120.447 156.224 119.898 156.224 119.176C156.224 118.462 156.079 117.92 155.788 117.55C155.501 117.178 155.076 116.991 154.511 116.991C153.954 116.991 153.533 117.174 153.25 117.54C152.966 117.906 152.824 118.451 152.824 119.176ZM161.22 122.095C160.854 122.095 160.519 122.028 160.215 121.895C159.914 121.758 159.661 121.549 159.456 121.269H159.394C159.435 121.597 159.456 121.908 159.456 122.202V124.516H158.604V116.371H159.297L159.415 117.14H159.456C159.675 116.832 159.929 116.61 160.22 116.473C160.511 116.336 160.844 116.268 161.22 116.268C161.966 116.268 162.54 116.523 162.944 117.032C163.351 117.542 163.554 118.256 163.554 119.176C163.554 120.1 163.347 120.818 162.933 121.331C162.523 121.84 161.952 122.095 161.22 122.095ZM161.097 116.991C160.523 116.991 160.107 117.15 159.851 117.468C159.594 117.786 159.463 118.292 159.456 118.987V119.176C159.456 119.966 159.587 120.532 159.851 120.874C160.114 121.213 160.536 121.382 161.118 121.382C161.603 121.382 161.983 121.185 162.256 120.792C162.533 120.399 162.672 119.857 162.672 119.166C162.672 118.465 162.533 117.928 162.256 117.555C161.983 117.179 161.596 116.991 161.097 116.991ZM171.232 121.992L171.063 121.192H171.022C170.742 121.544 170.461 121.784 170.181 121.91C169.904 122.033 169.557 122.095 169.14 122.095C168.582 122.095 168.145 121.951 167.827 121.664C167.512 121.377 167.355 120.968 167.355 120.438C167.355 119.303 168.263 118.708 170.078 118.653L171.032 118.622V118.274C171.032 117.832 170.936 117.508 170.745 117.299C170.557 117.087 170.254 116.981 169.837 116.981C169.369 116.981 168.839 117.125 168.247 117.412L167.986 116.76C168.263 116.61 168.565 116.492 168.893 116.407C169.225 116.321 169.557 116.278 169.888 116.278C170.559 116.278 171.054 116.427 171.376 116.725C171.701 117.022 171.863 117.499 171.863 118.156V121.992H171.232ZM169.309 121.392C169.839 121.392 170.254 121.247 170.555 120.956C170.86 120.665 171.012 120.259 171.012 119.735V119.228L170.16 119.263C169.483 119.287 168.994 119.393 168.693 119.581C168.396 119.766 168.247 120.055 168.247 120.448C168.247 120.756 168.339 120.99 168.524 121.151C168.712 121.312 168.974 121.392 169.309 121.392ZM180.942 121.992L179.911 118.694C179.846 118.492 179.724 118.034 179.547 117.32H179.506C179.369 117.918 179.249 118.38 179.147 118.704L178.085 121.992H177.1L175.566 116.371H176.459C176.821 117.783 177.097 118.858 177.285 119.597C177.476 120.335 177.586 120.833 177.613 121.089H177.654C177.692 120.895 177.751 120.643 177.833 120.335C177.919 120.024 177.992 119.778 178.054 119.597L179.085 116.371H180.008L181.014 119.597C181.205 120.185 181.335 120.679 181.403 121.079H181.444C181.458 120.956 181.494 120.766 181.552 120.51C181.614 120.253 181.971 118.874 182.624 116.371H183.506L181.952 121.992H180.942ZM186.902 122.095C186.071 122.095 185.414 121.842 184.932 121.336C184.453 120.83 184.214 120.127 184.214 119.228C184.214 118.321 184.436 117.602 184.881 117.068C185.329 116.535 185.929 116.268 186.681 116.268C187.386 116.268 187.943 116.501 188.353 116.966C188.764 117.427 188.969 118.038 188.969 118.797V119.335H185.096C185.113 119.995 185.279 120.496 185.594 120.838C185.912 121.18 186.358 121.351 186.933 121.351C187.538 121.351 188.136 121.225 188.728 120.971V121.731C188.427 121.861 188.141 121.953 187.871 122.008C187.604 122.066 187.281 122.095 186.902 122.095ZM186.671 116.981C186.22 116.981 185.859 117.128 185.589 117.422C185.322 117.716 185.165 118.123 185.117 118.643H188.056C188.056 118.106 187.936 117.696 187.697 117.412C187.457 117.125 187.115 116.981 186.671 116.981ZM193.041 116.278C193.78 116.278 194.353 116.531 194.76 117.037C195.17 117.54 195.375 118.253 195.375 119.176C195.375 120.1 195.168 120.818 194.754 121.331C194.344 121.84 193.773 122.095 193.041 122.095C192.675 122.095 192.34 122.028 192.036 121.895C191.735 121.758 191.482 121.549 191.277 121.269H191.215L191.036 121.992H190.425V114.011H191.277V115.95C191.277 116.384 191.263 116.774 191.236 117.12H191.277C191.674 116.559 192.262 116.278 193.041 116.278ZM192.918 116.991C192.337 116.991 191.918 117.159 191.662 117.494C191.405 117.826 191.277 118.386 191.277 119.176C191.277 119.966 191.409 120.532 191.672 120.874C191.935 121.213 192.357 121.382 192.939 121.382C193.462 121.382 193.852 121.192 194.108 120.812C194.365 120.43 194.493 119.881 194.493 119.166C194.493 118.434 194.365 117.889 194.108 117.53C193.852 117.171 193.455 116.991 192.918 116.991ZM200.494 120.459C200.494 120.982 200.299 121.385 199.909 121.669C199.519 121.953 198.972 122.095 198.268 122.095C197.522 122.095 196.941 121.977 196.524 121.741V120.951C196.794 121.088 197.083 121.195 197.391 121.274C197.702 121.353 198.001 121.392 198.288 121.392C198.733 121.392 199.075 121.322 199.314 121.182C199.554 121.038 199.673 120.821 199.673 120.53C199.673 120.312 199.578 120.125 199.386 119.971C199.198 119.814 198.829 119.629 198.278 119.417C197.755 119.222 197.382 119.053 197.16 118.91C196.941 118.763 196.777 118.597 196.668 118.412C196.562 118.227 196.509 118.007 196.509 117.75C196.509 117.292 196.695 116.931 197.068 116.668C197.44 116.401 197.952 116.268 198.601 116.268C199.207 116.268 199.798 116.391 200.376 116.637L200.073 117.33C199.509 117.097 198.998 116.981 198.54 116.981C198.136 116.981 197.832 117.044 197.627 117.171C197.422 117.297 197.319 117.472 197.319 117.694C197.319 117.844 197.357 117.973 197.432 118.079C197.511 118.185 197.635 118.286 197.806 118.381C197.977 118.477 198.306 118.616 198.791 118.797C199.458 119.04 199.908 119.284 200.14 119.53C200.376 119.776 200.494 120.086 200.494 120.459ZM202.735 121.992H201.884V116.371H202.735V121.992ZM201.812 114.847C201.812 114.652 201.86 114.51 201.956 114.422C202.052 114.329 202.171 114.283 202.315 114.283C202.452 114.283 202.57 114.329 202.669 114.422C202.768 114.514 202.817 114.656 202.817 114.847C202.817 115.039 202.768 115.182 202.669 115.278C202.57 115.37 202.452 115.417 202.315 115.417C202.171 115.417 202.052 115.37 201.956 115.278C201.86 115.182 201.812 115.039 201.812 114.847ZM206.357 121.392C206.507 121.392 206.652 121.382 206.793 121.361C206.933 121.337 207.044 121.313 207.126 121.289V121.941C207.034 121.985 206.897 122.021 206.716 122.049C206.538 122.079 206.377 122.095 206.233 122.095C205.146 122.095 204.602 121.522 204.602 120.377V117.032H203.797V116.622L204.602 116.268L204.961 115.068H205.454V116.371H207.085V117.032H205.454V120.341C205.454 120.679 205.534 120.939 205.695 121.12C205.856 121.301 206.076 121.392 206.357 121.392ZM210.629 122.095C209.798 122.095 209.142 121.842 208.66 121.336C208.181 120.83 207.941 120.127 207.941 119.228C207.941 118.321 208.164 117.602 208.608 117.068C209.056 116.535 209.656 116.268 210.409 116.268C211.113 116.268 211.67 116.501 212.081 116.966C212.491 117.427 212.696 118.038 212.696 118.797V119.335H208.824C208.841 119.995 209.007 120.496 209.321 120.838C209.639 121.18 210.085 121.351 210.66 121.351C211.265 121.351 211.864 121.225 212.455 120.971V121.731C212.154 121.861 211.869 121.953 211.599 122.008C211.332 122.066 211.009 122.095 210.629 122.095ZM210.398 116.981C209.947 116.981 209.586 117.128 209.316 117.422C209.049 117.716 208.892 118.123 208.844 118.643H211.783C211.783 118.106 211.664 117.696 211.424 117.412C211.185 117.125 210.843 116.981 210.398 116.981ZM219.415 117.032H217.984V121.992H217.133V117.032H216.128V116.648L217.133 116.34V116.027C217.133 114.646 217.736 113.955 218.943 113.955C219.241 113.955 219.59 114.015 219.99 114.134L219.769 114.817C219.441 114.711 219.161 114.658 218.928 114.658C218.607 114.658 218.369 114.765 218.215 114.981C218.061 115.193 217.984 115.535 217.984 116.006V116.371H219.415V117.032ZM225.293 119.176C225.293 120.093 225.063 120.809 224.601 121.325C224.139 121.838 223.502 122.095 222.688 122.095C222.185 122.095 221.739 121.977 221.349 121.741C220.959 121.505 220.658 121.166 220.446 120.725C220.234 120.284 220.128 119.768 220.128 119.176C220.128 118.26 220.357 117.547 220.816 117.037C221.274 116.525 221.91 116.268 222.724 116.268C223.51 116.268 224.134 116.53 224.596 117.053C225.061 117.576 225.293 118.284 225.293 119.176ZM221.011 119.176C221.011 119.894 221.154 120.441 221.441 120.818C221.729 121.194 222.151 121.382 222.708 121.382C223.266 121.382 223.688 121.195 223.975 120.823C224.266 120.447 224.411 119.898 224.411 119.176C224.411 118.462 224.266 117.92 223.975 117.55C223.688 117.178 223.262 116.991 222.698 116.991C222.141 116.991 221.72 117.174 221.436 117.54C221.152 117.906 221.011 118.451 221.011 119.176ZM229.356 116.268C229.605 116.268 229.829 116.289 230.028 116.33L229.91 117.12C229.677 117.068 229.472 117.043 229.294 117.043C228.839 117.043 228.449 117.227 228.125 117.597C227.803 117.966 227.642 118.426 227.642 118.976V121.992H226.791V116.371H227.494L227.591 117.412H227.632C227.841 117.046 228.092 116.764 228.386 116.566C228.68 116.367 229.003 116.268 229.356 116.268ZM237.655 121.992V118.356C237.655 117.897 237.55 117.555 237.342 117.33C237.133 117.104 236.807 116.991 236.362 116.991C235.77 116.991 235.338 117.152 235.064 117.473C234.794 117.795 234.659 118.321 234.659 119.053V121.992H233.808V114.011H234.659V116.427C234.659 116.718 234.645 116.959 234.618 117.15H234.669C234.837 116.88 235.075 116.668 235.382 116.514C235.694 116.357 236.047 116.278 236.444 116.278C237.131 116.278 237.646 116.442 237.988 116.771C238.333 117.096 238.506 117.614 238.506 118.325V121.992H237.655ZM241.112 121.992H240.26V116.371H241.112V121.992ZM240.188 114.847C240.188 114.652 240.236 114.51 240.332 114.422C240.428 114.329 240.547 114.283 240.691 114.283C240.828 114.283 240.946 114.329 241.045 114.422C241.144 114.514 241.194 114.656 241.194 114.847C241.194 115.039 241.144 115.182 241.045 115.278C240.946 115.37 240.828 115.417 240.691 115.417C240.547 115.417 240.428 115.37 240.332 115.278C240.236 115.182 240.188 115.039 240.188 114.847ZM250.082 121.992V118.335C250.082 117.887 249.987 117.552 249.795 117.33C249.604 117.104 249.306 116.991 248.903 116.991C248.373 116.991 247.981 117.143 247.728 117.448C247.475 117.752 247.349 118.221 247.349 118.853V121.992H246.497V118.335C246.497 117.887 246.401 117.552 246.21 117.33C246.018 117.104 245.719 116.991 245.312 116.991C244.779 116.991 244.387 117.152 244.138 117.473C243.892 117.791 243.768 118.315 243.768 119.043V121.992H242.917V116.371H243.609L243.748 117.14H243.789C243.95 116.866 244.175 116.653 244.466 116.499C244.76 116.345 245.088 116.268 245.451 116.268C246.33 116.268 246.904 116.586 247.174 117.222H247.215C247.383 116.928 247.626 116.696 247.944 116.525C248.262 116.354 248.624 116.268 249.031 116.268C249.667 116.268 250.142 116.432 250.457 116.76C250.775 117.085 250.934 117.607 250.934 118.325V121.992H250.082ZM252.57 121.448C252.57 121.219 252.621 121.047 252.724 120.93C252.83 120.811 252.98 120.751 253.175 120.751C253.374 120.751 253.528 120.811 253.637 120.93C253.75 121.047 253.806 121.219 253.806 121.448C253.806 121.671 253.75 121.842 253.637 121.961C253.524 122.081 253.37 122.141 253.175 122.141C253.001 122.141 252.856 122.088 252.739 121.982C252.626 121.873 252.57 121.695 252.57 121.448ZM258.351 114.493H260.469C261.464 114.493 262.184 114.642 262.628 114.94C263.073 115.237 263.295 115.707 263.295 116.35C263.295 116.795 263.17 117.162 262.921 117.453C262.674 117.74 262.314 117.926 261.838 118.012V118.063C262.977 118.258 263.546 118.857 263.546 119.858C263.546 120.529 263.319 121.052 262.864 121.428C262.413 121.804 261.78 121.992 260.966 121.992H258.351V114.493ZM259.223 117.704H260.659C261.274 117.704 261.717 117.608 261.987 117.417C262.257 117.222 262.392 116.896 262.392 116.437C262.392 116.017 262.242 115.714 261.941 115.529C261.64 115.341 261.161 115.247 260.505 115.247H259.223V117.704ZM259.223 118.443V121.248H260.787C261.392 121.248 261.847 121.132 262.151 120.9C262.459 120.664 262.613 120.296 262.613 119.797C262.613 119.332 262.456 118.99 262.141 118.771C261.83 118.552 261.355 118.443 260.715 118.443H259.223ZM269.886 119.176C269.886 120.093 269.655 120.809 269.194 121.325C268.732 121.838 268.094 122.095 267.28 122.095C266.778 122.095 266.332 121.977 265.942 121.741C265.552 121.505 265.251 121.166 265.039 120.725C264.827 120.284 264.721 119.768 264.721 119.176C264.721 118.26 264.95 117.547 265.408 117.037C265.866 116.525 266.503 116.268 267.316 116.268C268.103 116.268 268.727 116.53 269.188 117.053C269.654 117.576 269.886 118.284 269.886 119.176ZM265.603 119.176C265.603 119.894 265.747 120.441 266.034 120.818C266.321 121.194 266.744 121.382 267.301 121.382C267.858 121.382 268.281 121.195 268.568 120.823C268.858 120.447 269.004 119.898 269.004 119.176C269.004 118.462 268.858 117.92 268.568 117.55C268.281 117.178 267.855 116.991 267.291 116.991C266.733 116.991 266.313 117.174 266.029 117.54C265.745 117.906 265.603 118.451 265.603 119.176ZM274 116.278C274.738 116.278 275.311 116.531 275.718 117.037C276.128 117.54 276.333 118.253 276.333 119.176C276.333 120.1 276.126 120.818 275.713 121.331C275.302 121.84 274.731 122.095 274 122.095C273.634 122.095 273.299 122.028 272.994 121.895C272.693 121.758 272.44 121.549 272.235 121.269H272.174L271.994 121.992H271.384V114.011H272.235V115.95C272.235 116.384 272.221 116.774 272.194 117.12H272.235C272.632 116.559 273.22 116.278 274 116.278ZM273.876 116.991C273.295 116.991 272.876 117.159 272.62 117.494C272.363 117.826 272.235 118.386 272.235 119.176C272.235 119.966 272.367 120.532 272.63 120.874C272.893 121.213 273.316 121.382 273.897 121.382C274.42 121.382 274.81 121.192 275.066 120.812C275.323 120.43 275.451 119.881 275.451 119.166C275.451 118.434 275.323 117.889 275.066 117.53C274.81 117.171 274.413 116.991 273.876 116.991ZM39.1571 136.095C38.3433 136.095 37.7124 135.845 37.2645 135.346C36.8199 134.843 36.5977 134.134 36.5977 133.217C36.5977 132.277 36.8233 131.55 37.2747 131.037C37.7295 130.525 38.3758 130.268 39.2135 130.268C39.4837 130.268 39.7538 130.297 40.0239 130.355C40.2941 130.413 40.5061 130.482 40.6599 130.56L40.3984 131.284C40.2103 131.208 40.0051 131.147 39.7829 131.099C39.5606 131.048 39.364 131.022 39.193 131.022C38.0509 131.022 37.4799 131.75 37.4799 133.207C37.4799 133.898 37.6184 134.428 37.8953 134.797C38.1757 135.166 38.5895 135.351 39.1366 135.351C39.605 135.351 40.0855 135.25 40.5779 135.048V135.802C40.2017 135.997 39.7281 136.095 39.1571 136.095ZM42.768 135.992H41.9166V128.011H42.768V135.992ZM48.0305 135.992L47.8612 135.192H47.8202C47.5398 135.544 47.2594 135.784 46.979 135.91C46.7021 136.033 46.355 136.095 45.9378 136.095C45.3804 136.095 44.9428 135.951 44.6248 135.664C44.3102 135.377 44.1529 134.968 44.1529 134.438C44.1529 133.303 45.0607 132.708 46.8764 132.653L47.8305 132.622V132.274C47.8305 131.832 47.7347 131.508 47.5432 131.299C47.3552 131.087 47.0525 130.981 46.6354 130.981C46.1669 130.981 45.6369 131.125 45.0453 131.412L44.7838 130.76C45.0607 130.61 45.3634 130.492 45.6916 130.407C46.0233 130.321 46.355 130.278 46.6867 130.278C47.3569 130.278 47.8527 130.427 48.1741 130.725C48.499 131.022 48.6614 131.499 48.6614 132.156V135.992H48.0305ZM46.1071 135.392C46.6371 135.392 47.0525 135.247 47.3535 134.956C47.6578 134.665 47.8099 134.259 47.8099 133.735V133.228L46.9585 133.263C46.2815 133.287 45.7925 133.393 45.4916 133.581C45.1941 133.766 45.0453 134.055 45.0453 134.448C45.0453 134.756 45.1377 134.99 45.3223 135.151C45.5104 135.312 45.772 135.392 46.1071 135.392ZM51.2721 135.992H50.4207V130.371H51.2721V135.992ZM50.3489 128.847C50.3489 128.652 50.3967 128.51 50.4925 128.422C50.5882 128.329 50.7079 128.283 50.8515 128.283C50.9883 128.283 51.1063 128.329 51.2054 128.422C51.3046 128.514 51.3542 128.656 51.3542 128.847C51.3542 129.039 51.3046 129.182 51.2054 129.278C51.1063 129.37 50.9883 129.417 50.8515 129.417C50.7079 129.417 50.5882 129.37 50.4925 129.278C50.3967 129.182 50.3489 129.039 50.3489 128.847ZM60.243 135.992V132.335C60.243 131.887 60.1472 131.552 59.9557 131.33C59.7642 131.104 59.4668 130.991 59.0633 130.991C58.5333 130.991 58.1417 131.143 57.8887 131.448C57.6357 131.752 57.5091 132.221 57.5091 132.853V135.992H56.6577V132.335C56.6577 131.887 56.562 131.552 56.3705 131.33C56.179 131.104 55.8798 130.991 55.4729 130.991C54.9394 130.991 54.5479 131.152 54.2983 131.473C54.0521 131.791 53.929 132.315 53.929 133.043V135.992H53.0776V130.371H53.77L53.9085 131.14H53.9495C54.1102 130.866 54.3359 130.653 54.6266 130.499C54.9206 130.345 55.2489 130.268 55.6114 130.268C56.4901 130.268 57.0646 130.586 57.3347 131.222H57.3758C57.5433 130.928 57.7861 130.696 58.1041 130.525C58.4221 130.354 58.7846 130.268 59.1915 130.268C59.8275 130.268 60.3028 130.432 60.6174 130.76C60.9354 131.085 61.0944 131.607 61.0944 132.325V135.992H60.243ZM66.48 134.459C66.48 134.982 66.2851 135.385 65.8953 135.669C65.5055 135.953 64.9583 136.095 64.2539 136.095C63.5085 136.095 62.9272 135.977 62.51 135.741V134.951C62.7802 135.088 63.0691 135.195 63.3769 135.274C63.688 135.353 63.9872 135.392 64.2745 135.392C64.719 135.392 65.0609 135.322 65.3003 135.182C65.5396 135.038 65.6593 134.821 65.6593 134.53C65.6593 134.312 65.5636 134.125 65.3721 133.971C65.184 133.814 64.8147 133.629 64.2642 133.417C63.741 133.222 63.3683 133.053 63.1461 132.91C62.9272 132.763 62.7631 132.597 62.6537 132.412C62.5477 132.227 62.4947 132.007 62.4947 131.75C62.4947 131.292 62.681 130.931 63.0537 130.668C63.4264 130.401 63.9377 130.268 64.5873 130.268C65.1926 130.268 65.7841 130.391 66.362 130.637L66.0594 131.33C65.4952 131.097 64.984 130.981 64.5258 130.981C64.1223 130.981 63.818 131.044 63.6128 131.171C63.4076 131.297 63.3051 131.472 63.3051 131.694C63.3051 131.844 63.3427 131.973 63.4179 132.079C63.4965 132.185 63.6214 132.286 63.7923 132.381C63.9633 132.477 64.2916 132.616 64.7771 132.797C65.4439 133.04 65.8936 133.284 66.1261 133.53C66.362 133.776 66.48 134.086 66.48 134.459ZM72.4144 135.392C72.5649 135.392 72.7102 135.382 72.8504 135.361C72.9906 135.337 73.1017 135.313 73.1838 135.289V135.941C73.0914 135.985 72.9547 136.021 72.7734 136.049C72.5956 136.079 72.4349 136.095 72.2913 136.095C71.2039 136.095 70.6602 135.522 70.6602 134.377V131.032H69.855V130.622L70.6602 130.268L71.0193 129.068H71.5117V130.371H73.1427V131.032H71.5117V134.341C71.5117 134.679 71.592 134.939 71.7527 135.12C71.9135 135.301 72.134 135.392 72.4144 135.392ZM78.159 135.992V132.356C78.159 131.897 78.0547 131.555 77.8462 131.33C77.6376 131.104 77.311 130.991 76.8665 130.991C76.2749 130.991 75.8424 131.152 75.5688 131.473C75.2987 131.795 75.1636 132.321 75.1636 133.053V135.992H74.3122V128.011H75.1636V130.427C75.1636 130.718 75.1499 130.959 75.1226 131.15H75.1739C75.3414 130.88 75.5791 130.668 75.8868 130.514C76.198 130.357 76.5519 130.278 76.9486 130.278C77.6359 130.278 78.1505 130.442 78.4924 130.771C78.8378 131.096 79.0105 131.614 79.0105 132.325V135.992H78.159ZM83.1394 136.095C82.3085 136.095 81.652 135.842 81.1698 135.336C80.6911 134.83 80.4518 134.127 80.4518 133.228C80.4518 132.321 80.674 131.602 81.1185 131.068C81.5665 130.535 82.1666 130.268 82.9189 130.268C83.6233 130.268 84.1806 130.501 84.591 130.966C85.0013 131.427 85.2065 132.038 85.2065 132.797V133.335H81.334C81.3511 133.995 81.5169 134.496 81.8315 134.838C82.1495 135.18 82.5957 135.351 83.1702 135.351C83.7754 135.351 84.3738 135.225 84.9654 134.971V135.731C84.6645 135.861 84.379 135.953 84.1088 136.008C83.8421 136.066 83.519 136.095 83.1394 136.095ZM82.9086 130.981C82.4572 130.981 82.0965 131.128 81.8264 131.422C81.5596 131.716 81.4023 132.123 81.3545 132.643H84.2935C84.2935 132.106 84.1738 131.696 83.9344 131.412C83.6951 131.125 83.3531 130.981 82.9086 130.981ZM91.6384 136.095C90.8246 136.095 90.1937 135.845 89.7457 135.346C89.3012 134.843 89.079 134.134 89.079 133.217C89.079 132.277 89.3046 131.55 89.756 131.037C90.2108 130.525 90.8571 130.268 91.6948 130.268C91.9649 130.268 92.2351 130.297 92.5052 130.355C92.7753 130.413 92.9874 130.482 93.1412 130.56L92.8796 131.284C92.6916 131.208 92.4864 131.147 92.2641 131.099C92.0419 131.048 91.8453 131.022 91.6743 131.022C90.5322 131.022 89.9612 131.75 89.9612 133.207C89.9612 133.898 90.0996 134.428 90.3766 134.797C90.657 135.166 91.0708 135.351 91.6179 135.351C92.0863 135.351 92.5668 135.25 93.0592 135.048V135.802C92.683 135.997 92.2094 136.095 91.6384 136.095ZM99.25 133.176C99.25 134.093 99.0192 134.809 98.5576 135.325C98.096 135.838 97.4582 136.095 96.6444 136.095C96.1418 136.095 95.6955 135.977 95.3057 135.741C94.9159 135.505 94.615 135.166 94.403 134.725C94.191 134.284 94.085 133.768 94.085 133.176C94.085 132.26 94.3141 131.547 94.7723 131.037C95.2305 130.525 95.8665 130.268 96.6803 130.268C97.4668 130.268 98.0908 130.53 98.5525 131.053C99.0175 131.576 99.25 132.284 99.25 133.176ZM94.9672 133.176C94.9672 133.894 95.1108 134.441 95.398 134.818C95.6853 135.194 96.1076 135.382 96.6649 135.382C97.2223 135.382 97.6446 135.195 97.9318 134.823C98.2225 134.447 98.3678 133.898 98.3678 133.176C98.3678 132.462 98.2225 131.92 97.9318 131.55C97.6446 131.178 97.2189 130.991 96.6547 130.991C96.0973 130.991 95.6767 131.174 95.3929 131.54C95.1091 131.906 94.9672 132.451 94.9672 133.176ZM104.595 135.992V132.356C104.595 131.897 104.49 131.555 104.282 131.33C104.073 131.104 103.747 130.991 103.302 130.991C102.714 130.991 102.283 131.15 102.009 131.468C101.736 131.786 101.599 132.311 101.599 133.043V135.992H100.748V130.371H101.44L101.579 131.14H101.62C101.794 130.863 102.039 130.649 102.353 130.499C102.668 130.345 103.018 130.268 103.405 130.268C104.082 130.268 104.591 130.432 104.933 130.76C105.275 131.085 105.446 131.607 105.446 132.325V135.992H104.595ZM109.016 135.392C109.166 135.392 109.312 135.382 109.452 135.361C109.592 135.337 109.703 135.313 109.785 135.289V135.941C109.693 135.985 109.556 136.021 109.375 136.049C109.197 136.079 109.036 136.095 108.893 136.095C107.805 136.095 107.262 135.522 107.262 134.377V131.032H106.456V130.622L107.262 130.268L107.621 129.068H108.113V130.371H109.744V131.032H108.113V134.341C108.113 134.679 108.194 134.939 108.354 135.12C108.515 135.301 108.735 135.392 109.016 135.392ZM113.478 130.268C113.728 130.268 113.952 130.289 114.15 130.33L114.032 131.12C113.8 131.068 113.594 131.043 113.417 131.043C112.962 131.043 112.572 131.227 112.247 131.597C111.926 131.966 111.765 132.426 111.765 132.976V135.992H110.914V130.371H111.616L111.714 131.412H111.755C111.963 131.046 112.215 130.764 112.509 130.566C112.803 130.367 113.126 130.268 113.478 130.268ZM118.659 135.992L118.489 135.192H118.448C118.168 135.544 117.888 135.784 117.607 135.91C117.33 136.033 116.983 136.095 116.566 136.095C116.009 136.095 115.571 135.951 115.253 135.664C114.938 135.377 114.781 134.968 114.781 134.438C114.781 133.303 115.689 132.708 117.505 132.653L118.459 132.622V132.274C118.459 131.832 118.363 131.508 118.171 131.299C117.983 131.087 117.681 130.981 117.264 130.981C116.795 130.981 116.265 131.125 115.674 131.412L115.412 130.76C115.689 130.61 115.992 130.492 116.32 130.407C116.651 130.321 116.983 130.278 117.315 130.278C117.985 130.278 118.481 130.427 118.802 130.725C119.127 131.022 119.29 131.499 119.29 132.156V135.992H118.659ZM116.735 135.392C117.265 135.392 117.681 135.247 117.982 134.956C118.286 134.665 118.438 134.259 118.438 133.735V133.228L117.587 133.263C116.91 133.287 116.421 133.393 116.12 133.581C115.822 133.766 115.674 134.055 115.674 134.448C115.674 134.756 115.766 134.99 115.95 135.151C116.139 135.312 116.4 135.392 116.735 135.392ZM123.295 136.095C122.482 136.095 121.851 135.845 121.403 135.346C120.958 134.843 120.736 134.134 120.736 133.217C120.736 132.277 120.962 131.55 121.413 131.037C121.868 130.525 122.514 130.268 123.352 130.268C123.622 130.268 123.892 130.297 124.162 130.355C124.432 130.413 124.644 130.482 124.798 130.56L124.537 131.284C124.349 131.208 124.143 131.147 123.921 131.099C123.699 131.048 123.502 131.022 123.331 131.022C122.189 131.022 121.618 131.75 121.618 133.207C121.618 133.898 121.757 134.428 122.034 134.797C122.314 135.166 122.728 135.351 123.275 135.351C123.743 135.351 124.224 135.25 124.716 135.048V135.802C124.34 135.997 123.866 136.095 123.295 136.095ZM127.871 135.392C128.021 135.392 128.166 135.382 128.307 135.361C128.447 135.337 128.558 135.313 128.64 135.289V135.941C128.548 135.985 128.411 136.021 128.23 136.049C128.052 136.079 127.891 136.095 127.747 136.095C126.66 136.095 126.116 135.522 126.116 134.377V131.032H125.311V130.622L126.116 130.268L126.475 129.068H126.968V130.371H128.599V131.032H126.968V134.341C126.968 134.679 127.048 134.939 127.209 135.12C127.37 135.301 127.59 135.392 127.871 135.392ZM137.088 135.992L136.057 132.694C135.992 132.492 135.87 132.034 135.693 131.32H135.651C135.515 131.918 135.395 132.38 135.292 132.704L134.231 135.992H133.246L131.712 130.371H132.605C132.967 131.783 133.242 132.858 133.431 133.597C133.622 134.335 133.731 134.833 133.759 135.089H133.8C133.837 134.895 133.897 134.643 133.979 134.335C134.065 134.024 134.138 133.778 134.2 133.597L135.231 130.371H136.154L137.159 133.597C137.351 134.185 137.481 134.679 137.549 135.079H137.59C137.604 134.956 137.64 134.766 137.698 134.51C137.76 134.253 138.117 132.874 138.77 130.371H139.652L138.098 135.992H137.088ZM144.13 135.992L143.961 135.192H143.92C143.639 135.544 143.359 135.784 143.078 135.91C142.801 136.033 142.454 136.095 142.037 136.095C141.48 136.095 141.042 135.951 140.724 135.664C140.41 135.377 140.252 134.968 140.252 134.438C140.252 133.303 141.16 132.708 142.976 132.653L143.93 132.622V132.274C143.93 131.832 143.834 131.508 143.643 131.299C143.455 131.087 143.152 130.981 142.735 130.981C142.266 130.981 141.736 131.125 141.145 131.412L140.883 130.76C141.16 130.61 141.463 130.492 141.791 130.407C142.123 130.321 142.454 130.278 142.786 130.278C143.456 130.278 143.952 130.427 144.274 130.725C144.598 131.022 144.761 131.499 144.761 132.156V135.992H144.13ZM142.207 135.392C142.737 135.392 143.152 135.247 143.453 134.956C143.757 134.665 143.909 134.259 143.909 133.735V133.228L143.058 133.263C142.381 133.287 141.892 133.393 141.591 133.581C141.294 133.766 141.145 134.055 141.145 134.448C141.145 134.756 141.237 134.99 141.422 135.151C141.61 135.312 141.871 135.392 142.207 135.392ZM150.146 134.459C150.146 134.982 149.952 135.385 149.562 135.669C149.172 135.953 148.625 136.095 147.92 136.095C147.175 136.095 146.594 135.977 146.176 135.741V134.951C146.447 135.088 146.736 135.195 147.043 135.274C147.354 135.353 147.654 135.392 147.941 135.392C148.385 135.392 148.727 135.322 148.967 135.182C149.206 135.038 149.326 134.821 149.326 134.53C149.326 134.312 149.23 134.125 149.039 133.971C148.85 133.814 148.481 133.629 147.931 133.417C147.407 133.222 147.035 133.053 146.812 132.91C146.594 132.763 146.429 132.597 146.32 132.412C146.214 132.227 146.161 132.007 146.161 131.75C146.161 131.292 146.347 130.931 146.72 130.668C147.093 130.401 147.604 130.268 148.254 130.268C148.859 130.268 149.451 130.391 150.028 130.637L149.726 131.33C149.162 131.097 148.65 130.981 148.192 130.981C147.789 130.981 147.484 131.044 147.279 131.171C147.074 131.297 146.971 131.472 146.971 131.694C146.971 131.844 147.009 131.973 147.084 132.079C147.163 132.185 147.288 132.286 147.459 132.381C147.63 132.477 147.958 132.616 148.444 132.797C149.11 133.04 149.56 133.284 149.793 133.53C150.028 133.776 150.146 134.086 150.146 134.459ZM158.112 135.992V132.356C158.112 131.897 158.008 131.555 157.799 131.33C157.59 131.104 157.264 130.991 156.819 130.991C156.231 130.991 155.8 131.15 155.527 131.468C155.253 131.786 155.117 132.311 155.117 133.043V135.992H154.265V130.371H154.958L155.096 131.14H155.137C155.311 130.863 155.556 130.649 155.871 130.499C156.185 130.345 156.536 130.268 156.922 130.268C157.599 130.268 158.109 130.432 158.45 130.76C158.792 131.085 158.963 131.607 158.963 132.325V135.992H158.112ZM165.57 133.176C165.57 134.093 165.339 134.809 164.877 135.325C164.416 135.838 163.778 136.095 162.964 136.095C162.461 136.095 162.015 135.977 161.625 135.741C161.236 135.505 160.935 135.166 160.723 134.725C160.511 134.284 160.405 133.768 160.405 133.176C160.405 132.26 160.634 131.547 161.092 131.037C161.55 130.525 162.186 130.268 163 130.268C163.786 130.268 164.411 130.53 164.872 131.053C165.337 131.576 165.57 132.284 165.57 133.176ZM161.287 133.176C161.287 133.894 161.43 134.441 161.718 134.818C162.005 135.194 162.427 135.382 162.985 135.382C163.542 135.382 163.964 135.195 164.252 134.823C164.542 134.447 164.687 133.898 164.687 133.176C164.687 132.462 164.542 131.92 164.252 131.55C163.964 131.178 163.539 130.991 162.974 130.991C162.417 130.991 161.996 131.174 161.713 131.54C161.429 131.906 161.287 132.451 161.287 133.176ZM168.883 135.392C169.034 135.392 169.179 135.382 169.319 135.361C169.459 135.337 169.57 135.313 169.652 135.289V135.941C169.56 135.985 169.423 136.021 169.242 136.049C169.064 136.079 168.904 136.095 168.76 136.095C167.673 136.095 167.129 135.522 167.129 134.377V131.032H166.324V130.622L167.129 130.268L167.488 129.068H167.98V130.371H169.611V131.032H167.98V134.341C167.98 134.679 168.061 134.939 168.221 135.12C168.382 135.301 168.603 135.392 168.883 135.392ZM176.043 131.032H174.612V135.992H173.761V131.032H172.756V130.648L173.761 130.34V130.027C173.761 128.646 174.364 127.955 175.572 127.955C175.869 127.955 176.218 128.015 176.618 128.134L176.397 128.817C176.069 128.711 175.789 128.658 175.556 128.658C175.235 128.658 174.997 128.765 174.843 128.981C174.689 129.193 174.612 129.535 174.612 130.006V130.371H176.043V131.032ZM177.869 130.371V134.017C177.869 134.476 177.974 134.818 178.182 135.043C178.391 135.269 178.717 135.382 179.162 135.382C179.75 135.382 180.179 135.221 180.449 134.9C180.723 134.578 180.86 134.053 180.86 133.325V130.371H181.711V135.992H181.008L180.885 135.238H180.839C180.665 135.515 180.422 135.727 180.111 135.874C179.803 136.021 179.451 136.095 179.054 136.095C178.37 136.095 177.857 135.932 177.515 135.608C177.177 135.283 177.008 134.763 177.008 134.048V130.371H177.869ZM184.373 135.992H183.522V128.011H184.373V135.992ZM187.03 135.992H186.179V128.011H187.03V135.992ZM187.943 130.371H188.856L190.087 133.576C190.357 134.308 190.525 134.836 190.59 135.161H190.631C190.675 134.987 190.767 134.689 190.908 134.269C191.051 133.845 191.516 132.545 192.303 130.371H193.216L190.8 136.772C190.561 137.404 190.28 137.852 189.959 138.116C189.641 138.382 189.249 138.516 188.784 138.516C188.524 138.516 188.268 138.487 188.015 138.429V137.746C188.203 137.787 188.413 137.808 188.646 137.808C189.23 137.808 189.648 137.48 189.897 136.823L190.21 136.023L187.943 130.371ZM199.422 130.268C199.672 130.268 199.896 130.289 200.094 130.33L199.976 131.12C199.743 131.068 199.538 131.043 199.36 131.043C198.906 131.043 198.516 131.227 198.191 131.597C197.87 131.966 197.709 132.426 197.709 132.976V135.992H196.857V130.371H197.56L197.658 131.412H197.699C197.907 131.046 198.159 130.764 198.453 130.566C198.747 130.367 199.07 130.268 199.422 130.268ZM203.52 136.095C202.689 136.095 202.033 135.842 201.551 135.336C201.072 134.83 200.832 134.127 200.832 133.228C200.832 132.321 201.055 131.602 201.499 131.068C201.947 130.535 202.547 130.268 203.3 130.268C204.004 130.268 204.561 130.501 204.972 130.966C205.382 131.427 205.587 132.038 205.587 132.797V133.335H201.715C201.732 133.995 201.898 134.496 202.212 134.838C202.53 135.18 202.976 135.351 203.551 135.351C204.156 135.351 204.755 135.225 205.346 134.971V135.731C205.045 135.861 204.76 135.953 204.49 136.008C204.223 136.066 203.9 136.095 203.52 136.095ZM203.289 130.981C202.838 130.981 202.477 131.128 202.207 131.422C201.94 131.716 201.783 132.123 201.735 132.643H204.674C204.674 132.106 204.555 131.696 204.315 131.412C204.076 131.125 203.734 130.981 203.289 130.981ZM210.67 134.459C210.67 134.982 210.475 135.385 210.085 135.669C209.696 135.953 209.149 136.095 208.444 136.095C207.699 136.095 207.117 135.977 206.7 135.741V134.951C206.97 135.088 207.259 135.195 207.567 135.274C207.878 135.353 208.177 135.392 208.465 135.392C208.909 135.392 209.251 135.322 209.49 135.182C209.73 135.038 209.85 134.821 209.85 134.53C209.85 134.312 209.754 134.125 209.562 133.971C209.374 133.814 209.005 133.629 208.454 133.417C207.931 133.222 207.558 133.053 207.336 132.91C207.117 132.763 206.953 132.597 206.844 132.412C206.738 132.227 206.685 132.007 206.685 131.75C206.685 131.292 206.871 130.931 207.244 130.668C207.617 130.401 208.128 130.268 208.778 130.268C209.383 130.268 209.974 130.391 210.552 130.637L210.25 131.33C209.685 131.097 209.174 130.981 208.716 130.981C208.312 130.981 208.008 131.044 207.803 131.171C207.598 131.297 207.495 131.472 207.495 131.694C207.495 131.844 207.533 131.973 207.608 132.079C207.687 132.185 207.812 132.286 207.983 132.381C208.153 132.477 208.482 132.616 208.967 132.797C209.634 133.04 210.084 133.284 210.316 133.53C210.552 133.776 210.67 134.086 210.67 134.459ZM214.676 136.095C214.31 136.095 213.975 136.028 213.671 135.895C213.37 135.758 213.117 135.549 212.912 135.269H212.85C212.891 135.597 212.912 135.908 212.912 136.202V138.516H212.06V130.371H212.753L212.871 131.14H212.912C213.13 130.832 213.385 130.61 213.676 130.473C213.966 130.336 214.3 130.268 214.676 130.268C215.421 130.268 215.996 130.523 216.399 131.032C216.806 131.542 217.01 132.256 217.01 133.176C217.01 134.1 216.803 134.818 216.389 135.331C215.979 135.84 215.408 136.095 214.676 136.095ZM214.553 130.991C213.978 130.991 213.563 131.15 213.307 131.468C213.05 131.786 212.918 132.292 212.912 132.987V133.176C212.912 133.966 213.043 134.532 213.307 134.874C213.57 135.213 213.992 135.382 214.573 135.382C215.059 135.382 215.439 135.185 215.712 134.792C215.989 134.399 216.128 133.857 216.128 133.166C216.128 132.465 215.989 131.928 215.712 131.555C215.439 131.179 215.052 130.991 214.553 130.991ZM220.877 136.095C220.046 136.095 219.39 135.842 218.908 135.336C218.429 134.83 218.189 134.127 218.189 133.228C218.189 132.321 218.412 131.602 218.856 131.068C219.304 130.535 219.904 130.268 220.657 130.268C221.361 130.268 221.918 130.501 222.329 130.966C222.739 131.427 222.944 132.038 222.944 132.797V133.335H219.072C219.089 133.995 219.255 134.496 219.569 134.838C219.887 135.18 220.333 135.351 220.908 135.351C221.513 135.351 222.112 135.225 222.703 134.971V135.731C222.402 135.861 222.117 135.953 221.847 136.008C221.58 136.066 221.257 136.095 220.877 136.095ZM220.646 130.981C220.195 130.981 219.834 131.128 219.564 131.422C219.297 131.716 219.14 132.123 219.092 132.643H222.031C222.031 132.106 221.912 131.696 221.672 131.412C221.433 131.125 221.091 130.981 220.646 130.981ZM226.647 136.095C225.834 136.095 225.203 135.845 224.755 135.346C224.31 134.843 224.088 134.134 224.088 133.217C224.088 132.277 224.314 131.55 224.765 131.037C225.22 130.525 225.866 130.268 226.704 130.268C226.974 130.268 227.244 130.297 227.514 130.355C227.784 130.413 227.996 130.482 228.15 130.56L227.889 131.284C227.701 131.208 227.495 131.147 227.273 131.099C227.051 131.048 226.854 131.022 226.683 131.022C225.541 131.022 224.97 131.75 224.97 133.207C224.97 133.898 225.109 134.428 225.386 134.797C225.666 135.166 226.08 135.351 226.627 135.351C227.095 135.351 227.576 135.25 228.068 135.048V135.802C227.692 135.997 227.218 136.095 226.647 136.095ZM231.223 135.392C231.373 135.392 231.518 135.382 231.659 135.361C231.799 135.337 231.91 135.313 231.992 135.289V135.941C231.9 135.985 231.763 136.021 231.582 136.049C231.404 136.079 231.243 136.095 231.1 136.095C230.012 136.095 229.468 135.522 229.468 134.377V131.032H228.663V130.622L229.468 130.268L229.827 129.068H230.32V130.371H231.951V131.032H230.32V134.341C230.32 134.679 230.4 134.939 230.561 135.12C230.722 135.301 230.942 135.392 231.223 135.392ZM235.495 136.095C234.664 136.095 234.008 135.842 233.526 135.336C233.047 134.83 232.808 134.127 232.808 133.228C232.808 132.321 233.03 131.602 233.474 131.068C233.922 130.535 234.522 130.268 235.275 130.268C235.979 130.268 236.536 130.501 236.947 130.966C237.357 131.427 237.562 132.038 237.562 132.797V133.335H233.69C233.707 133.995 233.873 134.496 234.187 134.838C234.505 135.18 234.951 135.351 235.526 135.351C236.131 135.351 236.73 135.225 237.321 134.971V135.731C237.02 135.861 236.735 135.953 236.465 136.008C236.198 136.066 235.875 136.095 235.495 136.095ZM235.264 130.981C234.813 130.981 234.452 131.128 234.182 131.422C233.915 131.716 233.758 132.123 233.71 132.643H236.649C236.649 132.106 236.53 131.696 236.29 131.412C236.051 131.125 235.709 130.981 235.264 130.981ZM242.845 135.238H242.799C242.406 135.809 241.818 136.095 241.035 136.095C240.299 136.095 239.727 135.843 239.316 135.341C238.909 134.838 238.706 134.123 238.706 133.197C238.706 132.27 238.911 131.55 239.322 131.037C239.732 130.525 240.303 130.268 241.035 130.268C241.797 130.268 242.382 130.545 242.789 131.099H242.855L242.82 130.694L242.799 130.299V128.011H243.65V135.992H242.958L242.845 135.238ZM241.142 135.382C241.724 135.382 242.144 135.225 242.404 134.91C242.667 134.592 242.799 134.081 242.799 133.376V133.197C242.799 132.4 242.666 131.832 242.399 131.494C242.136 131.152 241.713 130.981 241.132 130.981C240.633 130.981 240.25 131.176 239.983 131.566C239.72 131.952 239.588 132.499 239.588 133.207C239.588 133.925 239.72 134.467 239.983 134.833C240.246 135.199 240.633 135.382 241.142 135.382ZM246.354 134.771L246.43 134.889C246.342 135.231 246.213 135.628 246.046 136.079C245.878 136.534 245.704 136.956 245.523 137.346H244.881C244.974 136.991 245.075 136.551 245.184 136.028C245.297 135.505 245.376 135.086 245.42 134.771H246.354ZM254.222 135.992L254.052 135.192H254.011C253.731 135.544 253.451 135.784 253.17 135.91C252.893 136.033 252.546 136.095 252.129 136.095C251.572 136.095 251.134 135.951 250.816 135.664C250.501 135.377 250.344 134.968 250.344 134.438C250.344 133.303 251.252 132.708 253.068 132.653L254.022 132.622V132.274C254.022 131.832 253.926 131.508 253.734 131.299C253.546 131.087 253.244 130.981 252.827 130.981C252.358 130.981 251.828 131.125 251.236 131.412L250.975 130.76C251.252 130.61 251.554 130.492 251.883 130.407C252.214 130.321 252.546 130.278 252.878 130.278C253.548 130.278 254.044 130.427 254.365 130.725C254.69 131.022 254.853 131.499 254.853 132.156V135.992H254.222ZM252.298 135.392C252.828 135.392 253.244 135.247 253.545 134.956C253.849 134.665 254.001 134.259 254.001 133.735V133.228L253.15 133.263C252.473 133.287 251.984 133.393 251.683 133.581C251.385 133.766 251.236 134.055 251.236 134.448C251.236 134.756 251.329 134.99 251.513 135.151C251.702 135.312 251.963 135.392 252.298 135.392ZM260.459 135.992V132.356C260.459 131.897 260.354 131.555 260.146 131.33C259.937 131.104 259.611 130.991 259.166 130.991C258.578 130.991 258.147 131.15 257.874 131.468C257.6 131.786 257.463 132.311 257.463 133.043V135.992H256.612V130.371H257.304L257.443 131.14H257.484C257.658 130.863 257.903 130.649 258.217 130.499C258.532 130.345 258.882 130.268 259.269 130.268C259.946 130.268 260.455 130.432 260.797 130.76C261.139 131.085 261.31 131.607 261.31 132.325V135.992H260.459ZM266.891 135.238H266.844C266.451 135.809 265.863 136.095 265.08 136.095C264.345 136.095 263.772 135.843 263.362 135.341C262.955 134.838 262.751 134.123 262.751 133.197C262.751 132.27 262.957 131.55 263.367 131.037C263.777 130.525 264.348 130.268 265.08 130.268C265.843 130.268 266.427 130.545 266.834 131.099H266.901L266.865 130.694L266.844 130.299V128.011H267.696V135.992H267.003L266.891 135.238ZM265.188 135.382C265.769 135.382 266.19 135.225 266.449 134.91C266.713 134.592 266.844 134.081 266.844 133.376V133.197C266.844 132.4 266.711 131.832 266.444 131.494C266.181 131.152 265.759 130.981 265.177 130.981C264.678 130.981 264.295 131.176 264.029 131.566C263.765 131.952 263.634 132.499 263.634 133.207C263.634 133.925 263.765 134.467 264.029 134.833C264.292 135.199 264.678 135.382 265.188 135.382ZM274.051 135.392C274.201 135.392 274.347 135.382 274.487 135.361C274.627 135.337 274.738 135.313 274.82 135.289V135.941C274.728 135.985 274.591 136.021 274.41 136.049C274.232 136.079 274.071 136.095 273.928 136.095C272.84 136.095 272.297 135.522 272.297 134.377V131.032H271.491V130.622L272.297 130.268L272.656 129.068H273.148V130.371H274.779V131.032H273.148V134.341C273.148 134.679 273.228 134.939 273.389 135.12C273.55 135.301 273.77 135.392 274.051 135.392ZM279.796 135.992V132.356C279.796 131.897 279.691 131.555 279.483 131.33C279.274 131.104 278.947 130.991 278.503 130.991C277.911 130.991 277.479 131.152 277.205 131.473C276.935 131.795 276.8 132.321 276.8 133.053V135.992H275.949V128.011H276.8V130.427C276.8 130.718 276.786 130.959 276.759 131.15H276.81C276.978 130.88 277.216 130.668 277.523 130.514C277.834 130.357 278.188 130.278 278.585 130.278C279.272 130.278 279.787 130.442 280.129 130.771C280.474 131.096 280.647 131.614 280.647 132.325V135.992H279.796ZM284.776 136.095C283.945 136.095 283.288 135.842 282.806 135.336C282.328 134.83 282.088 134.127 282.088 133.228C282.088 132.321 282.31 131.602 282.755 131.068C283.203 130.535 283.803 130.268 284.555 130.268C285.26 130.268 285.817 130.501 286.227 130.966C286.638 131.427 286.843 132.038 286.843 132.797V133.335H282.97C282.988 133.995 283.153 134.496 283.468 134.838C283.786 135.18 284.232 135.351 284.807 135.351C285.412 135.351 286.01 135.225 286.602 134.971V135.731C286.301 135.861 286.015 135.953 285.745 136.008C285.479 136.066 285.155 136.095 284.776 136.095ZM284.545 130.981C284.094 130.981 283.733 131.128 283.463 131.422C283.196 131.716 283.039 132.123 282.991 132.643H285.93C285.93 132.106 285.81 131.696 285.571 131.412C285.332 131.125 284.99 130.981 284.545 130.981ZM41.5011 149.992L40.4702 146.694C40.4052 146.492 40.2838 146.034 40.106 145.32H40.065C39.9282 145.918 39.8085 146.38 39.7059 146.704L38.6442 149.992H37.6594L36.1258 144.371H37.0183C37.3807 145.783 37.656 146.858 37.844 147.597C38.0355 148.335 38.145 148.833 38.1723 149.089H38.2133C38.251 148.895 38.3108 148.643 38.3929 148.335C38.4783 148.024 38.5519 147.778 38.6134 147.597L39.6444 144.371H40.5676L41.5729 147.597C41.7644 148.185 41.8943 148.679 41.9627 149.079H42.0038C42.0174 148.956 42.0534 148.766 42.1115 148.51C42.173 148.253 42.5304 146.874 43.1835 144.371H44.0657L42.5116 149.992H41.5011ZM47.4612 150.095C46.6302 150.095 45.9737 149.842 45.4916 149.336C45.0129 148.83 44.7735 148.127 44.7735 147.228C44.7735 146.321 44.9958 145.602 45.4403 145.068C45.8882 144.535 46.4883 144.268 47.2406 144.268C47.945 144.268 48.5024 144.501 48.9127 144.966C49.323 145.427 49.5282 146.038 49.5282 146.797V147.335H45.6557C45.6728 147.995 45.8387 148.496 46.1532 148.838C46.4712 149.18 46.9175 149.351 47.4919 149.351C48.0972 149.351 48.6956 149.225 49.2871 148.971V149.731C48.9862 149.861 48.7007 149.953 48.4306 150.008C48.1639 150.066 47.8407 150.095 47.4612 150.095ZM47.2304 144.981C46.779 144.981 46.4182 145.128 46.1481 145.422C45.8814 145.716 45.7241 146.123 45.6762 146.643H48.6152C48.6152 146.106 48.4955 145.696 48.2562 145.412C48.0168 145.125 47.6749 144.981 47.2304 144.981ZM53.6007 144.278C54.3393 144.278 54.9121 144.531 55.319 145.037C55.7293 145.54 55.9345 146.253 55.9345 147.176C55.9345 148.1 55.7276 148.818 55.3139 149.331C54.9035 149.84 54.3325 150.095 53.6007 150.095C53.2349 150.095 52.8998 150.028 52.5954 149.895C52.2945 149.758 52.0415 149.549 51.8363 149.269H51.7748L51.5952 149.992H50.9849V142.011H51.8363V143.95C51.8363 144.384 51.8226 144.774 51.7953 145.12H51.8363C52.233 144.559 52.8211 144.278 53.6007 144.278ZM53.4776 144.991C52.8963 144.991 52.4775 145.159 52.221 145.494C51.9645 145.826 51.8363 146.386 51.8363 147.176C51.8363 147.966 51.968 148.532 52.2313 148.874C52.4946 149.213 52.9169 149.382 53.4982 149.382C54.0213 149.382 54.4111 149.192 54.6676 148.812C54.9241 148.43 55.0523 147.881 55.0523 147.166C55.0523 146.434 54.9241 145.889 54.6676 145.53C54.4111 145.171 54.0145 144.991 53.4776 144.991ZM61.0534 148.459C61.0534 148.982 60.8585 149.385 60.4686 149.669C60.0788 149.953 59.5317 150.095 58.8273 150.095C58.0819 150.095 57.5006 149.977 57.0834 149.741V148.951C57.3536 149.088 57.6425 149.195 57.9502 149.274C58.2614 149.353 58.5606 149.392 58.8478 149.392C59.2924 149.392 59.6343 149.322 59.8737 149.182C60.113 149.038 60.2327 148.821 60.2327 148.53C60.2327 148.312 60.137 148.125 59.9455 147.971C59.7574 147.814 59.3881 147.629 58.8376 147.417C58.3144 147.222 57.9417 147.053 57.7194 146.91C57.5006 146.763 57.3365 146.597 57.227 146.412C57.121 146.227 57.068 146.007 57.068 145.75C57.068 145.292 57.2544 144.931 57.6271 144.668C57.9998 144.401 58.511 144.268 59.1607 144.268C59.766 144.268 60.3575 144.391 60.9354 144.637L60.6328 145.33C60.0686 145.097 59.5574 144.981 59.0992 144.981C58.6957 144.981 58.3913 145.044 58.1862 145.171C57.981 145.297 57.8784 145.472 57.8784 145.694C57.8784 145.844 57.916 145.973 57.9913 146.079C58.0699 146.185 58.1947 146.286 58.3657 146.381C58.5367 146.477 58.8649 146.616 59.3505 146.797C60.0173 147.04 60.4669 147.284 60.6995 147.53C60.9354 147.776 61.0534 148.086 61.0534 148.459ZM63.2948 149.992H62.4434V144.371H63.2948V149.992ZM62.3716 142.847C62.3716 142.652 62.4194 142.51 62.5152 142.422C62.6109 142.329 62.7306 142.283 62.8742 142.283C63.011 142.283 63.129 142.329 63.2281 142.422C63.3273 142.514 63.3769 142.656 63.3769 142.847C63.3769 143.039 63.3273 143.182 63.2281 143.278C63.129 143.37 63.011 143.417 62.8742 143.417C62.7306 143.417 62.6109 143.37 62.5152 143.278C62.4194 143.182 62.3716 143.039 62.3716 142.847ZM66.916 149.392C67.0664 149.392 67.2117 149.382 67.3519 149.361C67.4921 149.337 67.6033 149.313 67.6853 149.289V149.941C67.593 149.985 67.4562 150.021 67.275 150.049C67.0972 150.079 66.9365 150.095 66.7929 150.095C65.7055 150.095 65.1618 149.522 65.1618 148.377V145.032H64.3565V144.622L65.1618 144.268L65.5208 143.068H66.0132V144.371H67.6443V145.032H66.0132V148.341C66.0132 148.679 66.0936 148.939 66.2543 149.12C66.415 149.301 66.6356 149.392 66.916 149.392ZM71.1885 150.095C70.3576 150.095 69.7011 149.842 69.2189 149.336C68.7402 148.83 68.5009 148.127 68.5009 147.228C68.5009 146.321 68.7231 145.602 69.1677 145.068C69.6156 144.535 70.2157 144.268 70.968 144.268C71.6724 144.268 72.2297 144.501 72.6401 144.966C73.0504 145.427 73.2556 146.038 73.2556 146.797V147.335H69.3831C69.4002 147.995 69.566 148.496 69.8806 148.838C70.1986 149.18 70.6448 149.351 71.2193 149.351C71.8245 149.351 72.4229 149.225 73.0145 148.971V149.731C72.7136 149.861 72.4281 149.953 72.1579 150.008C71.8912 150.066 71.5681 150.095 71.1885 150.095ZM70.9577 144.981C70.5064 144.981 70.1456 145.128 69.8755 145.422C69.6088 145.716 69.4515 146.123 69.4036 146.643H72.3426C72.3426 146.106 72.2229 145.696 71.9835 145.412C71.7442 145.125 71.4022 144.981 70.9577 144.981ZM82.0315 149.992L81.0006 146.694C80.9356 146.492 80.8142 146.034 80.6364 145.32H80.5954C80.4586 145.918 80.3389 146.38 80.2363 146.704L79.1746 149.992H78.1898L76.6562 144.371H77.5487C77.9111 145.783 78.1864 146.858 78.3744 147.597C78.5659 148.335 78.6754 148.833 78.7027 149.089H78.7437C78.7814 148.895 78.8412 148.643 78.9233 148.335C79.0088 148.024 79.0823 147.778 79.1438 147.597L80.1748 144.371H81.098L82.1033 147.597C82.2948 148.185 82.4248 148.679 82.4931 149.079H82.5342C82.5479 148.956 82.5838 148.766 82.6419 148.51C82.7034 148.253 83.0608 146.874 83.7139 144.371H84.5961L83.042 149.992H82.0315ZM89.0738 149.992L88.9046 149.192H88.8635C88.5831 149.544 88.3027 149.784 88.0223 149.91C87.7454 150.033 87.3983 150.095 86.9811 150.095C86.4238 150.095 85.9861 149.951 85.6681 149.664C85.3535 149.377 85.1962 148.968 85.1962 148.438C85.1962 147.303 86.1041 146.708 87.9198 146.653L88.8738 146.622V146.274C88.8738 145.832 88.778 145.508 88.5866 145.299C88.3985 145.087 88.0959 144.981 87.6787 144.981C87.2102 144.981 86.6802 145.125 86.0887 145.412L85.8271 144.76C86.1041 144.61 86.4067 144.492 86.7349 144.407C87.0666 144.321 87.3983 144.278 87.73 144.278C88.4002 144.278 88.896 144.427 89.2174 144.725C89.5423 145.022 89.7047 145.499 89.7047 146.156V149.992H89.0738ZM87.1504 149.392C87.6804 149.392 88.0959 149.247 88.3968 148.956C88.7011 148.665 88.8533 148.259 88.8533 147.735V147.228L88.0018 147.263C87.3248 147.287 86.8358 147.393 86.5349 147.581C86.2374 147.766 86.0887 148.055 86.0887 148.448C86.0887 148.756 86.181 148.99 86.3656 149.151C86.5537 149.312 86.8153 149.392 87.1504 149.392ZM95.0903 148.459C95.0903 148.982 94.8954 149.385 94.5056 149.669C94.1158 149.953 93.5686 150.095 92.8642 150.095C92.1188 150.095 91.5375 149.977 91.1203 149.741V148.951C91.3905 149.088 91.6794 149.195 91.9872 149.274C92.2983 149.353 92.5975 149.392 92.8848 149.392C93.3293 149.392 93.6712 149.322 93.9106 149.182C94.15 149.038 94.2696 148.821 94.2696 148.53C94.2696 148.312 94.1739 148.125 93.9824 147.971C93.7943 147.814 93.425 147.629 92.8745 147.417C92.3513 147.222 91.9786 147.053 91.7564 146.91C91.5375 146.763 91.3734 146.597 91.264 146.412C91.158 146.227 91.105 146.007 91.105 145.75C91.105 145.292 91.2913 144.931 91.664 144.668C92.0367 144.401 92.548 144.268 93.1976 144.268C93.8029 144.268 94.3944 144.391 94.9723 144.637L94.6697 145.33C94.1055 145.097 93.5943 144.981 93.1361 144.981C92.7326 144.981 92.4283 145.044 92.2231 145.171C92.0179 145.297 91.9154 145.472 91.9154 145.694C91.9154 145.844 91.953 145.973 92.0282 146.079C92.1068 146.185 92.2317 146.286 92.4026 146.381C92.5736 146.477 92.9019 146.616 93.3874 146.797C94.0542 147.04 94.5039 147.284 94.7364 147.53C94.9723 147.776 95.0903 148.086 95.0903 148.459ZM103.035 149.238H102.989C102.596 149.809 102.008 150.095 101.225 150.095C100.49 150.095 99.9168 149.843 99.5065 149.341C99.0996 148.838 98.8961 148.123 98.8961 147.197C98.8961 146.27 99.1013 145.55 99.5116 145.037C99.9219 144.525 100.493 144.268 101.225 144.268C101.987 144.268 102.572 144.545 102.979 145.099H103.046L103.01 144.694L102.989 144.299V142.011H103.841V149.992H103.148L103.035 149.238ZM101.332 149.382C101.914 149.382 102.334 149.225 102.594 148.91C102.858 148.592 102.989 148.081 102.989 147.376V147.197C102.989 146.4 102.856 145.832 102.589 145.494C102.326 145.152 101.903 144.981 101.322 144.981C100.823 144.981 100.44 145.176 100.173 145.566C99.91 145.952 99.7783 146.499 99.7783 147.207C99.7783 147.925 99.91 148.467 100.173 148.833C100.437 149.199 100.823 149.382 101.332 149.382ZM108.026 150.095C107.195 150.095 106.539 149.842 106.056 149.336C105.578 148.83 105.338 148.127 105.338 147.228C105.338 146.321 105.561 145.602 106.005 145.068C106.453 144.535 107.053 144.268 107.805 144.268C108.51 144.268 109.067 144.501 109.478 144.966C109.888 145.427 110.093 146.038 110.093 146.797V147.335H106.221C106.238 147.995 106.403 148.496 106.718 148.838C107.036 149.18 107.482 149.351 108.057 149.351C108.662 149.351 109.26 149.225 109.852 148.971V149.731C109.551 149.861 109.266 149.953 108.995 150.008C108.729 150.066 108.406 150.095 108.026 150.095ZM107.795 144.981C107.344 144.981 106.983 145.128 106.713 145.422C106.446 145.716 106.289 146.123 106.241 146.643H109.18C109.18 146.106 109.06 145.696 108.821 145.412C108.582 145.125 108.24 144.981 107.795 144.981ZM112.401 149.992H111.55V142.011H112.401V149.992ZM115.058 149.992H114.207V144.371H115.058V149.992ZM114.135 142.847C114.135 142.652 114.183 142.51 114.278 142.422C114.374 142.329 114.494 142.283 114.637 142.283C114.774 142.283 114.892 142.329 114.991 142.422C115.09 142.514 115.14 142.656 115.14 142.847C115.14 143.039 115.09 143.182 114.991 143.278C114.892 143.37 114.774 143.417 114.637 143.417C114.494 143.417 114.374 143.37 114.278 143.278C114.183 143.182 114.135 143.039 114.135 142.847ZM118.094 149.992L115.961 144.371H116.874L118.084 147.705C118.358 148.484 118.518 148.99 118.566 149.223H118.607C118.645 149.042 118.763 148.667 118.961 148.1C119.163 147.528 119.613 146.286 120.31 144.371H121.223L119.09 149.992H118.094ZM124.501 150.095C123.67 150.095 123.013 149.842 122.531 149.336C122.052 148.83 121.813 148.127 121.813 147.228C121.813 146.321 122.035 145.602 122.48 145.068C122.928 144.535 123.528 144.268 124.28 144.268C124.985 144.268 125.542 144.501 125.952 144.966C126.363 145.427 126.568 146.038 126.568 146.797V147.335H122.695C122.712 147.995 122.878 148.496 123.193 148.838C123.511 149.18 123.957 149.351 124.532 149.351C125.137 149.351 125.735 149.225 126.327 148.971V149.731C126.026 149.861 125.74 149.953 125.47 150.008C125.203 150.066 124.88 150.095 124.501 150.095ZM124.27 144.981C123.819 144.981 123.458 145.128 123.188 145.422C122.921 145.716 122.764 146.123 122.716 146.643H125.655C125.655 146.106 125.535 145.696 125.296 145.412C125.056 145.125 124.714 144.981 124.27 144.981ZM130.589 144.268C130.839 144.268 131.063 144.289 131.261 144.33L131.143 145.12C130.91 145.068 130.705 145.043 130.527 145.043C130.073 145.043 129.683 145.227 129.358 145.597C129.037 145.966 128.876 146.426 128.876 146.976V149.992H128.024V144.371H128.727L128.825 145.412H128.866C129.074 145.046 129.326 144.764 129.62 144.566C129.914 144.367 130.237 144.268 130.589 144.268ZM134.687 150.095C133.856 150.095 133.2 149.842 132.718 149.336C132.239 148.83 132 148.127 132 147.228C132 146.321 132.222 145.602 132.666 145.068C133.114 144.535 133.714 144.268 134.467 144.268C135.171 144.268 135.728 144.501 136.139 144.966C136.549 145.427 136.754 146.038 136.754 146.797V147.335H132.882C132.899 147.995 133.065 148.496 133.379 148.838C133.697 149.18 134.144 149.351 134.718 149.351C135.323 149.351 135.922 149.225 136.513 148.971V149.731C136.212 149.861 135.927 149.953 135.657 150.008C135.39 150.066 135.067 150.095 134.687 150.095ZM134.456 144.981C134.005 144.981 133.644 145.128 133.374 145.422C133.107 145.716 132.95 146.123 132.902 146.643H135.841C135.841 146.106 135.722 145.696 135.482 145.412C135.243 145.125 134.901 144.981 134.456 144.981ZM142.037 149.238H141.991C141.598 149.809 141.01 150.095 140.227 150.095C139.491 150.095 138.919 149.843 138.508 149.341C138.101 148.838 137.898 148.123 137.898 147.197C137.898 146.27 138.103 145.55 138.514 145.037C138.924 144.525 139.495 144.268 140.227 144.268C140.989 144.268 141.574 144.545 141.981 145.099H142.048L142.012 144.694L141.991 144.299V142.011H142.843V149.992H142.15L142.037 149.238ZM140.334 149.382C140.916 149.382 141.336 149.225 141.596 148.91C141.859 148.592 141.991 148.081 141.991 147.376V147.197C141.991 146.4 141.858 145.832 141.591 145.494C141.328 145.152 140.905 144.981 140.324 144.981C139.825 144.981 139.442 145.176 139.175 145.566C138.912 145.952 138.78 146.499 138.78 147.207C138.78 147.925 138.912 148.467 139.175 148.833C139.438 149.199 139.825 149.382 140.334 149.382ZM148.233 149.992H147.382V144.371H148.233V149.992ZM147.31 142.847C147.31 142.652 147.358 142.51 147.454 142.422C147.549 142.329 147.669 142.283 147.813 142.283C147.949 142.283 148.067 142.329 148.167 142.422C148.266 142.514 148.315 142.656 148.315 142.847C148.315 143.039 148.266 143.182 148.167 143.278C148.067 143.37 147.949 143.417 147.813 143.417C147.669 143.417 147.549 143.37 147.454 143.278C147.358 143.182 147.31 143.039 147.31 142.847ZM153.886 149.992V146.356C153.886 145.897 153.781 145.555 153.573 145.33C153.364 145.104 153.038 144.991 152.593 144.991C152.005 144.991 151.574 145.15 151.3 145.468C151.027 145.786 150.89 146.311 150.89 147.043V149.992H150.039V144.371H150.731L150.87 145.14H150.911C151.085 144.863 151.33 144.649 151.644 144.499C151.959 144.345 152.309 144.268 152.696 144.268C153.373 144.268 153.882 144.432 154.224 144.76C154.566 145.085 154.737 145.607 154.737 146.325V149.992H153.886ZM158.738 150.095C157.924 150.095 157.293 149.845 156.845 149.346C156.401 148.843 156.178 148.134 156.178 147.217C156.178 146.277 156.404 145.55 156.855 145.037C157.31 144.525 157.956 144.268 158.794 144.268C159.064 144.268 159.334 144.297 159.605 144.355C159.875 144.413 160.087 144.482 160.241 144.56L159.979 145.284C159.791 145.208 159.586 145.147 159.363 145.099C159.141 145.048 158.945 145.022 158.774 145.022C157.632 145.022 157.06 145.75 157.06 147.207C157.06 147.898 157.199 148.428 157.476 148.797C157.756 149.166 158.17 149.351 158.717 149.351C159.186 149.351 159.666 149.25 160.158 149.048V149.802C159.782 149.997 159.309 150.095 158.738 150.095ZM166.349 147.176C166.349 148.093 166.119 148.809 165.657 149.325C165.195 149.838 164.558 150.095 163.744 150.095C163.241 150.095 162.795 149.977 162.405 149.741C162.015 149.505 161.714 149.166 161.502 148.725C161.29 148.284 161.184 147.768 161.184 147.176C161.184 146.26 161.413 145.547 161.872 145.037C162.33 144.525 162.966 144.268 163.78 144.268C164.566 144.268 165.19 144.53 165.652 145.053C166.117 145.576 166.349 146.284 166.349 147.176ZM162.067 147.176C162.067 147.894 162.21 148.441 162.497 148.818C162.785 149.194 163.207 149.382 163.764 149.382C164.322 149.382 164.744 149.195 165.031 148.823C165.322 148.447 165.467 147.898 165.467 147.176C165.467 146.462 165.322 145.92 165.031 145.55C164.744 145.178 164.318 144.991 163.754 144.991C163.197 144.991 162.776 145.174 162.492 145.54C162.208 145.906 162.067 146.451 162.067 147.176ZM175.012 149.992V146.335C175.012 145.887 174.917 145.552 174.725 145.33C174.534 145.104 174.236 144.991 173.833 144.991C173.303 144.991 172.911 145.143 172.658 145.448C172.405 145.752 172.279 146.221 172.279 146.853V149.992H171.427V146.335C171.427 145.887 171.331 145.552 171.14 145.33C170.948 145.104 170.649 144.991 170.242 144.991C169.709 144.991 169.317 145.152 169.068 145.473C168.822 145.791 168.698 146.315 168.698 147.043V149.992H167.847V144.371H168.539L168.678 145.14H168.719C168.88 144.866 169.105 144.653 169.396 144.499C169.69 144.345 170.018 144.268 170.381 144.268C171.26 144.268 171.834 144.586 172.104 145.222H172.145C172.313 144.928 172.556 144.696 172.874 144.525C173.192 144.354 173.554 144.268 173.961 144.268C174.597 144.268 175.072 144.432 175.387 144.76C175.705 145.085 175.864 145.607 175.864 146.325V149.992H175.012ZM180.239 150.095C179.873 150.095 179.538 150.028 179.234 149.895C178.933 149.758 178.68 149.549 178.475 149.269H178.413C178.454 149.597 178.475 149.908 178.475 150.202V152.516H177.623V144.371H178.316L178.434 145.14H178.475C178.693 144.832 178.948 144.61 179.239 144.473C179.529 144.336 179.863 144.268 180.239 144.268C180.984 144.268 181.559 144.523 181.962 145.032C182.369 145.542 182.573 146.256 182.573 147.176C182.573 148.1 182.366 148.818 181.952 149.331C181.542 149.84 180.971 150.095 180.239 150.095ZM180.116 144.991C179.541 144.991 179.126 145.15 178.87 145.468C178.613 145.786 178.481 146.292 178.475 146.987V147.176C178.475 147.966 178.606 148.532 178.87 148.874C179.133 149.213 179.555 149.382 180.136 149.382C180.622 149.382 181.002 149.185 181.275 148.792C181.552 148.399 181.691 147.857 181.691 147.166C181.691 146.465 181.552 145.928 181.275 145.555C181.002 145.179 180.615 144.991 180.116 144.991ZM184.917 149.992H184.065V142.011H184.917V149.992ZM189.097 150.095C188.266 150.095 187.61 149.842 187.127 149.336C186.649 148.83 186.409 148.127 186.409 147.228C186.409 146.321 186.632 145.602 187.076 145.068C187.524 144.535 188.124 144.268 188.876 144.268C189.581 144.268 190.138 144.501 190.549 144.966C190.959 145.427 191.164 146.038 191.164 146.797V147.335H187.292C187.309 147.995 187.475 148.496 187.789 148.838C188.107 149.18 188.553 149.351 189.128 149.351C189.733 149.351 190.331 149.225 190.923 148.971V149.731C190.622 149.861 190.337 149.953 190.066 150.008C189.8 150.066 189.477 150.095 189.097 150.095ZM188.866 144.981C188.415 144.981 188.054 145.128 187.784 145.422C187.517 145.716 187.36 146.123 187.312 146.643H190.251C190.251 146.106 190.131 145.696 189.892 145.412C189.653 145.125 189.311 144.981 188.866 144.981ZM194.436 149.392C194.587 149.392 194.732 149.382 194.872 149.361C195.013 149.337 195.124 149.313 195.206 149.289V149.941C195.114 149.985 194.977 150.021 194.796 150.049C194.618 150.079 194.457 150.095 194.313 150.095C193.226 150.095 192.682 149.522 192.682 148.377V145.032H191.877V144.622L192.682 144.268L193.041 143.068H193.534V144.371H195.165V145.032H193.534V148.341C193.534 148.679 193.614 148.939 193.775 149.12C193.936 149.301 194.156 149.392 194.436 149.392ZM198.709 150.095C197.878 150.095 197.222 149.842 196.739 149.336C196.261 148.83 196.021 148.127 196.021 147.228C196.021 146.321 196.244 145.602 196.688 145.068C197.136 144.535 197.736 144.268 198.488 144.268C199.193 144.268 199.75 144.501 200.161 144.966C200.571 145.427 200.776 146.038 200.776 146.797V147.335H196.904C196.921 147.995 197.087 148.496 197.401 148.838C197.719 149.18 198.165 149.351 198.74 149.351C199.345 149.351 199.943 149.225 200.535 148.971V149.731C200.234 149.861 199.949 149.953 199.678 150.008C199.412 150.066 199.089 150.095 198.709 150.095ZM198.478 144.981C198.027 144.981 197.666 145.128 197.396 145.422C197.129 145.716 196.972 146.123 196.924 146.643H199.863C199.863 146.106 199.743 145.696 199.504 145.412C199.265 145.125 198.923 144.981 198.478 144.981ZM202.11 149.448C202.11 149.219 202.161 149.047 202.264 148.93C202.37 148.811 202.52 148.751 202.715 148.751C202.913 148.751 203.067 148.811 203.177 148.93C203.289 149.047 203.346 149.219 203.346 149.448C203.346 149.671 203.289 149.842 203.177 149.961C203.064 150.081 202.91 150.141 202.715 150.141C202.54 150.141 202.395 150.088 202.279 149.982C202.166 149.873 202.11 149.695 202.11 149.448ZM208.762 149.992H207.89V142.493H212.07V143.268H208.762V146.012H211.87V146.786H208.762V149.992ZM218.041 147.176C218.041 148.093 217.81 148.809 217.348 149.325C216.887 149.838 216.249 150.095 215.435 150.095C214.932 150.095 214.486 149.977 214.096 149.741C213.707 149.505 213.406 149.166 213.194 148.725C212.982 148.284 212.876 147.768 212.876 147.176C212.876 146.26 213.105 145.547 213.563 145.037C214.021 144.525 214.657 144.268 215.471 144.268C216.258 144.268 216.882 144.53 217.343 145.053C217.808 145.576 218.041 146.284 218.041 147.176ZM213.758 147.176C213.758 147.894 213.902 148.441 214.189 148.818C214.476 149.194 214.898 149.382 215.456 149.382C216.013 149.382 216.435 149.195 216.723 148.823C217.013 148.447 217.159 147.898 217.159 147.176C217.159 146.462 217.013 145.92 216.723 145.55C216.435 145.178 216.01 144.991 215.445 144.991C214.888 144.991 214.467 145.174 214.184 145.54C213.9 145.906 213.758 146.451 213.758 147.176ZM222.103 144.268C222.353 144.268 222.577 144.289 222.775 144.33L222.657 145.12C222.424 145.068 222.219 145.043 222.041 145.043C221.587 145.043 221.197 145.227 220.872 145.597C220.551 145.966 220.39 146.426 220.39 146.976V149.992H219.538V144.371H220.241L220.339 145.412H220.38C220.588 145.046 220.84 144.764 221.134 144.566C221.428 144.367 221.751 144.268 222.103 144.268ZM228.371 149.392C228.521 149.392 228.667 149.382 228.807 149.361C228.947 149.337 229.058 149.313 229.14 149.289V149.941C229.048 149.985 228.911 150.021 228.73 150.049C228.552 150.079 228.391 150.095 228.248 150.095C227.16 150.095 226.617 149.522 226.617 148.377V145.032H225.811V144.622L226.617 144.268L226.976 143.068H227.468V144.371H229.099V145.032H227.468V148.341C227.468 148.679 227.548 148.939 227.709 149.12C227.87 149.301 228.09 149.392 228.371 149.392ZM234.115 149.992V146.356C234.115 145.897 234.011 145.555 233.803 145.33C233.594 145.104 233.267 144.991 232.823 144.991C232.231 144.991 231.799 145.152 231.525 145.473C231.255 145.795 231.12 146.321 231.12 147.053V149.992H230.269V142.011H231.12V144.427C231.12 144.718 231.106 144.959 231.079 145.15H231.13C231.298 144.88 231.535 144.668 231.843 144.514C232.154 144.357 232.508 144.278 232.905 144.278C233.592 144.278 234.107 144.442 234.449 144.771C234.794 145.096 234.967 145.614 234.967 146.325V149.992H234.115ZM240.178 149.992L240.009 149.192H239.968C239.687 149.544 239.407 149.784 239.127 149.91C238.85 150.033 238.503 150.095 238.085 150.095C237.528 150.095 237.09 149.951 236.772 149.664C236.458 149.377 236.3 148.968 236.3 148.438C236.3 147.303 237.208 146.708 239.024 146.653L239.978 146.622V146.274C239.978 145.832 239.882 145.508 239.691 145.299C239.503 145.087 239.2 144.981 238.783 144.981C238.314 144.981 237.784 145.125 237.193 145.412L236.931 144.76C237.208 144.61 237.511 144.492 237.839 144.407C238.171 144.321 238.503 144.278 238.834 144.278C239.504 144.278 240 144.427 240.322 144.725C240.647 145.022 240.809 145.499 240.809 146.156V149.992H240.178ZM238.255 149.392C238.785 149.392 239.2 149.247 239.501 148.956C239.805 148.665 239.958 148.259 239.958 147.735V147.228L239.106 147.263C238.429 147.287 237.94 147.393 237.639 147.581C237.342 147.766 237.193 148.055 237.193 148.448C237.193 148.756 237.285 148.99 237.47 149.151C237.658 149.312 237.92 149.392 238.255 149.392ZM244.384 149.392C244.534 149.392 244.68 149.382 244.82 149.361C244.96 149.337 245.071 149.313 245.153 149.289V149.941C245.061 149.985 244.924 150.021 244.743 150.049C244.565 150.079 244.404 150.095 244.261 150.095C243.173 150.095 242.63 149.522 242.63 148.377V145.032H241.825V144.622L242.63 144.268L242.989 143.068H243.481V144.371H245.112V145.032H243.481V148.341C243.481 148.679 243.562 148.939 243.722 149.12C243.883 149.301 244.104 149.392 244.384 149.392ZM251.575 144.268C251.825 144.268 252.049 144.289 252.247 144.33L252.129 145.12C251.896 145.068 251.691 145.043 251.513 145.043C251.059 145.043 250.669 145.227 250.344 145.597C250.023 145.966 249.862 146.426 249.862 146.976V149.992H249.01V144.371H249.713L249.811 145.412H249.852C250.06 145.046 250.312 144.764 250.606 144.566C250.9 144.367 251.223 144.268 251.575 144.268ZM255.673 150.095C254.842 150.095 254.186 149.842 253.704 149.336C253.225 148.83 252.986 148.127 252.986 147.228C252.986 146.321 253.208 145.602 253.652 145.068C254.1 144.535 254.7 144.268 255.453 144.268C256.157 144.268 256.714 144.501 257.125 144.966C257.535 145.427 257.74 146.038 257.74 146.797V147.335H253.868C253.885 147.995 254.051 148.496 254.365 148.838C254.683 149.18 255.13 149.351 255.704 149.351C256.309 149.351 256.908 149.225 257.499 148.971V149.731C257.198 149.861 256.913 149.953 256.643 150.008C256.376 150.066 256.053 150.095 255.673 150.095ZM255.442 144.981C254.991 144.981 254.63 145.128 254.36 145.422C254.093 145.716 253.936 146.123 253.888 146.643H256.827C256.827 146.106 256.708 145.696 256.468 145.412C256.229 145.125 255.887 144.981 255.442 144.981ZM262.654 149.992L262.485 149.192H262.444C262.163 149.544 261.883 149.784 261.602 149.91C261.325 150.033 260.978 150.095 260.561 150.095C260.004 150.095 259.566 149.951 259.248 149.664C258.934 149.377 258.776 148.968 258.776 148.438C258.776 147.303 259.684 146.708 261.5 146.653L262.454 146.622V146.274C262.454 145.832 262.358 145.508 262.167 145.299C261.979 145.087 261.676 144.981 261.259 144.981C260.79 144.981 260.26 145.125 259.669 145.412L259.407 144.76C259.684 144.61 259.987 144.492 260.315 144.407C260.647 144.321 260.978 144.278 261.31 144.278C261.98 144.278 262.476 144.427 262.798 144.725C263.122 145.022 263.285 145.499 263.285 146.156V149.992H262.654ZM260.731 149.392C261.261 149.392 261.676 149.247 261.977 148.956C262.281 148.665 262.433 148.259 262.433 147.735V147.228L261.582 147.263C260.905 147.287 260.416 147.393 260.115 147.581C259.818 147.766 259.669 148.055 259.669 148.448C259.669 148.756 259.761 148.99 259.946 149.151C260.134 149.312 260.395 149.392 260.731 149.392ZM268.67 148.459C268.67 148.982 268.476 149.385 268.086 149.669C267.696 149.953 267.149 150.095 266.444 150.095C265.699 150.095 265.118 149.977 264.7 149.741V148.951C264.971 149.088 265.26 149.195 265.567 149.274C265.878 149.353 266.178 149.392 266.465 149.392C266.909 149.392 267.251 149.322 267.491 149.182C267.73 149.038 267.85 148.821 267.85 148.53C267.85 148.312 267.754 148.125 267.563 147.971C267.374 147.814 267.005 147.629 266.455 147.417C265.931 147.222 265.559 147.053 265.336 146.91C265.118 146.763 264.954 146.597 264.844 146.412C264.738 146.227 264.685 146.007 264.685 145.75C264.685 145.292 264.871 144.931 265.244 144.668C265.617 144.401 266.128 144.268 266.778 144.268C267.383 144.268 267.975 144.391 268.552 144.637L268.25 145.33C267.686 145.097 267.174 144.981 266.716 144.981C266.313 144.981 266.008 145.044 265.803 145.171C265.598 145.297 265.495 145.472 265.495 145.694C265.495 145.844 265.533 145.973 265.608 146.079C265.687 146.185 265.812 146.286 265.983 146.381C266.154 146.477 266.482 146.616 266.968 146.797C267.634 147.04 268.084 147.284 268.317 147.53C268.552 147.776 268.67 148.086 268.67 148.459ZM274.913 147.176C274.913 148.093 274.682 148.809 274.22 149.325C273.759 149.838 273.121 150.095 272.307 150.095C271.804 150.095 271.358 149.977 270.968 149.741C270.578 149.505 270.278 149.166 270.066 148.725C269.854 148.284 269.748 147.768 269.748 147.176C269.748 146.26 269.977 145.547 270.435 145.037C270.893 144.525 271.529 144.268 272.343 144.268C273.129 144.268 273.753 144.53 274.215 145.053C274.68 145.576 274.913 146.284 274.913 147.176ZM270.63 147.176C270.63 147.894 270.773 148.441 271.061 148.818C271.348 149.194 271.77 149.382 272.327 149.382C272.885 149.382 273.307 149.195 273.594 148.823C273.885 148.447 274.03 147.898 274.03 147.176C274.03 146.462 273.885 145.92 273.594 145.55C273.307 145.178 272.881 144.991 272.317 144.991C271.76 144.991 271.339 145.174 271.055 145.54C270.772 145.906 270.63 146.451 270.63 147.176ZM280.257 149.992V146.356C280.257 145.897 280.153 145.555 279.944 145.33C279.736 145.104 279.409 144.991 278.965 144.991C278.376 144.991 277.946 145.15 277.672 145.468C277.398 145.786 277.262 146.311 277.262 147.043V149.992H276.41V144.371H277.103L277.241 145.14H277.282C277.457 144.863 277.701 144.649 278.016 144.499C278.33 144.345 278.681 144.268 279.067 144.268C279.744 144.268 280.254 144.432 280.596 144.76C280.938 145.085 281.109 145.607 281.109 146.325V149.992H280.257ZM283.755 148.771L283.832 148.889C283.743 149.231 283.615 149.628 283.447 150.079C283.28 150.534 283.105 150.956 282.924 151.346H282.283C282.375 150.991 282.476 150.551 282.586 150.028C282.699 149.505 282.777 149.086 282.822 148.771H283.755ZM292.013 149.992V146.356C292.013 145.897 291.909 145.555 291.7 145.33C291.492 145.104 291.165 144.991 290.721 144.991C290.129 144.991 289.696 145.152 289.423 145.473C289.153 145.795 289.018 146.321 289.018 147.053V149.992H288.166V142.011H289.018V144.427C289.018 144.718 289.004 144.959 288.977 145.15H289.028C289.195 144.88 289.433 144.668 289.741 144.514C290.052 144.357 290.406 144.278 290.803 144.278C291.49 144.278 292.005 144.442 292.346 144.771C292.692 145.096 292.865 145.614 292.865 146.325V149.992H292.013ZM296.993 150.095C296.163 150.095 295.506 149.842 295.024 149.336C294.545 148.83 294.306 148.127 294.306 147.228C294.306 146.321 294.528 145.602 294.973 145.068C295.421 144.535 296.021 144.268 296.773 144.268C297.477 144.268 298.035 144.501 298.445 144.966C298.855 145.427 299.061 146.038 299.061 146.797V147.335H295.188C295.205 147.995 295.371 148.496 295.686 148.838C296.004 149.18 296.45 149.351 297.024 149.351C297.63 149.351 298.228 149.225 298.819 148.971V149.731C298.519 149.861 298.233 149.953 297.963 150.008C297.696 150.066 297.373 150.095 296.993 150.095ZM296.763 144.981C296.311 144.981 295.951 145.128 295.68 145.422C295.414 145.716 295.256 146.123 295.209 146.643H298.148C298.148 146.106 298.028 145.696 297.789 145.412C297.549 145.125 297.207 144.981 296.763 144.981ZM41.5011 163.992L40.4702 160.694C40.4052 160.492 40.2838 160.034 40.106 159.32H40.065C39.9282 159.918 39.8085 160.38 39.7059 160.704L38.6442 163.992H37.6594L36.1258 158.371H37.0183C37.3807 159.783 37.656 160.858 37.844 161.597C38.0355 162.335 38.145 162.833 38.1723 163.089H38.2133C38.251 162.895 38.3108 162.643 38.3929 162.335C38.4783 162.024 38.5519 161.778 38.6134 161.597L39.6444 158.371H40.5676L41.5729 161.597C41.7644 162.185 41.8943 162.679 41.9627 163.079H42.0038C42.0174 162.956 42.0534 162.766 42.1115 162.51C42.173 162.253 42.5304 160.874 43.1835 158.371H44.0657L42.5116 163.992H41.5011ZM48.5434 163.992L48.3742 163.192H48.3331C48.0527 163.544 47.7723 163.784 47.4919 163.91C47.215 164.033 46.8679 164.095 46.4507 164.095C45.8934 164.095 45.4557 163.951 45.1377 163.664C44.8231 163.377 44.6658 162.968 44.6658 162.438C44.6658 161.303 45.5736 160.708 47.3894 160.653L48.3434 160.622V160.274C48.3434 159.832 48.2476 159.508 48.0561 159.299C47.8681 159.087 47.5655 158.981 47.1483 158.981C46.6798 158.981 46.1498 159.125 45.5583 159.412L45.2967 158.76C45.5736 158.61 45.8763 158.492 46.2045 158.407C46.5362 158.321 46.8679 158.278 47.1996 158.278C47.8698 158.278 48.3656 158.427 48.687 158.725C49.0119 159.022 49.1743 159.499 49.1743 160.156V163.992H48.5434ZM46.62 163.392C47.15 163.392 47.5655 163.247 47.8664 162.956C48.1707 162.665 48.3229 162.259 48.3229 161.735V161.228L47.4714 161.263C46.7944 161.287 46.3054 161.393 46.0045 161.581C45.707 161.766 45.5583 162.055 45.5583 162.448C45.5583 162.756 45.6506 162.99 45.8352 163.151C46.0233 163.312 46.2849 163.392 46.62 163.392ZM54.7804 163.992V160.356C54.7804 159.897 54.6761 159.555 54.4676 159.33C54.259 159.104 53.9324 158.991 53.4879 158.991C52.8998 158.991 52.4689 159.15 52.1954 159.468C51.9218 159.786 51.785 160.311 51.785 161.043V163.992H50.9336V158.371H51.626L51.7645 159.14H51.8055C51.9799 158.863 52.2244 158.649 52.539 158.499C52.8536 158.345 53.2041 158.268 53.5905 158.268C54.2675 158.268 54.777 158.432 55.119 158.76C55.4609 159.085 55.6319 159.607 55.6319 160.325V163.992H54.7804ZM59.2018 163.392C59.3522 163.392 59.4975 163.382 59.6377 163.361C59.7779 163.337 59.8891 163.313 59.9711 163.289V163.941C59.8788 163.985 59.742 164.021 59.5608 164.049C59.383 164.079 59.2223 164.095 59.0787 164.095C57.9913 164.095 57.4476 163.522 57.4476 162.377V159.032H56.6423V158.622L57.4476 158.268L57.8066 157.068H58.299V158.371H59.9301V159.032H58.299V162.341C58.299 162.679 58.3794 162.939 58.5401 163.12C58.7008 163.301 58.9214 163.392 59.2018 163.392ZM64.7258 162.459C64.7258 162.982 64.5309 163.385 64.1411 163.669C63.7513 163.953 63.2042 164.095 62.4998 164.095C61.7543 164.095 61.173 163.977 60.7559 163.741V162.951C61.026 163.088 61.315 163.195 61.6227 163.274C61.9339 163.353 62.2331 163.392 62.5203 163.392C62.9648 163.392 63.3068 163.322 63.5461 163.182C63.7855 163.038 63.9052 162.821 63.9052 162.53C63.9052 162.312 63.8094 162.125 63.6179 161.971C63.4299 161.814 63.0606 161.629 62.51 161.417C61.9869 161.222 61.6142 161.053 61.3919 160.91C61.173 160.763 61.0089 160.597 60.8995 160.412C60.7935 160.227 60.7405 160.007 60.7405 159.75C60.7405 159.292 60.9268 158.931 61.2996 158.668C61.6723 158.401 62.1835 158.268 62.8332 158.268C63.4384 158.268 64.03 158.391 64.6079 158.637L64.3052 159.33C63.741 159.097 63.2298 158.981 62.7716 158.981C62.3681 158.981 62.0638 159.044 61.8586 159.171C61.6535 159.297 61.5509 159.472 61.5509 159.694C61.5509 159.844 61.5885 159.973 61.6637 160.079C61.7424 160.185 61.8672 160.286 62.0382 160.381C62.2091 160.477 62.5374 160.616 63.023 160.797C63.6897 161.04 64.1394 161.284 64.3719 161.53C64.6079 161.776 64.7258 162.086 64.7258 162.459ZM70.6602 163.392C70.8107 163.392 70.956 163.382 71.0962 163.361C71.2364 163.337 71.3475 163.313 71.4296 163.289V163.941C71.3373 163.985 71.2005 164.021 71.0193 164.049C70.8415 164.079 70.6808 164.095 70.5371 164.095C69.4498 164.095 68.9061 163.522 68.9061 162.377V159.032H68.1008V158.622L68.9061 158.268L69.2651 157.068H69.7575V158.371H71.3886V159.032H69.7575V162.341C69.7575 162.679 69.8379 162.939 69.9986 163.12C70.1593 163.301 70.3798 163.392 70.6602 163.392ZM77.4102 161.176C77.4102 162.093 77.1794 162.809 76.7177 163.325C76.2561 163.838 75.6184 164.095 74.8046 164.095C74.3019 164.095 73.8557 163.977 73.4659 163.741C73.0761 163.505 72.7751 163.166 72.5631 162.725C72.3511 162.284 72.2451 161.768 72.2451 161.176C72.2451 160.26 72.4742 159.547 72.9324 159.037C73.3906 158.525 74.0267 158.268 74.8405 158.268C75.6269 158.268 76.251 158.53 76.7126 159.053C77.1777 159.576 77.4102 160.284 77.4102 161.176ZM73.1273 161.176C73.1273 161.894 73.271 162.441 73.5582 162.818C73.8454 163.194 74.2677 163.382 74.8251 163.382C75.3825 163.382 75.8048 163.195 76.092 162.823C76.3826 162.447 76.528 161.898 76.528 161.176C76.528 160.462 76.3826 159.92 76.092 159.55C75.8048 159.178 75.379 158.991 74.8148 158.991C74.2575 158.991 73.8369 159.174 73.5531 159.54C73.2693 159.906 73.1273 160.451 73.1273 161.176ZM84.2524 164.095C83.8866 164.095 83.5515 164.028 83.2471 163.895C82.9462 163.758 82.6932 163.549 82.488 163.269H82.4265C82.4675 163.597 82.488 163.908 82.488 164.202V166.516H81.6366V158.371H82.329L82.447 159.14H82.488C82.7069 158.832 82.9616 158.61 83.2523 158.473C83.5429 158.336 83.8763 158.268 84.2524 158.268C84.9979 158.268 85.5723 158.523 85.9758 159.032C86.3827 159.542 86.5862 160.256 86.5862 161.176C86.5862 162.1 86.3793 162.818 85.9656 163.331C85.5552 163.84 84.9842 164.095 84.2524 164.095ZM84.1293 158.991C83.5549 158.991 83.1394 159.15 82.883 159.468C82.6265 159.786 82.4949 160.292 82.488 160.987V161.176C82.488 161.966 82.6197 162.532 82.883 162.874C83.1463 163.213 83.5686 163.382 84.1499 163.382C84.6354 163.382 85.015 163.185 85.2885 162.792C85.5655 162.399 85.704 161.857 85.704 161.166C85.704 160.465 85.5655 159.928 85.2885 159.555C85.015 159.179 84.6286 158.991 84.1293 158.991ZM91.5358 163.992L91.3665 163.192H91.3255C91.0451 163.544 90.7647 163.784 90.4843 163.91C90.2074 164.033 89.8603 164.095 89.4431 164.095C88.8858 164.095 88.4481 163.951 88.1301 163.664C87.8155 163.377 87.6582 162.968 87.6582 162.438C87.6582 161.303 88.566 160.708 90.3817 160.653L91.3358 160.622V160.274C91.3358 159.832 91.24 159.508 91.0485 159.299C90.8605 159.087 90.5578 158.981 90.1407 158.981C89.6722 158.981 89.1422 159.125 88.5506 159.412L88.2891 158.76C88.566 158.61 88.8687 158.492 89.1969 158.407C89.5286 158.321 89.8603 158.278 90.192 158.278C90.8622 158.278 91.358 158.427 91.6794 158.725C92.0043 159.022 92.1667 159.499 92.1667 160.156V163.992H91.5358ZM89.6124 163.392C90.1424 163.392 90.5578 163.247 90.8588 162.956C91.1631 162.665 91.3153 162.259 91.3153 161.735V161.228L90.4638 161.263C89.7868 161.287 89.2978 161.393 88.9969 161.581C88.6994 161.766 88.5506 162.055 88.5506 162.448C88.5506 162.756 88.643 162.99 88.8276 163.151C89.0157 163.312 89.2773 163.392 89.6124 163.392ZM93.0335 158.371H93.9465L95.1775 161.576C95.4476 162.308 95.6152 162.836 95.6801 163.161H95.7212C95.7656 162.987 95.858 162.689 95.9982 162.269C96.1418 161.845 96.6068 160.545 97.3933 158.371H98.3063L95.8904 164.772C95.6511 165.404 95.3707 165.852 95.0493 166.116C94.7313 166.382 94.3397 166.516 93.8747 166.516C93.6148 166.516 93.3584 166.487 93.1053 166.429V165.746C93.2934 165.787 93.5037 165.808 93.7362 165.808C94.3209 165.808 94.7381 165.48 94.9877 164.823L95.3006 164.023L93.0335 158.371ZM104.564 164.095C104.198 164.095 103.863 164.028 103.558 163.895C103.258 163.758 103.005 163.549 102.799 163.269H102.738C102.779 163.597 102.799 163.908 102.799 164.202V166.516H101.948V158.371H102.64L102.758 159.14H102.799C103.018 158.832 103.273 158.61 103.564 158.473C103.854 158.336 104.188 158.268 104.564 158.268C105.309 158.268 105.884 158.523 106.287 159.032C106.694 159.542 106.898 160.256 106.898 161.176C106.898 162.1 106.691 162.818 106.277 163.331C105.867 163.84 105.296 164.095 104.564 164.095ZM104.441 158.991C103.866 158.991 103.451 159.15 103.194 159.468C102.938 159.786 102.806 160.292 102.799 160.987V161.176C102.799 161.966 102.931 162.532 103.194 162.874C103.458 163.213 103.88 163.382 104.461 163.382C104.947 163.382 105.326 163.185 105.6 162.792C105.877 162.399 106.015 161.857 106.015 161.166C106.015 160.465 105.877 159.928 105.6 159.555C105.326 159.179 104.94 158.991 104.441 158.991ZM111.847 163.992L111.678 163.192H111.637C111.356 163.544 111.076 163.784 110.796 163.91C110.519 164.033 110.172 164.095 109.754 164.095C109.197 164.095 108.759 163.951 108.441 163.664C108.127 163.377 107.97 162.968 107.97 162.438C107.97 161.303 108.877 160.708 110.693 160.653L111.647 160.622V160.274C111.647 159.832 111.551 159.508 111.36 159.299C111.172 159.087 110.869 158.981 110.452 158.981C109.984 158.981 109.454 159.125 108.862 159.412L108.6 158.76C108.877 158.61 109.18 158.492 109.508 158.407C109.84 158.321 110.172 158.278 110.503 158.278C111.174 158.278 111.669 158.427 111.991 158.725C112.316 159.022 112.478 159.499 112.478 160.156V163.992H111.847ZM109.924 163.392C110.454 163.392 110.869 163.247 111.17 162.956C111.474 162.665 111.627 162.259 111.627 161.735V161.228L110.775 161.263C110.098 161.287 109.609 161.393 109.308 161.581C109.011 161.766 108.862 162.055 108.862 162.448C108.862 162.756 108.954 162.99 109.139 163.151C109.327 163.312 109.589 163.392 109.924 163.392ZM116.802 158.268C117.052 158.268 117.276 158.289 117.474 158.33L117.356 159.12C117.123 159.068 116.918 159.043 116.74 159.043C116.286 159.043 115.896 159.227 115.571 159.597C115.249 159.966 115.089 160.426 115.089 160.976V163.992H114.237V158.371H114.94L115.037 159.412H115.079C115.287 159.046 115.538 158.764 115.833 158.566C116.127 158.367 116.45 158.268 116.802 158.268ZM120.341 163.392C120.491 163.392 120.637 163.382 120.777 163.361C120.917 163.337 121.028 163.313 121.11 163.289V163.941C121.018 163.985 120.881 164.021 120.7 164.049C120.522 164.079 120.362 164.095 120.218 164.095C119.131 164.095 118.587 163.522 118.587 162.377V159.032H117.782V158.622L118.587 158.268L118.946 157.068H119.438V158.371H121.069V159.032H119.438V162.341C119.438 162.679 119.519 162.939 119.679 163.12C119.84 163.301 120.061 163.392 120.341 163.392ZM129.82 161.176C129.82 162.093 129.589 162.809 129.127 163.325C128.666 163.838 128.028 164.095 127.214 164.095C126.711 164.095 126.265 163.977 125.875 163.741C125.486 163.505 125.185 163.166 124.973 162.725C124.761 162.284 124.655 161.768 124.655 161.176C124.655 160.26 124.884 159.547 125.342 159.037C125.8 158.525 126.436 158.268 127.25 158.268C128.036 158.268 128.66 158.53 129.122 159.053C129.587 159.576 129.82 160.284 129.82 161.176ZM125.537 161.176C125.537 161.894 125.68 162.441 125.968 162.818C126.255 163.194 126.677 163.382 127.235 163.382C127.792 163.382 128.214 163.195 128.501 162.823C128.792 162.447 128.937 161.898 128.937 161.176C128.937 160.462 128.792 159.92 128.501 159.55C128.214 159.178 127.789 158.991 127.224 158.991C126.667 158.991 126.246 159.174 125.963 159.54C125.679 159.906 125.537 160.451 125.537 161.176ZM133.851 159.032H132.42V163.992H131.569V159.032H130.563V158.648L131.569 158.34V158.027C131.569 156.646 132.172 155.955 133.379 155.955C133.677 155.955 134.026 156.015 134.426 156.134L134.205 156.817C133.877 156.711 133.596 156.658 133.364 156.658C133.042 156.658 132.805 156.765 132.651 156.981C132.497 157.193 132.42 157.535 132.42 158.006V158.371H133.851V159.032ZM139.421 163.392C139.572 163.392 139.717 163.382 139.857 163.361C139.998 163.337 140.109 163.313 140.191 163.289V163.941C140.098 163.985 139.962 164.021 139.78 164.049C139.603 164.079 139.442 164.095 139.298 164.095C138.211 164.095 137.667 163.522 137.667 162.377V159.032H136.862V158.622L137.667 158.268L138.026 157.068H138.519V158.371H140.15V159.032H138.519V162.341C138.519 162.679 138.599 162.939 138.76 163.12C138.92 163.301 139.141 163.392 139.421 163.392ZM145.166 163.992V160.356C145.166 159.897 145.062 159.555 144.853 159.33C144.645 159.104 144.318 158.991 143.873 158.991C143.282 158.991 142.849 159.152 142.576 159.473C142.306 159.795 142.171 160.321 142.171 161.053V163.992H141.319V156.011H142.171V158.427C142.171 158.718 142.157 158.959 142.13 159.15H142.181C142.348 158.88 142.586 158.668 142.894 158.514C143.205 158.357 143.559 158.278 143.956 158.278C144.643 158.278 145.157 158.442 145.499 158.771C145.845 159.096 146.017 159.614 146.017 160.325V163.992H145.166ZM150.146 164.095C149.315 164.095 148.659 163.842 148.177 163.336C147.698 162.83 147.459 162.127 147.459 161.228C147.459 160.321 147.681 159.602 148.126 159.068C148.573 158.535 149.174 158.268 149.926 158.268C150.63 158.268 151.188 158.501 151.598 158.966C152.008 159.427 152.213 160.038 152.213 160.797V161.335H148.341C148.358 161.995 148.524 162.496 148.838 162.838C149.156 163.18 149.603 163.351 150.177 163.351C150.782 163.351 151.381 163.225 151.972 162.971V163.731C151.671 163.861 151.386 163.953 151.116 164.008C150.849 164.066 150.526 164.095 150.146 164.095ZM149.916 158.981C149.464 158.981 149.103 159.128 148.833 159.422C148.567 159.716 148.409 160.123 148.361 160.643H151.3C151.3 160.106 151.181 159.696 150.941 159.412C150.702 159.125 150.36 158.981 149.916 158.981ZM159.856 163.992L159.687 163.192H159.646C159.365 163.544 159.085 163.784 158.804 163.91C158.527 164.033 158.18 164.095 157.763 164.095C157.206 164.095 156.768 163.951 156.45 163.664C156.136 163.377 155.978 162.968 155.978 162.438C155.978 161.303 156.886 160.708 158.702 160.653L159.656 160.622V160.274C159.656 159.832 159.56 159.508 159.369 159.299C159.181 159.087 158.878 158.981 158.461 158.981C157.992 158.981 157.462 159.125 156.871 159.412L156.609 158.76C156.886 158.61 157.189 158.492 157.517 158.407C157.849 158.321 158.18 158.278 158.512 158.278C159.182 158.278 159.678 158.427 159.999 158.725C160.324 159.022 160.487 159.499 160.487 160.156V163.992H159.856ZM157.932 163.392C158.462 163.392 158.878 163.247 159.179 162.956C159.483 162.665 159.635 162.259 159.635 161.735V161.228L158.784 161.263C158.107 161.287 157.618 161.393 157.317 161.581C157.019 161.766 156.871 162.055 156.871 162.448C156.871 162.756 156.963 162.99 157.148 163.151C157.336 163.312 157.597 163.392 157.932 163.392ZM166.847 158.371V158.909L165.806 159.032C165.901 159.152 165.987 159.309 166.062 159.504C166.137 159.696 166.175 159.913 166.175 160.156C166.175 160.706 165.987 161.146 165.611 161.474C165.235 161.802 164.718 161.966 164.062 161.966C163.894 161.966 163.737 161.953 163.59 161.925C163.227 162.117 163.046 162.358 163.046 162.648C163.046 162.802 163.109 162.917 163.236 162.992C163.362 163.064 163.58 163.1 163.887 163.1H164.882C165.491 163.1 165.958 163.228 166.283 163.484C166.611 163.741 166.775 164.114 166.775 164.603C166.775 165.225 166.525 165.698 166.026 166.023C165.527 166.352 164.799 166.516 163.841 166.516C163.106 166.516 162.538 166.379 162.138 166.105C161.742 165.832 161.543 165.445 161.543 164.946C161.543 164.604 161.653 164.308 161.872 164.059C162.09 163.809 162.398 163.64 162.795 163.551C162.651 163.486 162.53 163.385 162.431 163.248C162.335 163.112 162.287 162.953 162.287 162.771C162.287 162.566 162.342 162.387 162.451 162.233C162.561 162.079 162.733 161.93 162.969 161.787C162.679 161.667 162.441 161.464 162.256 161.176C162.075 160.889 161.984 160.561 161.984 160.192C161.984 159.576 162.169 159.102 162.538 158.771C162.908 158.436 163.431 158.268 164.108 158.268C164.402 158.268 164.667 158.302 164.903 158.371H166.847ZM162.364 164.936C162.364 165.24 162.492 165.471 162.749 165.628C163.005 165.786 163.373 165.864 163.851 165.864C164.566 165.864 165.094 165.757 165.436 165.541C165.782 165.329 165.954 165.04 165.954 164.674C165.954 164.37 165.86 164.158 165.672 164.038C165.484 163.922 165.13 163.864 164.611 163.864H163.59C163.203 163.864 162.903 163.956 162.687 164.141C162.472 164.326 162.364 164.591 162.364 164.936ZM162.826 160.171C162.826 160.564 162.937 160.862 163.159 161.063C163.381 161.265 163.691 161.366 164.087 161.366C164.918 161.366 165.334 160.963 165.334 160.156C165.334 159.311 164.913 158.889 164.072 158.889C163.672 158.889 163.364 158.996 163.149 159.212C162.933 159.427 162.826 159.747 162.826 160.171ZM170.565 158.268C170.815 158.268 171.039 158.289 171.237 158.33L171.119 159.12C170.887 159.068 170.682 159.043 170.504 159.043C170.049 159.043 169.659 159.227 169.334 159.597C169.013 159.966 168.852 160.426 168.852 160.976V163.992H168.001V158.371H168.704L168.801 159.412H168.842C169.051 159.046 169.302 158.764 169.596 158.566C169.89 158.367 170.213 158.268 170.565 158.268ZM174.664 164.095C173.833 164.095 173.176 163.842 172.694 163.336C172.215 162.83 171.976 162.127 171.976 161.228C171.976 160.321 172.198 159.602 172.643 159.068C173.091 158.535 173.691 158.268 174.443 158.268C175.148 158.268 175.705 158.501 176.115 158.966C176.526 159.427 176.731 160.038 176.731 160.797V161.335H172.858C172.875 161.995 173.041 162.496 173.356 162.838C173.674 163.18 174.12 163.351 174.694 163.351C175.3 163.351 175.898 163.225 176.49 162.971V163.731C176.189 163.861 175.903 163.953 175.633 164.008C175.366 164.066 175.043 164.095 174.664 164.095ZM174.433 158.981C173.981 158.981 173.621 159.128 173.351 159.422C173.084 159.716 172.927 160.123 172.879 160.643H175.818C175.818 160.106 175.698 159.696 175.459 159.412C175.219 159.125 174.877 158.981 174.433 158.981ZM180.562 164.095C179.731 164.095 179.075 163.842 178.593 163.336C178.114 162.83 177.875 162.127 177.875 161.228C177.875 160.321 178.097 159.602 178.541 159.068C178.989 158.535 179.589 158.268 180.342 158.268C181.046 158.268 181.603 158.501 182.014 158.966C182.424 159.427 182.629 160.038 182.629 160.797V161.335H178.757C178.774 161.995 178.94 162.496 179.254 162.838C179.572 163.18 180.018 163.351 180.593 163.351C181.198 163.351 181.797 163.225 182.388 162.971V163.731C182.087 163.861 181.802 163.953 181.532 164.008C181.265 164.066 180.942 164.095 180.562 164.095ZM180.331 158.981C179.88 158.981 179.519 159.128 179.249 159.422C178.982 159.716 178.825 160.123 178.777 160.643H181.716C181.716 160.106 181.597 159.696 181.357 159.412C181.118 159.125 180.776 158.981 180.331 158.981ZM187.912 163.238H187.866C187.473 163.809 186.885 164.095 186.102 164.095C185.366 164.095 184.794 163.843 184.383 163.341C183.976 162.838 183.773 162.123 183.773 161.197C183.773 160.27 183.978 159.55 184.388 159.037C184.799 158.525 185.37 158.268 186.102 158.268C186.864 158.268 187.449 158.545 187.856 159.099H187.922L187.887 158.694L187.866 158.299V156.011H188.717V163.992H188.025L187.912 163.238ZM186.209 163.382C186.791 163.382 187.211 163.225 187.471 162.91C187.734 162.592 187.866 162.081 187.866 161.376V161.197C187.866 160.4 187.733 159.832 187.466 159.494C187.203 159.152 186.78 158.981 186.199 158.981C185.7 158.981 185.317 159.176 185.05 159.566C184.787 159.952 184.655 160.499 184.655 161.207C184.655 161.925 184.787 162.467 185.05 162.833C185.313 163.199 185.7 163.382 186.209 163.382ZM195.873 164.095C195.507 164.095 195.172 164.028 194.867 163.895C194.566 163.758 194.313 163.549 194.108 163.269H194.047C194.088 163.597 194.108 163.908 194.108 164.202V166.516H193.257V158.371H193.949L194.067 159.14H194.108C194.327 158.832 194.582 158.61 194.872 158.473C195.163 158.336 195.496 158.268 195.873 158.268C196.618 158.268 197.193 158.523 197.596 159.032C198.003 159.542 198.206 160.256 198.206 161.176C198.206 162.1 198 162.818 197.586 163.331C197.175 163.84 196.604 164.095 195.873 164.095ZM195.75 158.991C195.175 158.991 194.76 159.15 194.503 159.468C194.247 159.786 194.115 160.292 194.108 160.987V161.176C194.108 161.966 194.24 162.532 194.503 162.874C194.766 163.213 195.189 163.382 195.77 163.382C196.256 163.382 196.635 163.185 196.909 162.792C197.186 162.399 197.324 161.857 197.324 161.166C197.324 160.465 197.186 159.928 196.909 159.555C196.635 159.179 196.249 158.991 195.75 158.991ZM203.156 163.992L202.987 163.192H202.946C202.665 163.544 202.385 163.784 202.105 163.91C201.828 164.033 201.48 164.095 201.063 164.095C200.506 164.095 200.068 163.951 199.75 163.664C199.436 163.377 199.278 162.968 199.278 162.438C199.278 161.303 200.186 160.708 202.002 160.653L202.956 160.622V160.274C202.956 159.832 202.86 159.508 202.669 159.299C202.481 159.087 202.178 158.981 201.761 158.981C201.292 158.981 200.762 159.125 200.171 159.412L199.909 158.76C200.186 158.61 200.489 158.492 200.817 158.407C201.149 158.321 201.48 158.278 201.812 158.278C202.482 158.278 202.978 158.427 203.3 158.725C203.624 159.022 203.787 159.499 203.787 160.156V163.992H203.156ZM201.233 163.392C201.763 163.392 202.178 163.247 202.479 162.956C202.783 162.665 202.935 162.259 202.935 161.735V161.228L202.084 161.263C201.407 161.287 200.918 161.393 200.617 161.581C200.32 161.766 200.171 162.055 200.171 162.448C200.171 162.756 200.263 162.99 200.448 163.151C200.636 163.312 200.897 163.392 201.233 163.392ZM204.654 158.371H205.567L206.798 161.576C207.068 162.308 207.235 162.836 207.3 163.161H207.341C207.386 162.987 207.478 162.689 207.618 162.269C207.762 161.845 208.227 160.545 209.013 158.371H209.926L207.511 164.772C207.271 165.404 206.991 165.852 206.669 166.116C206.351 166.382 205.96 166.516 205.495 166.516C205.235 166.516 204.979 166.487 204.726 166.429V165.746C204.914 165.787 205.124 165.808 205.356 165.808C205.941 165.808 206.358 165.48 206.608 164.823L206.921 164.023L204.654 158.371ZM218.005 163.992V160.335C218.005 159.887 217.909 159.552 217.718 159.33C217.526 159.104 217.229 158.991 216.825 158.991C216.295 158.991 215.904 159.143 215.651 159.448C215.398 159.752 215.271 160.221 215.271 160.853V163.992H214.42V160.335C214.42 159.887 214.324 159.552 214.132 159.33C213.941 159.104 213.642 158.991 213.235 158.991C212.701 158.991 212.31 159.152 212.06 159.473C211.814 159.791 211.691 160.315 211.691 161.043V163.992H210.839V158.371H211.532L211.67 159.14H211.711C211.872 158.866 212.098 158.653 212.388 158.499C212.683 158.345 213.011 158.268 213.373 158.268C214.252 158.268 214.826 158.586 215.097 159.222H215.138C215.305 158.928 215.548 158.696 215.866 158.525C216.184 158.354 216.546 158.268 216.953 158.268C217.589 158.268 218.065 158.432 218.379 158.76C218.697 159.085 218.856 159.607 218.856 160.325V163.992H218.005ZM222.99 164.095C222.159 164.095 221.503 163.842 221.021 163.336C220.542 162.83 220.303 162.127 220.303 161.228C220.303 160.321 220.525 159.602 220.969 159.068C221.417 158.535 222.018 158.268 222.77 158.268C223.474 158.268 224.032 158.501 224.442 158.966C224.852 159.427 225.057 160.038 225.057 160.797V161.335H221.185C221.202 161.995 221.368 162.496 221.682 162.838C222 163.18 222.447 163.351 223.021 163.351C223.626 163.351 224.225 163.225 224.816 162.971V163.731C224.515 163.861 224.23 163.953 223.96 164.008C223.693 164.066 223.37 164.095 222.99 164.095ZM222.76 158.981C222.308 158.981 221.947 159.128 221.677 159.422C221.411 159.716 221.253 160.123 221.205 160.643H224.144C224.144 160.106 224.025 159.696 223.785 159.412C223.546 159.125 223.204 158.981 222.76 158.981ZM230.361 163.992V160.356C230.361 159.897 230.257 159.555 230.048 159.33C229.839 159.104 229.513 158.991 229.068 158.991C228.48 158.991 228.049 159.15 227.776 159.468C227.502 159.786 227.366 160.311 227.366 161.043V163.992H226.514V158.371H227.207L227.345 159.14H227.386C227.56 158.863 227.805 158.649 228.119 158.499C228.434 158.345 228.785 158.268 229.171 158.268C229.848 158.268 230.358 158.432 230.699 158.76C231.041 159.085 231.212 159.607 231.212 160.325V163.992H230.361ZM234.782 163.392C234.933 163.392 235.078 163.382 235.218 163.361C235.358 163.337 235.47 163.313 235.552 163.289V163.941C235.459 163.985 235.322 164.021 235.141 164.049C234.963 164.079 234.803 164.095 234.659 164.095C233.572 164.095 233.028 163.522 233.028 162.377V159.032H232.223V158.622L233.028 158.268L233.387 157.068H233.879V158.371H235.511V159.032H233.879V162.341C233.879 162.679 233.96 162.939 234.121 163.12C234.281 163.301 234.502 163.392 234.782 163.392ZM236.557 163.448C236.557 163.219 236.608 163.047 236.711 162.93C236.817 162.811 236.967 162.751 237.162 162.751C237.36 162.751 237.514 162.811 237.624 162.93C237.737 163.047 237.793 163.219 237.793 163.448C237.793 163.671 237.737 163.842 237.624 163.961C237.511 164.081 237.357 164.141 237.162 164.141C236.988 164.141 236.842 164.088 236.726 163.982C236.613 163.873 236.557 163.695 236.557 163.448ZM236.557 158.919C236.557 158.458 236.759 158.227 237.162 158.227C237.583 158.227 237.793 158.458 237.793 158.919C237.793 159.142 237.737 159.313 237.624 159.432C237.511 159.552 237.357 159.612 237.162 159.612C236.988 159.612 236.842 159.559 236.726 159.453C236.613 159.343 236.557 159.166 236.557 158.919ZM244.974 163.992H244.143V158.648C244.143 158.203 244.157 157.783 244.184 157.386C244.112 157.458 244.032 157.533 243.943 157.612C243.854 157.69 243.447 158.024 242.722 158.612L242.271 158.027L244.256 156.493H244.974V163.992ZM250.175 159.412C250.965 159.412 251.585 159.608 252.037 160.002C252.491 160.392 252.719 160.927 252.719 161.607C252.719 162.383 252.471 162.992 251.975 163.433C251.483 163.874 250.802 164.095 249.934 164.095C249.089 164.095 248.445 163.96 248 163.69V162.869C248.239 163.023 248.537 163.144 248.892 163.233C249.248 163.319 249.599 163.361 249.944 163.361C250.546 163.361 251.013 163.219 251.344 162.936C251.679 162.652 251.847 162.241 251.847 161.705C251.847 160.658 251.206 160.135 249.923 160.135C249.599 160.135 249.164 160.185 248.621 160.284L248.18 160.002L248.462 156.493H252.191V157.278H249.19L249 159.53C249.393 159.451 249.785 159.412 250.175 159.412ZM258.812 160.233C258.812 161.528 258.607 162.496 258.197 163.136C257.79 163.775 257.166 164.095 256.325 164.095C255.518 164.095 254.904 163.768 254.483 163.115C254.063 162.459 253.852 161.498 253.852 160.233C253.852 158.926 254.056 157.957 254.463 157.324C254.87 156.692 255.49 156.375 256.325 156.375C257.138 156.375 257.756 156.705 258.176 157.365C258.6 158.025 258.812 158.981 258.812 160.233ZM254.714 160.233C254.714 161.323 254.842 162.118 255.099 162.618C255.355 163.113 255.764 163.361 256.325 163.361C256.892 163.361 257.303 163.11 257.556 162.607C257.812 162.101 257.94 161.31 257.94 160.233C257.94 159.155 257.812 158.367 257.556 157.868C257.303 157.365 256.892 157.114 256.325 157.114C255.764 157.114 255.355 157.362 255.099 157.858C254.842 158.35 254.714 159.142 254.714 160.233ZM269.086 160.171C269.086 161.409 268.749 162.356 268.075 163.013C267.405 163.666 266.439 163.992 265.177 163.992H263.1V156.493H265.398C266.564 156.493 267.47 156.817 268.116 157.463C268.763 158.109 269.086 159.012 269.086 160.171ZM268.163 160.202C268.163 159.224 267.916 158.487 267.424 157.991C266.935 157.495 266.207 157.247 265.239 157.247H263.972V163.238H265.034C266.073 163.238 266.855 162.983 267.378 162.474C267.901 161.961 268.163 161.204 268.163 160.202ZM275.477 163.992L274.543 161.607H271.538L270.614 163.992H269.732L272.697 156.463H273.43L276.38 163.992H275.477ZM274.271 160.822L273.399 158.499C273.287 158.205 273.17 157.844 273.051 157.417C272.975 157.745 272.868 158.106 272.728 158.499L271.845 160.822H274.271ZM277.41 163.992V156.493H278.282V163.992H277.41ZM280.093 163.448C280.093 163.219 280.144 163.047 280.247 162.93C280.353 162.811 280.503 162.751 280.698 162.751C280.897 162.751 281.05 162.811 281.16 162.93C281.273 163.047 281.329 163.219 281.329 163.448C281.329 163.671 281.273 163.842 281.16 163.961C281.047 164.081 280.893 164.141 280.698 164.141C280.524 164.141 280.379 164.088 280.262 163.982C280.149 163.873 280.093 163.695 280.093 163.448ZM292.382 160.233C292.382 161.433 292.078 162.377 291.469 163.064C290.864 163.751 290.021 164.095 288.941 164.095C287.836 164.095 286.983 163.758 286.381 163.084C285.783 162.407 285.484 161.453 285.484 160.222C285.484 159.002 285.785 158.056 286.386 157.386C286.988 156.712 287.843 156.375 288.951 156.375C290.028 156.375 290.869 156.717 291.475 157.401C292.08 158.085 292.382 159.029 292.382 160.233ZM286.407 160.233C286.407 161.248 286.622 162.019 287.053 162.546C287.487 163.069 288.117 163.331 288.941 163.331C289.772 163.331 290.399 163.069 290.823 162.546C291.247 162.023 291.459 161.252 291.459 160.233C291.459 159.224 291.247 158.46 290.823 157.94C290.403 157.417 289.778 157.155 288.951 157.155C288.12 157.155 287.487 157.418 287.053 157.945C286.622 158.468 286.407 159.231 286.407 160.233ZM297.778 163.992V160.356C297.778 159.897 297.674 159.555 297.465 159.33C297.257 159.104 296.93 158.991 296.486 158.991C295.898 158.991 295.467 159.15 295.193 159.468C294.92 159.786 294.783 160.311 294.783 161.043V163.992H293.931V158.371H294.624L294.762 159.14H294.803C294.978 158.863 295.222 158.649 295.537 158.499C295.851 158.345 296.202 158.268 296.588 158.268C297.265 158.268 297.775 158.432 298.117 158.76C298.459 159.085 298.63 159.607 298.63 160.325V163.992H297.778ZM38.7263 177.392C38.8767 177.392 39.022 177.382 39.1622 177.361C39.3024 177.337 39.4136 177.313 39.4956 177.289V177.941C39.4033 177.985 39.2665 178.021 39.0853 178.049C38.9075 178.079 38.7468 178.095 38.6032 178.095C37.5158 178.095 36.9721 177.522 36.9721 176.377V173.032H36.1668V172.622L36.9721 172.268L37.3311 171.068H37.8235V172.371H39.4546V173.032H37.8235V176.341C37.8235 176.679 37.9039 176.939 38.0646 177.12C38.2253 177.301 38.4459 177.392 38.7263 177.392ZM44.4709 177.992V174.356C44.4709 173.897 44.3666 173.555 44.158 173.33C43.9494 173.104 43.6229 172.991 43.1783 172.991C42.5868 172.991 42.1542 173.152 41.8807 173.473C41.6105 173.795 41.4755 174.321 41.4755 175.053V177.992H40.624V170.011H41.4755V172.427C41.4755 172.718 41.4618 172.959 41.4344 173.15H41.4857C41.6533 172.88 41.8909 172.668 42.1987 172.514C42.5098 172.357 42.8638 172.278 43.2604 172.278C43.9477 172.278 44.4623 172.442 44.8043 172.771C45.1496 173.096 45.3223 173.614 45.3223 174.325V177.992H44.4709ZM49.4513 178.095C48.6204 178.095 47.9638 177.842 47.4817 177.336C47.003 176.83 46.7636 176.127 46.7636 175.228C46.7636 174.321 46.9859 173.602 47.4304 173.068C47.8783 172.535 48.4784 172.268 49.2307 172.268C49.9351 172.268 50.4925 172.501 50.9028 172.966C51.3131 173.427 51.5183 174.038 51.5183 174.797V175.335H47.6458C47.6629 175.995 47.8288 176.496 48.1433 176.838C48.4613 177.18 48.9076 177.351 49.482 177.351C50.0873 177.351 50.6857 177.225 51.2772 176.971V177.731C50.9763 177.861 50.6908 177.953 50.4207 178.008C50.154 178.066 49.8308 178.095 49.4513 178.095ZM49.2205 172.981C48.7691 172.981 48.4083 173.128 48.1382 173.422C47.8715 173.716 47.7142 174.123 47.6663 174.643H50.6053C50.6053 174.106 50.4856 173.696 50.2463 173.412C50.0069 173.125 49.665 172.981 49.2205 172.981ZM60.5558 175.176C60.5558 176.093 60.325 176.809 59.8634 177.325C59.4018 177.838 58.7641 178.095 57.9502 178.095C57.4476 178.095 57.0014 177.977 56.6115 177.741C56.2217 177.505 55.9208 177.166 55.7088 176.725C55.4968 176.284 55.3908 175.768 55.3908 175.176C55.3908 174.26 55.6199 173.547 56.0781 173.037C56.5363 172.525 57.1723 172.268 57.9861 172.268C58.7726 172.268 59.3967 172.53 59.8583 173.053C60.3233 173.576 60.5558 174.284 60.5558 175.176ZM56.273 175.176C56.273 175.894 56.4166 176.441 56.7039 176.818C56.9911 177.194 57.4134 177.382 57.9708 177.382C58.5281 177.382 58.9504 177.195 59.2377 176.823C59.5283 176.447 59.6736 175.898 59.6736 175.176C59.6736 174.462 59.5283 173.92 59.2377 173.55C58.9504 173.178 58.5247 172.991 57.9605 172.991C57.4031 172.991 56.9825 173.174 56.6987 173.54C56.4149 173.906 56.273 174.451 56.273 175.176ZM63.8693 177.392C64.0197 177.392 64.165 177.382 64.3052 177.361C64.4454 177.337 64.5566 177.313 64.6386 177.289V177.941C64.5463 177.985 64.4095 178.021 64.2283 178.049C64.0505 178.079 63.8898 178.095 63.7462 178.095C62.6588 178.095 62.1151 177.522 62.1151 176.377V173.032H61.3098V172.622L62.1151 172.268L62.4741 171.068H62.9665V172.371H64.5976V173.032H62.9665V176.341C62.9665 176.679 63.0469 176.939 63.2076 177.12C63.3683 177.301 63.5889 177.392 63.8693 177.392ZM69.6139 177.992V174.356C69.6139 173.897 69.5096 173.555 69.301 173.33C69.0924 173.104 68.7659 172.991 68.3214 172.991C67.7298 172.991 67.2972 173.152 67.0237 173.473C66.7535 173.795 66.6185 174.321 66.6185 175.053V177.992H65.767V170.011H66.6185V172.427C66.6185 172.718 66.6048 172.959 66.5774 173.15H66.6287C66.7963 172.88 67.0339 172.668 67.3417 172.514C67.6529 172.357 68.0068 172.278 68.4034 172.278C69.0907 172.278 69.6053 172.442 69.9473 172.771C70.2926 173.096 70.4653 173.614 70.4653 174.325V177.992H69.6139ZM74.5943 178.095C73.7634 178.095 73.1068 177.842 72.6247 177.336C72.146 176.83 71.9066 176.127 71.9066 175.228C71.9066 174.321 72.1289 173.602 72.5734 173.068C73.0213 172.535 73.6215 172.268 74.3737 172.268C75.0781 172.268 75.6355 172.501 76.0458 172.966C76.4562 173.427 76.6613 174.038 76.6613 174.797V175.335H72.7888C72.8059 175.995 72.9718 176.496 73.2864 176.838C73.6044 177.18 74.0506 177.351 74.6251 177.351C75.2303 177.351 75.8287 177.225 76.4203 176.971V177.731C76.1193 177.861 75.8338 177.953 75.5637 178.008C75.297 178.066 74.9738 178.095 74.5943 178.095ZM74.3635 172.981C73.9121 172.981 73.5514 173.128 73.2812 173.422C73.0145 173.716 72.8572 174.123 72.8093 174.643H75.7483C75.7483 174.106 75.6287 173.696 75.3893 173.412C75.1499 173.125 74.808 172.981 74.3635 172.981ZM80.6826 172.268C80.9322 172.268 81.1562 172.289 81.3545 172.33L81.2365 173.12C81.004 173.068 80.7988 173.043 80.621 173.043C80.1662 173.043 79.7764 173.227 79.4516 173.597C79.1301 173.966 78.9694 174.426 78.9694 174.976V177.992H78.118V172.371H78.8207L78.9181 173.412H78.9592C79.1678 173.046 79.4191 172.764 79.7132 172.566C80.0072 172.367 80.3304 172.268 80.6826 172.268ZM88.9815 177.992V174.356C88.9815 173.897 88.8772 173.555 88.6686 173.33C88.46 173.104 88.1335 172.991 87.689 172.991C87.0974 172.991 86.6648 173.152 86.3913 173.473C86.1211 173.795 85.9861 174.321 85.9861 175.053V177.992H85.1346V170.011H85.9861V172.427C85.9861 172.718 85.9724 172.959 85.945 173.15H85.9963C86.1639 172.88 86.4015 172.668 86.7093 172.514C87.0205 172.357 87.3744 172.278 87.771 172.278C88.4583 172.278 88.9729 172.442 89.3149 172.771C89.6603 173.096 89.8329 173.614 89.8329 174.325V177.992H88.9815ZM95.0441 177.992L94.8749 177.192H94.8338C94.5534 177.544 94.2731 177.784 93.9927 177.91C93.7157 178.033 93.3686 178.095 92.9514 178.095C92.3941 178.095 91.9564 177.951 91.6384 177.664C91.3238 177.377 91.1665 176.968 91.1665 176.438C91.1665 175.303 92.0744 174.708 93.8901 174.653L94.8441 174.622V174.274C94.8441 173.832 94.7484 173.508 94.5569 173.299C94.3688 173.087 94.0662 172.981 93.649 172.981C93.1805 172.981 92.6505 173.125 92.059 173.412L91.7974 172.76C92.0744 172.61 92.377 172.492 92.7052 172.407C93.0369 172.321 93.3686 172.278 93.7003 172.278C94.3705 172.278 94.8663 172.427 95.1877 172.725C95.5126 173.022 95.675 173.499 95.675 174.156V177.992H95.0441ZM93.1207 177.392C93.6507 177.392 94.0662 177.247 94.3671 176.956C94.6714 176.665 94.8236 176.259 94.8236 175.735V175.228L93.9721 175.263C93.2951 175.287 92.8061 175.393 92.5052 175.581C92.2077 175.766 92.059 176.055 92.059 176.448C92.059 176.756 92.1513 176.99 92.3359 177.151C92.524 177.312 92.7856 177.392 93.1207 177.392ZM101.281 177.992V174.356C101.281 173.897 101.177 173.555 100.968 173.33C100.76 173.104 100.433 172.991 99.9886 172.991C99.4005 172.991 98.9696 173.15 98.6961 173.468C98.4225 173.786 98.2857 174.311 98.2857 175.043V177.992H97.4343V172.371H98.1267L98.2652 173.14H98.3063C98.4807 172.863 98.7251 172.649 99.0397 172.499C99.3543 172.345 99.7048 172.268 100.091 172.268C100.768 172.268 101.278 172.432 101.62 172.76C101.962 173.085 102.133 173.607 102.133 174.325V177.992H101.281ZM107.713 177.238H107.667C107.274 177.809 106.686 178.095 105.903 178.095C105.167 178.095 104.595 177.843 104.184 177.341C103.777 176.838 103.574 176.123 103.574 175.197C103.574 174.27 103.779 173.55 104.189 173.037C104.6 172.525 105.171 172.268 105.903 172.268C106.665 172.268 107.25 172.545 107.657 173.099H107.723L107.687 172.694L107.667 172.299V170.011H108.518V177.992H107.826L107.713 177.238ZM106.01 177.382C106.592 177.382 107.012 177.225 107.272 176.91C107.535 176.592 107.667 176.081 107.667 175.376V175.197C107.667 174.4 107.534 173.832 107.267 173.494C107.004 173.152 106.581 172.981 106 172.981C105.501 172.981 105.118 173.176 104.851 173.566C104.588 173.952 104.456 174.499 104.456 175.207C104.456 175.925 104.588 176.467 104.851 176.833C105.114 177.199 105.501 177.382 106.01 177.382ZM111.221 176.771L111.298 176.889C111.209 177.231 111.081 177.628 110.914 178.079C110.746 178.534 110.572 178.956 110.391 179.346H109.749C109.842 178.991 109.943 178.551 110.052 178.028C110.165 177.505 110.243 177.086 110.288 176.771H111.221ZM120.474 177.992L119.541 175.607H116.535L115.612 177.992H114.73L117.694 170.463H118.428L121.377 177.992H120.474ZM119.269 174.822L118.397 172.499C118.284 172.205 118.168 171.844 118.048 171.417C117.973 171.745 117.865 172.106 117.725 172.499L116.843 174.822H119.269ZM123.131 177.992H122.28V170.011H123.131V177.992ZM125.788 177.992H124.937V172.371H125.788V177.992ZM124.865 170.847C124.865 170.652 124.913 170.51 125.009 170.422C125.104 170.329 125.224 170.283 125.368 170.283C125.504 170.283 125.622 170.329 125.721 170.422C125.821 170.514 125.87 170.656 125.87 170.847C125.87 171.039 125.821 171.182 125.721 171.278C125.622 171.37 125.504 171.417 125.368 171.417C125.224 171.417 125.104 171.37 125.009 171.278C124.913 171.182 124.865 171.039 124.865 170.847ZM129.84 178.095C129.026 178.095 128.395 177.845 127.948 177.346C127.503 176.843 127.281 176.134 127.281 175.217C127.281 174.277 127.506 173.55 127.958 173.037C128.413 172.525 129.059 172.268 129.897 172.268C130.167 172.268 130.437 172.297 130.707 172.355C130.977 172.413 131.189 172.482 131.343 172.56L131.081 173.284C130.893 173.208 130.688 173.147 130.466 173.099C130.244 173.048 130.047 173.022 129.876 173.022C128.734 173.022 128.163 173.75 128.163 175.207C128.163 175.898 128.301 176.428 128.578 176.797C128.859 177.166 129.273 177.351 129.82 177.351C130.288 177.351 130.769 177.25 131.261 177.048V177.802C130.885 177.997 130.411 178.095 129.84 178.095ZM134.974 178.095C134.144 178.095 133.487 177.842 133.005 177.336C132.526 176.83 132.287 176.127 132.287 175.228C132.287 174.321 132.509 173.602 132.954 173.068C133.401 172.535 134.002 172.268 134.754 172.268C135.458 172.268 136.016 172.501 136.426 172.966C136.836 173.427 137.041 174.038 137.041 174.797V175.335H133.169C133.186 175.995 133.352 176.496 133.667 176.838C133.985 177.18 134.431 177.351 135.005 177.351C135.61 177.351 136.209 177.225 136.8 176.971V177.731C136.499 177.861 136.214 177.953 135.944 178.008C135.677 178.066 135.354 178.095 134.974 178.095ZM134.744 172.981C134.292 172.981 133.932 173.128 133.661 173.422C133.395 173.716 133.237 174.123 133.189 174.643H136.128C136.128 174.106 136.009 173.696 135.769 173.412C135.53 173.125 135.188 172.981 134.744 172.981ZM143.473 178.095C142.66 178.095 142.029 177.845 141.581 177.346C141.136 176.843 140.914 176.134 140.914 175.217C140.914 174.277 141.14 173.55 141.591 173.037C142.046 172.525 142.692 172.268 143.53 172.268C143.8 172.268 144.07 172.297 144.34 172.355C144.61 172.413 144.822 172.482 144.976 172.56L144.715 173.284C144.527 173.208 144.321 173.147 144.099 173.099C143.877 173.048 143.68 173.022 143.509 173.022C142.367 173.022 141.796 173.75 141.796 175.207C141.796 175.898 141.935 176.428 142.212 176.797C142.492 177.166 142.906 177.351 143.453 177.351C143.921 177.351 144.402 177.25 144.894 177.048V177.802C144.518 177.997 144.044 178.095 143.473 178.095ZM147.084 177.992H146.233V170.011H147.084V177.992ZM152.347 177.992L152.178 177.192H152.137C151.856 177.544 151.576 177.784 151.295 177.91C151.018 178.033 150.671 178.095 150.254 178.095C149.697 178.095 149.259 177.951 148.941 177.664C148.626 177.377 148.469 176.968 148.469 176.438C148.469 175.303 149.377 174.708 151.193 174.653L152.147 174.622V174.274C152.147 173.832 152.051 173.508 151.86 173.299C151.671 173.087 151.369 172.981 150.952 172.981C150.483 172.981 149.953 173.125 149.362 173.412L149.1 172.76C149.377 172.61 149.68 172.492 150.008 172.407C150.34 172.321 150.671 172.278 151.003 172.278C151.673 172.278 152.169 172.427 152.49 172.725C152.815 173.022 152.978 173.499 152.978 174.156V177.992H152.347ZM150.423 177.392C150.953 177.392 151.369 177.247 151.67 176.956C151.974 176.665 152.126 176.259 152.126 175.735V175.228L151.275 175.263C150.598 175.287 150.109 175.393 149.808 175.581C149.51 175.766 149.362 176.055 149.362 176.448C149.362 176.756 149.454 176.99 149.639 177.151C149.827 177.312 150.088 177.392 150.423 177.392ZM155.588 177.992H154.737V172.371H155.588V177.992ZM154.665 170.847C154.665 170.652 154.713 170.51 154.809 170.422C154.905 170.329 155.024 170.283 155.168 170.283C155.305 170.283 155.423 170.329 155.522 170.422C155.621 170.514 155.67 170.656 155.67 170.847C155.67 171.039 155.621 171.182 155.522 171.278C155.423 171.37 155.305 171.417 155.168 171.417C155.024 171.417 154.905 171.37 154.809 171.278C154.713 171.182 154.665 171.039 154.665 170.847ZM164.559 177.992V174.335C164.559 173.887 164.464 173.552 164.272 173.33C164.081 173.104 163.783 172.991 163.38 172.991C162.85 172.991 162.458 173.143 162.205 173.448C161.952 173.752 161.825 174.221 161.825 174.853V177.992H160.974V174.335C160.974 173.887 160.878 173.552 160.687 173.33C160.495 173.104 160.196 172.991 159.789 172.991C159.256 172.991 158.864 173.152 158.615 173.473C158.368 173.791 158.245 174.315 158.245 175.043V177.992H157.394V172.371H158.086L158.225 173.14H158.266C158.427 172.866 158.652 172.653 158.943 172.499C159.237 172.345 159.565 172.268 159.928 172.268C160.806 172.268 161.381 172.586 161.651 173.222H161.692C161.86 172.928 162.102 172.696 162.42 172.525C162.738 172.354 163.101 172.268 163.508 172.268C164.144 172.268 164.619 172.432 164.934 172.76C165.252 173.085 165.411 173.607 165.411 174.325V177.992H164.559ZM170.796 176.459C170.796 176.982 170.601 177.385 170.212 177.669C169.822 177.953 169.275 178.095 168.57 178.095C167.825 178.095 167.244 177.977 166.826 177.741V176.951C167.096 177.088 167.385 177.195 167.693 177.274C168.004 177.353 168.304 177.392 168.591 177.392C169.035 177.392 169.377 177.322 169.617 177.182C169.856 177.038 169.976 176.821 169.976 176.53C169.976 176.312 169.88 176.125 169.688 175.971C169.5 175.814 169.131 175.629 168.581 175.417C168.057 175.222 167.685 175.053 167.462 174.91C167.244 174.763 167.079 174.597 166.97 174.412C166.864 174.227 166.811 174.007 166.811 173.75C166.811 173.292 166.997 172.931 167.37 172.668C167.743 172.401 168.254 172.268 168.904 172.268C169.509 172.268 170.1 172.391 170.678 172.637L170.376 173.33C169.812 173.097 169.3 172.981 168.842 172.981C168.439 172.981 168.134 173.044 167.929 173.171C167.724 173.297 167.621 173.472 167.621 173.694C167.621 173.844 167.659 173.973 167.734 174.079C167.813 174.185 167.938 174.286 168.109 174.381C168.28 174.477 168.608 174.616 169.093 174.797C169.76 175.04 170.21 175.284 170.442 175.53C170.678 175.776 170.796 176.086 170.796 176.459ZM178.541 176.459C178.541 176.982 178.346 177.385 177.957 177.669C177.567 177.953 177.02 178.095 176.315 178.095C175.57 178.095 174.989 177.977 174.571 177.741V176.951C174.841 177.088 175.13 177.195 175.438 177.274C175.749 177.353 176.049 177.392 176.336 177.392C176.78 177.392 177.122 177.322 177.362 177.182C177.601 177.038 177.721 176.821 177.721 176.53C177.721 176.312 177.625 176.125 177.433 175.971C177.245 175.814 176.876 175.629 176.326 175.417C175.802 175.222 175.43 175.053 175.207 174.91C174.989 174.763 174.824 174.597 174.715 174.412C174.609 174.227 174.556 174.007 174.556 173.75C174.556 173.292 174.742 172.931 175.115 172.668C175.488 172.401 175.999 172.268 176.649 172.268C177.254 172.268 177.845 172.391 178.423 172.637L178.121 173.33C177.556 173.097 177.045 172.981 176.587 172.981C176.184 172.981 175.879 173.044 175.674 173.171C175.469 173.297 175.366 173.472 175.366 173.694C175.366 173.844 175.404 173.973 175.479 174.079C175.558 174.185 175.683 174.286 175.854 174.381C176.025 174.477 176.353 174.616 176.838 174.797C177.505 175.04 177.955 175.284 178.187 175.53C178.423 175.776 178.541 176.086 178.541 176.459ZM183.778 177.992V174.356C183.778 173.897 183.674 173.555 183.465 173.33C183.257 173.104 182.93 172.991 182.486 172.991C181.894 172.991 181.461 173.152 181.188 173.473C180.918 173.795 180.783 174.321 180.783 175.053V177.992H179.931V170.011H180.783V172.427C180.783 172.718 180.769 172.959 180.742 173.15H180.793C180.961 172.88 181.198 172.668 181.506 172.514C181.817 172.357 182.171 172.278 182.568 172.278C183.255 172.278 183.77 172.442 184.112 172.771C184.457 173.096 184.63 173.614 184.63 174.325V177.992H183.778ZM188.759 178.095C187.928 178.095 187.271 177.842 186.789 177.336C186.31 176.83 186.071 176.127 186.071 175.228C186.071 174.321 186.293 173.602 186.738 173.068C187.186 172.535 187.786 172.268 188.538 172.268C189.242 172.268 189.8 172.501 190.21 172.966C190.62 173.427 190.826 174.038 190.826 174.797V175.335H186.953C186.97 175.995 187.136 176.496 187.451 176.838C187.769 177.18 188.215 177.351 188.789 177.351C189.395 177.351 189.993 177.225 190.584 176.971V177.731C190.284 177.861 189.998 177.953 189.728 178.008C189.461 178.066 189.138 178.095 188.759 178.095ZM188.528 172.981C188.076 172.981 187.716 173.128 187.445 173.422C187.179 173.716 187.021 174.123 186.974 174.643H189.913C189.913 174.106 189.793 173.696 189.554 173.412C189.314 173.125 188.972 172.981 188.528 172.981ZM198.637 176.459C198.637 176.982 198.442 177.385 198.053 177.669C197.663 177.953 197.116 178.095 196.411 178.095C195.666 178.095 195.084 177.977 194.667 177.741V176.951C194.937 177.088 195.226 177.195 195.534 177.274C195.845 177.353 196.144 177.392 196.432 177.392C196.876 177.392 197.218 177.322 197.458 177.182C197.697 177.038 197.817 176.821 197.817 176.53C197.817 176.312 197.721 176.125 197.529 175.971C197.341 175.814 196.972 175.629 196.421 175.417C195.898 175.222 195.526 175.053 195.303 174.91C195.084 174.763 194.92 174.597 194.811 174.412C194.705 174.227 194.652 174.007 194.652 173.75C194.652 173.292 194.838 172.931 195.211 172.668C195.584 172.401 196.095 172.268 196.745 172.268C197.35 172.268 197.941 172.391 198.519 172.637L198.217 173.33C197.652 173.097 197.141 172.981 196.683 172.981C196.28 172.981 195.975 173.044 195.77 173.171C195.565 173.297 195.462 173.472 195.462 173.694C195.462 173.844 195.5 173.973 195.575 174.079C195.654 174.185 195.779 174.286 195.95 174.381C196.121 174.477 196.449 174.616 196.934 174.797C197.601 175.04 198.051 175.284 198.283 175.53C198.519 175.776 198.637 176.086 198.637 176.459ZM203.874 177.992V174.356C203.874 173.897 203.77 173.555 203.561 173.33C203.353 173.104 203.026 172.991 202.582 172.991C201.99 172.991 201.557 173.152 201.284 173.473C201.014 173.795 200.879 174.321 200.879 175.053V177.992H200.027V170.011H200.879V172.427C200.879 172.718 200.865 172.959 200.838 173.15H200.889C201.056 172.88 201.294 172.668 201.602 172.514C201.913 172.357 202.267 172.278 202.664 172.278C203.351 172.278 203.866 172.442 204.207 172.771C204.553 173.096 204.726 173.614 204.726 174.325V177.992H203.874ZM211.332 175.176C211.332 176.093 211.101 176.809 210.639 177.325C210.178 177.838 209.54 178.095 208.726 178.095C208.224 178.095 207.777 177.977 207.388 177.741C206.998 177.505 206.697 177.166 206.485 176.725C206.273 176.284 206.167 175.768 206.167 175.176C206.167 174.26 206.396 173.547 206.854 173.037C207.312 172.525 207.948 172.268 208.762 172.268C209.549 172.268 210.173 172.53 210.634 173.053C211.099 173.576 211.332 174.284 211.332 175.176ZM207.049 175.176C207.049 175.894 207.193 176.441 207.48 176.818C207.767 177.194 208.189 177.382 208.747 177.382C209.304 177.382 209.726 177.195 210.014 176.823C210.304 176.447 210.45 175.898 210.45 175.176C210.45 174.462 210.304 173.92 210.014 173.55C209.726 173.178 209.301 172.991 208.736 172.991C208.179 172.991 207.759 173.174 207.475 173.54C207.191 173.906 207.049 174.451 207.049 175.176ZM213.63 172.371V176.017C213.63 176.476 213.734 176.818 213.943 177.043C214.151 177.269 214.478 177.382 214.922 177.382C215.51 177.382 215.94 177.221 216.21 176.9C216.483 176.578 216.62 176.053 216.62 175.325V172.371H217.471V177.992H216.769L216.646 177.238H216.599C216.425 177.515 216.182 177.727 215.871 177.874C215.563 178.021 215.211 178.095 214.815 178.095C214.131 178.095 213.618 177.932 213.276 177.608C212.937 177.283 212.768 176.763 212.768 176.048V172.371H213.63ZM220.133 177.992H219.282V170.011H220.133V177.992ZM225.765 177.238H225.719C225.326 177.809 224.738 178.095 223.955 178.095C223.219 178.095 222.647 177.843 222.236 177.341C221.829 176.838 221.626 176.123 221.626 175.197C221.626 174.27 221.831 173.55 222.241 173.037C222.652 172.525 223.223 172.268 223.955 172.268C224.717 172.268 225.302 172.545 225.709 173.099H225.775L225.74 172.694L225.719 172.299V170.011H226.57V177.992H225.878L225.765 177.238ZM224.062 177.382C224.644 177.382 225.064 177.225 225.324 176.91C225.587 176.592 225.719 176.081 225.719 175.376V175.197C225.719 174.4 225.586 173.832 225.319 173.494C225.056 173.152 224.633 172.981 224.052 172.981C223.553 172.981 223.17 173.176 222.903 173.566C222.64 173.952 222.508 174.499 222.508 175.207C222.508 175.925 222.64 176.467 222.903 176.833C223.166 177.199 223.553 177.382 224.062 177.382ZM233.674 172.268C233.924 172.268 234.148 172.289 234.346 172.33L234.228 173.12C233.996 173.068 233.791 173.043 233.613 173.043C233.158 173.043 232.768 173.227 232.443 173.597C232.122 173.966 231.961 174.426 231.961 174.976V177.992H231.11V172.371H231.812L231.91 173.412H231.951C232.16 173.046 232.411 172.764 232.705 172.566C232.999 172.367 233.322 172.268 233.674 172.268ZM237.773 178.095C236.942 178.095 236.285 177.842 235.803 177.336C235.324 176.83 235.085 176.127 235.085 175.228C235.085 174.321 235.307 173.602 235.752 173.068C236.2 172.535 236.8 172.268 237.552 172.268C238.256 172.268 238.814 172.501 239.224 172.966C239.634 173.427 239.84 174.038 239.84 174.797V175.335H235.967C235.984 175.995 236.15 176.496 236.465 176.838C236.783 177.18 237.229 177.351 237.803 177.351C238.409 177.351 239.007 177.225 239.598 176.971V177.731C239.298 177.861 239.012 177.953 238.742 178.008C238.475 178.066 238.152 178.095 237.773 178.095ZM237.542 172.981C237.09 172.981 236.73 173.128 236.459 173.422C236.193 173.716 236.035 174.123 235.988 174.643H238.927C238.927 174.106 238.807 173.696 238.568 173.412C238.328 173.125 237.986 172.981 237.542 172.981ZM243.543 178.095C242.729 178.095 242.098 177.845 241.65 177.346C241.206 176.843 240.983 176.134 240.983 175.217C240.983 174.277 241.209 173.55 241.66 173.037C242.115 172.525 242.761 172.268 243.599 172.268C243.869 172.268 244.139 172.297 244.41 172.355C244.68 172.413 244.892 172.482 245.046 172.56L244.784 173.284C244.596 173.208 244.391 173.147 244.169 173.099C243.946 173.048 243.75 173.022 243.579 173.022C242.437 173.022 241.866 173.75 241.866 175.207C241.866 175.898 242.004 176.428 242.281 176.797C242.561 177.166 242.975 177.351 243.522 177.351C243.991 177.351 244.471 177.25 244.964 177.048V177.802C244.587 177.997 244.114 178.095 243.543 178.095ZM248.677 178.095C247.846 178.095 247.19 177.842 246.707 177.336C246.229 176.83 245.989 176.127 245.989 175.228C245.989 174.321 246.212 173.602 246.656 173.068C247.104 172.535 247.704 172.268 248.456 172.268C249.161 172.268 249.718 172.501 250.129 172.966C250.539 173.427 250.744 174.038 250.744 174.797V175.335H246.872C246.889 175.995 247.055 176.496 247.369 176.838C247.687 177.18 248.133 177.351 248.708 177.351C249.313 177.351 249.911 177.225 250.503 176.971V177.731C250.202 177.861 249.917 177.953 249.646 178.008C249.38 178.066 249.057 178.095 248.677 178.095ZM248.446 172.981C247.995 172.981 247.634 173.128 247.364 173.422C247.097 173.716 246.94 174.123 246.892 174.643H249.831C249.831 174.106 249.711 173.696 249.472 173.412C249.233 173.125 248.891 172.981 248.446 172.981ZM253.052 177.992H252.201V172.371H253.052V177.992ZM252.129 170.847C252.129 170.652 252.177 170.51 252.273 170.422C252.368 170.329 252.488 170.283 252.632 170.283C252.768 170.283 252.886 170.329 252.986 170.422C253.085 170.514 253.134 170.656 253.134 170.847C253.134 171.039 253.085 171.182 252.986 171.278C252.886 171.37 252.768 171.417 252.632 171.417C252.488 171.417 252.368 171.37 252.273 171.278C252.177 171.182 252.129 171.039 252.129 170.847ZM256.089 177.992L253.955 172.371H254.868L256.078 175.705C256.352 176.484 256.513 176.99 256.561 177.223H256.602C256.639 177.042 256.757 176.667 256.955 176.1C257.157 175.528 257.607 174.286 258.304 172.371H259.217L257.084 177.992H256.089ZM262.495 178.095C261.664 178.095 261.007 177.842 260.525 177.336C260.047 176.83 259.807 176.127 259.807 175.228C259.807 174.321 260.03 173.602 260.474 173.068C260.922 172.535 261.522 172.268 262.274 172.268C262.979 172.268 263.536 172.501 263.946 172.966C264.357 173.427 264.562 174.038 264.562 174.797V175.335H260.689C260.707 175.995 260.872 176.496 261.187 176.838C261.505 177.18 261.951 177.351 262.526 177.351C263.131 177.351 263.729 177.225 264.321 176.971V177.731C264.02 177.861 263.734 177.953 263.464 178.008C263.198 178.066 262.874 178.095 262.495 178.095ZM262.264 172.981C261.813 172.981 261.452 173.128 261.182 173.422C260.915 173.716 260.758 174.123 260.71 174.643H263.649C263.649 174.106 263.529 173.696 263.29 173.412C263.051 173.125 262.709 172.981 262.264 172.981ZM270.563 177.392C270.714 177.392 270.859 177.382 270.999 177.361C271.139 177.337 271.25 177.313 271.332 177.289V177.941C271.24 177.985 271.103 178.021 270.922 178.049C270.744 178.079 270.584 178.095 270.44 178.095C269.353 178.095 268.809 177.522 268.809 176.377V173.032H268.004V172.622L268.809 172.268L269.168 171.068H269.66V172.371H271.291V173.032H269.66V176.341C269.66 176.679 269.741 176.939 269.901 177.12C270.062 177.301 270.283 177.392 270.563 177.392ZM276.308 177.992V174.356C276.308 173.897 276.203 173.555 275.995 173.33C275.786 173.104 275.46 172.991 275.015 172.991C274.424 172.991 273.991 173.152 273.717 173.473C273.447 173.795 273.312 174.321 273.312 175.053V177.992H272.461V170.011H273.312V172.427C273.312 172.718 273.299 172.959 273.271 173.15H273.323C273.49 172.88 273.728 172.668 274.035 172.514C274.347 172.357 274.701 172.278 275.097 172.278C275.785 172.278 276.299 172.442 276.641 172.771C276.986 173.096 277.159 173.614 277.159 174.325V177.992H276.308ZM281.288 178.095C280.457 178.095 279.801 177.842 279.318 177.336C278.84 176.83 278.6 176.127 278.6 175.228C278.6 174.321 278.823 173.602 279.267 173.068C279.715 172.535 280.315 172.268 281.068 172.268C281.772 172.268 282.329 172.501 282.74 172.966C283.15 173.427 283.355 174.038 283.355 174.797V175.335H279.483C279.5 175.995 279.666 176.496 279.98 176.838C280.298 177.18 280.744 177.351 281.319 177.351C281.924 177.351 282.522 177.225 283.114 176.971V177.731C282.813 177.861 282.528 177.953 282.257 178.008C281.991 178.066 281.668 178.095 281.288 178.095ZM281.057 172.981C280.606 172.981 280.245 173.128 279.975 173.422C279.708 173.716 279.551 174.123 279.503 174.643H282.442C282.442 174.106 282.322 173.696 282.083 173.412C281.844 173.125 281.502 172.981 281.057 172.981ZM290.074 173.032H288.643V177.992H287.792V173.032H286.787V172.648L287.792 172.34V172.027C287.792 170.646 288.395 169.955 289.602 169.955C289.9 169.955 290.249 170.015 290.649 170.134L290.428 170.817C290.1 170.711 289.82 170.658 289.587 170.658C289.266 170.658 289.028 170.765 288.874 170.981C288.72 171.193 288.643 171.535 288.643 172.006V172.371H290.074V173.032ZM291.9 172.371V176.017C291.9 176.476 292.005 176.818 292.213 177.043C292.422 177.269 292.748 177.382 293.193 177.382C293.781 177.382 294.21 177.221 294.48 176.9C294.754 176.578 294.891 176.053 294.891 175.325V172.371H295.742V177.992H295.039L294.916 177.238H294.87C294.696 177.515 294.453 177.727 294.142 177.874C293.834 178.021 293.482 178.095 293.085 178.095C292.401 178.095 291.888 177.932 291.546 177.608C291.208 177.283 291.039 176.763 291.039 176.048V172.371H291.9ZM298.404 177.992H297.553V170.011H298.404V177.992ZM301.061 177.992H300.209V170.011H301.061V177.992ZM39.5264 192.095C39.1605 192.095 38.8254 192.028 38.5211 191.895C38.2202 191.758 37.9671 191.549 37.762 191.269H37.7004C37.7415 191.597 37.762 191.908 37.762 192.202V194.516H36.9105V186.371H37.603L37.7209 187.14H37.762C37.9808 186.832 38.2356 186.61 38.5262 186.473C38.8169 186.336 39.1503 186.268 39.5264 186.268C40.2718 186.268 40.8463 186.523 41.2498 187.032C41.6567 187.542 41.8602 188.256 41.8602 189.176C41.8602 190.1 41.6533 190.818 41.2395 191.331C40.8292 191.84 40.2582 192.095 39.5264 192.095ZM39.4033 186.991C38.8288 186.991 38.4134 187.15 38.1569 187.468C37.9005 187.786 37.7688 188.292 37.762 188.987V189.176C37.762 189.966 37.8936 190.532 38.1569 190.874C38.4202 191.213 38.8425 191.382 39.4238 191.382C39.9094 191.382 40.2889 191.185 40.5625 190.792C40.8395 190.399 40.9779 189.857 40.9779 189.166C40.9779 188.465 40.8395 187.928 40.5625 187.555C40.2889 187.179 39.9025 186.991 39.4033 186.991ZM46.8098 191.992L46.6405 191.192H46.5995C46.3191 191.544 46.0387 191.784 45.7583 191.91C45.4813 192.033 45.1342 192.095 44.7171 192.095C44.1597 192.095 43.722 191.951 43.404 191.664C43.0894 191.377 42.9321 190.968 42.9321 190.438C42.9321 189.303 43.84 188.708 45.6557 188.653L46.6097 188.622V188.274C46.6097 187.832 46.514 187.508 46.3225 187.299C46.1344 187.087 45.8318 186.981 45.4146 186.981C44.9462 186.981 44.4162 187.125 43.8246 187.412L43.563 186.76C43.84 186.61 44.1426 186.492 44.4709 186.407C44.8026 186.321 45.1342 186.278 45.4659 186.278C46.1361 186.278 46.632 186.427 46.9534 186.725C47.2782 187.022 47.4406 187.499 47.4406 188.156V191.992H46.8098ZM44.8863 191.392C45.4164 191.392 45.8318 191.247 46.1327 190.956C46.437 190.665 46.5892 190.259 46.5892 189.735V189.228L45.7378 189.263C45.0607 189.287 44.5718 189.393 44.2708 189.581C43.9734 189.766 43.8246 190.055 43.8246 190.448C43.8246 190.756 43.9169 190.99 44.1016 191.151C44.2897 191.312 44.5512 191.392 44.8863 191.392ZM48.3075 186.371H49.2205L50.4515 189.576C50.7216 190.308 50.8891 190.836 50.9541 191.161H50.9951C51.0396 190.987 51.1319 190.689 51.2721 190.269C51.4157 189.845 51.8808 188.545 52.6672 186.371H53.5802L51.1644 192.772C50.925 193.404 50.6446 193.852 50.3232 194.116C50.0052 194.382 49.6137 194.516 49.1487 194.516C48.8888 194.516 48.6323 194.487 48.3793 194.429V193.746C48.5673 193.787 48.7776 193.808 49.0102 193.808C49.5949 193.808 50.0121 193.48 50.2617 192.823L50.5745 192.023L48.3075 186.371ZM61.6586 191.992V188.335C61.6586 187.887 61.5629 187.552 61.3714 187.33C61.1799 187.104 60.8824 186.991 60.4789 186.991C59.9489 186.991 59.5574 187.143 59.3043 187.448C59.0513 187.752 58.9248 188.221 58.9248 188.853V191.992H58.0733V188.335C58.0733 187.887 57.9776 187.552 57.7861 187.33C57.5946 187.104 57.2954 186.991 56.8885 186.991C56.3551 186.991 55.9636 187.152 55.7139 187.473C55.4677 187.791 55.3446 188.315 55.3446 189.043V191.992H54.4932V186.371H55.1856L55.3241 187.14H55.3652C55.5259 186.866 55.7516 186.653 56.0422 186.499C56.3363 186.345 56.6645 186.268 57.027 186.268C57.9058 186.268 58.4803 186.586 58.7504 187.222H58.7914C58.959 186.928 59.2018 186.696 59.5198 186.525C59.8378 186.354 60.2002 186.268 60.6071 186.268C61.2431 186.268 61.7184 186.432 62.033 186.76C62.351 187.085 62.51 187.607 62.51 188.325V191.992H61.6586ZM66.6441 192.095C65.8132 192.095 65.1567 191.842 64.6745 191.336C64.1958 190.83 63.9565 190.127 63.9565 189.228C63.9565 188.321 64.1787 187.602 64.6232 187.068C65.0712 186.535 65.6713 186.268 66.4236 186.268C67.128 186.268 67.6853 186.501 68.0957 186.966C68.506 187.427 68.7112 188.038 68.7112 188.797V189.335H64.8387C64.8558 189.995 65.0216 190.496 65.3362 190.838C65.6542 191.18 66.1004 191.351 66.6749 191.351C67.2801 191.351 67.8785 191.225 68.4701 190.971V191.731C68.1692 191.861 67.8837 191.953 67.6135 192.008C67.3468 192.066 67.0237 192.095 66.6441 192.095ZM66.4133 186.981C65.9619 186.981 65.6012 187.128 65.3311 187.422C65.0644 187.716 64.9071 188.123 64.8592 188.643H67.7982C67.7982 188.106 67.6785 187.696 67.4391 187.412C67.1998 187.125 66.8578 186.981 66.4133 186.981ZM74.0147 191.992V188.356C74.0147 187.897 73.9104 187.555 73.7018 187.33C73.4932 187.104 73.1667 186.991 72.7221 186.991C72.134 186.991 71.7032 187.15 71.4296 187.468C71.1561 187.786 71.0193 188.311 71.0193 189.043V191.992H70.1678V186.371H70.8603L70.9988 187.14H71.0398C71.2142 186.863 71.4587 186.649 71.7733 186.499C72.0878 186.345 72.4383 186.268 72.8247 186.268C73.5018 186.268 74.0113 186.432 74.3532 186.76C74.6952 187.085 74.8661 187.607 74.8661 188.325V191.992H74.0147ZM78.436 191.392C78.5865 191.392 78.7318 191.382 78.872 191.361C79.0122 191.337 79.1233 191.313 79.2054 191.289V191.941C79.113 191.985 78.9763 192.021 78.795 192.049C78.6172 192.079 78.4565 192.095 78.3129 192.095C77.2255 192.095 76.6818 191.522 76.6818 190.377V187.032H75.8766V186.622L76.6818 186.268L77.0409 185.068H77.5333V186.371H79.1643V187.032H77.5333V190.341C77.5333 190.679 77.6136 190.939 77.7743 191.12C77.9351 191.301 78.1556 191.392 78.436 191.392ZM80.2107 191.448C80.2107 191.219 80.262 191.047 80.3646 190.93C80.4706 190.811 80.621 190.751 80.8159 190.751C81.0142 190.751 81.1681 190.811 81.2775 190.93C81.3904 191.047 81.4468 191.219 81.4468 191.448C81.4468 191.671 81.3904 191.842 81.2775 191.961C81.1647 192.081 81.0108 192.141 80.8159 192.141C80.6415 192.141 80.4962 192.088 80.3799 191.982C80.2671 191.873 80.2107 191.695 80.2107 191.448ZM80.2107 186.919C80.2107 186.458 80.4124 186.227 80.8159 186.227C81.2365 186.227 81.4468 186.458 81.4468 186.919C81.4468 187.142 81.3904 187.313 81.2775 187.432C81.1647 187.552 81.0108 187.612 80.8159 187.612C80.6415 187.612 80.4962 187.559 80.3799 187.453C80.2671 187.343 80.2107 187.166 80.2107 186.919ZM90.4023 191.992H85.4732V191.259L87.4479 189.274C88.0497 188.665 88.4464 188.231 88.6378 187.971C88.8293 187.711 88.973 187.458 89.0687 187.212C89.1644 186.966 89.2123 186.701 89.2123 186.417C89.2123 186.017 89.0909 185.7 88.8481 185.468C88.6054 185.232 88.2685 185.114 87.8377 185.114C87.5265 185.114 87.2308 185.165 86.9504 185.268C86.6734 185.37 86.3639 185.557 86.022 185.827L85.5706 185.247C86.2613 184.673 87.0136 184.386 87.8274 184.386C88.5318 184.386 89.0841 184.567 89.4842 184.929C89.8842 185.288 90.0843 185.772 90.0843 186.381C90.0843 186.856 89.9509 187.326 89.6842 187.791C89.4175 188.256 88.9182 188.845 88.1865 189.556L86.5452 191.161V191.202H90.4023V191.992ZM93.8285 187.412C94.6184 187.412 95.239 187.608 95.6904 188.002C96.1452 188.392 96.3726 188.927 96.3726 189.607C96.3726 190.383 96.1247 190.992 95.6289 191.433C95.1365 191.874 94.456 192.095 93.5875 192.095C92.7429 192.095 92.0983 191.96 91.6538 191.69V190.869C91.8931 191.023 92.1906 191.144 92.5462 191.233C92.9019 191.319 93.2524 191.361 93.5977 191.361C94.1995 191.361 94.6663 191.219 94.998 190.936C95.3331 190.652 95.5006 190.241 95.5006 189.705C95.5006 188.658 94.8595 188.135 93.5772 188.135C93.2524 188.135 92.8181 188.185 92.2744 188.284L91.8333 188.002L92.1154 184.493H95.8443V185.278H92.8437L92.654 187.53C93.0472 187.451 93.4387 187.412 93.8285 187.412ZM102.466 188.233C102.466 189.528 102.261 190.496 101.85 191.136C101.444 191.775 100.82 192.095 99.9784 192.095C99.1714 192.095 98.5576 191.768 98.137 191.115C97.7164 190.459 97.5061 189.498 97.5061 188.233C97.5061 186.926 97.7096 185.957 98.1165 185.324C98.5234 184.692 99.144 184.375 99.9784 184.375C100.792 184.375 101.409 184.705 101.83 185.365C102.254 186.025 102.466 186.981 102.466 188.233ZM98.3678 188.233C98.3678 189.323 98.496 190.118 98.7525 190.618C99.009 191.113 99.4176 191.361 99.9784 191.361C100.546 191.361 100.956 191.11 101.209 190.607C101.466 190.101 101.594 189.31 101.594 188.233C101.594 187.155 101.466 186.367 101.209 185.868C100.956 185.365 100.546 185.114 99.9784 185.114C99.4176 185.114 99.009 185.362 98.7525 185.858C98.496 186.35 98.3678 187.142 98.3678 188.233ZM112.74 188.171C112.74 189.409 112.403 190.356 111.729 191.013C111.059 191.666 110.093 191.992 108.831 191.992H106.754V184.493H109.052C110.218 184.493 111.124 184.817 111.77 185.463C112.417 186.109 112.74 187.012 112.74 188.171ZM111.816 188.202C111.816 187.224 111.57 186.487 111.078 185.991C110.589 185.495 109.86 185.247 108.893 185.247H107.626V191.238H108.688C109.727 191.238 110.508 190.983 111.032 190.474C111.555 189.961 111.816 189.204 111.816 188.202ZM119.131 191.992L118.197 189.607H115.191L114.268 191.992H113.386L116.351 184.463H117.084L120.033 191.992H119.131ZM117.925 188.822L117.053 186.499C116.94 186.205 116.824 185.844 116.704 185.417C116.629 185.745 116.522 186.106 116.381 186.499L115.499 188.822H117.925ZM121.064 191.992V184.493H121.936V191.992H121.064ZM123.747 191.448C123.747 191.219 123.798 191.047 123.901 190.93C124.007 190.811 124.157 190.751 124.352 190.751C124.55 190.751 124.704 190.811 124.814 190.93C124.926 191.047 124.983 191.219 124.983 191.448C124.983 191.671 124.926 191.842 124.814 191.961C124.701 192.081 124.547 192.141 124.352 192.141C124.178 192.141 124.032 192.088 123.916 191.982C123.803 191.873 123.747 191.695 123.747 191.448Z" class="path-3"/> -<path d="M41.2703 218.493H42.5423L39.9162 225.992H38.6237L36.0078 218.493H37.2696L38.834 223.156C38.916 223.378 39.0032 223.665 39.0956 224.017C39.1879 224.366 39.2477 224.626 39.2751 224.797C39.3195 224.537 39.3879 224.236 39.4802 223.894C39.5726 223.552 39.6478 223.299 39.7059 223.135L41.2703 218.493ZM48.4357 223.146C48.4357 224.072 48.1981 224.795 47.7228 225.315C47.2475 225.835 46.5858 226.095 45.7378 226.095C45.2078 226.095 44.7393 225.975 44.3324 225.736C43.9255 225.496 43.6126 225.153 43.3938 224.705C43.1749 224.257 43.0655 223.737 43.0655 223.146C43.0655 222.226 43.3014 221.508 43.7733 220.991C44.2452 220.475 44.9103 220.217 45.7686 220.217C46.5892 220.217 47.2389 220.482 47.7176 221.012C48.1963 221.538 48.4357 222.25 48.4357 223.146ZM44.3067 223.146C44.3067 224.455 44.7906 225.11 45.7583 225.11C46.7157 225.11 47.1945 224.455 47.1945 223.146C47.1945 221.85 46.7123 221.202 45.748 221.202C45.242 221.202 44.8744 221.369 44.6453 221.704C44.4196 222.039 44.3067 222.52 44.3067 223.146ZM51.9389 225.12C52.233 225.12 52.527 225.074 52.8211 224.982V225.89C52.6878 225.948 52.5151 225.996 52.3031 226.033C52.0945 226.074 51.8774 226.095 51.6517 226.095C50.5096 226.095 49.9385 225.493 49.9385 224.289V221.232H49.164V220.699L49.995 220.258L50.4053 219.058H51.149V220.319H52.7647V221.232H51.149V224.269C51.149 224.559 51.2208 224.775 51.3644 224.915C51.5115 225.052 51.703 225.12 51.9389 225.12ZM55.1651 225.992H53.9598V220.319H55.1651V225.992ZM53.888 218.817C53.888 218.601 53.9461 218.435 54.0624 218.319C54.182 218.203 54.3513 218.145 54.5701 218.145C54.7821 218.145 54.9463 218.203 55.0625 218.319C55.1822 218.435 55.2421 218.601 55.2421 218.817C55.2421 219.022 55.1822 219.184 55.0625 219.304C54.9463 219.42 54.7821 219.478 54.5701 219.478C54.3513 219.478 54.182 219.42 54.0624 219.304C53.9461 219.184 53.888 219.022 53.888 218.817ZM61.8843 225.992H60.6738V222.504C60.6738 222.067 60.5849 221.74 60.4071 221.525C60.2327 221.309 59.954 221.202 59.571 221.202C59.0616 221.202 58.6888 221.352 58.4529 221.653C58.217 221.954 58.099 222.458 58.099 223.166V225.992H56.8936V220.319H57.8374L58.0067 221.063H58.0682C58.2392 220.793 58.482 220.584 58.7966 220.437C59.1111 220.29 59.4599 220.217 59.8429 220.217C61.2038 220.217 61.8843 220.909 61.8843 222.294V225.992ZM68.3521 220.319V220.981L67.3827 221.161C67.4716 221.28 67.5451 221.427 67.6033 221.602C67.6614 221.776 67.6905 221.961 67.6905 222.156C67.6905 222.74 67.4887 223.2 67.0852 223.535C66.6817 223.87 66.1261 224.038 65.4183 224.038C65.237 224.038 65.0729 224.024 64.9259 223.997C64.666 224.158 64.536 224.346 64.536 224.561C64.536 224.691 64.5959 224.789 64.7156 224.854C64.8387 224.918 65.0626 224.951 65.3875 224.951H66.3774C67.0032 224.951 67.4785 225.084 67.8033 225.351C68.1282 225.618 68.2906 226.002 68.2906 226.505C68.2906 227.148 68.0256 227.644 67.4956 227.993C66.9655 228.341 66.1996 228.516 65.1977 228.516C64.4249 228.516 63.8351 228.379 63.4282 228.105C63.0212 227.832 62.8178 227.442 62.8178 226.936C62.8178 226.587 62.9272 226.293 63.1461 226.054C63.3683 225.818 63.6778 225.654 64.0744 225.561C63.9137 225.493 63.7804 225.384 63.6744 225.233C63.5718 225.079 63.5205 224.918 63.5205 224.751C63.5205 224.539 63.5803 224.359 63.7 224.212C63.8197 224.065 63.9975 223.92 64.2334 223.776C63.9394 223.65 63.7 223.445 63.5154 223.161C63.3341 222.874 63.2435 222.539 63.2435 222.156C63.2435 221.54 63.4367 221.063 63.8231 220.725C64.2129 220.386 64.7669 220.217 65.4849 220.217C65.6457 220.217 65.8132 220.229 65.9876 220.253C66.1654 220.273 66.2988 220.295 66.3877 220.319H68.3521ZM63.8949 226.874C63.8949 227.134 64.0112 227.334 64.2437 227.475C64.4796 227.615 64.8096 227.685 65.2336 227.685C65.8901 227.685 66.3791 227.591 66.7005 227.403C67.022 227.215 67.1827 226.965 67.1827 226.654C67.1827 226.408 67.0938 226.232 66.916 226.126C66.7416 226.023 66.415 225.972 65.9363 225.972H65.0233C64.678 225.972 64.4027 226.052 64.1975 226.213C63.9958 226.377 63.8949 226.597 63.8949 226.874ZM64.4129 222.156C64.4129 222.511 64.5036 222.785 64.6848 222.976C64.8694 223.168 65.1327 223.263 65.4747 223.263C66.1722 223.263 66.521 222.891 66.521 222.145C66.521 221.776 66.4338 221.492 66.2594 221.294C66.0885 221.092 65.8269 220.991 65.4747 220.991C65.1259 220.991 64.8609 221.09 64.6797 221.289C64.5019 221.487 64.4129 221.776 64.4129 222.156ZM78.9233 222.233C78.9233 223.453 78.6172 224.402 78.0052 225.079C77.3965 225.756 76.5331 226.095 75.4149 226.095C74.2831 226.095 73.4129 225.76 72.8042 225.089C72.199 224.416 71.8964 223.46 71.8964 222.222C71.8964 220.984 72.2007 220.034 72.8093 219.37C73.4214 218.707 74.2934 218.375 75.4252 218.375C76.5399 218.375 77.4016 218.712 78.0103 219.386C78.6189 220.059 78.9233 221.008 78.9233 222.233ZM73.1992 222.233C73.1992 223.156 73.3855 223.857 73.7582 224.335C74.1309 224.811 74.6832 225.048 75.4149 225.048C76.1433 225.048 76.6921 224.812 77.0614 224.341C77.4341 223.869 77.6205 223.166 77.6205 222.233C77.6205 221.313 77.4358 220.615 77.0665 220.14C76.7006 219.665 76.1535 219.427 75.4252 219.427C74.69 219.427 74.1344 219.665 73.7582 220.14C73.3855 220.615 73.1992 221.313 73.1992 222.233ZM83.283 226.095C82.565 226.095 82.0076 225.837 81.6109 225.32H81.5391C81.587 225.799 81.6109 226.09 81.6109 226.192V228.516H80.4056V220.319H81.3801C81.4075 220.425 81.4639 220.678 81.5494 221.078H81.6109C81.9871 220.504 82.5513 220.217 83.3035 220.217C84.0114 220.217 84.5619 220.473 84.9551 220.986C85.3518 221.499 85.5501 222.219 85.5501 223.146C85.5501 224.072 85.3484 224.795 84.9449 225.315C84.5448 225.835 83.9909 226.095 83.283 226.095ZM82.9907 221.202C82.512 221.202 82.1615 221.342 81.9392 221.622C81.7204 221.903 81.6109 222.351 81.6109 222.966V223.146C81.6109 223.836 81.7204 224.337 81.9392 224.648C82.158 224.956 82.5154 225.11 83.0112 225.11C83.4284 225.11 83.7498 224.939 83.9755 224.597C84.2011 224.255 84.314 223.768 84.314 223.135C84.314 222.499 84.2011 222.019 83.9755 221.694C83.7532 221.366 83.4249 221.202 82.9907 221.202ZM89.0636 225.12C89.3576 225.12 89.6517 225.074 89.9458 224.982V225.89C89.8124 225.948 89.6397 225.996 89.4277 226.033C89.2191 226.074 89.002 226.095 88.7763 226.095C87.6342 226.095 87.0632 225.493 87.0632 224.289V221.232H86.2887V220.699L87.1196 220.258L87.53 219.058H88.2737V220.319H89.8894V221.232H88.2737V224.269C88.2737 224.559 88.3455 224.775 88.4891 224.915C88.6361 225.052 88.8276 225.12 89.0636 225.12ZM92.2898 225.992H91.0844V220.319H92.2898V225.992ZM91.0126 218.817C91.0126 218.601 91.0708 218.435 91.187 218.319C91.3067 218.203 91.476 218.145 91.6948 218.145C91.9068 218.145 92.0709 218.203 92.1872 218.319C92.3069 218.435 92.3667 218.601 92.3667 218.817C92.3667 219.022 92.3069 219.184 92.1872 219.304C92.0709 219.42 91.9068 219.478 91.6948 219.478C91.476 219.478 91.3067 219.42 91.187 219.304C91.0708 219.184 91.0126 219.022 91.0126 218.817ZM99.05 223.146C99.05 224.072 98.8123 224.795 98.337 225.315C97.8617 225.835 97.2001 226.095 96.3521 226.095C95.822 226.095 95.3536 225.975 94.9467 225.736C94.5398 225.496 94.2269 225.153 94.008 224.705C93.7892 224.257 93.6798 223.737 93.6798 223.146C93.6798 222.226 93.9157 221.508 94.3876 220.991C94.8595 220.475 95.5246 220.217 96.3828 220.217C97.2035 220.217 97.8532 220.482 98.3319 221.012C98.8106 221.538 99.05 222.25 99.05 223.146ZM94.921 223.146C94.921 224.455 95.4049 225.11 96.3726 225.11C97.33 225.11 97.8087 224.455 97.8087 223.146C97.8087 221.85 97.3266 221.202 96.3623 221.202C95.8562 221.202 95.4887 221.369 95.2596 221.704C95.0339 222.039 94.921 222.52 94.921 223.146ZM105.431 225.992H104.22V222.504C104.22 222.067 104.131 221.74 103.953 221.525C103.779 221.309 103.5 221.202 103.117 221.202C102.608 221.202 102.235 221.352 101.999 221.653C101.763 221.954 101.645 222.458 101.645 223.166V225.992H100.44V220.319H101.384L101.553 221.063H101.615C101.786 220.793 102.028 220.584 102.343 220.437C102.657 220.29 103.006 220.217 103.389 220.217C104.75 220.217 105.431 220.909 105.431 222.294V225.992ZM110.919 224.377C110.919 224.93 110.717 225.356 110.314 225.654C109.91 225.948 109.332 226.095 108.58 226.095C107.824 226.095 107.217 225.98 106.759 225.751V224.71C107.426 225.018 108.046 225.172 108.621 225.172C109.363 225.172 109.734 224.948 109.734 224.5C109.734 224.356 109.693 224.236 109.611 224.141C109.529 224.045 109.394 223.946 109.206 223.843C109.018 223.74 108.756 223.624 108.421 223.494C107.768 223.241 107.325 222.988 107.092 222.735C106.863 222.482 106.749 222.154 106.749 221.75C106.749 221.265 106.944 220.889 107.334 220.622C107.727 220.352 108.26 220.217 108.934 220.217C109.601 220.217 110.231 220.352 110.826 220.622L110.437 221.53C109.825 221.277 109.31 221.15 108.893 221.15C108.257 221.15 107.939 221.332 107.939 221.694C107.939 221.872 108.021 222.022 108.185 222.145C108.353 222.268 108.715 222.438 109.272 222.653C109.741 222.834 110.081 223 110.293 223.151C110.505 223.301 110.662 223.475 110.765 223.674C110.868 223.869 110.919 224.103 110.919 224.377Z" class="path-4"/> -<path d="M42.6994 246.652C42.6994 247.72 42.4316 248.55 41.8961 249.143C41.3635 249.735 40.608 250.031 39.6296 250.031C38.6393 250.031 37.8778 249.738 37.3452 249.152C36.8157 248.562 36.5509 247.726 36.5509 246.643C36.5509 245.56 36.8171 244.728 37.3497 244.147C37.8853 243.567 38.6482 243.277 39.6386 243.277C40.614 243.277 41.368 243.571 41.9005 244.161C42.4331 244.75 42.6994 245.581 42.6994 246.652ZM37.6908 246.652C37.6908 247.46 37.8539 248.073 38.18 248.492C38.5061 248.908 38.9893 249.116 39.6296 249.116C40.2669 249.116 40.7471 248.909 41.0703 248.496C41.3964 248.083 41.5595 247.469 41.5595 246.652C41.5595 245.847 41.3979 245.236 41.0748 244.821C40.7546 244.405 40.2759 244.197 39.6386 244.197C38.9953 244.197 38.5091 244.405 38.18 244.821C37.8539 245.236 37.6908 245.847 37.6908 246.652ZM46.5142 250.031C45.8859 250.031 45.3982 249.805 45.0511 249.353H44.9883C45.0302 249.772 45.0511 250.027 45.0511 250.116V252.149H43.9964V244.978H44.8492C44.8731 245.07 44.9225 245.292 44.9973 245.642H45.0511C45.3802 245.139 45.8739 244.888 46.5322 244.888C47.1515 244.888 47.6332 245.112 47.9773 245.561C48.3244 246.01 48.4979 246.64 48.4979 247.451C48.4979 248.261 48.3214 248.894 47.9683 249.349C47.6182 249.804 47.1335 250.031 46.5142 250.031ZM46.2584 245.75C45.8395 245.75 45.5328 245.872 45.3383 246.118C45.1469 246.363 45.0511 246.755 45.0511 247.293V247.451C45.0511 248.055 45.1469 248.493 45.3383 248.766C45.5298 249.035 45.8425 249.169 46.2763 249.169C46.6414 249.169 46.9226 249.02 47.1201 248.721C47.3176 248.421 47.4163 247.995 47.4163 247.442C47.4163 246.885 47.3176 246.465 47.1201 246.18C46.9256 245.893 46.6384 245.75 46.2584 245.75ZM51.5722 249.178C51.8295 249.178 52.0868 249.138 52.3441 249.057V249.852C52.2274 249.903 52.0763 249.944 51.8908 249.977C51.7083 250.013 51.5183 250.031 51.3208 250.031C50.3215 250.031 49.8218 249.505 49.8218 248.451V245.777H49.1442V245.31L49.8712 244.924L50.2303 243.874H50.881V244.978H52.2947V245.777H50.881V248.433C50.881 248.688 50.9438 248.876 51.0695 248.999C51.1982 249.119 51.3657 249.178 51.5722 249.178ZM54.3951 249.941H53.3404V244.978H54.3951V249.941ZM53.2776 243.663C53.2776 243.474 53.3285 243.329 53.4302 243.227C53.5349 243.126 53.683 243.075 53.8745 243.075C54.06 243.075 54.2036 243.126 54.3054 243.227C54.4101 243.329 54.4624 243.474 54.4624 243.663C54.4624 243.842 54.4101 243.984 54.3054 244.089C54.2036 244.191 54.06 244.242 53.8745 244.242C53.683 244.242 53.5349 244.191 53.4302 244.089C53.3285 243.984 53.2776 243.842 53.2776 243.663ZM60.3103 247.451C60.3103 248.261 60.1023 248.894 59.6865 249.349C59.2706 249.804 58.6916 250.031 57.9496 250.031C57.4858 250.031 57.0759 249.926 56.7199 249.717C56.3638 249.508 56.0901 249.207 55.8986 248.815C55.7071 248.423 55.6114 247.968 55.6114 247.451C55.6114 246.646 55.8178 246.017 56.2307 245.566C56.6436 245.114 57.2255 244.888 57.9765 244.888C58.6946 244.888 59.2631 245.12 59.682 245.584C60.1008 246.044 60.3103 246.667 60.3103 247.451ZM56.6975 247.451C56.6975 248.597 57.1208 249.169 57.9676 249.169C58.8053 249.169 59.2242 248.597 59.2242 247.451C59.2242 246.317 58.8023 245.75 57.9586 245.75C57.5158 245.75 57.1941 245.896 56.9937 246.189C56.7962 246.483 56.6975 246.903 56.6975 247.451ZM65.8933 249.941H64.8342V246.89C64.8342 246.507 64.7564 246.221 64.6008 246.032C64.4482 245.844 64.2044 245.75 63.8693 245.75C63.4235 245.75 63.0973 245.881 62.8909 246.145C62.6844 246.408 62.5812 246.849 62.5812 247.469V249.941H61.5265V244.978H62.3523L62.5004 245.628H62.5543C62.7039 245.392 62.9163 245.21 63.1916 245.081C63.4668 244.952 63.772 244.888 64.1071 244.888C65.2979 244.888 65.8933 245.494 65.8933 246.706V249.941ZM72.4952 249.941H71.4405V245.705C71.4405 245.199 71.4525 244.798 71.4764 244.502C71.4076 244.574 71.3223 244.653 71.2206 244.74C71.1219 244.827 70.7868 245.102 70.2153 245.566L69.6857 244.897L71.6155 243.38H72.4952V249.941ZM74.8424 249.38C74.8424 249.162 74.8992 248.994 75.0129 248.878C75.1266 248.761 75.2912 248.703 75.5066 248.703C75.725 248.703 75.8911 248.764 76.0048 248.887C76.1185 249.006 76.1753 249.171 76.1753 249.38C76.1753 249.593 76.117 249.762 76.0003 249.888C75.8866 250.01 75.722 250.072 75.5066 250.072C75.2912 250.072 75.1266 250.01 75.0129 249.888C74.8992 249.765 74.8424 249.596 74.8424 249.38ZM74.8424 245.548C74.8424 245.096 75.0638 244.87 75.5066 244.87C75.731 244.87 75.8986 244.93 76.0093 245.049C76.12 245.169 76.1753 245.335 76.1753 245.548C76.1753 245.76 76.117 245.929 76.0003 246.055C75.8866 246.177 75.722 246.239 75.5066 246.239C75.2912 246.239 75.1266 246.177 75.0129 246.055C74.8992 245.932 74.8424 245.763 74.8424 245.548Z" class="path-5"/> -<path d="M87.3227 245.292C87.3227 245.956 87.0953 246.468 86.6405 246.827C86.1887 247.183 85.541 247.361 84.6972 247.361H83.9253V249.941H83.1623V243.38H84.8633C86.5029 243.38 87.3227 244.017 87.3227 245.292ZM83.9253 246.706H84.612C85.2882 246.706 85.7773 246.596 86.0795 246.378C86.3817 246.16 86.5328 245.809 86.5328 245.328C86.5328 244.894 86.3907 244.571 86.1065 244.358C85.8222 244.146 85.3794 244.04 84.778 244.04H83.9253V246.706ZM91.6132 249.941L91.4651 249.241H91.4292C91.1839 249.549 90.9385 249.759 90.6932 249.87C90.4508 249.977 90.1472 250.031 89.7821 250.031C89.2944 250.031 88.9115 249.906 88.6332 249.654C88.3579 249.403 88.2203 249.045 88.2203 248.582C88.2203 247.588 89.0147 247.068 90.6034 247.02L91.4382 246.993V246.688C91.4382 246.302 91.3544 246.017 91.1869 245.835C91.0223 245.649 90.7575 245.557 90.3925 245.557C89.9826 245.557 89.5188 245.682 89.0012 245.934L88.7723 245.364C89.0147 245.232 89.2795 245.129 89.5667 245.054C89.8569 244.979 90.1472 244.942 90.4374 244.942C91.0238 244.942 91.4576 245.072 91.7389 245.332C92.0231 245.593 92.1653 246.01 92.1653 246.584V249.941H91.6132ZM89.9302 249.416C90.394 249.416 90.7575 249.289 91.0208 249.035C91.2871 248.781 91.4202 248.424 91.4202 247.967V247.522L90.6752 247.554C90.0828 247.575 89.655 247.667 89.3917 247.832C89.1314 247.994 89.0012 248.246 89.0012 248.591C89.0012 248.86 89.082 249.065 89.2436 249.205C89.4081 249.346 89.637 249.416 89.9302 249.416ZM92.9237 245.023H93.7226L94.7997 247.828C95.0361 248.468 95.1827 248.93 95.2395 249.214H95.2754C95.3143 249.062 95.3951 248.801 95.5178 248.433C95.6434 248.062 96.0504 246.925 96.7385 245.023H97.5374L95.4235 250.624C95.2141 251.177 94.9687 251.569 94.6875 251.799C94.4092 252.033 94.0667 252.149 93.6598 252.149C93.4324 252.149 93.208 252.124 92.9866 252.073V251.476C93.1511 251.512 93.3351 251.53 93.5386 251.53C94.0502 251.53 94.4152 251.243 94.6336 250.668L94.9074 249.968L92.9237 245.023ZM104.696 249.941H100.383V249.3L102.111 247.563C102.637 247.03 102.984 246.65 103.152 246.423C103.319 246.195 103.445 245.974 103.529 245.759C103.613 245.543 103.655 245.311 103.655 245.063C103.655 244.713 103.548 244.436 103.336 244.233C103.123 244.026 102.829 243.923 102.452 243.923C102.179 243.923 101.921 243.968 101.675 244.058C101.433 244.147 101.162 244.31 100.863 244.547L100.468 244.04C101.072 243.537 101.731 243.286 102.443 243.286C103.059 243.286 103.542 243.444 103.892 243.761C104.242 244.076 104.417 244.499 104.417 245.032C104.417 245.447 104.301 245.859 104.067 246.266C103.834 246.673 103.397 247.187 102.757 247.81L101.321 249.214V249.25H104.696V249.941ZM107.694 245.934C108.385 245.934 108.928 246.106 109.323 246.45C109.721 246.791 109.92 247.259 109.92 247.854C109.92 248.534 109.703 249.066 109.269 249.452C108.838 249.838 108.243 250.031 107.483 250.031C106.744 250.031 106.18 249.913 105.791 249.677V248.959C106 249.093 106.261 249.199 106.572 249.277C106.883 249.352 107.19 249.389 107.492 249.389C108.018 249.389 108.427 249.265 108.717 249.017C109.01 248.769 109.157 248.41 109.157 247.94C109.157 247.024 108.596 246.566 107.474 246.566C107.19 246.566 106.81 246.61 106.334 246.697L105.948 246.45L106.195 243.38H109.457V244.067H106.832L106.666 246.037C107.01 245.968 107.353 245.934 107.694 245.934ZM115.251 246.652C115.251 247.786 115.072 248.632 114.713 249.192C114.357 249.751 113.811 250.031 113.075 250.031C112.369 250.031 111.832 249.745 111.464 249.174C111.096 248.599 110.912 247.759 110.912 246.652C110.912 245.509 111.09 244.661 111.446 244.107C111.802 243.553 112.345 243.277 113.075 243.277C113.787 243.277 114.327 243.565 114.695 244.143C115.066 244.72 115.251 245.557 115.251 246.652ZM111.666 246.652C111.666 247.606 111.778 248.302 112.002 248.739C112.227 249.172 112.584 249.389 113.075 249.389C113.571 249.389 113.931 249.169 114.152 248.73C114.376 248.287 114.489 247.594 114.489 246.652C114.489 245.709 114.376 245.02 114.152 244.583C113.931 244.143 113.571 243.923 113.075 243.923C112.584 243.923 112.227 244.14 112.002 244.574C111.778 245.005 111.666 245.697 111.666 246.652ZM124.241 246.598C124.241 247.681 123.946 248.51 123.357 249.084C122.77 249.656 121.925 249.941 120.821 249.941H119.003V243.38H121.014C122.034 243.38 122.827 243.663 123.393 244.228C123.958 244.794 124.241 245.584 124.241 246.598ZM123.433 246.625C123.433 245.769 123.218 245.124 122.787 244.69C122.359 244.257 121.722 244.04 120.875 244.04H119.766V249.282H120.695C121.605 249.282 122.289 249.059 122.746 248.613C123.204 248.164 123.433 247.501 123.433 246.625ZM129.833 249.941L129.016 247.854H126.386L125.578 249.941H124.806L127.4 243.353H128.042L130.623 249.941H129.833ZM128.778 247.168L128.015 245.135C127.917 244.877 127.815 244.562 127.71 244.188C127.644 244.475 127.55 244.791 127.427 245.135L126.655 247.168H128.778ZM131.525 249.941V243.38H132.288V249.941H131.525ZM135.955 247.819V247.136H138.158V247.819H135.955ZM142.592 249.941H141.829V243.38H145.487V244.058H142.592V246.459H145.312V247.136H142.592V249.941ZM147.166 245.023V248.214C147.166 248.614 147.257 248.914 147.439 249.111C147.622 249.309 147.908 249.407 148.297 249.407C148.811 249.407 149.187 249.267 149.423 248.985C149.662 248.704 149.782 248.245 149.782 247.608V245.023H150.527V249.941H149.912L149.805 249.282H149.764C149.612 249.524 149.399 249.71 149.127 249.838C148.858 249.967 148.549 250.031 148.202 250.031C147.604 250.031 147.155 249.889 146.856 249.605C146.56 249.321 146.412 248.866 146.412 248.24V245.023H147.166ZM152.856 249.941H152.111V242.958H152.856V249.941ZM155.181 249.941H154.436V242.958H155.181V249.941ZM161.437 250.031C161.117 250.031 160.824 249.973 160.558 249.856C160.294 249.736 160.073 249.554 159.894 249.309H159.84C159.876 249.596 159.894 249.868 159.894 250.125V252.149H159.149V245.023H159.754L159.858 245.696H159.894C160.085 245.426 160.308 245.232 160.562 245.112C160.817 244.993 161.108 244.933 161.437 244.933C162.09 244.933 162.592 245.156 162.945 245.602C163.301 246.047 163.479 246.673 163.479 247.477C163.479 248.285 163.298 248.914 162.936 249.362C162.577 249.808 162.078 250.031 161.437 250.031ZM161.33 245.566C160.827 245.566 160.464 245.705 160.239 245.983C160.015 246.261 159.9 246.704 159.894 247.311V247.477C159.894 248.169 160.009 248.664 160.239 248.963C160.469 249.259 160.839 249.407 161.348 249.407C161.773 249.407 162.105 249.235 162.344 248.891C162.586 248.547 162.707 248.073 162.707 247.469C162.707 246.855 162.586 246.385 162.344 246.059C162.105 245.73 161.767 245.566 161.33 245.566ZM167.81 249.941L167.662 249.241H167.626C167.381 249.549 167.136 249.759 166.89 249.87C166.648 249.977 166.344 250.031 165.979 250.031C165.492 250.031 165.109 249.906 164.83 249.654C164.555 249.403 164.417 249.045 164.417 248.582C164.417 247.588 165.212 247.068 166.801 247.02L167.635 246.993V246.688C167.635 246.302 167.552 246.017 167.384 245.835C167.219 245.649 166.955 245.557 166.59 245.557C166.18 245.557 165.716 245.682 165.198 245.934L164.969 245.364C165.212 245.232 165.477 245.129 165.764 245.054C166.054 244.979 166.344 244.942 166.634 244.942C167.221 244.942 167.655 245.072 167.936 245.332C168.22 245.593 168.362 246.01 168.362 246.584V249.941H167.81ZM166.127 249.416C166.591 249.416 166.955 249.289 167.218 249.035C167.484 248.781 167.617 248.424 167.617 247.967V247.522L166.872 247.554C166.28 247.575 165.852 247.667 165.589 247.832C165.328 247.994 165.198 248.246 165.198 248.591C165.198 248.86 165.279 249.065 165.441 249.205C165.605 249.346 165.834 249.416 166.127 249.416ZM169.121 245.023H169.92L170.997 247.828C171.233 248.468 171.38 248.93 171.437 249.214H171.473C171.511 249.062 171.592 248.801 171.715 248.433C171.841 248.062 172.247 246.925 172.936 245.023H173.734L171.621 250.624C171.411 251.177 171.166 251.569 170.885 251.799C170.606 252.033 170.264 252.149 169.857 252.149C169.629 252.149 169.405 252.124 169.184 252.073V251.476C169.348 251.512 169.532 251.53 169.736 251.53C170.247 251.53 170.612 251.243 170.831 250.668L171.105 249.968L169.121 245.023ZM180.803 249.941V246.741C180.803 246.35 180.719 246.056 180.552 245.862C180.384 245.664 180.124 245.566 179.771 245.566C179.307 245.566 178.964 245.699 178.743 245.965C178.522 246.231 178.411 246.641 178.411 247.195V249.941H177.666V246.741C177.666 246.35 177.582 246.056 177.415 245.862C177.247 245.664 176.985 245.566 176.629 245.566C176.162 245.566 175.82 245.706 175.601 245.987C175.386 246.266 175.278 246.724 175.278 247.361V249.941H174.533V245.023H175.139L175.26 245.696H175.296C175.437 245.456 175.634 245.269 175.889 245.135C176.146 245 176.433 244.933 176.75 244.933C177.519 244.933 178.022 245.211 178.258 245.768H178.294C178.441 245.51 178.653 245.307 178.932 245.157C179.21 245.008 179.527 244.933 179.883 244.933C180.44 244.933 180.855 245.076 181.131 245.364C181.409 245.648 181.548 246.104 181.548 246.732V249.941H180.803ZM185.165 250.031C184.438 250.031 183.864 249.81 183.442 249.367C183.023 248.924 182.814 248.309 182.814 247.522C182.814 246.73 183.008 246.1 183.397 245.633C183.789 245.166 184.314 244.933 184.972 244.933C185.589 244.933 186.076 245.136 186.436 245.543C186.795 245.947 186.974 246.481 186.974 247.145V247.617H183.586C183.601 248.194 183.746 248.632 184.021 248.932C184.299 249.231 184.69 249.38 185.192 249.38C185.722 249.38 186.246 249.27 186.763 249.048V249.713C186.5 249.826 186.25 249.907 186.014 249.955C185.78 250.006 185.498 250.031 185.165 250.031ZM184.963 245.557C184.569 245.557 184.253 245.685 184.016 245.943C183.783 246.2 183.645 246.556 183.604 247.011H186.175C186.175 246.541 186.07 246.182 185.861 245.934C185.652 245.682 185.352 245.557 184.963 245.557ZM191.615 249.941V246.759C191.615 246.358 191.523 246.059 191.341 245.862C191.158 245.664 190.873 245.566 190.484 245.566C189.969 245.566 189.592 245.705 189.353 245.983C189.113 246.261 188.994 246.721 188.994 247.361V249.941H188.249V245.023H188.855L188.976 245.696H189.012C189.164 245.453 189.378 245.266 189.653 245.135C189.929 245 190.235 244.933 190.573 244.933C191.166 244.933 191.612 245.076 191.911 245.364C192.21 245.648 192.36 246.104 192.36 246.732V249.941H191.615ZM195.483 249.416C195.615 249.416 195.742 249.407 195.865 249.389C195.987 249.368 196.085 249.347 196.156 249.327V249.897C196.076 249.935 195.956 249.967 195.797 249.991C195.642 250.018 195.501 250.031 195.376 250.031C194.424 250.031 193.948 249.53 193.948 248.528V245.602H193.244V245.242L193.948 244.933L194.263 243.883H194.693V245.023H196.121V245.602H194.693V248.496C194.693 248.792 194.764 249.02 194.904 249.178C195.045 249.337 195.238 249.416 195.483 249.416Z" class="path-6"/> -<path d="M42.6994 259.124C42.6994 260.193 42.4316 261.023 41.8961 261.615C41.3635 262.208 40.608 262.504 39.6296 262.504C38.6393 262.504 37.8778 262.211 37.3452 261.624C36.8157 261.035 36.5509 260.198 36.5509 259.115C36.5509 258.032 36.8171 257.201 37.3497 256.62C37.8853 256.04 38.6482 255.749 39.6386 255.749C40.614 255.749 41.368 256.044 41.9005 256.634C42.4331 257.223 42.6994 258.053 42.6994 259.124ZM37.6908 259.124C37.6908 259.932 37.8539 260.546 38.18 260.964C38.5061 261.38 38.9893 261.588 39.6296 261.588C40.2669 261.588 40.7471 261.382 41.0703 260.969C41.3964 260.556 41.5595 259.941 41.5595 259.124C41.5595 258.32 41.3979 257.709 41.0748 257.293C40.7546 256.877 40.2759 256.669 39.6386 256.669C38.9953 256.669 38.5091 256.877 38.18 257.293C37.8539 257.709 37.6908 258.32 37.6908 259.124ZM46.5142 262.504C45.8859 262.504 45.3982 262.278 45.0511 261.826H44.9883C45.0302 262.245 45.0511 262.499 45.0511 262.589V264.622H43.9964V257.45H44.8492C44.8731 257.543 44.9225 257.765 44.9973 258.115H45.0511C45.3802 257.612 45.8739 257.361 46.5322 257.361C47.1515 257.361 47.6332 257.585 47.9773 258.034C48.3244 258.483 48.4979 259.112 48.4979 259.923C48.4979 260.734 48.3214 261.367 47.9683 261.822C47.6182 262.276 47.1335 262.504 46.5142 262.504ZM46.2584 258.222C45.8395 258.222 45.5328 258.345 45.3383 258.59C45.1469 258.836 45.0511 259.228 45.0511 259.766V259.923C45.0511 260.528 45.1469 260.966 45.3383 261.238C45.5298 261.507 45.8425 261.642 46.2763 261.642C46.6414 261.642 46.9226 261.493 47.1201 261.193C47.3176 260.894 47.4163 260.468 47.4163 259.914C47.4163 259.358 47.3176 258.937 47.1201 258.653C46.9256 258.366 46.6384 258.222 46.2584 258.222ZM51.5722 261.651C51.8295 261.651 52.0868 261.611 52.3441 261.53V262.324C52.2274 262.375 52.0763 262.417 51.8908 262.45C51.7083 262.486 51.5183 262.504 51.3208 262.504C50.3215 262.504 49.8218 261.977 49.8218 260.924V258.249H49.1442V257.782L49.8712 257.396L50.2303 256.346H50.881V257.45H52.2947V258.249H50.881V260.906C50.881 261.16 50.9438 261.349 51.0695 261.472C51.1982 261.591 51.3657 261.651 51.5722 261.651ZM54.3951 262.414H53.3404V257.45H54.3951V262.414ZM53.2776 256.135C53.2776 255.947 53.3285 255.802 53.4302 255.7C53.5349 255.598 53.683 255.547 53.8745 255.547C54.06 255.547 54.2036 255.598 54.3054 255.7C54.4101 255.802 54.4624 255.947 54.4624 256.135C54.4624 256.315 54.4101 256.457 54.3054 256.562C54.2036 256.663 54.06 256.714 53.8745 256.714C53.683 256.714 53.5349 256.663 53.4302 256.562C53.3285 256.457 53.2776 256.315 53.2776 256.135ZM60.3103 259.923C60.3103 260.734 60.1023 261.367 59.6865 261.822C59.2706 262.276 58.6916 262.504 57.9496 262.504C57.4858 262.504 57.0759 262.399 56.7199 262.19C56.3638 261.98 56.0901 261.68 55.8986 261.288C55.7071 260.896 55.6114 260.441 55.6114 259.923C55.6114 259.118 55.8178 258.49 56.2307 258.038C56.6436 257.586 57.2255 257.361 57.9765 257.361C58.6946 257.361 59.2631 257.592 59.682 258.056C60.1008 258.517 60.3103 259.139 60.3103 259.923ZM56.6975 259.923C56.6975 261.069 57.1208 261.642 57.9676 261.642C58.8053 261.642 59.2242 261.069 59.2242 259.923C59.2242 258.789 58.8023 258.222 57.9586 258.222C57.5158 258.222 57.1941 258.369 56.9937 258.662C56.7962 258.955 56.6975 259.376 56.6975 259.923ZM65.8933 262.414H64.8342V259.362C64.8342 258.979 64.7564 258.694 64.6008 258.505C64.4482 258.317 64.2044 258.222 63.8693 258.222C63.4235 258.222 63.0973 258.354 62.8909 258.617C62.6844 258.881 62.5812 259.322 62.5812 259.941V262.414H61.5265V257.45H62.3523L62.5004 258.101H62.5543C62.7039 257.865 62.9163 257.682 63.1916 257.554C63.4668 257.425 63.772 257.361 64.1071 257.361C65.2979 257.361 65.8933 257.966 65.8933 259.178V262.414ZM73.8461 262.414H69.3985V261.615L71.0904 259.914C71.5901 259.403 71.9207 259.041 72.0823 258.828C72.2468 258.613 72.3665 258.411 72.4413 258.222C72.5161 258.034 72.5535 257.832 72.5535 257.616C72.5535 257.32 72.4638 257.087 72.2842 256.916C72.1077 256.746 71.8624 256.66 71.5482 256.66C71.2969 256.66 71.053 256.707 70.8167 256.8C70.5833 256.892 70.3125 257.06 70.0043 257.302L69.4344 256.607C69.7994 256.298 70.1539 256.08 70.498 255.951C70.8421 255.823 71.2086 255.758 71.5976 255.758C72.208 255.758 72.6971 255.918 73.0652 256.239C73.4332 256.556 73.6172 256.984 73.6172 257.522C73.6172 257.818 73.5633 258.1 73.4556 258.366C73.3509 258.632 73.1878 258.907 72.9664 259.192C72.748 259.473 72.383 259.854 71.8714 260.336L70.7314 261.44V261.485H73.8461V262.414ZM74.8424 261.853C74.8424 261.635 74.8992 261.467 75.0129 261.35C75.1266 261.234 75.2912 261.175 75.5066 261.175C75.725 261.175 75.8911 261.237 76.0048 261.359C76.1185 261.479 76.1753 261.644 76.1753 261.853C76.1753 262.065 76.117 262.235 76.0003 262.36C75.8866 262.483 75.722 262.544 75.5066 262.544C75.2912 262.544 75.1266 262.483 75.0129 262.36C74.8992 262.238 74.8424 262.068 74.8424 261.853ZM74.8424 258.02C74.8424 257.569 75.0638 257.343 75.5066 257.343C75.731 257.343 75.8986 257.402 76.0093 257.522C76.12 257.642 76.1753 257.808 76.1753 258.02C76.1753 258.233 76.117 258.402 76.0003 258.527C75.8866 258.65 75.722 258.711 75.5066 258.711C75.2912 258.711 75.1266 258.65 75.0129 258.527C74.8992 258.405 74.8424 258.236 74.8424 258.02Z" class="path-7"/> -<path d="M87.3227 257.765C87.3227 258.429 87.0953 258.94 86.6405 259.299C86.1887 259.655 85.541 259.833 84.6972 259.833H83.9253V262.414H83.1623V255.853H84.8633C86.5029 255.853 87.3227 256.49 87.3227 257.765ZM83.9253 259.178H84.612C85.2882 259.178 85.7773 259.069 86.0795 258.851C86.3817 258.632 86.5328 258.282 86.5328 257.8C86.5328 257.367 86.3907 257.043 86.1065 256.831C85.8222 256.619 85.3794 256.512 84.778 256.512H83.9253V259.178ZM91.6132 262.414L91.4651 261.714H91.4292C91.1839 262.022 90.9385 262.232 90.6932 262.342C90.4508 262.45 90.1472 262.504 89.7821 262.504C89.2944 262.504 88.9115 262.378 88.6332 262.127C88.3579 261.876 88.2203 261.518 88.2203 261.054C88.2203 260.061 89.0147 259.54 90.6034 259.492L91.4382 259.465V259.16C91.4382 258.774 91.3544 258.49 91.1869 258.308C91.0223 258.122 90.7575 258.029 90.3925 258.029C89.9826 258.029 89.5188 258.155 89.0012 258.406L88.7723 257.836C89.0147 257.705 89.2795 257.601 89.5667 257.527C89.8569 257.452 90.1472 257.414 90.4374 257.414C91.0238 257.414 91.4576 257.545 91.7389 257.805C92.0231 258.065 92.1653 258.483 92.1653 259.057V262.414H91.6132ZM89.9302 261.889C90.394 261.889 90.7575 261.762 91.0208 261.507C91.2871 261.253 91.4202 260.897 91.4202 260.439V259.995L90.6752 260.026C90.0828 260.047 89.655 260.14 89.3917 260.305C89.1314 260.466 89.0012 260.719 89.0012 261.063C89.0012 261.332 89.082 261.537 89.2436 261.678C89.4081 261.819 89.637 261.889 89.9302 261.889ZM92.9237 257.495H93.7226L94.7997 260.3C95.0361 260.941 95.1827 261.403 95.2395 261.687H95.2754C95.3143 261.534 95.3951 261.274 95.5178 260.906C95.6434 260.535 96.0504 259.398 96.7385 257.495H97.5374L95.4235 263.096C95.2141 263.65 94.9687 264.042 94.6875 264.272C94.4092 264.505 94.0667 264.622 93.6598 264.622C93.4324 264.622 93.208 264.597 92.9866 264.546V263.949C93.1511 263.985 93.3351 264.003 93.5386 264.003C94.0502 264.003 94.4152 263.716 94.6336 263.141L94.9074 262.441L92.9237 257.495ZM103.143 262.414H102.416V257.738C102.416 257.349 102.428 256.981 102.452 256.634C102.389 256.696 102.319 256.762 102.241 256.831C102.163 256.9 101.807 257.192 101.173 257.706L100.778 257.195L102.515 255.853H103.143V262.414ZM109.992 259.124C109.992 260.258 109.812 261.105 109.453 261.665C109.097 262.224 108.551 262.504 107.815 262.504C107.109 262.504 106.572 262.218 106.204 261.647C105.836 261.072 105.652 260.231 105.652 259.124C105.652 257.981 105.83 257.133 106.186 256.58C106.542 256.026 107.085 255.749 107.815 255.749C108.527 255.749 109.067 256.038 109.435 256.616C109.806 257.193 109.992 258.029 109.992 259.124ZM106.406 259.124C106.406 260.079 106.518 260.774 106.742 261.211C106.967 261.645 107.324 261.862 107.815 261.862C108.312 261.862 108.671 261.642 108.892 261.202C109.116 260.759 109.229 260.067 109.229 259.124C109.229 258.182 109.116 257.492 108.892 257.055C108.671 256.616 108.312 256.396 107.815 256.396C107.324 256.396 106.967 256.613 106.742 257.046C106.518 257.477 106.406 258.17 106.406 259.124ZM115.251 259.124C115.251 260.258 115.072 261.105 114.713 261.665C114.357 262.224 113.811 262.504 113.075 262.504C112.369 262.504 111.832 262.218 111.464 261.647C111.096 261.072 110.912 260.231 110.912 259.124C110.912 257.981 111.09 257.133 111.446 256.58C111.802 256.026 112.345 255.749 113.075 255.749C113.787 255.749 114.327 256.038 114.695 256.616C115.066 257.193 115.251 258.029 115.251 259.124ZM111.666 259.124C111.666 260.079 111.778 260.774 112.002 261.211C112.227 261.645 112.584 261.862 113.075 261.862C113.571 261.862 113.931 261.642 114.152 261.202C114.376 260.759 114.489 260.067 114.489 259.124C114.489 258.182 114.376 257.492 114.152 257.055C113.931 256.616 113.571 256.396 113.075 256.396C112.584 256.396 112.227 256.613 112.002 257.046C111.778 257.477 111.666 258.17 111.666 259.124ZM124.241 259.071C124.241 260.154 123.946 260.982 123.357 261.557C122.77 262.128 121.925 262.414 120.821 262.414H119.003V255.853H121.014C122.034 255.853 122.827 256.135 123.393 256.701C123.958 257.266 124.241 258.056 124.241 259.071ZM123.433 259.097C123.433 258.242 123.218 257.597 122.787 257.163C122.359 256.729 121.722 256.512 120.875 256.512H119.766V261.754H120.695C121.605 261.754 122.289 261.531 122.746 261.086C123.204 260.637 123.433 259.974 123.433 259.097ZM129.833 262.414L129.016 260.327H126.386L125.578 262.414H124.806L127.4 255.826H128.042L130.623 262.414H129.833ZM128.778 259.64L128.015 257.607C127.917 257.35 127.815 257.034 127.71 256.66C127.644 256.948 127.55 257.263 127.427 257.607L126.655 259.64H128.778ZM131.525 262.414V255.853H132.288V262.414H131.525ZM135.955 260.291V259.609H138.158V260.291H135.955ZM145.99 257.765C145.99 258.429 145.762 258.94 145.308 259.299C144.856 259.655 144.208 259.833 143.364 259.833H142.592V262.414H141.829V255.853H143.53C145.17 255.853 145.99 256.49 145.99 257.765ZM142.592 259.178H143.279C143.955 259.178 144.444 259.069 144.747 258.851C145.049 258.632 145.2 258.282 145.2 257.8C145.2 257.367 145.058 257.043 144.773 256.831C144.489 256.619 144.046 256.512 143.445 256.512H142.592V259.178ZM150.28 262.414L150.132 261.714H150.096C149.851 262.022 149.606 262.232 149.36 262.342C149.118 262.45 148.814 262.504 148.449 262.504C147.961 262.504 147.578 262.378 147.3 262.127C147.025 261.876 146.887 261.518 146.887 261.054C146.887 260.061 147.682 259.54 149.27 259.492L150.105 259.465V259.16C150.105 258.774 150.021 258.49 149.854 258.308C149.689 258.122 149.425 258.029 149.06 258.029C148.65 258.029 148.186 258.155 147.668 258.406L147.439 257.836C147.682 257.705 147.946 257.601 148.234 257.527C148.524 257.452 148.814 257.414 149.104 257.414C149.691 257.414 150.125 257.545 150.406 257.805C150.69 258.065 150.832 258.483 150.832 259.057V262.414H150.28ZM148.597 261.889C149.061 261.889 149.425 261.762 149.688 261.507C149.954 261.253 150.087 260.897 150.087 260.439V259.995L149.342 260.026C148.75 260.047 148.322 260.14 148.059 260.305C147.798 260.466 147.668 260.719 147.668 261.063C147.668 261.332 147.749 261.537 147.911 261.678C148.075 261.819 148.304 261.889 148.597 261.889ZM154.616 257.405C154.834 257.405 155.03 257.423 155.204 257.459L155.1 258.15C154.897 258.106 154.717 258.083 154.562 258.083C154.164 258.083 153.823 258.245 153.539 258.568C153.257 258.891 153.117 259.293 153.117 259.775V262.414H152.372V257.495H152.987L153.072 258.406H153.108C153.29 258.086 153.51 257.839 153.767 257.666C154.025 257.492 154.307 257.405 154.616 257.405ZM157.712 261.889C157.844 261.889 157.971 261.88 158.094 261.862C158.217 261.841 158.314 261.82 158.386 261.799V262.369C158.305 262.408 158.185 262.439 158.027 262.463C157.871 262.49 157.73 262.504 157.605 262.504C156.653 262.504 156.177 262.003 156.177 261V258.074H155.473V257.715L156.177 257.405L156.492 256.355H156.922V257.495H158.35V258.074H156.922V260.969C156.922 261.265 156.993 261.493 157.133 261.651C157.274 261.81 157.467 261.889 157.712 261.889ZM160.118 262.414H159.373V257.495H160.118V262.414ZM159.31 256.162C159.31 255.992 159.352 255.868 159.436 255.79C159.52 255.709 159.624 255.669 159.75 255.669C159.87 255.669 159.973 255.709 160.06 255.79C160.146 255.871 160.19 255.995 160.19 256.162C160.19 256.33 160.146 256.456 160.06 256.539C159.973 256.62 159.87 256.66 159.75 256.66C159.624 256.66 159.52 256.62 159.436 256.539C159.352 256.456 159.31 256.33 159.31 256.162ZM164.723 262.414L164.575 261.714H164.539C164.293 262.022 164.048 262.232 163.803 262.342C163.56 262.45 163.257 262.504 162.892 262.504C162.404 262.504 162.021 262.378 161.743 262.127C161.467 261.876 161.33 261.518 161.33 261.054C161.33 260.061 162.124 259.54 163.713 259.492L164.548 259.465V259.16C164.548 258.774 164.464 258.49 164.296 258.308C164.132 258.122 163.867 258.029 163.502 258.029C163.092 258.029 162.628 258.155 162.111 258.406L161.882 257.836C162.124 257.705 162.389 257.601 162.676 257.527C162.966 257.452 163.257 257.414 163.547 257.414C164.133 257.414 164.567 257.545 164.848 257.805C165.133 258.065 165.275 258.483 165.275 259.057V262.414H164.723ZM163.04 261.889C163.503 261.889 163.867 261.762 164.13 261.507C164.396 261.253 164.53 260.897 164.53 260.439V259.995L163.785 260.026C163.192 260.047 162.764 260.14 162.501 260.305C162.241 260.466 162.111 260.719 162.111 261.063C162.111 261.332 162.191 261.537 162.353 261.678C162.518 261.819 162.746 261.889 163.04 261.889ZM167.559 262.414H166.814V255.431H167.559V262.414ZM173.815 262.504C173.495 262.504 173.202 262.445 172.936 262.329C172.672 262.209 172.451 262.027 172.271 261.781H172.218C172.253 262.068 172.271 262.341 172.271 262.598V264.622H171.526V257.495H172.132L172.236 258.168H172.271C172.463 257.899 172.686 257.705 172.94 257.585C173.194 257.465 173.486 257.405 173.815 257.405C174.468 257.405 174.97 257.628 175.323 258.074C175.679 258.52 175.857 259.145 175.857 259.95C175.857 260.758 175.676 261.386 175.314 261.835C174.955 262.281 174.456 262.504 173.815 262.504ZM173.708 258.038C173.205 258.038 172.841 258.177 172.617 258.456C172.393 258.734 172.277 259.177 172.271 259.784V259.95C172.271 260.641 172.387 261.136 172.617 261.436C172.847 261.732 173.217 261.88 173.726 261.88C174.15 261.88 174.482 261.708 174.722 261.364C174.964 261.02 175.085 260.546 175.085 259.941C175.085 259.328 174.964 258.858 174.722 258.532C174.482 258.203 174.144 258.038 173.708 258.038ZM180.188 262.414L180.04 261.714H180.004C179.759 262.022 179.514 262.232 179.268 262.342C179.026 262.45 178.722 262.504 178.357 262.504C177.869 262.504 177.486 262.378 177.208 262.127C176.933 261.876 176.795 261.518 176.795 261.054C176.795 260.061 177.59 259.54 179.178 259.492L180.013 259.465V259.16C180.013 258.774 179.929 258.49 179.762 258.308C179.597 258.122 179.333 258.029 178.967 258.029C178.558 258.029 178.094 258.155 177.576 258.406L177.347 257.836C177.59 257.705 177.854 257.601 178.142 257.527C178.432 257.452 178.722 257.414 179.012 257.414C179.599 257.414 180.033 257.545 180.314 257.805C180.598 258.065 180.74 258.483 180.74 259.057V262.414H180.188ZM178.505 261.889C178.969 261.889 179.333 261.762 179.596 261.507C179.862 261.253 179.995 260.897 179.995 260.439V259.995L179.25 260.026C178.658 260.047 178.23 260.14 177.967 260.305C177.706 260.466 177.576 260.719 177.576 261.063C177.576 261.332 177.657 261.537 177.819 261.678C177.983 261.819 178.212 261.889 178.505 261.889ZM181.499 257.495H182.298L183.375 260.3C183.611 260.941 183.758 261.403 183.815 261.687H183.85C183.889 261.534 183.97 261.274 184.093 260.906C184.218 260.535 184.625 259.398 185.314 257.495H186.112L183.999 263.096C183.789 263.65 183.544 264.042 183.263 264.272C182.984 264.505 182.642 264.622 182.235 264.622C182.007 264.622 181.783 264.597 181.562 264.546V263.949C181.726 263.985 181.91 264.003 182.114 264.003C182.625 264.003 182.99 263.716 183.209 263.141L183.482 262.441L181.499 257.495ZM193.181 262.414V259.214C193.181 258.822 193.097 258.529 192.93 258.334C192.762 258.137 192.502 258.038 192.149 258.038C191.685 258.038 191.342 258.171 191.121 258.438C190.9 258.704 190.789 259.114 190.789 259.667V262.414H190.044V259.214C190.044 258.822 189.96 258.529 189.793 258.334C189.625 258.137 189.363 258.038 189.007 258.038C188.54 258.038 188.198 258.179 187.979 258.46C187.764 258.738 187.656 259.196 187.656 259.833V262.414H186.911V257.495H187.517L187.638 258.168H187.674C187.815 257.929 188.012 257.742 188.267 257.607C188.524 257.473 188.811 257.405 189.128 257.405C189.897 257.405 190.4 257.684 190.636 258.24H190.672C190.819 257.983 191.031 257.779 191.309 257.63C191.588 257.48 191.905 257.405 192.261 257.405C192.817 257.405 193.233 257.549 193.509 257.836C193.787 258.121 193.926 258.577 193.926 259.205V262.414H193.181ZM197.543 262.504C196.816 262.504 196.242 262.282 195.82 261.84C195.401 261.397 195.192 260.782 195.192 259.995C195.192 259.202 195.386 258.572 195.775 258.106C196.167 257.639 196.692 257.405 197.35 257.405C197.967 257.405 198.454 257.609 198.813 258.016C199.172 258.42 199.352 258.954 199.352 259.618V260.089H195.964C195.978 260.667 196.124 261.105 196.399 261.404C196.677 261.703 197.068 261.853 197.57 261.853C198.1 261.853 198.623 261.742 199.141 261.521V262.185C198.878 262.299 198.628 262.38 198.392 262.428C198.158 262.478 197.875 262.504 197.543 262.504ZM197.341 258.029C196.946 258.029 196.631 258.158 196.394 258.415C196.161 258.673 196.023 259.029 195.981 259.483H198.553C198.553 259.014 198.448 258.655 198.239 258.406C198.029 258.155 197.73 258.029 197.341 258.029ZM203.993 262.414V259.232C203.993 258.831 203.901 258.532 203.719 258.334C203.536 258.137 203.251 258.038 202.862 258.038C202.347 258.038 201.97 258.177 201.731 258.456C201.491 258.734 201.372 259.193 201.372 259.833V262.414H200.627V257.495H201.232L201.354 258.168H201.389C201.542 257.926 201.756 257.739 202.031 257.607C202.307 257.473 202.613 257.405 202.951 257.405C203.544 257.405 203.99 257.549 204.289 257.836C204.588 258.121 204.738 258.577 204.738 259.205V262.414H203.993ZM207.861 261.889C207.993 261.889 208.12 261.88 208.243 261.862C208.365 261.841 208.463 261.82 208.534 261.799V262.369C208.454 262.408 208.334 262.439 208.175 262.463C208.02 262.49 207.879 262.504 207.753 262.504C206.802 262.504 206.326 262.003 206.326 261V258.074H205.622V257.715L206.326 257.405L206.64 256.355H207.071V257.495H208.498V258.074H207.071V260.969C207.071 261.265 207.142 261.493 207.282 261.651C207.423 261.81 207.616 261.889 207.861 261.889Z" class="path-8"/> -<g style="mix-blend-mode:difference"> -<mask id="mask0_22982_89608" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="36" y="294" width="17" height="17"> -<circle cx="44.6235" cy="302.675" r="7.87835" fill="#C4C4C4"/> -</mask> -<g mask="url(#mask0_22982_89608)"> -<rect x="36.7451" y="294.797" width="15.7567" height="15.7567" fill="url(#pattern0_22982_89608)"/> -<rect x="36.7451" y="294.797" width="15.7567" height="15.7567" fill="#D901FF" style="mix-blend-mode:overlay"/> -</g> -</g> -<path d="M62.7805 306.176L61.9636 304.089H59.3337L58.5258 306.176H57.7539L60.348 299.587H60.9897L63.5703 306.176H62.7805ZM61.7258 303.402L60.9628 301.369C60.8641 301.112 60.7624 300.796 60.6576 300.422C60.5918 300.709 60.4976 301.025 60.3749 301.369L59.603 303.402H61.7258ZM65.1052 306.176H64.3602V299.192H65.1052V306.176ZM67.43 306.176H66.685V301.257H67.43V306.176ZM66.6222 299.924C66.6222 299.753 66.6641 299.629 66.7478 299.552C66.8316 299.471 66.9363 299.43 67.062 299.43C67.1817 299.43 67.2849 299.471 67.3717 299.552C67.4584 299.632 67.5018 299.756 67.5018 299.924C67.5018 300.092 67.4584 300.217 67.3717 300.301C67.2849 300.382 67.1817 300.422 67.062 300.422C66.9363 300.422 66.8316 300.382 66.7478 300.301C66.6641 300.217 66.6222 300.092 66.6222 299.924ZM70.9755 306.266C70.2634 306.266 69.7114 306.047 69.3195 305.61C68.9305 305.17 68.736 304.55 68.736 303.748C68.736 302.925 68.9335 302.289 69.3284 301.84C69.7264 301.392 70.2919 301.167 71.0249 301.167C71.2613 301.167 71.4976 301.193 71.734 301.243C71.9704 301.294 72.1559 301.354 72.2905 301.423L72.0616 302.056C71.8971 301.99 71.7175 301.936 71.5231 301.894C71.3286 301.849 71.1565 301.827 71.0069 301.827C70.0076 301.827 69.508 302.464 69.508 303.739C69.508 304.343 69.6291 304.807 69.8715 305.13C70.1168 305.453 70.4789 305.615 70.9576 305.615C71.3675 305.615 71.7879 305.527 72.2187 305.35V306.01C71.8896 306.18 71.4752 306.266 70.9755 306.266ZM75.468 306.266C74.741 306.266 74.1665 306.044 73.7446 305.601C73.3257 305.159 73.1163 304.544 73.1163 303.757C73.1163 302.964 73.3108 302.334 73.6997 301.867C74.0917 301.401 74.6168 301.167 75.275 301.167C75.8914 301.167 76.3791 301.371 76.7381 301.778C77.0971 302.181 77.2767 302.716 77.2767 303.38V303.851H73.8882C73.9032 304.428 74.0483 304.867 74.3236 305.166C74.6018 305.465 74.9923 305.615 75.4949 305.615C76.0245 305.615 76.5481 305.504 77.0657 305.283V305.947C76.8024 306.061 76.5526 306.141 76.3162 306.189C76.0829 306.24 75.8001 306.266 75.468 306.266ZM75.266 301.791C74.8711 301.791 74.5554 301.92 74.3191 302.177C74.0857 302.434 73.9481 302.79 73.9062 303.245H76.4778C76.4778 302.775 76.3731 302.416 76.1636 302.168C75.9542 301.917 75.655 301.791 75.266 301.791ZM78.4435 305.7C78.4435 305.5 78.4884 305.348 78.5782 305.247C78.6709 305.142 78.8026 305.09 78.9731 305.09C79.1467 305.09 79.2813 305.142 79.377 305.247C79.4758 305.348 79.5252 305.5 79.5252 305.7C79.5252 305.895 79.4758 306.044 79.377 306.149C79.2783 306.254 79.1437 306.306 78.9731 306.306C78.8205 306.306 78.6934 306.26 78.5917 306.167C78.4929 306.071 78.4435 305.915 78.4435 305.7ZM83.0796 306.266C82.3526 306.266 81.7781 306.044 81.3563 305.601C80.9374 305.159 80.7279 304.544 80.7279 303.757C80.7279 302.964 80.9224 302.334 81.3114 301.867C81.7033 301.401 82.2284 301.167 82.8867 301.167C83.503 301.167 83.9907 301.371 84.3497 301.778C84.7088 302.181 84.8883 302.716 84.8883 303.38V303.851H81.4999C81.5148 304.428 81.6599 304.867 81.9352 305.166C82.2135 305.465 82.6039 305.615 83.1066 305.615C83.6362 305.615 84.1598 305.504 84.6774 305.283V305.947C84.4141 306.061 84.1642 306.141 83.9279 306.189C83.6945 306.24 83.4118 306.266 83.0796 306.266ZM82.8777 301.791C82.4827 301.791 82.1671 301.92 81.9307 302.177C81.6973 302.434 81.5597 302.79 81.5178 303.245H84.0894C84.0894 302.775 83.9847 302.416 83.7753 302.168C83.5658 301.917 83.2666 301.791 82.8777 301.791ZM87.7516 305.651C87.8833 305.651 88.0104 305.642 88.1331 305.624C88.2558 305.603 88.353 305.582 88.4248 305.561V306.131C88.3441 306.17 88.2244 306.201 88.0658 306.225C87.9102 306.252 87.7696 306.266 87.6439 306.266C86.6925 306.266 86.2167 305.764 86.2167 304.762V301.836H85.5121V301.477L86.2167 301.167L86.5309 300.117H86.9618V301.257H88.3889V301.836H86.9618V304.731C86.9618 305.027 87.0321 305.254 87.1727 305.413C87.3133 305.571 87.5063 305.651 87.7516 305.651ZM92.7782 306.176V302.994C92.7782 302.593 92.6869 302.294 92.5044 302.096C92.3219 301.899 92.0362 301.8 91.6472 301.8C91.1296 301.8 90.7511 301.941 90.5118 302.222C90.2754 302.503 90.1572 302.964 90.1572 303.604V306.176H89.4122V299.192H90.1572V301.306C90.1572 301.561 90.1452 301.772 90.1213 301.939H90.1662C90.3128 301.703 90.5207 301.517 90.79 301.383C91.0623 301.245 91.372 301.176 91.719 301.176C92.3204 301.176 92.7707 301.32 93.0699 301.607C93.3721 301.891 93.5232 302.345 93.5232 302.967V306.176H92.7782Z" class="path-9"/> -<path d="M100.374 303.658C100.374 302.865 100.49 302.123 100.72 301.432C100.953 300.741 101.288 300.135 101.725 299.614H102.452C102.021 300.192 101.697 300.826 101.478 301.517C101.263 302.208 101.155 302.919 101.155 303.649C101.155 304.367 101.266 305.069 101.487 305.754C101.709 306.439 102.027 307.064 102.443 307.63H101.725C101.285 307.121 100.95 306.527 100.72 305.848C100.49 305.169 100.374 304.439 100.374 303.658ZM107.753 306.176L106.936 304.089H104.306L103.498 306.176H102.726L105.32 299.587H105.962L108.543 306.176H107.753ZM106.698 303.402L105.935 301.369C105.836 301.112 105.735 300.796 105.63 300.422C105.564 300.709 105.47 301.025 105.347 301.369L104.575 303.402H106.698ZM110.077 306.176H109.332V299.192H110.077V306.176ZM112.402 306.176H111.657V301.257H112.402V306.176ZM111.594 299.924C111.594 299.753 111.636 299.629 111.72 299.552C111.804 299.471 111.909 299.43 112.034 299.43C112.154 299.43 112.257 299.471 112.344 299.552C112.431 299.632 112.474 299.756 112.474 299.924C112.474 300.092 112.431 300.217 112.344 300.301C112.257 300.382 112.154 300.422 112.034 300.422C111.909 300.422 111.804 300.382 111.72 300.301C111.636 300.217 111.594 300.092 111.594 299.924ZM115.948 306.266C115.236 306.266 114.684 306.047 114.292 305.61C113.903 305.17 113.708 304.55 113.708 303.748C113.708 302.925 113.906 302.289 114.301 301.84C114.699 301.392 115.264 301.167 115.997 301.167C116.233 301.167 116.47 301.193 116.706 301.243C116.943 301.294 117.128 301.354 117.263 301.423L117.034 302.056C116.869 301.99 116.69 301.936 116.495 301.894C116.301 301.849 116.129 301.827 115.979 301.827C114.98 301.827 114.48 302.464 114.48 303.739C114.48 304.343 114.601 304.807 114.844 305.13C115.089 305.453 115.451 305.615 115.93 305.615C116.34 305.615 116.76 305.527 117.191 305.35V306.01C116.862 306.18 116.447 306.266 115.948 306.266ZM120.44 306.266C119.713 306.266 119.139 306.044 118.717 305.601C118.298 305.159 118.088 304.544 118.088 303.757C118.088 302.964 118.283 302.334 118.672 301.867C119.064 301.401 119.589 301.167 120.247 301.167C120.864 301.167 121.351 301.371 121.71 301.778C122.069 302.181 122.249 302.716 122.249 303.38V303.851H118.86C118.875 304.428 119.02 304.867 119.296 305.166C119.574 305.465 119.964 305.615 120.467 305.615C120.997 305.615 121.52 305.504 122.038 305.283V305.947C121.775 306.061 121.525 306.141 121.288 306.189C121.055 306.24 120.772 306.266 120.44 306.266ZM120.238 301.791C119.843 301.791 119.528 301.92 119.291 302.177C119.058 302.434 118.92 302.79 118.878 303.245H121.45C121.45 302.775 121.345 302.416 121.136 302.168C120.926 301.917 120.627 301.791 120.238 301.791ZM125.085 303.658C125.085 304.445 124.969 305.178 124.735 305.857C124.505 306.536 124.171 307.127 123.734 307.63H123.016C123.432 307.067 123.751 306.444 123.972 305.758C124.194 305.07 124.304 304.367 124.304 303.649C124.304 302.919 124.195 302.208 123.977 301.517C123.761 300.826 123.438 300.192 123.007 299.614H123.734C124.174 300.138 124.509 300.747 124.74 301.441C124.97 302.132 125.085 302.871 125.085 303.658Z" class="path-10"/> -<g style="mix-blend-mode:difference"> -<mask id="mask1_22982_89608" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="147" y="294" width="16" height="17"> -<circle cx="154.893" cy="302.675" r="7.87835" fill="#C4C4C4"/> -</mask> -<g mask="url(#mask1_22982_89608)"> -<rect x="147.015" y="294.797" width="15.7567" height="15.7567" fill="url(#pattern1_22982_89608)"/> -<rect x="147.015" y="294.797" width="15.7567" height="15.7567" fill="#01FF57" style="mix-blend-mode:overlay"/> -</g> -</g> -<path d="M172.822 302.886C172.822 304.02 172.642 304.867 172.283 305.426C171.927 305.986 171.381 306.266 170.645 306.266C169.939 306.266 169.402 305.98 169.034 305.408C168.666 304.834 168.482 303.993 168.482 302.886C168.482 301.743 168.66 300.895 169.016 300.341C169.372 299.788 169.915 299.511 170.645 299.511C171.357 299.511 171.897 299.8 172.265 300.377C172.636 300.955 172.822 301.791 172.822 302.886ZM169.236 302.886C169.236 303.841 169.348 304.536 169.572 304.973C169.797 305.407 170.154 305.624 170.645 305.624C171.142 305.624 171.501 305.404 171.722 304.964C171.946 304.521 172.059 303.829 172.059 302.886C172.059 301.944 171.946 301.254 171.722 300.817C171.501 300.377 171.142 300.157 170.645 300.157C170.154 300.157 169.797 300.374 169.572 300.808C169.348 301.239 169.236 301.932 169.236 302.886ZM175.259 303.658L173.549 301.257H174.397L175.694 303.142L176.986 301.257H177.826L176.116 303.658L177.915 306.176H177.072L175.694 304.183L174.303 306.176H173.459L175.259 303.658ZM181.313 306.176H180.586V301.499C180.586 301.11 180.598 300.742 180.622 300.395C180.559 300.458 180.489 300.524 180.411 300.593C180.333 300.662 179.977 300.953 179.343 301.468L178.948 300.956L180.685 299.614H181.313V306.176ZM186.573 306.176H185.846V301.499C185.846 301.11 185.858 300.742 185.882 300.395C185.819 300.458 185.748 300.524 185.671 300.593C185.593 300.662 185.237 300.953 184.603 301.468L184.208 300.956L185.944 299.614H186.573V306.176ZM192.439 306.176L192.29 305.476H192.255C192.009 305.784 191.764 305.993 191.519 306.104C191.276 306.212 190.973 306.266 190.607 306.266C190.12 306.266 189.737 306.14 189.459 305.889C189.183 305.637 189.046 305.28 189.046 304.816C189.046 303.823 189.84 303.302 191.429 303.254L192.264 303.227V302.922C192.264 302.536 192.18 302.252 192.012 302.069C191.848 301.884 191.583 301.791 191.218 301.791C190.808 301.791 190.344 301.917 189.827 302.168L189.598 301.598C189.84 301.466 190.105 301.363 190.392 301.288C190.682 301.214 190.973 301.176 191.263 301.176C191.849 301.176 192.283 301.306 192.564 301.567C192.849 301.827 192.991 302.244 192.991 302.819V306.176H192.439ZM190.756 305.651C191.219 305.651 191.583 305.524 191.846 305.269C192.112 305.015 192.246 304.659 192.246 304.201V303.757L191.501 303.788C190.908 303.809 190.48 303.902 190.217 304.066C189.957 304.228 189.827 304.481 189.827 304.825C189.827 305.094 189.907 305.299 190.069 305.44C190.233 305.58 190.462 305.651 190.756 305.651ZM196.496 306.266C195.784 306.266 195.232 306.047 194.84 305.61C194.451 305.17 194.256 304.55 194.256 303.748C194.256 302.925 194.454 302.289 194.849 301.84C195.247 301.392 195.812 301.167 196.545 301.167C196.781 301.167 197.018 301.193 197.254 301.243C197.491 301.294 197.676 301.354 197.811 301.423L197.582 302.056C197.417 301.99 197.238 301.936 197.043 301.894C196.849 301.849 196.677 301.827 196.527 301.827C195.528 301.827 195.028 302.464 195.028 303.739C195.028 304.343 195.149 304.807 195.392 305.13C195.637 305.453 195.999 305.615 196.478 305.615C196.888 305.615 197.308 305.527 197.739 305.35V306.01C197.41 306.18 196.995 306.266 196.496 306.266ZM198.803 305.7C198.803 305.5 198.847 305.348 198.937 305.247C199.03 305.142 199.162 305.09 199.332 305.09C199.506 305.09 199.64 305.142 199.736 305.247C199.835 305.348 199.884 305.5 199.884 305.7C199.884 305.895 199.835 306.044 199.736 306.149C199.637 306.254 199.503 306.306 199.332 306.306C199.18 306.306 199.052 306.26 198.951 306.167C198.852 306.071 198.803 305.915 198.803 305.7ZM201.253 305.7C201.253 305.5 201.298 305.348 201.388 305.247C201.48 305.142 201.612 305.09 201.783 305.09C201.956 305.09 202.091 305.142 202.187 305.247C202.285 305.348 202.335 305.5 202.335 305.7C202.335 305.895 202.285 306.044 202.187 306.149C202.088 306.254 201.953 306.306 201.783 306.306C201.63 306.306 201.503 306.26 201.401 306.167C201.302 306.071 201.253 305.915 201.253 305.7ZM203.703 305.7C203.703 305.5 203.748 305.348 203.838 305.247C203.931 305.142 204.062 305.09 204.233 305.09C204.407 305.09 204.541 305.142 204.637 305.247C204.736 305.348 204.785 305.5 204.785 305.7C204.785 305.895 204.736 306.044 204.637 306.149C204.538 306.254 204.404 306.306 204.233 306.306C204.08 306.306 203.953 306.26 203.852 306.167C203.753 306.071 203.703 305.915 203.703 305.7ZM205.997 303.371C205.997 302.081 206.247 301.118 206.746 300.481C207.249 299.84 207.991 299.52 208.972 299.52C209.31 299.52 209.577 299.549 209.771 299.605V300.247C209.541 300.172 209.278 300.135 208.981 300.135C208.278 300.135 207.741 300.355 207.37 300.795C206.999 301.232 206.796 301.92 206.76 302.859H206.814C207.143 302.345 207.663 302.087 208.375 302.087C208.965 302.087 209.429 302.265 209.767 302.621C210.108 302.977 210.278 303.461 210.278 304.071C210.278 304.753 210.091 305.29 209.717 305.682C209.346 306.071 208.844 306.266 208.209 306.266C207.53 306.266 206.992 306.011 206.594 305.503C206.196 304.991 205.997 304.28 205.997 303.371ZM208.2 305.633C208.625 305.633 208.954 305.5 209.188 305.233C209.424 304.964 209.542 304.577 209.542 304.071C209.542 303.637 209.433 303.296 209.215 303.048C208.996 302.799 208.67 302.675 208.236 302.675C207.967 302.675 207.72 302.73 207.496 302.841C207.271 302.952 207.092 303.104 206.957 303.299C206.826 303.493 206.76 303.695 206.76 303.905C206.76 304.213 206.82 304.5 206.939 304.767C207.059 305.033 207.228 305.244 207.446 305.399C207.668 305.555 207.919 305.633 208.2 305.633ZM212.011 306.176L214.73 300.301H211.154V299.614H215.52V300.211L212.837 306.176H212.011ZM218.859 306.266C218.132 306.266 217.558 306.044 217.136 305.601C216.717 305.159 216.508 304.544 216.508 303.757C216.508 302.964 216.702 302.334 217.091 301.867C217.483 301.401 218.008 301.167 218.666 301.167C219.283 301.167 219.77 301.371 220.13 301.778C220.489 302.181 220.668 302.716 220.668 303.38V303.851H217.28C217.295 304.428 217.44 304.867 217.715 305.166C217.993 305.465 218.384 305.615 218.886 305.615C219.416 305.615 219.94 305.504 220.457 305.283V305.947C220.194 306.061 219.944 306.141 219.708 306.189C219.474 306.24 219.192 306.266 218.859 306.266ZM218.657 301.791C218.263 301.791 217.947 301.92 217.71 302.177C217.477 302.434 217.339 302.79 217.298 303.245H219.869C219.869 302.775 219.764 302.416 219.555 302.168C219.346 301.917 219.046 301.791 218.657 301.791ZM225.915 306.176H221.602V305.534L223.329 303.797C223.856 303.265 224.203 302.885 224.371 302.657C224.538 302.43 224.664 302.208 224.748 301.993C224.831 301.778 224.873 301.546 224.873 301.297C224.873 300.947 224.767 300.671 224.555 300.467C224.342 300.261 224.048 300.157 223.671 300.157C223.398 300.157 223.139 300.202 222.894 300.292C222.652 300.382 222.381 300.545 222.082 300.781L221.687 300.274C222.291 299.771 222.949 299.52 223.662 299.52C224.278 299.52 224.761 299.679 225.111 299.996C225.461 300.31 225.636 300.733 225.636 301.266C225.636 301.682 225.52 302.093 225.286 302.5C225.053 302.907 224.616 303.422 223.976 304.044L222.54 305.449V305.485H225.915V306.176Z" class="path-11"/> -<path d="M232.644 303.658C232.644 302.865 232.76 302.123 232.99 301.432C233.223 300.741 233.558 300.135 233.995 299.614H234.722C234.291 300.192 233.967 300.826 233.748 301.517C233.533 302.208 233.425 302.919 233.425 303.649C233.425 304.367 233.536 305.069 233.757 305.754C233.979 306.439 234.297 307.064 234.713 307.63H233.995C233.555 307.121 233.22 306.527 232.99 305.848C232.76 305.169 232.644 304.439 232.644 303.658ZM235.898 299.614H237.752C238.622 299.614 239.252 299.744 239.641 300.005C240.03 300.265 240.225 300.676 240.225 301.239C240.225 301.628 240.115 301.95 239.897 302.204C239.682 302.455 239.366 302.618 238.95 302.693V302.738C239.946 302.909 240.445 303.432 240.445 304.309C240.445 304.895 240.246 305.353 239.848 305.682C239.453 306.011 238.899 306.176 238.187 306.176H235.898V299.614ZM236.661 302.424H237.918C238.456 302.424 238.844 302.34 239.08 302.172C239.317 302.002 239.435 301.716 239.435 301.315C239.435 300.947 239.303 300.682 239.04 300.521C238.776 300.356 238.358 300.274 237.783 300.274H236.661V302.424ZM236.661 303.07V305.525H238.03C238.56 305.525 238.957 305.423 239.224 305.22C239.493 305.013 239.628 304.692 239.628 304.255C239.628 303.848 239.49 303.549 239.215 303.357C238.943 303.166 238.527 303.07 237.967 303.07H236.661ZM245.992 303.712C245.992 304.514 245.79 305.141 245.386 305.592C244.982 306.041 244.424 306.266 243.712 306.266C243.272 306.266 242.881 306.162 242.54 305.956C242.199 305.749 241.936 305.453 241.751 305.067C241.565 304.681 241.472 304.229 241.472 303.712C241.472 302.91 241.673 302.286 242.074 301.84C242.475 301.392 243.031 301.167 243.743 301.167C244.431 301.167 244.977 301.396 245.381 301.854C245.788 302.312 245.992 302.931 245.992 303.712ZM242.244 303.712C242.244 304.34 242.37 304.819 242.621 305.148C242.873 305.477 243.242 305.642 243.73 305.642C244.217 305.642 244.587 305.479 244.838 305.153C245.093 304.823 245.22 304.343 245.22 303.712C245.22 303.087 245.093 302.612 244.838 302.289C244.587 301.963 244.214 301.8 243.721 301.8C243.233 301.8 242.865 301.96 242.617 302.28C242.368 302.6 242.244 303.078 242.244 303.712ZM249.591 301.176C250.237 301.176 250.738 301.398 251.095 301.84C251.454 302.28 251.633 302.904 251.633 303.712C251.633 304.52 251.452 305.148 251.09 305.597C250.731 306.043 250.231 306.266 249.591 306.266C249.271 306.266 248.978 306.207 248.711 306.091C248.448 305.971 248.227 305.788 248.047 305.543H247.993L247.836 306.176H247.302V299.192H248.047V300.889C248.047 301.269 248.035 301.61 248.011 301.912H248.047C248.394 301.422 248.909 301.176 249.591 301.176ZM249.483 301.8C248.975 301.8 248.608 301.947 248.384 302.24C248.159 302.53 248.047 303.021 248.047 303.712C248.047 304.403 248.162 304.898 248.393 305.197C248.623 305.494 248.993 305.642 249.501 305.642C249.959 305.642 250.3 305.476 250.525 305.144C250.749 304.808 250.861 304.328 250.861 303.703C250.861 303.063 250.749 302.585 250.525 302.271C250.3 301.957 249.953 301.8 249.483 301.8ZM254.501 303.658C254.501 304.445 254.384 305.178 254.151 305.857C253.92 306.536 253.587 307.127 253.15 307.63H252.432C252.848 307.067 253.166 306.444 253.388 305.758C253.609 305.07 253.72 304.367 253.72 303.649C253.72 302.919 253.611 302.208 253.392 301.517C253.177 300.826 252.854 300.192 252.423 299.614H253.15C253.59 300.138 253.925 300.747 254.155 301.441C254.386 302.132 254.501 302.871 254.501 303.658Z" class="path-12"/> -<line x1="36.0078" y1="331.234" x2="310" y2="331.234" stroke-width="0.656529" class="line-1"/> -<line x1="36.0078" y1="276.086" x2="310" y2="276.086" stroke-width="0.656529" class="line-2"/> -<g clip-path="url(#clip0_22982_89608)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M41.123 346.209C41.123 346.454 41.0679 346.596 40.9786 346.676L43.4578 347.415C43.5257 347.357 43.6141 347.321 43.711 347.321C43.9251 347.321 44.0986 347.494 44.0986 347.707C44.0986 347.862 44.0067 347.996 43.8744 348.057L44.7424 350.554C45.0175 350.598 45.1993 350.662 45.1993 350.748C45.1993 351.098 44.5135 351.382 43.6674 351.382C42.8214 351.382 42.1355 351.098 42.1355 350.748C42.1355 350.657 42.3409 350.59 42.6452 350.546L43.5161 348.041C43.4362 347.994 43.3746 347.92 43.3443 347.831C43.3151 347.71 43.2471 347.633 43.1402 347.601C43.0125 347.563 42.8874 347.559 42.7477 347.554C42.5712 347.548 42.3715 347.541 42.1138 347.464L40.8539 347.088V349.656C40.952 349.726 41.0162 349.84 41.0162 349.97C41.0162 350.056 40.9877 350.135 40.9401 350.199C41.0681 350.294 41.1514 350.445 41.1514 350.616C41.1514 350.823 41.0297 351.002 40.8539 351.086V351.624C41.426 351.654 41.8617 351.808 41.8617 351.994C41.8617 351.996 41.8617 351.999 41.8615 352.001C42.785 352.081 43.4226 352.25 43.4226 352.446L43.4271 352.72C43.4271 352.993 42.1986 353.212 40.6804 353.212C39.1622 353.212 37.9337 352.989 37.9337 352.716L37.9247 352.446C37.9247 352.253 38.5419 352.086 39.4414 352.005C39.441 352.001 39.4408 351.997 39.4408 351.994C39.4408 351.811 39.8627 351.659 40.4213 351.625V351.094C40.2358 351.014 40.1058 350.831 40.1058 350.616C40.1058 350.445 40.1891 350.294 40.3171 350.199C40.2695 350.135 40.241 350.056 40.241 349.97C40.241 349.833 40.3131 349.713 40.4213 349.644V346.959L38.9845 346.53C38.8889 346.502 38.7489 346.426 38.5993 346.345C38.4278 346.252 38.2436 346.153 38.0993 346.11C37.9993 346.08 37.8967 346.101 37.7914 346.174C37.7711 346.191 37.7491 346.205 37.7257 346.218L38.5918 348.709C38.8796 348.753 39.0716 348.819 39.0716 348.906C39.0716 349.257 38.3857 349.541 37.5397 349.541C36.6937 349.541 36.0078 349.257 36.0078 348.906C36.0078 348.821 36.1885 348.757 36.4621 348.713L37.3359 346.2C37.2293 346.131 37.1586 346.011 37.1586 345.876C37.1586 345.662 37.3321 345.489 37.5462 345.489C37.7206 345.489 37.8679 345.604 37.9166 345.762L40.1432 346.426C40.1311 346.365 40.1246 346.293 40.1246 346.209C40.1246 345.88 40.291 345.491 40.6238 345.043C40.9566 345.491 41.123 345.88 41.123 346.209ZM43.7978 348.083L44.6521 350.541C44.113 350.469 43.2917 350.466 42.7352 350.534L43.5904 348.074C43.6284 348.086 43.6689 348.093 43.7111 348.093C43.7409 348.093 43.7699 348.09 43.7978 348.083ZM36.5526 348.7L37.4089 346.236C37.4517 346.252 37.4978 346.262 37.5462 346.262C37.5822 346.262 37.617 346.256 37.6501 346.247L38.5015 348.697C37.944 348.625 37.1012 348.626 36.5526 348.7Z" class="path-13"/> -</g> -<path d="M54.1632 346.589C53.4422 346.589 52.8722 346.83 52.4533 347.312C52.0374 347.79 51.8295 348.447 51.8295 349.282C51.8295 350.14 52.0299 350.805 52.4309 351.274C52.8348 351.741 53.4092 351.975 54.1543 351.975C54.612 351.975 55.1341 351.892 55.7206 351.728V352.396C55.2658 352.567 54.7048 352.652 54.0376 352.652C53.0712 352.652 52.3246 352.359 51.7981 351.773C51.2745 351.186 51.0127 350.353 51.0127 349.273C51.0127 348.597 51.1383 348.004 51.3897 347.496C51.644 346.987 52.009 346.595 52.4847 346.32C52.9634 346.044 53.5259 345.907 54.1722 345.907C54.8604 345.907 55.4618 346.032 55.9764 346.284L55.6532 346.939C55.1566 346.706 54.6599 346.589 54.1632 346.589ZM61.2857 350.099C61.2857 350.9 61.0837 351.527 60.6798 351.979C60.2759 352.428 59.7179 352.652 59.0058 352.652C58.5659 352.652 58.1755 352.549 57.8344 352.343C57.4933 352.136 57.23 351.84 57.0445 351.454C56.859 351.068 56.7663 350.616 56.7663 350.099C56.7663 349.297 56.9667 348.673 57.3677 348.227C57.7686 347.778 58.3251 347.554 59.0372 347.554C59.7253 347.554 60.2714 347.783 60.6753 348.241C61.0822 348.698 61.2857 349.318 61.2857 350.099ZM57.5382 350.099C57.5382 350.727 57.6639 351.206 57.9152 351.535C58.1665 351.864 58.536 352.028 59.0237 352.028C59.5114 352.028 59.8809 351.865 60.1323 351.539C60.3866 351.21 60.5137 350.73 60.5137 350.099C60.5137 349.473 60.3866 348.999 60.1323 348.676C59.8809 348.35 59.5084 348.187 59.0147 348.187C58.5271 348.187 58.159 348.347 57.9107 348.667C57.6624 348.987 57.5382 349.464 57.5382 350.099ZM63.2963 347.644V350.835C63.2963 351.236 63.3875 351.535 63.5701 351.732C63.7526 351.93 64.0383 352.028 64.4273 352.028C64.9419 352.028 65.3174 351.888 65.5538 351.607C65.7931 351.325 65.9128 350.866 65.9128 350.229V347.644H66.6578V352.562H66.0429L65.9352 351.903H65.8948C65.7422 352.145 65.5298 352.331 65.2575 352.459C64.9883 352.588 64.6801 352.652 64.333 352.652C63.7346 352.652 63.2858 352.51 62.9866 352.226C62.6904 351.942 62.5423 351.487 62.5423 350.862V347.644H63.2963ZM70.4861 347.554C70.7045 347.554 70.9004 347.572 71.074 347.608L70.9708 348.299C70.7673 348.254 70.5878 348.232 70.4322 348.232C70.0343 348.232 69.6932 348.393 69.4089 348.716C69.1277 349.039 68.9871 349.442 68.9871 349.924V352.562H68.2421V347.644H68.8569L68.9422 348.555H68.9781C69.1606 348.235 69.3805 347.988 69.6378 347.814C69.8951 347.641 70.1779 347.554 70.4861 347.554ZM73.5828 352.037C73.7144 352.037 73.8416 352.028 73.9642 352.01C74.0869 351.99 74.1842 351.969 74.256 351.948V352.518C74.1752 352.557 74.0555 352.588 73.8969 352.612C73.7413 352.639 73.6007 352.652 73.4751 352.652C72.5236 352.652 72.0479 352.151 72.0479 351.149V348.223H71.3433V347.864L72.0479 347.554L72.362 346.504H72.7929V347.644H74.2201V348.223H72.7929V351.117C72.7929 351.414 72.8632 351.641 73.0038 351.8C73.1444 351.958 73.3374 352.037 73.5828 352.037ZM75.1356 352.087C75.1356 351.886 75.1805 351.735 75.2703 351.633C75.363 351.529 75.4947 351.476 75.6652 351.476C75.8387 351.476 75.9734 351.529 76.0691 351.633C76.1679 351.735 76.2172 351.886 76.2172 352.087C76.2172 352.281 76.1679 352.431 76.0691 352.536C75.9704 352.64 75.8357 352.693 75.6652 352.693C75.5126 352.693 75.3854 352.646 75.2837 352.554C75.185 352.458 75.1356 352.302 75.1356 352.087ZM75.1356 348.124C75.1356 347.72 75.3121 347.518 75.6652 347.518C76.0332 347.518 76.2172 347.72 76.2172 348.124C76.2172 348.318 76.1679 348.468 76.0691 348.573C75.9704 348.677 75.8357 348.73 75.6652 348.73C75.5126 348.73 75.3854 348.683 75.2837 348.591C75.185 348.495 75.1356 348.339 75.1356 348.124Z" class="path-14"/> -<path d="M89.0362 352.562H87.7212L84.4943 347.334H84.4584L84.4809 347.626C84.5227 348.182 84.5437 348.691 84.5437 349.152V352.562H83.5698V346.001H84.8713L88.0892 351.203H88.1161C88.1101 351.134 88.0982 350.884 88.0802 350.453C88.0623 350.019 88.0533 349.681 88.0533 349.439V346.001H89.0362V352.562ZM95.0591 350.072C95.0591 350.882 94.8511 351.515 94.4352 351.97C94.0193 352.425 93.4404 352.652 92.6984 352.652C92.2346 352.652 91.8247 352.548 91.4687 352.338C91.1126 352.129 90.8388 351.828 90.6474 351.436C90.4559 351.044 90.3601 350.589 90.3601 350.072C90.3601 349.267 90.5666 348.638 90.9795 348.187C91.3924 347.735 91.9743 347.509 92.7253 347.509C93.4434 347.509 94.0119 347.741 94.4307 348.205C94.8496 348.665 95.0591 349.288 95.0591 350.072ZM91.4462 350.072C91.4462 351.218 91.8696 351.791 92.7163 351.791C93.5541 351.791 93.973 351.218 93.973 350.072C93.973 348.938 93.5511 348.371 92.7073 348.371C92.2645 348.371 91.9429 348.517 91.7424 348.811C91.545 349.104 91.4462 349.524 91.4462 350.072ZM100.642 352.562H99.5829V349.511C99.5829 349.128 99.5052 348.842 99.3496 348.653C99.197 348.465 98.9531 348.371 98.618 348.371C98.1722 348.371 97.8461 348.502 97.6396 348.766C97.4332 349.029 97.33 349.47 97.33 350.09V352.562H96.2753V347.599H97.1011L97.2492 348.25H97.303C97.4526 348.013 97.6651 347.831 97.9403 347.702C98.2156 347.573 98.5208 347.509 98.8559 347.509C100.047 347.509 100.642 348.115 100.642 349.327V352.562ZM101.679 350.547V349.65H103.986V350.547H101.679ZM107.45 352.562H106.378V346.921H104.448V346.001H109.38V346.921H107.45V352.562ZM112.446 352.652C111.674 352.652 111.069 352.428 110.632 351.979C110.199 351.527 109.982 350.906 109.982 350.117C109.982 349.306 110.184 348.668 110.588 348.205C110.991 347.741 111.546 347.509 112.253 347.509C112.908 347.509 113.425 347.708 113.805 348.106C114.185 348.504 114.375 349.051 114.375 349.749V350.319H111.068C111.083 350.8 111.213 351.171 111.458 351.432C111.704 351.689 112.049 351.817 112.495 351.817C112.788 351.817 113.06 351.791 113.312 351.737C113.566 351.68 113.838 351.587 114.129 351.458V352.316C113.871 352.438 113.611 352.525 113.348 352.576C113.084 352.627 112.784 352.652 112.446 352.652ZM112.253 348.308C111.917 348.308 111.648 348.414 111.445 348.627C111.244 348.839 111.125 349.149 111.086 349.556H113.339C113.333 349.146 113.234 348.836 113.042 348.627C112.851 348.414 112.588 348.308 112.253 348.308ZM117.575 352.652C116.824 352.652 116.253 352.434 115.861 351.997C115.472 351.557 115.277 350.927 115.277 350.108C115.277 349.273 115.481 348.631 115.888 348.182C116.298 347.733 116.889 347.509 117.661 347.509C118.184 347.509 118.655 347.606 119.074 347.801L118.756 348.649C118.31 348.475 117.942 348.389 117.652 348.389C116.793 348.389 116.364 348.959 116.364 350.099C116.364 350.655 116.47 351.074 116.682 351.355C116.898 351.633 117.212 351.773 117.625 351.773C118.094 351.773 118.539 351.656 118.958 351.423V352.343C118.769 352.453 118.567 352.533 118.352 352.58C118.139 352.628 117.88 352.652 117.575 352.652ZM124.491 352.562H123.432V349.511C123.432 349.128 123.354 348.842 123.199 348.653C123.046 348.465 122.802 348.371 122.467 348.371C122.024 348.371 121.698 348.504 121.489 348.77C121.282 349.033 121.179 349.476 121.179 350.099V352.562H120.124V345.579H121.179V347.352C121.179 347.636 121.161 347.94 121.125 348.263H121.193C121.336 348.024 121.535 347.838 121.79 347.706C122.047 347.575 122.346 347.509 122.687 347.509C123.89 347.509 124.491 348.115 124.491 349.327V352.562ZM130.326 352.562H129.267V349.511C129.267 349.128 129.189 348.842 129.033 348.653C128.881 348.465 128.637 348.371 128.302 348.371C127.856 348.371 127.53 348.502 127.323 348.766C127.117 349.029 127.014 349.47 127.014 350.09V352.562H125.959V347.599H126.785L126.933 348.25H126.987C127.136 348.013 127.349 347.831 127.624 347.702C127.899 347.573 128.204 347.509 128.539 347.509C129.73 347.509 130.326 348.115 130.326 349.327V352.562ZM132.848 352.562H131.793V347.599H132.848V352.562ZM131.73 346.284C131.73 346.095 131.781 345.95 131.883 345.848C131.988 345.747 132.136 345.696 132.327 345.696C132.513 345.696 132.656 345.747 132.758 345.848C132.863 345.95 132.915 346.095 132.915 346.284C132.915 346.463 132.863 346.605 132.758 346.71C132.656 346.812 132.513 346.863 132.327 346.863C132.136 346.863 131.988 346.812 131.883 346.71C131.781 346.605 131.73 346.463 131.73 346.284ZM136.362 352.652C135.611 352.652 135.04 352.434 134.648 351.997C134.259 351.557 134.064 350.927 134.064 350.108C134.064 349.273 134.268 348.631 134.675 348.182C135.084 347.733 135.675 347.509 136.447 347.509C136.971 347.509 137.442 347.606 137.861 347.801L137.542 348.649C137.097 348.475 136.729 348.389 136.438 348.389C135.58 348.389 135.15 348.959 135.15 350.099C135.15 350.655 135.256 351.074 135.469 351.355C135.684 351.633 135.999 351.773 136.411 351.773C136.881 351.773 137.325 351.656 137.744 351.423V352.343C137.556 352.453 137.354 352.533 137.138 352.58C136.926 352.628 136.667 352.652 136.362 352.652ZM142.017 352.562L141.806 351.871H141.77C141.531 352.174 141.29 352.38 141.048 352.491C140.805 352.598 140.494 352.652 140.114 352.652C139.626 352.652 139.245 352.521 138.97 352.257C138.697 351.994 138.561 351.622 138.561 351.14C138.561 350.628 138.751 350.242 139.131 349.982C139.511 349.722 140.09 349.579 140.868 349.556L141.725 349.529V349.264C141.725 348.947 141.65 348.71 141.501 348.555C141.354 348.396 141.125 348.317 140.814 348.317C140.56 348.317 140.316 348.354 140.083 348.429C139.849 348.504 139.625 348.592 139.409 348.694L139.068 347.94C139.338 347.799 139.632 347.693 139.952 347.621C140.273 347.546 140.575 347.509 140.859 347.509C141.49 347.509 141.966 347.647 142.286 347.922C142.609 348.197 142.771 348.63 142.771 349.219V352.562H142.017ZM140.446 351.844C140.829 351.844 141.136 351.738 141.366 351.526C141.6 351.31 141.716 351.01 141.716 350.624V350.193L141.079 350.22C140.582 350.238 140.22 350.321 139.993 350.471C139.768 350.618 139.656 350.844 139.656 351.149C139.656 351.37 139.722 351.542 139.854 351.665C139.985 351.785 140.183 351.844 140.446 351.844ZM145.298 352.562H144.243V345.579H145.298V352.562Z" class="path-15"/> -<g clip-path="url(#clip1_22982_89608)"> -<path d="M43.3433 362.719H38.0405C37.5524 362.719 37.1567 363.105 37.1567 363.58V371.91L40.6919 369.9L44.2271 371.91V363.58C44.2271 363.105 43.8314 362.719 43.3433 362.719ZM43.3433 370.41L40.6919 368.902L38.0405 370.41V363.688C38.0405 363.66 38.0522 363.632 38.0729 363.612C38.0936 363.592 38.1217 363.58 38.151 363.58H43.2328C43.2938 363.58 43.3433 363.629 43.3433 363.688V370.41Z" class="path-16"/> -</g> -<path d="M54.1632 364.843C53.4422 364.843 52.8722 365.084 52.4533 365.565C52.0374 366.044 51.8295 366.701 51.8295 367.536C51.8295 368.394 52.0299 369.059 52.4309 369.528C52.8348 369.995 53.4092 370.228 54.1543 370.228C54.612 370.228 55.1341 370.146 55.7206 369.982V370.65C55.2658 370.821 54.7048 370.906 54.0376 370.906C53.0712 370.906 52.3246 370.613 51.7981 370.027C51.2745 369.44 51.0127 368.607 51.0127 367.527C51.0127 366.851 51.1383 366.258 51.3897 365.749C51.644 365.241 52.009 364.849 52.4847 364.574C52.9634 364.298 53.5259 364.161 54.1722 364.161C54.8604 364.161 55.4618 364.286 55.9764 364.538L55.6532 365.193C55.1566 364.96 54.6599 364.843 54.1632 364.843ZM60.0649 370.816L59.9168 370.116H59.8809C59.6356 370.424 59.3902 370.634 59.1449 370.745C58.9025 370.852 58.5989 370.906 58.2338 370.906C57.7461 370.906 57.3632 370.781 57.0849 370.529C56.8096 370.278 56.672 369.92 56.672 369.457C56.672 368.463 57.4664 367.943 59.0551 367.895L59.8899 367.868V367.563C59.8899 367.177 59.8061 366.892 59.6386 366.71C59.474 366.524 59.2092 366.432 58.8442 366.432C58.4343 366.432 57.9705 366.557 57.4529 366.809L57.224 366.239C57.4664 366.107 57.7312 366.004 58.0184 365.929C58.3086 365.854 58.5989 365.817 58.8891 365.817C59.4755 365.817 59.9094 365.947 60.1906 366.207C60.4748 366.468 60.617 366.885 60.617 367.459V370.816H60.0649ZM58.3819 370.291C58.8457 370.291 59.2092 370.164 59.4725 369.91C59.7388 369.656 59.872 369.299 59.872 368.842V368.397L59.1269 368.429C58.5345 368.45 58.1067 368.542 57.8434 368.707C57.5831 368.869 57.4529 369.121 57.4529 369.466C57.4529 369.735 57.5337 369.94 57.6953 370.08C57.8598 370.221 58.0887 370.291 58.3819 370.291ZM63.7451 370.291C63.8767 370.291 64.0039 370.282 64.1266 370.264C64.2492 370.243 64.3465 370.222 64.4183 370.202V370.772C64.3375 370.81 64.2178 370.842 64.0592 370.866C63.9037 370.893 63.763 370.906 63.6374 370.906C62.6859 370.906 62.2102 370.405 62.2102 369.403V366.477H61.5056V366.117L62.2102 365.808L62.5244 364.758H62.9552V365.898H64.3824V366.477H62.9552V369.371C62.9552 369.667 63.0255 369.895 63.1661 370.053C63.3068 370.212 63.4997 370.291 63.7451 370.291ZM67.4836 370.906C66.7565 370.906 66.1821 370.685 65.7602 370.242C65.3413 369.799 65.1319 369.184 65.1319 368.397C65.1319 367.605 65.3264 366.975 65.7153 366.508C66.1073 366.041 66.6324 365.808 67.2906 365.808C67.907 365.808 68.3946 366.011 68.7537 366.418C69.1127 366.822 69.2922 367.356 69.2922 368.02V368.492H65.9038C65.9188 369.069 66.0639 369.507 66.3391 369.807C66.6174 370.106 67.0079 370.255 67.5105 370.255C68.0401 370.255 68.5637 370.145 69.0813 369.923V370.588C68.818 370.701 68.5682 370.782 68.3318 370.83C68.0984 370.881 67.8157 370.906 67.4836 370.906ZM67.2816 366.432C66.8867 366.432 66.571 366.56 66.3347 366.818C66.1013 367.075 65.9637 367.431 65.9218 367.886H68.4934C68.4934 367.416 68.3887 367.057 68.1792 366.809C67.9698 366.557 67.6706 366.432 67.2816 366.432ZM74.5926 365.898V366.369L73.6815 366.477C73.7653 366.581 73.8401 366.719 73.9059 366.889C73.9717 367.057 74.0046 367.247 74.0046 367.459C74.0046 367.941 73.8401 368.326 73.511 368.613C73.1818 368.9 72.73 369.044 72.1556 369.044C72.009 369.044 71.8713 369.032 71.7427 369.008C71.4255 369.175 71.267 369.386 71.267 369.641C71.267 369.775 71.3223 369.875 71.433 369.941C71.5437 370.004 71.7337 370.035 72.003 370.035H72.8737C73.4062 370.035 73.8146 370.148 74.0989 370.372C74.3861 370.596 74.5297 370.923 74.5297 371.35C74.5297 371.895 74.3113 372.309 73.8745 372.594C73.4377 372.881 72.8004 373.024 71.9626 373.024C71.3193 373.024 70.8227 372.905 70.4726 372.665C70.1255 372.426 69.952 372.088 69.952 371.651C69.952 371.352 70.0477 371.093 70.2392 370.875C70.4307 370.656 70.7 370.508 71.0471 370.43C70.9214 370.374 70.8152 370.285 70.7284 370.166C70.6446 370.046 70.6027 369.907 70.6027 369.748C70.6027 369.569 70.6506 369.412 70.7464 369.277C70.8421 369.142 70.9932 369.012 71.1996 368.887C70.9453 368.782 70.7374 368.604 70.5758 368.352C70.4172 368.101 70.3379 367.814 70.3379 367.491C70.3379 366.952 70.4995 366.538 70.8227 366.248C71.1458 365.954 71.6036 365.808 72.196 365.808C72.4533 365.808 72.6852 365.838 72.8916 365.898H74.5926ZM70.6701 371.642C70.6701 371.908 70.7823 372.11 71.0067 372.248C71.2311 372.386 71.5527 372.455 71.9716 372.455C72.5969 372.455 73.0592 372.36 73.3584 372.172C73.6606 371.986 73.8117 371.733 73.8117 371.413C73.8117 371.147 73.7294 370.962 73.5648 370.857C73.4003 370.755 73.0906 370.704 72.6358 370.704H71.7427C71.4046 370.704 71.1413 370.785 70.9528 370.947C70.7643 371.108 70.6701 371.34 70.6701 371.642ZM71.074 367.473C71.074 367.817 71.1712 368.077 71.3657 368.254C71.5602 368.43 71.831 368.519 72.178 368.519C72.9051 368.519 73.2686 368.165 73.2686 367.459C73.2686 366.72 72.9006 366.351 72.1646 366.351C71.8145 366.351 71.5452 366.445 71.3567 366.634C71.1682 366.822 71.074 367.102 71.074 367.473ZM79.848 368.352C79.848 369.154 79.646 369.781 79.2421 370.233C78.8382 370.682 78.2802 370.906 77.5681 370.906C77.1283 370.906 76.7378 370.803 76.3967 370.596C76.0557 370.39 75.7924 370.094 75.6069 369.708C75.4213 369.322 75.3286 368.87 75.3286 368.352C75.3286 367.551 75.5291 366.927 75.93 366.481C76.3309 366.032 76.8874 365.808 77.5995 365.808C78.2877 365.808 78.8337 366.037 79.2376 366.494C79.6445 366.952 79.848 367.572 79.848 368.352ZM76.1005 368.352C76.1005 368.981 76.2262 369.46 76.4775 369.789C76.7288 370.118 77.0984 370.282 77.5861 370.282C78.0738 370.282 78.4433 370.119 78.6946 369.793C78.9489 369.464 79.0761 368.984 79.0761 368.352C79.0761 367.727 78.9489 367.253 78.6946 366.93C78.4433 366.604 78.0708 366.441 77.5771 366.441C77.0894 366.441 76.7214 366.601 76.473 366.921C76.2247 367.241 76.1005 367.718 76.1005 368.352ZM83.4025 365.808C83.6209 365.808 83.8169 365.826 83.9904 365.862L83.8872 366.553C83.6837 366.508 83.5042 366.485 83.3486 366.485C82.9507 366.485 82.6096 366.647 82.3254 366.97C82.0441 367.293 81.9035 367.696 81.9035 368.177V370.816H81.1585V365.898H81.7734L81.8586 366.809H81.8945C82.077 366.488 82.297 366.242 82.5543 366.068C82.8116 365.895 83.0943 365.808 83.4025 365.808ZM84.1295 365.898H84.9284L86.0055 368.703C86.2419 369.343 86.3885 369.805 86.4454 370.089H86.4813C86.5202 369.937 86.6009 369.676 86.7236 369.308C86.8493 368.937 87.2562 367.8 87.9443 365.898H88.7432L86.6294 371.499C86.4199 372.052 86.1746 372.444 85.8933 372.674C85.6151 372.908 85.2725 373.024 84.8656 373.024C84.6382 373.024 84.4138 372.999 84.1924 372.948V372.351C84.3569 372.387 84.5409 372.405 84.7444 372.405C85.256 372.405 85.6211 372.118 85.8395 371.543L86.1132 370.843L84.1295 365.898ZM89.4344 370.341C89.4344 370.14 89.4792 369.989 89.569 369.887C89.6617 369.783 89.7934 369.73 89.9639 369.73C90.1375 369.73 90.2721 369.783 90.3679 369.887C90.4666 369.989 90.516 370.14 90.516 370.341C90.516 370.535 90.4666 370.685 90.3679 370.789C90.2691 370.894 90.1345 370.947 89.9639 370.947C89.8113 370.947 89.6842 370.9 89.5825 370.807C89.4837 370.712 89.4344 370.556 89.4344 370.341ZM89.4344 366.378C89.4344 365.974 89.6109 365.772 89.9639 365.772C90.332 365.772 90.516 365.974 90.516 366.378C90.516 366.572 90.4666 366.722 90.3679 366.827C90.2691 366.931 90.1345 366.984 89.9639 366.984C89.8113 366.984 89.6842 366.937 89.5825 366.845C89.4837 366.749 89.4344 366.593 89.4344 366.378Z" class="path-17"/> -<path d="M99.3806 370.816H98.3169V364.255H102.02V365.162H99.3806V367.213H101.853V368.124H99.3806V370.816ZM105.614 365.763C105.827 365.763 106.002 365.778 106.14 365.808L106.036 366.791C105.887 366.755 105.731 366.737 105.57 366.737C105.148 366.737 104.805 366.874 104.542 367.15C104.281 367.425 104.151 367.783 104.151 368.222V370.816H103.097V365.853H103.922L104.062 366.728H104.115C104.28 366.432 104.494 366.197 104.757 366.023C105.023 365.85 105.309 365.763 105.614 365.763ZM109.232 370.906C108.46 370.906 107.855 370.682 107.419 370.233C106.985 369.781 106.768 369.16 106.768 368.37C106.768 367.56 106.97 366.922 107.374 366.459C107.778 365.995 108.333 365.763 109.039 365.763C109.694 365.763 110.212 365.962 110.592 366.36C110.972 366.758 111.162 367.305 111.162 368.002V368.572H107.854C107.869 369.054 107.999 369.425 108.244 369.685C108.49 369.943 108.835 370.071 109.281 370.071C109.574 370.071 109.847 370.044 110.098 369.991C110.352 369.934 110.625 369.841 110.915 369.712V370.57C110.657 370.692 110.397 370.779 110.134 370.83C109.871 370.881 109.57 370.906 109.232 370.906ZM109.039 366.562C108.704 366.562 108.434 366.668 108.231 366.88C108.03 367.093 107.911 367.403 107.872 367.809H110.125C110.119 367.4 110.02 367.09 109.829 366.88C109.637 366.668 109.374 366.562 109.039 366.562ZM114.528 370.906C113.756 370.906 113.151 370.682 112.714 370.233C112.281 369.781 112.064 369.16 112.064 368.37C112.064 367.56 112.266 366.922 112.67 366.459C113.073 365.995 113.628 365.763 114.335 365.763C114.99 365.763 115.507 365.962 115.887 366.36C116.267 366.758 116.457 367.305 116.457 368.002V368.572H113.15C113.165 369.054 113.295 369.425 113.54 369.685C113.786 369.943 114.131 370.071 114.577 370.071C114.87 370.071 115.142 370.044 115.394 369.991C115.648 369.934 115.92 369.841 116.211 369.712V370.57C115.953 370.692 115.693 370.779 115.43 370.83C115.166 370.881 114.866 370.906 114.528 370.906ZM114.335 366.562C113.999 366.562 113.73 366.668 113.527 366.88C113.326 367.093 113.207 367.403 113.168 367.809H115.421C115.415 367.4 115.316 367.09 115.124 366.88C114.933 366.668 114.67 366.562 114.335 366.562ZM118.71 370.816H117.656V363.833H118.71V370.816ZM123.329 370.816L123.118 370.125H123.082C122.842 370.427 122.601 370.634 122.359 370.745C122.117 370.852 121.806 370.906 121.426 370.906C120.938 370.906 120.556 370.775 120.281 370.511C120.009 370.248 119.873 369.875 119.873 369.394C119.873 368.882 120.063 368.496 120.443 368.236C120.823 367.976 121.402 367.833 122.18 367.809L123.037 367.783V367.518C123.037 367.201 122.962 366.964 122.812 366.809C122.666 366.65 122.437 366.571 122.126 366.571C121.871 366.571 121.628 366.608 121.394 366.683C121.161 366.758 120.936 366.846 120.721 366.948L120.38 366.194C120.649 366.053 120.944 365.947 121.264 365.875C121.584 365.8 121.886 365.763 122.171 365.763C122.802 365.763 123.278 365.901 123.598 366.176C123.921 366.451 124.082 366.883 124.082 367.473V370.816H123.329ZM121.758 370.098C122.141 370.098 122.447 369.992 122.678 369.78C122.911 369.564 123.028 369.264 123.028 368.878V368.447L122.391 368.474C121.894 368.492 121.532 368.575 121.304 368.725C121.08 368.872 120.968 369.098 120.968 369.403C120.968 369.624 121.034 369.796 121.165 369.919C121.297 370.038 121.494 370.098 121.758 370.098ZM129.921 370.816H128.862V367.765C128.862 367.382 128.784 367.096 128.629 366.907C128.476 366.719 128.232 366.625 127.897 366.625C127.451 366.625 127.125 366.756 126.919 367.02C126.712 367.283 126.609 367.724 126.609 368.344V370.816H125.555V365.853H126.38L126.528 366.503H126.582C126.732 366.267 126.944 366.085 127.22 365.956C127.495 365.827 127.8 365.763 128.135 365.763C129.326 365.763 129.921 366.369 129.921 367.581V370.816ZM133.391 370.906C132.64 370.906 132.068 370.688 131.676 370.251C131.287 369.811 131.093 369.181 131.093 368.361C131.093 367.527 131.296 366.885 131.703 366.436C132.113 365.987 132.704 365.763 133.476 365.763C133.999 365.763 134.471 365.86 134.89 366.055L134.571 366.903C134.125 366.729 133.757 366.643 133.467 366.643C132.608 366.643 132.179 367.213 132.179 368.352C132.179 368.909 132.285 369.328 132.497 369.609C132.713 369.887 133.027 370.027 133.44 370.027C133.91 370.027 134.354 369.91 134.773 369.676V370.596C134.584 370.707 134.382 370.786 134.167 370.834C133.955 370.882 133.696 370.906 133.391 370.906ZM136.994 370.816H135.94V365.853H136.994V370.816ZM135.877 364.538C135.877 364.349 135.928 364.204 136.03 364.102C136.134 364.001 136.282 363.95 136.474 363.95C136.659 363.95 136.803 364.001 136.905 364.102C137.009 364.204 137.062 364.349 137.062 364.538C137.062 364.717 137.009 364.859 136.905 364.964C136.803 365.066 136.659 365.117 136.474 365.117C136.282 365.117 136.134 365.066 136.03 364.964C135.928 364.859 135.877 364.717 135.877 364.538ZM142.874 370.816H141.815V367.765C141.815 367.382 141.737 367.096 141.581 366.907C141.429 366.719 141.185 366.625 140.85 366.625C140.404 366.625 140.078 366.756 139.871 367.02C139.665 367.283 139.562 367.724 139.562 368.344V370.816H138.507V365.853H139.333L139.481 366.503H139.535C139.684 366.267 139.897 366.085 140.172 365.956C140.447 365.827 140.752 365.763 141.087 365.763C142.278 365.763 142.874 366.369 142.874 367.581V370.816ZM148.533 365.853V366.432L147.685 366.589C147.763 366.693 147.827 366.822 147.878 366.975C147.929 367.127 147.954 367.289 147.954 367.459C147.954 367.971 147.778 368.373 147.425 368.667C147.071 368.96 146.585 369.106 145.966 369.106C145.807 369.106 145.664 369.095 145.535 369.071C145.308 369.211 145.194 369.376 145.194 369.564C145.194 369.678 145.246 369.763 145.351 369.82C145.459 369.877 145.655 369.905 145.939 369.905H146.805C147.353 369.905 147.769 370.022 148.053 370.255C148.337 370.489 148.479 370.825 148.479 371.265C148.479 371.828 148.247 372.262 147.784 372.567C147.32 372.872 146.65 373.024 145.773 373.024C145.097 373.024 144.581 372.905 144.225 372.665C143.869 372.426 143.691 372.085 143.691 371.642C143.691 371.337 143.786 371.08 143.978 370.87C144.172 370.664 144.443 370.52 144.79 370.439C144.649 370.38 144.533 370.284 144.44 370.152C144.35 370.018 144.305 369.877 144.305 369.73C144.305 369.545 144.358 369.388 144.462 369.259C144.567 369.13 144.723 369.003 144.929 368.878C144.672 368.767 144.462 368.587 144.301 368.339C144.142 368.088 144.063 367.794 144.063 367.459C144.063 366.921 144.232 366.503 144.57 366.207C144.911 365.911 145.396 365.763 146.024 365.763C146.165 365.763 146.312 365.773 146.464 365.794C146.62 365.812 146.736 365.832 146.814 365.853H148.533ZM144.633 371.588C144.633 371.816 144.735 371.991 144.938 372.113C145.145 372.236 145.433 372.297 145.804 372.297C146.379 372.297 146.807 372.215 147.088 372.051C147.369 371.886 147.51 371.668 147.51 371.395C147.51 371.18 147.432 371.026 147.276 370.933C147.124 370.843 146.838 370.798 146.419 370.798H145.62C145.318 370.798 145.077 370.869 144.898 371.009C144.721 371.153 144.633 371.346 144.633 371.588ZM145.086 367.459C145.086 367.771 145.166 368.01 145.324 368.177C145.486 368.345 145.716 368.429 146.015 368.429C146.626 368.429 146.931 368.103 146.931 367.45C146.931 367.127 146.855 366.879 146.702 366.705C146.552 366.529 146.323 366.441 146.015 366.441C145.71 366.441 145.478 366.527 145.32 366.701C145.164 366.874 145.086 367.127 145.086 367.459Z" class="path-18"/> -<g clip-path="url(#clip2_22982_89608)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M170.838 365.85C170.653 366.287 170.555 366.751 170.544 367.229C170.543 367.276 170.505 367.314 170.456 367.314H169.8C169.788 367.314 169.777 367.312 169.766 367.308C169.755 367.303 169.745 367.296 169.737 367.288C169.729 367.28 169.723 367.27 169.718 367.259C169.714 367.248 169.712 367.236 169.712 367.225C169.759 364.728 171.799 362.719 174.306 362.719C175.777 362.719 177.085 363.409 177.927 364.486L178.544 364.003C178.601 363.957 178.685 363.999 178.685 364.072L178.676 366.052C178.676 366.108 178.623 366.149 178.568 366.136L176.645 365.665C176.629 365.662 176.615 365.653 176.603 365.641C176.592 365.63 176.584 365.615 176.58 365.599C176.577 365.583 176.578 365.566 176.584 365.55C176.59 365.535 176.6 365.521 176.613 365.511L177.271 364.997C177.177 364.877 177.075 364.762 176.967 364.653C176.625 364.309 176.218 364.035 175.771 363.846C175.308 363.65 174.816 363.55 174.307 363.55C173.798 363.55 173.306 363.65 172.842 363.846C172.393 364.035 171.991 364.306 171.645 364.653C171.299 365 171.028 365.402 170.838 365.85ZM178.16 367.314H178.816C178.828 367.314 178.84 367.317 178.85 367.321C178.861 367.326 178.871 367.332 178.879 367.341C178.887 367.349 178.894 367.359 178.898 367.37C178.902 367.381 178.904 367.393 178.904 367.404C178.857 369.9 176.818 371.91 174.31 371.91C172.84 371.91 171.531 371.22 170.69 370.144L170.072 370.627C170.016 370.673 169.931 370.631 169.931 370.558L169.939 368.577C169.939 368.521 169.993 368.48 170.047 368.493L171.97 368.963C171.986 368.967 172 368.976 172.012 368.988C172.023 368.999 172.031 369.014 172.035 369.03C172.038 369.046 172.037 369.063 172.031 369.079C172.026 369.094 172.016 369.108 172.003 369.118L171.344 369.632C171.438 369.752 171.54 369.867 171.648 369.976C171.997 370.326 172.412 370.604 172.868 370.793C173.325 370.982 173.815 371.079 174.309 371.079C174.804 371.079 175.294 370.983 175.751 370.793C176.208 370.604 176.622 370.326 176.971 369.976C177.317 369.63 177.589 369.227 177.778 368.779C177.963 368.342 178.061 367.878 178.072 367.4C178.073 367.353 178.112 367.314 178.16 367.314ZM175.832 366.781L175.984 366.933C176.047 366.996 176.047 367.099 175.984 367.162L175.146 367.999C175.083 368.063 174.981 368.063 174.918 367.999L174.766 367.847C174.702 367.784 174.702 367.682 174.766 367.619L174.804 367.581L174.537 367.314L173.992 367.86L174.03 367.898C174.114 367.982 174.114 368.118 174.03 368.202L173.257 368.975C173.173 369.059 173.037 369.059 172.952 368.975L172.648 368.67C172.564 368.586 172.564 368.45 172.648 368.365L173.42 367.593C173.504 367.509 173.641 367.509 173.725 367.593L173.763 367.631L174.309 367.085L174.042 366.819L174.004 366.857C173.941 366.92 173.839 366.92 173.775 366.857L173.623 366.705C173.56 366.642 173.56 366.539 173.623 366.476L174.461 365.638C174.524 365.575 174.626 365.575 174.689 365.638L174.842 365.791C174.905 365.854 174.905 365.956 174.842 366.019L174.804 366.057L175.565 366.819L175.603 366.781C175.666 366.718 175.769 366.718 175.832 366.781Z" class="path-19"/> -</g> -<path d="M185.821 368.088V370.816H185.058V364.255H186.858C187.663 364.255 188.257 364.409 188.64 364.717C189.026 365.025 189.219 365.489 189.219 366.109C189.219 366.976 188.779 367.563 187.899 367.868L189.681 370.816H188.779L187.19 368.088H185.821ZM185.821 367.432H186.867C187.406 367.432 187.8 367.326 188.052 367.114C188.303 366.898 188.429 366.577 188.429 366.149C188.429 365.715 188.3 365.402 188.043 365.211C187.789 365.019 187.379 364.924 186.813 364.924H185.821V367.432ZM194.874 368.352C194.874 369.154 194.672 369.781 194.268 370.233C193.864 370.682 193.306 370.906 192.594 370.906C192.154 370.906 191.763 370.803 191.422 370.596C191.081 370.39 190.818 370.094 190.632 369.708C190.447 369.322 190.354 368.87 190.354 368.352C190.354 367.551 190.555 366.927 190.956 366.481C191.356 366.032 191.913 365.808 192.625 365.808C193.313 365.808 193.859 366.037 194.263 366.494C194.67 366.952 194.874 367.572 194.874 368.352ZM191.126 368.352C191.126 368.981 191.252 369.46 191.503 369.789C191.754 370.118 192.124 370.282 192.612 370.282C193.099 370.282 193.469 370.119 193.72 369.793C193.974 369.464 194.102 368.984 194.102 368.352C194.102 367.727 193.974 367.253 193.72 366.93C193.469 366.604 193.096 366.441 192.603 366.441C192.115 366.441 191.747 366.601 191.499 366.921C191.25 367.241 191.126 367.718 191.126 368.352ZM196.884 365.898V369.089C196.884 369.489 196.975 369.789 197.158 369.986C197.34 370.184 197.626 370.282 198.015 370.282C198.53 370.282 198.905 370.142 199.142 369.86C199.381 369.579 199.501 369.12 199.501 368.483V365.898H200.246V370.816H199.631L199.523 370.157H199.483C199.33 370.399 199.118 370.585 198.845 370.713C198.576 370.842 198.268 370.906 197.921 370.906C197.323 370.906 196.874 370.764 196.575 370.48C196.278 370.196 196.13 369.741 196.13 369.115V365.898H196.884ZM205.196 370.816V367.634C205.196 367.233 205.105 366.934 204.922 366.737C204.74 366.539 204.454 366.441 204.065 366.441C203.55 366.441 203.173 366.58 202.934 366.858C202.695 367.136 202.575 367.596 202.575 368.236V370.816H201.83V365.898H202.436L202.557 366.571H202.593C202.746 366.328 202.959 366.141 203.235 366.01C203.51 365.875 203.817 365.808 204.155 365.808C204.747 365.808 205.193 365.951 205.492 366.239C205.791 366.523 205.941 366.979 205.941 367.607V370.816H205.196ZM210.824 370.157H210.784C210.439 370.656 209.925 370.906 209.24 370.906C208.596 370.906 208.095 370.686 207.736 370.246C207.38 369.807 207.202 369.181 207.202 368.37C207.202 367.56 207.382 366.93 207.741 366.481C208.1 366.032 208.599 365.808 209.24 365.808C209.907 365.808 210.418 366.05 210.775 366.535H210.833L210.801 366.18L210.784 365.835V363.833H211.529V370.816H210.923L210.824 370.157ZM209.334 370.282C209.843 370.282 210.211 370.145 210.438 369.869C210.668 369.591 210.784 369.144 210.784 368.528V368.37C210.784 367.673 210.667 367.177 210.433 366.88C210.203 366.581 209.834 366.432 209.325 366.432C208.888 366.432 208.553 366.602 208.32 366.943C208.089 367.281 207.974 367.76 207.974 368.379C207.974 369.008 208.089 369.482 208.32 369.802C208.55 370.122 208.888 370.282 209.334 370.282ZM213.005 370.341C213.005 370.14 213.05 369.989 213.14 369.887C213.232 369.783 213.364 369.73 213.535 369.73C213.708 369.73 213.843 369.783 213.939 369.887C214.037 369.989 214.087 370.14 214.087 370.341C214.087 370.535 214.037 370.685 213.939 370.789C213.84 370.894 213.705 370.947 213.535 370.947C213.382 370.947 213.255 370.9 213.153 370.807C213.054 370.712 213.005 370.556 213.005 370.341ZM213.005 366.378C213.005 365.974 213.182 365.772 213.535 365.772C213.903 365.772 214.087 365.974 214.087 366.378C214.087 366.572 214.037 366.722 213.939 366.827C213.84 366.931 213.705 366.984 213.535 366.984C213.382 366.984 213.255 366.937 213.153 366.845C213.054 366.749 213.005 366.593 213.005 366.378Z" class="path-20"/> -<path d="M224.658 370.816H223.603V366.58C223.603 366.074 223.615 365.673 223.639 365.377C223.57 365.449 223.485 365.528 223.383 365.615C223.285 365.702 222.949 365.977 222.378 366.441L221.848 365.772L223.778 364.255H224.658V370.816Z" class="path-21"/> -<defs> -<filter id="filter0_d_22982_89608" x="0.682432" y="0.227477" width="344.635" height="402.635" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.54505"/> -<feGaussianBlur stdDeviation="1.15878"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_22982_89608"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_22982_89608" result="shape"/> -</filter> -<pattern id="pattern0_22982_89608" patternContentUnits="objectBoundingBox" width="1" height="1"> -<use xlink:href="#image0_22982_89608" transform="scale(0.0125)"/> -</pattern> -<pattern id="pattern1_22982_89608" patternContentUnits="objectBoundingBox" width="1" height="1"> -<use xlink:href="#image0_22982_89608" transform="scale(0.0125)"/> -</pattern> -<clipPath id="clip0_22982_89608"> -<rect width="9.19141" height="9.19141" fill="white" transform="translate(36.0078 344.469)"/> -</clipPath> -<clipPath id="clip1_22982_89608"> -<rect width="9.19141" height="9.19141" fill="white" transform="translate(36.0078 362.719)"/> -</clipPath> -<clipPath id="clip2_22982_89608"> -<rect width="9.19141" height="9.19141" fill="white" transform="translate(169.712 362.719)"/> -</clipPath> -<image id="image0_22982_89608" width="80" height="80" xlink:href="data:image/png;base64,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"/> -</defs> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/mini-guides/onboarding/how-it-works.svg b/web/src/assets/svgs/mini-guides/onboarding/how-it-works.svg deleted file mode 100644 index c4fdd0567..000000000 --- a/web/src/assets/svgs/mini-guides/onboarding/how-it-works.svg +++ /dev/null @@ -1,29 +0,0 @@ -<svg viewBox="0 0 385 297" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<g filter="url(#filter0_d_13917_210783)"> -<rect x="3" y="1" width="379" height="291" rx="3" class="rect-1"/> -<rect x="3.5" y="1.5" width="378" height="290" rx="2.5" stroke="#42498F" class="rect-2"/> -</g> -<g clip-path="url(#clip0_13917_210783)"> -<path d="M98.6724 123.445C95.0671 123.652 87.9013 124.406 83.4776 127.148C83.1724 127.337 82.9993 127.674 82.9993 128.025V152.263C82.9993 153.033 83.8303 153.519 84.5309 153.162C89.0822 150.842 95.6645 150.21 98.9191 150.036C100.03 149.977 100.894 149.075 100.894 147.994V125.49C100.895 124.31 99.8842 123.376 98.6724 123.445ZM80.4164 127.148C75.9934 124.406 68.8276 123.653 65.2224 123.445C64.0105 123.376 63 124.31 63 125.49V147.995C63 149.077 63.8638 149.979 64.975 150.037C68.2309 150.21 74.8164 150.844 79.3678 153.165C80.0664 153.521 80.8947 153.035 80.8947 152.268V128.013C80.8947 127.661 80.7224 127.338 80.4164 127.148Z" class="path-1"/> -</g> -<path d="M142.076 150.152H139.324V139.013H126.857V150.152H124.105V126.482H126.857V136.552H139.324V126.482H142.076V150.152ZM163.496 141.264C163.496 144.157 162.767 146.418 161.31 148.048C159.853 149.667 157.84 150.476 155.271 150.476C153.685 150.476 152.276 150.104 151.046 149.359C149.815 148.614 148.865 147.546 148.196 146.153C147.527 144.761 147.192 143.131 147.192 141.264C147.192 138.371 147.915 136.121 149.362 134.512C150.808 132.893 152.816 132.084 155.385 132.084C157.867 132.084 159.837 132.91 161.294 134.561C162.762 136.212 163.496 138.447 163.496 141.264ZM149.977 141.264C149.977 143.53 150.43 145.257 151.337 146.445C152.244 147.632 153.577 148.226 155.336 148.226C157.095 148.226 158.428 147.637 159.335 146.461C160.253 145.274 160.711 143.541 160.711 141.264C160.711 139.008 160.253 137.297 159.335 136.131C158.428 134.955 157.085 134.367 155.304 134.367C153.544 134.367 152.217 134.944 151.321 136.099C150.425 137.254 149.977 138.976 149.977 141.264ZM182.714 150.152L179.46 139.742C179.255 139.105 178.871 137.659 178.31 135.403H178.181C177.749 137.292 177.371 138.749 177.047 139.774L173.696 150.152H170.587L165.746 132.408H168.564C169.708 136.865 170.577 140.26 171.17 142.591C171.775 144.923 172.12 146.493 172.206 147.303H172.336C172.455 146.688 172.644 145.894 172.903 144.923C173.172 143.941 173.405 143.163 173.599 142.591L176.853 132.408H179.767L182.941 142.591C183.545 144.448 183.955 146.008 184.171 147.27H184.301C184.344 146.882 184.457 146.283 184.641 145.473C184.835 144.664 185.963 140.309 188.024 132.408H190.809L185.903 150.152H182.714ZM205.332 150.152H202.644V132.408H205.332V150.152ZM202.418 127.599C202.418 126.984 202.569 126.536 202.871 126.255C203.173 125.964 203.551 125.818 204.004 125.818C204.436 125.818 204.808 125.964 205.121 126.255C205.434 126.547 205.591 126.995 205.591 127.599C205.591 128.204 205.434 128.657 205.121 128.959C204.808 129.251 204.436 129.396 204.004 129.396C203.551 129.396 203.173 129.251 202.871 128.959C202.569 128.657 202.418 128.204 202.418 127.599ZM216.762 148.258C217.237 148.258 217.696 148.226 218.139 148.161C218.581 148.085 218.932 148.01 219.191 147.934V149.99C218.899 150.131 218.468 150.244 217.896 150.33C217.334 150.428 216.827 150.476 216.374 150.476C212.941 150.476 211.225 148.668 211.225 145.052V134.496H208.683V133.201L211.225 132.084L212.359 128.295H213.913V132.408H219.061V134.496H213.913V144.939C213.913 146.008 214.166 146.828 214.674 147.4C215.181 147.972 215.877 148.258 216.762 148.258ZM245.856 150.152L242.602 139.742C242.397 139.105 242.014 137.659 241.453 135.403H241.323C240.891 137.292 240.514 138.749 240.19 139.774L236.838 150.152H233.73L228.889 132.408H231.706C232.85 136.865 233.719 140.26 234.313 142.591C234.917 144.923 235.263 146.493 235.349 147.303H235.478C235.597 146.688 235.786 145.894 236.045 144.923C236.315 143.941 236.547 143.163 236.741 142.591L239.996 132.408H242.91L246.083 142.591C246.688 144.448 247.098 146.008 247.314 147.27H247.443C247.486 146.882 247.6 146.283 247.783 145.473C247.977 144.664 249.105 140.309 251.167 132.408H253.952L249.046 150.152H245.856ZM272.49 141.264C272.49 144.157 271.761 146.418 270.304 148.048C268.847 149.667 266.834 150.476 264.265 150.476C262.678 150.476 261.27 150.104 260.039 149.359C258.809 148.614 257.859 147.546 257.19 146.153C256.521 144.761 256.186 143.131 256.186 141.264C256.186 138.371 256.909 136.121 258.355 134.512C259.802 132.893 261.809 132.084 264.378 132.084C266.861 132.084 268.831 132.91 270.288 134.561C271.756 136.212 272.49 138.447 272.49 141.264ZM258.971 141.264C258.971 143.53 259.424 145.257 260.331 146.445C261.237 147.632 262.57 148.226 264.33 148.226C266.089 148.226 267.422 147.637 268.329 146.461C269.246 145.274 269.705 143.541 269.705 141.264C269.705 139.008 269.246 137.297 268.329 136.131C267.422 134.955 266.078 134.367 264.297 134.367C262.538 134.367 261.21 134.944 260.314 136.099C259.419 137.254 258.971 138.976 258.971 141.264ZM285.312 132.084C286.1 132.084 286.807 132.149 287.433 132.278L287.061 134.771C286.327 134.61 285.679 134.529 285.118 134.529C283.683 134.529 282.452 135.111 281.427 136.277C280.412 137.443 279.905 138.895 279.905 140.632V150.152H277.217V132.408H279.435L279.743 135.694H279.872C280.531 134.539 281.324 133.649 282.252 133.023C283.181 132.397 284.201 132.084 285.312 132.084ZM293.408 141.07C293.872 140.411 294.579 139.548 295.529 138.479L301.26 132.408H304.449L297.261 139.969L304.951 150.152H301.697L295.431 141.766L293.408 143.514V150.152H290.752V124.96H293.408V138.317C293.408 138.911 293.364 139.828 293.278 141.07H293.408ZM319.62 145.311C319.62 146.963 319.005 148.236 317.774 149.132C316.544 150.028 314.817 150.476 312.593 150.476C310.24 150.476 308.405 150.104 307.088 149.359V146.866C307.941 147.297 308.853 147.637 309.825 147.886C310.807 148.134 311.751 148.258 312.658 148.258C314.061 148.258 315.14 148.037 315.896 147.594C316.652 147.141 317.029 146.456 317.029 145.538C317.029 144.847 316.727 144.259 316.123 143.773C315.529 143.277 314.363 142.694 312.626 142.025C310.974 141.41 309.798 140.875 309.096 140.422C308.405 139.958 307.887 139.434 307.542 138.851C307.207 138.269 307.04 137.572 307.04 136.763C307.04 135.317 307.628 134.178 308.805 133.347C309.981 132.505 311.595 132.084 313.646 132.084C315.556 132.084 317.423 132.472 319.247 133.25L318.292 135.435C316.511 134.701 314.898 134.334 313.451 134.334C312.178 134.334 311.217 134.534 310.569 134.933C309.922 135.333 309.598 135.883 309.598 136.585C309.598 137.06 309.717 137.464 309.954 137.799C310.202 138.134 310.596 138.452 311.136 138.754C311.676 139.057 312.712 139.494 314.245 140.066C316.349 140.832 317.769 141.604 318.503 142.381C319.247 143.158 319.62 144.135 319.62 145.311Z" class="path-2"/> -<path d="M176 196.24H208V164.24H176V196.24Z" fill="url(#pattern0)"/> -<defs> -<filter id="filter0_d_13917_210783" x="0" y="0" width="385" height="297" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="2"/> -<feGaussianBlur stdDeviation="1.5"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_13917_210783"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_13917_210783" result="shape"/> -</filter> -<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> -<use xlink:href="#image0_13917_210783" transform="scale(0.00625)"/> -</pattern> -<clipPath id="clip0_13917_210783"> -<rect width="37.8947" height="37.8947" fill="white" transform="translate(63 118.703)" class="rect-3"/> -</clipPath> -<image id="image0_13917_210783" width="160" height="160" xlink:href="data:image/png;base64,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"/> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/onboarding/what-do-i-need.svg b/web/src/assets/svgs/mini-guides/onboarding/what-do-i-need.svg deleted file mode 100644 index 97f325c4e..000000000 --- a/web/src/assets/svgs/mini-guides/onboarding/what-do-i-need.svg +++ /dev/null @@ -1,81 +0,0 @@ -<svg width="299" height="348" viewBox="0 0 299 348" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g filter="url(#filter0_d_14063_184039)"> -<rect x="3" y="1" width="293.559" height="343" rx="2.31757" class="rect-1"/> -<rect x="3.38626" y="1.38626" width="292.786" height="342.227" rx="1.93131" stroke-width="0.772523" class="rect-2"/> -</g> -<path d="M34.8684 51.9945C34.5233 51.9945 34.2346 51.9504 34.0023 51.8624V50.801C34.298 50.8749 34.555 50.9119 34.7733 50.9119C35.4633 50.9119 35.8084 50.4753 35.8084 49.6022V42.1191H37.0758V49.56C37.0758 50.3486 36.8874 50.9506 36.5107 51.366C36.1375 51.785 35.5901 51.9945 34.8684 51.9945ZM43.0643 49.8398L42.8901 49.0741H42.8267C42.6542 49.3452 42.4077 49.5582 42.0874 49.7131C41.7705 49.868 41.4079 49.9455 40.9995 49.9455C40.2919 49.9455 39.7638 49.7694 39.4152 49.4174C39.0667 49.0653 38.8924 48.5319 38.8924 47.8173V43.9992H40.144V47.6007C40.144 48.0479 40.2355 48.3841 40.4186 48.6094C40.6017 48.8312 40.8886 48.9421 41.2794 48.9421C41.8004 48.9421 42.1824 48.7872 42.4253 48.4774C42.6718 48.164 42.795 47.6412 42.795 46.9089V43.9992H44.0413V49.8398H43.0643ZM48.773 43.8935C49.023 43.8935 49.2289 43.9111 49.3909 43.9463L49.2694 45.1029C49.0934 45.0606 48.9103 45.0395 48.7202 45.0395C48.2238 45.0395 47.8207 45.2014 47.5109 45.5253C47.2046 45.8492 47.0514 46.2699 47.0514 46.7875V49.8398H45.8104V43.9992H46.7821L46.9458 45.0289H47.0092C47.2028 44.6804 47.4545 44.404 47.7644 44.1998C48.0777 43.9956 48.4139 43.8935 48.773 43.8935ZM55.6593 46.9089C55.6593 47.863 55.4146 48.6076 54.9253 49.1428C54.4359 49.6779 53.7547 49.9455 52.8816 49.9455C52.3359 49.9455 51.8535 49.8222 51.4346 49.5758C51.0156 49.3294 50.6935 48.9755 50.4682 48.5143C50.2429 48.0531 50.1302 47.518 50.1302 46.9089C50.1302 45.9619 50.3731 45.2226 50.859 44.691C51.3448 44.1593 52.0296 43.8935 52.9132 43.8935C53.7582 43.8935 54.4271 44.1664 54.92 44.7121C55.4129 45.2542 55.6593 45.9865 55.6593 46.9089ZM51.4082 46.9089C51.4082 48.2573 51.9064 48.9315 52.9027 48.9315C53.8885 48.9315 54.3813 48.2573 54.3813 46.9089C54.3813 45.5746 53.8849 44.9075 52.8921 44.9075C52.3711 44.9075 51.9926 45.08 51.7567 45.425C51.5244 45.77 51.4082 46.2647 51.4082 46.9089ZM60.053 43.8935C60.303 43.8935 60.509 43.9111 60.6709 43.9463L60.5495 45.1029C60.3734 45.0606 60.1903 45.0395 60.0002 45.0395C59.5038 45.0395 59.1007 45.2014 58.7909 45.5253C58.4846 45.8492 58.3315 46.2699 58.3315 46.7875V49.8398H57.0905V43.9992H58.0621L58.2258 45.0289H58.2892C58.4829 44.6804 58.7346 44.404 59.0444 44.1998C59.3577 43.9956 59.6939 43.8935 60.053 43.8935ZM65.6825 48.1764C65.6825 48.7467 65.4748 49.185 65.0594 49.4913C64.6439 49.7941 64.0489 49.9455 63.2744 49.9455C62.4963 49.9455 61.8714 49.8275 61.3997 49.5916V48.5196C62.0862 48.8365 62.7252 48.9949 63.3166 48.9949C64.0806 48.9949 64.4626 48.7643 64.4626 48.3031C64.4626 48.1552 64.4204 48.032 64.3359 47.9334C64.2514 47.8349 64.1123 47.7328 63.9187 47.6271C63.725 47.5215 63.4557 47.4018 63.1107 47.268C62.4383 47.0075 61.9823 46.747 61.7429 46.4865C61.5071 46.2259 61.3891 45.888 61.3891 45.4725C61.3891 44.9726 61.5898 44.5853 61.9911 44.3107C62.396 44.0326 62.9452 43.8935 63.6388 43.8935C64.3253 43.8935 64.9749 44.0326 65.5874 44.3107L65.1861 45.2454C64.5559 44.9849 64.0261 44.8547 63.5965 44.8547C62.9417 44.8547 62.6143 45.0413 62.6143 45.4144C62.6143 45.5975 62.6988 45.7524 62.8678 45.8792C63.0403 46.0059 63.4135 46.1802 63.9873 46.402C64.4696 46.5886 64.82 46.7593 65.0382 46.9142C65.2565 47.0691 65.4185 47.2487 65.5241 47.4529C65.6297 47.6535 65.6825 47.8947 65.6825 48.1764Z" class="path-1"/> -<path d="M77.8964 49.8398V46.0957C77.8964 45.6239 77.789 45.2719 77.5743 45.0395C77.3595 44.8071 77.0233 44.691 76.5656 44.691C75.9601 44.691 75.5165 44.8547 75.2348 45.1821C74.9532 45.5095 74.8124 46.0499 74.8124 46.8033V49.8398H73.9357V44.052H74.6487L74.7912 44.8441H74.8335C75.013 44.5589 75.2648 44.3389 75.5887 44.184C75.9126 44.0256 76.2734 43.9463 76.6712 43.9463C77.3683 43.9463 77.8929 44.1153 78.245 44.4533C78.597 44.7878 78.773 45.3247 78.773 46.064V49.8398H77.8964ZM83.0242 49.9455C82.1687 49.9455 81.4927 49.6849 80.9963 49.1639C80.5034 48.6428 80.257 47.9194 80.257 46.9934C80.257 46.0605 80.4858 45.3194 80.9435 44.7702C81.4047 44.2209 82.0226 43.9463 82.7971 43.9463C83.5224 43.9463 84.0962 44.1857 84.5187 44.6645C84.9412 45.1398 85.1524 45.7683 85.1524 46.5498V47.1043H81.1653C81.1829 47.7838 81.3537 48.2996 81.6776 48.6516C82.005 49.0037 82.4644 49.1797 83.0559 49.1797C83.679 49.1797 84.2951 49.0495 84.9042 48.7889V49.5705C84.5944 49.7043 84.3004 49.7994 84.0223 49.8557C83.7477 49.9155 83.415 49.9455 83.0242 49.9455ZM82.7865 44.6804C82.3218 44.6804 81.9504 44.8318 81.6723 45.1345C81.3977 45.4373 81.2357 45.8563 81.1864 46.3914H84.2124C84.2124 45.8387 84.0892 45.4162 83.8427 45.124C83.5963 44.8283 83.2442 44.6804 82.7865 44.6804ZM89.0972 49.9455C88.2417 49.9455 87.5658 49.6849 87.0694 49.1639C86.5765 48.6428 86.33 47.9194 86.33 46.9934C86.33 46.0605 86.5589 45.3194 87.0166 44.7702C87.4778 44.2209 88.0956 43.9463 88.8702 43.9463C89.5954 43.9463 90.1693 44.1857 90.5917 44.6645C91.0142 45.1398 91.2254 45.7683 91.2254 46.5498V47.1043H87.2384C87.256 47.7838 87.4267 48.2996 87.7506 48.6516C88.078 49.0037 88.5375 49.1797 89.1289 49.1797C89.7521 49.1797 90.3682 49.0495 90.9772 48.7889V49.5705C90.6674 49.7043 90.3735 49.7994 90.0953 49.8557C89.8207 49.9155 89.488 49.9455 89.0972 49.9455ZM88.8596 44.6804C88.3949 44.6804 88.0235 44.8318 87.7453 45.1345C87.4707 45.4373 87.3088 45.8563 87.2595 46.3914H90.2854C90.2854 45.8387 90.1622 45.4162 89.9158 45.124C89.6693 44.8283 89.3173 44.6804 88.8596 44.6804ZM96.6648 49.0635H96.6173C96.2124 49.6515 95.6068 49.9455 94.8006 49.9455C94.0437 49.9455 93.454 49.6867 93.0315 49.1692C92.6126 48.6516 92.4031 47.9158 92.4031 46.9617C92.4031 46.0077 92.6143 45.2666 93.0368 44.7385C93.4593 44.2104 94.0472 43.9463 94.8006 43.9463C95.5857 43.9463 96.1877 44.2315 96.6067 44.8019H96.6754L96.6384 44.3847L96.6173 43.978V41.6227H97.4939V49.8398H96.781L96.6648 49.0635ZM94.9115 49.2114C95.51 49.2114 95.9431 49.0495 96.2106 48.7256C96.4817 48.3982 96.6173 47.8718 96.6173 47.1466V46.9617C96.6173 46.1414 96.48 45.557 96.2053 45.2085C95.9343 44.8564 95.4995 44.6804 94.901 44.6804C94.387 44.6804 93.9926 44.8811 93.718 45.2824C93.447 45.6802 93.3114 46.2435 93.3114 46.9723C93.3114 47.7116 93.447 48.2697 93.718 48.6464C93.9891 49.0231 94.387 49.2114 94.9115 49.2114ZM105.727 49.8398L105.553 49.016H105.51C105.222 49.3786 104.933 49.6251 104.644 49.7553C104.359 49.8821 104.002 49.9455 103.572 49.9455C102.998 49.9455 102.548 49.7976 102.22 49.5019C101.896 49.2061 101.734 48.7854 101.734 48.2397C101.734 47.0709 102.669 46.4583 104.539 46.402L105.521 46.3703V46.0112C105.521 45.557 105.422 45.2226 105.225 45.0078C105.032 44.7895 104.72 44.6804 104.29 44.6804C103.808 44.6804 103.262 44.8283 102.653 45.124L102.384 44.4533C102.669 44.2984 102.981 44.1769 103.319 44.0889C103.66 44.0009 104.002 43.9569 104.343 43.9569C105.033 43.9569 105.544 44.1101 105.875 44.4163C106.209 44.7226 106.376 45.2138 106.376 45.8897V49.8398H105.727ZM103.746 49.222C104.292 49.222 104.72 49.0724 105.03 48.7731C105.343 48.4738 105.5 48.0549 105.5 47.5162V46.9934L104.623 47.0304C103.926 47.055 103.423 47.1642 103.113 47.3578C102.806 47.5479 102.653 47.8454 102.653 48.2503C102.653 48.5671 102.748 48.8083 102.939 48.9738C103.132 49.1392 103.401 49.222 103.746 49.222ZM115.724 49.8398L114.662 46.4442C114.595 46.2365 114.47 45.7647 114.287 45.0289H114.245C114.104 45.645 113.981 46.1203 113.875 46.4548L112.782 49.8398H111.768L110.189 44.052H111.108C111.481 45.506 111.765 46.6132 111.958 47.3737C112.155 48.1341 112.268 48.6464 112.296 48.9104H112.339C112.377 48.7097 112.439 48.451 112.523 48.1341C112.611 47.8137 112.687 47.5602 112.75 47.3737L113.812 44.052H114.762L115.798 47.3737C115.995 47.9792 116.128 48.4879 116.199 48.8998H116.241C116.255 48.7731 116.292 48.5777 116.352 48.3137C116.415 48.0496 116.783 46.629 117.456 44.052H118.364L116.764 49.8398H115.724ZM122.974 49.8398L122.8 49.016H122.758C122.469 49.3786 122.18 49.6251 121.892 49.7553C121.607 49.8821 121.249 49.9455 120.82 49.9455C120.246 49.9455 119.795 49.7976 119.468 49.5019C119.144 49.2061 118.982 48.7854 118.982 48.2397C118.982 47.0709 119.917 46.4583 121.786 46.402L122.768 46.3703V46.0112C122.768 45.557 122.67 45.2226 122.473 45.0078C122.279 44.7895 121.967 44.6804 121.538 44.6804C121.056 44.6804 120.51 44.8283 119.901 45.124L119.631 44.4533C119.917 44.2984 120.228 44.1769 120.566 44.0889C120.908 44.0009 121.249 43.9569 121.591 43.9569C122.281 43.9569 122.791 44.1101 123.122 44.4163C123.457 44.7226 123.624 45.2138 123.624 45.8897V49.8398H122.974ZM120.994 49.222C121.54 49.222 121.967 49.0724 122.277 48.7731C122.591 48.4738 122.747 48.0549 122.747 47.5162V46.9934L121.871 47.0304C121.174 47.055 120.67 47.1642 120.36 47.3578C120.054 47.5479 119.901 47.8454 119.901 48.2503C119.901 48.5671 119.996 48.8083 120.186 48.9738C120.38 49.1392 120.649 49.222 120.994 49.222ZM126.312 49.8398H125.435V41.6227H126.312V49.8398ZM129.047 49.8398H128.171V41.6227H129.047V49.8398ZM133.351 49.9455C132.496 49.9455 131.82 49.6849 131.323 49.1639C130.831 48.6428 130.584 47.9194 130.584 46.9934C130.584 46.0605 130.813 45.3194 131.271 44.7702C131.732 44.2209 132.35 43.9463 133.124 43.9463C133.849 43.9463 134.423 44.1857 134.846 44.6645C135.268 45.1398 135.48 45.7683 135.48 46.5498V47.1043H131.492C131.51 47.7838 131.681 48.2996 132.005 48.6516C132.332 49.0037 132.792 49.1797 133.383 49.1797C134.006 49.1797 134.622 49.0495 135.231 48.7889V49.5705C134.922 49.7043 134.628 49.7994 134.349 49.8557C134.075 49.9155 133.742 49.9455 133.351 49.9455ZM133.114 44.6804C132.649 44.6804 132.278 44.8318 131.999 45.1345C131.725 45.4373 131.563 45.8563 131.514 46.3914H134.54C134.54 45.8387 134.416 45.4162 134.17 45.124C133.923 44.8283 133.571 44.6804 133.114 44.6804ZM138.849 49.222C139.004 49.222 139.153 49.2114 139.298 49.1903C139.442 49.1656 139.556 49.141 139.641 49.1164V49.787C139.546 49.8328 139.405 49.8698 139.218 49.8979C139.035 49.9296 138.87 49.9455 138.722 49.9455C137.602 49.9455 137.043 49.3558 137.043 48.1764V44.7332H136.214V44.3107L137.043 43.9463L137.412 42.7106H137.919V44.052H139.599V44.7332H137.919V48.1394C137.919 48.4879 138.002 48.7555 138.168 48.9421C138.333 49.1287 138.56 49.222 138.849 49.222Z" class="path-2"/> -<g clip-path="url(#clip0_14063_184039)"> -<path d="M157.002 39.9336C157.429 39.9336 157.774 40.2795 157.774 40.7061C157.774 41.1327 157.429 41.4786 157.002 41.4786H148.118C147.904 41.4786 147.732 41.6525 147.732 41.8649C147.732 42.0773 147.904 42.2512 148.118 42.2512H157.002C157.854 42.2512 158.547 42.944 158.547 43.7962V49.2039C158.547 50.0561 157.854 50.7489 157.002 50.7489H147.732C146.878 50.7489 146.186 50.0561 146.186 49.2039V41.4786C146.186 40.6252 146.878 39.9336 147.732 39.9336H157.002ZM156.229 47.2726C156.657 47.2726 157.002 46.9273 157.002 46.5C157.002 46.0727 156.657 45.7275 156.229 45.7275C155.802 45.7275 155.457 46.0727 155.457 46.5C155.457 46.9273 155.802 47.2726 156.229 47.2726Z" class="path-3"/> -</g> -<path d="M170.383 49.8398L169.321 46.4442C169.254 46.2365 169.13 45.7647 168.946 45.0289H168.904C168.763 45.645 168.64 46.1203 168.535 46.4548L167.441 49.8398H166.427L164.848 44.052H165.767C166.141 45.506 166.424 46.6132 166.618 47.3737C166.815 48.1341 166.927 48.6464 166.956 48.9104H166.998C167.037 48.7097 167.098 48.451 167.183 48.1341C167.271 47.8137 167.346 47.5602 167.41 47.3737L168.471 44.052H169.422L170.457 47.3737C170.654 47.9792 170.788 48.4879 170.858 48.8998H170.9C170.914 48.7731 170.951 48.5777 171.011 48.3137C171.075 48.0496 171.443 46.629 172.115 44.052H173.023L171.423 49.8398H170.383ZM174.951 49.8398H174.074V44.052H174.951V49.8398ZM174 42.4835C174 42.2829 174.05 42.1367 174.148 42.0452C174.247 41.9502 174.37 41.9026 174.518 41.9026C174.659 41.9026 174.78 41.9502 174.882 42.0452C174.984 42.1403 175.035 42.2864 175.035 42.4835C175.035 42.6807 174.984 42.8285 174.882 42.9271C174.78 43.0222 174.659 43.0697 174.518 43.0697C174.37 43.0697 174.247 43.0222 174.148 42.9271C174.05 42.8285 174 42.6807 174 42.4835ZM178.679 49.222C178.834 49.222 178.984 49.2114 179.128 49.1903C179.272 49.1656 179.387 49.141 179.471 49.1164V49.787C179.376 49.8328 179.235 49.8698 179.049 49.8979C178.866 49.9296 178.7 49.9455 178.552 49.9455C177.433 49.9455 176.873 49.3558 176.873 48.1764V44.7332H176.044V44.3107L176.873 43.9463L177.243 42.7106H177.75V44.052H179.429V44.7332H177.75V48.1394C177.75 48.4879 177.832 48.7555 177.998 48.9421C178.163 49.1287 178.39 49.222 178.679 49.222ZM184.594 49.8398V46.0957C184.594 45.6239 184.486 45.2719 184.272 45.0395C184.057 44.8071 183.721 44.691 183.263 44.691C182.654 44.691 182.209 44.8564 181.927 45.1874C181.649 45.5183 181.51 46.0605 181.51 46.8139V49.8398H180.633V41.6227H181.51V44.1101C181.51 44.4093 181.496 44.6575 181.467 44.8547H181.52C181.693 44.5765 181.937 44.3583 182.254 44.1998C182.575 44.0379 182.939 43.9569 183.347 43.9569C184.055 43.9569 184.585 44.1259 184.937 44.4639C185.293 44.7983 185.47 45.3317 185.47 46.064V49.8398H184.594ZM187.15 49.2801C187.15 49.0442 187.203 48.8664 187.308 48.7467C187.417 48.6235 187.572 48.5619 187.773 48.5619C187.977 48.5619 188.136 48.6235 188.248 48.7467C188.364 48.8664 188.422 49.0442 188.422 49.2801C188.422 49.5089 188.364 49.6849 188.248 49.8082C188.132 49.9314 187.974 49.993 187.773 49.993C187.593 49.993 187.444 49.9384 187.324 49.8293C187.208 49.7166 187.15 49.5336 187.15 49.2801ZM187.15 44.617C187.15 44.1417 187.357 43.9041 187.773 43.9041C188.206 43.9041 188.422 44.1417 188.422 44.617C188.422 44.8459 188.364 45.0219 188.248 45.1451C188.132 45.2683 187.974 45.3299 187.773 45.3299C187.593 45.3299 187.444 45.2754 187.324 45.1662C187.208 45.0536 187.15 44.8705 187.15 44.617Z" class="path-4"/> -<rect x="35" y="94.6211" width="63.2613" height="25.8153" rx="12.9077" class="rect-3"/> -<g clip-path="url(#clip1_14063_184039)"> -<path d="M56.9748 107.644L53.3276 109.884L49.6779 107.644L53.3276 101.348L56.9748 107.644ZM53.3276 110.603L49.6779 108.363L53.3276 113.708L56.9772 108.363L53.3276 110.603Z" class="path-5"/> -</g> -<path d="M71.2663 112.027H66.9623V104.307H71.2663V105.104H67.8601V107.591H71.0603V108.384H67.8601V111.225H71.2663V112.027ZM75.359 112.027H74.4612V105.104H72.0162V104.307H77.8041V105.104H75.359V112.027ZM84.833 112.027H83.9352V108.394H79.8689V112.027H78.9711V104.307H79.8689V107.591H83.9352V104.307H84.833V112.027Z" class="path-6"/> -<path d="M103.984 112.689C103.782 112.689 103.599 112.659 103.435 112.597V111.978C103.623 112.042 103.787 112.074 103.927 112.074C104.15 112.074 104.321 111.983 104.441 111.802C104.562 111.62 104.658 111.361 104.732 111.024L105.729 106.269H104.881L104.938 105.975L105.843 105.685L105.944 105.245C106.079 104.659 106.265 104.246 106.503 104.006C106.743 103.763 107.097 103.641 107.566 103.641C107.683 103.641 107.827 103.659 107.997 103.694C108.167 103.726 108.298 103.763 108.392 103.804L108.203 104.371C107.981 104.286 107.78 104.243 107.601 104.243C107.346 104.243 107.15 104.315 107.012 104.458C106.878 104.599 106.768 104.858 106.683 105.236L106.573 105.711H107.619L107.509 106.269H106.467L105.448 111.094C105.334 111.648 105.158 112.052 104.92 112.307C104.683 112.562 104.371 112.689 103.984 112.689ZM110.088 105.649C110.645 105.649 111.085 105.815 111.407 106.146C111.729 106.474 111.89 106.927 111.89 107.504C111.89 108.055 111.785 108.575 111.574 109.064C111.363 109.553 111.077 109.931 110.717 110.198C110.357 110.464 109.949 110.598 109.495 110.598C108.933 110.598 108.492 110.432 108.172 110.101C107.853 109.77 107.693 109.317 107.693 108.743C107.693 108.187 107.8 107.664 108.014 107.174C108.228 106.682 108.517 106.306 108.88 106.045C109.243 105.781 109.646 105.649 110.088 105.649ZM111.126 107.403C111.126 107.066 111.033 106.793 110.849 106.585C110.667 106.375 110.419 106.269 110.106 106.269C109.787 106.269 109.5 106.377 109.245 106.594C108.993 106.811 108.796 107.113 108.656 107.5C108.518 107.883 108.449 108.311 108.449 108.783C108.449 109.167 108.542 109.464 108.726 109.675C108.914 109.883 109.182 109.987 109.53 109.987C109.835 109.987 110.109 109.88 110.352 109.666C110.595 109.452 110.784 109.149 110.919 108.756C111.057 108.361 111.126 107.91 111.126 107.403ZM115.621 105.623C115.823 105.623 115.999 105.644 116.148 105.685L115.99 106.344C115.835 106.306 115.681 106.287 115.529 106.287C115.262 106.287 115.012 106.375 114.777 106.55C114.546 106.726 114.342 106.971 114.167 107.284C113.994 107.595 113.866 107.94 113.784 108.321L113.314 110.527H112.576L113.604 105.711H114.215L114.118 106.603H114.162C114.373 106.325 114.547 106.125 114.685 106.005C114.823 105.882 114.966 105.789 115.116 105.724C115.268 105.657 115.437 105.623 115.621 105.623ZM123.057 105.711L122.947 106.181L122.02 106.287C122.14 106.468 122.2 106.7 122.2 106.981C122.2 107.541 122.028 107.987 121.686 108.321C121.346 108.652 120.89 108.818 120.319 108.818C120.158 108.818 120.035 108.806 119.95 108.783C119.543 108.938 119.339 109.13 119.339 109.358C119.339 109.479 119.387 109.559 119.484 109.6C119.581 109.638 119.721 109.669 119.906 109.692L120.42 109.754C120.95 109.818 121.334 109.947 121.571 110.141C121.812 110.334 121.932 110.618 121.932 110.993C121.932 111.532 121.718 111.95 121.29 112.246C120.862 112.542 120.26 112.689 119.484 112.689C118.916 112.689 118.47 112.581 118.148 112.364C117.826 112.15 117.665 111.847 117.665 111.455C117.665 111.147 117.77 110.88 117.981 110.655C118.192 110.429 118.533 110.237 119.005 110.079C118.776 109.959 118.662 109.782 118.662 109.547C118.662 109.345 118.737 109.172 118.886 109.029C119.036 108.882 119.244 108.746 119.51 108.62C119.326 108.526 119.175 108.389 119.058 108.207C118.94 108.022 118.882 107.809 118.882 107.565C118.882 106.997 119.056 106.531 119.405 106.168C119.756 105.805 120.205 105.623 120.75 105.623C120.978 105.623 121.204 105.652 121.426 105.711H123.057ZM118.377 111.384C118.377 111.61 118.472 111.789 118.662 111.92C118.853 112.052 119.135 112.118 119.51 112.118C120.044 112.118 120.46 112.024 120.758 111.837C121.06 111.652 121.211 111.39 121.211 111.05C121.211 110.869 121.132 110.725 120.974 110.62C120.815 110.514 120.546 110.441 120.165 110.4L119.466 110.33C119.115 110.403 118.845 110.532 118.658 110.716C118.47 110.901 118.377 111.124 118.377 111.384ZM119.598 107.539C119.598 107.788 119.664 107.979 119.796 108.11C119.928 108.239 120.111 108.304 120.345 108.304C120.577 108.304 120.779 108.242 120.952 108.119C121.125 107.996 121.256 107.828 121.347 107.614C121.441 107.397 121.488 107.163 121.488 106.911C121.488 106.67 121.423 106.487 121.294 106.361C121.166 106.235 120.981 106.172 120.741 106.172C120.512 106.172 120.312 106.232 120.139 106.353C119.969 106.47 119.836 106.635 119.739 106.849C119.645 107.06 119.598 107.29 119.598 107.539ZM125.54 105.623C125.809 105.623 126.049 105.696 126.26 105.843C126.471 105.986 126.635 106.194 126.753 106.467H126.801L127.095 105.711H127.653L126.629 110.527H126.045L126.159 109.609H126.124C125.6 110.28 125.047 110.615 124.467 110.615C124.06 110.615 123.741 110.47 123.509 110.18C123.278 109.89 123.162 109.493 123.162 108.989C123.162 108.38 123.266 107.814 123.474 107.293C123.682 106.771 123.969 106.363 124.336 106.067C124.702 105.771 125.103 105.623 125.54 105.623ZM124.705 110.004C124.989 110.004 125.272 109.87 125.553 109.6C125.834 109.328 126.063 108.975 126.238 108.541C126.414 108.104 126.502 107.668 126.502 107.231C126.502 106.93 126.42 106.689 126.256 106.511C126.092 106.332 125.877 106.243 125.61 106.243C125.305 106.243 125.021 106.369 124.757 106.621C124.497 106.873 124.292 107.214 124.142 107.645C123.993 108.075 123.918 108.529 123.918 109.007C123.918 109.341 123.987 109.591 124.125 109.758C124.262 109.922 124.456 110.004 124.705 110.004ZM131.05 109.161C131.05 109.618 130.888 109.975 130.563 110.233C130.24 110.488 129.785 110.615 129.196 110.615C128.701 110.615 128.254 110.514 127.856 110.312V109.618C128.061 109.741 128.282 109.836 128.519 109.903C128.756 109.971 128.976 110.004 129.178 110.004C129.547 110.004 129.826 109.931 130.013 109.785C130.201 109.638 130.294 109.451 130.294 109.222C130.294 109.055 130.243 108.915 130.141 108.8C130.038 108.686 129.817 108.529 129.477 108.33C129.096 108.116 128.827 107.907 128.669 107.702C128.51 107.497 128.431 107.253 128.431 106.972C128.431 106.568 128.579 106.243 128.875 105.997C129.171 105.748 129.561 105.623 130.044 105.623C130.545 105.623 131.028 105.731 131.494 105.948L131.257 106.55L131.011 106.44C130.715 106.314 130.393 106.251 130.044 106.251C129.772 106.251 129.558 106.316 129.402 106.445C129.247 106.571 129.169 106.735 129.169 106.937C129.169 107.101 129.221 107.242 129.323 107.359C129.429 107.476 129.644 107.627 129.969 107.812C130.283 107.987 130.507 108.138 130.642 108.264C130.779 108.39 130.882 108.526 130.949 108.673C131.017 108.816 131.05 108.979 131.05 109.161ZM133.56 112.689C133.357 112.689 133.174 112.659 133.01 112.597V111.978C133.198 112.042 133.362 112.074 133.503 112.074C133.725 112.074 133.897 111.983 134.017 111.802C134.137 111.62 134.233 111.361 134.307 111.024L135.304 106.269H134.456L134.513 105.975L135.419 105.685L135.52 105.245C135.654 104.659 135.84 104.246 136.078 104.006C136.318 103.763 136.672 103.641 137.141 103.641C137.258 103.641 137.402 103.659 137.572 103.694C137.742 103.726 137.874 103.763 137.967 103.804L137.778 104.371C137.556 104.286 137.355 104.243 137.176 104.243C136.921 104.243 136.725 104.315 136.587 104.458C136.453 104.599 136.343 104.858 136.258 105.236L136.148 105.711H137.194L137.084 106.269H136.043L135.023 111.094C134.909 111.648 134.733 112.052 134.496 112.307C134.258 112.562 133.946 112.689 133.56 112.689ZM139 110.615C138.461 110.615 138.038 110.456 137.73 110.136C137.422 109.817 137.269 109.375 137.269 108.809C137.269 108.258 137.377 107.731 137.594 107.227C137.814 106.72 138.104 106.326 138.464 106.045C138.824 105.764 139.221 105.623 139.655 105.623C140.103 105.623 140.44 105.721 140.666 105.917C140.891 106.111 141.004 106.382 141.004 106.73C141.004 107.258 140.761 107.672 140.274 107.974C139.788 108.273 139.092 108.422 138.187 108.422H138.042L138.024 108.774C138.024 109.158 138.114 109.458 138.293 109.675C138.474 109.889 138.754 109.996 139.132 109.996C139.316 109.996 139.505 109.969 139.699 109.917C139.895 109.864 140.138 109.767 140.428 109.626V110.268C140.153 110.397 139.91 110.486 139.699 110.536C139.488 110.589 139.255 110.615 139 110.615ZM139.611 106.251C139.309 106.251 139.025 106.389 138.758 106.665C138.495 106.94 138.293 107.322 138.152 107.812H138.205C138.873 107.812 139.384 107.725 139.738 107.552C140.096 107.376 140.274 107.123 140.274 106.792C140.274 106.637 140.22 106.508 140.112 106.405C140.006 106.303 139.839 106.251 139.611 106.251ZM143.439 110.615C142.899 110.615 142.476 110.456 142.169 110.136C141.861 109.817 141.707 109.375 141.707 108.809C141.707 108.258 141.815 107.731 142.032 107.227C142.252 106.72 142.542 106.326 142.902 106.045C143.263 105.764 143.66 105.623 144.093 105.623C144.542 105.623 144.878 105.721 145.104 105.917C145.33 106.111 145.442 106.382 145.442 106.73C145.442 107.258 145.199 107.672 144.713 107.974C144.227 108.273 143.531 108.422 142.626 108.422H142.481L142.463 108.774C142.463 109.158 142.552 109.458 142.731 109.675C142.913 109.889 143.192 109.996 143.57 109.996C143.755 109.996 143.944 109.969 144.137 109.917C144.334 109.864 144.577 109.767 144.867 109.626V110.268C144.591 110.397 144.348 110.486 144.137 110.536C143.926 110.589 143.693 110.615 143.439 110.615ZM144.049 106.251C143.748 106.251 143.463 106.389 143.197 106.665C142.933 106.94 142.731 107.322 142.59 107.812H142.643C143.311 107.812 143.822 107.725 144.177 107.552C144.534 107.376 144.713 107.123 144.713 106.792C144.713 106.637 144.659 106.508 144.55 106.405C144.445 106.303 144.278 106.251 144.049 106.251ZM148.945 109.161C148.945 109.618 148.782 109.975 148.457 110.233C148.135 110.488 147.679 110.615 147.09 110.615C146.595 110.615 146.148 110.514 145.75 110.312V109.618C145.955 109.741 146.176 109.836 146.414 109.903C146.651 109.971 146.871 110.004 147.073 110.004C147.442 110.004 147.72 109.931 147.908 109.785C148.095 109.638 148.189 109.451 148.189 109.222C148.189 109.055 148.138 108.915 148.035 108.8C147.933 108.686 147.711 108.529 147.372 108.33C146.991 108.116 146.721 107.907 146.563 107.702C146.405 107.497 146.326 107.253 146.326 106.972C146.326 106.568 146.474 106.243 146.77 105.997C147.065 105.748 147.455 105.623 147.939 105.623C148.44 105.623 148.923 105.731 149.389 105.948L149.151 106.55L148.905 106.44C148.609 106.314 148.287 106.251 147.939 106.251C147.666 106.251 147.452 106.316 147.297 106.445C147.142 106.571 147.064 106.735 147.064 106.937C147.064 107.101 147.115 107.242 147.218 107.359C147.323 107.476 147.539 107.627 147.864 107.812C148.177 107.987 148.401 108.138 148.536 108.264C148.674 108.39 148.776 108.526 148.844 108.673C148.911 108.816 148.945 108.979 148.945 109.161Z" class="path-7"/> -<rect x="35" y="187.844" width="63.2613" height="25.8153" rx="12.9077" class="rect-4"/> -<g clip-path="url(#clip2_14063_184039)"> -<path d="M56.9748 200.866L53.3276 203.107L49.6779 200.866L53.3276 194.57L56.9748 200.866ZM53.3276 203.826L49.6779 201.586L53.3276 206.931L56.9772 201.586L53.3276 203.826Z" class="path-8"/> -</g> -<path d="M71.2663 205.25H66.9623V197.529H71.2663V198.327H67.8601V200.814H71.0603V201.606H67.8601V204.447H71.2663V205.25ZM75.359 205.25H74.4612V198.327H72.0162V197.529H77.8041V198.327H75.359V205.25ZM84.833 205.25H83.9352V201.617H79.8689V205.25H78.9711V197.529H79.8689V200.814H83.9352V197.529H84.833V205.25Z" class="path-9"/> -<path d="M103.984 205.912C103.782 205.912 103.599 205.881 103.435 205.82V205.2C103.623 205.265 103.787 205.297 103.927 205.297C104.15 205.297 104.321 205.206 104.441 205.024C104.562 204.843 104.658 204.583 104.732 204.247L105.729 199.492H104.881L104.938 199.197L105.843 198.907L105.944 198.468C106.079 197.882 106.265 197.469 106.503 197.229C106.743 196.985 107.097 196.864 107.566 196.864C107.683 196.864 107.827 196.881 107.997 196.917C108.167 196.949 108.298 196.985 108.392 197.026L108.203 197.593C107.981 197.508 107.78 197.466 107.601 197.466C107.346 197.466 107.15 197.538 107.012 197.681C106.878 197.822 106.768 198.081 106.683 198.459L106.573 198.934H107.619L107.509 199.492H106.467L105.448 204.317C105.334 204.871 105.158 205.275 104.92 205.53C104.683 205.785 104.371 205.912 103.984 205.912ZM110.088 198.872C110.645 198.872 111.085 199.038 111.407 199.369C111.729 199.697 111.89 200.149 111.89 200.727C111.89 201.277 111.785 201.797 111.574 202.287C111.363 202.776 111.077 203.154 110.717 203.42C110.357 203.687 109.949 203.82 109.495 203.82C108.933 203.82 108.492 203.655 108.172 203.324C107.853 202.993 107.693 202.54 107.693 201.966C107.693 201.409 107.8 200.886 108.014 200.397C108.228 199.905 108.517 199.528 108.88 199.268C109.243 199.004 109.646 198.872 110.088 198.872ZM111.126 200.625C111.126 200.289 111.033 200.016 110.849 199.808C110.667 199.597 110.419 199.492 110.106 199.492C109.787 199.492 109.5 199.6 109.245 199.817C108.993 200.034 108.796 200.335 108.656 200.722C108.518 201.106 108.449 201.534 108.449 202.005C108.449 202.389 108.542 202.687 108.726 202.897C108.914 203.105 109.182 203.209 109.53 203.209C109.835 203.209 110.109 203.103 110.352 202.889C110.595 202.675 110.784 202.372 110.919 201.979C111.057 201.583 111.126 201.132 111.126 200.625ZM115.621 198.846C115.823 198.846 115.999 198.866 116.148 198.907L115.99 199.566C115.835 199.528 115.681 199.509 115.529 199.509C115.262 199.509 115.012 199.597 114.777 199.773C114.546 199.949 114.342 200.193 114.167 200.507C113.994 200.817 113.866 201.163 113.784 201.544L113.314 203.75H112.576L113.604 198.934H114.215L114.118 199.826H114.162C114.373 199.547 114.547 199.348 114.685 199.228C114.823 199.105 114.966 199.011 115.116 198.947C115.268 198.879 115.437 198.846 115.621 198.846ZM117.766 205.912C117.564 205.912 117.38 205.881 117.216 205.82V205.2C117.404 205.265 117.568 205.297 117.709 205.297C117.931 205.297 118.103 205.206 118.223 205.024C118.343 204.843 118.44 204.583 118.513 204.247L119.51 199.492H118.662L118.719 199.197L119.625 198.907L119.726 198.468C119.86 197.882 120.046 197.469 120.284 197.229C120.524 196.985 120.878 196.864 121.347 196.864C121.464 196.864 121.608 196.881 121.778 196.917C121.948 196.949 122.08 196.985 122.173 197.026L121.984 197.593C121.762 197.508 121.561 197.466 121.382 197.466C121.128 197.466 120.931 197.538 120.794 197.681C120.659 197.822 120.549 198.081 120.464 198.459L120.354 198.934H121.4L121.29 199.492H120.249L119.229 204.317C119.115 204.871 118.939 205.275 118.702 205.53C118.464 205.785 118.152 205.912 117.766 205.912ZM123.026 198.934L122.367 201.988C122.314 202.249 122.288 202.452 122.288 202.599C122.288 203.018 122.503 203.227 122.934 203.227C123.191 203.227 123.445 203.139 123.694 202.963C123.943 202.788 124.163 202.536 124.353 202.208C124.544 201.879 124.689 201.484 124.788 201.021L125.228 198.934H125.957L124.942 203.75H124.331L124.428 202.858H124.375C124.088 203.224 123.814 203.479 123.553 203.623C123.293 203.766 123.023 203.838 122.745 203.838C122.37 203.838 122.075 203.737 121.861 203.535C121.648 203.33 121.541 203.038 121.541 202.66C121.541 202.479 121.573 202.227 121.637 201.904L122.279 198.934H123.026ZM129.442 203.75L130.092 200.709C130.151 200.404 130.18 200.193 130.18 200.076C130.18 199.892 130.128 199.744 130.022 199.632C129.919 199.521 129.754 199.465 129.525 199.465C129.265 199.465 129.01 199.553 128.761 199.729C128.515 199.905 128.296 200.155 128.106 200.48C127.919 200.806 127.776 201.2 127.68 201.663L127.236 203.75H126.498L127.526 198.934H128.137L128.04 199.826H128.084C128.365 199.468 128.636 199.216 128.897 199.07C129.161 198.92 129.433 198.846 129.714 198.846C130.086 198.846 130.379 198.948 130.593 199.153C130.81 199.355 130.919 199.64 130.919 200.006C130.919 200.237 130.885 200.501 130.817 200.797L130.189 203.75H129.442ZM134.241 198.854C134.809 198.854 135.221 199.133 135.476 199.689H135.52C135.569 199.235 135.635 198.834 135.717 198.485L136.06 196.912H136.79L135.339 203.75H134.729L134.825 202.832H134.79C134.494 203.198 134.217 203.457 133.96 203.609C133.702 203.762 133.435 203.838 133.16 203.838C132.753 203.838 132.435 203.694 132.206 203.407C131.978 203.12 131.863 202.722 131.863 202.212C131.863 201.585 131.969 201.011 132.18 200.489C132.391 199.968 132.675 199.565 133.032 199.281C133.393 198.997 133.795 198.854 134.241 198.854ZM133.406 203.227C133.681 203.227 133.965 203.091 134.258 202.818C134.551 202.543 134.783 202.193 134.953 201.768C135.126 201.34 135.212 200.905 135.212 200.463C135.212 200.138 135.133 199.89 134.975 199.72C134.816 199.55 134.586 199.465 134.285 199.465C133.989 199.465 133.713 199.587 133.459 199.83C133.207 200.07 133.003 200.41 132.848 200.85C132.695 201.286 132.619 201.746 132.619 202.229C132.619 202.895 132.881 203.227 133.406 203.227ZM137.625 203.75H136.886L137.915 198.934H138.653L137.625 203.75ZM138.121 197.703C138.121 197.539 138.168 197.406 138.262 197.303C138.356 197.198 138.477 197.145 138.627 197.145C138.884 197.145 139.013 197.277 139.013 197.541C139.013 197.702 138.963 197.838 138.864 197.949C138.767 198.061 138.654 198.116 138.525 198.116C138.408 198.116 138.312 198.081 138.235 198.011C138.159 197.938 138.121 197.835 138.121 197.703ZM142.116 203.75L142.766 200.709C142.825 200.404 142.854 200.193 142.854 200.076C142.854 199.892 142.801 199.744 142.696 199.632C142.593 199.521 142.428 199.465 142.199 199.465C141.939 199.465 141.684 199.553 141.435 199.729C141.189 199.905 140.97 200.155 140.78 200.48C140.592 200.806 140.45 201.2 140.354 201.663L139.91 203.75H139.171L140.2 198.934H140.811L140.714 199.826H140.758C141.039 199.468 141.31 199.216 141.571 199.07C141.835 198.92 142.107 198.846 142.388 198.846C142.76 198.846 143.053 198.948 143.267 199.153C143.484 199.355 143.592 199.64 143.592 200.006C143.592 200.237 143.559 200.501 143.491 200.797L142.863 203.75H142.116ZM148.94 198.934L148.831 199.404L147.903 199.509C148.023 199.691 148.084 199.922 148.084 200.204C148.084 200.763 147.912 201.21 147.569 201.544C147.23 201.875 146.774 202.041 146.203 202.041C146.042 202.041 145.919 202.029 145.834 202.005C145.426 202.161 145.223 202.353 145.223 202.581C145.223 202.701 145.271 202.782 145.368 202.823C145.464 202.861 145.605 202.892 145.79 202.915L146.304 202.977C146.834 203.041 147.218 203.17 147.455 203.363C147.695 203.557 147.815 203.841 147.815 204.216C147.815 204.755 147.602 205.172 147.174 205.468C146.746 205.764 146.144 205.912 145.368 205.912C144.799 205.912 144.354 205.804 144.032 205.587C143.71 205.373 143.548 205.07 143.548 204.677C143.548 204.37 143.654 204.103 143.865 203.877C144.076 203.652 144.417 203.46 144.889 203.302C144.66 203.182 144.546 203.004 144.546 202.77C144.546 202.568 144.621 202.395 144.77 202.251C144.919 202.105 145.128 201.969 145.394 201.843C145.21 201.749 145.059 201.611 144.941 201.43C144.824 201.245 144.766 201.031 144.766 200.788C144.766 200.22 144.94 199.754 145.289 199.391C145.64 199.027 146.088 198.846 146.633 198.846C146.862 198.846 147.087 198.875 147.31 198.934H148.94ZM144.26 204.607C144.26 204.833 144.356 205.011 144.546 205.143C144.736 205.275 145.019 205.341 145.394 205.341C145.927 205.341 146.343 205.247 146.642 205.06C146.944 204.875 147.095 204.613 147.095 204.273C147.095 204.091 147.016 203.948 146.857 203.842C146.699 203.737 146.43 203.664 146.049 203.623L145.35 203.552C144.999 203.625 144.729 203.754 144.542 203.939C144.354 204.124 144.26 204.346 144.26 204.607ZM145.482 200.762C145.482 201.011 145.548 201.201 145.68 201.333C145.812 201.462 145.995 201.526 146.229 201.526C146.461 201.526 146.663 201.465 146.836 201.342C147.008 201.219 147.14 201.05 147.231 200.836C147.325 200.62 147.372 200.385 147.372 200.133C147.372 199.893 147.307 199.71 147.178 199.584C147.049 199.458 146.865 199.395 146.625 199.395C146.396 199.395 146.195 199.455 146.023 199.575C145.853 199.692 145.719 199.858 145.623 200.072C145.529 200.283 145.482 200.513 145.482 200.762ZM153.761 198.846C154.031 198.846 154.271 198.919 154.482 199.065C154.693 199.209 154.857 199.417 154.974 199.689H155.023L155.317 198.934H155.875L154.851 203.75H154.267L154.381 202.832H154.346C153.821 203.502 153.269 203.838 152.689 203.838C152.282 203.838 151.962 203.693 151.731 203.403C151.5 203.113 151.384 202.716 151.384 202.212C151.384 201.603 151.488 201.037 151.696 200.516C151.904 199.994 152.191 199.585 152.557 199.29C152.923 198.994 153.325 198.846 153.761 198.846ZM152.926 203.227C153.211 203.227 153.493 203.092 153.774 202.823C154.056 202.55 154.284 202.197 154.46 201.764C154.636 201.327 154.724 200.891 154.724 200.454C154.724 200.152 154.642 199.912 154.478 199.733C154.314 199.555 154.098 199.465 153.832 199.465C153.527 199.465 153.243 199.591 152.979 199.843C152.718 200.095 152.513 200.437 152.364 200.867C152.214 201.298 152.14 201.752 152.14 202.229C152.14 202.563 152.209 202.814 152.346 202.981C152.484 203.145 152.677 203.227 152.926 203.227ZM159.246 203.75L159.896 200.709C159.955 200.404 159.984 200.193 159.984 200.076C159.984 199.892 159.931 199.744 159.826 199.632C159.723 199.521 159.558 199.465 159.329 199.465C159.068 199.465 158.814 199.553 158.565 199.729C158.318 199.905 158.1 200.155 157.91 200.48C157.722 200.806 157.58 201.2 157.483 201.663L157.04 203.75H156.301L157.33 198.934H157.94L157.844 199.826H157.888C158.169 199.468 158.44 199.216 158.701 199.07C158.964 198.92 159.237 198.846 159.518 198.846C159.89 198.846 160.183 198.948 160.397 199.153C160.614 199.355 160.722 199.64 160.722 200.006C160.722 200.237 160.689 200.501 160.621 200.797L159.993 203.75H159.246ZM166.382 198.846C166.652 198.846 166.892 198.919 167.103 199.065C167.314 199.209 167.478 199.417 167.595 199.689H167.644L167.938 198.934H168.496L167.472 203.75H166.888L167.002 202.832H166.967C166.442 203.502 165.89 203.838 165.31 203.838C164.903 203.838 164.584 203.693 164.352 203.403C164.121 203.113 164.005 202.716 164.005 202.212C164.005 201.603 164.109 201.037 164.317 200.516C164.525 199.994 164.812 199.585 165.178 199.29C165.544 198.994 165.946 198.846 166.382 198.846ZM165.547 203.227C165.832 203.227 166.114 203.092 166.396 202.823C166.677 202.55 166.905 202.197 167.081 201.764C167.257 201.327 167.345 200.891 167.345 200.454C167.345 200.152 167.263 199.912 167.099 199.733C166.935 199.555 166.719 199.465 166.453 199.465C166.148 199.465 165.864 199.591 165.6 199.843C165.339 200.095 165.134 200.437 164.985 200.867C164.836 201.298 164.761 201.752 164.761 202.229C164.761 202.563 164.83 202.814 164.967 202.981C165.105 203.145 165.298 203.227 165.547 203.227ZM171.058 203.838C170.774 203.838 170.525 203.765 170.311 203.618C170.097 203.472 169.932 203.267 169.815 203.003H169.771L169.753 203.17C169.744 203.243 169.728 203.346 169.705 203.478C169.684 203.609 169.517 204.421 169.204 205.912H168.474L169.951 198.934H170.562L170.447 199.852H170.482C171.007 199.187 171.552 198.854 172.117 198.854C172.519 198.854 172.835 198.998 173.066 199.285C173.298 199.569 173.414 199.969 173.414 200.485C173.414 201.106 173.313 201.676 173.11 202.194C172.908 202.713 172.628 203.117 172.271 203.407C171.914 203.694 171.509 203.838 171.058 203.838ZM171.876 199.465C171.594 199.465 171.307 199.604 171.014 199.883C170.724 200.161 170.493 200.511 170.32 200.933C170.15 201.355 170.065 201.787 170.065 202.229C170.065 202.552 170.146 202.799 170.307 202.972C170.471 203.142 170.707 203.227 171.014 203.227C171.304 203.227 171.574 203.108 171.823 202.871C172.075 202.634 172.277 202.297 172.429 201.86C172.582 201.421 172.658 200.955 172.658 200.463C172.658 199.798 172.397 199.465 171.876 199.465ZM176.253 203.838C175.968 203.838 175.719 203.765 175.505 203.618C175.292 203.472 175.126 203.267 175.009 203.003H174.965L174.947 203.17C174.939 203.243 174.922 203.346 174.899 203.478C174.878 203.609 174.711 204.421 174.398 205.912H173.669L175.145 198.934H175.756L175.642 199.852H175.677C176.201 199.187 176.746 198.854 177.312 198.854C177.713 198.854 178.029 198.998 178.261 199.285C178.492 199.569 178.608 199.969 178.608 200.485C178.608 201.106 178.507 201.676 178.305 202.194C178.103 202.713 177.823 203.117 177.465 203.407C177.108 203.694 176.704 203.838 176.253 203.838ZM177.07 199.465C176.789 199.465 176.502 199.604 176.209 199.883C175.919 200.161 175.687 200.511 175.514 200.933C175.344 201.355 175.259 201.787 175.259 202.229C175.259 202.552 175.34 202.799 175.501 202.972C175.665 203.142 175.901 203.227 176.209 203.227C176.499 203.227 176.768 203.108 177.017 202.871C177.269 202.634 177.471 202.297 177.624 201.86C177.776 201.421 177.852 200.955 177.852 200.463C177.852 199.798 177.591 199.465 177.07 199.465ZM181.214 203.838C180.675 203.838 180.252 203.678 179.944 203.359C179.636 203.04 179.482 202.597 179.482 202.032C179.482 201.481 179.591 200.954 179.808 200.45C180.027 199.943 180.317 199.549 180.678 199.268C181.038 198.986 181.435 198.846 181.869 198.846C182.317 198.846 182.654 198.944 182.879 199.14C183.105 199.333 183.218 199.604 183.218 199.953C183.218 200.48 182.975 200.895 182.488 201.197C182.002 201.496 181.306 201.645 180.401 201.645H180.256L180.238 201.997C180.238 202.38 180.328 202.681 180.506 202.897C180.688 203.111 180.968 203.218 181.346 203.218C181.53 203.218 181.719 203.192 181.913 203.139C182.109 203.086 182.352 202.99 182.642 202.849V203.491C182.367 203.62 182.124 203.709 181.913 203.759C181.702 203.812 181.469 203.838 181.214 203.838ZM181.825 199.474C181.523 199.474 181.239 199.612 180.972 199.887C180.709 200.163 180.506 200.545 180.366 201.034H180.419C181.086 201.034 181.598 200.948 181.952 200.775C182.31 200.599 182.488 200.346 182.488 200.015C182.488 199.859 182.434 199.73 182.326 199.628C182.22 199.525 182.053 199.474 181.825 199.474ZM186.298 198.846C186.568 198.846 186.808 198.919 187.019 199.065C187.23 199.209 187.394 199.417 187.511 199.689H187.56L187.854 198.934H188.412L187.388 203.75H186.804L186.918 202.832H186.883C186.358 203.502 185.806 203.838 185.226 203.838C184.819 203.838 184.5 203.693 184.268 203.403C184.037 203.113 183.921 202.716 183.921 202.212C183.921 201.603 184.025 201.037 184.233 200.516C184.441 199.994 184.728 199.585 185.094 199.29C185.461 198.994 185.862 198.846 186.298 198.846ZM185.463 203.227C185.748 203.227 186.03 203.092 186.312 202.823C186.593 202.55 186.821 202.197 186.997 201.764C187.173 201.327 187.261 200.891 187.261 200.454C187.261 200.152 187.179 199.912 187.015 199.733C186.851 199.555 186.635 199.465 186.369 199.465C186.064 199.465 185.78 199.591 185.516 199.843C185.255 200.095 185.05 200.437 184.901 200.867C184.752 201.298 184.677 201.752 184.677 202.229C184.677 202.563 184.746 202.814 184.883 202.981C185.021 203.145 185.214 203.227 185.463 203.227ZM189.568 203.75H188.83L190.289 196.912H191.027L189.568 203.75ZM196.01 198.846C196.28 198.846 196.52 198.919 196.731 199.065C196.942 199.209 197.106 199.417 197.223 199.689H197.272L197.566 198.934H198.124L197.1 203.75H196.516L196.63 202.832H196.595C196.07 203.502 195.518 203.838 194.938 203.838C194.531 203.838 194.211 203.693 193.98 203.403C193.749 203.113 193.633 202.716 193.633 202.212C193.633 201.603 193.737 201.037 193.945 200.516C194.153 199.994 194.44 199.585 194.806 199.29C195.172 198.994 195.574 198.846 196.01 198.846ZM195.175 203.227C195.46 203.227 195.742 203.092 196.023 202.823C196.305 202.55 196.533 202.197 196.709 201.764C196.885 201.327 196.973 200.891 196.973 200.454C196.973 200.152 196.891 199.912 196.727 199.733C196.563 199.555 196.347 199.465 196.081 199.465C195.776 199.465 195.492 199.591 195.228 199.843C194.967 200.095 194.762 200.437 194.613 200.867C194.463 201.298 194.389 201.752 194.389 202.229C194.389 202.563 194.458 202.814 194.595 202.981C194.733 203.145 194.926 203.227 195.175 203.227ZM201.495 203.75L202.145 200.709C202.204 200.404 202.233 200.193 202.233 200.076C202.233 199.892 202.18 199.744 202.075 199.632C201.972 199.521 201.807 199.465 201.578 199.465C201.317 199.465 201.063 199.553 200.814 199.729C200.567 199.905 200.349 200.155 200.159 200.48C199.971 200.806 199.829 201.2 199.732 201.663L199.289 203.75H198.55L199.579 198.934H200.19L200.093 199.826H200.137C200.418 199.468 200.689 199.216 200.95 199.07C201.213 198.92 201.486 198.846 201.767 198.846C202.139 198.846 202.432 198.948 202.646 199.153C202.863 199.355 202.971 199.64 202.971 200.006C202.971 200.237 202.938 200.501 202.87 200.797L202.242 203.75H201.495ZM206.294 198.854C206.862 198.854 207.273 199.133 207.528 199.689H207.572C207.622 199.235 207.688 198.834 207.77 198.485L208.113 196.912H208.842L207.392 203.75H206.781L206.878 202.832H206.843C206.547 203.198 206.27 203.457 206.012 203.609C205.754 203.762 205.488 203.838 205.212 203.838C204.805 203.838 204.487 203.694 204.259 203.407C204.03 203.12 203.916 202.722 203.916 202.212C203.916 201.585 204.022 201.011 204.232 200.489C204.443 199.968 204.728 199.565 205.085 199.281C205.445 198.997 205.848 198.854 206.294 198.854ZM205.459 203.227C205.734 203.227 206.018 203.091 206.311 202.818C206.604 202.543 206.836 202.193 207.005 201.768C207.178 201.34 207.265 200.905 207.265 200.463C207.265 200.138 207.186 199.89 207.027 199.72C206.869 199.55 206.639 199.465 206.337 199.465C206.042 199.465 205.766 199.587 205.511 199.83C205.259 200.07 205.056 200.41 204.9 200.85C204.748 201.286 204.672 201.746 204.672 202.229C204.672 202.895 204.934 203.227 205.459 203.227ZM210.561 205.912C210.358 205.912 210.175 205.881 210.011 205.82V205.2C210.199 205.265 210.363 205.297 210.503 205.297C210.726 205.297 210.898 205.206 211.018 205.024C211.138 204.843 211.234 204.583 211.308 204.247L212.305 199.492H211.457L211.514 199.197L212.419 198.907L212.521 198.468C212.655 197.882 212.841 197.469 213.079 197.229C213.319 196.985 213.673 196.864 214.142 196.864C214.259 196.864 214.403 196.881 214.573 196.917C214.743 196.949 214.875 196.985 214.968 197.026L214.779 197.593C214.557 197.508 214.356 197.466 214.177 197.466C213.922 197.466 213.726 197.538 213.588 197.681C213.454 197.822 213.344 198.081 213.259 198.459L213.149 198.934H214.195L214.085 199.492H213.044L212.024 204.317C211.91 204.871 211.734 205.275 211.497 205.53C211.259 205.785 210.947 205.912 210.561 205.912ZM216.665 198.872C217.221 198.872 217.661 199.038 217.983 199.369C218.305 199.697 218.466 200.149 218.466 200.727C218.466 201.277 218.361 201.797 218.15 202.287C217.939 202.776 217.653 203.154 217.293 203.42C216.933 203.687 216.525 203.82 216.071 203.82C215.509 203.82 215.068 203.655 214.749 203.324C214.429 202.993 214.27 202.54 214.27 201.966C214.27 201.409 214.377 200.886 214.59 200.397C214.804 199.905 215.093 199.528 215.456 199.268C215.819 199.004 216.222 198.872 216.665 198.872ZM217.702 200.625C217.702 200.289 217.609 200.016 217.425 199.808C217.243 199.597 216.996 199.492 216.682 199.492C216.363 199.492 216.076 199.6 215.821 199.817C215.569 200.034 215.373 200.335 215.232 200.722C215.094 201.106 215.025 201.534 215.025 202.005C215.025 202.389 215.118 202.687 215.302 202.897C215.49 203.105 215.758 203.209 216.107 203.209C216.411 203.209 216.685 203.103 216.928 202.889C217.171 202.675 217.36 202.372 217.495 201.979C217.633 201.583 217.702 201.132 217.702 200.625ZM222.197 198.846C222.399 198.846 222.575 198.866 222.725 198.907L222.566 199.566C222.411 199.528 222.257 199.509 222.105 199.509C221.838 199.509 221.588 199.597 221.354 199.773C221.122 199.949 220.919 200.193 220.743 200.507C220.57 200.817 220.442 201.163 220.36 201.544L219.89 203.75H219.152L220.18 198.934H220.791L220.694 199.826H220.738C220.949 199.547 221.124 199.348 221.261 199.228C221.399 199.105 221.543 199.011 221.692 198.947C221.844 198.879 222.013 198.846 222.197 198.846ZM229.633 198.934L229.523 199.404L228.596 199.509C228.716 199.691 228.776 199.922 228.776 200.204C228.776 200.763 228.605 201.21 228.262 201.544C227.922 201.875 227.466 202.041 226.895 202.041C226.734 202.041 226.611 202.029 226.526 202.005C226.119 202.161 225.915 202.353 225.915 202.581C225.915 202.701 225.963 202.782 226.06 202.823C226.157 202.861 226.297 202.892 226.482 202.915L226.996 202.977C227.526 203.041 227.91 203.17 228.148 203.363C228.388 203.557 228.508 203.841 228.508 204.216C228.508 204.755 228.294 205.172 227.866 205.468C227.439 205.764 226.836 205.912 226.06 205.912C225.492 205.912 225.046 205.804 224.724 205.587C224.402 205.373 224.241 205.07 224.241 204.677C224.241 204.37 224.346 204.103 224.557 203.877C224.768 203.652 225.109 203.46 225.581 203.302C225.353 203.182 225.238 203.004 225.238 202.77C225.238 202.568 225.313 202.395 225.462 202.251C225.612 202.105 225.82 201.969 226.086 201.843C225.902 201.749 225.751 201.611 225.634 201.43C225.517 201.245 225.458 201.031 225.458 200.788C225.458 200.22 225.632 199.754 225.981 199.391C226.333 199.027 226.781 198.846 227.326 198.846C227.554 198.846 227.78 198.875 228.003 198.934H229.633ZM224.953 204.607C224.953 204.833 225.048 205.011 225.238 205.143C225.429 205.275 225.711 205.341 226.086 205.341C226.62 205.341 227.036 205.247 227.335 205.06C227.636 204.875 227.787 204.613 227.787 204.273C227.787 204.091 227.708 203.948 227.55 203.842C227.392 203.737 227.122 203.664 226.741 203.623L226.043 203.552C225.691 203.625 225.421 203.754 225.234 203.939C225.046 204.124 224.953 204.346 224.953 204.607ZM226.174 200.762C226.174 201.011 226.24 201.201 226.372 201.333C226.504 201.462 226.687 201.526 226.921 201.526C227.153 201.526 227.355 201.465 227.528 201.342C227.701 201.219 227.833 201.05 227.923 200.836C228.017 200.62 228.064 200.385 228.064 200.133C228.064 199.893 228 199.71 227.871 199.584C227.742 199.458 227.557 199.395 227.317 199.395C227.088 199.395 226.888 199.455 226.715 199.575C226.545 199.692 226.412 199.858 226.315 200.072C226.221 200.283 226.174 200.513 226.174 200.762ZM232.116 198.846C232.385 198.846 232.626 198.919 232.836 199.065C233.047 199.209 233.211 199.417 233.329 199.689H233.377L233.671 198.934H234.23L233.206 203.75H232.621L232.735 202.832H232.7C232.176 203.502 231.624 203.838 231.044 203.838C230.636 203.838 230.317 203.693 230.086 203.403C229.854 203.113 229.738 202.716 229.738 202.212C229.738 201.603 229.842 201.037 230.05 200.516C230.258 199.994 230.545 199.585 230.912 199.29C231.278 198.994 231.679 198.846 232.116 198.846ZM231.281 203.227C231.565 203.227 231.848 203.092 232.129 202.823C232.41 202.55 232.639 202.197 232.815 201.764C232.99 201.327 233.078 200.891 233.078 200.454C233.078 200.152 232.996 199.912 232.832 199.733C232.668 199.555 232.453 199.465 232.186 199.465C231.881 199.465 231.597 199.591 231.334 199.843C231.073 200.095 230.868 200.437 230.718 200.867C230.569 201.298 230.494 201.752 230.494 202.229C230.494 202.563 230.563 202.814 230.701 202.981C230.838 203.145 231.032 203.227 231.281 203.227ZM237.627 202.383C237.627 202.84 237.464 203.198 237.139 203.456C236.816 203.71 236.361 203.838 235.772 203.838C235.277 203.838 234.83 203.737 234.432 203.535V202.84C234.637 202.963 234.858 203.059 235.095 203.126C235.333 203.193 235.552 203.227 235.754 203.227C236.124 203.227 236.402 203.154 236.589 203.007C236.777 202.861 236.871 202.673 236.871 202.445C236.871 202.278 236.819 202.137 236.717 202.023C236.614 201.909 236.393 201.752 236.053 201.553C235.672 201.339 235.403 201.129 235.245 200.924C235.086 200.719 235.007 200.476 235.007 200.195C235.007 199.791 235.155 199.465 235.451 199.219C235.747 198.97 236.137 198.846 236.62 198.846C237.121 198.846 237.605 198.954 238.07 199.171L237.833 199.773L237.587 199.663C237.291 199.537 236.969 199.474 236.62 199.474C236.348 199.474 236.134 199.539 235.979 199.667C235.823 199.793 235.746 199.958 235.746 200.16C235.746 200.324 235.797 200.464 235.899 200.582C236.005 200.699 236.22 200.85 236.545 201.034C236.859 201.21 237.083 201.361 237.218 201.487C237.356 201.613 237.458 201.749 237.525 201.896C237.593 202.039 237.627 202.202 237.627 202.383ZM240.136 205.912C239.934 205.912 239.751 205.881 239.586 205.82V205.2C239.774 205.265 239.938 205.297 240.079 205.297C240.301 205.297 240.473 205.206 240.593 205.024C240.713 204.843 240.81 204.583 240.883 204.247L241.88 199.492H241.032L241.089 199.197L241.995 198.907L242.096 198.468C242.231 197.882 242.417 197.469 242.654 197.229C242.894 196.985 243.249 196.864 243.717 196.864C243.835 196.864 243.978 196.881 244.148 196.917C244.318 196.949 244.45 196.985 244.544 197.026L244.355 197.593C244.132 197.508 243.931 197.466 243.753 197.466C243.498 197.466 243.301 197.538 243.164 197.681C243.029 197.822 242.919 198.081 242.834 198.459L242.724 198.934H243.77L243.66 199.492H242.619L241.599 204.317C241.485 204.871 241.309 205.275 241.072 205.53C240.835 205.785 240.523 205.912 240.136 205.912ZM245.576 203.838C245.037 203.838 244.614 203.678 244.306 203.359C243.999 203.04 243.845 202.597 243.845 202.032C243.845 201.481 243.953 200.954 244.17 200.45C244.39 199.943 244.68 199.549 245.04 199.268C245.4 198.986 245.797 198.846 246.231 198.846C246.679 198.846 247.016 198.944 247.242 199.14C247.467 199.333 247.58 199.604 247.58 199.953C247.58 200.48 247.337 200.895 246.851 201.197C246.364 201.496 245.669 201.645 244.763 201.645H244.618L244.601 201.997C244.601 202.38 244.69 202.681 244.869 202.897C245.05 203.111 245.33 203.218 245.708 203.218C245.893 203.218 246.082 203.192 246.275 203.139C246.471 203.086 246.714 202.99 247.004 202.849V203.491C246.729 203.62 246.486 203.709 246.275 203.759C246.064 203.812 245.831 203.838 245.576 203.838ZM246.187 199.474C245.885 199.474 245.601 199.612 245.335 199.887C245.071 200.163 244.869 200.545 244.728 201.034H244.781C245.449 201.034 245.96 200.948 246.315 200.775C246.672 200.599 246.851 200.346 246.851 200.015C246.851 199.859 246.796 199.73 246.688 199.628C246.583 199.525 246.416 199.474 246.187 199.474ZM250.015 203.838C249.476 203.838 249.052 203.678 248.745 203.359C248.437 203.04 248.283 202.597 248.283 202.032C248.283 201.481 248.392 200.954 248.608 200.45C248.828 199.943 249.118 199.549 249.479 199.268C249.839 198.986 250.236 198.846 250.669 198.846C251.118 198.846 251.455 198.944 251.68 199.14C251.906 199.333 252.019 199.604 252.019 199.953C252.019 200.48 251.775 200.895 251.289 201.197C250.803 201.496 250.107 201.645 249.202 201.645H249.057L249.039 201.997C249.039 202.38 249.128 202.681 249.307 202.897C249.489 203.111 249.769 203.218 250.147 203.218C250.331 203.218 250.52 203.192 250.713 203.139C250.91 203.086 251.153 202.99 251.443 202.849V203.491C251.168 203.62 250.924 203.709 250.713 203.759C250.503 203.812 250.27 203.838 250.015 203.838ZM250.626 199.474C250.324 199.474 250.04 199.612 249.773 199.887C249.509 200.163 249.307 200.545 249.167 201.034H249.219C249.887 201.034 250.398 200.948 250.753 200.775C251.11 200.599 251.289 200.346 251.289 200.015C251.289 199.859 251.235 199.73 251.127 199.628C251.021 199.525 250.854 199.474 250.626 199.474ZM255.521 202.383C255.521 202.84 255.358 203.198 255.033 203.456C254.711 203.71 254.255 203.838 253.667 203.838C253.171 203.838 252.725 203.737 252.326 203.535V202.84C252.531 202.963 252.753 203.059 252.99 203.126C253.227 203.193 253.447 203.227 253.649 203.227C254.018 203.227 254.296 203.154 254.484 203.007C254.671 202.861 254.765 202.673 254.765 202.445C254.765 202.278 254.714 202.137 254.611 202.023C254.509 201.909 254.288 201.752 253.948 201.553C253.567 201.339 253.297 201.129 253.139 200.924C252.981 200.719 252.902 200.476 252.902 200.195C252.902 199.791 253.05 199.465 253.346 199.219C253.642 198.97 254.031 198.846 254.515 198.846C255.016 198.846 255.499 198.954 255.965 199.171L255.728 199.773L255.482 199.663C255.186 199.537 254.863 199.474 254.515 199.474C254.242 199.474 254.028 199.539 253.873 199.667C253.718 199.793 253.64 199.958 253.64 200.16C253.64 200.324 253.691 200.464 253.794 200.582C253.899 200.699 254.115 200.85 254.44 201.034C254.753 201.21 254.978 201.361 255.112 201.487C255.25 201.613 255.353 201.749 255.42 201.896C255.487 202.039 255.521 202.202 255.521 202.383Z" class="path-10"/> -<rect x="35" y="281.457" width="63.2613" height="25.8153" rx="12.9077" class="rect-5"/> -<g clip-path="url(#clip3_14063_184039)"> -<path d="M56.9748 294.48L53.3276 296.72L49.6779 294.48L53.3276 288.184L56.9748 294.48ZM53.3276 297.439L49.6779 295.199L53.3276 300.544L56.9772 295.199L53.3276 297.439Z" class="path-11"/> -</g> -<path d="M71.2663 298.863H66.9623V291.143H71.2663V291.94H67.8601V294.427H71.0603V295.219H67.8601V298.061H71.2663V298.863ZM75.359 298.863H74.4612V291.94H72.0162V291.143H77.8041V291.94H75.359V298.863ZM84.833 298.863H83.9352V295.23H79.8689V298.863H78.9711V291.143H79.8689V294.427H83.9352V291.143H84.833V298.863Z" class="path-12"/> -<path d="M103.984 299.525C103.782 299.525 103.599 299.495 103.435 299.433V298.813C103.623 298.878 103.787 298.91 103.927 298.91C104.15 298.91 104.321 298.819 104.441 298.638C104.562 298.456 104.658 298.197 104.732 297.86L105.729 293.105H104.881L104.938 292.811L105.843 292.521L105.944 292.081C106.079 291.495 106.265 291.082 106.503 290.842C106.743 290.599 107.097 290.477 107.566 290.477C107.683 290.477 107.827 290.495 107.997 290.53C108.167 290.562 108.298 290.599 108.392 290.64L108.203 291.207C107.981 291.122 107.78 291.079 107.601 291.079C107.346 291.079 107.15 291.151 107.012 291.294C106.878 291.435 106.768 291.694 106.683 292.072L106.573 292.547H107.619L107.509 293.105H106.467L105.448 297.93C105.334 298.484 105.158 298.888 104.92 299.143C104.683 299.398 104.371 299.525 103.984 299.525ZM110.088 292.485C110.645 292.485 111.085 292.651 111.407 292.982C111.729 293.31 111.89 293.763 111.89 294.34C111.89 294.891 111.785 295.411 111.574 295.9C111.363 296.389 111.077 296.767 110.717 297.034C110.357 297.3 109.949 297.434 109.495 297.434C108.933 297.434 108.492 297.268 108.172 296.937C107.853 296.606 107.693 296.153 107.693 295.579C107.693 295.022 107.8 294.5 108.014 294.01C108.228 293.518 108.517 293.142 108.88 292.881C109.243 292.617 109.646 292.485 110.088 292.485ZM111.126 294.239C111.126 293.902 111.033 293.629 110.849 293.421C110.667 293.21 110.419 293.105 110.106 293.105C109.787 293.105 109.5 293.213 109.245 293.43C108.993 293.647 108.796 293.949 108.656 294.335C108.518 294.719 108.449 295.147 108.449 295.619C108.449 296.002 108.542 296.3 108.726 296.511C108.914 296.719 109.182 296.823 109.53 296.823C109.835 296.823 110.109 296.716 110.352 296.502C110.595 296.288 110.784 295.985 110.919 295.592C111.057 295.197 111.126 294.746 111.126 294.239ZM115.621 292.459C115.823 292.459 115.999 292.479 116.148 292.521L115.99 293.18C115.835 293.142 115.681 293.123 115.529 293.123C115.262 293.123 115.012 293.21 114.777 293.386C114.546 293.562 114.342 293.807 114.167 294.12C113.994 294.431 113.866 294.776 113.784 295.157L113.314 297.363H112.576L113.604 292.547H114.215L114.118 293.439H114.162C114.373 293.161 114.547 292.961 114.685 292.841C114.823 292.718 114.966 292.625 115.116 292.56C115.268 292.493 115.437 292.459 115.621 292.459ZM121.031 292.459C121.3 292.459 121.541 292.532 121.752 292.679C121.962 292.822 122.127 293.03 122.244 293.303H122.292L122.586 292.547H123.145L122.121 297.363H121.536L121.65 296.445H121.615C121.091 297.116 120.539 297.451 119.959 297.451C119.551 297.451 119.232 297.306 119.001 297.016C118.769 296.726 118.653 296.329 118.653 295.825C118.653 295.216 118.757 294.65 118.965 294.129C119.173 293.607 119.461 293.199 119.827 292.903C120.193 292.607 120.594 292.459 121.031 292.459ZM120.196 296.84C120.48 296.84 120.763 296.706 121.044 296.436C121.325 296.164 121.554 295.811 121.73 295.377C121.905 294.94 121.993 294.504 121.993 294.067C121.993 293.766 121.911 293.525 121.747 293.347C121.583 293.168 121.368 293.079 121.101 293.079C120.796 293.079 120.512 293.205 120.249 293.457C119.988 293.708 119.783 294.05 119.633 294.48C119.484 294.911 119.409 295.365 119.409 295.843C119.409 296.177 119.478 296.427 119.616 296.594C119.753 296.758 119.947 296.84 120.196 296.84ZM126.616 292.459C126.818 292.459 126.994 292.479 127.144 292.521L126.985 293.18C126.83 293.142 126.676 293.123 126.524 293.123C126.257 293.123 126.007 293.21 125.773 293.386C125.541 293.562 125.337 293.807 125.162 294.12C124.989 294.431 124.861 294.776 124.779 295.157L124.309 297.363H123.571L124.599 292.547H125.21L125.113 293.439H125.157C125.368 293.161 125.543 292.961 125.68 292.841C125.818 292.718 125.961 292.625 126.111 292.56C126.263 292.493 126.432 292.459 126.616 292.459ZM129.275 297.451C128.991 297.451 128.74 297.376 128.523 297.227C128.31 297.078 128.148 296.874 128.04 296.616H127.996L127.689 297.363H127.139L128.589 290.525H129.328C129.178 291.234 129.063 291.778 128.981 292.156C128.901 292.531 128.792 292.97 128.651 293.474H128.69C128.963 293.128 129.231 292.875 129.495 292.714C129.761 292.55 130.035 292.468 130.316 292.468C130.73 292.468 131.052 292.613 131.283 292.903C131.515 293.193 131.63 293.591 131.63 294.098C131.63 294.71 131.529 295.277 131.327 295.799C131.128 296.317 130.848 296.723 130.488 297.016C130.13 297.306 129.726 297.451 129.275 297.451ZM130.092 293.079C129.811 293.079 129.524 293.218 129.231 293.496C128.941 293.774 128.71 294.125 128.537 294.546C128.367 294.968 128.282 295.4 128.282 295.843C128.282 296.165 128.362 296.413 128.523 296.585C128.688 296.755 128.923 296.84 129.231 296.84C129.521 296.84 129.791 296.722 130.04 296.484C130.292 296.247 130.494 295.91 130.646 295.474C130.798 295.034 130.875 294.568 130.875 294.076C130.875 293.411 130.614 293.079 130.092 293.079ZM133.072 297.363H132.334L133.362 292.547H134.1L133.072 297.363ZM133.568 291.316C133.568 291.152 133.615 291.019 133.709 290.917C133.803 290.811 133.924 290.758 134.074 290.758C134.332 290.758 134.461 290.89 134.461 291.154C134.461 291.315 134.411 291.451 134.311 291.562C134.214 291.674 134.102 291.729 133.973 291.729C133.856 291.729 133.759 291.694 133.683 291.624C133.607 291.551 133.568 291.448 133.568 291.316ZM136.095 296.849C136.256 296.849 136.467 296.811 136.728 296.735V297.302C136.628 297.343 136.505 297.378 136.359 297.407C136.212 297.437 136.095 297.451 136.007 297.451C135.641 297.451 135.36 297.365 135.164 297.192C134.97 297.016 134.874 296.755 134.874 296.41C134.874 296.216 134.9 295.997 134.953 295.75L135.511 293.105H134.755L134.816 292.784L135.629 292.441L136.179 291.439H136.609L136.368 292.547H137.572L137.458 293.105H136.258L135.691 295.759C135.638 296.014 135.612 296.208 135.612 296.339C135.612 296.503 135.654 296.629 135.739 296.717C135.824 296.805 135.943 296.849 136.095 296.849ZM140.582 292.459C140.784 292.459 140.96 292.479 141.109 292.521L140.951 293.18C140.796 293.142 140.642 293.123 140.49 293.123C140.223 293.123 139.973 293.21 139.738 293.386C139.507 293.562 139.303 293.807 139.128 294.12C138.955 294.431 138.827 294.776 138.745 295.157L138.275 297.363H137.537L138.565 292.547H139.176L139.079 293.439H139.123C139.334 293.161 139.508 292.961 139.646 292.841C139.784 292.718 139.927 292.625 140.077 292.56C140.229 292.493 140.398 292.459 140.582 292.459ZM143.654 292.459C143.923 292.459 144.164 292.532 144.375 292.679C144.586 292.822 144.75 293.03 144.867 293.303H144.915L145.21 292.547H145.768L144.744 297.363H144.159L144.273 296.445H144.238C143.714 297.116 143.162 297.451 142.582 297.451C142.174 297.451 141.855 297.306 141.624 297.016C141.392 296.726 141.276 296.329 141.276 295.825C141.276 295.216 141.38 294.65 141.588 294.129C141.796 293.607 142.084 293.199 142.45 292.903C142.816 292.607 143.217 292.459 143.654 292.459ZM142.819 296.84C143.103 296.84 143.386 296.706 143.667 296.436C143.948 296.164 144.177 295.811 144.353 295.377C144.528 294.94 144.616 294.504 144.616 294.067C144.616 293.766 144.534 293.525 144.37 293.347C144.206 293.168 143.991 293.079 143.724 293.079C143.419 293.079 143.135 293.205 142.872 293.457C142.611 293.708 142.406 294.05 142.256 294.48C142.107 294.911 142.032 295.365 142.032 295.843C142.032 296.177 142.101 296.427 142.239 296.594C142.377 296.758 142.57 296.84 142.819 296.84ZM147.67 296.849C147.832 296.849 148.043 296.811 148.303 296.735V297.302C148.204 297.343 148.081 297.378 147.934 297.407C147.788 297.437 147.67 297.451 147.583 297.451C147.216 297.451 146.935 297.365 146.739 297.192C146.545 297.016 146.449 296.755 146.449 296.41C146.449 296.216 146.475 295.997 146.528 295.75L147.086 293.105H146.33L146.392 292.784L147.205 292.441L147.754 291.439H148.185L147.943 292.547H149.147L149.033 293.105H147.833L147.266 295.759C147.213 296.014 147.187 296.208 147.187 296.339C147.187 296.503 147.23 296.629 147.315 296.717C147.399 296.805 147.518 296.849 147.67 296.849ZM149.85 297.363H149.112L150.14 292.547H150.878L149.85 297.363ZM150.347 291.316C150.347 291.152 150.394 291.019 150.487 290.917C150.581 290.811 150.703 290.758 150.852 290.758C151.11 290.758 151.239 290.89 151.239 291.154C151.239 291.315 151.189 291.451 151.089 291.562C150.993 291.674 150.88 291.729 150.751 291.729C150.634 291.729 150.537 291.694 150.461 291.624C150.385 291.551 150.347 291.448 150.347 291.316ZM153.963 292.485C154.52 292.485 154.96 292.651 155.282 292.982C155.604 293.31 155.765 293.763 155.765 294.34C155.765 294.891 155.66 295.411 155.449 295.9C155.238 296.389 154.952 296.767 154.592 297.034C154.232 297.3 153.824 297.434 153.37 297.434C152.808 297.434 152.367 297.268 152.047 296.937C151.728 296.606 151.568 296.153 151.568 295.579C151.568 295.022 151.675 294.5 151.889 294.01C152.103 293.518 152.392 293.142 152.755 292.881C153.118 292.617 153.521 292.485 153.963 292.485ZM155.001 294.239C155.001 293.902 154.908 293.629 154.724 293.421C154.542 293.21 154.294 293.105 153.981 293.105C153.662 293.105 153.375 293.213 153.12 293.43C152.868 293.647 152.671 293.949 152.531 294.335C152.393 294.719 152.324 295.147 152.324 295.619C152.324 296.002 152.417 296.3 152.601 296.511C152.789 296.719 153.057 296.823 153.405 296.823C153.71 296.823 153.984 296.716 154.227 296.502C154.47 296.288 154.659 295.985 154.794 295.592C154.932 295.197 155.001 294.746 155.001 294.239ZM159.395 297.363L160.045 294.322C160.104 294.018 160.133 293.807 160.133 293.689C160.133 293.505 160.081 293.357 159.975 293.246C159.873 293.134 159.707 293.079 159.479 293.079C159.218 293.079 158.963 293.167 158.714 293.342C158.468 293.518 158.25 293.769 158.059 294.094C157.872 294.419 157.73 294.813 157.633 295.276L157.189 297.363H156.451L157.479 292.547H158.09L157.993 293.439H158.037C158.318 293.082 158.589 292.83 158.85 292.683C159.114 292.534 159.386 292.459 159.668 292.459C160.04 292.459 160.333 292.562 160.546 292.767C160.763 292.969 160.872 293.253 160.872 293.619C160.872 293.851 160.838 294.114 160.771 294.41L160.142 297.363H159.395ZM163.267 299.525C163.065 299.525 162.881 299.495 162.717 299.433V298.813C162.905 298.878 163.069 298.91 163.21 298.91C163.432 298.91 163.604 298.819 163.724 298.638C163.844 298.456 163.94 298.197 164.014 297.86L165.011 293.105H164.163L164.22 292.811L165.126 292.521L165.227 292.081C165.361 291.495 165.547 291.082 165.785 290.842C166.025 290.599 166.379 290.477 166.848 290.477C166.965 290.477 167.109 290.495 167.279 290.53C167.449 290.562 167.581 290.599 167.674 290.64L167.485 291.207C167.263 291.122 167.062 291.079 166.883 291.079C166.628 291.079 166.432 291.151 166.294 291.294C166.16 291.435 166.05 291.694 165.965 292.072L165.855 292.547H166.901L166.791 293.105H165.75L164.73 297.93C164.616 298.484 164.44 298.888 164.203 299.143C163.965 299.398 163.653 299.525 163.267 299.525ZM168.707 297.451C168.168 297.451 167.745 297.292 167.437 296.972C167.129 296.653 166.976 296.21 166.976 295.645C166.976 295.094 167.084 294.567 167.301 294.063C167.521 293.556 167.811 293.162 168.171 292.881C168.531 292.6 168.928 292.459 169.362 292.459C169.81 292.459 170.147 292.557 170.373 292.753C170.598 292.947 170.711 293.218 170.711 293.566C170.711 294.094 170.468 294.508 169.982 294.81C169.495 295.109 168.799 295.258 167.894 295.258H167.749L167.732 295.61C167.732 295.994 167.821 296.294 168 296.511C168.181 296.725 168.461 296.832 168.839 296.832C169.023 296.832 169.212 296.805 169.406 296.752C169.602 296.7 169.845 296.603 170.135 296.462V297.104C169.86 297.233 169.617 297.322 169.406 297.372C169.195 297.425 168.962 297.451 168.707 297.451ZM169.318 293.087C169.016 293.087 168.732 293.225 168.465 293.5C168.202 293.776 168 294.158 167.859 294.647H167.912C168.58 294.647 169.091 294.561 169.445 294.388C169.803 294.212 169.982 293.959 169.982 293.628C169.982 293.473 169.927 293.344 169.819 293.241C169.713 293.139 169.546 293.087 169.318 293.087ZM173.146 297.451C172.607 297.451 172.183 297.292 171.876 296.972C171.568 296.653 171.414 296.21 171.414 295.645C171.414 295.094 171.523 294.567 171.739 294.063C171.959 293.556 172.249 293.162 172.609 292.881C172.97 292.6 173.367 292.459 173.8 292.459C174.249 292.459 174.586 292.557 174.811 292.753C175.037 292.947 175.149 293.218 175.149 293.566C175.149 294.094 174.906 294.508 174.42 294.81C173.934 295.109 173.238 295.258 172.333 295.258H172.188L172.17 295.61C172.17 295.994 172.259 296.294 172.438 296.511C172.62 296.725 172.899 296.832 173.277 296.832C173.462 296.832 173.651 296.805 173.844 296.752C174.041 296.7 174.284 296.603 174.574 296.462V297.104C174.298 297.233 174.055 297.322 173.844 297.372C173.633 297.425 173.4 297.451 173.146 297.451ZM173.756 293.087C173.455 293.087 173.17 293.225 172.904 293.5C172.64 293.776 172.438 294.158 172.297 294.647H172.35C173.018 294.647 173.529 294.561 173.884 294.388C174.241 294.212 174.42 293.959 174.42 293.628C174.42 293.473 174.366 293.344 174.257 293.241C174.152 293.139 173.985 293.087 173.756 293.087ZM178.652 295.997C178.652 296.454 178.489 296.811 178.164 297.069C177.842 297.324 177.386 297.451 176.797 297.451C176.302 297.451 175.856 297.35 175.457 297.148V296.454C175.662 296.577 175.883 296.672 176.121 296.739C176.358 296.807 176.578 296.84 176.78 296.84C177.149 296.84 177.427 296.767 177.615 296.621C177.802 296.474 177.896 296.287 177.896 296.058C177.896 295.891 177.845 295.75 177.742 295.636C177.64 295.522 177.419 295.365 177.079 295.166C176.698 294.952 176.428 294.743 176.27 294.538C176.112 294.333 176.033 294.089 176.033 293.808C176.033 293.404 176.181 293.079 176.477 292.833C176.773 292.583 177.162 292.459 177.646 292.459C178.147 292.459 178.63 292.567 179.096 292.784L178.858 293.386L178.612 293.276C178.316 293.15 177.994 293.087 177.646 293.087C177.373 293.087 177.159 293.152 177.004 293.281C176.849 293.407 176.771 293.571 176.771 293.773C176.771 293.937 176.822 294.078 176.925 294.195C177.03 294.312 177.246 294.463 177.571 294.647C177.884 294.823 178.108 294.974 178.243 295.1C178.381 295.226 178.483 295.362 178.551 295.509C178.618 295.652 178.652 295.815 178.652 295.997Z" class="path-13"/> -<rect x="35" y="64.1055" width="65.2613" height="25.8153" rx="12.9077" class="rect-6"/> -<g clip-path="url(#clip4_14063_184039)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M50.9896 71.6055L57.2045 71.8833L59.7207 77.4752L56.1708 82.5857L49.9221 82.1855L47.3604 76.1268L50.9896 71.6055ZM55.546 74.8287L51.0418 76.7971L54.8926 79.775L55.546 74.8287ZM55.0245 73.8424L51.4249 72.2922L50.6688 75.5516L55.0245 73.8424ZM54.1121 80.5243L50.2001 77.7303L50.2947 81.5164L54.1121 80.5243ZM59.0959 77.4628L56.43 74.7571L55.7264 79.9601L59.0959 77.4628ZM55.0293 81.1329L51.73 81.9954L55.61 82.2439L55.0293 81.1329ZM58.5749 78.6904L55.6868 80.8423L56.2607 81.964L58.5749 78.6904ZM57.2088 72.6646L56.6479 73.8164L58.7358 75.9392L57.2088 72.6646ZM56.5099 72.1134L52.8434 71.9646L55.8678 73.2877L56.5099 72.1134ZM50.4542 72.6461L47.8861 75.8896L49.6031 76.2533L50.4542 72.6461ZM49.4995 76.8896L47.7743 76.5242L49.5744 80.7661L49.4995 76.8896Z" class="path-14"/> -</g> -<path d="M71.8578 76.0407C71.8578 76.8223 71.5902 77.4243 71.0551 77.8468C70.5234 78.2657 69.7612 78.4752 68.7684 78.4752H67.8601V81.5117H66.9623V73.791H68.9638C70.8931 73.791 71.8578 74.5409 71.8578 76.0407ZM67.8601 77.7042H68.6681C69.4637 77.7042 70.0394 77.5757 70.3949 77.3187C70.7505 77.0617 70.9283 76.6498 70.9283 76.0829C70.9283 75.5724 70.7611 75.1922 70.4266 74.9423C70.0922 74.6923 69.5711 74.5673 68.8635 74.5673H67.8601V77.7042ZM79.5098 81.5117H78.4853L74.2658 75.032H74.2236C74.2799 75.7925 74.3081 76.4896 74.3081 77.1233V81.5117H73.479V73.791H74.4929L78.7018 80.2443H78.7441C78.737 80.1492 78.7212 79.8447 78.6965 79.3307C78.6719 78.8132 78.6631 78.4435 78.6701 78.2217V73.791H79.5098V81.5117ZM87.2094 81.5117H86.1532L83.3385 77.7675L82.5305 78.4858V81.5117H81.6327V73.791H82.5305V77.6197L86.0317 73.791H87.0932L83.988 77.1444L87.2094 81.5117Z" class="path-15"/> -<path d="M105.984 82.1738C105.782 82.1738 105.599 82.1431 105.435 82.0815V81.4619C105.623 81.5264 105.787 81.5586 105.927 81.5586C106.15 81.5586 106.321 81.4678 106.441 81.2861C106.562 81.1045 106.658 80.8452 106.732 80.5083L107.729 75.7534H106.881L106.938 75.459L107.843 75.1689L107.944 74.7295C108.079 74.1436 108.265 73.7305 108.503 73.4902C108.743 73.2471 109.097 73.1255 109.566 73.1255C109.683 73.1255 109.827 73.1431 109.997 73.1782C110.167 73.2104 110.298 73.2471 110.392 73.2881L110.203 73.855C109.981 73.77 109.78 73.7275 109.601 73.7275C109.346 73.7275 109.15 73.7993 109.012 73.9429C108.878 74.0835 108.768 74.3428 108.683 74.7207L108.573 75.1953H109.619L109.509 75.7534H108.467L107.448 80.5786C107.334 81.1323 107.158 81.5366 106.92 81.7915C106.683 82.0464 106.371 82.1738 105.984 82.1738ZM112.088 75.1338C112.645 75.1338 113.085 75.2993 113.407 75.6304C113.729 75.9585 113.89 76.4111 113.89 76.9883C113.89 77.5391 113.785 78.0591 113.574 78.5483C113.363 79.0376 113.077 79.4155 112.717 79.6821C112.357 79.9487 111.949 80.082 111.495 80.082C110.933 80.082 110.492 79.9165 110.172 79.5854C109.853 79.2544 109.693 78.8018 109.693 78.2275C109.693 77.6709 109.8 77.1479 110.014 76.6587C110.228 76.1665 110.517 75.79 110.88 75.5293C111.243 75.2656 111.646 75.1338 112.088 75.1338ZM113.126 76.8872C113.126 76.5503 113.033 76.2778 112.849 76.0698C112.667 75.8589 112.419 75.7534 112.106 75.7534C111.787 75.7534 111.5 75.8618 111.245 76.0786C110.993 76.2954 110.796 76.5972 110.656 76.9839C110.518 77.3677 110.449 77.7954 110.449 78.2671C110.449 78.6509 110.542 78.9482 110.726 79.1592C110.914 79.3672 111.182 79.4712 111.53 79.4712C111.835 79.4712 112.109 79.3643 112.352 79.1504C112.595 78.9365 112.784 78.6333 112.919 78.2407C113.057 77.8452 113.126 77.394 113.126 76.8872ZM117.621 75.1074C117.823 75.1074 117.999 75.1279 118.148 75.1689L117.99 75.8281C117.835 75.79 117.681 75.771 117.529 75.771C117.262 75.771 117.012 75.8589 116.777 76.0347C116.546 76.2104 116.342 76.4551 116.167 76.7686C115.994 77.0791 115.866 77.4248 115.784 77.8057L115.314 80.0117H114.576L115.604 75.1953H116.215L116.118 76.0874H116.162C116.373 75.8091 116.547 75.6099 116.685 75.4897C116.823 75.3667 116.966 75.2729 117.116 75.2085C117.268 75.1411 117.437 75.1074 117.621 75.1074ZM123.453 78.645C123.453 79.1021 123.29 79.4595 122.965 79.7173C122.643 79.9722 122.187 80.0996 121.598 80.0996C121.103 80.0996 120.656 79.9985 120.258 79.7964V79.1021C120.463 79.2251 120.684 79.3203 120.921 79.3877C121.159 79.4551 121.378 79.4888 121.581 79.4888C121.95 79.4888 122.228 79.4155 122.416 79.269C122.603 79.1226 122.697 78.9351 122.697 78.7065C122.697 78.5396 122.646 78.3989 122.543 78.2847C122.44 78.1704 122.219 78.0137 121.879 77.8145C121.499 77.6006 121.229 77.3911 121.071 77.186C120.913 76.981 120.834 76.7378 120.834 76.4565C120.834 76.0522 120.982 75.7271 121.277 75.481C121.573 75.2319 121.963 75.1074 122.446 75.1074C122.947 75.1074 123.431 75.2158 123.897 75.4326L123.659 76.0347L123.413 75.9248C123.117 75.7988 122.795 75.7358 122.446 75.7358C122.174 75.7358 121.96 75.8003 121.805 75.9292C121.649 76.0552 121.572 76.2192 121.572 76.4214C121.572 76.5854 121.623 76.7261 121.726 76.8433C121.831 76.9604 122.046 77.1113 122.372 77.2959C122.685 77.4717 122.909 77.6226 123.044 77.7485C123.182 77.8745 123.284 78.0107 123.352 78.1572C123.419 78.3008 123.453 78.4634 123.453 78.645ZM125.817 79.4976C125.978 79.4976 126.189 79.4595 126.45 79.3833V79.9502C126.35 79.9912 126.227 80.0264 126.081 80.0557C125.934 80.085 125.817 80.0996 125.729 80.0996C125.363 80.0996 125.082 80.0132 124.885 79.8403C124.692 79.6646 124.595 79.4038 124.595 79.0581C124.595 78.8647 124.622 78.645 124.674 78.3989L125.232 75.7534H124.477L124.538 75.4326L125.351 75.0898L125.9 74.0879H126.331L126.089 75.1953H127.294L127.179 75.7534H125.98L125.413 78.4077C125.36 78.6626 125.334 78.856 125.334 78.9878C125.334 79.1519 125.376 79.2778 125.461 79.3657C125.546 79.4536 125.665 79.4976 125.817 79.4976ZM129.807 75.1074C130.077 75.1074 130.317 75.1807 130.528 75.3271C130.739 75.4707 130.903 75.6787 131.02 75.9512H131.068L131.363 75.1953H131.921L130.897 80.0117H130.313L130.427 79.0933H130.392C129.867 79.7642 129.315 80.0996 128.735 80.0996C128.328 80.0996 128.008 79.9546 127.777 79.6646C127.545 79.3745 127.43 78.9775 127.43 78.4736C127.43 77.8643 127.534 77.2988 127.742 76.7773C127.95 76.2559 128.237 75.8472 128.603 75.5513C128.969 75.2554 129.371 75.1074 129.807 75.1074ZM128.972 79.4888C129.256 79.4888 129.539 79.354 129.82 79.0845C130.102 78.812 130.33 78.459 130.506 78.0254C130.682 77.5889 130.77 77.1523 130.77 76.7158C130.77 76.4141 130.688 76.1738 130.523 75.9951C130.359 75.8164 130.144 75.7271 129.878 75.7271C129.573 75.7271 129.289 75.853 129.025 76.105C128.764 76.3569 128.559 76.6982 128.41 77.1289C128.26 77.5596 128.186 78.0137 128.186 78.4912C128.186 78.8252 128.254 79.0757 128.392 79.2427C128.53 79.4067 128.723 79.4888 128.972 79.4888ZM133.538 77.5552L135.85 75.1953H136.733L134.672 77.2476L135.968 80.0117H135.147L134.114 77.709L133.446 78.2495L133.086 80.0117H132.338L133.789 73.1738H134.536C134.325 74.1582 134.136 75.04 133.969 75.8193C133.802 76.5986 133.652 77.1772 133.521 77.5552H133.538ZM137.48 80.0117H136.742L137.77 75.1953H138.508L137.48 80.0117ZM137.977 73.9648C137.977 73.8008 138.023 73.6675 138.117 73.5649C138.211 73.4595 138.333 73.4067 138.482 73.4067C138.74 73.4067 138.869 73.5386 138.869 73.8022C138.869 73.9634 138.819 74.0996 138.719 74.2109C138.623 74.3223 138.51 74.3779 138.381 74.3779C138.264 74.3779 138.167 74.3428 138.091 74.2725C138.015 74.1992 137.977 74.0967 137.977 73.9648ZM141.971 80.0117L142.622 76.9707C142.68 76.666 142.71 76.4551 142.71 76.3379C142.71 76.1533 142.657 76.0054 142.551 75.894C142.449 75.7827 142.283 75.7271 142.055 75.7271C141.794 75.7271 141.539 75.8149 141.29 75.9907C141.044 76.1665 140.826 76.417 140.635 76.7422C140.448 77.0674 140.306 77.4614 140.209 77.9243L139.765 80.0117H139.027L140.055 75.1953H140.666L140.569 76.0874H140.613C140.895 75.73 141.166 75.478 141.426 75.3315C141.69 75.1821 141.962 75.1074 142.244 75.1074C142.616 75.1074 142.909 75.21 143.123 75.415C143.339 75.6172 143.448 75.9014 143.448 76.2676C143.448 76.499 143.414 76.7627 143.347 77.0586L142.718 80.0117H141.971ZM148.796 75.1953L148.686 75.6655L147.759 75.771C147.879 75.9526 147.939 76.1841 147.939 76.4653C147.939 77.0249 147.768 77.4717 147.425 77.8057C147.085 78.1367 146.629 78.3022 146.058 78.3022C145.897 78.3022 145.774 78.2905 145.689 78.2671C145.282 78.4224 145.078 78.6143 145.078 78.8428C145.078 78.9629 145.127 79.0435 145.223 79.0845C145.32 79.1226 145.461 79.1533 145.645 79.1768L146.159 79.2383C146.69 79.3027 147.073 79.4316 147.311 79.625C147.551 79.8184 147.671 80.1025 147.671 80.4775C147.671 81.0166 147.457 81.4341 147.029 81.73C146.602 82.0259 146 82.1738 145.223 82.1738C144.655 82.1738 144.21 82.0654 143.887 81.8486C143.565 81.6348 143.404 81.3315 143.404 80.939C143.404 80.6313 143.509 80.3647 143.72 80.1392C143.931 79.9136 144.273 79.7217 144.744 79.5635C144.516 79.4434 144.401 79.2661 144.401 79.0317C144.401 78.8296 144.476 78.6567 144.626 78.5132C144.775 78.3667 144.983 78.2305 145.25 78.1045C145.065 78.0107 144.914 77.873 144.797 77.6914C144.68 77.5068 144.621 77.293 144.621 77.0498C144.621 76.4814 144.795 76.0156 145.144 75.6523C145.496 75.2891 145.944 75.1074 146.489 75.1074C146.717 75.1074 146.943 75.1367 147.166 75.1953H148.796ZM144.116 80.8687C144.116 81.0942 144.211 81.2729 144.401 81.4048C144.592 81.5366 144.875 81.6025 145.25 81.6025C145.783 81.6025 146.199 81.5088 146.498 81.3213C146.799 81.1367 146.95 80.8745 146.95 80.5347C146.95 80.353 146.871 80.2095 146.713 80.104C146.555 79.9985 146.285 79.9253 145.904 79.8843L145.206 79.814C144.854 79.8872 144.585 80.0161 144.397 80.2007C144.21 80.3853 144.116 80.6079 144.116 80.8687ZM145.337 77.0234C145.337 77.2725 145.403 77.4629 145.535 77.5947C145.667 77.7236 145.85 77.7881 146.085 77.7881C146.316 77.7881 146.518 77.7266 146.691 77.6035C146.864 77.4805 146.996 77.312 147.086 77.0981C147.18 76.8813 147.227 76.647 147.227 76.395C147.227 76.1548 147.163 75.9717 147.034 75.8457C146.905 75.7197 146.72 75.6567 146.48 75.6567C146.252 75.6567 146.051 75.7168 145.878 75.8369C145.708 75.9541 145.575 76.1196 145.478 76.3335C145.384 76.5444 145.337 76.7744 145.337 77.0234Z" class="path-16"/> -<path d="M159.07 77.3345H161.246V78.0633H159.07V80.313H158.336V78.0633H156.171V77.3345H158.336V75.0743H159.07V77.3345Z" class="path-17"/> -<path d="M38.9774 166.22C38.2522 166.22 37.6818 166.477 37.2664 166.991C36.851 167.505 36.6432 168.214 36.6432 169.119C36.6432 170.066 36.8422 170.782 37.24 171.268C37.6413 171.754 38.2205 171.997 38.9774 171.997C39.3048 171.997 39.6217 171.965 39.928 171.902C40.2343 171.835 40.5529 171.751 40.8838 171.649V172.731C40.2783 172.96 39.5918 173.074 38.8243 173.074C37.6941 173.074 36.8263 172.733 36.2208 172.05C35.6152 171.363 35.3125 170.383 35.3125 169.108C35.3125 168.306 35.4586 167.603 35.7508 167.001C36.0465 166.399 36.4725 165.938 37.0288 165.618C37.585 165.297 38.2381 165.137 38.988 165.137C39.7766 165.137 40.5054 165.303 41.1743 165.634L40.7201 166.684C40.4596 166.561 40.1832 166.454 39.891 166.362C39.6023 166.267 39.2978 166.22 38.9774 166.22ZM47.5959 170.038C47.5959 170.992 47.3512 171.737 46.8618 172.272C46.3725 172.807 45.6912 173.074 44.8181 173.074C44.2724 173.074 43.7901 172.951 43.3711 172.705C42.9522 172.458 42.63 172.104 42.4047 171.643C42.1794 171.182 42.0667 170.647 42.0667 170.038C42.0667 169.091 42.3097 168.351 42.7955 167.82C43.2814 167.288 43.9661 167.022 44.8498 167.022C45.6947 167.022 46.3636 167.295 46.8565 167.841C47.3494 168.383 47.5959 169.115 47.5959 170.038ZM43.3447 170.038C43.3447 171.386 43.8429 172.06 44.8392 172.06C45.825 172.06 46.3179 171.386 46.3179 170.038C46.3179 168.704 45.8215 168.036 44.8287 168.036C44.3076 168.036 43.9291 168.209 43.6933 168.554C43.4609 168.899 43.3447 169.394 43.3447 170.038ZM54.1653 172.969H52.919V169.378C52.919 168.927 52.8275 168.591 52.6444 168.369C52.4649 168.147 52.1779 168.036 51.7836 168.036C51.2591 168.036 50.8753 168.191 50.6324 168.501C50.3895 168.811 50.268 169.33 50.268 170.059V172.969H49.027V167.128H49.9987L50.1729 167.894H50.2363C50.4124 167.616 50.6623 167.401 50.9862 167.25C51.3101 167.098 51.6692 167.022 52.0635 167.022C53.4647 167.022 54.1653 167.735 54.1653 169.161V172.969ZM58.0679 172.071C58.3707 172.071 58.6735 172.023 58.9762 171.928V172.863C58.8389 172.923 58.6611 172.972 58.4429 173.011C58.2281 173.053 58.0045 173.074 57.7722 173.074C56.5963 173.074 56.0084 172.455 56.0084 171.215V168.068H55.2109V167.519L56.0665 167.065L56.4889 165.829H57.2547V167.128H58.9181V168.068H57.2547V171.194C57.2547 171.494 57.3286 171.715 57.4765 171.86C57.6278 172.001 57.825 172.071 58.0679 172.071ZM63.1112 167.022C63.3612 167.022 63.5671 167.04 63.7291 167.075L63.6076 168.232C63.4316 168.19 63.2485 168.168 63.0584 168.168C62.562 168.168 62.1589 168.33 61.8491 168.654C61.5428 168.978 61.3896 169.399 61.3896 169.916V172.969H60.1486V167.128H61.1203L61.284 168.158H61.3474C61.541 167.809 61.7927 167.533 62.1025 167.329C62.4159 167.125 62.7521 167.022 63.1112 167.022ZM66.0579 172.969H64.8169V167.128H66.0579V172.969ZM64.743 165.581C64.743 165.359 64.8028 165.188 64.9225 165.069C65.0458 164.949 65.22 164.889 65.4454 164.889C65.6636 164.889 65.8326 164.949 65.9523 165.069C66.0755 165.188 66.1372 165.359 66.1372 165.581C66.1372 165.792 66.0755 165.959 65.9523 166.082C65.8326 166.202 65.6636 166.262 65.4454 166.262C65.22 166.262 65.0458 166.202 64.9225 166.082C64.8028 165.959 64.743 165.792 64.743 165.581ZM70.8213 167.022C71.5501 167.022 72.1169 167.286 72.5218 167.815C72.9302 168.343 73.1344 169.084 73.1344 170.038C73.1344 170.995 72.9284 171.742 72.5165 172.277C72.1046 172.809 71.5325 173.074 70.8002 173.074C70.0609 173.074 69.487 172.809 69.0786 172.277H68.9941L68.7671 172.969H67.8376V164.752H69.0786V166.706C69.0786 166.85 69.0716 167.065 69.0575 167.35C69.0434 167.635 69.0329 167.816 69.0258 167.894H69.0786C69.4729 167.313 70.0538 167.022 70.8213 167.022ZM70.4992 168.036C69.9993 168.036 69.6384 168.184 69.4166 168.48C69.1983 168.772 69.0857 169.263 69.0786 169.953V170.038C69.0786 170.749 69.1913 171.265 69.4166 171.585C69.6419 171.902 70.0098 172.06 70.5203 172.06C70.9604 172.06 71.2931 171.886 71.5184 171.538C71.7472 171.189 71.8617 170.686 71.8617 170.027C71.8617 168.7 71.4075 168.036 70.4992 168.036ZM78.6952 172.969L78.5209 172.203H78.4575C78.285 172.474 78.0386 172.687 77.7182 172.842C77.4013 172.997 77.0387 173.074 76.6303 173.074C75.9227 173.074 75.3946 172.898 75.0461 172.546C74.6975 172.194 74.5233 171.661 74.5233 170.946V167.128H75.7748V170.73C75.7748 171.177 75.8664 171.513 76.0494 171.738C76.2325 171.96 76.5194 172.071 76.9102 172.071C77.4313 172.071 77.8133 171.916 78.0562 171.606C78.3026 171.293 78.4258 170.77 78.4258 170.038V167.128H79.6721V172.969H78.6952ZM83.617 172.071C83.9198 172.071 84.2225 172.023 84.5253 171.928V172.863C84.388 172.923 84.2102 172.972 83.9919 173.011C83.7772 173.053 83.5536 173.074 83.3213 173.074C82.1454 173.074 81.5574 172.455 81.5574 171.215V168.068H80.76V167.519L81.6155 167.065L82.038 165.829H82.8037V167.128H84.4672V168.068H82.8037V171.194C82.8037 171.494 82.8777 171.715 83.0255 171.86C83.1769 172.001 83.3741 172.071 83.617 172.071ZM90.8782 170.038C90.8782 170.992 90.6336 171.737 90.1442 172.272C89.6548 172.807 88.9736 173.074 88.1005 173.074C87.5548 173.074 87.0725 172.951 86.6535 172.705C86.2346 172.458 85.9124 172.104 85.6871 171.643C85.4618 171.182 85.3491 170.647 85.3491 170.038C85.3491 169.091 85.592 168.351 86.0779 167.82C86.5637 167.288 87.2485 167.022 88.1322 167.022C88.9771 167.022 89.646 167.295 90.1389 167.841C90.6318 168.383 90.8782 169.115 90.8782 170.038ZM86.6271 170.038C86.6271 171.386 87.1253 172.06 88.1216 172.06C89.1074 172.06 89.6003 171.386 89.6003 170.038C89.6003 168.704 89.1039 168.036 88.111 168.036C87.59 168.036 87.2115 168.209 86.9756 168.554C86.7433 168.899 86.6271 169.394 86.6271 170.038ZM95.272 167.022C95.5219 167.022 95.7279 167.04 95.8898 167.075L95.7684 168.232C95.5923 168.19 95.4093 168.168 95.2192 168.168C94.7228 168.168 94.3196 168.33 94.0098 168.654C93.7035 168.978 93.5504 169.399 93.5504 169.916V172.969H92.3094V167.128H93.2811L93.4448 168.158H93.5081C93.7018 167.809 93.9535 167.533 94.2633 167.329C94.5766 167.125 94.9129 167.022 95.272 167.022ZM100.901 171.305C100.901 171.876 100.694 172.314 100.278 172.62C99.8628 172.923 99.2679 173.074 98.4933 173.074C97.7153 173.074 97.0904 172.956 96.6186 172.721V171.649C97.3051 171.965 97.9441 172.124 98.5356 172.124C99.2995 172.124 99.6815 171.893 99.6815 171.432C99.6815 171.284 99.6393 171.161 99.5548 171.062C99.4703 170.964 99.3312 170.862 99.1376 170.756C98.944 170.65 98.6746 170.531 98.3296 170.397C97.6572 170.136 97.2013 169.876 96.9619 169.615C96.726 169.355 96.608 169.017 96.608 168.601C96.608 168.102 96.8087 167.714 97.2101 167.44C97.6149 167.162 98.1642 167.022 98.8577 167.022C99.5442 167.022 100.194 167.162 100.806 167.44L100.405 168.374C99.7748 168.114 99.245 167.984 98.8155 167.984C98.1606 167.984 97.8332 168.17 97.8332 168.543C97.8332 168.726 97.9177 168.881 98.0867 169.008C98.2592 169.135 98.6324 169.309 99.2063 169.531C99.6886 169.717 100.039 169.888 100.257 170.043C100.475 170.198 100.637 170.378 100.743 170.582C100.849 170.782 100.901 171.024 100.901 171.305Z" class="path-18"/> -<path d="M112.744 172.969V169.225C112.744 168.753 112.636 168.401 112.422 168.168C112.207 167.936 111.871 167.82 111.413 167.82C110.807 167.82 110.364 167.984 110.082 168.311C109.801 168.638 109.66 169.179 109.66 169.932V172.969H108.783V167.181H109.496L109.639 167.973H109.681C109.86 167.688 110.112 167.468 110.436 167.313C110.76 167.154 111.121 167.075 111.519 167.075C112.216 167.075 112.74 167.244 113.092 167.582C113.444 167.917 113.62 168.454 113.62 169.193V172.969H112.744ZM117.872 173.074C117.016 173.074 116.34 172.814 115.844 172.293C115.351 171.772 115.104 171.048 115.104 170.122C115.104 169.189 115.333 168.448 115.791 167.899C116.252 167.35 116.87 167.075 117.644 167.075C118.37 167.075 118.944 167.315 119.366 167.793C119.789 168.269 120 168.897 120 169.679V170.233H116.013C116.03 170.913 116.201 171.428 116.525 171.781C116.852 172.133 117.312 172.309 117.903 172.309C118.526 172.309 119.142 172.178 119.752 171.918V172.699C119.442 172.833 119.148 172.928 118.87 172.985C118.595 173.044 118.262 173.074 117.872 173.074ZM117.634 167.809C117.169 167.809 116.798 167.961 116.52 168.263C116.245 168.566 116.083 168.985 116.034 169.52H119.06C119.06 168.968 118.937 168.545 118.69 168.253C118.444 167.957 118.092 167.809 117.634 167.809ZM123.945 173.074C123.089 173.074 122.413 172.814 121.917 172.293C121.424 171.772 121.177 171.048 121.177 170.122C121.177 169.189 121.406 168.448 121.864 167.899C122.325 167.35 122.943 167.075 123.718 167.075C124.443 167.075 125.017 167.315 125.439 167.793C125.862 168.269 126.073 168.897 126.073 169.679V170.233H122.086C122.103 170.913 122.274 171.428 122.598 171.781C122.925 172.133 123.385 172.309 123.976 172.309C124.599 172.309 125.216 172.178 125.825 171.918V172.699C125.515 172.833 125.221 172.928 124.943 172.985C124.668 173.044 124.335 173.074 123.945 173.074ZM123.707 167.809C123.242 167.809 122.871 167.961 122.593 168.263C122.318 168.566 122.156 168.985 122.107 169.52H125.133C125.133 168.968 125.01 168.545 124.763 168.253C124.517 167.957 124.165 167.809 123.707 167.809ZM131.512 172.192H131.465C131.06 172.78 130.454 173.074 129.648 173.074C128.891 173.074 128.301 172.816 127.879 172.298C127.46 171.781 127.25 171.045 127.25 170.091C127.25 169.137 127.462 168.395 127.884 167.867C128.307 167.339 128.895 167.075 129.648 167.075C130.433 167.075 131.035 167.36 131.454 167.931H131.523L131.486 167.514L131.465 167.107V164.752H132.341V172.969H131.628L131.512 172.192ZM129.759 172.34C130.357 172.34 130.79 172.178 131.058 171.854C131.329 171.527 131.465 171.001 131.465 170.275V170.091C131.465 169.27 131.327 168.686 131.053 168.337C130.782 167.985 130.347 167.809 129.748 167.809C129.234 167.809 128.84 168.01 128.565 168.411C128.294 168.809 128.159 169.372 128.159 170.101C128.159 170.841 128.294 171.399 128.565 171.775C128.836 172.152 129.234 172.34 129.759 172.34ZM140.574 172.969L140.4 172.145H140.358C140.069 172.508 139.78 172.754 139.492 172.884C139.206 173.011 138.849 173.074 138.42 173.074C137.846 173.074 137.395 172.927 137.068 172.631C136.744 172.335 136.582 171.914 136.582 171.369C136.582 170.2 137.517 169.587 139.386 169.531L140.368 169.499V169.14C140.368 168.686 140.27 168.351 140.073 168.137C139.879 167.918 139.567 167.809 139.138 167.809C138.655 167.809 138.11 167.957 137.501 168.253L137.231 167.582C137.517 167.427 137.828 167.306 138.166 167.218C138.508 167.13 138.849 167.086 139.191 167.086C139.881 167.086 140.391 167.239 140.722 167.545C141.057 167.852 141.224 168.343 141.224 169.019V172.969H140.574ZM138.594 172.351C139.14 172.351 139.567 172.201 139.877 171.902C140.19 171.603 140.347 171.184 140.347 170.645V170.122L139.47 170.159C138.773 170.184 138.27 170.293 137.96 170.487C137.654 170.677 137.501 170.974 137.501 171.379C137.501 171.696 137.596 171.937 137.786 172.103C137.98 172.268 138.249 172.351 138.594 172.351ZM150.571 172.969L149.51 169.573C149.443 169.365 149.318 168.894 149.135 168.158H149.092C148.951 168.774 148.828 169.249 148.723 169.584L147.629 172.969H146.616L145.037 167.181H145.955C146.329 168.635 146.612 169.742 146.806 170.503C147.003 171.263 147.115 171.775 147.144 172.039H147.186C147.225 171.839 147.286 171.58 147.371 171.263C147.459 170.943 147.534 170.689 147.598 170.503L148.659 167.181H149.61L150.645 170.503C150.842 171.108 150.976 171.617 151.046 172.029H151.088C151.103 171.902 151.14 171.707 151.199 171.443C151.263 171.179 151.631 169.758 152.303 167.181H153.211L151.611 172.969H150.571ZM157.822 172.969L157.647 172.145H157.605C157.316 172.508 157.028 172.754 156.739 172.884C156.454 173.011 156.097 173.074 155.667 173.074C155.093 173.074 154.643 172.927 154.315 172.631C153.991 172.335 153.829 171.914 153.829 171.369C153.829 170.2 154.764 169.587 156.633 169.531L157.616 169.499V169.14C157.616 168.686 157.517 168.351 157.32 168.137C157.126 167.918 156.815 167.809 156.385 167.809C155.903 167.809 155.357 167.957 154.748 168.253L154.479 167.582C154.764 167.427 155.076 167.306 155.414 167.218C155.755 167.13 156.097 167.086 156.438 167.086C157.128 167.086 157.639 167.239 157.97 167.545C158.304 167.852 158.471 168.343 158.471 169.019V172.969H157.822ZM155.841 172.351C156.387 172.351 156.815 172.201 157.125 171.902C157.438 171.603 157.595 171.184 157.595 170.645V170.122L156.718 170.159C156.021 170.184 155.517 170.293 155.208 170.487C154.901 170.677 154.748 170.974 154.748 171.379C154.748 171.696 154.843 171.937 155.033 172.103C155.227 172.268 155.496 172.351 155.841 172.351ZM161.159 172.969H160.283V164.752H161.159V172.969ZM163.895 172.969H163.018V164.752H163.895V172.969ZM168.199 173.074C167.343 173.074 166.667 172.814 166.171 172.293C165.678 171.772 165.431 171.048 165.431 170.122C165.431 169.189 165.66 168.448 166.118 167.899C166.579 167.35 167.197 167.075 167.972 167.075C168.697 167.075 169.271 167.315 169.693 167.793C170.116 168.269 170.327 168.897 170.327 169.679V170.233H166.34C166.357 170.913 166.528 171.428 166.852 171.781C167.179 172.133 167.639 172.309 168.23 172.309C168.853 172.309 169.47 172.178 170.079 171.918V172.699C169.769 172.833 169.475 172.928 169.197 172.985C168.922 173.044 168.589 173.074 168.199 173.074ZM167.961 167.809C167.496 167.809 167.125 167.961 166.847 168.263C166.572 168.566 166.41 168.985 166.361 169.52H169.387C169.387 168.968 169.264 168.545 169.017 168.253C168.771 167.957 168.419 167.809 167.961 167.809ZM173.696 172.351C173.851 172.351 174.001 172.34 174.145 172.319C174.289 172.295 174.404 172.27 174.488 172.245V172.916C174.393 172.962 174.252 172.999 174.066 173.027C173.883 173.059 173.717 173.074 173.569 173.074C172.45 173.074 171.89 172.485 171.89 171.305V167.862H171.061V167.44L171.89 167.075L172.26 165.84H172.767V167.181H174.446V167.862H172.767V171.268C172.767 171.617 172.849 171.884 173.015 172.071C173.18 172.258 173.407 172.351 173.696 172.351Z" class="path-19"/> -<g clip-path="url(#clip5_14063_184039)"> -<path d="M191.849 163.062C192.276 163.062 192.622 163.408 192.622 163.835C192.622 164.262 192.276 164.608 191.849 164.608H182.965C182.752 164.608 182.579 164.781 182.579 164.994C182.579 165.206 182.752 165.38 182.965 165.38H191.849C192.701 165.38 193.394 166.073 193.394 166.925V172.333C193.394 173.185 192.701 173.878 191.849 173.878H182.579C181.725 173.878 181.034 173.185 181.034 172.333V164.608C181.034 163.754 181.725 163.062 182.579 163.062H191.849ZM191.077 170.401C191.504 170.401 191.849 170.056 191.849 169.629C191.849 169.202 191.504 168.856 191.077 168.856C190.649 168.856 190.304 169.202 190.304 169.629C190.304 170.056 190.649 170.401 191.077 170.401Z" class="path-20"/> -</g> -<path d="M205.23 172.969L204.169 169.573C204.102 169.365 203.977 168.894 203.794 168.158H203.752C203.611 168.774 203.487 169.249 203.382 169.584L202.289 172.969H201.275L199.696 167.181H200.615C200.988 168.635 201.271 169.742 201.465 170.503C201.662 171.263 201.775 171.775 201.803 172.039H201.845C201.884 171.839 201.945 171.58 202.03 171.263C202.118 170.943 202.194 170.689 202.257 170.503L203.319 167.181H204.269L205.304 170.503C205.501 171.108 205.635 171.617 205.705 172.029H205.748C205.762 171.902 205.799 171.707 205.859 171.443C205.922 171.179 206.29 169.758 206.962 167.181H207.871L206.271 172.969H205.23ZM209.798 172.969H208.922V167.181H209.798V172.969ZM208.848 165.612C208.848 165.412 208.897 165.266 208.995 165.174C209.094 165.079 209.217 165.032 209.365 165.032C209.506 165.032 209.627 165.079 209.73 165.174C209.832 165.269 209.883 165.415 209.883 165.612C209.883 165.81 209.832 165.957 209.73 166.056C209.627 166.151 209.506 166.199 209.365 166.199C209.217 166.199 209.094 166.151 208.995 166.056C208.897 165.957 208.848 165.81 208.848 165.612ZM213.527 172.351C213.681 172.351 213.831 172.34 213.975 172.319C214.12 172.295 214.234 172.27 214.319 172.245V172.916C214.224 172.962 214.083 172.999 213.896 173.027C213.713 173.059 213.548 173.074 213.4 173.074C212.28 173.074 211.72 172.485 211.72 171.305V167.862H210.891V167.44L211.72 167.075L212.09 165.84H212.597V167.181H214.276V167.862H212.597V171.268C212.597 171.617 212.68 171.884 212.845 172.071C213.011 172.258 213.238 172.351 213.527 172.351ZM219.441 172.969V169.225C219.441 168.753 219.334 168.401 219.119 168.168C218.904 167.936 218.568 167.82 218.11 167.82C217.501 167.82 217.056 167.985 216.774 168.316C216.496 168.647 216.357 169.189 216.357 169.943V172.969H215.48V164.752H216.357V167.239C216.357 167.538 216.343 167.786 216.315 167.984H216.368C216.54 167.705 216.785 167.487 217.102 167.329C217.422 167.167 217.786 167.086 218.195 167.086C218.902 167.086 219.432 167.255 219.784 167.593C220.14 167.927 220.318 168.461 220.318 169.193V172.969H219.441Z" class="path-21"/> -<path d="M38.9774 259.833C38.2522 259.833 37.6818 260.09 37.2664 260.604C36.851 261.118 36.6432 261.827 36.6432 262.732C36.6432 263.679 36.8422 264.396 37.24 264.882C37.6413 265.367 38.2205 265.61 38.9774 265.61C39.3048 265.61 39.6217 265.579 39.928 265.515C40.2343 265.448 40.5529 265.364 40.8838 265.262V266.344C40.2783 266.573 39.5918 266.688 38.8243 266.688C37.6941 266.688 36.8263 266.346 36.2208 265.663C35.6152 264.977 35.3125 263.996 35.3125 262.722C35.3125 261.919 35.4586 261.217 35.7508 260.615C36.0465 260.013 36.4725 259.551 37.0288 259.231C37.585 258.911 38.2381 258.75 38.988 258.75C39.7766 258.75 40.5054 258.916 41.1743 259.247L40.7201 260.298C40.4596 260.175 40.1832 260.067 39.891 259.976C39.6023 259.881 39.2978 259.833 38.9774 259.833ZM46.0697 266.582L45.8215 265.769H45.7792C45.4976 266.124 45.2142 266.367 44.929 266.498C44.6438 266.624 44.2777 266.688 43.8306 266.688C43.2567 266.688 42.8078 266.533 42.4839 266.223C42.1636 265.913 42.0034 265.475 42.0034 264.908C42.0034 264.306 42.2269 263.852 42.674 263.546C43.1212 263.239 43.8024 263.072 44.7178 263.044L45.7264 263.012V262.701C45.7264 262.327 45.6384 262.049 45.4624 261.866C45.2899 261.68 45.0205 261.586 44.6544 261.586C44.3551 261.586 44.0682 261.63 43.7936 261.718C43.519 261.806 43.2549 261.91 43.0015 262.03L42.6001 261.143C42.917 260.977 43.2638 260.852 43.6405 260.768C44.0172 260.68 44.3727 260.636 44.7072 260.636C45.4501 260.636 46.0098 260.798 46.3865 261.122C46.7668 261.445 46.9569 261.954 46.9569 262.648V266.582H46.0697ZM44.2214 265.737C44.672 265.737 45.0329 265.612 45.3039 265.362C45.5786 265.109 45.7159 264.755 45.7159 264.301V263.794L44.966 263.825C44.3815 263.847 43.9556 263.945 43.688 264.121C43.4239 264.294 43.2919 264.559 43.2919 264.919C43.2919 265.179 43.3694 265.382 43.5243 265.526C43.6792 265.667 43.9115 265.737 44.2214 265.737ZM52.6127 264.919C52.6127 265.489 52.405 265.927 51.9896 266.233C51.5742 266.536 50.9792 266.688 50.2046 266.688C49.4266 266.688 48.8017 266.57 48.3299 266.334V265.262C49.0164 265.579 49.6554 265.737 50.2469 265.737C51.0109 265.737 51.3928 265.506 51.3928 265.045C51.3928 264.897 51.3506 264.774 51.2661 264.676C51.1816 264.577 51.0425 264.475 50.8489 264.369C50.6553 264.264 50.3859 264.144 50.0409 264.01C49.3685 263.75 48.9126 263.489 48.6732 263.229C48.4373 262.968 48.3193 262.63 48.3193 262.215C48.3193 261.715 48.52 261.328 48.9214 261.053C49.3262 260.775 49.8755 260.636 50.569 260.636C51.2555 260.636 51.9051 260.775 52.5177 261.053L52.1163 261.988C51.4861 261.727 50.9563 261.597 50.5268 261.597C49.8719 261.597 49.5445 261.783 49.5445 262.157C49.5445 262.34 49.629 262.495 49.798 262.621C49.9705 262.748 50.3437 262.922 50.9176 263.144C51.3999 263.331 51.7502 263.501 51.9685 263.656C52.1867 263.811 52.3487 263.991 52.4543 264.195C52.5599 264.396 52.6127 264.637 52.6127 264.919ZM56.51 266.688C55.6017 266.688 54.8906 266.424 54.3766 265.896C53.8661 265.364 53.6108 264.633 53.6108 263.704C53.6108 262.75 53.8485 262 54.3237 261.454C54.799 260.909 55.4521 260.636 56.283 260.636C57.054 260.636 57.663 260.87 58.1102 261.338C58.5573 261.806 58.7808 262.451 58.7808 263.271V263.942H54.8888C54.9064 264.508 55.0596 264.945 55.3482 265.251C55.6369 265.554 56.0436 265.705 56.5681 265.705C56.9132 265.705 57.2335 265.674 57.5293 265.61C57.8285 265.543 58.1489 265.434 58.4904 265.283V266.292C58.1876 266.436 57.8813 266.538 57.5715 266.598C57.2617 266.658 56.9079 266.688 56.51 266.688ZM56.283 261.576C55.8887 261.576 55.5718 261.701 55.3324 261.951C55.0965 262.201 54.9557 262.565 54.9099 263.044H57.561C57.5539 262.561 57.4377 262.197 57.2124 261.951C56.9871 261.701 56.6773 261.576 56.283 261.576ZM66.924 264.919C66.924 265.489 66.7163 265.927 66.3009 266.233C65.8854 266.536 65.2905 266.688 64.5159 266.688C63.7379 266.688 63.113 266.57 62.6412 266.334V265.262C63.3277 265.579 63.9667 265.737 64.5582 265.737C65.3221 265.737 65.7041 265.506 65.7041 265.045C65.7041 264.897 65.6619 264.774 65.5774 264.676C65.4929 264.577 65.3538 264.475 65.1602 264.369C64.9666 264.264 64.6972 264.144 64.3522 264.01C63.6798 263.75 63.2239 263.489 62.9845 263.229C62.7486 262.968 62.6306 262.63 62.6306 262.215C62.6306 261.715 62.8313 261.328 63.2327 261.053C63.6375 260.775 64.1867 260.636 64.8803 260.636C65.5668 260.636 66.2164 260.775 66.829 261.053L66.4276 261.988C65.7974 261.727 65.2676 261.597 64.8381 261.597C64.1832 261.597 63.8558 261.783 63.8558 262.157C63.8558 262.34 63.9403 262.495 64.1093 262.621C64.2818 262.748 64.655 262.922 65.2288 263.144C65.7112 263.331 66.0615 263.501 66.2797 263.656C66.498 263.811 66.66 263.991 66.7656 264.195C66.8712 264.396 66.924 264.637 66.924 264.919ZM72.3898 266.582L72.2155 265.816H72.1521C71.9796 266.087 71.7332 266.3 71.4128 266.455C71.0959 266.61 70.7333 266.688 70.3249 266.688C69.6173 266.688 69.0892 266.512 68.7406 266.16C68.3921 265.807 68.2178 265.274 68.2178 264.559V260.741H69.4694V264.343C69.4694 264.79 69.561 265.126 69.744 265.352C69.9271 265.573 70.214 265.684 70.6048 265.684C71.1259 265.684 71.5078 265.529 71.7508 265.22C71.9972 264.906 72.1204 264.383 72.1204 263.651V260.741H73.3667V266.582H72.3898ZM78.1196 260.636C78.8483 260.636 79.4151 260.9 79.82 261.428C80.2284 261.956 80.4326 262.697 80.4326 263.651C80.4326 264.609 80.2266 265.355 79.8147 265.89C79.4028 266.422 78.8307 266.688 78.0984 266.688C77.3591 266.688 76.7852 266.422 76.3769 265.89H76.2924L76.0653 266.582H75.1358V258.365H76.3769V260.319C76.3769 260.463 76.3698 260.678 76.3557 260.963C76.3416 261.248 76.3311 261.43 76.324 261.507H76.3769C76.7712 260.926 77.3521 260.636 78.1196 260.636ZM77.7974 261.65C77.2975 261.65 76.9366 261.798 76.7148 262.093C76.4966 262.385 76.3839 262.877 76.3769 263.567V263.651C76.3769 264.362 76.4895 264.878 76.7148 265.198C76.9402 265.515 77.3081 265.674 77.8185 265.674C78.2586 265.674 78.5913 265.499 78.8166 265.151C79.0455 264.802 79.1599 264.299 79.1599 263.641C79.1599 262.313 78.7057 261.65 77.7974 261.65ZM86.7961 266.582H85.5498V262.98C85.5498 262.533 85.4653 262.201 85.2963 261.982C85.1273 261.761 84.8633 261.65 84.5042 261.65C84.0254 261.65 83.6733 261.806 83.448 262.12C83.2262 262.429 83.1153 262.947 83.1153 263.672V266.582H81.8743V260.741H82.846L83.0202 261.507H83.0836C83.2456 261.229 83.4797 261.014 83.786 260.863C84.0958 260.711 84.4355 260.636 84.8052 260.636C85.7029 260.636 86.2979 260.942 86.5901 261.555H86.6746C86.8471 261.266 87.0901 261.041 87.4034 260.879C87.7167 260.717 88.0758 260.636 88.4807 260.636C89.1778 260.636 89.6848 260.812 90.0016 261.164C90.322 261.516 90.4822 262.053 90.4822 262.774V266.582H89.2412V262.98C89.2412 262.533 89.1549 262.201 88.9824 261.982C88.8134 261.761 88.5494 261.65 88.1903 261.65C87.7079 261.65 87.3541 261.801 87.1288 262.104C86.907 262.403 86.7961 262.864 86.7961 263.487V266.582ZM93.4553 266.582H92.2143V260.741H93.4553V266.582ZM92.1404 259.194C92.1404 258.972 92.2002 258.801 92.3199 258.682C92.4432 258.562 92.6174 258.502 92.8427 258.502C93.061 258.502 93.23 258.562 93.3497 258.682C93.4729 258.801 93.5345 258.972 93.5345 259.194C93.5345 259.405 93.4729 259.572 93.3497 259.696C93.23 259.815 93.061 259.875 92.8427 259.875C92.6174 259.875 92.4432 259.815 92.3199 259.696C92.2002 259.572 92.1404 259.405 92.1404 259.194ZM97.4107 265.684C97.7135 265.684 98.0163 265.637 98.3191 265.542V266.476C98.1818 266.536 98.004 266.586 97.7857 266.624C97.5709 266.667 97.3474 266.688 97.115 266.688C95.9391 266.688 95.3512 266.068 95.3512 264.829V261.681H94.5538V261.132L95.4093 260.678L95.8317 259.442H96.5975V260.741H98.261V261.681H96.5975V264.808C96.5975 265.107 96.6714 265.329 96.8193 265.473C96.9707 265.614 97.1678 265.684 97.4107 265.684ZM101.667 265.684C101.97 265.684 102.273 265.637 102.575 265.542V266.476C102.438 266.536 102.26 266.586 102.042 266.624C101.827 266.667 101.604 266.688 101.371 266.688C100.196 266.688 99.6076 266.068 99.6076 264.829V261.681H98.8102V261.132L99.6657 260.678L100.088 259.442H100.854V260.741H102.517V261.681H100.854V264.808C100.854 265.107 100.928 265.329 101.076 265.473C101.227 265.614 101.424 265.684 101.667 265.684ZM106.299 266.688C105.39 266.688 104.679 266.424 104.165 265.896C103.655 265.364 103.399 264.633 103.399 263.704C103.399 262.75 103.637 262 104.112 261.454C104.588 260.909 105.241 260.636 106.071 260.636C106.842 260.636 107.452 260.87 107.899 261.338C108.346 261.806 108.569 262.451 108.569 263.271V263.942H104.677C104.695 264.508 104.848 264.945 105.137 265.251C105.425 265.554 105.832 265.705 106.357 265.705C106.702 265.705 107.022 265.674 107.318 265.61C107.617 265.543 107.937 265.434 108.279 265.283V266.292C107.976 266.436 107.67 266.538 107.36 266.598C107.05 266.658 106.696 266.688 106.299 266.688ZM106.071 261.576C105.677 261.576 105.36 261.701 105.121 261.951C104.885 262.201 104.744 262.565 104.698 263.044H107.349C107.342 262.561 107.226 262.197 107.001 261.951C106.776 261.701 106.466 261.576 106.071 261.576ZM112.942 260.636C113.192 260.636 113.398 260.653 113.56 260.689L113.438 261.845C113.262 261.803 113.079 261.782 112.889 261.782C112.393 261.782 111.99 261.944 111.68 262.268C111.373 262.591 111.22 263.012 111.22 263.53V266.582H109.979V260.741H110.951L111.115 261.771H111.178C111.372 261.423 111.623 261.146 111.933 260.942C112.247 260.738 112.583 260.636 112.942 260.636Z" class="path-22"/> -<path d="M125.744 266.582V262.838C125.744 262.366 125.636 262.014 125.422 261.782C125.207 261.549 124.871 261.433 124.413 261.433C123.807 261.433 123.364 261.597 123.082 261.924C122.801 262.252 122.66 262.792 122.66 263.546V266.582H121.783V260.794H122.496L122.639 261.586H122.681C122.86 261.301 123.112 261.081 123.436 260.926C123.76 260.768 124.121 260.689 124.519 260.689C125.216 260.689 125.74 260.858 126.092 261.195C126.444 261.53 126.62 262.067 126.62 262.806V266.582H125.744ZM130.872 266.688C130.016 266.688 129.34 266.427 128.844 265.906C128.351 265.385 128.104 264.662 128.104 263.736C128.104 262.803 128.333 262.062 128.791 261.512C129.252 260.963 129.87 260.689 130.644 260.689C131.37 260.689 131.944 260.928 132.366 261.407C132.789 261.882 133 262.51 133 263.292V263.847H129.013C129.03 264.526 129.201 265.042 129.525 265.394C129.852 265.746 130.312 265.922 130.903 265.922C131.526 265.922 132.142 265.792 132.752 265.531V266.313C132.442 266.446 132.148 266.542 131.87 266.598C131.595 266.658 131.262 266.688 130.872 266.688ZM130.634 261.423C130.169 261.423 129.798 261.574 129.52 261.877C129.245 262.18 129.083 262.598 129.034 263.134H132.06C132.06 262.581 131.937 262.158 131.69 261.866C131.444 261.57 131.092 261.423 130.634 261.423ZM136.945 266.688C136.089 266.688 135.413 266.427 134.917 265.906C134.424 265.385 134.177 264.662 134.177 263.736C134.177 262.803 134.406 262.062 134.864 261.512C135.325 260.963 135.943 260.689 136.718 260.689C137.443 260.689 138.017 260.928 138.439 261.407C138.862 261.882 139.073 262.51 139.073 263.292V263.847H135.086C135.103 264.526 135.274 265.042 135.598 265.394C135.925 265.746 136.385 265.922 136.976 265.922C137.599 265.922 138.216 265.792 138.825 265.531V266.313C138.515 266.446 138.221 266.542 137.943 266.598C137.668 266.658 137.335 266.688 136.945 266.688ZM136.707 261.423C136.242 261.423 135.871 261.574 135.593 261.877C135.318 262.18 135.156 262.598 135.107 263.134H138.133C138.133 262.581 138.01 262.158 137.763 261.866C137.517 261.57 137.165 261.423 136.707 261.423ZM144.512 265.806H144.465C144.06 266.394 143.454 266.688 142.648 266.688C141.891 266.688 141.301 266.429 140.879 265.911C140.46 265.394 140.25 264.658 140.25 263.704C140.25 262.75 140.462 262.009 140.884 261.481C141.307 260.953 141.895 260.689 142.648 260.689C143.433 260.689 144.035 260.974 144.454 261.544H144.523L144.486 261.127L144.465 260.72V258.365H145.341V266.582H144.628L144.512 265.806ZM142.759 265.954C143.357 265.954 143.79 265.792 144.058 265.468C144.329 265.14 144.465 264.614 144.465 263.889V263.704C144.465 262.884 144.327 262.299 144.053 261.951C143.782 261.599 143.347 261.423 142.748 261.423C142.234 261.423 141.84 261.623 141.565 262.025C141.294 262.422 141.159 262.986 141.159 263.714C141.159 264.454 141.294 265.012 141.565 265.389C141.836 265.765 142.234 265.954 142.759 265.954ZM150.939 265.003C150.939 265.542 150.738 265.957 150.337 266.249C149.936 266.542 149.372 266.688 148.647 266.688C147.88 266.688 147.281 266.566 146.852 266.323V265.51C147.13 265.651 147.427 265.762 147.744 265.843C148.064 265.924 148.372 265.964 148.668 265.964C149.126 265.964 149.478 265.892 149.724 265.748C149.971 265.6 150.094 265.376 150.094 265.077C150.094 264.852 149.995 264.66 149.798 264.501C149.605 264.339 149.224 264.149 148.658 263.931C148.119 263.73 147.735 263.556 147.506 263.408C147.281 263.257 147.112 263.086 146.999 262.896C146.89 262.706 146.836 262.479 146.836 262.215C146.836 261.743 147.028 261.372 147.411 261.1C147.795 260.826 148.321 260.689 148.99 260.689C149.614 260.689 150.223 260.815 150.818 261.069L150.506 261.782C149.925 261.542 149.399 261.423 148.927 261.423C148.512 261.423 148.198 261.488 147.987 261.618C147.776 261.748 147.67 261.928 147.67 262.157C147.67 262.312 147.709 262.444 147.786 262.553C147.867 262.662 147.996 262.766 148.172 262.864C148.348 262.963 148.686 263.105 149.186 263.292C149.872 263.542 150.335 263.794 150.575 264.047C150.818 264.301 150.939 264.619 150.939 265.003ZM158.739 266.582L158.565 265.758H158.522C158.234 266.121 157.945 266.367 157.656 266.498C157.371 266.624 157.014 266.688 156.584 266.688C156.01 266.688 155.56 266.54 155.232 266.244C154.909 265.948 154.747 265.528 154.747 264.982C154.747 263.813 155.681 263.2 157.551 263.144L158.533 263.112V262.753C158.533 262.299 158.434 261.965 158.237 261.75C158.044 261.532 157.732 261.423 157.303 261.423C156.82 261.423 156.274 261.57 155.665 261.866L155.396 261.195C155.681 261.041 155.993 260.919 156.331 260.831C156.672 260.743 157.014 260.699 157.355 260.699C158.045 260.699 158.556 260.852 158.887 261.159C159.221 261.465 159.388 261.956 159.388 262.632V266.582H158.739ZM156.759 265.964C157.304 265.964 157.732 265.815 158.042 265.515C158.355 265.216 158.512 264.797 158.512 264.258V263.736L157.635 263.773C156.938 263.797 156.435 263.906 156.125 264.1C155.819 264.29 155.665 264.588 155.665 264.992C155.665 265.309 155.76 265.55 155.951 265.716C156.144 265.881 156.414 265.964 156.759 265.964ZM168.736 266.582L167.674 263.186C167.607 262.979 167.482 262.507 167.299 261.771H167.257C167.116 262.387 166.993 262.863 166.887 263.197L165.794 266.582H164.78L163.201 260.794H164.12C164.493 262.248 164.777 263.355 164.97 264.116C165.168 264.876 165.28 265.389 165.308 265.653H165.351C165.389 265.452 165.451 265.193 165.535 264.876C165.623 264.556 165.699 264.302 165.763 264.116L166.824 260.794H167.775L168.81 264.116C169.007 264.721 169.141 265.23 169.211 265.642H169.253C169.267 265.515 169.304 265.32 169.364 265.056C169.427 264.792 169.795 263.371 170.468 260.794H171.376L169.776 266.582H168.736ZM175.986 266.582L175.812 265.758H175.77C175.481 266.121 175.193 266.367 174.904 266.498C174.619 266.624 174.261 266.688 173.832 266.688C173.258 266.688 172.807 266.54 172.48 266.244C172.156 265.948 171.994 265.528 171.994 264.982C171.994 263.813 172.929 263.2 174.798 263.144L175.78 263.112V262.753C175.78 262.299 175.682 261.965 175.485 261.75C175.291 261.532 174.98 261.423 174.55 261.423C174.068 261.423 173.522 261.57 172.913 261.866L172.644 261.195C172.929 261.041 173.24 260.919 173.578 260.831C173.92 260.743 174.261 260.699 174.603 260.699C175.293 260.699 175.803 260.852 176.134 261.159C176.469 261.465 176.636 261.956 176.636 262.632V266.582H175.986ZM174.006 265.964C174.552 265.964 174.98 265.815 175.289 265.515C175.603 265.216 175.759 264.797 175.759 264.258V263.736L174.883 263.773C174.186 263.797 173.682 263.906 173.372 264.1C173.066 264.29 172.913 264.588 172.913 264.992C172.913 265.309 173.008 265.55 173.198 265.716C173.392 265.881 173.661 265.964 174.006 265.964ZM179.324 266.582H178.447V258.365H179.324V266.582ZM182.059 266.582H181.183V258.365H182.059V266.582ZM186.363 266.688C185.508 266.688 184.832 266.427 184.336 265.906C183.843 265.385 183.596 264.662 183.596 263.736C183.596 262.803 183.825 262.062 184.283 261.512C184.744 260.963 185.362 260.689 186.136 260.689C186.862 260.689 187.435 260.928 187.858 261.407C188.28 261.882 188.492 262.51 188.492 263.292V263.847H184.505C184.522 264.526 184.693 265.042 185.017 265.394C185.344 265.746 185.804 265.922 186.395 265.922C187.018 265.922 187.634 265.792 188.243 265.531V266.313C187.934 266.446 187.64 266.542 187.361 266.598C187.087 266.658 186.754 266.688 186.363 266.688ZM186.126 261.423C185.661 261.423 185.29 261.574 185.011 261.877C184.737 262.18 184.575 262.598 184.526 263.134H187.552C187.552 262.581 187.428 262.158 187.182 261.866C186.935 261.57 186.583 261.423 186.126 261.423ZM191.861 265.964C192.016 265.964 192.165 265.954 192.31 265.932C192.454 265.908 192.568 265.883 192.653 265.859V266.529C192.558 266.575 192.417 266.612 192.23 266.64C192.047 266.672 191.882 266.688 191.734 266.688C190.615 266.688 190.055 266.098 190.055 264.919V261.475H189.226V261.053L190.055 260.689L190.424 259.453H190.931V260.794H192.611V261.475H190.931V264.882C190.931 265.23 191.014 265.498 191.18 265.684C191.345 265.871 191.572 265.964 191.861 265.964Z" class="path-23"/> -<g clip-path="url(#clip6_14063_184039)"> -<path d="M210.849 256.676C211.276 256.676 211.622 257.022 211.622 257.448C211.622 257.875 211.276 258.221 210.849 258.221H201.965C201.752 258.221 201.579 258.395 201.579 258.607C201.579 258.82 201.752 258.993 201.965 258.993H210.849C211.701 258.993 212.394 259.686 212.394 260.538V265.946C212.394 266.798 211.701 267.491 210.849 267.491H201.579C200.725 267.491 200.034 266.798 200.034 265.946V258.221C200.034 257.367 200.725 256.676 201.579 256.676H210.849ZM210.077 264.015C210.504 264.015 210.849 263.67 210.849 263.242C210.849 262.815 210.504 262.47 210.077 262.47C209.649 262.47 209.304 262.815 209.304 263.242C209.304 263.67 209.649 264.015 210.077 264.015Z" class="path-24"/> -</g> -<path d="M224.23 266.582L223.169 263.186C223.102 262.979 222.977 262.507 222.794 261.771H222.752C222.611 262.387 222.487 262.863 222.382 263.197L221.289 266.582H220.275L218.696 260.794H219.615C219.988 262.248 220.271 263.355 220.465 264.116C220.662 264.876 220.775 265.389 220.803 265.653H220.845C220.884 265.452 220.945 265.193 221.03 264.876C221.118 264.556 221.194 264.302 221.257 264.116L222.319 260.794H223.269L224.304 264.116C224.501 264.721 224.635 265.23 224.705 265.642H224.748C224.762 265.515 224.799 265.32 224.859 265.056C224.922 264.792 225.29 263.371 225.962 260.794H226.871L225.271 266.582H224.23ZM228.798 266.582H227.922V260.794H228.798V266.582ZM227.848 259.226C227.848 259.025 227.897 258.879 227.995 258.787C228.094 258.692 228.217 258.645 228.365 258.645C228.506 258.645 228.627 258.692 228.73 258.787C228.832 258.882 228.883 259.029 228.883 259.226C228.883 259.423 228.832 259.571 228.73 259.669C228.627 259.764 228.506 259.812 228.365 259.812C228.217 259.812 228.094 259.764 227.995 259.669C227.897 259.571 227.848 259.423 227.848 259.226ZM232.527 265.964C232.681 265.964 232.831 265.954 232.975 265.932C233.12 265.908 233.234 265.883 233.319 265.859V266.529C233.224 266.575 233.083 266.612 232.896 266.64C232.713 266.672 232.548 266.688 232.4 266.688C231.28 266.688 230.72 266.098 230.72 264.919V261.475H229.891V261.053L230.72 260.689L231.09 259.453H231.597V260.794H233.276V261.475H231.597V264.882C231.597 265.23 231.68 265.498 231.845 265.684C232.011 265.871 232.238 265.964 232.527 265.964ZM238.441 266.582V262.838C238.441 262.366 238.334 262.014 238.119 261.782C237.904 261.549 237.568 261.433 237.11 261.433C236.501 261.433 236.056 261.599 235.774 261.93C235.496 262.26 235.357 262.803 235.357 263.556V266.582H234.48V258.365H235.357V260.852C235.357 261.151 235.343 261.4 235.315 261.597H235.368C235.54 261.319 235.785 261.1 236.102 260.942C236.422 260.78 236.786 260.699 237.195 260.699C237.902 260.699 238.432 260.868 238.784 261.206C239.14 261.541 239.318 262.074 239.318 262.806V266.582H238.441Z" class="path-25"/> -<defs> -<filter id="filter0_d_14063_184039" x="0.682432" y="0.227477" width="298.194" height="347.635" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.54505"/> -<feGaussianBlur stdDeviation="1.15878"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_14063_184039"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_14063_184039" result="shape"/> -</filter> -<clipPath id="clip0_14063_184039"> -<rect width="12.3604" height="12.3604" transform="translate(146.186 39.1602)" class="rect-7"/> -</clipPath> -<clipPath id="clip1_14063_184039"> -<rect width="12.3604" height="12.3604" transform="translate(47.3604 101.348)" class="rect-8"/> -</clipPath> -<clipPath id="clip2_14063_184039"> -<rect width="12.3604" height="12.3604" transform="translate(47.3604 194.57)" class="rect-9"/> -</clipPath> -<clipPath id="clip3_14063_184039"> -<rect width="12.3604" height="12.3604" transform="translate(47.3604 288.184)" class="rect-10"/> -</clipPath> -<clipPath id="clip4_14063_184039"> -<rect width="12.3604" height="12.3604" transform="translate(47.3604 70.832)" class="rect-11"/> -</clipPath> -<clipPath id="clip5_14063_184039"> -<rect width="12.3604" height="12.3604" transform="translate(181.034 162.289)" class="rect-12"/> -</clipPath> -<clipPath id="clip6_14063_184039"> -<rect width="12.3604" height="12.3604" transform="translate(200.034 255.902)" class="rect-13"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/ranked-voting/voting-module.svg b/web/src/assets/svgs/mini-guides/ranked-voting/voting-module.svg deleted file mode 100644 index feea37c68..000000000 --- a/web/src/assets/svgs/mini-guides/ranked-voting/voting-module.svg +++ /dev/null @@ -1,66 +0,0 @@ -<svg viewBox="0 0 385 319" fill="none" xmlns="http://www.w3.org/2000/svg"> -<rect x="0.363326" y="0.363326" width="384.273" height="318.273" rx="1.81663" stroke-width="0.726651" class="rect-1"/> -<g filter="url(#filter0_d_13917_210955)"> -<rect x="24" y="25" width="335.802" height="32.6993" rx="2.17995" class="rect-2"/> -<rect x="24.3633" y="25.3633" width="335.075" height="31.9727" rx="1.81663" stroke-width="0.726651" class="rect-3"/> -</g> -<path d="M24.7267 27.1799C24.7267 26.3772 25.3774 25.7266 26.18 25.7266H132.271V56.9726H26.18C25.3773 56.9726 24.7267 56.3219 24.7267 55.5193V27.1799Z" class="path-1"/> -<path d="M150.301 40.1109C150.301 40.951 150.013 41.5982 149.438 42.0524C148.867 42.5027 148.047 42.7279 146.98 42.7279H146.004V45.9922H145.039V37.6925H147.19C149.264 37.6925 150.301 38.4986 150.301 40.1109ZM146.004 41.8991H146.872C147.728 41.8991 148.346 41.761 148.729 41.4847C149.111 41.2084 149.302 40.7656 149.302 40.1563C149.302 39.6075 149.122 39.1988 148.763 38.93C148.403 38.6613 147.843 38.527 147.082 38.527H146.004V41.8991ZM155.728 45.9922L155.541 45.1066H155.495C155.185 45.4964 154.875 45.7613 154.564 45.9014C154.258 46.0376 153.874 46.1057 153.412 46.1057C152.795 46.1057 152.311 45.9468 151.959 45.6289C151.611 45.311 151.436 44.8587 151.436 44.2721C151.436 43.0156 152.441 42.357 154.451 42.2965L155.507 42.2624V41.8764C155.507 41.3882 155.401 41.0286 155.189 40.7978C154.981 40.5631 154.646 40.4458 154.184 40.4458C153.666 40.4458 153.079 40.6047 152.424 40.9227L152.135 40.2017C152.441 40.0352 152.776 39.9046 153.14 39.81C153.507 39.7154 153.874 39.668 154.241 39.668C154.983 39.668 155.531 39.8327 155.887 40.1619C156.247 40.4912 156.427 41.0192 156.427 41.7458V45.9922H155.728ZM153.599 45.328C154.186 45.328 154.646 45.1671 154.979 44.8454C155.316 44.5237 155.484 44.0734 155.484 43.4943V42.9323L154.542 42.972C153.792 42.9985 153.251 43.1159 152.918 43.324C152.589 43.5284 152.424 43.8482 152.424 44.2834C152.424 44.624 152.526 44.8833 152.731 45.0612C152.939 45.239 153.228 45.328 153.599 45.328ZM157.386 39.7702H158.396L159.759 43.3183C160.058 44.1283 160.243 44.713 160.315 45.0725H160.361C160.41 44.8795 160.512 44.5502 160.667 44.0847C160.826 43.6154 161.341 42.1773 162.211 39.7702H163.222L160.548 46.8551C160.283 47.5552 159.973 48.051 159.617 48.3425C159.265 48.6377 158.832 48.7853 158.317 48.7853C158.029 48.7853 157.745 48.7531 157.465 48.6887V47.9337C157.674 47.9791 157.906 48.0018 158.164 48.0018C158.811 48.0018 159.273 47.6385 159.549 46.9119L159.895 46.0262L157.386 39.7702ZM172.277 45.9922H166.821V45.1804L169.007 42.9834C169.673 42.3097 170.112 41.8291 170.324 41.5414C170.536 41.2538 170.695 40.9738 170.801 40.7013C170.907 40.4288 170.96 40.1355 170.96 39.8213C170.96 39.3785 170.825 39.0284 170.556 38.7711C170.288 38.5099 169.915 38.3794 169.438 38.3794C169.094 38.3794 168.766 38.4361 168.456 38.5497C168.149 38.6632 167.807 38.8695 167.428 39.1685L166.929 38.527C167.693 37.8912 168.526 37.5732 169.427 37.5732C170.206 37.5732 170.818 37.7738 171.26 38.175C171.703 38.5724 171.925 39.1079 171.925 39.7816C171.925 40.3077 171.777 40.828 171.482 41.3428C171.187 41.8575 170.634 42.5084 169.824 43.2956L168.008 45.0725V45.1179H172.277V45.9922ZM176.069 40.9227C176.943 40.9227 177.63 41.1403 178.13 41.5755C178.633 42.007 178.885 42.5993 178.885 43.3524C178.885 44.2115 178.61 44.8852 178.061 45.3734C177.516 45.8616 176.763 46.1057 175.802 46.1057C174.867 46.1057 174.154 45.9562 173.662 45.6572V44.7489C173.927 44.9192 174.256 45.0536 174.65 45.152C175.043 45.2466 175.431 45.2939 175.813 45.2939C176.479 45.2939 176.996 45.1369 177.363 44.8227C177.734 44.5086 177.92 44.0545 177.92 43.4603C177.92 42.3022 177.21 41.7231 175.791 41.7231C175.431 41.7231 174.95 41.778 174.349 41.8877L173.86 41.5755L174.173 37.6925H178.3V38.561H174.979L174.769 41.0532C175.204 40.9662 175.637 40.9227 176.069 40.9227ZM185.629 41.831C185.629 43.2654 185.402 44.3364 184.948 45.0441C184.497 45.7519 183.807 46.1057 182.876 46.1057C181.982 46.1057 181.303 45.7443 180.837 45.0214C180.372 44.2948 180.139 43.2313 180.139 41.831C180.139 40.3852 180.364 39.3123 180.815 38.6121C181.265 37.912 181.952 37.5619 182.876 37.5619C183.776 37.5619 184.459 37.9271 184.925 38.6575C185.394 39.388 185.629 40.4458 185.629 41.831ZM181.093 41.831C181.093 43.0383 181.235 43.9182 181.519 44.4708C181.803 45.0195 182.255 45.2939 182.876 45.2939C183.504 45.2939 183.958 45.0157 184.238 44.4594C184.522 43.8993 184.664 43.0231 184.664 41.831C184.664 40.6388 184.522 39.7664 184.238 39.2139C183.958 38.6575 183.504 38.3794 182.876 38.3794C182.255 38.3794 181.803 38.6538 181.519 39.2025C181.235 39.7475 181.093 40.6237 181.093 41.831ZM197 41.7628C197 43.1329 196.627 44.1812 195.881 44.9079C195.14 45.6308 194.07 45.9922 192.674 45.9922H190.375V37.6925H192.918C194.209 37.6925 195.212 38.0501 195.927 38.7654C196.642 39.4807 197 40.4799 197 41.7628ZM195.978 41.7969C195.978 40.7145 195.705 39.8989 195.16 39.3501C194.619 38.8014 193.813 38.527 192.742 38.527H191.34V45.1577H192.515C193.666 45.1577 194.53 44.8757 195.109 44.3118C195.688 43.7441 195.978 42.9058 195.978 41.7969ZM204.073 45.9922L203.04 43.3524H199.713L198.692 45.9922H197.715L200.996 37.6584H201.808L205.072 45.9922H204.073ZM202.739 42.4838L201.774 39.9122C201.649 39.5867 201.521 39.1874 201.388 38.7143C201.305 39.0776 201.186 39.4769 201.03 39.9122L200.054 42.4838H202.739ZM206.214 45.9922V37.6925H207.179V45.9922H206.214Z" class="path-2"/> -<path d="M63.3074 45.9922H61.9733V40.6331C61.9733 39.9935 61.9885 39.4864 62.0188 39.1117C61.9317 39.2025 61.8238 39.3028 61.6952 39.4126C61.5703 39.5223 61.1464 39.8705 60.4235 40.4571L59.7536 39.6113L62.1947 37.6925H63.3074V45.9922ZM70.6932 44.2039C70.6932 44.8171 70.4699 45.2882 70.0233 45.6175C69.5767 45.943 68.9371 46.1057 68.1045 46.1057C67.2681 46.1057 66.5963 45.9789 66.0891 45.7254V44.5729C66.8271 44.9136 67.5141 45.0839 68.1499 45.0839C68.9711 45.0839 69.3818 44.836 69.3818 44.3402C69.3818 44.1812 69.3364 44.0488 69.2455 43.9428C69.1547 43.8368 69.0052 43.7271 68.7971 43.6135C68.5889 43.5 68.2994 43.3713 67.9285 43.2275C67.2056 42.9474 66.7155 42.6674 66.4581 42.3873C66.2046 42.1073 66.0778 41.7439 66.0778 41.2973C66.0778 40.7599 66.2935 40.3436 66.725 40.0484C67.1602 39.7494 67.7506 39.5999 68.4962 39.5999C69.2342 39.5999 69.9324 39.7494 70.591 40.0484L70.1595 41.0532C69.4821 40.7732 68.9125 40.6331 68.4508 40.6331C67.7468 40.6331 67.3948 40.8337 67.3948 41.2349C67.3948 41.4317 67.4857 41.5982 67.6673 41.7345C67.8528 41.8707 68.254 42.0581 68.8709 42.2965C69.3893 42.4971 69.7659 42.6806 70.0006 42.8471C70.2352 43.0137 70.4093 43.2067 70.5228 43.4262C70.6364 43.6419 70.6932 43.9012 70.6932 44.2039ZM74.4797 45.0271C74.8052 45.0271 75.1307 44.976 75.4561 44.8738V45.8786C75.3085 45.943 75.1174 45.996 74.8828 46.0376C74.6519 46.083 74.4116 46.1057 74.1618 46.1057C72.8977 46.1057 72.2657 45.4396 72.2657 44.1074V40.724H71.4085V40.1336L72.3281 39.6453L72.7823 38.3169H73.6054V39.7135H75.3937V40.724H73.6054V44.0847C73.6054 44.4064 73.6849 44.6449 73.8439 44.8C74.0066 44.9514 74.2186 45.0271 74.4797 45.0271Z" class="path-3"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M40.7599 41.7116C40.7599 40.8952 40.0995 40.2348 39.2831 40.2348C38.4668 40.2348 37.8064 40.8952 37.8064 41.7116C37.8064 42.5279 38.4668 43.1883 39.2831 43.1883C40.0995 43.1883 40.7599 42.5279 40.7599 41.7116ZM39.2831 39.5785C38.4668 39.5785 37.8064 38.9181 37.8064 38.1017C37.8064 37.2854 38.4668 36.625 39.2831 36.625C40.0995 36.625 40.7599 37.2854 40.7599 38.1017C40.7599 38.9181 40.0995 39.5785 39.2831 39.5785ZM39.2831 46.7981C38.4668 46.7981 37.8064 46.1377 37.8064 45.3214C37.8064 44.5051 38.4668 43.8446 39.2831 43.8446C40.0995 43.8446 40.7599 44.5051 40.7599 45.3214C40.7599 46.1377 40.0995 46.7981 39.2831 46.7981ZM45.1198 41.7116C45.1198 40.8952 44.4593 40.2348 43.643 40.2348C42.8267 40.2348 42.1663 40.8952 42.1663 41.7116C42.1663 42.5279 42.8267 43.1883 43.643 43.1883C44.4593 43.1883 45.1198 42.5279 45.1198 41.7116ZM43.643 39.5785C42.8267 39.5785 42.1663 38.9181 42.1663 38.1017C42.1663 37.2854 42.8267 36.625 43.643 36.625C44.4593 36.625 45.1198 37.2854 45.1198 38.1017C45.1198 38.9181 44.4593 39.5785 43.643 39.5785ZM43.643 46.7981C42.8267 46.7981 42.1663 46.1377 42.1663 45.3214C42.1663 44.5051 42.8267 43.8446 43.643 43.8446C44.4593 43.8446 45.1198 44.5051 45.1198 45.3214C45.1198 46.1377 44.4593 46.7981 43.643 46.7981Z" class="path-4"/> -<g filter="url(#filter1_d_13917_210955)"> -<rect x="24" y="69.625" width="335.802" height="32.6993" rx="2.17995" class="rect-4"/> -<rect x="24.3633" y="69.9883" width="335.075" height="31.9727" rx="1.81663" stroke-width="0.726651" class="rect-5"/> -</g> -<path d="M24.7267 71.8049C24.7267 71.0022 25.3774 70.3516 26.18 70.3516H132.271V101.598H26.18C25.3773 101.598 24.7267 100.947 24.7267 100.144V71.8049Z" class="path-5"/> -<path d="M150.301 84.7359C150.301 85.576 150.013 86.2232 149.438 86.6774C148.867 87.1277 148.047 87.3529 146.98 87.3529H146.004V90.6172H145.039V82.3175H147.19C149.264 82.3175 150.301 83.1236 150.301 84.7359ZM146.004 86.5241H146.872C147.728 86.5241 148.346 86.386 148.729 86.1097C149.111 85.8334 149.302 85.3906 149.302 84.7813C149.302 84.2325 149.122 83.8238 148.763 83.555C148.403 83.2863 147.843 83.152 147.082 83.152H146.004V86.5241ZM155.728 90.6172L155.541 89.7316H155.495C155.185 90.1214 154.875 90.3863 154.564 90.5264C154.258 90.6626 153.874 90.7307 153.412 90.7307C152.795 90.7307 152.311 90.5718 151.959 90.2539C151.611 89.936 151.436 89.4837 151.436 88.8971C151.436 87.6406 152.441 86.982 154.451 86.9215L155.507 86.8874V86.5014C155.507 86.0132 155.401 85.6536 155.189 85.4228C154.981 85.1881 154.646 85.0708 154.184 85.0708C153.666 85.0708 153.079 85.2297 152.424 85.5477L152.135 84.8267C152.441 84.6602 152.776 84.5296 153.14 84.435C153.507 84.3404 153.874 84.293 154.241 84.293C154.983 84.293 155.531 84.4577 155.887 84.7869C156.247 85.1162 156.427 85.6442 156.427 86.3708V90.6172H155.728ZM153.599 89.953C154.186 89.953 154.646 89.7921 154.979 89.4704C155.316 89.1487 155.484 88.6984 155.484 88.1193V87.5573L154.542 87.597C153.792 87.6235 153.251 87.7409 152.918 87.949C152.589 88.1534 152.424 88.4732 152.424 88.9084C152.424 89.249 152.526 89.5083 152.731 89.6862C152.939 89.864 153.228 89.953 153.599 89.953ZM157.386 84.3952H158.396L159.759 87.9433C160.058 88.7533 160.243 89.338 160.315 89.6975H160.361C160.41 89.5045 160.512 89.1752 160.667 88.7097C160.826 88.2404 161.341 86.8023 162.211 84.3952H163.222L160.548 91.4801C160.283 92.1802 159.973 92.676 159.617 92.9675C159.265 93.2627 158.832 93.4103 158.317 93.4103C158.029 93.4103 157.745 93.3781 157.465 93.3137V92.5587C157.674 92.6041 157.906 92.6268 158.164 92.6268C158.811 92.6268 159.273 92.2635 159.549 91.5369L159.895 90.6512L157.386 84.3952ZM170.312 90.6172H169.393V84.7018C169.393 84.2098 169.408 83.7443 169.438 83.3053C169.359 83.3847 169.27 83.468 169.171 83.555C169.073 83.6421 168.623 84.0111 167.82 84.6621L167.321 84.0149L169.518 82.3175H170.312V90.6172ZM178.93 85.8599C178.93 89.1071 177.674 90.7307 175.161 90.7307C174.721 90.7307 174.373 90.6929 174.116 90.6172V89.8054C174.419 89.9038 174.763 89.953 175.149 89.953C176.057 89.953 176.742 89.6729 177.204 89.1128C177.67 88.5489 177.923 87.686 177.965 86.5241H177.897C177.689 86.8382 177.412 87.0785 177.068 87.2451C176.724 87.4078 176.336 87.4892 175.904 87.4892C175.17 87.4892 174.587 87.2697 174.156 86.8307C173.724 86.3916 173.509 85.7785 173.509 84.9913C173.509 84.1284 173.749 83.4472 174.229 82.9476C174.714 82.448 175.35 82.1982 176.137 82.1982C176.701 82.1982 177.193 82.344 177.613 82.6354C178.037 82.923 178.362 83.345 178.589 83.9013C178.816 84.4539 178.93 85.1067 178.93 85.8599ZM176.137 83.0044C175.596 83.0044 175.178 83.1785 174.882 83.5267C174.587 83.8748 174.44 84.3593 174.44 84.98C174.44 85.525 174.576 85.9545 174.848 86.2686C175.121 86.579 175.535 86.7341 176.092 86.7341C176.436 86.7341 176.752 86.6641 177.04 86.5241C177.331 86.3841 177.56 86.1929 177.726 85.9507C177.893 85.7085 177.976 85.4549 177.976 85.19C177.976 84.7926 177.899 84.4255 177.744 84.0887C177.588 83.7518 177.371 83.4869 177.091 83.2939C176.814 83.1009 176.496 83.0044 176.137 83.0044ZM185.629 86.456C185.629 87.8904 185.402 88.9614 184.948 89.6691C184.497 90.3769 183.807 90.7307 182.876 90.7307C181.982 90.7307 181.303 90.3693 180.837 89.6464C180.372 88.9198 180.139 87.8563 180.139 86.456C180.139 85.0102 180.364 83.9373 180.815 83.2371C181.265 82.537 181.952 82.1869 182.876 82.1869C183.776 82.1869 184.459 82.5521 184.925 83.2825C185.394 84.013 185.629 85.0708 185.629 86.456ZM181.093 86.456C181.093 87.6633 181.235 88.5432 181.519 89.0958C181.803 89.6445 182.255 89.9189 182.876 89.9189C183.504 89.9189 183.958 89.6407 184.238 89.0844C184.522 88.5243 184.664 87.6481 184.664 86.456C184.664 85.2638 184.522 84.3914 184.238 83.8389C183.958 83.2825 183.504 83.0044 182.876 83.0044C182.255 83.0044 181.803 83.2788 181.519 83.8275C181.235 84.3725 181.093 85.2487 181.093 86.456ZM197 86.3878C197 87.7579 196.627 88.8062 195.881 89.5329C195.14 90.2558 194.07 90.6172 192.674 90.6172H190.375V82.3175H192.918C194.209 82.3175 195.212 82.6751 195.927 83.3904C196.642 84.1057 197 85.1049 197 86.3878ZM195.978 86.4219C195.978 85.3395 195.705 84.5239 195.16 83.9751C194.619 83.4264 193.813 83.152 192.742 83.152H191.34V89.7827H192.515C193.666 89.7827 194.53 89.5007 195.109 88.9368C195.688 88.3691 195.978 87.5308 195.978 86.4219ZM204.073 90.6172L203.04 87.9774H199.713L198.692 90.6172H197.715L200.996 82.2834H201.808L205.072 90.6172H204.073ZM202.739 87.1088L201.774 84.5372C201.649 84.2117 201.521 83.8124 201.388 83.3393C201.305 83.7026 201.186 84.1019 201.03 84.5372L200.054 87.1088H202.739ZM206.214 90.6172V82.3175H207.179V90.6172H206.214Z" class="path-6"/> -<path d="M65.0162 90.6172H59.3903V89.6067L61.5305 87.4551C62.1626 86.8079 62.5808 86.35 62.7851 86.0813C62.9933 85.8088 63.1447 85.5533 63.2393 85.3149C63.3339 85.0765 63.3812 84.821 63.3812 84.5485C63.3812 84.1738 63.2677 83.8786 63.0406 83.6629C62.8173 83.4472 62.507 83.3393 62.1096 83.3393C61.7917 83.3393 61.4832 83.398 61.1842 83.5153C60.889 83.6326 60.5465 83.8446 60.1567 84.1511L59.4357 83.2712C59.8975 82.8814 60.3459 82.6051 60.7812 82.4424C61.2164 82.2796 61.68 82.1982 62.172 82.1982C62.9441 82.1982 63.5629 82.4007 64.0284 82.8057C64.4939 83.2069 64.7267 83.7481 64.7267 84.4293C64.7267 84.804 64.6585 85.1597 64.5223 85.4966C64.3898 85.8334 64.1836 86.1816 63.9035 86.5411C63.6272 86.8969 63.1655 87.3794 62.5183 87.9888L61.0764 89.3853V89.4421H65.0162V90.6172ZM71.9989 90.6172H70.6591V86.7569C70.6591 86.2724 70.5607 85.911 70.3639 85.6726C70.1709 85.4341 69.8624 85.3149 69.4385 85.3149C68.8746 85.3149 68.4621 85.4814 68.201 85.8145C67.9398 86.1475 67.8093 86.7058 67.8093 87.4892V90.6172H66.4752V84.3385H67.5197L67.7071 85.1616H67.7752C67.9644 84.8626 68.2331 84.6318 68.5813 84.469C68.9295 84.3063 69.3155 84.2249 69.7394 84.2249C71.2457 84.2249 71.9989 84.9913 71.9989 86.5241V90.6172ZM75.9727 90.7307C75.1893 90.7307 74.5781 90.4469 74.1391 89.8792C73.7001 89.3115 73.4805 88.5148 73.4805 87.4892C73.4805 86.4598 73.7019 85.6593 74.1448 85.0878C74.5913 84.5126 75.2082 84.2249 75.9954 84.2249C76.8205 84.2249 77.4487 84.5296 77.8802 85.1389H77.9483C77.884 84.6885 77.8518 84.3328 77.8518 84.0716V81.7838H79.1916V90.6172H78.147L77.9143 89.794H77.8518C77.4241 90.4185 76.7978 90.7307 75.9727 90.7307ZM76.3304 89.6521C76.8792 89.6521 77.2784 89.4988 77.5282 89.1923C77.778 88.8819 77.9067 88.3805 77.9143 87.6879V87.5005C77.9143 86.7095 77.7856 86.1475 77.5282 85.8145C77.2709 85.4814 76.8678 85.3149 76.319 85.3149C75.8497 85.3149 75.4883 85.506 75.2347 85.8883C74.9812 86.2667 74.8544 86.8079 74.8544 87.5119C74.8544 88.2083 74.9774 88.74 75.2234 89.1071C75.4694 89.4704 75.8384 89.6521 76.3304 89.6521Z" class="path-7"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M40.76 86.3405C40.76 85.5242 40.0996 84.8637 39.2833 84.8637C38.467 84.8637 37.8065 85.5242 37.8065 86.3405C37.8065 87.1568 38.467 87.8172 39.2833 87.8172C40.0996 87.8172 40.76 87.1568 40.76 86.3405ZM39.2833 84.2074C38.467 84.2074 37.8065 83.547 37.8065 82.7306C37.8065 81.9143 38.467 81.2539 39.2833 81.2539C40.0996 81.2539 40.76 81.9143 40.76 82.7306C40.76 83.547 40.0996 84.2074 39.2833 84.2074ZM39.2833 91.427C38.467 91.427 37.8065 90.7666 37.8065 89.9503C37.8065 89.134 38.467 88.4735 39.2833 88.4735C40.0996 88.4735 40.76 89.134 40.76 89.9503C40.76 90.7666 40.0996 91.427 39.2833 91.427ZM45.1198 86.3405C45.1198 85.5242 44.4594 84.8638 43.6431 84.8638C42.8268 84.8638 42.1664 85.5242 42.1664 86.3405C42.1664 87.1568 42.8268 87.8173 43.6431 87.8173C44.4594 87.8173 45.1198 87.1568 45.1198 86.3405ZM43.6431 84.2074C42.8268 84.2074 42.1664 83.547 42.1664 82.7307C42.1664 81.9144 42.8268 81.254 43.6431 81.254C44.4594 81.254 45.1198 81.9144 45.1198 82.7307C45.1198 83.547 44.4594 84.2074 43.6431 84.2074ZM43.6431 91.4271C42.8268 91.4271 42.1664 90.7666 42.1664 89.9503C42.1664 89.134 42.8268 88.4736 43.6431 88.4736C44.4594 88.4736 45.1198 89.134 45.1198 89.9503C45.1198 90.7666 44.4594 91.4271 43.6431 91.4271Z" class="path-8"/> -<rect x="12.3633" y="13.3633" width="359.273" height="99.2733" rx="1.81663" stroke-width="0.726651" class="rect-6"/> -<path d="M150.828 148.954V154.325C150.828 155.271 150.542 156.014 149.971 156.556C149.399 157.097 148.614 157.367 147.615 157.367C146.616 157.367 145.842 157.095 145.293 156.55C144.748 156.005 144.476 155.256 144.476 154.302V148.954H145.441V154.37C145.441 155.063 145.63 155.594 146.008 155.965C146.387 156.336 146.943 156.522 147.677 156.522C148.378 156.522 148.917 156.336 149.295 155.965C149.674 155.591 149.863 155.055 149.863 154.359V148.954H150.828ZM157.147 157.254V153.229C157.147 152.722 157.031 152.343 156.8 152.094C156.569 151.844 156.208 151.719 155.716 151.719C155.065 151.719 154.588 151.895 154.285 152.247C153.983 152.599 153.831 153.18 153.831 153.99V157.254H152.889V151.032H153.655L153.808 151.883H153.854C154.047 151.577 154.318 151.34 154.666 151.174C155.014 151.004 155.402 150.918 155.829 150.918C156.579 150.918 157.143 151.1 157.521 151.463C157.9 151.823 158.089 152.4 158.089 153.195V157.254H157.147ZM162.869 150.918C163.145 150.918 163.393 150.941 163.613 150.987L163.482 151.861C163.225 151.804 162.998 151.776 162.801 151.776C162.297 151.776 161.866 151.98 161.506 152.389C161.151 152.797 160.973 153.307 160.973 153.916V157.254H160.03V151.032H160.808L160.916 152.184H160.961C161.192 151.779 161.47 151.467 161.796 151.248C162.121 151.028 162.479 150.918 162.869 150.918ZM168.603 157.254L168.415 156.368H168.37C168.06 156.758 167.749 157.023 167.439 157.163C167.132 157.299 166.748 157.367 166.286 157.367C165.67 157.367 165.185 157.208 164.833 156.891C164.485 156.573 164.311 156.12 164.311 155.534C164.311 154.277 165.316 153.619 167.325 153.558L168.381 153.524V153.138C168.381 152.65 168.275 152.29 168.063 152.059C167.855 151.825 167.52 151.708 167.059 151.708C166.54 151.708 165.953 151.866 165.299 152.184L165.009 151.463C165.316 151.297 165.651 151.166 166.014 151.072C166.381 150.977 166.748 150.93 167.115 150.93C167.857 150.93 168.406 151.094 168.762 151.424C169.121 151.753 169.301 152.281 169.301 153.008V157.254H168.603ZM166.474 156.59C167.06 156.59 167.52 156.429 167.853 156.107C168.19 155.785 168.359 155.335 168.359 154.756V154.194L167.416 154.234C166.667 154.26 166.126 154.378 165.793 154.586C165.463 154.79 165.299 155.11 165.299 155.545C165.299 155.886 165.401 156.145 165.605 156.323C165.813 156.501 166.103 156.59 166.474 156.59ZM175.506 157.254V153.229C175.506 152.722 175.39 152.343 175.16 152.094C174.929 151.844 174.567 151.719 174.075 151.719C173.424 151.719 172.947 151.895 172.645 152.247C172.342 152.599 172.19 153.18 172.19 153.99V157.254H171.248V151.032H172.015L172.168 151.883H172.213C172.406 151.577 172.677 151.34 173.025 151.174C173.373 151.004 173.761 150.918 174.189 150.918C174.938 150.918 175.502 151.1 175.881 151.463C176.259 151.823 176.448 152.4 176.448 153.195V157.254H175.506ZM179.321 154.069C179.484 153.838 179.731 153.535 180.064 153.161L182.074 151.032H183.192L180.672 153.683L183.368 157.254H182.227L180.03 154.313L179.321 154.926V157.254H178.39V148.421H179.321V153.104C179.321 153.312 179.306 153.634 179.275 154.069H179.321ZM187.127 157.367C186.207 157.367 185.48 157.087 184.947 156.527C184.417 155.967 184.152 155.189 184.152 154.194C184.152 153.191 184.398 152.394 184.89 151.804C185.386 151.214 186.05 150.918 186.882 150.918C187.662 150.918 188.279 151.176 188.733 151.69C189.187 152.201 189.414 152.877 189.414 153.717V154.313H185.128C185.147 155.044 185.331 155.598 185.679 155.977C186.031 156.355 186.525 156.544 187.161 156.544C187.831 156.544 188.493 156.404 189.148 156.124V156.964C188.815 157.108 188.499 157.21 188.2 157.271C187.904 157.335 187.547 157.367 187.127 157.367ZM186.871 151.708C186.372 151.708 185.972 151.87 185.673 152.196C185.378 152.521 185.204 152.972 185.151 153.547H188.404C188.404 152.953 188.271 152.499 188.007 152.184C187.742 151.866 187.363 151.708 186.871 151.708ZM195.262 156.419H195.211C194.775 157.051 194.124 157.367 193.258 157.367C192.444 157.367 191.81 157.089 191.356 156.533C190.906 155.977 190.68 155.186 190.68 154.16C190.68 153.134 190.907 152.338 191.362 151.77C191.816 151.202 192.448 150.918 193.258 150.918C194.102 150.918 194.749 151.225 195.199 151.838H195.273L195.233 151.39L195.211 150.952V148.421H196.153V157.254H195.387L195.262 156.419ZM193.377 156.578C194.02 156.578 194.486 156.404 194.773 156.056C195.065 155.704 195.211 155.138 195.211 154.359V154.16C195.211 153.278 195.063 152.65 194.768 152.275C194.476 151.897 194.009 151.708 193.366 151.708C192.813 151.708 192.389 151.923 192.094 152.355C191.803 152.782 191.657 153.388 191.657 154.171C191.657 154.966 191.803 155.566 192.094 155.971C192.385 156.376 192.813 156.578 193.377 156.578ZM206.547 154.137C206.547 155.152 206.292 155.944 205.781 156.516C205.27 157.084 204.564 157.367 203.664 157.367C203.107 157.367 202.613 157.237 202.182 156.976C201.75 156.715 201.417 156.34 201.183 155.852C200.948 155.363 200.831 154.792 200.831 154.137C200.831 153.123 201.084 152.334 201.591 151.77C202.099 151.202 202.803 150.918 203.703 150.918C204.574 150.918 205.264 151.208 205.775 151.787C206.29 152.366 206.547 153.149 206.547 154.137ZM201.807 154.137C201.807 154.932 201.966 155.538 202.284 155.954C202.602 156.37 203.069 156.578 203.686 156.578C204.303 156.578 204.771 156.372 205.089 155.96C205.41 155.543 205.571 154.936 205.571 154.137C205.571 153.346 205.41 152.746 205.089 152.338C204.771 151.925 204.299 151.719 203.675 151.719C203.058 151.719 202.593 151.921 202.278 152.326C201.964 152.731 201.807 153.335 201.807 154.137ZM211.1 157.367C210.695 157.367 210.325 157.294 209.988 157.146C209.655 156.995 209.375 156.764 209.148 156.453H209.079C209.125 156.817 209.148 157.161 209.148 157.487V160.047H208.205V151.032H208.972L209.102 151.883H209.148C209.39 151.543 209.672 151.297 209.993 151.145C210.315 150.994 210.684 150.918 211.1 150.918C211.925 150.918 212.561 151.2 213.008 151.764C213.458 152.328 213.683 153.119 213.683 154.137C213.683 155.159 213.454 155.954 212.997 156.522C212.542 157.085 211.91 157.367 211.1 157.367ZM210.964 151.719C210.328 151.719 209.869 151.895 209.585 152.247C209.301 152.599 209.155 153.159 209.148 153.927V154.137C209.148 155.012 209.293 155.638 209.585 156.016C209.876 156.391 210.343 156.578 210.987 156.578C211.524 156.578 211.944 156.361 212.247 155.925C212.554 155.49 212.707 154.89 212.707 154.126C212.707 153.35 212.554 152.756 212.247 152.343C211.944 151.927 211.517 151.719 210.964 151.719ZM217.345 156.59C217.512 156.59 217.672 156.578 217.828 156.556C217.983 156.529 218.106 156.503 218.197 156.476V157.197C218.094 157.246 217.943 157.286 217.742 157.316C217.546 157.35 217.368 157.367 217.209 157.367C216.005 157.367 215.404 156.734 215.404 155.466V151.764H214.512V151.31L215.404 150.918L215.801 149.59H216.346V151.032H218.151V151.764H216.346V155.426C216.346 155.801 216.435 156.088 216.613 156.289C216.791 156.489 217.035 156.59 217.345 156.59ZM220.388 157.254H219.446V151.032H220.388V157.254ZM219.366 149.346C219.366 149.13 219.419 148.973 219.525 148.875C219.631 148.773 219.763 148.721 219.922 148.721C220.074 148.721 220.204 148.773 220.314 148.875C220.424 148.977 220.479 149.134 220.479 149.346C220.479 149.558 220.424 149.717 220.314 149.823C220.204 149.925 220.074 149.976 219.922 149.976C219.763 149.976 219.631 149.925 219.525 149.823C219.419 149.717 219.366 149.558 219.366 149.346ZM227.757 154.137C227.757 155.152 227.501 155.944 226.99 156.516C226.479 157.084 225.773 157.367 224.873 157.367C224.316 157.367 223.823 157.237 223.391 156.976C222.96 156.715 222.627 156.34 222.392 155.852C222.157 155.363 222.04 154.792 222.04 154.137C222.04 153.123 222.294 152.334 222.801 151.77C223.308 151.202 224.012 150.918 224.912 150.918C225.783 150.918 226.474 151.208 226.985 151.787C227.499 152.366 227.757 153.149 227.757 154.137ZM223.016 154.137C223.016 154.932 223.175 155.538 223.493 155.954C223.811 156.37 224.279 156.578 224.895 156.578C225.512 156.578 225.98 156.372 226.298 155.96C226.619 155.543 226.78 154.936 226.78 154.137C226.78 153.346 226.619 152.746 226.298 152.338C225.98 151.925 225.509 151.719 224.884 151.719C224.267 151.719 223.802 151.921 223.488 152.326C223.173 152.731 223.016 153.335 223.016 154.137ZM233.672 157.254V153.229C233.672 152.722 233.557 152.343 233.326 152.094C233.095 151.844 232.733 151.719 232.241 151.719C231.59 151.719 231.114 151.895 230.811 152.247C230.508 152.599 230.357 153.18 230.357 153.99V157.254H229.414V151.032H230.181L230.334 151.883H230.379C230.572 151.577 230.843 151.34 231.191 151.174C231.539 151.004 231.927 150.918 232.355 150.918C233.104 150.918 233.668 151.1 234.047 151.463C234.425 151.823 234.614 152.4 234.614 153.195V157.254H233.672ZM240.57 155.556C240.57 156.136 240.354 156.582 239.922 156.896C239.491 157.21 238.885 157.367 238.106 157.367C237.281 157.367 236.637 157.237 236.176 156.976V156.101C236.475 156.253 236.794 156.372 237.135 156.459C237.479 156.546 237.811 156.59 238.128 156.59C238.62 156.59 238.999 156.512 239.264 156.357C239.529 156.198 239.661 155.958 239.661 155.636C239.661 155.394 239.555 155.187 239.343 155.017C239.135 154.843 238.726 154.639 238.117 154.404C237.538 154.188 237.126 154.001 236.88 153.842C236.637 153.679 236.456 153.496 236.335 153.291C236.217 153.087 236.159 152.843 236.159 152.559C236.159 152.052 236.365 151.653 236.777 151.361C237.19 151.066 237.756 150.918 238.475 150.918C239.145 150.918 239.799 151.055 240.439 151.327L240.104 152.094C239.48 151.836 238.914 151.708 238.407 151.708C237.96 151.708 237.623 151.778 237.396 151.918C237.169 152.058 237.055 152.251 237.055 152.497C237.055 152.663 237.097 152.805 237.18 152.922C237.267 153.04 237.406 153.151 237.595 153.257C237.784 153.363 238.147 153.517 238.685 153.717C239.423 153.986 239.92 154.256 240.178 154.529C240.439 154.801 240.57 155.144 240.57 155.556Z" class="path-9"/> -<rect x="12.3633" y="124.988" width="359.273" height="56.2733" rx="1.81663" stroke-width="0.726651" class="rect-7"/> -<g filter="url(#filter2_d_13917_210955)"> -<rect x="24" y="205" width="334.529" height="32.6993" rx="2.17995" class="rect-8"/> -<rect x="24.3633" y="205.363" width="333.802" height="31.9727" rx="1.81663" stroke-width="0.726651" class="rect-9"/> -</g> -<path d="M24.7267 207.18C24.7267 206.377 25.3774 205.727 26.18 205.727H132.271V236.973H26.18C25.3773 236.973 24.7267 236.322 24.7267 235.519V207.18Z" class="path-10"/> -<path d="M150.301 220.115C150.301 220.955 150.013 221.602 149.438 222.056C148.867 222.507 148.047 222.732 146.98 222.732H146.004V225.996H145.039V217.696H147.19C149.264 217.696 150.301 218.503 150.301 220.115ZM146.004 221.903H146.872C147.728 221.903 148.346 221.765 148.729 221.489C149.111 221.212 149.302 220.77 149.302 220.16C149.302 219.611 149.122 219.203 148.763 218.934C148.403 218.665 147.843 218.531 147.082 218.531H146.004V221.903ZM155.728 225.996L155.541 225.11H155.495C155.185 225.5 154.875 225.765 154.564 225.905C154.258 226.042 153.874 226.11 153.412 226.11C152.795 226.11 152.311 225.951 151.959 225.633C151.611 225.315 151.436 224.863 151.436 224.276C151.436 223.019 152.441 222.361 154.451 222.3L155.507 222.266V221.88C155.507 221.392 155.401 221.033 155.189 220.802C154.981 220.567 154.646 220.45 154.184 220.45C153.666 220.45 153.079 220.609 152.424 220.927L152.135 220.206C152.441 220.039 152.776 219.908 153.14 219.814C153.507 219.719 153.874 219.672 154.241 219.672C154.983 219.672 155.531 219.837 155.887 220.166C156.247 220.495 156.427 221.023 156.427 221.75V225.996H155.728ZM153.599 225.332C154.186 225.332 154.646 225.171 154.979 224.849C155.316 224.528 155.484 224.077 155.484 223.498V222.936L154.542 222.976C153.792 223.002 153.251 223.12 152.918 223.328C152.589 223.532 152.424 223.852 152.424 224.287C152.424 224.628 152.526 224.887 152.731 225.065C152.939 225.243 153.228 225.332 153.599 225.332ZM157.386 219.774H158.396L159.759 223.322C160.058 224.132 160.243 224.717 160.315 225.076H160.361C160.41 224.883 160.512 224.554 160.667 224.089C160.826 223.619 161.341 222.181 162.211 219.774H163.222L160.548 226.859C160.283 227.559 159.973 228.055 159.617 228.346C159.265 228.642 158.832 228.789 158.317 228.789C158.029 228.789 157.745 228.757 157.465 228.693V227.938C157.674 227.983 157.906 228.006 158.164 228.006C158.811 228.006 159.273 227.642 159.549 226.916L159.895 226.03L157.386 219.774ZM170.312 225.996H169.393V220.081C169.393 219.589 169.408 219.123 169.438 218.684C169.359 218.764 169.27 218.847 169.171 218.934C169.073 219.021 168.623 219.39 167.82 220.041L167.321 219.394L169.518 217.696H170.312V225.996ZM176.069 220.927C176.943 220.927 177.63 221.144 178.13 221.579C178.633 222.011 178.885 222.603 178.885 223.356C178.885 224.215 178.61 224.889 178.061 225.377C177.516 225.866 176.763 226.11 175.802 226.11C174.867 226.11 174.154 225.96 173.662 225.661V224.753C173.927 224.923 174.256 225.058 174.65 225.156C175.043 225.251 175.431 225.298 175.813 225.298C176.479 225.298 176.996 225.141 177.363 224.827C177.734 224.513 177.92 224.058 177.92 223.464C177.92 222.306 177.21 221.727 175.791 221.727C175.431 221.727 174.95 221.782 174.349 221.892L173.86 221.579L174.173 217.696H178.3V218.565H174.979L174.769 221.057C175.204 220.97 175.637 220.927 176.069 220.927ZM185.629 221.835C185.629 223.269 185.402 224.34 184.948 225.048C184.497 225.756 183.807 226.11 182.876 226.11C181.982 226.11 181.303 225.748 180.837 225.025C180.372 224.299 180.139 223.235 180.139 221.835C180.139 220.389 180.364 219.316 180.815 218.616C181.265 217.916 181.952 217.566 182.876 217.566C183.776 217.566 184.459 217.931 184.925 218.661C185.394 219.392 185.629 220.45 185.629 221.835ZM181.093 221.835C181.093 223.042 181.235 223.922 181.519 224.475C181.803 225.023 182.255 225.298 182.876 225.298C183.504 225.298 183.958 225.02 184.238 224.463C184.522 223.903 184.664 223.027 184.664 221.835C184.664 220.643 184.522 219.77 184.238 219.218C183.958 218.661 183.504 218.383 182.876 218.383C182.255 218.383 181.803 218.658 181.519 219.206C181.235 219.751 181.093 220.628 181.093 221.835ZM197 221.767C197 223.137 196.627 224.185 195.881 224.912C195.14 225.635 194.07 225.996 192.674 225.996H190.375V217.696H192.918C194.209 217.696 195.212 218.054 195.927 218.769C196.642 219.485 197 220.484 197 221.767ZM195.978 221.801C195.978 220.718 195.705 219.903 195.16 219.354C194.619 218.805 193.813 218.531 192.742 218.531H191.34V225.162H192.515C193.666 225.162 194.53 224.88 195.109 224.316C195.688 223.748 195.978 222.91 195.978 221.801ZM204.073 225.996L203.04 223.356H199.713L198.692 225.996H197.715L200.996 217.662H201.808L205.072 225.996H204.073ZM202.739 222.488L201.774 219.916C201.649 219.591 201.521 219.191 201.388 218.718C201.305 219.082 201.186 219.481 201.03 219.916L200.054 222.488H202.739ZM206.214 225.996V217.696H207.179V225.996H206.214Z" class="path-11"/> -<path d="M61.3318 221.557H62.2742C62.9063 221.557 63.3642 221.439 63.648 221.205C63.9319 220.97 64.0738 220.622 64.0738 220.16C64.0738 219.691 63.9205 219.354 63.614 219.15C63.3074 218.945 62.8457 218.843 62.2288 218.843H61.3318V221.557ZM61.3318 222.681V225.996H59.975V217.696H62.3196C63.3907 217.696 64.1836 217.897 64.6983 218.298C65.213 218.699 65.4704 219.305 65.4704 220.115C65.4704 221.148 64.9329 221.884 63.8581 222.323L66.2027 225.996H64.6585L62.6716 222.681H61.3318ZM70.0119 226.11C69.0355 226.11 68.271 225.826 67.7184 225.258C67.1697 224.687 66.8953 223.901 66.8953 222.902C66.8953 221.877 67.1507 221.07 67.6617 220.484C68.1726 219.897 68.8746 219.604 69.7678 219.604C70.5966 219.604 71.2514 219.856 71.732 220.359C72.2127 220.862 72.453 221.555 72.453 222.437V223.158H68.2691C68.288 223.767 68.4526 224.236 68.763 224.565C69.0733 224.891 69.5105 225.054 70.0744 225.054C70.4453 225.054 70.7897 225.02 71.1076 224.952C71.4293 224.88 71.7737 224.762 72.1408 224.6V225.684C71.8153 225.839 71.486 225.949 71.153 226.013C70.8199 226.077 70.4396 226.11 70.0119 226.11ZM69.7678 220.614C69.3439 220.614 69.0033 220.749 68.746 221.017C68.4924 221.286 68.341 221.678 68.2918 222.193H71.1416C71.1341 221.674 71.0092 221.282 70.767 221.017C70.5247 220.749 70.1917 220.614 69.7678 220.614ZM73.3273 228.789C72.9261 228.789 72.593 228.742 72.3281 228.647V227.591C72.5855 227.659 72.8485 227.694 73.1172 227.694C73.6849 227.694 73.9688 227.372 73.9688 226.728V219.717H75.3029V226.819C75.3029 227.466 75.1325 227.957 74.7919 228.29C74.4551 228.623 73.9669 228.789 73.3273 228.789ZM73.8893 218.054C73.8893 217.816 73.9536 217.632 74.0823 217.503C74.2148 217.375 74.4021 217.31 74.6443 217.31C74.879 217.31 75.0606 217.375 75.1893 217.503C75.3218 217.632 75.388 217.816 75.388 218.054C75.388 218.281 75.3218 218.461 75.1893 218.593C75.0606 218.722 74.879 218.786 74.6443 218.786C74.4021 218.786 74.2148 218.722 74.0823 218.593C73.9536 218.461 73.8893 218.281 73.8893 218.054ZM79.958 226.11C78.9815 226.11 78.217 225.826 77.6645 225.258C77.1157 224.687 76.8413 223.901 76.8413 222.902C76.8413 221.877 77.0968 221.07 77.6077 220.484C78.1186 219.897 78.8207 219.604 79.7139 219.604C80.5427 219.604 81.1974 219.856 81.6781 220.359C82.1587 220.862 82.3991 221.555 82.3991 222.437V223.158H78.2151C78.2341 223.767 78.3987 224.236 78.709 224.565C79.0194 224.891 79.4565 225.054 80.0204 225.054C80.3913 225.054 80.7357 225.02 81.0536 224.952C81.3753 224.88 81.7197 224.762 82.0868 224.6V225.684C81.7613 225.839 81.4321 225.949 81.099 226.013C80.766 226.077 80.3856 226.11 79.958 226.11ZM79.7139 220.614C79.29 220.614 78.9494 220.749 78.692 221.017C78.4384 221.286 78.287 221.678 78.2378 222.193H81.0877C81.0801 221.674 80.9552 221.282 80.713 221.017C80.4708 220.749 80.1377 220.614 79.7139 220.614ZM86.4467 226.11C85.4968 226.11 84.7739 225.833 84.2781 225.281C83.7861 224.724 83.5401 223.928 83.5401 222.891C83.5401 221.835 83.7975 221.023 84.3122 220.455C84.8307 219.888 85.5782 219.604 86.5546 219.604C87.2169 219.604 87.813 219.727 88.3428 219.973L87.9398 221.046C87.3759 220.826 86.9104 220.717 86.5432 220.717C85.4571 220.717 84.914 221.437 84.914 222.879C84.914 223.583 85.0483 224.113 85.317 224.469C85.5895 224.821 85.9869 224.997 86.5092 224.997C87.1034 224.997 87.6654 224.849 88.1952 224.554V225.718C87.9568 225.858 87.7013 225.958 87.4288 226.019C87.1601 226.079 86.8328 226.11 86.4467 226.11ZM92.0102 225.031C92.3356 225.031 92.6611 224.98 92.9866 224.878V225.883C92.839 225.947 92.6479 226 92.4132 226.042C92.1824 226.087 91.942 226.11 91.6923 226.11C90.4282 226.11 89.7961 225.444 89.7961 224.111V220.728H88.9389V220.137L89.8586 219.649L90.3127 218.321H91.1359V219.717H92.9242V220.728H91.1359V224.089C91.1359 224.41 91.2154 224.649 91.3743 224.804C91.5371 224.955 91.749 225.031 92.0102 225.031Z" class="path-12"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M40.7599 221.712C40.7599 220.895 40.0995 220.235 39.2831 220.235C38.4668 220.235 37.8064 220.895 37.8064 221.712C37.8064 222.528 38.4668 223.188 39.2831 223.188C40.0995 223.188 40.7599 222.528 40.7599 221.712ZM39.2831 219.578C38.4668 219.578 37.8064 218.918 37.8064 218.102C37.8064 217.285 38.4668 216.625 39.2831 216.625C40.0995 216.625 40.7599 217.285 40.7599 218.102C40.7599 218.918 40.0995 219.578 39.2831 219.578ZM39.2831 226.798C38.4668 226.798 37.8064 226.138 37.8064 225.321C37.8064 224.505 38.4668 223.845 39.2831 223.845C40.0995 223.845 40.7599 224.505 40.7599 225.321C40.7599 226.138 40.0995 226.798 39.2831 226.798ZM45.1198 221.712C45.1198 220.895 44.4593 220.235 43.643 220.235C42.8267 220.235 42.1663 220.895 42.1663 221.712C42.1663 222.528 42.8267 223.188 43.643 223.188C44.4593 223.188 45.1198 222.528 45.1198 221.712ZM43.643 219.578C42.8267 219.578 42.1663 218.918 42.1663 218.102C42.1663 217.285 42.8267 216.625 43.643 216.625C44.4593 216.625 45.1198 217.285 45.1198 218.102C45.1198 218.918 44.4593 219.578 43.643 219.578ZM43.643 226.798C42.8267 226.798 42.1663 226.138 42.1663 225.321C42.1663 224.505 42.8267 223.845 43.643 223.845C44.4593 223.845 45.1198 224.505 45.1198 225.321C45.1198 226.138 44.4593 226.798 43.643 226.798Z" class="path-13"/> -<rect x="12.3633" y="193.617" width="359.273" height="55.2733" rx="1.81663" stroke-width="0.726651" class="rect-10"/> -<rect x="1" y="260" width="383" height="58" rx="2.17995" class="rect-11"/> -<rect x="299.078" y="272.684" width="72.5057" height="32.6993" rx="2.17995" class="rect-12"/> -<path d="M328.348 284.735H329.756L326.85 293.035H325.419L322.524 284.735H323.92L325.652 289.896C325.743 290.142 325.839 290.46 325.941 290.85C326.043 291.236 326.11 291.523 326.14 291.712C326.189 291.425 326.265 291.092 326.367 290.713C326.469 290.335 326.552 290.055 326.617 289.873L328.348 284.735ZM336.279 289.884C336.279 290.91 336.016 291.711 335.49 292.286C334.964 292.861 334.231 293.149 333.293 293.149C332.706 293.149 332.188 293.016 331.737 292.751C331.287 292.486 330.941 292.106 330.699 291.61C330.456 291.114 330.335 290.539 330.335 289.884C330.335 288.866 330.596 288.072 331.119 287.5C331.641 286.929 332.377 286.643 333.327 286.643C334.235 286.643 334.954 286.936 335.484 287.523C336.014 288.106 336.279 288.893 336.279 289.884ZM331.709 289.884C331.709 291.334 332.245 292.059 333.316 292.059C334.375 292.059 334.905 291.334 334.905 289.884C334.905 288.45 334.372 287.733 333.304 287.733C332.744 287.733 332.337 287.918 332.084 288.289C331.834 288.66 331.709 289.192 331.709 289.884ZM340.156 292.07C340.482 292.07 340.807 292.019 341.133 291.917V292.922C340.985 292.986 340.794 293.039 340.559 293.081C340.329 293.126 340.088 293.149 339.838 293.149C338.574 293.149 337.942 292.483 337.942 291.15V287.767H337.085V287.177L338.005 286.688L338.459 285.36H339.282V286.756H341.07V287.767H339.282V291.128C339.282 291.449 339.362 291.688 339.521 291.843C339.683 291.994 339.895 292.07 340.156 292.07ZM345.135 293.149C344.159 293.149 343.394 292.865 342.842 292.297C342.293 291.726 342.018 290.94 342.018 289.941C342.018 288.916 342.274 288.109 342.785 287.523C343.296 286.936 343.998 286.643 344.891 286.643C345.72 286.643 346.375 286.895 346.855 287.398C347.336 287.901 347.576 288.594 347.576 289.476V290.197H343.392C343.411 290.806 343.576 291.275 343.886 291.605C344.196 291.93 344.634 292.093 345.197 292.093C345.568 292.093 345.913 292.059 346.231 291.991C346.552 291.919 346.897 291.801 347.264 291.639V292.723C346.938 292.878 346.609 292.988 346.276 293.052C345.943 293.117 345.563 293.149 345.135 293.149ZM344.891 287.653C344.467 287.653 344.126 287.788 343.869 288.056C343.616 288.325 343.464 288.717 343.415 289.232H346.265C346.257 288.713 346.132 288.321 345.89 288.056C345.648 287.788 345.315 287.653 344.891 287.653Z" class="path-14"/> -<rect x="129.363" y="273.047" width="152.779" height="31.9727" rx="1.81663" class="rect-13"/> -<path d="M154.887 288.596H155.83C156.462 288.596 156.92 288.478 157.203 288.244C157.487 288.009 157.629 287.661 157.629 287.199C157.629 286.73 157.476 286.393 157.169 286.189C156.863 285.984 156.401 285.882 155.784 285.882H154.887V288.596ZM154.887 289.72V293.035H153.53V284.735H155.875C156.946 284.735 157.739 284.936 158.254 285.337C158.768 285.738 159.026 286.344 159.026 287.154C159.026 288.187 158.488 288.923 157.413 289.362L159.758 293.035H158.214L156.227 289.72H154.887ZM163.567 293.149C162.591 293.149 161.826 292.865 161.274 292.297C160.725 291.726 160.451 290.94 160.451 289.941C160.451 288.916 160.706 288.109 161.217 287.523C161.728 286.936 162.43 286.643 163.323 286.643C164.152 286.643 164.807 286.895 165.287 287.398C165.768 287.901 166.008 288.594 166.008 289.476V290.197H161.824C161.843 290.806 162.008 291.275 162.318 291.605C162.629 291.93 163.066 292.093 163.63 292.093C164.001 292.093 164.345 292.059 164.663 291.991C164.985 291.919 165.329 291.801 165.696 291.639V292.723C165.371 292.878 165.041 292.988 164.708 293.052C164.375 293.117 163.995 293.149 163.567 293.149ZM163.323 287.653C162.899 287.653 162.559 287.788 162.301 288.056C162.048 288.325 161.896 288.717 161.847 289.232H164.697C164.689 288.713 164.565 288.321 164.322 288.056C164.08 287.788 163.747 287.653 163.323 287.653ZM170.675 287.767H169.142V293.035H167.802V287.767H166.769V287.142L167.802 286.734V286.325C167.802 285.583 167.976 285.034 168.325 284.679C168.673 284.319 169.205 284.139 169.92 284.139C170.389 284.139 170.851 284.217 171.305 284.372L170.953 285.383C170.624 285.277 170.31 285.224 170.011 285.224C169.708 285.224 169.486 285.318 169.346 285.508C169.21 285.693 169.142 285.973 169.142 286.348V286.756H170.675V287.767ZM176.176 293.035L175.988 292.212H175.92C175.735 292.503 175.47 292.732 175.126 292.899C174.785 293.065 174.395 293.149 173.956 293.149C173.195 293.149 172.628 292.959 172.253 292.581C171.878 292.203 171.691 291.629 171.691 290.861V286.756H173.036V290.628C173.036 291.109 173.135 291.47 173.332 291.712C173.528 291.951 173.837 292.07 174.257 292.07C174.817 292.07 175.228 291.904 175.489 291.57C175.754 291.234 175.886 290.672 175.886 289.884V286.756H177.226V293.035H176.176ZM183.346 291.247C183.346 291.86 183.123 292.331 182.676 292.66C182.229 292.986 181.59 293.149 180.757 293.149C179.921 293.149 179.249 293.022 178.742 292.768V291.616C179.48 291.957 180.167 292.127 180.803 292.127C181.624 292.127 182.034 291.879 182.034 291.383C182.034 291.224 181.989 291.092 181.898 290.986C181.807 290.88 181.658 290.77 181.45 290.657C181.242 290.543 180.952 290.414 180.581 290.27C179.858 289.99 179.368 289.71 179.111 289.43C178.857 289.15 178.73 288.787 178.73 288.34C178.73 287.803 178.946 287.387 179.378 287.091C179.813 286.792 180.403 286.643 181.149 286.643C181.887 286.643 182.585 286.792 183.244 287.091L182.812 288.096C182.135 287.816 181.565 287.676 181.103 287.676C180.399 287.676 180.048 287.877 180.048 288.278C180.048 288.475 180.138 288.641 180.32 288.777C180.505 288.914 180.907 289.101 181.524 289.339C182.042 289.54 182.419 289.724 182.653 289.89C182.888 290.057 183.062 290.25 183.176 290.469C183.289 290.685 183.346 290.944 183.346 291.247ZM187.535 293.149C186.559 293.149 185.794 292.865 185.242 292.297C184.693 291.726 184.419 290.94 184.419 289.941C184.419 288.916 184.674 288.109 185.185 287.523C185.696 286.936 186.398 286.643 187.291 286.643C188.12 286.643 188.775 286.895 189.256 287.398C189.736 287.901 189.977 288.594 189.977 289.476V290.197H185.793C185.812 290.806 185.976 291.275 186.286 291.605C186.597 291.93 187.034 292.093 187.598 292.093C187.969 292.093 188.313 292.059 188.631 291.991C188.953 291.919 189.297 291.801 189.664 291.639V292.723C189.339 292.878 189.01 292.988 188.676 293.052C188.343 293.117 187.963 293.149 187.535 293.149ZM187.291 287.653C186.867 287.653 186.527 287.788 186.269 288.056C186.016 288.325 185.865 288.717 185.815 289.232H188.665C188.658 288.713 188.533 288.321 188.29 288.056C188.048 287.788 187.715 287.653 187.291 287.653ZM196.851 292.07C197.177 292.07 197.502 292.019 197.828 291.917V292.922C197.68 292.986 197.489 293.039 197.254 293.081C197.024 293.126 196.783 293.149 196.533 293.149C195.269 293.149 194.637 292.483 194.637 291.15V287.767H193.78V287.177L194.7 286.688L195.154 285.36H195.977V286.756H197.765V287.767H195.977V291.128C195.977 291.449 196.057 291.688 196.216 291.843C196.378 291.994 196.59 292.07 196.851 292.07ZM204.657 289.884C204.657 290.91 204.394 291.711 203.868 292.286C203.342 292.861 202.61 293.149 201.671 293.149C201.084 293.149 200.566 293.016 200.116 292.751C199.665 292.486 199.319 292.106 199.077 291.61C198.834 291.114 198.713 290.539 198.713 289.884C198.713 288.866 198.975 288.072 199.497 287.5C200.019 286.929 200.755 286.643 201.705 286.643C202.613 286.643 203.333 286.936 203.862 287.523C204.392 288.106 204.657 288.893 204.657 289.884ZM200.087 289.884C200.087 291.334 200.623 292.059 201.694 292.059C202.753 292.059 203.283 291.334 203.283 289.884C203.283 288.45 202.75 287.733 201.682 287.733C201.122 287.733 200.715 287.918 200.462 288.289C200.212 288.66 200.087 289.192 200.087 289.884ZM214.507 293.035L213.678 290.73H210.504L209.693 293.035H208.262L211.367 284.701H212.843L215.949 293.035H214.507ZM213.32 289.561L212.542 287.301C212.486 287.15 212.406 286.912 212.304 286.586C212.206 286.261 212.137 286.022 212.1 285.871C211.997 286.336 211.848 286.845 211.651 287.398L210.902 289.561H213.32ZM220.087 286.643C220.356 286.643 220.577 286.662 220.751 286.7L220.621 287.943C220.432 287.898 220.235 287.875 220.03 287.875C219.497 287.875 219.063 288.049 218.73 288.397C218.401 288.745 218.236 289.198 218.236 289.754V293.035H216.902V286.756H217.947L218.123 287.863H218.191C218.399 287.489 218.67 287.192 219.003 286.972C219.34 286.753 219.701 286.643 220.087 286.643ZM225.128 286.643C225.912 286.643 226.521 286.927 226.956 287.494C227.395 288.062 227.615 288.859 227.615 289.884C227.615 290.914 227.393 291.716 226.951 292.291C226.508 292.863 225.893 293.149 225.106 293.149C224.311 293.149 223.694 292.863 223.255 292.291H223.164L222.92 293.035H221.921V284.202H223.255V286.302C223.255 286.457 223.247 286.688 223.232 286.995C223.217 287.301 223.206 287.496 223.198 287.58H223.255C223.679 286.955 224.303 286.643 225.128 286.643ZM224.782 287.733C224.245 287.733 223.857 287.892 223.618 288.21C223.384 288.524 223.262 289.052 223.255 289.794V289.884C223.255 290.649 223.376 291.203 223.618 291.548C223.86 291.888 224.256 292.059 224.805 292.059C225.278 292.059 225.635 291.871 225.878 291.497C226.124 291.122 226.247 290.581 226.247 289.873C226.247 288.446 225.758 287.733 224.782 287.733ZM230.499 293.035H229.165V286.756H230.499V293.035ZM229.085 285.093C229.085 284.855 229.149 284.671 229.278 284.542C229.411 284.414 229.598 284.349 229.84 284.349C230.075 284.349 230.256 284.414 230.385 284.542C230.518 284.671 230.584 284.855 230.584 285.093C230.584 285.32 230.518 285.5 230.385 285.632C230.256 285.761 230.075 285.825 229.84 285.825C229.598 285.825 229.411 285.761 229.278 285.632C229.149 285.5 229.085 285.32 229.085 285.093ZM234.751 292.07C235.076 292.07 235.402 292.019 235.727 291.917V292.922C235.58 292.986 235.388 293.039 235.154 293.081C234.923 293.126 234.683 293.149 234.433 293.149C233.169 293.149 232.537 292.483 232.537 291.15V287.767H231.68V287.177L232.599 286.688L233.053 285.36H233.876V286.756H235.665V287.767H233.876V291.128C233.876 291.449 233.956 291.688 234.115 291.843C234.278 291.994 234.49 292.07 234.751 292.07ZM240.172 286.643C240.441 286.643 240.662 286.662 240.836 286.7L240.706 287.943C240.517 287.898 240.32 287.875 240.115 287.875C239.582 287.875 239.148 288.049 238.815 288.397C238.486 288.745 238.322 289.198 238.322 289.754V293.035H236.987V286.756H238.032L238.208 287.863H238.276C238.484 287.489 238.755 287.192 239.088 286.972C239.425 286.753 239.786 286.643 240.172 286.643ZM245.934 293.035L245.668 292.161H245.622C245.319 292.543 245.015 292.804 244.708 292.944C244.402 293.081 244.008 293.149 243.527 293.149C242.91 293.149 242.428 292.982 242.08 292.649C241.735 292.316 241.563 291.845 241.563 291.236C241.563 290.588 241.803 290.1 242.284 289.771C242.765 289.442 243.497 289.262 244.481 289.232L245.565 289.198V288.863C245.565 288.461 245.471 288.162 245.282 287.966C245.096 287.765 244.807 287.665 244.413 287.665C244.091 287.665 243.783 287.712 243.488 287.807C243.192 287.901 242.909 288.013 242.636 288.142L242.205 287.188C242.545 287.01 242.918 286.876 243.323 286.785C243.728 286.69 244.11 286.643 244.47 286.643C245.268 286.643 245.87 286.817 246.275 287.165C246.684 287.513 246.888 288.06 246.888 288.806V293.035H245.934ZM243.947 292.127C244.432 292.127 244.82 291.992 245.111 291.724C245.406 291.451 245.554 291.071 245.554 290.583V290.038L244.748 290.072C244.12 290.094 243.662 290.2 243.374 290.39C243.09 290.575 242.948 290.861 242.948 291.247C242.948 291.527 243.032 291.745 243.198 291.9C243.365 292.051 243.614 292.127 243.947 292.127ZM251.089 292.07C251.415 292.07 251.74 292.019 252.065 291.917V292.922C251.918 292.986 251.727 293.039 251.492 293.081C251.261 293.126 251.021 293.149 250.771 293.149C249.507 293.149 248.875 292.483 248.875 291.15V287.767H248.018V287.177L248.937 286.688L249.392 285.36H250.215V286.756H252.003V287.767H250.215V291.128C250.215 291.449 250.294 291.688 250.453 291.843C250.616 291.994 250.828 292.07 251.089 292.07ZM256.068 293.149C255.091 293.149 254.327 292.865 253.774 292.297C253.225 291.726 252.951 290.94 252.951 289.941C252.951 288.916 253.207 288.109 253.717 287.523C254.228 286.936 254.93 286.643 255.824 286.643C256.652 286.643 257.307 286.895 257.788 287.398C258.269 287.901 258.509 288.594 258.509 289.476V290.197H254.325C254.344 290.806 254.508 291.275 254.819 291.605C255.129 291.93 255.566 292.093 256.13 292.093C256.501 292.093 256.845 292.059 257.163 291.991C257.485 291.919 257.829 291.801 258.197 291.639V292.723C257.871 292.878 257.542 292.988 257.209 293.052C256.876 293.117 256.495 293.149 256.068 293.149ZM255.824 287.653C255.4 287.653 255.059 287.788 254.802 288.056C254.548 288.325 254.397 288.717 254.348 289.232H257.197C257.19 288.713 257.065 288.321 256.823 288.056C256.581 287.788 256.248 287.653 255.824 287.653Z" class="path-15"/> -<rect x="129.363" y="273.047" width="152.779" height="31.9727" rx="1.81663" stroke-width="0.726651" class="rect-14"/> -<defs> -<filter id="filter0_d_13917_210955" x="21.82" y="24.2733" width="340.162" height="37.0591" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.4533"/> -<feGaussianBlur stdDeviation="1.08998"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_13917_210955"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_13917_210955" result="shape"/> -</filter> -<filter id="filter1_d_13917_210955" x="21.82" y="68.8983" width="340.162" height="37.0591" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.4533"/> -<feGaussianBlur stdDeviation="1.08998"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_13917_210955"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_13917_210955" result="shape"/> -</filter> -<filter id="filter2_d_13917_210955" x="21.82" y="204.273" width="338.888" height="37.0591" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.4533"/> -<feGaussianBlur stdDeviation="1.08998"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_13917_210955"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_13917_210955" result="shape"/> -</filter> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/staking/court-header.svg b/web/src/assets/svgs/mini-guides/staking/court-header.svg deleted file mode 100644 index f8ef2664c..000000000 --- a/web/src/assets/svgs/mini-guides/staking/court-header.svg +++ /dev/null @@ -1,107 +0,0 @@ -<svg viewBox="0 0 389 369" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g filter="url(#filter0_d_13917_210808)"> -<rect x="2" y="1" width="385" height="364.929" rx="1.82464" class="rect-1"/> -<rect x="2.30411" y="1.30411" width="384.392" height="364.321" rx="1.52054" stroke-width="0.608215" class="rect-2"/> -</g> -<rect x="21.767" y="287.773" width="239.392" height="26.7615" rx="1.52054" stroke-width="0.608215" class="rect-3"/> -<path d="M31.7503 300.581C31.7503 299.216 32.0148 298.196 32.5438 297.521C33.076 296.843 33.8616 296.504 34.9006 296.504C35.2586 296.504 35.5405 296.534 35.7464 296.594V297.274C35.5025 297.195 35.2238 297.155 34.9101 297.155C34.1657 297.155 33.5971 297.388 33.2043 297.854C32.8115 298.316 32.5961 299.045 32.5581 300.039H32.6151C32.9635 299.494 33.5147 299.222 34.2687 299.222C34.8927 299.222 35.3837 299.41 35.7417 299.787C36.1028 300.164 36.2834 300.676 36.2834 301.322C36.2834 302.044 36.0854 302.613 35.6894 303.028C35.2966 303.44 34.7644 303.646 34.0929 303.646C33.3738 303.646 32.8036 303.377 32.3823 302.838C31.9609 302.296 31.7503 301.544 31.7503 300.581ZM34.0834 302.976C34.5332 302.976 34.8816 302.835 35.1287 302.553C35.379 302.268 35.5041 301.858 35.5041 301.322C35.5041 300.863 35.3885 300.502 35.1572 300.239C34.926 299.976 34.5807 299.844 34.1214 299.844C33.8363 299.844 33.5749 299.903 33.3373 300.02C33.0998 300.137 32.9097 300.299 32.7671 300.505C32.6278 300.711 32.5581 300.925 32.5581 301.146C32.5581 301.473 32.6214 301.777 32.7481 302.059C32.8748 302.341 33.0538 302.564 33.2851 302.729C33.5195 302.893 33.7856 302.976 34.0834 302.976ZM41.8048 303.551H37.2385V302.871L39.0679 301.032C39.6254 300.469 39.9929 300.066 40.1703 299.825C40.3477 299.585 40.4807 299.35 40.5694 299.122C40.6581 298.894 40.7024 298.649 40.7024 298.386C40.7024 298.015 40.59 297.722 40.3651 297.507C40.1402 297.288 39.8281 297.179 39.429 297.179C39.1407 297.179 38.8667 297.226 38.607 297.321C38.3504 297.416 38.0637 297.589 37.7469 297.839L37.3288 297.302C37.9686 296.77 38.6656 296.504 39.4195 296.504C40.0721 296.504 40.5837 296.672 40.9543 297.008C41.3249 297.34 41.5102 297.789 41.5102 298.352C41.5102 298.793 41.3867 299.228 41.1396 299.659C40.8925 300.09 40.43 300.635 39.7521 301.294L38.2316 302.781V302.819H41.8048V303.551ZM47.4118 300.068C47.4118 301.268 47.2217 302.165 46.8416 302.757C46.4646 303.35 45.8865 303.646 45.1073 303.646C44.3597 303.646 43.791 303.343 43.4014 302.738C43.0118 302.13 42.8169 301.24 42.8169 300.068C42.8169 298.858 43.0054 297.96 43.3824 297.374C43.7594 296.788 44.3343 296.495 45.1073 296.495C45.8612 296.495 46.433 296.8 46.8226 297.412C47.2154 298.023 47.4118 298.908 47.4118 300.068ZM43.6152 300.068C43.6152 301.078 43.734 301.815 43.9716 302.277C44.2092 302.737 44.5877 302.966 45.1073 302.966C45.6331 302.966 46.0132 302.733 46.2477 302.268C46.4852 301.799 46.604 301.066 46.604 300.068C46.604 299.07 46.4852 298.34 46.2477 297.877C46.0132 297.412 45.6331 297.179 45.1073 297.179C44.5877 297.179 44.2092 297.408 43.9716 297.868C43.734 298.324 43.6152 299.057 43.6152 300.068ZM55.789 298.628C55.789 299.331 55.5483 299.873 55.0668 300.253C54.5884 300.63 53.9026 300.819 53.0093 300.819H52.192V303.551H51.3842V296.604H53.1851C54.9211 296.604 55.789 297.279 55.789 298.628ZM52.192 300.125H52.919C53.6349 300.125 54.1529 300.009 54.4728 299.778C54.7928 299.547 54.9527 299.176 54.9527 298.666C54.9527 298.207 54.8023 297.865 54.5013 297.64C54.2004 297.415 53.7315 297.302 53.0948 297.302H52.192V300.125ZM62.6742 303.551H61.7524L57.9558 297.72H57.9178C57.9685 298.405 57.9938 299.032 57.9938 299.602V303.551H57.2478V296.604H58.1601L61.9472 302.41H61.9852C61.9789 302.325 61.9646 302.051 61.9424 301.588C61.9203 301.123 61.9124 300.79 61.9187 300.59V296.604H62.6742V303.551ZM69.6022 303.551H68.6518L66.1192 300.182L65.3922 300.828V303.551H64.5844V296.604H65.3922V300.049L68.5425 296.604H69.4976L66.7036 299.621L69.6022 303.551Z" class="path-1"/> -<rect x="196.021" y="287.469" width="65.9258" height="27.9889" rx="1.82464" class="rect-4"/> -<path d="M220.906 302.578C220.906 303.196 220.682 303.681 220.236 304.032C219.789 304.384 219.173 304.56 218.387 304.56C217.602 304.56 216.958 304.438 216.458 304.194V303.12C216.775 303.269 217.111 303.386 217.465 303.472C217.823 303.557 218.156 303.6 218.463 303.6C218.913 303.6 219.244 303.515 219.456 303.343C219.672 303.172 219.779 302.943 219.779 302.654C219.779 302.395 219.681 302.175 219.485 301.994C219.288 301.813 218.883 301.6 218.268 301.352C217.635 301.096 217.188 300.803 216.928 300.473C216.669 300.144 216.539 299.748 216.539 299.286C216.539 298.706 216.745 298.25 217.156 297.917C217.568 297.584 218.121 297.418 218.815 297.418C219.48 297.418 220.142 297.564 220.801 297.855L220.44 298.782C219.822 298.522 219.271 298.392 218.786 298.392C218.419 298.392 218.14 298.473 217.95 298.635C217.76 298.793 217.665 299.004 217.665 299.267C217.665 299.447 217.703 299.602 217.779 299.732C217.855 299.859 217.98 299.979 218.154 300.093C218.329 300.207 218.642 300.358 219.095 300.545C219.605 300.757 219.979 300.955 220.217 301.139C220.454 301.322 220.628 301.53 220.739 301.761C220.85 301.992 220.906 302.265 220.906 302.578ZM224.089 303.657C224.362 303.657 224.634 303.614 224.906 303.529V304.37C224.783 304.424 224.623 304.468 224.427 304.503C224.233 304.541 224.032 304.56 223.823 304.56C222.765 304.56 222.236 304.002 222.236 302.887V300.055H221.519V299.561L222.288 299.152L222.668 298.041H223.357V299.209H224.854V300.055H223.357V302.868C223.357 303.138 223.424 303.337 223.557 303.467C223.693 303.594 223.871 303.657 224.089 303.657ZM229.249 304.465L229.026 303.733H228.988C228.735 304.053 228.48 304.272 228.223 304.389C227.967 304.503 227.637 304.56 227.235 304.56C226.718 304.56 226.315 304.42 226.023 304.142C225.735 303.863 225.591 303.469 225.591 302.959C225.591 302.417 225.792 302.008 226.194 301.733C226.596 301.457 227.209 301.307 228.033 301.281L228.941 301.253V300.972C228.941 300.637 228.861 300.386 228.703 300.222C228.548 300.054 228.305 299.97 227.976 299.97C227.707 299.97 227.449 300.009 227.202 300.089C226.954 300.168 226.717 300.261 226.489 300.369L226.128 299.571C226.413 299.422 226.725 299.309 227.064 299.233C227.403 299.154 227.723 299.114 228.024 299.114C228.692 299.114 229.196 299.26 229.535 299.552C229.877 299.843 230.048 300.301 230.048 300.925V304.465H229.249ZM227.586 303.705C227.992 303.705 228.317 303.592 228.56 303.367C228.808 303.139 228.931 302.821 228.931 302.412V301.956L228.256 301.984C227.731 302.003 227.347 302.092 227.106 302.251C226.869 302.406 226.75 302.645 226.75 302.968C226.75 303.202 226.82 303.385 226.959 303.515C227.099 303.641 227.308 303.705 227.586 303.705ZM232.685 301.69L233.317 300.901L234.904 299.209H236.192L234.077 301.467L236.325 304.465H235.013L233.326 302.16L232.713 302.664V304.465H231.606V297.071H232.713V300.678L232.656 301.69H232.685ZM239.47 304.56C238.653 304.56 238.013 304.322 237.551 303.847C237.091 303.369 236.862 302.711 236.862 301.875C236.862 301.017 237.076 300.342 237.503 299.851C237.931 299.36 238.518 299.114 239.266 299.114C239.96 299.114 240.508 299.325 240.91 299.746C241.312 300.168 241.514 300.747 241.514 301.486V302.089H238.012C238.027 302.599 238.165 302.992 238.425 303.267C238.685 303.54 239.051 303.676 239.523 303.676C239.833 303.676 240.121 303.648 240.387 303.591C240.657 303.53 240.945 303.432 241.252 303.296V304.204C240.98 304.333 240.704 304.425 240.425 304.479C240.147 304.533 239.828 304.56 239.47 304.56ZM239.266 299.96C238.911 299.96 238.626 300.073 238.411 300.298C238.198 300.523 238.072 300.85 238.031 301.281H240.416C240.41 300.847 240.305 300.519 240.102 300.298C239.9 300.073 239.621 299.96 239.266 299.96Z" class="path-2"/> -<rect x="276.001" y="287.773" width="91.3175" height="26.7615" rx="1.52054" class="rect-5"/> -<path d="M301.821 297.205V301.7C301.821 302.214 301.711 302.663 301.489 303.05C301.27 303.433 300.952 303.729 300.534 303.939C300.119 304.144 299.621 304.247 299.042 304.247C298.18 304.247 297.51 304.019 297.032 303.563C296.553 303.107 296.314 302.48 296.314 301.681V297.205H297.455V301.601C297.455 302.174 297.588 302.597 297.854 302.869C298.12 303.142 298.528 303.278 299.08 303.278C300.15 303.278 300.686 302.716 300.686 301.591V297.205H301.821ZM308.103 304.152H306.982V300.921C306.982 300.516 306.899 300.213 306.735 300.014C306.573 299.814 306.315 299.714 305.96 299.714C305.488 299.714 305.143 299.854 304.924 300.132C304.706 300.411 304.596 300.878 304.596 301.534V304.152H303.48V298.897H304.354L304.511 299.586H304.568C304.726 299.336 304.951 299.142 305.243 299.006C305.534 298.87 305.857 298.802 306.212 298.802C307.473 298.802 308.103 299.443 308.103 300.726V304.152ZM313.187 302.656C313.187 303.169 313.001 303.563 312.627 303.839C312.253 304.111 311.718 304.247 311.021 304.247C310.321 304.247 309.758 304.141 309.334 303.929V302.964C309.952 303.25 310.526 303.392 311.059 303.392C311.746 303.392 312.09 303.185 312.09 302.77C312.09 302.637 312.052 302.526 311.976 302.437C311.9 302.348 311.775 302.256 311.6 302.161C311.426 302.066 311.184 301.959 310.873 301.838C310.268 301.604 309.858 301.369 309.643 301.135C309.43 300.901 309.324 300.597 309.324 300.223C309.324 299.773 309.505 299.424 309.866 299.177C310.23 298.927 310.724 298.802 311.349 298.802C311.966 298.802 312.551 298.927 313.102 299.177L312.741 300.018C312.174 299.784 311.697 299.667 311.311 299.667C310.721 299.667 310.427 299.835 310.427 300.17C310.427 300.335 310.503 300.475 310.655 300.589C310.81 300.703 311.146 300.859 311.662 301.059C312.096 301.227 312.411 301.381 312.608 301.52C312.804 301.659 312.95 301.821 313.045 302.005C313.14 302.185 313.187 302.402 313.187 302.656ZM316.357 303.345C316.629 303.345 316.902 303.302 317.174 303.216V304.057C317.051 304.111 316.891 304.156 316.694 304.19C316.501 304.228 316.3 304.247 316.091 304.247C315.033 304.247 314.504 303.69 314.504 302.575V299.743H313.786V299.249L314.556 298.84L314.936 297.728H315.625V298.897H317.122V299.743H315.625V302.556C315.625 302.825 315.692 303.025 315.825 303.154C315.961 303.281 316.138 303.345 316.357 303.345ZM321.517 304.152L321.294 303.421H321.256C321.002 303.741 320.747 303.959 320.491 304.076C320.234 304.19 319.905 304.247 319.502 304.247C318.986 304.247 318.582 304.108 318.291 303.829C318.002 303.55 317.858 303.156 317.858 302.646C317.858 302.104 318.059 301.696 318.462 301.42C318.864 301.145 319.477 300.994 320.301 300.969L321.208 300.94V300.66C321.208 300.324 321.129 300.074 320.971 299.909C320.815 299.741 320.573 299.657 320.244 299.657C319.974 299.657 319.716 299.697 319.469 299.776C319.222 299.855 318.984 299.949 318.756 300.056L318.395 299.258C318.68 299.109 318.992 298.997 319.331 298.921C319.67 298.842 319.99 298.802 320.291 298.802C320.96 298.802 321.463 298.948 321.802 299.239C322.144 299.531 322.315 299.988 322.315 300.612V304.152H321.517ZM319.854 303.392C320.26 303.392 320.584 303.28 320.828 303.055C321.075 302.827 321.199 302.508 321.199 302.1V301.643L320.524 301.672C319.998 301.691 319.615 301.78 319.374 301.938C319.137 302.093 319.018 302.332 319.018 302.656C319.018 302.89 319.087 303.072 319.227 303.202C319.366 303.329 319.575 303.392 319.854 303.392ZM324.953 301.377L325.585 300.589L327.172 298.897H328.459L326.345 301.154L328.592 304.152H327.281L325.594 301.848L324.981 302.351V304.152H323.874V296.759H324.981V300.365L324.924 301.377H324.953ZM331.738 304.247C330.921 304.247 330.281 304.01 329.818 303.535C329.359 303.056 329.129 302.399 329.129 301.563C329.129 300.704 329.343 300.029 329.771 299.538C330.198 299.047 330.786 298.802 331.534 298.802C332.227 298.802 332.775 299.013 333.178 299.434C333.58 299.855 333.781 300.435 333.781 301.173V301.777H330.279C330.295 302.287 330.433 302.679 330.693 302.955C330.952 303.227 331.318 303.364 331.79 303.364C332.101 303.364 332.389 303.335 332.655 303.278C332.924 303.218 333.213 303.12 333.52 302.983V303.891C333.247 304.021 332.972 304.113 332.693 304.167C332.414 304.22 332.096 304.247 331.738 304.247ZM331.534 299.648C331.179 299.648 330.894 299.76 330.678 299.985C330.466 300.21 330.339 300.538 330.298 300.969H332.684C332.677 300.535 332.573 300.207 332.37 299.985C332.167 299.76 331.888 299.648 331.534 299.648ZM340.866 304.152L340.643 303.421H340.605C340.351 303.741 340.096 303.959 339.84 304.076C339.583 304.19 339.254 304.247 338.851 304.247C338.335 304.247 337.931 304.108 337.64 303.829C337.351 303.55 337.207 303.156 337.207 302.646C337.207 302.104 337.408 301.696 337.811 301.42C338.213 301.145 338.826 300.994 339.65 300.969L340.557 300.94V300.66C340.557 300.324 340.478 300.074 340.32 299.909C340.164 299.741 339.922 299.657 339.593 299.657C339.323 299.657 339.065 299.697 338.818 299.776C338.571 299.855 338.333 299.949 338.105 300.056L337.744 299.258C338.029 299.109 338.341 298.997 338.68 298.921C339.019 298.842 339.339 298.802 339.64 298.802C340.308 298.802 340.812 298.948 341.151 299.239C341.493 299.531 341.664 299.988 341.664 300.612V304.152H340.866ZM339.203 303.392C339.608 303.392 339.933 303.28 340.177 303.055C340.424 302.827 340.548 302.508 340.548 302.1V301.643L339.873 301.672C339.347 301.691 338.964 301.78 338.723 301.938C338.485 302.093 338.367 302.332 338.367 302.656C338.367 302.89 338.436 303.072 338.576 303.202C338.715 303.329 338.924 303.392 339.203 303.392ZM344.339 304.152H343.223V296.759H344.339V304.152ZM347.057 304.152H345.941V296.759H347.057V304.152Z" class="path-3"/> -<rect x="276.001" y="287.773" width="91.3175" height="26.7615" rx="1.52054" stroke-width="0.608215" class="rect-6"/> -<path d="M26.3856 262.739C26.3856 263.356 26.1623 263.841 25.7156 264.193C25.269 264.544 24.6529 264.72 23.8672 264.72C23.0816 264.72 22.4386 264.598 21.9381 264.354V263.28C22.2548 263.429 22.5906 263.546 22.9454 263.632C23.3034 263.717 23.636 263.76 23.9433 263.76C24.3931 263.76 24.7241 263.675 24.9364 263.504C25.1518 263.333 25.2595 263.103 25.2595 262.815C25.2595 262.555 25.1613 262.335 24.9649 262.154C24.7685 261.974 24.363 261.76 23.7484 261.513C23.1149 261.256 22.6682 260.963 22.4085 260.634C22.1487 260.304 22.0188 259.908 22.0188 259.446C22.0188 258.866 22.2247 258.41 22.6366 258.077C23.0484 257.745 23.6011 257.578 24.2949 257.578C24.9601 257.578 25.6222 257.724 26.2811 258.015L25.92 258.942C25.3022 258.682 24.7511 258.552 24.2664 258.552C23.8989 258.552 23.6202 258.633 23.4301 258.795C23.24 258.953 23.145 259.164 23.145 259.427C23.145 259.607 23.183 259.762 23.259 259.892C23.3351 260.019 23.4602 260.139 23.6344 260.253C23.8086 260.367 24.1222 260.518 24.5752 260.705C25.0853 260.917 25.4591 261.115 25.6966 261.299C25.9342 261.483 26.1084 261.69 26.2193 261.921C26.3302 262.153 26.3856 262.425 26.3856 262.739ZM29.5693 263.817C29.8417 263.817 30.1141 263.774 30.3865 263.689V264.53C30.263 264.584 30.103 264.628 29.9066 264.663C29.7134 264.701 29.5122 264.72 29.3032 264.72C28.2451 264.72 27.7161 264.163 27.7161 263.047V260.215H26.9986V259.721L27.7684 259.313L28.1485 258.201H28.8375V259.37H30.3343V260.215H28.8375V263.028C28.8375 263.298 28.904 263.497 29.0371 263.627C29.1733 263.754 29.3507 263.817 29.5693 263.817ZM34.7296 264.625L34.5062 263.893H34.4682C34.2148 264.213 33.9598 264.432 33.7032 264.549C33.4466 264.663 33.1172 264.72 32.7149 264.72C32.1985 264.72 31.7946 264.581 31.5032 264.302C31.2149 264.023 31.0708 263.629 31.0708 263.119C31.0708 262.577 31.2719 262.168 31.6742 261.893C32.0766 261.617 32.6895 261.467 33.5131 261.441L34.4207 261.413V261.133C34.4207 260.797 34.3415 260.546 34.1831 260.382C34.0279 260.214 33.7856 260.13 33.4561 260.13C33.1869 260.13 32.9287 260.17 32.6816 260.249C32.4345 260.328 32.1969 260.421 31.9689 260.529L31.6077 259.731C31.8928 259.582 32.2049 259.469 32.5438 259.393C32.8828 259.314 33.2027 259.275 33.5036 259.275C34.172 259.275 34.6757 259.42 35.0147 259.712C35.3568 260.003 35.5279 260.461 35.5279 261.085V264.625H34.7296ZM33.0665 263.865C33.472 263.865 33.7967 263.752 34.0406 263.527C34.2877 263.299 34.4112 262.981 34.4112 262.572V262.116L33.7365 262.145C33.2106 262.164 32.8273 262.252 32.5866 262.411C32.349 262.566 32.2302 262.805 32.2302 263.128C32.2302 263.363 32.2999 263.545 32.4393 263.675C32.5787 263.801 32.7877 263.865 33.0665 263.865ZM38.165 261.85L38.797 261.061L40.3841 259.37H41.6718L39.5573 261.627L41.8048 264.625H40.4934L38.8065 262.32L38.1936 262.824V264.625H37.0864V257.231H38.1936V260.838L38.1365 261.85H38.165ZM44.9504 264.72C44.1331 264.72 43.4933 264.482 43.0308 264.007C42.5714 263.529 42.3418 262.872 42.3418 262.035C42.3418 261.177 42.5556 260.502 42.9832 260.011C43.4109 259.52 43.9985 259.275 44.7461 259.275C45.4399 259.275 45.9879 259.485 46.3902 259.907C46.7925 260.328 46.9937 260.908 46.9937 261.646V262.249H43.4917C43.5075 262.759 43.6453 263.152 43.9051 263.428C44.1648 263.7 44.5307 263.836 45.0027 263.836C45.3131 263.836 45.6014 263.808 45.8675 263.751C46.1368 263.691 46.425 263.592 46.7323 263.456V264.364C46.4599 264.494 46.1843 264.585 45.9055 264.639C45.6268 264.693 45.3084 264.72 44.9504 264.72ZM44.7461 260.12C44.3913 260.12 44.1062 260.233 43.8908 260.458C43.6786 260.683 43.5519 261.011 43.5107 261.441H45.896C45.8897 261.007 45.7851 260.68 45.5824 260.458C45.3797 260.233 45.1009 260.12 44.7461 260.12ZM55.5087 259.778C55.5087 260.504 55.2711 261.06 54.7959 261.446C54.3207 261.833 53.6444 262.026 52.7669 262.026H52.0447V264.625H50.909V257.678H52.9095C53.7775 257.678 54.4269 257.855 54.8577 258.21C55.2917 258.565 55.5087 259.088 55.5087 259.778ZM52.0447 261.071H52.6482C53.231 261.071 53.6587 260.969 53.9311 260.767C54.2035 260.564 54.3398 260.247 54.3398 259.816C54.3398 259.417 54.2178 259.119 53.9739 258.923C53.73 258.727 53.3498 258.628 52.8335 258.628H52.0447V261.071ZM62.6837 264.625H61.2915L57.875 259.089H57.837L57.8607 259.398C57.9051 259.987 57.9273 260.526 57.9273 261.014V264.625H56.8962V257.678H58.2741L61.6811 263.185H61.7096C61.7033 263.112 61.6906 262.848 61.6716 262.392C61.6526 261.932 61.6431 261.574 61.6431 261.318V257.678H62.6837V264.625ZM69.8207 264.625H68.5045L66.3235 261.479L65.6535 262.026V264.625H64.5179V257.678H65.6535V260.995C65.9639 260.615 66.2728 260.249 66.5801 259.897L68.457 257.678H69.7494C68.5362 259.104 67.6666 260.119 67.1408 260.724L69.8207 264.625Z" class="path-4"/> -<path d="M75.0714 264.069C75.2108 264.069 75.3454 264.06 75.4753 264.041C75.6051 264.018 75.7081 263.996 75.7841 263.974V264.577C75.6986 264.619 75.5719 264.652 75.404 264.677C75.2393 264.706 75.0904 264.72 74.9573 264.72C73.95 264.72 73.4463 264.189 73.4463 263.128V260.03H72.7003V259.65L73.4463 259.322L73.7789 258.21H74.2351V259.417H75.7461V260.03H74.2351V263.095C74.2351 263.409 74.3095 263.649 74.4584 263.817C74.6073 263.985 74.8116 264.069 75.0714 264.069ZM81.3246 262.016C81.3246 262.865 81.1108 263.529 80.6831 264.007C80.2554 264.482 79.6647 264.72 78.9107 264.72C78.4451 264.72 78.0317 264.611 77.6705 264.392C77.3094 264.174 77.0306 263.86 76.8342 263.451C76.6378 263.043 76.5396 262.564 76.5396 262.016C76.5396 261.167 76.7519 260.507 77.1764 260.035C77.6008 259.56 78.1901 259.322 78.944 259.322C79.6726 259.322 80.2507 259.564 80.6783 260.049C81.1092 260.534 81.3246 261.19 81.3246 262.016ZM77.3569 262.016C77.3569 262.682 77.49 263.188 77.7561 263.537C78.0222 263.885 78.4134 264.06 78.9297 264.06C79.4461 264.06 79.8373 263.887 80.1034 263.542C80.3727 263.193 80.5073 262.685 80.5073 262.016C80.5073 261.354 80.3727 260.852 80.1034 260.51C79.8373 260.165 79.4429 259.992 78.9202 259.992C78.4039 259.992 78.0142 260.162 77.7513 260.501C77.4884 260.839 77.3569 261.345 77.3569 262.016ZM84.608 266.963C84.307 266.963 84.0631 266.923 83.8762 266.844V266.203C84.0948 266.266 84.3102 266.298 84.5225 266.298C84.7695 266.298 84.9501 266.229 85.0641 266.093C85.1814 265.96 85.24 265.756 85.24 265.48V259.417H86.0287V265.423C86.0287 266.45 85.5552 266.963 84.608 266.963ZM85.1734 258.006C85.1734 257.825 85.2178 257.694 85.3065 257.612C85.3952 257.526 85.5061 257.483 85.6391 257.483C85.7658 257.483 85.8751 257.526 85.967 257.612C86.0588 257.697 86.1048 257.829 86.1048 258.006C86.1048 258.183 86.0588 258.316 85.967 258.405C85.8751 258.491 85.7658 258.533 85.6391 258.533C85.5061 258.533 85.3952 258.491 85.3065 258.405C85.2178 258.316 85.1734 258.183 85.1734 258.006ZM92.1964 262.016C92.1964 262.865 91.9826 263.529 91.5549 264.007C91.1273 264.482 90.5365 264.72 89.7826 264.72C89.3169 264.72 88.9035 264.611 88.5424 264.392C88.1812 264.174 87.9025 263.86 87.7061 263.451C87.5097 263.043 87.4115 262.564 87.4115 262.016C87.4115 261.167 87.6237 260.507 88.0482 260.035C88.4727 259.56 89.0619 259.322 89.8158 259.322C90.5444 259.322 91.1225 259.564 91.5502 260.049C91.981 260.534 92.1964 261.19 92.1964 262.016ZM88.2288 262.016C88.2288 262.682 88.3618 263.188 88.6279 263.537C88.894 263.885 89.2852 264.06 89.8016 264.06C90.3179 264.06 90.7091 263.887 90.9752 263.542C91.2445 263.193 91.3791 262.685 91.3791 262.016C91.3791 261.354 91.2445 260.852 90.9752 260.51C90.7091 260.165 90.3148 259.992 89.7921 259.992C89.2757 259.992 88.8861 260.162 88.6232 260.501C88.3602 260.839 88.2288 261.345 88.2288 262.016ZM94.3727 264.625H93.5839V259.417H94.3727V264.625ZM93.5174 258.006C93.5174 257.825 93.5617 257.694 93.6504 257.612C93.7391 257.526 93.85 257.483 93.983 257.483C94.1098 257.483 94.219 257.526 94.3109 257.612C94.4028 257.697 94.4487 257.829 94.4487 258.006C94.4487 258.183 94.4028 258.316 94.3109 258.405C94.219 258.491 94.1098 258.533 93.983 258.533C93.85 258.533 93.7391 258.491 93.6504 258.405C93.5617 258.316 93.5174 258.183 93.5174 258.006ZM99.609 264.625V261.256C99.609 260.832 99.5124 260.515 99.3192 260.306C99.1259 260.097 98.8234 259.992 98.4116 259.992C97.8668 259.992 97.4676 260.139 97.2142 260.434C96.9608 260.729 96.8341 261.215 96.8341 261.893V264.625H96.0453V259.417H96.6868L96.815 260.13H96.8531C97.0146 259.873 97.2411 259.675 97.5326 259.536C97.824 259.393 98.1487 259.322 98.5066 259.322C99.1339 259.322 99.6059 259.474 99.9226 259.778C100.239 260.079 100.398 260.562 100.398 261.228V264.625H99.609ZM106.233 264.069C106.372 264.069 106.507 264.06 106.637 264.041C106.767 264.018 106.87 263.996 106.946 263.974V264.577C106.86 264.619 106.733 264.652 106.565 264.677C106.401 264.706 106.252 264.72 106.119 264.72C105.111 264.72 104.608 264.189 104.608 263.128V260.03H103.862V259.65L104.608 259.322L104.94 258.21H105.397V259.417H106.908V260.03H105.397V263.095C105.397 263.409 105.471 263.649 105.62 263.817C105.769 263.985 105.973 264.069 106.233 264.069ZM111.555 264.625V261.256C111.555 260.832 111.458 260.515 111.265 260.306C111.072 260.097 110.769 259.992 110.357 259.992C109.809 259.992 109.409 260.141 109.155 260.439C108.905 260.737 108.78 261.224 108.78 261.902V264.625H107.991V257.231H108.78V259.469C108.78 259.739 108.767 259.962 108.742 260.139H108.789C108.945 259.889 109.165 259.693 109.45 259.55C109.738 259.404 110.066 259.332 110.433 259.332C111.07 259.332 111.547 259.484 111.864 259.788C112.184 260.089 112.344 260.569 112.344 261.228V264.625H111.555ZM116.169 264.72C115.399 264.72 114.791 264.486 114.344 264.017C113.901 263.548 113.679 262.897 113.679 262.064C113.679 261.224 113.885 260.558 114.296 260.063C114.711 259.569 115.267 259.322 115.964 259.322C116.617 259.322 117.133 259.538 117.513 259.968C117.893 260.396 118.084 260.961 118.084 261.665V262.164H114.496C114.512 262.775 114.666 263.239 114.957 263.556C115.252 263.873 115.665 264.031 116.197 264.031C116.758 264.031 117.312 263.914 117.86 263.679V264.383C117.581 264.503 117.317 264.589 117.067 264.639C116.82 264.693 116.52 264.72 116.169 264.72ZM115.955 259.983C115.537 259.983 115.202 260.119 114.952 260.391C114.705 260.664 114.559 261.041 114.515 261.522H117.238C117.238 261.025 117.127 260.645 116.905 260.382C116.683 260.116 116.367 259.983 115.955 259.983ZM124.218 264.625H123.41V258.396H121.21V257.678H126.418V258.396H124.218V264.625ZM131.844 262.016C131.844 262.865 131.631 263.529 131.203 264.007C130.775 264.482 130.185 264.72 129.431 264.72C128.965 264.72 128.552 264.611 128.19 264.392C127.829 264.174 127.55 263.86 127.354 263.451C127.158 263.043 127.059 262.564 127.059 262.016C127.059 261.167 127.272 260.507 127.696 260.035C128.121 259.56 128.71 259.322 129.464 259.322C130.192 259.322 130.771 259.564 131.198 260.049C131.629 260.534 131.844 261.19 131.844 262.016ZM127.877 262.016C127.877 262.682 128.01 263.188 128.276 263.537C128.542 263.885 128.933 264.06 129.45 264.06C129.966 264.06 130.357 263.887 130.623 263.542C130.893 263.193 131.027 262.685 131.027 262.016C131.027 261.354 130.893 260.852 130.623 260.51C130.357 260.165 129.963 259.992 129.44 259.992C128.924 259.992 128.534 260.162 128.271 260.501C128.008 260.839 127.877 261.345 127.877 262.016ZM134.011 261.959C134.147 261.766 134.355 261.513 134.634 261.199L136.316 259.417H137.252L135.142 261.636L137.399 264.625H136.444L134.605 262.164L134.011 262.677V264.625H133.232V257.231H134.011V261.152C134.011 261.326 133.999 261.595 133.973 261.959H134.011ZM140.545 264.72C139.775 264.72 139.167 264.486 138.72 264.017C138.277 263.548 138.055 262.897 138.055 262.064C138.055 261.224 138.261 260.558 138.673 260.063C139.088 259.569 139.644 259.322 140.34 259.322C140.993 259.322 141.509 259.538 141.889 259.968C142.27 260.396 142.46 260.961 142.46 261.665V262.164H138.872C138.888 262.775 139.042 263.239 139.333 263.556C139.628 263.873 140.041 264.031 140.573 264.031C141.134 264.031 141.688 263.914 142.236 263.679V264.383C141.958 264.503 141.693 264.589 141.443 264.639C141.196 264.693 140.896 264.72 140.545 264.72ZM140.331 259.983C139.913 259.983 139.579 260.119 139.328 260.391C139.081 260.664 138.936 261.041 138.891 261.522H141.614C141.614 261.025 141.503 260.645 141.281 260.382C141.06 260.116 140.743 259.983 140.331 259.983ZM147.373 264.625V261.256C147.373 260.832 147.276 260.515 147.083 260.306C146.89 260.097 146.587 259.992 146.175 259.992C145.631 259.992 145.231 260.139 144.978 260.434C144.725 260.729 144.598 261.215 144.598 261.893V264.625H143.809V259.417H144.451L144.579 260.13H144.617C144.778 259.873 145.005 259.675 145.296 259.536C145.588 259.393 145.913 259.322 146.271 259.322C146.898 259.322 147.37 259.474 147.687 259.778C148.003 260.079 148.162 260.562 148.162 261.228V264.625H147.373ZM152.433 264.625V257.678H153.241V263.893H156.306V264.625H152.433ZM158.159 264.625H157.37V259.417H158.159V264.625ZM157.304 258.006C157.304 257.825 157.348 257.694 157.437 257.612C157.526 257.526 157.637 257.483 157.77 257.483C157.896 257.483 158.006 257.526 158.097 257.612C158.189 257.697 158.235 257.829 158.235 258.006C158.235 258.183 158.189 258.316 158.097 258.405C158.006 258.491 157.896 258.533 157.77 258.533C157.637 258.533 157.526 258.491 157.437 258.405C157.348 258.316 157.304 258.183 157.304 258.006ZM163.191 263.204C163.191 263.689 163.011 264.063 162.65 264.326C162.288 264.589 161.782 264.72 161.129 264.72C160.438 264.72 159.9 264.611 159.513 264.392V263.66C159.764 263.787 160.031 263.887 160.316 263.96C160.605 264.033 160.882 264.069 161.148 264.069C161.56 264.069 161.877 264.004 162.098 263.874C162.32 263.741 162.431 263.54 162.431 263.271C162.431 263.068 162.342 262.895 162.165 262.753C161.991 262.607 161.649 262.436 161.139 262.24C160.654 262.059 160.309 261.902 160.103 261.769C159.9 261.633 159.748 261.479 159.646 261.308C159.548 261.137 159.499 260.933 159.499 260.695C159.499 260.271 159.672 259.937 160.017 259.693C160.362 259.446 160.836 259.322 161.438 259.322C161.999 259.322 162.547 259.436 163.082 259.664L162.802 260.306C162.279 260.09 161.805 259.983 161.381 259.983C161.007 259.983 160.725 260.041 160.535 260.158C160.345 260.276 160.25 260.437 160.25 260.643C160.25 260.782 160.285 260.901 160.354 260.999C160.427 261.098 160.543 261.191 160.701 261.28C160.86 261.369 161.164 261.497 161.614 261.665C162.231 261.89 162.648 262.116 162.863 262.344C163.082 262.572 163.191 262.859 163.191 263.204ZM166.161 264.069C166.3 264.069 166.435 264.06 166.565 264.041C166.695 264.018 166.798 263.996 166.874 263.974V264.577C166.788 264.619 166.662 264.652 166.494 264.677C166.329 264.706 166.18 264.72 166.047 264.72C165.04 264.72 164.536 264.189 164.536 263.128V260.03H163.79V259.65L164.536 259.322L164.869 258.21H165.325V259.417H166.836V260.03H165.325V263.095C165.325 263.409 165.399 263.649 165.548 263.817C165.697 263.985 165.901 264.069 166.161 264.069ZM168.708 264.625H167.919V259.417H168.708V264.625ZM167.853 258.006C167.853 257.825 167.897 257.694 167.986 257.612C168.074 257.526 168.185 257.483 168.318 257.483C168.445 257.483 168.554 257.526 168.646 257.612C168.738 257.697 168.784 257.829 168.784 258.006C168.784 258.183 168.738 258.316 168.646 258.405C168.554 258.491 168.445 258.533 168.318 258.533C168.185 258.533 168.074 258.491 167.986 258.405C167.897 258.316 167.853 258.183 167.853 258.006ZM173.944 264.625V261.256C173.944 260.832 173.848 260.515 173.654 260.306C173.461 260.097 173.159 259.992 172.747 259.992C172.202 259.992 171.803 260.139 171.549 260.434C171.296 260.729 171.169 261.215 171.169 261.893V264.625H170.381V259.417H171.022L171.15 260.13H171.188C171.35 259.873 171.576 259.675 171.868 259.536C172.159 259.393 172.484 259.322 172.842 259.322C173.469 259.322 173.941 259.474 174.258 259.778C174.575 260.079 174.733 260.562 174.733 261.228V264.625H173.944ZM180.62 259.417V259.916L179.656 260.03C179.745 260.141 179.824 260.287 179.893 260.467C179.963 260.645 179.998 260.846 179.998 261.071C179.998 261.581 179.824 261.988 179.475 262.292C179.127 262.596 178.648 262.748 178.04 262.748C177.885 262.748 177.739 262.735 177.603 262.71C177.267 262.887 177.099 263.111 177.099 263.38C177.099 263.523 177.158 263.629 177.275 263.698C177.392 263.765 177.594 263.798 177.879 263.798H178.801C179.364 263.798 179.797 263.917 180.098 264.155C180.402 264.392 180.554 264.737 180.554 265.19C180.554 265.767 180.323 266.206 179.86 266.507C179.398 266.811 178.723 266.963 177.836 266.963C177.155 266.963 176.629 266.836 176.258 266.583C175.891 266.329 175.707 265.971 175.707 265.509C175.707 265.192 175.809 264.918 176.011 264.687C176.214 264.456 176.499 264.299 176.867 264.216C176.734 264.156 176.621 264.063 176.529 263.936C176.441 263.809 176.396 263.662 176.396 263.494C176.396 263.304 176.447 263.138 176.548 262.995C176.65 262.853 176.81 262.715 177.028 262.582C176.759 262.471 176.539 262.282 176.368 262.016C176.2 261.75 176.116 261.446 176.116 261.104C176.116 260.534 176.287 260.095 176.629 259.788C176.971 259.477 177.456 259.322 178.083 259.322C178.355 259.322 178.601 259.354 178.82 259.417H180.62ZM176.467 265.499C176.467 265.781 176.586 265.995 176.824 266.141C177.061 266.287 177.402 266.359 177.845 266.359C178.507 266.359 178.997 266.26 179.314 266.06C179.634 265.864 179.794 265.596 179.794 265.257C179.794 264.975 179.706 264.779 179.532 264.668C179.358 264.56 179.03 264.506 178.549 264.506H177.603C177.245 264.506 176.966 264.592 176.767 264.763C176.567 264.934 176.467 265.179 176.467 265.499ZM176.895 261.085C176.895 261.449 176.998 261.725 177.204 261.912C177.41 262.099 177.697 262.192 178.064 262.192C178.834 262.192 179.219 261.818 179.219 261.071C179.219 260.288 178.829 259.897 178.05 259.897C177.679 259.897 177.394 259.997 177.194 260.196C176.995 260.396 176.895 260.692 176.895 261.085ZM186.299 264.72C185.545 264.72 184.96 264.489 184.545 264.026C184.133 263.561 183.928 262.903 183.928 262.054C183.928 261.183 184.137 260.51 184.555 260.035C184.976 259.56 185.575 259.322 186.351 259.322C186.601 259.322 186.851 259.349 187.102 259.403C187.352 259.457 187.548 259.52 187.691 259.593L187.449 260.263C187.274 260.193 187.084 260.136 186.878 260.092C186.672 260.044 186.49 260.021 186.332 260.021C185.274 260.021 184.745 260.695 184.745 262.045C184.745 262.685 184.873 263.176 185.13 263.518C185.39 263.86 185.773 264.031 186.28 264.031C186.714 264.031 187.159 263.938 187.615 263.751V264.449C187.266 264.63 186.828 264.72 186.299 264.72ZM193.35 262.016C193.35 262.865 193.136 263.529 192.709 264.007C192.281 264.482 191.69 264.72 190.936 264.72C190.471 264.72 190.057 264.611 189.696 264.392C189.335 264.174 189.056 263.86 188.86 263.451C188.663 263.043 188.565 262.564 188.565 262.016C188.565 261.167 188.777 260.507 189.202 260.035C189.626 259.56 190.216 259.322 190.97 259.322C191.698 259.322 192.276 259.564 192.704 260.049C193.135 260.534 193.35 261.19 193.35 262.016ZM189.383 262.016C189.383 262.682 189.516 263.188 189.782 263.537C190.048 263.885 190.439 264.06 190.955 264.06C191.472 264.06 191.863 263.887 192.129 263.542C192.398 263.193 192.533 262.685 192.533 262.016C192.533 261.354 192.398 260.852 192.129 260.51C191.863 260.165 191.468 259.992 190.946 259.992C190.429 259.992 190.04 260.162 189.777 260.501C189.514 260.839 189.383 261.345 189.383 262.016ZM195.479 259.417V262.796C195.479 263.22 195.576 263.537 195.769 263.746C195.962 263.955 196.265 264.06 196.676 264.06C197.221 264.06 197.619 263.911 197.869 263.613C198.122 263.315 198.249 262.829 198.249 262.154V259.417H199.038V264.625H198.387L198.273 263.927H198.23C198.069 264.183 197.844 264.379 197.555 264.516C197.27 264.652 196.944 264.72 196.577 264.72C195.943 264.72 195.468 264.57 195.151 264.269C194.837 263.968 194.681 263.486 194.681 262.824V259.417H195.479ZM203.091 259.322C203.322 259.322 203.53 259.341 203.714 259.379L203.604 260.111C203.389 260.063 203.199 260.04 203.034 260.04C202.613 260.04 202.252 260.211 201.951 260.553C201.653 260.895 201.504 261.321 201.504 261.831V264.625H200.715V259.417H201.366L201.457 260.382H201.495C201.688 260.043 201.921 259.781 202.193 259.598C202.465 259.414 202.765 259.322 203.091 259.322ZM206.37 264.069C206.509 264.069 206.644 264.06 206.774 264.041C206.904 264.018 207.006 263.996 207.083 263.974V264.577C206.997 264.619 206.87 264.652 206.702 264.677C206.538 264.706 206.389 264.72 206.256 264.72C205.248 264.72 204.745 264.189 204.745 263.128V260.03H203.999V259.65L204.745 259.322L205.077 258.21H205.533V259.417H207.044V260.03H205.533V263.095C205.533 263.409 205.608 263.649 205.757 263.817C205.906 263.985 206.11 264.069 206.37 264.069Z" class="path-5"/> -<g clip-path="url(#clip0_13917_210808)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M23.9631 336.738L28.2445 336.93L29.9779 340.782L27.5324 344.303L23.2277 344.027L21.4629 339.853L23.9631 336.738ZM27.1019 338.959L23.999 340.315L26.6518 342.366L27.1019 338.959ZM26.7427 338.279L24.2629 337.211L23.742 339.457L26.7427 338.279ZM26.1142 342.882L23.4192 340.958L23.4844 343.566L26.1142 342.882ZM29.5474 340.773L27.7109 338.909L27.2262 342.494L29.5474 340.773ZM26.746 343.302L24.4731 343.896L27.146 344.067L26.746 343.302ZM29.1885 341.619L27.199 343.102L27.5943 343.874L29.1885 341.619ZM28.2475 337.468L27.861 338.261L29.2994 339.724L28.2475 337.468ZM27.766 337.088L25.2402 336.986L27.3237 337.897L27.766 337.088ZM23.5942 337.455L21.8251 339.69L23.0079 339.94L23.5942 337.455ZM22.9366 340.378L21.748 340.127L22.9882 343.049L22.9366 340.378Z" class="path-6"/> -</g> -<path d="M38.3693 343.465L36.307 338.076H36.2738C36.3126 338.503 36.332 339.011 36.332 339.598V343.465H35.6792V337.386H36.7436L38.6686 342.4H38.7019L40.6435 337.386H41.6996V343.465H40.9928V339.548C40.9928 339.099 41.0122 338.611 41.051 338.085H41.0177L38.9389 343.465H38.3693ZM42.5436 338.908H43.2837L44.2815 341.507C44.5005 342.1 44.6363 342.528 44.689 342.791H44.7222C44.7583 342.65 44.8331 342.409 44.9468 342.068C45.0632 341.724 45.4401 340.671 46.0777 338.908H46.8177L44.8595 344.097C44.6654 344.61 44.4381 344.973 44.1776 345.186C43.9198 345.402 43.6024 345.51 43.2255 345.51C43.0148 345.51 42.8069 345.487 42.6018 345.44V344.887C42.7543 344.92 42.9247 344.937 43.1132 344.937C43.5872 344.937 43.9253 344.671 44.1277 344.138L44.3813 343.49L42.5436 338.908ZM53.3038 341.847C53.3038 342.382 53.1098 342.8 52.7217 343.099C52.3336 343.398 51.807 343.548 51.1418 343.548C50.4211 343.548 49.8667 343.455 49.4787 343.269V342.588C49.7281 342.693 49.9998 342.776 50.2936 342.837C50.5874 342.898 50.8784 342.928 51.1667 342.928C51.6379 342.928 51.9927 342.84 52.2311 342.662C52.4695 342.482 52.5886 342.233 52.5886 341.914C52.5886 341.703 52.5457 341.532 52.4598 341.398C52.3766 341.263 52.2352 341.138 52.0357 341.024C51.8389 340.911 51.5381 340.782 51.1334 340.638C50.568 340.435 50.1633 340.195 49.9194 339.918C49.6782 339.641 49.5577 339.279 49.5577 338.833C49.5577 338.365 49.7337 337.992 50.0857 337.715C50.4377 337.438 50.9034 337.299 51.4827 337.299C52.087 337.299 52.6427 337.41 53.1499 337.632L52.9296 338.247C52.4279 338.036 51.94 337.931 51.4661 337.931C51.0919 337.931 50.7994 338.011 50.5888 338.172C50.3781 338.333 50.2728 338.556 50.2728 338.841C50.2728 339.052 50.3116 339.225 50.3892 339.361C50.4668 339.494 50.5971 339.618 50.78 339.731C50.9658 339.842 51.2485 339.965 51.6282 340.101C52.2657 340.329 52.7037 340.572 52.9421 340.833C53.1832 341.094 53.3038 341.432 53.3038 341.847ZM55.9148 342.978C56.0368 342.978 56.1546 342.97 56.2682 342.953C56.3819 342.934 56.472 342.915 56.5385 342.895V343.423C56.4636 343.459 56.3528 343.488 56.2059 343.511C56.0617 343.536 55.9315 343.548 55.815 343.548C54.9336 343.548 54.4929 343.084 54.4929 342.155V339.444H53.8401V339.112L54.4929 338.825L54.7839 337.852H55.1831V338.908H56.5052V339.444H55.1831V342.126C55.1831 342.4 55.2482 342.611 55.3785 342.758C55.5088 342.905 55.6875 342.978 55.9148 342.978ZM60.2555 343.465L60.1183 342.816H60.085C59.8577 343.102 59.6304 343.296 59.4032 343.398C59.1786 343.498 58.8973 343.548 58.5591 343.548C58.1073 343.548 57.7525 343.432 57.4948 343.199C57.2398 342.966 57.1122 342.635 57.1122 342.205C57.1122 341.285 57.8482 340.803 59.32 340.758L60.0933 340.733V340.45C60.0933 340.093 60.0157 339.83 59.8605 339.661C59.7081 339.489 59.4627 339.403 59.1246 339.403C58.7448 339.403 58.3152 339.519 57.8357 339.752L57.6236 339.224C57.8482 339.102 58.0935 339.006 58.3596 338.937C58.6284 338.868 58.8973 338.833 59.1662 338.833C59.7094 338.833 60.1113 338.954 60.3719 339.195C60.6352 339.436 60.7669 339.823 60.7669 340.355V343.465H60.2555ZM58.6963 342.978C59.126 342.978 59.4627 342.861 59.7067 342.625C59.9534 342.389 60.0767 342.06 60.0767 341.635V341.224L59.3865 341.253C58.8377 341.272 58.4413 341.358 58.1974 341.511C57.9563 341.66 57.8357 341.895 57.8357 342.213C57.8357 342.463 57.9105 342.653 58.0602 342.783C58.2127 342.913 58.4247 342.978 58.6963 342.978ZM62.8748 341.132C62.994 340.963 63.1756 340.742 63.4195 340.467L64.8913 338.908H65.7104L63.8644 340.85L65.8393 343.465H65.0036L63.3946 341.311L62.8748 341.76V343.465H62.193V336.995H62.8748V340.426C62.8748 340.578 62.8638 340.814 62.8416 341.132H62.8748ZM68.5917 343.548C67.9182 343.548 67.386 343.343 66.9951 342.933C66.6071 342.522 66.4131 341.953 66.4131 341.224C66.4131 340.489 66.5932 339.906 66.9536 339.473C67.3167 339.041 67.8031 338.825 68.4129 338.825C68.9839 338.825 69.4357 339.013 69.7683 339.39C70.101 339.764 70.2673 340.259 70.2673 340.875V341.311H67.1282C67.1421 341.846 67.2765 342.252 67.5315 342.529C67.7893 342.807 68.151 342.945 68.6167 342.945C69.1073 342.945 69.5923 342.843 70.0719 342.637V343.253C69.8279 343.358 69.5965 343.433 69.3775 343.477C69.1613 343.524 68.8994 343.548 68.5917 343.548ZM68.4046 339.403C68.0387 339.403 67.7463 339.522 67.5273 339.76C67.3111 339.999 67.1836 340.329 67.1448 340.75H69.5272C69.5272 340.315 69.4302 339.982 69.2362 339.752C69.0421 339.519 68.7649 339.403 68.4046 339.403ZM71.3483 343.024C71.3483 342.838 71.3899 342.698 71.473 342.604C71.5589 342.507 71.6809 342.459 71.8389 342.459C71.9997 342.459 72.1244 342.507 72.2131 342.604C72.3046 342.698 72.3503 342.838 72.3503 343.024C72.3503 343.204 72.3046 343.343 72.2131 343.44C72.1216 343.537 71.9969 343.585 71.8389 343.585C71.6975 343.585 71.5797 343.542 71.4855 343.457C71.394 343.368 71.3483 343.224 71.3483 343.024ZM71.3483 339.353C71.3483 338.979 71.5118 338.792 71.8389 338.792C72.1798 338.792 72.3503 338.979 72.3503 339.353C72.3503 339.533 72.3046 339.672 72.2131 339.769C72.1216 339.866 71.9969 339.914 71.8389 339.914C71.6975 339.914 71.5797 339.871 71.4855 339.785C71.394 339.697 71.3483 339.552 71.3483 339.353Z" class="path-7"/> -<path d="M82.7849 343.465H81.8079V339.54C81.8079 339.072 81.819 338.7 81.8411 338.426C81.7774 338.492 81.6984 338.566 81.6041 338.646C81.5127 338.726 81.2022 338.981 80.6728 339.411L80.1822 338.792L81.97 337.386H82.7849V343.465ZM88.9009 340.426C88.9009 341.482 88.7305 342.266 88.3895 342.779C88.0514 343.292 87.5331 343.548 86.8346 343.548C86.1582 343.548 85.6455 343.283 85.2962 342.754C84.947 342.224 84.7723 341.448 84.7723 340.426C84.7723 339.353 84.9414 338.563 85.2796 338.056C85.6205 337.546 86.1388 337.291 86.8346 337.291C87.5137 337.291 88.0278 337.557 88.3771 338.089C88.7263 338.621 88.9009 339.4 88.9009 340.426ZM85.7619 340.426C85.7619 341.254 85.8464 341.846 86.0155 342.201C86.1873 342.556 86.4604 342.733 86.8346 342.733C87.2088 342.733 87.4818 342.553 87.6536 342.193C87.8283 341.832 87.9156 341.243 87.9156 340.426C87.9156 339.611 87.8283 339.022 87.6536 338.659C87.4818 338.293 87.2088 338.11 86.8346 338.11C86.4604 338.11 86.1873 338.288 86.0155 338.646C85.8464 339.004 85.7619 339.597 85.7619 340.426ZM90.984 342.571C90.8509 343.086 90.607 343.75 90.2522 344.562H89.5329C89.7242 343.814 89.8669 343.118 89.9612 342.475H90.9216L90.984 342.571ZM96.0439 340.426C96.0439 341.482 95.8734 342.266 95.5325 342.779C95.1943 343.292 94.676 343.548 93.9775 343.548C93.3012 343.548 92.7884 343.283 92.4392 342.754C92.0899 342.224 91.9153 341.448 91.9153 340.426C91.9153 339.353 92.0844 338.563 92.4225 338.056C92.7635 337.546 93.2818 337.291 93.9775 337.291C94.6566 337.291 95.1708 337.557 95.52 338.089C95.8693 338.621 96.0439 339.4 96.0439 340.426ZM92.9048 340.426C92.9048 341.254 92.9894 341.846 93.1584 342.201C93.3303 342.556 93.6033 342.733 93.9775 342.733C94.3517 342.733 94.6247 342.553 94.7966 342.193C94.9712 341.832 95.0585 341.243 95.0585 340.426C95.0585 339.611 94.9712 339.022 94.7966 338.659C94.6247 338.293 94.3517 338.11 93.9775 338.11C93.6033 338.11 93.3303 338.288 93.1584 338.646C92.9894 339.004 92.9048 339.597 92.9048 340.426ZM100.908 340.426C100.908 341.482 100.738 342.266 100.397 342.779C100.059 343.292 99.5405 343.548 98.8421 343.548C98.1657 343.548 97.6529 343.283 97.3037 342.754C96.9544 342.224 96.7798 341.448 96.7798 340.426C96.7798 339.353 96.9489 338.563 97.2871 338.056C97.628 337.546 98.1463 337.291 98.8421 337.291C99.5211 337.291 100.035 337.557 100.385 338.089C100.734 338.621 100.908 339.4 100.908 340.426ZM97.7694 340.426C97.7694 341.254 97.8539 341.846 98.023 342.201C98.1948 342.556 98.4679 342.733 98.8421 342.733C99.2162 342.733 99.4893 342.553 99.6611 342.193C99.8357 341.832 99.9231 341.243 99.9231 340.426C99.9231 339.611 99.8357 339.022 99.6611 338.659C99.4893 338.293 99.2162 338.11 98.8421 338.11C98.4679 338.11 98.1948 338.288 98.023 338.646C97.8539 339.004 97.7694 339.597 97.7694 340.426ZM105.773 340.426C105.773 341.482 105.603 342.266 105.262 342.779C104.923 343.292 104.405 343.548 103.707 343.548C103.03 343.548 102.517 343.283 102.168 342.754C101.819 342.224 101.644 341.448 101.644 340.426C101.644 339.353 101.813 338.563 102.152 338.056C102.493 337.546 103.011 337.291 103.707 337.291C104.386 337.291 104.9 337.557 105.249 338.089C105.598 338.621 105.773 339.4 105.773 340.426ZM102.634 340.426C102.634 341.254 102.718 341.846 102.888 342.201C103.059 342.556 103.332 342.733 103.707 342.733C104.081 342.733 104.354 342.553 104.526 342.193C104.7 341.832 104.788 341.243 104.788 340.426C104.788 339.611 104.7 339.022 104.526 338.659C104.354 338.293 104.081 338.11 103.707 338.11C103.332 338.11 103.059 338.288 102.888 338.646C102.718 339.004 102.634 339.597 102.634 340.426ZM113.182 339.224C113.182 339.859 112.974 340.345 112.558 340.683C112.143 341.021 111.551 341.191 110.783 341.191H110.151V343.465H109.157V337.386H110.908C111.667 337.386 112.235 337.541 112.612 337.852C112.992 338.162 113.182 338.62 113.182 339.224ZM110.151 340.355H110.679C111.189 340.355 111.563 340.266 111.802 340.089C112.04 339.911 112.159 339.634 112.159 339.257C112.159 338.908 112.053 338.647 111.839 338.476C111.626 338.304 111.293 338.218 110.841 338.218H110.151V340.355ZM119.46 343.465H118.242L115.253 338.621H115.219L115.24 338.891C115.279 339.407 115.298 339.878 115.298 340.305V343.465H114.396V337.386H115.602L118.583 342.205H118.608C118.602 342.141 118.591 341.91 118.575 341.511C118.558 341.109 118.55 340.796 118.55 340.571V337.386H119.46V343.465ZM125.705 343.465H124.553L122.645 340.712L122.059 341.191V343.465H121.065V337.386H122.059V340.288C122.33 339.956 122.601 339.636 122.87 339.328L124.512 337.386H125.643C124.581 338.634 123.82 339.522 123.36 340.051L125.705 343.465Z" class="path-8"/> -<g clip-path="url(#clip1_13917_210808)"> -<path d="M152.293 339.932H151.898V338.735C151.898 337.341 150.775 336.207 149.394 336.207C148.014 336.207 146.89 337.341 146.89 338.735V339.932H146.495C146.059 339.932 145.704 340.29 145.704 340.731V343.924C145.704 344.364 146.059 344.722 146.495 344.722H152.293C152.73 344.722 153.084 344.364 153.084 343.924V340.731C153.084 340.29 152.73 339.932 152.293 339.932ZM150.58 339.932H148.208V338.735C148.208 338.075 148.74 337.538 149.394 337.538C150.048 337.538 150.58 338.075 150.58 338.735V339.932Z" class="path-9"/> -</g> -<path d="M159.388 343.465V337.386H160.095V342.825H162.777V343.465H159.388ZM167.642 341.182C167.642 341.925 167.454 342.506 167.08 342.924C166.706 343.34 166.189 343.548 165.529 343.548C165.122 343.548 164.76 343.452 164.444 343.261C164.128 343.07 163.884 342.795 163.712 342.438C163.541 342.08 163.455 341.662 163.455 341.182C163.455 340.439 163.64 339.861 164.012 339.448C164.383 339.033 164.899 338.825 165.558 338.825C166.196 338.825 166.702 339.037 167.076 339.461C167.453 339.885 167.642 340.459 167.642 341.182ZM164.17 341.182C164.17 341.764 164.286 342.208 164.519 342.513C164.752 342.818 165.094 342.97 165.546 342.97C165.998 342.97 166.34 342.819 166.573 342.517C166.809 342.212 166.926 341.767 166.926 341.182C166.926 340.603 166.809 340.164 166.573 339.864C166.34 339.562 165.995 339.411 165.538 339.411C165.086 339.411 164.745 339.559 164.515 339.856C164.285 340.153 164.17 340.595 164.17 341.182ZM170.677 343.548C170.017 343.548 169.506 343.346 169.142 342.941C168.782 342.534 168.602 341.958 168.602 341.216C168.602 340.453 168.785 339.864 169.151 339.448C169.519 339.033 170.043 338.825 170.722 338.825C170.941 338.825 171.16 338.848 171.379 338.896C171.598 338.943 171.77 338.998 171.895 339.062L171.683 339.648C171.53 339.587 171.364 339.537 171.184 339.498C171.004 339.457 170.844 339.436 170.706 339.436C169.78 339.436 169.317 340.026 169.317 341.207C169.317 341.767 169.429 342.197 169.654 342.496C169.881 342.795 170.217 342.945 170.66 342.945C171.04 342.945 171.429 342.863 171.828 342.7V343.311C171.523 343.469 171.14 343.548 170.677 343.548ZM173.595 341.132C173.715 340.963 173.896 340.742 174.14 340.467L175.612 338.908H176.431L174.585 340.85L176.56 343.465H175.724L174.115 341.311L173.595 341.76V343.465H172.913V336.995H173.595V340.426C173.595 340.578 173.584 340.814 173.562 341.132H173.595ZM179.312 343.548C178.639 343.548 178.106 343.343 177.716 342.933C177.328 342.522 177.134 341.953 177.134 341.224C177.134 340.489 177.314 339.906 177.674 339.473C178.037 339.041 178.524 338.825 179.133 338.825C179.704 338.825 180.156 339.013 180.489 339.39C180.821 339.764 180.988 340.259 180.988 340.875V341.311H177.849C177.863 341.846 177.997 342.252 178.252 342.529C178.51 342.807 178.872 342.945 179.337 342.945C179.828 342.945 180.313 342.843 180.792 342.637V343.253C180.548 343.358 180.317 343.433 180.098 343.477C179.882 343.524 179.62 343.548 179.312 343.548ZM179.125 339.403C178.759 339.403 178.467 339.522 178.248 339.76C178.032 339.999 177.904 340.329 177.865 340.75H180.248C180.248 340.315 180.151 339.982 179.957 339.752C179.763 339.519 179.485 339.403 179.125 339.403ZM185.27 342.854H185.233C184.914 343.317 184.437 343.548 183.803 343.548C183.207 343.548 182.742 343.344 182.41 342.937C182.08 342.529 181.915 341.95 181.915 341.199C181.915 340.448 182.081 339.864 182.414 339.448C182.746 339.033 183.209 338.825 183.803 338.825C184.421 338.825 184.895 339.049 185.224 339.498H185.279L185.249 339.17L185.233 338.85V336.995H185.923V343.465H185.362L185.27 342.854ZM183.89 342.97C184.361 342.97 184.702 342.843 184.913 342.588C185.126 342.33 185.233 341.915 185.233 341.344V341.199C185.233 340.553 185.125 340.093 184.909 339.819C184.695 339.541 184.353 339.403 183.882 339.403C183.477 339.403 183.166 339.561 182.95 339.877C182.737 340.19 182.63 340.633 182.63 341.207C182.63 341.789 182.737 342.229 182.95 342.525C183.164 342.822 183.477 342.97 183.89 342.97ZM193.137 341.847C193.137 342.382 192.943 342.8 192.555 343.099C192.167 343.398 191.64 343.548 190.975 343.548C190.254 343.548 189.7 343.455 189.312 343.269V342.588C189.561 342.693 189.833 342.776 190.126 342.837C190.42 342.898 190.711 342.928 191 342.928C191.471 342.928 191.826 342.84 192.064 342.662C192.302 342.482 192.422 342.233 192.422 341.914C192.422 341.703 192.379 341.532 192.293 341.398C192.209 341.263 192.068 341.138 191.869 341.024C191.672 340.911 191.371 340.782 190.966 340.638C190.401 340.435 189.996 340.195 189.752 339.918C189.511 339.641 189.391 339.279 189.391 338.833C189.391 338.365 189.567 337.992 189.919 337.715C190.271 337.438 190.736 337.299 191.316 337.299C191.92 337.299 192.476 337.41 192.983 337.632L192.762 338.247C192.261 338.036 191.773 337.931 191.299 337.931C190.925 337.931 190.632 338.011 190.422 338.172C190.211 338.333 190.106 338.556 190.106 338.841C190.106 339.052 190.144 339.225 190.222 339.361C190.3 339.494 190.43 339.618 190.613 339.731C190.799 339.842 191.081 339.965 191.461 340.101C192.099 340.329 192.537 340.572 192.775 340.833C193.016 341.094 193.137 341.432 193.137 341.847ZM195.748 342.978C195.87 342.978 195.987 342.97 196.101 342.953C196.215 342.934 196.305 342.915 196.371 342.895V343.423C196.297 343.459 196.186 343.488 196.039 343.511C195.895 343.536 195.764 343.548 195.648 343.548C194.766 343.548 194.326 343.084 194.326 342.155V339.444H193.673V339.112L194.326 338.825L194.617 337.852H195.016V338.908H196.338V339.444H195.016V342.126C195.016 342.4 195.081 342.611 195.211 342.758C195.342 342.905 195.52 342.978 195.748 342.978ZM200.088 343.465L199.951 342.816H199.918C199.691 343.102 199.463 343.296 199.236 343.398C199.011 343.498 198.73 343.548 198.392 343.548C197.94 343.548 197.585 343.432 197.328 343.199C197.073 342.966 196.945 342.635 196.945 342.205C196.945 341.285 197.681 340.803 199.153 340.758L199.926 340.733V340.45C199.926 340.093 199.849 339.83 199.693 339.661C199.541 339.489 199.296 339.403 198.957 339.403C198.578 339.403 198.148 339.519 197.669 339.752L197.457 339.224C197.681 339.102 197.926 339.006 198.192 338.937C198.461 338.868 198.73 338.833 198.999 338.833C199.542 338.833 199.944 338.954 200.205 339.195C200.468 339.436 200.6 339.823 200.6 340.355V343.465H200.088ZM198.529 342.978C198.959 342.978 199.296 342.861 199.54 342.625C199.786 342.389 199.91 342.06 199.91 341.635V341.224L199.219 341.253C198.671 341.272 198.274 341.358 198.03 341.511C197.789 341.66 197.669 341.895 197.669 342.213C197.669 342.463 197.743 342.653 197.893 342.783C198.046 342.913 198.258 342.978 198.529 342.978ZM202.708 341.132C202.827 340.963 203.008 340.742 203.252 340.467L204.724 338.908H205.543L203.697 340.85L205.672 343.465H204.836L203.227 341.311L202.708 341.76V343.465H202.026V336.995H202.708V340.426C202.708 340.578 202.697 340.814 202.674 341.132H202.708ZM208.425 343.548C207.751 343.548 207.219 343.343 206.828 342.933C206.44 342.522 206.246 341.953 206.246 341.224C206.246 340.489 206.426 339.906 206.786 339.473C207.15 339.041 207.636 338.825 208.246 338.825C208.817 338.825 209.269 339.013 209.601 339.39C209.934 339.764 210.1 340.259 210.1 340.875V341.311H206.961C206.975 341.846 207.109 342.252 207.364 342.529C207.622 342.807 207.984 342.945 208.45 342.945C208.94 342.945 209.425 342.843 209.905 342.637V343.253C209.661 343.358 209.429 343.433 209.21 343.477C208.994 343.524 208.732 343.548 208.425 343.548ZM208.237 339.403C207.872 339.403 207.579 339.522 207.36 339.76C207.144 339.999 207.016 340.329 206.978 340.75H209.36C209.36 340.315 209.263 339.982 209.069 339.752C208.875 339.519 208.598 339.403 208.237 339.403ZM211.181 343.024C211.181 342.838 211.223 342.698 211.306 342.604C211.392 342.507 211.514 342.459 211.672 342.459C211.833 342.459 211.957 342.507 212.046 342.604C212.137 342.698 212.183 342.838 212.183 343.024C212.183 343.204 212.137 343.343 212.046 343.44C211.954 343.537 211.83 343.585 211.672 343.585C211.53 343.585 211.413 343.542 211.318 343.457C211.227 343.368 211.181 343.224 211.181 343.024ZM211.181 339.353C211.181 338.979 211.345 338.792 211.672 338.792C212.013 338.792 212.183 338.979 212.183 339.353C212.183 339.533 212.137 339.672 212.046 339.769C211.954 339.866 211.83 339.914 211.672 339.914C211.53 339.914 211.413 339.871 211.318 339.785C211.227 339.697 211.181 339.552 211.181 339.353Z" class="path-10"/> -<path d="M222.359 343.465H221.382V339.54C221.382 339.072 221.393 338.7 221.415 338.426C221.351 338.492 221.272 338.566 221.178 338.646C221.086 338.726 220.776 338.981 220.247 339.411L219.756 338.792L221.544 337.386H222.359V343.465ZM225.693 342.571C225.56 343.086 225.316 343.75 224.961 344.562H224.242C224.433 343.814 224.576 343.118 224.67 342.475H225.631L225.693 342.571ZM229.502 343.465H228.525V339.54C228.525 339.072 228.536 338.7 228.558 338.426C228.494 338.492 228.415 338.566 228.321 338.646C228.229 338.726 227.919 338.981 227.39 339.411L226.899 338.792L228.687 337.386H229.502V343.465ZM235.618 340.426C235.618 341.482 235.447 342.266 235.106 342.779C234.768 343.292 234.25 343.548 233.551 343.548C232.875 343.548 232.362 343.283 232.013 342.754C231.664 342.224 231.489 341.448 231.489 340.426C231.489 339.353 231.658 338.563 231.996 338.056C232.337 337.546 232.856 337.291 233.551 337.291C234.23 337.291 234.745 337.557 235.094 338.089C235.443 338.621 235.618 339.4 235.618 340.426ZM232.479 340.426C232.479 341.254 232.563 341.846 232.732 342.201C232.904 342.556 233.177 342.733 233.551 342.733C233.925 342.733 234.198 342.553 234.37 342.193C234.545 341.832 234.632 341.243 234.632 340.426C234.632 339.611 234.545 339.022 234.37 338.659C234.198 338.293 233.925 338.11 233.551 338.11C233.177 338.11 232.904 338.288 232.732 338.646C232.563 339.004 232.479 339.597 232.479 340.426ZM240.482 340.426C240.482 341.482 240.312 342.266 239.971 342.779C239.633 343.292 239.114 343.548 238.416 343.548C237.739 343.548 237.227 343.283 236.877 342.754C236.528 342.224 236.354 341.448 236.354 340.426C236.354 339.353 236.523 338.563 236.861 338.056C237.202 337.546 237.72 337.291 238.416 337.291C239.095 337.291 239.609 337.557 239.958 338.089C240.308 338.621 240.482 339.4 240.482 340.426ZM237.343 340.426C237.343 341.254 237.428 341.846 237.597 342.201C237.769 342.556 238.042 342.733 238.416 342.733C238.79 342.733 239.063 342.553 239.235 342.193C239.41 341.832 239.497 341.243 239.497 340.426C239.497 339.611 239.41 339.022 239.235 338.659C239.063 338.293 238.79 338.11 238.416 338.11C238.042 338.11 237.769 338.288 237.597 338.646C237.428 339.004 237.343 339.597 237.343 340.426ZM247.891 339.224C247.891 339.859 247.683 340.345 247.268 340.683C246.852 341.021 246.26 341.191 245.492 341.191H244.86V343.465H243.867V337.386H245.617C246.376 337.386 246.945 337.541 247.322 337.852C247.701 338.162 247.891 338.62 247.891 339.224ZM244.86 340.355H245.388C245.898 340.355 246.273 340.266 246.511 340.089C246.749 339.911 246.868 339.634 246.868 339.257C246.868 338.908 246.762 338.647 246.548 338.476C246.335 338.304 246.002 338.218 245.55 338.218H244.86V340.355ZM254.169 343.465H252.951L249.962 338.621H249.929L249.949 338.891C249.988 339.407 250.008 339.878 250.008 340.305V343.465H249.105V337.386H250.311L253.292 342.205H253.317C253.312 342.141 253.3 341.91 253.284 341.511C253.267 341.109 253.259 340.796 253.259 340.571V337.386H254.169V343.465ZM260.414 343.465H259.263L257.354 340.712L256.768 341.191V343.465H255.774V337.386H256.768V340.288C257.04 339.956 257.31 339.636 257.579 339.328L259.221 337.386H260.352C259.29 338.634 258.529 339.522 258.069 340.051L260.414 343.465Z" class="path-11"/> -<g clip-path="url(#clip2_13917_210808)"> -<path d="M287.049 336.738H281.52C280.908 336.738 280.414 337.214 280.414 337.803V343.125C280.414 343.713 280.908 344.189 281.52 344.189H287.049C287.66 344.189 288.155 343.713 288.155 343.125V337.803C288.155 337.214 287.661 336.738 287.049 336.738ZM282.626 339.399C282.321 339.399 282.073 339.16 282.073 338.867C282.073 338.574 282.321 338.335 282.626 338.335C282.93 338.335 283.178 338.574 283.178 338.867C283.178 339.16 282.93 339.399 282.626 339.399ZM285.943 342.592C285.639 342.592 285.39 342.353 285.39 342.06C285.39 341.767 285.639 341.528 285.943 341.528C286.247 341.528 286.496 341.767 286.496 342.06C286.496 342.353 286.247 342.592 285.943 342.592Z" class="path-12"/> -</g> -<path d="M293.212 345.066C292.952 345.066 292.747 345.028 292.597 344.953V344.35C292.794 344.406 292.999 344.434 293.212 344.434C293.487 344.434 293.695 344.35 293.836 344.184C293.98 344.018 294.052 343.778 294.052 343.465V337.386H294.759V343.407C294.759 343.933 294.626 344.341 294.36 344.629C294.094 344.92 293.711 345.066 293.212 345.066ZM296.921 338.908V341.864C296.921 342.236 297.006 342.513 297.175 342.696C297.344 342.879 297.608 342.97 297.969 342.97C298.445 342.97 298.793 342.84 299.012 342.579C299.234 342.319 299.345 341.893 299.345 341.303V338.908H300.035V343.465H299.466L299.366 342.854H299.328C299.187 343.078 298.99 343.25 298.738 343.369C298.488 343.488 298.203 343.548 297.881 343.548C297.327 343.548 296.911 343.416 296.634 343.153C296.36 342.89 296.223 342.468 296.223 341.889V338.908H296.921ZM303.582 338.825C303.784 338.825 303.966 338.841 304.126 338.875L304.031 339.515C303.842 339.473 303.676 339.453 303.532 339.453C303.163 339.453 302.847 339.602 302.584 339.902C302.323 340.201 302.193 340.574 302.193 341.02V343.465H301.503V338.908H302.072L302.151 339.752H302.185C302.354 339.455 302.557 339.227 302.796 339.066C303.034 338.905 303.296 338.825 303.582 338.825ZM308.912 341.182C308.912 341.925 308.725 342.506 308.351 342.924C307.976 343.34 307.459 343.548 306.8 343.548C306.392 343.548 306.031 343.452 305.715 343.261C305.399 343.07 305.155 342.795 304.983 342.438C304.811 342.08 304.725 341.662 304.725 341.182C304.725 340.439 304.911 339.861 305.282 339.448C305.654 339.033 306.169 338.825 306.829 338.825C307.466 338.825 307.972 339.037 308.346 339.461C308.723 339.885 308.912 340.459 308.912 341.182ZM305.44 341.182C305.44 341.764 305.557 342.208 305.789 342.513C306.022 342.818 306.365 342.97 306.816 342.97C307.268 342.97 307.61 342.819 307.843 342.517C308.079 342.212 308.197 341.767 308.197 341.182C308.197 340.603 308.079 340.164 307.843 339.864C307.61 339.562 307.265 339.411 306.808 339.411C306.356 339.411 306.015 339.559 305.785 339.856C305.555 340.153 305.44 340.595 305.44 341.182ZM312.205 338.825C312.407 338.825 312.589 338.841 312.749 338.875L312.654 339.515C312.465 339.473 312.299 339.453 312.155 339.453C311.786 339.453 311.47 339.602 311.207 339.902C310.946 340.201 310.816 340.574 310.816 341.02V343.465H310.126V338.908H310.696L310.775 339.752H310.808C310.977 339.455 311.181 339.227 311.419 339.066C311.657 338.905 311.919 338.825 312.205 338.825ZM321.194 340.417C321.194 341.39 320.947 342.155 320.454 342.712C319.963 343.269 319.28 343.548 318.404 343.548C317.509 343.548 316.817 343.275 316.329 342.729C315.844 342.18 315.602 341.407 315.602 340.409C315.602 339.419 315.846 338.653 316.333 338.11C316.821 337.564 317.514 337.291 318.412 337.291C319.285 337.291 319.967 337.568 320.458 338.122C320.948 338.677 321.194 339.442 321.194 340.417ZM316.35 340.417C316.35 341.24 316.525 341.866 316.874 342.292C317.226 342.716 317.736 342.928 318.404 342.928C319.077 342.928 319.586 342.716 319.93 342.292C320.274 341.868 320.445 341.243 320.445 340.417C320.445 339.6 320.274 338.98 319.93 338.559C319.589 338.135 319.083 337.923 318.412 337.923C317.739 337.923 317.226 338.136 316.874 338.563C316.525 338.987 316.35 339.605 316.35 340.417ZM325.551 342.854H325.514C325.195 343.317 324.718 343.548 324.083 343.548C323.487 343.548 323.023 343.344 322.691 342.937C322.361 342.529 322.196 341.95 322.196 341.199C322.196 340.448 322.362 339.864 322.695 339.448C323.027 339.033 323.49 338.825 324.083 338.825C324.701 338.825 325.175 339.049 325.505 339.498H325.559L325.53 339.17L325.514 338.85V336.995H326.204V343.465H325.643L325.551 342.854ZM324.171 342.97C324.642 342.97 324.983 342.843 325.193 342.588C325.407 342.33 325.514 341.915 325.514 341.344V341.199C325.514 340.553 325.406 340.093 325.189 339.819C324.976 339.541 324.634 339.403 324.162 339.403C323.758 339.403 323.447 339.561 323.231 339.877C323.018 340.19 322.911 340.633 322.911 341.207C322.911 341.789 323.018 342.229 323.231 342.525C323.444 342.822 323.758 342.97 324.171 342.97ZM330.773 342.854H330.736C330.417 343.317 329.94 343.548 329.305 343.548C328.71 343.548 328.245 343.344 327.913 342.937C327.583 342.529 327.418 341.95 327.418 341.199C327.418 340.448 327.584 339.864 327.917 339.448C328.249 339.033 328.712 338.825 329.305 338.825C329.924 338.825 330.398 339.049 330.727 339.498H330.781L330.752 339.17L330.736 338.85V336.995H331.426V343.465H330.865L330.773 342.854ZM329.393 342.97C329.864 342.97 330.205 342.843 330.416 342.588C330.629 342.33 330.736 341.915 330.736 341.344V341.199C330.736 340.553 330.628 340.093 330.411 339.819C330.198 339.541 329.856 339.403 329.384 339.403C328.98 339.403 328.669 339.561 328.453 339.877C328.24 340.19 328.133 340.633 328.133 341.207C328.133 341.789 328.24 342.229 328.453 342.525C328.667 342.822 328.98 342.97 329.393 342.97ZM335.833 342.222C335.833 342.646 335.675 342.973 335.359 343.203C335.043 343.433 334.6 343.548 334.029 343.548C333.424 343.548 332.953 343.452 332.615 343.261V342.621C332.834 342.732 333.068 342.819 333.318 342.883C333.57 342.947 333.812 342.978 334.045 342.978C334.406 342.978 334.683 342.922 334.877 342.808C335.071 342.692 335.168 342.515 335.168 342.28C335.168 342.102 335.09 341.951 334.935 341.827C334.783 341.699 334.483 341.55 334.037 341.378C333.613 341.22 333.311 341.082 333.131 340.966C332.953 340.847 332.82 340.712 332.731 340.563C332.646 340.413 332.603 340.234 332.603 340.026C332.603 339.655 332.754 339.363 333.056 339.149C333.358 338.933 333.772 338.825 334.299 338.825C334.79 338.825 335.269 338.925 335.737 339.124L335.492 339.685C335.035 339.497 334.62 339.403 334.249 339.403C333.922 339.403 333.675 339.454 333.509 339.557C333.343 339.659 333.259 339.801 333.259 339.981C333.259 340.103 333.29 340.207 333.351 340.293C333.415 340.378 333.516 340.46 333.654 340.538C333.793 340.615 334.059 340.728 334.453 340.875C334.993 341.071 335.358 341.27 335.546 341.469C335.737 341.669 335.833 341.92 335.833 342.222ZM336.86 343.024C336.86 342.838 336.902 342.698 336.985 342.604C337.071 342.507 337.193 342.459 337.351 342.459C337.511 342.459 337.636 342.507 337.725 342.604C337.816 342.698 337.862 342.838 337.862 343.024C337.862 343.204 337.816 343.343 337.725 343.44C337.633 343.537 337.509 343.585 337.351 343.585C337.209 343.585 337.091 343.542 336.997 343.457C336.906 343.368 336.86 343.224 336.86 343.024ZM336.86 339.353C336.86 338.979 337.024 338.792 337.351 338.792C337.692 338.792 337.862 338.979 337.862 339.353C337.862 339.533 337.816 339.672 337.725 339.769C337.633 339.866 337.509 339.914 337.351 339.914C337.209 339.914 337.091 339.871 336.997 339.785C336.906 339.697 336.86 339.552 336.86 339.353Z" class="path-13"/> -<path d="M345.911 343.465L348.314 338.255H345.155V337.395H349.358V338.076L346.967 343.465H345.911ZM350.264 342.945C350.264 342.743 350.317 342.588 350.422 342.479C350.528 342.371 350.68 342.317 350.88 342.317C351.082 342.317 351.236 342.374 351.341 342.488C351.447 342.599 351.499 342.751 351.499 342.945C351.499 343.142 351.445 343.299 351.337 343.415C351.232 343.529 351.079 343.585 350.88 343.585C350.68 343.585 350.528 343.529 350.422 343.415C350.317 343.301 350.264 343.145 350.264 342.945ZM354.484 337.307C355.061 337.307 355.517 337.44 355.852 337.706C356.188 337.97 356.355 338.323 356.355 338.767C356.355 339.39 355.981 339.886 355.233 340.255C355.71 340.493 356.048 340.744 356.247 341.008C356.45 341.271 356.551 341.565 356.551 341.889C356.551 342.391 356.367 342.793 355.998 343.095C355.629 343.397 355.13 343.548 354.501 343.548C353.841 343.548 353.33 343.407 352.967 343.124C352.604 342.841 352.422 342.441 352.422 341.922C352.422 341.584 352.516 341.281 352.705 341.012C352.896 340.74 353.208 340.499 353.64 340.288C353.269 340.067 353.004 339.832 352.846 339.586C352.688 339.339 352.609 339.062 352.609 338.754C352.609 338.313 352.783 337.963 353.129 337.702C353.476 337.439 353.927 337.307 354.484 337.307ZM353.358 341.889C353.358 342.177 353.459 342.402 353.661 342.563C353.864 342.721 354.138 342.8 354.484 342.8C354.842 342.8 355.119 342.718 355.316 342.554C355.516 342.388 355.615 342.163 355.615 341.881C355.615 341.656 355.524 341.451 355.341 341.265C355.158 341.08 354.881 340.908 354.509 340.75L354.389 340.696C354.023 340.857 353.76 341.034 353.599 341.228C353.438 341.419 353.358 341.64 353.358 341.889ZM354.476 338.06C354.199 338.06 353.976 338.129 353.807 338.268C353.638 338.404 353.553 338.589 353.553 338.825C353.553 338.969 353.584 339.098 353.645 339.211C353.706 339.325 353.794 339.429 353.911 339.523C354.027 339.615 354.224 339.726 354.501 339.856C354.834 339.709 355.068 339.555 355.204 339.394C355.342 339.231 355.412 339.041 355.412 338.825C355.412 338.589 355.326 338.404 355.154 338.268C354.985 338.129 354.759 338.06 354.476 338.06ZM361.415 340.426C361.415 341.482 361.245 342.266 360.904 342.779C360.566 343.292 360.047 343.548 359.349 343.548C358.673 343.548 358.16 343.283 357.811 342.754C357.461 342.224 357.287 341.448 357.287 340.426C357.287 339.353 357.456 338.563 357.794 338.056C358.135 337.546 358.653 337.291 359.349 337.291C360.028 337.291 360.542 337.557 360.891 338.089C361.241 338.621 361.415 339.4 361.415 340.426ZM358.276 340.426C358.276 341.254 358.361 341.846 358.53 342.201C358.702 342.556 358.975 342.733 359.349 342.733C359.723 342.733 359.996 342.553 360.168 342.193C360.343 341.832 360.43 341.243 360.43 340.426C360.43 339.611 360.343 339.022 360.168 338.659C359.996 338.293 359.723 338.11 359.349 338.11C358.975 338.11 358.702 338.288 358.53 338.646C358.361 339.004 358.276 339.597 358.276 340.426ZM362.945 339.207C362.945 339.62 362.986 339.928 363.066 340.13C363.146 340.333 363.278 340.434 363.461 340.434C363.827 340.434 364.01 340.025 364.01 339.207C364.01 338.39 363.827 337.981 363.461 337.981C363.278 337.981 363.146 338.082 363.066 338.284C362.986 338.487 362.945 338.794 362.945 339.207ZM364.816 339.199C364.816 339.837 364.701 340.316 364.471 340.638C364.244 340.956 363.907 341.116 363.461 341.116C363.04 341.116 362.713 340.951 362.48 340.621C362.25 340.288 362.135 339.814 362.135 339.199C362.135 337.932 362.577 337.299 363.461 337.299C363.896 337.299 364.23 337.464 364.463 337.794C364.699 338.121 364.816 338.589 364.816 339.199ZM366.904 341.635C366.904 342.048 366.944 342.358 367.024 342.563C367.107 342.768 367.24 342.87 367.423 342.87C367.786 342.87 367.968 342.459 367.968 341.635C367.968 340.823 367.786 340.417 367.423 340.417C367.24 340.417 367.107 340.517 367.024 340.717C366.944 340.916 366.904 341.222 366.904 341.635ZM368.775 341.635C368.775 342.273 368.659 342.751 368.429 343.07C368.199 343.389 367.864 343.548 367.423 343.548C367.002 343.548 366.675 343.384 366.442 343.057C366.209 342.728 366.093 342.254 366.093 341.635C366.093 340.369 366.536 339.735 367.423 339.735C367.85 339.735 368.181 339.899 368.417 340.226C368.655 340.553 368.775 341.023 368.775 341.635ZM367.54 337.386L364.168 343.465H363.361L366.733 337.386H367.54Z" class="path-14"/> -<line x1="21.4629" y1="85.8443" x2="367.537" y2="85.8444" stroke-width="0.608215" class="line-1"/> -<line x1="21.4629" y1="234.86" x2="367.537" y2="234.86" stroke-width="0.608215" class="line-2"/> -<path d="M24.972 65.8113H27.0384V68.7674C26.7169 68.87 26.3898 68.9476 26.0572 69.0003C25.7246 69.0529 25.3393 69.0792 24.9013 69.0792C23.9811 69.0792 23.2646 68.8062 22.7518 68.2602C22.239 67.7114 21.9826 66.9436 21.9826 65.9568C21.9826 65.3248 22.1087 64.7719 22.361 64.2979C22.616 63.8211 22.9818 63.458 23.4586 63.2085C23.9353 62.9563 24.4939 62.8302 25.1342 62.8302C25.7828 62.8302 26.387 62.9494 26.9469 63.1878L26.6725 63.8114C26.1237 63.5786 25.5957 63.4622 25.0884 63.4622C24.3483 63.4622 23.7704 63.6825 23.3547 64.1232C22.9389 64.564 22.731 65.1752 22.731 65.9568C22.731 66.7773 22.9306 67.3995 23.3297 67.8236C23.7316 68.2477 24.3206 68.4597 25.0967 68.4597C25.5181 68.4597 25.9297 68.4112 26.3316 68.3142V66.4433H24.972V65.8113ZM30.323 69.0792C29.6494 69.0792 29.1173 68.8741 28.7264 68.4639C28.3384 68.0537 28.1443 67.4841 28.1443 66.7551C28.1443 66.0206 28.3245 65.4371 28.6848 65.0047C29.048 64.5723 29.5344 64.3561 30.1442 64.3561C30.7152 64.3561 31.167 64.5446 31.4996 64.9215C31.8322 65.2957 31.9985 65.7905 31.9985 66.4058V66.8424H28.8595C28.8733 67.3774 29.0078 67.7834 29.2628 68.0606C29.5205 68.3378 29.8823 68.4764 30.3479 68.4764C30.8385 68.4764 31.3236 68.3738 31.8031 68.1687V68.7841C31.5592 68.8894 31.3278 68.9642 31.1088 69.0086C30.8926 69.0557 30.6307 69.0792 30.323 69.0792ZM30.1359 64.934C29.77 64.934 29.4776 65.0532 29.2586 65.2916C29.0424 65.5299 28.9149 65.8598 28.8761 66.2811H31.2585C31.2585 65.8459 31.1615 65.5133 30.9674 65.2833C30.7734 65.0504 30.4962 64.934 30.1359 64.934ZM36.2976 68.9961V66.0483C36.2976 65.6768 36.2131 65.3997 36.044 65.2167C35.8749 65.0338 35.6102 64.9423 35.2499 64.9423C34.7731 64.9423 34.4239 65.0712 34.2021 65.329C33.9804 65.5868 33.8695 66.0122 33.8695 66.6054V68.9961H33.1793V64.4392H33.7406L33.8529 65.0629H33.8862C34.0275 64.8384 34.2257 64.6651 34.4807 64.5432C34.7357 64.4184 35.0198 64.3561 35.333 64.3561C35.8819 64.3561 36.2949 64.4891 36.572 64.7552C36.8492 65.0185 36.9878 65.4412 36.9878 66.0233V68.9961H36.2976ZM40.3348 69.0792C39.6612 69.0792 39.129 68.8741 38.7382 68.4639C38.3502 68.0537 38.1561 67.4841 38.1561 66.7551C38.1561 66.0206 38.3363 65.4371 38.6966 65.0047C39.0597 64.5723 39.5462 64.3561 40.156 64.3561C40.727 64.3561 41.1788 64.5446 41.5114 64.9215C41.844 65.2957 42.0103 65.7905 42.0103 66.4058V66.8424H38.8713C38.8851 67.3774 39.0196 67.7834 39.2746 68.0606C39.5323 68.3378 39.8941 68.4764 40.3597 68.4764C40.8503 68.4764 41.3354 68.3738 41.8149 68.1687V68.7841C41.571 68.8894 41.3396 68.9642 41.1206 69.0086C40.9044 69.0557 40.6424 69.0792 40.3348 69.0792ZM40.1477 64.934C39.7818 64.934 39.4894 65.0532 39.2704 65.2916C39.0542 65.5299 38.9267 65.8598 38.8879 66.2811H41.2703C41.2703 65.8459 41.1732 65.5133 40.9792 65.2833C40.7852 65.0504 40.508 64.934 40.1477 64.934ZM45.27 64.3561C45.4723 64.3561 45.6539 64.3727 45.8146 64.406L45.719 65.0463C45.5305 65.0047 45.3642 64.9839 45.2201 64.9839C44.8514 64.9839 44.5355 65.1336 44.2721 65.4329C44.0116 65.7323 43.8813 66.1051 43.8813 66.5514V68.9961H43.1911V64.4392H43.7607L43.8397 65.2833H43.873C44.0421 64.9867 44.2458 64.758 44.4842 64.5972C44.7226 64.4365 44.9845 64.3561 45.27 64.3561ZM49.4693 68.9961L49.3321 68.3475H49.2988C49.0715 68.633 48.8442 68.827 48.617 68.9296C48.3924 69.0294 48.1111 69.0792 47.7729 69.0792C47.3211 69.0792 46.9663 68.9628 46.7086 68.73C46.4536 68.4972 46.326 68.1659 46.326 67.7363C46.326 66.8161 47.062 66.3338 48.5338 66.2894L49.3071 66.2645V65.9817C49.3071 65.6242 49.2295 65.3609 49.0743 65.1918C48.9219 65.0199 48.6765 64.934 48.3384 64.934C47.9586 64.934 47.529 65.0504 47.0495 65.2833L46.8374 64.7552C47.062 64.6333 47.3073 64.5376 47.5734 64.4683C47.8422 64.399 48.1111 64.3644 48.38 64.3644C48.9232 64.3644 49.3251 64.485 49.5857 64.7261C49.849 64.9673 49.9807 65.3539 49.9807 65.8861V68.9961H49.4693ZM47.9101 68.5096C48.3398 68.5096 48.6765 68.3918 48.9205 68.1562C49.1672 67.9206 49.2905 67.5908 49.2905 67.1667V66.7551L48.6003 66.7842C48.0515 66.8036 47.6551 66.8895 47.4112 67.042C47.1701 67.1916 47.0495 67.4259 47.0495 67.7446C47.0495 67.9941 47.1243 68.184 47.274 68.3142C47.4265 68.4445 47.6385 68.5096 47.9101 68.5096ZM52.097 68.9961H51.4068V62.5267H52.097V68.9961ZM58.4791 63.4622C57.8111 63.4622 57.283 63.6853 56.895 64.1316C56.5097 64.5751 56.317 65.1835 56.317 65.9568C56.317 66.7523 56.5028 67.3677 56.8742 67.8028C57.2484 68.2352 57.7806 68.4514 58.4707 68.4514C58.8948 68.4514 59.3785 68.3752 59.9218 68.2228V68.8423C59.5005 69.0003 58.9808 69.0792 58.3626 69.0792C57.4673 69.0792 56.7758 68.8076 56.2879 68.2643C55.8029 67.7211 55.5603 66.9491 55.5603 65.9485C55.5603 65.3221 55.6768 64.7732 55.9096 64.302C56.1452 63.8308 56.4834 63.4677 56.9241 63.2127C57.3676 62.9577 57.8887 62.8302 58.4874 62.8302C59.1249 62.8302 59.682 62.9466 60.1588 63.1794L59.8594 63.7865C59.3993 63.5703 58.9392 63.4622 58.4791 63.4622ZM65.0774 66.7135C65.0774 67.4564 64.8903 68.037 64.5161 68.4556C64.1419 68.8714 63.6249 69.0792 62.9652 69.0792C62.5578 69.0792 62.1961 68.9836 61.8801 68.7924C61.5641 68.6011 61.3202 68.3267 61.1483 67.9691C60.9765 67.6116 60.8905 67.193 60.8905 66.7135C60.8905 65.9707 61.0762 65.3927 61.4477 64.9797C61.8191 64.564 62.3347 64.3561 62.9943 64.3561C63.6319 64.3561 64.1377 64.5681 64.5119 64.9922C64.8889 65.4163 65.0774 65.9901 65.0774 66.7135ZM61.6057 66.7135C61.6057 67.2956 61.7221 67.7391 61.9549 68.044C62.1877 68.3489 62.5301 68.5013 62.9819 68.5013C63.4337 68.5013 63.776 68.3503 64.0088 68.0481C64.2444 67.7432 64.3622 67.2984 64.3622 66.7135C64.3622 66.1342 64.2444 65.6949 64.0088 65.3955C63.776 65.0934 63.4309 64.9423 62.9736 64.9423C62.5217 64.9423 62.1808 65.0906 61.9508 65.3872C61.7207 65.6838 61.6057 66.1259 61.6057 66.7135ZM66.94 64.4392V67.3954C66.94 67.7668 67.0246 68.044 67.1936 68.2269C67.3627 68.4099 67.6274 68.5013 67.9878 68.5013C68.4645 68.5013 68.8124 68.3711 69.0313 68.1105C69.2531 67.8499 69.364 67.4245 69.364 66.8341V64.4392H70.0541V68.9961H69.4845L69.3848 68.3849H69.3473C69.206 68.6094 69.0092 68.7813 68.7569 68.9005C68.5075 69.0197 68.222 69.0792 67.9004 69.0792C67.3461 69.0792 66.9303 68.9476 66.6531 68.6843C66.3787 68.4209 66.2415 67.9996 66.2415 67.4203V64.4392H66.94ZM73.6007 64.3561C73.803 64.3561 73.9846 64.3727 74.1453 64.406L74.0497 65.0463C73.8612 65.0047 73.6949 64.9839 73.5508 64.9839C73.1821 64.9839 72.8662 65.1336 72.6028 65.4329C72.3423 65.7323 72.212 66.1051 72.212 66.5514V68.9961H71.5218V64.4392H72.0914L72.1704 65.2833H72.2037C72.3728 64.9867 72.5765 64.758 72.8149 64.5972C73.0533 64.4365 73.3152 64.3561 73.6007 64.3561ZM76.4695 68.5096C76.5915 68.5096 76.7093 68.5013 76.8229 68.4847C76.9366 68.4653 77.0266 68.4459 77.0932 68.4265V68.9545C77.0183 68.9906 76.9075 69.0197 76.7605 69.0418C76.6164 69.0668 76.4861 69.0792 76.3697 69.0792C75.4883 69.0792 75.0476 68.615 75.0476 67.6864V64.9756H74.3948V64.643L75.0476 64.3561L75.3386 63.3832H75.7378V64.4392H77.0599V64.9756H75.7378V67.6573C75.7378 67.9317 75.8029 68.1424 75.9332 68.2893C76.0634 68.4362 76.2422 68.5096 76.4695 68.5096Z" class="path-15"/> -<path d="M85.3679 62.9175L83.1019 68.9961H82.4118L84.6777 62.9175H85.3679Z" class="path-16"/> -<path d="M92.03 62.9175H93.7472C94.5538 62.9175 95.1372 63.0381 95.4976 63.2792C95.8579 63.5204 96.0381 63.9015 96.0381 64.4226C96.0381 64.7829 95.9369 65.0809 95.7346 65.3165C95.535 65.5493 95.2426 65.7004 94.8573 65.7697V65.8113C95.7803 65.9693 96.2418 66.4543 96.2418 67.2665C96.2418 67.8098 96.0575 68.2338 95.6888 68.5387C95.323 68.8436 94.8102 68.9961 94.1505 68.9961H92.03V62.9175ZM92.7368 65.5202H93.901C94.3999 65.5202 94.7589 65.4426 94.9779 65.2874C95.1968 65.1294 95.3063 64.8647 95.3063 64.4933C95.3063 64.1524 95.1844 63.907 94.9404 63.7574C94.6965 63.6049 94.3085 63.5287 93.7763 63.5287H92.7368V65.5202ZM92.7368 66.119V68.3932H94.005C94.4956 68.3932 94.8642 68.299 95.1109 68.1105C95.3604 67.9192 95.4851 67.6213 95.4851 67.2166C95.4851 66.8396 95.3576 66.5624 95.1026 66.385C94.8504 66.2077 94.4651 66.119 93.9467 66.119H92.7368ZM98.1377 68.9961H97.4475V62.5267H98.1377V68.9961ZM103.534 66.7135C103.534 67.4564 103.347 68.037 102.973 68.4556C102.599 68.8714 102.082 69.0792 101.422 69.0792C101.015 69.0792 100.653 68.9836 100.337 68.7924C100.021 68.6011 99.7773 68.3267 99.6054 67.9691C99.4335 67.6116 99.3476 67.193 99.3476 66.7135C99.3476 65.9707 99.5333 65.3927 99.9048 64.9797C100.276 64.564 100.792 64.3561 101.451 64.3561C102.089 64.3561 102.595 64.5681 102.969 64.9922C103.346 65.4163 103.534 65.9901 103.534 66.7135ZM100.063 66.7135C100.063 67.2956 100.179 67.7391 100.412 68.044C100.645 68.3489 100.987 68.5013 101.439 68.5013C101.891 68.5013 102.233 68.3503 102.466 68.0481C102.702 67.7432 102.819 67.2984 102.819 66.7135C102.819 66.1342 102.702 65.6949 102.466 65.3955C102.233 65.0934 101.888 64.9423 101.431 64.9423C100.979 64.9423 100.638 65.0906 100.408 65.3872C100.178 65.6838 100.063 66.1259 100.063 66.7135ZM106.57 69.0792C105.91 69.0792 105.398 68.8769 105.035 68.4722C104.675 68.0648 104.495 67.4896 104.495 66.7468C104.495 65.9845 104.678 65.3955 105.044 64.9797C105.412 64.564 105.936 64.3561 106.615 64.3561C106.834 64.3561 107.053 64.3796 107.272 64.4268C107.491 64.4739 107.663 64.5293 107.788 64.5931L107.576 65.1793C107.423 65.1183 107.257 65.0684 107.077 65.0296C106.897 64.9881 106.737 64.9673 106.599 64.9673C105.673 64.9673 105.21 65.5577 105.21 66.7385C105.21 67.2984 105.322 67.728 105.547 68.0273C105.774 68.3267 106.109 68.4764 106.553 68.4764C106.933 68.4764 107.322 68.3946 107.721 68.2311V68.8423C107.416 69.0003 107.032 69.0792 106.57 69.0792ZM109.488 66.6636C109.607 66.4945 109.789 66.2728 110.033 65.9984L111.505 64.4392H112.324L110.478 66.3809L112.453 68.9961H111.617L110.008 66.8424L109.488 67.2914V68.9961H108.806V62.5267H109.488V65.9568C109.488 66.1093 109.477 66.3449 109.455 66.6636H109.488ZM115.101 69.0792C114.442 69.0792 113.93 68.8769 113.567 68.4722C113.207 68.0648 113.027 67.4896 113.027 66.7468C113.027 65.9845 113.209 65.3955 113.575 64.9797C113.944 64.564 114.468 64.3561 115.147 64.3561C115.366 64.3561 115.585 64.3796 115.804 64.4268C116.023 64.4739 116.195 64.5293 116.319 64.5931L116.107 65.1793C115.955 65.1183 115.789 65.0684 115.608 65.0296C115.428 64.9881 115.269 64.9673 115.13 64.9673C114.205 64.9673 113.742 65.5577 113.742 66.7385C113.742 67.2984 113.854 67.728 114.078 68.0273C114.306 68.3267 114.641 68.4764 115.085 68.4764C115.464 68.4764 115.854 68.3946 116.253 68.2311V68.8423C115.948 69.0003 115.564 69.0792 115.101 69.0792ZM120.456 68.9961V66.0483C120.456 65.6768 120.372 65.3997 120.203 65.2167C120.034 65.0338 119.769 64.9423 119.409 64.9423C118.929 64.9423 118.578 65.0726 118.357 65.3331C118.138 65.5937 118.028 66.0206 118.028 66.6137V68.9961H117.338V62.5267H118.028V64.485C118.028 64.7206 118.017 64.916 117.995 65.0712H118.037C118.172 64.8522 118.365 64.6804 118.614 64.5557C118.867 64.4281 119.154 64.3644 119.475 64.3644C120.032 64.3644 120.449 64.4974 120.727 64.7635C121.007 65.0269 121.147 65.4468 121.147 66.0233V68.9961H120.456ZM125.371 68.9961L125.234 68.3475H125.2C124.973 68.633 124.746 68.827 124.518 68.9296C124.294 69.0294 124.013 69.0792 123.674 69.0792C123.223 69.0792 122.868 68.9628 122.61 68.73C122.355 68.4972 122.228 68.1659 122.228 67.7363C122.228 66.8161 122.963 66.3338 124.435 66.2894L125.209 66.2645V65.9817C125.209 65.6242 125.131 65.3609 124.976 65.1918C124.823 65.0199 124.578 64.934 124.24 64.934C123.86 64.934 123.431 65.0504 122.951 65.2833L122.739 64.7552C122.963 64.6333 123.209 64.5376 123.475 64.4683C123.744 64.399 124.013 64.3644 124.281 64.3644C124.825 64.3644 125.227 64.485 125.487 64.7261C125.751 64.9673 125.882 65.3539 125.882 65.8861V68.9961H125.371ZM123.812 68.5096C124.241 68.5096 124.578 68.3918 124.822 68.1562C125.069 67.9206 125.192 67.5908 125.192 67.1667V66.7551L124.502 66.7842C123.953 66.8036 123.557 66.8895 123.313 67.042C123.072 67.1916 122.951 67.4259 122.951 67.7446C122.951 67.9941 123.026 68.184 123.176 68.3142C123.328 68.4445 123.54 68.5096 123.812 68.5096ZM127.998 68.9961H127.308V64.4392H127.998V68.9961ZM127.25 63.2044C127.25 63.0464 127.289 62.9314 127.366 62.8593C127.444 62.7845 127.541 62.747 127.658 62.747C127.768 62.747 127.864 62.7845 127.944 62.8593C128.025 62.9341 128.065 63.0492 128.065 63.2044C128.065 63.3596 128.025 63.476 127.944 63.5536C127.864 63.6285 127.768 63.6659 127.658 63.6659C127.541 63.6659 127.444 63.6285 127.366 63.5536C127.289 63.476 127.25 63.3596 127.25 63.2044ZM132.58 68.9961V66.0483C132.58 65.6768 132.496 65.3997 132.327 65.2167C132.158 65.0338 131.893 64.9423 131.533 64.9423C131.056 64.9423 130.707 65.0712 130.485 65.329C130.263 65.5868 130.152 66.0122 130.152 66.6054V68.9961H129.462V64.4392H130.023L130.136 65.0629H130.169C130.31 64.8384 130.508 64.6651 130.763 64.5432C131.018 64.4184 131.302 64.3561 131.616 64.3561C132.164 64.3561 132.577 64.4891 132.855 64.7552C133.132 65.0185 133.27 65.4412 133.27 66.0233V68.9961H132.58Z" class="path-17"/> -<path d="M142.099 62.9175L139.833 68.9961H139.143L141.409 62.9175H142.099Z" class="path-18"/> -<path d="M153.51 68.9961H152.703L149.381 63.8946H149.348C149.392 64.4933 149.414 65.0421 149.414 65.541V68.9961H148.761V62.9175H149.56L152.873 67.9982H152.907C152.901 67.9234 152.889 67.6836 152.869 67.279C152.85 66.8715 152.843 66.5805 152.849 66.4058V62.9175H153.51V68.9961ZM159.01 66.7135C159.01 67.4564 158.823 68.037 158.449 68.4556C158.075 68.8714 157.558 69.0792 156.898 69.0792C156.491 69.0792 156.129 68.9836 155.813 68.7924C155.497 68.6011 155.253 68.3267 155.081 67.9691C154.909 67.6116 154.823 67.193 154.823 66.7135C154.823 65.9707 155.009 65.3927 155.381 64.9797C155.752 64.564 156.268 64.3561 156.927 64.3561C157.565 64.3561 158.071 64.5681 158.445 64.9922C158.822 65.4163 159.01 65.9901 159.01 66.7135ZM155.539 66.7135C155.539 67.2956 155.655 67.7391 155.888 68.044C156.121 68.3489 156.463 68.5013 156.915 68.5013C157.367 68.5013 157.709 68.3503 157.942 68.0481C158.177 67.7432 158.295 67.2984 158.295 66.7135C158.295 66.1342 158.177 65.6949 157.942 65.3955C157.709 65.0934 157.364 64.9423 156.906 64.9423C156.455 64.9423 156.114 65.0906 155.884 65.3872C155.654 65.6838 155.539 66.1259 155.539 66.7135ZM163.343 68.9961V66.0483C163.343 65.6768 163.258 65.3997 163.089 65.2167C162.92 65.0338 162.655 64.9423 162.295 64.9423C161.818 64.9423 161.469 65.0712 161.247 65.329C161.025 65.5868 160.914 66.0122 160.914 66.6054V68.9961H160.224V64.4392H160.786L160.898 65.0629H160.931C161.072 64.8384 161.271 64.6651 161.526 64.5432C161.781 64.4184 162.065 64.3561 162.378 64.3561C162.927 64.3561 163.34 64.4891 163.617 64.7552C163.894 65.0185 164.033 65.4412 164.033 66.0233V68.9961H163.343ZM165.072 67.0295V66.3975H167.114V67.0295H165.072ZM170.174 68.9961H169.467V63.5453H167.542V62.9175H172.099V63.5453H170.174V68.9961ZM174.839 69.0792C174.165 69.0792 173.633 68.8741 173.242 68.4639C172.854 68.0537 172.66 67.4841 172.66 66.7551C172.66 66.0206 172.84 65.4371 173.201 65.0047C173.564 64.5723 174.05 64.3561 174.66 64.3561C175.231 64.3561 175.683 64.5446 176.015 64.9215C176.348 65.2957 176.514 65.7905 176.514 66.4058V66.8424H173.375C173.389 67.3774 173.523 67.7834 173.778 68.0606C174.036 68.3378 174.398 68.4764 174.864 68.4764C175.354 68.4764 175.839 68.3738 176.319 68.1687V68.7841C176.075 68.8894 175.843 68.9642 175.625 69.0086C175.408 69.0557 175.146 69.0792 174.839 69.0792ZM174.652 64.934C174.286 64.934 173.993 65.0532 173.774 65.2916C173.558 65.5299 173.431 65.8598 173.392 66.2811H175.774C175.774 65.8459 175.677 65.5133 175.483 65.2833C175.289 65.0504 175.012 64.934 174.652 64.934ZM179.516 69.0792C178.856 69.0792 178.345 68.8769 177.982 68.4722C177.622 68.0648 177.441 67.4896 177.441 66.7468C177.441 65.9845 177.624 65.3955 177.99 64.9797C178.359 64.564 178.883 64.3561 179.562 64.3561C179.781 64.3561 180 64.3796 180.219 64.4268C180.438 64.4739 180.61 64.5293 180.734 64.5931L180.522 65.1793C180.37 65.1183 180.204 65.0684 180.023 65.0296C179.843 64.9881 179.684 64.9673 179.545 64.9673C178.619 64.9673 178.157 65.5577 178.157 66.7385C178.157 67.2984 178.269 67.728 178.493 68.0273C178.721 68.3267 179.056 68.4764 179.499 68.4764C179.879 68.4764 180.269 68.3946 180.668 68.2311V68.8423C180.363 69.0003 179.979 69.0792 179.516 69.0792ZM184.871 68.9961V66.0483C184.871 65.6768 184.787 65.3997 184.618 65.2167C184.449 65.0338 184.184 64.9423 183.824 64.9423C183.344 64.9423 182.993 65.0726 182.772 65.3331C182.553 65.5937 182.443 66.0206 182.443 66.6137V68.9961H181.753V62.5267H182.443V64.485C182.443 64.7206 182.432 64.916 182.41 65.0712H182.451C182.587 64.8522 182.78 64.6804 183.029 64.5557C183.282 64.4281 183.569 64.3644 183.89 64.3644C184.447 64.3644 184.864 64.4974 185.142 64.7635C185.421 65.0269 185.561 65.4468 185.561 66.0233V68.9961H184.871ZM190.102 68.9961V66.0483C190.102 65.6768 190.017 65.3997 189.848 65.2167C189.679 65.0338 189.414 64.9423 189.054 64.9423C188.577 64.9423 188.228 65.0712 188.006 65.329C187.784 65.5868 187.674 66.0122 187.674 66.6054V68.9961H186.983V64.4392H187.545L187.657 65.0629H187.69C187.832 64.8384 188.03 64.6651 188.285 64.5432C188.54 64.4184 188.824 64.3561 189.137 64.3561C189.686 64.3561 190.099 64.4891 190.376 64.7552C190.653 65.0185 190.792 65.4412 190.792 66.0233V68.9961H190.102ZM192.904 68.9961H192.214V64.4392H192.904V68.9961ZM192.156 63.2044C192.156 63.0464 192.194 62.9314 192.272 62.8593C192.35 62.7845 192.447 62.747 192.563 62.747C192.674 62.747 192.77 62.7845 192.85 62.8593C192.93 62.9341 192.971 63.0492 192.971 63.2044C192.971 63.3596 192.93 63.476 192.85 63.5536C192.77 63.6285 192.674 63.6659 192.563 63.6659C192.447 63.6659 192.35 63.6285 192.272 63.5536C192.194 63.476 192.156 63.3596 192.156 63.2044ZM196.189 69.0792C195.529 69.0792 195.017 68.8769 194.654 68.4722C194.294 68.0648 194.114 67.4896 194.114 66.7468C194.114 65.9845 194.297 65.3955 194.663 64.9797C195.031 64.564 195.555 64.3561 196.234 64.3561C196.453 64.3561 196.672 64.3796 196.891 64.4268C197.11 64.4739 197.282 64.5293 197.407 64.5931L197.195 65.1793C197.042 65.1183 196.876 65.0684 196.696 65.0296C196.516 64.9881 196.356 64.9673 196.218 64.9673C195.292 64.9673 194.829 65.5577 194.829 66.7385C194.829 67.2984 194.941 67.728 195.166 68.0273C195.393 68.3267 195.728 68.4764 196.172 68.4764C196.552 68.4764 196.941 68.3946 197.34 68.2311V68.8423C197.035 69.0003 196.651 69.0792 196.189 69.0792ZM201.228 68.9961L201.091 68.3475H201.057C200.83 68.633 200.603 68.827 200.375 68.9296C200.151 69.0294 199.87 69.0792 199.531 69.0792C199.08 69.0792 198.725 68.9628 198.467 68.73C198.212 68.4972 198.084 68.1659 198.084 67.7363C198.084 66.8161 198.82 66.3338 200.292 66.2894L201.066 66.2645V65.9817C201.066 65.6242 200.988 65.3609 200.833 65.1918C200.68 65.0199 200.435 64.934 200.097 64.934C199.717 64.934 199.287 65.0504 198.808 65.2833L198.596 64.7552C198.82 64.6333 199.066 64.5376 199.332 64.4683C199.601 64.399 199.87 64.3644 200.138 64.3644C200.682 64.3644 201.084 64.485 201.344 64.7261C201.607 64.9673 201.739 65.3539 201.739 65.8861V68.9961H201.228ZM199.669 68.5096C200.098 68.5096 200.435 68.3918 200.679 68.1562C200.926 67.9206 201.049 67.5908 201.049 67.1667V66.7551L200.359 66.7842C199.81 66.8036 199.414 66.8895 199.17 67.042C198.929 67.1916 198.808 67.4259 198.808 67.7446C198.808 67.9941 198.883 68.184 199.032 68.3142C199.185 68.4445 199.397 68.5096 199.669 68.5096ZM203.855 68.9961H203.165V62.5267H203.855V68.9961Z" class="path-19"/> -<path d="M212.831 62.9175L210.565 68.9961H209.875L212.141 62.9175H212.831Z" class="path-20"/> -<path d="M221.559 68.9961H220.566V63.7698H218.778V62.9175H223.347V63.7698H221.559V68.9961ZM228.257 66.6886C228.257 67.4397 228.065 68.026 227.679 68.4473C227.294 68.8686 226.758 69.0792 226.07 69.0792C225.641 69.0792 225.261 68.9822 224.931 68.7882C224.601 68.5942 224.348 68.3156 224.17 67.9525C223.993 67.5894 223.904 67.1681 223.904 66.6886C223.904 65.9429 224.096 65.3609 224.478 64.9423C224.861 64.5238 225.4 64.3145 226.095 64.3145C226.761 64.3145 227.287 64.5293 227.675 64.9589C228.063 65.3858 228.257 65.9623 228.257 66.6886ZM224.91 66.6886C224.91 67.7502 225.303 68.281 226.087 68.281C226.863 68.281 227.251 67.7502 227.251 66.6886C227.251 65.638 226.86 65.1128 226.079 65.1128C225.669 65.1128 225.371 65.2486 225.185 65.5202C225.002 65.7919 224.91 66.1813 224.91 66.6886ZM230.328 66.568L230.881 65.8778L232.27 64.3977H233.396L231.546 66.3726L233.513 68.9961H232.365L230.889 66.9796L230.353 67.4203V68.9961H229.384V62.5267H230.353V65.6824L230.303 66.568H230.328ZM236.265 69.0792C235.55 69.0792 234.99 68.8714 234.585 68.4556C234.184 68.037 233.983 67.4619 233.983 66.7301C233.983 65.979 234.17 65.3886 234.544 64.9589C234.918 64.5293 235.432 64.3145 236.086 64.3145C236.693 64.3145 237.173 64.4988 237.525 64.8675C237.877 65.2361 238.053 65.7434 238.053 66.3892V66.9172H234.989C235.003 67.3635 235.123 67.7072 235.35 67.9483C235.578 68.1867 235.898 68.3059 236.311 68.3059C236.583 68.3059 236.835 68.281 237.068 68.2311C237.303 68.1784 237.555 68.0925 237.824 67.9733V68.7674C237.586 68.8811 237.345 68.9614 237.101 69.0086C236.857 69.0557 236.578 69.0792 236.265 69.0792ZM236.086 65.0546C235.776 65.0546 235.526 65.153 235.338 65.3498C235.152 65.5466 235.041 65.8335 235.005 66.2104H237.093C237.087 65.8307 236.996 65.5438 236.818 65.3498C236.641 65.153 236.397 65.0546 236.086 65.0546ZM243.209 68.9961H242.227V66.1688C242.227 65.8141 242.155 65.5493 242.011 65.3747C241.87 65.2001 241.644 65.1128 241.333 65.1128C240.92 65.1128 240.618 65.2347 240.427 65.4787C240.236 65.7226 240.14 66.1314 240.14 66.7052V68.9961H239.163V64.3977H239.928L240.065 65.0005H240.115C240.254 64.7816 240.451 64.6125 240.706 64.4933C240.961 64.3741 241.243 64.3145 241.554 64.3145C242.657 64.3145 243.209 64.8758 243.209 65.9984V68.9961ZM246.884 68.9961V62.9175H247.878V68.1438H250.451V68.9961H246.884ZM252.372 68.9961H251.395V64.3977H252.372V68.9961ZM251.337 63.1794C251.337 63.0048 251.384 62.8704 251.478 62.7761C251.575 62.6819 251.712 62.6348 251.89 62.6348C252.062 62.6348 252.195 62.6819 252.289 62.7761C252.386 62.8704 252.435 63.0048 252.435 63.1794C252.435 63.3458 252.386 63.4774 252.289 63.5744C252.195 63.6687 252.062 63.7158 251.89 63.7158C251.712 63.7158 251.575 63.6687 251.478 63.5744C251.384 63.4774 251.337 63.3458 251.337 63.1794ZM256.863 67.6864C256.863 68.1354 256.699 68.4805 256.372 68.7217C256.045 68.9601 255.576 69.0792 254.967 69.0792C254.354 69.0792 253.862 68.9864 253.491 68.8007V67.9567C254.031 68.2061 254.534 68.3309 255 68.3309C255.601 68.3309 255.902 68.1493 255.902 67.7862C255.902 67.6698 255.869 67.5728 255.802 67.4952C255.736 67.4175 255.626 67.3372 255.474 67.254C255.321 67.1709 255.109 67.0766 254.838 66.9713C254.308 66.7662 253.949 66.5611 253.761 66.3559C253.575 66.1508 253.482 65.8847 253.482 65.5577C253.482 65.1641 253.64 64.8592 253.956 64.643C254.275 64.424 254.707 64.3145 255.253 64.3145C255.794 64.3145 256.305 64.424 256.788 64.643L256.472 65.3789C255.976 65.1738 255.558 65.0712 255.22 65.0712C254.705 65.0712 254.447 65.2181 254.447 65.5119C254.447 65.6561 254.513 65.778 254.646 65.8778C254.782 65.9776 255.076 66.1148 255.528 66.2894C255.908 66.4363 256.183 66.5708 256.355 66.6927C256.527 66.8147 256.655 66.956 256.738 67.1168C256.821 67.2748 256.863 67.4647 256.863 67.6864ZM259.636 68.2893C259.874 68.2893 260.112 68.2519 260.351 68.177V68.9129C260.243 68.9601 260.103 68.9989 259.931 69.0294C259.762 69.0626 259.586 69.0792 259.403 69.0792C258.477 69.0792 258.014 68.5914 258.014 67.6157V65.1377H257.386V64.7053L258.06 64.3478L258.393 63.3749H258.995V64.3977H260.305V65.1377H258.995V67.5991C258.995 67.8347 259.054 68.0093 259.17 68.123C259.289 68.2338 259.444 68.2893 259.636 68.2893ZM262.251 68.9961H261.274V64.3977H262.251V68.9961ZM261.216 63.1794C261.216 63.0048 261.263 62.8704 261.357 62.7761C261.454 62.6819 261.591 62.6348 261.769 62.6348C261.94 62.6348 262.074 62.6819 262.168 62.7761C262.265 62.8704 262.313 63.0048 262.313 63.1794C262.313 63.3458 262.265 63.4774 262.168 63.5744C262.074 63.6687 261.94 63.7158 261.769 63.7158C261.591 63.7158 261.454 63.6687 261.357 63.5744C261.263 63.4774 261.216 63.3458 261.216 63.1794ZM267.698 68.9961H266.716V66.1688C266.716 65.8141 266.644 65.5493 266.5 65.3747C266.359 65.2001 266.133 65.1128 265.822 65.1128C265.409 65.1128 265.107 65.2347 264.916 65.4787C264.725 65.7226 264.629 66.1314 264.629 66.7052V68.9961H263.652V64.3977H264.417L264.554 65.0005H264.604C264.743 64.7816 264.94 64.6125 265.195 64.4933C265.45 64.3741 265.732 64.3145 266.043 64.3145C267.146 64.3145 267.698 64.8758 267.698 65.9984V68.9961ZM272.94 64.3977V64.934L272.155 65.0795C272.227 65.1765 272.286 65.2957 272.333 65.4371C272.38 65.5784 272.404 65.7281 272.404 65.8861C272.404 66.3601 272.241 66.7329 271.913 67.0045C271.586 67.2762 271.136 67.412 270.562 67.412C270.415 67.412 270.282 67.4009 270.163 67.3787C269.952 67.509 269.847 67.6615 269.847 67.8361C269.847 67.9414 269.896 68.0204 269.993 68.0731C270.092 68.1257 270.274 68.1521 270.537 68.1521H271.34C271.847 68.1521 272.232 68.2602 272.496 68.4764C272.759 68.6926 272.891 69.0044 272.891 69.4119C272.891 69.933 272.676 70.3349 272.246 70.6176C271.816 70.9003 271.196 71.0417 270.383 71.0417C269.757 71.0417 269.279 70.9308 268.949 70.7091C268.619 70.4873 268.454 70.1713 268.454 69.7611C268.454 69.4784 268.543 69.24 268.72 69.046C268.9 68.8547 269.151 68.7217 269.473 68.6468C269.343 68.5914 269.234 68.5027 269.149 68.3808C269.065 68.256 269.024 68.1257 269.024 67.9899C269.024 67.8181 269.072 67.6726 269.169 67.5534C269.266 67.4342 269.41 67.3164 269.602 67.2C269.363 67.0974 269.169 66.9311 269.02 66.701C268.873 66.4682 268.799 66.1966 268.799 65.8861C268.799 65.3872 268.956 65.0005 269.269 64.7261C269.585 64.4517 270.034 64.3145 270.616 64.3145C270.747 64.3145 270.882 64.3242 271.024 64.3436C271.168 64.3602 271.276 64.3783 271.348 64.3977H272.94ZM269.327 69.7112C269.327 69.9219 269.422 70.084 269.61 70.1977C269.801 70.3113 270.069 70.3681 270.413 70.3681C270.945 70.3681 271.341 70.2919 271.602 70.1395C271.862 69.987 271.992 69.7847 271.992 69.5324C271.992 69.3329 271.92 69.1901 271.776 69.1042C271.635 69.021 271.37 68.9795 270.982 68.9795H270.242C269.962 68.9795 269.739 69.0446 269.573 69.1749C269.409 69.3079 269.327 69.4867 269.327 69.7112ZM269.747 65.8861C269.747 66.1744 269.821 66.3961 269.968 66.5514C270.117 66.7066 270.331 66.7842 270.608 66.7842C271.173 66.7842 271.456 66.4821 271.456 65.8778C271.456 65.5784 271.385 65.3484 271.244 65.1876C271.105 65.0241 270.893 64.9423 270.608 64.9423C270.325 64.9423 270.11 65.0227 269.963 65.1835C269.819 65.3442 269.747 65.5784 269.747 65.8861Z" class="path-21"/> -<path d="M26.4379 36.4609H24.7344V27.5016H21.6696V26.0405H29.5027V27.5016H26.4379V36.4609ZM37.9203 32.5052C37.9203 33.7929 37.5901 34.7979 36.9296 35.5201C36.2691 36.2424 35.3497 36.6035 34.1713 36.6035C33.4347 36.6035 32.7838 36.4372 32.2183 36.1046C31.6529 35.7719 31.2181 35.2944 30.914 34.6719C30.6099 34.0495 30.4578 33.3272 30.4578 32.5052C30.4578 31.227 30.7857 30.2291 31.4414 29.5116C32.0971 28.7941 33.0213 28.4354 34.214 28.4354C35.3544 28.4354 36.2572 28.8036 36.9225 29.5401C37.5877 30.2719 37.9203 31.2602 37.9203 32.5052ZM32.1827 32.5052C32.1827 34.3251 32.855 35.235 34.1998 35.235C35.5302 35.235 36.1955 34.3251 36.1955 32.5052C36.1955 30.7043 35.5255 29.8038 34.1855 29.8038C33.4823 29.8038 32.9715 30.0367 32.6531 30.5023C32.3395 30.968 32.1827 31.6356 32.1827 32.5052ZM41.4698 32.2985L42.4178 31.1153L44.7984 28.5779H46.7299L43.5582 31.9635L46.9295 36.4609H44.9623L42.432 33.0041L41.5126 33.7596V36.4609H39.8519V25.3705H41.5126V30.7803L41.4271 32.2985H41.4698ZM51.6479 36.6035C50.422 36.6035 49.4622 36.2471 48.7684 35.5344C48.0794 34.8169 47.7349 33.8309 47.7349 32.5764C47.7349 31.2887 48.0557 30.2766 48.6971 29.5401C49.3386 28.8036 50.2201 28.4354 51.3414 28.4354C52.3821 28.4354 53.2041 28.7513 53.8076 29.3833C54.411 30.0153 54.7128 30.8848 54.7128 31.992V32.8972H49.4598C49.4835 33.6622 49.6902 34.2514 50.0799 34.6648C50.4695 35.0734 51.0183 35.2778 51.7263 35.2778C52.192 35.2778 52.6244 35.235 53.0235 35.1495C53.4274 35.0592 53.8598 34.9119 54.3207 34.7076V36.0689C53.9121 36.2637 53.4987 36.4015 53.0806 36.4823C52.6624 36.5631 52.1849 36.6035 51.6479 36.6035ZM51.3414 29.7041C50.8093 29.7041 50.3816 29.8727 50.0585 30.2101C49.7401 30.5475 49.5501 31.0393 49.4883 31.6855H53.0663C53.0568 31.0345 52.9 30.5427 52.5959 30.2101C52.2918 29.8727 51.8736 29.7041 51.3414 29.7041ZM63.5509 36.4609H61.8688V31.6142C61.8688 31.006 61.7452 30.5522 61.4982 30.2529C61.2558 29.9535 60.8686 29.8038 60.3364 29.8038C59.6284 29.8038 59.1104 30.0129 58.7826 30.4311C58.4547 30.8492 58.2908 31.5501 58.2908 32.5337V36.4609H56.6158V28.5779H57.9273L58.1625 29.6114H58.248C58.4856 29.236 58.823 28.9462 59.2601 28.7418C59.6973 28.5375 60.1819 28.4354 60.7141 28.4354C62.6053 28.4354 63.5509 29.3976 63.5509 31.322V36.4609ZM69.8516 36.4609V26.0405H71.5551V34.9998H75.967V36.4609H69.8516ZM79.2599 36.4609H77.585V28.5779H79.2599V36.4609ZM77.4852 26.4895C77.4852 26.1902 77.566 25.9597 77.7275 25.7982C77.8938 25.6366 78.129 25.5558 78.4331 25.5558C78.7277 25.5558 78.9558 25.6366 79.1174 25.7982C79.2837 25.9597 79.3668 26.1902 79.3668 26.4895C79.3668 26.7746 79.2837 27.0003 79.1174 27.1667C78.9558 27.3282 78.7277 27.409 78.4331 27.409C78.129 27.409 77.8938 27.3282 77.7275 27.1667C77.566 27.0003 77.4852 26.7746 77.4852 26.4895ZM86.9577 34.2158C86.9577 34.9855 86.6773 35.5771 86.1166 35.9905C85.5559 36.3992 84.7529 36.6035 83.7075 36.6035C82.6574 36.6035 81.814 36.4443 81.1772 36.1259V34.6791C82.1038 35.1067 82.9662 35.3205 83.7645 35.3205C84.7956 35.3205 85.3112 35.0093 85.3112 34.3868C85.3112 34.1873 85.2542 34.021 85.1401 33.8879C85.0261 33.7549 84.8384 33.6171 84.5771 33.4745C84.3157 33.332 83.9522 33.1704 83.4865 32.9898C82.579 32.6382 81.9636 32.2866 81.6405 31.935C81.3222 31.5833 81.163 31.1272 81.163 30.5665C81.163 29.8917 81.4338 29.3691 81.9755 28.9984C82.522 28.623 83.2632 28.4354 84.1993 28.4354C85.1259 28.4354 86.0026 28.623 86.8294 28.9984L86.2877 30.26C85.4371 29.9084 84.722 29.7326 84.1423 29.7326C83.2585 29.7326 82.8166 29.9844 82.8166 30.4881C82.8166 30.7352 82.9306 30.9442 83.1587 31.1153C83.3915 31.2864 83.8952 31.5216 84.6697 31.8209C85.3207 32.0728 85.7935 32.3032 86.0881 32.5123C86.3827 32.7214 86.6013 32.9637 86.7438 33.2393C86.8864 33.5101 86.9577 33.8356 86.9577 34.2158ZM91.7117 35.2493C92.1203 35.2493 92.529 35.1851 92.9376 35.0568V36.3184C92.7523 36.3992 92.5124 36.4657 92.2178 36.518C91.9279 36.575 91.6262 36.6035 91.3126 36.6035C89.7255 36.6035 88.932 35.7672 88.932 34.0946V29.8466H87.8557V29.1053L89.0104 28.4924L89.5806 26.8245H90.6141V28.5779H92.8592V29.8466H90.6141V34.0661C90.6141 34.47 90.7139 34.7693 90.9134 34.9642C91.1177 35.1542 91.3838 35.2493 91.7117 35.2493ZM96.1949 36.4609H94.5199V28.5779H96.1949V36.4609ZM94.4202 26.4895C94.4202 26.1902 94.5009 25.9597 94.6625 25.7982C94.8288 25.6366 95.064 25.5558 95.3681 25.5558C95.6627 25.5558 95.8908 25.6366 96.0524 25.7982C96.2187 25.9597 96.3018 26.1902 96.3018 26.4895C96.3018 26.7746 96.2187 27.0003 96.0524 27.1667C95.8908 27.3282 95.6627 27.409 95.3681 27.409C95.064 27.409 94.8288 27.3282 94.6625 27.1667C94.5009 27.0003 94.4202 26.7746 94.4202 26.4895ZM105.532 36.4609H103.85V31.6142C103.85 31.006 103.726 30.5522 103.479 30.2529C103.237 29.9535 102.85 29.8038 102.317 29.8038C101.609 29.8038 101.092 30.0129 100.764 30.4311C100.436 30.8492 100.272 31.5501 100.272 32.5337V36.4609H98.5969V28.5779H99.9084L100.144 29.6114H100.229C100.467 29.236 100.804 28.9462 101.241 28.7418C101.678 28.5375 102.163 28.4354 102.695 28.4354C104.586 28.4354 105.532 29.3976 105.532 31.322V36.4609ZM114.52 28.5779V29.4974L113.173 29.7468C113.296 29.9131 113.398 30.1174 113.479 30.3598C113.56 30.6021 113.6 30.8587 113.6 31.1296C113.6 31.9421 113.32 32.5812 112.759 33.0469C112.199 33.5125 111.426 33.7454 110.443 33.7454C110.191 33.7454 109.963 33.7263 109.759 33.6883C109.397 33.9117 109.217 34.173 109.217 34.4724C109.217 34.6529 109.3 34.7883 109.466 34.8786C109.637 34.9689 109.949 35.0141 110.4 35.0141H111.776C112.645 35.0141 113.306 35.1994 113.757 35.57C114.209 35.9406 114.434 36.4752 114.434 37.1737C114.434 38.067 114.066 38.756 113.329 39.2407C112.593 39.7253 111.529 39.9677 110.136 39.9677C109.062 39.9677 108.243 39.7776 107.677 39.3975C107.112 39.0173 106.829 38.4756 106.829 37.7724C106.829 37.2877 106.981 36.8791 107.285 36.5465C107.594 36.2186 108.024 35.9905 108.575 35.8622C108.352 35.7672 108.167 35.6151 108.019 35.4061C107.877 35.1922 107.806 34.9689 107.806 34.7361C107.806 34.4415 107.889 34.192 108.055 33.9877C108.221 33.7834 108.468 33.5814 108.796 33.3818C108.388 33.206 108.055 32.9209 107.799 32.5265C107.547 32.1274 107.421 31.6617 107.421 31.1296C107.421 30.2743 107.689 29.6114 108.226 29.141C108.768 28.6706 109.538 28.4354 110.535 28.4354C110.759 28.4354 110.992 28.452 111.234 28.4852C111.481 28.5138 111.666 28.5446 111.79 28.5779H114.52ZM108.326 37.6869C108.326 38.048 108.488 38.326 108.811 38.5208C109.138 38.7156 109.597 38.813 110.186 38.813C111.099 38.813 111.778 38.6823 112.225 38.421C112.671 38.1597 112.895 37.8128 112.895 37.3804C112.895 37.0383 112.771 36.7936 112.524 36.6463C112.282 36.5037 111.828 36.4324 111.163 36.4324H109.894C109.414 36.4324 109.032 36.5441 108.746 36.7674C108.466 36.9955 108.326 37.302 108.326 37.6869ZM109.046 31.1296C109.046 31.6237 109.172 32.0039 109.424 32.27C109.68 32.5361 110.046 32.6691 110.521 32.6691C111.491 32.6691 111.975 32.1512 111.975 31.1153C111.975 30.6021 111.854 30.2077 111.612 29.9321C111.374 29.6518 111.011 29.5116 110.521 29.5116C110.037 29.5116 109.668 29.6494 109.416 29.925C109.169 30.2006 109.046 30.6021 109.046 31.1296Z" class="path-22"/> -<path d="M244.763 190.949H243.088V184.221C243.088 183.418 243.107 182.781 243.145 182.311C243.036 182.425 242.901 182.551 242.739 182.688C242.582 182.826 242.05 183.263 241.143 184L240.301 182.938L243.366 180.529H244.763V190.949ZM254.856 182.924C254.856 183.584 254.663 184.135 254.279 184.577C253.894 185.014 253.352 185.309 252.653 185.461V185.518C253.49 185.623 254.117 185.884 254.535 186.302C254.953 186.715 255.162 187.267 255.162 187.956C255.162 188.958 254.808 189.733 254.1 190.279C253.392 190.821 252.385 191.092 251.078 191.092C249.924 191.092 248.95 190.904 248.156 190.529V189.039C248.598 189.258 249.066 189.426 249.56 189.545C250.054 189.664 250.529 189.723 250.986 189.723C251.793 189.723 252.397 189.574 252.796 189.274C253.195 188.975 253.395 188.512 253.395 187.884C253.395 187.328 253.174 186.92 252.732 186.658C252.29 186.397 251.596 186.266 250.651 186.266H249.745V184.905H250.665C252.328 184.905 253.16 184.33 253.16 183.18C253.16 182.734 253.015 182.389 252.725 182.147C252.435 181.904 252.007 181.783 251.442 181.783C251.047 181.783 250.667 181.84 250.301 181.954C249.936 182.064 249.503 182.28 249.004 182.603L248.185 181.434C249.14 180.731 250.249 180.379 251.513 180.379C252.563 180.379 253.383 180.605 253.972 181.056C254.561 181.508 254.856 182.13 254.856 182.924ZM256.552 186.509C256.552 182.432 258.213 180.393 261.534 180.393C262.057 180.393 262.499 180.434 262.86 180.515V181.912C262.499 181.807 262.081 181.755 261.606 181.755C260.489 181.755 259.65 182.054 259.09 182.653C258.529 183.251 258.225 184.211 258.177 185.532H258.263C258.486 185.147 258.8 184.85 259.204 184.641C259.608 184.428 260.083 184.321 260.629 184.321C261.575 184.321 262.311 184.61 262.839 185.19C263.366 185.77 263.63 186.556 263.63 187.549C263.63 188.642 263.323 189.507 262.71 190.144C262.102 190.776 261.271 191.092 260.216 191.092C259.47 191.092 258.821 190.914 258.27 190.557C257.719 190.196 257.293 189.673 256.994 188.989C256.7 188.3 256.552 187.473 256.552 186.509ZM260.187 189.709C260.762 189.709 261.204 189.524 261.513 189.153C261.827 188.782 261.983 188.253 261.983 187.564C261.983 186.965 261.836 186.495 261.541 186.152C261.252 185.81 260.814 185.639 260.23 185.639C259.869 185.639 259.536 185.718 259.232 185.874C258.928 186.026 258.688 186.238 258.512 186.509C258.336 186.775 258.249 187.048 258.249 187.328C258.249 187.998 258.429 188.564 258.79 189.025C259.156 189.481 259.622 189.709 260.187 189.709ZM267.158 189.417C266.93 190.301 266.512 191.439 265.904 192.831H264.67C264.998 191.548 265.243 190.355 265.405 189.253H267.051L267.158 189.417ZM273.687 190.949H272.012V184.221C272.012 183.418 272.031 182.781 272.069 182.311C271.96 182.425 271.824 182.551 271.663 182.688C271.506 182.826 270.974 183.263 270.066 184L269.225 182.938L272.29 180.529H273.687V190.949ZM283.779 182.924C283.779 183.584 283.587 184.135 283.202 184.577C282.817 185.014 282.275 185.309 281.577 185.461V185.518C282.413 185.623 283.04 185.884 283.459 186.302C283.877 186.715 284.086 187.267 284.086 187.956C284.086 188.958 283.732 189.733 283.024 190.279C282.316 190.821 281.308 191.092 280.002 191.092C278.847 191.092 277.873 190.904 277.079 190.529V189.039C277.521 189.258 277.989 189.426 278.484 189.545C278.978 189.664 279.453 189.723 279.909 189.723C280.717 189.723 281.32 189.574 281.72 189.274C282.119 188.975 282.318 188.512 282.318 187.884C282.318 187.328 282.097 186.92 281.655 186.658C281.213 186.397 280.52 186.266 279.574 186.266H278.669V184.905H279.588C281.251 184.905 282.083 184.33 282.083 183.18C282.083 182.734 281.938 182.389 281.648 182.147C281.358 181.904 280.931 181.783 280.365 181.783C279.971 181.783 279.591 181.84 279.225 181.954C278.859 182.064 278.427 182.28 277.928 182.603L277.108 181.434C278.063 180.731 279.173 180.379 280.437 180.379C281.487 180.379 282.306 180.605 282.896 181.056C283.485 181.508 283.779 182.13 283.779 182.924ZM292.511 185.739C292.511 187.549 292.218 188.894 291.634 189.773C291.054 190.652 290.166 191.092 288.968 191.092C287.809 191.092 286.93 190.638 286.331 189.73C285.732 188.823 285.433 187.492 285.433 185.739C285.433 183.9 285.723 182.546 286.302 181.676C286.887 180.802 287.776 180.365 288.968 180.365C290.132 180.365 291.014 180.821 291.612 181.733C292.211 182.646 292.511 183.981 292.511 185.739ZM287.129 185.739C287.129 187.16 287.274 188.174 287.564 188.782C287.859 189.391 288.327 189.695 288.968 189.695C289.61 189.695 290.078 189.386 290.372 188.768C290.672 188.15 290.821 187.141 290.821 185.739C290.821 184.342 290.672 183.332 290.372 182.71C290.078 182.083 289.61 181.769 288.968 181.769C288.327 181.769 287.859 182.075 287.564 182.688C287.274 183.301 287.129 184.318 287.129 185.739ZM296.081 189.417C295.853 190.301 295.435 191.439 294.827 192.831H293.594C293.922 191.548 294.167 190.355 294.328 189.253H295.975L296.081 189.417ZM304.756 185.739C304.756 187.549 304.463 188.894 303.879 189.773C303.299 190.652 302.411 191.092 301.213 191.092C300.054 191.092 299.175 190.638 298.576 189.73C297.977 188.823 297.678 187.492 297.678 185.739C297.678 183.9 297.968 182.546 298.548 181.676C299.132 180.802 300.021 180.365 301.213 180.365C302.377 180.365 303.259 180.821 303.858 181.733C304.456 182.646 304.756 183.981 304.756 185.739ZM299.374 185.739C299.374 187.16 299.519 188.174 299.809 188.782C300.104 189.391 300.572 189.695 301.213 189.695C301.855 189.695 302.323 189.386 302.617 188.768C302.917 188.15 303.066 187.141 303.066 185.739C303.066 184.342 302.917 183.332 302.617 182.71C302.323 182.083 301.855 181.769 301.213 181.769C300.572 181.769 300.104 182.075 299.809 182.688C299.519 183.301 299.374 184.318 299.374 185.739ZM313.095 185.739C313.095 187.549 312.803 188.894 312.218 189.773C311.638 190.652 310.75 191.092 309.552 191.092C308.393 191.092 307.514 190.638 306.915 189.73C306.317 188.823 306.017 187.492 306.017 185.739C306.017 183.9 306.307 182.546 306.887 181.676C307.471 180.802 308.36 180.365 309.552 180.365C310.717 180.365 311.598 180.821 312.197 181.733C312.795 182.646 313.095 183.981 313.095 185.739ZM307.714 185.739C307.714 187.16 307.858 188.174 308.148 188.782C308.443 189.391 308.911 189.695 309.552 189.695C310.194 189.695 310.662 189.386 310.957 188.768C311.256 188.15 311.406 187.141 311.406 185.739C311.406 184.342 311.256 183.332 310.957 182.71C310.662 182.083 310.194 181.769 309.552 181.769C308.911 181.769 308.443 182.075 308.148 182.688C307.858 183.301 307.714 184.318 307.714 185.739ZM321.434 185.739C321.434 187.549 321.142 188.894 320.557 189.773C319.978 190.652 319.089 191.092 317.892 191.092C316.732 191.092 315.853 190.638 315.254 189.73C314.656 188.823 314.356 187.492 314.356 185.739C314.356 183.9 314.646 182.546 315.226 181.676C315.81 180.802 316.699 180.365 317.892 180.365C319.056 180.365 319.937 180.821 320.536 181.733C321.135 182.646 321.434 183.981 321.434 185.739ZM316.053 185.739C316.053 187.16 316.198 188.174 316.488 188.782C316.782 189.391 317.25 189.695 317.892 189.695C318.533 189.695 319.001 189.386 319.296 188.768C319.595 188.15 319.745 187.141 319.745 185.739C319.745 184.342 319.595 183.332 319.296 182.71C319.001 182.083 318.533 181.769 317.892 181.769C317.25 181.769 316.782 182.075 316.488 182.688C316.198 183.301 316.053 184.318 316.053 185.739Z" class="path-23"/> -<path d="M243.286 167.478C243.286 168.093 243.075 168.567 242.654 168.9C242.235 169.23 241.635 169.394 240.853 169.394H240.138V171.785H239.431V165.707H241.007C242.526 165.707 243.286 166.297 243.286 167.478ZM240.138 168.787H240.774C241.401 168.787 241.854 168.686 242.134 168.484C242.414 168.282 242.554 167.957 242.554 167.511C242.554 167.109 242.422 166.81 242.159 166.613C241.896 166.416 241.485 166.318 240.928 166.318H240.138V168.787ZM249.31 171.785H248.504L245.182 166.684H245.148C245.193 167.282 245.215 167.831 245.215 168.33V171.785H244.562V165.707H245.36L248.674 170.787H248.707C248.702 170.712 248.689 170.473 248.67 170.068C248.65 169.661 248.644 169.37 248.649 169.195V165.707H249.31V171.785ZM255.372 171.785H254.541L252.324 168.837L251.688 169.403V171.785H250.982V165.707H251.688V168.721L254.445 165.707H255.281L252.836 168.347L255.372 171.785ZM261.259 170.542C261.259 170.966 261.101 171.293 260.785 171.523C260.469 171.753 260.026 171.868 259.455 171.868C258.851 171.868 258.38 171.773 258.041 171.581V170.941C258.26 171.052 258.495 171.139 258.744 171.203C258.996 171.267 259.239 171.299 259.472 171.299C259.832 171.299 260.109 171.242 260.303 171.128C260.497 171.012 260.594 170.836 260.594 170.6C260.594 170.423 260.517 170.272 260.361 170.147C260.209 170.02 259.91 169.87 259.463 169.698C259.039 169.54 258.737 169.403 258.557 169.286C258.38 169.167 258.246 169.033 258.158 168.883C258.072 168.733 258.029 168.555 258.029 168.347C258.029 167.975 258.18 167.683 258.482 167.469C258.784 167.253 259.199 167.145 259.725 167.145C260.216 167.145 260.695 167.245 261.164 167.444L260.918 168.006C260.461 167.817 260.047 167.723 259.675 167.723C259.348 167.723 259.102 167.774 258.935 167.877C258.769 167.979 258.686 168.121 258.686 168.301C258.686 168.423 258.716 168.527 258.777 168.613C258.841 168.699 258.942 168.781 259.081 168.858C259.219 168.936 259.485 169.048 259.879 169.195C260.42 169.392 260.784 169.59 260.973 169.789C261.164 169.989 261.259 170.24 261.259 170.542ZM263.858 171.299C263.98 171.299 264.098 171.29 264.211 171.274C264.325 171.254 264.415 171.235 264.482 171.216V171.744C264.407 171.78 264.296 171.809 264.149 171.831C264.005 171.856 263.875 171.868 263.758 171.868C262.877 171.868 262.436 171.404 262.436 170.475V167.765H261.783V167.432L262.436 167.145L262.727 166.172H263.126V167.228H264.448V167.765H263.126V170.446C263.126 170.721 263.191 170.931 263.322 171.078C263.452 171.225 263.631 171.299 263.858 171.299ZM268.199 171.785L268.061 171.137H268.028C267.801 171.422 267.574 171.616 267.346 171.719C267.122 171.818 266.84 171.868 266.502 171.868C266.051 171.868 265.696 171.752 265.438 171.519C265.183 171.286 265.055 170.955 265.055 170.525C265.055 169.605 265.791 169.123 267.263 169.078L268.037 169.054V168.771C268.037 168.413 267.959 168.15 267.804 167.981C267.651 167.809 267.406 167.723 267.068 167.723C266.688 167.723 266.258 167.839 265.779 168.072L265.567 167.544C265.791 167.422 266.037 167.327 266.303 167.257C266.572 167.188 266.84 167.153 267.109 167.153C267.653 167.153 268.055 167.274 268.315 167.515C268.578 167.756 268.71 168.143 268.71 168.675V171.785H268.199ZM266.64 171.299C267.069 171.299 267.406 171.181 267.65 170.945C267.897 170.71 268.02 170.38 268.02 169.956V169.544L267.33 169.573C266.781 169.593 266.385 169.679 266.141 169.831C265.899 169.981 265.779 170.215 265.779 170.534C265.779 170.783 265.854 170.973 266.003 171.103C266.156 171.234 266.368 171.299 266.64 171.299ZM270.818 169.453C270.937 169.284 271.119 169.062 271.363 168.787L272.835 167.228H273.654L271.808 169.17L273.782 171.785H272.947L271.338 169.631L270.818 170.08V171.785H270.136V165.316H270.818V168.746C270.818 168.898 270.807 169.134 270.785 169.453H270.818ZM276.535 171.868C275.861 171.868 275.329 171.663 274.938 171.253C274.55 170.843 274.356 170.273 274.356 169.544C274.356 168.81 274.536 168.226 274.897 167.794C275.26 167.361 275.746 167.145 276.356 167.145C276.927 167.145 277.379 167.334 277.712 167.711C278.044 168.085 278.21 168.58 278.21 169.195V169.631H275.071C275.085 170.166 275.22 170.572 275.475 170.85C275.732 171.127 276.094 171.265 276.56 171.265C277.05 171.265 277.536 171.163 278.015 170.958V171.573C277.771 171.678 277.54 171.753 277.321 171.798C277.104 171.845 276.843 171.868 276.535 171.868ZM276.348 167.723C275.982 167.723 275.689 167.842 275.471 168.081C275.254 168.319 275.127 168.649 275.088 169.07H277.47C277.47 168.635 277.373 168.302 277.179 168.072C276.985 167.839 276.708 167.723 276.348 167.723ZM282.493 171.174H282.455C282.137 171.637 281.66 171.868 281.025 171.868C280.429 171.868 279.965 171.665 279.632 171.257C279.303 170.85 279.138 170.27 279.138 169.519C279.138 168.768 279.304 168.185 279.637 167.769C279.969 167.353 280.432 167.145 281.025 167.145C281.643 167.145 282.117 167.37 282.447 167.819H282.501L282.472 167.49L282.455 167.17V165.316H283.146V171.785H282.584L282.493 171.174ZM281.113 171.29C281.584 171.29 281.925 171.163 282.135 170.908C282.349 170.65 282.455 170.236 282.455 169.665V169.519C282.455 168.873 282.347 168.413 282.131 168.139C281.918 167.862 281.575 167.723 281.104 167.723C280.7 167.723 280.389 167.881 280.173 168.197C279.959 168.51 279.853 168.954 279.853 169.528C279.853 170.11 279.959 170.549 280.173 170.846C280.386 171.142 280.7 171.29 281.113 171.29Z" class="path-24"/> -<path d="M244.112 201.419C244.112 201.743 243.991 202.01 243.749 202.221C243.507 202.43 243.168 202.562 242.733 202.617V203.444H242.274V202.649C242.007 202.649 241.75 202.629 241.5 202.588C241.251 202.546 241.046 202.487 240.887 202.414V201.858C241.084 201.946 241.311 202.018 241.568 202.075C241.827 202.13 242.062 202.157 242.274 202.157V200.589C241.787 200.435 241.444 200.255 241.247 200.051C241.052 199.847 240.955 199.583 240.955 199.26C240.955 198.949 241.075 198.693 241.315 198.494C241.557 198.294 241.877 198.173 242.274 198.13V197.481H242.733V198.123C243.17 198.135 243.592 198.223 243.998 198.387L243.813 198.853C243.459 198.713 243.099 198.63 242.733 198.604V200.151C243.106 200.269 243.385 200.386 243.571 200.5C243.756 200.612 243.893 200.741 243.981 200.888C244.069 201.033 244.112 201.21 244.112 201.419ZM243.507 201.466C243.507 201.295 243.453 201.157 243.346 201.052C243.242 200.945 243.037 200.84 242.733 200.735V202.121C243.249 202.05 243.507 201.832 243.507 201.466ZM241.557 199.253C241.557 199.433 241.611 199.578 241.718 199.687C241.825 199.797 242.01 199.9 242.274 199.997V198.618C242.038 198.656 241.86 198.731 241.739 198.843C241.618 198.952 241.557 199.089 241.557 199.253ZM250.078 199.035C250.078 199.368 249.984 199.64 249.797 199.851C249.611 200.063 249.348 200.204 249.006 200.275V200.304C249.424 200.356 249.734 200.489 249.936 200.703C250.138 200.917 250.239 201.197 250.239 201.544C250.239 202.041 250.066 202.423 249.722 202.692C249.377 202.958 248.888 203.091 248.254 203.091C247.978 203.091 247.725 203.069 247.494 203.027C247.266 202.986 247.044 202.914 246.828 202.809V202.246C247.054 202.358 247.294 202.443 247.548 202.503C247.805 202.56 248.047 202.588 248.275 202.588C249.175 202.588 249.626 202.236 249.626 201.53C249.626 200.898 249.129 200.582 248.136 200.582H247.623V200.072H248.143C248.549 200.072 248.871 199.983 249.109 199.805C249.346 199.624 249.465 199.375 249.465 199.057C249.465 198.802 249.377 198.603 249.202 198.458C249.028 198.313 248.792 198.241 248.492 198.241C248.264 198.241 248.049 198.271 247.847 198.333C247.645 198.395 247.415 198.509 247.156 198.675L246.857 198.276C247.07 198.107 247.316 197.976 247.594 197.881C247.875 197.783 248.169 197.734 248.478 197.734C248.984 197.734 249.377 197.851 249.658 198.084C249.938 198.314 250.078 198.631 250.078 199.035ZM251.917 202.171L251.971 202.253C251.909 202.491 251.82 202.767 251.703 203.08C251.587 203.396 251.466 203.69 251.34 203.96H250.894C250.958 203.713 251.029 203.408 251.105 203.044C251.183 202.681 251.238 202.39 251.268 202.171H251.917ZM256.268 200.407C256.268 201.308 256.126 201.98 255.841 202.424C255.558 202.869 255.124 203.091 254.54 203.091C253.979 203.091 253.553 202.864 253.261 202.41C252.968 201.954 252.822 201.286 252.822 200.407C252.822 199.5 252.964 198.826 253.246 198.387C253.529 197.947 253.96 197.727 254.54 197.727C255.105 197.727 255.534 197.957 255.827 198.415C256.121 198.874 256.268 199.538 256.268 200.407ZM253.421 200.407C253.421 201.165 253.51 201.718 253.688 202.064C253.866 202.409 254.15 202.581 254.54 202.581C254.934 202.581 255.22 202.407 255.395 202.057C255.574 201.706 255.663 201.156 255.663 200.407C255.663 199.659 255.574 199.111 255.395 198.764C255.22 198.415 254.934 198.241 254.54 198.241C254.15 198.241 253.866 198.413 253.688 198.757C253.51 199.099 253.421 199.649 253.421 200.407ZM260.445 200.407C260.445 201.308 260.303 201.98 260.018 202.424C259.735 202.869 259.301 203.091 258.717 203.091C258.156 203.091 257.73 202.864 257.437 202.41C257.145 201.954 256.999 201.286 256.999 200.407C256.999 199.5 257.14 198.826 257.423 198.387C257.706 197.947 258.137 197.727 258.717 197.727C259.282 197.727 259.711 197.957 260.003 198.415C260.298 198.874 260.445 199.538 260.445 200.407ZM257.598 200.407C257.598 201.165 257.687 201.718 257.865 202.064C258.043 202.409 258.327 202.581 258.717 202.581C259.111 202.581 259.396 202.407 259.572 202.057C259.75 201.706 259.839 201.156 259.839 200.407C259.839 199.659 259.75 199.111 259.572 198.764C259.396 198.415 259.111 198.241 258.717 198.241C258.327 198.241 258.043 198.413 257.865 198.757C257.687 199.099 257.598 199.649 257.598 200.407ZM264.622 200.407C264.622 201.308 264.479 201.98 264.194 202.424C263.912 202.869 263.478 203.091 262.893 203.091C262.333 203.091 261.906 202.864 261.614 202.41C261.322 201.954 261.176 201.286 261.176 200.407C261.176 199.5 261.317 198.826 261.6 198.387C261.883 197.947 262.314 197.727 262.893 197.727C263.459 197.727 263.888 197.957 264.18 198.415C264.475 198.874 264.622 199.538 264.622 200.407ZM261.774 200.407C261.774 201.165 261.864 201.718 262.042 202.064C262.22 202.409 262.504 202.581 262.893 202.581C263.288 202.581 263.573 202.407 263.749 202.057C263.927 201.706 264.016 201.156 264.016 200.407C264.016 199.659 263.927 199.111 263.749 198.764C263.573 198.415 263.288 198.241 262.893 198.241C262.504 198.241 262.22 198.413 262.042 198.757C261.864 199.099 261.774 199.649 261.774 200.407ZM266.236 202.171L266.29 202.253C266.228 202.491 266.139 202.767 266.022 203.08C265.906 203.396 265.785 203.69 265.659 203.96H265.213C265.278 203.713 265.348 203.408 265.424 203.044C265.502 202.681 265.557 202.39 265.588 202.171H266.236ZM270.588 200.407C270.588 201.308 270.445 201.98 270.16 202.424C269.877 202.869 269.444 203.091 268.859 203.091C268.299 203.091 267.872 202.864 267.58 202.41C267.288 201.954 267.141 201.286 267.141 200.407C267.141 199.5 267.283 198.826 267.566 198.387C267.848 197.947 268.28 197.727 268.859 197.727C269.425 197.727 269.853 197.957 270.146 198.415C270.44 198.874 270.588 199.538 270.588 200.407ZM267.74 200.407C267.74 201.165 267.829 201.718 268.007 202.064C268.186 202.409 268.47 202.581 268.859 202.581C269.254 202.581 269.539 202.407 269.715 202.057C269.893 201.706 269.982 201.156 269.982 200.407C269.982 199.659 269.893 199.111 269.715 198.764C269.539 198.415 269.254 198.241 268.859 198.241C268.47 198.241 268.186 198.413 268.007 198.757C267.829 199.099 267.74 199.649 267.74 200.407ZM274.764 200.407C274.764 201.308 274.622 201.98 274.337 202.424C274.054 202.869 273.62 203.091 273.036 203.091C272.475 203.091 272.049 202.864 271.757 202.41C271.464 201.954 271.318 201.286 271.318 200.407C271.318 199.5 271.46 198.826 271.742 198.387C272.025 197.947 272.456 197.727 273.036 197.727C273.601 197.727 274.03 197.957 274.322 198.415C274.617 198.874 274.764 199.538 274.764 200.407ZM271.917 200.407C271.917 201.165 272.006 201.718 272.184 202.064C272.362 202.409 272.646 202.581 273.036 202.581C273.43 202.581 273.715 202.407 273.891 202.057C274.069 201.706 274.159 201.156 274.159 200.407C274.159 199.659 274.069 199.111 273.891 198.764C273.715 198.415 273.43 198.241 273.036 198.241C272.646 198.241 272.362 198.413 272.184 198.757C272.006 199.099 271.917 199.649 271.917 200.407ZM278.941 200.407C278.941 201.308 278.799 201.98 278.513 202.424C278.231 202.869 277.797 203.091 277.213 203.091C276.652 203.091 276.225 202.864 275.933 202.41C275.641 201.954 275.495 201.286 275.495 200.407C275.495 199.5 275.636 198.826 275.919 198.387C276.202 197.947 276.633 197.727 277.213 197.727C277.778 197.727 278.207 197.957 278.499 198.415C278.794 198.874 278.941 199.538 278.941 200.407ZM276.094 200.407C276.094 201.165 276.183 201.718 276.361 202.064C276.539 202.409 276.823 202.581 277.213 202.581C277.607 202.581 277.892 202.407 278.068 202.057C278.246 201.706 278.335 201.156 278.335 200.407C278.335 199.659 278.246 199.111 278.068 198.764C277.892 198.415 277.607 198.241 277.213 198.241C276.823 198.241 276.539 198.413 276.361 198.757C276.183 199.099 276.094 199.649 276.094 200.407Z" class="path-25"/> -<path d="M56.8011 186.509C56.8011 182.432 58.4618 180.393 61.7832 180.393C62.3059 180.393 62.7478 180.434 63.1089 180.515V181.912C62.7478 181.807 62.3297 181.755 61.8545 181.755C60.7379 181.755 59.8992 182.054 59.3385 182.653C58.7778 183.251 58.4737 184.211 58.4262 185.532H58.5117C58.735 185.147 59.0486 184.85 59.4525 184.641C59.8564 184.428 60.3316 184.321 60.878 184.321C61.8236 184.321 62.5601 184.61 63.0876 185.19C63.615 185.77 63.8787 186.556 63.8787 187.549C63.8787 188.642 63.5722 189.507 62.9593 190.144C62.3511 190.776 61.5195 191.092 60.4646 191.092C59.7186 191.092 59.07 190.914 58.5188 190.557C57.9676 190.196 57.5424 189.673 57.243 188.989C56.9484 188.3 56.8011 187.473 56.8011 186.509ZM60.4361 189.709C61.0111 189.709 61.453 189.524 61.7618 189.153C62.0755 188.782 62.2323 188.253 62.2323 187.564C62.2323 186.965 62.085 186.495 61.7904 186.152C61.5005 185.81 61.0633 185.639 60.4789 185.639C60.1178 185.639 59.7851 185.718 59.481 185.874C59.1769 186.026 58.937 186.238 58.7612 186.509C58.5853 186.775 58.4974 187.048 58.4974 187.328C58.4974 187.998 58.678 188.564 59.0391 189.025C59.405 189.481 59.8707 189.709 60.4361 189.709ZM72.1751 190.949H65.1118V189.681L67.7989 186.979C68.5924 186.167 69.1174 185.592 69.374 185.254C69.6354 184.912 69.8254 184.591 69.9442 184.292C70.063 183.993 70.1224 183.672 70.1224 183.33C70.1224 182.859 69.9799 182.489 69.6948 182.218C69.4144 181.947 69.0248 181.812 68.5259 181.812C68.1267 181.812 67.7395 181.885 67.3641 182.033C66.9934 182.18 66.5634 182.446 66.074 182.831L65.1688 181.726C65.7485 181.237 66.3116 180.89 66.858 180.686C67.4045 180.481 67.9865 180.379 68.6043 180.379C69.5736 180.379 70.3505 180.633 70.935 181.142C71.5194 181.645 71.8116 182.325 71.8116 183.18C71.8116 183.651 71.7261 184.097 71.5551 184.52C71.3887 184.943 71.1298 185.38 70.7782 185.832C70.4313 186.278 69.8516 186.884 69.039 187.649L67.2286 189.403V189.474H72.1751V190.949ZM80.5143 185.739C80.5143 187.549 80.2221 188.894 79.6377 189.773C79.058 190.652 78.1694 191.092 76.972 191.092C75.8126 191.092 74.9335 190.638 74.3348 189.73C73.7361 188.823 73.4367 187.492 73.4367 185.739C73.4367 183.9 73.7266 182.546 74.3063 181.676C74.8907 180.802 75.7793 180.365 76.972 180.365C78.1361 180.365 79.0176 180.821 79.6163 181.733C80.215 182.646 80.5143 183.981 80.5143 185.739ZM75.1331 185.739C75.1331 187.16 75.278 188.174 75.5678 188.782C75.8624 189.391 76.3305 189.695 76.972 189.695C77.6134 189.695 78.0815 189.386 78.3761 188.768C78.6754 188.15 78.8251 187.141 78.8251 185.739C78.8251 184.342 78.6754 183.332 78.3761 182.71C78.0815 182.083 77.6134 181.769 76.972 181.769C76.3305 181.769 75.8624 182.075 75.5678 182.688C75.278 183.301 75.1331 184.318 75.1331 185.739ZM89.1933 186.103C89.1933 186.828 88.9557 187.384 88.4805 187.77C88.0054 188.157 87.329 188.35 86.4516 188.35H85.7293V190.949H84.5937V184.002H86.5941C87.4621 184.002 88.1115 184.18 88.5423 184.534C88.9763 184.889 89.1933 185.412 89.1933 186.103ZM85.7293 187.395H86.3328C86.9156 187.395 87.3433 187.294 87.6157 187.091C87.8882 186.888 88.0244 186.571 88.0244 186.141C88.0244 185.741 87.9024 185.444 87.6585 185.247C87.4146 185.051 87.0344 184.953 86.5181 184.953H85.7293V187.395ZM96.3683 190.949H94.9761L91.5596 185.414H91.5216L91.5454 185.722C91.5897 186.312 91.6119 186.85 91.6119 187.338V190.949H90.5808V184.002H91.9588L95.3657 189.509H95.3942C95.3879 189.437 95.3752 189.172 95.3562 188.716C95.3372 188.257 95.3277 187.899 95.3277 187.642V184.002H96.3683V190.949ZM103.505 190.949H102.189L100.008 187.804L99.3381 188.35V190.949H98.2025V184.002H99.3381V187.319C99.6486 186.939 99.9574 186.573 100.265 186.221L102.142 184.002H103.434C102.221 185.428 101.351 186.443 100.825 187.048L103.505 190.949Z" class="path-26"/> -<path d="M59.8303 165.707H60.5912L58.4001 171.785H57.7016L55.5229 165.707H56.2713L57.6683 169.64C57.8291 170.092 57.9566 170.531 58.0508 170.958C58.1506 170.509 58.2809 170.061 58.4417 169.615L59.8303 165.707ZM65.2603 169.503C65.2603 170.245 65.0732 170.826 64.699 171.245C64.3248 171.66 63.8079 171.868 63.1482 171.868C62.7407 171.868 62.379 171.773 62.063 171.581C61.7471 171.39 61.5031 171.116 61.3313 170.758C61.1594 170.401 61.0735 169.982 61.0735 169.503C61.0735 168.76 61.2592 168.182 61.6306 167.769C62.0021 167.353 62.5176 167.145 63.1773 167.145C63.8148 167.145 64.3207 167.357 64.6949 167.781C65.0718 168.205 65.2603 168.779 65.2603 169.503ZM61.7886 169.503C61.7886 170.085 61.905 170.528 62.1379 170.833C62.3707 171.138 62.713 171.29 63.1648 171.29C63.6166 171.29 63.959 171.139 64.1918 170.837C64.4274 170.532 64.5452 170.087 64.5452 169.503C64.5452 168.923 64.4274 168.484 64.1918 168.185C63.959 167.882 63.6139 167.731 63.1565 167.731C62.7047 167.731 62.3638 167.88 62.1337 168.176C61.9037 168.473 61.7886 168.915 61.7886 169.503ZM67.9462 171.299C68.0682 171.299 68.186 171.29 68.2996 171.274C68.4133 171.254 68.5033 171.235 68.5699 171.216V171.744C68.495 171.78 68.3842 171.809 68.2373 171.831C68.0931 171.856 67.9628 171.868 67.8464 171.868C66.965 171.868 66.5243 171.404 66.5243 170.475V167.765H65.8715V167.432L66.5243 167.145L66.8153 166.172H67.2145V167.228H68.5366V167.765H67.2145V170.446C67.2145 170.721 67.2796 170.931 67.4099 171.078C67.5401 171.225 67.7189 171.299 67.9462 171.299ZM71.4096 171.868C70.736 171.868 70.2039 171.663 69.813 171.253C69.425 170.843 69.2309 170.273 69.2309 169.544C69.2309 168.81 69.4111 168.226 69.7715 167.794C70.1346 167.361 70.621 167.145 71.2308 167.145C71.8018 167.145 72.2536 167.334 72.5862 167.711C72.9188 168.085 73.0852 168.58 73.0852 169.195V169.631H69.9461C69.9599 170.166 70.0944 170.572 70.3494 170.85C70.6072 171.127 70.9689 171.265 71.4345 171.265C71.9251 171.265 72.4102 171.163 72.8897 170.958V171.573C72.6458 171.678 72.4144 171.753 72.1954 171.798C71.9792 171.845 71.7173 171.868 71.4096 171.868ZM71.2225 167.723C70.8566 167.723 70.5642 167.842 70.3452 168.081C70.129 168.319 70.0015 168.649 69.9627 169.07H72.3451C72.3451 168.635 72.2481 168.302 72.054 168.072C71.86 167.839 71.5828 167.723 71.2225 167.723ZM80.0119 170.168C80.0119 170.703 79.8179 171.12 79.4298 171.419C79.0418 171.719 78.5151 171.868 77.8499 171.868C77.1292 171.868 76.5749 171.775 76.1868 171.59V170.908C76.4363 171.013 76.7079 171.096 77.0017 171.157C77.2955 171.218 77.5866 171.249 77.8748 171.249C78.3461 171.249 78.7008 171.16 78.9392 170.983C79.1776 170.803 79.2968 170.553 79.2968 170.234C79.2968 170.024 79.2538 169.852 79.1679 169.719C79.0847 169.583 78.9434 169.458 78.7438 169.345C78.547 169.231 78.2463 169.102 77.8416 168.958C77.2761 168.756 76.8714 168.516 76.6275 168.239C76.3864 167.961 76.2658 167.6 76.2658 167.153C76.2658 166.685 76.4418 166.312 76.7938 166.035C77.1459 165.758 77.6115 165.619 78.1908 165.619C78.7951 165.619 79.3508 165.73 79.8581 165.952L79.6377 166.567C79.136 166.357 78.6482 166.251 78.1742 166.251C77.8 166.251 77.5076 166.332 77.2969 166.492C77.0863 166.653 76.9809 166.876 76.9809 167.162C76.9809 167.372 77.0197 167.546 77.0974 167.681C77.175 167.815 77.3052 167.938 77.4882 168.052C77.6739 168.162 77.9566 168.286 78.3364 168.422C78.9739 168.649 79.4118 168.893 79.6502 169.153C79.8913 169.414 80.0119 169.752 80.0119 170.168ZM82.623 171.299C82.7449 171.299 82.8627 171.29 82.9764 171.274C83.09 171.254 83.1801 171.235 83.2466 171.216V171.744C83.1718 171.78 83.0609 171.809 82.914 171.831C82.7699 171.856 82.6396 171.868 82.5232 171.868C81.6417 171.868 81.201 171.404 81.201 170.475V167.765H80.5483V167.432L81.201 167.145L81.4921 166.172H81.8912V167.228H83.2134V167.765H81.8912V170.446C81.8912 170.721 81.9563 170.931 82.0866 171.078C82.2169 171.225 82.3957 171.299 82.623 171.299ZM86.9636 171.785L86.8264 171.137H86.7932C86.5659 171.422 86.3386 171.616 86.1113 171.719C85.8868 171.818 85.6054 171.868 85.2673 171.868C84.8155 171.868 84.4607 171.752 84.2029 171.519C83.9479 171.286 83.8204 170.955 83.8204 170.525C83.8204 169.605 84.5563 169.123 86.0281 169.078L86.8015 169.054V168.771C86.8015 168.413 86.7239 168.15 86.5686 167.981C86.4162 167.809 86.1709 167.723 85.8327 167.723C85.453 167.723 85.0233 167.839 84.5438 168.072L84.3318 167.544C84.5563 167.422 84.8016 167.327 85.0677 167.257C85.3366 167.188 85.6054 167.153 85.8743 167.153C86.4176 167.153 86.8195 167.274 87.08 167.515C87.3434 167.756 87.475 168.143 87.475 168.675V171.785H86.9636ZM85.4045 171.299C85.8341 171.299 86.1709 171.181 86.4148 170.945C86.6615 170.71 86.7848 170.38 86.7848 169.956V169.544L86.0947 169.573C85.5458 169.593 85.1495 169.679 84.9055 169.831C84.6644 169.981 84.5438 170.215 84.5438 170.534C84.5438 170.783 84.6187 170.973 84.7683 171.103C84.9208 171.234 85.1328 171.299 85.4045 171.299ZM89.583 169.453C89.7022 169.284 89.8837 169.062 90.1276 168.787L91.5995 167.228H92.4185L90.5725 169.17L92.5474 171.785H91.7117L90.1027 169.631L89.583 170.08V171.785H88.9011V165.316H89.583V168.746C89.583 168.898 89.5719 169.134 89.5497 169.453H89.583ZM95.2998 171.868C94.6263 171.868 94.0941 171.663 93.7033 171.253C93.3152 170.843 93.1212 170.273 93.1212 169.544C93.1212 168.81 93.3014 168.226 93.6617 167.794C94.0248 167.361 94.5113 167.145 95.1211 167.145C95.6921 167.145 96.1439 167.334 96.4765 167.711C96.8091 168.085 96.9754 168.58 96.9754 169.195V169.631H93.8363C93.8502 170.166 93.9846 170.572 94.2396 170.85C94.4974 171.127 94.8591 171.265 95.3248 171.265C95.8154 171.265 96.3005 171.163 96.78 170.958V171.573C96.5361 171.678 96.3046 171.753 96.0857 171.798C95.8695 171.845 95.6075 171.868 95.2998 171.868ZM95.1127 167.723C94.7469 167.723 94.4544 167.842 94.2355 168.081C94.0193 168.319 93.8918 168.649 93.853 169.07H96.2353C96.2353 168.635 96.1383 168.302 95.9443 168.072C95.7503 167.839 95.4731 167.723 95.1127 167.723Z" class="path-27"/> -<path d="M61.0397 201.419C61.0397 201.743 60.9185 202.01 60.6762 202.221C60.4339 202.43 60.0953 202.562 59.6605 202.617V203.444H59.2008V202.649C58.9347 202.649 58.6769 202.629 58.4275 202.588C58.178 202.546 57.9737 202.487 57.8145 202.414V201.858C58.0117 201.946 58.2386 202.018 58.4952 202.075C58.7542 202.13 58.9894 202.157 59.2008 202.157V200.589C58.7138 200.435 58.3716 200.255 58.1744 200.051C57.9796 199.847 57.8822 199.583 57.8822 199.26C57.8822 198.949 58.0022 198.693 58.2422 198.494C58.4845 198.294 58.804 198.173 59.2008 198.13V197.481H59.6605V198.123C60.0977 198.135 60.5194 198.223 60.9257 198.387L60.7404 198.853C60.3864 198.713 60.0264 198.63 59.6605 198.604V200.151C60.0335 200.269 60.3127 200.386 60.498 200.5C60.6833 200.612 60.8199 200.741 60.9079 200.888C60.9958 201.033 61.0397 201.21 61.0397 201.419ZM60.4339 201.466C60.4339 201.295 60.3804 201.157 60.2735 201.052C60.169 200.945 59.9646 200.84 59.6605 200.735V202.121C60.1761 202.05 60.4339 201.832 60.4339 201.466ZM58.4845 199.253C58.4845 199.433 58.538 199.578 58.6449 199.687C58.7518 199.797 58.9371 199.9 59.2008 199.997V198.618C58.9656 198.656 58.7874 198.731 58.6662 198.843C58.5451 198.952 58.4845 199.089 58.4845 199.253ZM65.9684 203.02H65.3911V199.306C65.3911 198.997 65.4006 198.705 65.4196 198.429C65.3697 198.479 65.3138 198.532 65.2521 198.586C65.1903 198.641 64.9076 198.873 64.4039 199.281L64.0903 198.875L65.4695 197.809H65.9684V203.02ZM71.4067 200.407C71.4067 201.308 71.2641 201.98 70.979 202.424C70.6963 202.869 70.2627 203.091 69.6783 203.091C69.1176 203.091 68.6911 202.864 68.3989 202.41C68.1066 201.954 67.9605 201.286 67.9605 200.407C67.9605 199.5 68.1019 198.826 68.3846 198.387C68.6673 197.947 69.0986 197.727 69.6783 197.727C70.2437 197.727 70.6726 197.957 70.9648 198.415C71.2594 198.874 71.4067 199.538 71.4067 200.407ZM68.5592 200.407C68.5592 201.165 68.6483 201.718 68.8265 202.064C69.0047 202.409 69.2886 202.581 69.6783 202.581C70.0727 202.581 70.3578 202.407 70.5336 202.057C70.7118 201.706 70.8008 201.156 70.8008 200.407C70.8008 199.659 70.7118 199.111 70.5336 198.764C70.3578 198.415 70.0727 198.241 69.6783 198.241C69.2886 198.241 69.0047 198.413 68.8265 198.757C68.6483 199.099 68.5592 199.649 68.5592 200.407ZM75.5834 200.407C75.5834 201.308 75.4409 201.98 75.1558 202.424C74.873 202.869 74.4394 203.091 73.855 203.091C73.2943 203.091 72.8678 202.864 72.5756 202.41C72.2834 201.954 72.1373 201.286 72.1373 200.407C72.1373 199.5 72.2786 198.826 72.5613 198.387C72.8441 197.947 73.2753 197.727 73.855 197.727C74.4204 197.727 74.8493 197.957 75.1415 198.415C75.4361 198.874 75.5834 199.538 75.5834 200.407ZM72.736 200.407C72.736 201.165 72.8251 201.718 73.0032 202.064C73.1814 202.409 73.4653 202.581 73.855 202.581C74.2494 202.581 74.5345 202.407 74.7103 202.057C74.8885 201.706 74.9776 201.156 74.9776 200.407C74.9776 199.659 74.8885 199.111 74.7103 198.764C74.5345 198.415 74.2494 198.241 73.855 198.241C73.4653 198.241 73.1814 198.413 73.0032 198.757C72.8251 199.099 72.736 199.649 72.736 200.407Z" class="path-28"/> -<path d="M56.8011 129.337C56.8011 125.26 58.4618 123.221 61.7832 123.221C62.3059 123.221 62.7478 123.262 63.1089 123.343V124.74C62.7478 124.635 62.3297 124.583 61.8545 124.583C60.7379 124.583 59.8992 124.882 59.3385 125.481C58.7778 126.08 58.4737 127.039 58.4262 128.36H58.5117C58.735 127.976 59.0486 127.679 59.4525 127.469C59.8564 127.256 60.3316 127.149 60.878 127.149C61.8236 127.149 62.5601 127.439 63.0876 128.018C63.615 128.598 63.8787 129.384 63.8787 130.378C63.8787 131.47 63.5722 132.335 62.9593 132.972C62.3511 133.604 61.5195 133.92 60.4646 133.92C59.7186 133.92 59.07 133.742 58.5188 133.385C57.9676 133.024 57.5424 132.502 57.243 131.817C56.9484 131.128 56.8011 130.301 56.8011 129.337ZM60.4361 132.537C61.0111 132.537 61.453 132.352 61.7618 131.981C62.0755 131.611 62.2323 131.081 62.2323 130.392C62.2323 129.793 62.085 129.323 61.7904 128.981C61.5005 128.638 61.0633 128.467 60.4789 128.467C60.1178 128.467 59.7851 128.546 59.481 128.703C59.1769 128.855 58.937 129.066 58.7612 129.337C58.5853 129.603 58.4974 129.876 58.4974 130.157C58.4974 130.827 58.678 131.392 59.0391 131.853C59.405 132.309 59.8707 132.537 60.4361 132.537ZM72.1751 133.777H65.1118V132.509L67.7989 129.807C68.5924 128.995 69.1174 128.42 69.374 128.082C69.6354 127.74 69.8254 127.42 69.9442 127.12C70.063 126.821 70.1224 126.5 70.1224 126.158C70.1224 125.688 69.9799 125.317 69.6948 125.046C69.4144 124.775 69.0248 124.64 68.5259 124.64C68.1267 124.64 67.7395 124.714 67.3641 124.861C66.9934 125.008 66.5634 125.274 66.074 125.659L65.1688 124.554C65.7485 124.065 66.3116 123.718 66.858 123.514C67.4045 123.309 67.9865 123.207 68.6043 123.207C69.5736 123.207 70.3505 123.461 70.935 123.97C71.5194 124.474 71.8116 125.153 71.8116 126.008C71.8116 126.479 71.7261 126.925 71.5551 127.348C71.3887 127.771 71.1298 128.208 70.7782 128.66C70.4313 129.106 69.8516 129.712 69.039 130.477L67.2286 132.231V132.302H72.1751V133.777ZM80.5143 128.567C80.5143 130.378 80.2221 131.722 79.6377 132.601C79.058 133.48 78.1694 133.92 76.972 133.92C75.8126 133.92 74.9335 133.466 74.3348 132.559C73.7361 131.651 73.4367 130.32 73.4367 128.567C73.4367 126.728 73.7266 125.374 74.3063 124.504C74.8907 123.63 75.7793 123.193 76.972 123.193C78.1361 123.193 79.0176 123.649 79.6163 124.561C80.215 125.474 80.5143 126.809 80.5143 128.567ZM75.1331 128.567C75.1331 129.988 75.278 131.002 75.5678 131.611C75.8624 132.219 76.3305 132.523 76.972 132.523C77.6134 132.523 78.0815 132.214 78.3761 131.596C78.6754 130.979 78.8251 129.969 78.8251 128.567C78.8251 127.17 78.6754 126.16 78.3761 125.538C78.0815 124.911 77.6134 124.597 76.972 124.597C76.3305 124.597 75.8624 124.904 75.5678 125.517C75.278 126.13 75.1331 127.146 75.1331 128.567ZM89.1933 128.931C89.1933 129.656 88.9557 130.212 88.4805 130.598C88.0054 130.985 87.329 131.178 86.4516 131.178H85.7293V133.777H84.5937V126.83H86.5941C87.4621 126.83 88.1115 127.008 88.5423 127.363C88.9763 127.717 89.1933 128.24 89.1933 128.931ZM85.7293 130.223H86.3328C86.9156 130.223 87.3433 130.122 87.6157 129.919C87.8882 129.716 88.0244 129.399 88.0244 128.969C88.0244 128.57 87.9024 128.272 87.6585 128.075C87.4146 127.879 87.0344 127.781 86.5181 127.781H85.7293V130.223ZM96.3683 133.777H94.9761L91.5596 128.242H91.5216L91.5454 128.55C91.5897 129.14 91.6119 129.678 91.6119 130.166V133.777H90.5808V126.83H91.9588L95.3657 132.338H95.3942C95.3879 132.265 95.3752 132 95.3562 131.544C95.3372 131.085 95.3277 130.727 95.3277 130.47V126.83H96.3683V133.777ZM103.505 133.777H102.189L100.008 130.632L99.3381 131.178V133.777H98.2025V126.83H99.3381V130.147C99.6486 129.767 99.9574 129.401 100.265 129.049L102.142 126.83H103.434C102.221 128.256 101.351 129.271 100.825 129.876L103.505 133.777Z" class="path-29"/> -<path d="M59.0487 114.613L56.9865 109.225H56.9532C56.992 109.652 57.0114 110.159 57.0114 110.747V114.613H56.3587V108.535H57.423L59.3481 113.549H59.3813L61.323 108.535H62.379V114.613H61.6722V110.697C61.6722 110.248 61.6916 109.76 61.7304 109.233H61.6972L59.6183 114.613H59.0487ZM64.6367 114.613H63.9465V110.056H64.6367V114.613ZM63.8883 108.822C63.8883 108.664 63.9271 108.549 64.0047 108.476C64.0823 108.402 64.1793 108.364 64.2957 108.364C64.4066 108.364 64.5022 108.402 64.5826 108.476C64.663 108.551 64.7032 108.666 64.7032 108.822C64.7032 108.977 64.663 109.093 64.5826 109.171C64.5022 109.246 64.4066 109.283 64.2957 109.283C64.1793 109.283 64.0823 109.246 64.0047 109.171C63.9271 109.093 63.8883 108.977 63.8883 108.822ZM69.2185 114.613V111.665C69.2185 111.294 69.1339 111.017 68.9649 110.834C68.7958 110.651 68.5311 110.56 68.1707 110.56C67.694 110.56 67.3447 110.688 67.123 110.946C66.9012 111.204 66.7904 111.629 66.7904 112.223V114.613H66.1002V110.056H66.6615L66.7737 110.68H66.807C66.9484 110.456 67.1465 110.282 67.4016 110.16C67.6566 110.036 67.9407 109.973 68.2539 109.973C68.8027 109.973 69.2157 110.106 69.4929 110.372C69.7701 110.636 69.9087 111.058 69.9087 111.641V114.613H69.2185ZM77.0766 112.996C77.0766 113.531 76.8825 113.948 76.4945 114.247C76.1064 114.547 75.5798 114.696 74.9145 114.696C74.1939 114.696 73.6395 114.604 73.2515 114.418V113.736C73.5009 113.841 73.7726 113.924 74.0664 113.985C74.3602 114.046 74.6512 114.077 74.9395 114.077C75.4107 114.077 75.7655 113.988 76.0039 113.811C76.2422 113.631 76.3614 113.381 76.3614 113.062C76.3614 112.852 76.3185 112.68 76.2325 112.547C76.1494 112.411 76.008 112.286 75.8085 112.173C75.6117 112.059 75.3109 111.93 74.9062 111.786C74.3408 111.584 73.9361 111.344 73.6922 111.067C73.451 110.79 73.3305 110.428 73.3305 109.982C73.3305 109.513 73.5065 109.14 73.8585 108.863C74.2105 108.586 74.6762 108.447 75.2555 108.447C75.8597 108.447 76.4155 108.558 76.9227 108.78L76.7024 109.395C76.2007 109.185 75.7128 109.079 75.2389 109.079C74.8647 109.079 74.5722 109.16 74.3616 109.321C74.1509 109.481 74.0456 109.704 74.0456 109.99C74.0456 110.201 74.0844 110.374 74.162 110.51C74.2396 110.643 74.3699 110.766 74.5528 110.88C74.7385 110.991 75.0213 111.114 75.401 111.25C76.0385 111.477 76.4765 111.721 76.7148 111.981C76.956 112.242 77.0766 112.58 77.0766 112.996ZM79.6876 114.127C79.8096 114.127 79.9274 114.119 80.041 114.102C80.1547 114.082 80.2447 114.063 80.3113 114.044V114.572C80.2364 114.608 80.1256 114.637 79.9787 114.659C79.8345 114.684 79.7042 114.696 79.5878 114.696C78.7064 114.696 78.2657 114.232 78.2657 113.304V110.593H77.6129V110.26L78.2657 109.973L78.5567 109H78.9559V110.056H80.278V110.593H78.9559V113.274C78.9559 113.549 79.021 113.76 79.1513 113.906C79.2815 114.053 79.4603 114.127 79.6876 114.127ZM84.0283 114.613L83.8911 113.965H83.8578C83.6305 114.25 83.4032 114.444 83.1759 114.547C82.9514 114.647 82.6701 114.696 82.3319 114.696C81.8801 114.696 81.5253 114.58 81.2675 114.347C81.0125 114.114 80.885 113.783 80.885 113.353C80.885 112.433 81.6209 111.951 83.0928 111.907L83.8661 111.882V111.599C83.8661 111.241 83.7885 110.978 83.6333 110.809C83.4808 110.637 83.2355 110.551 82.8974 110.551C82.5176 110.551 82.088 110.668 81.6085 110.9L81.3964 110.372C81.6209 110.25 81.8663 110.155 82.1323 110.086C82.4012 110.016 82.6701 109.982 82.9389 109.982C83.4822 109.982 83.8841 110.102 84.1447 110.343C84.408 110.584 84.5397 110.971 84.5397 111.503V114.613H84.0283ZM82.4691 114.127C82.8988 114.127 83.2355 114.009 83.4794 113.773C83.7261 113.538 83.8495 113.208 83.8495 112.784V112.372L83.1593 112.401C82.6105 112.421 82.2141 112.507 81.9702 112.659C81.729 112.809 81.6085 113.043 81.6085 113.362C81.6085 113.611 81.6833 113.801 81.833 113.931C81.9854 114.062 82.1975 114.127 82.4691 114.127ZM86.6476 112.281C86.7668 112.112 86.9484 111.89 87.1923 111.616L88.6641 110.056H89.4832L87.6372 111.998L89.6121 114.613H88.7764L87.1673 112.46L86.6476 112.909V114.613H85.9658V108.144H86.6476V111.574C86.6476 111.726 86.6365 111.962 86.6144 112.281H86.6476ZM92.3645 114.696C91.6909 114.696 91.1588 114.491 90.7679 114.081C90.3799 113.671 90.1859 113.101 90.1859 112.372C90.1859 111.638 90.366 111.054 90.7264 110.622C91.0895 110.189 91.5759 109.973 92.1857 109.973C92.7567 109.973 93.2085 110.162 93.5411 110.539C93.8737 110.913 94.0401 111.408 94.0401 112.023V112.46H90.901C90.9148 112.995 91.0493 113.401 91.3043 113.678C91.5621 113.955 91.9238 114.094 92.3894 114.094C92.8801 114.094 93.3651 113.991 93.8446 113.786V114.401C93.6007 114.507 93.3693 114.581 93.1503 114.626C92.9341 114.673 92.6722 114.696 92.3645 114.696ZM92.1774 110.551C91.8115 110.551 91.5191 110.67 91.3001 110.909C91.0839 111.147 90.9564 111.477 90.9176 111.898H93.3C93.3 111.463 93.203 111.13 93.0089 110.9C92.8149 110.668 92.5377 110.551 92.1774 110.551Z" class="path-30"/> -<path d="M61.0397 144.248C61.0397 144.571 60.9185 144.838 60.6762 145.049C60.4339 145.258 60.0953 145.39 59.6605 145.445V146.272H59.2008V145.477C58.9347 145.477 58.6769 145.457 58.4275 145.416C58.178 145.374 57.9737 145.315 57.8145 145.242V144.686C58.0117 144.774 58.2386 144.846 58.4952 144.903C58.7542 144.958 58.9894 144.985 59.2008 144.985V143.417C58.7138 143.263 58.3716 143.083 58.1744 142.879C57.9796 142.675 57.8822 142.411 57.8822 142.088C57.8822 141.777 58.0022 141.521 58.2422 141.322C58.4845 141.122 58.804 141.001 59.2008 140.958V140.31H59.6605V140.951C60.0977 140.963 60.5194 141.051 60.9257 141.215L60.7404 141.682C60.3864 141.541 60.0264 141.458 59.6605 141.432V142.979C60.0335 143.098 60.3127 143.214 60.498 143.328C60.6833 143.44 60.8199 143.569 60.9079 143.717C60.9958 143.861 61.0397 144.038 61.0397 144.248ZM60.4339 144.294C60.4339 144.123 60.3804 143.985 60.2735 143.88C60.169 143.774 59.9646 143.668 59.6605 143.563V144.95C60.1761 144.878 60.4339 144.66 60.4339 144.294ZM58.4845 142.081C58.4845 142.261 58.538 142.406 58.6449 142.516C58.7518 142.625 58.9371 142.728 59.2008 142.826V141.446C58.9656 141.484 58.7874 141.559 58.6662 141.671C58.5451 141.78 58.4845 141.917 58.4845 142.081ZM65.9684 145.848H65.3911V142.134C65.3911 141.825 65.4006 141.533 65.4196 141.258C65.3697 141.307 65.3138 141.36 65.2521 141.414C65.1903 141.469 64.9076 141.701 64.4039 142.109L64.0903 141.703L65.4695 140.637H65.9684V145.848ZM71.4067 143.235C71.4067 144.136 71.2641 144.808 70.979 145.253C70.6963 145.697 70.2627 145.919 69.6783 145.919C69.1176 145.919 68.6911 145.692 68.3989 145.238C68.1066 144.782 67.9605 144.114 67.9605 143.235C67.9605 142.328 68.1019 141.654 68.3846 141.215C68.6673 140.775 69.0986 140.555 69.6783 140.555C70.2437 140.555 70.6726 140.785 70.9648 141.243C71.2594 141.702 71.4067 142.366 71.4067 143.235ZM68.5592 143.235C68.5592 143.993 68.6483 144.546 68.8265 144.893C69.0047 145.237 69.2886 145.409 69.6783 145.409C70.0727 145.409 70.3578 145.235 70.5336 144.885C70.7118 144.534 70.8008 143.984 70.8008 143.235C70.8008 142.487 70.7118 141.939 70.5336 141.593C70.3578 141.243 70.0727 141.069 69.6783 141.069C69.2886 141.069 69.0047 141.241 68.8265 141.585C68.6483 141.928 68.5592 142.478 68.5592 143.235ZM75.5834 143.235C75.5834 144.136 75.4409 144.808 75.1558 145.253C74.873 145.697 74.4394 145.919 73.855 145.919C73.2943 145.919 72.8678 145.692 72.5756 145.238C72.2834 144.782 72.1373 144.114 72.1373 143.235C72.1373 142.328 72.2786 141.654 72.5613 141.215C72.8441 140.775 73.2753 140.555 73.855 140.555C74.4204 140.555 74.8493 140.785 75.1415 141.243C75.4361 141.702 75.5834 142.366 75.5834 143.235ZM72.736 143.235C72.736 143.993 72.8251 144.546 73.0032 144.893C73.1814 145.237 73.4653 145.409 73.855 145.409C74.2494 145.409 74.5345 145.235 74.7103 144.885C74.8885 144.534 74.9776 143.984 74.9776 143.235C74.9776 142.487 74.8885 141.939 74.7103 141.593C74.5345 141.243 74.2494 141.069 73.855 141.069C73.4653 141.069 73.1814 141.241 73.0032 141.585C72.8251 141.928 72.736 142.478 72.736 143.235Z" class="path-31"/> -<path d="M243.381 127.27C244.431 127.27 245.262 127.548 245.875 128.104C246.488 128.66 246.795 129.418 246.795 130.378C246.795 131.489 246.445 132.359 245.747 132.986C245.053 133.609 244.065 133.92 242.782 133.92C241.618 133.92 240.703 133.732 240.038 133.357V131.839C240.423 132.057 240.865 132.226 241.363 132.345C241.862 132.464 242.326 132.523 242.753 132.523C243.509 132.523 244.084 132.354 244.478 132.017C244.873 131.679 245.07 131.185 245.07 130.534C245.07 129.289 244.276 128.667 242.689 128.667C242.466 128.667 242.19 128.691 241.862 128.738C241.535 128.781 241.247 128.831 241 128.888L240.252 128.446L240.651 123.357H246.068V124.847H242.126L241.891 127.427C242.057 127.398 242.259 127.365 242.497 127.327C242.739 127.289 243.034 127.27 243.381 127.27ZM255.234 127.804C255.234 129.857 254.82 131.39 253.993 132.402C253.167 133.414 251.922 133.92 250.259 133.92C249.627 133.92 249.173 133.882 248.897 133.806V132.402C249.32 132.521 249.745 132.58 250.173 132.58C251.304 132.58 252.147 132.276 252.703 131.668C253.259 131.059 253.563 130.104 253.616 128.802H253.53C253.25 129.23 252.91 129.539 252.511 129.729C252.117 129.919 251.653 130.014 251.121 130.014C250.199 130.014 249.475 129.727 248.947 129.152C248.42 128.577 248.156 127.788 248.156 126.785C248.156 125.697 248.46 124.832 249.068 124.191C249.681 123.545 250.515 123.221 251.57 123.221C252.311 123.221 252.958 123.402 253.509 123.763C254.06 124.124 254.485 124.649 254.785 125.338C255.084 126.023 255.234 126.845 255.234 127.804ZM251.599 124.611C251.019 124.611 250.575 124.801 250.266 125.182C249.957 125.557 249.802 126.087 249.802 126.771C249.802 127.365 249.945 127.833 250.23 128.175C250.52 128.512 250.957 128.681 251.542 128.681C252.107 128.681 252.582 128.512 252.967 128.175C253.352 127.838 253.544 127.443 253.544 126.992C253.544 126.569 253.461 126.175 253.295 125.809C253.133 125.438 252.905 125.146 252.611 124.932C252.316 124.718 251.979 124.611 251.599 124.611Z" class="path-32"/> -<path d="M243.252 114.613L242.496 112.68H240.059L239.311 114.613H238.596L240.999 108.51H241.593L243.984 114.613H243.252ZM242.275 112.044L241.568 110.16C241.477 109.922 241.383 109.63 241.286 109.283C241.225 109.549 241.137 109.842 241.024 110.16L240.309 112.044H242.275ZM246.537 114.696C245.877 114.696 245.366 114.494 245.003 114.089C244.642 113.682 244.462 113.107 244.462 112.364C244.462 111.602 244.645 111.013 245.011 110.597C245.38 110.181 245.904 109.973 246.583 109.973C246.802 109.973 247.021 109.997 247.24 110.044C247.459 110.091 247.63 110.147 247.755 110.21L247.543 110.796C247.391 110.736 247.224 110.686 247.044 110.647C246.864 110.605 246.705 110.584 246.566 110.584C245.64 110.584 245.177 111.175 245.177 112.356C245.177 112.916 245.29 113.345 245.514 113.645C245.741 113.944 246.077 114.094 246.52 114.094C246.9 114.094 247.289 114.012 247.689 113.848V114.459C247.384 114.617 247 114.696 246.537 114.696ZM250.246 114.127C250.368 114.127 250.485 114.119 250.599 114.102C250.713 114.082 250.803 114.063 250.869 114.044V114.572C250.794 114.608 250.684 114.637 250.537 114.659C250.393 114.684 250.262 114.696 250.146 114.696C249.264 114.696 248.824 114.232 248.824 113.304V110.593H248.171V110.26L248.824 109.973L249.115 109H249.514V110.056H250.836V110.593H249.514V113.274C249.514 113.549 249.579 113.76 249.709 113.906C249.84 114.053 250.018 114.127 250.246 114.127ZM252.474 114.613H251.784V110.056H252.474V114.613ZM251.726 108.822C251.726 108.664 251.765 108.549 251.842 108.476C251.92 108.402 252.017 108.364 252.133 108.364C252.244 108.364 252.34 108.402 252.42 108.476C252.501 108.551 252.541 108.666 252.541 108.822C252.541 108.977 252.501 109.093 252.42 109.171C252.34 109.246 252.244 109.283 252.133 109.283C252.017 109.283 251.92 109.246 251.842 109.171C251.765 109.093 251.726 108.977 251.726 108.822ZM254.936 114.613L253.206 110.056H253.946L254.927 112.759C255.149 113.391 255.279 113.801 255.318 113.99H255.351C255.382 113.843 255.477 113.539 255.638 113.079C255.802 112.616 256.166 111.609 256.732 110.056H257.472L255.742 114.613H254.936ZM260.129 114.696C259.455 114.696 258.923 114.491 258.532 114.081C258.144 113.671 257.95 113.101 257.95 112.372C257.95 111.638 258.13 111.054 258.49 110.622C258.853 110.189 259.34 109.973 259.95 109.973C260.521 109.973 260.973 110.162 261.305 110.539C261.638 110.913 261.804 111.408 261.804 112.023V112.46H258.665C258.679 112.995 258.813 113.401 259.068 113.678C259.326 113.955 259.688 114.094 260.153 114.094C260.644 114.094 261.129 113.991 261.609 113.786V114.401C261.365 114.507 261.133 114.581 260.914 114.626C260.698 114.673 260.436 114.696 260.129 114.696ZM259.941 110.551C259.576 110.551 259.283 110.67 259.064 110.909C258.848 111.147 258.72 111.477 258.682 111.898H261.064C261.064 111.463 260.967 111.13 260.773 110.9C260.579 110.668 260.302 110.551 259.941 110.551ZM264.415 116.214C264.155 116.214 263.949 116.177 263.8 116.102V115.499C263.997 115.554 264.202 115.582 264.415 115.582C264.69 115.582 264.897 115.499 265.039 115.333C265.183 115.166 265.255 114.926 265.255 114.613V108.535H265.962V114.555C265.962 115.082 265.829 115.489 265.563 115.777C265.297 116.068 264.914 116.214 264.415 116.214ZM268.124 110.056V113.013C268.124 113.384 268.208 113.661 268.377 113.844C268.547 114.027 268.811 114.119 269.172 114.119C269.648 114.119 269.996 113.988 270.215 113.728C270.437 113.467 270.548 113.042 270.548 112.451V110.056H271.238V114.613H270.668L270.569 114.002H270.531C270.39 114.227 270.193 114.398 269.941 114.518C269.691 114.637 269.406 114.696 269.084 114.696C268.53 114.696 268.114 114.565 267.837 114.301C267.563 114.038 267.425 113.617 267.425 113.038V110.056H268.124ZM274.784 109.973C274.987 109.973 275.168 109.99 275.329 110.023L275.234 110.663C275.045 110.622 274.879 110.601 274.735 110.601C274.366 110.601 274.05 110.751 273.787 111.05C273.526 111.349 273.396 111.722 273.396 112.169V114.613H272.706V110.056H273.275L273.354 110.9H273.387C273.557 110.604 273.76 110.375 273.999 110.214C274.237 110.054 274.499 109.973 274.784 109.973ZM280.115 112.331C280.115 113.074 279.928 113.654 279.553 114.073C279.179 114.489 278.662 114.696 278.003 114.696C277.595 114.696 277.233 114.601 276.917 114.41C276.601 114.218 276.357 113.944 276.186 113.586C276.014 113.229 275.928 112.81 275.928 112.331C275.928 111.588 276.114 111.01 276.485 110.597C276.856 110.181 277.372 109.973 278.032 109.973C278.669 109.973 279.175 110.185 279.549 110.609C279.926 111.033 280.115 111.607 280.115 112.331ZM276.643 112.331C276.643 112.913 276.759 113.356 276.992 113.661C277.225 113.966 277.567 114.119 278.019 114.119C278.471 114.119 278.813 113.967 279.046 113.665C279.282 113.36 279.4 112.916 279.4 112.331C279.4 111.751 279.282 111.312 279.046 111.013C278.813 110.711 278.468 110.56 278.011 110.56C277.559 110.56 277.218 110.708 276.988 111.004C276.758 111.301 276.643 111.743 276.643 112.331ZM283.408 109.973C283.61 109.973 283.791 109.99 283.952 110.023L283.857 110.663C283.668 110.622 283.502 110.601 283.358 110.601C282.989 110.601 282.673 110.751 282.41 111.05C282.149 111.349 282.019 111.722 282.019 112.169V114.613H281.329V110.056H281.898L281.977 110.9H282.011C282.18 110.604 282.383 110.375 282.622 110.214C282.86 110.054 283.122 109.973 283.408 109.973ZM287.744 113.37C287.744 113.794 287.586 114.121 287.27 114.351C286.954 114.581 286.511 114.696 285.94 114.696C285.335 114.696 284.864 114.601 284.526 114.41V113.769C284.745 113.88 284.979 113.967 285.229 114.031C285.481 114.095 285.723 114.127 285.956 114.127C286.317 114.127 286.594 114.07 286.788 113.956C286.982 113.84 287.079 113.664 287.079 113.428C287.079 113.251 287.001 113.1 286.846 112.975C286.694 112.848 286.394 112.698 285.948 112.526C285.524 112.368 285.222 112.231 285.042 112.114C284.864 111.995 284.731 111.861 284.642 111.711C284.557 111.562 284.514 111.383 284.514 111.175C284.514 110.803 284.665 110.511 284.967 110.298C285.269 110.081 285.683 109.973 286.21 109.973C286.701 109.973 287.18 110.073 287.648 110.273L287.403 110.834C286.946 110.645 286.531 110.551 286.16 110.551C285.833 110.551 285.586 110.602 285.42 110.705C285.254 110.808 285.17 110.949 285.17 111.129C285.17 111.251 285.201 111.355 285.262 111.441C285.326 111.527 285.427 111.609 285.565 111.686C285.704 111.764 285.97 111.876 286.364 112.023C286.904 112.22 287.269 112.418 287.457 112.618C287.648 112.817 287.744 113.068 287.744 113.37Z" class="path-33"/> -<path d="M242.405 142.665C242.954 142.665 243.385 142.802 243.699 143.075C244.015 143.346 244.173 143.718 244.173 144.191C244.173 144.73 244.001 145.153 243.656 145.459C243.314 145.766 242.841 145.919 242.238 145.919C241.651 145.919 241.203 145.825 240.894 145.637V145.067C241.061 145.174 241.267 145.258 241.514 145.32C241.762 145.38 242.005 145.409 242.245 145.409C242.663 145.409 242.988 145.311 243.218 145.114C243.451 144.916 243.567 144.631 243.567 144.258C243.567 143.531 243.122 143.168 242.231 143.168C242.005 143.168 241.703 143.202 241.326 143.271L241.019 143.075L241.215 140.637H243.806V141.183H241.721L241.589 142.747C241.863 142.693 242.135 142.665 242.405 142.665ZM248.407 143.235C248.407 144.136 248.264 144.808 247.979 145.253C247.696 145.697 247.263 145.919 246.678 145.919C246.118 145.919 245.691 145.692 245.399 145.238C245.107 144.782 244.961 144.114 244.961 143.235C244.961 142.328 245.102 141.654 245.385 141.215C245.667 140.775 246.099 140.555 246.678 140.555C247.244 140.555 247.673 140.785 247.965 141.243C248.259 141.702 248.407 142.366 248.407 143.235ZM245.559 143.235C245.559 143.993 245.648 144.546 245.827 144.893C246.005 145.237 246.289 145.409 246.678 145.409C247.073 145.409 247.358 145.235 247.534 144.885C247.712 144.534 247.801 143.984 247.801 143.235C247.801 142.487 247.712 141.939 247.534 141.593C247.358 141.243 247.073 141.069 246.678 141.069C246.289 141.069 246.005 141.241 245.827 141.585C245.648 141.928 245.559 142.478 245.559 143.235ZM255.545 143.193C255.545 144.053 255.311 144.711 254.843 145.167C254.377 145.621 253.706 145.848 252.829 145.848H251.386V140.637H252.983C253.793 140.637 254.422 140.862 254.871 141.311C255.32 141.76 255.545 142.387 255.545 143.193ZM254.904 143.214C254.904 142.535 254.732 142.023 254.39 141.678C254.051 141.334 253.545 141.161 252.872 141.161H251.992V145.324H252.73C253.452 145.324 253.995 145.147 254.358 144.793C254.722 144.436 254.904 143.91 254.904 143.214ZM258.403 141.871C258.577 141.871 258.732 141.885 258.87 141.913L258.788 142.462C258.626 142.426 258.484 142.409 258.36 142.409C258.044 142.409 257.774 142.537 257.548 142.794C257.325 143.05 257.213 143.37 257.213 143.752V145.848H256.621V141.942H257.109L257.177 142.665H257.206C257.351 142.411 257.525 142.215 257.73 142.077C257.934 141.939 258.158 141.871 258.403 141.871ZM262.003 145.848L261.885 145.292H261.856C261.662 145.536 261.467 145.703 261.272 145.791C261.08 145.876 260.838 145.919 260.549 145.919C260.161 145.919 259.857 145.819 259.636 145.62C259.418 145.42 259.308 145.136 259.308 144.768C259.308 143.979 259.939 143.566 261.201 143.528L261.864 143.506V143.264C261.864 142.957 261.797 142.732 261.664 142.587C261.533 142.44 261.323 142.366 261.033 142.366C260.708 142.366 260.339 142.466 259.928 142.665L259.747 142.213C259.939 142.108 260.149 142.026 260.377 141.967C260.608 141.907 260.838 141.878 261.069 141.878C261.534 141.878 261.879 141.981 262.102 142.188C262.328 142.394 262.441 142.726 262.441 143.182V145.848H262.003ZM260.666 145.431C261.034 145.431 261.323 145.33 261.532 145.128C261.744 144.926 261.849 144.643 261.849 144.28V143.927L261.258 143.952C260.787 143.968 260.448 144.042 260.238 144.173C260.032 144.301 259.928 144.502 259.928 144.775C259.928 144.989 259.993 145.152 260.121 145.263C260.252 145.375 260.433 145.431 260.666 145.431ZM266.853 145.848L266.136 143.556C266.091 143.416 266.007 143.098 265.883 142.601H265.855C265.76 143.017 265.677 143.338 265.605 143.563L264.868 145.848H264.184L263.118 141.942H263.738C263.99 142.923 264.181 143.67 264.312 144.183C264.445 144.697 264.521 145.042 264.54 145.22H264.568C264.595 145.085 264.636 144.91 264.693 144.697C264.753 144.48 264.804 144.309 264.846 144.183L265.563 141.942H266.204L266.903 144.183C267.036 144.592 267.126 144.935 267.174 145.213H267.202C267.212 145.128 267.237 144.996 267.277 144.818C267.32 144.64 267.568 143.681 268.022 141.942H268.635L267.555 145.848H266.853ZM272.017 145.848V143.321C272.017 143.003 271.944 142.765 271.799 142.608C271.654 142.451 271.427 142.373 271.119 142.373C270.71 142.373 270.411 142.483 270.221 142.704C270.03 142.925 269.935 143.29 269.935 143.798V145.848H269.344V141.942H269.825L269.921 142.476H269.95C270.071 142.284 270.241 142.135 270.459 142.031C270.678 141.924 270.921 141.871 271.19 141.871C271.66 141.871 272.014 141.985 272.252 142.213C272.489 142.438 272.608 142.801 272.608 143.3V145.848H272.017Z" class="path-34"/> -<circle cx="219.133" cy="128.117" r="14.5972" class="circle-1"/> -<g clip-path="url(#clip3_13917_210808)"> -<path d="M219.067 128.915C221.03 128.915 222.622 127.306 222.622 125.323C222.622 123.34 221.03 121.73 219.067 121.73C217.104 121.73 215.512 123.34 215.512 125.323C215.512 127.306 217.104 128.915 219.067 128.915ZM222.227 129.713H220.867C220.319 129.968 219.709 130.112 219.067 130.112C218.425 130.112 217.818 129.968 217.267 129.713H215.907C214.161 129.713 212.746 131.143 212.746 132.906V133.306C212.746 133.967 213.277 134.503 213.931 134.503H224.202C224.856 134.503 225.387 133.967 225.387 133.306V132.906C225.387 131.143 223.973 129.713 222.227 129.713Z" class="path-35"/> -</g> -<circle cx="219.133" cy="187.113" r="14.5972" class="circle-2"/> -<g clip-path="url(#clip4_13917_210808)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M216.458 181.523L222.814 181.811L225.387 187.589L221.757 192.87L215.366 192.456L212.746 186.195L216.458 181.523ZM221.118 184.854L216.511 186.888L220.45 189.965L221.118 184.854ZM220.584 183.835L216.903 182.233L216.13 185.601L220.584 183.835ZM219.651 190.74L215.651 187.853L215.747 191.765L219.651 190.74ZM224.748 187.576L222.022 184.78L221.302 190.157L224.748 187.576ZM220.589 191.369L217.215 192.26L221.183 192.517L220.589 191.369ZM224.215 188.845L221.262 191.068L221.849 192.227L224.215 188.845ZM222.818 182.618L222.245 183.808L224.38 186.002L222.818 182.618ZM222.104 182.048L218.354 181.895L221.447 183.262L222.104 182.048ZM215.91 182.599L213.284 185.95L215.04 186.326L215.91 182.599ZM214.934 186.984L213.17 186.606L215.011 190.99L214.934 186.984Z" class="path-36"/> -</g> -<circle cx="36.06" cy="187.113" r="14.5972" class="circle-3"/> -<g clip-path="url(#clip5_13917_210808)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M33.3855 178.18L39.7415 178.467L42.3148 184.245L38.6843 189.526L32.2938 189.113L29.6738 182.852L33.3855 178.18ZM38.0453 181.51L33.4388 183.544L37.377 186.622L38.0453 181.51ZM37.512 180.491L33.8307 178.889L33.0574 182.257L37.512 180.491ZM36.5789 187.396L32.578 184.509L32.6748 188.421L36.5789 187.396ZM41.6757 184.232L38.9494 181.436L38.2298 186.813L41.6757 184.232ZM37.5169 188.025L34.1427 188.916L38.1107 189.173L37.5169 188.025ZM41.143 185.501L38.1893 187.725L38.7762 188.884L41.143 185.501ZM39.7459 179.274L39.1722 180.464L41.3075 182.658L39.7459 179.274ZM39.0311 178.705L35.2814 178.551L38.3744 179.918L39.0311 178.705ZM32.8379 179.255L30.2115 182.607L31.9674 182.983L32.8379 179.255ZM31.8616 183.64L30.0971 183.262L31.9382 187.646L31.8616 183.64Z" class="path-37"/> -</g> -<path d="M32.4656 191.427H33.0669L31.8255 194.972H31.2144L29.9778 191.427H30.5743L31.3138 193.631C31.3526 193.736 31.3939 193.872 31.4375 194.038C31.4811 194.203 31.5094 194.326 31.5224 194.407C31.5434 194.284 31.5757 194.142 31.6194 193.98C31.663 193.819 31.6986 193.699 31.726 193.621L32.4656 191.427Z" class="path-38"/> -<path d="M36.6823 193.195C36.6823 193.772 36.5376 194.22 36.2483 194.54C35.9605 194.86 35.5523 195.02 35.0237 195.02C34.4887 195.02 34.0773 194.862 33.7895 194.545C33.5034 194.227 33.3603 193.775 33.3603 193.19C33.3603 192.604 33.5042 192.155 33.792 191.842C34.0813 191.528 34.4935 191.371 35.0286 191.371C35.5556 191.371 35.9629 191.53 36.2507 191.849C36.5384 192.167 36.6823 192.616 36.6823 193.195ZM33.9762 193.195C33.9762 193.631 34.0643 193.962 34.2405 194.189C34.4167 194.413 34.6778 194.526 35.0237 194.526C35.3681 194.526 35.6275 194.414 35.8021 194.191C35.9783 193.968 36.0664 193.636 36.0664 193.195C36.0664 192.76 35.9791 192.43 35.8045 192.205C35.6316 191.981 35.3729 191.868 35.0286 191.868C34.681 191.868 34.4184 191.981 34.2405 192.205C34.0643 192.43 33.9762 192.76 33.9762 193.195Z" class="path-39"/> -<path d="M38.6682 194.972H38.0887V191.924H37.046V191.427H39.7108V191.924H38.6682V194.972Z" class="path-40"/> -<path d="M42.2617 194.972H40.2564V191.427H42.2617V191.917H40.8359V192.882H42.172V193.367H40.8359V194.48H42.2617V194.972Z" class="path-41"/> -<circle cx="36.06" cy="128.117" r="14.5972" class="circle-4"/> -<g clip-path="url(#clip6_13917_210808)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M33.3855 119.184L39.7415 119.471L42.3148 125.249L38.6843 130.53L32.2938 130.116L29.6738 123.856L33.3855 119.184ZM38.0453 122.514L33.4388 124.548L37.377 127.626L38.0453 122.514ZM37.512 121.495L33.8307 119.893L33.0574 123.261L37.512 121.495ZM36.5789 128.4L32.578 125.513L32.6748 129.425L36.5789 128.4ZM41.6757 125.236L38.9494 122.44L38.2298 127.817L41.6757 125.236ZM37.5169 129.029L34.1427 129.92L38.1107 130.177L37.5169 129.029ZM41.143 126.505L38.1893 128.728L38.7762 129.888L41.143 126.505ZM39.7459 120.278L39.1722 121.468L41.3075 123.662L39.7459 120.278ZM39.0311 119.708L35.2814 119.555L38.3744 120.922L39.0311 119.708ZM32.8379 120.259L30.2115 123.611L31.9674 123.986L32.8379 120.259ZM31.8616 124.644L30.0971 124.266L31.9382 128.65L31.8616 124.644Z" class="path-42"/> -</g> -<path d="M32.7719 136.024L31.7135 132.977H31.6936C31.7218 133.429 31.736 133.854 31.736 134.25V136.024H31.1943V132.375H32.0355L33.0489 135.278H33.0639L34.1073 132.375H34.951V136.024H34.3769V134.22C34.3769 134.038 34.381 133.802 34.3893 133.511C34.3993 133.22 34.4076 133.043 34.4143 132.982H34.3943L33.2985 136.024H32.7719Z" class="path-43"/> -<path d="M35.912 136.024V132.375H36.5085V136.024H35.912Z" class="path-44"/> -<path d="M40.5147 136.024H39.7834L37.9887 133.116H37.9687L37.9812 133.279C38.0045 133.588 38.0162 133.871 38.0162 134.127V136.024H37.4745V132.375H38.1984L39.9881 135.268H40.003C39.9997 135.23 39.9931 135.091 39.9831 134.851C39.9731 134.61 39.9681 134.422 39.9681 134.287V132.375H40.5147V136.024Z" class="path-45"/> -<defs> -<filter id="filter0_d_13917_210808" x="0.175355" y="0.391785" width="388.649" height="368.579" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.21643"/> -<feGaussianBlur stdDeviation="0.912322"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_13917_210808"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_13917_210808" result="shape"/> -</filter> -<clipPath id="clip0_13917_210808"> -<rect width="8.51501" height="8.51501" transform="translate(21.4629 336.207)" class="rect-7"/> -</clipPath> -<clipPath id="clip1_13917_210808"> -<rect width="8.51501" height="8.51501" transform="translate(145.172 336.207)" class="rect-8"/> -</clipPath> -<clipPath id="clip2_13917_210808"> -<rect width="8.51501" height="8.51501" transform="translate(279.882 336.207)" class="rect-9"/> -</clipPath> -<clipPath id="clip3_13917_210808"> -<rect width="12.641" height="12.7725" transform="translate(212.746 121.73)" class="rect-10"/> -</clipPath> -<clipPath id="clip4_13917_210808"> -<rect width="12.641" height="12.7725" transform="translate(212.746 180.727)" class="rect-11"/> -</clipPath> -<clipPath id="clip5_13917_210808"> -<rect width="12.641" height="12.7725" transform="translate(29.6738 177.383)" class="rect-12"/> -</clipPath> -<clipPath id="clip6_13917_210808"> -<rect width="12.641" height="12.7725" transform="translate(29.6738 118.387)" class="rect-13"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/staking/juror-rewards.svg b/web/src/assets/svgs/mini-guides/staking/juror-rewards.svg deleted file mode 100644 index 49a3777da..000000000 --- a/web/src/assets/svgs/mini-guides/staking/juror-rewards.svg +++ /dev/null @@ -1,72 +0,0 @@ -<svg viewBox="0 0 404 201" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g filter="url(#filter0_d_13904_184784)"> -<rect y="1" width="404" height="195" rx="2.47757" class="rect-1"/> -<rect x="0.412928" y="1.41293" width="403.174" height="194.174" rx="2.06464" stroke-width="0.825855" class="rect-2"/> -</g> -<g clip-path="url(#clip0_13904_184784)"> -<g clip-path="url(#clip1_13904_184784)"> -<mask id="path-3-inside-1_13904_184784" class="mask-1"> -<path d="M129.282 110.481C129.282 132.374 111.534 150.122 89.6406 150.122C67.7474 150.122 49.9995 132.374 49.9995 110.481C49.9995 88.5877 67.7474 70.8398 89.6406 70.8398C111.534 70.8398 129.282 88.5877 129.282 110.481ZM53.9636 110.481C53.9636 130.185 69.9367 146.158 89.6406 146.158C109.344 146.158 125.317 130.185 125.317 110.481C125.317 90.7771 109.344 74.8039 89.6406 74.8039C69.9367 74.8039 53.9636 90.7771 53.9636 110.481Z" class="path-1"/> -</mask> -<path d="M129.282 110.481C129.282 132.374 111.534 150.122 89.6406 150.122C67.7474 150.122 49.9995 132.374 49.9995 110.481C49.9995 88.5877 67.7474 70.8398 89.6406 70.8398C111.534 70.8398 129.282 88.5877 129.282 110.481ZM53.9636 110.481C53.9636 130.185 69.9367 146.158 89.6406 146.158C109.344 146.158 125.317 130.185 125.317 110.481C125.317 90.7771 109.344 74.8039 89.6406 74.8039C69.9367 74.8039 53.9636 90.7771 53.9636 110.481Z" stroke-width="9.91026" mask="url(#path-3-inside-1_13904_184784)" class="path-2"/> -<path d="M89.6406 72.8219C89.6406 71.7272 90.5286 70.8347 91.6219 70.8894C98.7667 71.2469 105.695 73.5325 111.664 77.5206C118.183 81.8764 123.264 88.0675 126.264 95.3109C129.264 102.554 130.049 110.525 128.52 118.214C126.99 125.904 123.215 132.967 117.671 138.511C112.127 144.055 105.064 147.831 97.3741 149.36C89.6845 150.89 81.714 150.105 74.4706 147.104C67.2271 144.104 61.036 139.023 56.6802 132.504C52.6921 126.536 50.4065 119.607 50.049 112.462C49.9943 111.369 50.8869 110.481 51.9816 110.481C53.0762 110.481 53.9579 111.369 54.0186 112.462C54.3723 118.822 56.4238 124.985 59.9763 130.302C63.8965 136.169 69.4685 140.742 75.9876 143.442C82.5067 146.142 89.6801 146.849 96.6008 145.472C103.521 144.096 109.878 140.698 114.868 135.708C119.857 130.719 123.255 124.362 124.632 117.441C126.009 110.52 125.302 103.347 122.602 96.8279C119.901 90.3088 115.329 84.7368 109.462 80.8166C104.145 77.2641 97.982 75.2126 91.6216 74.859C90.5286 74.7982 89.6406 73.9166 89.6406 72.8219Z" class="path-3"/> -<path d="M122.158 91.4856C123.103 90.9335 124.322 91.2501 124.826 92.2217C128.121 98.5713 129.642 105.707 129.209 112.872C128.736 120.698 125.953 128.208 121.212 134.452C116.471 140.697 109.985 145.395 102.574 147.953C95.1624 150.511 87.1591 150.814 79.5757 148.823C71.9924 146.832 65.1696 142.638 59.9703 136.769C54.7709 130.901 51.4284 123.623 50.3655 115.855C49.3026 108.087 50.567 100.179 53.9988 93.1293C57.1409 86.6751 61.9707 81.2067 67.9597 77.2942C68.8762 76.6955 70.0932 77.0183 70.6453 77.9635C71.1975 78.9087 70.8753 80.1179 69.9623 80.7217C64.6487 84.2352 60.3619 89.1153 57.563 94.8644C54.4743 101.209 53.3364 108.327 54.293 115.318C55.2496 122.309 58.2578 128.859 62.9373 134.141C67.6167 139.422 73.7572 143.197 80.5822 144.989C87.4072 146.78 94.6102 146.508 101.28 144.206C107.95 141.904 113.788 137.675 118.055 132.055C122.322 126.435 124.827 119.676 125.253 112.633C125.638 106.25 124.301 99.8941 121.398 94.2237C120.899 93.2493 121.213 92.0378 122.158 91.4856Z" fill="url(#paint0_linear_13904_184784)" class="path-4"/> -</g> -<path d="M80.394 108.503C80.394 111.29 79.8326 113.371 78.71 114.745C77.5873 116.12 75.8969 116.807 73.6387 116.807C72.7806 116.807 72.1644 116.755 71.7902 116.652V114.745C72.3644 114.907 72.9419 114.987 73.5226 114.987C75.0582 114.987 76.2034 114.574 76.9583 113.749C77.7131 112.923 78.1261 111.626 78.197 109.858H78.0809C77.7002 110.439 77.2389 110.858 76.697 111.116C76.1614 111.374 75.5324 111.503 74.8098 111.503C73.5581 111.503 72.5741 111.113 71.858 110.332C71.1418 109.552 70.7837 108.481 70.7837 107.119C70.7837 105.642 71.1966 104.467 72.0225 103.596C72.8548 102.719 73.9871 102.28 75.4195 102.28C76.426 102.28 77.3034 102.525 78.0519 103.016C78.8003 103.506 79.3778 104.219 79.7842 105.155C80.1907 106.084 80.394 107.2 80.394 108.503ZM75.4582 104.167C74.671 104.167 74.0678 104.425 73.6484 104.942C73.229 105.451 73.0193 106.171 73.0193 107.1C73.0193 107.906 73.2129 108.542 73.6 109.006C73.9936 109.464 74.5872 109.694 75.3808 109.694C76.1485 109.694 76.7937 109.464 77.3163 109.006C77.839 108.548 78.1003 108.013 78.1003 107.4C78.1003 106.826 77.9874 106.29 77.7615 105.793C77.5422 105.29 77.2325 104.893 76.8325 104.603C76.4324 104.313 75.9743 104.167 75.4582 104.167ZM91.7366 109.539C91.7366 111.997 91.3398 113.823 90.5462 115.016C89.759 116.21 88.5525 116.807 86.9266 116.807C85.3523 116.807 84.1587 116.191 83.3457 114.958C82.5328 113.726 82.1263 111.919 82.1263 109.539C82.1263 107.042 82.5199 105.203 83.307 104.022C84.1006 102.835 85.3071 102.241 86.9266 102.241C88.5073 102.241 89.7042 102.861 90.5171 104.1C91.3301 105.338 91.7366 107.151 91.7366 109.539ZM84.4297 109.539C84.4297 111.468 84.6265 112.845 85.02 113.671C85.4201 114.497 86.0556 114.91 86.9266 114.91C87.7976 114.91 88.4331 114.491 88.8332 113.652C89.2396 112.813 89.4429 111.442 89.4429 109.539C89.4429 107.642 89.2396 106.271 88.8332 105.426C88.4331 104.574 87.7976 104.148 86.9266 104.148C86.0556 104.148 85.4201 104.564 85.02 105.396C84.6265 106.229 84.4297 107.61 84.4297 109.539ZM95.2981 106.703C95.2981 107.664 95.3916 108.381 95.5787 108.852C95.7658 109.323 96.0723 109.558 96.4981 109.558C97.3498 109.558 97.7756 108.606 97.7756 106.703C97.7756 104.8 97.3498 103.848 96.4981 103.848C96.0723 103.848 95.7658 104.084 95.5787 104.555C95.3916 105.026 95.2981 105.742 95.2981 106.703ZM99.6531 106.684C99.6531 108.168 99.3854 109.284 98.8499 110.032C98.3208 110.774 97.5369 111.145 96.4981 111.145C95.5174 111.145 94.7561 110.761 94.2141 109.994C93.6786 109.219 93.4108 108.116 93.4108 106.684C93.4108 103.735 94.4399 102.261 96.4981 102.261C97.5111 102.261 98.2886 102.645 98.8305 103.413C99.3789 104.174 99.6531 105.264 99.6531 106.684ZM104.511 112.355C104.511 113.316 104.605 114.036 104.792 114.513C104.986 114.991 105.295 115.229 105.721 115.229C106.566 115.229 106.989 114.271 106.989 112.355C106.989 110.465 106.566 109.519 105.721 109.519C105.295 109.519 104.986 109.752 104.792 110.216C104.605 110.681 104.511 111.394 104.511 112.355ZM108.867 112.355C108.867 113.839 108.599 114.952 108.063 115.694C107.528 116.436 106.747 116.807 105.721 116.807C104.741 116.807 103.979 116.426 103.437 115.665C102.895 114.897 102.624 113.794 102.624 112.355C102.624 109.406 103.657 107.932 105.721 107.932C106.715 107.932 107.486 108.313 108.034 109.074C108.589 109.835 108.867 110.929 108.867 112.355ZM105.992 102.464L98.1434 116.613H96.2659L104.115 102.464H105.992Z" class="path-5"/> -</g> -<path d="M68.7266 41L67.7285 38.2246H63.9072L62.9297 41H61.207L64.9463 30.9648H66.7236L70.4629 41H68.7266ZM67.2979 36.8164L66.3613 34.0957C66.293 33.9134 66.1973 33.6263 66.0742 33.2344C65.9557 32.8424 65.8737 32.5553 65.8281 32.373C65.7051 32.9336 65.5251 33.5465 65.2881 34.2119L64.3857 36.8164H67.2979ZM75.4463 33.3027C75.7699 33.3027 76.0365 33.3255 76.2461 33.3711L76.0889 34.8682C75.861 34.8135 75.624 34.7861 75.3779 34.7861C74.7354 34.7861 74.2135 34.9958 73.8125 35.415C73.416 35.8343 73.2178 36.3789 73.2178 37.0488V41H71.6113V33.4395H72.8691L73.0811 34.7725H73.1631C73.4137 34.3213 73.7396 33.9635 74.1406 33.6992C74.5462 33.4349 74.9814 33.3027 75.4463 33.3027ZM79.2607 41H77.6543V33.4395H79.2607V41ZM77.5586 31.4365C77.5586 31.1494 77.6361 30.9284 77.791 30.7734C77.9505 30.6185 78.1761 30.541 78.4678 30.541C78.7503 30.541 78.9691 30.6185 79.124 30.7734C79.2835 30.9284 79.3633 31.1494 79.3633 31.4365C79.3633 31.71 79.2835 31.9264 79.124 32.0859C78.9691 32.2409 78.7503 32.3184 78.4678 32.3184C78.1761 32.3184 77.9505 32.2409 77.791 32.0859C77.6361 31.9264 77.5586 31.71 77.5586 31.4365ZM86.6436 38.8467C86.6436 39.585 86.3747 40.1523 85.8369 40.5488C85.2992 40.9408 84.529 41.1367 83.5264 41.1367C82.5192 41.1367 81.7103 40.984 81.0996 40.6787V39.291C81.9883 39.7012 82.8154 39.9062 83.5811 39.9062C84.57 39.9062 85.0645 39.6077 85.0645 39.0107C85.0645 38.8193 85.0098 38.6598 84.9004 38.5322C84.791 38.4046 84.611 38.2725 84.3604 38.1357C84.1097 37.999 83.7611 37.8441 83.3145 37.6709C82.444 37.3337 81.8538 36.9964 81.5439 36.6592C81.2386 36.3219 81.0859 35.8844 81.0859 35.3467C81.0859 34.6995 81.3457 34.1982 81.8652 33.8428C82.3893 33.4827 83.1003 33.3027 83.998 33.3027C84.8867 33.3027 85.7275 33.4827 86.5205 33.8428L86.001 35.0527C85.1852 34.7155 84.4993 34.5469 83.9434 34.5469C83.0957 34.5469 82.6719 34.7884 82.6719 35.2715C82.6719 35.5085 82.7812 35.709 83 35.873C83.2233 36.0371 83.7064 36.2627 84.4492 36.5498C85.0736 36.7913 85.527 37.0124 85.8096 37.2129C86.0921 37.4134 86.3018 37.6458 86.4385 37.9102C86.5752 38.1699 86.6436 38.4821 86.6436 38.8467ZM91.2031 39.8379C91.5951 39.8379 91.987 39.7764 92.3789 39.6533V40.8633C92.2012 40.9408 91.971 41.0046 91.6885 41.0547C91.4105 41.1094 91.1211 41.1367 90.8203 41.1367C89.2982 41.1367 88.5371 40.3346 88.5371 38.7305V34.6562H87.5049V33.9453L88.6123 33.3574L89.1592 31.7578H90.1504V33.4395H92.3037V34.6562H90.1504V38.7031C90.1504 39.0905 90.2461 39.3776 90.4375 39.5645C90.6335 39.7467 90.8887 39.8379 91.2031 39.8379ZM100.603 37.2061C100.603 38.4411 100.286 39.4049 99.6523 40.0977C99.0189 40.7904 98.137 41.1367 97.0068 41.1367C96.3005 41.1367 95.6761 40.9772 95.1338 40.6582C94.5915 40.3392 94.1745 39.8812 93.8828 39.2842C93.5911 38.6872 93.4453 37.9945 93.4453 37.2061C93.4453 35.9801 93.7598 35.0231 94.3887 34.335C95.0176 33.6468 95.904 33.3027 97.0479 33.3027C98.1416 33.3027 99.0075 33.6559 99.6455 34.3623C100.284 35.0641 100.603 36.012 100.603 37.2061ZM95.0996 37.2061C95.0996 38.9515 95.7445 39.8242 97.0342 39.8242C98.3102 39.8242 98.9482 38.9515 98.9482 37.2061C98.9482 35.4788 98.3057 34.6152 97.0205 34.6152C96.346 34.6152 95.8561 34.8385 95.5508 35.2852C95.25 35.7318 95.0996 36.3721 95.0996 37.2061ZM105.271 39.8379C105.663 39.8379 106.055 39.7764 106.447 39.6533V40.8633C106.27 40.9408 106.039 41.0046 105.757 41.0547C105.479 41.1094 105.189 41.1367 104.889 41.1367C103.367 41.1367 102.605 40.3346 102.605 38.7305V34.6562H101.573V33.9453L102.681 33.3574L103.228 31.7578H104.219V33.4395H106.372V34.6562H104.219V38.7031C104.219 39.0905 104.314 39.3776 104.506 39.5645C104.702 39.7467 104.957 39.8379 105.271 39.8379ZM109.571 41H107.965V30.3633H109.571V41ZM115.177 41.1367C114.001 41.1367 113.08 40.7949 112.415 40.1113C111.754 39.4232 111.424 38.4775 111.424 37.2744C111.424 36.0394 111.731 35.0687 112.347 34.3623C112.962 33.6559 113.807 33.3027 114.883 33.3027C115.881 33.3027 116.669 33.6058 117.248 34.2119C117.827 34.818 118.116 35.652 118.116 36.7139V37.582H113.078C113.101 38.3158 113.299 38.8809 113.673 39.2773C114.047 39.6693 114.573 39.8652 115.252 39.8652C115.699 39.8652 116.113 39.8242 116.496 39.7422C116.883 39.6556 117.298 39.5143 117.74 39.3184V40.624C117.348 40.8109 116.952 40.943 116.551 41.0205C116.15 41.098 115.692 41.1367 115.177 41.1367ZM114.883 34.5195C114.372 34.5195 113.962 34.6813 113.652 35.0049C113.347 35.3285 113.165 35.8001 113.105 36.4199H116.537C116.528 35.7956 116.378 35.3239 116.086 35.0049C115.794 34.6813 115.393 34.5195 114.883 34.5195Z" class="path-6"/> -<path d="M68.7744 58V48.0059H69.9365V56.9473H74.3457V58H68.7744ZM79.042 58.1367C77.9346 58.1367 77.0596 57.7995 76.417 57.125C75.779 56.4505 75.46 55.514 75.46 54.3154C75.46 53.1077 75.7562 52.1484 76.3486 51.4375C76.9456 50.7266 77.7454 50.3711 78.748 50.3711C79.6868 50.3711 80.4297 50.681 80.9766 51.3008C81.5234 51.916 81.7969 52.7295 81.7969 53.7412V54.459H76.6357C76.6585 55.3385 76.8796 56.0062 77.2988 56.4619C77.7227 56.9176 78.3174 57.1455 79.083 57.1455C79.8896 57.1455 80.6872 56.9769 81.4756 56.6396V57.6514C81.0745 57.8245 80.694 57.9476 80.334 58.0205C79.9785 58.098 79.5479 58.1367 79.042 58.1367ZM78.7344 51.3213C78.1328 51.3213 77.652 51.5173 77.292 51.9092C76.9365 52.3011 76.7269 52.8434 76.6631 53.5361H80.5801C80.5801 52.8206 80.4206 52.2738 80.1016 51.8955C79.7826 51.5127 79.3268 51.3213 78.7344 51.3213ZM85.3789 58L82.5352 50.5078H83.752L85.3652 54.9512C85.7298 55.9902 85.944 56.6647 86.0078 56.9746H86.0625C86.1126 56.7331 86.2699 56.234 86.5342 55.4775C86.8031 54.7165 87.4023 53.0599 88.332 50.5078H89.5488L86.7051 58H85.3789ZM93.917 58.1367C92.8096 58.1367 91.9346 57.7995 91.292 57.125C90.654 56.4505 90.335 55.514 90.335 54.3154C90.335 53.1077 90.6312 52.1484 91.2236 51.4375C91.8206 50.7266 92.6204 50.3711 93.623 50.3711C94.5618 50.3711 95.3047 50.681 95.8516 51.3008C96.3984 51.916 96.6719 52.7295 96.6719 53.7412V54.459H91.5107C91.5335 55.3385 91.7546 56.0062 92.1738 56.4619C92.5977 56.9176 93.1924 57.1455 93.958 57.1455C94.7646 57.1455 95.5622 56.9769 96.3506 56.6396V57.6514C95.9495 57.8245 95.569 57.9476 95.209 58.0205C94.8535 58.098 94.4229 58.1367 93.917 58.1367ZM93.6094 51.3213C93.0078 51.3213 92.527 51.5173 92.167 51.9092C91.8115 52.3011 91.6019 52.8434 91.5381 53.5361H95.4551C95.4551 52.8206 95.2956 52.2738 94.9766 51.8955C94.6576 51.5127 94.2018 51.3213 93.6094 51.3213ZM99.748 58H98.6133V47.3633H99.748V58ZM112.312 55.7031H110.829V58H109.742V55.7031H104.882V54.7119L109.626 47.9512H110.829V54.6709H112.312V55.7031ZM109.742 54.6709V51.3486C109.742 50.6969 109.765 49.9609 109.811 49.1406H109.756C109.537 49.5781 109.332 49.9404 109.141 50.2275L106.017 54.6709H109.742Z" class="path-7"/> -<path d="M26.4681 162.65C25.5611 162.65 24.8441 162.953 24.3172 163.559C23.7941 164.161 23.5325 164.987 23.5325 166.037C23.5325 167.117 23.7846 167.953 24.289 168.544C24.7971 169.131 25.5197 169.425 26.4568 169.425C27.0327 169.425 27.6894 169.321 28.4271 169.114V169.955C27.855 170.17 27.1494 170.277 26.3101 170.277C25.0944 170.277 24.1554 169.908 23.493 169.17C22.8343 168.433 22.505 167.385 22.505 166.026C22.505 165.175 22.6631 164.43 22.9792 163.79C23.2991 163.15 23.7583 162.657 24.3567 162.311C24.9589 161.965 25.6665 161.792 26.4794 161.792C27.3451 161.792 28.1016 161.95 28.7489 162.266L28.3424 163.09C27.7177 162.797 27.0929 162.65 26.4681 162.65ZM35.4275 167.065C35.4275 168.073 35.1735 168.862 34.6654 169.43C34.1573 169.995 33.4554 170.277 32.5596 170.277C32.0064 170.277 31.5152 170.147 31.0862 169.887C30.6571 169.628 30.3259 169.255 30.0925 168.77C29.8592 168.284 29.7425 167.716 29.7425 167.065C29.7425 166.056 29.9947 165.271 30.499 164.711C31.0034 164.146 31.7034 163.864 32.5991 163.864C33.4648 163.864 34.1517 164.152 34.6597 164.727C35.1716 165.303 35.4275 166.082 35.4275 167.065ZM30.7135 167.065C30.7135 167.855 30.8716 168.457 31.1878 168.871C31.5039 169.285 31.9687 169.492 32.5822 169.492C33.1957 169.492 33.6605 169.287 33.9766 168.877C34.2966 168.463 34.4565 167.859 34.4565 167.065C34.4565 166.278 34.2966 165.682 33.9766 165.275C33.6605 164.865 33.1919 164.66 32.5709 164.66C31.9574 164.66 31.4945 164.861 31.1821 165.264C30.8697 165.666 30.7135 166.267 30.7135 167.065ZM41.3101 170.164V166.161C41.3101 165.657 41.1953 165.281 40.9658 165.032C40.7362 164.784 40.3768 164.66 39.8875 164.66C39.2364 164.66 38.7603 164.837 38.4592 165.19C38.1618 165.544 38.0132 166.124 38.0132 166.929V170.164H37.076V161.38H38.0132V164.039C38.0132 164.359 37.9981 164.624 37.968 164.835H38.0245C38.2089 164.537 38.4705 164.304 38.8092 164.135C39.1517 163.962 39.5412 163.875 39.9778 163.875C40.7343 163.875 41.3007 164.056 41.6771 164.417C42.0572 164.774 42.2473 165.345 42.2473 166.128V170.164H41.3101ZM46.7919 170.277C45.8773 170.277 45.1547 169.998 44.624 169.441C44.0971 168.884 43.8337 168.111 43.8337 167.121C43.8337 166.124 44.0783 165.332 44.5676 164.744C45.0606 164.157 45.7212 163.864 46.5492 163.864C47.3245 163.864 47.9379 164.12 48.3896 164.631C48.8412 165.14 49.067 165.811 49.067 166.647V167.24H44.8047C44.8235 167.966 45.0061 168.517 45.3523 168.894C45.7023 169.27 46.1935 169.458 46.8258 169.458C47.492 169.458 48.1506 169.319 48.8017 169.041V169.876C48.4705 170.019 48.1562 170.121 47.8589 170.181C47.5653 170.245 47.2097 170.277 46.7919 170.277ZM46.5379 164.648C46.0411 164.648 45.644 164.81 45.3467 165.134C45.0531 165.458 44.88 165.905 44.8273 166.478H48.0622C48.0622 165.887 47.9304 165.435 47.667 165.123C47.4035 164.806 47.0271 164.648 46.5379 164.648ZM53.4931 163.864C53.7679 163.864 54.0144 163.886 54.2327 163.931L54.1028 164.801C53.8469 164.744 53.6211 164.716 53.4254 164.716C52.9248 164.716 52.4957 164.919 52.1382 165.326C51.7844 165.732 51.6075 166.239 51.6075 166.845V170.164H50.6704V163.977H51.4438L51.5511 165.123H51.5962C51.8258 164.72 52.1024 164.409 52.4261 164.191C52.7498 163.973 53.1055 163.864 53.4931 163.864ZM58.0039 170.277C57.0893 170.277 56.3667 169.998 55.836 169.441C55.3091 168.884 55.0456 168.111 55.0456 167.121C55.0456 166.124 55.2903 165.332 55.7795 164.744C56.2726 164.157 56.9331 163.864 57.7611 163.864C58.5364 163.864 59.1499 164.12 59.6015 164.631C60.0532 165.14 60.279 165.811 60.279 166.647V167.24H56.0166C56.0355 167.966 56.218 168.517 56.5643 168.894C56.9143 169.27 57.4054 169.458 58.0377 169.458C58.7039 169.458 59.3625 169.319 60.0137 169.041V169.876C59.6825 170.019 59.3682 170.121 59.0709 170.181C58.7773 170.245 58.4216 170.277 58.0039 170.277ZM57.7498 164.648C57.253 164.648 56.8559 164.81 56.5586 165.134C56.2651 165.458 56.0919 165.905 56.0392 166.478H59.2741C59.2741 165.887 59.1424 165.435 58.8789 165.123C58.6155 164.806 58.2391 164.648 57.7498 164.648ZM66.1164 170.164V166.161C66.1164 165.657 66.0016 165.281 65.7721 165.032C65.5425 164.784 65.183 164.66 64.6938 164.66C64.0464 164.66 63.5722 164.835 63.2711 165.185C62.97 165.535 62.8195 166.112 62.8195 166.918V170.164H61.8823V163.977H62.6445L62.7969 164.823H62.8421C63.034 164.519 63.3031 164.283 63.6494 164.118C63.9956 163.948 64.3814 163.864 64.8067 163.864C65.5519 163.864 66.1127 164.044 66.489 164.406C66.8654 164.763 67.0536 165.337 67.0536 166.128V170.164H66.1164ZM70.9829 169.504C71.1485 169.504 71.3084 169.492 71.4627 169.47C71.617 169.443 71.7393 169.417 71.8297 169.391V170.108C71.7281 170.157 71.5775 170.196 71.378 170.226C71.1823 170.26 71.0054 170.277 70.8474 170.277C69.6505 170.277 69.0521 169.647 69.0521 168.386V164.705H68.1658V164.253L69.0521 163.864L69.4473 162.543H69.9892V163.977H71.7845V164.705H69.9892V168.346C69.9892 168.719 70.0777 169.005 70.2546 169.204C70.4315 169.404 70.6742 169.504 70.9829 169.504ZM80.9302 161.91H81.9633L78.9882 170.164H78.0397L75.0815 161.91H76.0977L77.9946 167.251C78.2128 167.864 78.386 168.461 78.5139 169.041C78.6494 168.431 78.8263 167.823 79.0446 167.217L80.9302 161.91ZM88.3032 167.065C88.3032 168.073 88.0492 168.862 87.5411 169.43C87.033 169.995 86.3311 170.277 85.4353 170.277C84.8821 170.277 84.3909 170.147 83.9618 169.887C83.5328 169.628 83.2016 169.255 82.9682 168.77C82.7349 168.284 82.6182 167.716 82.6182 167.065C82.6182 166.056 82.8704 165.271 83.3747 164.711C83.879 164.146 84.5791 163.864 85.4748 163.864C86.3405 163.864 87.0273 164.152 87.5354 164.727C88.0473 165.303 88.3032 166.082 88.3032 167.065ZM83.5892 167.065C83.5892 167.855 83.7473 168.457 84.0635 168.871C84.3796 169.285 84.8444 169.492 85.4579 169.492C86.0714 169.492 86.5362 169.287 86.8523 168.877C87.1722 168.463 87.3322 167.859 87.3322 167.065C87.3322 166.278 87.1722 165.682 86.8523 165.275C86.5362 164.865 86.0676 164.66 85.4466 164.66C84.8331 164.66 84.3702 164.861 84.0578 165.264C83.7454 165.666 83.5892 166.267 83.5892 167.065ZM91.9502 169.504C92.1158 169.504 92.2758 169.492 92.4301 169.47C92.5844 169.443 92.7067 169.417 92.797 169.391V170.108C92.6954 170.157 92.5449 170.196 92.3454 170.226C92.1497 170.26 91.9728 170.277 91.8147 170.277C90.6179 170.277 90.0195 169.647 90.0195 168.386V164.705H89.1331V164.253L90.0195 163.864L90.4146 162.543H90.9566V163.977H92.7519V164.705H90.9566V168.346C90.9566 168.719 91.045 169.005 91.2219 169.204C91.3988 169.404 91.6416 169.504 91.9502 169.504ZM96.6529 170.277C95.7383 170.277 95.0157 169.998 94.485 169.441C93.9581 168.884 93.6947 168.111 93.6947 167.121C93.6947 166.124 93.9393 165.332 94.4286 164.744C94.9216 164.157 95.5821 163.864 96.4102 163.864C97.1855 163.864 97.7989 164.12 98.2506 164.631C98.7022 165.14 98.928 165.811 98.928 166.647V167.24H94.6657C94.6845 167.966 94.8671 168.517 95.2133 168.894C95.5633 169.27 96.0545 169.458 96.6868 169.458C97.353 169.458 98.0116 169.319 98.6627 169.041V169.876C98.3315 170.019 98.0172 170.121 97.7199 170.181C97.4263 170.245 97.0707 170.277 96.6529 170.277ZM96.3989 164.648C95.9021 164.648 95.505 164.81 95.2077 165.134C94.9141 165.458 94.741 165.905 94.6883 166.478H97.9231C97.9231 165.887 97.7914 165.435 97.528 165.123C97.2645 164.806 96.8881 164.648 96.3989 164.648ZM104.523 168.476C104.523 169.052 104.308 169.496 103.879 169.808C103.45 170.121 102.848 170.277 102.073 170.277C101.252 170.277 100.612 170.147 100.153 169.887V169.018C100.45 169.169 100.768 169.287 101.107 169.374C101.45 169.46 101.779 169.504 102.095 169.504C102.584 169.504 102.961 169.426 103.224 169.272C103.488 169.114 103.619 168.875 103.619 168.555C103.619 168.314 103.514 168.109 103.303 167.94C103.096 167.767 102.69 167.563 102.084 167.33C101.508 167.115 101.098 166.929 100.853 166.771C100.612 166.609 100.432 166.427 100.311 166.224C100.195 166.02 100.136 165.778 100.136 165.495C100.136 164.991 100.341 164.594 100.752 164.304C101.162 164.01 101.724 163.864 102.44 163.864C103.106 163.864 103.757 163.999 104.393 164.27L104.06 165.032C103.439 164.776 102.876 164.648 102.372 164.648C101.928 164.648 101.593 164.718 101.367 164.857C101.141 164.997 101.028 165.189 101.028 165.433C101.028 165.599 101.07 165.74 101.152 165.857C101.239 165.973 101.376 166.084 101.564 166.19C101.753 166.295 102.114 166.447 102.648 166.647C103.382 166.914 103.877 167.183 104.133 167.454C104.393 167.725 104.523 168.066 104.523 168.476ZM105.917 169.566C105.917 169.313 105.974 169.123 106.087 168.995C106.203 168.864 106.369 168.798 106.583 168.798C106.802 168.798 106.971 168.864 107.091 168.995C107.216 169.123 107.278 169.313 107.278 169.566C107.278 169.81 107.216 169.998 107.091 170.13C106.967 170.262 106.798 170.328 106.583 170.328C106.391 170.328 106.231 170.269 106.103 170.153C105.979 170.032 105.917 169.837 105.917 169.566ZM105.917 164.581C105.917 164.073 106.139 163.819 106.583 163.819C107.046 163.819 107.278 164.073 107.278 164.581C107.278 164.825 107.216 165.013 107.091 165.145C106.967 165.277 106.798 165.343 106.583 165.343C106.391 165.343 106.231 165.284 106.103 165.168C105.979 165.047 105.917 164.852 105.917 164.581Z" class="path-8"/> -<path d="M121.498 165.433C121.498 167.059 121.17 168.273 120.515 169.074C119.861 169.876 118.874 170.277 117.557 170.277C117.057 170.277 116.697 170.247 116.479 170.187V169.074C116.814 169.169 117.151 169.216 117.489 169.216C118.385 169.216 119.053 168.975 119.494 168.493C119.934 168.011 120.175 167.255 120.216 166.224H120.148C119.926 166.562 119.657 166.807 119.341 166.957C119.029 167.108 118.662 167.183 118.24 167.183C117.51 167.183 116.936 166.956 116.518 166.5C116.101 166.045 115.892 165.42 115.892 164.626C115.892 163.764 116.133 163.079 116.614 162.571C117.1 162.059 117.76 161.803 118.596 161.803C119.183 161.803 119.695 161.946 120.132 162.232C120.568 162.518 120.905 162.934 121.142 163.48C121.379 164.022 121.498 164.673 121.498 165.433ZM118.619 162.904C118.159 162.904 117.807 163.055 117.563 163.356C117.318 163.653 117.196 164.073 117.196 164.615C117.196 165.085 117.309 165.456 117.535 165.727C117.764 165.994 118.11 166.128 118.573 166.128C119.021 166.128 119.398 165.994 119.702 165.727C120.007 165.459 120.16 165.147 120.16 164.79C120.16 164.455 120.094 164.142 119.962 163.852C119.834 163.559 119.654 163.327 119.42 163.158C119.187 162.989 118.92 162.904 118.619 162.904ZM126.426 161.91L123.355 170.164H122.102L125.179 161.91H126.426ZM130.931 170.164H129.605V164.835C129.605 164.199 129.62 163.694 129.65 163.322C129.563 163.412 129.456 163.512 129.328 163.621C129.204 163.73 128.782 164.076 128.063 164.66L127.397 163.819L129.825 161.91H130.931V170.164ZM139.236 166.037C139.236 167.471 139.004 168.536 138.541 169.233C138.082 169.929 137.379 170.277 136.43 170.277C135.512 170.277 134.815 169.918 134.341 169.199C133.867 168.48 133.63 167.426 133.63 166.037C133.63 164.581 133.859 163.508 134.319 162.819C134.782 162.127 135.485 161.781 136.43 161.781C137.352 161.781 138.05 162.142 138.525 162.864C138.999 163.587 139.236 164.645 139.236 166.037ZM134.974 166.037C134.974 167.163 135.088 167.966 135.318 168.448C135.551 168.93 135.922 169.17 136.43 169.17C136.938 169.17 137.309 168.926 137.542 168.437C137.779 167.947 137.898 167.147 137.898 166.037C137.898 164.931 137.779 164.131 137.542 163.638C137.309 163.141 136.938 162.893 136.43 162.893C135.922 162.893 135.551 163.135 135.318 163.621C135.088 164.106 134.974 164.912 134.974 166.037Z" class="path-9"/> -<g clip-path="url(#clip2_13904_184784)"> -<path d="M152.794 160.383C149.601 160.383 147.013 162.972 147.013 166.164C147.013 169.357 149.601 171.945 152.794 171.945C155.986 171.945 158.575 169.357 158.575 166.164C158.575 162.972 155.986 160.383 152.794 160.383ZM152.794 170.826C150.217 170.826 148.132 168.741 148.132 166.164C148.132 163.588 150.217 161.502 152.794 161.502C155.37 161.502 157.456 163.587 157.456 166.164C157.456 168.74 155.371 170.826 152.794 170.826ZM155.294 164.877C155.294 166.44 153.606 166.464 153.606 167.042V167.189C153.606 167.344 153.48 167.469 153.326 167.469H152.262C152.107 167.469 151.982 167.344 151.982 167.189V166.988C151.982 166.154 152.614 165.821 153.091 165.554C153.501 165.324 153.751 165.168 153.751 164.864C153.751 164.462 153.239 164.195 152.824 164.195C152.284 164.195 152.034 164.451 151.683 164.894C151.589 165.013 151.416 165.035 151.295 164.943L150.646 164.452C150.527 164.361 150.5 164.194 150.585 164.07C151.135 163.261 151.837 162.807 152.929 162.807C154.073 162.807 155.294 163.7 155.294 164.877ZM153.773 168.775C153.773 169.314 153.334 169.754 152.794 169.754C152.254 169.754 151.815 169.314 151.815 168.775C151.815 168.235 152.254 167.796 152.794 167.796C153.334 167.796 153.773 168.235 153.773 168.775Z" class="path-10"/> -</g> -<path d="M221.236 42.154C220.882 42.154 220.603 42.1032 220.4 42.0016V41.183C220.667 41.2582 220.946 41.2959 221.236 41.2959C221.608 41.2959 221.891 41.183 222.083 40.9571C222.278 40.7313 222.376 40.4058 222.376 39.9805V31.7268H223.336V39.9014C223.336 40.6165 223.155 41.1698 222.794 41.5612C222.433 41.9564 221.913 42.154 221.236 42.154ZM226.272 33.793V37.807C226.272 38.3113 226.386 38.6877 226.616 38.9361C226.845 39.1845 227.205 39.3087 227.694 39.3087C228.342 39.3087 228.814 39.1318 229.111 38.778C229.412 38.4242 229.563 37.8465 229.563 37.0448V33.793H230.5V39.9805H229.727L229.591 39.1506H229.54C229.348 39.4554 229.081 39.6888 228.739 39.8506C228.4 40.0125 228.012 40.0934 227.576 40.0934C226.823 40.0934 226.258 39.9146 225.882 39.5571C225.509 39.1995 225.323 38.6274 225.323 37.8408V33.793H226.272ZM235.316 33.6801C235.59 33.6801 235.837 33.7027 236.055 33.7478L235.925 34.6173C235.669 34.5608 235.444 34.5326 235.248 34.5326C234.747 34.5326 234.318 34.7358 233.961 35.1423C233.607 35.5488 233.43 36.055 233.43 36.6609V39.9805H232.493V33.793H233.266L233.374 34.939H233.419C233.648 34.5363 233.925 34.2258 234.249 34.0075C234.572 33.7892 234.928 33.6801 235.316 33.6801ZM242.553 36.8811C242.553 37.8898 242.299 38.6782 241.791 39.2466C241.283 39.8111 240.581 40.0934 239.685 40.0934C239.132 40.0934 238.641 39.9635 238.212 39.7038C237.783 39.4441 237.451 39.0715 237.218 38.586C236.985 38.1005 236.868 37.5322 236.868 36.8811C236.868 35.8724 237.12 35.0877 237.625 34.5269C238.129 33.9624 238.829 33.6801 239.725 33.6801C240.59 33.6801 241.277 33.968 241.785 34.5439C242.297 35.1197 242.553 35.8988 242.553 36.8811ZM237.839 36.8811C237.839 37.6715 237.997 38.2736 238.313 38.6877C238.629 39.1017 239.094 39.3087 239.708 39.3087C240.321 39.3087 240.786 39.1035 241.102 38.6933C241.422 38.2793 241.582 37.6752 241.582 36.8811C241.582 36.0945 241.422 35.4979 241.102 35.0915C240.786 34.6812 240.317 34.4761 239.696 34.4761C239.083 34.4761 238.62 34.6775 238.308 35.0802C237.995 35.4829 237.839 36.0832 237.839 36.8811ZM247.024 33.6801C247.299 33.6801 247.546 33.7027 247.764 33.7478L247.634 34.6173C247.378 34.5608 247.152 34.5326 246.957 34.5326C246.456 34.5326 246.027 34.7358 245.669 35.1423C245.316 35.5488 245.139 36.055 245.139 36.6609V39.9805H244.202V33.793H244.975L245.082 34.939H245.127C245.357 34.5363 245.634 34.2258 245.957 34.0075C246.281 33.7892 246.637 33.6801 247.024 33.6801ZM253.025 36.548V39.9805H252.066V31.7268H254.33C255.342 31.7268 256.089 31.9206 256.571 32.3082C257.056 32.6959 257.299 33.2793 257.299 34.0583C257.299 35.1498 256.746 35.8875 255.639 36.2714L257.881 39.9805H256.746L254.747 36.548H253.025ZM253.025 35.7238H254.341C255.018 35.7238 255.515 35.5902 255.831 35.3229C256.147 35.052 256.306 34.6474 256.306 34.1092C256.306 33.5634 256.144 33.1701 255.82 32.9292C255.5 32.6884 254.984 32.5679 254.273 32.5679H253.025V35.7238ZM261.686 40.0934C260.771 40.0934 260.048 39.8149 259.518 39.2578C258.991 38.7008 258.727 37.9274 258.727 36.9375C258.727 35.9402 258.972 35.1479 259.461 34.5608C259.954 33.9737 260.615 33.6801 261.443 33.6801C262.218 33.6801 262.832 33.936 263.283 34.4479C263.735 34.956 263.961 35.6278 263.961 36.4633V37.0561H259.698C259.717 37.7825 259.9 38.3339 260.246 38.7102C260.596 39.0866 261.087 39.2748 261.72 39.2748C262.386 39.2748 263.044 39.1355 263.695 38.857V39.6925C263.364 39.8356 263.05 39.9372 262.753 39.9974C262.459 40.0614 262.103 40.0934 261.686 40.0934ZM261.432 34.4648C260.935 34.4648 260.538 34.6267 260.24 34.9503C259.947 35.274 259.774 35.7219 259.721 36.294H262.956C262.956 35.7031 262.824 35.2514 262.561 34.939C262.297 34.6229 261.921 34.4648 261.432 34.4648ZM270.617 39.9805L269.482 36.3504C269.411 36.1284 269.277 35.624 269.081 34.8374H269.036C268.886 35.4961 268.754 36.0042 268.641 36.3617L267.472 39.9805H266.388L264.7 33.793H265.683C266.082 35.3474 266.385 36.5311 266.592 37.344C266.802 38.157 266.923 38.7046 266.953 38.9869H266.998C267.039 38.7723 267.105 38.4957 267.196 38.157C267.29 37.8145 267.371 37.5435 267.438 37.344L268.573 33.793H269.589L270.696 37.344C270.907 37.9914 271.05 38.5352 271.125 38.9756H271.17C271.185 38.8401 271.225 38.6312 271.289 38.3489C271.356 38.0666 271.75 36.548 272.469 33.793H273.44L271.729 39.9805H270.617ZM278.368 39.9805L278.182 39.0998H278.137C277.828 39.4874 277.519 39.7509 277.211 39.8901C276.906 40.0256 276.524 40.0934 276.065 40.0934C275.451 40.0934 274.97 39.9353 274.62 39.6192C274.273 39.303 274.1 38.8533 274.1 38.2699C274.1 37.0203 275.099 36.3655 277.098 36.3053L278.148 36.2714V35.8875C278.148 35.402 278.043 35.0444 277.832 34.8148C277.625 34.5815 277.292 34.4648 276.833 34.4648C276.317 34.4648 275.734 34.6229 275.082 34.939L274.795 34.2221C275.099 34.0565 275.432 33.9266 275.794 33.8325C276.159 33.7384 276.524 33.6914 276.889 33.6914C277.627 33.6914 278.172 33.8551 278.526 34.1825C278.884 34.51 279.063 35.035 279.063 35.7576V39.9805H278.368ZM276.251 39.3199C276.834 39.3199 277.292 39.16 277.623 38.8401C277.958 38.5202 278.125 38.0723 278.125 37.4965V36.9375L277.188 36.9771C276.443 37.0034 275.905 37.1201 275.574 37.3271C275.246 37.5303 275.082 37.8484 275.082 38.2812C275.082 38.6199 275.184 38.8777 275.387 39.0546C275.594 39.2315 275.882 39.3199 276.251 39.3199ZM283.822 33.6801C284.096 33.6801 284.343 33.7027 284.561 33.7478L284.431 34.6173C284.175 34.5608 283.95 34.5326 283.754 34.5326C283.253 34.5326 282.824 34.7358 282.467 35.1423C282.113 35.5488 281.936 36.055 281.936 36.6609V39.9805H280.999V33.793H281.772L281.88 34.939H281.925C282.154 34.5363 282.431 34.2258 282.755 34.0075C283.078 33.7892 283.434 33.6801 283.822 33.6801ZM289.93 39.1506H289.879C289.446 39.7791 288.799 40.0934 287.937 40.0934C287.128 40.0934 286.498 39.8167 286.046 39.2635C285.598 38.7102 285.374 37.9236 285.374 36.9037C285.374 35.8837 285.6 35.0915 286.052 34.5269C286.503 33.9624 287.132 33.6801 287.937 33.6801C288.777 33.6801 289.42 33.985 289.868 34.5947H289.941L289.902 34.1487L289.879 33.714V31.1961H290.816V39.9805H290.054L289.93 39.1506ZM288.056 39.3087C288.696 39.3087 289.159 39.1355 289.445 38.7893C289.734 38.4392 289.879 37.8766 289.879 37.1013V36.9037C289.879 36.0267 289.732 35.402 289.439 35.0294C289.149 34.653 288.684 34.4648 288.044 34.4648C287.495 34.4648 287.073 34.6794 286.78 35.1084C286.49 35.5337 286.345 36.1359 286.345 36.915C286.345 37.7053 286.49 38.3019 286.78 38.7046C287.07 39.1073 287.495 39.3087 288.056 39.3087ZM296.801 38.2925C296.801 38.8683 296.586 39.3124 296.157 39.6248C295.728 39.9372 295.126 40.0934 294.351 40.0934C293.53 40.0934 292.89 39.9635 292.431 39.7038V38.8344C292.728 38.985 293.046 39.1035 293.385 39.1901C293.728 39.2767 294.057 39.3199 294.373 39.3199C294.862 39.3199 295.239 39.2428 295.502 39.0885C295.766 38.9304 295.897 38.6914 295.897 38.3715C295.897 38.1306 295.792 37.9255 295.581 37.7561C295.374 37.583 294.968 37.3798 294.362 37.1464C293.786 36.9319 293.376 36.7456 293.131 36.5875C292.89 36.4257 292.71 36.2432 292.589 36.0399C292.472 35.8367 292.414 35.5939 292.414 35.3116C292.414 34.8073 292.619 34.4102 293.029 34.1204C293.44 33.8269 294.002 33.6801 294.717 33.6801C295.384 33.6801 296.035 33.8156 296.671 34.0866L296.338 34.8487C295.717 34.5928 295.154 34.4648 294.65 34.4648C294.206 34.4648 293.871 34.5344 293.645 34.6737C293.419 34.813 293.306 35.0049 293.306 35.2495C293.306 35.4151 293.347 35.5563 293.43 35.673C293.517 35.7896 293.654 35.9007 293.842 36.006C294.031 36.1114 294.392 36.2639 294.926 36.4633C295.66 36.7305 296.155 36.9996 296.411 37.2706C296.671 37.5416 296.801 37.8822 296.801 38.2925Z" class="path-11"/> -<g clip-path="url(#clip3_13904_184784)"> -<path d="M310.691 30.1992C307.499 30.1992 304.91 32.7886 304.91 35.9802C304.91 39.1737 307.499 41.7612 310.691 41.7612C313.884 41.7612 316.472 39.1737 316.472 35.9802C316.472 32.7886 313.884 30.1992 310.691 30.1992ZM310.691 40.6423C308.115 40.6423 306.029 38.5576 306.029 35.9802C306.029 33.4045 308.115 31.3181 310.691 31.3181C313.267 31.3181 315.353 33.4037 315.353 35.9802C315.353 38.5567 313.269 40.6423 310.691 40.6423ZM313.191 34.6935C313.191 36.2565 311.503 36.2805 311.503 36.8581V37.0059C311.503 37.1603 311.378 37.2856 311.223 37.2856H310.159C310.005 37.2856 309.88 37.1603 309.88 37.0059V36.804C309.88 35.9708 310.511 35.6377 310.989 35.3701C311.398 35.1406 311.649 34.9845 311.649 34.6806C311.649 34.2785 311.136 34.0117 310.722 34.0117C310.181 34.0117 309.931 34.2676 309.581 34.7103C309.486 34.8296 309.314 34.8518 309.192 34.7598L308.544 34.268C308.425 34.1777 308.398 34.0101 308.482 33.8866C309.033 33.0778 309.734 32.6235 310.826 32.6235C311.97 32.6235 313.191 33.5164 313.191 34.6935ZM311.67 38.591C311.67 39.1308 311.231 39.57 310.691 39.57C310.152 39.57 309.712 39.1308 309.712 38.591C309.712 38.0511 310.152 37.6119 310.691 37.6119C311.231 37.6119 311.67 38.0511 311.67 38.591Z" class="path-12"/> -</g> -<path d="M270.455 141.726C271.881 141.726 273.01 142.104 273.842 142.859C274.674 143.614 275.09 144.643 275.09 145.946C275.09 147.456 274.616 148.637 273.668 149.488C272.726 150.333 271.384 150.756 269.642 150.756C268.061 150.756 266.819 150.501 265.916 149.991V147.93C266.438 148.227 267.038 148.456 267.716 148.617C268.393 148.779 269.022 148.859 269.603 148.859C270.629 148.859 271.41 148.63 271.945 148.172C272.481 147.714 272.748 147.043 272.748 146.159C272.748 144.469 271.671 143.623 269.516 143.623C269.213 143.623 268.838 143.656 268.393 143.72C267.948 143.778 267.558 143.846 267.222 143.923L266.206 143.323L266.748 136.413H274.103V138.436H268.751L268.432 141.939C268.658 141.901 268.932 141.856 269.255 141.804C269.584 141.752 269.984 141.726 270.455 141.726ZM277.016 144.533C277.016 138.997 279.271 136.229 283.781 136.229C284.491 136.229 285.091 136.284 285.581 136.394V138.291C285.091 138.149 284.523 138.078 283.878 138.078C282.362 138.078 281.223 138.484 280.462 139.297C279.7 140.11 279.287 141.414 279.223 143.207H279.339C279.642 142.685 280.068 142.281 280.617 141.997C281.165 141.707 281.81 141.562 282.552 141.562C283.836 141.562 284.836 141.956 285.552 142.743C286.269 143.53 286.627 144.598 286.627 145.946C286.627 147.43 286.21 148.604 285.378 149.469C284.552 150.327 283.423 150.756 281.991 150.756C280.978 150.756 280.097 150.514 279.349 150.03C278.6 149.54 278.023 148.83 277.616 147.901C277.216 146.966 277.016 145.843 277.016 144.533ZM281.952 148.879C282.733 148.879 283.333 148.627 283.752 148.124C284.178 147.62 284.391 146.901 284.391 145.965C284.391 145.153 284.191 144.514 283.791 144.049C283.397 143.585 282.804 143.352 282.01 143.352C281.52 143.352 281.068 143.459 280.655 143.672C280.242 143.878 279.917 144.165 279.678 144.533C279.439 144.894 279.32 145.265 279.32 145.646C279.32 146.556 279.565 147.324 280.055 147.949C280.552 148.569 281.184 148.879 281.952 148.879ZM291.417 148.482C291.108 149.682 290.54 151.227 289.714 153.117H288.04C288.485 151.375 288.817 149.756 289.036 148.259H291.272L291.417 148.482ZM303.195 143.488C303.195 145.946 302.799 147.772 302.005 148.966C301.218 150.159 300.011 150.756 298.385 150.756C296.811 150.756 295.617 150.14 294.805 148.908C293.992 147.675 293.585 145.869 293.585 143.488C293.585 140.991 293.979 139.152 294.766 137.971C295.559 136.784 296.766 136.191 298.385 136.191C299.966 136.191 301.163 136.81 301.976 138.049C302.789 139.288 303.195 141.101 303.195 143.488ZM295.888 143.488C295.888 145.417 296.085 146.795 296.479 147.62C296.879 148.446 297.514 148.859 298.385 148.859C299.256 148.859 299.892 148.44 300.292 147.601C300.698 146.762 300.902 145.391 300.902 143.488C300.902 141.591 300.698 140.22 300.292 139.375C299.892 138.523 299.256 138.097 298.385 138.097C297.514 138.097 296.879 138.513 296.479 139.346C296.085 140.178 295.888 141.559 295.888 143.488ZM314.519 143.488C314.519 145.946 314.122 147.772 313.328 148.966C312.541 150.159 311.335 150.756 309.709 150.756C308.134 150.756 306.941 150.14 306.128 148.908C305.315 147.675 304.908 145.869 304.908 143.488C304.908 140.991 305.302 139.152 306.089 137.971C306.883 136.784 308.089 136.191 309.709 136.191C311.289 136.191 312.486 136.81 313.299 138.049C314.112 139.288 314.519 141.101 314.519 143.488ZM307.212 143.488C307.212 145.417 307.409 146.795 307.802 147.62C308.202 148.446 308.838 148.859 309.709 148.859C310.58 148.859 311.215 148.44 311.615 147.601C312.022 146.762 312.225 145.391 312.225 143.488C312.225 141.591 312.022 140.22 311.615 139.375C311.215 138.523 310.58 138.097 309.709 138.097C308.838 138.097 308.202 138.513 307.802 139.346C307.409 140.178 307.212 141.559 307.212 143.488ZM325.842 143.488C325.842 145.946 325.445 147.772 324.651 148.966C323.864 150.159 322.658 150.756 321.032 150.756C319.458 150.756 318.264 150.14 317.451 148.908C316.638 147.675 316.232 145.869 316.232 143.488C316.232 140.991 316.625 139.152 317.412 137.971C318.206 136.784 319.412 136.191 321.032 136.191C322.613 136.191 323.809 136.81 324.622 138.049C325.435 139.288 325.842 141.101 325.842 143.488ZM318.535 143.488C318.535 145.417 318.732 146.795 319.125 147.62C319.525 148.446 320.161 148.859 321.032 148.859C321.903 148.859 322.538 148.44 322.938 147.601C323.345 146.762 323.548 145.391 323.548 143.488C323.548 141.591 323.345 140.22 322.938 139.375C322.538 138.523 321.903 138.097 321.032 138.097C320.161 138.097 319.525 138.513 319.125 139.346C318.732 140.178 318.535 141.559 318.535 143.488ZM343.088 140.691C343.088 142.168 342.604 143.301 341.636 144.088C340.669 144.875 339.291 145.269 337.504 145.269H336.033V150.562H333.72V136.413H337.794C339.562 136.413 340.885 136.775 341.762 137.497C342.646 138.22 343.088 139.284 343.088 140.691ZM336.033 143.323H337.262C338.449 143.323 339.32 143.117 339.875 142.704C340.43 142.291 340.707 141.646 340.707 140.768C340.707 139.955 340.459 139.349 339.962 138.949C339.465 138.549 338.691 138.349 337.639 138.349H336.033V143.323ZM357.702 150.562H354.866L347.908 139.288H347.83L347.879 139.917C347.969 141.117 348.014 142.214 348.014 143.207V150.562H345.914V136.413H348.721L355.66 147.63H355.718C355.705 147.482 355.679 146.943 355.64 146.014C355.602 145.078 355.582 144.349 355.582 143.827V136.413H357.702V150.562ZM372.238 150.562H369.557L365.115 144.156L363.751 145.269V150.562H361.437V136.413H363.751V143.169C364.383 142.394 365.012 141.649 365.638 140.933L369.461 136.413H372.093C369.622 139.317 367.851 141.385 366.78 142.617L372.238 150.562Z" class="path-13"/> -<path d="M274.418 86.8096C274.418 87.7064 274.156 88.4549 273.634 89.0549C273.111 89.6485 272.376 90.0485 271.427 90.255V90.3324C272.563 90.4743 273.414 90.8292 273.982 91.397C274.55 91.9583 274.834 92.7067 274.834 93.6423C274.834 95.0036 274.353 96.0553 273.392 96.7973C272.431 97.5328 271.063 97.9006 269.288 97.9006C267.721 97.9006 266.398 97.6457 265.32 97.136V95.1133C265.92 95.4101 266.556 95.6392 267.227 95.8005C267.898 95.9618 268.543 96.0424 269.163 96.0424C270.259 96.0424 271.079 95.8392 271.621 95.4327C272.163 95.0262 272.434 94.3972 272.434 93.5455C272.434 92.7906 272.134 92.2357 271.534 91.8809C270.934 91.526 269.992 91.3486 268.708 91.3486H267.479V89.5001H268.727C270.985 89.5001 272.114 88.7194 272.114 87.158C272.114 86.5515 271.918 86.0838 271.524 85.7547C271.13 85.4257 270.55 85.2611 269.782 85.2611C269.246 85.2611 268.73 85.3386 268.234 85.4934C267.737 85.6418 267.15 85.9354 266.472 86.3741L265.359 84.7869C266.656 83.832 268.163 83.3546 269.879 83.3546C271.305 83.3546 272.418 83.661 273.218 84.274C274.018 84.8869 274.418 85.7321 274.418 86.8096ZM277.099 96.4973C277.099 96.0263 277.221 95.665 277.466 95.4133C277.712 95.1617 278.066 95.0359 278.531 95.0359C279.002 95.0359 279.36 95.1682 279.605 95.4327C279.85 95.6908 279.973 96.0456 279.973 96.4973C279.973 96.9554 279.847 97.3199 279.595 97.5909C279.35 97.8554 278.995 97.9877 278.531 97.9877C278.066 97.9877 277.712 97.8554 277.466 97.5909C277.221 97.3264 277.099 96.9618 277.099 96.4973ZM282.18 91.6776C282.18 86.1418 284.434 83.3739 288.944 83.3739C289.654 83.3739 290.254 83.4288 290.745 83.5385V85.4353C290.254 85.2934 289.686 85.2224 289.041 85.2224C287.525 85.2224 286.386 85.6289 285.625 86.4419C284.864 87.2548 284.451 88.5581 284.386 90.3518H284.502C284.805 89.8291 285.231 89.4259 285.78 89.142C286.328 88.8517 286.973 88.7065 287.715 88.7065C288.999 88.7065 289.999 89.1001 290.715 89.8872C291.432 90.6744 291.79 91.7422 291.79 93.0906C291.79 94.5746 291.374 95.7489 290.541 96.6134C289.715 97.4715 288.586 97.9006 287.154 97.9006C286.141 97.9006 285.26 97.6586 284.512 97.1747C283.763 96.6844 283.186 95.9747 282.78 95.0456C282.38 94.11 282.18 92.9874 282.18 91.6776ZM287.115 96.0231C287.896 96.0231 288.496 95.7714 288.915 95.2682C289.341 94.7649 289.554 94.0455 289.554 93.11C289.554 92.297 289.354 91.6583 288.954 91.1937C288.561 90.7292 287.967 90.4969 287.173 90.4969C286.683 90.4969 286.231 90.6034 285.818 90.8163C285.406 91.0228 285.08 91.3099 284.841 91.6776C284.602 92.039 284.483 92.4099 284.483 92.7906C284.483 93.7003 284.728 94.4681 285.218 95.094C285.715 95.7134 286.348 96.0231 287.115 96.0231ZM293.503 91.6776C293.503 86.1418 295.758 83.3739 300.268 83.3739C300.977 83.3739 301.577 83.4288 302.068 83.5385V85.4353C301.577 85.2934 301.01 85.2224 300.364 85.2224C298.848 85.2224 297.709 85.6289 296.948 86.4419C296.187 87.2548 295.774 88.5581 295.709 90.3518H295.825C296.129 89.8291 296.555 89.4259 297.103 89.142C297.651 88.8517 298.297 88.7065 299.039 88.7065C300.323 88.7065 301.323 89.1001 302.039 89.8872C302.755 90.6744 303.113 91.7422 303.113 93.0906C303.113 94.5746 302.697 95.7489 301.865 96.6134C301.039 97.4715 299.91 97.9006 298.477 97.9006C297.464 97.9006 296.584 97.6586 295.835 97.1747C295.087 96.6844 294.509 95.9747 294.103 95.0456C293.703 94.11 293.503 92.9874 293.503 91.6776ZM298.439 96.0231C299.219 96.0231 299.819 95.7714 300.239 95.2682C300.664 94.7649 300.877 94.0455 300.877 93.11C300.877 92.297 300.677 91.6583 300.277 91.1937C299.884 90.7292 299.29 90.4969 298.497 90.4969C298.006 90.4969 297.555 90.6034 297.142 90.8163C296.729 91.0228 296.403 91.3099 296.164 91.6776C295.925 92.039 295.806 92.4099 295.806 92.7906C295.806 93.7003 296.051 94.4681 296.542 95.094C297.038 95.7134 297.671 96.0231 298.439 96.0231ZM318.937 97.707H310.933V83.5578H318.937V85.5128H313.246V89.3646H318.578V91.3002H313.246V95.7424H318.937V97.707ZM326.892 97.707H324.579V85.5418H320.417V83.5578H331.053V85.5418H326.892V97.707ZM344.39 97.707H342.067V91.3292H335.544V97.707H333.231V83.5578H335.544V89.3452H342.067V83.5578H344.39V97.707Z" class="path-14"/> -<g clip-path="url(#clip4_13904_184784)"> -<path d="M237.029 100.786L237.137 100.852L237.245 100.786L248.127 94.1065L237.137 110.201L226.148 94.1065L237.029 100.786ZM237.137 71.3376L248.555 91.0473L237.137 98.0606L225.712 91.0473L237.137 71.3376Z" stroke="url(#paint1_linear_13904_184784)" stroke-width="0.412928" class="path-15"/> -</g> -<path fill-rule="evenodd" clip-rule="evenodd" d="M230.978 128.738L247.453 129.813L254.262 144.864L244.953 158.469L228.107 157.752L221.303 141.28L230.978 128.738ZM231.397 129.592L228.827 142.12L243.925 135.053L231.397 129.592ZM244.342 135.63L229.021 142.801L242.06 152.581L244.342 135.63ZM241.563 153.082L228.695 143.431V156.943L241.563 153.082ZM227.996 155.651V143.015L222.28 141.812L227.996 155.651ZM222.321 141.106L228.073 142.317L230.495 130.509L222.321 141.106ZM230.432 157.151L244.196 157.737L242.146 153.637L230.432 157.151ZM242.772 153.326L244.821 157.424L252.43 146.302L242.772 153.326ZM252.661 143.021L247.205 130.961L245.195 134.981L252.661 143.021ZM244.609 134.589L233.115 129.578L246.673 130.462L244.609 134.589ZM245.021 135.822L242.782 152.454L253.338 144.778L245.021 135.822Z" fill="url(#paint2_linear_13904_184784)" class="path-16"/> -<defs> -<filter id="filter0_d_13904_184784" x="-2.47757" y="0.174145" width="408.955" height="199.955" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.65171"/> -<feGaussianBlur stdDeviation="1.23878"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_13904_184784"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_13904_184784" result="shape"/> -</filter> -<linearGradient id="paint0_linear_13904_184784" x1="59.9098" y1="131.491" x2="123.335" y2="103.742" gradientUnits="userSpaceOnUse"> -<stop class="stop-1"/> -<stop offset="1" class="stop-2"/> -</linearGradient> -<linearGradient id="paint1_linear_13904_184784" x1="237.137" y1="70.9258" x2="237.137" y2="110.567" gradientUnits="userSpaceOnUse"> -<stop class="stop-3"/> -<stop offset="1" class="stop-4"/> -</linearGradient> -<linearGradient id="paint2_linear_13904_184784" x1="237.783" y1="128.738" x2="237.783" y2="158.469" gradientUnits="userSpaceOnUse"> -<stop class="stop-5"/> -<stop offset="1" class="stop-6"/> -</linearGradient> -<clipPath id="clip0_13904_184784"> -<rect width="79.2821" height="79.2821" transform="translate(50 70.8398)" class="rect-3"/> -</clipPath> -<clipPath id="clip1_13904_184784"> -<rect width="79.2821" height="79.2821" transform="translate(49.9998 70.8398)" class="rect-4"/> -</clipPath> -<clipPath id="clip2_13904_184784"> -<rect width="11.562" height="11.562" transform="translate(147.013 160.383)" class="rect-5"/> -</clipPath> -<clipPath id="clip3_13904_184784"> -<rect width="11.562" height="11.562" transform="translate(304.91 30.1992)" class="rect-6"/> -</clipPath> -<clipPath id="clip4_13904_184784"> -<rect width="39.641" height="39.641" transform="translate(218 70.9258)" class="rect-7"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/staking/notifications.svg b/web/src/assets/svgs/mini-guides/staking/notifications.svg deleted file mode 100644 index 8fd69c1fd..000000000 --- a/web/src/assets/svgs/mini-guides/staking/notifications.svg +++ /dev/null @@ -1,37 +0,0 @@ -<svg viewBox="0 0 391 354" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g filter="url(#filter0_d_13917_210930)"> -<rect x="3" y="1" width="385" height="348" rx="2.52183" class="rect-1"/> -<rect x="3.42031" y="1.42031" width="384.159" height="347.159" rx="2.10153" stroke-width="0.840611" class="rect-2"/> -</g> -<rect x="30.4203" y="278.799" width="330.159" height="36.9869" rx="2.10153" stroke-width="0.840611" class="rect-3"/> -<path d="M43.4628 293.587H44.6318L46.208 297.692C46.5538 298.629 46.7684 299.305 46.8516 299.721H46.9041C46.961 299.498 47.0792 299.117 47.2587 298.579C47.4426 298.036 48.038 296.372 49.045 293.587H50.214L47.1208 301.783C46.8143 302.593 46.4553 303.167 46.0438 303.504C45.6366 303.846 45.1353 304.016 44.5399 304.016C44.2071 304.016 43.8788 303.979 43.5548 303.905V303.031C43.7956 303.084 44.0648 303.11 44.3626 303.11C45.1112 303.11 45.6454 302.69 45.965 301.849L46.3656 300.825L43.4628 293.587ZM57.5956 297.18C57.5956 298.353 57.3001 299.27 56.709 299.931C56.118 300.588 55.3015 300.917 54.2594 300.917C53.6159 300.917 53.0445 300.765 52.5454 300.463C52.0463 300.161 51.661 299.728 51.3895 299.163C51.1181 298.598 50.9824 297.937 50.9824 297.18C50.9824 296.006 51.2757 295.094 51.8624 294.441C52.4491 293.784 53.2634 293.456 54.3054 293.456C55.3124 293.456 56.1114 293.791 56.7025 294.461C57.2979 295.131 57.5956 296.037 57.5956 297.18ZM52.1119 297.18C52.1119 298.099 52.2958 298.8 52.6636 299.281C53.0314 299.763 53.5721 300.004 54.2857 300.004C54.9994 300.004 55.5401 299.765 55.9078 299.288C56.28 298.806 56.466 298.104 56.466 297.18C56.466 296.265 56.28 295.571 55.9078 295.098C55.5401 294.621 54.995 294.382 54.2726 294.382C53.5589 294.382 53.0204 294.616 52.657 295.085C52.2936 295.553 52.1119 296.252 52.1119 297.18ZM60.5378 293.587V298.257C60.5378 298.843 60.6713 299.281 60.9384 299.57C61.2054 299.859 61.6235 300.004 62.1927 300.004C62.9458 300.004 63.4952 299.798 63.8411 299.386C64.1914 298.975 64.3665 298.303 64.3665 297.37V293.587H65.4566V300.785H64.5569L64.3993 299.82H64.3402C64.1169 300.174 63.8061 300.446 63.4077 300.634C63.0136 300.822 62.5627 300.917 62.0548 300.917C61.1792 300.917 60.5224 300.709 60.0846 300.293C59.6512 299.877 59.4345 299.211 59.4345 298.296V293.587H60.5378ZM71.0585 293.456C71.3781 293.456 71.6649 293.482 71.9188 293.535L71.7678 294.546C71.4701 294.481 71.2074 294.448 70.9797 294.448C70.3974 294.448 69.8983 294.684 69.4824 295.157C69.0708 295.63 68.8651 296.219 68.8651 296.924V300.785H67.7749V293.587H68.6746L68.7994 294.921H68.8519C69.119 294.452 69.4408 294.091 69.8173 293.837C70.1938 293.583 70.6076 293.456 71.0585 293.456ZM76.3058 300.917C75.2419 300.917 74.4013 300.593 73.784 299.945C73.171 299.297 72.8645 298.397 72.8645 297.245C72.8645 296.085 73.1491 295.164 73.7183 294.481C74.2918 293.798 75.0602 293.456 76.0234 293.456C76.9253 293.456 77.6389 293.754 78.1643 294.349C78.6897 294.94 78.9524 295.722 78.9524 296.694V297.383H73.9941C74.016 298.228 74.2283 298.87 74.6311 299.308C75.0383 299.745 75.6097 299.964 76.3452 299.964C77.1201 299.964 77.8863 299.802 78.6437 299.478V300.45C78.2585 300.617 77.8929 300.735 77.547 300.805C77.2055 300.879 76.7918 300.917 76.3058 300.917ZM76.0103 294.369C75.4323 294.369 74.9704 294.557 74.6246 294.934C74.2831 295.31 74.0817 295.831 74.0204 296.497H77.7834C77.7834 295.809 77.6302 295.284 77.3237 294.921C77.0172 294.553 76.5794 294.369 76.0103 294.369ZM89.992 300.785V296.103C89.992 295.529 89.8694 295.1 89.6242 294.816C89.379 294.527 88.9981 294.382 88.4815 294.382C87.8029 294.382 87.3016 294.577 86.9776 294.967C86.6536 295.356 86.4916 295.956 86.4916 296.766V300.785H85.4015V296.103C85.4015 295.529 85.2789 295.1 85.0337 294.816C84.7885 294.527 84.4054 294.382 83.8844 294.382C83.2014 294.382 82.7001 294.588 82.3805 294.999C82.0653 295.407 81.9077 296.076 81.9077 297.009V300.785H80.8175V293.587H81.7041L81.8814 294.573H81.9339C82.1397 294.222 82.4287 293.949 82.8008 293.752C83.1773 293.555 83.5977 293.456 84.0617 293.456C85.1869 293.456 85.9225 293.863 86.2683 294.678H86.3209C86.5354 294.301 86.8463 294.003 87.2534 293.784C87.6606 293.566 88.1247 293.456 88.6457 293.456C89.46 293.456 90.0686 293.666 90.4714 294.087C90.8786 294.502 91.0822 295.17 91.0822 296.09V300.785H89.992ZM97.7611 300.785L97.5444 299.761H97.4918C97.1328 300.212 96.7738 300.518 96.4148 300.68C96.0602 300.838 95.6158 300.917 95.0816 300.917C94.368 300.917 93.8076 300.733 93.4004 300.365C92.9976 299.997 92.7962 299.474 92.7962 298.795C92.7962 297.342 93.9586 296.58 96.2834 296.51L97.505 296.47V296.024C97.505 295.459 97.3824 295.043 97.1372 294.776C96.8964 294.505 96.5089 294.369 95.9748 294.369C95.375 294.369 94.6963 294.553 93.9389 294.921L93.604 294.087C93.9586 293.894 94.3461 293.743 94.7664 293.633C95.1911 293.524 95.6158 293.469 96.0405 293.469C96.8986 293.469 97.5334 293.66 97.945 294.041C98.3609 294.421 98.5689 295.032 98.5689 295.873V300.785H97.7611ZM95.2984 300.017C95.977 300.017 96.5089 299.831 96.8942 299.459C97.2839 299.086 97.4787 298.565 97.4787 297.896V297.245L96.3885 297.291C95.5216 297.322 94.8956 297.458 94.5103 297.699C94.1294 297.935 93.9389 298.305 93.9389 298.808C93.9389 299.202 94.0571 299.502 94.2936 299.708C94.5344 299.914 94.8693 300.017 95.2984 300.017ZM101.912 300.785H100.821V293.587H101.912V300.785ZM100.729 291.637C100.729 291.387 100.791 291.206 100.913 291.092C101.036 290.974 101.189 290.915 101.373 290.915C101.548 290.915 101.699 290.974 101.826 291.092C101.953 291.21 102.017 291.392 102.017 291.637C102.017 291.882 101.953 292.066 101.826 292.189C101.699 292.307 101.548 292.366 101.373 292.366C101.189 292.366 101.036 292.307 100.913 292.189C100.791 292.066 100.729 291.882 100.729 291.637ZM105.313 300.785H104.223V290.566H105.313V300.785ZM117.765 295.998C117.765 296.619 117.669 297.188 117.476 297.705C117.283 298.222 117.012 298.622 116.662 298.907C116.311 299.191 115.909 299.334 115.453 299.334C115.077 299.334 114.759 299.22 114.501 298.992C114.243 298.765 114.09 298.473 114.041 298.119H113.989C113.814 298.5 113.562 298.797 113.234 299.012C112.91 299.227 112.524 299.334 112.078 299.334C111.421 299.334 110.907 299.111 110.534 298.664C110.167 298.213 109.983 297.602 109.983 296.832C109.983 295.939 110.241 295.214 110.758 294.658C111.274 294.097 111.953 293.817 112.794 293.817C113.091 293.817 113.428 293.846 113.805 293.903C114.181 293.955 114.521 294.03 114.823 294.126L114.659 297.213V297.357C114.659 298.136 114.95 298.526 115.532 298.526C115.931 298.526 116.255 298.292 116.504 297.823C116.754 297.35 116.878 296.738 116.878 295.984C116.878 295.192 116.716 294.498 116.392 293.903C116.068 293.307 115.607 292.85 115.007 292.53C114.411 292.206 113.726 292.044 112.951 292.044C111.975 292.044 111.125 292.248 110.403 292.655C109.681 293.058 109.129 293.636 108.748 294.389C108.367 295.137 108.177 296.004 108.177 296.989C108.177 298.325 108.529 299.351 109.234 300.069C109.939 300.787 110.955 301.146 112.281 301.146C113.201 301.146 114.155 300.958 115.145 300.582V301.455C114.304 301.823 113.35 302.007 112.281 302.007C110.692 302.007 109.457 301.571 108.577 300.7C107.702 299.824 107.264 298.603 107.264 297.035C107.264 295.897 107.498 294.883 107.967 293.995C108.435 293.106 109.103 292.418 109.97 291.932C110.837 291.442 111.83 291.197 112.951 291.197C113.892 291.197 114.729 291.396 115.46 291.795C116.195 292.189 116.762 292.751 117.161 293.482C117.564 294.209 117.765 295.048 117.765 295.998ZM110.974 296.858C110.974 297.97 111.401 298.526 112.255 298.526C113.161 298.526 113.654 297.841 113.733 296.47L113.825 294.756C113.509 294.669 113.166 294.625 112.794 294.625C112.224 294.625 111.778 294.822 111.454 295.216C111.134 295.61 110.974 296.157 110.974 296.858ZM122.763 300.917C121.699 300.917 120.858 300.593 120.241 299.945C119.628 299.297 119.321 298.397 119.321 297.245C119.321 296.085 119.606 295.164 120.175 294.481C120.749 293.798 121.517 293.456 122.48 293.456C123.382 293.456 124.096 293.754 124.621 294.349C125.147 294.94 125.409 295.722 125.409 296.694V297.383H120.451C120.473 298.228 120.685 298.87 121.088 299.308C121.495 299.745 122.067 299.964 122.802 299.964C123.577 299.964 124.343 299.802 125.101 299.478V300.45C124.715 300.617 124.35 300.735 124.004 300.805C123.662 300.879 123.249 300.917 122.763 300.917ZM122.467 294.369C121.889 294.369 121.427 294.557 121.081 294.934C120.74 295.31 120.539 295.831 120.477 296.497H124.24C124.24 295.809 124.087 295.284 123.781 294.921C123.474 294.553 123.036 294.369 122.467 294.369ZM136.449 300.785V296.103C136.449 295.529 136.326 295.1 136.081 294.816C135.836 294.527 135.455 294.382 134.938 294.382C134.26 294.382 133.759 294.577 133.435 294.967C133.111 295.356 132.949 295.956 132.949 296.766V300.785H131.858V296.103C131.858 295.529 131.736 295.1 131.491 294.816C131.245 294.527 130.862 294.382 130.341 294.382C129.658 294.382 129.157 294.588 128.837 294.999C128.522 295.407 128.365 296.076 128.365 297.009V300.785H127.274V293.587H128.161L128.338 294.573H128.391C128.597 294.222 128.886 293.949 129.258 293.752C129.634 293.555 130.055 293.456 130.519 293.456C131.644 293.456 132.379 293.863 132.725 294.678H132.778C132.992 294.301 133.303 294.003 133.71 293.784C134.118 293.566 134.582 293.456 135.103 293.456C135.917 293.456 136.526 293.666 136.928 294.087C137.335 294.502 137.539 295.17 137.539 296.09V300.785H136.449ZM144.218 300.785L144.001 299.761H143.949C143.59 300.212 143.231 300.518 142.872 300.68C142.517 300.838 142.073 300.917 141.539 300.917C140.825 300.917 140.264 300.733 139.857 300.365C139.455 299.997 139.253 299.474 139.253 298.795C139.253 297.342 140.416 296.58 142.74 296.51L143.962 296.47V296.024C143.962 295.459 143.839 295.043 143.594 294.776C143.353 294.505 142.966 294.369 142.432 294.369C141.832 294.369 141.153 294.553 140.396 294.921L140.061 294.087C140.416 293.894 140.803 293.743 141.223 293.633C141.648 293.524 142.073 293.469 142.497 293.469C143.355 293.469 143.99 293.66 144.402 294.041C144.818 294.421 145.026 295.032 145.026 295.873V300.785H144.218ZM141.755 300.017C142.434 300.017 142.966 299.831 143.351 299.459C143.741 299.086 143.936 298.565 143.936 297.896V297.245L142.845 297.291C141.979 297.322 141.352 297.458 140.967 297.699C140.586 297.935 140.396 298.305 140.396 298.808C140.396 299.202 140.514 299.502 140.75 299.708C140.991 299.914 141.326 300.017 141.755 300.017ZM148.369 300.785H147.278V293.587H148.369V300.785ZM147.186 291.637C147.186 291.387 147.248 291.206 147.37 291.092C147.493 290.974 147.646 290.915 147.83 290.915C148.005 290.915 148.156 290.974 148.283 291.092C148.41 291.21 148.474 291.392 148.474 291.637C148.474 291.882 148.41 292.066 148.283 292.189C148.156 292.307 148.005 292.366 147.83 292.366C147.646 292.366 147.493 292.307 147.37 292.189C147.248 292.066 147.186 291.882 147.186 291.637ZM151.77 300.785H150.68V290.566H151.77V300.785ZM153.924 300.089C153.924 299.796 153.99 299.575 154.121 299.426C154.257 299.272 154.45 299.196 154.699 299.196C154.953 299.196 155.15 299.272 155.29 299.426C155.435 299.575 155.507 299.796 155.507 300.089C155.507 300.374 155.435 300.593 155.29 300.746C155.146 300.899 154.949 300.976 154.699 300.976C154.476 300.976 154.29 300.908 154.141 300.772C153.997 300.632 153.924 300.404 153.924 300.089ZM160.544 300.917C159.502 300.917 158.694 300.597 158.121 299.958C157.552 299.314 157.267 298.406 157.267 297.232C157.267 296.028 157.556 295.098 158.134 294.441C158.716 293.784 159.544 293.456 160.616 293.456C160.962 293.456 161.308 293.493 161.654 293.568C162 293.642 162.271 293.73 162.468 293.83L162.134 294.756C161.893 294.66 161.63 294.581 161.345 294.52C161.061 294.454 160.809 294.421 160.59 294.421C159.128 294.421 158.397 295.354 158.397 297.219C158.397 298.104 158.574 298.782 158.929 299.255C159.288 299.728 159.817 299.964 160.518 299.964C161.118 299.964 161.733 299.835 162.363 299.577V300.542C161.882 300.792 161.275 300.917 160.544 300.917ZM170.29 297.18C170.29 298.353 169.995 299.27 169.403 299.931C168.812 300.588 167.996 300.917 166.954 300.917C166.31 300.917 165.739 300.765 165.24 300.463C164.741 300.161 164.355 299.728 164.084 299.163C163.813 298.598 163.677 297.937 163.677 297.18C163.677 296.006 163.97 295.094 164.557 294.441C165.144 293.784 165.958 293.456 167 293.456C168.007 293.456 168.806 293.791 169.397 294.461C169.992 295.131 170.29 296.037 170.29 297.18ZM164.806 297.18C164.806 298.099 164.99 298.8 165.358 299.281C165.726 299.763 166.267 300.004 166.98 300.004C167.694 300.004 168.235 299.765 168.602 299.288C168.974 298.806 169.161 298.104 169.161 297.18C169.161 296.265 168.974 295.571 168.602 295.098C168.235 294.621 167.689 294.382 166.967 294.382C166.253 294.382 165.715 294.616 165.351 295.085C164.988 295.553 164.806 296.252 164.806 297.18ZM181.382 300.785V296.103C181.382 295.529 181.26 295.1 181.014 294.816C180.769 294.527 180.388 294.382 179.872 294.382C179.193 294.382 178.692 294.577 178.368 294.967C178.044 295.356 177.882 295.956 177.882 296.766V300.785H176.792V296.103C176.792 295.529 176.669 295.1 176.424 294.816C176.179 294.527 175.796 294.382 175.275 294.382C174.592 294.382 174.09 294.588 173.771 294.999C173.456 295.407 173.298 296.076 173.298 297.009V300.785H172.208V293.587H173.094L173.272 294.573H173.324C173.53 294.222 173.819 293.949 174.191 293.752C174.568 293.555 174.988 293.456 175.452 293.456C176.577 293.456 177.313 293.863 177.659 294.678H177.711C177.926 294.301 178.236 294.003 178.644 293.784C179.051 293.566 179.515 293.456 180.036 293.456C180.85 293.456 181.459 293.666 181.862 294.087C182.269 294.502 182.472 295.17 182.472 296.09V300.785H181.382Z" class="path-1"/> -<path d="M65.2865 184.645H64.3211L62.6259 179.019C62.5454 178.77 62.4554 178.456 62.3558 178.076C62.2562 177.697 62.2045 177.469 62.2007 177.393C62.1164 177.898 61.9823 178.452 61.7984 179.053L60.155 184.645H59.1896L56.9542 176.243H57.9886L59.316 181.432C59.4999 182.16 59.6339 182.819 59.7182 183.409C59.8217 182.708 59.9749 182.022 60.1779 181.352L61.6835 176.243H62.7178L64.2981 181.398C64.482 181.992 64.6371 182.662 64.7635 183.409C64.8363 182.865 64.9742 182.202 65.1773 181.421L66.4989 176.243H67.5333L65.2865 184.645ZM73.0153 184.645V180.57C73.0153 180.057 72.8985 179.674 72.6648 179.421C72.4311 179.168 72.0653 179.042 71.5672 179.042C70.9045 179.042 70.4199 179.222 70.1134 179.582C69.8108 179.942 69.6594 180.532 69.6594 181.352V184.645H68.7055V175.703H69.6594V178.41C69.6594 178.735 69.6441 179.005 69.6135 179.22H69.6709C69.8586 178.917 70.1249 178.68 70.4697 178.507C70.8183 178.331 71.2148 178.243 71.6592 178.243C72.4292 178.243 73.0057 178.427 73.3888 178.795C73.7758 179.159 73.9692 179.739 73.9692 180.536V184.645H73.0153ZM78.595 184.759C77.6641 184.759 76.9286 184.476 76.3884 183.909C75.8521 183.342 75.5839 182.555 75.5839 181.547C75.5839 180.532 75.833 179.726 76.331 179.128C76.8328 178.53 77.5051 178.232 78.3479 178.232C79.1371 178.232 79.7616 178.492 80.2213 179.013C80.681 179.53 80.9108 180.214 80.9108 181.065V181.668H76.5723C76.5915 182.407 76.7773 182.969 77.1297 183.352C77.486 183.735 77.9859 183.926 78.6295 183.926C79.3076 183.926 79.978 183.784 80.6407 183.501V184.351C80.3036 184.497 79.9837 184.6 79.6811 184.662C79.3823 184.727 79.0203 184.759 78.595 184.759ZM78.3365 179.03C77.8308 179.03 77.4266 179.195 77.124 179.525C76.8252 179.854 76.6489 180.31 76.5953 180.892H79.888C79.888 180.291 79.7539 179.831 79.4857 179.513C79.2176 179.191 78.8345 179.03 78.3365 179.03ZM86.8526 184.645V180.57C86.8526 180.057 86.7357 179.674 86.502 179.421C86.2684 179.168 85.9025 179.042 85.4045 179.042C84.7456 179.042 84.2629 179.22 83.9564 179.576C83.6499 179.933 83.4967 180.521 83.4967 181.34V184.645H82.5428V178.347H83.3186L83.4737 179.208H83.5197C83.7151 178.898 83.989 178.659 84.3414 178.49C84.6939 178.318 85.0865 178.232 85.5194 178.232C86.2779 178.232 86.8487 178.415 87.2318 178.783C87.6149 179.147 87.8065 179.731 87.8065 180.536V184.645H86.8526ZM94.3458 181.421L92.1565 178.347H93.2425L94.9032 180.76L96.5582 178.347H97.6328L95.4434 181.421L97.7477 184.645H96.6674L94.9032 182.093L93.1219 184.645H92.0415L94.3458 181.421ZM98.8625 184.035C98.8625 183.779 98.9199 183.585 99.0349 183.455C99.1536 183.321 99.3222 183.254 99.5405 183.254C99.7627 183.254 99.9351 183.321 100.058 183.455C100.184 183.585 100.247 183.779 100.247 184.035C100.247 184.284 100.184 184.476 100.058 184.61C99.9313 184.744 99.7589 184.811 99.5405 184.811C99.3452 184.811 99.1824 184.752 99.0521 184.633C98.9257 184.51 98.8625 184.311 98.8625 184.035Z" class="path-2"/> -<path d="M65.2865 214.906H64.3211L62.6259 209.281C62.5454 209.032 62.4554 208.717 62.3558 208.338C62.2562 207.959 62.2045 207.731 62.2007 207.654C62.1164 208.16 61.9823 208.714 61.7984 209.315L60.155 214.906H59.1896L56.9542 206.505H57.9886L59.316 211.694C59.4999 212.422 59.6339 213.081 59.7182 213.671C59.8217 212.97 59.9749 212.284 60.1779 211.614L61.6835 206.505H62.7178L64.2981 211.66C64.482 212.253 64.6371 212.924 64.7635 213.671C64.8363 213.127 64.9742 212.464 65.1773 211.683L66.4989 206.505H67.5333L65.2865 214.906ZM73.0153 214.906V210.832C73.0153 210.319 72.8985 209.936 72.6648 209.683C72.4311 209.43 72.0653 209.304 71.5672 209.304C70.9045 209.304 70.4199 209.484 70.1134 209.844C69.8108 210.204 69.6594 210.794 69.6594 211.614V214.906H68.7055V205.965H69.6594V208.671C69.6594 208.997 69.6441 209.267 69.6135 209.482H69.6709C69.8586 209.179 70.1249 208.942 70.4697 208.769C70.8183 208.593 71.2148 208.505 71.6592 208.505C72.4292 208.505 73.0057 208.689 73.3888 209.056C73.7758 209.42 73.9692 210.001 73.9692 210.798V214.906H73.0153ZM78.595 215.021C77.6641 215.021 76.9286 214.738 76.3884 214.171C75.8521 213.604 75.5839 212.816 75.5839 211.809C75.5839 210.794 75.833 209.987 76.331 209.39C76.8328 208.792 77.5051 208.493 78.3479 208.493C79.1371 208.493 79.7616 208.754 80.2213 209.275C80.681 209.792 80.9108 210.476 80.9108 211.326V211.93H76.5723C76.5915 212.669 76.7773 213.23 77.1297 213.613C77.486 213.996 77.9859 214.188 78.6295 214.188C79.3076 214.188 79.978 214.046 80.6407 213.763V214.613C80.3036 214.759 79.9837 214.862 79.6811 214.923C79.3823 214.989 79.0203 215.021 78.595 215.021ZM78.3365 209.292C77.8308 209.292 77.4266 209.457 77.124 209.786C76.8252 210.116 76.6489 210.572 76.5953 211.154H79.888C79.888 210.552 79.7539 210.093 79.4857 209.775C79.2176 209.453 78.8345 209.292 78.3365 209.292ZM86.8526 214.906V210.832C86.8526 210.319 86.7357 209.936 86.502 209.683C86.2684 209.43 85.9025 209.304 85.4045 209.304C84.7456 209.304 84.2629 209.482 83.9564 209.838C83.6499 210.194 83.4967 210.782 83.4967 211.602V214.906H82.5428V208.608H83.3186L83.4737 209.47H83.5197C83.7151 209.16 83.989 208.92 84.3414 208.752C84.6939 208.58 85.0865 208.493 85.5194 208.493C86.2779 208.493 86.8487 208.677 87.2318 209.045C87.6149 209.409 87.8065 209.993 87.8065 210.798V214.906H86.8526ZM91.8289 208.608H92.8518L94.2309 212.2C94.5335 213.02 94.7213 213.611 94.794 213.975H94.84C94.8898 213.78 94.9933 213.447 95.1503 212.975C95.3112 212.5 95.8322 211.045 96.7133 208.608H97.7362L95.0296 215.78C94.7615 216.488 94.4473 216.99 94.0872 217.285C93.731 217.584 93.2923 217.733 92.7713 217.733C92.4802 217.733 92.1929 217.701 91.9094 217.636V216.872C92.1201 216.917 92.3557 216.94 92.6162 216.94C93.2713 216.94 93.7386 216.573 94.0183 215.837L94.3688 214.941L91.8289 208.608ZM98.6211 214.297C98.6211 214.04 98.6786 213.847 98.7935 213.717C98.9123 213.583 99.0808 213.516 99.2992 213.516C99.5214 213.516 99.6938 213.583 99.8164 213.717C99.9428 213.847 100.006 214.04 100.006 214.297C100.006 214.546 99.9428 214.738 99.8164 214.872C99.69 215.006 99.5176 215.073 99.2992 215.073C99.1038 215.073 98.941 215.014 98.8108 214.895C98.6843 214.772 98.6211 214.573 98.6211 214.297Z" class="path-3"/> -<path d="M65.2865 245.168H64.3211L62.6259 239.542C62.5454 239.293 62.4554 238.979 62.3558 238.6C62.2562 238.221 62.2045 237.993 62.2007 237.916C62.1164 238.422 61.9823 238.975 61.7984 239.577L60.155 245.168H59.1896L56.9542 236.767H57.9886L59.316 241.956C59.4999 242.684 59.6339 243.343 59.7182 243.932C59.8217 243.231 59.9749 242.546 60.1779 241.875L61.6835 236.767H62.7178L64.2981 241.921C64.482 242.515 64.6371 243.185 64.7635 243.932C64.8363 243.389 64.9742 242.726 65.1773 241.944L66.4989 236.767H67.5333L65.2865 245.168ZM73.0153 245.168V241.094C73.0153 240.58 72.8985 240.197 72.6648 239.945C72.4311 239.692 72.0653 239.565 71.5672 239.565C70.9045 239.565 70.4199 239.745 70.1134 240.105C69.8108 240.466 69.6594 241.055 69.6594 241.875V245.168H68.7055V236.227H69.6594V238.933C69.6594 239.259 69.6441 239.529 69.6135 239.743H69.6709C69.8586 239.441 70.1249 239.203 70.4697 239.031C70.8183 238.855 71.2148 238.767 71.6592 238.767C72.4292 238.767 73.0057 238.95 73.3888 239.318C73.7758 239.682 73.9692 240.262 73.9692 241.059V245.168H73.0153ZM78.595 245.283C77.6641 245.283 76.9286 244.999 76.3884 244.432C75.8521 243.865 75.5839 243.078 75.5839 242.071C75.5839 241.055 75.833 240.249 76.331 239.651C76.8328 239.054 77.5051 238.755 78.3479 238.755C79.1371 238.755 79.7616 239.016 80.2213 239.537C80.681 240.054 80.9108 240.738 80.9108 241.588V242.191H76.5723C76.5915 242.931 76.7773 243.492 77.1297 243.875C77.486 244.258 77.9859 244.45 78.6295 244.45C79.3076 244.45 79.978 244.308 80.6407 244.024V244.875C80.3036 245.02 79.9837 245.124 79.6811 245.185C79.3823 245.25 79.0203 245.283 78.595 245.283ZM78.3365 239.554C77.8308 239.554 77.4266 239.718 77.124 240.048C76.8252 240.377 76.6489 240.833 76.5953 241.416H79.888C79.888 240.814 79.7539 240.354 79.4857 240.036C79.2176 239.715 78.8345 239.554 78.3365 239.554ZM86.8526 245.168V241.094C86.8526 240.58 86.7357 240.197 86.502 239.945C86.2684 239.692 85.9025 239.565 85.4045 239.565C84.7456 239.565 84.2629 239.743 83.9564 240.1C83.6499 240.456 83.4967 241.044 83.4967 241.864V245.168H82.5428V238.87H83.3186L83.4737 239.732H83.5197C83.7151 239.422 83.989 239.182 84.3414 239.014C84.6939 238.841 85.0865 238.755 85.5194 238.755C86.2779 238.755 86.8487 238.939 87.2318 239.307C87.6149 239.671 87.8065 240.255 87.8065 241.059V245.168H86.8526ZM96.857 245.168H92.2886V244.519L95.725 239.611H92.5012V238.87H96.7708V239.611L93.3804 244.427H96.857V245.168ZM98.1959 244.559C98.1959 244.302 98.2534 244.109 98.3683 243.978C98.487 243.844 98.6556 243.777 98.874 243.777C99.0962 243.777 99.2686 243.844 99.3911 243.978C99.5176 244.109 99.5808 244.302 99.5808 244.559C99.5808 244.808 99.5176 244.999 99.3911 245.133C99.2647 245.268 99.0923 245.335 98.874 245.335C98.6786 245.335 98.5158 245.275 98.3855 245.156C98.2591 245.034 98.1959 244.835 98.1959 244.559Z" class="path-4"/> -<g clip-path="url(#clip0_13917_210930)"> -<rect x="29.8997" y="173.324" width="13.4498" height="13.4498" rx="2.52183" class="rect-4"/> -<path d="M40.7808 176.688H39.7889C39.5732 176.688 39.368 176.791 39.2411 176.969L35.9166 181.579L34.4108 179.49C34.2839 179.314 34.0808 179.208 33.863 179.208H32.8711C32.7337 179.208 32.6533 179.365 32.7337 179.477L35.3688 183.132C35.431 183.218 35.5131 183.289 35.6082 183.338C35.7033 183.387 35.8086 183.412 35.9155 183.412C36.0224 183.412 36.1277 183.387 36.2228 183.338C36.3179 183.289 36.3999 183.218 36.4622 183.132L40.9161 176.956C40.9986 176.844 40.9183 176.688 40.7808 176.688Z" class="path-5"/> -<rect x="30.32" y="204.006" width="12.6092" height="12.6092" rx="2.10153" stroke-width="0.840611" class="rect-5"/> -<rect x="30.32" y="234.268" width="12.6092" height="12.6092" rx="2.10153" stroke-width="0.840611" class="rect-6"/> -</g> -<path d="M131.332 138.483C131.332 139.336 131.024 140.006 130.406 140.492C129.789 140.978 128.937 141.221 127.852 141.221C126.766 141.221 125.877 141.053 125.185 140.716V139.231C125.623 139.437 126.087 139.599 126.578 139.717C127.072 139.835 127.532 139.895 127.957 139.895C128.578 139.895 129.036 139.776 129.329 139.54C129.627 139.304 129.776 138.986 129.776 138.588C129.776 138.229 129.64 137.924 129.369 137.675C129.097 137.425 128.537 137.13 127.687 136.788C126.812 136.434 126.194 136.029 125.835 135.573C125.476 135.118 125.297 134.571 125.297 133.932C125.297 133.13 125.581 132.5 126.151 132.04C126.72 131.58 127.484 131.351 128.443 131.351C129.362 131.351 130.277 131.552 131.188 131.955L130.689 133.235C129.835 132.876 129.073 132.697 128.403 132.697C127.895 132.697 127.51 132.809 127.247 133.032C126.985 133.251 126.853 133.542 126.853 133.905C126.853 134.155 126.906 134.369 127.011 134.549C127.116 134.724 127.289 134.89 127.53 135.048C127.771 135.206 128.204 135.414 128.83 135.672C129.535 135.965 130.052 136.239 130.38 136.493C130.708 136.747 130.949 137.033 131.102 137.353C131.256 137.673 131.332 138.049 131.332 138.483ZM136.199 141.221C135.069 141.221 134.185 140.893 133.545 140.236C132.911 139.575 132.593 138.667 132.593 137.511C132.593 136.324 132.889 135.392 133.48 134.713C134.071 134.034 134.883 133.695 135.916 133.695C136.875 133.695 137.632 133.986 138.188 134.569C138.745 135.151 139.023 135.952 139.023 136.972V137.806H134.182C134.204 138.511 134.395 139.054 134.754 139.435C135.113 139.811 135.618 140 136.271 140C136.7 140 137.098 139.96 137.466 139.881C137.838 139.798 138.237 139.663 138.661 139.474V140.729C138.285 140.908 137.904 141.035 137.519 141.11C137.133 141.184 136.693 141.221 136.199 141.221ZM135.916 134.864C135.426 134.864 135.032 135.019 134.734 135.33C134.441 135.641 134.266 136.094 134.209 136.69H137.505C137.497 136.09 137.352 135.637 137.072 135.33C136.792 135.019 136.407 134.864 135.916 134.864ZM147.166 141.09H145.616V136.624C145.616 136.064 145.502 135.646 145.275 135.37C145.051 135.094 144.694 134.956 144.204 134.956C143.552 134.956 143.075 135.149 142.772 135.534C142.47 135.919 142.319 136.565 142.319 137.471V141.09H140.776V133.826H141.984L142.201 134.779H142.28C142.499 134.433 142.81 134.166 143.212 133.977C143.615 133.789 144.062 133.695 144.552 133.695C146.295 133.695 147.166 134.582 147.166 136.355V141.09ZM151.763 141.221C150.857 141.221 150.15 140.893 149.642 140.236C149.134 139.579 148.88 138.658 148.88 137.471C148.88 136.28 149.136 135.354 149.648 134.693C150.165 134.028 150.879 133.695 151.789 133.695C152.744 133.695 153.471 134.048 153.97 134.752H154.048C153.974 134.231 153.937 133.82 153.937 133.518V130.871H155.487V141.09H154.278L154.009 140.138H153.937C153.442 140.86 152.717 141.221 151.763 141.221ZM152.177 139.973C152.812 139.973 153.274 139.796 153.562 139.441C153.851 139.082 154 138.502 154.009 137.701V137.484C154.009 136.569 153.86 135.919 153.562 135.534C153.265 135.149 152.798 134.956 152.164 134.956C151.621 134.956 151.203 135.177 150.909 135.619C150.616 136.057 150.469 136.683 150.469 137.498C150.469 138.303 150.612 138.918 150.896 139.343C151.181 139.763 151.608 139.973 152.177 139.973ZM165.502 141.09L162.717 133.071H162.665C162.739 134.262 162.776 135.379 162.776 136.421V141.09H161.351V131.488H163.564L166.231 139.126H166.27L169.015 131.488H171.235V141.09H169.725V136.342C169.725 135.864 169.735 135.243 169.757 134.477C169.784 133.71 169.806 133.246 169.823 133.084H169.771L166.887 141.09H165.502ZM176.771 141.221C175.642 141.221 174.757 140.893 174.118 140.236C173.483 139.575 173.166 138.667 173.166 137.511C173.166 136.324 173.461 135.392 174.052 134.713C174.643 134.034 175.456 133.695 176.489 133.695C177.448 133.695 178.205 133.986 178.761 134.569C179.317 135.151 179.595 135.952 179.595 136.972V137.806H174.755C174.777 138.511 174.967 139.054 175.326 139.435C175.685 139.811 176.191 140 176.843 140C177.273 140 177.671 139.96 178.039 139.881C178.411 139.798 178.809 139.663 179.234 139.474V140.729C178.857 140.908 178.477 141.035 178.091 141.11C177.706 141.184 177.266 141.221 176.771 141.221ZM176.489 134.864C175.998 134.864 175.604 135.019 175.307 135.33C175.013 135.641 174.838 136.094 174.781 136.69H178.078C178.069 136.09 177.925 135.637 177.645 135.33C177.364 135.019 176.979 134.864 176.489 134.864ZM193.006 141.09H191.081L186.359 133.439H186.307L186.34 133.866C186.401 134.68 186.432 135.424 186.432 136.099V141.09H185.007V131.488H186.911L191.62 139.1H191.659C191.65 138.999 191.633 138.634 191.607 138.003C191.58 137.368 191.567 136.874 191.567 136.519V131.488H193.006V141.09ZM201.819 137.445C201.819 138.631 201.515 139.557 200.906 140.223C200.297 140.888 199.45 141.221 198.364 141.221C197.686 141.221 197.086 141.068 196.565 140.761C196.044 140.455 195.643 140.015 195.363 139.441C195.083 138.868 194.943 138.202 194.943 137.445C194.943 136.267 195.245 135.348 195.849 134.687C196.453 134.026 197.305 133.695 198.404 133.695C199.455 133.695 200.286 134.034 200.899 134.713C201.512 135.387 201.819 136.298 201.819 137.445ZM196.532 137.445C196.532 139.122 197.152 139.96 198.391 139.96C199.617 139.96 200.23 139.122 200.23 137.445C200.23 135.786 199.612 134.956 198.378 134.956C197.73 134.956 197.259 135.171 196.966 135.6C196.677 136.029 196.532 136.644 196.532 137.445ZM206.304 139.973C206.681 139.973 207.057 139.914 207.434 139.796V140.958C207.263 141.033 207.042 141.094 206.771 141.142C206.503 141.195 206.225 141.221 205.936 141.221C204.474 141.221 203.743 140.451 203.743 138.91V134.995H202.751V134.312L203.815 133.748L204.341 132.211H205.293V133.826H207.362V134.995H205.293V138.883C205.293 139.255 205.385 139.531 205.569 139.711C205.757 139.886 206.002 139.973 206.304 139.973ZM210.435 141.09H208.892V133.826H210.435V141.09ZM208.8 131.902C208.8 131.626 208.874 131.414 209.023 131.265C209.176 131.116 209.393 131.042 209.673 131.042C209.945 131.042 210.155 131.116 210.304 131.265C210.457 131.414 210.534 131.626 210.534 131.902C210.534 132.165 210.457 132.373 210.304 132.526C210.155 132.675 209.945 132.749 209.673 132.749C209.393 132.749 209.176 132.675 209.023 132.526C208.874 132.373 208.8 132.165 208.8 131.902ZM216.293 134.995H214.52V141.09H212.97V134.995H211.775V134.273L212.97 133.8V133.327C212.97 132.469 213.171 131.834 213.574 131.423C213.977 131.007 214.592 130.799 215.42 130.799C215.963 130.799 216.497 130.889 217.022 131.068L216.615 132.237C216.234 132.115 215.871 132.053 215.525 132.053C215.174 132.053 214.918 132.163 214.756 132.382C214.599 132.596 214.52 132.92 214.52 133.354V133.826H216.293V134.995ZM219.071 141.09H217.528V133.826H219.071V141.09ZM217.436 131.902C217.436 131.626 217.51 131.414 217.659 131.265C217.812 131.116 218.029 131.042 218.309 131.042C218.581 131.042 218.791 131.116 218.94 131.265C219.093 131.414 219.17 131.626 219.17 131.902C219.17 132.165 219.093 132.373 218.94 132.526C218.791 132.675 218.581 132.749 218.309 132.749C218.029 132.749 217.812 132.675 217.659 132.526C217.51 132.373 217.436 132.165 217.436 131.902ZM224.22 141.221C223.121 141.221 222.285 140.902 221.711 140.262C221.142 139.619 220.857 138.697 220.857 137.498C220.857 136.276 221.155 135.337 221.75 134.68C222.35 134.023 223.215 133.695 224.345 133.695C225.111 133.695 225.8 133.837 226.413 134.122L225.947 135.363C225.295 135.109 224.756 134.982 224.331 134.982C223.075 134.982 222.447 135.816 222.447 137.484C222.447 138.299 222.602 138.912 222.913 139.323C223.228 139.73 223.688 139.934 224.292 139.934C224.979 139.934 225.63 139.763 226.243 139.422V140.768C225.967 140.93 225.671 141.046 225.356 141.116C225.045 141.186 224.666 141.221 224.22 141.221ZM232.495 141.09L232.186 140.078H232.133C231.783 140.521 231.431 140.823 231.076 140.985C230.721 141.142 230.266 141.221 229.71 141.221C228.996 141.221 228.438 141.029 228.035 140.643C227.637 140.258 227.438 139.713 227.438 139.008C227.438 138.259 227.716 137.695 228.272 137.314C228.828 136.933 229.675 136.725 230.813 136.69L232.068 136.65V136.263C232.068 135.799 231.958 135.453 231.739 135.225C231.525 134.993 231.19 134.877 230.735 134.877C230.362 134.877 230.006 134.932 229.664 135.041C229.323 135.151 228.994 135.28 228.679 135.429L228.18 134.326C228.574 134.12 229.005 133.964 229.474 133.859C229.942 133.75 230.384 133.695 230.8 133.695C231.724 133.695 232.42 133.896 232.889 134.299C233.361 134.702 233.598 135.335 233.598 136.197V141.09H232.495ZM230.196 140.039C230.756 140.039 231.205 139.884 231.542 139.573C231.884 139.258 232.055 138.818 232.055 138.253V137.622L231.122 137.662C230.395 137.688 229.865 137.811 229.533 138.029C229.204 138.244 229.04 138.575 229.04 139.021C229.04 139.345 229.137 139.597 229.329 139.776C229.522 139.952 229.811 140.039 230.196 140.039ZM238.458 139.973C238.834 139.973 239.211 139.914 239.587 139.796V140.958C239.416 141.033 239.195 141.094 238.924 141.142C238.657 141.195 238.379 141.221 238.09 141.221C236.628 141.221 235.896 140.451 235.896 138.91V134.995H234.905V134.312L235.969 133.748L236.494 132.211H237.446V133.826H239.515V134.995H237.446V138.883C237.446 139.255 237.538 139.531 237.722 139.711C237.91 139.886 238.156 139.973 238.458 139.973ZM242.588 141.09H241.045V133.826H242.588V141.09ZM240.953 131.902C240.953 131.626 241.028 131.414 241.176 131.265C241.33 131.116 241.546 131.042 241.827 131.042C242.098 131.042 242.308 131.116 242.457 131.265C242.61 131.414 242.687 131.626 242.687 131.902C242.687 132.165 242.61 132.373 242.457 132.526C242.308 132.675 242.098 132.749 241.827 132.749C241.546 132.749 241.33 132.675 241.176 132.526C241.028 132.373 240.953 132.165 240.953 131.902ZM251.244 137.445C251.244 138.631 250.94 139.557 250.331 140.223C249.723 140.888 248.876 141.221 247.79 141.221C247.111 141.221 246.511 141.068 245.99 140.761C245.469 140.455 245.069 140.015 244.789 139.441C244.508 138.868 244.368 138.202 244.368 137.445C244.368 136.267 244.67 135.348 245.274 134.687C245.879 134.026 246.73 133.695 247.829 133.695C248.88 133.695 249.712 134.034 250.325 134.713C250.938 135.387 251.244 136.298 251.244 137.445ZM245.957 137.445C245.957 139.122 246.577 139.96 247.816 139.96C249.042 139.96 249.655 139.122 249.655 137.445C249.655 135.786 249.038 134.956 247.803 134.956C247.155 134.956 246.684 135.171 246.391 135.6C246.102 136.029 245.957 136.644 245.957 137.445ZM259.414 141.09H257.864V136.624C257.864 136.064 257.75 135.646 257.522 135.37C257.299 135.094 256.942 134.956 256.452 134.956C255.8 134.956 255.322 135.149 255.02 135.534C254.718 135.919 254.567 136.565 254.567 137.471V141.09H253.024V133.826H254.232L254.449 134.779H254.528C254.747 134.433 255.058 134.166 255.46 133.977C255.863 133.789 256.31 133.695 256.8 133.695C258.543 133.695 259.414 134.582 259.414 136.355V141.09ZM266.441 139.021C266.441 139.73 266.182 140.276 265.666 140.656C265.149 141.033 264.409 141.221 263.446 141.221C262.479 141.221 261.701 141.075 261.115 140.781V139.448C261.968 139.842 262.763 140.039 263.499 140.039C264.449 140.039 264.924 139.752 264.924 139.179C264.924 138.995 264.871 138.842 264.766 138.719C264.661 138.596 264.488 138.47 264.247 138.338C264.007 138.207 263.672 138.058 263.243 137.892C262.406 137.568 261.839 137.244 261.542 136.92C261.248 136.596 261.102 136.175 261.102 135.659C261.102 135.037 261.351 134.555 261.85 134.214C262.354 133.868 263.037 133.695 263.899 133.695C264.753 133.695 265.561 133.868 266.323 134.214L265.823 135.376C265.04 135.052 264.381 134.89 263.847 134.89C263.032 134.89 262.625 135.122 262.625 135.586C262.625 135.814 262.73 136.007 262.94 136.164C263.155 136.322 263.619 136.539 264.333 136.815C264.933 137.047 265.368 137.259 265.64 137.452C265.911 137.644 266.112 137.868 266.244 138.121C266.375 138.371 266.441 138.671 266.441 139.021Z" class="path-6"/> -<path d="M264.396 82.0898H262.712L258.58 75.3953H258.534L258.563 75.7688C258.617 76.4814 258.644 77.1326 258.644 77.7226V82.0898H257.397V73.6887H259.063L263.183 80.3487H263.218C263.21 80.2606 263.195 79.9407 263.172 79.3891C263.149 78.8336 263.137 78.4007 263.137 78.0904V73.6887H264.396V82.0898ZM272.107 78.9006C272.107 79.9388 271.841 80.749 271.309 81.3313C270.776 81.9136 270.035 82.2048 269.085 82.2048C268.491 82.2048 267.966 82.0707 267.51 81.8025C267.054 81.5344 266.704 81.1494 266.459 80.6475C266.213 80.1457 266.091 79.5634 266.091 78.9006C266.091 77.8701 266.355 77.0656 266.884 76.4871C267.412 75.9087 268.158 75.6194 269.119 75.6194C270.039 75.6194 270.766 75.9163 271.303 76.5101C271.839 77.1001 272.107 77.8969 272.107 78.9006ZM267.481 78.9006C267.481 80.3678 268.024 81.1015 269.108 81.1015C270.18 81.1015 270.717 80.3678 270.717 78.9006C270.717 77.4487 270.176 76.7227 269.096 76.7227C268.529 76.7227 268.117 76.9105 267.861 77.2859C267.608 77.6613 267.481 78.1996 267.481 78.9006ZM276.032 81.113C276.361 81.113 276.691 81.0612 277.02 80.9578V81.9749C276.871 82.04 276.678 82.0937 276.44 82.1358C276.206 82.1818 275.963 82.2048 275.71 82.2048C274.431 82.2048 273.791 81.5305 273.791 80.1821V76.7572H272.923V76.1596L273.854 75.6654L274.314 74.3208H275.147V75.7344H276.957V76.7572H275.147V80.1591C275.147 80.4847 275.228 80.726 275.388 80.8831C275.553 81.0363 275.768 81.113 276.032 81.113ZM279.646 82.0898H278.296V75.7344H279.646V82.0898ZM278.216 74.0507C278.216 73.8093 278.281 73.6235 278.411 73.4933C278.545 73.363 278.735 73.2979 278.98 73.2979C279.217 73.2979 279.401 73.363 279.532 73.4933C279.666 73.6235 279.733 73.8093 279.733 74.0507C279.733 74.2805 279.666 74.4625 279.532 74.5966C279.401 74.7268 279.217 74.792 278.98 74.792C278.735 74.792 278.545 74.7268 278.411 74.5966C278.281 74.4625 278.216 74.2805 278.216 74.0507ZM284.772 76.7572H283.221V82.0898H281.865V76.7572H280.819V76.1251L281.865 75.7114V75.2976C281.865 74.5468 282.041 73.9913 282.393 73.6312C282.746 73.2673 283.284 73.0853 284.008 73.0853C284.483 73.0853 284.95 73.1638 285.41 73.3209L285.054 74.3437C284.721 74.2365 284.403 74.1828 284.1 74.1828C283.793 74.1828 283.569 74.2786 283.428 74.4702C283.29 74.6579 283.221 74.9414 283.221 75.3206V75.7344H284.772V76.7572ZM287.203 82.0898H285.853V75.7344H287.203V82.0898ZM285.772 74.0507C285.772 73.8093 285.837 73.6235 285.968 73.4933C286.102 73.363 286.291 73.2979 286.536 73.2979C286.774 73.2979 286.958 73.363 287.088 73.4933C287.222 73.6235 287.289 73.8093 287.289 74.0507C287.289 74.2805 287.222 74.4625 287.088 74.5966C286.958 74.7268 286.774 74.792 286.536 74.792C286.291 74.792 286.102 74.7268 285.968 74.5966C285.837 74.4625 285.772 74.2805 285.772 74.0507ZM291.708 82.2048C290.747 82.2048 290.015 81.9251 289.513 81.3658C289.015 80.8027 288.766 79.9963 288.766 78.9466C288.766 77.8778 289.026 77.056 289.547 76.4814C290.072 75.9068 290.829 75.6194 291.817 75.6194C292.488 75.6194 293.091 75.7439 293.627 75.9929L293.219 77.079C292.649 76.8568 292.177 76.7457 291.806 76.7457C290.706 76.7457 290.157 77.4755 290.157 78.9351C290.157 79.6476 290.293 80.184 290.565 80.5441C290.84 80.9003 291.243 81.0785 291.771 81.0785C292.373 81.0785 292.942 80.9291 293.478 80.6303V81.8083C293.237 81.95 292.978 82.0515 292.702 82.1128C292.43 82.1741 292.099 82.2048 291.708 82.2048ZM298.949 82.0898L298.678 81.2049H298.632C298.326 81.5918 298.018 81.8562 297.707 81.9979C297.397 82.1358 296.999 82.2048 296.512 82.2048C295.888 82.2048 295.399 82.0362 295.047 81.6991C294.698 81.362 294.524 80.885 294.524 80.2682C294.524 79.6132 294.767 79.119 295.254 78.7857C295.74 78.4524 296.481 78.2704 297.477 78.2398L298.575 78.2053V77.8663C298.575 77.4602 298.479 77.1575 298.288 76.9583C298.1 76.7553 297.807 76.6538 297.409 76.6538C297.083 76.6538 296.771 76.7017 296.472 76.7974C296.173 76.8932 295.886 77.0062 295.61 77.1365L295.173 76.1711C295.518 75.991 295.895 75.855 296.305 75.7631C296.715 75.6673 297.102 75.6194 297.466 75.6194C298.274 75.6194 298.883 75.7957 299.293 76.1481C299.707 76.5005 299.914 77.0541 299.914 77.8088V82.0898H298.949ZM296.937 81.1704C297.428 81.1704 297.82 81.0344 298.115 80.7624C298.414 80.4866 298.564 80.1016 298.564 79.6074V79.0558L297.748 79.0902C297.112 79.1132 296.648 79.2205 296.357 79.412C296.07 79.5998 295.926 79.889 295.926 80.2797C295.926 80.5632 296.01 80.7835 296.179 80.9406C296.347 81.0938 296.6 81.1704 296.937 81.1704ZM304.166 81.113C304.496 81.113 304.825 81.0612 305.155 80.9578V81.9749C305.005 82.04 304.812 82.0937 304.574 82.1358C304.341 82.1818 304.097 82.2048 303.844 82.2048C302.565 82.2048 301.925 81.5305 301.925 80.1821V76.7572H301.057V76.1596L301.988 75.6654L302.448 74.3208H303.281V75.7344H305.091V76.7572H303.281V80.1591C303.281 80.4847 303.362 80.726 303.523 80.8831C303.687 81.0363 303.902 81.113 304.166 81.113ZM307.781 82.0898H306.43V75.7344H307.781V82.0898ZM306.35 74.0507C306.35 73.8093 306.415 73.6235 306.545 73.4933C306.679 73.363 306.869 73.2979 307.114 73.2979C307.352 73.2979 307.536 73.363 307.666 73.4933C307.8 73.6235 307.867 73.8093 307.867 74.0507C307.867 74.2805 307.8 74.4625 307.666 74.5966C307.536 74.7268 307.352 74.792 307.114 74.792C306.869 74.792 306.679 74.7268 306.545 74.5966C306.415 74.4625 306.35 74.2805 306.35 74.0507ZM315.354 78.9006C315.354 79.9388 315.088 80.749 314.556 81.3313C314.023 81.9136 313.282 82.2048 312.332 82.2048C311.738 82.2048 311.213 82.0707 310.757 81.8025C310.301 81.5344 309.951 81.1494 309.706 80.6475C309.461 80.1457 309.338 79.5634 309.338 78.9006C309.338 77.8701 309.602 77.0656 310.131 76.4871C310.66 75.9087 311.405 75.6194 312.366 75.6194C313.286 75.6194 314.014 75.9163 314.55 76.5101C315.086 77.1001 315.354 77.8969 315.354 78.9006ZM310.729 78.9006C310.729 80.3678 311.271 81.1015 312.355 81.1015C313.427 81.1015 313.964 80.3678 313.964 78.9006C313.964 77.4487 313.424 76.7227 312.343 76.7227C311.776 76.7227 311.365 76.9105 311.108 77.2859C310.855 77.6613 310.729 78.1996 310.729 78.9006ZM322.503 82.0898H321.147V78.1823C321.147 77.692 321.047 77.3261 320.848 77.0848C320.653 76.8434 320.34 76.7227 319.911 76.7227C319.34 76.7227 318.923 76.8913 318.659 77.2284C318.394 77.5655 318.262 78.1306 318.262 78.9236V82.0898H316.912V75.7344H317.969L318.159 76.5676H318.228C318.419 76.2649 318.691 76.0313 319.044 75.8665C319.396 75.7018 319.787 75.6194 320.216 75.6194C321.741 75.6194 322.503 76.3952 322.503 77.9467V82.0898ZM328.652 80.2797C328.652 80.9003 328.425 81.3773 327.973 81.7106C327.521 82.04 326.874 82.2048 326.031 82.2048C325.185 82.2048 324.505 82.0764 323.991 81.8198V80.6533C324.738 80.998 325.434 81.1704 326.077 81.1704C326.908 81.1704 327.324 80.9195 327.324 80.4177C327.324 80.2568 327.278 80.1227 327.186 80.0154C327.094 79.9081 326.943 79.797 326.732 79.6821C326.522 79.5672 326.228 79.4369 325.853 79.2914C325.121 79.0079 324.625 78.7244 324.365 78.4409C324.108 78.1574 323.98 77.7896 323.98 77.3376C323.98 76.7936 324.198 76.3722 324.635 76.0734C325.075 75.7708 325.673 75.6194 326.428 75.6194C327.175 75.6194 327.881 75.7708 328.548 76.0734L328.111 77.0905C327.426 76.807 326.849 76.6653 326.382 76.6653C325.669 76.6653 325.313 76.8683 325.313 77.2744C325.313 77.4736 325.405 77.6422 325.589 77.7801C325.776 77.918 326.182 78.1076 326.807 78.349C327.332 78.552 327.713 78.7378 327.95 78.9064C328.188 79.0749 328.364 79.2703 328.479 79.4925C328.594 79.7108 328.652 79.9733 328.652 80.2797Z" class="path-7"/> -<path d="M99.2005 77.533H102.292V81.7508C101.786 81.9155 101.3 82.0324 100.832 82.1013C100.369 82.1703 99.867 82.2048 99.3269 82.2048C98.055 82.2048 97.0743 81.8293 96.3847 81.0785C95.6952 80.3238 95.3504 79.2607 95.3504 77.8892C95.3504 76.5369 95.7392 75.4796 96.5169 74.7173C97.2946 73.9511 98.3653 73.568 99.7291 73.568C100.606 73.568 101.438 73.7365 102.223 74.0737L101.74 75.2172C101.058 74.9031 100.377 74.746 99.6947 74.746C98.7982 74.746 98.0895 75.0276 97.5685 75.5907C97.0475 76.1538 96.787 76.9239 96.787 77.9007C96.787 78.9274 97.0207 79.7089 97.488 80.2453C97.9593 80.7778 98.6354 81.044 99.5165 81.044C99.9609 81.044 100.436 80.9885 100.942 80.8774V78.711H99.2005V77.533ZM106.947 82.2048C105.958 82.2048 105.184 81.9175 104.625 81.3428C104.07 80.7643 103.792 79.9694 103.792 78.9581C103.792 77.9199 104.05 77.1039 104.568 76.5101C105.085 75.9163 105.795 75.6194 106.699 75.6194C107.538 75.6194 108.201 75.8742 108.688 76.3837C109.174 76.8932 109.418 77.5943 109.418 78.4869V79.2167H105.182C105.202 79.8334 105.368 80.3085 105.682 80.6418C105.996 80.9712 106.439 81.1359 107.01 81.1359C107.385 81.1359 107.734 81.1015 108.056 81.0325C108.381 80.9597 108.73 80.841 109.101 80.6762V81.7738C108.772 81.9309 108.439 82.042 108.102 82.1071C107.764 82.1722 107.379 82.2048 106.947 82.2048ZM106.699 76.6423C106.27 76.6423 105.926 76.7783 105.665 77.0503C105.408 77.3223 105.255 77.7188 105.205 78.2398H108.09C108.082 77.7149 107.956 77.3184 107.711 77.0503C107.466 76.7783 107.129 76.6423 106.699 76.6423ZM116.543 82.0898H115.187V78.1823C115.187 77.692 115.087 77.3261 114.888 77.0848C114.693 76.8434 114.38 76.7227 113.951 76.7227C113.381 76.7227 112.963 76.8913 112.699 77.2284C112.434 77.5655 112.302 78.1306 112.302 78.9236V82.0898H110.952V75.7344H112.009L112.199 76.5676H112.268C112.459 76.2649 112.731 76.0313 113.084 75.8665C113.436 75.7018 113.827 75.6194 114.256 75.6194C115.781 75.6194 116.543 76.3952 116.543 77.9467V82.0898ZM121.198 82.2048C120.209 82.2048 119.435 81.9175 118.876 81.3428C118.321 80.7643 118.043 79.9694 118.043 78.9581C118.043 77.9199 118.301 77.1039 118.819 76.5101C119.336 75.9163 120.046 75.6194 120.95 75.6194C121.789 75.6194 122.452 75.8742 122.939 76.3837C123.425 76.8932 123.668 77.5943 123.668 78.4869V79.2167H119.433C119.453 79.8334 119.619 80.3085 119.933 80.6418C120.247 80.9712 120.69 81.1359 121.261 81.1359C121.636 81.1359 121.985 81.1015 122.307 81.0325C122.632 80.9597 122.981 80.841 123.352 80.6762V81.7738C123.023 81.9309 122.69 82.042 122.353 82.1071C122.015 82.1722 121.63 82.2048 121.198 82.2048ZM120.95 76.6423C120.521 76.6423 120.177 76.7783 119.916 77.0503C119.659 77.3223 119.506 77.7188 119.456 78.2398H122.341C122.333 77.7149 122.207 77.3184 121.962 77.0503C121.717 76.7783 121.38 76.6423 120.95 76.6423ZM128.426 75.6194C128.698 75.6194 128.923 75.6386 129.099 75.6769L128.967 76.9354C128.775 76.8894 128.576 76.8664 128.369 76.8664C127.829 76.8664 127.39 77.0426 127.053 77.3951C126.72 77.7475 126.553 78.2053 126.553 78.7684V82.0898H125.203V75.7344H126.26L126.438 76.8549H126.507C126.718 76.4756 126.992 76.1749 127.329 75.9527C127.67 75.7305 128.036 75.6194 128.426 75.6194ZM134.259 82.0898L133.989 81.2049H133.943C133.637 81.5918 133.328 81.8562 133.018 81.9979C132.708 82.1358 132.309 82.2048 131.823 82.2048C131.198 82.2048 130.71 82.0362 130.357 81.6991C130.009 81.362 129.834 80.885 129.834 80.2682C129.834 79.6132 130.078 79.119 130.564 78.7857C131.051 78.4524 131.792 78.2704 132.788 78.2398L133.886 78.2053V77.8663C133.886 77.4602 133.79 77.1575 133.598 76.9583C133.41 76.7553 133.117 76.6538 132.719 76.6538C132.393 76.6538 132.081 76.7017 131.782 76.7974C131.484 76.8932 131.196 77.0062 130.92 77.1365L130.484 76.1711C130.828 75.991 131.206 75.855 131.616 75.7631C132.026 75.6673 132.413 75.6194 132.776 75.6194C133.585 75.6194 134.194 75.7957 134.604 76.1481C135.018 76.5005 135.224 77.0541 135.224 77.8088V82.0898H134.259ZM132.248 81.1704C132.738 81.1704 133.131 81.0344 133.426 80.7624C133.725 80.4866 133.874 80.1016 133.874 79.6074V79.0558L133.058 79.0902C132.422 79.1132 131.959 79.2205 131.667 79.412C131.38 79.5998 131.236 79.889 131.236 80.2797C131.236 80.5632 131.321 80.7835 131.489 80.9406C131.658 81.0938 131.911 81.1704 132.248 81.1704ZM138.46 82.0898H137.109V73.1485H138.46V82.0898Z" class="path-8"/> -<line x1="30" y1="98.9313" x2="359.52" y2="98.9313" stroke-width="0.840611" class="line-1"/> -<line x1="204.847" y1="98.0906" x2="361.201" y2="98.0906" stroke-width="2.52183" class="line-2"/> -<path d="M166.931 45.9876C166.931 47.2682 166.468 48.273 165.542 49.002C164.616 49.731 163.338 50.0955 161.71 50.0955C160.081 50.0955 158.748 49.8426 157.71 49.3369V47.1106C158.367 47.4193 159.063 47.6623 159.798 47.8396C160.541 48.0169 161.23 48.1056 161.867 48.1056C162.8 48.1056 163.486 47.9283 163.926 47.5736C164.373 47.219 164.596 46.7429 164.596 46.1452C164.596 45.6067 164.392 45.1503 163.985 44.776C163.578 44.4016 162.737 43.9583 161.463 43.4461C160.15 42.9141 159.224 42.3067 158.685 41.6237C158.147 40.9407 157.878 40.1198 157.878 39.1609C157.878 37.9591 158.304 37.0134 159.158 36.3239C160.012 35.6343 161.158 35.2895 162.596 35.2895C163.975 35.2895 165.348 35.5916 166.714 36.1958L165.965 38.1167C164.685 37.5782 163.542 37.309 162.537 37.309C161.775 37.309 161.197 37.4764 160.803 37.8114C160.409 38.1397 160.212 38.5765 160.212 39.1215C160.212 39.4959 160.291 39.8177 160.449 40.0869C160.606 40.3496 160.866 40.5992 161.227 40.8356C161.588 41.072 162.238 41.384 163.177 41.7714C164.235 42.2114 165.01 42.6219 165.502 43.0028C165.995 43.3837 166.356 43.8139 166.586 44.2933C166.816 44.7727 166.931 45.3375 166.931 45.9876ZM174.23 50.0955C172.536 50.0955 171.209 49.6029 170.25 48.6178C169.298 47.6262 168.822 46.2635 168.822 44.5297C168.822 42.75 169.265 41.3511 170.152 40.3332C171.038 39.3153 172.257 38.8063 173.806 38.8063C175.245 38.8063 176.381 39.243 177.215 40.1165C178.049 40.9899 178.466 42.1917 178.466 43.7219V44.973H171.206C171.239 46.0303 171.524 46.8447 172.063 47.416C172.601 47.9808 173.36 48.2632 174.338 48.2632C174.982 48.2632 175.58 48.2041 176.131 48.0859C176.69 47.9611 177.287 47.7575 177.924 47.4751V49.3566C177.359 49.6259 176.788 49.8163 176.21 49.928C175.632 50.0396 174.972 50.0955 174.23 50.0955ZM173.806 40.5598C173.071 40.5598 172.48 40.7929 172.033 41.2592C171.593 41.7255 171.331 42.4052 171.245 43.2983H176.19C176.177 42.3986 175.961 41.7189 175.54 41.2592C175.12 40.7929 174.542 40.5598 173.806 40.5598ZM185.155 48.2238C185.72 48.2238 186.284 48.1351 186.849 47.9578V49.7014C186.593 49.8131 186.261 49.905 185.854 49.9772C185.454 50.0561 185.037 50.0955 184.603 50.0955C182.41 50.0955 181.313 48.9396 181.313 46.6279V40.7568H179.825V39.7323L181.421 38.8851L182.209 36.58H183.638V39.0033H186.741V40.7568H183.638V46.5885C183.638 47.1467 183.776 47.5605 184.051 47.8297C184.334 48.0924 184.702 48.2238 185.155 48.2238ZM193.095 48.2238C193.659 48.2238 194.224 48.1351 194.789 47.9578V49.7014C194.533 49.8131 194.201 49.905 193.794 49.9772C193.393 50.0561 192.976 50.0955 192.543 50.0955C190.349 50.0955 189.253 48.9396 189.253 46.6279V40.7568H187.765V39.7323L189.361 38.8851L190.149 36.58H191.578V39.0033H194.681V40.7568H191.578V46.5885C191.578 47.1467 191.715 47.5605 191.991 47.8297C192.274 48.0924 192.641 48.2238 193.095 48.2238ZM199.291 49.8984H196.976V39.0033H199.291V49.8984ZM196.838 36.117C196.838 35.7033 196.95 35.3848 197.173 35.1615C197.403 34.9382 197.728 34.8265 198.148 34.8265C198.555 34.8265 198.87 34.9382 199.094 35.1615C199.324 35.3848 199.439 35.7033 199.439 36.117C199.439 36.511 199.324 36.823 199.094 37.0528C198.87 37.2761 198.555 37.3878 198.148 37.3878C197.728 37.3878 197.403 37.2761 197.173 37.0528C196.95 36.823 196.838 36.511 196.838 36.117ZM212.195 49.8984H209.871V43.1998C209.871 42.3592 209.7 41.732 209.358 41.3183C209.023 40.9046 208.488 40.6977 207.753 40.6977C206.774 40.6977 206.058 40.9866 205.605 41.5646C205.152 42.1425 204.926 43.1112 204.926 44.4706V49.8984H202.611V39.0033H204.423L204.748 40.4317H204.866C205.195 39.9129 205.661 39.5123 206.265 39.2299C206.869 38.9475 207.539 38.8063 208.275 38.8063C210.889 38.8063 212.195 40.1362 212.195 42.7959V49.8984ZM224.617 39.0033V40.2741L222.756 40.6189C222.926 40.8487 223.068 41.1311 223.179 41.4661C223.291 41.801 223.347 42.1556 223.347 42.53C223.347 43.653 222.959 44.5363 222.184 45.1798C221.409 45.8234 220.342 46.1452 218.983 46.1452C218.635 46.1452 218.319 46.119 218.037 46.0664C217.538 46.3751 217.288 46.7363 217.288 47.15C217.288 47.3996 217.403 47.5868 217.633 47.7115C217.87 47.8363 218.3 47.8987 218.924 47.8987H220.825C222.027 47.8987 222.94 48.1548 223.563 48.6671C224.187 49.1793 224.499 49.9181 224.499 50.8835C224.499 52.1182 223.99 53.0704 222.972 53.7403C221.954 54.4102 220.483 54.7451 218.559 54.7451C217.075 54.7451 215.942 54.4824 215.161 53.957C214.379 53.4316 213.988 52.683 213.988 51.711C213.988 51.0411 214.199 50.4764 214.619 50.0166C215.046 49.5635 215.64 49.2483 216.402 49.071C216.093 48.9396 215.837 48.7295 215.633 48.4405C215.436 48.145 215.338 47.8363 215.338 47.5145C215.338 47.1073 215.453 46.7626 215.683 46.4802C215.913 46.1978 216.254 45.9187 216.707 45.6428C216.142 45.3999 215.683 45.0058 215.328 44.4607C214.98 43.9091 214.806 43.2655 214.806 42.53C214.806 41.3478 215.177 40.4317 215.919 39.7815C216.668 39.1314 217.732 38.8063 219.111 38.8063C219.419 38.8063 219.741 38.8293 220.076 38.8753C220.418 38.9147 220.674 38.9574 220.845 39.0033H224.617ZM216.057 51.5928C216.057 52.0919 216.28 52.4761 216.727 52.7454C217.18 53.0146 217.814 53.1492 218.628 53.1492C219.889 53.1492 220.828 52.9686 221.445 52.6074C222.063 52.2462 222.371 51.7668 222.371 51.1692C222.371 50.6964 222.201 50.3581 221.859 50.1546C221.524 49.9575 220.897 49.859 219.978 49.859H218.224C217.561 49.859 217.032 50.0134 216.638 50.322C216.251 50.6373 216.057 51.0608 216.057 51.5928ZM217.052 42.53C217.052 43.213 217.226 43.7383 217.574 44.1061C217.929 44.4739 218.434 44.6578 219.091 44.6578C220.431 44.6578 221.101 43.9419 221.101 42.5103C221.101 41.801 220.933 41.2559 220.598 40.875C220.27 40.4875 219.768 40.2938 219.091 40.2938C218.421 40.2938 217.912 40.4842 217.564 40.8651C217.223 41.2461 217.052 41.801 217.052 42.53ZM233.966 46.7954C233.966 47.8593 233.579 48.6769 232.804 49.2483C232.029 49.8131 230.919 50.0955 229.474 50.0955C228.023 50.0955 226.857 49.8755 225.977 49.4354V47.4357C227.258 48.0268 228.449 48.3223 229.553 48.3223C230.978 48.3223 231.69 47.8921 231.69 47.0318C231.69 46.756 231.612 46.5261 231.454 46.3423C231.296 46.1584 231.037 45.9679 230.676 45.7709C230.315 45.5739 229.812 45.3506 229.169 45.101C227.914 44.6151 227.064 44.1291 226.617 43.6431C226.177 43.1571 225.957 42.5267 225.957 41.7517C225.957 40.8192 226.332 40.0968 227.08 39.5845C227.835 39.0657 228.86 38.8063 230.154 38.8063C231.434 38.8063 232.646 39.0657 233.789 39.5845L233.04 41.3281C231.864 40.8422 230.876 40.5992 230.075 40.5992C228.853 40.5992 228.243 40.9472 228.243 41.6434C228.243 41.9849 228.4 42.2738 228.715 42.5103C229.037 42.7467 229.733 43.0718 230.804 43.4855C231.704 43.8336 232.357 44.1521 232.764 44.441C233.171 44.73 233.473 45.0649 233.67 45.4458C233.867 45.8202 233.966 46.27 233.966 46.7954Z" class="path-9"/> -<defs> -<filter id="filter0_d_13917_210930" x="0" y="0" width="391" height="354" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="2"/> -<feGaussianBlur stdDeviation="1.5"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_13917_210930"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_13917_210930" result="shape"/> -</filter> -<clipPath id="clip0_13917_210930"> -<rect width="13.4498" height="73.9738" transform="translate(29.8997 173.324)" class="rect-7"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/mini-guides/staking/staking-section.svg b/web/src/assets/svgs/mini-guides/staking/staking-section.svg deleted file mode 100644 index faafd141e..000000000 --- a/web/src/assets/svgs/mini-guides/staking/staking-section.svg +++ /dev/null @@ -1,39 +0,0 @@ -<svg viewBox="0 0 391 194" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g filter="url(#filter0_d_13917_210903)"> -<rect x="3" y="1" width="385" height="188.78" rx="2.5048" class="rect-1"/> -<rect x="3.41747" y="1.41747" width="384.165" height="187.945" rx="2.08734" stroke-width="0.834935" class="rect-2"/> -</g> -<rect x="30.1355" y="82.4956" width="325.165" height="36.7371" rx="2.08734" stroke-width="0.834935" class="rect-3"/> -<path d="M43.8401 100.349C43.8401 98.4747 44.2032 97.0744 44.9294 96.1482C45.66 95.2176 46.7384 94.7523 48.1648 94.7523C48.6562 94.7523 49.0432 94.7936 49.3259 94.8762V95.809C48.991 95.7003 48.6083 95.6459 48.1778 95.6459C47.1559 95.6459 46.3753 95.9655 45.8361 96.6048C45.2969 97.2397 45.0012 98.2399 44.949 99.6053H45.0273C45.5056 98.8574 46.2623 98.4834 47.2972 98.4834C48.1539 98.4834 48.828 98.7421 49.3193 99.2596C49.8151 99.7771 50.063 100.479 50.063 101.367C50.063 102.358 49.7912 103.139 49.2476 103.708C48.7084 104.274 47.9778 104.556 47.0559 104.556C46.0688 104.556 45.286 104.187 44.7076 103.447C44.1293 102.704 43.8401 101.671 43.8401 100.349ZM47.0428 103.637C47.6603 103.637 48.1387 103.443 48.4779 103.056C48.8214 102.665 48.9932 102.101 48.9932 101.367C48.9932 100.736 48.8345 100.24 48.517 99.8793C48.1996 99.5184 47.7256 99.3379 47.095 99.3379C46.7037 99.3379 46.3449 99.4183 46.0187 99.5792C45.6926 99.7401 45.4317 99.9619 45.236 100.245C45.0447 100.527 44.949 100.821 44.949 101.125C44.949 101.573 45.036 101.991 45.2099 102.378C45.3838 102.765 45.6295 103.071 45.947 103.297C46.2688 103.523 46.6341 103.637 47.0428 103.637ZM57.6426 104.426H51.3741V103.493L53.8854 100.969C54.6508 100.195 55.1552 99.6423 55.3987 99.3118C55.6422 98.9813 55.8249 98.6595 55.9466 98.3464C56.0684 98.0333 56.1293 97.6963 56.1293 97.3354C56.1293 96.8266 55.9749 96.4243 55.6662 96.1286C55.3574 95.8286 54.9291 95.6785 54.3811 95.6785C53.9854 95.6785 53.6093 95.7438 53.2527 95.8742C52.9004 96.0047 52.5069 96.2417 52.072 96.5852L51.498 95.8481C52.3764 95.1176 53.3331 94.7523 54.3681 94.7523C55.2639 94.7523 55.9662 94.9828 56.475 95.4437C56.9838 95.9003 57.2382 96.5156 57.2382 97.2897C57.2382 97.8942 57.0686 98.4921 56.7294 99.0835C56.3902 99.6749 55.7553 100.423 54.8247 101.327L52.7374 103.369V103.421H57.6426V104.426ZM65.3397 99.6445C65.3397 101.293 65.0787 102.523 64.5569 103.336C64.0394 104.15 63.2458 104.556 62.176 104.556C61.1498 104.556 60.3692 104.141 59.8343 103.31C59.2994 102.475 59.032 101.253 59.032 99.6445C59.032 97.9833 59.2907 96.7505 59.8082 95.946C60.3257 95.1415 61.115 94.7392 62.176 94.7392C63.211 94.7392 63.9959 95.1589 64.5308 95.9982C65.07 96.8374 65.3397 98.0529 65.3397 99.6445ZM60.1278 99.6445C60.1278 101.032 60.2909 102.043 60.6171 102.678C60.9432 103.308 61.4629 103.623 62.176 103.623C62.8979 103.623 63.4197 103.304 63.7415 102.665C64.0677 102.021 64.2308 101.014 64.2308 99.6445C64.2308 98.2747 64.0677 97.2723 63.7415 96.6374C63.4197 95.9982 62.8979 95.6785 62.176 95.6785C61.4629 95.6785 60.9432 95.9938 60.6171 96.6244C60.2909 97.2506 60.1278 98.2573 60.1278 99.6445ZM76.8396 97.668C76.8396 98.6334 76.5091 99.377 75.8481 99.8989C75.1915 100.416 74.25 100.675 73.0237 100.675H71.9017V104.426H70.7928V94.8893H73.265C75.6481 94.8893 76.8396 95.8155 76.8396 97.668ZM71.9017 99.7227H72.8997C73.8825 99.7227 74.5935 99.564 75.0327 99.2466C75.4719 98.9291 75.6915 98.4203 75.6915 97.7202C75.6915 97.0897 75.485 96.62 75.0719 96.3113C74.6588 96.0025 74.0152 95.8481 73.1411 95.8481H71.9017V99.7227ZM86.2913 104.426H85.0259L79.814 96.4221H79.7619C79.8314 97.3614 79.8662 98.2225 79.8662 99.0052V104.426H78.8421V94.8893H80.0945L85.2933 102.86H85.3455C85.3368 102.743 85.3172 102.367 85.2868 101.732C85.2563 101.093 85.2455 100.636 85.2542 100.362V94.8893H86.2913V104.426ZM95.8017 104.426H94.4972L91.0204 99.801L90.0224 100.688V104.426H88.9135V94.8893H90.0224V99.6184L94.3471 94.8893H95.6582L91.8228 99.0313L95.8017 104.426Z" class="path-1"/> -<rect x="268.697" y="82.0742" width="89.4358" height="38.2035" rx="2.5048" class="rect-4"/> -<path d="M302.326 103.086C302.326 103.934 302.02 104.599 301.407 105.082C300.793 105.565 299.948 105.806 298.869 105.806C297.791 105.806 296.908 105.639 296.221 105.304V103.83C296.656 104.034 297.117 104.195 297.604 104.312C298.095 104.43 298.552 104.489 298.974 104.489C299.591 104.489 300.045 104.371 300.337 104.136C300.633 103.902 300.78 103.586 300.78 103.191C300.78 102.834 300.646 102.532 300.376 102.284C300.106 102.036 299.55 101.742 298.706 101.403C297.836 101.051 297.223 100.649 296.867 100.197C296.51 99.7443 296.332 99.2007 296.332 98.5658C296.332 97.77 296.614 97.1438 297.18 96.6872C297.745 96.2306 298.504 96.0023 299.456 96.0023C300.369 96.0023 301.278 96.2023 302.183 96.6024L301.687 97.8744C300.839 97.5178 300.082 97.3395 299.417 97.3395C298.913 97.3395 298.53 97.4504 298.269 97.6721C298.008 97.8896 297.878 98.1788 297.878 98.5397C297.878 98.7876 297.93 99.0007 298.034 99.1789C298.139 99.3529 298.31 99.5181 298.55 99.6747C298.789 99.8312 299.219 100.038 299.841 100.294C300.541 100.586 301.054 100.858 301.38 101.11C301.707 101.362 301.946 101.647 302.098 101.964C302.25 102.282 302.326 102.656 302.326 103.086ZM306.697 104.567C307.071 104.567 307.445 104.508 307.819 104.391V105.545C307.649 105.619 307.429 105.68 307.16 105.728C306.895 105.78 306.618 105.806 306.331 105.806C304.879 105.806 304.153 105.041 304.153 103.51V99.6225H303.168V98.9441L304.224 98.3831L304.746 96.8568H305.692V98.4614H307.747V99.6225H305.692V103.484C305.692 103.854 305.783 104.128 305.966 104.306C306.153 104.48 306.397 104.567 306.697 104.567ZM313.781 105.676L313.474 104.671H313.422C313.074 105.11 312.724 105.411 312.372 105.571C312.019 105.728 311.567 105.806 311.015 105.806C310.306 105.806 309.752 105.615 309.351 105.232C308.956 104.85 308.758 104.308 308.758 103.608C308.758 102.864 309.034 102.303 309.586 101.925C310.139 101.547 310.98 101.34 312.111 101.305L313.357 101.266V100.881C313.357 100.42 313.248 100.077 313.03 99.8508C312.817 99.6203 312.485 99.5051 312.032 99.5051C311.663 99.5051 311.308 99.5594 310.969 99.6682C310.63 99.7769 310.304 99.9052 309.991 100.053L309.495 98.9572C309.886 98.7528 310.315 98.5984 310.78 98.494C311.245 98.3853 311.685 98.331 312.098 98.331C313.015 98.331 313.707 98.531 314.172 98.9311C314.642 99.3311 314.876 99.9595 314.876 100.816V105.676H313.781ZM311.498 104.632C312.054 104.632 312.5 104.478 312.835 104.169C313.174 103.856 313.344 103.419 313.344 102.858V102.232L312.417 102.271C311.695 102.297 311.169 102.419 310.839 102.636C310.513 102.849 310.35 103.177 310.35 103.621C310.35 103.943 310.445 104.193 310.637 104.371C310.828 104.545 311.115 104.632 311.498 104.632ZM318.497 101.866L319.364 100.784L321.543 98.4614H323.311L320.408 101.56L323.493 105.676H321.693L319.377 102.512L318.536 103.204V105.676H317.016V95.5261H318.536V100.477L318.458 101.866H318.497ZM327.811 105.806C326.689 105.806 325.811 105.48 325.176 104.828C324.546 104.171 324.23 103.269 324.23 102.121C324.23 100.942 324.524 100.016 325.111 99.342C325.698 98.668 326.505 98.331 327.531 98.331C328.483 98.331 329.236 98.6201 329.788 99.1985C330.34 99.7769 330.616 100.573 330.616 101.586V102.414H325.809C325.831 103.114 326.02 103.654 326.376 104.032C326.733 104.406 327.235 104.593 327.883 104.593C328.309 104.593 328.705 104.554 329.07 104.476C329.44 104.393 329.836 104.258 330.257 104.071V105.317C329.884 105.495 329.505 105.621 329.122 105.695C328.74 105.769 328.303 105.806 327.811 105.806ZM327.531 99.492C327.044 99.492 326.652 99.6464 326.357 99.9552C326.065 100.264 325.891 100.714 325.835 101.305H329.109C329.101 100.71 328.957 100.26 328.679 99.9552C328.401 99.6464 328.018 99.492 327.531 99.492Z" class="path-2"/> -<path d="M36.4755 48.3948C36.4755 49.2428 36.169 49.9081 35.5558 50.3908C34.9426 50.8735 34.0968 51.1148 33.0184 51.1148C31.9399 51.1148 31.0571 50.9474 30.3701 50.6126V49.1384C30.8049 49.3428 31.2659 49.5037 31.7529 49.6211C32.2443 49.7385 32.7009 49.7972 33.1227 49.7972C33.7402 49.7972 34.1947 49.6798 34.486 49.445C34.7817 49.2101 34.9296 48.8949 34.9296 48.4991C34.9296 48.1426 34.7948 47.8403 34.5252 47.5925C34.2556 47.3446 33.6989 47.051 32.8553 46.7119C31.9856 46.3596 31.3724 45.9574 31.0158 45.5051C30.6592 45.0529 30.481 44.5093 30.481 43.8744C30.481 43.0786 30.7636 42.4524 31.3289 41.9958C31.8943 41.5392 32.6531 41.3109 33.6054 41.3109C34.5186 41.3109 35.4275 41.5109 36.332 41.911L35.8363 43.183C34.9883 42.8264 34.2316 42.6481 33.5663 42.6481C33.0619 42.6481 32.6792 42.759 32.4183 42.9807C32.1573 43.1982 32.0269 43.4874 32.0269 43.8483C32.0269 44.0962 32.0791 44.3092 32.1834 44.4875C32.2878 44.6615 32.4596 44.8267 32.6988 44.9833C32.9379 45.1398 33.3684 45.3464 33.9903 45.603C34.6904 45.8943 35.2036 46.1661 35.5297 46.4183C35.8558 46.6705 36.095 46.9554 36.2472 47.2728C36.3994 47.5903 36.4755 47.9643 36.4755 48.3948ZM40.8459 49.8755C41.2199 49.8755 41.5939 49.8168 41.9678 49.6994V50.8539C41.7982 50.9278 41.5786 50.9887 41.309 51.0366C41.0438 51.0887 40.7676 51.1148 40.4806 51.1148C39.0282 51.1148 38.3019 50.3495 38.3019 48.8188V44.9311H37.317V44.2527L38.3737 43.6917L38.8955 42.1654H39.8414V43.77H41.8961V44.9311H39.8414V48.7927C39.8414 49.1623 39.9327 49.4363 40.1153 49.6146C40.3023 49.7885 40.5458 49.8755 40.8459 49.8755ZM47.9298 50.9844L47.6232 49.9798H47.571C47.2231 50.4191 46.8731 50.7191 46.5208 50.88C46.1686 51.0366 45.7163 51.1148 45.1641 51.1148C44.4552 51.1148 43.9008 50.9235 43.5007 50.5408C43.105 50.1581 42.9071 49.6167 42.9071 48.9166C42.9071 48.173 43.1833 47.612 43.7355 47.2337C44.2878 46.8554 45.1293 46.6488 46.2599 46.614L47.5058 46.5749V46.19C47.5058 45.7291 47.3971 45.3855 47.1797 45.1594C46.9666 44.9289 46.6339 44.8137 46.1816 44.8137C45.812 44.8137 45.4576 44.868 45.1184 44.9768C44.7792 45.0855 44.4531 45.2138 44.14 45.3616L43.6442 44.2658C44.0356 44.0614 44.4639 43.907 44.9292 43.8026C45.3945 43.6939 45.8338 43.6396 46.2469 43.6396C47.1644 43.6396 47.8559 43.8396 48.3212 44.2397C48.7908 44.6397 49.0256 45.2681 49.0256 46.1248V50.9844H47.9298ZM45.6468 49.9407C46.2034 49.9407 46.6491 49.7863 46.984 49.4776C47.3232 49.1645 47.4928 48.7274 47.4928 48.1665V47.5403L46.5665 47.5794C45.8446 47.6055 45.3184 47.7273 44.988 47.9447C44.6618 48.1578 44.4987 48.4861 44.4987 48.9297C44.4987 49.2515 44.5944 49.5015 44.7857 49.6798C44.9771 49.8537 45.2641 49.9407 45.6468 49.9407ZM52.6459 47.175L53.5134 46.0922L55.6921 43.77H57.4598L54.5571 46.8684L57.6424 50.9844H55.8421L53.5265 47.8208L52.685 48.5122V50.9844H51.1652V40.8347H52.685V45.7856L52.6067 47.175H52.6459ZM61.9606 51.1148C60.8387 51.1148 59.9602 50.7887 59.3253 50.1364C58.6948 49.4798 58.3795 48.5774 58.3795 47.4294C58.3795 46.2509 58.6731 45.3246 59.2601 44.6506C59.8472 43.9766 60.6539 43.6396 61.6801 43.6396C62.6325 43.6396 63.3848 43.9287 63.9371 44.5071C64.4893 45.0855 64.7655 45.8813 64.7655 46.8945V47.7229H59.9581C59.9798 48.423 60.169 48.9623 60.5256 49.3406C60.8822 49.7146 61.3844 49.9016 62.0324 49.9016C62.4585 49.9016 62.8543 49.8624 63.2195 49.7842C63.5892 49.7015 63.9849 49.5667 64.4067 49.3797V50.6256C64.0327 50.8039 63.6544 50.93 63.2717 51.0039C62.889 51.0779 62.452 51.1148 61.9606 51.1148ZM61.6801 44.8006C61.1931 44.8006 60.8017 44.955 60.506 45.2638C60.2146 45.5725 60.0407 46.0226 59.9842 46.614H63.2587C63.25 46.0183 63.1065 45.5682 62.8282 45.2638C62.5498 44.955 62.1672 44.8006 61.6801 44.8006ZM76.4546 44.331C76.4546 45.3268 76.1284 46.09 75.4761 46.6205C74.8238 47.1511 73.8954 47.4163 72.6908 47.4163H71.6993V50.9844H70.1404V41.4479H72.8865C74.078 41.4479 74.9695 41.6914 75.5609 42.1784C76.1567 42.6655 76.4546 43.383 76.4546 44.331ZM71.6993 46.1052H72.5278C73.3279 46.1052 73.915 45.9661 74.2889 45.6878C74.6629 45.4094 74.8499 44.9746 74.8499 44.3832C74.8499 43.8352 74.6825 43.4265 74.3477 43.1569C74.0128 42.8872 73.491 42.7524 72.7822 42.7524H71.6993V46.1052ZM86.3042 50.9844H84.393L79.703 43.3852H79.6508L79.6834 43.8092C79.7443 44.618 79.7747 45.3573 79.7747 46.0269V50.9844H78.3593V41.4479H80.2509L84.9278 49.0079H84.967C84.9583 48.9079 84.9409 48.5448 84.9148 47.9186C84.8887 47.288 84.8757 46.7967 84.8757 46.4444V41.4479H86.3042V50.9844ZM96.1016 50.9844H94.2948L91.3007 46.6662L90.381 47.4163V50.9844H88.822V41.4479H90.381V46.0009C90.8072 45.479 91.2312 44.9768 91.653 44.4941L94.2295 41.4479H96.0038C94.3383 43.4047 93.1446 44.7985 92.4227 45.6291L96.1016 50.9844Z" class="path-3"/> -<path d="M103.309 50.2212C103.501 50.2212 103.686 50.2081 103.864 50.1821C104.042 50.1516 104.184 50.1212 104.288 50.0907V50.9191C104.17 50.9757 103.997 51.0213 103.766 51.0561C103.54 51.0953 103.336 51.1148 103.153 51.1148C101.77 51.1148 101.079 50.3864 101.079 48.9297V44.6767H100.055V44.1549L101.079 43.7048L101.535 42.1784H102.161V43.8352H104.236V44.6767H102.161V48.884C102.161 49.3145 102.264 49.645 102.468 49.8755C102.672 50.106 102.953 50.2212 103.309 50.2212ZM111.894 47.4033C111.894 48.5687 111.6 49.4798 111.013 50.1364C110.426 50.7887 109.615 51.1148 108.58 51.1148C107.941 51.1148 107.373 50.9648 106.877 50.6648C106.382 50.3647 105.999 49.9342 105.729 49.3732C105.46 48.8122 105.325 48.1556 105.325 47.4033C105.325 46.2379 105.616 45.3312 106.199 44.6832C106.782 44.0309 107.591 43.7048 108.626 43.7048C109.626 43.7048 110.419 44.0375 111.007 44.7028C111.598 45.3681 111.894 46.2683 111.894 47.4033ZM106.447 47.4033C106.447 48.3165 106.63 49.0123 106.995 49.4906C107.36 49.969 107.897 50.2081 108.606 50.2081C109.315 50.2081 109.852 49.9711 110.217 49.4971C110.587 49.0188 110.772 48.3208 110.772 47.4033C110.772 46.4944 110.587 45.8052 110.217 45.3355C109.852 44.8615 109.311 44.6245 108.593 44.6245C107.884 44.6245 107.349 44.8572 106.988 45.3225C106.627 45.7878 106.447 46.4814 106.447 47.4033ZM116.401 54.1937C115.988 54.1937 115.653 54.1393 115.396 54.0306V53.15C115.696 53.237 115.992 53.2804 116.284 53.2804C116.623 53.2804 116.871 53.187 117.027 53C117.188 52.8173 117.269 52.5368 117.269 52.1585V43.8352H118.351V52.0802C118.351 53.4892 117.701 54.1937 116.401 54.1937ZM117.177 41.8979C117.177 41.6501 117.238 41.4696 117.36 41.3565C117.482 41.2391 117.634 41.1804 117.816 41.1804C117.99 41.1804 118.14 41.2391 118.267 41.3565C118.393 41.4739 118.456 41.6544 118.456 41.8979C118.456 42.1415 118.393 42.3241 118.267 42.4459C118.14 42.5633 117.99 42.622 117.816 42.622C117.634 42.622 117.482 42.5633 117.36 42.4459C117.238 42.3241 117.177 42.1415 117.177 41.8979ZM126.818 47.4033C126.818 48.5687 126.525 49.4798 125.937 50.1364C125.35 50.7887 124.539 51.1148 123.504 51.1148C122.865 51.1148 122.298 50.9648 121.802 50.6648C121.306 50.3647 120.924 49.9342 120.654 49.3732C120.384 48.8122 120.249 48.1556 120.249 47.4033C120.249 46.2379 120.541 45.3312 121.124 44.6832C121.706 44.0309 122.515 43.7048 123.55 43.7048C124.55 43.7048 125.344 44.0375 125.931 44.7028C126.522 45.3681 126.818 46.2683 126.818 47.4033ZM121.371 47.4033C121.371 48.3165 121.554 49.0123 121.919 49.4906C122.285 49.969 122.822 50.2081 123.531 50.2081C124.239 50.2081 124.776 49.9711 125.142 49.4971C125.511 49.0188 125.696 48.3208 125.696 47.4033C125.696 46.4944 125.511 45.8052 125.142 45.3355C124.776 44.8615 124.235 44.6245 123.517 44.6245C122.809 44.6245 122.274 44.8572 121.913 45.3225C121.552 45.7878 121.371 46.4814 121.371 47.4033ZM129.806 50.9844H128.723V43.8352H129.806V50.9844ZM128.631 41.8979C128.631 41.6501 128.692 41.4696 128.814 41.3565C128.936 41.2391 129.088 41.1804 129.271 41.1804C129.445 41.1804 129.595 41.2391 129.721 41.3565C129.847 41.4739 129.91 41.6544 129.91 41.8979C129.91 42.1415 129.847 42.3241 129.721 42.4459C129.595 42.5633 129.445 42.622 129.271 42.622C129.088 42.622 128.936 42.5633 128.814 42.4459C128.692 42.3241 128.631 42.1415 128.631 41.8979ZM136.994 50.9844V46.3596C136.994 45.7769 136.861 45.342 136.596 45.055C136.331 44.768 135.915 44.6245 135.35 44.6245C134.602 44.6245 134.054 44.8267 133.706 45.2312C133.358 45.6356 133.184 46.3031 133.184 47.2337V50.9844H132.102V43.8352H132.982L133.158 44.8137H133.211C133.432 44.4614 133.743 44.1897 134.143 43.9983C134.543 43.8026 134.989 43.7048 135.481 43.7048C136.342 43.7048 136.99 43.9135 137.424 44.331C137.859 44.7441 138.077 45.4073 138.077 46.3205V50.9844H136.994ZM146.087 50.2212C146.278 50.2212 146.463 50.2081 146.641 50.1821C146.82 50.1516 146.961 50.1212 147.065 50.0907V50.9191C146.948 50.9757 146.774 51.0213 146.543 51.0561C146.317 51.0953 146.113 51.1148 145.93 51.1148C144.547 51.1148 143.856 50.3864 143.856 48.9297V44.6767H142.832V44.1549L143.856 43.7048L144.313 42.1784H144.939V43.8352H147.013V44.6767H144.939V48.884C144.939 49.3145 145.041 49.645 145.245 49.8755C145.45 50.106 145.73 50.2212 146.087 50.2212ZM153.392 50.9844V46.3596C153.392 45.7769 153.26 45.342 152.995 45.055C152.729 44.768 152.314 44.6245 151.749 44.6245C150.996 44.6245 150.446 44.8289 150.098 45.2377C149.755 45.6464 149.583 46.3161 149.583 47.2467V50.9844H148.5V40.8347H149.583V43.907C149.583 44.2766 149.566 44.5832 149.531 44.8267H149.596C149.809 44.4832 150.111 44.2136 150.503 44.0179C150.899 43.8179 151.349 43.7178 151.853 43.7178C152.727 43.7178 153.382 43.9266 153.816 44.344C154.256 44.7572 154.475 45.416 154.475 46.3205V50.9844H153.392ZM159.726 51.1148C158.67 51.1148 157.835 50.793 157.221 50.1494C156.613 49.5058 156.308 48.6122 156.308 47.4685C156.308 46.3161 156.591 45.4007 157.156 44.7224C157.726 44.044 158.489 43.7048 159.446 43.7048C160.342 43.7048 161.05 44.0005 161.572 44.5919C162.094 45.179 162.355 45.9552 162.355 46.9206V47.6055H157.43C157.452 48.4448 157.663 49.0819 158.063 49.5167C158.467 49.9516 159.035 50.169 159.765 50.169C160.535 50.169 161.296 50.0081 162.048 49.6863V50.6517C161.666 50.817 161.303 50.9344 160.959 51.0039C160.62 51.0779 160.209 51.1148 159.726 51.1148ZM159.433 44.6115C158.859 44.6115 158.4 44.7985 158.056 45.1724C157.717 45.5464 157.517 46.0639 157.456 46.7249H161.194C161.194 46.0422 161.042 45.5203 160.737 45.1594C160.433 44.7941 159.998 44.6115 159.433 44.6115ZM170.776 50.9844H169.667V42.4328H166.647V41.4479H173.796V42.4328H170.776V50.9844ZM181.245 47.4033C181.245 48.5687 180.952 49.4798 180.365 50.1364C179.778 50.7887 178.967 51.1148 177.932 51.1148C177.293 51.1148 176.725 50.9648 176.229 50.6648C175.734 50.3647 175.351 49.9342 175.081 49.3732C174.812 48.8122 174.677 48.1556 174.677 47.4033C174.677 46.2379 174.968 45.3312 175.551 44.6832C176.134 44.0309 176.942 43.7048 177.977 43.7048C178.978 43.7048 179.771 44.0375 180.358 44.7028C180.95 45.3681 181.245 46.2683 181.245 47.4033ZM175.799 47.4033C175.799 48.3165 175.981 49.0123 176.347 49.4906C176.712 49.969 177.249 50.2081 177.958 50.2081C178.667 50.2081 179.204 49.9711 179.569 49.4971C179.939 49.0188 180.123 48.3208 180.123 47.4033C180.123 46.4944 179.939 45.8052 179.569 45.3355C179.204 44.8615 178.662 44.6245 177.945 44.6245C177.236 44.6245 176.701 44.8572 176.34 45.3225C175.979 45.7878 175.799 46.4814 175.799 47.4033ZM184.22 47.325C184.407 47.0597 184.692 46.7119 185.074 46.2813L187.383 43.8352H188.668L185.772 46.8815L188.871 50.9844H187.56L185.035 47.6055L184.22 48.31V50.9844H183.15V40.8347H184.22V46.2161C184.22 46.4553 184.202 46.8249 184.168 47.325H184.22ZM193.189 51.1148C192.132 51.1148 191.297 50.793 190.684 50.1494C190.075 49.5058 189.771 48.6122 189.771 47.4685C189.771 46.3161 190.054 45.4007 190.619 44.7224C191.189 44.044 191.952 43.7048 192.908 43.7048C193.804 43.7048 194.513 44.0005 195.035 44.5919C195.557 45.179 195.818 45.9552 195.818 46.9206V47.6055H190.893C190.915 48.4448 191.125 49.0819 191.526 49.5167C191.93 49.9516 192.497 50.169 193.228 50.169C193.998 50.169 194.759 50.0081 195.511 49.6863V50.6517C195.128 50.817 194.765 50.9344 194.422 51.0039C194.083 51.0779 193.672 51.1148 193.189 51.1148ZM192.895 44.6115C192.321 44.6115 191.863 44.7985 191.519 45.1724C191.18 45.5464 190.98 46.0639 190.919 46.7249H194.657C194.657 46.0422 194.504 45.5203 194.2 45.1594C193.896 44.7941 193.461 44.6115 192.895 44.6115ZM202.562 50.9844V46.3596C202.562 45.7769 202.43 45.342 202.164 45.055C201.899 44.768 201.484 44.6245 200.919 44.6245C200.171 44.6245 199.623 44.8267 199.275 45.2312C198.927 45.6356 198.753 46.3031 198.753 47.2337V50.9844H197.67V43.8352H198.551L198.727 44.8137H198.779C199.001 44.4614 199.312 44.1897 199.712 43.9983C200.112 43.8026 200.558 43.7048 201.049 43.7048C201.91 43.7048 202.558 43.9135 202.993 44.331C203.428 44.7441 203.645 45.4073 203.645 46.3205V50.9844H202.562ZM209.509 50.9844V41.4479H210.618V49.9798H214.825V50.9844H209.509ZM217.369 50.9844H216.287V43.8352H217.369V50.9844ZM216.195 41.8979C216.195 41.6501 216.256 41.4696 216.378 41.3565C216.5 41.2391 216.652 41.1804 216.835 41.1804C217.008 41.1804 217.158 41.2391 217.285 41.3565C217.411 41.4739 217.474 41.6544 217.474 41.8979C217.474 42.1415 217.411 42.3241 217.285 42.4459C217.158 42.5633 217.008 42.622 216.835 42.622C216.652 42.622 216.5 42.5633 216.378 42.4459C216.256 42.3241 216.195 42.1415 216.195 41.8979ZM224.277 49.034C224.277 49.6994 224.029 50.2125 223.534 50.5734C223.038 50.9344 222.342 51.1148 221.446 51.1148C220.498 51.1148 219.759 50.9648 219.228 50.6648V49.6602C219.572 49.8342 219.939 49.9711 220.331 50.0712C220.727 50.1712 221.107 50.2212 221.472 50.2212C222.038 50.2212 222.472 50.132 222.777 49.9538C223.081 49.7711 223.233 49.495 223.233 49.1253C223.233 48.847 223.112 48.61 222.868 48.4143C222.629 48.2143 222.159 47.9795 221.459 47.7099C220.794 47.462 220.32 47.2467 220.037 47.0641C219.759 46.8771 219.55 46.6662 219.411 46.4314C219.276 46.1965 219.209 45.9161 219.209 45.5899C219.209 45.0072 219.446 44.5484 219.92 44.2136C220.394 43.8744 221.044 43.7048 221.87 43.7048C222.64 43.7048 223.392 43.8613 224.127 44.1744L223.742 45.055C223.025 44.7593 222.375 44.6115 221.792 44.6115C221.279 44.6115 220.892 44.6919 220.631 44.8528C220.37 45.0137 220.239 45.2355 220.239 45.5182C220.239 45.7095 220.287 45.8726 220.383 46.0074C220.483 46.1422 220.642 46.2705 220.859 46.3922C221.077 46.514 221.494 46.6901 222.112 46.9206C222.96 47.2293 223.531 47.5403 223.827 47.8534C224.127 48.1665 224.277 48.56 224.277 49.034ZM228.354 50.2212C228.545 50.2212 228.73 50.2081 228.908 50.1821C229.087 50.1516 229.228 50.1212 229.332 50.0907V50.9191C229.215 50.9757 229.041 51.0213 228.811 51.0561C228.584 51.0953 228.38 51.1148 228.197 51.1148C226.815 51.1148 226.123 50.3864 226.123 48.9297V44.6767H225.099V44.1549L226.123 43.7048L226.58 42.1784H227.206V43.8352H229.28V44.6767H227.206V48.884C227.206 49.3145 227.308 49.645 227.513 49.8755C227.717 50.106 227.997 50.2212 228.354 50.2212ZM231.85 50.9844H230.767V43.8352H231.85V50.9844ZM230.676 41.8979C230.676 41.6501 230.737 41.4696 230.859 41.3565C230.981 41.2391 231.133 41.1804 231.315 41.1804C231.489 41.1804 231.639 41.2391 231.765 41.3565C231.892 41.4739 231.955 41.6544 231.955 41.8979C231.955 42.1415 231.892 42.3241 231.765 42.4459C231.639 42.5633 231.489 42.622 231.315 42.622C231.133 42.622 230.981 42.5633 230.859 42.4459C230.737 42.3241 230.676 42.1415 230.676 41.8979ZM239.039 50.9844V46.3596C239.039 45.7769 238.906 45.342 238.641 45.055C238.375 44.768 237.96 44.6245 237.395 44.6245C236.647 44.6245 236.099 44.8267 235.751 45.2312C235.403 45.6356 235.229 46.3031 235.229 47.2337V50.9844H234.146V43.8352H235.027L235.203 44.8137H235.255C235.477 44.4614 235.788 44.1897 236.188 43.9983C236.588 43.8026 237.034 43.7048 237.525 43.7048C238.386 43.7048 239.034 43.9135 239.469 44.331C239.904 44.7441 240.121 45.4073 240.121 46.3205V50.9844H239.039ZM248.203 43.8352V44.5202L246.879 44.6767C247.001 44.8289 247.11 45.0289 247.205 45.2768C247.301 45.5203 247.349 45.7965 247.349 46.1052C247.349 46.8054 247.11 47.3641 246.631 47.7816C246.153 48.1991 245.496 48.4078 244.661 48.4078C244.448 48.4078 244.248 48.3904 244.061 48.3556C243.6 48.5992 243.37 48.9057 243.37 49.2754C243.37 49.4711 243.45 49.6167 243.611 49.7124C243.772 49.8037 244.048 49.8494 244.44 49.8494H245.705C246.479 49.8494 247.073 50.0125 247.486 50.3386C247.903 50.6648 248.112 51.1388 248.112 51.7606C248.112 52.5521 247.794 53.1543 247.16 53.5675C246.525 53.9849 245.598 54.1937 244.381 54.1937C243.446 54.1937 242.724 54.0197 242.215 53.6718C241.711 53.3239 241.459 52.8325 241.459 52.1976C241.459 51.7628 241.598 51.3866 241.876 51.0692C242.154 50.7517 242.546 50.5365 243.05 50.4234C242.868 50.3408 242.713 50.2125 242.587 50.0386C242.465 49.8646 242.404 49.6624 242.404 49.4319C242.404 49.171 242.474 48.9427 242.613 48.747C242.752 48.5513 242.972 48.3622 243.272 48.1795C242.902 48.0273 242.6 47.7686 242.365 47.4033C242.135 47.038 242.02 46.6205 242.02 46.1509C242.02 45.3681 242.254 44.7658 242.724 44.344C243.194 43.9179 243.859 43.7048 244.72 43.7048C245.094 43.7048 245.431 43.7483 245.731 43.8352H248.203ZM242.502 52.1846C242.502 52.5716 242.665 52.8652 242.991 53.0652C243.318 53.2652 243.785 53.3652 244.394 53.3652C245.303 53.3652 245.975 53.2283 246.409 52.9543C246.849 52.6847 247.068 52.3172 247.068 51.8519C247.068 51.4649 246.949 51.1953 246.71 51.0431C246.47 50.8952 246.02 50.8213 245.359 50.8213H244.061C243.57 50.8213 243.187 50.9387 242.913 51.1735C242.639 51.4084 242.502 51.7454 242.502 52.1846ZM243.089 46.1248C243.089 46.6249 243.231 47.0032 243.513 47.2598C243.796 47.5164 244.189 47.6446 244.694 47.6446C245.751 47.6446 246.279 47.1315 246.279 46.1052C246.279 45.0311 245.744 44.4941 244.674 44.4941C244.166 44.4941 243.774 44.631 243.5 44.905C243.226 45.179 243.089 45.5856 243.089 46.1248ZM255.998 51.1148C254.963 51.1148 254.161 50.7974 253.591 50.1625C253.026 49.5232 252.743 48.6209 252.743 47.4555C252.743 46.2596 253.03 45.3355 253.604 44.6832C254.183 44.0309 255.005 43.7048 256.07 43.7048C256.413 43.7048 256.757 43.7417 257.101 43.8157C257.444 43.8896 257.714 43.9766 257.909 44.0766L257.577 44.9963C257.338 44.9007 257.077 44.8224 256.794 44.7615C256.511 44.6963 256.261 44.6637 256.044 44.6637C254.591 44.6637 253.865 45.5899 253.865 47.4424C253.865 48.3208 254.041 48.9949 254.394 49.4645C254.75 49.9342 255.276 50.169 255.972 50.169C256.568 50.169 257.179 50.0407 257.805 49.7842V50.743C257.327 50.9909 256.724 51.1148 255.998 51.1148ZM265.678 47.4033C265.678 48.5687 265.385 49.4798 264.798 50.1364C264.211 50.7887 263.4 51.1148 262.365 51.1148C261.725 51.1148 261.158 50.9648 260.662 50.6648C260.166 50.3647 259.784 49.9342 259.514 49.3732C259.244 48.8122 259.11 48.1556 259.11 47.4033C259.11 46.2379 259.401 45.3312 259.984 44.6832C260.566 44.0309 261.375 43.7048 262.41 43.7048C263.41 43.7048 264.204 44.0375 264.791 44.7028C265.382 45.3681 265.678 46.2683 265.678 47.4033ZM260.232 47.4033C260.232 48.3165 260.414 49.0123 260.779 49.4906C261.145 49.969 261.682 50.2081 262.391 50.2081C263.099 50.2081 263.637 49.9711 264.002 49.4971C264.371 49.0188 264.556 48.3208 264.556 47.4033C264.556 46.4944 264.371 45.8052 264.002 45.3355C263.637 44.8615 263.095 44.6245 262.378 44.6245C261.669 44.6245 261.134 44.8572 260.773 45.3225C260.412 45.7878 260.232 46.4814 260.232 47.4033ZM268.6 43.8352V48.473C268.6 49.0558 268.733 49.4906 268.998 49.7776C269.264 50.0646 269.679 50.2081 270.244 50.2081C270.992 50.2081 271.538 50.0038 271.882 49.595C272.229 49.1862 272.403 48.5187 272.403 47.5925V43.8352H273.486V50.9844H272.593L272.436 50.0255H272.377C272.155 50.3777 271.847 50.6474 271.451 50.8343C271.06 51.0213 270.612 51.1148 270.107 51.1148C269.238 51.1148 268.585 50.9083 268.15 50.4952C267.72 50.082 267.505 49.421 267.505 48.5122V43.8352H268.6ZM279.05 43.7048C279.368 43.7048 279.652 43.7309 279.905 43.7831L279.755 44.7876C279.459 44.7224 279.198 44.6897 278.972 44.6897C278.394 44.6897 277.898 44.9246 277.485 45.3942C277.076 45.8639 276.872 46.4488 276.872 47.1489V50.9844H275.789V43.8352H276.682L276.806 45.1594H276.858C277.124 44.6941 277.443 44.3353 277.817 44.0831C278.191 43.8309 278.602 43.7048 279.05 43.7048ZM283.551 50.2212C283.742 50.2212 283.927 50.2081 284.105 50.1821C284.284 50.1516 284.425 50.1212 284.529 50.0907V50.9191C284.412 50.9757 284.238 51.0213 284.008 51.0561C283.782 51.0953 283.577 51.1148 283.394 51.1148C282.012 51.1148 281.32 50.3864 281.32 48.9297V44.6767H280.296V44.1549L281.32 43.7048L281.777 42.1784H282.403V43.8352H284.477V44.6767H282.403V48.884C282.403 49.3145 282.505 49.645 282.71 49.8755C282.914 50.106 283.194 50.2212 283.551 50.2212Z" class="path-4"/> -<g clip-path="url(#clip0_13917_210903)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M33.1502 149.949L39.0276 150.212L41.4071 155.5L38.05 160.333L32.1407 159.955L29.718 154.225L33.1502 149.949ZM37.4591 152.997L33.1995 154.859L36.8412 157.675L37.4591 152.997ZM36.9659 152.065L33.5618 150.599L32.8468 153.681L36.9659 152.065ZM36.1031 158.384L32.4035 155.741L32.493 159.322L36.1031 158.384ZM40.8162 155.488L38.2951 152.93L37.6297 157.85L40.8162 155.488ZM36.9705 158.959L33.8504 159.775L37.5196 160.01L36.9705 158.959ZM40.3235 156.649L37.5923 158.684L38.135 159.745L40.3235 156.649ZM39.0316 150.951L38.5011 152.04L40.4757 154.048L39.0316 150.951ZM38.3707 150.43L34.9033 150.289L37.7635 151.54L38.3707 150.43ZM32.6438 150.933L30.2152 154.001L31.8389 154.345L32.6438 150.933ZM31.741 154.946L30.1094 154.601L31.8119 158.612L31.741 154.946Z" class="path-5"/> -</g> -<path d="M52.9267 160.062L50.0957 152.665H50.0501C50.1033 153.251 50.13 153.948 50.13 154.754V160.062H49.2339V151.718H50.695L53.3376 158.601H53.3833L56.0487 151.718H57.4984V160.062H56.5282V154.686C56.5282 154.07 56.5548 153.4 56.6081 152.677H56.5624L53.7086 160.062H52.9267ZM58.6571 153.807H59.673L61.0428 157.374C61.3434 158.189 61.5299 158.776 61.6022 159.138H61.6478C61.6973 158.944 61.8 158.613 61.956 158.145C62.1159 157.673 62.6333 156.227 63.5085 153.807H64.5245L61.8362 160.93C61.5698 161.634 61.2578 162.132 60.9001 162.425C60.5463 162.722 60.1106 162.871 59.5931 162.871C59.3039 162.871 59.0186 162.838 58.737 162.774V162.014C58.9463 162.06 59.1803 162.083 59.439 162.083C60.0897 162.083 60.5539 161.718 60.8317 160.987L61.1798 160.097L58.6571 153.807ZM73.4282 157.842C73.4282 158.577 73.1619 159.149 72.6292 159.56C72.0965 159.971 71.3735 160.177 70.4603 160.177C69.471 160.177 68.71 160.049 68.1773 159.794V158.858C68.5197 159.003 68.8926 159.117 69.296 159.201C69.6993 159.284 70.0988 159.326 70.4946 159.326C71.1414 159.326 71.6285 159.204 71.9557 158.961C72.2829 158.714 72.4465 158.371 72.4465 157.934C72.4465 157.644 72.3876 157.408 72.2696 157.226C72.1555 157.039 71.9614 156.868 71.6874 156.712C71.4173 156.556 71.0044 156.379 70.4489 156.181C69.6727 155.904 69.1171 155.574 68.7823 155.194C68.4513 154.813 68.2857 154.317 68.2857 153.704C68.2857 153.061 68.5274 152.549 69.0106 152.169C69.4938 151.788 70.1331 151.598 70.9283 151.598C71.7578 151.598 72.5207 151.75 73.2171 152.055L72.9146 152.9C72.2259 152.61 71.5562 152.466 70.9055 152.466C70.3918 152.466 69.9904 152.576 69.7012 152.797C69.412 153.017 69.2674 153.324 69.2674 153.716C69.2674 154.005 69.3207 154.243 69.4272 154.429C69.5338 154.612 69.7126 154.781 69.9638 154.937C70.2187 155.089 70.6068 155.259 71.1281 155.445C72.0033 155.757 72.6045 156.092 72.9317 156.45C73.2627 156.807 73.4282 157.272 73.4282 157.842ZM77.0126 159.395C77.18 159.395 77.3417 159.383 77.4977 159.36C77.6537 159.334 77.7774 159.307 77.8687 159.281V160.005C77.766 160.055 77.6138 160.095 77.4121 160.125C77.2143 160.16 77.0354 160.177 76.8756 160.177C75.6656 160.177 75.0606 159.539 75.0606 158.265V154.543H74.1645V154.087L75.0606 153.693L75.4601 152.357H76.0081V153.807H77.8231V154.543H76.0081V158.225C76.0081 158.601 76.0975 158.891 76.2763 159.092C76.4552 159.294 76.7006 159.395 77.0126 159.395ZM82.9713 160.062L82.7829 159.172H82.7373C82.4253 159.564 82.1133 159.83 81.8012 159.971C81.493 160.108 81.1068 160.177 80.6426 160.177C80.0224 160.177 79.5353 160.017 79.1815 159.697C78.8314 159.378 78.6564 158.923 78.6564 158.333C78.6564 157.07 79.6666 156.408 81.6871 156.347L82.7487 156.313V155.925C82.7487 155.434 82.6422 155.072 82.4291 154.84C82.2198 154.604 81.8831 154.486 81.4188 154.486C80.8975 154.486 80.3078 154.646 79.6495 154.966L79.3584 154.241C79.6666 154.073 80.0034 153.942 80.3686 153.847C80.7377 153.752 81.1068 153.704 81.4759 153.704C82.2217 153.704 82.7734 153.87 83.1311 154.201C83.4926 154.532 83.6733 155.063 83.6733 155.793V160.062H82.9713ZM80.831 159.395C81.4207 159.395 81.8831 159.233 82.2179 158.91C82.5565 158.586 82.7259 158.133 82.7259 157.551V156.986L81.7784 157.026C81.025 157.053 80.4809 157.171 80.1461 157.38C79.815 157.585 79.6495 157.907 79.6495 158.345C79.6495 158.687 79.7522 158.948 79.9577 159.126C80.167 159.305 80.4581 159.395 80.831 159.395ZM86.5671 156.861C86.7307 156.628 86.9799 156.324 87.3147 155.947L89.3352 153.807H90.4596L87.9255 156.472L90.6366 160.062H89.4893L87.2805 157.106L86.5671 157.722V160.062H85.631V151.182H86.5671V155.89C86.5671 156.1 86.5518 156.423 86.5214 156.861H86.5671ZM94.415 160.177C93.4903 160.177 92.7598 159.895 92.2233 159.332C91.6905 158.769 91.4242 157.987 91.4242 156.986C91.4242 155.978 91.6715 155.177 92.1662 154.583C92.6646 153.99 93.3324 153.693 94.1695 153.693C94.9534 153.693 95.5736 153.952 96.0302 154.469C96.4868 154.983 96.7151 155.662 96.7151 156.507V157.106H92.4059C92.4249 157.84 92.6095 158.398 92.9595 158.778C93.3134 159.159 93.81 159.349 94.4492 159.349C95.1227 159.349 95.7886 159.208 96.4469 158.927V159.771C96.112 159.916 95.7943 160.019 95.4937 160.08C95.1969 160.144 94.8373 160.177 94.415 160.177ZM94.1581 154.486C93.6559 154.486 93.2544 154.65 92.9538 154.977C92.657 155.304 92.482 155.757 92.4287 156.335H95.6992C95.6992 155.738 95.566 155.281 95.2996 154.966C95.0333 154.646 94.6528 154.486 94.1581 154.486ZM98.1991 159.457C98.1991 159.203 98.2561 159.01 98.3703 158.881C98.4883 158.748 98.6557 158.681 98.8726 158.681C99.0933 158.681 99.2645 158.748 99.3862 158.881C99.5118 159.01 99.5746 159.203 99.5746 159.457C99.5746 159.705 99.5118 159.895 99.3862 160.028C99.2607 160.161 99.0895 160.228 98.8726 160.228C98.6785 160.228 98.5168 160.169 98.3874 160.051C98.2619 159.929 98.1991 159.731 98.1991 159.457ZM98.1991 154.418C98.1991 153.904 98.4236 153.647 98.8726 153.647C99.3406 153.647 99.5746 153.904 99.5746 154.418C99.5746 154.665 99.5118 154.855 99.3862 154.988C99.2607 155.122 99.0895 155.188 98.8726 155.188C98.6785 155.188 98.5168 155.129 98.3874 155.011C98.2619 154.89 98.1991 154.692 98.1991 154.418Z" class="path-6"/> -<path d="M112.841 160.062H111.5V154.675C111.5 154.032 111.515 153.522 111.546 153.145C111.458 153.236 111.35 153.337 111.22 153.447C111.095 153.558 110.669 153.908 109.942 154.498L109.268 153.647L111.723 151.718H112.841V160.062ZM121.237 155.89C121.237 157.34 121.003 158.417 120.535 159.121C120.071 159.825 119.359 160.177 118.4 160.177C117.472 160.177 116.768 159.813 116.289 159.087C115.809 158.36 115.569 157.294 115.569 155.89C115.569 154.418 115.802 153.333 116.266 152.637C116.734 151.937 117.445 151.587 118.4 151.587C119.333 151.587 120.038 151.952 120.518 152.683C120.997 153.413 121.237 154.482 121.237 155.89ZM116.928 155.89C116.928 157.028 117.044 157.84 117.276 158.327C117.512 158.814 117.887 159.058 118.4 159.058C118.914 159.058 119.289 158.811 119.525 158.316C119.765 157.821 119.884 157.013 119.884 155.89C119.884 154.772 119.765 153.963 119.525 153.465C119.289 152.962 118.914 152.711 118.4 152.711C117.887 152.711 117.512 152.957 117.276 153.447C117.044 153.938 116.928 154.753 116.928 155.89ZM124.097 158.835C123.914 159.543 123.579 160.454 123.092 161.569H122.105C122.367 160.542 122.563 159.587 122.692 158.704H124.011L124.097 158.835ZM131.043 155.89C131.043 157.34 130.809 158.417 130.341 159.121C129.876 159.825 129.165 160.177 128.206 160.177C127.278 160.177 126.574 159.813 126.094 159.087C125.615 158.36 125.375 157.294 125.375 155.89C125.375 154.418 125.607 153.333 126.071 152.637C126.539 151.937 127.251 151.587 128.206 151.587C129.138 151.587 129.844 151.952 130.324 152.683C130.803 153.413 131.043 154.482 131.043 155.89ZM126.733 155.89C126.733 157.028 126.849 157.84 127.082 158.327C127.318 158.814 127.692 159.058 128.206 159.058C128.72 159.058 129.094 158.811 129.33 158.316C129.57 157.821 129.69 157.013 129.69 155.89C129.69 154.772 129.57 153.963 129.33 153.465C129.094 152.962 128.72 152.711 128.206 152.711C127.692 152.711 127.318 152.957 127.082 153.447C126.849 153.938 126.733 154.753 126.733 155.89ZM137.721 155.89C137.721 157.34 137.486 158.417 137.018 159.121C136.554 159.825 135.843 160.177 134.884 160.177C133.955 160.177 133.251 159.813 132.772 159.087C132.293 158.36 132.053 157.294 132.053 155.89C132.053 154.418 132.285 153.333 132.749 152.637C133.217 151.937 133.929 151.587 134.884 151.587C135.816 151.587 136.522 151.952 137.001 152.683C137.481 153.413 137.721 154.482 137.721 155.89ZM133.411 155.89C133.411 157.028 133.527 157.84 133.759 158.327C133.995 158.814 134.37 159.058 134.884 159.058C135.398 159.058 135.772 158.811 136.008 158.316C136.248 157.821 136.368 157.013 136.368 155.89C136.368 154.772 136.248 153.963 136.008 153.465C135.772 152.962 135.398 152.711 134.884 152.711C134.37 152.711 133.995 152.957 133.759 153.447C133.527 153.938 133.411 154.753 133.411 155.89ZM144.398 155.89C144.398 157.34 144.164 158.417 143.696 159.121C143.232 159.825 142.521 160.177 141.562 160.177C140.633 160.177 139.929 159.813 139.45 159.087C138.97 158.36 138.731 157.294 138.731 155.89C138.731 154.418 138.963 153.333 139.427 152.637C139.895 151.937 140.607 151.587 141.562 151.587C142.494 151.587 143.2 151.952 143.679 152.683C144.159 153.413 144.398 154.482 144.398 155.89ZM140.089 155.89C140.089 157.028 140.205 157.84 140.437 158.327C140.673 158.814 141.048 159.058 141.562 159.058C142.075 159.058 142.45 158.811 142.686 158.316C142.926 157.821 143.046 157.013 143.046 155.89C143.046 154.772 142.926 153.963 142.686 153.465C142.45 152.962 142.075 152.711 141.562 152.711C141.048 152.711 140.673 152.957 140.437 153.447C140.205 153.938 140.089 154.753 140.089 155.89ZM154.569 154.241C154.569 155.112 154.284 155.78 153.713 156.244C153.142 156.708 152.33 156.94 151.276 156.94H150.408V160.062H149.044V151.718H151.447C152.49 151.718 153.27 151.931 153.787 152.357C154.309 152.783 154.569 153.411 154.569 154.241ZM150.408 155.793H151.133C151.833 155.793 152.347 155.671 152.674 155.428C153.002 155.184 153.165 154.804 153.165 154.286C153.165 153.807 153.019 153.449 152.726 153.213C152.433 152.978 151.976 152.86 151.356 152.86H150.408V155.793ZM163.188 160.062H161.515L157.412 153.413H157.366L157.394 153.784C157.448 154.492 157.474 155.139 157.474 155.725V160.062H156.236V151.718H157.891L161.983 158.333H162.018C162.01 158.246 161.995 157.928 161.972 157.38C161.949 156.828 161.938 156.398 161.938 156.09V151.718H163.188V160.062ZM171.76 160.062H170.179L167.56 156.284L166.755 156.94V160.062H165.391V151.718H166.755V155.702C167.128 155.245 167.499 154.806 167.868 154.383L170.122 151.718H171.675C170.217 153.43 169.173 154.65 168.541 155.377L171.76 160.062Z" class="path-7"/> -<g clip-path="url(#clip1_13917_210903)"> -<path d="M208.259 154.333H207.717V152.689C207.717 150.776 206.175 149.219 204.28 149.219C202.385 149.219 200.842 150.776 200.842 152.689V154.333H200.3C199.701 154.333 199.214 154.824 199.214 155.429V159.812C199.214 160.417 199.701 160.908 200.3 160.908H208.259C208.859 160.908 209.345 160.417 209.345 159.812V155.429C209.345 154.824 208.859 154.333 208.259 154.333ZM205.908 154.333H202.652V152.689C202.652 151.783 203.382 151.045 204.28 151.045C205.177 151.045 205.908 151.783 205.908 152.689V154.333Z" class="path-8"/> -</g> -<path d="M218 160.062V151.718H218.97V159.184H222.651V160.062H218ZM229.329 156.929C229.329 157.949 229.072 158.746 228.559 159.321C228.045 159.891 227.335 160.177 226.43 160.177C225.87 160.177 225.374 160.045 224.94 159.783C224.506 159.52 224.172 159.144 223.936 158.653C223.7 158.162 223.582 157.587 223.582 156.929C223.582 155.909 223.837 155.116 224.347 154.549C224.856 153.978 225.564 153.693 226.47 153.693C227.345 153.693 228.039 153.984 228.553 154.566C229.071 155.148 229.329 155.936 229.329 156.929ZM224.563 156.929C224.563 157.728 224.723 158.337 225.043 158.755C225.363 159.174 225.832 159.383 226.453 159.383C227.073 159.383 227.543 159.176 227.862 158.761C228.186 158.343 228.348 157.732 228.348 156.929C228.348 156.134 228.186 155.531 227.862 155.12C227.543 154.705 227.069 154.498 226.441 154.498C225.821 154.498 225.353 154.701 225.037 155.108C224.721 155.515 224.563 156.122 224.563 156.929ZM233.496 160.177C232.59 160.177 231.888 159.899 231.39 159.343C230.895 158.784 230.648 157.994 230.648 156.975C230.648 155.928 230.899 155.12 231.401 154.549C231.907 153.978 232.626 153.693 233.559 153.693C233.859 153.693 234.16 153.725 234.46 153.79C234.761 153.855 234.997 153.931 235.168 154.018L234.877 154.823C234.668 154.739 234.439 154.671 234.192 154.617C233.945 154.56 233.726 154.532 233.536 154.532C232.265 154.532 231.629 155.342 231.629 156.963C231.629 157.732 231.784 158.322 232.092 158.733C232.404 159.144 232.864 159.349 233.473 159.349C233.994 159.349 234.529 159.237 235.077 159.012V159.851C234.658 160.068 234.131 160.177 233.496 160.177ZM237.503 156.861C237.666 156.628 237.915 156.324 238.25 155.947L240.271 153.807H241.395L238.861 156.472L241.572 160.062H240.425L238.216 157.106L237.503 157.722V160.062H236.566V151.182H237.503V155.89C237.503 156.1 237.487 156.423 237.457 156.861H237.503ZM245.35 160.177C244.426 160.177 243.695 159.895 243.159 159.332C242.626 158.769 242.36 157.987 242.36 156.986C242.36 155.978 242.607 155.177 243.102 154.583C243.6 153.99 244.268 153.693 245.105 153.693C245.889 153.693 246.509 153.952 246.966 154.469C247.422 154.983 247.651 155.662 247.651 156.507V157.106H243.341C243.36 157.84 243.545 158.398 243.895 158.778C244.249 159.159 244.745 159.349 245.385 159.349C246.058 159.349 246.724 159.208 247.382 158.927V159.771C247.047 159.916 246.73 160.019 246.429 160.08C246.132 160.144 245.773 160.177 245.35 160.177ZM245.094 154.486C244.591 154.486 244.19 154.65 243.889 154.977C243.592 155.304 243.417 155.757 243.364 156.335H246.635C246.635 155.738 246.501 155.281 246.235 154.966C245.969 154.646 245.588 154.486 245.094 154.486ZM253.529 159.223H253.478C253.04 159.859 252.386 160.177 251.515 160.177C250.696 160.177 250.059 159.897 249.603 159.338C249.15 158.778 248.923 157.983 248.923 156.952C248.923 155.921 249.152 155.12 249.608 154.549C250.065 153.978 250.7 153.693 251.515 153.693C252.363 153.693 253.014 154.001 253.467 154.617H253.541L253.501 154.167L253.478 153.727V151.182H254.425V160.062H253.655L253.529 159.223ZM251.634 159.383C252.281 159.383 252.749 159.208 253.038 158.858C253.331 158.504 253.478 157.935 253.478 157.152V156.952C253.478 156.065 253.33 155.434 253.033 155.057C252.74 154.676 252.27 154.486 251.623 154.486C251.067 154.486 250.641 154.703 250.345 155.137C250.052 155.567 249.905 156.176 249.905 156.963C249.905 157.762 250.052 158.365 250.345 158.773C250.638 159.18 251.067 159.383 251.634 159.383ZM264.328 157.842C264.328 158.577 264.062 159.149 263.529 159.56C262.996 159.971 262.273 160.177 261.36 160.177C260.371 160.177 259.61 160.049 259.077 159.794V158.858C259.42 159.003 259.792 159.117 260.196 159.201C260.599 159.284 260.999 159.326 261.394 159.326C262.041 159.326 262.528 159.204 262.855 158.961C263.183 158.714 263.346 158.371 263.346 157.934C263.346 157.644 263.287 157.408 263.169 157.226C263.055 157.039 262.861 156.868 262.587 156.712C262.317 156.556 261.904 156.379 261.349 156.181C260.572 155.904 260.017 155.574 259.682 155.194C259.351 154.813 259.186 154.317 259.186 153.704C259.186 153.061 259.427 152.549 259.91 152.169C260.394 151.788 261.033 151.598 261.828 151.598C262.658 151.598 263.421 151.75 264.117 152.055L263.814 152.9C263.126 152.61 262.456 152.466 261.805 152.466C261.292 152.466 260.89 152.576 260.601 152.797C260.312 153.017 260.167 153.324 260.167 153.716C260.167 154.005 260.221 154.243 260.327 154.429C260.434 154.612 260.612 154.781 260.864 154.937C261.118 155.089 261.507 155.259 262.028 155.445C262.903 155.757 263.504 156.092 263.831 156.45C264.163 156.807 264.328 157.272 264.328 157.842ZM267.912 159.395C268.08 159.395 268.242 159.383 268.398 159.36C268.554 159.334 268.677 159.307 268.769 159.281V160.005C268.666 160.055 268.514 160.095 268.312 160.125C268.114 160.16 267.935 160.177 267.775 160.177C266.565 160.177 265.96 159.539 265.96 158.265V154.543H265.064V154.087L265.96 153.693L266.36 152.357H266.908V153.807H268.723V154.543H266.908V158.225C266.908 158.601 266.997 158.891 267.176 159.092C267.355 159.294 267.6 159.395 267.912 159.395ZM273.871 160.062L273.683 159.172H273.637C273.325 159.564 273.013 159.83 272.701 159.971C272.393 160.108 272.007 160.177 271.542 160.177C270.922 160.177 270.435 160.017 270.081 159.697C269.731 159.378 269.556 158.923 269.556 158.333C269.556 157.07 270.566 156.408 272.587 156.347L273.648 156.313V155.925C273.648 155.434 273.542 155.072 273.329 154.84C273.12 154.604 272.783 154.486 272.319 154.486C271.797 154.486 271.208 154.646 270.549 154.966L270.258 154.241C270.566 154.073 270.903 153.942 271.268 153.847C271.638 153.752 272.007 153.704 272.376 153.704C273.121 153.704 273.673 153.87 274.031 154.201C274.392 154.532 274.573 155.063 274.573 155.793V160.062H273.871ZM271.731 159.395C272.321 159.395 272.783 159.233 273.118 158.91C273.456 158.586 273.626 158.133 273.626 157.551V156.986L272.678 157.026C271.925 157.053 271.381 157.171 271.046 157.38C270.715 157.585 270.549 157.907 270.549 158.345C270.549 158.687 270.652 158.948 270.858 159.126C271.067 159.305 271.358 159.395 271.731 159.395ZM277.467 156.861C277.63 156.628 277.88 156.324 278.215 155.947L280.235 153.807H281.359L278.825 156.472L281.536 160.062H280.389L278.18 157.106L277.467 157.722V160.062H276.531V151.182H277.467V155.89C277.467 156.1 277.452 156.423 277.421 156.861H277.467ZM285.315 160.177C284.39 160.177 283.66 159.895 283.123 159.332C282.59 158.769 282.324 157.987 282.324 156.986C282.324 155.978 282.571 155.177 283.066 154.583C283.564 153.99 284.232 153.693 285.069 153.693C285.853 153.693 286.473 153.952 286.93 154.469C287.387 154.983 287.615 155.662 287.615 156.507V157.106H283.306C283.325 157.84 283.509 158.398 283.859 158.778C284.213 159.159 284.71 159.349 285.349 159.349C286.022 159.349 286.688 159.208 287.347 158.927V159.771C287.012 159.916 286.694 160.019 286.393 160.08C286.097 160.144 285.737 160.177 285.315 160.177ZM285.058 154.486C284.556 154.486 284.154 154.65 283.854 154.977C283.557 155.304 283.382 155.757 283.329 156.335H286.599C286.599 155.738 286.466 155.281 286.199 154.966C285.933 154.646 285.553 154.486 285.058 154.486ZM289.099 159.457C289.099 159.203 289.156 159.01 289.27 158.881C289.388 158.748 289.555 158.681 289.772 158.681C289.993 158.681 290.164 158.748 290.286 158.881C290.412 159.01 290.474 159.203 290.474 159.457C290.474 159.705 290.412 159.895 290.286 160.028C290.16 160.161 289.989 160.228 289.772 160.228C289.578 160.228 289.417 160.169 289.287 160.051C289.162 159.929 289.099 159.731 289.099 159.457ZM289.099 154.418C289.099 153.904 289.323 153.647 289.772 153.647C290.24 153.647 290.474 153.904 290.474 154.418C290.474 154.665 290.412 154.855 290.286 154.988C290.16 155.122 289.989 155.188 289.772 155.188C289.578 155.188 289.417 155.129 289.287 155.011C289.162 154.89 289.099 154.692 289.099 154.418Z" class="path-9"/> -<path d="M304.495 153.636C304.495 154.165 304.341 154.606 304.032 154.96C303.724 155.31 303.29 155.546 302.731 155.668V155.713C303.401 155.797 303.903 156.006 304.238 156.341C304.573 156.672 304.74 157.114 304.74 157.665C304.74 158.468 304.457 159.088 303.89 159.526C303.323 159.96 302.516 160.177 301.47 160.177C300.545 160.177 299.765 160.026 299.129 159.726V158.533C299.483 158.708 299.858 158.843 300.254 158.938C300.65 159.033 301.03 159.081 301.395 159.081C302.042 159.081 302.525 158.961 302.845 158.721C303.165 158.482 303.325 158.111 303.325 157.608C303.325 157.163 303.148 156.836 302.794 156.627C302.44 156.417 301.884 156.313 301.127 156.313H300.402V155.222H301.139C302.47 155.222 303.136 154.762 303.136 153.841C303.136 153.484 303.02 153.208 302.788 153.014C302.556 152.82 302.213 152.723 301.761 152.723C301.445 152.723 301.14 152.768 300.847 152.86C300.554 152.947 300.208 153.12 299.809 153.379L299.152 152.443C299.917 151.88 300.806 151.598 301.818 151.598C302.659 151.598 303.315 151.779 303.787 152.14C304.259 152.502 304.495 153 304.495 153.636ZM311.486 155.89C311.486 157.34 311.252 158.417 310.784 159.121C310.32 159.825 309.609 160.177 308.65 160.177C307.721 160.177 307.017 159.813 306.538 159.087C306.058 158.36 305.819 157.294 305.819 155.89C305.819 154.418 306.051 153.333 306.515 152.637C306.983 151.937 307.695 151.587 308.65 151.587C309.582 151.587 310.288 151.952 310.767 152.683C311.247 153.413 311.486 154.482 311.486 155.89ZM307.177 155.89C307.177 157.028 307.293 157.84 307.525 158.327C307.761 158.814 308.136 159.058 308.65 159.058C309.163 159.058 309.538 158.811 309.774 158.316C310.014 157.821 310.134 157.013 310.134 155.89C310.134 154.772 310.014 153.963 309.774 153.465C309.538 152.962 309.163 152.711 308.65 152.711C308.136 152.711 307.761 152.957 307.525 153.447C307.293 153.938 307.177 154.753 307.177 155.89ZM318.164 155.89C318.164 157.34 317.93 158.417 317.462 159.121C316.998 159.825 316.286 160.177 315.328 160.177C314.399 160.177 313.695 159.813 313.216 159.087C312.736 158.36 312.497 157.294 312.497 155.89C312.497 154.418 312.729 153.333 313.193 152.637C313.661 151.937 314.372 151.587 315.328 151.587C316.26 151.587 316.966 151.952 317.445 152.683C317.925 153.413 318.164 154.482 318.164 155.89ZM313.855 155.89C313.855 157.028 313.971 157.84 314.203 158.327C314.439 158.814 314.814 159.058 315.328 159.058C315.841 159.058 316.216 158.811 316.452 158.316C316.692 157.821 316.812 157.013 316.812 155.89C316.812 154.772 316.692 153.963 316.452 153.465C316.216 152.962 315.841 152.711 315.328 152.711C314.814 152.711 314.439 152.957 314.203 153.447C313.971 153.938 313.855 154.753 313.855 155.89ZM328.335 154.241C328.335 155.112 328.05 155.78 327.479 156.244C326.908 156.708 326.096 156.94 325.042 156.94H324.174V160.062H322.81V151.718H325.213C326.256 151.718 327.036 151.931 327.553 152.357C328.074 152.783 328.335 153.411 328.335 154.241ZM324.174 155.793H324.899C325.599 155.793 326.113 155.671 326.44 155.428C326.767 155.184 326.931 154.804 326.931 154.286C326.931 153.807 326.785 153.449 326.492 153.213C326.199 152.978 325.742 152.86 325.122 152.86H324.174V155.793ZM336.954 160.062H335.281L331.177 153.413H331.132L331.16 153.784C331.214 154.492 331.24 155.139 331.24 155.725V160.062H330.002V151.718H331.657L335.749 158.333H335.783C335.776 158.246 335.761 157.928 335.738 157.38C335.715 156.828 335.704 156.398 335.704 156.09V151.718H336.954V160.062ZM345.526 160.062H343.945L341.326 156.284L340.521 156.94V160.062H339.157V151.718H340.521V155.702C340.894 155.245 341.265 154.806 341.634 154.383L343.888 151.718H345.441C343.983 153.43 342.939 154.65 342.307 155.377L345.526 160.062Z" class="path-10"/> -<defs> -<filter id="filter0_d_13917_210903" x="0.495195" y="0.165065" width="390.01" height="193.791" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> -<feFlood flood-opacity="0" result="BackgroundImageFix"/> -<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> -<feOffset dy="1.66987"/> -<feGaussianBlur stdDeviation="1.2524"/> -<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/> -<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_13917_210903"/> -<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_13917_210903" result="shape"/> -</filter> -<clipPath id="clip0_13917_210903"> -<rect width="11.6891" height="11.6891" transform="translate(29.718 149.219)" class="rect-5"/> -</clipPath> -<clipPath id="clip1_13917_210903"> -<rect width="11.6891" height="11.6891" transform="translate(198.484 149.219)" class="rect-6"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/socialmedia/discord.svg b/web/src/assets/svgs/socialmedia/discord.svg deleted file mode 100644 index 4bc779005..000000000 --- a/web/src/assets/svgs/socialmedia/discord.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_22740_27326)"> -<path d="M14.1617 3.01119C14.1573 3.00272 14.1499 2.99609 14.1409 2.99248C13.1035 2.52502 12.0088 2.19169 10.8841 2.00082C10.8739 1.99895 10.8634 2.0003 10.854 2.00466C10.8446 2.00903 10.8368 2.01619 10.8318 2.02514C10.6827 2.29086 10.5474 2.5638 10.4264 2.84292C9.21403 2.66218 7.98085 2.66218 6.76851 2.84292C6.64665 2.5631 6.50916 2.29009 6.35667 2.02514C6.35144 2.01639 6.34365 2.00939 6.33431 2.00505C6.32497 2.00071 6.31452 1.99924 6.30432 2.00082C5.17952 2.19129 4.08472 2.52464 3.04749 2.9925C3.03861 2.9962 3.03112 3.00251 3.02605 3.01057C0.951781 6.0529 0.383561 9.02042 0.66231 11.9512C0.663094 11.9584 0.665341 11.9653 0.668917 11.9717C0.672494 11.978 0.677326 11.9835 0.683127 11.9879C1.89095 12.8663 3.24192 13.5367 4.67838 13.9707C4.68849 13.9736 4.6993 13.9735 4.70933 13.9703C4.71937 13.967 4.72816 13.9609 4.73452 13.9526C5.04304 13.5403 5.31641 13.1037 5.55185 12.6473C5.55509 12.641 5.55693 12.6342 5.55727 12.6271C5.55761 12.6201 5.55643 12.6131 5.55381 12.6066C5.55119 12.6 5.54719 12.5941 5.54207 12.5892C5.53696 12.5843 5.53084 12.5805 5.52412 12.5781C5.09304 12.4161 4.67569 12.2208 4.27601 11.9941C4.26875 11.9899 4.26265 11.984 4.25826 11.977C4.25386 11.9699 4.2513 11.9619 4.2508 11.9536C4.2503 11.9454 4.25188 11.9371 4.2554 11.9296C4.25892 11.9221 4.26427 11.9156 4.27098 11.9106C4.35484 11.8488 4.43876 11.7847 4.51884 11.7198C4.52596 11.7141 4.53456 11.7104 4.5437 11.7092C4.55283 11.708 4.56213 11.7093 4.57054 11.713C7.18903 12.8867 10.0239 12.8867 12.6114 11.713C12.6198 11.709 12.6292 11.7075 12.6385 11.7086C12.6477 11.7097 12.6565 11.7134 12.6637 11.7192C12.7438 11.784 12.8277 11.8488 12.9122 11.9106C12.919 11.9155 12.9244 11.922 12.9279 11.9295C12.9315 11.937 12.9332 11.9452 12.9327 11.9535C12.9323 11.9617 12.9298 11.9698 12.9254 11.9768C12.9211 11.9839 12.915 11.9899 12.9078 11.9941C12.509 12.2227 12.0913 12.4179 11.6591 12.5775C11.6524 12.58 11.6463 12.5839 11.6412 12.5889C11.6361 12.5938 11.6322 12.5998 11.6296 12.6064C11.627 12.613 11.6259 12.62 11.6263 12.6271C11.6267 12.6341 11.6286 12.641 11.6319 12.6473C11.8713 13.1012 12.1443 13.5372 12.4486 13.9519C12.4548 13.9604 12.4635 13.9668 12.4736 13.9701C12.4837 13.9735 12.4946 13.9736 12.5047 13.9706C13.9438 13.5381 15.2971 12.8676 16.5064 11.9879C16.5123 11.9837 16.5172 11.9783 16.5208 11.9721C16.5244 11.9659 16.5266 11.9589 16.5273 11.9518C16.861 8.56353 15.9686 5.62033 14.1617 3.01119ZM5.9429 10.1667C5.15454 10.1667 4.50496 9.45612 4.50496 8.5835C4.50496 7.71087 5.14195 7.00028 5.9429 7.00028C6.75011 7.00028 7.39341 7.71704 7.38081 8.58344C7.38081 9.45612 6.7438 10.1667 5.9429 10.1667ZM11.2594 10.1667C10.4711 10.1667 9.82147 9.45612 9.82147 8.5835C9.82147 7.71087 10.4585 7.00028 11.2594 7.00028C12.0666 7.00028 12.7099 7.71704 12.6973 8.58344C12.6973 9.45612 12.0666 10.1667 11.2594 10.1667Z" /> -</g> -<defs> -<clipPath id="clip0_22740_27326"> -<rect width="16" height="16" transform="translate(0.596191)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/socialmedia/etherscan.svg b/web/src/assets/svgs/socialmedia/etherscan.svg deleted file mode 100644 index 56aea0390..000000000 --- a/web/src/assets/svgs/socialmedia/etherscan.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_7838_1787)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M3.97333 7.35778C3.93906 7.4403 3.92143 7.52877 3.92144 7.61813H3.92171V11.8583C3.92157 11.9971 3.87039 12.1311 3.7779 12.2346C3.68541 12.3382 3.55808 12.4041 3.42016 12.4198C3.10329 12.457 2.83675 12.4836 2.62265 12.5025C2.43103 12.5196 2.23849 12.4817 2.06766 12.3932C1.89683 12.3046 1.75481 12.1692 1.65827 12.0027C0.958235 10.7856 0.591875 9.40508 0.59623 8.00087C0.595794 3.56325 4.26146 -0.0587576 8.69691 0.000847346C10.3418 0.0235218 11.9395 0.553883 13.2716 1.51941C14.6036 2.48494 15.6051 3.83851 16.139 5.39504C16.2002 5.573 16.2163 5.76334 16.186 5.94908C16.1558 6.13481 16.08 6.31016 15.9655 6.45948C15.1765 7.48818 14.1821 8.34374 13.201 9.05502V4.22642C13.201 4.04627 13.1295 3.8735 13.0021 3.74612C12.8748 3.61874 12.7021 3.54718 12.522 3.54718H11.3903C11.3011 3.54718 11.2128 3.56476 11.1305 3.5989C11.0481 3.63304 10.9733 3.68307 10.9102 3.74615C10.8472 3.80922 10.7972 3.8841 10.7631 3.9665C10.7289 4.04891 10.7114 4.13723 10.7114 4.22642V10.0903C10.7113 10.2017 10.6784 10.3105 10.6169 10.4033C10.5554 10.4961 10.4679 10.5687 10.3654 10.6121C10.0893 10.7286 9.80611 10.8434 9.80611 10.8434V5.92484C9.80611 5.74467 9.73458 5.57189 9.60725 5.44448C9.47991 5.31707 9.30721 5.24547 9.12711 5.24543H7.99542C7.81532 5.24546 7.6426 5.31705 7.51527 5.44446C7.38793 5.57188 7.31641 5.74467 7.31642 5.92484V11.2242C7.31639 11.3518 7.27329 11.4756 7.19412 11.5756C7.11494 11.6755 7.00434 11.7458 6.88022 11.7751C6.70147 11.817 6.5383 11.8572 6.41107 11.8949V7.62265C6.41107 7.4425 6.33954 7.26973 6.2122 7.14235C6.08487 7.01497 5.91216 6.94341 5.73208 6.94341L4.60267 6.9397C4.51335 6.93928 4.42483 6.95653 4.34219 6.99043C4.25955 7.02434 4.18442 7.07425 4.12112 7.13729C4.05782 7.20033 4.00759 7.27526 3.97333 7.35778ZM3.89701 14.47C3.89695 14.4699 3.89689 14.4699 3.89683 14.4699L3.89677 14.47C3.89685 14.47 3.89693 14.47 3.89701 14.47ZM3.89701 14.47C5.08983 15.338 6.49942 15.859 7.96985 15.9754C9.44036 16.0918 10.9144 15.799 12.2289 15.1293C13.5433 14.4597 14.647 13.4394 15.4178 12.1812C16.1886 10.923 16.5964 9.47608 16.5962 8.00043C16.5962 7.81622 16.5876 7.63409 16.5753 7.45293C13.6538 11.8115 8.25971 13.8495 3.89701 14.47Z"/> -</g> -<defs> -<clipPath id="clip0_7838_1787"> -<rect width="16" height="16" transform="translate(0.596191 0.00012207)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/socialmedia/ghost-blog.svg b/web/src/assets/svgs/socialmedia/ghost-blog.svg deleted file mode 100644 index cbd9a8137..000000000 --- a/web/src/assets/svgs/socialmedia/ghost-blog.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_7752_1887)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M0.596313 1.50012C0.596313 0.671696 1.26789 0.00012207 2.09631 0.00012207H8.50809C9.33652 0.00012207 10.0081 0.671695 10.0081 1.50012V1.79424C10.0081 2.62267 9.33652 3.29424 8.50809 3.29424H2.09631C1.26789 3.29424 0.596313 2.62267 0.596313 1.79424V1.50012ZM13.302 1.50099C13.302 0.672564 13.9735 0.000990136 14.802 0.000990136H15.0961C15.9245 0.000990136 16.5961 0.672563 16.5961 1.50099V1.79511C16.5961 2.62354 15.9245 3.29511 15.0961 3.29511H14.802C13.9735 3.29511 13.302 2.62354 13.302 1.79511V1.50099ZM11.508 12.706C10.6795 12.706 10.008 13.3776 10.008 14.206V14.5001C10.008 15.3285 10.6796 16.0001 11.508 16.0001H15.0962C15.9246 16.0001 16.5962 15.3285 16.5962 14.5001V14.206C16.5962 13.3776 15.9246 12.706 15.0962 12.706H11.508ZM0.596191 14.206C0.596191 13.3776 1.26776 12.706 2.09619 12.706H5.68443C6.51286 12.706 7.18444 13.3776 7.18444 14.206V14.5001C7.18444 15.3285 6.51286 16.0001 5.68444 16.0001H2.09619C1.26776 16.0001 0.596191 15.3285 0.596191 14.5001V14.206ZM2.09619 6.11825C1.26776 6.11825 0.596191 6.78982 0.596191 7.61825V7.91237C0.596191 8.7408 1.26776 9.41237 2.09619 9.41237H15.0962C15.9246 9.41237 16.5962 8.7408 16.5962 7.91237V7.61825C16.5962 6.78982 15.9246 6.11825 15.0962 6.11825H2.09619Z"/> -</g> -<defs> -<clipPath id="clip0_7752_1887"> -<rect width="16" height="16" transform="translate(0.596191 0.00012207)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/socialmedia/github.svg b/web/src/assets/svgs/socialmedia/github.svg deleted file mode 100644 index 96a495933..000000000 --- a/web/src/assets/svgs/socialmedia/github.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_22740_27330)"> -<path d="M5.9478 11.9644C5.9478 12.0259 5.87361 12.075 5.78006 12.075C5.67361 12.0842 5.59942 12.0351 5.59942 11.9644C5.59942 11.903 5.67361 11.8538 5.76716 11.8538C5.86393 11.8446 5.9478 11.8937 5.9478 11.9644ZM4.94458 11.8261C4.922 11.8876 4.98651 11.9583 5.08329 11.9767C5.16716 12.0074 5.26393 11.9767 5.28329 11.9152C5.30264 11.8538 5.24135 11.7831 5.14458 11.7555C5.06071 11.734 4.96716 11.7647 4.94458 11.8261ZM6.37038 11.7739C6.27684 11.7954 6.21232 11.8538 6.222 11.9245C6.23168 11.9859 6.31555 12.0259 6.41232 12.0043C6.50587 11.9828 6.57038 11.9245 6.56071 11.863C6.55103 11.8046 6.46393 11.7647 6.37038 11.7739ZM8.49297 0C4.01877 0 0.596191 3.23537 0.596191 7.49695C0.596191 10.9044 2.8478 13.8202 6.06393 14.8464C6.47684 14.9171 6.622 14.6744 6.622 14.4747C6.622 14.2842 6.61232 13.2334 6.61232 12.5881C6.61232 12.5881 4.35426 13.049 3.88006 11.6725C3.88006 11.6725 3.51232 10.7784 2.98329 10.548C2.98329 10.548 2.24458 10.0656 3.0349 10.0748C3.0349 10.0748 3.83813 10.1363 4.28006 10.8675C4.98651 12.0535 6.17038 11.7125 6.63168 11.5097C6.70587 11.0181 6.91555 10.677 7.1478 10.4742C5.34458 10.2837 3.52522 10.0349 3.52522 7.07909C3.52522 6.23415 3.77039 5.81014 4.28651 5.26938C4.20264 5.06966 3.92845 4.24623 4.37038 3.18313C5.04458 2.98342 6.59619 4.01271 6.59619 4.01271C7.24135 3.84065 7.9349 3.75155 8.622 3.75155C9.30909 3.75155 10.0026 3.84065 10.6478 4.01271C10.6478 4.01271 12.1994 2.98035 12.8736 3.18313C13.3155 4.2493 13.0414 5.06966 12.9575 5.26938C13.4736 5.81321 13.7897 6.23722 13.7897 7.07909C13.7897 10.0441 11.8897 10.2807 10.0865 10.4742C10.3833 10.717 10.6349 11.1778 10.6349 11.8999C10.6349 12.9353 10.6252 14.2166 10.6252 14.4685C10.6252 14.6682 10.7736 14.911 11.1833 14.8403C14.4091 13.8202 16.5962 10.9044 16.5962 7.49695C16.5962 3.23537 12.9672 0 8.49297 0ZM3.73168 10.5971C3.68974 10.6279 3.69942 10.6985 3.75426 10.7569C3.80587 10.8061 3.88006 10.8276 3.922 10.7876C3.96393 10.7569 3.95426 10.6862 3.89942 10.6279C3.8478 10.5787 3.77361 10.5572 3.73168 10.5971ZM3.38329 10.3483C3.36071 10.3882 3.39297 10.4374 3.45748 10.4681C3.50909 10.4988 3.57361 10.4896 3.59619 10.4466C3.61877 10.4066 3.58651 10.3575 3.522 10.3267C3.45748 10.3083 3.40587 10.3175 3.38329 10.3483ZM4.42845 11.4421C4.37684 11.482 4.39619 11.5742 4.47038 11.6326C4.54458 11.7032 4.63813 11.7125 4.68006 11.6633C4.722 11.6234 4.70264 11.5312 4.63813 11.4728C4.56716 11.4021 4.47038 11.3929 4.42845 11.4421ZM4.06071 10.9904C4.00909 11.0211 4.00909 11.101 4.06071 11.1717C4.11232 11.2424 4.19942 11.2731 4.24135 11.2424C4.29297 11.2024 4.29297 11.1225 4.24135 11.0519C4.19619 10.9812 4.11232 10.9505 4.06071 10.9904Z"/> -</g> -<defs> -<clipPath id="clip0_22740_27330"> -<rect width="16" height="16" transform="translate(0.596191)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/socialmedia/linkedin.svg b/web/src/assets/svgs/socialmedia/linkedin.svg deleted file mode 100644 index 5e82fa6ca..000000000 --- a/web/src/assets/svgs/socialmedia/linkedin.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_22740_27334)"> -<path d="M4.94215 15H1.84305V4.98549H4.94215V15ZM3.39093 3.61942C2.40015 3.61942 1.59619 2.79576 1.59619 1.80134C1.59619 0.80692 2.40015 0 3.39093 0C4.38171 0 5.18567 0.80692 5.18567 1.80134C5.18567 2.79576 4.38171 3.61942 3.39093 3.61942ZM16.5412 15H13.4488V10.125C13.4488 8.96317 13.4255 7.47321 11.8375 7.47321C10.2263 7.47321 9.97943 8.73549 9.97943 10.0413V15H6.88367V4.98549H9.856V6.35156H9.89936C10.313 5.56473 11.3238 4.73437 12.8317 4.73437C15.9675 4.73437 16.5446 6.80692 16.5446 9.49888V15H16.5412Z"/> -</g> -<defs> -<clipPath id="clip0_22740_27334"> -<rect width="16" height="16" transform="translate(0.596191)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/socialmedia/reddit.svg b/web/src/assets/svgs/socialmedia/reddit.svg deleted file mode 100644 index 29638aba9..000000000 --- a/web/src/assets/svgs/socialmedia/reddit.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_7752_1653)"> -<path d="M14.812 5.78699C14.3062 5.78699 13.861 5.99607 13.5339 6.32318C12.33 5.49022 10.7079 4.95403 8.9105 4.8967L9.84462 0.688071L12.819 1.35579C12.819 2.0842 13.4125 2.67773 14.1409 2.67773C14.8828 2.67773 15.4797 2.06734 15.4797 1.33892C15.4797 0.610508 14.8862 0.00012207 14.1409 0.00012207C13.6216 0.00012207 13.1731 0.313746 12.9505 0.742028L9.66589 0.0136113C9.50065 -0.0302286 9.33878 0.0878019 9.29494 0.253044L8.26976 4.89333C6.48582 4.96752 4.8806 5.50371 3.67332 6.33667C3.34621 5.99607 2.8842 5.78699 2.37836 5.78699C0.503358 5.78699 -0.1104 8.30272 1.6061 9.16266C1.5454 9.42907 1.51842 9.71234 1.51842 9.99561C1.51842 12.8216 4.70187 15.1114 8.61036 15.1114C12.5357 15.1114 15.7192 12.8216 15.7192 9.99561C15.7192 9.71234 15.6888 9.41558 15.6146 9.14917C17.2974 8.28586 16.6769 5.78699 14.812 5.78699ZM4.32754 9.34139C4.32754 8.59948 4.92107 8.00259 5.66635 8.00259C6.39476 8.00259 6.98829 8.59611 6.98829 9.34139C6.98829 10.0698 6.39476 10.6633 5.66635 10.6633C4.92444 10.6667 4.32754 10.0698 4.32754 9.34139ZM11.5544 12.4945C10.3269 13.722 6.86351 13.722 5.636 12.4945C5.5011 12.3765 5.5011 12.1674 5.636 12.0325C5.75403 11.9145 5.96311 11.9145 6.08114 12.0325C7.01864 12.9936 10.1279 13.0104 11.1059 12.0325C11.2239 11.9145 11.433 11.9145 11.551 12.0325C11.6893 12.1674 11.6893 12.3765 11.5544 12.4945ZM11.5274 10.6667C10.799 10.6667 10.2055 10.0732 10.2055 9.34476C10.2055 8.60285 10.799 8.00596 11.5274 8.00596C12.2693 8.00596 12.8662 8.59948 12.8662 9.34476C12.8628 10.0698 12.2693 10.6667 11.5274 10.6667Z"/> -</g> -<defs> -<clipPath id="clip0_7752_1653"> -<rect width="16" height="16" transform="translate(0.596191 0.00012207)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/socialmedia/slack.svg b/web/src/assets/svgs/socialmedia/slack.svg deleted file mode 100644 index 25551ed1d..000000000 --- a/web/src/assets/svgs/socialmedia/slack.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_14018_54608)"> -<path d="M3.36143 10.6107C3.36143 11.5357 2.60571 12.2914 1.68071 12.2914C0.755714 12.2914 0 11.5357 0 10.6107C0 9.68571 0.755714 8.93 1.68071 8.93H3.36143V10.6107ZM4.20857 10.6107C4.20857 9.68571 4.96429 8.93 5.88929 8.93C6.81429 8.93 7.57 9.68571 7.57 10.6107V14.8193C7.57 15.7443 6.81429 16.5 5.88929 16.5C4.96429 16.5 4.20857 15.7443 4.20857 14.8193V10.6107ZM5.88929 3.86143C4.96429 3.86143 4.20857 3.10571 4.20857 2.18071C4.20857 1.25571 4.96429 0.5 5.88929 0.5C6.81429 0.5 7.57 1.25571 7.57 2.18071V3.86143H5.88929ZM5.88929 4.70857C6.81429 4.70857 7.57 5.46429 7.57 6.38929C7.57 7.31429 6.81429 8.07 5.88929 8.07H1.68071C0.755714 8.07 0 7.31429 0 6.38929C0 5.46429 0.755714 4.70857 1.68071 4.70857H5.88929ZM12.6386 6.38929C12.6386 5.46429 13.3943 4.70857 14.3193 4.70857C15.2443 4.70857 16 5.46429 16 6.38929C16 7.31429 15.2443 8.07 14.3193 8.07H12.6386V6.38929ZM11.7914 6.38929C11.7914 7.31429 11.0357 8.07 10.1107 8.07C9.18571 8.07 8.43 7.31429 8.43 6.38929V2.18071C8.43 1.25571 9.18571 0.5 10.1107 0.5C11.0357 0.5 11.7914 1.25571 11.7914 2.18071V6.38929ZM10.1107 13.1386C11.0357 13.1386 11.7914 13.8943 11.7914 14.8193C11.7914 15.7443 11.0357 16.5 10.1107 16.5C9.18571 16.5 8.43 15.7443 8.43 14.8193V13.1386H10.1107ZM10.1107 12.2914C9.18571 12.2914 8.43 11.5357 8.43 10.6107C8.43 9.68571 9.18571 8.93 10.1107 8.93H14.3193C15.2443 8.93 16 9.68571 16 10.6107C16 11.5357 15.2443 12.2914 14.3193 12.2914H10.1107Z"/> -</g> -<defs> -<clipPath id="clip0_14018_54608"> -<rect width="16" height="16" transform="translate(0 0.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/socialmedia/snapshot.svg b/web/src/assets/svgs/socialmedia/snapshot.svg deleted file mode 100644 index fa69e3684..000000000 --- a/web/src/assets/svgs/socialmedia/snapshot.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_13092_194536)"> -<path d="M1.73393 8.64639L11.604 0.100116C11.9362 -0.187517 12.42 0.198474 12.2134 0.58627L8.99138 6.63339H14.5924C14.9606 6.63339 15.1299 7.0916 14.8502 7.33105L4.83779 15.9017C4.50623 16.1855 4.02638 15.8035 4.22865 15.4168L7.40552 9.34258H1.99345C1.62635 9.34258 1.45641 8.88669 1.73393 8.64639Z"/> -</g> -<defs> -<clipPath id="clip0_13092_194536"> -<rect width="16" height="16" transform="translate(0.596191 0.00012207)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/socialmedia/telegram.svg b/web/src/assets/svgs/socialmedia/telegram.svg deleted file mode 100644 index 73c7f5098..000000000 --- a/web/src/assets/svgs/socialmedia/telegram.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_22740_27322)"> -<path d="M16.5506 2.19713L14.1361 13.3561C13.9539 14.1437 13.4789 14.3397 12.8038 13.9687L9.12494 11.3119L7.34978 12.9851C7.15334 13.1776 6.98903 13.3386 6.61043 13.3386L6.87474 9.66679L13.6932 3.62876C13.9897 3.36973 13.6289 3.22622 13.2324 3.48524L4.80313 8.68671L1.17423 7.57361C0.384875 7.33209 0.370588 6.80004 1.33853 6.429L15.5327 1.07003C16.1899 0.828506 16.7649 1.21354 16.5506 2.19713Z" /> -</g> -<defs> -<clipPath id="clip0_22740_27322"> -<rect width="16" height="16" transform="translate(0.596191)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/socialmedia/x.svg b/web/src/assets/svgs/socialmedia/x.svg deleted file mode 100644 index 0643bf9cd..000000000 --- a/web/src/assets/svgs/socialmedia/x.svg +++ /dev/null @@ -1,3 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M12.9212 2H15.1274L10.3087 7.50625L15.9774 15H11.5399L8.06182 10.4563L4.08682 15H1.87744L7.03057 9.10938L1.59619 2H6.14619L9.28682 6.15312L12.9212 2ZM12.1462 13.6812H13.3681L5.48057 3.25H4.16807L12.1462 13.6812Z" /> -</svg> diff --git a/web/src/assets/svgs/socialmedia/youtube.svg b/web/src/assets/svgs/socialmedia/youtube.svg deleted file mode 100644 index f2635fe0c..000000000 --- a/web/src/assets/svgs/socialmedia/youtube.svg +++ /dev/null @@ -1,10 +0,0 @@ -<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> -<g clip-path="url(#clip0_22740_27328)"> -<path d="M16.2619 3.78224C16.0778 3.08071 15.5357 2.52821 14.8473 2.34071C13.5995 2 8.59619 2 8.59619 2C8.59619 2 3.59288 2 2.3451 2.34071C1.65671 2.52824 1.11454 3.08071 0.930527 3.78224C0.596191 5.05381 0.596191 7.70681 0.596191 7.70681C0.596191 7.70681 0.596191 10.3598 0.930527 11.6314C1.11454 12.3329 1.65671 12.8624 2.3451 13.0499C3.59288 13.3906 8.59619 13.3906 8.59619 13.3906C8.59619 13.3906 13.5995 13.3906 14.8473 13.0499C15.5357 12.8624 16.0778 12.3329 16.2619 11.6314C16.5962 10.3598 16.5962 7.70681 16.5962 7.70681C16.5962 7.70681 16.5962 5.05381 16.2619 3.78224ZM6.95982 10.1155V5.29809L11.1416 7.70687L6.95982 10.1155Z"/> -</g> -<defs> -<clipPath id="clip0_22740_27328"> -<rect width="16" height="16" transform="translate(0.596191)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/styled/eth.svg b/web/src/assets/svgs/styled/eth.svg deleted file mode 100644 index 8b1703496..000000000 --- a/web/src/assets/svgs/styled/eth.svg +++ /dev/null @@ -1,9 +0,0 @@ -<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M9.86602 28.0687L22.923 36.0836V47.1905L9.86602 28.0687ZM23.423 36.0836L36.4799 28.0687L23.423 47.1905V36.0836ZM23.423 16.428V0.930308L36.666 23.7911L23.423 16.428ZM36.8415 24.4607L23.423 32.703V17L36.8415 24.4607ZM22.923 0.929777V16.4279L9.67081 23.7913L22.923 0.929777ZM22.923 32.7032L9.49539 24.4607L22.923 16.9999V32.7032Z" stroke-width="0.5"/> -<defs> -<linearGradient id="paint0_linear_14360_27088" x1="23.173" y1="0" x2="23.173" y2="48" gradientUnits="userSpaceOnUse"> -<stop stop-color="#6CC5FF"/> -<stop offset="1" stop-color="#B45FFF"/> -</linearGradient> -</defs> -</svg> diff --git a/web/src/assets/svgs/styled/pnk.svg b/web/src/assets/svgs/styled/pnk.svg deleted file mode 100644 index f48cfb58f..000000000 --- a/web/src/assets/svgs/styled/pnk.svg +++ /dev/null @@ -1,9 +0,0 @@ -<svg viewBox="0 0 280 254" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M82.1951 0L222.154 9.15045L280 137.338L200.916 253.21L57.8025 247.105L0 106.814L82.1951 0ZM85.7529 7.27085L63.9207 113.967L192.185 53.7796L85.7529 7.27085ZM195.727 58.6916L65.5625 119.771L176.34 203.061L195.727 58.6916ZM172.12 207.33L62.7929 125.131V240.21L172.12 207.33ZM56.8537 229.206V121.593L8.29225 111.344L56.8537 229.206ZM8.64096 105.333L57.514 115.647L78.0922 15.0797L8.64096 105.333ZM77.551 241.988L194.485 246.976L177.069 212.058L77.551 241.988ZM182.389 209.412L199.795 244.309L264.443 149.588L182.389 209.412ZM266.4 121.646L220.049 18.9305L202.972 53.1691L266.4 121.646ZM197.999 49.8254L100.348 7.15348L215.527 14.6838L197.999 49.8254ZM201.499 60.3294L182.478 201.985L272.152 136.605L201.499 60.3294Z" fill="url(#paint0_linear_13407_171333)"/> -<defs> -<linearGradient id="paint0_linear_13407_171333" x1="140" y1="0" x2="140" y2="253.21" gradientUnits="userSpaceOnUse"> -<stop class="stop-1"/> -<stop offset="1" class="stop-2"/> -</linearGradient> -</defs> -</svg> diff --git a/web/src/assets/svgs/styled/three-pnks.svg b/web/src/assets/svgs/styled/three-pnks.svg deleted file mode 100644 index 92c212b7d..000000000 --- a/web/src/assets/svgs/styled/three-pnks.svg +++ /dev/null @@ -1,19 +0,0 @@ -<svg width="154" height="61" viewBox="0 0 154 61" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M105.851 0L139.652 2.20441L153.622 33.0857L134.522 61L99.9596 59.5292L86 25.7322L105.851 0ZM106.71 1.7516L101.437 27.4555L132.414 12.9559L106.71 1.7516ZM133.269 14.1392L101.834 28.8536L128.587 48.9188L133.269 14.1392ZM127.568 49.9473L101.165 30.1449V57.8683L127.568 49.9473ZM99.7305 55.2172V29.2925L88.0026 26.8235L99.7305 55.2172ZM88.0868 25.3754L99.89 27.8603L104.86 3.63279L88.0868 25.3754ZM104.729 58.2965L132.969 59.4983L128.763 51.0863L104.729 58.2965ZM130.048 50.4487L134.252 58.8556L149.864 36.0368L130.048 50.4487ZM150.337 29.3054L139.143 4.5605L135.019 12.8088L150.337 29.3054ZM133.818 12.0033L110.235 1.72332L138.051 3.53743L133.818 12.0033ZM134.663 14.5338L130.069 48.6596L151.726 32.9092L134.663 14.5338Z" fill="url(#paint0_linear_17284_41875)"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M43.7504 14L62.0559 15.1938L69.6216 31.9181L59.2781 47.0356L40.5601 46.2391L33 27.9357L43.7504 14ZM44.2158 14.9486L41.3603 28.869L58.1361 21.0165L44.2158 14.9486ZM58.5994 21.6573L41.575 29.6262L56.0638 40.4928L58.5994 21.6573ZM55.5119 41.0498L41.2128 30.3255V45.3395L55.5119 41.0498ZM40.436 43.9038V29.8638L34.0846 28.5267L40.436 43.9038ZM34.1302 27.7425L40.5223 29.0882L43.2138 15.9674L34.1302 27.7425ZM43.143 45.5715L58.437 46.2223L56.1591 41.6666L43.143 45.5715ZM56.855 41.3213L59.1314 45.8742L67.5869 33.5163L56.855 41.3213ZM67.8429 29.8708L61.7805 16.4698L59.547 20.9368L67.8429 29.8708ZM58.8966 20.5006L46.1246 14.9333L61.189 15.9158L58.8966 20.5006ZM59.3544 21.871L56.8665 40.3524L68.5951 31.8225L59.3544 21.871Z" fill="url(#paint1_linear_17284_41875)"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M4.88129 23L13.193 23.5421L16.6283 31.1358L11.9317 38L3.4327 37.6383L0 29.3276L4.88129 23ZM5.09258 23.4307L3.79604 29.7514L11.4132 26.1859L5.09258 23.4307ZM11.6235 26.4769L3.89354 30.0952L10.4723 35.0292L11.6235 26.4769ZM10.2216 35.2821L3.72906 30.4127V37.2299L10.2216 35.2821ZM3.37635 36.578V30.2031L0.492449 29.5959L3.37635 36.578ZM0.513158 29.2399L3.41557 29.8509L4.63763 23.8933L0.513158 29.2399ZM4.60549 37.3352L11.5498 37.6307L10.5155 35.5622L4.60549 37.3352ZM10.8315 35.4054L11.8651 37.4727L15.7044 31.8615L10.8315 35.4054ZM15.8206 30.2062L13.068 24.1214L12.0538 26.1497L15.8206 30.2062ZM11.7585 25.9516L5.95932 23.4238L12.7994 23.8699L11.7585 25.9516ZM11.9664 26.5739L10.8367 34.9655L16.1622 31.0924L11.9664 26.5739Z" fill="url(#paint2_linear_17284_41875)"/> -<defs> -<linearGradient id="paint0_linear_17284_41875" x1="119.811" y1="0" x2="119.811" y2="61" gradientUnits="userSpaceOnUse"> -<stop stop-color="#6CC5FF"/> -<stop offset="1" stop-color="#B45FFF"/> -</linearGradient> -<linearGradient id="paint1_linear_17284_41875" x1="51.3108" y1="14" x2="51.3108" y2="47.0356" gradientUnits="userSpaceOnUse"> -<stop stop-color="#6CC5FF"/> -<stop offset="1" stop-color="#B45FFF"/> -</linearGradient> -<linearGradient id="paint2_linear_17284_41875" x1="8.31413" y1="23" x2="8.31413" y2="38" gradientUnits="userSpaceOnUse"> -<stop stop-color="#6CC5FF"/> -<stop offset="1" stop-color="#B45FFF"/> -</linearGradient> -</defs> -</svg> diff --git a/web/src/assets/svgs/tokens/arbitrum.svg b/web/src/assets/svgs/tokens/arbitrum.svg deleted file mode 100644 index cbf63c1c0..000000000 --- a/web/src/assets/svgs/tokens/arbitrum.svg +++ /dev/null @@ -1,17 +0,0 @@ -<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z" fill="#213147"/> -<g clip-path="url(#clip0_0_768)"> -<path d="M5.44629 8.864V15.136C5.44629 15.5392 5.65749 15.904 6.00949 16.1088L11.4431 19.2448C11.7887 19.4432 12.2175 19.4432 12.5631 19.2448L17.9967 16.1088C18.3423 15.9104 18.5599 15.5392 18.5599 15.136V8.864C18.5599 8.4608 18.3487 8.096 17.9967 7.8912L12.5631 4.7552C12.2175 4.5568 11.7887 4.5568 11.4431 4.7552L6.00949 7.8912C5.66389 8.0896 5.45269 8.4608 5.45269 8.864H5.44629Z" fill="#213147"/> -<path d="M13.1838 13.216L12.4094 15.3408C12.3902 15.3984 12.3902 15.4624 12.4094 15.5264L13.7406 19.1808L15.283 18.2912L13.4334 13.216C13.3886 13.1008 13.2286 13.1008 13.1838 13.216Z" fill="#12AAFF"/> -<path d="M14.7391 9.6448C14.6943 9.5296 14.5343 9.5296 14.4895 9.6448L13.7151 11.7696C13.6959 11.8272 13.6959 11.8912 13.7151 11.9552L15.8975 17.9392L17.4399 17.0496L14.7391 9.6512V9.6448Z" fill="#12AAFF"/> -<path d="M11.9999 4.992C12.0383 4.992 12.0767 5.0048 12.1087 5.024L17.9839 8.416C18.0543 8.4544 18.0927 8.5312 18.0927 8.608V15.392C18.0927 15.4688 18.0479 15.5456 17.9839 15.584L12.1087 18.976C12.0767 18.9952 12.0383 19.008 11.9999 19.008C11.9615 19.008 11.9231 18.9952 11.8911 18.976L6.01589 15.584C5.94549 15.5456 5.90709 15.4688 5.90709 15.392V8.6016C5.90709 8.5248 5.95189 8.448 6.01589 8.4096L11.8911 5.0176C11.9231 4.9984 11.9615 4.9856 11.9999 4.9856V4.992ZM11.9999 4C11.7887 4 11.5839 4.0512 11.3919 4.16L5.51669 7.552C5.13909 7.7696 4.90869 8.1664 4.90869 8.6016V15.3856C4.90869 15.8208 5.13909 16.2176 5.51669 16.4352L11.3919 19.8272C11.5775 19.936 11.7887 19.9872 11.9999 19.9872C12.2111 19.9872 12.4159 19.936 12.6079 19.8272L18.4831 16.4352C18.8607 16.2176 19.0911 15.8208 19.0911 15.3856V8.6016C19.0911 8.1664 18.8607 7.7696 18.4831 7.552L12.6015 4.16C12.4159 4.0512 12.2047 4 11.9935 4H11.9999Z" fill="#9DCCED"/> -<path d="M8.10889 17.9456L8.65289 16.4608L9.74089 17.3632L8.72329 18.2976L8.10889 17.9456Z" fill="#213147"/> -<path d="M11.5008 8.1216H10.0096C9.90081 8.1216 9.79841 8.192 9.76001 8.2944L6.56641 17.0496L8.10881 17.9392L11.6288 8.2944C11.6608 8.2048 11.5968 8.1152 11.5072 8.1152L11.5008 8.1216Z" fill="white"/> -<path d="M14.1119 8.1216H12.6207C12.5119 8.1216 12.4095 8.192 12.3711 8.2944L8.72314 18.2912L10.2655 19.1808L14.2335 8.2944C14.2655 8.2048 14.2015 8.1152 14.1119 8.1152V8.1216Z" fill="white"/> -</g> -<defs> -<clipPath id="clip0_0_768"> -<rect width="16" height="16" fill="white" transform="translate(4 4)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/tokens/dai.svg b/web/src/assets/svgs/tokens/dai.svg deleted file mode 100644 index bf148d646..000000000 --- a/web/src/assets/svgs/tokens/dai.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> - <g clip-path="url(#clip0_19594_33455)"> - <path d="M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z" fill="#FABB36"/> - <path d="M19.1159 10.0201H17.6919C16.9079 7.84411 14.7999 6.35211 12.0199 6.35211H7.44786V10.0201H5.85986V11.3361H7.44786V12.7161H5.85986V14.0321H7.44786V17.6561H12.0199C14.7679 17.6561 16.8599 16.1761 17.6639 14.0321H19.1159V12.7161H17.9839C18.0119 12.4841 18.0279 12.2441 18.0279 12.0041V11.9721C18.0279 11.7561 18.0159 11.5441 17.9959 11.3361H19.1199V10.0201H19.1159ZM8.72786 7.52411H12.0199C14.0599 7.52411 15.5759 8.52811 16.2759 10.0161H8.72786V7.52411ZM12.0199 16.4721H8.72786V14.0281H16.2679C15.5639 15.4921 14.0519 16.4721 12.0199 16.4721ZM16.7039 12.0321C16.7039 12.2641 16.6879 12.4921 16.6559 12.7121H8.72786V11.3321H16.6599C16.6879 11.5481 16.7039 11.7721 16.7039 12.0001V12.0321Z" fill="white"/> - </g> - <defs> - <clipPath id="clip0_19594_33455"> - <rect width="24" height="24" fill="white"/> - </clipPath> - </defs> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/tokens/eth.svg b/web/src/assets/svgs/tokens/eth.svg deleted file mode 100644 index 23301257e..000000000 --- a/web/src/assets/svgs/tokens/eth.svg +++ /dev/null @@ -1,9 +0,0 @@ -<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<circle cx="12" cy="12" r="12" fill="#627EEA"/> -<path d="M11.9995 4V9.91456L16.9985 12.1484L11.9995 4Z" fill="#C1CCF7"/> -<path d="M11.9997 4L7 12.1484L11.9997 9.91456V4Z" fill="white"/> -<path d="M11.9995 15.981V19.9999L17.0019 13.0791L11.9995 15.981Z" fill="#C1CCF7"/> -<path d="M11.9997 19.9999V15.9804L7 13.0791L11.9997 19.9999Z" fill="white"/> -<path d="M11.9995 15.0511L16.9985 12.1485L11.9995 9.91602V15.0511Z" fill="#8198EE"/> -<path d="M7 12.1485L11.9997 15.0511V9.91602L7 12.1485Z" fill="#C1CCF7"/> -</svg> diff --git a/web/src/assets/svgs/tokens/gnosis.svg b/web/src/assets/svgs/tokens/gnosis.svg deleted file mode 100644 index 4baf510bd..000000000 --- a/web/src/assets/svgs/tokens/gnosis.svg +++ /dev/null @@ -1,14 +0,0 @@ -<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M12 24C18.65 24 24 18.65 24 12C24 5.34996 18.65 0 12 0C5.34996 0 0 5.34996 0 12C0 18.65 5.34996 24 12 24Z" fill="#00A6C4"/> -<g clip-path="url(#clip0_7515_9807)"> -<path d="M8.7028 13.1103C9.16262 13.1103 9.61121 12.957 9.97383 12.6766L7.05794 9.76074C6.35514 10.6692 6.52336 11.9776 7.43178 12.6804C7.79813 12.957 8.24299 13.1103 8.7028 13.1103Z" fill="white"/> -<path d="M17.3757 11.0279C17.3757 10.5681 17.2224 10.1195 16.9421 9.75684L14.0262 12.6727C14.9346 13.3755 16.2393 13.2073 16.9421 12.2989C17.2224 11.9363 17.3757 11.4877 17.3757 11.0279Z" fill="white"/> -<path d="M18.8449 7.854L17.5551 9.14372C18.5944 10.3886 18.4299 12.2428 17.185 13.282C16.0935 14.1942 14.5084 14.1942 13.4168 13.282L12 14.6989L10.5869 13.2858C9.34206 14.325 7.48785 14.1605 6.4486 12.9157C5.53645 11.8241 5.53645 10.2391 6.4486 9.14746L5.78692 8.48578L5.15888 7.854C4.4 9.1026 4 10.5381 4 11.9998C4 16.4185 7.58131 19.9998 12 19.9998C16.4187 19.9998 20 16.4185 20 11.9998C20.0037 10.5381 19.6 9.1026 18.8449 7.854Z" fill="white"/> -<path d="M17.7869 6.47846C14.7402 3.2822 9.6785 3.16257 6.48224 6.2093C6.38878 6.29902 6.29907 6.38874 6.21308 6.47846C6.01495 6.6878 5.82804 6.90463 5.65234 7.13266L12 13.4841L18.3477 7.13266C18.1757 6.90463 17.985 6.6878 17.7869 6.47846ZM12 5.04668C13.8692 5.04668 15.6112 5.76818 16.9196 7.08407L12 12.0037L7.08037 7.08407C8.38878 5.76818 10.1308 5.04668 12 5.04668Z" fill="white"/> -</g> -<defs> -<clipPath id="clip0_7515_9807"> -<rect width="16" height="16" fill="white" transform="translate(4 4)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/tokens/optimism.svg b/web/src/assets/svgs/tokens/optimism.svg deleted file mode 100644 index 89afd698c..000000000 --- a/web/src/assets/svgs/tokens/optimism.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> - <g clip-path="url(#clip0_19413_126343)"> - <path d="M12 24C18.65 24 24 18.65 24 12C24 5.34996 18.65 0 12 0C5.34996 0 0 5.34996 0 12C0 18.65 5.34996 24 12 24Z" fill="#FF0420"/> - <path fill-rule="evenodd" clip-rule="evenodd" d="M6.74582 14.6849C7.20215 15.0212 7.78755 15.1893 8.50208 15.1893C9.36675 15.1893 10.0573 14.9882 10.5737 14.5859C11.09 14.1776 11.4532 13.5621 11.6634 12.7395C11.7895 12.2352 11.8976 11.7158 11.9876 11.1814C12.0177 10.9892 12.0327 10.8301 12.0327 10.704C12.0327 10.2837 11.9276 9.92349 11.7175 9.62327C11.5073 9.31704 11.2191 9.08881 10.8529 8.93874C10.4866 8.78266 10.0723 8.70459 9.6099 8.70459C7.9107 8.70459 6.85689 9.53019 6.4486 11.1814C6.30451 11.7878 6.19343 12.3072 6.11533 12.7395C6.08533 12.9317 6.07031 13.0938 6.07031 13.2259C6.07031 13.8564 6.29548 14.3427 6.74582 14.6849ZM9.48382 13.5952C9.24967 13.7933 8.96445 13.8924 8.62815 13.8924C8.05177 13.8924 7.76355 13.6162 7.76355 13.0637C7.76355 12.9317 7.77555 12.8056 7.79962 12.6855C7.90762 12.1031 8.01578 11.6107 8.12385 11.2084C8.22593 10.8001 8.39408 10.4969 8.62815 10.2987C8.86837 10.1006 9.1566 10.0015 9.49282 10.0015C10.0633 10.0015 10.3484 10.2747 10.3484 10.8211C10.3484 10.9532 10.3364 11.0823 10.3124 11.2084C10.2404 11.6287 10.1353 12.1211 9.9972 12.6855C9.89513 13.0938 9.72405 13.397 9.48382 13.5952ZM12.2936 15.0365C12.3296 15.0786 12.3807 15.0996 12.4468 15.0996H13.6717C13.7317 15.0996 13.7887 15.0786 13.8428 15.0365C13.8968 14.9945 13.9298 14.9405 13.9419 14.8744L14.3561 12.902H15.572C16.3586 12.902 16.9771 12.7368 17.4274 12.4066C17.8837 12.0764 18.187 11.5659 18.337 10.8754C18.3731 10.7133 18.3911 10.5572 18.3911 10.4071C18.3911 9.88475 18.187 9.48545 17.7787 9.20922C17.3764 8.933 16.842 8.79492 16.1755 8.79492H13.7797C13.7197 8.79492 13.6627 8.81592 13.6086 8.85792C13.5545 8.9 13.5215 8.95407 13.5095 9.02007L12.2666 14.8744C12.2546 14.9345 12.2636 14.9885 12.2936 15.0365ZM16.2925 11.4519C16.1064 11.5899 15.8872 11.659 15.6351 11.659H14.5993L14.9416 10.0469H16.0224C16.2685 10.0469 16.4427 10.0949 16.5448 10.191C16.6468 10.281 16.6978 10.4131 16.6978 10.5873C16.6978 10.6653 16.6888 10.7553 16.6708 10.8574C16.6108 11.1156 16.4847 11.3138 16.2925 11.4519Z" fill="white"/> - </g> - <defs> - <clipPath id="clip0_19413_126343"> - <rect width="24" height="24" fill="white"/> - </clipPath> - </defs> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/tokens/pnk.svg b/web/src/assets/svgs/tokens/pnk.svg deleted file mode 100644 index f23a451a5..000000000 --- a/web/src/assets/svgs/tokens/pnk.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> -<circle cx="12" cy="12" r="12" fill="#9013FE"/> -<g clip-path="url(#clip0_19274_81036)"> -<path fill-rule="evenodd" clip-rule="evenodd" d="M8.90429 5.4375L16.4465 5.77469L19.5 12.5607L15.192 18.7627L7.60885 18.277L4.5 10.9244L8.90429 5.4375ZM14.4337 9.34913L8.96762 11.7378L13.6408 15.3518L14.4337 9.34913ZM13.8009 8.15219L9.43257 6.27092L8.51495 10.2264L13.8009 8.15219ZM12.6937 16.2611L7.94616 12.8703L8.061 17.465L12.6937 16.2611ZM18.7417 12.5457L15.5065 9.26222L14.6526 15.5763L18.7417 12.5457ZM13.8067 16.9996L9.80285 18.0463L14.5114 18.3479L13.8067 16.9996ZM18.1095 14.0355L14.6046 16.6469L15.3011 18.0082L18.1095 14.0355ZM16.4517 6.72283L15.7709 8.12059L18.3048 10.6968L16.4517 6.72283ZM15.6035 6.05395L11.154 5.8733L14.8243 7.479L15.6035 6.05395ZM8.25453 6.70033L5.13798 10.6365L7.22165 11.0779L8.25453 6.70033ZM7.09601 11.8501L5.0023 11.4067L7.18692 16.5544L7.09601 11.8501Z" fill="white"/> -</g> -<defs> -<clipPath id="clip0_19274_81036"> -<rect width="15" height="15" fill="white" transform="translate(4.5 4.5)"/> -</clipPath> -</defs> -</svg> diff --git a/web/src/assets/svgs/tokens/polygon.svg b/web/src/assets/svgs/tokens/polygon.svg deleted file mode 100644 index d370f72e9..000000000 --- a/web/src/assets/svgs/tokens/polygon.svg +++ /dev/null @@ -1,11 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> - <g clip-path="url(#clip0_19274_80440)"> - <path d="M12 24C18.65 24 24 18.65 24 12C24 5.34996 18.65 0 12 0C5.34996 0 0 5.34996 0 12C0 18.65 5.34996 24 12 24Z" fill="#8A46FF"/> - <path d="M16.0738 9.37829C15.7786 9.19649 15.3948 9.19649 15.0701 9.37829L12.7675 10.772L11.2029 11.681L8.90037 13.0748C8.60518 13.2566 8.2214 13.2566 7.89668 13.0748L6.06642 11.9841C5.77122 11.8023 5.56457 11.469 5.56457 11.1053V8.95409C5.56457 8.5905 5.7417 8.25721 6.06642 8.07541L7.86716 7.01492C8.16236 6.83312 8.54611 6.83312 8.87085 7.01492L10.6716 8.07541C10.9668 8.25721 11.1734 8.5905 11.1734 8.95409V10.3479L12.738 9.40859V8.01481C12.738 7.65121 12.5609 7.31792 12.2362 7.13612L8.90037 5.13635C8.60518 4.95455 8.2214 4.95455 7.89668 5.13635L4.50185 7.13612C4.17712 7.31792 4 7.65121 4 8.01481V12.0447C4 12.4082 4.17712 12.7415 4.50185 12.9233L7.89668 14.9231C8.19188 15.1049 8.57566 15.1049 8.90037 14.9231L11.2029 13.5596L12.7675 12.6203L15.0701 11.2569C15.3653 11.0751 15.7491 11.0751 16.0738 11.2569L17.8745 12.3174C18.1698 12.4992 18.3764 12.8325 18.3764 13.196V15.3473C18.3764 15.7109 18.1993 16.0442 17.8745 16.226L16.0738 17.3168C15.7786 17.4986 15.3948 17.4986 15.0701 17.3168L13.2694 16.2563C12.9742 16.0745 12.7675 15.7412 12.7675 15.3776V13.9838L11.2029 14.9231V16.3169C11.2029 16.6805 11.3801 17.0138 11.7048 17.1956L15.0996 19.1954C15.3948 19.3772 15.7786 19.3772 16.1033 19.1954L19.4982 17.1956C19.7934 17.0138 20 16.6805 20 16.3169V12.287C20 11.9235 19.8229 11.5902 19.4982 11.4084L16.0738 9.37829Z" fill="white"/> - </g> - <defs> - <clipPath id="clip0_19274_80440"> - <rect width="24" height="24" fill="white"/> - </clipPath> - </defs> -</svg> \ No newline at end of file diff --git a/web/src/assets/svgs/tokens/usdc.svg b/web/src/assets/svgs/tokens/usdc.svg deleted file mode 100644 index 19461fc00..000000000 --- a/web/src/assets/svgs/tokens/usdc.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> - <path d="M12 24C18.65 24 24 18.65 24 12C24 5.34996 18.65 0 12 0C5.34996 0 0 5.34996 0 12C0 18.65 5.34996 24 12 24Z" fill="#2775CA"/> - <path d="M15.2995 13.9001C15.2995 12.1501 14.2495 11.5501 12.1495 11.3002C10.6496 11.1001 10.3496 10.7002 10.3496 10.0001C10.3496 9.29999 10.8496 8.85011 11.8495 8.85011C12.7495 8.85011 13.2496 9.15011 13.4995 9.90011C13.5496 10.0501 13.6996 10.1501 13.8496 10.1501H14.6495C14.8495 10.1501 14.9995 10.0001 14.9995 9.80015V9.75011C14.7995 8.65007 13.8995 7.8001 12.7495 7.70014V6.50014C12.7495 6.3001 12.5995 6.1501 12.3496 6.10006H11.5996C11.3995 6.10006 11.2495 6.25006 11.1995 6.50014V7.6501C9.69952 7.85014 8.74961 8.85011 8.74961 10.1001C8.74961 11.7502 9.74956 12.4001 11.8495 12.6502C13.2496 12.9001 13.6996 13.2001 13.6996 14.0002C13.6996 14.8002 12.9995 15.3502 12.0496 15.3502C10.7495 15.3502 10.2995 14.8001 10.1495 14.0501C10.0996 13.8502 9.9496 13.7501 9.7996 13.7501H8.94953C8.74961 13.7501 8.59961 13.9001 8.59961 14.1001V14.1502C8.79953 15.4001 9.59956 16.3001 11.2495 16.5502V17.7502C11.2495 17.9501 11.3995 18.1001 11.6495 18.1501H12.3995C12.5995 18.1501 12.7495 18.0001 12.7996 17.7502V16.5502C14.2996 16.3001 15.2995 15.2501 15.2995 13.9001Z" fill="white"/> - <path d="M9.45 19.1502C5.55 17.7503 3.54996 13.4003 5.00004 9.55022C5.75004 7.45022 7.40004 5.85026 9.45 5.10026C9.65004 5.0003 9.75 4.8503 9.75 4.60022V3.90026C9.75 3.70022 9.65004 3.55022 9.45 3.5003C9.39996 3.5003 9.3 3.5003 9.24996 3.55022C4.5 5.05022 1.89996 10.1003 3.39996 14.8503C4.29996 17.6502 6.45 19.8003 9.24996 20.7003C9.45 20.8002 9.65004 20.7003 9.69996 20.5002C9.75 20.4503 9.75 20.4003 9.75 20.3003V19.6002C9.75 19.4502 9.6 19.2503 9.45 19.1502ZM14.75 3.55022C14.55 3.45026 14.35 3.55022 14.3 3.75026C14.25 3.8003 14.25 3.85022 14.25 3.9503V4.65026C14.25 4.8503 14.4 5.05022 14.55 5.1503C18.45 6.55022 20.45 10.9002 19 14.7503C18.25 16.8503 16.6 18.4503 14.55 19.2003C14.35 19.3002 14.25 19.4502 14.25 19.7003V20.4003C14.25 20.6003 14.35 20.7503 14.55 20.8002C14.6 20.8002 14.7 20.8002 14.75 20.7503C19.5 19.2503 22.1 14.2002 20.6 9.45026C19.7 6.60026 17.5 4.45022 14.75 3.55022Z" fill="white"/> -</svg> \ No newline at end of file diff --git a/web/src/components/.gitkeep b/web/src/components/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/web/src/components/BlueIconTextButtonContainer.tsx b/web/src/components/BlueIconTextButtonContainer.tsx deleted file mode 100644 index ca9d45d8d..000000000 --- a/web/src/components/BlueIconTextButtonContainer.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import styled from "styled-components"; -import { hoverShortTransitionTiming } from "styles/commonStyles"; - -export const BlueIconTextButtonContainer = styled.div` - ${hoverShortTransitionTiming} - display: flex; - align-items: center; - text-align: center; - font-size: 14px; - font-weight: 400; - gap: 8px; - cursor: pointer; - - svg path { - fill: ${({ theme }) => theme.primaryBlue}; - } - - label { - margin-top: 1px; - color: ${({ theme }) => theme.primaryBlue}; - } - - &:hover { - svg path { - fill: ${({ theme }) => theme.secondaryBlue}; - } - label { - cursor: pointer; - color: ${({ theme }) => theme.secondaryBlue}; - } - } -`; diff --git a/web/src/components/CaseStarButton.tsx b/web/src/components/CaseStarButton.tsx deleted file mode 100644 index 1ba097686..000000000 --- a/web/src/components/CaseStarButton.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { css } from "styled-components"; - -import { Button, Tooltip } from "@kleros/ui-components-library"; - -import Star from "svgs/icons/star.svg"; - -import useIsDesktop from "hooks/useIsDesktop"; -import useStarredCases from "hooks/useStarredCases"; - -const StyledButton = styled(Button)<{ starred: boolean }>` - background: none; - padding: 0 0 2px 0; - - .button-svg { - width: 24px; - height: 24px; - margin: 0; - fill: none; - - path { - stroke: ${({ theme }) => theme.secondaryPurple}; - } - ${({ starred }) => - starred && - css` - fill: ${({ theme }) => theme.secondaryPurple}; - `}; - } - - :hover { - background: none; - } -`; - -const CaseStarButton: React.FC<{ id: string }> = ({ id }) => { - const { starredCases, starCase } = useStarredCases(); - const isDesktop = useIsDesktop(); - const starred = useMemo(() => Boolean(starredCases.has(id)), [id, starredCases]); - const text = starred ? "Remove from favorite" : "Add to favorite"; - return ( - <Tooltip {...{ text }} place={isDesktop ? "right" : "bottom"}> - <StyledButton - Icon={Star} - text="" - starred={starred} - aria-label={text} - aria-checked={starred} - onClick={(e) => { - e.stopPropagation(); - starCase(id); - }} - /> - </Tooltip> - ); -}; - -export default CaseStarButton; diff --git a/web/src/components/CasesDisplay/CasesGrid.tsx b/web/src/components/CasesDisplay/CasesGrid.tsx deleted file mode 100644 index e482f0020..000000000 --- a/web/src/components/CasesDisplay/CasesGrid.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { useParams } from "react-router-dom"; - -import { StandardPagination } from "@kleros/ui-components-library"; - -import { useIsList } from "context/IsListProvider"; -import useIsDesktop from "hooks/useIsDesktop"; -import { isUndefined } from "utils/index"; -import { decodeURIFilter } from "utils/uri"; - -import { DisputeDetailsFragment } from "queries/useCasesQuery"; - -import DisputeView from "components/DisputeView"; - -import { SkeletonDisputeCard, SkeletonDisputeListItem } from "../StyledSkeleton"; - -const GridContainer = styled.div` - --gap: 16px; - display: grid; - grid-template-columns: repeat(auto-fill, minmax(min(100%, max(312px, (100% - var(--gap) * 2)/3)), 1fr)); - align-items: stretch; - gap: var(--gap); -`; - -const ListContainer = styled.div` - display: flex; - flex-direction: column; - justify-content: center; - gap: 8px; -`; - -// 24px as margin-top since we already have 8px from the flex gap -const StyledPagination = styled(StandardPagination)` - margin-top: 24px; - margin-left: auto; - margin-right: auto; -`; - -export interface ICasesGrid { - disputes?: DisputeDetailsFragment[]; - currentPage: number; - setCurrentPage: (newPage: number) => void; - casesPerPage: number; - totalPages: number; -} - -const CasesGrid: React.FC<ICasesGrid> = ({ disputes, casesPerPage, totalPages, currentPage, setCurrentPage }) => { - const { filter } = useParams(); - const decodedFilter = decodeURIFilter(filter ?? "all"); - const { id: searchValue } = decodedFilter; - const { isList } = useIsList(); - const isDesktop = useIsDesktop(); - - return ( - <> - {isList && isDesktop ? ( - <ListContainer> - {isUndefined(disputes) - ? [...Array(casesPerPage)].map((_, i) => <SkeletonDisputeListItem key={i} />) - : disputes.map((dispute) => { - return <DisputeView key={dispute.id} {...dispute} />; - })} - </ListContainer> - ) : ( - <GridContainer> - {isUndefined(disputes) - ? [...Array(casesPerPage)].map((_, i) => <SkeletonDisputeCard key={i} />) - : disputes.map((dispute) => { - return <DisputeView key={dispute.id} {...dispute} overrideIsList />; - })} - </GridContainer> - )} - - {isUndefined(searchValue) ? ( - <StyledPagination - currentPage={currentPage} - numPages={Math.ceil(totalPages ?? 0)} - callback={(page: number) => setCurrentPage(page)} - /> - ) : null} - </> - ); -}; - -export default CasesGrid; diff --git a/web/src/components/CasesDisplay/Filters.tsx b/web/src/components/CasesDisplay/Filters.tsx deleted file mode 100644 index a8000de1e..000000000 --- a/web/src/components/CasesDisplay/Filters.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import React from "react"; -import styled, { css, useTheme } from "styled-components"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; - -import { useNavigate, useParams, useSearchParams } from "react-router-dom"; - -import { DropdownSelect } from "@kleros/ui-components-library"; - -import GridIcon from "svgs/icons/grid.svg"; -import ListIcon from "svgs/icons/list.svg"; - -import { useIsList } from "context/IsListProvider"; -import useIsDesktop from "hooks/useIsDesktop"; -import { decodeURIFilter, encodeURIFilter, useRootPath } from "utils/uri"; - -const Container = styled.div` - display: flex; - justify-content: end; - gap: 12px; - width: fit-content; -`; - -const IconsContainer = styled.div` - display: flex; - justify-content: center; - align-items: center; - gap: 4px; -`; - -const BaseIconStyles = css` - ${hoverShortTransitionTiming} - cursor: pointer; - fill: ${({ theme }) => theme.primaryBlue}; - width: 16px; - height: 16px; - overflow: hidden; - - :hover { - fill: ${({ theme }) => theme.secondaryBlue}; - } -`; - -const StyledGridIcon = styled(GridIcon)` - ${BaseIconStyles} -`; - -const StyledListIcon = styled(ListIcon)` - ${BaseIconStyles} -`; - -const Filters: React.FC = () => { - const theme = useTheme(); - const { order, filter } = useParams(); - const { ruled, period, ...filterObject } = decodeURIFilter(filter ?? "all"); - const navigate = useNavigate(); - const location = useRootPath(); - const [searchParams] = useSearchParams(); - - const handleStatusChange = (value: string | number) => { - const parsedValue = JSON.parse(value as string); - const encodedFilter = encodeURIFilter({ ...filterObject, ...parsedValue }); - navigate(`${location}/1/${order}/${encodedFilter}?${searchParams.toString()}`); - }; - - const handleOrderChange = (value: string | number) => { - const encodedFilter = encodeURIFilter({ ruled, period, ...filterObject }); - navigate(`${location}/1/${value}/${encodedFilter}?${searchParams.toString()}`); - }; - - const { isList, setIsList } = useIsList(); - const isDesktop = useIsDesktop(); - - return ( - <Container> - <DropdownSelect - smallButton - simpleButton - items={[ - { value: JSON.stringify({}), text: "All Cases", dot: theme.primaryText }, - { value: JSON.stringify({ ruled: false }), text: "In Progress", dot: theme.primaryBlue }, - { value: JSON.stringify({ period: "appeal" }), text: "Appeal", dot: theme.tint }, - { value: JSON.stringify({ ruled: true }), text: "Closed", dot: theme.primaryPurple }, - ]} - defaultValue={JSON.stringify({ ruled, period })} - callback={handleStatusChange} - /> - <DropdownSelect - smallButton - simpleButton - items={[ - { value: "desc", text: "Newest" }, - { value: "asc", text: "Oldest" }, - ]} - defaultValue={order} - callback={handleOrderChange} - /> - {isDesktop ? ( - <IconsContainer> - {isList ? ( - <StyledGridIcon onClick={() => setIsList(false)} /> - ) : ( - <StyledListIcon - onClick={() => { - if (isDesktop) { - setIsList(true); - } - }} - /> - )} - </IconsContainer> - ) : null} - </Container> - ); -}; - -export default Filters; diff --git a/web/src/components/CasesDisplay/Search.tsx b/web/src/components/CasesDisplay/Search.tsx deleted file mode 100644 index d24f5c822..000000000 --- a/web/src/components/CasesDisplay/Search.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import React, { useMemo, useRef, useState } from "react"; -import styled, { css } from "styled-components"; - -import Skeleton from "react-loading-skeleton"; -import { useNavigate, useParams, useSearchParams } from "react-router-dom"; -import { useDebounce } from "react-use"; -import { Searchbar, DropdownCascader } from "@kleros/ui-components-library"; - -import { isEmpty, isUndefined } from "utils/index"; -import { decodeURIFilter, encodeURIFilter, useRootPath } from "utils/uri"; - -import { rootCourtToItems, useCourtTree } from "queries/useCourtTree"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -const Container = styled.div` - display: flex; - flex-direction: column; - gap: ${responsiveSize(8, 16)}; - - ${landscapeStyle( - () => css` - flex-direction: row; - ` - )} -`; - -const SearchBarContainer = styled.div` - width: 100%; - display: flex; - flex-wrap: wrap; - gap: 8px; - margin-bottom: 5px; - z-index: 0; -`; - -const StyledSearchbar = styled(Searchbar)` - flex: 1; - flex-basis: 310px; - - input { - font-size: 16px; - height: 45px; - padding-top: 0px; - padding-bottom: 0px; - } -`; - -const Search: React.FC = () => { - const { page, order, filter } = useParams(); - const location = useRootPath(); - const decodedFilter = decodeURIFilter(filter ?? "all"); - const { id: searchValue, ...filterObject } = decodedFilter; - const [search, setSearch] = useState(searchValue ?? ""); - const initialRenderRef = useRef(true); - const navigate = useNavigate(); - const [searchParams] = useSearchParams(); - - useDebounce( - () => { - if (initialRenderRef.current && isEmpty(search)) { - initialRenderRef.current = false; - return; - } - initialRenderRef.current = false; - const newFilters = isEmpty(search) ? { ...filterObject } : { ...filterObject, id: search }; - const encodedFilter = encodeURIFilter(newFilters); - navigate(`${location}/${page}/${order}/${encodedFilter}?${searchParams.toString()}`); - }, - 500, - [search] - ); - - const { data: courtTreeData } = useCourtTree(); - const items = useMemo(() => { - if (!isUndefined(courtTreeData?.court)) { - const courts = [rootCourtToItems(courtTreeData.court, "id")]; - courts.push({ label: "All Courts", value: "all" }); - return courts; - } - return undefined; - }, [courtTreeData]); - - return ( - <Container> - {items ? ( - <DropdownCascader - items={items} - placeholder={"Select Court"} - onSelect={(value) => { - const { court: _, ...filterWithoutCourt } = decodedFilter; - const newFilter = value === "all" ? filterWithoutCourt : { ...decodedFilter, court: value.toString() }; - navigate(`${location}/${page}/${order}/${encodeURIFilter(newFilter)}?${searchParams.toString()}`); - }} - /> - ) : ( - <Skeleton width={240} height={42} /> - )} - <SearchBarContainer> - <StyledSearchbar - dir="auto" - type="text" - placeholder="Search By ID" - value={search} - onChange={(e) => setSearch(e.target.value)} - /> - </SearchBarContainer> - </Container> - ); -}; - -export default Search; diff --git a/web/src/components/CasesDisplay/Stats.tsx b/web/src/components/CasesDisplay/Stats.tsx deleted file mode 100644 index 9f453692d..000000000 --- a/web/src/components/CasesDisplay/Stats.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -const FieldWrapper = styled.div` - display: inline-flex; - gap: 8px; -`; - -const SeparatorLabel = styled.label` - margin: 0 8px; - color: ${({ theme }) => theme.primaryText}; -`; - -const StyledLabel = styled.label` - color: ${({ theme }) => theme.primaryText}; -`; - -const Field: React.FC<{ label: string; value: string }> = ({ label, value }) => ( - <FieldWrapper> - <StyledLabel>{label}</StyledLabel> - <small>{value}</small> - </FieldWrapper> -); - -const Separator: React.FC = () => <SeparatorLabel>|</SeparatorLabel>; - -export interface IStats { - totalDisputes: number; - closedDisputes: number; -} - -const Stats: React.FC<IStats> = ({ totalDisputes, closedDisputes }) => { - const inProgressDisputes = (totalDisputes - closedDisputes).toString(); - - const fields = [ - { label: "Total", value: totalDisputes.toString() }, - { label: "In Progress", value: inProgressDisputes }, - { label: "Closed", value: closedDisputes.toString() }, - ]; - - return ( - <div> - {fields.map(({ label, value }, i) => ( - <React.Fragment key={i}> - <Field {...{ label, value }} /> - {i + 1 < fields.length ? <Separator /> : null} - </React.Fragment> - ))} - </div> - ); -}; - -export default Stats; diff --git a/web/src/components/CasesDisplay/StatsAndFilters.tsx b/web/src/components/CasesDisplay/StatsAndFilters.tsx deleted file mode 100644 index 78dd78ee5..000000000 --- a/web/src/components/CasesDisplay/StatsAndFilters.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -import Filters from "./Filters"; -import Stats, { IStats } from "./Stats"; - -const Container = styled.div` - display: flex; - flex-wrap: wrap; - gap: 8px; - margin-top: ${responsiveSize(4, 8)}; - margin-bottom: ${responsiveSize(16, 32)}; - justify-content: space-between; -`; - -const StatsAndFilters: React.FC<IStats> = ({ totalDisputes, closedDisputes }) => ( - <Container> - <Stats {...{ totalDisputes, closedDisputes }} /> - <Filters /> - </Container> -); - -export default StatsAndFilters; diff --git a/web/src/components/CasesDisplay/index.tsx b/web/src/components/CasesDisplay/index.tsx deleted file mode 100644 index e0b40b6f6..000000000 --- a/web/src/components/CasesDisplay/index.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { useLocation } from "react-router-dom"; -import { useAccount } from "wagmi"; - -import ArrowIcon from "svgs/icons/arrow.svg"; - -import { responsiveSize } from "styles/responsiveSize"; - -import CasesGrid, { ICasesGrid } from "./CasesGrid"; -import Search from "./Search"; -import StatsAndFilters from "./StatsAndFilters"; -import { StyledArrowLink } from "../StyledArrowLink"; - -const TitleContainer = styled.div` - display: flex; - justify-content: space-between; - align-items: center; - flex-wrap: wrap; - margin-bottom: ${responsiveSize(12, 24)}; -`; - -const StyledTitle = styled.h1` - margin: 0px; - font-size: ${responsiveSize(20, 24)}; -`; - -const StyledLabel = styled.label` - font-size: ${responsiveSize(14, 16)}; -`; - -const LinksContainer = styled.div` - display: flex; - flex-direction: row; - gap: 16px; -`; - -interface ICasesDisplay extends ICasesGrid { - numberDisputes?: number; - numberClosedDisputes?: number; - title?: string; - className?: string; -} - -const CasesDisplay: React.FC<ICasesDisplay> = ({ - disputes, - currentPage, - setCurrentPage, - numberDisputes, - numberClosedDisputes, - casesPerPage, - title = "Cases", - className, - totalPages, -}) => { - const location = useLocation(); - const { isConnected } = useAccount(); - const profileLink = isConnected ? `/profile/1/desc/all` : null; - - return ( - <div {...{ className }}> - <TitleContainer className="title"> - <StyledTitle>{title}</StyledTitle> - <LinksContainer> - {location.pathname.startsWith("/cases/display") && profileLink ? ( - <StyledArrowLink to={profileLink}> - My Cases <ArrowIcon /> - </StyledArrowLink> - ) : null} - {location.pathname.startsWith("/cases/display") ? ( - <StyledArrowLink to={"/resolver"}> - Create a case <ArrowIcon /> - </StyledArrowLink> - ) : null} - </LinksContainer> - </TitleContainer> - <Search /> - <StatsAndFilters totalDisputes={numberDisputes || 0} closedDisputes={numberClosedDisputes || 0} /> - - {disputes?.length === 0 ? ( - <StyledLabel>No cases found</StyledLabel> - ) : ( - <CasesGrid - disputes={disputes} - {...{ - casesPerPage, - totalPages, - currentPage, - setCurrentPage, - }} - /> - )} - </div> - ); -}; - -export default CasesDisplay; diff --git a/web/src/components/ClaimPnkButton.tsx b/web/src/components/ClaimPnkButton.tsx deleted file mode 100644 index e3e5c1bb8..000000000 --- a/web/src/components/ClaimPnkButton.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import React, { useState } from "react"; - -import { formatEther } from "viem"; -import { useAccount, useChainId, usePublicClient, useWalletClient, useConfig } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import FaucetIcon from "svgs/icons/faucet.svg"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { REFETCH_INTERVAL } from "consts/index"; -import { - simulatePnkFaucet, - useReadPnkBalanceOf, - useReadPnkFaucetAmount, - useReadPnkFaucetWithdrewAlready, - pnkFaucetAddress, -} from "hooks/contracts/generated"; -import { formatPNK } from "utils/format"; -import { isUndefined } from "utils/index"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import Popup, { PopupType } from "./Popup"; - -const ClaimPnkButton: React.FC = () => { - const [isSending, setIsSending] = useState(false); - const [isPopupOpen, setIsPopupOpen] = useState(false); - const [hash, setHash] = useState<`0x${string}` | undefined>(); - - const chainId = useChainId(); - const { address } = useAccount(); - const { data: claimed } = useReadPnkFaucetWithdrewAlready({ - query: { - enabled: !isUndefined(address), - refetchInterval: REFETCH_INTERVAL, - }, - args: [address ?? "0x00"], - }); - - const faucetAddress = pnkFaucetAddress[chainId]; - const { data: balance } = useReadPnkBalanceOf({ - args: [faucetAddress], - }); - const { data: dripAmount } = useReadPnkFaucetAmount(); - const { data: walletClient } = useWalletClient(); - const publicClient = usePublicClient(); - const wagmiConfig = useConfig(); - - const handleRequest = async () => { - setIsSending(true); - const { request } = await simulatePnkFaucet(wagmiConfig, { - functionName: "request", - }); - if (walletClient && publicClient) { - wrapWithToast(async () => await walletClient.writeContract(request), publicClient) - .finally(() => { - setIsSending(false); - }) - .then(({ result, status }) => { - setIsPopupOpen(status); - status && setHash(result?.transactionHash); - }); - } - }; - const faucetCheck = !isUndefined(balance) && parseInt(formatEther(balance)) > 200; - return ( - <> - {chainId === DEFAULT_CHAIN && !claimed ? ( - <Button - variant="primary" - text={faucetCheck ? "Claim PNK" : "Empty Faucet"} - onClick={handleRequest} - isLoading={isSending} - disabled={isSending || claimed || !faucetCheck || isUndefined(address)} - Icon={faucetCheck ? FaucetIcon : undefined} - /> - ) : null} - {isPopupOpen && ( - <Popup - title="Success!" - popupType={PopupType.SWAP_SUCCESS} - hash={hash} - amount={formatPNK(dripAmount ?? BigInt(0))} - isClaim - setIsOpen={setIsPopupOpen} - /> - )} - </> - ); -}; -export default ClaimPnkButton; diff --git a/web/src/components/ConnectWallet/AccountDisplay.tsx b/web/src/components/ConnectWallet/AccountDisplay.tsx deleted file mode 100644 index a8b74cb31..000000000 --- a/web/src/components/ConnectWallet/AccountDisplay.tsx +++ /dev/null @@ -1,183 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import Identicon from "react-identicons"; -import { isAddress } from "viem"; -import { normalize } from "viem/ens"; -import { useAccount, useChainId, useEnsAvatar, useEnsName } from "wagmi"; - -import { getChain } from "consts/chains"; -import { shortenAddress } from "utils/shortenAddress"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -const Container = styled.div` - display: flex; - flex-direction: column; - justify-content: space-between; - height: auto; - gap: 8px; - align-items: center; - background-color: ${({ theme }) => theme.whiteBackground}; - padding: 0px; - cursor: pointer; - - &:hover { - label { - color: ${({ theme }) => theme.white} !important; - transition: color 0.2s; - } - } - - ${landscapeStyle( - () => css` - background-color: ${({ theme }) => theme.whiteLowOpacitySubtle}; - &:hover { - transition: background-color 0.1s; - background-color: ${({ theme }) => theme.whiteLowOpacityStrong}; - } - flex-direction: row; - align-content: center; - border-radius: 300px; - gap: 0px; - padding: 0 12px; - ` - )} -`; - -const AccountContainer = styled.div` - min-height: 32px; - display: flex; - align-items: center; - width: fit-content; - gap: 8px; - - > label { - font-size: 16px; - font-weight: 600; - } - - ${landscapeStyle( - () => css` - gap: 12px; - > label { - color: ${({ theme }) => theme.white}CC !important; - font-weight: 400; - font-size: 14px; - } - ` - )} -`; - -const ChainConnectionContainer = styled.div` - display: flex; - width: fit-content; - min-height: 32px; - align-items: center; - padding-left: 0px; - > label { - color: ${({ theme }) => theme.success}; - font-size: 16px; - - font-weight: 500; - } - - :before { - content: ""; - width: 8px; - height: 8px; - margin: 0px 13px 0px 3px; - border-radius: 50%; - background-color: ${({ theme }) => theme.success}; - } - - ${landscapeStyle( - () => css` - display: none; - ` - )} -`; - -const StyledIdenticon = styled(Identicon)<{ size: `${number}` }>` - align-items: center; - width: ${({ size }) => size + "px"} !important; - height: ${({ size }) => size + "px"} !important; -`; - -const StyledAvatar = styled.img<{ size: `${number}` }>` - align-items: center; - object-fit: cover; - border-radius: 50%; - width: ${({ size }) => size + "px"}; - height: ${({ size }) => size + "px"}; -`; - -const StyledSmallLabel = styled.label` - font-size: 14px !important; -`; - -interface IIdenticonOrAvatar { - size?: `${number}`; - address?: `0x${string}`; -} - -export const IdenticonOrAvatar: React.FC<IIdenticonOrAvatar> = ({ size = "20", address: propAddress }) => { - const { address: defaultAddress } = useAccount(); - const address = propAddress || defaultAddress; - - const { data: name } = useEnsName({ - address, - chainId: 1, - }); - const { data: avatar } = useEnsAvatar({ - name: normalize(name ?? ""), - chainId: 1, - }); - - return avatar ? ( - <StyledAvatar src={avatar} alt="avatar" size={size} /> - ) : ( - <StyledIdenticon size={size} string={address} /> - ); -}; - -interface IAddressOrName { - address?: `0x${string}`; - smallDisplay?: boolean; -} - -export const AddressOrName: React.FC<IAddressOrName> = ({ address: propAddress, smallDisplay }) => { - const { address: defaultAddress } = useAccount(); - const address = propAddress || defaultAddress; - - const { data } = useEnsName({ - address, - chainId: 1, - }); - - const content = data ?? (isAddress(address!) ? shortenAddress(address) : address); - - return smallDisplay ? <StyledSmallLabel>{content}</StyledSmallLabel> : <label>{content}</label>; -}; - -export const ChainDisplay: React.FC = () => { - const chainId = useChainId(); - const chain = getChain(chainId); - return <label>{chain?.name}</label>; -}; - -const AccountDisplay: React.FC = () => { - return ( - <Container> - <AccountContainer> - <IdenticonOrAvatar size="20" /> - <AddressOrName /> - </AccountContainer> - <ChainConnectionContainer> - <ChainDisplay /> - </ChainConnectionContainer> - </Container> - ); -}; - -export default AccountDisplay; diff --git a/web/src/components/ConnectWallet/index.tsx b/web/src/components/ConnectWallet/index.tsx deleted file mode 100644 index 9ee45d67e..000000000 --- a/web/src/components/ConnectWallet/index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import React, { useCallback } from "react"; - -import { useAppKit, useAppKitState } from "@reown/appkit/react"; -import { useAccount, useSwitchChain } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { SUPPORTED_CHAINS, DEFAULT_CHAIN } from "consts/chains"; - -import AccountDisplay from "./AccountDisplay"; - -export const SwitchChainButton: React.FC<{ className?: string }> = ({ className }) => { - // TODO isLoading is not documented, but exists in the type, might have changed to isPending - const { switchChain, isLoading } = useSwitchChain(); - const handleSwitch = useCallback(() => { - if (!switchChain) { - console.error("Cannot switch network. Please do it manually."); - return; - } - try { - switchChain({ chainId: DEFAULT_CHAIN }); - } catch (err) { - console.error(err); - } - }, [switchChain]); - return ( - <Button - {...{ className }} - isLoading={isLoading} - disabled={isLoading} - text={`Switch to ${SUPPORTED_CHAINS[DEFAULT_CHAIN].name}`} - onClick={handleSwitch} - /> - ); -}; - -const ConnectButton: React.FC<{ className?: string }> = ({ className }) => { - const { open } = useAppKit(); - const { open: isOpen } = useAppKitState(); - return ( - <Button - {...{ className }} - disabled={isOpen} - small - text={"Connect"} - onClick={async () => open({ view: "Connect" })} - /> - ); -}; - -const ConnectWallet: React.FC<{ className?: string }> = ({ className }) => { - const { isConnected, chainId } = useAccount(); - - if (isConnected) { - if (chainId !== DEFAULT_CHAIN) { - return <SwitchChainButton {...{ className }} />; - } else return <AccountDisplay />; - } else return <ConnectButton {...{ className }} />; -}; - -export default ConnectWallet; diff --git a/web/src/components/DisputePreview/Alias.tsx b/web/src/components/DisputePreview/Alias.tsx deleted file mode 100644 index d2cda4683..000000000 --- a/web/src/components/DisputePreview/Alias.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import Skeleton from "react-loading-skeleton"; -import { isAddress } from "viem"; -import { useEnsAddress } from "wagmi"; - -import { AddressOrName, IdenticonOrAvatar } from "../ConnectWallet/AccountDisplay"; - -const AliasContainer = styled.div` - min-height: 32px; - display: flex; - gap: 8px; - align-items: center; - max-width: 100%; -`; - -const TextContainer = styled.div` - display: flex; - flex-wrap: wrap; - max-width: 100%; - > label { - color: ${({ theme }) => theme.primaryText}; - font-size: 14px; - word-wrap: break-word; - max-width: 100%; - } -`; - -interface IAlias { - name: string; - address: `0x${string}`; -} - -const AliasDisplay: React.FC<IAlias> = ({ name, address }) => { - const { data: addressFromENS, isLoading } = useEnsAddress({ - query: { - // if alias.address is not an Address, we treat it as ENS and try to fetch address from there - enabled: !isAddress(address), - }, - name: address, - chainId: 1, - }); - - // try fetching ens name, else go with address - const resolvedAddress = addressFromENS ?? (address as `0x${string}`); - - return ( - <AliasContainer dir="auto"> - {isLoading ? <Skeleton width={30} height={24} /> : <IdenticonOrAvatar address={resolvedAddress} size="24" />} - <TextContainer> - {isLoading ? <Skeleton width={30} height={24} /> : <AddressOrName address={resolvedAddress} />}&nbsp; - <label>({name})</label> - </TextContainer> - </AliasContainer> - ); -}; - -export default AliasDisplay; diff --git a/web/src/components/DisputePreview/DisputeContext.tsx b/web/src/components/DisputePreview/DisputeContext.tsx deleted file mode 100644 index 435bc47a8..000000000 --- a/web/src/components/DisputePreview/DisputeContext.tsx +++ /dev/null @@ -1,178 +0,0 @@ -import React, { useMemo } from "react"; -import styled from "styled-components"; - -import { DisputeDetails } from "@kleros/kleros-sdk/src/dataMappings/utils/disputeDetailsTypes"; -import { useAccount } from "wagmi"; - -import { INVALID_DISPUTE_DATA_ERROR, RPC_ERROR } from "consts/index"; -import { Answer as IAnswer } from "context/NewDisputeContext"; -import { isUndefined } from "utils/index"; - -import { responsiveSize } from "styles/responsiveSize"; - -import { DisputeDetailsQuery, VotingHistoryQuery } from "src/graphql/graphql"; - -import ReactMarkdown from "components/ReactMarkdown"; -import { StyledSkeleton } from "components/StyledSkeleton"; - -import { Divider } from "../Divider"; -import { ExternalLink } from "../ExternalLink"; - -import AliasDisplay from "./Alias"; -import RulingAndRewardsIndicators from "../Verdict/RulingAndRewardsIndicators"; -import CardLabel from "../DisputeView/CardLabels"; - -const StyledH1 = styled.h1` - margin: 0; - word-wrap: break-word; - font-size: ${responsiveSize(20, 26)}; - line-height: 24px; -`; - -const TitleSection = styled.div` - display: flex; - flex-direction: column; - gap: 12px; -`; - -const ReactMarkdownWrapper = styled.div` - & p:first-of-type { - margin: 0; - } -`; - -const VotingOptions = styled.div` - display: flex; - flex-direction: column; - gap: 8px; -`; - -const AnswersContainer = styled.div` - display: flex; - flex-direction: column; - gap: ${responsiveSize(4, 2)}; -`; - -const AnswersHeader = styled.small` - margin: 0; -`; - -export const AnswerTitleAndDescription = styled.div` - display: block; -`; - -export const AnswerTitle = styled.small` - display: inline; -`; - -export const AnswerDescription = styled.small` - display: inline; - font-weight: 400; - color: ${({ theme }) => theme.secondaryText}; -`; - -const AliasesContainer = styled.div` - display: flex; - flex-wrap: wrap; - gap: ${responsiveSize(8, 20)}; -`; - -const RulingAndRewardsAndLabels = styled.div` - display: flex; - flex-direction: row; - flex-wrap: wrap; - gap: 8px; -`; - -interface IDisputeContext { - disputeDetails?: DisputeDetails; - isRpcError?: boolean; - dispute?: DisputeDetailsQuery | undefined; - - disputeId?: string; - votingHistory?: VotingHistoryQuery | undefined; -} - -export const DisputeContext: React.FC<IDisputeContext> = ({ - disputeDetails, - isRpcError = false, - dispute, - disputeId, - votingHistory, -}) => { - const { isDisconnected } = useAccount(); - const errMsg = isRpcError ? RPC_ERROR : INVALID_DISPUTE_DATA_ERROR; - const rounds = votingHistory?.dispute?.rounds; - const jurorRewardsDispersed = useMemo(() => Boolean(rounds?.every((round) => round.jurorRewardsDispersed)), [rounds]); - console.log({ jurorRewardsDispersed }, disputeDetails); - - return ( - <> - <TitleSection> - <StyledH1 dir="auto"> - {isUndefined(disputeDetails) ? <StyledSkeleton /> : (disputeDetails?.title ?? errMsg)} - </StyledH1> - {!isUndefined(disputeDetails) && - !isUndefined(dispute) && - !isUndefined(disputeId) && - !isUndefined(votingHistory) ? ( - <RulingAndRewardsAndLabels> - {!isUndefined(Boolean(dispute?.dispute?.ruled)) || jurorRewardsDispersed ? ( - <RulingAndRewardsIndicators - ruled={Boolean(dispute?.dispute?.ruled)} - jurorRewardsDispersed={jurorRewardsDispersed} - /> - ) : null} - {!isDisconnected ? ( - <CardLabel {...{ disputeId }} round={rounds?.length - 1} isList={false} isOverview={true} /> - ) : null} - </RulingAndRewardsAndLabels> - ) : null} - <Divider /> - </TitleSection> - {disputeDetails?.question?.trim() || disputeDetails?.description?.trim() ? ( - <div> - {disputeDetails?.question?.trim() ? ( - <ReactMarkdownWrapper dir="auto"> - <ReactMarkdown>{disputeDetails.question}</ReactMarkdown> - </ReactMarkdownWrapper> - ) : null} - {disputeDetails?.description?.trim() ? ( - <ReactMarkdownWrapper dir="auto"> - <ReactMarkdown>{disputeDetails.description}</ReactMarkdown> - </ReactMarkdownWrapper> - ) : null} - </div> - ) : null} - - {isUndefined(disputeDetails?.frontendUrl) ? null : ( - <ExternalLink to={disputeDetails?.frontendUrl} target="_blank" rel="noreferrer"> - Go to arbitrable - </ExternalLink> - )} - <VotingOptions> - {isUndefined(disputeDetails) ? null : <AnswersHeader>Voting Options</AnswersHeader>} - <AnswersContainer> - {disputeDetails?.answers?.map((answer: IAnswer, i: number) => ( - <AnswerTitleAndDescription dir="auto" key={answer.title}> - <label>{i + 1}. </label> - <AnswerTitle>{answer.title}</AnswerTitle> - <AnswerDescription>{answer.description.trim() ? ` - ${answer.description}` : null}</AnswerDescription> - </AnswerTitleAndDescription> - ))} - </AnswersContainer> - </VotingOptions> - - {isUndefined(disputeDetails?.aliases) ? null : ( - <> - <Divider /> - <AliasesContainer> - {Object.keys(disputeDetails.aliases).map((key) => ( - <AliasDisplay name={key} key={key} address={disputeDetails.aliases[key]} /> - ))} - </AliasesContainer> - </> - )} - </> - ); -}; diff --git a/web/src/components/DisputePreview/Policies.tsx b/web/src/components/DisputePreview/Policies.tsx deleted file mode 100644 index 013e2208a..000000000 --- a/web/src/components/DisputePreview/Policies.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { useParams } from "react-router-dom"; - -import PaperclipIcon from "svgs/icons/paperclip.svg"; -import PolicyIcon from "svgs/icons/policy.svg"; - -import { getIpfsUrl } from "utils/getIpfsUrl"; -import { isUndefined } from "utils/index"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; -import { landscapeStyle } from "styles/landscapeStyle"; - -import { InternalLink } from "components/InternalLink"; - -const Container = styled.div` - display: flex; - align-items: center; - flex-direction: row; - flex-wrap: wrap; - gap: 12px 16px; - padding: 12px 16px 20px; - background-color: ${({ theme }) => theme.mediumBlue}; - - ${landscapeStyle( - () => css` - padding: 20px 32px; - ` - )} -`; - -const StyledP = styled.p` - font-size: 14px; - margin: 0; - color: ${({ theme }) => theme.primaryBlue}; -`; - -const StyledPolicyIcon = styled(PolicyIcon)` - width: 16px; - fill: ${({ theme }) => theme.primaryBlue}; -`; - -const StyledPaperclipIcon = styled(PaperclipIcon)` - width: 16px; - fill: ${({ theme }) => theme.primaryBlue}; -`; - -const StyledInternalLink = styled(InternalLink)` - ${hoverShortTransitionTiming} - display: flex; - gap: 4px; - - &:hover { - svg { - fill: ${({ theme }) => theme.secondaryBlue}; - } - } -`; - -type Attachment = { - label?: string; - uri: string; -}; -interface IPolicies { - disputePolicyURI?: string; - courtId?: string; - attachment?: Attachment; -} - -export const Policies: React.FC<IPolicies> = ({ disputePolicyURI, courtId, attachment }) => { - const { id } = useParams(); - - return ( - <Container> - <StyledP>Policy documents:</StyledP> - {!isUndefined(attachment) && !isUndefined(attachment.uri) ? ( - <StyledInternalLink - to={`/attachment/?disputeId=${id}&title=${"Case Policy"}&url=${getIpfsUrl(attachment.uri)}`} - > - <StyledPaperclipIcon /> - {attachment.label ?? "Attachment"} - </StyledInternalLink> - ) : null} - {isUndefined(disputePolicyURI) ? null : ( - <StyledInternalLink - to={`/attachment/?disputeId=${id}&title=${"Dispute Policy"}&url=${getIpfsUrl(disputePolicyURI)}`} - > - <StyledPolicyIcon /> - Dispute Policy - </StyledInternalLink> - )} - {isUndefined(courtId) ? null : ( - <StyledInternalLink to={`/courts/${courtId}/policy?section=description`}> - <StyledPolicyIcon /> - Court Policy - </StyledInternalLink> - )} - </Container> - ); -}; diff --git a/web/src/components/DisputeView/CardLabels/Label.tsx b/web/src/components/DisputeView/CardLabels/Label.tsx deleted file mode 100644 index 766f0d8fe..000000000 --- a/web/src/components/DisputeView/CardLabels/Label.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { Theme, useTheme } from "styled-components"; - -const COLORS: Record<string, Array<keyof Theme>> = { - red: ["error", "errorLight"], - green: ["success", "successLight"], - blue: ["primaryBlue", "mediumBlue"], - purple: ["secondaryPurple", "mediumPurple"], - lightPurple: ["tint", "mediumPurple"], - grey: ["secondaryText", "lightGrey"], -}; - -export type IColors = keyof typeof COLORS; - -const LabelContainer = styled.div<{ backgroundColor: string }>` - display: inline-flex; - width: max-content; - padding: 4px 8px; - align-items: center; - gap: 8px; - border-radius: 300px; - background-color: ${({ backgroundColor }) => backgroundColor}; -`; - -const IconContainer = styled.div<{ contentColor: string }>` - height: 14px; - width: 14px; - display: flex; - align-items: center; - justify-content: center; - > svg { - fill: ${({ contentColor }) => contentColor}; - } -`; - -const StyledText = styled.label<{ contentColor: string }>` - font-size: 12px; - font-weight: 400; - color: ${({ contentColor }) => contentColor}; -`; - -export interface ILabelProps { - text: string; - icon: React.FC<React.SVGAttributes<SVGElement>>; - color: keyof typeof COLORS; -} - -const Label: React.FC<ILabelProps> = ({ text, icon: Icon, color }) => { - const theme = useTheme(); - const [contentColor, backgroundColor] = useMemo(() => { - return COLORS[color].map((color) => theme[color]); - }, [theme, color]); - - return ( - <LabelContainer {...{ backgroundColor }}> - <IconContainer {...{ contentColor }}> - <Icon /> - </IconContainer> - <StyledText {...{ contentColor }}>{text}</StyledText> - </LabelContainer> - ); -}; - -export default Label; diff --git a/web/src/components/DisputeView/CardLabels/RewardsAndFundLabel.tsx b/web/src/components/DisputeView/CardLabels/RewardsAndFundLabel.tsx deleted file mode 100644 index bf53dc8c9..000000000 --- a/web/src/components/DisputeView/CardLabels/RewardsAndFundLabel.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from "react"; -import styled, { useTheme } from "styled-components"; - -import EthIcon from "svgs/icons/eth.svg"; -import PnkIcon from "svgs/icons/kleros.svg"; - -import NumberDisplay from "components/NumberDisplay"; - -const Container = styled.div` - display: flex; - gap: 4px; - align-items: center; - flex-wrap: wrap; -`; - -const StyledIcon = styled.div<{ color: string }>` - width: 12px; - height: 12px; - - path { - fill: ${({ color }) => color}; - } -`; - -const StyledLabel = styled.label<{ color: string }>` - color: ${({ color }) => color}; -`; -interface IRewardsAndFundLabel { - value: string; - unit: "ETH" | "PNK"; - isFund?: boolean; -} - -const RewardsAndFundLabel: React.FC<IRewardsAndFundLabel> = ({ value, unit = "ETH", isFund = false }) => { - const theme = useTheme(); - const isWon = Number(value) > 0; - const color = isWon ? theme.success : theme.error; - return Number(value) !== 0 ? ( - <Container> - <StyledLabel color={isFund ? theme.tint : color}> - <NumberDisplay {...{ value, unit }} showUnitInDisplay={false} /> - </StyledLabel> - <StyledIcon as={unit === "ETH" ? EthIcon : PnkIcon} color={isFund ? theme.tint : color} /> - </Container> - ) : null; -}; - -export default RewardsAndFundLabel; diff --git a/web/src/components/DisputeView/CardLabels/index.tsx b/web/src/components/DisputeView/CardLabels/index.tsx deleted file mode 100644 index 6a37e8a8e..000000000 --- a/web/src/components/DisputeView/CardLabels/index.tsx +++ /dev/null @@ -1,177 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { css } from "styled-components"; - -import Skeleton from "react-loading-skeleton"; -import { formatEther, formatUnits } from "viem"; -import { useAccount } from "wagmi"; - -import AppealIcon from "svgs/label-icons/appeal.svg"; -import EvidenceIcon from "svgs/label-icons/evidence.svg"; -import ForgotToVoteIcon from "svgs/label-icons/forgot-vote.svg"; -import FundedIcon from "svgs/label-icons/funded.svg"; -import NotDrawnIcon from "svgs/label-icons/minus-circle.svg"; -import CanVoteIcon from "svgs/label-icons/vote.svg"; -import VotedIcon from "svgs/label-icons/voted.svg"; - -import { useLabelInfoQuery } from "hooks/queries/useLabelInfoQuery"; -import { getLocalRounds } from "utils/getLocalRounds"; -import { isUndefined } from "utils/index"; - -import { ClassicContribution } from "src/graphql/graphql"; - -import Label, { IColors } from "./Label"; -import RewardsAndFundLabel from "./RewardsAndFundLabel"; - -const Container = styled.div<{ isList: boolean; isOverview: boolean }>` - display: flex; - gap: 8px; - flex-direction: column; - align-items: end; - - ${({ isList }) => - !isList && - css` - margin-top: 24px; - width: 100%; - flex-wrap: wrap; - flex-direction: row; - align-items: center; - `} - - ${({ isOverview }) => - isOverview && - css` - margin-top: 0; - flex-direction: row; - width: auto; - `} -`; - -const RewardsContainer = styled.div` - display: flex; - gap: 4px 8px; - flex-wrap: wrap; - justify-content: end; -`; -interface ICardLabels { - disputeId: string; - round: number; - isList: boolean; - isOverview?: boolean; -} - -const LabelArgs: Record<string, { text: string; icon: React.FC<React.SVGAttributes<SVGElement>>; color: IColors }> = { - EvidenceTime: { text: "Evidence time", icon: EvidenceIcon, color: "blue" }, - NotDrawn: { text: "You were not drawn", icon: NotDrawnIcon, color: "grey" }, - CanVote: { text: "You can vote now", icon: CanVoteIcon, color: "blue" }, - Voted: { text: "You voted", icon: VotedIcon, color: "purple" }, - DidNotVote: { text: "You did not vote", icon: ForgotToVoteIcon, color: "purple" }, - CanFund: { text: "Appeal possible", icon: AppealIcon, color: "lightPurple" }, - Funded: { text: "You funded an appeal", icon: FundedIcon, color: "lightPurple" }, -}; - -const getFundingRewards = (contributions: ClassicContribution[], closed: boolean) => { - if (isUndefined(contributions) || contributions.length === 0) return 0; - const contribution = contributions.reduce((acc, val) => { - if (isUndefined(val?.rewardAmount) && isUndefined(val?.amount)) return acc; - if (closed) { - acc += val.rewardAmount === null ? -1 * Number(val.amount) : Number(val.rewardAmount) - Number(val.amount); - } else { - acc += Number(val.amount); - } - return acc; - }, 0); - return Number(formatUnits(BigInt(contribution), 18)); -}; - -const CardLabel: React.FC<ICardLabels> = ({ disputeId, round, isList, isOverview = false }) => { - const { address } = useAccount(); - const { data: labelInfo, isLoading } = useLabelInfoQuery(address?.toLowerCase(), disputeId); - const localRounds = getLocalRounds(labelInfo?.dispute?.disputeKitDispute); - const rounds = labelInfo?.dispute?.rounds; - const currentRound = rounds?.[round]; - - const period = labelInfo?.dispute?.period; - const hasVotedCurrentRound = !isUndefined(currentRound?.drawnJurors?.[0]?.vote?.choice); - const isDrawnCurrentRound = currentRound?.drawnJurors.length !== 0; - const hasVotedInDispute = rounds?.some((item) => !isUndefined(item.drawnJurors?.[0]?.vote?.choice)); - const isDrawnInDispute = rounds?.some((item) => item?.drawnJurors.length); - const hasFundedCurrentRound = localRounds?.[round]?.contributions.length !== 0; - const currentRoundFund = getFundingRewards(localRounds?.[round]?.contributions, period === "execution"); - const shifts = labelInfo?.dispute?.shifts; - - const contributions = useMemo( - () => - localRounds?.reduce((acc, val) => { - acc.push(...val.contributions); - return acc; - }, []), - [localRounds] - ); - - const contributionRewards = useMemo(() => getFundingRewards(contributions, true), [contributions]); - const hasFundedDispute = contributions?.length !== 0; // if ever funded the dispute in any round - - const labelData = useMemo(() => { - if (period === "evidence") return LabelArgs.EvidenceTime; - if (!isDrawnCurrentRound && period === "appeal") - return hasFundedCurrentRound ? LabelArgs.Funded : LabelArgs.CanFund; - - if (!isDrawnCurrentRound && period === "execution" && hasFundedDispute) return LabelArgs.Funded; - if (period === "execution" && hasVotedInDispute) return LabelArgs.Voted; - if (period === "execution" && isDrawnInDispute && !hasVotedInDispute) return LabelArgs.DidNotVote; - if (!isDrawnCurrentRound) return LabelArgs.NotDrawn; - - if (["commit", "vote"].includes(period ?? "") && !hasVotedCurrentRound) return LabelArgs.CanVote; - if (hasVotedCurrentRound) return LabelArgs.Voted; // plus rewards if execution - return LabelArgs.DidNotVote; // plus rewards if execution - }, [ - hasFundedCurrentRound, - hasVotedCurrentRound, - hasFundedDispute, - hasVotedInDispute, - isDrawnCurrentRound, - isDrawnInDispute, - period, - ]); - - const rewardsData = useMemo(() => { - const shift = shifts?.reduce( - (acc, val) => { - acc.ethShift += Number(formatEther(val.ethAmount)); - acc.pnkShift += Number(formatUnits(val.pnkAmount, 18)); - return acc; - }, - { ethShift: 0, pnkShift: 0 } - ); - if (isUndefined(shift)) return undefined; - shift.ethShift += contributionRewards; - return shift; - }, [contributionRewards, shifts]); - - return ( - <Container {...{ isList, isOverview }}> - {isLoading ? ( - <Skeleton width={130} height={14} /> - ) : ( - <> - <Label {...labelData} /> - <RewardsContainer> - {" "} - {!isUndefined(rewardsData) && period === "execution" ? ( - <> - <RewardsAndFundLabel value={rewardsData.ethShift.toString()} unit="ETH" /> - <RewardsAndFundLabel value={rewardsData.pnkShift.toString()} unit="PNK" /> - </> - ) : null} - {!isUndefined(currentRoundFund) && period === "appeal" ? ( - <RewardsAndFundLabel value={currentRoundFund.toString()} unit="ETH" isFund /> - ) : null} - </RewardsContainer> - </> - )} - </Container> - ); -}; - -export default CardLabel; diff --git a/web/src/components/DisputeView/DisputeCardView.tsx b/web/src/components/DisputeView/DisputeCardView.tsx deleted file mode 100644 index 7cf554918..000000000 --- a/web/src/components/DisputeView/DisputeCardView.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { Link } from "react-router-dom"; - -import { Card } from "@kleros/ui-components-library"; - -import { Periods } from "consts/periods"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; -import { landscapeStyle } from "styles/landscapeStyle"; - -import { StyledSkeleton } from "components/StyledSkeleton"; - -import DisputeInfo from "./DisputeInfo"; -import PeriodBanner from "./PeriodBanner"; - -const StyledCard = styled(Card)` - ${hoverShortTransitionTiming} - width: 100%; - height: 100%; - min-height: 290px; -`; - -const CardContainer = styled.div` - height: calc(100% - 45px); - padding: 20px 16px; - display: flex; - flex-direction: column; - justify-content: space-between; - - ${landscapeStyle( - () => css` - padding: 20px 24px; - ` - )} -`; - -const StyledCaseCardTitle = styled.h3` - margin-bottom: 20px; -`; - -const StyledCaseCardTitleSkeleton = styled(StyledSkeleton)` - margin-bottom: 20px; -`; - -const TruncatedTitle = ({ text, maxLength }) => { - const truncatedText = text.length <= maxLength ? text : text.slice(0, maxLength) + "…"; - return <StyledCaseCardTitle dir="auto">{truncatedText}</StyledCaseCardTitle>; -}; - -interface IDisputeCardView { - title: string; - disputeID?: string; - courtId?: string; - court?: string; - category?: string; - rewards?: string; - period?: Periods; - date?: number; - round?: number; - overrideIsList?: boolean; - isOverview?: boolean; - showLabels?: boolean; - isLoading?: boolean; -} - -const DisputeCardView: React.FC<IDisputeCardView> = ({ isLoading, ...props }) => { - return ( - <Link to={`/cases/${props?.disputeID?.toString()}`}> - <StyledCard hover> - <PeriodBanner id={parseInt(props?.disputeID)} period={props?.period} /> - <CardContainer> - {isLoading ? <StyledCaseCardTitleSkeleton /> : <TruncatedTitle text={props?.title} maxLength={100} />} - <DisputeInfo {...props} /> - </CardContainer> - </StyledCard> - </Link> - ); -}; - -export default DisputeCardView; diff --git a/web/src/components/DisputeView/DisputeInfo/DisputeInfoCard.tsx b/web/src/components/DisputeView/DisputeInfo/DisputeInfoCard.tsx deleted file mode 100644 index 0f1818fda..000000000 --- a/web/src/components/DisputeView/DisputeInfo/DisputeInfoCard.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import Field, { IField } from "components/Field"; - -import CardLabel from "../CardLabels"; - -import { FieldItem, IDisputeInfo } from "./index"; - -const Container = styled.div` - display: flex; - width: 100%; - flex-direction: column; - justify-content: flex-end; -`; - -const RestOfFieldsContainer = styled.div<{ isOverview?: boolean }>` - display: flex; - flex-direction: column; - gap: 8px; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; - - ${({ isOverview }) => - isOverview && - css` - ${landscapeStyle( - () => css` - gap: 32px; - flex-direction: row; - flex-wrap: wrap; - justify-content: flex-start; - ` - )} - `}; -`; - -const StyledField = styled(Field)` - max-width: 100%; - label { - &.value { - overflow: hidden; - text-overflow: ellipsis; - text-wrap: auto; - } - } -`; - -type IDisputeInfoCard = { fieldItems: FieldItem[] } & IDisputeInfo; - -const DisputeInfoCard: React.FC<IDisputeInfoCard> = ({ isOverview, showLabels, fieldItems, disputeID, round }) => { - return ( - <Container> - <RestOfFieldsContainer {...{ isOverview }}> - {fieldItems.map((item) => - item.display ? <StyledField key={item.name} {...(item as IField)} {...{ isOverview }} /> : null - )} - </RestOfFieldsContainer> - {showLabels ? <CardLabel disputeId={disputeID} round={round - 1} isList={false} /> : null} - </Container> - ); -}; -export default DisputeInfoCard; diff --git a/web/src/components/DisputeView/DisputeInfo/DisputeInfoList.tsx b/web/src/components/DisputeView/DisputeInfo/DisputeInfoList.tsx deleted file mode 100644 index a82417c29..000000000 --- a/web/src/components/DisputeView/DisputeInfo/DisputeInfoList.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import React, { useMemo } from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -import Field, { IField } from "components/Field"; - -import CardLabel from "../CardLabels"; - -import { FieldItem, IDisputeInfo } from "."; - -const Container = styled.div<{ isLabel?: boolean }>` - display: flex; - width: 100%; - height: 100%; - flex-direction: row; - justify-content: ${({ isLabel }) => (isLabel ? "space-between" : "flex-end")}; - flex: 0 1 ${responsiveSize(400, 450, 900)}; - align-items: center; - padding-right: ${responsiveSize(12, 24, 900)}; - gap: 8px; -`; - -const RestOfFieldsContainer = styled.div` - gap: 8px ${responsiveSize(8, 32, 900)}; - align-items: center; - height: min-content; - width: max-content; - display: grid; - grid-template-columns: repeat(3, min-content); - justify-content: start; -`; - -const StyledField = styled(Field)<{ style?: string }>` - ${({ style }) => style ?? ""} -`; - -const truncateText = (text: string, limit: number) => { - if (text && text.length > limit) { - return text.substring(0, limit) + "..."; - } - return text; -}; - -type IDisputeInfoList = { fieldItems: FieldItem[] } & IDisputeInfo; -const DisputeInfoList: React.FC<IDisputeInfoList> = ({ fieldItems, showLabels, disputeID, round }) => { - const FieldItems = useMemo( - () => - fieldItems.map((item) => - item.display ? ( - <StyledField key={item.name} {...(item as IField)} value={truncateText(item.value, 20)} displayAsList /> - ) : null - ), - [fieldItems] - ); - - return ( - <Container isLabel={showLabels}> - <RestOfFieldsContainer>{FieldItems}</RestOfFieldsContainer> - {showLabels ? <CardLabel disputeId={disputeID} round={round - 1} isList /> : null} - </Container> - ); -}; -export default DisputeInfoList; diff --git a/web/src/components/DisputeView/DisputeInfo/index.tsx b/web/src/components/DisputeView/DisputeInfo/index.tsx deleted file mode 100644 index ceb42580f..000000000 --- a/web/src/components/DisputeView/DisputeInfo/index.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import React, { useMemo } from "react"; - -import { useAccount } from "wagmi"; - -import BookmarkIcon from "svgs/icons/bookmark.svg"; -import CalendarIcon from "svgs/icons/calendar.svg"; -import LawBalanceIcon from "svgs/icons/law-balance.svg"; -import PileCoinsIcon from "svgs/icons/pile-coins.svg"; -import RoundIcon from "svgs/icons/round.svg"; - -import { Periods } from "consts/periods"; -import { useIsList } from "context/IsListProvider"; -import { formatDate } from "utils/date"; -import { isUndefined } from "utils/index"; - -import DisputeInfoCard from "./DisputeInfoCard"; -import DisputeInfoList from "./DisputeInfoList"; - -const getPeriodPhrase = (period: Periods): string => { - switch (period) { - case Periods.evidence: - return "Voting Starts"; - case Periods.appeal: - return "Appeal Deadline"; - case Periods.execution: - return "Final Decision"; - default: - return "Voting Deadline"; - } -}; - -export type FieldItem = { - icon: React.FC<React.SVGAttributes<SVGElement>>; - name: string; - value?: string; - link?: string; - display: boolean; - style?: string; -}; - -export interface IDisputeInfo { - disputeID?: string; - courtId?: string; - court?: string; - category?: string; - rewards?: string; - period?: Periods; - date?: number; - round?: number; - overrideIsList?: boolean; - isOverview?: boolean; - showLabels?: boolean; -} - -const DisputeInfo: React.FC<IDisputeInfo> = ({ - disputeID, - courtId, - court, - category, - rewards, - period, - date, - round, - overrideIsList, - isOverview, - showLabels = false, -}) => { - const { isList } = useIsList(); - const { isDisconnected } = useAccount(); - const displayAsList = isList && !overrideIsList; - - const fieldItems: FieldItem[] = useMemo( - () => [ - { - icon: LawBalanceIcon, - name: "Court", - value: court, - link: `/courts/${courtId}`, - display: !isUndefined(court) && !isUndefined(courtId), - }, - { - icon: RoundIcon, - name: "Round", - value: round?.toString(), - display: !isUndefined(round), - }, - { - icon: BookmarkIcon, - name: "Category", - value: category ?? "General", - display: true, - style: "justify-self: end;", - }, - { icon: PileCoinsIcon, name: "Juror Rewards", value: rewards, display: !isUndefined(rewards) }, - { - icon: CalendarIcon, - name: getPeriodPhrase(period ?? 0), - value: !displayAsList ? new Date(date * 1000).toLocaleString() : formatDate(date), - display: !isUndefined(period) && !isUndefined(date), - style: "grid-column: 2 / 4;", - }, - ], - [category, court, courtId, date, displayAsList, isOverview, period, rewards, round] - ); - return displayAsList ? ( - <DisputeInfoList showLabels={showLabels && !isDisconnected} {...{ disputeID, round, fieldItems }} /> - ) : ( - <DisputeInfoCard - showLabels={showLabels && !isDisconnected} - {...{ disputeID, round, fieldItems, court, courtId, isOverview }} - /> - ); -}; -export default DisputeInfo; diff --git a/web/src/components/DisputeView/DisputeListView.tsx b/web/src/components/DisputeView/DisputeListView.tsx deleted file mode 100644 index 5b00b7967..000000000 --- a/web/src/components/DisputeView/DisputeListView.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { Link } from "react-router-dom"; -import { useAccount } from "wagmi"; - -import { Card } from "@kleros/ui-components-library"; - -import { Periods } from "consts/periods"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; -import { responsiveSize } from "styles/responsiveSize"; - -import DisputeInfo from "./DisputeInfo"; -import PeriodBanner from "./PeriodBanner"; - -const StyledListItem = styled(Card)` - ${hoverShortTransitionTiming} - display: flex; - flex-grow: 1; - width: 100%; - height: 82px; -`; - -const ListContainer = styled.div` - display: flex; - justify-content: space-between; - align-items: flex-start; - flex-grow: 1; -`; - -const TitleContainer = styled.div<{ isLabel?: boolean }>` - display: flex; - height: 100%; - justify-content: start; - align-items: center; - width: ${({ isLabel }) => (isLabel ? responsiveSize(150, 340, 900) : "fit-content")}; - h3 { - margin: 0; - flex: 1; - } -`; -const TruncatedTitle = ({ text, maxLength }) => { - const truncatedText = text.length <= maxLength ? text : text.slice(0, maxLength) + "…"; - return <h3 dir="auto">{truncatedText}</h3>; -}; -interface IDisputeListView { - title: string; - disputeID?: string; - courtId?: string; - court?: string; - category?: string; - rewards?: string; - period?: Periods; - date?: number; - round?: number; - overrideIsList?: boolean; - isOverview?: boolean; - showLabels?: boolean; -} -const DisputeListView: React.FC<IDisputeListView> = (props) => { - const { isDisconnected } = useAccount(); - return ( - <Link to={`/cases/${props?.disputeID?.toString()}`}> - <StyledListItem hover> - <PeriodBanner isCard={false} id={parseInt(props?.disputeID ?? "0")} period={props.period} /> - <ListContainer> - <TitleContainer isLabel={!isDisconnected}> - <TruncatedTitle text={props?.title} maxLength={50} /> - </TitleContainer> - <DisputeInfo {...props} /> - </ListContainer> - </StyledListItem> - </Link> - ); -}; - -export default DisputeListView; diff --git a/web/src/components/DisputeView/PeriodBanner.tsx b/web/src/components/DisputeView/PeriodBanner.tsx deleted file mode 100644 index 6a5287afa..000000000 --- a/web/src/components/DisputeView/PeriodBanner.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { Theme, css, useTheme } from "styled-components"; - -import { Periods } from "consts/periods"; - -import { responsiveSize } from "styles/responsiveSize"; -import { landscapeStyle } from "styles/landscapeStyle"; - -interface IContainer { - isCard: boolean; - frontColor: string; - backgroundColor: string; -} - -const Container = styled.div<IContainer>` - height: ${({ isCard }) => (isCard ? "45px" : "100%")}; - width: ${({ isCard }) => (isCard ? "auto" : responsiveSize(140, 200, 900))}; - border-top-right-radius: 3px; - border-top-left-radius: 3px; - display: flex; - align-items: center; - gap: 8px; - justify-content: space-between; - padding: 0 ${({ isCard }) => (isCard ? "16px" : "24px")}; - flex-shrink: 0; - ${({ frontColor, backgroundColor, isCard }) => { - return ` - ${isCard ? `border-top: 5px solid ${frontColor}` : `border-left: 5px solid ${frontColor}`}; - ${isCard && `background-color: ${backgroundColor};`}; - `; - }}; - - ${landscapeStyle( - () => css` - padding: 0 24px; - ` - )} -`; - -const StyledLabel = styled.label<{ frontColor: string; withDot?: boolean; isCard?: boolean }>` - display: flex; - align-items: center; - width: ${({ isCard }) => (isCard ? "auto" : "min-content")}; - color: ${({ frontColor }) => frontColor}; - ${({ withDot, frontColor }) => - withDot - ? css` - ::before { - content: ""; - display: inline-block; - height: 8px; - width: 8px; - border-radius: 50%; - margin-right: 8px; - background-color: ${frontColor}; - flex-shrink: 0; - } - ` - : null} -`; -export interface IPeriodBanner { - id: number; - period: Periods; - isCard?: boolean; -} - -const getPeriodColors = (period: Periods, theme: Theme): [string, string] => { - switch (period) { - case Periods.appeal: - return [theme.tint, theme.tintMedium]; - case Periods.execution: - return [theme.secondaryPurple, theme.mediumPurple]; - default: - return [theme.primaryBlue, theme.mediumBlue]; - } -}; - -const getPeriodLabel = (period: Periods, isCard: boolean): string => { - switch (period) { - case Periods.evidence: - return `${isCard ? "In Progress - " : ""}Submitting Evidence`; - case Periods.commit: - return `${isCard ? "In Progress - " : ""}Committing Vote`; - case Periods.vote: - return `${isCard ? "In Progress - " : ""}Voting`; - case Periods.appeal: - return "Crowdfunding Appeal"; - case Periods.execution: - return "Closed"; - default: - return "In Progress"; - } -}; - -const PeriodBanner: React.FC<IPeriodBanner> = ({ id, period, isCard = true }) => { - const theme = useTheme(); - const [frontColor, backgroundColor] = useMemo(() => getPeriodColors(period, theme), [theme, period]); - return ( - <Container {...{ isCard, frontColor, backgroundColor }}> - <StyledLabel frontColor={frontColor} isCard={isCard} withDot> - {getPeriodLabel(period, isCard)} - </StyledLabel> - <StyledLabel frontColor={frontColor}>#{id}</StyledLabel> - </Container> - ); -}; - -export default PeriodBanner; diff --git a/web/src/components/DisputeView/index.tsx b/web/src/components/DisputeView/index.tsx deleted file mode 100644 index b10974a43..000000000 --- a/web/src/components/DisputeView/index.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React from "react"; - -import { formatEther } from "viem"; - -import { INVALID_DISPUTE_DATA_ERROR, RPC_ERROR } from "consts/index"; -import { Periods } from "consts/periods"; -import { useIsList } from "context/IsListProvider"; -import { usePopulatedDisputeData } from "hooks/queries/usePopulatedDisputeData"; -import { isUndefined } from "utils/index"; - -import { DisputeDetailsFragment } from "queries/useCasesQuery"; -import { useCourtPolicy } from "queries/useCourtPolicy"; - -import DisputeCardView from "./DisputeCardView"; -import DisputeListView from "./DisputeListView"; - -export const getPeriodEndTimestamp = ( - lastPeriodChange: string, - currentPeriodIndex: number, - timesPerPeriod: string[] -) => { - const durationCurrentPeriod = parseInt(timesPerPeriod[currentPeriodIndex]); - return parseInt(lastPeriodChange) + durationCurrentPeriod; -}; - -interface IDisputeView extends DisputeDetailsFragment { - overrideIsList?: boolean; -} - -const DisputeView: React.FC<IDisputeView> = ({ - id, - currentRoundIndex, - arbitrated, - period, - lastPeriodChange, - court, - overrideIsList, -}) => { - const { isList } = useIsList(); - const currentPeriodIndex = Periods[period]; - const rewards = `≥ ${formatEther(court.feeForJuror)} ETH`; - const date = - currentPeriodIndex === 4 - ? lastPeriodChange - : getPeriodEndTimestamp(lastPeriodChange, currentPeriodIndex, court.timesPerPeriod); - const { data: disputeDetails, isError } = usePopulatedDisputeData(id, arbitrated.id as `0x${string}`); - - const { data: courtPolicy } = useCourtPolicy(court.id); - const courtName = courtPolicy?.name; - const category = disputeDetails?.category; - const errMsg = isError ? RPC_ERROR : INVALID_DISPUTE_DATA_ERROR; - - return !isList || overrideIsList ? ( - <DisputeCardView - title={disputeDetails?.title ?? errMsg} - disputeID={id} - courtId={court?.id} - court={courtName} - period={currentPeriodIndex} - round={parseInt(currentRoundIndex) + 1} - showLabels - {...{ category, rewards, date, overrideIsList }} - isLoading={isUndefined(disputeDetails)} - /> - ) : ( - <DisputeListView - title={disputeDetails?.title ?? errMsg} - disputeID={id} - courtId={court?.id} - court={courtName} - period={currentPeriodIndex} - round={parseInt(currentRoundIndex) + 1} - showLabels - {...{ category, rewards, date }} - /> - ); -}; - -export default DisputeView; diff --git a/web/src/components/Divider.tsx b/web/src/components/Divider.tsx deleted file mode 100644 index 4def74af9..000000000 --- a/web/src/components/Divider.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import styled from "styled-components"; - -export const Divider = styled.hr` - display: flex; - width: 100%; - border: none; - height: 1px; - background-color: ${({ theme }) => theme.stroke}; - margin: 0; -`; diff --git a/web/src/components/DottedMenuButton.tsx b/web/src/components/DottedMenuButton.tsx deleted file mode 100644 index d1f5102d0..000000000 --- a/web/src/components/DottedMenuButton.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import React from "react"; -import styled, { css, keyframes } from "styled-components"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; - -import DottedMenu from "svgs/icons/dotted-menu.svg"; - -const ripple = keyframes` - 0% { - opacity: 0; - transform: scale3d(0.5, 0.5, 1); - } - 10% { - opacity: 0.5; - transform: scale3d(0.75, 0.75, 1); - } - - 100% { - opacity: 0; - transform: scale3d(1.75, 1.75, 1); - } -`; - -const ring = (duration: string, delay: string) => css` - opacity: 0; - position: absolute; - top: 0; - left: 0; - transform: translate(50%); - content: ""; - height: 100%; - width: 100%; - border: 3px solid ${({ theme }) => theme.primaryBlue}; - border-radius: 100%; - animation-name: ${ripple}; - animation-duration: ${duration}; - animation-delay: ${delay}; - animation-iteration-count: infinite; - animation-timing-function: cubic-bezier(0.65, 0, 0.34, 1); - z-index: 0; -`; - -const Container = styled.div<{ displayRipple: boolean }>` - display: flex; - justify-content: center; - align-items: center; - width: 36px; - height: 36px; - ${({ displayRipple }) => - displayRipple && - css` - &::after { - ${ring("3s", "0s")} - } - &::before { - ${ring("3s", "0.5s")} - } - `} -`; - -const ButtonContainer = styled.div` - ${hoverShortTransitionTiming} - border-radius: 50%; - z-index: 1; - background-color: ${({ theme }) => theme.lightBackground}; - - :hover { - background-color: ${({ theme }) => theme.lightGrey}; - svg { - fill: ${({ theme }) => theme.secondaryBlue}; - } - } -`; - -const StyledDottedMenu = styled(DottedMenu)` - cursor: pointer; - width: 100%; - height: 100%; - fill: ${({ theme }) => theme.primaryBlue}; -`; - -interface IMenuButton { - toggle: () => void; - displayRipple: boolean; - className?: string; -} - -const DottedMenuButton: React.FC<IMenuButton> = ({ toggle, displayRipple, className }) => { - return ( - <Container {...{ displayRipple, className }}> - <ButtonContainer className="button-container"> - <StyledDottedMenu onClick={toggle} className="menu-icon" /> - </ButtonContainer> - </Container> - ); -}; - -export default DottedMenuButton; diff --git a/web/src/components/EnsureAuth.tsx b/web/src/components/EnsureAuth.tsx deleted file mode 100644 index e3f69264e..000000000 --- a/web/src/components/EnsureAuth.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import React, { useCallback } from "react"; -import styled from "styled-components"; - -import { useAccount } from "wagmi"; - -import { useAtlasProvider } from "@kleros/kleros-app"; -import { Button } from "@kleros/ui-components-library"; - -import { errorToast, infoToast, successToast } from "utils/wrapWithToast"; - -const Container = styled.div` - display: flex; - flex-direction: column; - gap: 16px; - justify-content: center; - align-items: center; -`; - -const StyledInfo = styled.p` - margin: 0; - padding: 0; -`; - -interface IEnsureAuth { - children: React.ReactElement; - message?: string; - buttonText?: string; - className?: string; -} - -const EnsureAuth: React.FC<IEnsureAuth> = ({ children, message, buttonText, className }) => { - const { address } = useAccount(); - const { isVerified, isSigningIn, authoriseUser } = useAtlasProvider(); - - const handleClick = useCallback(() => { - infoToast(`Signing in User...`); - - authoriseUser() - .then(() => successToast("Signed In successfully!")) - .catch((err) => { - console.log(err); - errorToast(`Sign-In failed: ${err?.message}`); - }); - }, [authoriseUser]); - return isVerified ? ( - children - ) : ( - <Container> - {message ? <StyledInfo>{message}</StyledInfo> : null} - <Button - text={buttonText ?? "Sign In"} - onClick={handleClick} - disabled={isSigningIn || !address} - isLoading={isSigningIn} - {...{ className }} - /> - </Container> - ); -}; - -export default EnsureAuth; diff --git a/web/src/components/EnsureChain.tsx b/web/src/components/EnsureChain.tsx deleted file mode 100644 index 05a9feb95..000000000 --- a/web/src/components/EnsureChain.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from "react"; - -import { useAccount } from "wagmi"; - -import { DEFAULT_CHAIN } from "consts/chains"; - -import ConnectWallet from "components/ConnectWallet"; - -interface IEnsureChain { - children: React.ReactElement; - className?: string; -} - -export const EnsureChain: React.FC<IEnsureChain> = ({ children, className }) => { - const { chainId } = useAccount(); - - return chainId === DEFAULT_CHAIN ? children : <ConnectWallet {...{ className }} />; -}; diff --git a/web/src/components/ErrorButtonMessage.tsx b/web/src/components/ErrorButtonMessage.tsx deleted file mode 100644 index ce2eff888..000000000 --- a/web/src/components/ErrorButtonMessage.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import styled from "styled-components"; - -export const ErrorButtonMessage = styled.div` - display: flex; - align-items: center; - gap: 4px; - justify-content: center; - margin: 12px; - color: ${({ theme }) => theme.error}; - font-size: 14px; -`; diff --git a/web/src/components/ErrorFallback.tsx b/web/src/components/ErrorFallback.tsx deleted file mode 100644 index dd1428839..000000000 --- a/web/src/components/ErrorFallback.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { MAX_WIDTH_LANDSCAPE, landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { FallbackProps } from "react-error-boundary"; - -import { Button } from "@kleros/ui-components-library"; - -import ErrorIcon from "svgs/icons/warning-outline.svg"; - -import HeroImage from "./HeroImage"; - -const Container = styled.div` - width: 100%; - height: 100vh; - background-color: ${({ theme }) => theme.lightBackground}; - padding: ${responsiveSize(32, 80)} ${responsiveSize(24, 136)} ${responsiveSize(76, 96)}; - max-width: ${MAX_WIDTH_LANDSCAPE}; - margin: 0 auto; -`; - -const ErrorContainer = styled.div` - display: flex; - width: 100%; - gap: 48px 16px; - flex-direction: column; - justify-content: center; - align-items: center; - ${landscapeStyle( - () => css` - flex-direction: row; - justify-content: space-between; - ` - )} -`; - -const InfoWrapper = styled.div` - display: flex; - flex-direction: column; - gap: 32px; - align-items: center; - flex: 1; - ${landscapeStyle( - () => css` - align-items: start; - ` - )} -`; - -const textCss = css` - margin: 0; - text-align: center; - white-space: pre-line; - - ${landscapeStyle( - () => css` - text-align: left; - ` - )} -`; - -const Header = styled.h1` - ${textCss} -`; - -const Subtitle = styled.h3` - ${textCss} - max-width: 735px; -`; - -const HeaderIconContainer = styled.div` - svg { - width: 64px; - height: 64px; - path { - fill: ${({ theme }) => theme.error}; - } - } -`; - -const ButtonsContainer = styled.div` - display: flex; - gap: 16px; -`; - -const IconContainer = styled.div` - svg { - width: 250px; - height: 250px; - path { - fill: ${({ theme }) => theme.whiteBackground}; - } - } -`; - -const ErrorFallback: React.FC<FallbackProps> = ({ error, resetErrorBoundary }) => { - // eslint-disable-next-line no-console - console.log("Error:", { error }); - - return ( - <> - <HeroImage /> - <Container> - <ErrorContainer> - <InfoWrapper> - <HeaderIconContainer> - <ErrorIcon /> - </HeaderIconContainer> - <Header>Ooops, Something went wrong in Athens!</Header> - <Subtitle>Please reload the page or contact us if the issue is not resolved.</Subtitle> - <ButtonsContainer> - <Button text={"Reload"} onClick={resetErrorBoundary} /> - <a href={"https://t.me/kleros"} target="_blank" rel="noreferrer"> - <Button text={"Contact us"} /> - </a> - </ButtonsContainer> - </InfoWrapper> - <IconContainer> - <ErrorIcon /> - </IconContainer> - </ErrorContainer> - </Container> - </> - ); -}; - -export default ErrorFallback; diff --git a/web/src/components/EvidenceCard.tsx b/web/src/components/EvidenceCard.tsx deleted file mode 100644 index f17d97e26..000000000 --- a/web/src/components/EvidenceCard.tsx +++ /dev/null @@ -1,258 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { css } from "styled-components"; - -import ReactMarkdown from "react-markdown"; -import { useParams } from "react-router-dom"; - -import { Card } from "@kleros/ui-components-library"; - -import AttachmentIcon from "svgs/icons/attachment.svg"; - -import { formatDate } from "utils/date"; -import { getIpfsUrl } from "utils/getIpfsUrl"; - -import { type Evidence } from "src/graphql/graphql"; -import { getTxnExplorerLink } from "src/utils"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { ExternalLink } from "./ExternalLink"; -import { InternalLink } from "./InternalLink"; -import JurorTitle from "pages/Home/TopJurors/JurorCard/JurorTitle"; - -const StyledCard = styled(Card)` - width: 100%; - height: auto; -`; - -const TopContent = styled.div` - display: flex; - flex-direction: column; - padding: 16px; - gap: 4px; - overflow-wrap: break-word; - - > * { - overflow-wrap: break-word; - margin: 0; - } - p { - margin: 0; - } - h3 { - display: inline-block; - margin: 0; - } - - ${landscapeStyle( - () => css` - padding: 20px 24px; - ` - )} -`; - -const IndexAndName = styled.div` - display: flex; - flex-direction: row; - align-items: center; - gap: 5px; -`; - -const Index = styled.p` - display: inline-block; - color: ${({ theme }) => theme.secondaryText}; -`; - -const ReactMarkdownWrapper = styled.div``; -const StyledReactMarkdown = styled(ReactMarkdown)` - a { - font-size: 16px; - } - code { - color: ${({ theme }) => theme.secondaryText}; - } - p { - margin: 0; - } -`; - -const BottomShade = styled.div` - background-color: ${({ theme }) => theme.lightBlue}; - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; - padding: 16px; - > * { - flex-basis: 1; - flex-shrink: 0; - margin: 0; - } - - ${landscapeStyle( - () => css` - padding: 12px 24px; - ` - )} -`; - -const BottomLeftContent = styled.div` - display: flex; - gap: 8px; - flex-direction: column; - - ${landscapeStyle( - () => css` - flex-direction: row; - align-items: center; - justify-content: center; - gap: 0 12px; - - & > *:not(:last-child) { - margin-bottom: 0; - } - ` - )} -`; - -const ExternalLinkHoverStyle = css` - :hover { - text-decoration: underline; - color: ${({ theme }) => theme.primaryBlue}; - cursor: pointer; - } - :hover { - label { - text-decoration: underline; - color: ${({ theme }) => theme.primaryBlue}; - cursor: pointer; - } - } -`; - -const StyledExternalLink = styled(ExternalLink)` - ${ExternalLinkHoverStyle} -`; - -const DesktopText = styled.span` - display: none; - ${landscapeStyle( - () => css` - display: inline; - ` - )} -`; - -const MobileText = styled.span` - ${landscapeStyle( - () => css` - display: none; - ` - )} -`; - -const StyledInternalLink = styled(InternalLink)` - ${hoverShortTransitionTiming} - display: flex; - gap: ${responsiveSize(5, 6)}; - > svg { - width: 16px; - fill: ${({ theme }) => theme.primaryBlue}; - } - - :hover svg { - fill: ${({ theme }) => theme.secondaryBlue}; - } -`; - -const FileLinkContainer = styled.div` - margin-left: auto; -`; - -const StyledJurorInternalLink = styled(InternalLink)` - label { - color: ${({ theme }) => theme.primaryText}; - } - - :hover { - label { - cursor: pointer; - color: ${({ theme }) => theme.secondaryBlue}; - } - } - - svg { - display: none; - } -`; - -const AttachedFileText: React.FC = () => ( - <> - <DesktopText>View attached file</DesktopText> - <MobileText>File</MobileText> - </> -); - -interface IEvidenceCard extends Pick<Evidence, "evidence" | "timestamp" | "name" | "description" | "fileURI"> { - sender: string; - index: number; - transactionHash: string; -} - -const EvidenceCard: React.FC<IEvidenceCard> = ({ - evidence, - sender, - index, - timestamp, - transactionHash, - name, - description, - fileURI, -}) => { - const profileLink = `/profile/1/desc/all?address=${sender}`; - const { id } = useParams(); - - const transactionExplorerLink = useMemo(() => { - return getTxnExplorerLink(transactionHash ?? ""); - }, [transactionHash]); - - return ( - <StyledCard> - <TopContent dir="auto"> - <IndexAndName> - <Index>#{index}. </Index> - <h3>{name}</h3> - </IndexAndName> - {name && description ? ( - <ReactMarkdownWrapper dir="auto"> - <StyledReactMarkdown>{description}</StyledReactMarkdown> - </ReactMarkdownWrapper> - ) : ( - <p>{evidence}</p> - )} - </TopContent> - <BottomShade> - <BottomLeftContent> - <StyledJurorInternalLink to={profileLink}> - <JurorTitle address={sender} /> - </StyledJurorInternalLink> - <StyledExternalLink to={transactionExplorerLink} rel="noopener noreferrer" target="_blank"> - <label>{formatDate(Number(timestamp), true)}</label> - </StyledExternalLink> - </BottomLeftContent> - {fileURI && fileURI !== "-" ? ( - <FileLinkContainer> - <StyledInternalLink to={`/attachment/?disputeId=${id}&title=${"Evidence File"}&url=${getIpfsUrl(fileURI)}`}> - <AttachmentIcon /> - <AttachedFileText /> - </StyledInternalLink> - </FileLinkContainer> - ) : null} - </BottomShade> - </StyledCard> - ); -}; - -export default EvidenceCard; diff --git a/web/src/components/ExternalLink.tsx b/web/src/components/ExternalLink.tsx deleted file mode 100644 index 8470386ec..000000000 --- a/web/src/components/ExternalLink.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import styled from "styled-components"; - -import { Link } from "react-router-dom"; - -export const ExternalLink = styled(Link)` - :hover { - text-decoration: underline; - } -`; diff --git a/web/src/components/ExtraStatsDisplay.tsx b/web/src/components/ExtraStatsDisplay.tsx deleted file mode 100644 index 37c82cc9b..000000000 --- a/web/src/components/ExtraStatsDisplay.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { StyledSkeleton } from "components/StyledSkeleton"; -import { isUndefined } from "utils/index"; -import { InternalLink } from "./InternalLink"; - -const Container = styled.div` - display: flex; - gap: 8px; - justify-content: center; - flex-wrap: wrap; -`; - -const TitleContainer = styled.div` - display: flex; - gap: 8px; -`; - -const SVGContainer = styled.div` - display: flex; - height: 14px; - width: 14px; - align-items: center; - justify-content: center; - svg { - fill: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const ContentContainer = styled.div` - display: flex; - align-items: center; - gap: 8px; - flex-wrap: wrap; - text-align: center; -`; - -const StyledInternalLink = styled(InternalLink)` - font-weight: 600; -`; - -const StyledExtraStatTitleSkeleton = styled(StyledSkeleton)` - width: 100px; -`; - -export interface IExtraStatsDisplay { - title: string; - courtId?: string; - icon: React.FunctionComponent<React.SVGAttributes<SVGElement>>; - content?: React.ReactNode; - text?: string; -} - -const ExtraStatsDisplay: React.FC<IExtraStatsDisplay> = ({ title, courtId, text, content, icon: Icon, ...props }) => { - return ( - <Container {...props}> - <TitleContainer> - <SVGContainer>{<Icon />}</SVGContainer> - <label>{title}:</label> - </TitleContainer> - <ContentContainer> - {content ? ( - content - ) : ( - <StyledInternalLink to={`/courts/${courtId?.toString()}`}> - {!isUndefined(text) ? text : <StyledExtraStatTitleSkeleton />} - </StyledInternalLink> - )} - </ContentContainer> - </Container> - ); -}; - -export default ExtraStatsDisplay; diff --git a/web/src/components/FavoriteCases.tsx b/web/src/components/FavoriteCases.tsx deleted file mode 100644 index a742b7b96..000000000 --- a/web/src/components/FavoriteCases.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import React, { useMemo, useState } from "react"; -import styled from "styled-components"; - -import { StandardPagination } from "@kleros/ui-components-library"; - -import useStarredCases from "hooks/useStarredCases"; -import { isUndefined } from "utils/index"; - -import { DisputeDetailsFragment, useCasesQuery } from "queries/useCasesQuery"; - -import { responsiveSize } from "styles/responsiveSize"; -import { hoverShortTransitionTiming } from "styles/commonStyles"; - -import DisputeView from "components/DisputeView"; -import { SkeletonDisputeCard } from "components/StyledSkeleton"; - -const Container = styled.div` - margin-top: ${responsiveSize(24, 48)}; -`; - -const Title = styled.h1` - margin: 0; - font-size: ${responsiveSize(20, 24)}; -`; - -const DisputeContainer = styled.div` - --gap: 16px; - display: grid; - grid-template-columns: repeat(auto-fill, minmax(min(100%, max(312px, (100% - var(--gap) * 2)/3)), 1fr)); - align-items: stretch; - gap: var(--gap); -`; - -const TitleAndClearLabel = styled.div` - display: flex; - flex-direction: row; - gap: 12px; - align-items: center; - margin-bottom: ${responsiveSize(12, 24)}; -`; - -const StyledLabel = styled.label` - ${hoverShortTransitionTiming} - color: ${({ theme }) => theme.primaryBlue}; - cursor: pointer; - margin-top: 6px; - - :hover { - color: ${({ theme }) => theme.secondaryBlue}; - } -`; - -const StyledPagination = styled(StandardPagination)` - margin-top: 24px; - margin-left: auto; - margin-right: auto; -`; - -const FavoriteCases: React.FC = () => { - const { starredCaseIds, clearAll } = useStarredCases(); - - const [currentPage, setCurrentPage] = useState(1); - const casesPerPage = 3; - const totalPages = Math.ceil(starredCaseIds.length / casesPerPage); - - const { data } = useCasesQuery((currentPage - 1) * casesPerPage, casesPerPage, { - id_in: starredCaseIds, - }); - - const disputes: DisputeDetailsFragment[] = useMemo(() => data?.disputes as DisputeDetailsFragment[], [data]); - - return starredCaseIds.length > 0 && (isUndefined(disputes) || disputes.length > 0) ? ( - <Container> - <TitleAndClearLabel> - <Title>Favorite Cases</Title> - <StyledLabel onClick={clearAll}>Clear all</StyledLabel> - </TitleAndClearLabel> - <DisputeContainer> - {isUndefined(disputes) - ? Array.from({ length: 3 }).map((_, index) => <SkeletonDisputeCard key={index} />) - : disputes.map((dispute) => <DisputeView key={dispute.id} {...dispute} overrideIsList />)} - </DisputeContainer> - {totalPages > 1 ? ( - <StyledPagination - currentPage={currentPage} - numPages={totalPages} - callback={(page: number) => setCurrentPage(page)} - /> - ) : null} - </Container> - ) : null; -}; - -export default FavoriteCases; diff --git a/web/src/components/Field.tsx b/web/src/components/Field.tsx deleted file mode 100644 index e9db47561..000000000 --- a/web/src/components/Field.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import { InternalLink } from "./InternalLink"; - -const FieldContainer = styled.div<FieldContainerProps>` - display: flex; - align-items: center; - justify-content: flex-start; - white-space: nowrap; - width: 100%; - .value { - flex-grow: 1; - text-align: end; - color: ${({ theme }) => theme.primaryText}; - } - - svg { - fill: ${({ theme }) => theme.secondaryPurple}; - margin-right: 8px; - width: 14px; - flex-shrink: 0; - } - - ${({ isList }) => - isList && - css` - ${landscapeStyle( - () => css` - width: auto; - .value { - flex-grow: 0; - text-align: center; - } - ` - )} - `}; - ${({ isOverview, isJurorBalance }) => - (isOverview || isJurorBalance) && - css` - ${landscapeStyle( - () => css` - width: auto; - gap: 8px; - .value { - flex-grow: 0; - text-align: none; - font-weight: 600; - } - a { - font-weight: 600; - } - svg { - margin-right: 0; - } - ` - )} - `}; -`; - -const LinkContainer = styled.div` - padding-bottom: 1px; -`; - -const StyledInternalLink = styled(InternalLink)` - text-wrap: auto; - justify-content: end; - line-height: 1.25; -`; - -type FieldContainerProps = { - width?: string; - isList?: boolean; - isOverview?: boolean; - isJurorBalance?: boolean; -}; - -export interface IField { - icon: React.FunctionComponent<React.SVGAttributes<SVGElement>>; - name: string; - value: string; - link?: string; - width?: string; - displayAsList?: boolean; - isOverview?: boolean; - isJurorBalance?: boolean; - className?: string; -} - -const Field: React.FC<IField> = ({ - icon: Icon, - name, - value, - link, - width, - displayAsList, - isOverview, - isJurorBalance, - className, -}) => { - return ( - <FieldContainer dir="auto" isList={displayAsList} {...{ isOverview, isJurorBalance, width, className }}> - <Icon /> - {(!displayAsList || isOverview || isJurorBalance) && <label>{name}:</label>} - {link ? ( - <LinkContainer className="value"> - <StyledInternalLink - to={link} - onClick={(event) => { - event.stopPropagation(); - }} - > - {value} - </StyledInternalLink> - </LinkContainer> - ) : ( - <label className="value">{value}</label> - )} - </FieldContainer> - ); -}; -export default Field; diff --git a/web/src/components/FileViewer/Viewers/MarkdownViewer.tsx b/web/src/components/FileViewer/Viewers/MarkdownViewer.tsx deleted file mode 100644 index 0ee77ac37..000000000 --- a/web/src/components/FileViewer/Viewers/MarkdownViewer.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { type DocRenderer } from "@cyntler/react-doc-viewer"; -import ReactMarkdown from "react-markdown"; - -const Container = styled.div` - padding: 16px; -`; - -const StyledMarkdown = styled(ReactMarkdown)` - background-color: ${({ theme }) => theme.whiteBackground}; - a { - font-size: 16px; - } - code { - color: ${({ theme }) => theme.secondaryText}; - } -`; - -const MarkdownRenderer: DocRenderer = ({ mainState: { currentDocument } }) => { - if (!currentDocument) return null; - const base64String = (currentDocument.fileData as string).split(",")[1]; - - // Decode the base64 string - const decodedData = atob(base64String); - - return ( - <Container id="md-renderer"> - <StyledMarkdown>{decodedData}</StyledMarkdown> - </Container> - ); -}; - -MarkdownRenderer.fileTypes = ["md", "text/plain"]; -MarkdownRenderer.weight = 1; - -export default MarkdownRenderer; diff --git a/web/src/components/FileViewer/index.tsx b/web/src/components/FileViewer/index.tsx deleted file mode 100644 index e67c0787f..000000000 --- a/web/src/components/FileViewer/index.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import DocViewer, { DocViewerRenderers } from "@cyntler/react-doc-viewer"; - -import "@cyntler/react-doc-viewer/dist/index.css"; -import { customScrollbar } from "styles/customScrollbar"; - -import MarkdownRenderer from "./Viewers/MarkdownViewer"; - -const Wrapper = styled.div` - background-color: ${({ theme }) => theme.whiteBackground}; - border-radius: 3px; - box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.06); - max-height: 1050px; - overflow: scroll; - - ${customScrollbar} -`; - -const StyledDocViewer = styled(DocViewer)` - background-color: ${({ theme }) => theme.whiteBackground} !important; - - #pdf-controls { - z-index: 3; - } - - [class*="--loading"] { - color: ${({ theme }) => theme.secondaryText}; - } -`; - -/** - * @description this viewer supports loading multiple files, it can load urls, local files, etc - * @param url The url of the file to be displayed - * @returns renders the file - */ -const FileViewer: React.FC<{ url: string }> = ({ url }) => { - const docs = [{ uri: url, fileName: fileNameIfIpfsUrl(url) }]; - return ( - <Wrapper className="file-viewer-wrapper"> - <StyledDocViewer - documents={docs} - pluginRenderers={[...DocViewerRenderers, MarkdownRenderer]} - config={{ - header: { - disableHeader: true, - disableFileName: true, - }, - pdfZoom: { - defaultZoom: 0.8, - zoomJump: 0.1, - }, - pdfVerticalScrollByDefault: true, // false as default - }} - /> - </Wrapper> - ); -}; - -const fileNameIfIpfsUrl = (url: string) => { - if (!url || typeof url !== "string") { - return "document"; - } - const ipfsPattern = /(?:ipfs:\/\/|https?:\/\/(?:[A-Za-z0-9.-]+)\/ipfs\/)([A-Za-z0-9]+[A-Za-z0-9\-_]*)\/?(.*)/; - - const match = ipfsPattern.exec(url); - - if (match) { - const ipfsHash = match[1]; - const path = match[2] || ""; - - const sanitizedPath = path.replace(/\//g, "_"); - - return `ipfs-${ipfsHash}${sanitizedPath ? "_" + sanitizedPath : ""}`; - } else { - return "document"; - } -}; - -export default FileViewer; diff --git a/web/src/components/GradientTokenIcons.tsx b/web/src/components/GradientTokenIcons.tsx deleted file mode 100644 index f79454b32..000000000 --- a/web/src/components/GradientTokenIcons.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -const LinearGradientPath = styled.path<{ gradient: string }>` - ${({ gradient }) => - gradient && - css` - stroke: url(#${gradient}); - `} -`; - -interface IGradientTokenIcons { - icon: string; -} - -const GradientTokenIcons: React.FC<IGradientTokenIcons> = ({ icon }) => { - return ( - <> - {icon === "ETH" ? ( - <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> - <LinearGradientPath - gradient="eth" - id="paint0_linear_14360_27088" - d="M9.86602 28.0687L22.923 36.0836V47.1905L9.86602 28.0687ZM23.423 36.0836L36.4799 28.0687L23.423 47.1905V36.0836ZM23.423 16.428V0.930308L36.666 23.7911L23.423 16.428ZM36.8415 24.4607L23.423 32.703V17L36.8415 24.4607ZM22.923 0.929777V16.4279L9.67081 23.7913L22.923 0.929777ZM22.923 32.7032L9.49539 24.4607L22.923 16.9999V32.7032Z" - /> - <defs> - <linearGradient id="eth" x1="23.173" y1="0" x2="23.173" y2="48" gradientUnits="userSpaceOnUse"> - <stop stopColor="#6CC5FF" /> - <stop offset="1" stopColor="#B45FFF" /> - </linearGradient> - </defs> - </svg> - ) : ( - <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> - <LinearGradientPath - gradient="pnk" - fillRule="evenodd" - clipRule="evenodd" - d="M15.7151 6L35.6632 7.30096L43.9078 25.526L32.6361 42L12.2385 41.132L4 21.1862L15.7151 6ZM16.2222 7.03373L13.1105 22.2033L31.3917 13.6461L16.2222 7.03373ZM31.8965 14.3445L13.3445 23.0284L29.1334 34.8701L31.8965 14.3445ZM28.5319 35.4771L12.9497 23.7905V40.1518L28.5319 35.4771ZM12.1032 38.5872V23.2874L5.18188 21.8302L12.1032 38.5872ZM5.23158 20.9756L12.1974 22.4421L15.1303 8.14394L5.23158 20.9756ZM15.0532 40.4045L31.7195 41.1137L29.2373 36.1493L15.0532 40.4045ZM29.9956 35.773L32.4763 40.7345L41.6905 27.2676L29.9956 35.773ZM41.9695 23.295L35.3631 8.69144L32.9292 13.5593L41.9695 23.295ZM32.2205 13.0839L18.3024 7.01704L34.7186 8.08766L32.2205 13.0839ZM32.7193 14.5773L30.0082 34.7171L42.7892 25.4218L32.7193 14.5773Z" - fill="url(#paint0_linear_14360_27090)" - /> - <defs> - <linearGradient id="pnk" x1="23.9539" y1="6" x2="23.9539" y2="42" gradientUnits="userSpaceOnUse"> - <stop stopColor="#6CC5FF" /> - <stop offset="1" stopColor="#B45FFF" /> - </linearGradient> - </defs> - </svg> - )} - </> - ); -}; -export default GradientTokenIcons; diff --git a/web/src/components/HeroImage.tsx b/web/src/components/HeroImage.tsx deleted file mode 100644 index 16b729667..000000000 --- a/web/src/components/HeroImage.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from "react"; -import { useTheme } from "styled-components"; - -import HeroDarkDesktop from "svgs/hero/hero-darkmode-desktop.svg"; -import HeroDarkMobile from "svgs/hero/hero-darkmode-mobile.svg"; -import HeroLightDesktop from "svgs/hero/hero-lightmode-desktop.svg"; -import HeroLightMobile from "svgs/hero/hero-lightmode-mobile.svg"; - -import useIsDesktop from "hooks/useIsDesktop"; - -const HeroImage = () => { - const theme = useTheme(); - const themeIsLight = theme.name === "light"; - const isDesktop = useIsDesktop(); - return <div>{isDesktop ? <HeroDesktop {...{ themeIsLight }} /> : <HeroMobile {...{ themeIsLight }} />}</div>; -}; - -const HeroDesktop: React.FC<{ themeIsLight: boolean }> = ({ themeIsLight }) => { - return themeIsLight ? <HeroLightDesktop /> : <HeroDarkDesktop />; -}; - -const HeroMobile: React.FC<{ themeIsLight: boolean }> = ({ themeIsLight }) => { - return themeIsLight ? <HeroLightMobile /> : <HeroDarkMobile />; -}; - -export default HeroImage; diff --git a/web/src/components/HowItWorks.tsx b/web/src/components/HowItWorks.tsx deleted file mode 100644 index 4b5bafdc3..000000000 --- a/web/src/components/HowItWorks.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from "react"; - -import BookOpenIcon from "svgs/icons/book-open.svg"; - -import { BlueIconTextButtonContainer } from "./BlueIconTextButtonContainer"; - -interface IHowItWorks { - isMiniGuideOpen: boolean; - toggleMiniGuide: () => void; - MiniGuideComponent: React.ComponentType<{ toggleMiniGuide: () => void }>; -} - -const HowItWorks: React.FC<IHowItWorks> = ({ isMiniGuideOpen, toggleMiniGuide, MiniGuideComponent }) => { - return ( - <> - <BlueIconTextButtonContainer onClick={toggleMiniGuide}> - <BookOpenIcon /> - <label>How it works</label> - </BlueIconTextButtonContainer> - {isMiniGuideOpen && <MiniGuideComponent toggleMiniGuide={toggleMiniGuide} />} - </> - ); -}; - -export default HowItWorks; diff --git a/web/src/components/InfoCard.tsx b/web/src/components/InfoCard.tsx deleted file mode 100644 index 0d41aaa0a..000000000 --- a/web/src/components/InfoCard.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import InfoCircle from "svgs/icons/info-circle.svg"; - -import { responsiveSize } from "styles/responsiveSize"; - -const InfoContainer = styled.div` - display: grid; - grid-template-columns: 16px auto; - gap: ${responsiveSize(6, 8, 300)}; - align-items: center; - justify-items: start; - text-align: start; - color: ${({ theme }) => theme.secondaryText}; -`; - -interface IInfoCard { - msg: string; - className?: string; -} - -const InfoCard: React.FC<IInfoCard> = ({ msg, className }) => { - return ( - <InfoContainer {...{ className }}> - <InfoCircle /> - {msg} - </InfoContainer> - ); -}; - -export default InfoCard; diff --git a/web/src/components/InternalLink.tsx b/web/src/components/InternalLink.tsx deleted file mode 100644 index 2025427b3..000000000 --- a/web/src/components/InternalLink.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { Link } from "react-router-dom"; -import styled from "styled-components"; - -export const InternalLink = styled(Link)` - :hover { - color: ${({ theme }) => theme.secondaryBlue} !important; - } -`; diff --git a/web/src/components/JurorsLeaderboardButton.tsx b/web/src/components/JurorsLeaderboardButton.tsx deleted file mode 100644 index 1b84480c4..000000000 --- a/web/src/components/JurorsLeaderboardButton.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from "react"; - -import RankingIcon from "svgs/icons/ranking.svg"; - -import { BlueIconTextButtonContainer } from "./BlueIconTextButtonContainer"; -import { InternalLink } from "./InternalLink"; - -const JurorsLeaderboardButton: React.FC = () => { - return ( - <InternalLink to={"/jurors/1/desc/all"}> - <BlueIconTextButtonContainer> - <RankingIcon /> - <label>Jurors Leaderboard</label> - </BlueIconTextButtonContainer> - </InternalLink> - ); -}; - -export default JurorsLeaderboardButton; diff --git a/web/src/components/LabeledInput.tsx b/web/src/components/LabeledInput.tsx deleted file mode 100644 index 5a8e1332e..000000000 --- a/web/src/components/LabeledInput.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { Field, FieldProps } from "@kleros/ui-components-library"; - -import { isUndefined } from "utils/index"; - -const Container = styled.div` - width: 100%; - display: flex; - flex-direction: column; -`; -const StyledField = styled(Field)` - width: 100%; - > small { - margin-top: 16px; - margin-bottom: 16px; - } -`; - -const StyledLabel = styled.label` - width: 100%; - margin-bottom: 12px; -`; - -interface ILabeledInput extends FieldProps { - label?: string; -} -const LabeledInput: React.FC<ILabeledInput> = (props) => { - return ( - <Container> - {!isUndefined(props.label) ? <StyledLabel id={props.label}>{props.label}</StyledLabel> : null} - <StyledField dir="auto" {...props} id={props?.label} /> - </Container> - ); -}; - -export default LabeledInput; diff --git a/web/src/components/LatestCases.tsx b/web/src/components/LatestCases.tsx deleted file mode 100644 index 9f4133607..000000000 --- a/web/src/components/LatestCases.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React, { useMemo } from "react"; -import styled from "styled-components"; - -import { isUndefined } from "utils/index"; - -import { DisputeDetailsFragment, useCasesQuery } from "queries/useCasesQuery"; - -import { responsiveSize } from "styles/responsiveSize"; - -import DisputeView from "components/DisputeView"; -import { SkeletonDisputeCard } from "components/StyledSkeleton"; - -import { Dispute_Filter } from "../graphql/graphql"; -import SeeAllCasesButton from "./SeeAllCasesButton"; - -const Container = styled.div` - margin-top: ${responsiveSize(32, 48)}; -`; - -const TitleAndButtonContainer = styled.div` - display: flex; - flex-wrap: wrap; - flex-direction: row; - align-items: center; - gap: 4px 12px; - margin-bottom: ${responsiveSize(12, 24)}; -`; - -const Title = styled.h1` - margin-bottom: 0; - font-size: ${responsiveSize(20, 24)}; -`; - -const DisputeContainer = styled.div` - --gap: 16px; - display: grid; - grid-template-columns: repeat(auto-fill, minmax(min(100%, max(312px, (100% - var(--gap) * 2)/3)), 1fr)); - align-items: stretch; - gap: var(--gap); -`; - -interface ILatestCases { - title?: string; - filters?: Dispute_Filter; -} - -const LatestCases: React.FC<ILatestCases> = ({ title = "Latest Cases", filters }) => { - const { data } = useCasesQuery(0, 3, filters); - const disputes: DisputeDetailsFragment[] = useMemo(() => data?.disputes as DisputeDetailsFragment[], [data]); - const courtId = typeof filters?.court === "string" ? filters?.court : undefined; - - return isUndefined(disputes) || disputes.length > 0 ? ( - <Container> - <TitleAndButtonContainer> - <Title>{title}</Title> - <SeeAllCasesButton {...{ courtId }} /> - </TitleAndButtonContainer> - <DisputeContainer> - {isUndefined(disputes) - ? Array.from({ length: 3 }).map((_, index) => <SkeletonDisputeCard key={index} />) - : disputes.map((dispute) => <DisputeView key={dispute.id} {...dispute} overrideIsList />)} - </DisputeContainer> - </Container> - ) : null; -}; - -export default LatestCases; diff --git a/web/src/components/LightButton.tsx b/web/src/components/LightButton.tsx deleted file mode 100644 index 86307d53a..000000000 --- a/web/src/components/LightButton.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; -import { landscapeStyle } from "styles/landscapeStyle"; -import { hoverShortTransitionTiming } from "styles/commonStyles"; - -import { Button } from "@kleros/ui-components-library"; - -const StyledButton = styled(Button)<{ isMobileNavbar?: boolean }>` - ${hoverShortTransitionTiming} - background-color: transparent; - padding: 8px !important; - border-radius: 7px; - .button-text { - color: ${({ theme }) => theme.primaryText}; - font-weight: 400; - } - .button-svg { - fill: ${({ theme, isMobileNavbar }) => (isMobileNavbar ? theme.secondaryText : `${theme.white}BF`)} !important; - } - - &:hover { - .button-svg { - fill: ${({ theme, isMobileNavbar }) => (isMobileNavbar ? theme.primaryText : `${theme.white}`)} !important; - } - background-color: ${({ theme }) => theme.whiteLowOpacityStrong}; - } - - ${landscapeStyle( - () => css` - padding: 8px !important; - .button-svg { - margin-right: 0; - } - ` - )} -`; - -interface ILightButton { - text: string; - Icon?: React.FC<React.SVGAttributes<SVGElement>>; - onClick?: React.MouseEventHandler<HTMLButtonElement>; - disabled?: boolean; - className?: string; - isMobileNavbar?: boolean; -} - -const LightButton: React.FC<ILightButton> = ({ text, Icon, onClick, disabled, className, isMobileNavbar }) => ( - <StyledButton variant="primary" small {...{ text, Icon, onClick, disabled, className, isMobileNavbar }} /> -); - -export default LightButton; diff --git a/web/src/components/Loader.tsx b/web/src/components/Loader.tsx deleted file mode 100644 index 09b8403b4..000000000 --- a/web/src/components/Loader.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from "react"; -import styled, { type CSSProperties, keyframes } from "styled-components"; - -import KlerosIcon from "svgs/icons/kleros.svg"; - -type Width = CSSProperties["width"]; -type Height = CSSProperties["height"]; - -const breathing = keyframes` - 0% { - transform: scale(1); - } - - 50% { - transform: scale(1.3); - } - - 100% { - transform: scale(1); - } -`; - -const StyledKlerosIcon = styled(KlerosIcon)` - path { - fill: ${({ theme }) => theme.klerosUIComponentsStroke}; - } - animation: ${breathing} 2s ease-out infinite normal; -`; - -const Container = styled.div<{ width?: Width; height?: Height }>` - margin: auto; - width: ${({ width }) => width ?? "100%"}; - height: ${({ height }) => height ?? "100%"}; -`; - -interface ILoader { - width?: Width; - height?: Height; - className?: string; -} - -const Loader: React.FC<ILoader> = ({ width, height, className }) => { - return ( - <Container {...{ width, height, className }}> - <StyledKlerosIcon /> - </Container> - ); -}; - -export default Loader; diff --git a/web/src/components/NumberDisplay.tsx b/web/src/components/NumberDisplay.tsx deleted file mode 100644 index d32a0ea23..000000000 --- a/web/src/components/NumberDisplay.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from "react"; - -import { Tooltip } from "@kleros/ui-components-library"; - -import { commify } from "utils/commify"; - -interface INumberDisplay { - value: string | number; - unit?: string; - showUnitInDisplay?: boolean; - decimals?: number; - place?: "bottom" | "top" | "left" | "right"; - isCurrency?: boolean; //currency units are shown in front -} - -const getFormattedValue = (value: number, decimals: number) => { - const withFixedDecimals = value % 1 !== 0 ? value.toFixed(decimals) : value.toFixed(0); - if (value !== 0) { - if (withFixedDecimals === `0.${"0".repeat(decimals)}`) { - return `< 0.${"0".repeat(decimals - 1)}1`; - } else if (withFixedDecimals === `-0.${"0".repeat(decimals)}`) { - return `> -0.${"0".repeat(decimals - 1)}1`; - } - } - return withFixedDecimals; -}; - -const NumberDisplay: React.FC<INumberDisplay> = ({ - value, - unit, - place, - decimals = 2, - showUnitInDisplay = true, - isCurrency = false, -}) => { - const parsedValue = Number(value); - const formattedValue = commify(getFormattedValue(parsedValue, decimals)); - const tooltipValue = isCurrency ? `${unit} ${commify(value)}` : `${commify(value)} ${unit}`; - const displayUnit = showUnitInDisplay ? unit : ""; - const displayValue = isCurrency ? `${displayUnit} ${formattedValue}` : `${formattedValue} ${displayUnit}`; - - return ( - <Tooltip small text={tooltipValue} place={place}> - {displayValue} - </Tooltip> - ); -}; - -export default NumberDisplay; diff --git a/web/src/components/NumberInputField.tsx b/web/src/components/NumberInputField.tsx deleted file mode 100644 index 393b71a26..000000000 --- a/web/src/components/NumberInputField.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import React, { useState } from "react"; -import styled from "styled-components"; - -import { Field } from "@kleros/ui-components-library"; - -const Container = styled.div` - width: 100%; - height: fit-content; -`; - -const StyledField = styled(Field)` - width: 100%; - height: fit-content; - - input[type="number"]::-webkit-inner-spin-button, - input[type="number"]::-webkit-outer-spin-button { - -webkit-appearance: none; - appearance: none; - } - input[type="number"] { - -moz-appearance: textfield; - } - input { - border: 1px solid ${({ theme }) => theme.stroke}; - border-right: none; - height: 45px; - font-size: 16px; - } -`; - -interface INumberInputField extends Omit<React.ComponentProps<typeof Field>, "onChange"> { - placeholder?: string; - message?: string; - value?: string; - onChange?: (value: string) => void; - formatter?: (value: string) => string; - className?: string; -} - -export const NumberInputField: React.FC<INumberInputField> = ({ - placeholder, - message, - value, - onChange, - formatter, - className, - variant = "info", -}) => { - const [isEditing, setIsEditing] = useState(false); - - const toggleEditing = () => { - setIsEditing(!isEditing); - }; - - return ( - <Container {...{ className }}> - {isEditing ? ( - <StyledField - type="text" - onInput={(e) => { - const value = e.currentTarget.value.replace(/[^0-9.]/g, ""); - - e.currentTarget.value = formatter ? formatter(value) : value; - return e; - }} - onChange={(event: React.ChangeEvent<HTMLInputElement>) => { - onChange?.(event.target.value); - }} - onBlur={toggleEditing} - value={formatter ? formatter(value ?? "0") : value} - {...{ placeholder, message, variant }} - /> - ) : ( - <StyledField - type="text" - value={formatter ? formatter(value ?? "0") : value} - onFocus={toggleEditing} - {...{ placeholder, message, variant }} - readOnly - /> - )} - </Container> - ); -}; diff --git a/web/src/components/Overlay.tsx b/web/src/components/Overlay.tsx deleted file mode 100644 index b9b297811..000000000 --- a/web/src/components/Overlay.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import styled from "styled-components"; - -export const Overlay = styled.div` - position: fixed; - top: 0; - left: 0; - width: 100vw; - height: 100vh; - background-color: ${({ theme }) => theme.blackLowOpacity}; - z-index: 30; -`; diff --git a/web/src/components/OverlayPortal.tsx b/web/src/components/OverlayPortal.tsx deleted file mode 100644 index b2f3c94d4..000000000 --- a/web/src/components/OverlayPortal.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from "react"; -import ReactDOM from "react-dom"; -import styled from "styled-components"; - -const PortalContainer = styled.div` - position: fixed; - top: 0; - left: 0; - z-index: 9999; - width: 100%; - height: 100%; -`; - -const OverlayPortal: React.FC<{ children: React.ReactNode }> = ({ children }) => { - return ReactDOM.createPortal(<PortalContainer>{children}</PortalContainer>, document.body); -}; - -export default OverlayPortal; diff --git a/web/src/components/Phase.tsx b/web/src/components/Phase.tsx deleted file mode 100644 index 91a2a7dd6..000000000 --- a/web/src/components/Phase.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { useSortitionModulePhase } from "hooks/useSortitionModule"; - -import { isUndefined } from "src/utils"; - -export enum Phases { - staking, - generating, - drawing, -} - -const StyledLabel = styled.label``; - -const Phase: React.FC<{ className?: string }> = ({ className }) => { - const { data: phase } = useSortitionModulePhase(); - return <>{isUndefined(phase) ? null : <StyledLabel {...{ className }}>Phase: {Phases[phase]}</StyledLabel>}</>; -}; - -export default Phase; diff --git a/web/src/components/PlusMinusField.tsx b/web/src/components/PlusMinusField.tsx deleted file mode 100644 index 933432285..000000000 --- a/web/src/components/PlusMinusField.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import Ellipse from "svgs/icons/ellipse.svg"; -import Minus from "svgs/icons/minus.svg"; -import Plus from "svgs/icons/plus.svg"; - -const Container = styled.div` - display: flex; - gap: 8px; - margin: 32px 0px 48px; -`; - -const IconContainer = styled.button` - position: relative; - padding: 0; - border-radius: 50%; - border: none; - background-color: transparent; - cursor: pointer; -`; - -const StyledEllipseIcon = styled(Ellipse)<{ isDisabled?: boolean }>` - circle { - fill: ${({ theme }) => theme.primaryBlue}; - ${({ isDisabled }) => - isDisabled && - css` - fill-opacity: 0.12; - `}; - } -`; - -const Icon = styled.svg` - fill: ${({ theme }) => theme.white}; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); -`; - -interface IPlusMinusField { - currentValue: number; - updateValue: (currentValue: number) => void; - minValue?: number; - className?: string; -} -const PlusMinusField: React.FC<IPlusMinusField> = ({ currentValue, updateValue, minValue = 0, className }) => { - const incrementValue = () => updateValue(++currentValue); - const decrementValue = () => currentValue > minValue && updateValue(--currentValue); - return ( - <Container className={className}> - <IconContainer onClick={incrementValue}> - <StyledEllipseIcon /> - <Icon as={Plus} /> - </IconContainer> - <IconContainer onClick={decrementValue}> - <StyledEllipseIcon isDisabled={currentValue === minValue} /> - <Icon as={Minus} /> - </IconContainer> - </Container> - ); -}; - -export default PlusMinusField; diff --git a/web/src/components/Popup/Description/Appeal.tsx b/web/src/components/Popup/Description/Appeal.tsx deleted file mode 100644 index c058d37a3..000000000 --- a/web/src/components/Popup/Description/Appeal.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -const Container = styled.div` - display: flex; - flex-direction: column; -`; - -const StyledAmountFunded = styled.div` - display: flex; - margin-left: ${responsiveSize(8, 44, 300)}; - margin-right: ${responsiveSize(8, 44, 300)}; - color: ${({ theme }) => theme.secondaryText}; - text-align: center; -`; - -const StyledOptionFunded = styled.div` - display: flex; - margin-bottom: ${responsiveSize(16, 32, 300)}; - margin-left: ${responsiveSize(8, 44, 300)}; - margin-right: ${responsiveSize(8, 44, 300)}; - color: ${({ theme }) => theme.secondaryText}; - text-align: center; -`; - -const AmountContainer = styled.div` - color: ${({ theme }) => theme.primaryText}; -`; - -const OptionContainer = styled.div` - color: ${({ theme }) => theme.primaryText}; -`; - -interface IAppeal { - amount: string; - option: string; -} - -const Appeal: React.FC<IAppeal> = ({ amount, option }) => { - return ( - <Container> - <StyledAmountFunded> - You have funded: &nbsp;<AmountContainer>{amount} ETH</AmountContainer> - </StyledAmountFunded> - <StyledOptionFunded> - Option funded: &nbsp;<OptionContainer>{option}</OptionContainer> - </StyledOptionFunded> - </Container> - ); -}; -export default Appeal; diff --git a/web/src/components/Popup/Description/DisputeCreated.tsx b/web/src/components/Popup/Description/DisputeCreated.tsx deleted file mode 100644 index 50bc29d64..000000000 --- a/web/src/components/Popup/Description/DisputeCreated.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import React, { useMemo } from "react"; -import styled from "styled-components"; - -import Skeleton from "react-loading-skeleton"; - -import { useCourtDetails } from "hooks/queries/useCourtDetails"; -import { formatDate, getCurrentTime } from "utils/date"; -import { isUndefined } from "utils/index"; - -import { responsiveSize } from "styles/responsiveSize"; - -const Container = styled.div` - display: flex; - flex-direction: column; - margin-bottom: 24px; -`; - -const StyledTitle = styled.div` - margin-left: ${responsiveSize(8, 44, 300)}; - margin-right: ${responsiveSize(8, 44, 300)}; - color: ${({ theme }) => theme.secondaryText}; - text-align: center; -`; - -const StyledDateContainer = styled.span` - color: ${({ theme }) => theme.primaryText}; -`; - -const StyledSubtitle = styled(StyledTitle)` - margin-top: 24px; - color: ${({ theme }) => theme.primaryText}; -`; -interface IDisputeCreated { - courtId: string; -} - -const DisputeCreated: React.FC<IDisputeCreated> = ({ courtId }) => { - const { data: courtDetails } = useCourtDetails(courtId); - - const date = useMemo( - () => - !isUndefined(courtDetails?.court?.timesPerPeriod) - ? calculateMinResolveTime(courtDetails?.court.timesPerPeriod) - : undefined, - [courtDetails] - ); - - return ( - <Container> - <StyledTitle> - 🎉 Your case was successfully submitted to Kleros. A pool of jurors will be drawn to evaluate the case and vote - at most{" "} - {isUndefined(date) ? ( - <Skeleton width={60} height={20} /> - ) : ( - <StyledDateContainer>{formatDate(date)}</StyledDateContainer> - )} - . 🎉 - </StyledTitle> - <StyledSubtitle>Now, it’s time to submit evidence to support the case.</StyledSubtitle> - </Container> - ); -}; - -const calculateMinResolveTime = (timesPerPeriod: string[]) => - timesPerPeriod.reduce((acc, val) => acc + parseInt(val), 0) + getCurrentTime(); - -export default DisputeCreated; diff --git a/web/src/components/Popup/Description/StakeWithdraw.tsx b/web/src/components/Popup/Description/StakeWithdraw.tsx deleted file mode 100644 index ca6029501..000000000 --- a/web/src/components/Popup/Description/StakeWithdraw.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { formatUnits } from "viem"; -import { useAccount } from "wagmi"; - -import KlerosLogo from "svgs/icons/kleros.svg"; - -import { REFETCH_INTERVAL } from "consts/index"; -import { useReadSortitionModuleGetJurorBalance } from "hooks/contracts/generated"; -import { isUndefined } from "utils/index"; - -import { responsiveSize } from "styles/responsiveSize"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; -`; - -const StyledKlerosLogo = styled(KlerosLogo)` - width: 14px; - height: 14px; -`; - -const StyledTitle = styled.div` - display: flex; - margin-bottom: ${responsiveSize(16, 32, 300)}; - margin-left: ${responsiveSize(8, 44, 300)}; - margin-right: ${responsiveSize(8, 44, 300)}; - color: ${({ theme }) => theme.secondaryText}; - text-align: center; -`; - -const AmountStakedOrWithdrawnContainer = styled.div` - font-size: 24px; - font-weight: 600; - color: ${({ theme }) => theme.secondaryPurple}; - margin-bottom: ${responsiveSize(0, 4, 300)}; -`; - -const TotalStakeContainer = styled.div` - display: flex; - font-size: 14px; - align-items: center; - justify-content: center; - margin-bottom: ${responsiveSize(8, 32, 300)}; -`; - -const MyStakeContainer = styled.div` - display: flex; - margin: 0px ${responsiveSize(4, 8, 300)}; - color: ${({ theme }) => theme.secondaryText}; -`; - -const AmountContainer = styled.div` - font-weight: 600; - color: ${({ theme }) => theme.primaryText}; -`; - -interface IStakeWithdraw { - pnkStaked: string; - courtName: string; - isStake: boolean; - courtId: string; -} - -interface IAmountStakedOrWithdrawn { - pnkStaked: string; - isStake: boolean; -} - -const AmountStakedOrWithdrawn: React.FC<IAmountStakedOrWithdrawn> = ({ pnkStaked, isStake }) => { - return isStake ? <div>+ {pnkStaked} PNK</div> : <div>- {pnkStaked} PNK</div>; -}; - -const StakeWithdraw: React.FC<IStakeWithdraw> = ({ pnkStaked, courtName, isStake, courtId }) => { - const { address } = useAccount(); - - const { data: jurorBalance } = useReadSortitionModuleGetJurorBalance({ - query: { - enabled: !isUndefined(address) && !isUndefined(courtId), - refetchInterval: REFETCH_INTERVAL, - }, - args: [address ?? "0x", BigInt(courtId)], - }); - - return ( - <Container> - <StyledTitle> - 🎉 Your {isStake ? "stake" : "unstake"} in the {courtName} court was successful! 🎉 - </StyledTitle> - <AmountStakedOrWithdrawnContainer> - <AmountStakedOrWithdrawn pnkStaked={pnkStaked} isStake={isStake} /> - </AmountStakedOrWithdrawnContainer> - - <TotalStakeContainer> - <StyledKlerosLogo /> <MyStakeContainer>My Stake:</MyStakeContainer>{" "} - <AmountContainer>{`${formatUnits(jurorBalance?.[2] ?? BigInt(0), 18)} PNK`} </AmountContainer> - </TotalStakeContainer> - </Container> - ); -}; -export default StakeWithdraw; diff --git a/web/src/components/Popup/Description/SwapSuccess.tsx b/web/src/components/Popup/Description/SwapSuccess.tsx deleted file mode 100644 index 14ef5af9d..000000000 --- a/web/src/components/Popup/Description/SwapSuccess.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import ArrowIcon from "svgs/icons/arrow.svg"; -import PnkIcon from "svgs/tokens/pnk.svg"; - -import { responsiveSize } from "styles/responsiveSize"; - -import LightButton from "components/LightButton"; -import { Divider } from "components/Divider"; -import { Token } from "pages/GetPnk/Swap/TokenSelect"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - margin-bottom: 24px; - margin-top: 32px; - gap: 24px; -`; - -const AmountContainer = styled.div` - display: flex; - align-items: center; - height: fit-content; - gap: ${responsiveSize(16, 32)}; -`; - -const SVGContainer = styled.div` - width: ${responsiveSize(30, 50)}; - height: ${responsiveSize(30, 50)}; -`; - -const Amount = styled.h1` - color: ${({ theme }) => theme.secondaryPurple}; - font-size: ${responsiveSize(32, 64)}; - margin: 0px; -`; - -const Subtitle = styled.label` - display: flex; -`; - -const StyledButton = styled(LightButton)` - display: flex; - flex-direction: row-reverse; - gap: 8px; - > .button-text { - color: ${({ theme }) => theme.primaryBlue}; - } - padding-top: 0px; -`; - -const StyledDivider = styled(Divider)` - margin: ${responsiveSize(32, 64)} 0px 0px; -`; - -interface ISwapSuccess { - hash: string; - amount: string; - from?: Token; - to?: Token; - isClaim?: boolean; -} - -const SwapSuccess: React.FC<ISwapSuccess> = ({ hash, amount, isClaim, from, to }) => { - const baseUrl = `https://sepolia.arbiscan.io/tx/${hash}`; - return ( - <Container> - <AmountContainer> - <Amount>{amount} PNK</Amount> - <SVGContainer> - <PnkIcon /> - </SVGContainer> - </AmountContainer> - {isClaim ? ( - <Subtitle>Claimed: {amount} PNK (Testnet)</Subtitle> - ) : ( - <Subtitle> - Bridge from &nbsp;<small>Ethereum</small>&nbsp; to &nbsp;<small>Arbitrum</small> - </Subtitle> - )} - <StyledDivider /> - <StyledButton - onClick={() => window.open(baseUrl, "_blank", "rel=noopener noreferrer")} - text={"View transaction on Etherscan"} - Icon={ArrowIcon} - /> - </Container> - ); -}; - -export default SwapSuccess; diff --git a/web/src/components/Popup/Description/VoteWithCommit.tsx b/web/src/components/Popup/Description/VoteWithCommit.tsx deleted file mode 100644 index e1ecb64d6..000000000 --- a/web/src/components/Popup/Description/VoteWithCommit.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from "react"; - -import { VoteDescriptionEmphasizedDate } from "components/Popup"; - -interface IVoteWithCommit { - date?: string; - automaticVoteReveal?: boolean; -} - -const VoteWithCommit: React.FC<IVoteWithCommit> = ({ date, automaticVoteReveal = false }) => - automaticVoteReveal ? ( - <div>Your vote is confirmed. It's kept secret until all jurors have cast their votes.</div> - ) : ( - <div> - Your vote is confirmed. It's kept secret until all jurors have cast their votes. - <VoteDescriptionEmphasizedDate> - You'll need to justify and reveal your vote on {date} - </VoteDescriptionEmphasizedDate> - </div> - ); - -export default VoteWithCommit; diff --git a/web/src/components/Popup/Description/VoteWithoutCommit.tsx b/web/src/components/Popup/Description/VoteWithoutCommit.tsx deleted file mode 100644 index 06d08792f..000000000 --- a/web/src/components/Popup/Description/VoteWithoutCommit.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import { VoteDescriptionEmphasizedDate } from "components/Popup"; - -interface IVoteWithoutCommit { - date: string; -} - -const VoteWithoutCommit: React.FC<IVoteWithoutCommit> = ({ date }) => { - return ( - <div> - The decision date is <VoteDescriptionEmphasizedDate>{date}</VoteDescriptionEmphasizedDate> with the possibility - for appeals. After that time you will be informed about the jury decision. - </div> - ); -}; -export default VoteWithoutCommit; diff --git a/web/src/components/Popup/ExtraInfo/DisputeCreatedExtraInfo.tsx b/web/src/components/Popup/ExtraInfo/DisputeCreatedExtraInfo.tsx deleted file mode 100644 index e19127949..000000000 --- a/web/src/components/Popup/ExtraInfo/DisputeCreatedExtraInfo.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -const Container = styled.div` - display: flex; - color: ${({ theme }) => theme.secondaryText}; - text-align: center; - margin-top: ${responsiveSize(8, 24, 300)}; - margin-right: ${responsiveSize(8, 44, 300)}; - margin-left: ${responsiveSize(8, 44, 300)}; -`; - -const DisputeCreatedExtraInfo: React.FC = () => { - return ( - <Container> - { - "In order to better track the case progress, we recommend you to subscribe to notifications: Settings > Notifications" - } - </Container> - ); -}; -export default DisputeCreatedExtraInfo; diff --git a/web/src/components/Popup/ExtraInfo/StakeWithdrawExtraInfo.tsx b/web/src/components/Popup/ExtraInfo/StakeWithdrawExtraInfo.tsx deleted file mode 100644 index fbaa97783..000000000 --- a/web/src/components/Popup/ExtraInfo/StakeWithdrawExtraInfo.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -const Container = styled.div` - display: flex; - color: ${({ theme }) => theme.secondaryText}; - text-align: center; - margin-top: ${responsiveSize(8, 24, 300)}; - margin-right: ${responsiveSize(8, 44, 300)}; - margin-left: ${responsiveSize(8, 44, 300)}; -`; - -const StakeWithdrawExtraInfo: React.FC = () => { - return ( - <Container> - { - "In order not to miss when you're drawn for cases, make sure to subscribe to notifications: Settings > Notifications" - } - </Container> - ); -}; -export default StakeWithdrawExtraInfo; diff --git a/web/src/components/Popup/ExtraInfo/VoteWithCommitExtraInfo.tsx b/web/src/components/Popup/ExtraInfo/VoteWithCommitExtraInfo.tsx deleted file mode 100644 index 23f4274e2..000000000 --- a/web/src/components/Popup/ExtraInfo/VoteWithCommitExtraInfo.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -import InfoCard from "components/InfoCard"; - -const StyledInfoCard = styled(InfoCard)` - margin: ${responsiveSize(8, 24, 300)} ${responsiveSize(8, 32, 300)} 0; - font-size: 14px; - font-weight: 400; - line-height: 19px; -`; - -interface Props { - automaticVoteReveal?: boolean; -} - -const VoteWithCommitExtraInfo: React.FC<Props> = ({ automaticVoteReveal = false }) => { - const msg = automaticVoteReveal - ? "Enable notifications to be updated about the progress of the case: Settings > Notifications" - : "Enable notifications to be reminded when the reveal time comes: Settings > Notifications"; - return <StyledInfoCard msg={msg} />; -}; - -export default VoteWithCommitExtraInfo; diff --git a/web/src/components/Popup/MiniGuides/Appeal/CrowdfundAppeal.tsx b/web/src/components/Popup/MiniGuides/Appeal/CrowdfundAppeal.tsx deleted file mode 100644 index 462a493bb..000000000 --- a/web/src/components/Popup/MiniGuides/Appeal/CrowdfundAppeal.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import CrowdfundAppealSvg from "svgs/mini-guides/appeal/crowdfund-appeal.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledCrowdfundAppealSvg = styled(CrowdfundAppealSvg)` - [class$="rect-bg"] { - fill: ${({ theme }) => theme.whiteBackground}; - stroke: ${({ theme }) => theme.stroke}; - } - - [class$="path-1"], - [class$="path-2"], - [class$="path-3"] { - fill: ${({ theme }) => theme.primaryText}; - } - - [class$="rect-fg"] { - fill: ${({ theme }) => theme.whiteBackground}; - stroke: ${({ theme }) => theme.stroke}; - } - - [class$="rect-accent"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - - [class$="path-4"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - - [class$="path-5"] { - fill: ${({ theme }) => theme.secondaryText}; - } -`; - -const CrowdfundAppeal: React.FC = () => <StyledImage as={StyledCrowdfundAppealSvg} />; - -export default CrowdfundAppeal; diff --git a/web/src/components/Popup/MiniGuides/Appeal/PayoffSimulator.tsx b/web/src/components/Popup/MiniGuides/Appeal/PayoffSimulator.tsx deleted file mode 100644 index d3db7bcfa..000000000 --- a/web/src/components/Popup/MiniGuides/Appeal/PayoffSimulator.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import PayoffSimulatorSvg from "svgs/mini-guides/appeal/payoff-simulator.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledPayoffSimulatorSvg = styled(PayoffSimulatorSvg)` - [class$="circle-1"] { - fill: ${({ theme }) => theme.successLight}; - } - - [class$="rect-2"] { - fill: ${({ theme }) => theme.mediumBlue}; - } - - [class$="circle-2"] { - fill: ${({ theme }) => theme.mediumPurple}; - } - - [class$="rect-1"], - [class$="rect-5"] { - fill: ${({ theme }) => theme.whiteBackground}; - stroke: ${({ theme }) => theme.stroke}; - } - - [class$="rect-6"], - [class$="rect-7"], - [class$="rect-8"] { - fill: ${({ theme }) => theme.white}; - } - - [class$="path-2"] { - fill: ${({ theme }) => theme.success}; - } - - [class$="path-3"], - [class$="path-16"] { - fill: ${({ theme }) => theme.secondaryPurple}; - } - - [class$="path-11"], - [class$="path-13"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - - [class$="path-4"], - [class$="path-5"], - [class$="path-6"], - [class$="path-7"], - [class$="path-8"], - [class$="path-9"], - [class$="path-10"], - [class$="path-12"], - [class$="path-14"], - [class$="path-15"], - [class$="path-17"] { - fill: ${({ theme }) => theme.primaryText}; - } - - [class$="rect-3"], - [class$="rect-4"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - - [class$="line-1"], - [class$="line-2"], - [class$="path-1"] { - stroke: ${({ theme }) => theme.mediumBlue}; - } - - [class$="path-1"] { - fill: ${({ theme }) => theme.lightBlue}; - } -`; - -const PayoffSimulator: React.FC = () => <StyledImage as={StyledPayoffSimulatorSvg} />; - -export default PayoffSimulator; diff --git a/web/src/components/Popup/MiniGuides/Appeal/StageOne.tsx b/web/src/components/Popup/MiniGuides/Appeal/StageOne.tsx deleted file mode 100644 index 2eb625b51..000000000 --- a/web/src/components/Popup/MiniGuides/Appeal/StageOne.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import StageOneSvg from "svgs/mini-guides/appeal/stage-one.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledStageOneSvg = styled(StageOneSvg)` - [class$="rect-1"], - [class$="rect-2"], - [class$="rect-6"], - [class$="circle-1"], - [class$="circle-2"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - - [class$="rect-4"], - [class$="rect-8"] { - fill: ${({ theme }) => theme.stroke}; - } - - [class$="rect-5"], - [class$="path-9"], - [class$="path-10"] { - fill: ${({ theme }) => theme.secondaryPurple}; - } - - [class$="rect-9"], - [class$="circle-3"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - - [class$="rect-10"] { - fill: ${({ theme }) => theme.lightBlue}; - stroke: ${({ theme }) => theme.mediumBlue}; - } - - [class$="rect-11"], - [class$="rect-12"] { - fill: ${({ theme }) => theme.white}; - } - - [class$="path-2"], - [class$="path-6"] { - fill: ${({ theme }) => theme.primaryText}; - } - - [class$="path-1"], - [class$="path-5"] { - fill: ${({ theme }) => theme.secondaryText}; - } - - [class$="path-3"], - [class$="path-4"] { - fill: ${({ theme }) => theme.success}; - } - - [class$="path-7"], - [class$="path-8"] { - fill: ${({ theme }) => theme.warning}; - } - - [class$="rect-3"], - [class$="rect-7"], - [class$="circle-1"] { - stroke: ${({ theme }) => theme.stroke}; - } - - [class$="circle-2"] { - stroke: ${({ theme }) => theme.primaryBlue}; - } -`; - -const StageOne: React.FC = () => <StyledImage as={StyledStageOneSvg} />; - -export default StageOne; diff --git a/web/src/components/Popup/MiniGuides/Appeal/StageTwo.tsx b/web/src/components/Popup/MiniGuides/Appeal/StageTwo.tsx deleted file mode 100644 index c8fcf3dbe..000000000 --- a/web/src/components/Popup/MiniGuides/Appeal/StageTwo.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import StageTwoSvg from "svgs/mini-guides/appeal/stage-two.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledStageTwoSvg = styled(StageTwoSvg)` - [class$="rect-1"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - - [class$="rect-2"], - [class$="rect-6"] { - fill: ${({ theme }) => theme.lightBlue}; - stroke: ${({ theme }) => theme.mediumBlue}; - } - - [class$="rect-3"], - [class$="path-2"], - [class$="path-3"] { - fill: ${({ theme }) => theme.success}; - } - - [class$="rect-4"] { - fill: ${({ theme }) => theme.stroke}; - } - - [class$="rect-5"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - - [class$="rect-7"] { - fill: ${({ theme }) => theme.white}; - } - - [class$="rect-6"], - [class$="line-1"] { - stroke: ${({ theme }) => theme.mediumBlue}; - } - - [class$="path-1"], - [class$="path-4"], - [class$="path-5"], - [class$="path-6"] { - fill: ${({ theme }) => theme.primaryText}; - } - - [class$="path-7"], - [class$="path-8"] { - fill: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const StageTwo: React.FC = () => <StyledImage as={StyledStageTwoSvg} />; - -export default StageTwo; diff --git a/web/src/components/Popup/MiniGuides/Appeal/WhoWinsRewards.tsx b/web/src/components/Popup/MiniGuides/Appeal/WhoWinsRewards.tsx deleted file mode 100644 index 609707c63..000000000 --- a/web/src/components/Popup/MiniGuides/Appeal/WhoWinsRewards.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import WhoWinsRewardsSvg from "svgs/mini-guides/appeal/who-wins-rewards.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledWhoWinsRewardsSvg = styled(WhoWinsRewardsSvg)` - [class$="path-1"] { - fill: ${({ theme }) => theme.lightBlue}; - stroke: ${({ theme }) => theme.mediumBlue}; - } - [class$="path-2"], - [class$="path-19"], - [class$="path-20"] { - fill: ${({ theme }) => theme.primaryText}; - } - [class$="path-3"], - [class$="path-7"], - [class$="path-8"], - [class$="path-9"], - [class$="path-10"] { - fill: ${({ theme }) => theme.success}; - } - [class$="path-4"], - [class$="path-5"], - [class$="path-6"], - [class$="path-12"], - [class$="path-13"], - [class$="path-14"] { - fill: ${({ theme }) => theme.tint}; - } - [class$="path-11"], - [class$="path-15"], - [class$="path-16"], - [class$="path-17"], - [class$="path-18"] { - fill: ${({ theme }) => theme.error}; - } - [class$="line-1"], - [class$="line-2"] { - stroke: ${({ theme }) => theme.mediumBlue}; - } - [class$="rect-1"], - [class$="rect-2"] { - fill: ${({ theme }) => theme.tintMedium}; - } -`; - -const WhoWinsRewards: React.FC = () => <StyledImage as={StyledWhoWinsRewardsSvg} />; - -export default WhoWinsRewards; diff --git a/web/src/components/Popup/MiniGuides/Appeal/index.tsx b/web/src/components/Popup/MiniGuides/Appeal/index.tsx deleted file mode 100644 index d31f70bf8..000000000 --- a/web/src/components/Popup/MiniGuides/Appeal/index.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import React from "react"; - -import PageContentsTemplate from "../PageContentsTemplate"; - -import CrowdfundAppeal from "./CrowdfundAppeal"; -import PayoffSimulator from "./PayoffSimulator"; -import StageOne from "./StageOne"; -import StageTwo from "./StageTwo"; -import WhoWinsRewards from "./WhoWinsRewards"; - -const leftPageContents = [ - { - title: "Appeal", - paragraphs: [ - "If after the jury has reached a decision, a party is not satisfied (because she thinks the result was" + - " unfair), she can appeal and have the dispute ruled again.", - "Every time the case is appealed a new round starts with all the voting options available for voting" + - " again. The results of the previous rounds are irrelevant in terms of what the final result will be.", - "Each new appeal instance will have twice the previous number of jurors plus one.", - ], - }, - { - title: "Appeal: Stage 1", - paragraphs: [ - "The jury decision is appealed when stages 1 and 2 are fully funded. In stage 1, one of the losing options" + - " must be fully funded. If no option is fully funded in time the jury decision is maintained.", - ], - }, - { - title: "Appeal: Stage 2", - paragraphs: [ - "Now, options compete together against the option fully funded at stage 1. The sum of funds must reach 100%." + - " If it's not fully funded in time the option fully funded at stage 1 is declared the winner of the case. ", - ], - }, - { - title: "Crowdfunding Rewards", - paragraphs: [ - "Anyone can contribute to the crowdfunding of the appeal fees. Crowdfunders can win rewards in case the option" + - " they fund wins. See how much you can earn by funding appeals, at the payoff simulator.", - ], - }, - { - title: "Who wins the rewards?", - paragraphs: [ - "After the final decision (when no more appeals are possible), anyone who contributed to the winning option" + - " receive the crowdfunding rewards.", - "In case the winning option was not funded by anyone, contributors to the other options are partially" + - " reimbursed (Amount funded minus arbitration cost to pay the jurors).", - "In case no one votes on the new round, 'Refuse to arbitrate' is the chosen option.", - ], - }, -]; - -const rightPageComponents = [CrowdfundAppeal, StageOne, StageTwo, PayoffSimulator, WhoWinsRewards]; - -interface IAppeal { - toggleMiniGuide: () => void; -} - -const Appeal: React.FC<IAppeal> = ({ toggleMiniGuide }) => { - return ( - <PageContentsTemplate - toggleMiniGuide={toggleMiniGuide} - leftPageContents={leftPageContents} - rightPageComponents={rightPageComponents} - isOnboarding={false} - canClose={true} - isVisible={true} - /> - ); -}; - -export default Appeal; diff --git a/web/src/components/Popup/MiniGuides/BinaryVoting/PrivateVoting.tsx b/web/src/components/Popup/MiniGuides/BinaryVoting/PrivateVoting.tsx deleted file mode 100644 index b31631d27..000000000 --- a/web/src/components/Popup/MiniGuides/BinaryVoting/PrivateVoting.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import PrivateVotingSvg from "svgs/mini-guides/binary-voting/private-voting.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledPrivateVotingSvg = styled(PrivateVotingSvg)` - [class$="rect-1"], - [class$="circle-2"], - [class$="path-2"], - [class$="path-9"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - [class$="circle-1"], - [class$="circle-3"] { - fill: ${({ theme }) => theme.primaryBlue}; - stroke: ${({ theme }) => theme.primaryBlue}; - } - [class$="rect-1"], - [class$="circle-2"], - [class$="path-4"], - [class$="path-8"], - [class$="path-11"] { - stroke: ${({ theme }) => theme.stroke}; - } - [class$="path-1"], - [class$="path-7"] { - fill: ${({ theme }) => theme.secondaryText}; - } - [class$="path-3"], - [class$="path-6"], - [class$="path-10"] { - fill: ${({ theme }) => theme.primaryText}; - } - [class$="path-5"] { - fill: ${({ theme }) => theme.stroke}; - } -`; - -const PrivateVoting: React.FC = () => <StyledImage as={StyledPrivateVotingSvg} />; - -export default PrivateVoting; diff --git a/web/src/components/Popup/MiniGuides/BinaryVoting/VotingModule.tsx b/web/src/components/Popup/MiniGuides/BinaryVoting/VotingModule.tsx deleted file mode 100644 index 2cde2a83a..000000000 --- a/web/src/components/Popup/MiniGuides/BinaryVoting/VotingModule.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import VotingModuleSvg from "svgs/mini-guides/binary-voting/voting-module.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledVotingModuleSvg = styled(VotingModuleSvg)` - [class$="rect-1"], - [class$="rect-4"], - [class$="path-1"], - [class$="path-2"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - - [class$="rect-2"], - [class$="rect-3"], - [class$="path-4"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - - [class$="path-3"] { - fill: ${({ theme }) => theme.lightBlue}; - } - - [class$="path-5"] { - fill: ${({ theme }) => theme.secondaryText}; - } - - [class$="rect-1"] { - stroke: ${({ theme }) => theme.stroke}; - } - - [class$="rect-5"] { - stroke: ${({ theme }) => theme.primaryBlue}; - } -`; - -const VotingModule: React.FC = () => <StyledImage as={StyledVotingModuleSvg} />; - -export default VotingModule; diff --git a/web/src/components/Popup/MiniGuides/BinaryVoting/index.tsx b/web/src/components/Popup/MiniGuides/BinaryVoting/index.tsx deleted file mode 100644 index 9849da711..000000000 --- a/web/src/components/Popup/MiniGuides/BinaryVoting/index.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React from "react"; - -import PageContentsTemplate from "../PageContentsTemplate"; -import JurorRewards from "../Staking/JurorRewards"; - -import PrivateVoting from "./PrivateVoting"; -import VotingModule from "./VotingModule"; - -const leftPageContents = [ - { - title: "Binary Voting", - paragraphs: [ - "Jurors choose one option to vote. The option which receives the majority of votes is considered the winner.", - "Refuse to Arbitrate is used when a dispute has been posted in the wrong court, has no clear outcome, or" + - " evidence is immoral and/or illegal. In case the majority decides to Refuse to Arbitrate, that option" + - " is considered the winner.", - ], - }, - { - title: "Private Voting", - paragraphs: [ - "This feature introduces the commit and reveal mechanism, enhancing the secrecy and integrity of votes.", - "What’s different? In courts with private voting, jurors cast their votes in two parts: Firstly, they" + - " vote on a chosen option. The vote is kept secret from other jurors. (Commit period). Finally, they reveal" + - " their votes adding a justification (Voting Period).", - "Note that jurors who miss the Commit period, cannot progress to the Voting period, not being able to conclude" + - " the voting. Make sure not to miss the Commit, and the Voting periods.", - ], - }, - { - title: "Juror Rewards", - paragraphs: [ - "Jurors whose vote is coherent with the final jury decision (after all the appeal instances) receive the" + - " Juror Rewards composed of arbitration fees (ETH) + PNK redistribution between jurors. Jurors whose vote" + - " is not coherent with the final jury decision, lose their locked PNK.", - ], - }, -]; - -const rightPageComponents = [VotingModule, PrivateVoting, JurorRewards]; - -interface IBinaryVoting { - toggleMiniGuide: () => void; -} - -const BinaryVoting: React.FC<IBinaryVoting> = ({ toggleMiniGuide }) => { - return ( - <PageContentsTemplate - toggleMiniGuide={toggleMiniGuide} - leftPageContents={leftPageContents} - rightPageComponents={rightPageComponents} - isOnboarding={false} - canClose={true} - isVisible={true} - /> - ); -}; - -export default BinaryVoting; diff --git a/web/src/components/Popup/MiniGuides/DisputeResolver/Parameters.tsx b/web/src/components/Popup/MiniGuides/DisputeResolver/Parameters.tsx deleted file mode 100644 index b7a23c393..000000000 --- a/web/src/components/Popup/MiniGuides/DisputeResolver/Parameters.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import ParametersSvg from "svgs/mini-guides/dispute-resolver/parameters.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledParametersSvg = styled(ParametersSvg)` - [class$="rect-1"], - [class$="rect-3"], - [class$="rect-7"], - [class$="path-3"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - [class$="rect-2"], - [class$="rect-6"], - [class$="rect-8"] { - stroke: ${({ theme }) => theme.stroke}; - } - [class$="rect-4"] { - stroke: ${({ theme }) => theme.primaryBlue}; - } - [class$="rect-5"], - [class$="path-2"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - [class$="path-1"], - [class$="path-4"], - [class$="path-7"], - [class$="path-8"] { - fill: ${({ theme }) => theme.primaryText}; - } - [class$="path-5"] { - fill: ${({ theme }) => theme.stroke}; - } - [class$="path-6"] { - fill: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const Parameters: React.FC = () => <StyledImage as={StyledParametersSvg} />; - -export default Parameters; diff --git a/web/src/components/Popup/MiniGuides/DisputeResolver/Parties.tsx b/web/src/components/Popup/MiniGuides/DisputeResolver/Parties.tsx deleted file mode 100644 index 98c7877dc..000000000 --- a/web/src/components/Popup/MiniGuides/DisputeResolver/Parties.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import PartiesSvg from "svgs/mini-guides/dispute-resolver/parties.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledPartiesSvg = styled(PartiesSvg)` - [class$="rect-1"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - [class$="rect-2"], - [class$="rect-3"], - [class$="rect-4"], - [class$="rect-5"], - [class$="rect-6"] { - stroke: ${({ theme }) => theme.stroke}; - fill: ${({ theme }) => theme.whiteBackground}; - } - [class$="path-1"], - [class$="path-3"], - [class$="path-5"], - [class$="path-7"] { - fill: ${({ theme }) => theme.secondaryText}; - } - [class$="path-2"], - [class$="path-4"], - [class$="path-6"], - [class$="path-8"] { - fill: ${({ theme }) => theme.primaryText}; - } -`; - -const Parties: React.FC = () => <StyledImage as={StyledPartiesSvg} />; - -export default Parties; diff --git a/web/src/components/Popup/MiniGuides/DisputeResolver/Policy.tsx b/web/src/components/Popup/MiniGuides/DisputeResolver/Policy.tsx deleted file mode 100644 index d757c6eaa..000000000 --- a/web/src/components/Popup/MiniGuides/DisputeResolver/Policy.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import PolicySvg from "svgs/mini-guides/dispute-resolver/policy.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledPolicySvg = styled(PolicySvg)` - [class$="rect-1"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - [class$="rect-2"] { - stroke: ${({ theme }) => theme.stroke}; - } - [class$="rect-3"] { - fill: ${({ theme }) => theme.mediumBlue}; - stroke: ${({ theme }) => theme.primaryBlue}; - } - [class$="path-1"], - [class$="path-3"] { - fill: ${({ theme }) => theme.primaryText}; - } - [class$="path-2"], - [class$="path-4"] { - fill: ${({ theme }) => theme.primaryBlue}; - } -`; - -const Policy: React.FC = () => <StyledImage as={StyledPolicySvg} />; - -export default Policy; diff --git a/web/src/components/Popup/MiniGuides/DisputeResolver/StartACase.tsx b/web/src/components/Popup/MiniGuides/DisputeResolver/StartACase.tsx deleted file mode 100644 index 71241e71b..000000000 --- a/web/src/components/Popup/MiniGuides/DisputeResolver/StartACase.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import StartACaseSvg from "svgs/mini-guides/dispute-resolver/start-a-case.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledStartACaseSvg = styled(StartACaseSvg)` - [class$="rect-1"], - [class$="path-1"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - [class$="rect-2"], - [class$="circle-2"], - [class$="circle-3"], - [class$="circle-4"], - [class$="path-12"], - [class$="path-13"] { - stroke: ${({ theme }) => theme.stroke}; - } - [class$="circle-1"], - [class$="path-11"] { - stroke: ${({ theme }) => theme.primaryBlue}; - fill: ${({ theme }) => theme.primaryBlue}; - } - [class$="circle-2"], - [class$="circle-3"], - [class$="circle-4"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - [class$="path-2"], - [class$="path-18"] { - fill: ${({ theme }) => theme.primaryText}; - } - [class$="path-3"], - [class$="path-5"], - [class$="path-6"], - [class$="path-7"], - [class$="path-8"], - [class$="path-9"], - [class$="path-10"], - [class$="path-15"], - [class$="path-17"] { - fill: ${({ theme }) => theme.secondaryText}; - } - [class$="path-4"], - [class$="path-14"], - [class$="path-16"] { - fill: ${({ theme }) => theme.stroke}; - } -`; - -const StartACase: React.FC = () => <StyledImage as={StyledStartACaseSvg} />; - -export default StartACase; diff --git a/web/src/components/Popup/MiniGuides/DisputeResolver/VotingOptions.tsx b/web/src/components/Popup/MiniGuides/DisputeResolver/VotingOptions.tsx deleted file mode 100644 index 1dbaaf3d7..000000000 --- a/web/src/components/Popup/MiniGuides/DisputeResolver/VotingOptions.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import VotingOptionsSvg from "svgs/mini-guides/dispute-resolver/voting-options.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledVotingOptionsSvg = styled(VotingOptionsSvg)` - [class$="rect-1"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - [class$="rect-2"], - [class$="rect-3"], - [class$="rect-4"], - [class$="rect-5"] { - stroke: ${({ theme }) => theme.stroke}; - fill: ${({ theme }) => theme.whiteBackground}; - } - [class$="circle-1"], - [class$="circle-2"], - [class$="path-8"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - [class$="path-1"], - [class$="path-3"], - [class$="path-5"], - [class$="path-7"] { - fill: ${({ theme }) => theme.primaryText}; - } - [class$="path-2"], - [class$="path-4"], - [class$="path-6"], - [class$="path-9"] { - fill: ${({ theme }) => theme.secondaryText}; - } -`; - -const VotingOptions: React.FC = () => <StyledImage as={StyledVotingOptionsSvg} />; - -export default VotingOptions; diff --git a/web/src/components/Popup/MiniGuides/DisputeResolver/WellDone.tsx b/web/src/components/Popup/MiniGuides/DisputeResolver/WellDone.tsx deleted file mode 100644 index 8b50fff70..000000000 --- a/web/src/components/Popup/MiniGuides/DisputeResolver/WellDone.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import WellDoneSvg from "svgs/mini-guides/dispute-resolver/well-done.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledWellDoneSvg = styled(WellDoneSvg)` - [class$="rect-1"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - [class$="rect-2"], - [class$="rect-3"], - [class$="line-1"], - [class$="line-2"] { - stroke: ${({ theme }) => theme.stroke}; - } - [class$="circle-1"] { - fill: ${({ theme }) => theme.primaryPurple}; - } - [class$="path-1"], - [class$="path-2"], - [class$="path-4"], - [class$="path-5"], - [class$="path-7"], - [class$="path-9"], - [class$="path-11"], - [class$="path-15"], - [class$="path-18"], - [class$="path-21"] { - fill: ${({ theme }) => theme.primaryText}; - } - [class$="path-3"], - [class$="path-6"], - [class$="path-8"], - [class$="path-10"], - [class$="path-12"], - [class$="path-14"], - [class$="path-17"], - [class$="path-20"] { - fill: ${({ theme }) => theme.secondaryText}; - } - [class$="path-13"], - [class$="path-16"], - [class$="path-19"] { - fill: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const WellDone: React.FC = () => <StyledImage as={StyledWellDoneSvg} />; - -export default WellDone; diff --git a/web/src/components/Popup/MiniGuides/DisputeResolver/index.tsx b/web/src/components/Popup/MiniGuides/DisputeResolver/index.tsx deleted file mode 100644 index 7de74c08d..000000000 --- a/web/src/components/Popup/MiniGuides/DisputeResolver/index.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import React from "react"; - -import PageContentsTemplate from "../PageContentsTemplate"; - -import StartACase from "./StartACase"; -import Parameters from "./Parameters"; -import VotingOptions from "./VotingOptions"; -import Parties from "./Parties"; -import Policy from "./Policy"; -import WellDone from "./WellDone"; - -const leftPageContents = [ - { - title: "Start a case", - paragraphs: [ - "First, you need to write a title, and a description for the case. Make it simple to read and understand.", - ], - }, - { - title: "Parameters", - paragraphs: [ - "Define some parameters:", - "• Choose a court to arbitrate the case.\n• Select a category.\n• Select the number of jurors.", - "The more jurors you select, higher the arbitration cost will be. By default we use 3 jurors for the first " + - "round. The arbitration cost is the value used to pay the jurors for their work.", - ], - }, - { - title: "Voting options", - paragraphs: [ - "Write the question jurors will answer when voting, and the voting options. You can have 2 or more options if needed.", - ], - }, - { - title: "Parties of the dispute", - paragraphs: ["Define the parties involved in the dispute."], - }, - { - title: "Policy", - paragraphs: [ - "Submit a Policy. The Policy provides jurors with a framework to vote fairly. It can be a set of " + - "criteria, a contract stating the rights and duties of the parties, or any set of pre-defined rules " + - "that are relevant to jurors' decision-making.", - ], - }, - { - title: "Well done!", - paragraphs: [ - "The case is ready to be created! Review the information, and submit the case. Don't forget to submit " + - "evidence, and follow up the dispute resolution process until its conclusion.", - ], - }, -]; - -const rightPageComponents = [StartACase, Parameters, VotingOptions, Parties, Policy, WellDone]; - -interface IDisputeResolver { - toggleMiniGuide: () => void; -} - -const DisputeResolver: React.FC<IDisputeResolver> = ({ toggleMiniGuide }) => { - return ( - <PageContentsTemplate - toggleMiniGuide={toggleMiniGuide} - leftPageContents={leftPageContents} - rightPageComponents={rightPageComponents} - isOnboarding={false} - canClose={true} - isVisible={true} - /> - ); -}; - -export default DisputeResolver; diff --git a/web/src/components/Popup/MiniGuides/JurorLevels.tsx b/web/src/components/Popup/MiniGuides/JurorLevels.tsx deleted file mode 100644 index a250cc355..000000000 --- a/web/src/components/Popup/MiniGuides/JurorLevels.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import React, { useState } from "react"; -import styled, { css } from "styled-components"; - -import { Card as _Card } from "@kleros/ui-components-library"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import Coherence from "pages/Profile/JurorInfo/Coherence"; -import PixelArt from "pages/Profile/JurorInfo/PixelArt"; - -import Template from "./MainStructureTemplate"; -import { Title, ParagraphsContainer, LeftContentContainer } from "./PageContentsTemplate"; - -const Card = styled(_Card)` - display: flex; - flex-direction: column; - align-items: center; - width: 234px; - height: 100%; - gap: 28px; - - padding: 24px; - - ${landscapeStyle( - () => css` - flex-direction: row; - width: 100%; - height: 236px; - ` - )} -`; - -const leftPageContents = [ - { - title: "Juror Level 0: Diogenes", - paragraphs: [ - "Coherence Score below 25.", - "This level is for new jurors or those frequently voting incoherently. A few coherent votes can help climb out of this level quickly.", - ], - }, - { - title: "Juror Level 1: Pythagoras", - paragraphs: [ - "Coherence Score between 25 and 49.", - "Jurors here are gaining experience and starting to build voting reliability.", - ], - }, - { - title: "Juror Level 2: Socrates", - paragraphs: [ - "Coherence Score between 50 and 69.", - "Mid-tier performance. Jurors at this level have demonstrated reasonable consistency in coherent voting.", - ], - }, - { - title: "Juror Level 3: Plato", - paragraphs: [ - "Coherence Score between 70 and 89.", - "Reliable jurors with a consistent track record of coherent votes. Just a few more coherent votes away from reaching the top.", - ], - }, - { - title: "Juror Level 4: Aristotle", - paragraphs: [ - "Coherence Score between 90 and 100.", - "Top-tier jurors with excellent coherence. Trusted members of the platform.", - ], - }, -]; - -const userLevelData = [ - { - level: 0, - title: "Diogenes", - totalCoherentVotes: 2, - totalResolvedVotes: 10, - }, - { - level: 1, - title: "Pythagoras", - totalCoherentVotes: 6, - totalResolvedVotes: 12, - }, - { - level: 2, - title: "Socrates", - totalCoherentVotes: 22, - totalResolvedVotes: 34, - }, - { - level: 3, - title: "Plato", - totalCoherentVotes: 52, - totalResolvedVotes: 65, - }, - { - level: 4, - title: "Aristotle", - totalCoherentVotes: 90, - totalResolvedVotes: 90, - }, -]; - -const LeftContent: React.FC<{ currentPage: number }> = ({ currentPage }) => { - const { title, paragraphs } = leftPageContents[currentPage - 1]; - - return ( - <LeftContentContainer> - <Title>{title}</Title> - <ParagraphsContainer> - {paragraphs.map((paragraph, index) => ( - <label key={paragraph}>{paragraph}</label> - ))} - </ParagraphsContainer> - </LeftContentContainer> - ); -}; - -const RightContent: React.FC<{ currentPage: number }> = ({ currentPage }) => { - const userData = userLevelData[currentPage - 1]; - return ( - <Card> - <PixelArt level={userData.level} width="189px" height="189px" /> - <Coherence - userLevelData={userData} - totalCoherentVotes={userData.totalCoherentVotes} - totalResolvedVotes={userData.totalResolvedVotes} - isMiniGuide={true} - /> - </Card> - ); -}; - -interface IJurorLevels { - toggleMiniGuide: () => void; -} - -const JurorLevels: React.FC<IJurorLevels> = ({ toggleMiniGuide }) => { - const [currentPage, setCurrentPage] = useState(1); - - return ( - <Template - LeftContent={<LeftContent currentPage={currentPage} />} - RightContent={<RightContent currentPage={currentPage} />} - onClose={toggleMiniGuide} - currentPage={currentPage} - setCurrentPage={setCurrentPage} - numPages={leftPageContents.length} - isOnboarding={false} - canClose={true} - isVisible={true} - /> - ); -}; - -export default JurorLevels; diff --git a/web/src/components/Popup/MiniGuides/MainStructureTemplate.tsx b/web/src/components/Popup/MiniGuides/MainStructureTemplate.tsx deleted file mode 100644 index 5771b660f..000000000 --- a/web/src/components/Popup/MiniGuides/MainStructureTemplate.tsx +++ /dev/null @@ -1,211 +0,0 @@ -import React, { Dispatch, SetStateAction, useCallback, useRef } from "react"; -import styled, { css } from "styled-components"; - -import { useLocation, useNavigate } from "react-router-dom"; -import { useClickAway } from "react-use"; - -import { CompactPagination } from "@kleros/ui-components-library"; - -import BookOpenIcon from "svgs/icons/book-open.svg"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { Overlay } from "components/Overlay"; - -const Container = styled.div<{ isVisible: boolean }>` - display: ${({ isVisible }) => (isVisible ? "flex" : "none")}; - margin: 0 auto; - z-index: 10; - position: fixed; - width: 86vw; - flex-direction: column; - - top: 45%; - left: 50%; - transform: translate(-50%, -50%); - max-height: 80vh; - overflow-y: auto; - - ${landscapeStyle( - () => css` - overflow-y: hidden; - top: 50%; - width: ${responsiveSize(700, 900)}; - flex-direction: row; - height: 500px; - ` - )} -`; - -const LeftContainer = styled.div` - display: grid; - grid-template-rows: auto 1fr auto; - width: 86vw; - padding: ${responsiveSize(24, 32)}; - padding-bottom: 32px; - background-color: ${({ theme }) => theme.whiteBackground}; - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; - - ${landscapeStyle( - () => css` - overflow-y: hidden; - width: ${responsiveSize(350, 450)}; - height: 500px; - ` - )} -`; - -const LeftContainerHeader = styled.div` - display: flex; - flex-direction: row; - justify-content: space-between; -`; - -const HowItWorks = styled.div` - display: flex; - align-items: center; - gap: 8px; - margin-bottom: ${responsiveSize(32, 64)}; - - svg path { - fill: ${({ theme }) => theme.secondaryPurple}; - } - - label { - color: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const MobileCompactPagination = styled(CompactPagination)` - display: flex; - align-items: flex-start; - - ${landscapeStyle( - () => css` - display: none; - ` - )} -`; - -const DesktopCompactPagination = styled(CompactPagination)` - display: none; - align-self: end; - justify-self: end; - - ${landscapeStyle( - () => css` - display: block; - ` - )} -`; - -const RightContainer = styled.div` - width: 86vw; - position: relative; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: ${responsiveSize(24, 32)} 17px; - background-color: ${({ theme }) => theme.mediumBlue}; - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; - - ${landscapeStyle( - () => css` - overflow-y: hidden; - width: ${responsiveSize(350, 450)}; - height: 500px; - ` - )} -`; - -interface ITemplate { - onClose: () => void; - LeftContent: React.ReactNode; - RightContent: React.ReactNode; - currentPage: number; - setCurrentPage: Dispatch<SetStateAction<number>>; - numPages: number; - isOnboarding: boolean; - canClose: boolean; - isVisible: boolean; -} - -export const miniGuideHashes = [ - "#jurorlevels-miniguide", - "#appeal-miniguide", - "#binaryvoting-miniguide", - "#disputeresolver-miniguide", - "#rankedvoting-miniguide", - "#staking-miniguide", - "#onboarding-miniguide", -] as const; -export type MiniguideHashesType = (typeof miniGuideHashes)[number]; - -const Template: React.FC<ITemplate> = ({ - onClose, - LeftContent, - RightContent, - currentPage, - setCurrentPage, - numPages, - isOnboarding, - canClose, - isVisible, -}) => { - const containerRef = useRef(null); - const location = useLocation(); - const navigate = useNavigate(); - const removeMiniGuideHashPath = useCallback(() => { - if (miniGuideHashes.some((hash) => location.hash.includes(hash))) { - navigate("#", { replace: true }); - } - }, [location.hash, navigate]); - - const onCloseAndRemoveOnboardingHashPath = () => { - onClose(); - removeMiniGuideHashPath(); - }; - - useClickAway(containerRef, () => { - if (canClose) { - onCloseAndRemoveOnboardingHashPath(); - } - }); - - return ( - <Overlay> - <Container ref={containerRef} isVisible={isVisible}> - <LeftContainer> - <LeftContainerHeader> - <HowItWorks> - <BookOpenIcon /> - <label>{isOnboarding ? "Onboarding" : "How it works"}</label> - </HowItWorks> - <MobileCompactPagination - currentPage={currentPage} - callback={setCurrentPage} - numPages={numPages} - onCloseOnLastPage={onCloseAndRemoveOnboardingHashPath} - label={`${currentPage}/${numPages}`} - /> - </LeftContainerHeader> - {LeftContent} - <DesktopCompactPagination - currentPage={currentPage} - callback={setCurrentPage} - numPages={numPages} - onCloseOnLastPage={onCloseAndRemoveOnboardingHashPath} - label={`${currentPage}/${numPages}`} - /> - </LeftContainer> - <RightContainer>{RightContent}</RightContainer> - </Container> - </Overlay> - ); -}; - -export default Template; diff --git a/web/src/components/Popup/MiniGuides/Onboarding/HowItWorks.tsx b/web/src/components/Popup/MiniGuides/Onboarding/HowItWorks.tsx deleted file mode 100644 index 47280ab30..000000000 --- a/web/src/components/Popup/MiniGuides/Onboarding/HowItWorks.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import HowItWorksSvg from "svgs/mini-guides/onboarding/how-it-works.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledHowItWorksSvg = styled(HowItWorksSvg)` - [class$="rect-1"], - [class$="rect-3"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - - [class$="path-1"], - [class$="path-2"] { - fill: ${({ theme }) => theme.secondaryPurple}; - } - - [class$="rect-2"] { - stroke: ${({ theme }) => theme.stroke}; - } -`; - -const HowItWorks: React.FC = () => <StyledImage as={StyledHowItWorksSvg} />; - -export default HowItWorks; diff --git a/web/src/components/Popup/MiniGuides/Onboarding/PnkLogoAndTitle.tsx b/web/src/components/Popup/MiniGuides/Onboarding/PnkLogoAndTitle.tsx deleted file mode 100644 index 0989e3e4d..000000000 --- a/web/src/components/Popup/MiniGuides/Onboarding/PnkLogoAndTitle.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import PnkIcon from "svgs/styled/pnk.svg"; - -import { responsiveSize } from "styles/responsiveSize"; - -const Container = styled.div` - display: flex; - flex-direction: column; - justify-content: center; - gap: 32px; - align-items: center; -`; - -const StyledPnkIcon = styled(PnkIcon)` - width: ${responsiveSize(220, 280)}; - height: ${responsiveSize(220, 252)}; - [class$="stop-1"] { - stop-color: ${({ theme }) => theme.primaryBlue}; - } - [class$="stop-2"] { - stop-color: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const StyledCourtLabel = styled.label` - font-size: 24px; - background: linear-gradient( - 90deg, - ${({ theme }) => theme.secondaryPurple} 0%, - ${({ theme }) => theme.primaryBlue} 100% - ); - background-clip: text; - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; -`; - -const PnkLogoAndTitle = () => { - return ( - <Container> - <StyledPnkIcon /> - <StyledCourtLabel>Court v.2</StyledCourtLabel> - </Container> - ); -}; - -export default PnkLogoAndTitle; diff --git a/web/src/components/Popup/MiniGuides/Onboarding/WhatDoINeed.tsx b/web/src/components/Popup/MiniGuides/Onboarding/WhatDoINeed.tsx deleted file mode 100644 index 259c915c6..000000000 --- a/web/src/components/Popup/MiniGuides/Onboarding/WhatDoINeed.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import WhatDoINeedSvg from "svgs/mini-guides/onboarding/what-do-i-need.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledWhatDoINeedSvg = styled(WhatDoINeedSvg)` - [class$="rect-1"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - - [class$="rect-2"] { - stroke: ${({ theme }) => theme.stroke}; - } - - [class$="rect-3"], - [class$="rect-4"], - [class$="rect-5"] { - fill: ${({ theme }) => theme.mediumBlue}; - } - - [class$="rect-6"] { - fill: ${({ theme }) => theme.mediumPurple}; - } - - [class$="rect-7"], - [class$="rect-8"], - [class$="rect-9"], - [class$="rect-10"], - [class$="rect-11"], - [class$="rect-12"], - [class$="rect-13"] { - fill: ${({ theme }) => theme.white}; - } - - [class$="path-1"], - [class$="path-18"], - [class$="path-22"] { - fill: ${({ theme }) => theme.primaryText}; - } - - [class$="path-2"], - [class$="path-3"], - [class$="path-4"], - [class$="path-7"], - [class$="path-10"], - [class$="path-13"], - [class$="path-16"], - [class$="path-17"], - [class$="path-19"], - [class$="path-20"], - [class$="path-21"], - [class$="path-23"], - [class$="path-24"], - [class$="path-25"] { - fill: ${({ theme }) => theme.secondaryText}; - } - - [class$="path-5"], - [class$="path-6"], - [class$="path-8"], - [class$="path-9"], - [class$="path-11"], - [class$="path-12"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - - [class$="path-14"], - [class$="path-15"] { - fill: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const WhatDoINeed: React.FC = () => <StyledImage as={StyledWhatDoINeedSvg} />; - -export default WhatDoINeed; diff --git a/web/src/components/Popup/MiniGuides/Onboarding/index.tsx b/web/src/components/Popup/MiniGuides/Onboarding/index.tsx deleted file mode 100644 index 2fb481f86..000000000 --- a/web/src/components/Popup/MiniGuides/Onboarding/index.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import React from "react"; - -import { useToggle } from "react-use"; - -import Appeal from "../Appeal"; -import BinaryVoting from "../BinaryVoting"; -import JurorLevels from "../JurorLevels"; -import RankedVoting from "../RankedVoting"; -import Staking from "../Staking"; -import DisputeResolver from "../DisputeResolver"; - -import PageContentsTemplate from "../PageContentsTemplate"; -import HowItWorks from "./HowItWorks"; -import PnkLogoAndTitle from "./PnkLogoAndTitle"; -import WhatDoINeed from "./WhatDoINeed"; - -const leftPageContents = [ - { - title: "Welcome to Kleros Court", - paragraphs: ["The decentralized arbitration service for the disputes of the new economy.", "Learn what’s new"], - links: [], - }, - { - title: "What do I need to start?", - paragraphs: [ - "Do you want to be a juror? If yes, you will need PNK tokens for staking on courts, and ETH for gas fees.", - "I don't want to be a juror. Can I still participate in the Court? Yes, sure. Users can also participate as" + - " contributors by helping fund appeal fees in exchange for rewards, or by submitting evidence." + - " In this case, you will need ETH.", - "I have a case that needs resolution? What do I do? It's simple. Send your case to Kleros and receive" + - " the resolution. You will need a few minutes to fill up the details of your case, and ETH to pay for" + - " Arbitration fees (It's used to pay jurors for their work).", - ], - links: [], - }, - { - title: "Access the Mini Guides", - paragraphs: [], - links: [ - "1. Staking", - "2. Binary Voting", - "3. Ranked Voting", - "4. Appeal", - "5. Juror Levels", - "6. Dispute Resolver", - ], - }, -]; - -const rightPageComponents = [PnkLogoAndTitle, WhatDoINeed, HowItWorks]; - -interface IOnboarding { - toggleMiniGuide: () => void; -} - -const Onboarding: React.FC<IOnboarding> = ({ toggleMiniGuide }) => { - const [isStakingMiniGuideOpen, toggleStakingMiniGuide] = useToggle(false); - const [isBinaryVotingMiniGuideOpen, toggleBinaryVotingMiniGuide] = useToggle(false); - const [isRankedVotingMiniGuideOpen, toggleRankedVotingMiniGuide] = useToggle(false); - const [isAppealMiniGuideOpen, toggleAppealMiniGuide] = useToggle(false); - const [isJurorLevelsMiniGuideOpen, toggleJurorLevelsMiniGuide] = useToggle(false); - const [isDisputeResolverMiniGuideOpen, toggleDisputeResolverMiniGuide] = useToggle(false); - - const isAnyMiniGuideOpen = - isStakingMiniGuideOpen || - isBinaryVotingMiniGuideOpen || - isRankedVotingMiniGuideOpen || - isAppealMiniGuideOpen || - isJurorLevelsMiniGuideOpen || - isDisputeResolverMiniGuideOpen; - - const toggleSubMiniGuide = (guideName: string) => { - if (guideName === "Staking") { - toggleStakingMiniGuide(); - } else if (guideName === "Binary Voting") { - toggleBinaryVotingMiniGuide(); - } else if (guideName === "Ranked Voting") { - toggleRankedVotingMiniGuide(); - } else if (guideName === "Appeal") { - toggleAppealMiniGuide(); - } else if (guideName === "Juror Levels") { - toggleJurorLevelsMiniGuide(); - } else if (guideName === "Dispute Resolver") { - toggleDisputeResolverMiniGuide(); - } - }; - - return ( - <> - <PageContentsTemplate - toggleMiniGuide={toggleMiniGuide} - leftPageContents={leftPageContents} - rightPageComponents={rightPageComponents} - isOnboarding={true} - canClose={!isAnyMiniGuideOpen} - isVisible={!isAnyMiniGuideOpen} - toggleSubMiniGuide={toggleSubMiniGuide} - /> - - {isStakingMiniGuideOpen && <Staking toggleMiniGuide={toggleStakingMiniGuide} />} - {isBinaryVotingMiniGuideOpen && <BinaryVoting toggleMiniGuide={toggleBinaryVotingMiniGuide} />} - {isRankedVotingMiniGuideOpen && <RankedVoting toggleMiniGuide={toggleRankedVotingMiniGuide} />} - {isAppealMiniGuideOpen && <Appeal toggleMiniGuide={toggleAppealMiniGuide} />} - {isJurorLevelsMiniGuideOpen && <JurorLevels toggleMiniGuide={toggleJurorLevelsMiniGuide} />} - {isDisputeResolverMiniGuideOpen && <DisputeResolver toggleMiniGuide={toggleDisputeResolverMiniGuide} />} - </> - ); -}; - -export default Onboarding; diff --git a/web/src/components/Popup/MiniGuides/PageContentsTemplate.tsx b/web/src/components/Popup/MiniGuides/PageContentsTemplate.tsx deleted file mode 100644 index 893f0f109..000000000 --- a/web/src/components/Popup/MiniGuides/PageContentsTemplate.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import React, { useState } from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import MainStructureTemplate from "./MainStructureTemplate"; - -export const ParagraphsContainer = styled.div` - display: flex; - gap: 18px; - flex-direction: column; -`; - -export const Title = styled.h1` - margin-bottom: 0; -`; - -export const LeftContentContainer = styled.div` - display: flex; - gap: 18px; - flex-direction: column; -`; - -export const StyledImage = styled.div` - width: ${responsiveSize(260, 460)}; - - ${landscapeStyle( - () => css` - width: 389px; - ` - )} -`; - -const LinksContainer = styled.div` - display: flex; - flex-direction: column; -`; - -const StyledLabel = styled.label` - color: ${({ theme }) => theme.primaryBlue}; - margin: 0; - cursor: pointer; -`; - -const StyledParagraph = styled.p` - font-weight: 400; - font-size: 14px; - line-height: 18px; - color: ${({ theme }) => theme.secondaryText}; - margin: 0; -`; - -const extractGuideName = (linkText) => linkText.split(". ")[1]; - -const processNewLineInParagraph = (paragraph: string) => { - return paragraph.split("\n").map((text, index) => ( - <React.Fragment key={text}> - {index > 0 && <br />} - {text} - </React.Fragment> - )); -}; - -const LeftContent: React.FC<{ - currentPage: number; - leftPageContents: { - title: string; - paragraphs: string[]; - links?: string[]; - }[]; - toggleSubMiniGuide?: (guideName: string) => void; -}> = ({ currentPage, leftPageContents, toggleSubMiniGuide }) => { - const { title, paragraphs, links } = leftPageContents[currentPage - 1]; - - return ( - <LeftContentContainer> - <Title>{title}</Title> - <ParagraphsContainer> - {paragraphs.map((paragraph) => ( - <StyledParagraph key={paragraph}>{processNewLineInParagraph(paragraph)}</StyledParagraph> - ))} - </ParagraphsContainer> - {links && links.length > 0 && toggleSubMiniGuide ? ( - <LinksContainer> - {links.map((link, index) => ( - <StyledLabel key={index} onClick={() => toggleSubMiniGuide(extractGuideName(link))}> - {link} - </StyledLabel> - ))} - </LinksContainer> - ) : null} - </LeftContentContainer> - ); -}; - -const RightContent: React.FC<{ currentPage: number; rightPageComponents: () => React.ReactNode[] }> = ({ - currentPage, - rightPageComponents, -}) => { - const RightPageComponent = rightPageComponents[currentPage - 1]; - - return <RightPageComponent />; -}; - -interface IPageContentsTemplate { - toggleMiniGuide: () => void; - toggleSubMiniGuide?: (guideName: string) => void; - leftPageContents: { - title: string; - paragraphs: string[]; - links?: string[]; - }[]; - rightPageComponents: () => React.ReactNode[]; - isOnboarding: boolean; - canClose: boolean; - isVisible: boolean; -} - -const PageContentsTemplate: React.FC<IPageContentsTemplate> = ({ - toggleMiniGuide, - toggleSubMiniGuide, - leftPageContents, - rightPageComponents, - canClose, - isVisible, - isOnboarding, -}) => { - const [currentPage, setCurrentPage] = useState(1); - - return ( - <MainStructureTemplate - LeftContent={ - <LeftContent - currentPage={currentPage} - leftPageContents={leftPageContents} - toggleSubMiniGuide={toggleSubMiniGuide} - /> - } - RightContent={<RightContent currentPage={currentPage} rightPageComponents={rightPageComponents} />} - onClose={toggleMiniGuide} - currentPage={currentPage} - setCurrentPage={setCurrentPage} - numPages={leftPageContents.length} - isOnboarding={isOnboarding} - canClose={canClose} - isVisible={isVisible} - /> - ); -}; - -export default PageContentsTemplate; diff --git a/web/src/components/Popup/MiniGuides/RankedVoting/VotingModule.tsx b/web/src/components/Popup/MiniGuides/RankedVoting/VotingModule.tsx deleted file mode 100644 index 62a987b37..000000000 --- a/web/src/components/Popup/MiniGuides/RankedVoting/VotingModule.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import VotingModuleSvg from "svgs/mini-guides/ranked-voting/voting-module.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledVotingModuleSvg = styled(VotingModuleSvg)` - [class$="path-1"], - [class$="path-5"] { - fill: ${({ theme }) => theme.success}; - } - [class$="rect-1"], - [class$="rect-2"], - [class$="rect-4"], - [class$="rect-8"], - [class$="rect-13"], - [class$="path-3"], - [class$="path-4"], - [class$="path-7"], - [class$="path-8"], - [class$="path-13"], - [class$="path-12"], - [class$="path-14"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - - [class$="rect-1"], - [class$="rect-3"], - [class$="rect-5"], - [class$="rect-7"], - [class$="rect-9"] { - stroke: ${({ theme }) => theme.stroke}; - } - - [class$="rect-6"] { - stroke: ${({ theme }) => theme.success}; - } - [class$="rect-10"] { - stroke: ${({ theme }) => theme.error}; - } - [class$="rect-14"] { - stroke: ${({ theme }) => theme.primaryBlue}; - } - - [class$="rect-11"] { - fill: ${({ theme }) => theme.lightBlue}; - } - - [class$="rect-12"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - - [class$="path-11"], - [class$="path-2"], - [class$="path-6"] { - fill: ${({ theme }) => theme.primaryText}; - } - - [class$="path-9"] { - fill: ${({ theme }) => theme.secondaryText}; - } - - [class$="path-10"] { - fill: ${({ theme }) => theme.error}; - } - - [class$="path-15"] { - fill: ${({ theme }) => theme.primaryBlue}; - } -`; - -const VotingModule: React.FC = () => <StyledImage as={StyledVotingModuleSvg} />; - -export default VotingModule; diff --git a/web/src/components/Popup/MiniGuides/RankedVoting/index.tsx b/web/src/components/Popup/MiniGuides/RankedVoting/index.tsx deleted file mode 100644 index fbedb96f5..000000000 --- a/web/src/components/Popup/MiniGuides/RankedVoting/index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import React from "react"; - -import PrivateVoting from "../BinaryVoting/PrivateVoting"; -import PageContentsTemplate from "../PageContentsTemplate"; -import JurorRewards from "../Staking/JurorRewards"; - -import VotingModule from "./VotingModule"; - -const leftPageContents = [ - { - title: "Ranked Voting", - paragraphs: [ - "Jurors rank the options in order of preference. The number of options you rank doesn’t affect the rewards" + - " you may win as long as you rank the winning option. Note it’s also possible to reject some options you" + - " consider inadequate.", - "Refuse to Arbitrate is used when a dispute has been posted in the wrong court, has no clear outcome, or" + - " evidence is immoral and/or illegal. In case the majority decides to Refuse to Arbitrate, that option is" + - " considered the winner.", - ], - }, - { - title: "Private Voting", - paragraphs: [ - "This feature introduces the commit and reveal mechanism, enhancing the secrecy and integrity of votes.", - "What’s different? In courts with private voting, jurors cast their votes in two parts: Firstly, they" + - " vote on a chosen option. The vote is kept secret from other jurors. (Commit period). Finally, they reveal" + - " their votes adding a justification (Voting Period).", - "Note that jurors who miss the Commit period, cannot progress to the Voting period, not being able to conclude" + - " the voting. Make sure not to miss the Commit, and the Voting periods.", - ], - }, - { - title: "Juror Rewards", - paragraphs: [ - "Jurors whose vote is coherent with the final jury decision (after all the appeal instances) receive the" + - " Juror Rewards composed of arbitration fees (ETH) + PNK redistribution between jurors. Jurors whose vote" + - " is not coherent with the final jury decision, lose their locked PNK.", - ], - }, -]; - -const rightPageComponents = [VotingModule, PrivateVoting, JurorRewards]; - -interface IRankedVoting { - toggleMiniGuide: () => void; -} - -const RankedVoting: React.FC<IRankedVoting> = ({ toggleMiniGuide }) => { - return ( - <PageContentsTemplate - toggleMiniGuide={toggleMiniGuide} - leftPageContents={leftPageContents} - rightPageComponents={rightPageComponents} - isOnboarding={false} - canClose={true} - isVisible={true} - /> - ); -}; - -export default RankedVoting; diff --git a/web/src/components/Popup/MiniGuides/Staking/CourtHeader.tsx b/web/src/components/Popup/MiniGuides/Staking/CourtHeader.tsx deleted file mode 100644 index a139500b3..000000000 --- a/web/src/components/Popup/MiniGuides/Staking/CourtHeader.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import CourtHeaderSvg from "svgs/mini-guides/staking/court-header.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledCourtHeaderSvg = styled(CourtHeaderSvg)` - [class$="circle-1"] { - fill: ${({ theme }) => theme.successLight}; - } - - [class$="circle-2"], - [class$="circle-3"], - [class$="circle-4"] { - fill: ${({ theme }) => theme.mediumPurple}; - } - - [class$="line-1"], - [class$="line-2"] { - stroke: ${({ theme }) => theme.stroke}; - } - - [class$="rect-1"], - [class$="rect-5"], - [class$="path-2"], - [class$="rect-3"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - - [class$="rect-2"], - [class$="rect-3"] { - stroke: ${({ theme }) => theme.stroke}; - } - - [class$="rect-4"], - [class$="path-3"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - - [class$="rect-7"], - [class$="rect-8"], - [class$="rect-9"], - [class$="rect-10"], - [class$="rect-11"], - [class$="rect-12"], - [class$="rect-13"] { - fill: ${({ theme }) => theme.white}; - } - - [class$="rect-6"] { - stroke: ${({ theme }) => theme.primaryBlue}; - } - - [class$="path-4"], - [class$="path-5"], - [class$="path-8"], - [class$="path-11"], - [class$="path-14"], - [class$="path-21"], - [class$="path-22"], - [class$="path-23"], - [class$="path-26"], - [class$="path-29"], - [class$="path-32"] { - fill: ${({ theme }) => theme.primaryText}; - } - - [class$="path-1"], - [class$="path-7"], - [class$="path-10"], - [class$="path-13"], - [class$="path-15"], - [class$="path-16"], - [class$="path-17"], - [class$="path-18"], - [class$="path-19"], - [class$="path-20"], - [class$="path-24"], - [class$="path-25"], - [class$="path-27"], - [class$="path-28"], - [class$="path-30"], - [class$="path-31"], - [class$="path-33"], - [class$="path-34"] { - fill: ${({ theme }) => theme.secondaryText}; - } - - [class$="path-6"], - [class$="path-9"], - [class$="path-12"], - [class$="path-36"], - [class$="path-37"], - [class$="path-38"], - [class$="path-39"], - [class$="path-40"], - [class$="path-41"], - [class$="path-42"], - [class$="path-43"], - [class$="path-44"], - [class$="path-45"] { - fill: ${({ theme }) => theme.secondaryPurple}; - } - - [class$="path-35"] { - fill: ${({ theme }) => theme.success}; - } -`; - -const CourtHeader: React.FC = () => <StyledImage as={StyledCourtHeaderSvg} />; - -export default CourtHeader; diff --git a/web/src/components/Popup/MiniGuides/Staking/JurorRewards.tsx b/web/src/components/Popup/MiniGuides/Staking/JurorRewards.tsx deleted file mode 100644 index cf83e9ebb..000000000 --- a/web/src/components/Popup/MiniGuides/Staking/JurorRewards.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import JurorRewardsSvg from "svgs/mini-guides/staking/juror-rewards.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledJurorRewardsSvg = styled(JurorRewardsSvg)` - [class$="rect-1"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - [class$="rect-2"], - [class$="path-2"] { - stroke: ${({ theme }) => theme.stroke}; - } - [class$="rect-3"], - [class$="rect-4"], - [class$="rect-5"], - [class$="rect-6"], - [class$="rect-7"], - [class$="mask-1"] { - fill: ${({ theme }) => theme.white}; - } - [class$="stop-1"], - [class$="stop-4"], - [class$="stop-6"] { - stop-color: ${({ theme }) => theme.secondaryPurple}; - } - [class$="stop-2"], - [class$="stop-3"], - [class$="stop-5"] { - stop-color: ${({ theme }) => theme.primaryBlue}; - } - [class$="path-3"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - [class$="path-5"], - [class$="path-6"], - [class$="path-9"], - [class$="path-13"], - [class$="path-14"] { - fill: ${({ theme }) => theme.primaryText}; - } - [class$="path-7"], - [class$="path-8"], - [class$="path-10"], - [class$="path-11"], - [class$="path-12"] { - fill: ${({ theme }) => theme.secondaryText}; - } -`; - -const JurorRewards: React.FC = () => <StyledImage as={StyledJurorRewardsSvg} />; - -export default JurorRewards; diff --git a/web/src/components/Popup/MiniGuides/Staking/Notifications.tsx b/web/src/components/Popup/MiniGuides/Staking/Notifications.tsx deleted file mode 100644 index 1c989a4d5..000000000 --- a/web/src/components/Popup/MiniGuides/Staking/Notifications.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import NotificationsSvg from "svgs/mini-guides/staking/notifications.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledNotificationsSvg = styled(NotificationsSvg)` - [class$="rect-1"], - [class$="rect-5"], - [class$="rect-6"], - [class$="path-5"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - - [class$="rect-2"], - [class$="line-1"], - [class$="rect-3"], - [class$="rect-5"], - [class$="rect-6"] { - stroke: ${({ theme }) => theme.stroke}; - } - - [class$="rect-4"], - [class$="rect-7"], - [class$="path-7"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - - [class$="line-2"] { - stroke: ${({ theme }) => theme.primaryBlue}; - } - - [class$="path-1"] { - fill: ${({ theme }) => theme.secondaryText}; - } - - [class$="path-2"], - [class$="path-3"], - [class$="path-4"], - [class$="path-6"], - [class$="path-8"], - [class$="path-9"] { - fill: ${({ theme }) => theme.primaryText}; - } -`; - -const Notifications: React.FC = () => <StyledImage as={StyledNotificationsSvg} />; - -export default Notifications; diff --git a/web/src/components/Popup/MiniGuides/Staking/StakingSection.tsx b/web/src/components/Popup/MiniGuides/Staking/StakingSection.tsx deleted file mode 100644 index a7a42fca0..000000000 --- a/web/src/components/Popup/MiniGuides/Staking/StakingSection.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import StakingSectionSvg from "svgs/mini-guides/staking/staking-section.svg"; - -import { StyledImage } from "../PageContentsTemplate"; - -const StyledStakingSectionSvg = styled(StakingSectionSvg)` - [class$="rect-1"], - [class$="path-2"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - - [class$="rect-2"], - [class$="rect-3"] { - stroke: ${({ theme }) => theme.stroke}; - } - - [class$="rect-3"] { - fill: ${({ theme }) => theme.whiteBackground}; - } - - [class$="rect-4"] { - fill: ${({ theme }) => theme.primaryBlue}; - } - - [class$="rect-5"], - [class$="rect-6"] { - fill: ${({ theme }) => theme.white}; - } - - [class$="path-1"], - [class$="path-6"], - [class$="path-9"] { - fill: ${({ theme }) => theme.secondaryText}; - } - - [class$="path-3"], - [class$="path-4"], - [class$="path-7"], - [class$="path-10"] { - fill: ${({ theme }) => theme.primaryText}; - } - - [class$="path-5"], - [class$="path-8"] { - fill: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const StakingSection: React.FC = () => <StyledImage as={StyledStakingSectionSvg} />; - -export default StakingSection; diff --git a/web/src/components/Popup/MiniGuides/Staking/index.tsx b/web/src/components/Popup/MiniGuides/Staking/index.tsx deleted file mode 100644 index 3e1d3e9ca..000000000 --- a/web/src/components/Popup/MiniGuides/Staking/index.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React from "react"; - -import PageContentsTemplate from "../PageContentsTemplate"; - -import CourtHeader from "./CourtHeader"; -import JurorRewards from "./JurorRewards"; -import Notifications from "./Notifications"; -import StakingSection from "./StakingSection"; - -const leftPageContents = [ - { - title: "Joining a court", - paragraphs: [ - "Candidates self-select to serve as jurors by staking PNK tokens. The probability of being drawn as a juror" + - " for a specific dispute is proportional to the amount of tokens a juror stakes." + - " Check the ‘Juror Odds’ for an estimation of your chances to be drawn. Note that staking PNK in a court" + - " automatically stakes in its parent courts" + - " (Branch). You can stake in a maximum of 4 court branches.", - ], - }, - { - title: "Jury selection", - paragraphs: [ - "The final selection of jurors is done randomly. When a juror is selected to arbitrate a case part" + - " of his stake (PNK) is locked until the case is resolved. Jurors whose vote is coherent with the final" + - " jury decision have their locked stake released. Jurors whose vote is not coherent with the final jury" + - " decision, lose their locked stake. The locked stake of incoherent jurors is redistributed as incentives" + - " for the coherent jurors.", - ], - }, - { - title: "Juror Rewards", - paragraphs: [ - "Users have an economic interest in serving as jurors in Kleros: collecting the Juror Rewards in exchange" + - " for their work. Each juror who is coherent with the final ruling receive the Juror Rewards composed of" + - " arbitration fees (ETH) + PNK redistribution between jurors.", - ], - }, - { - title: "Subscribe to Notifications", - paragraphs: [ - "After staking your PNK to join a court, we advise you to subscribe to receive email notifications." + - " This guarantees you will be notified when drawn to arbitrate a case and won't miss the deadlines.", - ], - }, -]; - -const rightPageComponents = [CourtHeader, StakingSection, JurorRewards, Notifications]; - -interface IStaking { - toggleMiniGuide: () => void; -} - -const Staking: React.FC<IStaking> = ({ toggleMiniGuide }) => { - return ( - <PageContentsTemplate - toggleMiniGuide={toggleMiniGuide} - leftPageContents={leftPageContents} - rightPageComponents={rightPageComponents} - isOnboarding={false} - canClose={true} - isVisible={true} - /> - ); -}; - -export default Staking; diff --git a/web/src/components/Popup/index.tsx b/web/src/components/Popup/index.tsx deleted file mode 100644 index 972acc821..000000000 --- a/web/src/components/Popup/index.tsx +++ /dev/null @@ -1,284 +0,0 @@ -import React, { useRef } from "react"; -import styled, { css } from "styled-components"; - -import { useNavigate } from "react-router-dom"; - -import { Button } from "@kleros/ui-components-library"; - -import CloseIcon from "svgs/icons/close.svg"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { Overlay } from "components/Overlay"; -import { Token } from "pages/GetPnk/Swap/TokenSelect"; - -import Appeal from "./Description/Appeal"; -import DisputeCreated from "./Description/DisputeCreated"; -import StakeWithdraw from "./Description/StakeWithdraw"; -import SwapSuccess from "./Description/SwapSuccess"; -import VoteWithCommit from "./Description/VoteWithCommit"; -import VoteWithoutCommit from "./Description/VoteWithoutCommit"; -import DisputeCreatedExtraInfo from "./ExtraInfo/DisputeCreatedExtraInfo"; -import StakeWithdrawExtraInfo from "./ExtraInfo/StakeWithdrawExtraInfo"; -import VoteWithCommitExtraInfo from "./ExtraInfo/VoteWithCommitExtraInfo"; - -const Header = styled.h1` - display: flex; - margin: ${responsiveSize(12, 32)} ${responsiveSize(8, 12)} ${responsiveSize(12, 24)}; - text-align: center; - font-size: 24px; - font-weight: 600; - line-height: 32.68px; -`; - -const IconContainer = styled.div` - width: ${responsiveSize(150, 228)}; - display: flex; - align-items: center; - justify-content: center; - - svg { - display: inline-block; - width: ${responsiveSize(150, 228)}; - height: ${responsiveSize(150, 228)}; - } -`; - -const StyledButton = styled(Button)` - margin: ${responsiveSize(16, 32)}; -`; - -const Container = styled.div` - display: flex; - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - max-height: 80vh; - overflow-y: auto; - - z-index: 10; - flex-direction: column; - align-items: center; - justify-content: center; - width: 86vw; - max-width: 600px; - border-radius: 3px; - border: 1px solid ${({ theme }) => theme.stroke}; - background-color: ${({ theme }) => theme.whiteBackground}; - box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.06); - - svg { - visibility: visible; - } - - ${landscapeStyle( - () => css` - overflow-y: hidden; - width: ${responsiveSize(300, 600)}; - ` - )} -`; - -const VoteDescriptionContainer = styled.div` - display: flex; - flex-direction: column; - margin-bottom: ${responsiveSize(16, 32)}; - margin-left: ${responsiveSize(8, 32)}; - margin-right: ${responsiveSize(8, 32)}; - color: ${({ theme }) => theme.secondaryText}; - text-align: center; - line-height: 21.8px; -`; - -const SVGContainer = styled.div` - display: flex; - justify-content: end; - align-items: center; - width: 100%; - cursor: pointer; - position: absolute; - top: 18px; - right: 24px; - svg { - width: 18px; - height: 18px; - fill: ${({ theme }) => theme.stroke}; - } -`; - -export const VoteDescriptionEmphasizedDate = styled.span` - font-size: 16px; - font-weight: 400; - line-height: 21.8px; - color: ${({ theme }) => theme.primaryText}; -`; - -export enum PopupType { - STAKE_WITHDRAW = "STAKE_WITHDRAW", - APPEAL = "APPEAL", - VOTE_WITHOUT_COMMIT = "VOTE_WITHOUT_COMMIT", - VOTE_WITH_COMMIT = "VOTE_WITH_COMMIT", - DISPUTE_CREATED = "DISPUTE_CREATED", - SWAP_SUCCESS = "SWAP_SUCCESS", -} - -interface IStakeWithdraw { - popupType: PopupType.STAKE_WITHDRAW; - pnkStaked: string; - courtName: string; - isStake: boolean; - courtId: string; -} - -interface IVoteWithoutCommit { - popupType: PopupType.VOTE_WITHOUT_COMMIT; - date: string; -} - -interface IVoteWithCommit { - popupType: PopupType.VOTE_WITH_COMMIT; - date: string; -} - -interface IAppeal { - popupType: PopupType.APPEAL; - amount: string; - option: string; -} -interface IDisputeCreated { - popupType: PopupType.DISPUTE_CREATED; - disputeId: number; - courtId: string; -} - -interface ISwapSuccess { - popupType: PopupType.SWAP_SUCCESS; - hash: string; - amount: string; - from?: Token; - to?: Token; - isClaim?: boolean; -} -interface IPopup { - title: string; - icon?: React.FC<React.SVGAttributes<SVGElement>>; - popupType: PopupType; - setIsOpen: (val: boolean) => void; - setAmount?: (val: string) => void; - isCommit?: boolean; - automaticVoteReveal?: boolean; -} - -type PopupProps = IStakeWithdraw | IVoteWithoutCommit | IVoteWithCommit | IAppeal | IDisputeCreated | ISwapSuccess; - -const Popup: React.FC<PopupProps & IPopup> = ({ - title, - icon: Icon, - popupType, - setIsOpen, - setAmount, - isCommit, - automaticVoteReveal, - ...props -}) => { - const containerRef = useRef(null); - const navigate = useNavigate(); - - const resetValue = () => { - if (setAmount) { - setAmount(""); - } - }; - - let PopupComponent: JSX.Element | null = null; - - switch (popupType) { - case PopupType.STAKE_WITHDRAW: { - const { pnkStaked, courtName, isStake, courtId } = props as IStakeWithdraw; - PopupComponent = ( - <StakeWithdraw pnkStaked={pnkStaked} courtName={courtName} isStake={isStake} courtId={courtId} /> - ); - break; - } - case PopupType.VOTE_WITHOUT_COMMIT: { - const { date } = props as IVoteWithoutCommit; - PopupComponent = ( - <VoteDescriptionContainer> - <VoteWithoutCommit date={date} /> - </VoteDescriptionContainer> - ); - break; - } - case PopupType.VOTE_WITH_COMMIT: { - const { date } = props as IVoteWithCommit; - PopupComponent = ( - <VoteDescriptionContainer> - <VoteWithCommit {...{ date, automaticVoteReveal }} /> - </VoteDescriptionContainer> - ); - break; - } - case PopupType.APPEAL: { - const { amount, option } = props as IAppeal; - PopupComponent = <Appeal amount={amount} option={option} />; - break; - } - case PopupType.DISPUTE_CREATED: { - const { courtId } = props as IDisputeCreated; - PopupComponent = <DisputeCreated courtId={courtId} />; - break; - } - case PopupType.SWAP_SUCCESS: { - PopupComponent = <SwapSuccess {...(props as ISwapSuccess)} />; - break; - } - default: - break; - } - - const closePopup = () => { - setIsOpen(false); - resetValue(); - // dispute data is cleared, so if popup is closed the preview will show empty, - // instead redirect to start point. - if (popupType === PopupType.DISPUTE_CREATED) navigate("/resolver"); - }; - - return ( - <Overlay onClick={closePopup}> - <Container ref={containerRef} onClick={(e) => e.stopPropagation()}> - {popupType === PopupType.SWAP_SUCCESS && ( - <SVGContainer> - <CloseIcon onClick={() => setIsOpen(false)} /> - </SVGContainer> - )} - <Header>{title}</Header> - {PopupComponent} - {Icon && ( - <IconContainer> - <Icon /> - </IconContainer> - )} - {popupType === PopupType.STAKE_WITHDRAW && <StakeWithdrawExtraInfo />} - {popupType === PopupType.VOTE_WITH_COMMIT && <VoteWithCommitExtraInfo {...{ automaticVoteReveal }} />} - {popupType === PopupType.DISPUTE_CREATED && <DisputeCreatedExtraInfo />} - {popupType !== PopupType.SWAP_SUCCESS && ( - <StyledButton - variant="secondary" - text={popupType === PopupType.DISPUTE_CREATED ? "Check the case" : "Close"} - onClick={() => { - closePopup(); - if (popupType === PopupType.DISPUTE_CREATED) { - const { disputeId } = props as IDisputeCreated; - navigate(`/cases/${disputeId}`); - } - }} - /> - )} - </Container> - </Overlay> - ); -}; -export default Popup; diff --git a/web/src/components/ReactMarkdown.tsx b/web/src/components/ReactMarkdown.tsx deleted file mode 100644 index f7b52bb90..000000000 --- a/web/src/components/ReactMarkdown.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import Reactmkdwn from "react-markdown"; - -const StyledMarkdown = styled(Reactmkdwn)` - font-size: 16px; - *, - ** { - font-size: 16px; - } -`; - -const ReactMarkdown: React.FC<{ children: string }> = ({ children }) => <StyledMarkdown>{children}</StyledMarkdown>; - -export default ReactMarkdown; diff --git a/web/src/components/ScrollTop.tsx b/web/src/components/ScrollTop.tsx deleted file mode 100644 index 08bd9e228..000000000 --- a/web/src/components/ScrollTop.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React, { useEffect, useRef } from "react"; -import { useLocation, useNavigate } from "react-router-dom"; - -import { useScrollTop } from "hooks/useScrollTop"; - -const ScrollTop: React.FC = () => { - const scrollTop = useScrollTop(); - const { search, pathname } = useLocation(); - const navigate = useNavigate(); - const hasScrolled = useRef(false); - - useEffect(() => { - if (hasScrolled.current) return; - const params = new URLSearchParams(search); - const section = params.get("section"); - - if (section) { - const targetElement = document.getElementById(section); - if (targetElement) { - targetElement.scrollIntoView({ behavior: "smooth" }); - hasScrolled.current = true; - navigate(pathname, { replace: true }); - return; - } - } - - scrollTop(); - }, []); - - return null; -}; - -export default ScrollTop; diff --git a/web/src/components/SeeAllCasesButton.tsx b/web/src/components/SeeAllCasesButton.tsx deleted file mode 100644 index 8515619ab..000000000 --- a/web/src/components/SeeAllCasesButton.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from "react"; - -import { encodeURIFilter } from "utils/uri"; - -import { BlueIconTextButtonContainer } from "./BlueIconTextButtonContainer"; -import { InternalLink } from "./InternalLink"; - -interface ISeeAllCasesButton { - courtId?: string; -} - -const SeeAllCasesButton: React.FC<ISeeAllCasesButton> = ({ courtId }) => { - const filter = courtId ? { court: courtId } : {}; - const link = `/cases/display/1/desc/${encodeURIFilter(filter)}`; - const labelText = "See all"; - - return ( - <InternalLink to={link}> - <BlueIconTextButtonContainer>{labelText}</BlueIconTextButtonContainer> - </InternalLink> - ); -}; - -export default SeeAllCasesButton; diff --git a/web/src/components/SeeAllJurorsButton.tsx b/web/src/components/SeeAllJurorsButton.tsx deleted file mode 100644 index e18e77109..000000000 --- a/web/src/components/SeeAllJurorsButton.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from "react"; - -import { BlueIconTextButtonContainer } from "./BlueIconTextButtonContainer"; -import { InternalLink } from "./InternalLink"; - -const SeeAllJurorsButton: React.FC = () => { - return ( - <InternalLink to={"/jurors/1/desc/all"}> - <BlueIconTextButtonContainer> - <label>See all</label> - </BlueIconTextButtonContainer> - </InternalLink> - ); -}; - -export default SeeAllJurorsButton; diff --git a/web/src/components/Spinner.tsx b/web/src/components/Spinner.tsx deleted file mode 100644 index 5565e336b..000000000 --- a/web/src/components/Spinner.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import styled, { keyframes } from "styled-components"; - -import SpinnerIcon from "svgs/icons/spinner.svg"; - -const rotating = keyframes` - 0%{ - transform: rotate(0deg); - } - 50%{ - transform: rotate(180deg); - } - 100%{ - transform: rotate(360deg); - } -`; - -const Spinner = styled(SpinnerIcon)` - path { - fill: ${({ theme }) => theme.primaryBlue}; - } - width: 16px; - height: 16px; - margin-right: 4px; - animation: ${rotating} 2s ease-in-out infinite normal; -`; - -export default Spinner; diff --git a/web/src/components/StatDisplay.tsx b/web/src/components/StatDisplay.tsx deleted file mode 100644 index 4b8b705cc..000000000 --- a/web/src/components/StatDisplay.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import React from "react"; -import styled, { useTheme, css } from "styled-components"; - -const Container = styled.div<{ isSmallDisplay: boolean }>` - display: flex; - align-items: center; - gap: 8px; - ${({ isSmallDisplay }) => - isSmallDisplay - ? css` - width: 151px; - ` - : css` - max-width: 196px; - `} -`; - -const SVGContainer = styled.div<{ iconColor: string; backgroundColor: string; isSmallDisplay: boolean }>` - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - background-color: ${({ backgroundColor }) => backgroundColor}; - svg { - fill: ${({ iconColor }) => iconColor}; - } - - ${({ isSmallDisplay }) => - isSmallDisplay - ? css` - height: 32px; - width: 32px; - svg { - height: 20px; - } - ` - : css` - height: 48px; - width: 48px; - `} -`; - -const TextContainer = styled.div<{ isSmallDisplay: boolean }>` - display: flex; - flex-direction: column; - gap: ${({ isSmallDisplay }) => (isSmallDisplay ? "3px" : "8px")}; -`; - -const StyledTitle = styled.label` - font-size: 14px; -`; - -const StyledValue = styled.label<{ isSmallDisplay: boolean }>` - font-size: ${({ isSmallDisplay }) => (isSmallDisplay ? "16px" : "24px")}; - font-weight: 600; - color: ${({ theme }) => theme.primaryText}; -`; - -const StyledUSDValue = styled.label<{ isSmallDisplay: boolean }>` - font-size: ${({ isSmallDisplay }) => (isSmallDisplay ? "12px" : "14px")}; -`; - -const createPair = (iconColor: string, backgroundColor: string) => ({ - iconColor, - backgroundColor, -}); - -export interface IStatDisplay { - title: string | React.ReactNode; - text: string | React.ReactNode; - subtext?: string | React.ReactNode; - icon: React.FunctionComponent<React.SVGAttributes<SVGElement>>; - color: "red" | "orange" | "green" | "blue" | "purple"; - isSmallDisplay?: boolean; -} - -const StatDisplay: React.FC<IStatDisplay> = ({ - title, - text, - subtext, - icon: Icon, - color, - isSmallDisplay = false, - ...props -}) => { - const theme = useTheme(); - const COLORS = { - red: createPair(theme.error, theme.errorLight), - orange: createPair(theme.warning, theme.warningLight), - green: createPair(theme.success, theme.successLight), - blue: createPair(theme.primaryBlue, theme.mediumBlue), - purple: createPair(theme.secondaryPurple, theme.mediumPurple), - }; - - return ( - <Container {...{ isSmallDisplay }} {...props}> - <SVGContainer {...{ ...COLORS[color], isSmallDisplay }}>{<Icon />}</SVGContainer> - <TextContainer {...{ isSmallDisplay }}> - <StyledTitle>{title}</StyledTitle> - <StyledValue {...{ isSmallDisplay }}>{text}</StyledValue> - <StyledUSDValue {...{ isSmallDisplay }}>{subtext}</StyledUSDValue> - </TextContainer> - </Container> - ); -}; - -export default StatDisplay; diff --git a/web/src/components/StyledArrowLink.tsx b/web/src/components/StyledArrowLink.tsx deleted file mode 100644 index 5a69e4b7d..000000000 --- a/web/src/components/StyledArrowLink.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import styled from "styled-components"; - -import { Link } from "react-router-dom"; - -export const StyledArrowLink = styled(Link)` - display: flex; - gap: 8px; - align-items: center; - font-size: 16px; - - > svg { - height: 16px; - width: 16px; - - path { - fill: ${({ theme }) => theme.primaryBlue}; - } - } - - &:hover { - color: ${({ theme }) => theme.secondaryBlue}; - svg path { - transition: fill 0.1s; - fill: ${({ theme }) => theme.secondaryBlue}; - } - } -`; diff --git a/web/src/components/StyledIcons/ClosedCircleIcon.tsx b/web/src/components/StyledIcons/ClosedCircleIcon.tsx deleted file mode 100644 index 14bf877fe..000000000 --- a/web/src/components/StyledIcons/ClosedCircleIcon.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from "react"; -import styled from "styled-components"; -import ClosedCircle from "svgs/icons/close-circle.svg"; - -export const StyledClosedCircle = styled(ClosedCircle)` - path { - fill: ${({ theme }) => theme.error}; - } -`; - -const ClosedCircleIcon: React.FC = () => { - return <StyledClosedCircle />; -}; - -export default ClosedCircleIcon; diff --git a/web/src/components/StyledSkeleton.tsx b/web/src/components/StyledSkeleton.tsx deleted file mode 100644 index 98f132ef0..000000000 --- a/web/src/components/StyledSkeleton.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import Skeleton from "react-loading-skeleton"; - -import { responsiveSize } from "styles/responsiveSize"; - -export const StyledSkeleton = styled(Skeleton)` - z-index: 0; -`; - -const SkeletonDisputeCardContainer = styled.div` - width: 100%; -`; - -const StyledSkeletonDisputeCard = styled(Skeleton)` - height: ${responsiveSize(270, 296)}; -`; - -const StyledSkeletonDisputeListItem = styled(Skeleton)` - height: 62px; -`; - -const StyledSkeletonEvidenceContainer = styled.div` - width: 100%; - span { - width: 100%; - height: 146px; - display: flex; - } -`; - -export const SkeletonDisputeCard = () => ( - <SkeletonDisputeCardContainer> - <StyledSkeletonDisputeCard /> - </SkeletonDisputeCardContainer> -); - -export const SkeletonDisputeListItem = () => <StyledSkeletonDisputeListItem />; - -export const SkeletonEvidenceCard = () => ( - <StyledSkeletonEvidenceContainer> - <Skeleton /> - </StyledSkeletonEvidenceContainer> -); diff --git a/web/src/components/Tag.tsx b/web/src/components/Tag.tsx deleted file mode 100644 index 3dde5d5ce..000000000 --- a/web/src/components/Tag.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { Tag as BaseTag } from "@kleros/ui-components-library"; - -interface ITag { - text: string; - active: boolean; - onClick: () => void; -} - -const TagContainer = styled.button` - padding: 0; - border: none; - background-color: transparent; -`; - -const Tag: React.FC<ITag> = ({ text, active, onClick }) => { - return ( - <TagContainer onClick={onClick}> - <BaseTag text={text} active={active} /> - </TagContainer> - ); -}; - -export default Tag; diff --git a/web/src/components/TxnHash.tsx b/web/src/components/TxnHash.tsx deleted file mode 100644 index 41e35f4d9..000000000 --- a/web/src/components/TxnHash.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React, { useMemo } from "react"; -import styled from "styled-components"; - -import NewTabIcon from "svgs/icons/new-tab.svg"; - -import { getTxnExplorerLink } from "src/utils"; - -import { ExternalLink } from "./ExternalLink"; - -const TxnLabel = styled.label<{ variant: string }>` - display: flex; - gap: 4px; - color: ${({ theme, variant }) => (variant === "pending" ? theme.primaryBlue : theme[variant])}; - cursor: pointer; - path { - fill: ${({ theme, variant }) => (variant === "pending" ? theme.primaryBlue : theme[variant])}; - } -`; - -interface ITxnHash { - hash: `0x${string}`; - variant: "success" | "error" | "pending"; -} -const TxnHash: React.FC<ITxnHash> = ({ hash, variant }) => { - const transactionExplorerLink = useMemo(() => { - return getTxnExplorerLink(hash); - }, [hash]); - - return ( - <ExternalLink to={transactionExplorerLink} rel="noopener noreferrer" target="_blank"> - <TxnLabel {...{ variant }}> - {" "} - <span>{hash.substring(0, 6) + "..." + hash.substring(hash.length - 4)}</span> - <NewTabIcon /> - </TxnLabel> - </ExternalLink> - ); -}; - -export default TxnHash; diff --git a/web/src/components/Verdict/Answer.tsx b/web/src/components/Verdict/Answer.tsx deleted file mode 100644 index fe03b6b66..000000000 --- a/web/src/components/Verdict/Answer.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from "react"; - -import { Answer } from "@kleros/kleros-sdk/src/dataMappings/utils/disputeDetailsTypes"; - -import { AnswerTitle, AnswerTitleAndDescription } from "../DisputePreview/DisputeContext"; - -interface IAnswer { - answer?: Answer; - currentRuling: number; -} - -const AnswerDisplay: React.FC<IAnswer> = ({ answer, currentRuling }) => { - return ( - <> - {answer ? ( - <AnswerTitleAndDescription dir="auto"> - <AnswerTitle>{answer.title}</AnswerTitle> - </AnswerTitleAndDescription> - ) : ( - <AnswerTitleAndDescription> - {currentRuling !== 0 ? <small>Answer 0x{currentRuling}</small> : <small>Refuse to Arbitrate</small>} - </AnswerTitleAndDescription> - )} - </> - ); -}; - -export default AnswerDisplay; diff --git a/web/src/components/Verdict/DisputeTimeline.tsx b/web/src/components/Verdict/DisputeTimeline.tsx deleted file mode 100644 index 754f1dadf..000000000 --- a/web/src/components/Verdict/DisputeTimeline.tsx +++ /dev/null @@ -1,168 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { useTheme } from "styled-components"; - -import { useParams } from "react-router-dom"; - -import { _TimelineItem1, CustomTimeline } from "@kleros/ui-components-library"; - -import ClosedCaseIcon from "svgs/icons/check-circle-outline.svg"; -import NewTabIcon from "svgs/icons/new-tab.svg"; -import GavelExecutedIcon from "svgs/icons/gavel-executed.svg"; - -import { Periods } from "consts/periods"; -import { usePopulatedDisputeData } from "hooks/queries/usePopulatedDisputeData"; -import { getLocalRounds } from "utils/getLocalRounds"; -import { getVoteChoice } from "utils/getVoteChoice"; - -import { DisputeDetailsQuery, useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; -import { useVotingHistory } from "queries/useVotingHistory"; - -import { ClassicRound } from "src/graphql/graphql"; -import { getTxnExplorerLink } from "src/utils"; - -import { StyledClosedCircle } from "components/StyledIcons/ClosedCircleIcon"; - -import { ExternalLink } from "../ExternalLink"; - -const Container = styled.div` - display: flex; - position: relative; - flex-direction: column; -`; - -const StyledTimeline = styled(CustomTimeline)` - width: 100%; -`; - -const StyledNewTabIcon = styled(NewTabIcon)` - margin-bottom: 2px; - path { - fill: ${({ theme }) => theme.primaryBlue}; - } - :hover { - path { - fill: ${({ theme }) => theme.secondaryBlue}; - } - } -`; - -const formatDate = (date: string) => { - const options: Intl.DateTimeFormatOptions = { year: "numeric", month: "long", day: "numeric" }; - const startingDate = new Date(parseInt(date) * 1000); - - const formattedDate = startingDate.toLocaleDateString("en-US", options); - return formattedDate; -}; - -type TimelineItems = [_TimelineItem1, ..._TimelineItem1[]]; - -const useItems = (disputeDetails?: DisputeDetailsQuery, arbitrable?: `0x${string}`) => { - const { id } = useParams(); - const { data: votingHistory } = useVotingHistory(id); - const { data: disputeData } = usePopulatedDisputeData(id, arbitrable); - const localRounds: ClassicRound[] = getLocalRounds(votingHistory?.dispute?.disputeKitDispute) as ClassicRound[]; - const rounds = votingHistory?.dispute?.rounds; - const theme = useTheme(); - const txnDisputeCreatedLink = useMemo(() => { - return getTxnExplorerLink(votingHistory?.dispute?.transactionHash ?? ""); - }, [votingHistory]); - const txnEnforcementLink = useMemo(() => { - return getTxnExplorerLink(disputeDetails?.dispute?.rulingTransactionHash ?? ""); - }, [disputeDetails]); - - return useMemo<TimelineItems | undefined>(() => { - const dispute = disputeDetails?.dispute; - if (!dispute) return; - - const rulingOverride = dispute.overridden; - const currentPeriodIndex = Periods[dispute.period]; - - const base: TimelineItems = [ - { - title: "Dispute created", - party: ( - <ExternalLink to={txnDisputeCreatedLink} rel="noopener noreferrer" target="_blank"> - <StyledNewTabIcon /> - </ExternalLink> - ), - subtitle: formatDate(votingHistory?.dispute?.createdAt), - rightSided: true, - variant: theme.secondaryPurple, - }, - ]; - - const items = localRounds?.reduce<_TimelineItem1[]>((acc, { winningChoice }, index) => { - const isOngoing = index === localRounds.length - 1 && currentPeriodIndex < 3; - const roundTimeline = rounds?.[index].timeline; - const icon = dispute.ruled && !rulingOverride && index === localRounds.length - 1 ? ClosedCaseIcon : undefined; - const answers = disputeData?.answers; - - acc.push({ - title: `Jury Decision - Round ${index + 1}`, - party: isOngoing ? "Voting is ongoing" : getVoteChoice(winningChoice, answers), - subtitle: isOngoing ? "" : `${formatDate(roundTimeline?.[Periods.vote])} / ${rounds?.[index]?.court.name}`, - rightSided: true, - variant: theme.secondaryPurple, - Icon: icon, - }); - - if (index < localRounds.length - 1) { - acc.push({ - title: "Appealed", - party: "", - subtitle: formatDate(roundTimeline?.[Periods.appeal]), - rightSided: true, - Icon: StyledClosedCircle, - }); - } else if (rulingOverride && dispute.currentRuling !== winningChoice) { - acc.push({ - title: "Won by Appeal", - party: getVoteChoice(dispute.currentRuling, answers), - subtitle: formatDate(roundTimeline?.[Periods.appeal]), - rightSided: true, - Icon: ClosedCaseIcon, - }); - } - - return acc; - }, []); - - if (dispute.ruled) { - items.push({ - title: "Enforcement", - party: ( - <ExternalLink to={txnEnforcementLink} rel="noopener noreferrer" target="_blank"> - <StyledNewTabIcon /> - </ExternalLink> - ), - subtitle: `${formatDate(dispute.rulingTimestamp)} / ${rounds?.at(-1)?.court.name}`, - rightSided: true, - Icon: GavelExecutedIcon, - }); - } - - return [...base, ...items] as TimelineItems; - }, [ - disputeDetails, - disputeData, - localRounds, - theme, - rounds, - votingHistory, - txnDisputeCreatedLink, - txnEnforcementLink, - ]); -}; - -interface IDisputeTimeline { - arbitrable?: `0x${string}`; -} - -const DisputeTimeline: React.FC<IDisputeTimeline> = ({ arbitrable }) => { - const { id } = useParams(); - const { data: disputeDetails } = useDisputeDetailsQuery(id); - const items = useItems(disputeDetails, arbitrable); - - return <Container>{items && <StyledTimeline {...{ items }} />}</Container>; -}; -export default DisputeTimeline; diff --git a/web/src/components/Verdict/FinalDecision.tsx b/web/src/components/Verdict/FinalDecision.tsx deleted file mode 100644 index 7c1bb4864..000000000 --- a/web/src/components/Verdict/FinalDecision.tsx +++ /dev/null @@ -1,146 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { css } from "styled-components"; - -import Skeleton from "react-loading-skeleton"; -import { useParams } from "react-router-dom"; -import { useAccount } from "wagmi"; - -import ArrowIcon from "svgs/icons/arrow.svg"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { REFETCH_INTERVAL } from "consts/index"; -import { Periods } from "consts/periods"; -import { useReadKlerosCoreCurrentRuling } from "hooks/contracts/generated"; -import { usePopulatedDisputeData } from "hooks/queries/usePopulatedDisputeData"; -import { VotingHistoryQuery } from "hooks/queries/useVotingHistory"; -import { useVotingContext } from "hooks/useVotingContext"; -import { getLocalRounds } from "utils/getLocalRounds"; - -import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import { Divider } from "../Divider"; -import { StyledArrowLink } from "../StyledArrowLink"; - -import AnswerDisplay from "./Answer"; - -const Container = styled.div` - width: 100%; -`; - -const JuryContainer = styled.div` - display: flex; - align-items: center; - gap: 5px 7px; - flex-wrap: wrap; - - h3 { - line-height: 21px; - margin-bottom: 0px; - } - - > div { - flex: 1; - } -`; - -const VerdictContainer = styled.div` - display: flex; - flex-direction: row; - align-items: center; - flex-wrap: wrap; - gap: 8px; -`; - -const JuryDecisionTag = styled.small` - font-weight: 400; - color: ${({ theme }) => theme.secondaryText}; -`; - -const StyledDivider = styled(Divider)` - margin: 16px 0 0; - - ${landscapeStyle( - () => css` - margin: 24px 0 0; - ` - )} -`; - -const ReStyledArrowLink = styled(StyledArrowLink)` - font-size: 14px; - - > svg { - height: 15px; - width: 15px; - } -`; - -interface IFinalDecision { - arbitrable?: `0x${string}`; - votingHistory: VotingHistoryQuery | undefined; -} - -const FinalDecision: React.FC<IFinalDecision> = ({ arbitrable, votingHistory }) => { - const { id } = useParams(); - const { isDisconnected } = useAccount(); - const { data: populatedDisputeData } = usePopulatedDisputeData(id, arbitrable); - const { data: disputeDetails } = useDisputeDetailsQuery(id); - const { wasDrawn, hasVoted, isLoading, isCommitPeriod, isVotingPeriod, commited, isHiddenVotes } = useVotingContext(); - const localRounds = getLocalRounds(votingHistory?.dispute?.disputeKitDispute); - const ruled = disputeDetails?.dispute?.ruled ?? false; - const periodIndex = Periods[disputeDetails?.dispute?.period ?? "evidence"]; - const { data: currentRulingArray, isLoading: isLoadingCurrentRuling } = useReadKlerosCoreCurrentRuling({ - query: { refetchInterval: REFETCH_INTERVAL }, - args: [BigInt(id ?? 0)], - chainId: DEFAULT_CHAIN, - }); - const currentRuling = Number(currentRulingArray?.[0] ?? 0); - - const answer = populatedDisputeData?.answers?.find((answer) => BigInt(answer.id) === BigInt(currentRuling)); - const buttonText = useMemo(() => { - if (!wasDrawn || isDisconnected) return "Check votes"; - if (isCommitPeriod && !commited) return "Commit your vote"; - if (isVotingPeriod && isHiddenVotes && commited && !hasVoted) return "Reveal your vote"; - if (isVotingPeriod && !isHiddenVotes && !hasVoted) return "Cast your vote"; - return "Check votes"; - }, [wasDrawn, hasVoted, isCommitPeriod, isVotingPeriod, commited, isHiddenVotes, isDisconnected]); - - return ( - <Container> - <VerdictContainer> - {ruled && ( - <JuryContainer> - <JuryDecisionTag>The jury decided in favor of:</JuryDecisionTag> - {isLoadingCurrentRuling ? ( - <Skeleton height={14} width={60} /> - ) : ( - <AnswerDisplay {...{ answer, currentRuling }} /> - )} - </JuryContainer> - )} - {!ruled && periodIndex > 1 && localRounds?.at(localRounds.length - 1)?.totalVoted > 0 && ( - <JuryContainer> - <JuryDecisionTag>This option is winning:</JuryDecisionTag> - {isLoadingCurrentRuling ? ( - <Skeleton height={14} width={60} /> - ) : ( - <AnswerDisplay {...{ answer, currentRuling }} /> - )} - </JuryContainer> - )} - {isLoading && !isDisconnected ? ( - <Skeleton width={250} height={20} /> - ) : ( - <ReStyledArrowLink to={`/cases/${id?.toString()}/voting`}> - {buttonText} <ArrowIcon /> - </ReStyledArrowLink> - )} - </VerdictContainer> - <StyledDivider /> - </Container> - ); -}; - -export default FinalDecision; diff --git a/web/src/components/Verdict/RulingAndRewardsIndicators.tsx b/web/src/components/Verdict/RulingAndRewardsIndicators.tsx deleted file mode 100644 index dc13f198f..000000000 --- a/web/src/components/Verdict/RulingAndRewardsIndicators.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import CheckCircle from "svgs/icons/check-circle-outline.svg"; -import Hourglass from "svgs/icons/hourglass.svg"; -import Coins from "svgs/icons/pile-coins.svg"; - -import Label from "components/DisputeView/CardLabels/Label"; - -const Container = styled.div` - display: flex; - gap: 8px; - flex-wrap: wrap; -`; - -interface IRulingAndRewardsIndicators { - jurorRewardsDispersed: boolean; - ruled: boolean; -} - -const RulingAndRewardsIndicators: React.FC<IRulingAndRewardsIndicators> = ({ jurorRewardsDispersed, ruled }) => ( - <Container> - {ruled ? ( - <Label icon={CheckCircle} text="Case closed" color="green" /> - ) : ( - <Label icon={Hourglass} text="Case in progress" color="blue" /> - )} - {jurorRewardsDispersed ? <Label icon={Coins} text="Juror rewards distributed" color="green" /> : null} - </Container> -); - -export default RulingAndRewardsIndicators; diff --git a/web/src/components/Verdict/index.tsx b/web/src/components/Verdict/index.tsx deleted file mode 100644 index 09c179f81..000000000 --- a/web/src/components/Verdict/index.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -import { VotingHistoryQuery } from "src/graphql/graphql"; - -import DisputeTimeline from "./DisputeTimeline"; -import FinalDecision from "./FinalDecision"; - -const Container = styled.div` - display: flex; - flex-wrap: wrap; - gap: ${responsiveSize(16, 24)}; -`; - -interface IVerdict { - arbitrable?: `0x${string}`; - votingHistory: VotingHistoryQuery | undefined; -} - -const Verdict: React.FC<IVerdict> = ({ arbitrable, votingHistory }) => { - return ( - <Container> - <FinalDecision {...{ votingHistory, arbitrable }} /> - <DisputeTimeline {...{ arbitrable }} /> - </Container> - ); -}; - -export default Verdict; diff --git a/web/src/components/WithHelpTooltip.tsx b/web/src/components/WithHelpTooltip.tsx deleted file mode 100644 index 70b6d2225..000000000 --- a/web/src/components/WithHelpTooltip.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { Tooltip } from "@kleros/ui-components-library"; - -import _HelpIcon from "svgs/menu-icons/help.svg"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -const Container = styled.div` - display: flex; - align-items: center; -`; - -const HelpIcon = styled(_HelpIcon)` - display: flex; - align-items: center; - height: 12px; - width: 12px; - fill: ${({ theme }) => theme.secondaryText}; - margin: 0 0 0 8px; - - ${landscapeStyle( - () => css` - height: 14px; - width: 14px; - ` - )} -`; - -interface IWithHelpTooltip { - tooltipMsg: string; - place?: "bottom" | "left" | "right" | "top"; - children?: React.ReactNode; -} - -const WithHelpTooltip: React.FC<IWithHelpTooltip> = ({ tooltipMsg, children, place }) => ( - <Container> - {children} - <Tooltip small text={tooltipMsg} {...{ place }}> - <HelpIcon /> - </Tooltip> - </Container> -); - -export default WithHelpTooltip; diff --git a/web/src/consts/arbitratorTypes.ts b/web/src/consts/arbitratorTypes.ts deleted file mode 100644 index 02d112ee3..000000000 --- a/web/src/consts/arbitratorTypes.ts +++ /dev/null @@ -1,7 +0,0 @@ -export enum ArbitratorTypes { - vanilla, - university, - neo, -} - -export const getArbitratorType = (id: keyof typeof ArbitratorTypes = "vanilla"): ArbitratorTypes => ArbitratorTypes[id]; diff --git a/web/src/consts/averageBlockTimeInSeconds.ts b/web/src/consts/averageBlockTimeInSeconds.ts deleted file mode 100644 index a3750bd8a..000000000 --- a/web/src/consts/averageBlockTimeInSeconds.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { arbitrum, arbitrumSepolia } from "viem/chains"; - -export const averageBlockTimeInSeconds = { [arbitrum.id]: 0.26, [arbitrumSepolia.id]: 0.268 }; diff --git a/web/src/consts/chains.ts b/web/src/consts/chains.ts deleted file mode 100644 index c2c2e04b5..000000000 --- a/web/src/consts/chains.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { type AppKitNetwork, arbitrum, mainnet, arbitrumSepolia, gnosis, gnosisChiado } from "@reown/appkit/networks"; -import { type Chain, extractChain } from "viem"; - -import { isProductionDeployment } from "./index"; - -export const DEFAULT_CHAIN = isProductionDeployment() ? arbitrum.id : arbitrumSepolia.id; - -// Read/Write -export const SUPPORTED_CHAINS: Record<number, AppKitNetwork> = { - [isProductionDeployment() ? arbitrum.id : arbitrumSepolia.id]: isProductionDeployment() ? arbitrum : arbitrumSepolia, -}; - -// Read Only -export const QUERY_CHAINS: Record<number, AppKitNetwork> = { - [isProductionDeployment() ? gnosis.id : gnosisChiado.id]: isProductionDeployment() ? gnosis : gnosisChiado, - [mainnet.id]: mainnet, -}; - -export const ALL_CHAINS = [...Object.values(SUPPORTED_CHAINS), ...Object.values(QUERY_CHAINS)]; - -export const SUPPORTED_CHAIN_IDS = Object.keys(SUPPORTED_CHAINS); - -export const QUERY_CHAIN_IDS = Object.keys(QUERY_CHAINS); - -export const getChain = (chainId: number): Chain | null => - extractChain({ - chains: ALL_CHAINS, - id: chainId, - }); diff --git a/web/src/consts/coingecko.ts b/web/src/consts/coingecko.ts deleted file mode 100644 index af17fbc59..000000000 --- a/web/src/consts/coingecko.ts +++ /dev/null @@ -1,5 +0,0 @@ -// https://apiguide.coingecko.com/getting-started/10-min-tutorial-guide/1-get-data-by-id-or-address -export const CoinIds = { - ETH: "coingecko:ethereum", - PNK: "coingecko:kleros", -}; diff --git a/web/src/consts/community-elements.ts b/web/src/consts/community-elements.ts deleted file mode 100644 index 1189e8d70..000000000 --- a/web/src/consts/community-elements.ts +++ /dev/null @@ -1,49 +0,0 @@ -import styled, { css } from "styled-components"; - -import FrenchFlagIcon from "svgs/icons/french-flag.svg"; -import PNKIcon from "svgs/icons/pnk.svg"; -import SnapshotIcon from "svgs/icons/snapshot-color.svg"; -import TelegramIcon from "svgs/socialmedia/telegram.svg"; - -import { IElement } from "../pages/Home/Community/Element"; - -const fillWithSecondaryPurple = css` - fill: ${({ theme }) => theme.secondaryPurple}; -`; - -const StyledPNKIcon = styled(PNKIcon)` - ${fillWithSecondaryPurple} -`; - -const fillWithPrimaryBlue = css` - fill: ${({ theme }) => theme.primaryBlue}; -`; - -const StyledTelegramIcon = styled(TelegramIcon)` - ${fillWithPrimaryBlue} -`; - -export const section: IElement[] = [ - { - Icon: StyledPNKIcon, - title: "Kleros Forum", - link: "https://forum.kleros.io/", - }, - - { - Icon: SnapshotIcon, - title: "Vote on proposals", - link: "https://snapshot.org/#/kleros.eth/", - }, - { - Icon: StyledTelegramIcon, - title: "Community Calls", - link: "https://t.me/kleros", - primaryText: "Wednesday, 18h UTC", - }, - { - Icon: FrenchFlagIcon, - title: "Join the Coopérative", - link: "https://kleros.io/coop/", - }, -]; diff --git a/web/src/consts/eip712-messages.ts b/web/src/consts/eip712-messages.ts deleted file mode 100644 index e4491d1a3..000000000 --- a/web/src/consts/eip712-messages.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { DEFAULT_CHAIN } from "./chains"; - -export default { - contactDetails: (address: `0x${string}`, nonce: string, telegram = "", email = "", chainId: number = DEFAULT_CHAIN) => - ({ - address: address.toLowerCase() as `0x${string}`, - domain: { - name: "Kleros v2", - version: "1", - chainId, - }, - types: { - ContactDetails: [ - { name: "email", type: "string" }, - { name: "telegram", type: "string" }, - { name: "nonce", type: "string" }, - ], - }, - primaryType: "ContactDetails", - message: { - email, - telegram, - nonce, - }, - }) as const, - signingAccount: (address: `0x${string}`, chainId: number = DEFAULT_CHAIN) => - ({ - account: address.toLowerCase() as `0x${string}`, - domain: { - name: "Kleros v2", - version: "1", - chainId, - }, - types: { - SigningAccount: [{ name: "body", type: "string" }], - }, - primaryType: "SigningAccount", - message: { - body: - "To keep your data safe and to use certain features of Kleros, we ask that you sign these message to " + - "create a secret key for your account. This key is unrelated from your main Ethereum account and will " + - "not be able to send any transactions.", - }, - }) as const, -}; diff --git a/web/src/consts/index.ts b/web/src/consts/index.ts deleted file mode 100644 index 7ff5e809b..000000000 --- a/web/src/consts/index.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { ArbitratorTypes, getArbitratorType as _getArbitratorType } from "consts/arbitratorTypes"; - -import { version, gitCommitHash, gitCommitShortHash, gitBranch, gitTags, clean } from "../generatedGitInfo.json"; - -export { ArbitratorTypes }; - -export const ONE_BASIS_POINT = 10000n; - -export const REFETCH_INTERVAL = 5000; -export const STALE_TIME = 1000; - -export const IPFS_GATEWAY = import.meta.env.REACT_APP_IPFS_GATEWAY || "https://cdn.kleros.link"; -export const HERMES_TELEGRAM_BOT_URL = - import.meta.env.REACT_APP_HERMES_TELEGRAM_BOT_URL || "https://t.me/HermesTheKlerosV2MessengerBot"; - -export const GIT_BRANCH = gitBranch; -export const GIT_TAGS = gitTags; -export const GIT_HASH = gitCommitShortHash; -export const GIT_DIRTY = clean ? "" : "-dirty"; -export const GIT_URL = `https://github.com/kleros/kleros-v2/tree/${gitCommitHash}/web`; -export const RELEASE_VERSION = version; - -// https://www.w3.org/TR/2012/WD-html-markup-20120329/input.email.html#input.email.attrs.value.single - -export const EMAIL_REGEX = - /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; -export const TELEGRAM_REGEX = /^@\w{5,32}$/; -export const ETH_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; -export const ETH_SIGNATURE_REGEX = /^0x[a-fA-F0-9]{130}$/; - -export const isProductionDeployment = () => import.meta.env.REACT_APP_DEPLOYMENT === "mainnet"; -export const isTestnetDeployment = () => import.meta.env.REACT_APP_DEPLOYMENT === "testnet"; - -export const isKlerosUniversity = () => getArbitratorType() === ArbitratorTypes.university; -export const isKlerosNeo = () => getArbitratorType() === ArbitratorTypes.neo; -export const getArbitratorType = (): ArbitratorTypes => - _getArbitratorType(import.meta.env.REACT_APP_ARBITRATOR_TYPE?.toLowerCase()); - -export const getDevToolsUrl = () => import.meta.env.REACT_APP_DEVTOOLS_URL || "https://devtools.v2.kleros.builders"; - -export const INVALID_DISPUTE_DATA_ERROR = `The dispute data is not valid, please vote "Refuse to arbitrate"`; -export const RPC_ERROR = `RPC Error: Unable to fetch dispute data. Please avoid voting.`; - -export const spamEvidencesIds: string[] = (import.meta.env.REACT_APP_SPAM_EVIDENCES_IDS ?? "").split(","); - -export enum DisputeKits { - Classic = "Classic", - Shutter = "Shutter", - Gated = "Token Gated", - GatedShutter = "Token Gated Shutter", -} diff --git a/web/src/consts/periods.ts b/web/src/consts/periods.ts deleted file mode 100644 index 7a6a1b56d..000000000 --- a/web/src/consts/periods.ts +++ /dev/null @@ -1,7 +0,0 @@ -export enum Periods { - evidence, - commit, - vote, - appeal, - execution, -} diff --git a/web/src/consts/processEnvConsts.ts b/web/src/consts/processEnvConsts.ts deleted file mode 100644 index 8de7b7fc9..000000000 --- a/web/src/consts/processEnvConsts.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { arbitrum, arbitrumSepolia } from "viem/chains"; - -import { ArbitratorTypes, getArbitratorType as _getArbitratorType } from "consts/arbitratorTypes"; - -export { ArbitratorTypes }; - -export const ONE_BASIS_POINT = 10000n; - -export const REFETCH_INTERVAL = 5000; - -export const IPFS_GATEWAY = process.env.REACT_APP_IPFS_GATEWAY || "https://cdn.kleros.link"; -export const HERMES_TELEGRAM_BOT_URL = - process.env.REACT_APP_HERMES_TELEGRAM_BOT_URL || "https://t.me/HermesTheKlerosV2MessengerBot"; - -// https://www.w3.org/TR/2012/WD-html-markup-20120329/input.email.html#input.email.attrs.value.single -// eslint-disable-next-line security/detect-unsafe-regex -export const EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/; -export const TELEGRAM_REGEX = /^@\w{5,32}$/; -export const ETH_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; -export const ETH_SIGNATURE_REGEX = /^0x([a-fA-F0-9]{130})+$|^0x$/; - -export const isProductionDeployment = () => process.env.REACT_APP_DEPLOYMENT === "mainnet"; - -export const isKlerosUniversity = () => getArbitratorType() === ArbitratorTypes.university; -export const isKlerosNeo = () => getArbitratorType() === ArbitratorTypes.neo; -export const getArbitratorType = (): ArbitratorTypes => - _getArbitratorType(process.env.REACT_APP_ARBITRATOR_TYPE?.toLowerCase()); - -export const INVALID_DISPUTE_DATA_ERROR = `The dispute data is not valid, please vote "Refuse to arbitrate"`; -export const RPC_ERROR = `RPC Error: Unable to fetch dispute data. Please avoid voting.`; - -export const DEFAULT_CHAIN = isProductionDeployment() ? arbitrum.id : arbitrumSepolia.id; diff --git a/web/src/consts/socialmedia.ts b/web/src/consts/socialmedia.ts deleted file mode 100644 index 9f1500cc2..000000000 --- a/web/src/consts/socialmedia.ts +++ /dev/null @@ -1,33 +0,0 @@ -import DiscordLogo from "svgs/socialmedia/discord.svg"; -import GithubLogo from "svgs/socialmedia/github.svg"; -import LinkedinLogo from "svgs/socialmedia/linkedin.svg"; -import YouTubeLogo from "svgs/socialmedia/youtube.svg"; -import TelegramLogo from "svgs/socialmedia/telegram.svg"; -import XLogo from "svgs/socialmedia/x.svg"; - -export const socialmedia = { - telegram: { - icon: TelegramLogo, - url: "https://t.me/kleros", - }, - x: { - icon: XLogo, - url: "https://x.com/kleros_io", - }, - discord: { - icon: DiscordLogo, - url: "https://discord.com/invite/MhXQGCyHd9", - }, - youtube: { - icon: YouTubeLogo, - url: "https://youtube.com/@kleros_io", - }, - github: { - icon: GithubLogo, - url: "https://github.com/kleros", - }, - linkedin: { - icon: LinkedinLogo, - url: "https://www.linkedin.com/company/kleros/", - }, -}; diff --git a/web/src/context/AtlasProvider.tsx b/web/src/context/AtlasProvider.tsx deleted file mode 100644 index 6b76c029d..000000000 --- a/web/src/context/AtlasProvider.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from "react"; - -import { useConfig } from "wagmi"; - -import { AtlasProvider as _AtlasProvider, Products } from "@kleros/kleros-app"; - -const AtlasProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { - const wagmiConfig = useConfig(); - return ( - <_AtlasProvider config={{ uri: import.meta.env.REACT_APP_ATLAS_URI, product: Products.CourtV2, wagmiConfig }}> - {children} - </_AtlasProvider> - ); -}; - -export default AtlasProvider; diff --git a/web/src/context/GraphqlBatcher.tsx b/web/src/context/GraphqlBatcher.tsx deleted file mode 100644 index 30917edaf..000000000 --- a/web/src/context/GraphqlBatcher.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import React, { useMemo, createContext, useContext } from "react"; - -import { createBatchingExecutor } from "@graphql-tools/batch-execute"; -import { AsyncExecutor, ExecutionResult } from "@graphql-tools/utils"; -import { TypedDocumentNode } from "@graphql-typed-document-node/core"; -import { create, windowedFiniteBatchScheduler, Batcher } from "@yornaath/batshit"; -import { request } from "graphql-request"; - -import { debounceErrorToast } from "utils/debounceErrorToast"; -import { getGraphqlUrl } from "utils/getGraphqlUrl"; -interface IGraphqlBatcher { - graphqlBatcher: Batcher<any, IQuery>; -} - -interface IQuery { - id: string; - document: TypedDocumentNode<any, any>; - variables: Record<string, any>; - isDisputeTemplate?: boolean; - chainId?: number; -} - -const Context = createContext<IGraphqlBatcher | undefined>(undefined); - -const fetch = async (url, document, variables) => { - try { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore - const result = request(url, document, variables).then((res) => ({ - data: res, - })) as Promise<ExecutionResult>; - - return result; - } catch (error) { - console.error("Graph error: ", { error }); - debounceErrorToast("Graph query error: failed to fetch data."); - return { data: {} }; - } -}; - -const coreExecutor: AsyncExecutor = async ({ document, variables }) => { - return fetch(getGraphqlUrl(false), document, variables); -}; - -const dtrExecutor: AsyncExecutor = async ({ document, variables }) => { - return fetch(getGraphqlUrl(true), document, variables); -}; - -const coreBatchExec = createBatchingExecutor(coreExecutor); -const dtrBatchExec = createBatchingExecutor(dtrExecutor); - -const fetcher = async (queries: IQuery[]) => { - const batchdata = await Promise.all( - queries.map(({ document, variables, isDisputeTemplate }) => - isDisputeTemplate - ? dtrBatchExec({ - document, - variables, - }) - : coreBatchExec({ - document, - variables, - }) - ) - ); - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore - const processedData = batchdata.map((data, index) => ({ id: queries[index].id, result: data.data })); - return processedData; -}; - -const GraphqlBatcherProvider: React.FC<{ children?: React.ReactNode }> = ({ children }) => { - const graphqlBatcher = create({ - fetcher, - resolver: (results, query) => results.find((result) => result.id === query.id)!["result"], - scheduler: windowedFiniteBatchScheduler({ - windowMs: 100, - maxBatchSize: 5, - }), - }); - return <Context.Provider value={useMemo(() => ({ graphqlBatcher }), [graphqlBatcher])}>{children}</Context.Provider>; -}; - -export const useGraphqlBatcher = () => { - const context = useContext(Context); - if (!context) { - throw new Error("Context Provider not found."); - } - return context; -}; - -export default GraphqlBatcherProvider; diff --git a/web/src/context/IsListProvider.tsx b/web/src/context/IsListProvider.tsx deleted file mode 100644 index a995e1c7d..000000000 --- a/web/src/context/IsListProvider.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React, { createContext, useContext } from "react"; - -import { useLocalStorage, useToggle } from "react-use"; - -interface IIsListProvider { - isList: boolean; - setIsList: (arg0: boolean) => void; -} - -const Context = createContext<IIsListProvider>({ - isList: false, - setIsList: () => { - // - }, -}); - -const IsListProvider: React.FC<{ children?: React.ReactNode }> = ({ children }) => { - const [isListStorage, setIsListStorage] = useLocalStorage("isList", false); - const [isList, setIsListState] = useToggle(isListStorage ?? false); - const setIsList = (toggle: boolean) => { - setIsListState(toggle); - setIsListStorage(toggle); - }; - - const value = { - isList, - setIsList, - }; - return <Context.Provider {...{ value }}>{children}</Context.Provider>; -}; - -export const useIsList = () => useContext(Context); - -export default IsListProvider; diff --git a/web/src/context/NewDisputeContext.tsx b/web/src/context/NewDisputeContext.tsx deleted file mode 100644 index 5fc109cef..000000000 --- a/web/src/context/NewDisputeContext.tsx +++ /dev/null @@ -1,199 +0,0 @@ -import React, { createContext, useState, useContext, useMemo, useCallback, useEffect } from "react"; - -import { useLocation } from "react-router-dom"; -import { Address } from "viem"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { klerosCoreAddress } from "hooks/contracts/generated"; -import { useLocalStorage } from "hooks/useLocalStorage"; -import { isEmpty, isUndefined } from "utils/index"; - -export const MIN_DISPUTE_BATCH_SIZE = 2; - -export type Answer = { - id: string; - title: string; - description: string; - reserved?: boolean; -}; - -export type AliasArray = { - id?: string; - name: string; - address: string | Address; - isValid?: boolean; -}; - -export type Alias = Record<string, string>; -export interface IDisputeTemplate { - answers: Answer[]; - arbitrableAddress?: string; - arbitrableChainID?: string; - arbitratorAddress?: string; - arbitratorChainID?: string; - category?: string; - description: string; - frontendUrl?: string; - lang?: string; - policyURI?: string; - question: string; - specification?: string; - title: string; - aliases?: Alias; - version: string; - // attachment: Attachment; - // type: string; -} - -interface IDisputeData extends IDisputeTemplate { - courtId?: string; - numberOfJurors: number; - arbitrationCost?: string; - aliasesArray?: AliasArray[]; - disputeKitId?: number; - disputeKitData?: IDisputeKitData; -} - -export type IDisputeKitData = IGatedDisputeData | ISomeFutureDisputeData; - -export interface IGatedDisputeData { - type: "gated"; - isERC1155: boolean; - tokenGate: string; - tokenId: string; - isTokenGateValid?: boolean | null; // null = not validated, false = invalid, true = valid -} - -// Placeholder -export interface ISomeFutureDisputeData { - type: "future"; - contract: string; -} - -interface INewDisputeContext { - disputeData: IDisputeData; - setDisputeData: (disputeData: IDisputeData) => void; - disputeTemplate: IDisputeTemplate; - resetDisputeData: () => void; - isSubmittingCase: boolean; - setIsSubmittingCase: (isSubmittingCase: boolean) => void; - isPolicyUploading: boolean; - setIsPolicyUploading: (isPolicyUploading: boolean) => void; - isBatchCreation: boolean; - setIsBatchCreation: (isBatchCreation: boolean) => void; - batchSize: number; - setBatchSize: (batchSize?: number) => void; -} - -const getInitialDisputeData = (): IDisputeData => ({ - numberOfJurors: 3, - title: "", - description: "", - question: "", - category: "", - answers: [ - { title: "", id: "1", description: "" }, - { title: "", id: "2", description: "" }, - ], - aliasesArray: [{ name: "", address: "", id: "1" }], - disputeKitId: 1, - version: "1.0", -}); - -const initialDisputeData = getInitialDisputeData(); - -const NewDisputeContext = createContext<INewDisputeContext | undefined>(undefined); - -export const useNewDisputeContext = () => { - const context = useContext(NewDisputeContext); - if (!context) { - throw new Error("Context Provider not found."); - } - return context; -}; - -export const NewDisputeProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { - const [disputeData, setDisputeData] = useLocalStorage<IDisputeData>("disputeData", initialDisputeData); - const [isSubmittingCase, setIsSubmittingCase] = useState<boolean>(false); - const [isPolicyUploading, setIsPolicyUploading] = useState<boolean>(false); - const [isBatchCreation, setIsBatchCreation] = useState<boolean>(false); - const [batchSize, setBatchSize] = useLocalStorage<number>("disputeBatchSize", MIN_DISPUTE_BATCH_SIZE); - - const disputeTemplate = useMemo(() => constructDisputeTemplate(disputeData), [disputeData]); - const location = useLocation(); - - const resetDisputeData = useCallback(() => { - const freshData = getInitialDisputeData(); - setDisputeData(freshData); - setBatchSize(MIN_DISPUTE_BATCH_SIZE); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - useEffect(() => { - // Cleanup function to clear local storage when user leaves the route - if (location.pathname.includes("/resolver") || location.pathname.includes("/attachment")) return; - - resetDisputeData(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [location.pathname]); - - const contextValues = useMemo( - () => ({ - disputeData, - setDisputeData, - disputeTemplate, - resetDisputeData, - isSubmittingCase, - setIsSubmittingCase, - isPolicyUploading, - setIsPolicyUploading, - isBatchCreation, - setIsBatchCreation, - batchSize, - setBatchSize, - }), - [ - disputeData, - disputeTemplate, - resetDisputeData, - isSubmittingCase, - isPolicyUploading, - setDisputeData, - isBatchCreation, - setIsBatchCreation, - batchSize, - setBatchSize, - ] - ); - - return <NewDisputeContext.Provider value={contextValues}>{children}</NewDisputeContext.Provider>; -}; - -const constructDisputeTemplate = (disputeData: IDisputeData) => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { courtId, numberOfJurors, arbitrationCost, disputeKitId, ...baseTemplate } = disputeData; - - if (!isUndefined(baseTemplate.aliasesArray)) { - baseTemplate.aliasesArray = baseTemplate.aliasesArray.filter((item) => item.address !== "" && item.isValid); - if (baseTemplate.aliasesArray.length === 0) delete baseTemplate.aliasesArray; - else { - const aliases: Alias = {}; - - for (const alias of baseTemplate.aliasesArray) { - aliases[alias.name] = alias.address; - } - - baseTemplate.aliases = aliases; - } - } - - for (const answer of baseTemplate.answers) { - answer.id = "0x" + BigInt(answer.id).toString(16); - } - if (!isUndefined(baseTemplate.policyURI) && isEmpty(baseTemplate.policyURI)) delete baseTemplate.policyURI; - - baseTemplate.arbitratorAddress = klerosCoreAddress[DEFAULT_CHAIN]; - baseTemplate.arbitratorChainID = DEFAULT_CHAIN.toString(); - - return baseTemplate as IDisputeTemplate; -}; diff --git a/web/src/context/OverlayScrollContext.tsx b/web/src/context/OverlayScrollContext.tsx deleted file mode 100644 index 7b9629317..000000000 --- a/web/src/context/OverlayScrollContext.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { createContext, MutableRefObject } from "react"; - -export const OverlayScrollContext = createContext<MutableRefObject<HTMLElement | null> | null>(null); diff --git a/web/src/context/QueryClientProvider.tsx b/web/src/context/QueryClientProvider.tsx deleted file mode 100644 index 1e7ea78fe..000000000 --- a/web/src/context/QueryClientProvider.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from "react"; - -import { QueryClient, QueryClientProvider as _QueryClientProvider } from "@tanstack/react-query"; - -const queryClient = new QueryClient(); - -const QueryClientProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => ( - <_QueryClientProvider client={queryClient} children={children} /> -); - -export default QueryClientProvider; diff --git a/web/src/context/StyledComponentsProvider.tsx b/web/src/context/StyledComponentsProvider.tsx deleted file mode 100644 index d13624a19..000000000 --- a/web/src/context/StyledComponentsProvider.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from "react"; -import { ThemeProvider } from "styled-components"; - -import { useLocalStorage } from "hooks/useLocalStorage"; -import { ToggleThemeProvider } from "hooks/useToggleThemeContext"; - -import { GlobalStyle } from "styles/global-style"; -import { lightTheme, darkTheme } from "styles/themes"; - -const StyledComponentsProvider: React.FC<{ - children: React.ReactNode; -}> = ({ children }) => { - const [theme, setTheme] = useLocalStorage<string>("theme", "dark"); - const toggleTheme = () => { - if (theme === "light") setTheme("dark"); - else setTheme("light"); - }; - return ( - <ThemeProvider theme={theme === "light" ? lightTheme : darkTheme}> - <ToggleThemeProvider {...{ theme, toggleTheme }}> - <GlobalStyle /> - {children} - </ToggleThemeProvider> - </ThemeProvider> - ); -}; - -export default StyledComponentsProvider; diff --git a/web/src/context/Web3Provider.tsx b/web/src/context/Web3Provider.tsx deleted file mode 100644 index 0b39e71a7..000000000 --- a/web/src/context/Web3Provider.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import React from "react"; - -import { - mainnet, - arbitrumSepolia, - arbitrum, - gnosisChiado, - sepolia, - gnosis, - type AppKitNetwork, -} from "@reown/appkit/networks"; -import { createAppKit } from "@reown/appkit/react"; -import { WagmiAdapter } from "@reown/appkit-adapter-wagmi"; -import { fallback, http, WagmiProvider, webSocket } from "wagmi"; - -import { configureSDK } from "@kleros/kleros-sdk/src/sdk"; - -import { ALL_CHAINS, DEFAULT_CHAIN } from "consts/chains"; -import { isProductionDeployment } from "consts/index"; - -import { lightTheme } from "styles/themes"; - -const alchemyApiKey = import.meta.env.ALCHEMY_API_KEY; -if (!alchemyApiKey) { - throw new Error("Alchemy API key is not set in ALCHEMY_API_KEY environment variable."); -} - -const isProduction = isProductionDeployment(); - -// https://github.com/alchemyplatform/alchemy-sdk-js/blob/c4440cb/src/types/types.ts#L98-L153 -const alchemyToViemChain: Record<number, string> = { - [arbitrumSepolia.id]: "arb-sepolia", - [arbitrum.id]: "arb-mainnet", - [mainnet.id]: "eth-mainnet", - [sepolia.id]: "eth-sepolia", - [gnosis.id]: "gnosis-mainnet", - [gnosisChiado.id]: "gnosis-chiado", -}; - -type AlchemyProtocol = "https" | "wss"; - -// https://github.com/alchemyplatform/alchemy-sdk-js/blob/c4440cb/src/util/const.ts#L16-L18 -function alchemyURL(protocol: AlchemyProtocol, chainId: number | string): string { - const network = alchemyToViemChain[chainId]; - if (!network) { - throw new Error(`Unsupported chain ID: ${chainId}`); - } - return `${protocol}://${network}.g.alchemy.com/v2/${alchemyApiKey}`; -} - -export const getChainRpcUrl = (protocol: AlchemyProtocol, chainId: number | string) => { - return alchemyURL(protocol, chainId); -}; - -export const getDefaultChainRpcUrl = (protocol: AlchemyProtocol) => { - return getChainRpcUrl(protocol, DEFAULT_CHAIN); -}; - -export const getTransports = () => { - const alchemyTransport = (chain: AppKitNetwork) => - fallback([http(alchemyURL("https", chain.id)), webSocket(alchemyURL("wss", chain.id))]); - const defaultTransport = (chain: AppKitNetwork) => - fallback([http(chain.rpcUrls.default?.http?.[0]), webSocket(chain.rpcUrls.default?.webSocket?.[0])]); - - return { - [isProduction ? arbitrum.id : arbitrumSepolia.id]: isProduction - ? alchemyTransport(arbitrum) - : alchemyTransport(arbitrumSepolia), - [isProduction ? gnosis.id : gnosisChiado.id]: isProduction - ? defaultTransport(gnosis) - : defaultTransport(gnosisChiado), - [mainnet.id]: alchemyTransport(mainnet), // Always enabled for ENS resolution - }; -}; - -const chains = ALL_CHAINS as [AppKitNetwork, ...AppKitNetwork[]]; -const transports = getTransports(); - -const projectId = import.meta.env.WALLETCONNECT_PROJECT_ID; -if (!projectId) { - throw new Error("WalletConnect project ID is not set in WALLETCONNECT_PROJECT_ID environment variable."); -} - -const wagmiAdapter = new WagmiAdapter({ - networks: chains, - projectId, - transports, -}); - -configureSDK({ - client: { - chain: isProduction ? arbitrum : arbitrumSepolia, - transport: transports[isProduction ? arbitrum.id : arbitrumSepolia.id], - }, -}); - -createAppKit({ - adapters: [wagmiAdapter], - networks: chains, - defaultNetwork: isProduction ? arbitrum : arbitrumSepolia, - projectId, - allowUnsupportedChain: true, - themeVariables: { - "--w3m-color-mix": lightTheme.primaryPurple, - "--w3m-color-mix-strength": 20, - // overlay portal is at 9999 - "--w3m-z-index": 10000, - }, - features: { - // adding these here to toggle in futute if needed - // email: false, - // socials: false, - // onramp:false, - // swap: false - }, -}); -const Web3Provider: React.FC<{ children: React.ReactNode }> = ({ children }) => { - return <WagmiProvider config={wagmiAdapter.wagmiConfig}> {children} </WagmiProvider>; -}; - -export default Web3Provider; diff --git a/web/src/favicon.ico b/web/src/favicon.ico deleted file mode 100644 index 47556b42952514397cdaef37cd8b15099242a13a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14008 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 BlbZkl diff --git a/web/src/hooks/.gitkeep b/web/src/hooks/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/web/src/hooks/queries/useAllCasesQuery.ts b/web/src/hooks/queries/useAllCasesQuery.ts deleted file mode 100644 index e24bb2102..000000000 --- a/web/src/hooks/queries/useAllCasesQuery.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { STALE_TIME } from "src/consts"; -import { graphql } from "src/graphql"; -import { AllCasesQuery } from "src/graphql/graphql"; - -export type { AllCasesQuery }; - -const allCasesQuery = graphql(` - query AllCases { - counter(id: 0) { - cases - casesRuled - } - } -`); - -export const useAllCasesQuery = () => { - const { graphqlBatcher } = useGraphqlBatcher(); - return useQuery({ - queryKey: [`allCasesQuery`], - staleTime: STALE_TIME, - queryFn: async () => - await graphqlBatcher.fetch({ id: crypto.randomUUID(), document: allCasesQuery, variables: {} }), - }); -}; diff --git a/web/src/hooks/queries/useAppealCost.ts b/web/src/hooks/queries/useAppealCost.ts deleted file mode 100644 index 580134ac1..000000000 --- a/web/src/hooks/queries/useAppealCost.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { getContract } from "viem"; -import { usePublicClient } from "wagmi"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { klerosCoreConfig } from "hooks/contracts/generated"; -import { isUndefined } from "utils/index"; - -export const useAppealCost = (disputeID?: string) => { - const publicClient = usePublicClient(); - const klerosCore = getContract({ - abi: klerosCoreConfig.abi, - address: klerosCoreConfig.address[DEFAULT_CHAIN], - client: { - public: publicClient, - }, - }); - const isEnabled = !isUndefined(klerosCore) && !isUndefined(disputeID); - return useQuery({ - queryKey: [`AppealCost${disputeID}`], - enabled: isEnabled, - staleTime: Infinity, - queryFn: async () => { - if (!klerosCore || typeof disputeID === "undefined") return; - return await klerosCore.read.appealCost([BigInt(disputeID)]); - }, - }); -}; diff --git a/web/src/hooks/queries/useCasesQuery.ts b/web/src/hooks/queries/useCasesQuery.ts deleted file mode 100644 index ad651fee0..000000000 --- a/web/src/hooks/queries/useCasesQuery.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { Address } from "viem"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; -import { isUndefined } from "utils/index"; -import { sanitizeFilter } from "utils/sanitizeFilter"; - -import { graphql } from "src/graphql"; -import { - CasesPageQuery, - Dispute_Filter, - OrderDirection, - MyCasesQuery, - DisputeDetailsFragment, -} from "src/graphql/graphql"; -export type { CasesPageQuery, DisputeDetailsFragment }; - -export const disputeFragment = graphql(` - fragment DisputeDetails on Dispute { - id - disputeID - arbitrated { - id - } - currentRoundIndex - court { - id - policy - feeForJuror - timesPerPeriod - } - period - lastPeriodChange - } -`); - -const casesQueryWhere = graphql(` - query CasesPageWhere($skip: Int, $where: Dispute_filter, $orderDirection: OrderDirection, $first: Int) { - disputes(first: $first, skip: $skip, orderBy: disputeID, orderDirection: $orderDirection, where: $where) { - ...DisputeDetails - } - } -`); - -const casesQuery = graphql(` - query CasesPage($skip: Int, $orderDirection: OrderDirection, $first: Int) { - disputes(first: $first, skip: $skip, orderBy: disputeID, orderDirection: $orderDirection) { - ...DisputeDetails - } - } -`); - -const myCasesQuery = graphql(` - query MyCases($id: ID!, $skip: Int, $orderDirection: OrderDirection) { - user(id: $id) { - disputes(first: 3, skip: $skip, orderBy: disputeID, orderDirection: $orderDirection) { - ...DisputeDetails - } - } - } -`); - -const myCasesQueryWhere = graphql(` - query myCasesPageWhere($id: ID!, $skip: Int, $where: Dispute_filter, $orderDirection: OrderDirection) { - user(id: $id) { - disputes(first: 3, skip: $skip, orderBy: disputeID, orderDirection: $orderDirection, where: $where) { - ...DisputeDetails - } - } - } -`); - -export const useCasesQuery = (skip = 0, first = 3, where?: Dispute_Filter, sortOrder?: OrderDirection) => { - const { graphqlBatcher } = useGraphqlBatcher(); - const sanitizedWhere = sanitizeFilter(where); - - return useQuery<CasesPageQuery>({ - queryKey: [`useCasesQuery`, skip, sanitizedWhere, sortOrder, first], - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: isUndefined(sanitizedWhere) ? casesQuery : casesQueryWhere, - variables: { - first, - skip, - where: sanitizedWhere, - orderDirection: sortOrder ?? "desc", - }, - }), - }); -}; - -export const useMyCasesQuery = (user?: Address, skip = 0, where?: Dispute_Filter, sortOrder?: OrderDirection) => { - const { graphqlBatcher } = useGraphqlBatcher(); - const sanitizedWhere = sanitizeFilter(where); - - return useQuery<MyCasesQuery>({ - queryKey: ["useMyCasesQuery", user, skip, sanitizedWhere, sortOrder], - enabled: !isUndefined(user), - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: isUndefined(sanitizedWhere) ? myCasesQuery : myCasesQueryWhere, - variables: { - skip, - id: user?.toLowerCase(), - where: sanitizedWhere, - orderDirection: sortOrder ?? "desc", - }, - }), - }); -}; diff --git a/web/src/hooks/queries/useClassicAppealQuery.ts b/web/src/hooks/queries/useClassicAppealQuery.ts deleted file mode 100644 index e0458d02e..000000000 --- a/web/src/hooks/queries/useClassicAppealQuery.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { REFETCH_INTERVAL, STALE_TIME } from "consts/index"; -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { graphql } from "src/graphql"; -import { ClassicAppealQuery } from "src/graphql/graphql"; -export type { ClassicAppealQuery }; - -const classicAppealQuery = graphql(` - query ClassicAppeal($disputeID: ID!, $orderBy: DisputeKitDispute_orderBy, $orderDirection: OrderDirection) { - dispute(id: $disputeID) { - period - court { - id - timesPerPeriod - } - arbitrated { - id - } - lastPeriodChange - disputeKitDispute(orderBy: $orderBy, orderDirection: $orderDirection) { - id - currentLocalRoundIndex - localRounds { - ... on ClassicRound { - winningChoice - answers { - answerId - count - paidFee - funded - } - fundedChoices - appealFeesDispersed - totalFeeDispersed - } - } - } - } - } -`); - -export const useClassicAppealQuery = (id?: string | number) => { - const isEnabled = id !== undefined; - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<ClassicAppealQuery>({ - queryKey: [`classicAppealQuery${id}`], - enabled: isEnabled, - refetchInterval: REFETCH_INTERVAL, - staleTime: STALE_TIME, - queryFn: async () => - isEnabled - ? await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: classicAppealQuery, - variables: { - disputeID: id?.toString(), - orderBy: "timestamp", - orderDirection: "asc", - }, - }) - : undefined, - }); -}; diff --git a/web/src/hooks/queries/useCounter.ts b/web/src/hooks/queries/useCounter.ts deleted file mode 100644 index a03e05231..000000000 --- a/web/src/hooks/queries/useCounter.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { graphql } from "src/graphql"; -import { CounterQuery } from "src/graphql/graphql"; - -export type { CounterQuery }; - -const counterQuery = graphql(` - query Counter { - counter(id: "0") { - id - cases - casesRuled - casesVoting - casesAppealing - stakedPNK - redistributedPNK - paidETH - activeJurors - } - } -`); - -export const useCounterQuery = () => { - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<CounterQuery>({ - queryKey: [`useCounterQuery`], - queryFn: async () => await graphqlBatcher.fetch({ id: crypto.randomUUID(), document: counterQuery, variables: {} }), - }); -}; diff --git a/web/src/hooks/queries/useCourtDetails.ts b/web/src/hooks/queries/useCourtDetails.ts deleted file mode 100644 index 46795d763..000000000 --- a/web/src/hooks/queries/useCourtDetails.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { REFETCH_INTERVAL, STALE_TIME } from "consts/index"; -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { graphql } from "src/graphql"; -import { CourtDetailsQuery } from "src/graphql/graphql"; -export type { CourtDetailsQuery }; - -const courtDetailsQuery = graphql(` - query CourtDetails($id: ID!) { - court(id: $id) { - policy - minStake - alpha - numberDisputes - numberClosedDisputes - numberAppealingDisputes - numberStakedJurors - effectiveNumberStakedJurors - numberVotes - stake - effectiveStake - paidETH - paidPNK - timesPerPeriod - feeForJuror - name - } - } -`); - -export const useCourtDetails = (id?: string) => { - const isEnabled = id !== undefined; - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<CourtDetailsQuery>({ - queryKey: [`courtDetails${id}`], - enabled: isEnabled, - refetchInterval: REFETCH_INTERVAL, - staleTime: STALE_TIME, - queryFn: async () => - await graphqlBatcher.fetch({ id: crypto.randomUUID(), document: courtDetailsQuery, variables: { id } }), - }); -}; diff --git a/web/src/hooks/queries/useCourtPolicy.ts b/web/src/hooks/queries/useCourtPolicy.ts deleted file mode 100644 index 0008f0ad4..000000000 --- a/web/src/hooks/queries/useCourtPolicy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { useCourtPolicyURI } from "queries/useCourtPolicyURI"; - -import { useIPFSQuery } from "../useIPFSQuery"; - -export const useCourtPolicy = (courtID?: string) => { - const { data: policyURI } = useCourtPolicyURI(courtID); - return useIPFSQuery(policyURI?.court?.policy ?? ""); -}; diff --git a/web/src/hooks/queries/useCourtPolicyURI.ts b/web/src/hooks/queries/useCourtPolicyURI.ts deleted file mode 100644 index 6f866b1c2..000000000 --- a/web/src/hooks/queries/useCourtPolicyURI.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; -import { isUndefined } from "utils/index"; - -import { graphql } from "src/graphql"; -import { CourtPolicyUriQuery } from "src/graphql/graphql"; - -export type { CourtPolicyUriQuery }; - -const courtPolicyURIQuery = graphql(` - query CourtPolicyURI($courtID: ID!) { - court(id: $courtID) { - policy - } - } -`); - -export const useCourtPolicyURI = (id?: string | number) => { - const isEnabled = !isUndefined(id); - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<CourtPolicyUriQuery>({ - queryKey: [`CourtPolicyURI${id}`], - enabled: isEnabled, - staleTime: Infinity, - queryFn: async () => - isEnabled - ? await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: courtPolicyURIQuery, - variables: { courtID: id.toString() }, - }) - : undefined, - }); -}; diff --git a/web/src/hooks/queries/useCourtTree.ts b/web/src/hooks/queries/useCourtTree.ts deleted file mode 100644 index 5eb70814d..000000000 --- a/web/src/hooks/queries/useCourtTree.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { STALE_TIME } from "src/consts"; -import { graphql } from "src/graphql"; -import { CourtTreeQuery } from "src/graphql/graphql"; -export type { CourtTreeQuery }; - -const courtTreeQuery = graphql(` - query CourtTree { - court(id: "1") { - name - id - children(orderBy: name) { - name - id - children { - name - id - children { - name - id - children { - name - id - children { - name - id - } - } - } - } - } - } - } -`); - -export const useCourtTree = () => { - const { graphqlBatcher } = useGraphqlBatcher(); - return useQuery<CourtTreeQuery>({ - queryKey: ["courtTreeQuery"], - staleTime: STALE_TIME, - queryFn: async () => - await graphqlBatcher.fetch({ id: crypto.randomUUID(), document: courtTreeQuery, variables: {} }), - }); -}; - -interface IItem { - label: string; - value: string; - children?: IItem[]; -} - -export const rootCourtToItems = ( - court: NonNullable<CourtTreeQuery["court"]>, - value: "id" | "path" = "path" -): IItem => ({ - label: court.name ? court.name : "Unnamed Court", - value: value === "id" ? court.id : `/courts/${court.id}`, - children: court.children.length > 0 ? court.children.map((child) => rootCourtToItems(child, value)) : undefined, -}); diff --git a/web/src/hooks/queries/useDisputeDetailsQuery.ts b/web/src/hooks/queries/useDisputeDetailsQuery.ts deleted file mode 100644 index fd0871f3c..000000000 --- a/web/src/hooks/queries/useDisputeDetailsQuery.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { REFETCH_INTERVAL, STALE_TIME } from "consts/index"; -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { graphql } from "src/graphql"; -import { DisputeDetailsQuery } from "src/graphql/graphql"; -export type { DisputeDetailsQuery }; - -const disputeDetailsQuery = graphql(` - query DisputeDetails($disputeID: ID!) { - dispute(id: $disputeID) { - court { - id - timesPerPeriod - hiddenVotes - feeForJuror - } - arbitrated { - id - } - period - ruled - lastPeriodChange - currentRuling - overridden - tied - currentRound { - id - nbVotes - disputeKit { - id - address - } - } - currentRoundIndex - isCrossChain - arbitrableChainId - externalDisputeId - templateId - rulingTimestamp - rulingTransactionHash - } - } -`); - -export const useDisputeDetailsQuery = (id?: string | number) => { - const isEnabled = id !== undefined; - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<DisputeDetailsQuery>({ - queryKey: [`disputeDetailsQuery${id}`], - enabled: isEnabled, - refetchInterval: REFETCH_INTERVAL, - staleTime: STALE_TIME, - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: disputeDetailsQuery, - variables: { disputeID: id?.toString() }, - }), - }); -}; diff --git a/web/src/hooks/queries/useDisputeKitClassicMultipliers.ts b/web/src/hooks/queries/useDisputeKitClassicMultipliers.ts deleted file mode 100644 index 5a768937e..000000000 --- a/web/src/hooks/queries/useDisputeKitClassicMultipliers.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { getContract } from "viem"; -import { usePublicClient } from "wagmi"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { disputeKitClassicConfig } from "hooks/contracts/generated"; -import { isUndefined } from "utils/index"; - -export const useDisputeKitClassicMultipliers = () => { - const publicClient = usePublicClient(); - const disputeKitClassic = getContract({ - abi: disputeKitClassicConfig.abi, - address: disputeKitClassicConfig.address[DEFAULT_CHAIN], - client: { - public: publicClient, - }, - }); - const isEnabled = !isUndefined(disputeKitClassic); - return useQuery({ - queryKey: [`DisputeKitClassicMultipliers`], - enabled: isEnabled, - staleTime: Infinity, - queryFn: async () => { - if (!disputeKitClassic) return; - const winner_stake_multiplier = await disputeKitClassic.read.WINNER_STAKE_MULTIPLIER(); - const loser_stake_multiplier = await disputeKitClassic.read.LOSER_STAKE_MULTIPLIER(); - const loser_appeal_period_multiplier = await disputeKitClassic.read.LOSER_APPEAL_PERIOD_MULTIPLIER(); - return { - winner_stake_multiplier, - loser_stake_multiplier, - loser_appeal_period_multiplier, - }; - }, - }); -}; - -export interface IDisputeKitClassicMultipliers { - winner_stake_multiplier: bigint; - loser_stake_multiplier: bigint; - loser_appeal_period_multiplier: bigint; -} diff --git a/web/src/hooks/queries/useDisputeMaintenanceQuery.ts b/web/src/hooks/queries/useDisputeMaintenanceQuery.ts deleted file mode 100644 index 191684c2f..000000000 --- a/web/src/hooks/queries/useDisputeMaintenanceQuery.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { STALE_TIME } from "src/consts"; -import { graphql } from "src/graphql"; -import { DisputeMaintenanceQuery } from "src/graphql/graphql"; -import { isUndefined } from "src/utils"; - -const disputeMaintenance = graphql(` - query DisputeMaintenance($disputeId: ID!, $disputeIdAsString: String!) { - dispute(id: $disputeId) { - currentRound { - jurorsDrawn - } - rounds { - id - jurorRewardsDispersed - nbVotes - } - } - contributions(where: { coreDispute: $disputeIdAsString }) { - contributor { - id - } - ... on ClassicContribution { - choice - rewardWithdrawn - } - coreDispute { - currentRoundIndex - } - } - } -`); - -const useDisputeMaintenanceQuery = (id?: string) => { - const isEnabled = !isUndefined(id); - - const { graphqlBatcher } = useGraphqlBatcher(); - return useQuery<DisputeMaintenanceQuery>({ - queryKey: [`disputeMaintenanceQuery-${id}`], - enabled: isEnabled, - staleTime: STALE_TIME, - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: disputeMaintenance, - variables: { disputeId: id?.toString(), disputeIdAsString: id?.toString() }, - }), - }); -}; - -export default useDisputeMaintenanceQuery; diff --git a/web/src/hooks/queries/useDisputeTemplateFromId.ts b/web/src/hooks/queries/useDisputeTemplateFromId.ts deleted file mode 100644 index f6c1b0b79..000000000 --- a/web/src/hooks/queries/useDisputeTemplateFromId.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; -import { isUndefined } from "utils/index"; - -import { graphql } from "src/graphql"; -import { DisputeTemplateQuery } from "src/graphql/graphql"; - -const disputeTemplateQuery = graphql(` - query DisputeTemplate($id: ID!) { - disputeTemplate(id: $id) { - id - templateTag - templateData - templateDataMappings - } - } -`); - -export const useDisputeTemplateFromId = (templateId?: string) => { - const isEnabled = !isUndefined(templateId); - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<DisputeTemplateQuery>({ - queryKey: [`disputeTemplate${templateId}`], - enabled: isEnabled, - staleTime: Infinity, - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: disputeTemplateQuery, - variables: { id: templateId?.toString() }, - isDisputeTemplate: true, - }), - }); -}; diff --git a/web/src/hooks/queries/useDrawQuery.ts b/web/src/hooks/queries/useDrawQuery.ts deleted file mode 100644 index 07c9a36e3..000000000 --- a/web/src/hooks/queries/useDrawQuery.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { graphql } from "src/graphql"; -import { DrawQuery } from "src/graphql/graphql"; -export type { DrawQuery }; - -const drawQuery = graphql(` - query Draw($address: String, $disputeID: String, $roundID: String) { - draws(first: 1000, where: { dispute: $disputeID, juror: $address, round: $roundID }) { - voteIDNum - vote { - ... on ClassicVote { - commit - commited - } - } - } - } -`); - -export const useDrawQuery = (address?: string | null, disputeID?: string, roundID?: string) => { - const isEnabled = !!(address && disputeID && roundID); - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<DrawQuery>({ - queryKey: [`drawQuery${[address, disputeID, roundID]}`], - enabled: isEnabled, - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: drawQuery, - variables: { address, disputeID, roundID }, - }), - }); -}; diff --git a/web/src/hooks/queries/useEvidences.ts b/web/src/hooks/queries/useEvidences.ts deleted file mode 100644 index 3123163b9..000000000 --- a/web/src/hooks/queries/useEvidences.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { REFETCH_INTERVAL } from "consts/index"; -import { useGraphqlBatcher } from "context/GraphqlBatcher"; -import { transformSearch } from "utils/transformSearch"; - -import { graphql } from "src/graphql"; -import { EvidenceDetailsFragment, EvidencesQuery } from "src/graphql/graphql"; -export type { EvidencesQuery }; - -export const evidenceFragment = graphql(` - fragment EvidenceDetails on ClassicEvidence { - id - evidence - sender { - id - } - timestamp - transactionHash - name - description - fileURI - fileTypeExtension - evidenceIndex - } -`); - -const evidencesQuery = graphql(` - query Evidences($evidenceGroupID: String) { - evidences(where: { evidenceGroup: $evidenceGroupID }, orderBy: timestamp, orderDirection: asc) { - ...EvidenceDetails - } - } -`); - -const evidenceSearchQuery = graphql(` - query EvidenceSearch($keywords: String!, $evidenceGroupID: String) { - evidenceSearch(text: $keywords, where: { evidenceGroup: $evidenceGroupID }) { - ...EvidenceDetails - } - } -`); - -export const useEvidences = (evidenceGroup?: string, keywords?: string) => { - const isEnabled = evidenceGroup !== undefined; - const { graphqlBatcher } = useGraphqlBatcher(); - - const document = keywords ? evidenceSearchQuery : evidencesQuery; - const transformedKeywords = transformSearch(keywords); - - return useQuery<{ evidences: EvidenceDetailsFragment[] }>({ - queryKey: [keywords ? `evidenceSearchQuery${evidenceGroup}-${keywords}` : `evidencesQuery${evidenceGroup}`], - enabled: isEnabled, - refetchInterval: REFETCH_INTERVAL, - queryFn: async () => { - const result = await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: document, - variables: { evidenceGroupID: evidenceGroup?.toString(), keywords: transformedKeywords }, - }); - - return keywords ? { evidences: [...result.evidenceSearch] } : result; - }, - }); -}; diff --git a/web/src/hooks/queries/useHomePageBlockQuery.ts b/web/src/hooks/queries/useHomePageBlockQuery.ts deleted file mode 100644 index aa8cfb075..000000000 --- a/web/src/hooks/queries/useHomePageBlockQuery.ts +++ /dev/null @@ -1,209 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { useGraphqlBatcher } from "context/GraphqlBatcher"; -import { isUndefined } from "utils/index"; -import { graphql } from "src/graphql"; -import { HomePageBlockQuery } from "src/graphql/graphql"; - -const homePageBlockQuery = graphql(` - query HomePageBlock($pastTimestamp: BigInt) { - presentCourts: courts(orderBy: id, orderDirection: asc, first: 1000) { - id - parent { - id - } - name - numberDisputes - numberVotes - feeForJuror - effectiveStake - } - pastCourts: courtCounters( - where: { timestamp_lte: $pastTimestamp } - orderBy: timestamp - orderDirection: desc - first: 1000 - ) { - court { - id - } - numberDisputes - numberVotes - effectiveStake - timestamp - } - } -`); - -type Court = HomePageBlockQuery["presentCourts"][number]; -type CourtCounter = HomePageBlockQuery["pastCourts"][number]; -type CourtWithTree = Court & { - numberDisputes: number; - numberVotes: number; - feeForJuror: bigint; - effectiveStake: bigint; - treeNumberDisputes: number; - treeNumberVotes: number; - votesPerPnk: number; - treeVotesPerPnk: number; - disputesPerPnk: number; - treeDisputesPerPnk: number; - expectedRewardPerPnk: number; - treeExpectedRewardPerPnk: number; -}; - -export type HomePageBlockStats = { - mostDisputedCourt: CourtWithTree; - bestDrawingChancesCourt: CourtWithTree; - bestExpectedRewardCourt: CourtWithTree; - courts: CourtWithTree[]; -}; - -const getCourtMostDisputes = (courts: CourtWithTree[]) => - courts.toSorted((a, b) => b.numberDisputes - a.numberDisputes)[0]; -const getCourtBestDrawingChances = (courts: CourtWithTree[]) => - courts.toSorted((a, b) => b.treeVotesPerPnk - a.treeVotesPerPnk)[0]; -const getBestExpectedRewardCourt = (courts: CourtWithTree[]) => - courts.toSorted((a, b) => b.treeExpectedRewardPerPnk - a.treeExpectedRewardPerPnk)[0]; - -const processData = (data: HomePageBlockQuery, allTime: boolean) => { - const presentCourts = [...data.presentCourts].sort((a, b) => Number(a.id) - Number(b.id)); - const pastCourts = data.pastCourts; - - const presentCourtsMap = new Map(presentCourts.map((c) => [c.id, c])); - const pastCourtsMap = new Map<string, CourtCounter>(); - if (!allTime) { - for (const pastCourt of pastCourts) { - const courtId = pastCourt.court.id; - if (!pastCourtsMap.has(courtId)) { - pastCourtsMap.set(courtId, pastCourt); - } - } - } - - const processedCourtsMap = new Map<string, CourtWithTree>(); - const processCourt = (courtId: string): CourtWithTree => { - if (processedCourtsMap.has(courtId)) return processedCourtsMap.get(courtId)!; - - const court = presentCourtsMap.get(courtId)!; - const pastCourt = pastCourtsMap.get(courtId); - - const courtWithTree = !allTime && pastCourt ? addTreeValuesWithDiff(court, pastCourt) : addTreeValues(court); - - const parentId = court.parent?.id; - if (!parentId || courtId === parentId) { - processedCourtsMap.set(courtId, courtWithTree); - return courtWithTree; - } - - const parentCourt = processCourt(parentId); - const fullTreeCourt: CourtWithTree = { - ...courtWithTree, - treeNumberDisputes: courtWithTree.treeNumberDisputes + parentCourt.treeNumberDisputes, - treeNumberVotes: courtWithTree.treeNumberVotes + parentCourt.treeNumberVotes, - treeVotesPerPnk: courtWithTree.treeVotesPerPnk + parentCourt.treeVotesPerPnk, - treeDisputesPerPnk: courtWithTree.treeDisputesPerPnk + parentCourt.treeDisputesPerPnk, - treeExpectedRewardPerPnk: courtWithTree.treeExpectedRewardPerPnk + parentCourt.treeExpectedRewardPerPnk, - }; - - processedCourtsMap.set(courtId, fullTreeCourt); - return fullTreeCourt; - }; - - for (const court of presentCourts.toReversed()) { - processCourt(court.id); - } - - const processedCourts = [...processedCourtsMap.values()].sort((a, b) => Number(a.id) - Number(b.id)); - - return { - mostDisputedCourt: getCourtMostDisputes(processedCourts), - bestDrawingChancesCourt: getCourtBestDrawingChances(processedCourts), - bestExpectedRewardCourt: getBestExpectedRewardCourt(processedCourts), - courts: processedCourts, - }; -}; - -const addTreeValues = (court: Court): CourtWithTree => { - const votesPerPnk = Number(court.numberVotes) / (Number(court.effectiveStake) / 1e18) || 0; - const disputesPerPnk = Number(court.numberDisputes) / (Number(court.effectiveStake) / 1e18) || 0; - const expectedRewardPerPnk = votesPerPnk * (Number(court.feeForJuror) / 1e18); - return { - ...court, - numberDisputes: Number(court.numberDisputes), - numberVotes: Number(court.numberVotes), - feeForJuror: BigInt(court.feeForJuror) / BigInt(1e18), - effectiveStake: BigInt(court.effectiveStake), - treeNumberDisputes: Number(court.numberDisputes), - treeNumberVotes: Number(court.numberVotes), - votesPerPnk, - treeVotesPerPnk: votesPerPnk, - disputesPerPnk, - treeDisputesPerPnk: disputesPerPnk, - expectedRewardPerPnk, - treeExpectedRewardPerPnk: expectedRewardPerPnk, - }; -}; - -const addTreeValuesWithDiff = (presentCourt: Court, pastCourt: CourtCounter | undefined): CourtWithTree => { - const presentCourtWithTree = addTreeValues(presentCourt); - - if (!pastCourt) { - console.warn(`Missing snapshot for court ${presentCourt.id}, falling back to live`); - return presentCourtWithTree; - } - - const pastNumberVotes = Number(pastCourt.numberVotes); - const pastNumberDisputes = Number(pastCourt.numberDisputes); - const pastEffectiveStake = BigInt(pastCourt.effectiveStake); - - const diffNumberVotes = presentCourtWithTree.numberVotes - pastNumberVotes; - const diffNumberDisputes = presentCourtWithTree.numberDisputes - pastNumberDisputes; - - const hasLiveActivity = presentCourtWithTree.numberDisputes > 0 || presentCourtWithTree.numberVotes > 0; - const hasSnapshotActivity = diffNumberDisputes > 0 || diffNumberVotes > 0; - - if (!hasSnapshotActivity && hasLiveActivity) { - console.warn(`Snapshot shows no delta for court ${presentCourt.id}, using live`); - return presentCourtWithTree; - } - - const avgEffectiveStake = (presentCourtWithTree.effectiveStake + pastEffectiveStake) / 2n; - const votesPerPnk = diffNumberVotes / (Number(avgEffectiveStake) / 1e18) || 0; - const disputesPerPnk = diffNumberDisputes / (Number(avgEffectiveStake) / 1e18) || 0; - const expectedRewardPerPnk = votesPerPnk * (Number(presentCourt.feeForJuror) / 1e18); - - return { - ...presentCourt, - numberDisputes: diffNumberDisputes, - treeNumberDisputes: diffNumberDisputes, - numberVotes: diffNumberVotes, - treeNumberVotes: diffNumberVotes, - feeForJuror: presentCourtWithTree.feeForJuror, - effectiveStake: avgEffectiveStake, - votesPerPnk, - treeVotesPerPnk: votesPerPnk, - disputesPerPnk, - treeDisputesPerPnk: disputesPerPnk, - expectedRewardPerPnk, - treeExpectedRewardPerPnk: expectedRewardPerPnk, - }; -}; - -export const useHomePageBlockQuery = (pastTimestamp: bigint | undefined, allTime: boolean) => { - const { graphqlBatcher } = useGraphqlBatcher(); - const isEnabled = !isUndefined(pastTimestamp) || allTime; - - return useQuery<HomePageBlockStats>({ - queryKey: [`homePageBlockQuery${pastTimestamp?.toString()}-${allTime}`], - enabled: isEnabled, - staleTime: Infinity, - queryFn: async () => { - const data = await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: homePageBlockQuery, - variables: { pastTimestamp: allTime ? "0" : pastTimestamp?.toString() }, - }); - return processData(data, allTime); - }, - }); -}; diff --git a/web/src/hooks/queries/useHomePageExtraStats.ts b/web/src/hooks/queries/useHomePageExtraStats.ts deleted file mode 100644 index 8d3ccb2f0..000000000 --- a/web/src/hooks/queries/useHomePageExtraStats.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { useEffect, useState } from "react"; -import { UseQueryResult } from "@tanstack/react-query"; -import { useHomePageBlockQuery, HomePageBlockStats } from "./useHomePageBlockQuery"; - -type ReturnType = UseQueryResult<HomePageBlockStats, Error>; - -export const useHomePageExtraStats = (days: number | string): ReturnType => { - const [pastTimestamp, setPastTimestamp] = useState<bigint | undefined>(); - - useEffect(() => { - if (typeof days !== "string") { - const currentTimestamp = BigInt(Math.floor(Date.now() / 1000)); // Current time in seconds - const secondsInDays = BigInt(days * 24 * 3600); - const pastTime = currentTimestamp - secondsInDays; - setPastTimestamp(pastTime); - } - }, [days]); - - const data = useHomePageBlockQuery(pastTimestamp, days === "allTime"); - return data; -}; diff --git a/web/src/hooks/queries/useHomePageQuery.ts b/web/src/hooks/queries/useHomePageQuery.ts deleted file mode 100644 index 096bed9e5..000000000 --- a/web/src/hooks/queries/useHomePageQuery.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { graphql } from "src/graphql"; -import { HomePageQuery } from "src/graphql/graphql"; -export type { HomePageQuery }; - -const homePageQuery = graphql(` - query HomePage($timeframe: ID) { - disputes(first: 3) { - id - } - counters(first: 366, where: { id_gt: $timeframe }) { - id - stakedPNK - paidETH - redistributedPNK - activeJurors - cases - } - courts(first: 1000, orderBy: id, orderDirection: asc) { - id - name - numberDisputes - feeForJuror - effectiveStake - stake - } - } -`); - -export const useHomePageQuery = (timeframe: number) => { - const isEnabled = timeframe !== undefined; - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery({ - queryKey: [`homePageQuery${timeframe}`], - enabled: isEnabled, - queryFn: async () => { - const data = await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: homePageQuery, - variables: { timeframe: timeframe.toString() }, - }); - return data; - }, - }); -}; diff --git a/web/src/hooks/queries/useJurorStakeDetailsQuery.ts b/web/src/hooks/queries/useJurorStakeDetailsQuery.ts deleted file mode 100644 index 21fdc3d69..000000000 --- a/web/src/hooks/queries/useJurorStakeDetailsQuery.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { REFETCH_INTERVAL, STALE_TIME } from "consts/index"; -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { graphql } from "src/graphql"; -import { JurorStakeDetailsQuery } from "src/graphql/graphql"; -export type { JurorStakeDetailsQuery }; - -const jurorStakeDetailsQuery = graphql(` - query JurorStakeDetails($userId: String) { - jurorTokensPerCourts(where: { juror: $userId }) { - court { - id - name - } - effectiveStake - staked - locked - } - } -`); - -export const useJurorStakeDetailsQuery = (userId?: string) => { - const isEnabled = userId !== undefined; - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<JurorStakeDetailsQuery>({ - queryKey: [`jurorStakeDetails${userId}`], - enabled: isEnabled, - refetchInterval: REFETCH_INTERVAL, - staleTime: STALE_TIME, - queryFn: async () => - await graphqlBatcher.fetch({ id: crypto.randomUUID(), document: jurorStakeDetailsQuery, variables: { userId } }), - }); -}; diff --git a/web/src/hooks/queries/useJurorsByCoherenceScore.ts b/web/src/hooks/queries/useJurorsByCoherenceScore.ts deleted file mode 100644 index 9bbce4f86..000000000 --- a/web/src/hooks/queries/useJurorsByCoherenceScore.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { useGraphqlBatcher } from "context/GraphqlBatcher"; -import { graphql } from "src/graphql"; -import { JurorsByCoherenceScoreQuery } from "src/graphql/graphql"; - -const jurorsByCoherenceScoreQuery = graphql(` - query JurorsByCoherenceScore( - $skip: Int - $first: Int - $orderBy: User_orderBy - $orderDirection: OrderDirection - $search: String - ) { - users( - first: $first - skip: $skip - orderBy: $orderBy - orderDirection: $orderDirection - where: { totalResolvedVotes_gt: 0, userAddress_contains: $search } - ) { - id - coherenceScore - totalCoherentVotes - totalResolvedVotes - totalResolvedDisputes - } - } -`); - -export const useJurorsByCoherenceScore = ( - skip = 0, - first = 20, - orderBy: string, - orderDirection: string, - search = "" -) => { - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<JurorsByCoherenceScoreQuery>({ - queryKey: ["JurorsByCoherenceScore", skip, first, orderBy, orderDirection, search], - staleTime: Infinity, - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: jurorsByCoherenceScoreQuery, - variables: { skip, first, orderBy, orderDirection, search: search.toLowerCase() }, - }), - }); -}; diff --git a/web/src/hooks/queries/useLabelInfoQuery.ts b/web/src/hooks/queries/useLabelInfoQuery.ts deleted file mode 100644 index f34cc8f56..000000000 --- a/web/src/hooks/queries/useLabelInfoQuery.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { graphql } from "src/graphql"; -import { LabelInfoQuery } from "src/graphql/graphql"; - -const labelQuery = graphql(` - query LabelInfo($address: String, $disputeID: ID!) { - dispute(id: $disputeID) { - period - - shifts(where: { juror: $address }) { - ethAmount - pnkAmount - } - rounds { - drawnJurors(where: { juror: $address }, first: 1) { - vote { - ... on ClassicVote { - choice - } - } - } - } - disputeKitDispute { - localRounds { - ... on ClassicRound { - contributions(where: { contributor: $address }) { - amount - rewardAmount - } - } - } - } - } - } -`); - -export const useLabelInfoQuery = (address?: string | null, disputeID?: string) => { - const isEnabled = !!(address && disputeID); - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<LabelInfoQuery>({ - queryKey: [`labelQuery${[address, disputeID]}`], - enabled: isEnabled, - staleTime: 60000, - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: labelQuery, - variables: { address, disputeID }, - }), - }); -}; diff --git a/web/src/hooks/queries/usePolicyRegistryEvent.ts b/web/src/hooks/queries/usePolicyRegistryEvent.ts deleted file mode 100644 index 54a0239a6..000000000 --- a/web/src/hooks/queries/usePolicyRegistryEvent.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { getContract } from "viem"; -import { usePublicClient } from "wagmi"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { policyRegistryConfig } from "hooks/contracts/generated"; -import { isUndefined } from "utils/index"; - -export const usePolicyRegistryEvent = (courtID?: string | number) => { - const publicClient = usePublicClient(); - const policyRegistry = getContract({ - abi: policyRegistryConfig.abi, - address: policyRegistryConfig.address[DEFAULT_CHAIN], - client: { - public: publicClient, - }, - }); - const isEnabled = !isUndefined(policyRegistry) && !isUndefined(courtID); - - return useQuery({ - queryKey: [`PolicyRegistry${courtID}`], - enabled: isEnabled, - staleTime: Infinity, - queryFn: async () => { - if (policyRegistry && courtID) { - const policyFilter = await policyRegistry.createEventFilter.PolicyUpdate({ - _courtID: BigInt(courtID), - }); - const policyUpdateEvents = await publicClient.getFilterLogs({ - filter: policyFilter, - }); - return policyUpdateEvents[0]; - } else throw Error; - }, - }); -}; diff --git a/web/src/hooks/queries/usePopulatedDisputeData.ts b/web/src/hooks/queries/usePopulatedDisputeData.ts deleted file mode 100644 index 853d8acb3..000000000 --- a/web/src/hooks/queries/usePopulatedDisputeData.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { HttpRequestError, RpcError } from "viem"; - -import { executeActions } from "@kleros/kleros-sdk/src/dataMappings/executeActions"; -import { DisputeDetails } from "@kleros/kleros-sdk/src/dataMappings/utils/disputeDetailsTypes"; -import { populateTemplate } from "@kleros/kleros-sdk/src/dataMappings/utils/populateTemplate"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { useGraphqlBatcher } from "context/GraphqlBatcher"; -import { debounceErrorToast } from "utils/debounceErrorToast"; -import { isUndefined } from "utils/index"; - -import { graphql } from "src/graphql"; - -import { useDisputeDetailsQuery } from "./useDisputeDetailsQuery"; - -const disputeTemplateQuery = graphql(` - query DisputeTemplate($id: ID!) { - disputeTemplate(id: $id) { - id - templateTag - templateData - templateDataMappings - } - } -`); - -export const usePopulatedDisputeData = (disputeID?: string, arbitrableAddress?: `0x${string}`) => { - const { data: disputeData } = useDisputeDetailsQuery(disputeID); - const { graphqlBatcher } = useGraphqlBatcher(); - const isEnabled = - !isUndefined(disputeID) && - !isUndefined(disputeData) && - !isUndefined(disputeData?.dispute) && - !isUndefined(disputeData.dispute?.arbitrableChainId) && - !isUndefined(disputeData.dispute?.externalDisputeId) && - !isUndefined(disputeData.dispute?.templateId); - - return useQuery<DisputeDetails>({ - queryKey: [`DisputeTemplate${disputeID}${arbitrableAddress}${disputeData?.dispute?.externalDisputeId}`], - enabled: isEnabled, - staleTime: Infinity, - queryFn: async () => { - if (isEnabled) { - try { - const { disputeTemplate } = await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: disputeTemplateQuery, - variables: { id: disputeData.dispute?.templateId.toString() }, - isDisputeTemplate: true, - chainId: DEFAULT_CHAIN, - }); - - const templateData = disputeTemplate?.templateData; - const dataMappings = disputeTemplate?.templateDataMappings; - - const initialContext = { - disputeID: disputeID, - arbitrableAddress: arbitrableAddress, - arbitrableChainID: disputeData.dispute?.arbitrableChainId, - graphApiKey: import.meta.env.REACT_APP_GRAPH_API_KEY, - alchemyApiKey: import.meta.env.ALCHEMY_API_KEY, - externalDisputeID: disputeData.dispute?.externalDisputeId, - }; - - const data = dataMappings ? await executeActions(JSON.parse(dataMappings), initialContext) : {}; - const disputeDetails = populateTemplate(templateData, data); - - return disputeDetails; - } catch (error) { - if (error instanceof HttpRequestError || error instanceof RpcError) { - debounceErrorToast("RPC failed!, Please avoid voting."); - throw Error; - } - - return {} as DisputeDetails; - } - } else throw Error; - }, - }); -}; diff --git a/web/src/hooks/queries/useRoundDetailsQuery.ts b/web/src/hooks/queries/useRoundDetailsQuery.ts deleted file mode 100644 index acb90b70d..000000000 --- a/web/src/hooks/queries/useRoundDetailsQuery.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { REFETCH_INTERVAL, STALE_TIME } from "consts/index"; -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { graphql } from "src/graphql"; -import { RoundDetailsQuery } from "src/graphql/graphql"; -import { isUndefined } from "src/utils"; - -const roundDetailsQuery = graphql(` - query RoundDetails($roundID: ID!) { - round(id: $roundID) { - court { - id - } - nbVotes - disputeKit { - id - } - dispute { - disputeKitDispute { - ... on ClassicDispute { - extraData - } - } - } - } - } -`); - -export const useRoundDetailsQuery = (disputeId?: string, roundIndex?: number) => { - const isEnabled = !isUndefined(disputeId) && !isUndefined(roundIndex); - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<RoundDetailsQuery>({ - queryKey: [`roundDetailsQuery${disputeId}-${roundIndex}`], - enabled: isEnabled, - refetchInterval: REFETCH_INTERVAL, - staleTime: STALE_TIME, - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: roundDetailsQuery, - variables: { roundID: `${disputeId}-${roundIndex}` }, - }), - }); -}; diff --git a/web/src/hooks/queries/useSupportedDisputeKits.ts b/web/src/hooks/queries/useSupportedDisputeKits.ts deleted file mode 100644 index 349df2e22..000000000 --- a/web/src/hooks/queries/useSupportedDisputeKits.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { graphql } from "src/graphql"; -import { SupportedDisputeKitsQuery } from "src/graphql/graphql"; - -const supportedDisputeKitsQuery = graphql(` - query SupportedDisputeKits($id: ID!) { - court(id: $id) { - supportedDisputeKits { - id - address - } - } - } -`); - -export const useSupportedDisputeKits = (courtId?: string) => { - const { graphqlBatcher } = useGraphqlBatcher(); - return useQuery<SupportedDisputeKitsQuery>({ - enabled: !!courtId, - queryKey: ["SupportedDisputeKits", courtId], - staleTime: Infinity, - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: supportedDisputeKitsQuery, - variables: { id: courtId }, - }), - }); -}; diff --git a/web/src/hooks/queries/useTopStakedJurorsByCourt.ts b/web/src/hooks/queries/useTopStakedJurorsByCourt.ts deleted file mode 100644 index 8784f0b79..000000000 --- a/web/src/hooks/queries/useTopStakedJurorsByCourt.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { useGraphqlBatcher } from "context/GraphqlBatcher"; -import { graphql } from "src/graphql"; -import { TopStakedJurorsByCourtQuery, OrderDirection } from "src/graphql/graphql"; - -const topStakedJurorsByCourtQuery = graphql(` - query TopStakedJurorsByCourt( - $courtId: ID! - $skip: Int - $first: Int - $orderBy: JurorTokensPerCourt_orderBy - $orderDirection: OrderDirection - $search: String - ) { - jurorTokensPerCourts( - where: { court_: { id: $courtId }, effectiveStake_gt: 0, juror_: { userAddress_contains_nocase: $search } } - skip: $skip - first: $first - orderBy: $orderBy - orderDirection: $orderDirection - ) { - court { - id - } - juror { - id - userAddress - } - effectiveStake - } - } -`); - -export const useTopStakedJurorsByCourt = ( - courtId: string, - skip: number, - first: number, - orderBy: string, - orderDirection: OrderDirection, - search = "" -) => { - const { graphqlBatcher } = useGraphqlBatcher(); - return useQuery<TopStakedJurorsByCourtQuery>({ - queryKey: ["TopStakedJurorsByCourt", courtId, skip, first, orderBy, orderDirection, search], - staleTime: 10 * 60 * 1000, - queryFn: () => - graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: topStakedJurorsByCourtQuery, - variables: { - courtId, - skip, - first, - orderBy, - orderDirection, - search: search.toLowerCase(), - }, - }), - }); -}; diff --git a/web/src/hooks/queries/useTotalLeaderboardJurors.ts b/web/src/hooks/queries/useTotalLeaderboardJurors.ts deleted file mode 100644 index ff2cd8ea9..000000000 --- a/web/src/hooks/queries/useTotalLeaderboardJurors.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { graphql } from "src/graphql"; -import { TotalLeaderboardJurorsQuery } from "src/graphql/graphql"; -export type { TotalLeaderboardJurorsQuery }; - -const totalLeaderboardJurorsQuery = graphql(` - query TotalLeaderboardJurors($id: ID!) { - counter(id: $id) { - totalLeaderboardJurors - } - } -`); - -export const useTotalLeaderboardJurors = () => { - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<TotalLeaderboardJurorsQuery>({ - queryKey: [`TotalLeaderboardJurors`], - staleTime: Infinity, - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: totalLeaderboardJurorsQuery, - variables: { - id: 0, - }, - }), - }); -}; diff --git a/web/src/hooks/queries/useUser.ts b/web/src/hooks/queries/useUser.ts deleted file mode 100644 index b03090916..000000000 --- a/web/src/hooks/queries/useUser.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { Address } from "viem"; - -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { sanitizeFilter } from "utils/sanitizeFilter"; -import { STALE_TIME } from "src/consts"; -import { graphql } from "src/graphql"; -import { UserQuery, Dispute_Filter, UserDisputeFilterQuery, UserDetailsFragment } from "src/graphql/graphql"; -export type { UserQuery, UserDetailsFragment }; - -export const userFragment = graphql(` - fragment UserDetails on User { - totalDisputes - totalResolvedDisputes - totalAppealingDisputes - totalCoherentVotes - totalResolvedVotes - coherenceScore - tokens { - court { - id - name - } - } - shifts { - pnkAmount - ethAmount - } - } -`); - -const userQuery = graphql(` - query User($address: ID!) { - user(id: $address) { - disputes(orderBy: lastPeriodChange) { - id - } - ...UserDetails - } - } -`); - -const userQueryDisputeFilter = graphql(` - query UserDisputeFilter($address: ID!, $where: Dispute_filter) { - user(id: $address) { - disputes(orderBy: lastPeriodChange, where: $where) { - id - } - ...UserDetails - } - } -`); - -export const useUserQuery = (address?: Address, where?: Dispute_Filter) => { - const sanitizedWhere = sanitizeFilter(where); - const isEnabled = address !== undefined; - const query = sanitizedWhere ? userQueryDisputeFilter : userQuery; - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<UserQuery | UserDisputeFilterQuery>({ - queryKey: ["userQuery", address?.toLowerCase(), sanitizedWhere], - enabled: isEnabled, - staleTime: STALE_TIME, - queryFn: async () => - await graphqlBatcher.fetch({ - id: crypto.randomUUID(), - document: query, - variables: { address: address?.toLowerCase(), where: sanitizedWhere }, - }), - }); -}; diff --git a/web/src/hooks/queries/useVotingHistory.ts b/web/src/hooks/queries/useVotingHistory.ts deleted file mode 100644 index cdebd9186..000000000 --- a/web/src/hooks/queries/useVotingHistory.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { REFETCH_INTERVAL, STALE_TIME } from "consts/index"; -import { useGraphqlBatcher } from "context/GraphqlBatcher"; - -import { graphql } from "src/graphql"; -import { VotingHistoryQuery } from "src/graphql/graphql"; -export type { VotingHistoryQuery }; - -const votingHistoryQuery = graphql(` - query VotingHistory($disputeID: ID!) { - dispute(id: $disputeID) { - id - createdAt - transactionHash - ruled - rounds { - nbVotes - jurorRewardsDispersed - court { - id - name - } - timeline - drawnJurors { - juror { - id - } - vote { - ... on ClassicVote { - commited - justification { - transactionHash - timestamp - choice - reference - } - } - } - } - } - disputeKitDispute { - localRounds { - ... on ClassicRound { - winningChoice - totalVoted - } - } - } - } - } -`); - -export const useVotingHistory = (disputeID?: string) => { - const isEnabled = disputeID !== undefined; - const { graphqlBatcher } = useGraphqlBatcher(); - - return useQuery<VotingHistoryQuery>({ - queryKey: [`VotingHistory${disputeID}`], - enabled: isEnabled, - refetchInterval: REFETCH_INTERVAL, - staleTime: STALE_TIME, - queryFn: async () => - await graphqlBatcher.fetch({ id: crypto.randomUUID(), document: votingHistoryQuery, variables: { disputeID } }), - }); -}; diff --git a/web/src/hooks/useClassicAppealContext.tsx b/web/src/hooks/useClassicAppealContext.tsx deleted file mode 100644 index 85e037723..000000000 --- a/web/src/hooks/useClassicAppealContext.tsx +++ /dev/null @@ -1,188 +0,0 @@ -import React, { useMemo, createContext, useContext, useState } from "react"; - -import { useParams } from "react-router-dom"; - -import { ONE_BASIS_POINT } from "consts/index"; -import { Periods } from "consts/periods"; -import { usePopulatedDisputeData } from "hooks/queries/usePopulatedDisputeData"; -import { useCountdown } from "hooks/useCountdown"; -import { getLocalRounds } from "utils/getLocalRounds"; -import { isUndefined } from "utils/index"; - -import { useAppealCost } from "queries/useAppealCost"; -import { useClassicAppealQuery, ClassicAppealQuery } from "queries/useClassicAppealQuery"; -import { useDisputeKitClassicMultipliers } from "queries/useDisputeKitClassicMultipliers"; -import { Answer, DisputeDetails } from "@kleros/kleros-sdk"; - -type Option = Answer & { paidFee?: string; funded?: boolean }; -interface ICountdownContext { - loserSideCountdown?: number; - winnerSideCountdown?: number; - isLoading?: boolean; -} - -const CountdownContext = createContext<ICountdownContext>({}); - -const OptionsContext = createContext<Option[] | undefined>(undefined); - -interface ISelectedOptionContext { - selectedOption: Option | undefined; - setSelectedOption: (arg0: Option) => void; -} -const SelectedOptionContext = createContext<ISelectedOptionContext>({ - selectedOption: undefined, - - setSelectedOption: () => {}, -}); - -interface IFundingContext { - winningChoice: string | undefined; - loserRequiredFunding: bigint | undefined; - winnerRequiredFunding: bigint | undefined; - fundedChoices: string[] | undefined; -} - -const FundingContext = createContext<IFundingContext>({ - winningChoice: undefined, - loserRequiredFunding: undefined, - winnerRequiredFunding: undefined, - fundedChoices: undefined, -}); - -export const ClassicAppealProvider: React.FC<{ - children: React.ReactNode; -}> = ({ children }) => { - const { id } = useParams(); - const { data } = useClassicAppealQuery(id); - const dispute = data?.dispute; - const winningChoice = getWinningChoice(data?.dispute); - const { data: appealCost } = useAppealCost(id); - const arbitrable = data?.dispute?.arbitrated.id; - const { data: disputeDetails } = usePopulatedDisputeData(id, arbitrable as `0x${string}`); - const { data: multipliers } = useDisputeKitClassicMultipliers(); - - const [selectedOption, setSelectedOption] = useState<Option>(); - - const options = useMemo(() => getOptions(disputeDetails, data?.dispute), [disputeDetails, data]); - - const loserSideCountdown = useLoserSideCountdown( - dispute?.lastPeriodChange, - dispute?.court.timesPerPeriod[Periods.appeal], - multipliers?.loser_appeal_period_multiplier.toString() - ); - - const winnerSideCountdown = useWinnerSideCountdown( - dispute?.lastPeriodChange, - dispute?.court.timesPerPeriod[Periods.appeal] - ); - - const isLoading = useMemo(() => isUndefined(dispute) || isUndefined(multipliers), [dispute, multipliers]); - - const { loserRequiredFunding, winnerRequiredFunding } = useMemo( - () => ({ - loserRequiredFunding: getRequiredFunding(appealCost, multipliers?.loser_stake_multiplier), - winnerRequiredFunding: getRequiredFunding(appealCost, multipliers?.winner_stake_multiplier), - }), - [appealCost, multipliers] - ); - const fundedChoices = getFundedChoices(data?.dispute); - - return ( - <CountdownContext.Provider - value={useMemo( - () => ({ loserSideCountdown, winnerSideCountdown, isLoading }), - [loserSideCountdown, winnerSideCountdown, isLoading] - )} - > - <SelectedOptionContext.Provider - value={useMemo(() => ({ selectedOption, setSelectedOption }), [selectedOption, setSelectedOption])} - > - <FundingContext.Provider - value={useMemo( - () => ({ - winningChoice, - loserRequiredFunding, - winnerRequiredFunding, - fundedChoices, - }), - [winningChoice, loserRequiredFunding, winnerRequiredFunding, fundedChoices] - )} - > - <OptionsContext.Provider value={options}>{children}</OptionsContext.Provider> - </FundingContext.Provider> - </SelectedOptionContext.Provider> - </CountdownContext.Provider> - ); -}; - -export const useCountdownContext = () => useContext(CountdownContext); -export const useSelectedOptionContext = () => useContext(SelectedOptionContext); -export const useFundingContext = () => useContext(FundingContext); -export const useOptionsContext = () => useContext(OptionsContext); - -const getCurrentLocalRound = (dispute?: ClassicAppealQuery["dispute"]) => { - if (!dispute) return undefined; - - const period = dispute.period; - const currentLocalRoundIndex = dispute.disputeKitDispute.at(-1)?.currentLocalRoundIndex; - const adjustedRoundIndex = ["appeal", "execution"].includes(period) - ? currentLocalRoundIndex - : currentLocalRoundIndex - 1; - - return getLocalRounds(dispute.disputeKitDispute)[adjustedRoundIndex]; -}; - -const getOptions = (dispute?: DisputeDetails, classicDispute?: ClassicAppealQuery["dispute"]) => { - if (!dispute || Object.keys(dispute).length === 0) return []; - const currentLocalRound = getCurrentLocalRound(classicDispute); - const classicAnswers = currentLocalRound?.answers; - - const options = dispute.answers?.map((answer) => { - const classicAnswer = classicAnswers?.find((classicAnswer) => BigInt(classicAnswer.answerId) == BigInt(answer.id)); - // converting hexadecimal id to stringified bigint to match id fomr subgraph - return { - ...answer, - id: BigInt(answer.id).toString(), - paidFee: classicAnswer?.paidFee ?? "0", - funded: classicAnswer?.funded ?? false, - }; - }); - return options; -}; - -const getFundedChoices = (dispute?: ClassicAppealQuery["dispute"]) => { - const currentLocalRound = getCurrentLocalRound(dispute); - return currentLocalRound?.fundedChoices; -}; - -const getWinningChoice = (dispute?: ClassicAppealQuery["dispute"]) => { - const currentLocalRound = getCurrentLocalRound(dispute); - return currentLocalRound?.winningChoice; -}; - -export const getRequiredFunding = (appealCost = 0n, stake_multiplier = 0n): bigint => - appealCost + (stake_multiplier * appealCost) / ONE_BASIS_POINT; - -function useLoserSideCountdown(lastPeriodChange = "0", appealPeriodDuration = "0", loserTimeMultiplier = "0") { - const deadline = useMemo( - () => getDeadline(lastPeriodChange, appealPeriodDuration, loserTimeMultiplier), - [lastPeriodChange, appealPeriodDuration, loserTimeMultiplier] - ); - return useCountdown(deadline); -} - -function useWinnerSideCountdown(lastPeriodChange = "0", appealPeriodDuration = "0") { - const deadline = useMemo( - () => Number(BigInt(lastPeriodChange) + BigInt(appealPeriodDuration)), - [lastPeriodChange, appealPeriodDuration] - ); - return useCountdown(deadline); -} - -const getDeadline = (lastPeriodChange: string, appealPeriodDuration: string, loserTimeMultiplier: string): number => { - const parsedLastPeriodChange = BigInt(lastPeriodChange); - const parsedAppealPeriodDuration = BigInt(appealPeriodDuration); - const parsedLoserTimeMultiplier = BigInt(loserTimeMultiplier); - const loserAppealPeriodDuration = (parsedAppealPeriodDuration * parsedLoserTimeMultiplier) / ONE_BASIS_POINT; - return Number(loserAppealPeriodDuration + parsedLastPeriodChange); -}; diff --git a/web/src/hooks/useCoinPrice.tsx b/web/src/hooks/useCoinPrice.tsx deleted file mode 100644 index 1fc6aff61..000000000 --- a/web/src/hooks/useCoinPrice.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -const fetchCoinPrices = async (...coinIds) => { - const response = await fetch(`https://coins.llama.fi/prices/current/${coinIds.join(",")}?searchWidth=1h`); - const data = await response.json(); - return data.coins; -}; - -export type Prices = { - [coinId: string]: { price: number }; -}; - -export const useCoinPrice = (coinIds: string[]) => { - const isEnabled = coinIds !== undefined; - - const { data: prices, isError } = useQuery<Prices>({ - queryKey: [`coinPrice${coinIds}`], - enabled: isEnabled, - queryFn: async () => fetchCoinPrices(coinIds), - }); - return { - prices, - isError, - }; -}; diff --git a/web/src/hooks/useCountdown.ts b/web/src/hooks/useCountdown.ts deleted file mode 100644 index ef11b817c..000000000 --- a/web/src/hooks/useCountdown.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { useState, useEffect } from "react"; - -import { getTimeLeft } from "utils/date"; -import { isUndefined } from "utils/index"; - -export function useCountdown(deadline?: number): number | undefined { - const [counter, setCounter] = useState<number | undefined>(); - useEffect(() => { - if (typeof deadline !== "undefined") { - const timeLeft = getTimeLeft(deadline); - setCounter(timeLeft); - } - }, [deadline]); - useEffect(() => { - if (!isUndefined(counter) && counter > 0) { - const timeout = setTimeout(() => setCounter(counter - 1), 1000); - return () => clearTimeout(timeout); - } else return; - }, [counter]); - return counter; -} diff --git a/web/src/hooks/useDisputeKitAddresses.ts b/web/src/hooks/useDisputeKitAddresses.ts deleted file mode 100644 index 9a58d7fe8..000000000 --- a/web/src/hooks/useDisputeKitAddresses.ts +++ /dev/null @@ -1,163 +0,0 @@ -import { useEffect, useState } from "react"; - -import { useChainId } from "wagmi"; - -import { DisputeKits } from "consts/index"; - -interface UseDisputeKitAddressesParams { - disputeKitAddress?: string; -} - -interface UseDisputeKitAddressesAllReturn { - availableDisputeKits: Record<string, DisputeKits>; - isLoading: boolean; - error: string | null; -} - -const DISPUTE_KIT_CONFIG = { - [DisputeKits.Classic]: "disputeKitClassicAddress", - [DisputeKits.Shutter]: "disputeKitShutterAddress", - [DisputeKits.Gated]: "disputeKitGatedAddress", - [DisputeKits.GatedShutter]: "disputeKitGatedShutterAddress", -} as const; - -/** - * Hook to get dispute kit name based on address - * @param disputeKitAddress - Optional specific dispute kit address to identify - * @returns The human-readable name of the dispute kit and loading state - */ -export const useDisputeKitAddresses = ({ disputeKitAddress }: UseDisputeKitAddressesParams = {}) => { - const chainId = useChainId(); - const [disputeKitName, setDisputeKitName] = useState<DisputeKits | undefined>(undefined); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState<string | null>(null); - - useEffect(() => { - const loadDisputeKitName = async () => { - try { - setIsLoading(true); - setError(null); - - // If no dispute kit address is provided, we can't determine the type - if (!disputeKitAddress) { - setDisputeKitName(undefined); - setIsLoading(false); - return; - } - - // If no chainId, we can't look up from generated contracts - if (!chainId) { - setDisputeKitName(undefined); - setIsLoading(false); - return; - } - - // Dynamic import to handle cases where generated contracts might not be available - try { - const generatedContracts = await import("hooks/contracts/generated"); - - // Check each dispute kit to see if the address matches - for (const [humanName, contractKey] of Object.entries(DISPUTE_KIT_CONFIG)) { - const addressMapping = generatedContracts[contractKey as keyof typeof generatedContracts]; - - if (addressMapping && typeof addressMapping === "object" && chainId in addressMapping) { - const contractAddress = addressMapping[chainId as keyof typeof addressMapping] as string; - if ( - contractAddress && - typeof contractAddress === "string" && - contractAddress.toLowerCase() === disputeKitAddress.toLowerCase() - ) { - setDisputeKitName(humanName as DisputeKits); - return; - } - } - } - - // If no address matches, return undefined - setDisputeKitName(undefined); - } catch { - // If we can't import generated contracts, return undefined - setDisputeKitName(undefined); - } - } catch (err) { - console.error("Failed to determine dispute kit name:", err); - setError("Failed to determine dispute kit type"); - setDisputeKitName(undefined); - } finally { - setIsLoading(false); - } - }; - - loadDisputeKitName(); - }, [chainId, disputeKitAddress]); - - return { - disputeKitName, - isLoading, - error, - }; -}; - -/** - * Hook to get all dispute kit addresses for the current chain - * @returns All dispute kit addresses, loading state, and error state - */ -export const useDisputeKitAddressesAll = (): UseDisputeKitAddressesAllReturn => { - const chainId = useChainId(); - const [availableDisputeKits, setAvailableDisputeKits] = useState<Record<string, DisputeKits>>({}); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState<string | null>(null); - - useEffect(() => { - const loadAllDisputeKitAddresses = async () => { - try { - setIsLoading(true); - setError(null); - - // If no chainId, we can't look up from generated contracts - if (!chainId) { - setAvailableDisputeKits({}); - setIsLoading(false); - return; - } - - // Dynamic import to handle cases where generated contracts might not be available - try { - const generatedContracts = await import("hooks/contracts/generated"); - const newAvailableDisputeKits: Record<string, DisputeKits> = {}; - - // Iterate through all dispute kits and get their addresses - for (const [humanName, contractKey] of Object.entries(DISPUTE_KIT_CONFIG)) { - const addressMapping = generatedContracts[contractKey as keyof typeof generatedContracts]; - - if (addressMapping && typeof addressMapping === "object" && chainId in addressMapping) { - const contractAddress = addressMapping[chainId as keyof typeof addressMapping] as string; - if (contractAddress && typeof contractAddress === "string") { - newAvailableDisputeKits[contractAddress.toLowerCase()] = humanName as DisputeKits; - } - } - } - - setAvailableDisputeKits(newAvailableDisputeKits); - } catch { - // If we can't import generated contracts, return empty object - setAvailableDisputeKits({}); - } - } catch (err) { - console.error("Failed to load dispute kit addresses:", err); - setError("Failed to load dispute kit addresses"); - setAvailableDisputeKits({}); - } finally { - setIsLoading(false); - } - }; - - loadAllDisputeKitAddresses(); - }, [chainId]); - - return { - availableDisputeKits, - isLoading, - error, - }; -}; diff --git a/web/src/hooks/useGenesisBlock.ts b/web/src/hooks/useGenesisBlock.ts deleted file mode 100644 index 1041391fd..000000000 --- a/web/src/hooks/useGenesisBlock.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { useEffect, useState } from "react"; -import { isKlerosNeo, isKlerosUniversity, isTestnetDeployment } from "~src/consts"; - -/** - * @returns genesis block for kleros core contract - */ -const useGenesisBlock = () => { - const [genesisBlock, setGenesisBlock] = useState<number>(); - useEffect(() => { - if (isKlerosUniversity()) { - import("@kleros/kleros-v2-contracts/deployments/arbitrumSepoliaDevnet/KlerosCoreUniversity.json").then((json) => - setGenesisBlock(json.receipt.blockNumber) - ); - } else if (isKlerosNeo()) { - import("@kleros/kleros-v2-contracts/deployments/arbitrum/KlerosCoreNeo.json").then((json) => - setGenesisBlock(json.receipt.blockNumber) - ); - } else if (isTestnetDeployment()) { - import("@kleros/kleros-v2-contracts/deployments/arbitrumSepolia/KlerosCore.json").then((json) => - setGenesisBlock(json.receipt.blockNumber) - ); - } else { - import("@kleros/kleros-v2-contracts/deployments/arbitrumSepoliaDevnet/KlerosCore.json").then((json) => - setGenesisBlock(json.receipt.blockNumber) - ); - } - }, []); - - return genesisBlock; -}; - -export default useGenesisBlock; diff --git a/web/src/hooks/useHomePageContext.tsx b/web/src/hooks/useHomePageContext.tsx deleted file mode 100644 index 2b2f493ab..000000000 --- a/web/src/hooks/useHomePageContext.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React, { createContext, useContext } from "react"; - -import { useHomePageQuery, HomePageQuery } from "queries/useHomePageQuery"; -export type { HomePageQuery }; - -interface IContext { - data: HomePageQuery | undefined; - error: null | any; - isValidating: boolean; -} - -export type HomePageQueryDataPoints = keyof HomePageQuery["counters"][number]; - -const Context = createContext<IContext>({ - data: undefined, - error: null, - isValidating: false, -}); - -export const HomePageProvider: React.FC<{ - children: React.ReactNode; - timeframe: number; -}> = ({ children, timeframe }) => { - const { data, error, isValidating } = useHomePageQuery(timeframe); - return <Context.Provider value={{ data, error, isValidating }}>{children}</Context.Provider>; -}; - -export const useHomePageContext: () => IContext = () => { - return useContext(Context); -}; diff --git a/web/src/hooks/useIPFSQuery.ts b/web/src/hooks/useIPFSQuery.ts deleted file mode 100644 index fc27f5ec8..000000000 --- a/web/src/hooks/useIPFSQuery.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; - -import { getIpfsUrl } from "utils/getIpfsUrl"; -import { isUndefined } from "utils/index"; - -export const useIPFSQuery = (ipfsPath?: string) => { - const isEnabled = !isUndefined(ipfsPath); - return useQuery({ - queryKey: [`IPFS${ipfsPath}`], - enabled: isEnabled, - staleTime: Infinity, - queryFn: async () => { - if (isEnabled) { - return fetch(getIpfsUrl(ipfsPath)).then(async (res) => await res.json()); - } - return undefined; - }, - }); -}; diff --git a/web/src/hooks/useIsDesktop.tsx b/web/src/hooks/useIsDesktop.tsx deleted file mode 100644 index 1ff105d51..000000000 --- a/web/src/hooks/useIsDesktop.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { useMemo } from "react"; - -import { useWindowSize } from "react-use"; - -import { BREAKPOINT_LANDSCAPE } from "styles/landscapeStyle"; - -const useIsDesktop = () => { - const { width } = useWindowSize(); - return useMemo(() => width > BREAKPOINT_LANDSCAPE, [width]); -}; - -export default useIsDesktop; diff --git a/web/src/hooks/useLocalStorage.ts b/web/src/hooks/useLocalStorage.ts deleted file mode 100644 index ae42cadcb..000000000 --- a/web/src/hooks/useLocalStorage.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { useState } from "react"; - -export function useLocalStorage<T>(keyName: string, defaultValue: T) { - const [storedValue, setStoredValue] = useState(() => { - try { - const value = window.localStorage.getItem(keyName); - return value ? JSON.parse(value) : defaultValue; - } catch (err) { - return defaultValue; - } - }); - - const setValue = (newValue: T) => { - try { - window.localStorage.setItem(keyName, JSON.stringify(newValue)); - } finally { - setStoredValue(newValue); - } - }; - - return [storedValue, setValue]; -} diff --git a/web/src/hooks/useLockOverlayScroll.ts b/web/src/hooks/useLockOverlayScroll.ts deleted file mode 100644 index 831a0edaf..000000000 --- a/web/src/hooks/useLockOverlayScroll.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { useContext, useEffect, useCallback } from "react"; - -import { OverlayScrollContext } from "context/OverlayScrollContext"; - -export const useLockOverlayScroll = (shouldLock: boolean) => { - const osInstanceRef = useContext(OverlayScrollContext); - - const lockScroll = useCallback(() => { - const osInstance = osInstanceRef?.current?.osInstance(); - if (osInstance) { - osInstance.options({ overflow: { x: "hidden", y: "hidden" } }); - } - }, [osInstanceRef]); - - const unlockScroll = useCallback(() => { - const osInstance = osInstanceRef?.current?.osInstance(); - if (osInstance) { - osInstance.options({ overflow: { x: "scroll", y: "scroll" } }); - } - }, [osInstanceRef]); - - useEffect(() => { - if (shouldLock) { - lockScroll(); - } else { - unlockScroll(); - } - }, [shouldLock, lockScroll, unlockScroll]); -}; diff --git a/web/src/hooks/useNavigateAndScrollTop.ts b/web/src/hooks/useNavigateAndScrollTop.ts deleted file mode 100644 index 0929bfa5b..000000000 --- a/web/src/hooks/useNavigateAndScrollTop.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { useContext } from "react"; -import { useNavigate } from "react-router-dom"; -import { OverlayScrollContext } from "context/OverlayScrollContext"; - -export const useNavigateAndScrollTop = () => { - const navigate = useNavigate(); - const osInstanceRef = useContext(OverlayScrollContext); - - const navigateAndScrollTop = (path) => { - navigate(path); - osInstanceRef?.current?.osInstance().elements().viewport.scroll({ top: 0 }); - }; - - return navigateAndScrollTop; -}; diff --git a/web/src/hooks/usePNKData.tsx b/web/src/hooks/usePNKData.tsx deleted file mode 100644 index 5bee1265c..000000000 --- a/web/src/hooks/usePNKData.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { useAccount } from "wagmi"; - -import { DEFAULT_CHAIN } from "consts/chains"; - -import { REFETCH_INTERVAL } from "src/consts"; -import { isUndefined } from "src/utils"; - -import { - klerosCoreAddress, - useReadPnkAllowance, - useReadPnkBalanceOf, - useReadSortitionModuleGetJurorBalance, -} from "./contracts/generated"; - -interface UsePnkDataParams { - courtId?: string; -} - -/** - * @description hook to provide user's pnk data. (pnk balance, pnk allowance, jurorBalance for provided courtId) - * @param param0 optional court Id to fetch juror balance for. Defaults to 0 - */ -export const usePnkData = ({ courtId = "0" }: UsePnkDataParams) => { - const { address } = useAccount(); - const queryConfig = { - enabled: !isUndefined(address), - refetchInterval: REFETCH_INTERVAL, - }; - - const { data: balance } = useReadPnkBalanceOf({ - query: queryConfig, - args: [address!], - }); - - const { data: jurorBalance } = useReadSortitionModuleGetJurorBalance({ - query: queryConfig, - args: [address ?? "0x", BigInt(courtId)], - }); - - const { data: allowance, refetch: refetchAllowance } = useReadPnkAllowance({ - query: queryConfig, - args: [address ?? "0x", klerosCoreAddress[DEFAULT_CHAIN]], - }); - - return { balance, jurorBalance, allowance, refetchAllowance }; -}; diff --git a/web/src/hooks/useParsedAmount.ts b/web/src/hooks/useParsedAmount.ts deleted file mode 100644 index 86085867a..000000000 --- a/web/src/hooks/useParsedAmount.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { useMemo } from "react"; - -import { parseUnits } from "viem"; - -export function useParsedAmount(amount: `${number}`): bigint { - return useMemo(() => parseUnits(amount, 18), [amount]); -} diff --git a/web/src/hooks/useScrollTop.ts b/web/src/hooks/useScrollTop.ts deleted file mode 100644 index 87108fd3d..000000000 --- a/web/src/hooks/useScrollTop.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { useContext } from "react"; -import { OverlayScrollContext } from "context/OverlayScrollContext"; - -export const useScrollTop = () => { - const osInstanceRef = useContext(OverlayScrollContext); - - const scrollTop = (smooth = false) => { - osInstanceRef?.current - ?.osInstance() - .elements() - .viewport.scroll({ top: 0, behavior: smooth ? "smooth" : "auto" }); - }; - - return scrollTop; -}; diff --git a/web/src/hooks/useSessionStorage.ts b/web/src/hooks/useSessionStorage.ts deleted file mode 100644 index 5cac8fb6e..000000000 --- a/web/src/hooks/useSessionStorage.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { useState } from "react"; - -export function useSessionStorage<T>(keyName: string, defaultValue: T) { - const [storedValue, setStoredValue] = useState<T>(() => { - try { - const value = window.sessionStorage.getItem(keyName); - - return value ? JSON.parse(value) : defaultValue; - } catch (err) { - return defaultValue; - } - }); - - const setValue = (newValue: T) => { - try { - window.sessionStorage.setItem(keyName, JSON.stringify(newValue)); - } finally { - setStoredValue(newValue); - } - }; - - return [storedValue, setValue] as [T, (newValue: T) => void]; -} diff --git a/web/src/hooks/useSigningAccount.tsx b/web/src/hooks/useSigningAccount.tsx deleted file mode 100644 index 3e290d661..000000000 --- a/web/src/hooks/useSigningAccount.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { useLocalStorage } from "react-use"; -import { Hex, WalletClient, keccak256 } from "viem"; -import { privateKeyToAccount } from "viem/accounts"; -import { useWalletClient } from "wagmi"; - -import messages from "consts/eip712-messages"; -import { isUndefined } from "utils/index"; - -const useSigningAccount = () => { - const { data: wallet } = useWalletClient(); - const address = wallet?.account.address; - const key = `signingAccount-${address}`; - const [signingKey, setSigningKey] = useLocalStorage<Hex>(key); - return { - signingAccount: !isUndefined(signingKey) ? privateKeyToAccount(signingKey) : undefined, - generateSigningAccount: () => (!isUndefined(wallet) ? generateSigningAccount(wallet, setSigningKey) : undefined), - }; -}; - -const generateSigningAccount = async (wallet: WalletClient, setSigningKey: (signingKey: `0x${string}`) => void) => { - if (isUndefined(wallet.account)) return; - const signature = await wallet.signTypedData(messages.signingAccount(wallet.account.address)); - const signingKey = keccak256(signature); - setSigningKey(signingKey); - return privateKeyToAccount(signingKey); -}; - -export default useSigningAccount; diff --git a/web/src/hooks/useSortitionModule.ts b/web/src/hooks/useSortitionModule.ts deleted file mode 100644 index 3cce56b38..000000000 --- a/web/src/hooks/useSortitionModule.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { REFETCH_INTERVAL } from "consts/index"; - -import { useReadSortitionModule } from "hooks/contracts/generated"; - -export const useSortitionModulePhase = () => { - // eslint-disable-next-line - // @ts-ignore - return useReadSortitionModule({ functionName: "phase", query: { refetchInterval: REFETCH_INTERVAL } }); -}; - -export const useReadSortitionModuleDelayedStakeReadIndex = () => { - return useReadSortitionModule({ - // eslint-disable-next-line - // @ts-ignore - functionName: "delayedStakeReadIndex", - query: { refetchInterval: REFETCH_INTERVAL }, - }); -}; - -export const useReadSortitionModuleDelayedStakeWriteIndex = () => { - return useReadSortitionModule({ - // eslint-disable-next-line - // @ts-ignore - functionName: "delayedStakeWriteIndex", - query: { refetchInterval: REFETCH_INTERVAL }, - }); -}; - -export const useReadSortitionModuleLastPhaseChange = () => { - return useReadSortitionModule({ - // eslint-disable-next-line - // @ts-ignore - functionName: "lastPhaseChange", - query: { refetchInterval: REFETCH_INTERVAL }, - }); -}; - -export const useReadSortitionModuleMaxDrawingTime = () => { - return useReadSortitionModule({ - // eslint-disable-next-line - // @ts-ignore - functionName: "maxDrawingTime", - query: { refetchInterval: REFETCH_INTERVAL }, - }); -}; - -export const useReadSortitionModuleMinStakingTime = () => { - return useReadSortitionModule({ - // eslint-disable-next-line - // @ts-ignore - functionName: "minStakingTime", - query: { refetchInterval: REFETCH_INTERVAL }, - }); -}; diff --git a/web/src/hooks/useSpamEvidence.ts b/web/src/hooks/useSpamEvidence.ts deleted file mode 100644 index 8b420001c..000000000 --- a/web/src/hooks/useSpamEvidence.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { gql, request } from "graphql-request"; - -import { isKlerosNeo, isKlerosUniversity, isTestnetDeployment } from "src/consts"; -import { isUndefined } from "src/utils"; - -const spamEvidenceQuery = gql` - query SpamEvidences($deployment: CourtV2Deployment!, $evidenceGroupId: String!) { - courtv2EvidenceSpamsByGroupId(deployment: $deployment, evidenceGroupId: $evidenceGroupId) { - evidenceIds - } - } -`; - -type SpamEvidences = { - courtv2EvidenceSpamsByGroupId: { evidenceIds: string[] }; -}; - -const getAtlasDeployment = () => { - if (isKlerosUniversity()) { - return "university"; - } else if (isKlerosNeo()) { - return "beta"; - } else if (isTestnetDeployment()) { - return "testnet"; - } else { - return "devnet"; - } -}; -const atlasUri = import.meta.env.REACT_APP_ATLAS_URI; - -export const useSpamEvidence = (evidenceGroupId: string) => { - const isEnabled = !isUndefined(atlasUri) && !isUndefined(evidenceGroupId); - - const variables = { deployment: getAtlasDeployment(), evidenceGroupId }; - return useQuery<SpamEvidences>({ - queryKey: [`evidenceSpamQuery`], - enabled: isEnabled, - staleTime: 60000, - queryFn: async () => await request(`${atlasUri}/graphql`, spamEvidenceQuery, variables), - }); -}; diff --git a/web/src/hooks/useStarredCases.tsx b/web/src/hooks/useStarredCases.tsx deleted file mode 100644 index eb6109306..000000000 --- a/web/src/hooks/useStarredCases.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { useMemo } from "react"; - -import { useLocalStorage } from "./useLocalStorage"; - -const useStarredCases = () => { - const initialValue = new Set<string>(); - - const [localStarredCases, setLocalStarredCases] = useLocalStorage("starredCases", Array.from(initialValue)); - - const starredCases = useMemo(() => new Set<string>(localStarredCases), [localStarredCases]); - const starredCaseIds = Array.from(starredCases.keys()); - - const starCase = (id: string) => { - if (starredCases.has(id)) starredCases.delete(id); - else starredCases.add(id); - - setLocalStarredCases(Array.from(starredCases)); - }; - - const clearAll = () => { - setLocalStarredCases(Array.from(initialValue)); - }; - return { starredCases, starredCaseIds, starCase, clearAll }; -}; - -export default useStarredCases; diff --git a/web/src/hooks/useToggleThemeContext.tsx b/web/src/hooks/useToggleThemeContext.tsx deleted file mode 100644 index 9c2017dec..000000000 --- a/web/src/hooks/useToggleThemeContext.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React, { createContext, useContext } from "react"; - -const Context = createContext<[string, () => void]>([ - "light", - () => { - // default empty-function - }, -]); - -export const ToggleThemeProvider: React.FC<{ - children: React.ReactNode; - theme: string; - toggleTheme: () => void; -}> = ({ theme, toggleTheme, children }) => { - return ( - <Context.Provider value={[theme, toggleTheme]}>{children}</Context.Provider> - ); -}; - -export const useToggleTheme: () => [string, () => void] = () => { - return useContext(Context); -}; diff --git a/web/src/hooks/useTokenAddressValidation.ts b/web/src/hooks/useTokenAddressValidation.ts deleted file mode 100644 index bb18addf0..000000000 --- a/web/src/hooks/useTokenAddressValidation.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { useEffect, useState, useMemo } from "react"; - -import { useQuery } from "@tanstack/react-query"; -import { getContract, isAddress } from "viem"; -import { usePublicClient, useChainId } from "wagmi"; - -import { isUndefined } from "utils/index"; - -const ERC1155_ABI = [ - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -const ERC20_ERC721_ABI = [ - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -interface UseTokenValidationParams { - address?: string; - enabled?: boolean; -} - -interface TokenValidationResult { - isValidating: boolean; - isValid: boolean | null; - error: string | null; -} - -/** - * Hook to validate if an address is a valid ERC20 or ERC721 token by attempting to call balanceOf(address) - * @param address The address to validate - * @param enabled Whether validation should be enabled - * @returns Validation state including loading, result, and error - */ -export const useERC20ERC721Validation = ({ - address, - enabled = true, -}: UseTokenValidationParams): TokenValidationResult => { - // We query the balance for a random non-zero address because many implementations revert on it - return useTokenValidation({ - address, - enabled, - abi: ERC20_ERC721_ABI, - contractCall: (contract) => contract.read.balanceOf(["0x0000000000000000000000000000000000001234"]), - tokenType: "ERC-20 or ERC-721", - }); -}; - -/** - * Hook to validate if an address is a valid ERC1155 token by attempting to call balanceOf(address, tokenId) - * @param address The address to validate - * @param enabled Whether validation should be enabled - * @returns Validation state including loading, result, and error - */ -export const useERC1155Validation = ({ address, enabled = true }: UseTokenValidationParams): TokenValidationResult => { - // We query the balance for a random non-zero address because many implementations revert on it - return useTokenValidation({ - address, - enabled, - abi: ERC1155_ABI, - contractCall: (contract) => contract.read.balanceOf(["0x0000000000000000000000000000000000001234", 0]), - tokenType: "ERC-1155", - }); -}; - -/** - * Generic hook for token contract validation - */ -const useTokenValidation = ({ - address, - enabled = true, - abi, - contractCall, - tokenType, -}: UseTokenValidationParams & { - abi: readonly any[]; - contractCall: (contract: any) => Promise<any>; - tokenType: string; -}): TokenValidationResult => { - const publicClient = usePublicClient(); - const chainId = useChainId(); - const [debouncedAddress, setDebouncedAddress] = useState<string>(); - - // Debounce address changes to avoid excessive network calls - useEffect(() => { - const timer = setTimeout(() => { - setDebouncedAddress(address); - }, 500); - - return () => clearTimeout(timer); - }, [address]); - - // Early validation - check format - const isValidFormat = useMemo(() => { - if (!debouncedAddress || debouncedAddress.trim() === "") return null; - return isAddress(debouncedAddress); - }, [debouncedAddress]); - - // Contract validation query - const { - data: isValidContract, - isLoading, - error, - } = useQuery({ - queryKey: [`${tokenType}-validation`, chainId, debouncedAddress], - enabled: enabled && !isUndefined(publicClient) && Boolean(isValidFormat), - staleTime: 300000, // Cache for 5 minutes - retry: 1, // Only retry once to fail faster - retryDelay: 1000, // Short retry delay - queryFn: async () => { - if (!publicClient || !debouncedAddress) { - throw new Error("Missing required dependencies"); - } - - try { - const contract = getContract({ - address: debouncedAddress as `0x${string}`, - abi, - client: publicClient, - }); - - // Execute the contract call specific to the token type - await contractCall(contract); - - return true; - } catch { - throw new Error(`Address does not implement ${tokenType} interface`); - } - }, - }); - - // Determine final validation state - const isValid = useMemo(() => { - if (!debouncedAddress || debouncedAddress.trim() === "") { - return null; - } - - if (isValidFormat === false) { - return false; - } - - if (isLoading) { - return null; // Still validating - } - - return isValidContract === true; - }, [debouncedAddress, isValidFormat, isLoading, isValidContract]); - - const validationError = useMemo(() => { - if (!debouncedAddress || debouncedAddress.trim() === "") { - return null; - } - - if (isValidFormat === false) { - return "Invalid Ethereum address format"; - } - - if (error) { - const errorMessage = error instanceof Error ? error.message : "Unknown error"; - if (errorMessage.includes("not a contract")) { - return "Address is not a contract"; - } - if (errorMessage.includes(`does not implement ${tokenType}`)) { - return `Not a valid ${tokenType} token address`; - } - return "Network error - please try again"; - } - - return null; - }, [debouncedAddress, isValidFormat, error, tokenType]); - - return { - isValidating: isLoading && enabled && !!debouncedAddress, - isValid, - error: validationError, - }; -}; diff --git a/web/src/hooks/useTransactionBatcher.tsx b/web/src/hooks/useTransactionBatcher.tsx deleted file mode 100644 index 7324fd21f..000000000 --- a/web/src/hooks/useTransactionBatcher.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { useCallback } from "react"; - -import { encodeFunctionData, type SimulateContractParameters } from "viem"; - -import { isUndefined } from "src/utils"; - -import { useSimulateTransactionBatcherBatchSend, useWriteTransactionBatcherBatchSend } from "./contracts/generated"; - -export type TransactionBatcherConfig = SimulateContractParameters[]; - -type TransactionBatcherOptions = { - // determines if simulation query is enabled - enabled: boolean; -}; - -/** - * @param configs SimulateContractParameters[] - an array of useWriteContract Parameters - * @param options TransactionBatcherOptions - an object containing options to apply to hook behaviour - * @description This takes in multiple write calls and batches them into a single transaction - * @example useTransactionBatcher([ - * { address : "contract one address", - * abi : "contract one abi", - * functionName : "...", - * args: [...] - * value: 0 - * }, - * { address : "contract 2 address", - * abi : "contract 2 abi", - * functionName : "...", - * args: [...] - * value: 0 - * }, - * ]) - */ -const useTransactionBatcher = ( - configs?: TransactionBatcherConfig, - options: TransactionBatcherOptions = { enabled: true } -) => { - const validatedConfigs = configs ?? []; - const totalValue = validatedConfigs.reduce((sum, config) => { - return sum + (config?.value ?? BigInt(0)); - }, BigInt(0)); - - const { - data: batchConfig, - isLoading, - isError, - error, - } = useSimulateTransactionBatcherBatchSend({ - query: { - enabled: !isUndefined(configs) && options.enabled, - }, - args: [ - validatedConfigs.map((config) => config?.address), - validatedConfigs.map((config) => config?.value ?? BigInt(0)), - validatedConfigs.map((config) => encodeFunctionData(config)), - ], - value: totalValue, - }); - const { writeContractAsync } = useWriteTransactionBatcherBatchSend(); - - const executeBatch = useCallback( - (config: NonNullable<typeof batchConfig>) => writeContractAsync(config?.request), - [writeContractAsync] - ); - - return { executeBatch, batchConfig, isError, isLoading, error }; -}; - -export default useTransactionBatcher; diff --git a/web/src/hooks/useVotingContext.tsx b/web/src/hooks/useVotingContext.tsx deleted file mode 100644 index 59abeb2f7..000000000 --- a/web/src/hooks/useVotingContext.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import React, { useContext, createContext, useMemo } from "react"; - -import { useParams } from "react-router-dom"; -import { useAccount } from "wagmi"; - -import { REFETCH_INTERVAL, DisputeKits } from "consts/index"; -import { - useReadDisputeKitClassicIsVoteActive, - useReadDisputeKitShutterIsVoteActive, - useReadDisputeKitGatedIsVoteActive, - useReadDisputeKitGatedShutterIsVoteActive, -} from "hooks/contracts/generated"; -import { useDisputeDetailsQuery } from "hooks/queries/useDisputeDetailsQuery"; -import { useDrawQuery } from "hooks/queries/useDrawQuery"; -import { useDisputeKitAddresses } from "hooks/useDisputeKitAddresses"; -import { isUndefined } from "utils/index"; - -interface IVotingContext { - wasDrawn: boolean; - hasVoted: boolean | undefined; - isLoading: boolean; - isHiddenVotes: boolean; - isCommitPeriod: boolean; - isVotingPeriod: boolean; - commited?: boolean; - commit?: string; -} - -const VotingContext = createContext<IVotingContext>({ - wasDrawn: false, - hasVoted: false, - isLoading: false, - isHiddenVotes: false, - isCommitPeriod: false, - isVotingPeriod: false, -}); -export const VotingContextProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { - const { id } = useParams(); - const { address } = useAccount(); - const { data: disputeData } = useDisputeDetailsQuery(id); - const { data: drawData, isLoading } = useDrawQuery(address?.toLowerCase(), id, disputeData?.dispute?.currentRound.id); - const roundId = disputeData?.dispute?.currentRoundIndex; - const voteId = drawData?.draws?.[0]?.voteIDNum; - - const disputeKitAddress = disputeData?.dispute?.currentRound?.disputeKit?.address; - const { disputeKitName } = useDisputeKitAddresses({ disputeKitAddress }); - - const hookArgs = [BigInt(id ?? 0), roundId, voteId] as const; - const isEnabled = !isUndefined(roundId) && !isUndefined(voteId); - - // Add a hook call for each DisputeKit - const classicVoteResult = useReadDisputeKitClassicIsVoteActive({ - query: { - enabled: isEnabled && disputeKitName === DisputeKits.Classic, - refetchInterval: REFETCH_INTERVAL, - }, - args: hookArgs, - }); - - const shutterVoteResult = useReadDisputeKitShutterIsVoteActive({ - query: { - enabled: isEnabled && disputeKitName === DisputeKits.Shutter, - refetchInterval: REFETCH_INTERVAL, - }, - args: hookArgs, - }); - - const gatedVoteResult = useReadDisputeKitGatedIsVoteActive({ - query: { - enabled: isEnabled && disputeKitName === DisputeKits.Gated, - refetchInterval: REFETCH_INTERVAL, - }, - args: hookArgs, - }); - - const gatedShutterVoteResult = useReadDisputeKitGatedShutterIsVoteActive({ - query: { - enabled: isEnabled && disputeKitName === DisputeKits.GatedShutter, - refetchInterval: REFETCH_INTERVAL, - }, - args: hookArgs, - }); - - // Add a return for each DisputeKit - const hasVoted = useMemo(() => { - switch (disputeKitName) { - case DisputeKits.Classic: - return classicVoteResult.data; - case DisputeKits.Shutter: - return shutterVoteResult.data; - case DisputeKits.Gated: - return gatedVoteResult.data; - case DisputeKits.GatedShutter: - return gatedShutterVoteResult.data; - default: - return undefined; - } - }, [ - disputeKitName, - classicVoteResult.data, - shutterVoteResult.data, - gatedVoteResult.data, - gatedShutterVoteResult.data, - ]); - - const wasDrawn = useMemo(() => !isUndefined(drawData) && drawData.draws.length > 0, [drawData]); - const isHiddenVotes = useMemo(() => disputeData?.dispute?.court.hiddenVotes ?? false, [disputeData]); - const isCommitPeriod = useMemo(() => disputeData?.dispute?.period === "commit", [disputeData]); - const isVotingPeriod = useMemo(() => disputeData?.dispute?.period === "vote", [disputeData]); - - const commited = useMemo(() => !isUndefined(drawData) && drawData?.draws?.[0]?.vote?.commited, [drawData]); - const commit = useMemo(() => drawData?.draws?.[0]?.vote?.commit, [drawData]); - return ( - <VotingContext.Provider - value={useMemo( - () => ({ - wasDrawn, - hasVoted, - isLoading, - isHiddenVotes, - isCommitPeriod, - isVotingPeriod, - commited, - commit, - }), - [wasDrawn, hasVoted, isLoading, isHiddenVotes, isCommitPeriod, isVotingPeriod, commit, commited] - )} - > - {children} - </VotingContext.Provider> - ); -}; - -export const useVotingContext = () => useContext(VotingContext); diff --git a/web/src/index.html b/web/src/index.html deleted file mode 100644 index 559ef32f0..000000000 --- a/web/src/index.html +++ /dev/null @@ -1,21 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <meta - name="description" - content="Kleros is a decentralized, blockchain-based dispute resolution platform that offers fast and affordable arbitration for various type of dispute. Join the future of dispute resolution with Kleros Court." - /> - <meta - name="keywords" - content="dispute resolution, decentralized arbitration, Kleros, blockchain court" - /> - <link rel="shortcut icon" type="image/svg+xml" href="./favicon.ico" /> - <title>Kleros · Court</title> - </head> - <body> - <div id="app"></div> - <script type="module" src="index.tsx"></script> - </body> -</html> diff --git a/web/src/index.tsx b/web/src/index.tsx deleted file mode 100644 index e05d7cdb4..000000000 --- a/web/src/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from "react"; - -import { createRoot } from "react-dom/client"; -import Modal from "react-modal"; -import { HashRouter } from "react-router-dom"; - -import App from "./app"; - -const container = document.getElementById("app"); -Modal.setAppElement(container!); -const root = createRoot(container!); -root.render( - <React.StrictMode> - <HashRouter> - <App /> - </HashRouter> - </React.StrictMode> -); diff --git a/web/src/layout/Footer/index.tsx b/web/src/layout/Footer/index.tsx deleted file mode 100644 index bebb00c29..000000000 --- a/web/src/layout/Footer/index.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { hoverShortTransitionTiming } from "styles/commonStyles"; - -import SecuredByKlerosLogo from "svgs/footer/secured-by-kleros.svg"; - -import { socialmedia } from "consts/socialmedia"; - -import LightButton from "components/LightButton"; -import { ExternalLink } from "components/ExternalLink"; - -const Container = styled.div` - height: 114px; - width: 100%; - background-color: ${({ theme }) => (theme.name === "dark" ? theme.lightBlue : theme.primaryPurple)}; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - padding: 8px; - gap: 16px; - - ${landscapeStyle( - () => css` - height: 64px; - flex-direction: row; - justify-content: space-between; - padding: 0 32px; - ` - )} -`; - -const StyledSecuredByKlerosLogo = styled(SecuredByKlerosLogo)` - ${hoverShortTransitionTiming} - min-height: 24px; - - path { - fill: ${({ theme }) => theme.white}BF; - } - - :hover path { - fill: ${({ theme }) => theme.white}; - } -`; - -const StyledSocialMedia = styled.div` - display: flex; - - .button-svg { - margin-right: 0; - } -`; - -const SecuredByKleros: React.FC = () => ( - <ExternalLink to="https://kleros.io" target="_blank" rel="noreferrer"> - <StyledSecuredByKlerosLogo /> - </ExternalLink> -); - -const SocialMedia = () => ( - <StyledSocialMedia> - {Object.values(socialmedia).map((site, i) => ( - <ExternalLink key={site.url} to={site.url} target="_blank" rel="noreferrer"> - <LightButton Icon={site.icon} text="" /> - </ExternalLink> - ))} - </StyledSocialMedia> -); - -const Footer: React.FC = () => ( - <Container> - <SecuredByKleros /> - <SocialMedia /> - </Container> -); - -export default Footer; diff --git a/web/src/layout/Header/DesktopHeader.tsx b/web/src/layout/Header/DesktopHeader.tsx deleted file mode 100644 index 73efaa230..000000000 --- a/web/src/layout/Header/DesktopHeader.tsx +++ /dev/null @@ -1,191 +0,0 @@ -import React, { useCallback, useEffect, useState } from "react"; -import styled, { css } from "styled-components"; - -import { useLocation } from "react-router-dom"; -import { useToggle } from "react-use"; -import { useAccount } from "wagmi"; - -import KlerosSolutionsIcon from "svgs/menu-icons/kleros-solutions.svg"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { useLockOverlayScroll } from "hooks/useLockOverlayScroll"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import ConnectWallet from "components/ConnectWallet"; -import LightButton from "components/LightButton"; -import JurorLevels from "components/Popup/MiniGuides/JurorLevels"; -import Appeal from "components/Popup/MiniGuides/Appeal"; -import BinaryVoting from "components/Popup/MiniGuides/BinaryVoting"; -import DisputeResolver from "components/Popup/MiniGuides/DisputeResolver"; -import { MiniguideHashesType } from "components/Popup/MiniGuides/MainStructureTemplate"; -import Onboarding from "components/Popup/MiniGuides/Onboarding"; -import RankedVoting from "components/Popup/MiniGuides/RankedVoting"; -import Staking from "components/Popup/MiniGuides/Staking"; -import OverlayPortal from "components/OverlayPortal"; -import { Overlay } from "components/Overlay"; - -import Logo from "./Logo"; -import DappList from "./navbar/DappList"; -import Explore from "./navbar/Explore"; -import Menu from "./navbar/Menu"; -import Help from "./navbar/Menu/Help"; -import Settings from "./navbar/Menu/Settings"; - -const Container = styled.div` - display: none; - position: absolute; - height: 64px; - - ${landscapeStyle( - () => css` - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - position: relative; - ` - )}; -`; - -const LeftSide = styled.div` - display: flex; - gap: 8px; -`; - -const MiddleSide = styled.div` - display: flex; - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); -`; - -const RightSide = styled.div` - display: flex; - gap: ${responsiveSize(4, 8)}; - - margin-left: 8px; - canvas { - width: 20px; - } -`; - -const LightButtonContainer = styled.div` - display: flex; - align-items: center; -`; - -const StyledKlerosSolutionsIcon = styled(KlerosSolutionsIcon)` - fill: ${({ theme }) => theme.white} !important; -`; - -const ConnectWalletContainer = styled.div<{ isConnected: boolean; isDefaultChain: boolean }>` - label { - color: ${({ theme }) => theme.white}; - cursor: pointer; - } -`; - -const DesktopHeader: React.FC = () => { - const [isDappListOpen, toggleIsDappListOpen] = useToggle(false); - const [isHelpOpen, toggleIsHelpOpen] = useToggle(false); - const [isSettingsOpen, toggleIsSettingsOpen] = useToggle(false); - const [isJurorLevelsMiniGuideOpen, toggleIsJurorLevelsMiniGuideOpen] = useToggle(false); - const [isAppealMiniGuideOpen, toggleIsAppealMiniGuideOpen] = useToggle(false); - const [isBinaryVotingMiniGuideOpen, toggleIsBinaryVotingMiniGuideOpen] = useToggle(false); - const [isDisputeResolverMiniGuideOpen, toggleIsDisputeResolverMiniGuideOpen] = useToggle(false); - const [isRankedVotingMiniGuideOpen, toggleIsRankedVotingMiniGuideOpen] = useToggle(false); - const [isStakingMiniGuideOpen, toggleIsStakingMiniGuideOpen] = useToggle(false); - const [isOnboardingMiniGuidesOpen, toggleIsOnboardingMiniGuidesOpen] = useToggle(false); - const [initialTab, setInitialTab] = useState<number>(0); - const location = useLocation(); - const { isConnected, chainId } = useAccount(); - const isDefaultChain = chainId === DEFAULT_CHAIN; - const initializeFragmentURL = useCallback(() => { - const hashIncludes = (hash: MiniguideHashesType | "#notifications") => location.hash.includes(hash); - const hasJurorLevelsMiniGuidePath = hashIncludes("#jurorlevels-miniguide"); - const hasAppealMiniGuidePath = hashIncludes("#appeal-miniguide"); - const hasBinaryVotingMiniGuidePath = hashIncludes("#binaryvoting-miniguide"); - const hasDisputeResolverMiniGuidePath = hashIncludes("#disputeresolver-miniguide"); - const hasRankedVotingMiniGuidePath = hashIncludes("#rankedvoting-miniguide"); - const hasStakingMiniGuidePath = hashIncludes("#staking-miniguide"); - const hasOnboardingMiniGuidePath = hashIncludes("#onboarding-miniguide"); - const hasNotificationsPath = hashIncludes("#notifications"); - toggleIsJurorLevelsMiniGuideOpen(hasJurorLevelsMiniGuidePath); - toggleIsAppealMiniGuideOpen(hasAppealMiniGuidePath); - toggleIsBinaryVotingMiniGuideOpen(hasBinaryVotingMiniGuidePath); - toggleIsDisputeResolverMiniGuideOpen(hasDisputeResolverMiniGuidePath); - toggleIsRankedVotingMiniGuideOpen(hasRankedVotingMiniGuidePath); - toggleIsStakingMiniGuideOpen(hasStakingMiniGuidePath); - toggleIsOnboardingMiniGuidesOpen(hasOnboardingMiniGuidePath); - toggleIsAppealMiniGuideOpen(hasAppealMiniGuidePath); - toggleIsSettingsOpen(hasNotificationsPath); - setInitialTab(hasNotificationsPath ? 1 : 0); - }, [ - toggleIsJurorLevelsMiniGuideOpen, - toggleIsAppealMiniGuideOpen, - toggleIsBinaryVotingMiniGuideOpen, - toggleIsDisputeResolverMiniGuideOpen, - toggleIsRankedVotingMiniGuideOpen, - toggleIsStakingMiniGuideOpen, - toggleIsOnboardingMiniGuidesOpen, - toggleIsSettingsOpen, - location.hash, - ]); - - useEffect(initializeFragmentURL, [initializeFragmentURL]); - - useLockOverlayScroll(isDappListOpen || isHelpOpen || isSettingsOpen); - - return ( - <> - <Container> - <LeftSide> - <LightButtonContainer> - <LightButton - text="" - onClick={() => { - toggleIsDappListOpen(); - }} - Icon={StyledKlerosSolutionsIcon} - /> - </LightButtonContainer> - <Logo /> - </LeftSide> - - <MiddleSide> - <Explore /> - </MiddleSide> - - <RightSide> - <ConnectWalletContainer - {...{ isConnected, isDefaultChain }} - onClick={isConnected && isDefaultChain ? toggleIsSettingsOpen : undefined} - > - <ConnectWallet /> - </ConnectWalletContainer> - <Menu {...{ toggleIsHelpOpen, toggleIsSettingsOpen }} /> - </RightSide> - </Container> - {(isDappListOpen || isHelpOpen || isSettingsOpen) && ( - <OverlayPortal> - <Overlay> - {isDappListOpen && <DappList {...{ toggleIsDappListOpen, isDappListOpen }} />} - {isHelpOpen && <Help {...{ toggleIsHelpOpen, isHelpOpen }} />} - {isSettingsOpen && <Settings {...{ toggleIsSettingsOpen, isSettingsOpen, initialTab }} />} - </Overlay> - </OverlayPortal> - )} - {isJurorLevelsMiniGuideOpen && <JurorLevels toggleMiniGuide={toggleIsJurorLevelsMiniGuideOpen} />} - {isAppealMiniGuideOpen && <Appeal toggleMiniGuide={toggleIsAppealMiniGuideOpen} />} - {isBinaryVotingMiniGuideOpen && <BinaryVoting toggleMiniGuide={toggleIsBinaryVotingMiniGuideOpen} />} - {isDisputeResolverMiniGuideOpen && <DisputeResolver toggleMiniGuide={toggleIsDisputeResolverMiniGuideOpen} />} - {isRankedVotingMiniGuideOpen && <RankedVoting toggleMiniGuide={toggleIsRankedVotingMiniGuideOpen} />} - {isStakingMiniGuideOpen && <Staking toggleMiniGuide={toggleIsStakingMiniGuideOpen} />} - {isOnboardingMiniGuidesOpen && <Onboarding toggleMiniGuide={toggleIsOnboardingMiniGuidesOpen} />} - </> - ); -}; -export default DesktopHeader; diff --git a/web/src/layout/Header/Logo.tsx b/web/src/layout/Header/Logo.tsx deleted file mode 100644 index 5ccaabe3b..000000000 --- a/web/src/layout/Header/Logo.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { Theme } from "styled-components"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; - -import { Link } from "react-router-dom"; - -import { ArbitratorTypes, getArbitratorType } from "consts/index"; - -import { isUndefined } from "utils/index"; - -import KlerosCourtLogo from "svgs/header/kleros-court.svg"; - -const Container = styled.div` - display: flex; - flex-direction: row; - align-items: center; - gap: 16px; -`; - -const BadgeContainer = styled.div<{ backgroundColor: keyof Theme }>` - transform: skewX(-15deg); - background-color: ${({ theme, backgroundColor }) => theme[backgroundColor]}; - border-radius: 3px; - padding: 1px 8px; - height: fit-content; -`; - -const BadgeText = styled.label` - color: ${({ theme }) => theme.darkPurple}; -`; - -const StyledKlerosCourtLogo = styled(KlerosCourtLogo)` - ${hoverShortTransitionTiming} - max-height: 40px; - width: auto; - - &:hover { - path { - fill: ${({ theme }) => theme.white}BF; - } - } -`; - -const CourtBadge: React.FC = () => { - const { text, color } = useMemo<{ text?: string; color?: keyof Theme }>(() => { - switch (getArbitratorType()) { - case ArbitratorTypes.neo: - return { text: "Beta", color: "paleCyan" }; - case ArbitratorTypes.university: - return { text: "Uni", color: "limeGreen" }; - } - return {}; - }, []); - - return !isUndefined(color) ? ( - <BadgeContainer {...{ backgroundColor: color }}> - <BadgeText>{text}</BadgeText> - </BadgeContainer> - ) : null; -}; - -const Logo: React.FC = () => ( - <Container> - {" "} - <Link to={"/"}> - <StyledKlerosCourtLogo /> - </Link> - <CourtBadge /> - </Container> -); - -export default Logo; diff --git a/web/src/layout/Header/MobileHeader.tsx b/web/src/layout/Header/MobileHeader.tsx deleted file mode 100644 index 280881cb9..000000000 --- a/web/src/layout/Header/MobileHeader.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React, { useContext, useMemo, useRef } from "react"; -import styled, { css } from "styled-components"; - -import { useClickAway, useToggle } from "react-use"; - -import HamburgerIcon from "svgs/header/hamburger.svg"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import LightButton from "components/LightButton"; - -import Logo from "./Logo"; -import NavBar from "./navbar"; - -const Container = styled.div` - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - height: 64px; - - ${landscapeStyle( - () => css` - display: none; - ` - )} -`; - -const StyledLightButton = styled(LightButton)` - padding: 0 !important; - - .button-svg { - margin-right: 0px; - } -`; - -const OpenContext = React.createContext({ - isOpen: false, - toggleIsOpen: () => { - // Placeholder - }, -}); - -export function useOpenContext() { - return useContext(OpenContext); -} - -const MobileHeader = () => { - const [isOpen, toggleIsOpen] = useToggle(false); - const containerRef = useRef(null); - useClickAway(containerRef, () => toggleIsOpen(false)); - const memoizedContext = useMemo(() => ({ isOpen, toggleIsOpen }), [isOpen, toggleIsOpen]); - return ( - <Container ref={containerRef}> - <OpenContext.Provider value={memoizedContext}> - <Logo /> - <NavBar /> - <StyledLightButton text="" Icon={HamburgerIcon} onClick={toggleIsOpen} /> - </OpenContext.Provider> - </Container> - ); -}; -export default MobileHeader; diff --git a/web/src/layout/Header/index.tsx b/web/src/layout/Header/index.tsx deleted file mode 100644 index f7e728cdc..000000000 --- a/web/src/layout/Header/index.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import React from "react"; -import styled, { useTheme } from "styled-components"; - -import { StatusBanner } from "subgraph-status"; - -import { getGraphqlUrl } from "utils/getGraphqlUrl"; - -import DesktopHeader from "./DesktopHeader"; -import MobileHeader from "./MobileHeader"; - -const Container = styled.div` - display: flex; - flex-wrap: wrap; - position: sticky; - z-index: 10; - top: 0; - width: 100%; - background-color: ${({ theme }) => (theme.name === "dark" ? `${theme.lightBlue}A6` : theme.primaryPurple)}; - backdrop-filter: ${({ theme }) => (theme.name === "dark" ? "blur(12px)" : "none")}; - -webkit-backdrop-filter: ${({ theme }) => (theme.name === "dark" ? "blur(12px)" : "none")}; // Safari support -`; - -const HeaderContainer = styled.div` - width: 100%; - padding: 0px 24px; -`; - -const StyledBanner = styled(StatusBanner)` - position: sticky !important; - .status-text { - h2 { - margin: 0; - line-height: 24px; - } - } -`; - -const Header: React.FC = () => { - const theme = useTheme(); - - return ( - <Container> - <StyledBanner - autoHide - watcherOptions={{ threshold: 5000, interval: 60_000 }} // 5000 blocks threshold, 60 sec interval check - theme={{ - colors: { - main: theme.whiteBackground, - primary: theme.primaryText, - secondary: theme.secondaryText, - }, - }} - subgraphs={[ - { name: "Kleros Core", url: getGraphqlUrl(false) }, - { name: "Dispute Template Registry", url: getGraphqlUrl(true) }, - ]} - /> - <HeaderContainer> - <DesktopHeader /> - <MobileHeader /> - </HeaderContainer> - </Container> - ); -}; - -export default Header; diff --git a/web/src/layout/Header/navbar/DappList.tsx b/web/src/layout/Header/navbar/DappList.tsx deleted file mode 100644 index c6fa55ec3..000000000 --- a/web/src/layout/Header/navbar/DappList.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import React, { useRef } from "react"; -import styled, { css } from "styled-components"; - -import { useClickAway } from "react-use"; - -import Curate from "svgs/icons/curate-image.png"; -import Resolver from "svgs/icons/dispute-resolver.svg"; -import Escrow from "svgs/icons/escrow.svg"; -import Governor from "svgs/icons/governor.svg"; -import Court from "svgs/icons/kleros.svg"; -import POH from "svgs/icons/poh-image.png"; -import Vea from "svgs/icons/vea.svg"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import Product from "./Product"; - -const Container = styled.div` - display: flex; - position: absolute; - max-height: 340px; - top: 5%; - left: 50%; - transform: translate(-50%); - z-index: 1; - flex-direction: column; - align-items: center; - - width: 86vw; - max-width: 480px; - border-radius: 3px; - border: 1px solid ${({ theme }) => theme.stroke}; - background-color: ${({ theme }) => theme.whiteBackground}; - box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.06); - - svg { - visibility: visible; - } - - ${landscapeStyle( - () => css` - margin-top: 64px; - top: 0; - left: 0; - right: auto; - transform: none; - width: ${responsiveSize(300, 480)}; - max-height: 80vh; - ` - )} -`; - -const Header = styled.h1` - padding-top: 24px; - font-size: 24px; - font-weight: 600; - line-height: 32.68px; -`; - -const ItemsDiv = styled.div` - display: grid; - overflow-y: auto; - padding: 4px ${responsiveSize(8, 24)} 16px ${responsiveSize(8, 24)}; - row-gap: 8px; - column-gap: 2px; - justify-items: center; - max-width: 480px; - min-width: 300px; - width: ${responsiveSize(300, 480)}; - grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); -`; - -const ITEMS = [ - { - text: "Court V2", - Icon: Court, - url: "https://v2.kleros.builders/", - }, - { - text: "Curate V2", - Icon: Curate, - url: "https://curate-v2.netlify.app/", - }, - { - text: "Resolver V2", - Icon: Resolver, - url: "https://v2.kleros.builders/#/resolver", - }, - { - text: "Escrow V2", - Icon: Escrow, - url: "https://escrow-v2.kleros.builders/", - }, - { - text: "Court V1", - Icon: Court, - url: "https://court.kleros.io/", - }, - { - text: "Curate V1", - Icon: Curate, - url: "https://curate.kleros.io", - }, - { - text: "Resolver V1", - Icon: Resolver, - url: "https://resolve.kleros.io", - }, - { - text: "Escrow V1", - Icon: Escrow, - url: "https://escrow.kleros.io", - }, - { - text: "Vea", - Icon: Vea, - url: "https://veascan.io", - }, - { - text: "Kleros Scout", - Icon: Curate, - url: "https://klerosscout.eth.limo", - }, - { - text: "POH V2", - Icon: POH, - url: "https://v2.proofofhumanity.id", - }, - { - text: "Governor", - Icon: Governor, - url: "https://governor.kleros.io", - }, -]; - -interface IDappList { - toggleIsDappListOpen: () => void; -} - -const DappList: React.FC<IDappList> = ({ toggleIsDappListOpen }) => { - const containerRef = useRef(null); - useClickAway(containerRef, () => toggleIsDappListOpen()); - - return ( - <Container ref={containerRef}> - <Header>Kleros Solutions</Header> - <ItemsDiv> - {ITEMS.map((item) => { - return <Product {...item} key={item.text} />; - })} - </ItemsDiv> - </Container> - ); -}; -export default DappList; diff --git a/web/src/layout/Header/navbar/Debug.tsx b/web/src/layout/Header/navbar/Debug.tsx deleted file mode 100644 index 94520d235..000000000 --- a/web/src/layout/Header/navbar/Debug.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React, { useMemo } from "react"; -import styled from "styled-components"; - -import { GIT_BRANCH, GIT_DIRTY, GIT_HASH, GIT_TAGS, GIT_URL, RELEASE_VERSION } from "consts/index"; -import { useToggleTheme } from "hooks/useToggleThemeContext"; -import { isUndefined } from "utils/index"; - -import Phase from "components/Phase"; - -const Container = styled.div` - display: flex; - flex-direction: column; - gap: 12px; - padding: 0px 3px; - - label, - a { - font-family: "Roboto Mono", monospace; - line-height: 10px; - font-size: 10px; - color: ${({ theme }) => theme.stroke}; - } -`; - -const StyledIframe = styled.iframe` - border: none; - width: 100%; - height: 30px; - border-radius: 3px; -`; - -const StyledLabel = styled.label` - padding-left: 8px; -`; - -const StyledPhase = styled(Phase)` - padding-left: 8px; -`; - -const Version = () => ( - <StyledLabel> - v{RELEASE_VERSION}{" "} - <a href={GIT_URL} target="_blank" rel="noreferrer"> - #{GIT_HASH} - </a> - {GIT_BRANCH && GIT_BRANCH !== "HEAD" && ` ${GIT_BRANCH}`} - {GIT_TAGS && ` ${GIT_TAGS}`} - {GIT_DIRTY && ` dirty`} - </StyledLabel> -); - -const ServicesStatus = () => { - const [theme] = useToggleTheme(); - const statusUrlParameters = useMemo(() => (theme === "light" ? "?theme=light" : "?theme=dark"), [theme]); - const statusUrl = import.meta.env.REACT_APP_STATUS_URL; - return <label>{isUndefined(statusUrl) ? null : <StyledIframe src={`${statusUrl + statusUrlParameters}`} />}</label>; -}; - -const Debug: React.FC = () => { - return ( - <Container> - <ServicesStatus /> - <Version /> - <StyledPhase /> - </Container> - ); -}; - -export default Debug; diff --git a/web/src/layout/Header/navbar/Explore.tsx b/web/src/layout/Header/navbar/Explore.tsx deleted file mode 100644 index 34fc1d87e..000000000 --- a/web/src/layout/Header/navbar/Explore.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { css } from "styled-components"; -import { landscapeStyle } from "styles/landscapeStyle"; - -import { Link, useLocation, useSearchParams } from "react-router-dom"; -import { useAccount } from "wagmi"; - -import { useOpenContext } from "../MobileHeader"; - -const Container = styled.div` - display: flex; - flex-direction: column; - - ${landscapeStyle( - () => css` - flex-direction: row; - ` - )}; -`; - -const Title = styled.h1` - display: block; - margin-bottom: 8px; - - ${landscapeStyle( - () => css` - display: none; - ` - )}; -`; - -const StyledLink = styled(Link)<{ isActive: boolean; isMobileNavbar?: boolean }>` - display: flex; - align-items: center; - text-decoration: none; - font-size: 16px; - color: ${({ isActive, theme }) => (isActive ? theme.primaryText : `${theme.primaryText}BA`)}; - font-weight: ${({ isActive, isMobileNavbar }) => (isMobileNavbar && isActive ? "600" : "normal")}; - padding: 8px 8px 8px 0; - border-radius: 7px; - - &:hover { - color: ${({ theme, isMobileNavbar }) => (isMobileNavbar ? theme.primaryText : theme.white)} !important; - } - - ${landscapeStyle( - () => css` - color: ${({ isActive, theme }) => (isActive ? theme.white : `${theme.white}BA`)}; - padding: 16px 8px; - ` - )}; -`; - -interface IExplore { - isMobileNavbar?: boolean; -} - -const Explore: React.FC<IExplore> = ({ isMobileNavbar }) => { - const location = useLocation(); - const [searchParams] = useSearchParams(); - const { toggleIsOpen } = useOpenContext(); - const { isConnected } = useAccount(); - - const navLinks = useMemo(() => { - const base = [ - { to: "/", text: "Home" }, - { to: "/cases/display/1/desc/all", text: "Cases" }, - { to: "/courts", text: "Courts" }, - { to: "/jurors/1/desc/all", text: "Jurors" }, - { to: "/get-pnk", text: "Get PNK" }, - ]; - if (isConnected) { - base.push({ to: "/profile/1/desc/all", text: "My Profile" }); - } - return base; - }, [isConnected]); - - const currentSeg = useMemo(() => location.pathname.split("/")[1] || "", [location.pathname]); - const ownsProfile = !searchParams.get("address"); - - const getIsActive = (to: string) => { - const path = to.split("?")[0]; - if (path === "/") return location.pathname === "/"; - const targetSeg = path.split("/")[1] || ""; - if (targetSeg !== currentSeg) return false; - return targetSeg !== "profile" || ownsProfile; - }; - - return ( - <Container> - <Title>Explore</Title> - {navLinks.map(({ to, text }) => ( - <StyledLink key={text} onClick={toggleIsOpen} isActive={getIsActive(to)} {...{ to, isMobileNavbar }}> - {text} - </StyledLink> - ))} - </Container> - ); -}; - -export default Explore; diff --git a/web/src/layout/Header/navbar/Menu/Help.tsx b/web/src/layout/Header/navbar/Menu/Help.tsx deleted file mode 100644 index 75385826d..000000000 --- a/web/src/layout/Header/navbar/Menu/Help.tsx +++ /dev/null @@ -1,145 +0,0 @@ -import React, { useRef } from "react"; -import styled, { css } from "styled-components"; -import { landscapeStyle } from "styles/landscapeStyle"; - -import { useClickAway, useToggle } from "react-use"; - -import { getDevToolsUrl } from "consts/index"; - -import Book from "svgs/icons/book-open.svg"; -import Guide from "svgs/icons/book.svg"; -import Bug from "svgs/icons/bug.svg"; -import Code from "svgs/icons/code.svg"; -import ETH from "svgs/icons/eth.svg"; -import Faq from "svgs/menu-icons/help.svg"; -import Telegram from "svgs/socialmedia/telegram.svg"; - -import Onboarding from "components/Popup/MiniGuides/Onboarding"; -import Debug from "../Debug"; -import { IHelp } from "../index"; - -const Container = styled.div` - display: flex; - flex-direction: column; - position: absolute; - max-height: 80vh; - overflow-y: auto; - width: 86vw; - max-width: 444px; - top: 5%; - left: 50%; - transform: translateX(-50%); - z-index: 1; - padding: 12px 12px 24px 12px; - border: 1px solid ${({ theme }) => theme.stroke}; - background-color: ${({ theme }) => theme.whiteBackground}; - border-radius: 3px; - box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.06); - - ${landscapeStyle( - () => css` - margin-top: 64px; - width: 260px; - top: 0; - right: 0; - left: auto; - transform: none; - ` - )} -`; - -const ListItem = styled.a` - display: flex; - gap: 8px; - padding: 12px 8px; - cursor: pointer; - transition: transform 0.2s; - - small { - font-size: 16px; - font-weight: 400; - } - - :hover { - transform: scale(1.02); - } - - :hover small { - transition: color 0.1s; - color: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const Icon = styled.svg` - display: inline-block; - width: 16px; - height: 16px; - fill: ${({ theme }) => theme.secondaryPurple}; -`; - -const ITEMS = [ - { - text: "Onboarding", - Icon: Book, - }, - { - text: "Get Help", - Icon: Telegram, - url: "https://t.me/kleros", - }, - { - text: "Report a Bug", - Icon: Bug, - url: "https://github.com/kleros/kleros-v2/issues", - }, - { - text: "DApp Guide", - Icon: Guide, - url: "https://docs.kleros.io/products/court-v2", - }, - { - text: "Crypto Beginner's Guide", - Icon: ETH, - url: "https://ethereum.org/en/wallets/", - }, - { - text: "FAQ", - Icon: Faq, - url: "https://docs.kleros.io/kleros-faq", - }, - { - text: "Developer Tools", - Icon: Code, - url: getDevToolsUrl(), - }, -]; - -const Help: React.FC<IHelp> = ({ toggleIsHelpOpen }) => { - const [isOnboardingMiniGuidesOpen, toggleIsOnboardingMiniGuidesOpen] = useToggle(false); - - const containerRef = useRef(null); - useClickAway(containerRef, () => { - if (!isOnboardingMiniGuidesOpen) toggleIsHelpOpen(); - }); - - return ( - <> - <Container ref={containerRef}> - {ITEMS.map((item, index) => ( - <ListItem - href={item.url} - key={item.text} - target="_blank" - onClick={index === 0 ? () => toggleIsOnboardingMiniGuidesOpen() : undefined} - > - <Icon as={item.Icon} /> - <small>{item.text}</small> - </ListItem> - ))} - <Debug /> - </Container> - {isOnboardingMiniGuidesOpen && <Onboarding toggleMiniGuide={toggleIsOnboardingMiniGuidesOpen} />} - </> - ); -}; -export default Help; diff --git a/web/src/layout/Header/navbar/Menu/Settings/General/WalletAndProfile.tsx b/web/src/layout/Header/navbar/Menu/Settings/General/WalletAndProfile.tsx deleted file mode 100644 index 57931035c..000000000 --- a/web/src/layout/Header/navbar/Menu/Settings/General/WalletAndProfile.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { hoverLongTransitionTiming } from "styles/commonStyles"; - -import ArrowIcon from "svgs/icons/arrow.svg"; - -import { AddressOrName, IdenticonOrAvatar } from "components/ConnectWallet/AccountDisplay"; -import { StyledArrowLink } from "components/StyledArrowLink"; -import { ISettings } from "../../../index"; - -const Container = styled.div` - ${hoverLongTransitionTiming} - display: flex; - justify-content: center; - align-items: center; - padding: 16px 32px; - gap: 24px; - border: 1px solid ${({ theme }) => theme.stroke}; - border-radius: 30px; - - > label { - color: ${({ theme }) => theme.primaryText}; - font-size: 16px; - font-weight: 600; - } - - :hover { - background-color: ${({ theme }) => theme.lightBlue}; - } -`; - -const AvatarAndAddressContainer = styled.div` - display: flex; - flex-direction: row; - gap: 8px; -`; - -const ReStyledArrowLink = styled(StyledArrowLink)` - font-size: 14px; - - > svg { - height: 14px; - width: 14px; - } -`; - -const WalletAndProfile: React.FC<ISettings> = ({ toggleIsSettingsOpen }) => { - return ( - <Container> - <AvatarAndAddressContainer> - <IdenticonOrAvatar /> - <AddressOrName /> - </AvatarAndAddressContainer> - <ReStyledArrowLink to={"/profile/1/desc/all"} onClick={toggleIsSettingsOpen}> - My Profile <ArrowIcon /> - </ReStyledArrowLink> - </Container> - ); -}; -export default WalletAndProfile; diff --git a/web/src/layout/Header/navbar/Menu/Settings/General/index.tsx b/web/src/layout/Header/navbar/Menu/Settings/General/index.tsx deleted file mode 100644 index b15dc8b1b..000000000 --- a/web/src/layout/Header/navbar/Menu/Settings/General/index.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { useAccount, useDisconnect } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { ChainDisplay } from "components/ConnectWallet/AccountDisplay"; -import { EnsureChain } from "components/EnsureChain"; -import WalletAndProfile from "./WalletAndProfile"; -import { ISettings } from "../../../index"; - -const Container = styled.div` - display: flex; - flex-direction: column; - justify-content: center; -`; - -const StyledChainContainer = styled.div` - display: flex; - gap: 0.5rem; - justify-content: center; - align-items: center; - :before { - content: ""; - width: 8px; - height: 8px; - border-radius: 50%; - background-color: ${({ theme }) => theme.success}; - } - > label { - color: ${({ theme }) => theme.success}; - } -`; - -const StyledButton = styled.div` - display: flex; - justify-content: center; - margin-top: 8px; -`; - -const EnsureChainContainer = styled.div` - display: flex; - justify-content: center; - padding-top: 24px; - padding-bottom: 20px; -`; - -const UserContainer = styled.div` - display: flex; - flex-direction: column; - gap: 16px; -`; - -export const DisconnectWalletButton: React.FC = () => { - const { disconnect } = useDisconnect(); - return <Button text={`Disconnect`} onClick={() => disconnect()} />; -}; - -const General: React.FC<ISettings> = ({ toggleIsSettingsOpen }) => { - const { address } = useAccount(); - - return ( - <EnsureChainContainer> - <EnsureChain> - <Container> - {address && ( - <UserContainer> - <StyledChainContainer> - <ChainDisplay /> - </StyledChainContainer> - <WalletAndProfile {...{ toggleIsSettingsOpen }} /> - <StyledButton> - <DisconnectWalletButton /> - </StyledButton> - </UserContainer> - )} - </Container> - </EnsureChain> - </EnsureChainContainer> - ); -}; - -export default General; diff --git a/web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/EmailVerificationInfo.tsx b/web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/EmailVerificationInfo.tsx deleted file mode 100644 index 70ffb265c..000000000 --- a/web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/EmailVerificationInfo.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React, { useCallback } from "react"; -import styled from "styled-components"; - -import { Button } from "@kleros/ui-components-library"; - -import HourglassIcon from "svgs/icons/hourglass.svg"; - -import { errorToast, infoToast, successToast } from "utils/wrapWithToast"; -import { useAtlasProvider } from "@kleros/kleros-app"; - -const InfoContainer = styled.div` - display: flex; - flex-direction: row; - align-items: center; - gap: 16px; - width: 100%; - padding-top: 16px; - margin-top: 32px; - border-top: 1px solid ${({ theme }) => theme.stroke}; -`; - -const InfoInnerContainer = styled.div` - display: flex; - flex-direction: column; - align-items: start; - gap: 8px; -`; - -const InfoTitle = styled.h3` - margin: 0; -`; -const InfoSubtitle = styled.label``; - -const StyledHourglassIcon = styled(HourglassIcon)` - width: 32px; - height: 32px; - fill: ${({ theme }) => theme.primaryBlue}; -`; - -const StyledButton = styled(Button)` - display: inline-block; - background-color: transparent; - padding: 0; - .button-text { - color: ${({ theme }) => theme.primaryBlue}; - font-weight: 400; - font-size: 14px; - } - .button-svg { - path { - fill: ${({ theme }) => theme.primaryBlue}; - } - } - :focus, - :hover { - background-color: transparent; - } -`; - -interface IEmailInfo { - toggleIsSettingsOpen: () => void; -} - -const EmailVerificationInfo: React.FC<IEmailInfo> = ({ toggleIsSettingsOpen }) => { - const { userExists, user, updateEmail } = useAtlasProvider(); - - const resendVerificationEmail = useCallback( - (e: React.FormEvent<HTMLFormElement>) => { - e.preventDefault(); - if (!user) return; - infoToast(`Sending verfication email ...`); - updateEmail({ newEmail: user.email }) - .then(async (res) => { - if (res) { - successToast("Verification email sent successfully!"); - toggleIsSettingsOpen(); - } - }) - .catch((err) => { - console.log(err); - errorToast(`Failed to send verification email: ${err?.message}`); - }); - }, - [user, updateEmail, toggleIsSettingsOpen] - ); - - return userExists && !user?.isEmailVerified ? ( - <InfoContainer> - <StyledHourglassIcon /> - <InfoInnerContainer> - <InfoTitle>Email Verification Pending</InfoTitle> - <InfoSubtitle> - We sent you a verification email. Please, verify it. - <br /> Didn’t receive the email? <StyledButton text="Resend it" onClick={resendVerificationEmail} /> - </InfoSubtitle> - </InfoInnerContainer> - </InfoContainer> - ) : ( - <></> - ); -}; - -export default EmailVerificationInfo; diff --git a/web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/FormContact.tsx b/web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/FormContact.tsx deleted file mode 100644 index e317b2770..000000000 --- a/web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/FormContact.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import React, { Dispatch, SetStateAction, useMemo, useEffect } from "react"; -import styled from "styled-components"; - -import { Field } from "@kleros/ui-components-library"; - -import { isEmpty } from "src/utils"; - -const StyledLabel = styled.label` - display: flex; - justify-content: space-between; - margin-bottom: 10px; -`; - -const StyledField = styled(Field)` - display: flex; - flex-direction: column; - align-items: center; - width: 100%; -`; - -interface IForm { - contactLabel: string; - contactPlaceholder: string; - contactInput: string; - contactIsValid: boolean; - setContactInput: Dispatch<SetStateAction<string>>; - setContactIsValid: Dispatch<SetStateAction<boolean>>; - validator: RegExp; - isEditing?: boolean; -} - -const FormContact: React.FC<IForm> = ({ - contactLabel, - contactPlaceholder, - contactInput, - contactIsValid, - setContactInput, - setContactIsValid, - validator, - isEditing, -}) => { - useEffect(() => { - setContactIsValid(validator.test(contactInput)); - }, [contactInput, setContactIsValid, validator]); - - const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => { - event.preventDefault(); - setContactInput(event.target.value); - }; - - const fieldVariant = useMemo(() => { - if (!isEditing || isEmpty(contactInput)) { - return undefined; - } - return contactIsValid ? "success" : "error"; - }, [contactInput, contactIsValid, isEditing]); - - return ( - <> - <StyledLabel>{contactLabel}</StyledLabel> - <StyledField - dir="auto" - variant={fieldVariant} - value={contactInput} - onChange={handleInputChange} - placeholder={contactPlaceholder} - /> - </> - ); -}; - -export default FormContact; diff --git a/web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/index.tsx b/web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/index.tsx deleted file mode 100644 index 52328b9f0..000000000 --- a/web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/index.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import React, { useEffect, useState } from "react"; -import styled from "styled-components"; - -import { useAccount } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { EMAIL_REGEX } from "consts/index"; -import { useAtlasProvider } from "@kleros/kleros-app"; - -import { responsiveSize } from "styles/responsiveSize"; - -import { ISettings } from "../../../../index"; - -import EmailVerificationInfo from "./EmailVerificationInfo"; -import FormContact from "./FormContact"; -import { isUndefined } from "src/utils"; -import InfoCard from "components/InfoCard"; -import { timeLeftUntil } from "utils/date"; -import { errorToast, infoToast, successToast } from "utils/wrapWithToast"; - -const FormContainer = styled.form` - width: 100%; - position: relative; - display: flex; - flex-direction: column; - padding: 0 ${responsiveSize(12, 32, 300)}; - padding-bottom: 16px; - gap: 16px; -`; - -const ButtonContainer = styled.div` - display: flex; - justify-content: end; -`; - -const FormContactContainer = styled.div` - display: flex; - flex-direction: column; -`; - -const StyledInfoCard = styled(InfoCard)` - width: fit-content; - font-size: 14px; - margin-bottom: 8px; - word-wrap: break-word; -`; - -const FormContactDetails: React.FC<ISettings> = ({ toggleIsSettingsOpen }) => { - const [emailInput, setEmailInput] = useState<string>(""); - const [emailIsValid, setEmailIsValid] = useState<boolean>(false); - const { address } = useAccount(); - const { user, isAddingUser, isFetchingUser, addUser, updateEmail, isUpdatingUser, userExists } = useAtlasProvider(); - - const isEditingEmail = user?.email !== emailInput; - - const isEmailUpdateable = user?.email - ? !isUndefined(user?.emailUpdateableAt) && new Date(user.emailUpdateableAt).getTime() < new Date().getTime() - : true; - - useEffect(() => { - if (!user || !userExists) return; - - setEmailInput(user.email); - }, [user, userExists]); - - const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => { - e.preventDefault(); - if (!address) { - return; - } - - // if user exists then update email - if (userExists) { - if (!isEmailUpdateable) return; - const data = { - newEmail: emailInput, - }; - infoToast("Updating Email ..."); - updateEmail(data) - .then(async (res) => { - if (res) { - successToast("Email Updated successfully!"); - toggleIsSettingsOpen(); - } - }) - .catch((err) => { - console.log(err); - errorToast(`Updating Email failed: ${err?.message}`); - }); - } else { - const data = { - email: emailInput, - }; - infoToast("Adding User ..."); - addUser(data) - .then(async (res) => { - if (res) { - successToast("User added successfully!"); - toggleIsSettingsOpen(); - } - }) - .catch((err) => { - console.log(err); - errorToast(`Adding User failed: ${err?.message}`); - }); - } - }; - - return ( - <FormContainer onSubmit={handleSubmit}> - {/* <FormContactContainer> - <FormContact - contactLabel="Telegram" - contactPlaceholder="@my_handle" - contactInput={telegramInput} - contactIsValid={telegramIsValid} - setContactInput={setTelegramInput} - setContactIsValid={setTelegramIsValid} - validator={TELEGRAM_REGEX} - isEditing={isEditingTelegram} - /> - </FormContactContainer> */} - <FormContactContainer> - <FormContact - contactLabel="Email" - contactPlaceholder="your.email@email.com" - contactInput={emailInput} - contactIsValid={emailIsValid} - setContactInput={setEmailInput} - setContactIsValid={setEmailIsValid} - validator={EMAIL_REGEX} - isEditing={isEditingEmail} - /> - </FormContactContainer> - {!isEmailUpdateable ? ( - <StyledInfoCard msg={`You can update email again ${timeLeftUntil(user?.emailUpdateableAt!)}`} /> - ) : null} - <ButtonContainer> - <Button - text="Save" - disabled={ - !isEditingEmail || !emailIsValid || isAddingUser || isFetchingUser || isUpdatingUser || !isEmailUpdateable - } - /> - </ButtonContainer> - <EmailVerificationInfo toggleIsSettingsOpen={toggleIsSettingsOpen} /> - </FormContainer> - ); -}; - -export default FormContactDetails; diff --git a/web/src/layout/Header/navbar/Menu/Settings/Notifications/index.tsx b/web/src/layout/Header/navbar/Menu/Settings/Notifications/index.tsx deleted file mode 100644 index 401396fab..000000000 --- a/web/src/layout/Header/navbar/Menu/Settings/Notifications/index.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import TelegramLogo from "svgs/socialmedia/telegram.svg"; - -import { HERMES_TELEGRAM_BOT_URL } from "consts/index"; - -import EnsureAuth from "components/EnsureAuth"; -import { EnsureChain } from "components/EnsureChain"; -import { ISettings } from "layout/Header/navbar/index"; - -import FormContactDetails from "./FormContactDetails"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - width: 100%; - height: 100%; -`; - -const HeaderContainer = styled.div` - display: flex; - justify-content: center; - font-size: 16px; - font-weight: 600; - color: ${({ theme }) => theme.primaryText}; - margin-top: 16px; - margin-bottom: 12px; -`; - -const HeaderNotifs: React.FC = () => { - return <HeaderContainer>Contact Details</HeaderContainer>; -}; - -const EnsureChainContainer = styled.div` - display: flex; - justify-content: center; - padding-top: 20px; - padding-bottom: 20px; -`; - -const StyledSvg = styled.svg` - display: inline-block; - width: 18px; - height: 18px; - fill: ${({ theme }) => theme.primaryBlue}; -`; - -const StyledA = styled.a` - display: flex; - justify-content: center; - gap: 4px; - margin-top: 90px; - margin-bottom: 110px; - font-size: 16px; - - &:hover { - text-decoration: underline; - } -`; - -const NotificationSettings: React.FC<ISettings> = ({ toggleIsSettingsOpen }) => { - return ( - <EnsureChainContainer> - <EnsureChain> - <Container> - {/* <StyledA href={HERMES_TELEGRAM_BOT_URL} target="_blank" rel="noreferrer"> - Subscribe to the Hermes Messenger Bot - <StyledSvg as={TelegramLogo} /> - </StyledA> */} - <EnsureAuth> - <> - <HeaderNotifs /> - <FormContactDetails toggleIsSettingsOpen={toggleIsSettingsOpen} /> - </> - </EnsureAuth> - </Container> - </EnsureChain> - </EnsureChainContainer> - ); -}; - -export default NotificationSettings; diff --git a/web/src/layout/Header/navbar/Menu/Settings/index.tsx b/web/src/layout/Header/navbar/Menu/Settings/index.tsx deleted file mode 100644 index 92a7397ab..000000000 --- a/web/src/layout/Header/navbar/Menu/Settings/index.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React, { useRef, useState } from "react"; -import styled, { css } from "styled-components"; - -import { useLocation, useNavigate } from "react-router-dom"; -import { useClickAway } from "react-use"; - -import { Tabs } from "@kleros/ui-components-library"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { ISettings } from "../../index"; - -import General from "./General"; -import NotificationSettings from "./Notifications"; - -const Container = styled.div` - display: flex; - position: absolute; - max-height: 80vh; - overflow-y: auto; - background-color: ${({ theme }) => theme.whiteBackground}; - flex-direction: column; - top: 5%; - left: 50%; - transform: translateX(-50%); - z-index: 1; - border: 1px solid ${({ theme }) => theme.stroke}; - border-radius: 3px; - overflow-y: auto; - - ${landscapeStyle( - () => css` - margin-top: 64px; - top: 0; - right: 0; - left: auto; - transform: none; - ` - )} -`; - -const StyledSettingsText = styled.div` - display: flex; - justify-content: center; - font-size: 24px; - color: ${({ theme }) => theme.primaryText}; - margin-top: 24px; -`; - -const StyledTabs = styled(Tabs)` - padding: 0 ${responsiveSize(8, 32, 300)}; - width: 86vw; - max-width: 660px; - align-self: center; - ${landscapeStyle( - () => css` - width: ${responsiveSize(300, 424, 300)}; - ` - )} -`; - -const TABS = [ - { - text: "General", - value: 0, - }, - { - text: "Notifications", - value: 1, - }, -]; - -const Settings: React.FC<ISettings> = ({ toggleIsSettingsOpen, initialTab }) => { - const [currentTab, setCurrentTab] = useState<number>(initialTab || 0); - const containerRef = useRef(null); - const location = useLocation(); - const navigate = useNavigate(); - useClickAway(containerRef, () => { - toggleIsSettingsOpen(); - if (location.hash.includes("#notifications")) navigate("#", { replace: true }); - }); - - return ( - <Container ref={containerRef}> - <StyledSettingsText>Settings</StyledSettingsText> - <StyledTabs - currentValue={currentTab} - items={TABS} - callback={(n: number) => { - setCurrentTab(n); - }} - /> - {currentTab === 0 ? ( - <General {...{ toggleIsSettingsOpen }} /> - ) : ( - <NotificationSettings {...{ toggleIsSettingsOpen }} /> - )} - </Container> - ); -}; - -export default Settings; diff --git a/web/src/layout/Header/navbar/Menu/index.tsx b/web/src/layout/Header/navbar/Menu/index.tsx deleted file mode 100644 index 354f690be..000000000 --- a/web/src/layout/Header/navbar/Menu/index.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import DarkModeIcon from "svgs/menu-icons/dark-mode.svg"; -import HelpIcon from "svgs/menu-icons/help.svg"; -import LightModeIcon from "svgs/menu-icons/light-mode.svg"; -// import NotificationsIcon from "svgs/menu-icons/notifications.svg"; -import SettingsIcon from "svgs/menu-icons/settings.svg"; - -import { useToggleTheme } from "hooks/useToggleThemeContext"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import LightButton from "components/LightButton"; - -import { IHelp, ISettings } from "../index"; - -const Container = styled.div` - display: flex; - flex-direction: column; - - ${landscapeStyle( - () => css` - flex-direction: row; - ` - )} -`; - -const ButtonContainer = styled.div` - min-height: 32px; - display: flex; - align-items: center; - - button { - padding: 0px; - } - - .button-text { - display: block; - } - - ${landscapeStyle( - () => css` - .button-text { - display: none; - } - ` - )} -`; - -interface IMenu { - isMobileNavbar?: boolean; -} - -const Menu: React.FC<ISettings & IHelp & IMenu> = ({ toggleIsHelpOpen, toggleIsSettingsOpen, isMobileNavbar }) => { - const [theme, toggleTheme] = useToggleTheme(); - const isLightTheme = theme === "light"; - - const buttons = [ - // { text: "Notifications", Icon: NotificationsIcon }, - { - text: "Settings", - Icon: SettingsIcon, - onClick: () => toggleIsSettingsOpen(), - }, - { - text: "Help", - Icon: HelpIcon, - onClick: () => { - toggleIsHelpOpen(); - }, - }, - { - text: `${isLightTheme ? "Dark" : "Light"} Mode`, - Icon: isLightTheme ? DarkModeIcon : LightModeIcon, - onClick: () => toggleTheme(), - }, - ]; - - return ( - <Container> - {buttons.map(({ text, Icon, onClick }) => ( - <ButtonContainer key={Icon}> - <LightButton {...{ text, onClick, Icon, isMobileNavbar }} /> - </ButtonContainer> - ))} - </Container> - ); -}; - -export default Menu; diff --git a/web/src/layout/Header/navbar/Product.tsx b/web/src/layout/Header/navbar/Product.tsx deleted file mode 100644 index 269383068..000000000 --- a/web/src/layout/Header/navbar/Product.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React, { useState } from "react"; -import styled from "styled-components"; -import Skeleton from "react-loading-skeleton"; - -import { responsiveSize } from "styles/responsiveSize"; - -const Container = styled.a` - cursor: pointer; - display: flex; - flex-direction: column; - align-items: center; - padding: 16px 8px 28px 8px; - max-width: 100px; - border-radius: 3px; - :hover { - transition: - transform 0.15s, - background-color 0.3s; - transform: scale(1.02); - background-color: ${({ theme }) => theme.lightGrey}; - } - gap: 8px; - width: ${responsiveSize(100, 130)}; - background-color: ${({ theme }) => theme.lightBackground}; -`; - -const StyledIcon = styled.svg` - width: 48px; - height: 48px; -`; - -const StyledImg = styled.img<{ isLoaded: boolean }>` - width: 48px; - height: 48px; - display: ${({ isLoaded }) => (isLoaded ? "block" : "none")}; -`; - -const StyledSmall = styled.small` - display: flex; - font-weight: 400; - line-height: 19px; - text-align: center; -`; - -interface IProduct { - text: string; - url: string; - Icon: React.FC<React.SVGAttributes<SVGElement>> | string; -} - -const Product: React.FC<IProduct> = ({ text, url, Icon }) => { - const [isImgLoaded, setIsImgLoaded] = useState(false); - - return ( - <Container href={url} target="_blank"> - {typeof Icon === "string" ? ( - <> - {!isImgLoaded ? <Skeleton width={48} height={46} circle /> : null} - <StyledImg alt={Icon} src={Icon} isLoaded={isImgLoaded} onLoad={() => setIsImgLoaded(true)} /> - </> - ) : ( - <StyledIcon as={Icon} /> - )} - <StyledSmall>{text}</StyledSmall> - </Container> - ); -}; - -export default Product; diff --git a/web/src/layout/Header/navbar/index.tsx b/web/src/layout/Header/navbar/index.tsx deleted file mode 100644 index 8dc3a86d9..000000000 --- a/web/src/layout/Header/navbar/index.tsx +++ /dev/null @@ -1,137 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { useToggle } from "react-use"; -import { useAccount } from "wagmi"; - -import KlerosSolutionsIcon from "svgs/menu-icons/kleros-solutions.svg"; - -import { useLockOverlayScroll } from "hooks/useLockOverlayScroll"; - -import ConnectWallet from "components/ConnectWallet"; -import LightButton from "components/LightButton"; -import OverlayPortal from "components/OverlayPortal"; -import { Overlay } from "components/Overlay"; - -import { useOpenContext } from "../MobileHeader"; -import DappList from "./DappList"; -import Explore from "./Explore"; -import Menu from "./Menu"; -import Help from "./Menu/Help"; -import Settings from "./Menu/Settings"; -import { DisconnectWalletButton } from "./Menu/Settings/General"; - -const Wrapper = styled.div<{ isOpen: boolean }>` - visibility: ${({ isOpen }) => (isOpen ? "visible" : "hidden")}; - position: absolute; - top: 100%; - left: 0; - width: 100vw; - height: 100vh; - z-index: 1; -`; - -const StyledOverlay = styled(Overlay)` - top: unset; -`; - -const Container = styled.div<{ isOpen: boolean }>` - position: absolute; - top: 0; - left: 0; - right: 0; - max-height: calc(100vh - 160px); - overflow-y: auto; - z-index: 1; - background-color: ${({ theme }) => theme.whiteBackground}; - box-shadow: 0px 2px 3px ${({ theme }) => theme.defaultShadow}; - transform-origin: top; - transform: scaleY(${({ isOpen }) => (isOpen ? "1" : "0")}); - visibility: ${({ isOpen }) => (isOpen ? "visible" : "hidden")}; - transition-property: transform, visibility; - transition-duration: ${({ theme }) => theme.transitionSpeed}; - transition-timing-function: ease; - padding: 24px; - - hr { - margin: 24px 0; - } -`; - -const WalletContainer = styled.div` - display: flex; - gap: 16px; - justify-content: space-between; - flex-wrap: wrap; -`; - -const DisconnectWalletButtonContainer = styled.div` - display: flex; - align-items: center; -`; - -export interface ISettings { - toggleIsSettingsOpen: () => void; - initialTab?: number; -} - -export interface IHelp { - toggleIsHelpOpen: () => void; -} - -export interface IDappList { - toggleIsDappListOpen: () => void; -} - -const NavBar: React.FC = () => { - const { isConnected } = useAccount(); - const [isDappListOpen, toggleIsDappListOpen] = useToggle(false); - const [isHelpOpen, toggleIsHelpOpen] = useToggle(false); - const [isSettingsOpen, toggleIsSettingsOpen] = useToggle(false); - const { isOpen } = useOpenContext(); - useLockOverlayScroll(isOpen); - - return ( - <> - <Wrapper {...{ isOpen }}> - <StyledOverlay> - <Container {...{ isOpen }}> - <LightButton - isMobileNavbar={true} - text="Kleros Solutions" - onClick={() => { - toggleIsDappListOpen(); - }} - Icon={KlerosSolutionsIcon} - /> - <hr /> - <Explore isMobileNavbar={true} /> - <hr /> - <WalletContainer> - <ConnectWallet /> - {isConnected && ( - <DisconnectWalletButtonContainer> - <DisconnectWalletButton /> - </DisconnectWalletButtonContainer> - )} - </WalletContainer> - <hr /> - <Menu {...{ toggleIsHelpOpen, toggleIsSettingsOpen }} isMobileNavbar={true} /> - <br /> - </Container> - </StyledOverlay> - </Wrapper> - {(isDappListOpen || isHelpOpen || isSettingsOpen) && ( - <OverlayPortal> - <Overlay> - {isDappListOpen && <DappList {...{ toggleIsDappListOpen }} />} - {isHelpOpen && <Help {...{ toggleIsHelpOpen }} />} - {isSettingsOpen && <Settings {...{ toggleIsSettingsOpen }} />} - </Overlay> - </OverlayPortal> - )} - </> - ); -}; - -export default NavBar; diff --git a/web/src/layout/index.tsx b/web/src/layout/index.tsx deleted file mode 100644 index 01733936f..000000000 --- a/web/src/layout/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React, { useRef } from "react"; -import styled from "styled-components"; - -import "overlayscrollbars/styles/overlayscrollbars.css"; -import { OverlayScrollbarsComponent } from "overlayscrollbars-react"; -import { Outlet } from "react-router-dom"; -import { ToastContainer } from "react-toastify"; - -import { OverlayScrollContext } from "context/OverlayScrollContext"; - -import Footer from "./Footer"; -import Header from "./Header"; - -const Container = styled.div` - display: flex; - flex-direction: column; - min-height: 100%; - width: 100%; -`; - -const StyledOverlayScrollbarsComponent = styled(OverlayScrollbarsComponent)` - height: 100vh; - width: 100vw; -`; - -const StyledToastContainer = styled(ToastContainer)` - padding: 16px; - padding-top: 70px; -`; - -const OutletContainer = styled.div` - display: flex; - flex: 1; - background-color: ${({ theme }) => theme.lightBackground}; -`; - -const Layout: React.FC = () => { - const containerRef = useRef(null); - - return ( - <OverlayScrollContext.Provider value={containerRef}> - <StyledOverlayScrollbarsComponent ref={containerRef} options={{ showNativeOverlaidScrollbars: true }}> - <Container> - <Header /> - <StyledToastContainer /> - <OutletContainer> - <Outlet /> - </OutletContainer> - - <Footer /> - </Container> - </StyledOverlayScrollbarsComponent> - </OverlayScrollContext.Provider> - ); -}; - -export default Layout; diff --git a/web/src/pages/AttachmentDisplay/Header.tsx b/web/src/pages/AttachmentDisplay/Header.tsx deleted file mode 100644 index 18dd6d9af..000000000 --- a/web/src/pages/AttachmentDisplay/Header.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { useNavigate, useSearchParams } from "react-router-dom"; - -import { Button } from "@kleros/ui-components-library"; - -import Arrow from "svgs/icons/arrow-left.svg"; -import PaperClip from "svgs/icons/paperclip.svg"; - -import { responsiveSize } from "styles/responsiveSize"; - -const Container = styled.div` - width: 100%; - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 38px; -`; - -const TitleContainer = styled.div` - display: flex; - flex-direction: row; - align-items: center; - gap: 8px; -`; - -const Title = styled.h1` - margin: 0px; - font-size: ${responsiveSize(20, 24)}; -`; - -const StyledPaperClip = styled(PaperClip)` - width: ${responsiveSize(16, 24)}; - height: ${responsiveSize(16, 24)}; - path { - fill: ${({ theme }) => theme.secondaryPurple}B0; - } -`; - -const StyledButton = styled(Button)` - background-color: transparent; - padding: 0; - .button-text { - color: ${({ theme }) => theme.primaryBlue}; - font-weight: 400; - } - .button-svg { - path { - fill: ${({ theme }) => theme.primaryBlue}; - } - } - :focus, - :hover { - background-color: transparent; - .button-svg { - path { - fill: ${({ theme }) => theme.secondaryBlue}; - } - } - .button-text { - color: ${({ theme }) => theme.secondaryBlue}; - } - } -`; - -const Header: React.FC<{ title: string }> = ({ title }) => { - const navigate = useNavigate(); - const [searchParams] = useSearchParams(); - const disputeId = searchParams.get("disputeId"); - const attachmentTitle = searchParams.get("title"); - - const handleReturn = () => { - if (attachmentTitle === "Evidence File") { - navigate(`/cases/${disputeId}/evidence`); - } else if (attachmentTitle === "Case Policy" || attachmentTitle === "Dispute Policy") { - navigate(`/cases/${disputeId}/overview`); - } else if (attachmentTitle === "Policy File") { - navigate(`/resolver/policy`); - } else { - navigate("/"); - } - }; - - return ( - <Container> - <TitleContainer> - <StyledPaperClip /> - <Title>{title}</Title> - </TitleContainer> - <StyledButton text="Return" Icon={Arrow} onClick={handleReturn} /> - </Container> - ); -}; - -export default Header; diff --git a/web/src/pages/AttachmentDisplay/index.tsx b/web/src/pages/AttachmentDisplay/index.tsx deleted file mode 100644 index 35c6b7234..000000000 --- a/web/src/pages/AttachmentDisplay/index.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import React, { lazy, Suspense } from "react"; -import styled from "styled-components"; - -import { useSearchParams } from "react-router-dom"; - -import NewTabIcon from "svgs/icons/new-tab.svg"; - -import { MAX_WIDTH_LANDSCAPE } from "styles/landscapeStyle"; - -import { ExternalLink } from "components/ExternalLink"; -import Loader from "components/Loader"; - -import Header from "./Header"; - -const FileViewer = lazy(() => import("components/FileViewer")); - -const Container = styled.div` - width: 100%; - background-color: ${({ theme }) => theme.lightBackground}; - padding: calc(24px + (136 - 24) * (min(max(100vw, 375px), 1250px) - 375px) / 875); - padding-top: calc(32px + (80 - 32) * (min(max(100vw, 375px), 1250px) - 375px) / 875); - padding-bottom: calc(76px + (96 - 76) * (min(max(100vw, 375px), 1250px) - 375px) / 875); - max-width: ${MAX_WIDTH_LANDSCAPE}; - margin: 0 auto; -`; - -const AttachmentContainer = styled.div` - width: 100%; - display: flex; - flex-direction: column; - gap: 8px; -`; - -const LoaderContainer = styled.div` - width: 100%; - display: flex; - justify-content: center; -`; - -const StyledExternalLink = styled(ExternalLink)` - display: flex; - align-items: center; - align-self: flex-end; - gap: 8px; -`; - -const StyledNewTabIcon = styled(NewTabIcon)` - path { - fill: ${({ theme }) => theme.primaryBlue}; - } -`; - -const AttachmentDisplay: React.FC = () => { - const [searchParams] = useSearchParams(); - - const url = searchParams.get("url"); - const title = searchParams.get("title") ?? "Attachment"; - return ( - <Container> - <AttachmentContainer> - <Header {...{ title }} /> - {url ? ( - <> - <StyledExternalLink to={url} rel="noreferrer" target="_blank"> - Open in new tab <StyledNewTabIcon /> - </StyledExternalLink> - <Suspense - fallback={ - <LoaderContainer> - <Loader width={"48px"} height={"48px"} /> - </LoaderContainer> - } - > - <FileViewer url={url} /> - </Suspense> - </> - ) : null} - </AttachmentContainer> - </Container> - ); -}; - -export default AttachmentDisplay; diff --git a/web/src/pages/Cases/CaseDetails/Appeal/AppealHistory.tsx b/web/src/pages/Cases/CaseDetails/Appeal/AppealHistory.tsx deleted file mode 100644 index d208120dd..000000000 --- a/web/src/pages/Cases/CaseDetails/Appeal/AppealHistory.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import Skeleton from "react-loading-skeleton"; - -import { useOptionsContext, useFundingContext } from "hooks/useClassicAppealContext"; - -import HowItWorks from "components/HowItWorks"; -import Appeal from "components/Popup/MiniGuides/Appeal"; - -import OptionCard from "./OptionCard"; -import { AppealHeader, StyledTitle } from "./index"; - -const OptionsContainer = styled.div` - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 16px; - margin-top: 12px; -`; - -interface IAppealHistory { - isAppealMiniGuideOpen: boolean; - toggleAppealMiniGuide: () => void; -} - -const AppealHistory: React.FC<IAppealHistory> = ({ isAppealMiniGuideOpen, toggleAppealMiniGuide }) => { - const options = useOptionsContext(); - const { winningChoice, fundedChoices } = useFundingContext(); - - return options && options.length > 2 ? ( - <div> - <AppealHeader> - <StyledTitle>Appeal Results - Last Round</StyledTitle> - <HowItWorks - isMiniGuideOpen={isAppealMiniGuideOpen} - toggleMiniGuide={toggleAppealMiniGuide} - MiniGuideComponent={Appeal} - /> - </AppealHeader> - <OptionsContainer> - {options?.map((option) => ( - <OptionCard - key={option.id} - text={option.title} - winner={option.id === winningChoice} - funding={BigInt(option.paidFee ?? 0)} - required={fundedChoices?.includes(option.id) ? BigInt(option.paidFee ?? 0) : undefined} - canBeSelected={false} - /> - ))} - </OptionsContainer> - </div> - ) : ( - <Skeleton /> - ); -}; -export default AppealHistory; diff --git a/web/src/pages/Cases/CaseDetails/Appeal/Classic/Fund.tsx b/web/src/pages/Cases/CaseDetails/Appeal/Classic/Fund.tsx deleted file mode 100644 index a23f44b5a..000000000 --- a/web/src/pages/Cases/CaseDetails/Appeal/Classic/Fund.tsx +++ /dev/null @@ -1,194 +0,0 @@ -import React, { useMemo, useState } from "react"; -import styled from "styled-components"; - -import { useParams } from "react-router-dom"; -import { useDebounce } from "react-use"; -import { useAccount, useBalance, usePublicClient } from "wagmi"; - -import { Field, Button } from "@kleros/ui-components-library"; - -import { REFETCH_INTERVAL } from "consts/index"; -import { - useSimulateDisputeKitClassicFundAppeal, - useSimulateDisputeKitGatedFundAppeal, - useWriteDisputeKitClassicFundAppeal, - useWriteDisputeKitGatedFundAppeal, -} from "hooks/contracts/generated"; -import { useSelectedOptionContext, useFundingContext, useCountdownContext } from "hooks/useClassicAppealContext"; -import { useParsedAmount } from "hooks/useParsedAmount"; -import { isUndefined } from "utils/index"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import { EnsureChain } from "components/EnsureChain"; -import { ErrorButtonMessage } from "components/ErrorButtonMessage"; -import ClosedCircleIcon from "components/StyledIcons/ClosedCircleIcon"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - gap: 8px; -`; - -const StyledField = styled(Field)` - width: 100%; - & > input { - text-align: center; - } - &:before { - position: absolute; - content: "ETH"; - right: 32px; - top: 50%; - transform: translateY(-50%); - color: ${({ theme }) => theme.primaryText}; - } -`; - -const StyledButton = styled(Button)` - margin: auto; - margin-top: 4px; -`; - -const StyledLabel = styled.label` - align-self: flex-start; -`; - -const useNeedFund = () => { - const { loserSideCountdown } = useCountdownContext(); - const { fundedChoices, winningChoice } = useFundingContext(); - const needFund = - (loserSideCountdown ?? 0) > 0 || - (!isUndefined(fundedChoices) && - !isUndefined(winningChoice) && - fundedChoices.length > 0 && - !fundedChoices.includes(winningChoice)); - - return needFund; -}; - -const useFundAppeal = (parsedAmount: bigint, isGated: boolean, insufficientBalance?: boolean) => { - const { id } = useParams(); - const { selectedOption } = useSelectedOptionContext(); - const { - data: fundAppealConfig, - isLoading, - isError, - } = useSimulateDisputeKitClassicFundAppeal({ - query: { - enabled: !isUndefined(id) && !isUndefined(selectedOption) && !insufficientBalance && !isGated, - }, - args: [BigInt(id ?? 0), BigInt(selectedOption?.id ?? 0)], - value: parsedAmount, - }); - const { writeContractAsync: fundAppeal } = useWriteDisputeKitClassicFundAppeal(); - - const { - data: fundAppealGatedConfig, - isLoading: isLoadingGated, - isError: isErrorGated, - } = useSimulateDisputeKitGatedFundAppeal({ - query: { - enabled: !isUndefined(id) && !isUndefined(selectedOption) && !insufficientBalance && isGated, - }, - args: [BigInt(id ?? 0), BigInt(selectedOption?.id ?? 0)], - value: parsedAmount, - }); - const { writeContractAsync: fundAppealGated } = useWriteDisputeKitGatedFundAppeal(); - - return isGated - ? { - fundAppeal: fundAppealGated, - fundAppealConfig: fundAppealGatedConfig, - isLoading: isLoadingGated, - isError: isErrorGated, - } - : { fundAppeal, fundAppealConfig, isLoading, isError }; -}; - -interface IFund { - amount: `${number}`; - setAmount: (val: string) => void; - setIsOpen: (val: boolean) => void; - isGated: boolean; -} - -const Fund: React.FC<IFund> = ({ amount, setAmount, setIsOpen, isGated }) => { - const needFund = useNeedFund(); - const { address, isDisconnected } = useAccount(); - const { data: balance } = useBalance({ - query: { - refetchInterval: REFETCH_INTERVAL, - }, - address, - }); - const publicClient = usePublicClient(); - - const [isSending, setIsSending] = useState(false); - const [debouncedAmount, setDebouncedAmount] = useState<`${number}` | "">(""); - useDebounce(() => setDebouncedAmount(amount), 500, [amount]); - - const parsedAmount = useParsedAmount(debouncedAmount as `${number}`); - - const insufficientBalance = useMemo(() => { - return balance && balance.value < parsedAmount; - }, [balance, parsedAmount]); - - const { fundAppealConfig, fundAppeal, isLoading, isError } = useFundAppeal( - parsedAmount, - isGated, - insufficientBalance - ); - - const isFundDisabled = useMemo( - () => - isDisconnected || - isSending || - !balance || - insufficientBalance || - Number(parsedAmount) <= 0 || - isError || - isLoading, - [isDisconnected, isSending, balance, insufficientBalance, parsedAmount, isError, isLoading] - ); - - return needFund ? ( - <Container> - <StyledLabel>How much ETH do you want to contribute?</StyledLabel> - <StyledField - type="number" - value={amount} - onChange={(e) => { - setAmount(e.target.value); - }} - placeholder="Amount to fund" - /> - <EnsureChain> - <div> - <StyledButton - disabled={isFundDisabled} - isLoading={(isSending || isLoading) && !insufficientBalance} - text={isDisconnected ? "Connect to Fund" : "Fund"} - onClick={() => { - if (fundAppeal && fundAppealConfig && publicClient) { - setIsSending(true); - wrapWithToast(async () => await fundAppeal(fundAppealConfig.request), publicClient) - .then((res) => setIsOpen(res.status)) - .finally(() => { - setIsSending(false); - }); - } - }} - /> - {insufficientBalance && ( - <ErrorButtonMessage> - <ClosedCircleIcon /> Insufficient balance - </ErrorButtonMessage> - )} - </div> - </EnsureChain> - </Container> - ) : null; -}; - -export default Fund; diff --git a/web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/StageOne.tsx b/web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/StageOne.tsx deleted file mode 100644 index 8183adb04..000000000 --- a/web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/StageOne.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { - useCountdownContext, - useFundingContext, - useOptionsContext, - useSelectedOptionContext, -} from "hooks/useClassicAppealContext"; -import { formatUnitsWei } from "utils/format"; -import { isUndefined } from "utils/index"; - -import OptionCard from "../../OptionCard"; -import StageExplainer from "../StageExplainer"; - -const Container = styled.div` - margin: 24px 0; -`; - -const OptionsContainer = styled.div` - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 16px; - margin-top: 12px; -`; - -interface IStageOne { - setAmount: (val: string) => void; -} - -const StageOne: React.FC<IStageOne> = ({ setAmount }) => { - const { winningChoice, loserRequiredFunding, winnerRequiredFunding } = useFundingContext(); - const options = useOptionsContext(); - const { loserSideCountdown } = useCountdownContext(); - const { selectedOption, setSelectedOption } = useSelectedOptionContext(); - - return ( - <Container> - <StageExplainer countdown={loserSideCountdown} stage={1} /> - <label> Which option do you want to fund? </label> - <OptionsContainer> - {!isUndefined(winnerRequiredFunding) && - !isUndefined(loserRequiredFunding) && - options?.map((option) => { - const requiredFunding = option.id === winningChoice ? winnerRequiredFunding : loserRequiredFunding; - return ( - <OptionCard - key={option.id} - text={option.title} - selected={option.id === selectedOption?.id} - winner={option.id === winningChoice} - funding={BigInt(option.paidFee ?? 0)} - required={requiredFunding} - canBeSelected={!option?.funded} - onClick={() => { - setSelectedOption(option); - setAmount(formatUnitsWei(requiredFunding)); - }} - /> - ); - })} - </OptionsContainer> - </Container> - ); -}; - -export default StageOne; diff --git a/web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/StageTwo.tsx b/web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/StageTwo.tsx deleted file mode 100644 index 1bc48cdfc..000000000 --- a/web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/StageTwo.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import React, { useEffect, useMemo } from "react"; -import styled from "styled-components"; - -import Skeleton from "react-loading-skeleton"; - -import { - useCountdownContext, - useFundingContext, - useOptionsContext, - useSelectedOptionContext, -} from "hooks/useClassicAppealContext"; -import { formatUnitsWei } from "utils/format"; -import { isUndefined } from "utils/index"; - -import OptionCard from "../../OptionCard"; -import StageExplainer from "../StageExplainer"; - -const Container = styled.div` - margin: 24px 0; -`; - -const OptionsContainer = styled.div` - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 16px; - margin-top: 12px; -`; - -interface IStageTwo { - setAmount: (val: string) => void; -} - -const StageTwo: React.FC<IStageTwo> = ({ setAmount }) => { - const { winningChoice, winnerRequiredFunding, fundedChoices } = useFundingContext(); - const { winnerSideCountdown } = useCountdownContext(); - const options = useOptionsContext(); - const { selectedOption, setSelectedOption } = useSelectedOptionContext(); - const choice = useMemo(() => options?.find((option) => option.id === winningChoice), [options, winningChoice]); - - useEffect(() => { - if (!isUndefined(choice)) setSelectedOption(choice); - if (!isUndefined(winnerRequiredFunding)) setAmount(formatUnitsWei(winnerRequiredFunding)); - }, [winnerRequiredFunding, choice]); - - return ( - <Container> - {!isUndefined(choice) && !isUndefined(fundedChoices) ? ( - <> - {fundedChoices.length > 0 && !choice.funded ? ( - <> - <StageExplainer stage={2} countdown={winnerSideCountdown} /> - <OptionsContainer> - <OptionCard - text={choice.title} - selected={choice.id === selectedOption?.id} - winner={true} - funding={BigInt(choice.paidFee ?? 0)} - required={winnerRequiredFunding!} - canBeSelected={false} - onClick={() => setSelectedOption(choice)} - /> - </OptionsContainer> - </> - ) : ( - <label>No losing option has been funded in time, winner is maintained.</label> - )} - </> - ) : ( - <Skeleton height={140} /> - )} - </Container> - ); -}; - -export default StageTwo; diff --git a/web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/index.tsx b/web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/index.tsx deleted file mode 100644 index f5416ed1a..000000000 --- a/web/src/pages/Cases/CaseDetails/Appeal/Classic/Options/index.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { useCountdownContext } from "hooks/useClassicAppealContext"; - -import { StyledSkeleton } from "components/StyledSkeleton"; - -import StageOne from "./StageOne"; -import StageTwo from "./StageTwo"; - -const Container = styled.div` - margin: 24px 0; -`; - -interface IOptions { - setAmount: (val: string) => void; -} - -const Options: React.FC<IOptions> = ({ setAmount }) => { - const { loserSideCountdown, isLoading } = useCountdownContext(); - - return ( - <Container> - {!isLoading ? ( - loserSideCountdown > 0 ? ( - <StageOne setAmount={setAmount} /> - ) : ( - <StageTwo setAmount={setAmount} /> - ) - ) : ( - <StyledSkeleton /> - )} - </Container> - ); -}; - -export default Options; diff --git a/web/src/pages/Cases/CaseDetails/Appeal/Classic/StageExplainer.tsx b/web/src/pages/Cases/CaseDetails/Appeal/Classic/StageExplainer.tsx deleted file mode 100644 index afcbca941..000000000 --- a/web/src/pages/Cases/CaseDetails/Appeal/Classic/StageExplainer.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { Box } from "@kleros/ui-components-library"; - -import HourglassIcon from "svgs/icons/hourglass.svg"; - -import { useOptionsContext } from "hooks/useClassicAppealContext"; -import { secondsToDayHourMinute } from "utils/date"; -import { isUndefined } from "utils/index"; - -const StyledBox = styled(Box)` - border-radius: 3px; - margin: 24px 0; - height: auto; - width: 100%; - padding: 16px 24px; - & > div > p { - display: block; - margin-bottom: 4px; - } -`; - -const CountdownLabel = styled.label` - display: flex; - align-items: center; - justify-content: center; - padding-bottom: 12px; - margin-bottom: 12px; - border-bottom: 1px solid ${({ theme }) => theme.secondaryPurple}; - color: ${({ theme }) => theme.primaryText}; - gap: 8px; - & > svg { - width: 14px; - fill: ${({ theme }) => theme.secondaryPurple}; - } -`; - -interface IStageExplainer { - countdown: number | undefined; - stage: 1 | 2; -} - -const StageOneExplanation: React.FC = () => ( - <div> - {" "} - <p> - Losing options can only be funded <small>before</small> the deadline. - </p> - <p> - If no losing option is <small>fully funded</small> in time, the jury decision is maintained. - </p> - </div> -); - -const StageTwoExplanation: React.FC = () => { - const options = useOptionsContext(); - return ( - <div> - <p> - Loser deadline has <small>finalized</small>, you can only fund the current winner. - </p> - <p> - If the current winner is not fully funded in time, the option funded during the previous stage will be declared - as the final winner. - </p> - <p> - {" "} - Following choices were funded in the stage 1 :{" "} - <small>{options?.map((option) => (option?.funded ? option.title : null))}</small> - </p> - </div> - ); -}; - -const StageExplainer: React.FC<IStageExplainer> = ({ countdown, stage }) => { - return ( - <StyledBox> - <CountdownLabel> - {!isUndefined(countdown) ? ( - <> - <HourglassIcon /> - {countdown > 0 ? secondsToDayHourMinute(countdown) : <span>Time's up</span>} - </> - ) : null} - </CountdownLabel> - {stage === 1 ? <StageOneExplanation /> : <StageTwoExplanation />} - </StyledBox> - ); -}; - -export default StageExplainer; diff --git a/web/src/pages/Cases/CaseDetails/Appeal/Classic/index.tsx b/web/src/pages/Cases/CaseDetails/Appeal/Classic/index.tsx deleted file mode 100644 index 0061a0101..000000000 --- a/web/src/pages/Cases/CaseDetails/Appeal/Classic/index.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React, { useState } from "react"; - -import AppealIcon from "svgs/icons/appeal.svg"; - -import { useSelectedOptionContext } from "hooks/useClassicAppealContext"; -import { isUndefined } from "utils/index"; - -import HowItWorks from "components/HowItWorks"; -import Popup, { PopupType } from "components/Popup"; -import Appeal from "components/Popup/MiniGuides/Appeal"; - -import { AppealHeader, StyledTitle } from ".."; - -import Fund from "./Fund"; -import Options from "./Options"; - -interface IClassic { - isAppealMiniGuideOpen: boolean; - toggleAppealMiniGuide: () => void; - isGated: boolean; -} - -const Classic: React.FC<IClassic> = ({ isAppealMiniGuideOpen, toggleAppealMiniGuide, isGated }) => { - const [isPopupOpen, setIsPopupOpen] = useState(false); - const [amount, setAmount] = useState(""); - const { selectedOption } = useSelectedOptionContext(); - - return ( - <> - {isPopupOpen && ( - <Popup - title="Thanks for Funding the Appeal" - icon={AppealIcon} - popupType={PopupType.APPEAL} - setIsOpen={setIsPopupOpen} - setAmount={setAmount} - option={!isUndefined(selectedOption) ? selectedOption.title : ""} - amount={amount} - /> - )} - <AppealHeader> - <StyledTitle>Appeal crowdfunding</StyledTitle> - <HowItWorks - isMiniGuideOpen={isAppealMiniGuideOpen} - toggleMiniGuide={toggleAppealMiniGuide} - MiniGuideComponent={Appeal} - /> - </AppealHeader> - <label> The jury decision is appealed when two options are fully funded. </label> - <Options setAmount={setAmount} /> - <Fund amount={amount as `${number}`} setAmount={setAmount} setIsOpen={setIsPopupOpen} {...{ isGated }} /> - </> - ); -}; - -export default Classic; diff --git a/web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx b/web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx deleted file mode 100644 index 1fa2ec2d9..000000000 --- a/web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { css } from "styled-components"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; -import { landscapeStyle } from "styles/landscapeStyle"; - -import { Card, Radio, LinearProgress } from "@kleros/ui-components-library"; - -import { useMeasure } from "react-use"; -import { formatEther } from "viem"; - -import { isUndefined } from "utils/index"; - -import Gavel from "svgs/icons/gavel.svg"; - -const StyledCard = styled(Card)<{ canBeSelected: boolean }>` - ${hoverShortTransitionTiming} - width: 100%; - padding: 16px; - - :hover { - cursor: ${({ canBeSelected }) => (canBeSelected ? "pointer" : "auto")}; - } - - ${landscapeStyle( - () => css` - padding: 24px; - ` - )} -`; - -const WinnerLabel = styled.label<{ winner: boolean }>` - color: ${({ theme, winner }) => (winner ? theme.success : theme.warning)}; - svg { - width: 12px; - margin-right: 8px; - fill: ${({ theme, winner }) => (winner ? theme.success : theme.warning)}; - } -`; - -const StyledRadio = styled(Radio)` - padding-left: 24px; - > input { - display: none; - } -`; - -const TopContainer = styled.div` - display: flex; - justify-content: space-between; - height: 50%; -`; - -const TextContainer = styled.div` - display: flex; - flex-direction: column; - flex-grow: 1; - min-width: 0; -`; - -const BlockLabel = styled.label` - display: block; - font-weight: 600; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - max-width: 100%; -`; - -const LabelContainer = styled.div` - width: 100%; - display: flex; - justify-content: center; -`; - -interface IOptionCard extends React.HTMLAttributes<HTMLDivElement> { - text: string; - funding: bigint; - required?: bigint; - winner?: boolean; - selected?: boolean; - canBeSelected?: boolean; -} - -const OptionCard: React.FC<IOptionCard> = ({ - text, - funding, - required, - winner, - selected, - canBeSelected = true, - ...props -}) => { - const [ref, { width }] = useMeasure(); - const [fundingLabel, progress] = useMemo(() => { - if (!isUndefined(required)) - if (funding >= required) return ["Fully funded!", 100]; - else - return [ - `${formatEther(funding)} out of ${formatEther(required)} ETH required.`, - Number((funding * 100n) / required), - ]; - else if (funding > 0n) return [`Funded with ${formatEther(funding)} ETH.`, 30]; - else return ["0 ETH contributed to this option", 0]; - }, [funding, required]); - - return ( - <StyledCard hover {...props} {...{ canBeSelected, ref }}> - <TopContainer> - <TextContainer> - <BlockLabel>{text}</BlockLabel> - <WinnerLabel winner={winner ? true : false}> - <Gavel /> - Jury decision - {winner ? "Winner" : "Loser"} - </WinnerLabel> - </TextContainer> - {canBeSelected && <StyledRadio label="" checked={selected} />} - </TopContainer> - <LabelContainer> - <label>{fundingLabel}</label> - </LabelContainer> - <LinearProgress progress={progress} width={width} /> - </StyledCard> - ); -}; - -export default OptionCard; diff --git a/web/src/pages/Cases/CaseDetails/Appeal/Shutter/Fund.tsx b/web/src/pages/Cases/CaseDetails/Appeal/Shutter/Fund.tsx deleted file mode 100644 index 34c575236..000000000 --- a/web/src/pages/Cases/CaseDetails/Appeal/Shutter/Fund.tsx +++ /dev/null @@ -1,176 +0,0 @@ -import React, { useMemo, useState } from "react"; -import styled from "styled-components"; - -import { useParams } from "react-router-dom"; -import { useDebounce } from "react-use"; -import { useAccount, useBalance, usePublicClient } from "wagmi"; - -import { Field, Button } from "@kleros/ui-components-library"; - -import { REFETCH_INTERVAL } from "consts/index"; -import { - useSimulateDisputeKitGatedShutterFundAppeal, - useSimulateDisputeKitShutterFundAppeal, - useWriteDisputeKitGatedShutterFundAppeal, - useWriteDisputeKitShutterFundAppeal, -} from "hooks/contracts/generated"; -import { useSelectedOptionContext, useFundingContext, useCountdownContext } from "hooks/useClassicAppealContext"; -import { useParsedAmount } from "hooks/useParsedAmount"; -import { isUndefined } from "utils/index"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import { EnsureChain } from "components/EnsureChain"; -import { ErrorButtonMessage } from "components/ErrorButtonMessage"; -import ClosedCircleIcon from "components/StyledIcons/ClosedCircleIcon"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - gap: 8px; -`; - -const StyledField = styled(Field)` - width: 100%; - & > input { - text-align: center; - } - &:before { - position: absolute; - content: "ETH"; - right: 32px; - top: 50%; - transform: translateY(-50%); - color: ${({ theme }) => theme.primaryText}; - } -`; - -const StyledButton = styled(Button)` - margin: auto; - margin-top: 4px; -`; - -const StyledLabel = styled.label` - align-self: flex-start; -`; - -const useNeedFund = () => { - const { loserSideCountdown } = useCountdownContext(); - const { fundedChoices, winningChoice } = useFundingContext(); - return ( - (loserSideCountdown ?? 0) > 0 || - (!isUndefined(fundedChoices) && - !isUndefined(winningChoice) && - fundedChoices.length > 0 && - !fundedChoices.includes(winningChoice)) - ); -}; - -const useFundAppeal = (parsedAmount: bigint, isGated: boolean, insufficientBalance?: boolean) => { - const { id } = useParams(); - const { selectedOption } = useSelectedOptionContext(); - const { - data: fundAppealConfig, - isLoading, - isError, - } = useSimulateDisputeKitShutterFundAppeal({ - query: { enabled: !isUndefined(id) && !isUndefined(selectedOption) && !insufficientBalance && !isGated }, - args: [BigInt(id ?? 0), BigInt(selectedOption?.id ?? 0)], - value: parsedAmount, - }); - const { writeContractAsync: fundAppeal } = useWriteDisputeKitShutterFundAppeal(); - - const { - data: fundAppealGatedConfig, - isLoading: isLoadingGated, - isError: isErrorGated, - } = useSimulateDisputeKitGatedShutterFundAppeal({ - query: { enabled: !isUndefined(id) && !isUndefined(selectedOption) && !insufficientBalance && isGated }, - args: [BigInt(id ?? 0), BigInt(selectedOption?.id ?? 0)], - value: parsedAmount, - }); - const { writeContractAsync: fundAppealGated } = useWriteDisputeKitGatedShutterFundAppeal(); - - return isGated - ? { - fundAppeal: fundAppealGated, - fundAppealConfig: fundAppealGatedConfig, - isLoading: isLoadingGated, - isError: isErrorGated, - } - : { fundAppeal, fundAppealConfig, isLoading, isError }; -}; - -interface IFund { - amount: `${number}`; - setAmount: (val: string) => void; - setIsOpen: (val: boolean) => void; - isGated: boolean; -} - -const Fund: React.FC<IFund> = ({ amount, setAmount, setIsOpen, isGated }) => { - const needFund = useNeedFund(); - const { address, isDisconnected } = useAccount(); - const { data: balance } = useBalance({ - query: { refetchInterval: REFETCH_INTERVAL }, - address, - }); - const publicClient = usePublicClient(); - const [isSending, setIsSending] = useState(false); - const [debouncedAmount, setDebouncedAmount] = useState<`${number}` | "">(""); - useDebounce(() => setDebouncedAmount(amount), 500, [amount]); - const parsedAmount = useParsedAmount(debouncedAmount as `${number}`); - const insufficientBalance = useMemo(() => balance && balance.value < parsedAmount, [balance, parsedAmount]); - const { fundAppealConfig, fundAppeal, isLoading, isError } = useFundAppeal( - parsedAmount, - isGated, - insufficientBalance - ); - const isFundDisabled = useMemo( - () => - isDisconnected || - isSending || - !balance || - insufficientBalance || - Number(parsedAmount) <= 0 || - isError || - isLoading, - [isDisconnected, isSending, balance, insufficientBalance, parsedAmount, isError, isLoading] - ); - - return needFund ? ( - <Container> - <StyledLabel>How much ETH do you want to contribute?</StyledLabel> - <StyledField - type="number" - value={amount} - onChange={(e) => setAmount(e.target.value)} - placeholder="Amount to fund" - /> - <EnsureChain> - <div> - <StyledButton - disabled={isFundDisabled} - isLoading={(isSending || isLoading) && !insufficientBalance} - text={isDisconnected ? "Connect to Fund" : "Fund"} - onClick={() => { - if (fundAppeal && fundAppealConfig && publicClient) { - setIsSending(true); - wrapWithToast(async () => await fundAppeal(fundAppealConfig.request), publicClient) - .then((res) => setIsOpen(res.status)) - .finally(() => setIsSending(false)); - } - }} - /> - {insufficientBalance && ( - <ErrorButtonMessage> - <ClosedCircleIcon /> Insufficient balance - </ErrorButtonMessage> - )} - </div> - </EnsureChain> - </Container> - ) : null; -}; - -export default Fund; diff --git a/web/src/pages/Cases/CaseDetails/Appeal/Shutter/index.tsx b/web/src/pages/Cases/CaseDetails/Appeal/Shutter/index.tsx deleted file mode 100644 index 708cd4309..000000000 --- a/web/src/pages/Cases/CaseDetails/Appeal/Shutter/index.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React, { useState } from "react"; - -import AppealIcon from "svgs/icons/appeal.svg"; - -import { useSelectedOptionContext } from "hooks/useClassicAppealContext"; - -import HowItWorks from "components/HowItWorks"; -import Popup, { PopupType } from "components/Popup"; -import Appeal from "components/Popup/MiniGuides/Appeal"; - -import { AppealHeader, StyledTitle } from ".."; -import Options from "../Classic/Options"; - -import Fund from "./Fund"; - -interface IShutter { - isAppealMiniGuideOpen: boolean; - toggleAppealMiniGuide: () => void; - isGated: boolean; -} - -const Shutter: React.FC<IShutter> = ({ isAppealMiniGuideOpen, toggleAppealMiniGuide, isGated }) => { - const [isPopupOpen, setIsPopupOpen] = useState(false); - const [amount, setAmount] = useState(""); - const { selectedOption } = useSelectedOptionContext(); - - return ( - <> - {isPopupOpen && ( - <Popup - title="Thanks for Funding the Appeal" - icon={AppealIcon} - popupType={PopupType.APPEAL} - setIsOpen={setIsPopupOpen} - setAmount={setAmount} - option={selectedOption?.title ?? ""} - amount={amount} - /> - )} - <AppealHeader> - <StyledTitle>Appeal crowdfunding</StyledTitle> - <HowItWorks - isMiniGuideOpen={isAppealMiniGuideOpen} - toggleMiniGuide={toggleAppealMiniGuide} - MiniGuideComponent={Appeal} - /> - </AppealHeader> - <label>The jury decision is appealed when two options are fully funded.</label> - <Options setAmount={setAmount} /> - <Fund amount={amount as `${number}`} setAmount={setAmount} setIsOpen={setIsPopupOpen} {...{ isGated }} /> - </> - ); -}; - -export default Shutter; diff --git a/web/src/pages/Cases/CaseDetails/Appeal/index.tsx b/web/src/pages/Cases/CaseDetails/Appeal/index.tsx deleted file mode 100644 index a7e9f3a48..000000000 --- a/web/src/pages/Cases/CaseDetails/Appeal/index.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { useParams } from "react-router-dom"; -import { useToggle } from "react-use"; - -import { DisputeKits } from "consts/index"; -import { Periods } from "consts/periods"; -import { useDisputeKitAddresses } from "hooks/useDisputeKitAddresses"; - -import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import AppealHistory from "./AppealHistory"; -import Classic from "./Classic"; -import Shutter from "./Shutter"; - -const Container = styled.div` - padding: 16px; - - ${landscapeStyle( - () => css` - padding: 32px; - ` - )} -`; - -export const AppealHeader = styled.div` - display: flex; - flex-direction: column; - align-items: center; - justify-content: space-between; - margin-bottom: 24px; - gap: 12px; - - ${landscapeStyle( - () => css` - flex-direction: row; - ` - )} -`; - -export const StyledTitle = styled.h1` - margin: 0; - font-size: ${responsiveSize(18, 24)}; -`; - -const Appeal: React.FC<{ currentPeriodIndex: number }> = ({ currentPeriodIndex }) => { - const [isAppealMiniGuideOpen, toggleAppealMiniGuide] = useToggle(false); - const { id } = useParams(); - const { data: disputeData } = useDisputeDetailsQuery(id); - const disputeKitAddress = disputeData?.dispute?.currentRound?.disputeKit?.address; - const { disputeKitName } = useDisputeKitAddresses({ disputeKitAddress }); - const isClassicDisputeKit = disputeKitName === DisputeKits.Classic || disputeKitName === DisputeKits.Gated; - const isShutterDisputeKit = disputeKitName === DisputeKits.Shutter || disputeKitName === DisputeKits.GatedShutter; - const isGated = Boolean(disputeKitName?.includes("Gated")); - return ( - <Container> - {Periods.appeal === currentPeriodIndex ? ( - <> - {isClassicDisputeKit && ( - <Classic - isAppealMiniGuideOpen={isAppealMiniGuideOpen} - toggleAppealMiniGuide={toggleAppealMiniGuide} - {...{ isGated }} - /> - )} - {isShutterDisputeKit && ( - <Shutter - isAppealMiniGuideOpen={isAppealMiniGuideOpen} - toggleAppealMiniGuide={toggleAppealMiniGuide} - {...{ isGated }} - /> - )} - </> - ) : ( - <AppealHistory isAppealMiniGuideOpen={isAppealMiniGuideOpen} toggleAppealMiniGuide={toggleAppealMiniGuide} /> - )} - </Container> - ); -}; - -export default Appeal; diff --git a/web/src/pages/Cases/CaseDetails/Evidence/EvidenceSearch.tsx b/web/src/pages/Cases/CaseDetails/Evidence/EvidenceSearch.tsx deleted file mode 100644 index 60a78da4d..000000000 --- a/web/src/pages/Cases/CaseDetails/Evidence/EvidenceSearch.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React, { useState } from "react"; -import styled from "styled-components"; - -import { useAccount } from "wagmi"; - -import { Button, Searchbar } from "@kleros/ui-components-library"; - -import { isUndefined } from "src/utils"; - -import { responsiveSize } from "styles/responsiveSize"; - -import { EnsureChain } from "components/EnsureChain"; - -import SubmitEvidenceModal from "./SubmitEvidenceModal"; - -const SearchContainer = styled.div` - width: 100%; - display: flex; - flex-wrap: wrap; - align-items: center; - gap: ${responsiveSize(16, 28)}; -`; - -const StyledSearchBar = styled(Searchbar)` - min-width: 220px; - flex: 1; -`; - -const StyledButton = styled(Button)` - align-self: flex-end; -`; - -interface IEvidenceSearch { - search?: string; - setSearch: (search: string) => void; - evidenceGroup?: bigint; -} - -const EvidenceSearch: React.FC<IEvidenceSearch> = ({ search, setSearch, evidenceGroup }) => { - const [isModalOpen, setIsModalOpen] = useState(false); - const { address } = useAccount(); - - return ( - <> - {!isUndefined(evidenceGroup) && ( - <SubmitEvidenceModal isOpen={isModalOpen} close={() => setIsModalOpen(false)} {...{ evidenceGroup }} /> - )} - - <SearchContainer> - <StyledSearchBar - dir="auto" - placeholder="Search evidence by number, word, or submitter" - onChange={(e) => setSearch(e.target.value)} - value={search} - /> - - <EnsureChain> - <StyledButton - text="Submit Evidence" - disabled={typeof address === "undefined" || isModalOpen} - isLoading={isModalOpen} - onClick={() => setIsModalOpen(true)} - /> - </EnsureChain> - </SearchContainer> - </> - ); -}; - -export default EvidenceSearch; diff --git a/web/src/pages/Cases/CaseDetails/Evidence/SubmitEvidenceModal.tsx b/web/src/pages/Cases/CaseDetails/Evidence/SubmitEvidenceModal.tsx deleted file mode 100644 index 12916f302..000000000 --- a/web/src/pages/Cases/CaseDetails/Evidence/SubmitEvidenceModal.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import React, { useCallback, useMemo, useState } from "react"; -import styled from "styled-components"; - -import Modal from "react-modal"; -import { useWalletClient, usePublicClient, useConfig } from "wagmi"; - -import { Roles, useAtlasProvider } from "@kleros/kleros-app"; -import { Textarea, Button, FileUploader } from "@kleros/ui-components-library"; - -import { simulateEvidenceModuleSubmitEvidence } from "hooks/contracts/generated"; -import { wrapWithToast, errorToast, infoToast, successToast } from "utils/wrapWithToast"; - -import { getFileUploaderMsg, isEmpty } from "src/utils"; - -import EnsureAuth from "components/EnsureAuth"; -import { EnsureChain } from "components/EnsureChain"; - -const StyledModal = styled(Modal)` - position: absolute; - top: 50%; - left: 50%; - right: auto; - bottom: auto; - margin-right: -50%; - transform: translate(-50%, -50%); - height: auto; - width: 80%; - border: 1px solid ${({ theme }) => theme.stroke}; - border-radius: 3px; - background-color: ${({ theme }) => theme.whiteBackground}; - - display: flex; - flex-direction: column; - align-items: center; - padding: 16px; - gap: 16px; -`; - -const StyledTextArea = styled(Textarea)` - width: 100%; - height: 200px; -`; - -const StyledFileUploader = styled(FileUploader)` - width: 100%; - margin-bottom: 50px; -`; - -const ButtonArea = styled.div` - width: 100%; - display: flex; - justify-content: space-between; -`; - -const SubmitEvidenceModal: React.FC<{ - isOpen: boolean; - evidenceGroup: bigint; - close: () => void; -}> = ({ isOpen, evidenceGroup, close }) => { - const { data: walletClient } = useWalletClient(); - const publicClient = usePublicClient(); - const wagmiConfig = useConfig(); - const [isSending, setIsSending] = useState(false); - const [message, setMessage] = useState(""); - const [file, setFile] = useState<File>(); - const { uploadFile, roleRestrictions } = useAtlasProvider(); - - const isDisabled = useMemo(() => isSending || isEmpty(message), [isSending, message]); - - const submitEvidence = useCallback(async () => { - try { - setIsSending(true); - const evidenceJSON = await constructEvidence(uploadFile, message, file); - - const { request } = await simulateEvidenceModuleSubmitEvidence(wagmiConfig, { - args: [BigInt(evidenceGroup), JSON.stringify(evidenceJSON)], - }); - - if (!walletClient || !publicClient) return; - await wrapWithToast(async () => await walletClient.writeContract(request), publicClient) - .then(() => { - setMessage(""); - close(); - }) - .finally(() => setIsSending(false)); - } catch (error) { - setIsSending(false); - errorToast("Failed to submit evidence."); - console.error("Error in submitEvidence:", error); - } - }, [publicClient, wagmiConfig, walletClient, close, evidenceGroup, file, message, setIsSending, uploadFile]); - - return ( - <StyledModal {...{ isOpen }} shouldCloseOnEsc shouldCloseOnOverlayClick onRequestClose={close}> - <h1>Submit New Evidence</h1> - <StyledTextArea - dir="auto" - value={message} - onChange={(e) => setMessage(e.target.value)} - placeholder="Your Arguments" - /> - <StyledFileUploader - callback={(file: File) => setFile(file)} - msg={getFileUploaderMsg(Roles.Evidence, roleRestrictions)} - variant="info" - /> - <ButtonArea> - <Button variant="secondary" disabled={isSending} text="Return" onClick={close} /> - <EnsureChain> - <EnsureAuth> - <Button text="Submit" isLoading={isSending} disabled={isDisabled} onClick={submitEvidence} /> - </EnsureAuth> - </EnsureChain> - </ButtonArea> - </StyledModal> - ); -}; - -const constructEvidence = async ( - uploadFile: (file: File, role: Roles) => Promise<string | null>, - msg: string, - file?: File -) => { - let fileURI: string | null = null; - if (file) { - infoToast("Uploading to IPFS"); - fileURI = await uploadFile(file, Roles.Evidence).catch((err) => { - // eslint-disable-next-line no-console - console.log(err); - errorToast(`Upload failed: ${err?.message}`); - return null; - }); - if (!fileURI) throw new Error("Error uploading evidence file"); - successToast("Uploaded successfully!"); - } - return { name: "Evidence", description: msg, fileURI }; -}; - -export default SubmitEvidenceModal; diff --git a/web/src/pages/Cases/CaseDetails/Evidence/index.tsx b/web/src/pages/Cases/CaseDetails/Evidence/index.tsx deleted file mode 100644 index 0a8adde07..000000000 --- a/web/src/pages/Cases/CaseDetails/Evidence/index.tsx +++ /dev/null @@ -1,165 +0,0 @@ -import React, { useCallback, useMemo, useRef, useState } from "react"; -import styled, { css } from "styled-components"; - -import { useParams } from "react-router-dom"; -import { useDebounce } from "react-use"; - -import { Button } from "@kleros/ui-components-library"; - -import DownArrow from "svgs/icons/arrow-down.svg"; - -import { useSpamEvidence } from "hooks/useSpamEvidence"; - -import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; -import { useEvidences } from "queries/useEvidences"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import { Divider } from "components/Divider"; -import EvidenceCard from "components/EvidenceCard"; -import { SkeletonEvidenceCard } from "components/StyledSkeleton"; - -import EvidenceSearch from "./EvidenceSearch"; - -const Container = styled.div` - width: 100%; - display: flex; - flex-direction: column; - gap: 16px; - align-items: center; - padding: 20px 16px 16px; - - ${landscapeStyle( - () => css` - padding: 32px; - ` - )} -`; - -const StyledLabel = styled.label` - display: flex; - margin-top: 16px; - font-size: 16px; -`; - -const ScrollButton = styled(Button)` - align-self: flex-end; - background-color: transparent; - padding: 0; - flex-direction: row-reverse; - gap: 8px; - .button-text { - color: ${({ theme }) => theme.primaryBlue}; - font-weight: 400; - } - .button-svg { - margin: 0; - path { - fill: ${({ theme }) => theme.primaryBlue}; - } - } - - :hover { - background-color: transparent; - .button-svg { - path { - fill: ${({ theme }) => theme.secondaryBlue}; - } - } - .button-text { - color: ${({ theme }) => theme.secondaryBlue}; - } - } -`; - -const SpamLabel = styled.label` - color: ${({ theme }) => theme.primaryBlue}; - align-self: center; - cursor: pointer; -`; - -const Evidence: React.FC = () => { - const { id } = useParams(); - const { data: disputeData } = useDisputeDetailsQuery(id); - const ref = useRef<HTMLDivElement>(null); - const [search, setSearch] = useState<string>(); - const [debouncedSearch, setDebouncedSearch] = useState<string>(); - const [showSpam, setShowSpam] = useState(false); - const { data: spamEvidences } = useSpamEvidence(disputeData?.dispute?.externalDisputeId?.toString()); - - const { data } = useEvidences(disputeData?.dispute?.externalDisputeId?.toString(), debouncedSearch); - - useDebounce(() => setDebouncedSearch(search), 500, [search]); - - const scrollToLatest = useCallback(() => { - if (!ref.current) return; - const latestEvidence = ref.current.lastElementChild; - - if (!latestEvidence) return; - - latestEvidence.scrollIntoView({ behavior: "smooth" }); - }, [ref]); - - const isSpam = useCallback( - (evidenceId: string) => { - return Boolean(spamEvidences?.courtv2EvidenceSpamsByGroupId.evidenceIds?.includes(evidenceId)); - }, - [spamEvidences] - ); - - const evidences = useMemo(() => { - if (!data?.evidences) return; - const spamEvidences = data.evidences.filter((evidence) => isSpam(evidence.id)); - const realEvidences = data.evidences.filter((evidence) => !isSpam(evidence.id)); - return { realEvidences, spamEvidences }; - }, [data, isSpam]); - - return ( - <Container ref={ref}> - <EvidenceSearch {...{ search, setSearch, evidenceGroup: disputeData?.dispute?.externalDisputeId }} /> - <ScrollButton small Icon={DownArrow} text="Scroll to latest" onClick={scrollToLatest} /> - {evidences?.realEvidences ? ( - <> - {evidences?.realEvidences.map( - ({ evidence, sender, timestamp, transactionHash, name, description, fileURI, evidenceIndex }) => ( - <EvidenceCard - key={timestamp} - index={parseInt(evidenceIndex)} - sender={sender?.id} - {...{ evidence, timestamp, transactionHash, name, description, fileURI }} - /> - ) - )} - {spamEvidences && evidences?.spamEvidences.length !== 0 ? ( - <> - <Divider /> - {showSpam ? ( - <> - <SpamLabel onClick={() => setShowSpam(false)}>Hide spam</SpamLabel> - {evidences?.spamEvidences.map( - ({ evidence, sender, timestamp, transactionHash, name, description, fileURI, evidenceIndex }) => ( - <EvidenceCard - key={timestamp} - index={parseInt(evidenceIndex)} - sender={sender?.id} - {...{ evidence, timestamp, transactionHash, name, description, fileURI }} - /> - ) - )} - </> - ) : ( - <SpamLabel onClick={() => setShowSpam(true)}>Show likely spam</SpamLabel> - )} - </> - ) : null} - </> - ) : ( - <SkeletonEvidenceCard /> - )} - - {data && data.evidences.length === 0 ? <StyledLabel>There is no evidence submitted yet</StyledLabel> : null} - </Container> - ); -}; - -export default Evidence; diff --git a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/DistributeRewards.tsx b/web/src/pages/Cases/CaseDetails/MaintenanceButtons/DistributeRewards.tsx deleted file mode 100644 index f20702276..000000000 --- a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/DistributeRewards.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import React, { useEffect, useMemo, useState } from "react"; -import styled from "styled-components"; - -import { useAccount, usePublicClient } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { klerosCoreAbi, klerosCoreAddress } from "hooks/contracts/generated"; -import useTransactionBatcher, { type TransactionBatcherConfig } from "hooks/useTransactionBatcher"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import useDisputeMaintenanceQuery from "queries/useDisputeMaintenanceQuery"; - -import { Period } from "src/graphql/graphql"; -import { isUndefined } from "src/utils"; - -import { IBaseMaintenanceButton } from "."; - -const StyledButton = styled(Button)` - width: 100%; -`; - -interface IDistributeRewards extends IBaseMaintenanceButton { - roundIndex?: string; - period?: string; -} - -const DistributeRewards: React.FC<IDistributeRewards> = ({ id, roundIndex, setIsOpen, period }) => { - const [isSending, setIsSending] = useState(false); - const [contractConfigs, setContractConfigs] = useState<TransactionBatcherConfig>(); - const publicClient = usePublicClient(); - const { chainId } = useAccount(); - - const { data: maintenanceData } = useDisputeMaintenanceQuery(id); - - const rewardsDispersed = useMemo( - () => maintenanceData?.dispute?.rounds.every((round) => round.jurorRewardsDispersed), - [maintenanceData] - ); - - useEffect(() => { - const rounds = maintenanceData?.dispute?.rounds; - if (isUndefined(id) || isUndefined(roundIndex) || isUndefined(rounds)) return; - - const baseArgs = { - abi: klerosCoreAbi, - address: klerosCoreAddress[chainId ?? DEFAULT_CHAIN], - functionName: "execute", - }; - - const argsArr: TransactionBatcherConfig = []; - - for (const round of rounds) { - argsArr.push({ - ...baseArgs, - args: [BigInt(id), BigInt(round.id.split("-")[1]), BigInt(round.nbVotes) * BigInt(2)], - }); - } - - setContractConfigs(argsArr); - }, [id, roundIndex, chainId, maintenanceData]); - - const { - executeBatch, - batchConfig, - isLoading: isLoadingConfig, - isError, - } = useTransactionBatcher(contractConfigs, { - enabled: !isUndefined(period) && period === Period.Execution && !rewardsDispersed, - }); - - const isLoading = useMemo(() => isLoadingConfig || isSending, [isLoadingConfig, isSending]); - const isDisabled = useMemo( - () => isUndefined(id) || isError || isLoading || period !== Period.Execution || rewardsDispersed, - [id, isError, isLoading, period, rewardsDispersed] - ); - - const handleClick = () => { - if (!publicClient || !batchConfig) return; - setIsSending(true); - - wrapWithToast(async () => await executeBatch(batchConfig), publicClient).finally(() => { - setIsSending(false); - setIsOpen(false); - }); - }; - return <StyledButton text="Juror Rewards" small isLoading={isLoading} disabled={isDisabled} onClick={handleClick} />; -}; - -export default DistributeRewards; diff --git a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/DrawButton.tsx b/web/src/pages/Cases/CaseDetails/MaintenanceButtons/DrawButton.tsx deleted file mode 100644 index 7cef9190a..000000000 --- a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/DrawButton.tsx +++ /dev/null @@ -1,118 +0,0 @@ -import React, { useMemo, useState } from "react"; -import styled from "styled-components"; - -import { Link } from "react-router-dom"; -import { isAddress } from "viem"; -import { usePublicClient } from "wagmi"; - -import { Button, Field } from "@kleros/ui-components-library"; - -import { useSimulateKlerosCoreDraw, useWriteKlerosCoreDraw } from "hooks/contracts/generated"; -import { useSortitionModulePhase } from "hooks/useSortitionModule"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import useDisputeMaintenanceQuery from "queries/useDisputeMaintenanceQuery"; - -import { isKlerosUniversity } from "src/consts"; -import { Period } from "src/graphql/graphql"; -import { isUndefined } from "src/utils"; - -import { Phases } from "components/Phase"; - -import { IBaseMaintenanceButton } from "."; - -const StyledButton = styled(Button)` - width: 100%; -`; - -const StyledLabel = styled.label``; -interface IDrawButton extends IBaseMaintenanceButton { - numberOfVotes?: string; - period?: string; -} - -const isUniversity = isKlerosUniversity(); - -const DrawButton: React.FC<IDrawButton> = ({ id, numberOfVotes, setIsOpen, period }) => { - const publicClient = usePublicClient(); - const { data: maintenanceData } = useDisputeMaintenanceQuery(id); - const { data: phase } = useSortitionModulePhase(); - const [isSending, setIsSending] = useState(false); - const [drawJuror, setDrawJuror] = useState(""); - - const isDrawn = useMemo(() => maintenanceData?.dispute?.currentRound.jurorsDrawn, [maintenanceData]); - - const canDraw = useMemo( - () => - !isUndefined(maintenanceData) && - !isDrawn && - period === Period.Evidence && - (isUniversity ? true : phase === Phases.drawing), - [maintenanceData, isDrawn, phase, period, isUniversity] - ); - - const needToPassPhase = useMemo( - () => !isUndefined(maintenanceData) && !isDrawn && period === Period.Evidence && phase !== Phases.drawing, - [maintenanceData, isDrawn, phase, period] - ); - - const drawIterations = useMemo(() => Math.min(100, Number(numberOfVotes ?? 0) * 4), [numberOfVotes]); - - const { - data: drawConfig, - isLoading: isLoadingConfig, - isError, - } = useSimulateKlerosCoreDraw({ - query: { - enabled: - !isUndefined(id) && - !isUndefined(numberOfVotes) && - !isUndefined(period) && - canDraw && - (isUniversity ? isAddress(drawJuror) : true), - }, - // eslint-disable-next-line - // @ts-ignore - args: [BigInt(id ?? 0), isUniversity ? drawJuror : drawIterations], - }); - - const { writeContractAsync: draw } = useWriteKlerosCoreDraw(); - - const isLoading = useMemo(() => isLoadingConfig || isSending, [isLoadingConfig, isSending]); - const isDisabled = useMemo( - () => - isUndefined(id) || - isUndefined(numberOfVotes) || - isError || - isLoading || - !canDraw || - (isUniversity && !isAddress(drawJuror)), - [id, numberOfVotes, isError, isLoading, canDraw, isUniversity, drawJuror] - ); - const handleClick = () => { - if (!drawConfig || !publicClient) return; - - setIsSending(true); - - wrapWithToast(async () => await draw(drawConfig.request), publicClient).finally(() => { - setIsSending(false); - setIsOpen(false); - }); - }; - return ( - <> - {needToPassPhase && !isUniversity ? ( - <StyledLabel> - Jurors can be drawn in <small>drawing</small> phase. - <br /> Pass phase <Link to="/courts/1/purpose/#maintenance">here</Link>. - </StyledLabel> - ) : null} - {isUniversity && canDraw ? ( - <Field placeholder="Juror Address" onChange={(e) => setDrawJuror(e.target.value)} value={drawJuror} /> - ) : null} - <StyledButton text="Draw" small isLoading={isLoading} disabled={isDisabled} onClick={handleClick} /> - </> - ); -}; - -export default DrawButton; diff --git a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/ExecuteRuling.tsx b/web/src/pages/Cases/CaseDetails/MaintenanceButtons/ExecuteRuling.tsx deleted file mode 100644 index 42f5e9ac7..000000000 --- a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/ExecuteRuling.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React, { useMemo, useState } from "react"; -import styled from "styled-components"; - -import { usePublicClient } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { useSimulateKlerosCoreExecuteRuling, useWriteKlerosCoreExecuteRuling } from "hooks/contracts/generated"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import { Period } from "src/graphql/graphql"; -import { isUndefined } from "src/utils"; - -import { IBaseMaintenanceButton } from "."; - -const StyledButton = styled(Button)` - width: 100%; -`; - -interface IExecuteRulingButton extends IBaseMaintenanceButton { - period?: string; - ruled?: boolean; -} - -const ExecuteRulingButton: React.FC<IExecuteRulingButton> = ({ id, setIsOpen, period, ruled }) => { - const [isSending, setIsSending] = useState(false); - const publicClient = usePublicClient(); - - const { - data: ruleConfig, - isLoading: isLoadingConfig, - isError, - } = useSimulateKlerosCoreExecuteRuling({ - query: { - enabled: !isUndefined(id) && !isUndefined(period) && period === Period.Execution && !ruled, - }, - args: [BigInt(id ?? 0)], - }); - - const { writeContractAsync: rule } = useWriteKlerosCoreExecuteRuling(); - - const isLoading = useMemo(() => isLoadingConfig || isSending, [isLoadingConfig, isSending]); - const isDisabled = useMemo( - () => isUndefined(id) || isError || isLoading || period !== Period.Execution || ruled, - [id, isError, isLoading, period, ruled] - ); - const handleClick = () => { - if (!ruleConfig) return; - - setIsSending(true); - - wrapWithToast(async () => await rule(ruleConfig.request), publicClient).finally(() => { - setIsSending(false); - setIsOpen(false); - }); - }; - return <StyledButton text="Rule" small isLoading={isLoading} disabled={isDisabled} onClick={handleClick} />; -}; - -export default ExecuteRulingButton; diff --git a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/MenuButton.tsx b/web/src/pages/Cases/CaseDetails/MaintenanceButtons/MenuButton.tsx deleted file mode 100644 index 6b6b2397e..000000000 --- a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/MenuButton.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import React from "react"; -import styled, { css, keyframes } from "styled-components"; - -import DottedMenu from "svgs/icons/dotted-menu.svg"; - -const ripple = keyframes` - 0% { - opacity: 0; - transform: scale3d(0.5, 0.5, 1); - } - 10% { - opacity: 0.5; - transform: scale3d(0.75, 0.75, 1); - } - - 100% { - opacity: 0; - transform: scale3d(1.75, 1.75, 1); - } -`; - -const ring = (duration: string, delay: string) => css` - opacity: 0; - position: absolute; - top: 0; - left: 0; - transform: translate(50%); - content: ""; - height: 36px; - width: 36px; - border: 3px solid ${({ theme }) => theme.primaryBlue}; - border-radius: 100%; - animation-name: ${ripple}; - animation-duration: ${duration}; - animation-delay: ${delay}; - animation-iteration-count: infinite; - animation-timing-function: cubic-bezier(0.65, 0, 0.34, 1); - z-index: 0; -`; - -const Container = styled.div<{ displayRipple: boolean }>` - display: flex; - justify-content: center; - align-items: center; - ${({ displayRipple }) => - displayRipple && - css` - &::after { - ${ring("3s", "0s")} - } - &::before { - ${ring("3s", "0.5s")} - } - `} -`; - -const ButtonContainer = styled.div` - border-radius: 50%; - z-index: 1; - background-color: ${({ theme }) => theme.lightBackground}; -`; - -const StyledDottedMenu = styled(DottedMenu)` - cursor: pointer; - width: 36px; - height: 36px; - fill: ${({ theme }) => theme.primaryBlue}; -`; - -interface IMenuButton { - toggle: () => void; - displayRipple: boolean; -} - -const MenuButton: React.FC<IMenuButton> = ({ toggle, displayRipple }) => { - return ( - <Container {...{ displayRipple }}> - <ButtonContainer> - <StyledDottedMenu onClick={toggle} /> - </ButtonContainer> - </Container> - ); -}; - -export default MenuButton; diff --git a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/PassPeriodButton.tsx b/web/src/pages/Cases/CaseDetails/MaintenanceButtons/PassPeriodButton.tsx deleted file mode 100644 index 2d9eb0513..000000000 --- a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/PassPeriodButton.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import React, { useMemo, useState } from "react"; -import styled from "styled-components"; - -import { usePublicClient } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { useSimulateKlerosCorePassPeriod, useWriteKlerosCorePassPeriod } from "hooks/contracts/generated"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import useDisputeMaintenanceQuery from "queries/useDisputeMaintenanceQuery"; - -import { Period } from "src/graphql/graphql"; -import { isUndefined } from "src/utils"; - -import { IBaseMaintenanceButton } from "."; - -const StyledButton = styled(Button)` - width: 100%; -`; - -interface IPassPeriodButton extends IBaseMaintenanceButton { - period?: string; -} - -const PassPeriodButton: React.FC<IPassPeriodButton> = ({ id, setIsOpen, period }) => { - const [isSending, setIsSending] = useState(false); - const publicClient = usePublicClient(); - const { data: maintenanceData } = useDisputeMaintenanceQuery(id); - - const isDrawn = useMemo(() => maintenanceData?.dispute?.currentRound.jurorsDrawn ?? false, [maintenanceData]); - - const { - data: passPeriodConfig, - isLoading: isLoadingConfig, - isError, - } = useSimulateKlerosCorePassPeriod({ - query: { - enabled: - !isUndefined(id) && - !isUndefined(period) && - period !== Period.Execution && - !(period === Period.Evidence && !isDrawn), - }, - args: [BigInt(id ?? 0)], - }); - - const { writeContractAsync: passPeriod } = useWriteKlerosCorePassPeriod(); - - const isLoading = useMemo(() => isLoadingConfig || isSending, [isLoadingConfig, isSending]); - const isDisabled = useMemo( - () => - isUndefined(id) || - isError || - isLoading || - period === Period.Execution || - (period === Period.Evidence && !isDrawn), - [id, isError, isLoading, period, isDrawn] - ); - const handleClick = () => { - if (!passPeriodConfig || !publicClient) return; - - setIsSending(true); - - wrapWithToast(async () => await passPeriod(passPeriodConfig.request), publicClient).finally(() => { - setIsSending(false); - setIsOpen(false); - }); - }; - return <StyledButton text="Pass Period" small isLoading={isLoading} disabled={isDisabled} onClick={handleClick} />; -}; - -export default PassPeriodButton; diff --git a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/WithdrawAppealFees.tsx b/web/src/pages/Cases/CaseDetails/MaintenanceButtons/WithdrawAppealFees.tsx deleted file mode 100644 index eb598e91d..000000000 --- a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/WithdrawAppealFees.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import React, { useEffect, useMemo, useState } from "react"; -import styled from "styled-components"; - -import { useAccount, usePublicClient } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { disputeKitClassicAbi, disputeKitClassicAddress } from "hooks/contracts/generated"; -import useTransactionBatcher, { type TransactionBatcherConfig } from "hooks/useTransactionBatcher"; -import { getLocalRounds } from "utils/getLocalRounds"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import { useClassicAppealQuery } from "queries/useClassicAppealQuery"; -import useDisputeMaintenanceQuery from "queries/useDisputeMaintenanceQuery"; - -import { Period } from "src/graphql/graphql"; -import { isUndefined } from "src/utils"; - -import { IBaseMaintenanceButton } from "."; - -const StyledButton = styled(Button)` - width: 100%; -`; - -interface IWithdrawAppealFees extends IBaseMaintenanceButton { - roundIndex?: number; - period?: string; - ruled?: boolean; -} - -const WithdrawAppealFees: React.FC<IWithdrawAppealFees> = ({ id, roundIndex, setIsOpen, period, ruled }) => { - const [isSending, setIsSending] = useState(false); - const [contractConfigs, setContractConfigs] = useState<TransactionBatcherConfig>(); - const publicClient = usePublicClient(); - const { chainId } = useAccount(); - - const { data: maintenanceData } = useDisputeMaintenanceQuery(id); - const { data: appealData } = useClassicAppealQuery(id); - - const localRounds = useMemo(() => getLocalRounds(appealData?.dispute?.disputeKitDispute), [appealData]); - - const feeDispersed = useMemo( - () => - localRounds ? localRounds.slice(0, localRounds.length - 1).every((round) => round.appealFeesDispersed) : false, - [localRounds] - ); - - const filteredContributions = useMemo(() => { - const deDuplicatedContributions = [ - ...new Set(maintenanceData?.contributions.filter((contribution) => !contribution.rewardWithdrawn)), - ]; - - return deDuplicatedContributions; - }, [maintenanceData]); - - useEffect(() => { - if (isUndefined(id) || isUndefined(roundIndex)) return; - - const baseArgs = { - abi: disputeKitClassicAbi, - address: disputeKitClassicAddress[chainId ?? DEFAULT_CHAIN], - functionName: "withdrawFeesAndRewards", - }; - - const argsArr: TransactionBatcherConfig = []; - - for (const contribution of filteredContributions) { - for (let round = roundIndex; round >= 0; round--) { - argsArr.push({ - ...baseArgs, - args: [BigInt(id), contribution.contributor.id, BigInt(round), contribution.choice], - }); - } - } - - setContractConfigs(argsArr); - }, [id, roundIndex, chainId, filteredContributions]); - - const { - executeBatch, - batchConfig, - isLoading: isLoadingConfig, - isError, - } = useTransactionBatcher(contractConfigs, { - enabled: !isUndefined(period) && period === Period.Execution && Boolean(ruled) && !feeDispersed, - }); - - const isLoading = useMemo(() => isLoadingConfig || isSending, [isLoadingConfig, isSending]); - const isDisabled = useMemo( - () => isUndefined(id) || isError || isLoading || period !== Period.Execution || feeDispersed || !ruled, - [id, isError, isLoading, period, feeDispersed, ruled] - ); - - const handleClick = () => { - if (!publicClient || !batchConfig) return; - setIsSending(true); - - wrapWithToast(async () => await executeBatch(batchConfig), publicClient).finally(() => { - setIsSending(false); - setIsOpen(false); - }); - }; - return <StyledButton text="Appeal Rewards" small isLoading={isLoading} disabled={isDisabled} onClick={handleClick} />; -}; - -export default WithdrawAppealFees; diff --git a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/index.tsx b/web/src/pages/Cases/CaseDetails/MaintenanceButtons/index.tsx deleted file mode 100644 index ad8d1a491..000000000 --- a/web/src/pages/Cases/CaseDetails/MaintenanceButtons/index.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import React, { useEffect, useState } from "react"; -import styled from "styled-components"; - -import { useParams } from "react-router-dom"; - -import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import { Periods } from "src/consts/periods"; -import { Period } from "src/graphql/graphql"; - -import DottedMenuButton from "components/DottedMenuButton"; -import { EnsureChain } from "components/EnsureChain"; -import { Overlay } from "components/Overlay"; - -import DistributeRewards from "./DistributeRewards"; -import DrawButton from "./DrawButton"; -import ExecuteRulingButton from "./ExecuteRuling"; -import PassPeriodButton from "./PassPeriodButton"; -import WithdrawAppealFees from "./WithdrawAppealFees"; - -const Container = styled.div` - width: 36px; - height: 36px; - display: flex; - justify-content: center; - align-items: center; - position: relative; -`; - -const PopupContainer = styled.div` - display: flex; - flex-direction: column; - position: absolute; - height: fit-content; - overflow-y: auto; - z-index: 31; - padding: 27px; - gap: 16px; - border: 1px solid ${({ theme }) => theme.stroke}; - background-color: ${({ theme }) => theme.whiteBackground}; - border-radius: 3px; - box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.06); - - bottom: 0; - left: 0; - transform: translate(-100%, 100%); -`; - -export interface IBaseMaintenanceButton { - setIsOpen: (open: boolean) => void; - id?: string; -} - -const MaintenanceButtons: React.FC = () => { - const { id } = useParams(); - const [isOpen, setIsOpen] = useState(false); - const [displayRipple, setDisplayRipple] = useState(false); - - const { data } = useDisputeDetailsQuery(id); - const dispute = data?.dispute; - - // using interval here instead of useMemo with dispute, since we can't tell when period has timed out, - // we can use useCountdown, but that would trigger the update every 1 sec. so this is ideal. - useEffect(() => { - const rippleCheck = () => { - if (!dispute) return; - - const period = Periods[dispute?.period] ?? 0; - const now = Date.now() / 1000; - - if ( - (dispute.period !== Period.Execution && - now > parseInt(dispute.lastPeriodChange) + parseInt(dispute.court.timesPerPeriod[period])) || - (dispute.period === Period.Execution && !dispute.ruled) - ) { - setDisplayRipple(true); - return; - } - - setDisplayRipple(false); - }; - - // initial check - rippleCheck(); - - const intervalId = setInterval(() => { - if (!dispute) return; - - if (dispute.ruled) { - clearInterval(intervalId); - return; - } - rippleCheck(); - }, 5000); - - return () => clearInterval(intervalId); - }, [dispute]); - - const toggle = () => setIsOpen((prevValue) => !prevValue); - return ( - <Container> - {isOpen ? ( - <> - <Overlay onClick={() => setIsOpen(false)} /> - <PopupContainer> - <EnsureChain> - <> - <DrawButton - {...{ id, setIsOpen }} - numberOfVotes={dispute?.currentRound.nbVotes} - period={dispute?.period} - /> - <PassPeriodButton {...{ id, setIsOpen }} period={dispute?.period} /> - <ExecuteRulingButton {...{ id, setIsOpen }} period={dispute?.period} ruled={dispute?.ruled} /> - <DistributeRewards - {...{ id, setIsOpen }} - roundIndex={dispute?.currentRoundIndex} - period={dispute?.period} - /> - <WithdrawAppealFees - {...{ id, setIsOpen }} - roundIndex={parseInt(dispute?.currentRoundIndex, 10)} - period={dispute?.period} - ruled={dispute?.ruled} - /> - </> - </EnsureChain> - </PopupContainer> - </> - ) : null} - <DottedMenuButton {...{ toggle, displayRipple }} /> - </Container> - ); -}; - -export default MaintenanceButtons; diff --git a/web/src/pages/Cases/CaseDetails/Overview/index.tsx b/web/src/pages/Cases/CaseDetails/Overview/index.tsx deleted file mode 100644 index 0180342c0..000000000 --- a/web/src/pages/Cases/CaseDetails/Overview/index.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { css } from "styled-components"; - -import { useParams } from "react-router-dom"; -import { formatEther } from "viem"; - -import { usePopulatedDisputeData } from "hooks/queries/usePopulatedDisputeData"; -import { useVotingHistory } from "hooks/queries/useVotingHistory"; -import { getLocalRounds } from "utils/getLocalRounds"; - -import { useCourtPolicy } from "queries/useCourtPolicy"; -import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import { DisputeContext } from "components/DisputePreview/DisputeContext"; -import { Policies } from "components/DisputePreview/Policies"; -import DisputeInfo from "components/DisputeView/DisputeInfo"; -import Verdict from "components/Verdict/index"; -import { Divider } from "components/Divider"; - -const Container = styled.div` - width: 100%; - height: auto; - display: flex; - flex-direction: column; - gap: 16px; - padding: 20px 16px 16px; - - ${landscapeStyle( - () => css` - padding: 32px; - gap: 24px; - ` - )} -`; - -interface IOverview { - arbitrable?: `0x${string}`; - courtID?: string; - currentPeriodIndex: number; -} - -const Overview: React.FC<IOverview> = ({ arbitrable, courtID, currentPeriodIndex }) => { - const { id } = useParams(); - const { data: disputeDetails, isError } = usePopulatedDisputeData(id, arbitrable); - const { data: dispute } = useDisputeDetailsQuery(id); - const { data: courtPolicy } = useCourtPolicy(courtID); - const { data: votingHistory } = useVotingHistory(id); - const localRounds = getLocalRounds(votingHistory?.dispute?.disputeKitDispute); - const courtName = courtPolicy?.name; - const court = dispute?.dispute?.court; - const rewards = useMemo(() => (court ? `≥ ${formatEther(court.feeForJuror)} ETH` : undefined), [court]); - const category = disputeDetails?.category; - - return ( - <> - <Container> - <DisputeContext isRpcError={isError} disputeId={id} {...{ votingHistory, disputeDetails, dispute }} /> - <Divider /> - - <Verdict {...{ arbitrable, votingHistory }} /> - <Divider /> - - <DisputeInfo - isOverview={true} - overrideIsList={true} - courtId={court?.id} - court={courtName} - round={localRounds?.length} - {...{ rewards, category }} - /> - </Container> - <Policies - disputePolicyURI={disputeDetails?.policyURI} - courtId={courtID} - attachment={disputeDetails?.attachment} - /> - </> - ); -}; - -export default Overview; diff --git a/web/src/pages/Cases/CaseDetails/Tabs.tsx b/web/src/pages/Cases/CaseDetails/Tabs.tsx deleted file mode 100644 index 0260c631e..000000000 --- a/web/src/pages/Cases/CaseDetails/Tabs.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import React, { useState, useEffect, useMemo } from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -import { useNavigate, useLocation, useParams } from "react-router-dom"; - -import { Tabs as TabsComponent } from "@kleros/ui-components-library"; - -import BullhornIcon from "svgs/icons/bullhorn.svg"; -import DocIcon from "svgs/icons/doc.svg"; -import EyeIcon from "svgs/icons/eye.svg"; -import BalanceIcon from "svgs/icons/law-balance.svg"; - -import { Periods } from "consts/periods"; -import { useDisputeDetailsQuery } from "hooks/queries/useDisputeDetailsQuery"; -import { useVotingHistory } from "hooks/queries/useVotingHistory"; -import { isUndefined } from "utils/index"; -import { isLastRound } from "utils/isLastRound"; - -import { useAppealCost } from "queries/useAppealCost"; - -const StyledTabs = styled(TabsComponent)` - width: 100%; - margin-top: ${responsiveSize(10, 28)}; - > * { - display: flex; - flex-wrap: wrap; - font-size: ${responsiveSize(12, 16)}; - > svg { - margin-right: 8px !important; - } - } -`; - -const TABS = [ - { - text: "Overview", - value: 0, - Icon: EyeIcon, - path: "overview", - }, - { - text: "Evidence", - value: 1, - Icon: DocIcon, - path: "evidence", - }, - { - text: "Voting", - value: 2, - Icon: BalanceIcon, - path: "voting", - }, - { - text: "Appeal", - value: 3, - Icon: BullhornIcon, - path: "appeal", - disabled: false, - }, -]; - -const Tabs: React.FC = () => { - const navigate = useNavigate(); - const { id } = useParams(); - const { data } = useDisputeDetailsQuery(id); - const { data: votingHistory } = useVotingHistory(id); - const { data: appealCost } = useAppealCost(id); - const rounds = votingHistory?.dispute?.rounds ?? [1]; - const dispute = data?.dispute; - const currentPeriodIndex = Periods[dispute?.period ?? 0]; - const currentPathName = useLocation().pathname.split("/").at(-1); - const [currentTab, setCurrentTab] = useState(TABS.findIndex(({ path }) => path === currentPathName)); - useEffect(() => { - setCurrentTab(TABS.findIndex(({ path }) => path === currentPathName)); - }, [currentPathName]); - - const tabs = useMemo(() => { - const updatedTabs = [...TABS]; - updatedTabs[3].disabled = - (parseInt(currentPeriodIndex) < 3 && rounds.length === 1) || - (!isUndefined(appealCost) && isLastRound(appealCost) && parseInt(currentPeriodIndex) === 3); - - return updatedTabs; - }, [currentPeriodIndex, id, rounds.length, appealCost]); - - return ( - <StyledTabs - currentValue={currentTab} - items={tabs} - callback={(n: number) => { - setCurrentTab(n); - navigate(TABS[n].path); - }} - /> - ); -}; - -export default Tabs; diff --git a/web/src/pages/Cases/CaseDetails/Timeline.tsx b/web/src/pages/Cases/CaseDetails/Timeline.tsx deleted file mode 100644 index 3d8af7464..000000000 --- a/web/src/pages/Cases/CaseDetails/Timeline.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { css } from "styled-components"; - -import { Box, Steps } from "@kleros/ui-components-library"; - -import HourglassIcon from "svgs/icons/hourglass.svg"; - -import { Periods } from "consts/periods"; -import { useCountdownContext, useFundingContext } from "hooks/useClassicAppealContext"; -import { useCountdown } from "hooks/useCountdown"; -import useIsDesktop from "hooks/useIsDesktop"; -import { secondsToDayHourMinute } from "utils/date"; - -import { DisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import { isUndefined } from "src/utils"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { StyledSkeleton } from "components/StyledSkeleton"; - -const TimeLineContainer = styled(Box)` - width: 100%; - height: auto; - border-radius: 0px; - background-color: transparent; -`; - -const StyledSteps = styled(Steps)` - display: flex; - justify-content: space-between; - width: 89%; - margin: auto; - - h2 { - font-size: ${responsiveSize(12, 14)}; - } - - [class*="horizontal-bullet__TextWrapper"] { - margin-top: 2px; - } - - ${landscapeStyle( - () => css` - width: 98%; - ` - )} -`; - -const AppealBannerContainer = styled.div` - background-color: ${({ theme }) => theme.whiteBackground}; - border-radius: 3px; - margin-top: 16px; - padding: 12px; - display: flex; - gap: 8px; - align-items: center; - justify-content: center; - & > svg { - width: 14px; - fill: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const Timeline: React.FC<{ - dispute: DisputeDetailsQuery["dispute"]; - currentPeriodIndex: number; -}> = ({ currentPeriodIndex, dispute }) => { - const currentItemIndex = currentPeriodToCurrentItem(currentPeriodIndex, dispute?.court.hiddenVotes); - const items = useTimeline(dispute, currentPeriodIndex); - - return ( - <TimeLineContainer> - <StyledSteps horizontal {...{ items, currentItemIndex, currentPeriodIndex }} /> - {currentPeriodIndex === Periods.appeal ? <AppealBanner /> : null} - </TimeLineContainer> - ); -}; - -const AppealBanner: React.FC = () => { - const { loserSideCountdown, winnerSideCountdown } = useCountdownContext(); - const { fundedChoices } = useFundingContext(); - - const text = useMemo(() => { - if (loserSideCountdown) return `${secondsToDayHourMinute(loserSideCountdown)} remaining to fund losing options`; - // only show if loosing option was funded and winner needs funding, else no action is needed from user - if (winnerSideCountdown && !isUndefined(fundedChoices) && fundedChoices.length > 0) - return `${secondsToDayHourMinute(winnerSideCountdown)} remaining to fund winning option`; - return; - }, [loserSideCountdown, winnerSideCountdown, fundedChoices]); - - return text ? ( - <AppealBannerContainer> - <HourglassIcon /> <small>{text}</small> - </AppealBannerContainer> - ) : null; -}; - -const currentPeriodToCurrentItem = (currentPeriodIndex: number, hiddenVotes?: boolean): number => { - if (hiddenVotes) return currentPeriodIndex; - if (currentPeriodIndex <= Periods.commit) return currentPeriodIndex; - else return currentPeriodIndex - 1; -}; - -const useTimeline = (dispute: DisputeDetailsQuery["dispute"], currentPeriodIndex: number) => { - const isDesktop = useIsDesktop(); - const titles = ["Evidence", "Commit", "Voting", "Appeal", "Executed"]; - - const deadlineCurrentPeriod = getDeadline( - currentPeriodIndex, - dispute?.lastPeriodChange, - dispute?.court.timesPerPeriod - ); - - const countdown = useCountdown(deadlineCurrentPeriod); - const getSubitems = (index: number): string[] | React.ReactNode[] => { - if (typeof countdown !== "undefined" && dispute) { - if (index === titles.length - 1) { - return []; - } else if (index === currentPeriodIndex && countdown === 0) { - return ["Time's up!"]; - } else if (index < currentPeriodIndex) { - return []; - } else if (index === currentPeriodIndex) { - return [secondsToDayHourMinute(countdown)]; - } else { - return [secondsToDayHourMinute(dispute?.court.timesPerPeriod[index])]; - } - } - return [<StyledSkeleton key={index} width={60} />]; - }; - return titles.flatMap((title, i) => { - // if not hidden votes, skip commit index - if (!dispute?.court.hiddenVotes && i === Periods.commit) return []; - return [ - { - title: i + 1 < titles.length && isDesktop ? `${title} Period` : title, - subitems: getSubitems(i), - }, - ]; - }); -}; - -export const getDeadline = ( - currentPeriodIndex: number, - lastPeriodChange?: string, - timesPerPeriod?: string[] -): number | undefined => { - if (lastPeriodChange && timesPerPeriod && currentPeriodIndex < timesPerPeriod.length) { - const parsedLastPeriodChange = parseInt(lastPeriodChange, 10); - const parsedTimeCurrentPeriod = parseInt(timesPerPeriod[currentPeriodIndex]); - return parsedLastPeriodChange + parsedTimeCurrentPeriod; - } - return 0; -}; - -export default Timeline; diff --git a/web/src/pages/Cases/CaseDetails/Voting/Classic/Commit.tsx b/web/src/pages/Cases/CaseDetails/Voting/Classic/Commit.tsx deleted file mode 100644 index d04b5f5d2..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/Classic/Commit.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import React, { useCallback, useMemo } from "react"; -import styled from "styled-components"; - -import { useParams } from "react-router-dom"; -import { useLocalStorage } from "react-use"; -import { keccak256, encodePacked } from "viem"; -import { useWalletClient, usePublicClient, useConfig } from "wagmi"; - -import { simulateDisputeKitClassicCastCommit, simulateDisputeKitGatedCastCommit } from "hooks/contracts/generated"; -import useSigningAccount from "hooks/useSigningAccount"; -import { isUndefined } from "utils/index"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import OptionsContainer from "../OptionsContainer"; - -const Container = styled.div` - width: 100%; - height: auto; -`; - -interface ICommit { - arbitrable: `0x${string}`; - voteIDs: string[]; - setIsOpen: (val: boolean) => void; - refetch: () => void; - isGated: boolean; -} - -const Commit: React.FC<ICommit> = ({ arbitrable, voteIDs, setIsOpen, refetch, isGated }) => { - const { id } = useParams(); - const parsedDisputeID = useMemo(() => BigInt(id ?? 0), [id]); - const parsedVoteIDs = useMemo(() => voteIDs.map((voteID) => BigInt(voteID)), [voteIDs]); - const { data: disputeData } = useDisputeDetailsQuery(id); - const currentRoundIndex = disputeData?.dispute?.currentRoundIndex; - const { data: walletClient } = useWalletClient(); - const publicClient = usePublicClient(); - const wagmiConfig = useConfig(); - const { signingAccount, generateSigningAccount } = useSigningAccount(); - const saltKey = useMemo( - () => `dispute-${id}-round-${currentRoundIndex}-voteids-${voteIDs}`, - [id, currentRoundIndex, voteIDs] - ); - const [_, setSalt] = useLocalStorage(saltKey); - - const handleCommit = useCallback( - async (choice: bigint) => { - const message = { message: saltKey }; - const rawSalt = !isUndefined(signingAccount) - ? await signingAccount.signMessage(message) - : await (async () => { - const account = await generateSigningAccount(); - return await account?.signMessage(message); - })(); - - if (isUndefined(rawSalt)) return; - - const salt = keccak256(rawSalt); - setSalt(JSON.stringify({ salt, choice: choice.toString() })); - const commit = keccak256(encodePacked(["uint256", "uint256"], [BigInt(choice), BigInt(salt)])); - - const simulate = isGated ? simulateDisputeKitGatedCastCommit : simulateDisputeKitClassicCastCommit; - - const { request } = await simulate(wagmiConfig, { - args: [parsedDisputeID, parsedVoteIDs, commit], - }); - if (walletClient && publicClient) { - await wrapWithToast(async () => await walletClient.writeContract(request), publicClient).then(({ status }) => { - setIsOpen(status); - }); - } - refetch(); - }, - [ - wagmiConfig, - saltKey, - setSalt, - parsedVoteIDs, - parsedDisputeID, - publicClient, - setIsOpen, - walletClient, - generateSigningAccount, - signingAccount, - refetch, - isGated, - ] - ); - - return id ? ( - <Container> - <OptionsContainer {...{ arbitrable, handleSelection: handleCommit }} /> - </Container> - ) : null; -}; - -export default Commit; diff --git a/web/src/pages/Cases/CaseDetails/Voting/Classic/Reveal.tsx b/web/src/pages/Cases/CaseDetails/Voting/Classic/Reveal.tsx deleted file mode 100644 index 432f07e2a..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/Classic/Reveal.tsx +++ /dev/null @@ -1,165 +0,0 @@ -import React, { useCallback, useMemo, useState } from "react"; -import styled from "styled-components"; - -import ReactMarkdown from "react-markdown"; -import { useParams } from "react-router-dom"; -import { useLocalStorage } from "react-use"; -import { encodePacked, keccak256, PrivateKeyAccount } from "viem"; -import { useWalletClient, usePublicClient, useConfig } from "wagmi"; - -import { Answer } from "@kleros/kleros-sdk"; -import { Button } from "@kleros/ui-components-library"; - -import { simulateDisputeKitClassicCastVote, simulateDisputeKitGatedCastVote } from "hooks/contracts/generated"; -import { usePopulatedDisputeData } from "hooks/queries/usePopulatedDisputeData"; -import useSigningAccount from "hooks/useSigningAccount"; -import { isUndefined } from "utils/index"; -import { wrapWithToast, catchShortMessage } from "utils/wrapWithToast"; - -import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import { EnsureChain } from "components/EnsureChain"; -import InfoCard from "components/InfoCard"; - -import JustificationArea from "../JustificationArea"; - -const Container = styled.div` - width: 100%; - height: auto; -`; - -const StyledInfoCard = styled(InfoCard)` - margin: 16px 0; -`; - -const StyledButton = styled(Button)` - margin: 16px auto; -`; - -const StyledEnsureChain = styled(EnsureChain)` - margin: 8px auto; -`; - -const ReactMarkdownWrapper = styled.div``; -interface IReveal { - arbitrable?: `0x${string}`; - voteIDs: string[]; - setIsOpen: (val: boolean) => void; - commit: string; - isRevealPeriod: boolean; - isGated: boolean; -} - -const Reveal: React.FC<IReveal> = ({ arbitrable, voteIDs, setIsOpen, commit, isRevealPeriod, isGated }) => { - const { id } = useParams(); - const [isSending, setIsSending] = useState(false); - const parsedDisputeID = useMemo(() => BigInt(id ?? 0), [id]); - const parsedVoteIDs = useMemo(() => voteIDs.map((voteID) => BigInt(voteID)), [voteIDs]); - const { data: disputeData } = useDisputeDetailsQuery(id); - const [justification, setJustification] = useState(""); - const { data: disputeDetails } = usePopulatedDisputeData(id, arbitrable); - const { data: walletClient } = useWalletClient(); - const publicClient = usePublicClient(); - const wagmiConfig = useConfig(); - const { signingAccount, generateSigningAccount } = useSigningAccount(); - const currentRoundIndex = disputeData?.dispute?.currentRoundIndex; - const saltKey = useMemo( - () => `dispute-${id}-round-${currentRoundIndex}-voteids-${voteIDs}`, - [id, currentRoundIndex, voteIDs] - ); - const [storedSaltAndChoice, _] = useLocalStorage<string>(saltKey); - - const handleReveal = useCallback(async () => { - setIsSending(true); - const { salt, choice } = isUndefined(storedSaltAndChoice) - ? await getSaltAndChoice(signingAccount, generateSigningAccount, saltKey, disputeDetails?.answers ?? [], commit) - : JSON.parse(storedSaltAndChoice); - if (isUndefined(choice)) return; - - const simulate = isGated ? simulateDisputeKitGatedCastVote : simulateDisputeKitClassicCastVote; - const { request } = await catchShortMessage( - simulate(wagmiConfig, { - args: [parsedDisputeID, parsedVoteIDs, BigInt(choice), BigInt(salt), justification], - }) - ); - if (request && walletClient && publicClient) { - await wrapWithToast(async () => await walletClient.writeContract(request), publicClient).then(({ status }) => { - setIsOpen(status); - }); - } - setIsSending(false); - }, [ - wagmiConfig, - commit, - disputeDetails?.answers, - storedSaltAndChoice, - generateSigningAccount, - signingAccount, - saltKey, - justification, - parsedVoteIDs, - parsedDisputeID, - publicClient, - setIsOpen, - walletClient, - isGated, - ]); - - return ( - <Container> - {isUndefined(commit) ? ( - <StyledInfoCard msg="Failed to commit on time." /> - ) : isRevealPeriod ? ( - <> - <ReactMarkdownWrapper dir="auto"> - <ReactMarkdown>{disputeDetails?.question ?? ""}</ReactMarkdown> - </ReactMarkdownWrapper> - <JustificationArea {...{ justification, setJustification }} /> - <StyledEnsureChain> - <StyledButton - variant="secondary" - text="Justify & Reveal" - disabled={isSending || isUndefined(disputeDetails)} - isLoading={isSending} - onClick={handleReveal} - /> - </StyledEnsureChain> - </> - ) : ( - <StyledInfoCard msg="Your vote was successfully commited, please wait until reveal period to reveal it." /> - )} - </Container> - ); -}; - -const getSaltAndChoice = async ( - signingAccount: PrivateKeyAccount | undefined, - generateSigningAccount: () => Promise<PrivateKeyAccount | undefined> | undefined, - saltKey: string, - answers: Answer[], - commit: string -) => { - const message = { message: saltKey }; - const rawSalt = !isUndefined(signingAccount) - ? await signingAccount.signMessage(message) - : await (async () => { - const account = await generateSigningAccount(); - return await account?.signMessage(message); - })(); - if (isUndefined(rawSalt)) return; - const salt = keccak256(rawSalt); - - const { choice } = answers.reduce<{ found: boolean; choice: bigint }>( - (acc, answer) => { - if (acc.found) return acc; - const innerCommit = keccak256(encodePacked(["uint256", "uint256"], [BigInt(answer.id), BigInt(salt)])); - if (innerCommit === commit) { - return { found: true, choice: BigInt(answer.id) }; - } else return acc; - }, - { found: false, choice: BigInt(-1) } - ); - return { salt, choice }; -}; - -export default Reveal; diff --git a/web/src/pages/Cases/CaseDetails/Voting/Classic/Vote.tsx b/web/src/pages/Cases/CaseDetails/Voting/Classic/Vote.tsx deleted file mode 100644 index 6f7dbe088..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/Classic/Vote.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import React, { useCallback, useMemo, useState } from "react"; -import styled from "styled-components"; - -import { useParams } from "react-router-dom"; -import { useWalletClient, usePublicClient, useConfig } from "wagmi"; - -import { simulateDisputeKitClassicCastVote } from "hooks/contracts/generated"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import OptionsContainer from "../OptionsContainer"; - -const Container = styled.div` - width: 100%; - height: auto; -`; - -interface IVote { - arbitrable: `0x${string}`; - voteIDs: string[]; - setIsOpen: (val: boolean) => void; -} - -const Vote: React.FC<IVote> = ({ arbitrable, voteIDs, setIsOpen }) => { - const { id } = useParams(); - const parsedDisputeID = useMemo(() => BigInt(id ?? 0), [id]); - const parsedVoteIDs = useMemo(() => voteIDs.map((voteID) => BigInt(voteID)), [voteIDs]); - const { data: disputeData } = useDisputeDetailsQuery(id); - const [justification, setJustification] = useState(""); - const { data: walletClient } = useWalletClient(); - const publicClient = usePublicClient(); - const wagmiConfig = useConfig(); - - const handleVote = useCallback( - async (voteOption: number) => { - const { request } = await simulateDisputeKitClassicCastVote(wagmiConfig, { - args: [ - parsedDisputeID, - parsedVoteIDs, - BigInt(voteOption), - BigInt(disputeData?.dispute?.currentRoundIndex), - justification, - ], - }); - if (walletClient) { - await wrapWithToast(async () => await walletClient.writeContract(request), publicClient).then(({ status }) => { - setIsOpen(status); - }); - } - }, - [ - wagmiConfig, - disputeData?.dispute?.currentRoundIndex, - justification, - parsedVoteIDs, - parsedDisputeID, - publicClient, - setIsOpen, - walletClient, - ] - ); - - return ( - <Container> - <OptionsContainer {...{ arbitrable, justification, setJustification, handleSelection: handleVote }} /> - </Container> - ); -}; - -export default Vote; diff --git a/web/src/pages/Cases/CaseDetails/Voting/Classic/index.tsx b/web/src/pages/Cases/CaseDetails/Voting/Classic/index.tsx deleted file mode 100644 index fdffc76ae..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/Classic/index.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React, { useMemo } from "react"; - -import { useParams } from "react-router-dom"; -import { useAccount } from "wagmi"; - -import { useDrawQuery } from "hooks/queries/useDrawQuery"; -import { useVotingContext } from "hooks/useVotingContext"; - -import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import Commit from "./Commit"; -import Reveal from "./Reveal"; -import Vote from "./Vote"; - -interface IClassic { - arbitrable: `0x${string}`; - setIsOpen: (val: boolean) => void; - isGated: boolean; -} - -const Classic: React.FC<IClassic> = ({ arbitrable, setIsOpen, isGated }) => { - const { id } = useParams(); - const { address } = useAccount(); - const { data: disputeData } = useDisputeDetailsQuery(id); - const { data: drawData, refetch } = useDrawQuery(address?.toLowerCase(), id, disputeData?.dispute?.currentRound.id); - const { isHiddenVotes, isCommitPeriod, commit, commited } = useVotingContext(); - const voteIDs = useMemo(() => drawData?.draws?.map((draw) => draw.voteIDNum) as string[], [drawData]); - - return id && isHiddenVotes ? ( - isCommitPeriod && !commited ? ( - <Commit {...{ arbitrable, setIsOpen, voteIDs, refetch, isGated }} /> - ) : ( - <Reveal {...{ arbitrable, setIsOpen, voteIDs, commit, isRevealPeriod: !isCommitPeriod, isGated }} /> - ) - ) : ( - <Vote {...{ arbitrable, setIsOpen, voteIDs }} /> - ); -}; - -export default Classic; diff --git a/web/src/pages/Cases/CaseDetails/Voting/JustificationArea.tsx b/web/src/pages/Cases/CaseDetails/Voting/JustificationArea.tsx deleted file mode 100644 index d92b036a1..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/JustificationArea.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { Textarea } from "@kleros/ui-components-library"; - -const StyledTextarea = styled(Textarea)` - width: 100%; - height: auto; - textarea { - height: 200px; - border-color: ${({ theme }) => theme.stroke}; - } - small { - font-weight: 400; - hyphens: auto; - } -`; - -interface IJustificationArea { - justification: string; - setJustification: (arg0: string) => void; -} - -const JustificationArea: React.FC<IJustificationArea> = ({ justification, setJustification }) => ( - <StyledTextarea - dir="auto" - value={justification} - onChange={(e) => setJustification(e.target.value)} - placeholder="Justify your vote..." - message={ - "A good justification contributes to case comprehension. " + "Low quality justifications can be challenged." - } - variant="info" - /> -); - -export default JustificationArea; diff --git a/web/src/pages/Cases/CaseDetails/Voting/OptionsContainer.tsx b/web/src/pages/Cases/CaseDetails/Voting/OptionsContainer.tsx deleted file mode 100644 index f58d132b0..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/OptionsContainer.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import React, { useCallback, useMemo, useState } from "react"; -import styled from "styled-components"; - -import ReactMarkdown from "react-markdown"; -import { useParams } from "react-router-dom"; - -import { Button, Tooltip } from "@kleros/ui-components-library"; - -import { usePopulatedDisputeData } from "hooks/queries/usePopulatedDisputeData"; -import { isUndefined } from "utils/index"; - -import { EnsureChain } from "components/EnsureChain"; - -import JustificationArea from "./JustificationArea"; -import { Answer } from "@kleros/kleros-sdk"; -import { RefuseToArbitrateAnswer } from "@kleros/kleros-sdk/src/dataMappings/utils/disputeDetailsSchema"; - -const MainContainer = styled.div` - width: 100%; - height: auto; - display: flex; - flex-direction: column; -`; - -const OptionsContainer = styled.div` - margin-top: 24px; - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: 16px; -`; - -const RefuseToArbitrateContainer = styled.div` - position: relative; - left: 0; - right: 0; - width: auto; - margin: calc(-1 * (16px + (32 - 16) * (min(max(100vw, 375px), 1250px) - 375px) / 875)); - margin-top: 32px; - background-color: ${({ theme }) => theme.lightBlue}; - padding: 32px; - display: flex; - justify-content: center; -`; - -const StyledEnsureChain = styled(EnsureChain)` - align-self: center; -`; - -interface IOptions { - arbitrable: `0x${string}`; - handleSelection: (arg0: bigint) => Promise<void>; - justification?: string; - setJustification?: (arg0: string) => void; -} - -const Options: React.FC<IOptions> = ({ arbitrable, handleSelection, justification, setJustification }) => { - const { id } = useParams(); - const { data: disputeDetails } = usePopulatedDisputeData(id, arbitrable); - const [chosenOption, setChosenOption] = useState(BigInt(-1)); - const [isSending, setIsSending] = useState(false); - - const updatedRTA = useMemo(() => { - const RTAFromTemplate = disputeDetails?.answers?.find((answer) => BigInt(answer.id) === BigInt(0)); - if (!RTAFromTemplate) return RefuseToArbitrateAnswer; - return RTAFromTemplate; - }, [disputeDetails]); - - const onClick = useCallback( - async (id: bigint) => { - setIsSending(true); - setChosenOption(id); - try { - await handleSelection(id); - } catch (error) { - console.error(error); - } finally { - setChosenOption(BigInt(-1)); - setIsSending(false); - } - }, - [handleSelection] - ); - - return id ? ( - <> - <MainContainer dir="auto"> - <ReactMarkdown>{disputeDetails?.question ?? ""}</ReactMarkdown> - {!isUndefined(justification) && !isUndefined(setJustification) ? ( - <JustificationArea {...{ justification, setJustification }} /> - ) : null} - {isUndefined(disputeDetails?.answers) ? null : ( - <StyledEnsureChain> - <OptionsContainer> - {disputeDetails?.answers?.map((answer: Answer) => { - return BigInt(answer.id) !== BigInt(0) ? ( - <Tooltip text={answer.description} key={answer.title}> - <Button - text={answer.title} - disabled={isSending} - isLoading={chosenOption === BigInt(answer.id)} - onClick={() => onClick(BigInt(answer.id))} - /> - </Tooltip> - ) : null; - })} - </OptionsContainer> - </StyledEnsureChain> - )} - </MainContainer> - <RefuseToArbitrateContainer> - <EnsureChain> - <Tooltip text={updatedRTA.description}> - <Button - variant="secondary" - text={updatedRTA.title} - disabled={isSending} - isLoading={chosenOption === BigInt(0)} - onClick={() => onClick(BigInt(0))} - /> - </Tooltip> - </EnsureChain> - </RefuseToArbitrateContainer> - </> - ) : null; -}; - -export default Options; diff --git a/web/src/pages/Cases/CaseDetails/Voting/PendingVotesBox.tsx b/web/src/pages/Cases/CaseDetails/Voting/PendingVotesBox.tsx deleted file mode 100644 index 397140329..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/PendingVotesBox.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { Box } from "@kleros/ui-components-library"; - -import BalanceIcon from "svgs/icons/law-balance.svg"; - -const StyledBox = styled(Box)` - width: 100%; - background-color: ${({ theme }) => theme.lightBlue}; - height: auto; - border-radius: 3px; - padding: 16px; - display: flex; - gap: 10px; - align-items: center; - margin-bottom: -4px; - > p { - margin: 0; - } - > svg { - height: 16px; - fill: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const StyledP = styled.p` - font-weight: 400; -`; - -const PendingVotesBox: React.FC<{ current: number; total: number; court: string }> = ({ current, total, court }) => ( - <StyledBox> - <BalanceIcon /> - <StyledP> - {current === total - ? "All jurors voted" - : `${current} vote${current === 1 ? "" : "s"} cast out of ${total} - ${court}`} - </StyledP> - </StyledBox> -); - -export default PendingVotesBox; diff --git a/web/src/pages/Cases/CaseDetails/Voting/Shutter/Commit.tsx b/web/src/pages/Cases/CaseDetails/Voting/Shutter/Commit.tsx deleted file mode 100644 index 28363514f..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/Shutter/Commit.tsx +++ /dev/null @@ -1,164 +0,0 @@ -import React, { useCallback, useMemo, useState } from "react"; -import styled from "styled-components"; - -import { useParams } from "react-router-dom"; -import { useLocalStorage } from "react-use"; -import { keccak256, stringToHex, encodeAbiParameters } from "viem"; -import { useWalletClient, usePublicClient, useConfig } from "wagmi"; - -import { - simulateDisputeKitGatedShutterCastCommitShutter, - simulateDisputeKitShutterCastCommitShutter, -} from "hooks/contracts/generated"; -import { useCountdown } from "hooks/useCountdown"; -import useSigningAccount from "hooks/useSigningAccount"; -import { isUndefined } from "utils/index"; -import { encrypt } from "utils/shutter"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import { DisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import { getDeadline } from "../../Timeline"; -import OptionsContainer from "../OptionsContainer"; - -const Container = styled.div` - width: 100%; - height: auto; -`; - -interface ICommit { - arbitrable: `0x${string}`; - voteIDs: string[]; - setIsOpen: (val: boolean) => void; - refetch: () => void; - dispute: DisputeDetailsQuery["dispute"]; - currentPeriodIndex: number; - isGated: boolean; -} - -const SEPARATOR = "-"; - -/** - * This hashing function must be follow the same logic as DisputeKitClassic.hashVote() - */ -const hashVote = (choice: bigint, salt: bigint, justification: string): `0x${string}` => { - const justificationHash = keccak256(stringToHex(justification)); - - // Encode and hash the parameters together (mimics Solidity's abi.encode) - const encodedParams = encodeAbiParameters( - [ - { type: "uint256" }, // choice - { type: "uint256" }, // salt - { type: "bytes32" }, // justificationHash - ], - [choice, salt, justificationHash] - ); - - return keccak256(encodedParams); -}; - -const Commit: React.FC<ICommit> = ({ - arbitrable, - voteIDs, - setIsOpen, - refetch, - dispute, - currentPeriodIndex, - isGated, -}) => { - const { id } = useParams(); - const parsedDisputeID = useMemo(() => BigInt(id ?? 0), [id]); - const parsedVoteIDs = useMemo(() => voteIDs.map((voteID) => BigInt(voteID)), [voteIDs]); - const { data: walletClient } = useWalletClient(); - const publicClient = usePublicClient(); - const wagmiConfig = useConfig(); - const { signingAccount, generateSigningAccount } = useSigningAccount(); - const [justification, setJustification] = useState(""); - const saltKey = useMemo(() => `shutter-dispute-${id}-voteids-${voteIDs}`, [id, voteIDs]); - const [_, setSalt] = useLocalStorage(saltKey); - const deadlineCommitPeriod = getDeadline( - currentPeriodIndex, - dispute?.lastPeriodChange, - dispute?.court.timesPerPeriod - ); - const countdownToVotingPeriod = useCountdown(deadlineCommitPeriod); - - const handleCommit = useCallback( - async (choice: bigint) => { - if (!import.meta.env.REACT_APP_SHUTTER_API || import.meta.env.REACT_APP_SHUTTER_API.trim() === "") { - console.error("REACT_APP_SHUTTER_API environment variable is not set or is empty"); - throw new Error("Cannot commit vote: REACT_APP_SHUTTER_API environment variable is required but not set"); - } - const message = { message: saltKey }; - const rawSalt = !isUndefined(signingAccount) - ? await signingAccount.signMessage(message) - : await (async () => { - const account = await generateSigningAccount(); - return await account?.signMessage(message); - })(); - if (isUndefined(rawSalt)) return; - - const salt = keccak256(rawSalt); - setSalt(JSON.stringify({ salt, choice: choice.toString(), justification })); - - const encodedMessage = `${choice.toString()}${SEPARATOR}${salt}${SEPARATOR}${justification}`; - /* an extra 300 seconds (5 minutes) of decryptionDelay is enforced after Commit period is over - to avoid premature decryption and voting attacks if no one passes the Commit period quickly */ - const decryptionDelay = (countdownToVotingPeriod ?? 0) + 300; - const { encryptedCommitment, identity } = await encrypt(encodedMessage, decryptionDelay); - - const commitHash = hashVote(choice, BigInt(salt), justification); - - let config; - if (isGated) { - config = await simulateDisputeKitGatedShutterCastCommitShutter(wagmiConfig, { - args: [parsedDisputeID, parsedVoteIDs, commitHash, identity as `0x${string}`, encryptedCommitment], - }); - } else { - config = await simulateDisputeKitShutterCastCommitShutter(wagmiConfig, { - args: [parsedDisputeID, parsedVoteIDs, commitHash, identity as `0x${string}`, encryptedCommitment], - }); - } - - if (walletClient && publicClient) { - await wrapWithToast(async () => await walletClient.writeContract(config.request), publicClient).then( - ({ status }) => { - setIsOpen(status); - } - ); - } - refetch(); - }, - [ - wagmiConfig, - justification, - saltKey, - setSalt, - parsedVoteIDs, - parsedDisputeID, - publicClient, - setIsOpen, - walletClient, - generateSigningAccount, - signingAccount, - refetch, - countdownToVotingPeriod, - isGated, - ] - ); - - return id ? ( - <Container> - <OptionsContainer - {...{ - arbitrable, - justification, - setJustification, - handleSelection: handleCommit, - }} - /> - </Container> - ) : null; -}; - -export default Commit; diff --git a/web/src/pages/Cases/CaseDetails/Voting/Shutter/Reveal.tsx b/web/src/pages/Cases/CaseDetails/Voting/Shutter/Reveal.tsx deleted file mode 100644 index 0c27a7c48..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/Shutter/Reveal.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import React, { useCallback, useMemo, useState } from "react"; -import styled from "styled-components"; - -import { useParams } from "react-router-dom"; -import { useLocalStorage } from "react-use"; -import { useWalletClient, usePublicClient } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { - useSimulateDisputeKitGatedShutterCastVoteShutter, - useSimulateDisputeKitShutterCastVoteShutter, -} from "hooks/contracts/generated"; -import { isUndefined } from "utils/index"; -import { wrapWithToast } from "utils/wrapWithToast"; - -const Container = styled.div` - width: 100%; - height: auto; - display: flex; - justify-content: center; - margin-top: 16px; -`; - -interface IReveal { - voteIDs: string[]; - setIsOpen: (val: boolean) => void; - isGated: boolean; -} - -const Reveal: React.FC<IReveal> = ({ voteIDs, setIsOpen, isGated }) => { - const { id } = useParams(); - const parsedDisputeID = useMemo(() => BigInt(id ?? 0), [id]); - const parsedVoteIDs = useMemo(() => voteIDs.map((voteID) => BigInt(voteID)), [voteIDs]); - const saltKey = useMemo(() => `shutter-dispute-${id}-voteids-${voteIDs}`, [id, voteIDs]); - - const [storedData, _, removeStoredData] = useLocalStorage(saltKey); - - const { data: walletClient } = useWalletClient(); - const publicClient = usePublicClient(); - - const [isRevealing, setIsRevealing] = useState(false); - - const parsedStoredData = useMemo(() => { - if (isUndefined(storedData)) return undefined; - try { - const data = JSON.parse(storedData); - if (isUndefined(data.salt) || isUndefined(data.choice) || isUndefined(data.justification)) { - throw new Error("Invalid stored data"); - } - return data; - } catch (error) { - console.error("Error parsing stored data:", error); - return undefined; - } - }, [storedData]); - - const { - data: simulateDefaultData, - isLoading: isSimulatingDefault, - error: simulateDefaultError, - } = useSimulateDisputeKitShutterCastVoteShutter({ - query: { - enabled: !isUndefined(parsedStoredData) && !isGated, - }, - args: [ - parsedDisputeID, - parsedVoteIDs, - BigInt(parsedStoredData?.choice ?? 0), - BigInt(parsedStoredData?.salt ?? 0), - parsedStoredData?.justification ?? "", - ], - }); - - const { - data: simulateGatedData, - isLoading: isSimulatingGated, - error: simulateGatedError, - } = useSimulateDisputeKitGatedShutterCastVoteShutter({ - query: { - enabled: !isUndefined(parsedStoredData) && isGated, - }, - args: [ - parsedDisputeID, - parsedVoteIDs, - BigInt(parsedStoredData?.choice ?? 0), - BigInt(parsedStoredData?.salt ?? 0), - parsedStoredData?.justification ?? "", - ], - }); - - const isSimulating = isGated ? isSimulatingGated : isSimulatingDefault; - const simulateData = isGated ? simulateGatedData : simulateDefaultData; - const simulateError = isGated ? simulateGatedError : simulateDefaultError; - - const handleReveal = useCallback(async () => { - if (isUndefined(parsedStoredData) || isUndefined(simulateData)) { - console.error("No committed vote found or simulation not ready."); - return; - } - - setIsRevealing(true); - try { - const { request } = simulateData; - if (walletClient && publicClient) { - await wrapWithToast(async () => await walletClient.writeContract(request), publicClient).then(({ status }) => { - if (status) { - removeStoredData(); - } - setIsOpen(status); - }); - } - } catch (error) { - console.error("Error revealing vote:", error); - } finally { - setIsRevealing(false); - } - }, [parsedStoredData, simulateData, walletClient, publicClient, setIsOpen, removeStoredData]); - - return ( - <Container> - {!isUndefined(parsedStoredData) ? ( - <Button - text="Reveal Your Vote" - onClick={handleReveal} - disabled={isSimulating || !isUndefined(simulateError) || isRevealing} - isLoading={isRevealing} - /> - ) : null} - </Container> - ); -}; - -export default Reveal; diff --git a/web/src/pages/Cases/CaseDetails/Voting/Shutter/index.tsx b/web/src/pages/Cases/CaseDetails/Voting/Shutter/index.tsx deleted file mode 100644 index 3000b2872..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/Shutter/index.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React, { useMemo } from "react"; - -import { useParams } from "react-router-dom"; -import { useAccount } from "wagmi"; - -import { useDrawQuery } from "hooks/queries/useDrawQuery"; -import { useVotingContext } from "hooks/useVotingContext"; - -import { DisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import ShutterCommit from "./Commit"; -import Reveal from "./Reveal"; - -interface IShutter { - arbitrable: `0x${string}`; - setIsOpen: (val: boolean) => void; - dispute: DisputeDetailsQuery["dispute"]; - currentPeriodIndex: number; - isGated: boolean; -} - -const Shutter: React.FC<IShutter> = ({ arbitrable, setIsOpen, dispute, currentPeriodIndex, isGated }) => { - const { id } = useParams(); - const { address } = useAccount(); - const { data: drawData, refetch } = useDrawQuery(address?.toLowerCase(), id, dispute?.currentRound.id); - const { isCommitPeriod, isVotingPeriod, commited } = useVotingContext(); - const voteIDs = useMemo(() => drawData?.draws?.map((draw) => draw.voteIDNum) as string[], [drawData]); - - const shouldShowCommit = id && isCommitPeriod && !commited; - const shouldShowReveal = id && isVotingPeriod; - - return ( - <> - {shouldShowCommit && ( - <ShutterCommit {...{ arbitrable, setIsOpen, voteIDs, refetch, dispute, currentPeriodIndex, isGated }} /> - )} - {shouldShowReveal && <Reveal {...{ setIsOpen, voteIDs, isGated }} />} - </> - ); -}; - -export default Shutter; diff --git a/web/src/pages/Cases/CaseDetails/Voting/VotesDetails/AccordionTitle.tsx b/web/src/pages/Cases/CaseDetails/Voting/VotesDetails/AccordionTitle.tsx deleted file mode 100644 index 6c208351c..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/VotesDetails/AccordionTitle.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import { Answer } from "context/NewDisputeContext"; -import { getVoteChoice } from "utils/getVoteChoice"; -import { isUndefined } from "utils/index"; - -import { InternalLink } from "components/InternalLink"; -import JurorTitle from "pages/Home/TopJurors/JurorCard/JurorTitle"; - -const TitleContainer = styled.div` - display: flex; - flex-direction: column; - align-items: start; - gap: 11px; - flex-wrap: wrap; - ${landscapeStyle( - () => css` - flex-direction: row; - align-items: center; - gap: 12px; - ` - )} -`; - -const AddressContainer = styled.div` - display: flex; - gap: 8px; - align-items: center; -`; - -const StyledLabel = styled.label<{ variant?: string }>` - color: ${({ theme, variant }) => (variant ? theme[variant] : theme.primaryText)}; - font-size: 16px; -`; - -const StyledSmall = styled.small` - font-size: 16px; -`; - -const StyledInternalLink = styled(InternalLink)` - :hover { - label { - cursor: pointer; - color: ${({ theme }) => theme.secondaryBlue}; - } - } -`; - -const VoteStatus: React.FC<{ - choice?: string; - period: string; - answers: Answer[]; - commited: boolean; - isActiveRound: boolean; - hiddenVotes: boolean; -}> = ({ choice, period, answers, isActiveRound, commited, hiddenVotes }) => { - if (hiddenVotes) { - if (!commited && (isActiveRound ? ["vote", "appeal", "execution"].includes(period) : true)) - return <StyledLabel>Did not commit vote </StyledLabel>; - - if (["evidence", "commit"].includes(period)) - return <StyledLabel>{commited ? "Vote committed" : "Pending vote commitment"}</StyledLabel>; - } - - // not voted - if (isUndefined(choice) && (isActiveRound ? ["appeal", "execution"].includes(period) : true)) - return <StyledLabel>Did not vote</StyledLabel>; - - return ( - <StyledLabel> - {isUndefined(choice) ? "Pending Vote" : <StyledSmall>{getVoteChoice(choice, answers)}</StyledSmall>} - </StyledLabel> - ); -}; - -const AccordionTitle: React.FC<{ - juror: string; - choice?: string; - voteCount: number; - period: string; - answers: Answer[]; - isActiveRound: boolean; - commited: boolean; - hiddenVotes: boolean; -}> = ({ juror, choice, voteCount, period, answers, isActiveRound, commited, hiddenVotes }) => { - const profileLink = `/profile/1/desc/all?address=${juror}`; - - return ( - <TitleContainer> - <AddressContainer> - <StyledInternalLink to={profileLink}> - <JurorTitle address={juror} /> - </StyledInternalLink> - </AddressContainer> - <VoteStatus {...{ choice, period, answers, isActiveRound, commited, hiddenVotes }} /> - <StyledLabel variant="secondaryPurple"> - {voteCount} vote{voteCount > 1 && "s"} - </StyledLabel> - </TitleContainer> - ); -}; - -export default AccordionTitle; diff --git a/web/src/pages/Cases/CaseDetails/Voting/VotesDetails/index.tsx b/web/src/pages/Cases/CaseDetails/Voting/VotesDetails/index.tsx deleted file mode 100644 index 7396d610e..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/VotesDetails/index.tsx +++ /dev/null @@ -1,200 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { css } from "styled-components"; - -import { Card, CustomAccordion } from "@kleros/ui-components-library"; - -import { Answer } from "context/NewDisputeContext"; -import { formatDate } from "utils/date"; -import { DrawnJuror } from "utils/getDrawnJurorsWithCount"; -import { getVoteChoice } from "utils/getVoteChoice"; -import { getTxnExplorerLink, isUndefined } from "utils/index"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; -import { landscapeStyle } from "styles/landscapeStyle"; - -import { ExternalLink } from "components/ExternalLink"; -import InfoCard from "components/InfoCard"; - -import AccordionTitle from "./AccordionTitle"; - -const Container = styled.div` - display: flex; - flex-direction: column; -`; - -const StyledAccordion = styled(CustomAccordion)` - width: 100%; - - [class*="accordion-item"] { - margin: 0; - } - - [class*="accordion-button"] { - padding: 16px !important; - margin: 4px 0; - } - - [class*="Body"] { - padding: 8px; - } - - ${landscapeStyle( - () => css` - [class*="accordion-button"] { - padding: 12px 16px !important; - } - [class*="Body"] { - padding: 12px 16px; - } - ` - )} -`; - -const StyledCard = styled(Card)` - ${hoverShortTransitionTiming} - width: 100%; - height: auto; - padding: 16px; - border: 1px solid ${({ theme }) => theme.stroke}; - margin: 4px 0; - - :hover { - background-color: ${({ theme }) => theme.lightGrey}BB; - } - - ${landscapeStyle( - () => css` - padding: 12px 16px; - ` - )} -`; - -const AccordionContentContainer = styled.div` - display: flex; - flex-direction: column; - gap: 12px; -`; - -const VotedText = styled.label` - color: ${({ theme }) => theme.secondaryText}; - font-size: 16px; - ::before { - content: "Voted: "; - color: ${({ theme }) => theme.primaryText}; - } -`; - -const JustificationText = styled(VotedText)` - line-height: 1.25; - ::before { - content: "Justification: "; - } -`; - -const SecondaryTextLabel = styled.label` - color: ${({ theme }) => theme.secondaryText}; - font-size: 16px; - flex: 1; -`; - -const StyledInfoCard = styled(InfoCard)` - margin-top: 18.5px; -`; - -const AccordionContent: React.FC<{ - choice?: string; - answers: Answer[]; - justification: string; - timestamp?: string; - transactionHash?: string; -}> = ({ justification, choice, answers, timestamp, transactionHash }) => { - const transactionExplorerLink = useMemo(() => { - return getTxnExplorerLink(transactionHash ?? ""); - }, [transactionHash]); - - return ( - <AccordionContentContainer> - {!isUndefined(choice) && <VotedText dir="auto">{getVoteChoice(choice, answers)}</VotedText>} - - {justification ? ( - <JustificationText dir="auto">{justification}</JustificationText> - ) : ( - <SecondaryTextLabel>No justification provided</SecondaryTextLabel> - )} - {!isUndefined(timestamp) && ( - <ExternalLink to={transactionExplorerLink} rel="noopener noreferrer" target="_blank"> - {formatDate(Number(timestamp), true)} - </ExternalLink> - )} - </AccordionContentContainer> - ); -}; - -interface IVotesAccordion { - drawnJurors: DrawnJuror[]; - period: string; - answers: Answer[]; - isActiveRound: boolean; - hiddenVotes: boolean; -} - -const VotesAccordion: React.FC<IVotesAccordion> = ({ drawnJurors, period, answers, isActiveRound, hiddenVotes }) => { - const accordionItems = useMemo(() => { - return drawnJurors - .map((drawnJuror) => - !isUndefined(drawnJuror.vote?.justification?.choice) - ? { - title: ( - <AccordionTitle - juror={drawnJuror.juror.id} - voteCount={drawnJuror.voteCount} - choice={drawnJuror.vote?.justification?.choice} - period={period} - answers={answers} - isActiveRound={isActiveRound} - commited={Boolean(drawnJuror.vote.commited)} - hiddenVotes={hiddenVotes} - /> - ), - body: ( - <AccordionContent - justification={drawnJuror?.vote?.justification.reference ?? ""} - choice={drawnJuror.vote?.justification?.choice} - answers={answers} - transactionHash={drawnJuror.transactionHash} - timestamp={drawnJuror.timestamp} - /> - ), - } - : null - ) - .filter((item) => item !== null); - }, [drawnJurors, period, answers, isActiveRound, hiddenVotes]); - - return ( - <> - {drawnJurors.length === 0 ? <StyledInfoCard msg="Jurors have not been drawn yet." /> : null} - <Container> - {accordionItems.length > 0 ? <StyledAccordion items={accordionItems} /> : null} - {drawnJurors.map( - (drawnJuror) => - isUndefined(drawnJuror.vote?.justification?.choice) && ( - <StyledCard key={drawnJuror.juror.id}> - <AccordionTitle - juror={drawnJuror.juror.id} - voteCount={drawnJuror.voteCount} - period={period} - answers={answers} - isActiveRound={isActiveRound} - hiddenVotes={hiddenVotes} - commited={Boolean(drawnJuror.vote?.commited)} - /> - </StyledCard> - ) - )} - </Container> - </> - ); -}; - -export default VotesAccordion; diff --git a/web/src/pages/Cases/CaseDetails/Voting/VotingHistory.tsx b/web/src/pages/Cases/CaseDetails/Voting/VotingHistory.tsx deleted file mode 100644 index da02108bf..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/VotingHistory.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import React, { useEffect, useMemo, useState } from "react"; -import styled from "styled-components"; - -import Skeleton from "react-loading-skeleton"; -import ReactMarkdown from "react-markdown"; -import { useParams } from "react-router-dom"; -import { useToggle } from "react-use"; - -import { Tabs } from "@kleros/ui-components-library"; - -import { INVALID_DISPUTE_DATA_ERROR, RPC_ERROR } from "consts/index"; -import { getDrawnJurorsWithCount } from "utils/getDrawnJurorsWithCount"; -import { getLocalRounds } from "utils/getLocalRounds"; - -import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; -import { usePopulatedDisputeData } from "queries/usePopulatedDisputeData"; -import { useVotingHistory } from "queries/useVotingHistory"; - -import { responsiveSize } from "styles/responsiveSize"; - -import HowItWorks from "components/HowItWorks"; -import BinaryVoting from "components/Popup/MiniGuides/BinaryVoting"; - -import PendingVotesBox from "./PendingVotesBox"; -import VotesAccordion from "./VotesDetails"; - -const Container = styled.div` - display: flex; - flex-direction: column; - gap: ${responsiveSize(16, 24)}; -`; - -const StyledTabs = styled(Tabs)` - width: 100%; -`; - -const Header = styled.div` - display: flex; - flex-direction: row; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; - gap: 16px; -`; - -const StyledTitle = styled.h1` - margin-bottom: 0; - font-size: ${responsiveSize(18, 24)}; -`; -const ReactMarkdownWrapper = styled.div``; -const StyledReactMarkDown = styled(ReactMarkdown)` - max-width: inherit; - word-wrap: break-word; - p { - margin: 0; - } -`; - -const TabsContainer = styled.div` - display: flex; - flex-direction: column; -`; - -const VotingHistory: React.FC<{ arbitrable?: `0x${string}`; isQuestion: boolean }> = ({ arbitrable, isQuestion }) => { - const { id } = useParams(); - const { data: votingHistory } = useVotingHistory(id); - const { data: disputeData } = useDisputeDetailsQuery(id); - const [currentTab, setCurrentTab] = useState(0); - const { data: disputeDetails, isError } = usePopulatedDisputeData(id, arbitrable); - const rounds = votingHistory?.dispute?.rounds; - const [isBinaryVotingMiniGuideOpen, toggleBinaryVotingMiniGuide] = useToggle(false); - - const localRounds = getLocalRounds(votingHistory?.dispute?.disputeKitDispute); - //set current tab to latest round - useEffect(() => setCurrentTab((rounds?.length && rounds?.length - 1) ?? 0), [rounds]); - - const answers = disputeDetails?.answers; - const drawnJurors = useMemo( - () => getDrawnJurorsWithCount(votingHistory?.dispute?.rounds.at(currentTab)?.drawnJurors ?? []), - [votingHistory, currentTab] - ); - - return ( - <Container> - <Header> - <StyledTitle>Voting History</StyledTitle> - <HowItWorks - isMiniGuideOpen={isBinaryVotingMiniGuideOpen} - toggleMiniGuide={toggleBinaryVotingMiniGuide} - MiniGuideComponent={BinaryVoting} - /> - </Header> - {rounds && localRounds && disputeDetails ? ( - <> - {isQuestion && ( - <> - {disputeDetails.question ? ( - <ReactMarkdownWrapper dir="auto"> - <StyledReactMarkDown>{disputeDetails.question}</StyledReactMarkDown> - </ReactMarkdownWrapper> - ) : ( - <StyledReactMarkDown>{isError ? RPC_ERROR : INVALID_DISPUTE_DATA_ERROR}</StyledReactMarkDown> - )} - </> - )} - <TabsContainer> - <StyledTabs - currentValue={currentTab} - items={rounds.map((_, i) => ({ - text: `Round ${i + 1}`, - value: i, - }))} - callback={(i: number) => setCurrentTab(i)} - /> - <PendingVotesBox - current={localRounds.at(currentTab)?.totalVoted} - total={rounds.at(currentTab)?.nbVotes} - court={rounds.at(currentTab)?.court.name ?? ""} - /> - <VotesAccordion - drawnJurors={drawnJurors} - period={disputeData?.dispute?.period} - answers={answers} - isActiveRound={localRounds?.length - 1 === currentTab} - hiddenVotes={Boolean(disputeData?.dispute?.court.hiddenVotes)} - /> - </TabsContainer> - </> - ) : ( - <Skeleton height={140} /> - )} - </Container> - ); -}; - -export default VotingHistory; diff --git a/web/src/pages/Cases/CaseDetails/Voting/index.tsx b/web/src/pages/Cases/CaseDetails/Voting/index.tsx deleted file mode 100644 index 4a09d4ccf..000000000 --- a/web/src/pages/Cases/CaseDetails/Voting/index.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import React, { useMemo, useState } from "react"; -import styled, { css } from "styled-components"; - -import Skeleton from "react-loading-skeleton"; -import { useParams } from "react-router-dom"; -import { useAccount } from "wagmi"; - -import VoteIcon from "svgs/icons/voted.svg"; - -import { DisputeKits } from "consts/index"; -import { Periods } from "consts/periods"; -import { useDisputeKitAddresses } from "hooks/useDisputeKitAddresses"; -import { useLockOverlayScroll } from "hooks/useLockOverlayScroll"; -import { useVotingContext } from "hooks/useVotingContext"; -import { formatDate } from "utils/date"; -import { isUndefined } from "utils/index"; -import { isLastRound } from "utils/isLastRound"; - -import { useAppealCost } from "queries/useAppealCost"; -import { DisputeDetailsQuery, useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { getPeriodEndTimestamp } from "components/DisputeView"; -import InfoCard from "components/InfoCard"; -import Popup, { PopupType } from "components/Popup"; - -import Classic from "./Classic"; -import Shutter from "./Shutter"; -import VotingHistory from "./VotingHistory"; - -const Container = styled.div` - padding: 20px 16px 16px; - - ${landscapeStyle( - () => css` - padding: 32px 32px 16px; - ` - )} -`; - -const InfoCardContainer = styled.div` - display: flex; - margin-bottom: ${responsiveSize(16, 24)}; -`; - -const useFinalDate = (lastPeriodChange: string, currentPeriodIndex?: number, timesPerPeriod?: string[]) => - useMemo(() => { - if (!isUndefined(currentPeriodIndex) && !isUndefined(timesPerPeriod)) - return getPeriodEndTimestamp(lastPeriodChange, currentPeriodIndex, timesPerPeriod); - else return undefined; - }, [lastPeriodChange, currentPeriodIndex, timesPerPeriod]); - -interface IVoting { - arbitrable?: `0x${string}`; - currentPeriodIndex: number; - dispute: DisputeDetailsQuery["dispute"]; -} - -const Voting: React.FC<IVoting> = ({ arbitrable, currentPeriodIndex, dispute }) => { - const { id } = useParams(); - const { isDisconnected } = useAccount(); - const { data: disputeData } = useDisputeDetailsQuery(id); - const { data: appealCost } = useAppealCost(id); - const { wasDrawn: userWasDrawn, hasVoted: voted, isLoading: isDrawDataLoading } = useVotingContext(); - const [isPopupOpen, setIsPopupOpen] = useState(false); - useLockOverlayScroll(isPopupOpen); - const lastPeriodChange = disputeData?.dispute?.lastPeriodChange; - const timesPerPeriod = disputeData?.dispute?.court?.timesPerPeriod; - const finalDate = useFinalDate(lastPeriodChange, currentPeriodIndex, timesPerPeriod); - - const disputeKitAddress = disputeData?.dispute?.currentRound?.disputeKit?.address; - const { disputeKitName } = useDisputeKitAddresses({ disputeKitAddress }); - const isClassicDisputeKit = disputeKitName === DisputeKits.Classic || disputeKitName === DisputeKits.Gated; - const isShutterDisputeKit = disputeKitName === DisputeKits.Shutter || disputeKitName === DisputeKits.GatedShutter; - const isGated = Boolean(disputeKitName?.includes("Gated")); - - const isCommitOrVotePeriod = useMemo( - () => [Periods.vote, Periods.commit].includes(currentPeriodIndex), - [currentPeriodIndex] - ); - - return ( - <Container> - {isLastRound(appealCost) && ( - <> - <InfoCard msg="This dispute is on its last round. Vote wisely, It cannot be appealed any further." /> - <br /> - </> - )} - - {userWasDrawn || isDisconnected ? null : ( - <InfoCardContainer> - {isDrawDataLoading ? ( - <Skeleton width={300} height={20} /> - ) : ( - <InfoCard msg="You were not drawn in current round." /> - )} - </InfoCardContainer> - )} - - {isPopupOpen && ( - <Popup - title="Thanks for Voting" - icon={VoteIcon} - popupType={ - disputeData?.dispute?.court?.hiddenVotes && currentPeriodIndex === Periods.commit - ? PopupType.VOTE_WITH_COMMIT - : PopupType.VOTE_WITHOUT_COMMIT - } - date={finalDate ? formatDate(finalDate) : ""} - isCommit={false} - setIsOpen={setIsPopupOpen} - automaticVoteReveal={isShutterDisputeKit} - /> - )} - {userWasDrawn && isCommitOrVotePeriod && !voted ? ( - <> - <VotingHistory {...{ arbitrable }} isQuestion={false} /> - {isClassicDisputeKit ? ( - <Classic arbitrable={arbitrable ?? "0x0"} setIsOpen={setIsPopupOpen} {...{ isGated }} /> - ) : null} - {isShutterDisputeKit ? ( - <Shutter - arbitrable={arbitrable ?? "0x0"} - setIsOpen={setIsPopupOpen} - {...{ dispute, currentPeriodIndex, isGated }} - /> - ) : null} - </> - ) : ( - <VotingHistory {...{ arbitrable }} isQuestion={true} /> - )} - </Container> - ); -}; - -export default Voting; diff --git a/web/src/pages/Cases/CaseDetails/index.tsx b/web/src/pages/Cases/CaseDetails/index.tsx deleted file mode 100644 index d2bf60721..000000000 --- a/web/src/pages/Cases/CaseDetails/index.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { Route, Routes, useParams, Navigate } from "react-router-dom"; - -import { Card } from "@kleros/ui-components-library"; - -import { Periods } from "consts/periods"; -import { ClassicAppealProvider } from "hooks/useClassicAppealContext"; -import { VotingContextProvider } from "hooks/useVotingContext"; - -import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; - -import { responsiveSize } from "styles/responsiveSize"; - -import CaseStarButton from "components/CaseStarButton"; -import ScrollTop from "components/ScrollTop"; - -import Appeal from "./Appeal"; -import Evidence from "./Evidence"; -import MaintenanceButtons from "./MaintenanceButtons"; -import Overview from "./Overview"; -import Tabs from "./Tabs"; -import Timeline from "./Timeline"; -import Voting from "./Voting"; - -const Container = styled.div``; - -const StyledCard = styled(Card)` - width: 100%; - height: auto; - min-height: 100px; - border-radius: 0 0 3px 3px; -`; - -const HeaderContainer = styled.div` - width: 100%; - display: flex; - align-items: center; - margin-top: -2px; - margin-bottom: ${responsiveSize(16, 32)}; -`; - -const Header = styled.h1` - display: flex; - font-size: ${responsiveSize(20, 24)}; - align-items: center; - flex: 1; - gap: ${responsiveSize(8, 12)}; - margin: 0; -`; - -const CaseDetails: React.FC = () => { - const { id } = useParams(); - const { data } = useDisputeDetailsQuery(id); - const dispute = data?.dispute; - const currentPeriodIndex = (dispute ? Periods[dispute.period] : 0) as number; - const arbitrable = dispute?.arbitrated.id as `0x${string}`; - - return ( - <VotingContextProvider> - <ClassicAppealProvider> - <Container> - <HeaderContainer> - <Header> - Case #{id} {id ? <CaseStarButton id={id} /> : null} - </Header> - - <MaintenanceButtons /> - </HeaderContainer> - <Timeline {...{ currentPeriodIndex, dispute }} /> - <Tabs /> - <StyledCard> - <Routes> - <Route - path="overview" - element={ - <Overview currentPeriodIndex={currentPeriodIndex} courtID={dispute?.court.id} {...{ arbitrable }} /> - } - /> - <Route path="evidence" element={<Evidence />} /> - <Route path="voting" element={<Voting {...{ arbitrable, currentPeriodIndex, dispute }} />} /> - <Route path="appeal" element={<Appeal {...{ currentPeriodIndex }} />} /> - <Route path="*" element={<Navigate to="overview" replace />} /> - </Routes> - </StyledCard> - <ScrollTop /> - </Container> - </ClassicAppealProvider> - </VotingContextProvider> - ); -}; - -export default CaseDetails; diff --git a/web/src/pages/Cases/CasesFetcher.tsx b/web/src/pages/Cases/CasesFetcher.tsx deleted file mode 100644 index 462674053..000000000 --- a/web/src/pages/Cases/CasesFetcher.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import React, { useMemo } from "react"; - -import { useParams, useNavigate } from "react-router-dom"; - -import useIsDesktop from "hooks/useIsDesktop"; -import { isUndefined } from "utils/index"; -import { decodeURIFilter, useRootPath } from "utils/uri"; - -import { useCasesQuery } from "queries/useCasesQuery"; -import { useCounterQuery, CounterQuery } from "queries/useCounter"; -import { useCourtDetails, CourtDetailsQuery } from "queries/useCourtDetails"; - -import { DisputeDetailsFragment, Dispute_Filter, OrderDirection } from "src/graphql/graphql"; - -import CasesDisplay from "components/CasesDisplay"; -import ScrollTop from "components/ScrollTop"; - -const calculateStats = ( - isCourtFilter: boolean, - courtData: CourtDetailsQuery["court"], - counters: CounterQuery["counter"], - filter?: Dispute_Filter -): { totalCases: number; ruledCases: number } => { - let totalCases: number, ruledCases: number; - if (filter?.period === "appeal") { - totalCases = isCourtFilter ? courtData?.numberAppealingDisputes : counters?.casesAppealing; - ruledCases = 0; - } else if (isUndefined(filter?.ruled)) { - totalCases = isCourtFilter ? courtData?.numberDisputes : counters?.cases; - ruledCases = isCourtFilter ? courtData?.numberClosedDisputes : counters?.casesRuled; - } else if (filter?.ruled) { - totalCases = isCourtFilter ? courtData?.numberClosedDisputes : counters?.casesRuled; - ruledCases = totalCases; - } else { - totalCases = isCourtFilter - ? courtData?.numberDisputes - courtData?.numberClosedDisputes - : counters?.cases - counters?.casesRuled; - ruledCases = 0; - } - return { - totalCases: isNaN(totalCases) ? 0 : totalCases, - ruledCases: isNaN(ruledCases) ? 0 : ruledCases, - }; -}; - -const CasesFetcher: React.FC = () => { - const { page, order, filter } = useParams(); - const location = useRootPath(); - const navigate = useNavigate(); - const isDesktop = useIsDesktop(); - const casesPerPage = isDesktop ? 9 : 3; - const pageNumber = parseInt(page ?? "1"); - const disputeSkip = casesPerPage * (pageNumber - 1); - const { data: counterData } = useCounterQuery(); - const decodedFilter = decodeURIFilter(filter ?? "all"); - const isCourtFilter = !isUndefined(decodedFilter?.court); - const { data: courtData } = useCourtDetails(decodedFilter?.court?.toString()); - const { data } = useCasesQuery( - disputeSkip, - casesPerPage, - decodedFilter, - order === "asc" ? OrderDirection.Asc : OrderDirection.Desc - ); - const { totalCases, ruledCases } = useMemo( - () => calculateStats(isCourtFilter, courtData?.court, counterData?.counter, decodedFilter), - [isCourtFilter, courtData?.court, counterData?.counter, decodedFilter] - ); - const totalPages = useMemo( - () => (!isUndefined(totalCases) ? Math.ceil(totalCases / casesPerPage) : 1), - [totalCases, casesPerPage] - ); - - return ( - <> - <CasesDisplay - disputes={data?.disputes as DisputeDetailsFragment[]} - numberDisputes={totalCases} - numberClosedDisputes={ruledCases} - currentPage={pageNumber} - setCurrentPage={(newPage: number) => navigate(`${location}/${newPage}/${order}/${filter}`)} - totalPages={totalPages} - {...{ casesPerPage }} - /> - <ScrollTop /> - </> - ); -}; - -export default CasesFetcher; diff --git a/web/src/pages/Cases/index.tsx b/web/src/pages/Cases/index.tsx deleted file mode 100644 index 7a1325ee8..000000000 --- a/web/src/pages/Cases/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { Routes, Route } from "react-router-dom"; - -import { MAX_WIDTH_LANDSCAPE, landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import CaseDetails from "./CaseDetails"; -import CasesFetcher from "./CasesFetcher"; - -const Container = styled.div` - width: 100%; - background-color: ${({ theme }) => theme.lightBackground}; - padding: 32px 16px 40px; - max-width: ${MAX_WIDTH_LANDSCAPE}; - margin: 0 auto; - - ${landscapeStyle( - () => css` - padding: 48px ${responsiveSize(0, 132)} 60px; - ` - )} -`; - -const Cases: React.FC = () => ( - <Container> - <Routes> - <Route path="/display/:page/:order/:filter" element={<CasesFetcher />} /> - <Route path="/:id/*" element={<CaseDetails />} /> - </Routes> - </Container> -); - -export default Cases; diff --git a/web/src/pages/Courts/CourtDetails/Description.tsx b/web/src/pages/Courts/CourtDetails/Description.tsx deleted file mode 100644 index b8ff78dbb..000000000 --- a/web/src/pages/Courts/CourtDetails/Description.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import React, { useEffect } from "react"; -import styled from "styled-components"; - -import ReactMarkdown from "react-markdown"; -import { Routes, Route, Navigate, useParams, useNavigate, useLocation, useSearchParams } from "react-router-dom"; -import { Tabs } from "@kleros/ui-components-library"; - -import { useCourtPolicy } from "queries/useCourtPolicy"; - -import { StyledSkeleton } from "components/StyledSkeleton"; - -const Container = styled.div` - width: 100%; -`; - -const TextContainer = styled.div` - width: 100%; - padding: 12px 0; -`; - -const StyledReactMarkdown = styled(ReactMarkdown)` - p { - word-break: break-word; - } - - ul, - ol { - li + li { - margin-top: 8px; - } - } - - h1 { - margin: 16px 0 16px 0; - font-size: 20px; - line-height: 26px; - } - - h2 { - margin: 16px 0 16px 0; - font-size: 20px; - line-height: 26px; - } - - h3 { - margin: 16px 0 16px 0; - font-size: 18px; - line-height: 24px; - } - - a { - font-size: 16px; - } -`; - -const StyledTabs = styled(Tabs)` - width: 100%; - > * { - display: flex; - flex-wrap: wrap; - > svg { - margin-right: 0px !important; - } - } -`; - -interface IPolicy { - purpose?: string; - requiredSkills?: string; - rules?: string; -} - -const TABS = [ - { - text: "Purpose", - value: 0, - path: "purpose", - isVisible: (policy: IPolicy) => !!policy?.purpose, - }, - { - text: "Skills", - value: 1, - path: "skills", - isVisible: (policy: IPolicy) => !!policy?.requiredSkills, - }, - { - text: "Policy", - value: 2, - path: "policy", - isVisible: (policy: IPolicy) => !!policy?.rules, - }, -]; - -const Description: React.FC = () => { - const { id } = useParams(); - const { data: policy } = useCourtPolicy(id); - const navigate = useNavigate(); - const location = useLocation(); - const [searchParams] = useSearchParams(); - const suffix = searchParams.toString() ? `?${searchParams.toString()}` : ""; - const currentPathName = location.pathname.split("/").at(-1); - - const filteredTabs = TABS.filter(({ isVisible }) => isVisible(policy)); - const currentTab = TABS.findIndex(({ path }) => path === currentPathName); - - const handleTabChange = (i: number) => { - navigate(`${TABS[i].path}${suffix}`); - }; - useEffect(() => { - if (currentPathName && !filteredTabs.map((t) => t.path).includes(currentPathName) && filteredTabs.length > 0) { - navigate(`${filteredTabs[0].path}${suffix}`, { replace: true }); - } - }, [policy, currentPathName, filteredTabs, navigate, suffix]); - return policy ? ( - <Container id="description"> - <StyledTabs currentValue={currentTab} items={filteredTabs} callback={handleTabChange} /> - <TextContainer> - <Routes> - <Route path="purpose" element={formatMarkdown(policy?.purpose)} /> - <Route path="skills" element={formatMarkdown(policy?.requiredSkills)} /> - <Route path="policy" element={formatMarkdown(policy?.rules)} /> - <Route path="*" element={<Navigate to={filteredTabs.length > 0 ? filteredTabs[0].path : ""} replace />} /> - </Routes> - </TextContainer> - </Container> - ) : null; -}; - -const formatMarkdown = (markdown?: string) => - markdown ? <StyledReactMarkdown>{markdown.replace(/\n/g, " \n")}</StyledReactMarkdown> : <StyledSkeleton />; - -export default Description; diff --git a/web/src/pages/Courts/CourtDetails/Info.tsx b/web/src/pages/Courts/CourtDetails/Info.tsx deleted file mode 100644 index 3fe2ffa36..000000000 --- a/web/src/pages/Courts/CourtDetails/Info.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from "react"; -import styled from "styled-components"; -import InfoCircle from "svgs/icons/info-circle.svg"; - -const Container = styled.div` - display: flex; - align-items: flex-start; - gap: 8px; -`; - -const StyledSpan = styled.span` - color: ${({ theme }) => theme.secondaryText}; - font-size: 14px; -`; - -const StyledInfoCircle = styled(InfoCircle)` - width: 16px; - height: 16px; - flex-shrink: 0; -`; - -const Info: React.FC = () => { - return ( - <Container> - <StyledInfoCircle /> - <StyledSpan>Note that past performance is not a guarantee of future results.</StyledSpan> - </Container> - ); -}; -export default Info; diff --git a/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/Header.tsx b/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/Header.tsx deleted file mode 100644 index 01ebc8dc0..000000000 --- a/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/Header.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -const Container = styled.div` - display: flex; - width: 100%; - background-color: ${({ theme }) => theme.lightBlue}; - border: 1px solid ${({ theme }) => theme.stroke}; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - padding: 18px 24px; - justify-content: space-between; - margin-top: ${responsiveSize(12, 16)}; -`; - -const StyledLabel = styled.label` - font-size: 14px; - color: ${({ theme }) => theme.secondaryText}; -`; - -const Header: React.FC = () => { - return ( - <Container> - <StyledLabel>Juror</StyledLabel> - <StyledLabel>PNK Staked</StyledLabel> - </Container> - ); -}; - -export default Header; diff --git a/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/JurorCard.tsx b/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/JurorCard.tsx deleted file mode 100644 index dafa1849e..000000000 --- a/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/JurorCard.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; - -import JurorTitle from "pages/Home/TopJurors/JurorCard/JurorTitle"; -import Stake from "./Stake"; - -const Container = styled.div` - ${hoverShortTransitionTiming} - display: flex; - justify-content: space-between; - width: 100%; - background-color: ${({ theme }) => theme.whiteBackground}; - border: 1px solid ${({ theme }) => theme.stroke}; - border-top: none; - align-items: center; - padding: 18px 24px; - - :hover { - background-color: ${({ theme }) => theme.lightGrey}BB; - } -`; - -interface IJurorCard { - address: string; - effectiveStake: string; -} - -const JurorCard: React.FC<IJurorCard> = ({ address, effectiveStake }) => { - return ( - <Container> - <JurorTitle {...{ address }} smallDisplay /> - <Stake {...{ effectiveStake }} /> - </Container> - ); -}; - -export default JurorCard; diff --git a/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/Stake.tsx b/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/Stake.tsx deleted file mode 100644 index 5d2a53c0b..000000000 --- a/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/Stake.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { formatPNK } from "utils/format"; - -interface IStake { - effectiveStake: string; -} - -const StyledLabel = styled.label` - font-size: 14px; - color: ${({ theme }) => theme.primaryText}; -`; - -const Stake: React.FC<IStake> = ({ effectiveStake }) => { - return <StyledLabel> {formatPNK(BigInt(effectiveStake))} </StyledLabel>; -}; -export default Stake; diff --git a/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/index.tsx b/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/index.tsx deleted file mode 100644 index f5edbddaa..000000000 --- a/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/DisplayJurors/index.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import React, { useEffect, useMemo, useRef, useState } from "react"; -import { useParams, useSearchParams } from "react-router-dom"; -import styled from "styled-components"; -import { responsiveSize } from "styles/responsiveSize"; -import { isUndefined } from "utils/index"; -import { useTopStakedJurorsByCourt } from "queries/useTopStakedJurorsByCourt"; -import { OrderDirection } from "src/graphql/graphql"; -import { SkeletonDisputeListItem } from "components/StyledSkeleton"; -import JurorCard from "./JurorCard"; -import Header from "./Header"; -import { ListContainer as BaseListContainer } from "pages/Home/TopJurors"; - -const ListContainer = styled(BaseListContainer)` - overflow: visible; -`; - -const CardsWrapper = styled.div` - max-height: 520px; - overflow-y: hidden; - - &:hover { - overflow-y: auto; - } -`; - -const StyledLabel = styled.label` - display: flex; - font-size: 16px; - margin-top: ${responsiveSize(12, 20)}; -`; - -const PER_PAGE = 30; - -const DisplayJurors: React.FC = () => { - const { id: courtId, order } = useParams(); - const [searchParams] = useSearchParams(); - const searchValue = searchParams.get("jurorStakedSearch") ?? ""; - const [page, setPage] = useState(0); - const skip = page * PER_PAGE; - const { data, isFetching } = useTopStakedJurorsByCourt( - courtId, - skip, - PER_PAGE, - "effectiveStake", - order === "asc" ? OrderDirection.Asc : OrderDirection.Desc, - searchValue - ); - const [acc, setAcc] = useState<{ id: string; userAddress: string; effectiveStake: string }[]>([]); - - useEffect(() => { - setPage(0); - setAcc([]); - }, [searchValue, courtId, order]); - - useEffect(() => { - const chunk = - data?.jurorTokensPerCourts?.map((j) => ({ - id: j.juror.id, - userAddress: j.juror.userAddress, - effectiveStake: j.effectiveStake, - })) ?? []; - if (chunk.length) setAcc((prev) => [...prev, ...chunk]); - }, [data]); - - const sentinelRef = useRef<HTMLDivElement | null>(null); - - useEffect(() => { - const sentinel = sentinelRef.current; - if (!sentinel) return; - const obs = new IntersectionObserver( - ([e]) => { - if (e.isIntersecting && !isFetching && acc.length % PER_PAGE === 0) setPage((p) => p + 1); - }, - { threshold: 0.1 } - ); - obs.observe(sentinel); - return () => obs.disconnect(); - }, [isFetching, acc.length]); - - const jurors = useMemo(() => acc, [acc]); - - return ( - <> - {!isUndefined(jurors) && jurors.length === 0 && !isFetching ? ( - <StyledLabel>No jurors found</StyledLabel> - ) : ( - <ListContainer> - <Header /> - <CardsWrapper> - {jurors.map((j) => ( - <JurorCard key={j.id} address={j.id} {...j} /> - ))} - {isFetching && [...Array(9)].map((_, i) => <SkeletonDisputeListItem key={`s-${i}`} />)} - <div ref={sentinelRef} /> - </CardsWrapper> - </ListContainer> - )} - </> - ); -}; - -export default DisplayJurors; diff --git a/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/Search.tsx b/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/Search.tsx deleted file mode 100644 index 1f3b12998..000000000 --- a/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/Search.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React, { useState } from "react"; -import styled from "styled-components"; -import { Searchbar } from "@kleros/ui-components-library"; -import { useDebounce } from "react-use"; -import { useLocation, useNavigate, useSearchParams } from "react-router-dom"; -import { isEmpty } from "utils/index"; - -const Container = styled.div` - width: 100%; - display: flex; - flex-wrap: wrap; - gap: 8px; - margin-bottom: 5px; - z-index: 0; -`; - -const StyledSearchbar = styled(Searchbar)` - flex: 1; - flex-basis: 310px; - input { - font-size: 16px; - height: 45px; - padding-top: 0; - padding-bottom: 0; - } -`; - -const Search: React.FC = () => { - const [searchParams] = useSearchParams(); - const navigate = useNavigate(); - const { pathname } = useLocation(); - const initial = searchParams.get("jurorStakedSearch") ?? ""; - const [value, setValue] = useState(initial); - useDebounce( - () => { - const params = new URLSearchParams(searchParams); - if (isEmpty(value)) { - params.delete("jurorStakedSearch"); - } else { - params.set("jurorStakedSearch", value); - } - navigate(`${pathname}?${params.toString()}`, { replace: true }); - }, - 500, - [value] - ); - return ( - <Container> - <StyledSearchbar - dir="auto" - type="text" - placeholder="Search by address" - value={value} - onChange={(e) => setValue(e.target.value)} - /> - </Container> - ); -}; - -export default Search; diff --git a/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/index.tsx b/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/index.tsx deleted file mode 100644 index 8abc6e816..000000000 --- a/web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/index.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -import { getDescriptiveCourtName } from "utils/getDescriptiveCourtName"; - -import Search from "./Search"; -import DisplayJurors from "./DisplayJurors"; - -const Container = styled.div` - margin-top: ${responsiveSize(28, 48)}; - max-width: 578px; -`; - -const Title = styled.h1` - margin-bottom: ${responsiveSize(12, 16)}; - font-size: ${responsiveSize(20, 24)}; -`; - -const JurorsStakedByCourt: React.FC<{ courtName: string | undefined }> = ({ courtName }) => { - return ( - <Container> - <Title>Jurors Staked in {getDescriptiveCourtName(courtName)}</Title> - <Search /> - <DisplayJurors /> - </Container> - ); -}; - -export default JurorsStakedByCourt; diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx deleted file mode 100644 index c8bca450e..000000000 --- a/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import React, { useState, useMemo, useEffect } from "react"; -import styled from "styled-components"; - -import { useParams } from "react-router-dom"; -import { useDebounce } from "react-use"; - -import { useParsedAmount } from "hooks/useParsedAmount"; -import { usePnkData } from "hooks/usePNKData"; -import { commify, uncommify } from "utils/commify"; -import { formatPNK, roundNumberDown } from "utils/format"; -import { isUndefined } from "utils/index"; - -import { useCourtDetails } from "queries/useCourtDetails"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; - -import { NumberInputField } from "components/NumberInputField"; - -import StakeWithdrawButton, { ActionType } from "./StakeWithdrawButton"; - -const StyledField = styled(NumberInputField)` - height: fit-content; - input { - border-radius: 3px 0px 0px 3px; - } -`; - -const LabelArea = styled.div` - display: flex; - justify-content: space-between; -`; - -const StyledLabel = styled.label` - ${hoverShortTransitionTiming} - color: ${({ theme }) => theme.primaryBlue}; - cursor: pointer; - - :hover { - color: ${({ theme }) => theme.secondaryBlue}; - } -`; - -const InputArea = styled.div` - display: flex; - flex-direction: column; - align-items: center; - gap: 12px; - width: 100%; -`; - -const InputFieldAndButton = styled.div` - display: flex; - flex-direction: row; - width: 100%; -`; - -const EnsureChainContainer = styled.div` - button { - height: 45px; - border: 1px solid ${({ theme }) => theme.stroke}; - border-radius: 0px 3px 3px 0px; - } -`; - -interface IInputDisplay { - action: ActionType; - amount: string; - setAmount: (arg0: string) => void; -} - -const InputDisplay: React.FC<IInputDisplay> = ({ action, amount, setAmount }) => { - const [debouncedAmount, setDebouncedAmount] = useState(""); - const [errorMsg, setErrorMsg] = useState<string | undefined>(); - const [isPopupOpen, setIsPopupOpen] = useState(false); - useDebounce(() => setDebouncedAmount(amount), 500, [amount]); - const parsedAmount = useParsedAmount(uncommify(debouncedAmount) as `${number}`); - - const { id } = useParams(); - const { balance, jurorBalance } = usePnkData({ courtId: id }); - const { data: courtDetails } = useCourtDetails(id); - - const parsedBalance = formatPNK(balance ?? 0n, 0, true); - - const parsedStake = formatPNK(jurorBalance?.[2] ?? 0n, 0, true); - const isStaking = useMemo(() => action === ActionType.stake, [action]); - - useEffect(() => { - if (parsedAmount > 0n && balance === 0n && isStaking) { - setErrorMsg("You need a non-zero PNK balance to stake"); - } else if (isStaking && balance && parsedAmount > balance) { - setErrorMsg("Insufficient balance to stake this amount"); - } else if (!isStaking && jurorBalance && parsedAmount > jurorBalance[2]) { - setErrorMsg("Insufficient staked amount to withdraw this amount"); - } else if ( - action === ActionType.stake && - courtDetails && - jurorBalance && - parsedAmount !== 0n && - jurorBalance[2] + parsedAmount < BigInt(courtDetails?.court?.minStake) - ) { - setErrorMsg(`Min Stake in court is: ${formatPNK(courtDetails?.court?.minStake)} PNK`); - } else { - setErrorMsg(undefined); - } - }, [parsedAmount, isStaking, balance, jurorBalance, action, courtDetails]); - - return ( - <> - <LabelArea> - <label>{`Available ${isStaking ? parsedBalance : parsedStake} PNK`}</label> - <StyledLabel - onClick={() => { - const amount = isStaking ? parsedBalance : parsedStake; - setAmount(amount); - }} - > - {isStaking ? "Stake" : "Withdraw"} all - </StyledLabel> - </LabelArea> - <InputArea> - <InputFieldAndButton> - <StyledField - value={uncommify(amount)} - onChange={(e) => { - setAmount(e); - }} - placeholder={isStaking ? "Amount to stake" : "Amount to withdraw"} - message={isPopupOpen ? undefined : (errorMsg ?? undefined)} - variant={!isUndefined(errorMsg) && !isPopupOpen ? "error" : "info"} - formatter={(number: string) => (number !== "" ? commify(roundNumberDown(Number(number))) : "")} - /> - <EnsureChainContainer> - <StakeWithdrawButton - {...{ - amount, - parsedAmount, - action, - setAmount, - setErrorMsg, - isPopupOpen, - setIsPopupOpen, - }} - /> - </EnsureChainContainer> - </InputFieldAndButton> - </InputArea> - </> - ); -}; - -export default InputDisplay; diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/Header.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/Header.tsx deleted file mode 100644 index 3c1882d25..000000000 --- a/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/Header.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import PNKLogo from "svgs/styled/pnk.svg"; -import ChartIcon from "svgs/icons/chart.svg"; - -const Container = styled.div` - display: flex; - align-items: center; - justify-content: space-between; - flex-wrap: wrap; - gap: 8px; -`; - -const PNKLogoAndTitle = styled.div` - display: flex; - gap: 0 12px; - align-items: center; -`; - -const StyledChartIcon = styled(ChartIcon)` - path { - fill: ${({ theme }) => theme.primaryText}; - } -`; - -const StyledPNKLogo = styled(PNKLogo)` - width: 32px; - height: 32px; - [class$="stop-1"] { - stop-color: ${({ theme }) => theme.primaryBlue}; - } - [class$="stop-2"] { - stop-color: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const Title = styled.p` - margin: 0; - font-weight: 600; -`; - -const Last30DaysContainer = styled.div` - display: flex; - gap: 8px; - align-items: center; -`; - -const Last30DaysText = styled.p` - margin: 0; - font-size: 14px; - font-weight: 600; -`; - -const Header: React.FC = () => { - return ( - <Container> - <PNKLogoAndTitle> - <StyledPNKLogo /> - <Title>Simulator</Title> - </PNKLogoAndTitle> - <Last30DaysContainer> - <StyledChartIcon /> - <Last30DaysText>Last 30 Days</Last30DaysText> - </Last30DaysContainer> - </Container> - ); -}; -export default Header; diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/QuantityToSimulate.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/QuantityToSimulate.tsx deleted file mode 100644 index 2b953841c..000000000 --- a/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/QuantityToSimulate.tsx +++ /dev/null @@ -1,109 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import Skeleton from "react-loading-skeleton"; - -import { commify } from "utils/commify"; -import { isUndefined } from "utils/index"; - -import WithHelpTooltip from "components/WithHelpTooltip"; - -const Container = styled.div` - display: flex; - flex-direction: row; - align-items: center; - flex-wrap: wrap; - gap: 0 8px; - justify-content: center; -`; - -export const TextWithTooltipContainer = styled.div` - color: ${({ theme }) => theme.secondaryPurple}; - font-size: 14px; - - > div { - svg { - fill: ${({ theme }) => theme.secondaryPurple}; - margin-left: 4px; - } - } -`; - -export const Quantity = styled.p` - font-size: 14px; - color: ${({ theme }) => theme.primaryText}; - margin: 0; -`; - -const FinalQuantity = styled(Quantity)` - font-weight: 600; -`; - -const StyledMathematicalOperation = styled.p` - font-size: 14px; - color: ${({ theme }) => theme.secondaryText}; - margin: 0; -`; - -interface IQuantityToSimulate { - jurorCurrentEffectiveStake: number | undefined; - jurorCurrentSpecificStake: number | undefined; - isStaking: boolean; - amountToStake: number; - className?: string; -} - -const QuantityToSimulate: React.FC<IQuantityToSimulate> = ({ - isStaking, - jurorCurrentEffectiveStake, - jurorCurrentSpecificStake, - amountToStake, - className, -}) => { - const effectiveStakeDisplay = !isUndefined(jurorCurrentEffectiveStake) ? ( - `${commify(jurorCurrentEffectiveStake)} PNK` - ) : ( - <Skeleton width={50} /> - ); - - const amountStakedInThisCourt = !isUndefined(jurorCurrentSpecificStake) - ? `${commify(jurorCurrentSpecificStake)} PNK` - : "..."; - - const amountStakedInSubCourts = - !isUndefined(jurorCurrentEffectiveStake) && !isUndefined(jurorCurrentSpecificStake) - ? `${commify(jurorCurrentEffectiveStake - jurorCurrentSpecificStake)} PNK` - : "..."; - - const finalQuantityValue = - !isUndefined(jurorCurrentEffectiveStake) && !isUndefined(amountToStake) - ? isStaking - ? jurorCurrentEffectiveStake + amountToStake - : jurorCurrentEffectiveStake - amountToStake - : undefined; - - const finalQuantityDisplay = !isUndefined(finalQuantityValue) ? ( - `${commify(finalQuantityValue)} PNK` - ) : ( - <Skeleton width={50} /> - ); - - return ( - <Container {...{ className }}> - <Quantity>{effectiveStakeDisplay}</Quantity> - <TextWithTooltipContainer> - <WithHelpTooltip - tooltipMsg={`Current Stake (Sum of): Amount of PNK staked in this court (${amountStakedInThisCourt}); Amount of PNK staked on its sub-courts (${amountStakedInSubCourts})`} - > - Current Stake - </WithHelpTooltip> - </TextWithTooltipContainer> - <StyledMathematicalOperation>{isStaking ? "+" : "-"}</StyledMathematicalOperation> - <Quantity>{commify(amountToStake)} PNK</Quantity> - <StyledMathematicalOperation>=</StyledMathematicalOperation> - <FinalQuantity>{finalQuantityDisplay}</FinalQuantity> - </Container> - ); -}; - -export default QuantityToSimulate; diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/index.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/index.tsx deleted file mode 100644 index 77aff9496..000000000 --- a/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/index.tsx +++ /dev/null @@ -1,276 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import { useParams } from "react-router-dom"; -import Skeleton from "react-loading-skeleton"; -import { useAccount } from "wagmi"; -import { formatEther } from "viem"; - -import { CoinIds } from "consts/coingecko"; - -import { formatUSD } from "utils/format"; -import { isUndefined } from "utils/index"; -import { beautifyStatNumber } from "utils/beautifyStatNumber"; - -import { useCoinPrice } from "hooks/useCoinPrice"; -import { useHomePageExtraStats } from "queries/useHomePageExtraStats"; -import { useJurorStakeDetailsQuery } from "queries/useJurorStakeDetailsQuery"; - -import GavelIcon from "svgs/icons/gavel.svg"; -import DiceIcon from "svgs/icons/dice.svg"; -import DollarIcon from "svgs/icons/dollar.svg"; -import ArrowRightIcon from "svgs/icons/arrow-right.svg"; - -import Header from "./Header"; -import QuantityToSimulate from "./QuantityToSimulate"; -import Info from "../../Info"; -import WithHelpTooltip from "components/WithHelpTooltip"; -import { Divider } from "components/Divider"; - -const Container = styled.div` - display: flex; - flex-direction: column; - background-color: ${({ theme }) => theme.lightBlue}; - box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1); - padding: 16px; - border-radius: 8px; - border: 1px solid ${({ theme }) => theme.mediumBlue}; - justify-content: center; - - ${landscapeStyle( - () => css` - padding: 20px; - ` - )} -`; - -const ItemsContainer = styled.div` - display: flex; - flex-direction: column; - gap: 8px 0; - margin: 24px 0 12px 0; -`; - -const SimulatorItem = styled.div` - display: flex; - align-items: center; - font-size: 14px; - justify-content: space-between; -`; - -const IconWrapper = styled.div` - svg { - width: 14px; - height: 14px; - fill: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const StyledDivider = styled(Divider)` - background-color: ${({ theme }) => theme.mediumBlue}; - margin: 12px 0 8px 0; -`; - -const LeftContent = styled.div` - display: flex; - align-items: flex-start; - flex-direction: row; - gap: 8px; - - ${landscapeStyle( - () => css` - align-items: center; - ` - )} -`; - -const RightContent = styled.div` - display: flex; - flex-direction: row; - align-items: center; - gap: 8px; -`; - -const StyledTitle = styled.span` - color: ${({ theme }) => theme.secondaryText}; -`; - -const StyledCurrentValue = styled.span` - font-weight: 600; - color: ${({ theme }) => theme.secondaryText}; -`; - -const StyledFutureValue = styled.span` - font-weight: 600; - color: ${({ theme }) => theme.primaryText}; -`; - -const StyledArrowRightIcon = styled(ArrowRightIcon)<{ isStaking: boolean }>` - fill: ${({ theme, isStaking }) => (isStaking ? theme.success : theme.warning)}; -`; - -const InfoContainer = styled.div` - padding-top: 4px; -`; - -const calculateJurorOdds = (newStake: number, totalStake: number): string => { - const odds = totalStake !== 0 ? (newStake * 100) / totalStake : 0; - return `${odds.toFixed(2)}%`; -}; - -interface ISimulator { - amountToStake: number; - isStaking: boolean; -} - -const Simulator: React.FC<ISimulator> = ({ amountToStake, isStaking }) => { - const { id } = useParams(); - const { address } = useAccount(); - const { data: stakeData } = useJurorStakeDetailsQuery(address?.toLowerCase() as `0x${string}`); - const jurorStakeData = stakeData?.jurorTokensPerCourts?.find(({ court }) => court.id === id); - const jurorCurrentEffectiveStake = address && jurorStakeData ? Number(formatEther(jurorStakeData.effectiveStake)) : 0; - const jurorCurrentSpecificStake = address && jurorStakeData ? Number(formatEther(jurorStakeData.staked)) : 0; - - const timeframedCourtData = useHomePageExtraStats(30); - const { prices: pricesData } = useCoinPrice([CoinIds.ETH]); - const ethPriceUSD = pricesData ? pricesData[CoinIds.ETH]?.price : undefined; - - const foundCourt = useMemo(() => { - return timeframedCourtData?.data?.courts?.find((c) => c.id === id); - }, [timeframedCourtData, id]); - - const courtCurrentEffectiveStake = foundCourt ? Number(foundCourt.effectiveStake) / 1e18 : undefined; - - const currentTreeVotesPerPnk = foundCourt?.treeVotesPerPnk; - const currentTreeDisputesPerPnk = foundCourt?.treeDisputesPerPnk; - const currentTreeExpectedRewardPerPnk = foundCourt?.treeExpectedRewardPerPnk; - - const totals = useMemo(() => { - if (isUndefined(courtCurrentEffectiveStake)) return {}; - return { - votes: !isUndefined(currentTreeVotesPerPnk) ? courtCurrentEffectiveStake * currentTreeVotesPerPnk : undefined, - cases: !isUndefined(currentTreeDisputesPerPnk) - ? courtCurrentEffectiveStake * currentTreeDisputesPerPnk - : undefined, - rewards: !isUndefined(currentTreeExpectedRewardPerPnk) - ? courtCurrentEffectiveStake * currentTreeExpectedRewardPerPnk - : undefined, - }; - }, [courtCurrentEffectiveStake, currentTreeVotesPerPnk, currentTreeDisputesPerPnk, currentTreeExpectedRewardPerPnk]); - - const { votes: totalVotes, rewards: totalRewards } = totals; - - const courtFutureEffectiveStake = !isUndefined(courtCurrentEffectiveStake) - ? Math.max(isStaking ? courtCurrentEffectiveStake + amountToStake : courtCurrentEffectiveStake - amountToStake, 0) - : undefined; - - const futureTreeVotesPerPnk = - !isUndefined(courtFutureEffectiveStake) && !isUndefined(totalVotes) - ? totalVotes / courtFutureEffectiveStake - : undefined; - - const futureTreeExpectedRewardPerPnk = - !isUndefined(courtFutureEffectiveStake) && !isUndefined(totalRewards) - ? totalRewards / courtFutureEffectiveStake - : undefined; - - const jurorFutureEffectiveStake = !isUndefined(jurorCurrentEffectiveStake) - ? Math.max(isStaking ? jurorCurrentEffectiveStake + amountToStake : jurorCurrentEffectiveStake - amountToStake, 0) - : undefined; - - const currentExpectedVotes = - !isUndefined(jurorCurrentEffectiveStake) && !isUndefined(currentTreeVotesPerPnk) - ? beautifyStatNumber(jurorCurrentEffectiveStake * currentTreeVotesPerPnk) - : undefined; - const futureExpectedVotes = - !isUndefined(jurorFutureEffectiveStake) && !isUndefined(futureTreeVotesPerPnk) - ? beautifyStatNumber(jurorFutureEffectiveStake * futureTreeVotesPerPnk) - : undefined; - - const currentDrawingOdds = - !isUndefined(jurorCurrentEffectiveStake) && !isUndefined(courtCurrentEffectiveStake) - ? calculateJurorOdds(jurorCurrentEffectiveStake, courtCurrentEffectiveStake) - : undefined; - const futureDrawingOdds = - !isUndefined(jurorFutureEffectiveStake) && !isUndefined(courtFutureEffectiveStake) - ? calculateJurorOdds(jurorFutureEffectiveStake, courtFutureEffectiveStake) - : undefined; - - const currentExpectedRewardsUSD = - !isUndefined(jurorCurrentEffectiveStake) && - !isUndefined(currentTreeExpectedRewardPerPnk) && - !isUndefined(ethPriceUSD) - ? formatUSD(jurorCurrentEffectiveStake * currentTreeExpectedRewardPerPnk * ethPriceUSD) - : undefined; - const futureExpectedRewardsUSD = - !isUndefined(jurorFutureEffectiveStake) && !isUndefined(futureTreeExpectedRewardPerPnk) && !isUndefined(ethPriceUSD) - ? formatUSD(jurorFutureEffectiveStake * futureTreeExpectedRewardPerPnk * ethPriceUSD) - : undefined; - - const simulatorItems = [ - { - title: "Votes", - icon: <GavelIcon />, - currentValue: currentExpectedVotes, - futureValue: futureExpectedVotes, - }, - { - title: "Drawing Odds", - icon: <DiceIcon />, - currentValue: currentDrawingOdds, - futureValue: futureDrawingOdds, - }, - { - title: "Rewards", - icon: <DollarIcon />, - currentValue: currentExpectedRewardsUSD, - futureValue: futureExpectedRewardsUSD, - tooltipMsg: - "Estimated rewards in USD, assuming 100% coherent voting. If other jurors vote incoherently, additional rewards in the form of PNK tokens may be earned beyond this estimate.", - }, - ]; - - return ( - <Container> - <Header /> - <StyledDivider /> - <QuantityToSimulate {...{ jurorCurrentEffectiveStake, jurorCurrentSpecificStake, isStaking, amountToStake }} /> - <ItemsContainer> - {simulatorItems.map((item) => ( - <SimulatorItem key={item.title}> - <LeftContent> - <IconWrapper>{item.icon}</IconWrapper> - {item.tooltipMsg ? ( - <WithHelpTooltip place="top" tooltipMsg={item.tooltipMsg}> - <StyledTitle>{item.title}: </StyledTitle> - </WithHelpTooltip> - ) : ( - <StyledTitle>{item.title}: </StyledTitle> - )} - </LeftContent> - <RightContent> - <StyledCurrentValue> - {!isUndefined(item.currentValue) ? item.currentValue : <Skeleton width={32} />} - </StyledCurrentValue> - <StyledArrowRightIcon {...{ isStaking }} /> - <StyledFutureValue> - {!amountToStake || amountToStake === 0 ? "?" : null} - {!isUndefined(amountToStake) && - amountToStake > 0 && - (!isUndefined(item.futureValue) ? item.futureValue : <Skeleton width={32} />)} - </StyledFutureValue> - </RightContent> - </SimulatorItem> - ))} - </ItemsContainer> - <StyledDivider /> - <InfoContainer> - <Info /> - </InfoContainer> - </Container> - ); -}; - -export default Simulator; diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawButton.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawButton.tsx deleted file mode 100644 index 84dd659c7..000000000 --- a/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawButton.tsx +++ /dev/null @@ -1,319 +0,0 @@ -import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import styled, { DefaultTheme, useTheme } from "styled-components"; - -import { useParams } from "react-router-dom"; -import { type TransactionReceipt } from "viem"; -import { usePublicClient } from "wagmi"; - -import { type _TimelineItem1, Button } from "@kleros/ui-components-library"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { - klerosCoreAddress, - useSimulateKlerosCoreSetStake, - useWriteKlerosCoreSetStake, - useSimulatePnkIncreaseAllowance, - useWritePnkIncreaseAllowance, -} from "hooks/contracts/generated"; -import { useLockOverlayScroll } from "hooks/useLockOverlayScroll"; -import { usePnkData } from "hooks/usePNKData"; -import { isUndefined } from "utils/index"; -import { parseWagmiError } from "utils/parseWagmiError"; -import { refetchWithRetry } from "utils/refecthWithRetry"; - -import { useCourtDetails } from "queries/useCourtDetails"; - -import { EnsureChain } from "components/EnsureChain"; - -import StakeWithdrawPopup from "./StakeWithdrawPopup"; -import { getStakeSteps, StakeSteps } from "./StakeWithdrawPopup/stakeSteps"; - -export enum ActionType { - allowance = "allowance", - stake = "stake", - withdraw = "withdraw", -} - -const Container = styled.div` - display: flex; - gap: 8px; - flex-direction: column; -`; - -type Steps = [_TimelineItem1, ..._TimelineItem1[]]; -interface IActionButton { - amount: string; - parsedAmount: bigint; - action: ActionType; - setAmount: (arg0: string) => void; - setErrorMsg: (msg?: string) => void; - isPopupOpen: boolean; - setIsPopupOpen: (arg0: boolean) => void; -} - -const StakeWithdrawButton: React.FC<IActionButton> = ({ - amount, - parsedAmount, - action, - setErrorMsg, - setAmount, - isPopupOpen, - setIsPopupOpen, -}) => { - const { id } = useParams(); - const theme = useTheme(); - const [isSuccess, setIsSuccess] = useState(false); - const [popupStepsState, setPopupStepsState] = useState<Steps>(); - const controllerRef = useRef<AbortController | null>(null); - useLockOverlayScroll(isPopupOpen); - - const { balance, jurorBalance, allowance, refetchAllowance } = usePnkData({ courtId: id }); - const { data: courtDetails } = useCourtDetails(id); - const publicClient = usePublicClient(); - - const isStaking = action === ActionType.stake; - const isAllowance = isStaking && !isUndefined(allowance) && allowance < parsedAmount; - - const targetStake = useMemo(() => { - if (jurorBalance) { - if (isAllowance) { - return parsedAmount; - } else if (isStaking) { - return jurorBalance[2] + parsedAmount; - } else { - return jurorBalance[2] - parsedAmount; - } - } - return 0n; - }, [jurorBalance, parsedAmount, isAllowance, isStaking]); - - const { - data: increaseAllowanceConfig, - isLoading: isSimulatingAllowance, - error: allowanceError, - } = useSimulatePnkIncreaseAllowance({ - query: { - enabled: - isAllowance && - !isUndefined(targetStake) && - !isUndefined(allowance) && - !isUndefined(balance) && - parsedAmount <= balance, - }, - args: [klerosCoreAddress[DEFAULT_CHAIN], BigInt(targetStake ?? 0) - BigInt(allowance ?? 0)], - }); - - const { writeContractAsync: increaseAllowance } = useWritePnkIncreaseAllowance(); - - const { - data: setStakeConfig, - error: setStakeError, - isLoading: isSimulatingSetStake, - refetch: refetchSetStake, - } = useSimulateKlerosCoreSetStake({ - query: { - enabled: - !isUndefined(targetStake) && - !isUndefined(id) && - parsedAmount !== 0n && - targetStake >= 0n && - !isAllowance && - Boolean(isStaking ? balance && parsedAmount <= balance : jurorBalance && parsedAmount <= jurorBalance[2]), - }, - args: [BigInt(id ?? 0), targetStake], - }); - const { writeContractAsync: setStake } = useWriteKlerosCoreSetStake(); - - const updatePopupState = (signal: AbortSignal, state: Steps) => { - if (signal.aborted) return; - setPopupStepsState(state); - }; - - const handleStake = useCallback( - (signal: AbortSignal, config?: typeof setStakeConfig, approvalHash?: `0x${string}`) => { - if (signal.aborted) return; - const isWithdraw = action === ActionType.withdraw; - const requestData = config?.request ?? setStakeConfig?.request; - const commonArgs: [string, DefaultTheme, `0x${string}` | undefined] = [amount, theme, approvalHash]; - - if (requestData && publicClient) { - updatePopupState( - signal, - getStakeSteps(isWithdraw ? StakeSteps.WithdrawInitiate : StakeSteps.StakeInitiate, ...commonArgs) - ); - - setStake(requestData) - .then(async (hash) => { - if (signal.aborted) return; - updatePopupState( - signal, - getStakeSteps(isWithdraw ? StakeSteps.WithdrawPending : StakeSteps.StakePending, ...commonArgs, hash) - ); - await publicClient.waitForTransactionReceipt({ hash, confirmations: 2 }).then((res: TransactionReceipt) => { - if (signal.aborted) return; - const status = res.status === "success"; - if (status) { - updatePopupState( - signal, - getStakeSteps( - isWithdraw ? StakeSteps.WithdrawConfirmed : StakeSteps.StakeConfirmed, - ...commonArgs, - hash - ) - ); - setIsSuccess(true); - } else - updatePopupState( - signal, - getStakeSteps(isWithdraw ? StakeSteps.WithdrawFailed : StakeSteps.StakeFailed, ...commonArgs, hash) - ); - }); - }) - .catch((err) => { - updatePopupState( - signal, - getStakeSteps( - isWithdraw ? StakeSteps.WithdrawFailed : StakeSteps.StakeFailed, - ...commonArgs, - undefined, - err - ) - ); - }); - } else { - updatePopupState( - signal, - getStakeSteps( - StakeSteps.StakeFailed, - ...commonArgs, - undefined, - new Error("Simulation Failed. Please restart the process.") - ) - ); - } - }, - [setStake, setStakeConfig, publicClient, amount, theme, action] - ); - - const handleClick = useCallback(() => { - setIsPopupOpen(true); - controllerRef.current = new AbortController(); - const signal = controllerRef.current.signal; - - if (isAllowance && increaseAllowanceConfig && publicClient) { - const commonArgs: [string, DefaultTheme] = [amount, theme]; - updatePopupState(signal, getStakeSteps(StakeSteps.ApproveInitiate, ...commonArgs)); - - increaseAllowance(increaseAllowanceConfig.request) - .then(async (hash) => { - if (signal.aborted) return; - updatePopupState(signal, getStakeSteps(StakeSteps.ApprovePending, ...commonArgs, hash)); - - await publicClient - .waitForTransactionReceipt({ hash, confirmations: 2 }) - .then(async (res: TransactionReceipt) => { - if (signal.aborted) return; - const status = res.status === "success"; - if (status) { - await refetchAllowance(); - const refetchData = await refetchWithRetry(refetchSetStake); - // check for a relatively new error with react/tanstack-query: - // https://github.com/TanStack/query/issues/8209 - if (!refetchData?.data) - updatePopupState( - signal, - getStakeSteps( - StakeSteps.ApproveFailed, - ...commonArgs, - hash, - undefined, - new Error("Something went wrong. Please restart the process.") - ) - ); - else { - handleStake(signal, refetchData.data, hash); - } - } else updatePopupState(signal, getStakeSteps(StakeSteps.ApproveFailed, ...commonArgs, hash)); - }); - }) - .catch((err) => { - updatePopupState(signal, getStakeSteps(StakeSteps.ApproveFailed, ...commonArgs, undefined, undefined, err)); - }); - } else { - handleStake(signal); - } - }, [ - increaseAllowance, - increaseAllowanceConfig, - handleStake, - isAllowance, - theme, - publicClient, - amount, - refetchAllowance, - refetchSetStake, - setIsPopupOpen, - ]); - - useEffect(() => { - if (isPopupOpen) return; - if (setStakeError || allowanceError) { - setErrorMsg(parseWagmiError(setStakeError || allowanceError)); - } - }, [setStakeError, setErrorMsg, targetStake, allowanceError, isPopupOpen]); - - const isDisabled = useMemo(() => { - if ( - parsedAmount == 0n || - (action === ActionType.stake && - courtDetails && - jurorBalance && - parsedAmount !== 0n && - jurorBalance[2] + parsedAmount < BigInt(courtDetails?.court?.minStake)) - ) - return true; - if (isAllowance) { - return isUndefined(increaseAllowanceConfig) || isSimulatingAllowance || !isUndefined(allowanceError); - } - return isUndefined(setStakeConfig) || isSimulatingSetStake || !isUndefined(setStakeError); - }, [ - parsedAmount, - increaseAllowanceConfig, - isSimulatingAllowance, - setStakeConfig, - isSimulatingSetStake, - setStakeError, - allowanceError, - isAllowance, - action, - courtDetails, - jurorBalance, - ]); - - const closePopup = () => { - setErrorMsg(undefined); - setIsPopupOpen(false); - setIsSuccess(false); - setAmount(""); - setPopupStepsState(undefined); - if (controllerRef.current) { - controllerRef.current.abort(); - } - }; - - return ( - <EnsureChain> - <Container> - <Button - text={isStaking ? "Stake" : "Withdraw"} - isLoading={isPopupOpen || isSimulatingAllowance || isSimulatingSetStake} - disabled={isDisabled || isSimulatingAllowance || isSimulatingSetStake} - onClick={handleClick} - /> - {isPopupOpen && <StakeWithdrawPopup {...{ action, closePopup, amount, steps: popupStepsState, isSuccess }} />} - </Container> - </EnsureChain> - ); -}; - -export default StakeWithdrawButton; diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/Header.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/Header.tsx deleted file mode 100644 index 9ec9f24b5..000000000 --- a/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/Header.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import React, { useMemo } from "react"; -import styled from "styled-components"; - -import Skeleton from "react-loading-skeleton"; -import { useParams } from "react-router-dom"; -import { formatEther } from "viem"; -import { useAccount } from "wagmi"; - -import Check from "svgs/icons/check-circle-outline.svg"; - -import { useCourtDetails } from "hooks/queries/useCourtDetails"; -import { commify, uncommify } from "utils/commify"; - -import { useJurorStakeDetailsQuery } from "queries/useJurorStakeDetailsQuery"; - -import { isUndefined } from "src/utils"; - -import WithHelpTooltip from "components/WithHelpTooltip"; - -import QuantityToSimulate, { Quantity, TextWithTooltipContainer } from "../Simulator/QuantityToSimulate"; -import { ActionType } from "../StakeWithdrawButton"; - -const StakingMsgContainer = styled.div` - display: flex; - flex-direction: column; - gap: 9px; - align-items: center; -`; - -const StakingMsg = styled.h1` - font-weight: 400; - margin: 0; - padding: 0; - text-align: center; -`; - -const StakingAmount = styled(StakingMsg)` - font-weight: 600; - color: ${({ theme }) => theme.secondaryPurple}; - text-align: center; -`; - -const CheckIcon = styled(Check)` - path { - fill: ${({ theme }) => theme.success}; - } - width: 80px; - height: 80px; -`; - -const CourtName = styled.label` - margin-bottom: 15px; -`; - -const QuantityContainer = styled.div` - display: flex; - align-items: center; - justify-content: center; - gap: 8px; -`; - -interface IHeader { - action: ActionType; - amount: string; - isSuccess: boolean; -} - -const Header: React.FC<IHeader> = ({ action, amount, isSuccess }) => { - const { id } = useParams(); - const { data: courtDetails } = useCourtDetails(id); - const { address } = useAccount(); - const { data: stakeData } = useJurorStakeDetailsQuery(address?.toLowerCase() as `0x${string}`); - const jurorStakeData = stakeData?.jurorTokensPerCourts?.find(({ court }) => court.id === id); - const jurorCurrentEffectiveStake = address && jurorStakeData ? Number(formatEther(jurorStakeData.effectiveStake)) : 0; - const jurorCurrentSpecificStake = address && jurorStakeData ? Number(formatEther(jurorStakeData.staked)) : 0; - - const effectiveStakeDisplay = !isUndefined(jurorCurrentEffectiveStake) ? ( - `${commify(jurorCurrentEffectiveStake)} PNK` - ) : ( - <Skeleton width={50} /> - ); - - const isWithdraw = action === ActionType.withdraw; - const preStakeText = useMemo(() => (isWithdraw ? "withdrawing" : "staking"), [isWithdraw]); - const postStakeText = useMemo(() => (isWithdraw ? "withdrew" : "staked"), [isWithdraw]); - - return ( - <StakingMsgContainer> - {isSuccess ? <CheckIcon /> : null} - <StakingMsg>{isSuccess ? `You successfully ${postStakeText}` : `You are ${preStakeText}`}</StakingMsg> - <StakingAmount>{amount} PNK</StakingAmount> - {courtDetails?.court?.name ? <CourtName>on {courtDetails.court.name}</CourtName> : null} - {isSuccess ? ( - <QuantityContainer> - <Quantity>{effectiveStakeDisplay}</Quantity> - <TextWithTooltipContainer> - <WithHelpTooltip tooltipMsg="The stake is confirmed! It is standard procedure to delay the execution of a change in stakes if the phase of the arbitrator is not currently Staking. It'll be updated shortly."> - Current Stake - </WithHelpTooltip> - </TextWithTooltipContainer>{" "} - </QuantityContainer> - ) : ( - <QuantityToSimulate - {...{ - jurorCurrentEffectiveStake, - jurorCurrentSpecificStake, - isStaking: !isWithdraw, - amountToStake: Number(uncommify(amount)), - }} - /> - )} - </StakingMsgContainer> - ); -}; - -export default Header; diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/index.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/index.tsx deleted file mode 100644 index 3f0995fff..000000000 --- a/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/index.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import React from "react"; -import styled, { css, keyframes } from "styled-components"; - -import { _TimelineItem1, AlertMessage, CustomTimeline } from "@kleros/ui-components-library"; - -import Close from "svgs/icons/close.svg"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { Divider } from "components/Divider"; -import LightButton from "components/LightButton"; -import { Overlay } from "components/Overlay"; - -import { ActionType } from "../StakeWithdrawButton"; - -import Header from "./Header"; - -const animation = keyframes` - 0%{ - transform: translate(-50%,-47%); - opacity: 0; - } - 100%{ - transform: translate(-50%,-50%); - opacity: 1; - }; -`; - -const Container = styled.div` - display: flex; - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - max-height: 80vh; - overflow-y: auto; - position: relative; - - z-index: 10; - flex-direction: column; - align-items: center; - justify-content: center; - width: 86vw; - max-width: 600px; - border-radius: 7px; - border: 1px solid ${({ theme }) => theme.stroke}; - background-color: ${({ theme }) => theme.whiteBackground}; - box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.06); - padding: 8px; - - animation: ${animation} 200ms ease-in; - - svg { - visibility: visible; - } - - ${landscapeStyle( - () => css` - overflow-y: hidden; - width: ${responsiveSize(300, 600)}; - ` - )} -`; - -const InnerContainer = styled.div` - width: 100%; - display: flex; - flex-direction: column; - align-self: center; - gap: 24px; - padding: 16px 24px 24px; -`; - -const StyledButton = styled(LightButton)` - position: absolute; - top: 8px; - right: 8px; - border: none !important; - padding: 4px !important; - border-radius: 7px !important; - height: fit-content !important; - .button-svg { - margin: 0; - path { - fill: ${({ theme }) => theme.stroke}; - } - } -`; - -const AlertContainer = styled.div` - margin-top: 24px; -`; - -interface IStakeWithdrawPopup { - action: ActionType; - amount: string; - closePopup: () => void; - steps?: [_TimelineItem1, ..._TimelineItem1[]]; - isSuccess: boolean; -} - -const StakeWithdrawPopup: React.FC<IStakeWithdrawPopup> = ({ amount, closePopup, steps, isSuccess, action }) => { - return ( - <Overlay onClick={closePopup}> - <Container onClick={(e) => e.stopPropagation()}> - <StyledButton Icon={Close} text="" onClick={closePopup} /> - <InnerContainer> - <Header {...{ amount, isSuccess, action }} /> - <Divider /> - {steps && <CustomTimeline items={steps} />} - {isSuccess && action === ActionType.stake ? ( - <AlertContainer> - <AlertMessage - title="Hey there! Avoid missing a case" - msg="Make sure to subscribe to notifications on Settings > Notifications" - variant="info" - /> - </AlertContainer> - ) : null} - </InnerContainer> - </Container> - </Overlay> - ); -}; - -export default StakeWithdrawPopup; diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/stakeSteps.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/stakeSteps.tsx deleted file mode 100644 index 1db8ea294..000000000 --- a/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/stakeSteps.tsx +++ /dev/null @@ -1,161 +0,0 @@ -import React from "react"; -import styled, { DefaultTheme } from "styled-components"; - -import { _TimelineItem1, StateProp } from "@kleros/ui-components-library"; - -import CheckIcon from "svgs/icons/check-circle-outline.svg"; - -import Spinner from "components/Spinner"; -import TxnHash from "components/TxnHash"; - -const StyledLabel = styled.label` - color: ${({ theme }) => theme.secondaryPurple}; -`; - -const PartyContainer = styled.div` - display: flex; - gap: 8px; -`; - -export enum StakeSteps { - ApproveInitiate, - ApprovePending, - ApproveFailed, - StakeInitiate, - StakeConfirmed, - StakePending, - StakeFailed, - WithdrawInitiate, - WithdrawPending, - WithdrawConfirmed, - WithdrawFailed, -} - -const createApprovalSteps = ( - theme: DefaultTheme, - variant: string, - state: StateProp["state"], - amount: string, - hash: `0x${string}` | undefined, - error: any -): [_TimelineItem1, ..._TimelineItem1[]] => { - const party = () => { - if (variant === "refused") return hash ? <TxnHash hash={hash} variant="error" /> : <></>; - return state === "loading" ? ( - <></> - ) : ( - <PartyContainer> - {hash && <TxnHash hash={hash} variant="pending" />} - <Spinner /> - </PartyContainer> - ); - }; - return [ - { - title: "Approve in wallet", - subtitle: error ? (error?.shortMessage ?? error?.message) : "PNK spending", - rightSided: true, - variant, - state, - party: party(), - }, - { - title: "Stake in wallet", - subtitle: "", - rightSided: true, - variant: theme.secondaryPurple, - party: <StyledLabel>{amount} PNK</StyledLabel>, - state: "disabled", - }, - ]; -}; - -const createStakeSteps = ( - theme: DefaultTheme, - variant: string, - state: StateProp["state"], - amount: string, - approvalHash: `0x${string}` | undefined, - stakeHash: `0x${string}` | undefined, - error: any, - isStake: boolean -): [_TimelineItem1, ..._TimelineItem1[]] => { - const party = () => { - if (["refused", "accepted"].includes(variant)) - return stakeHash ? <TxnHash hash={stakeHash} variant={variant === "refused" ? "error" : "success"} /> : <></>; - return state === "loading" ? ( - <StyledLabel>{amount} PNK</StyledLabel> - ) : ( - <PartyContainer> - {stakeHash && <TxnHash hash={stakeHash} variant="pending" />} - <Spinner /> - </PartyContainer> - ); - }; - return isStake - ? [ - { - title: "Approve in wallet", - subtitle: "PNK spending", - rightSided: true, - variant: theme.success, - party: approvalHash ? <TxnHash hash={approvalHash} variant="success" /> : <></>, - Icon: CheckIcon, - }, - { - title: "Stake in wallet", - subtitle: error ? (error?.shortMessage ?? error?.message) : "", - rightSided: true, - variant, - state, - party: party(), - Icon: variant === "accepted" ? CheckIcon : undefined, - }, - ] - : [ - { - title: "Unstake in wallet", - subtitle: error ? (error?.shortMessage ?? error?.message) : "", - rightSided: true, - variant, - state, - party: party(), - Icon: variant === "accepted" ? CheckIcon : undefined, - }, - ]; -}; - -export const getStakeSteps = ( - stepType: StakeSteps, - amount: string, - theme: DefaultTheme, - approvalHash?: `0x${string}`, - stakeHash?: `0x${string}`, - error?: any -): [_TimelineItem1, ..._TimelineItem1[]] => { - switch (stepType) { - case StakeSteps.ApproveInitiate: - return createApprovalSteps(theme, theme.secondaryPurple, "loading", amount, approvalHash, error); - - case StakeSteps.ApprovePending: - return createApprovalSteps(theme, theme.secondaryPurple, "active", amount, approvalHash, error); - case StakeSteps.ApproveFailed: - return createApprovalSteps(theme, "refused", "active", amount, approvalHash, error); - case StakeSteps.StakeInitiate: - return createStakeSteps(theme, theme.secondaryPurple, "loading", amount, approvalHash, stakeHash, error, true); - case StakeSteps.StakePending: - return createStakeSteps(theme, theme.secondaryPurple, "active", amount, approvalHash, stakeHash, error, true); - case StakeSteps.StakeFailed: - return createStakeSteps(theme, "refused", "active", amount, approvalHash, stakeHash, error, true); - case StakeSteps.StakeConfirmed: - return createStakeSteps(theme, "accepted", "active", amount, approvalHash, stakeHash, error, true); - case StakeSteps.WithdrawInitiate: - return createStakeSteps(theme, theme.secondaryPurple, "loading", amount, approvalHash, stakeHash, error, false); - case StakeSteps.WithdrawPending: - return createStakeSteps(theme, theme.secondaryPurple, "active", amount, approvalHash, stakeHash, error, false); - case StakeSteps.WithdrawConfirmed: - return createStakeSteps(theme, "accepted", "active", amount, approvalHash, stakeHash, error, false); - default: - return createStakeSteps(theme, "refused", "active", amount, approvalHash, stakeHash, error, false); - } -}; diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/index.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/index.tsx deleted file mode 100644 index fb5294d65..000000000 --- a/web/src/pages/Courts/CourtDetails/StakePanel/index.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React, { useState } from "react"; -import styled, { css } from "styled-components"; - -import { uncommify } from "utils/commify"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import Tag from "components/Tag"; - -import InputDisplay from "./InputDisplay"; -import { ActionType } from "./StakeWithdrawButton"; -import Simulator from "./Simulator"; - -const Container = styled.div` - position: relative; - display: flex; - flex-direction: column; - gap: 16px; - - ${landscapeStyle( - () => css` - gap: 24px; - flex-direction: column; - ` - )}; -`; - -const StakingArea = styled.div` - display: flex; - flex-direction: column; - gap: 24px; -`; - -const TagArea = styled.div` - display: flex; - gap: 10px; -`; - -const TextArea = styled.div` - color: ${({ theme }) => theme.primaryText}; -`; - -const InputArea = styled(TagArea)` - flex-direction: column; -`; - -const StakePanel: React.FC<{ courtName: string | undefined }> = ({ courtName }) => { - const [amount, setAmount] = useState(""); - const [isActive, setIsActive] = useState<boolean>(true); - const [action, setAction] = useState<ActionType>(ActionType.stake); - - const handleClick = (action: ActionType) => { - setIsActive(action === ActionType.stake); - setAction(action); - }; - - const isStaking = action === ActionType.stake; - return ( - <Container> - <StakingArea> - <TagArea> - <Tag text="Stake" active={isActive} onClick={() => handleClick(ActionType.stake)} /> - <Tag text="Withdraw" active={!isActive} onClick={() => handleClick(ActionType.withdraw)} /> - </TagArea> - <TextArea> - <strong>{`${isStaking ? "Stake" : "Withdraw"} PNK`}</strong> {`${isStaking ? "to join the" : "from"}`}{" "} - {courtName} - {courtName?.toLowerCase().endsWith("court") || courtName?.toLowerCase().startsWith("corte") ? null : " Court"} - </TextArea> - <InputArea> - <InputDisplay {...{ action, amount, setAmount }} /> - </InputArea> - </StakingArea> - <Simulator amountToStake={amount ? Number(uncommify(amount)) : 0} {...{ isStaking }} /> - </Container> - ); -}; - -export default StakePanel; diff --git a/web/src/pages/Courts/CourtDetails/Stats/StatsContent.tsx b/web/src/pages/Courts/CourtDetails/Stats/StatsContent.tsx deleted file mode 100644 index bb6653ab4..000000000 --- a/web/src/pages/Courts/CourtDetails/Stats/StatsContent.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import ChartIcon from "svgs/icons/chart.svg"; - -import { Prices } from "hooks/useCoinPrice"; -import { calculateSubtextRender } from "utils/calculateSubtextRender"; -import { isUndefined } from "utils/index"; - -import { CourtDetailsQuery } from "queries/useCourtDetails"; - -import { responsiveSize } from "styles/responsiveSize"; - -import StatDisplay from "components/StatDisplay"; -import { StyledSkeleton } from "components/StyledSkeleton"; - -import { stats } from "./stats"; - -const TimeDisplayContainer = styled.div` - display: flex; - flex-direction: row; - align-items: center; - gap: 8px; -`; - -const AllTimeContainer = styled(TimeDisplayContainer)` - padding: ${responsiveSize(12, 16)} 0; -`; - -const StyledAllTimeText = styled.p` - color: ${({ theme }) => theme.primaryText}; - margin: 0; - font-size: 14px; -`; - -const StyledChartIcon = styled(ChartIcon)` - path { - fill: ${({ theme }) => theme.primaryText}; - } -`; - -const AccordionContainer = styled.div` - display: flex; - flex-direction: column; - gap: 4px; -`; - -const StyledCard = styled.div` - display: flex; - flex-wrap: wrap; - gap: 20px 0; -`; - -const StatsContent: React.FC<{ court: CourtDetailsQuery["court"]; pricesData?: Prices; coinIds: string[] }> = ({ - court, - pricesData, - coinIds, -}) => ( - <AccordionContainer> - <div> - <AllTimeContainer> - <StyledChartIcon /> - <StyledAllTimeText>Parameters</StyledAllTimeText> - </AllTimeContainer> - <StyledCard> - {stats.slice(0, 3).map(({ title, coinId, getText, getSubtext, color, icon }) => { - const coinPrice = !isUndefined(pricesData) ? pricesData[coinIds[coinId!]]?.price : undefined; - return ( - <StatDisplay - key={title} - {...{ title, color, icon }} - text={court ? getText(court) : <StyledSkeleton />} - subtext={calculateSubtextRender(court, getSubtext, coinPrice)} - isSmallDisplay={true} - /> - ); - })} - </StyledCard> - </div> - <div> - <AllTimeContainer> - <StyledChartIcon /> - <StyledAllTimeText>Activity</StyledAllTimeText> - </AllTimeContainer> - <StyledCard> - {stats.slice(3, 7).map(({ title, coinId, getText, getSubtext, color, icon }) => { - const coinPrice = !isUndefined(pricesData) ? pricesData[coinIds[coinId!]]?.price : undefined; - return ( - <StatDisplay - key={title} - {...{ title, color, icon }} - text={court ? getText(court) : <StyledSkeleton />} - subtext={calculateSubtextRender(court, getSubtext, coinPrice)} - isSmallDisplay={true} - /> - ); - })} - </StyledCard> - </div> - <div> - <AllTimeContainer> - <StyledChartIcon /> - <StyledAllTimeText>Total Rewards</StyledAllTimeText> - </AllTimeContainer> - <StyledCard> - {stats.slice(7, 9).map(({ title, coinId, getText, getSubtext, color, icon }) => { - const coinPrice = !isUndefined(pricesData) ? pricesData[coinIds[coinId!]]?.price : undefined; - return ( - <StatDisplay - key={title} - {...{ title, color, icon }} - text={court ? getText(court) : <StyledSkeleton />} - subtext={calculateSubtextRender(court, getSubtext, coinPrice)} - isSmallDisplay={true} - /> - ); - })} - </StyledCard> - </div> - </AccordionContainer> -); - -export default StatsContent; diff --git a/web/src/pages/Courts/CourtDetails/Stats/index.tsx b/web/src/pages/Courts/CourtDetails/Stats/index.tsx deleted file mode 100644 index 0ae92d7f2..000000000 --- a/web/src/pages/Courts/CourtDetails/Stats/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { useParams } from "react-router-dom"; - -import { Accordion } from "@kleros/ui-components-library"; - -import { CoinIds } from "consts/coingecko"; -import { useCoinPrice } from "hooks/useCoinPrice"; -import useIsDesktop from "hooks/useIsDesktop"; - -import { useCourtDetails } from "queries/useCourtDetails"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import StatsContent from "./StatsContent"; - -const Container = styled.div` - padding: 0 24px 12px 24px; -`; - -const Header = styled.h3` - color: ${({ theme }) => theme.primaryText}; - font-weight: 600; - margin: 0; -`; - -const StyledAccordion = styled(Accordion)` - > * > button { - padding: 12px 16px !important; - justify-content: unset; - } - //adds padding to body container - > * > div > div { - padding: 0 8px 8px; - } - [class*="accordion-item"] { - margin: 0; - } - - ${landscapeStyle( - () => css` - > * > div > div { - padding: 0 24px; - } - > * > button { - padding: 12px 24px !important; - } - ` - )} -`; - -const Stats = () => { - const { id } = useParams(); - const { data } = useCourtDetails(id); - const coinIds = [CoinIds.PNK, CoinIds.ETH]; - const { prices: pricesData } = useCoinPrice(coinIds); - const isDesktop = useIsDesktop(); - - return isDesktop ? ( - <Container> - <Header>Statistics</Header> - <StatsContent court={data?.court} {...{ pricesData, coinIds }} /> - </Container> - ) : ( - <StyledAccordion - defaultExpanded={0} - items={[ - { - title: "Statistics", - body: <StatsContent court={data?.court} {...{ pricesData, coinIds }} />, - }, - ]} - ></StyledAccordion> - ); -}; - -export default Stats; diff --git a/web/src/pages/Courts/CourtDetails/Stats/stats.ts b/web/src/pages/Courts/CourtDetails/Stats/stats.ts deleted file mode 100644 index 0be8be592..000000000 --- a/web/src/pages/Courts/CourtDetails/Stats/stats.ts +++ /dev/null @@ -1,116 +0,0 @@ -import styled from "styled-components"; - -import EthereumVoteIcon from "svgs/icons/ethereum-vote.svg"; -import EthereumIcon from "svgs/icons/ethereum.svg"; -import BalanceWithHourglassIcon from "svgs/icons/law-balance-hourglass.svg"; -import BalanceIcon from "svgs/icons/law-balance.svg"; -import MinStake from "svgs/icons/min-stake.svg"; -import PNKIcon from "svgs/icons/pnk.svg"; -import PNKRedistributedIcon from "svgs/icons/redistributed-pnk.svg"; -import JurorIcon from "svgs/icons/user.svg"; -import VoteStake from "svgs/icons/vote-stake.svg"; - -import { formatETH, formatPNK, formatUnitsWei, formatUSD } from "utils/format"; - -import { CourtDetailsQuery } from "queries/useCourtDetails"; - -import { IStatDisplay } from "components/StatDisplay"; - -interface IStat { - title: string; - coinId?: number; - getText: (data: CourtDetailsQuery["court"]) => string; - getSubtext?: (data: CourtDetailsQuery["court"], coinPrice?: number) => string; - color: IStatDisplay["color"]; - icon: React.FC<React.SVGAttributes<SVGElement>>; -} - -const StyledEthereumVoteIcon = styled(EthereumVoteIcon)` - height: 32px !important; -`; - -const StyledJurorIcon = styled(JurorIcon)` - height: 15px !important; -`; - -const StyledBalanceWithHourglassIcon = styled(BalanceWithHourglassIcon)` - height: 32px !important; -`; - -export const stats: IStat[] = [ - { - title: "Min Stake", - coinId: 0, - getText: (data) => `${formatPNK(data?.minStake)} PNK`, - getSubtext: (data, coinPrice) => formatUSD(Number(formatUnitsWei(data?.minStake)) * (coinPrice ?? 0)), - color: "blue", - icon: MinStake, - }, - { - title: "Vote Stake", - coinId: 0, - getText: (data) => { - const stake = BigInt((data?.minStake * data?.alpha) / 1e4); - return `${formatPNK(stake)} PNK`; - }, - getSubtext: (data, coinPrice) => { - const stake = (BigInt(data?.minStake) * BigInt(data?.alpha)) / BigInt(1e4); - return formatUSD(Number(formatUnitsWei(stake)) * (coinPrice ?? 0)); - }, - color: "blue", - icon: VoteStake, - }, - { - title: "Reward per Vote", - coinId: 1, - getText: (data) => { - const jurorReward = formatUnitsWei(data?.feeForJuror); - return `${jurorReward} ETH`; - }, - getSubtext: (data, coinPrice) => formatUSD(Number(formatUnitsWei(data?.feeForJuror)) * (coinPrice ?? 0)), - color: "blue", - icon: StyledEthereumVoteIcon, - }, - { - title: "PNK Staked", - coinId: 0, - getText: (data) => `${formatPNK(data?.effectiveStake)} PNK`, - getSubtext: (data, coinPrice) => formatUSD(Number(formatUnitsWei(data?.effectiveStake)) * (coinPrice ?? 0)), - color: "green", - icon: PNKIcon, - }, - { - title: "Active Jurors", - getText: (data) => data?.effectiveNumberStakedJurors, - color: "green", - icon: StyledJurorIcon, - }, - { - title: "Cases", - getText: (data) => data?.numberDisputes, - color: "green", - icon: BalanceIcon, - }, - { - title: "In Progress", - getText: (data) => data?.numberDisputes - data?.numberClosedDisputes, - color: "green", - icon: StyledBalanceWithHourglassIcon, - }, - { - title: "ETH paid", - coinId: 1, - getText: (data) => `${formatETH(data?.paidETH)} ETH`, - getSubtext: (data, coinPrice) => formatUSD(Number(formatUnitsWei(data?.paidETH)) * (coinPrice ?? 0)), - color: "purple", - icon: EthereumIcon, - }, - { - title: "PNK redistributed", - coinId: 0, - getText: (data) => `${formatPNK(data?.paidPNK)} PNK`, - getSubtext: (data, coinPrice) => formatUSD(Number(formatUnitsWei(data?.paidPNK)) * (coinPrice ?? 0)), - color: "purple", - icon: PNKRedistributedIcon, - }, -]; diff --git a/web/src/pages/Courts/CourtDetails/TopSearch.tsx b/web/src/pages/Courts/CourtDetails/TopSearch.tsx deleted file mode 100644 index 5ac47aa43..000000000 --- a/web/src/pages/Courts/CourtDetails/TopSearch.tsx +++ /dev/null @@ -1,169 +0,0 @@ -import React, { useState, useMemo } from "react"; -import styled, { css } from "styled-components"; - -import { OverlayScrollbarsComponent } from "overlayscrollbars-react"; -import { useNavigate, useParams } from "react-router-dom"; - -import { Card, DropdownCascader, Searchbar } from "@kleros/ui-components-library"; - -import { isUndefined } from "utils/index"; - -import { useCourtTree, rootCourtToItems } from "queries/useCourtTree"; - -import { isKlerosUniversity } from "src/consts"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { StyledSkeleton } from "components/StyledSkeleton"; - -import StakeMaintenanceButtons from "../StakeMaintenanceButton"; - -const Container = styled.div` - width: 100%; - display: flex; - justify-content: space-between; - align-items: center; - gap: 8px 16px; - flex-wrap: wrap; -`; - -const StyledDropdownCascader = styled(DropdownCascader)` - width: ${responsiveSize(200, 240)}; - > button { - width: 100%; - } -`; - -const SearchBarContainer = styled.div` - display: flex; - flex-wrap: wrap; - position: relative; - ${landscapeStyle( - () => css` - flex: 1; - ` - )} -`; - -const StyledSearchbar = styled(Searchbar)` - width: 100%; - input { - font-size: 16px; - height: 45px; - padding-top: 0px; - padding-bottom: 0px; - } -`; - -const SearchResultsContainer = styled(OverlayScrollbarsComponent)` - position: absolute; - margin-top: 45px; - max-height: 400px; - border: 1px solid ${({ theme }) => theme.stroke}; - width: 100%; - flex-direction: column; - border-radius: 4px; - overflow-y: auto; - z-index: 1; - background-color: ${({ theme }) => theme.whiteBackground}; - border-top-left-radius: 0; - border-top-right-radius: 0; -`; - -const StyledCard = styled(Card)<{ selected: boolean }>` - ${hoverShortTransitionTiming} - height: auto; - width: 100%; - padding: ${({ selected }) => (selected ? "16px 13px" : "16px")}; - cursor: pointer; - border: none; - border-left: ${({ selected, theme }) => (selected ? `3px solid ${theme.primaryBlue}` : "none")}; - background-color: ${({ selected, theme }) => (selected ? theme.mediumBlue : "transparent")}; - border-radius: 0; - - :hover { - background-color: ${({ theme }) => theme.mediumBlue}; - } -`; - -const CourtParentSpan = styled.span` - color: ${({ theme }) => theme.secondaryText}EE; -`; - -const CourtNameSpan = styled.span` - color: ${({ theme }) => theme.primaryText}; -`; - -function flattenCourts(court, parent = null) { - const current = { - ...court, - parentName: parent?.name ?? null, - }; - const children = (court.children || []).flatMap((child) => flattenCourts(child, current)); - return [current, ...children]; -} - -const TopSearch: React.FC = () => { - const { data } = useCourtTree(); - const navigate = useNavigate(); - const { id: currentCourtId } = useParams(); - const items = useMemo(() => !isUndefined(data?.court) && [rootCourtToItems(data.court)], [data]); - const isUniversity = isKlerosUniversity(); - const [search, setSearch] = useState(""); - - const filteredCourts = useMemo(() => { - if (!data?.court) return []; - const courts = flattenCourts(data.court).filter((c) => c.name.toLowerCase().includes(search.toLowerCase())); - const selectedCourt = courts.find((c) => c.id === currentCourtId); - if (!selectedCourt) return courts; - - return [selectedCourt, ...courts.filter((c) => c.id !== currentCourtId)]; - }, [data, search, currentCourtId]); - - return ( - <Container> - {items ? ( - <> - <StyledDropdownCascader - items={items} - onSelect={(path) => navigate(path.toString())} - placeholder="Select Court" - /> - <SearchBarContainer> - <StyledSearchbar - dir="auto" - type="text" - placeholder="Search" - value={search} - onChange={(e) => setSearch(e.target.value)} - /> - {search && filteredCourts.length > 0 && ( - <SearchResultsContainer> - {filteredCourts.map((court) => ( - <StyledCard - key={court.id} - selected={court.id === currentCourtId} - onClick={() => { - navigate(`/courts/${court.id}`); - setSearch(""); - }} - > - {court.parentName && <CourtParentSpan>{court.parentName} / </CourtParentSpan>} - <CourtNameSpan>{court.name}</CourtNameSpan> - </StyledCard> - ))} - </SearchResultsContainer> - )} - </SearchBarContainer> - </> - ) : ( - <StyledSkeleton width={240} height={42} /> - )} - {isUniversity ? null : <StakeMaintenanceButtons />} - </Container> - ); -}; - -export default TopSearch; diff --git a/web/src/pages/Courts/CourtDetails/index.tsx b/web/src/pages/Courts/CourtDetails/index.tsx deleted file mode 100644 index 448988711..000000000 --- a/web/src/pages/Courts/CourtDetails/index.tsx +++ /dev/null @@ -1,195 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { useNavigate, useParams } from "react-router-dom"; -import { useToggle } from "react-use"; - -import { Card, Breadcrumb } from "@kleros/ui-components-library"; - -import { isProductionDeployment } from "consts/index"; - -import { getDescriptiveCourtName } from "utils/getDescriptiveCourtName"; - -import { useCourtTree, CourtTreeQuery } from "queries/useCourtTree"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import ClaimPnkButton from "components/ClaimPnkButton"; -import { Divider } from "components/Divider"; -import HowItWorks from "components/HowItWorks"; -import LatestCases from "components/LatestCases"; -import Staking from "components/Popup/MiniGuides/Staking"; -import ScrollTop from "components/ScrollTop"; -import { StyledSkeleton } from "components/StyledSkeleton"; - -import Description from "./Description"; -import StakePanel from "./StakePanel"; -import Stats from "./Stats"; -import TopSearch from "./TopSearch"; -import JurorsStakedByCourt from "./JurorsStakedByCourt"; - -const Container = styled.div``; - -const CourtHeader = styled.h1` - display: flex; - flex-direction: row; - font-size: ${responsiveSize(20, 24)}; - justify-content: space-between; - gap: 8px; - flex-wrap: wrap; - margin-bottom: 16px; -`; - -const CourtInfo = styled.div` - display: flex; - flex-direction: column; - gap: 8px; -`; - -const ButtonContainer = styled.div` - display: flex; - flex-wrap: wrap; - flex-direction: row; - justify-content: center; - gap: 20px; - - ${landscapeStyle( - () => css` - align-items: flex-end; - ` - )}; -`; - -const StyledCard = styled(Card)` - padding: 16px; - margin-top: 12px; - width: 100%; - height: auto; - min-height: 100px; - - ${landscapeStyle( - () => css` - padding: 32px; - ` - )} -`; - -const StyledBreadcrumb = styled(Breadcrumb)` - align-items: center; - button { - font-size: 16px; - } -`; - -const StakePanelAndStats = styled.div` - display: flex; - flex-direction: row; - justify-content: space-between; - margin-top: 24px; - gap: 16px; - flex-wrap: wrap; - - ${landscapeStyle( - () => css` - & > * { - flex: 1 1 calc(50% - 8px); - } - ` - )} -`; - -const CourtDetails: React.FC = () => { - const { id } = useParams(); - const { data } = useCourtTree(); - const [isStakingMiniGuideOpen, toggleStakingMiniGuide] = useToggle(false); - const navigate = useNavigate(); - - const courtPath = getCourtsPath(data?.court, id); - - const breadcrumbItems = - courtPath?.map((node) => ({ - text: node.name, - value: node.id, - })) ?? []; - - const currentCourt = courtPath?.[courtPath.length - 1]; - const courtName = currentCourt?.name; - - return ( - <Container> - <TopSearch /> - <StyledCard> - <CourtHeader> - <CourtInfo> - {data ? courtName : <StyledSkeleton width={200} />} - {breadcrumbItems.length > 1 ? ( - <StyledBreadcrumb - items={breadcrumbItems} - clickable - callback={(courtId) => navigate(`/courts/${courtId}`)} - /> - ) : null} - </CourtInfo> - <ButtonContainer> - {!isProductionDeployment() && <ClaimPnkButton />} - <HowItWorks - isMiniGuideOpen={isStakingMiniGuideOpen} - toggleMiniGuide={toggleStakingMiniGuide} - MiniGuideComponent={Staking} - /> - </ButtonContainer> - </CourtHeader> - <Divider /> - <StakePanelAndStats> - <StakePanel {...{ courtName }} /> - <Stats /> - </StakePanelAndStats> - </StyledCard> - <StyledCard> - <Description /> - </StyledCard> - <LatestCases title={`Latest Cases in ${getDescriptiveCourtName(courtName)}`} filters={{ court: id }} /> - <JurorsStakedByCourt {...{ courtName }} /> - <ScrollTop /> - </Container> - ); -}; - -export default CourtDetails; - -interface IItem { - name: string; - id: string; -} - -export const getCourtsPath = ( - node: CourtTreeQuery["court"], - id: string | undefined, - path: IItem[] = [] -): IItem[] | null => { - if (!node || !id) return null; - - if (node.id === id) { - path.unshift({ - name: node.name || "", - id: node.id, - }); - return path; - } - - if (node.children) { - for (const child of node.children) { - const pathFromChild = getCourtsPath(child, id, path.slice()); - if (pathFromChild) { - pathFromChild.unshift({ - name: node.name || "", - id: node.id, - }); - return pathFromChild; - } - } - } - - return null; -}; diff --git a/web/src/pages/Courts/StakeMaintenanceButton/ExecuteDelayedStakeButton.tsx b/web/src/pages/Courts/StakeMaintenanceButton/ExecuteDelayedStakeButton.tsx deleted file mode 100644 index 44223fc51..000000000 --- a/web/src/pages/Courts/StakeMaintenanceButton/ExecuteDelayedStakeButton.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import React, { useMemo, useState } from "react"; -import styled from "styled-components"; - -import { usePublicClient } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { useSimulateSortitionModule, useWriteSortitionModule } from "hooks/contracts/generated"; -import { - useReadSortitionModuleDelayedStakeReadIndex, - useReadSortitionModuleDelayedStakeWriteIndex, - useSortitionModulePhase, -} from "hooks/useSortitionModule"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import { isUndefined } from "src/utils"; - -import { Phases } from "components/Phase"; - -import { IBaseStakeMaintenanceButton } from "."; - -const StyledButton = styled(Button)` - width: 100%; -`; - -type IExecuteStakeDelayedButton = IBaseStakeMaintenanceButton; - -const ExecuteDelayedStakeButton: React.FC<IExecuteStakeDelayedButton> = ({ setIsOpen }) => { - const [isSending, setIsSending] = useState(false); - const publicClient = usePublicClient(); - const { data: phase } = useSortitionModulePhase(); - const { data: delayedStakeWriteIndex } = useReadSortitionModuleDelayedStakeWriteIndex(); - const { data: delayedStakeReadIndex } = useReadSortitionModuleDelayedStakeReadIndex(); - - const canExecute = useMemo(() => { - if (isUndefined(phase) || isUndefined(delayedStakeReadIndex) || isUndefined(delayedStakeWriteIndex)) return false; - return phase === Phases.staking && delayedStakeWriteIndex >= delayedStakeReadIndex; - }, [phase, delayedStakeReadIndex, delayedStakeWriteIndex]); - - const { - data: executeDelayedStakeConfig, - isLoading: isLoadingConfig, - isError, - } = useSimulateSortitionModule({ - query: { - enabled: canExecute, - }, - // eslint-disable-next-line - // @ts-ignore - functionName: "executeDelayedStakes", - // eslint-disable-next-line - // @ts-ignore - args: [1n + (delayedStakeWriteIndex ?? 0n) - (delayedStakeReadIndex ?? 0n)], - }); - - const { writeContractAsync: executeDelayedStake } = useWriteSortitionModule(); - - const isLoading = useMemo(() => isLoadingConfig || isSending, [isLoadingConfig, isSending]); - const isDisabled = useMemo(() => isError || isLoading || !canExecute, [isError, isLoading, canExecute]); - const handleClick = () => { - if (!executeDelayedStakeConfig || !publicClient || !executeDelayedStake) return; - - setIsSending(true); - - wrapWithToast(async () => await executeDelayedStake(executeDelayedStakeConfig.request), publicClient).finally( - () => { - setIsSending(false); - setIsOpen(false); - } - ); - }; - return ( - <StyledButton - text="Execute Delayed Stakes" - small - isLoading={isLoading} - disabled={isDisabled} - onClick={handleClick} - /> - ); -}; - -export default ExecuteDelayedStakeButton; diff --git a/web/src/pages/Courts/StakeMaintenanceButton/PassPhaseButton.tsx b/web/src/pages/Courts/StakeMaintenanceButton/PassPhaseButton.tsx deleted file mode 100644 index 181c4d2bc..000000000 --- a/web/src/pages/Courts/StakeMaintenanceButton/PassPhaseButton.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import React, { useMemo, useState } from "react"; -import styled from "styled-components"; - -import { usePublicClient } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { - useReadSortitionModuleDisputesWithoutJurors, - useSimulateSortitionModule, - useWriteSortitionModule, -} from "hooks/contracts/generated"; -import { - useReadSortitionModuleLastPhaseChange, - useReadSortitionModuleMaxDrawingTime, - useReadSortitionModuleMinStakingTime, - useSortitionModulePhase, -} from "hooks/useSortitionModule"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import { isUndefined } from "src/utils"; - -import { Phases } from "components/Phase"; - -import { IBaseStakeMaintenanceButton } from "."; - -const StyledButton = styled(Button)` - width: 100%; -`; - -type IPassPhaseButton = IBaseStakeMaintenanceButton; - -const PassPhaseButton: React.FC<IPassPhaseButton> = ({ setIsOpen }) => { - const [isSending, setIsSending] = useState(false); - const publicClient = usePublicClient(); - const { data: phase } = useSortitionModulePhase(); - const { data: lastPhaseChange } = useReadSortitionModuleLastPhaseChange(); - const { data: minStakingTime } = useReadSortitionModuleMinStakingTime(); - const { data: maxDrawingTime } = useReadSortitionModuleMaxDrawingTime(); - const { data: disputeWithoutJurors } = useReadSortitionModuleDisputesWithoutJurors(); - - const canChangePhase = useMemo(() => { - if ( - isUndefined(phase) || - isUndefined(lastPhaseChange) || - isUndefined(minStakingTime) || - isUndefined(maxDrawingTime) || - isUndefined(disputeWithoutJurors) - ) - return false; - - const now = Math.floor(Date.now() / 1000); - switch (phase) { - case Phases.staking: - return BigInt(now) - lastPhaseChange >= minStakingTime; - case Phases.drawing: - return disputeWithoutJurors === 0n || BigInt(now) - lastPhaseChange >= maxDrawingTime; - default: - return true; - } - }, [phase, lastPhaseChange, minStakingTime, maxDrawingTime, disputeWithoutJurors]); - - const { - data: passPhaseConfig, - isLoading: isLoadingConfig, - isError, - } = useSimulateSortitionModule({ - query: { - enabled: canChangePhase, - }, - // eslint-disable-next-line - // @ts-ignore - functionName: "passPhase", - }); - - const { writeContractAsync: passPhase } = useWriteSortitionModule(); - - const isLoading = useMemo(() => isLoadingConfig || isSending, [isLoadingConfig, isSending]); - const isDisabled = useMemo(() => isError || isLoading || !canChangePhase, [isError, isLoading, canChangePhase]); - const handleClick = () => { - if (!passPhaseConfig || !publicClient || !passPhase) return; - - setIsSending(true); - - wrapWithToast(async () => await passPhase(passPhaseConfig.request), publicClient).finally(() => { - setIsSending(false); - setIsOpen(false); - }); - }; - return <StyledButton text="Pass Phase" small isLoading={isLoading} disabled={isDisabled} onClick={handleClick} />; -}; - -export default PassPhaseButton; diff --git a/web/src/pages/Courts/StakeMaintenanceButton/index.tsx b/web/src/pages/Courts/StakeMaintenanceButton/index.tsx deleted file mode 100644 index 128774df2..000000000 --- a/web/src/pages/Courts/StakeMaintenanceButton/index.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import React, { useEffect, useState } from "react"; -import styled from "styled-components"; - -import DottedMenuButton from "components/DottedMenuButton"; -import { EnsureChain } from "components/EnsureChain"; -import { Overlay } from "components/Overlay"; -import Phase from "components/Phase"; - -import ExecuteDelayedStakeButton from "./ExecuteDelayedStakeButton"; -import PassPhaseButton from "./PassPhaseButton"; - -const Container = styled.div` - width: 36px; - height: 36px; - display: flex; - justify-content: center; - align-items: center; - position: relative; -`; - -const PopupContainer = styled.div` - display: flex; - flex-direction: column; - position: absolute; - height: fit-content; - overflow-y: auto; - z-index: 31; - padding: 27px; - gap: 16px; - border: 1px solid ${({ theme }) => theme.stroke}; - background-color: ${({ theme }) => theme.whiteBackground}; - border-radius: 3px; - box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.06); - - bottom: 0; - left: 0; - transform: translate(-100%, 100%); -`; - -export interface IBaseStakeMaintenanceButton { - setIsOpen: (open: boolean) => void; -} - -interface IStakeMaintenanceButtons { - className?: string; -} -const StakeMaintenanceButtons: React.FC<IStakeMaintenanceButtons> = ({ className }) => { - const [isOpen, setIsOpen] = useState(false); - - useEffect(() => { - const openDefault = location.hash.includes("#maintenance"); - if (openDefault) setIsOpen(true); - }, []); - - const toggle = () => setIsOpen((prevValue) => !prevValue); - return ( - <Container {...{ className }}> - {isOpen ? ( - <> - <Overlay onClick={() => setIsOpen(false)} /> - <PopupContainer> - <EnsureChain> - <> - <Phase /> - <PassPhaseButton {...{ setIsOpen }} /> - <ExecuteDelayedStakeButton {...{ setIsOpen }} /> - </> - </EnsureChain> - </PopupContainer> - </> - ) : null} - <DottedMenuButton {...{ toggle }} displayRipple={false} /> - </Container> - ); -}; - -export default StakeMaintenanceButtons; diff --git a/web/src/pages/Courts/index.tsx b/web/src/pages/Courts/index.tsx deleted file mode 100644 index 1efa1abee..000000000 --- a/web/src/pages/Courts/index.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { MAX_WIDTH_LANDSCAPE, landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { Routes, Route, Navigate } from "react-router-dom"; - -import CourtDetails from "./CourtDetails"; - -const Container = styled.div` - width: 100%; - background-color: ${({ theme }) => theme.lightBackground}; - padding: 32px 16px 40px; - max-width: ${MAX_WIDTH_LANDSCAPE}; - margin: 0 auto; - - ${landscapeStyle( - () => css` - padding: 48px ${responsiveSize(0, 132)} 60px; - ` - )} -`; - -const Courts: React.FC = () => { - return ( - <Container> - <Routes> - <Route path="/:id/*" element={<CourtDetails />} /> - <Route path="*" element={<Navigate to="1" replace />} /> - </Routes> - </Container> - ); -}; - -export default Courts; diff --git a/web/src/pages/GetPnk/WalletProvider.tsx b/web/src/pages/GetPnk/WalletProvider.tsx deleted file mode 100644 index fdd898f01..000000000 --- a/web/src/pages/GetPnk/WalletProvider.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React, { useRef, type FC, type PropsWithChildren } from "react"; - -import { useSyncWagmiConfig } from "@lifi/wallet-management"; -import { useAvailableChains } from "@lifi/widget"; -import { mainnet, arbitrumSepolia, arbitrum } from "@reown/appkit/networks"; -import { createAppKit } from "@reown/appkit/react"; -import { WagmiAdapter } from "@reown/appkit-adapter-wagmi"; -import { injected, walletConnect } from "@wagmi/connectors"; -import { createClient, http } from "viem"; -import { WagmiProvider } from "wagmi"; - -import { isProductionDeployment } from "consts/index"; - -import { lightTheme } from "styles/themes"; - -const projectId = import.meta.env.WALLETCONNECT_PROJECT_ID; - -const connectors = [injected(), walletConnect({ projectId })]; - -export const WalletProvider: FC<PropsWithChildren> = ({ children }) => { - const { chains } = useAvailableChains(); - const adapter = useRef<WagmiAdapter>(); - - if (!adapter.current) { - adapter.current = new WagmiAdapter({ - networks: [mainnet], - projectId, - client({ chain }) { - return createClient({ chain, transport: http() }); - }, - }); - } - - useSyncWagmiConfig(adapter.current.wagmiConfig, connectors, chains); - - createAppKit({ - adapters: [adapter.current], - networks: [mainnet], - defaultNetwork: isProductionDeployment() ? arbitrum : arbitrumSepolia, - allowUnsupportedChain: true, - projectId, - themeVariables: { - "--w3m-color-mix": lightTheme.primaryPurple, - "--w3m-color-mix-strength": 20, - // overlay portal is at 9999 - "--w3m-z-index": 10000, - }, - }); - - return ( - <WagmiProvider config={adapter.current.wagmiConfig} reconnectOnMount={false}> - {children} - </WagmiProvider> - ); -}; diff --git a/web/src/pages/GetPnk/Widget.tsx b/web/src/pages/GetPnk/Widget.tsx deleted file mode 100644 index 449281e1d..000000000 --- a/web/src/pages/GetPnk/Widget.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { Theme, useTheme } from "styled-components"; - -import { LiFiWidget, WidgetConfig } from "@lifi/widget"; - -import { responsiveSize } from "styles/responsiveSize"; - -import { WalletProvider } from "./WalletProvider"; - -const WidgetContainer = styled.div` - width: 100%; - > div { - height: auto; - > div > div { - max-height: none; - } - } -`; -const getWidgetConfig = (theme: Theme): WidgetConfig => ({ - fromChain: 1, - toChain: 42161, - fromToken: "0x93ED3FBe21207Ec2E8f2d3c3de6e058Cb73Bc04d", - toToken: "0x330bD769382cFc6d50175903434CCC8D206DCAE5", - hiddenUI: ["appearance", "language"], - theme: { - container: { - border: `1px solid ${theme.stroke}`, - borderRadius: "3px", - background: theme.whiteBackground, - width: responsiveSize(350, 500), - maxWidth: "600px", - height: "fit-content", - maxHeight: "none", - minWidth: "300px", - }, - palette: { - primary: { - main: theme.primaryBlue, - }, - secondary: { - main: theme.primaryBlue, - }, - background: { - paper: theme.whiteBackground, // bg color for cards - default: theme.lightBackground, // bg color container - }, - grey: { - 300: theme.stroke, // border light theme - 800: theme.stroke, // border dark theme - }, - text: { - primary: theme.primaryText, - secondary: theme.secondaryText, - }, - common: { - white: theme.primaryText, - }, - warning: { - main: theme.warning, - }, - error: { - main: theme.error, - }, - info: { - main: theme.primaryBlue, - }, - success: { - main: theme.success, - }, - }, - shape: { - borderRadius: 3, - borderRadiusSecondary: 3, - }, - typography: { - // fontFamily: "Comic Sans MS", - }, - }, - integrator: "Kleros", -}); - -export const Widget = () => { - const theme = useTheme(); - - const widgetConfig = useMemo(() => getWidgetConfig(theme), [theme]); - - return ( - <WalletProvider> - <WidgetContainer> - <LiFiWidget config={widgetConfig} integrator="Kleros" /> - </WidgetContainer> - </WalletProvider> - ); -}; diff --git a/web/src/pages/GetPnk/index.tsx b/web/src/pages/GetPnk/index.tsx deleted file mode 100644 index 6ea2f3268..000000000 --- a/web/src/pages/GetPnk/index.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { MAX_WIDTH_LANDSCAPE, landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { isProductionDeployment } from "consts/index"; - -import ClaimPnkButton from "components/ClaimPnkButton"; -import HeroImage from "components/HeroImage"; -import ScrollTop from "components/ScrollTop"; - -import { Widget } from "./Widget"; - -const Wrapper = styled.div` - width: 100%; -`; - -const Container = styled.div` - width: 100%; - background-color: ${({ theme }) => theme.lightBackground}; - padding: 16px 16px 40px; - max-width: ${MAX_WIDTH_LANDSCAPE}; - margin: 0 auto; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 24px; - - ${landscapeStyle( - () => css` - padding: 16px ${responsiveSize(0, 132)} 60px; - ` - )} -`; - -const GetPnk: React.FC = () => ( - <Wrapper> - <HeroImage /> - <Container> - {!isProductionDeployment() && <ClaimPnkButton />} - <Widget /> - </Container> - <ScrollTop /> - </Wrapper> -); -export default GetPnk; diff --git a/web/src/pages/Home/Community/Element.tsx b/web/src/pages/Home/Community/Element.tsx deleted file mode 100644 index a5db25059..000000000 --- a/web/src/pages/Home/Community/Element.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { ExternalLink } from "components/ExternalLink"; - -const Container = styled.div` - display: flex; - gap: 8px; - align-items: center; - flex-wrap: wrap; - - svg { - width: 16px; - height: 16px; - } -`; - -const StyledLabel = styled.label` - color: ${({ theme }) => theme.primaryText}; - font-weight: 600; -`; - -const StyledExternalLink = styled(ExternalLink)` - display: flex; - align-items: center; - gap: 8px; -`; - -export interface IElement { - Icon?: React.FC<React.SVGAttributes<SVGElement>>; - title: string; - link: string; - primaryText?: string; -} - -export const Element: React.FC<IElement> = ({ primaryText, title, link, Icon }) => ( - <Container> - <StyledExternalLink to={link} target="_blank" rel="noopener noreferrer"> - {Icon && <Icon />} - {title} - </StyledExternalLink> - {primaryText && <StyledLabel>{primaryText}</StyledLabel>} - </Container> -); diff --git a/web/src/pages/Home/Community/index.tsx b/web/src/pages/Home/Community/index.tsx deleted file mode 100644 index d33fcbe7e..000000000 --- a/web/src/pages/Home/Community/index.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { Card } from "@kleros/ui-components-library"; - -import { section } from "consts/community-elements"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { Element } from "./Element"; - -const Container = styled.div` - margin-top: ${responsiveSize(28, 48)}; - - h1 { - margin-bottom: ${responsiveSize(12, 24)}; - font-size: ${responsiveSize(20, 24)}; - } -`; - -const StyledCard = styled(Card)` - display: flex; - width: 100%; - height: auto; - gap: 12px; - flex-direction: column; - flex-wrap: wrap; - padding: 16px; - align-items: flex-start; - - ${landscapeStyle( - () => css` - flex-direction: row; - justify-content: space-between; - gap: 20px; - padding: 24px 32px; - ` - )} -`; - -const ThreeElementContainer = styled.div` - display: flex; - flex-direction: column; - align-items: flex-start; - gap: 12px; - - ${landscapeStyle( - () => css` - flex-direction: row; - justify-content: space-between; - gap: 48px; - ` - )} -`; - -const Community = () => ( - <Container> - <h1>Community</h1> - <StyledCard> - <ThreeElementContainer> - {section.slice(0, 3).map((element) => ( - <Element key={element.title} {...element} /> - ))} - </ThreeElementContainer> - <Element {...section[3]} /> - </StyledCard> - </Container> -); - -export default Community; diff --git a/web/src/pages/Home/CourtOverview/BarChart.tsx b/web/src/pages/Home/CourtOverview/BarChart.tsx deleted file mode 100644 index 82b7af9b4..000000000 --- a/web/src/pages/Home/CourtOverview/BarChart.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import React, { useCallback, useMemo } from "react"; -import styled, { useTheme } from "styled-components"; - -import { - Chart as ChartJS, - BarElement, - Tooltip, - CategoryScale, - LinearScale, - PointElement, - LineElement, - TimeScale, - ChartOptions, -} from "chart.js"; -import ChartDataLabels from "chartjs-plugin-datalabels"; -import { Bar } from "react-chartjs-2"; -import "chartjs-adapter-moment"; - -ChartJS.register(CategoryScale, LinearScale, PointElement, LineElement, TimeScale, Tooltip); -const formatter = new Intl.NumberFormat("en", { notation: "compact" }); - -const BarContainer = styled.div` - height: 220px; -`; - -ChartJS.register(BarElement); - -export interface IBarChartData { - labels: string[]; - data: number[]; - total: number; -} - -interface IBarChartProps { - chartData: IBarChartData; -} - -const BarChart: React.FC<IBarChartProps> = ({ chartData }) => { - const theme = useTheme(); - const getPercentValue = useCallback( - (value: number) => `${Math.floor((value * 100) / chartData.total)} %`, - [chartData] - ); - - const formatPNKValue = useCallback((value: number) => formatter.format(value), []); - - const sortedData = useMemo(() => { - const sortedIndices = chartData.data.map((value, index) => ({ value, index })).sort((a, b) => b.value - a.value); - - return { - labels: sortedIndices.map((item) => chartData.labels[item.index]), - data: sortedIndices.map((item) => chartData.data[item.index]), - total: chartData.total, - }; - }, [chartData]); - - const tickSize = 5; // suggested, if that many labels can't fit, chart will use even labels - - const options: ChartOptions<"bar"> = { - responsive: true, - maintainAspectRatio: false, - scales: { - x: { - grid: { display: false }, - ticks: { - color: theme.secondaryText, - }, - }, - y: { - grid: { color: theme.stroke, borderDash: [4, 4] }, - ticks: { - color: theme.secondaryText, - stepSize: (chartData.total * tickSize) / 100, - callback: (value) => getPercentValue(value), - }, - max: chartData.total, - }, - }, - plugins: { - datalabels: { - anchor: "end", - align: "top", - offset: -4, - color: theme.primaryText, - font: { - weight: "bold", - }, - formatter: formatPNKValue, - }, - tooltip: { - backgroundColor: theme.whiteBackground, - titleColor: theme.primaryText, - borderColor: theme.stroke, - borderWidth: 1, - displayColors: false, - callbacks: { - label: (context) => getPercentValue(context.parsed.y), - labelTextColor: () => theme.primaryText, - }, - }, - }, - }; - - return ( - <BarContainer> - <Bar - data={{ - labels: sortedData.labels, - datasets: [ - { - data: sortedData.data, - backgroundColor: theme.secondaryPurple, - hoverBackgroundColor: theme.primaryBlue, - maxBarThickness: 60, - borderRadius: 3, - }, - ], - }} - options={options} - plugins={[ChartDataLabels]} - /> - </BarContainer> - ); -}; - -export default BarChart; diff --git a/web/src/pages/Home/CourtOverview/CasesByCourtsChart.tsx b/web/src/pages/Home/CourtOverview/CasesByCourtsChart.tsx deleted file mode 100644 index 10e51784c..000000000 --- a/web/src/pages/Home/CourtOverview/CasesByCourtsChart.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from "react"; -import BarChart, { IBarChartData } from "./BarChart"; - -export type CasesByCourtsChartData = { labels: string[]; cases: number[]; totalCases: number }; - -interface ICasesByCourtsChart { - data: CasesByCourtsChartData; -} - -const CasesByCourtsChart: React.FC<ICasesByCourtsChart> = ({ data }) => { - const chartData: IBarChartData = { - labels: data.labels, - data: data.cases, - total: data.totalCases, - }; - - return <BarChart chartData={chartData} />; -}; - -export default CasesByCourtsChart; diff --git a/web/src/pages/Home/CourtOverview/Chart.tsx b/web/src/pages/Home/CourtOverview/Chart.tsx deleted file mode 100644 index d0c8eb59c..000000000 --- a/web/src/pages/Home/CourtOverview/Chart.tsx +++ /dev/null @@ -1,149 +0,0 @@ -import React, { useMemo, useState } from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -import { Tooltip } from "chart.js"; -import { formatUnits } from "viem"; - -import { DropdownSelect } from "@kleros/ui-components-library"; - -import { useHomePageContext } from "hooks/useHomePageContext"; - -import { StyledSkeleton } from "components/StyledSkeleton"; - -import CasesByCourtsChart, { CasesByCourtsChartData } from "./CasesByCourtsChart"; -import StakedPNKByCourtsChart, { StakedPNKByCourtsChartData } from "./StakedPNKByCourtsChart"; -import TimeSeriesChart from "./TimeSeriesChart"; - -const Container = styled.div` - margin-bottom: ${responsiveSize(16, 32)}; - display: flex; - flex-direction: column; - gap: 16px; -`; - -const StyledDropdown = styled(DropdownSelect)` - width: fit-content; - align-self: start; -`; - -const CHART_OPTIONS = [ - { text: "Staked PNK", value: "stakedPNK" }, - { text: "Staked PNK per court", value: "stakedPNKPerCourt" }, - { text: "Cases", value: "cases" }, - { text: "Cases per court", value: "casesPerCourt" }, -]; - -const ChartOptionsDropdown: React.FC<{ - setChartOption: (newValue: string) => void; -}> = ({ setChartOption }) => ( - <StyledDropdown - smallButton - simpleButton - defaultValue={"stakedPNK"} - items={CHART_OPTIONS} - callback={(newValue: string | number) => { - if (typeof newValue === "string") { - setChartOption(newValue); - } - }} - /> -); - -interface IChartData { - x: number; - y: number; -} - -const Chart: React.FC = () => { - const [chartOption, setChartOption] = useState("stakedPNK"); - const { data } = useHomePageContext(); - const chartData = data?.counters; - const courtsChartData = data?.courts; - - const processedData = chartData?.reduce((accData: IChartData[], counter) => { - return [ - ...accData, - { - x: Number(counter.id) * 1000, - y: Number(chartOption === "stakedPNK" ? formatUnits(counter[chartOption], 18) : counter[chartOption]), - }, - ]; - }, []); - - const processedCourtsData = courtsChartData?.reduce( - (accData: CasesByCourtsChartData, current) => { - if (BigInt(current.numberDisputes) > 0) { - return { - labels: [...accData.labels, current.name ?? ""], - cases: [...accData.cases, current.numberDisputes], - totalCases: accData.totalCases + parseInt(current.numberDisputes, 10), - }; - } - return accData; - }, - { labels: [], cases: [], totalCases: 0 } - ); - - const processedStakedPNKData = courtsChartData?.reduce( - (accData: StakedPNKByCourtsChartData, current) => { - if (BigInt(current.effectiveStake) > 0) { - return { - labels: [...accData.labels, current.name ?? ""], - stakes: [...accData.stakes, parseFloat(formatUnits(current.effectiveStake, 18))], - totalStake: accData.totalStake + parseFloat(formatUnits(current.stake, 18)), - }; - } - return accData; - }, - { labels: [], stakes: [], totalStake: 0 } - ); - - const ChartComponent = useMemo(() => { - switch (chartOption) { - case "casesPerCourt": - return processedCourtsData ? ( - <CasesByCourtsChart data={processedCourtsData} /> - ) : ( - <StyledSkeleton height={234} /> - ); - case "stakedPNKPerCourt": - return processedStakedPNKData ? ( - <StakedPNKByCourtsChart data={processedStakedPNKData} /> - ) : ( - <StyledSkeleton height={234} /> - ); - default: - return processedData ? <TimeSeriesChart data={processedData} /> : <StyledSkeleton height={234} />; - } - }, [processedCourtsData, processedStakedPNKData, processedData, chartOption]); - - return ( - <Container> - <ChartOptionsDropdown {...{ setChartOption }} /> - {ChartComponent} - </Container> - ); -}; - -// custom positioner for tooltip, we need dynamic top positioning, which is not available by default. -Tooltip.positioners.custom = function (elements) { - const tooltip = this; - const height = tooltip.chart.chartArea.height; - const width = tooltip.chart.chartArea.width; - - const x = elements[0]?.element.x; - const y = elements[0]?.element.y; - const isAtTop = height > y + tooltip.height; - const isAtEnd = width < x + tooltip.width; - - return { - x: elements[0]?.element.x, - y: elements[0]?.element.y, - xAlign: isAtTop ? (isAtEnd ? "right" : "left") : "center", - yAlign: isAtTop ? "center" : "bottom", - }; -}; - -export default Chart; diff --git a/web/src/pages/Home/CourtOverview/ExtraStats.tsx b/web/src/pages/Home/CourtOverview/ExtraStats.tsx deleted file mode 100644 index 3ecafc8fc..000000000 --- a/web/src/pages/Home/CourtOverview/ExtraStats.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import React, { useState } from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import { DropdownSelect } from "@kleros/ui-components-library"; - -import LawBalance from "svgs/icons/law-balance.svg"; -import LongArrowUp from "svgs/icons/long-arrow-up.svg"; - -import { useHomePageExtraStats } from "hooks/queries/useHomePageExtraStats"; - -import ExtraStatsDisplay from "components/ExtraStatsDisplay"; - -const StyledCard = styled.div` - display: flex; - flex-wrap: wrap; - gap: 12px 16px; - justify-content: center; - margin-top: 12px; - - ${landscapeStyle( - () => css` - margin-top: 16px; - gap: 16px 24px; - ` - )} -`; - -const StyledLabel = styled.label` - font-size: 14px; - font-weight: 600; -`; - -interface IStat { - title: string; - getText: (data) => string; - getCourtId: (data) => string; - icon: React.FC<React.SVGAttributes<SVGElement>>; -} - -const stats: IStat[] = [ - { - title: "Most Cases", - getText: ({ data }) => data?.mostDisputedCourt?.name, - getCourtId: ({ data }) => data?.mostDisputedCourt?.id, - icon: LongArrowUp, - }, - { - title: "Highest drawing chance", - getText: ({ data }) => data?.bestDrawingChancesCourt?.name, - getCourtId: ({ data }) => data?.bestDrawingChancesCourt?.id, - icon: LongArrowUp, - }, - { - title: "Highest rewards chance", - getText: ({ data }) => data?.bestExpectedRewardCourt?.name, - getCourtId: ({ data }) => data?.bestExpectedRewardCourt?.id, - icon: LongArrowUp, - }, -]; - -const timeRanges = [ - { value: 7, text: "Last 7 days" }, - { value: 30, text: "Last 30 days" }, - { value: 180, text: "Last 180 days" }, - { value: "allTime", text: "All Time" }, -]; - -const ExtraStats = () => { - const [selectedRange, setSelectedRange] = useState(timeRanges[1].value); - const data = useHomePageExtraStats(selectedRange); - - const handleTimeRangeChange = (value: string | number) => { - setSelectedRange(value); - }; - - return ( - <StyledCard> - <ExtraStatsDisplay - title="Activity" - content={ - <DropdownSelect - smallButton - simpleButton - items={timeRanges.map((range) => ({ - value: range.value, - text: range.text, - }))} - defaultValue={selectedRange} - callback={handleTimeRangeChange} - /> - } - icon={LawBalance} - /> - {data.data?.mostDisputedCourt?.numberDisputes === 0 ? ( - <StyledLabel>No activity in this period</StyledLabel> - ) : ( - stats.map(({ title, getCourtId, getText, icon }) => ( - <ExtraStatsDisplay key={title} courtId={getCourtId(data)} {...{ title, icon }} text={getText(data)} /> - )) - )} - </StyledCard> - ); -}; - -export default ExtraStats; diff --git a/web/src/pages/Home/CourtOverview/Header.tsx b/web/src/pages/Home/CourtOverview/Header.tsx deleted file mode 100644 index bc1cfa2d1..000000000 --- a/web/src/pages/Home/CourtOverview/Header.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { Button } from "@kleros/ui-components-library"; - -import Bookmark from "svgs/icons/bookmark.svg"; - -import { responsiveSize } from "styles/responsiveSize"; - -import { InternalLink } from "components/InternalLink"; - -const StyledHeader = styled.div` - display: flex; - flex-wrap: wrap; - justify-content: space-between; - gap: 8px 12px; - margin-bottom: ${responsiveSize(12, 20)}; -`; - -const StyledH1 = styled.h1` - font-size: ${responsiveSize(20, 24)}; - margin: 0; -`; - -const StyledInternalLink = styled(InternalLink)` - height: 34px; -`; - -const Header: React.FC = () => { - return ( - <StyledHeader> - <StyledH1>Court Overview</StyledH1> - <StyledInternalLink to={"/resolver"}> - <Button small Icon={Bookmark} text="Create a Case" /> - </StyledInternalLink> - </StyledHeader> - ); -}; - -export default Header; diff --git a/web/src/pages/Home/CourtOverview/StakedPNKByCourtsChart.tsx b/web/src/pages/Home/CourtOverview/StakedPNKByCourtsChart.tsx deleted file mode 100644 index 7873136fa..000000000 --- a/web/src/pages/Home/CourtOverview/StakedPNKByCourtsChart.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from "react"; -import BarChart, { IBarChartData } from "./BarChart"; - -export type StakedPNKByCourtsChartData = { labels: string[]; stakes: number[]; totalStake: number }; - -interface IStakedPNKByCourtsChart { - data: StakedPNKByCourtsChartData; -} - -const StakedPNKByCourtsChart: React.FC<IStakedPNKByCourtsChart> = ({ data }) => { - const chartData: IBarChartData = { - labels: data.labels, - data: data.stakes, - total: data.totalStake, - }; - - return <BarChart chartData={chartData} />; -}; - -export default StakedPNKByCourtsChart; diff --git a/web/src/pages/Home/CourtOverview/Stats.tsx b/web/src/pages/Home/CourtOverview/Stats.tsx deleted file mode 100644 index dd4345a78..000000000 --- a/web/src/pages/Home/CourtOverview/Stats.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { Card } from "@kleros/ui-components-library"; - -import EthereumIcon from "svgs/icons/ethereum.svg"; -import BalanceIcon from "svgs/icons/law-balance.svg"; -import PNKIcon from "svgs/icons/pnk.svg"; -import PNKRedistributedIcon from "svgs/icons/redistributed-pnk.svg"; -import JurorIcon from "svgs/icons/user.svg"; - -import { CoinIds } from "consts/coingecko"; -import { useCoinPrice } from "hooks/useCoinPrice"; -import { useHomePageContext, HomePageQuery, HomePageQueryDataPoints } from "hooks/useHomePageContext"; -import useIsDesktop from "hooks/useIsDesktop"; -import { calculateSubtextRender } from "utils/calculateSubtextRender"; -import { formatETH, formatPNK, formatUnitsWei, formatUSD } from "utils/format"; -import { isUndefined } from "utils/index"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import StatDisplay, { IStatDisplay } from "components/StatDisplay"; -import { StyledSkeleton } from "components/StyledSkeleton"; - -const StyledCard = styled(Card)` - display: grid; - grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); - width: auto; - height: fit-content; - gap: 16px 8px; - padding: 16px; - - ${landscapeStyle( - () => css` - padding: 24px; - ` - )} -`; - -export const getLastOrZero = (src: HomePageQuery["counters"], stat: HomePageQueryDataPoints) => - src.length > 0 ? src.at(-1)?.[stat] : 0n.toString(); - -interface IStat { - title: string; - coinId?: number; - getText: (data: HomePageQuery["counters"]) => string; - getSubtext?: (data: HomePageQuery["counters"], coinPrice?: number) => string; - color: IStatDisplay["color"]; - icon: React.FC<React.SVGAttributes<SVGElement>>; -} - -const stats: IStat[] = [ - { - title: "PNK Staked", - coinId: 0, - getText: (counters) => formatPNK(getLastOrZero(counters, "stakedPNK")), - getSubtext: (counters, coinPrice) => - formatUSD(Number(formatUnitsWei(getLastOrZero(counters, "stakedPNK"))) * (coinPrice ?? 0)), - color: "purple", - icon: PNKIcon, - }, - { - title: "ETH Paid", - coinId: 1, - getText: (counters) => formatETH(getLastOrZero(counters, "paidETH")), - getSubtext: (counters, coinPrice) => - formatUSD(Number(formatUnitsWei(getLastOrZero(counters, "paidETH"))) * (coinPrice ?? 0)), - color: "blue", - icon: EthereumIcon, - }, - { - title: "PNK Redistributed", - coinId: 0, - getText: (counters) => formatPNK(getLastOrZero(counters, "redistributedPNK")), - getSubtext: (counters, coinPrice) => - formatUSD(Number(formatUnitsWei(getLastOrZero(counters, "redistributedPNK"))) * (coinPrice ?? 0)), - color: "purple", - icon: PNKRedistributedIcon, - }, - { - title: "Active Jurors", - getText: (counters) => getLastOrZero(counters, "activeJurors"), - color: "green", - icon: JurorIcon, - }, - { - title: "Cases", - getText: (counters) => getLastOrZero(counters, "cases"), - color: "orange", - icon: BalanceIcon, - }, -]; - -const Stats = () => { - const { data } = useHomePageContext(); - const coinIds = [CoinIds.PNK, CoinIds.ETH]; - const { prices: pricesData } = useCoinPrice(coinIds); - const isDesktop = useIsDesktop(); - - return ( - <StyledCard> - {stats.map(({ title, coinId, getText, getSubtext, color, icon }, i) => { - const coinPrice = !isUndefined(pricesData) ? pricesData[coinIds[coinId!]]?.price : undefined; - - return ( - <StatDisplay - key={i} - {...{ title, color, icon }} - text={data ? getText(data["counters"]) : <StyledSkeleton />} - subtext={calculateSubtextRender(data ? data["counters"] : undefined, getSubtext, coinPrice)} - isSmallDisplay={!isDesktop} - /> - ); - })} - </StyledCard> - ); -}; - -export default Stats; diff --git a/web/src/pages/Home/CourtOverview/TimeSeriesChart.tsx b/web/src/pages/Home/CourtOverview/TimeSeriesChart.tsx deleted file mode 100644 index bdfd07d6d..000000000 --- a/web/src/pages/Home/CourtOverview/TimeSeriesChart.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import React from "react"; -import styled, { useTheme } from "styled-components"; - -import { - Chart as ChartJS, - CategoryScale, - LinearScale, - PointElement, - LineElement, - TimeScale, - Tooltip, - ScriptableContext, -} from "chart.js"; -import { Line } from "react-chartjs-2"; -import "chartjs-adapter-moment"; - -const LineContainer = styled.div` - height: 220px; -`; - -ChartJS.register(CategoryScale, LinearScale, PointElement, LineElement, TimeScale, Tooltip); - -interface ITimeSeriesChart { - data: { x: number; y: number }[]; -} - -const TimeSeriesChart: React.FC<ITimeSeriesChart> = ({ data }) => { - const theme = useTheme(); - const options = { - responsive: true, - maintainAspectRatio: false, - elements: { - point: { - radius: 0, - }, - }, - interaction: { - axis: "x", - intersect: false, - }, - tooltips: { - position: "nearest", - }, - scales: { - x: { - type: "time", - grid: { display: false }, - ticks: { - color: theme.secondaryText, - autoSkipPadding: 10, - maxRotation: 0, - }, - }, - y: { - grid: { color: theme.stroke }, - ticks: { - color: theme.secondaryText, - }, - suggestedMin: 0, - }, - }, - plugins: { - tooltip: { - position: "custom", - backgroundColor: theme.whiteBackground, - titleColor: theme.primaryText, - borderColor: theme.stroke, - borderWidth: 1, - displayColors: false, - callbacks: { - labelTextColor: () => theme.primaryText, - }, - }, - }, - }; - - return ( - <LineContainer> - { - // eslint-disable-next-line - // @ts-ignore - <Line - {...{ - data: { - datasets: [ - { - data, - // borderColor: theme.primaryBlue, - stepped: true, - cubicInterpolationMode: "monotone", - borderColor: (context: ScriptableContext<"line">) => { - const ctx = context.chart.ctx; - const gradient = ctx.createLinearGradient(0, 0, 0, 200); - gradient.addColorStop(0, theme.primaryBlue); - gradient.addColorStop(1, theme.secondaryPurple); - return gradient; - }, - }, - ], - }, - options, - }} - plugins={[ - { - id: "line-draw", - afterDatasetsDraw: (chart) => { - if (chart.tooltip?._active?.length) { - const x = chart.tooltip._active[0].element.x; - const y = chart.tooltip._active[0].element.y; - const yAxis = chart.scales.y; - - const ctx = chart.ctx; - ctx.save(); - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x, yAxis.bottom); - ctx.lineWidth = 1; - ctx.strokeStyle = theme.secondaryPurple; - ctx.setLineDash([4, 4]); - ctx.stroke(); - ctx.restore(); - } - }, - }, - ]} - /> - } - </LineContainer> - ); -}; -export default TimeSeriesChart; diff --git a/web/src/pages/Home/CourtOverview/index.tsx b/web/src/pages/Home/CourtOverview/index.tsx deleted file mode 100644 index 688f7c486..000000000 --- a/web/src/pages/Home/CourtOverview/index.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import Chart from "./Chart"; -import ExtraStats from "./ExtraStats"; -import Header from "./Header"; -import Stats from "./Stats"; - -const Container = styled.div` - width: 100%; - height: auto; -`; - -const CourtOverview: React.FC = () => ( - <Container> - <Header /> - <Chart /> - <Stats /> - <ExtraStats /> - </Container> -); - -export default CourtOverview; diff --git a/web/src/pages/Home/TopJurors/Header/Coherence.tsx b/web/src/pages/Home/TopJurors/Header/Coherence.tsx deleted file mode 100644 index d65aa4c9b..000000000 --- a/web/src/pages/Home/TopJurors/Header/Coherence.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import useIsDesktop from "hooks/useIsDesktop"; - -import WithHelpTooltip from "components/WithHelpTooltip"; - -const Container = styled.div` - display: flex; - font-size: 12px !important; - &::before { - content: "Coherent\u00a0Votes"; - } - color: ${({ theme }) => theme.secondaryText}; - align-items: center; - - ${landscapeStyle( - () => css` - font-size: 14px !important; - justify-content: center; - ` - )} -`; - -const coherentVotesTooltipMsg = - "This is the ratio of coherent votes made by a juror: " + - "the number in the left is the number of times where the juror " + - "voted coherently and the number in the right is the total number of times " + - "the juror voted. Hover to see the percentage of coherent votes."; - -const Coherence: React.FC = () => { - const isDesktop = useIsDesktop(); - - return ( - <Container> - <WithHelpTooltip place={isDesktop ? "top" : "right"} tooltipMsg={coherentVotesTooltipMsg}></WithHelpTooltip> - </Container> - ); -}; -export default Coherence; diff --git a/web/src/pages/Home/TopJurors/Header/DesktopHeader.tsx b/web/src/pages/Home/TopJurors/Header/DesktopHeader.tsx deleted file mode 100644 index c4fe7f51f..000000000 --- a/web/src/pages/Home/TopJurors/Header/DesktopHeader.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { useToggle } from "react-use"; -import { useParams } from "react-router-dom"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import RankingIcon from "svgs/icons/ranking.svg"; - -import { decodeURIFilter } from "utils/uri"; - -import HowItWorks from "components/HowItWorks"; -import JurorLevels from "components/Popup/MiniGuides/JurorLevels"; - -import Coherence from "./Coherence"; -import Rewards from "./Rewards"; -import Score from "./Score"; - -const Container = styled.div<{ renderIcon?: boolean }>` - display: none; - width: 100%; - background-color: ${({ theme }) => theme.lightBlue}; - border: 1px solid ${({ theme }) => theme.stroke}; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - border-bottom: 1px solid ${({ theme }) => theme.stroke}; - padding: 18.6px 32px; - - ${({ renderIcon }) => - landscapeStyle( - () => css` - display: grid; - grid-template-columns: ${renderIcon - ? `min-content minmax(160px, 1fr) minmax(60px, 1fr) minmax(80px, 0.8fr) minmax(180px, 1.5fr) minmax(100px, 1fr)` - : `minmax(160px, 1fr) minmax(60px, 1fr) minmax(80px, 0.8fr) minmax(180px, 1.5fr) minmax(100px, 1fr)`}; - column-gap: ${responsiveSize(12, 24, 900)}; - align-items: center; - ` - )} -`; - -const StyledRankingIcon = styled(RankingIcon)` - path { - fill: ${({ theme }) => theme.primaryText}; - } -`; - -const StyledLabel = styled.label` - font-size: 16px; -`; - -const HowItWorksContainer = styled.div` - display: flex; - justify-content: end; -`; - -export const DesktopHeader: React.FC = () => { - const [isJurorLevelsMiniGuideOpen, toggleJurorLevelsMiniGuide] = useToggle(false); - const { filter } = useParams(); - const { id: searchValue } = decodeURIFilter(filter ?? "all"); - const renderIcon = !searchValue; - - return ( - <Container renderIcon={renderIcon}> - {renderIcon ? <StyledRankingIcon /> : null} - <StyledLabel>Juror</StyledLabel> - <Score /> - <Coherence /> - <Rewards /> - <HowItWorksContainer> - <HowItWorks - isMiniGuideOpen={isJurorLevelsMiniGuideOpen} - toggleMiniGuide={toggleJurorLevelsMiniGuide} - MiniGuideComponent={JurorLevels} - /> - </HowItWorksContainer> - </Container> - ); -}; diff --git a/web/src/pages/Home/TopJurors/Header/MobileHeader.tsx b/web/src/pages/Home/TopJurors/Header/MobileHeader.tsx deleted file mode 100644 index bb8ef4b3d..000000000 --- a/web/src/pages/Home/TopJurors/Header/MobileHeader.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { useToggle } from "react-use"; -import { useParams } from "react-router-dom"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import { decodeURIFilter } from "utils/uri"; - -import HowItWorks from "components/HowItWorks"; -import JurorLevels from "components/Popup/MiniGuides/JurorLevels"; - -const Container = styled.div` - display: flex; - justify-content: space-between; - width: 100%; - background-color: ${({ theme }) => theme.lightBlue}; - padding: 16px; - border: 1px solid ${({ theme }) => theme.stroke}; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - border-bottom: none; - flex-wrap: wrap; - - ${landscapeStyle( - () => css` - display: none; - padding: 16px 24px; - ` - )} -`; - -const StyledLabel = styled.label` - font-size: 16px; -`; - -export const MobileHeader: React.FC = () => { - const [isJurorLevelsMiniGuideOpen, toggleJurorLevelsMiniGuide] = useToggle(false); - const { filter } = useParams(); - const { id: searchValue } = decodeURIFilter(filter ?? "all"); - - return ( - <Container> - <StyledLabel>{!searchValue ? "Ranking" : "Jurors"}</StyledLabel> - <HowItWorks - isMiniGuideOpen={isJurorLevelsMiniGuideOpen} - toggleMiniGuide={toggleJurorLevelsMiniGuide} - MiniGuideComponent={JurorLevels} - /> - </Container> - ); -}; diff --git a/web/src/pages/Home/TopJurors/Header/Rewards.tsx b/web/src/pages/Home/TopJurors/Header/Rewards.tsx deleted file mode 100644 index 29f493d03..000000000 --- a/web/src/pages/Home/TopJurors/Header/Rewards.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import useIsDesktop from "hooks/useIsDesktop"; - -import WithHelpTooltip from "components/WithHelpTooltip"; - -const Container = styled.div` - display: flex; - color: ${({ theme }) => theme.secondaryText}; - gap: 0px; - - font-size: 12px !important; - &::before { - content: "Rewards"; - } - - ${landscapeStyle( - () => css` - font-size: 14px !important; - justify-content: center; - &::before { - content: "Total Rewards"; - } - ` - )} -`; - -const totalRewardsTooltipMsg = - "Users have an economic interest in serving as jurors in Kleros: " + - "collecting the Juror Rewards in exchange for their work. Each juror who " + - "is coherent with the final ruling receive the Juror Rewards composed of " + - "arbitration fees (ETH) + PNK redistribution between jurors."; - -const Rewards: React.FC = () => { - const isDesktop = useIsDesktop(); - - return ( - <Container> - <WithHelpTooltip place={isDesktop ? "top" : "right"} tooltipMsg={totalRewardsTooltipMsg}></WithHelpTooltip> - </Container> - ); -}; - -export default Rewards; diff --git a/web/src/pages/Home/TopJurors/Header/Score.tsx b/web/src/pages/Home/TopJurors/Header/Score.tsx deleted file mode 100644 index 105822f47..000000000 --- a/web/src/pages/Home/TopJurors/Header/Score.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import useIsDesktop from "hooks/useIsDesktop"; - -import WithHelpTooltip from "components/WithHelpTooltip"; - -const Container = styled.div` - display: flex; - font-size: 12px !important; - &::before { - content: "Score"; - } - color: ${({ theme }) => theme.secondaryText}; - align-items: center; - - ${landscapeStyle( - () => css` - font-size: 14px !important; - justify-content: center; - ` - )} -`; - -const scoreTooltipMsg = - "A score from 0 to 100 reflecting coherent voting, smoothed " + - "to prevent jurors with low vote counts from ranking too high."; - -const Score: React.FC = () => { - const isDesktop = useIsDesktop(); - - return ( - <Container> - <WithHelpTooltip place={isDesktop ? "top" : "right"} tooltipMsg={scoreTooltipMsg}></WithHelpTooltip> - </Container> - ); -}; -export default Score; diff --git a/web/src/pages/Home/TopJurors/Header/index.tsx b/web/src/pages/Home/TopJurors/Header/index.tsx deleted file mode 100644 index cdb31388f..000000000 --- a/web/src/pages/Home/TopJurors/Header/index.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from "react"; - -import { DesktopHeader } from "./DesktopHeader"; -import { MobileHeader } from "./MobileHeader"; - -const Header: React.FC = () => { - return ( - <> - <MobileHeader /> - <DesktopHeader /> - </> - ); -}; - -export default Header; diff --git a/web/src/pages/Home/TopJurors/JurorCard/Coherence.tsx b/web/src/pages/Home/TopJurors/JurorCard/Coherence.tsx deleted file mode 100644 index 0d1a9a83c..000000000 --- a/web/src/pages/Home/TopJurors/JurorCard/Coherence.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React from "react"; - -import styled from "styled-components"; -import { Tooltip } from "@kleros/ui-components-library"; - -import { getCoherencePercent } from "utils/getCoherencePercent"; - -const Container = styled.div` - display: flex; - align-items: center; - font-weight: 600; - color: ${({ theme }) => theme.primaryText}; - flex-wrap: wrap; - justify-content: center; - margin-top: 2px; -`; - -interface ICoherence { - totalCoherentVotes: string; - totalResolvedVotes: string; -} - -const Coherence: React.FC<ICoherence> = ({ totalCoherentVotes, totalResolvedVotes }) => { - const coherenceRatio = `${totalCoherentVotes}/${totalResolvedVotes}`; - - return ( - <Container> - <Tooltip text={getCoherencePercent(Number(totalCoherentVotes), Number(totalResolvedVotes))}> - {coherenceRatio} - </Tooltip> - </Container> - ); -}; - -export default Coherence; diff --git a/web/src/pages/Home/TopJurors/JurorCard/DesktopCard.tsx b/web/src/pages/Home/TopJurors/JurorCard/DesktopCard.tsx deleted file mode 100644 index e17c32b03..000000000 --- a/web/src/pages/Home/TopJurors/JurorCard/DesktopCard.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; -import { hoverShortTransitionTiming } from "styles/commonStyles"; - -import Coherence from "./Coherence"; -import JurorLevel from "./JurorLevel"; -import JurorTitle from "./JurorTitle"; -import Rank from "./Rank"; -import Rewards from "./Rewards"; -import Score from "./Score"; - -const Container = styled.div<{ renderRank?: boolean }>` - ${hoverShortTransitionTiming} - display: none; - width: 100%; - background-color: ${({ theme }) => theme.whiteBackground}; - border: 1px solid ${({ theme }) => theme.stroke}; - border-top: none; - align-items: center; - padding: 15.55px 32px; - - ${({ renderRank }) => - landscapeStyle( - () => css` - display: grid; - grid-template-columns: ${renderRank - ? `min-content minmax(160px, 1fr) minmax(60px, 1fr) minmax(80px, 0.8fr) minmax(180px, 1.5fr) minmax(100px, 1fr)` - : `minmax(160px, 1fr) minmax(60px, 1fr) minmax(80px, 0.8fr) minmax(180px, 1.5fr) minmax(100px, 1fr)`}; - column-gap: ${responsiveSize(12, 24, 900)}; - ` - )} - - :hover { - background-color: ${({ theme }) => theme.lightGrey}BB; - } -`; - -interface IDesktopCard { - rank?: number; - address: string; - coherenceScore: string; - totalCoherentVotes: string; - totalResolvedVotes: string; -} - -const DesktopCard: React.FC<IDesktopCard> = ({ - rank, - address, - coherenceScore, - totalCoherentVotes, - totalResolvedVotes, -}) => { - const renderRank = !!rank; - - return ( - <Container renderRank={renderRank}> - {renderRank && <Rank rank={rank} />} - <JurorTitle address={address} /> - <Score coherenceScore={coherenceScore} /> - <Coherence {...{ totalCoherentVotes, totalResolvedVotes }} /> - <Rewards address={address} /> - <JurorLevel coherenceScore={Number(coherenceScore)} /> - </Container> - ); -}; - -export default DesktopCard; diff --git a/web/src/pages/Home/TopJurors/JurorCard/JurorLevel.tsx b/web/src/pages/Home/TopJurors/JurorCard/JurorLevel.tsx deleted file mode 100644 index c961b8e61..000000000 --- a/web/src/pages/Home/TopJurors/JurorCard/JurorLevel.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import { getUserLevelData } from "utils/userLevelCalculation"; - -import PixelArt from "pages/Profile/JurorInfo/PixelArt"; - -const Container = styled.div` - display: flex; - align-items: center; - gap: 8px; - - ${landscapeStyle( - () => css` - gap: 16px; - justify-content: end; - ` - )} -`; - -const StyledLabel = styled.label` - font-size: 12px !important; - - &::before { - content: "Lv. "; - } - - ${landscapeStyle( - () => css` - font-size: 16px !important; - - &::before { - content: "Level "; - } - ` - )} -`; - -interface IJurorLevel { - coherenceScore: number; -} - -const JurorLevel: React.FC<IJurorLevel> = ({ coherenceScore }) => { - const userLevelData = getUserLevelData(coherenceScore); - const level = userLevelData.level; - - return ( - <Container> - <StyledLabel>{level}</StyledLabel> - <PixelArt width="32px" height="32px" level={level} /> - </Container> - ); -}; -export default JurorLevel; diff --git a/web/src/pages/Home/TopJurors/JurorCard/JurorTitle.tsx b/web/src/pages/Home/TopJurors/JurorCard/JurorTitle.tsx deleted file mode 100644 index 4eb87f0c1..000000000 --- a/web/src/pages/Home/TopJurors/JurorCard/JurorTitle.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import ArrowSvg from "svgs/icons/arrow.svg"; - -import { IdenticonOrAvatar, AddressOrName } from "components/ConnectWallet/AccountDisplay"; -import { StyledArrowLink } from "components/StyledArrowLink"; -import { useAccount } from "wagmi"; - -const Container = styled.div` - display: flex; - gap: 8px; - align-items: center; - - label { - font-size: 16px; - } - - canvas { - width: 20px; - height: 20px; - border-radius: 10%; - } -`; - -export const ReStyledArrowLink = styled(StyledArrowLink)<{ smallDisplay?: boolean }>` - label { - cursor: pointer; - color: ${({ theme }) => theme.primaryBlue}; - } - - :hover { - label { - color: ${({ theme }) => theme.secondaryBlue}; - } - } - - ${({ smallDisplay }) => - smallDisplay && - ` - > svg { - height: 14.5px; - width: 14.5px; - } - `} -`; - -interface IJurorTitle { - address: string; - smallDisplay?: boolean; -} - -const JurorTitle: React.FC<IJurorTitle> = ({ address, smallDisplay }) => { - const { isConnected, address: connectedAddress } = useAccount(); - const profileLink = - isConnected && connectedAddress?.toLowerCase() === address.toLowerCase() - ? "/profile/1/desc/all" - : `/profile/1/desc/all?address=${address}`; - - return ( - <Container> - <IdenticonOrAvatar {...{ address }} /> - <ReStyledArrowLink to={profileLink} {...{ smallDisplay }}> - <AddressOrName {...{ address, smallDisplay }} /> - <ArrowSvg /> - </ReStyledArrowLink> - </Container> - ); -}; - -export default JurorTitle; diff --git a/web/src/pages/Home/TopJurors/JurorCard/MobileCard.tsx b/web/src/pages/Home/TopJurors/JurorCard/MobileCard.tsx deleted file mode 100644 index c748b505b..000000000 --- a/web/src/pages/Home/TopJurors/JurorCard/MobileCard.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { hoverShortTransitionTiming } from "styles/commonStyles"; - -import HeaderScore from "../Header/Score"; -import HeaderCoherence from "../Header/Coherence"; -import HeaderRewards from "../Header/Rewards"; - -import Coherence from "./Coherence"; -import JurorLevel from "./JurorLevel"; -import JurorTitle from "./JurorTitle"; -import Rank from "./Rank"; -import Rewards from "./Rewards"; -import Score from "./Score"; - -const Container = styled.div` - ${hoverShortTransitionTiming} - display: flex; - justify-content: space-between; - flex-wrap: wrap; - width: 100%; - background-color: ${({ theme }) => theme.whiteBackground}; - padding: 8px 16px 12px; - border: 1px solid ${({ theme }) => theme.stroke}; - border-top: none; - align-items: center; - gap: 16px; - - ${landscapeStyle( - () => css` - display: none; - ` - )} - - :hover { - background-color: ${({ theme }) => theme.lightGrey}BB; - } -`; - -const TopSide = styled.div` - width: 100%; - display: flex; - flex-direction: row; - justify-content: space-between; - - align-items: center; -`; - -const RankAndTitle = styled.div` - display: flex; - flex-direction: row; - align-items: center; - gap: 8px; -`; - -const BottomSide = styled.div` - width: 100%; - display: flex; - flex-direction: column; - justify-content: space-between; - gap: 8px; -`; - -const HeaderScoreAndScore = styled.div` - display: flex; - width: 100%; - flex-direction: row; - align-items: center; - gap: 8px; -`; - -const HeaderCoherenceAndCoherence = styled.div` - display: flex; - width: 100%; - flex-direction: row; - align-items: center; - gap: 8px; -`; - -const HeaderRewardsAndRewards = styled.div` - display: flex; - width: 100%; - flex-direction: row; - align-items: center; - gap: 8px; -`; - -interface IMobileCard { - rank: number; - address: string; - totalCoherentVotes: string; - totalResolvedVotes: string; - coherenceScore: string; -} - -const MobileCard: React.FC<IMobileCard> = ({ - rank, - address, - totalCoherentVotes, - totalResolvedVotes, - coherenceScore, -}) => { - return ( - <Container> - <TopSide> - <RankAndTitle> - {rank ? <Rank {...{ rank }} /> : null} - <JurorTitle {...{ address }} /> - </RankAndTitle> - <JurorLevel coherenceScore={Number(coherenceScore)} /> - </TopSide> - <BottomSide> - <HeaderScoreAndScore> - <HeaderScore /> - <Score {...{ coherenceScore }} /> - </HeaderScoreAndScore> - <HeaderCoherenceAndCoherence> - <HeaderCoherence /> - <Coherence {...{ totalCoherentVotes, totalResolvedVotes }} /> - </HeaderCoherenceAndCoherence> - <HeaderRewardsAndRewards> - <HeaderRewards /> - <Rewards {...{ address }} /> - </HeaderRewardsAndRewards> - </BottomSide> - </Container> - ); -}; -export default MobileCard; diff --git a/web/src/pages/Home/TopJurors/JurorCard/Rank.tsx b/web/src/pages/Home/TopJurors/JurorCard/Rank.tsx deleted file mode 100644 index a93b6f23b..000000000 --- a/web/src/pages/Home/TopJurors/JurorCard/Rank.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -const Container = styled.div` - color: ${({ theme }) => theme.primaryText}; - - &::before { - content: "#"; - display: inline; - } - - ${landscapeStyle( - () => css` - display: flex; - align-items: center; - justify-content: start; - &::before { - display: none; - } - ` - )} -`; - -interface IRank { - rank: number; -} - -const Rank: React.FC<IRank> = ({ rank }) => { - return <Container>{rank}</Container>; -}; -export default Rank; diff --git a/web/src/pages/Home/TopJurors/JurorCard/Rewards.tsx b/web/src/pages/Home/TopJurors/JurorCard/Rewards.tsx deleted file mode 100644 index bc998158d..000000000 --- a/web/src/pages/Home/TopJurors/JurorCard/Rewards.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import EthIcon from "svgs/icons/eth.svg"; -import PnkIcon from "svgs/icons/kleros.svg"; - -import { useUserQuery } from "hooks/queries/useUser"; -import useIsDesktop from "hooks/useIsDesktop"; -import { getFormattedRewards } from "utils/jurorRewardConfig"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import NumberDisplay from "components/NumberDisplay"; - -const Container = styled.div` - display: flex; - gap: 8px; - align-items: center; - flex-wrap: wrap; - margin-top: 2px; - - ${landscapeStyle( - () => css` - justify-content: center; - ` - )} -`; - -const StyledIcon = styled.div` - width: 16px; - height: 16px; - - path { - fill: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const StyledLabel = styled.label` - font-size: 16px; - font-weight: 600; - color: ${({ theme }) => theme.primaryText}; -`; - -interface IRewards { - address: string; -} - -const Rewards: React.FC<IRewards> = ({ address }) => { - const { data: userData } = useUserQuery(address?.toLowerCase()); - const formattedRewards = getFormattedRewards(userData, {}); - const ethReward = formattedRewards.find((r) => r.token === "ETH")?.amount; - const pnkReward = formattedRewards.find((r) => r.token === "PNK")?.amount; - const isDesktop = useIsDesktop(); - - return ( - <Container> - <StyledLabel> - <NumberDisplay - value={ethReward ?? ""} - unit="ETH" - showUnitInDisplay={false} - place={isDesktop ? "top" : "right"} - /> - </StyledLabel> - <StyledIcon as={EthIcon} /> - <StyledLabel>+</StyledLabel> - <StyledLabel> - <NumberDisplay value={pnkReward ?? ""} unit="PNK" showUnitInDisplay={false} /> - </StyledLabel> - <StyledIcon as={PnkIcon} /> - </Container> - ); -}; -export default Rewards; diff --git a/web/src/pages/Home/TopJurors/JurorCard/Score.tsx b/web/src/pages/Home/TopJurors/JurorCard/Score.tsx deleted file mode 100644 index f98fa0b82..000000000 --- a/web/src/pages/Home/TopJurors/JurorCard/Score.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React from "react"; - -import styled from "styled-components"; - -import { Tooltip } from "@kleros/ui-components-library"; - -const Container = styled.div` - display: flex; - align-items: center; - font-weight: 600; - color: ${({ theme }) => theme.primaryText}; - flex-wrap: wrap; - justify-content: center; - margin-top: 2px; -`; - -interface IScore { - coherenceScore: string; -} - -const Score: React.FC<IScore> = ({ coherenceScore }) => { - return ( - <Container> - <Tooltip text={coherenceScore}>{coherenceScore}</Tooltip> - </Container> - ); -}; - -export default Score; diff --git a/web/src/pages/Home/TopJurors/JurorCard/index.tsx b/web/src/pages/Home/TopJurors/JurorCard/index.tsx deleted file mode 100644 index e6b4143a5..000000000 --- a/web/src/pages/Home/TopJurors/JurorCard/index.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from "react"; - -import DesktopCard from "./DesktopCard"; -import MobileCard from "./MobileCard"; - -interface IJurorCard { - rank: number; - address: `0x${string}`; - coherenceScore: string; - totalCoherentVotes: string; - totalResolvedVotes: string; -} - -const JurorCard: React.FC<IJurorCard> = ({ rank, address, coherenceScore, totalCoherentVotes, totalResolvedVotes }) => { - const allProps = { rank, address, coherenceScore, totalCoherentVotes, totalResolvedVotes }; - - return ( - <> - <MobileCard {...allProps} /> - <DesktopCard {...allProps} /> - </> - ); -}; - -export default JurorCard; diff --git a/web/src/pages/Home/TopJurors/index.tsx b/web/src/pages/Home/TopJurors/index.tsx deleted file mode 100644 index ff8bd798c..000000000 --- a/web/src/pages/Home/TopJurors/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { isUndefined } from "utils/index"; - -import { useJurorsByCoherenceScore } from "queries/useJurorsByCoherenceScore"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { SkeletonDisputeListItem } from "components/StyledSkeleton"; - -import Header from "./Header"; -import JurorCard from "./JurorCard"; -import SeeAllJurorsButton from "components/SeeAllJurorsButton"; - -const Container = styled.div` - margin-top: ${responsiveSize(28, 48)}; -`; - -const TitleAndButtonContainer = styled.div` - display: flex; - flex-direction: row; - align-items: center; - gap: 12px; - margin-bottom: ${responsiveSize(12, 24)}; -`; - -const Title = styled.h1` - margin-bottom: 0; - font-size: ${responsiveSize(20, 24)}; -`; - -export const ListContainer = styled.div` - display: flex; - flex-direction: column; - justify-content: center; - - ${landscapeStyle( - () => css` - display: grid; - grid-template-columns: 1fr; - ` - )} -`; - -export const StyledLabel = styled.label` - font-size: 16px; -`; - -const TopJurors: React.FC = () => { - const { data: queryJurors } = useJurorsByCoherenceScore(0, 5, "coherenceScore", "desc"); - - const topJurors = queryJurors?.users?.map((juror, index) => ({ - ...juror, - rank: index + 1, - })); - - return ( - <Container> - <TitleAndButtonContainer> - <Title>Top Jurors</Title> - <SeeAllJurorsButton /> - </TitleAndButtonContainer> - {!isUndefined(topJurors) && topJurors.length === 0 ? ( - <StyledLabel>No jurors found</StyledLabel> - ) : ( - <ListContainer> - <Header /> - {!isUndefined(topJurors) - ? topJurors.map((juror) => <JurorCard key={juror.rank} address={juror.id} {...juror} />) - : [...Array(5)].map((_, i) => <SkeletonDisputeListItem key={i} />)} - </ListContainer> - )} - </Container> - ); -}; -export default TopJurors; diff --git a/web/src/pages/Home/index.tsx b/web/src/pages/Home/index.tsx deleted file mode 100644 index da6f92fbe..000000000 --- a/web/src/pages/Home/index.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { MAX_WIDTH_LANDSCAPE, landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { HomePageProvider } from "hooks/useHomePageContext"; -import { getOneYearAgoTimestamp } from "utils/date"; - -import HeroImage from "components/HeroImage"; -import LatestCases from "components/LatestCases"; -import ScrollTop from "components/ScrollTop"; - -import Community from "./Community"; -import CourtOverview from "./CourtOverview"; -import TopJurors from "./TopJurors"; - -const Wrapper = styled.div` - width: 100%; -`; - -const Container = styled.div` - width: 100%; - background-color: ${({ theme }) => theme.lightBackground}; - padding: 16px 16px 40px; - max-width: ${MAX_WIDTH_LANDSCAPE}; - margin: 0 auto; - - ${landscapeStyle( - () => css` - padding: 16px ${responsiveSize(0, 132)} 60px; - ` - )} -`; - -const Home: React.FC = () => ( - <HomePageProvider timeframe={getOneYearAgoTimestamp()}> - <Wrapper> - <HeroImage /> - <Container> - <CourtOverview /> - <LatestCases /> - <TopJurors /> - <Community /> - </Container> - <ScrollTop /> - </Wrapper> - </HomePageProvider> -); - -export default Home; diff --git a/web/src/pages/Jurors/DisplayJurors.tsx b/web/src/pages/Jurors/DisplayJurors.tsx deleted file mode 100644 index 6e3c56596..000000000 --- a/web/src/pages/Jurors/DisplayJurors.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import React, { useMemo } from "react"; -import { useParams, useNavigate } from "react-router-dom"; -import styled from "styled-components"; - -import { isUndefined } from "utils/index"; -import { StandardPagination } from "@kleros/ui-components-library"; - -import { useJurorsByCoherenceScore } from "queries/useJurorsByCoherenceScore"; - -import { OrderDirection } from "src/graphql/graphql"; - -import { SkeletonDisputeListItem } from "components/StyledSkeleton"; -import JurorCard from "../Home/TopJurors/JurorCard"; -import { ListContainer, StyledLabel } from "../Home/TopJurors"; -import Header from "../Home/TopJurors/Header"; -import { decodeURIFilter } from "utils/uri"; -import { useScrollTop } from "hooks/useScrollTop"; - -interface IDisplayJurors { - totalLeaderboardJurors: number; -} - -const StyledPagination = styled(StandardPagination)` - margin-top: 24px; - margin-left: auto; - margin-right: auto; -`; - -const DisplayJurors: React.FC<IDisplayJurors> = ({ totalLeaderboardJurors }) => { - const { page, order, filter } = useParams(); - const scrollTop = useScrollTop(); - const { id: searchValue } = decodeURIFilter(filter ?? "all"); - const navigate = useNavigate(); - const jurorsPerPage = 10; - const currentPage = parseInt(page ?? "1"); - const jurorSkip = jurorsPerPage * (currentPage - 1); - const { data: queryJurors } = useJurorsByCoherenceScore( - jurorSkip, - jurorsPerPage, - "coherenceScore", - order === "asc" ? OrderDirection.Asc : OrderDirection.Desc, - searchValue || "" - ); - - const jurors = useMemo(() => { - const baseJurors = queryJurors?.users?.map((juror, index) => ({ - ...juror, - rank: searchValue ? undefined : jurorSkip + index + 1, - })); - if (!searchValue && order === "asc" && baseJurors) { - return baseJurors.map((juror) => ({ - ...juror, - rank: totalLeaderboardJurors - (juror.rank || 0) + 1, - })); - } - return baseJurors; - }, [queryJurors, jurorSkip, order, totalLeaderboardJurors, searchValue]); - - const totalPages = useMemo( - () => (!isUndefined(totalLeaderboardJurors) ? Math.ceil(totalLeaderboardJurors / jurorsPerPage) : 1), - [totalLeaderboardJurors, jurorsPerPage] - ); - - const handlePageChange = (newPage: number) => { - scrollTop(true); - navigate(`/jurors/${newPage}/${order}/${filter}`); - }; - - return ( - <> - {isUndefined(totalLeaderboardJurors) ? ( - <> - <ListContainer> - <Header /> - {[...Array(jurorsPerPage)].map((_, i) => ( - <SkeletonDisputeListItem key={i} /> - ))} - </ListContainer> - {!searchValue && ( - <StyledPagination currentPage={currentPage} numPages={totalPages} callback={handlePageChange} /> - )} - </> - ) : ( - <ListContainer> - {!isUndefined(jurors) && jurors.length === 0 ? ( - <StyledLabel>No jurors found</StyledLabel> - ) : ( - <> - <Header /> - {!isUndefined(jurors) - ? jurors.map((juror) => <JurorCard key={juror.id} address={juror.id} {...juror} />) - : [...Array(jurorsPerPage)].map((_, i) => <SkeletonDisputeListItem key={i} />)} - {!searchValue && ( - <StyledPagination currentPage={currentPage} numPages={totalPages} callback={handlePageChange} /> - )} - </> - )} - </ListContainer> - )} - </> - ); -}; - -export default DisplayJurors; diff --git a/web/src/pages/Jurors/Search.tsx b/web/src/pages/Jurors/Search.tsx deleted file mode 100644 index 3bb59d361..000000000 --- a/web/src/pages/Jurors/Search.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React, { useRef, useState } from "react"; -import styled from "styled-components"; - -import { useNavigate, useParams, useSearchParams } from "react-router-dom"; -import { useDebounce } from "react-use"; -import { Searchbar } from "@kleros/ui-components-library"; - -import { isEmpty } from "utils/index"; -import { decodeURIFilter, encodeURIFilter, useRootPath } from "utils/uri"; - -const StyledSearchbar = styled(Searchbar)` - width: 100%; - - input { - font-size: 16px; - height: 45px; - padding-top: 0px; - padding-bottom: 0px; - } -`; - -const Search: React.FC = () => { - const { order, filter } = useParams(); - const location = useRootPath(); - const decodedFilter = decodeURIFilter(filter ?? "all"); - const { id: searchValue, ...filterObject } = decodedFilter; - const [search, setSearch] = useState(searchValue ?? ""); - const initialRenderRef = useRef(true); - const navigate = useNavigate(); - const [searchParams] = useSearchParams(); - - useDebounce( - () => { - if (initialRenderRef.current && isEmpty(search)) { - initialRenderRef.current = false; - return; - } - initialRenderRef.current = false; - const newFilters = isEmpty(search) ? { ...filterObject } : { ...filterObject, id: search }; - const encodedFilter = encodeURIFilter(newFilters); - navigate(`${location}/1/${order}/${encodedFilter}?${searchParams.toString()}`); - }, - 500, - [search] - ); - - return ( - <StyledSearchbar - dir="auto" - type="text" - placeholder="Search by address" - value={search} - onChange={(e) => setSearch(e.target.value)} - /> - ); -}; - -export default Search; diff --git a/web/src/pages/Jurors/Stats.tsx b/web/src/pages/Jurors/Stats.tsx deleted file mode 100644 index 188911104..000000000 --- a/web/src/pages/Jurors/Stats.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import Skeleton from "react-loading-skeleton"; - -import { isUndefined } from "utils/index"; - -const FieldWrapper = styled.div` - display: inline-flex; - gap: 8px; -`; - -const StyledLabel = styled.label` - color: ${({ theme }) => theme.primaryText}; -`; - -const ValueAndExtraLabel = styled.div` - display: flex; - gap: 4px; -`; - -const Field: React.FC<{ label: string; value?: number; extraLabel?: string }> = ({ label, value, extraLabel }) => ( - <FieldWrapper> - <StyledLabel>{label}</StyledLabel> - <ValueAndExtraLabel> - <small>{!isUndefined(value) ? value : <Skeleton width={16} />}</small> - {extraLabel ? <small>{extraLabel}</small> : null} - </ValueAndExtraLabel> - </FieldWrapper> -); - -export interface IStats { - totalJurors?: number; -} - -const Stats: React.FC<IStats> = ({ totalJurors }) => { - const value = !isUndefined(totalJurors) ? totalJurors : undefined; - return <Field label="Total" value={value} extraLabel="Jurors" />; -}; - -export default Stats; diff --git a/web/src/pages/Jurors/StatsAndFilters.tsx b/web/src/pages/Jurors/StatsAndFilters.tsx deleted file mode 100644 index cf54f36e4..000000000 --- a/web/src/pages/Jurors/StatsAndFilters.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -import { useNavigate, useParams, useSearchParams } from "react-router-dom"; - -import { DropdownSelect } from "@kleros/ui-components-library"; - -import { decodeURIFilter, encodeURIFilter, useRootPath } from "utils/uri"; - -import Stats, { IStats } from "./Stats"; - -const Container = styled.div` - display: flex; - flex-wrap: wrap; - gap: 8px; - margin-top: ${responsiveSize(12, 13)}; - margin-bottom: ${responsiveSize(16, 32)}; - justify-content: space-between; -`; - -const StatsAndFilters: React.FC<IStats> = ({ totalJurors }) => { - const navigate = useNavigate(); - const { order, filter } = useParams(); - const location = useRootPath(); - const { ...filterObject } = decodeURIFilter(filter ?? "all"); - const [searchParams] = useSearchParams(); - - const handleOrderChange = (value: string | number) => { - const encodedFilter = encodeURIFilter({ ...filterObject }); - navigate(`${location}/1/${value}/${encodedFilter}?${searchParams.toString()}`); - }; - - return ( - <Container> - <Stats {...{ totalJurors }} /> - <DropdownSelect - smallButton - simpleButton - items={[ - { value: "desc", text: "1st to last" }, - { value: "asc", text: "Last to 1st" }, - ]} - defaultValue={order} - callback={handleOrderChange} - /> - </Container> - ); -}; - -export default StatsAndFilters; diff --git a/web/src/pages/Jurors/index.tsx b/web/src/pages/Jurors/index.tsx deleted file mode 100644 index 2d7666521..000000000 --- a/web/src/pages/Jurors/index.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { MAX_WIDTH_LANDSCAPE, landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { useAccount } from "wagmi"; - -import { useTotalLeaderboardJurors } from "queries/useTotalLeaderboardJurors"; - -import ArrowIcon from "svgs/icons/arrow.svg"; - -import { StyledArrowLink } from "components/StyledArrowLink"; -import ScrollTop from "components/ScrollTop"; -import Search from "./Search"; -import StatsAndFilters from "./StatsAndFilters"; -import DisplayJurors from "./DisplayJurors"; - -const Container = styled.div` - width: 100%; - background-color: ${({ theme }) => theme.lightBackground}; - padding: 32px 16px 40px; - max-width: ${MAX_WIDTH_LANDSCAPE}; - margin: 0 auto; - - ${landscapeStyle( - () => css` - padding: 48px ${responsiveSize(0, 132)} 60px; - ` - )} -`; - -const Header = styled.div` - display: flex; - flex-direction: row; - justify-content: space-between; - flex-wrap: wrap; - margin-bottom: ${responsiveSize(12, 24)}; - gap: 4px; -`; - -const StyledTitle = styled.h1` - margin: 0px; - font-size: ${responsiveSize(20, 24)}; -`; - -const Jurors: React.FC = () => { - const { data: queryTotalLeaderBoardJurors } = useTotalLeaderboardJurors(); - const totalLeaderboardJurors = queryTotalLeaderBoardJurors?.counter?.totalLeaderboardJurors; - const { isConnected } = useAccount(); - - return ( - <> - <Container> - <Header> - <StyledTitle>Jurors Leaderboard</StyledTitle> - {isConnected ? ( - <StyledArrowLink to="/profile/1/desc/all"> - My Profile <ArrowIcon /> - </StyledArrowLink> - ) : null} - </Header> - <Search /> - <StatsAndFilters totalJurors={totalLeaderboardJurors} /> - <DisplayJurors totalLeaderboardJurors={totalLeaderboardJurors} /> - </Container> - <ScrollTop /> - </> - ); -}; - -export default Jurors; diff --git a/web/src/pages/Profile/JurorInfo/Coherence.tsx b/web/src/pages/Profile/JurorInfo/Coherence.tsx deleted file mode 100644 index 712884d22..000000000 --- a/web/src/pages/Profile/JurorInfo/Coherence.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { CircularProgress } from "@kleros/ui-components-library"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import WithHelpTooltip from "components/WithHelpTooltip"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - gap: 4px; - - ${landscapeStyle( - () => css` - gap: 0; - ` - )} -`; - -const tooltipMsg = - "A Coherent Vote is a vote coherent with the final jury decision" + - " (after all the appeal instances). If the juror vote is the same as " + - " the majority of jurors it's considered a Coherent Vote."; - -interface ICoherence { - userLevelData: { - level: number; - title: string; - }; - totalCoherentVotes: number; - totalResolvedVotes: number; - isMiniGuide: boolean; -} - -const Coherence: React.FC<ICoherence> = ({ userLevelData, totalCoherentVotes, totalResolvedVotes, isMiniGuide }) => { - const votesContent = ( - <label> - Coherent Votes: - <small> - {" "} - {totalCoherentVotes}/{totalResolvedVotes}{" "} - </small> - </label> - ); - - return ( - <Container> - <small>{userLevelData.title}</small> - <label>Level {userLevelData.level}</label> - <CircularProgress - progress={parseFloat(((totalCoherentVotes / Math.max(totalResolvedVotes, 1)) * 100).toFixed(2))} - /> - {!isMiniGuide ? ( - <WithHelpTooltip place="left" {...{ tooltipMsg }}> - {votesContent} - </WithHelpTooltip> - ) : ( - votesContent - )} - </Container> - ); -}; - -export default Coherence; diff --git a/web/src/pages/Profile/JurorInfo/Header.tsx b/web/src/pages/Profile/JurorInfo/Header.tsx deleted file mode 100644 index 59051816b..000000000 --- a/web/src/pages/Profile/JurorInfo/Header.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import React, { useMemo } from "react"; -import styled from "styled-components"; - -import { responsiveSize } from "styles/responsiveSize"; - -import { useToggle } from "react-use"; -import { useSearchParams } from "react-router-dom"; -import { Copiable } from "@kleros/ui-components-library"; - -import XIcon from "svgs/socialmedia/x.svg"; - -import { DEFAULT_CHAIN, getChain } from "consts/chains"; -import { shortenAddress } from "utils/shortenAddress"; - -import HowItWorks from "components/HowItWorks"; -import JurorLevels from "components/Popup/MiniGuides/JurorLevels"; -import { ExternalLink } from "components/ExternalLink"; -import JurorsLeaderboardButton from "components/JurorsLeaderboardButton"; - -const Container = styled.div` - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - flex-wrap: wrap; - margin-bottom: ${responsiveSize(16, 24)}; - gap: 12px; -`; - -const StyledTitle = styled.h1` - margin-bottom: 0; - font-size: ${responsiveSize(20, 24)}; -`; - -const LinksContainer = styled.div` - display: flex; - color: ${({ theme }) => theme.primaryBlue}; - align-items: center; - gap: 8px ${responsiveSize(20, 24)}; - flex-wrap: wrap; -`; - -const StyledXIcon = styled(XIcon)` - width: 16px; - height: 16px; - fill: ${({ theme }) => theme.primaryBlue}; -`; - -const StyledJurorExternalLink = styled(ExternalLink)` - font-size: ${responsiveSize(18, 22)}; - margin-left: ${responsiveSize(4, 8)}; - font-weight: 600; -`; - -const StyledShareExternalLink = styled(ExternalLink)` - display: flex; - gap: 6px; -`; - -const StyledShareLabel = styled.label` - margin-top: 1px; - color: ${({ theme }) => theme.primaryBlue}; - cursor: pointer; -`; - -interface IHeader { - levelTitle: string; - levelNumber: number; - totalCoherentVotes: number; - totalResolvedVotes: number; - addressToQuery: `0x${string}`; -} - -const Header: React.FC<IHeader> = ({ - levelTitle, - levelNumber, - totalCoherentVotes, - totalResolvedVotes, - addressToQuery, -}) => { - const [isJurorLevelsMiniGuideOpen, toggleJurorLevelsMiniGuide] = useToggle(false); - const [searchParams] = useSearchParams(); - - const coherencePercentage = parseFloat(((totalCoherentVotes / Math.max(totalResolvedVotes, 1)) * 100).toFixed(2)); - const courtUrl = window.location.origin; - const xPostText = `Hey I've been busy as a Juror on the Kleros court, check out my score: \n\nLevel: ${levelNumber} (${levelTitle})\nCoherence Percentage: ${coherencePercentage}%\nCoherent Votes: ${totalCoherentVotes}/${totalResolvedVotes}\n\nBe a juror with me! ➡️ ${courtUrl}`; - const xShareUrl = `https://twitter.com/intent/tweet?text=${encodeURIComponent(xPostText)}`; - const searchParamAddress = searchParams.get("address")?.toLowerCase(); - - const addressExplorerLink = useMemo(() => { - return `${getChain(DEFAULT_CHAIN)?.blockExplorers?.default.url}/address/${addressToQuery}`; - }, [addressToQuery]); - - return ( - <Container> - <StyledTitle> - Juror Profile - - <Copiable copiableContent={addressToQuery} info="Copy Address"> - <StyledJurorExternalLink to={addressExplorerLink} target="_blank" rel="noopener noreferrer"> - {shortenAddress(addressToQuery)} - </StyledJurorExternalLink> - </Copiable> - </StyledTitle> - <LinksContainer> - <JurorsLeaderboardButton /> - <HowItWorks - isMiniGuideOpen={isJurorLevelsMiniGuideOpen} - toggleMiniGuide={toggleJurorLevelsMiniGuide} - MiniGuideComponent={JurorLevels} - /> - {totalResolvedVotes > 0 && !searchParamAddress ? ( - <StyledShareExternalLink to={xShareUrl} target="_blank" rel="noreferrer"> - <StyledXIcon /> - <StyledShareLabel>Share your juror score</StyledShareLabel> - </StyledShareExternalLink> - ) : null} - </LinksContainer> - </Container> - ); -}; - -export default Header; diff --git a/web/src/pages/Profile/JurorInfo/JurorRewards.tsx b/web/src/pages/Profile/JurorInfo/JurorRewards.tsx deleted file mode 100644 index 0a4471252..000000000 --- a/web/src/pages/Profile/JurorInfo/JurorRewards.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { useAccount } from "wagmi"; - -import { CoinIds } from "consts/coingecko"; -import { useCoinPrice } from "hooks/useCoinPrice"; -import { getFormattedRewards } from "utils/jurorRewardConfig"; - -import { useUserQuery } from "queries/useUser"; - -import WithHelpTooltip from "components/WithHelpTooltip"; - -import TokenRewards from "./TokenRewards"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: flex-start; - width: auto; -`; - -const tooltipMsg = - "Users have an economic interest in serving as jurors in Kleros: " + - "collecting the Juror Rewards in exchange for their work. Each juror who " + - "is coherent with the final ruling receive the Juror Rewards composed of " + - "arbitration fees (ETH) + PNK redistribution between jurors."; - -interface IJurorRewards { - addressToQuery: `0x${string}`; -} - -const JurorRewards: React.FC<IJurorRewards> = ({ addressToQuery }) => { - const { data } = useUserQuery(addressToQuery); - const coinIds = [CoinIds.PNK, CoinIds.ETH]; - const { prices: pricesData } = useCoinPrice(coinIds); - - const formattedRewards = getFormattedRewards(data, pricesData); - - return ( - <Container> - <WithHelpTooltip place="bottom" {...{ tooltipMsg }}> - <label> Juror Rewards </label> - </WithHelpTooltip> - {formattedRewards.map(({ token, amount, value }) => ( - <TokenRewards key={token} {...{ token }} amount={amount} value={value} /> - ))} - </Container> - ); -}; - -export default JurorRewards; diff --git a/web/src/pages/Profile/JurorInfo/PixelArt.tsx b/web/src/pages/Profile/JurorInfo/PixelArt.tsx deleted file mode 100644 index 48e15dd93..000000000 --- a/web/src/pages/Profile/JurorInfo/PixelArt.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React, { useState } from "react"; -import styled from "styled-components"; - -import Skeleton from "react-loading-skeleton"; - -import aristotelesImage from "assets/pngs/dashboard/aristoteles.png"; -import diogenesImage from "assets/pngs/dashboard/diogenes.png"; -import platoImage from "assets/pngs/dashboard/plato.png"; -import pythagorasImage from "assets/pngs/dashboard/pythagoras.png"; -import socratesImage from "assets/pngs/dashboard/socrates.png"; - -interface IStyledImage { - show: boolean; - width: number | string; - height: number | string; -} - -const StyledImage = styled.img<IStyledImage>` - width: ${({ width }) => width}; - height: ${({ height }) => height}; - display: ${({ show }) => (show ? "block" : "none")}; -`; - -interface IStyledSkeleton { - width: number | string; - height: number | string; -} - -const StyledSkeleton = styled(Skeleton)<IStyledSkeleton>` - width: ${({ width }) => width}; - height: ${({ height }) => height}; -`; - -const images = [diogenesImage, pythagorasImage, socratesImage, platoImage, aristotelesImage]; - -interface IPixelArt { - level: number; - width: number | string; - height: number | string; -} - -const PixelArt: React.FC<IPixelArt> = ({ level, width, height }) => { - const [imageLoaded, setImageLoaded] = useState(false); - return ( - <div> - {!imageLoaded && <StyledSkeleton width={width} height={height} />} - <StyledImage - src={images[level]} - alt="Pixel Art per Level" - onLoad={() => setImageLoaded(true)} - show={imageLoaded} - width={width} - height={height} - /> - </div> - ); -}; - -export default PixelArt; diff --git a/web/src/pages/Profile/JurorInfo/StakingRewards.tsx b/web/src/pages/Profile/JurorInfo/StakingRewards.tsx deleted file mode 100644 index 1e699c7de..000000000 --- a/web/src/pages/Profile/JurorInfo/StakingRewards.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { Box as _Box, Button } from "@kleros/ui-components-library"; - -import { EnsureChain } from "components/EnsureChain"; -import WithHelpTooltip from "components/WithHelpTooltip"; - -import TokenRewards from "./TokenRewards"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: flex-start; -`; - -const Box = styled(_Box)` - display: flex; - justify-content: space-between; - align-items: center; - padding: 8px; - width: 270px; - height: auto; - border-radius: 3px; -`; - -const UnclaimedContainer = styled.div` - display: flex; - flex-wrap: wrap; - gap: 4px; -`; - -const ClaimPNK: React.FC = () => { - return ( - <Box> - <UnclaimedContainer> - <label> Unclaimed: </label> - <small> 1,000 PNK </small> - </UnclaimedContainer> - <EnsureChain> - <Button small variant="tertiary" text="Claim" /> - </EnsureChain> - </Box> - ); -}; - -const tooltipMsg = - "Staking Rewards are the rewards won by staking your PNK on a court during " + - "the Kleros' Jurors incentive program."; - -const Coherence: React.FC = () => { - return ( - <Container> - <WithHelpTooltip place="bottom" {...{ tooltipMsg }}> - <label> - Staking Rewards: <small>APY 6%</small> - </label> - </WithHelpTooltip> - <TokenRewards token="PNK" amount="10,000" value="8,783" /> - <ClaimPNK /> - </Container> - ); -}; - -export default Coherence; diff --git a/web/src/pages/Profile/JurorInfo/TokenRewards.tsx b/web/src/pages/Profile/JurorInfo/TokenRewards.tsx deleted file mode 100644 index dc1c50e91..000000000 --- a/web/src/pages/Profile/JurorInfo/TokenRewards.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import GradientTokenIcons from "components/GradientTokenIcons"; -import NumberDisplay from "components/NumberDisplay"; -import { StyledSkeleton } from "components/StyledSkeleton"; - -const RewardContainer = styled.div` - display: flex; - justify-content: center; - align-items: center; - gap: 8px; -`; - -const StyledH1 = styled.h1` - margin: 0; -`; - -interface ITokenRewards { - token: "ETH" | "PNK"; - amount: string | undefined; - value: string | undefined; -} - -const TokenRewards: React.FC<ITokenRewards> = ({ token, amount, value }) => { - return ( - <RewardContainer> - {token && <GradientTokenIcons icon={token} />} - <StyledH1> - {amount ? <NumberDisplay value={amount} unit={token} place="left" /> : <StyledSkeleton width={76} />} - </StyledH1> - <label> - {value ? <NumberDisplay value={value} place="right" unit="$" isCurrency /> : <StyledSkeleton width={32} />} - </label> - </RewardContainer> - ); -}; - -export default TokenRewards; diff --git a/web/src/pages/Profile/JurorInfo/index.tsx b/web/src/pages/Profile/JurorInfo/index.tsx deleted file mode 100644 index 87071c220..000000000 --- a/web/src/pages/Profile/JurorInfo/index.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { Card as _Card } from "@kleros/ui-components-library"; - -import { getUserLevelData } from "utils/userLevelCalculation"; - -import { useUserQuery } from "queries/useUser"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import Coherence from "./Coherence"; -import Header from "./Header"; -import JurorRewards from "./JurorRewards"; -import PixelArt from "./PixelArt"; - -const Container = styled.div``; - -const Card = styled(_Card)` - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - - gap: 40px; - width: 100%; - height: auto; - padding: 24px 0; - - ${landscapeStyle( - () => css` - flex-direction: row; - gap: ${responsiveSize(24, 64)}; - height: 236px; - ` - )} -`; - -interface IJurorInfo { - addressToQuery: `0x${string}`; -} - -const JurorInfo: React.FC<IJurorInfo> = ({ addressToQuery }) => { - const { data } = useUserQuery(addressToQuery); - const totalCoherentVotes = data?.user ? parseInt(data?.user?.totalCoherentVotes) : 0; - const totalResolvedVotes = data?.user ? parseInt(data?.user?.totalResolvedVotes) : 0; - const coherenceScore = data?.user ? parseInt(data?.user?.coherenceScore) : 0; - const userLevelData = getUserLevelData(coherenceScore); - - return ( - <Container> - <Header - levelTitle={userLevelData.title} - levelNumber={userLevelData.level} - {...{ totalCoherentVotes, totalResolvedVotes, addressToQuery }} - /> - <Card> - <PixelArt level={userLevelData.level} width="189px" height="189px" /> - <Coherence isMiniGuide={false} {...{ userLevelData, totalCoherentVotes, totalResolvedVotes }} /> - <JurorRewards {...{ addressToQuery }} /> - </Card> - </Container> - ); -}; - -export default JurorInfo; diff --git a/web/src/pages/Profile/Stakes/CourtCard/CourtName.tsx b/web/src/pages/Profile/Stakes/CourtCard/CourtName.tsx deleted file mode 100644 index 6b53b480d..000000000 --- a/web/src/pages/Profile/Stakes/CourtCard/CourtName.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import ArrowIcon from "svgs/icons/arrow.svg"; - -import { StyledArrowLink } from "components/StyledArrowLink"; - -const Container = styled.div` - display: flex; - width: 100%; - flex-direction: row; - gap: 16px; - align-items: center; - justify-content: space-between; - - small { - height: 100%; - font-weight: 600; - } - - ${landscapeStyle( - () => css` - justify-content: flex-start; - width: auto; - ` - )} -`; - -const ReStyledArrowLink = styled(StyledArrowLink)` - font-size: 14px; - - > svg { - height: 15px; - width: 15px; - } -`; - -interface ICourtName { - name: string; - id: string; -} - -const CourtName: React.FC<ICourtName> = ({ name, id }) => { - return ( - <Container> - <small>{name}</small> - <ReStyledArrowLink to={`/courts/${id?.toString()}`}> - Open Court <ArrowIcon /> - </ReStyledArrowLink> - </Container> - ); -}; -export default CourtName; diff --git a/web/src/pages/Profile/Stakes/CourtCard/Stake.tsx b/web/src/pages/Profile/Stakes/CourtCard/Stake.tsx deleted file mode 100644 index c1617b621..000000000 --- a/web/src/pages/Profile/Stakes/CourtCard/Stake.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { formatUnits } from "viem"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import NumberDisplay from "components/NumberDisplay"; - -import PnkIcon from "svgs/icons/pnk.svg"; - -const Container = styled.div` - display: flex; - flex-direction: row; - gap: 8px; - width: 100%; - justify-content: flex-start; - align-items: center; - - ${landscapeStyle( - () => css` - width: auto; - gap: 12px; - ` - )} -`; - -const StyledLabel = styled.label` - display: flex; - font-weight: 600; - color: ${({ theme }) => theme.primaryText}; - font-size: 16px; - align-items: center; - gap: 4px; -`; - -const StyledPnkIcon = styled(PnkIcon)` - display: inline-block; - width: 16px; - height: 16px; - fill: ${({ theme }) => theme.secondaryPurple}; -`; - -interface IStake { - stake: string; -} - -const Stake: React.FC<IStake> = ({ stake }) => { - const formattedStake = formatUnits(stake, 18); - - return ( - <Container> - <StyledPnkIcon /> - <StyledLabel> - <NumberDisplay value={formattedStake} unit="PNK" /> - </StyledLabel> - </Container> - ); -}; -export default Stake; diff --git a/web/src/pages/Profile/Stakes/CourtCard/index.tsx b/web/src/pages/Profile/Stakes/CourtCard/index.tsx deleted file mode 100644 index 360f97ca6..000000000 --- a/web/src/pages/Profile/Stakes/CourtCard/index.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { Card as _Card } from "@kleros/ui-components-library"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import CourtName from "./CourtName"; -import Stake from "./Stake"; - -const Container = styled(_Card)` - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: auto; - width: 100%; - padding: 20px 16px 24px; - border-left: 5px solid ${({ theme }) => theme.secondaryPurple}; - flex-wrap: wrap; - gap: 16px; - - :hover { - cursor: auto; - } - - ${({ theme }) => (theme.name === "light" ? `box-shadow: 0px 2px 3px 0px ${theme.stroke};` : "")} - - ${landscapeStyle( - () => css` - padding: 21.5px 32px; - ` - )} -`; - -interface ICourtCard { - name: string; - stake: string; - id: string; -} - -const CourtCard: React.FC<ICourtCard> = ({ name, stake, id }) => { - return ( - <Container hover> - <CourtName {...{ name, id }} /> - <Stake {...{ stake }} /> - </Container> - ); -}; - -export default CourtCard; diff --git a/web/src/pages/Profile/Stakes/Header.tsx b/web/src/pages/Profile/Stakes/Header.tsx deleted file mode 100644 index 811ab0e1f..000000000 --- a/web/src/pages/Profile/Stakes/Header.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { useSearchParams } from "react-router-dom"; -import { formatUnits } from "viem"; - -import LockerIcon from "svgs/icons/locker.svg"; -import PnkIcon from "svgs/icons/pnk.svg"; - -import { isUndefined } from "utils/index"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import NumberDisplay from "components/NumberDisplay"; - -const Container = styled.div` - display: flex; - flex-direction: row; - flex-wrap: wrap; - width: 100%; - gap: 4px 16px; - align-items: center; - margin-bottom: ${responsiveSize(16, 24)}; - - ${landscapeStyle( - () => css` - justify-content: space-between; - ` - )} -`; - -const LockedPnk = styled.div` - display: flex; - flex-wrap: nowrap; - gap: 8px; - align-items: center; - justify-content: center; -`; - -const StakesGroup = styled.div` - display: flex; - gap: 12px 24px; - align-items: center; - flex-wrap: wrap; -`; - -const AvailablePnk = styled.div` - display: flex; - flex-wrap: nowrap; - gap: 8px; - align-items: center; - justify-content: center; -`; - -const EffectivePnk = styled.div` - display: flex; - flex-wrap: nowrap; - gap: 8px; - align-items: center; - justify-content: center; -`; - -const StyledTitle = styled.h1` - margin-bottom: 0; - font-size: ${responsiveSize(20, 24)}; -`; - -const StyledLockerIcon = styled(LockerIcon)` - fill: ${({ theme }) => theme.secondaryPurple}; - width: 14px; - height: 14px; - margin-bottom: 1px; -`; - -const StyledPnkIcon = styled(PnkIcon)` - fill: ${({ theme }) => theme.secondaryPurple}; - width: 14px; - height: 14px; - margin-bottom: 1px; -`; - -const StyledEffectivePnkIcon = styled(PnkIcon)` - fill: ${({ theme }) => theme.secondaryPurple}; - width: 14px; - height: 14px; - margin-bottom: 1px; -`; - -interface IHeader { - availableStake?: bigint; - lockedStake?: bigint; - effectiveStake?: bigint; -} - -const Header: React.FC<IHeader> = ({ availableStake, lockedStake, effectiveStake }) => { - const formattedAvailableStake = !isUndefined(availableStake) && formatUnits(availableStake, 18); - const formattedLockedStake = !isUndefined(lockedStake) && formatUnits(lockedStake, 18); - const formattedEffectiveStake = !isUndefined(effectiveStake) && formatUnits(effectiveStake, 18); - const [searchParams] = useSearchParams(); - const searchParamAddress = searchParams.get("address")?.toLowerCase(); - - return ( - <Container> - <StyledTitle>{searchParamAddress ? "Their" : "My"} Stakes</StyledTitle> - <StakesGroup> - {!isUndefined(availableStake) ? ( - <AvailablePnk> - <StyledPnkIcon /> - <label> Available: </label> - <small> - <NumberDisplay value={formattedAvailableStake.toString()} unit="PNK" /> - </small> - </AvailablePnk> - ) : null} - {!isUndefined(effectiveStake) ? ( - <EffectivePnk> - <StyledEffectivePnkIcon /> - <label> Staked: </label> - <small> - <NumberDisplay value={formattedEffectiveStake.toString()} unit="PNK" /> - </small> - </EffectivePnk> - ) : null} - {!isUndefined(lockedStake) ? ( - <LockedPnk> - <StyledLockerIcon /> - <label> Locked: </label> - <small> - <NumberDisplay value={formattedLockedStake.toString()} unit="PNK" /> - </small> - </LockedPnk> - ) : null} - </StakesGroup> - </Container> - ); -}; - -export default Header; diff --git a/web/src/pages/Profile/Stakes/index.tsx b/web/src/pages/Profile/Stakes/index.tsx deleted file mode 100644 index 8df01bb0b..000000000 --- a/web/src/pages/Profile/Stakes/index.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import Skeleton from "react-loading-skeleton"; -import { useSearchParams } from "react-router-dom"; - -import { useReadSortitionModuleGetJurorBalance } from "hooks/contracts/generated"; - -import { useJurorStakeDetailsQuery } from "queries/useJurorStakeDetailsQuery"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import CourtCard from "./CourtCard"; -import Header from "./Header"; - -const Container = styled.div` - margin-top: ${responsiveSize(24, 48)}; -`; - -const CourtCardsContainer = styled.div` - display: flex; - flex-direction: column; - gap: 12px; - z-index: 0; - - ${landscapeStyle( - () => css` - gap: 16px; - ` - )} -`; - -const StyledLabel = styled.label` - font-size: ${responsiveSize(14, 16)}; -`; - -interface IStakes { - addressToQuery: `0x${string}`; -} - -const Stakes: React.FC<IStakes> = ({ addressToQuery }) => { - const { data: stakeData, isLoading } = useJurorStakeDetailsQuery(addressToQuery); - const { data: jurorBalance } = useReadSortitionModuleGetJurorBalance({ - args: [addressToQuery, BigInt(1)], - }); - const [searchParams] = useSearchParams(); - const searchParamAddress = searchParams.get("address")?.toLowerCase(); - const stakedCourts = stakeData?.jurorTokensPerCourts?.filter(({ staked }) => staked > 0); - const isStaked = stakedCourts && stakedCourts.length > 0; - const availableStake = jurorBalance?.[0]; - const lockedStake = jurorBalance?.[1]; - const effectiveStake = stakeData?.jurorTokensPerCourts?.[0]?.effectiveStake - ? BigInt(stakeData.jurorTokensPerCourts[0].effectiveStake) - : undefined; - - return ( - <Container> - <Header {...{ lockedStake, availableStake, effectiveStake }} /> - {isLoading ? <Skeleton /> : null} - {!isStaked && !isLoading ? ( - <StyledLabel>{searchParamAddress ? "They" : "You"} are not staked in any court</StyledLabel> - ) : null} - {isStaked && !isLoading ? ( - <CourtCardsContainer> - {stakeData?.jurorTokensPerCourts - ?.filter(({ staked }) => staked > 0) - .map(({ court: { id, name }, staked }) => ( - <CourtCard key={id} name={name ?? ""} stake={staked} {...{ id }} /> - ))} - </CourtCardsContainer> - ) : null} - </Container> - ); -}; - -export default Stakes; diff --git a/web/src/pages/Profile/index.tsx b/web/src/pages/Profile/index.tsx deleted file mode 100644 index b52327eda..000000000 --- a/web/src/pages/Profile/index.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import React, { useMemo } from "react"; -import styled, { css } from "styled-components"; - -import { useNavigate, useParams, useSearchParams } from "react-router-dom"; -import { useAccount } from "wagmi"; - -import { isUndefined } from "utils/index"; -import { decodeURIFilter, useRootPath } from "utils/uri"; - -import { DisputeDetailsFragment, useMyCasesQuery } from "queries/useCasesQuery"; -import { useUserQuery } from "queries/useUser"; - -import { Dispute_Filter, OrderDirection, UserDetailsFragment } from "src/graphql/graphql"; - -import { MAX_WIDTH_LANDSCAPE, landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import CasesDisplay from "components/CasesDisplay"; -import ConnectWallet from "components/ConnectWallet"; -import FavoriteCases from "components/FavoriteCases"; -import ScrollTop from "components/ScrollTop"; - -import JurorInfo from "./JurorInfo"; -import Stakes from "./Stakes"; - -const Container = styled.div` - width: 100%; - background-color: ${({ theme }) => theme.lightBackground}; - padding: 32px 16px 40px; - max-width: ${MAX_WIDTH_LANDSCAPE}; - margin: 0 auto; - - ${landscapeStyle( - () => css` - padding: 48px ${responsiveSize(0, 132)} 60px; - ` - )} -`; - -const StyledCasesDisplay = styled(CasesDisplay)` - margin-top: ${responsiveSize(24, 48)}; - - .title { - margin-bottom: ${responsiveSize(12, 24)}; - } -`; - -const ConnectWalletContainer = styled.div` - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - color: ${({ theme }) => theme.primaryText}; -`; - -const calculateStats = (user: UserDetailsFragment, filter: Dispute_Filter) => { - const toInt = (v) => Number(v) || 0; - let totalCases, ruledCases; - - if (!user) { - totalCases = 0; - ruledCases = 0; - } else if (filter?.period === "appeal") { - totalCases = toInt(user.totalAppealingDisputes); - ruledCases = 0; - } else if (filter?.ruled === true) { - totalCases = toInt(user.totalResolvedDisputes); - ruledCases = totalCases; - } else if (filter?.ruled === false) { - totalCases = toInt(user.disputes?.length); - ruledCases = 0; - } else { - totalCases = toInt(user.disputes?.length); - ruledCases = toInt(user.totalResolvedDisputes); - } - - return { - totalCases, - ruledCases, - }; -}; - -const Profile: React.FC = () => { - const { isConnected, address: connectedAddress } = useAccount(); - const { page, order, filter } = useParams(); - const [searchParams] = useSearchParams(); - const location = useRootPath(); - const navigate = useNavigate(); - const searchParamAddress = searchParams.get("address")?.toLowerCase(); - const addressToQuery = searchParamAddress || connectedAddress?.toLowerCase(); - const casesPerPage = 3; - const pageNumber = parseInt(page ?? "1"); - const disputeSkip = casesPerPage * (pageNumber - 1); - const decodedFilter = decodeURIFilter(filter ?? "all"); - const { data: disputesData } = useMyCasesQuery( - addressToQuery, - disputeSkip, - decodedFilter, - order === "asc" ? OrderDirection.Asc : OrderDirection.Desc - ); - const { data: userData } = useUserQuery(addressToQuery, decodedFilter); - const { totalCases, ruledCases: totalResolvedCases } = useMemo( - () => calculateStats(userData?.user, decodedFilter), - [userData?.user, decodedFilter] - ); - const totalPages = useMemo( - () => (!isUndefined(totalCases) ? Math.ceil(totalCases / casesPerPage) : 1), - [totalCases, casesPerPage] - ); - - return ( - <Container> - {isConnected || searchParamAddress ? ( - <> - <JurorInfo {...{ addressToQuery }} /> - <Stakes {...{ addressToQuery }} /> - <StyledCasesDisplay - title={`${searchParamAddress ? "Their" : "My"} Cases`} - disputes={userData?.user !== null ? (disputesData?.user?.disputes as DisputeDetailsFragment[]) : []} - numberDisputes={totalCases} - numberClosedDisputes={totalResolvedCases} - totalPages={totalPages} - currentPage={pageNumber} - setCurrentPage={(newPage: number) => - navigate(`${location}/${newPage}/${order}/${filter}?${searchParams.toString()}`) - } - {...{ casesPerPage }} - /> - </> - ) : ( - <ConnectWalletContainer> - To see your profile, connect first - <hr /> - <ConnectWallet /> - </ConnectWalletContainer> - )} - <FavoriteCases /> - <ScrollTop /> - </Container> - ); -}; - -export default Profile; diff --git a/web/src/pages/Resolver/Briefing/Description.tsx b/web/src/pages/Resolver/Briefing/Description.tsx deleted file mode 100644 index 91efc9415..000000000 --- a/web/src/pages/Resolver/Briefing/Description.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import React, { useRef, useEffect } from "react"; -import styled, { css } from "styled-components"; - -import { Textarea } from "@kleros/ui-components-library"; - -import { useNewDisputeContext } from "context/NewDisputeContext"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import Header from "pages/Resolver/Header"; - -import NavigationButtons from "../NavigationButtons"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; -`; - -const StyledTextArea = styled(Textarea)` - width: 84vw; - height: 300px; - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} -`; - -const Description: React.FC = () => { - const { disputeData, setDisputeData } = useNewDisputeContext(); - const containerRef = useRef<HTMLDivElement>(null); - - const handleWrite = (event: React.ChangeEvent<HTMLTextAreaElement>) => { - setDisputeData({ ...disputeData, description: event.target.value }); - }; - - useEffect(() => { - if (containerRef.current) { - const textareaElement = containerRef.current.querySelector("textarea"); - if (textareaElement) { - textareaElement.focus(); - } - } - }, []); - - return ( - <Container ref={containerRef}> - <Header text="Describe the case" /> - <StyledTextArea - dir="auto" - onChange={handleWrite} - value={disputeData.description} - placeholder="eg. Bob hired Alice to develop a website for him. Bob claims the contract was not fully respected, and the website was delivered incomplete. For that reason, he wants to pay part of the agreed payment: 150 DAI. On the other hand, Alice claims she should receive the full payment: 250 DAI." - /> - <NavigationButtons prevRoute="/resolver/title" nextRoute="/resolver/court" /> - </Container> - ); -}; - -export default Description; diff --git a/web/src/pages/Resolver/Briefing/Title.tsx b/web/src/pages/Resolver/Briefing/Title.tsx deleted file mode 100644 index 77057cd33..000000000 --- a/web/src/pages/Resolver/Briefing/Title.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import React, { useRef, useEffect } from "react"; -import styled, { css } from "styled-components"; - -import { Field } from "@kleros/ui-components-library"; - -import { useNewDisputeContext } from "context/NewDisputeContext"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import Header from "pages/Resolver/Header"; - -import NavigationButtons from "../NavigationButtons"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - - ${landscapeStyle( - () => css` - padding-bottom: 240px; - ` - )} -`; - -const StyledField = styled(Field)` - width: 84vw; - - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} -`; - -const Title: React.FC = () => { - const { disputeData, setDisputeData } = useNewDisputeContext(); - const containerRef = useRef<HTMLDivElement>(null); - - const handleWrite = (event: React.ChangeEvent<HTMLInputElement>) => { - setDisputeData({ ...disputeData, title: event.target.value }); - }; - - useEffect(() => { - if (containerRef.current) { - const inputElement = containerRef.current.querySelector("input"); - if (inputElement) { - inputElement.focus(); - } - } - }, []); - - return ( - <Container ref={containerRef}> - <Header text="Choose a title" /> - <StyledField - dir="auto" - onChange={handleWrite} - placeholder="eg. Freelance work disagreement between Alice and Bob" - value={disputeData.title} - /> - <NavigationButtons prevRoute="" nextRoute="/resolver/description" /> - </Container> - ); -}; - -export default Title; diff --git a/web/src/pages/Resolver/Header.tsx b/web/src/pages/Resolver/Header.tsx deleted file mode 100644 index d7cdbe8e1..000000000 --- a/web/src/pages/Resolver/Header.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -const Container = styled.h1` - margin-bottom: 32px; - width: 84vw; - text-align: center; - - ${landscapeStyle( - () => css` - width: auto; - ` - )} -`; - -interface IHeader { - text: string; -} - -const Header: React.FC<IHeader> = ({ text }) => { - return <Container>{text}</Container>; -}; -export default Header; diff --git a/web/src/pages/Resolver/Landing/CreationCard.tsx b/web/src/pages/Resolver/Landing/CreationCard.tsx deleted file mode 100644 index e1eb0f04b..000000000 --- a/web/src/pages/Resolver/Landing/CreationCard.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { Card, Radio } from "@kleros/ui-components-library"; - -import CaseFromScratchIcon from "svgs/icons/caseFromScratch.svg"; -import DuplicateCaseIcon from "svgs/icons/duplicateCase.svg"; - -import { responsiveSize } from "styles/responsiveSize"; - -import { Divider } from "components/Divider"; -import { NumberInputField } from "components/NumberInputField"; -import WithHelpTooltip from "components/WithHelpTooltip"; - -export enum CreationMethod { - Scratch, - Duplicate, -} - -const StyledCard = styled(Card)<{ selected?: boolean }>` - height: fit-content; - width: 100%; - background: ${({ theme, selected }) => (selected ? theme.whiteBackground : theme.lightBackground)}; -`; - -const CardTopContent = styled.div` - width: 100%; - padding: 8px ${responsiveSize(16, 24)}; - display: flex; - align-items: center; - gap: ${responsiveSize(8, 16)}; -`; - -const CardBottomContent = styled.div` - width: 100%; - padding: 16px ${responsiveSize(16, 24)}; - display: flex; - align-items: center; - flex-wrap: wrap; - gap: ${responsiveSize(8, 16)}; -`; - -const Icon = styled.svg` - width: 48px; - height: 48px; - circle { - fill: ${({ theme }) => theme.lightBlue}; - stroke: ${({ theme }) => theme.primaryBlue}; - } - path { - fill: ${({ theme }) => theme.primaryBlue}; - } -`; - -const StyledP = styled.p` - padding: 0; - font-size: 16px; - flex: 1; - color: ${({ theme }) => theme.primaryText}; -`; - -const StyledRadio = styled(Radio)` - align-self: center; - padding-left: 16px; - - > span { - transform: translateY(-50%); - } -`; - -const Label = styled.label` - font-size: 14px; - color: ${({ theme }) => theme.primaryText}; -`; - -const StyledNumberField = styled(NumberInputField)` - max-width: 128px; - input { - border: 1px solid ${({ theme, variant }) => (variant === "error" ? theme.error : theme.stroke)}; - } -`; - -const ErrorMsg = styled.small` - font-size: 16px; - font-weight: 400; - color: ${({ theme }) => theme.error}; -`; - -interface ICreationCard { - cardMethod: CreationMethod; - selectedMethod: CreationMethod; - setCreationMethod: (method: CreationMethod) => void; - disputeID?: string; - setDisputeID?: (id?: string) => void; - isInvalidDispute?: boolean; -} - -const CreationCard: React.FC<ICreationCard> = ({ - cardMethod, - selectedMethod, - setCreationMethod, - disputeID, - setDisputeID, - isInvalidDispute, -}) => { - return ( - <StyledCard hover onClick={() => setCreationMethod(cardMethod)} selected={cardMethod === selectedMethod}> - <CardTopContent> - <Icon as={cardMethod === CreationMethod.Scratch ? CaseFromScratchIcon : DuplicateCaseIcon} /> - <StyledP> - {cardMethod === CreationMethod.Scratch ? "Create a case from scratch" : "Duplicate an existing case"} - </StyledP> - <StyledRadio label="" checked={cardMethod === selectedMethod} onChange={() => setCreationMethod(cardMethod)} /> - </CardTopContent> - {cardMethod === CreationMethod.Duplicate && selectedMethod === CreationMethod.Duplicate ? ( - <> - <Divider /> - <CardBottomContent> - <WithHelpTooltip tooltipMsg={'The case ID can be found on the top left of the Case page. eg. "Case #300".'}> - <Label>{"Enter the cases's ID"}</Label> - </WithHelpTooltip> - <StyledNumberField - placeholder="eg. 45" - value={disputeID} - onChange={(val) => { - if (setDisputeID) setDisputeID(val.trim() !== "" ? val : undefined); - }} - variant={isInvalidDispute ? "error" : undefined} - /> - {isInvalidDispute ? <ErrorMsg>Invalid dispute</ErrorMsg> : null} - </CardBottomContent> - </> - ) : null} - </StyledCard> - ); -}; - -export default CreationCard; diff --git a/web/src/pages/Resolver/Landing/index.tsx b/web/src/pages/Resolver/Landing/index.tsx deleted file mode 100644 index 5f9325949..000000000 --- a/web/src/pages/Resolver/Landing/index.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import React, { useEffect, useMemo, useState } from "react"; -import styled, { css } from "styled-components"; - -import { useNavigate } from "react-router-dom"; -import { useDebounce } from "react-use"; - -import { Button } from "@kleros/ui-components-library"; - -import { AliasArray, Answer, useNewDisputeContext } from "context/NewDisputeContext"; -import { extraDataToTokenInfo } from "utils/extradataToTokenInfo"; - -import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; -import { usePopulatedDisputeData } from "queries/usePopulatedDisputeData"; -import { useRoundDetailsQuery } from "queries/useRoundDetailsQuery"; - -import { isUndefined } from "src/utils"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import Header from "../Header"; - -import CreationCard, { CreationMethod } from "./CreationCard"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - width: 84vw; - - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - - padding-bottom: 240px; - ` - )} -`; - -const CardContainer = styled.div` - width: 100%; - max-width: 720px; - display: flex; - flex-direction: column; - gap: 16px; - margin-bottom: 32px; -`; - -const Landing: React.FC = () => { - const navigate = useNavigate(); - const [creationMethod, setCreationMethod] = useState<CreationMethod>(CreationMethod.Scratch); - - const [disputeID, setDisputeID] = useState<string>(); - const [debouncedDisputeID, setDebouncedDisputeID] = useState<string>(); - const { disputeData, setDisputeData } = useNewDisputeContext(); - useDebounce(() => setDebouncedDisputeID(disputeID), 500, [disputeID]); - - const { data: dispute, isLoading: isLoadingDispute } = useDisputeDetailsQuery(debouncedDisputeID); - const { - data: populatedDispute, - isError: isErrorPopulatedDisputeQuery, - isLoading: isPopulatingDispute, - } = usePopulatedDisputeData(debouncedDisputeID, dispute?.dispute?.arbitrated.id as `0x${string}`); - - // we want the genesis round's court and numberOfJurors - const { - data: roundData, - isError: isErrorRoundQuery, - isLoading: isLoadingRound, - } = useRoundDetailsQuery(debouncedDisputeID, 0); - - const gatedTokenInfo = useMemo(() => { - const extradata = roundData?.round?.dispute.disputeKitDispute?.[0].extraData; - - if (isUndefined(extradata)) return; - return extraDataToTokenInfo(extradata); - }, [roundData]); - - const isLoading = useMemo( - () => isLoadingDispute || isPopulatingDispute || isLoadingRound, - [isLoadingDispute, isPopulatingDispute, isLoadingRound] - ); - - const isInvalidDispute = useMemo(() => { - if (isUndefined(debouncedDisputeID) || isLoading) return false; - if (dispute?.dispute === null) return true; - if (!isUndefined(populatedDispute)) { - return isErrorRoundQuery || isErrorPopulatedDisputeQuery || Object.keys(populatedDispute).length === 0; - } - return false; - }, [debouncedDisputeID, isLoading, populatedDispute, isErrorRoundQuery, isErrorPopulatedDisputeQuery, dispute]); - - useEffect(() => { - if (isUndefined(populatedDispute) || isUndefined(roundData) || isInvalidDispute) return; - - const answers = populatedDispute.answers.reduce<Answer[]>((acc, val) => { - const id = parseInt(val.id, 16); - // don't duplicate RFA option - if (id === 0) return acc; - acc.push({ ...val, id: id.toString() }); - return acc; - }, []); - - let aliasesArray: AliasArray[] | undefined; - if (!isUndefined(populatedDispute.aliases)) { - aliasesArray = Object.entries(populatedDispute.aliases).map(([key, value], index) => ({ - name: key, - address: value, - id: (index + 1).toString(), - })); - } - - setDisputeData({ - ...disputeData, - title: populatedDispute.title, - description: populatedDispute.description, - category: populatedDispute.category, - policyURI: populatedDispute.policyURI, - question: populatedDispute.question, - courtId: roundData.round?.court.id, - numberOfJurors: roundData.round?.nbVotes, - disputeKitId: parseInt(roundData.round?.disputeKit.id ?? "1", 10), - answers, - aliasesArray: aliasesArray ?? disputeData.aliasesArray, - disputeKitData: gatedTokenInfo ? { ...gatedTokenInfo, type: "gated" } : undefined, - }); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [populatedDispute, roundData, isInvalidDispute]); - - return ( - <Container> - <Header text="Create a case" /> - <CardContainer> - <CreationCard - cardMethod={CreationMethod.Scratch} - selectedMethod={creationMethod} - {...{ disputeID, setDisputeID, setCreationMethod, isInvalidDispute }} - /> - <CreationCard - cardMethod={CreationMethod.Duplicate} - selectedMethod={creationMethod} - {...{ disputeID, setDisputeID, setCreationMethod, isInvalidDispute }} - /> - </CardContainer> - - <Button - text="Next" - isLoading={isLoading} - disabled={ - isLoading || - isInvalidDispute || - (creationMethod === CreationMethod.Duplicate && isUndefined(debouncedDisputeID)) - } - onClick={() => navigate("/resolver/title")} - /> - </Container> - ); -}; - -export default Landing; diff --git a/web/src/pages/Resolver/NavigationButtons/NextButton.tsx b/web/src/pages/Resolver/NavigationButtons/NextButton.tsx deleted file mode 100644 index e54082f44..000000000 --- a/web/src/pages/Resolver/NavigationButtons/NextButton.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from "react"; - -import { useLocation, useNavigate } from "react-router-dom"; - -import { Button } from "@kleros/ui-components-library"; - -import { IGatedDisputeData, useNewDisputeContext } from "context/NewDisputeContext"; - -import { isEmpty } from "src/utils"; - -interface INextButton { - nextRoute: string; -} - -const NextButton: React.FC<INextButton> = ({ nextRoute }) => { - const navigate = useNavigate(); - const { disputeData, isPolicyUploading } = useNewDisputeContext(); - const location = useLocation(); - - // Check gated dispute kit validation status - const isGatedTokenValid = React.useMemo(() => { - if (!disputeData.disputeKitData || disputeData.disputeKitData.type !== "gated") return true; - - const gatedData = disputeData.disputeKitData as IGatedDisputeData; - if (!gatedData?.tokenGate?.trim()) return false; // No token address provided, so invalid - - // If token address is provided, it must be validated as valid ERC20 - return gatedData.isTokenGateValid === true; - }, [disputeData.disputeKitData]); - - //checks if each answer is filled in - const areVotingOptionsFilled = - disputeData.question !== "" && - disputeData.answers.every((answer) => answer.title !== "" && answer.description !== ""); - - //check if any filled address or ens is invalid - const areAliasesValidOrEmpty = disputeData?.aliasesArray?.every((alias) => { - const isAliasEmpty = isEmpty(alias.address) && isEmpty(alias.name); - return isAliasEmpty || alias.isValid; - }); - const isButtonDisabled = - (location.pathname.includes("/resolver/title") && !disputeData.title) || - (location.pathname.includes("/resolver/description") && !disputeData.description) || - (location.pathname.includes("/resolver/court") && - (!disputeData.courtId || !isGatedTokenValid || !disputeData.disputeKitId)) || - (location.pathname.includes("/resolver/jurors") && !disputeData.arbitrationCost) || - (location.pathname.includes("/resolver/voting-options") && !areVotingOptionsFilled) || - (location.pathname.includes("/resolver/notable-persons") && !areAliasesValidOrEmpty) || - (location.pathname.includes("/resolver/policy") && (isPolicyUploading || !disputeData.policyURI)); - - return <Button disabled={isButtonDisabled} onClick={() => navigate(nextRoute)} text="Next" />; -}; - -export default NextButton; diff --git a/web/src/pages/Resolver/NavigationButtons/PreviousButton.tsx b/web/src/pages/Resolver/NavigationButtons/PreviousButton.tsx deleted file mode 100644 index 06b49a839..000000000 --- a/web/src/pages/Resolver/NavigationButtons/PreviousButton.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { useNavigate } from "react-router-dom"; - -import { Button } from "@kleros/ui-components-library"; -import { isEmpty } from "src/utils"; - -const StyledButton = styled(Button)<{ prevRoute: string }>` - display: ${({ prevRoute }) => (isEmpty(prevRoute) ? "none" : "flex")}; -`; - -interface IReturnButton { - prevRoute: string; -} - -const ReturnButton: React.FC<IReturnButton> = ({ prevRoute }) => { - const navigate = useNavigate(); - - return ( - <StyledButton - prevRoute={prevRoute} - onClick={() => navigate(prevRoute)} - text="Return" - variant="secondary" - ></StyledButton> - ); -}; - -export default ReturnButton; diff --git a/web/src/pages/Resolver/NavigationButtons/SubmitBatchDisputesButton.tsx b/web/src/pages/Resolver/NavigationButtons/SubmitBatchDisputesButton.tsx deleted file mode 100644 index 9c2e39620..000000000 --- a/web/src/pages/Resolver/NavigationButtons/SubmitBatchDisputesButton.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import React, { useMemo } from "react"; -import styled from "styled-components"; - -import { useNavigate } from "react-router-dom"; -import { useAccount, useBalance, usePublicClient } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { MIN_DISPUTE_BATCH_SIZE, useNewDisputeContext } from "context/NewDisputeContext"; -import { disputeResolverAbi, disputeResolverAddress } from "hooks/contracts/generated"; -import useTransactionBatcher from "hooks/useTransactionBatcher"; -import { isUndefined } from "utils/index"; -import { parseWagmiError } from "utils/parseWagmiError"; -import { prepareArbitratorExtradata } from "utils/prepareArbitratorExtradata"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import { EnsureChain } from "components/EnsureChain"; -import { ErrorButtonMessage } from "components/ErrorButtonMessage"; -import ClosedCircleIcon from "components/StyledIcons/ClosedCircleIcon"; - -import { isTemplateValid } from "./SubmitDisputeButton"; - -const StyledButton = styled(Button)``; - -const SubmitBatchDisputesButton: React.FC = () => { - const publicClient = usePublicClient(); - const navigate = useNavigate(); - const { disputeTemplate, disputeData, resetDisputeData, isSubmittingCase, setIsSubmittingCase, batchSize } = - useNewDisputeContext(); - - const { address, chainId } = useAccount(); - const { data: userBalance, isLoading: isBalanceLoading } = useBalance({ address }); - - const insufficientBalance = useMemo(() => { - const arbitrationCost = disputeData.arbitrationCost ? BigInt(disputeData.arbitrationCost) : BigInt(0); - return userBalance && userBalance.value < arbitrationCost * BigInt(batchSize ?? MIN_DISPUTE_BATCH_SIZE); - }, [userBalance, disputeData, batchSize]); - - const { - executeBatch, - batchConfig, - isLoading: isLoadingConfig, - error, - isError, - } = useTransactionBatcher( - Array.from({ length: batchSize }, () => ({ - abi: disputeResolverAbi, - address: disputeResolverAddress[chainId ?? DEFAULT_CHAIN], - functionName: "createDisputeForTemplate", - args: [ - prepareArbitratorExtradata( - disputeData.courtId ?? "1", - disputeData.numberOfJurors ?? 3, - disputeData.disputeKitId ?? 1, - disputeData.disputeKitData - ), - JSON.stringify(disputeTemplate), - "", - BigInt(disputeTemplate.answers.length), - ], - value: BigInt(disputeData.arbitrationCost ?? 0), - })), - { - enabled: !insufficientBalance && isTemplateValid(disputeTemplate), - } - ); - - const isButtonDisabled = useMemo( - () => - isError || - isSubmittingCase || - !isTemplateValid(disputeTemplate) || - isBalanceLoading || - insufficientBalance || - isLoadingConfig, - [isSubmittingCase, insufficientBalance, isBalanceLoading, disputeTemplate, isLoadingConfig, isError] - ); - - const errorMsg = useMemo(() => { - if (insufficientBalance) return "Insufficient balance"; - else if (error) { - return parseWagmiError(error); - } - return null; - }, [error, insufficientBalance]); - - return ( - <EnsureChain> - <div> - <StyledButton - text="Create cases" - disabled={isButtonDisabled} - isLoading={(isSubmittingCase || isBalanceLoading || isLoadingConfig) && !insufficientBalance} - onClick={() => { - if (batchConfig && publicClient) { - setIsSubmittingCase(true); - wrapWithToast(async () => await executeBatch(batchConfig), publicClient) - .then((res) => { - if (res.status && !isUndefined(res.result)) { - resetDisputeData(); - navigate("/cases/display/1/desc/all"); - } - }) - .finally(() => { - setIsSubmittingCase(false); - }); - } - }} - /> - {errorMsg && ( - <ErrorButtonMessage> - <ClosedCircleIcon /> {errorMsg} - </ErrorButtonMessage> - )} - </div> - </EnsureChain> - ); -}; - -export default SubmitBatchDisputesButton; diff --git a/web/src/pages/Resolver/NavigationButtons/SubmitDisputeButton.tsx b/web/src/pages/Resolver/NavigationButtons/SubmitDisputeButton.tsx deleted file mode 100644 index 9c2af2041..000000000 --- a/web/src/pages/Resolver/NavigationButtons/SubmitDisputeButton.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import React, { useMemo, useState } from "react"; -import styled from "styled-components"; - -import { Log, decodeEventLog, parseAbi } from "viem"; -import { useAccount, useBalance, usePublicClient } from "wagmi"; - -import { Button } from "@kleros/ui-components-library"; - -import DisputeIcon from "svgs/icons/dispute.svg"; - -import { IDisputeTemplate, useNewDisputeContext } from "context/NewDisputeContext"; -import { - useWriteDisputeResolverCreateDisputeForTemplate, - useSimulateDisputeResolverCreateDisputeForTemplate, -} from "hooks/contracts/generated"; -import { isUndefined } from "utils/index"; -import { parseWagmiError } from "utils/parseWagmiError"; -import { prepareArbitratorExtradata } from "utils/prepareArbitratorExtradata"; -import { wrapWithToast } from "utils/wrapWithToast"; - -import { EnsureChain } from "components/EnsureChain"; -import { ErrorButtonMessage } from "components/ErrorButtonMessage"; -import Popup, { PopupType } from "components/Popup"; -import ClosedCircleIcon from "components/StyledIcons/ClosedCircleIcon"; - -const StyledButton = styled(Button)``; - -const SubmitDisputeButton: React.FC = () => { - const publicClient = usePublicClient(); - const [isPopupOpen, setIsPopupOpen] = useState(false); - const [courtId, setCourtId] = useState(""); - const [disputeId, setDisputeId] = useState<number>(); - - const { disputeTemplate, disputeData, resetDisputeData, isSubmittingCase, setIsSubmittingCase } = - useNewDisputeContext(); - - const { address } = useAccount(); - const { data: userBalance, isLoading: isBalanceLoading } = useBalance({ address }); - - const insufficientBalance = useMemo(() => { - const arbitrationCost = disputeData.arbitrationCost ? BigInt(disputeData.arbitrationCost) : BigInt(0); - return userBalance && userBalance.value < arbitrationCost; - }, [userBalance, disputeData]); - - const { - data: submitCaseConfig, - error, - isLoading: isLoadingConfig, - isError, - } = useSimulateDisputeResolverCreateDisputeForTemplate({ - query: { - enabled: !insufficientBalance && isTemplateValid(disputeTemplate), - }, - args: [ - prepareArbitratorExtradata( - disputeData.courtId ?? "1", - disputeData.numberOfJurors ?? "", - disputeData.disputeKitId ?? 1, - disputeData.disputeKitData - ), - JSON.stringify(disputeTemplate), - "", - BigInt(disputeTemplate.answers.length), - ], - value: BigInt(disputeData.arbitrationCost ?? 0), - }); - - const { writeContractAsync: submitCase } = useWriteDisputeResolverCreateDisputeForTemplate(); - - const isButtonDisabled = useMemo( - () => - isError || - isSubmittingCase || - !isTemplateValid(disputeTemplate) || - isBalanceLoading || - insufficientBalance || - isLoadingConfig, - [isSubmittingCase, insufficientBalance, isBalanceLoading, disputeTemplate, isLoadingConfig, isError] - ); - - const errorMsg = useMemo(() => { - if (insufficientBalance) return "Insufficient balance"; - else if (error) { - return parseWagmiError(error); - } - return null; - }, [error, insufficientBalance]); - - return ( - <> - {" "} - <EnsureChain> - <div> - <StyledButton - text="Submit the case" - disabled={isButtonDisabled} - isLoading={(isSubmittingCase || isBalanceLoading || isLoadingConfig) && !insufficientBalance} - onClick={() => { - if (submitCaseConfig && publicClient) { - setIsSubmittingCase(true); - wrapWithToast(async () => await submitCase(submitCaseConfig.request), publicClient) - .then((res) => { - if (res.status && !isUndefined(res.result)) { - const id = retrieveDisputeId(res.result.logs[1]); - setDisputeId(Number(id)); - setCourtId(disputeData.courtId ?? "1"); - setIsPopupOpen(true); - resetDisputeData(); - } - }) - .finally(() => { - setIsSubmittingCase(false); - }); - } - }} - /> - {errorMsg && ( - <ErrorButtonMessage> - <ClosedCircleIcon /> {errorMsg} - </ErrorButtonMessage> - )} - </div> - </EnsureChain> - {isPopupOpen && disputeId && ( - <Popup - title={`Case #${disputeId} submitted`} - icon={DisputeIcon} - popupType={PopupType.DISPUTE_CREATED} - setIsOpen={setIsPopupOpen} - disputeId={disputeId} - courtId={courtId} - /> - )} - </> - ); -}; - -export const isTemplateValid = (disputeTemplate: IDisputeTemplate) => { - const areVotingOptionsFilled = - disputeTemplate.question !== "" && - disputeTemplate.answers.every((answer) => answer.title !== "" && answer.description !== ""); - - return (disputeTemplate.title && - disputeTemplate.description && - disputeTemplate.policyURI && - areVotingOptionsFilled) as boolean; -}; - -const retrieveDisputeId = (eventLog: Log) => - decodeEventLog({ - abi: parseAbi(["event DisputeCreation(uint256 indexed, address indexed)"]), - data: eventLog.data, - topics: eventLog.topics, - }).args[0]; - -export default SubmitDisputeButton; diff --git a/web/src/pages/Resolver/NavigationButtons/index.tsx b/web/src/pages/Resolver/NavigationButtons/index.tsx deleted file mode 100644 index e7b1a7a3f..000000000 --- a/web/src/pages/Resolver/NavigationButtons/index.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { useNewDisputeContext } from "context/NewDisputeContext"; - -import { isUndefined } from "src/utils"; - -import { responsiveSize } from "styles/responsiveSize"; - -import NextButton from "./NextButton"; -import PreviousButton from "./PreviousButton"; -import SubmitBatchDisputesButton from "./SubmitBatchDisputesButton"; -import SubmitDisputeButton from "./SubmitDisputeButton"; - -const Container = styled.div` - display: flex; - gap: 24px; - margin-top: ${responsiveSize(32, 24)}; - flex-wrap: wrap; - justify-content: center; -`; - -interface NavigationButtonsProps { - prevRoute: string; - nextRoute?: string; -} - -const NavigationButtons: React.FC<NavigationButtonsProps> = ({ prevRoute, nextRoute }) => { - const { isBatchCreation } = useNewDisputeContext(); - - const SubmitButton = isBatchCreation ? SubmitBatchDisputesButton : SubmitDisputeButton; - return ( - <Container> - <PreviousButton prevRoute={prevRoute} /> - {isUndefined(nextRoute) ? <SubmitButton /> : <NextButton nextRoute={nextRoute} />} - </Container> - ); -}; - -export default NavigationButtons; diff --git a/web/src/pages/Resolver/Parameters/Category.tsx b/web/src/pages/Resolver/Parameters/Category.tsx deleted file mode 100644 index fcb177bab..000000000 --- a/web/src/pages/Resolver/Parameters/Category.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import React, { useRef, useEffect } from "react"; -import styled, { css } from "styled-components"; - -import { Field } from "@kleros/ui-components-library"; - -import { useNewDisputeContext } from "context/NewDisputeContext"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import Header from "pages/Resolver/Header"; - -import NavigationButtons from "../NavigationButtons"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - - ${landscapeStyle( - () => css` - padding-bottom: 191px; - ` - )} -`; - -const StyledField = styled(Field)` - width: 84vw; - margin-bottom: 74px; - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - margin-bottom: 64px; - ` - )} - > small { - margin-top: 16px; - } -`; - -const Category: React.FC = () => { - const { disputeData, setDisputeData } = useNewDisputeContext(); - const containerRef = useRef<HTMLDivElement>(null); - - const handleWrite = (event: React.ChangeEvent<HTMLInputElement>) => { - setDisputeData({ ...disputeData, category: event.target.value }); - }; - - useEffect(() => { - if (containerRef.current) { - const inputElement = containerRef.current.querySelector("input"); - if (inputElement) { - inputElement.focus(); - } - } - }, []); - - return ( - <Container ref={containerRef}> - <Header text="Choose a category" /> - <StyledField - dir="auto" - onChange={handleWrite} - value={disputeData.category} - placeholder="eg. Freelance" - variant="info" - message="Type the category tag that you think best represents the case. eg. General, Curation, Freelancing, Listing, Insurance, Translation, Oracle, Identity, E-Commerce, etc." - /> - <NavigationButtons prevRoute="/resolver/court" nextRoute="/resolver/jurors" /> - </Container> - ); -}; - -export default Category; diff --git a/web/src/pages/Resolver/Parameters/Court.tsx b/web/src/pages/Resolver/Parameters/Court.tsx deleted file mode 100644 index df4767f9d..000000000 --- a/web/src/pages/Resolver/Parameters/Court.tsx +++ /dev/null @@ -1,356 +0,0 @@ -import React, { useMemo, useEffect } from "react"; -import styled, { css } from "styled-components"; - -import { AlertMessage, Checkbox, DropdownCascader, DropdownSelect, Field } from "@kleros/ui-components-library"; - -import { DisputeKits } from "consts/index"; -import { IGatedDisputeData, useNewDisputeContext } from "context/NewDisputeContext"; -import { rootCourtToItems, useCourtTree } from "hooks/queries/useCourtTree"; -import { useDisputeKitAddressesAll } from "hooks/useDisputeKitAddresses"; -import { useERC20ERC721Validation, useERC1155Validation } from "hooks/useTokenAddressValidation"; -import { isUndefined } from "utils/index"; - -import { useSupportedDisputeKits } from "queries/useSupportedDisputeKits"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { StyledSkeleton } from "components/StyledSkeleton"; -import Header from "pages/Resolver/Header"; - -import NavigationButtons from "../NavigationButtons"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - - ${landscapeStyle( - () => css` - padding-bottom: 115px; - ` - )} -`; - -const StyledDropdownCascader = styled(DropdownCascader)` - width: 84vw; - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} - > button { - width: 100%; - } -`; - -const AlertMessageContainer = styled.div` - width: 84vw; - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} - margin-top: 24px; -`; - -const StyledDropdownSelect = styled(DropdownSelect)` - width: 84vw; - margin-top: 24px; - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} -`; - -const StyledField = styled(Field)` - width: 84vw; - margin-top: 24px; - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} - > small { - margin-top: 16px; - } -`; - -const StyledCheckbox = styled(Checkbox)` - width: 84vw; - margin-top: 24px; - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} -`; - -const ValidationContainer = styled.div` - width: 84vw; - display: flex; - align-items: left; - gap: 8px; - margin-top: 8px; - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} -`; - -const ValidationIcon = styled.div<{ $isValid?: boolean | null; $isValidating?: boolean }>` - width: 16px; - height: 16px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - font-size: 12px; - - ${({ $isValidating, $isValid }) => { - if ($isValidating) { - return css` - border: 2px solid ${({ theme }) => theme.stroke}; - border-top-color: ${({ theme }) => theme.primaryBlue}; - animation: spin 1s linear infinite; - - @keyframes spin { - to { - transform: rotate(360deg); - } - } - `; - } - - if ($isValid === true) { - return css` - background-color: ${({ theme }) => theme.success}; - color: white; - &::after { - content: "✓"; - } - `; - } - - if ($isValid === false) { - return css` - background-color: ${({ theme }) => theme.error}; - color: white; - &::after { - content: "✗"; - } - `; - } - - return css` - display: none; - `; - }} -`; - -const ValidationMessage = styled.small<{ $isError?: boolean }>` - color: ${({ $isError, theme }) => ($isError ? theme.error : theme.success)}; - font-size: 14px; - font-style: italic; - font-weight: normal; -`; - -const StyledFieldWithValidation = styled(StyledField)<{ $isValid?: boolean | null }>` - > input { - border-color: ${({ $isValid, theme }) => { - if ($isValid === true) return theme.success; - if ($isValid === false) return theme.error; - return "inherit"; - }}; - } -`; - -const Court: React.FC = () => { - const { disputeData, setDisputeData } = useNewDisputeContext(); - const { data: courtTree } = useCourtTree(); - const { data: supportedDisputeKits } = useSupportedDisputeKits(disputeData.courtId); - const items = useMemo(() => !isUndefined(courtTree?.court) && [rootCourtToItems(courtTree.court)], [courtTree]); - const { availableDisputeKits } = useDisputeKitAddressesAll(); - - const disputeKitOptions = useMemo(() => { - return ( - supportedDisputeKits?.court?.supportedDisputeKits.map((dk) => { - const text = availableDisputeKits[dk.address.toLowerCase()] ?? ""; - return { - text, - value: Number(dk.id), - gated: text === DisputeKits.Gated || text === DisputeKits.GatedShutter, - }; - }) || [] - ); - }, [supportedDisputeKits, availableDisputeKits]); - - const isGatedDisputeKit = useMemo(() => { - const options = disputeKitOptions.find((dk) => String(dk.value) === String(disputeData.disputeKitId)); - return options?.gated ?? false; - }, [disputeKitOptions, disputeData.disputeKitId]); - - // Token validation for token gate address (conditional based on ERC1155 checkbox) - const tokenGateAddress = (disputeData.disputeKitData as IGatedDisputeData)?.tokenGate ?? ""; - const isERC1155 = (disputeData.disputeKitData as IGatedDisputeData)?.isERC1155 ?? false; - const validationEnabled = isGatedDisputeKit && !!tokenGateAddress.trim(); - - const { - isValidating: isValidatingERC20, - isValid: isValidERC20, - error: validationErrorERC20, - } = useERC20ERC721Validation({ - address: tokenGateAddress, - enabled: validationEnabled && !isERC1155, - }); - - const { - isValidating: isValidatingERC1155, - isValid: isValidERC1155, - error: validationErrorERC1155, - } = useERC1155Validation({ - address: tokenGateAddress, - enabled: validationEnabled && isERC1155, - }); - - // Combine validation results based on token type - const isValidating = isERC1155 ? isValidatingERC1155 : isValidatingERC20; - const isValidToken = isERC1155 ? isValidERC1155 : isValidERC20; - const validationError = isERC1155 ? validationErrorERC1155 : validationErrorERC20; - - // Update validation state in dispute context - useEffect(() => { - if (isGatedDisputeKit && disputeData.disputeKitData) { - const currentData = disputeData.disputeKitData as IGatedDisputeData; - if (currentData.isTokenGateValid !== isValidToken) { - setDisputeData({ - ...disputeData, - disputeKitData: { ...currentData, isTokenGateValid: isValidToken }, - }); - } - } - }, [isValidToken, isGatedDisputeKit, disputeData.disputeKitData, setDisputeData]); - - const handleCourtChange = (courtId: string) => { - if (disputeData.courtId !== courtId) { - setDisputeData({ ...disputeData, courtId, disputeKitId: undefined }); - } - }; - - const handleDisputeKitChange = (newValue: string | number) => { - const options = disputeKitOptions.find((dk) => String(dk.value) === String(newValue)); - const gatedDisputeKitData: IGatedDisputeData | undefined = - (options?.gated ?? false) - ? { - type: "gated", - tokenGate: "", - isERC1155: false, - tokenId: "0", - } - : undefined; - setDisputeData({ ...disputeData, disputeKitId: Number(newValue), disputeKitData: gatedDisputeKitData }); - }; - - const handleTokenAddressChange = (event: React.ChangeEvent<HTMLInputElement>) => { - const currentData = disputeData.disputeKitData as IGatedDisputeData; - setDisputeData({ - ...disputeData, - disputeKitData: { - ...currentData, - tokenGate: event.target.value, - isTokenGateValid: null, // Reset validation state when address changes - }, - }); - }; - - const handleERC1155TokenChange = (event: React.ChangeEvent<HTMLInputElement>) => { - const currentData = disputeData.disputeKitData as IGatedDisputeData; - setDisputeData({ - ...disputeData, - disputeKitData: { - ...currentData, - isERC1155: event.target.checked, - isTokenGateValid: null, // Reset validation state when token type changes - }, - }); - }; - - const handleTokenIdChange = (event: React.ChangeEvent<HTMLInputElement>) => { - const currentData = disputeData.disputeKitData as IGatedDisputeData; - setDisputeData({ - ...disputeData, - disputeKitData: { ...currentData, tokenId: event.target.value }, - }); - }; - - return ( - <Container> - <Header text="Select a court to arbitrate the case" /> - {items ? ( - <StyledDropdownCascader - items={items} - onSelect={(path: string | number) => typeof path === "string" && handleCourtChange(path.split("/").pop()!)} - placeholder="Select Court" - value={`/courts/${disputeData.courtId}`} - /> - ) : ( - <StyledSkeleton width={240} height={42} /> - )} - {disputeData?.courtId && disputeKitOptions.length > 0 && ( - <StyledDropdownSelect - items={disputeKitOptions} - placeholder={{ text: "Select Dispute Kit" }} - defaultValue={disputeData.disputeKitId} - callback={handleDisputeKitChange} - /> - )} - {isGatedDisputeKit && ( - <> - <StyledFieldWithValidation - dir="auto" - onChange={handleTokenAddressChange} - value={(disputeData.disputeKitData as IGatedDisputeData)?.tokenGate ?? ""} - placeholder="Eg. 0xda10009cbd5d07dd0cecc66161fc93d7c9000da1" - $isValid={isValidToken} - /> - {tokenGateAddress.trim() !== "" && ( - <ValidationContainer> - <ValidationIcon $isValidating={isValidating} $isValid={isValidToken} /> - <ValidationMessage $isError={Boolean(validationError)}> - {isValidating && `Validating ${isERC1155 ? "ERC-1155" : "ERC-20 or ERC-721"} token...`} - {validationError && validationError} - {isValidToken === true && `Valid ${isERC1155 ? "ERC-1155" : "ERC-20 or ERC-721"} token`} - </ValidationMessage> - </ValidationContainer> - )} - <StyledCheckbox - onChange={handleERC1155TokenChange} - checked={(disputeData.disputeKitData as IGatedDisputeData)?.isERC1155 ?? false} - label="ERC-1155 token" - small={true} - /> - {(disputeData.disputeKitData as IGatedDisputeData)?.isERC1155 && ( - <StyledField - dir="auto" - onChange={handleTokenIdChange} - value={(disputeData.disputeKitData as IGatedDisputeData)?.tokenId ?? "0"} - placeholder="Eg. 1" - /> - )} - </> - )} - <AlertMessageContainer> - <AlertMessage - title="Check the courts available beforehand" - msg="Kleros has different courts arbitrating disputes in several areas. Each court has its own purpose and policy. Take some time to choose the best court for your case. Learn more about the available courts here." - variant="info" - /> - </AlertMessageContainer> - <NavigationButtons prevRoute="/resolver/description" nextRoute="/resolver/category" /> - </Container> - ); -}; - -export default Court; diff --git a/web/src/pages/Resolver/Parameters/Jurors.tsx b/web/src/pages/Resolver/Parameters/Jurors.tsx deleted file mode 100644 index a1f2aec33..000000000 --- a/web/src/pages/Resolver/Parameters/Jurors.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import React, { useEffect } from "react"; -import styled, { css } from "styled-components"; - -import { DisplaySmall, Field } from "@kleros/ui-components-library"; - -import ETH from "svgs/icons/eth.svg"; - -import { DEFAULT_CHAIN } from "consts/chains"; -import { REFETCH_INTERVAL } from "consts/index"; -import { useNewDisputeContext } from "context/NewDisputeContext"; -import { useReadKlerosCoreArbitrationCost } from "hooks/contracts/generated"; -import { formatETH } from "utils/format"; -import { isUndefined } from "utils/index"; -import { prepareArbitratorExtradata } from "utils/prepareArbitratorExtradata"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import Header from "pages/Resolver/Header"; - -import NavigationButtons from "../NavigationButtons"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - - ${landscapeStyle( - () => css` - padding-bottom: 79px; - ` - )} -`; - -const StyledField = styled(Field)` - width: 290px; - margin-bottom: ${responsiveSize(20, 48)}; -`; - -const StyledDisplay = styled(DisplaySmall)` - width: 290px; - margin-bottom: ${responsiveSize(20, 48)}; - - h2::after { - content: "ETH"; - margin-left: 4px; - } - - path { - fill: ${({ theme }) => theme.secondaryPurple}; - } -`; - -const Jurors: React.FC = () => { - const { disputeData, setDisputeData } = useNewDisputeContext(); - const { data } = useReadKlerosCoreArbitrationCost({ - query: { - enabled: !isUndefined(disputeData.numberOfJurors) && !Number.isNaN(disputeData.numberOfJurors), - refetchInterval: REFETCH_INTERVAL, - }, - args: [prepareArbitratorExtradata(disputeData.courtId ?? "", disputeData.numberOfJurors ?? "0")], - chainId: DEFAULT_CHAIN, - }); - - const arbitrationFee = formatETH(data ?? BigInt(0), 18); - - useEffect(() => setDisputeData({ ...disputeData, arbitrationCost: data?.toString() }), [data]); - - const handleJurorsWrite = (event: React.ChangeEvent<HTMLInputElement>) => { - setDisputeData({ ...disputeData, numberOfJurors: parseInt(event.target.value.replace(/\D/g, ""), 10) }); - }; - - const noOfVotes = Number.isNaN(disputeData.numberOfJurors) ? "" : disputeData.numberOfJurors; - - return ( - <Container> - <Header text="Select the number of jurors" /> - <StyledField placeholder="Select the number of jurors" value={noOfVotes} onChange={handleJurorsWrite} /> - <StyledDisplay text={arbitrationFee} Icon={ETH} label="Arbitration Cost" /> - <NavigationButtons prevRoute="/resolver/category" nextRoute="/resolver/voting-options" /> - </Container> - ); -}; -export default Jurors; diff --git a/web/src/pages/Resolver/Parameters/NotablePersons/PersonFields.tsx b/web/src/pages/Resolver/Parameters/NotablePersons/PersonFields.tsx deleted file mode 100644 index 5fb6d14ff..000000000 --- a/web/src/pages/Resolver/Parameters/NotablePersons/PersonFields.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import React, { useEffect, useRef } from "react"; -import styled, { css } from "styled-components"; - -import { usePublicClient } from "wagmi"; - -import { AliasArray, useNewDisputeContext } from "context/NewDisputeContext"; -import { isUndefined } from "utils/index"; -import { validateAddress } from "utils/validateAddressOrEns"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import LabeledInput from "components/LabeledInput"; - -const Container = styled.div` - display: flex; - flex-direction: column; - gap: 48px; - width: 84vw; - - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} -`; - -const AliasContainer = styled.div` - display: flex; - flex-direction: column; - gap: 30px; - width: 100%; - ${landscapeStyle( - () => css` - display: grid; - grid-template-columns: 190px auto; - ` - )} -`; - -const PersonFields: React.FC = () => { - const { disputeData, setDisputeData } = useNewDisputeContext(); - const validationTimerRef = useRef<NodeJS.Timeout | null>(null); - const publicClient = usePublicClient({ chainId: 1 }); - - const debounceValidateAddress = (address: string, key: number) => { - if (isUndefined(publicClient)) return; - // Clear the existing timer - if (validationTimerRef.current) { - clearTimeout(validationTimerRef.current); - } - - // Set a new timer for validation after 500 milliseconds - validationTimerRef.current = setTimeout(async () => { - const isValid = await validateAddress(address, publicClient); - const updatedAliases = disputeData.aliasesArray; - if (isUndefined(updatedAliases) || isUndefined(updatedAliases[key])) return; - updatedAliases[key].isValid = isValid; - - setDisputeData({ ...disputeData, aliasesArray: updatedAliases }); - }, 500); - }; - - // in case of duplicate creation flow, aliasesArray will already be populated. - // validating addresses in case it is - useEffect(() => { - if (disputeData.aliasesArray && publicClient) { - disputeData.aliasesArray.map(async (alias, key) => { - const isValid = await validateAddress(alias.address, publicClient); - const updatedAliases = disputeData.aliasesArray; - if (isUndefined(updatedAliases) || isUndefined(updatedAliases[key])) return; - updatedAliases[key].isValid = isValid; - - setDisputeData({ ...disputeData, aliasesArray: updatedAliases }); - }); - } - }, []); - - const handleAliasesWrite = (event: React.ChangeEvent<HTMLInputElement>) => { - const key = parseInt(event.target.id.replace(/\D/g, ""), 10) - 1; - const aliases = disputeData.aliasesArray; - if (isUndefined(aliases)) return; - - aliases[key] = { ...aliases[key], [event.target.name]: event.target.value }; - setDisputeData({ ...disputeData, aliasesArray: aliases }); - - //since resolving ens is async, we update asynchronously too with debounce - if (event.target.name === "address") debounceValidateAddress(event.target.value, key); - }; - - const showError = (alias: AliasArray) => { - return alias.address !== "" && !alias.isValid; - }; - - return ( - <Container> - {disputeData.aliasesArray?.map((alias, index) => ( - <AliasContainer key={alias?.id}> - <LabeledInput - name="name" - label={`Person ${index + 1}`} - placeholder="eg. Alice (Developer)" - value={alias.name} - onChange={handleAliasesWrite} - /> - <LabeledInput - name="address" - label={`Person ${index + 1} Address`} - variant={showError(alias) ? "error" : ""} - message={showError(alias) ? "Invalid Address or ENS" : ""} - placeholder="eg. Alice.eth" - value={alias.address} - onChange={handleAliasesWrite} - /> - </AliasContainer> - ))} - </Container> - ); -}; -export default PersonFields; diff --git a/web/src/pages/Resolver/Parameters/NotablePersons/index.tsx b/web/src/pages/Resolver/Parameters/NotablePersons/index.tsx deleted file mode 100644 index 5ee69ae1f..000000000 --- a/web/src/pages/Resolver/Parameters/NotablePersons/index.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { useNewDisputeContext } from "context/NewDisputeContext"; -import { isUndefined } from "utils/index"; - -import PlusMinusField from "components/PlusMinusField"; -import Header from "pages/Resolver/Header"; - -import NavigationButtons from "../../NavigationButtons"; - -import PersonFields from "./PersonFields"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; -`; - -const StyledPlusMinusField = styled(PlusMinusField)` - align-self: start; -`; - -const NotablePersons: React.FC = () => { - const { disputeData, setDisputeData } = useNewDisputeContext(); - - //value here is the total number of fields- - const updateNumberOfAliases = (value: number) => { - const defaultAlias = { name: "", address: "", id: value.toString() }; - const aliases = disputeData.aliasesArray; - - if (isUndefined(aliases)) { - return setDisputeData({ ...disputeData, aliasesArray: [defaultAlias] }); - } - if (value < aliases?.length) return setDisputeData({ ...disputeData, aliasesArray: aliases.splice(0, value) }); - if (value > aliases?.length) return setDisputeData({ ...disputeData, aliasesArray: [...aliases, defaultAlias] }); - }; - - return ( - <Container> - <Header text="Notable Persons" /> - <PersonFields /> - <StyledPlusMinusField - currentValue={disputeData.aliasesArray?.length ?? 2} - updateValue={updateNumberOfAliases} - minValue={1} - /> - <NavigationButtons prevRoute="/resolver/voting-options" nextRoute="/resolver/policy" /> - </Container> - ); -}; -export default NotablePersons; diff --git a/web/src/pages/Resolver/Parameters/VotingOptions/OptionsFields.tsx b/web/src/pages/Resolver/Parameters/VotingOptions/OptionsFields.tsx deleted file mode 100644 index cd7eabf9f..000000000 --- a/web/src/pages/Resolver/Parameters/VotingOptions/OptionsFields.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { Answer, useNewDisputeContext } from "context/NewDisputeContext"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import LabeledInput from "components/LabeledInput"; -import PlusMinusField from "components/PlusMinusField"; - -const OptionsContainer = styled.div` - display: flex; - flex-direction: column; - gap: 48px; - width: 84vw; - - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} -`; - -const InputContainer = styled.div` - display: flex; - flex-direction: column; - gap: 24px; - width: 100%; - ${landscapeStyle( - () => css` - display: grid; - grid-template-columns: 160px auto; - ` - )} -`; -const StyledPlusMinusField = styled(PlusMinusField)` - align-self: start; - margin: 32px 0px 48px; -`; - -const OptionsFields: React.FC = () => { - const { disputeData, setDisputeData } = useNewDisputeContext(); - - const updateOptions = (value: number) => { - const defaultAnswer: Answer = { title: "", id: value.toString(), description: "" }; - const answers = disputeData.answers; - - if (value < answers?.length) return setDisputeData({ ...disputeData, answers: answers.splice(0, value) }); - if (value > answers?.length) return setDisputeData({ ...disputeData, answers: [...answers, defaultAnswer] }); - }; - - const handleOptionWrite = (event: React.ChangeEvent<HTMLInputElement>, key: number) => { - const answers = disputeData.answers; - answers[key] = { ...answers[key], [event.target.name]: event.target.value }; - setDisputeData({ ...disputeData, answers }); - }; - return ( - <> - <OptionsContainer> - {disputeData.answers.map((answer, index) => ( - <InputContainer key={answer.id}> - <LabeledInput - name="title" - label={`Voting Option ${index + 1}`} - placeholder="eg. Pay 150 DAI" - value={answer.title ?? ""} - onChange={(event) => handleOptionWrite(event, index)} - /> - <LabeledInput - name="description" - label="Option Description" - placeholder={`Description for Option ${index + 1}`} - value={answer.description ?? ""} - onChange={(event) => handleOptionWrite(event, index)} - /> - </InputContainer> - ))} - </OptionsContainer> - <StyledPlusMinusField currentValue={disputeData.answers?.length ?? 2} updateValue={updateOptions} minValue={2} /> - </> - ); -}; - -export default OptionsFields; diff --git a/web/src/pages/Resolver/Parameters/VotingOptions/index.tsx b/web/src/pages/Resolver/Parameters/VotingOptions/index.tsx deleted file mode 100644 index 8e5ad4d0b..000000000 --- a/web/src/pages/Resolver/Parameters/VotingOptions/index.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import React, { useRef, useEffect } from "react"; -import styled, { css } from "styled-components"; - -import { AlertMessage } from "@kleros/ui-components-library"; - -import { useNewDisputeContext } from "context/NewDisputeContext"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import LabeledInput from "components/LabeledInput"; -import Header from "pages/Resolver/Header"; - -import NavigationButtons from "../../NavigationButtons"; - -import OptionsFields from "./OptionsFields"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; -`; - -const QuestionField = styled(LabeledInput)` - margin-bottom: 78px; -`; - -const AlertMessageContainer = styled.div` - width: 84vw; - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} - > div { - width: 100%; - } -`; - -const VotingOptions: React.FC = () => { - const { disputeData, setDisputeData } = useNewDisputeContext(); - const containerRef = useRef<HTMLDivElement>(null); - - const handleQuestionWrite = (event: React.ChangeEvent<HTMLInputElement>) => { - setDisputeData({ ...disputeData, question: event.target.value }); - }; - - useEffect(() => { - if (containerRef.current) { - const inputElement = containerRef.current.querySelector("input"); - if (inputElement) { - inputElement.focus(); - } - } - }, []); - - return ( - <Container ref={containerRef}> - <Header text="Voting options" /> - <QuestionField - label="Question" - placeholder="eg. How much should Alice receive?" - message="Type the question jurors will see when voting." - variant="info" - value={disputeData.question} - onChange={handleQuestionWrite} - /> - <OptionsFields /> - <AlertMessageContainer> - <AlertMessage - title="Add the question and options jurors will see when voting" - msg="Make it clear and objective." - variant="info" - /> - </AlertMessageContainer> - <NavigationButtons prevRoute="/resolver/jurors" nextRoute="/resolver/notable-persons" /> - </Container> - ); -}; - -export default VotingOptions; diff --git a/web/src/pages/Resolver/Policy/index.tsx b/web/src/pages/Resolver/Policy/index.tsx deleted file mode 100644 index d491e71e4..000000000 --- a/web/src/pages/Resolver/Policy/index.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { useAtlasProvider, Roles } from "@kleros/kleros-app"; -import { FileUploader } from "@kleros/ui-components-library"; - -import PolicyIcon from "svgs/icons/policy.svg"; - -import { useNewDisputeContext } from "context/NewDisputeContext"; -import useIsDesktop from "hooks/useIsDesktop"; -import { getIpfsUrl } from "utils/getIpfsUrl"; -import { errorToast, infoToast, successToast } from "utils/wrapWithToast"; - -import { getFileUploaderMsg, isUndefined } from "src/utils"; - -import { hoverShortTransitionTiming } from "styles/commonStyles"; -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { InternalLink } from "components/InternalLink"; -import Header from "pages/Resolver/Header"; - -import NavigationButtons from "../NavigationButtons"; - -const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - - ${landscapeStyle( - () => css` - padding-bottom: 82px; - ` - )} -`; - -const StyledLabel = styled.label` - width: 84vw; - margin-bottom: 48px; - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} -`; - -const StyledFileUploader = styled(FileUploader)` - width: 84vw; - margin-bottom: ${responsiveSize(150, 72)}; - - ${landscapeStyle( - () => css` - width: ${responsiveSize(442, 700, 900)}; - ` - )} - small { - white-space: pre-line; - text-align: start; - } -`; - -const StyledPolicyIcon = styled(PolicyIcon)` - width: 16px; - fill: ${({ theme }) => theme.primaryBlue}; -`; - -const StyledInternalLink = styled(InternalLink)` - ${hoverShortTransitionTiming} - display: flex; - gap: 4px; - align-self: flex-start; - margin-bottom: 32px; - margin-top: 32px; - &:hover { - svg { - fill: ${({ theme }) => theme.secondaryBlue}; - } - } -`; - -const Policy: React.FC = () => { - const { disputeData, setDisputeData, setIsPolicyUploading } = useNewDisputeContext(); - const { uploadFile, roleRestrictions } = useAtlasProvider(); - const isDesktop = useIsDesktop(); - const handleFileUpload = (file: File) => { - setIsPolicyUploading(true); - infoToast("Uploading Policy to IPFS"); - - uploadFile(file, Roles.Policy) - .then(async (cid) => { - if (!cid) return; - successToast("Uploaded successfully!"); - setDisputeData({ ...disputeData, policyURI: cid }); - }) - .catch((err) => { - console.log(err); - errorToast(`Upload failed: ${err?.message}`); - }) - .finally(() => setIsPolicyUploading(false)); - }; - - return ( - <Container> - <Header text="Submit the Policy File" /> - <StyledLabel> - Fundamental to any case, the Policy provides jurors with a framework to vote fairly. It can be a set of - criteria, a contract stating the rights and duties of the parties, or any set of pre-defined rules that are - relevant to jurors' decision-making. - </StyledLabel> - - <StyledFileUploader - callback={handleFileUpload} - variant={isDesktop ? "info" : undefined} - msg={`You can attach additional information here. Important: the above description must reference the relevant parts of the file content.\n${getFileUploaderMsg(Roles.Policy, roleRestrictions)}`} - /> - {!isUndefined(disputeData.policyURI) ? ( - <StyledInternalLink to={`/attachment/?title=${"Policy File"}&url=${getIpfsUrl(disputeData.policyURI)}`}> - <StyledPolicyIcon /> - Inspect the uploaded policy - </StyledInternalLink> - ) : null} - <NavigationButtons prevRoute="/resolver/notable-persons" nextRoute="/resolver/preview" /> - </Container> - ); -}; -export default Policy; diff --git a/web/src/pages/Resolver/Preview/BatchCreationCard.tsx b/web/src/pages/Resolver/Preview/BatchCreationCard.tsx deleted file mode 100644 index 1e187331e..000000000 --- a/web/src/pages/Resolver/Preview/BatchCreationCard.tsx +++ /dev/null @@ -1,185 +0,0 @@ -import React, { useState } from "react"; -import styled, { css } from "styled-components"; - -import { useDebounce } from "react-use"; - -import { Card, Switch } from "@kleros/ui-components-library"; - -import { CoinIds } from "consts/coingecko"; -import { useNewDisputeContext } from "context/NewDisputeContext"; -import { useCoinPrice } from "hooks/useCoinPrice"; -import { formatETH, formatUnitsWei, formatUSD } from "utils/format"; - -import { isUndefined } from "src/utils"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import { Divider } from "components/Divider"; -import PlusMinusField from "components/PlusMinusField"; -import WithHelpTooltip from "components/WithHelpTooltip"; - -const Container = styled(Card)` - width: 100%; - height: fit-content; -`; - -const TopContent = styled.div` - width: 100%; - min-height: 64px; - display: flex; - align-items: center; - flex-wrap: wrap; - gap: 16px; - padding: 16px; - - span::before { - background-color: ${({ theme }) => theme.whiteBackground} !important; - } - ${landscapeStyle( - () => css` - padding: 0px 32px; - ` - )} -`; - -const BottomContent = styled.div` - width: 100%; - min-height: 64px; - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: start; - gap: 16px; - padding: 16px; - - ${landscapeStyle( - () => css` - justify-content: space-between; - padding: 16px 32px; - ` - )} -`; - -const NumberDisplayContainer = styled.div` - display: flex; - align-items: center; - flex-wrap: wrap; - gap: 16px; - ${landscapeStyle( - () => css` - gap: 32px; - ` - )} -`; - -const NumberDisplay = styled.div` - min-width: 64px; - min-height: 64px; - background-color: ${({ theme }) => theme.lightBackground}; - border: 1px solid ${({ theme }) => theme.stroke}; - border-radius: 3px; - font-size: 32px; - color: ${({ theme }) => theme.primaryBlue}; - text-align: center; - align-content: center; -`; - -const Label = styled.p` - padding: 0; - margin: 0; - font-size: 16px; - color: ${({ theme }) => theme.secondaryText}; -`; - -const Value = styled(Label)` - font-weight: 600; - color: ${({ theme }) => theme.primaryText}; -`; - -const StyledPlusMinusField = styled(PlusMinusField)` - margin: 0; - path { - fill: ${({ theme }) => theme.whiteBackground}; - } -`; - -const StyledP = styled.p` - padding: 0; - margin: 0; - font-size: 16px; - color: ${({ theme }) => theme.primaryText}; -`; - -const InfosContainer = styled.div` - display: flex; - align-items: center; - gap: 16px; - flex-wrap: wrap; -`; - -const Info = styled.div` - display: flex; - gap: 8px; -`; - -const BatchCreationCard: React.FC = () => { - const { disputeData, isBatchCreation, setIsBatchCreation, batchSize, setBatchSize } = useNewDisputeContext(); - const [localBatchSize, setLocalBatchSize] = useState(batchSize); - useDebounce(() => setBatchSize(localBatchSize), 500, [localBatchSize]); - - const { prices: pricesData } = useCoinPrice([CoinIds.ETH]); - - const coinPrice = !isUndefined(pricesData) ? pricesData[CoinIds.ETH]?.price : undefined; - - return ( - <Container> - <TopContent> - <Switch checked={isBatchCreation} onChange={() => setIsBatchCreation(!isBatchCreation)} /> - <WithHelpTooltip tooltipMsg="Batch Cases: You can create multiple copies of the case. "> - <StyledP>Create multiple cases at once</StyledP> - </WithHelpTooltip> - </TopContent> - {isBatchCreation ? ( - <> - <Divider /> - <BottomContent> - <NumberDisplayContainer> - <NumberDisplay>{localBatchSize}</NumberDisplay> - <StyledPlusMinusField - minValue={2} - currentValue={localBatchSize} - updateValue={(val) => setLocalBatchSize(val)} - /> - <Label>(Number of cases to be created)</Label> - </NumberDisplayContainer> - <InfosContainer> - <Info> - <Label>Jurors per case:</Label> - <Value>{disputeData.numberOfJurors}</Value> - </Info> - <Info> - <Label>Total:</Label> - <Value>{disputeData.numberOfJurors * localBatchSize}</Value> - </Info> - <Info> - <Label>Total cost:</Label> - <Value>{formatETH(BigInt(disputeData.arbitrationCost ?? 0) * BigInt(localBatchSize))} ETH </Value> - {!isUndefined(coinPrice) ? ( - <Label> - ~ - {formatUSD( - Number(formatUnitsWei(BigInt(disputeData.arbitrationCost ?? 0) * BigInt(localBatchSize))) * - coinPrice - )} - </Label> - ) : null} - </Info> - </InfosContainer> - </BottomContent> - </> - ) : null} - </Container> - ); -}; - -export default BatchCreationCard; diff --git a/web/src/pages/Resolver/Preview/index.tsx b/web/src/pages/Resolver/Preview/index.tsx deleted file mode 100644 index d089f3a7c..000000000 --- a/web/src/pages/Resolver/Preview/index.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { Card } from "@kleros/ui-components-library"; - -import { useNewDisputeContext } from "context/NewDisputeContext"; - -import { useCourtPolicy } from "queries/useCourtPolicy"; - -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { DisputeContext } from "components/DisputePreview/DisputeContext"; -import { Policies } from "components/DisputePreview/Policies"; -import DisputeInfo from "components/DisputeView/DisputeInfo"; -import { Divider } from "components/Divider"; - -import NavigationButtons from "../NavigationButtons"; - -import BatchCreationCard from "./BatchCreationCard"; - -const Container = styled.div` - width: 100%; - padding: 0px ${responsiveSize(10, 130)}; - display: flex; - flex-direction: column; - align-items: center; - gap: 16px; -`; - -const StyledCard = styled(Card)` - width: 100%; - height: auto; - min-height: 100px; - position: relative; -`; - -const PreviewContainer = styled.div` - width: 100%; - height: auto; - display: flex; - flex-direction: column; - gap: ${responsiveSize(16, 32)}; - padding: ${responsiveSize(16, 32)}; -`; - -const Header = styled.h2` - margin-bottom: 32px; - width: 84vw; - text-align: center; - color: ${({ theme }) => theme.secondaryPurple}; - ${landscapeStyle( - () => css` - width: auto; - ` - )} -`; - -const Overlay = styled.div` - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - z-index: 2; -`; - -const Preview: React.FC = () => { - const { disputeData, disputeTemplate } = useNewDisputeContext(); - const { data: courtPolicy } = useCourtPolicy(disputeData.courtId); - const courtName = courtPolicy?.name; - - return ( - <Container> - <Header>Preview</Header> - <StyledCard> - <Overlay /> - <PreviewContainer> - <DisputeContext disputeDetails={disputeTemplate} /> - <Divider /> - - <DisputeInfo - isOverview={true} - overrideIsList={true} - courtId={disputeData.courtId} - court={courtName} - round={1} - {...{ category: disputeData.category }} - /> - </PreviewContainer> - <Policies disputePolicyURI={disputeTemplate.policyURI} courtId={disputeData.courtId} /> - </StyledCard> - <BatchCreationCard /> - <NavigationButtons prevRoute="/resolver/policy" /> - </Container> - ); -}; - -export default Preview; diff --git a/web/src/pages/Resolver/Timeline.tsx b/web/src/pages/Resolver/Timeline.tsx deleted file mode 100644 index 93bd1309b..000000000 --- a/web/src/pages/Resolver/Timeline.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { useLocation } from "react-router-dom"; - -import { Steps } from "@kleros/ui-components-library"; - -const StyledSteps = styled(Steps)` - height: 360px; -`; - -const items = [ - { title: "Briefing", subitems: ["Title", "Description"] }, - { title: "Parameters", subitems: ["Court", "Category", "Jurors", "Voting Options", "Notable Persons"] }, - { title: "Policy" }, - { title: "Preview" }, -]; - -const Timeline: React.FC = () => { - const location = useLocation(); - - const routeToIndexMap = { - "/resolver/title": 0, - "/resolver/description": 0, - "/resolver/court": 1, - "/resolver/category": 1, - "/resolver/jurors": 1, - "/resolver/voting-options": 1, - "/resolver/notable-persons": 1, - "/resolver/policy": 2, - "/resolver/preview": 3, - }; - - const currentItemIndex = Object.entries(routeToIndexMap).reduce( - (acc, [route, index]) => (location.pathname.includes(route) ? index : acc), - 0 - ); - - return <StyledSteps {...{ items, currentItemIndex }} />; -}; - -export default Timeline; diff --git a/web/src/pages/Resolver/index.tsx b/web/src/pages/Resolver/index.tsx deleted file mode 100644 index 812f1e241..000000000 --- a/web/src/pages/Resolver/index.tsx +++ /dev/null @@ -1,155 +0,0 @@ -import React from "react"; -import styled, { css } from "styled-components"; - -import { Navigate, Route, Routes, useLocation } from "react-router-dom"; -import { useToggle } from "react-use"; -import { useAccount } from "wagmi"; - -import { useAtlasProvider } from "@kleros/kleros-app"; - -import { MAX_WIDTH_LANDSCAPE, landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import ConnectWallet from "components/ConnectWallet"; -import EnsureAuth from "components/EnsureAuth"; -import HeroImage from "components/HeroImage"; -import HowItWorks from "components/HowItWorks"; -import Resolver from "components/Popup/MiniGuides/DisputeResolver"; -import ScrollTop from "components/ScrollTop"; - -import Description from "./Briefing/Description"; -import Title from "./Briefing/Title"; -import Landing from "./Landing"; -import Category from "./Parameters/Category"; -import Court from "./Parameters/Court"; -import Jurors from "./Parameters/Jurors"; -import NotablePersons from "./Parameters/NotablePersons"; -import VotingOptions from "./Parameters/VotingOptions"; -import Policy from "./Policy"; -import Preview from "./Preview"; -import Timeline from "./Timeline"; - -const Wrapper = styled.div` - width: 100%; -`; - -const Container = styled.div` - display: flex; - flex-direction: column; - gap: 32px; - width: 100%; - background-color: ${({ theme }) => theme.lightBackground}; - padding: ${responsiveSize(24, 32)}; - padding-top: ${responsiveSize(24, 28)}; - padding-bottom: ${responsiveSize(76, 96)}; - max-width: ${MAX_WIDTH_LANDSCAPE}; - margin: 0 auto; -`; - -const ConnectWalletContainer = styled.div` - display: flex; - flex-direction: column; - align-items: center; - text-align: center; - color: ${({ theme }) => theme.primaryText}; -`; - -const StyledEnsureAuth = styled(EnsureAuth)` - align-self: center; -`; - -const HowItWorksAndTimeline = styled.div` - display: none; - - ${landscapeStyle( - () => css` - display: flex; - flex-direction: column; - position: absolute; - left: 2%; - gap: 40px; - ` - )} -`; - -const MiddleContentContainer = styled.div` - display: flex; - justify-content: center; - position: relative; -`; - -const Heading = styled.h1` - margin: 0; - font-size: 24px; - font-weight: 600; - color: ${({ theme }) => theme.primaryText}; - text-align: center; -`; - -const Paragraph = styled.p` - padding: 0; - margin: 0; - font-size: 16px; - text-align: center; - color: ${({ theme }) => theme.secondaryText}; -`; - -const DisputeResolver: React.FC = () => { - const location = useLocation(); - const [isDisputeResolverMiniGuideOpen, toggleDisputeResolverMiniGuide] = useToggle(false); - const { isVerified } = useAtlasProvider(); - const { isConnected } = useAccount(); - const isPreviewPage = location.pathname.includes("/preview"); - - return ( - <Wrapper> - <HeroImage /> - <Container> - {!isConnected || !isVerified ? ( - <> - <Heading>Justice as a Service</Heading> - <Paragraph>You send your disputes. Kleros sends back decisions.</Paragraph> - </> - ) : null} - {isConnected ? ( - <StyledEnsureAuth buttonText="Sign in to start"> - <MiddleContentContainer> - {isConnected && !isPreviewPage ? ( - <HowItWorksAndTimeline> - <HowItWorks - isMiniGuideOpen={isDisputeResolverMiniGuideOpen} - toggleMiniGuide={toggleDisputeResolverMiniGuide} - MiniGuideComponent={Resolver} - /> - <Timeline /> - </HowItWorksAndTimeline> - ) : null} - <Routes> - <Route index element={<Navigate to="create" replace />} /> - <Route path="/create/*" element={<Landing />} /> - <Route path="/title/*" element={<Title />} /> - <Route path="/description/*" element={<Description />} /> - <Route path="/court/*" element={<Court />} /> - <Route path="/category/*" element={<Category />} /> - <Route path="/jurors/*" element={<Jurors />} /> - <Route path="/voting-options/*" element={<VotingOptions />} /> - <Route path="/notable-persons/*" element={<NotablePersons />} /> - <Route path="/policy/*" element={<Policy />} /> - <Route path="/preview/*" element={<Preview />} /> - </Routes> - </MiddleContentContainer> - </StyledEnsureAuth> - ) : ( - <ConnectWalletContainer> - To create a new dispute, connect first - <hr /> - <ConnectWallet /> - </ConnectWalletContainer> - )} - </Container> - <ScrollTop /> - </Wrapper> - ); -}; - -export default DisputeResolver; diff --git a/web/src/pages/Settings/EmailConfirmation/index.tsx b/web/src/pages/Settings/EmailConfirmation/index.tsx deleted file mode 100644 index 5b1f9281d..000000000 --- a/web/src/pages/Settings/EmailConfirmation/index.tsx +++ /dev/null @@ -1,190 +0,0 @@ -import React, { useEffect, useMemo, useState } from "react"; -import styled, { css } from "styled-components"; - -import { Link, useSearchParams } from "react-router-dom"; -import { isAddress } from "viem"; - -import { Button } from "@kleros/ui-components-library"; - -import CheckIcon from "svgs/icons/check-circle-outline.svg"; -import WarningIcon from "svgs/icons/warning-outline.svg"; -import InvalidIcon from "svgs/label-icons/minus-circle.svg"; - -import { useAtlasProvider } from "@kleros/kleros-app"; - -import { landscapeStyle } from "styles/landscapeStyle"; - -import Loader from "components/Loader"; -import ScrollTop from "components/ScrollTop"; - -const Container = styled.div` - display: flex; - width: 100%; - gap: 48px 16px; - flex-direction: column; - justify-content: center; - align-items: center; - margin-top: 80px; - ${landscapeStyle( - () => css` - flex-direction: row; - justify-content: space-between; - ` - )} -`; - -const InfoWrapper = styled.div` - display: flex; - flex-direction: column; - gap: 32px; - align-items: center; - flex: 1; - ${landscapeStyle( - () => css` - align-items: start; - ` - )} -`; - -const textCss = css` - margin: 0; - text-align: center; - white-space: pre-line; - - ${landscapeStyle( - () => css` - text-align: left; - ` - )} -`; - -const Header = styled.h1<{ fontColor: string }>` - ${textCss} - ${({ fontColor }) => css` - color: ${({ theme }) => theme[fontColor]}; - `}; -`; - -const Subtitle = styled.h3` - ${textCss} - max-width: 735px; -`; - -const HeaderIconContainer = styled.div<{ iconColor: string }>` - svg { - width: 64px; - height: 64px; - ${({ iconColor }) => css` - path { - fill: ${({ theme }) => theme[iconColor]}; - } - `} - } -`; - -const IconContainer = styled.div` - svg { - width: 250px; - height: 250px; - path { - fill: ${({ theme }) => theme.whiteBackground}; - } - } -`; - -const messageConfigs = { - invalid: { - headerMsg: "Invalid Link!", - subtitleMsg: "Oops, seems like you followed an invalid link.", - buttonMsg: "Contact Support", - buttonTo: "https://t.me/kleros", - Icon: InvalidIcon, - color: "primaryText", - }, - error: { - headerMsg: "Something went wrong", - subtitleMsg: "Oops, seems like something went wrong in our systems", - buttonMsg: "Contact Support", - buttonTo: "https://t.me/kleros", - Icon: WarningIcon, - color: "error", - }, - confirmed: { - headerMsg: "Congratulations! \nYour email has been verified!", - subtitleMsg: - "We'll remind you when your actions are required on Court, and send you notifications on key moments to help you achieve the best of Kleros.", - buttonMsg: "Let's start!", - buttonTo: "/", - Icon: CheckIcon, - color: "success", - }, - expired: { - headerMsg: "Verification link expired...", - subtitleMsg: - "Oops, the email verification link has expired. No worries! Go to settings and click on Resend it to receive another verification email.", - buttonMsg: "Open Settings", - buttonTo: "/#notifications", - Icon: WarningIcon, - color: "warning", - }, -}; - -const EmailConfirmation: React.FC = () => { - const { confirmEmail } = useAtlasProvider(); - - const [isConfirming, setIsConfirming] = useState(false); - const [isConfirmed, setIsConfirmed] = useState(false); - const [isTokenInvalid, setIsTokenInvalid] = useState(false); - const [isError, setIsError] = useState(false); - const [searchParams, _] = useSearchParams(); - const address = searchParams.get("address"); - const token = searchParams.get("token"); - - useEffect(() => { - if (address && isAddress(address) && token) { - setIsConfirming(true); - - confirmEmail({ address, token }) - .then((res) => { - setIsConfirmed(res.isConfirmed); - setIsTokenInvalid(res.isTokenInvalid); - setIsError(res.isError); - }) - .finally(() => setIsConfirming(false)); - } - }, [address, token, confirmEmail]); - - const { headerMsg, subtitleMsg, buttonMsg, buttonTo, Icon, color } = useMemo(() => { - if (!address || !isAddress(address) || !token || isTokenInvalid) return messageConfigs.invalid; - if (isError) return messageConfigs.error; - if (isConfirmed) return messageConfigs.confirmed; - return messageConfigs.expired; - }, [address, token, isError, isConfirmed, isTokenInvalid]); - - return ( - <Container> - {isConfirming ? ( - <Loader width={"148px"} height={"148px"} /> - ) : ( - <> - <InfoWrapper> - <HeaderIconContainer iconColor={color}> - <Icon /> - </HeaderIconContainer> - <Header fontColor={color}>{headerMsg}</Header> - <Subtitle>{subtitleMsg}</Subtitle> - <Link to={buttonTo}> - <Button text={buttonMsg} /> - </Link> - </InfoWrapper> - <IconContainer> - <Icon /> - </IconContainer> - </> - )} - <ScrollTop /> - </Container> - ); -}; - -export default EmailConfirmation; diff --git a/web/src/pages/Settings/index.tsx b/web/src/pages/Settings/index.tsx deleted file mode 100644 index e85ec6f68..000000000 --- a/web/src/pages/Settings/index.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { MAX_WIDTH_LANDSCAPE } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - -import { Route, Routes } from "react-router-dom"; - -import EmailConfirmation from "./EmailConfirmation"; - -const Container = styled.div` - width: 100%; - background-color: ${({ theme }) => theme.lightBackground}; - padding: ${responsiveSize(32, 80)} ${responsiveSize(24, 136)} ${responsiveSize(76, 96)}; - max-width: ${MAX_WIDTH_LANDSCAPE}; - margin: 0 auto; -`; - -const Settings: React.FC = () => { - return ( - <Container> - <Routes> - <Route path="email-confirmation" element={<EmailConfirmation />} /> - </Routes> - </Container> - ); -}; - -export default Settings; diff --git a/web/src/public/llms.txt b/web/src/public/llms.txt deleted file mode 100644 index 00c5825f0..000000000 --- a/web/src/public/llms.txt +++ /dev/null @@ -1,9 +0,0 @@ -# v2.kleros.builders llms.txt - -> Facilitates decentralized arbitration by allowing users to create, manage, and resolve dispute cases through crowdsourced juror consensus, rewarding jurors with cryptocurrency for coherent votes on disputes on the blockchain-based Kleros platform. - -- [Kleros Dispute Dashboard](https://v2.kleros.builders): Dashboard for managing and viewing decentralized dispute cases, jurors, and court statistics on Kleros platform. -- [Kleros Dispute Cases](https://v2.kleros.builders/#/cases/display/1/desc/all): Provide a platform for viewing and managing decentralized dispute resolution cases. -- [Kleros Decentralized Courts](https://v2.kleros.builders/#/courts): Facilitate decentralized dispute resolution by allowing users to stake tokens, participate as jurors, and view court cases. -- [Kleros Jurors Leaderboard](https://v2.kleros.builders/#/jurors/1/desc/all): Display ranking and statistics of jurors based on coherent voting and rewards in the Kleros decentralized arbitration system. -- [Get PNK Token](https://v2.kleros.builders/#/get-pnk): Facilitates cross-chain swaps of PNK tokens typically between the Ethereum and Arbitrum networks. diff --git a/web/src/styles/commonStyles.ts b/web/src/styles/commonStyles.ts deleted file mode 100644 index f6ef00ec1..000000000 --- a/web/src/styles/commonStyles.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { css } from "styled-components"; - -export const hoverShortTransitionTiming = css` - transition: 0.1s; -`; - -export const hoverLongTransitionTiming = css` - transition: 0.2s; -`; diff --git a/web/src/styles/customScrollbar.ts b/web/src/styles/customScrollbar.ts deleted file mode 100644 index eef4e583d..000000000 --- a/web/src/styles/customScrollbar.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { css } from "styled-components"; - -export const customScrollbar = css` - ::-webkit-scrollbar { - width: 6px; - height: 6px; - } - ::-webkit-scrollbar-track { - background: transparent; - } - ::-webkit-scrollbar-thumb { - background-color: ${({ theme }) => theme.violetPurple}; - border-radius: 10px; - transition: opacity 0.15s, background-color 0.15s, border-color 0.15s, width 0.15s; - } - ::-webkit-scrollbar-thumb:hover { - background-color: ${({ theme }) => theme.secondaryPurple}; - } - ::-webkit-scrollbar-thumb:active { - background-color: ${({ theme }) => theme.lavenderPurple}; - } - - // firefox - scrollbar-width: thin; - scrollbar-color: ${({ theme }) => theme.violetPurple} transparent; -`; diff --git a/web/src/styles/global-style.ts b/web/src/styles/global-style.ts deleted file mode 100644 index 1fb902bec..000000000 --- a/web/src/styles/global-style.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { createGlobalStyle } from "styled-components"; - -export const GlobalStyle = createGlobalStyle` - :root { - --toastify-color-info: ${({ theme }) => theme.primaryBlue}; - --toastify-color-success: ${({ theme }) => theme.success}; - --toastify-color-warning: ${({ theme }) => theme.warning}; - --toastify-color-error: ${({ theme }) => theme.error}; - } - - .react-loading-skeleton { - z-index: 0; - --base-color: ${({ theme }) => theme.skeletonBackground}; - --highlight-color: ${({ theme }) => theme.skeletonHighlight}; - } - - body { - font-family: "Open Sans", sans-serif; - margin: 0px; - background-color: ${({ theme }) => theme.lightBlue}; - } - - html { - box-sizing: border-box; - } - - *, *:before, *:after { - box-sizing: inherit; - } - - *:focus { - outline: none; - } - - .ReactModal__Overlay { - background-color: #1b003fcc !important; - } - - h1 { - margin: 0 0 16px 0; - font-weight: 600; - font-size: 24px; - line-height: 32px; - color: ${({ theme }) => theme.primaryText}; - } - - h2 { - margin: 0 0 16px 0; - font-weight: 400; - font-size: 24px; - line-height: 32px; - color: ${({ theme }) => theme.primaryText}; - } - - h3 { - margin: 0 0 16px 0; - font-weight: 600; - font-size: 16px; - line-height: 24px; - color: ${({ theme }) => theme.primaryText}; - } - - p { - font-weight: 400; - font-size: 16px; - line-height: 24px; - color: ${({ theme }) => theme.primaryText}; - } - - textarea { - font-family: "Open Sans"; - font-size: 14px; - } - - small { - font-weight: 600; - font-size: 14px; - line-height: 18px; - color: ${({ theme }) => theme.primaryText}; - } - - label { - font-weight: 400; - font-size: 14px; - line-height: 18px; - color: ${({ theme }) => theme.secondaryText}; - } - - a { - font-weight: 400; - font-size: 14px; - text-decoration: none; - color: ${({ theme }) => theme.primaryBlue}; - transition: color 0.1s; - } - - hr { - opacity: 1; - border: 1px solid ${({ theme }) => theme.stroke}; - } - - svg, img { - display: inline-block; - vertical-align: middle; - visibility: visible; - } - - ul, ol { - li { - font-weight: 400; - font-size: 16px; - line-height: 24px; - color: ${({ theme }) => theme.primaryText}; - } - } - - .os-theme-dark { - --os-handle-bg: ${({ theme }) => theme.violetPurple}; - --os-handle-bg-hover: ${({ theme }) => theme.secondaryPurple}; - --os-handle-bg-active: ${({ theme }) => theme.lavenderPurple}; - } - - // @cyntler/react-doc-viewer injects a canvas to load pdf, this is alters the height of body tag, so set to hidden - .hiddenCanvasElement{ - display: none; - } - - [class*="Toastify__toast-container"] { - top: unset; - padding-top: 20px !important; - } -`; diff --git a/web/src/styles/landscapeStyle.ts b/web/src/styles/landscapeStyle.ts deleted file mode 100644 index ac781c110..000000000 --- a/web/src/styles/landscapeStyle.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { css, DefaultTheme, FlattenInterpolation, ThemeProps } from "styled-components"; - -export const MAX_WIDTH_LANDSCAPE = "1400px"; - -export const BREAKPOINT_LANDSCAPE = 900; - -export const landscapeStyle = (styleFn: () => FlattenInterpolation<ThemeProps<DefaultTheme>>) => css` - @media (min-width: ${BREAKPOINT_LANDSCAPE}px) { - ${() => styleFn()} - } -`; diff --git a/web/src/styles/portraitStyle.ts b/web/src/styles/portraitStyle.ts deleted file mode 100644 index 00fd3c062..000000000 --- a/web/src/styles/portraitStyle.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { css, DefaultTheme, FlattenInterpolation, ThemeProps } from "styled-components"; - -export const BREAKPOINT_PORTRAIT = 600; - -export const portraitStyle = (styleFn: () => FlattenInterpolation<ThemeProps<DefaultTheme>>) => css` - @media (min-width: ${BREAKPOINT_PORTRAIT}px) { - ${() => styleFn()} - } -`; diff --git a/web/src/styles/responsiveSize.ts b/web/src/styles/responsiveSize.ts deleted file mode 100644 index 0af044d8c..000000000 --- a/web/src/styles/responsiveSize.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @description this func applies repsonsiveness to a css property, the value will range from minSize to maxSize - * @param minSize the minimum value of the property - * @param maxSize max value of the property - * @param minScreen the min screen width at which the property will be at minSize - * @param maxScreen the max screen width at which the property will be at maxSize - * - */ -export const responsiveSize = (minSize: number, maxSize: number, minScreen: number = 375, maxScreen: number = 1250) => - `calc(${minSize}px + (${maxSize} - ${minSize}) * (min(max(100vw, ${minScreen}px), ${maxScreen}px) - ${minScreen}px) / (${ - maxScreen - minScreen - }))`; diff --git a/web/src/styles/themes.ts b/web/src/styles/themes.ts deleted file mode 100644 index b44dd177e..000000000 --- a/web/src/styles/themes.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { lightTheme as componentsLightTheme, darkTheme as componentsDarkTheme } from "@kleros/ui-components-library"; - -export const lightTheme = { - ...componentsLightTheme, - name: "light", - white: "#FFFFFF", - black: "#000000", - primaryPurple: "#4D00B4", - secondaryPurple: "#9013FE", - darkPurple: "#220050", - mediumPurple: "#F8F1FF", - lightPurple: "#FBF9FE", - violetPurple: "#6A1DCD", - lavenderPurple: "#BB72FF", - primaryBlue: "#009AFF", - secondaryBlue: "#7BCBFF", - mediumBlue: "#F0F9FF", - lightBlue: "#FCFEFF", - primaryText: "#333333", - secondaryText: "#999999", - stroke: "#e5e5e5", - lightGrey: "#F0F0F0", - - whiteBackground: "#FFFFFF", - lightBackground: "#FAFBFC", - - defaultShadow: "#00000002", - hoveredShadow: "#00000002", - whiteLowOpacitySubtle: "#FFFFFF0D", - whiteLowOpacityStrong: "#FFFFFF26", - blackLowOpacity: "#00000080", - - success: "#00C42B", - successLight: "#F0FBF2", - warning: "#FF9900", - warningLight: "#FFF9F0", - error: "#F60C36", - errorLight: "#FEF0F3", - tint: "#D14EFF", - tintMedium: "#FCF4FF", - tintPurple: "#F4F0FA", - - transitionSpeed: "0.25s", - - skeletonBackground: "#EBEBEB", - skeletonHighlight: "#F5F5F5", - - paleCyan: "#ACFFFF", - limeGreen: "#F3FFD9", -}; - -export const darkTheme = { - ...componentsDarkTheme, - name: "dark", - white: "#FFFFFF", - black: "#000000", - primaryPurple: "#7E1BD4", - secondaryPurple: "#B45FFF", - darkPurple: "#220050", - mediumPurple: "#390F6C", - lightPurple: "#FCFBFF", - violetPurple: "#6A1DCD", - lavenderPurple: "#BB72FF", - primaryBlue: "#6CC5FF", - secondaryBlue: "#A5DBFF", - mediumBlue: "#2E206C", - lightBlue: "#2A1260", - primaryText: "#DAF0FF", - secondaryText: "#BECCE5", - stroke: "#392C74", - lightGrey: "#2D1865", - - whiteBackground: "#220050", - lightBackground: "#1B003F", - - defaultShadow: "#00000000", - hoveredShadow: "#42498f80", - whiteLowOpacitySubtle: "#FFFFFF0F", - whiteLowOpacityStrong: "#FFFFFF24", - blackLowOpacity: "#00000080", - - success: "#65DC7F", - successLight: "#32355B", - warning: "#FFC46B", - warningLight: "#451F54", - error: "#FF5A78", - errorLight: "#360652", - tint: "#DDB6FF", - tintMedium: "#401D6C", - tintPurple: "#2F0960", - - transitionSpeed: "0.25s", - - skeletonBackground: "#3A2270", - skeletonHighlight: "#3E307C", - - paleCyan: "#ACFFFF", - limeGreen: "#F3FFD9", -}; diff --git a/web/src/utils/beautifyStatNumber.ts b/web/src/utils/beautifyStatNumber.ts deleted file mode 100644 index 0c2051536..000000000 --- a/web/src/utils/beautifyStatNumber.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { commify } from "./commify"; - -export function beautifyStatNumber(value: number, invertValue: boolean = false): string { - const absValue = Math.abs(value); - - if (absValue >= 1e9) { - return `${commify((value / 1e9).toFixed(2))}B`; - } else if (absValue >= 1e6) { - return `${commify((value / 1e6).toFixed(2))}M`; - } else if (absValue >= 1e3) { - return `${commify((value / 1e3).toFixed(2))}K`; - } else if (absValue > 0 && absValue < 1) { - if (invertValue) { - const inverseValue = 1 / absValue; - return beautifyStatNumber(Number(inverseValue)); - } else { - return value.toFixed(2); - } - } - - return commify(value.toFixed(2)); -} - -export function unbeautifyStatNumber(value: string): number { - const multiplierMap: Record<string, number> = { - B: 1e9, - M: 1e6, - K: 1e3, - }; - - const regex = /^([\d,.]+)([BMK]?)$/; - const match = regex.exec(value); - - if (!match) { - throw new Error("Invalid formatted number string"); - } - - const [, numericPart, unit] = match; - const numericValue = parseFloat(numericPart.replace(/,/g, "")); - - if (unit && multiplierMap[unit]) { - return numericValue * multiplierMap[unit]; - } - - return numericValue; -} diff --git a/web/src/utils/calculateSubtextRender.tsx b/web/src/utils/calculateSubtextRender.tsx deleted file mode 100644 index 33755a379..000000000 --- a/web/src/utils/calculateSubtextRender.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from "react"; - -import { HomePageQuery } from "hooks/useHomePageContext"; -import { isUndefined } from "utils/index"; - -import { CourtDetailsQuery } from "queries/useCourtDetails"; - -import { StyledSkeleton } from "components/StyledSkeleton"; - -export const calculateSubtextRender = ( - countersOrCourtData: CourtDetailsQuery["court"] | HomePageQuery["counters"], - getSubtext: ((data: any, coinPrice?: number) => string) | undefined, - coinPrice?: number -) => { - if (!isUndefined(countersOrCourtData) && !isUndefined(getSubtext)) { - return getSubtext(countersOrCourtData, coinPrice); - } else if (getSubtext === undefined) { - return ""; - } - return <StyledSkeleton />; -}; diff --git a/web/src/utils/commify.ts b/web/src/utils/commify.ts deleted file mode 100644 index 533f5a776..000000000 --- a/web/src/utils/commify.ts +++ /dev/null @@ -1,52 +0,0 @@ -export function commify(value: string | number): string { - const comps = String(value).split("."); - - if (!String(value).match(/^-?\d+(\.\d+)?$/)) { - return "0"; - } - - // Make sure we have at least one whole digit (0 if none) - let whole = comps[0]; - - let negative = ""; - if (whole.substring(0, 1) === "-") { - negative = "-"; - whole = whole.substring(1); - } - - // Make sure we have at least 1 whole digit with no leading zeros - while (whole.substring(0, 1) === "0") { - whole = whole.substring(1); - } - if (whole === "") { - whole = "0"; - } - - let suffix = ""; - if (comps.length === 2) { - suffix = "." + (comps[1] || "0"); - } - while (suffix.length > 2 && suffix[suffix.length - 1] === "0") { - suffix = suffix.substring(0, suffix.length - 1); - } - - const formatted: string[] = []; - while (whole.length) { - if (whole.length <= 3) { - formatted.unshift(whole); - break; - } else { - const index = whole.length - 3; - formatted.unshift(whole.substring(index)); - whole = whole.substring(0, index); - } - } - - if (suffix === ".0") suffix = ""; - - return negative + formatted.join(",") + suffix; -} - -export function uncommify(value: string): string { - return value.replace(/,/g, ""); -} diff --git a/web/src/utils/date.ts b/web/src/utils/date.ts deleted file mode 100644 index 3320083be..000000000 --- a/web/src/utils/date.ts +++ /dev/null @@ -1,74 +0,0 @@ -export function getCurrentTime(): number { - return Math.floor(Date.now() / 1000); -} - -export function getTimeLeft(deadline: number): number { - const currentTime = getCurrentTime(); - return Math.max(deadline - currentTime, 0); -} - -export function secondsToDayHourMinute(seconds: number): string { - const d = Math.floor(seconds / (3600 * 24)); - const h = Math.floor((seconds % (3600 * 24)) / 3600); - const m = Math.floor((seconds % 3600) / 60); - const s = seconds % 60; - return d > 0 ? `${d}d ${h}h ${m}m` : `${h}h ${m}m ${s}s`; -} - -export function getOneYearAgoTimestamp(): number { - const currentTime = new Date().getTime() / 1000; - return currentTime - 31536000; // One year in seconds -} - -export function formatDate(unixTimestamp: number, withTime = false): string { - const date = new Date(unixTimestamp * 1000); - const options: Intl.DateTimeFormatOptions = withTime - ? { - month: "short", - day: "2-digit", - year: "numeric", - hour: "numeric", - minute: "numeric", - timeZone: "GMT", - timeZoneName: "short", - } - : { month: "long", day: "2-digit", year: "numeric" }; - return date.toLocaleDateString("en-US", options); -} - -/** - * Calculates the time left until a specified date and formats it. - * - * @param {string} isoString - An ISO 8601 formatted date string (e.g., "2024-10-29T09:52:08.580Z"). - * @returns {string} A human-readable string indicating the time left until the specified date. - * @example - * console.log(timeLeftUntil("2024-10-29T09:52:08.580Z")); - * // Outputs: "in x secs", "in x mins", "in x hrs", or "after October 29, 2024" - */ -export function timeLeftUntil(isoString: string): string { - const targetDate = new Date(isoString); - const now = new Date(); - const timeDifference = targetDate.getTime() - now.getTime(); - - if (timeDifference <= 0) { - return "The date has already passed."; - } - - const secondsLeft = Math.floor(timeDifference / 1000); - const minutesLeft = Math.floor(secondsLeft / 60); - const hoursLeft = Math.floor(minutesLeft / 60); - const daysLeft = Math.floor(hoursLeft / 24); - - if (secondsLeft < 60) { - return `in ${secondsLeft} sec${secondsLeft > 1 ? "s" : ""}`; - } else if (minutesLeft < 60) { - return `in ${minutesLeft} min${minutesLeft > 1 ? "s" : ""}`; - } else if (hoursLeft < 24) { - return `in ${hoursLeft} hr${hoursLeft > 1 ? "s" : ""}`; - } else if (daysLeft < 2) { - return `in ${daysLeft} day${daysLeft > 1 ? "s" : ""}`; - } else { - const options: Intl.DateTimeFormatOptions = { year: "numeric", month: "long", day: "numeric" }; - return `after ${targetDate.toLocaleDateString("en-US", options)}`; - } -} diff --git a/web/src/utils/debounceErrorToast.ts b/web/src/utils/debounceErrorToast.ts deleted file mode 100644 index 9762c14c2..000000000 --- a/web/src/utils/debounceErrorToast.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { toast } from "react-toastify"; - -import { OPTIONS as toastOptions } from "utils/wrapWithToast"; - -let timeoutId: NodeJS.Timeout; -export const debounceErrorToast = (msg: string) => { - if (timeoutId) clearTimeout(timeoutId); - - timeoutId = setTimeout(() => { - toast.error(msg, toastOptions); - }, 5000); -}; diff --git a/web/src/utils/extradataToTokenInfo.ts b/web/src/utils/extradataToTokenInfo.ts deleted file mode 100644 index f4d3180b0..000000000 --- a/web/src/utils/extradataToTokenInfo.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Address, hexToBytes } from "viem"; - -type GatedTokenInfo = { - tokenGate: Address; - isERC1155: boolean; - tokenId: string; -}; - -/** - * @dev Decodes token information from encoded extra data. - * @param extraData The extraData - * @returns GatedTokenInfo object with tokenGate address, isERC1155 flag, and tokenId. - * `undefined` if it's not a gated disputeKit - */ -export function extraDataToTokenInfo(extraDataHex: `0x${string}`): GatedTokenInfo | undefined { - const extraDataBytes = hexToBytes(extraDataHex); - - if (extraDataBytes.length < 160) { - return; - } - - // Slot 4 (bytes 96–127): packedTokenGateAndFlag - const packedBytes = extraDataBytes.slice(96, 128); - const packed = BigInt("0x" + Buffer.from(packedBytes).toString("hex")); - - // Slot 5 (bytes 128–159): tokenId - const tokenIdBytes = extraDataBytes.slice(128, 160); - const tokenId = BigInt("0x" + Buffer.from(tokenIdBytes).toString("hex")); - - // Extract tokenGate: lower 160 bits - const tokenGateBigInt = packed & ((1n << 160n) - 1n); // mask: 0x00..00ffffffffffffffffffffffffffffffffffffffff - const tokenGate = `0x${tokenGateBigInt.toString(16).padStart(40, "0")}` as Address; - - // Extract flag: bit 160 - const isERC1155 = ((packed >> 160n) & 1n) === 1n; - - return { - tokenGate, - isERC1155, - tokenId: tokenId.toString(), - }; -} diff --git a/web/src/utils/format.ts b/web/src/utils/format.ts deleted file mode 100644 index 9523ab84c..000000000 --- a/web/src/utils/format.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { formatEther, formatUnits } from "viem"; - -import { commify } from "./commify"; - -export const roundNumberDown = (value: number, fractionDigits = 0) => { - const factor = 10 ** fractionDigits; - return Math.floor(value * factor) / factor; -}; - -export const formatUnitsWei = (value: bigint) => formatUnits(value, 18); - -export const formatValue = (value: string, fractionDigits, roundDown) => { - let units = Number(value); - if (roundDown) units = roundNumberDown(units, fractionDigits); - return commify(units.toFixed(fractionDigits)); -}; - -export const formatPNK = (value: bigint, fractionDigits = 0, roundDown = false) => - formatValue(formatUnitsWei(value), fractionDigits, roundDown); - -export const formatETH = (value: bigint, fractionDigits = 4, roundDown = false) => - formatValue(formatEther(value), fractionDigits, roundDown); - -export const formatUSD = (value: number, fractionDigits = 2) => "$" + commify(Number(value).toFixed(fractionDigits)); diff --git a/web/src/utils/getCoherencePercent.tsx b/web/src/utils/getCoherencePercent.tsx deleted file mode 100644 index 1f5b33652..000000000 --- a/web/src/utils/getCoherencePercent.tsx +++ /dev/null @@ -1,4 +0,0 @@ -export const getCoherencePercent = (num: number, den: number): string => { - if (den === 0) return "0%"; - return `${Math.floor((num * 100) / den)}%`; -}; diff --git a/web/src/utils/getDescriptiveCourtName.ts b/web/src/utils/getDescriptiveCourtName.ts deleted file mode 100644 index 6c41c256b..000000000 --- a/web/src/utils/getDescriptiveCourtName.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const getDescriptiveCourtName = (courtName?: string): string => { - if (!courtName) return ""; - const lc = courtName.toLowerCase(); - return lc.endsWith("court") || lc.startsWith("corte") ? courtName : `${courtName} Court`; -}; diff --git a/web/src/utils/getDisputeRequestParamsFromTxn.ts b/web/src/utils/getDisputeRequestParamsFromTxn.ts deleted file mode 100644 index 8e91cf921..000000000 --- a/web/src/utils/getDisputeRequestParamsFromTxn.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { GetTransactionReceiptReturnType, createPublicClient, decodeEventLog, getEventSelector, http } from "viem"; -import * as chains from "viem/chains"; - -import { iArbitrableV2Abi } from "hooks/contracts/generated"; -import { isUndefined } from "utils/index"; - -/** - * Gets the chain object for the given chain id. - * @param chainId - Chain id of the target EVM chain. - * @returns Viem's chain object. - */ -const getChain = (chainId: number) => { - for (const chain of Object.values(chains)) { - if ("id" in chain) { - if (chain.id === chainId) { - return chain; - } - } - } - - throw new Error(`Chain with id ${chainId} not found`); -}; - -// Warning : do not import this in any pages except DisputeTemplatePreview, this has a large bundle size. -export const getDisputeRequestParamsFromTxn = async (hash: `0x${string}`, chainId: number) => { - try { - const publicClient = createPublicClient({ - chain: getChain(chainId), - transport: http(), - }); - - const txn: GetTransactionReceiptReturnType = await publicClient.getTransactionReceipt({ - hash, - }); - - const selector = getEventSelector("DisputeRequest(address,uint256,uint256,uint256,string)"); - const disputeRequestEvent = txn.logs.find((log) => log.topics[0] === selector); - if (isUndefined(disputeRequestEvent)) return undefined; - - const topics = decodeEventLog({ - abi: iArbitrableV2Abi, - eventName: "DisputeRequest", - topics: disputeRequestEvent?.topics, - data: disputeRequestEvent?.data, - }); - - return { - ...topics?.args, - _arbitrable: disputeRequestEvent.address, - }; - } catch (e) { - console.log("Error getting txn :", { e }); - - return undefined; - } -}; diff --git a/web/src/utils/getDrawnJurorsWithCount.ts b/web/src/utils/getDrawnJurorsWithCount.ts deleted file mode 100644 index 408a5c561..000000000 --- a/web/src/utils/getDrawnJurorsWithCount.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { VotingHistoryQuery } from "src/graphql/graphql"; - -type IVotingHistoryRounds = NonNullable<NonNullable<VotingHistoryQuery["dispute"]>["rounds"][number]["drawnJurors"]>; -export type DrawnJuror = IVotingHistoryRounds[number] & { - voteCount: number; - transactionHash?: string; - timestamp?: string; -}; - -export const getDrawnJurorsWithCount = (drawnJurors: IVotingHistoryRounds) => - drawnJurors?.reduce<DrawnJuror[]>((acc, current) => { - const jurorId = current.juror.id; - - const existingJuror = acc.find((item) => item.juror.id === jurorId); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - existingJuror - ? existingJuror.voteCount++ - : acc.push({ - juror: { id: jurorId }, - voteCount: 1, - vote: current.vote, - transactionHash: current.vote?.justification?.transactionHash, - timestamp: current.vote?.justification?.timestamp, - }); - return acc; - }, []); diff --git a/web/src/utils/getGraphqlUrl.ts b/web/src/utils/getGraphqlUrl.ts deleted file mode 100644 index 365704e86..000000000 --- a/web/src/utils/getGraphqlUrl.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { arbitrumSepolia, arbitrum } from "wagmi/chains"; - -import { DEFAULT_CHAIN } from "consts/chains"; - -export const getGraphqlUrl = (isDisputeTemplate = false, chainId: number = DEFAULT_CHAIN) => { - const CHAINID_TO_DISPUTE_TEMPLATE_SUBGRAPH = { - [arbitrumSepolia.id]: - import.meta.env.REACT_APP_DRT_ARBSEPOLIA_SUBGRAPH ?? - "Environment variable REACT_APP_DRT_ARBSEPOLIA_SUBGRAPH not set.", - [arbitrum.id]: - import.meta.env.REACT_APP_DRT_ARBMAINNET_SUBGRAPH ?? - "Environment variable REACT_APP_DRT_ARBMAINNET_SUBGRAPH not set.", - }; - const coreUrl = import.meta.env.REACT_APP_CORE_SUBGRAPH ?? "Environment variables REACT_APP_CORE_SUBGRAPH not set."; - return isDisputeTemplate ? CHAINID_TO_DISPUTE_TEMPLATE_SUBGRAPH[chainId] : coreUrl; -}; diff --git a/web/src/utils/getIpfsUrl.ts b/web/src/utils/getIpfsUrl.ts deleted file mode 100644 index c54a10617..000000000 --- a/web/src/utils/getIpfsUrl.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IPFS_GATEWAY } from "consts/index"; - -export const getIpfsUrl = (url: string) => { - const formatedIPFSPath = getFormattedPath(url); - return `${IPFS_GATEWAY}${formatedIPFSPath}`; -}; - -export const getFormattedPath = (url: string) => { - if (url.startsWith("/ipfs/")) return url; - else if (url.startsWith("ipfs/")) return "/" + url; - else if (url.startsWith("ipfs://")) return url.replace("ipfs://", "/ipfs/"); - return url; -}; diff --git a/web/src/utils/getLocalRounds.ts b/web/src/utils/getLocalRounds.ts deleted file mode 100644 index 1724247a9..000000000 --- a/web/src/utils/getLocalRounds.ts +++ /dev/null @@ -1,12 +0,0 @@ -interface DisputeKitDispute<T> { - localRounds: T[]; -} - -/** - * @param disputeKitDisputes an array of dispute kit disputes with field localRounds - * @returns a flattened array of localRounds - */ -export const getLocalRounds = <T>(disputeKitDisputes: DisputeKitDispute<T>[] | undefined | null): T[] => { - if (!disputeKitDisputes) return []; - return disputeKitDisputes.flatMap(({ localRounds }) => localRounds); -}; diff --git a/web/src/utils/getVoteChoice.ts b/web/src/utils/getVoteChoice.ts deleted file mode 100644 index d2d58d2fb..000000000 --- a/web/src/utils/getVoteChoice.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Answer } from "@kleros/kleros-sdk"; -import { isUndefined } from "."; -import { RefuseToArbitrateAnswer } from "@kleros/kleros-sdk/src/dataMappings/utils/disputeDetailsSchema"; - -export const getVoteChoice = (vote: string, answers: Answer[]) => { - // answer.id is hexadecimal number - const selectedAnswer = answers?.find((answer) => BigInt(answer.id) === BigInt(vote)); - - if (!isUndefined(selectedAnswer)) { - return selectedAnswer.title; - } else { - return BigInt(vote) === BigInt(0) ? RefuseToArbitrateAnswer.title : `Answer 0x${vote}`; - } -}; diff --git a/web/src/utils/index.ts b/web/src/utils/index.ts deleted file mode 100644 index dcb9872f4..000000000 --- a/web/src/utils/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Roles } from "@kleros/kleros-app"; - -import { DEFAULT_CHAIN, getChain } from "consts/chains"; - -export const isUndefined = (maybeObject: any): maybeObject is undefined | null => - typeof maybeObject === "undefined" || maybeObject === null; - -/** - * Checks if a string is empty or contains only whitespace. - */ -export const isEmpty = (str: string): boolean => str.trim() === ""; - -export const getTxnExplorerLink = (hash: string) => - `${getChain(DEFAULT_CHAIN)?.blockExplorers?.default.url}/tx/${hash}`; - -type Role = { - name: string; - restriction: { - maxSize: number; - allowedMimeTypes: string[]; - }; -}; - -export const getFileUploaderMsg = (role: Roles, roleRestrictions?: Role[]) => { - if (!roleRestrictions) return; - const restrictions = roleRestrictions.find((supportedRoles) => Roles[supportedRoles.name] === role); - - if (!restrictions) return; - const typesString = restrictions.restriction.allowedMimeTypes - .map((type) => { - const [prefix, suffix] = type.split("/"); - if (!suffix) return prefix ?? null; - - return suffix === "*" ? prefix : suffix; - }) - .join(", "); - - return `Allowed file types: [${typesString}], Max allowed size: ${(restrictions.restriction.maxSize / (1024 * 1024)).toFixed(2)} MB.`; -}; diff --git a/web/src/utils/isLastRound.ts b/web/src/utils/isLastRound.ts deleted file mode 100644 index f03a6b196..000000000 --- a/web/src/utils/isLastRound.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { formatEther } from "viem"; - -import { isUndefined } from "utils/index"; - -export const isLastRound = (appealCost?: bigint) => { - if (!isUndefined(appealCost) && Number(formatEther(appealCost)) > Number.MAX_SAFE_INTEGER) { - return true; - } - return false; -}; diff --git a/web/src/utils/jurorRewardConfig.ts b/web/src/utils/jurorRewardConfig.ts deleted file mode 100644 index ed176f959..000000000 --- a/web/src/utils/jurorRewardConfig.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { formatUnits, formatEther } from "viem"; - -import { CoinIds } from "consts/coingecko"; -import { isUndefined } from "utils/index"; - -import { UserQuery } from "queries/useUser"; - -export interface IReward { - token: "ETH" | "PNK"; - coinId: number; - getAmount: (amount: bigint) => string; - getValue?: (amount: bigint, coinPrice?: number) => string; -} - -export const rewards: IReward[] = [ - { - token: "ETH", - coinId: 1, - getAmount: (amount) => formatEther(amount), - getValue: (amount, coinPrice) => (Number(formatEther(amount)) * (coinPrice ?? 0)).toString(), - }, - { - token: "PNK", - coinId: 0, - getAmount: (amount) => formatUnits(amount, 18), - getValue: (amount, coinPrice) => (Number(formatUnits(amount, 18)) * (coinPrice ?? 0)).toString(), - }, -]; - -export const calculateTotalJurorReward = (coinId: number, data: UserQuery): bigint => { - const total = data.user?.shifts - .map((shift) => parseInt(coinId === 0 ? shift.pnkAmount : shift.ethAmount)) - .reduce((acc, curr) => acc + curr, 0); - - return BigInt(total ?? 0); -}; - -export const getFormattedRewards = (data: any, pricesData: any) => { - return rewards.map(({ token, coinId, getValue, getAmount }) => { - const coinPrice = !isUndefined(pricesData) ? pricesData[CoinIds[token]]?.price : undefined; - - const totalReward = data && calculateTotalJurorReward(coinId, data); - return { - token, - amount: !isUndefined(totalReward) ? getAmount(totalReward) : undefined, - value: getValue ? (!isUndefined(totalReward) ? getValue(totalReward, coinPrice) : undefined) : undefined, - }; - }); -}; diff --git a/web/src/utils/parseWagmiError.ts b/web/src/utils/parseWagmiError.ts deleted file mode 100644 index 784fd47d4..000000000 --- a/web/src/utils/parseWagmiError.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { type UseSimulateContractReturnType } from "wagmi"; - -type ExtendedWagmiError = UseSimulateContractReturnType["error"] & { shortMessage?: string; metaMessages?: string[] }; - -/** - * @param error - * @description Tries to extract the human readable error message, otherwise reverts to error.message - * @returns Human readable error if possible - */ -export const parseWagmiError = (error: UseSimulateContractReturnType["error"]) => { - if (!error) return ""; - const extError = error as ExtendedWagmiError; - - const metaMessage = extError?.metaMessages?.[0]; - const shortMessage = extError?.shortMessage; - - return metaMessage ?? shortMessage ?? error.message; -}; diff --git a/web/src/utils/prepareArbitratorExtradata.ts b/web/src/utils/prepareArbitratorExtradata.ts deleted file mode 100644 index 5b3fe35ac..000000000 --- a/web/src/utils/prepareArbitratorExtradata.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { ethers } from "ethers"; - -import { IDisputeKitData, IGatedDisputeData, ISomeFutureDisputeData } from "context/NewDisputeContext"; - -/** - * Encodes gated dispute kit data - * @param data Gated dispute kit data - * @returns Encoded hex string - */ -const encodeGatedDisputeData = (data: IGatedDisputeData): string => { - // Packing of tokenGate and isERC1155 - // uint88 (padding 11 bytes) + bool (1 byte) + address (20 bytes) = 32 bytes - const normalizedData = { - ...data, - tokenId: !data.tokenId || !data.isERC1155 ? "0" : data.tokenId, - }; - const packed = ethers.utils.solidityPack( - ["uint88", "bool", "address"], - [0, normalizedData.isERC1155, normalizedData.tokenGate] - ); - return ethers.utils.defaultAbiCoder.encode(["bytes32", "uint256"], [packed, normalizedData.tokenId]); -}; - -/** - * Encodes future dispute kit data - * @param data Future dispute kit data - * @returns Encoded hex string - */ -const encodeFutureDisputeData = (data: ISomeFutureDisputeData): string => { - return ethers.utils.defaultAbiCoder.encode(["address"], [data.contract]); -}; - -/** - * Registry of encoding functions for different dispute kit data types - */ -const disputeKitDataEncoders = { - gated: encodeGatedDisputeData, - future: encodeFutureDisputeData, -} as const; - -/** - * @param subcourtID ID of the court the dispute will take place in - * @param noOfVotes Number of votes the dispute will have - * @param disputeKit Id of the dispute kit to use - * @param disputeKitData Optional dispute kit specific data - * @returns arbitrator extradata passed in while creating a dispute or querying costs - */ -export const prepareArbitratorExtradata = ( - subcourtID: string, - noOfVotes: number, - disputeKit: number = 1, - disputeKitData?: IDisputeKitData -) => { - const extraData = ethers.utils.defaultAbiCoder.encode( - ["uint256", "uint256", "uint256"], - [subcourtID, noOfVotes, disputeKit] - ) as `0x{string}`; - if (!disputeKitData) { - return extraData; - } - - const encoder = disputeKitDataEncoders[disputeKitData.type]; - if (!encoder) { - throw new Error(`Unknown dispute kit data type: ${disputeKitData.type}`); - } - const encodedDisputeKitData = encoder(disputeKitData as any); - return ethers.utils.hexConcat([extraData, encodedDisputeKitData]) as `0x{string}`; -}; diff --git a/web/src/utils/refecthWithRetry.ts b/web/src/utils/refecthWithRetry.ts deleted file mode 100644 index 304e0eb4c..000000000 --- a/web/src/utils/refecthWithRetry.ts +++ /dev/null @@ -1,25 +0,0 @@ -export async function refetchWithRetry<T>(fn: () => Promise<T>, retryCount = 5, retryDelay = 2000) { - let attempts = 0; - - while (attempts < retryCount) { - try { - const returnData = await fn(); - - //@ts-expect-error data does exist - if (returnData && returnData?.data !== undefined) { - return returnData; - } - } catch (error) { - console.error(`Attempt ${attempts + 1} failed with error:`, error); - } - - attempts++; - - if (attempts >= retryCount) { - return; - } - - await new Promise((resolve) => setTimeout(resolve, retryDelay)); - } - return; -} diff --git a/web/src/utils/sanitizeFilter.ts b/web/src/utils/sanitizeFilter.ts deleted file mode 100644 index 2abce80f0..000000000 --- a/web/src/utils/sanitizeFilter.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const sanitizeFilter = <T extends Record<string, any>>(f?: T) => { - if (!f) return undefined as unknown as T; - const cleaned = Object.fromEntries(Object.entries(f).filter(([_, v]) => !(Array.isArray(v) && v.length === 0))); - return Object.keys(cleaned).length ? (cleaned as T) : undefined; -}; diff --git a/web/src/utils/sentry.ts b/web/src/utils/sentry.ts deleted file mode 100644 index 284908fe5..000000000 --- a/web/src/utils/sentry.ts +++ /dev/null @@ -1,41 +0,0 @@ -import React from "react"; - -import * as Sentry from "@sentry/react"; -import { Routes, createRoutesFromChildren, matchRoutes, useLocation, useNavigationType } from "react-router-dom"; - -import { GIT_DIRTY, GIT_HASH, RELEASE_VERSION } from "consts/index"; - -Sentry.init({ - dsn: import.meta.env.REACT_APP_SENTRY_ENDPOINT, - environment: import.meta.env.REACT_APP_CONTEXT, - release: `court-v2@${RELEASE_VERSION}-${GIT_HASH}${GIT_DIRTY}`, - integrations: [ - new Sentry.BrowserProfilingIntegration(), - new Sentry.BrowserTracing({ - routingInstrumentation: Sentry.reactRouterV6Instrumentation( - React.useEffect, - useLocation, - useNavigationType, - createRoutesFromChildren, - matchRoutes - ), - }), - ], - - // Set tracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. - // We recommend adjusting this value in production - tracesSampleRate: 1.0, - - // Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled - tracePropagationTargets: ["localhost", /^https:\/\/.*--kleros-v2\.netlify\.app/], - - // Set profilesSampleRate to 1.0 to profile every transaction. - // Since profilesSampleRate is relative to tracesSampleRate, - // the final profiling rate can be computed as tracesSampleRate * profilesSampleRate - // For example, a tracesSampleRate of 0.5 and profilesSampleRate of 0.5 would - // results in 25% of transactions being profiled (0.5*0.5=0.25) - profilesSampleRate: 1.0, -}); - -export const SentryRoutes = Sentry.withSentryReactRouterV6Routing(Routes); diff --git a/web/src/utils/shortenAddress.ts b/web/src/utils/shortenAddress.ts deleted file mode 100644 index 12caf9f6e..000000000 --- a/web/src/utils/shortenAddress.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { getAddress } from "viem"; - -export function shortenAddress(address: string): string { - try { - const formattedAddress = getAddress(address); - return formattedAddress.substring(0, 6) + "..." + formattedAddress.substring(formattedAddress.length - 4); - } catch { - throw new TypeError("Invalid input, address can't be parsed"); - } -} diff --git a/web/src/utils/shutter.ts b/web/src/utils/shutter.ts deleted file mode 100644 index c12168ea4..000000000 --- a/web/src/utils/shutter.ts +++ /dev/null @@ -1,195 +0,0 @@ -import { encryptData, decrypt as shutterDecrypt } from "@shutter-network/shutter-sdk"; -import { stringToHex, hexToString, Hex } from "viem"; - -interface ShutterApiMessageData { - eon: number; - identity: string; - identity_prefix: string; - eon_key: string; - tx_hash: string; -} - -interface ShutterApiResponse { - message: ShutterApiMessageData; - error?: string; -} - -interface ShutterDecryptionKeyData { - decryption_key: string; - identity: string; - decryption_timestamp: number; -} - -/** - * Fetches encryption data from the Shutter API - * @param decryptionTimestamp Unix timestamp when decryption should be possible - * @returns Promise with the eon key and identity - */ -async function fetchShutterData(decryptionTimestamp: number): Promise<ShutterApiMessageData> { - try { - // Generate a random identity prefix - const identityPrefix = generateRandomBytes32(); - - const response = await fetch(`${import.meta.env.REACT_APP_SHUTTER_API}/register_identity`, { - method: "POST", - headers: { - accept: "application/json", - "Content-Type": "application/json", - // authorization: `Bearer ${import.meta.env.REACT_APP_SHUTTER_API_TOKEN}`, - }, - body: JSON.stringify({ - decryptionTimestamp, - identityPrefix, - }), - }); - - // Log the response status - - // Get the response text - const responseText = await response.text(); - - if (!response.ok) { - throw new Error(`API request failed with status ${response.status}: ${responseText}`); - } - - // Parse the JSON response - let jsonResponse: ShutterApiResponse; - try { - jsonResponse = JSON.parse(responseText); - } catch { - throw new Error(`Failed to parse API response as JSON: ${responseText}`); - } - - // Check if we have the message data - if (!jsonResponse.message) { - throw new Error(`API response missing message data: ${JSON.stringify(jsonResponse)}`); - } - - return jsonResponse.message; - } catch (error) { - console.error("Error fetching data from Shutter API:", error); - throw error; - } -} - -/** - * Fetches the decryption key from the Shutter API - * @param identity The identity used for encryption - * @returns Promise with the decryption key data - */ -async function fetchDecryptionKey(identity: string): Promise<ShutterDecryptionKeyData> { - const response = await fetch(`${import.meta.env.REACT_APP_SHUTTER_API}/get_decryption_key?identity=${identity}`, { - method: "GET", - headers: { - accept: "application/json", - // authorization: `Bearer ${import.meta.env.REACT_APP_SHUTTER_API_TOKEN}`, - }, - }); - - // Get the response text - const responseText = await response.text(); - - // Try to parse the error response even if the request failed - let jsonResponse; - try { - jsonResponse = JSON.parse(responseText); - } catch { - throw new Error(`Failed to parse API response as JSON: ${responseText}`); - } - - // Handle the "too early" error case specifically - if (!response.ok) { - if (jsonResponse?.description?.includes("timestamp not reached yet")) { - throw new Error( - `Cannot decrypt yet: The decryption timestamp has not been reached.\n` + - `Please wait until the commit period has ended before attempting to decrypt.\n` + - `Error details: ${jsonResponse.description}` - ); - } - throw new Error(`API request failed with status ${response.status}: ${responseText}`); - } - - // Check if we have the message data - if (!jsonResponse.message) { - throw new Error(`API response missing message data: ${JSON.stringify(jsonResponse)}`); - } - - return jsonResponse.message; -} - -/** - * Ensures a string is a valid hex string with 0x prefix - * @param hexString The hex string to validate - * @returns The validated hex string with 0x prefix - */ -function ensureHexString(hexString: string | undefined): `0x${string}` { - if (!hexString) { - throw new Error("Hex string is undefined or null"); - } - - // Add 0x prefix if it doesn't exist - const prefixedHex = hexString.startsWith("0x") ? hexString : `0x${hexString}`; - return prefixedHex as `0x${string}`; -} - -/** - * Generates a random 32 bytes - * @returns Random 32 bytes as a hex string with 0x prefix - */ -function generateRandomBytes32(): `0x${string}` { - return ("0x" + - crypto - .getRandomValues(new Uint8Array(32)) - .reduce((acc, byte) => acc + byte.toString(16).padStart(2, "0"), "")) as Hex; -} - -/** - * Encrypts a message using the Shutter API - * @param message The message to encrypt - * @returns Promise with the encrypted commitment and identity - */ -export async function encrypt( - message: string, - decryptionDelay: number -): Promise<{ encryptedCommitment: `0x${string}`; identity: string }> { - // Set decryption timestamp - const decryptionTimestamp = Math.floor(Date.now() / 1000) + decryptionDelay; - - // Fetch encryption data from Shutter API - const shutterData = await fetchShutterData(decryptionTimestamp); - - // Extract the eon key and identity from the response and ensure they have the correct format - const eonKeyHex = ensureHexString(shutterData.eon_key); - const identityHex = ensureHexString(shutterData.identity); - - // Message to encrypt - const msgHex = stringToHex(message); - - // Generate a random sigma - const sigmaHex = generateRandomBytes32(); - - // Encrypt the message - const encryptedCommitment = await encryptData(msgHex, identityHex, eonKeyHex, sigmaHex); - - return { encryptedCommitment, identity: identityHex }; -} - -/** - * Decrypts a message using the Shutter API - * @param encryptedMessage The encrypted message to decrypt - * @param identity The identity used for encryption - * @returns Promise with the decrypted message - */ -export async function decrypt(encryptedMessage: string, identity: string): Promise<string> { - // Fetch the decryption key - const decryptionKeyData = await fetchDecryptionKey(identity); - - // Ensure the decryption key is properly formatted - const decryptionKey = ensureHexString(decryptionKeyData.decryption_key); - - // Decrypt the message - const decryptedHexMessage = await shutterDecrypt(encryptedMessage, decryptionKey); - - // Convert the decrypted hex message back to a string - return hexToString(decryptedHexMessage as `0x${string}`); -} diff --git a/web/src/utils/transformSearch.ts b/web/src/utils/transformSearch.ts deleted file mode 100644 index 0d1799a6c..000000000 --- a/web/src/utils/transformSearch.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * - * @param searchString - * @returns A search string to better search with fullTextSearch - */ -export const transformSearch = (searchString?: string) => { - if (!searchString) return null; - const words = searchString - .split(/\s+/) - .map((word) => word.trim()) - .filter(Boolean); - - const transformedWords = words.map((word) => `${word} | ${word}:*`); - - return transformedWords.join(" | "); -}; diff --git a/web/src/utils/uri.ts b/web/src/utils/uri.ts deleted file mode 100644 index 23538ea6b..000000000 --- a/web/src/utils/uri.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { useLocation } from "react-router-dom"; - -import { Dispute_Filter } from "src/graphql/graphql"; - -export const encodeURIFilter = (filter: Dispute_Filter): string => { - if (Object.keys(filter).length === 0) { - return "all"; - } - return encodeURIComponent(JSON.stringify(filter)); -}; - -export const decodeURIFilter = (filter: string): Dispute_Filter => { - if (filter === "all") { - return {}; - } - return JSON.parse(decodeURI(filter)); -}; - -export const useRootPath = () => { - const location = useLocation(); - return location.pathname.split("/").slice(0, -3).join("/"); -}; diff --git a/web/src/utils/userLevelCalculation.ts b/web/src/utils/userLevelCalculation.ts deleted file mode 100644 index c5d1424a5..000000000 --- a/web/src/utils/userLevelCalculation.ts +++ /dev/null @@ -1,23 +0,0 @@ -interface ILevelCriteria { - level: number; - title: string; - minCoherenceScore: number; - maxCoherenceScore: number; -} - -const levelCriteria: ILevelCriteria[] = [ - { level: 0, title: "Diogenes", minCoherenceScore: 0, maxCoherenceScore: 24 }, - { level: 1, title: "Pythagoras", minCoherenceScore: 25, maxCoherenceScore: 49 }, - { level: 2, title: "Socrates", minCoherenceScore: 50, maxCoherenceScore: 69 }, - { level: 3, title: "Plato", minCoherenceScore: 70, maxCoherenceScore: 89 }, - { level: 4, title: "Aristotle", minCoherenceScore: 90, maxCoherenceScore: 100 }, -]; - -export const getUserLevelData = (coherenceScore: number) => { - for (const criteria of levelCriteria) { - if (coherenceScore >= criteria.minCoherenceScore && coherenceScore <= criteria.maxCoherenceScore) { - return criteria; - } - } - return levelCriteria[0]; -}; diff --git a/web/src/utils/validateAddressOrEns.ts b/web/src/utils/validateAddressOrEns.ts deleted file mode 100644 index 35cb4b138..000000000 --- a/web/src/utils/validateAddressOrEns.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { PublicClient, isAddress } from "viem"; -import { normalize } from "viem/ens"; - -export const validateAddress = async (address: string, publicClient: PublicClient): Promise<boolean> => { - try { - if (isAddress(address)) return true; - - const isValidEns = (await publicClient.getEnsAddress({ name: normalize(address) })) !== null; - - return isValidEns; - } catch { - return false; - } -}; diff --git a/web/src/utils/wrapWithToast.ts b/web/src/utils/wrapWithToast.ts deleted file mode 100644 index 5d078e688..000000000 --- a/web/src/utils/wrapWithToast.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { toast, ToastPosition, Theme } from "react-toastify"; -import { PublicClient, TransactionReceipt } from "viem"; - -import { parseWagmiError } from "./parseWagmiError"; - -export const OPTIONS = { - position: "top-center" as ToastPosition, - autoClose: 5000, - hideProgressBar: false, - closeOnClick: true, - pauseOnHover: true, - draggable: true, - progress: undefined, - theme: "colored" as Theme, -}; - -type WrapWithToastReturnType = { - status: boolean; - result?: TransactionReceipt; -}; - -export const infoToast = (message: string) => toast.info(message, OPTIONS); -export const successToast = (message: string) => toast.success(message, OPTIONS); -export const errorToast = (message: string) => toast.error(message, OPTIONS); - -export async function wrapWithToast( - contractWrite: () => Promise<`0x${string}`>, - publicClient: PublicClient -): Promise<WrapWithToastReturnType> { - toast.info("Transaction initiated", OPTIONS); - return await contractWrite() - .then( - async (hash) => - await publicClient.waitForTransactionReceipt({ hash, confirmations: 2 }).then((res: TransactionReceipt) => { - const status = res.status === "success"; - - if (status) toast.success("Transaction mined!", OPTIONS); - else toast.error("Transaction reverted!", OPTIONS); - - return { status, result: res }; - }) - ) - .catch((error) => { - toast.error(parseWagmiError(error), OPTIONS); - return { status: false }; - }); -} - -export async function catchShortMessage(promise: Promise<any>) { - return await promise.catch((error) => toast.error(parseWagmiError(error), OPTIONS)); -} diff --git a/web/tsconfig.json b/web/tsconfig.json deleted file mode 100644 index e4683ef39..000000000 --- a/web/tsconfig.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "extends": "@kleros/kleros-v2-tsconfig/react-library.json", - "compilerOptions": { - "baseUrl": ".", - "paths": { - "~*": [ - "./*" - ], - "src*": [ - "./src*" - ], - "utils*": [ - "./src/utils*" - ], - "assets*": [ - "./src/assets*" - ], - "components*": [ - "./src/components*" - ], - "connectors*": [ - "./src/connectors*" - ], - "context*": [ - "./src/context*" - ], - "layout*": [ - "./src/layout*" - ], - "consts*": [ - "./src/consts*" - ], - "hooks*": [ - "./src/hooks*" - ], - "queries*": [ - "./src/hooks/queries*" - ], - "pages*": [ - "./src/pages*" - ], - "styles*": [ - "./src/styles*" - ], - "svgs*": [ - "./src/assets/svgs*" - ] - }, - "rootDir": "src", - "outDir": "build/dist", - "allowJs": true, - "forceConsistentCasingInFileNames": true, - "strictNullChecks": true, - "suppressImplicitAnyIndexErrors": true, - "noUnusedLocals": true, - "skipLibCheck": true, - "allowSyntheticDefaultImports": true, - "removeComments": true, - "isolatedModules": true, - "moduleResolution": "node", - "strict": true, - "esModuleInterop": true, - "declaration": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitAny": false, - "resolveJsonModule": true, - "target": "ES2020", - "lib": [ - "ESNext.Array", - "dom" - ], - "types": [ - "vite/client", - "vite-plugin-svgr/client" - ] - }, - "exclude": [ - "node_modules", - "build", - "scripts", - "acceptance-tests", - "webpack", - "jest", - "src/setupTests.ts", - "dist", - "commitlint.config.js" - ] -} diff --git a/web/vite.config.js b/web/vite.config.js deleted file mode 100644 index cd45ff134..000000000 --- a/web/vite.config.js +++ /dev/null @@ -1,48 +0,0 @@ -import { defineConfig } from "vite"; -import { nodePolyfills } from "vite-plugin-node-polyfills"; -import svgr from "vite-plugin-svgr"; -import tsconfigPaths from "vite-tsconfig-paths"; -import { viteStaticCopy } from "vite-plugin-static-copy"; -import { dirname, resolve } from "path"; -import { fileURLToPath } from "url"; - -const __dirname = dirname(fileURLToPath(import.meta.url)); - -export default defineConfig({ - root: "src", - build: { - outDir: "../dist", - rollupOptions: { - onwarn: (warning, warn) => { - if (warning.code === "MODULE_LEVEL_DIRECTIVE") { - return; - } - warn(warning); - }, - }, - }, - envPrefix: ["REACT_APP", "ALCHEMY", "WALLETCONNECT_PROJECT_ID"], - plugins: [ - viteStaticCopy({ - targets: [ - { - src: [ - resolve(__dirname, "../node_modules/@shutter-network/shutter-sdk/dist/blst.js"), - resolve(__dirname, "../node_modules/@shutter-network/shutter-sdk/dist/blst.wasm"), - ], - dest: ".", - }, - ], - }), - svgr({ - include: ["**/*.svg", "tsx:**/*.svg"], - exclude: ["../node_modules/**/*"], - }), - tsconfigPaths({ - ignoreConfigErrors: true, - }), - nodePolyfills({ - include: ["fs", "stream"], - }), - ], -}); diff --git a/web/wagmi.config.ts b/web/wagmi.config.ts deleted file mode 100644 index 893df2554..000000000 --- a/web/wagmi.config.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { readdir, readFile } from "fs/promises"; -import { parse, join } from "path"; - -import { type Config, type ContractConfig, defineConfig } from "@wagmi/cli"; -import { react, actions } from "@wagmi/cli/plugins"; -import dotenv from "dotenv"; -import { type Chain } from "viem"; -import { arbitrum, arbitrumSepolia, gnosis, gnosisChiado, mainnet, sepolia } from "viem/chains"; - -import { ArbitratorTypes, getArbitratorType } from "consts/arbitratorTypes"; - -import IArbitrableV2 from "../contracts/artifacts/src/arbitration/interfaces/IArbitrableV2.sol/IArbitrableV2.json" assert { type: "json" }; -import * as devnetViem from "../contracts/deployments/devnet.viem"; -import * as mainnetViem from "../contracts/deployments/mainnet.viem"; -import * as testnetViem from "../contracts/deployments/testnet.viem"; - -dotenv.config(); - -const readArtifacts = async (type: ArbitratorTypes, viemChainName: string, hardhatChainName?: string) => { - const artifactSuffix = - type === ArbitratorTypes.vanilla - ? "" - : ArbitratorTypes[type].toString().charAt(0).toUpperCase() + ArbitratorTypes[type].toString().slice(1); - const vanillaArtifacts = [ - "KlerosCore", - "DisputeKitClassic", - "DisputeKitShutter", - "DisputeKitGated", - "DisputeKitGatedShutter", - "SortitionModule", - "DisputeResolver", - ]; - const typeSpecificArtifacts = vanillaArtifacts.map((artifact) => `${artifact}${artifactSuffix}`); - - const chainMap: Record<string, Chain> = { - arbitrum, - arbitrumSepolia, - sepolia, - mainnet, - gnosisChiado, - gnosis, - }; - - const chain = chainMap[viemChainName]; - if (!chain) { - throw new Error(`Viem chain ${viemChainName} not found`); - } - - const directoryPath = `../contracts/deployments/${hardhatChainName ?? viemChainName}`; - const files = await readdir(directoryPath); - - const results: ContractConfig[] = []; - for (const file of files) { - const { name, ext } = parse(file); - if (ext === ".json") { - let nameWithoutSuffix = name; - if (vanillaArtifacts.some((artifact) => name.startsWith(artifact))) { - if (!typeSpecificArtifacts.includes(name)) { - // console.debug(`Skipping ${name} for deployment type ${ArbitratorTypes[type]}`); - continue; - } - if (type !== ArbitratorTypes.vanilla) { - nameWithoutSuffix = name.slice(0, -artifactSuffix.length); - // console.debug(`Using ${nameWithoutSuffix} instead of ${name}`); - } - } - const filePath = join(directoryPath, file); - const fileContent = await readFile(filePath, "utf-8"); - const jsonContent = JSON.parse(fileContent); - results.push({ - name: nameWithoutSuffix, - address: { - [chain.id]: jsonContent.address as `0x{string}`, - }, - abi: jsonContent.abi, - }); - } - } - return results; -}; - -const getConfig = async (): Promise<Config> => { - const deployment = process.env.REACT_APP_DEPLOYMENT ?? "testnet"; - const type = getArbitratorType(process.env.REACT_APP_ARBITRATOR_TYPE?.toLowerCase() as keyof typeof ArbitratorTypes); - - let viemNetwork: string; - let hardhatNetwork: string; - let arbitratorContracts; - switch (deployment) { - case "devnet": - viemNetwork = "arbitrumSepolia"; - hardhatNetwork = "arbitrumSepoliaDevnet"; - arbitratorContracts = devnetViem; - break; - case "testnet": - viemNetwork = "arbitrumSepolia"; - hardhatNetwork = "arbitrumSepolia"; - arbitratorContracts = testnetViem; - break; - case "mainnet": - viemNetwork = "arbitrum"; - hardhatNetwork = "arbitrum"; - arbitratorContracts = mainnetViem; - break; - default: - throw new Error(`Unknown deployment ${deployment}`); - } - - const deploymentContracts = await readArtifacts(type, viemNetwork, hardhatNetwork); - - return { - out: "src/hooks/contracts/generated.ts", - contracts: [ - ...deploymentContracts, - { - name: "IHomeGateway", - abi: arbitratorContracts.iHomeGatewayAbi, - }, - { - name: "IArbitrableV2", - abi: IArbitrableV2.abi, - }, - ], - plugins: [react(), actions()], - }; -}; - -export default defineConfig(getConfig); diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index c2cb4f2d5..000000000 --- a/yarn.lock +++ /dev/null @@ -1,35904 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10 - -"@0no-co/graphql.web@npm:^1.0.5": - version: 1.0.9 - resolution: "@0no-co/graphql.web@npm:1.0.9" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - peerDependenciesMeta: - graphql: - optional: true - checksum: 10/3caf39263323ba2a51255035e92582573822d213117879e6d1b732e222a8d14fdc703828d46b4a46f86d2027ee08568196f1d64376ee74250fb58dc465698930 - languageName: node - linkType: hard - -"@aashutoshrathi/word-wrap@npm:^1.2.3": - version: 1.2.6 - resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" - checksum: 10/6eebd12a5cd03cee38fcb915ef9f4ea557df6a06f642dfc7fe8eb4839eb5c9ca55a382f3604d52c14200b0c214c12af5e1f23d2a6d8e23ef2d016b105a9d6c0a - languageName: node - linkType: hard - -"@adraffy/ens-normalize@npm:1.10.1": - version: 1.10.1 - resolution: "@adraffy/ens-normalize@npm:1.10.1" - checksum: 10/4cb938c4abb88a346d50cb0ea44243ab3574330c81d4f5aaaf9dfee584b96189d0faa404de0fcbef5a1b73909ea4ebc3e63d84bd23f9949e5c8d4085207a5091 - languageName: node - linkType: hard - -"@adraffy/ens-normalize@npm:^1.10.1, @adraffy/ens-normalize@npm:^1.11.0": - version: 1.11.0 - resolution: "@adraffy/ens-normalize@npm:1.11.0" - checksum: 10/abef75f21470ea43dd6071168e092d2d13e38067e349e76186c78838ae174a46c3e18ca50921d05bea6ec3203074147c9e271f8cb6531d1c2c0e146f3199ddcb - languageName: node - linkType: hard - -"@alloc/quick-lru@npm:^5.2.0": - version: 5.2.0 - resolution: "@alloc/quick-lru@npm:5.2.0" - checksum: 10/bdc35758b552bcf045733ac047fb7f9a07c4678b944c641adfbd41f798b4b91fffd0fdc0df2578d9b0afc7b4d636aa6e110ead5d6281a2adc1ab90efd7f057f8 - languageName: node - linkType: hard - -"@ampproject/remapping@npm:^2.2.0": - version: 2.2.1 - resolution: "@ampproject/remapping@npm:2.2.1" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.0" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 10/e15fecbf3b54c988c8b4fdea8ef514ab482537e8a080b2978cc4b47ccca7140577ca7b65ad3322dcce65bc73ee6e5b90cbfe0bbd8c766dad04d5c62ec9634c42 - languageName: node - linkType: hard - -"@ampproject/remapping@npm:^2.3.0": - version: 2.3.0 - resolution: "@ampproject/remapping@npm:2.3.0" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10/f3451525379c68a73eb0a1e65247fbf28c0cccd126d93af21c75fceff77773d43c0d4a2d51978fb131aff25b5f2cb41a9fe48cc296e61ae65e679c4f6918b0ab - languageName: node - linkType: hard - -"@apideck/better-ajv-errors@npm:^0.3.1": - version: 0.3.6 - resolution: "@apideck/better-ajv-errors@npm:0.3.6" - dependencies: - json-schema: "npm:^0.4.0" - jsonpointer: "npm:^5.0.0" - leven: "npm:^3.1.0" - peerDependencies: - ajv: ">=8" - checksum: 10/d638f4d5654081b874671a5729b111d1bea5960834968847e8b05d5f57bf2f50cf29fd29d0bbb7f0077640785daacec22cf018a5f01501e276ee96d271fe8330 - languageName: node - linkType: hard - -"@arbitrum/nitro-contracts@npm:3.0.0": - version: 3.0.0 - resolution: "@arbitrum/nitro-contracts@npm:3.0.0" - dependencies: - "@offchainlabs/upgrade-executor": "npm:1.1.0-beta.0" - "@openzeppelin/contracts": "npm:4.7.3" - "@openzeppelin/contracts-upgradeable": "npm:4.7.3" - patch-package: "npm:^6.4.7" - solady: "npm:0.0.182" - checksum: 10/9f2ddd2871f86c23ab8c584fa9d205cc2a8de29dc1124544eb7b070a96e85a6301587902f0c86547e9be63716848da202a8cead01fbd884f73e0b0a01582ba81 - languageName: node - linkType: hard - -"@ardatan/relay-compiler@npm:12.0.0": - version: 12.0.0 - resolution: "@ardatan/relay-compiler@npm:12.0.0" - dependencies: - "@babel/core": "npm:^7.14.0" - "@babel/generator": "npm:^7.14.0" - "@babel/parser": "npm:^7.14.0" - "@babel/runtime": "npm:^7.0.0" - "@babel/traverse": "npm:^7.14.0" - "@babel/types": "npm:^7.0.0" - babel-preset-fbjs: "npm:^3.4.0" - chalk: "npm:^4.0.0" - fb-watchman: "npm:^2.0.0" - fbjs: "npm:^3.0.0" - glob: "npm:^7.1.1" - immutable: "npm:~3.7.6" - invariant: "npm:^2.2.4" - nullthrows: "npm:^1.1.1" - relay-runtime: "npm:12.0.0" - signedsource: "npm:^1.0.0" - yargs: "npm:^15.3.1" - peerDependencies: - graphql: "*" - bin: - relay-compiler: bin/relay-compiler - checksum: 10/60896560fd282ccc9e705fa18c685d23783f97670fa44be287beaf9d49acfd1a6bbc19daf3e55d9cffdf385ef883be36f7acf5bdcf61c46483e31db9e4e71884 - languageName: node - linkType: hard - -"@ardatan/sync-fetch@npm:^0.0.1": - version: 0.0.1 - resolution: "@ardatan/sync-fetch@npm:0.0.1" - dependencies: - node-fetch: "npm:^2.6.1" - checksum: 10/ee21741badecb18fb9a18a404275e25272f67ade914f98885de79ccecba3403b8a6357e6b033a028e24f0d902197dd541655309d7789ebacd7ad981bf1f12618 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.24.2, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.8.3": - version: 7.24.7 - resolution: "@babel/code-frame@npm:7.24.7" - dependencies: - "@babel/highlight": "npm:^7.24.7" - picocolors: "npm:^1.0.0" - checksum: 10/4812e94885ba7e3213d49583a155fdffb05292330f0a9b2c41b49288da70cf3c746a3fda0bf1074041a6d741c33f8d7be24be5e96f41ef77395eeddc5c9ff624 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.25.9": - version: 7.26.2 - resolution: "@babel/code-frame@npm:7.26.2" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.25.9" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10/db2c2122af79d31ca916755331bb4bac96feb2b334cdaca5097a6b467fdd41963b89b14b6836a14f083de7ff887fc78fa1b3c10b14e743d33e12dbfe5ee3d223 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/compat-data@npm:7.24.7" - checksum: 10/6edc09152ca51a22c33741c441f33f9475598fa59edc53369edb74b49f4ea4bef1281f5b0ed2b9b67fb66faef2da2069e21c4eef83405d8326e524b301f4e7e2 - languageName: node - linkType: hard - -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3, @babel/core@npm:^7.14.0, @babel/core@npm:^7.16.0, @babel/core@npm:^7.21.3, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": - version: 7.24.4 - resolution: "@babel/core@npm:7.24.4" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.24.2" - "@babel/generator": "npm:^7.24.4" - "@babel/helper-compilation-targets": "npm:^7.23.6" - "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helpers": "npm:^7.24.4" - "@babel/parser": "npm:^7.24.4" - "@babel/template": "npm:^7.24.0" - "@babel/traverse": "npm:^7.24.1" - "@babel/types": "npm:^7.24.0" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10/1e049f8df26be0fe5be36173fd7c33dfb004eeeec28152fea83c90e71784f9a6f2237296f43a2ee7d9041e2a33a05f43da48ce2d4e0cd473a682328ca07ce7e0 - languageName: node - linkType: hard - -"@babel/eslint-parser@npm:^7.16.3": - version: 7.22.5 - resolution: "@babel/eslint-parser@npm:7.22.5" - dependencies: - "@nicolo-ribaudo/eslint-scope-5-internals": "npm:5.1.1-v1" - eslint-visitor-keys: "npm:^2.1.0" - semver: "npm:^6.3.0" - peerDependencies: - "@babel/core": ">=7.11.0" - eslint: ^7.5.0 || ^8.0.0 - checksum: 10/698a17188f134018c61b095743c1cacc15e822403837140b354cb3d44b9e9f93f3ae48cb4fb7043878aa327a1e3c9dc04ed73d8e0241a230400c5d7f636cfcab - languageName: node - linkType: hard - -"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.24.4, @babel/generator@npm:^7.24.7, @babel/generator@npm:^7.7.2": - version: 7.24.7 - resolution: "@babel/generator@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^2.5.1" - checksum: 10/c71d24a4b41b19c10d2f2eb819f27d4cf94220e2322f7c8fed8bfbbb115b2bebbdd6dc1f27dac78a175e90604def58d763af87e0fa81ce4ab1582858162cf768 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.25.9": - version: 7.26.2 - resolution: "@babel/generator@npm:7.26.2" - dependencies: - "@babel/parser": "npm:^7.26.2" - "@babel/types": "npm:^7.26.0" - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^3.0.2" - checksum: 10/71ace82b5b07a554846a003624bfab93275ccf73cdb9f1a37a4c1094bf9dc94bb677c67e8b8c939dbd6c5f0eda2e8f268aa2b0d9c3b9511072565660e717e045 - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10/a9017bfc1c4e9f2225b967fbf818004703de7cf29686468b54002ffe8d6b56e0808afa20d636819fcf3a34b89ba72f52c11bdf1d69f303928ee10d92752cad95 - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.22.5": - version: 7.25.9 - resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" - dependencies: - "@babel/types": "npm:^7.25.9" - checksum: 10/41edda10df1ae106a9b4fe617bf7c6df77db992992afd46192534f5cff29f9e49a303231733782dd65c5f9409714a529f215325569f14282046e9d3b7a1ffb6c - languageName: node - linkType: hard - -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.24.7" - dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10/3ddff45d1e086c9c6dcef53ef46521a0c11ddb09fe3ab42dca5af6bb1b1703895a9f4f8056f49fdf53c2dbf6e5cf1ddb4baf17d7e3766c63f051ab8d60a919ee - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.23.6, @babel/helper-compilation-targets@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-compilation-targets@npm:7.24.7" - dependencies: - "@babel/compat-data": "npm:^7.24.7" - "@babel/helper-validator-option": "npm:^7.24.7" - browserslist: "npm:^4.22.2" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10/8f8bc89af70a606ccb208513aa25d83e19b88f91b64a33174f7701a9479e67ddbb0a9c89033265070375cd24e690b93380b3a3ea11e4b3a711d742f0f4699ee7 - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.22.5, @babel/helper-create-class-features-plugin@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-create-class-features-plugin@npm:7.24.7" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-function-name": "npm:^7.24.7" - "@babel/helper-member-expression-to-functions": "npm:^7.24.7" - "@babel/helper-optimise-call-expression": "npm:^7.24.7" - "@babel/helper-replace-supers": "npm:^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - "@babel/helper-split-export-declaration": "npm:^7.24.7" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/8ecb1c2acc808e1e0c21dccc7ea6899de9a140cb1856946800176b4784de6fccd575661fbff7744bb895d01aa6956ce963446b8577c4c2334293ba5579d5cdb9 - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.24.7" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - regexpu-core: "npm:^5.3.1" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/dd7238af30ea6b26a627192422822ae810873fd899150dd8d4348eb107045721a849abcfa2bd04f917493784a93724b8caf6994c31afd16f9347a8a9b9862425 - languageName: node - linkType: hard - -"@babel/helper-define-polyfill-provider@npm:^0.4.0": - version: 0.4.0 - resolution: "@babel/helper-define-polyfill-provider@npm:0.4.0" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.17.7" - "@babel/helper-plugin-utils": "npm:^7.16.7" - debug: "npm:^4.1.1" - lodash.debounce: "npm:^4.0.8" - resolve: "npm:^1.14.2" - semver: "npm:^6.1.2" - peerDependencies: - "@babel/core": ^7.4.0-0 - checksum: 10/9aae8e941fa64ac3a39d9fae78de679c2abe38d9660377e7200bfc4c19c5f8a763407d7e16820915700f8694d2f1b7e1ff20b016a1c3bb06fc9b1e5047ba4664 - languageName: node - linkType: hard - -"@babel/helper-define-polyfill-provider@npm:^0.6.1, @babel/helper-define-polyfill-provider@npm:^0.6.2": - version: 0.6.2 - resolution: "@babel/helper-define-polyfill-provider@npm:0.6.2" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.22.6" - "@babel/helper-plugin-utils": "npm:^7.22.5" - debug: "npm:^4.1.1" - lodash.debounce: "npm:^4.0.8" - resolve: "npm:^1.14.2" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10/bb32ec12024d3f16e70641bc125d2534a97edbfdabbc9f69001ec9c4ce46f877c7a224c566aa6c8c510c3b0def2e43dc4433bf6a40896ba5ce0cef4ea5ccbcff - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-environment-visitor@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10/079d86e65701b29ebc10baf6ed548d17c19b808a07aa6885cc141b690a78581b180ee92b580d755361dc3b16adf975b2d2058b8ce6c86675fcaf43cf22f2f7c6 - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-function-name@npm:7.24.7" - dependencies: - "@babel/template": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10/2ceb3d9b2b35a0fc4100fc06ed7be3bc38f03ff0bf128ff0edbc0cc7dd842967b1496fc70b5c616c747d7711c2b87e7d025c8888f48740631d6148a9d3614f85 - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-hoist-variables@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10/6cfdcf2289cd12185dcdbdf2435fa8d3447b797ac75851166de9fc8503e2fd0021db6baf8dfbecad3753e582c08e6a3f805c8d00cbed756060a877d705bd8d8d - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-member-expression-to-functions@npm:7.24.7" - dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10/d990752aaff311aba0ca61539e1776c5ba2818836403f9bafac849deb4cd24c082cbde5f23e490b7f3614c95ff67f8d75fa5e2f14cb00586a72c96c158e1127b - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.0.0": - version: 7.25.9 - resolution: "@babel/helper-module-imports@npm:7.25.9" - dependencies: - "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10/e090be5dee94dda6cd769972231b21ddfae988acd76b703a480ac0c96f3334557d70a965bf41245d6ee43891e7571a8b400ccf2b2be5803351375d0f4e5bcf08 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.5, @babel/helper-module-imports@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-imports@npm:7.24.7" - dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10/df8bfb2bb18413aa151ecd63b7d5deb0eec102f924f9de6bc08022ced7ed8ca7fed914562d2f6fa5b59b74a5d6e255dc35612b2bc3b8abf361e13f61b3704770 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.23.3, @babel/helper-module-transforms@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-transforms@npm:7.24.7" - dependencies: - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-simple-access": "npm:^7.24.7" - "@babel/helper-split-export-declaration": "npm:^7.24.7" - "@babel/helper-validator-identifier": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/4f2b232bf6d1be8d3a72b084a2a7ac1b0b93ea85717411a11ae1fb6375d4392019e781d8cc155789e649a2caa7eec378dd1404210603d6d4230f042c5feacffb - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10/da7a7f2d1bb1be4cffd5fa820bd605bc075c7dd014e0458f608bb6f34f450fe9412c8cea93e788227ab396e0e02c162d7b1db3fbcb755a6360e354c485d61df0 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.24.7 - resolution: "@babel/helper-plugin-utils@npm:7.24.7" - checksum: 10/dad51622f0123fdba4e2d40a81a6b7d6ef4b1491b2f92fd9749447a36bde809106cf117358705057a2adc8fd73d5dc090222e0561b1213dae8601c8367f5aac8 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-plugin-utils@npm:7.25.9" - checksum: 10/e347d87728b1ab10b6976d46403941c8f9008c045ea6d99997a7ffca7b852dc34b6171380f7b17edf94410e0857ff26f3a53d8618f11d73744db86e8ca9b8c64 - languageName: node - linkType: hard - -"@babel/helper-remap-async-to-generator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-remap-async-to-generator@npm:7.24.7" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-wrap-function": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/4b7c925e71811902c8aa57904044921027eae10ac9b5b029df491ed4abc1ea18b450a7923fd0feb1248ae37703889e72b6c27f2a0e2d5811103c7655c49ad355 - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-replace-supers@npm:7.24.7" - dependencies: - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-member-expression-to-functions": "npm:^7.24.7" - "@babel/helper-optimise-call-expression": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/18b7c3709819d008a14953e885748f3e197537f131d8f7ae095fec245506d854ff40b236edb1754afb6467f795aa90ae42a1d961a89557702249bacfc3fdad19 - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-simple-access@npm:7.24.7" - dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10/5083e190186028e48fc358a192e4b93ab320bd016103caffcfda81302a13300ccce46c9cd255ae520c25d2a6a9b47671f93e5fe5678954a2329dc0a685465c49 - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7" - dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10/784a6fdd251a9a7e42ccd04aca087ecdab83eddc60fda76a2950e00eb239cc937d3c914266f0cc476298b52ac3f44ffd04c358e808bd17552a7e008d75494a77 - languageName: node - linkType: hard - -"@babel/helper-split-export-declaration@npm:^7.22.5, @babel/helper-split-export-declaration@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-split-export-declaration@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10/ff04a3071603c87de0d6ee2540b7291ab36305b329bd047cdbb6cbd7db335a12f9a77af1cf708779f75f13c4d9af46093c00b34432e50b2411872c658d1a2e5e - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-string-parser@npm:7.25.9" - checksum: 10/c28656c52bd48e8c1d9f3e8e68ecafd09d949c57755b0d353739eb4eae7ba4f7e67e92e4036f1cd43378cc1397a2c943ed7bcaf5949b04ab48607def0258b775 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.24.7, @babel/helper-validator-identifier@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-identifier@npm:7.25.9" - checksum: 10/3f9b649be0c2fd457fa1957b694b4e69532a668866b8a0d81eabfa34ba16dbf3107b39e0e7144c55c3c652bf773ec816af8df4a61273a2bb4eb3145ca9cf478e - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-option@npm:7.24.7" - checksum: 10/9689166bf3f777dd424c026841c8cd651e41b21242dbfd4569a53086179a3e744c8eddd56e9d10b54142270141c91581b53af0d7c00c82d552d2540e2a919f7e - languageName: node - linkType: hard - -"@babel/helper-wrap-function@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-wrap-function@npm:7.24.7" - dependencies: - "@babel/helper-function-name": "npm:^7.24.7" - "@babel/template": "npm:^7.24.7" - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10/1c248accfbb09a891293840506e3fbfc807b524abf16fc32115a6e73f760387d2dc7935282b48caa281c8033bf93dc80eca7649250524cfb95da8643771bca02 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/helpers@npm:7.24.4" - dependencies: - "@babel/template": "npm:^7.24.0" - "@babel/traverse": "npm:^7.24.1" - "@babel/types": "npm:^7.24.0" - checksum: 10/54a9d0f86f2803fcc216cfa23b66b871ea0fa0a892af1c9a79075872c2437de71afbb150ed8216f30e00b19a0b9c5c9d5845173d170e1ebfbbf8887839b89dde - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/highlight@npm:7.24.7" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.24.7" - chalk: "npm:^2.4.2" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10/69b73f38cdd4f881b09b939a711e76646da34f4834f4ce141d7a49a6bb1926eab1c594148970a8aa9360398dff800f63aade4e81fafdd7c8d8a8489ea93bfec1 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.18.4, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.24.7, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.2": - version: 7.26.2 - resolution: "@babel/parser@npm:7.26.2" - dependencies: - "@babel/types": "npm:^7.26.0" - bin: - parser: ./bin/babel-parser.js - checksum: 10/8baee43752a3678ad9f9e360ec845065eeee806f1fdc8e0f348a8a0e13eef0959dabed4a197c978896c493ea205c804d0a1187cc52e4a1ba017c7935bab4983d - languageName: node - linkType: hard - -"@babel/parser@npm:^7.25.3": - version: 7.26.3 - resolution: "@babel/parser@npm:7.26.3" - dependencies: - "@babel/types": "npm:^7.26.3" - bin: - parser: ./bin/babel-parser.js - checksum: 10/e7e3814b2dc9ee3ed605d38223471fa7d3a84cbe9474d2b5fa7ac57dc1ddf75577b1fd3a93bf7db8f41f28869bda795cddd80223f980be23623b6434bf4c88a8 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.7" - dependencies: - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/d5091ca6b58c54316c4d3b6e8120a1bb70cfe2e61cb7ec11f5fdc8ba3ff5124de21e527fabc28f239bf6efc0660046aa416e8fc1e3d920d0e57b78edb507ec3f - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/f0e0e9bdcf5479f8c5b4494353dc64dee37205e5ffd30920e649e75537a8f795cdcf32dfb40a00e908469a5d61cf62806bc359294cb2a6f2e604bf4efe086301 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.13.0 - checksum: 10/887f1b8bd0ef61206ece47919fda78a32eef35da31c0d95ab8d7adc8b4722534dc5177c86c8d6d81bcf4343f3c08c6adab2b46cfd2bea8e33c6c04e51306f9cc - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.24.7" - dependencies: - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/ad63317eb72ca7e160394e9223768b1f826287eaf65297f2794d0203510225f20dd9858bce217af4a050754abf94565841617b45b35a2de355c4e2bba546b39c - languageName: node - linkType: hard - -"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.16.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.18.6" - "@babel/helper-plugin-utils": "npm:^7.18.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 - languageName: node - linkType: hard - -"@babel/plugin-proposal-decorators@npm:^7.16.4": - version: 7.22.5 - resolution: "@babel/plugin-proposal-decorators@npm:7.22.5" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.5" - "@babel/helper-split-export-declaration": "npm:^7.22.5" - "@babel/plugin-syntax-decorators": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/20ac13815a1bed08b5b4fcc6fdcb420842964ff25564cdd28099cd3e7f265321dcba2a2f9874e99a3206dc418fd166cc8f0f99a093cc4bca94e01bbfdef7469c - languageName: node - linkType: hard - -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/949c9ddcdecdaec766ee610ef98f965f928ccc0361dd87cf9f88cf4896a6ccd62fce063d4494778e50da99dea63d270a1be574a62d6ab81cbe9d85884bf55a7d - languageName: node - linkType: hard - -"@babel/plugin-proposal-numeric-separator@npm:^7.16.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-numeric-separator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.18.6" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/f370ea584c55bf4040e1f78c80b4eeb1ce2e6aaa74f87d1a48266493c33931d0b6222d8cee3a082383d6bb648ab8d6b7147a06f974d3296ef3bc39c7851683ec - languageName: node - linkType: hard - -"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0": - version: 7.20.7 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" - dependencies: - "@babel/compat-data": "npm:^7.20.5" - "@babel/helper-compilation-targets": "npm:^7.20.7" - "@babel/helper-plugin-utils": "npm:^7.20.2" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-transform-parameters": "npm:^7.20.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/cb0f8f2ff98d7bb64ee91c28b20e8ab15d9bc7043f0932cbb9e51e1bbfb623b12f206a1171e070299c9cf21948c320b710d6d72a42f68a5bfd2702354113a1c5 - languageName: node - linkType: hard - -"@babel/plugin-proposal-optional-chaining@npm:^7.16.0": - version: 7.21.0 - resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.20.0" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/522cd133aff5c94c0ef36ff83c64f03deee183815da68b65b6950e81972ace3b514e032df07ea76d0f9ec8cc7a49578092907adfa17fccb4612117557c04a882 - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-methods@npm:^7.16.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-private-methods@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.18.6" - "@babel/helper-plugin-utils": "npm:^7.18.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/22d8502ee96bca99ad2c8393e8493e2b8d4507576dd054490fd8201a36824373440106f5b098b6d821b026c7e72b0424ff4aeca69ed5f42e48f029d3a156d5ad - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": - version: 7.21.0-placeholder-for-preset-env.2 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/fab70f399aa869275690ec6c7cedb4ef361d4e8b6f55c3d7b04bfee61d52fb93c87cec2c65d73cddbaca89fb8ef5ec0921fce675c9169d9d51f18305ab34e78a - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:^7.16.7": - version: 7.21.11 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.11" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.18.6" - "@babel/helper-create-class-features-plugin": "npm:^7.21.0" - "@babel/helper-plugin-utils": "npm:^7.20.2" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/f803b5e1de0cb7c53f0d7f70bfbf57f2b3a20d95c19f8f2710719c4938149b490ee14d2d0c2f8316080823f0943c6cb8668fa8c139420e7bc7f80a66bfd50fff - languageName: node - linkType: hard - -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 - languageName: node - linkType: hard - -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.0.0, @babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.12.13" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 - languageName: node - linkType: hard - -"@babel/plugin-syntax-decorators@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-syntax-decorators@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/2f7bcaf80790bb4abc1d09e07b2c74373c96238961dff2a7bccf741f8261403ab47de997dc6d1735e747a36b299e54a4efac60276158799cbd1353b2cf3f1ed7 - languageName: node - linkType: hard - -"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd - languageName: node - linkType: hard - -"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a - languageName: node - linkType: hard - -"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-syntax-flow@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/84c8c40fcfe8e78cecdd6fb90e8f97f419e3f3b27a33de8324ae97d5ce1b87cdd98a636fa21a68d4d2c37c7d63f3a279bb84b6956b849921affed6b806b6ffe7 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-assertions@npm:^7.20.0, @babel/plugin-syntax-import-assertions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/bd065cd73ae3dbe69e6f9167aa605da3df77d69bbad2ede95e4aa9e7af7744d5bc1838b928c77338ca62df7691a7adf6e608279be50c18e4b3c70cf77e3013d7 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/22fc50bd85a491bb8d22065f330a41f60d66f2f2d7a1deb73e80c8a4b5d7a42a092a03f8da18800650eca0fc14585167cc4e5c9fab351f0d390d1592347162ae - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-jsx@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/a93516ae5b34868ab892a95315027d4e5e38e8bd1cfca6158f2974b0901cbb32bbe64ea10ad5b25f919ddc40c6d8113c4823372909c9c9922170c12b0b1acecb - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.22.5": - version: 7.25.9 - resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.9" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/bb609d1ffb50b58f0c1bac8810d0e46a4f6c922aa171c458f3a19d66ee545d36e782d3bffbbc1fed0dc65a558bdce1caf5279316583c0fff5a2c1658982a8563 - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.0.0, @babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 - languageName: node - linkType: hard - -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.24.7, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.24.7 - resolution: "@babel/plugin-syntax-typescript@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/2518cc06323f5673c93142935879c112fea0ee836dfa9a9ec744fc972fdeaf22a06fe631c23817562aaaddadf64626a4fbba98c300b3e2c828f48f0f1cca0ce0 - languageName: node - linkType: hard - -"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" - "@babel/helper-plugin-utils": "npm:^7.18.6" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/a651d700fe63ff0ddfd7186f4ebc24447ca734f114433139e3c027bc94a900d013cf1ef2e2db8430425ba542e39ae160c3b05f06b59fd4656273a3df97679e9c - languageName: node - linkType: hard - -"@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/6720173645826046878015c579c2ca9d93cdba79a2832f0180f5cf147d9817c85bf9c8338b16d6bdaa71f87809b7a194a6902e6c82ec00b6354aca6b40abe5e6 - languageName: node - linkType: hard - -"@babel/plugin-transform-async-generator-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.24.7" - dependencies: - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-remap-async-to-generator": "npm:^7.24.7" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/cf0a4b5ffc6d7f3f3bf12d4792535e8a46332714211326fd5058a6e45988891ee402b26cb9cc6c7121b2c8283ebd160e431827f885bdfa51d6127f934bd9ba7f - languageName: node - linkType: hard - -"@babel/plugin-transform-async-to-generator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.7" - dependencies: - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-remap-async-to-generator": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/b2041d9d50b09afef983c4f1dece63fdfc5a8e4646e42591db398bc4322958434d60b3cb0f5d0f9f9dbdad8577e8a1a33ba9859aacc3004bf6d25d094d20193f - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0, @babel/plugin-transform-block-scoped-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/33e2fb9f24c11889b2bacbe9c3625f738edafc2136c8206598e0422664267ec5ca9422cb4563cc42039ccfc333fb42ce5f8513382e56c5b02f934005d0d6e8ff - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-block-scoping@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/9656e7bb0673279e18d9f9408027786f1b20d657e2cc106456e0bd7826bd12d81813299adbef2b2a5837b05740f2295fe8fb62389122d38c9e961b3005270777 - languageName: node - linkType: hard - -"@babel/plugin-transform-class-properties@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-class-properties@npm:7.24.7" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/1c6f645dd3889257028f27bfbb04526ac7676763a923fc8203aa79aa5232820e0201cb858c73b684b1922327af10304121ac013c7b756876d54560a9c1a7bc79 - languageName: node - linkType: hard - -"@babel/plugin-transform-class-static-block@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-class-static-block@npm:7.24.7" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.12.0 - checksum: 10/00b4d35788bcfefb56b6a1d3506ca23f11dd55d4bb5a34eb70397c06283dc7f596cd9d40995c4a6cb897b45ad220de211f854e7a030a05e26a307c8f56b6ba4b - languageName: node - linkType: hard - -"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-classes@npm:7.24.7" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-compilation-targets": "npm:^7.24.7" - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-function-name": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-replace-supers": "npm:^7.24.7" - "@babel/helper-split-export-declaration": "npm:^7.24.7" - globals: "npm:^11.1.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/5d5577fcb0ec9ef33d889358c54720abe462325bed5483d71f9aa0a704f491520777be5411d6fd8a08a8ebe352e2445d46d1e6577a5a2c9333bc37b9ff8b9a74 - languageName: node - linkType: hard - -"@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-computed-properties@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/template": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/fecf3c770b2dd8e70be6da12d4dd0273de9d8ef4d0f46be98d56fddb3a451932cdc9bb81de3057c9acb903e05ece657886cc31886d5762afa7b0a256db0f791e - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-destructuring@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/eec43df24a07b3c61f335883e50c6642762fdd3cc5c5f95532cebeb51ea9bf77ca9a38011b678d91549dd75e29e1c58bd6e0ebc34bb763c300bc2cc65801e663 - languageName: node - linkType: hard - -"@babel/plugin-transform-dotall-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.7" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/51b75638748f6e5adab95b711d3365b8d7757f881c178946618a43b15063ec1160b07f4aa3b116bf3f1e097a88226a01db4cae2c5c4aad4c71fe5568828a03f5 - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-keys@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/4284d8fe058c838f80d594bace1380ce02995fa9a271decbece59c40815bc2f7e715807dcbe4d5da8b444716e6d05cc6d79771f500fb044cd0dd00ce4324b619 - languageName: node - linkType: hard - -"@babel/plugin-transform-dynamic-import@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/e949c02aa57098d916eb6edcbef0f3f7d62640f37e1a061b0692523964e081f8182f2c4292173b4dbea4edb8d146e65d6a20ce4b6b5f8c33be34bd846ae114ea - languageName: node - linkType: hard - -"@babel/plugin-transform-exponentiation-operator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.7" - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/014b211f73a524ee98441541ddc4f6b067eefcf94d509e99074a45ea8c3f3ad0e36cab6f5f96666ac05b747a21fa6fda949aa25153656bb2821545a4b302e0d4 - languageName: node - linkType: hard - -"@babel/plugin-transform-export-namespace-from@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/d59d21945d2fd1ead914bb21f909f75b70ebe0e7627c2b1326ce500babca4c8e4a2513af6899d92e06e87186c61ee5087209345f5102fb4ff5a0e47e7b159a2c - languageName: node - linkType: hard - -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.16.0": - version: 7.22.5 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-flow": "npm:^7.22.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/0657042178061517cd5641a9a5eed1251aa1d8cf93a4111568ae663773854a1e8f6af167ecae042237d261389751dc5ee32ba12a15e65e41af29d04150005cab - languageName: node - linkType: hard - -"@babel/plugin-transform-for-of@npm:^7.0.0, @babel/plugin-transform-for-of@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-for-of@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/ea471ad1345f1153f7f72f1f084e74f48dc349272ca1b2d8710b841b015c9861d673e12c3c98d42ab3c640cb6ab88bb9a8da1f4ca9c57a8f71f00815fa23ecef - languageName: node - linkType: hard - -"@babel/plugin-transform-function-name@npm:^7.0.0, @babel/plugin-transform-function-name@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-function-name@npm:7.24.7" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.24.7" - "@babel/helper-function-name": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/9d4dcffea45acd255fed4a97e372ada234579f9bae01a4d0ced657091f159edf1635ff2a666508a08f8e59390def09ae6ce8372679faad894aa6f3247728ebe1 - languageName: node - linkType: hard - -"@babel/plugin-transform-json-strings@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-json-strings@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/5549dc97fc2d429a089d14ccfd51d8b3ba23c39b79edfe6d754e804fb1d50e6a4c070e73550be514a919c4db1553d8e6f7406178d68756b5959afe025a602cb2 - languageName: node - linkType: hard - -"@babel/plugin-transform-literals@npm:^7.0.0, @babel/plugin-transform-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-literals@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/bf341a5a0ffb5129670ac9a14ea53b67bd1d3d0e13173ce7ac2d4184c4b405d33f67df68c59a2e94a895bf80269ec1df82c011d9ddb686f9f08a40c37b881177 - languageName: node - linkType: hard - -"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/e39581cf1f9a43330b8340177c618fdb3232deb03faab1937819ef39327660a1fe94fd0ec2f66d1f5b5f98acba68871a77a9931588011c13dded3d7094ecc9de - languageName: node - linkType: hard - -"@babel/plugin-transform-member-expression-literals@npm:^7.0.0, @babel/plugin-transform-member-expression-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/837b60ea42fc69a430c8f7fb124247ba009ff6d93187a521fe9f83556fe124715bd46533b1684a3e139f272849a14d1d4faf3397bde13714f99ce0938526ea6f - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-amd@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-modules-amd@npm:7.24.7" - dependencies: - "@babel/helper-module-transforms": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/66465ffba49af7a7b7a62995eb58f591ecd23ab42b0c67f8a70020177b3789d2a379bd6cbb68cbd09a69fd75c38a91f5a09ea70f5c8347bf4c6ea81caa0f6c6b - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.7" - dependencies: - "@babel/helper-module-transforms": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-simple-access": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/9bd10cd03cce138a644f4e671025058348d8ff364253122bed60f9a2a32759445b93e8a6501773491cb19906602b18fd26255df0caac425343a1584599b36b24 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-systemjs@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.24.7" - dependencies: - "@babel/helper-hoist-variables": "npm:^7.24.7" - "@babel/helper-module-transforms": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-validator-identifier": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/14f0ed1a252a2a04e075cd9051b809e33cd45374a2495dc0a428517893b8e951819acc8343c61d348c51ba54e42660bc93990a77aa3460d16a1c21d52d9c2cf1 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-umd@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-modules-umd@npm:7.24.7" - dependencies: - "@babel/helper-module-transforms": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/cef9c8917b3c35c3b6cb424dc2e6f74016122f1d25c196e2c7e51eb080d95e96c5d34966c0d5b9d4e17b8e60d455a97ed271317ed104e0e70bff159830a59678 - languageName: node - linkType: hard - -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.24.7" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/b0ecb1afd22946b21fb8f34e826cfbfea4b5337f7592a5ff8af7937eddec4440149c59d2d134b4f21b2ed91b57611f39b19827729e19d99b7c11eaf614435f83 - languageName: node - linkType: hard - -"@babel/plugin-transform-new-target@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-new-target@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/91b6a7439b7622f80dc755ddfb9ab083355bedc0b2af18e7c7a948faed14467599609331c8d59cfab4273640e3fc36e4cd02ad5b6dcb4a428f5a8baefc507acc - languageName: node - linkType: hard - -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/113cd24b6ce4d0a8e54ad9324428244942ce752a3fd38f8b615c3a786641ec18a00a01b662fe4cbebf369358f5904a975bbde0a977b839f2438b16f0d7d1dd36 - languageName: node - linkType: hard - -"@babel/plugin-transform-numeric-separator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/dc5bb0534889d207b1da125635471c42da61a4a4e9e68855f24b1cd04ccdcf8325b2c29112e719913c2097242e7e62d660e0fea2a46f3a9a983c9d02a0ec7a04 - languageName: node - linkType: hard - -"@babel/plugin-transform-object-rest-spread@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.7" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-transform-parameters": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/d586995dc3396bbf8fb75b84f0a3548d923e4c3500bb414641a7fe30762a4ffd82987887fece6381f600d8de2da1e3310fc9a725271724d35f9020fcd5d4b2a3 - languageName: node - linkType: hard - -"@babel/plugin-transform-object-super@npm:^7.0.0, @babel/plugin-transform-object-super@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-object-super@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-replace-supers": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/382739a017972d7126416b958ea81b4b950b6275414908a54bfef6aeed9b9fcc6c8d247db3a1134b09a3b355a60039670ce41ee41c626f8acec70f49c3c8d2a6 - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/605ae3764354e83f73c1e6430bac29e308806abcce8d1369cf69e4921771ff3592e8f60ba60c15990070d79b8d8740f0841069d64b466b3ce8a8c43e9743da7e - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-chaining@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/0835caa8fa8561ba5da8edb82aee93aef8e5145eae33e5400569bb4fae879c596cd35d3bfe7519b222261fc370b1291c499870ca6ad9903e1a71cfaaa27a5454 - languageName: node - linkType: hard - -"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-parameters@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/41ff6bda926fabfb2e5d90b70621f279330691bed92009297340a8e776cfe9c3f2dda6afbc31dd3cbdccdfa9a5c57f2046e3ccc84f963c3797356df003d1703a - languageName: node - linkType: hard - -"@babel/plugin-transform-private-methods@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-private-methods@npm:7.24.7" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/5338df2aae53c43e6a7ea0c44f20a1100709778769c7e42d4901a61945c3200ba0e7fca83832f48932423a68528219fbea233cb5b8741a2501fdecbacdc08292 - languageName: node - linkType: hard - -"@babel/plugin-transform-private-property-in-object@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.7" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/a23ee18340818e292abfcb98b1086a188c81d640b1045e6809e9a3e8add78f9cb26607774de4ed653cbecd4277965dc4f4f1affc3504682209bb2a65fd4251f8 - languageName: node - linkType: hard - -"@babel/plugin-transform-property-literals@npm:^7.0.0, @babel/plugin-transform-property-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-property-literals@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/71708890fe007d45ad7a130150a2ba1fea0205f575b925ca2e1bb65018730636a68e65c634a474e5b658378d72871c337c953560009c081a645e088769bf168a - languageName: node - linkType: hard - -"@babel/plugin-transform-react-constant-elements@npm:^7.12.1, @babel/plugin-transform-react-constant-elements@npm:^7.21.3": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-constant-elements@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/f0e103192056c34c222d42379fc772a652e20ca89bea49f74ae1708ca0254fd1dc33b7d0dc8bd77bf2c71ed64ac7d63a3b12b6971a6cb290ee6719567cfb9a52 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-display-name@npm:^7.0.0, @babel/plugin-transform-react-display-name@npm:^7.16.0, @babel/plugin-transform-react-display-name@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-display-name@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/f5d34903680ca358c5a3ccb83421df259e5142be95dde51dc4a62ec79fd6558599b3b92b4afd37329d2567a4ba4c338f1c817f8ce0c56ddf20cd3d051498649e - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx-development@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.24.7" - dependencies: - "@babel/plugin-transform-react-jsx": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/5a158803ad71ed7c434ad047755eb98feb2c428800163ff0be1351dc06ecdd19ab503cb6a1fda8708b05decde3a9297499eb0954317af79f191b4d45135af2a2 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx@npm:7.24.7" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-jsx": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/422952e034aefdb837ebe6c2f1f5bb1e0dc4d5e515e9cc46fe752785c7039481fc7470af254e26e253f641f055240ac2968f0d25cc30ae6580c977142a7c471c - languageName: node - linkType: hard - -"@babel/plugin-transform-react-pure-annotations@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.24.7" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/c5110fa6088be5c4ac6d0f716cd032d30a246f371948b2ef30beb9eac187550ccbf972aa02051e780321917e1d9d85325623f68742c91e0355d238a8f5422179 - languageName: node - linkType: hard - -"@babel/plugin-transform-regenerator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-regenerator@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - regenerator-transform: "npm:^0.15.2" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/70fa2bb36d3e2ce69a25c7227da8ad92307ab7b50cb6dfcc4dc5ce8f1cc79b0fcf997292a1cb3b4ae7cb136f515d1b2c3fb78c927bdba8d719794430403eb0c6 - languageName: node - linkType: hard - -"@babel/plugin-transform-reserved-words@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-reserved-words@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/64a2669671bb97c3dee3830a82c3e932fe6e02d56a4053c6ee4453d317b5f436d3d44907fbb0f4fbd8a56ebee34f6aee250e49743b7243d14d00c069215f3113 - languageName: node - linkType: hard - -"@babel/plugin-transform-runtime@npm:^7.16.4": - version: 7.22.5 - resolution: "@babel/plugin-transform-runtime@npm:7.22.5" - dependencies: - "@babel/helper-module-imports": "npm:^7.22.5" - "@babel/helper-plugin-utils": "npm:^7.22.5" - babel-plugin-polyfill-corejs2: "npm:^0.4.3" - babel-plugin-polyfill-corejs3: "npm:^0.8.1" - babel-plugin-polyfill-regenerator: "npm:^0.5.0" - semver: "npm:^6.3.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/220bd91a3cad95cd18b31a111d3e51782ba0da9686c5204ebf495c31e40519a582943dcdb6642604f349095ffb0c225b5d0d775d6ee30e7b7fb7ededab79770e - languageName: node - linkType: hard - -"@babel/plugin-transform-shorthand-properties@npm:^7.0.0, @babel/plugin-transform-shorthand-properties@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/c68c2be965007e0cb6667daa209bc0af877cab4b327ef2e21b2114c38554243c3f7fdcc5b03679b20f72a26d966aa646af771f3165c882067e85a3887647f028 - languageName: node - linkType: hard - -"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-spread@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/76e2c8544129d727d5a698e2a67d74e438bc35df843adb5f769316ec432c5e1bbb4128123a95b2fe8ef0aec7b26d87efe81d64326291c77ad757ff184d38448a - languageName: node - linkType: hard - -"@babel/plugin-transform-sticky-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/3b9a99ae043ef363c81bfb097fa7a553fcf7c7d9fddc13dd2b47b3b2e45cf2741a9ca78cfe55f463983b043b365f0f8452f2d5eaadbdea20e6d6de50c16bed25 - languageName: node - linkType: hard - -"@babel/plugin-transform-template-literals@npm:^7.0.0, @babel/plugin-transform-template-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-template-literals@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/ecf05a8511176d5570cb0d481577a407a4e8a9a430f86522d809e0ac2c823913e854ef9e2a1c83c0bd7c12489d82e1b48fabb52e697e80d6a6962125197593ca - languageName: node - linkType: hard - -"@babel/plugin-transform-typeof-symbol@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/c07847a3bcb27509d392de7a59b9836669b90ca508d4b63b36bb73b63413bc0b2571a64410b65999a73abeac99957b31053225877dcbfaf4eb21d8cc0ae4002f - languageName: node - linkType: hard - -"@babel/plugin-transform-typescript@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-typescript@npm:7.24.7" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-typescript": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/6a4af5a96a90f08ea679829abc558b8478b8b31b40c84b887f2859110b75ab2c8c48a2cf80193621d988a6b064aefef2a74ea3ccc310166219f87959d06a3033 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-escapes@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/6b8bca3495acedc89e880942de7b83c263fb5b4c9599594dcf3923e2128ae25f1f4725a295fe101027f75d8ef081ef28319296adf274b5022e57039e42836103 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-property-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.7" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/c0c284bbbdead7e17e059d72e1b288f86b0baacc410398ef6c6c703fe4326b069e68515ccb84359601315cd8e888f9226731d00624b7c6959b1c0853f072b61f - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.7" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/b545310d0d592d75566b9cd158f4b8951e34d07d839656789d179b39b3fd92b32bd387cdfaf33a93e636609f3bfb9bb03d41f3e43be598116c9c6c80cc3418c4 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.7" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/183b72d5987dc93f9971667ce3f26d28b0e1058e71b129733dd9d5282aecba4c062b67c9567526780d2defd2bfbf950ca58d8306dc90b2761fd1e960d867ddb7 - languageName: node - linkType: hard - -"@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.20.2": - version: 7.24.7 - resolution: "@babel/preset-env@npm:7.24.7" - dependencies: - "@babel/compat-data": "npm:^7.24.7" - "@babel/helper-compilation-targets": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-validator-option": "npm:^7.24.7" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.24.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.24.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.24.7" - "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-class-properties": "npm:^7.12.13" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" - "@babel/plugin-syntax-import-assertions": "npm:^7.24.7" - "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" - "@babel/plugin-syntax-import-meta": "npm:^7.10.4" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.24.7" - "@babel/plugin-transform-async-generator-functions": "npm:^7.24.7" - "@babel/plugin-transform-async-to-generator": "npm:^7.24.7" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.24.7" - "@babel/plugin-transform-block-scoping": "npm:^7.24.7" - "@babel/plugin-transform-class-properties": "npm:^7.24.7" - "@babel/plugin-transform-class-static-block": "npm:^7.24.7" - "@babel/plugin-transform-classes": "npm:^7.24.7" - "@babel/plugin-transform-computed-properties": "npm:^7.24.7" - "@babel/plugin-transform-destructuring": "npm:^7.24.7" - "@babel/plugin-transform-dotall-regex": "npm:^7.24.7" - "@babel/plugin-transform-duplicate-keys": "npm:^7.24.7" - "@babel/plugin-transform-dynamic-import": "npm:^7.24.7" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.24.7" - "@babel/plugin-transform-export-namespace-from": "npm:^7.24.7" - "@babel/plugin-transform-for-of": "npm:^7.24.7" - "@babel/plugin-transform-function-name": "npm:^7.24.7" - "@babel/plugin-transform-json-strings": "npm:^7.24.7" - "@babel/plugin-transform-literals": "npm:^7.24.7" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.7" - "@babel/plugin-transform-member-expression-literals": "npm:^7.24.7" - "@babel/plugin-transform-modules-amd": "npm:^7.24.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.24.7" - "@babel/plugin-transform-modules-systemjs": "npm:^7.24.7" - "@babel/plugin-transform-modules-umd": "npm:^7.24.7" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.24.7" - "@babel/plugin-transform-new-target": "npm:^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.24.7" - "@babel/plugin-transform-numeric-separator": "npm:^7.24.7" - "@babel/plugin-transform-object-rest-spread": "npm:^7.24.7" - "@babel/plugin-transform-object-super": "npm:^7.24.7" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.24.7" - "@babel/plugin-transform-parameters": "npm:^7.24.7" - "@babel/plugin-transform-private-methods": "npm:^7.24.7" - "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" - "@babel/plugin-transform-property-literals": "npm:^7.24.7" - "@babel/plugin-transform-regenerator": "npm:^7.24.7" - "@babel/plugin-transform-reserved-words": "npm:^7.24.7" - "@babel/plugin-transform-shorthand-properties": "npm:^7.24.7" - "@babel/plugin-transform-spread": "npm:^7.24.7" - "@babel/plugin-transform-sticky-regex": "npm:^7.24.7" - "@babel/plugin-transform-template-literals": "npm:^7.24.7" - "@babel/plugin-transform-typeof-symbol": "npm:^7.24.7" - "@babel/plugin-transform-unicode-escapes": "npm:^7.24.7" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.24.7" - "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.24.7" - "@babel/preset-modules": "npm:0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2: "npm:^0.4.10" - babel-plugin-polyfill-corejs3: "npm:^0.10.4" - babel-plugin-polyfill-regenerator: "npm:^0.6.1" - core-js-compat: "npm:^3.31.0" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/2fd90c46efefadb48dae6d13de190ac48753af187ee394924cf532c79870ebb87658bd31f06649630827a478b17a4adc41717cc6d4c460ff2ed9fafa51e5b515 - languageName: node - linkType: hard - -"@babel/preset-modules@npm:0.1.6-no-external-plugins": - version: 0.1.6-no-external-plugins - resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@babel/types": "npm:^7.4.4" - esutils: "npm:^2.0.2" - peerDependencies: - "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 - checksum: 10/039aba98a697b920d6440c622aaa6104bb6076d65356b29dad4b3e6627ec0354da44f9621bafbeefd052cd4ac4d7f88c9a2ab094efcb50963cb352781d0c6428 - languageName: node - linkType: hard - -"@babel/preset-react@npm:^7.12.5, @babel/preset-react@npm:^7.16.0, @babel/preset-react@npm:^7.18.6": - version: 7.24.7 - resolution: "@babel/preset-react@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-validator-option": "npm:^7.24.7" - "@babel/plugin-transform-react-display-name": "npm:^7.24.7" - "@babel/plugin-transform-react-jsx": "npm:^7.24.7" - "@babel/plugin-transform-react-jsx-development": "npm:^7.24.7" - "@babel/plugin-transform-react-pure-annotations": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/e861e6b923e8eacb01c2e931310b4a5b2ae2514a089a37390051700d1103ab87003f2abc0b389a12db7be24971dd8eaabee794b799d3e854cb0c22ba07a33100 - languageName: node - linkType: hard - -"@babel/preset-typescript@npm:^7.16.0, @babel/preset-typescript@npm:^7.21.0": - version: 7.24.7 - resolution: "@babel/preset-typescript@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-validator-option": "npm:^7.24.7" - "@babel/plugin-syntax-jsx": "npm:^7.24.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.24.7" - "@babel/plugin-transform-typescript": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/995e9783f8e474581e7533d6b10ec1fbea69528cc939ad8582b5937e13548e5215d25a8e2c845e7b351fdaa13139896b5e42ab3bde83918ea4e41773f10861ac - languageName: node - linkType: hard - -"@babel/regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "@babel/regjsgen@npm:0.8.0" - checksum: 10/c57fb730b17332b7572574b74364a77d70faa302a281a62819476fa3b09822974fd75af77aea603ad77378395be64e81f89f0e800bf86cbbf21652d49ce12ee8 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7": - version: 7.26.0 - resolution: "@babel/runtime@npm:7.26.0" - dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 10/9f4ea1c1d566c497c052d505587554e782e021e6ccd302c2ad7ae8291c8e16e3f19d4a7726fb64469e057779ea2081c28b7dbefec6d813a22f08a35712c0f699 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.26.10": - version: 7.27.0 - resolution: "@babel/runtime@npm:7.27.0" - dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 10/e6966e03b695feb4c0ac0856a4355231c2580bf9ebd0298f47739f85c0ea658679dd84409daf26378d42c86c1cbe7e33feab709b14e784254b6c441d91606465 - languageName: node - linkType: hard - -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.24.0, @babel/template@npm:^7.24.7, @babel/template@npm:^7.3.3": - version: 7.24.7 - resolution: "@babel/template@npm:7.24.7" - dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/parser": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10/5975d404ef51cf379515eb0f80b115981d0b9dff5539e53a47516644abb8c83d7559f5b083eb1d4977b20d8359ebb2f911ccd4f729143f8958fdc465f976d843 - languageName: node - linkType: hard - -"@babel/template@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/template@npm:7.25.9" - dependencies: - "@babel/code-frame": "npm:^7.25.9" - "@babel/parser": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10/e861180881507210150c1335ad94aff80fd9e9be6202e1efa752059c93224e2d5310186ddcdd4c0f0b0fc658ce48cb47823f15142b5c00c8456dde54f5de80b2 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.24.1, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.7.2": - version: 7.24.7 - resolution: "@babel/traverse@npm:7.24.7" - dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.24.7" - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-function-name": "npm:^7.24.7" - "@babel/helper-hoist-variables": "npm:^7.24.7" - "@babel/helper-split-export-declaration": "npm:^7.24.7" - "@babel/parser": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10/785cf26383a992740e492efba7016de964cd06c05c9d7146fa1b5ead409e054c444f50b36dc37856884a56e32cf9d3105ddf1543486b6df68300bffb117a245a - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.4.5": - version: 7.25.9 - resolution: "@babel/traverse@npm:7.25.9" - dependencies: - "@babel/code-frame": "npm:^7.25.9" - "@babel/generator": "npm:^7.25.9" - "@babel/parser": "npm:^7.25.9" - "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10/7431614d76d4a053e429208db82f2846a415833f3d9eb2e11ef72eeb3c64dfd71f4a4d983de1a4a047b36165a1f5a64de8ca2a417534cc472005c740ffcb9c6a - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.6, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": - version: 7.26.0 - resolution: "@babel/types@npm:7.26.0" - dependencies: - "@babel/helper-string-parser": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10/40780741ecec886ed9edae234b5eb4976968cc70d72b4e5a40d55f83ff2cc457de20f9b0f4fe9d858350e43dab0ea496e7ef62e2b2f08df699481a76df02cd6e - languageName: node - linkType: hard - -"@babel/types@npm:^7.26.3": - version: 7.26.3 - resolution: "@babel/types@npm:7.26.3" - dependencies: - "@babel/helper-string-parser": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10/c31d0549630a89abfa11410bf82a318b0c87aa846fbf5f9905e47ba5e2aa44f41cc746442f105d622c519e4dc532d35a8d8080460ff4692f9fc7485fbf3a00eb - languageName: node - linkType: hard - -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 10/1a1f0e356a3bb30b5f1ced6f79c413e6ebacf130421f15fac5fcd8be5ddf98aedb4404d7f5624e3285b700e041f9ef938321f3ca4d359d5b716f96afa120d88d - languageName: node - linkType: hard - -"@bigmi/client@npm:^0.1.0": - version: 0.1.0 - resolution: "@bigmi/client@npm:0.1.0" - dependencies: - "@bigmi/core": "npm:^0.1.0" - "@wagmi/core": "npm:^2.16.3" - viem: "npm:^2.21.59" - peerDependencies: - wagmi: ^2.14.0 - checksum: 10/bfb2e26531d4e6659c5f91db58488799369807eb0fa3b374831ff5ac03fef31af6ab4301d7f833535261ec38c9a6f9cdaeaadfc1125080f3f282fc01ed33d802 - languageName: node - linkType: hard - -"@bigmi/client@npm:^0.1.1": - version: 0.1.1 - resolution: "@bigmi/client@npm:0.1.1" - dependencies: - "@bigmi/core": "npm:^0.1.1" - "@wagmi/core": "npm:^2.16.3" - viem: "npm:^2.22.21" - peerDependencies: - wagmi: ^2.14.0 - checksum: 10/5d03c23c40f814b31b70abbf1ef770b52182f5265dc09db6896f0399499c32dc32a3259794d1a3307f9a9708b69ad947465fd8aae745761fdb2cc314d287192d - languageName: node - linkType: hard - -"@bigmi/core@npm:^0.1.0": - version: 0.1.0 - resolution: "@bigmi/core@npm:0.1.0" - dependencies: - "@noble/hashes": "npm:^1.6.1" - bech32: "npm:^2.0.0" - bitcoinjs-lib: "npm:^7.0.0-rc.0" - bs58: "npm:^6.0.0" - viem: "npm:^2.21.59" - peerDependencies: - bs58: ^6.0.0 - checksum: 10/c7eb449586c06c9fec170235fb064da6b56e7883e15524bdb5116d0e86af65637ccb55bf68bba044a569ecffa6878b5d9c2fa527a47a5135f7a015f43c21a201 - languageName: node - linkType: hard - -"@bigmi/core@npm:^0.1.1": - version: 0.1.1 - resolution: "@bigmi/core@npm:0.1.1" - dependencies: - "@noble/hashes": "npm:^1.7.1" - bech32: "npm:^2.0.0" - bitcoinjs-lib: "npm:^7.0.0-rc.0" - bs58: "npm:^6.0.0" - viem: "npm:^2.22.21" - peerDependencies: - bs58: ^6.0.0 - checksum: 10/77fc4c9d68fac6d7f3c7802be8a7109df6f4320e3aae1532dcf73b1c162c91fd9de563e63a86c565df9e6ec6e50d1d999e675b54287d5e1454332ce9d7e95605 - languageName: node - linkType: hard - -"@bigmi/react@npm:^0.1.0": - version: 0.1.0 - resolution: "@bigmi/react@npm:0.1.0" - dependencies: - "@bigmi/client": "npm:^0.1.0" - "@bigmi/core": "npm:^0.1.0" - use-sync-external-store: "npm:^1.4.0" - viem: "npm:^2.21.59" - peerDependencies: - react: ">=18" - react-dom: ">=18" - wagmi: ^2.14.0 - checksum: 10/89855a59a2aee3166e1e69e9ba50f628b342dede547e5ef65cf33418e9707a7d84a37339140e2defee14632bf1278b98c64c160a368c661d76cb1f1c402c0307 - languageName: node - linkType: hard - -"@bytecodealliance/preview2-shim@npm:0.17.0": - version: 0.17.0 - resolution: "@bytecodealliance/preview2-shim@npm:0.17.0" - checksum: 10/28a273227d8e8f2b61ad0260be612fd854ace756784c409c6ac4b65bf6b48426e6c058e45c07675303ef844a981fbdda7257df9833ca12bd3e5e4a0480ca5193 - languageName: node - linkType: hard - -"@chainlink/contracts@npm:^1.4.0": - version: 1.4.0 - resolution: "@chainlink/contracts@npm:1.4.0" - dependencies: - "@arbitrum/nitro-contracts": "npm:3.0.0" - "@changesets/cli": "npm:~2.28.1" - "@changesets/get-github-info": "npm:^0.6.0" - "@eth-optimism/contracts": "npm:0.6.0" - "@openzeppelin/contracts": "npm:4.9.6" - "@openzeppelin/contracts-upgradeable": "npm:4.9.6" - "@scroll-tech/contracts": "npm:0.1.0" - "@zksync/contracts": "github:matter-labs/era-contracts#446d391d34bdb48255d5f8fef8a8248925fc98b9" - semver: "npm:^7.7.1" - checksum: 10/df6259b00fbed15cbe4723ce4ff93e2d2d49dc2463b5851f6ffc7b4c07ee3a3d517fb5b3a44adae06cf9bd7aa0cd26185b4fe0ee4a0ad16a9c5f9440b73ec9ac - languageName: node - linkType: hard - -"@chainsafe/is-ip@npm:^2.0.1": - version: 2.0.1 - resolution: "@chainsafe/is-ip@npm:2.0.1" - checksum: 10/ae4487dd8135c6ca4a432243d18c1d3acd4128f6330c5a7f08477623a4c55c744115ca106673d0c3132294c1a360470bf6581c565519981f90b1c37f8189375b - languageName: node - linkType: hard - -"@chainsafe/netmask@npm:^2.0.0": - version: 2.0.0 - resolution: "@chainsafe/netmask@npm:2.0.0" - dependencies: - "@chainsafe/is-ip": "npm:^2.0.1" - checksum: 10/fa696cdffd8b80efc76b988902655976aae4fd80cf1ff51db849c0476cc477d1bb0e50bf2700162dfa2aa5602b8594e7d92d6fa2235cdeb0246e4afc7f64947f - languageName: node - linkType: hard - -"@changesets/apply-release-plan@npm:^7.0.10": - version: 7.0.12 - resolution: "@changesets/apply-release-plan@npm:7.0.12" - dependencies: - "@changesets/config": "npm:^3.1.1" - "@changesets/get-version-range-type": "npm:^0.4.0" - "@changesets/git": "npm:^3.0.4" - "@changesets/should-skip-package": "npm:^0.1.2" - "@changesets/types": "npm:^6.1.0" - "@manypkg/get-packages": "npm:^1.1.3" - detect-indent: "npm:^6.0.0" - fs-extra: "npm:^7.0.1" - lodash.startcase: "npm:^4.4.0" - outdent: "npm:^0.5.0" - prettier: "npm:^2.7.1" - resolve-from: "npm:^5.0.0" - semver: "npm:^7.5.3" - checksum: 10/3ce05caa73b7b96a8a6be943507591925c44b22f209da001fb9d83df1d7a4569659e889373f5f7a208a121b3cf7bc17788969b8849bddaf13c27d6720e4e1c47 - languageName: node - linkType: hard - -"@changesets/assemble-release-plan@npm:^6.0.6, @changesets/assemble-release-plan@npm:^6.0.9": - version: 6.0.9 - resolution: "@changesets/assemble-release-plan@npm:6.0.9" - dependencies: - "@changesets/errors": "npm:^0.2.0" - "@changesets/get-dependents-graph": "npm:^2.1.3" - "@changesets/should-skip-package": "npm:^0.1.2" - "@changesets/types": "npm:^6.1.0" - "@manypkg/get-packages": "npm:^1.1.3" - semver: "npm:^7.5.3" - checksum: 10/f84656eabb700ed77f97751b282e1701636ed45a44b443abd9af0291870495cc046fee301478010f39a1dc455799065ae007b9d7d2bb5ae8b793b65bbb8e052a - languageName: node - linkType: hard - -"@changesets/changelog-git@npm:^0.2.1": - version: 0.2.1 - resolution: "@changesets/changelog-git@npm:0.2.1" - dependencies: - "@changesets/types": "npm:^6.1.0" - checksum: 10/c22f3c0baf50c102a6890046351ee42f65ff6d58747ba4f75e5e40da1ed5fbcfd0dc2d11cdfb86acbb3262e58acb93f096c798827cac570c1e22e8f32f58a30f - languageName: node - linkType: hard - -"@changesets/cli@npm:~2.28.1": - version: 2.28.1 - resolution: "@changesets/cli@npm:2.28.1" - dependencies: - "@changesets/apply-release-plan": "npm:^7.0.10" - "@changesets/assemble-release-plan": "npm:^6.0.6" - "@changesets/changelog-git": "npm:^0.2.1" - "@changesets/config": "npm:^3.1.1" - "@changesets/errors": "npm:^0.2.0" - "@changesets/get-dependents-graph": "npm:^2.1.3" - "@changesets/get-release-plan": "npm:^4.0.8" - "@changesets/git": "npm:^3.0.2" - "@changesets/logger": "npm:^0.1.1" - "@changesets/pre": "npm:^2.0.2" - "@changesets/read": "npm:^0.6.3" - "@changesets/should-skip-package": "npm:^0.1.2" - "@changesets/types": "npm:^6.1.0" - "@changesets/write": "npm:^0.4.0" - "@manypkg/get-packages": "npm:^1.1.3" - ansi-colors: "npm:^4.1.3" - ci-info: "npm:^3.7.0" - enquirer: "npm:^2.4.1" - external-editor: "npm:^3.1.0" - fs-extra: "npm:^7.0.1" - mri: "npm:^1.2.0" - p-limit: "npm:^2.2.0" - package-manager-detector: "npm:^0.2.0" - picocolors: "npm:^1.1.0" - resolve-from: "npm:^5.0.0" - semver: "npm:^7.5.3" - spawndamnit: "npm:^3.0.1" - term-size: "npm:^2.1.0" - bin: - changeset: bin.js - checksum: 10/c2cb4063bfd02147970bd629565d05d7e13b9649446997ea5c17e250ef290a1b093f2a2cfaf1e6856597aa435499758f9d6d98bfb24035533376a9d2cc7f37f2 - languageName: node - linkType: hard - -"@changesets/config@npm:^3.1.1": - version: 3.1.1 - resolution: "@changesets/config@npm:3.1.1" - dependencies: - "@changesets/errors": "npm:^0.2.0" - "@changesets/get-dependents-graph": "npm:^2.1.3" - "@changesets/logger": "npm:^0.1.1" - "@changesets/types": "npm:^6.1.0" - "@manypkg/get-packages": "npm:^1.1.3" - fs-extra: "npm:^7.0.1" - micromatch: "npm:^4.0.8" - checksum: 10/9500e02b68801f052478b3e10523bd3a39b9e5e989e718832832537c9da965580f496262c2bc3f6e23a4e6fb4303f730a69dcbf2041f68d2fa7bd03dd1f82db0 - languageName: node - linkType: hard - -"@changesets/errors@npm:^0.2.0": - version: 0.2.0 - resolution: "@changesets/errors@npm:0.2.0" - dependencies: - extendable-error: "npm:^0.1.5" - checksum: 10/4b79373f92287af4f723e8dbbccaf0299aa8735fc043243d0ad587f04a7614615ea50180be575d4438b9f00aa82d1cf85e902b77a55bdd3e0a8dd97e77b18c60 - languageName: node - linkType: hard - -"@changesets/get-dependents-graph@npm:^2.1.3": - version: 2.1.3 - resolution: "@changesets/get-dependents-graph@npm:2.1.3" - dependencies: - "@changesets/types": "npm:^6.1.0" - "@manypkg/get-packages": "npm:^1.1.3" - picocolors: "npm:^1.1.0" - semver: "npm:^7.5.3" - checksum: 10/33f2bb5dc88443b68fd796fd3b019a553fb3e21cb957a8a117db2a6770ad81f7c156ebdc3b12cfa75169de918f11271a71f61034aec48a53bf1a936d6d783e3d - languageName: node - linkType: hard - -"@changesets/get-github-info@npm:^0.6.0": - version: 0.6.0 - resolution: "@changesets/get-github-info@npm:0.6.0" - dependencies: - dataloader: "npm:^1.4.0" - node-fetch: "npm:^2.5.0" - checksum: 10/4ba61eafb0a75fa7f741885b465d90559e63581e748527e060f90c37380a02f62810db3bc79a4e74d109754d7f72dc45249e1ac2be5fcaec6a7d0f99db1cee78 - languageName: node - linkType: hard - -"@changesets/get-release-plan@npm:^4.0.8": - version: 4.0.13 - resolution: "@changesets/get-release-plan@npm:4.0.13" - dependencies: - "@changesets/assemble-release-plan": "npm:^6.0.9" - "@changesets/config": "npm:^3.1.1" - "@changesets/pre": "npm:^2.0.2" - "@changesets/read": "npm:^0.6.5" - "@changesets/types": "npm:^6.1.0" - "@manypkg/get-packages": "npm:^1.1.3" - checksum: 10/9983fae5a68012c4c418ddd62f2fb3d325363f21160252ff7b868503a1a2effb8fdd32e4a0289b72653afc3605ce19d163ff69205c942a0004efb571a5f78fd0 - languageName: node - linkType: hard - -"@changesets/get-version-range-type@npm:^0.4.0": - version: 0.4.0 - resolution: "@changesets/get-version-range-type@npm:0.4.0" - checksum: 10/9868e99b31af652d3fa08fc33d55b9636f2feed1f4efdb318a6dbb4bb061281868de089b93041ce7f2775ab9cf454b92b1199767d0f4f228d8bbc483e61d2fd8 - languageName: node - linkType: hard - -"@changesets/git@npm:^3.0.2": - version: 3.0.2 - resolution: "@changesets/git@npm:3.0.2" - dependencies: - "@changesets/errors": "npm:^0.2.0" - "@manypkg/get-packages": "npm:^1.1.3" - is-subdir: "npm:^1.1.1" - micromatch: "npm:^4.0.8" - spawndamnit: "npm:^3.0.1" - checksum: 10/de63573fecbd2ddcb8b5a7bfe18344a849810035e6fc55aa05e022d42e8cbefdfe23eebcfd34d31e84d78a616aa80ffb239b9e24abc4fc3ebaba10e619f72a24 - languageName: node - linkType: hard - -"@changesets/git@npm:^3.0.4": - version: 3.0.4 - resolution: "@changesets/git@npm:3.0.4" - dependencies: - "@changesets/errors": "npm:^0.2.0" - "@manypkg/get-packages": "npm:^1.1.3" - is-subdir: "npm:^1.1.1" - micromatch: "npm:^4.0.8" - spawndamnit: "npm:^3.0.1" - checksum: 10/4f5a1f3354ec39d530df78b198eaaf2a8ef6cca873dd18efb8706aae09cab04e0d985abd236288644fac5d10cc5cb6ba2538c3e0be023c4d80790ff841f39fa6 - languageName: node - linkType: hard - -"@changesets/logger@npm:^0.1.1": - version: 0.1.1 - resolution: "@changesets/logger@npm:0.1.1" - dependencies: - picocolors: "npm:^1.1.0" - checksum: 10/bbfc050ddd0afdaa95bb790e81894b7548a2def059deeaed1685e22c10ede245ec2264df42bb2200cc0c8bd040e427bcd68a7afcca2633dc263a28e923d7c175 - languageName: node - linkType: hard - -"@changesets/parse@npm:^0.4.1": - version: 0.4.1 - resolution: "@changesets/parse@npm:0.4.1" - dependencies: - "@changesets/types": "npm:^6.1.0" - js-yaml: "npm:^3.13.1" - checksum: 10/2973ab8f38592a80efea589e148e5bdfd6ed3af86aa9206f941b5b3955f68464bf70a5965349f642667c708ebae60e4266be538328cd27075cace3f7cc1022e3 - languageName: node - linkType: hard - -"@changesets/pre@npm:^2.0.2": - version: 2.0.2 - resolution: "@changesets/pre@npm:2.0.2" - dependencies: - "@changesets/errors": "npm:^0.2.0" - "@changesets/types": "npm:^6.1.0" - "@manypkg/get-packages": "npm:^1.1.3" - fs-extra: "npm:^7.0.1" - checksum: 10/daaedd2747492ced61f107d38f90e535607bcb073b10ffac3d9e3bcad1a4cc082370884224fc6785af2d92d37f6b0a3bf853f9759b8fda294878d00d24344415 - languageName: node - linkType: hard - -"@changesets/read@npm:^0.6.3, @changesets/read@npm:^0.6.5": - version: 0.6.5 - resolution: "@changesets/read@npm:0.6.5" - dependencies: - "@changesets/git": "npm:^3.0.4" - "@changesets/logger": "npm:^0.1.1" - "@changesets/parse": "npm:^0.4.1" - "@changesets/types": "npm:^6.1.0" - fs-extra: "npm:^7.0.1" - p-filter: "npm:^2.1.0" - picocolors: "npm:^1.1.0" - checksum: 10/fec0ac28801e0560fae0eb1d21250dd2a48aaff67bddd1b446a960afd761690d5873dca6eff369d43763bec61f1023d38a38876d5824e316e6de622dc52a24f3 - languageName: node - linkType: hard - -"@changesets/should-skip-package@npm:^0.1.2": - version: 0.1.2 - resolution: "@changesets/should-skip-package@npm:0.1.2" - dependencies: - "@changesets/types": "npm:^6.1.0" - "@manypkg/get-packages": "npm:^1.1.3" - checksum: 10/d09fcf1200ee201f0dd5b8049d90e8b5e0cfd34cc94f5c661c4cdab182a8263628733f9bc5886550a92f6f7857339d79fc77f12ffd53559b029a2bf9a2fa7ace - languageName: node - linkType: hard - -"@changesets/types@npm:^4.0.1": - version: 4.1.0 - resolution: "@changesets/types@npm:4.1.0" - checksum: 10/4d7c65a447400ac474b2dc2d79bc1a5341c305fbce4a648ef59d9939bc1bbbbd6852684c417a9a4ef0226468b9cb522b9ac2b5393f21fa5f20f1b12bee94eab5 - languageName: node - linkType: hard - -"@changesets/types@npm:^6.1.0": - version: 6.1.0 - resolution: "@changesets/types@npm:6.1.0" - checksum: 10/2dcd00712cb85d0c53afdd8d0e856b4bf9c0ce8dc36c838c918d44799aacd9ba8659b9ff610ff92b94fc03c8fd2b52c5b05418fcf8a1bd138cd9182414ede373 - languageName: node - linkType: hard - -"@changesets/write@npm:^0.4.0": - version: 0.4.0 - resolution: "@changesets/write@npm:0.4.0" - dependencies: - "@changesets/types": "npm:^6.1.0" - fs-extra: "npm:^7.0.1" - human-id: "npm:^4.1.1" - prettier: "npm:^2.7.1" - checksum: 10/bcea8431a09e282bdf66adbd8411d5d3cc19b4a2df519a42586c912b23a7b3ef18d1d0765e2d1a27ff175e2dfc9ef4c2df95cfa920dd4dd2972aaaf662afc6b9 - languageName: node - linkType: hard - -"@codemirror/autocomplete@npm:^6.18.1": - version: 6.18.6 - resolution: "@codemirror/autocomplete@npm:6.18.6" - dependencies: - "@codemirror/language": "npm:^6.0.0" - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.17.0" - "@lezer/common": "npm:^1.0.0" - checksum: 10/0574d96fd04ccf2d3b7ae3c4efe0a72f423fa81658876ec50865ce3371cea038aeddf026976ec0d0ccbee72ac66bdf7deec9106dee251ad49019ae7e1a871663 - languageName: node - linkType: hard - -"@codemirror/commands@npm:^6.7.1": - version: 6.8.1 - resolution: "@codemirror/commands@npm:6.8.1" - dependencies: - "@codemirror/language": "npm:^6.0.0" - "@codemirror/state": "npm:^6.4.0" - "@codemirror/view": "npm:^6.27.0" - "@lezer/common": "npm:^1.1.0" - checksum: 10/72b6343777d4fe4af1bcc91331eb64705b33e871c9f8e2a0cd177269478a6f3282bf25aeaecdbb55fd5e031b67aabfede068e919fe69e473d07e5090dd76b381 - languageName: node - linkType: hard - -"@codemirror/lang-json@npm:^6.0.1": - version: 6.0.1 - resolution: "@codemirror/lang-json@npm:6.0.1" - dependencies: - "@codemirror/language": "npm:^6.0.0" - "@lezer/json": "npm:^1.0.0" - checksum: 10/7ce35d345bf9b2f5d96e2502a9693c8b2e74981ccf3a7a20da48e405c2bd6067b39acfd9b31fe3bbb5f9f28ccdde5ff7c52253c6d5b3be84b29df6d5db0b3b9b - languageName: node - linkType: hard - -"@codemirror/language@npm:^6.0.0": - version: 6.10.3 - resolution: "@codemirror/language@npm:6.10.3" - dependencies: - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.23.0" - "@lezer/common": "npm:^1.1.0" - "@lezer/highlight": "npm:^1.0.0" - "@lezer/lr": "npm:^1.0.0" - style-mod: "npm:^4.0.0" - checksum: 10/75869ca19c76998cc9be76f02061b6212d389b29647cf72505a06495fba3b330003f9952ddf8762bcaa2bf4defd39fd4f240d05b3df0b28c1c4415a025bc257c - languageName: node - linkType: hard - -"@codemirror/language@npm:^6.10.3": - version: 6.11.0 - resolution: "@codemirror/language@npm:6.11.0" - dependencies: - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.23.0" - "@lezer/common": "npm:^1.1.0" - "@lezer/highlight": "npm:^1.0.0" - "@lezer/lr": "npm:^1.0.0" - style-mod: "npm:^4.0.0" - checksum: 10/571d8d18c51173c25dc3a1c1327fa2265e3d666acd2f2e3dbab828f49bc7f350159bbe8d46ee4baf88cb3eb0fbcfb3351028df6e2981455a55fd2951254c950f - languageName: node - linkType: hard - -"@codemirror/lint@npm:^6.8.2": - version: 6.8.5 - resolution: "@codemirror/lint@npm:6.8.5" - dependencies: - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.35.0" - crelt: "npm:^1.0.5" - checksum: 10/9eddfea1dd0615431d57687c2a0d4de510d725aac6f6bbc2eba4bc934963371304dfa4c49398b3043372ef34cead3ebc0ec3f652632a87f5d8a458fa911a309a - languageName: node - linkType: hard - -"@codemirror/search@npm:^6.5.6": - version: 6.5.7 - resolution: "@codemirror/search@npm:6.5.7" - dependencies: - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.0.0" - crelt: "npm:^1.0.5" - checksum: 10/0a4c5e23c42231ffb829513940ee43a630585b4277fa8cc919a947f3821c9c2dc095d334bb0e4d51b3ebb50739a34a81ddbcc39ca9c1f6f935fdaa51a86661bf - languageName: node - linkType: hard - -"@codemirror/state@npm:6.5.2": - version: 6.5.2 - resolution: "@codemirror/state@npm:6.5.2" - dependencies: - "@marijn/find-cluster-break": "npm:^1.0.0" - checksum: 10/5ccd3acb0c0a5b88e83fb91be39099fceb9f44a5047cc41a75d53f160e736851f65c8de40950b90c6519e6d2828e12f468db0af658dde30e938896f1c39eec91 - languageName: node - linkType: hard - -"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.35.0": - version: 6.35.0 - resolution: "@codemirror/view@npm:6.35.0" - dependencies: - "@codemirror/state": "npm:^6.4.0" - style-mod: "npm:^4.1.0" - w3c-keyname: "npm:^2.2.4" - checksum: 10/edf9cb81cf2c5d80cc852f924d2d86299bf30aa009cf36afb370a8e2b4b0d03ceeda2de9a809c06aa8c06fcf1c8ba0d857c3d5292813808742446435d2ed533c - languageName: node - linkType: hard - -"@codemirror/view@npm:^6.27.0": - version: 6.36.3 - resolution: "@codemirror/view@npm:6.36.3" - dependencies: - "@codemirror/state": "npm:^6.5.0" - style-mod: "npm:^4.1.0" - w3c-keyname: "npm:^2.2.4" - checksum: 10/a41b9af6c57c74cab2dc3e7a3e5a6d3912253514667878f7cacb5b889892e445e514e68200a7ac4d4c3eefc1a221ae5f7b5a85f211c3b7fdd6749475086e4dff - languageName: node - linkType: hard - -"@codemirror/view@npm:^6.34.1": - version: 6.36.5 - resolution: "@codemirror/view@npm:6.36.5" - dependencies: - "@codemirror/state": "npm:^6.5.0" - style-mod: "npm:^4.1.0" - w3c-keyname: "npm:^2.2.4" - checksum: 10/577045647432ee2c8fd88c3d70a68f3c38b10d6e4b2099f62b7d2189f6183c7c91b559e3392b64bf3258f72f9b1dfeba4a95efaee48edf88a1c14f0e4fdb1aed - languageName: node - linkType: hard - -"@coinbase/wallet-sdk@npm:4.3.0": - version: 4.3.0 - resolution: "@coinbase/wallet-sdk@npm:4.3.0" - dependencies: - "@noble/hashes": "npm:^1.4.0" - clsx: "npm:^1.2.1" - eventemitter3: "npm:^5.0.1" - preact: "npm:^10.24.2" - checksum: 10/56d24aaf5170d05fafe4cdafa06a000e259f3f9f3eae7879bcb5e1c316e5e3d85754639f31d3e366ed208f1667cb7d10d3c7bcae8e40cb5f46bea7c291d7c2bf - languageName: node - linkType: hard - -"@coinbase/wallet-sdk@npm:^4.3.2": - version: 4.3.2 - resolution: "@coinbase/wallet-sdk@npm:4.3.2" - dependencies: - "@noble/hashes": "npm:^1.4.0" - clsx: "npm:^1.2.1" - eventemitter3: "npm:^5.0.1" - preact: "npm:^10.24.2" - checksum: 10/2e6eeb060848bfb78911b2fb3875a89f49fc1e7f94bd34313b97903ed224367e982af011012afecf69d469b6acfb95eca1082e960dc67110f18caafa1d23e256 - languageName: node - linkType: hard - -"@colors/colors@npm:1.5.0": - version: 1.5.0 - resolution: "@colors/colors@npm:1.5.0" - checksum: 10/9d226461c1e91e95f067be2bdc5e6f99cfe55a721f45afb44122e23e4b8602eeac4ff7325af6b5a369f36396ee1514d3809af3f57769066d80d83790d8e53339 - languageName: node - linkType: hard - -"@commitlint/cli@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/cli@npm:17.8.1" - dependencies: - "@commitlint/format": "npm:^17.8.1" - "@commitlint/lint": "npm:^17.8.1" - "@commitlint/load": "npm:^17.8.1" - "@commitlint/read": "npm:^17.8.1" - "@commitlint/types": "npm:^17.8.1" - execa: "npm:^5.0.0" - lodash.isfunction: "npm:^3.0.9" - resolve-from: "npm:5.0.0" - resolve-global: "npm:1.0.0" - yargs: "npm:^17.0.0" - bin: - commitlint: cli.js - checksum: 10/8fa82d7cc1075d3ac8896d1482e1c8a66434201a70959cc41bb66680d84341e4d2c8f782b6ee4dd3b790d83fb88fde772a1fd45ea81aa86902cf21b49ad062eb - languageName: node - linkType: hard - -"@commitlint/config-conventional@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/config-conventional@npm:17.8.1" - dependencies: - conventional-changelog-conventionalcommits: "npm:^6.1.0" - checksum: 10/ce8ace1a13f3a797ed699ffa13dc46273a27e1dc3ae8a9d01492c0637a8592e4ed24bb32d9a43f8745a8690a52d77ea4a950d039977b0dbcbf834f8cbacf5def - languageName: node - linkType: hard - -"@commitlint/config-validator@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/config-validator@npm:17.8.1" - dependencies: - "@commitlint/types": "npm:^17.8.1" - ajv: "npm:^8.11.0" - checksum: 10/487051cc36a82ba50f217dfd26721f4fa26d8c4206ee5cb0debd2793aa950280f3ca5bd1a8738e9c71ca8508b58548918b43169c21219ca4cb67f5dcd1e49d9f - languageName: node - linkType: hard - -"@commitlint/ensure@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/ensure@npm:17.8.1" - dependencies: - "@commitlint/types": "npm:^17.8.1" - lodash.camelcase: "npm:^4.3.0" - lodash.kebabcase: "npm:^4.1.1" - lodash.snakecase: "npm:^4.1.1" - lodash.startcase: "npm:^4.4.0" - lodash.upperfirst: "npm:^4.3.1" - checksum: 10/a4a5d3071df0e52dad0293c649c236f070c4fcd3380f11747a6f9b06b036adea281e557d117156e31313fbe18a7d71bf06e05e92776adbde7867190e1735bc43 - languageName: node - linkType: hard - -"@commitlint/execute-rule@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/execute-rule@npm:17.8.1" - checksum: 10/73354b5605931a71f727ee0262a5509277e92f134e2d704d44eafe4da7acb1cd2c7d084dcf8096cc0ac7ce83b023cc0ae8f79b17487b132ccc2e0b3920105a11 - languageName: node - linkType: hard - -"@commitlint/format@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/format@npm:17.8.1" - dependencies: - "@commitlint/types": "npm:^17.8.1" - chalk: "npm:^4.1.0" - checksum: 10/0481e4d49196c942d7723a1abd352c3c884ceb9f434fb4e64bfab71bc264e9b7c643a81069f20d2a035fca70261a472508d73b1a60fe378c60534ca6301408b6 - languageName: node - linkType: hard - -"@commitlint/is-ignored@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/is-ignored@npm:17.8.1" - dependencies: - "@commitlint/types": "npm:^17.8.1" - semver: "npm:7.5.4" - checksum: 10/26eb2f1a84a774625f3f6fe4fa978c57d81028ee6a6925ab3fb02981ac395f9584ab4a71af59c3f2ac84a06c775e3f52683c033c565d86271a7aa99c2eb6025c - languageName: node - linkType: hard - -"@commitlint/lint@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/lint@npm:17.8.1" - dependencies: - "@commitlint/is-ignored": "npm:^17.8.1" - "@commitlint/parse": "npm:^17.8.1" - "@commitlint/rules": "npm:^17.8.1" - "@commitlint/types": "npm:^17.8.1" - checksum: 10/437ee2b060625c38f453bb8ff2474c455120bbfcfa78287e3111a992df792846e9ad5047ce138c2160d56f87b9ec378b69311c33bd5c972b8f433cc19a854df9 - languageName: node - linkType: hard - -"@commitlint/load@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/load@npm:17.8.1" - dependencies: - "@commitlint/config-validator": "npm:^17.8.1" - "@commitlint/execute-rule": "npm:^17.8.1" - "@commitlint/resolve-extends": "npm:^17.8.1" - "@commitlint/types": "npm:^17.8.1" - "@types/node": "npm:20.5.1" - chalk: "npm:^4.1.0" - cosmiconfig: "npm:^8.0.0" - cosmiconfig-typescript-loader: "npm:^4.0.0" - lodash.isplainobject: "npm:^4.0.6" - lodash.merge: "npm:^4.6.2" - lodash.uniq: "npm:^4.5.0" - resolve-from: "npm:^5.0.0" - ts-node: "npm:^10.8.1" - typescript: "npm:^4.6.4 || ^5.2.2" - checksum: 10/5a9a9f0d4621a4cc61c965c3adc88d04ccac40640b022bb3bbad70ed4435bb0c103647a2e29e37fc3d68021dae041c937bee611fe2e5461bebe997640f4f626b - languageName: node - linkType: hard - -"@commitlint/message@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/message@npm:17.8.1" - checksum: 10/ee3ca9bf02828ea322becba47c67f7585aa3fd22b197eab69679961e67e3c7bdf56f6ef41cb3b831b521af7dabd305eb5d7ee053c8294531cc8ca64dbbff82fc - languageName: node - linkType: hard - -"@commitlint/parse@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/parse@npm:17.8.1" - dependencies: - "@commitlint/types": "npm:^17.8.1" - conventional-changelog-angular: "npm:^6.0.0" - conventional-commits-parser: "npm:^4.0.0" - checksum: 10/5322ae049b43a329761063b6e698714593d84d874147ced6290c8d88a9ebea2ba8c660a5815392a731377ac26fbf6b215bb9b87d84d8b49cb47fa1c62d228b24 - languageName: node - linkType: hard - -"@commitlint/read@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/read@npm:17.8.1" - dependencies: - "@commitlint/top-level": "npm:^17.8.1" - "@commitlint/types": "npm:^17.8.1" - fs-extra: "npm:^11.0.0" - git-raw-commits: "npm:^2.0.11" - minimist: "npm:^1.2.6" - checksum: 10/122f1842cb8b87b2c447383095420d077dcae6fbb4f871f8b05fa088f99d95d18a8c6675be2eb3e67bf7ff47a9990764261e3eebc5e474404f14e3379f48df42 - languageName: node - linkType: hard - -"@commitlint/resolve-extends@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/resolve-extends@npm:17.8.1" - dependencies: - "@commitlint/config-validator": "npm:^17.8.1" - "@commitlint/types": "npm:^17.8.1" - import-fresh: "npm:^3.0.0" - lodash.mergewith: "npm:^4.6.2" - resolve-from: "npm:^5.0.0" - resolve-global: "npm:^1.0.0" - checksum: 10/c6fb7d3f263b876ff805396abad27bc514b1a69dcc634903c28782f4f3932eddc37221daa3264a45a5b82d28aa17a57c7bab4830c6efae741cc875f137366608 - languageName: node - linkType: hard - -"@commitlint/rules@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/rules@npm:17.8.1" - dependencies: - "@commitlint/ensure": "npm:^17.8.1" - "@commitlint/message": "npm:^17.8.1" - "@commitlint/to-lines": "npm:^17.8.1" - "@commitlint/types": "npm:^17.8.1" - execa: "npm:^5.0.0" - checksum: 10/b284514a4b8dad6bcbbc91c7548d69d0bbe9fcbdb241c15f5f9da413e8577c19d11190f1d709b38487c49dc874359bd9d0b72ab39f91cce06191e4ddaf8ec84d - languageName: node - linkType: hard - -"@commitlint/to-lines@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/to-lines@npm:17.8.1" - checksum: 10/ff175c202c89537301f32b6e13ebe6919ac782a6e109cb5f6136566d71555a54f6574caf4d674d3409d32fdea1b4a28518837632ca05c7557d4f18f339574e62 - languageName: node - linkType: hard - -"@commitlint/top-level@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/top-level@npm:17.8.1" - dependencies: - find-up: "npm:^5.0.0" - checksum: 10/25c8a6f4026c705a5ad4d9358eae7558734f549623da1c5f44cba8d6bc495f20d3ad05418febb8dca4f6b63f40bf44763007a14ab7209c435566843be114e7fc - languageName: node - linkType: hard - -"@commitlint/types@npm:^17.8.1": - version: 17.8.1 - resolution: "@commitlint/types@npm:17.8.1" - dependencies: - chalk: "npm:^4.1.0" - checksum: 10/a4cfa8c417aa0209694b96da04330282e41150caae1e1d0cec596ea34e3ce15afb84b3263abe5b89758ec1f3f71a9de0ee2d593df66db17b283127dd5e7cd6ac - languageName: node - linkType: hard - -"@cspotcode/source-map-support@npm:^0.8.0": - version: 0.8.1 - resolution: "@cspotcode/source-map-support@npm:0.8.1" - dependencies: - "@jridgewell/trace-mapping": "npm:0.3.9" - checksum: 10/b6e38a1712fab242c86a241c229cf562195aad985d0564bd352ac404be583029e89e93028ffd2c251d2c407ecac5fb0cbdca94a2d5c10f29ac806ede0508b3ff - languageName: node - linkType: hard - -"@csstools/normalize.css@npm:*": - version: 12.0.0 - resolution: "@csstools/normalize.css@npm:12.0.0" - checksum: 10/d3c3ebeba561da21e2fc62425356dc3d9cc976f23f258d7c8d40343b97385ee243c0688effce6fd37ab4b8ef59793e1d3447749b3b1c9f500df7dfb87a1b4e24 - languageName: node - linkType: hard - -"@csstools/postcss-cascade-layers@npm:^1.1.1": - version: 1.1.1 - resolution: "@csstools/postcss-cascade-layers@npm:1.1.1" - dependencies: - "@csstools/selector-specificity": "npm:^2.0.2" - postcss-selector-parser: "npm:^6.0.10" - peerDependencies: - postcss: ^8.2 - checksum: 10/9e8172402ed8d0ac5a2300eabb2120aa455f8a9911fe6530dc68d74accde32dfc458b80966bb549846d7ac09e21ec44da24ad74d1d2d89d90afe659d6b6f24de - languageName: node - linkType: hard - -"@csstools/postcss-color-function@npm:^1.1.1": - version: 1.1.1 - resolution: "@csstools/postcss-color-function@npm:1.1.1" - dependencies: - "@csstools/postcss-progressive-custom-properties": "npm:^1.1.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/82824ae7ef9664c97b066da9981e0fe9b1be9ae811f9f95bbfecd988f06d5e896b88d2b35c58f0629ddc56048569abfd56b47863276a991fba7447f252033bb0 - languageName: node - linkType: hard - -"@csstools/postcss-font-format-keywords@npm:^1.0.1": - version: 1.0.1 - resolution: "@csstools/postcss-font-format-keywords@npm:1.0.1" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/18af07bef7a92ea65572251cfe0ff483158aa0f43256d420a0a2e77eb19f84dca9b9ff0560beeaeef3bf07e62b1dba13582e425679fc72f73701cdf5b0d78845 - languageName: node - linkType: hard - -"@csstools/postcss-hwb-function@npm:^1.0.2": - version: 1.0.2 - resolution: "@csstools/postcss-hwb-function@npm:1.0.2" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/7dc8dc71924fcf2f61e55cbf83602f6d7c08f8f8a47c8a9fe0bdc2c71742e03ecaf5284a55afc4ea6ed646feb8a0a9cfaec4f31cc3b83c5ab0c3e99847aceab8 - languageName: node - linkType: hard - -"@csstools/postcss-ic-unit@npm:^1.0.1": - version: 1.0.1 - resolution: "@csstools/postcss-ic-unit@npm:1.0.1" - dependencies: - "@csstools/postcss-progressive-custom-properties": "npm:^1.1.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/e3bee4cdb258ff7471341fc0d814bab1d1e3ea061c13be64ef40b3be8576b75c855cf24ffd3967b3eeb435552d5910af5df35519705192e58309e440cacf02e5 - languageName: node - linkType: hard - -"@csstools/postcss-is-pseudo-class@npm:^2.0.7": - version: 2.0.7 - resolution: "@csstools/postcss-is-pseudo-class@npm:2.0.7" - dependencies: - "@csstools/selector-specificity": "npm:^2.0.0" - postcss-selector-parser: "npm:^6.0.10" - peerDependencies: - postcss: ^8.2 - checksum: 10/b6d509a63d3130dd1e1a7dacb9fef9e68a80e32eafce6e951f51808441821dad025a9b9209c6b9d331f373ee4977c25e1d305b036ee770d9e974cc1ad96df807 - languageName: node - linkType: hard - -"@csstools/postcss-nested-calc@npm:^1.0.0": - version: 1.0.0 - resolution: "@csstools/postcss-nested-calc@npm:1.0.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/b02656b35dc2982649ba8a6318b6081e47f7c902c50c0c8d158b380c4b3d38d62018a02cc8863d85ba31e78eb4d0d06499735b8f847ddf24ceeff0e9308e8c83 - languageName: node - linkType: hard - -"@csstools/postcss-normalize-display-values@npm:^1.0.1": - version: 1.0.1 - resolution: "@csstools/postcss-normalize-display-values@npm:1.0.1" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/9ea1b199d377fa2feaf6cae303afc316ea51ef5c770811e277a5a5403cee486ade2d2393fa622e41c56222bf664a3740eb62221bb157af0f8c84d8aed55e3234 - languageName: node - linkType: hard - -"@csstools/postcss-oklab-function@npm:^1.1.1": - version: 1.1.1 - resolution: "@csstools/postcss-oklab-function@npm:1.1.1" - dependencies: - "@csstools/postcss-progressive-custom-properties": "npm:^1.1.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/3d0f923e10a9378658a640f46f50740041346469dd965787d20646aaee55168ca5ef81c679e39cdd07b918c9f107d4d47067cbb06008bac5ac7798d71c9a2a25 - languageName: node - linkType: hard - -"@csstools/postcss-progressive-custom-properties@npm:^1.1.0, @csstools/postcss-progressive-custom-properties@npm:^1.3.0": - version: 1.3.0 - resolution: "@csstools/postcss-progressive-custom-properties@npm:1.3.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.3 - checksum: 10/cc88ee26fa3b56434c38906ab13463c3510bab92b2c206c50fa6199266407942fdb035733869c75e75c6f43a48e3ef8a8538a605157d3a580ea4ef2bf93b3df7 - languageName: node - linkType: hard - -"@csstools/postcss-stepped-value-functions@npm:^1.0.1": - version: 1.0.1 - resolution: "@csstools/postcss-stepped-value-functions@npm:1.0.1" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/5dbc3cf9edcbc7a43309e6378eb6f2455c6748ef26b83a781a9c9c7df2b8bbb748f887de760a355c798b0e6f0f41d551a10e51ed7276b0de17f6fc4c2f7dbefb - languageName: node - linkType: hard - -"@csstools/postcss-text-decoration-shorthand@npm:^1.0.0": - version: 1.0.0 - resolution: "@csstools/postcss-text-decoration-shorthand@npm:1.0.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/2dc1394307fa8f9a8cea83f54f0df76a4f065b8364b572ce46221f47518b026c886f19334483c038f178e24004adcf3dbf36903cfa28112e17d932176cb2a21b - languageName: node - linkType: hard - -"@csstools/postcss-trigonometric-functions@npm:^1.0.2": - version: 1.0.2 - resolution: "@csstools/postcss-trigonometric-functions@npm:1.0.2" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/d971403ac69a12e5db31ab798e15be96aa9a06bcfbe20893ce40935da2bdea7c14de3522e2c050a457b6a428699711c0b717d396e05d5ff1d652f8beca0d5d48 - languageName: node - linkType: hard - -"@csstools/postcss-unset-value@npm:^1.0.2": - version: 1.0.2 - resolution: "@csstools/postcss-unset-value@npm:1.0.2" - peerDependencies: - postcss: ^8.2 - checksum: 10/58312dcb457b0f8c9bdcc45601e799da5270e09f6573041a00c50acff77089ceb2a33ed285990cd4a6d847677545a52cfd0919af26de9a40889c483a84df45d3 - languageName: node - linkType: hard - -"@csstools/selector-specificity@npm:^2.0.0, @csstools/selector-specificity@npm:^2.0.2": - version: 2.2.0 - resolution: "@csstools/selector-specificity@npm:2.2.0" - peerDependencies: - postcss-selector-parser: ^6.0.10 - checksum: 10/84ae0e902e8879d375406bd7d2e117b862e18cf8e5f82cecad62fcf729a8fc1527e2b3e2774b0e869a17e2006bd27ac5240f79220638183b273aeece97acd3f2 - languageName: node - linkType: hard - -"@cyntler/react-doc-viewer@npm:^1.17.0": - version: 1.17.0 - resolution: "@cyntler/react-doc-viewer@npm:1.17.0" - dependencies: - "@types/mustache": "npm:^4.2.5" - "@types/papaparse": "npm:^5.3.14" - ajv: "npm:^7.2.4" - core-js: "npm:^3.37.1" - mustache: "npm:^4.2.0" - papaparse: "npm:^5.4.1" - react-pdf: "npm:^9.0.0" - styled-components: "npm:^6.1.11" - peerDependencies: - react: ">=17.0.0" - react-dom: ">=17.0.0" - checksum: 10/f2a3f791cda63606473585bdc2194c76451c8195f71cd3c559ff2dbf6d6007746e469bd964613ac75b02ddb12bb98d4d3c0b7802715b39993b26e106af92d267 - languageName: node - linkType: hard - -"@datepicker-react/hooks@npm:^2.8.4": - version: 2.8.4 - resolution: "@datepicker-react/hooks@npm:2.8.4" - dependencies: - date-fns: "npm:^2.14.0" - peerDependencies: - react: ">= 16.8.5" - checksum: 10/1f4301bce7c32efa35b982e6697718a541e1ecb4d636d5f27240ea16780ef9e5f04e59083a364f9e4f79a5fd20a13774128bcb5e9b9a3bee0773e74d1a04277b - languageName: node - linkType: hard - -"@defi-wonderland/natspec-smells@npm:^1.1.6": - version: 1.1.6 - resolution: "@defi-wonderland/natspec-smells@npm:1.1.6" - dependencies: - fast-glob: "npm:3.3.2" - solc-typed-ast: "npm:18.2.4" - yargs: "npm:17.7.2" - bin: - natspec-smells: lib/main.js - checksum: 10/85d8849e110b30525ef7d8932428017398d135894a4ebae6b119bcb83a4ac40b5c394a6b194a1e47026b18c0c02e094d0c085cbc802901bb70fe88fc7265ad05 - languageName: node - linkType: hard - -"@ecies/ciphers@npm:^0.2.1": - version: 0.2.2 - resolution: "@ecies/ciphers@npm:0.2.2" - peerDependencies: - "@noble/ciphers": ^1.0.0 - checksum: 10/10a623261aa212184850fcd41788ae1f616365b5084df03ac0d7108223519e24a5f7d92caac1ee9e0f2e3b6cfae3037a42e466b25de20cf85e91098f60ba1187 - languageName: node - linkType: hard - -"@emotion/babel-plugin@npm:^11.13.5": - version: 11.13.5 - resolution: "@emotion/babel-plugin@npm:11.13.5" - dependencies: - "@babel/helper-module-imports": "npm:^7.16.7" - "@babel/runtime": "npm:^7.18.3" - "@emotion/hash": "npm:^0.9.2" - "@emotion/memoize": "npm:^0.9.0" - "@emotion/serialize": "npm:^1.3.3" - babel-plugin-macros: "npm:^3.1.0" - convert-source-map: "npm:^1.5.0" - escape-string-regexp: "npm:^4.0.0" - find-root: "npm:^1.1.0" - source-map: "npm:^0.5.7" - stylis: "npm:4.2.0" - checksum: 10/cd310568314d886ca328e504f84c4f7f9c7f092ea34a2b43fdb61f84665bf301ba2ef49e0fd1e7ded3d81363d9bbefbb32674ce88b317cfb64db2b65e5ff423f - languageName: node - linkType: hard - -"@emotion/cache@npm:^11.13.5, @emotion/cache@npm:^11.14.0": - version: 11.14.0 - resolution: "@emotion/cache@npm:11.14.0" - dependencies: - "@emotion/memoize": "npm:^0.9.0" - "@emotion/sheet": "npm:^1.4.0" - "@emotion/utils": "npm:^1.4.2" - "@emotion/weak-memoize": "npm:^0.4.0" - stylis: "npm:4.2.0" - checksum: 10/52336b28a27b07dde8fcdfd80851cbd1487672bbd4db1e24cca1440c95d8a6a968c57b0453c2b7c88d9b432b717f99554dbecc05b5cdef27933299827e69fd8e - languageName: node - linkType: hard - -"@emotion/hash@npm:^0.9.2": - version: 0.9.2 - resolution: "@emotion/hash@npm:0.9.2" - checksum: 10/379bde2830ccb0328c2617ec009642321c0e009a46aa383dfbe75b679c6aea977ca698c832d225a893901f29d7b3eef0e38cf341f560f6b2b56f1ff23c172387 - languageName: node - linkType: hard - -"@emotion/is-prop-valid@npm:1.2.2": - version: 1.2.2 - resolution: "@emotion/is-prop-valid@npm:1.2.2" - dependencies: - "@emotion/memoize": "npm:^0.8.1" - checksum: 10/0fa3960abfbe845d40cc230ab8c9408e1f33d3c03b321980359911c7212133cdcb0344d249e9dab23342b304567eece7a10ec44b986f7230e0640ba00049dceb - languageName: node - linkType: hard - -"@emotion/is-prop-valid@npm:^1.1.0": - version: 1.3.1 - resolution: "@emotion/is-prop-valid@npm:1.3.1" - dependencies: - "@emotion/memoize": "npm:^0.9.0" - checksum: 10/abbc5c7bf4017415da5b06067fc0b4771d1f22cf94ec37fd54c07b3bd1bcffbda2405ca686e7ee64a9cfc51461262b712f724850e838775347a949f72949ad03 - languageName: node - linkType: hard - -"@emotion/is-prop-valid@npm:^1.3.0": - version: 1.3.0 - resolution: "@emotion/is-prop-valid@npm:1.3.0" - dependencies: - "@emotion/memoize": "npm:^0.9.0" - checksum: 10/9b395dd9734fa88e24aa5adeef90ba86564d29c85d07a18cd39fbd06fbe597a5008a335a6147088de9f0533dbb3691786c8e10e6eaab5c7d960634833a054005 - languageName: node - linkType: hard - -"@emotion/memoize@npm:^0.8.1": - version: 0.8.1 - resolution: "@emotion/memoize@npm:0.8.1" - checksum: 10/a19cc01a29fcc97514948eaab4dc34d8272e934466ed87c07f157887406bc318000c69ae6f813a9001c6a225364df04249842a50e692ef7a9873335fbcc141b0 - languageName: node - linkType: hard - -"@emotion/memoize@npm:^0.9.0": - version: 0.9.0 - resolution: "@emotion/memoize@npm:0.9.0" - checksum: 10/038132359397348e378c593a773b1148cd0cf0a2285ffd067a0f63447b945f5278860d9de718f906a74c7c940ba1783ac2ca18f1c06a307b01cc0e3944e783b1 - languageName: node - linkType: hard - -"@emotion/react@npm:^11.14.0": - version: 11.14.0 - resolution: "@emotion/react@npm:11.14.0" - dependencies: - "@babel/runtime": "npm:^7.18.3" - "@emotion/babel-plugin": "npm:^11.13.5" - "@emotion/cache": "npm:^11.14.0" - "@emotion/serialize": "npm:^1.3.3" - "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" - "@emotion/utils": "npm:^1.4.2" - "@emotion/weak-memoize": "npm:^0.4.0" - hoist-non-react-statics: "npm:^3.3.1" - peerDependencies: - react: ">=16.8.0" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10/3356c1d66f37f4e7abf88a2be843f6023b794b286c9c99a0aaf1cd1b2b7c50f8d80a2ef77183da737de70150f638e698ff4a2a38ab2d922f868615f1d5761c37 - languageName: node - linkType: hard - -"@emotion/serialize@npm:^1.3.3": - version: 1.3.3 - resolution: "@emotion/serialize@npm:1.3.3" - dependencies: - "@emotion/hash": "npm:^0.9.2" - "@emotion/memoize": "npm:^0.9.0" - "@emotion/unitless": "npm:^0.10.0" - "@emotion/utils": "npm:^1.4.2" - csstype: "npm:^3.0.2" - checksum: 10/44a2e06fc52dba177d9cf720f7b2c5d45ee4c0d9c09b78302d9a625e758d728ef3ae26f849237fec6f70e9eeb7d87e45a65028e944dc1f877df97c599f1cdaee - languageName: node - linkType: hard - -"@emotion/sheet@npm:^1.4.0": - version: 1.4.0 - resolution: "@emotion/sheet@npm:1.4.0" - checksum: 10/8ac6e9bf6b373a648f26ae7f1c24041038524f4c72f436f4f8c4761c665e58880c3229d8d89b1f7a4815dd8e5b49634d03e60187cb6f93097d7f7c1859e869d5 - languageName: node - linkType: hard - -"@emotion/styled@npm:^11.14.0": - version: 11.14.0 - resolution: "@emotion/styled@npm:11.14.0" - dependencies: - "@babel/runtime": "npm:^7.18.3" - "@emotion/babel-plugin": "npm:^11.13.5" - "@emotion/is-prop-valid": "npm:^1.3.0" - "@emotion/serialize": "npm:^1.3.3" - "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" - "@emotion/utils": "npm:^1.4.2" - peerDependencies: - "@emotion/react": ^11.0.0-rc.0 - react: ">=16.8.0" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10/64bb3fd8c5d3042ba803eb2052fddf8e057b927682677f8fc41ecfe2b1abcc0da03944fde79fac8f2f55a56383d5c9547b93d4641bb51452cf59415c02dd9b10 - languageName: node - linkType: hard - -"@emotion/stylis@npm:^0.8.4": - version: 0.8.5 - resolution: "@emotion/stylis@npm:0.8.5" - checksum: 10/ceaa673457f501a393cb52873b2bc34dbe35ef0fb8faa4b943d73ecbbb42bc3cea53b87cbf482038b7b9b1f95859be3d8b58d508422b4d15aec5b62314cc3c1e - languageName: node - linkType: hard - -"@emotion/unitless@npm:0.8.1": - version: 0.8.1 - resolution: "@emotion/unitless@npm:0.8.1" - checksum: 10/918f73c46ac0b7161e3c341cc07d651ce87e31ab1695e74b12adb7da6bb98dfbff8c69cf68a4e40d9eb3d820ca055dc1267aeb3007927ce88f98b885bf729b63 - languageName: node - linkType: hard - -"@emotion/unitless@npm:^0.10.0": - version: 0.10.0 - resolution: "@emotion/unitless@npm:0.10.0" - checksum: 10/6851c16edce01c494305f43b2cad7a26b939a821131b7c354e49b8e3b012c8810024755b0f4a03ef51117750309e55339825a97bd10411fb3687e68904769106 - languageName: node - linkType: hard - -"@emotion/unitless@npm:^0.7.4": - version: 0.7.5 - resolution: "@emotion/unitless@npm:0.7.5" - checksum: 10/f976e5345b53fae9414a7b2e7a949aa6b52f8bdbcc84458b1ddc0729e77ba1d1dfdff9960e0da60183877873d3a631fa24d9695dd714ed94bcd3ba5196586a6b - languageName: node - linkType: hard - -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.2.0": - version: 1.2.0 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.2.0" - peerDependencies: - react: ">=16.8.0" - checksum: 10/2374999db8d53ef661d61ed1026c42a849632e4f03826f7eba0314c1d92ae342161d737f5045453aa46dd4008e13ccefeba68d3165b667dfad8e5784fcb0c643 - languageName: node - linkType: hard - -"@emotion/utils@npm:^1.4.2": - version: 1.4.2 - resolution: "@emotion/utils@npm:1.4.2" - checksum: 10/e5f3b8bca066b3361a7ad9064baeb9d01ed1bf51d98416a67359b62cb3affec6bb0249802c4ed11f4f8030f93cc4b67506909420bdb110adec6983d712897208 - languageName: node - linkType: hard - -"@emotion/weak-memoize@npm:^0.4.0": - version: 0.4.0 - resolution: "@emotion/weak-memoize@npm:0.4.0" - checksum: 10/db5da0e89bd752c78b6bd65a1e56231f0abebe2f71c0bd8fc47dff96408f7065b02e214080f99924f6a3bfe7ee15afc48dad999d76df86b39b16e513f7a94f52 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/aix-ppc64@npm:0.19.12" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/aix-ppc64@npm:0.21.5" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/aix-ppc64@npm:0.25.8" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/android-arm64@npm:0.19.12" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-arm64@npm:0.21.5" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/android-arm64@npm:0.25.8" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/android-arm@npm:0.19.12" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-arm@npm:0.21.5" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/android-arm@npm:0.25.8" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/android-x64@npm:0.19.12" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-x64@npm:0.21.5" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/android-x64@npm:0.25.8" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/darwin-arm64@npm:0.19.12" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/darwin-arm64@npm:0.21.5" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/darwin-arm64@npm:0.25.8" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/darwin-x64@npm:0.19.12" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/darwin-x64@npm:0.21.5" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/darwin-x64@npm:0.25.8" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/freebsd-arm64@npm:0.19.12" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/freebsd-arm64@npm:0.21.5" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/freebsd-arm64@npm:0.25.8" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/freebsd-x64@npm:0.19.12" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/freebsd-x64@npm:0.21.5" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/freebsd-x64@npm:0.25.8" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-arm64@npm:0.19.12" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-arm64@npm:0.21.5" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-arm64@npm:0.25.8" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-arm@npm:0.19.12" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-arm@npm:0.21.5" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-arm@npm:0.25.8" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-ia32@npm:0.19.12" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-ia32@npm:0.21.5" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-ia32@npm:0.25.8" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-loong64@npm:0.19.12" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-loong64@npm:0.21.5" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-loong64@npm:0.25.8" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-mips64el@npm:0.19.12" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-mips64el@npm:0.21.5" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-mips64el@npm:0.25.8" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-ppc64@npm:0.19.12" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-ppc64@npm:0.21.5" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-ppc64@npm:0.25.8" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-riscv64@npm:0.19.12" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-riscv64@npm:0.21.5" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-riscv64@npm:0.25.8" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-s390x@npm:0.19.12" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-s390x@npm:0.21.5" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-s390x@npm:0.25.8" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-x64@npm:0.19.12" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-x64@npm:0.21.5" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-x64@npm:0.25.8" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/netbsd-arm64@npm:0.25.8" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/netbsd-x64@npm:0.19.12" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/netbsd-x64@npm:0.21.5" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/netbsd-x64@npm:0.25.8" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/openbsd-arm64@npm:0.25.8" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/openbsd-x64@npm:0.19.12" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/openbsd-x64@npm:0.21.5" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/openbsd-x64@npm:0.25.8" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/openharmony-arm64@npm:0.25.8" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/sunos-x64@npm:0.19.12" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/sunos-x64@npm:0.21.5" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/sunos-x64@npm:0.25.8" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/win32-arm64@npm:0.19.12" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-arm64@npm:0.21.5" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/win32-arm64@npm:0.25.8" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/win32-ia32@npm:0.19.12" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-ia32@npm:0.21.5" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/win32-ia32@npm:0.25.8" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/win32-x64@npm:0.19.12" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-x64@npm:0.21.5" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/win32-x64@npm:0.25.8" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.0 - resolution: "@eslint-community/eslint-utils@npm:4.4.0" - dependencies: - eslint-visitor-keys: "npm:^3.3.0" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10/8d70bcdcd8cd279049183aca747d6c2ed7092a5cf0cf5916faac1ef37ffa74f0c245c2a3a3d3b9979d9dfdd4ca59257b4c5621db699d637b847a2c5e02f491c2 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.4.0": - version: 4.12.1 - resolution: "@eslint-community/regexpp@npm:4.12.1" - checksum: 10/c08f1dd7dd18fbb60bdd0d85820656d1374dd898af9be7f82cb00451313402a22d5e30569c150315b4385907cdbca78c22389b2a72ab78883b3173be317620cc - languageName: node - linkType: hard - -"@eslint/compat@npm:^1.2.3": - version: 1.2.3 - resolution: "@eslint/compat@npm:1.2.3" - peerDependencies: - eslint: ^9.10.0 - peerDependenciesMeta: - eslint: - optional: true - checksum: 10/5a8fc6ecb127a1ce757c2b94e4a71fd72939c3e9007eb80c0a819618e1c7cc98ffe3e5229a504c52e6f5b5dc0f6be3b899fa6a3dedb220cb4a02c8d5d0c333df - languageName: node - linkType: hard - -"@eslint/config-array@npm:^0.19.0": - version: 0.19.0 - resolution: "@eslint/config-array@npm:0.19.0" - dependencies: - "@eslint/object-schema": "npm:^2.1.4" - debug: "npm:^4.3.1" - minimatch: "npm:^3.1.2" - checksum: 10/16e4ec468ebcb10255ab8c61234c1b3e7ac5506016e432fb489a1c5528cace7a60ddb07515516e7fc166b1dbe6c407d8a6bfbaa2e7531d445d8feb845c989913 - languageName: node - linkType: hard - -"@eslint/core@npm:^0.9.0": - version: 0.9.0 - resolution: "@eslint/core@npm:0.9.0" - checksum: 10/2d11e9c6fac14cfa817c7a9939fd6b79f2120928e4933952d061651db93797e0fcd67c858a14980ac26e90f6e0e49051436aefa4a4b06a26f24e3028366f73d9 - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^2.0.3": - version: 2.0.3 - resolution: "@eslint/eslintrc@npm:2.0.3" - dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^9.5.2" - globals: "npm:^13.19.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: 10/3508a9eb1a1cdf205f34648a993862b15c178669b71d6a9544787558b925ac689d8ddf3e598990156a17b708e79d3cb867fb45d5662908d14c1b10eaad858516 - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^3.2.0": - version: 3.2.0 - resolution: "@eslint/eslintrc@npm:3.2.0" - dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^10.0.1" - globals: "npm:^14.0.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: 10/b32dd90ce7da68e89b88cd729db46b27aac79a2e6cb1fa75d25a6b766d586b443bfbf59622489efbd3c6f696f147b51111e81ec7cd23d70f215c5d474cad0261 - languageName: node - linkType: hard - -"@eslint/js@npm:8.43.0": - version: 8.43.0 - resolution: "@eslint/js@npm:8.43.0" - checksum: 10/db6a89a5360909e6f670c0f4057811a6d00f35ca5b3632bd30b6f7aab35c9cf689d58ea70a22ac8d03d4abc5760ca8ae10fb0e9efc48c843e9db20039b638dce - languageName: node - linkType: hard - -"@eslint/js@npm:9.15.0, @eslint/js@npm:^9.15.0": - version: 9.15.0 - resolution: "@eslint/js@npm:9.15.0" - checksum: 10/cdea71574a8be164147f426ffa5eca05a9c7fbfbae98387ed0cf772292fc9fb5ded69ce96eac110aaa633f6b7504ec551e1d33f2d6690ae95b11ec395553bae1 - languageName: node - linkType: hard - -"@eslint/object-schema@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/object-schema@npm:2.1.4" - checksum: 10/221e8d9f281c605948cd6e030874aacce83fe097f8f9c1964787037bccf08e82b7aa9eff1850a30fffac43f1d76555727ec22a2af479d91e268e89d1e035131e - languageName: node - linkType: hard - -"@eslint/plugin-kit@npm:^0.2.3": - version: 0.2.3 - resolution: "@eslint/plugin-kit@npm:0.2.3" - dependencies: - levn: "npm:^0.4.1" - checksum: 10/0d0653ef840823fd5c0354ef8f1937e7763dbe830173eb6d2d55a19374bf04a06dff0e5214330c10a9425cf38655f632bb0d7d0666249b366e506ae291d82f7e - languageName: node - linkType: hard - -"@eth-optimism/contracts@npm:0.6.0": - version: 0.6.0 - resolution: "@eth-optimism/contracts@npm:0.6.0" - dependencies: - "@eth-optimism/core-utils": "npm:0.12.0" - "@ethersproject/abstract-provider": "npm:^5.7.0" - "@ethersproject/abstract-signer": "npm:^5.7.0" - peerDependencies: - ethers: ^5 - checksum: 10/dd1fa303ca39125d45fa71a2be0fe773971a986d0694ba98075b9b93ee3c0c71764fd061f1094f82c36d5aa167f5340ec92ef1ec45d901cb69ace086327c0cf2 - languageName: node - linkType: hard - -"@eth-optimism/core-utils@npm:0.12.0": - version: 0.12.0 - resolution: "@eth-optimism/core-utils@npm:0.12.0" - dependencies: - "@ethersproject/abi": "npm:^5.7.0" - "@ethersproject/abstract-provider": "npm:^5.7.0" - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/constants": "npm:^5.7.0" - "@ethersproject/contracts": "npm:^5.7.0" - "@ethersproject/hash": "npm:^5.7.0" - "@ethersproject/keccak256": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/providers": "npm:^5.7.0" - "@ethersproject/rlp": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - "@ethersproject/web": "npm:^5.7.0" - bufio: "npm:^1.0.7" - chai: "npm:^4.3.4" - checksum: 10/a7ea17a8b529b2c86b00ef19fa562c2b792d7e8a4071defea4d8a8b82a101105a3ab6dc86361118e17bf9b4784b4eca9c1e937c8b1e7294a1a850f97b5a73a10 - languageName: node - linkType: hard - -"@ethereumjs/common@npm:^3.2.0": - version: 3.2.0 - resolution: "@ethereumjs/common@npm:3.2.0" - dependencies: - "@ethereumjs/util": "npm:^8.1.0" - crc-32: "npm:^1.2.0" - checksum: 10/b3f612406b6bcefaf9117ceb42eff58d311e2b50205e3d55b4c793d803de517efbc84075e058dc0e2ec27a2bff11dfc279dda1fa2b249ed6ab3973be045898f4 - languageName: node - linkType: hard - -"@ethereumjs/rlp@npm:^4.0.1": - version: 4.0.1 - resolution: "@ethereumjs/rlp@npm:4.0.1" - bin: - rlp: bin/rlp - checksum: 10/bfdffd634ce72f3b17e3d085d071f2fe7ce9680aebdf10713d74b30afd80ef882d17f19ff7175fcb049431a56e800bd3558d3b028bd0d82341927edb303ab450 - languageName: node - linkType: hard - -"@ethereumjs/rlp@npm:^5.0.2": - version: 5.0.2 - resolution: "@ethereumjs/rlp@npm:5.0.2" - bin: - rlp: bin/rlp.cjs - checksum: 10/2af80d98faf7f64dfb6d739c2df7da7350ff5ad52426c3219897e843ee441215db0ffa346873200a6be6d11142edb9536e66acd62436b5005fa935baaf7eb6bd - languageName: node - linkType: hard - -"@ethereumjs/tx@npm:^4.1.2, @ethereumjs/tx@npm:^4.2.0": - version: 4.2.0 - resolution: "@ethereumjs/tx@npm:4.2.0" - dependencies: - "@ethereumjs/common": "npm:^3.2.0" - "@ethereumjs/rlp": "npm:^4.0.1" - "@ethereumjs/util": "npm:^8.1.0" - ethereum-cryptography: "npm:^2.0.0" - checksum: 10/cbd2ffc3ef76ca5416d58f2f694858d9fcac946e6a107fef44cf3f308a7c9fcc996a6847868609354d72d5b356faee68408e9d5601c4c4f7dad8e18cb2c24a95 - languageName: node - linkType: hard - -"@ethereumjs/util@npm:^8.1.0": - version: 8.1.0 - resolution: "@ethereumjs/util@npm:8.1.0" - dependencies: - "@ethereumjs/rlp": "npm:^4.0.1" - ethereum-cryptography: "npm:^2.0.0" - micro-ftch: "npm:^0.3.1" - checksum: 10/cc35338932e49b15e54ca6e548b32a1f48eed7d7e1d34ee743e4d3600dd616668bd50f70139e86c5c35f55aac35fba3b6cc4e6f679cf650aeba66bf93016200c - languageName: node - linkType: hard - -"@ethereumjs/util@npm:^9.1.0": - version: 9.1.0 - resolution: "@ethereumjs/util@npm:9.1.0" - dependencies: - "@ethereumjs/rlp": "npm:^5.0.2" - ethereum-cryptography: "npm:^2.2.1" - checksum: 10/4e22c4081c63eebb808eccd54f7f91cd3407f4cac192da5f30a0d6983fe07d51f25e6a9d08624f1376e604bb7dce574aafcf0fbf0becf42f62687c11e710ac41 - languageName: node - linkType: hard - -"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/abi@npm:5.7.0" - dependencies: - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/constants": "npm:^5.7.0" - "@ethersproject/hash": "npm:^5.7.0" - "@ethersproject/keccak256": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - checksum: 10/6ed002cbc61a7e21bc0182702345659c1984f6f8e6bad166e43aee76ea8f74766dd0f6236574a868e1b4600af27972bf25b973fae7877ae8da3afa90d3965cac - languageName: node - linkType: hard - -"@ethersproject/abi@npm:5.8.0, @ethersproject/abi@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/abi@npm:5.8.0" - dependencies: - "@ethersproject/address": "npm:^5.8.0" - "@ethersproject/bignumber": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/constants": "npm:^5.8.0" - "@ethersproject/hash": "npm:^5.8.0" - "@ethersproject/keccak256": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - "@ethersproject/strings": "npm:^5.8.0" - checksum: 10/a63ebc2c8ea795ceca5289abaf817bb402c83c330cffd0ae2d355be70c54050a21ddd408abd4fd0dce4c3fd5c5f091707be2095011c233022a52f2110e7012d6 - languageName: node - linkType: hard - -"@ethersproject/abstract-provider@npm:5.7.0, @ethersproject/abstract-provider@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/abstract-provider@npm:5.7.0" - dependencies: - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/networks": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - "@ethersproject/web": "npm:^5.7.0" - checksum: 10/c03e413a812486002525f4036bf2cb90e77a19b98fa3d16279e28e0a05520a1085690fac2ee9f94b7931b9a803249ff8a8bbb26ff8dee52196a6ef7a3fc5edc5 - languageName: node - linkType: hard - -"@ethersproject/abstract-provider@npm:5.8.0, @ethersproject/abstract-provider@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/abstract-provider@npm:5.8.0" - dependencies: - "@ethersproject/bignumber": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/networks": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - "@ethersproject/transactions": "npm:^5.8.0" - "@ethersproject/web": "npm:^5.8.0" - checksum: 10/2066aa717c7ecf0b6defe47f4f0af21943ee76e47f6fdc461d89b15d8af76c37d25355b4f5d635ed30e7378eafb0599b283df8ef9133cef389d938946874200d - languageName: node - linkType: hard - -"@ethersproject/abstract-signer@npm:5.7.0, @ethersproject/abstract-signer@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/abstract-signer@npm:5.7.0" - dependencies: - "@ethersproject/abstract-provider": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - checksum: 10/0a6ffade0a947c9ba617048334e1346838f394d1d0a5307ac435a0c63ed1033b247e25ffb0cd6880d7dcf5459581f52f67e3804ebba42ff462050f1e4321ba0c - languageName: node - linkType: hard - -"@ethersproject/abstract-signer@npm:5.8.0, @ethersproject/abstract-signer@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/abstract-signer@npm:5.8.0" - dependencies: - "@ethersproject/abstract-provider": "npm:^5.8.0" - "@ethersproject/bignumber": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - checksum: 10/10986eb1520dd94efb34bc19de4f53a49bea023493a0df686711872eb2cb446f3cca3c98c1ecec7831497004822e16ead756d6c7d6977971eaa780f4d41db327 - languageName: node - linkType: hard - -"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/address@npm:5.7.0" - dependencies: - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/keccak256": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/rlp": "npm:^5.7.0" - checksum: 10/1ac4f3693622ed9fbbd7e966a941ec1eba0d9445e6e8154b1daf8e93b8f62ad91853d1de5facf4c27b41e6f1e47b94a317a2492ba595bee1841fd3030c3e9a27 - languageName: node - linkType: hard - -"@ethersproject/address@npm:5.8.0, @ethersproject/address@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/address@npm:5.8.0" - dependencies: - "@ethersproject/bignumber": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/keccak256": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/rlp": "npm:^5.8.0" - checksum: 10/4b8ef5b3001f065fae571d86f113395d0dd081a2f411c99e354da912d4138e14a1fbe206265725daeb55c4e735ddb761891b58779208c5e2acec03f3219ce6ef - languageName: node - linkType: hard - -"@ethersproject/base64@npm:5.7.0, @ethersproject/base64@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/base64@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - checksum: 10/7105105f401e1c681e61db1e9da1b5960d8c5fbd262bbcacc99d61dbb9674a9db1181bb31903d98609f10e8a0eb64c850475f3b040d67dea953e2b0ac6380e96 - languageName: node - linkType: hard - -"@ethersproject/base64@npm:5.8.0, @ethersproject/base64@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/base64@npm:5.8.0" - dependencies: - "@ethersproject/bytes": "npm:^5.8.0" - checksum: 10/c83e4ee01a1e69d874277d05c0e3fbc2afcdb9c80507be6963d31c77e505e355191cbba2d8fecf1c922b68c1ff072ede7914981fd965f1d8771c5b0706beb911 - languageName: node - linkType: hard - -"@ethersproject/basex@npm:5.7.0, @ethersproject/basex@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/basex@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - checksum: 10/840e333e109bff2fcf8d91dcfd45fa951835844ef0e1ba710037e87291c7b5f3c189ba86f6cee2ca7de2ede5b7d59fbb930346607695855bee20d2f9f63371ef - languageName: node - linkType: hard - -"@ethersproject/basex@npm:5.8.0, @ethersproject/basex@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/basex@npm:5.8.0" - dependencies: - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - checksum: 10/1a8d48a9397461ea42ec43b69a15a0d13ba0b9192695713750d9d391503c55b258cca435fa78a4014d23a813053f1a471593b89c7c0d89351639a78d50a12ef2 - languageName: node - linkType: hard - -"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/bignumber@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - bn.js: "npm:^5.2.1" - checksum: 10/09cffa18a9f0730856b57c14c345bd68ba451159417e5aff684a8808011cd03b27b7c465d423370333a7d1c9a621392fc74f064a3b02c9edc49ebe497da6d45d - languageName: node - linkType: hard - -"@ethersproject/bignumber@npm:5.8.0, @ethersproject/bignumber@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/bignumber@npm:5.8.0" - dependencies: - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - bn.js: "npm:^5.2.1" - checksum: 10/15538ba9eef8475bc14a2a2bb5f0d7ae8775cf690283cb4c7edc836761a4310f83d67afe33f6d0b8befd896b10f878d8ca79b89de6e6ebd41a9e68375ec77123 - languageName: node - linkType: hard - -"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/bytes@npm:5.7.0" - dependencies: - "@ethersproject/logger": "npm:^5.7.0" - checksum: 10/8b3ffedb68c1a82cfb875e9738361409cc33e2dcb1286b6ccfdc4dd8dd0317f7eacc8937b736c467d213dffc44b469690fe1a951e901953d5a90c5af2b675ae4 - languageName: node - linkType: hard - -"@ethersproject/bytes@npm:5.8.0, @ethersproject/bytes@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/bytes@npm:5.8.0" - dependencies: - "@ethersproject/logger": "npm:^5.8.0" - checksum: 10/b8956aa4f607d326107cec522a881effed62585d5b5c5ad66ada4f7f83b42fd6c6acb76f355ec7a57e4cadea62a0194e923f4b5142d50129fe03d2fe7fc664f8 - languageName: node - linkType: hard - -"@ethersproject/constants@npm:5.7.0, @ethersproject/constants@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/constants@npm:5.7.0" - dependencies: - "@ethersproject/bignumber": "npm:^5.7.0" - checksum: 10/6d4b1355747cce837b3e76ec3bde70e4732736f23b04f196f706ebfa5d4d9c2be50904a390d4d40ce77803b98d03d16a9b6898418e04ba63491933ce08c4ba8a - languageName: node - linkType: hard - -"@ethersproject/constants@npm:5.8.0, @ethersproject/constants@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/constants@npm:5.8.0" - dependencies: - "@ethersproject/bignumber": "npm:^5.8.0" - checksum: 10/74830c44f4315a1058b905c73be7a9bb92850e45213cb28a957447b8a100f22a514f4500b0ea5ac7a995427cecef9918af39ae4e0e0ecf77aa4835b1ea5c3432 - languageName: node - linkType: hard - -"@ethersproject/contracts@npm:5.7.0, @ethersproject/contracts@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/contracts@npm:5.7.0" - dependencies: - "@ethersproject/abi": "npm:^5.7.0" - "@ethersproject/abstract-provider": "npm:^5.7.0" - "@ethersproject/abstract-signer": "npm:^5.7.0" - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/constants": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - checksum: 10/5df66179af242faabea287a83fd2f8f303a4244dc87a6ff802e1e3b643f091451295c8e3d088c7739970b7915a16a581c192d4e007d848f1fdf3cc9e49010053 - languageName: node - linkType: hard - -"@ethersproject/contracts@npm:5.8.0": - version: 5.8.0 - resolution: "@ethersproject/contracts@npm:5.8.0" - dependencies: - "@ethersproject/abi": "npm:^5.8.0" - "@ethersproject/abstract-provider": "npm:^5.8.0" - "@ethersproject/abstract-signer": "npm:^5.8.0" - "@ethersproject/address": "npm:^5.8.0" - "@ethersproject/bignumber": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/constants": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - "@ethersproject/transactions": "npm:^5.8.0" - checksum: 10/839f8211f5e560f15468ae843ba316ffeacab5cebcece1eec76bc5714472ebfe3453484f283d3e46b9d3faaffef1e17cc3583cf24e01638a1fd52f69012cf8d4 - languageName: node - linkType: hard - -"@ethersproject/hash@npm:5.7.0, @ethersproject/hash@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/hash@npm:5.7.0" - dependencies: - "@ethersproject/abstract-signer": "npm:^5.7.0" - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/base64": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/keccak256": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - checksum: 10/d83de3f3a1b99b404a2e7bb503f5cdd90c66a97a32cce1d36b09bb8e3fb7205b96e30ad28e2b9f30083beea6269b157d0c6e3425052bb17c0a35fddfdd1c72a3 - languageName: node - linkType: hard - -"@ethersproject/hash@npm:5.8.0, @ethersproject/hash@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/hash@npm:5.8.0" - dependencies: - "@ethersproject/abstract-signer": "npm:^5.8.0" - "@ethersproject/address": "npm:^5.8.0" - "@ethersproject/base64": "npm:^5.8.0" - "@ethersproject/bignumber": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/keccak256": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - "@ethersproject/strings": "npm:^5.8.0" - checksum: 10/a355cc1120b51c5912d960c66e2d1e2fb9cceca7d02e48c3812abd32ac2480035d8345885f129d2ed1cde9fb044adad1f98e4ea39652fa96c5de9c2720e83d28 - languageName: node - linkType: hard - -"@ethersproject/hdnode@npm:5.7.0, @ethersproject/hdnode@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/hdnode@npm:5.7.0" - dependencies: - "@ethersproject/abstract-signer": "npm:^5.7.0" - "@ethersproject/basex": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/pbkdf2": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/sha2": "npm:^5.7.0" - "@ethersproject/signing-key": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - "@ethersproject/wordlists": "npm:^5.7.0" - checksum: 10/2fbe6278c324235afaa88baa5dea24d8674c72b14ad037fe2096134d41025977f410b04fd146e333a1b6cac9482e9de62d6375d1705fd42667543f2d0eb66655 - languageName: node - linkType: hard - -"@ethersproject/hdnode@npm:5.8.0, @ethersproject/hdnode@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/hdnode@npm:5.8.0" - dependencies: - "@ethersproject/abstract-signer": "npm:^5.8.0" - "@ethersproject/basex": "npm:^5.8.0" - "@ethersproject/bignumber": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/pbkdf2": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - "@ethersproject/sha2": "npm:^5.8.0" - "@ethersproject/signing-key": "npm:^5.8.0" - "@ethersproject/strings": "npm:^5.8.0" - "@ethersproject/transactions": "npm:^5.8.0" - "@ethersproject/wordlists": "npm:^5.8.0" - checksum: 10/55b35cf30f0dd40e2d5ecd4b2f005ebea82a85a440717a61d4a483074f652d2c7063e9c704272b894bfdd500f7883aa36692931c6808591f702c1da7107ebb61 - languageName: node - linkType: hard - -"@ethersproject/json-wallets@npm:5.7.0, @ethersproject/json-wallets@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/json-wallets@npm:5.7.0" - dependencies: - "@ethersproject/abstract-signer": "npm:^5.7.0" - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/hdnode": "npm:^5.7.0" - "@ethersproject/keccak256": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/pbkdf2": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/random": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - aes-js: "npm:3.0.0" - scrypt-js: "npm:3.0.1" - checksum: 10/4a1ef0912ffc8d18c392ae4e292948d86bffd715fe3dd3e66d1cd21f6c9267aeadad4da84261db853327f97cdfd765a377f9a87e39d4c6749223a69226faf0a1 - languageName: node - linkType: hard - -"@ethersproject/json-wallets@npm:5.8.0, @ethersproject/json-wallets@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/json-wallets@npm:5.8.0" - dependencies: - "@ethersproject/abstract-signer": "npm:^5.8.0" - "@ethersproject/address": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/hdnode": "npm:^5.8.0" - "@ethersproject/keccak256": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/pbkdf2": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - "@ethersproject/random": "npm:^5.8.0" - "@ethersproject/strings": "npm:^5.8.0" - "@ethersproject/transactions": "npm:^5.8.0" - aes-js: "npm:3.0.0" - scrypt-js: "npm:3.0.1" - checksum: 10/5cbf7e698ee7f26f54fceb672d9824b01816cd785182e638cb5cd1eaed5d80d8a4576e3cad92af46ac6d23404a806a47a72d5dee908af42322d091553a0d8da6 - languageName: node - linkType: hard - -"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/keccak256@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - js-sha3: "npm:0.8.0" - checksum: 10/ff70950d82203aab29ccda2553422cbac2e7a0c15c986bd20a69b13606ed8bb6e4fdd7b67b8d3b27d4f841e8222cbaccd33ed34be29f866fec7308f96ed244c6 - languageName: node - linkType: hard - -"@ethersproject/keccak256@npm:5.8.0, @ethersproject/keccak256@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/keccak256@npm:5.8.0" - dependencies: - "@ethersproject/bytes": "npm:^5.8.0" - js-sha3: "npm:0.8.0" - checksum: 10/af3621d2b18af6c8f5181dacad91e1f6da4e8a6065668b20e4c24684bdb130b31e45e0d4dbaed86d4f1314d01358aa119f05be541b696e455424c47849d81913 - languageName: node - linkType: hard - -"@ethersproject/logger@npm:5.7.0, @ethersproject/logger@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/logger@npm:5.7.0" - checksum: 10/683a939f467ae7510deedc23d7611d0932c3046137f5ffb92ba1e3c8cd9cf2fbbaa676b660c248441a0fa9143783137c46d6e6d17d676188dd5a6ef0b72dd091 - languageName: node - linkType: hard - -"@ethersproject/logger@npm:5.8.0, @ethersproject/logger@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/logger@npm:5.8.0" - checksum: 10/dab862d6cc3a4312f4c49d62b4a603f4b60707da8b8ff0fee6bdfee3cbed48b34ec8f23fedfef04dd3d24f2fa2d7ad2be753c775aa00fe24dcd400631d65004a - languageName: node - linkType: hard - -"@ethersproject/networks@npm:5.7.1, @ethersproject/networks@npm:^5.7.0": - version: 5.7.1 - resolution: "@ethersproject/networks@npm:5.7.1" - dependencies: - "@ethersproject/logger": "npm:^5.7.0" - checksum: 10/5265d0b4b72ef91af57be804b44507f4943038d609699764d8a69157ed381e30fe22ebf63630ed8e530ceb220f15d69dae8cda2e5023ccd793285c9d5882e599 - languageName: node - linkType: hard - -"@ethersproject/networks@npm:5.8.0, @ethersproject/networks@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/networks@npm:5.8.0" - dependencies: - "@ethersproject/logger": "npm:^5.8.0" - checksum: 10/8e2f4c3fd3a701ebd3d767a5f3217f8ced45a9f8ebf830c73b2dd87107dd50777f4869c3c9cc946698e2c597d3fe53eadeec55d19af7769c7d6bdb4a1493fb6f - languageName: node - linkType: hard - -"@ethersproject/pbkdf2@npm:5.7.0, @ethersproject/pbkdf2@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/pbkdf2@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/sha2": "npm:^5.7.0" - checksum: 10/dea7ba747805e24b81dfb99e695eb329509bf5cad1a42e48475ade28e060e567458a3d5bf930f302691bded733fd3fa364f0c7adce920f9f05a5ef8c13267aaa - languageName: node - linkType: hard - -"@ethersproject/pbkdf2@npm:5.8.0, @ethersproject/pbkdf2@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/pbkdf2@npm:5.8.0" - dependencies: - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/sha2": "npm:^5.8.0" - checksum: 10/203bb992eec3042256702f4c8259a37202af7b341cc6e370614cdc52541042fc3b795fb040592bd6be8b67376a798c45312ca1e6d5d179c3e8eb7431882f1fd1 - languageName: node - linkType: hard - -"@ethersproject/properties@npm:5.7.0, @ethersproject/properties@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/properties@npm:5.7.0" - dependencies: - "@ethersproject/logger": "npm:^5.7.0" - checksum: 10/f8401a161940aa1c32695115a20c65357877002a6f7dc13ab1600064bf54d7b825b4db49de8dc8da69efcbb0c9f34f8813e1540427e63e262ab841c1bf6c1c1e - languageName: node - linkType: hard - -"@ethersproject/properties@npm:5.8.0, @ethersproject/properties@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/properties@npm:5.8.0" - dependencies: - "@ethersproject/logger": "npm:^5.8.0" - checksum: 10/3bc1af678c1cf7c87f39aec24b1d86cfaa5da1f9f54e426558701fff1c088c1dcc9ec3e1f395e138bdfcda94a0161e7192f0596e11c8ff25d31735e6b33edc59 - languageName: node - linkType: hard - -"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5.7.0, @ethersproject/providers@npm:^5.7.2": - version: 5.7.2 - resolution: "@ethersproject/providers@npm:5.7.2" - dependencies: - "@ethersproject/abstract-provider": "npm:^5.7.0" - "@ethersproject/abstract-signer": "npm:^5.7.0" - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/base64": "npm:^5.7.0" - "@ethersproject/basex": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/constants": "npm:^5.7.0" - "@ethersproject/hash": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/networks": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/random": "npm:^5.7.0" - "@ethersproject/rlp": "npm:^5.7.0" - "@ethersproject/sha2": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - "@ethersproject/web": "npm:^5.7.0" - bech32: "npm:1.1.4" - ws: "npm:7.4.6" - checksum: 10/8534a1896e61b9f0b66427a639df64a5fe76d0c08ec59b9f0cc64fdd1d0cc28d9fc3312838ae8d7817c8f5e2e76b7f228b689bc33d1cbb8e1b9517d4c4f678d8 - languageName: node - linkType: hard - -"@ethersproject/providers@npm:5.8.0": - version: 5.8.0 - resolution: "@ethersproject/providers@npm:5.8.0" - dependencies: - "@ethersproject/abstract-provider": "npm:^5.8.0" - "@ethersproject/abstract-signer": "npm:^5.8.0" - "@ethersproject/address": "npm:^5.8.0" - "@ethersproject/base64": "npm:^5.8.0" - "@ethersproject/basex": "npm:^5.8.0" - "@ethersproject/bignumber": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/constants": "npm:^5.8.0" - "@ethersproject/hash": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/networks": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - "@ethersproject/random": "npm:^5.8.0" - "@ethersproject/rlp": "npm:^5.8.0" - "@ethersproject/sha2": "npm:^5.8.0" - "@ethersproject/strings": "npm:^5.8.0" - "@ethersproject/transactions": "npm:^5.8.0" - "@ethersproject/web": "npm:^5.8.0" - bech32: "npm:1.1.4" - ws: "npm:8.18.0" - checksum: 10/7d40fc0abb78fc9e69b71cb560beb2a93cf1da2cf978a061031a34c0ed76c2f5936ed8c0bdb9aa1307fe5308d0159e429b83b779dbd550639a886a88d6d17817 - languageName: node - linkType: hard - -"@ethersproject/random@npm:5.7.0, @ethersproject/random@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/random@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - checksum: 10/c23ec447998ce1147651bd58816db4d12dbeb404f66a03d14a13e1edb439879bab18528e1fc46b931502903ac7b1c08ea61d6a86e621a6e060fa63d41aeed3ac - languageName: node - linkType: hard - -"@ethersproject/random@npm:5.8.0, @ethersproject/random@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/random@npm:5.8.0" - dependencies: - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - checksum: 10/47c34a72c81183ac13a1b4635bb9d5cf1456e6329276f50c9e12711f404a9eb4536db824537ed05ef8839a0a358883dc3342d3ea83147b8bafeb767dc8f57e23 - languageName: node - linkType: hard - -"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/rlp@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - checksum: 10/3b8c5279f7654794d5874569f5598ae6a880e19e6616013a31e26c35c5f586851593a6e85c05ed7b391fbc74a1ea8612dd4d867daefe701bf4e8fcf2ab2f29b9 - languageName: node - linkType: hard - -"@ethersproject/rlp@npm:5.8.0, @ethersproject/rlp@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/rlp@npm:5.8.0" - dependencies: - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - checksum: 10/353f04618f44c822d20da607b055286b3374fc6ab9fc50b416140f21e410f6d6e89ff9d951bef667b8baf1314e2d5f0b47c5615c3f994a2c8b2d6c01c6329bb4 - languageName: node - linkType: hard - -"@ethersproject/sha2@npm:5.7.0, @ethersproject/sha2@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/sha2@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - hash.js: "npm:1.1.7" - checksum: 10/09321057c022effbff4cc2d9b9558228690b5dd916329d75c4b1ffe32ba3d24b480a367a7cc92d0f0c0b1c896814d03351ae4630e2f1f7160be2bcfbde435dbc - languageName: node - linkType: hard - -"@ethersproject/sha2@npm:5.8.0, @ethersproject/sha2@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/sha2@npm:5.8.0" - dependencies: - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - hash.js: "npm:1.1.7" - checksum: 10/ef8916e3033502476fba9358ba1993722ac3bb99e756d5681e4effa3dfa0f0bf0c29d3fa338662830660b45dd359cccb06ba40bc7b62cfd44f4a177b25829404 - languageName: node - linkType: hard - -"@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/signing-key@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - bn.js: "npm:^5.2.1" - elliptic: "npm:6.5.4" - hash.js: "npm:1.1.7" - checksum: 10/ff2f79ded86232b139e7538e4aaa294c6022a7aaa8c95a6379dd7b7c10a6d363685c6967c816f98f609581cf01f0a5943c667af89a154a00bcfe093a8c7f3ce7 - languageName: node - linkType: hard - -"@ethersproject/signing-key@npm:5.8.0, @ethersproject/signing-key@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/signing-key@npm:5.8.0" - dependencies: - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - bn.js: "npm:^5.2.1" - elliptic: "npm:6.6.1" - hash.js: "npm:1.1.7" - checksum: 10/07e5893bf9841e1d608c52b58aa240ed10c7aa01613ff45b15c312c1403887baa8ed543871721052d7b7dd75d80b1fa90945377b231d18ccb6986c6677c8315d - languageName: node - linkType: hard - -"@ethersproject/solidity@npm:5.7.0, @ethersproject/solidity@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/solidity@npm:5.7.0" - dependencies: - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/keccak256": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/sha2": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - checksum: 10/9a02f37f801c96068c3e7721f83719d060175bc4e80439fe060e92bd7acfcb6ac1330c7e71c49f4c2535ca1308f2acdcb01e00133129aac00581724c2d6293f3 - languageName: node - linkType: hard - -"@ethersproject/solidity@npm:5.8.0": - version: 5.8.0 - resolution: "@ethersproject/solidity@npm:5.8.0" - dependencies: - "@ethersproject/bignumber": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/keccak256": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/sha2": "npm:^5.8.0" - "@ethersproject/strings": "npm:^5.8.0" - checksum: 10/305166f3f8e8c2f5ad7b0b03ab96d52082fc79b5136601175e1c76d7abd8fd8e3e4b56569dea745dfa2b7fcbfd180c5d824b03fea7e08dd53d515738a35e51dd - languageName: node - linkType: hard - -"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/strings@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/constants": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - checksum: 10/24191bf30e98d434a9fba2f522784f65162d6712bc3e1ccc98ed85c5da5884cfdb5a1376b7695374655a7b95ec1f5fdbeef5afc7d0ea77ffeb78047e9b791fa5 - languageName: node - linkType: hard - -"@ethersproject/strings@npm:5.8.0, @ethersproject/strings@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/strings@npm:5.8.0" - dependencies: - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/constants": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - checksum: 10/536264dad4b9ad42d8287be7b7a9f3e243d0172fafa459e22af2d416eb6fe6a46ff623ca5456457f841dec4b080939da03ed02ab9774dcd1f2391df9ef5a96bb - languageName: node - linkType: hard - -"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/transactions@npm:5.7.0" - dependencies: - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/constants": "npm:^5.7.0" - "@ethersproject/keccak256": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/rlp": "npm:^5.7.0" - "@ethersproject/signing-key": "npm:^5.7.0" - checksum: 10/d809e9d40020004b7de9e34bf39c50377dce8ed417cdf001bfabc81ecb1b7d1e0c808fdca0a339ea05e1b380648eaf336fe70f137904df2d3c3135a38190a5af - languageName: node - linkType: hard - -"@ethersproject/transactions@npm:5.8.0, @ethersproject/transactions@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/transactions@npm:5.8.0" - dependencies: - "@ethersproject/address": "npm:^5.8.0" - "@ethersproject/bignumber": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/constants": "npm:^5.8.0" - "@ethersproject/keccak256": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - "@ethersproject/rlp": "npm:^5.8.0" - "@ethersproject/signing-key": "npm:^5.8.0" - checksum: 10/b43fd97ee359154c9162037c7aedc23abafae3cedf78d8fd2e641e820a0443120d22c473ec9bb79e8301f179f61a6120d61b0b757560e3aad8ae2110127018ba - languageName: node - linkType: hard - -"@ethersproject/units@npm:5.7.0, @ethersproject/units@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/units@npm:5.7.0" - dependencies: - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/constants": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - checksum: 10/304714f848cd32e57df31bf545f7ad35c2a72adae957198b28cbc62166daa929322a07bff6e9c9ac4577ab6aa0de0546b065ed1b2d20b19e25748b7d475cb0fc - languageName: node - linkType: hard - -"@ethersproject/units@npm:5.8.0": - version: 5.8.0 - resolution: "@ethersproject/units@npm:5.8.0" - dependencies: - "@ethersproject/bignumber": "npm:^5.8.0" - "@ethersproject/constants": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - checksum: 10/cc7180c85f695449c20572602971145346fc5c169ee32f23d79ac31cc8c9c66a2049e3ac852b940ddccbe39ab1db3b81e3e093b604d9ab7ab27639ecb933b270 - languageName: node - linkType: hard - -"@ethersproject/wallet@npm:5.7.0, @ethersproject/wallet@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/wallet@npm:5.7.0" - dependencies: - "@ethersproject/abstract-provider": "npm:^5.7.0" - "@ethersproject/abstract-signer": "npm:^5.7.0" - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/hash": "npm:^5.7.0" - "@ethersproject/hdnode": "npm:^5.7.0" - "@ethersproject/json-wallets": "npm:^5.7.0" - "@ethersproject/keccak256": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/random": "npm:^5.7.0" - "@ethersproject/signing-key": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - "@ethersproject/wordlists": "npm:^5.7.0" - checksum: 10/340f8e5c77c6c47c4d1596c200d97c53c1d4b4eb54d9166d0f2a114cb81685e7689255b0627e917fbcdc29cb54c4bd1f1a9909f3096ef9dff9acc0b24972f1c1 - languageName: node - linkType: hard - -"@ethersproject/wallet@npm:5.8.0": - version: 5.8.0 - resolution: "@ethersproject/wallet@npm:5.8.0" - dependencies: - "@ethersproject/abstract-provider": "npm:^5.8.0" - "@ethersproject/abstract-signer": "npm:^5.8.0" - "@ethersproject/address": "npm:^5.8.0" - "@ethersproject/bignumber": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/hash": "npm:^5.8.0" - "@ethersproject/hdnode": "npm:^5.8.0" - "@ethersproject/json-wallets": "npm:^5.8.0" - "@ethersproject/keccak256": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - "@ethersproject/random": "npm:^5.8.0" - "@ethersproject/signing-key": "npm:^5.8.0" - "@ethersproject/transactions": "npm:^5.8.0" - "@ethersproject/wordlists": "npm:^5.8.0" - checksum: 10/354c8985a74b1bb0a8ba80f374c1af882f7657716b974dda235184ee98151e30741b24f58a93c84693aa6e72a8a5c3ae62143966967f40f52f62093559388e6a - languageName: node - linkType: hard - -"@ethersproject/web@npm:5.7.1, @ethersproject/web@npm:^5.7.0": - version: 5.7.1 - resolution: "@ethersproject/web@npm:5.7.1" - dependencies: - "@ethersproject/base64": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - checksum: 10/c83b6b3ac40573ddb67b1750bb4cf21ded7d8555be5e53a97c0f34964622fd88de9220a90a118434bae164a2bff3acbdc5ecb990517b5f6dc32bdad7adf604c2 - languageName: node - linkType: hard - -"@ethersproject/web@npm:5.8.0, @ethersproject/web@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/web@npm:5.8.0" - dependencies: - "@ethersproject/base64": "npm:^5.8.0" - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - "@ethersproject/strings": "npm:^5.8.0" - checksum: 10/93aad7041ffae7a4f881cc8df3356a297d736b50e6e48952b3b76e547b83e4d9189bbf2f417543031e91e74568c54395d1bb43c3252c3adf4f7e1c0187012912 - languageName: node - linkType: hard - -"@ethersproject/wordlists@npm:5.7.0, @ethersproject/wordlists@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/wordlists@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/hash": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - checksum: 10/737fca67ad743a32020f50f5b9e147e5683cfba2692367c1124a5a5538be78515865257b426ec9141daac91a70295e5e21bef7a193b79fe745f1be378562ccaa - languageName: node - linkType: hard - -"@ethersproject/wordlists@npm:5.8.0, @ethersproject/wordlists@npm:^5.8.0": - version: 5.8.0 - resolution: "@ethersproject/wordlists@npm:5.8.0" - dependencies: - "@ethersproject/bytes": "npm:^5.8.0" - "@ethersproject/hash": "npm:^5.8.0" - "@ethersproject/logger": "npm:^5.8.0" - "@ethersproject/properties": "npm:^5.8.0" - "@ethersproject/strings": "npm:^5.8.0" - checksum: 10/b8e6aa7d2195bb568847f360f6525ddc3d145404fbd4553e2e05daf4a95f58167591feb69e16e3398a28114ea85e1895fc8f5bd1c0cbf8b578123d7c1d21c32d - languageName: node - linkType: hard - -"@float-capital/float-subgraph-uncrashable@npm:0.0.0-internal-testing.5": - version: 0.0.0-internal-testing.5 - resolution: "@float-capital/float-subgraph-uncrashable@npm:0.0.0-internal-testing.5" - dependencies: - "@rescript/std": "npm:9.0.0" - graphql: "npm:^16.6.0" - graphql-import-node: "npm:^0.0.5" - js-yaml: "npm:^4.1.0" - bin: - uncrashable: bin/uncrashable - checksum: 10/f1fb5ebde38515236f967e816ad746eee6d4e89fc4c5f32be71c53c4fb822900cc7e0551aade16e46f65774eb671c6473066a257ad83d445bc4823ccad578c74 - languageName: node - linkType: hard - -"@fortawesome/fontawesome-common-types@npm:6.7.2": - version: 6.7.2 - resolution: "@fortawesome/fontawesome-common-types@npm:6.7.2" - checksum: 10/3c2e938afe6f5939bd63181faaec7b062902d9ed970c75d6becb1fd8e5ca0ed937e7d1513bd7ae545da407d0682039e50730cdb3136b58656128838ea2c58ac0 - languageName: node - linkType: hard - -"@fortawesome/free-regular-svg-icons@npm:^6.6.0": - version: 6.7.2 - resolution: "@fortawesome/free-regular-svg-icons@npm:6.7.2" - dependencies: - "@fortawesome/fontawesome-common-types": "npm:6.7.2" - checksum: 10/f4385f19f04c07447c71943b2ae624d5b63e58d3f62583a12f75417e6e3e108a4df0d1466127c2c3f9fc2d7d68e3a6634c45b212ddf244721cb7461ba34c0f95 - languageName: node - linkType: hard - -"@fortawesome/free-solid-svg-icons@npm:^6.6.0": - version: 6.7.2 - resolution: "@fortawesome/free-solid-svg-icons@npm:6.7.2" - dependencies: - "@fortawesome/fontawesome-common-types": "npm:6.7.2" - checksum: 10/efcd90cd5d333995ff4012a9d77a8b23523e246fa418524edf08bb6af8b14db2ee0b08ee5f7460a86474d352af06e1a2581cc827ee3706e9c0e92e178b50e27f - languageName: node - linkType: hard - -"@graphprotocol/graph-cli@npm:^0.96.0": - version: 0.96.0 - resolution: "@graphprotocol/graph-cli@npm:0.96.0" - dependencies: - "@float-capital/float-subgraph-uncrashable": "npm:0.0.0-internal-testing.5" - "@oclif/core": "npm:4.2.6" - "@oclif/plugin-autocomplete": "npm:^3.2.11" - "@oclif/plugin-not-found": "npm:^3.2.29" - "@oclif/plugin-warn-if-update-available": "npm:^3.1.24" - "@pinax/graph-networks-registry": "npm:^0.6.5" - "@whatwg-node/fetch": "npm:^0.10.1" - assemblyscript: "npm:0.19.23" - chokidar: "npm:4.0.3" - debug: "npm:4.4.0" - docker-compose: "npm:1.1.0" - fs-extra: "npm:11.3.0" - glob: "npm:11.0.1" - gluegun: "npm:5.2.0" - graphql: "npm:16.10.0" - immutable: "npm:5.0.3" - jayson: "npm:4.1.3" - js-yaml: "npm:4.1.0" - kubo-rpc-client: "npm:^5.0.2" - open: "npm:10.1.0" - prettier: "npm:3.4.2" - semver: "npm:7.7.1" - tmp-promise: "npm:3.0.3" - undici: "npm:7.3.0" - web3-eth-abi: "npm:4.4.1" - yaml: "npm:2.7.0" - bin: - graph: bin/run.js - checksum: 10/f61c2f5a1eca4ef7377da9bb4acf2ac31af80ae1c262cde1721237d90dbce37ab0d5bffd227ee60a89507b1bfe4b43bf2848213abadf5f880d2109b892cb6d55 - languageName: node - linkType: hard - -"@graphprotocol/graph-ts@npm:^0.38.0": - version: 0.38.0 - resolution: "@graphprotocol/graph-ts@npm:0.38.0" - dependencies: - assemblyscript: "npm:0.27.31" - checksum: 10/4f08c202b0f186a8912323c9eec5b52d5a6abd868ebc6208b6114f4a0eea6bba87110ea51c7634d30380ecdd13b0812d36944f5b5934f98bb009581a801b0f41 - languageName: node - linkType: hard - -"@graphql-codegen/add@npm:^5.0.3": - version: 5.0.3 - resolution: "@graphql-codegen/add@npm:5.0.3" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.0.3" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/5e4ea9b5d76e6f472015185d0d007abf38ba7b27fb613b163ef1ca6c732695951111721896ee36894d098b27a67c55a84d000b503db93b9d9e6713e34d2fa5a6 - languageName: node - linkType: hard - -"@graphql-codegen/cli@npm:^5.0.3": - version: 5.0.3 - resolution: "@graphql-codegen/cli@npm:5.0.3" - dependencies: - "@babel/generator": "npm:^7.18.13" - "@babel/template": "npm:^7.18.10" - "@babel/types": "npm:^7.18.13" - "@graphql-codegen/client-preset": "npm:^4.4.0" - "@graphql-codegen/core": "npm:^4.0.2" - "@graphql-codegen/plugin-helpers": "npm:^5.0.3" - "@graphql-tools/apollo-engine-loader": "npm:^8.0.0" - "@graphql-tools/code-file-loader": "npm:^8.0.0" - "@graphql-tools/git-loader": "npm:^8.0.0" - "@graphql-tools/github-loader": "npm:^8.0.0" - "@graphql-tools/graphql-file-loader": "npm:^8.0.0" - "@graphql-tools/json-file-loader": "npm:^8.0.0" - "@graphql-tools/load": "npm:^8.0.0" - "@graphql-tools/prisma-loader": "npm:^8.0.0" - "@graphql-tools/url-loader": "npm:^8.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - "@whatwg-node/fetch": "npm:^0.9.20" - chalk: "npm:^4.1.0" - cosmiconfig: "npm:^8.1.3" - debounce: "npm:^1.2.0" - detect-indent: "npm:^6.0.0" - graphql-config: "npm:^5.1.1" - inquirer: "npm:^8.0.0" - is-glob: "npm:^4.0.1" - jiti: "npm:^1.17.1" - json-to-pretty-yaml: "npm:^1.2.2" - listr2: "npm:^4.0.5" - log-symbols: "npm:^4.0.0" - micromatch: "npm:^4.0.5" - shell-quote: "npm:^1.7.3" - string-env-interpolation: "npm:^1.0.1" - ts-log: "npm:^2.2.3" - tslib: "npm:^2.4.0" - yaml: "npm:^2.3.1" - yargs: "npm:^17.0.0" - peerDependencies: - "@parcel/watcher": ^2.1.0 - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - peerDependenciesMeta: - "@parcel/watcher": - optional: true - bin: - gql-gen: cjs/bin.js - graphql-code-generator: cjs/bin.js - graphql-codegen: cjs/bin.js - graphql-codegen-esm: esm/bin.js - checksum: 10/c3359668f824246e78656d26af506b5b279d50e08a56f54db87da492bd4d0a8e8b6540a6119402d7f5026c137babfd79e628897c6038e199ee6322f688eec757 - languageName: node - linkType: hard - -"@graphql-codegen/client-preset@npm:^4.4.0": - version: 4.5.0 - resolution: "@graphql-codegen/client-preset@npm:4.5.0" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.20.2" - "@babel/template": "npm:^7.20.7" - "@graphql-codegen/add": "npm:^5.0.3" - "@graphql-codegen/gql-tag-operations": "npm:4.0.11" - "@graphql-codegen/plugin-helpers": "npm:^5.1.0" - "@graphql-codegen/typed-document-node": "npm:^5.0.11" - "@graphql-codegen/typescript": "npm:^4.1.1" - "@graphql-codegen/typescript-operations": "npm:^4.3.1" - "@graphql-codegen/visitor-plugin-common": "npm:^5.5.0" - "@graphql-tools/documents": "npm:^1.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - "@graphql-typed-document-node/core": "npm:3.2.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/bbbbaa255f6cb1248cd143b54e06f6fc553cdd9f7ca002977bbf42b92cf9d5c6fe052eda1ae1233eab3d50dd80fbb04609bfeeb29132019faead04300e61ddc0 - languageName: node - linkType: hard - -"@graphql-codegen/client-preset@npm:^4.5.1": - version: 4.5.1 - resolution: "@graphql-codegen/client-preset@npm:4.5.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.20.2" - "@babel/template": "npm:^7.20.7" - "@graphql-codegen/add": "npm:^5.0.3" - "@graphql-codegen/gql-tag-operations": "npm:4.0.12" - "@graphql-codegen/plugin-helpers": "npm:^5.1.0" - "@graphql-codegen/typed-document-node": "npm:^5.0.12" - "@graphql-codegen/typescript": "npm:^4.1.2" - "@graphql-codegen/typescript-operations": "npm:^4.4.0" - "@graphql-codegen/visitor-plugin-common": "npm:^5.6.0" - "@graphql-tools/documents": "npm:^1.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - "@graphql-typed-document-node/core": "npm:3.2.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/4f8160f471609356829ccaccbb5f13fdef2da93ef074adb339acd82c7894b6ce51f997b21fd673be58358953ebab22fc6d2a2a4e21543d4713e42d7adbdfec5e - languageName: node - linkType: hard - -"@graphql-codegen/core@npm:^4.0.2": - version: 4.0.2 - resolution: "@graphql-codegen/core@npm:4.0.2" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.0.3" - "@graphql-tools/schema": "npm:^10.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/09aa9d5b3215b7c8a81e07d6c826fa9697e4d20c7fa4333905aa89afe88044ce5c733633a59c6590fc997f03a6f62f9aecf76d6c1efa4f1a16c5ad2b0b6f665b - languageName: node - linkType: hard - -"@graphql-codegen/gql-tag-operations@npm:4.0.11": - version: 4.0.11 - resolution: "@graphql-codegen/gql-tag-operations@npm:4.0.11" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.1.0" - "@graphql-codegen/visitor-plugin-common": "npm:5.5.0" - "@graphql-tools/utils": "npm:^10.0.0" - auto-bind: "npm:~4.0.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/cc277d1af9da611dbd37c00f18d08e8fdc634632c0fba6789a1027931f8e3b925ad64af27a6fa7c23ed44afdef131f9c03025ca9b077cd6e95e5c9823751c6a3 - languageName: node - linkType: hard - -"@graphql-codegen/gql-tag-operations@npm:4.0.12": - version: 4.0.12 - resolution: "@graphql-codegen/gql-tag-operations@npm:4.0.12" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.1.0" - "@graphql-codegen/visitor-plugin-common": "npm:5.6.0" - "@graphql-tools/utils": "npm:^10.0.0" - auto-bind: "npm:~4.0.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/21445bebc7759e1da5044647c70fb5c62441f5064595bf2b7f27d832ff6a08d40bd5363fb69a280639936eddb8ec620da3d12b01457b368ea4b015bc6f52de49 - languageName: node - linkType: hard - -"@graphql-codegen/plugin-helpers@npm:^5.0.3, @graphql-codegen/plugin-helpers@npm:^5.1.0": - version: 5.1.0 - resolution: "@graphql-codegen/plugin-helpers@npm:5.1.0" - dependencies: - "@graphql-tools/utils": "npm:^10.0.0" - change-case-all: "npm:1.0.15" - common-tags: "npm:1.8.2" - import-from: "npm:4.0.0" - lodash: "npm:~4.17.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/415e79be90a1f5d289c9cd7f0a581c277d544be1f7136d7f74f5f067c205eb35fd6cd522455866fa8105f241eec4c77bebe02eef007d5021a7b7a453b85b2001 - languageName: node - linkType: hard - -"@graphql-codegen/schema-ast@npm:^4.0.2": - version: 4.1.0 - resolution: "@graphql-codegen/schema-ast@npm:4.1.0" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.0.3" - "@graphql-tools/utils": "npm:^10.0.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/cddec7723d708990ac8e33eb8935e72545b60ed7b772452ba45b60e577af950d23503de83f0919d1730f7d52dcb970900d3587d9a54202032164ba3c246d4c10 - languageName: node - linkType: hard - -"@graphql-codegen/typed-document-node@npm:^5.0.11": - version: 5.0.11 - resolution: "@graphql-codegen/typed-document-node@npm:5.0.11" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.1.0" - "@graphql-codegen/visitor-plugin-common": "npm:5.5.0" - auto-bind: "npm:~4.0.0" - change-case-all: "npm:1.0.15" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/9320fbc9ccf13d0b0ecc7b57f1b0799629ce93a4e0cf95a76cdeb38981e2da92775734daa7bf68a9383e3d01f9a47f4b35cb870aef710f5dc137234b93b9d7cf - languageName: node - linkType: hard - -"@graphql-codegen/typed-document-node@npm:^5.0.12": - version: 5.0.12 - resolution: "@graphql-codegen/typed-document-node@npm:5.0.12" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.1.0" - "@graphql-codegen/visitor-plugin-common": "npm:5.6.0" - auto-bind: "npm:~4.0.0" - change-case-all: "npm:1.0.15" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/68d5e284649e7c545910d3cfb479c26803124a2b777caf50e365e2495614d4e1c3cce533dd0186e53fce0f7487d609c69514f392572280cd6d40f4b1ba0c75c2 - languageName: node - linkType: hard - -"@graphql-codegen/typescript-operations@npm:^4.3.1": - version: 4.3.1 - resolution: "@graphql-codegen/typescript-operations@npm:4.3.1" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.1.0" - "@graphql-codegen/typescript": "npm:^4.1.1" - "@graphql-codegen/visitor-plugin-common": "npm:5.5.0" - auto-bind: "npm:~4.0.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/cdad24e16aa9b369e3ef2434032f2527fd1363e82256dd09d2e9aa6d9a55539eeea15665a4289e7695145f7417a9a765ad73979054a97c606d757ee060780819 - languageName: node - linkType: hard - -"@graphql-codegen/typescript-operations@npm:^4.4.0": - version: 4.4.0 - resolution: "@graphql-codegen/typescript-operations@npm:4.4.0" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.1.0" - "@graphql-codegen/typescript": "npm:^4.1.2" - "@graphql-codegen/visitor-plugin-common": "npm:5.6.0" - auto-bind: "npm:~4.0.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/9b4d3dfe2641ee8b8f06a004af733fca05f93a8b8274f44296f61a43e313d94954cd2fcfeb9dc63e852116fc7e017b93cce94ca49fa433025412efc185a61323 - languageName: node - linkType: hard - -"@graphql-codegen/typescript@npm:^4.1.1": - version: 4.1.1 - resolution: "@graphql-codegen/typescript@npm:4.1.1" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.1.0" - "@graphql-codegen/schema-ast": "npm:^4.0.2" - "@graphql-codegen/visitor-plugin-common": "npm:5.5.0" - auto-bind: "npm:~4.0.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/a47fabef00832122f4981fecbbcfd1e90e2567bdc7fc1d63520b018ae1a6db5217eb42f4f4744265cc492e64cd134b87b7bcfdaddfd7b3e35ce5c47d4548225d - languageName: node - linkType: hard - -"@graphql-codegen/typescript@npm:^4.1.2": - version: 4.1.2 - resolution: "@graphql-codegen/typescript@npm:4.1.2" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.1.0" - "@graphql-codegen/schema-ast": "npm:^4.0.2" - "@graphql-codegen/visitor-plugin-common": "npm:5.6.0" - auto-bind: "npm:~4.0.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/a0a853a403df6b5a4e4a3d342fad86bb5daaa6aaa3b10c922529e43efe8b38e9bf95f17d4086698dfa30efc8d94aef85f4ac890f80107ce11a67aa1db76e1ca4 - languageName: node - linkType: hard - -"@graphql-codegen/visitor-plugin-common@npm:5.5.0, @graphql-codegen/visitor-plugin-common@npm:^5.5.0": - version: 5.5.0 - resolution: "@graphql-codegen/visitor-plugin-common@npm:5.5.0" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.1.0" - "@graphql-tools/optimize": "npm:^2.0.0" - "@graphql-tools/relay-operation-optimizer": "npm:^7.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - auto-bind: "npm:~4.0.0" - change-case-all: "npm:1.0.15" - dependency-graph: "npm:^0.11.0" - graphql-tag: "npm:^2.11.0" - parse-filepath: "npm:^1.0.2" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/f923c40ae996a2accf3a951d302b3da9b3c063f4b1c66b159bf3f74910e18ea592e87b3f35495a84f6c36d1198d880dd07f6e8c3fe94b0d6dba0f2f77522cb5d - languageName: node - linkType: hard - -"@graphql-codegen/visitor-plugin-common@npm:5.6.0, @graphql-codegen/visitor-plugin-common@npm:^5.6.0": - version: 5.6.0 - resolution: "@graphql-codegen/visitor-plugin-common@npm:5.6.0" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.1.0" - "@graphql-tools/optimize": "npm:^2.0.0" - "@graphql-tools/relay-operation-optimizer": "npm:^7.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - auto-bind: "npm:~4.0.0" - change-case-all: "npm:1.0.15" - dependency-graph: "npm:^0.11.0" - graphql-tag: "npm:^2.11.0" - parse-filepath: "npm:^1.0.2" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/3e398546cc219575a8a4cd10f554148a3db94aef4752c28cc6897b81b40caa7e42899680b65f7b57288b61f076f2aca71d90f7acdd5e05b47b8aca3c9e0f0146 - languageName: node - linkType: hard - -"@graphql-tools/apollo-engine-loader@npm:^8.0.0": - version: 8.0.0 - resolution: "@graphql-tools/apollo-engine-loader@npm:8.0.0" - dependencies: - "@ardatan/sync-fetch": "npm:^0.0.1" - "@graphql-tools/utils": "npm:^10.0.0" - "@whatwg-node/fetch": "npm:^0.9.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/4f9b761de2ee787b1e5afd549ae4e328175ca080915c5e31f418f5cb1a322d87b17d863c87ce5c65dcc24c7a9cab35034b457814a8021e45a6d4fba1da1700de - languageName: node - linkType: hard - -"@graphql-tools/batch-execute@npm:^9.0.0": - version: 9.0.0 - resolution: "@graphql-tools/batch-execute@npm:9.0.0" - dependencies: - "@graphql-tools/utils": "npm:^10.0.0" - dataloader: "npm:^2.2.2" - tslib: "npm:^2.4.0" - value-or-promise: "npm:^1.0.12" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/580d5b190f17ccd33ce95428ce4cdaa64d5513a23c93005ac5e6793fdb1a814ed9144c52ce23f84b51e84aff153afb391cf51923286fdac68cb892114bc45302 - languageName: node - linkType: hard - -"@graphql-tools/batch-execute@npm:^9.0.11": - version: 9.0.11 - resolution: "@graphql-tools/batch-execute@npm:9.0.11" - dependencies: - "@graphql-tools/utils": "npm:^10.7.0" - dataloader: "npm:^2.2.3" - tslib: "npm:^2.8.1" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/6180424a5fa36a446baa665a92cff0332a566b1bd7481e2641c9d0aa2a7a47a24d21a9b90bb3d7f4c0d5a7331fc9e623fe43746f07e5eb0654419a29d860a940 - languageName: node - linkType: hard - -"@graphql-tools/code-file-loader@npm:^8.0.0": - version: 8.0.1 - resolution: "@graphql-tools/code-file-loader@npm:8.0.1" - dependencies: - "@graphql-tools/graphql-tag-pluck": "npm:8.0.1" - "@graphql-tools/utils": "npm:^10.0.0" - globby: "npm:^11.0.3" - tslib: "npm:^2.4.0" - unixify: "npm:^1.0.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/8da2f0a9732593e418606bb69cae78a376e27075c885530e90eb4415330c13462ca07db830f8cbdca0e39f0ef685709049e3000bb68c31d4bbf02b4643b548b6 - languageName: node - linkType: hard - -"@graphql-tools/delegate@npm:^10.0.0": - version: 10.0.0 - resolution: "@graphql-tools/delegate@npm:10.0.0" - dependencies: - "@graphql-tools/batch-execute": "npm:^9.0.0" - "@graphql-tools/executor": "npm:^1.0.0" - "@graphql-tools/schema": "npm:^10.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - dataloader: "npm:^2.2.2" - tslib: "npm:^2.5.0" - value-or-promise: "npm:^1.0.12" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/7f2898568351ebb1e33b9cc8f0b2e631a3e6a3d3c40f3d10afbe74147a5c6be4e82b49d90f207d605783e653657d48a91bb1667b1f2bb0c2e00fc7266c2cf068 - languageName: node - linkType: hard - -"@graphql-tools/documents@npm:^1.0.0": - version: 1.0.0 - resolution: "@graphql-tools/documents@npm:1.0.0" - dependencies: - lodash.sortby: "npm:^4.7.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/4fe29835abf4942c813c136a10742ddcff09a3dc0acbe34eeab48193d1c16ed2074ccb5608b6118ffbfda756d27ef4feae35b6476736395c6d079dd8738b0642 - languageName: node - linkType: hard - -"@graphql-tools/executor-graphql-ws@npm:^1.0.0": - version: 1.0.0 - resolution: "@graphql-tools/executor-graphql-ws@npm:1.0.0" - dependencies: - "@graphql-tools/utils": "npm:^10.0.0" - "@repeaterjs/repeater": "npm:3.0.4" - "@types/ws": "npm:^8.0.0" - graphql-ws: "npm:5.13.1" - isomorphic-ws: "npm:5.0.0" - tslib: "npm:^2.4.0" - ws: "npm:8.13.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/6f3ee735b16c292e597fc84d9aa73b8608786ba587f8b88af020b14961415bf2e4dd1462aa6b782aa59c14fc3ef4dcaa8af99be07b8bf8348ee19a58bfa53b9f - languageName: node - linkType: hard - -"@graphql-tools/executor-http@npm:^1.0.0": - version: 1.0.0 - resolution: "@graphql-tools/executor-http@npm:1.0.0" - dependencies: - "@graphql-tools/utils": "npm:^10.0.0" - "@repeaterjs/repeater": "npm:^3.0.4" - "@whatwg-node/fetch": "npm:^0.9.0" - dset: "npm:^3.1.2" - extract-files: "npm:^11.0.0" - meros: "npm:^1.2.1" - tslib: "npm:^2.4.0" - value-or-promise: "npm:^1.0.12" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/1e33c3218cf51842ebebce06064212d46ad2fb37ccb5c0a5ed0c16c071dabfdb217cecbb76ef4cceb1cc3f3fc276832b2bb02438ba2c0ef0b5b8f8362704922f - languageName: node - linkType: hard - -"@graphql-tools/executor-legacy-ws@npm:^1.0.0": - version: 1.0.1 - resolution: "@graphql-tools/executor-legacy-ws@npm:1.0.1" - dependencies: - "@graphql-tools/utils": "npm:^10.0.0" - "@types/ws": "npm:^8.0.0" - isomorphic-ws: "npm:5.0.0" - tslib: "npm:^2.4.0" - ws: "npm:8.13.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/80dc7dfa2e3288d624dac101551d8b0ba79b1cdb5114f8188abea18d2644ebcef02c044fbe780113e50e8ddb6525ce9a32c6625a4eadf07dab3b3eef4135fe04 - languageName: node - linkType: hard - -"@graphql-tools/executor@npm:^1.0.0": - version: 1.1.0 - resolution: "@graphql-tools/executor@npm:1.1.0" - dependencies: - "@graphql-tools/utils": "npm:^10.0.0" - "@graphql-typed-document-node/core": "npm:3.2.0" - "@repeaterjs/repeater": "npm:^3.0.4" - tslib: "npm:^2.4.0" - value-or-promise: "npm:^1.0.12" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/673fcd0054f79ca0a4ca23d9ee3f5c6553e4b12bf5ed0d5d2e4ee94048e84e2314b818ff5aca0350694f00ef336dcb0cbbf41e14de302beaeeb0498ab8624ac1 - languageName: node - linkType: hard - -"@graphql-tools/git-loader@npm:^8.0.0": - version: 8.0.1 - resolution: "@graphql-tools/git-loader@npm:8.0.1" - dependencies: - "@graphql-tools/graphql-tag-pluck": "npm:8.0.1" - "@graphql-tools/utils": "npm:^10.0.0" - is-glob: "npm:4.0.3" - micromatch: "npm:^4.0.4" - tslib: "npm:^2.4.0" - unixify: "npm:^1.0.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/5bf93971abd6d4b25831ecdfcc095065e490de0f7d17419667c51fe2697a4662263cb546e7de9f2d48d03cb98b6bc27a910657ce0a9f8b33d80cebcdea812026 - languageName: node - linkType: hard - -"@graphql-tools/github-loader@npm:^8.0.0": - version: 8.0.0 - resolution: "@graphql-tools/github-loader@npm:8.0.0" - dependencies: - "@ardatan/sync-fetch": "npm:^0.0.1" - "@graphql-tools/executor-http": "npm:^1.0.0" - "@graphql-tools/graphql-tag-pluck": "npm:^8.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - "@whatwg-node/fetch": "npm:^0.9.0" - tslib: "npm:^2.4.0" - value-or-promise: "npm:^1.0.12" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/d29e00d5fe63069b983f585636493e03211e673397ce5e4c8e4d99ebae9d321417373444134978d1d6c2b4f614a58873f0d3a4e8f2deaebdec651474603a12b1 - languageName: node - linkType: hard - -"@graphql-tools/graphql-file-loader@npm:^8.0.0": - version: 8.0.0 - resolution: "@graphql-tools/graphql-file-loader@npm:8.0.0" - dependencies: - "@graphql-tools/import": "npm:7.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - globby: "npm:^11.0.3" - tslib: "npm:^2.4.0" - unixify: "npm:^1.0.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/bf1248593123f6aa740da8b58746e2a60f5a1f413da1dcff8890daae0f2eeeac1837a2d419bdbdfb6ccb2877e03103d335ae0d1696e392f6af247414b0ad8406 - languageName: node - linkType: hard - -"@graphql-tools/graphql-tag-pluck@npm:8.0.1, @graphql-tools/graphql-tag-pluck@npm:^8.0.0": - version: 8.0.1 - resolution: "@graphql-tools/graphql-tag-pluck@npm:8.0.1" - dependencies: - "@babel/parser": "npm:^7.16.8" - "@babel/plugin-syntax-import-assertions": "npm:^7.20.0" - "@babel/traverse": "npm:^7.16.8" - "@babel/types": "npm:^7.16.8" - "@graphql-tools/utils": "npm:^10.0.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/7717f48b7c695be4408c10e2d534673ccbb00c8e2f196744a7115062a7ae588d113b79520cd8a87e67e2846a63a6d6e36a5f9d1693fdba4fb3ee7752580cb973 - languageName: node - linkType: hard - -"@graphql-tools/import@npm:7.0.0": - version: 7.0.0 - resolution: "@graphql-tools/import@npm:7.0.0" - dependencies: - "@graphql-tools/utils": "npm:^10.0.0" - resolve-from: "npm:5.0.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/74741f670fb028526c363cd83871eeb9a1f51ecae27d1640914b0d5ddc482dc0a74d96b996244c726a12e80f63a4f8ec15fc71098e3b87ed3c463fa06ce8ac6c - languageName: node - linkType: hard - -"@graphql-tools/json-file-loader@npm:^8.0.0": - version: 8.0.0 - resolution: "@graphql-tools/json-file-loader@npm:8.0.0" - dependencies: - "@graphql-tools/utils": "npm:^10.0.0" - globby: "npm:^11.0.3" - tslib: "npm:^2.4.0" - unixify: "npm:^1.0.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/a023466e261599803d1f8e1af3bb7b0007a5206c29df4fb14a448c1dacc04807482b97374c2bbb82bd286523f6a032c355d74f39bffb866325651f1a0f0412a2 - languageName: node - linkType: hard - -"@graphql-tools/load@npm:^8.0.0": - version: 8.0.0 - resolution: "@graphql-tools/load@npm:8.0.0" - dependencies: - "@graphql-tools/schema": "npm:^10.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - p-limit: "npm:3.1.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/64bbcaae28bf895f0d1f0636325a5b567cca1524ffd02bcad58a063087e74c65b9c1a5743adc2cc18a4f3c0379f7426090f8784abcddfd60997f187e6f100eb4 - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:^9.0.0": - version: 9.0.0 - resolution: "@graphql-tools/merge@npm:9.0.0" - dependencies: - "@graphql-tools/utils": "npm:^10.0.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/7bf74f71a22d87dbc47fc778cf6d0366bcd36ae0a271cc5b382ffa90020f033e227ad97c94d785ac2943317ffce9e904119c60d72b3da5b655b5837e78652b82 - languageName: node - linkType: hard - -"@graphql-tools/optimize@npm:^2.0.0": - version: 2.0.0 - resolution: "@graphql-tools/optimize@npm:2.0.0" - dependencies: - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/7f79c0e1852abc571308e887d27d613da5b797256c8c6eb6c5fe7ca77f09e61524778ae281cebc0b698c51d4fe1074e2b8e0d0627b8e2dcf505aa6ed09b49a2f - languageName: node - linkType: hard - -"@graphql-tools/prisma-loader@npm:^8.0.0": - version: 8.0.1 - resolution: "@graphql-tools/prisma-loader@npm:8.0.1" - dependencies: - "@graphql-tools/url-loader": "npm:^8.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - "@types/js-yaml": "npm:^4.0.0" - "@types/json-stable-stringify": "npm:^1.0.32" - "@whatwg-node/fetch": "npm:^0.9.0" - chalk: "npm:^4.1.0" - debug: "npm:^4.3.1" - dotenv: "npm:^16.0.0" - graphql-request: "npm:^6.0.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.0" - jose: "npm:^4.11.4" - js-yaml: "npm:^4.0.0" - json-stable-stringify: "npm:^1.0.1" - lodash: "npm:^4.17.20" - scuid: "npm:^1.1.0" - tslib: "npm:^2.4.0" - yaml-ast-parser: "npm:^0.0.43" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/a4b285fec2006e9b34b71f8e96f63f866411a53f95758e8b67942ea999925c6e843e3ecc2d2c9f2ccf722488d481e29fcec11dc87a4189188501e0948d41aa95 - languageName: node - linkType: hard - -"@graphql-tools/relay-operation-optimizer@npm:^7.0.0": - version: 7.0.0 - resolution: "@graphql-tools/relay-operation-optimizer@npm:7.0.0" - dependencies: - "@ardatan/relay-compiler": "npm:12.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/6eb7e6d3ed6e72eb2146b8272b20e0acba154fffdac518f894ceaee320cc7ef0284117c11a93dff85b8bbee1019b982a9fdd20ecf65923d998b48730d296a56d - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:^10.0.0": - version: 10.0.0 - resolution: "@graphql-tools/schema@npm:10.0.0" - dependencies: - "@graphql-tools/merge": "npm:^9.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - tslib: "npm:^2.4.0" - value-or-promise: "npm:^1.0.12" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/dd784bcc460746adc32a63e9f19b241f9af6e81a8d123b346806853f24096003764aa117954bb88a35de67ce3484acc9e42a03ebe41dafad1446dd614fbcefb5 - languageName: node - linkType: hard - -"@graphql-tools/url-loader@npm:^8.0.0": - version: 8.0.0 - resolution: "@graphql-tools/url-loader@npm:8.0.0" - dependencies: - "@ardatan/sync-fetch": "npm:^0.0.1" - "@graphql-tools/delegate": "npm:^10.0.0" - "@graphql-tools/executor-graphql-ws": "npm:^1.0.0" - "@graphql-tools/executor-http": "npm:^1.0.0" - "@graphql-tools/executor-legacy-ws": "npm:^1.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - "@graphql-tools/wrap": "npm:^10.0.0" - "@types/ws": "npm:^8.0.0" - "@whatwg-node/fetch": "npm:^0.9.0" - isomorphic-ws: "npm:^5.0.0" - tslib: "npm:^2.4.0" - value-or-promise: "npm:^1.0.11" - ws: "npm:^8.12.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/206065c2490e0747f6f9d756171b151017f9e5ad2d5f4c82c1644af8da3bf03e0075e4c55e6317e1823e74e32d307af5dd102f58851c7c361022578aa52ca8c1 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:^10.0.0": - version: 10.0.1 - resolution: "@graphql-tools/utils@npm:10.0.1" - dependencies: - "@graphql-typed-document-node/core": "npm:^3.1.1" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/c2715b605a75146d1cd02704ac0ce89207f4051a1deac2ee2dcdb22c184941b7f1d63da68377fdfe766bbeeaef230ac79a44cbce4822b36000f2476c48304667 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:^10.7.0, @graphql-tools/utils@npm:^10.7.2": - version: 10.7.2 - resolution: "@graphql-tools/utils@npm:10.7.2" - dependencies: - "@graphql-typed-document-node/core": "npm:^3.1.1" - cross-inspect: "npm:1.0.1" - dset: "npm:^3.1.4" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/b4725b081e5ff5c1441036db76ce907a6fe9b4c94aa9ceb070f75541b2297c3cccaa182f91d214f9abe6d89df33d8df51e055afbc4e382b01e8d8fb7c2f6edf6 - languageName: node - linkType: hard - -"@graphql-tools/wrap@npm:^10.0.0": - version: 10.0.0 - resolution: "@graphql-tools/wrap@npm:10.0.0" - dependencies: - "@graphql-tools/delegate": "npm:^10.0.0" - "@graphql-tools/schema": "npm:^10.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - tslib: "npm:^2.4.0" - value-or-promise: "npm:^1.0.12" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/1e83058f0c88a9d9c5fc0cfc4c838db54a47b9dbf9588a0b0c60620824d392c99a171ccb3ae9fb1af32fefbaf1085435fc448cf3c7c8b20d43f00880cd9298fb - languageName: node - linkType: hard - -"@graphql-typed-document-node/core@npm:3.2.0, @graphql-typed-document-node/core@npm:^3.1.1, @graphql-typed-document-node/core@npm:^3.2.0": - version: 3.2.0 - resolution: "@graphql-typed-document-node/core@npm:3.2.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10/fa44443accd28c8cf4cb96aaaf39d144a22e8b091b13366843f4e97d19c7bfeaf609ce3c7603a4aeffe385081eaf8ea245d078633a7324c11c5ec4b2011bb76d - languageName: node - linkType: hard - -"@humanfs/core@npm:^0.19.1": - version: 0.19.1 - resolution: "@humanfs/core@npm:0.19.1" - checksum: 10/270d936be483ab5921702623bc74ce394bf12abbf57d9145a69e8a0d1c87eb1c768bd2d93af16c5705041e257e6d9cc7529311f63a1349f3678abc776fc28523 - languageName: node - linkType: hard - -"@humanfs/node@npm:^0.16.6": - version: 0.16.6 - resolution: "@humanfs/node@npm:0.16.6" - dependencies: - "@humanfs/core": "npm:^0.19.1" - "@humanwhocodes/retry": "npm:^0.3.0" - checksum: 10/6d43c6727463772d05610aa05c83dab2bfbe78291022ee7a92cb50999910b8c720c76cc312822e2dea2b497aa1b3fef5fe9f68803fc45c9d4ed105874a65e339 - languageName: node - linkType: hard - -"@humanwhocodes/config-array@npm:^0.11.10": - version: 0.11.10 - resolution: "@humanwhocodes/config-array@npm:0.11.10" - dependencies: - "@humanwhocodes/object-schema": "npm:^1.2.1" - debug: "npm:^4.1.1" - minimatch: "npm:^3.0.5" - checksum: 10/f93086ae6a340e739a6bb23d4575b69f52acc4e4e3d62968eaaf77a77db4ba69d6d3e50c0028ba19b634ef6b241553a9d9a13d91b797b3ea33d5d711bb3362fb - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 10/e993950e346331e5a32eefb27948ecdee2a2c4ab3f072b8f566cd213ef485dd50a3ca497050608db91006f5479e43f91a439aef68d2a313bd3ded06909c7c5b3 - languageName: node - linkType: hard - -"@humanwhocodes/object-schema@npm:^1.2.1": - version: 1.2.1 - resolution: "@humanwhocodes/object-schema@npm:1.2.1" - checksum: 10/b48a8f87fcd5fdc4ac60a31a8bf710d19cc64556050575e6a35a4a48a8543cf8cde1598a65640ff2cdfbfd165b38f9db4fa3782bea7848eb585cc3db824002e6 - languageName: node - linkType: hard - -"@humanwhocodes/retry@npm:^0.3.0": - version: 0.3.1 - resolution: "@humanwhocodes/retry@npm:0.3.1" - checksum: 10/eb457f699529de7f07649679ec9e0353055eebe443c2efe71c6dd950258892475a038e13c6a8c5e13ed1fb538cdd0a8794faa96b24b6ffc4c87fb1fc9f70ad7f - languageName: node - linkType: hard - -"@humanwhocodes/retry@npm:^0.4.1": - version: 0.4.1 - resolution: "@humanwhocodes/retry@npm:0.4.1" - checksum: 10/39fafc7319e88f61befebd5e1b4f0136534ea6a9bd10d74366698187bd63544210ec5d79a87ed4d91297f1cc64c4c53d45fb0077a2abfdce212cf0d3862d5f04 - languageName: node - linkType: hard - -"@hutson/parse-repository-url@npm:^3.0.0": - version: 3.0.2 - resolution: "@hutson/parse-repository-url@npm:3.0.2" - checksum: 10/dae0656f2e77315a3027ab9ca438ed344bf78a5fda7b145f65a1fface20dfb17e94e1d31e146c8b76de4657c21020aabc72dc53b53941c9f5fe2c27416559283 - languageName: node - linkType: hard - -"@inquirer/checkbox@npm:^4.0.6": - version: 4.0.6 - resolution: "@inquirer/checkbox@npm:4.0.6" - dependencies: - "@inquirer/core": "npm:^10.1.4" - "@inquirer/figures": "npm:^1.0.9" - "@inquirer/type": "npm:^3.0.2" - ansi-escapes: "npm:^4.3.2" - yoctocolors-cjs: "npm:^2.1.2" - peerDependencies: - "@types/node": ">=18" - checksum: 10/9a4303da3607caad708b7726add81eaf13d540bb4585ca3a002cfe31e71475cf03cf14ba628e0ddaceafe946de8ccc16725dd47675eed045c15531384806016c - languageName: node - linkType: hard - -"@inquirer/confirm@npm:^5.1.3": - version: 5.1.3 - resolution: "@inquirer/confirm@npm:5.1.3" - dependencies: - "@inquirer/core": "npm:^10.1.4" - "@inquirer/type": "npm:^3.0.2" - peerDependencies: - "@types/node": ">=18" - checksum: 10/608dbcf24a4c43a5bdffa5eea134360841bf34f2175d87aa9214c356b1e205fafcc559edc4c7783ba907d2da82122c0507d64d380ef20d33ded79e780034ab8b - languageName: node - linkType: hard - -"@inquirer/core@npm:^10.1.4": - version: 10.1.4 - resolution: "@inquirer/core@npm:10.1.4" - dependencies: - "@inquirer/figures": "npm:^1.0.9" - "@inquirer/type": "npm:^3.0.2" - ansi-escapes: "npm:^4.3.2" - cli-width: "npm:^4.1.0" - mute-stream: "npm:^2.0.0" - signal-exit: "npm:^4.1.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^6.2.0" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10/a3e6a47443586ca313fa852e76670a267e01059524dd7cd9fbc1fa7cebe7d9249cd53f7483aa53aabea6458c9893b6acd8a51dfd37561ec6612a3a0ef2fc94ea - languageName: node - linkType: hard - -"@inquirer/editor@npm:^4.2.3": - version: 4.2.3 - resolution: "@inquirer/editor@npm:4.2.3" - dependencies: - "@inquirer/core": "npm:^10.1.4" - "@inquirer/type": "npm:^3.0.2" - external-editor: "npm:^3.1.0" - peerDependencies: - "@types/node": ">=18" - checksum: 10/145352ac06cd7aebe483b1ee4129b742fcf62944c71b3b32cf6e93b5be1470f6be51021c72307457e02209c509870303bfdbdd626f2e94d1ada1fd2584cba20d - languageName: node - linkType: hard - -"@inquirer/expand@npm:^4.0.6": - version: 4.0.6 - resolution: "@inquirer/expand@npm:4.0.6" - dependencies: - "@inquirer/core": "npm:^10.1.4" - "@inquirer/type": "npm:^3.0.2" - yoctocolors-cjs: "npm:^2.1.2" - peerDependencies: - "@types/node": ">=18" - checksum: 10/b87c287843f43bda44df3a49127b8b334b13e8b723048c551c340e9856aec06f2ba4546dfde6f9fc1c62140d35d268788cdfdc5c2b32ab2f4af9cef49a16ea4c - languageName: node - linkType: hard - -"@inquirer/figures@npm:^1.0.9": - version: 1.0.9 - resolution: "@inquirer/figures@npm:1.0.9" - checksum: 10/7ced1275a5826cdeb61797d6c068417e7d52aa87894de18cedd259f783f42d731226c3f8b92cab27b8e7b0e31ab1dd3cd77f16935b67ebe1cbb271e5972d7758 - languageName: node - linkType: hard - -"@inquirer/input@npm:^4.1.3": - version: 4.1.3 - resolution: "@inquirer/input@npm:4.1.3" - dependencies: - "@inquirer/core": "npm:^10.1.4" - "@inquirer/type": "npm:^3.0.2" - peerDependencies: - "@types/node": ">=18" - checksum: 10/f18f9d679320b784ecad4d976bf256eaceae059e24d3fcfa760439e5c719b197ca1b6937b72f49dd9f913301dddbd729eb94bf24e6805013915e8766eaf9d0c5 - languageName: node - linkType: hard - -"@inquirer/number@npm:^3.0.6": - version: 3.0.6 - resolution: "@inquirer/number@npm:3.0.6" - dependencies: - "@inquirer/core": "npm:^10.1.4" - "@inquirer/type": "npm:^3.0.2" - peerDependencies: - "@types/node": ">=18" - checksum: 10/e37a98f8494581b46bddc04bcc1e855e8d86ff8f5f36f736ec5d99a4c21d077ee1f03bd2430567e7bde07855b8e63f83d17132edffd5fc57ed93d13b37c4271d - languageName: node - linkType: hard - -"@inquirer/password@npm:^4.0.6": - version: 4.0.6 - resolution: "@inquirer/password@npm:4.0.6" - dependencies: - "@inquirer/core": "npm:^10.1.4" - "@inquirer/type": "npm:^3.0.2" - ansi-escapes: "npm:^4.3.2" - peerDependencies: - "@types/node": ">=18" - checksum: 10/dc7e36912f97f7ae0ec0b712f060db99176e956bf2667bfa3e6d9b48947228765db90afa557b47b2c03f3cfe037d3b6fa23b75fed3809cc8c0fca2095eefd231 - languageName: node - linkType: hard - -"@inquirer/prompts@npm:^7.2.3": - version: 7.2.3 - resolution: "@inquirer/prompts@npm:7.2.3" - dependencies: - "@inquirer/checkbox": "npm:^4.0.6" - "@inquirer/confirm": "npm:^5.1.3" - "@inquirer/editor": "npm:^4.2.3" - "@inquirer/expand": "npm:^4.0.6" - "@inquirer/input": "npm:^4.1.3" - "@inquirer/number": "npm:^3.0.6" - "@inquirer/password": "npm:^4.0.6" - "@inquirer/rawlist": "npm:^4.0.6" - "@inquirer/search": "npm:^3.0.6" - "@inquirer/select": "npm:^4.0.6" - peerDependencies: - "@types/node": ">=18" - checksum: 10/905c2a8fc4f79bd250b0e805ee841cb51737b14990bb6028da94d580cc900d838733f904a37908b9c09f93b2cdaee40ff762878f159610504a96d92db9fff86c - languageName: node - linkType: hard - -"@inquirer/rawlist@npm:^4.0.6": - version: 4.0.6 - resolution: "@inquirer/rawlist@npm:4.0.6" - dependencies: - "@inquirer/core": "npm:^10.1.4" - "@inquirer/type": "npm:^3.0.2" - yoctocolors-cjs: "npm:^2.1.2" - peerDependencies: - "@types/node": ">=18" - checksum: 10/a0083705cc8be1b63a7732dbf16bdc469c9d8c5151a7182426db38ab37b30327fa87e0823b5c83b8ba039ea188e06afc81b85de74cde0bb9c11fd4d4a223a310 - languageName: node - linkType: hard - -"@inquirer/search@npm:^3.0.6": - version: 3.0.6 - resolution: "@inquirer/search@npm:3.0.6" - dependencies: - "@inquirer/core": "npm:^10.1.4" - "@inquirer/figures": "npm:^1.0.9" - "@inquirer/type": "npm:^3.0.2" - yoctocolors-cjs: "npm:^2.1.2" - peerDependencies: - "@types/node": ">=18" - checksum: 10/55b6ed97151e3b08bd6b6b48cfb03fc7967e9711c3c4f4be299c3268a8caea6c04c8fca673f81119b7e16c352f52660a302d25e3538290133f5c7ccd0f614f0c - languageName: node - linkType: hard - -"@inquirer/select@npm:^4.0.6": - version: 4.0.6 - resolution: "@inquirer/select@npm:4.0.6" - dependencies: - "@inquirer/core": "npm:^10.1.4" - "@inquirer/figures": "npm:^1.0.9" - "@inquirer/type": "npm:^3.0.2" - ansi-escapes: "npm:^4.3.2" - yoctocolors-cjs: "npm:^2.1.2" - peerDependencies: - "@types/node": ">=18" - checksum: 10/c005904e7b691bf891a82b4dbb1e6475b7410547d64ffdcbee56ba3175f26655c89efa8ae29f4843f9b3300870e096043269528dad1054c1b9a44f9063fc5cd4 - languageName: node - linkType: hard - -"@inquirer/type@npm:^3.0.2": - version: 3.0.2 - resolution: "@inquirer/type@npm:3.0.2" - peerDependencies: - "@types/node": ">=18" - checksum: 10/d1a2879b1baa357421cef441fc7b43181e110243933763ae922c55c2fc9af2d459ceaca8b71ed57e3dabd5077542fa0dd1d0ff0cf362ce054e61202386b545ed - languageName: node - linkType: hard - -"@ioredis/commands@npm:^1.1.1": - version: 1.2.0 - resolution: "@ioredis/commands@npm:1.2.0" - checksum: 10/a8253c9539b7e5463d4a98e6aa5b1b863fb4a4978191ba9dc42ec2c0fb5179d8d1fe4a29096d5954f91ba9600d1bdc6c1d18b044eab36f645f267fd37d7c0906 - languageName: node - linkType: hard - -"@ipld/dag-cbor@npm:^9.0.0": - version: 9.0.3 - resolution: "@ipld/dag-cbor@npm:9.0.3" - dependencies: - cborg: "npm:^2.0.1" - multiformats: "npm:^12.0.1" - checksum: 10/3a266b1b4ce747ea8748daab8999a401d2c102e0f09e80ac9de5b929f0dc775c1881a24ae82f1d337e089cf4910e46a17bf11549b76b602a90d1eabcedc1b6c8 - languageName: node - linkType: hard - -"@ipld/dag-json@npm:^10.0.0": - version: 10.1.2 - resolution: "@ipld/dag-json@npm:10.1.2" - dependencies: - cborg: "npm:^2.0.1" - multiformats: "npm:^12.0.1" - checksum: 10/341ecd4184c83883ff3de38856edffb79a7970d69aa09fb4bd4c393ad2485bc7e2d5531e96897539d8de37802797be2db5e88ea9bf78d7d74ff2771402e2257f - languageName: node - linkType: hard - -"@ipld/dag-pb@npm:^4.0.0": - version: 4.0.4 - resolution: "@ipld/dag-pb@npm:4.0.4" - dependencies: - multiformats: "npm:^12.0.1" - checksum: 10/6c27960c30f911d982ca2eac5217c5d795dd753b06d7fb38605171e5613ef01f6396b5802ff926fa3646fbfcc4ee13f76ae1fa115aae373601749b65731c9303 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 10/e9ed5fd27c3aec1095e3a16e0c0cf148d1fee55a38665c35f7b3f86a9b5d00d042ddaabc98e8a1cb7463b9378c15f22a94eb35e99469c201453eb8375191f243 - languageName: node - linkType: hard - -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: "npm:^5.3.1" - find-up: "npm:^4.1.0" - get-package-type: "npm:^0.1.0" - js-yaml: "npm:^3.13.1" - resolve-from: "npm:^5.0.0" - checksum: 10/b000a5acd8d4fe6e34e25c399c8bdbb5d3a202b4e10416e17bfc25e12bab90bb56d33db6089ae30569b52686f4b35ff28ef26e88e21e69821d2b85884bd055b8 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 10/a9b1e49acdf5efc2f5b2359f2df7f90c5c725f2656f16099e8b2cd3a000619ecca9fc48cf693ba789cf0fd989f6e0df6a22bc05574be4223ecdbb7997d04384b - languageName: node - linkType: hard - -"@jest/console@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/console@npm:27.5.1" - dependencies: - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - jest-message-util: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - slash: "npm:^3.0.0" - checksum: 10/f724ff9693b09711fded8b87145c3446091bde87f572e210667c2b8290b5364c776f3a99c7d1fd6d5642f7f9424d5acc312c12e9cc4da2ef0260d34547869fdd - languageName: node - linkType: hard - -"@jest/console@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/console@npm:28.1.3" - dependencies: - "@jest/types": "npm:^28.1.3" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - jest-message-util: "npm:^28.1.3" - jest-util: "npm:^28.1.3" - slash: "npm:^3.0.0" - checksum: 10/82153eb24e61bd442bff350a7537d598e7c49097aabd9545b340582dcf1f17e5749baa342a67e564816a3a6ce746038b618ed9f66702140264bfa1e1d5cc9e5e - languageName: node - linkType: hard - -"@jest/core@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/core@npm:27.5.1" - dependencies: - "@jest/console": "npm:^27.5.1" - "@jest/reporters": "npm:^27.5.1" - "@jest/test-result": "npm:^27.5.1" - "@jest/transform": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.0.0" - emittery: "npm:^0.8.1" - exit: "npm:^0.1.2" - graceful-fs: "npm:^4.2.9" - jest-changed-files: "npm:^27.5.1" - jest-config: "npm:^27.5.1" - jest-haste-map: "npm:^27.5.1" - jest-message-util: "npm:^27.5.1" - jest-regex-util: "npm:^27.5.1" - jest-resolve: "npm:^27.5.1" - jest-resolve-dependencies: "npm:^27.5.1" - jest-runner: "npm:^27.5.1" - jest-runtime: "npm:^27.5.1" - jest-snapshot: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - jest-validate: "npm:^27.5.1" - jest-watcher: "npm:^27.5.1" - micromatch: "npm:^4.0.4" - rimraf: "npm:^3.0.0" - slash: "npm:^3.0.0" - strip-ansi: "npm:^6.0.0" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 10/79eb63c3197336c39de6a3341d3f5e7dbca7e20796bd4ee3d725e4ef2832f4d07242898a8af6c9de19ebd700983385a3df16c024b4497f8beb666c8ffe96ccb4 - languageName: node - linkType: hard - -"@jest/environment@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/environment@npm:27.5.1" - dependencies: - "@jest/fake-timers": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - jest-mock: "npm:^27.5.1" - checksum: 10/74a2a4427f82b096c4f7223c56a27f64487ee4639b017129f31e99ebb2e9a614eb365ec77c3701d6eedc1c8d711ad2dd4b31d6dfad72cbb6d73a4f1fdc4a86cb - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/fake-timers@npm:27.5.1" - dependencies: - "@jest/types": "npm:^27.5.1" - "@sinonjs/fake-timers": "npm:^8.0.1" - "@types/node": "npm:*" - jest-message-util: "npm:^27.5.1" - jest-mock: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - checksum: 10/dd8b736edbc8da77af3ca14ffaa2f331168618db7b879a3a07a4667af11ae4ff840f64a61e3828e217ee94f06d5a9ba30bf19e5103bb74e193b8216ce4c0708d - languageName: node - linkType: hard - -"@jest/globals@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/globals@npm:27.5.1" - dependencies: - "@jest/environment": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - expect: "npm:^27.5.1" - checksum: 10/f3b06e9b81686d7a5dd7bafb229cba73bdc90d3e16815deebf302d3a402ac29a1e9bafa274d908caefe7083938402619974c89420d247ab8739acd652c11b16d - languageName: node - linkType: hard - -"@jest/reporters@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/reporters@npm:27.5.1" - dependencies: - "@bcoe/v8-coverage": "npm:^0.2.3" - "@jest/console": "npm:^27.5.1" - "@jest/test-result": "npm:^27.5.1" - "@jest/transform": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - collect-v8-coverage: "npm:^1.0.0" - exit: "npm:^0.1.2" - glob: "npm:^7.1.2" - graceful-fs: "npm:^4.2.9" - istanbul-lib-coverage: "npm:^3.0.0" - istanbul-lib-instrument: "npm:^5.1.0" - istanbul-lib-report: "npm:^3.0.0" - istanbul-lib-source-maps: "npm:^4.0.0" - istanbul-reports: "npm:^3.1.3" - jest-haste-map: "npm:^27.5.1" - jest-resolve: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - jest-worker: "npm:^27.5.1" - slash: "npm:^3.0.0" - source-map: "npm:^0.6.0" - string-length: "npm:^4.0.1" - terminal-link: "npm:^2.0.0" - v8-to-istanbul: "npm:^8.1.0" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 10/d49aea4e5b09f9a316f0ff303d11f2db057cadaf370e3e706c024e4ea7f270899cccf7488711def4a930bc23e4f4676f406d1c646f8c6656de4c43dd40652877 - languageName: node - linkType: hard - -"@jest/schemas@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/schemas@npm:28.1.3" - dependencies: - "@sinclair/typebox": "npm:^0.24.1" - checksum: 10/3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de - languageName: node - linkType: hard - -"@jest/schemas@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/schemas@npm:29.6.3" - dependencies: - "@sinclair/typebox": "npm:^0.27.8" - checksum: 10/910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 - languageName: node - linkType: hard - -"@jest/source-map@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/source-map@npm:27.5.1" - dependencies: - callsites: "npm:^3.0.0" - graceful-fs: "npm:^4.2.9" - source-map: "npm:^0.6.0" - checksum: 10/90b1f4212b7191d594275c9b9aae18319b944e4ed018af74a1661fd9b783983074d00369a111274697b87193aa2b084f0f022a265d070f4a66d39d06d14a0336 - languageName: node - linkType: hard - -"@jest/test-result@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/test-result@npm:27.5.1" - dependencies: - "@jest/console": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - "@types/istanbul-lib-coverage": "npm:^2.0.0" - collect-v8-coverage: "npm:^1.0.0" - checksum: 10/43cdc31b39857d4d6487345f1bfb9c97157ddfb7ff3e3b843f3999d4a3be5b1e7c1079302459ea627976fa9da7462426dfb26cf231ef2b6eb79bc80b67361c23 - languageName: node - linkType: hard - -"@jest/test-result@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/test-result@npm:28.1.3" - dependencies: - "@jest/console": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" - "@types/istanbul-lib-coverage": "npm:^2.0.0" - collect-v8-coverage: "npm:^1.0.0" - checksum: 10/d343f08e6e4971e8132540014711c5d29887651b036f03db8c7e9d6509fe9801316f0a6a393cd0af0431c50e6d1c1d310957f06b6cc20c08cab2e67b66a00c88 - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/test-sequencer@npm:27.5.1" - dependencies: - "@jest/test-result": "npm:^27.5.1" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^27.5.1" - jest-runtime: "npm:^27.5.1" - checksum: 10/74c9c773eb0d8de581e17a7ea1d9173b835c0c91b40665caa42fd68931a2ee7429f9ed59c97a15855d3ad46024a17e7387ad4b900d4540890a7681d4a8a42bdd - languageName: node - linkType: hard - -"@jest/transform@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/transform@npm:27.5.1" - dependencies: - "@babel/core": "npm:^7.1.0" - "@jest/types": "npm:^27.5.1" - babel-plugin-istanbul: "npm:^6.1.1" - chalk: "npm:^4.0.0" - convert-source-map: "npm:^1.4.0" - fast-json-stable-stringify: "npm:^2.0.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^27.5.1" - jest-regex-util: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - micromatch: "npm:^4.0.4" - pirates: "npm:^4.0.4" - slash: "npm:^3.0.0" - source-map: "npm:^0.6.1" - write-file-atomic: "npm:^3.0.0" - checksum: 10/9e0bec99971d28fc205e5e282be384a0269760b8452aa94e3d400465819b6c790c862ec5597d8c9439f2da97e68c0c4cec071340ff3e4c4414a34e5b2a19074a - languageName: node - linkType: hard - -"@jest/types@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/types@npm:27.5.1" - dependencies: - "@types/istanbul-lib-coverage": "npm:^2.0.0" - "@types/istanbul-reports": "npm:^3.0.0" - "@types/node": "npm:*" - "@types/yargs": "npm:^16.0.0" - chalk: "npm:^4.0.0" - checksum: 10/d3ca1655673539c54665f3e9135dc70887feb6b667b956e712c38f42e513ae007d3593b8075aecea8f2db7119f911773010f17f93be070b1725fbc6225539b6e - languageName: node - linkType: hard - -"@jest/types@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/types@npm:28.1.3" - dependencies: - "@jest/schemas": "npm:^28.1.3" - "@types/istanbul-lib-coverage": "npm:^2.0.0" - "@types/istanbul-reports": "npm:^3.0.0" - "@types/node": "npm:*" - "@types/yargs": "npm:^17.0.8" - chalk: "npm:^4.0.0" - checksum: 10/a90e636df760799b6c3d91e34e539e701ea803e80312257e674e345a3c23a7c892df7a301afbc7883ec1d623daf3ba266cde57c5965e0692e5f1e61915d3524b - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.5 - resolution: "@jridgewell/gen-mapping@npm:0.3.5" - dependencies: - "@jridgewell/set-array": "npm:^1.2.1" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10/81587b3c4dd8e6c60252122937cea0c637486311f4ed208b52b62aae2e7a87598f63ec330e6cd0984af494bfb16d3f0d60d3b21d7e5b4aedd2602ff3fe9d32e2 - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.1 - resolution: "@jridgewell/resolve-uri@npm:3.1.1" - checksum: 10/64d59df8ae1a4e74315eb1b61e012f1c7bc8aac47a3a1e683f6fe7008eab07bc512a742b7aa7c0405685d1421206de58c9c2e6adbfe23832f8bd69408ffc183e - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.2.1": - version: 1.2.1 - resolution: "@jridgewell/set-array@npm:1.2.1" - checksum: 10/832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 - languageName: node - linkType: hard - -"@jridgewell/source-map@npm:^0.3.3": - version: 0.3.3 - resolution: "@jridgewell/source-map@npm:0.3.3" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.0" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 10/6346a931c7eacb509120324d1cf796767ee34421fbdfb7a81d7038d65b63948980b59b5353a322c073f85b42a5cb8f227276603d5cbd19050e0052d8b7e5c6f7 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15, @jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.0 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" - checksum: 10/4ed6123217569a1484419ac53f6ea0d9f3b57e5b57ab30d7c267bdb27792a27eb0e4b08e84a2680aa55cc2f2b411ffd6ec3db01c44fdc6dc43aca4b55f8374fd - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.0.3" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - checksum: 10/83deafb8e7a5ca98993c2c6eeaa93c270f6f647a4c0dc00deb38c9cf9b2d3b7bf15e8839540155247ef034a052c0ec4466f980bf0c9e2ab63b97d16c0cedd3ff - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.25 - resolution: "@jridgewell/trace-mapping@npm:0.3.25" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10/dced32160a44b49d531b80a4a2159dceab6b3ddf0c8e95a0deae4b0e894b172defa63d5ac52a19c2068e1fe7d31ea4ba931fbeec103233ecb4208953967120fc - languageName: node - linkType: hard - -"@jsep-plugin/assignment@npm:^1.3.0": - version: 1.3.0 - resolution: "@jsep-plugin/assignment@npm:1.3.0" - peerDependencies: - jsep: ^0.4.0||^1.0.0 - checksum: 10/0c93b703d84af95b4be9fb6c23fbdbe7c7b6985b41c98fd10386cd54686ed1eb751cb39f5d54abcb621e4da2a0900a3b2a852e5bf7f2d322b756db3b22e42a45 - languageName: node - linkType: hard - -"@jsep-plugin/regex@npm:^1.0.4": - version: 1.0.4 - resolution: "@jsep-plugin/regex@npm:1.0.4" - peerDependencies: - jsep: ^0.4.0||^1.0.0 - checksum: 10/0ea6ba81f03955972b762fd9fbc8e3fd7e1c1c12e52ce3d4366e23c0a63c8bff8528687b8b3d8f641cf9f626f8bf5a7841efcd31a2489fe967e1900e5738ee3a - languageName: node - linkType: hard - -"@jsonquerylang/jsonquery@npm:^3.1.1 || ^4.0.0": - version: 4.1.1 - resolution: "@jsonquerylang/jsonquery@npm:4.1.1" - bin: - jsonquery: bin/cli.js - checksum: 10/334610b8a6147fc2d3d1c7df0995736560146c6f97dadad55bbb071f15b99aaed549f5eab472acd670b42097ce883381165c57de6a1c222f3003bcc7a462926f - languageName: node - linkType: hard - -"@juggle/resize-observer@npm:^3.3.1": - version: 3.4.0 - resolution: "@juggle/resize-observer@npm:3.4.0" - checksum: 10/73d1d00ee9132fb6f0aea0531940a6b93603e935590bd450fc6285a328d906102eeeb95dea77b2edac0e779031a9708aa8c82502bd298ee4dd26e7dff48f397a - languageName: node - linkType: hard - -"@kamilkisiela/fast-url-parser@npm:^1.1.4": - version: 1.1.4 - resolution: "@kamilkisiela/fast-url-parser@npm:1.1.4" - checksum: 10/5b79438235a81817b02b96ddc581c996961cec5b40c7d6ebabd01ac6af8d4a35a43b9b263144af25386cef92c054c3ef6b1723b09eb0d8cf7b4053781a474c5f - languageName: node - linkType: hard - -"@kleros/kleros-app@workspace:^, @kleros/kleros-app@workspace:kleros-app": - version: 0.0.0-use.local - resolution: "@kleros/kleros-app@workspace:kleros-app" - dependencies: - "@eslint/compat": "npm:^1.2.3" - "@eslint/eslintrc": "npm:^3.2.0" - "@eslint/js": "npm:^9.15.0" - "@kleros/kleros-v2-eslint-config": "workspace:^" - "@kleros/kleros-v2-prettier-config": "workspace:^" - "@tanstack/react-query": "npm:^5.69.0" - "@types/react": "npm:^18.3.12" - "@types/react-dom": "npm:^18.3.1" - "@typescript-eslint/eslint-plugin": "npm:^8.15.0" - "@typescript-eslint/parser": "npm:^8.15.0" - eslint: "npm:^9.15.0" - eslint-config-prettier: "npm:^9.1.0" - eslint-plugin-import: "npm:^2.31.0" - globals: "npm:^15.12.0" - jose: "npm:^5.9.6" - react: "npm:^18.3.1" - rimraf: "npm:^6.0.1" - typescript: "npm:^5.6.3" - viem: "npm:^2.24.1" - vite: "npm:^5.4.11" - vite-plugin-dts: "npm:^4.3.0" - vite-plugin-node-polyfills: "npm:^0.23.0" - wagmi: "npm:^2.14.15" - peerDependencies: - "@tanstack/react-query": ^5.69.0 - graphql: ^16.9.0 - graphql-request: ^7.1.2 - react: ^18.3.1 - react-dom: ^18.3.1 - viem: ^2.24.1 - wagmi: ^2.14.15 - languageName: unknown - linkType: soft - -"@kleros/kleros-sdk@workspace:^, @kleros/kleros-sdk@workspace:kleros-sdk": - version: 0.0.0-use.local - resolution: "@kleros/kleros-sdk@workspace:kleros-sdk" - dependencies: - "@reality.eth/reality-eth-lib": "npm:^3.4.14" - "@types/mustache": "npm:^4.2.5" - "@types/node": "npm:^20.17.6" - "@urql/core": "npm:^5.0.8" - "@vitest/ui": "npm:^1.6.1" - mocha: "npm:^10.8.2" - mustache: "npm:^4.2.0" - rimraf: "npm:^6.0.1" - ts-node: "npm:^10.9.2" - typescript: "npm:^5.6.3" - viem: "npm:^2.24.1" - vitest: "npm:^1.6.1" - zod: "npm:^3.23.8" - peerDependencies: - viem: ^2.24.1 - languageName: unknown - linkType: soft - -"@kleros/kleros-v2-contracts@workspace:^, @kleros/kleros-v2-contracts@workspace:contracts": - version: 0.0.0-use.local - resolution: "@kleros/kleros-v2-contracts@workspace:contracts" - dependencies: - "@chainlink/contracts": "npm:^1.4.0" - "@defi-wonderland/natspec-smells": "npm:^1.1.6" - "@kleros/kleros-v2-eslint-config": "workspace:^" - "@kleros/kleros-v2-prettier-config": "workspace:^" - "@kleros/kleros-v2-tsconfig": "workspace:^" - "@kleros/vea-contracts": "npm:^0.7.0" - "@logtail/pino": "npm:^0.5.0" - "@nomicfoundation/hardhat-chai-matchers": "npm:^2.1.0" - "@nomicfoundation/hardhat-ethers": "npm:^3.1.0" - "@nomiclabs/hardhat-solhint": "npm:^4.1.0" - "@openzeppelin/contracts": "npm:^5.4.0" - "@openzeppelin/upgrades-core": "npm:^1.44.1" - "@shutter-network/shutter-sdk": "npm:0.0.2" - "@typechain/ethers-v6": "npm:^0.5.1" - "@typechain/hardhat": "npm:^9.1.0" - "@types/chai": "npm:^4.3.20" - "@types/mocha": "npm:^10.0.10" - "@types/node": "npm:^20.17.6" - "@types/sinon": "npm:^17.0.4" - "@wagmi/cli": "npm:^2.3.2" - abitype: "npm:^0.10.3" - chai: "npm:^4.5.0" - dotenv: "npm:^16.6.1" - eslint: "npm:^9.15.0" - ethereumjs-util: "npm:^7.1.5" - ethers: "npm:^6.15.0" - gluegun: "npm:^5.2.0" - graphql: "npm:^16.9.0" - graphql-request: "npm:^7.1.2" - hardhat: "npm:2.26.2" - hardhat-contract-sizer: "npm:^2.10.0" - hardhat-deploy: "npm:^1.0.4" - hardhat-deploy-ethers: "npm:^0.4.2" - hardhat-deploy-tenderly: "npm:^0.2.1" - hardhat-docgen: "npm:^1.3.0" - hardhat-gas-reporter: "npm:^2.3.0" - hardhat-tracer: "npm:^3.2.1" - hardhat-watcher: "npm:^2.5.0" - isomorphic-fetch: "npm:^3.0.0" - pino: "npm:^8.21.0" - pino-pretty: "npm:^10.3.1" - prettier: "npm:^3.3.3" - prettier-plugin-solidity: "npm:^1.4.2" - shelljs: "npm:^0.8.5" - sinon: "npm:^20.0.0" - solhint-plugin-prettier: "npm:^0.1.0" - solidity-coverage: "npm:^0.8.16" - ts-node: "npm:^10.9.2" - typechain: "npm:^8.3.2" - typescript: "npm:^5.6.3" - peerDependencies: - viem: ^2.24.1 - peerDependenciesMeta: - viem: - optional: false - languageName: unknown - linkType: soft - -"@kleros/kleros-v2-eslint-config@npm:*, @kleros/kleros-v2-eslint-config@workspace:^, @kleros/kleros-v2-eslint-config@workspace:eslint-config": - version: 0.0.0-use.local - resolution: "@kleros/kleros-v2-eslint-config@workspace:eslint-config" - dependencies: - "@eslint/eslintrc": "npm:^3.2.0" - "@eslint/js": "npm:^9.15.0" - "@typescript-eslint/eslint-plugin": "npm:^8.15.0" - "@typescript-eslint/parser": "npm:^8.15.0" - "@typescript-eslint/utils": "npm:^8.15.0" - eslint: "npm:^9.15.0" - eslint-config-prettier: "npm:^9.1.0" - eslint-plugin-import: "npm:^2.31.0" - eslint-plugin-node: "npm:^11.1.0" - eslint-plugin-prettier: "npm:^5.2.1" - eslint-plugin-promise: "npm:^6.6.0" - eslint-plugin-security: "npm:^3.0.1" - eslint-utils: "npm:^3.0.0" - globals: "npm:^15.12.0" - prettier: "npm:^3.3.3" - typescript: "npm:^5.6.3" - peerDependencies: - eslint: ^8.0.0 || ^9.0.0 - languageName: unknown - linkType: soft - -"@kleros/kleros-v2-prettier-config@workspace:^, @kleros/kleros-v2-prettier-config@workspace:prettier-config": - version: 0.0.0-use.local - resolution: "@kleros/kleros-v2-prettier-config@workspace:prettier-config" - dependencies: - eslint: "npm:^9.15.0" - prettier: "npm:^3.3.3" - prettier-plugin-solidity: "npm:^1.4.1" - languageName: unknown - linkType: soft - -"@kleros/kleros-v2-subgraph@workspace:subgraph": - version: 0.0.0-use.local - resolution: "@kleros/kleros-v2-subgraph@workspace:subgraph" - dependencies: - "@graphprotocol/graph-cli": "npm:^0.96.0" - "@graphprotocol/graph-ts": "npm:^0.38.0" - "@kleros/kleros-v2-eslint-config": "workspace:^" - "@kleros/kleros-v2-prettier-config": "workspace:^" - eslint: "npm:^9.15.0" - gluegun: "npm:^5.2.0" - matchstick-as: "npm:0.6.0" - languageName: unknown - linkType: soft - -"@kleros/kleros-v2-tsconfig@workspace:^, @kleros/kleros-v2-tsconfig@workspace:tsconfig": - version: 0.0.0-use.local - resolution: "@kleros/kleros-v2-tsconfig@workspace:tsconfig" - dependencies: - "@kleros/kleros-v2-eslint-config": "npm:*" - "@tsconfig/node18": "npm:^18.2.4" - "@tsconfig/node20": "npm:^20.1.5" - eslint: "npm:^9.15.0" - languageName: unknown - linkType: soft - -"@kleros/kleros-v2-web-devtools@workspace:web-devtools": - version: 0.0.0-use.local - resolution: "@kleros/kleros-v2-web-devtools@workspace:web-devtools" - dependencies: - "@codemirror/state": "npm:^6.5.2" - "@coinbase/wallet-sdk": "npm:^4.3.2" - "@graphql-codegen/cli": "npm:^5.0.3" - "@graphql-codegen/client-preset": "npm:^4.5.1" - "@kleros/kleros-sdk": "workspace:^" - "@kleros/kleros-v2-contracts": "workspace:^" - "@kleros/ui-components-library": "npm:^2.20.0" - "@reown/appkit": "npm:^1.7.1" - "@reown/appkit-adapter-wagmi": "npm:^1.7.1" - "@svgr/webpack": "npm:^8.1.0" - "@tanstack/react-query": "npm:^5.69.0" - "@types/node": "npm:^20.17.6" - "@types/react": "npm:^18.3.12" - "@types/react-dom": "npm:^18.3.1" - "@types/react-is": "npm:^18.3.0" - "@types/styled-components": "npm:^5.1.34" - "@typescript-eslint/eslint-plugin": "npm:^8.15.0" - "@typescript-eslint/parser": "npm:^8.15.0" - "@typescript-eslint/utils": "npm:^8.15.0" - "@wagmi/cli": "npm:^2.2.0" - "@wagmi/connectors": "npm:^5.7.11" - "@wagmi/core": "npm:^2.16.7" - "@yornaath/batshit": "npm:^0.10.0" - eslint: "npm:^9.15.0" - eslint-config-next: "npm:^15.0.3" - eslint-config-prettier: "npm:^9.1.0" - eslint-import-resolver-typescript: "npm:^3.6.3" - eslint-plugin-react: "npm:^7.37.2" - eslint-plugin-react-hooks: "npm:^5.0.0" - graphql: "npm:^16.9.0" - graphql-request: "npm:^7.1.2" - next: "npm:14.2.28" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" - react-is: "npm:^18.3.1" - react-loading-skeleton: "npm:^3.5.0" - react-markdown: "npm:^9.0.1" - react-toastify: "npm:^10.0.6" - react-use: "npm:^17.5.1" - rimraf: "npm:^6.0.1" - styled-components: "npm:^5.3.3" - ts-node: "npm:^10.9.2" - typescript: "npm:^5.6.3" - typewriter-effect: "npm:^2.21.0" - vanilla-jsoneditor: "npm:^3.3.1" - viem: "npm:^2.24.1" - wagmi: "npm:^2.14.15" - languageName: unknown - linkType: soft - -"@kleros/kleros-v2-web@workspace:web": - version: 0.0.0-use.local - resolution: "@kleros/kleros-v2-web@workspace:web" - dependencies: - "@bigmi/react": "npm:^0.1.0" - "@coinbase/wallet-sdk": "npm:^4.3.2" - "@cyntler/react-doc-viewer": "npm:^1.17.0" - "@eslint/compat": "npm:^1.2.3" - "@eslint/eslintrc": "npm:^3.2.0" - "@eslint/js": "npm:^9.15.0" - "@graphql-codegen/cli": "npm:^5.0.3" - "@graphql-codegen/client-preset": "npm:^4.5.1" - "@graphql-tools/batch-execute": "npm:^9.0.11" - "@graphql-tools/utils": "npm:^10.7.2" - "@kleros/kleros-app": "workspace:^" - "@kleros/kleros-sdk": "workspace:^" - "@kleros/kleros-v2-contracts": "workspace:^" - "@kleros/kleros-v2-eslint-config": "workspace:^" - "@kleros/kleros-v2-prettier-config": "workspace:^" - "@kleros/kleros-v2-tsconfig": "workspace:^" - "@kleros/ui-components-library": "npm:^2.20.0" - "@lifi/wallet-management": "npm:^3.7.1" - "@lifi/widget": "npm:^3.18.1" - "@reown/appkit": "npm:^1.7.1" - "@reown/appkit-adapter-wagmi": "npm:^1.7.1" - "@sentry/react": "npm:^7.120.0" - "@sentry/tracing": "npm:^7.120.0" - "@shutter-network/shutter-sdk": "npm:0.0.2" - "@solana/wallet-adapter-react": "npm:^0.15.36" - "@solana/web3.js": "npm:^1.98.0" - "@tanstack/react-query": "npm:^5.69.0" - "@types/busboy": "npm:^1.5.4" - "@types/react": "npm:^18.3.12" - "@types/react-dom": "npm:^18.3.1" - "@types/react-modal": "npm:^3.16.3" - "@types/styled-components": "npm:^5.1.34" - "@typescript-eslint/eslint-plugin": "npm:^8.15.0" - "@typescript-eslint/parser": "npm:^8.15.0" - "@typescript-eslint/utils": "npm:^8.15.0" - "@wagmi/cli": "npm:^2.2.0" - "@wagmi/connectors": "npm:^5.7.11" - "@wagmi/core": "npm:^2.16.7" - "@yornaath/batshit": "npm:^0.10.0" - chart.js: "npm:^3.9.1" - chartjs-adapter-moment: "npm:^1.0.1" - chartjs-plugin-datalabels: "npm:^2.2.0" - core-js: "npm:^3.39.0" - eslint: "npm:^9.15.0" - eslint-config-prettier: "npm:^9.1.0" - eslint-import-resolver-typescript: "npm:^3.6.3" - eslint-plugin-import: "npm:^2.31.0" - eslint-plugin-react: "npm:^7.37.2" - eslint-plugin-react-hooks: "npm:^4.6.2" - ethers: "npm:^5.8.0" - globals: "npm:^15.12.0" - graphql: "npm:^16.9.0" - graphql-request: "npm:^7.1.2" - jose: "npm:^5.9.6" - lru-cache: "npm:^7.18.3" - moment: "npm:^2.30.1" - overlayscrollbars: "npm:^2.10.0" - overlayscrollbars-react: "npm:^0.5.6" - react: "npm:^18.3.1" - react-chartjs-2: "npm:^4.3.1" - react-dom: "npm:^18.3.1" - react-error-boundary: "npm:^4.1.2" - react-identicons: "npm:^1.2.5" - react-is: "npm:^18.3.1" - react-loading-skeleton: "npm:^3.5.0" - react-markdown: "npm:^8.0.7" - react-modal: "npm:^3.16.1" - react-router-dom: "npm:^6.28.0" - react-scripts: "npm:^5.0.1" - react-toastify: "npm:^9.1.3" - react-use: "npm:^17.5.1" - rimraf: "npm:^6.0.1" - styled-components: "npm:^5.3.3" - subgraph-status: "npm:^1.2.4" - typescript: "npm:^5.6.3" - viem: "npm:^2.24.1" - vite: "npm:^5.4.11" - vite-plugin-node-polyfills: "npm:^0.23.0" - vite-plugin-static-copy: "npm:^3.0.0" - vite-plugin-svgr: "npm:^4.3.0" - vite-tsconfig-paths: "npm:^4.3.2" - wagmi: "npm:^2.14.15" - languageName: unknown - linkType: soft - -"@kleros/ui-components-library@npm:^2.20.0": - version: 2.20.0 - resolution: "@kleros/ui-components-library@npm:2.20.0" - dependencies: - "@datepicker-react/hooks": "npm:^2.8.4" - "@swc/helpers": "npm:^0.3.2" - rc-slider: "npm:^9.7.5" - react: "npm:^18.0.0" - react-dom: "npm:^18.0.0" - react-is: "npm:^18.0.0" - simplebar: "npm:^5.3.6" - simplebar-react: "npm:^2.3.6" - smooth-scroll-into-view-if-needed: "npm:^1.1.33" - usehooks-ts: "npm:^2.9.1" - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - react-is: ^18.0.0 - styled-components: ^5.3.3 - checksum: 10/c0e08f0e71e8b09ebd659477e62d4586f5159383d00c81524ae00088a2b4181c0ef5449adced094dacb8b1f830efab4ccd4088d5bfb2d4dae4ed38fc93344542 - languageName: node - linkType: hard - -"@kleros/vea-contracts@npm:^0.7.0": - version: 0.7.0 - resolution: "@kleros/vea-contracts@npm:0.7.0" - checksum: 10/bba12886020cd4bfce39938de56edf2b56472627871ef91b10b721de655e5c20f632a8cb57679927d868375218007898b12033d769b7d33cd3f18447ca093896 - languageName: node - linkType: hard - -"@leichtgewicht/ip-codec@npm:^2.0.1": - version: 2.0.4 - resolution: "@leichtgewicht/ip-codec@npm:2.0.4" - checksum: 10/3c7ffb0afb86c731a02813aa4370da27eac037abf8a15fce211226c11b644610382c8eca7efadace9471ee1959afe72fc1d43a62227d974b9fca8eae8b8d2124 - languageName: node - linkType: hard - -"@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.1.0, @lezer/common@npm:^1.2.0": - version: 1.2.1 - resolution: "@lezer/common@npm:1.2.1" - checksum: 10/b362ed2e97664e4b36b3dbff49b52d1bfc5accc0152b577fefd46e585d012ff685d1fd336d75d80066e01c0505b1135d4cf69be5e330b5bfec2e2650c437bcae - languageName: node - linkType: hard - -"@lezer/highlight@npm:^1.0.0": - version: 1.2.0 - resolution: "@lezer/highlight@npm:1.2.0" - dependencies: - "@lezer/common": "npm:^1.0.0" - checksum: 10/14a80cbfb0cd1ce716decb4f3a045d42e7146f539cfd483b62ce46c4586a26d2f4fbdc35ace1cad81645304be4d30eafb95a2b057c34dfd471d56c7fbd82df3a - languageName: node - linkType: hard - -"@lezer/highlight@npm:^1.2.1": - version: 1.2.1 - resolution: "@lezer/highlight@npm:1.2.1" - dependencies: - "@lezer/common": "npm:^1.0.0" - checksum: 10/fec3082419ee87fb265039b680fbac6796f862d8e3042dcb860e8c5a34291503a74927302b568ff1a626f0d2b5cf8dae02a51cfd200084eb329e5fd1236c3163 - languageName: node - linkType: hard - -"@lezer/json@npm:^1.0.0": - version: 1.0.2 - resolution: "@lezer/json@npm:1.0.2" - dependencies: - "@lezer/common": "npm:^1.2.0" - "@lezer/highlight": "npm:^1.0.0" - "@lezer/lr": "npm:^1.0.0" - checksum: 10/f899d13765d95599c9199fc3404cb57969031dc40ce07de30f4e648979153966581f0bee02e2f8f70463b0a5322206a97c2fe8d5d14f218888c72a6dcedf90ef - languageName: node - linkType: hard - -"@lezer/lr@npm:^1.0.0": - version: 1.4.0 - resolution: "@lezer/lr@npm:1.4.0" - dependencies: - "@lezer/common": "npm:^1.0.0" - checksum: 10/7391d0d08e54cd9e4f4d46e6ee6aa81fbaf079b22ed9c13d01fc9928e0ffd16d0c2d21b2cedd55675ad6c687277db28349ea8db81c9c69222cd7e7c40edd026e - languageName: node - linkType: hard - -"@libp2p/crypto@npm:^5.0.0, @libp2p/crypto@npm:^5.0.9": - version: 5.0.9 - resolution: "@libp2p/crypto@npm:5.0.9" - dependencies: - "@libp2p/interface": "npm:^2.4.0" - "@noble/curves": "npm:^1.7.0" - "@noble/hashes": "npm:^1.6.1" - asn1js: "npm:^3.0.5" - multiformats: "npm:^13.3.1" - protons-runtime: "npm:^5.5.0" - uint8arraylist: "npm:^2.4.8" - uint8arrays: "npm:^5.1.0" - checksum: 10/2106483489e8c0ee43782cf218e9f48b80ff702bda17d6594fc91f21faf5cab32d40b1cad9a9d16d2a2ac2189e09be0fd138dd2c972f0302194c7f523e73bc54 - languageName: node - linkType: hard - -"@libp2p/interface@npm:^2.0.0, @libp2p/interface@npm:^2.4.0": - version: 2.4.0 - resolution: "@libp2p/interface@npm:2.4.0" - dependencies: - "@multiformats/multiaddr": "npm:^12.3.3" - it-pushable: "npm:^3.2.3" - it-stream-types: "npm:^2.0.2" - multiformats: "npm:^13.3.1" - progress-events: "npm:^1.0.1" - uint8arraylist: "npm:^2.4.8" - checksum: 10/9de094cd2592548aab165e5b133e14b509e6bea38984cb2a3c6df601e675d20538b0d66f52f8b9bc9cf4fcb4b24b9654d069efe67ebd54153accab20c24b899b - languageName: node - linkType: hard - -"@libp2p/logger@npm:^5.0.0": - version: 5.1.6 - resolution: "@libp2p/logger@npm:5.1.6" - dependencies: - "@libp2p/interface": "npm:^2.4.0" - "@multiformats/multiaddr": "npm:^12.3.3" - interface-datastore: "npm:^8.3.1" - multiformats: "npm:^13.3.1" - weald: "npm:^1.0.4" - checksum: 10/4461b631cd96a9e1e3c4669c0da7f6b1336d2f74b224a3f767ae2c5e636731171033d41769a844b8b009a42117883c1560fe5e66185487a3c47807ffacff43f3 - languageName: node - linkType: hard - -"@libp2p/peer-id@npm:^5.0.0": - version: 5.0.10 - resolution: "@libp2p/peer-id@npm:5.0.10" - dependencies: - "@libp2p/crypto": "npm:^5.0.9" - "@libp2p/interface": "npm:^2.4.0" - multiformats: "npm:^13.3.1" - uint8arrays: "npm:^5.1.0" - checksum: 10/8f4bf6037061843f893929af7781d445663d14ecc81123aeab36bbab3afb3cf018ac7cb2bb2b88662c3451707c3e329fee7905f885774eb39eb3d0625a010faf - languageName: node - linkType: hard - -"@lifi/sdk@npm:3.6.2": - version: 3.6.2 - resolution: "@lifi/sdk@npm:3.6.2" - dependencies: - "@bigmi/core": "npm:^0.1.1" - "@lifi/types": "npm:^17.7.1" - "@noble/curves": "npm:^1.8.1" - "@solana/wallet-adapter-base": "npm:^0.9.23" - "@solana/web3.js": "npm:^1.98.0" - bech32: "npm:^2.0.0" - bitcoinjs-lib: "npm:^7.0.0-rc.0" - bs58: "npm:^6.0.0" - viem: "npm:^2.23.10" - peerDependencies: - "@solana/wallet-adapter-base": ^0.9.0 - "@solana/web3.js": ^1.98.0 - viem: ^2.21.0 - checksum: 10/a53acb8d4f1768fb35d6ce64826bc8222ecfc392eae61e688a9a412d9219eb4f6a6bba9290ca12fca9a96f8092e8285b79e13df885cd332df2a7582045e5d5a3 - languageName: node - linkType: hard - -"@lifi/types@npm:^17.7.1": - version: 17.8.0 - resolution: "@lifi/types@npm:17.8.0" - dependencies: - viem: "npm:^2.23.10" - checksum: 10/bc421a09352e58bdc8e7797b0319c791aadec88aa4ee8dc250b85dbac8f841552646416cc1af8835e63d6aed7f29ef6dde68c2a3e19abda38f781ff724839167 - languageName: node - linkType: hard - -"@lifi/wallet-management@npm:^3.7.1": - version: 3.7.1 - resolution: "@lifi/wallet-management@npm:3.7.1" - dependencies: - "@bigmi/client": "npm:^0.1.1" - "@bigmi/core": "npm:^0.1.1" - "@emotion/react": "npm:^11.14.0" - "@emotion/styled": "npm:^11.14.0" - "@lifi/sdk": "npm:3.6.2" - "@mui/icons-material": "npm:6.0.2" - "@mui/material": "npm:^6.4.7" - "@mui/system": "npm:^6.4.7" - "@solana/wallet-adapter-base": "npm:^0.9.23" - "@solana/web3.js": "npm:^1.98.0" - "@wagmi/core": "npm:^2.16.5" - i18next: "npm:^24.2.3" - mitt: "npm:^3.0.1" - react-i18next: "npm:^15.4.1" - use-sync-external-store: "npm:^1.4.0" - viem: "npm:^2.23.10" - zustand: "npm:^5.0.3" - peerDependencies: - "@bigmi/react": ">=0.1.0" - "@solana/wallet-adapter-react": ^0.15.35 - react: ">=18" - react-dom: ">=18" - wagmi: ^2.14.0 - checksum: 10/b98c20d0869ab3d431f51716221005506a1af7e9c2b3bd16a755c548bb8f4e38ebdaf5b61d17cf378151d46e32e9b46443b032b50bb9b7ff3e3961b62d19da5e - languageName: node - linkType: hard - -"@lifi/widget@npm:^3.18.1": - version: 3.18.1 - resolution: "@lifi/widget@npm:3.18.1" - dependencies: - "@bigmi/client": "npm:^0.1.1" - "@bigmi/core": "npm:^0.1.1" - "@emotion/react": "npm:^11.14.0" - "@emotion/styled": "npm:^11.14.0" - "@lifi/sdk": "npm:3.6.2" - "@lifi/wallet-management": "npm:^3.7.1" - "@mui/icons-material": "npm:6.0.2" - "@mui/material": "npm:^6.4.7" - "@mui/system": "npm:^6.4.7" - "@solana/wallet-adapter-base": "npm:^0.9.23" - "@solana/web3.js": "npm:^1.98.0" - "@tanstack/react-virtual": "npm:^3.13.3" - i18next: "npm:^24.2.3" - microdiff: "npm:^1.5.0" - mitt: "npm:^3.0.1" - react-i18next: "npm:^15.4.1" - react-intersection-observer: "npm:^9.16.0" - react-router-dom: "npm:^6.30.0" - viem: "npm:^2.23.10" - zustand: "npm:^5.0.3" - peerDependencies: - "@bigmi/react": ">=0.1.0" - "@solana/wallet-adapter-react": ^0.15.35 - "@tanstack/react-query": ^5.62.0 - react: ">=18" - react-dom: ">=18" - wagmi: ^2.14.0 - checksum: 10/40e8fb796bb25ddfae487df3ecf1ebd517d758b38ed10535c991d44d288fca8d41b4c55e9293f07a2e81ad3b664f5b93b270d17ff3207ae576a00ef1e692b603 - languageName: node - linkType: hard - -"@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0, @lit-labs/ssr-dom-shim@npm:^1.1.2": - version: 1.1.2 - resolution: "@lit-labs/ssr-dom-shim@npm:1.1.2" - checksum: 10/a930f7de57b952dc21317a5754aa0411e000bb4991053cde771c111b7792c4a4cdc896922f0353c832215bed71400431c5ab5a6252c8f4f70bb9ce0b37fe4752 - languageName: node - linkType: hard - -"@lit/reactive-element@npm:^1.3.0, @lit/reactive-element@npm:^1.6.0": - version: 1.6.2 - resolution: "@lit/reactive-element@npm:1.6.2" - dependencies: - "@lit-labs/ssr-dom-shim": "npm:^1.0.0" - checksum: 10/765c38691743e3729a4e7511cb5ff2fcb105321805dedfdc43d214b137d45a8050640a3e235a23e1008e7d8642308a14cb6f20fe716c0a08d1f3db3abae6549b - languageName: node - linkType: hard - -"@lit/reactive-element@npm:^2.0.0": - version: 2.0.3 - resolution: "@lit/reactive-element@npm:2.0.3" - dependencies: - "@lit-labs/ssr-dom-shim": "npm:^1.1.2" - checksum: 10/5a3912454d99ad8896c8e6dae5fadcaa91a66615b627c81425608efa6be756f9bf768f9c328c033b13db2091193d2c1ded8059f87c8a14293ce3cb9c9404bffe - languageName: node - linkType: hard - -"@logtail/core@npm:^0.5.2": - version: 0.5.2 - resolution: "@logtail/core@npm:0.5.2" - dependencies: - "@logtail/tools": "npm:^0.5.2" - "@logtail/types": "npm:^0.5.2" - serialize-error: "npm:8.1.0" - checksum: 10/aae5b4eec822947788b6b4c8917659b4eb29876a23f8c5fddbb3ac190d867977b7dbf9f7a990e3b6cf45929aa72612665cb8df2c7bf94f618445426139f68efe - languageName: node - linkType: hard - -"@logtail/node@npm:^0.5.2": - version: 0.5.2 - resolution: "@logtail/node@npm:0.5.2" - dependencies: - "@logtail/core": "npm:^0.5.2" - "@logtail/types": "npm:^0.5.2" - "@msgpack/msgpack": "npm:^2.5.1" - "@types/stack-trace": "npm:^0.0.33" - cross-fetch: "npm:^4.0.0" - minimatch: "npm:^9.0.5" - serialize-error: "npm:8.1.0" - stack-trace: "npm:0.0.10" - checksum: 10/0fc231d22782966daf4ed87d074c6f49461ee992795586fc5f98ecd4ac18c4680bae6030625f1ba31f7ce70533bc3f836ae5e953c893210a89869cbd61f4cce9 - languageName: node - linkType: hard - -"@logtail/pino@npm:^0.5.0": - version: 0.5.2 - resolution: "@logtail/pino@npm:0.5.2" - dependencies: - "@logtail/node": "npm:^0.5.2" - "@logtail/types": "npm:^0.5.2" - pino-abstract-transport: "npm:^1.0.0" - peerDependencies: - pino: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10/082ebbbe0325751396e5b0e3f926bb18616bac0a5369d533341201e0a4d72892ddc51322485c5ff0fedbba01ba2db80220b4f5d211bba694877621f350b89d3d - languageName: node - linkType: hard - -"@logtail/tools@npm:^0.5.2": - version: 0.5.2 - resolution: "@logtail/tools@npm:0.5.2" - dependencies: - "@logtail/types": "npm:^0.5.2" - cross-fetch: "npm:^4.0.0" - checksum: 10/7f64b03f3c0ad082a3066e3800843e88a85f351b8c37052880a746409a08701cef1a30289a9ce1690bfbe6a66d9693e49a1a84e2d8e759fa2de09eac19230b52 - languageName: node - linkType: hard - -"@logtail/types@npm:^0.5.2": - version: 0.5.2 - resolution: "@logtail/types@npm:0.5.2" - checksum: 10/9986f3d6c5dc9826639ecda254a31444bf66b94fc736ae637d681f642574c9544d8441c46479fba40c98be75f173420c877bb399b3ff646c858f81a45607419d - languageName: node - linkType: hard - -"@manypkg/find-root@npm:^1.1.0": - version: 1.1.0 - resolution: "@manypkg/find-root@npm:1.1.0" - dependencies: - "@babel/runtime": "npm:^7.5.5" - "@types/node": "npm:^12.7.1" - find-up: "npm:^4.1.0" - fs-extra: "npm:^8.1.0" - checksum: 10/31e7dde82612a0e37ebb07876d76b1bf2aedc5b285b5e50d94cdf63edbf1fa3970349b84a5837a3c687e5b643e9a4f4588ae1f4b4ae9d412516d57bf977a08db - languageName: node - linkType: hard - -"@manypkg/get-packages@npm:^1.1.3": - version: 1.1.3 - resolution: "@manypkg/get-packages@npm:1.1.3" - dependencies: - "@babel/runtime": "npm:^7.5.5" - "@changesets/types": "npm:^4.0.1" - "@manypkg/find-root": "npm:^1.1.0" - fs-extra: "npm:^8.1.0" - globby: "npm:^11.0.0" - read-yaml-file: "npm:^1.1.0" - checksum: 10/4912e002199ff3974ec48586376a04c5f1815a4faa5f4d36b0698838eec143c9d4e3d42c41e0de009f48a1e2251802ed63c1311ab44de225b50102f85919a248 - languageName: node - linkType: hard - -"@mapbox/node-pre-gyp@npm:^1.0.0": - version: 1.0.11 - resolution: "@mapbox/node-pre-gyp@npm:1.0.11" - dependencies: - detect-libc: "npm:^2.0.0" - https-proxy-agent: "npm:^5.0.0" - make-dir: "npm:^3.1.0" - node-fetch: "npm:^2.6.7" - nopt: "npm:^5.0.0" - npmlog: "npm:^5.0.1" - rimraf: "npm:^3.0.2" - semver: "npm:^7.3.5" - tar: "npm:^6.1.11" - bin: - node-pre-gyp: bin/node-pre-gyp - checksum: 10/59529a2444e44fddb63057152452b00705aa58059079191126c79ac1388ae4565625afa84ed4dd1bf017d1111ab6e47907f7c5192e06d83c9496f2f3e708680a - languageName: node - linkType: hard - -"@marijn/find-cluster-break@npm:^1.0.0": - version: 1.0.2 - resolution: "@marijn/find-cluster-break@npm:1.0.2" - checksum: 10/92fe7ba43ce3d3314f593e4c2fd822d7089649baff47a474fe04b83e3119931d7cf58388747d429ff65fa2db14f5ca57e787268c482e868fc67759511f61f09b - languageName: node - linkType: hard - -"@metamask/eth-json-rpc-provider@npm:^1.0.0": - version: 1.0.1 - resolution: "@metamask/eth-json-rpc-provider@npm:1.0.1" - dependencies: - "@metamask/json-rpc-engine": "npm:^7.0.0" - "@metamask/safe-event-emitter": "npm:^3.0.0" - "@metamask/utils": "npm:^5.0.1" - checksum: 10/4ed1a96afc32eb46f585ff54e16cb2aee2e7027dcf6a142d875b9c6248f15c9a00dd1df43035f2e64efbf01a96954040699d9d97e3b483c958f5b1d6c0fa6f50 - languageName: node - linkType: hard - -"@metamask/json-rpc-engine@npm:^7.0.0": - version: 7.3.1 - resolution: "@metamask/json-rpc-engine@npm:7.3.1" - dependencies: - "@metamask/rpc-errors": "npm:^6.1.0" - "@metamask/safe-event-emitter": "npm:^3.0.0" - "@metamask/utils": "npm:^8.2.0" - checksum: 10/3988ec9229964c8c3c9172ad8ef36bea2f20e63d0dd720431db89a0031b7692c5ebaa2c53afe9896a823b334f4d5eb718e48a5db00477fe8b7643d332ae3010d - languageName: node - linkType: hard - -"@metamask/json-rpc-engine@npm:^8.0.1, @metamask/json-rpc-engine@npm:^8.0.2": - version: 8.0.2 - resolution: "@metamask/json-rpc-engine@npm:8.0.2" - dependencies: - "@metamask/rpc-errors": "npm:^6.2.1" - "@metamask/safe-event-emitter": "npm:^3.0.0" - "@metamask/utils": "npm:^8.3.0" - checksum: 10/f088f4b648b9b55875b56e8237853e7282f13302a9db6a1f9bba06314dfd6cd0a23b3d27f8fde05a157b97ebb03b67bc2699ba455c99553dfb2ecccd73ab3474 - languageName: node - linkType: hard - -"@metamask/json-rpc-middleware-stream@npm:^7.0.1": - version: 7.0.2 - resolution: "@metamask/json-rpc-middleware-stream@npm:7.0.2" - dependencies: - "@metamask/json-rpc-engine": "npm:^8.0.2" - "@metamask/safe-event-emitter": "npm:^3.0.0" - "@metamask/utils": "npm:^8.3.0" - readable-stream: "npm:^3.6.2" - checksum: 10/850a857418fc6b8c73fb4f978b76d2cdc0372ccb2f0f7e6f0229117882a4687d716fc37638483c9ac1338f7957b3f8207bc6be8a3d4c0708339fe9dfc3510fe0 - languageName: node - linkType: hard - -"@metamask/object-multiplex@npm:^2.0.0": - version: 2.0.0 - resolution: "@metamask/object-multiplex@npm:2.0.0" - dependencies: - once: "npm:^1.4.0" - readable-stream: "npm:^3.6.2" - checksum: 10/54baea752a3ac7c2742c376512e00d4902d383e9da8787574d3b21eb0081523309e24e3915a98f3ae0341d65712b6832d2eb7eeb862f4ef0da1ead52dcde5387 - languageName: node - linkType: hard - -"@metamask/onboarding@npm:^1.0.1": - version: 1.0.1 - resolution: "@metamask/onboarding@npm:1.0.1" - dependencies: - bowser: "npm:^2.9.0" - checksum: 10/2aa288e58fc34cb4708e311fc08abd33a0d9bc67671610955a2bd8d43a16330261f1159174c365611e249751ec984da9a9cb963bb0a87b3a6945d7caa6cc8799 - languageName: node - linkType: hard - -"@metamask/providers@npm:16.1.0": - version: 16.1.0 - resolution: "@metamask/providers@npm:16.1.0" - dependencies: - "@metamask/json-rpc-engine": "npm:^8.0.1" - "@metamask/json-rpc-middleware-stream": "npm:^7.0.1" - "@metamask/object-multiplex": "npm:^2.0.0" - "@metamask/rpc-errors": "npm:^6.2.1" - "@metamask/safe-event-emitter": "npm:^3.1.1" - "@metamask/utils": "npm:^8.3.0" - detect-browser: "npm:^5.2.0" - extension-port-stream: "npm:^3.0.0" - fast-deep-equal: "npm:^3.1.3" - is-stream: "npm:^2.0.0" - readable-stream: "npm:^3.6.2" - webextension-polyfill: "npm:^0.10.0" - checksum: 10/596bcc0206355e5698cc41458b07caa748f589790e1a3210f1a32d21103a3318902d953a641d4583b8179d653659ba29c42e65fba019a98533bdcf68316bf915 - languageName: node - linkType: hard - -"@metamask/rpc-errors@npm:^6.1.0, @metamask/rpc-errors@npm:^6.2.1": - version: 6.3.1 - resolution: "@metamask/rpc-errors@npm:6.3.1" - dependencies: - "@metamask/utils": "npm:^9.0.0" - fast-safe-stringify: "npm:^2.0.6" - checksum: 10/f968fb490b13b632c2ad4770a144d67cecdff8d539cb8b489c732b08dab7a62fae65d7a2908ce8c5b77260317aa618948a52463f093fa8d9f84aee1c5f6f5daf - languageName: node - linkType: hard - -"@metamask/safe-event-emitter@npm:^2.0.0": - version: 2.0.0 - resolution: "@metamask/safe-event-emitter@npm:2.0.0" - checksum: 10/3e4f00c64aa1ddf9b9ae5c2337fb8cee359b6c481ded0ec21ef70610960c51cdcc4a9b569de334dcd7cb1fe445cafd298360907c1e211e244c5990b55246f350 - languageName: node - linkType: hard - -"@metamask/safe-event-emitter@npm:^3.0.0, @metamask/safe-event-emitter@npm:^3.1.1": - version: 3.1.1 - resolution: "@metamask/safe-event-emitter@npm:3.1.1" - checksum: 10/e24db4d7c20764bfc5b025065f92518c805f0ffb1da4820078b8cff7dcae964c0f354cf053fcb7ac659de015d5ffdf21aae5e8d44e191ee8faa9066855f22653 - languageName: node - linkType: hard - -"@metamask/sdk-communication-layer@npm:0.32.0": - version: 0.32.0 - resolution: "@metamask/sdk-communication-layer@npm:0.32.0" - dependencies: - bufferutil: "npm:^4.0.8" - date-fns: "npm:^2.29.3" - debug: "npm:^4.3.4" - utf-8-validate: "npm:^5.0.2" - uuid: "npm:^8.3.2" - peerDependencies: - cross-fetch: ^4.0.0 - eciesjs: "*" - eventemitter2: ^6.4.9 - readable-stream: ^3.6.2 - socket.io-client: ^4.5.1 - checksum: 10/20a8c170b7ad932c9d65aa655225d302fd52a33c6d6662d48b1bd020dca4be702bf6fdf2cb79105acab926077dedf17033e3247a5179c8d453fb4105b350fc8d - languageName: node - linkType: hard - -"@metamask/sdk-install-modal-web@npm:0.32.0": - version: 0.32.0 - resolution: "@metamask/sdk-install-modal-web@npm:0.32.0" - dependencies: - "@paulmillr/qr": "npm:^0.2.1" - checksum: 10/56505ef4a25ef4cbc3767ae82f532b013cba4561227c0bf92ea97d3f9351c8e28737a08323a86487d42c4d4eea938e0f0b18ea348feaa46b96eaa8e4d591eee6 - languageName: node - linkType: hard - -"@metamask/sdk@npm:0.32.0": - version: 0.32.0 - resolution: "@metamask/sdk@npm:0.32.0" - dependencies: - "@babel/runtime": "npm:^7.26.0" - "@metamask/onboarding": "npm:^1.0.1" - "@metamask/providers": "npm:16.1.0" - "@metamask/sdk-communication-layer": "npm:0.32.0" - "@metamask/sdk-install-modal-web": "npm:0.32.0" - "@paulmillr/qr": "npm:^0.2.1" - bowser: "npm:^2.9.0" - cross-fetch: "npm:^4.0.0" - debug: "npm:^4.3.4" - eciesjs: "npm:^0.4.11" - eth-rpc-errors: "npm:^4.0.3" - eventemitter2: "npm:^6.4.9" - obj-multiplex: "npm:^1.0.0" - pump: "npm:^3.0.0" - readable-stream: "npm:^3.6.2" - socket.io-client: "npm:^4.5.1" - tslib: "npm:^2.6.0" - util: "npm:^0.12.4" - uuid: "npm:^8.3.2" - checksum: 10/cff2ccc92b41a039c87ad7c83f9a0d316b4dd79009a69cad7678fdb1b10881035a32113883f823fa0f6832a65637e0c2035bead488882c5bb14e726fb92565c5 - languageName: node - linkType: hard - -"@metamask/superstruct@npm:^3.0.0, @metamask/superstruct@npm:^3.1.0": - version: 3.1.0 - resolution: "@metamask/superstruct@npm:3.1.0" - checksum: 10/5066fe228d5f11da387606d7f9545de2b473ab5a9e0f1bb8aea2f52d3e2c9d25e427151acde61f4a2de80a07a9871fe9505ad06abca6a61b7c3b54ed5c403b01 - languageName: node - linkType: hard - -"@metamask/utils@npm:^5.0.1": - version: 5.0.2 - resolution: "@metamask/utils@npm:5.0.2" - dependencies: - "@ethereumjs/tx": "npm:^4.1.2" - "@types/debug": "npm:^4.1.7" - debug: "npm:^4.3.4" - semver: "npm:^7.3.8" - superstruct: "npm:^1.0.3" - checksum: 10/c0d3ee4c3144b557936ab01c1a64950c0f99782bd0cf5596c0fabe8fd224dba48ed3483c0ea954791fe2ee81064a445adb489df50c776bbbeb67b5b96e930115 - languageName: node - linkType: hard - -"@metamask/utils@npm:^8.2.0, @metamask/utils@npm:^8.3.0": - version: 8.5.0 - resolution: "@metamask/utils@npm:8.5.0" - dependencies: - "@ethereumjs/tx": "npm:^4.2.0" - "@metamask/superstruct": "npm:^3.0.0" - "@noble/hashes": "npm:^1.3.1" - "@scure/base": "npm:^1.1.3" - "@types/debug": "npm:^4.1.7" - debug: "npm:^4.3.4" - pony-cause: "npm:^2.1.10" - semver: "npm:^7.5.4" - uuid: "npm:^9.0.1" - checksum: 10/68a42a55f7dc750b75467fb7c05a496c20dac073a2753e0f4d9642c4d8dcb3f9ddf51a09d30337e11637f1777f3dfe22e15b5159dbafb0fdb7bd8c9236056153 - languageName: node - linkType: hard - -"@metamask/utils@npm:^9.0.0": - version: 9.1.0 - resolution: "@metamask/utils@npm:9.1.0" - dependencies: - "@ethereumjs/tx": "npm:^4.2.0" - "@metamask/superstruct": "npm:^3.1.0" - "@noble/hashes": "npm:^1.3.1" - "@scure/base": "npm:^1.1.3" - "@types/debug": "npm:^4.1.7" - debug: "npm:^4.3.4" - pony-cause: "npm:^2.1.10" - semver: "npm:^7.5.4" - uuid: "npm:^9.0.1" - checksum: 10/7335e151a51be92e86868dc48b3ee78c376d4edd5d758d334176027247637ab22839d8f663bd02542c0a19b05ecec456bedab5f36436689cf3d953ca36d91781 - languageName: node - linkType: hard - -"@microsoft/api-extractor-model@npm:7.30.0": - version: 7.30.0 - resolution: "@microsoft/api-extractor-model@npm:7.30.0" - dependencies: - "@microsoft/tsdoc": "npm:~0.15.1" - "@microsoft/tsdoc-config": "npm:~0.17.1" - "@rushstack/node-core-library": "npm:5.10.0" - checksum: 10/7556760448fee6bbc0b7d4f32bd70a5d2f0b78153e2614d9834d007130f81d42338c1ccbc63e95b270bc8c3f9a50d943c4bbfe48e588e3acbbf4d8553cf40631 - languageName: node - linkType: hard - -"@microsoft/api-extractor@npm:^7.47.11": - version: 7.48.0 - resolution: "@microsoft/api-extractor@npm:7.48.0" - dependencies: - "@microsoft/api-extractor-model": "npm:7.30.0" - "@microsoft/tsdoc": "npm:~0.15.1" - "@microsoft/tsdoc-config": "npm:~0.17.1" - "@rushstack/node-core-library": "npm:5.10.0" - "@rushstack/rig-package": "npm:0.5.3" - "@rushstack/terminal": "npm:0.14.3" - "@rushstack/ts-command-line": "npm:4.23.1" - lodash: "npm:~4.17.15" - minimatch: "npm:~3.0.3" - resolve: "npm:~1.22.1" - semver: "npm:~7.5.4" - source-map: "npm:~0.6.1" - typescript: "npm:5.4.2" - bin: - api-extractor: bin/api-extractor - checksum: 10/18db5236b65a727dfd6c29a508ec9affdc31648dedf82461d4c1ecb01c2fb04ba00da6c40dff478e365dc9491d477d3462c8edb04262cf066df3cb6ef9fc8912 - languageName: node - linkType: hard - -"@microsoft/tsdoc-config@npm:~0.17.1": - version: 0.17.1 - resolution: "@microsoft/tsdoc-config@npm:0.17.1" - dependencies: - "@microsoft/tsdoc": "npm:0.15.1" - ajv: "npm:~8.12.0" - jju: "npm:~1.4.0" - resolve: "npm:~1.22.2" - checksum: 10/19f57b752413916c7ad14466650f48ba1acaf674411b6a44065e93f762d391e501cb553eeb8ae3834f1f1f064ddc83a26bdbd8026c9b2c0c194fe90818078eb9 - languageName: node - linkType: hard - -"@microsoft/tsdoc@npm:0.15.1, @microsoft/tsdoc@npm:~0.15.1": - version: 0.15.1 - resolution: "@microsoft/tsdoc@npm:0.15.1" - checksum: 10/1a92612883088fe184dba596e7ba7a0daef0e6981caeca22bad6ad551d2247294f12e368537d0d8192525cf5743f7f15fcc2ad7b3b849f26a09a15ffdd89fd0c - languageName: node - linkType: hard - -"@motionone/animation@npm:^10.15.1": - version: 10.15.1 - resolution: "@motionone/animation@npm:10.15.1" - dependencies: - "@motionone/easing": "npm:^10.15.1" - "@motionone/types": "npm:^10.15.1" - "@motionone/utils": "npm:^10.15.1" - tslib: "npm:^2.3.1" - checksum: 10/d270c5940fef8dcbfb4a5e65f107b840d1980e09583d3d0a7768e31a204ffcdc10b2a8cb73330cec856941138d07b8012e7096025f61c7ed79727c7af394ecc8 - languageName: node - linkType: hard - -"@motionone/dom@npm:^10.16.2": - version: 10.16.2 - resolution: "@motionone/dom@npm:10.16.2" - dependencies: - "@motionone/animation": "npm:^10.15.1" - "@motionone/generators": "npm:^10.15.1" - "@motionone/types": "npm:^10.15.1" - "@motionone/utils": "npm:^10.15.1" - hey-listen: "npm:^1.0.8" - tslib: "npm:^2.3.1" - checksum: 10/52bf466eaa5ef7c183effe4e83695c1e632708d897a804235486cc73472e01e9d4594aee5cc899a15beb127486f7671c932e0478a415bcf3032991ca1094c8da - languageName: node - linkType: hard - -"@motionone/easing@npm:^10.15.1": - version: 10.15.1 - resolution: "@motionone/easing@npm:10.15.1" - dependencies: - "@motionone/utils": "npm:^10.15.1" - tslib: "npm:^2.3.1" - checksum: 10/78190a9b4c473a33b6548c2a1a0e4d1a78cf9ccb7a21e5d798fa2d9552bbe3f5f6aa23a7fa5588bf6264cb2580893e5ba89658d40ac2abd4b3ec5f0d27990895 - languageName: node - linkType: hard - -"@motionone/generators@npm:^10.15.1": - version: 10.15.1 - resolution: "@motionone/generators@npm:10.15.1" - dependencies: - "@motionone/types": "npm:^10.15.1" - "@motionone/utils": "npm:^10.15.1" - tslib: "npm:^2.3.1" - checksum: 10/82a9884445c07c9ddd8b825d2ef542bbbce87901573367a9ddcac9949ca65a3bbef05182a129fe6ff0c880844f457e77db7bd3ebffdb548501ed1e3b61d8d6b0 - languageName: node - linkType: hard - -"@motionone/svelte@npm:^10.16.2": - version: 10.16.2 - resolution: "@motionone/svelte@npm:10.16.2" - dependencies: - "@motionone/dom": "npm:^10.16.2" - tslib: "npm:^2.3.1" - checksum: 10/630e542403af44ec394b78e5864022782f9e8db50545f15bdcbbfc9fbce21fafa79436b75490c90876362c8325d8fdf33526b317e82c79dbbf5428a08a4f168f - languageName: node - linkType: hard - -"@motionone/types@npm:^10.15.1": - version: 10.15.1 - resolution: "@motionone/types@npm:10.15.1" - checksum: 10/98091f7dca257508d94d1080678c433da39a814e8e58aaa742212bf6c2a5b5e2120a6251a06e3ea522219ce6d1b6eb6aa2cab224b803fe52789033d8398ef0aa - languageName: node - linkType: hard - -"@motionone/utils@npm:^10.15.1": - version: 10.15.1 - resolution: "@motionone/utils@npm:10.15.1" - dependencies: - "@motionone/types": "npm:^10.15.1" - hey-listen: "npm:^1.0.8" - tslib: "npm:^2.3.1" - checksum: 10/317dd16b9f75c39470ff4aeae29fecea2f205d1276e70e0254d8124e23713634786b4fb4d9dafebc3d731ab235b5c6260016ddde8e0c354af79bd9d64af99b1d - languageName: node - linkType: hard - -"@motionone/vue@npm:^10.16.2": - version: 10.16.2 - resolution: "@motionone/vue@npm:10.16.2" - dependencies: - "@motionone/dom": "npm:^10.16.2" - tslib: "npm:^2.3.1" - checksum: 10/ae5dda17aef77896b2209c1edf693d5a43886896495d0155e096e57ad3e4716ccfef34d048119483d1af25c23c0897aaaf74eabca3a74ff74770af5bcbbbc3f3 - languageName: node - linkType: hard - -"@msgpack/msgpack@npm:^2.5.1": - version: 2.8.0 - resolution: "@msgpack/msgpack@npm:2.8.0" - checksum: 10/d90ab780c2c96fa5af22f38e0b76871d7c77d06fcf40786b64ada4e0ae02e17b216b38a5505fb4b7d1c339d95caee0669f5ec9004a2b392ce0cbe16afdbd9333 - languageName: node - linkType: hard - -"@mui/core-downloads-tracker@npm:^6.4.9": - version: 6.4.9 - resolution: "@mui/core-downloads-tracker@npm:6.4.9" - checksum: 10/afd4f5ee57eaa86181464e2f05cf0c8f74a3ada309df5f0c74aacc3de0b48827757ac68dec487c09443f9eb5968a334c543a1986aa1130b2f160e8d70e39b735 - languageName: node - linkType: hard - -"@mui/icons-material@npm:6.0.2": - version: 6.0.2 - resolution: "@mui/icons-material@npm:6.0.2" - dependencies: - "@babel/runtime": "npm:^7.25.0" - peerDependencies: - "@mui/material": ^6.0.2 - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10/2c36acfc7fe6a6725360be410c3bad6b3a327c72fd19ce4c826bf4e9963d1449adb32868ae6286d70ab77c38cdd608c1b50c7575b526af8a8ded96793b505255 - languageName: node - linkType: hard - -"@mui/material@npm:^6.4.7": - version: 6.4.9 - resolution: "@mui/material@npm:6.4.9" - dependencies: - "@babel/runtime": "npm:^7.26.0" - "@mui/core-downloads-tracker": "npm:^6.4.9" - "@mui/system": "npm:^6.4.9" - "@mui/types": "npm:~7.2.24" - "@mui/utils": "npm:^6.4.8" - "@popperjs/core": "npm:^2.11.8" - "@types/react-transition-group": "npm:^4.4.12" - clsx: "npm:^2.1.1" - csstype: "npm:^3.1.3" - prop-types: "npm:^15.8.1" - react-is: "npm:^19.0.0" - react-transition-group: "npm:^4.4.5" - peerDependencies: - "@emotion/react": ^11.5.0 - "@emotion/styled": ^11.3.0 - "@mui/material-pigment-css": ^6.4.9 - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - "@mui/material-pigment-css": - optional: true - "@types/react": - optional: true - checksum: 10/721b9e61f72f755142acb12e7775b62d65f31231b88979dcce9960b08b88359b2b04dc9419bb79376dd40d74674ff452004b90a6ae39ce9319eae23bf2a50357 - languageName: node - linkType: hard - -"@mui/private-theming@npm:^6.4.8": - version: 6.4.8 - resolution: "@mui/private-theming@npm:6.4.8" - dependencies: - "@babel/runtime": "npm:^7.26.0" - "@mui/utils": "npm:^6.4.8" - prop-types: "npm:^15.8.1" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10/23cffff71e07a5a64a6f94838f5eb7be870bb3a0a791d474e22fe1423b50e00774f23e6d4af4b991fde8a04f8c939be5d1fd74468b30ae1f2a17e601cfe33ea6 - languageName: node - linkType: hard - -"@mui/styled-engine@npm:^6.4.9": - version: 6.4.9 - resolution: "@mui/styled-engine@npm:6.4.9" - dependencies: - "@babel/runtime": "npm:^7.26.0" - "@emotion/cache": "npm:^11.13.5" - "@emotion/serialize": "npm:^1.3.3" - "@emotion/sheet": "npm:^1.4.0" - csstype: "npm:^3.1.3" - prop-types: "npm:^15.8.1" - peerDependencies: - "@emotion/react": ^11.4.1 - "@emotion/styled": ^11.3.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - checksum: 10/f3463295c6eee593c9be6645932a8b384a94ca30d607adec936c940347656b645d9da9b5deea474514446b5de5c2f124822fcb8f4a6d923d8d9ac6e5569dd18a - languageName: node - linkType: hard - -"@mui/system@npm:^6.4.7, @mui/system@npm:^6.4.9": - version: 6.4.9 - resolution: "@mui/system@npm:6.4.9" - dependencies: - "@babel/runtime": "npm:^7.26.0" - "@mui/private-theming": "npm:^6.4.8" - "@mui/styled-engine": "npm:^6.4.9" - "@mui/types": "npm:~7.2.24" - "@mui/utils": "npm:^6.4.8" - clsx: "npm:^2.1.1" - csstype: "npm:^3.1.3" - prop-types: "npm:^15.8.1" - peerDependencies: - "@emotion/react": ^11.5.0 - "@emotion/styled": ^11.3.0 - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - "@types/react": - optional: true - checksum: 10/125b6be99dfa0c3f7f509144a24b3ecd56f02a90b2da3d0587f014abe45b2924375ce649bc6ef1768d1536fcbfa6c159e7bc0c3a89a6eee254429a5b566f7194 - languageName: node - linkType: hard - -"@mui/types@npm:~7.2.24": - version: 7.2.24 - resolution: "@mui/types@npm:7.2.24" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10/5ed4f90ec62c7df901e58b53011bf6b377b48e13b07de9eeb15c7a6f3f759310f0682b64685c7762f660fad6edf4c8e05595313c93810fc63c54270b899b4a75 - languageName: node - linkType: hard - -"@mui/utils@npm:^6.4.8": - version: 6.4.8 - resolution: "@mui/utils@npm:6.4.8" - dependencies: - "@babel/runtime": "npm:^7.26.0" - "@mui/types": "npm:~7.2.24" - "@types/prop-types": "npm:^15.7.14" - clsx: "npm:^2.1.1" - prop-types: "npm:^15.8.1" - react-is: "npm:^19.0.0" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10/8a67c5eecb5ed6ec0d4f193615ae27b5c72dce003403809c9d3ecd535fd3992cb8c94a7bae0ae9240c718855a4d43049de65b43d543d4bc6223635f85f880224 - languageName: node - linkType: hard - -"@multiformats/dns@npm:^1.0.3": - version: 1.0.6 - resolution: "@multiformats/dns@npm:1.0.6" - dependencies: - "@types/dns-packet": "npm:^5.6.5" - buffer: "npm:^6.0.3" - dns-packet: "npm:^5.6.1" - hashlru: "npm:^2.3.0" - p-queue: "npm:^8.0.1" - progress-events: "npm:^1.0.0" - uint8arrays: "npm:^5.0.2" - checksum: 10/ebe1568d1102c508e5016539dc5c51742cb90433e55f6509890096c412b48e2eb026cbe1a8b7b748821d311d1add37ca392759d76c9f96a802c70e74f9c3317f - languageName: node - linkType: hard - -"@multiformats/multiaddr-to-uri@npm:^10.0.1": - version: 10.1.2 - resolution: "@multiformats/multiaddr-to-uri@npm:10.1.2" - dependencies: - "@multiformats/multiaddr": "npm:^12.3.0" - checksum: 10/b3d65ad2b99ecda52ca5b426b08fbb8ca2bbbf4628b3dd6090c9c41c63ac2c91ba07cc11a2352860802f272f191a5fafab559a8cc60d8383a092509dc45373da - languageName: node - linkType: hard - -"@multiformats/multiaddr@npm:^12.2.1, @multiformats/multiaddr@npm:^12.3.0, @multiformats/multiaddr@npm:^12.3.3": - version: 12.3.4 - resolution: "@multiformats/multiaddr@npm:12.3.4" - dependencies: - "@chainsafe/is-ip": "npm:^2.0.1" - "@chainsafe/netmask": "npm:^2.0.0" - "@multiformats/dns": "npm:^1.0.3" - multiformats: "npm:^13.0.0" - uint8-varint: "npm:^2.0.1" - uint8arrays: "npm:^5.0.0" - checksum: 10/12f7606391ccdab31c571b5fd3546f32b9f74bb1da6a3255b71d4606619dee2a94c34b7ada2dfd5ea023a4fb01141170510e872e1d0567197482241b42ad2d9d - languageName: node - linkType: hard - -"@next/env@npm:14.2.28": - version: 14.2.28 - resolution: "@next/env@npm:14.2.28" - checksum: 10/d747cff27e2a026776f9ab3b97c14dc56c338e696ab6b686a2663e9dbfc0536d276d95dda881d560358c02cb5e9c405d8872477d0bf3203db9f0fb1861226df0 - languageName: node - linkType: hard - -"@next/eslint-plugin-next@npm:15.0.3": - version: 15.0.3 - resolution: "@next/eslint-plugin-next@npm:15.0.3" - dependencies: - fast-glob: "npm:3.3.1" - checksum: 10/ef0d68b3e0f737f88b719353eb4dd65f8d7a98ddbdb8a7e2f2283e4696f9e4875c6f335dc18993254ea95ad481ae6cf004388657b7abbe7a6e1557641b31051e - languageName: node - linkType: hard - -"@next/swc-darwin-arm64@npm:14.2.28": - version: 14.2.28 - resolution: "@next/swc-darwin-arm64@npm:14.2.28" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@next/swc-darwin-x64@npm:14.2.28": - version: 14.2.28 - resolution: "@next/swc-darwin-x64@npm:14.2.28" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@next/swc-linux-arm64-gnu@npm:14.2.28": - version: 14.2.28 - resolution: "@next/swc-linux-arm64-gnu@npm:14.2.28" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@next/swc-linux-arm64-musl@npm:14.2.28": - version: 14.2.28 - resolution: "@next/swc-linux-arm64-musl@npm:14.2.28" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@next/swc-linux-x64-gnu@npm:14.2.28": - version: 14.2.28 - resolution: "@next/swc-linux-x64-gnu@npm:14.2.28" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@next/swc-linux-x64-musl@npm:14.2.28": - version: 14.2.28 - resolution: "@next/swc-linux-x64-musl@npm:14.2.28" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@next/swc-win32-arm64-msvc@npm:14.2.28": - version: 14.2.28 - resolution: "@next/swc-win32-arm64-msvc@npm:14.2.28" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@next/swc-win32-ia32-msvc@npm:14.2.28": - version: 14.2.28 - resolution: "@next/swc-win32-ia32-msvc@npm:14.2.28" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@next/swc-win32-x64-msvc@npm:14.2.28": - version: 14.2.28 - resolution: "@next/swc-win32-x64-msvc@npm:14.2.28" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1": - version: 5.1.1-v1 - resolution: "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1" - dependencies: - eslint-scope: "npm:5.1.1" - checksum: 10/f2e3b2d6a6e2d9f163ca22105910c9f850dc4897af0aea3ef0a5886b63d8e1ba6505b71c99cb78a3bba24a09557d601eb21c8dede3f3213753fcfef364eb0e57 - languageName: node - linkType: hard - -"@noble/ciphers@npm:1.2.1": - version: 1.2.1 - resolution: "@noble/ciphers@npm:1.2.1" - checksum: 10/7fa0d32529d8da6323b08afec97218f6d6bc0d1e135243bf10f7587a2819495c3f3f4a5af1f41045501bb1ade94238c76960366a5d6441970e49ba9cacb88740 - languageName: node - linkType: hard - -"@noble/ciphers@npm:^1.0.0": - version: 1.0.0 - resolution: "@noble/ciphers@npm:1.0.0" - checksum: 10/0a03d2bfac316f6f235ae4cdbeeba372f8d32997239c27cb56d55cbd3d42e0f867e8d7c8d76716f5f645bb7d5d73f05ba1f2d2e7d8391e86936e3b97021bfcf6 - languageName: node - linkType: hard - -"@noble/ciphers@npm:^1.3.0": - version: 1.3.0 - resolution: "@noble/ciphers@npm:1.3.0" - checksum: 10/051660051e3e9e2ca5fb9dece2885532b56b7e62946f89afa7284a0fb8bc02e2bd1c06554dba68162ff42d295b54026456084198610f63c296873b2f1cd7a586 - languageName: node - linkType: hard - -"@noble/curves@npm:1.2.0": - version: 1.2.0 - resolution: "@noble/curves@npm:1.2.0" - dependencies: - "@noble/hashes": "npm:1.3.2" - checksum: 10/94e02e9571a9fd42a3263362451849d2f54405cb3ce9fa7c45bc6b9b36dcd7d1d20e2e1e14cfded24937a13d82f1e60eefc4d7a14982ce0bc219a9fc0f51d1f9 - languageName: node - linkType: hard - -"@noble/curves@npm:1.4.2, @noble/curves@npm:~1.4.0": - version: 1.4.2 - resolution: "@noble/curves@npm:1.4.2" - dependencies: - "@noble/hashes": "npm:1.4.0" - checksum: 10/f433a2e8811ae345109388eadfa18ef2b0004c1f79417553241db4f0ad0d59550be6298a4f43d989c627e9f7551ffae6e402a4edf0173981e6da95fc7cab5123 - languageName: node - linkType: hard - -"@noble/curves@npm:1.6.0, @noble/curves@npm:^1.4.0, @noble/curves@npm:^1.4.2, @noble/curves@npm:^1.6.0, @noble/curves@npm:~1.6.0": - version: 1.6.0 - resolution: "@noble/curves@npm:1.6.0" - dependencies: - "@noble/hashes": "npm:1.5.0" - checksum: 10/9090b5a020b7e38c7b6d21506afaacd0c7557129d716a174334c1efc36385bf3ca6de16a543c216db58055e019c6a6c3bea8d9c0b79386e6bacff5c4c6b438a9 - languageName: node - linkType: hard - -"@noble/curves@npm:1.8.0": - version: 1.8.0 - resolution: "@noble/curves@npm:1.8.0" - dependencies: - "@noble/hashes": "npm:1.7.0" - checksum: 10/c54ce84cf54b8bda1a37a10dfae2e49e5b6cdf5dd98b399efa8b8a80a286b3f8f27bde53202cb308353bfd98719938991a78bed6e43f81f13b17f8181b7b82eb - languageName: node - linkType: hard - -"@noble/curves@npm:1.8.1, @noble/curves@npm:^1.8.0, @noble/curves@npm:^1.8.1, @noble/curves@npm:~1.8.1": - version: 1.8.1 - resolution: "@noble/curves@npm:1.8.1" - dependencies: - "@noble/hashes": "npm:1.7.1" - checksum: 10/e861db372cc0734b02a4c61c0f5a6688d4a7555edca3d8a9e7c846c9aa103ca52d3c3818e8bc333a1a95b5be7f370ff344668d5d759471b11c2d14c7f24b3984 - languageName: node - linkType: hard - -"@noble/curves@npm:1.8.2": - version: 1.8.2 - resolution: "@noble/curves@npm:1.8.2" - dependencies: - "@noble/hashes": "npm:1.7.2" - checksum: 10/540e7b7a8fe92ecd5cef846f84d07180662eb7fd7d8e9172b8960c31827e74f148fe4630da962138a6be093ae9f8992d14ab23d3682a2cc32be839aa57c03a46 - languageName: node - linkType: hard - -"@noble/curves@npm:1.9.2": - version: 1.9.2 - resolution: "@noble/curves@npm:1.9.2" - dependencies: - "@noble/hashes": "npm:1.8.0" - checksum: 10/f60f00ad86296054566b67be08fd659999bb64b692bfbf11dbe3be1f422ad4d826bf5ebb2015ce2e246538eab2b677707e0a46ffa8323a6fae7a9a30ec1fe318 - languageName: node - linkType: hard - -"@noble/curves@npm:^1.7.0": - version: 1.7.0 - resolution: "@noble/curves@npm:1.7.0" - dependencies: - "@noble/hashes": "npm:1.6.0" - checksum: 10/2a11ef4895907d0b241bd3b72f9e6ebe56f0e705949bfd5efe003f25233549f620d287550df2d24ad56a1f953b82ec5f7cf4bd7cb78b1b2e76eb6dd516d44cf8 - languageName: node - linkType: hard - -"@noble/curves@npm:^1.9.1, @noble/curves@npm:~1.9.0": - version: 1.9.4 - resolution: "@noble/curves@npm:1.9.4" - dependencies: - "@noble/hashes": "npm:1.8.0" - checksum: 10/e8e9a05f27dc79e8f67001ddf81b69c527e3879085841647a07e150fc1c28fd5b576cce1f411daaa0cae40f8c65b2fd6c457f4165b2c4c9fbe327173ba1d8845 - languageName: node - linkType: hard - -"@noble/hashes@npm:1.2.0, @noble/hashes@npm:~1.2.0": - version: 1.2.0 - resolution: "@noble/hashes@npm:1.2.0" - checksum: 10/c295684a2799f4ddad10a855efd9b82c70c27ac5f7437642df9700e120087c796851dd95b12d2e7596802303fe6afbfdf0f8733b5c7453f70c4c080746dde6ff - languageName: node - linkType: hard - -"@noble/hashes@npm:1.3.2": - version: 1.3.2 - resolution: "@noble/hashes@npm:1.3.2" - checksum: 10/685f59d2d44d88e738114b71011d343a9f7dce9dfb0a121f1489132f9247baa60bc985e5ec6f3213d114fbd1e1168e7294644e46cbd0ce2eba37994f28eeb51b - languageName: node - linkType: hard - -"@noble/hashes@npm:1.4.0, @noble/hashes@npm:~1.4.0": - version: 1.4.0 - resolution: "@noble/hashes@npm:1.4.0" - checksum: 10/e156e65794c473794c52fa9d06baf1eb20903d0d96719530f523cc4450f6c721a957c544796e6efd0197b2296e7cd70efeb312f861465e17940a3e3c7e0febc6 - languageName: node - linkType: hard - -"@noble/hashes@npm:1.5.0, @noble/hashes@npm:^1.2.0, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.4.0, @noble/hashes@npm:^1.5.0, @noble/hashes@npm:~1.5.0": - version: 1.5.0 - resolution: "@noble/hashes@npm:1.5.0" - checksum: 10/da7fc7af52af7afcf59810a7eea6155075464ff462ffda2572dc6d57d53e2669b1ea2ec774e814f6273f1697e567f28d36823776c9bf7068cba2a2855140f26e - languageName: node - linkType: hard - -"@noble/hashes@npm:1.6.0": - version: 1.6.0 - resolution: "@noble/hashes@npm:1.6.0" - checksum: 10/b44b043b02adbecd33596adeed97d9f9864c24a2410f7ac3b847986c2ecf1f6f0df76024b3f1b14d6ea954932960d88898fe551fb9d39844a8b870e9f9044ea1 - languageName: node - linkType: hard - -"@noble/hashes@npm:1.7.0": - version: 1.7.0 - resolution: "@noble/hashes@npm:1.7.0" - checksum: 10/ab038a816c8c9bb986e92797e3d9c5a5b37c020e0c3edc55bcae5061dbdd457f1f0a22787f83f4787c17415ba0282a20a1e455d36ed0cdcace4ce21ef1869f60 - languageName: node - linkType: hard - -"@noble/hashes@npm:1.7.1, @noble/hashes@npm:^1.7.1, @noble/hashes@npm:~1.7.1": - version: 1.7.1 - resolution: "@noble/hashes@npm:1.7.1" - checksum: 10/ca3120da0c3e7881d6a481e9667465cc9ebbee1329124fb0de442e56d63fef9870f8cc96f264ebdb18096e0e36cebc0e6e979a872d545deb0a6fed9353f17e05 - languageName: node - linkType: hard - -"@noble/hashes@npm:1.7.2": - version: 1.7.2 - resolution: "@noble/hashes@npm:1.7.2" - checksum: 10/b5af9e4b91543dcc46a811b5b2c57bfdeb41728361979a19d6110a743e2cb0459872553f68d3a46326d21959964db2776b8c8b4db85ac1d9f63ebcaddf7d59b6 - languageName: node - linkType: hard - -"@noble/hashes@npm:1.8.0, @noble/hashes@npm:^1.8.0, @noble/hashes@npm:~1.8.0": - version: 1.8.0 - resolution: "@noble/hashes@npm:1.8.0" - checksum: 10/474b7f56bc6fb2d5b3a42132561e221b0ea4f91e590f4655312ca13667840896b34195e2b53b7f097ec080a1fdd3b58d902c2a8d0fbdf51d2e238b53808a177e - languageName: node - linkType: hard - -"@noble/hashes@npm:^1.6.1": - version: 1.6.1 - resolution: "@noble/hashes@npm:1.6.1" - checksum: 10/74d9ad7b1437a22ba3b877584add3367587fbf818113152f293025d20d425aa74c191d18d434797312f2270458bc9ab3241c34d14ec6115fb16438b3248f631f - languageName: node - linkType: hard - -"@noble/secp256k1@npm:1.7.1, @noble/secp256k1@npm:~1.7.0": - version: 1.7.1 - resolution: "@noble/secp256k1@npm:1.7.1" - checksum: 10/214d4756c20ed20809d948d0cc161e95664198cb127266faf747fd7deffe5444901f05fe9f833787738f2c6e60b09e544c2f737f42f73b3699e3999ba15b1b63 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10/6ab2a9b8a1d67b067922c36f259e3b3dfd6b97b219c540877a4944549a4d49ea5ceba5663905ab5289682f1f3c15ff441d02f0447f620a42e1cb5e1937174d4b - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10/012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10/40033e33e96e97d77fba5a238e4bba4487b8284678906a9f616b5579ddaf868a18874c0054a75402c9fbaaa033a25ceae093af58c9c30278e35c23c9479e79b0 - languageName: node - linkType: hard - -"@nolyfill/is-core-module@npm:1.0.39": - version: 1.0.39 - resolution: "@nolyfill/is-core-module@npm:1.0.39" - checksum: 10/0d6e098b871eca71d875651288e1f0fa770a63478b0b50479c99dc760c64175a56b5b04f58d5581bbcc6b552b8191ab415eada093d8df9597ab3423c8cac1815 - languageName: node - linkType: hard - -"@nomicfoundation/edr-darwin-arm64@npm:0.11.3": - version: 0.11.3 - resolution: "@nomicfoundation/edr-darwin-arm64@npm:0.11.3" - checksum: 10/f784703e65a609a10dbcfd2b8f61639df35c1b0064c302fe8af048d8a0a772e6f59c1aff295d9420b3f2399c2bf4a224b9b57621eea70586d0113fe751a7fe1a - languageName: node - linkType: hard - -"@nomicfoundation/edr-darwin-x64@npm:0.11.3": - version: 0.11.3 - resolution: "@nomicfoundation/edr-darwin-x64@npm:0.11.3" - checksum: 10/007561da9c7a36dec43bd72681124645df51513e29d34571d9cf9c4e674706f6c7da98bcd764315622213b3046e5be0e2809ecec0fea71293d46f60e4e367473 - languageName: node - linkType: hard - -"@nomicfoundation/edr-linux-arm64-gnu@npm:0.11.3": - version: 0.11.3 - resolution: "@nomicfoundation/edr-linux-arm64-gnu@npm:0.11.3" - checksum: 10/b89fdd171c9dd37e84e22e28e1a52b32707693c311c4207115d7efb7fc98ebc21094ac65e8f0f8f2436b23cc89dadf69839e5836df0ef6b8c0d78799b9430bca - languageName: node - linkType: hard - -"@nomicfoundation/edr-linux-arm64-musl@npm:0.11.3": - version: 0.11.3 - resolution: "@nomicfoundation/edr-linux-arm64-musl@npm:0.11.3" - checksum: 10/3135e7887c34c4eb58eb32fd04858d8294971da814e10a2b3ede4eaabb2f4b117616d780d4c86a0201d50601f00707704d935fc1f62aa8ba22698e7e14551a63 - languageName: node - linkType: hard - -"@nomicfoundation/edr-linux-x64-gnu@npm:0.11.3": - version: 0.11.3 - resolution: "@nomicfoundation/edr-linux-x64-gnu@npm:0.11.3" - checksum: 10/88c89467277cee59a5130b09f29d01a618b38b03456555f2035af6546e7a19f4002e5874fdbe50290a7f3ea0589b33f3e14cfdd2fc3ac791b5432c0daf1b0d80 - languageName: node - linkType: hard - -"@nomicfoundation/edr-linux-x64-musl@npm:0.11.3": - version: 0.11.3 - resolution: "@nomicfoundation/edr-linux-x64-musl@npm:0.11.3" - checksum: 10/8bcdf0812cfb049bf233fcd6c4f98d63e652ff29386ed40ff1ebfc42767c817c41ca8b26db1eb26fe9839648284747c5614b2a3cc5a7f1df0de7c9a37a8bad06 - languageName: node - linkType: hard - -"@nomicfoundation/edr-win32-x64-msvc@npm:0.11.3": - version: 0.11.3 - resolution: "@nomicfoundation/edr-win32-x64-msvc@npm:0.11.3" - checksum: 10/000ee9ab48fe93d0fc0cb61d06fee51c0b9894c24f068deea117f933bc44ed108e8dbe13b54a6f88287bd609206b353a71a0f81ce6d1e81950922c1a85341a91 - languageName: node - linkType: hard - -"@nomicfoundation/edr@npm:^0.11.3": - version: 0.11.3 - resolution: "@nomicfoundation/edr@npm:0.11.3" - dependencies: - "@nomicfoundation/edr-darwin-arm64": "npm:0.11.3" - "@nomicfoundation/edr-darwin-x64": "npm:0.11.3" - "@nomicfoundation/edr-linux-arm64-gnu": "npm:0.11.3" - "@nomicfoundation/edr-linux-arm64-musl": "npm:0.11.3" - "@nomicfoundation/edr-linux-x64-gnu": "npm:0.11.3" - "@nomicfoundation/edr-linux-x64-musl": "npm:0.11.3" - "@nomicfoundation/edr-win32-x64-msvc": "npm:0.11.3" - checksum: 10/e1b79c91342c5c27c3e29332852539dcee46e2b55d98e31bc959e1938393347c62ace92475ab9002ead67c792913451fde89cbc93fc4eeeb0c6dc004b440550e - languageName: node - linkType: hard - -"@nomicfoundation/hardhat-chai-matchers@npm:^2.1.0": - version: 2.1.0 - resolution: "@nomicfoundation/hardhat-chai-matchers@npm:2.1.0" - dependencies: - "@types/chai-as-promised": "npm:^7.1.3" - chai-as-promised: "npm:^7.1.1" - deep-eql: "npm:^4.0.1" - ordinal: "npm:^1.0.3" - peerDependencies: - "@nomicfoundation/hardhat-ethers": ^3.1.0 - chai: ^4.2.0 - ethers: ^6.14.0 - hardhat: ^2.26.0 - checksum: 10/5c4235c3cd89b7cfa15643a6ae2053f765d4df8a5188da46251da8dd42bc7775dae2dbc221efacaf75b5840779bb86f82af98a5589fefafd9215ddd474adc260 - languageName: node - linkType: hard - -"@nomicfoundation/hardhat-ethers@npm:^3.1.0": - version: 3.1.0 - resolution: "@nomicfoundation/hardhat-ethers@npm:3.1.0" - dependencies: - debug: "npm:^4.1.1" - lodash.isequal: "npm:^4.5.0" - peerDependencies: - ethers: ^6.14.0 - hardhat: ^2.26.0 - checksum: 10/f5eff398b94b89d1f12b5294a9dbf261f6f0b51815abcae921e37ec76d513d988da709cc2f839fcae2f404da4c476cfdc70c92dea19417db6a81b753de4f8acf - languageName: node - linkType: hard - -"@nomicfoundation/slang@npm:^0.18.3": - version: 0.18.3 - resolution: "@nomicfoundation/slang@npm:0.18.3" - dependencies: - "@bytecodealliance/preview2-shim": "npm:0.17.0" - checksum: 10/1dcf687e4719844bffc688d13d15c0db3218ab05983d6b53777a3172c7df157c105171e802fe7812d9fd2bdb4dcd8d7287367c851eed4dfd76621e799c14574f - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-freebsd-x64@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-freebsd-x64@npm:0.1.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.1.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.1" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.1" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.1" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-win32-arm64-msvc@npm:0.1.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-win32-ia32-msvc@npm:0.1.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.1.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer@npm:^0.1.0": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer@npm:0.1.1" - dependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-darwin-x64": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-freebsd-x64": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "npm:0.1.1" - dependenciesMeta: - "@nomicfoundation/solidity-analyzer-darwin-arm64": - optional: true - "@nomicfoundation/solidity-analyzer-darwin-x64": - optional: true - "@nomicfoundation/solidity-analyzer-freebsd-x64": - optional: true - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": - optional: true - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": - optional: true - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": - optional: true - "@nomicfoundation/solidity-analyzer-linux-x64-musl": - optional: true - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": - optional: true - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": - optional: true - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": - optional: true - checksum: 10/a3b3b557f911791b26a352d4e11abf5cbac427de33fda7d70fda043f1994a7f63f542c1752e6415a82c5452625470ba4fbf040e7d87dddd1aa3366e79b3dc2c6 - languageName: node - linkType: hard - -"@nomiclabs/hardhat-solhint@npm:^4.1.0": - version: 4.1.0 - resolution: "@nomiclabs/hardhat-solhint@npm:4.1.0" - dependencies: - solhint: "npm:~5.0.2" - peerDependencies: - hardhat: ^2.26.0 - checksum: 10/c391d3ed2d9918ffef1ce4bf7dcca9ce762b2ec63a005fc21e52cd4807b907498171a93c0328434908f78d2be1d125adce1249fe91e3f39abe79d85579d23fa8 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/fs@npm:3.1.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10/f3a7ab3a31de65e42aeb6ed03ed035ef123d2de7af4deb9d4a003d27acc8618b57d9fb9d259fe6c28ca538032a028f37337264388ba27d26d37fff7dde22476e - languageName: node - linkType: hard - -"@oclif/core@npm:4.2.6": - version: 4.2.6 - resolution: "@oclif/core@npm:4.2.6" - dependencies: - ansi-escapes: "npm:^4.3.2" - ansis: "npm:^3.10.0" - clean-stack: "npm:^3.0.1" - cli-spinners: "npm:^2.9.2" - debug: "npm:^4.4.0" - ejs: "npm:^3.1.10" - get-package-type: "npm:^0.1.0" - globby: "npm:^11.1.0" - indent-string: "npm:^4.0.0" - is-wsl: "npm:^2.2.0" - lilconfig: "npm:^3.1.3" - minimatch: "npm:^9.0.5" - semver: "npm:^7.6.3" - string-width: "npm:^4.2.3" - supports-color: "npm:^8" - widest-line: "npm:^3.1.0" - wordwrap: "npm:^1.0.0" - wrap-ansi: "npm:^7.0.0" - checksum: 10/f9a76db5ab2d997cfa15161c691005c81f6308fd729f9d9102018946e2244aaa2a9eb99b3e63247ee7579d835477167fa685fec59210bab68be7d4e1382102a0 - languageName: node - linkType: hard - -"@oclif/core@npm:^4": - version: 4.2.4 - resolution: "@oclif/core@npm:4.2.4" - dependencies: - ansi-escapes: "npm:^4.3.2" - ansis: "npm:^3.9.0" - clean-stack: "npm:^3.0.1" - cli-spinners: "npm:^2.9.2" - debug: "npm:^4.4.0" - ejs: "npm:^3.1.10" - get-package-type: "npm:^0.1.0" - globby: "npm:^11.1.0" - indent-string: "npm:^4.0.0" - is-wsl: "npm:^2.2.0" - lilconfig: "npm:^3.1.3" - minimatch: "npm:^9.0.5" - semver: "npm:^7.6.3" - string-width: "npm:^4.2.3" - supports-color: "npm:^8" - widest-line: "npm:^3.1.0" - wordwrap: "npm:^1.0.0" - wrap-ansi: "npm:^7.0.0" - checksum: 10/0d155fc982b45824768e723b540d4d4037135edf9b2532a5b176d3cc1bb5209ad1829bf3269ac83c92055c4623277ffc6ecd9e0eb38b8bd571ec63f14cd31b67 - languageName: node - linkType: hard - -"@oclif/plugin-autocomplete@npm:^3.2.11": - version: 3.2.18 - resolution: "@oclif/plugin-autocomplete@npm:3.2.18" - dependencies: - "@oclif/core": "npm:^4" - ansis: "npm:^3.5.2" - debug: "npm:^4.4.0" - ejs: "npm:^3.1.10" - checksum: 10/a30d6471af46ce11d35452263b320d55ef359f180059bad6ad71f1dc2c4f38f7e4957a286e479b6fb196018bb49b2c9e1c0f031ac171505e9a555919fc6458a4 - languageName: node - linkType: hard - -"@oclif/plugin-not-found@npm:^3.2.29": - version: 3.2.38 - resolution: "@oclif/plugin-not-found@npm:3.2.38" - dependencies: - "@inquirer/prompts": "npm:^7.2.3" - "@oclif/core": "npm:^4" - ansis: "npm:^3.8.1" - fast-levenshtein: "npm:^3.0.0" - checksum: 10/81bbfdb46ed102f43122e46f3b503bf9f7b55b1401d3b4e1fd4c74744d6f97589fd7b98b169f794e94166f5c19cb68b8e4b8ef46b7575e96bb9a5e03f1429be9 - languageName: node - linkType: hard - -"@oclif/plugin-warn-if-update-available@npm:^3.1.24": - version: 3.1.31 - resolution: "@oclif/plugin-warn-if-update-available@npm:3.1.31" - dependencies: - "@oclif/core": "npm:^4" - ansis: "npm:^3.5.2" - debug: "npm:^4.4.0" - http-call: "npm:^5.2.2" - lodash: "npm:^4.17.21" - registry-auth-token: "npm:^5.0.3" - checksum: 10/e28929afeeff7af6ff85d405a583df311d251f82991e4e77e55ebe92c3c807dc40d5c2b5afd5b30c3b46ef46662651e7a1e9920f21e39f8b070e533318ca33fd - languageName: node - linkType: hard - -"@offchainlabs/upgrade-executor@npm:1.1.0-beta.0": - version: 1.1.0-beta.0 - resolution: "@offchainlabs/upgrade-executor@npm:1.1.0-beta.0" - dependencies: - "@openzeppelin/contracts": "npm:4.7.3" - "@openzeppelin/contracts-upgradeable": "npm:4.7.3" - checksum: 10/a8cd0cc24103cc42021c452220005efde535ba3596ec2ba5eb6dc299d1f3291c38a3d859621d7983bd7c43c80606d6e7d906e1081a1e499455ddea7ba64ab355 - languageName: node - linkType: hard - -"@openzeppelin/contracts-upgradeable@npm:4.9.6": - version: 4.9.6 - resolution: "@openzeppelin/contracts-upgradeable@npm:4.9.6" - checksum: 10/af9057147f13b6f0e13ca69581777f615f2cce8c6c274ec00fbea906a9095cd9ca1fb70e2c1282122a9f522fd639641c180bf1ad79bb2722494aac5ae9e565bc - languageName: node - linkType: hard - -"@openzeppelin/contracts@npm:4.9.6": - version: 4.9.6 - resolution: "@openzeppelin/contracts@npm:4.9.6" - checksum: 10/71f45ad42e68c0559be4ba502115462a01c76fc805c08d3005c10b5550a093f1a2b00b2d7e9d6d1f331e147c50fd4ad832f71c4470ec5b34f5a2d0751cd19a47 - languageName: node - linkType: hard - -"@openzeppelin/contracts@npm:^5.4.0": - version: 5.4.0 - resolution: "@openzeppelin/contracts@npm:5.4.0" - checksum: 10/4f7f926ebd98279ba8223cae5d2cd38e0806e60e3e3a615c9d739ffab870ffab7a1e85f47092faa123c0f26d1699ca15252adea8bcdcaf360b21781acc93b218 - languageName: node - linkType: hard - -"@openzeppelin/upgrades-core@npm:^1.44.1": - version: 1.44.1 - resolution: "@openzeppelin/upgrades-core@npm:1.44.1" - dependencies: - "@nomicfoundation/slang": "npm:^0.18.3" - bignumber.js: "npm:^9.1.2" - cbor: "npm:^10.0.0" - chalk: "npm:^4.1.0" - compare-versions: "npm:^6.0.0" - debug: "npm:^4.1.1" - ethereumjs-util: "npm:^7.0.3" - minimatch: "npm:^9.0.5" - minimist: "npm:^1.2.7" - proper-lockfile: "npm:^4.1.1" - solidity-ast: "npm:^0.4.60" - bin: - openzeppelin-upgrades-core: dist/cli/cli.js - checksum: 10/2fb67ab24731aadc3e545101c5a81fa04977610d38ae42a5b22257a3179acfae4e0fb0f83864a6aee6ac8d90a34988a6ad1b41d702c4b47100c209ab5525ab66 - languageName: node - linkType: hard - -"@parcel/watcher-android-arm64@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-android-arm64@npm:2.3.0" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@parcel/watcher-darwin-arm64@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-darwin-arm64@npm:2.3.0" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@parcel/watcher-darwin-x64@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-darwin-x64@npm:2.3.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@parcel/watcher-freebsd-x64@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-freebsd-x64@npm:2.3.0" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@parcel/watcher-linux-arm-glibc@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-linux-arm-glibc@npm:2.3.0" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@parcel/watcher-linux-arm64-glibc@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.3.0" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@parcel/watcher-linux-arm64-musl@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-linux-arm64-musl@npm:2.3.0" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@parcel/watcher-linux-x64-glibc@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-linux-x64-glibc@npm:2.3.0" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@parcel/watcher-linux-x64-musl@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-linux-x64-musl@npm:2.3.0" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@parcel/watcher-wasm@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-wasm@npm:2.3.0" - dependencies: - is-glob: "npm:^4.0.3" - micromatch: "npm:^4.0.5" - napi-wasm: "npm:^1.1.0" - checksum: 10/978dc4cfb9a875911ef3de545a43fdef97e643057a558e6091b535f59df02fb823e7ed74c2d27964a13dd6918bc429a63b147e6ea4648f27d62457427c754991 - languageName: node - linkType: hard - -"@parcel/watcher-win32-arm64@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-win32-arm64@npm:2.3.0" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@parcel/watcher-win32-ia32@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-win32-ia32@npm:2.3.0" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@parcel/watcher-win32-x64@npm:2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher-win32-x64@npm:2.3.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@parcel/watcher@npm:^2.3.0": - version: 2.3.0 - resolution: "@parcel/watcher@npm:2.3.0" - dependencies: - "@parcel/watcher-android-arm64": "npm:2.3.0" - "@parcel/watcher-darwin-arm64": "npm:2.3.0" - "@parcel/watcher-darwin-x64": "npm:2.3.0" - "@parcel/watcher-freebsd-x64": "npm:2.3.0" - "@parcel/watcher-linux-arm-glibc": "npm:2.3.0" - "@parcel/watcher-linux-arm64-glibc": "npm:2.3.0" - "@parcel/watcher-linux-arm64-musl": "npm:2.3.0" - "@parcel/watcher-linux-x64-glibc": "npm:2.3.0" - "@parcel/watcher-linux-x64-musl": "npm:2.3.0" - "@parcel/watcher-win32-arm64": "npm:2.3.0" - "@parcel/watcher-win32-ia32": "npm:2.3.0" - "@parcel/watcher-win32-x64": "npm:2.3.0" - detect-libc: "npm:^1.0.3" - is-glob: "npm:^4.0.3" - micromatch: "npm:^4.0.5" - node-addon-api: "npm:^7.0.0" - node-gyp: "npm:latest" - dependenciesMeta: - "@parcel/watcher-android-arm64": - optional: true - "@parcel/watcher-darwin-arm64": - optional: true - "@parcel/watcher-darwin-x64": - optional: true - "@parcel/watcher-freebsd-x64": - optional: true - "@parcel/watcher-linux-arm-glibc": - optional: true - "@parcel/watcher-linux-arm64-glibc": - optional: true - "@parcel/watcher-linux-arm64-musl": - optional: true - "@parcel/watcher-linux-x64-glibc": - optional: true - "@parcel/watcher-linux-x64-musl": - optional: true - "@parcel/watcher-win32-arm64": - optional: true - "@parcel/watcher-win32-ia32": - optional: true - "@parcel/watcher-win32-x64": - optional: true - checksum: 10/5ba2be3337153f0c26b4a0b3a4f78ee728a96c37855c1cd39a573ac60b68e3116e657404c61b121b3f77f5227ab3d2c94679a816e42e90d1a476d7c783225368 - languageName: node - linkType: hard - -"@paulmillr/qr@npm:^0.2.1": - version: 0.2.1 - resolution: "@paulmillr/qr@npm:0.2.1" - checksum: 10/69ee9002124496c4c7ed31f376c6f4a8fa1e86d71a14b420b22133baeab416af1349ae173d93e73a9627c2d9813d0a4bc84a64efa4e125436909f7d6d1d39785 - languageName: node - linkType: hard - -"@pinax/graph-networks-registry@npm:^0.6.5": - version: 0.6.7 - resolution: "@pinax/graph-networks-registry@npm:0.6.7" - checksum: 10/39f77e482e93ad6bb3aaa23dad0a113fa3f4e9f2b6b9e475866bceddbc824a97a1499af0519113bb5b4a4c5ea2854e05c90d119ded31a343d06a8d4d428037f3 - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10/115e8ceeec6bc69dff2048b35c0ab4f8bbee12d8bb6c1f4af758604586d802b6e669dcb02dda61d078de42c2b4ddce41b3d9e726d7daa6b4b850f4adbf7333ff - languageName: node - linkType: hard - -"@pkgr/core@npm:^0.1.0": - version: 0.1.1 - resolution: "@pkgr/core@npm:0.1.1" - checksum: 10/6f25fd2e3008f259c77207ac9915b02f1628420403b2630c92a07ff963129238c9262afc9e84344c7a23b5cc1f3965e2cd17e3798219f5fd78a63d144d3cceba - languageName: node - linkType: hard - -"@pmmmwh/react-refresh-webpack-plugin@npm:^0.5.3": - version: 0.5.10 - resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.10" - dependencies: - ansi-html-community: "npm:^0.0.8" - common-path-prefix: "npm:^3.0.0" - core-js-pure: "npm:^3.23.3" - error-stack-parser: "npm:^2.0.6" - find-up: "npm:^5.0.0" - html-entities: "npm:^2.1.0" - loader-utils: "npm:^2.0.4" - schema-utils: "npm:^3.0.0" - source-map: "npm:^0.7.3" - peerDependencies: - "@types/webpack": 4.x || 5.x - react-refresh: ">=0.10.0 <1.0.0" - sockjs-client: ^1.4.0 - type-fest: ">=0.17.0 <4.0.0" - webpack: ">=4.43.0 <6.0.0" - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - "@types/webpack": - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - checksum: 10/e0590fba5f9cdb52232af9e8e5c13187d14d8d2392a530c76db51155b0995833cae73252409f4ab8ea6edb69c211846ded7bfe03bb501af21238ae8b41caf366 - languageName: node - linkType: hard - -"@pnpm/config.env-replace@npm:^1.1.0": - version: 1.1.0 - resolution: "@pnpm/config.env-replace@npm:1.1.0" - checksum: 10/fabe35cede1b72ad12877b8bed32f7c2fcd89e94408792c4d69009b886671db7988a2132bc18b7157489d2d0fd4266a06c9583be3d2e10c847bf06687420cb2a - languageName: node - linkType: hard - -"@pnpm/network.ca-file@npm:^1.0.1": - version: 1.0.2 - resolution: "@pnpm/network.ca-file@npm:1.0.2" - dependencies: - graceful-fs: "npm:4.2.10" - checksum: 10/d8d0884646500576bd5390464d13db1bb9a62e32a1069293e5bddb2ad8354b354b7e2d2a35e12850025651e795e6a80ce9e601c66312504667b7e3ee7b52becc - languageName: node - linkType: hard - -"@pnpm/npm-conf@npm:^2.1.0": - version: 2.3.1 - resolution: "@pnpm/npm-conf@npm:2.3.1" - dependencies: - "@pnpm/config.env-replace": "npm:^1.1.0" - "@pnpm/network.ca-file": "npm:^1.0.1" - config-chain: "npm:^1.1.11" - checksum: 10/44fbb0b166eee3e3631ef0e92b1bed6489aa6975e3e722c16577cc0181b81374f5ae90c6e4da183c8160f996e6b4863325525b00542f42d1b757b51ef62bc4e7 - languageName: node - linkType: hard - -"@polka/url@npm:^1.0.0-next.24": - version: 1.0.0-next.24 - resolution: "@polka/url@npm:1.0.0-next.24" - checksum: 10/00baec4458ac86ca27edf7ce807ccfad97cd1d4b67bdedaf3401a9e755757588f3331e891290d1deea52d88df2bf2387caf8d94a6835b614d5b37b638a688273 - languageName: node - linkType: hard - -"@popperjs/core@npm:^2.11.8": - version: 2.11.8 - resolution: "@popperjs/core@npm:2.11.8" - checksum: 10/ddd16090cde777aaf102940f05d0274602079a95ad9805bd20bc55dcc7c3a2ba1b99dd5c73e5cc2753c3d31250ca52a67d58059459d7d27debb983a9f552936c - languageName: node - linkType: hard - -"@prettier/sync@npm:^0.3.0": - version: 0.3.0 - resolution: "@prettier/sync@npm:0.3.0" - peerDependencies: - prettier: ^3.0.0 - checksum: 10/10520d2479830c18256bf2b18349a15a8964f968059f7ccaa1f6d455c133a26e6c96bd7aea7c64ef6701700e8007ad68619b16ec83391b356b5d4a741cbae504 - languageName: node - linkType: hard - -"@react-native-async-storage/async-storage@npm:^1.17.7": - version: 1.24.0 - resolution: "@react-native-async-storage/async-storage@npm:1.24.0" - dependencies: - merge-options: "npm:^3.0.4" - peerDependencies: - react-native: ^0.0.0-0 || >=0.60 <1.0 - checksum: 10/5a6b7ac8bd7a9e537a53a3f2301530c284fd885a45ce4a4e0014859bc0f7c89bee5c4b5a6b3740b8d83751561159b237474d18f32fad75ea7d56d4ddb2180d91 - languageName: node - linkType: hard - -"@reality.eth/contracts@npm:^3.2.12": - version: 3.2.12 - resolution: "@reality.eth/contracts@npm:3.2.12" - dependencies: - ethers: "npm:^5.8.0" - checksum: 10/a53e94f66e92c76de83e6eb31980e22ce6eb0fdae084cac2688a83b73d42088dae8ef373678b3cf900d1211fc4645997557b363f7bbb864f9b0d4ec83af0b7e1 - languageName: node - linkType: hard - -"@reality.eth/reality-eth-lib@npm:^3.4.14": - version: 3.4.14 - resolution: "@reality.eth/reality-eth-lib@npm:3.4.14" - dependencies: - "@reality.eth/contracts": "npm:^3.2.12" - bignumber.js: "npm:^7.2.1" - bn.js: "npm:^5.2.1" - ethereumjs-abi: "npm:^0.6.5" - html-to-text: "npm:^8.2.1" - isomorphic-dompurify: "npm:^0.23.0" - marked: "npm:^4.1.1" - sprintf-js: "npm:^1.1.1" - checksum: 10/c0ef0b358691a7219c77987d95f544bb441e171f266c1c0867a08e12017f6f0a9956ecce84f6e03edda2aafadc266c958a41b4dbd6e1f739cd7c80f8353236ff - languageName: node - linkType: hard - -"@remix-run/router@npm:1.21.0": - version: 1.21.0 - resolution: "@remix-run/router@npm:1.21.0" - checksum: 10/cf0fb69d19c1b79095ff67c59cea89086f3982a9a54c8a993818a60fc76e0ebab5a8db647c1a96a662729fad8e806ddd0a96622adf473f5a9f0b99998b2dbad4 - languageName: node - linkType: hard - -"@remix-run/router@npm:1.23.0": - version: 1.23.0 - resolution: "@remix-run/router@npm:1.23.0" - checksum: 10/0a9f02c26c150d8210b05927c43d2f57ee8b7f812c81abb76df1721c7367ef692e54f4044981e756ce13d0619fb3c6a9b1514524d69aea9b32bfaf565299a8c7 - languageName: node - linkType: hard - -"@reown/appkit-adapter-wagmi@npm:^1.7.1": - version: 1.7.1 - resolution: "@reown/appkit-adapter-wagmi@npm:1.7.1" - dependencies: - "@reown/appkit": "npm:1.7.1" - "@reown/appkit-common": "npm:1.7.1" - "@reown/appkit-controllers": "npm:1.7.1" - "@reown/appkit-polyfills": "npm:1.7.1" - "@reown/appkit-scaffold-ui": "npm:1.7.1" - "@reown/appkit-utils": "npm:1.7.1" - "@reown/appkit-wallet": "npm:1.7.1" - "@wagmi/connectors": "npm:>=5.7.11" - "@walletconnect/universal-provider": "npm:2.19.1" - valtio: "npm:1.13.2" - peerDependencies: - "@wagmi/core": ">=2.16.7" - viem: ">=2.23.11" - wagmi: ">=2.14.15" - dependenciesMeta: - "@wagmi/connectors": - optional: true - checksum: 10/69f796b5c81765bec0b8b4cbf0771aca07c7479aa0c7d9ef484a73a74df4361cab7e67258186a932c17788841de6560dc02176f852cc40be26789ed6726d669a - languageName: node - linkType: hard - -"@reown/appkit-common@npm:1.7.1": - version: 1.7.1 - resolution: "@reown/appkit-common@npm:1.7.1" - dependencies: - big.js: "npm:6.2.2" - dayjs: "npm:1.11.13" - viem: "npm:>=2.23.11" - checksum: 10/d876e186d700e96b3f5c223e9313fb9e75178091905ba8c42a7acf80e19a88b6bf32ac42ec7f81ef6be998c4c83942db03b564b37728b827239fb875a0f8f8a5 - languageName: node - linkType: hard - -"@reown/appkit-controllers@npm:1.7.1": - version: 1.7.1 - resolution: "@reown/appkit-controllers@npm:1.7.1" - dependencies: - "@reown/appkit-common": "npm:1.7.1" - "@reown/appkit-wallet": "npm:1.7.1" - "@walletconnect/universal-provider": "npm:2.19.1" - valtio: "npm:1.13.2" - viem: "npm:>=2.23.11" - checksum: 10/e9bff19f3f1c11a8a195df3387dcfe1a10114ffa8c6404196364710fc9c2fab6dcf3293da0ea1271c7bb6023eb1ba2ebb162a0d4b0952b56922b2ce2bec307d0 - languageName: node - linkType: hard - -"@reown/appkit-polyfills@npm:1.7.1": - version: 1.7.1 - resolution: "@reown/appkit-polyfills@npm:1.7.1" - dependencies: - buffer: "npm:6.0.3" - checksum: 10/38207395132fb23e7386dac4f8a4487478599117bc08e4fad7edadf2a9fb4884ee95ede298b6af021d30d81eaf83a3e152d9ed2500f33c0ce64ff336d6fdb5fc - languageName: node - linkType: hard - -"@reown/appkit-scaffold-ui@npm:1.7.1": - version: 1.7.1 - resolution: "@reown/appkit-scaffold-ui@npm:1.7.1" - dependencies: - "@reown/appkit-common": "npm:1.7.1" - "@reown/appkit-controllers": "npm:1.7.1" - "@reown/appkit-ui": "npm:1.7.1" - "@reown/appkit-utils": "npm:1.7.1" - "@reown/appkit-wallet": "npm:1.7.1" - lit: "npm:3.1.0" - checksum: 10/9f924e227c71e2d616b05d76c9547b1a655df78f0c52a0582c997d2a8009f408ab2db4581b4f8019835efa6ebbcb54a4bff41631f55c91af777ca06bbb677b6f - languageName: node - linkType: hard - -"@reown/appkit-ui@npm:1.7.1": - version: 1.7.1 - resolution: "@reown/appkit-ui@npm:1.7.1" - dependencies: - "@reown/appkit-common": "npm:1.7.1" - "@reown/appkit-controllers": "npm:1.7.1" - "@reown/appkit-wallet": "npm:1.7.1" - lit: "npm:3.1.0" - qrcode: "npm:1.5.3" - checksum: 10/a687b3e1f2e18f78673fa495e6e9f4062975af58879894cbf473bc02102377b84378d0d4975bd74f2051d5bd1faf1a01302b63f24e064bd4491564bf361cce67 - languageName: node - linkType: hard - -"@reown/appkit-utils@npm:1.7.1": - version: 1.7.1 - resolution: "@reown/appkit-utils@npm:1.7.1" - dependencies: - "@reown/appkit-common": "npm:1.7.1" - "@reown/appkit-controllers": "npm:1.7.1" - "@reown/appkit-polyfills": "npm:1.7.1" - "@reown/appkit-wallet": "npm:1.7.1" - "@walletconnect/logger": "npm:2.1.2" - "@walletconnect/universal-provider": "npm:2.19.1" - valtio: "npm:1.13.2" - viem: "npm:>=2.23.11" - peerDependencies: - valtio: 1.13.2 - checksum: 10/81467c2b217e1231b84a77b0acdebadeb0d24cd8933a4267cf25e0502d2aa4b3d9df4360ba60fff9cb466e53917a5cdc2f0e62d3d5c9ea74d8c720215746176e - languageName: node - linkType: hard - -"@reown/appkit-wallet@npm:1.7.1": - version: 1.7.1 - resolution: "@reown/appkit-wallet@npm:1.7.1" - dependencies: - "@reown/appkit-common": "npm:1.7.1" - "@reown/appkit-polyfills": "npm:1.7.1" - "@walletconnect/logger": "npm:2.1.2" - zod: "npm:3.22.4" - checksum: 10/d0a8d0d963f2e009c62046ce5ed5f2088382e0e47a87e9e1c108830abef0497e7f62e76c1f9728a3d8d23baf2b61a83a4191e67c70c5daf3c04c15b8bd9b2998 - languageName: node - linkType: hard - -"@reown/appkit@npm:1.7.1, @reown/appkit@npm:^1.7.1": - version: 1.7.1 - resolution: "@reown/appkit@npm:1.7.1" - dependencies: - "@reown/appkit-common": "npm:1.7.1" - "@reown/appkit-controllers": "npm:1.7.1" - "@reown/appkit-polyfills": "npm:1.7.1" - "@reown/appkit-scaffold-ui": "npm:1.7.1" - "@reown/appkit-ui": "npm:1.7.1" - "@reown/appkit-utils": "npm:1.7.1" - "@reown/appkit-wallet": "npm:1.7.1" - "@walletconnect/types": "npm:2.19.1" - "@walletconnect/universal-provider": "npm:2.19.1" - bs58: "npm:6.0.0" - valtio: "npm:1.13.2" - viem: "npm:>=2.23.11" - checksum: 10/941d2da7ab28fb1de3ba98665d5e7f290186fd9a46439952383202c2f4b441c774aca323e59488b2a8c9bc6fa4bc5f648bd0c2dff7dacf4594bf9cd36038796f - languageName: node - linkType: hard - -"@repeaterjs/repeater@npm:3.0.4, @repeaterjs/repeater@npm:^3.0.4": - version: 3.0.4 - resolution: "@repeaterjs/repeater@npm:3.0.4" - checksum: 10/8ce723ca07c6bf42b8de7bf7e3380eab2efc083cadf1f814d188c6c813af1461dfe46051a57bb54116113c0338473df64d6c17314ceeb7f4323437fff54da872 - languageName: node - linkType: hard - -"@replit/codemirror-indentation-markers@npm:^6.5.3": - version: 6.5.3 - resolution: "@replit/codemirror-indentation-markers@npm:6.5.3" - peerDependencies: - "@codemirror/language": ^6.0.0 - "@codemirror/state": ^6.0.0 - "@codemirror/view": ^6.0.0 - checksum: 10/9292734a228038805bdf72ed2c6cdd70e7b7f87090d6d07bb64af4ac986ea277349409f4d52c2863128d4b481ea8a094c2486d7d677875d47336a52cb15fc4ed - languageName: node - linkType: hard - -"@rescript/std@npm:9.0.0": - version: 9.0.0 - resolution: "@rescript/std@npm:9.0.0" - checksum: 10/3f68fdc7daad61aba8369055611800347b9be3a621ed7d465abcd42600515ca78a0decff51f2d3d2ae9d31f31c58ae3bbb41e3d5fcd42e135f9b7ce0f8de8de7 - languageName: node - linkType: hard - -"@rollup/plugin-babel@npm:^5.2.0": - version: 5.3.1 - resolution: "@rollup/plugin-babel@npm:5.3.1" - dependencies: - "@babel/helper-module-imports": "npm:^7.10.4" - "@rollup/pluginutils": "npm:^3.1.0" - peerDependencies: - "@babel/core": ^7.0.0 - "@types/babel__core": ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - "@types/babel__core": - optional: true - checksum: 10/eb3ee5fedd86fa39ad70c2f8e05f14f8b185261b9f63699a01ac7eae664167f2e5cf87377434bf6aadad7eaf2b13c955ac26f8332a02f8d6a46b3c91990a9fbc - languageName: node - linkType: hard - -"@rollup/plugin-inject@npm:^5.0.5": - version: 5.0.5 - resolution: "@rollup/plugin-inject@npm:5.0.5" - dependencies: - "@rollup/pluginutils": "npm:^5.0.1" - estree-walker: "npm:^2.0.2" - magic-string: "npm:^0.30.3" - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - checksum: 10/1d0e68dff0a8785398a1b6a7dac0dc0a7f2ded22319c0b4c411053f34cbe237ca897d1fc97e5150fddbc3486480f21cbeeb69f0ae7f44ab1ae7307c164c7e704 - languageName: node - linkType: hard - -"@rollup/plugin-node-resolve@npm:^11.2.1": - version: 11.2.1 - resolution: "@rollup/plugin-node-resolve@npm:11.2.1" - dependencies: - "@rollup/pluginutils": "npm:^3.1.0" - "@types/resolve": "npm:1.17.1" - builtin-modules: "npm:^3.1.0" - deepmerge: "npm:^4.2.2" - is-module: "npm:^1.0.0" - resolve: "npm:^1.19.0" - peerDependencies: - rollup: ^1.20.0||^2.0.0 - checksum: 10/8007f6a01d709da1078df19bb5ecb1339f43042786a68d98645e0a4c1765064d1500a1b86b65e12de6ae35d9b1ae693e22e63b3ebb69a627ce81172ea21cc228 - languageName: node - linkType: hard - -"@rollup/plugin-replace@npm:^2.4.1": - version: 2.4.2 - resolution: "@rollup/plugin-replace@npm:2.4.2" - dependencies: - "@rollup/pluginutils": "npm:^3.1.0" - magic-string: "npm:^0.25.7" - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - checksum: 10/fc4844c4cd7286013d4ccb51a7a2c86135024e3940797af1af1f24357622c8e874d9a17acfa4be9d2546542a87b68e158cc8d2c1f2a7926d17b9433eea00f6bf - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^3.1.0": - version: 3.1.0 - resolution: "@rollup/pluginutils@npm:3.1.0" - dependencies: - "@types/estree": "npm:0.0.39" - estree-walker: "npm:^1.0.1" - picomatch: "npm:^2.2.2" - peerDependencies: - rollup: ^1.20.0||^2.0.0 - checksum: 10/3b69f02893eea42455fb97b81f612ac6bfadf94ac73bebd481ea13e90a693eef52c163210a095b12e574a25603af5e55f86a020889019167f331aa8dd3ff30e0 - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^5.0.1, @rollup/pluginutils@npm:^5.1.0, @rollup/pluginutils@npm:^5.1.3": - version: 5.1.3 - resolution: "@rollup/pluginutils@npm:5.1.3" - dependencies: - "@types/estree": "npm:^1.0.0" - estree-walker: "npm:^2.0.2" - picomatch: "npm:^4.0.2" - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - checksum: 10/da24956c4f7ec0aed63a2dd6c6dd64d8ad90155918056e69adda6fbb7b96c607300079805bc63f2e64e33ba256802367301a578d020a22262f408bde98ca3643 - languageName: node - linkType: hard - -"@rollup/rollup-android-arm-eabi@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.24.0" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@rollup/rollup-android-arm64@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-android-arm64@npm:4.24.0" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-arm64@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.24.0" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-x64@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.24.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-musleabihf@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.24.0" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-gnu@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.24.0" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-musl@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.24.0" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-gnu@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.24.0" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-s390x-gnu@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.24.0" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-gnu@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.24.0" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-musl@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.24.0" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-win32-arm64-msvc@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.24.0" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-ia32-msvc@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.24.0" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-msvc@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.24.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@rtsao/scc@npm:^1.1.0": - version: 1.1.0 - resolution: "@rtsao/scc@npm:1.1.0" - checksum: 10/17d04adf404e04c1e61391ed97bca5117d4c2767a76ae3e879390d6dec7b317fcae68afbf9e98badee075d0b64fa60f287729c4942021b4d19cd01db77385c01 - languageName: node - linkType: hard - -"@rushstack/eslint-patch@npm:^1.1.0, @rushstack/eslint-patch@npm:^1.10.3": - version: 1.10.4 - resolution: "@rushstack/eslint-patch@npm:1.10.4" - checksum: 10/fa14a091cc800e1fac75c03112db03eaebbdc2de6e1532ed7702e106c3ce0cbf9b896794d885d455b225e9cc696a5e10c7bfb803d00774461d691e7a39915fc7 - languageName: node - linkType: hard - -"@rushstack/node-core-library@npm:5.10.0": - version: 5.10.0 - resolution: "@rushstack/node-core-library@npm:5.10.0" - dependencies: - ajv: "npm:~8.13.0" - ajv-draft-04: "npm:~1.0.0" - ajv-formats: "npm:~3.0.1" - fs-extra: "npm:~7.0.1" - import-lazy: "npm:~4.0.0" - jju: "npm:~1.4.0" - resolve: "npm:~1.22.1" - semver: "npm:~7.5.4" - peerDependencies: - "@types/node": "*" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/4cfe66726ad07647177a86831bcdf54cfeb5d2b8a940dac9c5df886c8e4acd7dd1fccb5236660320c59043d42dcef3f84f2ee6789eb0a07c2d6302c70dc217c9 - languageName: node - linkType: hard - -"@rushstack/rig-package@npm:0.5.3": - version: 0.5.3 - resolution: "@rushstack/rig-package@npm:0.5.3" - dependencies: - resolve: "npm:~1.22.1" - strip-json-comments: "npm:~3.1.1" - checksum: 10/b58a3925a41d7a0e79f4fde7c400a379683cc7b0073c447aba6d36231529a37e7d2f4559f459be785ad862ecb01b618b2d0ff60661046e5223437356155ccb14 - languageName: node - linkType: hard - -"@rushstack/terminal@npm:0.14.3": - version: 0.14.3 - resolution: "@rushstack/terminal@npm:0.14.3" - dependencies: - "@rushstack/node-core-library": "npm:5.10.0" - supports-color: "npm:~8.1.1" - peerDependencies: - "@types/node": "*" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/80c603f984293488cc988d17baa95e6d4ce1c70ff44b2ed7196aa156b4480f5a63213026709668db062a94564b59c006eff21a0ef3b74f6633b648624e4a0f89 - languageName: node - linkType: hard - -"@rushstack/ts-command-line@npm:4.23.1": - version: 4.23.1 - resolution: "@rushstack/ts-command-line@npm:4.23.1" - dependencies: - "@rushstack/terminal": "npm:0.14.3" - "@types/argparse": "npm:1.0.38" - argparse: "npm:~1.0.9" - string-argv: "npm:~0.3.1" - checksum: 10/4cfa4ede60b37299c93efec3be3770adf95680aeae9d0c28fcc9fb4f04dbf63958e9a37c1cf947b47cff25bbc3596a65f0a64c094e544a60e47c026d6b9a8c70 - languageName: node - linkType: hard - -"@safe-global/safe-apps-provider@npm:0.18.5": - version: 0.18.5 - resolution: "@safe-global/safe-apps-provider@npm:0.18.5" - dependencies: - "@safe-global/safe-apps-sdk": "npm:^9.1.0" - events: "npm:^3.3.0" - checksum: 10/0dcebbaf2564686629e705c62e3a679fb2b204a7c1a4970e76b1ce9bbc8444c2927083aaab73bd51ee16e29b8f33df6f919658a2c199aa2415b12ba957cd9310 - languageName: node - linkType: hard - -"@safe-global/safe-apps-sdk@npm:9.1.0, @safe-global/safe-apps-sdk@npm:^9.1.0": - version: 9.1.0 - resolution: "@safe-global/safe-apps-sdk@npm:9.1.0" - dependencies: - "@safe-global/safe-gateway-typescript-sdk": "npm:^3.5.3" - viem: "npm:^2.1.1" - checksum: 10/b81e1a554509fc41f5b8ec3bcccaf477fd55824010774699dd2c00dee8431cfd351bf13893ff6acb1450028ce4de31a1316548a0e77a66d801ff9e0b4e08b9ff - languageName: node - linkType: hard - -"@safe-global/safe-gateway-typescript-sdk@npm:^3.5.3": - version: 3.7.3 - resolution: "@safe-global/safe-gateway-typescript-sdk@npm:3.7.3" - dependencies: - cross-fetch: "npm:^3.1.5" - checksum: 10/3bc0e188918fc5fc04ab43d09559a4526df9867d7d64b4d4865a5acb0aa3dc8796839dfeb49839913cd19a42bd9be4dd0e68ddd116cdf37f6330218de903ed83 - languageName: node - linkType: hard - -"@scroll-tech/contracts@npm:0.1.0": - version: 0.1.0 - resolution: "@scroll-tech/contracts@npm:0.1.0" - checksum: 10/7b32c4fbd7bafccb4c44f435764e9869486f0094759db24fca5021a3001ea61983a1902eff772c3d003a16470bde28859c975b3a6736264d651695dfbfc3665b - languageName: node - linkType: hard - -"@scure/base@npm:^1.1.3, @scure/base@npm:~1.1.0, @scure/base@npm:~1.1.6, @scure/base@npm:~1.1.7, @scure/base@npm:~1.1.8": - version: 1.1.9 - resolution: "@scure/base@npm:1.1.9" - checksum: 10/f0ab7f687bbcdee2a01377fe3cd808bf63977999672751295b6a92625d5322f4754a96d40f6bd579bc367aad48ecf8a4e6d0390e70296e6ded1076f52adb16bb - languageName: node - linkType: hard - -"@scure/base@npm:~1.2.2, @scure/base@npm:~1.2.4": - version: 1.2.4 - resolution: "@scure/base@npm:1.2.4" - checksum: 10/4b61679209af40143b49ce7b7570e1d9157c19df311ea6f57cd212d764b0b82222dbe3707334f08bec181caf1f047aca31aa91193c678d6548312cb3f9c82ab1 - languageName: node - linkType: hard - -"@scure/base@npm:~1.2.5": - version: 1.2.6 - resolution: "@scure/base@npm:1.2.6" - checksum: 10/c1a7bd5e0b0c8f94c36fbc220f4a67cc832b00e2d2065c7d8a404ed81ab1c94c5443def6d361a70fc382db3496e9487fb9941728f0584782b274c18a4bed4187 - languageName: node - linkType: hard - -"@scure/bip32@npm:1.1.5": - version: 1.1.5 - resolution: "@scure/bip32@npm:1.1.5" - dependencies: - "@noble/hashes": "npm:~1.2.0" - "@noble/secp256k1": "npm:~1.7.0" - "@scure/base": "npm:~1.1.0" - checksum: 10/4c83e943a66e7b212d18f47b4650ed9b1dfeb69d8bdd8b491b12ba70ca8635cda67fb1ac920d642d66c8a3c2c03303b623c1faceafe7141a6f20a7cd7f66191e - languageName: node - linkType: hard - -"@scure/bip32@npm:1.4.0": - version: 1.4.0 - resolution: "@scure/bip32@npm:1.4.0" - dependencies: - "@noble/curves": "npm:~1.4.0" - "@noble/hashes": "npm:~1.4.0" - "@scure/base": "npm:~1.1.6" - checksum: 10/6cd5062d902564d9e970597ec8b1adacb415b2eadfbb95aee1a1a0480a52eb0de4d294d3753aa8b48548064c9795ed108d348a31a8ce3fc88785377bb12c63b9 - languageName: node - linkType: hard - -"@scure/bip32@npm:1.5.0, @scure/bip32@npm:^1.5.0": - version: 1.5.0 - resolution: "@scure/bip32@npm:1.5.0" - dependencies: - "@noble/curves": "npm:~1.6.0" - "@noble/hashes": "npm:~1.5.0" - "@scure/base": "npm:~1.1.7" - checksum: 10/17e296a782e09aec18ed27e2e8bb6a76072604c40997ec49a6840f223296421612dbe6b44275f04db9acd6da6cefb0322141110f5ac9dc686eb0c44d5bd868fa - languageName: node - linkType: hard - -"@scure/bip32@npm:1.6.2": - version: 1.6.2 - resolution: "@scure/bip32@npm:1.6.2" - dependencies: - "@noble/curves": "npm:~1.8.1" - "@noble/hashes": "npm:~1.7.1" - "@scure/base": "npm:~1.2.2" - checksum: 10/474ee315a8631aa1a7d378b0521b4494e09a231519ec53d879088cb88c8ff644a89b27a02a8bf0b5a9b1c4c0417acc70636ccdb121b800c34594ae53c723f8d7 - languageName: node - linkType: hard - -"@scure/bip32@npm:1.7.0, @scure/bip32@npm:^1.7.0": - version: 1.7.0 - resolution: "@scure/bip32@npm:1.7.0" - dependencies: - "@noble/curves": "npm:~1.9.0" - "@noble/hashes": "npm:~1.8.0" - "@scure/base": "npm:~1.2.5" - checksum: 10/f90e0c23ab6a31a164856ae9cb9a8cae2886df608c74a6c0c4875095b017e30ffd92f28f73b8c52890d9a89fca86d19f6d60bb1ea7cad64c7987f92ae83509ad - languageName: node - linkType: hard - -"@scure/bip39@npm:1.1.1": - version: 1.1.1 - resolution: "@scure/bip39@npm:1.1.1" - dependencies: - "@noble/hashes": "npm:~1.2.0" - "@scure/base": "npm:~1.1.0" - checksum: 10/08908145e0890e481e3398191424961d9ebfb8913fed6e6cdfc63eb1281bd1895244d46c0e8762b0e30d8dc6f498ed296311382fecbf034253838e3a50f60ca1 - languageName: node - linkType: hard - -"@scure/bip39@npm:1.3.0": - version: 1.3.0 - resolution: "@scure/bip39@npm:1.3.0" - dependencies: - "@noble/hashes": "npm:~1.4.0" - "@scure/base": "npm:~1.1.6" - checksum: 10/7d71fd58153de22fe8cd65b525f6958a80487bc9d0fbc32c71c328aeafe41fa259f989d2f1e0fa4fdfeaf83b8fcf9310d52ed9862987e46c2f2bfb9dd8cf9fc1 - languageName: node - linkType: hard - -"@scure/bip39@npm:1.4.0, @scure/bip39@npm:^1.4.0": - version: 1.4.0 - resolution: "@scure/bip39@npm:1.4.0" - dependencies: - "@noble/hashes": "npm:~1.5.0" - "@scure/base": "npm:~1.1.8" - checksum: 10/f86e0e79768c95bc684ed6de92892b1a6f228db0f8fab836f091c0ec0f6d1e291b8c4391cfbeaa9ea83f41045613535b1940cd10e7d780a5b73db163b1e7f151 - languageName: node - linkType: hard - -"@scure/bip39@npm:1.5.4": - version: 1.5.4 - resolution: "@scure/bip39@npm:1.5.4" - dependencies: - "@noble/hashes": "npm:~1.7.1" - "@scure/base": "npm:~1.2.4" - checksum: 10/9f08b433511d7637bc48c51aa411457d5f33da5a85bd03370bf394822b0ea8c007ceb17247a3790c28237303d8fc20c4e7725765940cd47e1365a88319ad0d5c - languageName: node - linkType: hard - -"@scure/bip39@npm:1.6.0, @scure/bip39@npm:^1.6.0": - version: 1.6.0 - resolution: "@scure/bip39@npm:1.6.0" - dependencies: - "@noble/hashes": "npm:~1.8.0" - "@scure/base": "npm:~1.2.5" - checksum: 10/63e60c40fa1bda2c1b50351546fee6d7b0947cc814aa7a4209dcedd3693b5053302c8fca28292f5f50735e11c613265359acdc019127393dbab17e53489fc449 - languageName: node - linkType: hard - -"@selderee/plugin-htmlparser2@npm:^0.6.0": - version: 0.6.0 - resolution: "@selderee/plugin-htmlparser2@npm:0.6.0" - dependencies: - domhandler: "npm:^4.2.0" - selderee: "npm:^0.6.0" - checksum: 10/a4f1a5412f0fe7d61a80f0fb5ee465948321ab7b85050d4a02f77d2bda59046d4c360f36c5ff08c1eb9879438389dfa3aed44dfd7c922be0e4e0fbaada43f2d4 - languageName: node - linkType: hard - -"@sentry-internal/feedback@npm:7.120.0": - version: 7.120.0 - resolution: "@sentry-internal/feedback@npm:7.120.0" - dependencies: - "@sentry/core": "npm:7.120.0" - "@sentry/types": "npm:7.120.0" - "@sentry/utils": "npm:7.120.0" - checksum: 10/e6adb3723588bad0831eb4a5b90a9ccb3acc4a049330216ba9b21233e1dc698e5b6b03a458204ca0274cb459562bb624106f4e60d56691af09f562577cd33576 - languageName: node - linkType: hard - -"@sentry-internal/replay-canvas@npm:7.120.0": - version: 7.120.0 - resolution: "@sentry-internal/replay-canvas@npm:7.120.0" - dependencies: - "@sentry/core": "npm:7.120.0" - "@sentry/replay": "npm:7.120.0" - "@sentry/types": "npm:7.120.0" - "@sentry/utils": "npm:7.120.0" - checksum: 10/e324eb37942600666c28cb22040b4765d622e65574bf4773789045a1bcb72da8acad528cd6b4e09aabaa0c914cd0f707fbc8960861bde32883887c90102dc3f4 - languageName: node - linkType: hard - -"@sentry-internal/tracing@npm:7.120.0": - version: 7.120.0 - resolution: "@sentry-internal/tracing@npm:7.120.0" - dependencies: - "@sentry/core": "npm:7.120.0" - "@sentry/types": "npm:7.120.0" - "@sentry/utils": "npm:7.120.0" - checksum: 10/5ccefa2b3f21e1ee69e593eff599149617ded704bdd789e1963ac3c0940ba127685bc0f169a2ebcf78bfc64ce7cb32dc117b928707a3245afe0f1d681837bfc3 - languageName: node - linkType: hard - -"@sentry/browser@npm:7.120.0": - version: 7.120.0 - resolution: "@sentry/browser@npm:7.120.0" - dependencies: - "@sentry-internal/feedback": "npm:7.120.0" - "@sentry-internal/replay-canvas": "npm:7.120.0" - "@sentry-internal/tracing": "npm:7.120.0" - "@sentry/core": "npm:7.120.0" - "@sentry/integrations": "npm:7.120.0" - "@sentry/replay": "npm:7.120.0" - "@sentry/types": "npm:7.120.0" - "@sentry/utils": "npm:7.120.0" - checksum: 10/ea23eb64f77de34486414cb7dce809b4d23fd70bc7690981823fe0468b650345d21b418750f801d20981e1c72a7ad3a130111da705963842cb8e08d649483ab2 - languageName: node - linkType: hard - -"@sentry/core@npm:5.30.0": - version: 5.30.0 - resolution: "@sentry/core@npm:5.30.0" - dependencies: - "@sentry/hub": "npm:5.30.0" - "@sentry/minimal": "npm:5.30.0" - "@sentry/types": "npm:5.30.0" - "@sentry/utils": "npm:5.30.0" - tslib: "npm:^1.9.3" - checksum: 10/fef7808017cc9581e94c51fbce3ffeb6bdb62b30d94920fae143d298aed194176ac7c026923d569a33606b93a3747b877e78215a1668ed8eb44e5941527e17e0 - languageName: node - linkType: hard - -"@sentry/core@npm:7.120.0": - version: 7.120.0 - resolution: "@sentry/core@npm:7.120.0" - dependencies: - "@sentry/types": "npm:7.120.0" - "@sentry/utils": "npm:7.120.0" - checksum: 10/dbf734fffce243c4c1d187c81449b1c89c89f57b5db08d31c835d6bc784a9bbcf969c7da5bc2604908a74641b0bc482f6596e9b32d572679a5554471e3f0ed85 - languageName: node - linkType: hard - -"@sentry/hub@npm:5.30.0": - version: 5.30.0 - resolution: "@sentry/hub@npm:5.30.0" - dependencies: - "@sentry/types": "npm:5.30.0" - "@sentry/utils": "npm:5.30.0" - tslib: "npm:^1.9.3" - checksum: 10/b0e21a7acb1c363a3097c7578dd483b2e534bc62541977da7d3c643703767bbcfd65831b70b102fefa715e6b75004ca1dab680d117e1a7455e839042118c1051 - languageName: node - linkType: hard - -"@sentry/integrations@npm:7.120.0": - version: 7.120.0 - resolution: "@sentry/integrations@npm:7.120.0" - dependencies: - "@sentry/core": "npm:7.120.0" - "@sentry/types": "npm:7.120.0" - "@sentry/utils": "npm:7.120.0" - localforage: "npm:^1.8.1" - checksum: 10/9e8b5fb1d7277c6b64ef895aa4bc9a0e84f21981a11532342ff0ab9d51c0a2b6dedd966f989fd19770ab188308f7c95c68f72ee8936c8d6224548190f107dc4f - languageName: node - linkType: hard - -"@sentry/minimal@npm:5.30.0": - version: 5.30.0 - resolution: "@sentry/minimal@npm:5.30.0" - dependencies: - "@sentry/hub": "npm:5.30.0" - "@sentry/types": "npm:5.30.0" - tslib: "npm:^1.9.3" - checksum: 10/e74bf519f5e284decb81eea8fd7c75b02827bde36c8ccef5ad0b941043e62a6d6578d7f1ad9dba33e03d240593140990b1999215a35abb344e2b4f3e09b15c90 - languageName: node - linkType: hard - -"@sentry/node@npm:^5.18.1": - version: 5.30.0 - resolution: "@sentry/node@npm:5.30.0" - dependencies: - "@sentry/core": "npm:5.30.0" - "@sentry/hub": "npm:5.30.0" - "@sentry/tracing": "npm:5.30.0" - "@sentry/types": "npm:5.30.0" - "@sentry/utils": "npm:5.30.0" - cookie: "npm:^0.4.1" - https-proxy-agent: "npm:^5.0.0" - lru_map: "npm:^0.3.3" - tslib: "npm:^1.9.3" - checksum: 10/9fa37b3ce646954f68e4b7506d17c67f5779c69cd432801aaf6796f9ecea9632eb8729b77b71a31dcd5a9f57fb7759fd213222955a667d8ad557df6e997a00c4 - languageName: node - linkType: hard - -"@sentry/react@npm:^7.120.0": - version: 7.120.0 - resolution: "@sentry/react@npm:7.120.0" - dependencies: - "@sentry/browser": "npm:7.120.0" - "@sentry/core": "npm:7.120.0" - "@sentry/types": "npm:7.120.0" - "@sentry/utils": "npm:7.120.0" - hoist-non-react-statics: "npm:^3.3.2" - peerDependencies: - react: 15.x || 16.x || 17.x || 18.x - checksum: 10/99392c7130f8a68c0358cc9e476f27ca69ecf4e8ca619a960e2172b1dd9c5eb25663642c2edab89f897f199be79ca2a25d289664e4491ea43dd94eb62d391a9f - languageName: node - linkType: hard - -"@sentry/replay@npm:7.120.0": - version: 7.120.0 - resolution: "@sentry/replay@npm:7.120.0" - dependencies: - "@sentry-internal/tracing": "npm:7.120.0" - "@sentry/core": "npm:7.120.0" - "@sentry/types": "npm:7.120.0" - "@sentry/utils": "npm:7.120.0" - checksum: 10/478022b0012a835730566c6b916bfa482d16d04a16be5b8c6a2e6d7b27a0163a56e682fe9d80acfbbcec81c3bb65645eb33add66e87a04240add34937077336a - languageName: node - linkType: hard - -"@sentry/tracing@npm:5.30.0": - version: 5.30.0 - resolution: "@sentry/tracing@npm:5.30.0" - dependencies: - "@sentry/hub": "npm:5.30.0" - "@sentry/minimal": "npm:5.30.0" - "@sentry/types": "npm:5.30.0" - "@sentry/utils": "npm:5.30.0" - tslib: "npm:^1.9.3" - checksum: 10/7e74a29823b445adb104c323324348882987554d049e83e5d3439149d2677024350974161c28b1a55a2750509b030525f81056a48427be06183f3744220ba4b0 - languageName: node - linkType: hard - -"@sentry/tracing@npm:^7.120.0": - version: 7.120.0 - resolution: "@sentry/tracing@npm:7.120.0" - dependencies: - "@sentry-internal/tracing": "npm:7.120.0" - checksum: 10/05061350481fe0af28603cb42b00e0ea110eb746bc36ad813f7aa25a74b0f237316f2ee8d4804a8d6deaa2a53a39cb88756ebb1081939e4b5f2479f5059d8494 - languageName: node - linkType: hard - -"@sentry/types@npm:5.30.0": - version: 5.30.0 - resolution: "@sentry/types@npm:5.30.0" - checksum: 10/3ca60689871b298dbab16c1bb6fb4637f72d3c21820017bac9df1765fd560004862cc9e75fb438e5714048b3a9bc641c396cdbb3c3573ac62481d2ea83f1da6d - languageName: node - linkType: hard - -"@sentry/types@npm:7.120.0": - version: 7.120.0 - resolution: "@sentry/types@npm:7.120.0" - checksum: 10/858420bc88c7c394bdcbaf373a2fad3e5c7afbd31e2a5e8a406cb97dc38ea3b7dc35918b8f0ebf02a1cf868e22e25f6bfc37e3d90a24f713455549d8df6f5c0e - languageName: node - linkType: hard - -"@sentry/utils@npm:5.30.0": - version: 5.30.0 - resolution: "@sentry/utils@npm:5.30.0" - dependencies: - "@sentry/types": "npm:5.30.0" - tslib: "npm:^1.9.3" - checksum: 10/4aa8acf7d0d9688c927a620cbb9fd37d6d2738f701863af772be329baca2cede909dcae6c7b4b449474787245c09212909ee740b4cae143d21ddb1fed910cc3a - languageName: node - linkType: hard - -"@sentry/utils@npm:7.120.0": - version: 7.120.0 - resolution: "@sentry/utils@npm:7.120.0" - dependencies: - "@sentry/types": "npm:7.120.0" - checksum: 10/d4fd729732f5811d90a8a524903c6c00a84fa14c2ed4d1fb34aa2d02f6182b09400b5e042a4f2b6fb44e66fa10d650b613b098b3ea12b3adb5cb133400459829 - languageName: node - linkType: hard - -"@shutter-network/shutter-sdk@npm:0.0.2": - version: 0.0.2 - resolution: "@shutter-network/shutter-sdk@npm:0.0.2" - dependencies: - browser-or-node: "npm:^3.0.0" - buffer: "npm:^6.0.3" - lodash: "npm:^4.17.21" - viem: "npm:^2.23.2" - checksum: 10/da53a9cf757be3204fa0e806e6a39e9dee6f6141471c9220c82f5a8f461615b565d30516880eaaa5d31308345839e7f8e9b5534fd9f0eb0abc243ff4c774becd - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.24.1": - version: 0.24.51 - resolution: "@sinclair/typebox@npm:0.24.51" - checksum: 10/7886847b9deda1d926934066fe69165a1d9bbe7b0f836543c25efb96173c17009ef7a98619f48b379294bf27958844da3428eb35e65f8d941ea43563ad6e961e - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.27.8": - version: 0.27.8 - resolution: "@sinclair/typebox@npm:0.27.8" - checksum: 10/297f95ff77c82c54de8c9907f186076e715ff2621c5222ba50b8d40a170661c0c5242c763cba2a4791f0f91cb1d8ffa53ea1d7294570cf8cd4694c0e383e484d - languageName: node - linkType: hard - -"@sindresorhus/is@npm:^5.2.0": - version: 5.6.0 - resolution: "@sindresorhus/is@npm:5.6.0" - checksum: 10/b077c325acec98e30f7d86df158aaba2e7af2acb9bb6a00fda4b91578539fbff4ecebe9b934e24fec0e6950de3089d89d79ec02d9062476b20ce185be0e01bd6 - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^1.7.0": - version: 1.8.6 - resolution: "@sinonjs/commons@npm:1.8.6" - dependencies: - type-detect: "npm:4.0.8" - checksum: 10/51987338fd8b4d1e135822ad593dd23a3288764aa41d83c695124d512bc38b87eece859078008651ecc7f1df89a7e558a515dc6f02d21a93be4ba50b39a28914 - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^3.0.1": - version: 3.0.1 - resolution: "@sinonjs/commons@npm:3.0.1" - dependencies: - type-detect: "npm:4.0.8" - checksum: 10/a0af217ba7044426c78df52c23cedede6daf377586f3ac58857c565769358ab1f44ebf95ba04bbe38814fba6e316ca6f02870a009328294fc2c555d0f85a7117 - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^13.0.5": - version: 13.0.5 - resolution: "@sinonjs/fake-timers@npm:13.0.5" - dependencies: - "@sinonjs/commons": "npm:^3.0.1" - checksum: 10/11ee417968fc4dce1896ab332ac13f353866075a9d2a88ed1f6258f17cc4f7d93e66031b51fcddb8c203aa4d53fd980b0ae18aba06269f4682164878a992ec3f - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^8.0.1": - version: 8.1.0 - resolution: "@sinonjs/fake-timers@npm:8.1.0" - dependencies: - "@sinonjs/commons": "npm:^1.7.0" - checksum: 10/da50ddd68411617fcf72d9fb70b621aa2a6d17faa93a2769c7af390c88b40e045f84544db022dd1ac30a6db115d2a0f96473854d4a106b0174351f22d42910ce - languageName: node - linkType: hard - -"@sinonjs/samsam@npm:^8.0.1": - version: 8.0.2 - resolution: "@sinonjs/samsam@npm:8.0.2" - dependencies: - "@sinonjs/commons": "npm:^3.0.1" - lodash.get: "npm:^4.4.2" - type-detect: "npm:^4.1.0" - checksum: 10/58ca9752e8e835a09ed275f8edf8da2720fe95c0c02f6bcb90ad7f86fdceb393f35f744194b705dd94216228646ec0aedbb814e245eb869b940dcf1266b7a533 - languageName: node - linkType: hard - -"@socket.io/component-emitter@npm:~3.1.0": - version: 3.1.0 - resolution: "@socket.io/component-emitter@npm:3.1.0" - checksum: 10/db069d95425b419de1514dffe945cc439795f6a8ef5b9465715acf5b8b50798e2c91b8719cbf5434b3fe7de179d6cdcd503c277b7871cb3dd03febb69bdd50fa - languageName: node - linkType: hard - -"@solana-mobile/mobile-wallet-adapter-protocol-web3js@npm:^2.1.5": - version: 2.1.5 - resolution: "@solana-mobile/mobile-wallet-adapter-protocol-web3js@npm:2.1.5" - dependencies: - "@solana-mobile/mobile-wallet-adapter-protocol": "npm:^2.1.5" - bs58: "npm:^5.0.0" - js-base64: "npm:^3.7.5" - peerDependencies: - "@solana/web3.js": ^1.58.0 - checksum: 10/4c5d51d8e0a86cf8a69ad29c2190c3159bc541f67597a87c5aff053df252bf0471e9c80c7f7980dd42bb2992270e364b07901a321c891757c510a12b4c25346e - languageName: node - linkType: hard - -"@solana-mobile/mobile-wallet-adapter-protocol@npm:^2.1.5": - version: 2.1.5 - resolution: "@solana-mobile/mobile-wallet-adapter-protocol@npm:2.1.5" - dependencies: - "@solana/wallet-standard": "npm:^1.1.2" - "@solana/wallet-standard-util": "npm:^1.1.1" - "@wallet-standard/core": "npm:^1.0.3" - js-base64: "npm:^3.7.5" - peerDependencies: - "@solana/web3.js": ^1.58.0 - react-native: ">0.69" - checksum: 10/ecc2b4a21b74b5aa4d828e3d3eb9e4f28061e41e18cb9bc966f93aa816625bf960a9b391d7b1fe2a48abe4c334ab9a8212e85cccac65ef427286832e6138abee - languageName: node - linkType: hard - -"@solana-mobile/wallet-adapter-mobile@npm:^2.0.0": - version: 2.1.5 - resolution: "@solana-mobile/wallet-adapter-mobile@npm:2.1.5" - dependencies: - "@react-native-async-storage/async-storage": "npm:^1.17.7" - "@solana-mobile/mobile-wallet-adapter-protocol-web3js": "npm:^2.1.5" - "@solana/wallet-adapter-base": "npm:^0.9.23" - "@solana/wallet-standard-features": "npm:^1.2.0" - js-base64: "npm:^3.7.5" - qrcode: "npm:^1.5.4" - peerDependencies: - "@solana/web3.js": ^1.58.0 - dependenciesMeta: - "@react-native-async-storage/async-storage": - optional: true - checksum: 10/fa127a4135df743d242ee2ba34249785f075e7ae5825bf7b4fc72cd01069660fe12825ea2a642451488299250e83adc931711e23133c67589cfa81f80dfb4ede - languageName: node - linkType: hard - -"@solana/buffer-layout@npm:^4.0.1": - version: 4.0.1 - resolution: "@solana/buffer-layout@npm:4.0.1" - dependencies: - buffer: "npm:~6.0.3" - checksum: 10/c64b996b832b2b7966a09e97f501fdd1409fece8975f7fb47698d7b8addb97504360cfb2f3d1368949c643d23ed9a4c9f79e19bbd721ebe5bf229353252f649e - languageName: node - linkType: hard - -"@solana/wallet-adapter-base@npm:^0.9.23": - version: 0.9.23 - resolution: "@solana/wallet-adapter-base@npm:0.9.23" - dependencies: - "@solana/wallet-standard-features": "npm:^1.1.0" - "@wallet-standard/base": "npm:^1.0.1" - "@wallet-standard/features": "npm:^1.0.3" - eventemitter3: "npm:^4.0.7" - peerDependencies: - "@solana/web3.js": ^1.77.3 - checksum: 10/7b0ab2a3b33bf4796c9e544d13b3ac2b6628cdbff9e839772eb2b2ab34355708fe662cc8971b68748febffdcc2ced79725f6c1ff7832d0c1660558ad0052b372 - languageName: node - linkType: hard - -"@solana/wallet-adapter-base@npm:^0.9.24": - version: 0.9.24 - resolution: "@solana/wallet-adapter-base@npm:0.9.24" - dependencies: - "@solana/wallet-standard-features": "npm:^1.1.0" - "@wallet-standard/base": "npm:^1.0.1" - "@wallet-standard/features": "npm:^1.0.3" - eventemitter3: "npm:^4.0.7" - peerDependencies: - "@solana/web3.js": ^1.77.3 - checksum: 10/8f97298ca1df519d1cb52468d6510880155ab893845fc619e696b2680e4d702abf08f891b8d138f1b8c14a7e80419352bb725f1ff08c92b6d6f6116b860b3437 - languageName: node - linkType: hard - -"@solana/wallet-adapter-react@npm:^0.15.36": - version: 0.15.36 - resolution: "@solana/wallet-adapter-react@npm:0.15.36" - dependencies: - "@solana-mobile/wallet-adapter-mobile": "npm:^2.0.0" - "@solana/wallet-adapter-base": "npm:^0.9.24" - "@solana/wallet-standard-wallet-adapter-react": "npm:^1.1.0" - peerDependencies: - "@solana/web3.js": ^1.77.3 - react: "*" - checksum: 10/f9ea1f232548b6408332ebdec68cb5e60d4d313a0a1a9b94070d4b3f84704e02648cf49944c3eb992cf148efc51eee9780fba6263154b945f07b978f85adfc10 - languageName: node - linkType: hard - -"@solana/wallet-standard-chains@npm:^1.1.1": - version: 1.1.1 - resolution: "@solana/wallet-standard-chains@npm:1.1.1" - dependencies: - "@wallet-standard/base": "npm:^1.1.0" - checksum: 10/8903840e721642e1699dc949f7c9e75e2d6f4c26b7e768e871d91d4006731356dea64426c7351381912671887979ef47193fc17cb8b12ba819334f95f83c0ba6 - languageName: node - linkType: hard - -"@solana/wallet-standard-core@npm:^1.1.2": - version: 1.1.2 - resolution: "@solana/wallet-standard-core@npm:1.1.2" - dependencies: - "@solana/wallet-standard-chains": "npm:^1.1.1" - "@solana/wallet-standard-features": "npm:^1.3.0" - "@solana/wallet-standard-util": "npm:^1.1.2" - checksum: 10/ff671ded313bf14327c326ad8f437701d43d5438dc3169691c11509e18529bb4f45f57d50c0f68a2731c5fae55c1479ca7f8560a5b688efba5693f4aca54695c - languageName: node - linkType: hard - -"@solana/wallet-standard-features@npm:^1.1.0": - version: 1.2.0 - resolution: "@solana/wallet-standard-features@npm:1.2.0" - dependencies: - "@wallet-standard/base": "npm:^1.0.1" - "@wallet-standard/features": "npm:^1.0.3" - checksum: 10/6a638783b282078f7c38ba0d2a69f302293d0c3226ea257d1cafd16d7b7332631d284e738d53d443dac984900a3b6d5fa34a1c92a51200901a43966048d4475c - languageName: node - linkType: hard - -"@solana/wallet-standard-features@npm:^1.2.0, @solana/wallet-standard-features@npm:^1.3.0": - version: 1.3.0 - resolution: "@solana/wallet-standard-features@npm:1.3.0" - dependencies: - "@wallet-standard/base": "npm:^1.1.0" - "@wallet-standard/features": "npm:^1.1.0" - checksum: 10/9c4ef26346ef0b602ad4bde7a32e53716b96a427c4f7120571be949efeefa21a2458e9d6ef41bf1be7a1e3f2a45fa631fc4242503a87043d74bb7213c62509c2 - languageName: node - linkType: hard - -"@solana/wallet-standard-util@npm:^1.1.1, @solana/wallet-standard-util@npm:^1.1.2": - version: 1.1.2 - resolution: "@solana/wallet-standard-util@npm:1.1.2" - dependencies: - "@noble/curves": "npm:^1.8.0" - "@solana/wallet-standard-chains": "npm:^1.1.1" - "@solana/wallet-standard-features": "npm:^1.3.0" - checksum: 10/7ff72a34404fae90c1aeea32f96a69b896e0a901c6f222c6083f5308e3b00f2fdd004210960c8f0d3c49d991d08f8f4e8d92a0a6d33bdb7f79bfd7ec5a844fd4 - languageName: node - linkType: hard - -"@solana/wallet-standard-wallet-adapter-base@npm:^1.1.4": - version: 1.1.4 - resolution: "@solana/wallet-standard-wallet-adapter-base@npm:1.1.4" - dependencies: - "@solana/wallet-adapter-base": "npm:^0.9.23" - "@solana/wallet-standard-chains": "npm:^1.1.1" - "@solana/wallet-standard-features": "npm:^1.3.0" - "@solana/wallet-standard-util": "npm:^1.1.2" - "@wallet-standard/app": "npm:^1.1.0" - "@wallet-standard/base": "npm:^1.1.0" - "@wallet-standard/features": "npm:^1.1.0" - "@wallet-standard/wallet": "npm:^1.1.0" - peerDependencies: - "@solana/web3.js": ^1.98.0 - bs58: ^6.0.0 - checksum: 10/ab98f5b1f723d20ce469f567802a99ea209b666933b7d386a0336bd07fc302ef55b90190c0c2a24c3da6ca6ec4a25ae8db8011b7cf8c33c6fcf37b008157388d - languageName: node - linkType: hard - -"@solana/wallet-standard-wallet-adapter-react@npm:^1.1.0, @solana/wallet-standard-wallet-adapter-react@npm:^1.1.4": - version: 1.1.4 - resolution: "@solana/wallet-standard-wallet-adapter-react@npm:1.1.4" - dependencies: - "@solana/wallet-standard-wallet-adapter-base": "npm:^1.1.4" - "@wallet-standard/app": "npm:^1.1.0" - "@wallet-standard/base": "npm:^1.1.0" - peerDependencies: - "@solana/wallet-adapter-base": "*" - react: "*" - checksum: 10/e354b7addf158e20d6b0ca790dd07c9b1e2430182d09ed47e6d23f40791db1701bc2c6007e3a369a4a38d7ab8da2e7e52b1b591344e0daf7072dfb5068d9e58f - languageName: node - linkType: hard - -"@solana/wallet-standard-wallet-adapter@npm:^1.1.4": - version: 1.1.4 - resolution: "@solana/wallet-standard-wallet-adapter@npm:1.1.4" - dependencies: - "@solana/wallet-standard-wallet-adapter-base": "npm:^1.1.4" - "@solana/wallet-standard-wallet-adapter-react": "npm:^1.1.4" - checksum: 10/1f545f326a90e4ce7af2100e74b3d7218918474b5cd2acbaa44e313439f3734633cfe4ebc647780618737a6a364f83df726ee8418ef0cb90324943aff5ddf055 - languageName: node - linkType: hard - -"@solana/wallet-standard@npm:^1.1.2": - version: 1.1.4 - resolution: "@solana/wallet-standard@npm:1.1.4" - dependencies: - "@solana/wallet-standard-core": "npm:^1.1.2" - "@solana/wallet-standard-wallet-adapter": "npm:^1.1.4" - checksum: 10/3f39908ae9e6786e8b249fa572ba417967fb6a29940cb4f5382e1b970f933df1489bb578d932f62c9483fccc44a9c797ac9f40e7b77dc34c9c47067721f0b346 - languageName: node - linkType: hard - -"@solana/web3.js@npm:^1.98.0": - version: 1.98.0 - resolution: "@solana/web3.js@npm:1.98.0" - dependencies: - "@babel/runtime": "npm:^7.25.0" - "@noble/curves": "npm:^1.4.2" - "@noble/hashes": "npm:^1.4.0" - "@solana/buffer-layout": "npm:^4.0.1" - agentkeepalive: "npm:^4.5.0" - bigint-buffer: "npm:^1.1.5" - bn.js: "npm:^5.2.1" - borsh: "npm:^0.7.0" - bs58: "npm:^4.0.1" - buffer: "npm:6.0.3" - fast-stable-stringify: "npm:^1.0.0" - jayson: "npm:^4.1.1" - node-fetch: "npm:^2.7.0" - rpc-websockets: "npm:^9.0.2" - superstruct: "npm:^2.0.2" - checksum: 10/b4d398c89a5007268b538b691b44c43b376dab59eb7e8acaa4c12a061812674a6e0b2802afb13e5f0ceacdb5102fb7bfb98d20743df0761f28b211aa37232b43 - languageName: node - linkType: hard - -"@solidity-parser/parser@npm:^0.19.0": - version: 0.19.0 - resolution: "@solidity-parser/parser@npm:0.19.0" - checksum: 10/2136708ecc988b534efcf836e95f4f02a1452ab0c026438014c35ce31b26dc011cc8c512d502fc7bcb968f850ab7e524838292bc36cad6a144fedb4c29685587 - languageName: node - linkType: hard - -"@solidity-parser/parser@npm:^0.20.1": - version: 0.20.1 - resolution: "@solidity-parser/parser@npm:0.20.1" - checksum: 10/6497d74c67386ad3c91c906fbea4cf46df1b0eb3f597c7c881c5bbf33a5c689b36d22211fedc36e023e59facf8a6d7cff315dc117d3215d38cc5be95ecc106db - languageName: node - linkType: hard - -"@sphinxxxx/color-conversion@npm:^2.2.2": - version: 2.2.2 - resolution: "@sphinxxxx/color-conversion@npm:2.2.2" - checksum: 10/60be08eb37d873a7e8e7987d348d09363237934e2827ded6df6322a113aa30b19de36edb6ce74749aad3039fdf3ccc386cdd6b30b74d2f0ba8c772d5cfa5b3fc - languageName: node - linkType: hard - -"@surma/rollup-plugin-off-main-thread@npm:^2.2.3": - version: 2.2.3 - resolution: "@surma/rollup-plugin-off-main-thread@npm:2.2.3" - dependencies: - ejs: "npm:^3.1.6" - json5: "npm:^2.2.0" - magic-string: "npm:^0.25.0" - string.prototype.matchall: "npm:^4.0.6" - checksum: 10/0c7dc1c1fc396454513dec9ef34e743ffc8662adc20eeaf392a9cca4bd8a4a33af239c057022b6272c3fc438550e3c7099cdea5f50eb61c5058308989c7c48d6 - languageName: node - linkType: hard - -"@sveltejs/acorn-typescript@npm:^1.0.5": - version: 1.0.5 - resolution: "@sveltejs/acorn-typescript@npm:1.0.5" - peerDependencies: - acorn: ^8.9.0 - checksum: 10/23c4c58a0336f44802609dea5ac7ed71d2bc02b8a3b001b03a0accf96a70f2f3d357b1677fd50fbf195d5ed772afed8757451b11c3eda3319fe57925160865d8 - languageName: node - linkType: hard - -"@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0": - version: 8.0.0 - resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/3fc8e35d16f5abe0af5efe5851f27581225ac405d6a1ca44cda0df064cddfcc29a428c48c2e4bef6cebf627c9ac2f652a096030edb02cf5a120ce28d3c234710 - languageName: node - linkType: hard - -"@svgr/babel-plugin-add-jsx-attribute@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:5.4.0" - checksum: 10/1c538cf312b486598c6aea17f9b72d7fc308eb5dd32effd804630206a185493b8a828ff980ceb29d57d8319c085614c7cea967be709c71ae77702a4c30037011 - languageName: node - linkType: hard - -"@svgr/babel-plugin-remove-jsx-attribute@npm:8.0.0": - version: 8.0.0 - resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:8.0.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/ff992893c6c4ac802713ba3a97c13be34e62e6d981c813af40daabcd676df68a72a61bd1e692bb1eda3587f1b1d700ea462222ae2153bb0f46886632d4f88d08 - languageName: node - linkType: hard - -"@svgr/babel-plugin-remove-jsx-attribute@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:5.4.0" - checksum: 10/ad2231bfcb14daa944201df66236c222cde05a07c4cffaecab1d36d33f606b6caf17bda21844fc435780c1a27195e49beb8397536fe5e7545dfffcfbbcecb7f8 - languageName: node - linkType: hard - -"@svgr/babel-plugin-remove-jsx-empty-expression@npm:8.0.0": - version: 8.0.0 - resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:8.0.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/0fb691b63a21bac00da3aa2dccec50d0d5a5b347ff408d60803b84410d8af168f2656e4ba1ee1f24dab0ae4e4af77901f2928752bb0434c1f6788133ec599ec8 - languageName: node - linkType: hard - -"@svgr/babel-plugin-remove-jsx-empty-expression@npm:^5.0.1": - version: 5.0.1 - resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:5.0.1" - checksum: 10/175c8f13ddcb0744f7c3910ebed3799cfb961a75bff130e1ed2071c87ca8b8df8964825c988e511b2e3c5dbf48ad3d4fbbb6989edc53294253df40cf2a24375e - languageName: node - linkType: hard - -"@svgr/babel-plugin-replace-jsx-attribute-value@npm:8.0.0": - version: 8.0.0 - resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:8.0.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/1edda65ef4f4dd8f021143c8ec276a08f6baa6f733b8e8ee2e7775597bf6b97afb47fdeefd579d6ae6c959fe2e634f55cd61d99377631212228c8cfb351b8921 - languageName: node - linkType: hard - -"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^5.0.1": - version: 5.0.1 - resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:5.0.1" - checksum: 10/68f4e2a5b95eca44e22fce485dc2ddd10adabe2b38f6db3ef9071b35e84bf379685f7acab6c05b7a82f722328c02f6424f8252c6dd5c2c4ed2f00104072b1dfe - languageName: node - linkType: hard - -"@svgr/babel-plugin-svg-dynamic-title@npm:8.0.0": - version: 8.0.0 - resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:8.0.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/876cec891488992e6a9aebb8155e2bea4ec461b4718c51de36e988e00e271c6d9d01ef6be17b9effd44b2b3d7db0b41c161a5904a46ae6f38b26b387ad7f3709 - languageName: node - linkType: hard - -"@svgr/babel-plugin-svg-dynamic-title@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:5.4.0" - checksum: 10/c46feb52454acea32031d1d881a81334f2e5f838ed25a2d9014acb5e9541d404405911e86dbee8bee9f1e43c9e07118123a07dc297962dbed0c4c5a86bdc4be9 - languageName: node - linkType: hard - -"@svgr/babel-plugin-svg-em-dimensions@npm:8.0.0": - version: 8.0.0 - resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:8.0.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/be0e2d391164428327d9ec469a52cea7d93189c6b0e2c290999e048f597d777852f701c64dca44cd45b31ed14a7f859520326e2e4ad7c3a4545d0aa235bc7e9a - languageName: node - linkType: hard - -"@svgr/babel-plugin-svg-em-dimensions@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:5.4.0" - checksum: 10/0d19b26147bbba932bd973258dab4a80a7ea6b9d674713186f0e10fa21a9e3aa4327326b2bf1892e8051712bce0ea30561eb187ca27bb241d33c350cea51ac88 - languageName: node - linkType: hard - -"@svgr/babel-plugin-transform-react-native-svg@npm:8.1.0": - version: 8.1.0 - resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:8.1.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/85b434a57572f53bd2b9f0606f253e1fcf57b4a8c554ec3f2d43ed17f50d8cae200cb3aaf1ec9d626e1456e8b135dce530ae047eb0bed6d4bf98a752d6640459 - languageName: node - linkType: hard - -"@svgr/babel-plugin-transform-react-native-svg@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:5.4.0" - checksum: 10/8ac5dc9fb2dee24addc74dbcb169860c95a69247606f986eabb0618fb300dd08e8f220891b758e62c051428ba04d8dd50f2c2bf877e15fa190e6d384d1ccd2ad - languageName: node - linkType: hard - -"@svgr/babel-plugin-transform-svg-component@npm:8.0.0": - version: 8.0.0 - resolution: "@svgr/babel-plugin-transform-svg-component@npm:8.0.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/86ca139c0be0e7df05f103c5f10874387ada1434ca0286584ba9cd367c259d74bf9c86700b856449f46cf674bd6f0cf18f8f034f6d3f0e2ce5e5435c25dbff4b - languageName: node - linkType: hard - -"@svgr/babel-plugin-transform-svg-component@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/babel-plugin-transform-svg-component@npm:5.5.0" - checksum: 10/fcd5502c69303550eae36cdd659629799159d3598e57b06432a08aa7112ff5b6d6a3a0f8d3ce90c44754b8d333c2f5515724ad580cd8bdb6885295142039b0eb - languageName: node - linkType: hard - -"@svgr/babel-preset@npm:8.1.0": - version: 8.1.0 - resolution: "@svgr/babel-preset@npm:8.1.0" - dependencies: - "@svgr/babel-plugin-add-jsx-attribute": "npm:8.0.0" - "@svgr/babel-plugin-remove-jsx-attribute": "npm:8.0.0" - "@svgr/babel-plugin-remove-jsx-empty-expression": "npm:8.0.0" - "@svgr/babel-plugin-replace-jsx-attribute-value": "npm:8.0.0" - "@svgr/babel-plugin-svg-dynamic-title": "npm:8.0.0" - "@svgr/babel-plugin-svg-em-dimensions": "npm:8.0.0" - "@svgr/babel-plugin-transform-react-native-svg": "npm:8.1.0" - "@svgr/babel-plugin-transform-svg-component": "npm:8.0.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/3a67930f080b8891e1e8e2595716b879c944d253112bae763dce59807ba23454d162216c8d66a0a0e3d4f38a649ecd6c387e545d1e1261dd69a68e9a3392ee08 - languageName: node - linkType: hard - -"@svgr/babel-preset@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/babel-preset@npm:5.5.0" - dependencies: - "@svgr/babel-plugin-add-jsx-attribute": "npm:^5.4.0" - "@svgr/babel-plugin-remove-jsx-attribute": "npm:^5.4.0" - "@svgr/babel-plugin-remove-jsx-empty-expression": "npm:^5.0.1" - "@svgr/babel-plugin-replace-jsx-attribute-value": "npm:^5.0.1" - "@svgr/babel-plugin-svg-dynamic-title": "npm:^5.4.0" - "@svgr/babel-plugin-svg-em-dimensions": "npm:^5.4.0" - "@svgr/babel-plugin-transform-react-native-svg": "npm:^5.4.0" - "@svgr/babel-plugin-transform-svg-component": "npm:^5.5.0" - checksum: 10/90185ff3761b942e806eb127e2802e9b161f8c471de510c0d989aa9c1669f1328c258a1bf1924c8977faddd534107c36e8f49e416088b30c721f9919aea12255 - languageName: node - linkType: hard - -"@svgr/core@npm:8.1.0, @svgr/core@npm:^8.1.0": - version: 8.1.0 - resolution: "@svgr/core@npm:8.1.0" - dependencies: - "@babel/core": "npm:^7.21.3" - "@svgr/babel-preset": "npm:8.1.0" - camelcase: "npm:^6.2.0" - cosmiconfig: "npm:^8.1.3" - snake-case: "npm:^3.0.4" - checksum: 10/bc98cd5fc349ab9dcf0c13c2279164726d45878cdac8999090765379c6e897a1b24aca641c12a3c33f578d06f7a09252fb090962a4695c753fb02b627a56bfe6 - languageName: node - linkType: hard - -"@svgr/core@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/core@npm:5.5.0" - dependencies: - "@svgr/plugin-jsx": "npm:^5.5.0" - camelcase: "npm:^6.2.0" - cosmiconfig: "npm:^7.0.0" - checksum: 10/fc8621b8542052cdc38c031884d970ea25b325ae1ac4bebf72fba6351052ff13f490c029b6bb0d59f83d02ebbda9df938f94ca3bd442b731cf2c2f5e7adca561 - languageName: node - linkType: hard - -"@svgr/hast-util-to-babel-ast@npm:8.0.0": - version: 8.0.0 - resolution: "@svgr/hast-util-to-babel-ast@npm:8.0.0" - dependencies: - "@babel/types": "npm:^7.21.3" - entities: "npm:^4.4.0" - checksum: 10/243aa9c92d66aa3f1fc82851fe1fa376808a08fcc02719fed38ebfb4e25cf3e3c1282c185300c29953d047c36acb9e3ac588d46b0af55a3b7a5186a6badec8a9 - languageName: node - linkType: hard - -"@svgr/hast-util-to-babel-ast@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/hast-util-to-babel-ast@npm:5.5.0" - dependencies: - "@babel/types": "npm:^7.12.6" - checksum: 10/a46c77510d0e5b08cf910959fb2199155932bcbf2a3280b737e2be2f8f7526abb70ebd790fe61be97e652008bc6a8e90b2e55dd8d61aaaae9fc69d3c104b4836 - languageName: node - linkType: hard - -"@svgr/plugin-jsx@npm:8.1.0, @svgr/plugin-jsx@npm:^8.1.0": - version: 8.1.0 - resolution: "@svgr/plugin-jsx@npm:8.1.0" - dependencies: - "@babel/core": "npm:^7.21.3" - "@svgr/babel-preset": "npm:8.1.0" - "@svgr/hast-util-to-babel-ast": "npm:8.0.0" - svg-parser: "npm:^2.0.4" - peerDependencies: - "@svgr/core": "*" - checksum: 10/0418a9780753d3544912ee2dad5d2cf8d12e1ba74df8053651b3886aeda54d5f0f7d2dece0af5e0d838332c4f139a57f0dabaa3ca1afa4d1a765efce6a7656f2 - languageName: node - linkType: hard - -"@svgr/plugin-jsx@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/plugin-jsx@npm:5.5.0" - dependencies: - "@babel/core": "npm:^7.12.3" - "@svgr/babel-preset": "npm:^5.5.0" - "@svgr/hast-util-to-babel-ast": "npm:^5.5.0" - svg-parser: "npm:^2.0.2" - checksum: 10/e053f8dd6bfcd72377b432dd5b1db3c89d503d29839639a87f85b597a680d0b69e33a4db376f5a1074a89615f7157cd36f63f94bdb4083a0fd5bbe918c7fcb9b - languageName: node - linkType: hard - -"@svgr/plugin-svgo@npm:8.1.0": - version: 8.1.0 - resolution: "@svgr/plugin-svgo@npm:8.1.0" - dependencies: - cosmiconfig: "npm:^8.1.3" - deepmerge: "npm:^4.3.1" - svgo: "npm:^3.0.2" - peerDependencies: - "@svgr/core": "*" - checksum: 10/59d9d214cebaacca9ca71a561f463d8b7e5a68ca9443e4792a42d903acd52259b1790c0680bc6afecc3f00a255a6cbd7ea278a9f625bac443620ea58a590c2d0 - languageName: node - linkType: hard - -"@svgr/plugin-svgo@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/plugin-svgo@npm:5.5.0" - dependencies: - cosmiconfig: "npm:^7.0.0" - deepmerge: "npm:^4.2.2" - svgo: "npm:^1.2.2" - checksum: 10/7cc92eabcaffe117d6f9ac5ab80207dc43b17d4f42ab3f84da202f93a44081ed6adc0fe4e23c2629a8e6ef227649b1083234dfa0728726c471dd0b4eb68221ae - languageName: node - linkType: hard - -"@svgr/webpack@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/webpack@npm:5.5.0" - dependencies: - "@babel/core": "npm:^7.12.3" - "@babel/plugin-transform-react-constant-elements": "npm:^7.12.1" - "@babel/preset-env": "npm:^7.12.1" - "@babel/preset-react": "npm:^7.12.5" - "@svgr/core": "npm:^5.5.0" - "@svgr/plugin-jsx": "npm:^5.5.0" - "@svgr/plugin-svgo": "npm:^5.5.0" - loader-utils: "npm:^2.0.0" - checksum: 10/91f0b4176d22e8414d200f785d6cf9793ce39062f44be1eb2426c2f4415ee75d57e0670ae1e549b4a9222f20f4f06157fd9b121fa74c107d2cb821920874e79e - languageName: node - linkType: hard - -"@svgr/webpack@npm:^8.1.0": - version: 8.1.0 - resolution: "@svgr/webpack@npm:8.1.0" - dependencies: - "@babel/core": "npm:^7.21.3" - "@babel/plugin-transform-react-constant-elements": "npm:^7.21.3" - "@babel/preset-env": "npm:^7.20.2" - "@babel/preset-react": "npm:^7.18.6" - "@babel/preset-typescript": "npm:^7.21.0" - "@svgr/core": "npm:8.1.0" - "@svgr/plugin-jsx": "npm:8.1.0" - "@svgr/plugin-svgo": "npm:8.1.0" - checksum: 10/c6eec5b0cf2fb2ecd3a7a362d272eda35330b17c76802a3481f499b5d07ff8f87b31d2571043bff399b051a1767b1e2e499dbf186104d1c06d76f9f1535fac01 - languageName: node - linkType: hard - -"@swc/counter@npm:^0.1.3": - version: 0.1.3 - resolution: "@swc/counter@npm:0.1.3" - checksum: 10/df8f9cfba9904d3d60f511664c70d23bb323b3a0803ec9890f60133954173047ba9bdeabce28cd70ba89ccd3fd6c71c7b0bd58be85f611e1ffbe5d5c18616598 - languageName: node - linkType: hard - -"@swc/helpers@npm:0.5.5": - version: 0.5.5 - resolution: "@swc/helpers@npm:0.5.5" - dependencies: - "@swc/counter": "npm:^0.1.3" - tslib: "npm:^2.4.0" - checksum: 10/1c5ef04f642542212df28c669438f3e0f459dcde7b448a5b1fcafb2e9e4f13e76d8428535a270e91ed123dd2a21189dbed34086b88a8cf68baf84984d6d0e39b - languageName: node - linkType: hard - -"@swc/helpers@npm:^0.3.2": - version: 0.3.17 - resolution: "@swc/helpers@npm:0.3.17" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/c848c89ff1fe9bfeac2dcb2b39c606942c3914ca5e0a364f5a6f0515a9985b012ce00cca4ae6255a2788dba51d437b1b004eaed1f339f618094c111340c980cd - languageName: node - linkType: hard - -"@swc/helpers@npm:^0.5.11": - version: 0.5.13 - resolution: "@swc/helpers@npm:0.5.13" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/6ba2f7e215d32d71fce139e2cfc426b3ed7eaa709febdeb07b97260a4c9eea4784cf047cc1271be273990b08220b576b94a42b5780947c0b3be84973a847a24d - languageName: node - linkType: hard - -"@szmarczak/http-timer@npm:^5.0.1": - version: 5.0.1 - resolution: "@szmarczak/http-timer@npm:5.0.1" - dependencies: - defer-to-connect: "npm:^2.0.1" - checksum: 10/fc9cb993e808806692e4a3337c90ece0ec00c89f4b67e3652a356b89730da98bc824273a6d67ca84d5f33cd85f317dcd5ce39d8cc0a2f060145a608a7cb8ce92 - languageName: node - linkType: hard - -"@tanstack/query-core@npm:5.69.0": - version: 5.69.0 - resolution: "@tanstack/query-core@npm:5.69.0" - checksum: 10/8586241e2b254d21cacf7ce595e1ee422b87c902dc70191341992cca875702073133fecee056fd6275779b2a5e748b33e03a6912f5dabd0d703f7778999ec02f - languageName: node - linkType: hard - -"@tanstack/react-query@npm:^5.69.0": - version: 5.69.0 - resolution: "@tanstack/react-query@npm:5.69.0" - dependencies: - "@tanstack/query-core": "npm:5.69.0" - peerDependencies: - react: ^18 || ^19 - checksum: 10/9b2820e9a5119d743cac62c6249362cf29789ffeffab0e2908bdb0781377b909037fbdd00fe53ac53f56421e8e8baf091d0feff1f84621aa302463cc92071ad7 - languageName: node - linkType: hard - -"@tanstack/react-virtual@npm:^3.13.3": - version: 3.13.5 - resolution: "@tanstack/react-virtual@npm:3.13.5" - dependencies: - "@tanstack/virtual-core": "npm:3.13.5" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - checksum: 10/ca72cbdcee26394e84d925445de9f7c152d90acfc08a691a0566a1561f8fa47d7d0a5e70f911553fc11663d9d2a759b84fb43b4531023dece8d3b8f974549aac - languageName: node - linkType: hard - -"@tanstack/virtual-core@npm:3.13.5": - version: 3.13.5 - resolution: "@tanstack/virtual-core@npm:3.13.5" - checksum: 10/b7001875372aaafd5c742036761c24d2e9c00dd1be633da3ff7d0b6bdc441b713646594d7fcb567600f473c0fb3cdf3b9a3e6b60752e93b56674dc1f939c29ac - languageName: node - linkType: hard - -"@tootallnate/once@npm:1": - version: 1.1.2 - resolution: "@tootallnate/once@npm:1.1.2" - checksum: 10/e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 - languageName: node - linkType: hard - -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: 10/ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 - languageName: node - linkType: hard - -"@trysound/sax@npm:0.2.0": - version: 0.2.0 - resolution: "@trysound/sax@npm:0.2.0" - checksum: 10/7379713eca480ac0d9b6c7b063e06b00a7eac57092354556c81027066eb65b61ea141a69d0cc2e15d32e05b2834d4c9c2184793a5e36bbf5daf05ee5676af18c - languageName: node - linkType: hard - -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node10@npm:1.0.9" - checksum: 10/a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df - languageName: node - linkType: hard - -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 10/5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a - languageName: node - linkType: hard - -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 10/19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d - languageName: node - linkType: hard - -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.4 - resolution: "@tsconfig/node16@npm:1.0.4" - checksum: 10/202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff - languageName: node - linkType: hard - -"@tsconfig/node18@npm:^18.2.4": - version: 18.2.4 - resolution: "@tsconfig/node18@npm:18.2.4" - checksum: 10/80623cb9c129c78d51fe6c4a256ba986f12f02ff02dc2a1e5b33dd13a7983f767b6792cfcd51b3dd1c8256ea105f1fea31f64a2070564e37787ab3d9a1a1e7e3 - languageName: node - linkType: hard - -"@tsconfig/node20@npm:^20.1.5": - version: 20.1.5 - resolution: "@tsconfig/node20@npm:20.1.5" - checksum: 10/6d689785f7b6ffd09d2cd0565290235ddc650932f6c110701dd38732b3c0b57ba039a3663268ae4a16b855d55ec2fbd48a53910e5a5fc7f196caaa4074dd0a53 - languageName: node - linkType: hard - -"@typechain/ethers-v6@npm:^0.5.1": - version: 0.5.1 - resolution: "@typechain/ethers-v6@npm:0.5.1" - dependencies: - lodash: "npm:^4.17.15" - ts-essentials: "npm:^7.0.1" - peerDependencies: - ethers: 6.x - typechain: ^8.3.2 - typescript: ">=4.7.0" - checksum: 10/51dd8be3548fe3c061d2a5372beb9214e767e2b69f10c12424b699bba7ff409a13c4bdff2e513ef49046b51153db56489752205541be8fb1775f3b9ad884b85b - languageName: node - linkType: hard - -"@typechain/hardhat@npm:^9.1.0": - version: 9.1.0 - resolution: "@typechain/hardhat@npm:9.1.0" - dependencies: - fs-extra: "npm:^9.1.0" - peerDependencies: - "@typechain/ethers-v6": ^0.5.1 - ethers: ^6.1.0 - hardhat: ^2.9.9 - typechain: ^8.3.2 - checksum: 10/1f59d8243af020905f3cdb96125cf9fcad33bd16f919d5e07762c63e0220bccb658abf59b0ad74be784a3387c0a6b0262612fa1adeb9f6c99061a6abaa6afc53 - languageName: node - linkType: hard - -"@types/argparse@npm:1.0.38": - version: 1.0.38 - resolution: "@types/argparse@npm:1.0.38" - checksum: 10/26ed7e3f1e3595efdb883a852f5205f971b798e4c28b7e30a32c5298eee596e8b45834ce831f014d250b9730819ab05acff5b31229666d3af4ba465b4697d0eb - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14": - version: 7.20.1 - resolution: "@types/babel__core@npm:7.20.1" - dependencies: - "@babel/parser": "npm:^7.20.7" - "@babel/types": "npm:^7.20.7" - "@types/babel__generator": "npm:*" - "@types/babel__template": "npm:*" - "@types/babel__traverse": "npm:*" - checksum: 10/e63e5e71be75dd2fe41951c83650ab62006179340a7b280bfa58e9c39118cb2752ca786f952f4a12f75b83b55346f2d5e8df2b91926ef99f2f4a2a69162cab99 - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.6.4 - resolution: "@types/babel__generator@npm:7.6.4" - dependencies: - "@babel/types": "npm:^7.0.0" - checksum: 10/34f361a0d54a0d85ea4c4b5122c4025a5738fe6795361c85f07a4f8f9add383de640e8611edeeb8339db8203c2d64bff30be266bdcfe3cf777c19e8d34f9cebc - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" - dependencies: - "@babel/parser": "npm:^7.1.0" - "@babel/types": "npm:^7.0.0" - checksum: 10/649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee - languageName: node - linkType: hard - -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": - version: 7.20.1 - resolution: "@types/babel__traverse@npm:7.20.1" - dependencies: - "@babel/types": "npm:^7.20.7" - checksum: 10/8f18d1488adf296f50d01e2386797c56a607cde2cfc3c7c55cea34d760aed9386c81ea808a151a0efb11d99e0083c138c5733d3f214471a30abed055bede39d8 - languageName: node - linkType: hard - -"@types/bn.js@npm:^4.11.3": - version: 4.11.6 - resolution: "@types/bn.js@npm:4.11.6" - dependencies: - "@types/node": "npm:*" - checksum: 10/9ff3e7a1539a953c381c0d30ea2049162e3cab894cda91ee10f3a84d603f9afa2b2bc2a38fe9b427de94b6e2b7b77aefd217c1c7b07a10ae8d7499f9d6697a41 - languageName: node - linkType: hard - -"@types/bn.js@npm:^5.1.0": - version: 5.1.1 - resolution: "@types/bn.js@npm:5.1.1" - dependencies: - "@types/node": "npm:*" - checksum: 10/cf2c45833e67ecfc45e5336151965a47857431640b61708b6e4dc81d88ed53585c9b30be59abbbee609cdf7a63828e5b8a58c1a27eb4306e5cb7ddd9bad46650 - languageName: node - linkType: hard - -"@types/body-parser@npm:*": - version: 1.19.2 - resolution: "@types/body-parser@npm:1.19.2" - dependencies: - "@types/connect": "npm:*" - "@types/node": "npm:*" - checksum: 10/e17840c7d747a549f00aebe72c89313d09fbc4b632b949b2470c5cb3b1cb73863901ae84d9335b567a79ec5efcfb8a28ff8e3f36bc8748a9686756b6d5681f40 - languageName: node - linkType: hard - -"@types/bonjour@npm:^3.5.9": - version: 3.5.10 - resolution: "@types/bonjour@npm:3.5.10" - dependencies: - "@types/node": "npm:*" - checksum: 10/bfcadb042a41b124c4e3de4925e3be6d35b78f93f27c4535d5ff86980dc0f8bc407ed99b9b54528952dc62834d5a779392f7a12c2947dd19330eb05a6bcae15a - languageName: node - linkType: hard - -"@types/busboy@npm:^1.5.4": - version: 1.5.4 - resolution: "@types/busboy@npm:1.5.4" - dependencies: - "@types/node": "npm:*" - checksum: 10/43cdd26754603fbee81f538ac52769f2cc8445d5f238666845d99a9fee22e0b608a075d0c346f78c43ade4ce4ec04433a51a1ffa21524ca29ead9d2375f4ec9c - languageName: node - linkType: hard - -"@types/chai-as-promised@npm:^7.1.3": - version: 7.1.5 - resolution: "@types/chai-as-promised@npm:7.1.5" - dependencies: - "@types/chai": "npm:*" - checksum: 10/a02bdfe284481bba75bfa6bc1bf99687212c4ad162cb5b52f118853d5cfcd098dbbc3d51f05a49f2fea6001c960dbef57b054f400baf72ad3614988016476c8c - languageName: node - linkType: hard - -"@types/chai@npm:*, @types/chai@npm:^4.3.20": - version: 4.3.20 - resolution: "@types/chai@npm:4.3.20" - checksum: 10/94fd87036fb63f62c79caf58ccaec88e23cc109e4d41607d83adc609acd6b24eabc345feb7850095a53f76f99c470888251da9bd1b90849c8b2b5a813296bb19 - languageName: node - linkType: hard - -"@types/connect-history-api-fallback@npm:^1.3.5": - version: 1.5.0 - resolution: "@types/connect-history-api-fallback@npm:1.5.0" - dependencies: - "@types/express-serve-static-core": "npm:*" - "@types/node": "npm:*" - checksum: 10/f180e7c540728d6dd3a1eb2376e445fe7f9de4ee8a5b460d5ad80062cdb6de6efc91c6851f39e9d5933b3dcd5cd370673c52343a959aa091238b6f863ea4447c - languageName: node - linkType: hard - -"@types/connect@npm:*, @types/connect@npm:^3.4.33": - version: 3.4.35 - resolution: "@types/connect@npm:3.4.35" - dependencies: - "@types/node": "npm:*" - checksum: 10/fe81351470f2d3165e8b12ce33542eef89ea893e36dd62e8f7d72566dfb7e448376ae962f9f3ea888547ce8b55a40020ca0e01d637fab5d99567673084542641 - languageName: node - linkType: hard - -"@types/debug@npm:^4.0.0, @types/debug@npm:^4.1.7": - version: 4.1.8 - resolution: "@types/debug@npm:4.1.8" - dependencies: - "@types/ms": "npm:*" - checksum: 10/a9a9bb40a199e9724aa944e139a7659173a9b274798ea7efbc277cb084bc37d32fc4c00877c3496fac4fed70a23243d284adb75c00b5fdabb38a22154d18e5df - languageName: node - linkType: hard - -"@types/dns-packet@npm:^5.6.5": - version: 5.6.5 - resolution: "@types/dns-packet@npm:5.6.5" - dependencies: - "@types/node": "npm:*" - checksum: 10/ebca4215607b24bfcb46ac89553d71f923009e81b09541e0c79b4837f18e6d0053b955ac23b267e37fbbb4ec36b653f3be1fd3788c62c5201d9689bcd5172c2a - languageName: node - linkType: hard - -"@types/dompurify@npm:^2.3.4": - version: 2.4.0 - resolution: "@types/dompurify@npm:2.4.0" - dependencies: - "@types/trusted-types": "npm:*" - checksum: 10/02771f206873d2b32fcd5c3c20a64a9f089d8376aaef9b7ebe07e0e78127e9518374730de0df39b7ee15ab90ac0bf4df7350c0f7fce4717a3342e1a4a5bd15ed - languageName: node - linkType: hard - -"@types/eslint-scope@npm:^3.7.3": - version: 3.7.4 - resolution: "@types/eslint-scope@npm:3.7.4" - dependencies: - "@types/eslint": "npm:*" - "@types/estree": "npm:*" - checksum: 10/ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 - languageName: node - linkType: hard - -"@types/eslint@npm:*, @types/eslint@npm:^7.29.0 || ^8.4.1": - version: 8.40.2 - resolution: "@types/eslint@npm:8.40.2" - dependencies: - "@types/estree": "npm:*" - "@types/json-schema": "npm:*" - checksum: 10/7b4d22dd7da4fc5aa49bbd4e754afabad302f136623ba33efc1fe2e3e021d9b2784415982487e31ddcf1d1d921b4a69c78674a4df8466a41aabb4836e44e92a6 - languageName: node - linkType: hard - -"@types/estree-jsx@npm:^1.0.0": - version: 1.0.5 - resolution: "@types/estree-jsx@npm:1.0.5" - dependencies: - "@types/estree": "npm:*" - checksum: 10/a028ab0cd7b2950168a05c6a86026eb3a36a54a4adfae57f13911d7b49dffe573d9c2b28421b2d029b49b3d02fcd686611be2622dc3dad6d9791166c083f6008 - languageName: node - linkType: hard - -"@types/estree@npm:*, @types/estree@npm:1.0.6, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": - version: 1.0.6 - resolution: "@types/estree@npm:1.0.6" - checksum: 10/9d35d475095199c23e05b431bcdd1f6fec7380612aed068b14b2a08aa70494de8a9026765a5a91b1073f636fb0368f6d8973f518a31391d519e20c59388ed88d - languageName: node - linkType: hard - -"@types/estree@npm:0.0.39": - version: 0.0.39 - resolution: "@types/estree@npm:0.0.39" - checksum: 10/9f0f20990dbf725470564d4d815d3758ac688b790f601ea98654b6e0b9797dc3c80306fb525abdacd9e75e014e3d09ad326098eaa2ed1851e4823a8e278538aa - languageName: node - linkType: hard - -"@types/estree@npm:^1.0.5": - version: 1.0.7 - resolution: "@types/estree@npm:1.0.7" - checksum: 10/419c845ece767ad4b21171e6e5b63dabb2eb46b9c0d97361edcd9cabbf6a95fcadb91d89b5fa098d1336fa0b8fceaea82fca97a2ef3971f5c86e53031e157b21 - languageName: node - linkType: hard - -"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.33": - version: 4.17.35 - resolution: "@types/express-serve-static-core@npm:4.17.35" - dependencies: - "@types/node": "npm:*" - "@types/qs": "npm:*" - "@types/range-parser": "npm:*" - "@types/send": "npm:*" - checksum: 10/9f08212ac163e9b2a1005d84cc43ace52d5057dfaa009c575eb3f3a659949b9c9cecec0cbff863622871c56e1c604bd67857a5e1d353256eaf9adacec59f87bf - languageName: node - linkType: hard - -"@types/express@npm:*, @types/express@npm:^4.17.13": - version: 4.17.17 - resolution: "@types/express@npm:4.17.17" - dependencies: - "@types/body-parser": "npm:*" - "@types/express-serve-static-core": "npm:^4.17.33" - "@types/qs": "npm:*" - "@types/serve-static": "npm:*" - checksum: 10/e2959a5fecdc53f8a524891a16e66dfc330ee0519e89c2579893179db686e10cfa6079a68e0fb8fd00eedbcaf3eabfd10916461939f3bc02ef671d848532c37e - languageName: node - linkType: hard - -"@types/glob@npm:^7.1.1": - version: 7.2.0 - resolution: "@types/glob@npm:7.2.0" - dependencies: - "@types/minimatch": "npm:*" - "@types/node": "npm:*" - checksum: 10/6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 - languageName: node - linkType: hard - -"@types/graceful-fs@npm:^4.1.2": - version: 4.1.6 - resolution: "@types/graceful-fs@npm:4.1.6" - dependencies: - "@types/node": "npm:*" - checksum: 10/c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 - languageName: node - linkType: hard - -"@types/hast@npm:^2.0.0": - version: 2.3.10 - resolution: "@types/hast@npm:2.3.10" - dependencies: - "@types/unist": "npm:^2" - checksum: 10/41531b7fbf590b02452996fc63272479c20a07269e370bd6514982cbcd1819b4b84d3ea620f2410d1b9541a23d08ce2eeb0a592145d05e00e249c3d56700d460 - languageName: node - linkType: hard - -"@types/hast@npm:^3.0.0": - version: 3.0.4 - resolution: "@types/hast@npm:3.0.4" - dependencies: - "@types/unist": "npm:*" - checksum: 10/732920d81bb7605895776841b7658b4d8cc74a43a8fa176017cc0fb0ecc1a4c82a2b75a4fe6b71aa262b649d3fb62858c6789efa3793ea1d40269953af96ecb5 - languageName: node - linkType: hard - -"@types/hoist-non-react-statics@npm:*": - version: 3.3.1 - resolution: "@types/hoist-non-react-statics@npm:3.3.1" - dependencies: - "@types/react": "npm:*" - hoist-non-react-statics: "npm:^3.3.0" - checksum: 10/071e6d75a0ed9aa0e9ca2cc529a8c15bf7ac3e4a37aac279772ea6036fd0bf969b67fb627b65cfce65adeab31fec1e9e95b4dcdefeab075b580c0c7174206f63 - languageName: node - linkType: hard - -"@types/html-minifier-terser@npm:^6.0.0": - version: 6.1.0 - resolution: "@types/html-minifier-terser@npm:6.1.0" - checksum: 10/06bb3e1e8ebff43602c826d67f53f1fd3a6b9c751bfbc67d7ea4e85679446a639e20e60adad8c9d44ab4baf1337b3861b91e7e5e2be798575caf0cc1a5712552 - languageName: node - linkType: hard - -"@types/http-cache-semantics@npm:^4.0.2": - version: 4.0.4 - resolution: "@types/http-cache-semantics@npm:4.0.4" - checksum: 10/a59566cff646025a5de396d6b3f44a39ab6a74f2ed8150692e0f31cc52f3661a68b04afe3166ebe0d566bd3259cb18522f46e949576d5204781cd6452b7fe0c5 - languageName: node - linkType: hard - -"@types/http-proxy@npm:^1.17.8": - version: 1.17.11 - resolution: "@types/http-proxy@npm:1.17.11" - dependencies: - "@types/node": "npm:*" - checksum: 10/7cda456611b4adfdd87e4317745af643153d502576fb7095806d5b1b397b9a878b105e14abff9b7ab1d1c71132b61b5fc7052461f766165963950f1b46e18315 - languageName: node - linkType: hard - -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.4 - resolution: "@types/istanbul-lib-coverage@npm:2.0.4" - checksum: 10/a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 - languageName: node - linkType: hard - -"@types/istanbul-lib-report@npm:*": - version: 3.0.0 - resolution: "@types/istanbul-lib-report@npm:3.0.0" - dependencies: - "@types/istanbul-lib-coverage": "npm:*" - checksum: 10/f121dcac8a6b8184f3cab97286d8d519f1937fa8620ada5dbc43b699d602b8be289e4a4bccbd6ee1aade6869d3c9fb68bf04c6fdca8c5b0c4e7e314c31c7900a - languageName: node - linkType: hard - -"@types/istanbul-reports@npm:^3.0.0": - version: 3.0.1 - resolution: "@types/istanbul-reports@npm:3.0.1" - dependencies: - "@types/istanbul-lib-report": "npm:*" - checksum: 10/f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 - languageName: node - linkType: hard - -"@types/js-cookie@npm:^2.2.6": - version: 2.2.7 - resolution: "@types/js-cookie@npm:2.2.7" - checksum: 10/851f47e94ca1fc43661d8f51614d67a613e7810c91b876d0a3b311ce72f7df800107fd02a08cb6948184e12c120b4f058edca2f50424d8798bdcffd6627281e3 - languageName: node - linkType: hard - -"@types/js-yaml@npm:^4.0.0": - version: 4.0.5 - resolution: "@types/js-yaml@npm:4.0.5" - checksum: 10/6fff5f47d97070f1a01022517ce4bd81a0cfac7cd30f9dbc7222dc5f8db4bfe5f5c8cba3f4b02bdbd6f31f691050db97395b33c8df66d1e7c4f66096b41a3df6 - languageName: node - linkType: hard - -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 - languageName: node - linkType: hard - -"@types/json-stable-stringify@npm:^1.0.32": - version: 1.0.34 - resolution: "@types/json-stable-stringify@npm:1.0.34" - checksum: 10/45767ecef0f6aae5680c3be6488d5c493f16046e34f182d7e6a2c69a667aab035799752c6f03017c883b134ad3f80e3f78d7e7da81a9c1f3d01676126baf5d0e - languageName: node - linkType: hard - -"@types/json5@npm:^0.0.29": - version: 0.0.29 - resolution: "@types/json5@npm:0.0.29" - checksum: 10/4e5aed58cabb2bbf6f725da13421aa50a49abb6bc17bfab6c31b8774b073fa7b50d557c61f961a09a85f6056151190f8ac95f13f5b48136ba5841f7d4484ec56 - languageName: node - linkType: hard - -"@types/mdast@npm:^3.0.0": - version: 3.0.15 - resolution: "@types/mdast@npm:3.0.15" - dependencies: - "@types/unist": "npm:^2" - checksum: 10/050a5c1383928b2688dd145382a22535e2af87dc3fd592c843abb7851bcc99893a1ee0f63be19fc4e89779387ec26a57486cfb425b016c0b2a98a17fc4a1e8b3 - languageName: node - linkType: hard - -"@types/mdast@npm:^4.0.0": - version: 4.0.4 - resolution: "@types/mdast@npm:4.0.4" - dependencies: - "@types/unist": "npm:*" - checksum: 10/efe3ec11b9ee0015a396c4fb4cd1b6f31b51b8ae9783c59560e6fc0bf6c2fa1dcc7fccaf45fa09a6c8b3397fab9dc8d431433935cae3835caa70a18f7fc775f8 - languageName: node - linkType: hard - -"@types/mime@npm:*": - version: 3.0.1 - resolution: "@types/mime@npm:3.0.1" - checksum: 10/4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7 - languageName: node - linkType: hard - -"@types/mime@npm:^1": - version: 1.3.2 - resolution: "@types/mime@npm:1.3.2" - checksum: 10/0493368244cced1a69cb791b485a260a422e6fcc857782e1178d1e6f219f1b161793e9f87f5fae1b219af0f50bee24fcbe733a18b4be8fdd07a38a8fb91146fd - languageName: node - linkType: hard - -"@types/minimatch@npm:*": - version: 5.1.2 - resolution: "@types/minimatch@npm:5.1.2" - checksum: 10/94db5060d20df2b80d77b74dd384df3115f01889b5b6c40fa2dfa27cfc03a68fb0ff7c1f2a0366070263eb2e9d6bfd8c87111d4bc3ae93c3f291297c1bf56c85 - languageName: node - linkType: hard - -"@types/minimist@npm:^1.2.0": - version: 1.2.2 - resolution: "@types/minimist@npm:1.2.2" - checksum: 10/b8da83c66eb4aac0440e64674b19564d9d86c80ae273144db9681e5eeff66f238ade9515f5006ffbfa955ceff8b89ad2bd8ec577d7caee74ba101431fb07045d - languageName: node - linkType: hard - -"@types/mocha@npm:^10.0.10": - version: 10.0.10 - resolution: "@types/mocha@npm:10.0.10" - checksum: 10/4e3b61ed5112add86891a5dd3ebdd087714f5e1784a63d47a96424c0825058fd07074e85e43573462f751636c92808fc18a5f3862fe45e649ea98fdc5a3ee2ea - languageName: node - linkType: hard - -"@types/ms@npm:*": - version: 0.7.31 - resolution: "@types/ms@npm:0.7.31" - checksum: 10/6647b295fb2a5b8347c35efabaaed1777221f094be9941d387b4bf11df0eeacb3f8a4e495b8b66ce0e4c00593bc53ab5fc25f01ebb274cd989a834ae578099de - languageName: node - linkType: hard - -"@types/mustache@npm:^4.2.5": - version: 4.2.5 - resolution: "@types/mustache@npm:4.2.5" - checksum: 10/29581027fe420120ae0591e28d44209d0e01adf5175910d03401327777ee9c649a1508e2aa63147c782c7e53fcea4b69b5f9a2fbedcadc5500561d1161ae5ded - languageName: node - linkType: hard - -"@types/node@npm:*, @types/node@npm:22.7.5": - version: 22.7.5 - resolution: "@types/node@npm:22.7.5" - dependencies: - undici-types: "npm:~6.19.2" - checksum: 10/e8ba102f8c1aa7623787d625389be68d64e54fcbb76d41f6c2c64e8cf4c9f4a2370e7ef5e5f1732f3c57529d3d26afdcb2edc0101c5e413a79081449825c57ac - languageName: node - linkType: hard - -"@types/node@npm:20.5.1": - version: 20.5.1 - resolution: "@types/node@npm:20.5.1" - checksum: 10/e91034ba7eda82171dff73d3b30f584941400a5611b45d73a4d8159dc1fc309d4f1a423fbe84fd22d1ba7833383ee299c81ace6fab035c17affd0f4f0cbe7a89 - languageName: node - linkType: hard - -"@types/node@npm:^12.12.54, @types/node@npm:^12.7.1": - version: 12.20.55 - resolution: "@types/node@npm:12.20.55" - checksum: 10/1f916a06fff02faadb09a16ed6e31820ce170798b202ef0b14fc244bfbd721938c54a3a99836e185e4414ca461fe96c5bb5c67c3d248f153555b7e6347f061dd - languageName: node - linkType: hard - -"@types/node@npm:^20.17.6": - version: 20.17.6 - resolution: "@types/node@npm:20.17.6" - dependencies: - undici-types: "npm:~6.19.2" - checksum: 10/714b8b54951950cee662ce80492831ebc51f914a9adf88583cea777ea4d55b88827b2505ff2f53d2bb7753691aaab1b06c027a7b5c63eb153ad4acee1239690c - languageName: node - linkType: hard - -"@types/normalize-package-data@npm:^2.4.0": - version: 2.4.1 - resolution: "@types/normalize-package-data@npm:2.4.1" - checksum: 10/e87bccbf11f95035c89a132b52b79ce69a1e3652fe55962363063c9c0dae0fe2477ebc585e03a9652adc6f381d24ba5589cc5e51849df4ced3d3e004a7d40ed5 - languageName: node - linkType: hard - -"@types/papaparse@npm:^5.3.14": - version: 5.3.14 - resolution: "@types/papaparse@npm:5.3.14" - dependencies: - "@types/node": "npm:*" - checksum: 10/9bd5cc0e6a2c02def6c8903dc4604e499907cb465186ed3532390468082a06f023adbac0216428d0d8e8fe017206780a03d20007041e9fed47c8d391cd69a536 - languageName: node - linkType: hard - -"@types/parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "@types/parse-json@npm:4.0.0" - checksum: 10/4df9de98150d2978afc2161482a3a8e6617883effba3223324f079de97ba7eabd7d84b90ced11c3f82b0c08d4a8383f678c9f73e9c41258f769b3fa234a2bb4f - languageName: node - linkType: hard - -"@types/pbkdf2@npm:^3.0.0": - version: 3.1.0 - resolution: "@types/pbkdf2@npm:3.1.0" - dependencies: - "@types/node": "npm:*" - checksum: 10/d15024b1957c21cf3b8887329d9bd8dfde754cf13a09d76ae25f1391cfc62bb8b8d7b760773c5dbaa748172fba8b3e0c3dbe962af6ccbd69b76df12a48dfba40 - languageName: node - linkType: hard - -"@types/prettier@npm:^2.1.1, @types/prettier@npm:^2.1.5": - version: 2.7.3 - resolution: "@types/prettier@npm:2.7.3" - checksum: 10/cda84c19acc3bf327545b1ce71114a7d08efbd67b5030b9e8277b347fa57b05178045f70debe1d363ff7efdae62f237260713aafc2d7217e06fc99b048a88497 - languageName: node - linkType: hard - -"@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0": - version: 15.7.12 - resolution: "@types/prop-types@npm:15.7.12" - checksum: 10/ac16cc3d0a84431ffa5cfdf89579ad1e2269549f32ce0c769321fdd078f84db4fbe1b461ed5a1a496caf09e637c0e367d600c541435716a55b1d9713f5035dfe - languageName: node - linkType: hard - -"@types/prop-types@npm:^15.7.14": - version: 15.7.14 - resolution: "@types/prop-types@npm:15.7.14" - checksum: 10/d0c5407b9ccc3dd5fae0ccf9b1007e7622ba5e6f1c18399b4f24dff33619d469da4b9fa918a374f19dc0d9fe6a013362aab0b844b606cfc10676efba3f5f736d - languageName: node - linkType: hard - -"@types/q@npm:^1.5.1": - version: 1.5.5 - resolution: "@types/q@npm:1.5.5" - checksum: 10/37bb27dbd602650577052a3c1ee749b0d027caa6ff06ea307f3f2012ee64fa5740e9bf5fe548c8377f319797a5ecb28a602fb2be977339bc9e035f42d91601a3 - languageName: node - linkType: hard - -"@types/qs@npm:*": - version: 6.9.7 - resolution: "@types/qs@npm:6.9.7" - checksum: 10/7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba - languageName: node - linkType: hard - -"@types/range-parser@npm:*": - version: 1.2.4 - resolution: "@types/range-parser@npm:1.2.4" - checksum: 10/b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95 - languageName: node - linkType: hard - -"@types/react-dom@npm:^18.3.1": - version: 18.3.1 - resolution: "@types/react-dom@npm:18.3.1" - dependencies: - "@types/react": "npm:*" - checksum: 10/33f9ba79b26641ddf00a8699c30066b7e3573ab254e97475bf08f82fab83a6d3ce8d4ebad86afeb49bb8df3374390a9ba93125cece33badc4b3e8f7eac3c84d8 - languageName: node - linkType: hard - -"@types/react-is@npm:^18.3.0": - version: 18.3.0 - resolution: "@types/react-is@npm:18.3.0" - dependencies: - "@types/react": "npm:*" - checksum: 10/c7c9303a76902ecc2bd38a27047da8ffb9d5a19fe6e1f785e13698e7641e7afff0c6a49ddf1c22fb20b58f4fb689d83a887641f62db4ec2fdea3d04124a84023 - languageName: node - linkType: hard - -"@types/react-modal@npm:^3.16.3": - version: 3.16.3 - resolution: "@types/react-modal@npm:3.16.3" - dependencies: - "@types/react": "npm:*" - checksum: 10/9622d1983ade28864a85baffcf068722b24f02ac3ec1485dab6a9005a2e0b2f8af78f860be494523d90ba5e182744d1151461a4cc42120a32ed57ec3b7a4cab9 - languageName: node - linkType: hard - -"@types/react-transition-group@npm:^4.4.12": - version: 4.4.12 - resolution: "@types/react-transition-group@npm:4.4.12" - peerDependencies: - "@types/react": "*" - checksum: 10/ea14bc84f529a3887f9954b753843820ac8a3c49fcdfec7840657ecc6a8800aad98afdbe4b973eb96c7252286bde38476fcf64b1c09527354a9a9366e516d9a2 - languageName: node - linkType: hard - -"@types/react@npm:*, @types/react@npm:^18.3.12": - version: 18.3.12 - resolution: "@types/react@npm:18.3.12" - dependencies: - "@types/prop-types": "npm:*" - csstype: "npm:^3.0.2" - checksum: 10/c9bbdfeacd5347d2240e0d2cb5336bc57dbc1b9ff557b6c4024b49df83419e4955553518169d3736039f1b62608e15b35762a6c03d49bd86e33add4b43b19033 - languageName: node - linkType: hard - -"@types/resolve@npm:1.17.1": - version: 1.17.1 - resolution: "@types/resolve@npm:1.17.1" - dependencies: - "@types/node": "npm:*" - checksum: 10/dc6a6df507656004e242dcb02c784479deca516d5f4b58a1707e708022b269ae147e1da0521f3e8ad0d63638869d87e0adc023f0bd5454aa6f72ac66c7525cf5 - languageName: node - linkType: hard - -"@types/retry@npm:0.12.0": - version: 0.12.0 - resolution: "@types/retry@npm:0.12.0" - checksum: 10/bbd0b88f4b3eba7b7acfc55ed09c65ef6f2e1bcb4ec9b4dca82c66566934351534317d294a770a7cc6c0468d5573c5350abab6e37c65f8ef254443e1b028e44d - languageName: node - linkType: hard - -"@types/secp256k1@npm:^4.0.1": - version: 4.0.3 - resolution: "@types/secp256k1@npm:4.0.3" - dependencies: - "@types/node": "npm:*" - checksum: 10/aa8176f3fb9a9f37189592425cb6bfec4ffcf3dc397f2bfd8e3acd06be25f5213cbc0df01f541c7cc955b906a61befd5c1092d46adc62e489970bfebf4409e1d - languageName: node - linkType: hard - -"@types/semver@npm:^7.3.12": - version: 7.5.0 - resolution: "@types/semver@npm:7.5.0" - checksum: 10/8fbfbf79e9c14c3c20160a42145a146cba44d9763d0fac78358b394dc36e41bc2590bc4f0129c6fcbbc9b30f12ea1ba821bfe84b29dc80897f315cc7dd251393 - languageName: node - linkType: hard - -"@types/send@npm:*": - version: 0.17.1 - resolution: "@types/send@npm:0.17.1" - dependencies: - "@types/mime": "npm:^1" - "@types/node": "npm:*" - checksum: 10/6420837887858f7aa82f2c0272f73edb42385bd0978f43095e83590a405d86c8cc6d918c30b2d542f1d8bddc9f3d16c2e8fdfca936940de71b97c45f228d1896 - languageName: node - linkType: hard - -"@types/serve-index@npm:^1.9.1": - version: 1.9.1 - resolution: "@types/serve-index@npm:1.9.1" - dependencies: - "@types/express": "npm:*" - checksum: 10/026f3995fb500f6df7c3fe5009e53bad6d739e20b84089f58ebfafb2f404bbbb6162bbe33f72d2f2af32d5b8d3799c8e179793f90d9ed5871fb8591190bb6056 - languageName: node - linkType: hard - -"@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": - version: 1.15.1 - resolution: "@types/serve-static@npm:1.15.1" - dependencies: - "@types/mime": "npm:*" - "@types/node": "npm:*" - checksum: 10/e556d611a4240d338afe90c080f9987bbeecee97f8fd3a8aabac07fa6bc3652a3c3f06214fb25f709547c4dcee9f0a723f24c799758484c6db7f46c0235d5b4f - languageName: node - linkType: hard - -"@types/sinon@npm:^17.0.4": - version: 17.0.4 - resolution: "@types/sinon@npm:17.0.4" - dependencies: - "@types/sinonjs__fake-timers": "npm:*" - checksum: 10/286c34e66e3573673ba59a332ac81189e20dd591c5c5360c8ff3ed83a59a60bdb1d4c8f13ab8863a4d5ce636282e4b11c640b87f398663eee152988ca09b1933 - languageName: node - linkType: hard - -"@types/sinonjs__fake-timers@npm:*": - version: 8.1.5 - resolution: "@types/sinonjs__fake-timers@npm:8.1.5" - checksum: 10/3a0b285fcb8e1eca435266faa27ffff206608b69041022a42857274e44d9305822e85af5e7a43a9fae78d2ab7dc0fcb49f3ae3bda1fa81f0203064dbf5afd4f6 - languageName: node - linkType: hard - -"@types/sockjs@npm:^0.3.33": - version: 0.3.33 - resolution: "@types/sockjs@npm:0.3.33" - dependencies: - "@types/node": "npm:*" - checksum: 10/b9bbb2b5c5ead2fb884bb019f61a014e37410bddd295de28184e1b2e71ee6b04120c5ba7b9954617f0bdf962c13d06249ce65004490889c747c80d3f628ea842 - languageName: node - linkType: hard - -"@types/stack-trace@npm:^0.0.33": - version: 0.0.33 - resolution: "@types/stack-trace@npm:0.0.33" - checksum: 10/cec5fbbe3bdcdef82763f917e99ca35a1b92ac96aa7982d09548072c5eff219d8216cf75f1ccfeec9686c91a035cc0d55dda6a76a222022616de275dc5d3a8c1 - languageName: node - linkType: hard - -"@types/stack-utils@npm:^2.0.0": - version: 2.0.1 - resolution: "@types/stack-utils@npm:2.0.1" - checksum: 10/205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 - languageName: node - linkType: hard - -"@types/styled-components@npm:^5.1.34": - version: 5.1.34 - resolution: "@types/styled-components@npm:5.1.34" - dependencies: - "@types/hoist-non-react-statics": "npm:*" - "@types/react": "npm:*" - csstype: "npm:^3.0.2" - checksum: 10/3da291b46f03d378a0176c9d034deee7ee0684c5d62e1c5ce82f3be0972918eaa806f45c62e9a4f1c8d24c5ba6571c260caba2493fc7e82b528ac7d15903e2c1 - languageName: node - linkType: hard - -"@types/stylis@npm:4.2.5": - version: 4.2.5 - resolution: "@types/stylis@npm:4.2.5" - checksum: 10/f8dde326432a7047b6684b96442f0e2ade2cfe8c29bf56217fb8cbbe4763997051fa9dc0f8dba4aeed2fddb794b4bc91feba913b780666b3adc28198ac7c63d4 - languageName: node - linkType: hard - -"@types/trusted-types@npm:*, @types/trusted-types@npm:^2.0.2": - version: 2.0.7 - resolution: "@types/trusted-types@npm:2.0.7" - checksum: 10/8e4202766a65877efcf5d5a41b7dd458480b36195e580a3b1085ad21e948bc417d55d6f8af1fd2a7ad008015d4117d5fdfe432731157da3c68678487174e4ba3 - languageName: node - linkType: hard - -"@types/unist@npm:*, @types/unist@npm:^3.0.0": - version: 3.0.3 - resolution: "@types/unist@npm:3.0.3" - checksum: 10/96e6453da9e075aaef1dc22482463898198acdc1eeb99b465e65e34303e2ec1e3b1ed4469a9118275ec284dc98019f63c3f5d49422f0e4ac707e5ab90fb3b71a - languageName: node - linkType: hard - -"@types/unist@npm:^2, @types/unist@npm:^2.0.0": - version: 2.0.10 - resolution: "@types/unist@npm:2.0.10" - checksum: 10/e2924e18dedf45f68a5c6ccd6015cd62f1643b1b43baac1854efa21ae9e70505db94290434a23da1137d9e31eb58e54ca175982005698ac37300a1c889f6c4aa - languageName: node - linkType: hard - -"@types/uuid@npm:^8.3.4": - version: 8.3.4 - resolution: "@types/uuid@npm:8.3.4" - checksum: 10/6f11f3ff70f30210edaa8071422d405e9c1d4e53abbe50fdce365150d3c698fe7bbff65c1e71ae080cbfb8fded860dbb5e174da96fdbbdfcaa3fb3daa474d20f - languageName: node - linkType: hard - -"@types/ws@npm:^7.4.4": - version: 7.4.7 - resolution: "@types/ws@npm:7.4.7" - dependencies: - "@types/node": "npm:*" - checksum: 10/5236b6c54817bdf17674337db5776bb34a876b77a90d885d0f70084c9d453cc2f21703207cc1147d33a9e49a4306773830fbade4729b01ffe33ef0c82cd4c701 - languageName: node - linkType: hard - -"@types/ws@npm:^8.0.0, @types/ws@npm:^8.2.2, @types/ws@npm:^8.5.5": - version: 8.5.11 - resolution: "@types/ws@npm:8.5.11" - dependencies: - "@types/node": "npm:*" - checksum: 10/950d13b762fc7c092a0fc1450c41229a1d41abb93cb72251068885bd46fa4bbcf461c00df2e77de3f7a547371998b650a720ed90417562af0772b14a8a009dec - languageName: node - linkType: hard - -"@types/yargs-parser@npm:*": - version: 21.0.0 - resolution: "@types/yargs-parser@npm:21.0.0" - checksum: 10/c4caec730c1ee09466588389ba4ac83d85a01423c539b9565bb5b5a084bff3f4e47bfb7c06e963c0ef8d4929cf6fca0bc2923a33ef16727cdba60e95c8cdd0d0 - languageName: node - linkType: hard - -"@types/yargs@npm:^16.0.0": - version: 16.0.5 - resolution: "@types/yargs@npm:16.0.5" - dependencies: - "@types/yargs-parser": "npm:*" - checksum: 10/9673a69487768dad14e805777bca262f7a5774d3a0964981105ffc04ff95e754f1109fa2c8210a0fe863f263c580ddf667e1345f22e018036513245b3dc3c71c - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.8": - version: 17.0.24 - resolution: "@types/yargs@npm:17.0.24" - dependencies: - "@types/yargs-parser": "npm:*" - checksum: 10/03d9a985cb9331b2194a52d57a66aad88bf46aa32b3968a71cc6f39fb05c74f0709f0dd3aa9c0b29099cfe670343e3b1bd2ac6df2abfab596ede4453a616f63f - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/eslint-plugin@npm:^8.15.0": - version: 8.15.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.15.0" - dependencies: - "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.15.0" - "@typescript-eslint/type-utils": "npm:8.15.0" - "@typescript-eslint/utils": "npm:8.15.0" - "@typescript-eslint/visitor-keys": "npm:8.15.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.3.1" - natural-compare: "npm:^1.4.0" - ts-api-utils: "npm:^1.3.0" - peerDependencies: - "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/881a6ff3bb38e731027fa223c3cc38a29ffe32502f294b69f5e8099e7a678bab76845a2dfd4ab4d2f301c0f433e9c5e220ea5c8f13f91a508b00b997aaf3e4ed - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:^5.5.0": - version: 5.60.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.60.0" - dependencies: - "@eslint-community/regexpp": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:5.60.0" - "@typescript-eslint/type-utils": "npm:5.60.0" - "@typescript-eslint/utils": "npm:5.60.0" - debug: "npm:^4.3.4" - grapheme-splitter: "npm:^1.0.4" - ignore: "npm:^5.2.0" - natural-compare-lite: "npm:^1.4.0" - semver: "npm:^7.3.7" - tsutils: "npm:^3.21.0" - peerDependencies: - "@typescript-eslint/parser": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/f028f76733a82662891a9b234eebb122bbcd365e77cd1829613ed7770646bde8bb65f19eb2a5de6e85b42110f711a7cb42681884352f38d9575dae8b8660f593 - languageName: node - linkType: hard - -"@typescript-eslint/experimental-utils@npm:^5.0.0": - version: 5.60.0 - resolution: "@typescript-eslint/experimental-utils@npm:5.60.0" - dependencies: - "@typescript-eslint/utils": "npm:5.60.0" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10/37d46701a35c4329ba24ce8ed063362978a58d0b429db80f520f7e5ba71616e5cab76c07fe8360a6a71ddb9872af9ace7e329c879915c73e9efc598c2283ec77 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/parser@npm:^8.15.0": - version: 8.15.0 - resolution: "@typescript-eslint/parser@npm:8.15.0" - dependencies: - "@typescript-eslint/scope-manager": "npm:8.15.0" - "@typescript-eslint/types": "npm:8.15.0" - "@typescript-eslint/typescript-estree": "npm:8.15.0" - "@typescript-eslint/visitor-keys": "npm:8.15.0" - debug: "npm:^4.3.4" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/2261cb63f561db8a613edc2307e9ef3826754b3d6876de076aa768f63bbf5428fb939ce1f050fd7f8512fecca15e7a70ee4f09e0aab9030737ea38a7bc37a4be - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^5.5.0": - version: 5.60.0 - resolution: "@typescript-eslint/parser@npm:5.60.0" - dependencies: - "@typescript-eslint/scope-manager": "npm:5.60.0" - "@typescript-eslint/types": "npm:5.60.0" - "@typescript-eslint/typescript-estree": "npm:5.60.0" - debug: "npm:^4.3.4" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/30851ad5e62cdb39f26a4b1b1d334bf981b3788dfb2d8b454b2c6ac9f27d6e3b3ddb607be209d6801943ca0642bb57c5efa9272fd0da882f287949a97bd0843c - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:5.60.0": - version: 5.60.0 - resolution: "@typescript-eslint/scope-manager@npm:5.60.0" - dependencies: - "@typescript-eslint/types": "npm:5.60.0" - "@typescript-eslint/visitor-keys": "npm:5.60.0" - checksum: 10/157daafbefdb4e773d2cfdcd65f57f56470fbf38dcdb41827785421c653ced9cc3c5615dbd058ab3f112ffc644ce75b3f6ed412e26dd7247b4fe37f48bd30ffb - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:8.15.0": - version: 8.15.0 - resolution: "@typescript-eslint/scope-manager@npm:8.15.0" - dependencies: - "@typescript-eslint/types": "npm:8.15.0" - "@typescript-eslint/visitor-keys": "npm:8.15.0" - checksum: 10/70abd5f049c5568a1b33391d85b5842ffae513f5b2bb5630bd26619a50e41ea5e6b620970958f94e0129ffff9ab69997f396f782195923aa45dfbb2df0941a14 - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:5.60.0": - version: 5.60.0 - resolution: "@typescript-eslint/type-utils@npm:5.60.0" - dependencies: - "@typescript-eslint/typescript-estree": "npm:5.60.0" - "@typescript-eslint/utils": "npm:5.60.0" - debug: "npm:^4.3.4" - tsutils: "npm:^3.21.0" - peerDependencies: - eslint: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/b2308304e70db17dc2eb3a7c3d63353ff7387da649af765266955465b72e35b0b860540f3b88ff8918c304177519b5bceec1c5193b050982a8bbf5b9cfede780 - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:8.15.0": - version: 8.15.0 - resolution: "@typescript-eslint/type-utils@npm:8.15.0" - dependencies: - "@typescript-eslint/typescript-estree": "npm:8.15.0" - "@typescript-eslint/utils": "npm:8.15.0" - debug: "npm:^4.3.4" - ts-api-utils: "npm:^1.3.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/612f0499f7ee89bd8b70531daba1edd343648def2284c414684db9b7636f4beba7c995e05fe8222c5e63f4dd78fdcbb7bcd8453c2c6f376bc73731fa511a5b0f - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:5.60.0": - version: 5.60.0 - resolution: "@typescript-eslint/types@npm:5.60.0" - checksum: 10/5a5d7961e7431f2e15597309de0679752726c7df7dfe70093664485ad3bcbe729249b96a4241c2b5a3fcc08541eeb4ece0e785cf295d85aeaee82c9c4626371d - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:8.15.0": - version: 8.15.0 - resolution: "@typescript-eslint/types@npm:8.15.0" - checksum: 10/d31605748984794e586ed62e9052bd3794ba646ae75f60b9da5de644ad0e76aa64e47386a4e113ba2d66836927e03c836586ef586261c8ae627acc06fb7e275c - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:5.60.0": - version: 5.60.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.60.0" - dependencies: - "@typescript-eslint/types": "npm:5.60.0" - "@typescript-eslint/visitor-keys": "npm:5.60.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - semver: "npm:^7.3.7" - tsutils: "npm:^3.21.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/78a3934a383874b8cf85292cd6328928b23983b65204fd855c61227deb6f4dcc196fdeef7c977670dc4070feb2d810df44a38da7409be5e31385c326f14b2378 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:8.15.0": - version: 8.15.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.15.0" - dependencies: - "@typescript-eslint/types": "npm:8.15.0" - "@typescript-eslint/visitor-keys": "npm:8.15.0" - debug: "npm:^4.3.4" - fast-glob: "npm:^3.3.2" - is-glob: "npm:^4.0.3" - minimatch: "npm:^9.0.4" - semver: "npm:^7.6.0" - ts-api-utils: "npm:^1.3.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/e9bf3aab855578f046e0a91ff91a7d08423a5c8bc0bedfc5f2af3c9b6eb98a9fe693a23e4bf56791930e838de16811ce91edae07702c9621c0ad7a56838c7c0c - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:5.60.0, @typescript-eslint/utils@npm:^5.58.0": - version: 5.60.0 - resolution: "@typescript-eslint/utils@npm:5.60.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@types/json-schema": "npm:^7.0.9" - "@types/semver": "npm:^7.3.12" - "@typescript-eslint/scope-manager": "npm:5.60.0" - "@typescript-eslint/types": "npm:5.60.0" - "@typescript-eslint/typescript-estree": "npm:5.60.0" - eslint-scope: "npm:^5.1.1" - semver: "npm:^7.3.7" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10/41044f37ab049ded83f4d3baaf93986e9e7162d5bd9d055575004dce8e6a09697f9a93bbcd5385262c263c0c45cb9a47d4a5a4a9fee20b8283211d0d0b51c8a1 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:8.15.0, @typescript-eslint/utils@npm:^8.15.0": - version: 8.15.0 - resolution: "@typescript-eslint/utils@npm:8.15.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.15.0" - "@typescript-eslint/types": "npm:8.15.0" - "@typescript-eslint/typescript-estree": "npm:8.15.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/22f6d5727aabbcd108ca2cc0563e85ec3a616759a9ef8aae6c22687e6dc8da3dc2a1ea3e075b811cad5512451bb26fe90d74ebba573c2ba7d219c9a4256a1787 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.60.0": - version: 5.60.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.60.0" - dependencies: - "@typescript-eslint/types": "npm:5.60.0" - eslint-visitor-keys: "npm:^3.3.0" - checksum: 10/5b8a5a47668b2d6f1368bb1a7c5a81d992e18a2011c59957a260e32d6a25eb14aff2d80848c6a3a1eb21d24e94875e11641bf8cc7de2f5f57cec11b03e12f391 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:8.15.0": - version: 8.15.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.15.0" - dependencies: - "@typescript-eslint/types": "npm:8.15.0" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10/31916783cd038ab46a0012d6c664e4d93409b12e911dd1d2fe122506d82fda0ec2411d63632b90c19cd39451c8abfb7a138b0918a4e22019e328c4709748c806 - languageName: node - linkType: hard - -"@ungap/structured-clone@npm:^1.0.0": - version: 1.2.0 - resolution: "@ungap/structured-clone@npm:1.2.0" - checksum: 10/c6fe89a505e513a7592e1438280db1c075764793a2397877ff1351721fe8792a966a5359769e30242b3cd023f2efb9e63ca2ca88019d73b564488cc20e3eab12 - languageName: node - linkType: hard - -"@urql/core@npm:^5.0.8": - version: 5.0.8 - resolution: "@urql/core@npm:5.0.8" - dependencies: - "@0no-co/graphql.web": "npm:^1.0.5" - wonka: "npm:^6.3.2" - checksum: 10/c973e6e89785ae45ef447726557143ce7bc9d9f5b887297f0b315b2ff546d20bdfb814a4c899644bd5c5814761fc8d75a8ac66f67f3d57a3c2eadd3ec88adb60 - languageName: node - linkType: hard - -"@vitest/expect@npm:1.6.1": - version: 1.6.1 - resolution: "@vitest/expect@npm:1.6.1" - dependencies: - "@vitest/spy": "npm:1.6.1" - "@vitest/utils": "npm:1.6.1" - chai: "npm:^4.3.10" - checksum: 10/8aa366cc629bba4170eadebf092de9f64b46592fde9455b070cb7616dcba54f03d479e5844da0ddadecbc19a4f781a0b0d72ab2275cfccca54fd51398ac1b5d5 - languageName: node - linkType: hard - -"@vitest/runner@npm:1.6.1": - version: 1.6.1 - resolution: "@vitest/runner@npm:1.6.1" - dependencies: - "@vitest/utils": "npm:1.6.1" - p-limit: "npm:^5.0.0" - pathe: "npm:^1.1.1" - checksum: 10/b3ee2cb7b80108c48505f71e291b7a70c819dc4c704c77d44beb722d641c5ef8e6f623e95a0259a3d0e8178d1b3559f426d03f13a3500420d1c2b8802e0128c4 - languageName: node - linkType: hard - -"@vitest/snapshot@npm:1.6.1": - version: 1.6.1 - resolution: "@vitest/snapshot@npm:1.6.1" - dependencies: - magic-string: "npm:^0.30.5" - pathe: "npm:^1.1.1" - pretty-format: "npm:^29.7.0" - checksum: 10/f78876503ac850ac3f0a0766133cd020d83c1e665711d4e4370f5f408051b8da7a6294882c549b00a90f03c4ca25b7c41893514a7d5f9f336e6a47ad533b4cb1 - languageName: node - linkType: hard - -"@vitest/spy@npm:1.6.1": - version: 1.6.1 - resolution: "@vitest/spy@npm:1.6.1" - dependencies: - tinyspy: "npm:^2.2.0" - checksum: 10/55076c8dad8585c4d3923ec1e948e97746150d9d259a7b6045d8dd0e22babc631b22c31882c976c25b68cfbaf11d9d47fe0a77e68c3f1b8973b90c6b835becdb - languageName: node - linkType: hard - -"@vitest/ui@npm:^1.6.1": - version: 1.6.1 - resolution: "@vitest/ui@npm:1.6.1" - dependencies: - "@vitest/utils": "npm:1.6.1" - fast-glob: "npm:^3.3.2" - fflate: "npm:^0.8.1" - flatted: "npm:^3.2.9" - pathe: "npm:^1.1.1" - picocolors: "npm:^1.0.0" - sirv: "npm:^2.0.4" - peerDependencies: - vitest: 1.6.1 - checksum: 10/3470206f4349dab3282f4586716c7f96a4df5e777a7ae0d17a4c54e4814c46d8cc7706710ba0d2609e3a11c68f48fb01c8d56caf6c9cd8efc97dd66ca4b411d0 - languageName: node - linkType: hard - -"@vitest/utils@npm:1.6.1": - version: 1.6.1 - resolution: "@vitest/utils@npm:1.6.1" - dependencies: - diff-sequences: "npm:^29.6.3" - estree-walker: "npm:^3.0.3" - loupe: "npm:^2.3.7" - pretty-format: "npm:^29.7.0" - checksum: 10/2aa8718c5e0705f28a8e94ac00055a48789b1badda79d3578d21241557195816508677ecd5f41fe355edb204e6f817124f059c4806102e040cc8890d8691ae9a - languageName: node - linkType: hard - -"@volar/language-core@npm:2.4.10, @volar/language-core@npm:~2.4.1": - version: 2.4.10 - resolution: "@volar/language-core@npm:2.4.10" - dependencies: - "@volar/source-map": "npm:2.4.10" - checksum: 10/2bfc33a5cf215810ff9f9e058e2cb3d1148e21ff69164fa854b6933673db0521cfac8313f7ad3fba8f314d22945fbe2a8ae572888bdf816a820cfa17d4c75ee3 - languageName: node - linkType: hard - -"@volar/source-map@npm:2.4.10": - version: 2.4.10 - resolution: "@volar/source-map@npm:2.4.10" - checksum: 10/8067c4a52bb54709bb74639419242ada294348f05cd5e22bc4a3cdfe4f7b18b9292c8b231805a56bda306890b97a3969e57d4da49d294e2b6122ec1e74f707e2 - languageName: node - linkType: hard - -"@volar/typescript@npm:^2.4.4": - version: 2.4.10 - resolution: "@volar/typescript@npm:2.4.10" - dependencies: - "@volar/language-core": "npm:2.4.10" - path-browserify: "npm:^1.0.1" - vscode-uri: "npm:^3.0.8" - checksum: 10/dab415048adac8c260d824092ccac47023600cc580032c3f409d88953bacd3f2568ff666cfcf49d63ef2babec86325886d5dc32ed492335248bfd5580bbadc29 - languageName: node - linkType: hard - -"@vue/compiler-core@npm:3.5.13": - version: 3.5.13 - resolution: "@vue/compiler-core@npm:3.5.13" - dependencies: - "@babel/parser": "npm:^7.25.3" - "@vue/shared": "npm:3.5.13" - entities: "npm:^4.5.0" - estree-walker: "npm:^2.0.2" - source-map-js: "npm:^1.2.0" - checksum: 10/22f042bb47c8a1edb9d602e24da8092ab542d5640f0459a9b99ecf35f90e96678f870209dd30f774f5340c6d817d3c5a46ca49cefb9659ee5b228bd42d1f076a - languageName: node - linkType: hard - -"@vue/compiler-dom@npm:^3.4.0": - version: 3.5.13 - resolution: "@vue/compiler-dom@npm:3.5.13" - dependencies: - "@vue/compiler-core": "npm:3.5.13" - "@vue/shared": "npm:3.5.13" - checksum: 10/5dc628c52091264a443c2d7326b759d7d3999c7e9c00078c2eb370b778e60b9f2ef258a8decf2fd97c8fa0923f895d449eabc1e5bc3d8a45d3ef99c9eb0599d7 - languageName: node - linkType: hard - -"@vue/compiler-sfc@npm:2.7.14": - version: 2.7.14 - resolution: "@vue/compiler-sfc@npm:2.7.14" - dependencies: - "@babel/parser": "npm:^7.18.4" - postcss: "npm:^8.4.14" - source-map: "npm:^0.6.1" - checksum: 10/2ffdd45072527bd7a77f1092e996c56f61ed6b642834cacb1dd214cf4f079e524cc1f38e0bfb6a00d2f8b2ab1a43bc777bb12efd787185782704ae47d6e3b8a5 - languageName: node - linkType: hard - -"@vue/compiler-vue2@npm:^2.7.16": - version: 2.7.16 - resolution: "@vue/compiler-vue2@npm:2.7.16" - dependencies: - de-indent: "npm:^1.0.2" - he: "npm:^1.2.0" - checksum: 10/739ad06be19206b2715707c226a070509bcf28c31b539a6fc932d220eb7b0c09109d71fded573ed0c4073429793a3513ca4a4e69ad4f7afc0c5bc3c28639e871 - languageName: node - linkType: hard - -"@vue/component-compiler-utils@npm:^3.1.0": - version: 3.3.0 - resolution: "@vue/component-compiler-utils@npm:3.3.0" - dependencies: - consolidate: "npm:^0.15.1" - hash-sum: "npm:^1.0.2" - lru-cache: "npm:^4.1.2" - merge-source-map: "npm:^1.1.0" - postcss: "npm:^7.0.36" - postcss-selector-parser: "npm:^6.0.2" - prettier: "npm:^1.18.2 || ^2.0.0" - source-map: "npm:~0.6.1" - vue-template-es2015-compiler: "npm:^1.9.0" - dependenciesMeta: - prettier: - optional: true - checksum: 10/746171390fe5dff11c1cdbac0ee5486b3064013149a6615e97888f62f8f3f743baaa583f7797be7a4f6a70097edf6946af2cebb6dcc3c49b529f0a0eedc2c15f - languageName: node - linkType: hard - -"@vue/language-core@npm:2.1.6": - version: 2.1.6 - resolution: "@vue/language-core@npm:2.1.6" - dependencies: - "@volar/language-core": "npm:~2.4.1" - "@vue/compiler-dom": "npm:^3.4.0" - "@vue/compiler-vue2": "npm:^2.7.16" - "@vue/shared": "npm:^3.4.0" - computeds: "npm:^0.0.1" - minimatch: "npm:^9.0.3" - muggle-string: "npm:^0.4.1" - path-browserify: "npm:^1.0.1" - peerDependencies: - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/640d4af0031975620cd3a8050bb4b0f4ed333f241ded195e3bf8c4e571c720b4e3bec3947caf2b10e4e2de19deb7621982d15439de3732d510cd43e325c74a50 - languageName: node - linkType: hard - -"@vue/shared@npm:3.5.13, @vue/shared@npm:^3.4.0": - version: 3.5.13 - resolution: "@vue/shared@npm:3.5.13" - checksum: 10/5c0c24f443533392dde08c3e4272ff2e19af9762f90baeaa808850e05106537bbd9e2d2ad2081d979b8c4bc89902395b46036b67f74c60b76025924de37833b1 - languageName: node - linkType: hard - -"@wagmi/cli@npm:^2.2.0": - version: 2.2.0 - resolution: "@wagmi/cli@npm:2.2.0" - dependencies: - abitype: "npm:^1.0.4" - bundle-require: "npm:^4.0.2" - cac: "npm:^6.7.14" - change-case: "npm:^5.4.4" - chokidar: "npm:4.0.1" - dedent: "npm:^0.7.0" - dotenv: "npm:^16.3.1" - dotenv-expand: "npm:^10.0.0" - esbuild: "npm:^0.19.0" - escalade: "npm:3.2.0" - fdir: "npm:^6.1.1" - nanospinner: "npm:1.2.2" - pathe: "npm:^1.1.2" - picocolors: "npm:^1.0.0" - picomatch: "npm:^3.0.0" - prettier: "npm:^3.0.3" - viem: "npm:2.x" - zod: "npm:^3.22.2" - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - bin: - wagmi: dist/esm/cli.js - checksum: 10/b387fcb034078f069ab93da7472e6639159b196c2377180cf52d2a2d82d92189df170f4e765d33fb5fc3eaf593beafa0b67b3269d3364c2bb0327877e494e9b8 - languageName: node - linkType: hard - -"@wagmi/cli@npm:^2.3.2": - version: 2.3.2 - resolution: "@wagmi/cli@npm:2.3.2" - dependencies: - abitype: "npm:^1.0.4" - bundle-require: "npm:^5.1.0" - cac: "npm:^6.7.14" - change-case: "npm:^5.4.4" - chokidar: "npm:4.0.1" - dedent: "npm:^0.7.0" - dotenv: "npm:^16.3.1" - dotenv-expand: "npm:^10.0.0" - esbuild: "npm:~0.25.4" - escalade: "npm:3.2.0" - fdir: "npm:^6.1.1" - nanospinner: "npm:1.2.2" - pathe: "npm:^1.1.2" - picocolors: "npm:^1.0.0" - picomatch: "npm:^3.0.0" - prettier: "npm:^3.0.3" - viem: "npm:2.x" - zod: "npm:^3.22.2" - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - bin: - wagmi: dist/esm/cli.js - checksum: 10/85c6b1d4960c6d080d067f7dbac34e6a27d822690d33ef6c131b7714f6be13c5e04b2dd506fce38992ee6183ebe0fb48160e30f4cf901a27ccf34fd1b2dae529 - languageName: node - linkType: hard - -"@wagmi/connectors@npm:5.7.11, @wagmi/connectors@npm:>=5.7.11, @wagmi/connectors@npm:^5.7.11": - version: 5.7.11 - resolution: "@wagmi/connectors@npm:5.7.11" - dependencies: - "@coinbase/wallet-sdk": "npm:4.3.0" - "@metamask/sdk": "npm:0.32.0" - "@safe-global/safe-apps-provider": "npm:0.18.5" - "@safe-global/safe-apps-sdk": "npm:9.1.0" - "@walletconnect/ethereum-provider": "npm:2.19.1" - cbw-sdk: "npm:@coinbase/wallet-sdk@3.9.3" - peerDependencies: - "@wagmi/core": 2.16.7 - typescript: ">=5.0.4" - viem: 2.x - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/86365b458c187c461b466ca95b8e6400f08840bc7be9dd95ae48bdbd6cdb94f54c042456a0377b0b7048fef2e489a2a1c47ae3b4d89d5ebb91d2186b9e42bd12 - languageName: node - linkType: hard - -"@wagmi/core@npm:2.16.7, @wagmi/core@npm:^2.16.5, @wagmi/core@npm:^2.16.7": - version: 2.16.7 - resolution: "@wagmi/core@npm:2.16.7" - dependencies: - eventemitter3: "npm:5.0.1" - mipd: "npm:0.0.7" - zustand: "npm:5.0.0" - peerDependencies: - "@tanstack/query-core": ">=5.0.0" - typescript: ">=5.0.4" - viem: 2.x - peerDependenciesMeta: - "@tanstack/query-core": - optional: true - typescript: - optional: true - checksum: 10/8ed7abaccca589b7de20d7a9be6d7490df77608de786a514ebc0a0287f53dc8d88bab1965f3d1d73304a7b77b63165e9a7f15db919204769736f9adafafe9dfd - languageName: node - linkType: hard - -"@wagmi/core@npm:^2.16.3": - version: 2.16.3 - resolution: "@wagmi/core@npm:2.16.3" - dependencies: - eventemitter3: "npm:5.0.1" - mipd: "npm:0.0.7" - zustand: "npm:5.0.0" - peerDependencies: - "@tanstack/query-core": ">=5.0.0" - typescript: ">=5.0.4" - viem: 2.x - peerDependenciesMeta: - "@tanstack/query-core": - optional: true - typescript: - optional: true - checksum: 10/3246b0f16ffdb1251113b8b34c3c7a98fc5d556caf1f7162a37610eccaf0e83864fed756ebbb88b5e3cd8589b90a3dd03fbad82d7179672a4a1d02494b59bdc3 - languageName: node - linkType: hard - -"@wallet-standard/app@npm:^1.1.0": - version: 1.1.0 - resolution: "@wallet-standard/app@npm:1.1.0" - dependencies: - "@wallet-standard/base": "npm:^1.1.0" - checksum: 10/d233cc79fbd857689c8c14a60875df9d8ad120fa1c9d59aeeef7303489cdecd60a12bbc2f3794720aadf6ef369cf09d1409c26c0801273561bcdb12a07b08e19 - languageName: node - linkType: hard - -"@wallet-standard/base@npm:^1.0.1": - version: 1.0.1 - resolution: "@wallet-standard/base@npm:1.0.1" - checksum: 10/cd0b58a77e91d7a0df05c1998ab6b6020461e149f019dedfae7c79f79ff5907165e6840fbea166c856ea324a58d6215f1fe6671d7649b61f7ccb3dd75a2def31 - languageName: node - linkType: hard - -"@wallet-standard/base@npm:^1.1.0": - version: 1.1.0 - resolution: "@wallet-standard/base@npm:1.1.0" - checksum: 10/11dbb8ed80566265916ab193ad5eab1585d55996781a88039d2bc4480428b1e778901b2dcff3e688dcac7de45e8a9272026f37f07f1e75168caff581906c5079 - languageName: node - linkType: hard - -"@wallet-standard/core@npm:^1.0.3": - version: 1.1.0 - resolution: "@wallet-standard/core@npm:1.1.0" - dependencies: - "@wallet-standard/app": "npm:^1.1.0" - "@wallet-standard/base": "npm:^1.1.0" - "@wallet-standard/errors": "npm:^0.1.0" - "@wallet-standard/features": "npm:^1.1.0" - "@wallet-standard/wallet": "npm:^1.1.0" - checksum: 10/0f6a0045c3faa826dd64bea4245c287acb87f111396c261a199d3fa48344bf0b89f3e2bec874be8e32c215da728e7a19a9fe7365d008e8a969d980010a417c18 - languageName: node - linkType: hard - -"@wallet-standard/errors@npm:^0.1.0": - version: 0.1.0 - resolution: "@wallet-standard/errors@npm:0.1.0" - dependencies: - chalk: "npm:^5.3.0" - commander: "npm:^12.1.0" - bin: - errors: bin/cli.mjs - checksum: 10/5d00d0ddf5cb77cc1c9804ef7ef11fd8c7a5281c9642e9bc040a3bb01b809ef4caee7c784b695fbe61ed93bcf2c8c4d624c8b2c91050c94b0f356b124942951d - languageName: node - linkType: hard - -"@wallet-standard/features@npm:^1.0.3": - version: 1.0.3 - resolution: "@wallet-standard/features@npm:1.0.3" - dependencies: - "@wallet-standard/base": "npm:^1.0.1" - checksum: 10/41605e166ddc9c7c097d80fad321a0e379e95f7c8d638ac3480d2909e0d1057a6f73ccb651d315422313bb5152de199a3b71142c9843fc971cd10f3c7814c920 - languageName: node - linkType: hard - -"@wallet-standard/features@npm:^1.1.0": - version: 1.1.0 - resolution: "@wallet-standard/features@npm:1.1.0" - dependencies: - "@wallet-standard/base": "npm:^1.1.0" - checksum: 10/e046f813ec4bfea172aeb6c11358a962afe8f9a6961453e621d624f89d8b5fc8a44404dacfe18d33be815df6e9117bbf914009f5a9f9ea91ff90a136043fcac8 - languageName: node - linkType: hard - -"@wallet-standard/wallet@npm:^1.1.0": - version: 1.1.0 - resolution: "@wallet-standard/wallet@npm:1.1.0" - dependencies: - "@wallet-standard/base": "npm:^1.1.0" - checksum: 10/b56846709c43b1dee6b44f7a9e15d89a00e4408d3d967eb438f415b42c5c52c4cf33a7b3126d0cf0dc0d78f244755e3d084a05824c1397ce58be169426c5337b - languageName: node - linkType: hard - -"@walletconnect/core@npm:2.19.1": - version: 2.19.1 - resolution: "@walletconnect/core@npm:2.19.1" - dependencies: - "@walletconnect/heartbeat": "npm:1.2.2" - "@walletconnect/jsonrpc-provider": "npm:1.0.14" - "@walletconnect/jsonrpc-types": "npm:1.0.4" - "@walletconnect/jsonrpc-utils": "npm:1.0.8" - "@walletconnect/jsonrpc-ws-connection": "npm:1.0.16" - "@walletconnect/keyvaluestorage": "npm:1.1.1" - "@walletconnect/logger": "npm:2.1.2" - "@walletconnect/relay-api": "npm:1.0.11" - "@walletconnect/relay-auth": "npm:1.1.0" - "@walletconnect/safe-json": "npm:1.0.2" - "@walletconnect/time": "npm:1.0.2" - "@walletconnect/types": "npm:2.19.1" - "@walletconnect/utils": "npm:2.19.1" - "@walletconnect/window-getters": "npm:1.0.1" - es-toolkit: "npm:1.33.0" - events: "npm:3.3.0" - uint8arrays: "npm:3.1.0" - checksum: 10/17ecfe5c306433fb56dc3f5603622b596af9721932946288d8ea3a44d72891b1395041886c2342fc57f6c9c604a4607a9ffe5c4415ab7f6795e6b0bf9170f7f7 - languageName: node - linkType: hard - -"@walletconnect/environment@npm:^1.0.1": - version: 1.0.1 - resolution: "@walletconnect/environment@npm:1.0.1" - dependencies: - tslib: "npm:1.14.1" - checksum: 10/f6a1e3456e50cc7cfa58d99fd513ecac75573d0b8bcbbedcb1d7ec04ca9108df16b471afd40761b2a5cb4f66d8e33b7ba25f02c62c8365d68b1bd1ef52c1813e - languageName: node - linkType: hard - -"@walletconnect/ethereum-provider@npm:2.19.1": - version: 2.19.1 - resolution: "@walletconnect/ethereum-provider@npm:2.19.1" - dependencies: - "@walletconnect/jsonrpc-http-connection": "npm:1.0.8" - "@walletconnect/jsonrpc-provider": "npm:1.0.14" - "@walletconnect/jsonrpc-types": "npm:1.0.4" - "@walletconnect/jsonrpc-utils": "npm:1.0.8" - "@walletconnect/keyvaluestorage": "npm:1.1.1" - "@walletconnect/modal": "npm:2.7.0" - "@walletconnect/sign-client": "npm:2.19.1" - "@walletconnect/types": "npm:2.19.1" - "@walletconnect/universal-provider": "npm:2.19.1" - "@walletconnect/utils": "npm:2.19.1" - events: "npm:3.3.0" - checksum: 10/4234c8f3d77d9d378421fcd06fb810ce8f7040925abcd83cc552929947eb25a14b44178a125d6f0e0e1e43a59c0745336bf83be65254487bae1c1279b8d59e50 - languageName: node - linkType: hard - -"@walletconnect/events@npm:1.0.1, @walletconnect/events@npm:^1.0.1": - version: 1.0.1 - resolution: "@walletconnect/events@npm:1.0.1" - dependencies: - keyvaluestorage-interface: "npm:^1.0.0" - tslib: "npm:1.14.1" - checksum: 10/b5a105e9ac4d7d0a500085afd77b71e71a8ab78fd38b033e4ce91f8626fd8c254b1ba49a59c8c0ed8a00a7e8b93995163f414eda73c58694f8f830e453a902b6 - languageName: node - linkType: hard - -"@walletconnect/heartbeat@npm:1.2.2": - version: 1.2.2 - resolution: "@walletconnect/heartbeat@npm:1.2.2" - dependencies: - "@walletconnect/events": "npm:^1.0.1" - "@walletconnect/time": "npm:^1.0.2" - events: "npm:^3.3.0" - checksum: 10/f3a1c3c255ac9bd374b25e1ef65a61b1f623b9118d48471acaac1f9ee4ee1438d8d8cbc77733cdd980809b468443c046328fe5ac4084e01e0892f8c699cf44e7 - languageName: node - linkType: hard - -"@walletconnect/jsonrpc-http-connection@npm:1.0.8": - version: 1.0.8 - resolution: "@walletconnect/jsonrpc-http-connection@npm:1.0.8" - dependencies: - "@walletconnect/jsonrpc-utils": "npm:^1.0.6" - "@walletconnect/safe-json": "npm:^1.0.1" - cross-fetch: "npm:^3.1.4" - events: "npm:^3.3.0" - checksum: 10/c545906243df27fdbde3c8e9005217069dd22ce0f496c59f55843ca8fcb0c1a90d2c0ac6ecb16fa110ed85c36e5486f5a74621a5ca6230667d77ee3b0ae36cc6 - languageName: node - linkType: hard - -"@walletconnect/jsonrpc-provider@npm:1.0.14": - version: 1.0.14 - resolution: "@walletconnect/jsonrpc-provider@npm:1.0.14" - dependencies: - "@walletconnect/jsonrpc-utils": "npm:^1.0.8" - "@walletconnect/safe-json": "npm:^1.0.2" - events: "npm:^3.3.0" - checksum: 10/c3c78f00148043b70213f5174d537b210f1fb231d96103cbf7d0101626578d3c13fe99ac080df7a0056c7128ce488b0523eda0e3d1deed75754672848b4909a5 - languageName: node - linkType: hard - -"@walletconnect/jsonrpc-types@npm:1.0.4, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": - version: 1.0.4 - resolution: "@walletconnect/jsonrpc-types@npm:1.0.4" - dependencies: - events: "npm:^3.3.0" - keyvaluestorage-interface: "npm:^1.0.0" - checksum: 10/8cdc9f7b5e3ae0d702a44a6fc4c388a2b627188df758ffd103ba9aac6596a787d2f319aa8f6928a03d990c71c17d9b876028f36b8e0c37bd5c9026231ed9ba45 - languageName: node - linkType: hard - -"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.8": - version: 1.0.8 - resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" - dependencies: - "@walletconnect/environment": "npm:^1.0.1" - "@walletconnect/jsonrpc-types": "npm:^1.0.3" - tslib: "npm:1.14.1" - checksum: 10/4687b4582a5c33883d94e87ca8bb22d129a2a47b6e1d9e2c3210b74f02d9677723b3bf2283d2f0fa69866b0a66a80cdfada9a2f1c204d485fbd10d2baed1f0a6 - languageName: node - linkType: hard - -"@walletconnect/jsonrpc-ws-connection@npm:1.0.16": - version: 1.0.16 - resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.16" - dependencies: - "@walletconnect/jsonrpc-utils": "npm:^1.0.6" - "@walletconnect/safe-json": "npm:^1.0.2" - events: "npm:^3.3.0" - ws: "npm:^7.5.1" - checksum: 10/98e06097588f895c4ba14b6feb64ed9b5c125d57a4ea3ad3fa6f52fd090fccce60808252c8cefaddc022cfa7fde7551a3aec3bb36e6b08c622207d7554d93e40 - languageName: node - linkType: hard - -"@walletconnect/keyvaluestorage@npm:1.1.1": - version: 1.1.1 - resolution: "@walletconnect/keyvaluestorage@npm:1.1.1" - dependencies: - "@walletconnect/safe-json": "npm:^1.0.1" - idb-keyval: "npm:^6.2.1" - unstorage: "npm:^1.9.0" - peerDependencies: - "@react-native-async-storage/async-storage": 1.x - peerDependenciesMeta: - "@react-native-async-storage/async-storage": - optional: true - checksum: 10/fd9c275b3249d8e9f722866703b5c040eb35d0670c92a297428ffb700ac36c6b9978242beac5d2cfe97eb522ae01307cacd9c79ecf95640878804fce0f13c5e7 - languageName: node - linkType: hard - -"@walletconnect/logger@npm:2.1.2": - version: 2.1.2 - resolution: "@walletconnect/logger@npm:2.1.2" - dependencies: - "@walletconnect/safe-json": "npm:^1.0.2" - pino: "npm:7.11.0" - checksum: 10/2e6d438bd352595fff6691712c83953e3ad6b2b9ab298c5a8b670a024f53a3f744b165e5aa081a79261ee4801b93b6c60698a39947d613d49a8f6e6215ecd4c2 - languageName: node - linkType: hard - -"@walletconnect/modal-core@npm:2.7.0": - version: 2.7.0 - resolution: "@walletconnect/modal-core@npm:2.7.0" - dependencies: - valtio: "npm:1.11.2" - checksum: 10/1549f9ba5c98dfed2f97fbfccfcd2e342550c7ba7a85970bff224258dd397bad0a29721b90fef408dcc6cdfa65c52253476a04c16fece9b4d48792f03c3a4b4f - languageName: node - linkType: hard - -"@walletconnect/modal-ui@npm:2.7.0": - version: 2.7.0 - resolution: "@walletconnect/modal-ui@npm:2.7.0" - dependencies: - "@walletconnect/modal-core": "npm:2.7.0" - lit: "npm:2.8.0" - motion: "npm:10.16.2" - qrcode: "npm:1.5.3" - checksum: 10/00d17001bde7646def34eaffef81c4a580f09fdf10902a7a938cd2a3738f8f1cbb10520c229989b64e147df9f4df8ca31bd1d904f9019acc63327b495fb5b3ed - languageName: node - linkType: hard - -"@walletconnect/modal@npm:2.7.0": - version: 2.7.0 - resolution: "@walletconnect/modal@npm:2.7.0" - dependencies: - "@walletconnect/modal-core": "npm:2.7.0" - "@walletconnect/modal-ui": "npm:2.7.0" - checksum: 10/a6b78cc06479e0aa98516784ff1f81b24839777f0ec38d2f9cc85b4dc932ad6e823187bbb699f80f898e7d4b09d1232134f348eb9d12697e74e742eeaec189f2 - languageName: node - linkType: hard - -"@walletconnect/relay-api@npm:1.0.11": - version: 1.0.11 - resolution: "@walletconnect/relay-api@npm:1.0.11" - dependencies: - "@walletconnect/jsonrpc-types": "npm:^1.0.2" - checksum: 10/d85f88b9744917ee5b36d2df23bf4012819b14b73229f9bdca942bee11dd3b3428808c7528c2b1f6b3d91fa1d34a22b1e20b46533e402301318cbd4ab59b9c17 - languageName: node - linkType: hard - -"@walletconnect/relay-auth@npm:1.1.0": - version: 1.1.0 - resolution: "@walletconnect/relay-auth@npm:1.1.0" - dependencies: - "@noble/curves": "npm:1.8.0" - "@noble/hashes": "npm:1.7.0" - "@walletconnect/safe-json": "npm:^1.0.1" - "@walletconnect/time": "npm:^1.0.2" - uint8arrays: "npm:^3.0.0" - checksum: 10/0fd6c2e05ced76fbc8e6a84c0a8e73458779662aea55568f51cd9066c337d8a12f2869f0bd717024bbe5955cc605241e68505ebac40406ed2a1bdacba42431b1 - languageName: node - linkType: hard - -"@walletconnect/safe-json@npm:1.0.2, @walletconnect/safe-json@npm:^1.0.1, @walletconnect/safe-json@npm:^1.0.2": - version: 1.0.2 - resolution: "@walletconnect/safe-json@npm:1.0.2" - dependencies: - tslib: "npm:1.14.1" - checksum: 10/b9d031dab3916d20fa5241d7ad2be425368ae489995ba3ba18d6ad88e81ad3ed093b8e867b8a4fc44759099896aeb5afee5635858cb80c4819ebc7ebb71ed5a6 - languageName: node - linkType: hard - -"@walletconnect/sign-client@npm:2.19.1": - version: 2.19.1 - resolution: "@walletconnect/sign-client@npm:2.19.1" - dependencies: - "@walletconnect/core": "npm:2.19.1" - "@walletconnect/events": "npm:1.0.1" - "@walletconnect/heartbeat": "npm:1.2.2" - "@walletconnect/jsonrpc-utils": "npm:1.0.8" - "@walletconnect/logger": "npm:2.1.2" - "@walletconnect/time": "npm:1.0.2" - "@walletconnect/types": "npm:2.19.1" - "@walletconnect/utils": "npm:2.19.1" - events: "npm:3.3.0" - checksum: 10/afac2305da95b89796468772218510fe34ed7de4540881718aee56ef1f138217f4c1429bbd49be9146a19c3063c56e212aaf8dfb2c0dfe6061ae2bb3b5cc8c0f - languageName: node - linkType: hard - -"@walletconnect/time@npm:1.0.2, @walletconnect/time@npm:^1.0.2": - version: 1.0.2 - resolution: "@walletconnect/time@npm:1.0.2" - dependencies: - tslib: "npm:1.14.1" - checksum: 10/ea84d0850e63306837f98a228e08a59f6945da38ba5553b1f158abeaa8ec4dc8a0025a0f0cfc843ddf05ce2947da95c02ac1e8cedce7092bbe1c2d46ca816dd9 - languageName: node - linkType: hard - -"@walletconnect/types@npm:2.19.1": - version: 2.19.1 - resolution: "@walletconnect/types@npm:2.19.1" - dependencies: - "@walletconnect/events": "npm:1.0.1" - "@walletconnect/heartbeat": "npm:1.2.2" - "@walletconnect/jsonrpc-types": "npm:1.0.4" - "@walletconnect/keyvaluestorage": "npm:1.1.1" - "@walletconnect/logger": "npm:2.1.2" - events: "npm:3.3.0" - checksum: 10/c587d99c6078eda1ccf7e449e4a32e539ac1c893c0b2eada7b7d127315844ed883753af8be7c5006318b983a291676643e1f02060324d72dda9d0cb21f195c38 - languageName: node - linkType: hard - -"@walletconnect/universal-provider@npm:2.19.1": - version: 2.19.1 - resolution: "@walletconnect/universal-provider@npm:2.19.1" - dependencies: - "@walletconnect/events": "npm:1.0.1" - "@walletconnect/jsonrpc-http-connection": "npm:1.0.8" - "@walletconnect/jsonrpc-provider": "npm:1.0.14" - "@walletconnect/jsonrpc-types": "npm:1.0.4" - "@walletconnect/jsonrpc-utils": "npm:1.0.8" - "@walletconnect/keyvaluestorage": "npm:1.1.1" - "@walletconnect/logger": "npm:2.1.2" - "@walletconnect/sign-client": "npm:2.19.1" - "@walletconnect/types": "npm:2.19.1" - "@walletconnect/utils": "npm:2.19.1" - es-toolkit: "npm:1.33.0" - events: "npm:3.3.0" - checksum: 10/4043010b886ccb749ff16a608e3942e8029ce7c3196f99023f79cc3167f81be542eec35d9a93f5b64e616267337088759fa311d769655fa22fdb00462dc63db7 - languageName: node - linkType: hard - -"@walletconnect/utils@npm:2.19.1": - version: 2.19.1 - resolution: "@walletconnect/utils@npm:2.19.1" - dependencies: - "@noble/ciphers": "npm:1.2.1" - "@noble/curves": "npm:1.8.1" - "@noble/hashes": "npm:1.7.1" - "@walletconnect/jsonrpc-utils": "npm:1.0.8" - "@walletconnect/keyvaluestorage": "npm:1.1.1" - "@walletconnect/relay-api": "npm:1.0.11" - "@walletconnect/relay-auth": "npm:1.1.0" - "@walletconnect/safe-json": "npm:1.0.2" - "@walletconnect/time": "npm:1.0.2" - "@walletconnect/types": "npm:2.19.1" - "@walletconnect/window-getters": "npm:1.0.1" - "@walletconnect/window-metadata": "npm:1.0.1" - bs58: "npm:6.0.0" - detect-browser: "npm:5.3.0" - elliptic: "npm:6.6.1" - query-string: "npm:7.1.3" - uint8arrays: "npm:3.1.0" - viem: "npm:2.23.2" - checksum: 10/cd4bfd4ac395729e6ee1d06e50001c1db0d92a601e99fc34e7dce3e84436750c1f4fee8735ad6f00bc260058455169e27b6cae98f12a817cc90c795f627fe9ef - languageName: node - linkType: hard - -"@walletconnect/window-getters@npm:1.0.1, @walletconnect/window-getters@npm:^1.0.1": - version: 1.0.1 - resolution: "@walletconnect/window-getters@npm:1.0.1" - dependencies: - tslib: "npm:1.14.1" - checksum: 10/8d3fcb134fbbe903ba4a63f1fa5a7849fd443874bf45488260afc2fe3b1cbe211f86da1d76ee844be7c0e8618ae67402f94c213432fd80b04715eaf72e2e00e3 - languageName: node - linkType: hard - -"@walletconnect/window-metadata@npm:1.0.1": - version: 1.0.1 - resolution: "@walletconnect/window-metadata@npm:1.0.1" - dependencies: - "@walletconnect/window-getters": "npm:^1.0.1" - tslib: "npm:1.14.1" - checksum: 10/cf322e0860c4448cefcd81f34bc6d49d1a235a81e74a6146baefb74e47cf6c3c8050b65e534a3dc13f8d2aed3fc59732ccf48d5a01b5b23e08e1847fcffa950c - languageName: node - linkType: hard - -"@webassemblyjs/ast@npm:1.11.6, @webassemblyjs/ast@npm:^1.11.5": - version: 1.11.6 - resolution: "@webassemblyjs/ast@npm:1.11.6" - dependencies: - "@webassemblyjs/helper-numbers": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - checksum: 10/4c1303971ccd5188731c9b01073d9738333f37b946a48c4e049f7b788706cdc66f473cd6f3e791423a94c52a3b2230d070007930d29bccbce238b23835839f3c - languageName: node - linkType: hard - -"@webassemblyjs/floating-point-hex-parser@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" - checksum: 10/29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2 - languageName: node - linkType: hard - -"@webassemblyjs/helper-api-error@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" - checksum: 10/e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f - languageName: node - linkType: hard - -"@webassemblyjs/helper-buffer@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-buffer@npm:1.11.6" - checksum: 10/b14d0573bf680d22b2522e8a341ec451fddd645d1f9c6bd9012ccb7e587a2973b86ab7b89fe91e1c79939ba96095f503af04369a3b356c8023c13a5893221644 - languageName: node - linkType: hard - -"@webassemblyjs/helper-numbers@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" - dependencies: - "@webassemblyjs/floating-point-hex-parser": "npm:1.11.6" - "@webassemblyjs/helper-api-error": "npm:1.11.6" - "@xtuc/long": "npm:4.2.2" - checksum: 10/9ffd258ad809402688a490fdef1fd02222f20cdfe191c895ac215a331343292164e5033dbc0347f0f76f2447865c0b5c2d2e3304ee948d44f7aa27857028fd08 - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" - checksum: 10/4ebf03e9c1941288c10e94e0f813f413f972bfaa1f09be2cc2e5577f300430906b61aa24d52f5ef2f894e8e24e61c6f7c39871d7e3d98bc69460e1b8e00bb20b - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-section@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": "npm:1.11.6" - "@webassemblyjs/helper-buffer": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/wasm-gen": "npm:1.11.6" - checksum: 10/38a615ab3d55f953daaf78b69f145e2cc1ff5288ab71715d1a164408b735c643a87acd7e7ba3e9633c5dd965439a45bb580266b05a06b22ff678d6c013514108 - languageName: node - linkType: hard - -"@webassemblyjs/ieee754@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/ieee754@npm:1.11.6" - dependencies: - "@xtuc/ieee754": "npm:^1.2.0" - checksum: 10/13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de - languageName: node - linkType: hard - -"@webassemblyjs/leb128@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/leb128@npm:1.11.6" - dependencies: - "@xtuc/long": "npm:4.2.2" - checksum: 10/ec3b72db0e7ce7908fe08ec24395bfc97db486063824c0edc580f0973a4cfbadf30529569d9c7db663a56513e45b94299cca03be9e1992ea3308bb0744164f3d - languageName: node - linkType: hard - -"@webassemblyjs/utf8@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/utf8@npm:1.11.6" - checksum: 10/361a537bd604101b320a5604c3c96d1038d83166f1b9fb86cedadc7e81bae54c3785ae5d90bf5b1842f7da08194ccaf0f44a64fcca0cbbd6afe1a166196986d6 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-edit@npm:^1.11.5": - version: 1.11.6 - resolution: "@webassemblyjs/wasm-edit@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": "npm:1.11.6" - "@webassemblyjs/helper-buffer": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/helper-wasm-section": "npm:1.11.6" - "@webassemblyjs/wasm-gen": "npm:1.11.6" - "@webassemblyjs/wasm-opt": "npm:1.11.6" - "@webassemblyjs/wasm-parser": "npm:1.11.6" - "@webassemblyjs/wast-printer": "npm:1.11.6" - checksum: 10/c168bfc6d0cdd371345f36f95a4766d098a96ccc1257e6a6e3a74d987a5c4f2ddd2244a6aecfa5d032a47d74ed2c3b579e00a314d31e4a0b76ad35b31cdfa162 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-gen@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/wasm-gen@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/ieee754": "npm:1.11.6" - "@webassemblyjs/leb128": "npm:1.11.6" - "@webassemblyjs/utf8": "npm:1.11.6" - checksum: 10/f91903506ce50763592863df5d80ffee80f71a1994a882a64cdb83b5e44002c715f1ef1727d8ccb0692d066af34d3d4f5e59e8f7a4e2eeb2b7c32692ac44e363 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-opt@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/wasm-opt@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": "npm:1.11.6" - "@webassemblyjs/helper-buffer": "npm:1.11.6" - "@webassemblyjs/wasm-gen": "npm:1.11.6" - "@webassemblyjs/wasm-parser": "npm:1.11.6" - checksum: 10/e0cfeea381ecbbd0ca1616e9a08974acfe7fc81f8a16f9f2d39f565dc51784dd7043710b6e972f9968692d273e32486b9a8a82ca178d4bd520b2d5e2cf28234d - languageName: node - linkType: hard - -"@webassemblyjs/wasm-parser@npm:1.11.6, @webassemblyjs/wasm-parser@npm:^1.11.5": - version: 1.11.6 - resolution: "@webassemblyjs/wasm-parser@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": "npm:1.11.6" - "@webassemblyjs/helper-api-error": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/ieee754": "npm:1.11.6" - "@webassemblyjs/leb128": "npm:1.11.6" - "@webassemblyjs/utf8": "npm:1.11.6" - checksum: 10/6995e0b7b8ebc52b381459c6a555f87763dcd3975c4a112407682551e1c73308db7af23385972a253dceb5af94e76f9c97cb861e8239b5ed1c3e79b95d8e2097 - languageName: node - linkType: hard - -"@webassemblyjs/wast-printer@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/wast-printer@npm:1.11.6" - dependencies: - "@webassemblyjs/ast": "npm:1.11.6" - "@xtuc/long": "npm:4.2.2" - checksum: 10/fd45fd0d693141d678cc2f6ff2d3a0d7a8884acb1c92fb0c63cf43b7978e9560be04118b12792638a39dd185640453510229e736f3049037d0c361f6435f2d5f - languageName: node - linkType: hard - -"@whatwg-node/disposablestack@npm:^0.0.5": - version: 0.0.5 - resolution: "@whatwg-node/disposablestack@npm:0.0.5" - dependencies: - tslib: "npm:^2.6.3" - checksum: 10/4e47701c51e505f5d793af4ec9ec63f114c73b82dc55c55e16c9ce28a70b094f68f982ca0b054fc28fd195023551a8bd2eb4f9485a3f66230e10b38dc291b75d - languageName: node - linkType: hard - -"@whatwg-node/fetch@npm:^0.10.1": - version: 0.10.3 - resolution: "@whatwg-node/fetch@npm:0.10.3" - dependencies: - "@whatwg-node/node-fetch": "npm:^0.7.7" - urlpattern-polyfill: "npm:^10.0.0" - checksum: 10/dca9741084bfc1c28566af02c57a1ed6030636ea14e6c8079bd7c7b4344507a96f2f4d373ef1847c8b49f9eccfcc034bf4d2876868267aa23222f9dd7856ce0d - languageName: node - linkType: hard - -"@whatwg-node/fetch@npm:^0.9.0, @whatwg-node/fetch@npm:^0.9.20": - version: 0.9.23 - resolution: "@whatwg-node/fetch@npm:0.9.23" - dependencies: - "@whatwg-node/node-fetch": "npm:^0.6.0" - urlpattern-polyfill: "npm:^10.0.0" - checksum: 10/6024a3fcc2175de6a20ea4833c009d0488cf68c01cd235541ec0dba0ce59bb0b0befcd4cd788db0e65b99a5a8755bc00d490dc9d7beeb0c2f35058ef46732fe0 - languageName: node - linkType: hard - -"@whatwg-node/node-fetch@npm:^0.6.0": - version: 0.6.0 - resolution: "@whatwg-node/node-fetch@npm:0.6.0" - dependencies: - "@kamilkisiela/fast-url-parser": "npm:^1.1.4" - busboy: "npm:^1.6.0" - fast-querystring: "npm:^1.1.1" - tslib: "npm:^2.6.3" - checksum: 10/87ad7c4cc68b24499089166617d16cbe25d9107b4d9354c804232f8c53c4fc27d1e2166471d878390442620e09588aa1d8705a8e2ea5bcc2d728a558ad1156c3 - languageName: node - linkType: hard - -"@whatwg-node/node-fetch@npm:^0.7.7": - version: 0.7.7 - resolution: "@whatwg-node/node-fetch@npm:0.7.7" - dependencies: - "@whatwg-node/disposablestack": "npm:^0.0.5" - busboy: "npm:^1.6.0" - tslib: "npm:^2.6.3" - checksum: 10/fe88c2766fc6cbe33c5bf58fb1ce5230f499d083a154643f0c46edfa3db679e173ae13ceb20cb89087252176c42b5e9ad7b540c6979f407b0c2444cf488121d1 - languageName: node - linkType: hard - -"@xobotyi/scrollbar-width@npm:^1.9.5": - version: 1.9.5 - resolution: "@xobotyi/scrollbar-width@npm:1.9.5" - checksum: 10/026ccd174ec3ce032f42794c7e2ee9dab3cfee4f8f9d6ce4f2b4a2fe50cbf8be7406583fb2e203707c699690c5d40a13ee1611f1f67f6ceb01ac2a543acadc30 - languageName: node - linkType: hard - -"@xtuc/ieee754@npm:^1.2.0": - version: 1.2.0 - resolution: "@xtuc/ieee754@npm:1.2.0" - checksum: 10/ab033b032927d77e2f9fa67accdf31b1ca7440974c21c9cfabc8349e10ca2817646171c4f23be98d0e31896d6c2c3462a074fe37752e523abc3e45c79254259c - languageName: node - linkType: hard - -"@xtuc/long@npm:4.2.2": - version: 4.2.2 - resolution: "@xtuc/long@npm:4.2.2" - checksum: 10/7217bae9fe240e0d804969e7b2af11cb04ec608837c78b56ca88831991b287e232a0b7fce8d548beaff42aaf0197ffa471d81be6ac4c4e53b0148025a2c076ec - languageName: node - linkType: hard - -"@yarnpkg/lockfile@npm:^1.1.0": - version: 1.1.0 - resolution: "@yarnpkg/lockfile@npm:1.1.0" - checksum: 10/cd19e1114aaf10a05126aeea8833ef4ca8af8a46e88e12884f8359d19333fd19711036dbc2698dbe937f81f037070cf9a8da45c2e8c6ca19cafd7d15659094ed - languageName: node - linkType: hard - -"@yornaath/batshit-devtools@npm:^1.7.1": - version: 1.7.1 - resolution: "@yornaath/batshit-devtools@npm:1.7.1" - checksum: 10/4980dca86c44b6d6a35ecaf0e5af020fb9589af98ae83ac80edf7ff794ede25a0f8469f2ffdd67d8160d2a268850e30b4fa4eea79e4627f7d628005dad938d08 - languageName: node - linkType: hard - -"@yornaath/batshit@npm:^0.10.0": - version: 0.10.1 - resolution: "@yornaath/batshit@npm:0.10.1" - dependencies: - "@yornaath/batshit-devtools": "npm:^1.7.1" - checksum: 10/bdc0c90e632994bc69fd6d292387f57d8b8c2e3888c4b34dfad70f8d1c782adc04f5603a53fd3295c2f631a1d61107116c07eca91cd401db32c79c05409c0d07 - languageName: node - linkType: hard - -"@zksync/contracts@github:matter-labs/era-contracts#446d391d34bdb48255d5f8fef8a8248925fc98b9": - version: 0.1.0 - resolution: "@zksync/contracts@https://github.com/matter-labs/era-contracts.git#commit=446d391d34bdb48255d5f8fef8a8248925fc98b9" - checksum: 10/982b27c109e55a332f6690e164230a033f3c8292dc816b46798704410796caee5b7b3336d9fd238b5b2aedc7a8ffb54ee294e948d11cfb22e925a4c17392e5ab - languageName: node - linkType: hard - -"JSONStream@npm:^1.0.4, JSONStream@npm:^1.3.5": - version: 1.3.5 - resolution: "JSONStream@npm:1.3.5" - dependencies: - jsonparse: "npm:^1.2.0" - through: "npm:>=2.2.7 <3" - bin: - JSONStream: ./bin.js - checksum: 10/e30daf7b9b2da23076181d9a0e4bec33bc1d97e8c0385b949f1b16ba3366a1d241ec6f077850c01fe32379b5ebb8b96b65496984bc1545a93a5150bf4c267439 - languageName: node - linkType: hard - -"abab@npm:^2.0.3, abab@npm:^2.0.5, abab@npm:^2.0.6": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 10/ebe95d7278999e605823fc515a3b05d689bc72e7f825536e73c95ebf621636874c6de1b749b3c4bf866b96ccd4b3a2802efa313d0e45ad51a413c8c73247db20 - languageName: node - linkType: hard - -"abbrev@npm:1, abbrev@npm:^1.0.0": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: 10/2d882941183c66aa665118bafdab82b7a177e9add5eb2776c33e960a4f3c89cff88a1b38aba13a456de01d0dd9d66a8bea7c903268b21ea91dd1097e1e2e8243 - languageName: node - linkType: hard - -"abbrev@npm:1.0.x": - version: 1.0.9 - resolution: "abbrev@npm:1.0.9" - checksum: 10/5ca5ac34c39d3ae15a90ce5570309e25c0e72d3947bdf95c10a1957f83609bf42831cb4b746d3d96b2a85a52b290832797b8a63b27449f47925b25ca86b78591 - languageName: node - linkType: hard - -"abitype@npm:0.7.1": - version: 0.7.1 - resolution: "abitype@npm:0.7.1" - peerDependencies: - typescript: ">=4.9.4" - zod: ^3 >=3.19.1 - peerDependenciesMeta: - zod: - optional: true - checksum: 10/deee4a18c9c7218ab2e5e57e07e4cb3e2f3e785657be364d098ab0587cd552c4fbb41e1bdddbc6fa52387f51ebd181461fe70a13127cc77091655775fdfb18fe - languageName: node - linkType: hard - -"abitype@npm:1.0.6, abitype@npm:^1.0.4, abitype@npm:^1.0.6": - version: 1.0.6 - resolution: "abitype@npm:1.0.6" - peerDependencies: - typescript: ">=5.0.4" - zod: ^3 >=3.22.0 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - checksum: 10/d04d58f90405c29a3c68353508502d7e870feb27418a6281ba9a13e6aaee42c26b2c5f08f648f058b8eaffac32927194b33f396d2451d18afeccfb654c7285c2 - languageName: node - linkType: hard - -"abitype@npm:1.0.8, abitype@npm:^1.0.8": - version: 1.0.8 - resolution: "abitype@npm:1.0.8" - peerDependencies: - typescript: ">=5.0.4" - zod: ^3 >=3.22.0 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - checksum: 10/878e74fbac6a971953649b6216950437aa5834a604e9fa833a5b275a6967cff59857c7e43594ae906387d2fb7cad9370138dec4298eb8814815a3ffb6365902c - languageName: node - linkType: hard - -"abitype@npm:^0.10.3": - version: 0.10.3 - resolution: "abitype@npm:0.10.3" - peerDependencies: - typescript: ">=5.0.4" - zod: ^3 >=3.22.0 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - checksum: 10/6eefcd8a63e2ecfaa9089125734d4542e8094160b43b38469eba3dfece167947ef8754c895be1a6b312088012fdc1740f7e338918e7ec7775a62807daec33ef5 - languageName: node - linkType: hard - -"abort-controller@npm:^3.0.0": - version: 3.0.0 - resolution: "abort-controller@npm:3.0.0" - dependencies: - event-target-shim: "npm:^5.0.0" - checksum: 10/ed84af329f1828327798229578b4fe03a4dd2596ba304083ebd2252666bdc1d7647d66d0b18704477e1f8aa315f055944aa6e859afebd341f12d0a53c37b4b40 - languageName: node - linkType: hard - -"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": - version: 1.3.8 - resolution: "accepts@npm:1.3.8" - dependencies: - mime-types: "npm:~2.1.34" - negotiator: "npm:0.6.3" - checksum: 10/67eaaa90e2917c58418e7a9b89392002d2b1ccd69bcca4799135d0c632f3b082f23f4ae4ddeedbced5aa59bcc7bdf4699c69ebed4593696c922462b7bc5744d6 - languageName: node - linkType: hard - -"acorn-globals@npm:^6.0.0": - version: 6.0.0 - resolution: "acorn-globals@npm:6.0.0" - dependencies: - acorn: "npm:^7.1.1" - acorn-walk: "npm:^7.1.1" - checksum: 10/72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042 - languageName: node - linkType: hard - -"acorn-globals@npm:^7.0.0": - version: 7.0.1 - resolution: "acorn-globals@npm:7.0.1" - dependencies: - acorn: "npm:^8.1.0" - acorn-walk: "npm:^8.0.2" - checksum: 10/2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 - languageName: node - linkType: hard - -"acorn-import-assertions@npm:^1.9.0": - version: 1.9.0 - resolution: "acorn-import-assertions@npm:1.9.0" - peerDependencies: - acorn: ^8 - checksum: 10/af8dd58f6b0c6a43e85849744534b99f2133835c6fcdabda9eea27d0a0da625a0d323c4793ba7cb25cf4507609d0f747c210ccc2fc9b5866de04b0e59c9c5617 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10/d4371eaef7995530b5b5ca4183ff6f062ca17901a6d3f673c9ac011b01ede37e7a1f7f61f8f5cfe709e88054757bb8f3277dc4061087cdf4f2a1f90ccbcdb977 - languageName: node - linkType: hard - -"acorn-walk@npm:^7.1.1": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 10/4d3e186f729474aed3bc3d0df44692f2010c726582655b20a23347bef650867655521c48ada444cb4fda241ee713dcb792da363ec74c6282fa884fb7144171bb - languageName: node - linkType: hard - -"acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.3.2": - version: 8.3.2 - resolution: "acorn-walk@npm:8.3.2" - checksum: 10/57dbe2fd8cf744f562431775741c5c087196cd7a65ce4ccb3f3981cdfad25cd24ad2bad404997b88464ac01e789a0a61e5e355b2a84876f13deef39fb39686ca - languageName: node - linkType: hard - -"acorn@npm:^7.1.1": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" - bin: - acorn: bin/acorn - checksum: 10/8be2a40714756d713dfb62544128adce3b7102c6eb94bc312af196c2cc4af76e5b93079bd66b05e9ca31b35a9b0ce12171d16bc55f366cafdb794fdab9d753ec - languageName: node - linkType: hard - -"acorn@npm:^8.1.0, acorn@npm:^8.10.0, acorn@npm:^8.14.0, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2": - version: 8.14.0 - resolution: "acorn@npm:8.14.0" - bin: - acorn: bin/acorn - checksum: 10/6df29c35556782ca9e632db461a7f97947772c6c1d5438a81f0c873a3da3a792487e83e404d1c6c25f70513e91aa18745f6eafb1fcc3a43ecd1920b21dd173d2 - languageName: node - linkType: hard - -"acorn@npm:^8.12.1": - version: 8.14.1 - resolution: "acorn@npm:8.14.1" - bin: - acorn: bin/acorn - checksum: 10/d1379bbee224e8d44c3c3946e6ba6973e999fbdd4e22e41c3455d7f9b6f72f7ce18d3dc218002e1e48eea789539cf1cb6d1430c81838c6744799c712fb557d92 - languageName: node - linkType: hard - -"add-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "add-stream@npm:1.0.0" - checksum: 10/3e9e8b0b8f0170406d7c3a9a39bfbdf419ccccb0fd2a396338c0fda0a339af73bf738ad414fc520741de74517acf0dd92b4a36fd3298a47fd5371eee8f2c5a06 - languageName: node - linkType: hard - -"address@npm:^1.0.1, address@npm:^1.1.2": - version: 1.2.2 - resolution: "address@npm:1.2.2" - checksum: 10/57d80a0c6ccadc8769ad3aeb130c1599e8aee86a8d25f671216c40df9b8489d6c3ef879bc2752b40d1458aa768f947c2d91e5b2fedfe63cf702c40afdfda9ba9 - languageName: node - linkType: hard - -"adjust-sourcemap-loader@npm:^4.0.0": - version: 4.0.0 - resolution: "adjust-sourcemap-loader@npm:4.0.0" - dependencies: - loader-utils: "npm:^2.0.0" - regex-parser: "npm:^2.2.11" - checksum: 10/813004ae62b3b409208ae6994b2b95cdc833b52655706f487c5334221218add29f1b7c597a15128c7cbc2784c15d8a1bcb8e7f9a8ea0d1f156973998ea695c82 - languageName: node - linkType: hard - -"adm-zip@npm:^0.4.16": - version: 0.4.16 - resolution: "adm-zip@npm:0.4.16" - checksum: 10/897003d21a445bfce251d5a328706035dc03af53cd4c66bb0a4558496939f89767ae5e7c67d10a5a9ad0146081a339bed3361405d6cca648a4378198573e9cad - languageName: node - linkType: hard - -"aes-js@npm:3.0.0": - version: 3.0.0 - resolution: "aes-js@npm:3.0.0" - checksum: 10/1b3772e5ba74abdccb6c6b99bf7f50b49057b38c0db1612b46c7024414f16e65ba7f1643b2d6e38490b1870bdf3ba1b87b35e2c831fd3fdaeff015f08aad19d1 - languageName: node - linkType: hard - -"aes-js@npm:4.0.0-beta.5": - version: 4.0.0-beta.5 - resolution: "aes-js@npm:4.0.0-beta.5" - checksum: 10/8f745da2e8fb38e91297a8ec13c2febe3219f8383303cd4ed4660ca67190242ccfd5fdc2f0d1642fd1ea934818fb871cd4cc28d3f28e812e3dc6c3d0f1f97c24 - languageName: node - linkType: hard - -"agent-base@npm:6, agent-base@npm:^6.0.2": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: "npm:4" - checksum: 10/21fb903e0917e5cb16591b4d0ef6a028a54b83ac30cd1fca58dece3d4e0990512a8723f9f83130d88a41e2af8b1f7be1386fda3ea2d181bb1a62155e75e95e23 - languageName: node - linkType: hard - -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": - version: 7.1.0 - resolution: "agent-base@npm:7.1.0" - dependencies: - debug: "npm:^4.3.4" - checksum: 10/f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f - languageName: node - linkType: hard - -"agentkeepalive@npm:^4.2.1, agentkeepalive@npm:^4.5.0": - version: 4.5.0 - resolution: "agentkeepalive@npm:4.5.0" - dependencies: - humanize-ms: "npm:^1.2.1" - checksum: 10/dd210ba2a2e2482028f027b1156789744aadbfd773a6c9dd8e4e8001930d5af82382abe19a69240307b1d8003222ce6b0542935038313434b900e351914fc15f - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: "npm:^2.0.0" - indent-string: "npm:^4.0.0" - checksum: 10/1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 - languageName: node - linkType: hard - -"ajv-draft-04@npm:~1.0.0": - version: 1.0.0 - resolution: "ajv-draft-04@npm:1.0.0" - peerDependencies: - ajv: ^8.5.0 - peerDependenciesMeta: - ajv: - optional: true - checksum: 10/3f11fa0e7f7359bef6608657f02ab78e9cc62b1fb7bdd860db0d00351b3863a1189c1a23b72466d2d82726cab4eb20725c76f5e7c134a89865e2bfd0e6828137 - languageName: node - linkType: hard - -"ajv-formats@npm:^2.1.1": - version: 2.1.1 - resolution: "ajv-formats@npm:2.1.1" - dependencies: - ajv: "npm:^8.0.0" - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - checksum: 10/70c263ded219bf277ffd9127f793b625f10a46113b2e901e150da41931fcfd7f5592da6d66862f4449bb157ffe65867c3294a7df1d661cc232c4163d5a1718ed - languageName: node - linkType: hard - -"ajv-formats@npm:~3.0.1": - version: 3.0.1 - resolution: "ajv-formats@npm:3.0.1" - dependencies: - ajv: "npm:^8.0.0" - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - checksum: 10/5679b9f9ced9d0213a202a37f3aa91efcffe59a6de1a6e3da5c873344d3c161820a1f11cc29899661fee36271fd2895dd3851b6461c902a752ad661d1c1e8722 - languageName: node - linkType: hard - -"ajv-keywords@npm:^3.4.1, ajv-keywords@npm:^3.5.2": - version: 3.5.2 - resolution: "ajv-keywords@npm:3.5.2" - peerDependencies: - ajv: ^6.9.1 - checksum: 10/d57c9d5bf8849bddcbd801b79bc3d2ddc736c2adb6b93a6a365429589dd7993ddbd5d37c6025ed6a7f89c27506b80131d5345c5b1fa6a97e40cd10a96bcd228c - languageName: node - linkType: hard - -"ajv-keywords@npm:^5.1.0": - version: 5.1.0 - resolution: "ajv-keywords@npm:5.1.0" - dependencies: - fast-deep-equal: "npm:^3.1.3" - peerDependencies: - ajv: ^8.8.2 - checksum: 10/5021f96ab7ddd03a4005326bd06f45f448ebfbb0fe7018b1b70b6c28142fa68372bda2057359814b83fd0b2d4c8726c297f0a7557b15377be7b56ce5344533d8 - languageName: node - linkType: hard - -"ajv@npm:^6.10.0, ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.12.6": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: "npm:^3.1.1" - fast-json-stable-stringify: "npm:^2.0.0" - json-schema-traverse: "npm:^0.4.1" - uri-js: "npm:^4.2.2" - checksum: 10/48d6ad21138d12eb4d16d878d630079a2bda25a04e745c07846a4ad768319533031e28872a9b3c5790fa1ec41aabdf2abed30a56e5a03ebc2cf92184b8ee306c - languageName: node - linkType: hard - -"ajv@npm:^7.2.4": - version: 7.2.4 - resolution: "ajv@npm:7.2.4" - dependencies: - fast-deep-equal: "npm:^3.1.1" - json-schema-traverse: "npm:^1.0.0" - require-from-string: "npm:^2.0.2" - uri-js: "npm:^4.2.2" - checksum: 10/ed241a8986f80777713a7ffde37cdea8d112631623bbc7f0d867689bcb7af41f24a7ea2750c4dd8be681bf7fea314e05c8b4521a86bfb5882acd2432fc5335df - languageName: node - linkType: hard - -"ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.11.0, ajv@npm:^8.6.0, ajv@npm:^8.9.0, ajv@npm:~8.13.0": - version: 8.13.0 - resolution: "ajv@npm:8.13.0" - dependencies: - fast-deep-equal: "npm:^3.1.3" - json-schema-traverse: "npm:^1.0.0" - require-from-string: "npm:^2.0.2" - uri-js: "npm:^4.4.1" - checksum: 10/4ada268c9a6e44be87fd295df0f0a91267a7bae8dbc8a67a2d5799c3cb459232839c99d18b035597bb6e3ffe88af6979f7daece854f590a81ebbbc2dfa80002c - languageName: node - linkType: hard - -"ajv@npm:^8.17.1": - version: 8.17.1 - resolution: "ajv@npm:8.17.1" - dependencies: - fast-deep-equal: "npm:^3.1.3" - fast-uri: "npm:^3.0.1" - json-schema-traverse: "npm:^1.0.0" - require-from-string: "npm:^2.0.2" - checksum: 10/ee3c62162c953e91986c838f004132b6a253d700f1e51253b99791e2dbfdb39161bc950ebdc2f156f8568035bb5ed8be7bd78289cd9ecbf3381fe8f5b82e3f33 - languageName: node - linkType: hard - -"ajv@npm:~8.12.0": - version: 8.12.0 - resolution: "ajv@npm:8.12.0" - dependencies: - fast-deep-equal: "npm:^3.1.1" - json-schema-traverse: "npm:^1.0.0" - require-from-string: "npm:^2.0.2" - uri-js: "npm:^4.2.2" - checksum: 10/b406f3b79b5756ac53bfe2c20852471b08e122bc1ee4cde08ae4d6a800574d9cd78d60c81c69c63ff81e4da7cd0b638fafbb2303ae580d49cf1600b9059efb85 - languageName: node - linkType: hard - -"amdefine@npm:>=0.0.4": - version: 1.0.1 - resolution: "amdefine@npm:1.0.1" - checksum: 10/517df65fc33d3ff14fe5c0057e041b03d603a2254dea7968b05dfbfa3041eb8430ea6729e305bc428c03fad03f162de91a4b256692d27d7b81d3ee691312cffe - languageName: node - linkType: hard - -"ansi-align@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-align@npm:3.0.1" - dependencies: - string-width: "npm:^4.1.0" - checksum: 10/4c7e8b6a10eaf18874ecee964b5db62ac86d0b9266ad4987b3a1efcb5d11a9e12c881ee40d14951833135a8966f10a3efe43f9c78286a6e632f53d85ad28b9c0 - languageName: node - linkType: hard - -"ansi-colors@npm:^4.1.1, ansi-colors@npm:^4.1.3": - version: 4.1.3 - resolution: "ansi-colors@npm:4.1.3" - checksum: 10/43d6e2fc7b1c6e4dc373de708ee76311ec2e0433e7e8bd3194e7ff123ea6a747428fc61afdcf5969da5be3a5f0fd054602bec56fc0ebe249ce2fcde6e649e3c2 - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0, ansi-escapes@npm:^4.3.1, ansi-escapes@npm:^4.3.2": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: "npm:^0.21.3" - checksum: 10/8661034456193ffeda0c15c8c564a9636b0c04094b7f78bd01517929c17c504090a60f7a75f949f5af91289c264d3e1001d91492c1bd58efc8e100500ce04de2 - languageName: node - linkType: hard - -"ansi-escapes@npm:^5.0.0": - version: 5.0.0 - resolution: "ansi-escapes@npm:5.0.0" - dependencies: - type-fest: "npm:^1.0.2" - checksum: 10/cbfb95f9f6d8a1ffc89f50fcda3313effae2d9ac2f357f89f626815b4d95fdc3f10f74e0887614ff850d01f805b7505eb1e7ebfdd26144bbfc26c5de08e19195 - languageName: node - linkType: hard - -"ansi-html-community@npm:^0.0.8": - version: 0.0.8 - resolution: "ansi-html-community@npm:0.0.8" - bin: - ansi-html: bin/ansi-html - checksum: 10/08df3696720edacd001a8d53b197bb5728242c55484680117dab9f7633a6320e961a939bddd88ee5c71d4a64f3ddb49444d1c694bd0668adbb3f95ba114f2386 - languageName: node - linkType: hard - -"ansi-regex@npm:^4.1.0": - version: 4.1.1 - resolution: "ansi-regex@npm:4.1.1" - checksum: 10/b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10/2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 10/1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10/d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10/b4494dfbfc7e4591b4711a396bd27e540f8153914123dccb4cdbbcb514015ada63a3809f362b9d8d4f6b17a706f1d7bea3c6f974b15fa5ae76b5b502070889ff - languageName: node - linkType: hard - -"ansi-styles@npm:^5.0.0": - version: 5.2.0 - resolution: "ansi-styles@npm:5.2.0" - checksum: 10/d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: 10/70fdf883b704d17a5dfc9cde206e698c16bcd74e7f196ab821511651aee4f9f76c9514bdfa6ca3a27b5e49138b89cb222a28caf3afe4567570139577f991df32 - languageName: node - linkType: hard - -"ansis@npm:^3.10.0": - version: 3.17.0 - resolution: "ansis@npm:3.17.0" - checksum: 10/6fd6bc4d1187b894d9706f4c141c81b788e90766426617385486dae38f8b2f5a1726d8cc754939e44265f92a9db4647d5136cb1425435c39ac42b35e3acf4f3d - languageName: node - linkType: hard - -"ansis@npm:^3.5.2, ansis@npm:^3.8.1, ansis@npm:^3.9.0": - version: 3.10.0 - resolution: "ansis@npm:3.10.0" - checksum: 10/440721b606d80fd61efe4fcdfbfbb336889b0ba59cfb787c5b0d1d2ea01629796c894ed648fefcd381521344a6aec62654f94766feae8344d53803c17a4a9636 - languageName: node - linkType: hard - -"antlr4@npm:^4.13.1-patch-1": - version: 4.13.2 - resolution: "antlr4@npm:4.13.2" - checksum: 10/23ab4742ec937adaaf20d13228c8cca58638e1aafeb28919bdeb4860776a403d0c7eb85a3f07fadc27fc03f773eed6bcc82bd8369b9d0e258e6502ba514cf87e - languageName: node - linkType: hard - -"any-promise@npm:^1.0.0": - version: 1.3.0 - resolution: "any-promise@npm:1.3.0" - checksum: 10/6737469ba353b5becf29e4dc3680736b9caa06d300bda6548812a8fee63ae7d336d756f88572fa6b5219aed36698d808fa55f62af3e7e6845c7a1dc77d240edb - languageName: node - linkType: hard - -"any-signal@npm:^4.1.1": - version: 4.1.1 - resolution: "any-signal@npm:4.1.1" - checksum: 10/9b029d9d3291c961e2102375a2dceb18101774754a709b5bfa8532285cd9906da17bd4ffaed5c2654853bfe68673b9848f09ef1a856daf5b938fb73eca65e335 - languageName: node - linkType: hard - -"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: "npm:^3.0.0" - picomatch: "npm:^2.0.4" - checksum: 10/3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 - languageName: node - linkType: hard - -"apisauce@npm:^2.1.5": - version: 2.1.6 - resolution: "apisauce@npm:2.1.6" - dependencies: - axios: "npm:^0.21.4" - checksum: 10/3a1b31780bcb192ebf3e58b3f8d6416f9e31e9518b01fbc0ecefab5e66f938fdb7a8537623bd131dc8c16d0fdeebd10f566c49c47015d1300a580974a4d96d26 - languageName: node - linkType: hard - -"app-module-path@npm:^2.2.0": - version: 2.2.0 - resolution: "app-module-path@npm:2.2.0" - checksum: 10/9ed8c6ce6247a6b5d556039f29b4610869237bbb5b8f3d905b22bd2d314c30efcc0fb70c2626d7461ecc52ec7edec9908f660d0938d2bea5b8cfc6868a28806f - languageName: node - linkType: hard - -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 10/c2b9a631298e8d6f3797547e866db642f68493808f5b37cd61da778d5f6ada890d16f668285f7d60bd4fc3b03889bd590ffe62cf81b700e9bb353431238a0a7b - languageName: node - linkType: hard - -"arch@npm:^2.2.0": - version: 2.2.0 - resolution: "arch@npm:2.2.0" - checksum: 10/e35dbc6d362297000ab90930069576ba165fe63cd52383efcce14bd66c1b16a91ce849e1fd239964ed029d5e0bdfc32f68e9c7331b7df6c84ddebebfdbf242f7 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^2.0.0": - version: 2.0.0 - resolution: "are-we-there-yet@npm:2.0.0" - dependencies: - delegates: "npm:^1.0.0" - readable-stream: "npm:^3.6.0" - checksum: 10/ea6f47d14fc33ae9cbea3e686eeca021d9d7b9db83a306010dd04ad5f2c8b7675291b127d3fcbfcbd8fec26e47b3324ad5b469a6cc3733a582f2fe4e12fc6756 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^3.0.0": - version: 3.0.1 - resolution: "are-we-there-yet@npm:3.0.1" - dependencies: - delegates: "npm:^1.0.0" - readable-stream: "npm:^3.6.0" - checksum: 10/390731720e1bf9ed5d0efc635ea7df8cbc4c90308b0645a932f06e8495a0bf1ecc7987d3b97e805f62a17d6c4b634074b25200aa4d149be2a7b17250b9744bc4 - languageName: node - linkType: hard - -"arg@npm:^4.1.0": - version: 4.1.3 - resolution: "arg@npm:4.1.3" - checksum: 10/969b491082f20cad166649fa4d2073ea9e974a4e5ac36247ca23d2e5a8b3cb12d60e9ff70a8acfe26d76566c71fd351ee5e6a9a6595157eb36f92b1fd64e1599 - languageName: node - linkType: hard - -"arg@npm:^5.0.2": - version: 5.0.2 - resolution: "arg@npm:5.0.2" - checksum: 10/92fe7de222054a060fd2329e92e867410b3ea260328147ee3fb7855f78efae005f4087e698d4e688a856893c56bb09951588c40f2c901cf6996cd8cd7bcfef2c - languageName: node - linkType: hard - -"argparse@npm:^1.0.7, argparse@npm:~1.0.9": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: "npm:~1.0.2" - checksum: 10/c6a621343a553ff3779390bb5ee9c2263d6643ebcd7843227bdde6cc7adbed796eb5540ca98db19e3fd7b4714e1faa51551f8849b268bb62df27ddb15cbcd91e - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 10/18640244e641a417ec75a9bd38b0b2b6b95af5199aa241b131d4b2fb206f334d7ecc600bd194861610a5579084978bfcbb02baa399dbe442d56d0ae5e60dbaef - languageName: node - linkType: hard - -"aria-query@npm:^5.3.1, aria-query@npm:^5.3.2": - version: 5.3.2 - resolution: "aria-query@npm:5.3.2" - checksum: 10/b2fe9bc98bd401bc322ccb99717c1ae2aaf53ea0d468d6e7aebdc02fac736e4a99b46971ee05b783b08ade23c675b2d8b60e4a1222a95f6e27bc4d2a0bfdcc03 - languageName: node - linkType: hard - -"array-back@npm:^3.0.1, array-back@npm:^3.1.0": - version: 3.1.0 - resolution: "array-back@npm:3.1.0" - checksum: 10/7205004fcd0f9edd926db921af901b083094608d5b265738d0290092f9822f73accb468e677db74c7c94ef432d39e5ed75a7b1786701e182efb25bbba9734209 - languageName: node - linkType: hard - -"array-back@npm:^4.0.1, array-back@npm:^4.0.2": - version: 4.0.2 - resolution: "array-back@npm:4.0.2" - checksum: 10/f30603270771eeb54e5aad5f54604c62b3577a18b6db212a7272b2b6c32049121b49431f656654790ed1469411e45f387e7627c0de8fd0515995cc40df9b9294 - languageName: node - linkType: hard - -"array-buffer-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "array-buffer-byte-length@npm:1.0.1" - dependencies: - call-bind: "npm:^1.0.5" - is-array-buffer: "npm:^3.0.4" - checksum: 10/53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e - languageName: node - linkType: hard - -"array-flatten@npm:1.1.1": - version: 1.1.1 - resolution: "array-flatten@npm:1.1.1" - checksum: 10/e13c9d247241be82f8b4ec71d035ed7204baa82fae820d4db6948d30d3c4a9f2b3905eb2eec2b937d4aa3565200bd3a1c500480114cff649fa748747d2a50feb - languageName: node - linkType: hard - -"array-flatten@npm:^2.1.2": - version: 2.1.2 - resolution: "array-flatten@npm:2.1.2" - checksum: 10/e8988aac1fbfcdaae343d08c9a06a6fddd2c6141721eeeea45c3cf523bf4431d29a46602929455ed548c7a3e0769928cdc630405427297e7081bd118fdec9262 - languageName: node - linkType: hard - -"array-ify@npm:^1.0.0": - version: 1.0.0 - resolution: "array-ify@npm:1.0.0" - checksum: 10/c0502015b319c93dd4484f18036bcc4b654eb76a4aa1f04afbcef11ac918859bb1f5d71ba1f0f1141770db9eef1a4f40f1761753650873068010bbf7bcdae4a4 - languageName: node - linkType: hard - -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8": - version: 3.1.8 - resolution: "array-includes@npm:3.1.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.4" - is-string: "npm:^1.0.7" - checksum: 10/290b206c9451f181fb2b1f79a3bf1c0b66bb259791290ffbada760c79b284eef6f5ae2aeb4bcff450ebc9690edd25732c4c73a3c2b340fcc0f4563aed83bf488 - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 10/5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d - languageName: node - linkType: hard - -"array.prototype.findlast@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.findlast@npm:1.2.5" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10/7dffcc665aa965718ad6de7e17ac50df0c5e38798c0a5bf9340cf24feb8594df6ec6f3fcbe714c1577728a1b18b5704b15669474b27bceeca91ef06ce2a23c31 - languageName: node - linkType: hard - -"array.prototype.findlastindex@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.findlastindex@npm:1.2.5" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10/7c5c821f357cd53ab6cc305de8086430dd8d7a2485db87b13f843e868055e9582b1fd338f02338f67fc3a1603ceaf9610dd2a470b0b506f9d18934780f95b246 - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": - version: 1.3.2 - resolution: "array.prototype.flat@npm:1.3.2" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - es-shim-unscopables: "npm:^1.0.0" - checksum: 10/d9d2f6f27584de92ec7995bc931103e6de722cd2498bdbfc4cba814fc3e52f056050a93be883018811f7c0a35875f5056584a0e940603a5e5934f0279896aebe - languageName: node - linkType: hard - -"array.prototype.flatmap@npm:^1.3.2": - version: 1.3.2 - resolution: "array.prototype.flatmap@npm:1.3.2" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - es-shim-unscopables: "npm:^1.0.0" - checksum: 10/33f20006686e0cbe844fde7fd290971e8366c6c5e3380681c2df15738b1df766dd02c7784034aeeb3b037f65c496ee54de665388288edb323a2008bb550f77ea - languageName: node - linkType: hard - -"array.prototype.reduce@npm:^1.0.5": - version: 1.0.5 - resolution: "array.prototype.reduce@npm:1.0.5" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - es-array-method-boxes-properly: "npm:^1.0.0" - is-string: "npm:^1.0.7" - checksum: 10/ad8976da587854088fe8d5290e0709d670ba0dcac840b380b4aee11eae61b25fa78c324373387d39f4242345fda9cc57ff1b0cbfe510b9afa0cd1624ab1a1cab - languageName: node - linkType: hard - -"array.prototype.tosorted@npm:^1.1.4": - version: 1.1.4 - resolution: "array.prototype.tosorted@npm:1.1.4" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.3" - es-errors: "npm:^1.3.0" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10/874694e5d50e138894ff5b853e639c29b0aa42bbd355acda8e8e9cd337f1c80565f21edc15e8c727fa4c0877fd9d8783c575809e440cc4d2d19acaa048bf967d - languageName: node - linkType: hard - -"arraybuffer.prototype.slice@npm:^1.0.3": - version: 1.0.3 - resolution: "arraybuffer.prototype.slice@npm:1.0.3" - dependencies: - array-buffer-byte-length: "npm:^1.0.1" - call-bind: "npm:^1.0.5" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.22.3" - es-errors: "npm:^1.2.1" - get-intrinsic: "npm:^1.2.3" - is-array-buffer: "npm:^3.0.4" - is-shared-array-buffer: "npm:^1.0.2" - checksum: 10/0221f16c1e3ec7b67da870ee0e1f12b825b5f9189835392b59a22990f715827561a4f4cd5330dc7507de272d8df821be6cd4b0cb569babf5ea4be70e365a2f3d - languageName: node - linkType: hard - -"arrify@npm:^1.0.1": - version: 1.0.1 - resolution: "arrify@npm:1.0.1" - checksum: 10/745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 - languageName: node - linkType: hard - -"asap@npm:~2.0.3, asap@npm:~2.0.6": - version: 2.0.6 - resolution: "asap@npm:2.0.6" - checksum: 10/b244c0458c571945e4b3be0b14eb001bea5596f9868cc50cc711dc03d58a7e953517d3f0dad81ccde3ff37d1f074701fa76a6f07d41aaa992d7204a37b915dda - languageName: node - linkType: hard - -"asn1.js@npm:^4.10.1": - version: 4.10.1 - resolution: "asn1.js@npm:4.10.1" - dependencies: - bn.js: "npm:^4.0.0" - inherits: "npm:^2.0.1" - minimalistic-assert: "npm:^1.0.0" - checksum: 10/5a02104b9ba167917c786a3fdac9840a057d29e6b609250e6af924d0529ead1a32417da13eec809cadea8f991eb67782196f3df427c5b4f30eaf22044fc64fda - languageName: node - linkType: hard - -"asn1js@npm:^3.0.5": - version: 3.0.5 - resolution: "asn1js@npm:3.0.5" - dependencies: - pvtsutils: "npm:^1.3.2" - pvutils: "npm:^1.1.3" - tslib: "npm:^2.4.0" - checksum: 10/17fb0302432186631550de9606a4622ec366646d072cde9cdf4bcafa47bd2425e157eeb7b1377ee6520f8b46687b4ecaee31cf0ad2fa494361a1938b2ed53194 - languageName: node - linkType: hard - -"assemblyscript@npm:0.19.23": - version: 0.19.23 - resolution: "assemblyscript@npm:0.19.23" - dependencies: - binaryen: "npm:102.0.0-nightly.20211028" - long: "npm:^5.2.0" - source-map-support: "npm:^0.5.20" - bin: - asc: bin/asc - asinit: bin/asinit - checksum: 10/0ee3939768682a204fe3b73e91c367998576e7433a97fd47f96174ac527d83615266ef793d9ef0d9ced06077a2b04a6bd8231b7478f7e2b821ab6b982ae97bf0 - languageName: node - linkType: hard - -"assemblyscript@npm:0.27.31": - version: 0.27.31 - resolution: "assemblyscript@npm:0.27.31" - dependencies: - binaryen: "npm:116.0.0-nightly.20240114" - long: "npm:^5.2.1" - bin: - asc: bin/asc.js - asinit: bin/asinit.js - checksum: 10/38f517fc37f9caee212efe4305b9ff9193bf78cff45c34f7d30201ab0be1a98dd0b4560dbb32fb738a24b010ac6aa7584cb69d7f31e73ade4a76219e5b6ebf3f - languageName: node - linkType: hard - -"assert@npm:^2.0.0, assert@npm:^2.1.0": - version: 2.1.0 - resolution: "assert@npm:2.1.0" - dependencies: - call-bind: "npm:^1.0.2" - is-nan: "npm:^1.3.2" - object-is: "npm:^1.1.5" - object.assign: "npm:^4.1.4" - util: "npm:^0.12.5" - checksum: 10/6b9d813c8eef1c0ac13feac5553972e4bd180ae16000d4eb5c0ded2489188737c75a5aacefc97a985008b37502f62fe1bad34da1a7481a54bbfabec3964c8aa7 - languageName: node - linkType: hard - -"assertion-error@npm:^1.1.0": - version: 1.1.0 - resolution: "assertion-error@npm:1.1.0" - checksum: 10/fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf - languageName: node - linkType: hard - -"ast-parents@npm:^0.0.1": - version: 0.0.1 - resolution: "ast-parents@npm:0.0.1" - checksum: 10/08eaa3b755529aad0708aad54ff09087b171334dcffa0774d3401e1dc54db1242bd5e76e599152705e813f768b9245a3c20777ed033c706d2093e358a91b12c2 - languageName: node - linkType: hard - -"ast-types-flow@npm:^0.0.8": - version: 0.0.8 - resolution: "ast-types-flow@npm:0.0.8" - checksum: 10/85a1c24af4707871c27cfe456bd2ff7fcbe678f3d1c878ac968c9557735a171a17bdcc8c8f903ceab3fc3c49d5b3da2194e6ab0a6be7fec0e133fa028f21ba1b - languageName: node - linkType: hard - -"astral-regex@npm:^2.0.0": - version: 2.0.0 - resolution: "astral-regex@npm:2.0.0" - checksum: 10/876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 - languageName: node - linkType: hard - -"async-mutex@npm:^0.2.6": - version: 0.2.6 - resolution: "async-mutex@npm:0.2.6" - dependencies: - tslib: "npm:^2.0.0" - checksum: 10/3cf676fc48b4686abf534cc02d4784bab3f35d7836a0a7476c96e57c3f6607dd3d94cc0989b29d33ce5ae5cde8be8e1a96f3e769ba3b0e1ba4a244f873aa5623 - languageName: node - linkType: hard - -"async@npm:1.x": - version: 1.5.2 - resolution: "async@npm:1.5.2" - checksum: 10/8afcdcee05168250926a3e7bd4dfaa74b681a74f634bae2af424fb716042461cbd20a375d9bc2534daa50a2d45286c9b174952fb239cee4ab8d6351a40c65327 - languageName: node - linkType: hard - -"async@npm:^3.2.3": - version: 3.2.4 - resolution: "async@npm:3.2.4" - checksum: 10/bebb5dc2258c45b83fa1d3be179ae0eb468e1646a62d443c8d60a45e84041b28fccebe1e2d1f234bfc3dcad44e73dcdbf4ba63d98327c9f6556e3dbd47c2ae8b - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10/3ce727cbc78f69d6a4722517a58ee926c8c21083633b1d3fdf66fd688f6c127a53a592141bd4866f9b63240a86e9d8e974b13919450bd17fa33c2d22c4558ad8 - languageName: node - linkType: hard - -"at-least-node@npm:^1.0.0": - version: 1.0.0 - resolution: "at-least-node@npm:1.0.0" - checksum: 10/463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e - languageName: node - linkType: hard - -"atomic-sleep@npm:^1.0.0": - version: 1.0.0 - resolution: "atomic-sleep@npm:1.0.0" - checksum: 10/3ab6d2cf46b31394b4607e935ec5c1c3c4f60f3e30f0913d35ea74b51b3585e84f590d09e58067f11762eec71c87d25314ce859030983dc0e4397eed21daa12e - languageName: node - linkType: hard - -"auto-bind@npm:~4.0.0": - version: 4.0.0 - resolution: "auto-bind@npm:4.0.0" - checksum: 10/00cad71cce5742faccb7dd65c1b55ebc4f45add4b0c9a1547b10b05bab22813230133b0c892c67ba3eb969a4524710c5e43cc45c72898ec84e56f3a596e7a04f - languageName: node - linkType: hard - -"autoprefixer@npm:^10.4.13": - version: 10.4.14 - resolution: "autoprefixer@npm:10.4.14" - dependencies: - browserslist: "npm:^4.21.5" - caniuse-lite: "npm:^1.0.30001464" - fraction.js: "npm:^4.2.0" - normalize-range: "npm:^0.1.2" - picocolors: "npm:^1.0.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.1.0 - bin: - autoprefixer: bin/autoprefixer - checksum: 10/9cee5c32557611520aadf3f0caacccaf37fe845e5e8f042a0e1321a235725b537edc01e5897206fd68322997430fdd38fe63f52a1c926d64f4a5514ee5acab81 - languageName: node - linkType: hard - -"available-typed-arrays@npm:^1.0.7": - version: 1.0.7 - resolution: "available-typed-arrays@npm:1.0.7" - dependencies: - possible-typed-array-names: "npm:^1.0.0" - checksum: 10/6c9da3a66caddd83c875010a1ca8ef11eac02ba15fb592dc9418b2b5e7b77b645fa7729380a92d9835c2f05f2ca1b6251f39b993e0feb3f1517c74fa1af02cab - languageName: node - linkType: hard - -"axe-core@npm:^4.10.0": - version: 4.10.2 - resolution: "axe-core@npm:4.10.2" - checksum: 10/a69423b2ff16c15922c4ea7cf9cc5112728a2817bbe0f2cc212248d648885ffd1ba554e3a341dfc289cd9e67fc0d06f333b5c6837c5c38ca6652507381216fc1 - languageName: node - linkType: hard - -"axios@npm:^0.21.1, axios@npm:^0.21.4": - version: 0.21.4 - resolution: "axios@npm:0.21.4" - dependencies: - follow-redirects: "npm:^1.14.0" - checksum: 10/da644592cb6f8f9f8c64fdabd7e1396d6769d7a4c1ea5f8ae8beb5c2eb90a823e3a574352b0b934ac62edc762c0f52647753dc54f7d07279127a7e5c4cd20272 - languageName: node - linkType: hard - -"axios@npm:^0.24.0": - version: 0.24.0 - resolution: "axios@npm:0.24.0" - dependencies: - follow-redirects: "npm:^1.14.4" - checksum: 10/4c5a7a5a45c909b4ce73fbf54b1fbc52a2290fc37cc51e64f8ef2ba8ac5f76a2e369a08ddfd7ec50317528d5aa55f5987cc56fb320923ef87e1b87f8ff05b5ba - languageName: node - linkType: hard - -"axios@npm:^1.6.7, axios@npm:^1.6.8": - version: 1.7.7 - resolution: "axios@npm:1.7.7" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.0" - proxy-from-env: "npm:^1.1.0" - checksum: 10/7f875ea13b9298cd7b40fd09985209f7a38d38321f1118c701520939de2f113c4ba137832fe8e3f811f99a38e12c8225481011023209a77b0c0641270e20cde1 - languageName: node - linkType: hard - -"axobject-query@npm:^4.1.0": - version: 4.1.0 - resolution: "axobject-query@npm:4.1.0" - checksum: 10/e275dea9b673f71170d914f2d2a18be5d57d8d29717b629e7fedd907dcc2ebdc7a37803ff975874810bd423f222f299c020d28fde40a146f537448bf6bfecb6e - languageName: node - linkType: hard - -"babel-jest@npm:^27.4.2, babel-jest@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-jest@npm:27.5.1" - dependencies: - "@jest/transform": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - "@types/babel__core": "npm:^7.1.14" - babel-plugin-istanbul: "npm:^6.1.1" - babel-preset-jest: "npm:^27.5.1" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - slash: "npm:^3.0.0" - peerDependencies: - "@babel/core": ^7.8.0 - checksum: 10/d032823796072b3c269edaa623dd7fe6ecf2f72aff5b003066e7b16ad0ec4068ed04f3f569237183161d28b638936121975014bcb26ae539e669f2bdad5babe6 - languageName: node - linkType: hard - -"babel-loader@npm:^8.2.3": - version: 8.3.0 - resolution: "babel-loader@npm:8.3.0" - dependencies: - find-cache-dir: "npm:^3.3.1" - loader-utils: "npm:^2.0.0" - make-dir: "npm:^3.1.0" - schema-utils: "npm:^2.6.5" - peerDependencies: - "@babel/core": ^7.0.0 - webpack: ">=2" - checksum: 10/e775e96f605f10d68adc693403ccda2470e856cc52e6017f3621c17dade003d0fc53facfce7b4ada02273a1c0a6a48167f798cc81b73110585d74bf890b39bd5 - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@istanbuljs/load-nyc-config": "npm:^1.0.0" - "@istanbuljs/schema": "npm:^0.1.2" - istanbul-lib-instrument: "npm:^5.0.4" - test-exclude: "npm:^6.0.0" - checksum: 10/ffd436bb2a77bbe1942a33245d770506ab2262d9c1b3c1f1da7f0592f78ee7445a95bc2efafe619dd9c1b6ee52c10033d6c7d29ddefe6f5383568e60f31dfe8d - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-plugin-jest-hoist@npm:27.5.1" - dependencies: - "@babel/template": "npm:^7.3.3" - "@babel/types": "npm:^7.3.3" - "@types/babel__core": "npm:^7.0.0" - "@types/babel__traverse": "npm:^7.0.6" - checksum: 10/9e334903433fd92ef9a65ea5c61f7d786238704b1327d9ca227ef40ef7142fba2bb8219bcb9b2d56eaf36ecfbcc50aa1e177db64508438569e98cfd67cce5043 - languageName: node - linkType: hard - -"babel-plugin-macros@npm:^3.1.0": - version: 3.1.0 - resolution: "babel-plugin-macros@npm:3.1.0" - dependencies: - "@babel/runtime": "npm:^7.12.5" - cosmiconfig: "npm:^7.0.0" - resolve: "npm:^1.19.0" - checksum: 10/30be6ca45e9a124c58ca00af9a0753e5410ec0b79a737714fc4722bbbeb693e55d9258f05c437145ef4a867c2d1603e06a1c292d66c243ce1227458c8ea2ca8c - languageName: node - linkType: hard - -"babel-plugin-named-asset-import@npm:^0.3.8": - version: 0.3.8 - resolution: "babel-plugin-named-asset-import@npm:0.3.8" - peerDependencies: - "@babel/core": ^7.1.0 - checksum: 10/d1e58df8cb75d91d070feea31087bc989906d3465144bde7e9f3c3690b514a90a55d3aebf3e65e76c5d4c743ecedde5f640f09f43a21fa60f1a5d413cb3f7a67 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs2@npm:^0.4.10, babel-plugin-polyfill-corejs2@npm:^0.4.3": - version: 0.4.11 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.11" - dependencies: - "@babel/compat-data": "npm:^7.22.6" - "@babel/helper-define-polyfill-provider": "npm:^0.6.2" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10/9c79908bed61b9f52190f254e22d3dca6ce25769738642579ba8d23832f3f9414567a90d8367a31831fa45d9b9607ac43d8d07ed31167d8ca8cda22871f4c7a1 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs3@npm:^0.10.4": - version: 0.10.4 - resolution: "babel-plugin-polyfill-corejs3@npm:0.10.4" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.6.1" - core-js-compat: "npm:^3.36.1" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10/a69ed5a95bb55e9b7ea37307d56113f7e24054d479c15de6d50fa61388b5334bed1f9b6414cde6c575fa910a4de4d1ab4f2d22720967d57c4fec9d1b8f61b355 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs3@npm:^0.8.1": - version: 0.8.1 - resolution: "babel-plugin-polyfill-corejs3@npm:0.8.1" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.4.0" - core-js-compat: "npm:^3.30.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/f33eb0f9e9c94788f1bc950f3191303f7cf347e2aff84acb192bb2ea81d3003a17781e3c8e10baebd92d58adaa22bc93a93841275d81fe32f0b54f9b30eed729 - languageName: node - linkType: hard - -"babel-plugin-polyfill-regenerator@npm:^0.5.0": - version: 0.5.0 - resolution: "babel-plugin-polyfill-regenerator@npm:0.5.0" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.4.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/ef2bcffc7c9a5e4426fc2dbf89bf3a46999a8415c21cd741c3ab3cb4b5ab804aaa3d71ef733f0eda1bcc0b91d9d80f98d33983a66dab9b8bed166ec38f8f8ad1 - languageName: node - linkType: hard - -"babel-plugin-polyfill-regenerator@npm:^0.6.1": - version: 0.6.2 - resolution: "babel-plugin-polyfill-regenerator@npm:0.6.2" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.6.2" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10/150233571072b6b3dfe946242da39cba8587b7f908d1c006f7545fc88b0e3c3018d445739beb61e7a75835f0c2751dbe884a94ff9b245ec42369d9267e0e1b3f - languageName: node - linkType: hard - -"babel-plugin-styled-components@npm:>= 1.12.0": - version: 2.1.4 - resolution: "babel-plugin-styled-components@npm:2.1.4" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-module-imports": "npm:^7.22.5" - "@babel/plugin-syntax-jsx": "npm:^7.22.5" - lodash: "npm:^4.17.21" - picomatch: "npm:^2.3.1" - peerDependencies: - styled-components: ">= 2" - checksum: 10/34f10dd4d44cf1c8605097dd4796e2d1443266ebc686f10a9f56b5d1492b5c3de9c13d7e30b075756610adf592ed807cc8145189d00b4454f6af9879a19a5e0b - languageName: node - linkType: hard - -"babel-plugin-syntax-trailing-function-commas@npm:^7.0.0-beta.0": - version: 7.0.0-beta.0 - resolution: "babel-plugin-syntax-trailing-function-commas@npm:7.0.0-beta.0" - checksum: 10/e37509156ca945dd9e4b82c66dd74f2d842ad917bd280cb5aa67960942300cd065eeac476d2514bdcdedec071277a358f6d517c31d9f9244d9bbc3619a8ecf8a - languageName: node - linkType: hard - -"babel-plugin-transform-react-remove-prop-types@npm:^0.4.24": - version: 0.4.24 - resolution: "babel-plugin-transform-react-remove-prop-types@npm:0.4.24" - checksum: 10/4ce1755af02375f0764683f9703ef47607e33ee57cefd348f054208e06a52b1517e43180c1c448046338a149853f2c9d7f63f27d5b27c74db5df74fba117f040 - languageName: node - linkType: hard - -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" - dependencies: - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-bigint": "npm:^7.8.3" - "@babel/plugin-syntax-class-properties": "npm:^7.8.3" - "@babel/plugin-syntax-import-meta": "npm:^7.8.3" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.8.3" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-top-level-await": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/94561959cb12bfa80867c9eeeace7c3d48d61707d33e55b4c3fdbe82fc745913eb2dbfafca62aef297421b38aadcb58550e5943f50fbcebbeefd70ce2bed4b74 - languageName: node - linkType: hard - -"babel-preset-fbjs@npm:^3.4.0": - version: 3.4.0 - resolution: "babel-preset-fbjs@npm:3.4.0" - dependencies: - "@babel/plugin-proposal-class-properties": "npm:^7.0.0" - "@babel/plugin-proposal-object-rest-spread": "npm:^7.0.0" - "@babel/plugin-syntax-class-properties": "npm:^7.0.0" - "@babel/plugin-syntax-flow": "npm:^7.0.0" - "@babel/plugin-syntax-jsx": "npm:^7.0.0" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.0.0" - "@babel/plugin-transform-arrow-functions": "npm:^7.0.0" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.0.0" - "@babel/plugin-transform-block-scoping": "npm:^7.0.0" - "@babel/plugin-transform-classes": "npm:^7.0.0" - "@babel/plugin-transform-computed-properties": "npm:^7.0.0" - "@babel/plugin-transform-destructuring": "npm:^7.0.0" - "@babel/plugin-transform-flow-strip-types": "npm:^7.0.0" - "@babel/plugin-transform-for-of": "npm:^7.0.0" - "@babel/plugin-transform-function-name": "npm:^7.0.0" - "@babel/plugin-transform-literals": "npm:^7.0.0" - "@babel/plugin-transform-member-expression-literals": "npm:^7.0.0" - "@babel/plugin-transform-modules-commonjs": "npm:^7.0.0" - "@babel/plugin-transform-object-super": "npm:^7.0.0" - "@babel/plugin-transform-parameters": "npm:^7.0.0" - "@babel/plugin-transform-property-literals": "npm:^7.0.0" - "@babel/plugin-transform-react-display-name": "npm:^7.0.0" - "@babel/plugin-transform-react-jsx": "npm:^7.0.0" - "@babel/plugin-transform-shorthand-properties": "npm:^7.0.0" - "@babel/plugin-transform-spread": "npm:^7.0.0" - "@babel/plugin-transform-template-literals": "npm:^7.0.0" - babel-plugin-syntax-trailing-function-commas: "npm:^7.0.0-beta.0" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/1e73ebaaeac805aad15793d06a40a63be096730f58708ec434f08578b5ccba890190cda8fdf1c626ab081a8e1cfd376c9db82eaf78a0fafdbcc2362eb2963804 - languageName: node - linkType: hard - -"babel-preset-jest@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-preset-jest@npm:27.5.1" - dependencies: - babel-plugin-jest-hoist: "npm:^27.5.1" - babel-preset-current-node-syntax: "npm:^1.0.0" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/251bcea11c18fd9672fec104eadb45b43f117ceeb326fa7345ced778d4c1feab29343cd7a87a1dcfae4997d6c851a8b386d7f7213792da6e23b74f4443a8976d - languageName: node - linkType: hard - -"babel-preset-react-app@npm:^10.0.1": - version: 10.0.1 - resolution: "babel-preset-react-app@npm:10.0.1" - dependencies: - "@babel/core": "npm:^7.16.0" - "@babel/plugin-proposal-class-properties": "npm:^7.16.0" - "@babel/plugin-proposal-decorators": "npm:^7.16.4" - "@babel/plugin-proposal-nullish-coalescing-operator": "npm:^7.16.0" - "@babel/plugin-proposal-numeric-separator": "npm:^7.16.0" - "@babel/plugin-proposal-optional-chaining": "npm:^7.16.0" - "@babel/plugin-proposal-private-methods": "npm:^7.16.0" - "@babel/plugin-transform-flow-strip-types": "npm:^7.16.0" - "@babel/plugin-transform-react-display-name": "npm:^7.16.0" - "@babel/plugin-transform-runtime": "npm:^7.16.4" - "@babel/preset-env": "npm:^7.16.4" - "@babel/preset-react": "npm:^7.16.0" - "@babel/preset-typescript": "npm:^7.16.0" - "@babel/runtime": "npm:^7.16.3" - babel-plugin-macros: "npm:^3.1.0" - babel-plugin-transform-react-remove-prop-types: "npm:^0.4.24" - checksum: 10/ce66970267cfa6d6289b7bf070f184b3ece4f66fbdcd098c40573e3e86b42ffde7d16d74eabb0d18dc5960ddd3d943a16fac27c8dbb435f63350d6af1acbb28b - languageName: node - linkType: hard - -"bail@npm:^2.0.0": - version: 2.0.2 - resolution: "bail@npm:2.0.2" - checksum: 10/aab4e8ccdc8d762bf3fdfce8e706601695620c0c2eda256dd85088dc0be3cfd7ff126f6e99c2bee1f24f5d418414aacf09d7f9702f16d6963df2fa488cda8824 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10/9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 - languageName: node - linkType: hard - -"base-x@npm:^3.0.2": - version: 3.0.9 - resolution: "base-x@npm:3.0.9" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10/957101d6fd09e1903e846fd8f69fd7e5e3e50254383e61ab667c725866bec54e5ece5ba49ce385128ae48f9ec93a26567d1d5ebb91f4d56ef4a9cc0d5a5481e8 - languageName: node - linkType: hard - -"base-x@npm:^4.0.0": - version: 4.0.1 - resolution: "base-x@npm:4.0.1" - checksum: 10/c9061e576f7376b2bc6b69eca131254bb16ebe1445b535a3f0d68f27524e724965b6c191dffd255bf80f9bdf5eb9d1c8d0320903e83116f2c3e09f81b5ecb6a2 - languageName: node - linkType: hard - -"base-x@npm:^5.0.0": - version: 5.0.0 - resolution: "base-x@npm:5.0.0" - checksum: 10/fa82bc9a963f7a765a3287ba632661669fe553d06ee0d4d4e282640335bff30ec685e3c3b1714e265f697b234facd02a310f1e2465db88f4f1a448e6267fbc65 - languageName: node - linkType: hard - -"base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 10/669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 - languageName: node - linkType: hard - -"batch@npm:0.6.1": - version: 0.6.1 - resolution: "batch@npm:0.6.1" - checksum: 10/61f9934c7378a51dce61b915586191078ef7f1c3eca707fdd58b96ff2ff56d9e0af2bdab66b1462301a73c73374239e6542d9821c0af787f3209a23365d07e7f - languageName: node - linkType: hard - -"bech32@npm:1.1.4": - version: 1.1.4 - resolution: "bech32@npm:1.1.4" - checksum: 10/63ff37c0ce43be914c685ce89700bba1589c319af0dac1ea04f51b33d0e5ecfd40d14c24f527350b94f0a4e236385373bb9122ec276410f354ddcdbf29ca13f4 - languageName: node - linkType: hard - -"bech32@npm:^2.0.0": - version: 2.0.0 - resolution: "bech32@npm:2.0.0" - checksum: 10/fa15acb270b59aa496734a01f9155677b478987b773bf701f465858bf1606c6a970085babd43d71ce61895f1baa594cb41a2cd1394bd2c6698f03cc2d811300e - languageName: node - linkType: hard - -"better-path-resolve@npm:1.0.0": - version: 1.0.0 - resolution: "better-path-resolve@npm:1.0.0" - dependencies: - is-windows: "npm:^1.0.0" - checksum: 10/5392dbe04e7fe68b944eb37961d9dfa147aaac3ee9ee3f6e13d42e2c9fbe949e68d16e896c14ee9016fa5f8e6e53ec7fd8b5f01b50a32067a7d94ac9cfb9a050 - languageName: node - linkType: hard - -"bfj@npm:^7.0.2": - version: 7.0.2 - resolution: "bfj@npm:7.0.2" - dependencies: - bluebird: "npm:^3.5.5" - check-types: "npm:^11.1.1" - hoopy: "npm:^0.1.4" - tryer: "npm:^1.0.1" - checksum: 10/e1040fe6aec2afeb6f6c5231bbbc055616fa99c23c5249c7d20a2919507a69d8fd4d82d2245eca5ee08cbfcd3e70ce817328b8a20acda69af4638f1c11343bc7 - languageName: node - linkType: hard - -"big.js@npm:6.2.2": - version: 6.2.2 - resolution: "big.js@npm:6.2.2" - checksum: 10/018af3e572780b41536a987c3fc3636efe7d05671e8bf4a6bd22b62316e32f57abfc0fc849732adfd81b00b249f873a5a107e01ab5aa4fc3d42c181cc821bf47 - languageName: node - linkType: hard - -"big.js@npm:^5.2.2": - version: 5.2.2 - resolution: "big.js@npm:5.2.2" - checksum: 10/c04416aeb084f4aa1c5857722439c327cc0ada9bd99ab80b650e3f30e2e4f1b92a04527ed1e7df8ffcd7c0ea311745a04af12d53e2f091bf09a06f1292003827 - languageName: node - linkType: hard - -"bigint-buffer@npm:^1.1.5": - version: 1.1.5 - resolution: "bigint-buffer@npm:1.1.5" - dependencies: - bindings: "npm:^1.3.0" - node-gyp: "npm:latest" - checksum: 10/be70c7ad00f5e1a4739251755ef35fe8f183ec34782353cfde0820dcc7c84eefa647c12d75c003650a19c333a0528fde2d4fb9d0c41c724c27cd6b0245d20987 - languageName: node - linkType: hard - -"bignumber.js@npm:^7.2.1": - version: 7.2.1 - resolution: "bignumber.js@npm:7.2.1" - checksum: 10/9bfd02d93cba7d61607b9d52ffb3176844af5712f7f6a0530350daf7852894215fbaa8e6090a9fc841b297b39d475abb90451d3533bc939d1e96a4bfe293e226 - languageName: node - linkType: hard - -"bignumber.js@npm:^9.1.2": - version: 9.3.1 - resolution: "bignumber.js@npm:9.3.1" - checksum: 10/1be0372bf0d6d29d0a49b9e6a9cefbd54dad9918232ad21fcd4ec39030260773abf0c76af960c6b3b98d3115a3a71e61c6a111812d1395040a039cfa178e0245 - languageName: node - linkType: hard - -"binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: 10/ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 - languageName: node - linkType: hard - -"binaryen@npm:102.0.0-nightly.20211028": - version: 102.0.0-nightly.20211028 - resolution: "binaryen@npm:102.0.0-nightly.20211028" - bin: - wasm-opt: bin/wasm-opt - checksum: 10/b036022b416a2c94c84b56413fa6843d840f5056bedf77d70c4ebd15af05997e44c5d135aea5cf190d310bc6873ec2caa4c4115587df3854927ec4d8a2a9fd9f - languageName: node - linkType: hard - -"binaryen@npm:116.0.0-nightly.20240114": - version: 116.0.0-nightly.20240114 - resolution: "binaryen@npm:116.0.0-nightly.20240114" - bin: - wasm-opt: bin/wasm-opt - wasm2js: bin/wasm2js - checksum: 10/9850a7fc1ad2f4a1e96e3106e7d0addef6fe778620eda25c3dff85df39044c6e47ce8ba01d37e4e5a9f4b78c78e377d26ad159759490993a9e998a17b128c6f2 - languageName: node - linkType: hard - -"bindings@npm:^1.3.0": - version: 1.5.0 - resolution: "bindings@npm:1.5.0" - dependencies: - file-uri-to-path: "npm:1.0.0" - checksum: 10/593d5ae975ffba15fbbb4788fe5abd1e125afbab849ab967ab43691d27d6483751805d98cb92f7ac24a2439a8a8678cd0131c535d5d63de84e383b0ce2786133 - languageName: node - linkType: hard - -"bip174@npm:^3.0.0-rc.0": - version: 3.0.0-rc.1 - resolution: "bip174@npm:3.0.0-rc.1" - dependencies: - uint8array-tools: "npm:^0.0.9" - varuint-bitcoin: "npm:^2.0.0" - checksum: 10/1ad3cec0b0b5ccfe9bb4861e9222823116705eafd32cb832da5a6c37d7746094ed4ab6be6429c6bbb69ef2370fb896f9f50dc43ddde0838db513522abc3033da - languageName: node - linkType: hard - -"bitcoinjs-lib@npm:^7.0.0-rc.0": - version: 7.0.0-rc.0 - resolution: "bitcoinjs-lib@npm:7.0.0-rc.0" - dependencies: - "@noble/hashes": "npm:^1.2.0" - bech32: "npm:^2.0.0" - bip174: "npm:^3.0.0-rc.0" - bs58check: "npm:^4.0.0" - uint8array-tools: "npm:^0.0.9" - valibot: "npm:^0.38.0" - varuint-bitcoin: "npm:^2.0.0" - checksum: 10/b8b65ab1a24dd4f2cb0fec8726b9ee256ebd1c449f2eb6b2f9739a0f240dfefda3c7a994cbf14ebc1cce95f76ce79fb8bfeabed2378ab17c7e17ea6546151e61 - languageName: node - linkType: hard - -"bl@npm:^4.1.0": - version: 4.1.0 - resolution: "bl@npm:4.1.0" - dependencies: - buffer: "npm:^5.5.0" - inherits: "npm:^2.0.4" - readable-stream: "npm:^3.4.0" - checksum: 10/b7904e66ed0bdfc813c06ea6c3e35eafecb104369dbf5356d0f416af90c1546de3b74e5b63506f0629acf5e16a6f87c3798f16233dcff086e9129383aa02ab55 - languageName: node - linkType: hard - -"blakejs@npm:^1.1.0": - version: 1.2.1 - resolution: "blakejs@npm:1.2.1" - checksum: 10/0638b1bd058b21892633929c43005aa6a4cc4b2ac5b338a146c3c076622f1b360795bd7a4d1f077c9b01863ed2df0c1504a81c5b520d164179120434847e6cd7 - languageName: node - linkType: hard - -"blob-to-it@npm:^2.0.5": - version: 2.0.7 - resolution: "blob-to-it@npm:2.0.7" - dependencies: - browser-readablestream-to-it: "npm:^2.0.0" - checksum: 10/16889bb0acd4585f596a3f1b883cd3de4196628493c9c0dcf43f912f0d5dd13d745017fc56ec1bb848b760a95df331f9c0e0d243b781e3d7ab843c3ef4c4cc68 - languageName: node - linkType: hard - -"bluebird@npm:^3.1.1, bluebird@npm:^3.5.5": - version: 3.7.2 - resolution: "bluebird@npm:3.7.2" - checksum: 10/007c7bad22c5d799c8dd49c85b47d012a1fe3045be57447721e6afbd1d5be43237af1db62e26cb9b0d9ba812d2e4ca3bac82f6d7e016b6b88de06ee25ceb96e7 - languageName: node - linkType: hard - -"bn.js@npm:4.11.6": - version: 4.11.6 - resolution: "bn.js@npm:4.11.6" - checksum: 10/22741b015c9fff60fce32fc9988331b298eb9b6db5bfb801babb23b846eaaf894e440e0d067b2b3ae4e46aab754e90972f8f333b31bf94a686bbcb054bfa7b14 - languageName: node - linkType: hard - -"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.0, bn.js@npm:^4.11.8, bn.js@npm:^4.11.9": - version: 4.12.0 - resolution: "bn.js@npm:4.12.0" - checksum: 10/10f8db196d3da5adfc3207d35d0a42aa29033eb33685f20ba2c36cadfe2de63dad05df0a20ab5aae01b418d1c4b3d4d205273085262fa020d17e93ff32b67527 - languageName: node - linkType: hard - -"bn.js@npm:^5.0.0, bn.js@npm:^5.1.2, bn.js@npm:^5.2.0, bn.js@npm:^5.2.1": - version: 5.2.1 - resolution: "bn.js@npm:5.2.1" - checksum: 10/7a7e8764d7a6e9708b8b9841b2b3d6019cc154d2fc23716d0efecfe1e16921b7533c6f7361fb05471eab47986c4aa310c270f88e3507172104632ac8df2cfd84 - languageName: node - linkType: hard - -"body-parser@npm:1.20.1": - version: 1.20.1 - resolution: "body-parser@npm:1.20.1" - dependencies: - bytes: "npm:3.1.2" - content-type: "npm:~1.0.4" - debug: "npm:2.6.9" - depd: "npm:2.0.0" - destroy: "npm:1.2.0" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - on-finished: "npm:2.4.1" - qs: "npm:6.11.0" - raw-body: "npm:2.5.1" - type-is: "npm:~1.6.18" - unpipe: "npm:1.0.0" - checksum: 10/5f8d128022a2fb8b6e7990d30878a0182f300b70e46b3f9d358a9433ad6275f0de46add6d63206da3637c01c3b38b6111a7480f7e7ac2e9f7b989f6133fe5510 - languageName: node - linkType: hard - -"bonjour-service@npm:^1.0.11": - version: 1.1.1 - resolution: "bonjour-service@npm:1.1.1" - dependencies: - array-flatten: "npm:^2.1.2" - dns-equal: "npm:^1.0.0" - fast-deep-equal: "npm:^3.1.3" - multicast-dns: "npm:^7.2.5" - checksum: 10/60a14328dff846a66ae5cddbba4f2e2845a4b3cf62f64d93b57808e08e5e1a8e8c4454e37e0e289741706b359a343444ba132957bf53be9e8f5eaebdebb06306 - languageName: node - linkType: hard - -"boolbase@npm:^1.0.0, boolbase@npm:~1.0.0": - version: 1.0.0 - resolution: "boolbase@npm:1.0.0" - checksum: 10/3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 - languageName: node - linkType: hard - -"borsh@npm:^0.7.0": - version: 0.7.0 - resolution: "borsh@npm:0.7.0" - dependencies: - bn.js: "npm:^5.2.0" - bs58: "npm:^4.0.0" - text-encoding-utf-8: "npm:^1.0.2" - checksum: 10/e51a9395dad0c1db38d7b764052369c536a830de4c744107992765b7b560f141f79a8214a684d186b27c61308b75796613a60aef3b70d1a6ab638140ed5087ca - languageName: node - linkType: hard - -"bowser@npm:^2.9.0": - version: 2.11.0 - resolution: "bowser@npm:2.11.0" - checksum: 10/ef46500eafe35072455e7c3ae771244e97827e0626686a9a3601c436d16eb272dad7ccbd49e2130b599b617ca9daa67027de827ffc4c220e02f63c84b69a8751 - languageName: node - linkType: hard - -"boxen@npm:^5.1.2": - version: 5.1.2 - resolution: "boxen@npm:5.1.2" - dependencies: - ansi-align: "npm:^3.0.0" - camelcase: "npm:^6.2.0" - chalk: "npm:^4.1.0" - cli-boxes: "npm:^2.2.1" - string-width: "npm:^4.2.2" - type-fest: "npm:^0.20.2" - widest-line: "npm:^3.1.0" - wrap-ansi: "npm:^7.0.0" - checksum: 10/bc3d3d88d77dc8cabb0811844acdbd4805e8ca8011222345330817737042bf6f86d93eb74a3f7e0cab634e64ef69db03cf52b480761ed90a965de0c8ff1bea8c - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10/faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: "npm:^1.0.0" - checksum: 10/a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 - languageName: node - linkType: hard - -"braces@npm:^3.0.2, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: "npm:^7.0.1" - checksum: 10/966b1fb48d193b9d155f810e5efd1790962f2c4e0829f8440b8ad236ba009222c501f70185ef732fef17a4c490bb33a03b90dab0631feafbdf447da91e8165b1 - languageName: node - linkType: hard - -"braces@npm:^3.0.3": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: "npm:^7.1.1" - checksum: 10/fad11a0d4697a27162840b02b1fad249c1683cbc510cd5bf1a471f2f8085c046d41094308c577a50a03a579dd99d5a6b3724c4b5e8b14df2c4443844cfcda2c6 - languageName: node - linkType: hard - -"brorand@npm:^1.0.1, brorand@npm:^1.1.0": - version: 1.1.0 - resolution: "brorand@npm:1.1.0" - checksum: 10/8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be - languageName: node - linkType: hard - -"brotli-wasm@npm:^2.0.1": - version: 2.0.1 - resolution: "brotli-wasm@npm:2.0.1" - checksum: 10/39789548c9b81f735a7ab87a6caa150babbd85148a8528610d050449c9802afb78b9197de25a1f613c8e1f945d4d0200cb473327a89f4b65cb9ee2b715d64292 - languageName: node - linkType: hard - -"browser-or-node@npm:^3.0.0": - version: 3.0.0 - resolution: "browser-or-node@npm:3.0.0" - checksum: 10/51d74cc5d0139da3d37e83ff3906fcca20d02c42aa8b81a48d9ea01806f36df1a4b55006670071b1d7423967777275920054ec8b723410534b580b0232c5093d - languageName: node - linkType: hard - -"browser-process-hrtime@npm:^1.0.0": - version: 1.0.0 - resolution: "browser-process-hrtime@npm:1.0.0" - checksum: 10/e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f - languageName: node - linkType: hard - -"browser-readablestream-to-it@npm:^2.0.0": - version: 2.0.3 - resolution: "browser-readablestream-to-it@npm:2.0.3" - checksum: 10/9734e671a2c0446b3ecc58362b8d065e0488612b94049fec2ca47b79f54ae0a49fade9ed0d175cf83441750ed9f4baa367de18f34d72a43286064c599fe9205b - languageName: node - linkType: hard - -"browser-readablestream-to-it@npm:^2.0.5": - version: 2.0.7 - resolution: "browser-readablestream-to-it@npm:2.0.7" - checksum: 10/22baaf32f6a41230c58ad6946ed042e324029d384f210ab501168c80d5dc0fe2c2fe2ab26c8577f5555c66d51e19787d91b0c6f59fe92fa73ee9a10a7bc699b8 - languageName: node - linkType: hard - -"browser-resolve@npm:^2.0.0": - version: 2.0.0 - resolution: "browser-resolve@npm:2.0.0" - dependencies: - resolve: "npm:^1.17.0" - checksum: 10/ad5314db3429a903b07d6445137588665c4677d6276298bb08f0623f05cb107762b73c78f03b4f954a712bd1ebaf98e349b9d98e423123a42804924327a5acd4 - languageName: node - linkType: hard - -"browser-stdout@npm:^1.3.1": - version: 1.3.1 - resolution: "browser-stdout@npm:1.3.1" - checksum: 10/ac70a84e346bb7afc5045ec6f22f6a681b15a4057447d4cc1c48a25c6dedb302a49a46dd4ddfb5cdd9c96e0c905a8539be1b98ae7bc440512152967009ec7015 - languageName: node - linkType: hard - -"browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": - version: 1.2.0 - resolution: "browserify-aes@npm:1.2.0" - dependencies: - buffer-xor: "npm:^1.0.3" - cipher-base: "npm:^1.0.0" - create-hash: "npm:^1.1.0" - evp_bytestokey: "npm:^1.0.3" - inherits: "npm:^2.0.1" - safe-buffer: "npm:^5.0.1" - checksum: 10/2813058f74e083a00450b11ea9d5d1f072de7bf0133f5d122d4ff7b849bece56d52b9c51ad0db0fad21c0bc4e8272fd5196114bbe7b94a9b7feb0f9fbb33a3bf - languageName: node - linkType: hard - -"browserify-cipher@npm:^1.0.1": - version: 1.0.1 - resolution: "browserify-cipher@npm:1.0.1" - dependencies: - browserify-aes: "npm:^1.0.4" - browserify-des: "npm:^1.0.0" - evp_bytestokey: "npm:^1.0.0" - checksum: 10/2d8500acf1ee535e6bebe808f7a20e4c3a9e2ed1a6885fff1facbfd201ac013ef030422bec65ca9ece8ffe82b03ca580421463f9c45af6c8415fd629f4118c13 - languageName: node - linkType: hard - -"browserify-des@npm:^1.0.0": - version: 1.0.2 - resolution: "browserify-des@npm:1.0.2" - dependencies: - cipher-base: "npm:^1.0.1" - des.js: "npm:^1.0.0" - inherits: "npm:^2.0.1" - safe-buffer: "npm:^5.1.2" - checksum: 10/2fd9018e598b1b25e002abaf656d46d8e0f2ee2666ff18852d37e5c3d0e47701d6824256b060fac395420d56a0c49c2b0d40a194e6fbd837bfdd893e7eb5ade4 - languageName: node - linkType: hard - -"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0": - version: 4.1.0 - resolution: "browserify-rsa@npm:4.1.0" - dependencies: - bn.js: "npm:^5.0.0" - randombytes: "npm:^2.0.1" - checksum: 10/155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 - languageName: node - linkType: hard - -"browserify-sign@npm:^4.2.3": - version: 4.2.3 - resolution: "browserify-sign@npm:4.2.3" - dependencies: - bn.js: "npm:^5.2.1" - browserify-rsa: "npm:^4.1.0" - create-hash: "npm:^1.2.0" - create-hmac: "npm:^1.1.7" - elliptic: "npm:^6.5.5" - hash-base: "npm:~3.0" - inherits: "npm:^2.0.4" - parse-asn1: "npm:^5.1.7" - readable-stream: "npm:^2.3.8" - safe-buffer: "npm:^5.2.1" - checksum: 10/403a8061d229ae31266670345b4a7c00051266761d2c9bbeb68b1a9bcb05f68143b16110cf23a171a5d6716396a1f41296282b3e73eeec0a1871c77f0ff4ee6b - languageName: node - linkType: hard - -"browserify-zlib@npm:^0.2.0": - version: 0.2.0 - resolution: "browserify-zlib@npm:0.2.0" - dependencies: - pako: "npm:~1.0.5" - checksum: 10/852e72effdc00bf8acc6d167d835179eda9e5bd13721ae5d0a2d132dc542f33e73bead2959eb43a2f181a9c495bc2ae2bdb4ec37c4e37ff61a0277741cbaaa7a - languageName: node - linkType: hard - -"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.4, browserslist@npm:^4.21.5, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0": - version: 4.23.1 - resolution: "browserslist@npm:4.23.1" - dependencies: - caniuse-lite: "npm:^1.0.30001629" - electron-to-chromium: "npm:^1.4.796" - node-releases: "npm:^2.0.14" - update-browserslist-db: "npm:^1.0.16" - bin: - browserslist: cli.js - checksum: 10/91da59f70a8e01ece97133670f9857d6d7e96be78e1b7ffa54b869f97d01d01c237612471b595cee41c1ab212e26e536ce0b6716ad1d6c4368a40c222698cac1 - languageName: node - linkType: hard - -"bs58@npm:6.0.0, bs58@npm:^6.0.0": - version: 6.0.0 - resolution: "bs58@npm:6.0.0" - dependencies: - base-x: "npm:^5.0.0" - checksum: 10/7c9bb2b2d93d997a8c652de3510d89772007ac64ee913dc4e16ba7ff47624caad3128dcc7f360763eb6308760c300b3e9fd91b8bcbd489acd1a13278e7949c4e - languageName: node - linkType: hard - -"bs58@npm:^4.0.0, bs58@npm:^4.0.1": - version: 4.0.1 - resolution: "bs58@npm:4.0.1" - dependencies: - base-x: "npm:^3.0.2" - checksum: 10/b3c5365bb9e0c561e1a82f1a2d809a1a692059fae016be233a6127ad2f50a6b986467c3a50669ce4c18929dcccb297c5909314dd347a25a68c21b68eb3e95ac2 - languageName: node - linkType: hard - -"bs58@npm:^5.0.0": - version: 5.0.0 - resolution: "bs58@npm:5.0.0" - dependencies: - base-x: "npm:^4.0.0" - checksum: 10/2475cb0684e07077521aac718e604a13e0f891d58cff923d437a2f7e9e28703ab39fce9f84c7c703ab369815a675f11e3bd394d38643bfe8969fbe42e6833d45 - languageName: node - linkType: hard - -"bs58check@npm:^2.1.2": - version: 2.1.2 - resolution: "bs58check@npm:2.1.2" - dependencies: - bs58: "npm:^4.0.0" - create-hash: "npm:^1.1.0" - safe-buffer: "npm:^5.1.2" - checksum: 10/43bdf08a5dd04581b78f040bc4169480e17008da482ffe2a6507327bbc4fc5c28de0501f7faf22901cfe57fbca79cbb202ca529003fedb4cb8dccd265b38e54d - languageName: node - linkType: hard - -"bs58check@npm:^4.0.0": - version: 4.0.0 - resolution: "bs58check@npm:4.0.0" - dependencies: - "@noble/hashes": "npm:^1.2.0" - bs58: "npm:^6.0.0" - checksum: 10/cf5691bdfdf317574f722582360a834f01a36e8f6c850bd5791f04e040b334a0800b7c322ad24c77979c3ed6ef6cf31a6373366b4018223e3005278d491d8799 - languageName: node - linkType: hard - -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: "npm:^0.4.0" - checksum: 10/edba1b65bae682450be4117b695997972bd9a3c4dfee029cab5bcb72ae5393a79a8f909b8bc77957eb0deec1c7168670f18f4d5c556f46cdd3bca5f3b3a8d020 - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 10/0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - -"buffer-xor@npm:^1.0.3": - version: 1.0.3 - resolution: "buffer-xor@npm:1.0.3" - checksum: 10/4a63d48b5117c7eda896d81cd3582d9707329b07c97a14b0ece2edc6e64220ea7ea17c94b295e8c2cb7b9f8291e2b079f9096be8ac14be238420a43e06ec66e2 - languageName: node - linkType: hard - -"buffer@npm:6.0.3, buffer@npm:^6.0.3, buffer@npm:~6.0.3": - version: 6.0.3 - resolution: "buffer@npm:6.0.3" - dependencies: - base64-js: "npm:^1.3.1" - ieee754: "npm:^1.2.1" - checksum: 10/b6bc68237ebf29bdacae48ce60e5e28fc53ae886301f2ad9496618efac49427ed79096750033e7eab1897a4f26ae374ace49106a5758f38fb70c78c9fda2c3b1 - languageName: node - linkType: hard - -"buffer@npm:^5.5.0, buffer@npm:^5.7.1": - version: 5.7.1 - resolution: "buffer@npm:5.7.1" - dependencies: - base64-js: "npm:^1.3.1" - ieee754: "npm:^1.1.13" - checksum: 10/997434d3c6e3b39e0be479a80288875f71cd1c07d75a3855e6f08ef848a3c966023f79534e22e415ff3a5112708ce06127277ab20e527146d55c84566405c7c6 - languageName: node - linkType: hard - -"bufferutil@npm:^4.0.1, bufferutil@npm:^4.0.8": - version: 4.0.8 - resolution: "bufferutil@npm:4.0.8" - dependencies: - node-gyp: "npm:latest" - node-gyp-build: "npm:^4.3.0" - checksum: 10/d9337badc960a19d5a031db5de47159d7d8a11b6bab399bdfbf464ffa9ecd2972fef19bb61a7d2827e0c55f912c20713e12343386b86cb013f2b99c2324ab6a3 - languageName: node - linkType: hard - -"bufio@npm:^1.0.7": - version: 1.2.2 - resolution: "bufio@npm:1.2.2" - checksum: 10/dcf0ab4f753a0af1c4215b41bd12596038d3111299673dd14aeee55206a6aa53b44292dc965cef0a41b008ddaeb38ccc9165f2d1cad0da5c8ba3754ef4b45aa1 - languageName: node - linkType: hard - -"builtin-modules@npm:^3.1.0": - version: 3.3.0 - resolution: "builtin-modules@npm:3.3.0" - checksum: 10/62e063ab40c0c1efccbfa9ffa31873e4f9d57408cb396a2649981a0ecbce56aabc93c28feaccbc5658c95aab2703ad1d11980e62ec2e5e72637404e1eb60f39e - languageName: node - linkType: hard - -"builtin-status-codes@npm:^3.0.0": - version: 3.0.0 - resolution: "builtin-status-codes@npm:3.0.0" - checksum: 10/1119429cf4b0d57bf76b248ad6f529167d343156ebbcc4d4e4ad600484f6bc63002595cbb61b67ad03ce55cd1d3c4711c03bbf198bf24653b8392420482f3773 - languageName: node - linkType: hard - -"bundle-name@npm:^4.1.0": - version: 4.1.0 - resolution: "bundle-name@npm:4.1.0" - dependencies: - run-applescript: "npm:^7.0.0" - checksum: 10/1d966c8d2dbf4d9d394e53b724ac756c2414c45c01340b37743621f59cc565a435024b394ddcb62b9b335d1c9a31f4640eb648c3fec7f97ee74dc0694c9beb6c - languageName: node - linkType: hard - -"bundle-require@npm:^4.0.2": - version: 4.2.1 - resolution: "bundle-require@npm:4.2.1" - dependencies: - load-tsconfig: "npm:^0.2.3" - peerDependencies: - esbuild: ">=0.17" - checksum: 10/e49cb6528373d4e086723bc37fb037e05e9cd529e1b3aa1c4da6c495c4725a0f74ae9cc461de35163d65dd3a6c41a0474c6e52b74b8ded4fe829c951d0784ec1 - languageName: node - linkType: hard - -"bundle-require@npm:^5.1.0": - version: 5.1.0 - resolution: "bundle-require@npm:5.1.0" - dependencies: - load-tsconfig: "npm:^0.2.3" - peerDependencies: - esbuild: ">=0.18" - checksum: 10/735e0220055b9bdac20bea48ec1e10dc3a205232c889ef54767900bebdc721959c4ccb221e4ea434d7ddcd693a8a4445c3d0598e4040ee313ce0ac3aae3e6178 - languageName: node - linkType: hard - -"busboy@npm:1.6.0, busboy@npm:^1.6.0": - version: 1.6.0 - resolution: "busboy@npm:1.6.0" - dependencies: - streamsearch: "npm:^1.1.0" - checksum: 10/bee10fa10ea58e7e3e7489ffe4bda6eacd540a17de9f9cd21cc37e297b2dd9fe52b2715a5841afaec82900750d810d01d7edb4b2d456427f449b92b417579763 - languageName: node - linkType: hard - -"bytes@npm:3.0.0": - version: 3.0.0 - resolution: "bytes@npm:3.0.0" - checksum: 10/a2b386dd8188849a5325f58eef69c3b73c51801c08ffc6963eddc9be244089ba32d19347caf6d145c86f315ae1b1fc7061a32b0c1aa6379e6a719090287ed101 - languageName: node - linkType: hard - -"bytes@npm:3.1.2": - version: 3.1.2 - resolution: "bytes@npm:3.1.2" - checksum: 10/a10abf2ba70c784471d6b4f58778c0beeb2b5d405148e66affa91f23a9f13d07603d0a0354667310ae1d6dc141474ffd44e2a074be0f6e2254edb8fc21445388 - languageName: node - linkType: hard - -"cac@npm:^6.7.14": - version: 6.7.14 - resolution: "cac@npm:6.7.14" - checksum: 10/002769a0fbfc51c062acd2a59df465a2a947916b02ac50b56c69ec6c018ee99ac3e7f4dd7366334ea847f1ecacf4defaa61bcd2ac283db50156ce1f1d8c8ad42 - languageName: node - linkType: hard - -"cacache@npm:^17.0.0": - version: 17.1.3 - resolution: "cacache@npm:17.1.3" - dependencies: - "@npmcli/fs": "npm:^3.1.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^7.7.1" - minipass: "npm:^5.0.0" - minipass-collect: "npm:^1.0.2" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^4.0.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - unique-filename: "npm:^3.0.0" - checksum: 10/216fb41c739b845c5acbc1f8a01876ccc6293644e701ad0abb7acb87b648a12abc2af5fc4b86df2d82731d0f7d6beebee85e62b1d59211535ed72de4b8b0fce6 - languageName: node - linkType: hard - -"cacheable-lookup@npm:^7.0.0": - version: 7.0.0 - resolution: "cacheable-lookup@npm:7.0.0" - checksum: 10/69ea78cd9f16ad38120372e71ba98b64acecd95bbcbcdad811f857dc192bad81ace021f8def012ce19178583db8d46afd1a00b3e8c88527e978e049edbc23252 - languageName: node - linkType: hard - -"cacheable-request@npm:^10.2.8": - version: 10.2.14 - resolution: "cacheable-request@npm:10.2.14" - dependencies: - "@types/http-cache-semantics": "npm:^4.0.2" - get-stream: "npm:^6.0.1" - http-cache-semantics: "npm:^4.1.1" - keyv: "npm:^4.5.3" - mimic-response: "npm:^4.0.0" - normalize-url: "npm:^8.0.0" - responselike: "npm:^3.0.0" - checksum: 10/102f454ac68eb66f99a709c5cf65e90ed89f1b9269752578d5a08590b3986c3ea47a5d9dff208fe7b65855a29da129a2f23321b88490106898e0ba70b807c912 - languageName: node - linkType: hard - -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": - version: 1.0.7 - resolution: "call-bind@npm:1.0.7" - dependencies: - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - set-function-length: "npm:^1.2.1" - checksum: 10/cd6fe658e007af80985da5185bff7b55e12ef4c2b6f41829a26ed1eef254b1f1c12e3dfd5b2b068c6ba8b86aba62390842d81752e67dcbaec4f6f76e7113b6b7 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 10/072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 - languageName: node - linkType: hard - -"camel-case@npm:^4.1.2": - version: 4.1.2 - resolution: "camel-case@npm:4.1.2" - dependencies: - pascal-case: "npm:^3.1.2" - tslib: "npm:^2.0.3" - checksum: 10/bcbd25cd253b3cbc69be3f535750137dbf2beb70f093bdc575f73f800acc8443d34fd52ab8f0a2413c34f1e8203139ffc88428d8863e4dfe530cfb257a379ad6 - languageName: node - linkType: hard - -"camelcase-css@npm:^2.0.1": - version: 2.0.1 - resolution: "camelcase-css@npm:2.0.1" - checksum: 10/1cec2b3b3dcb5026688a470b00299a8db7d904c4802845c353dbd12d9d248d3346949a814d83bfd988d4d2e5b9904c07efe76fecd195a1d4f05b543e7c0b56b1 - languageName: node - linkType: hard - -"camelcase-keys@npm:^6.2.2": - version: 6.2.2 - resolution: "camelcase-keys@npm:6.2.2" - dependencies: - camelcase: "npm:^5.3.1" - map-obj: "npm:^4.0.0" - quick-lru: "npm:^4.0.1" - checksum: 10/c1999f5b6d03bee7be9a36e48eef3da9e93e51b000677348ec8d15d51fc4418375890fb6c7155e387322d2ebb2a2cdebf9cd96607a6753d1d6c170d9b1e2eed5 - languageName: node - linkType: hard - -"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: 10/e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - -"camelcase@npm:^6.0.0, camelcase@npm:^6.2.0, camelcase@npm:^6.2.1": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 10/8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d - languageName: node - linkType: hard - -"camelize@npm:^1.0.0": - version: 1.0.1 - resolution: "camelize@npm:1.0.1" - checksum: 10/0e147b4299ac6363c50050716aadfae42831257ec56ce54773ffd2a94a88abb2e2540c5ccc38345e8a39963105b76d86cb24477165a36b78c9958fb304513db3 - languageName: node - linkType: hard - -"can-use-dom@npm:^0.1.0": - version: 0.1.0 - resolution: "can-use-dom@npm:0.1.0" - checksum: 10/4b465d2d176a3580428a7d406cb03dd0f05e068b1e1ac500c244eb7dd8c62613c87620c56b4a2c5c68c3d33dfd5a6fd56bde7bfb335dc5882f7489d68013600c - languageName: node - linkType: hard - -"caniuse-api@npm:^3.0.0": - version: 3.0.0 - resolution: "caniuse-api@npm:3.0.0" - dependencies: - browserslist: "npm:^4.0.0" - caniuse-lite: "npm:^1.0.0" - lodash.memoize: "npm:^4.1.2" - lodash.uniq: "npm:^4.5.0" - checksum: 10/db2a229383b20d0529b6b589dde99d7b6cb56ba371366f58cbbfa2929c9f42c01f873e2b6ef641d4eda9f0b4118de77dbb2805814670bdad4234bf08e720b0b4 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001464, caniuse-lite@npm:^1.0.30001579, caniuse-lite@npm:^1.0.30001629": - version: 1.0.30001683 - resolution: "caniuse-lite@npm:1.0.30001683" - checksum: 10/ea3be90bfdd52e5ca68e191e9d10e9399f1502922b3e1e912396bcdc3339f3c6e00941bcca6e889e9194087b25995e06c93bc5e363f34e20046530fc792ce45a - languageName: node - linkType: hard - -"canvas@npm:^2.11.2": - version: 2.11.2 - resolution: "canvas@npm:2.11.2" - dependencies: - "@mapbox/node-pre-gyp": "npm:^1.0.0" - nan: "npm:^2.17.0" - node-gyp: "npm:latest" - simple-get: "npm:^3.0.3" - checksum: 10/500040e93310b33f5733746b909712fdeced56aa74a1370c563f0c7ffc5b4a31006b2d881644b59eea8ab6c465406705a59b280f1d4e3ec4e1e2c88d4a725ca6 - languageName: node - linkType: hard - -"capital-case@npm:^1.0.4": - version: 1.0.4 - resolution: "capital-case@npm:1.0.4" - dependencies: - no-case: "npm:^3.0.4" - tslib: "npm:^2.0.3" - upper-case-first: "npm:^2.0.2" - checksum: 10/41fa8fa87f6d24d0835a2b4a9341a3eaecb64ac29cd7c5391f35d6175a0fa98ab044e7f2602e1ec3afc886231462ed71b5b80c590b8b41af903ec2c15e5c5931 - languageName: node - linkType: hard - -"case-sensitive-paths-webpack-plugin@npm:^2.4.0": - version: 2.4.0 - resolution: "case-sensitive-paths-webpack-plugin@npm:2.4.0" - checksum: 10/8187f4a6d9c1342a62e76466d4f2ed53e6c0ea73fdbf7779751538f2abe49738bfd16b43592367f00f37fdd593accf92162c1043c016dd6d9ccb55180b6b5fa7 - languageName: node - linkType: hard - -"cbor@npm:^10.0.0": - version: 10.0.3 - resolution: "cbor@npm:10.0.3" - dependencies: - nofilter: "npm:^3.0.2" - checksum: 10/ff33c3404c3acc8afc448163a7b32eea39f4f99d641ac496352a6830256617a0b1d49b2862746b6b150e8931b6f6da10572d78c28af3a64b6836881c33c5d942 - languageName: node - linkType: hard - -"cborg@npm:^2.0.1": - version: 2.0.1 - resolution: "cborg@npm:2.0.1" - bin: - cborg: cli.js - checksum: 10/91780454f08d47e95b14682f9e7ed8ab72fe9e47dd23c82aa0749f5738d8bf787ed1db1cf2a0dbb8d3486ce2cd3960b7523c43f5d3c9dce0c6dc4f7ac8d79cbe - languageName: node - linkType: hard - -"cbw-sdk@npm:@coinbase/wallet-sdk@3.9.3": - version: 3.9.3 - resolution: "@coinbase/wallet-sdk@npm:3.9.3" - dependencies: - bn.js: "npm:^5.2.1" - buffer: "npm:^6.0.3" - clsx: "npm:^1.2.1" - eth-block-tracker: "npm:^7.1.0" - eth-json-rpc-filters: "npm:^6.0.0" - eventemitter3: "npm:^5.0.1" - keccak: "npm:^3.0.3" - preact: "npm:^10.16.0" - sha.js: "npm:^2.4.11" - checksum: 10/3bc3f0edad8ea46cb7a127993373093d95b6fef03d2a6a40bae7983a1d9a20a114faa8e7bf1230efd380ffb67b42dae405c6617cd6fad6d278bf9b9e021a0280 - languageName: node - linkType: hard - -"ccount@npm:^2.0.0": - version: 2.0.1 - resolution: "ccount@npm:2.0.1" - checksum: 10/48193dada54c9e260e0acf57fc16171a225305548f9ad20d5471e0f7a8c026aedd8747091dccb0d900cde7df4e4ddbd235df0d8de4a64c71b12f0d3303eeafd4 - languageName: node - linkType: hard - -"chai-as-promised@npm:^7.1.1": - version: 7.1.1 - resolution: "chai-as-promised@npm:7.1.1" - dependencies: - check-error: "npm:^1.0.2" - peerDependencies: - chai: ">= 2.1.2 < 5" - checksum: 10/5d9ecab37b313047f5ea25d00b1cb6e7f2710c6e2f57d91aed7cfed5008d995cb65ea723af4e5d782bafd9a6eff5a4267af53dfe7212dc10dd1d92b9127bc531 - languageName: node - linkType: hard - -"chai@npm:^4.3.10, chai@npm:^4.3.4, chai@npm:^4.5.0": - version: 4.5.0 - resolution: "chai@npm:4.5.0" - dependencies: - assertion-error: "npm:^1.1.0" - check-error: "npm:^1.0.3" - deep-eql: "npm:^4.1.3" - get-func-name: "npm:^2.0.2" - loupe: "npm:^2.3.6" - pathval: "npm:^1.1.1" - type-detect: "npm:^4.1.0" - checksum: 10/cde341aee15b0a51559c7cfc20788dcfb4d586a498cfb93b937bb568fd45c777b73b1461274be6092b6bf868adb4e3a63f3fec13c89f7d8fb194f84c6fa42d5f - languageName: node - linkType: hard - -"chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10/cb3f3e594913d63b1814d7ca7c9bafbf895f75fbf93b92991980610dfd7b48500af4e3a5d4e3a8f337990a96b168d7eb84ee55efdce965e2ee8efc20f8c8f139 - languageName: node - linkType: hard - -"chalk@npm:5.3.0": - version: 5.3.0 - resolution: "chalk@npm:5.3.0" - checksum: 10/6373caaab21bd64c405bfc4bd9672b145647fc9482657b5ea1d549b3b2765054e9d3d928870cdf764fb4aad67555f5061538ff247b8310f110c5c888d92397ea - languageName: node - linkType: hard - -"chalk@npm:^2.4.1, chalk@npm:^2.4.2": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10/3d1d103433166f6bfe82ac75724951b33769675252d8417317363ef9d54699b7c3b2d46671b772b893a8e50c3ece70c4b933c73c01e81bc60ea4df9b55afa303 - languageName: node - linkType: hard - -"chalk@npm:^5.3.0": - version: 5.4.1 - resolution: "chalk@npm:5.4.1" - checksum: 10/29df3ffcdf25656fed6e95962e2ef86d14dfe03cd50e7074b06bad9ffbbf6089adbb40f75c00744d843685c8d008adaf3aed31476780312553caf07fa86e5bc7 - languageName: node - linkType: hard - -"change-case-all@npm:1.0.15": - version: 1.0.15 - resolution: "change-case-all@npm:1.0.15" - dependencies: - change-case: "npm:^4.1.2" - is-lower-case: "npm:^2.0.2" - is-upper-case: "npm:^2.0.2" - lower-case: "npm:^2.0.2" - lower-case-first: "npm:^2.0.2" - sponge-case: "npm:^1.0.1" - swap-case: "npm:^2.0.2" - title-case: "npm:^3.0.3" - upper-case: "npm:^2.0.2" - upper-case-first: "npm:^2.0.2" - checksum: 10/e1dabdcd8447a3690f3faf15f92979dfbc113109b50916976e1d5e518e6cfdebee4f05f54d0ca24fb79a4bf835185b59ae25e967bb3dc10bd236a775b19ecc52 - languageName: node - linkType: hard - -"change-case@npm:^4.1.2": - version: 4.1.2 - resolution: "change-case@npm:4.1.2" - dependencies: - camel-case: "npm:^4.1.2" - capital-case: "npm:^1.0.4" - constant-case: "npm:^3.0.4" - dot-case: "npm:^3.0.4" - header-case: "npm:^2.0.4" - no-case: "npm:^3.0.4" - param-case: "npm:^3.0.4" - pascal-case: "npm:^3.1.2" - path-case: "npm:^3.0.4" - sentence-case: "npm:^3.0.4" - snake-case: "npm:^3.0.4" - tslib: "npm:^2.0.3" - checksum: 10/e4bc4a093a1f7cce8b33896665cf9e456e3bc3cc0def2ad7691b1994cfca99b3188d0a513b16855b01a6bd20692fcde12a7d4d87a5615c4c515bbbf0e651f116 - languageName: node - linkType: hard - -"change-case@npm:^5.4.4": - version: 5.4.4 - resolution: "change-case@npm:5.4.4" - checksum: 10/446e5573f3c854290a91292afef92b957d2e43a928260c91989b482aa860caaa29711b6725fc40c200af68061cbab357b033446d16a17bc5c553636994074e92 - languageName: node - linkType: hard - -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: 10/1ec5c2906adb9f84e7f6732a40baef05d7c85401b82ffcbc44b85fbd0f7a2b0c2a96f2eb9cf55cae3235dc12d4023003b88f09bcae8be9ae894f52ed746f4d48 - languageName: node - linkType: hard - -"char-regex@npm:^2.0.0": - version: 2.0.1 - resolution: "char-regex@npm:2.0.1" - checksum: 10/fadd100b963c160a70192e47e122c654cadf447c2c8f23b0bda4dc9ef1a02c993abbb0f21f50e2e58f90a8453ca019b3c86f001688cb42fb7b54af4e661b1ada - languageName: node - linkType: hard - -"character-entities-html4@npm:^2.0.0": - version: 2.1.0 - resolution: "character-entities-html4@npm:2.1.0" - checksum: 10/7034aa7c7fa90309667f6dd50499c8a760c3d3a6fb159adb4e0bada0107d194551cdbad0714302f62d06ce4ed68565c8c2e15fdef2e8f8764eb63fa92b34b11d - languageName: node - linkType: hard - -"character-entities-legacy@npm:^3.0.0": - version: 3.0.0 - resolution: "character-entities-legacy@npm:3.0.0" - checksum: 10/7582af055cb488b626d364b7d7a4e46b06abd526fb63c0e4eb35bcb9c9799cc4f76b39f34fdccef2d1174ac95e53e9ab355aae83227c1a2505877893fce77731 - languageName: node - linkType: hard - -"character-entities@npm:^2.0.0": - version: 2.0.2 - resolution: "character-entities@npm:2.0.2" - checksum: 10/c8dd1f4bf1a92fccf7d2fad9673660a88b37854557d30f6076c32fedfb92d1420208298829ff1d3b6b4fa1c7012e8326c45e7f5c3ed1e9a09ec177593c521b2f - languageName: node - linkType: hard - -"character-reference-invalid@npm:^2.0.0": - version: 2.0.1 - resolution: "character-reference-invalid@npm:2.0.1" - checksum: 10/98d3b1a52ae510b7329e6ee7f6210df14f1e318c5415975d4c9e7ee0ef4c07875d47c6e74230c64551f12f556b4a8ccc24d9f3691a2aa197019e72a95e9297ee - languageName: node - linkType: hard - -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 10/b0ec668fba5eeec575ed2559a0917ba41a6481f49063c8445400e476754e0957ee09e44dc032310f526182b8f1bf25e9d4ed371f74050af7be1383e06bc44952 - languageName: node - linkType: hard - -"charenc@npm:>= 0.0.1": - version: 0.0.2 - resolution: "charenc@npm:0.0.2" - checksum: 10/81dcadbe57e861d527faf6dd3855dc857395a1c4d6781f4847288ab23cffb7b3ee80d57c15bba7252ffe3e5e8019db767757ee7975663ad2ca0939bb8fcaf2e5 - languageName: node - linkType: hard - -"chart.js@npm:^3.9.1": - version: 3.9.1 - resolution: "chart.js@npm:3.9.1" - checksum: 10/62ee137b296181d8d12e428cb83a02351768039ff672b8ff775534f844777e9c91a3213fc8c6c46b59175a47f23d1547178fdd64ff9afc37c2c1703b2cede93e - languageName: node - linkType: hard - -"chartjs-adapter-moment@npm:^1.0.1": - version: 1.0.1 - resolution: "chartjs-adapter-moment@npm:1.0.1" - peerDependencies: - chart.js: ">=3.0.0" - moment: ^2.10.2 - checksum: 10/98e3726e3d049d1e206e20adbf22da86ba16bd69a7570b8ea8ea945bba3645c44a012b638b06d765e1a6564121cb8bb3fd0b233014b5a40ca4910b79985ee180 - languageName: node - linkType: hard - -"chartjs-plugin-datalabels@npm:^2.2.0": - version: 2.2.0 - resolution: "chartjs-plugin-datalabels@npm:2.2.0" - peerDependencies: - chart.js: ">=3.0.0" - checksum: 10/e87c2f30d4f6f84b4b1a28c00d1b032d0100f87f8f296a498507047bd2f7fe98eced583a2c09f30e55806e79a0ca7e0db027cc3bed9b27688980e55701a6945f - languageName: node - linkType: hard - -"check-error@npm:^1.0.2, check-error@npm:^1.0.3": - version: 1.0.3 - resolution: "check-error@npm:1.0.3" - dependencies: - get-func-name: "npm:^2.0.2" - checksum: 10/e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 - languageName: node - linkType: hard - -"check-types@npm:^11.1.1": - version: 11.2.2 - resolution: "check-types@npm:11.2.2" - checksum: 10/a741fc4748d1923b0ff11003aab3fc18eaa8d8b6b3d5e93d21796fc6355f95557b9acc6189fe9e2411efe8724313b3123ba0bc1d728c0db30791c3b8a894a38a - languageName: node - linkType: hard - -"chokidar@npm:4.0.1, chokidar@npm:^4.0.0": - version: 4.0.1 - resolution: "chokidar@npm:4.0.1" - dependencies: - readdirp: "npm:^4.0.1" - checksum: 10/62749d2173a60cc5632d6c6e0b7024f33aadce47b06d02e55ad03c7b8daaaf2fc85d4296c047473d04387fd992dab9384cc5263c70a3dc3018b7ebecfb5b5217 - languageName: node - linkType: hard - -"chokidar@npm:4.0.3": - version: 4.0.3 - resolution: "chokidar@npm:4.0.3" - dependencies: - readdirp: "npm:^4.0.1" - checksum: 10/bf2a575ea5596000e88f5db95461a9d59ad2047e939d5a4aac59dd472d126be8f1c1ff3c7654b477cf532d18f42a97279ef80ee847972fd2a25410bf00b80b59 - languageName: node - linkType: hard - -"chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" - dependencies: - anymatch: "npm:~3.1.2" - braces: "npm:~3.0.2" - fsevents: "npm:~2.3.2" - glob-parent: "npm:~5.1.2" - is-binary-path: "npm:~2.1.0" - is-glob: "npm:~4.0.1" - normalize-path: "npm:~3.0.0" - readdirp: "npm:~3.6.0" - dependenciesMeta: - fsevents: - optional: true - checksum: 10/863e3ff78ee7a4a24513d2a416856e84c8e4f5e60efbe03e8ab791af1a183f569b62fc6f6b8044e2804966cb81277ddbbc1dc374fba3265bd609ea8efd62f5b3 - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: 10/c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - -"chrome-trace-event@npm:^1.0.2": - version: 1.0.3 - resolution: "chrome-trace-event@npm:1.0.3" - checksum: 10/b5fbdae5bf00c96fa3213de919f2b2617a942bfcb891cdf735fbad2a6f4f3c25d42e3f2b1703328619d352c718b46b9e18999fd3af7ef86c26c91db6fae1f0da - languageName: node - linkType: hard - -"ci-info@npm:^2.0.0": - version: 2.0.0 - resolution: "ci-info@npm:2.0.0" - checksum: 10/3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 - languageName: node - linkType: hard - -"ci-info@npm:^3.2.0": - version: 3.8.0 - resolution: "ci-info@npm:3.8.0" - checksum: 10/b00e9313c1f7042ca8b1297c157c920d6d69f0fbad7b867910235676df228c4b4f4df33d06cacae37f9efba7a160b0a167c6be85492b419ef71d85660e60606b - languageName: node - linkType: hard - -"ci-info@npm:^3.7.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 10/75bc67902b4d1c7b435497adeb91598f6d52a3389398e44294f6601b20cfef32cf2176f7be0eb961d9e085bb333a8a5cae121cb22f81cf238ae7f58eb80e9397 - languageName: node - linkType: hard - -"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": - version: 1.0.4 - resolution: "cipher-base@npm:1.0.4" - dependencies: - inherits: "npm:^2.0.1" - safe-buffer: "npm:^5.0.1" - checksum: 10/3d5d6652ca499c3f7c5d7fdc2932a357ec1e5aa84f2ad766d850efd42e89753c97b795c3a104a8e7ae35b4e293f5363926913de3bf8181af37067d9d541ca0db - languageName: node - linkType: hard - -"citty@npm:^0.1.3, citty@npm:^0.1.4": - version: 0.1.5 - resolution: "citty@npm:0.1.5" - dependencies: - consola: "npm:^3.2.3" - checksum: 10/ae577a1ff425f7483676358fd70269e43d585f080ab23cfad565d062d6615d469c7e1fdf1b7040858efa7ee6ccb89fc7497b28d4e0d6236cdce16b37c638993f - languageName: node - linkType: hard - -"cjs-module-lexer@npm:^1.0.0": - version: 1.2.3 - resolution: "cjs-module-lexer@npm:1.2.3" - checksum: 10/f96a5118b0a012627a2b1c13bd2fcb92509778422aaa825c5da72300d6dcadfb47134dd2e9d97dfa31acd674891dd91642742772d19a09a8adc3e56bd2f5928c - languageName: node - linkType: hard - -"classnames@npm:2.x, classnames@npm:^2.2.1, classnames@npm:^2.2.5, classnames@npm:^2.2.6, classnames@npm:^2.3.1": - version: 2.3.2 - resolution: "classnames@npm:2.3.2" - checksum: 10/ba3151c12e8b6a84c64b340ab4259ad0408947652009314462d828e94631505989c6a7d7e796bec1d309be9295d3111b498ad18a9d533fe3e6f859e51e574cbb - languageName: node - linkType: hard - -"clean-css@npm:^5.2.2": - version: 5.3.2 - resolution: "clean-css@npm:5.3.2" - dependencies: - source-map: "npm:~0.6.0" - checksum: 10/efd9efbf400f38a12f99324bad5359bdd153211b048721e4d4ddb629a88865dff3012dca547a14bdd783d78ccf064746e39fd91835546a08e2d811866aff0857 - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 10/2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 - languageName: node - linkType: hard - -"clean-stack@npm:^3.0.1": - version: 3.0.1 - resolution: "clean-stack@npm:3.0.1" - dependencies: - escape-string-regexp: "npm:4.0.0" - checksum: 10/dc18c842d7792dd72d463936b1b0a5b2621f0fc11588ee48b602e1a29b6c010c606d89f3de1f95d15d72de74aea93c0fbac8246593a31d95f8462cac36148e05 - languageName: node - linkType: hard - -"cli-boxes@npm:^2.2.1": - version: 2.2.1 - resolution: "cli-boxes@npm:2.2.1" - checksum: 10/be79f8ec23a558b49e01311b39a1ea01243ecee30539c880cf14bf518a12e223ef40c57ead0cb44f509bffdffc5c129c746cd50d863ab879385370112af4f585 - languageName: node - linkType: hard - -"cli-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-cursor@npm:3.1.0" - dependencies: - restore-cursor: "npm:^3.1.0" - checksum: 10/2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 - languageName: node - linkType: hard - -"cli-cursor@npm:^4.0.0": - version: 4.0.0 - resolution: "cli-cursor@npm:4.0.0" - dependencies: - restore-cursor: "npm:^4.0.0" - checksum: 10/ab3f3ea2076e2176a1da29f9d64f72ec3efad51c0960898b56c8a17671365c26e67b735920530eaf7328d61f8bd41c27f46b9cf6e4e10fe2fa44b5e8c0e392cc - languageName: node - linkType: hard - -"cli-spinners@npm:^2.2.0, cli-spinners@npm:^2.5.0": - version: 2.9.0 - resolution: "cli-spinners@npm:2.9.0" - checksum: 10/457497ccef70eec3f1d0825e4a3396ba43f6833a4900c2047c0efe2beecb1c0df476949ea378bcb6595754f7508e28ae943eeb30bbda807f59f547b270ec334c - languageName: node - linkType: hard - -"cli-spinners@npm:^2.9.2": - version: 2.9.2 - resolution: "cli-spinners@npm:2.9.2" - checksum: 10/a0a863f442df35ed7294424f5491fa1756bd8d2e4ff0c8736531d886cec0ece4d85e8663b77a5afaf1d296e3cbbebff92e2e99f52bbea89b667cbe789b994794 - languageName: node - linkType: hard - -"cli-table3@npm:0.6.0": - version: 0.6.0 - resolution: "cli-table3@npm:0.6.0" - dependencies: - colors: "npm:^1.1.2" - object-assign: "npm:^4.1.0" - string-width: "npm:^4.2.0" - dependenciesMeta: - colors: - optional: true - checksum: 10/1b05dd043155e31ea9a0312f70b69291ecb34a58f0edd65fcb6d9bc79ae4b187bde968bb764755fc605eee71f518ab61933669a11f50c217603abb7f4799dd69 - languageName: node - linkType: hard - -"cli-table3@npm:^0.6.0, cli-table3@npm:^0.6.3": - version: 0.6.5 - resolution: "cli-table3@npm:0.6.5" - dependencies: - "@colors/colors": "npm:1.5.0" - string-width: "npm:^4.2.0" - dependenciesMeta: - "@colors/colors": - optional: true - checksum: 10/8dca71256f6f1367bab84c33add3f957367c7c43750a9828a4212ebd31b8df76bd7419d386e3391ac7419698a8540c25f1a474584028f35b170841cde2e055c5 - languageName: node - linkType: hard - -"cli-truncate@npm:^2.1.0": - version: 2.1.0 - resolution: "cli-truncate@npm:2.1.0" - dependencies: - slice-ansi: "npm:^3.0.0" - string-width: "npm:^4.2.0" - checksum: 10/976f1887de067a8cd6ec830a7a8508336aebe6cec79b521d98ed13f67ef073b637f7305675b6247dd22f9e9cf045ec55fe746c7bdb288fbe8db0dfdc9fd52e55 - languageName: node - linkType: hard - -"cli-truncate@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-truncate@npm:3.1.0" - dependencies: - slice-ansi: "npm:^5.0.0" - string-width: "npm:^5.0.0" - checksum: 10/c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a - languageName: node - linkType: hard - -"cli-width@npm:^3.0.0": - version: 3.0.0 - resolution: "cli-width@npm:3.0.0" - checksum: 10/8730848b04fb189666ab037a35888d191c8f05b630b1d770b0b0e4c920b47bb5cc14bddf6b8ffe5bfc66cee97c8211d4d18e756c1ffcc75d7dbe7e1186cd7826 - languageName: node - linkType: hard - -"cli-width@npm:^4.1.0": - version: 4.1.0 - resolution: "cli-width@npm:4.1.0" - checksum: 10/b58876fbf0310a8a35c79b72ecfcf579b354e18ad04e6b20588724ea2b522799a758507a37dfe132fafaf93a9922cafd9514d9e1598e6b2cd46694853aed099f - languageName: node - linkType: hard - -"client-only@npm:0.0.1": - version: 0.0.1 - resolution: "client-only@npm:0.0.1" - checksum: 10/0c16bf660dadb90610553c1d8946a7fdfb81d624adea073b8440b7d795d5b5b08beb3c950c6a2cf16279365a3265158a236876d92bce16423c485c322d7dfaf8 - languageName: node - linkType: hard - -"clipboardy@npm:^3.0.0": - version: 3.0.0 - resolution: "clipboardy@npm:3.0.0" - dependencies: - arch: "npm:^2.2.0" - execa: "npm:^5.1.1" - is-wsl: "npm:^2.2.0" - checksum: 10/c4c374082ae3f44be6078e378b546a002461d5231461be21b0ca1a6a764eec5936e2fded9542a8ac120bad91e58999666f2dd3022ae3fae09de0dd6334f943e3 - languageName: node - linkType: hard - -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.0" - wrap-ansi: "npm:^6.2.0" - checksum: 10/44afbcc29df0899e87595590792a871cd8c4bc7d6ce92832d9ae268d141a77022adafca1aeaeccff618b62a613b8354e57fe22a275c199ec04baf00d381ef6ab - languageName: node - linkType: hard - -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.0" - wrap-ansi: "npm:^7.0.0" - checksum: 10/db858c49af9d59a32d603987e6fddaca2ce716cd4602ba5a2bb3a5af1351eebe82aba8dff3ef3e1b331f7fa9d40ca66e67bdf8e7c327ce0ea959747ead65c0ef - languageName: node - linkType: hard - -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^7.0.0" - checksum: 10/eaa5561aeb3135c2cddf7a3b3f562fc4238ff3b3fc666869ef2adf264be0f372136702f16add9299087fb1907c2e4ec5dbfe83bd24bce815c70a80c6c1a2e950 - languageName: node - linkType: hard - -"clone@npm:^1.0.2": - version: 1.0.4 - resolution: "clone@npm:1.0.4" - checksum: 10/d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd - languageName: node - linkType: hard - -"clsx@npm:^1.1.1, clsx@npm:^1.2.1": - version: 1.2.1 - resolution: "clsx@npm:1.2.1" - checksum: 10/5ded6f61f15f1fa0350e691ccec43a28b12fb8e64c8e94715f2a937bc3722d4c3ed41d6e945c971fc4dcc2a7213a43323beaf2e1c28654af63ba70c9968a8643 - languageName: node - linkType: hard - -"clsx@npm:^2.0.0, clsx@npm:^2.1.0, clsx@npm:^2.1.1": - version: 2.1.1 - resolution: "clsx@npm:2.1.1" - checksum: 10/cdfb57fa6c7649bbff98d9028c2f0de2f91c86f551179541cf784b1cfdc1562dcb951955f46d54d930a3879931a980e32a46b598acaea274728dbe068deca919 - languageName: node - linkType: hard - -"cluster-key-slot@npm:^1.1.0": - version: 1.1.2 - resolution: "cluster-key-slot@npm:1.1.2" - checksum: 10/516ed8b5e1a14d9c3a9c96c72ef6de2d70dfcdbaa0ec3a90bc7b9216c5457e39c09a5775750c272369070308542e671146120153062ab5f2f481bed5de2c925f - languageName: node - linkType: hard - -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 10/a5d9f37091c70398a269e625cedff5622f200ed0aa0cff22ee7b55ed74a123834b58711776eb0f1dc58eb6ebbc1185aa7567b57bd5979a948c6e4f85073e2c05 - languageName: node - linkType: hard - -"coa@npm:^2.0.2": - version: 2.0.2 - resolution: "coa@npm:2.0.2" - dependencies: - "@types/q": "npm:^1.5.1" - chalk: "npm:^2.4.1" - q: "npm:^1.1.2" - checksum: 10/3934203d8c2bc0b824c2347cc19060db7affcc522da1f21a3dd79ac1e9d9c8a60124fd5d771a4d99b4a49005e26022cd4e11268d868fb19cabd9a51ab652583f - languageName: node - linkType: hard - -"codemirror-wrapped-line-indent@npm:^1.0.8": - version: 1.0.9 - resolution: "codemirror-wrapped-line-indent@npm:1.0.9" - peerDependencies: - "@codemirror/language": ^6.9.0 - "@codemirror/state": ^6.2.1 - "@codemirror/view": ^6.17.1 - checksum: 10/83cd916c37ceb16db20268c4f3fdaf7d4239accb8901a618bd75631b9a0e0d155c899a4d6056eadb5d8c70c2feb6a45d39e5ddf9bde9a6e67011aaab3a4bb501 - languageName: node - linkType: hard - -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.1 - resolution: "collect-v8-coverage@npm:1.0.1" - checksum: 10/85b26945ab9b8e15077f877a4a5bc91d836480c600bac4cd0a0e8be8515583fdfc393ccff049ff3e9f46cac39e5295af049209f3c484f30a028056cc5dd1fe8a - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10/ffa319025045f2973919d155f25e7c00d08836b6b33ea2d205418c59bd63a665d713c52d9737a9e0fe467fb194b40fbef1d849bae80d674568ee220a31ef3d10 - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10/fa00c91b4332b294de06b443923246bccebe9fab1b253f7fe1772d37b06a2269b4039a85e309abe1fe11b267b11c08d1d0473fda3badd6167f57313af2887a64 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10/09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10/b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 - languageName: node - linkType: hard - -"color-support@npm:^1.1.2, color-support@npm:^1.1.3": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 10/4bcfe30eea1498fe1cabc852bbda6c9770f230ea0e4faf4611c5858b1b9e4dde3730ac485e65f54ca182f4c50b626c1bea7c8441ceda47367a54a818c248aa7a - languageName: node - linkType: hard - -"colord@npm:^2.9.1": - version: 2.9.3 - resolution: "colord@npm:2.9.3" - checksum: 10/907a4506d7307e2f580b471b581e992181ed75ab0c6925ece9ca46d88161d2fc50ed15891cd0556d0d9321237ca75afc9d462e4c050b939ef88428517f047f30 - languageName: node - linkType: hard - -"colorette@npm:^2.0.10, colorette@npm:^2.0.16, colorette@npm:^2.0.20, colorette@npm:^2.0.7": - version: 2.0.20 - resolution: "colorette@npm:2.0.20" - checksum: 10/0b8de48bfa5d10afc160b8eaa2b9938f34a892530b2f7d7897e0458d9535a066e3998b49da9d21161c78225b272df19ae3a64d6df28b4c9734c0e55bbd02406f - languageName: node - linkType: hard - -"colors@npm:1.4.0, colors@npm:^1.1.2": - version: 1.4.0 - resolution: "colors@npm:1.4.0" - checksum: 10/90b2d5465159813a3983ea72ca8cff75f784824ad70f2cc2b32c233e95bcfbcda101ebc6d6766bc50f57263792629bfb4f1f8a4dfbd1d240f229fc7f69b785fc - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10/2e969e637d05d09fa50b02d74c83a1186f6914aae89e6653b62595cc75a221464f884f55f231b8f4df7a49537fba60bdc0427acd2bf324c09a1dbb84837e36e4 - languageName: node - linkType: hard - -"comma-separated-tokens@npm:^2.0.0": - version: 2.0.3 - resolution: "comma-separated-tokens@npm:2.0.3" - checksum: 10/e3bf9e0332a5c45f49b90e79bcdb4a7a85f28d6a6f0876a94f1bb9b2bfbdbbb9292aac50e1e742d8c0db1e62a0229a106f57917e2d067fca951d81737651700d - languageName: node - linkType: hard - -"command-exists@npm:^1.2.8": - version: 1.2.9 - resolution: "command-exists@npm:1.2.9" - checksum: 10/46fb3c4d626ca5a9d274f8fe241230817496abc34d12911505370b7411999e183c11adff7078dd8a03ec4cf1391290facda40c6a4faac8203ae38c985eaedd63 - languageName: node - linkType: hard - -"command-line-args@npm:^5.1.1": - version: 5.2.1 - resolution: "command-line-args@npm:5.2.1" - dependencies: - array-back: "npm:^3.1.0" - find-replace: "npm:^3.0.0" - lodash.camelcase: "npm:^4.3.0" - typical: "npm:^4.0.0" - checksum: 10/e6a42652ae8843fbb56e2fba1e85da00a16a0482896bb1849092e1bc70b8bf353d945e69732bf4ae98370ff84e8910ff4933af8f2f747806a6b2cb5074799fdb - languageName: node - linkType: hard - -"command-line-usage@npm:^6.1.0": - version: 6.1.3 - resolution: "command-line-usage@npm:6.1.3" - dependencies: - array-back: "npm:^4.0.2" - chalk: "npm:^2.4.2" - table-layout: "npm:^1.0.2" - typical: "npm:^5.2.0" - checksum: 10/902901582a543b26f55f90fc0f266c08a603a92bfadd8d07c66679f3d9eea2c074a039404126b0c4b65ff8452153c5f2010ea2f4ec14b70be0c77241f6d5bd53 - languageName: node - linkType: hard - -"commander@npm:11.0.0": - version: 11.0.0 - resolution: "commander@npm:11.0.0" - checksum: 10/71cf453771c15d4e94afdd76a1e9bb31597dbc5f33130a1d399a4a7bc14eac765ebca7f0e077f347e5119087f6faa0017fd5e3cb6e4fc5c453853334c26162bc - languageName: node - linkType: hard - -"commander@npm:^10.0.0": - version: 10.0.1 - resolution: "commander@npm:10.0.1" - checksum: 10/8799faa84a30da985802e661cc9856adfaee324d4b138413013ef7f087e8d7924b144c30a1f1405475f0909f467665cd9e1ce13270a2f41b141dab0b7a58f3fb - languageName: node - linkType: hard - -"commander@npm:^12.0.0, commander@npm:^12.1.0": - version: 12.1.0 - resolution: "commander@npm:12.1.0" - checksum: 10/cdaeb672d979816853a4eed7f1310a9319e8b976172485c2a6b437ed0db0a389a44cfb222bfbde772781efa9f215bdd1b936f80d6b249485b465c6cb906e1f93 - languageName: node - linkType: hard - -"commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.20.3": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: 10/90c5b6898610cd075984c58c4f88418a4fb44af08c1b1415e9854c03171bec31b336b7f3e4cefe33de994b3f12b03c5e2d638da4316df83593b9e82554e7e95b - languageName: node - linkType: hard - -"commander@npm:^4.0.0": - version: 4.1.1 - resolution: "commander@npm:4.1.1" - checksum: 10/3b2dc4125f387dab73b3294dbcb0ab2a862f9c0ad748ee2b27e3544d25325b7a8cdfbcc228d103a98a716960b14478114a5206b5415bd48cdafa38797891562c - languageName: node - linkType: hard - -"commander@npm:^7.2.0": - version: 7.2.0 - resolution: "commander@npm:7.2.0" - checksum: 10/9973af10727ad4b44f26703bf3e9fdc323528660a7590efe3aa9ad5042b4584c0deed84ba443f61c9d6f02dade54a5a5d3c95e306a1e1630f8374ae6db16c06d - languageName: node - linkType: hard - -"commander@npm:^8.1.0, commander@npm:^8.3.0": - version: 8.3.0 - resolution: "commander@npm:8.3.0" - checksum: 10/6b7b5d334483ce24bd73c5dac2eab901a7dbb25fd983ea24a1eeac6e7166bb1967f641546e8abf1920afbde86a45fbfe5812fbc69d0dc451bb45ca416a12a3a3 - languageName: node - linkType: hard - -"common-path-prefix@npm:^3.0.0": - version: 3.0.0 - resolution: "common-path-prefix@npm:3.0.0" - checksum: 10/09c180e8d8495d42990d617f4d4b7522b5da20f6b236afe310192d401d1da8147a7835ae1ea37797ba0c2238ef3d06f3492151591451df34539fdb4b2630f2b3 - languageName: node - linkType: hard - -"common-tags@npm:1.8.2, common-tags@npm:^1.8.0": - version: 1.8.2 - resolution: "common-tags@npm:1.8.2" - checksum: 10/c665d0f463ee79dda801471ad8da6cb33ff7332ba45609916a508ad3d77ba07ca9deeb452e83f81f24c2b081e2c1315347f23d239210e63d1c5e1a0c7c019fe2 - languageName: node - linkType: hard - -"commondir@npm:^1.0.1": - version: 1.0.1 - resolution: "commondir@npm:1.0.1" - checksum: 10/4620bc4936a4ef12ce7dfcd272bb23a99f2ad68889a4e4ad766c9f8ad21af982511934d6f7050d4a8bde90011b1c15d56e61a1b4576d9913efbf697a20172d6c - languageName: node - linkType: hard - -"compare-func@npm:^2.0.0": - version: 2.0.0 - resolution: "compare-func@npm:2.0.0" - dependencies: - array-ify: "npm:^1.0.0" - dot-prop: "npm:^5.1.0" - checksum: 10/fb71d70632baa1e93283cf9d80f30ac97f003aabee026e0b4426c9716678079ef5fea7519b84d012cbed938c476493866a38a79760564a9e21ae9433e40e6f0d - languageName: node - linkType: hard - -"compare-versions@npm:^6.0.0, compare-versions@npm:^6.1.1": - version: 6.1.1 - resolution: "compare-versions@npm:6.1.1" - checksum: 10/9325c0fadfba81afa0ec17e6fc2ef823ba785c693089698b8d9374e5460509f1916a88591644d4cb4045c9a58e47fafbcc0724fe8bf446d2a875a3d6eeddf165 - languageName: node - linkType: hard - -"compressible@npm:~2.0.16": - version: 2.0.18 - resolution: "compressible@npm:2.0.18" - dependencies: - mime-db: "npm:>= 1.43.0 < 2" - checksum: 10/58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0 - languageName: node - linkType: hard - -"compression@npm:^1.7.4": - version: 1.7.4 - resolution: "compression@npm:1.7.4" - dependencies: - accepts: "npm:~1.3.5" - bytes: "npm:3.0.0" - compressible: "npm:~2.0.16" - debug: "npm:2.6.9" - on-headers: "npm:~1.0.2" - safe-buffer: "npm:5.1.2" - vary: "npm:~1.1.2" - checksum: 10/469cd097908fe1d3ff146596d4c24216ad25eabb565c5456660bdcb3a14c82ebc45c23ce56e19fc642746cf407093b55ab9aa1ac30b06883b27c6c736e6383c2 - languageName: node - linkType: hard - -"compute-scroll-into-view@npm:^1.0.20": - version: 1.0.20 - resolution: "compute-scroll-into-view@npm:1.0.20" - checksum: 10/a72e2595ccab57ca61bb14b368738c7473ebb96da6c85f4dbe00cb810570f71f52d9c26b4463f6092663cbf917d0693881eef4f8e8d4204d7581a83bef082afe - languageName: node - linkType: hard - -"computeds@npm:^0.0.1": - version: 0.0.1 - resolution: "computeds@npm:0.0.1" - checksum: 10/738625ccec6e483124d0ac79ec5474ab5c9df103ea05afc1fd840eed7d9004e3d6009b7bc806df564d66ad915c1ee1fb017bd91b2b32606a252ea9870b6a4026 - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10/9680699c8e2b3af0ae22592cb764acaf973f292a7b71b8a06720233011853a58e256c89216a10cbe889727532fd77f8bcd49a760cedfde271b8e006c20e079f2 - languageName: node - linkType: hard - -"config-chain@npm:^1.1.11": - version: 1.1.13 - resolution: "config-chain@npm:1.1.13" - dependencies: - ini: "npm:^1.3.4" - proto-list: "npm:~1.2.1" - checksum: 10/83d22cabf709e7669f6870021c4d552e4fc02e9682702b726be94295f42ce76cfed00f70b2910ce3d6c9465d9758e191e28ad2e72ff4e3331768a90da6c1ef03 - languageName: node - linkType: hard - -"confusing-browser-globals@npm:^1.0.11": - version: 1.0.11 - resolution: "confusing-browser-globals@npm:1.0.11" - checksum: 10/3afc635abd37e566477f610e7978b15753f0e84025c25d49236f1f14d480117185516bdd40d2a2167e6bed8048641a9854964b9c067e3dcdfa6b5d0ad3c3a5ef - languageName: node - linkType: hard - -"connect-history-api-fallback@npm:^2.0.0": - version: 2.0.0 - resolution: "connect-history-api-fallback@npm:2.0.0" - checksum: 10/3b26bf4041fdb33deacdcb3af9ae11e9a0b413fb14c95844d74a460b55e407625b364955dcf965c654605cde9d24ad5dad423c489aa430825aab2035859aba0c - languageName: node - linkType: hard - -"consola@npm:^3.2.3": - version: 3.2.3 - resolution: "consola@npm:3.2.3" - checksum: 10/02972dcb048c337357a3628438e5976b8e45bcec22fdcfbe9cd17622992953c4d695d5152f141464a02deac769b1d23028e8ac87f56483838df7a6bbf8e0f5a2 - languageName: node - linkType: hard - -"console-browserify@npm:^1.1.0": - version: 1.2.0 - resolution: "console-browserify@npm:1.2.0" - checksum: 10/4f16c471fa84909af6ae00527ce8d19dd9ed587eab85923c145cadfbc35414139f87e7bdd61746138e22cd9df45c2a1ca060370998c2c39f801d4a778105bac5 - languageName: node - linkType: hard - -"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 10/27b5fa302bc8e9ae9e98c03c66d76ca289ad0c61ce2fe20ab288d288bee875d217512d2edb2363fc83165e88f1c405180cf3f5413a46e51b4fe1a004840c6cdb - languageName: node - linkType: hard - -"consolidate@npm:^0.15.1": - version: 0.15.1 - resolution: "consolidate@npm:0.15.1" - dependencies: - bluebird: "npm:^3.1.1" - checksum: 10/7653a4894fb9d2ab61d7cb5f4c20da0e794956fea741f0b965ad045e091ba3977d977d409d57cc5b934cb4350fe05a6f185a32cb87cc5316bdf3fee406610608 - languageName: node - linkType: hard - -"constant-case@npm:^3.0.4": - version: 3.0.4 - resolution: "constant-case@npm:3.0.4" - dependencies: - no-case: "npm:^3.0.4" - tslib: "npm:^2.0.3" - upper-case: "npm:^2.0.2" - checksum: 10/6c3346d51afc28d9fae922e966c68eb77a19d94858dba230dd92d7b918b37d36db50f0311e9ecf6847e43e934b1c01406a0936973376ab17ec2c471fbcfb2cf3 - languageName: node - linkType: hard - -"constants-browserify@npm:^1.0.0": - version: 1.0.0 - resolution: "constants-browserify@npm:1.0.0" - checksum: 10/49ef0babd907616dddde6905b80fe44ad5948e1eaaf6cf65d5f23a8c60c029ff63a1198c364665be1d6b2cb183d7e12921f33049cc126734ade84a3cfdbc83f6 - languageName: node - linkType: hard - -"content-disposition@npm:0.5.4": - version: 0.5.4 - resolution: "content-disposition@npm:0.5.4" - dependencies: - safe-buffer: "npm:5.2.1" - checksum: 10/b7f4ce176e324f19324be69b05bf6f6e411160ac94bc523b782248129eb1ef3be006f6cff431aaea5e337fe5d176ce8830b8c2a1b721626ead8933f0cbe78720 - languageName: node - linkType: hard - -"content-type@npm:^1.0.4, content-type@npm:~1.0.4": - version: 1.0.5 - resolution: "content-type@npm:1.0.5" - checksum: 10/585847d98dc7fb8035c02ae2cb76c7a9bd7b25f84c447e5ed55c45c2175e83617c8813871b4ee22f368126af6b2b167df655829007b21aa10302873ea9c62662 - languageName: node - linkType: hard - -"conventional-changelog-angular@npm:^5.0.12": - version: 5.0.13 - resolution: "conventional-changelog-angular@npm:5.0.13" - dependencies: - compare-func: "npm:^2.0.0" - q: "npm:^1.5.1" - checksum: 10/e7ee31ac703bc139552a735185f330d1b2e53d7c1ff40a78bf43339e563d95c290a4f57e68b76bb223345524702d80bf18dc955417cd0852d9457595c04ad8ce - languageName: node - linkType: hard - -"conventional-changelog-angular@npm:^6.0.0": - version: 6.0.0 - resolution: "conventional-changelog-angular@npm:6.0.0" - dependencies: - compare-func: "npm:^2.0.0" - checksum: 10/ddc59ead53a45b817d83208200967f5340866782b8362d5e2e34105fdfa3d3a31585ebbdec7750bdb9de53da869f847e8ca96634a9801f51e27ecf4e7ffe2bad - languageName: node - linkType: hard - -"conventional-changelog-atom@npm:^2.0.8": - version: 2.0.8 - resolution: "conventional-changelog-atom@npm:2.0.8" - dependencies: - q: "npm:^1.5.1" - checksum: 10/53ae65ef33913538085f4cdda4904384a7b17374342efc2f34ad697569cb2011b2327d744ef5750ea651d27bfd401a166f9b6b5c2dc8564b38346910593dfae0 - languageName: node - linkType: hard - -"conventional-changelog-cli@npm:^2.2.2": - version: 2.2.2 - resolution: "conventional-changelog-cli@npm:2.2.2" - dependencies: - add-stream: "npm:^1.0.0" - conventional-changelog: "npm:^3.1.24" - lodash: "npm:^4.17.15" - meow: "npm:^8.0.0" - tempfile: "npm:^3.0.0" - bin: - conventional-changelog: cli.js - checksum: 10/64b136e0799787146a092f1b9a1c07b2b6184de576f5d72ee606f90936cd2e991f82bc118b3932c5b019d65a041148017cdc747565e6748ae0448c75b7fa96f9 - languageName: node - linkType: hard - -"conventional-changelog-codemirror@npm:^2.0.8": - version: 2.0.8 - resolution: "conventional-changelog-codemirror@npm:2.0.8" - dependencies: - q: "npm:^1.5.1" - checksum: 10/45183dcb16fa19fe8bc6cc1affc34ea856150e826fe83579f52b5b934f83fe71df64094a8061ccdb2890b94c9dc01a97d04618c88fa6ee58a1ac7f82067cad11 - languageName: node - linkType: hard - -"conventional-changelog-conventionalcommits@npm:^4.5.0": - version: 4.6.3 - resolution: "conventional-changelog-conventionalcommits@npm:4.6.3" - dependencies: - compare-func: "npm:^2.0.0" - lodash: "npm:^4.17.15" - q: "npm:^1.5.1" - checksum: 10/70b9ba65a72d57d40aeea7e787cd200cd8350430ad959892a6cc2cb8b9c3874ba8e331d355c2565549c0a28881c114c5a8f1d4dab61fd8607f29d7e2174e181b - languageName: node - linkType: hard - -"conventional-changelog-conventionalcommits@npm:^6.1.0": - version: 6.1.0 - resolution: "conventional-changelog-conventionalcommits@npm:6.1.0" - dependencies: - compare-func: "npm:^2.0.0" - checksum: 10/7e5caef7d65b381a0b302534058acff83adc7a907094c85379ef138c35f2aa043cf8e7a3bef30f42078dcc4bff0e8bc763b179c007dd732d92856fae0607a4bc - languageName: node - linkType: hard - -"conventional-changelog-core@npm:^4.2.1": - version: 4.2.4 - resolution: "conventional-changelog-core@npm:4.2.4" - dependencies: - add-stream: "npm:^1.0.0" - conventional-changelog-writer: "npm:^5.0.0" - conventional-commits-parser: "npm:^3.2.0" - dateformat: "npm:^3.0.0" - get-pkg-repo: "npm:^4.0.0" - git-raw-commits: "npm:^2.0.8" - git-remote-origin-url: "npm:^2.0.0" - git-semver-tags: "npm:^4.1.1" - lodash: "npm:^4.17.15" - normalize-package-data: "npm:^3.0.0" - q: "npm:^1.5.1" - read-pkg: "npm:^3.0.0" - read-pkg-up: "npm:^3.0.0" - through2: "npm:^4.0.0" - checksum: 10/c8104986724ec384baa559425485bd7834bb94a12e5d52b71b4829eddf664895be4c6269504a83788179959e60e40ba2fcbdb474cc70606ba7ce06b61e016726 - languageName: node - linkType: hard - -"conventional-changelog-ember@npm:^2.0.9": - version: 2.0.9 - resolution: "conventional-changelog-ember@npm:2.0.9" - dependencies: - q: "npm:^1.5.1" - checksum: 10/87faf4223079a8089c8377fc77a01a567c6f58b46e9699143cc3125301ae520a69cd132a847d26b218871e7a0e074303764ee2da03d019c691f498a0abcfd32c - languageName: node - linkType: hard - -"conventional-changelog-eslint@npm:^3.0.9": - version: 3.0.9 - resolution: "conventional-changelog-eslint@npm:3.0.9" - dependencies: - q: "npm:^1.5.1" - checksum: 10/f12f82adaeb6353fa04ab7ff4c245373edefdead215b901ac7c15b51dc6c3fb00ea8fbbaa1a393803aba9d3bdf89fd5125167850ccc3f42260f403e6b2f0cde8 - languageName: node - linkType: hard - -"conventional-changelog-express@npm:^2.0.6": - version: 2.0.6 - resolution: "conventional-changelog-express@npm:2.0.6" - dependencies: - q: "npm:^1.5.1" - checksum: 10/08db048159e9bd140a4c607c17023d37ab29aeb5f31bd62388cb8e7c647e39c6e44d181e1cfb8ef7c36ea0ec240aa9a1bf0e8400c872ae654a0d8d1f4e8caccb - languageName: node - linkType: hard - -"conventional-changelog-jquery@npm:^3.0.11": - version: 3.0.11 - resolution: "conventional-changelog-jquery@npm:3.0.11" - dependencies: - q: "npm:^1.5.1" - checksum: 10/18720ee26785aa0e31b0098b0b85779f4e7410d6eb3c7a7cfb0ea5c5125b970e11ac18a2d5b414806286fc389047c8592d792cbe47ed17a49e4661bd9aac1c74 - languageName: node - linkType: hard - -"conventional-changelog-jshint@npm:^2.0.9": - version: 2.0.9 - resolution: "conventional-changelog-jshint@npm:2.0.9" - dependencies: - compare-func: "npm:^2.0.0" - q: "npm:^1.5.1" - checksum: 10/42e16d0e41464619c68eefa00efdb9787a2be4923c33a1d607e5e281c3326491cc3674a67191ba8bd3cbdbe2a820de532622a8c6c9a10eae1639c48da458ab01 - languageName: node - linkType: hard - -"conventional-changelog-preset-loader@npm:^2.3.4": - version: 2.3.4 - resolution: "conventional-changelog-preset-loader@npm:2.3.4" - checksum: 10/23a889b7fcf6fe7653e61f32a048877b2f954dcc1e0daa2848c5422eb908e6f24c78372f8d0d2130b5ed941c02e7010c599dccf44b8552602c6c8db9cb227453 - languageName: node - linkType: hard - -"conventional-changelog-writer@npm:^5.0.0": - version: 5.0.1 - resolution: "conventional-changelog-writer@npm:5.0.1" - dependencies: - conventional-commits-filter: "npm:^2.0.7" - dateformat: "npm:^3.0.0" - handlebars: "npm:^4.7.7" - json-stringify-safe: "npm:^5.0.1" - lodash: "npm:^4.17.15" - meow: "npm:^8.0.0" - semver: "npm:^6.0.0" - split: "npm:^1.0.0" - through2: "npm:^4.0.0" - bin: - conventional-changelog-writer: cli.js - checksum: 10/09703c3fcea24753ac79dd408fad391f64b7e48c6b3813d0429e6ed25b72aec5235400cf9f182400520ad193598983a81345ad817ca9c37ae289ef70975ae0c6 - languageName: node - linkType: hard - -"conventional-changelog@npm:^3.1.24": - version: 3.1.25 - resolution: "conventional-changelog@npm:3.1.25" - dependencies: - conventional-changelog-angular: "npm:^5.0.12" - conventional-changelog-atom: "npm:^2.0.8" - conventional-changelog-codemirror: "npm:^2.0.8" - conventional-changelog-conventionalcommits: "npm:^4.5.0" - conventional-changelog-core: "npm:^4.2.1" - conventional-changelog-ember: "npm:^2.0.9" - conventional-changelog-eslint: "npm:^3.0.9" - conventional-changelog-express: "npm:^2.0.6" - conventional-changelog-jquery: "npm:^3.0.11" - conventional-changelog-jshint: "npm:^2.0.9" - conventional-changelog-preset-loader: "npm:^2.3.4" - checksum: 10/27f4651ec70d24ca45f8b12b88c81ac258ab0912044ea6dc701dd4119df326d9094919d032b2f4ab366f41aa70480d759398f910f6534975ace1989f7935b790 - languageName: node - linkType: hard - -"conventional-commits-filter@npm:^2.0.7": - version: 2.0.7 - resolution: "conventional-commits-filter@npm:2.0.7" - dependencies: - lodash.ismatch: "npm:^4.4.0" - modify-values: "npm:^1.0.0" - checksum: 10/c7e25df941047750324704ca61ea281cbc156d359a1bd8587dc5e9e94311fa8343d97be9f1115b2e3948624830093926992a2854ae1ac8cbc560e60e360fdd9b - languageName: node - linkType: hard - -"conventional-commits-parser@npm:^3.2.0": - version: 3.2.4 - resolution: "conventional-commits-parser@npm:3.2.4" - dependencies: - JSONStream: "npm:^1.0.4" - is-text-path: "npm:^1.0.1" - lodash: "npm:^4.17.15" - meow: "npm:^8.0.0" - split2: "npm:^3.0.0" - through2: "npm:^4.0.0" - bin: - conventional-commits-parser: cli.js - checksum: 10/2f9d31bade60ae68c1296ae67e47099c547a9452e1670fc5bfa64b572cadc9f305797c88a855f064dd899cc4eb4f15dd5a860064cdd8c52085066538019fe2a5 - languageName: node - linkType: hard - -"conventional-commits-parser@npm:^4.0.0": - version: 4.0.0 - resolution: "conventional-commits-parser@npm:4.0.0" - dependencies: - JSONStream: "npm:^1.3.5" - is-text-path: "npm:^1.0.1" - meow: "npm:^8.1.2" - split2: "npm:^3.2.2" - bin: - conventional-commits-parser: cli.js - checksum: 10/d3b7d947b486d3bb40f961808947ee46487429e050be840030211a80aa2eec170e427207c830f2720d8ab898649a652bbbe1825993b8bf0596517e3603f5a1bd - languageName: node - linkType: hard - -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: 10/dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 - languageName: node - linkType: hard - -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 10/c987be3ec061348cdb3c2bfb924bec86dea1eacad10550a85ca23edb0fe3556c3a61c7399114f3331ccb3499d7fd0285ab24566e5745929412983494c3926e15 - languageName: node - linkType: hard - -"cookie-es@npm:^1.0.0": - version: 1.0.0 - resolution: "cookie-es@npm:1.0.0" - checksum: 10/7654e65c3a0b6b6e5d695aa05da72e5e77235a0a8bc3ac94afb3be250db82bea721aa18fb879d6ebc9627ea39c3efc8211ef76bf24bc534e600ac575929f2f1b - languageName: node - linkType: hard - -"cookie-signature@npm:1.0.6": - version: 1.0.6 - resolution: "cookie-signature@npm:1.0.6" - checksum: 10/f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a - languageName: node - linkType: hard - -"cookie@npm:0.5.0": - version: 0.5.0 - resolution: "cookie@npm:0.5.0" - checksum: 10/aae7911ddc5f444a9025fbd979ad1b5d60191011339bce48e555cb83343d0f98b865ff5c4d71fecdfb8555a5cafdc65632f6fce172f32aaf6936830a883a0380 - languageName: node - linkType: hard - -"cookie@npm:^0.4.1": - version: 0.4.2 - resolution: "cookie@npm:0.4.2" - checksum: 10/2e1de9fdedca54881eab3c0477aeb067f281f3155d9cfee9d28dfb252210d09e85e9d175c0a60689661feb9e35e588515352f2456bc1f8e8db4267e05fd70137 - languageName: node - linkType: hard - -"copy-to-clipboard@npm:^3.3.1": - version: 3.3.3 - resolution: "copy-to-clipboard@npm:3.3.3" - dependencies: - toggle-selection: "npm:^1.0.6" - checksum: 10/e0a325e39b7615108e6c1c8ac110ae7b829cdc4ee3278b1df6a0e4228c490442cc86444cd643e2da344fbc424b3aab8909e2fec82f8bc75e7e5b190b7c24eecf - languageName: node - linkType: hard - -"core-js-compat@npm:^3.30.1, core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.36.1": - version: 3.37.1 - resolution: "core-js-compat@npm:3.37.1" - dependencies: - browserslist: "npm:^4.23.0" - checksum: 10/30c6fdbd9ff179cc53951814689b8aabec106e5de6cddfa7a7feacc96b66d415b8eebcf5ec8f7c68ef35c552fe7d39edb8b15b1ce0f27379a272295b6e937061 - languageName: node - linkType: hard - -"core-js-pure@npm:^3.23.3": - version: 3.31.0 - resolution: "core-js-pure@npm:3.31.0" - checksum: 10/8862bc3af702d61e141ebd902242f04b960a5654559692dda1c007eda274aa0158fdb895c279f98584041876055817386a3fbad1c18154113b086635da7e0881 - languageName: node - linkType: hard - -"core-js@npm:^3.0.1, core-js@npm:^3.19.2, core-js@npm:^3.37.1, core-js@npm:^3.39.0": - version: 3.39.0 - resolution: "core-js@npm:3.39.0" - checksum: 10/a3d34e669783dfc878e545f1983f60d9ff48a3867cd1d7ff8839b849e053002a208c7c14a5ca354b8e0b54982901e2f83dc87c3d9b95de0a94b4071d1c74e5f6 - languageName: node - linkType: hard - -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 10/9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 - languageName: node - linkType: hard - -"cosmiconfig-typescript-loader@npm:^4.0.0": - version: 4.3.0 - resolution: "cosmiconfig-typescript-loader@npm:4.3.0" - peerDependencies: - "@types/node": "*" - cosmiconfig: ">=7" - ts-node: ">=10" - typescript: ">=3" - checksum: 10/eca68c8ee5682b0fbe977293f05fd80ec15fc79a5b73f009ed0194959a8848c58e8affcbae1e29d76ae05184024b51a6fc1dcb77231e16d7b0ce16039a93fa2a - languageName: node - linkType: hard - -"cosmiconfig@npm:7.0.1": - version: 7.0.1 - resolution: "cosmiconfig@npm:7.0.1" - dependencies: - "@types/parse-json": "npm:^4.0.0" - import-fresh: "npm:^3.2.1" - parse-json: "npm:^5.0.0" - path-type: "npm:^4.0.0" - yaml: "npm:^1.10.0" - checksum: 10/861bf4c2c9e88e6c50f14278b25bb0509c484623de11fadf3788a3d543bc7c45178aeebeb6657293b12dc8bd1b86d926c5f25c803c4dc3821d628a1b24c3d20b - languageName: node - linkType: hard - -"cosmiconfig@npm:^6.0.0": - version: 6.0.0 - resolution: "cosmiconfig@npm:6.0.0" - dependencies: - "@types/parse-json": "npm:^4.0.0" - import-fresh: "npm:^3.1.0" - parse-json: "npm:^5.0.0" - path-type: "npm:^4.0.0" - yaml: "npm:^1.7.2" - checksum: 10/b184d2bfbced9ba6840fd097dbf3455c68b7258249bb9b1277913823d516d8dfdade8c5ccbf79db0ca8ebd4cc9b9be521ccc06a18396bd242d50023c208f1594 - languageName: node - linkType: hard - -"cosmiconfig@npm:^7.0.0": - version: 7.1.0 - resolution: "cosmiconfig@npm:7.1.0" - dependencies: - "@types/parse-json": "npm:^4.0.0" - import-fresh: "npm:^3.2.1" - parse-json: "npm:^5.0.0" - path-type: "npm:^4.0.0" - yaml: "npm:^1.10.0" - checksum: 10/03600bb3870c80ed151b7b706b99a1f6d78df8f4bdad9c95485072ea13358ef294b13dd99f9e7bf4cc0b43bcd3599d40df7e648750d21c2f6817ca2cd687e071 - languageName: node - linkType: hard - -"cosmiconfig@npm:^8.0.0, cosmiconfig@npm:^8.1.0, cosmiconfig@npm:^8.1.3": - version: 8.2.0 - resolution: "cosmiconfig@npm:8.2.0" - dependencies: - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - parse-json: "npm:^5.0.0" - path-type: "npm:^4.0.0" - checksum: 10/e0b188f9a672ee7135851bf9d9fc8f0ba00f9769c95fda5af0ebc274804f6aeb713b753e04e706f595e1fbd0fa67c5073840666019068c0296a06057560ab39d - languageName: node - linkType: hard - -"crc-32@npm:^1.2.0": - version: 1.2.2 - resolution: "crc-32@npm:1.2.2" - bin: - crc32: bin/crc32.njs - checksum: 10/824f696a5baaf617809aa9cd033313c8f94f12d15ebffa69f10202480396be44aef9831d900ab291638a8022ed91c360696dd5b1ba691eb3f34e60be8835b7c3 - languageName: node - linkType: hard - -"create-ecdh@npm:^4.0.4": - version: 4.0.4 - resolution: "create-ecdh@npm:4.0.4" - dependencies: - bn.js: "npm:^4.1.0" - elliptic: "npm:^6.5.3" - checksum: 10/0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b - languageName: node - linkType: hard - -"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": - version: 1.2.0 - resolution: "create-hash@npm:1.2.0" - dependencies: - cipher-base: "npm:^1.0.1" - inherits: "npm:^2.0.1" - md5.js: "npm:^1.3.4" - ripemd160: "npm:^2.0.1" - sha.js: "npm:^2.4.0" - checksum: 10/3cfef32043b47a8999602af9bcd74966db6971dd3eb828d1a479f3a44d7f58e38c1caf34aa21a01941cc8d9e1a841738a732f200f00ea155f8a8835133d2e7bc - languageName: node - linkType: hard - -"create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": - version: 1.1.7 - resolution: "create-hmac@npm:1.1.7" - dependencies: - cipher-base: "npm:^1.0.3" - create-hash: "npm:^1.1.0" - inherits: "npm:^2.0.1" - ripemd160: "npm:^2.0.0" - safe-buffer: "npm:^5.0.1" - sha.js: "npm:^2.4.8" - checksum: 10/2b26769f87e99ef72150bf99d1439d69272b2e510e23a2b8daf4e93e2412f4842504237d726044fa797cb20ee0ec8bee78d414b11f2d7ca93299185c93df0dae - languageName: node - linkType: hard - -"create-require@npm:^1.1.0, create-require@npm:^1.1.1": - version: 1.1.1 - resolution: "create-require@npm:1.1.1" - checksum: 10/a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff - languageName: node - linkType: hard - -"crelt@npm:^1.0.5": - version: 1.0.6 - resolution: "crelt@npm:1.0.6" - checksum: 10/5ed326ca6bd243b1dba6b943f665b21c2c04be03271824bc48f20dba324b0f8233e221f8c67312526d24af2b1243c023dc05a41bd8bd05d1a479fd2c72fb39c3 - languageName: node - linkType: hard - -"cross-fetch@npm:^3.1.4, cross-fetch@npm:^3.1.5": - version: 3.1.6 - resolution: "cross-fetch@npm:3.1.6" - dependencies: - node-fetch: "npm:^2.6.11" - checksum: 10/e08325b813da37f2d5312b3e630af992c35681c1737707b029e8ef1c48ea034bda8b960000fc8bee6e0485e133347198aa6ecccadb530b06c47472f6c76bc27b - languageName: node - linkType: hard - -"cross-fetch@npm:^4.0.0": - version: 4.0.0 - resolution: "cross-fetch@npm:4.0.0" - dependencies: - node-fetch: "npm:^2.6.12" - checksum: 10/e231a71926644ef122d334a3a4e73d9ba3ba4b480a8a277fb9badc434c1ba905b3d60c8034e18b348361a09afbec40ba9371036801ba2b675a7b84588f9f55d8 - languageName: node - linkType: hard - -"cross-inspect@npm:1.0.1": - version: 1.0.1 - resolution: "cross-inspect@npm:1.0.1" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/7c1e02e0a9670b62416a3ea1df7ae880fdad3aa0a857de8932c4e5f8acd71298c7e3db9da8e9da603f5692cd1879938f5e72e34a9f5d1345987bef656d117fc1 - languageName: node - linkType: hard - -"cross-spawn@npm:7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10/e1a13869d2f57d974de0d9ef7acbf69dc6937db20b918525a01dacb5032129bd552d290d886d981e99f1b624cb03657084cc87bd40f115c07ecf376821c729ce - languageName: node - linkType: hard - -"cross-spawn@npm:^6.0.5": - version: 6.0.5 - resolution: "cross-spawn@npm:6.0.5" - dependencies: - nice-try: "npm:^1.0.4" - path-key: "npm:^2.0.1" - semver: "npm:^5.5.0" - shebang-command: "npm:^1.2.0" - which: "npm:^1.2.9" - checksum: 10/f07e643b4875f26adffcd7f13bc68d9dff20cf395f8ed6f43a23f3ee24fc3a80a870a32b246fd074e514c8fd7da5f978ac6a7668346eec57aa87bac89c1ed3a1 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.5": - version: 7.0.6 - resolution: "cross-spawn@npm:7.0.6" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10/0d52657d7ae36eb130999dffff1168ec348687b48dd38e2ff59992ed916c88d328cf1d07ff4a4a10bc78de5e1c23f04b306d569e42f7a2293915c081e4dfee86 - languageName: node - linkType: hard - -"crypt@npm:>= 0.0.1": - version: 0.0.2 - resolution: "crypt@npm:0.0.2" - checksum: 10/2c72768de3d28278c7c9ffd81a298b26f87ecdfe94415084f339e6632f089b43fe039f2c93f612bcb5ffe447238373d93b2e8c90894cba6cfb0ac7a74616f8b9 - languageName: node - linkType: hard - -"crypto-browserify@npm:^3.11.0, crypto-browserify@npm:^3.12.1": - version: 3.12.1 - resolution: "crypto-browserify@npm:3.12.1" - dependencies: - browserify-cipher: "npm:^1.0.1" - browserify-sign: "npm:^4.2.3" - create-ecdh: "npm:^4.0.4" - create-hash: "npm:^1.2.0" - create-hmac: "npm:^1.1.7" - diffie-hellman: "npm:^5.0.3" - hash-base: "npm:~3.0.4" - inherits: "npm:^2.0.4" - pbkdf2: "npm:^3.1.2" - public-encrypt: "npm:^4.0.3" - randombytes: "npm:^2.1.0" - randomfill: "npm:^1.0.4" - checksum: 10/13da0b5f61b3e8e68fcbebf0394f2b2b4d35a0d0ba6ab762720c13391d3697ea42735260a26328a6a3d872be7d4cb5abe98a7a8f88bc93da7ba59b993331b409 - languageName: node - linkType: hard - -"crypto-random-string@npm:^2.0.0": - version: 2.0.0 - resolution: "crypto-random-string@npm:2.0.0" - checksum: 10/0283879f55e7c16fdceacc181f87a0a65c53bc16ffe1d58b9d19a6277adcd71900d02bb2c4843dd55e78c51e30e89b0fec618a7f170ebcc95b33182c28f05fd6 - languageName: node - linkType: hard - -"css-blank-pseudo@npm:^3.0.3": - version: 3.0.3 - resolution: "css-blank-pseudo@npm:3.0.3" - dependencies: - postcss-selector-parser: "npm:^6.0.9" - peerDependencies: - postcss: ^8.4 - bin: - css-blank-pseudo: dist/cli.cjs - checksum: 10/3c4a258c27e719cd8f841b4c652247f2a25c0a04edff6a5a70bf91ad9fe539665013e0a2d357abd6f04f04cceaef99f4cbe29a2fc9bb8d7a5f1935d9b610209a - languageName: node - linkType: hard - -"css-color-keywords@npm:^1.0.0": - version: 1.0.0 - resolution: "css-color-keywords@npm:1.0.0" - checksum: 10/8f125e3ad477bd03c77b533044bd9e8a6f7c0da52d49bbc0bbe38327b3829d6ba04d368ca49dd9ff3b667d2fc8f1698d891c198bbf8feade1a5501bf5a296408 - languageName: node - linkType: hard - -"css-declaration-sorter@npm:^6.3.1": - version: 6.4.0 - resolution: "css-declaration-sorter@npm:6.4.0" - peerDependencies: - postcss: ^8.0.9 - checksum: 10/65bd7e3044905e18f555701ea6f6e00c15b36d86b8231384fe0ddc324b8766fd97e3ce980995f2d1af776e38d49a590b6424bf0d53cccf229c8299840374991d - languageName: node - linkType: hard - -"css-has-pseudo@npm:^3.0.4": - version: 3.0.4 - resolution: "css-has-pseudo@npm:3.0.4" - dependencies: - postcss-selector-parser: "npm:^6.0.9" - peerDependencies: - postcss: ^8.4 - bin: - css-has-pseudo: dist/cli.cjs - checksum: 10/bad885b0bb2b88d3753427f05ca6d6d833c1af89857222675c0742ef6c3461ae06f56a9be8a464bb6ac860c12581dfa2ae1cb8f15598ffb52d38cb3b6d291a48 - languageName: node - linkType: hard - -"css-in-js-utils@npm:^3.1.0": - version: 3.1.0 - resolution: "css-in-js-utils@npm:3.1.0" - dependencies: - hyphenate-style-name: "npm:^1.0.3" - checksum: 10/bd2f569f1870389004cfacfd7b798c0f40933d34af1f040c391a08322d097790b9a9524affb2ba4d26122e9cb8f4256afb59edb6077dbe607506944a9c673c67 - languageName: node - linkType: hard - -"css-loader@npm:^6.5.1": - version: 6.8.1 - resolution: "css-loader@npm:6.8.1" - dependencies: - icss-utils: "npm:^5.1.0" - postcss: "npm:^8.4.21" - postcss-modules-extract-imports: "npm:^3.0.0" - postcss-modules-local-by-default: "npm:^4.0.3" - postcss-modules-scope: "npm:^3.0.0" - postcss-modules-values: "npm:^4.0.0" - postcss-value-parser: "npm:^4.2.0" - semver: "npm:^7.3.8" - peerDependencies: - webpack: ^5.0.0 - checksum: 10/f20bb2a181c64d2f49586ab3922cae884519cfc8ae9ba8513065032255ed7bbdb4de75362f99d641d39d36d3732b7932884cd0e6fc71c8b0fb8b99a654f9cd08 - languageName: node - linkType: hard - -"css-minimizer-webpack-plugin@npm:^3.2.0": - version: 3.4.1 - resolution: "css-minimizer-webpack-plugin@npm:3.4.1" - dependencies: - cssnano: "npm:^5.0.6" - jest-worker: "npm:^27.0.2" - postcss: "npm:^8.3.5" - schema-utils: "npm:^4.0.0" - serialize-javascript: "npm:^6.0.0" - source-map: "npm:^0.6.1" - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - "@parcel/css": - optional: true - clean-css: - optional: true - csso: - optional: true - esbuild: - optional: true - checksum: 10/d3b060fc3ab8747eb7c123378474e9b8fa884d93223c49995bd450f05a32f1f349cd23a912a27bb966faeb6dddc34445ffa45be17d11b80515bd55c8a81c8eea - languageName: node - linkType: hard - -"css-prefers-color-scheme@npm:^6.0.3": - version: 6.0.3 - resolution: "css-prefers-color-scheme@npm:6.0.3" - peerDependencies: - postcss: ^8.4 - bin: - css-prefers-color-scheme: dist/cli.cjs - checksum: 10/389f8d5b102270aaefd7f1db269d12bd883d9f7e13d139c2ef7ad6eb462c0c87f2dd466efeb8cc1b93432b07f94a3a5c82fc0ed6b950ba2da2f44d86f109fdc7 - languageName: node - linkType: hard - -"css-select-base-adapter@npm:^0.1.1": - version: 0.1.1 - resolution: "css-select-base-adapter@npm:0.1.1" - checksum: 10/0c99404c19123c3d270e80d5bf5af2b1990ed6b29a9b9db056d5b402660e5b7e5be48a86e00283b82e3240141c756879dbea14bab44230ca26396ba531c6d8a7 - languageName: node - linkType: hard - -"css-select@npm:^2.0.0": - version: 2.1.0 - resolution: "css-select@npm:2.1.0" - dependencies: - boolbase: "npm:^1.0.0" - css-what: "npm:^3.2.1" - domutils: "npm:^1.7.0" - nth-check: "npm:^1.0.2" - checksum: 10/87d514a6884c989df4d05d658cc2e7864b64ebf8f3dac5930a12930e712bbac7f16cfa765a22dc3f8fa00d3ae62ce0f3832624eedfac4b116694ea808749fb8a - languageName: node - linkType: hard - -"css-select@npm:^4.1.3": - version: 4.3.0 - resolution: "css-select@npm:4.3.0" - dependencies: - boolbase: "npm:^1.0.0" - css-what: "npm:^6.0.1" - domhandler: "npm:^4.3.1" - domutils: "npm:^2.8.0" - nth-check: "npm:^2.0.1" - checksum: 10/8f7310c9af30ccaba8f72cb4a54d32232c53bf9ba05d019b693e16bfd7ba5df0affc1f4d74b1ee55923643d23b80a837eedcf60938c53356e479b04049ff9994 - languageName: node - linkType: hard - -"css-select@npm:^5.1.0": - version: 5.1.0 - resolution: "css-select@npm:5.1.0" - dependencies: - boolbase: "npm:^1.0.0" - css-what: "npm:^6.1.0" - domhandler: "npm:^5.0.2" - domutils: "npm:^3.0.1" - nth-check: "npm:^2.0.1" - checksum: 10/d486b1e7eb140468218a5ab5af53257e01f937d2173ac46981f6b7de9c5283d55427a36715dc8decfc0c079cf89259ac5b41ef58f6e1a422eee44ab8bfdc78da - languageName: node - linkType: hard - -"css-to-react-native@npm:3.2.0, css-to-react-native@npm:^3.0.0": - version: 3.2.0 - resolution: "css-to-react-native@npm:3.2.0" - dependencies: - camelize: "npm:^1.0.0" - css-color-keywords: "npm:^1.0.0" - postcss-value-parser: "npm:^4.0.2" - checksum: 10/62ef744254e333abc696efdc945ecf13ad6ba7b726d0a39c0405b2fcb86542aa2f3fe7b7b6770f67ae9679d98b159b4d66353107bf7d6144a445eafcf5fa250a - languageName: node - linkType: hard - -"css-tree@npm:1.0.0-alpha.37": - version: 1.0.0-alpha.37 - resolution: "css-tree@npm:1.0.0-alpha.37" - dependencies: - mdn-data: "npm:2.0.4" - source-map: "npm:^0.6.1" - checksum: 10/a936e4276e797af951f3cae66acadcd10642493c221b4f34fbb8f7d2d3b5496730474695efe2645731be19443324c0cc26e09a09e87efcfd397ade1b92d1fd68 - languageName: node - linkType: hard - -"css-tree@npm:^1.1.2, css-tree@npm:^1.1.3": - version: 1.1.3 - resolution: "css-tree@npm:1.1.3" - dependencies: - mdn-data: "npm:2.0.14" - source-map: "npm:^0.6.1" - checksum: 10/29710728cc4b136f1e9b23ee1228ec403ec9f3d487bc94a9c5dbec563c1e08c59bc917dd6f82521a35e869ff655c298270f43ca673265005b0cd05b292eb05ab - languageName: node - linkType: hard - -"css-tree@npm:^2.3.1": - version: 2.3.1 - resolution: "css-tree@npm:2.3.1" - dependencies: - mdn-data: "npm:2.0.30" - source-map-js: "npm:^1.0.1" - checksum: 10/e5e39b82eb4767c664fa5c2cd9968c8c7e6b7fd2c0079b52680a28466d851e2826d5e64699c449d933c0e8ca0554beca43c41a9fcb09fb6a46139d462dbdf0df - languageName: node - linkType: hard - -"css-tree@npm:~2.2.0": - version: 2.2.1 - resolution: "css-tree@npm:2.2.1" - dependencies: - mdn-data: "npm:2.0.28" - source-map-js: "npm:^1.0.1" - checksum: 10/1959c4b0e268bf8db1b3a1776a5ba9ae3a464ccd1226bfa62799cb0a3d0039006e21fb95cec4dec9d687a9a9b90f692dff2d230b631527ece700f4bfb419aaf3 - languageName: node - linkType: hard - -"css-what@npm:^3.2.1": - version: 3.4.2 - resolution: "css-what@npm:3.4.2" - checksum: 10/d5a5343619828499f0aa3fa5c1301123541eea41057a7da45516a3ceb19ed79e722e829913b71bce490bfdf08599a847e77ba4917bd2623c2d7fd4654e6b94f4 - languageName: node - linkType: hard - -"css-what@npm:^6.0.1, css-what@npm:^6.1.0": - version: 6.1.0 - resolution: "css-what@npm:6.1.0" - checksum: 10/c67a3a2d0d81843af87f8bf0a4d0845b0f952377714abbb2884e48942409d57a2110eabee003609d02ee487b054614bdfcfc59ee265728ff105bd5aa221c1d0e - languageName: node - linkType: hard - -"cssdb@npm:^7.1.0": - version: 7.6.0 - resolution: "cssdb@npm:7.6.0" - checksum: 10/1a472bbcea815e4ef44d4d5447156194fcd3a639c1a8b538990659ff99a7d2b567d55db546d915e84a6f1e4ddf8562a54d62a922764896c35434c7688a9f08af - languageName: node - linkType: hard - -"cssesc@npm:^3.0.0": - version: 3.0.0 - resolution: "cssesc@npm:3.0.0" - bin: - cssesc: bin/cssesc - checksum: 10/0e161912c1306861d8f46e1883be1cbc8b1b2879f0f509287c0db71796e4ddfb97ac96bdfca38f77f452e2c10554e1bb5678c99b07a5cf947a12778f73e47e12 - languageName: node - linkType: hard - -"cssnano-preset-default@npm:^5.2.14": - version: 5.2.14 - resolution: "cssnano-preset-default@npm:5.2.14" - dependencies: - css-declaration-sorter: "npm:^6.3.1" - cssnano-utils: "npm:^3.1.0" - postcss-calc: "npm:^8.2.3" - postcss-colormin: "npm:^5.3.1" - postcss-convert-values: "npm:^5.1.3" - postcss-discard-comments: "npm:^5.1.2" - postcss-discard-duplicates: "npm:^5.1.0" - postcss-discard-empty: "npm:^5.1.1" - postcss-discard-overridden: "npm:^5.1.0" - postcss-merge-longhand: "npm:^5.1.7" - postcss-merge-rules: "npm:^5.1.4" - postcss-minify-font-values: "npm:^5.1.0" - postcss-minify-gradients: "npm:^5.1.1" - postcss-minify-params: "npm:^5.1.4" - postcss-minify-selectors: "npm:^5.2.1" - postcss-normalize-charset: "npm:^5.1.0" - postcss-normalize-display-values: "npm:^5.1.0" - postcss-normalize-positions: "npm:^5.1.1" - postcss-normalize-repeat-style: "npm:^5.1.1" - postcss-normalize-string: "npm:^5.1.0" - postcss-normalize-timing-functions: "npm:^5.1.0" - postcss-normalize-unicode: "npm:^5.1.1" - postcss-normalize-url: "npm:^5.1.0" - postcss-normalize-whitespace: "npm:^5.1.1" - postcss-ordered-values: "npm:^5.1.3" - postcss-reduce-initial: "npm:^5.1.2" - postcss-reduce-transforms: "npm:^5.1.0" - postcss-svgo: "npm:^5.1.0" - postcss-unique-selectors: "npm:^5.1.1" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/4103f879a594e24eef7b2f175cd46b59d777982be23f0d1b84e962d044e0bea2f26aa107dea59a711e6394fdd77faf313cee6ae4be61d34656fdf33ff278f69d - languageName: node - linkType: hard - -"cssnano-utils@npm:^3.1.0": - version: 3.1.0 - resolution: "cssnano-utils@npm:3.1.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/975c84ce9174cf23bb1da1e9faed8421954607e9ea76440cd3bb0c1bea7e17e490d800fca5ae2812d1d9e9d5524eef23ede0a3f52497d7ccc628e5d7321536f2 - languageName: node - linkType: hard - -"cssnano@npm:^5.0.6": - version: 5.1.15 - resolution: "cssnano@npm:5.1.15" - dependencies: - cssnano-preset-default: "npm:^5.2.14" - lilconfig: "npm:^2.0.3" - yaml: "npm:^1.10.2" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/8c5acbeabd10ffc05d01c63d3a82dcd8742299ead3f6da4016c853548b687d9b392de43e6d0f682dad1c2200d577c9360d8e709711c23721509aa4e55e052fb3 - languageName: node - linkType: hard - -"csso@npm:^4.0.2, csso@npm:^4.2.0": - version: 4.2.0 - resolution: "csso@npm:4.2.0" - dependencies: - css-tree: "npm:^1.1.2" - checksum: 10/8b6a2dc687f2a8165dde13f67999d5afec63cb07a00ab100fbb41e4e8b28d986cfa0bc466b4f5ba5de7260c2448a64e6ad26ec718dd204d3a7d109982f0bf1aa - languageName: node - linkType: hard - -"csso@npm:^5.0.5": - version: 5.0.5 - resolution: "csso@npm:5.0.5" - dependencies: - css-tree: "npm:~2.2.0" - checksum: 10/4036fb2b9f8ed6b948349136b39e0b19ffb5edee934893a37b55e9a116186c4ae2a9d3ba66fbdbc07fa44a853fb478cd2d8733e4743473dcd364e7f21444ff34 - languageName: node - linkType: hard - -"cssom@npm:^0.4.4": - version: 0.4.4 - resolution: "cssom@npm:0.4.4" - checksum: 10/6302c5f9b33a15f5430349f91553dd370f60707b1f2bb2c21954abe307b701d6095da134679fd0891a7814bc98061e1639bd0562d8f70c2dc529918111be8d2b - languageName: node - linkType: hard - -"cssom@npm:^0.5.0": - version: 0.5.0 - resolution: "cssom@npm:0.5.0" - checksum: 10/b502a315b1ce020a692036cc38cb36afa44157219b80deadfa040ab800aa9321fcfbecf02fd2e6ec87db169715e27978b4ab3701f916461e9cf7808899f23b54 - languageName: node - linkType: hard - -"cssom@npm:~0.3.6": - version: 0.3.8 - resolution: "cssom@npm:0.3.8" - checksum: 10/49eacc88077555e419646c0ea84ddc73c97e3a346ad7cb95e22f9413a9722d8964b91d781ce21d378bd5ae058af9a745402383fa4e35e9cdfd19654b63f892a9 - languageName: node - linkType: hard - -"cssstyle@npm:^2.3.0": - version: 2.3.0 - resolution: "cssstyle@npm:2.3.0" - dependencies: - cssom: "npm:~0.3.6" - checksum: 10/46f7f05a153446c4018b0454ee1464b50f606cb1803c90d203524834b7438eb52f3b173ba0891c618f380ced34ee12020675dc0052a7f1be755fe4ebc27ee977 - languageName: node - linkType: hard - -"csstype@npm:3.1.3, csstype@npm:^3.0.2, csstype@npm:^3.1.0, csstype@npm:^3.1.2, csstype@npm:^3.1.3": - version: 3.1.3 - resolution: "csstype@npm:3.1.3" - checksum: 10/f593cce41ff5ade23f44e77521e3a1bcc2c64107041e1bf6c3c32adc5187d0d60983292fda326154d20b01079e24931aa5b08e4467cc488b60bb1e7f6d478ade - languageName: node - linkType: hard - -"dag-jose@npm:^5.0.0": - version: 5.1.1 - resolution: "dag-jose@npm:5.1.1" - dependencies: - "@ipld/dag-cbor": "npm:^9.0.0" - multiformats: "npm:~13.1.3" - checksum: 10/ce4069c89be858cbb2f896fb3e1f8053ecc629363e44b9f07f0dc5002b9b926b948edcfb998ea650891ea2f7cb445f99d1aa83e95107489eaa09deeea91ebcdf - languageName: node - linkType: hard - -"damerau-levenshtein@npm:^1.0.8": - version: 1.0.8 - resolution: "damerau-levenshtein@npm:1.0.8" - checksum: 10/f4eba1c90170f96be25d95fa3857141b5f81e254f7e4d530da929217b19990ea9a0390fc53d3c1cafac9152fda78e722ea4894f765cf6216be413b5af1fbf821 - languageName: node - linkType: hard - -"dargs@npm:^7.0.0": - version: 7.0.0 - resolution: "dargs@npm:7.0.0" - checksum: 10/b8f1e3cba59c42e1f13a114ad4848c3fc1cf7470f633ee9e9f1043762429bc97d91ae31b826fb135eefde203a3fdb20deb0c0a0222ac29d937b8046085d668d1 - languageName: node - linkType: hard - -"data-urls@npm:^2.0.0": - version: 2.0.0 - resolution: "data-urls@npm:2.0.0" - dependencies: - abab: "npm:^2.0.3" - whatwg-mimetype: "npm:^2.3.0" - whatwg-url: "npm:^8.0.0" - checksum: 10/97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 - languageName: node - linkType: hard - -"data-urls@npm:^3.0.2": - version: 3.0.2 - resolution: "data-urls@npm:3.0.2" - dependencies: - abab: "npm:^2.0.6" - whatwg-mimetype: "npm:^3.0.0" - whatwg-url: "npm:^11.0.0" - checksum: 10/033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 - languageName: node - linkType: hard - -"data-view-buffer@npm:^1.0.1": - version: 1.0.1 - resolution: "data-view-buffer@npm:1.0.1" - dependencies: - call-bind: "npm:^1.0.6" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.1" - checksum: 10/5919a39a18ee919573336158fd162fdf8ada1bc23a139f28543fd45fac48e0ea4a3ad3bfde91de124d4106e65c4a7525f6a84c20ba0797ec890a77a96d13a82a - languageName: node - linkType: hard - -"data-view-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "data-view-byte-length@npm:1.0.1" - dependencies: - call-bind: "npm:^1.0.7" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.1" - checksum: 10/f33c65e58d8d0432ad79761f2e8a579818d724b5dc6dc4e700489b762d963ab30873c0f1c37d8f2ed12ef51c706d1195f64422856d25f067457aeec50cc40aac - languageName: node - linkType: hard - -"data-view-byte-offset@npm:^1.0.0": - version: 1.0.0 - resolution: "data-view-byte-offset@npm:1.0.0" - dependencies: - call-bind: "npm:^1.0.6" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.1" - checksum: 10/96f34f151bf02affb7b9f98762fb7aca1dd5f4553cb57b80bce750ca609c15d33ca659568ef1d422f7e35680736cbccb893a3d4b012760c758c1446bbdc4c6db - languageName: node - linkType: hard - -"dataloader@npm:^1.4.0": - version: 1.4.0 - resolution: "dataloader@npm:1.4.0" - checksum: 10/8dc2181f7fc243f657aa97b5aa51b9e0da88dee9a59a689bab50d4bac826c27ae0457db8d9a5d59559d636f6b997f419303ccfde595cc26191f37ab9c792fe01 - languageName: node - linkType: hard - -"dataloader@npm:^2.2.2": - version: 2.2.2 - resolution: "dataloader@npm:2.2.2" - checksum: 10/9c7a1f02cfa6391ab8bc21ebd0ef60b03832bd3beafdfecf48b111fba14090f98d33965f8e268045ba3c289f801b6a9000a9e61a41188363bdee2344811f64f1 - languageName: node - linkType: hard - -"dataloader@npm:^2.2.3": - version: 2.2.3 - resolution: "dataloader@npm:2.2.3" - checksum: 10/83fe6259abe00ae64c5f48252ef59d8e5fcabda9fd4d26685f14a76eeca596bf6f9500d9f22a0094c50c3ea782a0977728f9367e232dfa0fdb5c9d646de279b2 - languageName: node - linkType: hard - -"date-fns@npm:^2.14.0, date-fns@npm:^2.29.3": - version: 2.30.0 - resolution: "date-fns@npm:2.30.0" - dependencies: - "@babel/runtime": "npm:^7.21.0" - checksum: 10/70b3e8ea7aaaaeaa2cd80bd889622a4bcb5d8028b4de9162cbcda359db06e16ff6e9309e54eead5341e71031818497f19aaf9839c87d1aba1e27bb4796e758a9 - languageName: node - linkType: hard - -"dateformat@npm:^3.0.0": - version: 3.0.3 - resolution: "dateformat@npm:3.0.3" - checksum: 10/0504baf50c3777ad333c96c37d1673d67efcb7dd071563832f70b5cbf7f3f4753f18981d44bfd8f665d5e5a511d2fc0af8e0ead8b585b9b3ddaa90067864d3f0 - languageName: node - linkType: hard - -"dateformat@npm:^4.6.3": - version: 4.6.3 - resolution: "dateformat@npm:4.6.3" - checksum: 10/5c149c91bf9ce2142c89f84eee4c585f0cb1f6faf2536b1af89873f862666a28529d1ccafc44750aa01384da2197c4f76f4e149a3cc0c1cb2c46f5cc45f2bcb5 - languageName: node - linkType: hard - -"dayjs@npm:1.11.13": - version: 1.11.13 - resolution: "dayjs@npm:1.11.13" - checksum: 10/7374d63ab179b8d909a95e74790def25c8986e329ae989840bacb8b1888be116d20e1c4eee75a69ea0dfbae13172efc50ef85619d304ee7ca3c01d5878b704f5 - languageName: node - linkType: hard - -"de-indent@npm:^1.0.2": - version: 1.0.2 - resolution: "de-indent@npm:1.0.2" - checksum: 10/30bf43744dca005f9252dbb34ed95dcb3c30dfe52bfed84973b89c29eccff04e27769f222a34c61a93354acf47457785e9032e6184be390ed1d324fb9ab3f427 - languageName: node - linkType: hard - -"death@npm:^1.1.0": - version: 1.1.0 - resolution: "death@npm:1.1.0" - checksum: 10/b6fc4d1b8fbfc84486a025d36c540795c5ae9368f580a31fc2740935d0a9afbd31a214b00650335e97756f4c1a3fae895adc45795aeb9ef00694968311ab844d - languageName: node - linkType: hard - -"debounce@npm:^1.2.0": - version: 1.2.1 - resolution: "debounce@npm:1.2.1" - checksum: 10/0b95b2a9d80ed69117d890f8dab8c0f2d6066f8d20edd1d810ae51f8f366a6d4c8b1d56e97dcb9304e93d57de4d5db440d34a03def7dad50403fc3f22bf16808 - languageName: node - linkType: hard - -"debug@npm:2.6.9, debug@npm:^2.6.0": - version: 2.6.9 - resolution: "debug@npm:2.6.9" - dependencies: - ms: "npm:2.0.0" - checksum: 10/e07005f2b40e04f1bd14a3dd20520e9c4f25f60224cb006ce9d6781732c917964e9ec029fc7f1a151083cd929025ad5133814d4dc624a9aaf020effe4914ed14 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:~4.3.1, debug@npm:~4.3.2": - version: 4.3.7 - resolution: "debug@npm:4.3.7" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10/71168908b9a78227ab29d5d25fe03c5867750e31ce24bf2c44a86efc5af041758bb56569b0a3d48a9b5344c00a24a777e6f4100ed6dfd9534a42c1dde285125a - languageName: node - linkType: hard - -"debug@npm:4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: "npm:2.1.2" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10/0073c3bcbd9cb7d71dd5f6b55be8701af42df3e56e911186dfa46fac3a5b9eb7ce7f377dd1d3be6db8977221f8eb333d945216f645cf56f6b688cd484837d255 - languageName: node - linkType: hard - -"debug@npm:4.4.0, debug@npm:^4.3.6, debug@npm:^4.4.0": - version: 4.4.0 - resolution: "debug@npm:4.4.0" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10/1847944c2e3c2c732514b93d11886575625686056cd765336212dc15de2d2b29612b6cd80e1afba767bb8e1803b778caf9973e98169ef1a24a7a7009e1820367 - languageName: node - linkType: hard - -"debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: "npm:^2.1.1" - checksum: 10/d86fd7be2b85462297ea16f1934dc219335e802f629ca9a69b63ed8ed041dda492389bb2ee039217c02e5b54792b1c51aa96ae954cf28634d363a2360c7a1639 - languageName: node - linkType: hard - -"decamelize-keys@npm:^1.1.0": - version: 1.1.1 - resolution: "decamelize-keys@npm:1.1.1" - dependencies: - decamelize: "npm:^1.1.0" - map-obj: "npm:^1.0.0" - checksum: 10/71d5898174f17a8d2303cecc98ba0236e842948c4d042a8180d5e749be8442220bca2d16dd93bebd7b49e86c807814273212e4da0fae67be7c58c282ff76057a - languageName: node - linkType: hard - -"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: 10/ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa - languageName: node - linkType: hard - -"decamelize@npm:^4.0.0": - version: 4.0.0 - resolution: "decamelize@npm:4.0.0" - checksum: 10/b7d09b82652c39eead4d6678bb578e3bebd848add894b76d0f6b395bc45b2d692fb88d977e7cfb93c4ed6c119b05a1347cef261174916c2e75c0a8ca57da1809 - languageName: node - linkType: hard - -"decimal.js@npm:^10.2.1, decimal.js@npm:^10.4.2, decimal.js@npm:^10.4.3": - version: 10.4.3 - resolution: "decimal.js@npm:10.4.3" - checksum: 10/de663a7bc4d368e3877db95fcd5c87b965569b58d16cdc4258c063d231ca7118748738df17cd638f7e9dd0be8e34cec08d7234b20f1f2a756a52fc5a38b188d0 - languageName: node - linkType: hard - -"decode-named-character-reference@npm:^1.0.0": - version: 1.0.2 - resolution: "decode-named-character-reference@npm:1.0.2" - dependencies: - character-entities: "npm:^2.0.0" - checksum: 10/f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78 - languageName: node - linkType: hard - -"decode-uri-component@npm:^0.2.2": - version: 0.2.2 - resolution: "decode-uri-component@npm:0.2.2" - checksum: 10/17a0e5fa400bf9ea84432226e252aa7b5e72793e16bf80b907c99b46a799aeacc139ec20ea57121e50c7bd875a1a4365928f884e92abf02e21a5a13790a0f33e - languageName: node - linkType: hard - -"decompress-response@npm:^4.2.0": - version: 4.2.1 - resolution: "decompress-response@npm:4.2.1" - dependencies: - mimic-response: "npm:^2.0.0" - checksum: 10/4e783ca4dfe9417354d61349750fe05236f565a4415a6ca20983a311be2371debaedd9104c0b0e7b36e5f167aeaae04f84f1a0b3f8be4162f1d7d15598b8fdba - languageName: node - linkType: hard - -"decompress-response@npm:^6.0.0": - version: 6.0.0 - resolution: "decompress-response@npm:6.0.0" - dependencies: - mimic-response: "npm:^3.1.0" - checksum: 10/d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 - languageName: node - linkType: hard - -"dedent@npm:^0.7.0": - version: 0.7.0 - resolution: "dedent@npm:0.7.0" - checksum: 10/87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 - languageName: node - linkType: hard - -"deep-eql@npm:^4.0.1, deep-eql@npm:^4.1.3": - version: 4.1.3 - resolution: "deep-eql@npm:4.1.3" - dependencies: - type-detect: "npm:^4.0.0" - checksum: 10/12ce93ae63de187e77b076d3d51bfc28b11f98910a22c18714cce112791195e86a94f97788180994614b14562a86c9763f67c69f785e4586f806b5df39bf9301 - languageName: node - linkType: hard - -"deep-extend@npm:^0.6.0, deep-extend@npm:~0.6.0": - version: 0.6.0 - resolution: "deep-extend@npm:0.6.0" - checksum: 10/7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: 10/ec12d074aef5ae5e81fa470b9317c313142c9e8e2afe3f8efa124db309720db96d1d222b82b84c834e5f87e7a614b44a4684b6683583118b87c833b3be40d4d8 - languageName: node - linkType: hard - -"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 10/058d9e1b0ff1a154468bf3837aea436abcfea1ba1d165ddaaf48ca93765fdd01a30d33c36173da8fbbed951dd0a267602bc782fe288b0fc4b7e1e7091afc4529 - languageName: node - linkType: hard - -"default-browser-id@npm:^5.0.0": - version: 5.0.0 - resolution: "default-browser-id@npm:5.0.0" - checksum: 10/185bfaecec2c75fa423544af722a3469b20704c8d1942794a86e4364fe7d9e8e9f63241a5b769d61c8151993bc65833a5b959026fa1ccea343b3db0a33aa6deb - languageName: node - linkType: hard - -"default-browser@npm:^5.2.1": - version: 5.2.1 - resolution: "default-browser@npm:5.2.1" - dependencies: - bundle-name: "npm:^4.1.0" - default-browser-id: "npm:^5.0.0" - checksum: 10/afab7eff7b7f5f7a94d9114d1ec67273d3fbc539edf8c0f80019879d53aa71e867303c6f6d7cffeb10a6f3cfb59d4f963dba3f9c96830b4540cc7339a1bf9840 - languageName: node - linkType: hard - -"default-gateway@npm:^6.0.3": - version: 6.0.3 - resolution: "default-gateway@npm:6.0.3" - dependencies: - execa: "npm:^5.0.0" - checksum: 10/126f8273ecac8ee9ff91ea778e8784f6cd732d77c3157e8c5bdd6ed03651b5291f71446d05bc02d04073b1e67583604db5394ea3cf992ede0088c70ea15b7378 - languageName: node - linkType: hard - -"defaults@npm:^1.0.3": - version: 1.0.4 - resolution: "defaults@npm:1.0.4" - dependencies: - clone: "npm:^1.0.2" - checksum: 10/3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a - languageName: node - linkType: hard - -"defer-to-connect@npm:^2.0.1": - version: 2.0.1 - resolution: "defer-to-connect@npm:2.0.1" - checksum: 10/8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b - languageName: node - linkType: hard - -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": - version: 1.1.4 - resolution: "define-data-property@npm:1.1.4" - dependencies: - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.0.1" - checksum: 10/abdcb2505d80a53524ba871273e5da75e77e52af9e15b3aa65d8aad82b8a3a424dad7aee2cc0b71470ac7acf501e08defac362e8b6a73cdb4309f028061df4ae - languageName: node - linkType: hard - -"define-lazy-prop@npm:^2.0.0": - version: 2.0.0 - resolution: "define-lazy-prop@npm:2.0.0" - checksum: 10/0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 - languageName: node - linkType: hard - -"define-lazy-prop@npm:^3.0.0": - version: 3.0.0 - resolution: "define-lazy-prop@npm:3.0.0" - checksum: 10/f28421cf9ee86eecaf5f3b8fe875f13d7009c2625e97645bfff7a2a49aca678270b86c39f9c32939e5ca7ab96b551377ed4139558c795e076774287ad3af1aa4 - languageName: node - linkType: hard - -"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": - version: 1.2.1 - resolution: "define-properties@npm:1.2.1" - dependencies: - define-data-property: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.0" - object-keys: "npm:^1.1.1" - checksum: 10/b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 - languageName: node - linkType: hard - -"defu@npm:^6.1.2, defu@npm:^6.1.3": - version: 6.1.3 - resolution: "defu@npm:6.1.3" - checksum: 10/ae0cc81dc6e573422c012bc668625e506525bde9767ff19f80e5c1d155696a95631fced376583d661fb64c3cc6314e578225bba00467178a72a3829d374a346f - languageName: node - linkType: hard - -"delay@npm:^5.0.0": - version: 5.0.0 - resolution: "delay@npm:5.0.0" - checksum: 10/62f151151ecfde0d9afbb8a6be37a6d103c4cb24f35a20ef3fe56f920b0d0d0bb02bc9c0a3084d0179ef669ca332b91155f2ee4d9854622cd2cdba5fc95285f9 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10/46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 - languageName: node - linkType: hard - -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: 10/a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd - languageName: node - linkType: hard - -"denque@npm:^2.1.0": - version: 2.1.0 - resolution: "denque@npm:2.1.0" - checksum: 10/8ea05321576624b90acfc1ee9208b8d1d04b425cf7573b9b4fa40a2c3ed4d4b0af5190567858f532f677ed2003d4d2b73c8130b34e3c7b8d5e88cdcfbfaa1fe7 - languageName: node - linkType: hard - -"depd@npm:2.0.0": - version: 2.0.0 - resolution: "depd@npm:2.0.0" - checksum: 10/c0c8ff36079ce5ada64f46cc9d6fd47ebcf38241105b6e0c98f412e8ad91f084bcf906ff644cc3a4bd876ca27a62accb8b0fff72ea6ed1a414b89d8506f4a5ca - languageName: node - linkType: hard - -"depd@npm:~1.1.2": - version: 1.1.2 - resolution: "depd@npm:1.1.2" - checksum: 10/2ed6966fc14463a9e85451db330ab8ba041efed0b9a1a472dbfc6fbf2f82bab66491915f996b25d8517dddc36c8c74e24c30879b34877f3c4410733444a51d1d - languageName: node - linkType: hard - -"dependency-graph@npm:^0.11.0": - version: 0.11.0 - resolution: "dependency-graph@npm:0.11.0" - checksum: 10/6b5eb540303753037a613e781da4b81534d139cbabc92f342630ed622e3ef4c332fc40cf87823e1ec71a7aeb4b195f8d88d7e625931ce6007bf2bf09a8bfb01e - languageName: node - linkType: hard - -"dequal@npm:^2.0.0, dequal@npm:^2.0.3": - version: 2.0.3 - resolution: "dequal@npm:2.0.3" - checksum: 10/6ff05a7561f33603df87c45e389c9ac0a95e3c056be3da1a0c4702149e3a7f6fe5ffbb294478687ba51a9e95f3a60e8b6b9005993acd79c292c7d15f71964b6b - languageName: node - linkType: hard - -"derive-valtio@npm:0.1.0": - version: 0.1.0 - resolution: "derive-valtio@npm:0.1.0" - peerDependencies: - valtio: "*" - checksum: 10/3fec351a46cbe2aa37099059e4fc8f518bc4c2c9e9f29cc3e55811fb9ce61f3fc49302196c620705fc5584e5a8e1be629a4269f9903899450099a487ceea8e3b - languageName: node - linkType: hard - -"des.js@npm:^1.0.0": - version: 1.1.0 - resolution: "des.js@npm:1.1.0" - dependencies: - inherits: "npm:^2.0.1" - minimalistic-assert: "npm:^1.0.0" - checksum: 10/d35fc82b5a0b2127b12699212e90b54ddd8134e0cf8d27a8c30507ed3572aa574ab71800cbb473769128a52dcf21acc3271c5c359508a5aa772e990df3b1a698 - languageName: node - linkType: hard - -"destr@npm:^2.0.1, destr@npm:^2.0.2": - version: 2.0.2 - resolution: "destr@npm:2.0.2" - checksum: 10/ed8c963cd606407075f03c62b94d5641653ea2210cfec7279e6146da08476c8d293c4bff9280aa65cb1cf67ef3044890b3ee709578ec43de020a77233d6f4698 - languageName: node - linkType: hard - -"destroy@npm:1.2.0": - version: 1.2.0 - resolution: "destroy@npm:1.2.0" - checksum: 10/0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 - languageName: node - linkType: hard - -"detect-browser@npm:5.3.0, detect-browser@npm:^5.2.0": - version: 5.3.0 - resolution: "detect-browser@npm:5.3.0" - checksum: 10/4a8551e1f5170633c9aa976f16c57f81f1044d071b2eb853c572bd817bf9cd0cc90c9c520d950edb5accd31b1b0c8ddb7a96e82040b0b5579f9f09c77446a117 - languageName: node - linkType: hard - -"detect-file@npm:^1.0.0": - version: 1.0.0 - resolution: "detect-file@npm:1.0.0" - checksum: 10/1861e4146128622e847abe0e1ed80fef01e78532665858a792267adf89032b7a9c698436137707fcc6f02956c2a6a0052d6a0cef5be3d4b76b1ff0da88e2158a - languageName: node - linkType: hard - -"detect-indent@npm:^6.0.0": - version: 6.1.0 - resolution: "detect-indent@npm:6.1.0" - checksum: 10/ab953a73c72dbd4e8fc68e4ed4bfd92c97eb6c43734af3900add963fd3a9316f3bc0578b018b24198d4c31a358571eff5f0656e81a1f3b9ad5c547d58b2d093d - languageName: node - linkType: hard - -"detect-libc@npm:^1.0.3": - version: 1.0.3 - resolution: "detect-libc@npm:1.0.3" - bin: - detect-libc: ./bin/detect-libc.js - checksum: 10/3849fe7720feb153e4ac9407086956e073f1ce1704488290ef0ca8aab9430a8d48c8a9f8351889e7cdc64e5b1128589501e4fef48f3a4a49ba92cd6d112d0757 - languageName: node - linkType: hard - -"detect-libc@npm:^2.0.0": - version: 2.0.3 - resolution: "detect-libc@npm:2.0.3" - checksum: 10/b4ea018d623e077bd395f168a9e81db77370dde36a5b01d067f2ad7989924a81d31cb547ff764acb2aa25d50bb7fdde0b0a93bec02212b0cb430621623246d39 - languageName: node - linkType: hard - -"detect-newline@npm:^3.0.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: 10/ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 - languageName: node - linkType: hard - -"detect-node@npm:^2.0.4": - version: 2.1.0 - resolution: "detect-node@npm:2.1.0" - checksum: 10/832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e - languageName: node - linkType: hard - -"detect-port-alt@npm:^1.1.6": - version: 1.1.6 - resolution: "detect-port-alt@npm:1.1.6" - dependencies: - address: "npm:^1.0.1" - debug: "npm:^2.6.0" - bin: - detect: ./bin/detect-port - detect-port: ./bin/detect-port - checksum: 10/35c9f9c69d12d2ca43d093f4f02d7763b47673910749bd12e6fedeb0ab5c546d27ab8e6425a9cbc65edd408490241390a8e680e8ec7e13940e84754ad81d632e - languageName: node - linkType: hard - -"devlop@npm:^1.0.0, devlop@npm:^1.1.0": - version: 1.1.0 - resolution: "devlop@npm:1.1.0" - dependencies: - dequal: "npm:^2.0.0" - checksum: 10/3cc5f903d02d279d6dc4aa71ab6ed9898b9f4d1f861cc5421ce7357893c21b9520de78afb203c92bd650a6977ad0ca98195453a0707a39958cf5fea3b0a8ddd8 - languageName: node - linkType: hard - -"didyoumean@npm:^1.2.2": - version: 1.2.2 - resolution: "didyoumean@npm:1.2.2" - checksum: 10/de7f11b6a0c8c61018629b7f405bb9746d6e994ce87c1a4b7655c3c718442dc69037a3d46d804950604fd9cbe85c074f7b224a119fc1bda851690a74540c6cf8 - languageName: node - linkType: hard - -"diff-sequences@npm:^27.5.1": - version: 27.5.1 - resolution: "diff-sequences@npm:27.5.1" - checksum: 10/34d852a13eb82735c39944a050613f952038614ce324256e1c3544948fa090f1ca7f329a4f1f57c31fe7ac982c17068d8915b633e300f040b97708c81ceb26cd - languageName: node - linkType: hard - -"diff-sequences@npm:^29.6.3": - version: 29.6.3 - resolution: "diff-sequences@npm:29.6.3" - checksum: 10/179daf9d2f9af5c57ad66d97cb902a538bcf8ed64963fa7aa0c329b3de3665ce2eb6ffdc2f69f29d445fa4af2517e5e55e5b6e00c00a9ae4f43645f97f7078cb - languageName: node - linkType: hard - -"diff@npm:^4.0.1": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: 10/ec09ec2101934ca5966355a229d77afcad5911c92e2a77413efda5455636c4cf2ce84057e2d7715227a2eeeda04255b849bd3ae3a4dd22eb22e86e76456df069 - languageName: node - linkType: hard - -"diff@npm:^5.0.0, diff@npm:^5.2.0": - version: 5.2.0 - resolution: "diff@npm:5.2.0" - checksum: 10/01b7b440f83a997350a988e9d2f558366c0f90f15be19f4aa7f1bb3109a4e153dfc3b9fbf78e14ea725717017407eeaa2271e3896374a0181e8f52445740846d - languageName: node - linkType: hard - -"diff@npm:^7.0.0": - version: 7.0.0 - resolution: "diff@npm:7.0.0" - checksum: 10/e9b8e48d054c9c0c093c65ce8e2637af94b35f2427001607b14e5e0589e534ea3413a7f91ebe6d7c5a1494ace49cb7c7c3972f442ddd96a4767ff091999a082e - languageName: node - linkType: hard - -"diffie-hellman@npm:^5.0.3": - version: 5.0.3 - resolution: "diffie-hellman@npm:5.0.3" - dependencies: - bn.js: "npm:^4.1.0" - miller-rabin: "npm:^4.0.0" - randombytes: "npm:^2.0.0" - checksum: 10/2ff28231f93b27a4903461432d2de831df02e3568ea7633d5d7b6167eb73077f823b2bca26de6ba4f5c7ecd10a3df5aa94d376d136ab6209948c03cc4e4ac1fe - languageName: node - linkType: hard - -"difflib@npm:^0.2.4": - version: 0.2.4 - resolution: "difflib@npm:0.2.4" - dependencies: - heap: "npm:>= 0.2.0" - checksum: 10/35c09c9469f762b72703a1eee4bd7bae6227fac96cef4605cd00f0ab3773b547584aefd2c5224f85c5b1701f0e8cedebd45afbb853b01d1d44863b4720cfcd35 - languageName: node - linkType: hard - -"dijkstrajs@npm:^1.0.1": - version: 1.0.3 - resolution: "dijkstrajs@npm:1.0.3" - checksum: 10/0d8429699a6d5897ed371de494ef3c7072e8052b42abbd978e686a9b8689e70af005fa3e93e93263ee3653673ff5f89c36db830a57ae7c2e088cb9c496307507 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: "npm:^4.0.0" - checksum: 10/fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 - languageName: node - linkType: hard - -"discontinuous-range@npm:1.0.0": - version: 1.0.0 - resolution: "discontinuous-range@npm:1.0.0" - checksum: 10/3c1716c6f107e80082600ac57648b49baa9aa60f71a442dadbaf66179610e239ed95ba96ff6080bc7845ea027ffe9176e22e94a04ff275a7dd5c30e2aece4cba - languageName: node - linkType: hard - -"dlv@npm:^1.1.3": - version: 1.1.3 - resolution: "dlv@npm:1.1.3" - checksum: 10/836459ec6b50e43e9ed388a5fc28954be99e3481af3fa4b5d82a600762eb65ef8faacd454097ed7fc2f8a60aea2800d65a4cece5cd0d81ab82b2031f3f759e6e - languageName: node - linkType: hard - -"dns-equal@npm:^1.0.0": - version: 1.0.0 - resolution: "dns-equal@npm:1.0.0" - checksum: 10/c4f55af6f13536de39ebcfa15f504a5678d4fc2cf37b76fd41e73aa46dbd1fa596c9468c0c929aeb248ec443cb217fde949942c513312acf93c76cf783276617 - languageName: node - linkType: hard - -"dns-packet@npm:^5.2.2": - version: 5.6.0 - resolution: "dns-packet@npm:5.6.0" - dependencies: - "@leichtgewicht/ip-codec": "npm:^2.0.1" - checksum: 10/1643bf648fe63c44f21f28dff2174f6de45034b55e47a6e9b427a179701fc8a5b15019f7f84b300b537637c69ab3d03553333c566c99cc905ba97652ea388ee8 - languageName: node - linkType: hard - -"dns-packet@npm:^5.6.1": - version: 5.6.1 - resolution: "dns-packet@npm:5.6.1" - dependencies: - "@leichtgewicht/ip-codec": "npm:^2.0.1" - checksum: 10/ef5496dd5a906e22ed262cbe1a6f5d532c0893c4f1884a7aa37d4d0d8b8376a2b43f749aab087c8bb1354d67b40444f7fca8de4017b161a4cea468543061aed3 - languageName: node - linkType: hard - -"docker-compose@npm:1.1.0": - version: 1.1.0 - resolution: "docker-compose@npm:1.1.0" - dependencies: - yaml: "npm:^2.2.2" - checksum: 10/59447ec147e8f6f693c5b1b6bb9f5efeb975d249945cc69a45f93b98c3258073a4d35bbcf10c94ba4c03ab7b566f4b82f0491e243c913999a4eb8250bc176e60 - languageName: node - linkType: hard - -"doctrine@npm:^2.1.0": - version: 2.1.0 - resolution: "doctrine@npm:2.1.0" - dependencies: - esutils: "npm:^2.0.2" - checksum: 10/555684f77e791b17173ea86e2eea45ef26c22219cb64670669c4f4bebd26dbc95cd90ec1f4159e9349a6bb9eb892ce4dde8cd0139e77bedd8bf4518238618474 - languageName: node - linkType: hard - -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: "npm:^2.0.2" - checksum: 10/b4b28f1df5c563f7d876e7461254a4597b8cabe915abe94d7c5d1633fed263fcf9a85e8d3836591fc2d040108e822b0d32758e5ec1fe31c590dc7e08086e3e48 - languageName: node - linkType: hard - -"dom-align@npm:^1.7.0": - version: 1.12.4 - resolution: "dom-align@npm:1.12.4" - checksum: 10/fbfb005fcb1572700dc164bdb0c5ba2a6b438ddf8b7fb1d7250b697f7899922364a671a37fa3f09b16596fc289d9bddeae6406a45f9587b91c24438590c73a2b - languageName: node - linkType: hard - -"dom-converter@npm:^0.2.0": - version: 0.2.0 - resolution: "dom-converter@npm:0.2.0" - dependencies: - utila: "npm:~0.4" - checksum: 10/71b22f56bce6255a963694a72860a99f08763cf500f02ff38ce4c7489f95b07e7a0069f10b04c7d200e21375474abe01232833ca1600f104bdee7173e493a5b9 - languageName: node - linkType: hard - -"dom-helpers@npm:^5.0.1": - version: 5.2.1 - resolution: "dom-helpers@npm:5.2.1" - dependencies: - "@babel/runtime": "npm:^7.8.7" - csstype: "npm:^3.0.2" - checksum: 10/bed2341adf8864bf932b3289c24f35fdd99930af77df46688abf2d753ff291df49a15850c874d686d9be6ec4e1c6835673906e64dbd8b2839d227f117a11fd41 - languageName: node - linkType: hard - -"dom-serializer@npm:0": - version: 0.2.2 - resolution: "dom-serializer@npm:0.2.2" - dependencies: - domelementtype: "npm:^2.0.1" - entities: "npm:^2.0.0" - checksum: 10/376344893e4feccab649a14ca1a46473e9961f40fe62479ea692d4fee4d9df1c00ca8654811a79c1ca7b020096987e1ca4fb4d7f8bae32c1db800a680a0e5d5e - languageName: node - linkType: hard - -"dom-serializer@npm:^1.0.1": - version: 1.4.1 - resolution: "dom-serializer@npm:1.4.1" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^4.2.0" - entities: "npm:^2.0.0" - checksum: 10/53b217bcfed4a0f90dd47f34f239b1c81fff53ffa39d164d722325817fdb554903b145c2d12c8421ce0df7d31c1b180caf7eacd3c86391dd925f803df8027dcc - languageName: node - linkType: hard - -"dom-serializer@npm:^2.0.0": - version: 2.0.0 - resolution: "dom-serializer@npm:2.0.0" - dependencies: - domelementtype: "npm:^2.3.0" - domhandler: "npm:^5.0.2" - entities: "npm:^4.2.0" - checksum: 10/e3bf9027a64450bca0a72297ecdc1e3abb7a2912268a9f3f5d33a2e29c1e2c3502c6e9f860fc6625940bfe0cfb57a44953262b9e94df76872fdfb8151097eeb3 - languageName: node - linkType: hard - -"domain-browser@npm:^4.22.0": - version: 4.23.0 - resolution: "domain-browser@npm:4.23.0" - checksum: 10/56d5a969ed330a16aa6f03f26e7ba3b98e07c7ce4a77d08f987e9e424f1deca009070ed9bd24011d9b863499dcba95de4d679bba77aef346ee23230e570ab9cf - languageName: node - linkType: hard - -"domelementtype@npm:1": - version: 1.3.1 - resolution: "domelementtype@npm:1.3.1" - checksum: 10/7893da40218ae2106ec6ffc146b17f203487a52f5228b032ea7aa470e41dfe03e1bd762d0ee0139e792195efda765434b04b43cddcf63207b098f6ae44b36ad6 - languageName: node - linkType: hard - -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": - version: 2.3.0 - resolution: "domelementtype@npm:2.3.0" - checksum: 10/ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 - languageName: node - linkType: hard - -"domexception@npm:^2.0.1": - version: 2.0.1 - resolution: "domexception@npm:2.0.1" - dependencies: - webidl-conversions: "npm:^5.0.0" - checksum: 10/d638e9cb05c52999f1b2eb87c374b03311ea5b1d69c2f875bc92da73e17db60c12142b45c950228642ff7f845c536b65305483350d080df59003a653da80b691 - languageName: node - linkType: hard - -"domexception@npm:^4.0.0": - version: 4.0.0 - resolution: "domexception@npm:4.0.0" - dependencies: - webidl-conversions: "npm:^7.0.0" - checksum: 10/4ed443227d2871d76c58d852b2e93c68e0443815b2741348f20881bedee8c1ad4f9bfc5d30c7dec433cd026b57da63407c010260b1682fef4c8847e7181ea43f - languageName: node - linkType: hard - -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": - version: 4.3.1 - resolution: "domhandler@npm:4.3.1" - dependencies: - domelementtype: "npm:^2.2.0" - checksum: 10/e0d2af7403997a3ca040a9ace4a233b75ebe321e0ef628b417e46d619d65d47781b2f2038b6c2ef6e56e73e66aec99caf6a12c7e687ecff18ef74af6dfbde5de - languageName: node - linkType: hard - -"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": - version: 5.0.3 - resolution: "domhandler@npm:5.0.3" - dependencies: - domelementtype: "npm:^2.3.0" - checksum: 10/809b805a50a9c6884a29f38aec0a4e1b4537f40e1c861950ed47d10b049febe6b79ab72adaeeebb3cc8fc1cd33f34e97048a72a9265103426d93efafa78d3e96 - languageName: node - linkType: hard - -"dompurify@npm:2.5.7": - version: 2.5.7 - resolution: "dompurify@npm:2.5.7" - checksum: 10/b150ca1e28083252cd51097162dc96cb45203f7e2af1fbaa8ef32b4f4d6b605e4aa8915190d38bd0635cbbf14d13a200138cd3ec1b084096819b14c718355122 - languageName: node - linkType: hard - -"domutils@npm:^1.7.0": - version: 1.7.0 - resolution: "domutils@npm:1.7.0" - dependencies: - dom-serializer: "npm:0" - domelementtype: "npm:1" - checksum: 10/8c1d879fd3bbfc0156c970d12ebdf530f541cbda895d7f631b2444d22bbb9d0e5a3a4c3210cffb17708ad67531d7d40e1bef95e915c53a218d268607b66b63c8 - languageName: node - linkType: hard - -"domutils@npm:^2.5.2, domutils@npm:^2.8.0": - version: 2.8.0 - resolution: "domutils@npm:2.8.0" - dependencies: - dom-serializer: "npm:^1.0.1" - domelementtype: "npm:^2.2.0" - domhandler: "npm:^4.2.0" - checksum: 10/1f316a03f00b09a8893d4a25d297d5cbffd02c564509dede28ef72d5ce38d93f6d61f1de88d439f31b14a1d9b42f587ed711b9e8b1b4d3bf6001399832bfc4e0 - languageName: node - linkType: hard - -"domutils@npm:^3.0.1": - version: 3.1.0 - resolution: "domutils@npm:3.1.0" - dependencies: - dom-serializer: "npm:^2.0.0" - domelementtype: "npm:^2.3.0" - domhandler: "npm:^5.0.3" - checksum: 10/9a169a6e57ac4c738269a73ab4caf785114ed70e46254139c1bbc8144ac3102aacb28a6149508395ae34aa5d6a40081f4fa5313855dc8319c6d8359866b6dfea - languageName: node - linkType: hard - -"dot-case@npm:^3.0.4": - version: 3.0.4 - resolution: "dot-case@npm:3.0.4" - dependencies: - no-case: "npm:^3.0.4" - tslib: "npm:^2.0.3" - checksum: 10/a65e3519414856df0228b9f645332f974f2bf5433370f544a681122eab59e66038fc3349b4be1cdc47152779dac71a5864f1ccda2f745e767c46e9c6543b1169 - languageName: node - linkType: hard - -"dot-prop@npm:^5.1.0": - version: 5.3.0 - resolution: "dot-prop@npm:5.3.0" - dependencies: - is-obj: "npm:^2.0.0" - checksum: 10/33b2561617bd5c73cf9305368ba4638871c5dbf9c8100c8335acd2e2d590a81ec0e75c11cfaea5cc3cf8c2f668cad4beddb52c11856d0c9e666348eee1baf57a - languageName: node - linkType: hard - -"dotenv-expand@npm:^10.0.0": - version: 10.0.0 - resolution: "dotenv-expand@npm:10.0.0" - checksum: 10/b41eb278bc96b92cbf3037ca5f3d21e8845bf165dc06b6f9a0a03d278c2bd5a01c0cfbb3528ae3a60301ba1a8a9cace30e748c54b460753bc00d4c014b675597 - languageName: node - linkType: hard - -"dotenv-expand@npm:^5.1.0": - version: 5.1.0 - resolution: "dotenv-expand@npm:5.1.0" - checksum: 10/d52af2a6e4642979ae4221408f1b75102508dbe4f5bac1c0613f92a3cf3880d5c31f86b2f5cff3273f7c23e10421e75028546e8b6cd0376fcd20e3803b374e15 - languageName: node - linkType: hard - -"dotenv@npm:^10.0.0": - version: 10.0.0 - resolution: "dotenv@npm:10.0.0" - checksum: 10/55f701ae213e3afe3f4232fae5edfb6e0c49f061a363ff9f1c5a0c2bf3fb990a6e49aeada11b2a116efb5fdc3bc3f1ef55ab330be43033410b267f7c0809a9dc - languageName: node - linkType: hard - -"dotenv@npm:^16.0.0, dotenv@npm:^16.3.1": - version: 16.4.5 - resolution: "dotenv@npm:16.4.5" - checksum: 10/55a3134601115194ae0f924e54473459ed0d9fc340ae610b676e248cca45aa7c680d86365318ea964e6da4e2ea80c4514c1adab5adb43d6867fb57ff068f95c8 - languageName: node - linkType: hard - -"dotenv@npm:^16.6.1": - version: 16.6.1 - resolution: "dotenv@npm:16.6.1" - checksum: 10/1d1897144344447ffe62aa1a6d664f4cd2e0784e0aff787eeeec1940ded32f8e4b5b506d665134fc87157baa086fce07ec6383970a2b6d2e7985beaed6a4cc14 - languageName: node - linkType: hard - -"dset@npm:^3.1.2": - version: 3.1.2 - resolution: "dset@npm:3.1.2" - checksum: 10/8af5554965b7e48c3c7e6b62f7a3d6c054efe643f56f0e19b11bbc2c677641af25cf89cee53ae8905b94dca4805620e9b4c966d3c6d51269157a71fedce5559a - languageName: node - linkType: hard - -"dset@npm:^3.1.4": - version: 3.1.4 - resolution: "dset@npm:3.1.4" - checksum: 10/6268c9e2049c8effe6e5a1952f02826e8e32468b5ced781f15f8f3b1c290da37626246fec014fbdd1503413f981dff6abd8a4c718ec9952fd45fccb6ac9de43f - languageName: node - linkType: hard - -"duplexer@npm:^0.1.2": - version: 0.1.2 - resolution: "duplexer@npm:0.1.2" - checksum: 10/62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 - languageName: node - linkType: hard - -"duplexify@npm:^4.1.2": - version: 4.1.2 - resolution: "duplexify@npm:4.1.2" - dependencies: - end-of-stream: "npm:^1.4.1" - inherits: "npm:^2.0.3" - readable-stream: "npm:^3.1.1" - stream-shift: "npm:^1.0.0" - checksum: 10/eeb4f362defa4da0b2474d853bc4edfa446faeb1bde76819a68035632c118de91f6a58e6fe05c84f6e6de2548f8323ec8473aa9fe37332c99e4d77539747193e - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 10/9b1d3e1baefeaf7d70799db8774149cef33b97183a6addceeba0cf6b85ba23ee2686f302f14482006df32df75d32b17c509c143a3689627929e4a8efaf483952 - languageName: node - linkType: hard - -"eciesjs@npm:^0.4.11": - version: 0.4.12 - resolution: "eciesjs@npm:0.4.12" - dependencies: - "@ecies/ciphers": "npm:^0.2.1" - "@noble/ciphers": "npm:^1.0.0" - "@noble/curves": "npm:^1.6.0" - "@noble/hashes": "npm:^1.5.0" - checksum: 10/accd336faa862c3e4c6fd90a07f8632a0b5a3231f0cf15c10b62ce56073851323055e84bf89cddabf6317a0c2a5c4837d2919b661904699f7f10a15aa1189d0c - languageName: node - linkType: hard - -"ee-first@npm:1.1.1": - version: 1.1.1 - resolution: "ee-first@npm:1.1.1" - checksum: 10/1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f - languageName: node - linkType: hard - -"ejs@npm:3.1.8": - version: 3.1.8 - resolution: "ejs@npm:3.1.8" - dependencies: - jake: "npm:^10.8.5" - bin: - ejs: bin/cli.js - checksum: 10/879f84c8ee56d06dea7b47a8b493e1b398dba578ec7a701660cf77c8a6d565b932c5896639d1dc4a3be29204eccdb70ee4e1bdf634647c2490227f727d5d6a3d - languageName: node - linkType: hard - -"ejs@npm:^3.1.10": - version: 3.1.10 - resolution: "ejs@npm:3.1.10" - dependencies: - jake: "npm:^10.8.5" - bin: - ejs: bin/cli.js - checksum: 10/a9cb7d7cd13b7b1cd0be5c4788e44dd10d92f7285d2f65b942f33e127230c054f99a42db4d99f766d8dbc6c57e94799593ee66a14efd7c8dd70c4812bf6aa384 - languageName: node - linkType: hard - -"ejs@npm:^3.1.6": - version: 3.1.9 - resolution: "ejs@npm:3.1.9" - dependencies: - jake: "npm:^10.8.5" - bin: - ejs: bin/cli.js - checksum: 10/71f56d37540d2c2d71701f0116710c676f75314a3e997ef8b83515d5d4d2b111c5a72725377caeecb928671bacb84a0d38135f345904812e989847057d59f21a - languageName: node - linkType: hard - -"electron-fetch@npm:^1.9.1": - version: 1.9.1 - resolution: "electron-fetch@npm:1.9.1" - dependencies: - encoding: "npm:^0.1.13" - checksum: 10/f2c54541e6434f3b428bb05d6f207beeecfb8822009fa4e21b33f695959f3d2bb5f8ca0a6353f9941e8c0193e575ac63a03fb208783a5e4ace9dba68c18d0510 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.4.796": - version: 1.4.815 - resolution: "electron-to-chromium@npm:1.4.815" - checksum: 10/84f59b76b1ac16fe1f359720bdaeadcbce34825a7e79e3551ceec6b52d4021e7bd8a56a2cfa4197ba353331df18d0bc2ab449e08c5599eb1b2a7aacaba56f711 - languageName: node - linkType: hard - -"elliptic@npm:6.6.1, elliptic@npm:^6.5.2, elliptic@npm:^6.5.3, elliptic@npm:^6.5.5, elliptic@npm:^6.5.7": - version: 6.6.1 - resolution: "elliptic@npm:6.6.1" - dependencies: - bn.js: "npm:^4.11.9" - brorand: "npm:^1.1.0" - hash.js: "npm:^1.0.0" - hmac-drbg: "npm:^1.0.1" - inherits: "npm:^2.0.4" - minimalistic-assert: "npm:^1.0.1" - minimalistic-crypto-utils: "npm:^1.0.1" - checksum: 10/dc678c9febd89a219c4008ba3a9abb82237be853d9fd171cd602c8fb5ec39927e65c6b5e7a1b2a4ea82ee8e0ded72275e7932bb2da04a5790c2638b818e4e1c5 - languageName: node - linkType: hard - -"emittery@npm:^0.10.2": - version: 0.10.2 - resolution: "emittery@npm:0.10.2" - checksum: 10/fa86fc2b1f4c792d7d479a4de1a6a1f74b0b597770bae770336f0be6501e64be0995aa07d284ae502b269f5cec960cd0c44c91dd090d06d8deecee6d9787e396 - languageName: node - linkType: hard - -"emittery@npm:^0.8.1": - version: 0.8.1 - resolution: "emittery@npm:0.8.1" - checksum: 10/3b882c0bdc3121b4e92b85315f87da0db8e965766d6c7ff70a8f45e0c38ed49d561936650afa32759d8fb320a458bc9e12631799a0a276e9e8a960ae16c1f6f1 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10/c72d67a6821be15ec11997877c437491c313d924306b8da5d87d2a2bcc2cec9903cb5b04ee1a088460501d8e5b44f10df82fdc93c444101a7610b80c8b6938e1 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 10/915acf859cea7131dac1b2b5c9c8e35c4849e325a1d114c30adb8cd615970f6dca0e27f64f3a4949d7d6ed86ecd79a1c5c63f02e697513cddd7b5835c90948b8 - languageName: node - linkType: hard - -"emojis-list@npm:^3.0.0": - version: 3.0.0 - resolution: "emojis-list@npm:3.0.0" - checksum: 10/114f47d6d45612621497d2b1556c8f142c35332a591780a54e863e42d281e72d6c7d7c419f2e419319d4eb7f6ebf1db82d9744905d90f275db20d06a763b5e19 - languageName: node - linkType: hard - -"encode-utf8@npm:^1.0.2, encode-utf8@npm:^1.0.3": - version: 1.0.3 - resolution: "encode-utf8@npm:1.0.3" - checksum: 10/0204c37cda21bf19bb8f87f7ec6c89a23d43488c2ef1e5cfa40b64ee9568e63e15dc323fa7f50a491e2c6d33843a6b409f6de09afbf6cf371cb8da596cc64b44 - languageName: node - linkType: hard - -"encodeurl@npm:~1.0.2": - version: 1.0.2 - resolution: "encodeurl@npm:1.0.2" - checksum: 10/e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: "npm:^0.6.2" - checksum: 10/bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f - languageName: node - linkType: hard - -"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.0, end-of-stream@npm:^1.4.1": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" - dependencies: - once: "npm:^1.4.0" - checksum: 10/530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b - languageName: node - linkType: hard - -"engine.io-client@npm:~6.5.2": - version: 6.5.3 - resolution: "engine.io-client@npm:6.5.3" - dependencies: - "@socket.io/component-emitter": "npm:~3.1.0" - debug: "npm:~4.3.1" - engine.io-parser: "npm:~5.2.1" - ws: "npm:~8.11.0" - xmlhttprequest-ssl: "npm:~2.0.0" - checksum: 10/0d7c3e6de23f37706c163bc8a0e90e70e613c7768be0705bda3675124d5e24d849810fddda005f8dcc721da35aee713976a03a0465d71f0856adfc1af7a80e5d - languageName: node - linkType: hard - -"engine.io-parser@npm:~5.2.1": - version: 5.2.1 - resolution: "engine.io-parser@npm:5.2.1" - checksum: 10/31f16fd1d64d6c3997f910606a0a8b143a86da98b06346ba7970e9bdf25cc8485caf69b4939dc5a829b312c7db5dbbdcc1fe3787b105bcc175e61b9d37a7e687 - languageName: node - linkType: hard - -"enhanced-resolve@npm:^5.15.0": - version: 5.17.0 - resolution: "enhanced-resolve@npm:5.17.0" - dependencies: - graceful-fs: "npm:^4.2.4" - tapable: "npm:^2.2.0" - checksum: 10/8f7bf71537d78e7d20a27363793f2c9e13ec44800c7c7830364a448f80a44994aa19d64beecefa1ab49e4de6f7fbe18cc0931dc449c115f02918ff5fcbe7705f - languageName: node - linkType: hard - -"enquire.js@npm:^2.1.6": - version: 2.1.6 - resolution: "enquire.js@npm:2.1.6" - checksum: 10/246b4ec2cc7a4eb8e24e9ae836b3222b889d8d982ac1583f90f9641222610a688c8a3fab53e2dc6ee56457c2798ba487814f61f5553d30ae23cc74664e6f78f8 - languageName: node - linkType: hard - -"enquirer@npm:2.3.6, enquirer@npm:^2.3.0, enquirer@npm:^2.3.6": - version: 2.3.6 - resolution: "enquirer@npm:2.3.6" - dependencies: - ansi-colors: "npm:^4.1.1" - checksum: 10/751d14f037eb7683997e696fb8d5fe2675e0b0cde91182c128cf598acf3f5bd9005f35f7c2a9109e291140af496ebec237b6dac86067d59a9b44f3688107f426 - languageName: node - linkType: hard - -"enquirer@npm:^2.4.1": - version: 2.4.1 - resolution: "enquirer@npm:2.4.1" - dependencies: - ansi-colors: "npm:^4.1.1" - strip-ansi: "npm:^6.0.1" - checksum: 10/b3726486cd98f0d458a851a03326a2a5dd4d84f37ff94ff2a2960c915e0fc865865da3b78f0877dc36ac5c1189069eca603e82ec63d5bc6b0dd9985bf6426d7a - languageName: node - linkType: hard - -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 10/2c765221ee324dbe25e1b8ca5d1bf2a4d39e750548f2e85cbf7ca1d167d709689ddf1796623e66666ae747364c11ed512c03b48c5bbe70968d30f2a4009509b7 - languageName: node - linkType: hard - -"entities@npm:^4.2.0, entities@npm:^4.4.0, entities@npm:^4.5.0": - version: 4.5.0 - resolution: "entities@npm:4.5.0" - checksum: 10/ede2a35c9bce1aeccd055a1b445d41c75a14a2bb1cd22e242f20cf04d236cdcd7f9c859eb83f76885327bfae0c25bf03303665ee1ce3d47c5927b98b0e3e3d48 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 10/65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 10/1d20d825cdcce8d811bfbe86340f4755c02655a7feb2f13f8c880566d9d72a3f6c92c192a6867632e490d6da67b678271f46e01044996a6443e870331100dfdd - languageName: node - linkType: hard - -"err-code@npm:^3.0.1": - version: 3.0.1 - resolution: "err-code@npm:3.0.1" - checksum: 10/37af52bc46cde34b2979a5503dbf348aeae84c8ed122731d2c228250a6fd3cfe979aa07fd53f2b368dc3f8ecaf35f5d7d45ef98ff752f08bc7c6c6917c40d44c - languageName: node - linkType: hard - -"error-ex@npm:^1.3.1": - version: 1.3.2 - resolution: "error-ex@npm:1.3.2" - dependencies: - is-arrayish: "npm:^0.2.1" - checksum: 10/d547740aa29c34e753fb6fed2c5de81802438529c12b3673bd37b6bb1fe49b9b7abdc3c11e6062fe625d8a296b3cf769a80f878865e25e685f787763eede3ffb - languageName: node - linkType: hard - -"error-stack-parser@npm:^2.0.6": - version: 2.1.4 - resolution: "error-stack-parser@npm:2.1.4" - dependencies: - stackframe: "npm:^1.3.4" - checksum: 10/23db33135bfc6ba701e5eee45e1bb9bd2fe33c5d4f9927440d9a499c7ac538f91f455fcd878611361269893c56734419252c40d8105eb3b023cf8b0fc2ebb64e - languageName: node - linkType: hard - -"es-abstract@npm:^1.17.2, es-abstract@npm:^1.17.5, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": - version: 1.23.3 - resolution: "es-abstract@npm:1.23.3" - dependencies: - array-buffer-byte-length: "npm:^1.0.1" - arraybuffer.prototype.slice: "npm:^1.0.3" - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.7" - data-view-buffer: "npm:^1.0.1" - data-view-byte-length: "npm:^1.0.1" - data-view-byte-offset: "npm:^1.0.0" - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-set-tostringtag: "npm:^2.0.3" - es-to-primitive: "npm:^1.2.1" - function.prototype.name: "npm:^1.1.6" - get-intrinsic: "npm:^1.2.4" - get-symbol-description: "npm:^1.0.2" - globalthis: "npm:^1.0.3" - gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.0.3" - has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.2" - internal-slot: "npm:^1.0.7" - is-array-buffer: "npm:^3.0.4" - is-callable: "npm:^1.2.7" - is-data-view: "npm:^1.0.1" - is-negative-zero: "npm:^2.0.3" - is-regex: "npm:^1.1.4" - is-shared-array-buffer: "npm:^1.0.3" - is-string: "npm:^1.0.7" - is-typed-array: "npm:^1.1.13" - is-weakref: "npm:^1.0.2" - object-inspect: "npm:^1.13.1" - object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.5" - regexp.prototype.flags: "npm:^1.5.2" - safe-array-concat: "npm:^1.1.2" - safe-regex-test: "npm:^1.0.3" - string.prototype.trim: "npm:^1.2.9" - string.prototype.trimend: "npm:^1.0.8" - string.prototype.trimstart: "npm:^1.0.8" - typed-array-buffer: "npm:^1.0.2" - typed-array-byte-length: "npm:^1.0.1" - typed-array-byte-offset: "npm:^1.0.2" - typed-array-length: "npm:^1.0.6" - unbox-primitive: "npm:^1.0.2" - which-typed-array: "npm:^1.1.15" - checksum: 10/2da795a6a1ac5fc2c452799a409acc2e3692e06dc6440440b076908617188899caa562154d77263e3053bcd9389a07baa978ab10ac3b46acc399bd0c77be04cb - languageName: node - linkType: hard - -"es-array-method-boxes-properly@npm:^1.0.0": - version: 1.0.0 - resolution: "es-array-method-boxes-properly@npm:1.0.0" - checksum: 10/27a8a21acf20f3f51f69dce8e643f151e380bffe569e95dc933b9ded9fcd89a765ee21b5229c93f9206c93f87395c6b75f80be8ac8c08a7ceb8771e1822ff1fb - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "es-define-property@npm:1.0.0" - dependencies: - get-intrinsic: "npm:^1.2.4" - checksum: 10/f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 - languageName: node - linkType: hard - -"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10/96e65d640156f91b707517e8cdc454dd7d47c32833aa3e85d79f24f9eb7ea85f39b63e36216ef0114996581969b59fe609a94e30316b08f5f4df1d44134cf8d5 - languageName: node - linkType: hard - -"es-iterator-helpers@npm:^1.1.0": - version: 1.2.0 - resolution: "es-iterator-helpers@npm:1.2.0" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.3" - es-errors: "npm:^1.3.0" - es-set-tostringtag: "npm:^2.0.3" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - globalthis: "npm:^1.0.4" - gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.0.3" - has-symbols: "npm:^1.0.3" - internal-slot: "npm:^1.0.7" - iterator.prototype: "npm:^1.1.3" - safe-array-concat: "npm:^1.1.2" - checksum: 10/a4159e36c6bae03d4b636894fff2ff1acfcedc16c622939298b00adf4d2da6356ad92f682cc75c037a012a4b06adb903f67dfdfd05bac61847e9b763de2acbcb - languageName: node - linkType: hard - -"es-module-lexer@npm:^1.2.1": - version: 1.3.0 - resolution: "es-module-lexer@npm:1.3.0" - checksum: 10/dee2af09669d05282db987839681ea1917ce31ce4a2364cc9eb598675344c5c709895e7e782db87794065a6f3af054552e2cf42ccadcaec4c9fc0cbc4898f193 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0": - version: 1.0.0 - resolution: "es-object-atoms@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10/f8910cf477e53c0615f685c5c96210591841850871b81924fcf256bfbaa68c254457d994a4308c60d15b20805e7f61ce6abc669375e01a5349391a8c1767584f - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.0.3": - version: 2.0.3 - resolution: "es-set-tostringtag@npm:2.0.3" - dependencies: - get-intrinsic: "npm:^1.2.4" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.1" - checksum: 10/7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 - languageName: node - linkType: hard - -"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": - version: 1.0.2 - resolution: "es-shim-unscopables@npm:1.0.2" - dependencies: - hasown: "npm:^2.0.0" - checksum: 10/6d3bf91f658a27cc7217cd32b407a0d714393a84d125ad576319b9e83a893bea165cf41270c29e9ceaa56d3cf41608945d7e2a2c31fd51c0009b0c31402b91c7 - languageName: node - linkType: hard - -"es-to-primitive@npm:^1.2.1": - version: 1.2.1 - resolution: "es-to-primitive@npm:1.2.1" - dependencies: - is-callable: "npm:^1.1.4" - is-date-object: "npm:^1.0.1" - is-symbol: "npm:^1.0.2" - checksum: 10/74aeeefe2714cf99bb40cab7ce3012d74e1e2c1bd60d0a913b467b269edde6e176ca644b5ba03a5b865fb044a29bca05671cd445c85ca2cdc2de155d7fc8fe9b - languageName: node - linkType: hard - -"es-toolkit@npm:1.33.0": - version: 1.33.0 - resolution: "es-toolkit@npm:1.33.0" - dependenciesMeta: - "@trivago/prettier-plugin-sort-imports@4.3.0": - unplugged: true - prettier-plugin-sort-re-exports@0.0.1: - unplugged: true - checksum: 10/db613d885c407dc3b84b3939b8b0c9976f658bfb03fa0f9cd3a3fe8383a60a75e1e4f34584e86c3fbf00def50ea0ca5f1a5264a1014018286dedbed08426b5f0 - languageName: node - linkType: hard - -"es6-promise@npm:^4.0.3": - version: 4.2.8 - resolution: "es6-promise@npm:4.2.8" - checksum: 10/b250c55523c496c43c9216c2646e58ec182b819e036fe5eb8d83fa16f044ecc6b8dcefc88ace2097be3d3c4d02b6aa8eeae1a66deeaf13e7bee905ebabb350a3 - languageName: node - linkType: hard - -"es6-promisify@npm:^5.0.0": - version: 5.0.0 - resolution: "es6-promisify@npm:5.0.0" - dependencies: - es6-promise: "npm:^4.0.3" - checksum: 10/fbed9d791598831413be84a5374eca8c24800ec71a16c1c528c43a98e2dadfb99331483d83ae6094ddb9b87e6f799a15d1553cebf756047e0865c753bc346b92 - languageName: node - linkType: hard - -"esbuild@npm:^0.19.0": - version: 0.19.12 - resolution: "esbuild@npm:0.19.12" - dependencies: - "@esbuild/aix-ppc64": "npm:0.19.12" - "@esbuild/android-arm": "npm:0.19.12" - "@esbuild/android-arm64": "npm:0.19.12" - "@esbuild/android-x64": "npm:0.19.12" - "@esbuild/darwin-arm64": "npm:0.19.12" - "@esbuild/darwin-x64": "npm:0.19.12" - "@esbuild/freebsd-arm64": "npm:0.19.12" - "@esbuild/freebsd-x64": "npm:0.19.12" - "@esbuild/linux-arm": "npm:0.19.12" - "@esbuild/linux-arm64": "npm:0.19.12" - "@esbuild/linux-ia32": "npm:0.19.12" - "@esbuild/linux-loong64": "npm:0.19.12" - "@esbuild/linux-mips64el": "npm:0.19.12" - "@esbuild/linux-ppc64": "npm:0.19.12" - "@esbuild/linux-riscv64": "npm:0.19.12" - "@esbuild/linux-s390x": "npm:0.19.12" - "@esbuild/linux-x64": "npm:0.19.12" - "@esbuild/netbsd-x64": "npm:0.19.12" - "@esbuild/openbsd-x64": "npm:0.19.12" - "@esbuild/sunos-x64": "npm:0.19.12" - "@esbuild/win32-arm64": "npm:0.19.12" - "@esbuild/win32-ia32": "npm:0.19.12" - "@esbuild/win32-x64": "npm:0.19.12" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10/861fa8eb2428e8d6521a4b7c7930139e3f45e8d51a86985cc29408172a41f6b18df7b3401e7e5e2d528cdf83742da601ddfdc77043ddc4f1c715a8ddb2d8a255 - languageName: node - linkType: hard - -"esbuild@npm:^0.21.3": - version: 0.21.5 - resolution: "esbuild@npm:0.21.5" - dependencies: - "@esbuild/aix-ppc64": "npm:0.21.5" - "@esbuild/android-arm": "npm:0.21.5" - "@esbuild/android-arm64": "npm:0.21.5" - "@esbuild/android-x64": "npm:0.21.5" - "@esbuild/darwin-arm64": "npm:0.21.5" - "@esbuild/darwin-x64": "npm:0.21.5" - "@esbuild/freebsd-arm64": "npm:0.21.5" - "@esbuild/freebsd-x64": "npm:0.21.5" - "@esbuild/linux-arm": "npm:0.21.5" - "@esbuild/linux-arm64": "npm:0.21.5" - "@esbuild/linux-ia32": "npm:0.21.5" - "@esbuild/linux-loong64": "npm:0.21.5" - "@esbuild/linux-mips64el": "npm:0.21.5" - "@esbuild/linux-ppc64": "npm:0.21.5" - "@esbuild/linux-riscv64": "npm:0.21.5" - "@esbuild/linux-s390x": "npm:0.21.5" - "@esbuild/linux-x64": "npm:0.21.5" - "@esbuild/netbsd-x64": "npm:0.21.5" - "@esbuild/openbsd-x64": "npm:0.21.5" - "@esbuild/sunos-x64": "npm:0.21.5" - "@esbuild/win32-arm64": "npm:0.21.5" - "@esbuild/win32-ia32": "npm:0.21.5" - "@esbuild/win32-x64": "npm:0.21.5" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10/d2ff2ca84d30cce8e871517374d6c2290835380dc7cd413b2d49189ed170d45e407be14de2cb4794cf76f75cf89955c4714726ebd3de7444b3046f5cab23ab6b - languageName: node - linkType: hard - -"esbuild@npm:~0.25.4": - version: 0.25.8 - resolution: "esbuild@npm:0.25.8" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.8" - "@esbuild/android-arm": "npm:0.25.8" - "@esbuild/android-arm64": "npm:0.25.8" - "@esbuild/android-x64": "npm:0.25.8" - "@esbuild/darwin-arm64": "npm:0.25.8" - "@esbuild/darwin-x64": "npm:0.25.8" - "@esbuild/freebsd-arm64": "npm:0.25.8" - "@esbuild/freebsd-x64": "npm:0.25.8" - "@esbuild/linux-arm": "npm:0.25.8" - "@esbuild/linux-arm64": "npm:0.25.8" - "@esbuild/linux-ia32": "npm:0.25.8" - "@esbuild/linux-loong64": "npm:0.25.8" - "@esbuild/linux-mips64el": "npm:0.25.8" - "@esbuild/linux-ppc64": "npm:0.25.8" - "@esbuild/linux-riscv64": "npm:0.25.8" - "@esbuild/linux-s390x": "npm:0.25.8" - "@esbuild/linux-x64": "npm:0.25.8" - "@esbuild/netbsd-arm64": "npm:0.25.8" - "@esbuild/netbsd-x64": "npm:0.25.8" - "@esbuild/openbsd-arm64": "npm:0.25.8" - "@esbuild/openbsd-x64": "npm:0.25.8" - "@esbuild/openharmony-arm64": "npm:0.25.8" - "@esbuild/sunos-x64": "npm:0.25.8" - "@esbuild/win32-arm64": "npm:0.25.8" - "@esbuild/win32-ia32": "npm:0.25.8" - "@esbuild/win32-x64": "npm:0.25.8" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10/9897411732768e652d90fa5dfadae965e8f420d24e5f23fa0604331a1441769e2c7ee4e41ca53e926f1fb51a53af52e01fc9070fdc1a4edf3e9ec9208ee41273 - languageName: node - linkType: hard - -"escalade@npm:3.2.0": - version: 3.2.0 - resolution: "escalade@npm:3.2.0" - checksum: 10/9d7169e3965b2f9ae46971afa392f6e5a25545ea30f2e2dd99c9b0a95a3f52b5653681a84f5b2911a413ddad2d7a93d3514165072f349b5ffc59c75a899970d6 - languageName: node - linkType: hard - -"escalade@npm:^3.1.1, escalade@npm:^3.1.2": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 10/a1e07fea2f15663c30e40b9193d658397846ffe28ce0a3e4da0d8e485fedfeca228ab846aee101a05015829adf39f9934ff45b2a3fca47bed37a29646bd05cd3 - languageName: node - linkType: hard - -"escape-html@npm:~1.0.3": - version: 1.0.3 - resolution: "escape-html@npm:1.0.3" - checksum: 10/6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 - languageName: node - linkType: hard - -"escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 10/98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10/6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 10/9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 - languageName: node - linkType: hard - -"escodegen@npm:1.8.x": - version: 1.8.1 - resolution: "escodegen@npm:1.8.1" - dependencies: - esprima: "npm:^2.7.1" - estraverse: "npm:^1.9.1" - esutils: "npm:^2.0.2" - optionator: "npm:^0.8.1" - source-map: "npm:~0.2.0" - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: ./bin/escodegen.js - esgenerate: ./bin/esgenerate.js - checksum: 10/f7c4f9639f4198848784548f268bb4bbd55f1a12344af79ea4a8978168c2009b0bfc1047dece1e0fdca4ff539fe9dffb0b4183ecab22ab91dea88328487da86a - languageName: node - linkType: hard - -"escodegen@npm:^2.0.0": - version: 2.0.0 - resolution: "escodegen@npm:2.0.0" - dependencies: - esprima: "npm:^4.0.1" - estraverse: "npm:^5.2.0" - esutils: "npm:^2.0.2" - optionator: "npm:^0.8.1" - source-map: "npm:~0.6.1" - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 10/0f7e404b19b14047dd12b62b2267ba9b68fff02be0d40d71fdcc27dfdd664720e1afae34680892b8a34cdd9280b7b4f81c02f7c7597a8eda0c6d2b4c2b7d07f0 - languageName: node - linkType: hard - -"eslint-config-next@npm:^15.0.3": - version: 15.0.3 - resolution: "eslint-config-next@npm:15.0.3" - dependencies: - "@next/eslint-plugin-next": "npm:15.0.3" - "@rushstack/eslint-patch": "npm:^1.10.3" - "@typescript-eslint/eslint-plugin": "npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" - "@typescript-eslint/parser": "npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" - eslint-import-resolver-node: "npm:^0.3.6" - eslint-import-resolver-typescript: "npm:^3.5.2" - eslint-plugin-import: "npm:^2.31.0" - eslint-plugin-jsx-a11y: "npm:^6.10.0" - eslint-plugin-react: "npm:^7.35.0" - eslint-plugin-react-hooks: "npm:^5.0.0" - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 - typescript: ">=3.3.1" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/5718afc3516ba162e2ff0d4d33df9c7957f3133c48c65ceef17e0a56b50403fa474635f4cdaff0b7c60423ce0884979be815fb45ee2d7246bd7af7fe39f1e915 - languageName: node - linkType: hard - -"eslint-config-prettier@npm:^9.1.0": - version: 9.1.0 - resolution: "eslint-config-prettier@npm:9.1.0" - peerDependencies: - eslint: ">=7.0.0" - bin: - eslint-config-prettier: bin/cli.js - checksum: 10/411e3b3b1c7aa04e3e0f20d561271b3b909014956c4dba51c878bf1a23dbb8c800a3be235c46c4732c70827276e540b6eed4636d9b09b444fd0a8e07f0fcd830 - languageName: node - linkType: hard - -"eslint-config-react-app@npm:^7.0.1": - version: 7.0.1 - resolution: "eslint-config-react-app@npm:7.0.1" - dependencies: - "@babel/core": "npm:^7.16.0" - "@babel/eslint-parser": "npm:^7.16.3" - "@rushstack/eslint-patch": "npm:^1.1.0" - "@typescript-eslint/eslint-plugin": "npm:^5.5.0" - "@typescript-eslint/parser": "npm:^5.5.0" - babel-preset-react-app: "npm:^10.0.1" - confusing-browser-globals: "npm:^1.0.11" - eslint-plugin-flowtype: "npm:^8.0.3" - eslint-plugin-import: "npm:^2.25.3" - eslint-plugin-jest: "npm:^25.3.0" - eslint-plugin-jsx-a11y: "npm:^6.5.1" - eslint-plugin-react: "npm:^7.27.1" - eslint-plugin-react-hooks: "npm:^4.3.0" - eslint-plugin-testing-library: "npm:^5.0.1" - peerDependencies: - eslint: ^8.0.0 - checksum: 10/8bd69354e6ea84eb66712f19b2a11a002bc257d0685f686a985abdc2825499eff5e0bbbc77c0c68b967ad47808904f578bed735c03e28c312f8a469556e8233d - languageName: node - linkType: hard - -"eslint-import-resolver-node@npm:^0.3.6, eslint-import-resolver-node@npm:^0.3.9": - version: 0.3.9 - resolution: "eslint-import-resolver-node@npm:0.3.9" - dependencies: - debug: "npm:^3.2.7" - is-core-module: "npm:^2.13.0" - resolve: "npm:^1.22.4" - checksum: 10/d52e08e1d96cf630957272e4f2644dcfb531e49dcfd1edd2e07e43369eb2ec7a7d4423d417beee613201206ff2efa4eb9a582b5825ee28802fc7c71fcd53ca83 - languageName: node - linkType: hard - -"eslint-import-resolver-typescript@npm:^3.5.2, eslint-import-resolver-typescript@npm:^3.6.3": - version: 3.6.3 - resolution: "eslint-import-resolver-typescript@npm:3.6.3" - dependencies: - "@nolyfill/is-core-module": "npm:1.0.39" - debug: "npm:^4.3.5" - enhanced-resolve: "npm:^5.15.0" - eslint-module-utils: "npm:^2.8.1" - fast-glob: "npm:^3.3.2" - get-tsconfig: "npm:^4.7.5" - is-bun-module: "npm:^1.0.2" - is-glob: "npm:^4.0.3" - peerDependencies: - eslint: "*" - eslint-plugin-import: "*" - eslint-plugin-import-x: "*" - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - checksum: 10/5f9956dbbd0becc3d6c6cb945dad0e5e6f529cfd0f488d5688f3c59840cd7f4a44ab6aee0f54b5c4188134dab9a01cb63c1201767bde7fc330b7c1a14747f8ac - languageName: node - linkType: hard - -"eslint-module-utils@npm:^2.12.0, eslint-module-utils@npm:^2.8.1": - version: 2.12.0 - resolution: "eslint-module-utils@npm:2.12.0" - dependencies: - debug: "npm:^3.2.7" - peerDependenciesMeta: - eslint: - optional: true - checksum: 10/dd27791147eca17366afcb83f47d6825b6ce164abb256681e5de4ec1d7e87d8605641eb869298a0dbc70665e2446dbcc2f40d3e1631a9475dd64dd23d4ca5dee - languageName: node - linkType: hard - -"eslint-plugin-es@npm:^3.0.0": - version: 3.0.1 - resolution: "eslint-plugin-es@npm:3.0.1" - dependencies: - eslint-utils: "npm:^2.0.0" - regexpp: "npm:^3.0.0" - peerDependencies: - eslint: ">=4.19.1" - checksum: 10/9814e6305183edfdff7d99cbc0f95f0aed1446045cbd1d4f28e7be0903d0013880f0aaf04486a27de96bfb2f5a746bea97cbb238f9b0035cb378d48d179a0a1b - languageName: node - linkType: hard - -"eslint-plugin-flowtype@npm:^8.0.3": - version: 8.0.3 - resolution: "eslint-plugin-flowtype@npm:8.0.3" - dependencies: - lodash: "npm:^4.17.21" - string-natural-compare: "npm:^3.0.1" - peerDependencies: - "@babel/plugin-syntax-flow": ^7.14.5 - "@babel/plugin-transform-react-jsx": ^7.14.9 - eslint: ^8.1.0 - checksum: 10/62a90c57a452cf5a3c510608b3358212b417022a592d367358339d5bbbe07d2b2cb3888745ee211a75e805898c82818fbc990a5f2aff474bbf5bdaaf1618d7c5 - languageName: node - linkType: hard - -"eslint-plugin-import@npm:^2.25.3, eslint-plugin-import@npm:^2.31.0": - version: 2.31.0 - resolution: "eslint-plugin-import@npm:2.31.0" - dependencies: - "@rtsao/scc": "npm:^1.1.0" - array-includes: "npm:^3.1.8" - array.prototype.findlastindex: "npm:^1.2.5" - array.prototype.flat: "npm:^1.3.2" - array.prototype.flatmap: "npm:^1.3.2" - debug: "npm:^3.2.7" - doctrine: "npm:^2.1.0" - eslint-import-resolver-node: "npm:^0.3.9" - eslint-module-utils: "npm:^2.12.0" - hasown: "npm:^2.0.2" - is-core-module: "npm:^2.15.1" - is-glob: "npm:^4.0.3" - minimatch: "npm:^3.1.2" - object.fromentries: "npm:^2.0.8" - object.groupby: "npm:^1.0.3" - object.values: "npm:^1.2.0" - semver: "npm:^6.3.1" - string.prototype.trimend: "npm:^1.0.8" - tsconfig-paths: "npm:^3.15.0" - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - checksum: 10/6b76bd009ac2db0615d9019699d18e2a51a86cb8c1d0855a35fb1b418be23b40239e6debdc6e8c92c59f1468ed0ea8d7b85c817117a113d5cc225be8a02ad31c - languageName: node - linkType: hard - -"eslint-plugin-jest@npm:^25.3.0": - version: 25.7.0 - resolution: "eslint-plugin-jest@npm:25.7.0" - dependencies: - "@typescript-eslint/experimental-utils": "npm:^5.0.0" - peerDependencies: - "@typescript-eslint/eslint-plugin": ^4.0.0 || ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - "@typescript-eslint/eslint-plugin": - optional: true - jest: - optional: true - checksum: 10/7c358f4503fff7091ddaa8986aba7f4846acc36e7478923cb43fc2cc2ae7be6f49cb1aed222e58d0493154a5e35c4e60111627bf58e72e256831bd2d2c6fd90f - languageName: node - linkType: hard - -"eslint-plugin-jsx-a11y@npm:^6.10.0, eslint-plugin-jsx-a11y@npm:^6.5.1": - version: 6.10.2 - resolution: "eslint-plugin-jsx-a11y@npm:6.10.2" - dependencies: - aria-query: "npm:^5.3.2" - array-includes: "npm:^3.1.8" - array.prototype.flatmap: "npm:^1.3.2" - ast-types-flow: "npm:^0.0.8" - axe-core: "npm:^4.10.0" - axobject-query: "npm:^4.1.0" - damerau-levenshtein: "npm:^1.0.8" - emoji-regex: "npm:^9.2.2" - hasown: "npm:^2.0.2" - jsx-ast-utils: "npm:^3.3.5" - language-tags: "npm:^1.0.9" - minimatch: "npm:^3.1.2" - object.fromentries: "npm:^2.0.8" - safe-regex-test: "npm:^1.0.3" - string.prototype.includes: "npm:^2.0.1" - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - checksum: 10/388550798548d911e2286d530a29153ca00434a06fcfc0e31e0dda46a5e7960005e532fb29ce1ccbf1e394a3af3e5cf70c47ca43778861eacc5e3ed799adb79c - languageName: node - linkType: hard - -"eslint-plugin-node@npm:^11.1.0": - version: 11.1.0 - resolution: "eslint-plugin-node@npm:11.1.0" - dependencies: - eslint-plugin-es: "npm:^3.0.0" - eslint-utils: "npm:^2.0.0" - ignore: "npm:^5.1.1" - minimatch: "npm:^3.0.4" - resolve: "npm:^1.10.1" - semver: "npm:^6.1.0" - peerDependencies: - eslint: ">=5.16.0" - checksum: 10/bda540f390a84d835989f21f56743f3aa8f41fd9b53359d635c116632c86af92d70d8e6449ddd18860e6241f9cef04fc90c37eb192a9047c3c3a46de6145c30c - languageName: node - linkType: hard - -"eslint-plugin-prettier@npm:^5.2.1": - version: 5.2.1 - resolution: "eslint-plugin-prettier@npm:5.2.1" - dependencies: - prettier-linter-helpers: "npm:^1.0.0" - synckit: "npm:^0.9.1" - peerDependencies: - "@types/eslint": ">=8.0.0" - eslint: ">=8.0.0" - eslint-config-prettier: "*" - prettier: ">=3.0.0" - peerDependenciesMeta: - "@types/eslint": - optional: true - eslint-config-prettier: - optional: true - checksum: 10/10ddf68215237e327af09a47adab4c63f3885fda4fb28c4c42d1fc5f47d8a0cc45df6484799360ff1417a0aa3c77c3aaac49d7e9dfd145557b17e2d7ecc2a27c - languageName: node - linkType: hard - -"eslint-plugin-promise@npm:^6.6.0": - version: 6.6.0 - resolution: "eslint-plugin-promise@npm:6.6.0" - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10/c2b5604efd7e1390c132fcbf06cb2f072c956ffa65c14a991cb74ba1e2327357797239cb5b9b292d5e4010301bb897bd85a6273d7873fb157edc46aa2d95cbd9 - languageName: node - linkType: hard - -"eslint-plugin-react-hooks@npm:^4.3.0, eslint-plugin-react-hooks@npm:^4.6.2": - version: 4.6.2 - resolution: "eslint-plugin-react-hooks@npm:4.6.2" - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 10/5a0680941f34e70cf505bcb6082df31a3e445d193ee95a88ff3483041eb944f4cefdaf7e81b0eb1feb4eeceee8c7c6ddb8a2a6e8c4c0388514a42e16ac7b7a69 - languageName: node - linkType: hard - -"eslint-plugin-react-hooks@npm:^5.0.0": - version: 5.0.0 - resolution: "eslint-plugin-react-hooks@npm:5.0.0" - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - checksum: 10/b762789832806b6981e2d910994e72aa7a85136fe0880572334b26cf1274ba37bd3b1365e77d2c2f92465337c4a65c84ef647bc499d33b86fc1110f2df7ef1bb - languageName: node - linkType: hard - -"eslint-plugin-react@npm:^7.27.1, eslint-plugin-react@npm:^7.35.0, eslint-plugin-react@npm:^7.37.2": - version: 7.37.2 - resolution: "eslint-plugin-react@npm:7.37.2" - dependencies: - array-includes: "npm:^3.1.8" - array.prototype.findlast: "npm:^1.2.5" - array.prototype.flatmap: "npm:^1.3.2" - array.prototype.tosorted: "npm:^1.1.4" - doctrine: "npm:^2.1.0" - es-iterator-helpers: "npm:^1.1.0" - estraverse: "npm:^5.3.0" - hasown: "npm:^2.0.2" - jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" - minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.8" - object.fromentries: "npm:^2.0.8" - object.values: "npm:^1.2.0" - prop-types: "npm:^15.8.1" - resolve: "npm:^2.0.0-next.5" - semver: "npm:^6.3.1" - string.prototype.matchall: "npm:^4.0.11" - string.prototype.repeat: "npm:^1.0.0" - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 10/df2f7ab198018d3378f305a8a5ceceebc9bd31f019fc7567a2ef9c77789dc8a6a2c3c3957f8b0805f26c11c02f9f86c972e02cd0eda12f4d0370526c11f8a9a3 - languageName: node - linkType: hard - -"eslint-plugin-security@npm:^3.0.1": - version: 3.0.1 - resolution: "eslint-plugin-security@npm:3.0.1" - dependencies: - safe-regex: "npm:^2.1.1" - checksum: 10/5a7eb9a9d499addad93e9a650f503b2bdc23e8ab8222a0330e216726ffcc0e154405d23c8c523ff987e894cb9c8358da883c1dd22e21423e4368cd13de14930c - languageName: node - linkType: hard - -"eslint-plugin-testing-library@npm:^5.0.1": - version: 5.11.0 - resolution: "eslint-plugin-testing-library@npm:5.11.0" - dependencies: - "@typescript-eslint/utils": "npm:^5.58.0" - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - checksum: 10/93e6aefd764141716893ac9c8750c0a9b2c1fd9bdcf2dbed4eb2617c50afc9ee70b98f8dfd7bc16f1aa8d517bd9b3a52a9f01b25cffc71c90c03a1dc9e07ca22 - languageName: node - linkType: hard - -"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^4.1.1" - checksum: 10/c541ef384c92eb5c999b7d3443d80195fcafb3da335500946f6db76539b87d5826c8f2e1d23bf6afc3154ba8cd7c8e566f8dc00f1eea25fdf3afc8fb9c87b238 - languageName: node - linkType: hard - -"eslint-scope@npm:^7.2.0": - version: 7.2.0 - resolution: "eslint-scope@npm:7.2.0" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^5.2.0" - checksum: 10/94d8942840b35bf5e6559bd0f0a8b10610d65b1e44e41295e66ed1fe82f83bc51756e7af607d611b75f435adf821122bd901aa565701596ca1a628db41c0cd87 - languageName: node - linkType: hard - -"eslint-scope@npm:^8.2.0": - version: 8.2.0 - resolution: "eslint-scope@npm:8.2.0" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^5.2.0" - checksum: 10/cd9ab60d5a68f3a0fcac04d1cff5a7383d0f331964d5f1c446259123caec5b3ccc542284d07846e4f4d1389da77750821cc9a6e1ce18558c674977351666f9a6 - languageName: node - linkType: hard - -"eslint-utils@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-utils@npm:2.1.0" - dependencies: - eslint-visitor-keys: "npm:^1.1.0" - checksum: 10/a7e43a5154a16a90c021cabeb160c3668cccbcf6474ccb2a7d7762698582398f3b938c5330909b858ef7c21182edfc9786dbf89ed7b294f51b7659a378bf7cec - languageName: node - linkType: hard - -"eslint-utils@npm:^3.0.0": - version: 3.0.0 - resolution: "eslint-utils@npm:3.0.0" - dependencies: - eslint-visitor-keys: "npm:^2.0.0" - peerDependencies: - eslint: ">=5" - checksum: 10/7675260a6b220c70f13e4cdbf077e93cad0dfb388429a27d6c0b584b2b20dca24594508e8bdb00a460a5764bd364a5018e20c2b8b1d70f82bcc3fdc30692a4d2 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^1.1.0": - version: 1.3.0 - resolution: "eslint-visitor-keys@npm:1.3.0" - checksum: 10/595ab230e0fcb52f86ba0986a9a473b9fcae120f3729b43f1157f88f27f8addb1e545c4e3d444185f2980e281ca15be5ada6f65b4599eec227cf30e41233b762 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^2.0.0, eslint-visitor-keys@npm:^2.1.0": - version: 2.1.0 - resolution: "eslint-visitor-keys@npm:2.1.0" - checksum: 10/db4547eef5039122d518fa307e938ceb8589da5f6e8f5222efaf14dd62f748ce82e2d2becd3ff9412a50350b726bda95dbea8515a471074547daefa58aee8735 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 10/3f357c554a9ea794b094a09bd4187e5eacd1bc0d0653c3adeb87962c548e6a1ab8f982b86963ae1337f5d976004146536dcee5d0e2806665b193fbfbf1a9231b - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-visitor-keys@npm:4.2.0" - checksum: 10/9651b3356b01760e586b4c631c5268c0e1a85236e3292bf754f0472f465bf9a856c0ddc261fceace155334118c0151778effafbab981413dbf9288349343fa25 - languageName: node - linkType: hard - -"eslint-webpack-plugin@npm:^3.1.1": - version: 3.2.0 - resolution: "eslint-webpack-plugin@npm:3.2.0" - dependencies: - "@types/eslint": "npm:^7.29.0 || ^8.4.1" - jest-worker: "npm:^28.0.2" - micromatch: "npm:^4.0.5" - normalize-path: "npm:^3.0.0" - schema-utils: "npm:^4.0.0" - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - webpack: ^5.0.0 - checksum: 10/3f78c2fb3c363bfc7284664686a1a445d9266bdc27b5a28a4f0ce0cefe7f769de5f6d9d1c5e2e1c08dc3cabca472afdaf32cff6fc260f97c39c08ec9a5180e84 - languageName: node - linkType: hard - -"eslint@npm:^8.3.0": - version: 8.43.0 - resolution: "eslint@npm:8.43.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.4.0" - "@eslint/eslintrc": "npm:^2.0.3" - "@eslint/js": "npm:8.43.0" - "@humanwhocodes/config-array": "npm:^0.11.10" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@nodelib/fs.walk": "npm:^1.2.8" - ajv: "npm:^6.10.0" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.2" - debug: "npm:^4.3.2" - doctrine: "npm:^3.0.0" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^7.2.0" - eslint-visitor-keys: "npm:^3.4.1" - espree: "npm:^9.5.2" - esquery: "npm:^1.4.2" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^6.0.1" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - globals: "npm:^13.19.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.0.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" - js-yaml: "npm:^4.1.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - levn: "npm:^0.4.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.1" - strip-ansi: "npm:^6.0.1" - strip-json-comments: "npm:^3.1.0" - text-table: "npm:^0.2.0" - bin: - eslint: bin/eslint.js - checksum: 10/192f74a53988677586b23b1f0e55777fff77e32d25a1ce4c6bd0ebafe889032176acdb72cd0f60c13e68688b315fa01ee6923512db060f1cbbc42fb93632f1e8 - languageName: node - linkType: hard - -"eslint@npm:^9.15.0": - version: 9.15.0 - resolution: "eslint@npm:9.15.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.12.1" - "@eslint/config-array": "npm:^0.19.0" - "@eslint/core": "npm:^0.9.0" - "@eslint/eslintrc": "npm:^3.2.0" - "@eslint/js": "npm:9.15.0" - "@eslint/plugin-kit": "npm:^0.2.3" - "@humanfs/node": "npm:^0.16.6" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@humanwhocodes/retry": "npm:^0.4.1" - "@types/estree": "npm:^1.0.6" - "@types/json-schema": "npm:^7.0.15" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.5" - debug: "npm:^4.3.2" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^8.2.0" - eslint-visitor-keys: "npm:^4.2.0" - espree: "npm:^10.3.0" - esquery: "npm:^1.5.0" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^8.0.0" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - peerDependencies: - jiti: "*" - peerDependenciesMeta: - jiti: - optional: true - bin: - eslint: bin/eslint.js - checksum: 10/7ac1a2e6070bae64b2b0588fabad528cd3e478a6ba5e9f8185d8d9f2dce17a36630bd019b5d32d1052ea177444ab9c83f3c08baa76121c13e1ed0584ef158956 - languageName: node - linkType: hard - -"esm-env@npm:^1.2.1": - version: 1.2.2 - resolution: "esm-env@npm:1.2.2" - checksum: 10/caf5f3cc2bc7107494585b4e38835787f48ef77b670aeb2d765a5b6b64c41102d20bbdd34bda32474291b6b8d819d4d02ce92570a0886baca6cef70f5fe689f3 - languageName: node - linkType: hard - -"espree@npm:^10.0.1, espree@npm:^10.3.0": - version: 10.3.0 - resolution: "espree@npm:10.3.0" - dependencies: - acorn: "npm:^8.14.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10/3412d44d4204c9e29d6b5dd0277400cfa0cd68495dc09eae1b9ce79d0c8985c1c5cc09cb9ba32a1cd963f48a49b0c46bdb7736afe395a300aa6bb1c0d86837e8 - languageName: node - linkType: hard - -"espree@npm:^9.5.2": - version: 9.5.2 - resolution: "espree@npm:9.5.2" - dependencies: - acorn: "npm:^8.8.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10/2c9d0fec9ac1230856baec338bd238ca9a69b451ee451f0da25e07d356e1bdef45a2ae5f8c374f492f4bb568d17fc7c998ef44f04a2e9b6a11fc8c194c677ba4 - languageName: node - linkType: hard - -"esprima@npm:2.7.x, esprima@npm:^2.7.1": - version: 2.7.3 - resolution: "esprima@npm:2.7.3" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 10/7508285b882012deea8f68dff4b759f9a17e9317ad8c7449969feb1e2efc083fa4a0012139a4722f1e96da81ece0ac319756c8e79a01e5ddb4b36ae483464d3f - languageName: node - linkType: hard - -"esprima@npm:^4.0.0, esprima@npm:^4.0.1": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 10/f1d3c622ad992421362294f7acf866aa9409fbad4eb2e8fa230bd33944ce371d32279667b242d8b8907ec2b6ad7353a717f3c0e60e748873a34a7905174bc0eb - languageName: node - linkType: hard - -"esquery@npm:^1.4.2, esquery@npm:^1.5.0": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" - dependencies: - estraverse: "npm:^5.1.0" - checksum: 10/c587fb8ec9ed83f2b1bc97cf2f6854cc30bf784a79d62ba08c6e358bf22280d69aee12827521cf38e69ae9761d23fb7fde593ce315610f85655c139d99b05e5a - languageName: node - linkType: hard - -"esrap@npm:^1.4.6": - version: 1.4.6 - resolution: "esrap@npm:1.4.6" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.4.15" - checksum: 10/0fc113a930512af470cf9ed2d49950f3b4b3456ab1f3cce56f69322a9815fbe1fbe33713dd5bafff6ed957767afce49d427043d680768727c6ca1e2c11692e5f - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: "npm:^5.2.0" - checksum: 10/44ffcd89e714ea6b30143e7f119b104fc4d75e77ee913f34d59076b40ef2d21967f84e019f84e1fd0465b42cdbf725db449f232b5e47f29df29ed76194db8e16 - languageName: node - linkType: hard - -"estraverse@npm:^1.9.1": - version: 1.9.3 - resolution: "estraverse@npm:1.9.3" - checksum: 10/682a7e2fda17fd3e892b78a8347d055f923465598f5d713354aefd53a3348b2a1a6ee8df41031d8f5ad9802cfd27c29caac84c2f58ce3b2df659d43d668c870b - languageName: node - linkType: hard - -"estraverse@npm:^4.1.1": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: 10/3f67ad02b6dbfaddd9ea459cf2b6ef4ecff9a6082a7af9d22e445b9abc082ad9ca47e1825557b293fcdae477f4714e561123e30bb6a5b2f184fb2bad4a9497eb - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 10/37cbe6e9a68014d34dbdc039f90d0baf72436809d02edffcc06ba3c2a12eb298048f877511353b130153e532aac8d68ba78430c0dd2f44806ebc7c014b01585e - languageName: node - linkType: hard - -"estree-util-is-identifier-name@npm:^3.0.0": - version: 3.0.0 - resolution: "estree-util-is-identifier-name@npm:3.0.0" - checksum: 10/cdc9187614fdb269d714eddfdf72c270a79daa9ed51e259bb78527983be6dcc68da6a914ccc41175b662194c67fbd2a1cd262f85fac1eef7111cfddfaf6f77f8 - languageName: node - linkType: hard - -"estree-walker@npm:^1.0.1": - version: 1.0.1 - resolution: "estree-walker@npm:1.0.1" - checksum: 10/1cf11a0aff7613aa765dc535ed1d83e2a1986207d2353f4795df309a2c55726de3ca4948df635c09969a739dc59e8e2d69f88d3b3d2c6dfc5701257aafd1d11b - languageName: node - linkType: hard - -"estree-walker@npm:^2.0.2": - version: 2.0.2 - resolution: "estree-walker@npm:2.0.2" - checksum: 10/b02109c5d46bc2ed47de4990eef770f7457b1159a229f0999a09224d2b85ffeed2d7679cffcff90aeb4448e94b0168feb5265b209cdec29aad50a3d6e93d21e2 - languageName: node - linkType: hard - -"estree-walker@npm:^3.0.3": - version: 3.0.3 - resolution: "estree-walker@npm:3.0.3" - dependencies: - "@types/estree": "npm:^1.0.0" - checksum: 10/a65728d5727b71de172c5df323385755a16c0fdab8234dc756c3854cfee343261ddfbb72a809a5660fac8c75d960bb3e21aa898c2d7e9b19bb298482ca58a3af - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 10/b23acd24791db11d8f65be5ea58fd9a6ce2df5120ae2da65c16cfc5331ff59d5ac4ef50af66cd4bde238881503ec839928a0135b99a036a9cdfa22d17fd56cdb - languageName: node - linkType: hard - -"etag@npm:~1.8.1": - version: 1.8.1 - resolution: "etag@npm:1.8.1" - checksum: 10/571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff - languageName: node - linkType: hard - -"eth-block-tracker@npm:^7.1.0": - version: 7.1.0 - resolution: "eth-block-tracker@npm:7.1.0" - dependencies: - "@metamask/eth-json-rpc-provider": "npm:^1.0.0" - "@metamask/safe-event-emitter": "npm:^3.0.0" - "@metamask/utils": "npm:^5.0.1" - json-rpc-random-id: "npm:^1.0.1" - pify: "npm:^3.0.0" - checksum: 10/b001ecb126e949a9ff19950596d5180b2f1bc5504e3dec0c01b3417e8ad190f4a53dfc61be901b72ab6dd558d1d711b73eca560bc8a605d0348eef9f501defab - languageName: node - linkType: hard - -"eth-json-rpc-filters@npm:^6.0.0": - version: 6.0.1 - resolution: "eth-json-rpc-filters@npm:6.0.1" - dependencies: - "@metamask/safe-event-emitter": "npm:^3.0.0" - async-mutex: "npm:^0.2.6" - eth-query: "npm:^2.1.2" - json-rpc-engine: "npm:^6.1.0" - pify: "npm:^5.0.0" - checksum: 10/d1fa8bb21da07c2f5d37c1e6053d499b272b4f49542077efc6b05eebe49affa9df7221c8c2439c4e33caa3f4ccb35240a6105abc83b83375dae03c0de53113a7 - languageName: node - linkType: hard - -"eth-query@npm:^2.1.2": - version: 2.1.2 - resolution: "eth-query@npm:2.1.2" - dependencies: - json-rpc-random-id: "npm:^1.0.0" - xtend: "npm:^4.0.1" - checksum: 10/af4f3575b8315f8156a83a24e850881053748aca97e4aee12dd6645ab56f0985c7000a5c45ccf315702f3e532f0c6464e03f4aba294c658dee89f5e5d1b86702 - languageName: node - linkType: hard - -"eth-rpc-errors@npm:^4.0.2, eth-rpc-errors@npm:^4.0.3": - version: 4.0.3 - resolution: "eth-rpc-errors@npm:4.0.3" - dependencies: - fast-safe-stringify: "npm:^2.0.6" - checksum: 10/47ce14170eabaee51ab1cc7e643bb3ef96ee6b15c6404806aedcd51750e00ae0b1a12c37785b180679b8d452b6dd44a0240bb018d01fa73efc85fcfa808b35a7 - languageName: node - linkType: hard - -"ethereum-bloom-filters@npm:^1.0.6": - version: 1.0.10 - resolution: "ethereum-bloom-filters@npm:1.0.10" - dependencies: - js-sha3: "npm:^0.8.0" - checksum: 10/dc4191c5d810db864ace106886f340b541bf03f1ad3249459ac630cab9c191f1e45c03e935887cca903cca884326e3ac97acfef0a083c7e1a004108f5991f9ba - languageName: node - linkType: hard - -"ethereum-cryptography@npm:^0.1.3": - version: 0.1.3 - resolution: "ethereum-cryptography@npm:0.1.3" - dependencies: - "@types/pbkdf2": "npm:^3.0.0" - "@types/secp256k1": "npm:^4.0.1" - blakejs: "npm:^1.1.0" - browserify-aes: "npm:^1.2.0" - bs58check: "npm:^2.1.2" - create-hash: "npm:^1.2.0" - create-hmac: "npm:^1.1.7" - hash.js: "npm:^1.1.7" - keccak: "npm:^3.0.0" - pbkdf2: "npm:^3.0.17" - randombytes: "npm:^2.1.0" - safe-buffer: "npm:^5.1.2" - scrypt-js: "npm:^3.0.0" - secp256k1: "npm:^4.0.1" - setimmediate: "npm:^1.0.5" - checksum: 10/975e476782746acd97d5b37366801ae622a52fb31e5d83f600804be230a61ef7b9d289dcecd9c308fb441967caf3a6e3768dd7c8add6441fcc60c398175d5a96 - languageName: node - linkType: hard - -"ethereum-cryptography@npm:^1.0.3": - version: 1.2.0 - resolution: "ethereum-cryptography@npm:1.2.0" - dependencies: - "@noble/hashes": "npm:1.2.0" - "@noble/secp256k1": "npm:1.7.1" - "@scure/bip32": "npm:1.1.5" - "@scure/bip39": "npm:1.1.1" - checksum: 10/e8b2ab91e0237ed83a6e6ab1aa2a61ee081dea137ac994c7daa935b0b620e866f70e2ac7eb2fb8db2dec044fe22283d2bf940598417e4dccd15a2b704a817a1b - languageName: node - linkType: hard - -"ethereum-cryptography@npm:^2.0.0, ethereum-cryptography@npm:^2.1.3, ethereum-cryptography@npm:^2.2.1": - version: 2.2.1 - resolution: "ethereum-cryptography@npm:2.2.1" - dependencies: - "@noble/curves": "npm:1.4.2" - "@noble/hashes": "npm:1.4.0" - "@scure/bip32": "npm:1.4.0" - "@scure/bip39": "npm:1.3.0" - checksum: 10/ab123bbfe843500ac2d645ce9edc4bc814962ffb598db6bf8bf01fbecac656e6c81ff4cf2472f1734844bbcbad2bf658d8b699cb7248d768e0f06ae13ecf43b8 - languageName: node - linkType: hard - -"ethereumjs-abi@npm:^0.6.5": - version: 0.6.8 - resolution: "ethereumjs-abi@npm:0.6.8" - dependencies: - bn.js: "npm:^4.11.8" - ethereumjs-util: "npm:^6.0.0" - checksum: 10/d4633ca30048b53c0f900ba5d7d6013ca228822055fbd93f975befc41f5c3054e0fffc27562d78050f164170e546af66c20e9ca1d35e67ea861df07d59a65a91 - languageName: node - linkType: hard - -"ethereumjs-util@npm:^6.0.0": - version: 6.2.1 - resolution: "ethereumjs-util@npm:6.2.1" - dependencies: - "@types/bn.js": "npm:^4.11.3" - bn.js: "npm:^4.11.0" - create-hash: "npm:^1.1.2" - elliptic: "npm:^6.5.2" - ethereum-cryptography: "npm:^0.1.3" - ethjs-util: "npm:0.1.6" - rlp: "npm:^2.2.3" - checksum: 10/dedc8a623e21d1864b09c47f28851fc0fca6233cdefa4755a308507822ce75c893bbb2c3ba422109d1247986ec757941718f06574437e41b0d68604108b03fd0 - languageName: node - linkType: hard - -"ethereumjs-util@npm:^7.0.3, ethereumjs-util@npm:^7.1.0, ethereumjs-util@npm:^7.1.5": - version: 7.1.5 - resolution: "ethereumjs-util@npm:7.1.5" - dependencies: - "@types/bn.js": "npm:^5.1.0" - bn.js: "npm:^5.1.2" - create-hash: "npm:^1.1.2" - ethereum-cryptography: "npm:^0.1.3" - rlp: "npm:^2.2.4" - checksum: 10/f28fc1ebb8f35bf9e418f76f51be737d94d603b912c3e014c4e87cd45ccd1b10bdfef764c8f152574b57e9faa260a18773cbc110f9e0a754d6b3730699e54dc9 - languageName: node - linkType: hard - -"ethers@npm:^5.6.1, ethers@npm:^5.7.0, ethers@npm:~5.7.0": - version: 5.7.2 - resolution: "ethers@npm:5.7.2" - dependencies: - "@ethersproject/abi": "npm:5.7.0" - "@ethersproject/abstract-provider": "npm:5.7.0" - "@ethersproject/abstract-signer": "npm:5.7.0" - "@ethersproject/address": "npm:5.7.0" - "@ethersproject/base64": "npm:5.7.0" - "@ethersproject/basex": "npm:5.7.0" - "@ethersproject/bignumber": "npm:5.7.0" - "@ethersproject/bytes": "npm:5.7.0" - "@ethersproject/constants": "npm:5.7.0" - "@ethersproject/contracts": "npm:5.7.0" - "@ethersproject/hash": "npm:5.7.0" - "@ethersproject/hdnode": "npm:5.7.0" - "@ethersproject/json-wallets": "npm:5.7.0" - "@ethersproject/keccak256": "npm:5.7.0" - "@ethersproject/logger": "npm:5.7.0" - "@ethersproject/networks": "npm:5.7.1" - "@ethersproject/pbkdf2": "npm:5.7.0" - "@ethersproject/properties": "npm:5.7.0" - "@ethersproject/providers": "npm:5.7.2" - "@ethersproject/random": "npm:5.7.0" - "@ethersproject/rlp": "npm:5.7.0" - "@ethersproject/sha2": "npm:5.7.0" - "@ethersproject/signing-key": "npm:5.7.0" - "@ethersproject/solidity": "npm:5.7.0" - "@ethersproject/strings": "npm:5.7.0" - "@ethersproject/transactions": "npm:5.7.0" - "@ethersproject/units": "npm:5.7.0" - "@ethersproject/wallet": "npm:5.7.0" - "@ethersproject/web": "npm:5.7.1" - "@ethersproject/wordlists": "npm:5.7.0" - checksum: 10/227dfa88a2547c799c0c3c9e92e5e246dd11342f4b495198b3ae7c942d5bf81d3970fcef3fbac974a9125d62939b2d94f3c0458464e702209b839a8e6e615028 - languageName: node - linkType: hard - -"ethers@npm:^5.8.0": - version: 5.8.0 - resolution: "ethers@npm:5.8.0" - dependencies: - "@ethersproject/abi": "npm:5.8.0" - "@ethersproject/abstract-provider": "npm:5.8.0" - "@ethersproject/abstract-signer": "npm:5.8.0" - "@ethersproject/address": "npm:5.8.0" - "@ethersproject/base64": "npm:5.8.0" - "@ethersproject/basex": "npm:5.8.0" - "@ethersproject/bignumber": "npm:5.8.0" - "@ethersproject/bytes": "npm:5.8.0" - "@ethersproject/constants": "npm:5.8.0" - "@ethersproject/contracts": "npm:5.8.0" - "@ethersproject/hash": "npm:5.8.0" - "@ethersproject/hdnode": "npm:5.8.0" - "@ethersproject/json-wallets": "npm:5.8.0" - "@ethersproject/keccak256": "npm:5.8.0" - "@ethersproject/logger": "npm:5.8.0" - "@ethersproject/networks": "npm:5.8.0" - "@ethersproject/pbkdf2": "npm:5.8.0" - "@ethersproject/properties": "npm:5.8.0" - "@ethersproject/providers": "npm:5.8.0" - "@ethersproject/random": "npm:5.8.0" - "@ethersproject/rlp": "npm:5.8.0" - "@ethersproject/sha2": "npm:5.8.0" - "@ethersproject/signing-key": "npm:5.8.0" - "@ethersproject/solidity": "npm:5.8.0" - "@ethersproject/strings": "npm:5.8.0" - "@ethersproject/transactions": "npm:5.8.0" - "@ethersproject/units": "npm:5.8.0" - "@ethersproject/wallet": "npm:5.8.0" - "@ethersproject/web": "npm:5.8.0" - "@ethersproject/wordlists": "npm:5.8.0" - checksum: 10/4a78952fe660ab9414bd2907d7db34f12b67c4c3f3cbfc2dfab5ea1862d70400b731ef847b708665d4f42f83dafacb2045f14f66980c34fac0418dbc3bfc016e - languageName: node - linkType: hard - -"ethers@npm:^6.15.0": - version: 6.15.0 - resolution: "ethers@npm:6.15.0" - dependencies: - "@adraffy/ens-normalize": "npm:1.10.1" - "@noble/curves": "npm:1.2.0" - "@noble/hashes": "npm:1.3.2" - "@types/node": "npm:22.7.5" - aes-js: "npm:4.0.0-beta.5" - tslib: "npm:2.7.0" - ws: "npm:8.17.1" - checksum: 10/21ab1d31e1b89f62dce5611c3686e4b81e000107aff8dccdbeaa1eac2da43459d5b590efa127470208729ca99a3b5757dd690943cf60745c2393d13db6a3218a - languageName: node - linkType: hard - -"ethjs-unit@npm:0.1.6": - version: 0.1.6 - resolution: "ethjs-unit@npm:0.1.6" - dependencies: - bn.js: "npm:4.11.6" - number-to-bn: "npm:1.7.0" - checksum: 10/35086cb671806992ec36d5dd43ab67e68ad7a9237e42c0e963f9081c88e40147cda86c1a258b0a3180bf2b7bc1960e607c5bcaefdb2196e0f3564acf73276189 - languageName: node - linkType: hard - -"ethjs-util@npm:0.1.6": - version: 0.1.6 - resolution: "ethjs-util@npm:0.1.6" - dependencies: - is-hex-prefixed: "npm:1.0.0" - strip-hex-prefix: "npm:1.0.0" - checksum: 10/02e1d37f743a78742651a11be35461dfe8ed653f113d630435aada8036e1e199691c2cfffbbf1e800bfdeb14bb34c7ed69fab5d3c727058c1daf3effc6bf6f69 - languageName: node - linkType: hard - -"event-target-shim@npm:^5.0.0": - version: 5.0.1 - resolution: "event-target-shim@npm:5.0.1" - checksum: 10/49ff46c3a7facbad3decb31f597063e761785d7fdb3920d4989d7b08c97a61c2f51183e2f3a03130c9088df88d4b489b1b79ab632219901f184f85158508f4c8 - languageName: node - linkType: hard - -"eventemitter2@npm:^6.4.9": - version: 6.4.9 - resolution: "eventemitter2@npm:6.4.9" - checksum: 10/b829b1c6b11e15926b635092b5ad62b4463d1c928859831dcae606e988cf41893059e3541f5a8209d21d2f15314422ddd4d84d20830b4bf44978608d15b06b08 - languageName: node - linkType: hard - -"eventemitter3@npm:5.0.1, eventemitter3@npm:^5.0.1": - version: 5.0.1 - resolution: "eventemitter3@npm:5.0.1" - checksum: 10/ac6423ec31124629c84c7077eed1e6987f6d66c31cf43c6fcbf6c87791d56317ce808d9ead483652436df171b526fc7220eccdc9f3225df334e81582c3cf7dd5 - languageName: node - linkType: hard - -"eventemitter3@npm:^4.0.0, eventemitter3@npm:^4.0.7": - version: 4.0.7 - resolution: "eventemitter3@npm:4.0.7" - checksum: 10/8030029382404942c01d0037079f1b1bc8fed524b5849c237b80549b01e2fc49709e1d0c557fa65ca4498fc9e24cff1475ef7b855121fcc15f9d61f93e282346 - languageName: node - linkType: hard - -"events@npm:3.3.0, events@npm:^3.0.0, events@npm:^3.2.0, events@npm:^3.3.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: 10/a3d47e285e28d324d7180f1e493961a2bbb4cad6412090e4dec114f4db1f5b560c7696ee8e758f55e23913ede856e3689cd3aa9ae13c56b5d8314cd3b3ddd1be - languageName: node - linkType: hard - -"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": - version: 1.0.3 - resolution: "evp_bytestokey@npm:1.0.3" - dependencies: - md5.js: "npm:^1.3.4" - node-gyp: "npm:latest" - safe-buffer: "npm:^5.1.1" - checksum: 10/ad4e1577f1a6b721c7800dcc7c733fe01f6c310732bb5bf2240245c2a5b45a38518b91d8be2c610611623160b9d1c0e91f1ce96d639f8b53e8894625cf20fa45 - languageName: node - linkType: hard - -"execa@npm:5.1.1, execa@npm:^5.0.0, execa@npm:^5.1.1": - version: 5.1.1 - resolution: "execa@npm:5.1.1" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^6.0.0" - human-signals: "npm:^2.1.0" - is-stream: "npm:^2.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^4.0.1" - onetime: "npm:^5.1.2" - signal-exit: "npm:^3.0.3" - strip-final-newline: "npm:^2.0.0" - checksum: 10/8ada91f2d70f7dff702c861c2c64f21dfdc1525628f3c0454fd6f02fce65f7b958616cbd2b99ca7fa4d474e461a3d363824e91b3eb881705231abbf387470597 - languageName: node - linkType: hard - -"execa@npm:7.2.0": - version: 7.2.0 - resolution: "execa@npm:7.2.0" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^6.0.1" - human-signals: "npm:^4.3.0" - is-stream: "npm:^3.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^5.1.0" - onetime: "npm:^6.0.0" - signal-exit: "npm:^3.0.7" - strip-final-newline: "npm:^3.0.0" - checksum: 10/473feff60f9d4dbe799225948de48b5158c1723021d19c4b982afe37bcd111ae84e1b4c9dfe967fae5101b0894b1a62e4dd564a286dfa3e46d7b0cfdbf7fe62b - languageName: node - linkType: hard - -"execa@npm:^8.0.1": - version: 8.0.1 - resolution: "execa@npm:8.0.1" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^8.0.1" - human-signals: "npm:^5.0.0" - is-stream: "npm:^3.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^5.1.0" - onetime: "npm:^6.0.0" - signal-exit: "npm:^4.1.0" - strip-final-newline: "npm:^3.0.0" - checksum: 10/d2ab5fe1e2bb92b9788864d0713f1fce9a07c4594e272c0c97bc18c90569897ab262e4ea58d27a694d288227a2e24f16f5e2575b44224ad9983b799dc7f1098d - languageName: node - linkType: hard - -"exenv@npm:^1.2.0": - version: 1.2.2 - resolution: "exenv@npm:1.2.2" - checksum: 10/6840185e421394bcb143debb866d31d19c3e4a4bca87d2f319d68d61afff353b3c678f2eb389e3b98ab9aecbec19f6bebbdc4193984378af0a3366c498a7efc8 - languageName: node - linkType: hard - -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: 10/387555050c5b3c10e7a9e8df5f43194e95d7737c74532c409910e585d5554eaff34960c166643f5e23d042196529daad059c292dcf1fb61b8ca878d3677f4b87 - languageName: node - linkType: hard - -"expand-tilde@npm:^2.0.0, expand-tilde@npm:^2.0.2": - version: 2.0.2 - resolution: "expand-tilde@npm:2.0.2" - dependencies: - homedir-polyfill: "npm:^1.0.1" - checksum: 10/2efe6ed407d229981b1b6ceb552438fbc9e5c7d6a6751ad6ced3e0aa5cf12f0b299da695e90d6c2ac79191b5c53c613e508f7149e4573abfbb540698ddb7301a - languageName: node - linkType: hard - -"expect@npm:^27.5.1": - version: 27.5.1 - resolution: "expect@npm:27.5.1" - dependencies: - "@jest/types": "npm:^27.5.1" - jest-get-type: "npm:^27.5.1" - jest-matcher-utils: "npm:^27.5.1" - jest-message-util: "npm:^27.5.1" - checksum: 10/65152be11e791361bb8f74b2516b6ba83021ac4a280b16575340a7dbb72be7fb51b021119a3f40f309a36b375cfb05d4854d5d7af3c53a293a342afc7f86bdaa - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 10/2d9bbb6473de7051f96790d5f9a678f32e60ed0aa70741dc7fdc96fec8d631124ec3374ac144387604f05afff9500f31a1d45bd9eee4cdc2e4f9ad2d9b9d5dbd - languageName: node - linkType: hard - -"express@npm:^4.17.3": - version: 4.18.2 - resolution: "express@npm:4.18.2" - dependencies: - accepts: "npm:~1.3.8" - array-flatten: "npm:1.1.1" - body-parser: "npm:1.20.1" - content-disposition: "npm:0.5.4" - content-type: "npm:~1.0.4" - cookie: "npm:0.5.0" - cookie-signature: "npm:1.0.6" - debug: "npm:2.6.9" - depd: "npm:2.0.0" - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - etag: "npm:~1.8.1" - finalhandler: "npm:1.2.0" - fresh: "npm:0.5.2" - http-errors: "npm:2.0.0" - merge-descriptors: "npm:1.0.1" - methods: "npm:~1.1.2" - on-finished: "npm:2.4.1" - parseurl: "npm:~1.3.3" - path-to-regexp: "npm:0.1.7" - proxy-addr: "npm:~2.0.7" - qs: "npm:6.11.0" - range-parser: "npm:~1.2.1" - safe-buffer: "npm:5.2.1" - send: "npm:0.18.0" - serve-static: "npm:1.15.0" - setprototypeof: "npm:1.2.0" - statuses: "npm:2.0.1" - type-is: "npm:~1.6.18" - utils-merge: "npm:1.0.1" - vary: "npm:~1.1.2" - checksum: 10/869ae89ed6ff4bed7b373079dc58e5dddcf2915a2669b36037ff78c99d675ae930e5fe052b35c24f56557d28a023bb1cbe3e2f2fb87eaab96a1cedd7e597809d - languageName: node - linkType: hard - -"extend@npm:^3.0.0": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: 10/59e89e2dc798ec0f54b36d82f32a27d5f6472c53974f61ca098db5d4648430b725387b53449a34df38fd0392045434426b012f302b3cc049a6500ccf82877e4e - languageName: node - linkType: hard - -"extendable-error@npm:^0.1.5": - version: 0.1.7 - resolution: "extendable-error@npm:0.1.7" - checksum: 10/80478be7429a1675d2085f701239796bab3230ed6f2fb1b138fbabec24bea6516b7c5ceb6e9c209efcc9c089948d93715703845653535f8e8a49655066a9255e - languageName: node - linkType: hard - -"extension-port-stream@npm:^3.0.0": - version: 3.0.0 - resolution: "extension-port-stream@npm:3.0.0" - dependencies: - readable-stream: "npm:^3.6.2 || ^4.4.2" - webextension-polyfill: "npm:>=0.10.0 <1.0" - checksum: 10/4f51d2258a96154c2d916a8a5425636a2b0817763e9277f7dc378d08b6f050c90d185dbde4313d27cf66ad99d4b3116479f9f699c40358c64cccfa524d2b55bf - languageName: node - linkType: hard - -"external-editor@npm:^3.0.3, external-editor@npm:^3.1.0": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: "npm:^0.7.0" - iconv-lite: "npm:^0.4.24" - tmp: "npm:^0.0.33" - checksum: 10/776dff1d64a1d28f77ff93e9e75421a81c062983fd1544279d0a32f563c0b18c52abbb211f31262e2827e48edef5c9dc8f960d06dd2d42d1654443b88568056b - languageName: node - linkType: hard - -"extract-files@npm:^11.0.0": - version: 11.0.0 - resolution: "extract-files@npm:11.0.0" - checksum: 10/02bf0dde9617d67795e38a182d8bf58828a7c5d77762623ff05e72d461a0e980071a860e2503231db2cc8824d8da35cefb1750937dcbe018cb0e67e37f20a7be - languageName: node - linkType: hard - -"eyes@npm:^0.1.8": - version: 0.1.8 - resolution: "eyes@npm:0.1.8" - checksum: 10/58480c1f4c8e80ae9d4147afa0e0cc3403e5a3d1fa9e0c17dd8418f87273762c40ab035919ed407f6ed0992086495b93ff7163eb2a1027f58ae70e3c847d6c08 - languageName: node - linkType: hard - -"fast-copy@npm:^3.0.0": - version: 3.0.1 - resolution: "fast-copy@npm:3.0.1" - checksum: 10/2f655f1e84440f990cddf7895f0acce38b2eb090a27dc0f97f1654cd6f2e38f67d9603471856c2af13e0bfbdf04c2c0b8d446fee1dd1f6f485992e4cc4693c7a - languageName: node - linkType: hard - -"fast-decode-uri-component@npm:^1.0.1": - version: 1.0.1 - resolution: "fast-decode-uri-component@npm:1.0.1" - checksum: 10/4b6ed26974414f688be4a15eab6afa997bad4a7c8605cb1deb928b28514817b4523a1af0fa06621c6cbfedb7e5615144c2c3e7512860e3a333a31a28d537dca7 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: 10/e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d - languageName: node - linkType: hard - -"fast-diff@npm:^1.1.2, fast-diff@npm:^1.2.0": - version: 1.3.0 - resolution: "fast-diff@npm:1.3.0" - checksum: 10/9e57415bc69cd6efcc720b3b8fe9fdaf42dcfc06f86f0f45378b1fa512598a8aac48aa3928c8751d58e2f01bb4ba4f07e4f3d9bc0d57586d45f1bd1e872c6cde - languageName: node - linkType: hard - -"fast-fifo@npm:^1.0.0": - version: 1.2.0 - resolution: "fast-fifo@npm:1.2.0" - checksum: 10/6a65f9ee015ae6aa96d590f02d755253329323afa2712a87fa945210a298d14763262a86a0872905bce639f54f99f149fb6a95c88153742928ddec10b9c852f6 - languageName: node - linkType: hard - -"fast-glob@npm:3.3.1": - version: 3.3.1 - resolution: "fast-glob@npm:3.3.1" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.4" - checksum: 10/51bcd15472879dfe51d4b01c5b70bbc7652724d39cdd082ba11276dbd7d84db0f6b33757e1938af8b2768a4bf485d9be0c89153beae24ee8331d6dcc7550379f - languageName: node - linkType: hard - -"fast-glob@npm:3.3.2, fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": - version: 3.3.2 - resolution: "fast-glob@npm:3.3.2" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.4" - checksum: 10/222512e9315a0efca1276af9adb2127f02105d7288fa746145bf45e2716383fb79eb983c89601a72a399a56b7c18d38ce70457c5466218c5f13fad957cee16df - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: 10/2c20055c1fa43c922428f16ca8bb29f2807de63e5c851f665f7ac9790176c01c3b40335257736b299764a8d383388dabc73c8083b8e1bc3d99f0a941444ec60e - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 10/eb7e220ecf2bab5159d157350b81d01f75726a4382f5a9266f42b9150c4523b9795f7f5d9fbbbeaeac09a441b2369f05ee02db48ea938584205530fe5693cfe1 - languageName: node - linkType: hard - -"fast-levenshtein@npm:^3.0.0": - version: 3.0.0 - resolution: "fast-levenshtein@npm:3.0.0" - dependencies: - fastest-levenshtein: "npm:^1.0.7" - checksum: 10/df98841b262eb345335043ae42f0219f1acf1a88f2e0959ca94c4a46df44e40455d9ee11a3f1c730dee2b1b87dc8b20d4184e71712b30b229df5b40c944ea649 - languageName: node - linkType: hard - -"fast-querystring@npm:^1.1.1": - version: 1.1.2 - resolution: "fast-querystring@npm:1.1.2" - dependencies: - fast-decode-uri-component: "npm:^1.0.1" - checksum: 10/981da9b914f2b639dc915bdfa4f34ab028b967d428f02fbd293d99258593fde69c48eea73dfa03ced088268e0a8045c642e8debcd9b4821ebd125e130a0430c7 - languageName: node - linkType: hard - -"fast-redact@npm:^3.0.0, fast-redact@npm:^3.1.1": - version: 3.2.0 - resolution: "fast-redact@npm:3.2.0" - checksum: 10/b88c584674dbc4a5aa0fda6da0fbda9f96ee7279f6590c4bafe7c088f13d000bbaa50291c2a4aafeb58940c7ad68bea7ea655ae83feab313138b4bbb89db4632 - languageName: node - linkType: hard - -"fast-safe-stringify@npm:^2.0.6, fast-safe-stringify@npm:^2.1.1": - version: 2.1.1 - resolution: "fast-safe-stringify@npm:2.1.1" - checksum: 10/dc1f063c2c6ac9533aee14d406441f86783a8984b2ca09b19c2fe281f9ff59d315298bc7bc22fd1f83d26fe19ef2f20e2ddb68e96b15040292e555c5ced0c1e4 - languageName: node - linkType: hard - -"fast-shallow-equal@npm:^1.0.0": - version: 1.0.0 - resolution: "fast-shallow-equal@npm:1.0.0" - checksum: 10/ae89318ce43c0c46410d9511ac31520d59cfe675bad3d0b1cb5f900b2d635943d788b8370437178e91ae0d0412decc394229c03e69925ade929a8c02da241610 - languageName: node - linkType: hard - -"fast-stable-stringify@npm:^1.0.0": - version: 1.0.0 - resolution: "fast-stable-stringify@npm:1.0.0" - checksum: 10/e4743ae52f621b42aa04ab4a44fec9e644dd30f476d37f9cf13e7dd95de3e427ecd1b20e6be7adaf0dea7252ed11ff72819066f939b1d491cec1e7e898524989 - languageName: node - linkType: hard - -"fast-uri@npm:^3.0.1": - version: 3.0.6 - resolution: "fast-uri@npm:3.0.6" - checksum: 10/43c87cd03926b072a241590e49eca0e2dfe1d347ddffd4b15307613b42b8eacce00a315cf3c7374736b5f343f27e27ec88726260eb03a758336d507d6fbaba0a - languageName: node - linkType: hard - -"fastest-levenshtein@npm:^1.0.7": - version: 1.0.16 - resolution: "fastest-levenshtein@npm:1.0.16" - checksum: 10/ee85d33b5cef592033f70e1c13ae8624055950b4eb832435099cd56aa313d7f251b873bedbc06a517adfaff7b31756d139535991e2406967438e03a1bf1b008e - languageName: node - linkType: hard - -"fastest-stable-stringify@npm:^2.0.2": - version: 2.0.2 - resolution: "fastest-stable-stringify@npm:2.0.2" - checksum: 10/41bb381c0eab1419eb353658c0d78cb79a4e99ef8f53ec5d36b131f076e62ff3cdca6d22888640c55ea3382ae2c93d8629a67f5734655442976708448a8c2500 - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.15.0 - resolution: "fastq@npm:1.15.0" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10/67c01b1c972e2d5b6fea197a1a39d5d582982aea69ff4c504badac71080d8396d4843b165a9686e907c233048f15a86bbccb0e7f83ba771f6fa24bcde059d0c3 - languageName: node - linkType: hard - -"faye-websocket@npm:^0.11.3": - version: 0.11.4 - resolution: "faye-websocket@npm:0.11.4" - dependencies: - websocket-driver: "npm:>=0.5.1" - checksum: 10/22433c14c60925e424332d2794463a8da1c04848539b5f8db5fced62a7a7c71a25335a4a8b37334e3a32318835e2b87b1733d008561964121c4a0bd55f0878c3 - languageName: node - linkType: hard - -"fb-watchman@npm:^2.0.0": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: "npm:2.1.1" - checksum: 10/4f95d336fb805786759e383fd7fff342ceb7680f53efcc0ef82f502eb479ce35b98e8b207b6dfdfeea0eba845862107dc73813775fc6b56b3098c6e90a2dad77 - languageName: node - linkType: hard - -"fbjs-css-vars@npm:^1.0.0": - version: 1.0.2 - resolution: "fbjs-css-vars@npm:1.0.2" - checksum: 10/72baf6d22c45b75109118b4daecb6c8016d4c83c8c0f23f683f22e9d7c21f32fff6201d288df46eb561e3c7d4bb4489b8ad140b7f56444c453ba407e8bd28511 - languageName: node - linkType: hard - -"fbjs@npm:^3.0.0": - version: 3.0.5 - resolution: "fbjs@npm:3.0.5" - dependencies: - cross-fetch: "npm:^3.1.5" - fbjs-css-vars: "npm:^1.0.0" - loose-envify: "npm:^1.0.0" - object-assign: "npm:^4.1.0" - promise: "npm:^7.1.1" - setimmediate: "npm:^1.0.5" - ua-parser-js: "npm:^1.0.35" - checksum: 10/71252595b00b06fb0475a295c74d81ada1cc499b7e11f2cde51fef04618affa568f5b7f4927f61720c23254b9144be28f8acb2086a5001cf65df8eec87c6ca5c - languageName: node - linkType: hard - -"fdir@npm:^6.1.1, fdir@npm:^6.4.2": - version: 6.4.2 - resolution: "fdir@npm:6.4.2" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10/5ff80d1d2034e75cc68be175401c9f64c4938a6b2c1e9a0c27f2d211ffbe491fd86d29e4576825d9da8aff9bd465f0283427c2dddc11653457906c46d3bbc448 - languageName: node - linkType: hard - -"fdir@npm:^6.4.4": - version: 6.4.4 - resolution: "fdir@npm:6.4.4" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10/d0000d6b790059b35f4ed19acc8847a66452e0bc68b28766c929ffd523e5ec2083811fc8a545e4a1d4945ce70e887b3a610c145c681073b506143ae3076342ed - languageName: node - linkType: hard - -"fflate@npm:^0.8.1": - version: 0.8.1 - resolution: "fflate@npm:0.8.1" - checksum: 10/bb66551c98799caaeae678fd0772f725f45cdbd1e2d1ec1027eb916f6f8547668b68aced6684bcdbd9f92766b23245da8a227bf387d2c87f74befc58fbdca13b - languageName: node - linkType: hard - -"figures@npm:^3.0.0": - version: 3.2.0 - resolution: "figures@npm:3.2.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - checksum: 10/a3bf94e001be51d3770500789157f067218d4bc681a65e1f69d482de15120bcac822dceb1a7b3803f32e4e3a61a46df44f7f2c8ba95d6375e7491502e0dd3d97 - languageName: node - linkType: hard - -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: "npm:^3.0.4" - checksum: 10/099bb9d4ab332cb93c48b14807a6918a1da87c45dce91d4b61fd40e6505d56d0697da060cb901c729c90487067d93c9243f5da3dc9c41f0358483bfdebca736b - languageName: node - linkType: hard - -"file-entry-cache@npm:^8.0.0": - version: 8.0.0 - resolution: "file-entry-cache@npm:8.0.0" - dependencies: - flat-cache: "npm:^4.0.0" - checksum: 10/afe55c4de4e0d226a23c1eae62a7219aafb390859122608a89fa4df6addf55c7fd3f1a2da6f5b41e7cdff496e4cf28bbd215d53eab5c817afa96d2b40c81bfb0 - languageName: node - linkType: hard - -"file-loader@npm:^6.2.0": - version: 6.2.0 - resolution: "file-loader@npm:6.2.0" - dependencies: - loader-utils: "npm:^2.0.0" - schema-utils: "npm:^3.0.0" - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - checksum: 10/3a854be3a7501bdb0fd8a1c0d45c156c0dc8f0afced07cbdac0b13a79c2f2a03f7770d68cb555ff30b5ea7c20719df34e1b2bd896c93e3138ee31f0bdc560310 - languageName: node - linkType: hard - -"file-uri-to-path@npm:1.0.0": - version: 1.0.0 - resolution: "file-uri-to-path@npm:1.0.0" - checksum: 10/b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 - languageName: node - linkType: hard - -"filelist@npm:^1.0.4": - version: 1.0.4 - resolution: "filelist@npm:1.0.4" - dependencies: - minimatch: "npm:^5.0.1" - checksum: 10/4b436fa944b1508b95cffdfc8176ae6947b92825483639ef1b9a89b27d82f3f8aa22b21eed471993f92709b431670d4e015b39c087d435a61e1bb04564cf51de - languageName: node - linkType: hard - -"filesize@npm:^8.0.6": - version: 8.0.7 - resolution: "filesize@npm:8.0.7" - checksum: 10/e35f1799c314cef49a585af82fe2d15b362f743a74c95f06e3dd99cf0334ca45516ed144f6a58649ca0e2e5e63844c0ef476d9374d5d43736d26f7c13aa49dad - languageName: node - linkType: hard - -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10/e260f7592fd196b4421504d3597cc76f4a1ca7a9488260d533b611fc3cefd61e9a9be1417cb82d3b01ad9f9c0ff2dbf258e1026d2445e26b0cf5148ff4250429 - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10/a7095cb39e5bc32fada2aa7c7249d3f6b01bd1ce461a61b0adabacccabd9198500c6fb1f68a7c851a657e273fce2233ba869638897f3d7ed2e87a2d89b4436ea - languageName: node - linkType: hard - -"filter-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "filter-obj@npm:1.1.0" - checksum: 10/9d681939eec2b4b129cb4f307b7e93d954a0657421d4e5357d86093b26d3f4f570909ed43717dcfd62428b3cf8cddd9841b35f9d40d12ac62cfabaa677942593 - languageName: node - linkType: hard - -"finalhandler@npm:1.2.0": - version: 1.2.0 - resolution: "finalhandler@npm:1.2.0" - dependencies: - debug: "npm:2.6.9" - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - on-finished: "npm:2.4.1" - parseurl: "npm:~1.3.3" - statuses: "npm:2.0.1" - unpipe: "npm:~1.0.0" - checksum: 10/635718cb203c6d18e6b48dfbb6c54ccb08ea470e4f474ddcef38c47edcf3227feec316f886dd701235997d8af35240cae49856721ce18f539ad038665ebbf163 - languageName: node - linkType: hard - -"find-cache-dir@npm:^3.3.1": - version: 3.3.2 - resolution: "find-cache-dir@npm:3.3.2" - dependencies: - commondir: "npm:^1.0.1" - make-dir: "npm:^3.0.2" - pkg-dir: "npm:^4.1.0" - checksum: 10/3907c2e0b15132704ed67083686cd3e68ab7d9ecc22e50ae9da20678245d488b01fa22c0e34c0544dc6edc4354c766f016c8c186a787be7c17f7cde8c5281e85 - languageName: node - linkType: hard - -"find-replace@npm:^3.0.0": - version: 3.0.0 - resolution: "find-replace@npm:3.0.0" - dependencies: - array-back: "npm:^3.0.1" - checksum: 10/6b04bcfd79027f5b84aa1dfe100e3295da989bdac4b4de6b277f4d063e78f5c9e92ebc8a1fec6dd3b448c924ba404ee051cc759e14a3ee3e825fa1361025df08 - languageName: node - linkType: hard - -"find-root@npm:^1.1.0": - version: 1.1.0 - resolution: "find-root@npm:1.1.0" - checksum: 10/caa799c976a14925ba7f31ca1a226fe73d3aa270f4f1b623fcfeb1c6e263111db4beb807d8acd31bd4d48d44c343b93688a9288dfbccca27463c36a0301b0bb9 - languageName: node - linkType: hard - -"find-up@npm:^2.0.0": - version: 2.1.0 - resolution: "find-up@npm:2.1.0" - dependencies: - locate-path: "npm:^2.0.0" - checksum: 10/43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd - languageName: node - linkType: hard - -"find-up@npm:^3.0.0": - version: 3.0.0 - resolution: "find-up@npm:3.0.0" - dependencies: - locate-path: "npm:^3.0.0" - checksum: 10/38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 - languageName: node - linkType: hard - -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: "npm:^5.0.0" - path-exists: "npm:^4.0.0" - checksum: 10/4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: "npm:^6.0.0" - path-exists: "npm:^4.0.0" - checksum: 10/07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 - languageName: node - linkType: hard - -"find-yarn-workspace-root@npm:^2.0.0": - version: 2.0.0 - resolution: "find-yarn-workspace-root@npm:2.0.0" - dependencies: - micromatch: "npm:^4.0.2" - checksum: 10/7fa7942849eef4d5385ee96a0a9a5a9afe885836fd72ed6a4280312a38690afea275e7d09b343fe97daf0412d833f8ac4b78c17fc756386d9ebebf0759d707a7 - languageName: node - linkType: hard - -"findup-sync@npm:^5.0.0": - version: 5.0.0 - resolution: "findup-sync@npm:5.0.0" - dependencies: - detect-file: "npm:^1.0.0" - is-glob: "npm:^4.0.3" - micromatch: "npm:^4.0.4" - resolve-dir: "npm:^1.0.1" - checksum: 10/576716c77a0e8330b17ae9cba27d1fda8907c8cda7bf33a47f1999e16e089bfc6df4dd62933e0760f430736183c054348c34aa45dd882d49c8c098f55b89ee1d - languageName: node - linkType: hard - -"flat-cache@npm:^3.0.4": - version: 3.0.4 - resolution: "flat-cache@npm:3.0.4" - dependencies: - flatted: "npm:^3.1.0" - rimraf: "npm:^3.0.2" - checksum: 10/9fe5d0cb97c988e3b25242e71346965fae22757674db3fca14206850af2efa3ca3b04a3ba0eba8d5e20fd8a3be80a2e14b1c2917e70ffe1acb98a8c3327e4c9f - languageName: node - linkType: hard - -"flat-cache@npm:^4.0.0": - version: 4.0.1 - resolution: "flat-cache@npm:4.0.1" - dependencies: - flatted: "npm:^3.2.9" - keyv: "npm:^4.5.4" - checksum: 10/58ce851d9045fffc7871ce2bd718bc485ad7e777bf748c054904b87c351ff1080c2c11da00788d78738bfb51b71e4d5ea12d13b98eb36e3358851ffe495b62dc - languageName: node - linkType: hard - -"flat@npm:^5.0.2": - version: 5.0.2 - resolution: "flat@npm:5.0.2" - bin: - flat: cli.js - checksum: 10/72479e651c15eab53e25ce04c31bab18cfaac0556505cac19221dbbe85bbb9686bc76e4d397e89e5bf516ce667dcf818f8b07e585568edba55abc2bf1f698fb5 - languageName: node - linkType: hard - -"flatted@npm:^3.1.0, flatted@npm:^3.2.9": - version: 3.2.9 - resolution: "flatted@npm:3.2.9" - checksum: 10/dc2b89e46a2ebde487199de5a4fcb79e8c46f984043fea5c41dbf4661eb881fefac1c939b5bdcd8a09d7f960ec364f516970c7ec44e58ff451239c07fd3d419b - languageName: node - linkType: hard - -"fmix@npm:^0.1.0": - version: 0.1.0 - resolution: "fmix@npm:0.1.0" - dependencies: - imul: "npm:^1.0.0" - checksum: 10/c465344d4f169eaf10d45c33949a1e7a633f09dba2ac7063ce8ae8be743df5979d708f7f24900163589f047f5194ac5fc2476177ce31175e8805adfa7b8fb7a4 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.12.1, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.4, follow-redirects@npm:^1.15.6": - version: 1.15.9 - resolution: "follow-redirects@npm:1.15.9" - peerDependenciesMeta: - debug: - optional: true - checksum: 10/e3ab42d1097e90d28b913903841e6779eb969b62a64706a3eb983e894a5db000fbd89296f45f08885a0e54cd558ef62e81be1165da9be25a6c44920da10f424c - languageName: node - linkType: hard - -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" - dependencies: - is-callable: "npm:^1.1.3" - checksum: 10/fdac0cde1be35610bd635ae958422e8ce0cc1313e8d32ea6d34cfda7b60850940c1fd07c36456ad76bd9c24aef6ff5e03b02beb58c83af5ef6c968a64eada676 - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" - dependencies: - cross-spawn: "npm:^7.0.0" - signal-exit: "npm:^4.0.1" - checksum: 10/087edd44857d258c4f73ad84cb8df980826569656f2550c341b27adf5335354393eec24ea2fabd43a253233fb27cee177ebe46bd0b7ea129c77e87cb1e9936fb - languageName: node - linkType: hard - -"fork-ts-checker-webpack-plugin@npm:^6.5.0": - version: 6.5.3 - resolution: "fork-ts-checker-webpack-plugin@npm:6.5.3" - dependencies: - "@babel/code-frame": "npm:^7.8.3" - "@types/json-schema": "npm:^7.0.5" - chalk: "npm:^4.1.0" - chokidar: "npm:^3.4.2" - cosmiconfig: "npm:^6.0.0" - deepmerge: "npm:^4.2.2" - fs-extra: "npm:^9.0.0" - glob: "npm:^7.1.6" - memfs: "npm:^3.1.2" - minimatch: "npm:^3.0.4" - schema-utils: "npm:2.7.0" - semver: "npm:^7.3.2" - tapable: "npm:^1.0.0" - peerDependencies: - eslint: ">= 6" - typescript: ">= 2.7" - vue-template-compiler: "*" - webpack: ">= 4" - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - checksum: 10/415263839afe11c291be60e3335ece3ccdc80c5e0d91eeecf0d3060cfb72c7b0cb33be326dd24b325939357d53215e10c41e8187edb5db8a08fe9aaa8aa6c510 - languageName: node - linkType: hard - -"form-data-encoder@npm:^2.1.2": - version: 2.1.4 - resolution: "form-data-encoder@npm:2.1.4" - checksum: 10/3778e7db3c21457296e6fdbc4200642a6c01e8be9297256e845ee275f9ddaecb5f49bfb0364690ad216898c114ec59bf85f01ec823a70670b8067273415d62f6 - languageName: node - linkType: hard - -"form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - mime-types: "npm:^2.1.12" - checksum: 10/944b40ff63b9cb1ca7a97e70f72104c548e0b0263e3e817e49919015a0d687453086259b93005389896dbffd3777cccea2e67c51f4e827590e5979b14ff91bf7 - languageName: node - linkType: hard - -"form-data@npm:^4.0.0": - version: 4.0.0 - resolution: "form-data@npm:4.0.0" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - mime-types: "npm:^2.1.12" - checksum: 10/7264aa760a8cf09482816d8300f1b6e2423de1b02bba612a136857413fdc96d7178298ced106817655facc6b89036c6e12ae31c9eb5bdc16aabf502ae8a5d805 - languageName: node - linkType: hard - -"forwarded@npm:0.2.0": - version: 0.2.0 - resolution: "forwarded@npm:0.2.0" - checksum: 10/29ba9fd347117144e97cbb8852baae5e8b2acb7d1b591ef85695ed96f5b933b1804a7fac4a15dd09ca7ac7d0cdc104410e8102aae2dd3faa570a797ba07adb81 - languageName: node - linkType: hard - -"fp-ts@npm:1.19.3": - version: 1.19.3 - resolution: "fp-ts@npm:1.19.3" - checksum: 10/3b3426f9a033b3e1b43f68da1baeb9d25b1a7cfeda0f55d4eadf0a1ab951898edc8b3453e4fec3113c140c98fdbf5fe8ab5232d349376ea7920e280af4e52050 - languageName: node - linkType: hard - -"fp-ts@npm:^1.0.0": - version: 1.19.5 - resolution: "fp-ts@npm:1.19.5" - checksum: 10/17aa04bbbba9096ac32efd4f192de6211687cab195c423d4072a904f1346c2d508243880685d6f4bb4be29e5f337a67cfa211645e491491683b6aaff23b5dd4a - languageName: node - linkType: hard - -"fraction.js@npm:^4.2.0": - version: 4.2.0 - resolution: "fraction.js@npm:4.2.0" - checksum: 10/8f8e3c02a4d10cd03bae5c036c02ef0bd1a50be69ac56e5b9b25025ff07466c1d2288f383fb613ecec583e77bcfd586dee2d932f40e588c910bf55c5103014ab - languageName: node - linkType: hard - -"fresh@npm:0.5.2": - version: 0.5.2 - resolution: "fresh@npm:0.5.2" - checksum: 10/64c88e489b5d08e2f29664eb3c79c705ff9a8eb15d3e597198ef76546d4ade295897a44abb0abd2700e7ef784b2e3cbf1161e4fbf16f59129193fd1030d16da1 - languageName: node - linkType: hard - -"fs-extra@npm:11.3.0, fs-extra@npm:^11.3.0": - version: 11.3.0 - resolution: "fs-extra@npm:11.3.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10/c9fe7b23dded1efe7bbae528d685c3206477e20cc60e9aaceb3f024f9b9ff2ee1f62413c161cb88546cc564009ab516dec99e9781ba782d869bb37e4fe04a97f - languageName: node - linkType: hard - -"fs-extra@npm:^10.0.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10/05ce2c3b59049bcb7b52001acd000e44b3c4af4ec1f8839f383ef41ec0048e3cfa7fd8a637b1bddfefad319145db89be91f4b7c1db2908205d38bf91e7d1d3b7 - languageName: node - linkType: hard - -"fs-extra@npm:^11.0.0, fs-extra@npm:^11.2.0": - version: 11.2.0 - resolution: "fs-extra@npm:11.2.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10/0579bf6726a4cd054d4aa308f10b483f52478bb16284f32cf60b4ce0542063d551fca1a08a2af365e35db21a3fa5a06cf2a6ed614004b4368982bc754cb816b3 - languageName: node - linkType: hard - -"fs-extra@npm:^7.0.0, fs-extra@npm:^7.0.1, fs-extra@npm:~7.0.1": - version: 7.0.1 - resolution: "fs-extra@npm:7.0.1" - dependencies: - graceful-fs: "npm:^4.1.2" - jsonfile: "npm:^4.0.0" - universalify: "npm:^0.1.0" - checksum: 10/3fc6e56ba2f07c00d452163f27f21a7076b72ef7da8a50fef004336d59ef4c34deda11d10ecd73fd8fbcf20e4f575f52857293090b3c9f8741d4e0598be30fea - languageName: node - linkType: hard - -"fs-extra@npm:^8.1.0": - version: 8.1.0 - resolution: "fs-extra@npm:8.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^4.0.0" - universalify: "npm:^0.1.0" - checksum: 10/6fb12449f5349be724a138b4a7b45fe6a317d2972054517f5971959c26fbd17c0e145731a11c7324460262baa33e0a799b183ceace98f7a372c95fbb6f20f5de - languageName: node - linkType: hard - -"fs-extra@npm:^9.0.0, fs-extra@npm:^9.0.1, fs-extra@npm:^9.1.0": - version: 9.1.0 - resolution: "fs-extra@npm:9.1.0" - dependencies: - at-least-node: "npm:^1.0.0" - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10/08600da1b49552ed23dfac598c8fc909c66776dd130fea54fbcad22e330f7fcc13488bb995f6bc9ce5651aa35b65702faf616fe76370ee56f1aade55da982dca - languageName: node - linkType: hard - -"fs-jetpack@npm:4.3.1": - version: 4.3.1 - resolution: "fs-jetpack@npm:4.3.1" - dependencies: - minimatch: "npm:^3.0.2" - rimraf: "npm:^2.6.3" - checksum: 10/cb6636a083011124e8ca33720035171d177874fffb508448573db9eebef0d9ec5c29d73665373aa619f7ee4b495b142ae888f07217ea6ce40ba2f752894fec63 - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10/03191781e94bc9a54bd376d3146f90fe8e082627c502185dbf7b9b3032f66b0b142c1115f3b2cc5936575fc1b44845ce903dd4c21bec2a8d69f3bd56f9cee9ec - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.2 - resolution: "fs-minipass@npm:3.0.2" - dependencies: - minipass: "npm:^5.0.0" - checksum: 10/1c071b5b8fc5b553ad2bd40f85988bc4d78d80eee766d0082a67dcff9a2536fd4fdd5fa2441661f799fa95000054296e4f900d6e96b2a025d173d325f3adf458 - languageName: node - linkType: hard - -"fs-monkey@npm:^1.0.4": - version: 1.0.4 - resolution: "fs-monkey@npm:1.0.4" - checksum: 10/9944223c25e62e176cbb9b0f9e0ee1697a1676419529e948ec013b49156863411a09b45671b56267d3118c867d3a0d5c08225845160a6148861cc16fc1eec79e - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10/e703107c28e362d8d7b910bbcbfd371e640a3bb45ae157a362b5952c0030c0b6d4981140ec319b347bce7adc025dd7813da1ff908a945ac214d64f5402a51b96 - languageName: node - linkType: hard - -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: "npm:latest" - checksum: 10/4c1ade961ded57cdbfbb5cac5106ec17bc8bccd62e16343c569a0ceeca83b9dfef87550b4dc5cbb89642da412b20c5071f304c8c464b80415446e8e155a038c0 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin<compat/fsevents>, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin<compat/fsevents>, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin<compat/fsevents>": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin<compat/fsevents>::version=2.3.3&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10/185e20d20f10c8d661d59aac0f3b63b31132d492e1b11fcc2a93cb2c47257ebaee7407c38513efd2b35cafdf972d9beb2ea4593c1e0f3bf8f2744836928d7454 - languageName: node - linkType: hard - -"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": - version: 1.1.6 - resolution: "function.prototype.name@npm:1.1.6" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - functions-have-names: "npm:^1.2.3" - checksum: 10/4d40be44d4609942e4e90c4fff77a811fa936f4985d92d2abfcf44f673ba344e2962bf223a33101f79c1a056465f36f09b072b9c289d7660ca554a12491cd5a2 - languageName: node - linkType: hard - -"functions-have-names@npm:^1.2.3": - version: 1.2.3 - resolution: "functions-have-names@npm:1.2.3" - checksum: 10/0ddfd3ed1066a55984aaecebf5419fbd9344a5c38dd120ffb0739fac4496758dcf371297440528b115e4367fc46e3abc86a2cc0ff44612181b175ae967a11a05 - languageName: node - linkType: hard - -"gauge@npm:^3.0.0": - version: 3.0.2 - resolution: "gauge@npm:3.0.2" - dependencies: - aproba: "npm:^1.0.3 || ^2.0.0" - color-support: "npm:^1.1.2" - console-control-strings: "npm:^1.0.0" - has-unicode: "npm:^2.0.1" - object-assign: "npm:^4.1.1" - signal-exit: "npm:^3.0.0" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - wide-align: "npm:^1.1.2" - checksum: 10/46df086451672a5fecd58f7ec86da74542c795f8e00153fbef2884286ce0e86653c3eb23be2d0abb0c4a82b9b2a9dec3b09b6a1cf31c28085fa0376599a26589 - languageName: node - linkType: hard - -"gauge@npm:^4.0.3": - version: 4.0.4 - resolution: "gauge@npm:4.0.4" - dependencies: - aproba: "npm:^1.0.3 || ^2.0.0" - color-support: "npm:^1.1.3" - console-control-strings: "npm:^1.1.0" - has-unicode: "npm:^2.0.1" - signal-exit: "npm:^3.0.7" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - wide-align: "npm:^1.1.5" - checksum: 10/09535dd53b5ced6a34482b1fa9f3929efdeac02f9858569cde73cef3ed95050e0f3d095706c1689614059898924b7a74aa14042f51381a1ccc4ee5c29d2389c4 - languageName: node - linkType: hard - -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: 10/17d8333460204fbf1f9160d067e1e77f908a5447febb49424b8ab043026049835c9ef3974445c57dbd39161f4d2b04356d7de12b2eecaa27a7a7ea7d871cbedd - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: 10/b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 - languageName: node - linkType: hard - -"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": - version: 2.0.2 - resolution: "get-func-name@npm:2.0.2" - checksum: 10/3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": - version: 1.2.4 - resolution: "get-intrinsic@npm:1.2.4" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - has-proto: "npm:^1.0.1" - has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.0" - checksum: 10/85bbf4b234c3940edf8a41f4ecbd4e25ce78e5e6ad4e24ca2f77037d983b9ef943fd72f00f3ee97a49ec622a506b67db49c36246150377efcda1c9eb03e5f06d - languageName: node - linkType: hard - -"get-iterator@npm:^1.0.2": - version: 1.0.2 - resolution: "get-iterator@npm:1.0.2" - checksum: 10/4a819aa91ecb61f4fd507bd62e3468d55f642f06011f944c381a739a21f685c36a37feb9324c8971e7c0fc70ca172066c45874fa2d1dcdf4b4fb8e43f16058c2 - languageName: node - linkType: hard - -"get-own-enumerable-property-symbols@npm:^3.0.0": - version: 3.0.2 - resolution: "get-own-enumerable-property-symbols@npm:3.0.2" - checksum: 10/8f0331f14159f939830884799f937343c8c0a2c330506094bc12cbee3665d88337fe97a4ea35c002cc2bdba0f5d9975ad7ec3abb925015cdf2a93e76d4759ede - languageName: node - linkType: hard - -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: 10/bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 - languageName: node - linkType: hard - -"get-pkg-repo@npm:^4.0.0": - version: 4.2.1 - resolution: "get-pkg-repo@npm:4.2.1" - dependencies: - "@hutson/parse-repository-url": "npm:^3.0.0" - hosted-git-info: "npm:^4.0.0" - through2: "npm:^2.0.0" - yargs: "npm:^16.2.0" - bin: - get-pkg-repo: src/cli.js - checksum: 10/033225cf7cdf3f61885f45c492975f412268cf9f3ec68cc42df9af1bec54cf0b0c5ddb7391a6dc973361e7e10df9d432cca0050892ba8856bc50413e0741804f - languageName: node - linkType: hard - -"get-port-please@npm:^3.1.1": - version: 3.1.1 - resolution: "get-port-please@npm:3.1.1" - checksum: 10/644872e030cffc58ef25645bfee868782e010774218c0e4e1e05280a72edb9a936aa78b85d01025da8e0635c48c33427dfc9ae9d9398e64da079d0ed6e6595a4 - languageName: node - linkType: hard - -"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": - version: 6.0.1 - resolution: "get-stream@npm:6.0.1" - checksum: 10/781266d29725f35c59f1d214aedc92b0ae855800a980800e2923b3fbc4e56b3cb6e462c42e09a1cf1a00c64e056a78fa407cbe06c7c92b7e5cd49b4b85c2a497 - languageName: node - linkType: hard - -"get-stream@npm:^8.0.1": - version: 8.0.1 - resolution: "get-stream@npm:8.0.1" - checksum: 10/dde5511e2e65a48e9af80fea64aff11b4921b14b6e874c6f8294c50975095af08f41bfb0b680c887f28b566dd6ec2cb2f960f9d36a323359be324ce98b766e9e - languageName: node - linkType: hard - -"get-symbol-description@npm:^1.0.2": - version: 1.0.2 - resolution: "get-symbol-description@npm:1.0.2" - dependencies: - call-bind: "npm:^1.0.5" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.4" - checksum: 10/e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 - languageName: node - linkType: hard - -"get-tsconfig@npm:^4.7.5": - version: 4.8.1 - resolution: "get-tsconfig@npm:4.8.1" - dependencies: - resolve-pkg-maps: "npm:^1.0.0" - checksum: 10/3fb5a8ad57b9633eaea085d81661e9e5c9f78b35d8f8689eaf8b8b45a2a3ebf3b3422266d4d7df765e308cc1e6231648d114803ab3d018332e29916f2c1de036 - languageName: node - linkType: hard - -"ghost-testrpc@npm:^0.0.2": - version: 0.0.2 - resolution: "ghost-testrpc@npm:0.0.2" - dependencies: - chalk: "npm:^2.4.2" - node-emoji: "npm:^1.10.0" - bin: - testrpc-sc: ./index.js - checksum: 10/e52f1d7ad5ac84c8528b3884496270c65056264b37373c00631ca874674b3cfd7c45ae2fc787ba3ff75e63273188f29d155d995ce3e361244bd55a9c365e444f - languageName: node - linkType: hard - -"git-raw-commits@npm:^2.0.11, git-raw-commits@npm:^2.0.8": - version: 2.0.11 - resolution: "git-raw-commits@npm:2.0.11" - dependencies: - dargs: "npm:^7.0.0" - lodash: "npm:^4.17.15" - meow: "npm:^8.0.0" - split2: "npm:^3.0.0" - through2: "npm:^4.0.0" - bin: - git-raw-commits: cli.js - checksum: 10/04e02b3da7c0e13a55f3e6fa8c1c5f06f7d0d641a9f90d896393ef0144bfcf91aa59beede68d14d61ed56aaf09f2c8dba175563c47ec000a8cf70f9df4877577 - languageName: node - linkType: hard - -"git-remote-origin-url@npm:^2.0.0": - version: 2.0.0 - resolution: "git-remote-origin-url@npm:2.0.0" - dependencies: - gitconfiglocal: "npm:^1.0.0" - pify: "npm:^2.3.0" - checksum: 10/85263a09c044b5f4fe2acc45cbb3c5331ab2bd4484bb53dfe7f3dd593a4bf90a9786a2e00b9884524331f50b3da18e8c924f01c2944087fc7f342282c4437b73 - languageName: node - linkType: hard - -"git-semver-tags@npm:^4.1.1": - version: 4.1.1 - resolution: "git-semver-tags@npm:4.1.1" - dependencies: - meow: "npm:^8.0.0" - semver: "npm:^6.0.0" - bin: - git-semver-tags: cli.js - checksum: 10/ab2ad6c7c81aeb6e703f9c9dd1d590a4c546a86b036540780ca414eb6d327f582a9c2d164899ccf0c20e1e875ec4db13b1e665c12c9d5c802eee79d9c71fdd0f - languageName: node - linkType: hard - -"gitconfiglocal@npm:^1.0.0": - version: 1.0.0 - resolution: "gitconfiglocal@npm:1.0.0" - dependencies: - ini: "npm:^1.3.2" - checksum: 10/e6d2764c15bbab6d1d1000d1181bb907f6b3796bb04f63614dba571b18369e0ecb1beaf27ce8da5b24307ef607e3a5f262a67cb9575510b9446aac697d421beb - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10/32cd106ce8c0d83731966d31517adb766d02c3812de49c30cfe0675c7c0ae6630c11214c54a5ae67aca882cf738d27fd7768f21aa19118b9245950554be07247 - languageName: node - linkType: hard - -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 10/c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 - languageName: node - linkType: hard - -"glob-to-regexp@npm:^0.4.1": - version: 0.4.1 - resolution: "glob-to-regexp@npm:0.4.1" - checksum: 10/9009529195a955c40d7b9690794aeff5ba665cc38f1519e111c58bb54366fd0c106bde80acf97ba4e533208eb53422c83b136611a54c5fefb1edd8dc267cb62e - languageName: node - linkType: hard - -"glob@npm:11.0.1": - version: 11.0.1 - resolution: "glob@npm:11.0.1" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^4.0.1" - minimatch: "npm:^10.0.0" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^2.0.0" - bin: - glob: dist/esm/bin.mjs - checksum: 10/57b12a05cc25f1c38f3b24cf6ea7a8bacef11e782c4b9a8c5b0bef3e6c5bcb8c4548cb31eb4115592e0490a024c1bde7359c470565608dd061d3b21179740457 - languageName: node - linkType: hard - -"glob@npm:7.1.6": - version: 7.1.6 - resolution: "glob@npm:7.1.6" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.0.4" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10/7d6ec98bc746980d5fe4d764b9c7ada727e3fbd2a7d85cd96dd95fb18638c9c54a70c692fd2ab5d68a186dc8cd9d6a4192d3df220beed891f687db179c430237 - languageName: node - linkType: hard - -"glob@npm:7.1.7": - version: 7.1.7 - resolution: "glob@npm:7.1.7" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.0.4" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10/ff5aab0386e9cace92b0550d42085b71013c5ea382982dd7fdded998a559635f61413b8ba6fb7294eef289c83b52f4e64136f888300ac8afc4f3e5623182d6c8 - languageName: node - linkType: hard - -"glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.4.5 - resolution: "glob@npm:10.4.5" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^3.1.2" - minimatch: "npm:^9.0.4" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^1.11.1" - bin: - glob: dist/esm/bin.mjs - checksum: 10/698dfe11828b7efd0514cd11e573eaed26b2dff611f0400907281ce3eab0c1e56143ef9b35adc7c77ecc71fba74717b510c7c223d34ca8a98ec81777b293d4ac - languageName: node - linkType: hard - -"glob@npm:^11.0.0": - version: 11.0.0 - resolution: "glob@npm:11.0.0" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^4.0.1" - minimatch: "npm:^10.0.0" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^2.0.0" - bin: - glob: dist/esm/bin.mjs - checksum: 10/e66939201d11ae30fe97e3364ac2be5c59d6c9bfce18ac633edfad473eb6b46a7553f6f73658f67caaf6cccc1df1ae336298a45e9021fa5695fd78754cc1603e - languageName: node - linkType: hard - -"glob@npm:^5.0.15": - version: 5.0.15 - resolution: "glob@npm:5.0.15" - dependencies: - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:2 || 3" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10/4a1f2401329d94b5c25c6ac16276aceccc52b865bd9b2b9198da21fc937d021bfd87463ae44de9a9e4794894a49bc619ebaf7e5b12182bcf97e2ceb68ae116d7 - languageName: node - linkType: hard - -"glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10/59452a9202c81d4508a43b8af7082ca5c76452b9fcc4a9ab17655822e6ce9b21d4f8fbadabe4fe3faef448294cec249af305e2cd824b7e9aaf689240e5e96a7b - languageName: node - linkType: hard - -"glob@npm:^8.0.3, glob@npm:^8.1.0": - version: 8.1.0 - resolution: "glob@npm:8.1.0" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^5.0.1" - once: "npm:^1.3.0" - checksum: 10/9aab1c75eb087c35dbc41d1f742e51d0507aa2b14c910d96fb8287107a10a22f4bbdce26fc0a3da4c69a20f7b26d62f1640b346a4f6e6becfff47f335bb1dc5e - languageName: node - linkType: hard - -"global-dirs@npm:^0.1.1": - version: 0.1.1 - resolution: "global-dirs@npm:0.1.1" - dependencies: - ini: "npm:^1.3.4" - checksum: 10/10624f5a8ddb8634c22804c6b24f93fb591c3639a6bc78e3584e01a238fc6f7b7965824184e57d63f6df36980b6c191484ad7bc6c35a1599b8f1d64be64c2a4a - languageName: node - linkType: hard - -"global-modules@npm:^1.0.0": - version: 1.0.0 - resolution: "global-modules@npm:1.0.0" - dependencies: - global-prefix: "npm:^1.0.1" - is-windows: "npm:^1.0.1" - resolve-dir: "npm:^1.0.0" - checksum: 10/e4031a01c0c7401349bb69e1499c7268d636552b16374c0002d677c7a6185da6782a2927a7a3a7c046eb7be97cd26b3c7b1b736f9818ecc7ac09e9d61449065e - languageName: node - linkType: hard - -"global-modules@npm:^2.0.0": - version: 2.0.0 - resolution: "global-modules@npm:2.0.0" - dependencies: - global-prefix: "npm:^3.0.0" - checksum: 10/4aee73adf533fe82ead2ad15c8bfb6ea4fb29e16d2d067521ab39d3b45b8f834d71c47a807e4f8f696e79497c3946d4ccdcd708da6f3a4522d65b087b8852f64 - languageName: node - linkType: hard - -"global-prefix@npm:^1.0.1": - version: 1.0.2 - resolution: "global-prefix@npm:1.0.2" - dependencies: - expand-tilde: "npm:^2.0.2" - homedir-polyfill: "npm:^1.0.1" - ini: "npm:^1.3.4" - is-windows: "npm:^1.0.1" - which: "npm:^1.2.14" - checksum: 10/68cf78f81cd85310095ca1f0ec22dd5f43a1059646b2c7b3fc4a7c9ce744356e66ca833adda4e5753e38021847aaec393a159a029ba2d257c08ccb3f00ca2899 - languageName: node - linkType: hard - -"global-prefix@npm:^3.0.0": - version: 3.0.0 - resolution: "global-prefix@npm:3.0.0" - dependencies: - ini: "npm:^1.3.5" - kind-of: "npm:^6.0.2" - which: "npm:^1.3.1" - checksum: 10/a405b9f83c7d88a49dc1c1e458d6585e258356810d3d0f41094265152a06a0f393b14d911f45616e35a4ce3894176a73be2984883575e778f55e90bf812d7337 - languageName: node - linkType: hard - -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 10/9f054fa38ff8de8fa356502eb9d2dae0c928217b8b5c8de1f09f5c9b6c8a96d8b9bd3afc49acbcd384a98a81fea713c859e1b09e214c60509517bb8fc2bc13c2 - languageName: node - linkType: hard - -"globals@npm:^13.19.0": - version: 13.20.0 - resolution: "globals@npm:13.20.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10/9df85cde2f0dce6ac9b3a5e08bec109d2f3b38ddd055a83867e0672c55704866d53ce6a4265859fa630624baadd46f50ca38602a13607ad86be853a8c179d3e7 - languageName: node - linkType: hard - -"globals@npm:^14.0.0": - version: 14.0.0 - resolution: "globals@npm:14.0.0" - checksum: 10/03939c8af95c6df5014b137cac83aa909090c3a3985caef06ee9a5a669790877af8698ab38007e4c0186873adc14c0b13764acc754b16a754c216cc56aa5f021 - languageName: node - linkType: hard - -"globals@npm:^15.12.0": - version: 15.12.0 - resolution: "globals@npm:15.12.0" - checksum: 10/07cac4ee7cc9befa7894be9b4d1a57f46eeedf9065939f39ffb875009394908eb7bac84147712cfd4bbabab5abc7ab98fc3a6d0fd881f9548fffa10ba2e4bf67 - languageName: node - linkType: hard - -"globalthis@npm:^1.0.3, globalthis@npm:^1.0.4": - version: 1.0.4 - resolution: "globalthis@npm:1.0.4" - dependencies: - define-properties: "npm:^1.2.1" - gopd: "npm:^1.0.1" - checksum: 10/1f1fd078fb2f7296306ef9dd51019491044ccf17a59ed49d375b576ca108ff37e47f3d29aead7add40763574a992f16a5367dd1e2173b8634ef18556ab719ac4 - languageName: node - linkType: hard - -"globby@npm:^10.0.1": - version: 10.0.2 - resolution: "globby@npm:10.0.2" - dependencies: - "@types/glob": "npm:^7.1.1" - array-union: "npm:^2.1.0" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.0.3" - glob: "npm:^7.1.3" - ignore: "npm:^5.1.1" - merge2: "npm:^1.2.3" - slash: "npm:^3.0.0" - checksum: 10/6974752014f0914b112957b4364b760af5f2fda4033ff29bedb830bbe278ff4c13ba64681741f3e62b1f12ea0f2d64bf02ac28534f9cbea4b90ed7e9cd6e954f - languageName: node - linkType: hard - -"globby@npm:^11.0.0, globby@npm:^11.0.3, globby@npm:^11.0.4, globby@npm:^11.1.0": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: "npm:^2.1.0" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.2.9" - ignore: "npm:^5.2.0" - merge2: "npm:^1.4.1" - slash: "npm:^3.0.0" - checksum: 10/288e95e310227bbe037076ea81b7c2598ccbc3122d87abc6dab39e1eec309aa14f0e366a98cdc45237ffcfcbad3db597778c0068217dcb1950fef6249104e1b1 - languageName: node - linkType: hard - -"globrex@npm:^0.1.2": - version: 0.1.2 - resolution: "globrex@npm:0.1.2" - checksum: 10/81ce62ee6f800d823d6b7da7687f841676d60ee8f51f934ddd862e4057316d26665c4edc0358d4340a923ac00a514f8b67c787e28fe693aae16350f4e60d55e9 - languageName: node - linkType: hard - -"gluegun@npm:5.2.0, gluegun@npm:^5.2.0": - version: 5.2.0 - resolution: "gluegun@npm:5.2.0" - dependencies: - apisauce: "npm:^2.1.5" - app-module-path: "npm:^2.2.0" - cli-table3: "npm:0.6.0" - colors: "npm:1.4.0" - cosmiconfig: "npm:7.0.1" - cross-spawn: "npm:7.0.3" - ejs: "npm:3.1.8" - enquirer: "npm:2.3.6" - execa: "npm:5.1.1" - fs-jetpack: "npm:4.3.1" - lodash.camelcase: "npm:^4.3.0" - lodash.kebabcase: "npm:^4.1.1" - lodash.lowercase: "npm:^4.3.0" - lodash.lowerfirst: "npm:^4.3.1" - lodash.pad: "npm:^4.5.1" - lodash.padend: "npm:^4.6.1" - lodash.padstart: "npm:^4.6.1" - lodash.repeat: "npm:^4.1.0" - lodash.snakecase: "npm:^4.1.1" - lodash.startcase: "npm:^4.4.0" - lodash.trim: "npm:^4.5.1" - lodash.trimend: "npm:^4.5.1" - lodash.trimstart: "npm:^4.5.1" - lodash.uppercase: "npm:^4.3.0" - lodash.upperfirst: "npm:^4.3.1" - ora: "npm:4.0.2" - pluralize: "npm:^8.0.0" - semver: "npm:7.3.5" - which: "npm:2.0.2" - yargs-parser: "npm:^21.0.0" - bin: - gluegun: bin/gluegun - checksum: 10/931f08d76430290679c8cdda98ca689d6df7a6639c36f98078b77dbe882aa9b728a6a14b5b30205c48d02efbb5d872ebf3751b129e0c0b9c88f6f1a10da15901 - languageName: node - linkType: hard - -"gopd@npm:^1.0.1": - version: 1.0.1 - resolution: "gopd@npm:1.0.1" - dependencies: - get-intrinsic: "npm:^1.1.3" - checksum: 10/5fbc7ad57b368ae4cd2f41214bd947b045c1a4be2f194a7be1778d71f8af9dbf4004221f3b6f23e30820eb0d052b4f819fe6ebe8221e2a3c6f0ee4ef173421ca - languageName: node - linkType: hard - -"got@npm:^12.1.0": - version: 12.6.1 - resolution: "got@npm:12.6.1" - dependencies: - "@sindresorhus/is": "npm:^5.2.0" - "@szmarczak/http-timer": "npm:^5.0.1" - cacheable-lookup: "npm:^7.0.0" - cacheable-request: "npm:^10.2.8" - decompress-response: "npm:^6.0.0" - form-data-encoder: "npm:^2.1.2" - get-stream: "npm:^6.0.1" - http2-wrapper: "npm:^2.1.10" - lowercase-keys: "npm:^3.0.0" - p-cancelable: "npm:^3.0.0" - responselike: "npm:^3.0.0" - checksum: 10/6c22f1449f4574d79a38e0eba0b753ce2f9030d61838a1ae1e25d3ff5b0db7916aa21023ac369c67d39d17f87bba9283a0b0cb88590de77926c968630aacae75 - languageName: node - linkType: hard - -"graceful-fs@npm:4.2.10": - version: 4.2.10 - resolution: "graceful-fs@npm:4.2.10" - checksum: 10/0c83c52b62c68a944dcfb9d66b0f9f10f7d6e3d081e8067b9bfdc9e5f3a8896584d576036f82915773189eec1eba599397fc620e75c03c0610fb3d67c6713c1a - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 - languageName: node - linkType: hard - -"grapheme-splitter@npm:^1.0.4": - version: 1.0.4 - resolution: "grapheme-splitter@npm:1.0.4" - checksum: 10/fdb2f51fd430ce881e18e44c4934ad30e59736e46213f7ad35ea5970a9ebdf7d0fe56150d15cc98230d55d2fd48c73dc6781494c38d8cf2405718366c36adb88 - languageName: node - linkType: hard - -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: 10/6dd60dba97007b21e3a829fab3f771803cc1292977fe610e240ea72afd67e5690ac9eeaafc4a99710e78962e5936ab5a460787c2a1180f1cb0ccfac37d29f897 - languageName: node - linkType: hard - -"graphql-config@npm:^5.1.1": - version: 5.1.3 - resolution: "graphql-config@npm:5.1.3" - dependencies: - "@graphql-tools/graphql-file-loader": "npm:^8.0.0" - "@graphql-tools/json-file-loader": "npm:^8.0.0" - "@graphql-tools/load": "npm:^8.0.0" - "@graphql-tools/merge": "npm:^9.0.0" - "@graphql-tools/url-loader": "npm:^8.0.0" - "@graphql-tools/utils": "npm:^10.0.0" - cosmiconfig: "npm:^8.1.0" - jiti: "npm:^2.0.0" - minimatch: "npm:^9.0.5" - string-env-interpolation: "npm:^1.0.1" - tslib: "npm:^2.4.0" - peerDependencies: - cosmiconfig-toml-loader: ^1.0.0 - graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - peerDependenciesMeta: - cosmiconfig-toml-loader: - optional: true - checksum: 10/9d37f5d424f302808102d118988878be5e4841ba1a06a865cdb9052b24e26eaa9923fb18163bf4f32102d87b3895c53e2ffcdebc1d651f04b56f93f5c38b83c3 - languageName: node - linkType: hard - -"graphql-import-node@npm:^0.0.5": - version: 0.0.5 - resolution: "graphql-import-node@npm:0.0.5" - peerDependencies: - graphql: "*" - checksum: 10/71624903d0853745e3fa48ac2aaa817a57dc3317ad2ff59d56bbeee4c384d0deb5c77719c535dae7a65324ad3113be25614871743e084d2c804acbe65205c9fc - languageName: node - linkType: hard - -"graphql-request@npm:^6.0.0": - version: 6.1.0 - resolution: "graphql-request@npm:6.1.0" - dependencies: - "@graphql-typed-document-node/core": "npm:^3.2.0" - cross-fetch: "npm:^3.1.5" - peerDependencies: - graphql: 14 - 16 - checksum: 10/a9c6f2eeaad972cdecb91437c15c785a282263fd0ef36f6fc5648e0945da488cdc10ab4736891ee1fbb928c7bf6e0bc8e0284df514254adefe02cc406ba5fce5 - languageName: node - linkType: hard - -"graphql-request@npm:^7.1.2": - version: 7.1.2 - resolution: "graphql-request@npm:7.1.2" - dependencies: - "@graphql-typed-document-node/core": "npm:^3.2.0" - peerDependencies: - graphql: 14 - 16 - checksum: 10/08e6612d88103ced678f210e4c1a50366ca882622c6383e974aa285963e33c24979fea62aaeb4380b2c1069abd640346d132509f1350f4d4decdf5122ed21e16 - languageName: node - linkType: hard - -"graphql-tag@npm:^2.11.0": - version: 2.12.6 - resolution: "graphql-tag@npm:2.12.6" - dependencies: - tslib: "npm:^2.1.0" - peerDependencies: - graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/23a2bc1d3fbeae86444204e0ac08522e09dc369559ba75768e47421a7321b59f352fb5b2c9a5c37d3cf6de890dca4e5ac47e740c7cc622e728572ecaa649089e - languageName: node - linkType: hard - -"graphql-ws@npm:5.13.1": - version: 5.13.1 - resolution: "graphql-ws@npm:5.13.1" - peerDependencies: - graphql: ">=0.11 <=16" - checksum: 10/5d804aa9c4e724e117f00ffc783c3c9701b55bdfd76489d69c2e5064a351cfa7117f85b24ffea1b7b0b96ad584f950b87588902d0db2ef532f229f106b142f24 - languageName: node - linkType: hard - -"graphql@npm:16.10.0": - version: 16.10.0 - resolution: "graphql@npm:16.10.0" - checksum: 10/d42cf81ddcf3a61dfb213217576bf33c326f15b02c4cee369b373dc74100cbdcdc4479b3b797e79b654dabd8fddf50ef65ff75420e9ce5596c02e21f24c9126a - languageName: node - linkType: hard - -"graphql@npm:^16.6.0, graphql@npm:^16.9.0": - version: 16.9.0 - resolution: "graphql@npm:16.9.0" - checksum: 10/5833f82bb6c31bec120bbf9cd400eda873e1bb7ef5c17974fa262cd82dc68728fda5d4cb859dc8aaa4c4fe4f6fe1103a9c47efc01a12c02ae5cb581d8e4029e2 - languageName: node - linkType: hard - -"gzip-size@npm:^6.0.0": - version: 6.0.0 - resolution: "gzip-size@npm:6.0.0" - dependencies: - duplexer: "npm:^0.1.2" - checksum: 10/2df97f359696ad154fc171dcb55bc883fe6e833bca7a65e457b9358f3cb6312405ed70a8da24a77c1baac0639906cd52358dc0ce2ec1a937eaa631b934c94194 - languageName: node - linkType: hard - -"h3@npm:^1.8.1, h3@npm:^1.8.2": - version: 1.9.0 - resolution: "h3@npm:1.9.0" - dependencies: - cookie-es: "npm:^1.0.0" - defu: "npm:^6.1.3" - destr: "npm:^2.0.2" - iron-webcrypto: "npm:^1.0.0" - radix3: "npm:^1.1.0" - ufo: "npm:^1.3.2" - uncrypto: "npm:^0.1.3" - unenv: "npm:^1.7.4" - checksum: 10/ec3bf587b4a1a1797747cdc50327eb5ead654947b4f570fb3c9fa08999b69c854209f65443f55f1647b8b7612e9c67633f467a3e22f392c6179c0e8f9687bbfb - languageName: node - linkType: hard - -"handle-thing@npm:^2.0.0": - version: 2.0.1 - resolution: "handle-thing@npm:2.0.1" - checksum: 10/441ec98b07f26819c70c702f6c874088eebeb551b242fe8fae4eab325746b82bf84ae7a1f6419547698accb3941fa26806c5f5f93c50e19f90e499065a711d61 - languageName: node - linkType: hard - -"handlebars@npm:^4.0.1, handlebars@npm:^4.7.7": - version: 4.7.7 - resolution: "handlebars@npm:4.7.7" - dependencies: - minimist: "npm:^1.2.5" - neo-async: "npm:^2.6.0" - source-map: "npm:^0.6.1" - uglify-js: "npm:^3.1.4" - wordwrap: "npm:^1.0.0" - dependenciesMeta: - uglify-js: - optional: true - bin: - handlebars: bin/handlebars - checksum: 10/617b1e689b7577734abc74564bdb8cdaddf8fd48ce72afdb489f426e9c60a7d6ee2a2707c023720c4059070128243c948bded8f2716e4543378033e3971b85ea - languageName: node - linkType: hard - -"hard-rejection@npm:^2.1.0": - version: 2.1.0 - resolution: "hard-rejection@npm:2.1.0" - checksum: 10/7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc - languageName: node - linkType: hard - -"hardhat-contract-sizer@npm:^2.10.0": - version: 2.10.0 - resolution: "hardhat-contract-sizer@npm:2.10.0" - dependencies: - chalk: "npm:^4.0.0" - cli-table3: "npm:^0.6.0" - strip-ansi: "npm:^6.0.0" - peerDependencies: - hardhat: ^2.0.0 - checksum: 10/2b3011fe5333c2f1dbcfa6c73dcb1c61da9e2e045775c24bb773fe5f3ac14e9923907fef0e61fc2897e82a61997ce74e73baadb7f69dfdeccc86ae878cf67792 - languageName: node - linkType: hard - -"hardhat-deploy-ethers@npm:^0.4.2": - version: 0.4.2 - resolution: "hardhat-deploy-ethers@npm:0.4.2" - peerDependencies: - "@nomicfoundation/hardhat-ethers": ^3.0.2 - hardhat: ^2.16.0 - hardhat-deploy: ^0.12.0 - checksum: 10/22efb24ba44ae3c1d20c09781cf7ec72b4dfd6f069eb00ce1a461fe6cf8523260050d6572d26ad718279161b74b7205e4307aeb20e45f6cbbbdccaf7b3b8c10b - languageName: node - linkType: hard - -"hardhat-deploy-tenderly@npm:^0.2.1": - version: 0.2.1 - resolution: "hardhat-deploy-tenderly@npm:0.2.1" - dependencies: - axios: "npm:^0.24.0" - js-yaml: "npm:^4.1.0" - peerDependencies: - hardhat: ^2.0.0 - hardhat-deploy: 0.x - checksum: 10/0c62f8b84e65541e98446b4d4098d1cfb0aa05dbf2eda3fb0825cc86be04939ab9c63aef3a62ed63b7d26f301f65a1bfa0b127e4a2a00a6136d87d1a3672d73f - languageName: node - linkType: hard - -"hardhat-deploy@npm:^1.0.4": - version: 1.0.4 - resolution: "hardhat-deploy@npm:1.0.4" - dependencies: - "@ethersproject/abi": "npm:^5.7.0" - "@ethersproject/abstract-signer": "npm:^5.7.0" - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/constants": "npm:^5.7.0" - "@ethersproject/contracts": "npm:^5.7.0" - "@ethersproject/providers": "npm:^5.7.2" - "@ethersproject/solidity": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - "@ethersproject/wallet": "npm:^5.7.0" - axios: "npm:^0.21.1" - chalk: "npm:^4.1.2" - chokidar: "npm:^3.5.2" - debug: "npm:^4.3.2" - enquirer: "npm:^2.3.6" - ethers: "npm:^5.7.0" - form-data: "npm:^4.0.0" - fs-extra: "npm:^10.0.0" - match-all: "npm:^1.2.6" - murmur-128: "npm:^0.2.1" - neoqs: "npm:^6.13.0" - zksync-ethers: "npm:^5.0.0" - checksum: 10/41b4784703a29a1690578a34fd8bb75c463347e7050c55ef39ca1d183fef5463bc8a1f679d57e5f7228524fc6abf8e499f8edbe1bcbc801abd10e3ac3299f9f3 - languageName: node - linkType: hard - -"hardhat-docgen@npm:^1.3.0": - version: 1.3.0 - resolution: "hardhat-docgen@npm:1.3.0" - dependencies: - css-loader: "npm:^6.5.1" - html-webpack-plugin: "npm:^5.5.0" - vue: "npm:^2.6.14" - vue-loader: "npm:^15.9.8" - vue-router: "npm:^3.5.3" - vue-template-compiler: "npm:^2.6.14" - webpack: "npm:^5.65.0" - peerDependencies: - hardhat: ^2.0.0 - checksum: 10/46c597d6e3243a9d4077ac958b2ead60500f9409f32061c5bc82bd354099ead18a769b30e3527695da354103ecb2d764516bfe7b7f4a701a37cc90389d854db8 - languageName: node - linkType: hard - -"hardhat-gas-reporter@npm:^2.3.0": - version: 2.3.0 - resolution: "hardhat-gas-reporter@npm:2.3.0" - dependencies: - "@ethersproject/abi": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/units": "npm:^5.7.0" - "@solidity-parser/parser": "npm:^0.20.1" - axios: "npm:^1.6.7" - brotli-wasm: "npm:^2.0.1" - chalk: "npm:4.1.2" - cli-table3: "npm:^0.6.3" - ethereum-cryptography: "npm:^2.1.3" - glob: "npm:^10.3.10" - jsonschema: "npm:^1.4.1" - lodash: "npm:^4.17.21" - markdown-table: "npm:2.0.0" - sha1: "npm:^1.1.1" - viem: "npm:^2.27.0" - peerDependencies: - hardhat: ^2.16.0 - checksum: 10/e884dfa075a56a4d9f4d37127ce14f1b04bf2e7b26c32842428b311641ea6892c42ecd1c46e42c5484f0d128a49527f67cfabf1af578eeaac716dfa111d781d0 - languageName: node - linkType: hard - -"hardhat-tracer@npm:^3.2.1": - version: 3.2.1 - resolution: "hardhat-tracer@npm:3.2.1" - dependencies: - chalk: "npm:^4.1.2" - debug: "npm:^4.3.4" - ethers: "npm:^5.6.1" - semver: "npm:^7.6.2" - peerDependencies: - chai: 4.x - hardhat: ">=2.22.5 <3.x" - checksum: 10/963afeb42c1ed30704877c3b521afc748e60042d218cef333fc11d3246f544267c303df0effc1e2a5cac9cc8a9ec744fda6ceb4e3fc156d3e17f4cfb766f6ab1 - languageName: node - linkType: hard - -"hardhat-watcher@npm:^2.5.0": - version: 2.5.0 - resolution: "hardhat-watcher@npm:2.5.0" - dependencies: - chokidar: "npm:^3.5.3" - peerDependencies: - hardhat: ^2.0.0 - checksum: 10/aa2eb49a8ffcf3bfa6beb740ee1d3f8cbb2690c9abead17acdc016be3a1f292347c464c3fa873fd5a247aae36d11c8fb4b4e1994f5c4b9303cc208a8869c1275 - languageName: node - linkType: hard - -"hardhat@npm:2.26.2": - version: 2.26.2 - resolution: "hardhat@npm:2.26.2" - dependencies: - "@ethereumjs/util": "npm:^9.1.0" - "@ethersproject/abi": "npm:^5.1.2" - "@nomicfoundation/edr": "npm:^0.11.3" - "@nomicfoundation/solidity-analyzer": "npm:^0.1.0" - "@sentry/node": "npm:^5.18.1" - adm-zip: "npm:^0.4.16" - aggregate-error: "npm:^3.0.0" - ansi-escapes: "npm:^4.3.0" - boxen: "npm:^5.1.2" - chokidar: "npm:^4.0.0" - ci-info: "npm:^2.0.0" - debug: "npm:^4.1.1" - enquirer: "npm:^2.3.0" - env-paths: "npm:^2.2.0" - ethereum-cryptography: "npm:^1.0.3" - find-up: "npm:^5.0.0" - fp-ts: "npm:1.19.3" - fs-extra: "npm:^7.0.1" - immutable: "npm:^4.0.0-rc.12" - io-ts: "npm:1.10.4" - json-stream-stringify: "npm:^3.1.4" - keccak: "npm:^3.0.2" - lodash: "npm:^4.17.11" - micro-eth-signer: "npm:^0.14.0" - mnemonist: "npm:^0.38.0" - mocha: "npm:^10.0.0" - p-map: "npm:^4.0.0" - picocolors: "npm:^1.1.0" - raw-body: "npm:^2.4.1" - resolve: "npm:1.17.0" - semver: "npm:^6.3.0" - solc: "npm:0.8.26" - source-map-support: "npm:^0.5.13" - stacktrace-parser: "npm:^0.1.10" - tinyglobby: "npm:^0.2.6" - tsort: "npm:0.0.1" - undici: "npm:^5.14.0" - uuid: "npm:^8.3.2" - ws: "npm:^7.4.6" - peerDependencies: - ts-node: "*" - typescript: "*" - peerDependenciesMeta: - ts-node: - optional: true - typescript: - optional: true - bin: - hardhat: internal/cli/bootstrap.js - checksum: 10/ef9f5f232264ed45a406a7053ccce71e67b0ce084de2de6fa2c24ff0bb1ec0d7b69f61769b3ac94a50445709b25bcf0d8ee135e1509e53331a3fea44d01cbb63 - languageName: node - linkType: hard - -"harmony-reflect@npm:^1.4.6": - version: 1.6.2 - resolution: "harmony-reflect@npm:1.6.2" - checksum: 10/69d30ebfb5dbd6ff0553725c7922404cf1dfe5390db1618298eed27fe6c9bd2f3f677727e9da969d21648f4a6a39041e2f46e99976be4385f9e34bac23058cd4 - languageName: node - linkType: hard - -"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": - version: 1.0.2 - resolution: "has-bigints@npm:1.0.2" - checksum: 10/4e0426c900af034d12db14abfece02ce7dbf53f2022d28af1a97913ff4c07adb8799476d57dc44fbca0e07d1dbda2a042c2928b1f33d3f09c15de0640a7fb81b - languageName: node - linkType: hard - -"has-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-flag@npm:1.0.0" - checksum: 10/ce3f8ae978e70f16e4bbe17d3f0f6d6c0a3dd3b62a23f97c91d0fda9ed8e305e13baf95cc5bee4463b9f25ac9f5255de113165c5fb285e01b8065b2ac079b301 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10/4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 10/261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad - languageName: node - linkType: hard - -"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": - version: 1.0.2 - resolution: "has-property-descriptors@npm:1.0.2" - dependencies: - es-define-property: "npm:^1.0.0" - checksum: 10/2d8c9ab8cebb572e3362f7d06139a4592105983d4317e68f7adba320fe6ddfc8874581e0971e899e633fd5f72e262830edce36d5a0bc863dad17ad20572484b2 - languageName: node - linkType: hard - -"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": - version: 1.0.3 - resolution: "has-proto@npm:1.0.3" - checksum: 10/0b67c2c94e3bea37db3e412e3c41f79d59259875e636ba471e94c009cdfb1fa82bf045deeffafc7dbb9c148e36cae6b467055aaa5d9fad4316e11b41e3ba551a - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: 10/464f97a8202a7690dadd026e6d73b1ceeddd60fe6acfd06151106f050303eaa75855aaa94969df8015c11ff7c505f196114d22f7386b4a471038da5874cf5e9b - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10/c74c5f5ceee3c8a5b8bc37719840dc3749f5b0306d818974141dda2471a1a2ca6c8e46b9d6ac222c5345df7a901c9b6f350b1e6d62763fec877e26609a401bfe - languageName: node - linkType: hard - -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 10/041b4293ad6bf391e21c5d85ed03f412506d6623786b801c4ab39e4e6ca54993f13201bceb544d92963f9e0024e6e7fbf0cb1d84c9d6b31cb9c79c8c990d13d8 - languageName: node - linkType: hard - -"hash-base@npm:^3.0.0": - version: 3.1.0 - resolution: "hash-base@npm:3.1.0" - dependencies: - inherits: "npm:^2.0.4" - readable-stream: "npm:^3.6.0" - safe-buffer: "npm:^5.2.0" - checksum: 10/26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc - languageName: node - linkType: hard - -"hash-base@npm:~3.0, hash-base@npm:~3.0.4": - version: 3.0.4 - resolution: "hash-base@npm:3.0.4" - dependencies: - inherits: "npm:^2.0.1" - safe-buffer: "npm:^5.0.1" - checksum: 10/878465a0dfcc33cce195c2804135352c590d6d10980adc91a9005fd377e77f2011256c2b7cfce472e3f2e92d561d1bf3228d2da06348a9017ce9a258b3b49764 - languageName: node - linkType: hard - -"hash-sum@npm:^1.0.2": - version: 1.0.2 - resolution: "hash-sum@npm:1.0.2" - checksum: 10/268553ba6c84333f502481d101a7d65cd39f61963544f12fc3ce60264718f471796dbc37348cee08c5529f04fafeba041886a4d35721e34d6440a48a42629283 - languageName: node - linkType: hard - -"hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": - version: 1.1.7 - resolution: "hash.js@npm:1.1.7" - dependencies: - inherits: "npm:^2.0.3" - minimalistic-assert: "npm:^1.0.1" - checksum: 10/0c89ee4006606a40f92df5cc3c263342e7fea68110f3e9ef032bd2083650430505db01b6b7926953489517d4027535e4fdc7f970412893d3031c361d3ec8f4b3 - languageName: node - linkType: hard - -"hashlru@npm:^2.3.0": - version: 2.3.0 - resolution: "hashlru@npm:2.3.0" - checksum: 10/38b3559e6fb9d19fa731edc52d8d7e72cd378f708dcb01cecd4a6ba0c52f06d7d06d6277249f5c43d9915d8dda9be31adad768a379eef188db213c3f2b09278d - languageName: node - linkType: hard - -"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10/7898a9c1788b2862cf0f9c345a6bec77ba4a0c0983c7f19d610c382343d4f98fa260686b225dfb1f88393a66679d2ec58ee310c1d6868c081eda7918f32cc70a - languageName: node - linkType: hard - -"hast-util-to-jsx-runtime@npm:^2.0.0": - version: 2.3.2 - resolution: "hast-util-to-jsx-runtime@npm:2.3.2" - dependencies: - "@types/estree": "npm:^1.0.0" - "@types/hast": "npm:^3.0.0" - "@types/unist": "npm:^3.0.0" - comma-separated-tokens: "npm:^2.0.0" - devlop: "npm:^1.0.0" - estree-util-is-identifier-name: "npm:^3.0.0" - hast-util-whitespace: "npm:^3.0.0" - mdast-util-mdx-expression: "npm:^2.0.0" - mdast-util-mdx-jsx: "npm:^3.0.0" - mdast-util-mdxjs-esm: "npm:^2.0.0" - property-information: "npm:^6.0.0" - space-separated-tokens: "npm:^2.0.0" - style-to-object: "npm:^1.0.0" - unist-util-position: "npm:^5.0.0" - vfile-message: "npm:^4.0.0" - checksum: 10/3d72f83e2d8c29adc6576d2c6b41479902fd51fac8cfb2b67c35fd68fcb9c25c274699442e4dee901a7ab926a0ff6851713ed5d92448ac09ae0f10daf293476c - languageName: node - linkType: hard - -"hast-util-whitespace@npm:^2.0.0": - version: 2.0.1 - resolution: "hast-util-whitespace@npm:2.0.1" - checksum: 10/ad5a61f4e81330413d4182247e158d77408a076994fbe7257574ea6489728bb4138c83e00482051c941973d4ed3049729afb35600debfc6d1d945c40453685f7 - languageName: node - linkType: hard - -"hast-util-whitespace@npm:^3.0.0": - version: 3.0.0 - resolution: "hast-util-whitespace@npm:3.0.0" - dependencies: - "@types/hast": "npm:^3.0.0" - checksum: 10/8c7e9eeb8131fc18702f3a42623eb6b0b09d470347aa8badacac70e6d91f79657ab8c6b57c4c6fee3658cff405fac30e816d1cdfb3ed1fbf6045d0a4555cf4d4 - languageName: node - linkType: hard - -"he@npm:^1.2.0": - version: 1.2.0 - resolution: "he@npm:1.2.0" - bin: - he: bin/he - checksum: 10/d09b2243da4e23f53336e8de3093e5c43d2c39f8d0d18817abfa32ce3e9355391b2edb4bb5edc376aea5d4b0b59d6a0482aab4c52bc02ef95751e4b818e847f1 - languageName: node - linkType: hard - -"header-case@npm:^2.0.4": - version: 2.0.4 - resolution: "header-case@npm:2.0.4" - dependencies: - capital-case: "npm:^1.0.4" - tslib: "npm:^2.0.3" - checksum: 10/571c83eeb25e8130d172218712f807c0b96d62b020981400bccc1503a7cf14b09b8b10498a962d2739eccf231d950e3848ba7d420b58a6acd2f9283439546cd9 - languageName: node - linkType: hard - -"heap@npm:>= 0.2.0": - version: 0.2.7 - resolution: "heap@npm:0.2.7" - checksum: 10/6374f6510af79bf47f2cfcee265bf608e6ed2b2694875974d1cb5654ddc98af05347dcf3a42ee9a7de318b576022d6f4d00fe06fa65a4a65c4c60638375eabfe - languageName: node - linkType: hard - -"help-me@npm:^5.0.0": - version: 5.0.0 - resolution: "help-me@npm:5.0.0" - checksum: 10/5f99bd91dae93d02867175c3856c561d7e3a24f16999b08f5fc79689044b938d7ed58457f4d8c8744c01403e6e0470b7896baa344d112b2355842fd935a75d69 - languageName: node - linkType: hard - -"hey-listen@npm:^1.0.8": - version: 1.0.8 - resolution: "hey-listen@npm:1.0.8" - checksum: 10/744b5f4c18c7cfb82b22bd22e1d300a9ac4eafe05a22e58fb87e48addfca8be00604d9aa006434ea02f9530990eb4b393ddb28659e2ab7f833ce873e32eb809c - languageName: node - linkType: hard - -"hmac-drbg@npm:^1.0.1": - version: 1.0.1 - resolution: "hmac-drbg@npm:1.0.1" - dependencies: - hash.js: "npm:^1.0.3" - minimalistic-assert: "npm:^1.0.0" - minimalistic-crypto-utils: "npm:^1.0.1" - checksum: 10/0298a1445b8029a69b713d918ecaa84a1d9f614f5857e0c6e1ca517abfa1357216987b2ee08cc6cc73ba82a6c6ddf2ff11b9717a653530ef03be599d4699b836 - languageName: node - linkType: hard - -"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": - version: 3.3.2 - resolution: "hoist-non-react-statics@npm:3.3.2" - dependencies: - react-is: "npm:^16.7.0" - checksum: 10/1acbe85f33e5a39f90c822ad4d28b24daeb60f71c545279431dc98c312cd28a54f8d64788e477fe21dc502b0e3cf58589ebe5c1ad22af27245370391c2d24ea6 - languageName: node - linkType: hard - -"homedir-polyfill@npm:^1.0.1": - version: 1.0.3 - resolution: "homedir-polyfill@npm:1.0.3" - dependencies: - parse-passwd: "npm:^1.0.0" - checksum: 10/18dd4db87052c6a2179d1813adea0c4bfcfa4f9996f0e226fefb29eb3d548e564350fa28ec46b0bf1fbc0a1d2d6922ceceb80093115ea45ff8842a4990139250 - languageName: node - linkType: hard - -"hoopy@npm:^0.1.4": - version: 0.1.4 - resolution: "hoopy@npm:0.1.4" - checksum: 10/7a73f1839a7fd6b953356770dff2c3cff813d97d899cddd75b348926c4df36059d987c06bedb57b1b7711504dba83d3b7b986f979a08b1e415da73a51fefa767 - languageName: node - linkType: hard - -"hosted-git-info@npm:^2.1.4": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: 10/96da7d412303704af41c3819207a09ea2cab2de97951db4cf336bb8bce8d8e36b9a6821036ad2e55e67d3be0af8f967a7b57981203fbfb88bc05cd803407b8c3 - languageName: node - linkType: hard - -"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": - version: 4.1.0 - resolution: "hosted-git-info@npm:4.1.0" - dependencies: - lru-cache: "npm:^6.0.0" - checksum: 10/4dc67022b7ecb12829966bd731fb9a5f14d351547aafc6520ef3c8e7211f4f0e69452d24e29eae3d9b17df924d660052e53d8ca321cf3008418fb7e6c7c47d6f - languageName: node - linkType: hard - -"hpack.js@npm:^2.1.6": - version: 2.1.6 - resolution: "hpack.js@npm:2.1.6" - dependencies: - inherits: "npm:^2.0.1" - obuf: "npm:^1.0.0" - readable-stream: "npm:^2.0.1" - wbuf: "npm:^1.1.0" - checksum: 10/6910e4b9d943a78fd8e84ac42729fdab9bd406789d6204ad160af9dc5aa4750fc01f208249bf7116c11dc0678207a387b4ade24e4b628b95385b251ceeeb719c - languageName: node - linkType: hard - -"html-encoding-sniffer@npm:^2.0.1": - version: 2.0.1 - resolution: "html-encoding-sniffer@npm:2.0.1" - dependencies: - whatwg-encoding: "npm:^1.0.5" - checksum: 10/70365109cad69ee60376715fe0a56dd9ebb081327bf155cda93b2c276976c79cbedee2b988de6b0aefd0671a5d70597a35796e6e7d91feeb2c0aba46df059630 - languageName: node - linkType: hard - -"html-encoding-sniffer@npm:^3.0.0": - version: 3.0.0 - resolution: "html-encoding-sniffer@npm:3.0.0" - dependencies: - whatwg-encoding: "npm:^2.0.0" - checksum: 10/707a812ec2acaf8bb5614c8618dc81e2fb6b4399d03e95ff18b65679989a072f4e919b9bef472039301a1bbfba64063ba4c79ea6e851c653ac9db80dbefe8fe5 - languageName: node - linkType: hard - -"html-entities@npm:^2.1.0, html-entities@npm:^2.3.2": - version: 2.3.6 - resolution: "html-entities@npm:2.3.6" - checksum: 10/36a6c226f539a4a852c112e546f05987fcd4b159577fb081fa45a6b1ee0c0834c1e855c2ea264626d18038de0aa54d23e519bc08773dea3830b43d41c2165648 - languageName: node - linkType: hard - -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: 10/034d74029dcca544a34fb6135e98d427acd73019796ffc17383eaa3ec2fe1c0471dcbbc8f8ed39e46e86d43ccd753a160631615e4048285e313569609b66d5b7 - languageName: node - linkType: hard - -"html-minifier-terser@npm:^6.0.2": - version: 6.1.0 - resolution: "html-minifier-terser@npm:6.1.0" - dependencies: - camel-case: "npm:^4.1.2" - clean-css: "npm:^5.2.2" - commander: "npm:^8.3.0" - he: "npm:^1.2.0" - param-case: "npm:^3.0.4" - relateurl: "npm:^0.2.7" - terser: "npm:^5.10.0" - bin: - html-minifier-terser: cli.js - checksum: 10/a244fa944e002b57c66cc829a3f2dfdb9514b1833c2d838ada624964bf8c0afaf61d36c371758c7e44dedae95cea740a84d8d1067b916ed204f35175184d0e27 - languageName: node - linkType: hard - -"html-parse-stringify@npm:^3.0.1": - version: 3.0.1 - resolution: "html-parse-stringify@npm:3.0.1" - dependencies: - void-elements: "npm:3.1.0" - checksum: 10/8743b76cc50e46d1956c1ad879d18eb9613b0d2d81e24686d633f9f69bb26b84676f64a926973de793cca479997017a63219278476d617b6c42d68246d7c07fe - languageName: node - linkType: hard - -"html-to-text@npm:^8.2.1": - version: 8.2.1 - resolution: "html-to-text@npm:8.2.1" - dependencies: - "@selderee/plugin-htmlparser2": "npm:^0.6.0" - deepmerge: "npm:^4.2.2" - he: "npm:^1.2.0" - htmlparser2: "npm:^6.1.0" - minimist: "npm:^1.2.6" - selderee: "npm:^0.6.0" - bin: - html-to-text: bin/cli.js - checksum: 10/534eb1443c304ee1406a815c61193889e7bfcf74533b6b74881c14b4712d0d26dd57e2a7f1e09cf9af1cc53cac38860f081aa08ced1ee3ef82264e000f084794 - languageName: node - linkType: hard - -"html-url-attributes@npm:^3.0.0": - version: 3.0.1 - resolution: "html-url-attributes@npm:3.0.1" - checksum: 10/494074c2f730c5c0e517aa1b10111fb36732534a2d2b70427582c4a615472b47da472cf3a17562cc653826d378d20960f2783e0400f4f7cf0c3c2d91c6188d13 - languageName: node - linkType: hard - -"html-webpack-plugin@npm:^5.5.0": - version: 5.5.3 - resolution: "html-webpack-plugin@npm:5.5.3" - dependencies: - "@types/html-minifier-terser": "npm:^6.0.0" - html-minifier-terser: "npm:^6.0.2" - lodash: "npm:^4.17.21" - pretty-error: "npm:^4.0.0" - tapable: "npm:^2.0.0" - peerDependencies: - webpack: ^5.20.0 - checksum: 10/01d302a434e3db9f0e2db370f06300fb613de0fb8bdcafd4693e44c2528b8608621e5e7ca5d8302446db3f20c5f8875f1f675926d469b13ebab139954d241055 - languageName: node - linkType: hard - -"htmlparser2@npm:^6.1.0": - version: 6.1.0 - resolution: "htmlparser2@npm:6.1.0" - dependencies: - domelementtype: "npm:^2.0.1" - domhandler: "npm:^4.0.0" - domutils: "npm:^2.5.2" - entities: "npm:^2.0.0" - checksum: 10/c9c34b0b722f5923c4ae05e59268aeb768582152969e3338a1cd3342b87f8dd2c0420f4745e46d2fd87f1b677ea2f314c3a93436ed8831905997e6347e081a5d - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 10/362d5ed66b12ceb9c0a328fb31200b590ab1b02f4a254a697dc796850cc4385603e75f53ec59f768b2dad3bfa1464bd229f7de278d2899a0e3beffc634b6683f - languageName: node - linkType: hard - -"http-call@npm:^5.2.2": - version: 5.3.0 - resolution: "http-call@npm:5.3.0" - dependencies: - content-type: "npm:^1.0.4" - debug: "npm:^4.1.1" - is-retry-allowed: "npm:^1.1.0" - is-stream: "npm:^2.0.0" - parse-json: "npm:^4.0.0" - tunnel-agent: "npm:^0.6.0" - checksum: 10/458c890c95573db831daa2346ff98b1630543c9b2fc3cfc432e1fb6968d6eeb6a5abe87e551f0fc3bce1972215a69fd133b8d25ff8cff2276c2c153d405b3d1f - languageName: node - linkType: hard - -"http-deceiver@npm:^1.2.7": - version: 1.2.7 - resolution: "http-deceiver@npm:1.2.7" - checksum: 10/9ae293b0acbfad6ed45d52c1f85f58ab062465872fd9079c80d78c6527634002d73c2a9d8c0296cc12d178a0b689bb5291d9979aad3ce71ab17a7517588adbf7 - languageName: node - linkType: hard - -"http-errors@npm:2.0.0": - version: 2.0.0 - resolution: "http-errors@npm:2.0.0" - dependencies: - depd: "npm:2.0.0" - inherits: "npm:2.0.4" - setprototypeof: "npm:1.2.0" - statuses: "npm:2.0.1" - toidentifier: "npm:1.0.1" - checksum: 10/0e7f76ee8ff8a33e58a3281a469815b893c41357378f408be8f6d4aa7d1efafb0da064625518e7078381b6a92325949b119dc38fcb30bdbc4e3a35f78c44c439 - languageName: node - linkType: hard - -"http-errors@npm:~1.6.2": - version: 1.6.3 - resolution: "http-errors@npm:1.6.3" - dependencies: - depd: "npm:~1.1.2" - inherits: "npm:2.0.3" - setprototypeof: "npm:1.1.0" - statuses: "npm:>= 1.4.0 < 2" - checksum: 10/e48732657ea0b4a09853d2696a584fa59fa2a8c1ba692af7af3137b5491a997d7f9723f824e7e08eb6a87098532c09ce066966ddf0f9f3dd30905e52301acadb - languageName: node - linkType: hard - -"http-parser-js@npm:>=0.5.1": - version: 0.5.8 - resolution: "http-parser-js@npm:0.5.8" - checksum: 10/2a78a567ee6366dae0129d819b799dce1f95ec9732c5ab164a78ee69804ffb984abfa0660274e94e890fc54af93546eb9f12b6d10edbaed017e2d41c29b7cf29 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^4.0.1": - version: 4.0.1 - resolution: "http-proxy-agent@npm:4.0.1" - dependencies: - "@tootallnate/once": "npm:1" - agent-base: "npm:6" - debug: "npm:4" - checksum: 10/2e17f5519f2f2740b236d1d14911ea4be170c67419dc15b05ea9a860a22c5d9c6ff4da270972117067cc2cefeba9df5f7cd5e7818fdc6ae52b6acf2a533e5fdd - languageName: node - linkType: hard - -"http-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "http-proxy-agent@npm:5.0.0" - dependencies: - "@tootallnate/once": "npm:2" - agent-base: "npm:6" - debug: "npm:4" - checksum: 10/5ee19423bc3e0fd5f23ce991b0755699ad2a46a440ce9cec99e8126bb98448ad3479d2c0ea54be5519db5b19a4ffaa69616bac01540db18506dd4dac3dc418f0 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "http-proxy-agent@npm:7.0.0" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10/dbaaf3d9f3fc4df4a5d7ec45d456ec50f575240b557160fa63427b447d1f812dd7fe4a4f17d2e1ba003d231f07edf5a856ea6d91cb32d533062ff20a7803ccac - languageName: node - linkType: hard - -"http-proxy-middleware@npm:^2.0.3": - version: 2.0.6 - resolution: "http-proxy-middleware@npm:2.0.6" - dependencies: - "@types/http-proxy": "npm:^1.17.8" - http-proxy: "npm:^1.18.1" - is-glob: "npm:^4.0.1" - is-plain-obj: "npm:^3.0.0" - micromatch: "npm:^4.0.2" - peerDependencies: - "@types/express": ^4.17.13 - peerDependenciesMeta: - "@types/express": - optional: true - checksum: 10/768e7ae5a422bbf4b866b64105b4c2d1f468916b7b0e9c96750551c7732383069b411aa7753eb7b34eab113e4f77fb770122cb7fb9c8ec87d138d5ddaafda891 - languageName: node - linkType: hard - -"http-proxy@npm:^1.18.1": - version: 1.18.1 - resolution: "http-proxy@npm:1.18.1" - dependencies: - eventemitter3: "npm:^4.0.0" - follow-redirects: "npm:^1.0.0" - requires-port: "npm:^1.0.0" - checksum: 10/2489e98aba70adbfd8b9d41ed1ff43528be4598c88616c558b109a09eaffe4bb35e551b6c75ac42ed7d948bb7530a22a2be6ef4f0cecacb5927be139f4274594 - languageName: node - linkType: hard - -"http-shutdown@npm:^1.2.2": - version: 1.2.2 - resolution: "http-shutdown@npm:1.2.2" - checksum: 10/1c99b575b1a7ebd749950e7f59410348723638808336063321d89588b7f7b548d61c8e3566af0f1f4f961d941c758677d062d2289bc63356ead143da4d8f3daf - languageName: node - linkType: hard - -"http2-wrapper@npm:^2.1.10": - version: 2.2.1 - resolution: "http2-wrapper@npm:2.2.1" - dependencies: - quick-lru: "npm:^5.1.1" - resolve-alpn: "npm:^1.2.0" - checksum: 10/e7a5ac6548318e83fc0399cd832cdff6bbf902b165d211cad47a56ee732922e0aa1107246dd884b12532a1c4649d27c4d44f2480911c65202e93c90bde8fa29d - languageName: node - linkType: hard - -"https-browserify@npm:^1.0.0": - version: 1.0.0 - resolution: "https-browserify@npm:1.0.0" - checksum: 10/2d707c457319e1320adf0e7556174c190865fb345b6a183f033cee440f73221dbe7fa3f0adcffb1e6b0664726256bd44771a82e50fe6c66976c10b237100536a - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0, https-proxy-agent@npm:^5.0.1": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: "npm:6" - debug: "npm:4" - checksum: 10/f0dce7bdcac5e8eaa0be3c7368bb8836ed010fb5b6349ffb412b172a203efe8f807d9a6681319105ea1b6901e1972c7b5ea899672a7b9aad58309f766dcbe0df - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "https-proxy-agent@npm:7.0.0" - dependencies: - agent-base: "npm:^7.0.2" - debug: "npm:4" - checksum: 10/82faa9c9fc6093cdec13a248a4b5a607ea5cc9e0f9a2416d206dc1563dbd6816fb59ca06b5a882a2cb908d97e2f127db2ecbbded1eb261422f6b146ccc563f58 - languageName: node - linkType: hard - -"human-id@npm:^4.1.1": - version: 4.1.1 - resolution: "human-id@npm:4.1.1" - bin: - human-id: dist/cli.js - checksum: 10/84fef1edd470fc155a34161107beed8baf77bafd20bf515c3fadfbce3690ecc9aa0bacf3fcf4cf9add3c274772ead3ef64aa6531374538ffebe8129fccfb0015 - languageName: node - linkType: hard - -"human-signals@npm:^2.1.0": - version: 2.1.0 - resolution: "human-signals@npm:2.1.0" - checksum: 10/df59be9e0af479036798a881d1f136c4a29e0b518d4abb863afbd11bf30efa3eeb1d0425fc65942dcc05ab3bf40205ea436b0ff389f2cd20b75b8643d539bf86 - languageName: node - linkType: hard - -"human-signals@npm:^4.3.0": - version: 4.3.1 - resolution: "human-signals@npm:4.3.1" - checksum: 10/fa59894c358fe9f2b5549be2fb083661d5e1dff618d3ac70a49ca73495a72e873fbf6c0878561478e521e17d498292746ee391791db95ffe5747bfb5aef8765b - languageName: node - linkType: hard - -"human-signals@npm:^5.0.0": - version: 5.0.0 - resolution: "human-signals@npm:5.0.0" - checksum: 10/30f8870d831cdcd2d6ec0486a7d35d49384996742052cee792854273fa9dd9e7d5db06bb7985d4953e337e10714e994e0302e90dc6848069171b05ec836d65b0 - languageName: node - linkType: hard - -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: "npm:^2.0.0" - checksum: 10/9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 - languageName: node - linkType: hard - -"husky@npm:^8.0.3": - version: 8.0.3 - resolution: "husky@npm:8.0.3" - bin: - husky: lib/bin.js - checksum: 10/b754cf70fdc97c3b60fec5b80056b9c11436464953b1691bf2b5dcf0081fb6685d2c5f47abb8b2b1c49f504aabea5321fdd6496f8b755d9f6e7525a493406abb - languageName: node - linkType: hard - -"hyphenate-style-name@npm:^1.0.3": - version: 1.0.4 - resolution: "hyphenate-style-name@npm:1.0.4" - checksum: 10/d37883e6b7e1be62e1ddae29cac83fa59fb93c068bc8eb1561585439adbad91dcf7e264ee2a82c4378fc58049f7bd853544a4a81bf00d4aff717f641052323e7 - languageName: node - linkType: hard - -"i18next@npm:^24.2.3": - version: 24.2.3 - resolution: "i18next@npm:24.2.3" - dependencies: - "@babel/runtime": "npm:^7.26.10" - peerDependencies: - typescript: ^5 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/6c73d964f2a98b1aa2c2717fe6da66fc265bcbbc5fcd52b2bfff51ff013d30d4f7d7449c4eb7f464d27af43e2e73f2e7f1d46a144d731bd3bdb1385d4c199e4c - languageName: node - linkType: hard - -"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3" - checksum: 10/6d3a2dac6e5d1fb126d25645c25c3a1209f70cceecc68b8ef51ae0da3cdc078c151fade7524a30b12a3094926336831fca09c666ef55b37e2c69638b5d6bd2e3 - languageName: node - linkType: hard - -"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10/24e3292dd3dadaa81d065c6f8c41b274a47098150d444b96e5f53b4638a9a71482921ea6a91a1f59bb71d9796de25e04afd05919fa64c360347ba65d3766f10f - languageName: node - linkType: hard - -"icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": - version: 5.1.0 - resolution: "icss-utils@npm:5.1.0" - peerDependencies: - postcss: ^8.1.0 - checksum: 10/5c324d283552b1269cfc13a503aaaa172a280f914e5b81544f3803bc6f06a3b585fb79f66f7c771a2c052db7982c18bf92d001e3b47282e3abbbb4c4cc488d68 - languageName: node - linkType: hard - -"idb-keyval@npm:^6.2.1": - version: 6.2.1 - resolution: "idb-keyval@npm:6.2.1" - checksum: 10/9a1416ff5e2ceff3832f5645518f438833a5ff6ee316fe3ec111d580db120425991d64d8098a847be7541bbbb7cc941984b4d0d62d541c39f7a0f415594837c2 - languageName: node - linkType: hard - -"idb@npm:^7.0.1": - version: 7.1.1 - resolution: "idb@npm:7.1.1" - checksum: 10/8e33eaebf21055129864acb89932e0739b8c96788e559df24c253ce114d8c6deb977a3b30ea47a9bb8a2ae8a55964861c3df65f360d95745e341cee40d5c17f4 - languageName: node - linkType: hard - -"identity-obj-proxy@npm:^3.0.0": - version: 3.0.0 - resolution: "identity-obj-proxy@npm:3.0.0" - dependencies: - harmony-reflect: "npm:^1.4.6" - checksum: 10/66fe4d2ffc67655174f6abe100ab3b36d2f5e4de5b28a7c3121e5f51bd4e7c8c1bee4f9a41ce0586ace57fb63bfedbfc39508b7cb43b9e3ed6dc42f762158b4e - languageName: node - linkType: hard - -"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": - version: 1.2.1 - resolution: "ieee754@npm:1.2.1" - checksum: 10/d9f2557a59036f16c282aaeb107832dc957a93d73397d89bbad4eb1130560560eb695060145e8e6b3b498b15ab95510226649a0b8f52ae06583575419fe10fc4 - languageName: node - linkType: hard - -"ignore@npm:^5.1.1, ignore@npm:^5.2.0, ignore@npm:^5.2.4, ignore@npm:^5.3.1": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98 - languageName: node - linkType: hard - -"immediate@npm:~3.0.5": - version: 3.0.6 - resolution: "immediate@npm:3.0.6" - checksum: 10/f9b3486477555997657f70318cc8d3416159f208bec4cca3ff3442fd266bc23f50f0c9bd8547e1371a6b5e82b821ec9a7044a4f7b944798b25aa3cc6d5e63e62 - languageName: node - linkType: hard - -"immer@npm:^9.0.7": - version: 9.0.21 - resolution: "immer@npm:9.0.21" - checksum: 10/8455d6b4dc8abfe40f06eeec9bcc944d147c81279424c0f927a4d4905ae34e5af19ab6da60bcc700c14f51c452867d7089b3b9236f5a9a2248e39b4a09ee89de - languageName: node - linkType: hard - -"immutable-json-patch@npm:^6.0.1": - version: 6.0.1 - resolution: "immutable-json-patch@npm:6.0.1" - checksum: 10/b290571b392f6166ffc2d54324266092d9f0a247b15f5592c9b1f40b5c7c0f5cb665173154b84dd184e7b9c2b5c875905ab871b63e8121c5dab7c9edd2f214f8 - languageName: node - linkType: hard - -"immutable@npm:5.0.3": - version: 5.0.3 - resolution: "immutable@npm:5.0.3" - checksum: 10/9aca1c783951bb204d7036fbcefac6dd42e7c8ad77ff54b38c5fc0924e6e16ce2d123c95db47c1170ba63dd3f6fc7aa74a29be7adef984031936c4cd1e9e8554 - languageName: node - linkType: hard - -"immutable@npm:^4.0.0-rc.12": - version: 4.3.5 - resolution: "immutable@npm:4.3.5" - checksum: 10/dbc1b8c808b9aa18bfce2e0c7bc23714a47267bc311f082145cc9220b2005e9b9cd2ae78330f164a19266a2b0f78846c60f4f74893853ac16fd68b5ae57092d2 - languageName: node - linkType: hard - -"immutable@npm:~3.7.6": - version: 3.7.6 - resolution: "immutable@npm:3.7.6" - checksum: 10/4f2cc2e0b6839befa2ea9d3ca478971a88ca78cb66c2b077416e5d5203f8e168bffb78284dd45fe1b427a4a8ac37194dfa3cd3e50b39529a00cca387bd6ac955 - languageName: node - linkType: hard - -"import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: "npm:^1.0.0" - resolve-from: "npm:^4.0.0" - checksum: 10/2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa - languageName: node - linkType: hard - -"import-from@npm:4.0.0": - version: 4.0.0 - resolution: "import-from@npm:4.0.0" - checksum: 10/1fa29c05b048da18914e91d9a529e5d9b91774bebbfab10e53f59bcc1667917672b971cf102fee857f142e5e433ce69fa1f0a596e1c7d82f9947a5ec352694b9 - languageName: node - linkType: hard - -"import-lazy@npm:~4.0.0": - version: 4.0.0 - resolution: "import-lazy@npm:4.0.0" - checksum: 10/943309cc8eb01ada12700448c288b0384f77a1bc33c7e00fa4cb223c665f467a13ce9aaceb8d2e4cf586b07c1d2828040263dcc069873ce63cfc2ac6fd087971 - languageName: node - linkType: hard - -"import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: "npm:^4.2.0" - resolve-cwd: "npm:^3.0.0" - bin: - import-local-fixture: fixtures/cli.js - checksum: 10/bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd - languageName: node - linkType: hard - -"imul@npm:^1.0.0": - version: 1.0.1 - resolution: "imul@npm:1.0.1" - checksum: 10/6c2af3d5f09e2135e14d565a2c108412b825b221eb2c881f9130467f2adccf7ae201773ae8bcf1be169e2d090567a1fdfa9cf20d3b7da7b9cecb95b920ff3e52 - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 10/2d30b157a91fe1c1d7c6f653cbf263f039be6c5bfa959245a16d4ee191fc0f2af86c08545b6e6beeb041c56b574d2d5b9f95343d378ab49c0f37394d541e7fc8 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 10/cd3f5cbc9ca2d624c6a1f53f12e6b341659aba0e2d3254ae2b4464aaea8b4294cdb09616abbc59458f980531f2429784ed6a420d48d245bcad0811980c9efae9 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10/d2ebd65441a38c8336c223d1b80b921b9fa737e37ea466fd7e253cb000c64ae1f17fa59e68130ef5bda92cfd8d36b83d37dab0eb0a4558bcfec8e8cdfd2dcb67 - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 10/cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 - languageName: node - linkType: hard - -"inherits@npm:2.0.3": - version: 2.0.3 - resolution: "inherits@npm:2.0.3" - checksum: 10/8771303d66c51be433b564427c16011a8e3fbc3449f1f11ea50efb30a4369495f1d0e89f0fc12bdec0bd7e49102ced5d137e031d39ea09821cb3c717fcf21e69 - languageName: node - linkType: hard - -"ini@npm:^1.3.2, ini@npm:^1.3.4, ini@npm:^1.3.5, ini@npm:~1.3.0": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: 10/314ae176e8d4deb3def56106da8002b462221c174ddb7ce0c49ee72c8cd1f9044f7b10cc555a7d8850982c3b9ca96fc212122749f5234bc2b6fb05fb942ed566 - languageName: node - linkType: hard - -"inline-style-parser@npm:0.1.1": - version: 0.1.1 - resolution: "inline-style-parser@npm:0.1.1" - checksum: 10/e661f4fb6824a41076c4d23358e8b581fd3410fbfb9baea4cb542a85448b487691c3b9bbb58ad73a95613041ca616f059595f19cadd0c22476a1fffa79842b48 - languageName: node - linkType: hard - -"inline-style-parser@npm:0.2.4": - version: 0.2.4 - resolution: "inline-style-parser@npm:0.2.4" - checksum: 10/80814479d1f3c9cbd102f9de4cd6558cf43cc2e48640e81c4371c3634f1e8b6dfeb2f21063cfa31d46cc83e834c20cd59ed9eeed9bfd45ef5bc02187ad941faf - languageName: node - linkType: hard - -"inline-style-prefixer@npm:^7.0.1": - version: 7.0.1 - resolution: "inline-style-prefixer@npm:7.0.1" - dependencies: - css-in-js-utils: "npm:^3.1.0" - checksum: 10/a430c962693f32a36bcec0124c9798bcf3725bb90468d493108c0242446a9cc92ff1967bdf99b6ce5331e7a9b75e6836bc9ba1b3d4756876b8ef48036acb2509 - languageName: node - linkType: hard - -"inquirer@npm:^8.0.0": - version: 8.2.5 - resolution: "inquirer@npm:8.2.5" - dependencies: - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.1.1" - cli-cursor: "npm:^3.1.0" - cli-width: "npm:^3.0.0" - external-editor: "npm:^3.0.3" - figures: "npm:^3.0.0" - lodash: "npm:^4.17.21" - mute-stream: "npm:0.0.8" - ora: "npm:^5.4.1" - run-async: "npm:^2.4.0" - rxjs: "npm:^7.5.5" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - through: "npm:^2.3.6" - wrap-ansi: "npm:^7.0.0" - checksum: 10/50a240dfeaca37a14e6a6d11d7d6f7da947be3a9fe1e34ac41db6a49fc27022e7b3875ebe8ccd739497359808694488f3509792cc986f9ac48c43135f4e14172 - languageName: node - linkType: hard - -"interface-datastore@npm:^8.3.1": - version: 8.3.1 - resolution: "interface-datastore@npm:8.3.1" - dependencies: - interface-store: "npm:^6.0.0" - uint8arrays: "npm:^5.1.0" - checksum: 10/23ff57c1c9fc1ceb0bf147921a6e56f07972f537cd7340a84406c68d44244981ddf1b411677ee9ee7710f9c9f5aaf0b1cfe08fe1de15ffb2333f84814f870a7b - languageName: node - linkType: hard - -"interface-store@npm:^6.0.0": - version: 6.0.2 - resolution: "interface-store@npm:6.0.2" - checksum: 10/4689c1476061efb2c0ef4b1eccf70c8cba48eec2acf8f8bab189ef14466f45d2f0d57c2622bcdfde229249c629ccd69ea9c16c20d706f049d6a1e4a7841fac39 - languageName: node - linkType: hard - -"internal-slot@npm:^1.0.7": - version: 1.0.7 - resolution: "internal-slot@npm:1.0.7" - dependencies: - es-errors: "npm:^1.3.0" - hasown: "npm:^2.0.0" - side-channel: "npm:^1.0.4" - checksum: 10/3e66720508831153ecf37d13def9f6856f9f2960989ec8a0a0476c98f887fca9eff0163127466485cb825c900c2d6fc601aa9117b7783b90ffce23a71ea5d053 - languageName: node - linkType: hard - -"interpret@npm:^1.0.0": - version: 1.4.0 - resolution: "interpret@npm:1.4.0" - checksum: 10/5beec568d3f60543d0f61f2c5969d44dffcb1a372fe5abcdb8013968114d4e4aaac06bc971a4c9f5bd52d150881d8ebad72a8c60686b1361f5f0522f39c0e1a3 - languageName: node - linkType: hard - -"invariant@npm:^2.2.4": - version: 2.2.4 - resolution: "invariant@npm:2.2.4" - dependencies: - loose-envify: "npm:^1.0.0" - checksum: 10/cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 - languageName: node - linkType: hard - -"io-ts@npm:1.10.4": - version: 1.10.4 - resolution: "io-ts@npm:1.10.4" - dependencies: - fp-ts: "npm:^1.0.0" - checksum: 10/d68cb0928b37485cf631c923628dd189784d3dbbcb2d681d86f5c64b9b0321aa33bd2ff271381ac54a279aec5935ff7a743264c858b5172e83b6a9f0cbafc7d1 - languageName: node - linkType: hard - -"ioredis@npm:^5.3.2": - version: 5.3.2 - resolution: "ioredis@npm:5.3.2" - dependencies: - "@ioredis/commands": "npm:^1.1.1" - cluster-key-slot: "npm:^1.1.0" - debug: "npm:^4.3.4" - denque: "npm:^2.1.0" - lodash.defaults: "npm:^4.2.0" - lodash.isarguments: "npm:^3.1.0" - redis-errors: "npm:^1.2.0" - redis-parser: "npm:^3.0.0" - standard-as-callback: "npm:^2.1.0" - checksum: 10/0140f055ef81d28e16ca8400b99dabb9ce82009f54afd83cba952c7d0c5d736841e43247765b8ee1af1f02843531c5b8df240af18bd3d7e2ca3d60b36e76213f - languageName: node - linkType: hard - -"ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: 10/1270b11e534a466fb4cf4426cbcc3a907c429389f7f4e4e3b288b42823562e88d6a509ceda8141a507de147ca506141f745005c0aa144569d94cf24a54eb52bc - languageName: node - linkType: hard - -"ipaddr.js@npm:1.9.1": - version: 1.9.1 - resolution: "ipaddr.js@npm:1.9.1" - checksum: 10/864d0cced0c0832700e9621913a6429ccdc67f37c1bd78fb8c6789fff35c9d167cb329134acad2290497a53336813ab4798d2794fd675d5eb33b5fdf0982b9ca - languageName: node - linkType: hard - -"ipaddr.js@npm:^2.0.1": - version: 2.1.0 - resolution: "ipaddr.js@npm:2.1.0" - checksum: 10/42c16d95cf451399707c2c46e605b88db1ea2b1477b25774b5a7ee96852b0bb1efdc01adbff01fedbe702ff246e1aca5c5e915a6f5a1f1485233a5f7c2eb73c2 - languageName: node - linkType: hard - -"ipfs-unixfs@npm:^11.1.4": - version: 11.2.0 - resolution: "ipfs-unixfs@npm:11.2.0" - dependencies: - protons-runtime: "npm:^5.5.0" - uint8arraylist: "npm:^2.4.8" - checksum: 10/7eaa32eb505d734254e06296937aa0c507b246c54ecc7518046693c1ca937c25029178ead81bf8135069e17521d3910c7a6abd420af99f35a297fece87aa599d - languageName: node - linkType: hard - -"iron-webcrypto@npm:^1.0.0": - version: 1.0.0 - resolution: "iron-webcrypto@npm:1.0.0" - checksum: 10/1af9fc319c21d44023e08b7019b4c5d0b58f32c6fccab6e4885522b3efa2f6c17491f9caccba74d816f04b4af3148f5bd91a9b506b6d84c2db6ac0a678fbd88a - languageName: node - linkType: hard - -"is-absolute@npm:^1.0.0": - version: 1.0.0 - resolution: "is-absolute@npm:1.0.0" - dependencies: - is-relative: "npm:^1.0.0" - is-windows: "npm:^1.0.1" - checksum: 10/9d16b2605eda3f3ce755410f1d423e327ad3a898bcb86c9354cf63970ed3f91ba85e9828aa56f5d6a952b9fae43d0477770f78d37409ae8ecc31e59ebc279b27 - languageName: node - linkType: hard - -"is-alphabetical@npm:^2.0.0": - version: 2.0.1 - resolution: "is-alphabetical@npm:2.0.1" - checksum: 10/56207db8d9de0850f0cd30f4966bf731eb82cedfe496cbc2e97e7c3bacaf66fc54a972d2d08c0d93bb679cb84976a05d24c5ad63de56fabbfc60aadae312edaa - languageName: node - linkType: hard - -"is-alphanumerical@npm:^2.0.0": - version: 2.0.1 - resolution: "is-alphanumerical@npm:2.0.1" - dependencies: - is-alphabetical: "npm:^2.0.0" - is-decimal: "npm:^2.0.0" - checksum: 10/87acc068008d4c9c4e9f5bd5e251041d42e7a50995c77b1499cf6ed248f971aadeddb11f239cabf09f7975ee58cac7a48ffc170b7890076d8d227b24a68663c9 - languageName: node - linkType: hard - -"is-arguments@npm:^1.0.4": - version: 1.1.1 - resolution: "is-arguments@npm:1.1.1" - dependencies: - call-bind: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.0" - checksum: 10/a170c7e26082e10de9be6e96d32ae3db4d5906194051b792e85fae3393b53cf2cb5b3557863e5c8ccbab55e2fd8f2f75aa643d437613f72052cf0356615c34be - languageName: node - linkType: hard - -"is-array-buffer@npm:^3.0.4": - version: 3.0.4 - resolution: "is-array-buffer@npm:3.0.4" - dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.1" - checksum: 10/34a26213d981d58b30724ef37a1e0682f4040d580fa9ff58fdfdd3cefcb2287921718c63971c1c404951e7b747c50fdc7caf6e867e951353fa71b369c04c969b - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: 10/73ced84fa35e59e2c57da2d01e12cd01479f381d7f122ce41dcbb713f09dbfc651315832cd2bf8accba7681a69e4d6f1e03941d94dd10040d415086360e7005e - languageName: node - linkType: hard - -"is-async-function@npm:^2.0.0": - version: 2.0.0 - resolution: "is-async-function@npm:2.0.0" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10/2cf336fbf8cba3badcf526aa3d10384c30bab32615ac4831b74492eb4e843ccb7d8439a119c27f84bcf217d72024e611b1373f870f433b48f3fa57d3d1b863f1 - languageName: node - linkType: hard - -"is-bigint@npm:^1.0.1": - version: 1.0.4 - resolution: "is-bigint@npm:1.0.4" - dependencies: - has-bigints: "npm:^1.0.1" - checksum: 10/cc981cf0564c503aaccc1e5f39e994ae16ae2d1a8fcd14721f14ad431809071f39ec568cfceef901cff408045f1a6d6bac90d1b43eeb0b8e3bc34c8eb1bdb4c4 - languageName: node - linkType: hard - -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: "npm:^2.0.0" - checksum: 10/078e51b4f956c2c5fd2b26bb2672c3ccf7e1faff38e0ebdba45612265f4e3d9fc3127a1fa8370bbf09eab61339203c3d3b7af5662cbf8be4030f8fac37745b0e - languageName: node - linkType: hard - -"is-boolean-object@npm:^1.1.0": - version: 1.1.2 - resolution: "is-boolean-object@npm:1.1.2" - dependencies: - call-bind: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.0" - checksum: 10/ba794223b56a49a9f185e945eeeb6b7833b8ea52a335cec087d08196cf27b538940001615d3bb976511287cefe94e5907d55f00bb49580533f9ca9b4515fcc2e - languageName: node - linkType: hard - -"is-buffer@npm:^2.0.0": - version: 2.0.5 - resolution: "is-buffer@npm:2.0.5" - checksum: 10/3261a8b858edcc6c9566ba1694bf829e126faa88911d1c0a747ea658c5d81b14b6955e3a702d59dabadd58fdd440c01f321aa71d6547105fd21d03f94d0597e7 - languageName: node - linkType: hard - -"is-bun-module@npm:^1.0.2": - version: 1.2.1 - resolution: "is-bun-module@npm:1.2.1" - dependencies: - semver: "npm:^7.6.3" - checksum: 10/1c2cbcf1a76991add1b640d2d7fe09848e8697a76f96e1289dff44133a48c97f5dc601d4a66d3f3a86217a77178d72d33d10d0c9e14194e58e70ec8df3eae41a - languageName: node - linkType: hard - -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": - version: 1.2.7 - resolution: "is-callable@npm:1.2.7" - checksum: 10/48a9297fb92c99e9df48706241a189da362bff3003354aea4048bd5f7b2eb0d823cd16d0a383cece3d76166ba16d85d9659165ac6fcce1ac12e6c649d66dbdb9 - languageName: node - linkType: hard - -"is-ci@npm:^2.0.0": - version: 2.0.0 - resolution: "is-ci@npm:2.0.0" - dependencies: - ci-info: "npm:^2.0.0" - bin: - is-ci: bin.js - checksum: 10/77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 - languageName: node - linkType: hard - -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.5.0": - version: 2.15.1 - resolution: "is-core-module@npm:2.15.1" - dependencies: - hasown: "npm:^2.0.2" - checksum: 10/77316d5891d5743854bcef2cd2f24c5458fb69fbc9705c12ca17d54a2017a67d0693bbf1ba8c77af376c0eef6bf6d1b27a4ab08e4db4e69914c3789bdf2ceec5 - languageName: node - linkType: hard - -"is-data-view@npm:^1.0.1": - version: 1.0.1 - resolution: "is-data-view@npm:1.0.1" - dependencies: - is-typed-array: "npm:^1.1.13" - checksum: 10/4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 - languageName: node - linkType: hard - -"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": - version: 1.0.5 - resolution: "is-date-object@npm:1.0.5" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10/cc80b3a4b42238fa0d358b9a6230dae40548b349e64a477cb7c5eff9b176ba194c11f8321daaf6dd157e44073e9b7fd01f87db1f14952a88d5657acdcd3a56e2 - languageName: node - linkType: hard - -"is-decimal@npm:^2.0.0": - version: 2.0.1 - resolution: "is-decimal@npm:2.0.1" - checksum: 10/97132de7acdce77caa7b797632970a2ecd649a88e715db0e4dbc00ab0708b5e7574ba5903962c860cd4894a14fd12b100c0c4ac8aed445cf6f55c6cf747a4158 - languageName: node - linkType: hard - -"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 10/3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 - languageName: node - linkType: hard - -"is-docker@npm:^3.0.0": - version: 3.0.0 - resolution: "is-docker@npm:3.0.0" - bin: - is-docker: cli.js - checksum: 10/b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 - languageName: node - linkType: hard - -"is-electron@npm:^2.2.0": - version: 2.2.2 - resolution: "is-electron@npm:2.2.2" - checksum: 10/de5aa8bd8d72c96675b8d0f93fab4cc21f62be5440f65bc05c61338ca27bd851a64200f31f1bf9facbaa01b3dbfed7997b2186741d84b93b63e0aff1db6a9494 - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10/df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 - languageName: node - linkType: hard - -"is-finalizationregistry@npm:^1.0.2": - version: 1.0.2 - resolution: "is-finalizationregistry@npm:1.0.2" - dependencies: - call-bind: "npm:^1.0.2" - checksum: 10/1b8e9e1bf2075e862315ef9d38ce6d39c43ca9d81d46f73b34473506992f4b0fbaadb47ec9b420a5e76afe3f564d9f1f0d9b552ef272cc2395e0f21d743c9c29 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10/44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^4.0.0": - version: 4.0.0 - resolution: "is-fullwidth-code-point@npm:4.0.0" - checksum: 10/8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d - languageName: node - linkType: hard - -"is-generator-fn@npm:^2.0.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: 10/a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 - languageName: node - linkType: hard - -"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10/499a3ce6361064c3bd27fbff5c8000212d48506ebe1977842bbd7b3e708832d0deb1f4cc69186ece3640770e8c4f1287b24d99588a0b8058b2dbdd344bc1f47f - languageName: node - linkType: hard - -"is-glob@npm:4.0.3, is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10/3ed74f2b0cdf4f401f38edb0442ddfde3092d79d7d35c9919c86641efdbcbb32e45aa3c0f70ce5eecc946896cd5a0f26e4188b9f2b881876f7cb6c505b82da11 - languageName: node - linkType: hard - -"is-hex-prefixed@npm:1.0.0": - version: 1.0.0 - resolution: "is-hex-prefixed@npm:1.0.0" - checksum: 10/5ac58e6e528fb029cc43140f6eeb380fad23d0041cc23154b87f7c9a1b728bcf05909974e47248fd0b7fcc11ba33cf7e58d64804883056fabd23e2b898be41de - languageName: node - linkType: hard - -"is-hexadecimal@npm:^2.0.0": - version: 2.0.1 - resolution: "is-hexadecimal@npm:2.0.1" - checksum: 10/66a2ea85994c622858f063f23eda506db29d92b52580709eb6f4c19550552d4dcf3fb81952e52f7cf972097237959e00adc7bb8c9400cd12886e15bf06145321 - languageName: node - linkType: hard - -"is-inside-container@npm:^1.0.0": - version: 1.0.0 - resolution: "is-inside-container@npm:1.0.0" - dependencies: - is-docker: "npm:^3.0.0" - bin: - is-inside-container: cli.js - checksum: 10/c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 - languageName: node - linkType: hard - -"is-interactive@npm:^1.0.0": - version: 1.0.0 - resolution: "is-interactive@npm:1.0.0" - checksum: 10/824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 10/93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - -"is-lower-case@npm:^2.0.2": - version: 2.0.2 - resolution: "is-lower-case@npm:2.0.2" - dependencies: - tslib: "npm:^2.0.3" - checksum: 10/ba57dd1201e15fd9b590654736afccf1b3b68e919f40c23ef13b00ebcc639b1d9c2f81fe86415bff3e8eccffec459786c9ac9dc8f3a19cfa4484206c411c1d7d - languageName: node - linkType: hard - -"is-map@npm:^2.0.1": - version: 2.0.2 - resolution: "is-map@npm:2.0.2" - checksum: 10/60ba910f835f2eacb1fdf5b5a6c60fe1c702d012a7673e6546992bcc0c873f62ada6e13d327f9e48f1720d49c152d6cdecae1fa47a261ef3d247c3ce6f0e1d39 - languageName: node - linkType: hard - -"is-module@npm:^1.0.0": - version: 1.0.0 - resolution: "is-module@npm:1.0.0" - checksum: 10/8cd5390730c7976fb4e8546dd0b38865ee6f7bacfa08dfbb2cc07219606755f0b01709d9361e01f13009bbbd8099fa2927a8ed665118a6105d66e40f1b838c3f - languageName: node - linkType: hard - -"is-nan@npm:^1.3.2": - version: 1.3.2 - resolution: "is-nan@npm:1.3.2" - dependencies: - call-bind: "npm:^1.0.0" - define-properties: "npm:^1.1.3" - checksum: 10/1f784d3472c09bc2e47acba7ffd4f6c93b0394479aa613311dc1d70f1bfa72eb0846c81350967722c959ba65811bae222204d6c65856fdce68f31986140c7b0e - languageName: node - linkType: hard - -"is-negative-zero@npm:^2.0.3": - version: 2.0.3 - resolution: "is-negative-zero@npm:2.0.3" - checksum: 10/8fe5cffd8d4fb2ec7b49d657e1691889778d037494c6f40f4d1a524cadd658b4b53ad7b6b73a59bcb4b143ae9a3d15829af864b2c0f9d65ac1e678c4c80f17e5 - languageName: node - linkType: hard - -"is-number-object@npm:^1.0.4": - version: 1.0.7 - resolution: "is-number-object@npm:1.0.7" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10/8700dcf7f602e0a9625830541345b8615d04953655acbf5c6d379c58eb1af1465e71227e95d501343346e1d49b6f2d53cbc166b1fc686a7ec19151272df582f9 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10/6a6c3383f68afa1e05b286af866017c78f1226d43ac8cb064e115ff9ed85eb33f5c4f7216c96a71e4dfea289ef52c5da3aef5bbfade8ffe47a0465d70c0c8e86 - languageName: node - linkType: hard - -"is-obj@npm:^1.0.1": - version: 1.0.1 - resolution: "is-obj@npm:1.0.1" - checksum: 10/3ccf0efdea12951e0b9c784e2b00e77e87b2f8bd30b42a498548a8afcc11b3287342a2030c308e473e93a7a19c9ea7854c99a8832a476591c727df2a9c79796c - languageName: node - linkType: hard - -"is-obj@npm:^2.0.0": - version: 2.0.0 - resolution: "is-obj@npm:2.0.0" - checksum: 10/c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: 10/abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 - languageName: node - linkType: hard - -"is-plain-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "is-plain-obj@npm:1.1.0" - checksum: 10/0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 - languageName: node - linkType: hard - -"is-plain-obj@npm:^2.1.0": - version: 2.1.0 - resolution: "is-plain-obj@npm:2.1.0" - checksum: 10/cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa - languageName: node - linkType: hard - -"is-plain-obj@npm:^3.0.0": - version: 3.0.0 - resolution: "is-plain-obj@npm:3.0.0" - checksum: 10/a6ebdf8e12ab73f33530641972a72a4b8aed6df04f762070d823808303e4f76d87d5ea5bd76f96a7bbe83d93f04ac7764429c29413bd9049853a69cb630fb21c - languageName: node - linkType: hard - -"is-plain-obj@npm:^4.0.0": - version: 4.1.0 - resolution: "is-plain-obj@npm:4.1.0" - checksum: 10/6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce - languageName: node - linkType: hard - -"is-potential-custom-element-name@npm:^1.0.1": - version: 1.0.1 - resolution: "is-potential-custom-element-name@npm:1.0.1" - checksum: 10/ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab - languageName: node - linkType: hard - -"is-reference@npm:^3.0.3": - version: 3.0.3 - resolution: "is-reference@npm:3.0.3" - dependencies: - "@types/estree": "npm:^1.0.6" - checksum: 10/11371fb2669a8144bffb2ae9bd11b0342b7dc384c3c0f8d5996566b071614282a3a0d306fd2fd1c6b4c9078d0e2703d191b47f4f78f9ce08f464c44a3a412412 - languageName: node - linkType: hard - -"is-regex@npm:^1.1.4": - version: 1.1.4 - resolution: "is-regex@npm:1.1.4" - dependencies: - call-bind: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.0" - checksum: 10/36d9174d16d520b489a5e9001d7d8d8624103b387be300c50f860d9414556d0485d74a612fdafc6ebbd5c89213d947dcc6b6bff6b2312093f71ea03cbb19e564 - languageName: node - linkType: hard - -"is-regexp@npm:^1.0.0": - version: 1.0.0 - resolution: "is-regexp@npm:1.0.0" - checksum: 10/be692828e24cba479ec33644326fa98959ec68ba77965e0291088c1a741feaea4919d79f8031708f85fd25e39de002b4520622b55460660b9c369e6f7187faef - languageName: node - linkType: hard - -"is-relative@npm:^1.0.0": - version: 1.0.0 - resolution: "is-relative@npm:1.0.0" - dependencies: - is-unc-path: "npm:^1.0.0" - checksum: 10/3271a0df109302ef5e14a29dcd5d23d9788e15ade91a40b942b035827ffbb59f7ce9ff82d036ea798541a52913cbf9d2d0b66456340887b51f3542d57b5a4c05 - languageName: node - linkType: hard - -"is-retry-allowed@npm:^1.1.0": - version: 1.2.0 - resolution: "is-retry-allowed@npm:1.2.0" - checksum: 10/50d700a89ae31926b1c91b3eb0104dbceeac8790d8b80d02f5c76d9a75c2056f1bb24b5268a8a018dead606bddf116b2262e5ac07401eb8b8783b266ed22558d - languageName: node - linkType: hard - -"is-root@npm:^2.1.0": - version: 2.1.0 - resolution: "is-root@npm:2.1.0" - checksum: 10/37eea0822a2a9123feb58a9d101558ba276771a6d830f87005683349a9acff15958a9ca590a44e778c6b335660b83e85c744789080d734f6081a935a4880aee2 - languageName: node - linkType: hard - -"is-set@npm:^2.0.1": - version: 2.0.2 - resolution: "is-set@npm:2.0.2" - checksum: 10/d89e82acdc7760993474f529e043f9c4a1d63ed4774d21cc2e331d0e401e5c91c27743cd7c889137028f6a742234759a4bd602368fbdbf0b0321994aefd5603f - languageName: node - linkType: hard - -"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": - version: 1.0.3 - resolution: "is-shared-array-buffer@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.7" - checksum: 10/bc5402900dc62b96ebb2548bf5b0a0bcfacc2db122236fe3ab3b3e3c884293a0d5eb777e73f059bcbf8dc8563bb65eae972fee0fb97e38a9ae27c8678f62bcfe - languageName: node - linkType: hard - -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: 10/b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 - languageName: node - linkType: hard - -"is-stream@npm:^3.0.0": - version: 3.0.0 - resolution: "is-stream@npm:3.0.0" - checksum: 10/172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 - languageName: node - linkType: hard - -"is-string@npm:^1.0.5, is-string@npm:^1.0.7": - version: 1.0.7 - resolution: "is-string@npm:1.0.7" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10/2bc292fe927493fb6dfc3338c099c3efdc41f635727c6ebccf704aeb2a27bca7acb9ce6fd34d103db78692b10b22111a8891de26e12bfa1c5e11e263c99d1fef - languageName: node - linkType: hard - -"is-subdir@npm:^1.1.1": - version: 1.2.0 - resolution: "is-subdir@npm:1.2.0" - dependencies: - better-path-resolve: "npm:1.0.0" - checksum: 10/31029a383972bff4cc4f1bd1463fd04dde017e0a04ae3a6f6e08124a90c6c4656312d593101b0f38805fa3f3c8f6bc4583524bbf72c50784fa5ca0d3e5a76279 - languageName: node - linkType: hard - -"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": - version: 1.0.4 - resolution: "is-symbol@npm:1.0.4" - dependencies: - has-symbols: "npm:^1.0.2" - checksum: 10/a47dd899a84322528b71318a89db25c7ecdec73197182dad291df15ffea501e17e3c92c8de0bfb50e63402747399981a687b31c519971b1fa1a27413612be929 - languageName: node - linkType: hard - -"is-text-path@npm:^1.0.1": - version: 1.0.1 - resolution: "is-text-path@npm:1.0.1" - dependencies: - text-extensions: "npm:^1.0.0" - checksum: 10/fb5d78752c22b3f73a7c9540768f765ffcfa38c9e421e2b9af869565307fa1ae5e3d3a2ba016a43549742856846566d327da406e94a5846ec838a288b1704fd2 - languageName: node - linkType: hard - -"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.3": - version: 1.1.13 - resolution: "is-typed-array@npm:1.1.13" - dependencies: - which-typed-array: "npm:^1.1.14" - checksum: 10/f850ba08286358b9a11aee6d93d371a45e3c59b5953549ee1c1a9a55ba5c1dd1bd9952488ae194ad8f32a9cf5e79c8fa5f0cc4d78c00720aa0bbcf238b38062d - languageName: node - linkType: hard - -"is-typedarray@npm:^1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 10/4b433bfb0f9026f079f4eb3fbaa4ed2de17c9995c3a0b5c800bec40799b4b2a8b4e051b1ada77749deb9ded4ae52fe2096973f3a93ff83df1a5a7184a669478c - languageName: node - linkType: hard - -"is-unc-path@npm:^1.0.0": - version: 1.0.0 - resolution: "is-unc-path@npm:1.0.0" - dependencies: - unc-path-regex: "npm:^0.1.2" - checksum: 10/e8abfde203f7409f5b03a5f1f8636e3a41e78b983702ef49d9343eb608cdfe691429398e8815157519b987b739bcfbc73ae7cf4c8582b0ab66add5171088eab6 - languageName: node - linkType: hard - -"is-unicode-supported@npm:^0.1.0": - version: 0.1.0 - resolution: "is-unicode-supported@npm:0.1.0" - checksum: 10/a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 - languageName: node - linkType: hard - -"is-upper-case@npm:^2.0.2": - version: 2.0.2 - resolution: "is-upper-case@npm:2.0.2" - dependencies: - tslib: "npm:^2.0.3" - checksum: 10/cf4fd43c00c2e72cd5cff911923070b89f0933b464941bd782e2315385f80b5a5acd772db3b796542e5e3cfed735f4dffd88c54d62db1ebfc5c3daa7b1af2bc6 - languageName: node - linkType: hard - -"is-weakmap@npm:^2.0.1": - version: 2.0.1 - resolution: "is-weakmap@npm:2.0.1" - checksum: 10/289fa4e8ba1bdda40ca78481266f6925b7c46a85599e6a41a77010bf91e5a24dfb660db96863bbf655ecdbda0ab517204d6a4e0c151dbec9d022c556321f3776 - languageName: node - linkType: hard - -"is-weakref@npm:^1.0.2": - version: 1.0.2 - resolution: "is-weakref@npm:1.0.2" - dependencies: - call-bind: "npm:^1.0.2" - checksum: 10/0023fd0e4bdf9c338438ffbe1eed7ebbbff7e7e18fb7cdc227caaf9d4bd024a2dcdf6a8c9f40c92192022eac8391243bb9e66cccebecbf6fe1d8a366108f8513 - languageName: node - linkType: hard - -"is-weakset@npm:^2.0.1": - version: 2.0.2 - resolution: "is-weakset@npm:2.0.2" - dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.1.1" - checksum: 10/8f2ddb9639716fd7936784e175ea1183c5c4c05274c34f34f6a53175313cb1c9c35a8b795623306995e2f7cc8f25aa46302f15a2113e51c5052d447be427195c - languageName: node - linkType: hard - -"is-windows@npm:^1.0.0, is-windows@npm:^1.0.1": - version: 1.0.2 - resolution: "is-windows@npm:1.0.2" - checksum: 10/438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 - languageName: node - linkType: hard - -"is-wsl@npm:^2.1.1, is-wsl@npm:^2.2.0": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: "npm:^2.0.0" - checksum: 10/20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 - languageName: node - linkType: hard - -"is-wsl@npm:^3.1.0": - version: 3.1.0 - resolution: "is-wsl@npm:3.1.0" - dependencies: - is-inside-container: "npm:^1.0.0" - checksum: 10/f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9 - languageName: node - linkType: hard - -"isarray@npm:^2.0.5": - version: 2.0.5 - resolution: "isarray@npm:2.0.5" - checksum: 10/1d8bc7911e13bb9f105b1b3e0b396c787a9e63046af0b8fe0ab1414488ab06b2b099b87a2d8a9e31d21c9a6fad773c7fc8b257c4880f2d957274479d28ca3414 - languageName: node - linkType: hard - -"isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: 10/f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 10/7c9f715c03aff08f35e98b1fadae1b9267b38f0615d501824f9743f3aab99ef10e303ce7db3f186763a0b70a19de5791ebfc854ff884d5a8c4d92211f642ec92 - languageName: node - linkType: hard - -"iso-url@npm:^1.2.1": - version: 1.2.1 - resolution: "iso-url@npm:1.2.1" - checksum: 10/87455fd79166c7b269df7711ea0bee896338330fb46164dd3e6d73ba09c294326ae356b60032dc3217c1455b66f57216a44b95ded8fb2c1c2f9e490396060ef9 - languageName: node - linkType: hard - -"isomorphic-dompurify@npm:^0.23.0": - version: 0.23.0 - resolution: "isomorphic-dompurify@npm:0.23.0" - dependencies: - "@types/dompurify": "npm:^2.3.4" - dompurify: "npm:^2.4.0" - jsdom: "npm:^20.0.1" - checksum: 10/bcd5a99fb7cfae6c63446b31a0787ec79a629e42459a0eae99f222949b7ffbcbb0d6d524f105eca21939b4308fdf112e1c2fa7fc915b352cf5d938e11923e95c - languageName: node - linkType: hard - -"isomorphic-fetch@npm:^3.0.0": - version: 3.0.0 - resolution: "isomorphic-fetch@npm:3.0.0" - dependencies: - node-fetch: "npm:^2.6.1" - whatwg-fetch: "npm:^3.4.1" - checksum: 10/568fe0307528c63405c44dd3873b7b6c96c0d19ff795cb15846e728b6823bdbc68cc8c97ac23324509661316f12f551e43dac2929bc7030b8bc4d6aa1158b857 - languageName: node - linkType: hard - -"isomorphic-timers-promises@npm:^1.0.1": - version: 1.0.1 - resolution: "isomorphic-timers-promises@npm:1.0.1" - checksum: 10/2dabe397039081dbf30039f295333a7f9888b072dd0afa3aa7d8ba8f812a6db5efcbda0861a4be43ecfec207d56314ecf27150187b8d0f924a93103fa93eac73 - languageName: node - linkType: hard - -"isomorphic-ws@npm:5.0.0, isomorphic-ws@npm:^5.0.0": - version: 5.0.0 - resolution: "isomorphic-ws@npm:5.0.0" - peerDependencies: - ws: "*" - checksum: 10/e20eb2aee09ba96247465fda40c6d22c1153394c0144fa34fe6609f341af4c8c564f60ea3ba762335a7a9c306809349f9b863c8beedf2beea09b299834ad5398 - languageName: node - linkType: hard - -"isomorphic-ws@npm:^4.0.1": - version: 4.0.1 - resolution: "isomorphic-ws@npm:4.0.1" - peerDependencies: - ws: "*" - checksum: 10/d7190eadefdc28bdb93d67b5f0c603385aaf87724fa2974abb382ac1ec9756ed2cfb27065cbe76122879c2d452e2982bc4314317f3d6c737ddda6c047328771a - languageName: node - linkType: hard - -"isows@npm:1.0.6": - version: 1.0.6 - resolution: "isows@npm:1.0.6" - peerDependencies: - ws: "*" - checksum: 10/ab9e85b50bcc3d70aa5ec875aa2746c5daf9321cb376ed4e5434d3c2643c5d62b1f466d93a05cd2ad0ead5297224922748c31707cb4fbd68f5d05d0479dce99c - languageName: node - linkType: hard - -"isows@npm:1.0.7": - version: 1.0.7 - resolution: "isows@npm:1.0.7" - peerDependencies: - ws: "*" - checksum: 10/044b949b369872882af07b60b613b5801ae01b01a23b5b72b78af80c8103bbeed38352c3e8ceff13a7834bc91fd2eb41cf91ec01d59a041d8705680e6b0ec546 - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.0 - resolution: "istanbul-lib-coverage@npm:3.2.0" - checksum: 10/31621b84ad29339242b63d454243f558a7958ee0b5177749bacf1f74be7d95d3fd93853738ef7eebcddfaf3eab014716e51392a8dbd5aa1bdc1b15c2ebc53c24 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" - dependencies: - "@babel/core": "npm:^7.12.3" - "@babel/parser": "npm:^7.14.7" - "@istanbuljs/schema": "npm:^0.1.2" - istanbul-lib-coverage: "npm:^3.2.0" - semver: "npm:^6.3.0" - checksum: 10/bbc4496c2f304d799f8ec22202ab38c010ac265c441947f075c0f7d46bd440b45c00e46017cf9053453d42182d768b1d6ed0e70a142c95ab00df9843aa5ab80e - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.0 - resolution: "istanbul-lib-report@npm:3.0.0" - dependencies: - istanbul-lib-coverage: "npm:^3.0.0" - make-dir: "npm:^3.0.0" - supports-color: "npm:^7.1.0" - checksum: 10/06b37952e9cb0fe419a37c7f3d74612a098167a9eb0e5264228036e78b42ca5226501e8130738b5306d94bae2ea068ca674080d4af959992523d84aacff67728 - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" - dependencies: - debug: "npm:^4.1.1" - istanbul-lib-coverage: "npm:^3.0.0" - source-map: "npm:^0.6.1" - checksum: 10/5526983462799aced011d776af166e350191b816821ea7bcf71cab3e5272657b062c47dc30697a22a43656e3ced78893a42de677f9ccf276a28c913190953b82 - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.3": - version: 3.1.5 - resolution: "istanbul-reports@npm:3.1.5" - dependencies: - html-escaper: "npm:^2.0.0" - istanbul-lib-report: "npm:^3.0.0" - checksum: 10/1fc20a133f6dbd846e7bf3dc6d85edf2b3c047c47142cd796c38717aef976195d2c0fb0399dd609c3ffac2ca43244dc15ce4ac34064d21e2d34d387df747dafb - languageName: node - linkType: hard - -"it-all@npm:^3.0.4": - version: 3.0.6 - resolution: "it-all@npm:3.0.6" - checksum: 10/ed22fb2c8c53f54678983d00bc03cd47197a8bb914bd247a56db968705adcb35e262abe2f9ed0efa968a54a307f62c591061190de2fb4ed3d6878866b09f5a13 - languageName: node - linkType: hard - -"it-first@npm:^3.0.4": - version: 3.0.6 - resolution: "it-first@npm:3.0.6" - checksum: 10/12d4ce2dff894ac50d1ddf10e64af002ec720b7d77ce5b3e970128d6b7ad84da3ac3b3cd816c27420ffe9dfa7d412d96c976637df1cb8702722359f02feddf48 - languageName: node - linkType: hard - -"it-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "it-glob@npm:3.0.1" - dependencies: - fast-glob: "npm:^3.3.2" - checksum: 10/9278d3b5e3fcf72348c3ac743ab45e406f641386efcd3e484b96ab5c3623ce46bab758593b84af1c6dd188038178e043c93acb4134ca2582947ac45c65365cf1 - languageName: node - linkType: hard - -"it-last@npm:^3.0.4": - version: 3.0.6 - resolution: "it-last@npm:3.0.6" - checksum: 10/763950931f8ec24292272f40200f2a6eb8e950e15a6686fda5ee8a2a89bd1fc838bdc2dc0cae239f986f3157b7ea4016b42c10f44e833b74612b6f8d7b8e1e68 - languageName: node - linkType: hard - -"it-map@npm:^3.0.5": - version: 3.1.1 - resolution: "it-map@npm:3.1.1" - dependencies: - it-peekable: "npm:^3.0.0" - checksum: 10/6557723556f3feaa36c9716c8a55d6a1c132c5e70bcf9899092f670c871ae21d3d1e22e046fd97d68998834417227ba4136115524de19a31dd3266370af2b849 - languageName: node - linkType: hard - -"it-peekable@npm:^3.0.0": - version: 3.0.1 - resolution: "it-peekable@npm:3.0.1" - checksum: 10/4acf3fd74037f98bf569439d31010dcdd333a633d5aa8deabde45aea3af28cf0889a5b893197847bd58dccf1df6cb1db2e30f6e2bf0980436ee25b215eb9733d - languageName: node - linkType: hard - -"it-peekable@npm:^3.0.3": - version: 3.0.5 - resolution: "it-peekable@npm:3.0.5" - checksum: 10/a9c09aebc3350e197c919f315411045f8315060f003216caeb33a4f3e214401c52c2c127f1a356426ae578c948c6d156103359b5b9dee2bf6d04ab728d9730c4 - languageName: node - linkType: hard - -"it-pushable@npm:^3.2.3": - version: 3.2.3 - resolution: "it-pushable@npm:3.2.3" - dependencies: - p-defer: "npm:^4.0.0" - checksum: 10/173e031e9cba9493d21ad9823f070c7b665ce711fdb41bbe6451c20bef4b9bb0bfefa41020a2d2fe39f7eb979dd87c4d91f235bfa39869b5f6eecec9debb15b7 - languageName: node - linkType: hard - -"it-stream-types@npm:^2.0.1": - version: 2.0.1 - resolution: "it-stream-types@npm:2.0.1" - checksum: 10/06193e2f7c7a9e9c1cea430884e24fd769670c2ddc897bf7a3e424bd048fa1f8da280ee3c1c404fdab5667f434002b2f45d5ff5cebdccbc41ca1516a0ae11907 - languageName: node - linkType: hard - -"it-stream-types@npm:^2.0.2": - version: 2.0.2 - resolution: "it-stream-types@npm:2.0.2" - checksum: 10/3c3882941388353003c49bd18bd1fe4d543b9a7f32b0cd50b1764a49333ee3ea37e7bd4acfaeab7585e121ff27d2ec2ba58d9d55da4a997d9fbfd6b62e0ce58d - languageName: node - linkType: hard - -"it-to-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "it-to-stream@npm:1.0.0" - dependencies: - buffer: "npm:^6.0.3" - fast-fifo: "npm:^1.0.0" - get-iterator: "npm:^1.0.2" - p-defer: "npm:^3.0.0" - p-fifo: "npm:^1.0.0" - readable-stream: "npm:^3.6.0" - checksum: 10/c947bedf25c21b27a7d3bf299aa7072f3ea9c4a4bfe2e8586428ae8760cfe3d37339445c48184436ba71e23bee03d5692a8420a0f7f0537cb118104cd54d2aaa - languageName: node - linkType: hard - -"iterator.prototype@npm:^1.1.3": - version: 1.1.3 - resolution: "iterator.prototype@npm:1.1.3" - dependencies: - define-properties: "npm:^1.2.1" - get-intrinsic: "npm:^1.2.1" - has-symbols: "npm:^1.0.3" - reflect.getprototypeof: "npm:^1.0.4" - set-function-name: "npm:^2.0.1" - checksum: 10/1a2a508d3baac121b76c834404ff552d1bb96a173b1d74ff947b2c5763840c0b1e5be01be7e2183a19b08e99e38729812668ff1f23b35f6655a366017bc32519 - languageName: node - linkType: hard - -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10/96f8786eaab98e4bf5b2a5d6d9588ea46c4d06bbc4f2eb861fdd7b6b182b16f71d8a70e79820f335d52653b16d4843b29dd9cdcf38ae80406756db9199497cf3 - languageName: node - linkType: hard - -"jackspeak@npm:^4.0.1": - version: 4.0.2 - resolution: "jackspeak@npm:4.0.2" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - checksum: 10/d9722f0e55f6c322c57aedf094c405f4201b834204629817187953988075521cfddb23df83e2a7b845723ca7eb0555068c5ce1556732e9c275d32a531881efa8 - languageName: node - linkType: hard - -"jake@npm:^10.8.5": - version: 10.8.7 - resolution: "jake@npm:10.8.7" - dependencies: - async: "npm:^3.2.3" - chalk: "npm:^4.0.2" - filelist: "npm:^1.0.4" - minimatch: "npm:^3.1.2" - bin: - jake: bin/cli.js - checksum: 10/ad1cfe398836df4e6962954e5095597c21c5af1ea5a4182f6adf0869df8aca467a2eeca7869bf44f47120f4dd4ea52589d16050d295c87a5906c0d744775acc3 - languageName: node - linkType: hard - -"jayson@npm:4.1.3": - version: 4.1.3 - resolution: "jayson@npm:4.1.3" - dependencies: - "@types/connect": "npm:^3.4.33" - "@types/node": "npm:^12.12.54" - "@types/ws": "npm:^7.4.4" - JSONStream: "npm:^1.3.5" - commander: "npm:^2.20.3" - delay: "npm:^5.0.0" - es6-promisify: "npm:^5.0.0" - eyes: "npm:^0.1.8" - isomorphic-ws: "npm:^4.0.1" - json-stringify-safe: "npm:^5.0.1" - uuid: "npm:^8.3.2" - ws: "npm:^7.5.10" - bin: - jayson: bin/jayson.js - checksum: 10/3d6c35d2780080f34c32971f4b69fc1a4f343f3606eef45a17ed3fef74fd6c58482615a783e0e0beee51a899fc8b8d5256fa3e91eb3453025c9758ec7fb49c93 - languageName: node - linkType: hard - -"jayson@npm:^4.1.1": - version: 4.1.1 - resolution: "jayson@npm:4.1.1" - dependencies: - "@types/connect": "npm:^3.4.33" - "@types/node": "npm:^12.12.54" - "@types/ws": "npm:^7.4.4" - JSONStream: "npm:^1.3.5" - commander: "npm:^2.20.3" - delay: "npm:^5.0.0" - es6-promisify: "npm:^5.0.0" - eyes: "npm:^0.1.8" - isomorphic-ws: "npm:^4.0.1" - json-stringify-safe: "npm:^5.0.1" - uuid: "npm:^8.3.2" - ws: "npm:^7.5.10" - bin: - jayson: bin/jayson.js - checksum: 10/8ffd219abbd4fa3231530334b81effe2d079b36b71891d2e1fc8844a487087da290b9d1d80200c63c778113382afb9a3c861f59ea4f901f8ab9831ac2ecfa7e5 - languageName: node - linkType: hard - -"jest-changed-files@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-changed-files@npm:27.5.1" - dependencies: - "@jest/types": "npm:^27.5.1" - execa: "npm:^5.0.0" - throat: "npm:^6.0.1" - checksum: 10/fad21687f899e527bc23b3cabda1b1fa74acb8e17e81bca4d6ca10ab83ebf1d7555f38ba66dda148f97c45b816f941aa4694a09ed0d16a4d7fe3216abf1a222f - languageName: node - linkType: hard - -"jest-circus@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-circus@npm:27.5.1" - dependencies: - "@jest/environment": "npm:^27.5.1" - "@jest/test-result": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - co: "npm:^4.6.0" - dedent: "npm:^0.7.0" - expect: "npm:^27.5.1" - is-generator-fn: "npm:^2.0.0" - jest-each: "npm:^27.5.1" - jest-matcher-utils: "npm:^27.5.1" - jest-message-util: "npm:^27.5.1" - jest-runtime: "npm:^27.5.1" - jest-snapshot: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - pretty-format: "npm:^27.5.1" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.3" - throat: "npm:^6.0.1" - checksum: 10/cf8502d2c7669a89d6d9c309842a6bae1b336335f9a108b0ba3d555dcc635c6cc119d28627a5df455215a8bb04bdcdf18b1fee3441aca39c78c8b10053cd33f7 - languageName: node - linkType: hard - -"jest-cli@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-cli@npm:27.5.1" - dependencies: - "@jest/core": "npm:^27.5.1" - "@jest/test-result": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - chalk: "npm:^4.0.0" - exit: "npm:^0.1.2" - graceful-fs: "npm:^4.2.9" - import-local: "npm:^3.0.2" - jest-config: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - jest-validate: "npm:^27.5.1" - prompts: "npm:^2.0.1" - yargs: "npm:^16.2.0" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 10/527be160786a14f541b3f75e6241da1bd9ba51894fc9f2ba6466dba7f6ffd3a03de02b40d172ad1d29edc725847f7dd4f6dbf71d304d2364b075ec81c9a53224 - languageName: node - linkType: hard - -"jest-config@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-config@npm:27.5.1" - dependencies: - "@babel/core": "npm:^7.8.0" - "@jest/test-sequencer": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - babel-jest: "npm:^27.5.1" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - deepmerge: "npm:^4.2.2" - glob: "npm:^7.1.1" - graceful-fs: "npm:^4.2.9" - jest-circus: "npm:^27.5.1" - jest-environment-jsdom: "npm:^27.5.1" - jest-environment-node: "npm:^27.5.1" - jest-get-type: "npm:^27.5.1" - jest-jasmine2: "npm:^27.5.1" - jest-regex-util: "npm:^27.5.1" - jest-resolve: "npm:^27.5.1" - jest-runner: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - jest-validate: "npm:^27.5.1" - micromatch: "npm:^4.0.4" - parse-json: "npm:^5.2.0" - pretty-format: "npm:^27.5.1" - slash: "npm:^3.0.0" - strip-json-comments: "npm:^3.1.1" - peerDependencies: - ts-node: ">=9.0.0" - peerDependenciesMeta: - ts-node: - optional: true - checksum: 10/63bc2dce50289ff921debedab766daa5122129671c77a9f4137d153a27b29ef77725db15d4809553b687c83495cd7ffefc8eadfd8dfa940d7ea878de57f428c2 - languageName: node - linkType: hard - -"jest-diff@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-diff@npm:27.5.1" - dependencies: - chalk: "npm:^4.0.0" - diff-sequences: "npm:^27.5.1" - jest-get-type: "npm:^27.5.1" - pretty-format: "npm:^27.5.1" - checksum: 10/af454f30f33af625832bdb02614e188a41e33ce79086b43f95dbcc515274dd36bf8443b8d0299e22c2416e7591da4321e6bc7f2b0aef56471d1133c6b6833221 - languageName: node - linkType: hard - -"jest-docblock@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-docblock@npm:27.5.1" - dependencies: - detect-newline: "npm:^3.0.0" - checksum: 10/65c765c5418986313685b7c49dcd844cd3bc281807a35f778d6ba479246b6ea070cdd98384582a9aed1a0d3ebf94b7fb14a33df5975aaae2eb20dc00281731f4 - languageName: node - linkType: hard - -"jest-each@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-each@npm:27.5.1" - dependencies: - "@jest/types": "npm:^27.5.1" - chalk: "npm:^4.0.0" - jest-get-type: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - pretty-format: "npm:^27.5.1" - checksum: 10/d73e3c7bbcd3a073e9fa29bd1f200bb9757cbcc568460c1d0971fc21924800f2d3e421219a85e20c54ea2a0129d2da9e2dfc266b6014244c5901f3ca2de7a99e - languageName: node - linkType: hard - -"jest-environment-jsdom@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-environment-jsdom@npm:27.5.1" - dependencies: - "@jest/environment": "npm:^27.5.1" - "@jest/fake-timers": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - jest-mock: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - jsdom: "npm:^16.6.0" - checksum: 10/bc104aef7d7530d0740402aa84ac812138b6d1e51fe58adecce679f82b99340ddab73e5ec68fa079f33f50c9ddec9728fc9f0ddcca2ad6f0b351eed2762cc555 - languageName: node - linkType: hard - -"jest-environment-node@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-environment-node@npm:27.5.1" - dependencies: - "@jest/environment": "npm:^27.5.1" - "@jest/fake-timers": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - jest-mock: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - checksum: 10/0f988330c4f3eec092e3fb37ea753b0c6f702e83cd8f4d770af9c2bf964a70bc45fbd34ec6fdb6d71ce98a778d9f54afd673e63f222e4667fff289e8069dba39 - languageName: node - linkType: hard - -"jest-get-type@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-get-type@npm:27.5.1" - checksum: 10/63064ab70195c21007d897c1157bf88ff94a790824a10f8c890392e7d17eda9c3900513cb291ca1c8d5722cad79169764e9a1279f7c8a9c4cd6e9109ff04bbc0 - languageName: node - linkType: hard - -"jest-haste-map@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-haste-map@npm:27.5.1" - dependencies: - "@jest/types": "npm:^27.5.1" - "@types/graceful-fs": "npm:^4.1.2" - "@types/node": "npm:*" - anymatch: "npm:^3.0.3" - fb-watchman: "npm:^2.0.0" - fsevents: "npm:^2.3.2" - graceful-fs: "npm:^4.2.9" - jest-regex-util: "npm:^27.5.1" - jest-serializer: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - jest-worker: "npm:^27.5.1" - micromatch: "npm:^4.0.4" - walker: "npm:^1.0.7" - dependenciesMeta: - fsevents: - optional: true - checksum: 10/cbf42e4a3d2b6fc8ad64d732c1bb8a230fe25ad3df7f9f93e8af2950691ef9a5241a9d48c5c88e365744a7467b8cb00ab21c01baee4ee0c2b62acc657782545f - languageName: node - linkType: hard - -"jest-jasmine2@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-jasmine2@npm:27.5.1" - dependencies: - "@jest/environment": "npm:^27.5.1" - "@jest/source-map": "npm:^27.5.1" - "@jest/test-result": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - co: "npm:^4.6.0" - expect: "npm:^27.5.1" - is-generator-fn: "npm:^2.0.0" - jest-each: "npm:^27.5.1" - jest-matcher-utils: "npm:^27.5.1" - jest-message-util: "npm:^27.5.1" - jest-runtime: "npm:^27.5.1" - jest-snapshot: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - pretty-format: "npm:^27.5.1" - throat: "npm:^6.0.1" - checksum: 10/052d3c99c36295564a6688ae7e66cfd59997ca9589ccaaa2551d344d84699816a6b8c7bebf3a5f7bcdf691a07f7065c61f4a0770b810e5d887acd21f80a06304 - languageName: node - linkType: hard - -"jest-leak-detector@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-leak-detector@npm:27.5.1" - dependencies: - jest-get-type: "npm:^27.5.1" - pretty-format: "npm:^27.5.1" - checksum: 10/5c9689060960567ddaf16c570d87afa760a461885765d2c71ef4f4857bbc3af1482c34e3cce88e50beefde1bf35e33530b020480752057a7e3dbb1ca0bae359f - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-matcher-utils@npm:27.5.1" - dependencies: - chalk: "npm:^4.0.0" - jest-diff: "npm:^27.5.1" - jest-get-type: "npm:^27.5.1" - pretty-format: "npm:^27.5.1" - checksum: 10/037f99878a0515581d7728ed3aed03707810f4da5a1c7ffb9d68a2c6c3180851a6ec40b559af37fbe891dde3ba12552b19e47b8188a27b6c5a53376be6907f32 - languageName: node - linkType: hard - -"jest-message-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-message-util@npm:27.5.1" - dependencies: - "@babel/code-frame": "npm:^7.12.13" - "@jest/types": "npm:^27.5.1" - "@types/stack-utils": "npm:^2.0.0" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - micromatch: "npm:^4.0.4" - pretty-format: "npm:^27.5.1" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.3" - checksum: 10/8fbf39dc25a7ef328dab22efcb3b198cbc788e309bc93e39fdb42b5541dba201c76acf47df476a4ee3d3fc6a6898e77bfc02677c198a98af91db1af0a435ade6 - languageName: node - linkType: hard - -"jest-message-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-message-util@npm:28.1.3" - dependencies: - "@babel/code-frame": "npm:^7.12.13" - "@jest/types": "npm:^28.1.3" - "@types/stack-utils": "npm:^2.0.0" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - micromatch: "npm:^4.0.4" - pretty-format: "npm:^28.1.3" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.3" - checksum: 10/91137a507e9eb79ef6156a3d17c882a181fa662da28cc1a86245ff53ba13726653c8d5fed2660e922aae020a9caca4d22c3689bfe61a215c8a17a43e01b7eb5c - languageName: node - linkType: hard - -"jest-mock@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-mock@npm:27.5.1" - dependencies: - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - checksum: 10/be9a8777801659227d3bb85317a3aca617542779a290a6a45c9addec8bda29f494a524cb4af96c82b825ecb02171e320dfbfde3e3d9218672f9e38c9fac118f4 - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: 10/db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 - languageName: node - linkType: hard - -"jest-regex-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-regex-util@npm:27.5.1" - checksum: 10/d45ca7a9543616a34f7f3079337439cf07566e677a096472baa2810e274b9808b76767c97b0a4029b8a5b82b9d256dee28ef9ad4138b2b9e5933f6fac106c418 - languageName: node - linkType: hard - -"jest-regex-util@npm:^28.0.0": - version: 28.0.2 - resolution: "jest-regex-util@npm:28.0.2" - checksum: 10/0ea8c5c82ec88bc85e273c0ec82e0c0f35f7a1e2d055070e50f0cc2a2177f848eec55f73e37ae0d045c3db5014c42b2f90ac62c1ab3fdb354d2abd66a9e08add - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-resolve-dependencies@npm:27.5.1" - dependencies: - "@jest/types": "npm:^27.5.1" - jest-regex-util: "npm:^27.5.1" - jest-snapshot: "npm:^27.5.1" - checksum: 10/c67af97afad1da88f5530317c732bbd1262d1225f6cd7f4e4740a5db48f90ab0bd8564738ac70d1a43934894f9aef62205c1b8f8ee89e5c7a737e6a121ee4c25 - languageName: node - linkType: hard - -"jest-resolve@npm:^27.4.2, jest-resolve@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-resolve@npm:27.5.1" - dependencies: - "@jest/types": "npm:^27.5.1" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^27.5.1" - jest-pnp-resolver: "npm:^1.2.2" - jest-util: "npm:^27.5.1" - jest-validate: "npm:^27.5.1" - resolve: "npm:^1.20.0" - resolve.exports: "npm:^1.1.0" - slash: "npm:^3.0.0" - checksum: 10/93659a9d5ec365a9f2fd3fcaa8f799e3bd090318c48890951ca4325e863f4eb778bb7f7e8d1d8495eda4c157ee771d93fb31f37364ce1a36a09f77f1089e52a1 - languageName: node - linkType: hard - -"jest-runner@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-runner@npm:27.5.1" - dependencies: - "@jest/console": "npm:^27.5.1" - "@jest/environment": "npm:^27.5.1" - "@jest/test-result": "npm:^27.5.1" - "@jest/transform": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - emittery: "npm:^0.8.1" - graceful-fs: "npm:^4.2.9" - jest-docblock: "npm:^27.5.1" - jest-environment-jsdom: "npm:^27.5.1" - jest-environment-node: "npm:^27.5.1" - jest-haste-map: "npm:^27.5.1" - jest-leak-detector: "npm:^27.5.1" - jest-message-util: "npm:^27.5.1" - jest-resolve: "npm:^27.5.1" - jest-runtime: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - jest-worker: "npm:^27.5.1" - source-map-support: "npm:^0.5.6" - throat: "npm:^6.0.1" - checksum: 10/97bd741f442ebbcebfdb5e8389c0df645448d0b4b634e4128b3387d6fe432cf0f93feb0ecfc3842fed20a35c43c24460ed5dd89d7501ca9e2fdba65e5a4edf37 - languageName: node - linkType: hard - -"jest-runtime@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-runtime@npm:27.5.1" - dependencies: - "@jest/environment": "npm:^27.5.1" - "@jest/fake-timers": "npm:^27.5.1" - "@jest/globals": "npm:^27.5.1" - "@jest/source-map": "npm:^27.5.1" - "@jest/test-result": "npm:^27.5.1" - "@jest/transform": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - chalk: "npm:^4.0.0" - cjs-module-lexer: "npm:^1.0.0" - collect-v8-coverage: "npm:^1.0.0" - execa: "npm:^5.0.0" - glob: "npm:^7.1.3" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^27.5.1" - jest-message-util: "npm:^27.5.1" - jest-mock: "npm:^27.5.1" - jest-regex-util: "npm:^27.5.1" - jest-resolve: "npm:^27.5.1" - jest-snapshot: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - slash: "npm:^3.0.0" - strip-bom: "npm:^4.0.0" - checksum: 10/cc6cdce5bee4bc02935a4671394e19962f3469eeb6e823442ca99e5670fd87f60ed64b7c7156ac13d2799fc44fe9bb806454a3f17c8342bd35e564b1a40e3920 - languageName: node - linkType: hard - -"jest-serializer@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-serializer@npm:27.5.1" - dependencies: - "@types/node": "npm:*" - graceful-fs: "npm:^4.2.9" - checksum: 10/803e03a552278610edc6753c0dd9fa5bb5cd3ca47414a7b2918106efb62b79fd5e9ae785d0a21f12a299fa599fea8acc1fa6dd41283328cee43962cf7df9bb44 - languageName: node - linkType: hard - -"jest-snapshot@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-snapshot@npm:27.5.1" - dependencies: - "@babel/core": "npm:^7.7.2" - "@babel/generator": "npm:^7.7.2" - "@babel/plugin-syntax-typescript": "npm:^7.7.2" - "@babel/traverse": "npm:^7.7.2" - "@babel/types": "npm:^7.0.0" - "@jest/transform": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - "@types/babel__traverse": "npm:^7.0.4" - "@types/prettier": "npm:^2.1.5" - babel-preset-current-node-syntax: "npm:^1.0.0" - chalk: "npm:^4.0.0" - expect: "npm:^27.5.1" - graceful-fs: "npm:^4.2.9" - jest-diff: "npm:^27.5.1" - jest-get-type: "npm:^27.5.1" - jest-haste-map: "npm:^27.5.1" - jest-matcher-utils: "npm:^27.5.1" - jest-message-util: "npm:^27.5.1" - jest-util: "npm:^27.5.1" - natural-compare: "npm:^1.4.0" - pretty-format: "npm:^27.5.1" - semver: "npm:^7.3.2" - checksum: 10/01b2c70c56980f21fc299fa68a1d1e3a9612f06d2fcdd1cf60f636c3dd427b814efc5f15aacc567e0c3b28fd32129be4a10fca34555f358534fc88e5cee4ffbb - languageName: node - linkType: hard - -"jest-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-util@npm:27.5.1" - dependencies: - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - graceful-fs: "npm:^4.2.9" - picomatch: "npm:^2.2.3" - checksum: 10/ecc7da41769558e57dbde544141ffceb536ee53b663de1e002d4b86784cea500a10f9a7f02e8b804e517aa0e34d3145118734c7e8b5071f9f18a153ede5b062d - languageName: node - linkType: hard - -"jest-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-util@npm:28.1.3" - dependencies: - "@jest/types": "npm:^28.1.3" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - graceful-fs: "npm:^4.2.9" - picomatch: "npm:^2.2.3" - checksum: 10/92895523d30ddde8f22bebbc20ed6e1be35b0a21c8e9df8a1fc289bf354f6a3f96e5d271340f2ed212a5aa0b55fd7717ff3167da8c5f247d623e2a93a3bf7b32 - languageName: node - linkType: hard - -"jest-validate@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-validate@npm:27.5.1" - dependencies: - "@jest/types": "npm:^27.5.1" - camelcase: "npm:^6.2.0" - chalk: "npm:^4.0.0" - jest-get-type: "npm:^27.5.1" - leven: "npm:^3.1.0" - pretty-format: "npm:^27.5.1" - checksum: 10/1fc4d46ecead311a0362bb8ea7767718b682e3d73b65c2bf55cb33722c13bb340e52d20f35d7af38918f8655a78ebbedf3d8a9eaba4ac067883cef006fcf9197 - languageName: node - linkType: hard - -"jest-watch-typeahead@npm:^1.0.0": - version: 1.1.0 - resolution: "jest-watch-typeahead@npm:1.1.0" - dependencies: - ansi-escapes: "npm:^4.3.1" - chalk: "npm:^4.0.0" - jest-regex-util: "npm:^28.0.0" - jest-watcher: "npm:^28.0.0" - slash: "npm:^4.0.0" - string-length: "npm:^5.0.1" - strip-ansi: "npm:^7.0.1" - peerDependencies: - jest: ^27.0.0 || ^28.0.0 - checksum: 10/59b0a494ac01e3801c9ec586de3209153eedb024b981e25443111c5703711d23b67ebc71b072986c1758307e0bfb5bf1c92bd323f73f58602d6f4f609dce6a0c - languageName: node - linkType: hard - -"jest-watcher@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-watcher@npm:27.5.1" - dependencies: - "@jest/test-result": "npm:^27.5.1" - "@jest/types": "npm:^27.5.1" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.0.0" - jest-util: "npm:^27.5.1" - string-length: "npm:^4.0.1" - checksum: 10/2c2f6cb4256d5cf90c4ae2d8400d5a40399aea9152c85b8b04c3fe4cbecb65e188462de1267d134a42c69d2ddb13a6e50a8ea1aef809b1e4c8fff7a0019ca2c4 - languageName: node - linkType: hard - -"jest-watcher@npm:^28.0.0": - version: 28.1.3 - resolution: "jest-watcher@npm:28.1.3" - dependencies: - "@jest/test-result": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.0.0" - emittery: "npm:^0.10.2" - jest-util: "npm:^28.1.3" - string-length: "npm:^4.0.1" - checksum: 10/e6d2c099d461408a992d144c230112fb282b2d8f54c49227bdb0c3efcfa5ecab70a019fc57d8ad6360000459087bb942c4f72670b52fc5b97ac0d9834f87d24e - languageName: node - linkType: hard - -"jest-worker@npm:^26.2.1": - version: 26.6.2 - resolution: "jest-worker@npm:26.6.2" - dependencies: - "@types/node": "npm:*" - merge-stream: "npm:^2.0.0" - supports-color: "npm:^7.0.0" - checksum: 10/5f6b94cf0e8701392a9402fc7af34a1324d334fc6a440d4d55d2d9348114659c035b8d9b259930f9c9e40cbdda0ef9bfe4d7c780e1107057bbe1202672b38533 - languageName: node - linkType: hard - -"jest-worker@npm:^27.0.2, jest-worker@npm:^27.4.5, jest-worker@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-worker@npm:27.5.1" - dependencies: - "@types/node": "npm:*" - merge-stream: "npm:^2.0.0" - supports-color: "npm:^8.0.0" - checksum: 10/06c6e2a84591d9ede704d5022fc13791e8876e83397c89d481b0063332abbb64c0f01ef4ca7de520b35c7a1058556078d6bdc3631376f4e9ffb42316c1a8488e - languageName: node - linkType: hard - -"jest-worker@npm:^28.0.2": - version: 28.1.3 - resolution: "jest-worker@npm:28.1.3" - dependencies: - "@types/node": "npm:*" - merge-stream: "npm:^2.0.0" - supports-color: "npm:^8.0.0" - checksum: 10/0b5992308276ac8440a789e5317ff8feaa496cd9a0512c9cd73dbb9b6d2ff81b717cef1aa20113633c7280c9e29319af00a4d53d6bb35adbd1e3c01f0c290152 - languageName: node - linkType: hard - -"jest@npm:^27.4.3": - version: 27.5.1 - resolution: "jest@npm:27.5.1" - dependencies: - "@jest/core": "npm:^27.5.1" - import-local: "npm:^3.0.2" - jest-cli: "npm:^27.5.1" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 10/a1435098e1885e48d2a46c660176cd34d69bc80fa72966a1ea8781ab6d5355ee514d45cf871d2da2b5a54509979e53d39fbb9b149c94e430127f44ed0d70639c - languageName: node - linkType: hard - -"jiti@npm:^1.17.1, jiti@npm:^1.18.2, jiti@npm:^1.20.0": - version: 1.21.0 - resolution: "jiti@npm:1.21.0" - bin: - jiti: bin/jiti.js - checksum: 10/005a0239e50381b5c9919f59dbab86128367bd64872f3376dbbde54b6523f41bd134bf22909e2a509e38fd87e1c22125ca255b9b6b53e7df0fedd23f737334cc - languageName: node - linkType: hard - -"jiti@npm:^2.0.0": - version: 2.4.0 - resolution: "jiti@npm:2.4.0" - bin: - jiti: lib/jiti-cli.mjs - checksum: 10/10aa999a4f9bccc82b1dab9ebaf4484a8770450883c1bf7fafc07f8fca1e417fd8e7731e651337d1060c9e2ff3f97362dcdfd27e86d1f385db97f4adf7b5a21d - languageName: node - linkType: hard - -"jju@npm:~1.4.0": - version: 1.4.0 - resolution: "jju@npm:1.4.0" - checksum: 10/1067ff8ce02221faac5a842116ed0ec79a53312a111d0bf8342a80bd02c0a3fdf0b8449694a65947db0a3e8420e8b326dffb489c7dd5866efc380c0d1708a707 - languageName: node - linkType: hard - -"jmespath@npm:^0.16.0": - version: 0.16.0 - resolution: "jmespath@npm:0.16.0" - checksum: 10/cc8b4a5cd2a22a79fc2695d66e5a43bc0020ec1ebdbe648440e796764751af2f495771ce877dea45ee6545530f0a1528450c3c3026bc0e9d976a93447af9fb74 - languageName: node - linkType: hard - -"jose@npm:^4.11.4": - version: 4.14.4 - resolution: "jose@npm:4.14.4" - checksum: 10/44c5fee3df63bb4094f3fe2e135285bfd6cdd8418765b7920375090fe7db396c861f7cae142a6339850196575cf7551d13b73c37e0d6e792f27c70103b8bc901 - languageName: node - linkType: hard - -"jose@npm:^5.9.6": - version: 5.9.6 - resolution: "jose@npm:5.9.6" - checksum: 10/3ebbda9f6a96d493944f2720bf4436347884666cd87b7087a61cff12a3b540fe6fd743b5eb8defe7bc2a45aa58992ae6687da78797d91fc4e3e5e8588aa98c7d - languageName: node - linkType: hard - -"joycon@npm:^3.1.1": - version: 3.1.1 - resolution: "joycon@npm:3.1.1" - checksum: 10/4b36e3479144ec196425f46b3618f8a96ce7e1b658f091a309cd4906215f5b7a402d7df331a3e0a09681381a658d0c5f039cb3cf6907e0a1e17ed847f5d37775 - languageName: node - linkType: hard - -"js-base64@npm:^3.7.5": - version: 3.7.7 - resolution: "js-base64@npm:3.7.7" - checksum: 10/185e34c536a6b1c4e1ad8bd96d25b49a9ea4e6803e259eaaaca95f1b392a0d590b2933c5ca8580c776f7279507944b81ff1faf889d84baa5e31f026e96d676a5 - languageName: node - linkType: hard - -"js-cookie@npm:^2.2.1": - version: 2.2.1 - resolution: "js-cookie@npm:2.2.1" - checksum: 10/4387f5f5691cb96ca9ff8852c589d3012b53f484fda68630a39e20cabc6c5b740f09225e23233ba56cd9de6ebe300a23d20b2c7315f10c309ad5a89fd8c4990b - languageName: node - linkType: hard - -"js-sha3@npm:0.8.0, js-sha3@npm:^0.8.0": - version: 0.8.0 - resolution: "js-sha3@npm:0.8.0" - checksum: 10/a49ac6d3a6bfd7091472a28ab82a94c7fb8544cc584ee1906486536ba1cb4073a166f8c7bb2b0565eade23c5b3a7b8f7816231e0309ab5c549b737632377a20c - languageName: node - linkType: hard - -"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 10/af37d0d913fb56aec6dc0074c163cc71cd23c0b8aad5c2350747b6721d37ba118af35abdd8b33c47ec2800de07dedb16a527ca9c530ee004093e04958bd0cbf2 - languageName: node - linkType: hard - -"js-tokens@npm:^9.0.0": - version: 9.0.0 - resolution: "js-tokens@npm:9.0.0" - checksum: 10/65e7a55a1a18d61f1cf94bfd7704da870b74337fa08d4c58118e69a8b10225b5ad887ff3ae595d720301b0924811a9b0594c679621a85ecbac6e3aac8533c53b - languageName: node - linkType: hard - -"js-yaml@npm:3.x, js-yaml@npm:^3.13.1, js-yaml@npm:^3.6.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: "npm:^1.0.7" - esprima: "npm:^4.0.0" - bin: - js-yaml: bin/js-yaml.js - checksum: 10/9e22d80b4d0105b9899135365f746d47466ed53ef4223c529b3c0f7a39907743fdbd3c4379f94f1106f02755b5e90b2faaf84801a891135544e1ea475d1a1379 - languageName: node - linkType: hard - -"js-yaml@npm:4.1.0, js-yaml@npm:^4.0.0, js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10/c138a34a3fd0d08ebaf71273ad4465569a483b8a639e0b118ff65698d257c2791d3199e3f303631f2cb98213fa7b5f5d6a4621fd0fff819421b990d30d967140 - languageName: node - linkType: hard - -"jsdom@npm:^16.6.0": - version: 16.7.0 - resolution: "jsdom@npm:16.7.0" - dependencies: - abab: "npm:^2.0.5" - acorn: "npm:^8.2.4" - acorn-globals: "npm:^6.0.0" - cssom: "npm:^0.4.4" - cssstyle: "npm:^2.3.0" - data-urls: "npm:^2.0.0" - decimal.js: "npm:^10.2.1" - domexception: "npm:^2.0.1" - escodegen: "npm:^2.0.0" - form-data: "npm:^3.0.0" - html-encoding-sniffer: "npm:^2.0.1" - http-proxy-agent: "npm:^4.0.1" - https-proxy-agent: "npm:^5.0.0" - is-potential-custom-element-name: "npm:^1.0.1" - nwsapi: "npm:^2.2.0" - parse5: "npm:6.0.1" - saxes: "npm:^5.0.1" - symbol-tree: "npm:^3.2.4" - tough-cookie: "npm:^4.0.0" - w3c-hr-time: "npm:^1.0.2" - w3c-xmlserializer: "npm:^2.0.0" - webidl-conversions: "npm:^6.1.0" - whatwg-encoding: "npm:^1.0.5" - whatwg-mimetype: "npm:^2.3.0" - whatwg-url: "npm:^8.5.0" - ws: "npm:^7.4.6" - xml-name-validator: "npm:^3.0.0" - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 10/c530c04b0e3718769a66e19b0b5c762126658bce384d6743b807a28a9d89beba4ad932e474f570323efe6ce832b3d9a8f94816fd6c4d386416d5ea0b64e07ebc - languageName: node - linkType: hard - -"jsdom@npm:^20.0.1": - version: 20.0.3 - resolution: "jsdom@npm:20.0.3" - dependencies: - abab: "npm:^2.0.6" - acorn: "npm:^8.8.1" - acorn-globals: "npm:^7.0.0" - cssom: "npm:^0.5.0" - cssstyle: "npm:^2.3.0" - data-urls: "npm:^3.0.2" - decimal.js: "npm:^10.4.2" - domexception: "npm:^4.0.0" - escodegen: "npm:^2.0.0" - form-data: "npm:^4.0.0" - html-encoding-sniffer: "npm:^3.0.0" - http-proxy-agent: "npm:^5.0.0" - https-proxy-agent: "npm:^5.0.1" - is-potential-custom-element-name: "npm:^1.0.1" - nwsapi: "npm:^2.2.2" - parse5: "npm:^7.1.1" - saxes: "npm:^6.0.0" - symbol-tree: "npm:^3.2.4" - tough-cookie: "npm:^4.1.2" - w3c-xmlserializer: "npm:^4.0.0" - webidl-conversions: "npm:^7.0.0" - whatwg-encoding: "npm:^2.0.0" - whatwg-mimetype: "npm:^3.0.0" - whatwg-url: "npm:^11.0.0" - ws: "npm:^8.11.0" - xml-name-validator: "npm:^4.0.0" - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 10/a4cdcff5b07eed87da90b146b82936321533b5efe8124492acf7160ebd5b9cf2b3c2435683592bf1cffb479615245756efb6c173effc1906f845a86ed22af985 - languageName: node - linkType: hard - -"jsel@npm:^1.1.6": - version: 1.1.6 - resolution: "jsel@npm:1.1.6" - checksum: 10/88d3c4f0207788f2959d5fba0d85c824c7dd2c1230cb4fde6f1f5de6c145e63f72ef3665afaa7dcc3d732a7412f8f39eaa1f868934cb1c1d6ccc707ff571dba5 - languageName: node - linkType: hard - -"jsep@npm:^1.4.0": - version: 1.4.0 - resolution: "jsep@npm:1.4.0" - checksum: 10/935824fe6ac28fcff3cd13878f508f99f6c13e7f0f53ec9fca0d3db465e6dd15f8af030bcdc75a38b07c78359c656647435923a26aceb91607027021f00c17f2 - languageName: node - linkType: hard - -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" - bin: - jsesc: bin/jsesc - checksum: 10/d2096abdcdec56969764b40ffc91d4a23408aa2f351b4d1c13f736f25476643238c43fdbaf38a191c26b1b78fd856d965f5d4d0dde7b89459cd94025190cdf13 - languageName: node - linkType: hard - -"jsesc@npm:^3.0.2": - version: 3.0.2 - resolution: "jsesc@npm:3.0.2" - bin: - jsesc: bin/jsesc - checksum: 10/8e5a7de6b70a8bd71f9cb0b5a7ade6a73ae6ab55e697c74cc997cede97417a3a65ed86c36f7dd6125fe49766e8386c845023d9e213916ca92c9dfdd56e2babf3 - languageName: node - linkType: hard - -"jsesc@npm:~0.5.0": - version: 0.5.0 - resolution: "jsesc@npm:0.5.0" - bin: - jsesc: bin/jsesc - checksum: 10/fab949f585c71e169c5cbe00f049f20de74f067081bbd64a55443bad1c71e1b5a5b448f2359bf2fe06f5ed7c07e2e4a9101843b01c823c30b6afc11f5bfaf724 - languageName: node - linkType: hard - -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 10/82876154521b7b68ba71c4f969b91572d1beabadd87bd3a6b236f85fbc7dc4695089191ed60bb59f9340993c51b33d479f45b6ba9f3548beb519705281c32c3c - languageName: node - linkType: hard - -"json-parse-better-errors@npm:^1.0.1": - version: 1.0.2 - resolution: "json-parse-better-errors@npm:1.0.2" - checksum: 10/5553232045359b767b0f2039a6777fede1a8d7dca1a0ffb1f9ef73a7519489ae7f566b2e040f2b4c38edb8e35e37ae07af7f0a52420902f869ee0dbf5dc6c784 - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 10/5f3a99009ed5f2a5a67d06e2f298cc97bc86d462034173308156f15b43a6e850be8511dc204b9b94566305da2947f7d90289657237d210351a39059ff9d666cf - languageName: node - linkType: hard - -"json-rpc-engine@npm:^6.1.0": - version: 6.1.0 - resolution: "json-rpc-engine@npm:6.1.0" - dependencies: - "@metamask/safe-event-emitter": "npm:^2.0.0" - eth-rpc-errors: "npm:^4.0.2" - checksum: 10/00d5b5228e90f126dd52176598db6e5611d295d3a3f7be21254c30c1b6555811260ef2ec2df035cd8e583e4b12096259da721e29f4ea2affb615f7dfc960a6a6 - languageName: node - linkType: hard - -"json-rpc-random-id@npm:^1.0.0, json-rpc-random-id@npm:^1.0.1": - version: 1.0.1 - resolution: "json-rpc-random-id@npm:1.0.1" - checksum: 10/fcd2e884193a129ace4002bd65a86e9cdb206733b4693baea77bd8b372cf8de3043fbea27716a2c9a716581a908ca8d978d9dfec4847eb2cf77edb4cf4b2252c - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 10/7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b - languageName: node - linkType: hard - -"json-schema-traverse@npm:^1.0.0": - version: 1.0.0 - resolution: "json-schema-traverse@npm:1.0.0" - checksum: 10/02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad - languageName: node - linkType: hard - -"json-schema@npm:^0.4.0": - version: 0.4.0 - resolution: "json-schema@npm:0.4.0" - checksum: 10/8b3b64eff4a807dc2a3045b104ed1b9335cd8d57aa74c58718f07f0f48b8baa3293b00af4dcfbdc9144c3aafea1e97982cc27cc8e150fc5d93c540649507a458 - languageName: node - linkType: hard - -"json-source-map@npm:^0.6.1": - version: 0.6.1 - resolution: "json-source-map@npm:0.6.1" - checksum: 10/211a330bc2819b5c4061ce5c091c787595084d9ee31f3bc5369acf04d017612cc1306e84727c31182fd06bbc1aa619d45dcd979062f6796df49d015673dd32b2 - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: 10/12786c2e2f22c27439e6db0532ba321f1d0617c27ad8cb1c352a0e9249a50182fd1ba8b52a18899291604b0c32eafa8afd09e51203f19109a0537f68db2b652d - languageName: node - linkType: hard - -"json-stable-stringify@npm:^1.0.1": - version: 1.0.2 - resolution: "json-stable-stringify@npm:1.0.2" - dependencies: - jsonify: "npm:^0.0.1" - checksum: 10/96c8d697520072231c4916b7c0084ea857418cad0d06dc910f89a40df3824386a8eee5ed83ceea25b6052d67223fe821f9b1e51be311383104c5b2305b1dc87e - languageName: node - linkType: hard - -"json-stream-stringify@npm:^3.1.4": - version: 3.1.6 - resolution: "json-stream-stringify@npm:3.1.6" - checksum: 10/d52919465b4a31d7a0b5720ca0e6268f757fc1515486d5c77cfb75f7a9e4b58e13a73a2f811d6d322b9a101750d3961b48a68ee9d9b299ac3846ef2921a62a81 - languageName: node - linkType: hard - -"json-stringify-safe@npm:^5.0.1": - version: 5.0.1 - resolution: "json-stringify-safe@npm:5.0.1" - checksum: 10/59169a081e4eeb6f9559ae1f938f656191c000e0512aa6df9f3c8b2437a4ab1823819c6b9fd1818a4e39593ccfd72e9a051fdd3e2d1e340ed913679e888ded8c - languageName: node - linkType: hard - -"json-to-pretty-yaml@npm:^1.2.2": - version: 1.2.2 - resolution: "json-to-pretty-yaml@npm:1.2.2" - dependencies: - remedial: "npm:^1.0.7" - remove-trailing-spaces: "npm:^1.0.6" - checksum: 10/3ccd527c9a9cf41e123d75445605801dd0eebcddf53e00af05febc212a3657fceb03063399693d79cb2b7a8530dd062420caf35fa02cc0a4ae182fb74843d920 - languageName: node - linkType: hard - -"json2mq@npm:^0.2.0": - version: 0.2.0 - resolution: "json2mq@npm:0.2.0" - dependencies: - string-convert: "npm:^0.2.0" - checksum: 10/0ad2f6a268308beeaf3077652b5ae2b0701ef357840e1542cc838198424a79af21dad759595e2cce8cd9b154e0b0f758c217adea4b3dfbaafff3ff9bf82394a1 - languageName: node - linkType: hard - -"json5@npm:^1.0.1, json5@npm:^1.0.2": - version: 1.0.2 - resolution: "json5@npm:1.0.2" - dependencies: - minimist: "npm:^1.2.0" - bin: - json5: lib/cli.js - checksum: 10/a78d812dbbd5642c4f637dd130954acfd231b074965871c3e28a5bbd571f099d623ecf9161f1960c4ddf68e0cc98dee8bebfdb94a71ad4551f85a1afc94b63f6 - languageName: node - linkType: hard - -"json5@npm:^2.1.2, json5@npm:^2.2.0, json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 10/1db67b853ff0de3534085d630691d3247de53a2ed1390ba0ddff681ea43e9b3e30ecbdb65c5e9aab49435e44059c23dbd6fee8ee619419ba37465bb0dd7135da - languageName: node - linkType: hard - -"jsonc-parser@npm:^3.2.0": - version: 3.2.0 - resolution: "jsonc-parser@npm:3.2.0" - checksum: 10/bd68b902e5f9394f01da97921f49c5084b2dc03a0c5b4fdb2a429f8d6f292686c1bf87badaeb0a8148d024192a88f5ad2e57b2918ba43fe25cf15f3371db64d4 - languageName: node - linkType: hard - -"jsonfile@npm:^4.0.0": - version: 4.0.0 - resolution: "jsonfile@npm:4.0.0" - dependencies: - graceful-fs: "npm:^4.1.6" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10/17796f0ab1be8479827d3683433f97ebe0a1c6932c3360fa40348eac36904d69269aab26f8b16da311882d94b42e9208e8b28e490bf926364f3ac9bff134c226 - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10/03014769e7dc77d4cf05fa0b534907270b60890085dd5e4d60a382ff09328580651da0b8b4cdf44d91e4c8ae64d91791d965f05707beff000ed494a38b6fec85 - languageName: node - linkType: hard - -"jsonify@npm:^0.0.1": - version: 0.0.1 - resolution: "jsonify@npm:0.0.1" - checksum: 10/7b86b6f4518582ff1d8b7624ed6c6277affd5246445e864615dbdef843a4057ac58587684faf129ea111eeb80e01c15f0a4d9d03820eb3f3985fa67e81b12398 - languageName: node - linkType: hard - -"jsonparse@npm:^1.2.0": - version: 1.3.1 - resolution: "jsonparse@npm:1.3.1" - checksum: 10/24531e956f0f19d79e22c157cebd81b37af3486ae22f9bc1028f8c2a4d1b70df48b168ff86f8568d9c2248182de9b6da9f50f685d5e4b9d1d2d339d2a29d15bc - languageName: node - linkType: hard - -"jsonpath-plus@npm:^10.3.0": - version: 10.3.0 - resolution: "jsonpath-plus@npm:10.3.0" - dependencies: - "@jsep-plugin/assignment": "npm:^1.3.0" - "@jsep-plugin/regex": "npm:^1.0.4" - jsep: "npm:^1.4.0" - bin: - jsonpath: bin/jsonpath-cli.js - jsonpath-plus: bin/jsonpath-cli.js - checksum: 10/082302334414c7c5ab0cc8239563118f7f14bb2949d001b009f436491d00f94a7a293eed3eaf61ffdaf72f6fda9d25198a4280c4f68a4c403154ca7ed2bd0dc9 - languageName: node - linkType: hard - -"jsonpointer@npm:^5.0.0": - version: 5.0.1 - resolution: "jsonpointer@npm:5.0.1" - checksum: 10/0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c - languageName: node - linkType: hard - -"jsonrepair@npm:^3.0.0": - version: 3.12.0 - resolution: "jsonrepair@npm:3.12.0" - bin: - jsonrepair: bin/cli.js - checksum: 10/eadbe606a08385cf81dfc9233620826b959d00b6ea69d78fe74a802ed1b6d4000222450617c67e97389003f8f75c02e0fccbf11ba3c8cd0a7cdec1619fb29ce7 - languageName: node - linkType: hard - -"jsonschema@npm:^1.2.4, jsonschema@npm:^1.4.1": - version: 1.4.1 - resolution: "jsonschema@npm:1.4.1" - checksum: 10/d7a188da7a3100a2caa362b80e98666d46607b7a7153aac405b8e758132961911c6df02d444d4700691330874e21a62639f550e856b21ddd28423690751ca9c6 - languageName: node - linkType: hard - -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": - version: 3.3.5 - resolution: "jsx-ast-utils@npm:3.3.5" - dependencies: - array-includes: "npm:^3.1.6" - array.prototype.flat: "npm:^1.3.1" - object.assign: "npm:^4.1.4" - object.values: "npm:^1.1.6" - checksum: 10/b61d44613687dfe4cc8ad4b4fbf3711bf26c60b8d5ed1f494d723e0808415c59b24a7c0ed8ab10736a40ff84eef38cbbfb68b395e05d31117b44ffc59d31edfc - languageName: node - linkType: hard - -"keccak@npm:^3.0.0, keccak@npm:^3.0.2, keccak@npm:^3.0.3": - version: 3.0.4 - resolution: "keccak@npm:3.0.4" - dependencies: - node-addon-api: "npm:^2.0.0" - node-gyp: "npm:latest" - node-gyp-build: "npm:^4.2.0" - readable-stream: "npm:^3.6.0" - checksum: 10/45478bb0a57e44d0108646499b8360914b0fbc8b0e088f1076659cb34faaa9eb829c40f6dd9dadb3460bb86cc33153c41fed37fe5ce09465a60e71e78c23fa55 - languageName: node - linkType: hard - -"keyv@npm:^4.5.3, keyv@npm:^4.5.4": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: "npm:3.0.1" - checksum: 10/167eb6ef64cc84b6fa0780ee50c9de456b422a1e18802209234f7c2cf7eae648c7741f32e50d7e24ccb22b24c13154070b01563d642755b156c357431a191e75 - languageName: node - linkType: hard - -"keyvaluestorage-interface@npm:^1.0.0": - version: 1.0.0 - resolution: "keyvaluestorage-interface@npm:1.0.0" - checksum: 10/e652448bc915f9c21b9916678ed58f5314c831f0a284d190a340c0370296c71918e0cdc1156a17b12d1993941b302f0881e23fb9c395079e2065a7d2f33d0199 - languageName: node - linkType: hard - -"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 10/5873d303fb36aad875b7538798867da2ae5c9e328d67194b0162a3659a627d22f742fc9c4ae95cd1704132a24b00cae5041fc00c0f6ef937dc17080dc4dbb962 - languageName: node - linkType: hard - -"klaw-sync@npm:^6.0.0": - version: 6.0.0 - resolution: "klaw-sync@npm:6.0.0" - dependencies: - graceful-fs: "npm:^4.1.11" - checksum: 10/0da397f8961313c3ef8f79fb63af9002cde5a8fb2aeb1a37351feff0dd6006129c790400c3f5c3b4e757bedcabb13d21ec0a5eaef5a593d59515d4f2c291e475 - languageName: node - linkType: hard - -"kleros-v2@workspace:.": - version: 0.0.0-use.local - resolution: "kleros-v2@workspace:." - dependencies: - "@commitlint/cli": "npm:^17.8.1" - "@commitlint/config-conventional": "npm:^17.8.1" - assert: "npm:^2.1.0" - buffer: "npm:^5.7.1" - conventional-changelog-cli: "npm:^2.2.2" - crypto-browserify: "npm:^3.12.1" - husky: "npm:^8.0.3" - lint-staged: "npm:^13.3.0" - os-browserify: "npm:^0.3.0" - path-browserify: "npm:^1.0.1" - process: "npm:^0.11.10" - string_decoder: "npm:^1.3.0" - languageName: unknown - linkType: soft - -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: 10/0c0ecaf00a5c6173d25059c7db2113850b5457016dfa1d0e3ef26da4704fbb186b4938d7611246d86f0ddf1bccf26828daa5877b1f232a65e7373d0122a83e7f - languageName: node - linkType: hard - -"kleur@npm:^4.0.3": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 10/44d84cc4eedd4311099402ef6d4acd9b2d16e08e499d6ef3bb92389bd4692d7ef09e35248c26e27f98acac532122acb12a1bfee645994ae3af4f0a37996da7df - languageName: node - linkType: hard - -"klona@npm:^2.0.4, klona@npm:^2.0.5": - version: 2.0.6 - resolution: "klona@npm:2.0.6" - checksum: 10/ed7e2c9af58cb646e758e60b75dec24bf72466066290f78c515a2bae23a06fa280f11ff3210c43b94a18744954aa5358f9d46583d5e4c36da073ecc3606355c4 - languageName: node - linkType: hard - -"kolorist@npm:^1.8.0": - version: 1.8.0 - resolution: "kolorist@npm:1.8.0" - checksum: 10/71d5d122951cc65f2f14c3e1d7f8fd91694b374647d4f6deec3816d018cd04a44edd9578d93e00c82c2053b925e5d30a0565746c4171f4ca9fce1a13bd5f3315 - languageName: node - linkType: hard - -"kubo-rpc-client@npm:^5.0.2": - version: 5.0.2 - resolution: "kubo-rpc-client@npm:5.0.2" - dependencies: - "@ipld/dag-cbor": "npm:^9.0.0" - "@ipld/dag-json": "npm:^10.0.0" - "@ipld/dag-pb": "npm:^4.0.0" - "@libp2p/crypto": "npm:^5.0.0" - "@libp2p/interface": "npm:^2.0.0" - "@libp2p/logger": "npm:^5.0.0" - "@libp2p/peer-id": "npm:^5.0.0" - "@multiformats/multiaddr": "npm:^12.2.1" - "@multiformats/multiaddr-to-uri": "npm:^10.0.1" - any-signal: "npm:^4.1.1" - blob-to-it: "npm:^2.0.5" - browser-readablestream-to-it: "npm:^2.0.5" - dag-jose: "npm:^5.0.0" - electron-fetch: "npm:^1.9.1" - err-code: "npm:^3.0.1" - ipfs-unixfs: "npm:^11.1.4" - iso-url: "npm:^1.2.1" - it-all: "npm:^3.0.4" - it-first: "npm:^3.0.4" - it-glob: "npm:^3.0.1" - it-last: "npm:^3.0.4" - it-map: "npm:^3.0.5" - it-peekable: "npm:^3.0.3" - it-to-stream: "npm:^1.0.0" - merge-options: "npm:^3.0.4" - multiformats: "npm:^13.1.0" - nanoid: "npm:^5.0.7" - native-fetch: "npm:^4.0.2" - parse-duration: "npm:^1.0.2" - react-native-fetch-api: "npm:^3.0.0" - stream-to-it: "npm:^1.0.1" - uint8arrays: "npm:^5.0.3" - wherearewe: "npm:^2.0.1" - checksum: 10/0a0d3517f963d72d1c795be10a0de3b1167cef7399e85201cefa72b24deeaa101f6d3b21b5efa5197ed4e0aa2dc8bde610788e9fd987a99e57b926d78b0d82ab - languageName: node - linkType: hard - -"language-subtag-registry@npm:^0.3.20": - version: 0.3.23 - resolution: "language-subtag-registry@npm:0.3.23" - checksum: 10/fe13ed74ab9f862db8e5747b98cc9aa08d52a19f85b5cdb4975cd364c8539bd2da3380e4560d2dbbd728ec33dff8a4b4421fcb2e5b1b1bdaa21d16f91a54d0d4 - languageName: node - linkType: hard - -"language-tags@npm:^1.0.9": - version: 1.0.9 - resolution: "language-tags@npm:1.0.9" - dependencies: - language-subtag-registry: "npm:^0.3.20" - checksum: 10/d3a7c14b694e67f519153d6df6cb200681648d38d623c3bfa9d6a66a5ec5493628acb88e9df5aceef3cf1902ab263a205e7d59ee4cf1d6bb67e707b83538bd6d - languageName: node - linkType: hard - -"latest-version@npm:^7.0.0": - version: 7.0.0 - resolution: "latest-version@npm:7.0.0" - dependencies: - package-json: "npm:^8.1.0" - checksum: 10/1f0deba00d5a34394cce4463c938811f51bbb539b131674f4bb2062c63f2cc3b80bccd56ecade3bd5932d04a34cf0a5a8a2ccc4ec9e5e6b285a9a7b3e27d0d66 - languageName: node - linkType: hard - -"launch-editor@npm:^2.6.0": - version: 2.6.0 - resolution: "launch-editor@npm:2.6.0" - dependencies: - picocolors: "npm:^1.0.0" - shell-quote: "npm:^1.7.3" - checksum: 10/48e4230643e8fdb5c14c11314706d58d9f3fbafe2606be3d6e37da1918ad8bfe39dd87875c726a1b59b9f4da99d87ec3e36d4c528464f0b820f9e91e5cb1c02d - languageName: node - linkType: hard - -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 10/638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: "npm:^1.2.1" - type-check: "npm:~0.4.0" - checksum: 10/2e4720ff79f21ae08d42374b0a5c2f664c5be8b6c8f565bb4e1315c96ed3a8acaa9de788ffed82d7f2378cf36958573de07ef92336cb5255ed74d08b8318c9ee - languageName: node - linkType: hard - -"levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" - dependencies: - prelude-ls: "npm:~1.1.2" - type-check: "npm:~0.3.2" - checksum: 10/e1c3e75b5c430d9aa4c32c83c8a611e4ca53608ca78e3ea3bf6bbd9d017e4776d05d86e27df7901baebd3afa732abede9f26f715b8c1be19e95505c7a3a7b589 - languageName: node - linkType: hard - -"lie@npm:3.1.1": - version: 3.1.1 - resolution: "lie@npm:3.1.1" - dependencies: - immediate: "npm:~3.0.5" - checksum: 10/c2c7d9dcc3a9aae641f41cde4e2e2cd571e4426b1f5915862781d77776672dcbca43461e16f4d382c9a300825c15e1a4923f1def3a5568d97577e077a3cecb44 - languageName: node - linkType: hard - -"lilconfig@npm:2.1.0, lilconfig@npm:^2.0.3, lilconfig@npm:^2.0.5, lilconfig@npm:^2.1.0": - version: 2.1.0 - resolution: "lilconfig@npm:2.1.0" - checksum: 10/b1314a2e55319013d5e7d7d08be39015829d2764a1eaee130129545d40388499d81b1c31b0f9b3417d4db12775a88008b72ec33dd06e0184cf7503b32ca7cc0b - languageName: node - linkType: hard - -"lilconfig@npm:^3.1.3": - version: 3.1.3 - resolution: "lilconfig@npm:3.1.3" - checksum: 10/b932ce1af94985f0efbe8896e57b1f814a48c8dbd7fc0ef8469785c6303ed29d0090af3ccad7e36b626bfca3a4dc56cc262697e9a8dd867623cf09a39d54e4c3 - languageName: node - linkType: hard - -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 10/0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 - languageName: node - linkType: hard - -"lint-staged@npm:^13.3.0": - version: 13.3.0 - resolution: "lint-staged@npm:13.3.0" - dependencies: - chalk: "npm:5.3.0" - commander: "npm:11.0.0" - debug: "npm:4.3.4" - execa: "npm:7.2.0" - lilconfig: "npm:2.1.0" - listr2: "npm:6.6.1" - micromatch: "npm:4.0.5" - pidtree: "npm:0.6.0" - string-argv: "npm:0.3.2" - yaml: "npm:2.3.1" - bin: - lint-staged: bin/lint-staged.js - checksum: 10/6620f70a0ea1060c5b153ae521a1fb5b6e7a36c81188600cda767961b52c6729e8caddba96e5209195c223fe6343c245afb602fdde4f2678827441430aba54fe - languageName: node - linkType: hard - -"listhen@npm:^1.5.5": - version: 1.5.5 - resolution: "listhen@npm:1.5.5" - dependencies: - "@parcel/watcher": "npm:^2.3.0" - "@parcel/watcher-wasm": "npm:2.3.0" - citty: "npm:^0.1.4" - clipboardy: "npm:^3.0.0" - consola: "npm:^3.2.3" - defu: "npm:^6.1.2" - get-port-please: "npm:^3.1.1" - h3: "npm:^1.8.1" - http-shutdown: "npm:^1.2.2" - jiti: "npm:^1.20.0" - mlly: "npm:^1.4.2" - node-forge: "npm:^1.3.1" - pathe: "npm:^1.1.1" - std-env: "npm:^3.4.3" - ufo: "npm:^1.3.0" - untun: "npm:^0.1.2" - uqr: "npm:^0.1.2" - bin: - listen: bin/listhen.mjs - listhen: bin/listhen.mjs - checksum: 10/febc24f7ca2ca43f4a55c4ccac8f5a9b916220d13cde92f6daf748426f9e12822fc53b235dbc13ae87436cdc14c58b1c371f3bf2bb8894321081a35e44d30b10 - languageName: node - linkType: hard - -"listr2@npm:6.6.1": - version: 6.6.1 - resolution: "listr2@npm:6.6.1" - dependencies: - cli-truncate: "npm:^3.1.0" - colorette: "npm:^2.0.20" - eventemitter3: "npm:^5.0.1" - log-update: "npm:^5.0.1" - rfdc: "npm:^1.3.0" - wrap-ansi: "npm:^8.1.0" - peerDependencies: - enquirer: ">= 2.3.0 < 3" - peerDependenciesMeta: - enquirer: - optional: true - checksum: 10/3cc618d9dee0d6a6bd22053db33268db3d09373f3fc64838ada011ac20920a79be52e7adfcc1276ac6be1f6b692c70196a75375002a6fcdd56c9ab51a2cec877 - languageName: node - linkType: hard - -"listr2@npm:^4.0.5": - version: 4.0.5 - resolution: "listr2@npm:4.0.5" - dependencies: - cli-truncate: "npm:^2.1.0" - colorette: "npm:^2.0.16" - log-update: "npm:^4.0.0" - p-map: "npm:^4.0.0" - rfdc: "npm:^1.3.0" - rxjs: "npm:^7.5.5" - through: "npm:^2.3.8" - wrap-ansi: "npm:^7.0.0" - peerDependencies: - enquirer: ">= 2.3.0 < 3" - peerDependenciesMeta: - enquirer: - optional: true - checksum: 10/9c591fdd4fd6b7e8b4feca60380be01d74c65a98857f6caff2418c609fb9f0016c2e1b65c0ef5b1f4ff015967be87e8642e7ac3ad7ce0aa3c1a0329b60128b3b - languageName: node - linkType: hard - -"lit-element@npm:^3.3.0": - version: 3.3.2 - resolution: "lit-element@npm:3.3.2" - dependencies: - "@lit-labs/ssr-dom-shim": "npm:^1.1.0" - "@lit/reactive-element": "npm:^1.3.0" - lit-html: "npm:^2.7.0" - checksum: 10/61a49b8ca0d9fc8d8e4a4553570dc5f81650ef3c7d7715de812c4805d461df55f36fa4e2f212b5347716224cd1e54d223105043cdd4a209c32ea3bfdfb5ba811 - languageName: node - linkType: hard - -"lit-element@npm:^4.0.0": - version: 4.0.3 - resolution: "lit-element@npm:4.0.3" - dependencies: - "@lit-labs/ssr-dom-shim": "npm:^1.1.2" - "@lit/reactive-element": "npm:^2.0.0" - lit-html: "npm:^3.1.0" - checksum: 10/321b705301b9bd752f52e0c673eeaf2fea93de12c3da2cfa6829d75407752732d6f81f5e0cc6aa1a125aa70182b03658f7ceec2039089ba3d3e97652fee983f4 - languageName: node - linkType: hard - -"lit-html@npm:^2.7.0, lit-html@npm:^2.8.0": - version: 2.8.0 - resolution: "lit-html@npm:2.8.0" - dependencies: - "@types/trusted-types": "npm:^2.0.2" - checksum: 10/3503e55e2927c2ff94773cf041fc4128f92291869c9192f36eacb7f95132d11f6b329e5b910ab60a4456349cd2e6d23b33d83291b24d557bcd6b904d6314ac1a - languageName: node - linkType: hard - -"lit-html@npm:^3.1.0": - version: 3.1.1 - resolution: "lit-html@npm:3.1.1" - dependencies: - "@types/trusted-types": "npm:^2.0.2" - checksum: 10/3e8a89bbd5cb94fc0baeb34b829952f03d698850cac2be327acda232929f9bad61449095ced6438742567a47a6263d8ba45934277771e61d7754e165cde38140 - languageName: node - linkType: hard - -"lit@npm:2.8.0": - version: 2.8.0 - resolution: "lit@npm:2.8.0" - dependencies: - "@lit/reactive-element": "npm:^1.6.0" - lit-element: "npm:^3.3.0" - lit-html: "npm:^2.8.0" - checksum: 10/aa64c1136b855ba328d41157dba67657d480345aeec3c1dd829abeb67719d759c9ff2ade9903f9cfb4f9d012b16087034aaa5b33f1182e70c615765562e3251b - languageName: node - linkType: hard - -"lit@npm:3.1.0": - version: 3.1.0 - resolution: "lit@npm:3.1.0" - dependencies: - "@lit/reactive-element": "npm:^2.0.0" - lit-element: "npm:^4.0.0" - lit-html: "npm:^3.1.0" - checksum: 10/cf46959d909a5dce2ac4bff3d9f8aa942be223c30ce1d4e86e66eda55d53f2886e4ae6092f9ab825c1a26d56d1a57c360981040cb579d53a73869d07ec04bad9 - languageName: node - linkType: hard - -"load-json-file@npm:^4.0.0": - version: 4.0.0 - resolution: "load-json-file@npm:4.0.0" - dependencies: - graceful-fs: "npm:^4.1.2" - parse-json: "npm:^4.0.0" - pify: "npm:^3.0.0" - strip-bom: "npm:^3.0.0" - checksum: 10/8f5d6d93ba64a9620445ee9bde4d98b1eac32cf6c8c2d20d44abfa41a6945e7969456ab5f1ca2fb06ee32e206c9769a20eec7002fe290de462e8c884b6b8b356 - languageName: node - linkType: hard - -"load-tsconfig@npm:^0.2.3": - version: 0.2.5 - resolution: "load-tsconfig@npm:0.2.5" - checksum: 10/b3176f6f0c86dbdbbc7e337440a803b0b4407c55e2e1cfc53bd3db68e0211448f36428a6075ecf5e286db5d1bf791da756fc0ac4d2447717140fb6a5218ecfb4 - languageName: node - linkType: hard - -"loader-runner@npm:^4.2.0": - version: 4.3.0 - resolution: "loader-runner@npm:4.3.0" - checksum: 10/555ae002869c1e8942a0efd29a99b50a0ce6c3296efea95caf48f00d7f6f7f659203ed6613688b6181aa81dc76de3e65ece43094c6dffef3127fe1a84d973cd3 - languageName: node - linkType: hard - -"loader-utils@npm:1.4.2": - version: 1.4.2 - resolution: "loader-utils@npm:1.4.2" - dependencies: - big.js: "npm:^5.2.2" - emojis-list: "npm:^3.0.0" - json5: "npm:^1.0.1" - checksum: 10/2ae94cc88ad9cf2991e322b9ddf547cff80cf6fc0f9c77546b258c5ed9f77b0827f64c2625cb0baa06432f1f441bb4744c9ab1e1412ee6f8e97d31f8e9c730d6 - languageName: node - linkType: hard - -"loader-utils@npm:^2.0.0, loader-utils@npm:^2.0.4": - version: 2.0.4 - resolution: "loader-utils@npm:2.0.4" - dependencies: - big.js: "npm:^5.2.2" - emojis-list: "npm:^3.0.0" - json5: "npm:^2.1.2" - checksum: 10/28bd9af2025b0cb2fc6c9c2d8140a75a3ab61016e5a86edf18f63732216e985a50bf2479a662555beb472a54d12292e380423705741bfd2b54cab883aa067f18 - languageName: node - linkType: hard - -"loader-utils@npm:^3.2.0": - version: 3.2.1 - resolution: "loader-utils@npm:3.2.1" - checksum: 10/177f5bb9b4c651263714fcd1b50682c1367b06893462529f510287775f9e461ca27a41bf364c8dffa9cd74ed9e8b1fdb30c03a526f6bcf12573bdc1a1644d086 - languageName: node - linkType: hard - -"local-pkg@npm:^0.5.0": - version: 0.5.0 - resolution: "local-pkg@npm:0.5.0" - dependencies: - mlly: "npm:^1.4.2" - pkg-types: "npm:^1.0.3" - checksum: 10/20f4caba50dc6fb00ffcc1a78bc94b5acb33995e0aadf4d4edcdeab257e891aa08f50afddf02f3240b2c3d02432bc2078f2a916a280ed716b64753a3d250db70 - languageName: node - linkType: hard - -"localforage@npm:^1.8.1": - version: 1.10.0 - resolution: "localforage@npm:1.10.0" - dependencies: - lie: "npm:3.1.1" - checksum: 10/d5c44be3a09169b013a3ebe252e678aaeb6938ffe72e9e12c199fd4307c1ec9d1a057ac2dfdfbb1379dfeec467a34ad0fc3ecd27489a2c43a154fb72b2822542 - languageName: node - linkType: hard - -"locate-character@npm:^3.0.0": - version: 3.0.0 - resolution: "locate-character@npm:3.0.0" - checksum: 10/2d9e9f45e2dce7464c016ed6d81ebc938bc9c656392f7d6858308ab6fdaa57bcd4b6b479291d49e7db4047e3f321ddadbe78355f349b7974b203f19674e277cc - languageName: node - linkType: hard - -"locate-path@npm:^2.0.0": - version: 2.0.0 - resolution: "locate-path@npm:2.0.0" - dependencies: - p-locate: "npm:^2.0.0" - path-exists: "npm:^3.0.0" - checksum: 10/02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755 - languageName: node - linkType: hard - -"locate-path@npm:^3.0.0": - version: 3.0.0 - resolution: "locate-path@npm:3.0.0" - dependencies: - p-locate: "npm:^3.0.0" - path-exists: "npm:^3.0.0" - checksum: 10/53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: "npm:^4.1.0" - checksum: 10/83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 - languageName: node - linkType: hard - -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" - dependencies: - p-locate: "npm:^5.0.0" - checksum: 10/72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a - languageName: node - linkType: hard - -"lodash-es@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash-es@npm:4.17.21" - checksum: 10/03f39878ea1e42b3199bd3f478150ab723f93cc8730ad86fec1f2804f4a07c6e30deaac73cad53a88e9c3db33348bb8ceeb274552390e7a75d7849021c02df43 - languageName: node - linkType: hard - -"lodash.camelcase@npm:^4.3.0": - version: 4.3.0 - resolution: "lodash.camelcase@npm:4.3.0" - checksum: 10/c301cc379310441dc73cd6cebeb91fb254bea74e6ad3027f9346fc43b4174385153df420ffa521654e502fd34c40ef69ca4e7d40ee7129a99e06f306032bfc65 - languageName: node - linkType: hard - -"lodash.debounce@npm:^4.0.8": - version: 4.0.8 - resolution: "lodash.debounce@npm:4.0.8" - checksum: 10/cd0b2819786e6e80cb9f5cda26b1a8fc073daaf04e48d4cb462fa4663ec9adb3a5387aa22d7129e48eed1afa05b482e2a6b79bfc99b86886364449500cbb00fd - languageName: node - linkType: hard - -"lodash.defaults@npm:^4.2.0": - version: 4.2.0 - resolution: "lodash.defaults@npm:4.2.0" - checksum: 10/6a2a9ea5ad7585aff8d76836c9e1db4528e5f5fa50fc4ad81183152ba8717d83aef8aec4fa88bf3417ed946fd4b4358f145ee08fbc77fb82736788714d3e12db - languageName: node - linkType: hard - -"lodash.get@npm:^4.4.2": - version: 4.4.2 - resolution: "lodash.get@npm:4.4.2" - checksum: 10/2a4925f6e89bc2c010a77a802d1ba357e17ed1ea03c2ddf6a146429f2856a216663e694a6aa3549a318cbbba3fd8b7decb392db457e6ac0b83dc745ed0a17380 - languageName: node - linkType: hard - -"lodash.isarguments@npm:^3.1.0": - version: 3.1.0 - resolution: "lodash.isarguments@npm:3.1.0" - checksum: 10/e5186d5fe0384dcb0652501d9d04ebb984863ebc9c9faa2d4b9d5dfd81baef9ffe8e2887b9dc471d62ed092bc0788e5f1d42e45c72457a2884bbb54ac132ed92 - languageName: node - linkType: hard - -"lodash.isequal@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.isequal@npm:4.5.0" - checksum: 10/82fc58a83a1555f8df34ca9a2cd300995ff94018ac12cc47c349655f0ae1d4d92ba346db4c19bbfc90510764e0c00ddcc985a358bdcd4b3b965abf8f2a48a214 - languageName: node - linkType: hard - -"lodash.isfunction@npm:^3.0.9": - version: 3.0.9 - resolution: "lodash.isfunction@npm:3.0.9" - checksum: 10/99e54c34b1e8a9ba75c034deb39cedbd2aca7af685815e67a2a8ec4f73ec9748cda6ebee5a07d7de4b938e90d421fd280e9c385cc190f903ac217ac8aff30314 - languageName: node - linkType: hard - -"lodash.ismatch@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.ismatch@npm:4.4.0" - checksum: 10/946a7176cdf4048f7b624378defda00dc0d01a2dad9933c54dad11fbecc253716df4210fbbfcd7d042e6fdb7603463cfe48e0ef576e20bf60d43f7deb1a2fe04 - languageName: node - linkType: hard - -"lodash.isplainobject@npm:^4.0.6": - version: 4.0.6 - resolution: "lodash.isplainobject@npm:4.0.6" - checksum: 10/29c6351f281e0d9a1d58f1a4c8f4400924b4c79f18dfc4613624d7d54784df07efaff97c1ff2659f3e085ecf4fff493300adc4837553104cef2634110b0d5337 - languageName: node - linkType: hard - -"lodash.kebabcase@npm:^4.1.1": - version: 4.1.1 - resolution: "lodash.kebabcase@npm:4.1.1" - checksum: 10/d84ec5441ef8e5c718c50315f35b0a045a77c7e8ee3e54472c06dc31f6f3602e95551a16c0923d689198b51deb8902c4bbc54fc9b965b26c1f86e21df3a05f34 - languageName: node - linkType: hard - -"lodash.lowercase@npm:^4.3.0": - version: 4.3.0 - resolution: "lodash.lowercase@npm:4.3.0" - checksum: 10/9c809375a3e6f5a49e9a4c639d20763cab40ecdf33256627a3607b5e0fb13a065113a9f093ab256b6495f857c2d29e8f1a2416da56f000bab192a7ced51ceb7e - languageName: node - linkType: hard - -"lodash.lowerfirst@npm:^4.3.1": - version: 4.3.1 - resolution: "lodash.lowerfirst@npm:4.3.1" - checksum: 10/4aa96e391ef12a8fc47b54f9843554c96c4aad44e63005df1dd5ad12a5f6c9108ac612031d7f5fc39571cb172840c2899f8c4b806c17ce3a4fed84da5a5df7e8 - languageName: node - linkType: hard - -"lodash.memoize@npm:^4.1.2": - version: 4.1.2 - resolution: "lodash.memoize@npm:4.1.2" - checksum: 10/192b2168f310c86f303580b53acf81ab029761b9bd9caa9506a019ffea5f3363ea98d7e39e7e11e6b9917066c9d36a09a11f6fe16f812326390d8f3a54a1a6da - languageName: node - linkType: hard - -"lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: 10/d0ea2dd0097e6201be083865d50c3fb54fbfbdb247d9cc5950e086c991f448b7ab0cdab0d57eacccb43473d3f2acd21e134db39f22dac2d6c9ba6bf26978e3d6 - languageName: node - linkType: hard - -"lodash.mergewith@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.mergewith@npm:4.6.2" - checksum: 10/aea75a4492541a4902ac7e551dc6c54b722da0c187f84385d02e8fc33a7ae3454b837822446e5f63fcd5ad1671534ea408740b776670ea4d9c7890b10105fce0 - languageName: node - linkType: hard - -"lodash.pad@npm:^4.5.1": - version: 4.5.1 - resolution: "lodash.pad@npm:4.5.1" - checksum: 10/00b965e1152131cb24adecd8240d63e7fe1ea098b5077be28681a3fc0f37dbad23898bb95746ffe4e70a7bf66a66bba3642ee54bd1ec64942b8cde7236976fd9 - languageName: node - linkType: hard - -"lodash.padend@npm:^4.6.1": - version: 4.6.1 - resolution: "lodash.padend@npm:4.6.1" - checksum: 10/9553cdc2ca89c8ea2904757cbbc2aff8eae65b6712486e68251090c8ac118729c0bb8572bc19bcbb70805866e4350f5560662f634132d479b487a3ed7db4a536 - languageName: node - linkType: hard - -"lodash.padstart@npm:^4.6.1": - version: 4.6.1 - resolution: "lodash.padstart@npm:4.6.1" - checksum: 10/2005941fffed0e884b0649f496b77f2a11614d9113c33a7fe50c2be3338da42fcd19a50b6519a450a2ac4bcccddb5604e424ee001e98a9d829c7289a32480175 - languageName: node - linkType: hard - -"lodash.repeat@npm:^4.1.0": - version: 4.1.0 - resolution: "lodash.repeat@npm:4.1.0" - checksum: 10/1d2f3f436e929b7917a3fc0eaddba3839bffd84ccc63e98697a1b7566cb9aed605cae340e8d062408da9ed32f8876c6aad192c80c52e51818064bc41100a2d70 - languageName: node - linkType: hard - -"lodash.snakecase@npm:^4.1.1": - version: 4.1.1 - resolution: "lodash.snakecase@npm:4.1.1" - checksum: 10/82ed40935d840477ef8fee64f9f263f75989c6cde36b84aae817246d95826228e1b5a7f6093c51de324084f86433634c7af244cb89496633cacfe443071450d0 - languageName: node - linkType: hard - -"lodash.sortby@npm:^4.7.0": - version: 4.7.0 - resolution: "lodash.sortby@npm:4.7.0" - checksum: 10/38df19ae28608af2c50ac342fc1f414508309d53e1d58ed9adfb2c3cd17c3af290058c0a0478028d932c5404df3d53349d19fa364ef6bed6145a6bc21320399e - languageName: node - linkType: hard - -"lodash.startcase@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.startcase@npm:4.4.0" - checksum: 10/3091048a54a2f92bcf2c6441d2bd9a706fb133d5f461ae7c310d6dca1530338a06c91e9e42a5b14b12e875ddae1814d448050dc02afe2cec09b3995d8e836837 - languageName: node - linkType: hard - -"lodash.throttle@npm:^4.1.1": - version: 4.1.1 - resolution: "lodash.throttle@npm:4.1.1" - checksum: 10/9be9fb2ffd686c20543167883305542f4564062a5f712a40e8c6f2f0d9fd8254a6e9d801c2470b1b24e0cdf2ae83c1277b55aa0fb4799a2db6daf545f53820e1 - languageName: node - linkType: hard - -"lodash.trim@npm:^4.5.1": - version: 4.5.1 - resolution: "lodash.trim@npm:4.5.1" - checksum: 10/05bb421380c7565a13f678797521c53dd468759f52a76b039e91ac8d24415f163d89a5c45ec24fe81eeff82b15cfb47a346981c5f0b9a0aa3cfbb45b3e5ff70c - languageName: node - linkType: hard - -"lodash.trimend@npm:^4.5.1": - version: 4.5.1 - resolution: "lodash.trimend@npm:4.5.1" - checksum: 10/287fab90bcfe7770fa901154aabef6e13b99eeb3b599e47bc71b306949dfb672979f7c98822830311e2acadd21fcae8a5b40b18b22a903f5dab9e6a7a3e0ba3c - languageName: node - linkType: hard - -"lodash.trimstart@npm:^4.5.1": - version: 4.5.1 - resolution: "lodash.trimstart@npm:4.5.1" - checksum: 10/66280d921c5221aed6bc96d698923c6d7eb97aa14923ff528ae6ffb5454eee495e8a3c1525ca149d85c428543b014ca141c31f6021ac1cd444aa54f1f7f398a6 - languageName: node - linkType: hard - -"lodash.truncate@npm:^4.4.2": - version: 4.4.2 - resolution: "lodash.truncate@npm:4.4.2" - checksum: 10/7a495616121449e5d2288c606b1025d42ab9979e8c93ba885e5c5802ffd4f1ebad4428c793ccc12f73e73237e85a9f5b67dd6415757546fbd5a4653ba83e25ac - languageName: node - linkType: hard - -"lodash.uniq@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.uniq@npm:4.5.0" - checksum: 10/86246ca64ac0755c612e5df6d93cfe92f9ecac2e5ff054b965efbbb1d9a647b6310969e78545006f70f52760554b03233ad0103324121ae31474c20d5f7a2812 - languageName: node - linkType: hard - -"lodash.uppercase@npm:^4.3.0": - version: 4.3.0 - resolution: "lodash.uppercase@npm:4.3.0" - checksum: 10/911e99a3f16ce9b1c8a2039e8aa561549258ee7f270023e9db95e14c83944a9a5bd219acda1c220c8c9e99eb18fbf37dff6601dd20229f458bc5c1487747d5cf - languageName: node - linkType: hard - -"lodash.upperfirst@npm:^4.3.1": - version: 4.3.1 - resolution: "lodash.upperfirst@npm:4.3.1" - checksum: 10/3e849d4eb4dbf26faee6435edda8e707b65a5dbd2f10f8def5a16a57bbbf38d3b7506950f0dd455e9c46ba73af35f1de75df4ef83952106949413d64eed59333 - languageName: node - linkType: hard - -"lodash@npm:^4.17.11, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0, lodash@npm:~4.17.0, lodash@npm:~4.17.15": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 - languageName: node - linkType: hard - -"log-symbols@npm:^3.0.0": - version: 3.0.0 - resolution: "log-symbols@npm:3.0.0" - dependencies: - chalk: "npm:^2.4.2" - checksum: 10/f2322e1452d819050b11aad247660e1494f8b2219d40a964af91d5f9af1a90636f1b3d93f2952090e42af07cc5550aecabf6c1d8ec1181207e95cb66ba112361 - languageName: node - linkType: hard - -"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": - version: 4.1.0 - resolution: "log-symbols@npm:4.1.0" - dependencies: - chalk: "npm:^4.1.0" - is-unicode-supported: "npm:^0.1.0" - checksum: 10/fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 - languageName: node - linkType: hard - -"log-update@npm:^4.0.0": - version: 4.0.0 - resolution: "log-update@npm:4.0.0" - dependencies: - ansi-escapes: "npm:^4.3.0" - cli-cursor: "npm:^3.1.0" - slice-ansi: "npm:^4.0.0" - wrap-ansi: "npm:^6.2.0" - checksum: 10/ae2f85bbabc1906034154fb7d4c4477c79b3e703d22d78adee8b3862fa913942772e7fa11713e3d96fb46de4e3cabefbf5d0a544344f03b58d3c4bff52aa9eb2 - languageName: node - linkType: hard - -"log-update@npm:^5.0.1": - version: 5.0.1 - resolution: "log-update@npm:5.0.1" - dependencies: - ansi-escapes: "npm:^5.0.0" - cli-cursor: "npm:^4.0.0" - slice-ansi: "npm:^5.0.0" - strip-ansi: "npm:^7.0.1" - wrap-ansi: "npm:^8.0.1" - checksum: 10/0e154e46744125b6d20c30289e90091794d58b83c2f01d7676da2afa2411c6ec2c3ee2c99753b9c6b896b9ee496a9a403a563330a2d5914a3bdb30e836f17cfb - languageName: node - linkType: hard - -"long@npm:^5.2.0": - version: 5.2.3 - resolution: "long@npm:5.2.3" - checksum: 10/9167ec6947a825b827c30da169a7384eec6c0c9ec2f0b9c74da2e93d81159bbe39fb09c3f13dae9721d4b807ccfa09797a7dd1012f5d478e3e33ca3c78b608e6 - languageName: node - linkType: hard - -"long@npm:^5.2.1": - version: 5.2.4 - resolution: "long@npm:5.2.4" - checksum: 10/c27c060a683d4d76dc48da12ded0ae49c610aaf10d028ec938829d7bebe916979dcc8b67ed71f8bf6d845a90151b66a9b741a3ee51ec874908e496c2a576697a - languageName: node - linkType: hard - -"longest-streak@npm:^3.0.0": - version: 3.1.0 - resolution: "longest-streak@npm:3.1.0" - checksum: 10/d7f952ed004cbdb5c8bcfc4f7f5c3d65449e6c5a9e9be4505a656e3df5a57ee125f284286b4bf8ecea0c21a7b3bf2b8f9001ad506c319b9815ad6a63a47d0fd0 - languageName: node - linkType: hard - -"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": - version: 1.4.0 - resolution: "loose-envify@npm:1.4.0" - dependencies: - js-tokens: "npm:^3.0.0 || ^4.0.0" - bin: - loose-envify: cli.js - checksum: 10/6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 - languageName: node - linkType: hard - -"loupe@npm:^2.3.6, loupe@npm:^2.3.7": - version: 2.3.7 - resolution: "loupe@npm:2.3.7" - dependencies: - get-func-name: "npm:^2.0.1" - checksum: 10/635c8f0914c2ce7ecfe4e239fbaf0ce1d2c00e4246fafcc4ed000bfdb1b8f89d05db1a220054175cca631ebf3894872a26fffba0124477fcb562f78762848fb1 - languageName: node - linkType: hard - -"lower-case-first@npm:^2.0.2": - version: 2.0.2 - resolution: "lower-case-first@npm:2.0.2" - dependencies: - tslib: "npm:^2.0.3" - checksum: 10/33e3da1098ddda219ce125d4ab7a78a944972c0ee8872e95b6ccc35df8ad405284ab233b0ba4d72315ad1a06fe2f0d418ee4cba9ec1ef1c386dea78899fc8958 - languageName: node - linkType: hard - -"lower-case@npm:^2.0.2": - version: 2.0.2 - resolution: "lower-case@npm:2.0.2" - dependencies: - tslib: "npm:^2.0.3" - checksum: 10/83a0a5f159ad7614bee8bf976b96275f3954335a84fad2696927f609ddae902802c4f3312d86668722e668bef41400254807e1d3a7f2e8c3eede79691aa1f010 - languageName: node - linkType: hard - -"lowercase-keys@npm:^3.0.0": - version: 3.0.0 - resolution: "lowercase-keys@npm:3.0.0" - checksum: 10/67a3f81409af969bc0c4ca0e76cd7d16adb1e25aa1c197229587eaf8671275c8c067cd421795dbca4c81be0098e4c426a086a05e30de8a9c587b7a13c0c7ccc5 - languageName: node - linkType: hard - -"lru-cache@npm:^10.0.2, lru-cache@npm:^10.2.0": - version: 10.4.3 - resolution: "lru-cache@npm:10.4.3" - checksum: 10/e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a - languageName: node - linkType: hard - -"lru-cache@npm:^11.0.0": - version: 11.0.1 - resolution: "lru-cache@npm:11.0.1" - checksum: 10/26688a1b2a4d7fb97e9ea1ffb15348f1ab21b7110496814f5ce9190d50258fbba8c1444ae7232876deae1fc54adb230aa63dd1efc5bd47f240620ba8bf218041 - languageName: node - linkType: hard - -"lru-cache@npm:^4.1.2": - version: 4.1.5 - resolution: "lru-cache@npm:4.1.5" - dependencies: - pseudomap: "npm:^1.0.2" - yallist: "npm:^2.1.2" - checksum: 10/9ec7d73f11a32cba0e80b7a58fdf29970814c0c795acaee1a6451ddfd609bae6ef9df0837f5bbeabb571ecd49c1e2d79e10e9b4ed422cfba17a0cb6145b018a9 - languageName: node - linkType: hard - -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: "npm:^3.0.2" - checksum: 10/951d2673dcc64a7fb888bf3d13bc2fdf923faca97d89cdb405ba3dfff77e2b26e5798d405e78fcd7094c9e7b8b4dab2ddc5a4f8a11928af24a207b7c738ca3f8 - languageName: node - linkType: hard - -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10/fc1fe2ee205f7c8855fa0f34c1ab0bcf14b6229e35579ec1fd1079f31d6fc8ef8eb6fd17f2f4d99788d7e339f50e047555551ebd5e434dda503696e7c6591825 - languageName: node - linkType: hard - -"lru-cache@npm:^7.18.3, lru-cache@npm:^7.7.1": - version: 7.18.3 - resolution: "lru-cache@npm:7.18.3" - checksum: 10/6029ca5aba3aacb554e919d7ef804fffd4adfc4c83db00fac8248c7c78811fb6d4b6f70f7fd9d55032b3823446546a007edaa66ad1f2377ae833bd983fac5d98 - languageName: node - linkType: hard - -"lru_map@npm:^0.3.3": - version: 0.3.3 - resolution: "lru_map@npm:0.3.3" - checksum: 10/50f6597924a7763ab0b31192e5e9965f08ca64a0044254138e74a65aecab95047d540f73739cff489866f4310e0202c11c10fdf18b10b236472160baaa68bbb1 - languageName: node - linkType: hard - -"magic-string@npm:^0.25.0, magic-string@npm:^0.25.7": - version: 0.25.9 - resolution: "magic-string@npm:0.25.9" - dependencies: - sourcemap-codec: "npm:^1.4.8" - checksum: 10/87a14b944bd169821cbd54b169a7ab6b0348fd44b5497266dc555dd70280744e9e88047da9dcb95675bdc23b1ce33f13398b0f70b3be7b858225ccb1d185ff51 - languageName: node - linkType: hard - -"magic-string@npm:^0.30.11": - version: 0.30.15 - resolution: "magic-string@npm:0.30.15" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - checksum: 10/321f6e3156ac65d938fb7e08b3eaef9f4f5718180b7507f37bb55273f1faf979ab42e3b550a9e5dbbacf1c9a0f416157ab01c08619938734dcbbe02e2ef10872 - languageName: node - linkType: hard - -"magic-string@npm:^0.30.3, magic-string@npm:^0.30.5": - version: 0.30.13 - resolution: "magic-string@npm:0.30.13" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - checksum: 10/1f46db78b0afcc5c6acb550f7a6ab7811417b72133ccb9d351d727e6bc17767042ff758a51d090f6f86e7b6c41b28ae0ef1cc8dbb8701a824901babc15f00a07 - languageName: node - linkType: hard - -"make-cancellable-promise@npm:^1.3.1": - version: 1.3.2 - resolution: "make-cancellable-promise@npm:1.3.2" - checksum: 10/d4dcad8211272a4d6ef979747a3d7085cdefb92cf50e096ab6a3ea8295e7578b82edaac261c7c4e3d656eadfac285f05b98856b3cf1fd14390ec2708328a9b35 - languageName: node - linkType: hard - -"make-dir@npm:^3.0.0, make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: "npm:^6.0.0" - checksum: 10/484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 - languageName: node - linkType: hard - -"make-error@npm:^1.1.1": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: 10/b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 - languageName: node - linkType: hard - -"make-event-props@npm:^1.6.0": - version: 1.6.2 - resolution: "make-event-props@npm:1.6.2" - checksum: 10/9728126c93465d14d624bd00e2542ab9e180d19ac1669f58c121910645bd1d6d0d10a77b832e3e6254b912780a01408da3dd00dba4a823653b503f14ff9b4760 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^11.0.3": - version: 11.1.1 - resolution: "make-fetch-happen@npm:11.1.1" - dependencies: - agentkeepalive: "npm:^4.2.1" - cacache: "npm:^17.0.0" - http-cache-semantics: "npm:^4.1.1" - http-proxy-agent: "npm:^5.0.0" - https-proxy-agent: "npm:^5.0.0" - is-lambda: "npm:^1.0.1" - lru-cache: "npm:^7.7.1" - minipass: "npm:^5.0.0" - minipass-fetch: "npm:^3.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^0.6.3" - promise-retry: "npm:^2.0.1" - socks-proxy-agent: "npm:^7.0.0" - ssri: "npm:^10.0.0" - checksum: 10/b4b442cfaaec81db159f752a5f2e3ee3d7aa682782868fa399200824ec6298502e01bdc456e443dc219bcd5546c8e4471644d54109c8599841dc961d17a805fa - languageName: node - linkType: hard - -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: "npm:1.0.5" - checksum: 10/4c66ddfc654537333da952c084f507fa4c30c707b1635344eb35be894d797ba44c901a9cebe914aa29a7f61357543ba09b09dddbd7f65b4aee756b450f169f40 - languageName: node - linkType: hard - -"map-cache@npm:^0.2.0": - version: 0.2.2 - resolution: "map-cache@npm:0.2.2" - checksum: 10/3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 - languageName: node - linkType: hard - -"map-obj@npm:^1.0.0": - version: 1.0.1 - resolution: "map-obj@npm:1.0.1" - checksum: 10/f8e6fc7f6137329c376c4524f6d25b3c243c17019bc8f621d15a2dcb855919e482a9298a78ae58b00dbd0e76b640bf6533aa343a9e993cfc16e0346a2507e7f8 - languageName: node - linkType: hard - -"map-obj@npm:^4.0.0": - version: 4.3.0 - resolution: "map-obj@npm:4.3.0" - checksum: 10/fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e - languageName: node - linkType: hard - -"markdown-table@npm:2.0.0": - version: 2.0.0 - resolution: "markdown-table@npm:2.0.0" - dependencies: - repeat-string: "npm:^1.0.0" - checksum: 10/8018cd1a1733ffda916a0548438e50f3d21b6c6b71fb23696b33c0b5922a8cc46035eb4b204a59c6054f063076f934461ae094599656a63f87c1c3a80bd3c229 - languageName: node - linkType: hard - -"marked@npm:^4.1.1": - version: 4.3.0 - resolution: "marked@npm:4.3.0" - bin: - marked: bin/marked.js - checksum: 10/c830bb4cb3705b754ca342b656e8a582d7428706b2678c898b856f6030c134ce2d1e19136efa3e6a1841f7330efbd24963d6bdeddc57d2938e906250f99895d0 - languageName: node - linkType: hard - -"match-all@npm:^1.2.6": - version: 1.2.6 - resolution: "match-all@npm:1.2.6" - checksum: 10/f7e21e80aa2074b0140dcad6198145a9c89044bc164ab3365e7a5302bd180744c75bce53626aeec0753422ffead130d4142b0cd136f9cfff0eedb3227265ee3e - languageName: node - linkType: hard - -"matchstick-as@npm:0.6.0": - version: 0.6.0 - resolution: "matchstick-as@npm:0.6.0" - dependencies: - wabt: "npm:1.0.24" - checksum: 10/340025caf2fe677675d9e388f2726b9517dcd977e13c1d5d13517d3d72ebfe561ea849e5859df74e1ccf48559d5fe3a9bb7cce107187102ec9a3d0d677c596ff - languageName: node - linkType: hard - -"md5.js@npm:^1.3.4": - version: 1.3.5 - resolution: "md5.js@npm:1.3.5" - dependencies: - hash-base: "npm:^3.0.0" - inherits: "npm:^2.0.1" - safe-buffer: "npm:^5.1.2" - checksum: 10/098494d885684bcc4f92294b18ba61b7bd353c23147fbc4688c75b45cb8590f5a95fd4584d742415dcc52487f7a1ef6ea611cfa1543b0dc4492fe026357f3f0c - languageName: node - linkType: hard - -"mdast-util-definitions@npm:^5.0.0": - version: 5.1.2 - resolution: "mdast-util-definitions@npm:5.1.2" - dependencies: - "@types/mdast": "npm:^3.0.0" - "@types/unist": "npm:^2.0.0" - unist-util-visit: "npm:^4.0.0" - checksum: 10/4491b7c551ce1bdeb6c8fb1968cd461acb01ca1584f12c240755541a92d7f02bc5b9c9d6303d50deaed6d959ba58fe9a352a3e676e0f1d954e003de1277f57e4 - languageName: node - linkType: hard - -"mdast-util-from-markdown@npm:^1.0.0": - version: 1.3.1 - resolution: "mdast-util-from-markdown@npm:1.3.1" - dependencies: - "@types/mdast": "npm:^3.0.0" - "@types/unist": "npm:^2.0.0" - decode-named-character-reference: "npm:^1.0.0" - mdast-util-to-string: "npm:^3.1.0" - micromark: "npm:^3.0.0" - micromark-util-decode-numeric-character-reference: "npm:^1.0.0" - micromark-util-decode-string: "npm:^1.0.0" - micromark-util-normalize-identifier: "npm:^1.0.0" - micromark-util-symbol: "npm:^1.0.0" - micromark-util-types: "npm:^1.0.0" - unist-util-stringify-position: "npm:^3.0.0" - uvu: "npm:^0.5.0" - checksum: 10/1d334a54ddd6481ec4acf64c2c537b6463bc5113ba5a408f65c228dcc302d46837352814f11307af0f8b51dd7e4a0b887ce692e4d30ff31ff9d578b8ca82810b - languageName: node - linkType: hard - -"mdast-util-from-markdown@npm:^2.0.0": - version: 2.0.2 - resolution: "mdast-util-from-markdown@npm:2.0.2" - dependencies: - "@types/mdast": "npm:^4.0.0" - "@types/unist": "npm:^3.0.0" - decode-named-character-reference: "npm:^1.0.0" - devlop: "npm:^1.0.0" - mdast-util-to-string: "npm:^4.0.0" - micromark: "npm:^4.0.0" - micromark-util-decode-numeric-character-reference: "npm:^2.0.0" - micromark-util-decode-string: "npm:^2.0.0" - micromark-util-normalize-identifier: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - unist-util-stringify-position: "npm:^4.0.0" - checksum: 10/69b207913fbcc0469f8c59d922af4d5509b79e809d77c9bd4781543a907fe2ecc8e6433ce0707066a27b117b13f38af3aae4f2d085e18ebd2d3ad5f1a5647902 - languageName: node - linkType: hard - -"mdast-util-mdx-expression@npm:^2.0.0": - version: 2.0.1 - resolution: "mdast-util-mdx-expression@npm:2.0.1" - dependencies: - "@types/estree-jsx": "npm:^1.0.0" - "@types/hast": "npm:^3.0.0" - "@types/mdast": "npm:^4.0.0" - devlop: "npm:^1.0.0" - mdast-util-from-markdown: "npm:^2.0.0" - mdast-util-to-markdown: "npm:^2.0.0" - checksum: 10/70e860f8ee22c4f478449942750055d649d4380bf43b235d0710af510189d285fb057e401d20b59596d9789f4e270fce08ca892dc849676f9e3383b991d52485 - languageName: node - linkType: hard - -"mdast-util-mdx-jsx@npm:^3.0.0": - version: 3.1.3 - resolution: "mdast-util-mdx-jsx@npm:3.1.3" - dependencies: - "@types/estree-jsx": "npm:^1.0.0" - "@types/hast": "npm:^3.0.0" - "@types/mdast": "npm:^4.0.0" - "@types/unist": "npm:^3.0.0" - ccount: "npm:^2.0.0" - devlop: "npm:^1.1.0" - mdast-util-from-markdown: "npm:^2.0.0" - mdast-util-to-markdown: "npm:^2.0.0" - parse-entities: "npm:^4.0.0" - stringify-entities: "npm:^4.0.0" - unist-util-stringify-position: "npm:^4.0.0" - vfile-message: "npm:^4.0.0" - checksum: 10/6c14f271f1380fd512038247f45887b7aa71bbf4acd8881651a317b61706b114f2582f62f7777d0eacd42c4a7b979802825c2a2fd8bb7c46a1ab931ccb1ddf3e - languageName: node - linkType: hard - -"mdast-util-mdxjs-esm@npm:^2.0.0": - version: 2.0.1 - resolution: "mdast-util-mdxjs-esm@npm:2.0.1" - dependencies: - "@types/estree-jsx": "npm:^1.0.0" - "@types/hast": "npm:^3.0.0" - "@types/mdast": "npm:^4.0.0" - devlop: "npm:^1.0.0" - mdast-util-from-markdown: "npm:^2.0.0" - mdast-util-to-markdown: "npm:^2.0.0" - checksum: 10/05474226e163a3f407fccb5780b0d8585a95e548e5da4a85227df43f281b940c7941a9a9d4af1be4f885fe554731647addb057a728e87aa1f503ff9cc72c9163 - languageName: node - linkType: hard - -"mdast-util-phrasing@npm:^4.0.0": - version: 4.1.0 - resolution: "mdast-util-phrasing@npm:4.1.0" - dependencies: - "@types/mdast": "npm:^4.0.0" - unist-util-is: "npm:^6.0.0" - checksum: 10/3a97533e8ad104a422f8bebb34b3dde4f17167b8ed3a721cf9263c7416bd3447d2364e6d012a594aada40cac9e949db28a060bb71a982231693609034ed5324e - languageName: node - linkType: hard - -"mdast-util-to-hast@npm:^12.1.0": - version: 12.3.0 - resolution: "mdast-util-to-hast@npm:12.3.0" - dependencies: - "@types/hast": "npm:^2.0.0" - "@types/mdast": "npm:^3.0.0" - mdast-util-definitions: "npm:^5.0.0" - micromark-util-sanitize-uri: "npm:^1.1.0" - trim-lines: "npm:^3.0.0" - unist-util-generated: "npm:^2.0.0" - unist-util-position: "npm:^4.0.0" - unist-util-visit: "npm:^4.0.0" - checksum: 10/82b72bf46863f0f5683dbf1c5917186ee2da2e06af1a5f5aaeca51b880f4cb2b3ae0463ebb4fa1a776f5d3c73f5fc6cd542920060cf5040f3d4431607ee73cce - languageName: node - linkType: hard - -"mdast-util-to-hast@npm:^13.0.0": - version: 13.2.0 - resolution: "mdast-util-to-hast@npm:13.2.0" - dependencies: - "@types/hast": "npm:^3.0.0" - "@types/mdast": "npm:^4.0.0" - "@ungap/structured-clone": "npm:^1.0.0" - devlop: "npm:^1.0.0" - micromark-util-sanitize-uri: "npm:^2.0.0" - trim-lines: "npm:^3.0.0" - unist-util-position: "npm:^5.0.0" - unist-util-visit: "npm:^5.0.0" - vfile: "npm:^6.0.0" - checksum: 10/b17ee338f843af31a1c7a2ebf0df6f0b41c9380b7119a63ab521d271df665456578e1234bb7617883e8d860fe878038dcf2b76ab2f21e0f7451215a096d26cce - languageName: node - linkType: hard - -"mdast-util-to-markdown@npm:^2.0.0": - version: 2.1.2 - resolution: "mdast-util-to-markdown@npm:2.1.2" - dependencies: - "@types/mdast": "npm:^4.0.0" - "@types/unist": "npm:^3.0.0" - longest-streak: "npm:^3.0.0" - mdast-util-phrasing: "npm:^4.0.0" - mdast-util-to-string: "npm:^4.0.0" - micromark-util-classify-character: "npm:^2.0.0" - micromark-util-decode-string: "npm:^2.0.0" - unist-util-visit: "npm:^5.0.0" - zwitch: "npm:^2.0.0" - checksum: 10/ab494a32f1ec90f0a502970b403b1847a10f3ba635adddb66ce70994cc47b4924c6c05078ddd29a8c2c5c9bc8c0bcc20e5fc1ef0fcb9b0cb9c0589a000817f1c - languageName: node - linkType: hard - -"mdast-util-to-string@npm:^3.1.0": - version: 3.2.0 - resolution: "mdast-util-to-string@npm:3.2.0" - dependencies: - "@types/mdast": "npm:^3.0.0" - checksum: 10/fafe201c12a0d412a875fe8540bf70b4360f3775fb7f0d19403ba7b59e50f74f730e3b405c72ad940bc8a3ec1ba311f76dfca61c4ce585dce1ccda2168ec244f - languageName: node - linkType: hard - -"mdast-util-to-string@npm:^4.0.0": - version: 4.0.0 - resolution: "mdast-util-to-string@npm:4.0.0" - dependencies: - "@types/mdast": "npm:^4.0.0" - checksum: 10/f4a5dbb9ea03521d7d3e26a9ba5652a1d6fbd55706dddd2155427517085688830e0ecd3f12418cfd40892640886eb39a4034c3c967d85e01e2fa64cfb53cff05 - languageName: node - linkType: hard - -"mdn-data@npm:2.0.14": - version: 2.0.14 - resolution: "mdn-data@npm:2.0.14" - checksum: 10/64c629fcf14807e30d6dc79f97cbcafa16db066f53a294299f3932b3beb0eb0d1386d3a7fe408fc67348c449a4e0999360c894ba4c81eb209d7be4e36503de0e - languageName: node - linkType: hard - -"mdn-data@npm:2.0.28": - version: 2.0.28 - resolution: "mdn-data@npm:2.0.28" - checksum: 10/aec475e0c078af00498ce2f9434d96a1fdebba9814d14b8f72cd6d5475293f4b3972d0538af2d5c5053d35e1b964af08b7d162b98e9846e9343990b75e4baef1 - languageName: node - linkType: hard - -"mdn-data@npm:2.0.30": - version: 2.0.30 - resolution: "mdn-data@npm:2.0.30" - checksum: 10/e4944322bf3e0461a2daa2aee7e14e208960a036289531e4ef009e53d32bd41528350c070c4a33be867980443fe4c0523518d99318423cffa7c825fe7b1154e2 - languageName: node - linkType: hard - -"mdn-data@npm:2.0.4": - version: 2.0.4 - resolution: "mdn-data@npm:2.0.4" - checksum: 10/2236dbec301f7e148a9cc4f91c0c45fd0271a9a5e7defc80792da2d64d823f24be51dd28d24f328896fc504d84e00d1833eeac47a55e47729ec6ed0308aa824a - languageName: node - linkType: hard - -"media-typer@npm:0.3.0": - version: 0.3.0 - resolution: "media-typer@npm:0.3.0" - checksum: 10/38e0984db39139604756903a01397e29e17dcb04207bb3e081412ce725ab17338ecc47220c1b186b6bbe79a658aad1b0d41142884f5a481f36290cdefbe6aa46 - languageName: node - linkType: hard - -"memfs@npm:^3.1.2, memfs@npm:^3.4.3": - version: 3.5.3 - resolution: "memfs@npm:3.5.3" - dependencies: - fs-monkey: "npm:^1.0.4" - checksum: 10/7c9cdb453a6b06e87f11e2dbe6c518fd3c1c1581b370ffa24f42f3fd5b1db8c2203f596e43321a0032963f3e9b66400f2c3cf043904ac496d6ae33eafd0878fe - languageName: node - linkType: hard - -"memoize-one@npm:^6.0.0": - version: 6.0.0 - resolution: "memoize-one@npm:6.0.0" - checksum: 10/28feaf7e9a870efef1187df110b876ce42deaf86c955f4111d72d23b96e44eed573469316e6ad0d2cc7fa3b1526978215617b126158015f957242c7493babca9 - languageName: node - linkType: hard - -"memorystream@npm:^0.3.1": - version: 0.3.1 - resolution: "memorystream@npm:0.3.1" - checksum: 10/2e34a1e35e6eb2e342f788f75f96c16f115b81ff6dd39e6c2f48c78b464dbf5b1a4c6ebfae4c573bd0f8dbe8c57d72bb357c60523be184655260d25855c03902 - languageName: node - linkType: hard - -"meow@npm:^8.0.0, meow@npm:^8.1.2": - version: 8.1.2 - resolution: "meow@npm:8.1.2" - dependencies: - "@types/minimist": "npm:^1.2.0" - camelcase-keys: "npm:^6.2.2" - decamelize-keys: "npm:^1.1.0" - hard-rejection: "npm:^2.1.0" - minimist-options: "npm:4.1.0" - normalize-package-data: "npm:^3.0.0" - read-pkg-up: "npm:^7.0.1" - redent: "npm:^3.0.0" - trim-newlines: "npm:^3.0.0" - type-fest: "npm:^0.18.0" - yargs-parser: "npm:^20.2.3" - checksum: 10/d4770f90135c0ef4d0f4fa4f4310a18c07bbbe408221fa79a68fda93944134001ffc24ed605e7668f61e920dd8db30936548e927d2331b0e30699d56247f9873 - languageName: node - linkType: hard - -"merge-descriptors@npm:1.0.1": - version: 1.0.1 - resolution: "merge-descriptors@npm:1.0.1" - checksum: 10/5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 - languageName: node - linkType: hard - -"merge-options@npm:^3.0.4": - version: 3.0.4 - resolution: "merge-options@npm:3.0.4" - dependencies: - is-plain-obj: "npm:^2.1.0" - checksum: 10/d86ddb3dd6e85d558dbf25dc944f3527b6bacb944db3fdda6e84a3f59c4e4b85231095f58b835758b9a57708342dee0f8de0dffa352974a48221487fe9f4584f - languageName: node - linkType: hard - -"merge-refs@npm:^1.3.0": - version: 1.3.0 - resolution: "merge-refs@npm:1.3.0" - peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10/8400f716a77857dac6b5d49cd5ef69cec7bff6c5555785c5e91a5142fbb5f3e6fe81282bc5be1f01c0c0843ed29f5b4169bfa9838ec69c459b4538f3fef3e79c - languageName: node - linkType: hard - -"merge-source-map@npm:^1.1.0": - version: 1.1.0 - resolution: "merge-source-map@npm:1.1.0" - dependencies: - source-map: "npm:^0.6.1" - checksum: 10/945a83dcc59eff77dde709be1d3d6cb575c11cd7164a7ccdc1c6f0d463aad7c12750a510bdf84af2c05fac4615c4305d97ac90477975348bb901a905c8e92c4b - languageName: node - linkType: hard - -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 10/6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 - languageName: node - linkType: hard - -"merge2@npm:^1.2.3, merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10/7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 - languageName: node - linkType: hard - -"meros@npm:^1.2.1": - version: 1.3.0 - resolution: "meros@npm:1.3.0" - peerDependencies: - "@types/node": ">=13" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 10/1893d226866058a32161ab069294a1a16975c765416a2b05165dfafba07cd958ca12503e35c621ffe736c62d935ccb1ce60cb723e2a9e0b85e02bb3236722ef6 - languageName: node - linkType: hard - -"methods@npm:~1.1.2": - version: 1.1.2 - resolution: "methods@npm:1.1.2" - checksum: 10/a385dd974faa34b5dd021b2bbf78c722881bf6f003bfe6d391d7da3ea1ed625d1ff10ddd13c57531f628b3e785be38d3eed10ad03cebd90b76932413df9a1820 - languageName: node - linkType: hard - -"micro-eth-signer@npm:^0.14.0": - version: 0.14.0 - resolution: "micro-eth-signer@npm:0.14.0" - dependencies: - "@noble/curves": "npm:~1.8.1" - "@noble/hashes": "npm:~1.7.1" - micro-packed: "npm:~0.7.2" - checksum: 10/de9fb0262253c22f280dc6fae18b61950ac2bf0e086d9ca60e3dd150f64b922ca9073e7566ebfc71be773507f3979ebdccee8bc9bb1162697b7e0eeec1dbd691 - languageName: node - linkType: hard - -"micro-ftch@npm:^0.3.1": - version: 0.3.1 - resolution: "micro-ftch@npm:0.3.1" - checksum: 10/a7ab07d25e28ec4ae492ce4542ea9b06eee85538742b3b1263b247366ee8872f2c5ce9c8651138b2f1d22c8212f691a7b8b5384fe86ead5aff1852e211f1c035 - languageName: node - linkType: hard - -"micro-packed@npm:~0.7.2": - version: 0.7.3 - resolution: "micro-packed@npm:0.7.3" - dependencies: - "@scure/base": "npm:~1.2.5" - checksum: 10/956c89cd0753e82566e13f67406e5983ae9cb7bcbe539238c5e0dcc605974f91d454b819dd3cf63acec7d67e63ef17afde45b451eaa00a38de31c6024a75cee5 - languageName: node - linkType: hard - -"microdiff@npm:^1.5.0": - version: 1.5.0 - resolution: "microdiff@npm:1.5.0" - checksum: 10/ec1ee39b744e0f5140c9d1bcc05e25d2b2c6f6777bda2cbe59627af8aa0da5d8c98cfa5bbd610571b72b6db9e6cf3d120e24782a9870be611ea4fed69ca7bfbf - languageName: node - linkType: hard - -"micromark-core-commonmark@npm:^1.0.1": - version: 1.1.0 - resolution: "micromark-core-commonmark@npm:1.1.0" - dependencies: - decode-named-character-reference: "npm:^1.0.0" - micromark-factory-destination: "npm:^1.0.0" - micromark-factory-label: "npm:^1.0.0" - micromark-factory-space: "npm:^1.0.0" - micromark-factory-title: "npm:^1.0.0" - micromark-factory-whitespace: "npm:^1.0.0" - micromark-util-character: "npm:^1.0.0" - micromark-util-chunked: "npm:^1.0.0" - micromark-util-classify-character: "npm:^1.0.0" - micromark-util-html-tag-name: "npm:^1.0.0" - micromark-util-normalize-identifier: "npm:^1.0.0" - micromark-util-resolve-all: "npm:^1.0.0" - micromark-util-subtokenize: "npm:^1.0.0" - micromark-util-symbol: "npm:^1.0.0" - micromark-util-types: "npm:^1.0.1" - uvu: "npm:^0.5.0" - checksum: 10/a73694d223ac8baad8ff00597a3c39d61f5b32bfd56fe4bcf295d75b2a4e8e67fb2edbfc7cc287b362b9d7f6d24fce08b6a7e8b5b155d79bcc1e4d9b2756ffb2 - languageName: node - linkType: hard - -"micromark-core-commonmark@npm:^2.0.0": - version: 2.0.2 - resolution: "micromark-core-commonmark@npm:2.0.2" - dependencies: - decode-named-character-reference: "npm:^1.0.0" - devlop: "npm:^1.0.0" - micromark-factory-destination: "npm:^2.0.0" - micromark-factory-label: "npm:^2.0.0" - micromark-factory-space: "npm:^2.0.0" - micromark-factory-title: "npm:^2.0.0" - micromark-factory-whitespace: "npm:^2.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-chunked: "npm:^2.0.0" - micromark-util-classify-character: "npm:^2.0.0" - micromark-util-html-tag-name: "npm:^2.0.0" - micromark-util-normalize-identifier: "npm:^2.0.0" - micromark-util-resolve-all: "npm:^2.0.0" - micromark-util-subtokenize: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10/eafa6b9cd6fd9f51efa7795824af9a765e24a4519855a5b6dfcb0f619a93d90599d39a261f626bfcc1dfa64f22430f7a677a83cb6ce4bd8e4eeabc892610c016 - languageName: node - linkType: hard - -"micromark-factory-destination@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-destination@npm:1.1.0" - dependencies: - micromark-util-character: "npm:^1.0.0" - micromark-util-symbol: "npm:^1.0.0" - micromark-util-types: "npm:^1.0.0" - checksum: 10/9e2b5fb5fedbf622b687e20d51eb3d56ae90c0e7ecc19b37bd5285ec392c1e56f6e21aa7cfcb3c01eda88df88fe528f3acb91a5f57d7f4cba310bc3cd7f824fa - languageName: node - linkType: hard - -"micromark-factory-destination@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-factory-destination@npm:2.0.1" - dependencies: - micromark-util-character: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10/9c4baa9ca2ed43c061bbf40ddd3d85154c2a0f1f485de9dea41d7dd2ad994ebb02034a003b2c1dbe228ba83a0576d591f0e90e0bf978713f84ee7d7f3aa98320 - languageName: node - linkType: hard - -"micromark-factory-label@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-label@npm:1.1.0" - dependencies: - micromark-util-character: "npm:^1.0.0" - micromark-util-symbol: "npm:^1.0.0" - micromark-util-types: "npm:^1.0.0" - uvu: "npm:^0.5.0" - checksum: 10/fcda48f1287d9b148c562c627418a2ab759cdeae9c8e017910a0cba94bb759a96611e1fc6df33182e97d28fbf191475237298983bb89ef07d5b02464b1ad28d5 - languageName: node - linkType: hard - -"micromark-factory-label@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-factory-label@npm:2.0.1" - dependencies: - devlop: "npm:^1.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10/bd03f5a75f27cdbf03b894ddc5c4480fc0763061fecf9eb927d6429233c930394f223969a99472df142d570c831236134de3dc23245d23d9f046f9d0b623b5c2 - languageName: node - linkType: hard - -"micromark-factory-space@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-space@npm:1.1.0" - dependencies: - micromark-util-character: "npm:^1.0.0" - micromark-util-types: "npm:^1.0.0" - checksum: 10/b58435076b998a7e244259a4694eb83c78915581206b6e7fc07b34c6abd36a1726ade63df8972fbf6c8fa38eecb9074f4e17be8d53f942e3b3d23d1a0ecaa941 - languageName: node - linkType: hard - -"micromark-factory-space@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-factory-space@npm:2.0.1" - dependencies: - micromark-util-character: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10/1bd68a017c1a66f4787506660c1e1c5019169aac3b1cb075d49ac5e360e0b2065e984d4e1d6e9e52a9d44000f2fa1c98e66a743d7aae78b4b05616bf3242ed71 - languageName: node - linkType: hard - -"micromark-factory-title@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-title@npm:1.1.0" - dependencies: - micromark-factory-space: "npm:^1.0.0" - micromark-util-character: "npm:^1.0.0" - micromark-util-symbol: "npm:^1.0.0" - micromark-util-types: "npm:^1.0.0" - checksum: 10/4432d3dbc828c81f483c5901b0c6591a85d65a9e33f7d96ba7c3ae821617a0b3237ff5faf53a9152d00aaf9afb3a9f185b205590f40ed754f1d9232e0e9157b1 - languageName: node - linkType: hard - -"micromark-factory-title@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-factory-title@npm:2.0.1" - dependencies: - micromark-factory-space: "npm:^2.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10/b4d2e4850a8ba0dff25ce54e55a3eb0d43dda88a16293f53953153288f9d84bcdfa8ca4606b2cfbb4f132ea79587bbb478a73092a349f893f5264fbcdbce2ee1 - languageName: node - linkType: hard - -"micromark-factory-whitespace@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-whitespace@npm:1.1.0" - dependencies: - micromark-factory-space: "npm:^1.0.0" - micromark-util-character: "npm:^1.0.0" - micromark-util-symbol: "npm:^1.0.0" - micromark-util-types: "npm:^1.0.0" - checksum: 10/ef0fa682c7d593d85a514ee329809dee27d10bc2a2b65217d8ef81173e33b8e83c549049764b1ad851adfe0a204dec5450d9d20a4ca8598f6c94533a73f73fcd - languageName: node - linkType: hard - -"micromark-factory-whitespace@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-factory-whitespace@npm:2.0.1" - dependencies: - micromark-factory-space: "npm:^2.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10/67b3944d012a42fee9e10e99178254a04d48af762b54c10a50fcab988688799993efb038daf9f5dbc04001a97b9c1b673fc6f00e6a56997877ab25449f0c8650 - languageName: node - linkType: hard - -"micromark-util-character@npm:^1.0.0": - version: 1.2.0 - resolution: "micromark-util-character@npm:1.2.0" - dependencies: - micromark-util-symbol: "npm:^1.0.0" - micromark-util-types: "npm:^1.0.0" - checksum: 10/88cf80f9b4c95266f24814ef587fb4180454668dcc3be4ac829e1227188cf349c8981bfca29e3eab1682f324c2c47544c0b0b799a26fbf9df5f156c6a84c970c - languageName: node - linkType: hard - -"micromark-util-character@npm:^2.0.0": - version: 2.1.1 - resolution: "micromark-util-character@npm:2.1.1" - dependencies: - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10/85da8f8e5f7ed16046575bef5b0964ca3fca3162b87b74ae279f1e48eb7160891313eb64f04606baed81c58b514dbdb64f1a9d110a51baaaa79225d72a7b1852 - languageName: node - linkType: hard - -"micromark-util-chunked@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-chunked@npm:1.1.0" - dependencies: - micromark-util-symbol: "npm:^1.0.0" - checksum: 10/c435bde9110cb595e3c61b7f54c2dc28ee03e6a57fa0fc1e67e498ad8bac61ee5a7457a2b6a73022ddc585676ede4b912d28dcf57eb3bd6951e54015e14dc20b - languageName: node - linkType: hard - -"micromark-util-chunked@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-chunked@npm:2.0.1" - dependencies: - micromark-util-symbol: "npm:^2.0.0" - checksum: 10/f8cb2a67bcefe4bd2846d838c97b777101f0043b9f1de4f69baf3e26bb1f9885948444e3c3aec66db7595cad8173bd4567a000eb933576c233d54631f6323fe4 - languageName: node - linkType: hard - -"micromark-util-classify-character@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-classify-character@npm:1.1.0" - dependencies: - micromark-util-character: "npm:^1.0.0" - micromark-util-symbol: "npm:^1.0.0" - micromark-util-types: "npm:^1.0.0" - checksum: 10/8499cb0bb1f7fb946f5896285fcca65cd742f66cd3e79ba7744792bd413ec46834f932a286de650349914d02e822946df3b55d03e6a8e1d245d1ddbd5102e5b0 - languageName: node - linkType: hard - -"micromark-util-classify-character@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-classify-character@npm:2.0.1" - dependencies: - micromark-util-character: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10/4d8bbe3a6dbf69ac0fc43516866b5bab019fe3f4568edc525d4feaaaf78423fa54e6b6732b5bccbeed924455279a3758ffc9556954aafb903982598a95a02704 - languageName: node - linkType: hard - -"micromark-util-combine-extensions@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-combine-extensions@npm:1.1.0" - dependencies: - micromark-util-chunked: "npm:^1.0.0" - micromark-util-types: "npm:^1.0.0" - checksum: 10/ee78464f5d4b61ccb437850cd2d7da4d690b260bca4ca7a79c4bb70291b84f83988159e373b167181b6716cb197e309bc6e6c96a68cc3ba9d50c13652774aba9 - languageName: node - linkType: hard - -"micromark-util-combine-extensions@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-combine-extensions@npm:2.0.1" - dependencies: - micromark-util-chunked: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10/5d22fb9ee37e8143adfe128a72b50fa09568c2cc553b3c76160486c96dbbb298c5802a177a10a215144a604b381796071b5d35be1f2c2b2ee17995eda92f0c8e - languageName: node - linkType: hard - -"micromark-util-decode-numeric-character-reference@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-decode-numeric-character-reference@npm:1.1.0" - dependencies: - micromark-util-symbol: "npm:^1.0.0" - checksum: 10/4733fe75146e37611243f055fc6847137b66f0cde74d080e33bd26d0408c1d6f44cabc984063eee5968b133cb46855e729d555b9ff8d744652262b7b51feec73 - languageName: node - linkType: hard - -"micromark-util-decode-numeric-character-reference@npm:^2.0.0": - version: 2.0.2 - resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.2" - dependencies: - micromark-util-symbol: "npm:^2.0.0" - checksum: 10/ee11c8bde51e250e302050474c4a2adca094bca05c69f6cdd241af12df285c48c88d19ee6e022b9728281c280be16328904adca994605680c43af56019f4b0b6 - languageName: node - linkType: hard - -"micromark-util-decode-string@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-decode-string@npm:1.1.0" - dependencies: - decode-named-character-reference: "npm:^1.0.0" - micromark-util-character: "npm:^1.0.0" - micromark-util-decode-numeric-character-reference: "npm:^1.0.0" - micromark-util-symbol: "npm:^1.0.0" - checksum: 10/f1625155db452f15aa472918499689ba086b9c49d1322a08b22bfbcabe918c61b230a3002c8bc3ea9b1f52ca7a9bb1c3dd43ccb548c7f5f8b16c24a1ae77a813 - languageName: node - linkType: hard - -"micromark-util-decode-string@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-decode-string@npm:2.0.1" - dependencies: - decode-named-character-reference: "npm:^1.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-decode-numeric-character-reference: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - checksum: 10/2f517e4c613609445db4b9a17f8c77832f55fb341620a8fd598f083c1227027485d601c2021c2f8f9883210b8671e7b3990f0c6feeecd49a136475465808c380 - languageName: node - linkType: hard - -"micromark-util-encode@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-encode@npm:1.1.0" - checksum: 10/4ef29d02b12336918cea6782fa87c8c578c67463925221d4e42183a706bde07f4b8b5f9a5e1c7ce8c73bb5a98b261acd3238fecd152e6dd1cdfa2d1ae11b60a0 - languageName: node - linkType: hard - -"micromark-util-encode@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-encode@npm:2.0.1" - checksum: 10/be890b98e78dd0cdd953a313f4148c4692cc2fb05533e56fef5f421287d3c08feee38ca679f318e740530791fc251bfe8c80efa926fcceb4419b269c9343d226 - languageName: node - linkType: hard - -"micromark-util-html-tag-name@npm:^1.0.0": - version: 1.2.0 - resolution: "micromark-util-html-tag-name@npm:1.2.0" - checksum: 10/ccf0fa99b5c58676dc5192c74665a3bfd1b536fafaf94723bd7f31f96979d589992df6fcf2862eba290ef18e6a8efb30ec8e1e910d9f3fc74f208871e9f84750 - languageName: node - linkType: hard - -"micromark-util-html-tag-name@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-html-tag-name@npm:2.0.1" - checksum: 10/dea365f5ad28ad74ff29fcb581f7b74fc1f80271c5141b3b2bc91c454cbb6dfca753f28ae03730d657874fcbd89d0494d0e3965dfdca06d9855f467c576afa9d - languageName: node - linkType: hard - -"micromark-util-normalize-identifier@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-normalize-identifier@npm:1.1.0" - dependencies: - micromark-util-symbol: "npm:^1.0.0" - checksum: 10/8655bea41ffa4333e03fc22462cb42d631bbef9c3c07b625fd852b7eb442a110f9d2e5902a42e65188d85498279569502bf92f3434a1180fc06f7c37edfbaee2 - languageName: node - linkType: hard - -"micromark-util-normalize-identifier@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-normalize-identifier@npm:2.0.1" - dependencies: - micromark-util-symbol: "npm:^2.0.0" - checksum: 10/1eb9a289d7da067323df9fdc78bfa90ca3207ad8fd893ca02f3133e973adcb3743b233393d23d95c84ccaf5d220ae7f5a28402a644f135dcd4b8cfa60a7b5f84 - languageName: node - linkType: hard - -"micromark-util-resolve-all@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-resolve-all@npm:1.1.0" - dependencies: - micromark-util-types: "npm:^1.0.0" - checksum: 10/1ce6c0237cd3ca061e76fae6602cf95014e764a91be1b9f10d36cb0f21ca88f9a07de8d49ab8101efd0b140a4fbfda6a1efb72027ab3f4d5b54c9543271dc52c - languageName: node - linkType: hard - -"micromark-util-resolve-all@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-resolve-all@npm:2.0.1" - dependencies: - micromark-util-types: "npm:^2.0.0" - checksum: 10/9275f3ddb6c26f254dd2158e66215d050454b279707a7d9ce5a3cd0eba23201021cedcb78ae1a746c1b23227dcc418ee40dd074ade195359506797a5493550cc - languageName: node - linkType: hard - -"micromark-util-sanitize-uri@npm:^1.0.0, micromark-util-sanitize-uri@npm:^1.1.0": - version: 1.2.0 - resolution: "micromark-util-sanitize-uri@npm:1.2.0" - dependencies: - micromark-util-character: "npm:^1.0.0" - micromark-util-encode: "npm:^1.0.0" - micromark-util-symbol: "npm:^1.0.0" - checksum: 10/0d024100d95ffb88bf75f3360e305b545c1eb745430959b8633f7aa93f37ec401fc7094c90c97298409a9e30d94d53b895bae224e1bb966bea114976cfa0fd48 - languageName: node - linkType: hard - -"micromark-util-sanitize-uri@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-sanitize-uri@npm:2.0.1" - dependencies: - micromark-util-character: "npm:^2.0.0" - micromark-util-encode: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - checksum: 10/064c72abfc9777864ca0521a016dde62ab3e7af5215d10fd27e820798500d5d305da638459c589275c1a093cf588f493cc2f65273deac5a5331ecefc6c9ea78a - languageName: node - linkType: hard - -"micromark-util-subtokenize@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-subtokenize@npm:1.1.0" - dependencies: - micromark-util-chunked: "npm:^1.0.0" - micromark-util-symbol: "npm:^1.0.0" - micromark-util-types: "npm:^1.0.0" - uvu: "npm:^0.5.0" - checksum: 10/075a1db6ea586d65827d3eead33dbfc520c4e43659c93fcd8fd82f44a7b75cfe61dcde967a3dfcc2ffd999347440ba5aa6698e65a04f3fc627e13e9f12a1a910 - languageName: node - linkType: hard - -"micromark-util-subtokenize@npm:^2.0.0": - version: 2.0.3 - resolution: "micromark-util-subtokenize@npm:2.0.3" - dependencies: - devlop: "npm:^1.0.0" - micromark-util-chunked: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10/57b26f129f46424a4670bb47c50f13c7309bb1bc557c02150a788d1634337c1bb25a3523af3d6dffc29aaec873b3bd88fd931bfff34e64284e6436e23873ca22 - languageName: node - linkType: hard - -"micromark-util-symbol@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-symbol@npm:1.1.0" - checksum: 10/a26b6b1efd77a715a4d9bbe0a5338eaf3d04ea5e85733e34fee56dfeabf64495c0afc5438fe5220316884cd3a5eae1f17768e0ff4e117827ea4a653897466f86 - languageName: node - linkType: hard - -"micromark-util-symbol@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-symbol@npm:2.0.1" - checksum: 10/497e6d95fc21c2bb5265b78a6a60db518c376dc438739b2e7d4aee6f9f165222711724b456c63163314f32b8eea68a064687711d41e986262926eab23ddb9229 - languageName: node - linkType: hard - -"micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": - version: 1.1.0 - resolution: "micromark-util-types@npm:1.1.0" - checksum: 10/287ac5de4a3802bb6f6c3842197c294997a488db1c0486e03c7a8e674d9eb7720c17dda1bcb814814b8343b338c4826fcbc0555f3e75463712a60dcdb53a028e - languageName: node - linkType: hard - -"micromark-util-types@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-types@npm:2.0.1" - checksum: 10/69c5e18e6ba4e12473d6fe5f1a7cc113ac1d4bfc23c7ad57b16a5e4bfd09ef48b7c17a40c39d43996f2078ad898efd3f1945007c14f395abd55f2af03d413acd - languageName: node - linkType: hard - -"micromark@npm:^3.0.0": - version: 3.2.0 - resolution: "micromark@npm:3.2.0" - dependencies: - "@types/debug": "npm:^4.0.0" - debug: "npm:^4.0.0" - decode-named-character-reference: "npm:^1.0.0" - micromark-core-commonmark: "npm:^1.0.1" - micromark-factory-space: "npm:^1.0.0" - micromark-util-character: "npm:^1.0.0" - micromark-util-chunked: "npm:^1.0.0" - micromark-util-combine-extensions: "npm:^1.0.0" - micromark-util-decode-numeric-character-reference: "npm:^1.0.0" - micromark-util-encode: "npm:^1.0.0" - micromark-util-normalize-identifier: "npm:^1.0.0" - micromark-util-resolve-all: "npm:^1.0.0" - micromark-util-sanitize-uri: "npm:^1.0.0" - micromark-util-subtokenize: "npm:^1.0.0" - micromark-util-symbol: "npm:^1.0.0" - micromark-util-types: "npm:^1.0.1" - uvu: "npm:^0.5.0" - checksum: 10/560a4a501efc3859d622461aaa9345fb95b99a2f34d3d3f2a775ab04de1dd857cb0f642083a6b28ab01bd817f5f0741a1be9857fd702f45e04a3752927a66719 - languageName: node - linkType: hard - -"micromark@npm:^4.0.0": - version: 4.0.1 - resolution: "micromark@npm:4.0.1" - dependencies: - "@types/debug": "npm:^4.0.0" - debug: "npm:^4.0.0" - decode-named-character-reference: "npm:^1.0.0" - devlop: "npm:^1.0.0" - micromark-core-commonmark: "npm:^2.0.0" - micromark-factory-space: "npm:^2.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-chunked: "npm:^2.0.0" - micromark-util-combine-extensions: "npm:^2.0.0" - micromark-util-decode-numeric-character-reference: "npm:^2.0.0" - micromark-util-encode: "npm:^2.0.0" - micromark-util-normalize-identifier: "npm:^2.0.0" - micromark-util-resolve-all: "npm:^2.0.0" - micromark-util-sanitize-uri: "npm:^2.0.0" - micromark-util-subtokenize: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10/b948b1b239e589826bdaf2835daa9e88873e23d4b9148cd22109a86d4af55b96345cf9fc9059b6b19ae828f64d55e66f376ca3aeb4af3d2b0241560125f5dae6 - languageName: node - linkType: hard - -"micromatch@npm:4.0.5, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" - dependencies: - braces: "npm:^3.0.2" - picomatch: "npm:^2.3.1" - checksum: 10/a749888789fc15cac0e03273844dbd749f9f8e8d64e70c564bcf06a033129554c789bb9e30d7566d7ff6596611a08e58ac12cf2a05f6e3c9c47c50c4c7e12fa2 - languageName: node - linkType: hard - -"micromatch@npm:^4.0.8": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" - dependencies: - braces: "npm:^3.0.3" - picomatch: "npm:^2.3.1" - checksum: 10/6bf2a01672e7965eb9941d1f02044fad2bd12486b5553dc1116ff24c09a8723157601dc992e74c911d896175918448762df3b3fd0a6b61037dd1a9766ddfbf58 - languageName: node - linkType: hard - -"miller-rabin@npm:^4.0.0": - version: 4.0.1 - resolution: "miller-rabin@npm:4.0.1" - dependencies: - bn.js: "npm:^4.0.0" - brorand: "npm:^1.0.1" - bin: - miller-rabin: bin/miller-rabin - checksum: 10/2a38ba9d1e878d94ee8a8ab3505b40e8d44fb9700a7716570fe4c8ca7e20d49b69aea579106580618c877cc6ff969eff71705042fafb47573736bf89404417bc - languageName: node - linkType: hard - -"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10/54bb60bf39e6f8689f6622784e668a3d7f8bed6b0d886f5c3c446cb3284be28b30bf707ed05d0fe44a036f8469976b2629bbea182684977b084de9da274694d7 - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10/89aa9651b67644035de2784a6e665fc685d79aba61857e02b9c8758da874a754aed4a9aced9265f5ed1171fd934331e5516b84a7f0218031b6fa0270eca1e51a - languageName: node - linkType: hard - -"mime@npm:1.6.0": - version: 1.6.0 - resolution: "mime@npm:1.6.0" - bin: - mime: cli.js - checksum: 10/b7d98bb1e006c0e63e2c91b590fe1163b872abf8f7ef224d53dd31499c2197278a6d3d0864c45239b1a93d22feaf6f9477e9fc847eef945838150b8c02d03170 - languageName: node - linkType: hard - -"mime@npm:^3.0.0": - version: 3.0.0 - resolution: "mime@npm:3.0.0" - bin: - mime: cli.js - checksum: 10/b2d31580deb58be89adaa1877cbbf152b7604b980fd7ef8f08b9e96bfedf7d605d9c23a8ba62aa12c8580b910cd7c1d27b7331d0f40f7a14e17d5a0bbec3b49f - languageName: node - linkType: hard - -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: 10/d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a - languageName: node - linkType: hard - -"mimic-fn@npm:^4.0.0": - version: 4.0.0 - resolution: "mimic-fn@npm:4.0.0" - checksum: 10/995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 - languageName: node - linkType: hard - -"mimic-response@npm:^2.0.0": - version: 2.1.0 - resolution: "mimic-response@npm:2.1.0" - checksum: 10/014fad6ab936657e5f2f48bd87af62a8e928ebe84472aaf9e14fec4fcb31257a5edff77324d8ac13ddc6685ba5135cf16e381efac324e5f174fb4ddbf902bf07 - languageName: node - linkType: hard - -"mimic-response@npm:^3.1.0": - version: 3.1.0 - resolution: "mimic-response@npm:3.1.0" - checksum: 10/7e719047612411fe071332a7498cf0448bbe43c485c0d780046c76633a771b223ff49bd00267be122cedebb897037fdb527df72335d0d0f74724604ca70b37ad - languageName: node - linkType: hard - -"mimic-response@npm:^4.0.0": - version: 4.0.0 - resolution: "mimic-response@npm:4.0.0" - checksum: 10/33b804cc961efe206efdb1fca6a22540decdcfce6c14eb5c0c50e5ae9022267ab22ce8f5568b1f7247ba67500fe20d523d81e0e9f009b321ccd9d472e78d1850 - languageName: node - linkType: hard - -"min-indent@npm:^1.0.0": - version: 1.0.1 - resolution: "min-indent@npm:1.0.1" - checksum: 10/bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 - languageName: node - linkType: hard - -"mini-css-extract-plugin@npm:^2.4.5": - version: 2.7.6 - resolution: "mini-css-extract-plugin@npm:2.7.6" - dependencies: - schema-utils: "npm:^4.0.0" - peerDependencies: - webpack: ^5.0.0 - checksum: 10/1f718bfdcb7c2bf5e4336f694e5576432149d63f9dacaf94eae38ad046534050471a712a2d1bedf95e1722a2d3b56c3361d7352849e802e4875e716885e952c3 - languageName: node - linkType: hard - -"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-assert@npm:1.0.1" - checksum: 10/cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 - languageName: node - linkType: hard - -"minimalistic-crypto-utils@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-crypto-utils@npm:1.0.1" - checksum: 10/6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed - languageName: node - linkType: hard - -"minimatch@npm:2 || 3, minimatch@npm:^3.0.2, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10/e0b25b04cd4ec6732830344e5739b13f8690f8a012d73445a4a19fbc623f5dd481ef7a5827fde25954cd6026fede7574cc54dc4643c99d6c6b653d6203f94634 - languageName: node - linkType: hard - -"minimatch@npm:3.0.8, minimatch@npm:~3.0.3": - version: 3.0.8 - resolution: "minimatch@npm:3.0.8" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10/6df5373cb1ea79020beb6887ff5576c58cfabcfd32c5a65c2cf58f326e4ee8eae84f129e5fa50b8a4347fa1d1e583f931285c9fb3040d984bdfb5109ef6607ec - languageName: node - linkType: hard - -"minimatch@npm:^10.0.0": - version: 10.0.1 - resolution: "minimatch@npm:10.0.1" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10/082e7ccbc090d5f8c4e4e029255d5a1d1e3af37bda837da2b8b0085b1503a1210c91ac90d9ebfe741d8a5f286ece820a1abb4f61dc1f82ce602a055d461d93f3 - languageName: node - linkType: hard - -"minimatch@npm:^5.0.1, minimatch@npm:^5.1.6": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10/126b36485b821daf96d33b5c821dac600cc1ab36c87e7a532594f9b1652b1fa89a1eebcaad4dff17c764dce1a7ac1531327f190fed5f97d8f6e5f889c116c429 - languageName: node - linkType: hard - -"minimatch@npm:^9.0.3, minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10/dd6a8927b063aca6d910b119e1f2df6d2ce7d36eab91de83167dd136bb85e1ebff97b0d3de1cb08bd1f7e018ca170b4962479fefab5b2a69e2ae12cb2edc8348 - languageName: node - linkType: hard - -"minimist-options@npm:4.1.0": - version: 4.1.0 - resolution: "minimist-options@npm:4.1.0" - dependencies: - arrify: "npm:^1.0.1" - is-plain-obj: "npm:^1.1.0" - kind-of: "npm:^6.0.3" - checksum: 10/8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e - languageName: node - linkType: hard - -"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.7": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10/908491b6cc15a6c440ba5b22780a0ba89b9810e1aea684e253e43c4e3b8d56ec1dcdd7ea96dde119c29df59c936cde16062159eae4225c691e19c70b432b6e6f - languageName: node - linkType: hard - -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10/14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 - languageName: node - linkType: hard - -"minipass-fetch@npm:^3.0.0": - version: 3.0.3 - resolution: "minipass-fetch@npm:3.0.3" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^5.0.0" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^2.1.2" - dependenciesMeta: - encoding: - optional: true - checksum: 10/045339fa8fa2f2a544da203c38e91e6329a6c8d0d563db42db2e32bd863b0d7127692f456dcdd171bcd3123af12ce04072d3fc276571c85085a9870db7dea69a - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10/56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10/b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10/40982d8d836a52b0f37049a0a7e5d0f089637298e6d9b45df9c115d4f0520682a78258905e5c8b180fb41b593b0a82cc1361d2c74b45f7ada66334f84d1ecfdd - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10/a5c6ef069f70d9a524d3428af39f2b117ff8cd84172e19b754e7264a33df460873e6eb3d6e55758531580970de50ae950c496256bb4ad3691a2974cddff189f0 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 10/61682162d29f45d3152b78b08bab7fb32ca10899bc5991ffe98afc18c9e9543bd1e3be94f8b8373ba6262497db63607079dc242ea62e43e7b2270837b7347c93 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.1.2": - version: 7.1.2 - resolution: "minipass@npm:7.1.2" - checksum: 10/c25f0ee8196d8e6036661104bacd743785b2599a21de5c516b32b3fa2b83113ac89a2358465bc04956baab37ffb956ae43be679b2262bf7be15fce467ccd7950 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: "npm:^3.0.0" - yallist: "npm:^4.0.0" - checksum: 10/ae0f45436fb51344dcb87938446a32fbebb540d0e191d63b35e1c773d47512e17307bf54aa88326cc6d176594d00e4423563a091f7266c2f9a6872cdc1e234d1 - languageName: node - linkType: hard - -"mipd@npm:0.0.7": - version: 0.0.7 - resolution: "mipd@npm:0.0.7" - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/c14dffef0ef7a3e71469aee553f5735f4a6a9f9a2b47ca02798040f2e006261c2e7e8b26ee0dc56a815c04d5612eb4be1eed474e7bb4e496eb0f5ada2fe1d2e7 - languageName: node - linkType: hard - -"mitt@npm:^3.0.1": - version: 3.0.1 - resolution: "mitt@npm:3.0.1" - checksum: 10/287c70d8e73ffc25624261a4989c783768aed95ecb60900f051d180cf83e311e3e59865bfd6e9d029cdb149dc20ba2f128a805e9429c5c4ce33b1416c65bbd14 - languageName: node - linkType: hard - -"mkdirp@npm:0.5.x, mkdirp@npm:~0.5.1": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: "npm:^1.2.6" - bin: - mkdirp: bin/cmd.js - checksum: 10/0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: 10/d71b8dcd4b5af2fe13ecf3bd24070263489404fe216488c5ba7e38ece1f54daf219e72a833a3a2dc404331e870e9f44963a33399589490956bff003a3404d3b2 - languageName: node - linkType: hard - -"mlly@npm:^1.2.0, mlly@npm:^1.4.2": - version: 1.4.2 - resolution: "mlly@npm:1.4.2" - dependencies: - acorn: "npm:^8.10.0" - pathe: "npm:^1.1.1" - pkg-types: "npm:^1.0.3" - ufo: "npm:^1.3.0" - checksum: 10/ea5dc1a6cb2795cd15c6cdc84bbf431e0649917e673ef4de5d5ace6f74f74f02d22cd3c3faf7f868c3857115d33cccaaf5a070123b9a6c997af06ebeb8ab3bb5 - languageName: node - linkType: hard - -"mnemonist@npm:^0.38.0": - version: 0.38.5 - resolution: "mnemonist@npm:0.38.5" - dependencies: - obliterator: "npm:^2.0.0" - checksum: 10/2df34862567376acb8c2411d546ba9f109229acb2b7fe7593df6fe62194d98f124cf7ff7b2d6f457a3f0410d4d8b44389022ac853d5e5448a2603c4b12f733bf - languageName: node - linkType: hard - -"mocha@npm:^10.0.0, mocha@npm:^10.2.0, mocha@npm:^10.8.2": - version: 10.8.2 - resolution: "mocha@npm:10.8.2" - dependencies: - ansi-colors: "npm:^4.1.3" - browser-stdout: "npm:^1.3.1" - chokidar: "npm:^3.5.3" - debug: "npm:^4.3.5" - diff: "npm:^5.2.0" - escape-string-regexp: "npm:^4.0.0" - find-up: "npm:^5.0.0" - glob: "npm:^8.1.0" - he: "npm:^1.2.0" - js-yaml: "npm:^4.1.0" - log-symbols: "npm:^4.1.0" - minimatch: "npm:^5.1.6" - ms: "npm:^2.1.3" - serialize-javascript: "npm:^6.0.2" - strip-json-comments: "npm:^3.1.1" - supports-color: "npm:^8.1.1" - workerpool: "npm:^6.5.1" - yargs: "npm:^16.2.0" - yargs-parser: "npm:^20.2.9" - yargs-unparser: "npm:^2.0.0" - bin: - _mocha: bin/_mocha - mocha: bin/mocha.js - checksum: 10/903bbffcb195ef9d36b27db54e3462c5486de1397289e0953735b3530397a139336c452bcf5188c663496c660d2285bbb6c7213290d36d536ad647b6145cb917 - languageName: node - linkType: hard - -"modify-values@npm:^1.0.0": - version: 1.0.1 - resolution: "modify-values@npm:1.0.1" - checksum: 10/16fa93f7ddb2540a8e82c99738ae4ed0e8e8cae57c96e13a0db9d68dfad074fd2eec542929b62ebbb18b357bbb3e4680b92d3a4099baa7aeb32360cb1c8f0247 - languageName: node - linkType: hard - -"moment@npm:^2.30.1": - version: 2.30.1 - resolution: "moment@npm:2.30.1" - checksum: 10/ae42d876d4ec831ef66110bdc302c0657c664991e45cf2afffc4b0f6cd6d251dde11375c982a5c0564ccc0fa593fc564576ddceb8c8845e87c15f58aa6baca69 - languageName: node - linkType: hard - -"moo@npm:^0.5.0, moo@npm:^0.5.1": - version: 0.5.2 - resolution: "moo@npm:0.5.2" - checksum: 10/fee356cb13b52e259c925fe297d71b3f47b98b06444b696dd4870d20cad4711eb58d24131afeba9bf7a51d77c77a3cbe8479066497d12a88abb51865c1be7de7 - languageName: node - linkType: hard - -"motion@npm:10.16.2": - version: 10.16.2 - resolution: "motion@npm:10.16.2" - dependencies: - "@motionone/animation": "npm:^10.15.1" - "@motionone/dom": "npm:^10.16.2" - "@motionone/svelte": "npm:^10.16.2" - "@motionone/types": "npm:^10.15.1" - "@motionone/utils": "npm:^10.15.1" - "@motionone/vue": "npm:^10.16.2" - checksum: 10/2470f12b97371eb876337b355ad158c545622b2cc7c83b0ba540d2c02afedb49990e78898e520b8f74cccc9ecf11d366ae005a35c60e92178fadd7434860a966 - languageName: node - linkType: hard - -"mri@npm:^1.1.0, mri@npm:^1.2.0": - version: 1.2.0 - resolution: "mri@npm:1.2.0" - checksum: 10/6775a1d2228bb9d191ead4efc220bd6be64f943ad3afd4dcb3b3ac8fc7b87034443f666e38805df38e8d047b29f910c3cc7810da0109af83e42c82c73bd3f6bc - languageName: node - linkType: hard - -"mrmime@npm:^2.0.0": - version: 2.0.0 - resolution: "mrmime@npm:2.0.0" - checksum: 10/8d95f714ea200c6cf3e3777cbc6168be04b05ac510090a9b41eef5ec081efeb1d1de3e535ffb9c9689fffcc42f59864fd52a500e84a677274f070adeea615c45 - languageName: node - linkType: hard - -"ms@npm:2.0.0": - version: 2.0.0 - resolution: "ms@npm:2.0.0" - checksum: 10/0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 - languageName: node - linkType: hard - -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 10/673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - -"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10/aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d - languageName: node - linkType: hard - -"ms@npm:^3.0.0-canary.1": - version: 3.0.0-canary.1 - resolution: "ms@npm:3.0.0-canary.1" - checksum: 10/5ec76c0932cf83ac3e7f70f1a4c0d4db4dbc91de6ea5f7d336c67b48f513c8cb4c0fce3a07e3d84ee931dbdc9a48f33ed1c485e834279fff8906d385e86684ae - languageName: node - linkType: hard - -"muggle-string@npm:^0.4.1": - version: 0.4.1 - resolution: "muggle-string@npm:0.4.1" - checksum: 10/8fa2ea08f497c04069718bd3fd1909b382114dacbad832d10967ca72690de43f5f8492d8ccfbf827d6be63868ed5fc10395e7b7c082aa95997eea498586c6620 - languageName: node - linkType: hard - -"multicast-dns@npm:^7.2.5": - version: 7.2.5 - resolution: "multicast-dns@npm:7.2.5" - dependencies: - dns-packet: "npm:^5.2.2" - thunky: "npm:^1.0.2" - bin: - multicast-dns: cli.js - checksum: 10/e9add8035fb7049ccbc87b1b069f05bb3b31e04fe057bf7d0116739d81295165afc2568291a4a962bee01a5074e475996816eed0f50c8110d652af5abb74f95a - languageName: node - linkType: hard - -"multiformats@npm:^11.0.0": - version: 11.0.2 - resolution: "multiformats@npm:11.0.2" - checksum: 10/4baf52891531c7264d1cbcf9925282e44fd8e45dd0b2ae45c653abfb898f0bc836a93c3fa16836f16551f0c44f24d3eaabb573d00b128d712a2b457c5778a037 - languageName: node - linkType: hard - -"multiformats@npm:^12.0.1": - version: 12.0.1 - resolution: "multiformats@npm:12.0.1" - checksum: 10/731608c0005f6a1d3008b9d3349e6d445bb7242c42a5ecf9630355ff9e48e097a9ea41ef9ea50d08e26ebdbe6f1f12c846807b489fbc0f735e7edb30b95bb1b1 - languageName: node - linkType: hard - -"multiformats@npm:^13.0.0, multiformats@npm:^13.1.0, multiformats@npm:^13.3.1": - version: 13.3.1 - resolution: "multiformats@npm:13.3.1" - checksum: 10/2e529613d457590dffe212a658546f313c7c7296d240d952d2baee7ce0abb227116d784f05cf4d238ef0db7d72ad2c3d04ea3c6b9bfd20db805a092024ce8d7e - languageName: node - linkType: hard - -"multiformats@npm:^9.4.2": - version: 9.9.0 - resolution: "multiformats@npm:9.9.0" - checksum: 10/ad55c7d480d22f4258a68fd88aa2aab744fe0cb1e68d732fc886f67d858b37e3aa6c2cec12b2960ead7730d43be690931485238569952d8a3d7f90fdc726c652 - languageName: node - linkType: hard - -"multiformats@npm:~13.1.3": - version: 13.1.3 - resolution: "multiformats@npm:13.1.3" - checksum: 10/5568213caf73a9cd189afae61b0d8ca4d3175507ee50fa64a8931b7617f4ea9bf076da6fdbe78131151e5d9d48207dcd4ce56863a93d39b3f56d158e2d856daa - languageName: node - linkType: hard - -"murmur-128@npm:^0.2.1": - version: 0.2.1 - resolution: "murmur-128@npm:0.2.1" - dependencies: - encode-utf8: "npm:^1.0.2" - fmix: "npm:^0.1.0" - imul: "npm:^1.0.0" - checksum: 10/0ec68c6d2176f1361699585ea54562ed3fe7a9260841cd58e39fdab2e2da5bc856ee9c9df3c5ae02d1cf9cd14432c24c8b70f80e64a69ab3b3484808539b5e83 - languageName: node - linkType: hard - -"mustache@npm:^4.2.0": - version: 4.2.0 - resolution: "mustache@npm:4.2.0" - bin: - mustache: bin/mustache - checksum: 10/6e668bd5803255ab0779c3983b9412b5c4f4f90e822230e0e8f414f5449ed7a137eed29430e835aa689886f663385cfe05f808eb34b16e1f3a95525889b05cd3 - languageName: node - linkType: hard - -"mute-stream@npm:0.0.8": - version: 0.0.8 - resolution: "mute-stream@npm:0.0.8" - checksum: 10/a2d2e79dde87e3424ffc8c334472c7f3d17b072137734ca46e6f221131f1b014201cc593b69a38062e974fb2394d3d1cb4349f80f012bbf8b8ac1b28033e515f - languageName: node - linkType: hard - -"mute-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "mute-stream@npm:2.0.0" - checksum: 10/d2e4fd2f5aa342b89b98134a8d899d8ef9b0a6d69274c4af9df46faa2d97aeb1f2ce83d867880d6de63643c52386579b99139801e24e7526c3b9b0a6d1e18d6c - languageName: node - linkType: hard - -"mz@npm:^2.7.0": - version: 2.7.0 - resolution: "mz@npm:2.7.0" - dependencies: - any-promise: "npm:^1.0.0" - object-assign: "npm:^4.0.1" - thenify-all: "npm:^1.0.0" - checksum: 10/8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 - languageName: node - linkType: hard - -"nan@npm:^2.17.0": - version: 2.17.0 - resolution: "nan@npm:2.17.0" - dependencies: - node-gyp: "npm:latest" - checksum: 10/bba1efee2475afb0cce154300b554863fb4bb0a683a28f5d0fa7390794b3b4381356aabeab6472c70651d9c8a2830e7595963f3ec0aa2008e5c4d83dbeb820fa - languageName: node - linkType: hard - -"nano-css@npm:^5.6.2": - version: 5.6.2 - resolution: "nano-css@npm:5.6.2" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.4.15" - css-tree: "npm:^1.1.2" - csstype: "npm:^3.1.2" - fastest-stable-stringify: "npm:^2.0.2" - inline-style-prefixer: "npm:^7.0.1" - rtl-css-js: "npm:^1.16.1" - stacktrace-js: "npm:^2.0.2" - stylis: "npm:^4.3.0" - peerDependencies: - react: "*" - react-dom: "*" - checksum: 10/6ed9f36957b19fc2dcf1644a853030cce70775bec3fed596cab9156063d522d5cb52cb1479117e4390acbe45b69321c9eb33915d96414aabaf09bff40497bb4a - languageName: node - linkType: hard - -"nanoid@npm:^3.3.6, nanoid@npm:^3.3.7": - version: 3.3.7 - resolution: "nanoid@npm:3.3.7" - bin: - nanoid: bin/nanoid.cjs - checksum: 10/ac1eb60f615b272bccb0e2b9cd933720dad30bf9708424f691b8113826bb91aca7e9d14ef5d9415a6ba15c266b37817256f58d8ce980c82b0ba3185352565679 - languageName: node - linkType: hard - -"nanoid@npm:^5.0.7": - version: 5.0.9 - resolution: "nanoid@npm:5.0.9" - bin: - nanoid: bin/nanoid.js - checksum: 10/8a3f9104f81095e3e4785f58caae47a05755599824b8611b9730cbf73db706b664f100e6189f8303f08764f144d499613d8e4a39e83125c53f4b4986d6576621 - languageName: node - linkType: hard - -"nanospinner@npm:1.2.2": - version: 1.2.2 - resolution: "nanospinner@npm:1.2.2" - dependencies: - picocolors: "npm:^1.1.1" - checksum: 10/40ed63364c95b58806a9989b16af8728fdb57d19a8bf05e643542a0c64b184df29435308a07a618af48817f22850dc1ef5827724c226047cab7e70bd22705a0e - languageName: node - linkType: hard - -"napi-wasm@npm:^1.1.0": - version: 1.1.0 - resolution: "napi-wasm@npm:1.1.0" - checksum: 10/767781f07ccaca846a6036a2df7686c9decc1b4fd6ad30ba782c94829476ec5610acc41e4caf7df94ebf0bed4abd4d34539979d0d85b025127c8a41be6259375 - languageName: node - linkType: hard - -"native-fetch@npm:^4.0.2": - version: 4.0.2 - resolution: "native-fetch@npm:4.0.2" - peerDependencies: - undici: "*" - checksum: 10/3ed5881a685a9690bfe35d0b0419586296bbc4f48e584a37b01bc14b57ac02c8c6fcb870ac36a343782002ee73080e9117e4f99cbf5bb7480be2111707857caa - languageName: node - linkType: hard - -"natural-compare-lite@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare-lite@npm:1.4.0" - checksum: 10/5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 10/23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d - languageName: node - linkType: hard - -"nearley@npm:^2.20.1": - version: 2.20.1 - resolution: "nearley@npm:2.20.1" - dependencies: - commander: "npm:^2.19.0" - moo: "npm:^0.5.0" - railroad-diagrams: "npm:^1.0.0" - randexp: "npm:0.4.6" - bin: - nearley-railroad: bin/nearley-railroad.js - nearley-test: bin/nearley-test.js - nearley-unparse: bin/nearley-unparse.js - nearleyc: bin/nearleyc.js - checksum: 10/b327a07d0fee967ec2b74205fee97c3ff13aeb6c91342443e5f0f00ed11e3fb8ce7e71e21de6a74f094206ebdb571e93c79a58f1fe5414714c97b0e55cd57cb2 - languageName: node - linkType: hard - -"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: 10/2723fb822a17ad55c93a588a4bc44d53b22855bf4be5499916ca0cab1e7165409d0b288ba2577d7b029f10ce18cf2ed8e703e5af31c984e1e2304277ef979837 - languageName: node - linkType: hard - -"neo-async@npm:^2.6.0, neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: 10/1a7948fea86f2b33ec766bc899c88796a51ba76a4afc9026764aedc6e7cde692a09067031e4a1bf6db4f978ccd99e7f5b6c03fe47ad9865c3d4f99050d67e002 - languageName: node - linkType: hard - -"neoqs@npm:^6.13.0": - version: 6.13.0 - resolution: "neoqs@npm:6.13.0" - checksum: 10/222ac1cc370a3906c24cbc3e384dea47f993d593200b35d5f97ccb03e7248b405889d480a668ddb131898ec3d5049dffc4ddc1910d75f96772ded9c6a33f103a - languageName: node - linkType: hard - -"next@npm:14.2.28": - version: 14.2.28 - resolution: "next@npm:14.2.28" - dependencies: - "@next/env": "npm:14.2.28" - "@next/swc-darwin-arm64": "npm:14.2.28" - "@next/swc-darwin-x64": "npm:14.2.28" - "@next/swc-linux-arm64-gnu": "npm:14.2.28" - "@next/swc-linux-arm64-musl": "npm:14.2.28" - "@next/swc-linux-x64-gnu": "npm:14.2.28" - "@next/swc-linux-x64-musl": "npm:14.2.28" - "@next/swc-win32-arm64-msvc": "npm:14.2.28" - "@next/swc-win32-ia32-msvc": "npm:14.2.28" - "@next/swc-win32-x64-msvc": "npm:14.2.28" - "@swc/helpers": "npm:0.5.5" - busboy: "npm:1.6.0" - caniuse-lite: "npm:^1.0.30001579" - graceful-fs: "npm:^4.2.11" - postcss: "npm:8.4.31" - styled-jsx: "npm:5.1.1" - peerDependencies: - "@opentelemetry/api": ^1.1.0 - "@playwright/test": ^1.41.2 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - dependenciesMeta: - "@next/swc-darwin-arm64": - optional: true - "@next/swc-darwin-x64": - optional: true - "@next/swc-linux-arm64-gnu": - optional: true - "@next/swc-linux-arm64-musl": - optional: true - "@next/swc-linux-x64-gnu": - optional: true - "@next/swc-linux-x64-musl": - optional: true - "@next/swc-win32-arm64-msvc": - optional: true - "@next/swc-win32-ia32-msvc": - optional: true - "@next/swc-win32-x64-msvc": - optional: true - peerDependenciesMeta: - "@opentelemetry/api": - optional: true - "@playwright/test": - optional: true - sass: - optional: true - bin: - next: dist/bin/next - checksum: 10/deac2100b2f31bcb59f64d3e67ff8efb73659b6b73b654c1b11c6b1a2b3988bdcc54a5e7758bd7c8f6b0fe2f52cc0f9bdbae16998bf849aca69cd53dff8f8cb6 - languageName: node - linkType: hard - -"nice-try@npm:^1.0.4": - version: 1.0.5 - resolution: "nice-try@npm:1.0.5" - checksum: 10/0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff - languageName: node - linkType: hard - -"no-case@npm:^3.0.4": - version: 3.0.4 - resolution: "no-case@npm:3.0.4" - dependencies: - lower-case: "npm:^2.0.2" - tslib: "npm:^2.0.3" - checksum: 10/0b2ebc113dfcf737d48dde49cfebf3ad2d82a8c3188e7100c6f375e30eafbef9e9124aadc3becef237b042fd5eb0aad2fd78669c20972d045bbe7fea8ba0be5c - languageName: node - linkType: hard - -"node-addon-api@npm:^2.0.0": - version: 2.0.2 - resolution: "node-addon-api@npm:2.0.2" - dependencies: - node-gyp: "npm:latest" - checksum: 10/e4ce4daac5b2fefa6b94491b86979a9c12d9cceba571d2c6df1eb5859f9da68e5dc198f128798e1785a88aafee6e11f4992dcccd4bf86bec90973927d158bd60 - languageName: node - linkType: hard - -"node-addon-api@npm:^5.0.0": - version: 5.1.0 - resolution: "node-addon-api@npm:5.1.0" - dependencies: - node-gyp: "npm:latest" - checksum: 10/595f59ffb4630564f587c502119cbd980d302e482781021f3b479f5fc7e41cf8f2f7280fdc2795f32d148e4f3259bd15043c52d4a3442796aa6f1ae97b959636 - languageName: node - linkType: hard - -"node-addon-api@npm:^7.0.0": - version: 7.0.0 - resolution: "node-addon-api@npm:7.0.0" - dependencies: - node-gyp: "npm:latest" - checksum: 10/f1a54ae38f6cbd4cdfe69d1b2f3f0c4a3d227eb50f5073f0a3b985d29a0c39c94b82c88213e5075ee1bc262f2e869841c733ebe7111a5e376f1732649edf6a93 - languageName: node - linkType: hard - -"node-emoji@npm:^1.10.0": - version: 1.11.0 - resolution: "node-emoji@npm:1.11.0" - dependencies: - lodash: "npm:^4.17.21" - checksum: 10/1d7ae9bcb0f23d7cdfcac5c3a90a6fd6ec584e6f7c70ff073f6122bfbed6c06284da7334092500d24e14162f5c4016e5dcd3355753cbd5b7e60de560a973248d - languageName: node - linkType: hard - -"node-fetch-native@npm:^1.4.0, node-fetch-native@npm:^1.4.1": - version: 1.4.1 - resolution: "node-fetch-native@npm:1.4.1" - checksum: 10/f66a6d495d50ee3739369fe6b614236087059af0b6fd7fa263c4204d9717e9dc53493b409e6921af0beaf4587a4cc2b74eae4605f30f0b4ea7f270c1d53e04f6 - languageName: node - linkType: hard - -"node-fetch@npm:node-fetch@2.7.0": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10/b24f8a3dc937f388192e59bcf9d0857d7b6940a2496f328381641cb616efccc9866e89ec43f2ec956bbd6c3d3ee05524ce77fe7b29ccd34692b3a16f237d6676 - languageName: node - linkType: hard - -"node-forge@npm:^1, node-forge@npm:^1.3.1": - version: 1.3.1 - resolution: "node-forge@npm:1.3.1" - checksum: 10/05bab6868633bf9ad4c3b1dd50ec501c22ffd69f556cdf169a00998ca1d03e8107a6032ba013852f202035372021b845603aeccd7dfcb58cdb7430013b3daa8d - languageName: node - linkType: hard - -"node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.3.0": - version: 4.6.0 - resolution: "node-gyp-build@npm:4.6.0" - bin: - node-gyp-build: bin.js - node-gyp-build-optional: optional.js - node-gyp-build-test: build-test.js - checksum: 10/c8b57abe5e6e4a28dce450e3c0136bcce88d15602c33f1258ed9c9a52f156d34a00dd8864271b2f2acfd6ef4de0af3e75e5e76e771c4bc4f38dd0ee06ad178d8 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 9.4.0 - resolution: "node-gyp@npm:9.4.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - glob: "npm:^7.1.4" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^11.0.3" - nopt: "npm:^6.0.0" - npmlog: "npm:^6.0.0" - rimraf: "npm:^3.0.2" - semver: "npm:^7.3.5" - tar: "npm:^6.1.2" - which: "npm:^2.0.2" - bin: - node-gyp: bin/node-gyp.js - checksum: 10/458317127c63877365f227b18ef2362b013b7f8440b35ae722935e61b31e6b84ec0e3625ab07f90679e2f41a1d5a7df6c4049fdf8e7b3c81fcf22775147b47ac - languageName: node - linkType: hard - -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: 10/b7afc2b65e56f7035b1a2eec57ae0fbdee7d742b1cdcd0f4387562b6527a011ab1cbe9f64cc8b3cca61e3297c9637c8bf61cec2e6b8d3a711d4b5267dfafbe02 - languageName: node - linkType: hard - -"node-releases@npm:^2.0.14": - version: 2.0.14 - resolution: "node-releases@npm:2.0.14" - checksum: 10/0f7607ec7db5ef1dc616899a5f24ae90c869b6a54c2d4f36ff6d84a282ab9343c7ff3ca3670fe4669171bb1e8a9b3e286e1ef1c131f09a83d70554f855d54f24 - languageName: node - linkType: hard - -"node-stdlib-browser@npm:^1.2.0": - version: 1.2.0 - resolution: "node-stdlib-browser@npm:1.2.0" - dependencies: - assert: "npm:^2.0.0" - browser-resolve: "npm:^2.0.0" - browserify-zlib: "npm:^0.2.0" - buffer: "npm:^5.7.1" - console-browserify: "npm:^1.1.0" - constants-browserify: "npm:^1.0.0" - create-require: "npm:^1.1.1" - crypto-browserify: "npm:^3.11.0" - domain-browser: "npm:^4.22.0" - events: "npm:^3.0.0" - https-browserify: "npm:^1.0.0" - isomorphic-timers-promises: "npm:^1.0.1" - os-browserify: "npm:^0.3.0" - path-browserify: "npm:^1.0.1" - pkg-dir: "npm:^5.0.0" - process: "npm:^0.11.10" - punycode: "npm:^1.4.1" - querystring-es3: "npm:^0.2.1" - readable-stream: "npm:^3.6.0" - stream-browserify: "npm:^3.0.0" - stream-http: "npm:^3.2.0" - string_decoder: "npm:^1.0.0" - timers-browserify: "npm:^2.0.4" - tty-browserify: "npm:0.0.1" - url: "npm:^0.11.0" - util: "npm:^0.12.4" - vm-browserify: "npm:^1.0.1" - checksum: 10/3872da5954722fc8e8267bb58af0dbe36a85b2003e55e63e191f7cc38baf2cbff530bea42c809dfeaa0ad70c0977d0b862b4a515ad90902c1db39ff2179f9b71 - languageName: node - linkType: hard - -"nofilter@npm:^3.0.2": - version: 3.1.0 - resolution: "nofilter@npm:3.1.0" - checksum: 10/f63d87231dfda4b783db17d75b15aac948f78e65f4f1043096ef441147f6667ff74cd4b3f57ada5dbe240be282d3e9838558ac863a66cb04ef25fff7b2b4be4e - languageName: node - linkType: hard - -"nopt@npm:3.x": - version: 3.0.6 - resolution: "nopt@npm:3.0.6" - dependencies: - abbrev: "npm:1" - bin: - nopt: ./bin/nopt.js - checksum: 10/2f582a44f7a4e495f21b6668008eda47f6e9c50c27efc00494aa67360791c9240da537661371786afc5d5712f353d3debb863a7201b536fe35fb393ceadc8a23 - languageName: node - linkType: hard - -"nopt@npm:^5.0.0": - version: 5.0.0 - resolution: "nopt@npm:5.0.0" - dependencies: - abbrev: "npm:1" - bin: - nopt: bin/nopt.js - checksum: 10/00f9bb2d16449469ba8ffcf9b8f0eae6bae285ec74b135fec533e5883563d2400c0cd70902d0a7759e47ac031ccf206ace4e86556da08ed3f1c66dda206e9ccd - languageName: node - linkType: hard - -"nopt@npm:^6.0.0": - version: 6.0.0 - resolution: "nopt@npm:6.0.0" - dependencies: - abbrev: "npm:^1.0.0" - bin: - nopt: bin/nopt.js - checksum: 10/3c1128e07cd0241ae66d6e6a472170baa9f3e84dd4203950ba8df5bafac4efa2166ce917a57ef02b01ba7c40d18b2cc64b29b225fd3640791fe07b24f0b33a32 - languageName: node - linkType: hard - -"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": - version: 2.5.0 - resolution: "normalize-package-data@npm:2.5.0" - dependencies: - hosted-git-info: "npm:^2.1.4" - resolve: "npm:^1.10.0" - semver: "npm:2 || 3 || 4 || 5" - validate-npm-package-license: "npm:^3.0.1" - checksum: 10/644f830a8bb9b7cc9bf2f6150618727659ee27cdd0840d1c1f97e8e6cab0803a098a2c19f31c6247ad9d3a0792e61521a13a6e8cd87cc6bb676e3150612c03d4 - languageName: node - linkType: hard - -"normalize-package-data@npm:^3.0.0": - version: 3.0.3 - resolution: "normalize-package-data@npm:3.0.3" - dependencies: - hosted-git-info: "npm:^4.0.1" - is-core-module: "npm:^2.5.0" - semver: "npm:^7.3.4" - validate-npm-package-license: "npm:^3.0.1" - checksum: 10/3cd3b438c9c7b15d72ed2d1bbf0f8cc2d07bfe27702fc9e95d039f0af4e069dc75c0646e75068f9f9255a8aae64b59aa4fe2177e65787145fb996c3d38d48acb - languageName: node - linkType: hard - -"normalize-path@npm:^2.1.1": - version: 2.1.1 - resolution: "normalize-path@npm:2.1.1" - dependencies: - remove-trailing-separator: "npm:^1.0.1" - checksum: 10/7e9cbdcf7f5b8da7aa191fbfe33daf290cdcd8c038f422faf1b8a83c972bf7a6d94c5be34c4326cb00fb63bc0fd97d9fbcfaf2e5d6142332c2cd36d2e1b86cea - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 10/88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 - languageName: node - linkType: hard - -"normalize-range@npm:^0.1.2": - version: 0.1.2 - resolution: "normalize-range@npm:0.1.2" - checksum: 10/9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184 - languageName: node - linkType: hard - -"normalize-url@npm:^6.0.1": - version: 6.1.0 - resolution: "normalize-url@npm:6.1.0" - checksum: 10/5ae699402c9d5ffa330adc348fcd6fc6e6a155ab7c811b96e30b7ecab60ceef821d8f86443869671dda71bbc47f4b9625739c82ad247e883e9aefe875bfb8659 - languageName: node - linkType: hard - -"normalize-url@npm:^8.0.0": - version: 8.0.1 - resolution: "normalize-url@npm:8.0.1" - checksum: 10/ae392037584fc5935b663ae4af475351930a1fc39e107956cfac44f42d5127eec2d77d9b7b12ded4696ca78103bafac5b6206a0ea8673c7bffecbe13544fcc5a - languageName: node - linkType: hard - -"npm-run-path@npm:^4.0.1": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: "npm:^3.0.0" - checksum: 10/5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 - languageName: node - linkType: hard - -"npm-run-path@npm:^5.1.0": - version: 5.1.0 - resolution: "npm-run-path@npm:5.1.0" - dependencies: - path-key: "npm:^4.0.0" - checksum: 10/dc184eb5ec239d6a2b990b43236845332ef12f4e0beaa9701de724aa797fe40b6bbd0157fb7639d24d3ab13f5d5cf22d223a19c6300846b8126f335f788bee66 - languageName: node - linkType: hard - -"npmlog@npm:^5.0.1": - version: 5.0.1 - resolution: "npmlog@npm:5.0.1" - dependencies: - are-we-there-yet: "npm:^2.0.0" - console-control-strings: "npm:^1.1.0" - gauge: "npm:^3.0.0" - set-blocking: "npm:^2.0.0" - checksum: 10/f42c7b9584cdd26a13c41a21930b6f5912896b6419ab15be88cc5721fc792f1c3dd30eb602b26ae08575694628ba70afdcf3675d86e4f450fc544757e52726ec - languageName: node - linkType: hard - -"npmlog@npm:^6.0.0": - version: 6.0.2 - resolution: "npmlog@npm:6.0.2" - dependencies: - are-we-there-yet: "npm:^3.0.0" - console-control-strings: "npm:^1.1.0" - gauge: "npm:^4.0.3" - set-blocking: "npm:^2.0.0" - checksum: 10/82b123677e62deb9e7472e27b92386c09e6e254ee6c8bcd720b3011013e4168bc7088e984f4fbd53cb6e12f8b4690e23e4fa6132689313e0d0dc4feea45489bb - languageName: node - linkType: hard - -"nth-check@npm:^1.0.2": - version: 1.0.2 - resolution: "nth-check@npm:1.0.2" - dependencies: - boolbase: "npm:~1.0.0" - checksum: 10/59e115fdd75b971d0030f42ada3aac23898d4c03aa13371fa8b3339d23461d1badf3fde5aad251fb956aaa75c0a3b9bfcd07c08a34a83b4f9dadfdce1d19337c - languageName: node - linkType: hard - -"nth-check@npm:^2.0.1": - version: 2.1.1 - resolution: "nth-check@npm:2.1.1" - dependencies: - boolbase: "npm:^1.0.0" - checksum: 10/5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 - languageName: node - linkType: hard - -"nullthrows@npm:^1.1.1": - version: 1.1.1 - resolution: "nullthrows@npm:1.1.1" - checksum: 10/c7cf377a095535dc301d81cf7959d3784d090a609a2a4faa40b6121a0c1d7f70d3a3aa534a34ab852e8553b66848ec503c28f2c19efd617ed564dc07dfbb6d33 - languageName: node - linkType: hard - -"number-to-bn@npm:1.7.0": - version: 1.7.0 - resolution: "number-to-bn@npm:1.7.0" - dependencies: - bn.js: "npm:4.11.6" - strip-hex-prefix: "npm:1.0.0" - checksum: 10/702e8f00b6b90abd23f711056005179c3bd5ce3b063c47d468250f63ab3b9b4b82e27bff3b4642a9e71e06c717d5ed359873501746df0a64c3db1fa6d704e704 - languageName: node - linkType: hard - -"nwsapi@npm:^2.2.0, nwsapi@npm:^2.2.2": - version: 2.2.7 - resolution: "nwsapi@npm:2.2.7" - checksum: 10/22c002080f0297121ad138aba5a6509e724774d6701fe2c4777627bd939064ecd9e1b6dc1c2c716bb7ca0b9f16247892ff2f664285202ac7eff6ec9543725320 - languageName: node - linkType: hard - -"obj-multiplex@npm:^1.0.0": - version: 1.0.0 - resolution: "obj-multiplex@npm:1.0.0" - dependencies: - end-of-stream: "npm:^1.4.0" - once: "npm:^1.4.0" - readable-stream: "npm:^2.3.3" - checksum: 10/6bdcb7d48a1cd4458a7ff0be0b3c1dc58e8e9e6504f937c10b1eac096a3d459b85d7ba32bdd9a45382bb238e245eb42ebcd91430c72f04b0a57c97f846f2d06f - languageName: node - linkType: hard - -"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10/fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f - languageName: node - linkType: hard - -"object-hash@npm:^3.0.0": - version: 3.0.0 - resolution: "object-hash@npm:3.0.0" - checksum: 10/f498d456a20512ba7be500cef4cf7b3c183cc72c65372a549c9a0e6dd78ce26f375e9b1315c07592d3fde8f10d5019986eba35970570d477ed9a2a702514432a - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.1": - version: 1.13.1 - resolution: "object-inspect@npm:1.13.1" - checksum: 10/92f4989ed83422d56431bc39656d4c780348eb15d397ce352ade6b7fec08f973b53744bd41b94af021901e61acaf78fcc19e65bf464ecc0df958586a672700f0 - languageName: node - linkType: hard - -"object-is@npm:^1.1.5": - version: 1.1.5 - resolution: "object-is@npm:1.1.5" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.3" - checksum: 10/75365aff5da4bebad5d20efd9f9a7a13597e603f5eb03d89da8f578c3f3937fe01c6cb5fce86c0611c48795c0841401fd37c943821db0de703c7b30a290576ad - languageName: node - linkType: hard - -"object-keys@npm:^1.1.1": - version: 1.1.1 - resolution: "object-keys@npm:1.1.1" - checksum: 10/3d81d02674115973df0b7117628ea4110d56042e5326413e4b4313f0bcdf7dd78d4a3acef2c831463fa3796a66762c49daef306f4a0ea1af44877d7086d73bde - languageName: node - linkType: hard - -"object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": - version: 4.1.5 - resolution: "object.assign@npm:4.1.5" - dependencies: - call-bind: "npm:^1.0.5" - define-properties: "npm:^1.2.1" - has-symbols: "npm:^1.0.3" - object-keys: "npm:^1.1.1" - checksum: 10/dbb22da4cda82e1658349ea62b80815f587b47131b3dd7a4ab7f84190ab31d206bbd8fe7e26ae3220c55b65725ac4529825f6142154211220302aa6b1518045d - languageName: node - linkType: hard - -"object.entries@npm:^1.1.8": - version: 1.1.8 - resolution: "object.entries@npm:1.1.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10/2301918fbd1ee697cf6ff7cd94f060c738c0a7d92b22fd24c7c250e9b593642c9707ad2c44d339303c1439c5967d8964251cdfc855f7f6ec55db2dd79e8dc2a7 - languageName: node - linkType: hard - -"object.fromentries@npm:^2.0.8": - version: 2.0.8 - resolution: "object.fromentries@npm:2.0.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - checksum: 10/5b2e80f7af1778b885e3d06aeb335dcc86965e39464671adb7167ab06ac3b0f5dd2e637a90d8ebd7426d69c6f135a4753ba3dd7d0fe2a7030cf718dcb910fd92 - languageName: node - linkType: hard - -"object.getownpropertydescriptors@npm:^2.1.0": - version: 2.1.6 - resolution: "object.getownpropertydescriptors@npm:2.1.6" - dependencies: - array.prototype.reduce: "npm:^1.0.5" - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.21.2" - safe-array-concat: "npm:^1.0.0" - checksum: 10/442983bf16c4cbf6f3b8882d14ca4d76fc78c4afc45a16454f6a728946f8e1aaf4ba4bd60557bbd800211bea0e7e83732344e884d5a8c20a195273fa637d8876 - languageName: node - linkType: hard - -"object.groupby@npm:^1.0.3": - version: 1.0.3 - resolution: "object.groupby@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - checksum: 10/44cb86dd2c660434be65f7585c54b62f0425b0c96b5c948d2756be253ef06737da7e68d7106e35506ce4a44d16aa85a413d11c5034eb7ce5579ec28752eb42d0 - languageName: node - linkType: hard - -"object.values@npm:^1.1.0, object.values@npm:^1.1.6, object.values@npm:^1.2.0": - version: 1.2.0 - resolution: "object.values@npm:1.2.0" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10/db2e498019c354428c5dd30d02980d920ac365b155fce4dcf63eb9433f98ccf0f72624309e182ce7cc227c95e45d474e1d483418e60de2293dd23fa3ebe34903 - languageName: node - linkType: hard - -"obliterator@npm:^2.0.0": - version: 2.0.4 - resolution: "obliterator@npm:2.0.4" - checksum: 10/5a49ce3736aa9c8ae536e14e556e347b225c71215d3d3e0b191da0386284a804b9e22c09780645f2cea3981d4cecefaa394f59f4ffd6167fe6c2f2401777e1ae - languageName: node - linkType: hard - -"obuf@npm:^1.0.0, obuf@npm:^1.1.2": - version: 1.1.2 - resolution: "obuf@npm:1.1.2" - checksum: 10/53ff4ab3a13cc33ba6c856cf281f2965c0aec9720967af450e8fd06cfd50aceeefc791986a16bcefa14e7898b3ca9acdfcf15b9d9a1b9c7e1366581a8ad6e65e - languageName: node - linkType: hard - -"ofetch@npm:^1.3.3": - version: 1.3.3 - resolution: "ofetch@npm:1.3.3" - dependencies: - destr: "npm:^2.0.1" - node-fetch-native: "npm:^1.4.0" - ufo: "npm:^1.3.0" - checksum: 10/d4ba1f374f3b9f3b4bd47fdca3cda47a16367e6f727545aa3ba93e9be89e615c6731dfd21158b2ef78c1788def15d2d045c233a446354099d6a17fee66e60c98 - languageName: node - linkType: hard - -"on-exit-leak-free@npm:^0.2.0": - version: 0.2.0 - resolution: "on-exit-leak-free@npm:0.2.0" - checksum: 10/36a3a1baea964dc01088884e9d87824cc1a3304ae702e7c688bdb5deec61fbb79325977dd6cba5988f60ad40fedc6ef31ec705adf65b4b042bc0d2686186c0dd - languageName: node - linkType: hard - -"on-exit-leak-free@npm:^2.1.0": - version: 2.1.0 - resolution: "on-exit-leak-free@npm:2.1.0" - checksum: 10/c43b935edb0bb957a1f43549b155dc9f215e84003f9643abd883bf0b67f9353738d6c84a081ac0e8ab5e0d17cef3ab8b2b111f052db4c5a0381b83191d66ea84 - languageName: node - linkType: hard - -"on-finished@npm:2.4.1": - version: 2.4.1 - resolution: "on-finished@npm:2.4.1" - dependencies: - ee-first: "npm:1.1.1" - checksum: 10/8e81472c5028125c8c39044ac4ab8ba51a7cdc19a9fbd4710f5d524a74c6d8c9ded4dd0eed83f28d3d33ac1d7a6a439ba948ccb765ac6ce87f30450a26bfe2ea - languageName: node - linkType: hard - -"on-headers@npm:~1.0.2": - version: 1.0.2 - resolution: "on-headers@npm:1.0.2" - checksum: 10/870766c16345855e2012e9422ba1ab110c7e44ad5891a67790f84610bd70a72b67fdd71baf497295f1d1bf38dd4c92248f825d48729c53c0eae5262fb69fa171 - languageName: node - linkType: hard - -"once@npm:1.x, once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: "npm:1" - checksum: 10/cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 - languageName: node - linkType: hard - -"onetime@npm:^5.1.0, onetime@npm:^5.1.2": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: "npm:^2.1.0" - checksum: 10/e9fd0695a01cf226652f0385bf16b7a24153dbbb2039f764c8ba6d2306a8506b0e4ce570de6ad99c7a6eb49520743afdb66edd95ee979c1a342554ed49a9aadd - languageName: node - linkType: hard - -"onetime@npm:^6.0.0": - version: 6.0.0 - resolution: "onetime@npm:6.0.0" - dependencies: - mimic-fn: "npm:^4.0.0" - checksum: 10/0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 - languageName: node - linkType: hard - -"open@npm:10.1.0": - version: 10.1.0 - resolution: "open@npm:10.1.0" - dependencies: - default-browser: "npm:^5.2.1" - define-lazy-prop: "npm:^3.0.0" - is-inside-container: "npm:^1.0.0" - is-wsl: "npm:^3.1.0" - checksum: 10/a9c4105243a1b3c5312bf2aeb678f78d31f00618b5100088ee01eed2769963ea1f2dd464ac8d93cef51bba2d911e1a9c0c34a753ec7b91d6b22795903ea6647a - languageName: node - linkType: hard - -"open@npm:^7.4.2": - version: 7.4.2 - resolution: "open@npm:7.4.2" - dependencies: - is-docker: "npm:^2.0.0" - is-wsl: "npm:^2.1.1" - checksum: 10/4fc02ed3368dcd5d7247ad3566433ea2695b0713b041ebc0eeb2f0f9e5d4e29fc2068f5cdd500976b3464e77fe8b61662b1b059c73233ccc601fe8b16d6c1cd6 - languageName: node - linkType: hard - -"open@npm:^8.0.9, open@npm:^8.4.0": - version: 8.4.2 - resolution: "open@npm:8.4.2" - dependencies: - define-lazy-prop: "npm:^2.0.0" - is-docker: "npm:^2.1.1" - is-wsl: "npm:^2.2.0" - checksum: 10/acd81a1d19879c818acb3af2d2e8e9d81d17b5367561e623248133deb7dd3aefaed527531df2677d3e6aaf0199f84df57b6b2262babff8bf46ea0029aac536c9 - languageName: node - linkType: hard - -"optionator@npm:^0.8.1": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" - dependencies: - deep-is: "npm:~0.1.3" - fast-levenshtein: "npm:~2.0.6" - levn: "npm:~0.3.0" - prelude-ls: "npm:~1.1.2" - type-check: "npm:~0.3.2" - word-wrap: "npm:~1.2.3" - checksum: 10/6fa3c841b520f10aec45563962922215180e8cfbc59fde3ecd4ba2644ad66ca96bd19ad0e853f22fefcb7fc10e7612a5215b412cc66c5588f9a3138b38f6b5ff - languageName: node - linkType: hard - -"optionator@npm:^0.9.1, optionator@npm:^0.9.3": - version: 0.9.3 - resolution: "optionator@npm:0.9.3" - dependencies: - "@aashutoshrathi/word-wrap": "npm:^1.2.3" - deep-is: "npm:^0.1.3" - fast-levenshtein: "npm:^2.0.6" - levn: "npm:^0.4.1" - prelude-ls: "npm:^1.2.1" - type-check: "npm:^0.4.0" - checksum: 10/fa28d3016395974f7fc087d6bbf0ac7f58ac3489f4f202a377e9c194969f329a7b88c75f8152b33fb08794a30dcd5c079db6bb465c28151357f113d80bbf67da - languageName: node - linkType: hard - -"ora@npm:4.0.2": - version: 4.0.2 - resolution: "ora@npm:4.0.2" - dependencies: - chalk: "npm:^2.4.2" - cli-cursor: "npm:^3.1.0" - cli-spinners: "npm:^2.2.0" - is-interactive: "npm:^1.0.0" - log-symbols: "npm:^3.0.0" - strip-ansi: "npm:^5.2.0" - wcwidth: "npm:^1.0.1" - checksum: 10/b38fd2c0cc2559393bca4fc337ac37bb517fb6880543dc51c4f2d60520635118d2dd642b9690eb0ef85b6e89ec5be60cdf76e44e992531fb9935fbc5c4a30dc1 - languageName: node - linkType: hard - -"ora@npm:^5.4.1": - version: 5.4.1 - resolution: "ora@npm:5.4.1" - dependencies: - bl: "npm:^4.1.0" - chalk: "npm:^4.1.0" - cli-cursor: "npm:^3.1.0" - cli-spinners: "npm:^2.5.0" - is-interactive: "npm:^1.0.0" - is-unicode-supported: "npm:^0.1.0" - log-symbols: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - wcwidth: "npm:^1.0.1" - checksum: 10/8d071828f40090a8e1c6e8f350c6eb065808e9ab2b3e57fa37e0d5ae78cb46dac00117c8f12c3c8b8da2923454afbd8265e08c10b69881170c5b269f451e7fef - languageName: node - linkType: hard - -"ordinal@npm:^1.0.3": - version: 1.0.3 - resolution: "ordinal@npm:1.0.3" - checksum: 10/6761c5b7606b6c4b0c22b4097dab4fe7ffcddacc49238eedf9c0ced877f5d4e4ad3f4fd43fefa1cc3f167cc54c7149267441b2ae85b81ccf13f45cf4b7947164 - languageName: node - linkType: hard - -"os-browserify@npm:^0.3.0": - version: 0.3.0 - resolution: "os-browserify@npm:0.3.0" - checksum: 10/16e37ba3c0e6a4c63443c7b55799ce4066d59104143cb637ecb9fce586d5da319cdca786ba1c867abbe3890d2cbf37953f2d51eea85e20dd6c4570d6c54bfebf - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 10/5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d - languageName: node - linkType: hard - -"outdent@npm:^0.5.0": - version: 0.5.0 - resolution: "outdent@npm:0.5.0" - checksum: 10/7d94a7d93883afa32c99d84f33248b221f4eeeedbb571921fe0e5cf0bee32e64746c587e9606d98ec22762870c782d21dd4bc3a0edf442d347cb54aa107b198d - languageName: node - linkType: hard - -"overlayscrollbars-react@npm:^0.5.6": - version: 0.5.6 - resolution: "overlayscrollbars-react@npm:0.5.6" - peerDependencies: - overlayscrollbars: ^2.0.0 - react: ">=16.8.0" - checksum: 10/473f5af860feab4b5418f9adc8e356fb201e9de61286443ff64002b9c997bc19bf17cf60e314c502c14ca41fa213c12f18111e6fe913be86ad68a15c32e66789 - languageName: node - linkType: hard - -"overlayscrollbars@npm:^2.10.0": - version: 2.10.0 - resolution: "overlayscrollbars@npm:2.10.0" - checksum: 10/d9bc907d722f730f17b2ff6fd678ae6679edd677c431c876bde918838f4a3e08d75bdeec62a9b018d29c0e14c8287277612a2a5cab73afcced4769f1bcb74cfd - languageName: node - linkType: hard - -"ox@npm:0.1.2": - version: 0.1.2 - resolution: "ox@npm:0.1.2" - dependencies: - "@adraffy/ens-normalize": "npm:^1.10.1" - "@noble/curves": "npm:^1.6.0" - "@noble/hashes": "npm:^1.5.0" - "@scure/bip32": "npm:^1.5.0" - "@scure/bip39": "npm:^1.4.0" - abitype: "npm:^1.0.6" - eventemitter3: "npm:5.0.1" - peerDependencies: - typescript: ">=5.4.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/cba00f13289599ff03cee3dbc19167c1d0f01829379d119f962b4e951ee2bf0d14491c7a45974e6a2a745117b13b22e9e4131d285e1f5247ea4e1cbc43c5c3d8 - languageName: node - linkType: hard - -"ox@npm:0.6.7": - version: 0.6.7 - resolution: "ox@npm:0.6.7" - dependencies: - "@adraffy/ens-normalize": "npm:^1.10.1" - "@noble/curves": "npm:^1.6.0" - "@noble/hashes": "npm:^1.5.0" - "@scure/bip32": "npm:^1.5.0" - "@scure/bip39": "npm:^1.4.0" - abitype: "npm:^1.0.6" - eventemitter3: "npm:5.0.1" - peerDependencies: - typescript: ">=5.4.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/442fb31e1afb68922bf942025930d8cd6d8c677696e9a6de308008b3608669f22127cadbc0f77181e012d23d7b74318e5f85e63b06b16eecbc887d7fac32a6dc - languageName: node - linkType: hard - -"ox@npm:0.6.9": - version: 0.6.9 - resolution: "ox@npm:0.6.9" - dependencies: - "@adraffy/ens-normalize": "npm:^1.10.1" - "@noble/curves": "npm:^1.6.0" - "@noble/hashes": "npm:^1.5.0" - "@scure/bip32": "npm:^1.5.0" - "@scure/bip39": "npm:^1.4.0" - abitype: "npm:^1.0.6" - eventemitter3: "npm:5.0.1" - peerDependencies: - typescript: ">=5.4.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/11ad9076b594dd424cd89d9763d4701e59e7ffc0733973947c82a14255a00a53483712e62fa9bbacd39efd35c6739bddb7728ef2211b47530f22036ab77cde69 - languageName: node - linkType: hard - -"ox@npm:0.8.1": - version: 0.8.1 - resolution: "ox@npm:0.8.1" - dependencies: - "@adraffy/ens-normalize": "npm:^1.11.0" - "@noble/ciphers": "npm:^1.3.0" - "@noble/curves": "npm:^1.9.1" - "@noble/hashes": "npm:^1.8.0" - "@scure/bip32": "npm:^1.7.0" - "@scure/bip39": "npm:^1.6.0" - abitype: "npm:^1.0.8" - eventemitter3: "npm:5.0.1" - peerDependencies: - typescript: ">=5.4.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/a3c967e5b30792d89e7ecbdf976c00c625738e96263e1f0a95ad43c27b57ac18f21357eb7a651ce3c0ff0dc54b3ed071516c9804bc48fa2134262a5066b62fcc - languageName: node - linkType: hard - -"p-cancelable@npm:^3.0.0": - version: 3.0.0 - resolution: "p-cancelable@npm:3.0.0" - checksum: 10/a5eab7cf5ac5de83222a014eccdbfde65ecfb22005ee9bc242041f0b4441e07fac7629432c82f48868aa0f8413fe0df6c6067c16f76bf9217cd8dc651923c93d - languageName: node - linkType: hard - -"p-defer@npm:^3.0.0": - version: 3.0.0 - resolution: "p-defer@npm:3.0.0" - checksum: 10/ac3b0976a1c76b67cca1a34e00f7299b0cc230891f820749686aa84f8947326bbe0f8e3b7d9ca511578ee06f0c1a6e0ff68c8e9c325eac455f09d99f91697161 - languageName: node - linkType: hard - -"p-defer@npm:^4.0.0": - version: 4.0.0 - resolution: "p-defer@npm:4.0.0" - checksum: 10/646c9e86e62d2299ee9e8722b9857c9a2918afb8626c4eaf072d956de0d5b33c1cb132e5754516c923fc691eb33aa216755e168f848b045c1279186c8e2d852f - languageName: node - linkType: hard - -"p-fifo@npm:^1.0.0": - version: 1.0.0 - resolution: "p-fifo@npm:1.0.0" - dependencies: - fast-fifo: "npm:^1.0.0" - p-defer: "npm:^3.0.0" - checksum: 10/4cdce44ff8266351014a460705a804c02760e5b721a018dbef6fae7d25caf83af2e343be58810297473383c1783bb7048388cb5c22938b3f904818531bc44ee7 - languageName: node - linkType: hard - -"p-filter@npm:^2.1.0": - version: 2.1.0 - resolution: "p-filter@npm:2.1.0" - dependencies: - p-map: "npm:^2.0.0" - checksum: 10/76e552ca624ce2233448d68b19eec9de42b695208121998f7e011edce71d1079a83096ee6a2078fb2a59cfa8a5c999f046edf00ebf16a8e780022010b4693234 - languageName: node - linkType: hard - -"p-limit@npm:3.1.0, p-limit@npm:^3.0.2": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10/7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 - languageName: node - linkType: hard - -"p-limit@npm:^1.1.0": - version: 1.3.0 - resolution: "p-limit@npm:1.3.0" - dependencies: - p-try: "npm:^1.0.0" - checksum: 10/eb9d9bc378d48ab1998d2a2b2962a99eddd3e3726c82d3258ecc1a475f22907968edea4fec2736586d100366a001c6bb449a2abe6cd65e252e9597394f01e789 - languageName: node - linkType: hard - -"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: "npm:^2.0.0" - checksum: 10/84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 - languageName: node - linkType: hard - -"p-limit@npm:^5.0.0": - version: 5.0.0 - resolution: "p-limit@npm:5.0.0" - dependencies: - yocto-queue: "npm:^1.0.0" - checksum: 10/87bf5837dee6942f0dbeff318436179931d9a97848d1b07dbd86140a477a5d2e6b90d9701b210b4e21fe7beaea2979dfde366e4f576fa644a59bd4d6a6371da7 - languageName: node - linkType: hard - -"p-locate@npm:^2.0.0": - version: 2.0.0 - resolution: "p-locate@npm:2.0.0" - dependencies: - p-limit: "npm:^1.1.0" - checksum: 10/e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081 - languageName: node - linkType: hard - -"p-locate@npm:^3.0.0": - version: 3.0.0 - resolution: "p-locate@npm:3.0.0" - dependencies: - p-limit: "npm:^2.0.0" - checksum: 10/83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: "npm:^2.2.0" - checksum: 10/513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 - languageName: node - linkType: hard - -"p-locate@npm:^5.0.0": - version: 5.0.0 - resolution: "p-locate@npm:5.0.0" - dependencies: - p-limit: "npm:^3.0.2" - checksum: 10/1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 - languageName: node - linkType: hard - -"p-map@npm:^2.0.0": - version: 2.1.0 - resolution: "p-map@npm:2.1.0" - checksum: 10/9e3ad3c9f6d75a5b5661bcad78c91f3a63849189737cd75e4f1225bf9ac205194e5c44aac2ef6f09562b1facdb9bd1425584d7ac375bfaa17b3f1a142dab936d - languageName: node - linkType: hard - -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: "npm:^3.0.0" - checksum: 10/7ba4a2b1e24c05e1fc14bbaea0fc6d85cf005ae7e9c9425d4575550f37e2e584b1af97bcde78eacd7559208f20995988d52881334db16cf77bc1bcf68e48ed7c - languageName: node - linkType: hard - -"p-map@npm:^7.0.3": - version: 7.0.3 - resolution: "p-map@npm:7.0.3" - checksum: 10/2ef48ccfc6dd387253d71bf502604f7893ed62090b2c9d73387f10006c342606b05233da0e4f29388227b61eb5aeface6197e166520c465c234552eeab2fe633 - languageName: node - linkType: hard - -"p-queue@npm:^8.0.1": - version: 8.1.0 - resolution: "p-queue@npm:8.1.0" - dependencies: - eventemitter3: "npm:^5.0.1" - p-timeout: "npm:^6.1.2" - checksum: 10/0dc23488b855c6b3a6c551e41c3c9c1c0991f097c294a2476f34d47ea3b1c74deac5ccd465ebc1560432e6a490a133a60b428dd44d8e51dff662f6b792814320 - languageName: node - linkType: hard - -"p-retry@npm:^4.5.0": - version: 4.6.2 - resolution: "p-retry@npm:4.6.2" - dependencies: - "@types/retry": "npm:0.12.0" - retry: "npm:^0.13.1" - checksum: 10/45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e - languageName: node - linkType: hard - -"p-timeout@npm:^6.1.2": - version: 6.1.4 - resolution: "p-timeout@npm:6.1.4" - checksum: 10/5ee0df408ba353cc2d7036af90d2eb1724c428fd1cf67cd9110c03f0035077c29f6506bff7198dfbef4910ec558c711f21f9741d89d043a6f2c2ff82064afcaf - languageName: node - linkType: hard - -"p-try@npm:^1.0.0": - version: 1.0.0 - resolution: "p-try@npm:1.0.0" - checksum: 10/20d9735f57258158df50249f172c77fe800d31e80f11a3413ac9e68ccbe6b11798acb3f48f2df8cea7ba2b56b753ce695a4fe2a2987c3c7691c44226b6d82b6f - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: 10/f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae - languageName: node - linkType: hard - -"package-json-from-dist@npm:^1.0.0": - version: 1.0.1 - resolution: "package-json-from-dist@npm:1.0.1" - checksum: 10/58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 - languageName: node - linkType: hard - -"package-json@npm:^8.1.0": - version: 8.1.1 - resolution: "package-json@npm:8.1.1" - dependencies: - got: "npm:^12.1.0" - registry-auth-token: "npm:^5.0.1" - registry-url: "npm:^6.0.0" - semver: "npm:^7.3.7" - checksum: 10/d97ce9539e1ed4aacaf7c2cb754f16afc10937fa250bd09b4d61181d2e36a30cf8a4cff2f8f831f0826b0ac01a355f26204c7e57ca0e450da6ccec3e34fc889a - languageName: node - linkType: hard - -"package-manager-detector@npm:^0.2.0": - version: 0.2.5 - resolution: "package-manager-detector@npm:0.2.5" - checksum: 10/97127289fffc238f6af5af3339c309a3b25f5b360b8d503f8d27cc3afa259732a08e7df9331f703b1db0c585504f70ade9b068ddf40949f6dd8a5ebbb9ab8d67 - languageName: node - linkType: hard - -"pako@npm:~1.0.5": - version: 1.0.11 - resolution: "pako@npm:1.0.11" - checksum: 10/1ad07210e894472685564c4d39a08717e84c2a68a70d3c1d9e657d32394ef1670e22972a433cbfe48976cb98b154ba06855dcd3fcfba77f60f1777634bec48c0 - languageName: node - linkType: hard - -"papaparse@npm:^5.4.1": - version: 5.4.1 - resolution: "papaparse@npm:5.4.1" - checksum: 10/5e6dc978187182ad2efa1d264ffe73d2042cd23b8fb1dcb0b0f5c8c7c772c11e3eb4e166fb0893880ed24529a96abe9065d704cc5b4cb96abf037413cfe43788 - languageName: node - linkType: hard - -"param-case@npm:^3.0.4": - version: 3.0.4 - resolution: "param-case@npm:3.0.4" - dependencies: - dot-case: "npm:^3.0.4" - tslib: "npm:^2.0.3" - checksum: 10/b34227fd0f794e078776eb3aa6247442056cb47761e9cd2c4c881c86d84c64205f6a56ef0d70b41ee7d77da02c3f4ed2f88e3896a8fefe08bdfb4deca037c687 - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: "npm:^3.0.0" - checksum: 10/6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff - languageName: node - linkType: hard - -"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.7": - version: 5.1.7 - resolution: "parse-asn1@npm:5.1.7" - dependencies: - asn1.js: "npm:^4.10.1" - browserify-aes: "npm:^1.2.0" - evp_bytestokey: "npm:^1.0.3" - hash-base: "npm:~3.0" - pbkdf2: "npm:^3.1.2" - safe-buffer: "npm:^5.2.1" - checksum: 10/f82c079f4d9a4d33159c7682f9c516680f4d659fde8060697a6b3c1be4795976e826d53a1e5751a81ddc800e9c6d6fa4629b59f6d1f3241ac8447a00c89a67d3 - languageName: node - linkType: hard - -"parse-duration@npm:^1.0.2": - version: 1.1.0 - resolution: "parse-duration@npm:1.1.0" - checksum: 10/c26ab1e3fdf1dc4b7006e87a82fd33c7dbee3116413a59369bbc3b160a8e7ed88616852c4c3dde23b7a857e270cb18fccf629ff52220803194239f8e092774a9 - languageName: node - linkType: hard - -"parse-entities@npm:^4.0.0": - version: 4.0.1 - resolution: "parse-entities@npm:4.0.1" - dependencies: - "@types/unist": "npm:^2.0.0" - character-entities: "npm:^2.0.0" - character-entities-legacy: "npm:^3.0.0" - character-reference-invalid: "npm:^2.0.0" - decode-named-character-reference: "npm:^1.0.0" - is-alphanumerical: "npm:^2.0.0" - is-decimal: "npm:^2.0.0" - is-hexadecimal: "npm:^2.0.0" - checksum: 10/71314312d2482422fcf0b6675e020643bab424b11f64c654b7843652cae03842a7802eda1fed194ec435debb5db47a33513eb6b1176888e9e998a0368f01f5c8 - languageName: node - linkType: hard - -"parse-filepath@npm:^1.0.2": - version: 1.0.2 - resolution: "parse-filepath@npm:1.0.2" - dependencies: - is-absolute: "npm:^1.0.0" - map-cache: "npm:^0.2.0" - path-root: "npm:^0.1.1" - checksum: 10/6794c3f38d3921f0f7cc63fb1fb0c4d04cd463356ad389c8ce6726d3c50793b9005971f4138975a6d7025526058d5e65e9bfe634d0765e84c4e2571152665a69 - languageName: node - linkType: hard - -"parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "parse-json@npm:4.0.0" - dependencies: - error-ex: "npm:^1.3.1" - json-parse-better-errors: "npm:^1.0.1" - checksum: 10/0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 - languageName: node - linkType: hard - -"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" - dependencies: - "@babel/code-frame": "npm:^7.0.0" - error-ex: "npm:^1.3.1" - json-parse-even-better-errors: "npm:^2.3.0" - lines-and-columns: "npm:^1.1.6" - checksum: 10/62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 - languageName: node - linkType: hard - -"parse-passwd@npm:^1.0.0": - version: 1.0.0 - resolution: "parse-passwd@npm:1.0.0" - checksum: 10/4e55e0231d58f828a41d0f1da2bf2ff7bcef8f4cb6146e69d16ce499190de58b06199e6bd9b17fbf0d4d8aef9052099cdf8c4f13a6294b1a522e8e958073066e - languageName: node - linkType: hard - -"parse5@npm:6.0.1": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 10/dfb110581f62bd1425725a7c784ae022a24669bd0efc24b58c71fc731c4d868193e2ebd85b74cde2dbb965e4dcf07059b1e651adbec1b3b5267531bd132fdb75 - languageName: node - linkType: hard - -"parse5@npm:^7.1.1": - version: 7.1.2 - resolution: "parse5@npm:7.1.2" - dependencies: - entities: "npm:^4.4.0" - checksum: 10/3c86806bb0fb1e9a999ff3a4c883b1ca243d99f45a619a0898dbf021a95a0189ed955c31b07fe49d342b54e814f33f2c9d7489198e8630dacd5477d413ec5782 - languageName: node - linkType: hard - -"parseley@npm:^0.7.0": - version: 0.7.0 - resolution: "parseley@npm:0.7.0" - dependencies: - moo: "npm:^0.5.1" - nearley: "npm:^2.20.1" - checksum: 10/039b782fad3f77f400d24771b28c9cc027d6c3ecdca795977c9b096e2a9107b17045a0cfab95ddf3831d6013d13a2f23dfc80fb6b7751d4593a708bd036eb7ad - languageName: node - linkType: hard - -"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": - version: 1.3.3 - resolution: "parseurl@npm:1.3.3" - checksum: 10/407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 - languageName: node - linkType: hard - -"pascal-case@npm:^3.1.2": - version: 3.1.2 - resolution: "pascal-case@npm:3.1.2" - dependencies: - no-case: "npm:^3.0.4" - tslib: "npm:^2.0.3" - checksum: 10/ba98bfd595fc91ef3d30f4243b1aee2f6ec41c53b4546bfa3039487c367abaa182471dcfc830a1f9e1a0df00c14a370514fa2b3a1aacc68b15a460c31116873e - languageName: node - linkType: hard - -"patch-package@npm:^6.4.7": - version: 6.5.1 - resolution: "patch-package@npm:6.5.1" - dependencies: - "@yarnpkg/lockfile": "npm:^1.1.0" - chalk: "npm:^4.1.2" - cross-spawn: "npm:^6.0.5" - find-yarn-workspace-root: "npm:^2.0.0" - fs-extra: "npm:^9.0.0" - is-ci: "npm:^2.0.0" - klaw-sync: "npm:^6.0.0" - minimist: "npm:^1.2.6" - open: "npm:^7.4.2" - rimraf: "npm:^2.6.3" - semver: "npm:^5.6.0" - slash: "npm:^2.0.0" - tmp: "npm:^0.0.33" - yaml: "npm:^1.10.2" - bin: - patch-package: index.js - checksum: 10/e15b3848f008da2cc659abd6d84dfeab6ed25a999ba25692071c13409f198dad28b6e451ecfebc2139a0847ad8e608575d6724bcc887c56169df8a733b849e79 - languageName: node - linkType: hard - -"path-browserify@npm:^1.0.1": - version: 1.0.1 - resolution: "path-browserify@npm:1.0.1" - checksum: 10/7e7368a5207e7c6b9051ef045711d0dc3c2b6203e96057e408e6e74d09f383061010d2be95cb8593fe6258a767c3e9fc6b2bfc7ce8d48ae8c3d9f6994cca9ad8 - languageName: node - linkType: hard - -"path-case@npm:^3.0.4": - version: 3.0.4 - resolution: "path-case@npm:3.0.4" - dependencies: - dot-case: "npm:^3.0.4" - tslib: "npm:^2.0.3" - checksum: 10/61de0526222629f65038a66f63330dd22d5b54014ded6636283e1d15364da38b3cf29e4433aa3f9d8b0dba407ae2b059c23b0104a34ee789944b1bc1c5c7e06d - languageName: node - linkType: hard - -"path-exists@npm:^3.0.0": - version: 3.0.0 - resolution: "path-exists@npm:3.0.0" - checksum: 10/96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 10/505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10/060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 - languageName: node - linkType: hard - -"path-key@npm:^2.0.1": - version: 2.0.1 - resolution: "path-key@npm:2.0.1" - checksum: 10/6e654864e34386a2a8e6bf72cf664dcabb76574dd54013add770b374384d438aca95f4357bb26935b514a4e4c2c9b19e191f2200b282422a76ee038b9258c5e7 - languageName: node - linkType: hard - -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 10/55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 - languageName: node - linkType: hard - -"path-key@npm:^4.0.0": - version: 4.0.0 - resolution: "path-key@npm:4.0.0" - checksum: 10/8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 - languageName: node - linkType: hard - -"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 10/49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a - languageName: node - linkType: hard - -"path-root-regex@npm:^0.1.0": - version: 0.1.2 - resolution: "path-root-regex@npm:0.1.2" - checksum: 10/dcd75d1f8e93faabe35a58e875b0f636839b3658ff2ad8c289463c40bc1a844debe0dab73c3398ef9dc8f6ec6c319720aff390cf4633763ddcf3cf4b1bbf7e8b - languageName: node - linkType: hard - -"path-root@npm:^0.1.1": - version: 0.1.1 - resolution: "path-root@npm:0.1.1" - dependencies: - path-root-regex: "npm:^0.1.0" - checksum: 10/ff88aebfc1c59ace510cc06703d67692a11530989920427625e52b66a303ca9b3d4059b0b7d0b2a73248d1ad29bcb342b8b786ec00592f3101d38a45fd3b2e08 - languageName: node - linkType: hard - -"path-scurry@npm:^1.11.1": - version: 1.11.1 - resolution: "path-scurry@npm:1.11.1" - dependencies: - lru-cache: "npm:^10.2.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10/5e8845c159261adda6f09814d7725683257fcc85a18f329880ab4d7cc1d12830967eae5d5894e453f341710d5484b8fdbbd4d75181b4d6e1eb2f4dc7aeadc434 - languageName: node - linkType: hard - -"path-scurry@npm:^2.0.0": - version: 2.0.0 - resolution: "path-scurry@npm:2.0.0" - dependencies: - lru-cache: "npm:^11.0.0" - minipass: "npm:^7.1.2" - checksum: 10/285ae0c2d6c34ae91dc1d5378ede21981c9a2f6de1ea9ca5a88b5a270ce9763b83dbadc7a324d512211d8d36b0c540427d3d0817030849d97a60fa840a2c59ec - languageName: node - linkType: hard - -"path-to-regexp@npm:0.1.7": - version: 0.1.7 - resolution: "path-to-regexp@npm:0.1.7" - checksum: 10/701c99e1f08e3400bea4d701cf6f03517474bb1b608da71c78b1eb261415b645c5670dfae49808c89e12cea2dccd113b069f040a80de012da0400191c6dbd1c8 - languageName: node - linkType: hard - -"path-type@npm:^3.0.0": - version: 3.0.0 - resolution: "path-type@npm:3.0.0" - dependencies: - pify: "npm:^3.0.0" - checksum: 10/735b35e256bad181f38fa021033b1c33cfbe62ead42bb2222b56c210e42938eecb272ae1949f3b6db4ac39597a61b44edd8384623ec4d79bfdc9a9c0f12537a6 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 10/5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 - languageName: node - linkType: hard - -"path2d@npm:^0.2.0": - version: 0.2.0 - resolution: "path2d@npm:0.2.0" - checksum: 10/576e4fba080d9177ad5d9d7c17926eed13ca5d606f9a213ea248ce4db953c3eafb6fcc03152eba806ce62d18961f56cce67e863804bd10d8b57b20f74467ddac - languageName: node - linkType: hard - -"pathe@npm:^1.1.0, pathe@npm:^1.1.1, pathe@npm:^1.1.2": - version: 1.1.2 - resolution: "pathe@npm:1.1.2" - checksum: 10/f201d796351bf7433d147b92c20eb154a4e0ea83512017bf4ec4e492a5d6e738fb45798be4259a61aa81270179fce11026f6ff0d3fa04173041de044defe9d80 - languageName: node - linkType: hard - -"pathval@npm:^1.1.1": - version: 1.1.1 - resolution: "pathval@npm:1.1.1" - checksum: 10/b50a4751068aa3a5428f5a0b480deecedc6f537666a3630a0c2ae2d5e7c0f4bf0ee77b48404441ec1220bef0c91625e6030b3d3cf5a32ab0d9764018d1d9dbb6 - languageName: node - linkType: hard - -"pbkdf2@npm:^3.0.17, pbkdf2@npm:^3.1.2": - version: 3.1.2 - resolution: "pbkdf2@npm:3.1.2" - dependencies: - create-hash: "npm:^1.1.2" - create-hmac: "npm:^1.1.4" - ripemd160: "npm:^2.0.1" - safe-buffer: "npm:^5.0.1" - sha.js: "npm:^2.4.8" - checksum: 10/40bdf30df1c9bb1ae41ec50c11e480cf0d36484b7c7933bf55e4451d1d0e3f09589df70935c56e7fccc5702779a0d7b842d012be8c08a187b44eb24d55bb9460 - languageName: node - linkType: hard - -"pdfjs-dist@npm:4.3.136": - version: 4.3.136 - resolution: "pdfjs-dist@npm:4.3.136" - dependencies: - canvas: "npm:^2.11.2" - path2d: "npm:^0.2.0" - dependenciesMeta: - canvas: - optional: true - path2d: - optional: true - checksum: 10/5511a54a0811c93c6d0517d3bd7ee1df5ffc00577d8b27054956d3775bb9a8a75427ad878c4b13fdda830aabf17e2807667b957e499848bb5968caaba4254d46 - languageName: node - linkType: hard - -"performance-now@npm:^2.1.0": - version: 2.1.0 - resolution: "performance-now@npm:2.1.0" - checksum: 10/534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 - languageName: node - linkType: hard - -"picocolors@npm:^0.2.1": - version: 0.2.1 - resolution: "picocolors@npm:0.2.1" - checksum: 10/3b0f441f0062def0c0f39e87b898ae7461c3a16ffc9f974f320b44c799418cabff17780ee647fda42b856a1dc45897e2c62047e1b546d94d6d5c6962f45427b2 - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.0": - version: 1.1.0 - resolution: "picocolors@npm:1.1.0" - checksum: 10/a2ad60d94d185c30f2a140b19c512547713fb89b920d32cc6cf658fa786d63a37ba7b8451872c3d9fc34883971fb6e5878e07a20b60506e0bb2554dce9169ccb - languageName: node - linkType: hard - -"picocolors@npm:^1.1.1": - version: 1.1.1 - resolution: "picocolors@npm:1.1.1" - checksum: 10/e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 - languageName: node - linkType: hard - -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10/60c2595003b05e4535394d1da94850f5372c9427ca4413b71210f437f7b2ca091dbd611c45e8b37d10036fa8eade25c1b8951654f9d3973bfa66a2ff4d3b08bc - languageName: node - linkType: hard - -"picomatch@npm:^3.0.0": - version: 3.0.1 - resolution: "picomatch@npm:3.0.1" - checksum: 10/65ac837fedbd0640586f7c214f6c7481e1e12f41cdcd22a95eb6a2914d1773707ed0f0b5bd2d1e39b5ec7860b43a4c9150152332a3884cd8dd1d419b2a2fa5b5 - languageName: node - linkType: hard - -"picomatch@npm:^4.0.2": - version: 4.0.2 - resolution: "picomatch@npm:4.0.2" - checksum: 10/ce617b8da36797d09c0baacb96ca8a44460452c89362d7cb8f70ca46b4158ba8bc3606912de7c818eb4a939f7f9015cef3c766ec8a0c6bfc725fdc078e39c717 - languageName: node - linkType: hard - -"pidtree@npm:0.6.0": - version: 0.6.0 - resolution: "pidtree@npm:0.6.0" - bin: - pidtree: bin/pidtree.js - checksum: 10/ea67fb3159e170fd069020e0108ba7712df9f0fd13c8db9b2286762856ddce414fb33932e08df4bfe36e91fe860b51852aee49a6f56eb4714b69634343add5df - languageName: node - linkType: hard - -"pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 10/9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba - languageName: node - linkType: hard - -"pify@npm:^3.0.0": - version: 3.0.0 - resolution: "pify@npm:3.0.0" - checksum: 10/668c1dc8d9fc1b34b9ce3b16ba59deb39d4dc743527bf2ed908d2b914cb8ba40aa5ba6960b27c417c241531c5aafd0598feeac2d50cb15278cf9863fa6b02a77 - languageName: node - linkType: hard - -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 10/8b97cbf9dc6d4c1320cc238a2db0fc67547f9dc77011729ff353faf34f1936ea1a4d7f3c63b2f4980b253be77bcc72ea1e9e76ee3fd53cce2aafb6a8854d07ec - languageName: node - linkType: hard - -"pify@npm:^5.0.0": - version: 5.0.0 - resolution: "pify@npm:5.0.0" - checksum: 10/443e3e198ad6bfa8c0c533764cf75c9d5bc976387a163792fb553ffe6ce923887cf14eebf5aea9b7caa8eab930da8c33612990ae85bd8c2bc18bedb9eae94ecb - languageName: node - linkType: hard - -"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.2.0": - version: 1.2.0 - resolution: "pino-abstract-transport@npm:1.2.0" - dependencies: - readable-stream: "npm:^4.0.0" - split2: "npm:^4.0.0" - checksum: 10/6ec1d19a7ff3347fd21576f744c31c3e38ca4463ae638818408f43698c936f96be6a0bc750af5f7c1ae81873183bfcb062b7a0d12dc159a1813ea900c388c693 - languageName: node - linkType: hard - -"pino-abstract-transport@npm:v0.5.0": - version: 0.5.0 - resolution: "pino-abstract-transport@npm:0.5.0" - dependencies: - duplexify: "npm:^4.1.2" - split2: "npm:^4.0.0" - checksum: 10/d304a104e5cb0c3fef62ea544a4a39bf2472a602cdd7ddb136b0671b9c324ad93fa7888825c4cf33e624802436e897081ba92440f40518b9f2dbdbc0c889e409 - languageName: node - linkType: hard - -"pino-pretty@npm:^10.3.1": - version: 10.3.1 - resolution: "pino-pretty@npm:10.3.1" - dependencies: - colorette: "npm:^2.0.7" - dateformat: "npm:^4.6.3" - fast-copy: "npm:^3.0.0" - fast-safe-stringify: "npm:^2.1.1" - help-me: "npm:^5.0.0" - joycon: "npm:^3.1.1" - minimist: "npm:^1.2.6" - on-exit-leak-free: "npm:^2.1.0" - pino-abstract-transport: "npm:^1.0.0" - pump: "npm:^3.0.0" - readable-stream: "npm:^4.0.0" - secure-json-parse: "npm:^2.4.0" - sonic-boom: "npm:^3.0.0" - strip-json-comments: "npm:^3.1.1" - bin: - pino-pretty: bin.js - checksum: 10/4284f125f7e8a5a10e856c8fd591ba34c30c0a0071a0b265a9eda43c3e447ba11d40b06cc67108675586358a5d1213a6ac3a92f6abd2896abfbab9a5b4c17072 - languageName: node - linkType: hard - -"pino-std-serializers@npm:^4.0.0": - version: 4.0.0 - resolution: "pino-std-serializers@npm:4.0.0" - checksum: 10/cec586f9634ef0e6582f62bc8fc5ca5b6e5e11ab88fe3950c66fb0fd5d6690f66bc39cd3f27216b925d2963ad5c3bba415718819ac20ebe0390c7d056cbfea1b - languageName: node - linkType: hard - -"pino-std-serializers@npm:^6.0.0": - version: 6.2.2 - resolution: "pino-std-serializers@npm:6.2.2" - checksum: 10/a00cdff4e1fbc206da9bed047e6dc400b065f43e8b4cef1635b0192feab0e8f932cdeb0faaa38a5d93d2e777ba4cda939c2ed4c1a70f6839ff25f9aef97c27ff - languageName: node - linkType: hard - -"pino@npm:7.11.0": - version: 7.11.0 - resolution: "pino@npm:7.11.0" - dependencies: - atomic-sleep: "npm:^1.0.0" - fast-redact: "npm:^3.0.0" - on-exit-leak-free: "npm:^0.2.0" - pino-abstract-transport: "npm:v0.5.0" - pino-std-serializers: "npm:^4.0.0" - process-warning: "npm:^1.0.0" - quick-format-unescaped: "npm:^4.0.3" - real-require: "npm:^0.1.0" - safe-stable-stringify: "npm:^2.1.0" - sonic-boom: "npm:^2.2.1" - thread-stream: "npm:^0.15.1" - bin: - pino: bin.js - checksum: 10/1c7b4b52fea76e0bc5d8b1190a0fee24279cb16d76fdb5833b32b64256fd8a94d641574b850faba5be72514f04045206b6d902a9a3f5ceae2a4296687088e073 - languageName: node - linkType: hard - -"pino@npm:^8.21.0": - version: 8.21.0 - resolution: "pino@npm:8.21.0" - dependencies: - atomic-sleep: "npm:^1.0.0" - fast-redact: "npm:^3.1.1" - on-exit-leak-free: "npm:^2.1.0" - pino-abstract-transport: "npm:^1.2.0" - pino-std-serializers: "npm:^6.0.0" - process-warning: "npm:^3.0.0" - quick-format-unescaped: "npm:^4.0.3" - real-require: "npm:^0.2.0" - safe-stable-stringify: "npm:^2.3.1" - sonic-boom: "npm:^3.7.0" - thread-stream: "npm:^2.6.0" - bin: - pino: bin.js - checksum: 10/5a054eab533ab91b20f63497b86070f0a6b40e4688cde9de66d23e03d6046c4e95d69c3f526dea9f30bcbc5874c7fbf0f91660cded4753946fd02261ca8ac340 - languageName: node - linkType: hard - -"pirates@npm:^4.0.1, pirates@npm:^4.0.4": - version: 4.0.6 - resolution: "pirates@npm:4.0.6" - checksum: 10/d02dda76f4fec1cbdf395c36c11cf26f76a644f9f9a1bfa84d3167d0d3154d5289aacc72677aa20d599bb4a6937a471de1b65c995e2aea2d8687cbcd7e43ea5f - languageName: node - linkType: hard - -"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" - dependencies: - find-up: "npm:^4.0.0" - checksum: 10/9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 - languageName: node - linkType: hard - -"pkg-dir@npm:^5.0.0": - version: 5.0.0 - resolution: "pkg-dir@npm:5.0.0" - dependencies: - find-up: "npm:^5.0.0" - checksum: 10/b167bb8dac7bbf22b1d5e30ec223e6b064b84b63010c9d49384619a36734caf95ed23ad23d4f9bd975e8e8082b60a83395f43a89bb192df53a7c25a38ecb57d9 - languageName: node - linkType: hard - -"pkg-types@npm:^1.0.3": - version: 1.0.3 - resolution: "pkg-types@npm:1.0.3" - dependencies: - jsonc-parser: "npm:^3.2.0" - mlly: "npm:^1.2.0" - pathe: "npm:^1.1.0" - checksum: 10/e17e1819ce579c9ea390e4c41a9ed9701d8cff14b463f9577cc4f94688da8917c66dabc40feacd47a21eb3de9b532756a78becd882b76add97053af307c1240a - languageName: node - linkType: hard - -"pkg-up@npm:^3.1.0": - version: 3.1.0 - resolution: "pkg-up@npm:3.1.0" - dependencies: - find-up: "npm:^3.0.0" - checksum: 10/5bac346b7c7c903613c057ae3ab722f320716199d753f4a7d053d38f2b5955460f3e6ab73b4762c62fd3e947f58e04f1343e92089e7bb6091c90877406fcd8c8 - languageName: node - linkType: hard - -"pluralize@npm:^8.0.0": - version: 8.0.0 - resolution: "pluralize@npm:8.0.0" - checksum: 10/17877fdfdb7ddb3639ce257ad73a7c51a30a966091e40f56ea9f2f545b5727ce548d4928f8cb3ce38e7dc0c5150407d318af6a4ed0ea5265d378473b4c2c61ec - languageName: node - linkType: hard - -"pngjs@npm:^5.0.0": - version: 5.0.0 - resolution: "pngjs@npm:5.0.0" - checksum: 10/345781644740779752505af2fea3e9043f6c7cc349b18e1fb8842796360d1624791f0c24d33c0f27b05658373f90ffaa177a849e932e5fea1f540cef3975f3c9 - languageName: node - linkType: hard - -"pony-cause@npm:^2.1.10": - version: 2.1.10 - resolution: "pony-cause@npm:2.1.10" - checksum: 10/906563565030996d0c40ba79a584e2f298391931acc59c98510f9fd583d72cd9e9c58b0fb5a25bbae19daf16840f94cb9c1ee72c7ed5ef249ecba147cee40495 - languageName: node - linkType: hard - -"possible-typed-array-names@npm:^1.0.0": - version: 1.0.0 - resolution: "possible-typed-array-names@npm:1.0.0" - checksum: 10/8ed3e96dfeea1c5880c1f4c9cb707e5fb26e8be22f14f82ef92df20fd2004e635c62ba47fbe8f2bb63bfd80dac1474be2fb39798da8c2feba2815435d1f749af - languageName: node - linkType: hard - -"postcss-attribute-case-insensitive@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-attribute-case-insensitive@npm:5.0.2" - dependencies: - postcss-selector-parser: "npm:^6.0.10" - peerDependencies: - postcss: ^8.2 - checksum: 10/c0b8139f37e68dba372724cba03a53c30716224f0085f98485cada99489beb7c3da9d598ffc1d81519b59d9899291712c9041c250205e6ec0b034bb2c144dcf9 - languageName: node - linkType: hard - -"postcss-browser-comments@npm:^4": - version: 4.0.0 - resolution: "postcss-browser-comments@npm:4.0.0" - peerDependencies: - browserslist: ">=4" - postcss: ">=8" - checksum: 10/41850023901eada80e41f7328874e458b4b1e38fcf8aea277ae02128d3585d6652063544f34b575561a8d4f53e154e8082cc82ac73e09118bbad41dc749f7a54 - languageName: node - linkType: hard - -"postcss-calc@npm:^8.2.3": - version: 8.2.4 - resolution: "postcss-calc@npm:8.2.4" - dependencies: - postcss-selector-parser: "npm:^6.0.9" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.2 - checksum: 10/f34d0cbc5d2b02071cf4de9bacbb93681c22b29048726b500b5f5327e37b590d2552ba4d8ed179e2378037fd09cc6bf5ee3e25cbd8a803c57205795fa79479a8 - languageName: node - linkType: hard - -"postcss-clamp@npm:^4.1.0": - version: 4.1.0 - resolution: "postcss-clamp@npm:4.1.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.4.6 - checksum: 10/fb38286d3e607a8b11ef28c89272bd572a077f5a496e2838c3996697bbc4cfb8f7a5be4b4a8987e6b0223db48c9ce5683c9d840f7afe54210ab0f77127628415 - languageName: node - linkType: hard - -"postcss-color-functional-notation@npm:^4.2.4": - version: 4.2.4 - resolution: "postcss-color-functional-notation@npm:4.2.4" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/a64e24588538bdf182de43d093d622248c6b6b50ea8f2abbae302ec00e07c2af767841748181b28163e14bb25135d5b657ffde9c4dde2d6a9db71d0fae827cd8 - languageName: node - linkType: hard - -"postcss-color-hex-alpha@npm:^8.0.4": - version: 8.0.4 - resolution: "postcss-color-hex-alpha@npm:8.0.4" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.4 - checksum: 10/a2f3173a60176cf0aea3b7ebbc799b2cb08229127f0fff708fa31efa14e4ded47ca49aff549d8ed92e74ffe24adee32d5b9d557dbde0524fde5fe389bc520b4e - languageName: node - linkType: hard - -"postcss-color-rebeccapurple@npm:^7.1.1": - version: 7.1.1 - resolution: "postcss-color-rebeccapurple@npm:7.1.1" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/4876acabfe6b41f78687253eaeb1fd398144bc7e6aae9ae9ffdd6dfcf16f1a315d5a405e730b5fde5312fc21207a99d0065cef286959663d97c8ad1cc5057a87 - languageName: node - linkType: hard - -"postcss-colormin@npm:^5.3.1": - version: 5.3.1 - resolution: "postcss-colormin@npm:5.3.1" - dependencies: - browserslist: "npm:^4.21.4" - caniuse-api: "npm:^3.0.0" - colord: "npm:^2.9.1" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/e5778baab30877cd1f51e7dc9d2242a162aeca6360a52956acd7f668c5bc235c2ccb7e4df0370a804d65ebe00c5642366f061db53aa823f9ed99972cebd16024 - languageName: node - linkType: hard - -"postcss-convert-values@npm:^5.1.3": - version: 5.1.3 - resolution: "postcss-convert-values@npm:5.1.3" - dependencies: - browserslist: "npm:^4.21.4" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/dacb41296a4d730c9e84c1b6ba8a13f6515b65811689b8b62ad6c7174bb462b5c0bfa21803cc06d1d3af16dbc8f4be1e225970844297fab0bedfe2fef8dc603e - languageName: node - linkType: hard - -"postcss-custom-media@npm:^8.0.2": - version: 8.0.2 - resolution: "postcss-custom-media@npm:8.0.2" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.3 - checksum: 10/02d0dfd53d2f748f2904d6c380e790ec6d2dca0d96e70e2d261d504700ad9fdb1f1e3febeefb4611b9005e91c412725502ed2f5885455d6e1483cc016d65af34 - languageName: node - linkType: hard - -"postcss-custom-properties@npm:^12.1.10": - version: 12.1.11 - resolution: "postcss-custom-properties@npm:12.1.11" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/3f049f07cc45c9debcc8d662374947eb3158bb66b2722c81368b36d60de0629e75d80ccfe2ca25ba21af8ce146c50dbc91c62c28e01c06635252e39678c1eb6d - languageName: node - linkType: hard - -"postcss-custom-selectors@npm:^6.0.3": - version: 6.0.3 - resolution: "postcss-custom-selectors@npm:6.0.3" - dependencies: - postcss-selector-parser: "npm:^6.0.4" - peerDependencies: - postcss: ^8.3 - checksum: 10/da174daa68643b4c814ea1ef763551c7c48d0873bc101f9902e85ed271f3d5f46d50e0e496eec8dc49c9c88f68f021bb5ee16940136232d4bb7e765eb5a0ae03 - languageName: node - linkType: hard - -"postcss-dir-pseudo-class@npm:^6.0.5": - version: 6.0.5 - resolution: "postcss-dir-pseudo-class@npm:6.0.5" - dependencies: - postcss-selector-parser: "npm:^6.0.10" - peerDependencies: - postcss: ^8.2 - checksum: 10/70117146ff55225bcfe47186d7ff1bf68f4de551761797f60e475e923047caa0c373197b810133d52d2bca18e45040c4a9b20e92037847496509cf7089adc3ec - languageName: node - linkType: hard - -"postcss-discard-comments@npm:^5.1.2": - version: 5.1.2 - resolution: "postcss-discard-comments@npm:5.1.2" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/abfd064ebc27aeaf5037643dd51ffaff74d1fa4db56b0523d073ace4248cbb64ffd9787bd6924b0983a9d0bd0e9bf9f10d73b120e50391dc236e0d26c812fa2a - languageName: node - linkType: hard - -"postcss-discard-duplicates@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-discard-duplicates@npm:5.1.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/88d6964201b1f4ed6bf7a32cefe68e86258bb6e42316ca01d9b32bdb18e7887d02594f89f4a2711d01b51ea6e3fcca8c54be18a59770fe5f4521c61d3eb6ca35 - languageName: node - linkType: hard - -"postcss-discard-empty@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-discard-empty@npm:5.1.1" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/970adb12fae5c214c0768236ad9a821552626e77dedbf24a8213d19cc2c4a531a757cd3b8cdd3fc22fb1742471b8692a1db5efe436a71236dec12b1318ee8ff4 - languageName: node - linkType: hard - -"postcss-discard-overridden@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-discard-overridden@npm:5.1.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/d64d4a545aa2c81b22542895cfcddc787d24119f294d35d29b0599a1c818b3cc51f4ee80b80f5a0a09db282453dd5ac49f104c2117cc09112d0ac9b40b499a41 - languageName: node - linkType: hard - -"postcss-double-position-gradients@npm:^3.1.2": - version: 3.1.2 - resolution: "postcss-double-position-gradients@npm:3.1.2" - dependencies: - "@csstools/postcss-progressive-custom-properties": "npm:^1.1.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/5ed0561c3b64ba6fc6efc1069d469c98fe2b4b0460bdc3a5d859bc39224def7b3142c56a56336a7c24365aee9c94bb65aa61f498921ce8b77b4c89811beea857 - languageName: node - linkType: hard - -"postcss-env-function@npm:^4.0.6": - version: 4.0.6 - resolution: "postcss-env-function@npm:4.0.6" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.4 - checksum: 10/76e0c9de458a8938da92be7755f0a8a25fd2d1790e509b7b3c7975c1c121b3786095dcab19a884759ff2c701b5eeefac5f3c7e8d1a7394a4ffc5ad97d2e3c1fe - languageName: node - linkType: hard - -"postcss-flexbugs-fixes@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-flexbugs-fixes@npm:5.0.2" - peerDependencies: - postcss: ^8.1.4 - checksum: 10/022ddbcca8987303b9be75ff259e9de81b98643adac87a5fc6b52a0fcbbf95e1ac9fd508c4ed67cad76ac5d039b7123de8a0832329481b3c626f5d63f7a28f47 - languageName: node - linkType: hard - -"postcss-focus-visible@npm:^6.0.4": - version: 6.0.4 - resolution: "postcss-focus-visible@npm:6.0.4" - dependencies: - postcss-selector-parser: "npm:^6.0.9" - peerDependencies: - postcss: ^8.4 - checksum: 10/efe1b14f72a590d6cd923f53e8023364a34397b377dba6caaada424f5a53621a08fec6f0bb9f3110ddabb00eb6e745746de39d1a03a2218cf89c0eb70ab11675 - languageName: node - linkType: hard - -"postcss-focus-within@npm:^5.0.4": - version: 5.0.4 - resolution: "postcss-focus-within@npm:5.0.4" - dependencies: - postcss-selector-parser: "npm:^6.0.9" - peerDependencies: - postcss: ^8.4 - checksum: 10/1d274e06312386190bc6cd006a92748aca59207021787a6f44b33760a549b5fa1baef2797ca839ae34a9edb36dbedc6700ab01e5b0926d6a96001223bcd674dd - languageName: node - linkType: hard - -"postcss-font-variant@npm:^5.0.0": - version: 5.0.0 - resolution: "postcss-font-variant@npm:5.0.0" - peerDependencies: - postcss: ^8.1.0 - checksum: 10/738328282cf71750f6efc72d72017f938a6e76c9c49602aae4cc4337beac6d13e72a4ade608567293cb87cad2af502e6aaef652fdcc500e09b4aba38c3e32fc6 - languageName: node - linkType: hard - -"postcss-gap-properties@npm:^3.0.5": - version: 3.0.5 - resolution: "postcss-gap-properties@npm:3.0.5" - peerDependencies: - postcss: ^8.2 - checksum: 10/e4513d02424bd3ab1e472a81d54fe2825b7a21ff81991abd8bce1438cdc5d1006cb9c821875bd50afcd74c82a9b99d59ad36a12e8fd9da4e028b99a00793a565 - languageName: node - linkType: hard - -"postcss-image-set-function@npm:^4.0.7": - version: 4.0.7 - resolution: "postcss-image-set-function@npm:4.0.7" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/17cba0b2bda98900dfe6adae88a9034cfc6fc6101b386144a27218bcdc5e65b52576326beb0d92a908423f4d144873998044e6f41c01e16165873225d3678889 - languageName: node - linkType: hard - -"postcss-import@npm:^15.1.0": - version: 15.1.0 - resolution: "postcss-import@npm:15.1.0" - dependencies: - postcss-value-parser: "npm:^4.0.0" - read-cache: "npm:^1.0.0" - resolve: "npm:^1.1.7" - peerDependencies: - postcss: ^8.0.0 - checksum: 10/33c91b7e6b794b5c33d7d7d4730e5f0729c131d2de1ada7fcc116955625a78c3ce613983f019fa9447681795cf3f851e9c38dfbe3f48a2d08a8aef917c70a32a - languageName: node - linkType: hard - -"postcss-initial@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-initial@npm:4.0.1" - peerDependencies: - postcss: ^8.0.0 - checksum: 10/556848de52b502696f0a28153e14d35aca03aa702eacd742f0518a68dfca882654b600ba8742a28c6d1c378888cee767d87aec41ecd2880f8b83434df3f2b20e - languageName: node - linkType: hard - -"postcss-js@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-js@npm:4.0.1" - dependencies: - camelcase-css: "npm:^2.0.1" - peerDependencies: - postcss: ^8.4.21 - checksum: 10/ef2cfe8554daab4166cfcb290f376e7387964c36503f5bd42008778dba735685af8d4f5e0aba67cae999f47c855df40a1cd31ae840e0df320ded36352581045e - languageName: node - linkType: hard - -"postcss-lab-function@npm:^4.2.1": - version: 4.2.1 - resolution: "postcss-lab-function@npm:4.2.1" - dependencies: - "@csstools/postcss-progressive-custom-properties": "npm:^1.1.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/0cc25e4dec23a421da1a5652096c4114b2bf5df0a77ee27f1b579f0e7f3692137e1660d1b8d14f4208625f5e5ceb7ada5db67f75577d187879354733ee6fc3f2 - languageName: node - linkType: hard - -"postcss-load-config@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-load-config@npm:4.0.1" - dependencies: - lilconfig: "npm:^2.0.5" - yaml: "npm:^2.1.1" - peerDependencies: - postcss: ">=8.0.9" - ts-node: ">=9.0.0" - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - checksum: 10/d841565bc3638ae4b6854d3046904e054e76fca0aea5cf3e730b47e171e3e0a041ffc5f9b7348b18ea59c5d1e315944fa657b1cf9c573eecb053117b0d31eb8d - languageName: node - linkType: hard - -"postcss-loader@npm:^6.2.1": - version: 6.2.1 - resolution: "postcss-loader@npm:6.2.1" - dependencies: - cosmiconfig: "npm:^7.0.0" - klona: "npm:^2.0.5" - semver: "npm:^7.3.5" - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - checksum: 10/ab4e4ffa1903611a6ee63bd77ac0fd02b17cf472037a3d6050b383ab3b3def5e4c3a49de5bb552e020e70d2ebde95400f49e4c423ad2a1c76675afda8d627911 - languageName: node - linkType: hard - -"postcss-logical@npm:^5.0.4": - version: 5.0.4 - resolution: "postcss-logical@npm:5.0.4" - peerDependencies: - postcss: ^8.4 - checksum: 10/de03f1e3070c3fc9d8cb373481b34a911a795138159e74451dfd553155bec5c64d7eabb30b26f8840754960d10bf9e880223ce694dcd1ec5e7b3be3cfa6438e0 - languageName: node - linkType: hard - -"postcss-media-minmax@npm:^5.0.0": - version: 5.0.0 - resolution: "postcss-media-minmax@npm:5.0.0" - peerDependencies: - postcss: ^8.1.0 - checksum: 10/a35a25b944bb70583ef301ce98560b2a2062da25867f3bef5f7c62a8738b7924b78a2f7b293bba823ea4365c00e828680f51efad773f2e2cfcfa21f95282e0eb - languageName: node - linkType: hard - -"postcss-merge-longhand@npm:^5.1.7": - version: 5.1.7 - resolution: "postcss-merge-longhand@npm:5.1.7" - dependencies: - postcss-value-parser: "npm:^4.2.0" - stylehacks: "npm:^5.1.1" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/9002696bb245634c0542af9356b44082a4c1453261a1daac6ea2f85055a5d6e14ac3ae2ba603f5eae767ebfe0e1ef50c40447b099520b8f5fa14b557da8074ad - languageName: node - linkType: hard - -"postcss-merge-rules@npm:^5.1.4": - version: 5.1.4 - resolution: "postcss-merge-rules@npm:5.1.4" - dependencies: - browserslist: "npm:^4.21.4" - caniuse-api: "npm:^3.0.0" - cssnano-utils: "npm:^3.1.0" - postcss-selector-parser: "npm:^6.0.5" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/659c3eaff9d573f07c227a7e4811159898f49a89b02bbd3a65a0ed7aaa434264443ab539bcbc273bf08986e6a185bd62af0847c9836f9e2901c5f07937c14f3f - languageName: node - linkType: hard - -"postcss-minify-font-values@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-minify-font-values@npm:5.1.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/27e7023f06149e14db6cd30b75d233c92d34609233775d8542fe1dc70fe53170a13188ba80847d6d4f6e272beb98b9888e0f73097757a95a968a0d526e3dd495 - languageName: node - linkType: hard - -"postcss-minify-gradients@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-minify-gradients@npm:5.1.1" - dependencies: - colord: "npm:^2.9.1" - cssnano-utils: "npm:^3.1.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/8afc4c2240c0ddeb37b18f34e6d47d374c500376342c509b0fe577c56f9e94315a42db99a9573159efaf8853c7a1b9fee83b2f6f890a49273f3556b1ba9dbdde - languageName: node - linkType: hard - -"postcss-minify-params@npm:^5.1.4": - version: 5.1.4 - resolution: "postcss-minify-params@npm:5.1.4" - dependencies: - browserslist: "npm:^4.21.4" - cssnano-utils: "npm:^3.1.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/bd63e2cc89edcf357bb5c2a16035f6d02ef676b8cede4213b2bddd42626b3d428403849188f95576fc9f03e43ebd73a29bf61d33a581be9a510b13b7f7f100d5 - languageName: node - linkType: hard - -"postcss-minify-selectors@npm:^5.2.1": - version: 5.2.1 - resolution: "postcss-minify-selectors@npm:5.2.1" - dependencies: - postcss-selector-parser: "npm:^6.0.5" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/59eca33eb9ce45b688cca33cf7bb96b07c874f6d2b90f4a3363bc95067c514825c61dd8775c9aa73a161c922333474e6f249cc58677cd77b2be8cc04019e0810 - languageName: node - linkType: hard - -"postcss-modules-extract-imports@npm:^3.0.0": - version: 3.0.0 - resolution: "postcss-modules-extract-imports@npm:3.0.0" - peerDependencies: - postcss: ^8.1.0 - checksum: 10/8d68bb735cef4d43f9cdc1053581e6c1c864860b77fcfb670372b39c5feeee018dc5ddb2be4b07fef9bcd601edded4262418bbaeaf1bd4af744446300cebe358 - languageName: node - linkType: hard - -"postcss-modules-local-by-default@npm:^4.0.3": - version: 4.0.3 - resolution: "postcss-modules-local-by-default@npm:4.0.3" - dependencies: - icss-utils: "npm:^5.0.0" - postcss-selector-parser: "npm:^6.0.2" - postcss-value-parser: "npm:^4.1.0" - peerDependencies: - postcss: ^8.1.0 - checksum: 10/4f671d77cb6a025c8be09540fea00ce2d3dbf3375a3a15b48f927325c7418d7c3c87a83bacbf81c5de6ef8bd1660d5f6f2542b98de5877355a23b739379f8c79 - languageName: node - linkType: hard - -"postcss-modules-scope@npm:^3.0.0": - version: 3.0.0 - resolution: "postcss-modules-scope@npm:3.0.0" - dependencies: - postcss-selector-parser: "npm:^6.0.4" - peerDependencies: - postcss: ^8.1.0 - checksum: 10/cc36b8111c6160a1c21ca0e82de9daf0147be95f3b5403aedd83bcaee44ee425cb62b77f677fc53d0c8d51f7981018c1c8f0a4ad3d6f0138b09326ac48c2b297 - languageName: node - linkType: hard - -"postcss-modules-values@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-modules-values@npm:4.0.0" - dependencies: - icss-utils: "npm:^5.0.0" - peerDependencies: - postcss: ^8.1.0 - checksum: 10/18021961a494e69e65da9e42b4436144c9ecee65845c9bfeff2b7a26ea73d60762f69e288be8bb645447965b8fd6b26a264771136810dc0172bd31b940aee4f2 - languageName: node - linkType: hard - -"postcss-nested@npm:^6.0.1": - version: 6.0.1 - resolution: "postcss-nested@npm:6.0.1" - dependencies: - postcss-selector-parser: "npm:^6.0.11" - peerDependencies: - postcss: ^8.2.14 - checksum: 10/02aaac682f599879fae6aab3210aee59b8b5bde3ba242527f6fd103726955b74ffa05c2b765920be5f403e758045582534d11b1e19add01586c19743ed99e3fe - languageName: node - linkType: hard - -"postcss-nesting@npm:^10.2.0": - version: 10.2.0 - resolution: "postcss-nesting@npm:10.2.0" - dependencies: - "@csstools/selector-specificity": "npm:^2.0.0" - postcss-selector-parser: "npm:^6.0.10" - peerDependencies: - postcss: ^8.2 - checksum: 10/eb3531612243379ce43aeb864acc146b77fb61a3b34e8679b61226c3078f318a06def50c9468650e6eb904022d4de325e2555d09866ba893f413e4b0416059d8 - languageName: node - linkType: hard - -"postcss-normalize-charset@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-charset@npm:5.1.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/e79d92971fc05b8b3c9b72f3535a574e077d13c69bef68156a0965f397fdf157de670da72b797f57b0e3bac8f38155b5dd1735ecab143b9cc4032d72138193b4 - languageName: node - linkType: hard - -"postcss-normalize-display-values@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-display-values@npm:5.1.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/b6eb7b9b02c3bdd62bbc54e01e2b59733d73a1c156905d238e178762962efe0c6f5104544da39f32cade8a4fb40f10ff54b63a8ebfbdff51e8780afb9fbdcf86 - languageName: node - linkType: hard - -"postcss-normalize-positions@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-positions@npm:5.1.1" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/d9afc233729c496463c7b1cdd06732469f401deb387484c3a2422125b46ec10b4af794c101f8c023af56f01970b72b535e88373b9058ecccbbf88db81662b3c4 - languageName: node - linkType: hard - -"postcss-normalize-repeat-style@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-repeat-style@npm:5.1.1" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/2c6ad2b0ae10a1fda156b948c34f78c8f1e185513593de4d7e2480973586675520edfec427645fa168c337b0a6b3ceca26f92b96149741ca98a9806dad30d534 - languageName: node - linkType: hard - -"postcss-normalize-string@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-string@npm:5.1.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/227ddf520266d2f9847e799b9977aaa444636ba94e473137739539ef02e7cb6302826585ffda9897cfe2a9953e65632a08279cb1f572ca95e53d8b3dd6ba737f - languageName: node - linkType: hard - -"postcss-normalize-timing-functions@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-timing-functions@npm:5.1.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/da550f50e90b0b23e17b67449a7d1efd1aa68288e66d4aa7614ca6f5cc012896be1972b7168eee673d27da36504faccf7b9f835c0f7e81243f966a42c8c030aa - languageName: node - linkType: hard - -"postcss-normalize-unicode@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-unicode@npm:5.1.1" - dependencies: - browserslist: "npm:^4.21.4" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/4c24d26cc9f4b19a9397db4e71dd600dab690f1de8e14a3809e2aa1452dbc3791c208c38a6316bbc142f29e934fdf02858e68c94038c06174d78a4937e0f273c - languageName: node - linkType: hard - -"postcss-normalize-url@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-url@npm:5.1.0" - dependencies: - normalize-url: "npm:^6.0.1" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/3bd4b3246d6600230bc827d1760b24cb3101827ec97570e3016cbe04dc0dd28f4dbe763245d1b9d476e182c843008fbea80823061f1d2219b96f0d5c724a24c0 - languageName: node - linkType: hard - -"postcss-normalize-whitespace@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-whitespace@npm:5.1.1" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/12d8fb6d1c1cba208cc08c1830959b7d7ad447c3f5581873f7e185f99a9a4230c43d3af21ca12c818e4690a5085a95b01635b762ad4a7bef69d642609b4c0e19 - languageName: node - linkType: hard - -"postcss-normalize@npm:^10.0.1": - version: 10.0.1 - resolution: "postcss-normalize@npm:10.0.1" - dependencies: - "@csstools/normalize.css": "npm:*" - postcss-browser-comments: "npm:^4" - sanitize.css: "npm:*" - peerDependencies: - browserslist: ">= 4" - postcss: ">= 8" - checksum: 10/f2562ae30a75531436542cfd8ee5aec6c46f044cd410fed51d38dbecfc053f822ff5589687eeb1c0a1c5db3a16b25f6cebe0188c75be2cf4352d526212b760dc - languageName: node - linkType: hard - -"postcss-opacity-percentage@npm:^1.1.2": - version: 1.1.3 - resolution: "postcss-opacity-percentage@npm:1.1.3" - peerDependencies: - postcss: ^8.2 - checksum: 10/54d1b8ca68035bc1a5788aaabdbc3b66ffee34b5a2412cecf073627dad7e3f2bae07c01fac3bc7f46bbac5da3291ac9ddcf74bfee26dfd86f9f96c847a0afc13 - languageName: node - linkType: hard - -"postcss-ordered-values@npm:^5.1.3": - version: 5.1.3 - resolution: "postcss-ordered-values@npm:5.1.3" - dependencies: - cssnano-utils: "npm:^3.1.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/53dd26f480a18ffb0c008ae956d8a7e11e43c37629d0fb17a7716ff3b0cd8585f97e80deac12e7f3fe129681a980d83d356217b0b8fffb70ff83859993d6d82a - languageName: node - linkType: hard - -"postcss-overflow-shorthand@npm:^3.0.4": - version: 3.0.4 - resolution: "postcss-overflow-shorthand@npm:3.0.4" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/0a44a922f2bf3370cffef6f97954e17cf5f8690102093d7adf3600a47099c5babdc51d7cb309976cecbb7eb9f852a380319e4badd02f1caa4d5915c8ffc04b56 - languageName: node - linkType: hard - -"postcss-page-break@npm:^3.0.4": - version: 3.0.4 - resolution: "postcss-page-break@npm:3.0.4" - peerDependencies: - postcss: ^8 - checksum: 10/a7d08c945fc691f62c77ac701e64722218b14ec5c8fc1972b8af9c21553492d40808cf95e61b9697b1dacaf7e6180636876d7fee314f079e6c9e39ac1b1edc6f - languageName: node - linkType: hard - -"postcss-place@npm:^7.0.5": - version: 7.0.5 - resolution: "postcss-place@npm:7.0.5" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/a462b427c29e0276183aab717ef17893ac7fab3e0e5c459d4f54d24f936624bb71b3acc1660fd72be8bd0ecdb99ab99c40798d9846ad5a796cdc32e63ca06434 - languageName: node - linkType: hard - -"postcss-preset-env@npm:^7.0.1": - version: 7.8.3 - resolution: "postcss-preset-env@npm:7.8.3" - dependencies: - "@csstools/postcss-cascade-layers": "npm:^1.1.1" - "@csstools/postcss-color-function": "npm:^1.1.1" - "@csstools/postcss-font-format-keywords": "npm:^1.0.1" - "@csstools/postcss-hwb-function": "npm:^1.0.2" - "@csstools/postcss-ic-unit": "npm:^1.0.1" - "@csstools/postcss-is-pseudo-class": "npm:^2.0.7" - "@csstools/postcss-nested-calc": "npm:^1.0.0" - "@csstools/postcss-normalize-display-values": "npm:^1.0.1" - "@csstools/postcss-oklab-function": "npm:^1.1.1" - "@csstools/postcss-progressive-custom-properties": "npm:^1.3.0" - "@csstools/postcss-stepped-value-functions": "npm:^1.0.1" - "@csstools/postcss-text-decoration-shorthand": "npm:^1.0.0" - "@csstools/postcss-trigonometric-functions": "npm:^1.0.2" - "@csstools/postcss-unset-value": "npm:^1.0.2" - autoprefixer: "npm:^10.4.13" - browserslist: "npm:^4.21.4" - css-blank-pseudo: "npm:^3.0.3" - css-has-pseudo: "npm:^3.0.4" - css-prefers-color-scheme: "npm:^6.0.3" - cssdb: "npm:^7.1.0" - postcss-attribute-case-insensitive: "npm:^5.0.2" - postcss-clamp: "npm:^4.1.0" - postcss-color-functional-notation: "npm:^4.2.4" - postcss-color-hex-alpha: "npm:^8.0.4" - postcss-color-rebeccapurple: "npm:^7.1.1" - postcss-custom-media: "npm:^8.0.2" - postcss-custom-properties: "npm:^12.1.10" - postcss-custom-selectors: "npm:^6.0.3" - postcss-dir-pseudo-class: "npm:^6.0.5" - postcss-double-position-gradients: "npm:^3.1.2" - postcss-env-function: "npm:^4.0.6" - postcss-focus-visible: "npm:^6.0.4" - postcss-focus-within: "npm:^5.0.4" - postcss-font-variant: "npm:^5.0.0" - postcss-gap-properties: "npm:^3.0.5" - postcss-image-set-function: "npm:^4.0.7" - postcss-initial: "npm:^4.0.1" - postcss-lab-function: "npm:^4.2.1" - postcss-logical: "npm:^5.0.4" - postcss-media-minmax: "npm:^5.0.0" - postcss-nesting: "npm:^10.2.0" - postcss-opacity-percentage: "npm:^1.1.2" - postcss-overflow-shorthand: "npm:^3.0.4" - postcss-page-break: "npm:^3.0.4" - postcss-place: "npm:^7.0.5" - postcss-pseudo-class-any-link: "npm:^7.1.6" - postcss-replace-overflow-wrap: "npm:^4.0.0" - postcss-selector-not: "npm:^6.0.1" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2 - checksum: 10/e1f98019405b2f75d4e198ffa3be10ac99c2a2e0747d37ada548bc3ad6603370181045b43f55c4c79689ff5c25ff103f901eff07e12ba992e6fb015ea2eae748 - languageName: node - linkType: hard - -"postcss-pseudo-class-any-link@npm:^7.1.6": - version: 7.1.6 - resolution: "postcss-pseudo-class-any-link@npm:7.1.6" - dependencies: - postcss-selector-parser: "npm:^6.0.10" - peerDependencies: - postcss: ^8.2 - checksum: 10/2f2a6b35135033d02551ac7f260302cbe0fa306dc59428bb9a81dfc15d63093a24c3bb59a1e54d5a4661d2f4830aeaf9807d55e60d9027b9e4a378067b95a245 - languageName: node - linkType: hard - -"postcss-reduce-initial@npm:^5.1.2": - version: 5.1.2 - resolution: "postcss-reduce-initial@npm:5.1.2" - dependencies: - browserslist: "npm:^4.21.4" - caniuse-api: "npm:^3.0.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/6234a85dab32cc3ece384f62c761c5c0dd646e2c6a419d93ee7cdb78b657e43381df39bd4620dfbdc2157e44b51305e4ebe852259d12c8b435f1aa534548db3e - languageName: node - linkType: hard - -"postcss-reduce-transforms@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-reduce-transforms@npm:5.1.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/49fffd474070a154764934b42d7d875ceadf54219f8346b4cadf931728ffba6a2dea7532ced3d267fd42d81c102211a5bf957af3b63b1ac428d454fa6ec2dbf4 - languageName: node - linkType: hard - -"postcss-replace-overflow-wrap@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-replace-overflow-wrap@npm:4.0.0" - peerDependencies: - postcss: ^8.0.3 - checksum: 10/0629ec17deae65e27dc3059ecec1c6bc833ee65291093b476fce151ab0af45c9e1a56ce250eb9ec4bbc306c19ab318cc982fdbcca8651d347d7dfaa3c9fc9201 - languageName: node - linkType: hard - -"postcss-selector-not@npm:^6.0.1": - version: 6.0.1 - resolution: "postcss-selector-not@npm:6.0.1" - dependencies: - postcss-selector-parser: "npm:^6.0.10" - peerDependencies: - postcss: ^8.2 - checksum: 10/fe523a0219e4bd34f04498534bb9e8aec3193f3585eafe4c388d086955b41201cae71fd20980ca465acade7f182029b43dbd5ca7e9d50bf34bbcaf1d19fe3ee6 - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": - version: 6.0.13 - resolution: "postcss-selector-parser@npm:6.0.13" - dependencies: - cssesc: "npm:^3.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 10/e779aa1f8ca9ee45d562400aac6109a2bccc59559b6e15adec8bc2a71d395ca563a378fd68f6a61963b4ef2ca190e0c0486e6dc6c41d755f3b82dd6e480e6941 - languageName: node - linkType: hard - -"postcss-svgo@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-svgo@npm:5.1.0" - dependencies: - postcss-value-parser: "npm:^4.2.0" - svgo: "npm:^2.7.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/d86eb5213d9f700cf5efe3073799b485fb7cacae0c731db3d7749c9c2b1c9bc85e95e0baeca439d699ff32ea24815fc916c4071b08f67ed8219df229ce1129bd - languageName: node - linkType: hard - -"postcss-unique-selectors@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-unique-selectors@npm:5.1.1" - dependencies: - postcss-selector-parser: "npm:^6.0.5" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/637e7b786e8558265775c30400c54b6b3b24d4748923f4a39f16a65fd0e394f564ccc9f0a1d3c0e770618a7637a7502ea1d0d79f731d429cb202255253c23278 - languageName: node - linkType: hard - -"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.0.2, postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": - version: 4.2.0 - resolution: "postcss-value-parser@npm:4.2.0" - checksum: 10/e4e4486f33b3163a606a6ed94f9c196ab49a37a7a7163abfcd469e5f113210120d70b8dd5e33d64636f41ad52316a3725655421eb9a1094f1bcab1db2f555c62 - languageName: node - linkType: hard - -"postcss@npm:8.4.31": - version: 8.4.31 - resolution: "postcss@npm:8.4.31" - dependencies: - nanoid: "npm:^3.3.6" - picocolors: "npm:^1.0.0" - source-map-js: "npm:^1.0.2" - checksum: 10/1a6653e72105907377f9d4f2cd341d8d90e3fde823a5ddea1e2237aaa56933ea07853f0f2758c28892a1d70c53bbaca200eb8b80f8ed55f13093003dbec5afa0 - languageName: node - linkType: hard - -"postcss@npm:8.4.38": - version: 8.4.38 - resolution: "postcss@npm:8.4.38" - dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.0" - source-map-js: "npm:^1.2.0" - checksum: 10/6e44a7ed835ffa9a2b096e8d3e5dfc6bcf331a25c48aeb862dd54e3aaecadf814fa22be224fd308f87d08adf2299164f88c5fd5ab1c4ef6cbd693ceb295377f4 - languageName: node - linkType: hard - -"postcss@npm:^7.0.35, postcss@npm:^7.0.36": - version: 7.0.39 - resolution: "postcss@npm:7.0.39" - dependencies: - picocolors: "npm:^0.2.1" - source-map: "npm:^0.6.1" - checksum: 10/9635b3a444673d1e50ea67c68382201346b54d7bb69729fff5752a794d57ca5cae7f6fafd4157a9ab7f9ddac30a0d5e548c1196653468cbae3c2758dbc2f5662 - languageName: node - linkType: hard - -"postcss@npm:^8.3.5, postcss@npm:^8.4.14, postcss@npm:^8.4.21, postcss@npm:^8.4.23, postcss@npm:^8.4.4, postcss@npm:^8.4.43": - version: 8.4.47 - resolution: "postcss@npm:8.4.47" - dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.1.0" - source-map-js: "npm:^1.2.1" - checksum: 10/f2b50ba9b6fcb795232b6bb20de7cdc538c0025989a8ed9c4438d1960196ba3b7eaff41fdb1a5c701b3504651ea87aeb685577707f0ae4d6ce6f3eae5df79a81 - languageName: node - linkType: hard - -"preact@npm:^10.16.0, preact@npm:^10.24.2": - version: 10.24.3 - resolution: "preact@npm:10.24.3" - checksum: 10/e9c4c901a4ddd475a1072355b5c6c944b05797445e0d68f317ad0dbc976b831523573693ea75d2e12e7902042e3729af435377816d25558bf693ecf6b516c707 - languageName: node - linkType: hard - -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: 10/0b9d2c76801ca652a7f64892dd37b7e3fab149a37d2424920099bf894acccc62abb4424af2155ab36dea8744843060a2d8ddc983518d0b1e22265a22324b72ed - languageName: node - linkType: hard - -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: 10/946a9f60d3477ca6b7d4c5e8e452ad1b98dc8aaa992cea939a6b926ac16cc4129d7217c79271dc808b5814b1537ad0af37f29a942e2eafbb92cfc5a1c87c38cb - languageName: node - linkType: hard - -"prettier-linter-helpers@npm:^1.0.0": - version: 1.0.0 - resolution: "prettier-linter-helpers@npm:1.0.0" - dependencies: - fast-diff: "npm:^1.1.2" - checksum: 10/00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 - languageName: node - linkType: hard - -"prettier-plugin-solidity@npm:^1.4.1, prettier-plugin-solidity@npm:^1.4.2": - version: 1.4.2 - resolution: "prettier-plugin-solidity@npm:1.4.2" - dependencies: - "@solidity-parser/parser": "npm:^0.19.0" - semver: "npm:^7.6.3" - peerDependencies: - prettier: ">=2.3.0" - checksum: 10/5f4ca400275c860bbca7ba3ee316682bec04a760a816e903f6a528acc61ef3d2eda9a81edb7e38449b79196d2946db44424fbab78944d2e8bb32f8fed31363bc - languageName: node - linkType: hard - -"prettier@npm:3.4.2": - version: 3.4.2 - resolution: "prettier@npm:3.4.2" - bin: - prettier: bin/prettier.cjs - checksum: 10/a3e806fb0b635818964d472d35d27e21a4e17150c679047f5501e1f23bd4aa806adf660f0c0d35214a210d5d440da6896c2e86156da55f221a57938278dc326e - languageName: node - linkType: hard - -"prettier@npm:^1.18.2 || ^2.0.0, prettier@npm:^2.3.1, prettier@npm:^2.7.1, prettier@npm:^2.8.3": - version: 2.8.8 - resolution: "prettier@npm:2.8.8" - bin: - prettier: bin-prettier.js - checksum: 10/00cdb6ab0281f98306cd1847425c24cbaaa48a5ff03633945ab4c701901b8e96ad558eb0777364ffc312f437af9b5a07d0f45346266e8245beaf6247b9c62b24 - languageName: node - linkType: hard - -"prettier@npm:^3.0.3, prettier@npm:^3.3.3": - version: 3.3.3 - resolution: "prettier@npm:3.3.3" - bin: - prettier: bin/prettier.cjs - checksum: 10/5beac1f30b5b40162532b8e2f7c3a4eb650910a2695e9c8512a62ffdc09dae93190c29db9107fa7f26d1b6c71aad3628ecb9b5de1ecb0911191099be109434d7 - languageName: node - linkType: hard - -"pretty-bytes@npm:^5.3.0, pretty-bytes@npm:^5.4.1": - version: 5.6.0 - resolution: "pretty-bytes@npm:5.6.0" - checksum: 10/9c082500d1e93434b5b291bd651662936b8bd6204ec9fa17d563116a192d6d86b98f6d328526b4e8d783c07d5499e2614a807520249692da9ec81564b2f439cd - languageName: node - linkType: hard - -"pretty-error@npm:^4.0.0": - version: 4.0.0 - resolution: "pretty-error@npm:4.0.0" - dependencies: - lodash: "npm:^4.17.20" - renderkid: "npm:^3.0.0" - checksum: 10/0212ad8742f8bb6f412f95b07d7f6874c55514ac4384f4f7de0defe77e767cca99f667c2316529f62a041fa654194a99c1ee7e321e1b7f794b5cc700777634d6 - languageName: node - linkType: hard - -"pretty-format@npm:^27.5.1": - version: 27.5.1 - resolution: "pretty-format@npm:27.5.1" - dependencies: - ansi-regex: "npm:^5.0.1" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^17.0.1" - checksum: 10/248990cbef9e96fb36a3e1ae6b903c551ca4ddd733f8d0912b9cc5141d3d0b3f9f8dfb4d799fb1c6723382c9c2083ffbfa4ad43ff9a0e7535d32d41fd5f01da6 - languageName: node - linkType: hard - -"pretty-format@npm:^28.1.3": - version: 28.1.3 - resolution: "pretty-format@npm:28.1.3" - dependencies: - "@jest/schemas": "npm:^28.1.3" - ansi-regex: "npm:^5.0.1" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^18.0.0" - checksum: 10/26626d33e201388174a1ce352be46b8087f28184bf3684a88b2f7cf633e28419ffc664628eec261ba13b0f03748c3a6f85db063a2022f75a354c7b9e4e06526b - languageName: node - linkType: hard - -"pretty-format@npm:^29.7.0": - version: 29.7.0 - resolution: "pretty-format@npm:29.7.0" - dependencies: - "@jest/schemas": "npm:^29.6.3" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^18.0.0" - checksum: 10/dea96bc83c83cd91b2bfc55757b6b2747edcaac45b568e46de29deee80742f17bc76fe8898135a70d904f4928eafd8bb693cd1da4896e8bdd3c5e82cadf1d2bb - languageName: node - linkType: hard - -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 10/1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf - languageName: node - linkType: hard - -"process-warning@npm:^1.0.0": - version: 1.0.0 - resolution: "process-warning@npm:1.0.0" - checksum: 10/8736d11d8d71c349d176e210305e84d74b13af06efb3c779377b056bfd608257d1e4e32b8fbbf90637c900f0313e40f7c9f583140884f667a21fc10a869b840c - languageName: node - linkType: hard - -"process-warning@npm:^3.0.0": - version: 3.0.0 - resolution: "process-warning@npm:3.0.0" - checksum: 10/2d82fa641e50a5789eaf0f2b33453760996e373d4591aac576a22d696186ab7e240a0592db86c264d4f28a46c2abbe9b94689752017db7dadc90f169f12b0924 - languageName: node - linkType: hard - -"process@npm:^0.11.10": - version: 0.11.10 - resolution: "process@npm:0.11.10" - checksum: 10/dbaa7e8d1d5cf375c36963ff43116772a989ef2bb47c9bdee20f38fd8fc061119cf38140631cf90c781aca4d3f0f0d2c834711952b728953f04fd7d238f59f5b - languageName: node - linkType: hard - -"progress-events@npm:^1.0.0": - version: 1.0.0 - resolution: "progress-events@npm:1.0.0" - checksum: 10/fa5a17a54566a4cb6432d0b65df9d844939fab9ec77a0c57f939dd9dc3fd2d450cd4c8de8b44da667f163274763d98f149fb2e6fef4c4746f1713678e1617fe8 - languageName: node - linkType: hard - -"progress-events@npm:^1.0.1": - version: 1.0.1 - resolution: "progress-events@npm:1.0.1" - checksum: 10/21e8ba984e6c6f6764279fabdf7b34d8110c1720757360fc8cad56b1622e67857fe543619652b64cee51a880a2a4a5febdcb4ff86e4c2969ed90048e2264f42f - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: "npm:^2.0.2" - retry: "npm:^0.12.0" - checksum: 10/96e1a82453c6c96eef53a37a1d6134c9f2482f94068f98a59145d0986ca4e497bf110a410adf73857e588165eab3899f0ebcf7b3890c1b3ce802abc0d65967d4 - languageName: node - linkType: hard - -"promise@npm:^7.1.1": - version: 7.3.1 - resolution: "promise@npm:7.3.1" - dependencies: - asap: "npm:~2.0.3" - checksum: 10/37dbe58ca7b0716cc881f0618128f1fd6ff9c46cdc529a269fd70004e567126a449a94e9428e2d19b53d06182d11b45d0c399828f103e06b2bb87643319bd2e7 - languageName: node - linkType: hard - -"promise@npm:^8.1.0": - version: 8.3.0 - resolution: "promise@npm:8.3.0" - dependencies: - asap: "npm:~2.0.6" - checksum: 10/55e9d0d723c66810966bc055c6c77a3658c0af7e4a8cc88ea47aeaf2949ca0bd1de327d9c631df61236f5406ad478384fa19a77afb3f88c0303eba9e5eb0a8d8 - languageName: node - linkType: hard - -"prompts@npm:^2.0.1, prompts@npm:^2.4.2": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" - dependencies: - kleur: "npm:^3.0.3" - sisteransi: "npm:^1.0.5" - checksum: 10/c52536521a4d21eff4f2f2aa4572446cad227464066365a7167e52ccf8d9839c099f9afec1aba0eed3d5a2514b3e79e0b3e7a1dc326b9acde6b75d27ed74b1a9 - languageName: node - linkType: hard - -"prop-types@npm:^15.0.0, prop-types@npm:^15.6.1, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": - version: 15.8.1 - resolution: "prop-types@npm:15.8.1" - dependencies: - loose-envify: "npm:^1.4.0" - object-assign: "npm:^4.1.1" - react-is: "npm:^16.13.1" - checksum: 10/7d959caec002bc964c86cdc461ec93108b27337dabe6192fb97d69e16a0c799a03462713868b40749bfc1caf5f57ef80ac3e4ffad3effa636ee667582a75e2c0 - languageName: node - linkType: hard - -"proper-lockfile@npm:^4.1.1": - version: 4.1.2 - resolution: "proper-lockfile@npm:4.1.2" - dependencies: - graceful-fs: "npm:^4.2.4" - retry: "npm:^0.12.0" - signal-exit: "npm:^3.0.2" - checksum: 10/000a4875f543f591872b36ca94531af8a6463ddb0174f41c0b004d19e231d7445268b422ff1ea595e43d238655c702250cd3d27f408e7b9d97b56f1533ba26bf - languageName: node - linkType: hard - -"property-information@npm:^6.0.0": - version: 6.2.0 - resolution: "property-information@npm:6.2.0" - checksum: 10/ae44c93979957f4dd0c1a8ee230971c5f190bb2cb36a8a4a0548b2f8df488bfacc34d8c35d3c8c2a61c8fd08aa09d75ca68fc0bcda758cfa257590744b99b514 - languageName: node - linkType: hard - -"proto-list@npm:~1.2.1": - version: 1.2.4 - resolution: "proto-list@npm:1.2.4" - checksum: 10/9cc3b46d613fa0d637033b225db1bc98e914c3c05864f7adc9bee728192e353125ef2e49f71129a413f6333951756000b0e54f299d921f02d3e9e370cc994100 - languageName: node - linkType: hard - -"protons-runtime@npm:^5.5.0": - version: 5.5.0 - resolution: "protons-runtime@npm:5.5.0" - dependencies: - uint8-varint: "npm:^2.0.2" - uint8arraylist: "npm:^2.4.3" - uint8arrays: "npm:^5.0.1" - checksum: 10/ce31ed658c33f4e2c38102000434a778563ce91cfba1e6e1dcbf4fa7a2a9110cd8f4cecb7076a925e03aaac4e43f649b282c2f7cdeac2f6e723e0a0660c721db - languageName: node - linkType: hard - -"proxy-addr@npm:~2.0.7": - version: 2.0.7 - resolution: "proxy-addr@npm:2.0.7" - dependencies: - forwarded: "npm:0.2.0" - ipaddr.js: "npm:1.9.1" - checksum: 10/f24a0c80af0e75d31e3451398670d73406ec642914da11a2965b80b1898ca6f66a0e3e091a11a4327079b2b268795f6fa06691923fef91887215c3d0e8ea3f68 - languageName: node - linkType: hard - -"proxy-compare@npm:2.5.1": - version: 2.5.1 - resolution: "proxy-compare@npm:2.5.1" - checksum: 10/64b6277d08d89f0b2c468a84decf43f82a4e88da7075651e6adebc69d1b87fadc17cfeb43c024c00b65faa3f0908f7ac1e61f5f6849a404a547a742e6aa527a6 - languageName: node - linkType: hard - -"proxy-compare@npm:2.6.0": - version: 2.6.0 - resolution: "proxy-compare@npm:2.6.0" - checksum: 10/c7fc9e50873f01bd79bf68ed861f740891d6c590332954b9522479a5c7d598a62225fdfa8a42460d9be5bc7a78c28377839d9d06fbced26cae62332c4410b81a - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10/f0bb4a87cfd18f77bc2fba23ae49c3b378fb35143af16cc478171c623eebe181678f09439707ad80081d340d1593cd54a33a0113f3ccb3f4bc9451488780ee23 - languageName: node - linkType: hard - -"pseudomap@npm:^1.0.2": - version: 1.0.2 - resolution: "pseudomap@npm:1.0.2" - checksum: 10/856c0aae0ff2ad60881168334448e898ad7a0e45fe7386d114b150084254c01e200c957cf378378025df4e052c7890c5bd933939b0e0d2ecfcc1dc2f0b2991f5 - languageName: node - linkType: hard - -"psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 10/d07879d4bfd0ac74796306a8e5a36a93cfb9c4f4e8ee8e63fbb909066c192fe1008cd8f12abd8ba2f62ca28247949a20c8fb32e1d18831d9e71285a1569720f9 - languageName: node - linkType: hard - -"public-encrypt@npm:^4.0.3": - version: 4.0.3 - resolution: "public-encrypt@npm:4.0.3" - dependencies: - bn.js: "npm:^4.1.0" - browserify-rsa: "npm:^4.0.0" - create-hash: "npm:^1.1.0" - parse-asn1: "npm:^5.0.0" - randombytes: "npm:^2.0.1" - safe-buffer: "npm:^5.1.2" - checksum: 10/059d64da8ba9ea0733377d23b57b6cbe5be663c8eb187b9c051eec85f799ff95c4e194eb3a69db07cc1f73a2a63519e67716ae9b8630e13e7149840d0abe044d - languageName: node - linkType: hard - -"pump@npm:^3.0.0": - version: 3.0.0 - resolution: "pump@npm:3.0.0" - dependencies: - end-of-stream: "npm:^1.1.0" - once: "npm:^1.3.1" - checksum: 10/e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 - languageName: node - linkType: hard - -"punycode@npm:^1.4.1": - version: 1.4.1 - resolution: "punycode@npm:1.4.1" - checksum: 10/af2700dde1a116791ff8301348ff344c47d6c224e875057237d1b5112035655fb07a6175cfdb8bf0e3a8cdfd2dc82b3a622e0aefd605566c0e949a6d0d1256a4 - languageName: node - linkType: hard - -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": - version: 2.3.0 - resolution: "punycode@npm:2.3.0" - checksum: 10/d4e7fbb96f570c57d64b09a35a1182c879ac32833de7c6926a2c10619632c1377865af3dab5479f59d51da18bcd5035a20a5ef6ceb74020082a3e78025d9a9ca - languageName: node - linkType: hard - -"pvtsutils@npm:^1.3.2": - version: 1.3.2 - resolution: "pvtsutils@npm:1.3.2" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/3e89fea1836dd9027446d65923f7240372a1040b777b2e6adfc319bfeb3cacfd56dccb708652651e85ad6a5c87f61728b697226c105d441140b648f3e4167872 - languageName: node - linkType: hard - -"pvutils@npm:^1.1.3": - version: 1.1.3 - resolution: "pvutils@npm:1.1.3" - checksum: 10/e5201b8f78ece68eae414a938c844bc45fb3f0de298178eed1775a217eedfd897c4346e5e54f410bb4d7466e09ceb262e85f20fd64239b8bb2595f14c52fa95e - languageName: node - linkType: hard - -"q@npm:^1.1.2, q@npm:^1.5.1": - version: 1.5.1 - resolution: "q@npm:1.5.1" - checksum: 10/70c4a30b300277165cd855889cd3aa681929840a5940413297645c5691e00a3549a2a4153131efdf43fe8277ee8cf5a34c9636dcb649d83ad47f311a015fd380 - languageName: node - linkType: hard - -"qrcode@npm:1.5.3": - version: 1.5.3 - resolution: "qrcode@npm:1.5.3" - dependencies: - dijkstrajs: "npm:^1.0.1" - encode-utf8: "npm:^1.0.3" - pngjs: "npm:^5.0.0" - yargs: "npm:^15.3.1" - bin: - qrcode: bin/qrcode - checksum: 10/823642d59a81ba5f406a1e78415fee37fd53856038f49a85c4ca7aa32ba6b8505ab059a832718ac16612bed75aa2a18584faae38cf3c25e2c90fb19b8c55fe46 - languageName: node - linkType: hard - -"qrcode@npm:^1.5.4": - version: 1.5.4 - resolution: "qrcode@npm:1.5.4" - dependencies: - dijkstrajs: "npm:^1.0.1" - pngjs: "npm:^5.0.0" - yargs: "npm:^15.3.1" - bin: - qrcode: bin/qrcode - checksum: 10/9a1b61760e4ea334545a0f54bbc11c537aba0a17cf52cab9fa1b07f8a1337eed0bc6f7fde41b197f2c82c249bc48728983bfaf861bb7ecb29dc597b2ae33c424 - languageName: node - linkType: hard - -"qs@npm:6.11.0": - version: 6.11.0 - resolution: "qs@npm:6.11.0" - dependencies: - side-channel: "npm:^1.0.4" - checksum: 10/5a3bfea3e2f359ede1bfa5d2f0dbe54001aa55e40e27dc3e60fab814362d83a9b30758db057c2011b6f53a2d4e4e5150194b5bac45372652aecb3e3c0d4b256e - languageName: node - linkType: hard - -"qs@npm:^6.11.2": - version: 6.12.1 - resolution: "qs@npm:6.12.1" - dependencies: - side-channel: "npm:^1.0.6" - checksum: 10/035bcad2a1ab0175bac7a74c904c15913bdac252834149ccff988c93a51de02642fe7be10e43058ba4dc4094bb28ce9b59d12b9e91d40997f445cfde3ecc1c29 - languageName: node - linkType: hard - -"query-string@npm:7.1.3": - version: 7.1.3 - resolution: "query-string@npm:7.1.3" - dependencies: - decode-uri-component: "npm:^0.2.2" - filter-obj: "npm:^1.1.0" - split-on-first: "npm:^1.0.0" - strict-uri-encode: "npm:^2.0.0" - checksum: 10/3b6f2c167e76ca4094c5f1a9eb276efcbb9ebfd8b1a28c413f3c4e4e7d6428c8187bf46c8cbc9f92a229369dd0015de10a7fd712c8cee98d5d84c2ac6140357e - languageName: node - linkType: hard - -"querystring-es3@npm:^0.2.1": - version: 0.2.1 - resolution: "querystring-es3@npm:0.2.1" - checksum: 10/c99fccfe1a9c4c25ea6194fa7a559fdb83d2628f118f898af6f0ac02c4ffcd7e0576997bb80e7dfa892d193988b60e23d4968122426351819f87051862af991c - languageName: node - linkType: hard - -"querystringify@npm:^2.1.1": - version: 2.2.0 - resolution: "querystringify@npm:2.2.0" - checksum: 10/46ab16f252fd892fc29d6af60966d338cdfeea68a231e9457631ffd22d67cec1e00141e0a5236a2eb16c0d7d74175d9ec1d6f963660c6f2b1c2fc85b194c5680 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10/72900df0616e473e824202113c3df6abae59150dfb73ed13273503127235320e9c8ca4aaaaccfd58cf417c6ca92a6e68ee9a5c3182886ae949a768639b388a7b - languageName: node - linkType: hard - -"quick-format-unescaped@npm:^4.0.3": - version: 4.0.4 - resolution: "quick-format-unescaped@npm:4.0.4" - checksum: 10/591eca457509a99368b623db05248c1193aa3cedafc9a077d7acab09495db1231017ba3ad1b5386e5633271edd0a03b312d8640a59ee585b8516a42e15438aa7 - languageName: node - linkType: hard - -"quick-lru@npm:^4.0.1": - version: 4.0.1 - resolution: "quick-lru@npm:4.0.1" - checksum: 10/5c7c75f1c696750f619b165cc9957382f919e4207dabf04597a64f0298861391cdc5ee91a1dde1a5d460ecf7ee1af7fc36fef6d155bef2be66f05d43fd63d4f0 - languageName: node - linkType: hard - -"quick-lru@npm:^5.1.1": - version: 5.1.1 - resolution: "quick-lru@npm:5.1.1" - checksum: 10/a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed - languageName: node - linkType: hard - -"radix3@npm:^1.1.0": - version: 1.1.0 - resolution: "radix3@npm:1.1.0" - checksum: 10/311258ec9e8cc17613fd31aaf3138bfb2ab1ea015738e91591920961f74a1914491338554e8530f7902f1629b6c2ea2dfd66a5c068f14b76cf6535b68b5292c4 - languageName: node - linkType: hard - -"raf@npm:^3.4.1": - version: 3.4.1 - resolution: "raf@npm:3.4.1" - dependencies: - performance-now: "npm:^2.1.0" - checksum: 10/4c4b4c826b09d2aec6ca809f1a3c3c12136e7ec8d13fbb91f495dd2c99cd43345240e003da3bfd16036a432e635049fc6d9f69f9187f5f22ea88bb146ec75881 - languageName: node - linkType: hard - -"railroad-diagrams@npm:^1.0.0": - version: 1.0.0 - resolution: "railroad-diagrams@npm:1.0.0" - checksum: 10/5349cf7a27f28c2cd152b525964624e0d0a795ab062d01682084381570fbb07ab877035771bcfb27cd5b6a7ee9f8371ecc34ccc8c3bde3443676230a59a7a85e - languageName: node - linkType: hard - -"randexp@npm:0.4.6": - version: 0.4.6 - resolution: "randexp@npm:0.4.6" - dependencies: - discontinuous-range: "npm:1.0.0" - ret: "npm:~0.1.10" - checksum: 10/ae6d213ec8018b2d22960d2b73ee7a4e25f85050a11dc485b6d3a06ace318ca567353b1d75d8d11f529b7ed6bdeb52644b789307ef42812bf5da2ade4f85e113 - languageName: node - linkType: hard - -"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": - version: 2.1.0 - resolution: "randombytes@npm:2.1.0" - dependencies: - safe-buffer: "npm:^5.1.0" - checksum: 10/4efd1ad3d88db77c2d16588dc54c2b52fd2461e70fe5724611f38d283857094fe09040fa2c9776366803c3152cf133171b452ef717592b65631ce5dc3a2bdafc - languageName: node - linkType: hard - -"randomfill@npm:^1.0.4": - version: 1.0.4 - resolution: "randomfill@npm:1.0.4" - dependencies: - randombytes: "npm:^2.0.5" - safe-buffer: "npm:^5.1.0" - checksum: 10/33734bb578a868d29ee1b8555e21a36711db084065d94e019a6d03caa67debef8d6a1bfd06a2b597e32901ddc761ab483a85393f0d9a75838f1912461d4dbfc7 - languageName: node - linkType: hard - -"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": - version: 1.2.1 - resolution: "range-parser@npm:1.2.1" - checksum: 10/ce21ef2a2dd40506893157970dc76e835c78cf56437e26e19189c48d5291e7279314477b06ac38abd6a401b661a6840f7b03bd0b1249da9b691deeaa15872c26 - languageName: node - linkType: hard - -"raw-body@npm:2.5.1": - version: 2.5.1 - resolution: "raw-body@npm:2.5.1" - dependencies: - bytes: "npm:3.1.2" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - unpipe: "npm:1.0.0" - checksum: 10/280bedc12db3490ecd06f740bdcf66093a07535374b51331242382c0e130bb273ebb611b7bc4cba1b4b4e016cc7b1f4b05a6df885a6af39c2bc3b94c02291c84 - languageName: node - linkType: hard - -"raw-body@npm:^2.4.1": - version: 2.5.2 - resolution: "raw-body@npm:2.5.2" - dependencies: - bytes: "npm:3.1.2" - http-errors: "npm:2.0.0" - iconv-lite: "npm:0.4.24" - unpipe: "npm:1.0.0" - checksum: 10/863b5171e140546a4d99f349b720abac4410338e23df5e409cfcc3752538c9caf947ce382c89129ba976f71894bd38b5806c774edac35ebf168d02aa1ac11a95 - languageName: node - linkType: hard - -"rc-align@npm:^4.0.0": - version: 4.0.15 - resolution: "rc-align@npm:4.0.15" - dependencies: - "@babel/runtime": "npm:^7.10.1" - classnames: "npm:2.x" - dom-align: "npm:^1.7.0" - rc-util: "npm:^5.26.0" - resize-observer-polyfill: "npm:^1.5.1" - peerDependencies: - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 10/de1af4a58a371bc01cf5f327ce82b5e5631960c3e2dbae03532081e63bf86a809cebf9b8a231495db1dc659c28b6dbb35b0b33f2c29579b8b068388c1288c1b1 - languageName: node - linkType: hard - -"rc-motion@npm:^2.0.0": - version: 2.7.3 - resolution: "rc-motion@npm:2.7.3" - dependencies: - "@babel/runtime": "npm:^7.11.1" - classnames: "npm:^2.2.1" - rc-util: "npm:^5.21.0" - peerDependencies: - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 10/81766280ab39a0be91f18f2171bc005fcf8c58f0e5789459031bd11da26ad0d86fc4e86ed39dea6b7e0bcc4224fef60955615129a0ce5102aaa9b68e3266e57b - languageName: node - linkType: hard - -"rc-slider@npm:^9.7.5": - version: 9.7.5 - resolution: "rc-slider@npm:9.7.5" - dependencies: - "@babel/runtime": "npm:^7.10.1" - classnames: "npm:^2.2.5" - rc-tooltip: "npm:^5.0.1" - rc-util: "npm:^5.16.1" - shallowequal: "npm:^1.1.0" - peerDependencies: - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 10/500649e4d4d87bf3adb8a4318dddf095fffa46e8693a59a6ee7cc6d9c86bb76cedd83e4c4c9222b84419a5d86d69c16078aded06463139f58bfaff5fc6b3d868 - languageName: node - linkType: hard - -"rc-tooltip@npm:^5.0.1": - version: 5.3.1 - resolution: "rc-tooltip@npm:5.3.1" - dependencies: - "@babel/runtime": "npm:^7.11.2" - classnames: "npm:^2.3.1" - rc-trigger: "npm:^5.3.1" - peerDependencies: - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 10/c7627fbfae753a0e73548d1f93329a5132d76727f737d4eedc5a142f2950986f429dae11b5d8bc13f39bd72a631a22cb32f3b8aaad83bfdde770c19e220708bf - languageName: node - linkType: hard - -"rc-trigger@npm:^5.3.1": - version: 5.3.4 - resolution: "rc-trigger@npm:5.3.4" - dependencies: - "@babel/runtime": "npm:^7.18.3" - classnames: "npm:^2.2.6" - rc-align: "npm:^4.0.0" - rc-motion: "npm:^2.0.0" - rc-util: "npm:^5.19.2" - peerDependencies: - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 10/32e0a3083ecea27b44d47c8638e399fadab658fe48a526b0f072011acd99f5b26871a9b3c07fc7f121ddbec900e41bf3eb9085a7be18aa66007aae7fd311b1f9 - languageName: node - linkType: hard - -"rc-util@npm:^5.16.1, rc-util@npm:^5.19.2, rc-util@npm:^5.21.0, rc-util@npm:^5.26.0": - version: 5.33.1 - resolution: "rc-util@npm:5.33.1" - dependencies: - "@babel/runtime": "npm:^7.18.3" - react-is: "npm:^16.12.0" - peerDependencies: - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 10/d940e84905b8c748d09a41c308a17597a090ca56bbbc43bc686e6eb3eed2c7aab6494afdc19c8958b4f4ab41f59da3e176faf596cfab697d8a69b24a7c304f31 - languageName: node - linkType: hard - -"rc@npm:1.2.8": - version: 1.2.8 - resolution: "rc@npm:1.2.8" - dependencies: - deep-extend: "npm:^0.6.0" - ini: "npm:~1.3.0" - minimist: "npm:^1.2.0" - strip-json-comments: "npm:~2.0.1" - bin: - rc: ./cli.js - checksum: 10/5c4d72ae7eec44357171585938c85ce066da8ca79146b5635baf3d55d74584c92575fa4e2c9eac03efbed3b46a0b2e7c30634c012b4b4fa40d654353d3c163eb - languageName: node - linkType: hard - -"react-app-polyfill@npm:^3.0.0": - version: 3.0.0 - resolution: "react-app-polyfill@npm:3.0.0" - dependencies: - core-js: "npm:^3.19.2" - object-assign: "npm:^4.1.1" - promise: "npm:^8.1.0" - raf: "npm:^3.4.1" - regenerator-runtime: "npm:^0.13.9" - whatwg-fetch: "npm:^3.6.2" - checksum: 10/c544a1d9f5b3e4df1f51a01ceaa21d1350016520d0caf67549239ce112ea00b6014612f756e576609b986abe6eca1bb4f2625608bb9ae4501b74ca4398874be3 - languageName: node - linkType: hard - -"react-chartjs-2@npm:^4.3.1": - version: 4.3.1 - resolution: "react-chartjs-2@npm:4.3.1" - peerDependencies: - chart.js: ^3.5.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/3effd004d8d4194f3dc7adf41fe967cdbe615300c7b93b0528f41cf795640ea1567112637d30fc485fbbda98f9fc6e16ec3629ed748b5006180f1d4f099de645 - languageName: node - linkType: hard - -"react-dev-utils@npm:^12.0.1": - version: 12.0.1 - resolution: "react-dev-utils@npm:12.0.1" - dependencies: - "@babel/code-frame": "npm:^7.16.0" - address: "npm:^1.1.2" - browserslist: "npm:^4.18.1" - chalk: "npm:^4.1.2" - cross-spawn: "npm:^7.0.3" - detect-port-alt: "npm:^1.1.6" - escape-string-regexp: "npm:^4.0.0" - filesize: "npm:^8.0.6" - find-up: "npm:^5.0.0" - fork-ts-checker-webpack-plugin: "npm:^6.5.0" - global-modules: "npm:^2.0.0" - globby: "npm:^11.0.4" - gzip-size: "npm:^6.0.0" - immer: "npm:^9.0.7" - is-root: "npm:^2.1.0" - loader-utils: "npm:^3.2.0" - open: "npm:^8.4.0" - pkg-up: "npm:^3.1.0" - prompts: "npm:^2.4.2" - react-error-overlay: "npm:^6.0.11" - recursive-readdir: "npm:^2.2.2" - shell-quote: "npm:^1.7.3" - strip-ansi: "npm:^6.0.1" - text-table: "npm:^0.2.0" - checksum: 10/4f6e04a3c4c6bc041bb85586646cff5e611049dd91f505e73cec47e284a854f28a25a4f50ff24b46e7df051b2a82c387870c8e08da232edbbbb36c01d4e94a2b - languageName: node - linkType: hard - -"react-dom@npm:^18.0.0, react-dom@npm:^18.3.1": - version: 18.3.1 - resolution: "react-dom@npm:18.3.1" - dependencies: - loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.2" - peerDependencies: - react: ^18.3.1 - checksum: 10/3f4b73a3aa083091173b29812b10394dd06f4ac06aff410b74702cfb3aa29d7b0ced208aab92d5272919b612e5cda21aeb1d54191848cf6e46e9e354f3541f81 - languageName: node - linkType: hard - -"react-error-boundary@npm:^4.1.2": - version: 4.1.2 - resolution: "react-error-boundary@npm:4.1.2" - dependencies: - "@babel/runtime": "npm:^7.12.5" - peerDependencies: - react: ">=16.13.1" - checksum: 10/a8b59e5ef891bb6c48874d12c72bbd1a9292a56751adeee5666e228bd3a4913084329a9c21f7baafa0df68dc6d25e18883edb25946ce5763981885cbb93786eb - languageName: node - linkType: hard - -"react-error-overlay@npm:^6.0.11": - version: 6.0.11 - resolution: "react-error-overlay@npm:6.0.11" - checksum: 10/b4ac746fc4fb50da733768aadbc638d34dd56d4e46ed4b2f2d1ac54dced0c5fa5fe47ebbbf90810ada44056ed0713bba5b9b930b69f4e45466e7f59fc806c44e - languageName: node - linkType: hard - -"react-i18next@npm:^15.4.1": - version: 15.4.1 - resolution: "react-i18next@npm:15.4.1" - dependencies: - "@babel/runtime": "npm:^7.25.0" - html-parse-stringify: "npm:^3.0.1" - peerDependencies: - i18next: ">= 23.2.3" - react: ">= 16.8.0" - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - checksum: 10/fd1f2dbffd579d6ea35d5510734f997c11d4a09372a24db194daf5f3201a0f536992d558aa58863d20da4002994d1b6e6bd35cd1eab623f90afb97ea783a01b1 - languageName: node - linkType: hard - -"react-identicons@npm:^1.2.5": - version: 1.2.5 - resolution: "react-identicons@npm:1.2.5" - peerDependencies: - react: ^17.0.1 - react-dom: ^17.0.1 - checksum: 10/10cf0a849432f1df7e50bad880be4d47aebf9499a2ce35c9b7496639f84c17b64911fe487873589ba3dcfca3bfc84082031725a1a114acc3172139635cec5cea - languageName: node - linkType: hard - -"react-intersection-observer@npm:^9.16.0": - version: 9.16.0 - resolution: "react-intersection-observer@npm:9.16.0" - peerDependencies: - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - react-dom: - optional: true - checksum: 10/ded14524d9311cfb9dd9e65eb04748d07a1868f8c40dd628bec8a8474d43ee2373604fdc1e6a7d468a8e2e680638e41b91048ab9669555d50217c5c0c51247e0 - languageName: node - linkType: hard - -"react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.7.0": - version: 16.13.1 - resolution: "react-is@npm:16.13.1" - checksum: 10/5aa564a1cde7d391ac980bedee21202fc90bdea3b399952117f54fb71a932af1e5902020144fb354b4690b2414a0c7aafe798eb617b76a3d441d956db7726fdf - languageName: node - linkType: hard - -"react-is@npm:^17.0.1": - version: 17.0.2 - resolution: "react-is@npm:17.0.2" - checksum: 10/73b36281e58eeb27c9cc6031301b6ae19ecdc9f18ae2d518bdb39b0ac564e65c5779405d623f1df9abf378a13858b79442480244bd579968afc1faf9a2ce5e05 - languageName: node - linkType: hard - -"react-is@npm:^18.0.0, react-is@npm:^18.3.1": - version: 18.3.1 - resolution: "react-is@npm:18.3.1" - checksum: 10/d5f60c87d285af24b1e1e7eaeb123ec256c3c8bdea7061ab3932e3e14685708221bf234ec50b21e10dd07f008f1b966a2730a0ce4ff67905b3872ff2042aec22 - languageName: node - linkType: hard - -"react-is@npm:^19.0.0": - version: 19.0.0 - resolution: "react-is@npm:19.0.0" - checksum: 10/6cd3695c462ec3f0d4db98583f0c1b9a439248d60214f6c42c2b0e2951a1066339d0eefa74707f03484042e043fca87750282a35b652492c035f5f3da0d6498a - languageName: node - linkType: hard - -"react-lifecycles-compat@npm:^3.0.0": - version: 3.0.4 - resolution: "react-lifecycles-compat@npm:3.0.4" - checksum: 10/c66b9c98c15cd6b0d0a4402df5f665e8cc7562fb7033c34508865bea51fd7b623f7139b5b7e708515d3cd665f264a6a9403e1fa7e6d61a05759066f5e9f07783 - languageName: node - linkType: hard - -"react-loading-skeleton@npm:^3.5.0": - version: 3.5.0 - resolution: "react-loading-skeleton@npm:3.5.0" - peerDependencies: - react: ">=16.8.0" - checksum: 10/e6a1385d07cbded44d82fa26ad9581274858a682ce728eb81a5c07816e9c1b74092ccb01dc0e79584a8d92d2f571dc6cd0481122d3817d19802e1af4f9961df5 - languageName: node - linkType: hard - -"react-markdown@npm:^8.0.7": - version: 8.0.7 - resolution: "react-markdown@npm:8.0.7" - dependencies: - "@types/hast": "npm:^2.0.0" - "@types/prop-types": "npm:^15.0.0" - "@types/unist": "npm:^2.0.0" - comma-separated-tokens: "npm:^2.0.0" - hast-util-whitespace: "npm:^2.0.0" - prop-types: "npm:^15.0.0" - property-information: "npm:^6.0.0" - react-is: "npm:^18.0.0" - remark-parse: "npm:^10.0.0" - remark-rehype: "npm:^10.0.0" - space-separated-tokens: "npm:^2.0.0" - style-to-object: "npm:^0.4.0" - unified: "npm:^10.0.0" - unist-util-visit: "npm:^4.0.0" - vfile: "npm:^5.0.0" - peerDependencies: - "@types/react": ">=16" - react: ">=16" - checksum: 10/5702a2ef0b8a8cb0a085bb5101810d7446e818f7b76291238eff73cce5aaea65b95ffa28f9b4127d1fc785b6cfe0790bba261b11c5a69655ff901399d8ea6896 - languageName: node - linkType: hard - -"react-markdown@npm:^9.0.1": - version: 9.0.1 - resolution: "react-markdown@npm:9.0.1" - dependencies: - "@types/hast": "npm:^3.0.0" - devlop: "npm:^1.0.0" - hast-util-to-jsx-runtime: "npm:^2.0.0" - html-url-attributes: "npm:^3.0.0" - mdast-util-to-hast: "npm:^13.0.0" - remark-parse: "npm:^11.0.0" - remark-rehype: "npm:^11.0.0" - unified: "npm:^11.0.0" - unist-util-visit: "npm:^5.0.0" - vfile: "npm:^6.0.0" - peerDependencies: - "@types/react": ">=18" - react: ">=18" - checksum: 10/71ce31f200982f641d363888a26e8fb52a199a589124f20295e9be870fa3aed26fcfa14d1dc766d83df666a15cb82359291bfda207bd55d5728ff376d217e079 - languageName: node - linkType: hard - -"react-modal@npm:^3.16.1": - version: 3.16.1 - resolution: "react-modal@npm:3.16.1" - dependencies: - exenv: "npm:^1.2.0" - prop-types: "npm:^15.7.2" - react-lifecycles-compat: "npm:^3.0.0" - warning: "npm:^4.0.3" - peerDependencies: - react: ^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 - react-dom: ^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 - checksum: 10/79787ed2754f65168fccefcef50b509fa1cbc2b44907f92dcfd78ea6f9702668c70604f192a4bb45badb664902fb100179d6d191e478310be94e656271963905 - languageName: node - linkType: hard - -"react-native-fetch-api@npm:^3.0.0": - version: 3.0.0 - resolution: "react-native-fetch-api@npm:3.0.0" - dependencies: - p-defer: "npm:^3.0.0" - checksum: 10/e1e612d402615b439eb996b1fcc677944841a3ae51a31a2b0527e03a8e3afe00c0504ade4e88de0a36f6d11df45b2a543224e7f845c5763e68f585b1108937e7 - languageName: node - linkType: hard - -"react-pdf@npm:^9.0.0": - version: 9.0.0 - resolution: "react-pdf@npm:9.0.0" - dependencies: - clsx: "npm:^2.0.0" - dequal: "npm:^2.0.3" - make-cancellable-promise: "npm:^1.3.1" - make-event-props: "npm:^1.6.0" - merge-refs: "npm:^1.3.0" - pdfjs-dist: "npm:4.3.136" - tiny-invariant: "npm:^1.0.0" - warning: "npm:^4.0.0" - peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10/b0eb3277286c4a8d98fff5ab53dad6838fb8aae89895fc2877e9e897770bcbfe5a30680c3cacbfc2c5e40c0a87e7c9739f4e2c7cff982300a718e9addc2d4d98 - languageName: node - linkType: hard - -"react-refresh@npm:^0.11.0": - version: 0.11.0 - resolution: "react-refresh@npm:0.11.0" - checksum: 10/1275699e2edc39dbced9bdb00e2e167e3a2868e0c8ae117ba9551556368cfe70453068e5209240d827122aad5504a64c59a24b9b9a2a0ab932472c8750203ea3 - languageName: node - linkType: hard - -"react-router-dom@npm:^6.28.0": - version: 6.28.0 - resolution: "react-router-dom@npm:6.28.0" - dependencies: - "@remix-run/router": "npm:1.21.0" - react-router: "npm:6.28.0" - peerDependencies: - react: ">=16.8" - react-dom: ">=16.8" - checksum: 10/e637825132ea96c3514ef7b8322f9bf0b752a942d6b4ffc4c20e389b5911726adf3dba8208ed4b97bf5b9c3bd465d9d1a1db1a58a610a8d528f18d890e0b143f - languageName: node - linkType: hard - -"react-router-dom@npm:^6.30.0": - version: 6.30.0 - resolution: "react-router-dom@npm:6.30.0" - dependencies: - "@remix-run/router": "npm:1.23.0" - react-router: "npm:6.30.0" - peerDependencies: - react: ">=16.8" - react-dom: ">=16.8" - checksum: 10/e161e39d56ee799553d0bc6c8f19c901ee8cdbae218094f41cbc18f3262cb4d5e9f8381bd47a7e59d30e55c0cdd0a6803aa98537f2f9122efbce5c66a3041a35 - languageName: node - linkType: hard - -"react-router@npm:6.28.0": - version: 6.28.0 - resolution: "react-router@npm:6.28.0" - dependencies: - "@remix-run/router": "npm:1.21.0" - peerDependencies: - react: ">=16.8" - checksum: 10/f021a644513144884a567d9c2dcc432e8e3233f931378c219c5a3b5b842340f0faca86225a708bafca1e9010965afe1a7dada28aef5b7b6138c885c0552d9a7d - languageName: node - linkType: hard - -"react-router@npm:6.30.0": - version: 6.30.0 - resolution: "react-router@npm:6.30.0" - dependencies: - "@remix-run/router": "npm:1.23.0" - peerDependencies: - react: ">=16.8" - checksum: 10/2a449f2769b7b001f9ea16108b83cd014b50c621a378ef2a99bb823a418833bc1b213f5f1665c97ecbdfa9391f9593693ace09a292969aa7259a45070b5e066a - languageName: node - linkType: hard - -"react-scripts@npm:^5.0.1": - version: 5.0.1 - resolution: "react-scripts@npm:5.0.1" - dependencies: - "@babel/core": "npm:^7.16.0" - "@pmmmwh/react-refresh-webpack-plugin": "npm:^0.5.3" - "@svgr/webpack": "npm:^5.5.0" - babel-jest: "npm:^27.4.2" - babel-loader: "npm:^8.2.3" - babel-plugin-named-asset-import: "npm:^0.3.8" - babel-preset-react-app: "npm:^10.0.1" - bfj: "npm:^7.0.2" - browserslist: "npm:^4.18.1" - camelcase: "npm:^6.2.1" - case-sensitive-paths-webpack-plugin: "npm:^2.4.0" - css-loader: "npm:^6.5.1" - css-minimizer-webpack-plugin: "npm:^3.2.0" - dotenv: "npm:^10.0.0" - dotenv-expand: "npm:^5.1.0" - eslint: "npm:^8.3.0" - eslint-config-react-app: "npm:^7.0.1" - eslint-webpack-plugin: "npm:^3.1.1" - file-loader: "npm:^6.2.0" - fs-extra: "npm:^10.0.0" - fsevents: "npm:^2.3.2" - html-webpack-plugin: "npm:^5.5.0" - identity-obj-proxy: "npm:^3.0.0" - jest: "npm:^27.4.3" - jest-resolve: "npm:^27.4.2" - jest-watch-typeahead: "npm:^1.0.0" - mini-css-extract-plugin: "npm:^2.4.5" - postcss: "npm:^8.4.4" - postcss-flexbugs-fixes: "npm:^5.0.2" - postcss-loader: "npm:^6.2.1" - postcss-normalize: "npm:^10.0.1" - postcss-preset-env: "npm:^7.0.1" - prompts: "npm:^2.4.2" - react-app-polyfill: "npm:^3.0.0" - react-dev-utils: "npm:^12.0.1" - react-refresh: "npm:^0.11.0" - resolve: "npm:^1.20.0" - resolve-url-loader: "npm:^4.0.0" - sass-loader: "npm:^12.3.0" - semver: "npm:^7.3.5" - source-map-loader: "npm:^3.0.0" - style-loader: "npm:^3.3.1" - tailwindcss: "npm:^3.0.2" - terser-webpack-plugin: "npm:^5.2.5" - webpack: "npm:^5.64.4" - webpack-dev-server: "npm:^4.6.0" - webpack-manifest-plugin: "npm:^4.0.2" - workbox-webpack-plugin: "npm:^6.4.1" - peerDependencies: - react: ">= 16" - typescript: ^3.2.1 || ^4 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - typescript: - optional: true - bin: - react-scripts: bin/react-scripts.js - checksum: 10/1727f9b4606bedefd8e36c754b44181842ce81b9b6e961bcd21e8de44d5848fb5fa30790f4c45e5085f2365c7a37bff637fccc1b20096dc5cdd625d085fc117e - languageName: node - linkType: hard - -"react-slick@npm:^0.30.2": - version: 0.30.3 - resolution: "react-slick@npm:0.30.3" - dependencies: - classnames: "npm:^2.2.5" - enquire.js: "npm:^2.1.6" - json2mq: "npm:^0.2.0" - lodash.debounce: "npm:^4.0.8" - resize-observer-polyfill: "npm:^1.5.0" - peerDependencies: - react: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - checksum: 10/a2a854498d99357dc73be01b3360eaf42edffe48ce8d6262edbe747711933f63806b2c65aee153c0f6d5c32a647d336199012864dc0f187a58cd5e57716069b6 - languageName: node - linkType: hard - -"react-toastify@npm:^10.0.6": - version: 10.0.6 - resolution: "react-toastify@npm:10.0.6" - dependencies: - clsx: "npm:^2.1.0" - peerDependencies: - react: ">=18" - react-dom: ">=18" - checksum: 10/60ec092f6b6ab4c6dd0a42e6207ce0d72af1f41a010ae8aa1b3de080697a3cdaa4d2249eb9092f9331bc17f155b1b45c681bd4a29dc698e20a6ac6fe79f967e6 - languageName: node - linkType: hard - -"react-toastify@npm:^9.1.3": - version: 9.1.3 - resolution: "react-toastify@npm:9.1.3" - dependencies: - clsx: "npm:^1.1.1" - peerDependencies: - react: ">=16" - react-dom: ">=16" - checksum: 10/12667aa10e6cf3f74be2e3c704c2d5570dd7de66fff89ae38fbfab1122e9a9f632de1cb712fe44a9a60b8ecca7590578157cb4ca6c4e8105a8cf80936a94e181 - languageName: node - linkType: hard - -"react-transition-group@npm:^4.4.5": - version: 4.4.5 - resolution: "react-transition-group@npm:4.4.5" - dependencies: - "@babel/runtime": "npm:^7.5.5" - dom-helpers: "npm:^5.0.1" - loose-envify: "npm:^1.4.0" - prop-types: "npm:^15.6.2" - peerDependencies: - react: ">=16.6.0" - react-dom: ">=16.6.0" - checksum: 10/ca32d3fd2168c976c5d90a317f25d5f5cd723608b415fb3b9006f9d793c8965c619562d0884503a3e44e4b06efbca4fdd1520f30e58ca3e00a0890e637d55419 - languageName: node - linkType: hard - -"react-universal-interface@npm:^0.6.2": - version: 0.6.2 - resolution: "react-universal-interface@npm:0.6.2" - peerDependencies: - react: "*" - tslib: "*" - checksum: 10/bded7a34f5e44223495a095b6c29fa3ea6c8338a166d0f307d21443c20c9fa54a95bdae11d05ab3e6f61a7fa1eaa027f6fbe7ca064a2fb2af46539653ebcb308 - languageName: node - linkType: hard - -"react-use@npm:^17.5.1": - version: 17.5.1 - resolution: "react-use@npm:17.5.1" - dependencies: - "@types/js-cookie": "npm:^2.2.6" - "@xobotyi/scrollbar-width": "npm:^1.9.5" - copy-to-clipboard: "npm:^3.3.1" - fast-deep-equal: "npm:^3.1.3" - fast-shallow-equal: "npm:^1.0.0" - js-cookie: "npm:^2.2.1" - nano-css: "npm:^5.6.2" - react-universal-interface: "npm:^0.6.2" - resize-observer-polyfill: "npm:^1.5.1" - screenfull: "npm:^5.1.0" - set-harmonic-interval: "npm:^1.0.1" - throttle-debounce: "npm:^3.0.1" - ts-easing: "npm:^0.2.0" - tslib: "npm:^2.1.0" - peerDependencies: - react: "*" - react-dom: "*" - checksum: 10/2da403a9949dbd964b9b8e20dcd354db66b7f7d5ca1f42572fbcdb06bd49ee828c295be4912cb87abc163d1b54820bb8c5fa85314a16c4579d9e30bf9cbd5759 - languageName: node - linkType: hard - -"react@npm:^18.0.0, react@npm:^18.3.1": - version: 18.3.1 - resolution: "react@npm:18.3.1" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10/261137d3f3993eaa2368a83110466fc0e558bc2c7f7ae7ca52d94f03aac945f45146bd85e5f481044db1758a1dbb57879e2fcdd33924e2dde1bdc550ce73f7bf - languageName: node - linkType: hard - -"read-cache@npm:^1.0.0": - version: 1.0.0 - resolution: "read-cache@npm:1.0.0" - dependencies: - pify: "npm:^2.3.0" - checksum: 10/83a39149d9dfa38f0c482ea0d77b34773c92fef07fe7599cdd914d255b14d0453e0229ef6379d8d27d6947f42d7581635296d0cfa7708f05a9bd8e789d398b31 - languageName: node - linkType: hard - -"read-pkg-up@npm:^3.0.0": - version: 3.0.0 - resolution: "read-pkg-up@npm:3.0.0" - dependencies: - find-up: "npm:^2.0.0" - read-pkg: "npm:^3.0.0" - checksum: 10/16175573f2914ab9788897bcbe2a62b5728d0075e62285b3680cebe97059e2911e0134a062cf6e51ebe3e3775312bc788ac2039ed6af38ec68d2c10c6f2b30fb - languageName: node - linkType: hard - -"read-pkg-up@npm:^7.0.1": - version: 7.0.1 - resolution: "read-pkg-up@npm:7.0.1" - dependencies: - find-up: "npm:^4.1.0" - read-pkg: "npm:^5.2.0" - type-fest: "npm:^0.8.1" - checksum: 10/e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 - languageName: node - linkType: hard - -"read-pkg@npm:^3.0.0": - version: 3.0.0 - resolution: "read-pkg@npm:3.0.0" - dependencies: - load-json-file: "npm:^4.0.0" - normalize-package-data: "npm:^2.3.2" - path-type: "npm:^3.0.0" - checksum: 10/398903ebae6c7e9965419a1062924436cc0b6f516c42c4679a90290d2f87448ed8f977e7aa2dbba4aa1ac09248628c43e493ac25b2bc76640e946035200e34c6 - languageName: node - linkType: hard - -"read-pkg@npm:^5.2.0": - version: 5.2.0 - resolution: "read-pkg@npm:5.2.0" - dependencies: - "@types/normalize-package-data": "npm:^2.4.0" - normalize-package-data: "npm:^2.5.0" - parse-json: "npm:^5.0.0" - type-fest: "npm:^0.6.0" - checksum: 10/eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 - languageName: node - linkType: hard - -"read-yaml-file@npm:^1.1.0": - version: 1.1.0 - resolution: "read-yaml-file@npm:1.1.0" - dependencies: - graceful-fs: "npm:^4.1.5" - js-yaml: "npm:^3.6.1" - pify: "npm:^4.0.1" - strip-bom: "npm:^3.0.0" - checksum: 10/41ee5f075507ef0403328dd54e225a61c3149f915675ce7fd0fd791ddcce2e6c30a9fe0f76ffa7a465c1c157b9b4ad8ded1dcf47dc3b396103eeb013490bbc2e - languageName: node - linkType: hard - -"readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: "npm:^2.0.3" - string_decoder: "npm:^1.1.1" - util-deprecate: "npm:^1.0.1" - checksum: 10/d9e3e53193adcdb79d8f10f2a1f6989bd4389f5936c6f8b870e77570853561c362bee69feca2bbb7b32368ce96a85504aa4cedf7cf80f36e6a9de30d64244048 - languageName: node - linkType: hard - -"readable-stream@npm:^2.0.1, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.8, readable-stream@npm:~2.3.6": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.3" - isarray: "npm:~1.0.0" - process-nextick-args: "npm:~2.0.0" - safe-buffer: "npm:~5.1.1" - string_decoder: "npm:~1.1.1" - util-deprecate: "npm:~1.0.1" - checksum: 10/8500dd3a90e391d6c5d889256d50ec6026c059fadee98ae9aa9b86757d60ac46fff24fafb7a39fa41d54cb39d8be56cc77be202ebd4cd8ffcf4cb226cbaa40d4 - languageName: node - linkType: hard - -"readable-stream@npm:^3.6.2 || ^4.4.2, readable-stream@npm:^4.0.0": - version: 4.5.2 - resolution: "readable-stream@npm:4.5.2" - dependencies: - abort-controller: "npm:^3.0.0" - buffer: "npm:^6.0.3" - events: "npm:^3.3.0" - process: "npm:^0.11.10" - string_decoder: "npm:^1.3.0" - checksum: 10/01b128a559c5fd76a898495f858cf0a8839f135e6a69e3409f986e88460134791657eb46a2ff16826f331682a3c4d0c5a75cef5e52ef259711021ba52b1c2e82 - languageName: node - linkType: hard - -"readdirp@npm:^4.0.1": - version: 4.0.2 - resolution: "readdirp@npm:4.0.2" - checksum: 10/4ef93103307c7d5e42e78ecf201db58c984c4d66882a27c956250478b49c2444b1ff6aea8ce0f5e4157b2c07ce2fe870ad16c92ebd7c6ff30391ded6e42b9873 - languageName: node - linkType: hard - -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" - dependencies: - picomatch: "npm:^2.2.1" - checksum: 10/196b30ef6ccf9b6e18c4e1724b7334f72a093d011a99f3b5920470f0b3406a51770867b3e1ae9711f227ef7a7065982f6ee2ce316746b2cb42c88efe44297fe7 - languageName: node - linkType: hard - -"real-require@npm:^0.1.0": - version: 0.1.0 - resolution: "real-require@npm:0.1.0" - checksum: 10/0ba1c440dc9b7777d35a97f755312bf236be0847249f76cc9789c5c08d141f5d80b8564888e6a94ed0253fabf597b6892f8502c4e5658fb98f88642633a39723 - languageName: node - linkType: hard - -"real-require@npm:^0.2.0": - version: 0.2.0 - resolution: "real-require@npm:0.2.0" - checksum: 10/ddf44ee76301c774e9c9f2826da8a3c5c9f8fc87310f4a364e803ef003aa1a43c378b4323051ced212097fff1af459070f4499338b36a7469df1d4f7e8c0ba4c - languageName: node - linkType: hard - -"rechoir@npm:^0.6.2": - version: 0.6.2 - resolution: "rechoir@npm:0.6.2" - dependencies: - resolve: "npm:^1.1.6" - checksum: 10/fe76bf9c21875ac16e235defedd7cbd34f333c02a92546142b7911a0f7c7059d2e16f441fe6fb9ae203f459c05a31b2bcf26202896d89e390eda7514d5d2702b - languageName: node - linkType: hard - -"recursive-readdir@npm:^2.2.2": - version: 2.2.3 - resolution: "recursive-readdir@npm:2.2.3" - dependencies: - minimatch: "npm:^3.0.5" - checksum: 10/19298852b0b87810aed5f2c81a73bfaaeb9ade7c9bf363f350fc1443f2cc3df66ecade5e102dfbb153fcd9df20342c301848e11e149e5f78759c1d55aa2c9c39 - languageName: node - linkType: hard - -"redent@npm:^3.0.0": - version: 3.0.0 - resolution: "redent@npm:3.0.0" - dependencies: - indent-string: "npm:^4.0.0" - strip-indent: "npm:^3.0.0" - checksum: 10/fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b - languageName: node - linkType: hard - -"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": - version: 1.2.0 - resolution: "redis-errors@npm:1.2.0" - checksum: 10/001c11f63ddd52d7c80eb4f4ede3a9433d29a458a7eea06b9154cb37c9802a218d93b7988247aa8c958d4b5d274b18354e8853c148f1096fda87c6e675cfd3ee - languageName: node - linkType: hard - -"redis-parser@npm:^3.0.0": - version: 3.0.0 - resolution: "redis-parser@npm:3.0.0" - dependencies: - redis-errors: "npm:^1.0.0" - checksum: 10/b10846844b4267f19ce1a6529465819c3d78c3e89db7eb0c3bb4eb19f83784797ec411274d15a77dbe08038b48f95f76014b83ca366dc955a016a3a0a0234650 - languageName: node - linkType: hard - -"reduce-flatten@npm:^2.0.0": - version: 2.0.0 - resolution: "reduce-flatten@npm:2.0.0" - checksum: 10/64393ef99a16b20692acfd60982d7fdbd7ff8d9f8f185c6023466444c6dd2abb929d67717a83cec7f7f8fb5f46a25d515b3b2bf2238fdbfcdbfd01d2a9e73cb8 - languageName: node - linkType: hard - -"reflect.getprototypeof@npm:^1.0.4": - version: 1.0.4 - resolution: "reflect.getprototypeof@npm:1.0.4" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - get-intrinsic: "npm:^1.2.1" - globalthis: "npm:^1.0.3" - which-builtin-type: "npm:^1.1.3" - checksum: 10/52ff881f62a9cb4acdd7f9a8f4ac88234056c4a6b1ed570c249cc085de5c313249b90251d16eb8e58302b82ae697eec19dde16ff62949f6b87f035a3a26dc5df - languageName: node - linkType: hard - -"regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.0 - resolution: "regenerate-unicode-properties@npm:10.1.0" - dependencies: - regenerate: "npm:^1.4.2" - checksum: 10/25b268659898955ad105267b4efba20e361e27b233670694b683728a2800314bec3053918d3bf71b0604376fd76fe9bc9c6f80379cfb6d1e209a58de44101aac - languageName: node - linkType: hard - -"regenerate@npm:^1.4.2": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: 10/dc6c95ae4b3ba6adbd7687cafac260eee4640318c7a95239d5ce847d9b9263979758389e862fe9c93d633b5792ea4ada5708df75885dc5aa05a309fa18140a87 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.13.9": - version: 0.13.11 - resolution: "regenerator-runtime@npm:0.13.11" - checksum: 10/d493e9e118abef5b099c78170834f18540c4933cedf9bfabc32d3af94abfb59a7907bd7950259cbab0a929ebca7db77301e8024e5121e6482a82f78283dfd20c - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.14.0": - version: 0.14.1 - resolution: "regenerator-runtime@npm:0.14.1" - checksum: 10/5db3161abb311eef8c45bcf6565f4f378f785900ed3945acf740a9888c792f75b98ecb77f0775f3bf95502ff423529d23e94f41d80c8256e8fa05ed4b07cf471 - languageName: node - linkType: hard - -"regenerator-transform@npm:^0.15.2": - version: 0.15.2 - resolution: "regenerator-transform@npm:0.15.2" - dependencies: - "@babel/runtime": "npm:^7.8.4" - checksum: 10/c4fdcb46d11bbe32605b4b9ed76b21b8d3f241a45153e9dc6f5542fed4c7744fed459f42701f650d5d5956786bf7de57547329d1c05a9df2ed9e367b9d903302 - languageName: node - linkType: hard - -"regex-parser@npm:^2.2.11": - version: 2.2.11 - resolution: "regex-parser@npm:2.2.11" - checksum: 10/78200331ec0cc372302d287a4946c38681eb5fe435453fca572cb53cac0ba579e5eb3b9e25eac24c0c80a555fb3ea7a637814a35da1e9bc88e8819110ae5de24 - languageName: node - linkType: hard - -"regexp-tree@npm:~0.1.1": - version: 0.1.27 - resolution: "regexp-tree@npm:0.1.27" - bin: - regexp-tree: bin/regexp-tree - checksum: 10/08c70c8adb5a0d4af1061bf9eb05d3b6e1d948c433d6b7008e4b5eb12a49429c2d6ca8e9106339a432aa0d07bd6e1bccc638d8f4ab0d045f3adad22182b300a2 - languageName: node - linkType: hard - -"regexp.prototype.flags@npm:^1.5.2": - version: 1.5.2 - resolution: "regexp.prototype.flags@npm:1.5.2" - dependencies: - call-bind: "npm:^1.0.6" - define-properties: "npm:^1.2.1" - es-errors: "npm:^1.3.0" - set-function-name: "npm:^2.0.1" - checksum: 10/9fffc01da9c4e12670ff95bc5204364615fcc12d86fc30642765af908675678ebb0780883c874b2dbd184505fb52fa603d80073ecf69f461ce7f56b15d10be9c - languageName: node - linkType: hard - -"regexpp@npm:^3.0.0": - version: 3.2.0 - resolution: "regexpp@npm:3.2.0" - checksum: 10/3310010895a906873262f4b494fc99bcef1e71ef6720a0532c5999ca586498cbd4a284c8e3c2423f9d1d37512fd08d6064b7564e0e59508cf938f76dd15ace84 - languageName: node - linkType: hard - -"regexpu-core@npm:^5.3.1": - version: 5.3.2 - resolution: "regexpu-core@npm:5.3.2" - dependencies: - "@babel/regjsgen": "npm:^0.8.0" - regenerate: "npm:^1.4.2" - regenerate-unicode-properties: "npm:^10.1.0" - regjsparser: "npm:^0.9.1" - unicode-match-property-ecmascript: "npm:^2.0.0" - unicode-match-property-value-ecmascript: "npm:^2.1.0" - checksum: 10/ed0d7c66d84c633fbe8db4939d084c780190eca11f6920807dfb8ebac59e2676952cd8f2008d9c86ae8cf0463ea5fd12c5cff09ef2ce7d51ee6b420a5eb4d177 - languageName: node - linkType: hard - -"registry-auth-token@npm:^5.0.1": - version: 5.0.2 - resolution: "registry-auth-token@npm:5.0.2" - dependencies: - "@pnpm/npm-conf": "npm:^2.1.0" - checksum: 10/0d7683b71ee418993e7872b389024b13645c4295eb7bb850d10728eaf46065db24ea4d47dc6cbb71a60d1aa4bef077b0d8b7363c9ac9d355fdba47bebdfb01dd - languageName: node - linkType: hard - -"registry-auth-token@npm:^5.0.3": - version: 5.0.3 - resolution: "registry-auth-token@npm:5.0.3" - dependencies: - "@pnpm/npm-conf": "npm:^2.1.0" - checksum: 10/5976f822d6a55267319b011dd4c64ef037ffee038c97529d09ea619835afe59cf89d545ec6b393098de4d7ba7a44664ce740bc1820215a2a90c7d66a1e676f9f - languageName: node - linkType: hard - -"registry-url@npm:^6.0.0": - version: 6.0.1 - resolution: "registry-url@npm:6.0.1" - dependencies: - rc: "npm:1.2.8" - checksum: 10/33712aa1b489aab7aba2191c1cdadfdd71f5bf166d4792d81744a6be332c160bd7d9273af8269d8a01284b9562f14a5b31b7abcf7ad9306c44887ecff51c89ab - languageName: node - linkType: hard - -"regjsparser@npm:^0.9.1": - version: 0.9.1 - resolution: "regjsparser@npm:0.9.1" - dependencies: - jsesc: "npm:~0.5.0" - bin: - regjsparser: bin/parser - checksum: 10/be7757ef76e1db10bf6996001d1021048b5fb12f5cb470a99b8cf7f3ff943f0f0e2291c0dcdbb418b458ddc4ac10e48680a822b69ef487a0284c8b6b77beddc3 - languageName: node - linkType: hard - -"relateurl@npm:^0.2.7": - version: 0.2.7 - resolution: "relateurl@npm:0.2.7" - checksum: 10/f5d6ba58f2a5d5076389090600c243a0ba7072bcf347490a09e4241e2427ccdb260b4e22cea7be4f1fcd3c2bf05908b1e0d0bc9605e3199d4ecf37af1d5681fa - languageName: node - linkType: hard - -"relay-runtime@npm:12.0.0": - version: 12.0.0 - resolution: "relay-runtime@npm:12.0.0" - dependencies: - "@babel/runtime": "npm:^7.0.0" - fbjs: "npm:^3.0.0" - invariant: "npm:^2.2.4" - checksum: 10/d6211e8206ea7273f88dccd5ea72abe6836c6f0bfe95a48ddf80c54e47a08edaf312bedecba98a0a0ba6abcd360cbacd6a2ddb4cef65f00170fb0f36cc324f5e - languageName: node - linkType: hard - -"remark-parse@npm:^10.0.0": - version: 10.0.2 - resolution: "remark-parse@npm:10.0.2" - dependencies: - "@types/mdast": "npm:^3.0.0" - mdast-util-from-markdown: "npm:^1.0.0" - unified: "npm:^10.0.0" - checksum: 10/184f48956734a58a7e157d83233e532ea289697f5ecebd1fb082cce79e6d9f5b1d3da72462356b2b3b5843643cee890280ffe3d21c9d4ad2d7d5e20bb5de7f14 - languageName: node - linkType: hard - -"remark-parse@npm:^11.0.0": - version: 11.0.0 - resolution: "remark-parse@npm:11.0.0" - dependencies: - "@types/mdast": "npm:^4.0.0" - mdast-util-from-markdown: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - unified: "npm:^11.0.0" - checksum: 10/59d584be56ebc7c05524989c4ed86eb8a7b6e361942b705ca13a37349f60740a6073aedf7783af46ce920d09dd156148942d5e33e8be3dbcd47f818cb4bc410c - languageName: node - linkType: hard - -"remark-rehype@npm:^10.0.0": - version: 10.1.0 - resolution: "remark-rehype@npm:10.1.0" - dependencies: - "@types/hast": "npm:^2.0.0" - "@types/mdast": "npm:^3.0.0" - mdast-util-to-hast: "npm:^12.1.0" - unified: "npm:^10.0.0" - checksum: 10/cf765b639d16872404b50d5945df0ba825d14f1150397dde804e7d9e2e856a7b7343c4dc3796c85e7c18ca84f3c989bd40e476bd194fc00a5a870e8a64ec30d9 - languageName: node - linkType: hard - -"remark-rehype@npm:^11.0.0": - version: 11.1.1 - resolution: "remark-rehype@npm:11.1.1" - dependencies: - "@types/hast": "npm:^3.0.0" - "@types/mdast": "npm:^4.0.0" - mdast-util-to-hast: "npm:^13.0.0" - unified: "npm:^11.0.0" - vfile: "npm:^6.0.0" - checksum: 10/39404bd19c57b2b69660be7e3d587ddb2240495845d42fad3bcc506c9c132d07abacb0a20182b73c530857b2da0c463ad5658382b448243ce432152ab49af08d - languageName: node - linkType: hard - -"remedial@npm:^1.0.7": - version: 1.0.8 - resolution: "remedial@npm:1.0.8" - checksum: 10/41e23a7d656fd696678e4f648e57ece5c9e13c097094e8ac6e173990a0665a24d8e50cbb39d458af3b0d58cfbd7811fc0840c4646d10ce3285fe5819b1c82375 - languageName: node - linkType: hard - -"remove-trailing-separator@npm:^1.0.1": - version: 1.1.0 - resolution: "remove-trailing-separator@npm:1.1.0" - checksum: 10/d3c20b5a2d987db13e1cca9385d56ecfa1641bae143b620835ac02a6b70ab88f68f117a0021838db826c57b31373d609d52e4f31aca75fc490c862732d595419 - languageName: node - linkType: hard - -"remove-trailing-spaces@npm:^1.0.6": - version: 1.0.8 - resolution: "remove-trailing-spaces@npm:1.0.8" - checksum: 10/81f615c5cd8dd6a5e3017dcc9af598965575d176d42ef99cfd7b894529991f464e629fd68aba089f5c6bebf5bb8070a5eee56f3b621aba55e8ef524d6a4d4f69 - languageName: node - linkType: hard - -"renderkid@npm:^3.0.0": - version: 3.0.0 - resolution: "renderkid@npm:3.0.0" - dependencies: - css-select: "npm:^4.1.3" - dom-converter: "npm:^0.2.0" - htmlparser2: "npm:^6.1.0" - lodash: "npm:^4.17.21" - strip-ansi: "npm:^6.0.1" - checksum: 10/434bd56d9930dd344bcba3ef7683f3dd893396b6bc7e8caa551a4cacbe75a9466dc6cf3d75bc324a5979278a73ef968d7854f8f660dbf1a52c38a73f1fb59b20 - languageName: node - linkType: hard - -"repeat-string@npm:^1.0.0": - version: 1.6.1 - resolution: "repeat-string@npm:1.6.1" - checksum: 10/1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10/a72468e2589270d91f06c7d36ec97a88db53ae5d6fe3787fadc943f0b0276b10347f89b363b2a82285f650bdcc135ad4a257c61bdd4d00d6df1fa24875b0ddaf - languageName: node - linkType: hard - -"require-from-string@npm:^2.0.2": - version: 2.0.2 - resolution: "require-from-string@npm:2.0.2" - checksum: 10/839a3a890102a658f4cb3e7b2aa13a1f80a3a976b512020c3d1efc418491c48a886b6e481ea56afc6c4cb5eef678f23b2a4e70575e7534eccadf5e30ed2e56eb - languageName: node - linkType: hard - -"require-main-filename@npm:^2.0.0": - version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: 10/8604a570c06a69c9d939275becc33a65676529e1c3e5a9f42d58471674df79357872b96d70bb93a0380a62d60dc9031c98b1a9dad98c946ffdd61b7ac0c8cedd - languageName: node - linkType: hard - -"requires-port@npm:^1.0.0": - version: 1.0.0 - resolution: "requires-port@npm:1.0.0" - checksum: 10/878880ee78ccdce372784f62f52a272048e2d0827c29ae31e7f99da18b62a2b9463ea03a75f277352f4697c100183debb0532371ad515a2d49d4bfe596dd4c20 - languageName: node - linkType: hard - -"resize-observer-polyfill@npm:^1.5.0, resize-observer-polyfill@npm:^1.5.1": - version: 1.5.1 - resolution: "resize-observer-polyfill@npm:1.5.1" - checksum: 10/e10ee50cd6cf558001de5c6fb03fee15debd011c2f694564b71f81742eef03fb30d6c2596d1d5bf946d9991cb692fcef529b7bd2e4057041377ecc9636c753ce - languageName: node - linkType: hard - -"resolve-alpn@npm:^1.2.0": - version: 1.2.1 - resolution: "resolve-alpn@npm:1.2.1" - checksum: 10/744e87888f0b6fa0b256ab454ca0b9c0b80808715e2ef1f3672773665c92a941f6181194e30ccae4a8cd0adbe0d955d3f133102636d2ee0cca0119fec0bc9aec - languageName: node - linkType: hard - -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: "npm:^5.0.0" - checksum: 10/546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 - languageName: node - linkType: hard - -"resolve-dir@npm:^1.0.0, resolve-dir@npm:^1.0.1": - version: 1.0.1 - resolution: "resolve-dir@npm:1.0.1" - dependencies: - expand-tilde: "npm:^2.0.0" - global-modules: "npm:^1.0.0" - checksum: 10/ef736b8ed60d6645c3b573da17d329bfb50ec4e1d6c5ffd6df49e3497acef9226f9810ea6823b8ece1560e01dcb13f77a9f6180d4f242d00cc9a8f4de909c65c - languageName: node - linkType: hard - -"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 10/be18a5e4d76dd711778664829841cde690971d02b6cbae277735a09c1c28f407b99ef6ef3cd585a1e6546d4097b28df40ed32c4a287b9699dcf6d7f208495e23 - languageName: node - linkType: hard - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: 10/91eb76ce83621eea7bbdd9b55121a5c1c4a39e54a9ce04a9ad4517f102f8b5131c2cf07622c738a6683991bf54f2ce178f5a42803ecbd527ddc5105f362cc9e3 - languageName: node - linkType: hard - -"resolve-global@npm:1.0.0, resolve-global@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-global@npm:1.0.0" - dependencies: - global-dirs: "npm:^0.1.1" - checksum: 10/c4e11d33e84bde7516b824503ffbe4b6cce863d5ce485680fd3db997b7c64da1df98321b1fd0703b58be8bc9bc83bc96bd83043f96194386b45eb47229efb6b6 - languageName: node - linkType: hard - -"resolve-pkg-maps@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-pkg-maps@npm:1.0.0" - checksum: 10/0763150adf303040c304009231314d1e84c6e5ebfa2d82b7d94e96a6e82bacd1dcc0b58ae257315f3c8adb89a91d8d0f12928241cba2df1680fbe6f60bf99b0e - languageName: node - linkType: hard - -"resolve-url-loader@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-url-loader@npm:4.0.0" - dependencies: - adjust-sourcemap-loader: "npm:^4.0.0" - convert-source-map: "npm:^1.7.0" - loader-utils: "npm:^2.0.0" - postcss: "npm:^7.0.35" - source-map: "npm:0.6.1" - peerDependencies: - rework: 1.0.1 - rework-visit: 1.0.0 - peerDependenciesMeta: - rework: - optional: true - rework-visit: - optional: true - checksum: 10/f61d8f31e621a8368d1a76118886cb6bccb536bd8fa0909d3527e0e2072d313f80017de6dfaa070ebdeb2dd80292ecd7099b2e08b627476fd2f0f0d593e35f08 - languageName: node - linkType: hard - -"resolve.exports@npm:^1.1.0": - version: 1.1.1 - resolution: "resolve.exports@npm:1.1.1" - checksum: 10/de58c30aca30883f0e29910e4ad1b7b9986ec5f69434ef2e957ddbe52d3250e138ddd2688e8cd67909b4ee9bf3437424c718a5962d59edd610f035b861ef8441 - languageName: node - linkType: hard - -"resolve@npm:1.1.x": - version: 1.1.7 - resolution: "resolve@npm:1.1.7" - checksum: 10/0a4ff8a102b1d059321caf77563cb2c495979c734f9dc400a70e3ceaaafe76a72bbcc625f9361756348d7b6af6d3cd2815cfbe3109be655a2b18e62d1cdadfc5 - languageName: node - linkType: hard - -"resolve@npm:1.17.0": - version: 1.17.0 - resolution: "resolve@npm:1.17.0" - dependencies: - path-parse: "npm:^1.0.6" - checksum: 10/74141da8c56192fd46f6aa887864f8fd74c1755425174526610cb775177278bb414c6f6feb3051ccd73d774d2ae124c6c97e463e30d7ffd9a87f7da202b851dd - languageName: node - linkType: hard - -"resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.2, resolve@npm:^1.22.4, resolve@npm:~1.22.1, resolve@npm:~1.22.2": - version: 1.22.8 - resolution: "resolve@npm:1.22.8" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10/c473506ee01eb45cbcfefb68652ae5759e092e6b0fb64547feadf9736a6394f258fbc6f88e00c5ca36d5477fbb65388b272432a3600fa223062e54333c156753 - languageName: node - linkType: hard - -"resolve@npm:^2.0.0-next.5": - version: 2.0.0-next.5 - resolution: "resolve@npm:2.0.0-next.5" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10/2d6fd28699f901744368e6f2032b4268b4c7b9185fd8beb64f68c93ac6b22e52ae13560ceefc96241a665b985edf9ffd393ae26d2946a7d3a07b7007b7d51e79 - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A1.1.x#optional!builtin<compat/resolve>": - version: 1.1.7 - resolution: "resolve@patch:resolve@npm%3A1.1.7#optional!builtin<compat/resolve>::version=1.1.7&hash=3bafbf" - checksum: 10/dc5c99fb47807d3771be3135ac6bdb892186973d0895ab17838f0b85bb575e03111214aa16cb68b6416df3c1dd658081a066dd7a9af6e668c28b0025080b615c - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A1.17.0#optional!builtin<compat/resolve>": - version: 1.17.0 - resolution: "resolve@patch:resolve@npm%3A1.17.0#optional!builtin<compat/resolve>::version=1.17.0&hash=c3c19d" - dependencies: - path-parse: "npm:^1.0.6" - checksum: 10/02e87fe9233d169fdc5220572c7b8933c9e23323aaecfd5b8d0b106a7f09dc676dd4d380e66c72b1369489292bcb337b13aad28b480a1bde5a5c040ff16758ea - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A~1.22.1#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A~1.22.2#optional!builtin<compat/resolve>": - version: 1.22.8 - resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin<compat/resolve>::version=1.22.8&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10/f345cd37f56a2c0275e3fe062517c650bb673815d885e7507566df589375d165bbbf4bdb6aa95600a9bc55f4744b81f452b5a63f95b9f10a72787dba3c90890a - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin<compat/resolve>": - version: 2.0.0-next.5 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin<compat/resolve>::version=2.0.0-next.5&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10/05fa778de9d0347c8b889eb7a18f1f06bf0f801b0eb4610b4871a4b2f22e220900cf0ad525e94f990bb8d8921c07754ab2122c0c225ab4cdcea98f36e64fa4c2 - languageName: node - linkType: hard - -"responselike@npm:^3.0.0": - version: 3.0.0 - resolution: "responselike@npm:3.0.0" - dependencies: - lowercase-keys: "npm:^3.0.0" - checksum: 10/e0cc9be30df4f415d6d83cdede3c5c887cd4a73e7cc1708bcaab1d50a28d15acb68460ac5b02bcc55a42f3d493729c8856427dcf6e57e6e128ad05cba4cfb95e - languageName: node - linkType: hard - -"restore-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "restore-cursor@npm:3.1.0" - dependencies: - onetime: "npm:^5.1.0" - signal-exit: "npm:^3.0.2" - checksum: 10/f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 - languageName: node - linkType: hard - -"restore-cursor@npm:^4.0.0": - version: 4.0.0 - resolution: "restore-cursor@npm:4.0.0" - dependencies: - onetime: "npm:^5.1.0" - signal-exit: "npm:^3.0.2" - checksum: 10/5b675c5a59763bf26e604289eab35711525f11388d77f409453904e1e69c0d37ae5889295706b2c81d23bd780165084d040f9b68fffc32cc921519031c4fa4af - languageName: node - linkType: hard - -"ret@npm:~0.1.10": - version: 0.1.15 - resolution: "ret@npm:0.1.15" - checksum: 10/07c9e7619b4c86053fa57689bf7606b5a40fc1231fc87682424d0b3e296641cc19c218c3b8a8917305fbcca3bfc43038a5b6a63f54755c1bbca2f91857253b03 - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 10/1f914879f97e7ee931ad05fe3afa629bd55270fc6cf1c1e589b6a99fab96d15daad0fa1a52a00c729ec0078045fe3e399bd4fd0c93bcc906957bdc17f89cb8e6 - languageName: node - linkType: hard - -"retry@npm:^0.13.1": - version: 0.13.1 - resolution: "retry@npm:0.13.1" - checksum: 10/6125ec2e06d6e47e9201539c887defba4e47f63471db304c59e4b82fc63c8e89ca06a77e9d34939a9a42a76f00774b2f46c0d4a4cbb3e287268bd018ed69426d - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: 10/14222c9e1d3f9ae01480c50d96057228a8524706db79cdeb5a2ce5bb7070dd9f409a6f84a02cbef8cdc80d39aef86f2dd03d155188a1300c599b05437dcd2ffb - languageName: node - linkType: hard - -"rfdc@npm:^1.3.0": - version: 1.3.0 - resolution: "rfdc@npm:1.3.0" - checksum: 10/76dedd9700cdf132947fde7ce1a8838c9cbb7f3e8f9188af0aaf97194cce745f42094dd2cf547426934cc83252ee2c0e432b2e0222a4415ab0db32de82665c69 - languageName: node - linkType: hard - -"rimraf@npm:^2.6.3": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: ./bin.js - checksum: 10/4586c296c736483e297da7cffd19475e4a3e41d07b1ae124aad5d687c79e4ffa716bdac8732ed1db942caf65271cee9dd39f8b639611de161a2753e2112ffe1d - languageName: node - linkType: hard - -"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: bin.js - checksum: 10/063ffaccaaaca2cfd0ef3beafb12d6a03dd7ff1260d752d62a6077b5dfff6ae81bea571f655bb6b589d366930ec1bdd285d40d560c0dae9b12f125e54eb743d5 - languageName: node - linkType: hard - -"rimraf@npm:^6.0.1": - version: 6.0.1 - resolution: "rimraf@npm:6.0.1" - dependencies: - glob: "npm:^11.0.0" - package-json-from-dist: "npm:^1.0.0" - bin: - rimraf: dist/esm/bin.mjs - checksum: 10/0eb7edf08aa39017496c99ba675552dda11a20811ba78f8232da2ba945308c91e9cd673f95998b1a8202bc7436d33390831d23ea38ae52751038d56373ad99e2 - languageName: node - linkType: hard - -"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": - version: 2.0.2 - resolution: "ripemd160@npm:2.0.2" - dependencies: - hash-base: "npm:^3.0.0" - inherits: "npm:^2.0.1" - checksum: 10/006accc40578ee2beae382757c4ce2908a826b27e2b079efdcd2959ee544ddf210b7b5d7d5e80467807604244e7388427330f5c6d4cd61e6edaddc5773ccc393 - languageName: node - linkType: hard - -"rlp@npm:^2.2.3, rlp@npm:^2.2.4": - version: 2.2.7 - resolution: "rlp@npm:2.2.7" - dependencies: - bn.js: "npm:^5.2.0" - bin: - rlp: bin/rlp - checksum: 10/cf1919a2dc99f336191b3363b76299db567c192b7ee3c6f5c722728c34f65577883c9c88eeb7a1bfcbc26693c8a4f1fb0662e79ee86f0c98dd258d6987303498 - languageName: node - linkType: hard - -"rollup-plugin-terser@npm:^7.0.0": - version: 7.0.2 - resolution: "rollup-plugin-terser@npm:7.0.2" - dependencies: - "@babel/code-frame": "npm:^7.10.4" - jest-worker: "npm:^26.2.1" - serialize-javascript: "npm:^4.0.0" - terser: "npm:^5.0.0" - peerDependencies: - rollup: ^2.0.0 - checksum: 10/af84bb7a7a894cd00852b6486528dfb8653cf94df4c126f95f389a346f401d054b08c46bee519a2ab6a22b33804d1d6ac6d8c90b1b2bf8fffb097eed73fc3c72 - languageName: node - linkType: hard - -"rollup@npm:^2.43.1": - version: 2.79.1 - resolution: "rollup@npm:2.79.1" - dependencies: - fsevents: "npm:~2.3.2" - dependenciesMeta: - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10/df087b701304432f30922bbee5f534ab189aa6938bd383b5686c03147e0d00cd1789ea10a462361326ce6b6ebe448ce272ad3f3cc40b82eeb3157df12f33663c - languageName: node - linkType: hard - -"rollup@npm:^4.20.0": - version: 4.24.0 - resolution: "rollup@npm:4.24.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.24.0" - "@rollup/rollup-android-arm64": "npm:4.24.0" - "@rollup/rollup-darwin-arm64": "npm:4.24.0" - "@rollup/rollup-darwin-x64": "npm:4.24.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.24.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.24.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.24.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.24.0" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.24.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.24.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.24.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.24.0" - "@rollup/rollup-linux-x64-musl": "npm:4.24.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.24.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.24.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.24.0" - "@types/estree": "npm:1.0.6" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-powerpc64le-gnu": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10/291dce8f180628a73d6749119a3e50aa917c416075302bc6f6ac655affc7f0ce9d7f025bef7318d424d0c5623dcb83e360f9ea0125273b6a2285c232172800cc - languageName: node - linkType: hard - -"rpc-websockets@npm:^9.0.2": - version: 9.0.2 - resolution: "rpc-websockets@npm:9.0.2" - dependencies: - "@swc/helpers": "npm:^0.5.11" - "@types/uuid": "npm:^8.3.4" - "@types/ws": "npm:^8.2.2" - buffer: "npm:^6.0.3" - bufferutil: "npm:^4.0.1" - eventemitter3: "npm:^5.0.1" - utf-8-validate: "npm:^5.0.2" - uuid: "npm:^8.3.2" - ws: "npm:^8.5.0" - dependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/d558958888cd3469fb8560840305352e59c9ffcd71c7a443c0c5710995ecc3c130b1473f5d4a9d316dbd408fa7473e0de720b875cf8c6ada2668cf8fac072859 - languageName: node - linkType: hard - -"rtl-css-js@npm:^1.16.1": - version: 1.16.1 - resolution: "rtl-css-js@npm:1.16.1" - dependencies: - "@babel/runtime": "npm:^7.1.2" - checksum: 10/fa6a3e1f73e65bf5763b8a051942477a0852ee072d29ebad0999f02556a73715e72374d9a31ddec3fe023b09702b56f8be3a5a0404816e795ab86ea879183e02 - languageName: node - linkType: hard - -"run-applescript@npm:^7.0.0": - version: 7.0.0 - resolution: "run-applescript@npm:7.0.0" - checksum: 10/b02462454d8b182ad4117e5d4626e9e6782eb2072925c9fac582170b0627ae3c1ea92ee9b2df7daf84b5e9ffe14eb1cf5fb70bc44b15c8a0bfcdb47987e2410c - languageName: node - linkType: hard - -"run-async@npm:^2.4.0": - version: 2.4.1 - resolution: "run-async@npm:2.4.1" - checksum: 10/c79551224dafa26ecc281cb1efad3510c82c79116aaf681f8a931ce70fdf4ca880d58f97d3b930a38992c7aad7955a08e065b32ec194e1dd49d7790c874ece50 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10/cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d - languageName: node - linkType: hard - -"rxjs@npm:^7.5.5": - version: 7.8.1 - resolution: "rxjs@npm:7.8.1" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10/b10cac1a5258f885e9dd1b70d23c34daeb21b61222ee735d2ec40a8685bdca40429000703a44f0e638c27a684ac139e1c37e835d2a0dc16f6fc061a138ae3abb - languageName: node - linkType: hard - -"sade@npm:^1.7.3": - version: 1.8.1 - resolution: "sade@npm:1.8.1" - dependencies: - mri: "npm:^1.1.0" - checksum: 10/1c67ba03c94083e0ae307ff5564ecb86c2104c0f558042fdaa40ea0054f91a63a9783f14069870f2f784336adabb70f90f22a84dc457b5a25e859aaadefe0910 - languageName: node - linkType: hard - -"safe-array-concat@npm:^1.0.0, safe-array-concat@npm:^1.1.2": - version: 1.1.2 - resolution: "safe-array-concat@npm:1.1.2" - dependencies: - call-bind: "npm:^1.0.7" - get-intrinsic: "npm:^1.2.4" - has-symbols: "npm:^1.0.3" - isarray: "npm:^2.0.5" - checksum: 10/a54f8040d7cb696a1ee38d19cc71ab3cfb654b9b81bae00c6459618cfad8214ece7e6666592f9c925aafef43d0a20c5e6fbb3413a2b618e1ce9d516a2e6dcfc5 - languageName: node - linkType: hard - -"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: 10/7eb5b48f2ed9a594a4795677d5a150faa7eb54483b2318b568dc0c4fc94092a6cce5be02c7288a0500a156282f5276d5688bce7259299568d1053b2150ef374a - languageName: node - linkType: hard - -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 - languageName: node - linkType: hard - -"safe-regex-test@npm:^1.0.3": - version: 1.0.3 - resolution: "safe-regex-test@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.6" - es-errors: "npm:^1.3.0" - is-regex: "npm:^1.1.4" - checksum: 10/b04de61114b10274d92e25b6de7ccb5de07f11ea15637ff636de4b5190c0f5cd8823fe586dde718504cf78055437d70fd8804976894df502fcf5a210c970afb3 - languageName: node - linkType: hard - -"safe-regex@npm:^2.1.1": - version: 2.1.1 - resolution: "safe-regex@npm:2.1.1" - dependencies: - regexp-tree: "npm:~0.1.1" - checksum: 10/180d264110cdac9935877e5c37d17b89bd7e3a9bac982439e61517e4e0dfb0821e89ed49cb84c2d9690d18b33a0edf46d4decc6989e295ba2c866c08ed8b441a - languageName: node - linkType: hard - -"safe-stable-stringify@npm:^2.1.0, safe-stable-stringify@npm:^2.3.1": - version: 2.4.3 - resolution: "safe-stable-stringify@npm:2.4.3" - checksum: 10/a6c192bbefe47770a11072b51b500ed29be7b1c15095371c1ee1dc13e45ce48ee3c80330214c56764d006c485b88bd0b24940d868948170dddc16eed312582d8 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10/7eaf7a0cf37cc27b42fb3ef6a9b1df6e93a1c6d98c6c6702b02fe262d5fcbd89db63320793b99b21cb5348097d0a53de81bd5f4e8b86e20cc9412e3f1cfb4e83 - languageName: node - linkType: hard - -"sanitize.css@npm:*": - version: 13.0.0 - resolution: "sanitize.css@npm:13.0.0" - checksum: 10/508cde59d1c99a885806387ca8350c594c4211cab16804fe66ed75cd7e1ba7ebd4079224128b1aea4d4227f0d1add3e83a85a51a6a7e4419c083f4cce70d010f - languageName: node - linkType: hard - -"sass-loader@npm:^12.3.0": - version: 12.6.0 - resolution: "sass-loader@npm:12.6.0" - dependencies: - klona: "npm:^2.0.4" - neo-async: "npm:^2.6.2" - peerDependencies: - fibers: ">= 3.1.0" - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - sass: ^1.3.0 - sass-embedded: "*" - webpack: ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - checksum: 10/1a45bc2096644b7eebfff4095eb43fbbd620e86a9e7c1bcbb8f0b51acb3dbffb5d7020754f40690dfe95179fabbc7c3f310f38a61e0e2e7e4e986eeb7bb2c637 - languageName: node - linkType: hard - -"sax@npm:~1.2.4": - version: 1.2.4 - resolution: "sax@npm:1.2.4" - checksum: 10/09b79ff6dc09689a24323352117c94593c69db348997b2af0edbd82fa08aba47d778055bf9616b57285bb73d25d790900c044bf631a8f10c8252412e3f3fe5dd - languageName: node - linkType: hard - -"saxes@npm:^5.0.1": - version: 5.0.1 - resolution: "saxes@npm:5.0.1" - dependencies: - xmlchars: "npm:^2.2.0" - checksum: 10/148b5f98fdd45df25fa1abef35d72cdf6457ac5aef3b7d59d60f770af09d8cf6e7e3a074197071222441d68670fd3198590aba9985e37c4738af2df2f44d0686 - languageName: node - linkType: hard - -"saxes@npm:^6.0.0": - version: 6.0.0 - resolution: "saxes@npm:6.0.0" - dependencies: - xmlchars: "npm:^2.2.0" - checksum: 10/97b50daf6ca3a153e89842efa18a862e446248296622b7473c169c84c823ee8a16e4a43bac2f73f11fc8cb9168c73fbb0d73340f26552bac17970e9052367aa9 - languageName: node - linkType: hard - -"sc-istanbul@npm:^0.4.5": - version: 0.4.6 - resolution: "sc-istanbul@npm:0.4.6" - dependencies: - abbrev: "npm:1.0.x" - async: "npm:1.x" - escodegen: "npm:1.8.x" - esprima: "npm:2.7.x" - glob: "npm:^5.0.15" - handlebars: "npm:^4.0.1" - js-yaml: "npm:3.x" - mkdirp: "npm:0.5.x" - nopt: "npm:3.x" - once: "npm:1.x" - resolve: "npm:1.1.x" - supports-color: "npm:^3.1.0" - which: "npm:^1.1.1" - wordwrap: "npm:^1.0.0" - bin: - istanbul: lib/cli.js - checksum: 10/69acccb8ef3af117a71a57a4a1767ce845e62d1d6ff3d6fd2b5e0dc02746772c352bebee67fd0d0bb805a864bd4753741b118690955955bf34c990c3db36c0f8 - languageName: node - linkType: hard - -"scheduler@npm:^0.23.2": - version: 0.23.2 - resolution: "scheduler@npm:0.23.2" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10/e8d68b89d18d5b028223edf090092846868a765a591944760942b77ea1f69b17235f7e956696efbb62c8130ab90af7e0949bfb8eba7896335507317236966bc9 - languageName: node - linkType: hard - -"schema-utils@npm:2.7.0": - version: 2.7.0 - resolution: "schema-utils@npm:2.7.0" - dependencies: - "@types/json-schema": "npm:^7.0.4" - ajv: "npm:^6.12.2" - ajv-keywords: "npm:^3.4.1" - checksum: 10/e5afb6ecf8e9c63ce5f964cd8f2a2e7bdc8c3a63f6bc7dd5cfdc475aa90c1b9ade1555a749519c1673a0bfa203a12e04499e7d6d956163f8e7a77aaa3f12935c - languageName: node - linkType: hard - -"schema-utils@npm:^2.6.5": - version: 2.7.1 - resolution: "schema-utils@npm:2.7.1" - dependencies: - "@types/json-schema": "npm:^7.0.5" - ajv: "npm:^6.12.4" - ajv-keywords: "npm:^3.5.2" - checksum: 10/86c3038798981dbc702d5f6a86d4e4a308a2ec6e8eb1bf7d1a3ea95cb3f1972491833b76ce1c86a068652417019126d5b68219c33a9ad069358dd10429d4096d - languageName: node - linkType: hard - -"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": - version: 3.3.0 - resolution: "schema-utils@npm:3.3.0" - dependencies: - "@types/json-schema": "npm:^7.0.8" - ajv: "npm:^6.12.5" - ajv-keywords: "npm:^3.5.2" - checksum: 10/2c7bbb1da967fdfd320e6cea538949006ec6e8c13ea560a4f94ff2c56809a8486fa5ec419e023452501a6befe1ca381e409c2798c24f4993c7c4094d97fdb258 - languageName: node - linkType: hard - -"schema-utils@npm:^4.0.0": - version: 4.2.0 - resolution: "schema-utils@npm:4.2.0" - dependencies: - "@types/json-schema": "npm:^7.0.9" - ajv: "npm:^8.9.0" - ajv-formats: "npm:^2.1.1" - ajv-keywords: "npm:^5.1.0" - checksum: 10/808784735eeb153ab7f3f787f840aa3bc63f423d2a5a7e96c9e70a0e53d0bc62d7b37ea396fc598ce19196e4fb86a72f897154b7c6ce2358bbc426166f205e14 - languageName: node - linkType: hard - -"screenfull@npm:^5.1.0": - version: 5.2.0 - resolution: "screenfull@npm:5.2.0" - checksum: 10/b8b4b8010f48889341ad1981ca9e6e02db1f10dec686244d95bd2bfde47451059f5ba4c744449913b10f021f14f79d374987a873b6086eb488295962ba50381e - languageName: node - linkType: hard - -"scroll-into-view-if-needed@npm:^2.2.28": - version: 2.2.31 - resolution: "scroll-into-view-if-needed@npm:2.2.31" - dependencies: - compute-scroll-into-view: "npm:^1.0.20" - checksum: 10/8650d851b52e0321aeea4384cd47a6983592a2c6903604761c514ae4e0a7261b1a5bdab89910ad83ae9bf31692ec33a30272c1254b995871498b8dff2db2b02a - languageName: node - linkType: hard - -"scrypt-js@npm:3.0.1, scrypt-js@npm:^3.0.0": - version: 3.0.1 - resolution: "scrypt-js@npm:3.0.1" - checksum: 10/2f8aa72b7f76a6f9c446bbec5670f80d47497bccce98474203d89b5667717223eeb04a50492ae685ed7adc5a060fc2d8f9fd988f8f7ebdaf3341967f3aeff116 - languageName: node - linkType: hard - -"scuid@npm:^1.1.0": - version: 1.1.0 - resolution: "scuid@npm:1.1.0" - checksum: 10/cd094ac3718b0070a222f9a499b280c698fdea10268cc163fa244421099544c1766dd893fdee0e2a8eba5d53ab9d0bcb11067bedff166665030fa6fda25a096b - languageName: node - linkType: hard - -"secp256k1@npm:4.0.4": - version: 4.0.4 - resolution: "secp256k1@npm:4.0.4" - dependencies: - elliptic: "npm:^6.5.7" - node-addon-api: "npm:^5.0.0" - node-gyp: "npm:latest" - node-gyp-build: "npm:^4.2.0" - checksum: 10/45000f348c853df7c1e2b67c48efb062ae78c0620ab1a5cfb02fa20d3aad39c641f4e7a18b3de3b54a7c0cc1e0addeb8ecd9d88bc332e92df17a92b60c36122a - languageName: node - linkType: hard - -"secure-json-parse@npm:^2.4.0": - version: 2.7.0 - resolution: "secure-json-parse@npm:2.7.0" - checksum: 10/974386587060b6fc5b1ac06481b2f9dbbb0d63c860cc73dc7533f27835fdb67b0ef08762dbfef25625c15bc0a0c366899e00076cb0d556af06b71e22f1dede4c - languageName: node - linkType: hard - -"selderee@npm:^0.6.0": - version: 0.6.0 - resolution: "selderee@npm:0.6.0" - dependencies: - parseley: "npm:^0.7.0" - checksum: 10/a1039c0bb6f22faa3f775ceaffc32be096a458b97d8f6e8b94373b9d2547ed661efadffc15cd33e89ed39bfcb14c866fe1a1a6219369458338253fa04ddf8759 - languageName: node - linkType: hard - -"select-hose@npm:^2.0.0": - version: 2.0.0 - resolution: "select-hose@npm:2.0.0" - checksum: 10/08cdd629a394d20e9005e7956f0624307c702cf950cc0458953e9b87ea961d3b1b72ac02266bdb93ac1eec4fcf42b41db9cabe93aa2b7683d71513d133c44fb5 - languageName: node - linkType: hard - -"selfsigned@npm:^2.1.1": - version: 2.1.1 - resolution: "selfsigned@npm:2.1.1" - dependencies: - node-forge: "npm:^1" - checksum: 10/6005206e0d005448274aceceaded5195b944f67a42b72d212a6169d2e5f4bdc87c15a3fe45732c544db8c7175702091aaf95403ad6632585294a6ec8cca63638 - languageName: node - linkType: hard - -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0": - version: 5.7.1 - resolution: "semver@npm:5.7.1" - bin: - semver: ./bin/semver - checksum: 10/fbc71cf00736480ca0dd67f2527cda6e0fde5447af00bd2ce06cb522d510216603a63ed0c6c87d8904507c1a4e8113e628a71424ebd9e0fd7d345ee8ed249690 - languageName: node - linkType: hard - -"semver@npm:7.3.5": - version: 7.3.5 - resolution: "semver@npm:7.3.5" - dependencies: - lru-cache: "npm:^6.0.0" - bin: - semver: bin/semver.js - checksum: 10/22854378594943f2988ee853c02a7471dd02eba7bf75e286b98538114590a148dd59b22775edf42fcfb354438f304b8f32a53c136d228e99068ac52c60259324 - languageName: node - linkType: hard - -"semver@npm:7.5.4, semver@npm:~7.5.4": - version: 7.5.4 - resolution: "semver@npm:7.5.4" - dependencies: - lru-cache: "npm:^6.0.0" - bin: - semver: bin/semver.js - checksum: 10/985dec0d372370229a262c737063860fabd4a1c730662c1ea3200a2f649117761a42184c96df62a0e885e76fbd5dace41087d6c1ac0351b13c0df5d6bcb1b5ac - languageName: node - linkType: hard - -"semver@npm:7.7.1": - version: 7.7.1 - resolution: "semver@npm:7.7.1" - bin: - semver: bin/semver.js - checksum: 10/4cfa1eb91ef3751e20fc52e47a935a0118d56d6f15a837ab814da0c150778ba2ca4f1a4d9068b33070ea4273629e615066664c2cfcd7c272caf7a8a0f6518b2c - languageName: node - linkType: hard - -"semver@npm:^5.6.0": - version: 5.7.2 - resolution: "semver@npm:5.7.2" - bin: - semver: bin/semver - checksum: 10/fca14418a174d4b4ef1fecb32c5941e3412d52a4d3d85165924ce3a47fbc7073372c26faf7484ceb4bbc2bde25880c6b97e492473dc7e9708fdfb1c6a02d546e - languageName: node - linkType: hard - -"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.1.2, semver@npm:^6.3.0, semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" - bin: - semver: bin/semver.js - checksum: 10/1ef3a85bd02a760c6ef76a45b8c1ce18226de40831e02a00bad78485390b98b6ccaa31046245fc63bba4a47a6a592b6c7eedc65cc47126e60489f9cc1ce3ed7e - languageName: node - linkType: hard - -"semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2, semver@npm:^7.6.3": - version: 7.6.3 - resolution: "semver@npm:7.6.3" - bin: - semver: bin/semver.js - checksum: 10/36b1fbe1a2b6f873559cd57b238f1094a053dbfd997ceeb8757d79d1d2089c56d1321b9f1069ce263dc64cfa922fa1d2ad566b39426fe1ac6c723c1487589e10 - languageName: node - linkType: hard - -"semver@npm:^7.7.1": - version: 7.7.2 - resolution: "semver@npm:7.7.2" - bin: - semver: bin/semver.js - checksum: 10/7a24cffcaa13f53c09ce55e05efe25cd41328730b2308678624f8b9f5fc3093fc4d189f47950f0b811ff8f3c3039c24a2c36717ba7961615c682045bf03e1dda - languageName: node - linkType: hard - -"send@npm:0.18.0": - version: 0.18.0 - resolution: "send@npm:0.18.0" - dependencies: - debug: "npm:2.6.9" - depd: "npm:2.0.0" - destroy: "npm:1.2.0" - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - etag: "npm:~1.8.1" - fresh: "npm:0.5.2" - http-errors: "npm:2.0.0" - mime: "npm:1.6.0" - ms: "npm:2.1.3" - on-finished: "npm:2.4.1" - range-parser: "npm:~1.2.1" - statuses: "npm:2.0.1" - checksum: 10/ec66c0ad109680ad8141d507677cfd8b4e40b9559de23191871803ed241718e99026faa46c398dcfb9250676076573bd6bfe5d0ec347f88f4b7b8533d1d391cb - languageName: node - linkType: hard - -"sentence-case@npm:^3.0.4": - version: 3.0.4 - resolution: "sentence-case@npm:3.0.4" - dependencies: - no-case: "npm:^3.0.4" - tslib: "npm:^2.0.3" - upper-case-first: "npm:^2.0.2" - checksum: 10/3cfe6c0143e649132365695706702d7f729f484fa7b25f43435876efe7af2478243eefb052bacbcce10babf9319fd6b5b6bc59b94c80a1c819bcbb40651465d5 - languageName: node - linkType: hard - -"serialize-error@npm:8.1.0": - version: 8.1.0 - resolution: "serialize-error@npm:8.1.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10/2eef236d50edd2d7926e602c14fb500dc3a125ee52e9f08f67033181b8e0be5d1122498bdf7c23c80683cddcad083a27974e9e7111ce23165f4d3bcdd6d65102 - languageName: node - linkType: hard - -"serialize-javascript@npm:^4.0.0": - version: 4.0.0 - resolution: "serialize-javascript@npm:4.0.0" - dependencies: - randombytes: "npm:^2.1.0" - checksum: 10/df6809168973a84facade7d73e2d6dc418f5dee704d1e6cbe79e92fdb4c10af55237e99d2e67881ae3b29aa96ba596a0dfec4e609bd289ab8ec93c5ae78ede8e - languageName: node - linkType: hard - -"serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.1, serialize-javascript@npm:^6.0.2": - version: 6.0.2 - resolution: "serialize-javascript@npm:6.0.2" - dependencies: - randombytes: "npm:^2.1.0" - checksum: 10/445a420a6fa2eaee4b70cbd884d538e259ab278200a2ededd73253ada17d5d48e91fb1f4cd224a236ab62ea7ba0a70c6af29fc93b4f3d3078bf7da1c031fde58 - languageName: node - linkType: hard - -"serve-index@npm:^1.9.1": - version: 1.9.1 - resolution: "serve-index@npm:1.9.1" - dependencies: - accepts: "npm:~1.3.4" - batch: "npm:0.6.1" - debug: "npm:2.6.9" - escape-html: "npm:~1.0.3" - http-errors: "npm:~1.6.2" - mime-types: "npm:~2.1.17" - parseurl: "npm:~1.3.2" - checksum: 10/2adce2878d7e30f197e66f30e39f4a404d9ae39295c0c13849bb25e7cf976b93e883204739efd1510559588bed56f8101e32191cbe75f374c6e1e803852194cb - languageName: node - linkType: hard - -"serve-static@npm:1.15.0": - version: 1.15.0 - resolution: "serve-static@npm:1.15.0" - dependencies: - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - parseurl: "npm:~1.3.3" - send: "npm:0.18.0" - checksum: 10/699b2d4c29807a51d9b5e0f24955346911437aebb0178b3c4833ad30d3eca93385ff9927254f5c16da345903cad39d9cd4a532198c95a5129cc4ed43911b15a4 - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 10/8980ebf7ae9eb945bb036b6e283c547ee783a1ad557a82babf758a065e2fb6ea337fd82cac30dd565c1e606e423f30024a19fff7afbf4977d784720c4026a8ef - languageName: node - linkType: hard - -"set-function-length@npm:^1.2.1": - version: 1.2.2 - resolution: "set-function-length@npm:1.2.2" - dependencies: - define-data-property: "npm:^1.1.4" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.2" - checksum: 10/505d62b8e088468917ca4e3f8f39d0e29f9a563b97dbebf92f4bd2c3172ccfb3c5b8e4566d5fcd00784a00433900e7cb8fbc404e2dbd8c3818ba05bb9d4a8a6d - languageName: node - linkType: hard - -"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": - version: 2.0.2 - resolution: "set-function-name@npm:2.0.2" - dependencies: - define-data-property: "npm:^1.1.4" - es-errors: "npm:^1.3.0" - functions-have-names: "npm:^1.2.3" - has-property-descriptors: "npm:^1.0.2" - checksum: 10/c7614154a53ebf8c0428a6c40a3b0b47dac30587c1a19703d1b75f003803f73cdfa6a93474a9ba678fa565ef5fbddc2fae79bca03b7d22ab5fd5163dbe571a74 - languageName: node - linkType: hard - -"set-harmonic-interval@npm:^1.0.1": - version: 1.0.1 - resolution: "set-harmonic-interval@npm:1.0.1" - checksum: 10/14b9ce98625af9e0d80165a5c8ceb76ce1206df641197e020780e570f268f5427961138d3f47591962e2626b498a051a4488eaa646e5473373f843d7e9e468d4 - languageName: node - linkType: hard - -"setimmediate@npm:^1.0.4, setimmediate@npm:^1.0.5": - version: 1.0.5 - resolution: "setimmediate@npm:1.0.5" - checksum: 10/76e3f5d7f4b581b6100ff819761f04a984fa3f3990e72a6554b57188ded53efce2d3d6c0932c10f810b7c59414f85e2ab3c11521877d1dea1ce0b56dc906f485 - languageName: node - linkType: hard - -"setprototypeof@npm:1.1.0": - version: 1.1.0 - resolution: "setprototypeof@npm:1.1.0" - checksum: 10/02d2564e02a260551bab3ec95358dcfde775fe61272b1b7c488de3676a4bb79f280b5668a324aebe0ec73f0d8ba408bc2d816a609ee5d93b1a7936b9d4ba1208 - languageName: node - linkType: hard - -"setprototypeof@npm:1.2.0": - version: 1.2.0 - resolution: "setprototypeof@npm:1.2.0" - checksum: 10/fde1630422502fbbc19e6844346778f99d449986b2f9cdcceb8326730d2f3d9964dbcb03c02aaadaefffecd0f2c063315ebea8b3ad895914bf1afc1747fc172e - languageName: node - linkType: hard - -"sha.js@npm:^2.4.0, sha.js@npm:^2.4.11, sha.js@npm:^2.4.8": - version: 2.4.11 - resolution: "sha.js@npm:2.4.11" - dependencies: - inherits: "npm:^2.0.1" - safe-buffer: "npm:^5.0.1" - bin: - sha.js: ./bin.js - checksum: 10/d833bfa3e0a67579a6ce6e1bc95571f05246e0a441dd8c76e3057972f2a3e098465687a4369b07e83a0375a88703577f71b5b2e966809e67ebc340dbedb478c7 - languageName: node - linkType: hard - -"sha1@npm:^1.1.1": - version: 1.1.1 - resolution: "sha1@npm:1.1.1" - dependencies: - charenc: "npm:>= 0.0.1" - crypt: "npm:>= 0.0.1" - checksum: 10/da9f47e949988e2f595ef19733fd1dc736866ef6de4e421a55c13b444c03ae532e528b7350ae6ea55d9fb053be61d4648ec2cd5250d46cfdbdf4f6b4e763713d - languageName: node - linkType: hard - -"shallowequal@npm:1.1.0, shallowequal@npm:^1.1.0": - version: 1.1.0 - resolution: "shallowequal@npm:1.1.0" - checksum: 10/f4c1de0837f106d2dbbfd5d0720a5d059d1c66b42b580965c8f06bb1db684be8783538b684092648c981294bf817869f743a066538771dbecb293df78f765e00 - languageName: node - linkType: hard - -"shebang-command@npm:^1.2.0": - version: 1.2.0 - resolution: "shebang-command@npm:1.2.0" - dependencies: - shebang-regex: "npm:^1.0.0" - checksum: 10/9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: "npm:^3.0.0" - checksum: 10/6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa - languageName: node - linkType: hard - -"shebang-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "shebang-regex@npm:1.0.0" - checksum: 10/404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 10/1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 - languageName: node - linkType: hard - -"shell-quote@npm:^1.7.3": - version: 1.8.1 - resolution: "shell-quote@npm:1.8.1" - checksum: 10/af19ab5a1ec30cb4b2f91fd6df49a7442d5c4825a2e269b3712eded10eedd7f9efeaab96d57829880733fc55bcdd8e9b1d8589b4befb06667c731d08145e274d - languageName: node - linkType: hard - -"shelljs@npm:^0.8.3, shelljs@npm:^0.8.5": - version: 0.8.5 - resolution: "shelljs@npm:0.8.5" - dependencies: - glob: "npm:^7.0.0" - interpret: "npm:^1.0.0" - rechoir: "npm:^0.6.2" - bin: - shjs: bin/shjs - checksum: 10/f2178274b97b44332bbe9ddb78161137054f55ecf701c7a99db9552cb5478fe279ad5f5131d8a7c2f0730e01ccf0c629d01094143f0541962ce1a3d0243d23f7 - languageName: node - linkType: hard - -"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": - version: 1.0.6 - resolution: "side-channel@npm:1.0.6" - dependencies: - call-bind: "npm:^1.0.7" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.4" - object-inspect: "npm:^1.13.1" - checksum: 10/eb10944f38cebad8ad643dd02657592fa41273ce15b8bfa928d3291aff2d30c20ff777cfe908f76ccc4551ace2d1245822fdc576657cce40e9066c638ca8fa4d - languageName: node - linkType: hard - -"siginfo@npm:^2.0.0": - version: 2.0.0 - resolution: "siginfo@npm:2.0.0" - checksum: 10/e93ff66c6531a079af8fb217240df01f980155b5dc408d2d7bebc398dd284e383eb318153bf8acd4db3c4fe799aa5b9a641e38b0ba3b1975700b1c89547ea4e7 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: 10/a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10/c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f - languageName: node - linkType: hard - -"signedsource@npm:^1.0.0": - version: 1.0.0 - resolution: "signedsource@npm:1.0.0" - checksum: 10/64b2c8d7a48de9009cfd3aff62bb7c88abf3b8e0421f17ebb1d7f5ca9cc9c3ad10f5a1e3ae6cd804e4e6121c87b668202ae9057065f058ddfbf34ea65f63945d - languageName: node - linkType: hard - -"simple-concat@npm:^1.0.0": - version: 1.0.1 - resolution: "simple-concat@npm:1.0.1" - checksum: 10/4d211042cc3d73a718c21ac6c4e7d7a0363e184be6a5ad25c8a1502e49df6d0a0253979e3d50dbdd3f60ef6c6c58d756b5d66ac1e05cda9cacd2e9fc59e3876a - languageName: node - linkType: hard - -"simple-get@npm:^3.0.3": - version: 3.1.1 - resolution: "simple-get@npm:3.1.1" - dependencies: - decompress-response: "npm:^4.2.0" - once: "npm:^1.3.1" - simple-concat: "npm:^1.0.0" - checksum: 10/94fa04e74077c2607142f7597af8409c6c8d1e9487b597ce1da6f824e732b3e51ef492e495a4d8a2a12a94780214d77a8d3bb81c2139b3ec4ce21b93224442c0 - languageName: node - linkType: hard - -"simplebar-react@npm:^2.3.6": - version: 2.4.3 - resolution: "simplebar-react@npm:2.4.3" - dependencies: - prop-types: "npm:^15.6.1" - simplebar: "npm:^5.3.9" - peerDependencies: - react: ^0.14.9 || ^15.3.0 || ^16.0.0-rc || ^16.0 || ^17.0 || ^18.0.0 - react-dom: ^0.14.9 || ^15.3.0 || ^16.0.0-rc || ^16.0 || ^17.0 || ^18.0.0 - checksum: 10/751aaa6a7fc4de273fe3dd7ad600f9ce3501554f1858fab11c4cb9c3572a5fb036c0eff96d5bd04c0c1ba73ed02e9bd0e7cf2e950a96a28e9847d89eb74c1470 - languageName: node - linkType: hard - -"simplebar@npm:^5.3.6, simplebar@npm:^5.3.9": - version: 5.3.9 - resolution: "simplebar@npm:5.3.9" - dependencies: - "@juggle/resize-observer": "npm:^3.3.1" - can-use-dom: "npm:^0.1.0" - core-js: "npm:^3.0.1" - lodash.debounce: "npm:^4.0.8" - lodash.memoize: "npm:^4.1.2" - lodash.throttle: "npm:^4.1.1" - checksum: 10/623b477cd17283ba7381a65ca6e6e7619fb3c0748acb9a52c3d62368eedd6295e96d2c73a5b48e396546df1e3b4f114a219432d2aaf7b99452d83ec7dcb23033 - languageName: node - linkType: hard - -"sinon@npm:^20.0.0": - version: 20.0.0 - resolution: "sinon@npm:20.0.0" - dependencies: - "@sinonjs/commons": "npm:^3.0.1" - "@sinonjs/fake-timers": "npm:^13.0.5" - "@sinonjs/samsam": "npm:^8.0.1" - diff: "npm:^7.0.0" - supports-color: "npm:^7.2.0" - checksum: 10/825cb36a58c0510cec03d9bef4fe66a12baf0e0cfdf1600423e3da1e6d57a03fe8161f4859340ea13d4c42e63da1724a260ef4c5ce119dc9ee075ad93b6e8bdd - languageName: node - linkType: hard - -"sirv@npm:^2.0.4": - version: 2.0.4 - resolution: "sirv@npm:2.0.4" - dependencies: - "@polka/url": "npm:^1.0.0-next.24" - mrmime: "npm:^2.0.0" - totalist: "npm:^3.0.0" - checksum: 10/24f42cf06895017e589c9d16fc3f1c6c07fe8b0dbafce8a8b46322cfba67b7f2498610183954cb0e9d089c8cb60002a7ee7e8bca6a91a0d7042bfbc3473c95c3 - languageName: node - linkType: hard - -"sisteransi@npm:^1.0.5": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: 10/aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 - languageName: node - linkType: hard - -"slash@npm:^2.0.0": - version: 2.0.0 - resolution: "slash@npm:2.0.0" - checksum: 10/512d4350735375bd11647233cb0e2f93beca6f53441015eea241fe784d8068281c3987fbaa93e7ef1c38df68d9c60013045c92837423c69115297d6169aa85e6 - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 10/94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c - languageName: node - linkType: hard - -"slash@npm:^4.0.0": - version: 4.0.0 - resolution: "slash@npm:4.0.0" - checksum: 10/da8e4af73712253acd21b7853b7e0dbba776b786e82b010a5bfc8b5051a1db38ed8aba8e1e8f400dd2c9f373be91eb1c42b66e91abb407ff42b10feece5e1d2d - languageName: node - linkType: hard - -"slice-ansi@npm:^3.0.0": - version: 3.0.0 - resolution: "slice-ansi@npm:3.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - astral-regex: "npm:^2.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - checksum: 10/5ec6d022d12e016347e9e3e98a7eb2a592213a43a65f1b61b74d2c78288da0aded781f665807a9f3876b9daa9ad94f64f77d7633a0458876c3a4fdc4eb223f24 - languageName: node - linkType: hard - -"slice-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "slice-ansi@npm:4.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - astral-regex: "npm:^2.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - checksum: 10/4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 - languageName: node - linkType: hard - -"slice-ansi@npm:^5.0.0": - version: 5.0.0 - resolution: "slice-ansi@npm:5.0.0" - dependencies: - ansi-styles: "npm:^6.0.0" - is-fullwidth-code-point: "npm:^4.0.0" - checksum: 10/7e600a2a55e333a21ef5214b987c8358fe28bfb03c2867ff2cbf919d62143d1812ac27b4297a077fdaf27a03da3678e49551c93e35f9498a3d90221908a1180e - languageName: node - linkType: hard - -"slick-carousel@npm:^1.8.1": - version: 1.8.1 - resolution: "slick-carousel@npm:1.8.1" - peerDependencies: - jquery: ">=1.8.0" - checksum: 10/b383e6f96b3bec573522467cfeeac1fce22d1cd53a68f5699cd3d62f0167777116b925dc48fbe64979a7a830777e4440036b8a7d4575c9ff8d18c3dd141b1ea2 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: 10/927484aa0b1640fd9473cee3e0a0bcad6fce93fd7bbc18bac9ad0c33686f5d2e2c422fba24b5899c184524af01e11dd2bd051c2bf2b07e47aff8ca72cbfc60d2 - languageName: node - linkType: hard - -"smooth-scroll-into-view-if-needed@npm:^1.1.33": - version: 1.1.33 - resolution: "smooth-scroll-into-view-if-needed@npm:1.1.33" - dependencies: - scroll-into-view-if-needed: "npm:^2.2.28" - checksum: 10/0b0975ae13bdd51135c29e7d10d081fb123ea949e1c75e9d9be16cfd883e46f26797de4204080ffd3ddf73d6607ab321f1c49d715ea47d69ea47bf3f2f241ac1 - languageName: node - linkType: hard - -"snake-case@npm:^3.0.4": - version: 3.0.4 - resolution: "snake-case@npm:3.0.4" - dependencies: - dot-case: "npm:^3.0.4" - tslib: "npm:^2.0.3" - checksum: 10/0a7a79900bbb36f8aaa922cf111702a3647ac6165736d5dc96d3ef367efc50465cac70c53cd172c382b022dac72ec91710608e5393de71f76d7142e6fd80e8a3 - languageName: node - linkType: hard - -"socket.io-client@npm:^4.5.1": - version: 4.7.4 - resolution: "socket.io-client@npm:4.7.4" - dependencies: - "@socket.io/component-emitter": "npm:~3.1.0" - debug: "npm:~4.3.2" - engine.io-client: "npm:~6.5.2" - socket.io-parser: "npm:~4.2.4" - checksum: 10/dff61e3e802424518ac95b55cf41bd0853644a63ece6a6104e815c836ae855b03901f0df83a0044567f653ef8da09177ae824fa17a1c2c188fbedfae21fb5827 - languageName: node - linkType: hard - -"socket.io-parser@npm:~4.2.4": - version: 4.2.4 - resolution: "socket.io-parser@npm:4.2.4" - dependencies: - "@socket.io/component-emitter": "npm:~3.1.0" - debug: "npm:~4.3.1" - checksum: 10/4be500a9ff7e79c50ec25af11048a3ed34b4c003a9500d656786a1e5bceae68421a8394cf3eb0aa9041f85f36c1a9a737617f4aee91a42ab4ce16ffb2aa0c89c - languageName: node - linkType: hard - -"sockjs@npm:^0.3.24": - version: 0.3.24 - resolution: "sockjs@npm:0.3.24" - dependencies: - faye-websocket: "npm:^0.11.3" - uuid: "npm:^8.3.2" - websocket-driver: "npm:^0.7.4" - checksum: 10/36312ec9772a0e536b69b72e9d1c76bd3d6ecf885c5d8fd6e59811485c916b8ce75f46ec57532f436975815ee14aa9a0e22ae3d9e5c0b18ea37b56d0aaaf439c - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "socks-proxy-agent@npm:7.0.0" - dependencies: - agent-base: "npm:^6.0.2" - debug: "npm:^4.3.3" - socks: "npm:^2.6.2" - checksum: 10/26c75d9c62a9ed3fd494df60e65e88da442f78e0d4bc19bfd85ac37bd2c67470d6d4bba5202e804561cda6674db52864c9e2a2266775f879bc8d89c1445a5f4c - languageName: node - linkType: hard - -"socks@npm:^2.6.2": - version: 2.7.1 - resolution: "socks@npm:2.7.1" - dependencies: - ip: "npm:^2.0.0" - smart-buffer: "npm:^4.2.0" - checksum: 10/5074f7d6a13b3155fa655191df1c7e7a48ce3234b8ccf99afa2ccb56591c195e75e8bb78486f8e9ea8168e95a29573cbaad55b2b5e195160ae4d2ea6811ba833 - languageName: node - linkType: hard - -"solady@npm:0.0.182": - version: 0.0.182 - resolution: "solady@npm:0.0.182" - checksum: 10/3bc02c37da3e791b366ecbfa1b28bf204926c206f3c36da59cc11c16b97775fa62720022a5b3b7849b4a5efda33bcc829a0a24a411782232e247c85bc945c971 - languageName: node - linkType: hard - -"solc-typed-ast@npm:18.2.4": - version: 18.2.4 - resolution: "solc-typed-ast@npm:18.2.4" - dependencies: - axios: "npm:^1.6.8" - commander: "npm:^12.0.0" - decimal.js: "npm:^10.4.3" - findup-sync: "npm:^5.0.0" - fs-extra: "npm:^11.2.0" - jsel: "npm:^1.1.6" - semver: "npm:^7.6.0" - solc: "npm:0.8.25" - src-location: "npm:^1.1.0" - web3-eth-abi: "npm:^4.2.0" - bin: - sol-ast-compile: dist/bin/compile.js - checksum: 10/cf3963fa00a52113eb6625319627949307bad655560e6663f6a086c6c852b0a4d6cef257a2757c773b18e184178767d423f0ade77a378bed44ddad467b82def0 - languageName: node - linkType: hard - -"solc@npm:0.8.25": - version: 0.8.25 - resolution: "solc@npm:0.8.25" - dependencies: - command-exists: "npm:^1.2.8" - commander: "npm:^8.1.0" - follow-redirects: "npm:^1.12.1" - js-sha3: "npm:0.8.0" - memorystream: "npm:^0.3.1" - semver: "npm:^5.5.0" - tmp: "npm:0.0.33" - bin: - solcjs: solc.js - checksum: 10/b11687ba3ff984005af308d7817be6fa5b61d0fae6c42e64d8b6b9f45a3018942809fdc6d6f0b964c625ce38979bce1d308e7b93bac1420a51de32c8e992e31a - languageName: node - linkType: hard - -"solc@npm:0.8.26": - version: 0.8.26 - resolution: "solc@npm:0.8.26" - dependencies: - command-exists: "npm:^1.2.8" - commander: "npm:^8.1.0" - follow-redirects: "npm:^1.12.1" - js-sha3: "npm:0.8.0" - memorystream: "npm:^0.3.1" - semver: "npm:^5.5.0" - tmp: "npm:0.0.33" - bin: - solcjs: solc.js - checksum: 10/30ef9c2687f727eb5bdd685c77b1a0b354e7d6ba7a080cfcdce5a89f25a1399ff7949fecef47768088d825588da230da0044b46f056fc36f3959c0e3d3c9a82b - languageName: node - linkType: hard - -"solhint-plugin-prettier@npm:^0.1.0": - version: 0.1.0 - resolution: "solhint-plugin-prettier@npm:0.1.0" - dependencies: - "@prettier/sync": "npm:^0.3.0" - prettier-linter-helpers: "npm:^1.0.0" - peerDependencies: - prettier: ^3.0.0 - prettier-plugin-solidity: ^1.0.0 - checksum: 10/241caa07b9d1570117cf0cc56371cc81c69fb17706dbc68136dfb112279c8c1cf815dbaa70c146acd06876e16d9a7385312b63302f2381868c02c3bdfa23715b - languageName: node - linkType: hard - -"solhint@npm:~5.0.2": - version: 5.0.5 - resolution: "solhint@npm:5.0.5" - dependencies: - "@solidity-parser/parser": "npm:^0.19.0" - ajv: "npm:^6.12.6" - antlr4: "npm:^4.13.1-patch-1" - ast-parents: "npm:^0.0.1" - chalk: "npm:^4.1.2" - commander: "npm:^10.0.0" - cosmiconfig: "npm:^8.0.0" - fast-diff: "npm:^1.2.0" - glob: "npm:^8.0.3" - ignore: "npm:^5.2.4" - js-yaml: "npm:^4.1.0" - latest-version: "npm:^7.0.0" - lodash: "npm:^4.17.21" - pluralize: "npm:^8.0.0" - prettier: "npm:^2.8.3" - semver: "npm:^7.5.2" - strip-ansi: "npm:^6.0.1" - table: "npm:^6.8.1" - text-table: "npm:^0.2.0" - dependenciesMeta: - prettier: - optional: true - bin: - solhint: solhint.js - checksum: 10/07cce3796e0123fda1e27bb0f81fb94290fb0d4bddc703a10236c81403a3a09fe1bfcbf37c583590778509546b92d43c0799456b4ae9dd183233fd8fe6e88554 - languageName: node - linkType: hard - -"solidity-ast@npm:^0.4.60": - version: 0.4.60 - resolution: "solidity-ast@npm:0.4.60" - checksum: 10/1811d4f5c3b767875819127a9eed125700840124d4d958a09f77cca33f224b4d075567344e366d12569fc6a1974798a30359fb817abf7cbaf320fbd7891e95bd - languageName: node - linkType: hard - -"solidity-coverage@npm:^0.8.16": - version: 0.8.16 - resolution: "solidity-coverage@npm:0.8.16" - dependencies: - "@ethersproject/abi": "npm:^5.0.9" - "@solidity-parser/parser": "npm:^0.20.1" - chalk: "npm:^2.4.2" - death: "npm:^1.1.0" - difflib: "npm:^0.2.4" - fs-extra: "npm:^8.1.0" - ghost-testrpc: "npm:^0.0.2" - global-modules: "npm:^2.0.0" - globby: "npm:^10.0.1" - jsonschema: "npm:^1.2.4" - lodash: "npm:^4.17.21" - mocha: "npm:^10.2.0" - node-emoji: "npm:^1.10.0" - pify: "npm:^4.0.1" - recursive-readdir: "npm:^2.2.2" - sc-istanbul: "npm:^0.4.5" - semver: "npm:^7.3.4" - shelljs: "npm:^0.8.3" - web3-utils: "npm:^1.3.6" - peerDependencies: - hardhat: ^2.11.0 - bin: - solidity-coverage: plugins/bin.js - checksum: 10/e63355e9ddfa9e998df1e63c2d790ec17896786554cb84f9d2cd6340dd471dd082806a169f42d64f80b52f4d695bdb8a01af8e675bd5cfa1683062df77d1e1fa - languageName: node - linkType: hard - -"sonic-boom@npm:^2.2.1": - version: 2.8.0 - resolution: "sonic-boom@npm:2.8.0" - dependencies: - atomic-sleep: "npm:^1.0.0" - checksum: 10/05351d9f44bac59b2a4ab42ee22bf81b8c3bbd22db20183d78d5f2067557eb623e0eaf93b2bc0f8417bee92ca372bc26e0d83e3bdb0ffebcc33738ac1c191876 - languageName: node - linkType: hard - -"sonic-boom@npm:^3.0.0, sonic-boom@npm:^3.7.0": - version: 3.7.0 - resolution: "sonic-boom@npm:3.7.0" - dependencies: - atomic-sleep: "npm:^1.0.0" - checksum: 10/6f64a9cf93fd8b7a7044f68597f80522bfacaf978d5e9f226c4e6f1c5dd00f07884a8f7f5fb6f45bb0b6951600629654d2db7a9a20b626b37f8f01d4b9161cfe - languageName: node - linkType: hard - -"source-list-map@npm:^2.0.0, source-list-map@npm:^2.0.1": - version: 2.0.1 - resolution: "source-list-map@npm:2.0.1" - checksum: 10/3918ffba5fe8447bc816800026fe707aab233d9d05a3487225d880e23b7e37ed455b4e1b844e05644f6ecc7c9b837c0cc32da54dd37f77c993370ebcdb049246 - languageName: node - linkType: hard - -"source-map-js@npm:^1.0.1, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 10/ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 - languageName: node - linkType: hard - -"source-map-loader@npm:^3.0.0": - version: 3.0.2 - resolution: "source-map-loader@npm:3.0.2" - dependencies: - abab: "npm:^2.0.5" - iconv-lite: "npm:^0.6.3" - source-map-js: "npm:^1.0.1" - peerDependencies: - webpack: ^5.0.0 - checksum: 10/70161b49a155008a4b3f5097d3c1638ddf244ec82d6dbf092be142cefd85316ee0d1f625f498598031053c4f2de4751657ca8c38ee8e61f6af97698fb4fc4d0b - languageName: node - linkType: hard - -"source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.20, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": - version: 0.5.21 - resolution: "source-map-support@npm:0.5.21" - dependencies: - buffer-from: "npm:^1.0.0" - source-map: "npm:^0.6.0" - checksum: 10/8317e12d84019b31e34b86d483dd41d6f832f389f7417faf8fc5c75a66a12d9686e47f589a0554a868b8482f037e23df9d040d29387eb16fa14cb85f091ba207 - languageName: node - linkType: hard - -"source-map@npm:0.5.6": - version: 0.5.6 - resolution: "source-map@npm:0.5.6" - checksum: 10/c62fe98e106c762307eea3a982242c1a76a31bc762da10fe2dda12252d423c163e0cd45d313330c8bd040cc5121702511138252308f72b8a9273825e81e4db30 - languageName: node - linkType: hard - -"source-map@npm:0.6.1, source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 10/59ef7462f1c29d502b3057e822cdbdae0b0e565302c4dd1a95e11e793d8d9d62006cdc10e0fd99163ca33ff2071360cf50ee13f90440806e7ed57d81cba2f7ff - languageName: node - linkType: hard - -"source-map@npm:^0.5.7": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 10/9b4ac749ec5b5831cad1f8cc4c19c4298ebc7474b24a0acf293e2f040f03f8eeccb3d01f12aa0f90cf46d555c887e03912b83a042c627f419bda5152d89c5269 - languageName: node - linkType: hard - -"source-map@npm:^0.7.3": - version: 0.7.4 - resolution: "source-map@npm:0.7.4" - checksum: 10/a0f7c9b797eda93139842fd28648e868a9a03ea0ad0d9fa6602a0c1f17b7fb6a7dcca00c144476cccaeaae5042e99a285723b1a201e844ad67221bf5d428f1dc - languageName: node - linkType: hard - -"source-map@npm:^0.8.0-beta.0": - version: 0.8.0-beta.0 - resolution: "source-map@npm:0.8.0-beta.0" - dependencies: - whatwg-url: "npm:^7.0.0" - checksum: 10/c02e22ab9f8b8e38655ba1e9abae9fe1f8ba216cbbea922718d5e2ea45821606a74f10edec1db9055e7f7cfd1e6a62e5eade67ec30c017a02f4c8e990accbc1c - languageName: node - linkType: hard - -"source-map@npm:~0.2.0": - version: 0.2.0 - resolution: "source-map@npm:0.2.0" - dependencies: - amdefine: "npm:>=0.0.4" - checksum: 10/616b67d874a4bce443d285db07f8e4c6b1a1e60df17ea4e4d357c8173bd4b165c97386ee0675ef67afb9a9f1bdbd511368544febc4d92c8d8d1ebda57c4e7efb - languageName: node - linkType: hard - -"sourcemap-codec@npm:^1.4.8": - version: 1.4.8 - resolution: "sourcemap-codec@npm:1.4.8" - checksum: 10/6fc57a151e982b5c9468362690c6d062f3a0d4d8520beb68a82f319c79e7a4d7027eeb1e396de0ecc2cd19491e1d602b2d06fd444feac9b63dd43fea4c55a857 - languageName: node - linkType: hard - -"space-separated-tokens@npm:^2.0.0": - version: 2.0.2 - resolution: "space-separated-tokens@npm:2.0.2" - checksum: 10/202e97d7ca1ba0758a0aa4fe226ff98142073bcceeff2da3aad037968878552c3bbce3b3231970025375bbba5aee00c5b8206eda408da837ab2dc9c0f26be990 - languageName: node - linkType: hard - -"spawndamnit@npm:^3.0.1": - version: 3.0.1 - resolution: "spawndamnit@npm:3.0.1" - dependencies: - cross-spawn: "npm:^7.0.5" - signal-exit: "npm:^4.0.1" - checksum: 10/47d88a7f1e5691e13e435eddc3d34123c2f7746e2853e91bfac5ea7c6e3bb4b1d1995223b25f7a8745871510d92f63ecd3c9fa02aa2896ac0c79fb618eb08bbe - languageName: node - linkType: hard - -"spdx-correct@npm:^3.0.0": - version: 3.2.0 - resolution: "spdx-correct@npm:3.2.0" - dependencies: - spdx-expression-parse: "npm:^3.0.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 10/cc2e4dbef822f6d12142116557d63f5facf3300e92a6bd24e907e4865e17b7e1abd0ee6b67f305cae6790fc2194175a24dc394bfcc01eea84e2bdad728e9ae9a - languageName: node - linkType: hard - -"spdx-exceptions@npm:^2.1.0": - version: 2.3.0 - resolution: "spdx-exceptions@npm:2.3.0" - checksum: 10/cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^3.0.0": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" - dependencies: - spdx-exceptions: "npm:^2.1.0" - spdx-license-ids: "npm:^3.0.0" - checksum: 10/a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde - languageName: node - linkType: hard - -"spdx-license-ids@npm:^3.0.0": - version: 3.0.13 - resolution: "spdx-license-ids@npm:3.0.13" - checksum: 10/6328c516e958ceee80362dc657a58cab01c7fdb4667a1a4c1a3e91d069983977f87971340ee857eb66f65079b5d8561e56dc91510802cd7bebaae7632a6aa7fa - languageName: node - linkType: hard - -"spdy-transport@npm:^3.0.0": - version: 3.0.0 - resolution: "spdy-transport@npm:3.0.0" - dependencies: - debug: "npm:^4.1.0" - detect-node: "npm:^2.0.4" - hpack.js: "npm:^2.1.6" - obuf: "npm:^1.1.2" - readable-stream: "npm:^3.0.6" - wbuf: "npm:^1.7.3" - checksum: 10/b93b606b209ca785456bd850b8925f21a76522ee5b46701235ecff3eba17686560c27575f91863842dc843a39772f6d2f5a8755df9eaff0924d20598df18828d - languageName: node - linkType: hard - -"spdy@npm:^4.0.2": - version: 4.0.2 - resolution: "spdy@npm:4.0.2" - dependencies: - debug: "npm:^4.1.0" - handle-thing: "npm:^2.0.0" - http-deceiver: "npm:^1.2.7" - select-hose: "npm:^2.0.0" - spdy-transport: "npm:^3.0.0" - checksum: 10/d29b89e48e7d762e505a2f83b1bc2c92268bd518f1b411864ab42a9e032e387d10467bbce0d8dbf8647bf4914a063aa1d303dff85e248f7a57f81a7b18ac34ef - languageName: node - linkType: hard - -"split-on-first@npm:^1.0.0": - version: 1.1.0 - resolution: "split-on-first@npm:1.1.0" - checksum: 10/16ff85b54ddcf17f9147210a4022529b343edbcbea4ce977c8f30e38408b8d6e0f25f92cd35b86a524d4797f455e29ab89eb8db787f3c10708e0b47ebf528d30 - languageName: node - linkType: hard - -"split2@npm:^3.0.0, split2@npm:^3.2.2": - version: 3.2.2 - resolution: "split2@npm:3.2.2" - dependencies: - readable-stream: "npm:^3.0.0" - checksum: 10/a426e1e6718e2f7e50f102d5ec3525063d885e3d9cec021a81175fd3497fdb8b867a89c99e70bef4daeef4f2f5e544f7b92df8c1a30b4254e10a9cfdcc3dae87 - languageName: node - linkType: hard - -"split2@npm:^4.0.0": - version: 4.2.0 - resolution: "split2@npm:4.2.0" - checksum: 10/09bbefc11bcf03f044584c9764cd31a252d8e52cea29130950b26161287c11f519807c5e54bd9e5804c713b79c02cefe6a98f4688630993386be353e03f534ab - languageName: node - linkType: hard - -"split@npm:^1.0.0": - version: 1.0.1 - resolution: "split@npm:1.0.1" - dependencies: - through: "npm:2" - checksum: 10/12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a - languageName: node - linkType: hard - -"sponge-case@npm:^1.0.1": - version: 1.0.1 - resolution: "sponge-case@npm:1.0.1" - dependencies: - tslib: "npm:^2.0.3" - checksum: 10/64f53d930f63c5a9e59d4cae487c1ffa87d25eab682833b01d572cc885e7e3fdbad4f03409a41f03ecb27f1f8959432253eb48332c7007c3388efddb24ba2792 - languageName: node - linkType: hard - -"sprintf-js@npm:^1.1.1": - version: 1.1.3 - resolution: "sprintf-js@npm:1.1.3" - checksum: 10/e7587128c423f7e43cc625fe2f87e6affdf5ca51c1cc468e910d8aaca46bb44a7fbcfa552f787b1d3987f7043aeb4527d1b99559e6621e01b42b3f45e5a24cbb - languageName: node - linkType: hard - -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 10/c34828732ab8509c2741e5fd1af6b767c3daf2c642f267788f933a65b1614943c282e74c4284f4fa749c264b18ee016a0d37a3e5b73aee446da46277d3a85daa - languageName: node - linkType: hard - -"src-location@npm:^1.1.0": - version: 1.1.0 - resolution: "src-location@npm:1.1.0" - checksum: 10/71071d5356e223177a3ab6d878a72af68bfeaf012e45af7ebb661e72ccee51366d0672bff22cd8928c8c31974a476761628df416965acab0ff0af35cefe22805 - languageName: node - linkType: hard - -"ssri@npm:^10.0.0": - version: 10.0.4 - resolution: "ssri@npm:10.0.4" - dependencies: - minipass: "npm:^5.0.0" - checksum: 10/3f3dc4a0bbde19a67a4e7bdbef0c94ea92643a5f835565c09107f0c3696de9079f65742e641b449e978db69751ac6e85dfdc3f2c2abfe221d1c346d5b7ed077f - languageName: node - linkType: hard - -"stable@npm:^0.1.8": - version: 0.1.8 - resolution: "stable@npm:0.1.8" - checksum: 10/2ff482bb100285d16dd75cd8f7c60ab652570e8952c0bfa91828a2b5f646a0ff533f14596ea4eabd48bb7f4aeea408dce8f8515812b975d958a4cc4fa6b9dfeb - languageName: node - linkType: hard - -"stack-generator@npm:^2.0.5": - version: 2.0.10 - resolution: "stack-generator@npm:2.0.10" - dependencies: - stackframe: "npm:^1.3.4" - checksum: 10/4fc3978a934424218a0aa9f398034e1f78153d5ff4f4ff9c62478c672debb47dd58de05b09fc3900530cbb526d72c93a6e6c9353bacc698e3b1c00ca3dda0c47 - languageName: node - linkType: hard - -"stack-trace@npm:0.0.10": - version: 0.0.10 - resolution: "stack-trace@npm:0.0.10" - checksum: 10/7bd633f0e9ac46e81a0b0fe6538482c1d77031959cf94478228731709db4672fbbed59176f5b9a9fd89fec656b5dae03d084ef2d1b0c4c2f5683e05f2dbb1405 - languageName: node - linkType: hard - -"stack-utils@npm:^2.0.3": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: "npm:^2.0.0" - checksum: 10/cdc988acbc99075b4b036ac6014e5f1e9afa7e564482b687da6384eee6a1909d7eaffde85b0a17ffbe186c5247faf6c2b7544e802109f63b72c7be69b13151bb - languageName: node - linkType: hard - -"stackback@npm:0.0.2": - version: 0.0.2 - resolution: "stackback@npm:0.0.2" - checksum: 10/2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 - languageName: node - linkType: hard - -"stackframe@npm:^1.3.4": - version: 1.3.4 - resolution: "stackframe@npm:1.3.4" - checksum: 10/29ca71c1fd17974c1c178df0236b1407bc65f6ea389cc43dec000def6e42ff548d4453de9a85b76469e2ae2b2abdd802c6b6f3db947c05794efbd740d1cf4121 - languageName: node - linkType: hard - -"stacktrace-gps@npm:^3.0.4": - version: 3.1.2 - resolution: "stacktrace-gps@npm:3.1.2" - dependencies: - source-map: "npm:0.5.6" - stackframe: "npm:^1.3.4" - checksum: 10/21cb60ce0990f7a661e964cf4bdef1e70dda2286fb628fbd0fd1e69e8925138433d08ed84969de2d396b3b91515e15336a502f777c26587db89f3933d6f63f9b - languageName: node - linkType: hard - -"stacktrace-js@npm:^2.0.2": - version: 2.0.2 - resolution: "stacktrace-js@npm:2.0.2" - dependencies: - error-stack-parser: "npm:^2.0.6" - stack-generator: "npm:^2.0.5" - stacktrace-gps: "npm:^3.0.4" - checksum: 10/e5f60a09852687e4a9206927fe1078e24d63e00a71a2dcddd67940e9504a54931a3454439d5b4e3e0e62aeb979be810573e8d3332fbef0dbfa335a8781b4b57c - languageName: node - linkType: hard - -"stacktrace-parser@npm:^0.1.10": - version: 0.1.10 - resolution: "stacktrace-parser@npm:0.1.10" - dependencies: - type-fest: "npm:^0.7.1" - checksum: 10/f4fbddfc09121d91e587b60de4beb4941108e967d71ad3a171812dc839b010ca374d064ad0a296295fed13acd103609d99a4224a25b4e67de13cae131f1901ee - languageName: node - linkType: hard - -"standard-as-callback@npm:^2.1.0": - version: 2.1.0 - resolution: "standard-as-callback@npm:2.1.0" - checksum: 10/88bec83ee220687c72d94fd86a98d5272c91d37ec64b66d830dbc0d79b62bfa6e47f53b71646011835fc9ce7fae62739545d13124262b53be4fbb3e2ebad551c - languageName: node - linkType: hard - -"statuses@npm:2.0.1": - version: 2.0.1 - resolution: "statuses@npm:2.0.1" - checksum: 10/18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb - languageName: node - linkType: hard - -"statuses@npm:>= 1.4.0 < 2": - version: 1.5.0 - resolution: "statuses@npm:1.5.0" - checksum: 10/c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c - languageName: node - linkType: hard - -"std-env@npm:^3.4.3, std-env@npm:^3.5.0": - version: 3.7.0 - resolution: "std-env@npm:3.7.0" - checksum: 10/6ee0cca1add3fd84656b0002cfbc5bfa20340389d9ba4720569840f1caa34bce74322aef4c93f046391583e50649d0cf81a5f8fe1d411e50b659571690a45f12 - languageName: node - linkType: hard - -"stream-browserify@npm:^3.0.0": - version: 3.0.0 - resolution: "stream-browserify@npm:3.0.0" - dependencies: - inherits: "npm:~2.0.4" - readable-stream: "npm:^3.5.0" - checksum: 10/05a3cd0a0ce2d568dbdeb69914557c26a1b0a9d871839666b692eae42b96189756a3ed685affc90dab64ff588a8524c8aec6d85072c07905a1f0d941ea68f956 - languageName: node - linkType: hard - -"stream-http@npm:^3.2.0": - version: 3.2.0 - resolution: "stream-http@npm:3.2.0" - dependencies: - builtin-status-codes: "npm:^3.0.0" - inherits: "npm:^2.0.4" - readable-stream: "npm:^3.6.0" - xtend: "npm:^4.0.2" - checksum: 10/4f85738cbc6de70ecf0a04bc38b6092b4d91dd5317d3d93c88a84c48e63b82a8724ab5fd591df9f587b5139fe439d1748e4e3db3cb09c2b1e23649cb9d89859e - languageName: node - linkType: hard - -"stream-shift@npm:^1.0.0": - version: 1.0.1 - resolution: "stream-shift@npm:1.0.1" - checksum: 10/59b82b44b29ec3699b5519a49b3cedcc6db58c72fb40c04e005525dfdcab1c75c4e0c180b923c380f204bed78211b9bad8faecc7b93dece4d004c3f6ec75737b - languageName: node - linkType: hard - -"stream-to-it@npm:^1.0.1": - version: 1.0.1 - resolution: "stream-to-it@npm:1.0.1" - dependencies: - it-stream-types: "npm:^2.0.1" - checksum: 10/df6b11bda9d3eb8f5607a450866edc9e2cc49a1a1a3731fbfdd5872a17231398f960ec4509331dbaa3db3cbf23dbca3bd286bb7d56c303a51ded63a013ade71d - languageName: node - linkType: hard - -"streamsearch@npm:^1.1.0": - version: 1.1.0 - resolution: "streamsearch@npm:1.1.0" - checksum: 10/612c2b2a7dbcc859f74597112f80a42cbe4d448d03da790d5b7b39673c1197dd3789e91cd67210353e58857395d32c1e955a9041c4e6d5bae723436b3ed9ed14 - languageName: node - linkType: hard - -"strict-uri-encode@npm:^2.0.0": - version: 2.0.0 - resolution: "strict-uri-encode@npm:2.0.0" - checksum: 10/eaac4cf978b6fbd480f1092cab8b233c9b949bcabfc9b598dd79a758f7243c28765ef7639c876fa72940dac687181b35486ea01ff7df3e65ce3848c64822c581 - languageName: node - linkType: hard - -"string-argv@npm:0.3.2, string-argv@npm:~0.3.1": - version: 0.3.2 - resolution: "string-argv@npm:0.3.2" - checksum: 10/f9d3addf887026b4b5f997a271149e93bf71efc8692e7dc0816e8807f960b18bcb9787b45beedf0f97ff459575ee389af3f189d8b649834cac602f2e857e75af - languageName: node - linkType: hard - -"string-convert@npm:^0.2.0": - version: 0.2.1 - resolution: "string-convert@npm:0.2.1" - checksum: 10/f3eb484a45d29aa2ba2d9fe0471c971d5a56353633b56a4c8bc3e67237a2cdb1b6437f006a67d489b3d41e0a1c1f02e18d334c161a27fd7219e4aee1a9f68aac - languageName: node - linkType: hard - -"string-env-interpolation@npm:^1.0.1": - version: 1.0.1 - resolution: "string-env-interpolation@npm:1.0.1" - checksum: 10/d126329587f635bee65300e4451e7352b9b67e03daeb62f006ca84244cac12a1f6e45176b018653ba0c3ec3b5d980f9ca59d2eeed99cf799501cdaa7f871dc6f - languageName: node - linkType: hard - -"string-format@npm:^2.0.0": - version: 2.0.0 - resolution: "string-format@npm:2.0.0" - checksum: 10/8889014e926f69aaa8d117551a84a97cd7932484f5b0ab5b5b760eb0761e5722dee6112893ea742efac5adeb1b08dfedb77d9a91192dcd683a331e06c5148a87 - languageName: node - linkType: hard - -"string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: "npm:^1.0.2" - strip-ansi: "npm:^6.0.0" - checksum: 10/ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 - languageName: node - linkType: hard - -"string-length@npm:^5.0.1": - version: 5.0.1 - resolution: "string-length@npm:5.0.1" - dependencies: - char-regex: "npm:^2.0.0" - strip-ansi: "npm:^7.0.1" - checksum: 10/71f73b8c8a743e01dcd001bcf1b197db78d5e5e53b12bd898cddaf0961be09f947dfd8c429783db3694b55b05cb5a51de6406c5085ff1aaa10c4771440c8396d - languageName: node - linkType: hard - -"string-natural-compare@npm:^3.0.1": - version: 3.0.1 - resolution: "string-natural-compare@npm:3.0.1" - checksum: 10/bc1fd0ee196466489e121bbe11844094ddcdee5a687dca9dbb18ba2ace73b1f6c96c9b448df2dfed0879b781b6b12e329ca1c1fc0a86d70b00c7823b76109b1e - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10/e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb - languageName: node - linkType: hard - -"string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: "npm:^0.2.0" - emoji-regex: "npm:^9.2.2" - strip-ansi: "npm:^7.0.1" - checksum: 10/7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 - languageName: node - linkType: hard - -"string.prototype.includes@npm:^2.0.1": - version: 2.0.1 - resolution: "string.prototype.includes@npm:2.0.1" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.3" - checksum: 10/939a5447e4a99a86f29cc97fa24f358e5071f79e34746de4c7eb2cd736ed626ad24870a1e356f33915b3b352bb87f7e4d1cebc15d1e1aaae0923777e21b1b28b - languageName: node - linkType: hard - -"string.prototype.matchall@npm:^4.0.11, string.prototype.matchall@npm:^4.0.6": - version: 4.0.11 - resolution: "string.prototype.matchall@npm:4.0.11" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.4" - gopd: "npm:^1.0.1" - has-symbols: "npm:^1.0.3" - internal-slot: "npm:^1.0.7" - regexp.prototype.flags: "npm:^1.5.2" - set-function-name: "npm:^2.0.2" - side-channel: "npm:^1.0.6" - checksum: 10/a902ff4500f909f2a08e55cc5ab1ffbbc905f603b36837674370ee3921058edd0392147e15891910db62a2f31ace2adaf065eaa3bc6e9810bdbc8ca48e05a7b5 - languageName: node - linkType: hard - -"string.prototype.repeat@npm:^1.0.0": - version: 1.0.0 - resolution: "string.prototype.repeat@npm:1.0.0" - dependencies: - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.17.5" - checksum: 10/4b1bd91b75fa8fdf0541625184ebe80e445a465ce4253c19c3bccd633898005dadae0f74b85ae72662a53aafb8035bf48f8f5c0755aec09bc106a7f13959d05e - languageName: node - linkType: hard - -"string.prototype.trim@npm:^1.2.9": - version: 1.2.9 - resolution: "string.prototype.trim@npm:1.2.9" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.0" - es-object-atoms: "npm:^1.0.0" - checksum: 10/b2170903de6a2fb5a49bb8850052144e04b67329d49f1343cdc6a87cb24fb4e4b8ad00d3e273a399b8a3d8c32c89775d93a8f43cb42fbff303f25382079fb58a - languageName: node - linkType: hard - -"string.prototype.trimend@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimend@npm:1.0.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10/c2e862ae724f95771da9ea17c27559d4eeced9208b9c20f69bbfcd1b9bc92375adf8af63a103194dba17c4cc4a5cb08842d929f415ff9d89c062d44689c8761b - languageName: node - linkType: hard - -"string.prototype.trimstart@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimstart@npm:1.0.8" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10/160167dfbd68e6f7cb9f51a16074eebfce1571656fc31d40c3738ca9e30e35496f2c046fe57b6ad49f65f238a152be8c86fd9a2dd58682b5eba39dad995b3674 - languageName: node - linkType: hard - -"string_decoder@npm:^1.0.0, string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: "npm:~5.2.0" - checksum: 10/54d23f4a6acae0e93f999a585e673be9e561b65cd4cca37714af1e893ab8cd8dfa52a9e4f58f48f87b4a44918d3a9254326cb80ed194bf2e4c226e2b21767e56 - languageName: node - linkType: hard - -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: "npm:~5.1.0" - checksum: 10/7c41c17ed4dea105231f6df208002ebddd732e8e9e2d619d133cecd8e0087ddfd9587d2feb3c8caf3213cbd841ada6d057f5142cae68a4e62d3540778d9819b4 - languageName: node - linkType: hard - -"stringify-entities@npm:^4.0.0": - version: 4.0.4 - resolution: "stringify-entities@npm:4.0.4" - dependencies: - character-entities-html4: "npm:^2.0.0" - character-entities-legacy: "npm:^3.0.0" - checksum: 10/42bd2f37528795a7b4386bd39dc4699515fb0f0b8c418a6bb29ae205ce66eaff9e8801a2bee65b8049c918c9475a71c7e5911f6a88c19f1d84ebdcba3d881a2d - languageName: node - linkType: hard - -"stringify-object@npm:^3.3.0": - version: 3.3.0 - resolution: "stringify-object@npm:3.3.0" - dependencies: - get-own-enumerable-property-symbols: "npm:^3.0.0" - is-obj: "npm:^1.0.1" - is-regexp: "npm:^1.0.0" - checksum: 10/973782f09a3df3f39a2cf07dbf43fb9ba6cb32976f3616cd0f6c10e0a5c5415dd72b7b700e72920e8da2bf57c3001b8e37b5af7174bab9a748ce0416989e19b1 - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10/ae3b5436d34fadeb6096367626ce987057713c566e1e7768818797e00ac5d62023d0f198c4e681eae9e20701721980b26a64a8f5b91238869592a9c6800719a2 - languageName: node - linkType: hard - -"strip-ansi@npm:^5.2.0": - version: 5.2.0 - resolution: "strip-ansi@npm:5.2.0" - dependencies: - ansi-regex: "npm:^4.1.0" - checksum: 10/bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46 - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10/475f53e9c44375d6e72807284024ac5d668ee1d06010740dec0b9744f2ddf47de8d7151f80e5f6190fc8f384e802fdf9504b76a7e9020c9faee7103623338be2 - languageName: node - linkType: hard - -"strip-bom@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-bom@npm:3.0.0" - checksum: 10/8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b - languageName: node - linkType: hard - -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 10/9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 - languageName: node - linkType: hard - -"strip-comments@npm:^2.0.1": - version: 2.0.1 - resolution: "strip-comments@npm:2.0.1" - checksum: 10/43ea36189e4ba543c6ffb0384831e9e23c3b57ede5592c6edcbfc883f489f91d00328fe2670b4e467f61c7886eff68deae3e946f0f092346b2b3cb058b9cfdba - languageName: node - linkType: hard - -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 10/69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 - languageName: node - linkType: hard - -"strip-final-newline@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-final-newline@npm:3.0.0" - checksum: 10/23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 - languageName: node - linkType: hard - -"strip-hex-prefix@npm:1.0.0": - version: 1.0.0 - resolution: "strip-hex-prefix@npm:1.0.0" - dependencies: - is-hex-prefixed: "npm:1.0.0" - checksum: 10/4cafe7caee1d281d3694d14920fd5d3c11adf09371cef7e2ccedd5b83efd9e9bd2219b5d6ce6e809df6e0f437dc9d30db1192116580875698aad164a6d6b285b - languageName: node - linkType: hard - -"strip-indent@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-indent@npm:3.0.0" - dependencies: - min-indent: "npm:^1.0.0" - checksum: 10/18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 10/492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 - languageName: node - linkType: hard - -"strip-json-comments@npm:~2.0.1": - version: 2.0.1 - resolution: "strip-json-comments@npm:2.0.1" - checksum: 10/1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 - languageName: node - linkType: hard - -"strip-literal@npm:^2.0.0": - version: 2.1.0 - resolution: "strip-literal@npm:2.1.0" - dependencies: - js-tokens: "npm:^9.0.0" - checksum: 10/21c813aa1e669944e7e2318c8c927939fb90b0c52f53f57282bfc3dd6e19d53f70004f1f1693e33e5e790ad5ef102b0fce2b243808229d1ce07ae71f326c0e82 - languageName: node - linkType: hard - -"style-loader@npm:^3.3.1": - version: 3.3.3 - resolution: "style-loader@npm:3.3.3" - peerDependencies: - webpack: ^5.0.0 - checksum: 10/6c13d5075b5a5d69602215a242ef157460766e6e8a2e48276eb5da5b9852716910b48b3f120d492bbc7cd825dfa940b35fc84e1a9ab2a8792fd8d568b6b3e87a - languageName: node - linkType: hard - -"style-mod@npm:^4.0.0, style-mod@npm:^4.1.0": - version: 4.1.0 - resolution: "style-mod@npm:4.1.0" - checksum: 10/e0bf199d699f15d382c31ae7f18b1508f426b35346002dd1b9072db2cd32fdb0ba3ce7a4629e2fa867a79ffe4830ebf11cb9bce6500815f6a0534fac763e94f4 - languageName: node - linkType: hard - -"style-to-object@npm:^0.4.0": - version: 0.4.4 - resolution: "style-to-object@npm:0.4.4" - dependencies: - inline-style-parser: "npm:0.1.1" - checksum: 10/3101c0de5325e8051c3665125468af73578eba4712b818458b9f7ed732d7800f3b34e088e5c16f60070644db25316fa5a5b8b69e7f3414c879401eb074a2211e - languageName: node - linkType: hard - -"style-to-object@npm:^1.0.0": - version: 1.0.8 - resolution: "style-to-object@npm:1.0.8" - dependencies: - inline-style-parser: "npm:0.2.4" - checksum: 10/530b067325e3119bfaf75bdbe25cc86b02b559db00d881a74b98a2d5bb10ac953d1b455ed90c825963cf3b4bdaa1bda45f406d78d987391434b8d8ab3835df4e - languageName: node - linkType: hard - -"styled-components@npm:^5.3.3": - version: 5.3.11 - resolution: "styled-components@npm:5.3.11" - dependencies: - "@babel/helper-module-imports": "npm:^7.0.0" - "@babel/traverse": "npm:^7.4.5" - "@emotion/is-prop-valid": "npm:^1.1.0" - "@emotion/stylis": "npm:^0.8.4" - "@emotion/unitless": "npm:^0.7.4" - babel-plugin-styled-components: "npm:>= 1.12.0" - css-to-react-native: "npm:^3.0.0" - hoist-non-react-statics: "npm:^3.0.0" - shallowequal: "npm:^1.1.0" - supports-color: "npm:^5.5.0" - peerDependencies: - react: ">= 16.8.0" - react-dom: ">= 16.8.0" - react-is: ">= 16.8.0" - checksum: 10/7e1baee0f7b4479fe1a4064e4ae87e40f1ba583030d04827cef73fa7b36d3a91ed552dc76164d319216039f906af42a5229648c023482280fa4b5f71f00eef2d - languageName: node - linkType: hard - -"styled-components@npm:^6.1.11": - version: 6.1.13 - resolution: "styled-components@npm:6.1.13" - dependencies: - "@emotion/is-prop-valid": "npm:1.2.2" - "@emotion/unitless": "npm:0.8.1" - "@types/stylis": "npm:4.2.5" - css-to-react-native: "npm:3.2.0" - csstype: "npm:3.1.3" - postcss: "npm:8.4.38" - shallowequal: "npm:1.1.0" - stylis: "npm:4.3.2" - tslib: "npm:2.6.2" - peerDependencies: - react: ">= 16.8.0" - react-dom: ">= 16.8.0" - checksum: 10/8be7bcb156945e876f560b1bef4f2e5a6a214e53fa6e7f98cd7294c83f3cfb2d712c4561d175abcd6d331a65ef5b9b2004c916aa035ddec9633f0661d9c8205c - languageName: node - linkType: hard - -"styled-jsx@npm:5.1.1": - version: 5.1.1 - resolution: "styled-jsx@npm:5.1.1" - dependencies: - client-only: "npm:0.0.1" - peerDependencies: - react: ">= 16.8.0 || 17.x.x || ^18.0.0-0" - peerDependenciesMeta: - "@babel/core": - optional: true - babel-plugin-macros: - optional: true - checksum: 10/4f6a5d0010770fdeea1183d919d528fd46c484e23c0535ef3e1dd49488116f639c594f3bd4440e3bc8a8686c9f8d53c5761599870ff039ede11a5c3bfe08a4be - languageName: node - linkType: hard - -"stylehacks@npm:^5.1.1": - version: 5.1.1 - resolution: "stylehacks@npm:5.1.1" - dependencies: - browserslist: "npm:^4.21.4" - postcss-selector-parser: "npm:^6.0.4" - peerDependencies: - postcss: ^8.2.15 - checksum: 10/bddce1f5a8ba5a129995fc5585fa59fda6c8c580a8b39631955ee03810957eea62d13c7711a61f3a4f3bc2f9a4a9e019846f73b669c4aa0b5c52cd0198824b5c - languageName: node - linkType: hard - -"stylis@npm:4.2.0": - version: 4.2.0 - resolution: "stylis@npm:4.2.0" - checksum: 10/58359185275ef1f39c339ae94e598168aa6bb789f6cf0d52e726c1e7087a94e9c17f0385a28d34483dec1ffc2c75670ec714dc5603d99c3124ec83bc2b0a0f42 - languageName: node - linkType: hard - -"stylis@npm:4.3.2, stylis@npm:^4.3.0": - version: 4.3.2 - resolution: "stylis@npm:4.3.2" - checksum: 10/4d3e3cb5cbfc7abdf14e424c8631a15fd15cbf0357ffc641c319587e00c2d1036b1a71cb88b42411bc3ce10d7730ad3fb9789b034d11365e8a19d23f56486c77 - languageName: node - linkType: hard - -"subgraph-status@npm:^1.2.4": - version: 1.2.4 - resolution: "subgraph-status@npm:1.2.4" - dependencies: - react-slick: "npm:^0.30.2" - slick-carousel: "npm:^1.8.1" - styled-components: "npm:^6.1.11" - peerDependencies: - "@types/react": ^18.3.3 - "@types/react-dom": ^18.3.0 - react: ^18.3.1 - react-dom: ^18.3.1 - checksum: 10/8088ec7440f5d2811fae8b6520f531c60f41a786384a874005646240d22570601a359e5681912ae125aa81e1208f9e2e7c359ca1c81ab92363bbf27688b880bb - languageName: node - linkType: hard - -"sucrase@npm:^3.32.0": - version: 3.32.0 - resolution: "sucrase@npm:3.32.0" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.2" - commander: "npm:^4.0.0" - glob: "npm:7.1.6" - lines-and-columns: "npm:^1.1.6" - mz: "npm:^2.7.0" - pirates: "npm:^4.0.1" - ts-interface-checker: "npm:^0.1.9" - bin: - sucrase: bin/sucrase - sucrase-node: bin/sucrase-node - checksum: 10/3f18c8db09fee863fc930b64bad738d8710d7aa56ecf900849e159f12ead68c09565ae7d5cef8341123950a035e95ed4d0f8474418623fb702164f4853bab57f - languageName: node - linkType: hard - -"superstruct@npm:^1.0.3": - version: 1.0.3 - resolution: "superstruct@npm:1.0.3" - checksum: 10/632b6171ac136b6750e62a55f806cc949b3dbf2b4a7dc70cc85f54adcdf19d21eab9711f04e8a643b7dd622bbd8658366ead924f467adaccb2c8005c133b7976 - languageName: node - linkType: hard - -"superstruct@npm:^2.0.2": - version: 2.0.2 - resolution: "superstruct@npm:2.0.2" - checksum: 10/10e1944a9da4baee187fbaa6c5d97d7af266b55786dfe50bce67f0f1e7d93f1a5a42dd51e245a2e16404f8336d07c21c67f1c1fbc4ad0a252d3d2601d6c926da - languageName: node - linkType: hard - -"supports-color@npm:^3.1.0": - version: 3.2.3 - resolution: "supports-color@npm:3.2.3" - dependencies: - has-flag: "npm:^1.0.0" - checksum: 10/476a70d263a1f7ac11c26c10dfc58f0d9439edf198005b95f0e358ea8182d06b492d96320f16a841e4e968c7189044dd8c3f3037bd533480d15c7cc00e17c5d8 - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10/5f505c6fa3c6e05873b43af096ddeb22159831597649881aeb8572d6fe3b81e798cc10840d0c9735e0026b250368851b7f77b65e84f4e4daa820a4f69947f55b - languageName: node - linkType: hard - -"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0, supports-color@npm:^7.2.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10/c8bb7afd564e3b26b50ca6ee47572c217526a1389fe018d00345856d4a9b08ffbd61fadaf283a87368d94c3dcdb8f5ffe2650a5a65863e21ad2730ca0f05210a - languageName: node - linkType: hard - -"supports-color@npm:^8, supports-color@npm:^8.0.0, supports-color@npm:^8.1.1, supports-color@npm:~8.1.1": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10/157b534df88e39c5518c5e78c35580c1eca848d7dbaf31bbe06cdfc048e22c7ff1a9d046ae17b25691128f631a51d9ec373c1b740c12ae4f0de6e292037e4282 - languageName: node - linkType: hard - -"supports-color@npm:^9.4.0": - version: 9.4.0 - resolution: "supports-color@npm:9.4.0" - checksum: 10/cb8ff8daeaf1db642156f69a9aa545b6c01dd9c4def4f90a49f46cbf24be0c245d392fcf37acd119cd1819b99dad2cc9b7e3260813f64bcfd7f5b18b5a1eefb8 - languageName: node - linkType: hard - -"supports-hyperlinks@npm:^2.0.0": - version: 2.3.0 - resolution: "supports-hyperlinks@npm:2.3.0" - dependencies: - has-flag: "npm:^4.0.0" - supports-color: "npm:^7.0.0" - checksum: 10/3e7df6e9eaa177d7bfbbe065c91325e9b482f48de0f7c9133603e3ffa8af31cbceac104a0941cd0266a57f8e691de6eb58b79fec237852dc84ed7ad152b116b0 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 10/a9dc19ae2220c952bd2231d08ddeecb1b0328b61e72071ff4000c8384e145cc07c1c0bdb3b5a1cb06e186a7b2790f1dee793418b332f6ddf320de25d9125be7e - languageName: node - linkType: hard - -"svelte@npm:^5.0.0": - version: 5.25.7 - resolution: "svelte@npm:5.25.7" - dependencies: - "@ampproject/remapping": "npm:^2.3.0" - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - "@sveltejs/acorn-typescript": "npm:^1.0.5" - "@types/estree": "npm:^1.0.5" - acorn: "npm:^8.12.1" - aria-query: "npm:^5.3.1" - axobject-query: "npm:^4.1.0" - clsx: "npm:^2.1.1" - esm-env: "npm:^1.2.1" - esrap: "npm:^1.4.6" - is-reference: "npm:^3.0.3" - locate-character: "npm:^3.0.0" - magic-string: "npm:^0.30.11" - zimmerframe: "npm:^1.1.2" - checksum: 10/1a97b9043beb38d8d290c3ddf2030eac0200c744538932bcce61bf98fab7529a0dcedb83cb78cfc71ca030d7c353321f253bca5e2fcf63be243ce312b8e24265 - languageName: node - linkType: hard - -"svg-parser@npm:^2.0.2, svg-parser@npm:^2.0.4": - version: 2.0.4 - resolution: "svg-parser@npm:2.0.4" - checksum: 10/ec196da6ea21481868ab26911970e35488361c39ead1c6cdd977ba16c885c21a91ddcbfd113bfb01f79a822e2a751ef85b2f7f95e2cb9245558ebce12c34af1f - languageName: node - linkType: hard - -"svgo@npm:^1.2.2": - version: 1.3.2 - resolution: "svgo@npm:1.3.2" - dependencies: - chalk: "npm:^2.4.1" - coa: "npm:^2.0.2" - css-select: "npm:^2.0.0" - css-select-base-adapter: "npm:^0.1.1" - css-tree: "npm:1.0.0-alpha.37" - csso: "npm:^4.0.2" - js-yaml: "npm:^3.13.1" - mkdirp: "npm:~0.5.1" - object.values: "npm:^1.1.0" - sax: "npm:~1.2.4" - stable: "npm:^0.1.8" - unquote: "npm:~1.1.1" - util.promisify: "npm:~1.0.0" - bin: - svgo: ./bin/svgo - checksum: 10/c3679f0c68812c2823bcab66b46e76c8b52b37ff554f879b7ec5ebb8a91e450e9f0ebefbf8ac00962081c8ad99a1c490a0e258b10b9d42dc5054de18af19f02e - languageName: node - linkType: hard - -"svgo@npm:^2.7.0": - version: 2.8.0 - resolution: "svgo@npm:2.8.0" - dependencies: - "@trysound/sax": "npm:0.2.0" - commander: "npm:^7.2.0" - css-select: "npm:^4.1.3" - css-tree: "npm:^1.1.3" - csso: "npm:^4.2.0" - picocolors: "npm:^1.0.0" - stable: "npm:^0.1.8" - bin: - svgo: bin/svgo - checksum: 10/2b74544da1a9521852fe2784252d6083b336e32528d0e424ee54d1613f17312edc7020c29fa399086560e96cba42ede4a2205328a08edeefa26de84cd769a64a - languageName: node - linkType: hard - -"svgo@npm:^3.0.2": - version: 3.3.2 - resolution: "svgo@npm:3.3.2" - dependencies: - "@trysound/sax": "npm:0.2.0" - commander: "npm:^7.2.0" - css-select: "npm:^5.1.0" - css-tree: "npm:^2.3.1" - css-what: "npm:^6.1.0" - csso: "npm:^5.0.5" - picocolors: "npm:^1.0.0" - bin: - svgo: ./bin/svgo - checksum: 10/82fdea9b938884d808506104228e4d3af0050d643d5b46ff7abc903ff47a91bbf6561373394868aaf07a28f006c4057b8fbf14bbd666298abdd7cc590d4f7700 - languageName: node - linkType: hard - -"swap-case@npm:^2.0.2": - version: 2.0.2 - resolution: "swap-case@npm:2.0.2" - dependencies: - tslib: "npm:^2.0.3" - checksum: 10/6e21c9e1b3cd5735eb2af679a99ec3efc78a14e3d4d5e3fd594e254b91cfd37185b3d1c6e41b22f53a2cdf5d1b963ce30c0fe8b78337e3fd43d0137084670a5f - languageName: node - linkType: hard - -"symbol-tree@npm:^3.2.4": - version: 3.2.4 - resolution: "symbol-tree@npm:3.2.4" - checksum: 10/c09a00aadf279d47d0c5c46ca3b6b2fbaeb45f0a184976d599637d412d3a70bbdc043ff33effe1206dea0e36e0ad226cb957112e7ce9a4bf2daedf7fa4f85c53 - languageName: node - linkType: hard - -"synckit@npm:^0.9.1": - version: 0.9.2 - resolution: "synckit@npm:0.9.2" - dependencies: - "@pkgr/core": "npm:^0.1.0" - tslib: "npm:^2.6.2" - checksum: 10/d45c4288be9c0232343650643892a7edafb79152c0c08d7ae5d33ca2c296b67a0e15f8cb5c9153969612c4ea5cd5686297542384aab977db23cfa6653fe02027 - languageName: node - linkType: hard - -"table-layout@npm:^1.0.2": - version: 1.0.2 - resolution: "table-layout@npm:1.0.2" - dependencies: - array-back: "npm:^4.0.1" - deep-extend: "npm:~0.6.0" - typical: "npm:^5.2.0" - wordwrapjs: "npm:^4.0.0" - checksum: 10/5dd12bc64ddf246f774fc51b45398dd8da900b7bb246595c84007ea292c15936264701660b80704be17da5d4066a9a250549418c40a2b635a0916c9294b103af - languageName: node - linkType: hard - -"table@npm:^6.8.1": - version: 6.8.1 - resolution: "table@npm:6.8.1" - dependencies: - ajv: "npm:^8.0.1" - lodash.truncate: "npm:^4.4.2" - slice-ansi: "npm:^4.0.0" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - checksum: 10/512c4f2bfb6f46f4d5ced19943ae5db1a5163eac1f23ce752625eb49715f84217c1c62bc2d017eb8985b37e0f85731108f654df809c0b34cca1678a672e7ea20 - languageName: node - linkType: hard - -"tailwindcss@npm:^3.0.2": - version: 3.3.2 - resolution: "tailwindcss@npm:3.3.2" - dependencies: - "@alloc/quick-lru": "npm:^5.2.0" - arg: "npm:^5.0.2" - chokidar: "npm:^3.5.3" - didyoumean: "npm:^1.2.2" - dlv: "npm:^1.1.3" - fast-glob: "npm:^3.2.12" - glob-parent: "npm:^6.0.2" - is-glob: "npm:^4.0.3" - jiti: "npm:^1.18.2" - lilconfig: "npm:^2.1.0" - micromatch: "npm:^4.0.5" - normalize-path: "npm:^3.0.0" - object-hash: "npm:^3.0.0" - picocolors: "npm:^1.0.0" - postcss: "npm:^8.4.23" - postcss-import: "npm:^15.1.0" - postcss-js: "npm:^4.0.1" - postcss-load-config: "npm:^4.0.1" - postcss-nested: "npm:^6.0.1" - postcss-selector-parser: "npm:^6.0.11" - postcss-value-parser: "npm:^4.2.0" - resolve: "npm:^1.22.2" - sucrase: "npm:^3.32.0" - bin: - tailwind: lib/cli.js - tailwindcss: lib/cli.js - checksum: 10/8c64edde7709e95163472d8c8a89d5737930393725bf4c3dac9019e82f7d5219e6d3fa0c1b1249e5770deb5e0269e7c5cc67f16be1bc7e6160814d2a8e65d5ed - languageName: node - linkType: hard - -"tapable@npm:^1.0.0": - version: 1.1.3 - resolution: "tapable@npm:1.1.3" - checksum: 10/1cec71f00f9a6cb1d88961b5d4f2dead4e185508b18b1bf1e688c8135039a391dd3e12b0887232b682ef28f1ef6f0c5e9a48794f6f5ef68f35d05de7e7a0a578 - languageName: node - linkType: hard - -"tapable@npm:^2.0.0, tapable@npm:^2.1.1, tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 10/1769336dd21481ae6347611ca5fca47add0962fd8e80466515032125eca0084a4f0ede11e65341b9c0018ef4e1cf1ad820adbb0fba7cc99865c6005734000b0a - languageName: node - linkType: hard - -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.1.15 - resolution: "tar@npm:6.1.15" - dependencies: - chownr: "npm:^2.0.0" - fs-minipass: "npm:^2.0.0" - minipass: "npm:^5.0.0" - minizlib: "npm:^2.1.1" - mkdirp: "npm:^1.0.3" - yallist: "npm:^4.0.0" - checksum: 10/4848b92da8581e64ce4d8a760b47468dd9d212a4612846d8dd75b5c224a42c66ed5bcf8cfa9e9cd2eb64ebe1351413fb3eac93324a4eee536f0941beefa1f2eb - languageName: node - linkType: hard - -"temp-dir@npm:^2.0.0": - version: 2.0.0 - resolution: "temp-dir@npm:2.0.0" - checksum: 10/cc4f0404bf8d6ae1a166e0e64f3f409b423f4d1274d8c02814a59a5529f07db6cd070a749664141b992b2c1af337fa9bb451a460a43bb9bcddc49f235d3115aa - languageName: node - linkType: hard - -"tempfile@npm:^3.0.0": - version: 3.0.0 - resolution: "tempfile@npm:3.0.0" - dependencies: - temp-dir: "npm:^2.0.0" - uuid: "npm:^3.3.2" - checksum: 10/9bebaeea932af27d0bc1ed7b5e2a7caed2bc67f7cc6415c028d9ce48aaedee346e2df11e1287388778c3190eae0ac2a2430ec429c39a11144bd6b4b17f9cf884 - languageName: node - linkType: hard - -"tempy@npm:^0.6.0": - version: 0.6.0 - resolution: "tempy@npm:0.6.0" - dependencies: - is-stream: "npm:^2.0.0" - temp-dir: "npm:^2.0.0" - type-fest: "npm:^0.16.0" - unique-string: "npm:^2.0.0" - checksum: 10/64f110666b3892ff00d2b5f9d89a5e0198813cc7e25aa187eca5ce310ff1697ef2cb7239f9eccbe0e8a23c1cdfaae949ce37511fe60ebfc637018ce7e9642a49 - languageName: node - linkType: hard - -"term-size@npm:^2.1.0": - version: 2.2.1 - resolution: "term-size@npm:2.2.1" - checksum: 10/f96aca2d4139c91e3359f5949ffb86f0a58f8c254ab7fe4a64b65126974939c782db6aaa91bf51a56d0344e505e22f9a0186f2f689e23ac9382b54606603c537 - languageName: node - linkType: hard - -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: "npm:^4.2.1" - supports-hyperlinks: "npm:^2.0.0" - checksum: 10/ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - -"terser-webpack-plugin@npm:^5.2.5, terser-webpack-plugin@npm:^5.3.7": - version: 5.3.9 - resolution: "terser-webpack-plugin@npm:5.3.9" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.17" - jest-worker: "npm:^27.4.5" - schema-utils: "npm:^3.1.1" - serialize-javascript: "npm:^6.0.1" - terser: "npm:^5.16.8" - peerDependencies: - webpack: ^5.1.0 - peerDependenciesMeta: - "@swc/core": - optional: true - esbuild: - optional: true - uglify-js: - optional: true - checksum: 10/339737a407e034b7a9d4a66e31d84d81c10433e41b8eae2ca776f0e47c2048879be482a9aa08e8c27565a2a949bc68f6e07f451bf4d9aa347dd61b3d000f5353 - languageName: node - linkType: hard - -"terser@npm:^5.0.0, terser@npm:^5.10.0, terser@npm:^5.16.8": - version: 5.18.1 - resolution: "terser@npm:5.18.1" - dependencies: - "@jridgewell/source-map": "npm:^0.3.3" - acorn: "npm:^8.8.2" - commander: "npm:^2.20.0" - source-map-support: "npm:~0.5.20" - bin: - terser: bin/terser - checksum: 10/9c16441239ab07bde2a34851104da4ad5b57d9b6d1422c4089472ac7c82de723b260e06da85d4a623efb44e4887af1fd436225cd963900f0f84787431e225f7b - languageName: node - linkType: hard - -"test-exclude@npm:^6.0.0": - version: 6.0.0 - resolution: "test-exclude@npm:6.0.0" - dependencies: - "@istanbuljs/schema": "npm:^0.1.2" - glob: "npm:^7.1.4" - minimatch: "npm:^3.0.4" - checksum: 10/8fccb2cb6c8fcb6bb4115394feb833f8b6cf4b9503ec2485c2c90febf435cac62abe882a0c5c51a37b9bbe70640cdd05acf5f45e486ac4583389f4b0855f69e5 - languageName: node - linkType: hard - -"text-encoding-utf-8@npm:^1.0.2": - version: 1.0.2 - resolution: "text-encoding-utf-8@npm:1.0.2" - checksum: 10/845bb4bd058d6ec7bb9e1f00be7dab394cd7facd270e2bc266912e975ffe29bc3953cce369da70b92bec964ddc48961c3a5146402d094e11a7a4654e4a365204 - languageName: node - linkType: hard - -"text-extensions@npm:^1.0.0": - version: 1.9.0 - resolution: "text-extensions@npm:1.9.0" - checksum: 10/56a9962c1b62d39b2bcb369b7558ca85c1b55e554b38dfd725edcc0a1babe5815782a60c17ff6b839093b163dfebb92b804208aaaea616ec7571c8059ae0cf44 - languageName: node - linkType: hard - -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: 10/4383b5baaeffa9bb4cda2ac33a4aa2e6d1f8aaf811848bf73513a9b88fd76372dc461f6fd6d2e9cb5100f48b473be32c6f95bd983509b7d92bb4d92c10747452 - languageName: node - linkType: hard - -"thenify-all@npm:^1.0.0": - version: 1.6.0 - resolution: "thenify-all@npm:1.6.0" - dependencies: - thenify: "npm:>= 3.1.0 < 4" - checksum: 10/dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e - languageName: node - linkType: hard - -"thenify@npm:>= 3.1.0 < 4": - version: 3.3.1 - resolution: "thenify@npm:3.3.1" - dependencies: - any-promise: "npm:^1.0.0" - checksum: 10/486e1283a867440a904e36741ff1a177faa827cf94d69506f7e3ae4187b9afdf9ec368b3d8da225c192bfe2eb943f3f0080594156bf39f21b57cd1411e2e7f6d - languageName: node - linkType: hard - -"thread-stream@npm:^0.15.1": - version: 0.15.2 - resolution: "thread-stream@npm:0.15.2" - dependencies: - real-require: "npm:^0.1.0" - checksum: 10/ca0a4f5bf45db88b48b41af0299455eaa8f01dd3ef8279e7ba6909c295b3ab79ddf576b595cbbceb4dbdf4012b17c6449805092926163fcbf30ac1604cb595b1 - languageName: node - linkType: hard - -"thread-stream@npm:^2.6.0": - version: 2.7.0 - resolution: "thread-stream@npm:2.7.0" - dependencies: - real-require: "npm:^0.2.0" - checksum: 10/03e743a2ccb2af5fa695d2e4369113336ee9b9f09c4453d50a222cbb4ae3af321bff658e0e5bf8bfbce9d7f5a7bf6262d12a2a365e160f4e76380ec624d32e7b - languageName: node - linkType: hard - -"throat@npm:^6.0.1": - version: 6.0.2 - resolution: "throat@npm:6.0.2" - checksum: 10/acd99f4b7362bcf6dcc517b01517165a00f7270d0c4fe2ca06c73b6217f022f76fb20e8ca98283b25ccb85d97a5f96dbcac5577d60bb0bda1eff92fa8e79fbd7 - languageName: node - linkType: hard - -"throttle-debounce@npm:^3.0.1": - version: 3.0.1 - resolution: "throttle-debounce@npm:3.0.1" - checksum: 10/c2b591bc881c595d44d5ee82cc607747569a84cd9652e7d9613d92759d84ffd61eab1ca56c6a294316b8c9978ff6d46c2c94ed95de5847f3de4b6c30342cb947 - languageName: node - linkType: hard - -"through2@npm:^2.0.0": - version: 2.0.5 - resolution: "through2@npm:2.0.5" - dependencies: - readable-stream: "npm:~2.3.6" - xtend: "npm:~4.0.1" - checksum: 10/cd71f7dcdc7a8204fea003a14a433ef99384b7d4e31f5497e1f9f622b3cf3be3691f908455f98723bdc80922a53af7fa10c3b7abbe51c6fd3d536dbc7850e2c4 - languageName: node - linkType: hard - -"through2@npm:^4.0.0": - version: 4.0.2 - resolution: "through2@npm:4.0.2" - dependencies: - readable-stream: "npm:3" - checksum: 10/72c246233d9a989bbebeb6b698ef0b7b9064cb1c47930f79b25d87b6c867e075432811f69b7b2ac8da00ca308191c507bdab913944be8019ac43b036ce88f6ba - languageName: node - linkType: hard - -"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.6, through@npm:^2.3.8": - version: 2.3.8 - resolution: "through@npm:2.3.8" - checksum: 10/5da78346f70139a7d213b65a0106f3c398d6bc5301f9248b5275f420abc2c4b1e77c2abc72d218dedc28c41efb2e7c312cb76a7730d04f9c2d37d247da3f4198 - languageName: node - linkType: hard - -"thunky@npm:^1.0.2": - version: 1.1.0 - resolution: "thunky@npm:1.1.0" - checksum: 10/825e3bd07ab3c9fd6f753c457a60957c628cacba5dd0656fd93b037c445e2828b43cf0805a9f2b16b0c5f5a10fd561206271acddb568df4f867f0aea0eb2772f - languageName: node - linkType: hard - -"timers-browserify@npm:^2.0.4": - version: 2.0.12 - resolution: "timers-browserify@npm:2.0.12" - dependencies: - setimmediate: "npm:^1.0.4" - checksum: 10/ec37ae299066bef6c464dcac29c7adafba1999e7227a9bdc4e105a459bee0f0b27234a46bfd7ab4041da79619e06a58433472867a913d01c26f8a203f87cee70 - languageName: node - linkType: hard - -"tiny-invariant@npm:^1.0.0": - version: 1.3.3 - resolution: "tiny-invariant@npm:1.3.3" - checksum: 10/5e185c8cc2266967984ce3b352a4e57cb89dad5a8abb0dea21468a6ecaa67cd5bb47a3b7a85d08041008644af4f667fb8b6575ba38ba5fb00b3b5068306e59fe - languageName: node - linkType: hard - -"tinybench@npm:^2.5.1": - version: 2.6.0 - resolution: "tinybench@npm:2.6.0" - checksum: 10/6d35f0540bbf6208e8f47fa88cad733bc4b35b3bea75ec995004a9a44f70b8947eff3d271a3b4a4f7e787a82211df0dec9370fa566ccf50441067c559382b3ed - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.13": - version: 0.2.13 - resolution: "tinyglobby@npm:0.2.13" - dependencies: - fdir: "npm:^6.4.4" - picomatch: "npm:^4.0.2" - checksum: 10/b04557ee58ad2be5f2d2cbb4b441476436c92bb45ba2e1fc464d686b793392b305ed0bcb8b877429e9b5036bdd46770c161a08384c0720b6682b7cd6ac80e403 - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.6": - version: 0.2.10 - resolution: "tinyglobby@npm:0.2.10" - dependencies: - fdir: "npm:^6.4.2" - picomatch: "npm:^4.0.2" - checksum: 10/10c976866d849702edc47fc3fef27d63f074c40f75ef17171ecc1452967900699fa1e62373681dd58e673ddff2e3f6094bcd0a2101e3e4b30f4c2b9da41397f2 - languageName: node - linkType: hard - -"tinypool@npm:^0.8.3": - version: 0.8.4 - resolution: "tinypool@npm:0.8.4" - checksum: 10/7365944c2532f240111443e7012be31a634faf1a02db08a91db3aa07361c26a374d0be00a0f2ea052c4bee39c107ba67f1f814c108d9d51dfc725c559c1a9c03 - languageName: node - linkType: hard - -"tinyspy@npm:^2.2.0": - version: 2.2.0 - resolution: "tinyspy@npm:2.2.0" - checksum: 10/bcc5a08c2dc7574d32e6dcc2e760ad95a3cf30249c22799815b6389179427c95573d27d2d965ebc5fca2b6d338c46678cd7337ea2a9cebacee3dc662176b07cb - languageName: node - linkType: hard - -"title-case@npm:^3.0.3": - version: 3.0.3 - resolution: "title-case@npm:3.0.3" - dependencies: - tslib: "npm:^2.0.3" - checksum: 10/369fe90f650a66205c34ebef63a69c6d1fd411ae3aad23db0aae165ddb881af50e67c6ea6800d605bc2b9e0ab5f22dada58fe97a1a7e7f3131ee0ef176cc65ec - languageName: node - linkType: hard - -"tmp-promise@npm:3.0.3": - version: 3.0.3 - resolution: "tmp-promise@npm:3.0.3" - dependencies: - tmp: "npm:^0.2.0" - checksum: 10/0ca65b4f233b1d2b01e17a7a62961d32923e4b27383a370bf4d8d52f1062d79c3250e6b6b706ec390e73c9c58c13dc130b3855eedc89c86c7d90beb28b8382e5 - languageName: node - linkType: hard - -"tmp@npm:0.0.33, tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: "npm:~1.0.2" - checksum: 10/09c0abfd165cff29b32be42bc35e80b8c64727d97dedde6550022e88fa9fd39a084660415ed8e3ebaa2aca1ee142f86df8b31d4196d4f81c774a3a20fd4b6abf - languageName: node - linkType: hard - -"tmp@npm:^0.2.0": - version: 0.2.1 - resolution: "tmp@npm:0.2.1" - dependencies: - rimraf: "npm:^3.0.0" - checksum: 10/445148d72df3ce99356bc89a7857a0c5c3b32958697a14e50952c6f7cf0a8016e746ababe9a74c1aa52f04c526661992f14659eba34d3c6701d49ba2f3cf781b - languageName: node - linkType: hard - -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: 10/cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10/10dda13571e1f5ad37546827e9b6d4252d2e0bc176c24a101252153ef435d83696e2557fe128c4678e4e78f5f01e83711c703eef9814eb12dab028580d45980a - languageName: node - linkType: hard - -"toggle-selection@npm:^1.0.6": - version: 1.0.6 - resolution: "toggle-selection@npm:1.0.6" - checksum: 10/9a0ed0ecbaac72b4944888dacd79fe0a55eeea76120a4c7e46b3bb3d85b24f086e90560bb22f5a965654a25ab43d79ec47dfdb3f1850ba740b14c5a50abc7040 - languageName: node - linkType: hard - -"toidentifier@npm:1.0.1": - version: 1.0.1 - resolution: "toidentifier@npm:1.0.1" - checksum: 10/952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 - languageName: node - linkType: hard - -"totalist@npm:^3.0.0": - version: 3.0.1 - resolution: "totalist@npm:3.0.1" - checksum: 10/5132d562cf88ff93fd710770a92f31dbe67cc19b5c6ccae2efc0da327f0954d211bbfd9456389655d726c624f284b4a23112f56d1da931ca7cfabbe1f45e778a - languageName: node - linkType: hard - -"tough-cookie@npm:^4.0.0, tough-cookie@npm:^4.1.2": - version: 4.1.3 - resolution: "tough-cookie@npm:4.1.3" - dependencies: - psl: "npm:^1.1.33" - punycode: "npm:^2.1.1" - universalify: "npm:^0.2.0" - url-parse: "npm:^1.5.3" - checksum: 10/cf148c359b638a7069fc3ba9a5257bdc9616a6948a98736b92c3570b3f8401cf9237a42bf716878b656f372a1fb65b74dd13a46ccff8eceba14ffd053d33f72a - languageName: node - linkType: hard - -"tr46@npm:^1.0.1": - version: 1.0.1 - resolution: "tr46@npm:1.0.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10/6e80d75480cb6658f7f283c15f5f41c2d4dfa243ca99a0e1baf3de6cc823fc4c829f89782a7a11e029905781fccfea42d08d8a6674ba7948c7dbc595b6f27dd3 - languageName: node - linkType: hard - -"tr46@npm:^2.1.0": - version: 2.1.0 - resolution: "tr46@npm:2.1.0" - dependencies: - punycode: "npm:^2.1.1" - checksum: 10/302b13f458da713b2a6ff779a0c1d27361d369fdca6c19330536d31db61789b06b246968fc879fdac818a92d02643dca1a0f4da5618df86aea4a79fb3243d3f3 - languageName: node - linkType: hard - -"tr46@npm:^3.0.0": - version: 3.0.0 - resolution: "tr46@npm:3.0.0" - dependencies: - punycode: "npm:^2.1.1" - checksum: 10/b09a15886cbfaee419a3469081223489051ce9dca3374dd9500d2378adedbee84a3c73f83bfdd6bb13d53657753fc0d4e20a46bfcd3f1b9057ef528426ad7ce4 - languageName: node - linkType: hard - -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10/8f1f5aa6cb232f9e1bdc86f485f916b7aa38caee8a778b378ffec0b70d9307873f253f5cbadbe2955ece2ac5c83d0dc14a77513166ccd0a0c7fe197e21396695 - languageName: node - linkType: hard - -"trim-lines@npm:^3.0.0": - version: 3.0.1 - resolution: "trim-lines@npm:3.0.1" - checksum: 10/7a1325e4ce8ff7e9e52007600e9c9862a166d0db1f1cf0c9357e359e410acab1278fcd91cc279dfa5123fc37b69f080de02f471e91dbbc61b155b9ca92597929 - languageName: node - linkType: hard - -"trim-newlines@npm:^3.0.0": - version: 3.0.1 - resolution: "trim-newlines@npm:3.0.1" - checksum: 10/b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206 - languageName: node - linkType: hard - -"trough@npm:^2.0.0": - version: 2.1.0 - resolution: "trough@npm:2.1.0" - checksum: 10/6ca8a545d0080ce40c3d0e1e44cf9aa0484a272a91f3a5a02ac433bf1e3ed16983d39da0a77a96467237f7f983cfbf19abc5ab1994c27cde9417e21a2aec76cc - languageName: node - linkType: hard - -"tryer@npm:^1.0.1": - version: 1.0.1 - resolution: "tryer@npm:1.0.1" - checksum: 10/4d869d187bd715136903b349f39d1cc3e5c19f742689a348190aff92408ee8dd3d7d9adc26dc9265c35d722731184c979ed316109b6c1239249a8707bb92cc49 - languageName: node - linkType: hard - -"ts-api-utils@npm:^1.3.0": - version: 1.3.0 - resolution: "ts-api-utils@npm:1.3.0" - peerDependencies: - typescript: ">=4.2.0" - checksum: 10/3ee44faa24410cd649b5c864e068d438aa437ef64e9e4a66a41646a6d3024d3097a695eeb3fb26ee364705d3cb9653a65756d009e6a53badb6066a5f447bf7ed - languageName: node - linkType: hard - -"ts-command-line-args@npm:^2.2.0": - version: 2.5.1 - resolution: "ts-command-line-args@npm:2.5.1" - dependencies: - chalk: "npm:^4.1.0" - command-line-args: "npm:^5.1.1" - command-line-usage: "npm:^6.1.0" - string-format: "npm:^2.0.0" - bin: - write-markdown: dist/write-markdown.js - checksum: 10/dd1b1fcd7aea599a909f037903bd4903c25e44e034dac8e1a2c049f34992c6cb4c9c692023c92d0dbd0f6183c3bd1bfff2181fee57099b6c5f296d38038224bf - languageName: node - linkType: hard - -"ts-easing@npm:^0.2.0": - version: 0.2.0 - resolution: "ts-easing@npm:0.2.0" - checksum: 10/e67ee862acca3b2e2718e736f31999adcef862d0df76d76a0e138588728d8a87dfec9978556044640bd0e90203590ad88ac2fe8746d0e9959b8d399132315150 - languageName: node - linkType: hard - -"ts-essentials@npm:^7.0.1": - version: 7.0.3 - resolution: "ts-essentials@npm:7.0.3" - peerDependencies: - typescript: ">=3.7.0" - checksum: 10/021b4263ddd58897171f3f5c467b5c872f76ba2ea07dfc11fa9667ba8d62ccb7f390db3e581139dcc6da94c3ff6306921f574acdb2b94cbc9d7da3e859e24665 - languageName: node - linkType: hard - -"ts-interface-checker@npm:^0.1.9": - version: 0.1.13 - resolution: "ts-interface-checker@npm:0.1.13" - checksum: 10/9f7346b9e25bade7a1050c001ec5a4f7023909c0e1644c5a96ae20703a131627f081479e6622a4ecee2177283d0069e651e507bedadd3904fc4010ab28ffce00 - languageName: node - linkType: hard - -"ts-log@npm:^2.2.3": - version: 2.2.5 - resolution: "ts-log@npm:2.2.5" - checksum: 10/b8fb444ae3b05ac8f709a1acee26dba014ed601e1fc36fa2bfcac5555032eb6c6ca9cd16b8da21832f1631785c3ad7de7177d8e7631c197a1aeca64f03a872a4 - languageName: node - linkType: hard - -"ts-node@npm:^10.8.1, ts-node@npm:^10.9.2": - version: 10.9.2 - resolution: "ts-node@npm:10.9.2" - dependencies: - "@cspotcode/source-map-support": "npm:^0.8.0" - "@tsconfig/node10": "npm:^1.0.7" - "@tsconfig/node12": "npm:^1.0.7" - "@tsconfig/node14": "npm:^1.0.0" - "@tsconfig/node16": "npm:^1.0.2" - acorn: "npm:^8.4.1" - acorn-walk: "npm:^8.1.1" - arg: "npm:^4.1.0" - create-require: "npm:^1.1.0" - diff: "npm:^4.0.1" - make-error: "npm:^1.1.1" - v8-compile-cache-lib: "npm:^3.0.1" - yn: "npm:3.1.1" - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 10/a91a15b3c9f76ac462f006fa88b6bfa528130dcfb849dd7ef7f9d640832ab681e235b8a2bc58ecde42f72851cc1d5d4e22c901b0c11aa51001ea1d395074b794 - languageName: node - linkType: hard - -"tsconfck@npm:^3.0.3": - version: 3.0.3 - resolution: "tsconfck@npm:3.0.3" - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - bin: - tsconfck: bin/tsconfck.js - checksum: 10/1c17217dc3758e71bebdb223b7cd6e613f8f8c92a225cccc40d459554dfae50cbf9d339c6a4a5a8d04620fe1c21bb6d454b6e10421e3fcd808ea51d0b5039ffd - languageName: node - linkType: hard - -"tsconfig-paths@npm:^3.15.0": - version: 3.15.0 - resolution: "tsconfig-paths@npm:3.15.0" - dependencies: - "@types/json5": "npm:^0.0.29" - json5: "npm:^1.0.2" - minimist: "npm:^1.2.6" - strip-bom: "npm:^3.0.0" - checksum: 10/2041beaedc6c271fc3bedd12e0da0cc553e65d030d4ff26044b771fac5752d0460944c0b5e680f670c2868c95c664a256cec960ae528888db6ded83524e33a14 - languageName: node - linkType: hard - -"tslib@npm:1.14.1, tslib@npm:^1.8.1, tslib@npm:^1.9.3": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: 10/7dbf34e6f55c6492637adb81b555af5e3b4f9cc6b998fb440dac82d3b42bdc91560a35a5fb75e20e24a076c651438234da6743d139e4feabf0783f3cdfe1dddb - languageName: node - linkType: hard - -"tslib@npm:2.6.2, tslib@npm:~2.6.0": - version: 2.6.2 - resolution: "tslib@npm:2.6.2" - checksum: 10/bd26c22d36736513980091a1e356378e8b662ded04204453d353a7f34a4c21ed0afc59b5f90719d4ba756e581a162ecbf93118dc9c6be5acf70aa309188166ca - languageName: node - linkType: hard - -"tslib@npm:2.7.0": - version: 2.7.0 - resolution: "tslib@npm:2.7.0" - checksum: 10/9a5b47ddac65874fa011c20ff76db69f97cf90c78cff5934799ab8894a5342db2d17b4e7613a087046bc1d133d21547ddff87ac558abeec31ffa929c88b7fce6 - languageName: node - linkType: hard - -"tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0, tslib@npm:^2.6.2, tslib@npm:^2.6.3, tslib@npm:^2.8.1": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7 - languageName: node - linkType: hard - -"tsort@npm:0.0.1": - version: 0.0.1 - resolution: "tsort@npm:0.0.1" - checksum: 10/5f15ca0e91142a72d2acb6e9798a0297b754ce402c8f8bbb63457ee17f062272f3ccdf39f4c3155f0568337cb3b5422410b40cfeed72fe75fbb9a71f016cdcf9 - languageName: node - linkType: hard - -"tsutils@npm:^3.21.0": - version: 3.21.0 - resolution: "tsutils@npm:3.21.0" - dependencies: - tslib: "npm:^1.8.1" - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - checksum: 10/ea036bec1dd024e309939ffd49fda7a351c0e87a1b8eb049570dd119d447250e2c56e0e6c00554e8205760e7417793fdebff752a46e573fbe07d4f375502a5b2 - languageName: node - linkType: hard - -"tty-browserify@npm:0.0.1": - version: 0.0.1 - resolution: "tty-browserify@npm:0.0.1" - checksum: 10/93b745d43fa5a7d2b948fa23be8d313576d1d884b48acd957c07710bac1c0d8ac34c0556ad4c57c73d36e11741763ef66b3fb4fb97b06b7e4d525315a3cd45f5 - languageName: node - linkType: hard - -"tunnel-agent@npm:^0.6.0": - version: 0.6.0 - resolution: "tunnel-agent@npm:0.6.0" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10/7f0d9ed5c22404072b2ae8edc45c071772affd2ed14a74f03b4e71b4dd1a14c3714d85aed64abcaaee5fec2efc79002ba81155c708f4df65821b444abb0cfade - languageName: node - linkType: hard - -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: "npm:^1.2.1" - checksum: 10/14687776479d048e3c1dbfe58a2409e00367810d6960c0f619b33793271ff2a27f81b52461f14a162f1f89a9b1d8da1b237fc7c99b0e1fdcec28ec63a86b1fec - languageName: node - linkType: hard - -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" - dependencies: - prelude-ls: "npm:~1.1.2" - checksum: 10/11dec0b50d7c3fd2e630b4b074ba36918ed2b1efbc87dfbd40ba9429d49c58d12dad5c415ece69fcf358fa083f33466fc370f23ab91aa63295c45d38b3a60dda - languageName: node - linkType: hard - -"type-detect@npm:4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 10/5179e3b8ebc51fce1b13efb75fdea4595484433f9683bbc2dca6d99789dba4e602ab7922d2656f2ce8383987467f7770131d4a7f06a26287db0615d2f4c4ce7d - languageName: node - linkType: hard - -"type-detect@npm:^4.0.0, type-detect@npm:^4.1.0": - version: 4.1.0 - resolution: "type-detect@npm:4.1.0" - checksum: 10/e363bf0352427a79301f26a7795a27718624c49c576965076624eb5495d87515030b207217845f7018093adcbe169b2d119bb9b7f1a31a92bfbb1ab9639ca8dd - languageName: node - linkType: hard - -"type-fest@npm:^0.16.0": - version: 0.16.0 - resolution: "type-fest@npm:0.16.0" - checksum: 10/fd8c47ccb90e9fe7bae8bfc0e116e200e096120200c1ab1737bf0bc9334b344dd4925f876ed698174ffd58cd179bb56a55467be96aedc22d5d72748eac428bc8 - languageName: node - linkType: hard - -"type-fest@npm:^0.18.0": - version: 0.18.1 - resolution: "type-fest@npm:0.18.1" - checksum: 10/08844377058435c2b0e633ba01bab6102dba0ed63d85417d8e18feff265eed6f5c9f8f9a25d405ea9db88a41a569be73a3c4c0d4e29150bf89fb145bb23114a2 - languageName: node - linkType: hard - -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 10/8907e16284b2d6cfa4f4817e93520121941baba36b39219ea36acfe64c86b9dbc10c9941af450bd60832c8f43464974d51c0957f9858bc66b952b66b6914cbb9 - languageName: node - linkType: hard - -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: 10/f4254070d9c3d83a6e573bcb95173008d73474ceadbbf620dd32d273940ca18734dff39c2b2480282df9afe5d1675ebed5499a00d791758748ea81f61a38961f - languageName: node - linkType: hard - -"type-fest@npm:^0.6.0": - version: 0.6.0 - resolution: "type-fest@npm:0.6.0" - checksum: 10/9ecbf4ba279402b14c1a0614b6761bbe95626fab11377291fecd7e32b196109551e0350dcec6af74d97ced1b000ba8060a23eca33157091e642b409c2054ba82 - languageName: node - linkType: hard - -"type-fest@npm:^0.7.1": - version: 0.7.1 - resolution: "type-fest@npm:0.7.1" - checksum: 10/0699b6011bb3f7fac5fd5385e2e09432cde08fa89283f24084f29db00ec69a5445cd3aa976438ec74fc552a9a96f4a04ed390b5cb62eb7483aa4b6e5b935e059 - languageName: node - linkType: hard - -"type-fest@npm:^0.8.1": - version: 0.8.1 - resolution: "type-fest@npm:0.8.1" - checksum: 10/fd4a91bfb706aeeb0d326ebd2e9a8ea5263979e5dec8d16c3e469a5bd3a946e014a062ef76c02e3086d3d1c7209a56a20a4caafd0e9f9a5c2ab975084ea3d388 - languageName: node - linkType: hard - -"type-fest@npm:^1.0.2": - version: 1.4.0 - resolution: "type-fest@npm:1.4.0" - checksum: 10/89875c247564601c2650bacad5ff80b859007fbdb6c9e43713ae3ffa3f584552eea60f33711dd762e16496a1ab4debd409822627be14097d9a17e39c49db591a - languageName: node - linkType: hard - -"type-is@npm:~1.6.18": - version: 1.6.18 - resolution: "type-is@npm:1.6.18" - dependencies: - media-typer: "npm:0.3.0" - mime-types: "npm:~2.1.24" - checksum: 10/0bd9eeae5efd27d98fd63519f999908c009e148039d8e7179a074f105362d4fcc214c38b24f6cda79c87e563cbd12083a4691381ed28559220d4a10c2047bed4 - languageName: node - linkType: hard - -"typechain@npm:^8.3.2": - version: 8.3.2 - resolution: "typechain@npm:8.3.2" - dependencies: - "@types/prettier": "npm:^2.1.1" - debug: "npm:^4.3.1" - fs-extra: "npm:^7.0.0" - glob: "npm:7.1.7" - js-sha3: "npm:^0.8.0" - lodash: "npm:^4.17.15" - mkdirp: "npm:^1.0.4" - prettier: "npm:^2.3.1" - ts-command-line-args: "npm:^2.2.0" - ts-essentials: "npm:^7.0.1" - peerDependencies: - typescript: ">=4.3.0" - bin: - typechain: dist/cli/cli.js - checksum: 10/d6dad2f70bb3914c56bac6758ba2a761a1592a8258aa9f84360fda410c27bfade0b2f49faa366df94ac3c2f567d40b3db17f4a32903ef52bc7f9a020545eeb7f - languageName: node - linkType: hard - -"typed-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "typed-array-buffer@npm:1.0.2" - dependencies: - call-bind: "npm:^1.0.7" - es-errors: "npm:^1.3.0" - is-typed-array: "npm:^1.1.13" - checksum: 10/02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b - languageName: node - linkType: hard - -"typed-array-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "typed-array-byte-length@npm:1.0.1" - dependencies: - call-bind: "npm:^1.0.7" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-proto: "npm:^1.0.3" - is-typed-array: "npm:^1.1.13" - checksum: 10/e4a38329736fe6a73b52a09222d4a9e8de14caaa4ff6ad8e55217f6705b017d9815b7284c85065b3b8a7704e226ccff1372a72b78c2a5b6b71b7bf662308c903 - languageName: node - linkType: hard - -"typed-array-byte-offset@npm:^1.0.2": - version: 1.0.2 - resolution: "typed-array-byte-offset@npm:1.0.2" - dependencies: - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.7" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-proto: "npm:^1.0.3" - is-typed-array: "npm:^1.1.13" - checksum: 10/ac26d720ebb2aacbc45e231347c359e6649f52e0cfe0e76e62005912f8030d68e4cb7b725b1754e8fdd48e433cb68df5a8620a3e420ad1457d666e8b29bf9150 - languageName: node - linkType: hard - -"typed-array-length@npm:^1.0.6": - version: 1.0.6 - resolution: "typed-array-length@npm:1.0.6" - dependencies: - call-bind: "npm:^1.0.7" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-proto: "npm:^1.0.3" - is-typed-array: "npm:^1.1.13" - possible-typed-array-names: "npm:^1.0.0" - checksum: 10/05e96cf4ff836743ebfc593d86133b8c30e83172cb5d16c56814d7bacfed57ce97e87ada9c4b2156d9aaa59f75cdef01c25bd9081c7826e0b869afbefc3e8c39 - languageName: node - linkType: hard - -"typedarray-to-buffer@npm:^3.1.5": - version: 3.1.5 - resolution: "typedarray-to-buffer@npm:3.1.5" - dependencies: - is-typedarray: "npm:^1.0.0" - checksum: 10/7c850c3433fbdf4d04f04edfc751743b8f577828b8e1eb93b95a3bce782d156e267d83e20fb32b3b47813e69a69ab5e9b5342653332f7d21c7d1210661a7a72c - languageName: node - linkType: hard - -"typescript@npm:5.4.2": - version: 5.4.2 - resolution: "typescript@npm:5.4.2" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/f8cfdc630ab1672f004e9561eb2916935b2d267792d07ce93e97fc601c7a65191af32033d5e9c0169b7dc37da7db9bf320f7432bc84527cb7697effaa4e4559d - languageName: node - linkType: hard - -"typescript@npm:^4.6.4 || ^5.2.2, typescript@npm:^5.6.3": - version: 5.6.3 - resolution: "typescript@npm:5.6.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/c328e418e124b500908781d9f7b9b93cf08b66bf5936d94332b463822eea2f4e62973bfb3b8a745fdc038785cb66cf59d1092bac3ec2ac6a3e5854687f7833f1 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A5.4.2#optional!builtin<compat/typescript>": - version: 5.4.2 - resolution: "typescript@patch:typescript@npm%3A5.4.2#optional!builtin<compat/typescript>::version=5.4.2&hash=5adc0c" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/f5f9a4133c2670761f0166eae5b3bafbc4a3fc24f0f42a93c9c893d9e9d6e66ea066969c5e7483fa66b4ae0e99125592553f3b92fd3599484de8be13b0615176 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^4.6.4 || ^5.2.2#optional!builtin<compat/typescript>, typescript@patch:typescript@npm%3A^5.6.3#optional!builtin<compat/typescript>": - version: 5.6.3 - resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin<compat/typescript>::version=5.6.3&hash=8c6c40" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/00504c01ee42d470c23495426af07512e25e6546bce7e24572e72a9ca2e6b2e9bea63de4286c3cfea644874da1467dcfca23f4f98f7caf20f8b03c0213bb6837 - languageName: node - linkType: hard - -"typewriter-effect@npm:^2.21.0": - version: 2.21.0 - resolution: "typewriter-effect@npm:2.21.0" - dependencies: - prop-types: "npm:^15.8.1" - raf: "npm:^3.4.1" - peerDependencies: - react: ^17.x || ^18.x - react-dom: ^17.x || ^18.x - checksum: 10/eaefe01da5ecfc866a1031efa34ad365f4f52fc57be9acf67d4877e01361844a2798f1aba035845fc9f60edaa56bdbb6f7597341ae8e4015793795e1d7b6763d - languageName: node - linkType: hard - -"typical@npm:^4.0.0": - version: 4.0.0 - resolution: "typical@npm:4.0.0" - checksum: 10/aefe2c24b025cda22534ae2594df4a1df5db05b5fe3692890fd51db741ca4f18937a149f968b8d56d9a7b0756e7cd8843b1907bea21987ff4a06619c54d5a575 - languageName: node - linkType: hard - -"typical@npm:^5.2.0": - version: 5.2.0 - resolution: "typical@npm:5.2.0" - checksum: 10/fd8e4197cb2e021ca6d11fea0018ee219c29bf4160ab613492f74c0e21806003d1cd92a15088b111778a7b5c6432e4e28321899785a86980b390b87c4010efe5 - languageName: node - linkType: hard - -"ua-parser-js@npm:^1.0.35": - version: 1.0.35 - resolution: "ua-parser-js@npm:1.0.35" - checksum: 10/b69c99c20f90e1d441939be591a3e4c848d12b88671953fc0de7664bdcdb660f4e9db236099ae966cfb20504d8894825bbdee0fcc31326f2823bf439eadfc02c - languageName: node - linkType: hard - -"ufo@npm:^1.3.0, ufo@npm:^1.3.1, ufo@npm:^1.3.2": - version: 1.3.2 - resolution: "ufo@npm:1.3.2" - checksum: 10/7133290d495e2b3f9416de69982019e81cff40d28cfd3a07accff1122ee52f23d9165e495a140a1b34b183244e88fc4001cb649591385ecbad1d3d0d2264fa6e - languageName: node - linkType: hard - -"uglify-js@npm:^3.1.4": - version: 3.17.4 - resolution: "uglify-js@npm:3.17.4" - bin: - uglifyjs: bin/uglifyjs - checksum: 10/4c0b800e0ff192079d2c3ce8414fd3b656a570028c7c79af5c29c53d5c532b68bbcae4ad47307f89c2ee124d11826fff7a136b59d5c5bb18422bcdf5568afe1e - languageName: node - linkType: hard - -"uint8-varint@npm:^2.0.1, uint8-varint@npm:^2.0.2": - version: 2.0.4 - resolution: "uint8-varint@npm:2.0.4" - dependencies: - uint8arraylist: "npm:^2.0.0" - uint8arrays: "npm:^5.0.0" - checksum: 10/51b5984b0d699d820c255f6cd8fa68628f50b8a09f5f063fa8b22438038e56505ab92445ee2da82966c20bcd5751886c2df8a21708014a3b9b32e871e8869caf - languageName: node - linkType: hard - -"uint8array-tools@npm:^0.0.8": - version: 0.0.8 - resolution: "uint8array-tools@npm:0.0.8" - checksum: 10/db3310f197a9a728e45e19149e5b222b633622796e5ef621809d03986f4959b2c895f2347c065eb16c89a07033ee8b9222b9abb607283615bdaeb3297dedbf01 - languageName: node - linkType: hard - -"uint8array-tools@npm:^0.0.9": - version: 0.0.9 - resolution: "uint8array-tools@npm:0.0.9" - checksum: 10/ea924e6d574f8c24d94400f0635eeffbeb0190fd2e4b781bb8e43b089c799a3d8c11c9b75d7c68524bc7e18f7ffc3d942f122ecf729746ba51612a8463848943 - languageName: node - linkType: hard - -"uint8arraylist@npm:^2.0.0, uint8arraylist@npm:^2.4.8": - version: 2.4.8 - resolution: "uint8arraylist@npm:2.4.8" - dependencies: - uint8arrays: "npm:^5.0.1" - checksum: 10/0f4dbffa21de25104e28058440c2ab20691cf5bf894a2032bd6e50b6b6480c7194521af2f6ec0d22855510e952afb0e486e5d95d050856a9a3990a5d276b7c7d - languageName: node - linkType: hard - -"uint8arraylist@npm:^2.4.3": - version: 2.4.3 - resolution: "uint8arraylist@npm:2.4.3" - dependencies: - uint8arrays: "npm:^4.0.2" - checksum: 10/35deb6d3eebce9a12e75fac7dcea83183049f157cb08c5249e1a2594443b7358fff64af99d5787f7e6cce537d5bb54d797307c2223a466601304bfc42c4bead7 - languageName: node - linkType: hard - -"uint8arrays@npm:3.1.0": - version: 3.1.0 - resolution: "uint8arrays@npm:3.1.0" - dependencies: - multiformats: "npm:^9.4.2" - checksum: 10/caf1cd6a1cdbd7c59d6c8698c06a6d603380942b5745b3fddcd1b16f7a84a4f351fb8c6ac41f4cb2c59c226bb6d954733a6e20a42dec6f3fd266a02270a5088d - languageName: node - linkType: hard - -"uint8arrays@npm:^3.0.0": - version: 3.1.1 - resolution: "uint8arrays@npm:3.1.1" - dependencies: - multiformats: "npm:^9.4.2" - checksum: 10/536e70273c040484aa7d522031a9dbca1fe8c06eb58a3ace1064ba68825b4e2764d4a0b604a1c451e7b8be0986dc94f23a419cfe9334bd116716074a2d29b33d - languageName: node - linkType: hard - -"uint8arrays@npm:^4.0.2": - version: 4.0.4 - resolution: "uint8arrays@npm:4.0.4" - dependencies: - multiformats: "npm:^11.0.0" - checksum: 10/3d5476f6c9a12f74f526c71bdaa2d7f4be4bb0fc9fc625c453e708ff7a19a2ee471ed06cb20752a6329940e2a0003f38f4e0bffaed1e950d3a1f2d33977dd779 - languageName: node - linkType: hard - -"uint8arrays@npm:^5.0.0, uint8arrays@npm:^5.0.1, uint8arrays@npm:^5.0.2, uint8arrays@npm:^5.0.3, uint8arrays@npm:^5.1.0": - version: 5.1.0 - resolution: "uint8arrays@npm:5.1.0" - dependencies: - multiformats: "npm:^13.0.0" - checksum: 10/6c9cd1c1519cdf20d4c4e3715b4ee1acf730636409528ea54e77c4d9aa6e7f70aacd86d735f7c8a9902a9181cc3b37fa048590978e2fb90a98fa1dc39465c1af - languageName: node - linkType: hard - -"unbox-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "unbox-primitive@npm:1.0.2" - dependencies: - call-bind: "npm:^1.0.2" - has-bigints: "npm:^1.0.2" - has-symbols: "npm:^1.0.3" - which-boxed-primitive: "npm:^1.0.2" - checksum: 10/06e1ee41c1095e37281cb71a975cb3350f7cb470a0665d2576f02cc9564f623bd90cfc0183693b8a7fdf2d242963dcc3010b509fa3ac683f540c765c0f3e7e43 - languageName: node - linkType: hard - -"unc-path-regex@npm:^0.1.2": - version: 0.1.2 - resolution: "unc-path-regex@npm:0.1.2" - checksum: 10/a05fa2006bf4606051c10fc7968f08ce7b28fa646befafa282813aeb1ac1a56f65cb1b577ca7851af2726198d59475bb49b11776036257b843eaacee2860a4ec - languageName: node - linkType: hard - -"uncrypto@npm:^0.1.3": - version: 0.1.3 - resolution: "uncrypto@npm:0.1.3" - checksum: 10/0020f74b0ce34723196d8982a73bb7f40cff455a41b8f88ae146b86885f4e66e41a1241fe80a887505c3bd2c7f07ed362b6ed041968370073c40a98496e6a737 - languageName: node - linkType: hard - -"undici-types@npm:~6.19.2": - version: 6.19.8 - resolution: "undici-types@npm:6.19.8" - checksum: 10/cf0b48ed4fc99baf56584afa91aaffa5010c268b8842f62e02f752df209e3dea138b372a60a963b3b2576ed932f32329ce7ddb9cb5f27a6c83040d8cd74b7a70 - languageName: node - linkType: hard - -"undici@npm:7.5.0": - version: 7.5.0 - resolution: "undici@npm:7.5.0" - checksum: 10/66b84d69f7648c2fef5d213492d037ef337c74c817c61589aa6abf51bff75ad9c97aba55139724471e967e3efcbce3e9748a72271db4d3421bdfc0ee8143dbe9 - languageName: node - linkType: hard - -"undici@npm:^5.14.0": - version: 5.22.1 - resolution: "undici@npm:5.22.1" - dependencies: - busboy: "npm:^1.6.0" - checksum: 10/4e4ae061372508bad6c017e0188cdbf1bb73e427d881aefe6277f88cb0bdd45b57bb88d7ab6fc136ff08e7d022bd83ca550a28272aebfb36b28c06fe8f07ac5e - languageName: node - linkType: hard - -"unenv@npm:^1.7.4": - version: 1.8.0 - resolution: "unenv@npm:1.8.0" - dependencies: - consola: "npm:^3.2.3" - defu: "npm:^6.1.3" - mime: "npm:^3.0.0" - node-fetch-native: "npm:^1.4.1" - pathe: "npm:^1.1.1" - checksum: 10/57785a8868d7a4e53749c5d8ccd902f5c58836251dec23d822233bdd9fe300bdc22eceb446069a65a7c06241efc9985fbd0035661dbfd524b23d658651087711 - languageName: node - linkType: hard - -"unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" - checksum: 10/39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 - languageName: node - linkType: hard - -"unicode-match-property-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-ecmascript@npm:2.0.0" - dependencies: - unicode-canonical-property-names-ecmascript: "npm:^2.0.0" - unicode-property-aliases-ecmascript: "npm:^2.0.0" - checksum: 10/1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a - languageName: node - linkType: hard - -"unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.1.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" - checksum: 10/06661bc8aba2a60c7733a7044f3e13085808939ad17924ffd4f5222a650f88009eb7c09481dc9c15cfc593d4ad99bd1cde8d54042733b335672591a81c52601c - languageName: node - linkType: hard - -"unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" - checksum: 10/243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b - languageName: node - linkType: hard - -"unified@npm:^10.0.0": - version: 10.1.2 - resolution: "unified@npm:10.1.2" - dependencies: - "@types/unist": "npm:^2.0.0" - bail: "npm:^2.0.0" - extend: "npm:^3.0.0" - is-buffer: "npm:^2.0.0" - is-plain-obj: "npm:^4.0.0" - trough: "npm:^2.0.0" - vfile: "npm:^5.0.0" - checksum: 10/6cffebcefc3290be26d25a58ba714cda943142782baf320fddf374ca3a319bdaabb006f96df4be17b8b367f5e6f6e113b1027c52ef66154846a7a110550f6688 - languageName: node - linkType: hard - -"unified@npm:^11.0.0": - version: 11.0.5 - resolution: "unified@npm:11.0.5" - dependencies: - "@types/unist": "npm:^3.0.0" - bail: "npm:^2.0.0" - devlop: "npm:^1.0.0" - extend: "npm:^3.0.0" - is-plain-obj: "npm:^4.0.0" - trough: "npm:^2.0.0" - vfile: "npm:^6.0.0" - checksum: 10/d9e6e88900a075f391b6bbf06f34062d41fa6257798110d1647753cfc2c6a6e2c1d016434e8ee35706c50485f9fb9ae4707a6a4790bd8dc461ec7e7315ed908b - languageName: node - linkType: hard - -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: "npm:^4.0.0" - checksum: 10/8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df - languageName: node - linkType: hard - -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10/40912a8963fc02fb8b600cf50197df4a275c602c60de4cac4f75879d3c48558cfac48de08a25cc10df8112161f7180b3bbb4d662aadb711568602f9eddee54f0 - languageName: node - linkType: hard - -"unique-string@npm:^2.0.0": - version: 2.0.0 - resolution: "unique-string@npm:2.0.0" - dependencies: - crypto-random-string: "npm:^2.0.0" - checksum: 10/107cae65b0b618296c2c663b8e52e4d1df129e9af04ab38d53b4f2189e96da93f599c85f4589b7ffaf1a11c9327cbb8a34f04c71b8d4950d3e385c2da2a93828 - languageName: node - linkType: hard - -"unist-util-generated@npm:^2.0.0": - version: 2.0.1 - resolution: "unist-util-generated@npm:2.0.1" - checksum: 10/0528642918683f1518ab7a50cf8c900df10d8717b58bd2fb05aab29393b1c4050fd2740792f18d477b52f942bfb0e6e00023e985c0a7bd63859d3d836b56e4ce - languageName: node - linkType: hard - -"unist-util-is@npm:^5.0.0": - version: 5.2.1 - resolution: "unist-util-is@npm:5.2.1" - dependencies: - "@types/unist": "npm:^2.0.0" - checksum: 10/c10f6c07aad4f4830ffa8ea82b42a2c8d5cd36c7555e27889e5fee953040af321e4e6f4e52c4edb606604de75d7230a5f4bc7b71b8ac3e874a26ab595c2057e4 - languageName: node - linkType: hard - -"unist-util-is@npm:^6.0.0": - version: 6.0.0 - resolution: "unist-util-is@npm:6.0.0" - dependencies: - "@types/unist": "npm:^3.0.0" - checksum: 10/edd6a93fb2255addf4b9eeb304c1da63c62179aef793169dd64ab955cf2f6814885fe25f95f8105893e3562dead348af535718d7a84333826e0491c04bf42511 - languageName: node - linkType: hard - -"unist-util-position@npm:^4.0.0": - version: 4.0.4 - resolution: "unist-util-position@npm:4.0.4" - dependencies: - "@types/unist": "npm:^2.0.0" - checksum: 10/aedbc5d112cdab85b752a7dacd8f04233655f00e08948a42f6e49682467c6fc0c531c91acc71188da5ac8acfea9e67d72bc054127d1c4b76b31792cfb5132423 - languageName: node - linkType: hard - -"unist-util-position@npm:^5.0.0": - version: 5.0.0 - resolution: "unist-util-position@npm:5.0.0" - dependencies: - "@types/unist": "npm:^3.0.0" - checksum: 10/89d4da00e74618d7562ac7ac288961df9bcd4ccca6df3b5a90650f018eceb6b95de6e771e88bdbef46cc9d96861d456abe57b7ad1108921e0feb67c6292aa29d - languageName: node - linkType: hard - -"unist-util-stringify-position@npm:^3.0.0": - version: 3.0.3 - resolution: "unist-util-stringify-position@npm:3.0.3" - dependencies: - "@types/unist": "npm:^2.0.0" - checksum: 10/07913e4fd77fe57d95f8b2f771354f97a29082229c1ad14ceedce6bbc77b2d784ca8296563335471cdca97915e548204bd6f098ea5b808b822b4b54087662cfb - languageName: node - linkType: hard - -"unist-util-stringify-position@npm:^4.0.0": - version: 4.0.0 - resolution: "unist-util-stringify-position@npm:4.0.0" - dependencies: - "@types/unist": "npm:^3.0.0" - checksum: 10/d15c88aca7a31902d95d5b5355bbe09583cf6f6ff6e59e134ef76c76d3c30bc1021f2d7ea5b7897c6d0858ed5f3770c1b19de9c78274f50d72f95a0d05f1af71 - languageName: node - linkType: hard - -"unist-util-visit-parents@npm:^5.1.1": - version: 5.1.3 - resolution: "unist-util-visit-parents@npm:5.1.3" - dependencies: - "@types/unist": "npm:^2.0.0" - unist-util-is: "npm:^5.0.0" - checksum: 10/5381fc57a129d478d983b988d86b72a1266d6f91fc608562b00bfa76596128d6e4d1c2b26ced64d96e55eb5d27d620081b4ee9703979bab63e1210789e781372 - languageName: node - linkType: hard - -"unist-util-visit-parents@npm:^6.0.0": - version: 6.0.1 - resolution: "unist-util-visit-parents@npm:6.0.1" - dependencies: - "@types/unist": "npm:^3.0.0" - unist-util-is: "npm:^6.0.0" - checksum: 10/645b3cbc5e923bc692b1eb1a9ca17bffc5aabc25e6090ff3f1489bff8effd1890b28f7a09dc853cb6a7fa0da8581bfebc9b670a68b53c4c086cb9610dfd37701 - languageName: node - linkType: hard - -"unist-util-visit@npm:^4.0.0": - version: 4.1.2 - resolution: "unist-util-visit@npm:4.1.2" - dependencies: - "@types/unist": "npm:^2.0.0" - unist-util-is: "npm:^5.0.0" - unist-util-visit-parents: "npm:^5.1.1" - checksum: 10/e3b20c6b1f5ae1b7b40bbf9be49103a342d98fad98bdf958110c20d72e5923bd3f12966b6702459bc61ab832facb5af418a79af87cefa7a8a41b892369678b13 - languageName: node - linkType: hard - -"unist-util-visit@npm:^5.0.0": - version: 5.0.0 - resolution: "unist-util-visit@npm:5.0.0" - dependencies: - "@types/unist": "npm:^3.0.0" - unist-util-is: "npm:^6.0.0" - unist-util-visit-parents: "npm:^6.0.0" - checksum: 10/f2bbde23641e9ade7640358c06ddeec0f38342322eb8e7819d9ee380b0f859d25d084dde22bf63db0280b3b2f36575f15aa1d6c23acf276c91c2493cf799e3b0 - languageName: node - linkType: hard - -"universalify@npm:^0.1.0": - version: 0.1.2 - resolution: "universalify@npm:0.1.2" - checksum: 10/40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff - languageName: node - linkType: hard - -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: 10/e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.0 - resolution: "universalify@npm:2.0.0" - checksum: 10/2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 - languageName: node - linkType: hard - -"unixify@npm:^1.0.0": - version: 1.0.0 - resolution: "unixify@npm:1.0.0" - dependencies: - normalize-path: "npm:^2.1.1" - checksum: 10/3be30e48579fc6c7390bd59b4ab9e745fede0c164dfb7351cf710bd1dbef8484b1441186205af6bcb13b731c0c88caf9b33459f7bf8c89e79c046e656ae433f0 - languageName: node - linkType: hard - -"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": - version: 1.0.0 - resolution: "unpipe@npm:1.0.0" - checksum: 10/4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 - languageName: node - linkType: hard - -"unquote@npm:~1.1.1": - version: 1.1.1 - resolution: "unquote@npm:1.1.1" - checksum: 10/71745867d09cba44ba2d26cb71d6dda7045a98b14f7405df4faaf2b0c90d24703ad027a9d90ba9a6e0d096de2c8d56f864fd03f1c0498c0b7a3990f73b4c8f5f - languageName: node - linkType: hard - -"unstorage@npm:^1.9.0": - version: 1.10.1 - resolution: "unstorage@npm:1.10.1" - dependencies: - anymatch: "npm:^3.1.3" - chokidar: "npm:^3.5.3" - destr: "npm:^2.0.2" - h3: "npm:^1.8.2" - ioredis: "npm:^5.3.2" - listhen: "npm:^1.5.5" - lru-cache: "npm:^10.0.2" - mri: "npm:^1.2.0" - node-fetch-native: "npm:^1.4.1" - ofetch: "npm:^1.3.3" - ufo: "npm:^1.3.1" - peerDependencies: - "@azure/app-configuration": ^1.4.1 - "@azure/cosmos": ^4.0.0 - "@azure/data-tables": ^13.2.2 - "@azure/identity": ^3.3.2 - "@azure/keyvault-secrets": ^4.7.0 - "@azure/storage-blob": ^12.16.0 - "@capacitor/preferences": ^5.0.6 - "@netlify/blobs": ^6.2.0 - "@planetscale/database": ^1.11.0 - "@upstash/redis": ^1.23.4 - "@vercel/kv": ^0.2.3 - idb-keyval: ^6.2.1 - peerDependenciesMeta: - "@azure/app-configuration": - optional: true - "@azure/cosmos": - optional: true - "@azure/data-tables": - optional: true - "@azure/identity": - optional: true - "@azure/keyvault-secrets": - optional: true - "@azure/storage-blob": - optional: true - "@capacitor/preferences": - optional: true - "@netlify/blobs": - optional: true - "@planetscale/database": - optional: true - "@upstash/redis": - optional: true - "@vercel/kv": - optional: true - idb-keyval: - optional: true - checksum: 10/1b99782efd7f22826731da0b9fe4af18227e006c6b3f057d7cd0da5590d93a1ff3eb192d8b037bcc883a9c76de96560a2e975a0f574eb4b8f5e7207bae3de149 - languageName: node - linkType: hard - -"untun@npm:^0.1.2": - version: 0.1.2 - resolution: "untun@npm:0.1.2" - dependencies: - citty: "npm:^0.1.3" - consola: "npm:^3.2.3" - pathe: "npm:^1.1.1" - bin: - untun: bin/untun.mjs - checksum: 10/c1adddf95262627157209072891b61893aecf601f45380b6b65b3fd241d6ab9f0ff6f95f1ed01d4372c11159d6baa117b0fd572cfb8920f70ce9d344d8c5caad - languageName: node - linkType: hard - -"upath@npm:^1.2.0": - version: 1.2.0 - resolution: "upath@npm:1.2.0" - checksum: 10/ac07351d9e913eb7bc9bc0a17ed7d033a52575f0f2959e19726956c3e96f5d4d75aa6a7a777c4c9506e72372f58e06215e581f8dbff35611fc0a7b68ab4a6ddb - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.0.16": - version: 1.0.16 - resolution: "update-browserslist-db@npm:1.0.16" - dependencies: - escalade: "npm:^3.1.2" - picocolors: "npm:^1.0.1" - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 10/071bf0b2fb8568db6cd42ee2598ac9b87c794a7229fcbf1b035ae7f883e770c07143f16a5371525d5bcb94b99f9a1b279036142b0195ffd4cf5a0008fc4a500e - languageName: node - linkType: hard - -"upper-case-first@npm:^2.0.2": - version: 2.0.2 - resolution: "upper-case-first@npm:2.0.2" - dependencies: - tslib: "npm:^2.0.3" - checksum: 10/4487db4701effe3b54ced4b3e4aa4d9ab06c548f97244d04aafb642eedf96a76d5a03cf5f38f10f415531d5792d1ac6e1b50f2a76984dc6964ad530f12876409 - languageName: node - linkType: hard - -"upper-case@npm:^2.0.2": - version: 2.0.2 - resolution: "upper-case@npm:2.0.2" - dependencies: - tslib: "npm:^2.0.3" - checksum: 10/508723a2b03ab90cf1d6b7e0397513980fab821cbe79c87341d0e96cedefadf0d85f9d71eac24ab23f526a041d585a575cfca120a9f920e44eb4f8a7cf89121c - languageName: node - linkType: hard - -"uqr@npm:^0.1.2": - version: 0.1.2 - resolution: "uqr@npm:0.1.2" - checksum: 10/31f1fe7d7a8121a2670712234524763160985b053e7eb8af7925a131bcde0df11641e15129d988358032da603185456d08dd72b26b507897272eb9640273bfa6 - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10/b271ca7e3d46b7160222e3afa3e531505161c9a4e097febae9664e4b59912f4cbe94861361a4175edac3a03fee99d91e44b6a58c17a634bc5a664b19fc76fbcb - languageName: node - linkType: hard - -"url-parse@npm:^1.5.3": - version: 1.5.10 - resolution: "url-parse@npm:1.5.10" - dependencies: - querystringify: "npm:^2.1.1" - requires-port: "npm:^1.0.0" - checksum: 10/c9e96bc8c5b34e9f05ddfeffc12f6aadecbb0d971b3cc26015b58d5b44676a99f50d5aeb1e5c9e61fa4d49961ae3ab1ae997369ed44da51b2f5ac010d188e6ad - languageName: node - linkType: hard - -"url@npm:^0.11.0": - version: 0.11.3 - resolution: "url@npm:0.11.3" - dependencies: - punycode: "npm:^1.4.1" - qs: "npm:^6.11.2" - checksum: 10/a3a5ba64d8afb4dda111355d94073a9754b88b1de4035554c398b75f3e4d4244d5e7ae9e4554f0d91be72efd416aedbb646fbb1f3dd4cacecca45ed6c9b75145 - languageName: node - linkType: hard - -"urlpattern-polyfill@npm:^10.0.0": - version: 10.0.0 - resolution: "urlpattern-polyfill@npm:10.0.0" - checksum: 10/346819dbe718e929988298d02a988b8ddfa601d08daaa7e69b1148eab699c86c0f0f933d68d8c8cf913166fe64156ed28904e673200d18ef7e9ed6b58cea3fc7 - languageName: node - linkType: hard - -"use-sync-external-store@npm:1.2.0": - version: 1.2.0 - resolution: "use-sync-external-store@npm:1.2.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/a676216affc203876bd47981103f201f28c2731361bb186367e12d287a7566763213a8816910c6eb88265eccd4c230426eb783d64c373c4a180905be8820ed8e - languageName: node - linkType: hard - -"use-sync-external-store@npm:1.4.0, use-sync-external-store@npm:^1.4.0": - version: 1.4.0 - resolution: "use-sync-external-store@npm:1.4.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - checksum: 10/08bf581a8a2effaefc355e9d18ed025d436230f4cc973db2f593166df357cf63e47b9097b6e5089b594758bde322e1737754ad64905e030d70f8ff7ee671fd01 - languageName: node - linkType: hard - -"usehooks-ts@npm:^2.9.1": - version: 2.9.1 - resolution: "usehooks-ts@npm:2.9.1" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/7a5c215c9f69fb9cc9afa7ad75bcdc9104a4f661ce4e8ba13fb391dcc6b6f9b1f45bf5e0fc18a25160218f351f5950c2417526861fee61bda05d2c8819c5f773 - languageName: node - linkType: hard - -"utf-8-validate@npm:^5.0.2": - version: 5.0.10 - resolution: "utf-8-validate@npm:5.0.10" - dependencies: - node-gyp: "npm:latest" - node-gyp-build: "npm:^4.3.0" - checksum: 10/b89cbc13b4badad04828349ebb7aa2ab1edcb02b46ab12ce0ba5b2d6886d684ad4e93347819e3c8d36224c8742422d2dca69f5cc16c72ae4d7eeecc0c5cb544b - languageName: node - linkType: hard - -"utf8@npm:3.0.0": - version: 3.0.0 - resolution: "utf8@npm:3.0.0" - checksum: 10/31d19c4faacbb65b09ebc1c21c32b20bdb0919c6f6773cee5001b99bb83f8e503e7233c08fc71ebb34f7cfebd95cec3243b81d90176097aa2f286cccb4ce866e - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 10/474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 - languageName: node - linkType: hard - -"util.promisify@npm:~1.0.0": - version: 1.0.1 - resolution: "util.promisify@npm:1.0.1" - dependencies: - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.17.2" - has-symbols: "npm:^1.0.1" - object.getownpropertydescriptors: "npm:^2.1.0" - checksum: 10/f55ee259b22a9479cec4546b4724bb1e4b6c2d4fcd4627254a6483a63a609c9b223cb54fba084cd57b4d4105f7297f3197d57b30a1baee2e8e118fa7ae7e5750 - languageName: node - linkType: hard - -"util@npm:^0.12.4, util@npm:^0.12.5": - version: 0.12.5 - resolution: "util@npm:0.12.5" - dependencies: - inherits: "npm:^2.0.3" - is-arguments: "npm:^1.0.4" - is-generator-function: "npm:^1.0.7" - is-typed-array: "npm:^1.1.3" - which-typed-array: "npm:^1.1.2" - checksum: 10/61a10de7753353dd4d744c917f74cdd7d21b8b46379c1e48e1c4fd8e83f8190e6bd9978fc4e5102ab6a10ebda6019d1b36572fa4a325e175ec8b789a121f6147 - languageName: node - linkType: hard - -"utila@npm:~0.4": - version: 0.4.0 - resolution: "utila@npm:0.4.0" - checksum: 10/b068d8cb140588da0d0c80ee3c14c6b75d3f68760d8a1c6c3908d0270e9e4056454ff16189586481b7382926c44674f6929d08e06eaf9ec8f62736cd900169c5 - languageName: node - linkType: hard - -"utils-merge@npm:1.0.1": - version: 1.0.1 - resolution: "utils-merge@npm:1.0.1" - checksum: 10/5d6949693d58cb2e636a84f3ee1c6e7b2f9c16cb1d42d0ecb386d8c025c69e327205aa1c69e2868cc06a01e5e20681fbba55a4e0ed0cce913d60334024eae798 - languageName: node - linkType: hard - -"uuid@npm:^3.3.2": - version: 3.4.0 - resolution: "uuid@npm:3.4.0" - bin: - uuid: ./bin/uuid - checksum: 10/4f2b86432b04cc7c73a0dd1bcf11f1fc18349d65d2e4e32dd0fc658909329a1e0cc9244aa93f34c0cccfdd5ae1af60a149251a5f420ec3ac4223a3dab198fb2e - languageName: node - linkType: hard - -"uuid@npm:^8.3.2": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" - bin: - uuid: dist/bin/uuid - checksum: 10/9a5f7aa1d6f56dd1e8d5f2478f855f25c645e64e26e347a98e98d95781d5ed20062d6cca2eecb58ba7c84bc3910be95c0451ef4161906abaab44f9cb68ffbdd1 - languageName: node - linkType: hard - -"uuid@npm:^9.0.1": - version: 9.0.1 - resolution: "uuid@npm:9.0.1" - bin: - uuid: dist/bin/uuid - checksum: 10/9d0b6adb72b736e36f2b1b53da0d559125ba3e39d913b6072f6f033e0c87835b414f0836b45bcfaf2bdf698f92297fea1c3cc19b0b258bc182c9c43cc0fab9f2 - languageName: node - linkType: hard - -"uvu@npm:^0.5.0": - version: 0.5.6 - resolution: "uvu@npm:0.5.6" - dependencies: - dequal: "npm:^2.0.0" - diff: "npm:^5.0.0" - kleur: "npm:^4.0.3" - sade: "npm:^1.7.3" - bin: - uvu: bin.js - checksum: 10/66ba25afc6732249877f9f4f8b6146f3aaa97538c51cf498f55825d602c33dbb903e02c7e1547cbca6bdfbb609e07eb7ea758b5156002ac2dd5072f00606f8d9 - languageName: node - linkType: hard - -"v8-compile-cache-lib@npm:^3.0.1": - version: 3.0.1 - resolution: "v8-compile-cache-lib@npm:3.0.1" - checksum: 10/88d3423a52b6aaf1836be779cab12f7016d47ad8430dffba6edf766695e6d90ad4adaa3d8eeb512cc05924f3e246c4a4ca51e089dccf4402caa536b5e5be8961 - languageName: node - linkType: hard - -"v8-to-istanbul@npm:^8.1.0": - version: 8.1.1 - resolution: "v8-to-istanbul@npm:8.1.1" - dependencies: - "@types/istanbul-lib-coverage": "npm:^2.0.1" - convert-source-map: "npm:^1.6.0" - source-map: "npm:^0.7.3" - checksum: 10/db5469f133a7cfb7680a28ddfb31aad2cc64f282fa7cf0c8e91f91bfd542bf61597260282be28c9648f0f2114963a24b273ed92af9a5cad6cb629c708ca72f8e - languageName: node - linkType: hard - -"valibot@npm:^0.38.0": - version: 0.38.0 - resolution: "valibot@npm:0.38.0" - peerDependencies: - typescript: ">=5" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/bde3764ab3314bb39a5935c26d367534c9ead745b3c415650a6e7295633073b51e4e86e34e3b7a7036b0210323bca7720d74d081bcc421b7d8aaf97215dad361 - languageName: node - linkType: hard - -"validate-npm-package-license@npm:^3.0.1": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: "npm:^3.0.0" - spdx-expression-parse: "npm:^3.0.0" - checksum: 10/86242519b2538bb8aeb12330edebb61b4eb37fd35ef65220ab0b03a26c0592c1c8a7300d32da3cde5abd08d18d95e8dabfad684b5116336f6de9e6f207eec224 - languageName: node - linkType: hard - -"valtio@npm:1.11.2": - version: 1.11.2 - resolution: "valtio@npm:1.11.2" - dependencies: - proxy-compare: "npm:2.5.1" - use-sync-external-store: "npm:1.2.0" - peerDependencies: - "@types/react": ">=16.8" - react: ">=16.8" - peerDependenciesMeta: - "@types/react": - optional: true - react: - optional: true - checksum: 10/a259f5af204b801668e019855813a8f702c9558961395bb5847f583119428b997efb9b0e6feb5d6e48a76a9b541173a10fdfdb1527a7bd14477a0e0c5beba914 - languageName: node - linkType: hard - -"valtio@npm:1.13.2": - version: 1.13.2 - resolution: "valtio@npm:1.13.2" - dependencies: - derive-valtio: "npm:0.1.0" - proxy-compare: "npm:2.6.0" - use-sync-external-store: "npm:1.2.0" - peerDependencies: - "@types/react": ">=16.8" - react: ">=16.8" - peerDependenciesMeta: - "@types/react": - optional: true - react: - optional: true - checksum: 10/0e638f23314fc61a31571cd27bfc2169330d2488cf6d2bd1526535aca67e633734707a1e787ab475151dbca277754db7da08c5cf0372ea2a48a563f33a25ade0 - languageName: node - linkType: hard - -"value-or-promise@npm:^1.0.11, value-or-promise@npm:^1.0.12": - version: 1.0.12 - resolution: "value-or-promise@npm:1.0.12" - checksum: 10/a4cc31fc9c3826b8a216ef2037b676904324c00c4acd903aaec2fe0c08516a189345261dd3cc822ec108532b2ea36b7c99bbdee1c3ddcb7f4b3d57d7e61b2064 - languageName: node - linkType: hard - -"vanilla-jsoneditor@npm:^3.3.1": - version: 3.3.1 - resolution: "vanilla-jsoneditor@npm:3.3.1" - dependencies: - "@codemirror/autocomplete": "npm:^6.18.1" - "@codemirror/commands": "npm:^6.7.1" - "@codemirror/lang-json": "npm:^6.0.1" - "@codemirror/language": "npm:^6.10.3" - "@codemirror/lint": "npm:^6.8.2" - "@codemirror/search": "npm:^6.5.6" - "@codemirror/state": "npm:^6.4.1" - "@codemirror/view": "npm:^6.34.1" - "@fortawesome/free-regular-svg-icons": "npm:^6.6.0" - "@fortawesome/free-solid-svg-icons": "npm:^6.6.0" - "@jsonquerylang/jsonquery": "npm:^3.1.1 || ^4.0.0" - "@lezer/highlight": "npm:^1.2.1" - "@replit/codemirror-indentation-markers": "npm:^6.5.3" - ajv: "npm:^8.17.1" - codemirror-wrapped-line-indent: "npm:^1.0.8" - diff-sequences: "npm:^29.6.3" - immutable-json-patch: "npm:^6.0.1" - jmespath: "npm:^0.16.0" - json-source-map: "npm:^0.6.1" - jsonpath-plus: "npm:^10.3.0" - jsonrepair: "npm:^3.0.0" - lodash-es: "npm:^4.17.21" - memoize-one: "npm:^6.0.0" - natural-compare-lite: "npm:^1.4.0" - svelte: "npm:^5.0.0" - vanilla-picker: "npm:^2.12.3" - checksum: 10/564299ce1f04b33ac1ca4988d780068923ebad3cb1a24f1eee365e9ec7d4fc7f2d5b988e457ae0593910e4f2adc3c9a761ec2b5ddf4dda549dbcf3451e0bc640 - languageName: node - linkType: hard - -"vanilla-picker@npm:^2.12.3": - version: 2.12.3 - resolution: "vanilla-picker@npm:2.12.3" - dependencies: - "@sphinxxxx/color-conversion": "npm:^2.2.2" - checksum: 10/e3854d8de41420ab799f78f5758d3fb0dbb080d8d2265845fea8ccab4265e62aef8901f70ba147fe57af3d21f87457bb6b0a397747684b38b8f4394d87cbbce1 - languageName: node - linkType: hard - -"varuint-bitcoin@npm:^2.0.0": - version: 2.0.0 - resolution: "varuint-bitcoin@npm:2.0.0" - dependencies: - uint8array-tools: "npm:^0.0.8" - checksum: 10/059ecf90cf7496e63ff585519873ad4f7b2009f586d3864fda4d02b92aab5af03b58ac518a06e5ae30dff5c5003cd250747a00e92f2cd2ce9fc1e4e16daf1ef1 - languageName: node - linkType: hard - -"vary@npm:~1.1.2": - version: 1.1.2 - resolution: "vary@npm:1.1.2" - checksum: 10/31389debef15a480849b8331b220782230b9815a8e0dbb7b9a8369559aed2e9a7800cd904d4371ea74f4c3527db456dc8e7ac5befce5f0d289014dbdf47b2242 - languageName: node - linkType: hard - -"vfile-message@npm:^3.0.0": - version: 3.1.4 - resolution: "vfile-message@npm:3.1.4" - dependencies: - "@types/unist": "npm:^2.0.0" - unist-util-stringify-position: "npm:^3.0.0" - checksum: 10/423ca87f4427a403e4688d7ec663a2e6add694eefac47c945746463377428c7553bc613058841f1da83e18b68af886d3dd11cb96d582b5cc3c98e11efb7e55e9 - languageName: node - linkType: hard - -"vfile-message@npm:^4.0.0": - version: 4.0.2 - resolution: "vfile-message@npm:4.0.2" - dependencies: - "@types/unist": "npm:^3.0.0" - unist-util-stringify-position: "npm:^4.0.0" - checksum: 10/1a5a72bf4945a7103750a3001bd979088ce42f6a01efa8590e68b2425e1afc61ddc5c76f2d3c4a7053b40332b24c09982b68743223e99281158fe727135719fc - languageName: node - linkType: hard - -"vfile@npm:^5.0.0": - version: 5.3.7 - resolution: "vfile@npm:5.3.7" - dependencies: - "@types/unist": "npm:^2.0.0" - is-buffer: "npm:^2.0.0" - unist-util-stringify-position: "npm:^3.0.0" - vfile-message: "npm:^3.0.0" - checksum: 10/d8f59b419d4c83b3ed24f500cf02393149b728f8803f88519c18fe0733f62544fa9ab0d8425a8bc7835181d848b9ce29c014168dc45af72f416074bbe475f643 - languageName: node - linkType: hard - -"vfile@npm:^6.0.0": - version: 6.0.3 - resolution: "vfile@npm:6.0.3" - dependencies: - "@types/unist": "npm:^3.0.0" - vfile-message: "npm:^4.0.0" - checksum: 10/a5a85293c9eb8787aa42e180edaef00c13199a493d6ed82fecf13ab29a68526850788e22434d77808ea6b17a74e03ff899b9b4711df5b9eee75afcddd7c2e1fb - languageName: node - linkType: hard - -"viem@npm:2.23.2": - version: 2.23.2 - resolution: "viem@npm:2.23.2" - dependencies: - "@noble/curves": "npm:1.8.1" - "@noble/hashes": "npm:1.7.1" - "@scure/bip32": "npm:1.6.2" - "@scure/bip39": "npm:1.5.4" - abitype: "npm:1.0.8" - isows: "npm:1.0.6" - ox: "npm:0.6.7" - ws: "npm:8.18.0" - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/847fdb57a6941f67c4ff97c79d99368c48e78b9c070df8fb3f3310d58bbd075fd78e9a506abccb82fcdbcf0c6c13aba7cfb021e37fda0777ea1eb0ccecf25fe1 - languageName: node - linkType: hard - -"viem@npm:>=2.23.11, viem@npm:^2.22.21, viem@npm:^2.23.10, viem@npm:^2.24.1": - version: 2.24.1 - resolution: "viem@npm:2.24.1" - dependencies: - "@noble/curves": "npm:1.8.1" - "@noble/hashes": "npm:1.7.1" - "@scure/bip32": "npm:1.6.2" - "@scure/bip39": "npm:1.5.4" - abitype: "npm:1.0.8" - isows: "npm:1.0.6" - ox: "npm:0.6.9" - ws: "npm:8.18.1" - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/ef9231d93a823f3b10920857c2e9f93fcfd1998e31afb28a9c5c25c6ffac23241908705c2636138f6eceef31adf683399c9a836a1995e64957243b5e5efce8e1 - languageName: node - linkType: hard - -"viem@npm:^2.1.1": - version: 2.21.50 - resolution: "viem@npm:2.21.50" - dependencies: - "@noble/curves": "npm:1.6.0" - "@noble/hashes": "npm:1.5.0" - "@scure/bip32": "npm:1.5.0" - "@scure/bip39": "npm:1.4.0" - abitype: "npm:1.0.6" - isows: "npm:1.0.6" - ox: "npm:0.1.2" - webauthn-p256: "npm:0.0.10" - ws: "npm:8.18.0" - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/6525c7dfa679d48759d50a31751b1d608f055e4396506c4f48550b81655b75b53978bd2dbe39099ac200f549c7429261d3478810dbd63b36df6a0afd77f69931 - languageName: node - linkType: hard - -"viem@npm:^2.21.59": - version: 2.22.17 - resolution: "viem@npm:2.22.17" - dependencies: - "@noble/curves": "npm:1.8.1" - "@noble/hashes": "npm:1.7.1" - "@scure/bip32": "npm:1.6.2" - "@scure/bip39": "npm:1.5.4" - abitype: "npm:1.0.8" - isows: "npm:1.0.6" - ox: "npm:0.6.7" - ws: "npm:8.18.0" - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/30f83e71393459355a893459282dc9f5cd9c7a31099ff71116fea16ce29c5fb0713e0f40207b7b16dbd987a991b39b9f22e951b19f507f3f0e3da7356c8c90ab - languageName: node - linkType: hard - -"viem@npm:^2.23.2": - version: 2.29.2 - resolution: "viem@npm:2.29.2" - dependencies: - "@noble/curves": "npm:1.8.2" - "@noble/hashes": "npm:1.7.2" - "@scure/bip32": "npm:1.6.2" - "@scure/bip39": "npm:1.5.4" - abitype: "npm:1.0.8" - isows: "npm:1.0.6" - ox: "npm:0.6.9" - ws: "npm:8.18.1" - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/deaddf43517beb44d1f17b6229a8c2a323f99533f27319e8176de071549aa9e6247c68ed915fb0f69bb84e2e85e880f17efc4564f7f23adb34c78f90b56c2c9c - languageName: node - linkType: hard - -"viem@npm:^2.27.0": - version: 2.32.1 - resolution: "viem@npm:2.32.1" - dependencies: - "@noble/curves": "npm:1.9.2" - "@noble/hashes": "npm:1.8.0" - "@scure/bip32": "npm:1.7.0" - "@scure/bip39": "npm:1.6.0" - abitype: "npm:1.0.8" - isows: "npm:1.0.7" - ox: "npm:0.8.1" - ws: "npm:8.18.2" - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/890c82d32c8db6717c65d9a37daf6223bc9313ceb1cc22b19b8fc49ded18198bf060fd2fd27676a5b1cdbf1ea36cb9b4a44b75a608218251d54b41d189a7022c - languageName: node - linkType: hard - -"vite-node@npm:1.6.1": - version: 1.6.1 - resolution: "vite-node@npm:1.6.1" - dependencies: - cac: "npm:^6.7.14" - debug: "npm:^4.3.4" - pathe: "npm:^1.1.1" - picocolors: "npm:^1.0.0" - vite: "npm:^5.0.0" - bin: - vite-node: vite-node.mjs - checksum: 10/35f77a9efa38fae349e9c383780984deee185e0fdd107394ffe320586c9a896c59e9b098a9a9f96412adb293abf1a27671ca592b39013edadb9e0614aa817419 - languageName: node - linkType: hard - -"vite-plugin-dts@npm:^4.3.0": - version: 4.3.0 - resolution: "vite-plugin-dts@npm:4.3.0" - dependencies: - "@microsoft/api-extractor": "npm:^7.47.11" - "@rollup/pluginutils": "npm:^5.1.0" - "@volar/typescript": "npm:^2.4.4" - "@vue/language-core": "npm:2.1.6" - compare-versions: "npm:^6.1.1" - debug: "npm:^4.3.6" - kolorist: "npm:^1.8.0" - local-pkg: "npm:^0.5.0" - magic-string: "npm:^0.30.11" - peerDependencies: - typescript: "*" - vite: "*" - peerDependenciesMeta: - vite: - optional: true - checksum: 10/bbf59fb9d4ab9420f3fd2be2090439a072c4a57194cf6ee987ae990d1d95e2d9b16fae1a7c26578705d6a396a81eb6346ec522216e1f7cfc4f4d891fc29bd839 - languageName: node - linkType: hard - -"vite-plugin-node-polyfills@npm:^0.23.0": - version: 0.23.0 - resolution: "vite-plugin-node-polyfills@npm:0.23.0" - dependencies: - "@rollup/plugin-inject": "npm:^5.0.5" - node-stdlib-browser: "npm:^1.2.0" - peerDependencies: - vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 - checksum: 10/91cd35b54a06c623cb660282e128d889d43b19b6edbc0316114905b488161c9877b7a8f36c2f736317c3cec1980daad74ee776629d3c8a157ad51e1a0d7ee363 - languageName: node - linkType: hard - -"vite-plugin-static-copy@npm:^3.0.0": - version: 3.0.0 - resolution: "vite-plugin-static-copy@npm:3.0.0" - dependencies: - chokidar: "npm:^3.5.3" - fs-extra: "npm:^11.3.0" - p-map: "npm:^7.0.3" - picocolors: "npm:^1.1.1" - tinyglobby: "npm:^0.2.13" - peerDependencies: - vite: ^5.0.0 || ^6.0.0 - checksum: 10/06146ba263df82c2e040de4795ec1360db82a3ed4474672332c0893df1a8c3f202163135fbd0a85de066acaf0f05076f337b2f9ad753971c8f0c18099e6c35cc - languageName: node - linkType: hard - -"vite-plugin-svgr@npm:^4.3.0": - version: 4.3.0 - resolution: "vite-plugin-svgr@npm:4.3.0" - dependencies: - "@rollup/pluginutils": "npm:^5.1.3" - "@svgr/core": "npm:^8.1.0" - "@svgr/plugin-jsx": "npm:^8.1.0" - peerDependencies: - vite: ">=2.6.0" - checksum: 10/9ade316f20dae881f4ee65e4f2a35be11cf75b22a411bfcdb55bd61382c0249395cb925775e06a49e0fdffe483e64d5a25068c3ddfc5823fb72013cf4d932d17 - languageName: node - linkType: hard - -"vite-tsconfig-paths@npm:^4.3.2": - version: 4.3.2 - resolution: "vite-tsconfig-paths@npm:4.3.2" - dependencies: - debug: "npm:^4.1.1" - globrex: "npm:^0.1.2" - tsconfck: "npm:^3.0.3" - peerDependencies: - vite: "*" - peerDependenciesMeta: - vite: - optional: true - checksum: 10/c12e2087fd01ac8a694850c649b79d5b9798cdba0ef9ab4116f669d8ffa1a9a3195c5a14410d3d9a12d2f08cd35ddd74f03d9c7b13a2d590d002055cdaab45c0 - languageName: node - linkType: hard - -"vite@npm:^5.0.0, vite@npm:^5.4.11": - version: 5.4.11 - resolution: "vite@npm:5.4.11" - dependencies: - esbuild: "npm:^0.21.3" - fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.43" - rollup: "npm:^4.20.0" - peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" - lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - bin: - vite: bin/vite.js - checksum: 10/719c4dea896e9547958643354003c8c9ea98e5367196d98f5f46cffb3ec963fead3ea5853f5af941c79bbfb73583dec19bbb0d28d2f644b95d7f59c55e22919d - languageName: node - linkType: hard - -"vitest@npm:^1.6.1": - version: 1.6.1 - resolution: "vitest@npm:1.6.1" - dependencies: - "@vitest/expect": "npm:1.6.1" - "@vitest/runner": "npm:1.6.1" - "@vitest/snapshot": "npm:1.6.1" - "@vitest/spy": "npm:1.6.1" - "@vitest/utils": "npm:1.6.1" - acorn-walk: "npm:^8.3.2" - chai: "npm:^4.3.10" - debug: "npm:^4.3.4" - execa: "npm:^8.0.1" - local-pkg: "npm:^0.5.0" - magic-string: "npm:^0.30.5" - pathe: "npm:^1.1.1" - picocolors: "npm:^1.0.0" - std-env: "npm:^3.5.0" - strip-literal: "npm:^2.0.0" - tinybench: "npm:^2.5.1" - tinypool: "npm:^0.8.3" - vite: "npm:^5.0.0" - vite-node: "npm:1.6.1" - why-is-node-running: "npm:^2.2.2" - peerDependencies: - "@edge-runtime/vm": "*" - "@types/node": ^18.0.0 || >=20.0.0 - "@vitest/browser": 1.6.1 - "@vitest/ui": 1.6.1 - happy-dom: "*" - jsdom: "*" - peerDependenciesMeta: - "@edge-runtime/vm": - optional: true - "@types/node": - optional: true - "@vitest/browser": - optional: true - "@vitest/ui": - optional: true - happy-dom: - optional: true - jsdom: - optional: true - bin: - vitest: vitest.mjs - checksum: 10/50d551be2cf6621d3844c42924595007befd73e10e9406e0fa08f1239e2c012d08f85b0a70d8656a11364a6a58930600c35a5ee00d8445071f0ab0afcacd085a - languageName: node - linkType: hard - -"vm-browserify@npm:^1.0.1": - version: 1.1.2 - resolution: "vm-browserify@npm:1.1.2" - checksum: 10/ad5b17c9f7a9d9f1ed0e24c897782ab7a587c1fd40f370152482e1af154c7cf0b0bacc45c5ae76a44289881e083ae4ae127808fdff864aa9b562192aae8b5c3b - languageName: node - linkType: hard - -"void-elements@npm:3.1.0": - version: 3.1.0 - resolution: "void-elements@npm:3.1.0" - checksum: 10/0390f818107fa8fce55bb0a5c3f661056001c1d5a2a48c28d582d4d847347c2ab5b7f8272314cac58acf62345126b6b09bea623a185935f6b1c3bbce0dfd7f7f - languageName: node - linkType: hard - -"vscode-uri@npm:^3.0.8": - version: 3.0.8 - resolution: "vscode-uri@npm:3.0.8" - checksum: 10/e882d6b679e0d053cbc042893c0951a135d899a192b62cd07f0a8924f11ae722067a8d6b1b5b147034becf57faf9fff9fb543b17b749fd0f17db1f54f783f07c - languageName: node - linkType: hard - -"vue-hot-reload-api@npm:^2.3.0": - version: 2.3.4 - resolution: "vue-hot-reload-api@npm:2.3.4" - checksum: 10/948b0a44a1727b297bff86979e0dcb38615b45f9e7760a7b8c57929b4eda0ea7b4eb0393bf33c0d88be1432eff92615b497a2a9b6b418dd9cb38b48f40138e47 - languageName: node - linkType: hard - -"vue-loader@npm:^15.9.8": - version: 15.10.1 - resolution: "vue-loader@npm:15.10.1" - dependencies: - "@vue/component-compiler-utils": "npm:^3.1.0" - hash-sum: "npm:^1.0.2" - loader-utils: "npm:^1.1.0" - vue-hot-reload-api: "npm:^2.3.0" - vue-style-loader: "npm:^4.1.0" - peerDependencies: - css-loader: "*" - webpack: ^3.0.0 || ^4.1.0 || ^5.0.0-0 - peerDependenciesMeta: - cache-loader: - optional: true - vue-template-compiler: - optional: true - checksum: 10/828dd30ec4f9ced1d3e4dd03fdff80e4146a87858f3a0c7fdd53dca705f1203efdc60a48ddb7a792c82f355200428964a0aa62544d6cdfe07978e09d8fd821d6 - languageName: node - linkType: hard - -"vue-router@npm:^3.5.3": - version: 3.6.5 - resolution: "vue-router@npm:3.6.5" - checksum: 10/281a13d314de6967edf28f3fb424c3bb2453d87ef5930900de33fc8856ee919003062ea5aa588b1cee500738dead054c75022b6ad8959199e0102b32f9d855fa - languageName: node - linkType: hard - -"vue-style-loader@npm:^4.1.0": - version: 4.1.3 - resolution: "vue-style-loader@npm:4.1.3" - dependencies: - hash-sum: "npm:^1.0.2" - loader-utils: "npm:^1.0.2" - checksum: 10/d64df2271347fcf26374bf56c92b745dceeb4408b9a334068c0f20569518f228147a7403538f29997c3fe7bd703eedb5177facfd3ebe15e4d0cf9b533cf46df5 - languageName: node - linkType: hard - -"vue-template-compiler@npm:^2.6.14": - version: 2.7.14 - resolution: "vue-template-compiler@npm:2.7.14" - dependencies: - de-indent: "npm:^1.0.2" - he: "npm:^1.2.0" - checksum: 10/b55cbc2d5dd07d6cbf2ac87cce93fb76f3db4dcea6f7910dab98fd5e2068d97f4bcb3ee7ceedbabd9fd96ce3547116fa3ca6ff1cc6e3df17d18e6b356009067e - languageName: node - linkType: hard - -"vue-template-es2015-compiler@npm:^1.9.0": - version: 1.9.1 - resolution: "vue-template-es2015-compiler@npm:1.9.1" - checksum: 10/4814787d94a03fcb17a7c71adf13b539c106188a7d92dd9020513d7c473793c05e2a7749729422565d762fb271474caf67030c44fc6df39533b8bbd3fd1f845e - languageName: node - linkType: hard - -"vue@npm:^2.6.14": - version: 2.7.14 - resolution: "vue@npm:2.7.14" - dependencies: - "@vue/compiler-sfc": "npm:2.7.14" - csstype: "npm:^3.1.0" - checksum: 10/6ffd58aa43c3c14d5740f8822e093fef6d4f69cf5200c10c8d51db80139dbda53bf4adca0e6c47b8fc8851d3f61b22609f780788bd1bf6d5e9d7e0a76aaab916 - languageName: node - linkType: hard - -"w3c-hr-time@npm:^1.0.2": - version: 1.0.2 - resolution: "w3c-hr-time@npm:1.0.2" - dependencies: - browser-process-hrtime: "npm:^1.0.0" - checksum: 10/03851d90c236837c24c2983f5a8806a837c6515b21d52e5f29776b07cc08695779303d481454d768308489f00dd9d3232d595acaa5b2686d199465a4d9f7b283 - languageName: node - linkType: hard - -"w3c-keyname@npm:^2.2.4": - version: 2.2.8 - resolution: "w3c-keyname@npm:2.2.8" - checksum: 10/95bafa4c04fa2f685a86ca1000069c1ec43ace1f8776c10f226a73296caeddd83f893db885c2c220ebeb6c52d424e3b54d7c0c1e963bbf204038ff1a944fbb07 - languageName: node - linkType: hard - -"w3c-xmlserializer@npm:^2.0.0": - version: 2.0.0 - resolution: "w3c-xmlserializer@npm:2.0.0" - dependencies: - xml-name-validator: "npm:^3.0.0" - checksum: 10/400c18b75ce6af269168f964e7d1eb196a7422e134032906540c69d83b802f38dc64e18fc259c02966a334687483f416398d2ad7ebe9d19ab434a7a0247c71c3 - languageName: node - linkType: hard - -"w3c-xmlserializer@npm:^4.0.0": - version: 4.0.0 - resolution: "w3c-xmlserializer@npm:4.0.0" - dependencies: - xml-name-validator: "npm:^4.0.0" - checksum: 10/9a00c412b5496f4f040842c9520bc0aaec6e0c015d06412a91a723cd7d84ea605ab903965f546b4ecdb3eae267f5145ba08565222b1d6cb443ee488cda9a0aee - languageName: node - linkType: hard - -"wabt@npm:1.0.24": - version: 1.0.24 - resolution: "wabt@npm:1.0.24" - bin: - wasm-decompile: bin/wasm-decompile - wasm-interp: bin/wasm-interp - wasm-objdump: bin/wasm-objdump - wasm-opcodecnt: bin/wasm-opcodecnt - wasm-strip: bin/wasm-strip - wasm-validate: bin/wasm-validate - wasm2c: bin/wasm2c - wasm2wat: bin/wasm2wat - wat2wasm: bin/wat2wasm - checksum: 10/c4f486db9d91ffb2e22739ccc21458aba3a7dc50f2e5c885c90b2f8555538aa92c518c249afbc59b78e2e333e699ce19a9040e888a69d6bf38329b77d52cf3c6 - languageName: node - linkType: hard - -"wagmi@npm:^2.14.15": - version: 2.14.15 - resolution: "wagmi@npm:2.14.15" - dependencies: - "@wagmi/connectors": "npm:5.7.11" - "@wagmi/core": "npm:2.16.7" - use-sync-external-store: "npm:1.4.0" - peerDependencies: - "@tanstack/react-query": ">=5.0.0" - react: ">=18" - typescript: ">=5.0.4" - viem: 2.x - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/3e0725fe9083c3899c5d041d33eda1dfc8f687c42a8197bec211d73d0fee62518c7cef9c20f77c89dca3b556695b15f523516ce5f1e3be9171df683c77a8faa6 - languageName: node - linkType: hard - -"walker@npm:^1.0.7": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: "npm:1.0.12" - checksum: 10/ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c - languageName: node - linkType: hard - -"warning@npm:^4.0.0, warning@npm:^4.0.3": - version: 4.0.3 - resolution: "warning@npm:4.0.3" - dependencies: - loose-envify: "npm:^1.0.0" - checksum: 10/e7842aff036e2e07ce7a6cc3225e707775b969fe3d0577ad64bd24660e3a9ce3017f0b8c22a136566dcd3a151f37b8ed1ccee103b3bd82bd8a571bf80b247bc4 - languageName: node - linkType: hard - -"watchpack@npm:^2.4.0": - version: 2.4.0 - resolution: "watchpack@npm:2.4.0" - dependencies: - glob-to-regexp: "npm:^0.4.1" - graceful-fs: "npm:^4.1.2" - checksum: 10/4280b45bc4b5d45d5579113f2a4af93b67ae1b9607cc3d86ae41cdd53ead10db5d9dc3237f24256d05ef88b28c69a02712f78e434cb7ecc8edaca134a56e8cab - languageName: node - linkType: hard - -"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": - version: 1.7.3 - resolution: "wbuf@npm:1.7.3" - dependencies: - minimalistic-assert: "npm:^1.0.0" - checksum: 10/c18b51c4e1fb19705c94b93c0cf093ba014606abceee949399d56074ef1863bf4897a8d884be24e8d224d18c9ce411cf6924006d0a5430492729af51256e067a - languageName: node - linkType: hard - -"wcwidth@npm:^1.0.1": - version: 1.0.1 - resolution: "wcwidth@npm:1.0.1" - dependencies: - defaults: "npm:^1.0.3" - checksum: 10/182ebac8ca0b96845fae6ef44afd4619df6987fe5cf552fdee8396d3daa1fb9b8ec5c6c69855acb7b3c1231571393bd1f0a4cdc4028d421575348f64bb0a8817 - languageName: node - linkType: hard - -"weald@npm:^1.0.4": - version: 1.0.4 - resolution: "weald@npm:1.0.4" - dependencies: - ms: "npm:^3.0.0-canary.1" - supports-color: "npm:^9.4.0" - checksum: 10/6bb68cdb030547a77cfec690efc0bda3938abb5471196404161c312f7611abeb1497cfcb6932f20096fc48181ad3018faa11c0c68568501d8dccbf064e1a28a2 - languageName: node - linkType: hard - -"web3-errors@npm:^1.2.0, web3-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "web3-errors@npm:1.3.0" - dependencies: - web3-types: "npm:^1.7.0" - checksum: 10/613b01013b697dcaaad0ff9cfac8c4c69557fb0ffbc9efe86ac3eaf5179c6f18687fdcd2e53faf0a2c3ee68409491171968eb2017444cb14ffa74663ff77556f - languageName: node - linkType: hard - -"web3-errors@npm:^1.3.1": - version: 1.3.1 - resolution: "web3-errors@npm:1.3.1" - dependencies: - web3-types: "npm:^1.10.0" - checksum: 10/0d1cb0e02701a4bd619f856b0a6702fdd4cdc0a434029c3c3dcde3f3cc4acaca418117ad10238002aa697745840e7fd312bd43ad5341482b3ff8f9e6eb438a31 - languageName: node - linkType: hard - -"web3-eth-abi@npm:4.4.1": - version: 4.4.1 - resolution: "web3-eth-abi@npm:4.4.1" - dependencies: - abitype: "npm:0.7.1" - web3-errors: "npm:^1.3.1" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/0c7f4f9f05f04e0ac98f6029edfb3bf7e514efc325f6be83e999203f49c7a0cdc9759f4b1011ce12d80c2044c74a867f7fc0ee83538408c2ebb4c9f407027b7f - languageName: node - linkType: hard - -"web3-eth-abi@npm:^4.2.0": - version: 4.4.0 - resolution: "web3-eth-abi@npm:4.4.0" - dependencies: - abitype: "npm:0.7.1" - web3-errors: "npm:^1.3.0" - web3-types: "npm:^1.9.0" - web3-utils: "npm:^4.3.2" - web3-validator: "npm:^2.0.6" - checksum: 10/e55859ac1deec4d75f113c247ac1987aa8142a88f0b7c2488df5de5e00a45e7b3e4f601e685ff35b8c0bdd7495baa84ce3fac89e00ca86beae8857e46af78e0c - languageName: node - linkType: hard - -"web3-types@npm:^1.10.0": - version: 1.10.0 - resolution: "web3-types@npm:1.10.0" - checksum: 10/849f05a001896b27082c5b5c46c62b65a28f463366eeec7223802418a61db6d3487ebfb73d1fe6dcad3f0849a76e20706098819cb4e266df4f75ca24617e62a1 - languageName: node - linkType: hard - -"web3-types@npm:^1.6.0, web3-types@npm:^1.7.0, web3-types@npm:^1.8.1, web3-types@npm:^1.9.0": - version: 1.9.0 - resolution: "web3-types@npm:1.9.0" - checksum: 10/3df9e02cedfbf0480e1bcfaccc4d6046d10115548e373f1a1231f925000702c65b0475467a904a854cfbe70cf940f94629e9ce93304a6f91b6f64e1a86418f7b - languageName: node - linkType: hard - -"web3-utils@npm:^1.3.6": - version: 1.10.0 - resolution: "web3-utils@npm:1.10.0" - dependencies: - bn.js: "npm:^5.2.1" - ethereum-bloom-filters: "npm:^1.0.6" - ethereumjs-util: "npm:^7.1.0" - ethjs-unit: "npm:0.1.6" - number-to-bn: "npm:1.7.0" - randombytes: "npm:^2.1.0" - utf8: "npm:3.0.0" - checksum: 10/8766d5bafafe37a0c647c79ea1adf5782e90b8db71133a92e5e492d04af3be65c33562a22f5a29a303c034d1fa755d08a71bd83e3a3e236101bd0e13e75b31da - languageName: node - linkType: hard - -"web3-utils@npm:^4.3.2": - version: 4.3.2 - resolution: "web3-utils@npm:4.3.2" - dependencies: - ethereum-cryptography: "npm:^2.0.0" - eventemitter3: "npm:^5.0.1" - web3-errors: "npm:^1.3.0" - web3-types: "npm:^1.8.1" - web3-validator: "npm:^2.0.6" - checksum: 10/3fff4418782b0fb05587c9150daedbad90a9ebadd1e3b115a71a72fea885ce10341054758087e47ab81f3cc67da812eaf9077f05e07a872e63d27299f285a81a - languageName: node - linkType: hard - -"web3-utils@npm:^4.3.3": - version: 4.3.3 - resolution: "web3-utils@npm:4.3.3" - dependencies: - ethereum-cryptography: "npm:^2.0.0" - eventemitter3: "npm:^5.0.1" - web3-errors: "npm:^1.3.1" - web3-types: "npm:^1.10.0" - web3-validator: "npm:^2.0.6" - checksum: 10/c91ebbe67e469fe184ab258564b1f002f6f0e563a91637429c8e5bd3f0653b970d0c45dac544402021a5512297f0bea39aa2dd0b4c9bc6f54d4b58897f2dd002 - languageName: node - linkType: hard - -"web3-validator@npm:^2.0.6": - version: 2.0.6 - resolution: "web3-validator@npm:2.0.6" - dependencies: - ethereum-cryptography: "npm:^2.0.0" - util: "npm:^0.12.5" - web3-errors: "npm:^1.2.0" - web3-types: "npm:^1.6.0" - zod: "npm:^3.21.4" - checksum: 10/4df08e5317d55cdb674cbd11d7534a6cb41abfa4912cf3ff976c2b34a98e84500732fa0cade68a848e57b61259b4c9b377773f57de6bb69a5029c2ddef1cd0ab - languageName: node - linkType: hard - -"webauthn-p256@npm:0.0.10": - version: 0.0.10 - resolution: "webauthn-p256@npm:0.0.10" - dependencies: - "@noble/curves": "npm:^1.4.0" - "@noble/hashes": "npm:^1.4.0" - checksum: 10/dde2b6313b6a0f20996f7ee90181258fc7685bfff401df7d904578da75b374f25d5b9c1189cd2fcec30625b1f276b393188d156d49783f0611623cd713bb5b09 - languageName: node - linkType: hard - -"webextension-polyfill@npm:>=0.10.0 <1.0, webextension-polyfill@npm:^0.10.0": - version: 0.10.0 - resolution: "webextension-polyfill@npm:0.10.0" - checksum: 10/51ff30ebed4b1aa802b7f0347f05021b2fe492078bb1a597223d43995fcee96e2da8f914a2f6e36f988c1877ed5ab36ca7077f2f3ab828955151a59e4c01bf7e - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10/b65b9f8d6854572a84a5c69615152b63371395f0c5dcd6729c45789052296df54314db2bc3e977df41705eacb8bc79c247cee139a63fa695192f95816ed528ad - languageName: node - linkType: hard - -"webidl-conversions@npm:^4.0.2": - version: 4.0.2 - resolution: "webidl-conversions@npm:4.0.2" - checksum: 10/594187c36f2d7898f89c0ed3b9248a095fa549ecc1befb10a97bc884b5680dc96677f58df5579334d8e0d1018e5ef075689cfa2a6c459f45a61a9deb512cb59e - languageName: node - linkType: hard - -"webidl-conversions@npm:^5.0.0": - version: 5.0.0 - resolution: "webidl-conversions@npm:5.0.0" - checksum: 10/cea864dd9cf1f2133d82169a446fb94427ba089e4676f5895273ea085f165649afe587ae3f19f2f0370751a724bba2d96e9956d652b3e41ac1feaaa4376e2d70 - languageName: node - linkType: hard - -"webidl-conversions@npm:^6.1.0": - version: 6.1.0 - resolution: "webidl-conversions@npm:6.1.0" - checksum: 10/4454b73060a6d83f7ec1f1db24c480b7ecda33880306dd32a3d62d85b36df4789a383489f1248387e5451737dca17054b8cbf2e792ba89e49d76247f0f4f6380 - languageName: node - linkType: hard - -"webidl-conversions@npm:^7.0.0": - version: 7.0.0 - resolution: "webidl-conversions@npm:7.0.0" - checksum: 10/4c4f65472c010eddbe648c11b977d048dd96956a625f7f8b9d64e1b30c3c1f23ea1acfd654648426ce5c743c2108a5a757c0592f02902cf7367adb7d14e67721 - languageName: node - linkType: hard - -"webpack-dev-middleware@npm:^5.3.1": - version: 5.3.3 - resolution: "webpack-dev-middleware@npm:5.3.3" - dependencies: - colorette: "npm:^2.0.10" - memfs: "npm:^3.4.3" - mime-types: "npm:^2.1.31" - range-parser: "npm:^1.2.1" - schema-utils: "npm:^4.0.0" - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - checksum: 10/31a2f7a11e58a76bdcde1eb8da310b6643844d9b442f9916f48be5b46c103f23490c393c32a9af501ce68226fbb018b811f5a956635ed60a03f9481a4bcd6c76 - languageName: node - linkType: hard - -"webpack-dev-server@npm:^4.6.0": - version: 4.15.1 - resolution: "webpack-dev-server@npm:4.15.1" - dependencies: - "@types/bonjour": "npm:^3.5.9" - "@types/connect-history-api-fallback": "npm:^1.3.5" - "@types/express": "npm:^4.17.13" - "@types/serve-index": "npm:^1.9.1" - "@types/serve-static": "npm:^1.13.10" - "@types/sockjs": "npm:^0.3.33" - "@types/ws": "npm:^8.5.5" - ansi-html-community: "npm:^0.0.8" - bonjour-service: "npm:^1.0.11" - chokidar: "npm:^3.5.3" - colorette: "npm:^2.0.10" - compression: "npm:^1.7.4" - connect-history-api-fallback: "npm:^2.0.0" - default-gateway: "npm:^6.0.3" - express: "npm:^4.17.3" - graceful-fs: "npm:^4.2.6" - html-entities: "npm:^2.3.2" - http-proxy-middleware: "npm:^2.0.3" - ipaddr.js: "npm:^2.0.1" - launch-editor: "npm:^2.6.0" - open: "npm:^8.0.9" - p-retry: "npm:^4.5.0" - rimraf: "npm:^3.0.2" - schema-utils: "npm:^4.0.0" - selfsigned: "npm:^2.1.1" - serve-index: "npm:^1.9.1" - sockjs: "npm:^0.3.24" - spdy: "npm:^4.0.2" - webpack-dev-middleware: "npm:^5.3.1" - ws: "npm:^8.13.0" - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - bin: - webpack-dev-server: bin/webpack-dev-server.js - checksum: 10/fd6dfb6c71eb94696b21930ea4c2f25e95ba85fac1bbc15aa5d03af0a90712eba057901fa9131ed3e901665c95b2379208279aca61e9c48e7cda276c3caa95dd - languageName: node - linkType: hard - -"webpack-manifest-plugin@npm:^4.0.2": - version: 4.1.1 - resolution: "webpack-manifest-plugin@npm:4.1.1" - dependencies: - tapable: "npm:^2.0.0" - webpack-sources: "npm:^2.2.0" - peerDependencies: - webpack: ^4.44.2 || ^5.47.0 - checksum: 10/d7b0fa36579bf7b6b093103b1484b7af1df76bc2691a08680b0d2cbbebfda6313749b63f19905e964f27c64f27c138bac0216d483df8acd41a1c5f0048fb123e - languageName: node - linkType: hard - -"webpack-sources@npm:^1.4.3": - version: 1.4.3 - resolution: "webpack-sources@npm:1.4.3" - dependencies: - source-list-map: "npm:^2.0.0" - source-map: "npm:~0.6.1" - checksum: 10/6237c5d1ba639a5d67bd1135c9bba487eadbd04c5e75a2849508013f13cb4b57387e689e0991c19a14a87085be7cc0b8dd1515422ae351f6e3f813ed100ccbb8 - languageName: node - linkType: hard - -"webpack-sources@npm:^2.2.0": - version: 2.3.1 - resolution: "webpack-sources@npm:2.3.1" - dependencies: - source-list-map: "npm:^2.0.1" - source-map: "npm:^0.6.1" - checksum: 10/0c4bb91f2899205648da25b68edf4495a360692af2c426cde98b188367478c93d5e33e2b08665e070ac0ece59ade8d52175da656a212b44701ce4a271ca66695 - languageName: node - linkType: hard - -"webpack-sources@npm:^3.2.3": - version: 3.2.3 - resolution: "webpack-sources@npm:3.2.3" - checksum: 10/a661f41795d678b7526ae8a88cd1b3d8ce71a7d19b6503da8149b2e667fc7a12f9b899041c1665d39e38245ed3a59ab68de648ea31040c3829aa695a5a45211d - languageName: node - linkType: hard - -"webpack@npm:^5.64.4, webpack@npm:^5.65.0": - version: 5.87.0 - resolution: "webpack@npm:5.87.0" - dependencies: - "@types/eslint-scope": "npm:^3.7.3" - "@types/estree": "npm:^1.0.0" - "@webassemblyjs/ast": "npm:^1.11.5" - "@webassemblyjs/wasm-edit": "npm:^1.11.5" - "@webassemblyjs/wasm-parser": "npm:^1.11.5" - acorn: "npm:^8.7.1" - acorn-import-assertions: "npm:^1.9.0" - browserslist: "npm:^4.14.5" - chrome-trace-event: "npm:^1.0.2" - enhanced-resolve: "npm:^5.15.0" - es-module-lexer: "npm:^1.2.1" - eslint-scope: "npm:5.1.1" - events: "npm:^3.2.0" - glob-to-regexp: "npm:^0.4.1" - graceful-fs: "npm:^4.2.9" - json-parse-even-better-errors: "npm:^2.3.1" - loader-runner: "npm:^4.2.0" - mime-types: "npm:^2.1.27" - neo-async: "npm:^2.6.2" - schema-utils: "npm:^3.2.0" - tapable: "npm:^2.1.1" - terser-webpack-plugin: "npm:^5.3.7" - watchpack: "npm:^2.4.0" - webpack-sources: "npm:^3.2.3" - peerDependenciesMeta: - webpack-cli: - optional: true - bin: - webpack: bin/webpack.js - checksum: 10/242ebb9b96b8d26e5c71d4e1a7458b3daea25ef0e477bc307dc44ff11dd3b8a7fa43c66811efd7947be2401a0dba1c0362bc55c9e2ea0eec15f643d3e237f600 - languageName: node - linkType: hard - -"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": - version: 0.7.4 - resolution: "websocket-driver@npm:0.7.4" - dependencies: - http-parser-js: "npm:>=0.5.1" - safe-buffer: "npm:>=5.1.0" - websocket-extensions: "npm:>=0.1.1" - checksum: 10/17197d265d5812b96c728e70fd6fe7d067471e121669768fe0c7100c939d997ddfc807d371a728556e24fc7238aa9d58e630ea4ff5fd4cfbb40f3d0a240ef32d - languageName: node - linkType: hard - -"websocket-extensions@npm:>=0.1.1": - version: 0.1.4 - resolution: "websocket-extensions@npm:0.1.4" - checksum: 10/b5399b487d277c78cdd2aef63764b67764aa9899431e3a2fa272c6ad7236a0fb4549b411d89afa76d5afd664c39d62fc19118582dc937e5bb17deb694f42a0d1 - languageName: node - linkType: hard - -"whatwg-encoding@npm:^1.0.5": - version: 1.0.5 - resolution: "whatwg-encoding@npm:1.0.5" - dependencies: - iconv-lite: "npm:0.4.24" - checksum: 10/5be4efe111dce29ddee3448d3915477fcc3b28f991d9cf1300b4e50d6d189010d47bca2f51140a844cf9b726e8f066f4aee72a04d687bfe4f2ee2767b2f5b1e6 - languageName: node - linkType: hard - -"whatwg-encoding@npm:^2.0.0": - version: 2.0.0 - resolution: "whatwg-encoding@npm:2.0.0" - dependencies: - iconv-lite: "npm:0.6.3" - checksum: 10/162d712d88fd134a4fe587e53302da812eb4215a1baa4c394dfd86eff31d0a079ff932c05233857997de07481093358d6e7587997358f49b8a580a777be22089 - languageName: node - linkType: hard - -"whatwg-fetch@npm:^3.4.1": - version: 3.6.20 - resolution: "whatwg-fetch@npm:3.6.20" - checksum: 10/2b4ed92acd6a7ad4f626a6cb18b14ec982bbcaf1093e6fe903b131a9c6decd14d7f9c9ca3532663c2759d1bdf01d004c77a0adfb2716a5105465c20755a8c57c - languageName: node - linkType: hard - -"whatwg-fetch@npm:^3.6.2": - version: 3.6.2 - resolution: "whatwg-fetch@npm:3.6.2" - checksum: 10/f05ceff9e9098db228fee84b9f9258a434283c0eb3cd8183c8b22e25e32698a2f80ee8a9c1c634d5b1441fe7692a031812d8a1f21079da76892a5119be2ac945 - languageName: node - linkType: hard - -"whatwg-mimetype@npm:^2.3.0": - version: 2.3.0 - resolution: "whatwg-mimetype@npm:2.3.0" - checksum: 10/3582c1d74d708716013433bbab45cb9b31ef52d276adfbe2205d948be1ec9bb1a4ac05ce6d9045f3acc4104489e1344c857b14700002385a4b997a5673ff6416 - languageName: node - linkType: hard - -"whatwg-mimetype@npm:^3.0.0": - version: 3.0.0 - resolution: "whatwg-mimetype@npm:3.0.0" - checksum: 10/96f9f628c663c2ae05412c185ca81b3df54bcb921ab52fe9ebc0081c1720f25d770665401eb2338ab7f48c71568133845638e18a81ed52ab5d4dcef7d22b40ef - languageName: node - linkType: hard - -"whatwg-url@npm:^11.0.0": - version: 11.0.0 - resolution: "whatwg-url@npm:11.0.0" - dependencies: - tr46: "npm:^3.0.0" - webidl-conversions: "npm:^7.0.0" - checksum: 10/dfcd51c6f4bfb54685528fb10927f3fd3d7c809b5671beef4a8cdd7b1408a7abf3343a35bc71dab83a1424f1c1e92cc2700d7930d95d231df0fac361de0c7648 - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10/f95adbc1e80820828b45cc671d97da7cd5e4ef9deb426c31bcd5ab00dc7103042291613b3ef3caec0a2335ed09e0d5ed026c940755dbb6d404e2b27f940fdf07 - languageName: node - linkType: hard - -"whatwg-url@npm:^7.0.0": - version: 7.1.0 - resolution: "whatwg-url@npm:7.1.0" - dependencies: - lodash.sortby: "npm:^4.7.0" - tr46: "npm:^1.0.1" - webidl-conversions: "npm:^4.0.2" - checksum: 10/769fd35838b4e50536ae08d836472e86adbedda1d5493ea34353c55468147e7868b91d2535b59e01a9e7331ab7e4cdfdf5490c279c045da23c327cf33e32f755 - languageName: node - linkType: hard - -"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0": - version: 8.7.0 - resolution: "whatwg-url@npm:8.7.0" - dependencies: - lodash: "npm:^4.7.0" - tr46: "npm:^2.1.0" - webidl-conversions: "npm:^6.1.0" - checksum: 10/512a8b2703dffbf13a9a247bf2fb27c3048a3ceb5ece09f88b737c8260afaba4b2f6775c2f1cfc29c2ba4859f2454a9de73fac08e239b00ae2b42cd6b8bb0d35 - languageName: node - linkType: hard - -"wherearewe@npm:^2.0.1": - version: 2.0.1 - resolution: "wherearewe@npm:2.0.1" - dependencies: - is-electron: "npm:^2.2.0" - checksum: 10/06ea2b4ab3915c67197cd58fe5630185f0173a78495152ece82f23c388d5dd4a1f0f873f2a13bcd4914006c1481cb2ebbf6e5b995e380efc7882a99d419214d0 - languageName: node - linkType: hard - -"which-boxed-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "which-boxed-primitive@npm:1.0.2" - dependencies: - is-bigint: "npm:^1.0.1" - is-boolean-object: "npm:^1.1.0" - is-number-object: "npm:^1.0.4" - is-string: "npm:^1.0.5" - is-symbol: "npm:^1.0.3" - checksum: 10/9c7ca7855255f25ac47f4ce8b59c4cc33629e713fd7a165c9d77a2bb47bf3d9655a5664660c70337a3221cf96742f3589fae15a3a33639908d33e29aa2941efb - languageName: node - linkType: hard - -"which-builtin-type@npm:^1.1.3": - version: 1.1.3 - resolution: "which-builtin-type@npm:1.1.3" - dependencies: - function.prototype.name: "npm:^1.1.5" - has-tostringtag: "npm:^1.0.0" - is-async-function: "npm:^2.0.0" - is-date-object: "npm:^1.0.5" - is-finalizationregistry: "npm:^1.0.2" - is-generator-function: "npm:^1.0.10" - is-regex: "npm:^1.1.4" - is-weakref: "npm:^1.0.2" - isarray: "npm:^2.0.5" - which-boxed-primitive: "npm:^1.0.2" - which-collection: "npm:^1.0.1" - which-typed-array: "npm:^1.1.9" - checksum: 10/d7823c4a6aa4fc8183eb572edd9f9ee2751e5f3ba2ccd5b298cc163f720df0f02ee1a5291d18ca8a41d48144ef40007ff6a64e6f5e7c506527086c7513a5f673 - languageName: node - linkType: hard - -"which-collection@npm:^1.0.1": - version: 1.0.1 - resolution: "which-collection@npm:1.0.1" - dependencies: - is-map: "npm:^2.0.1" - is-set: "npm:^2.0.1" - is-weakmap: "npm:^2.0.1" - is-weakset: "npm:^2.0.1" - checksum: 10/85c95fcf92df7972ce66bed879e53d9dc752a30ef08e1ca4696df56bcf1c302e3b9965a39b04a20fa280a997fad6c170eb0b4d62435569b7f6c0bc7be910572b - languageName: node - linkType: hard - -"which-module@npm:^2.0.0": - version: 2.0.1 - resolution: "which-module@npm:2.0.1" - checksum: 10/1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be - languageName: node - linkType: hard - -"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": - version: 1.1.15 - resolution: "which-typed-array@npm:1.1.15" - dependencies: - available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.7" - for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-tostringtag: "npm:^1.0.2" - checksum: 10/c3b6a99beadc971baa53c3ee5b749f2b9bdfa3b3b9a70650dd8511a48b61d877288b498d424712e9991d16019633086bd8b5923369460d93463c5825fa36c448 - languageName: node - linkType: hard - -"which@npm:2.0.2, which@npm:^2.0.1, which@npm:^2.0.2": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: "npm:^2.0.0" - bin: - node-which: ./bin/node-which - checksum: 10/4782f8a1d6b8fc12c65e968fea49f59752bf6302dc43036c3bf87da718a80710f61a062516e9764c70008b487929a73546125570acea95c5b5dcc8ac3052c70f - languageName: node - linkType: hard - -"which@npm:^1.1.1, which@npm:^1.2.14, which@npm:^1.2.9, which@npm:^1.3.1": - version: 1.3.1 - resolution: "which@npm:1.3.1" - dependencies: - isexe: "npm:^2.0.0" - bin: - which: ./bin/which - checksum: 10/549dcf1752f3ee7fbb64f5af2eead4b9a2f482108b7de3e85c781d6c26d8cf6a52d37cfbe0642a155fa6470483fe892661a859c03157f24c669cf115f3bbab5e - languageName: node - linkType: hard - -"why-is-node-running@npm:^2.2.2": - version: 2.2.2 - resolution: "why-is-node-running@npm:2.2.2" - dependencies: - siginfo: "npm:^2.0.0" - stackback: "npm:0.0.2" - bin: - why-is-node-running: cli.js - checksum: 10/f3582e0337f4b25537d492b1d40f00b978ce04b1d1eeea8f310bfa8aae8a7d11d118d672e2f0760c164ce3753a620a70aa29ff3620e340197624940cf9c08615 - languageName: node - linkType: hard - -"wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: "npm:^1.0.2 || 2 || 3 || 4" - checksum: 10/d5f8027b9a8255a493a94e4ec1b74a27bff6679d5ffe29316a3215e4712945c84ef73ca4045c7e20ae7d0c72f5f57f296e04a4928e773d4276a2f1222e4c2e99 - languageName: node - linkType: hard - -"widest-line@npm:^3.1.0": - version: 3.1.0 - resolution: "widest-line@npm:3.1.0" - dependencies: - string-width: "npm:^4.0.0" - checksum: 10/03db6c9d0af9329c37d74378ff1d91972b12553c7d72a6f4e8525fe61563fa7adb0b9d6e8d546b7e059688712ea874edd5ded475999abdeedf708de9849310e0 - languageName: node - linkType: hard - -"wonka@npm:^6.3.2": - version: 6.3.4 - resolution: "wonka@npm:6.3.4" - checksum: 10/0f102630182828268b57b54102003449b97abbc2483392239baf856a2fca7b72ae9be67c208415124a3d26a320674ed64387e9bf07a8d0badedb5f607d2ccfdc - languageName: node - linkType: hard - -"word-wrap@npm:1.2.5": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: 10/1ec6f6089f205f83037be10d0c4b34c9183b0b63fca0834a5b3cee55dd321429d73d40bb44c8fc8471b5203d6e8f8275717f49a8ff4b2b0ab41d7e1b563e0854 - languageName: node - linkType: hard - -"wordwrap@npm:^1.0.0": - version: 1.0.0 - resolution: "wordwrap@npm:1.0.0" - checksum: 10/497d40beb2bdb08e6d38754faa17ce20b0bf1306327f80cb777927edb23f461ee1f6bc659b3c3c93f26b08e1cf4b46acc5bae8fda1f0be3b5ab9a1a0211034cd - languageName: node - linkType: hard - -"wordwrapjs@npm:^4.0.0": - version: 4.0.1 - resolution: "wordwrapjs@npm:4.0.1" - dependencies: - reduce-flatten: "npm:^2.0.0" - typical: "npm:^5.2.0" - checksum: 10/4182c48c9d3eab0932fb9f9f202e3f1d4d28ff6db3fd2e1654ec8606677d8e0ab80110f0f8e2e236ee2b52631cbc5fccf3097e9287e3ace20cbc1613a784befc - languageName: node - linkType: hard - -"workbox-background-sync@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-background-sync@npm:6.6.0" - dependencies: - idb: "npm:^7.0.1" - workbox-core: "npm:6.6.0" - checksum: 10/fac828af1985de6f5e81715856c20592550ae2dfbf0014562b7a4eb75e31675f441085a42df9e16baf3ec0313f89173df2bc1159c9212b7e7c859bc36be19aea - languageName: node - linkType: hard - -"workbox-broadcast-update@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-broadcast-update@npm:6.6.0" - dependencies: - workbox-core: "npm:6.6.0" - checksum: 10/bdae00361dbd22d8728486abaa81db4c806c6b5f449c39149c1d6f62f21c4552f21f024e1aa67aa68ab365ae0705abfbccb042b91cc0e4533e9c87d6bf63a8bd - languageName: node - linkType: hard - -"workbox-build@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-build@npm:6.6.0" - dependencies: - "@apideck/better-ajv-errors": "npm:^0.3.1" - "@babel/core": "npm:^7.11.1" - "@babel/preset-env": "npm:^7.11.0" - "@babel/runtime": "npm:^7.11.2" - "@rollup/plugin-babel": "npm:^5.2.0" - "@rollup/plugin-node-resolve": "npm:^11.2.1" - "@rollup/plugin-replace": "npm:^2.4.1" - "@surma/rollup-plugin-off-main-thread": "npm:^2.2.3" - ajv: "npm:^8.6.0" - common-tags: "npm:^1.8.0" - fast-json-stable-stringify: "npm:^2.1.0" - fs-extra: "npm:^9.0.1" - glob: "npm:^7.1.6" - lodash: "npm:^4.17.20" - pretty-bytes: "npm:^5.3.0" - rollup: "npm:^2.43.1" - rollup-plugin-terser: "npm:^7.0.0" - source-map: "npm:^0.8.0-beta.0" - stringify-object: "npm:^3.3.0" - strip-comments: "npm:^2.0.1" - tempy: "npm:^0.6.0" - upath: "npm:^1.2.0" - workbox-background-sync: "npm:6.6.0" - workbox-broadcast-update: "npm:6.6.0" - workbox-cacheable-response: "npm:6.6.0" - workbox-core: "npm:6.6.0" - workbox-expiration: "npm:6.6.0" - workbox-google-analytics: "npm:6.6.0" - workbox-navigation-preload: "npm:6.6.0" - workbox-precaching: "npm:6.6.0" - workbox-range-requests: "npm:6.6.0" - workbox-recipes: "npm:6.6.0" - workbox-routing: "npm:6.6.0" - workbox-strategies: "npm:6.6.0" - workbox-streams: "npm:6.6.0" - workbox-sw: "npm:6.6.0" - workbox-window: "npm:6.6.0" - checksum: 10/ad7ef11dccc2558488de75e70747a52db6b80ddda1ef7bf3cce459d8ba3fe2076f8ffbb3ad4fc31451ba45c14bff46fa4b75fe945e5817637076a9438202962c - languageName: node - linkType: hard - -"workbox-cacheable-response@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-cacheable-response@npm:6.6.0" - dependencies: - workbox-core: "npm:6.6.0" - checksum: 10/8864887ded61b36e8949ed415c7378e58b5fe64be808ceae27e670ff926a04f291798aaf0386b56540ea83c91e0ec6f3c33237981443531dd2749bcd9374914c - languageName: node - linkType: hard - -"workbox-core@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-core@npm:6.6.0" - checksum: 10/575af5aa8c1e88129b4b56e1558e002aa349e86e505405e5a381f55c74e93c7362402e5e3992eaff61b6ebbe5795c6ab88e4703b41cdc337672df9203dff0391 - languageName: node - linkType: hard - -"workbox-expiration@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-expiration@npm:6.6.0" - dependencies: - idb: "npm:^7.0.1" - workbox-core: "npm:6.6.0" - checksum: 10/0ad5ccd54d07b4e7a435329f623d9cb32a2a1f3cd54a9e73246dfa39c77c02203686eaa81e8313ab51b4c85e74531125cb29e8db0036770497e2ef3e2074354b - languageName: node - linkType: hard - -"workbox-google-analytics@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-google-analytics@npm:6.6.0" - dependencies: - workbox-background-sync: "npm:6.6.0" - workbox-core: "npm:6.6.0" - workbox-routing: "npm:6.6.0" - workbox-strategies: "npm:6.6.0" - checksum: 10/3c649c96ef22720fac6b1c59f7966f9976c087d78f5efe4acc2ade3b41e31afff64f6e7996e9cf66a534c26d9f5e8565f25113f5894489117667eb52e0a0fde7 - languageName: node - linkType: hard - -"workbox-navigation-preload@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-navigation-preload@npm:6.6.0" - dependencies: - workbox-core: "npm:6.6.0" - checksum: 10/da499d23dc45f8b2d848c36cd179c6b63f6444e85ff384e03a21351b9844208a8c3ea50890ba1fcc4faf6e2b20cfcc1b11c96a139bfee089c8d3c1b570b0c9ff - languageName: node - linkType: hard - -"workbox-precaching@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-precaching@npm:6.6.0" - dependencies: - workbox-core: "npm:6.6.0" - workbox-routing: "npm:6.6.0" - workbox-strategies: "npm:6.6.0" - checksum: 10/0990312fc2d71e4a4cdffd832939c7fae4a74847ec2a89a0857a7a0bf29a01ca07e45f3b5c0158e2e9dadd63e437b75b28d9a984dc8f5e5bf0d7cf4f980deee0 - languageName: node - linkType: hard - -"workbox-range-requests@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-range-requests@npm:6.6.0" - dependencies: - workbox-core: "npm:6.6.0" - checksum: 10/9418035fce36f4a940e0ccae41cbc590c8e51bd3ed975b172d2f92fe5e364c5181030577c1c72a6b4f1730a68059ad4f6e99289063092ec2a88aa92fdc8b314f - languageName: node - linkType: hard - -"workbox-recipes@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-recipes@npm:6.6.0" - dependencies: - workbox-cacheable-response: "npm:6.6.0" - workbox-core: "npm:6.6.0" - workbox-expiration: "npm:6.6.0" - workbox-precaching: "npm:6.6.0" - workbox-routing: "npm:6.6.0" - workbox-strategies: "npm:6.6.0" - checksum: 10/8c2a84f8eaf430e1a0e841ff340fcbb240d4ce0d02355228bc02c571859d8a660c3b731f47e5b89600b33d278e557e96e49bf4a2e57134be70dd1dc230bf35bf - languageName: node - linkType: hard - -"workbox-routing@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-routing@npm:6.6.0" - dependencies: - workbox-core: "npm:6.6.0" - checksum: 10/0a7dcb0e881c1b79777b239a21b83eb0e7809296e59a0159ba17c7560b100e61e475cd1786ac040360058d43da32062f5356316d2276e13a247cbbbf15a1b135 - languageName: node - linkType: hard - -"workbox-strategies@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-strategies@npm:6.6.0" - dependencies: - workbox-core: "npm:6.6.0" - checksum: 10/0800e611e46c256c4a4c81e48da23aeccac15bd78d61a67403c4fa9270df410300e505b4f23b19dae0865ea69b5b3248646b1a537598e93c532630e84df52a8f - languageName: node - linkType: hard - -"workbox-streams@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-streams@npm:6.6.0" - dependencies: - workbox-core: "npm:6.6.0" - workbox-routing: "npm:6.6.0" - checksum: 10/d11622eae28c394c7c7cfa760055cd68cfa909393bc5bd33d1d3bfff30d764d61a02034752e1c4e8896c2aef26d701effc59e919e4740d08ec78537daf4c0c77 - languageName: node - linkType: hard - -"workbox-sw@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-sw@npm:6.6.0" - checksum: 10/9bdba15d7a92f409f253591ab4332239a238bc7b536ef3708984815fa731a451fcc75aaf27b6bfd9d1765983659695f918e9710fd578e58fb6835f0799f53a08 - languageName: node - linkType: hard - -"workbox-webpack-plugin@npm:^6.4.1": - version: 6.6.0 - resolution: "workbox-webpack-plugin@npm:6.6.0" - dependencies: - fast-json-stable-stringify: "npm:^2.1.0" - pretty-bytes: "npm:^5.4.1" - upath: "npm:^1.2.0" - webpack-sources: "npm:^1.4.3" - workbox-build: "npm:6.6.0" - peerDependencies: - webpack: ^4.4.0 || ^5.9.0 - checksum: 10/34a0236a73488c80597d6cb3a5e8ec3f295c34b75ad1ccd9a1ea5a1ead678b5993a19ae068d29ff34c69f367260e2d0f285b124271a98688daad7e5bc042b71c - languageName: node - linkType: hard - -"workbox-window@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-window@npm:6.6.0" - dependencies: - "@types/trusted-types": "npm:^2.0.2" - workbox-core: "npm:6.6.0" - checksum: 10/2d6508c9455644a8ff2a48633366e0591ecd00ea8627e3c277803b47a5f67dc04d08dd21b651919644b06a3a6535cff1b07f7692addee70624d77d47b16cdcb6 - languageName: node - linkType: hard - -"workerpool@npm:^6.5.1": - version: 6.5.1 - resolution: "workerpool@npm:6.5.1" - checksum: 10/b1b00139fe62f2ebec556a2af8085bf6e7502ad26cf2a4dcb34fb4408b2e68aa12c88b0a50cb463b24f2806d60fa491fc0da933b56ec3b53646aeec0025d14cb - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10/cebdaeca3a6880da410f75209e68cd05428580de5ad24535f22696d7d9cab134d1f8498599f344c3cf0fb37c1715807a183778d8c648d6cc0cb5ff2bb4236540 - languageName: node - linkType: hard - -"wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10/0d64f2d438e0b555e693b95aee7b2689a12c3be5ac458192a1ce28f542a6e9e59ddfecc37520910c2c88eb1f82a5411260566dba5064e8f9895e76e169e76187 - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.0.1, wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: "npm:^6.1.0" - string-width: "npm:^5.0.1" - strip-ansi: "npm:^7.0.1" - checksum: 10/7b1e4b35e9bb2312d2ee9ee7dc95b8cb5f8b4b5a89f7dde5543fe66c1e3715663094defa50d75454ac900bd210f702d575f15f3f17fa9ec0291806d2578d1ddf - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 10/159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 - languageName: node - linkType: hard - -"write-file-atomic@npm:^3.0.0": - version: 3.0.3 - resolution: "write-file-atomic@npm:3.0.3" - dependencies: - imurmurhash: "npm:^0.1.4" - is-typedarray: "npm:^1.0.0" - signal-exit: "npm:^3.0.2" - typedarray-to-buffer: "npm:^3.1.5" - checksum: 10/0955ab94308b74d32bc252afe69d8b42ba4b8a28b8d79f399f3f405969f82623f981e35d13129a52aa2973450f342107c06d86047572637584e85a1c0c246bf3 - languageName: node - linkType: hard - -"ws@npm:7.4.6": - version: 7.4.6 - resolution: "ws@npm:7.4.6" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/150e3f917b7cde568d833a5ea6ccc4132e59c38d04218afcf2b6c7b845752bd011a9e0dc1303c8694d3c402a0bdec5893661a390b71ff88f0fc81a4e4e66b09c - languageName: node - linkType: hard - -"ws@npm:8.13.0": - version: 8.13.0 - resolution: "ws@npm:8.13.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/1769532b6fdab9ff659f0b17810e7501831d34ecca23fd179ee64091dd93a51f42c59f6c7bb4c7a384b6c229aca8076fb312aa35626257c18081511ef62a161d - languageName: node - linkType: hard - -"ws@npm:8.17.1": - version: 8.17.1 - resolution: "ws@npm:8.17.1" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/4264ae92c0b3e59c7e309001e93079b26937aab181835fb7af79f906b22cd33b6196d96556dafb4e985742dd401e99139572242e9847661fdbc96556b9e6902d - languageName: node - linkType: hard - -"ws@npm:8.18.0, ws@npm:^8.12.0, ws@npm:^8.13.0, ws@npm:^8.5.0": - version: 8.18.0 - resolution: "ws@npm:8.18.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/70dfe53f23ff4368d46e4c0b1d4ca734db2c4149c6f68bc62cb16fc21f753c47b35fcc6e582f3bdfba0eaeb1c488cddab3c2255755a5c3eecb251431e42b3ff6 - languageName: node - linkType: hard - -"ws@npm:8.18.1": - version: 8.18.1 - resolution: "ws@npm:8.18.1" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/3f38e9594f2af5b6324138e86b74df7d77bbb8e310bf8188679dd80bac0d1f47e51536a1923ac3365f31f3d8b25ea0b03e4ade466aa8292a86cd5defca64b19b - languageName: node - linkType: hard - -"ws@npm:8.18.2": - version: 8.18.2 - resolution: "ws@npm:8.18.2" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/018e04ec95561d88248d53a2eaf094b4ae131e9b062f2679e6e8a62f04649bc543448f1e038125225ac6bbb25f54c1e65d7a2cc9dbc1e28b43e5e6b7162ad88e - languageName: node - linkType: hard - -"ws@npm:^7.4.6, ws@npm:^7.5.1, ws@npm:^7.5.10": - version: 7.5.10 - resolution: "ws@npm:7.5.10" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/9c796b84ba80ffc2c2adcdfc9c8e9a219ba99caa435c9a8d45f9ac593bba325563b3f83edc5eb067cc6d21b9a6bf2c930adf76dd40af5f58a5ca6859e81858f0 - languageName: node - linkType: hard - -"ws@npm:~8.11.0": - version: 8.11.0 - resolution: "ws@npm:8.11.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/f759ea19e42f6d94727b3d8590693f2d92521a78ec2de5c6064c3356f50d4815d427b7ddb10bf39596cc67d3b18232a1b2dfbc3b6361d4772bdfec69d4c130f4 - languageName: node - linkType: hard - -"xml-name-validator@npm:^3.0.0": - version: 3.0.0 - resolution: "xml-name-validator@npm:3.0.0" - checksum: 10/24f5d38c777ad9239dfe99c4ca3cd155415b65ac583785d1514e04b9f86d6d09eaff983ed373e7a779ceefd1fca0fd893f2fc264999e9aeaac36b6e1afc397ed - languageName: node - linkType: hard - -"xml-name-validator@npm:^4.0.0": - version: 4.0.0 - resolution: "xml-name-validator@npm:4.0.0" - checksum: 10/f9582a3f281f790344a471c207516e29e293c6041b2c20d84dd6e58832cd7c19796c47e108fd4fd4b164a5e72ad94f2268f8ace8231cde4a2c6428d6aa220f92 - languageName: node - linkType: hard - -"xmlchars@npm:^2.2.0": - version: 2.2.0 - resolution: "xmlchars@npm:2.2.0" - checksum: 10/4ad5924974efd004a47cce6acf5c0269aee0e62f9a805a426db3337af7bcbd331099df174b024ace4fb18971b8a56de386d2e73a1c4b020e3abd63a4a9b917f1 - languageName: node - linkType: hard - -"xmlhttprequest-ssl@npm:~2.0.0": - version: 2.0.0 - resolution: "xmlhttprequest-ssl@npm:2.0.0" - checksum: 10/3c2edfce0c49c7a494ed16c87e6897c9e3eba29763a5505526de83ddefd195d224fa5cdf41092298c99cd6ee473c9f259a0679f6ff3b8a9535dcd09900db91f9 - languageName: node - linkType: hard - -"xtend@npm:^4.0.1, xtend@npm:^4.0.2, xtend@npm:~4.0.1": - version: 4.0.2 - resolution: "xtend@npm:4.0.2" - checksum: 10/ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a - languageName: node - linkType: hard - -"y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 10/392870b2a100bbc643bc035fe3a89cef5591b719c7bdc8721bcdb3d27ab39fa4870acdca67b0ee096e146d769f311d68eda6b8195a6d970f227795061923013f - languageName: node - linkType: hard - -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 10/5f1b5f95e3775de4514edbb142398a2c37849ccfaf04a015be5d75521e9629d3be29bd4432d23c57f37e5b61ade592fb0197022e9993f81a06a5afbdcda9346d - languageName: node - linkType: hard - -"yallist@npm:^2.1.2": - version: 2.1.2 - resolution: "yallist@npm:2.1.2" - checksum: 10/75fc7bee4821f52d1c6e6021b91b3e079276f1a9ce0ad58da3c76b79a7e47d6f276d35e206a96ac16c1cf48daee38a8bb3af0b1522a3d11c8ffe18f898828832 - languageName: node - linkType: hard - -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 10/9af0a4329c3c6b779ac4736c69fae4190ac03029fa27c1aef4e6bcc92119b73dea6fe5db5fe881fb0ce2a0e9539a42cdf60c7c21eda04d1a0b8c082e38509efb - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10/4cb02b42b8a93b5cf50caf5d8e9beb409400a8a4d85e83bb0685c1457e9ac0b7a00819e9f5991ac25ffabb56a78e2f017c1acc010b3a1babfe6de690ba531abd - languageName: node - linkType: hard - -"yaml-ast-parser@npm:^0.0.43": - version: 0.0.43 - resolution: "yaml-ast-parser@npm:0.0.43" - checksum: 10/a54d00c8e0716a392c6e76eee965b3b4bba434494196490946e416fc47f20a1d89820461afacd9431edbb8209e28fce33bcff1fb42dd83f90e51fc31e80251c9 - languageName: node - linkType: hard - -"yaml@npm:2.3.1": - version: 2.3.1 - resolution: "yaml@npm:2.3.1" - checksum: 10/66501d597e43766eb94dc175d28ec8b2c63087d6a78783e59b4218eee32b9172740f9f27d54b7bc0ca8af61422f7134929f9974faeaac99d583787e793852fd2 - languageName: node - linkType: hard - -"yaml@npm:2.7.0": - version: 2.7.0 - resolution: "yaml@npm:2.7.0" - bin: - yaml: bin.mjs - checksum: 10/c8c314c62fbd49244a6a51b06482f6d495b37ab10fa685fcafa1bbaae7841b7233ee7d12cab087bcca5a0b28adc92868b6e437322276430c28d00f1c1732eeec - languageName: node - linkType: hard - -"yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2": - version: 1.10.2 - resolution: "yaml@npm:1.10.2" - checksum: 10/e088b37b4d4885b70b50c9fa1b7e54bd2e27f5c87205f9deaffd1fb293ab263d9c964feadb9817a7b129a5bf30a06582cb08750f810568ecc14f3cdbabb79cb3 - languageName: node - linkType: hard - -"yaml@npm:^2.1.1, yaml@npm:^2.2.2, yaml@npm:^2.3.1": - version: 2.4.5 - resolution: "yaml@npm:2.4.5" - bin: - yaml: bin.mjs - checksum: 10/b09bf5a615a65276d433d76b8e34ad6b4c0320b85eb3f1a39da132c61ae6e2ff34eff4624e6458d96d49566c93cf43408ba5e568218293a8c6541a2006883f64 - languageName: node - linkType: hard - -"yargs-parser@npm:^18.1.2": - version: 18.1.3 - resolution: "yargs-parser@npm:18.1.3" - dependencies: - camelcase: "npm:^5.0.0" - decamelize: "npm:^1.2.0" - checksum: 10/235bcbad5b7ca13e5abc54df61d42f230857c6f83223a38e4ed7b824681875b7f8b6ed52139d88a3ad007050f28dc0324b3c805deac7db22ae3b4815dae0e1bf - languageName: node - linkType: hard - -"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3, yargs-parser@npm:^20.2.9": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 10/0188f430a0f496551d09df6719a9132a3469e47fe2747208b1dd0ab2bb0c512a95d0b081628bbca5400fb20dbf2fabe63d22badb346cecadffdd948b049f3fcc - languageName: node - linkType: hard - -"yargs-parser@npm:^21.0.0, yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: 10/9dc2c217ea3bf8d858041252d43e074f7166b53f3d010a8c711275e09cd3d62a002969a39858b92bbda2a6a63a585c7127014534a560b9c69ed2d923d113406e - languageName: node - linkType: hard - -"yargs-unparser@npm:^2.0.0": - version: 2.0.0 - resolution: "yargs-unparser@npm:2.0.0" - dependencies: - camelcase: "npm:^6.0.0" - decamelize: "npm:^4.0.0" - flat: "npm:^5.0.2" - is-plain-obj: "npm:^2.1.0" - checksum: 10/68f9a542c6927c3768c2f16c28f71b19008710abd6b8f8efbac6dcce26bbb68ab6503bed1d5994bdbc2df9a5c87c161110c1dfe04c6a3fe5c6ad1b0e15d9a8a3 - languageName: node - linkType: hard - -"yargs@npm:17.7.2, yargs@npm:^17.0.0": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" - dependencies: - cliui: "npm:^8.0.1" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.3" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^21.1.1" - checksum: 10/abb3e37678d6e38ea85485ed86ebe0d1e3464c640d7d9069805ea0da12f69d5a32df8e5625e370f9c96dd1c2dc088ab2d0a4dd32af18222ef3c4224a19471576 - languageName: node - linkType: hard - -"yargs@npm:^15.3.1": - version: 15.4.1 - resolution: "yargs@npm:15.4.1" - dependencies: - cliui: "npm:^6.0.0" - decamelize: "npm:^1.2.0" - find-up: "npm:^4.1.0" - get-caller-file: "npm:^2.0.1" - require-directory: "npm:^2.1.1" - require-main-filename: "npm:^2.0.0" - set-blocking: "npm:^2.0.0" - string-width: "npm:^4.2.0" - which-module: "npm:^2.0.0" - y18n: "npm:^4.0.0" - yargs-parser: "npm:^18.1.2" - checksum: 10/bbcc82222996c0982905b668644ca363eebe6ffd6a572fbb52f0c0e8146661d8ce5af2a7df546968779bb03d1e4186f3ad3d55dfaadd1c4f0d5187c0e3a5ba16 - languageName: node - linkType: hard - -"yargs@npm:^16.2.0": - version: 16.2.0 - resolution: "yargs@npm:16.2.0" - dependencies: - cliui: "npm:^7.0.2" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.0" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^20.2.2" - checksum: 10/807fa21211d2117135d557f95fcd3c3d390530cda2eca0c840f1d95f0f40209dcfeb5ec18c785a1f3425896e623e3b2681e8bb7b6600060eda1c3f4804e7957e - languageName: node - linkType: hard - -"yn@npm:3.1.1": - version: 3.1.1 - resolution: "yn@npm:3.1.1" - checksum: 10/2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: 10/f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 - languageName: node - linkType: hard - -"yocto-queue@npm:^1.0.0": - version: 1.0.0 - resolution: "yocto-queue@npm:1.0.0" - checksum: 10/2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 - languageName: node - linkType: hard - -"yoctocolors-cjs@npm:^2.1.2": - version: 2.1.2 - resolution: "yoctocolors-cjs@npm:2.1.2" - checksum: 10/d731e3ba776a0ee19021d909787942933a6c2eafb2bbe85541f0c59aa5c7d475ce86fcb860d5803105e32244c3dd5ba875b87c4c6bf2d6f297da416aa54e556f - languageName: node - linkType: hard - -"zimmerframe@npm:^1.1.2": - version: 1.1.2 - resolution: "zimmerframe@npm:1.1.2" - checksum: 10/495e1b263b288d2c423bafb6897060856b86a32c21a3550ed2b4b30779051824b7cd3e606f46cbcdfd5b0d47660fe3ef418e9c2369d0f0709f0e6111c4d096d4 - languageName: node - linkType: hard - -"zksync-ethers@npm:^5.0.0": - version: 5.10.0 - resolution: "zksync-ethers@npm:5.10.0" - dependencies: - ethers: "npm:~5.7.0" - peerDependencies: - ethers: ~5.7.0 - checksum: 10/826719e2e40731e1104cf8a0c16c758526de6ca9e907d0483eb5bd80b635f02e3cce012115b75d68976a8dd746d63d4f83d576cc3bddc18a02a49d2bc023347f - languageName: node - linkType: hard - -"zod@npm:3.22.4": - version: 3.22.4 - resolution: "zod@npm:3.22.4" - checksum: 10/73622ca36a916f785cf528fe612a884b3e0f183dbe6b33365a7d0fc92abdbedf7804c5e2bd8df0a278e1472106d46674281397a3dd800fa9031dc3429758c6ac - languageName: node - linkType: hard - -"zod@npm:^3.21.4, zod@npm:^3.22.2, zod@npm:^3.23.8": - version: 3.23.8 - resolution: "zod@npm:3.23.8" - checksum: 10/846fd73e1af0def79c19d510ea9e4a795544a67d5b34b7e1c4d0425bf6bfd1c719446d94cdfa1721c1987d891321d61f779e8236fde517dc0e524aa851a6eff1 - languageName: node - linkType: hard - -"zustand@npm:5.0.0": - version: 5.0.0 - resolution: "zustand@npm:5.0.0" - peerDependencies: - "@types/react": ">=18.0.0" - immer: ">=9.0.6" - react: ">=18.0.0" - use-sync-external-store: ">=1.2.0" - peerDependenciesMeta: - "@types/react": - optional: true - immer: - optional: true - react: - optional: true - use-sync-external-store: - optional: true - checksum: 10/be75ef4d1b218b143314467bb9e23641231043cad2d5c3a4b2219c46d1609ee799cd8dc9acec9b23d55ec3a2a619a06616e593aea4049f3b7323938af9a33bfe - languageName: node - linkType: hard - -"zustand@npm:^5.0.3": - version: 5.0.3 - resolution: "zustand@npm:5.0.3" - peerDependencies: - "@types/react": ">=18.0.0" - immer: ">=9.0.6" - react: ">=18.0.0" - use-sync-external-store: ">=1.2.0" - peerDependenciesMeta: - "@types/react": - optional: true - immer: - optional: true - react: - optional: true - use-sync-external-store: - optional: true - checksum: 10/35728fdaa68291ea3e469524316dda4fe1d8cc22d8be3df309ca99bda0dbc7e66a1c502f66c26f76abfb4bd49a6e1368160353eb3cb173c24042a5f252075462 - languageName: node - linkType: hard - -"zwitch@npm:^2.0.0": - version: 2.0.4 - resolution: "zwitch@npm:2.0.4" - checksum: 10/f22ec5fc2d5f02c423c93d35cdfa83573a3a3bd98c66b927c368ea4d0e7252a500df2a90a6b45522be536a96a73404393c958e945fdba95e6832c200791702b6 - languageName: node - linkType: hard From a32bf4da0c1591fd38c19cc120cdfa94a8582fb2 Mon Sep 17 00:00:00 2001 From: jaybuidl <jb@kleros.io> Date: Fri, 5 Sep 2025 17:10:06 +0100 Subject: [PATCH 2/8] chore: .github --- .github/CODEOWNERS | 7 ++ .github/dependabot.yml | 62 ++++++++++ .github/workflows/codeql.yml | 79 +++++++++++++ .github/workflows/contracts-testing.yml | 143 ++++++++++++++++++++++++ .github/workflows/dependency-review.yml | 40 +++++++ .github/workflows/deploy-bots.yml | 32 ++++++ .github/workflows/deploy-subgraph.yml | 99 ++++++++++++++++ .github/workflows/scorecards.yml | 91 +++++++++++++++ .github/workflows/sentry-release.yml | 84 ++++++++++++++ .github/workflows/sonarcloud.yml | 34 ++++++ 10 files changed, 671 insertions(+) create mode 100644 .github/CODEOWNERS create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/codeql.yml create mode 100644 .github/workflows/contracts-testing.yml create mode 100644 .github/workflows/dependency-review.yml create mode 100644 .github/workflows/deploy-bots.yml create mode 100644 .github/workflows/deploy-subgraph.yml create mode 100644 .github/workflows/scorecards.yml create mode 100644 .github/workflows/sentry-release.yml create mode 100644 .github/workflows/sonarcloud.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..aaca2501d --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,7 @@ +# Default +* @kleros/maintainers-court-v2-frontend +contracts @jaybuidl + +# Owned by everyone +yarn.lock @kleros/devs +.gitignore @kleros/devs diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..e05f824a8 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,62 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +enable-beta-ecosystems: true +updates: + - package-ecosystem: npm + directory: / + target-branch: dev + schedule: + interval: weekly + open-pull-requests-limit: 10 + labels: + - dependencies + assignees: + - jaybuidl + + - package-ecosystem: github-actions + directory: / + target-branch: dev + schedule: + interval: weekly + open-pull-requests-limit: 10 + labels: + - dependencies + assignees: + - jaybuidl + - alcercu + + - package-ecosystem: docker + directory: /bots + target-branch: dev + schedule: + interval: weekly + labels: + - dependencies + assignees: + - jaybuidl + + - package-ecosystem: docker + directory: /bot-pinner + target-branch: dev + schedule: + interval: weekly + open-pull-requests-limit: 10 + labels: + - dependencies + assignees: + - jaybuidl + + - package-ecosystem: pip + directory: /bot-pinner + target-branch: dev + schedule: + interval: weekly + open-pull-requests-limit: 10 + labels: + - dependencies + assignees: + - jaybuidl diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 000000000..0c5dad7ab --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,79 @@ +name: "CodeQL Advanced" + +on: + merge_group: + branches: + - master + - dev + push: + branches: + - master + - dev + pull_request: + # The branches below must be a subset of the branches above + branches: + - master + - dev + schedule: + - cron: '26 1 * * 6' + +permissions: + actions: read + +jobs: + codeql-advanced-analysis: + name: Analyze + runs-on: ubuntu-latest + timeout-minutes: 360 + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: + - javascript + + steps: + - name: Harden Runner + uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + with: + egress-policy: audit + + - name: Checkout repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@b8d3b6e8af63cde30bdc382c0bc28114f4346c88 # v2.28.1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@b8d3b6e8af63cde30bdc382c0bc28114f4346c88 # v2.28.1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@b8d3b6e8af63cde30bdc382c0bc28114f4346c88 # v2.28.1 + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/contracts-testing.yml b/.github/workflows/contracts-testing.yml new file mode 100644 index 000000000..26e1fb313 --- /dev/null +++ b/.github/workflows/contracts-testing.yml @@ -0,0 +1,143 @@ +name: Contracts Testing + +on: + workflow_dispatch: + merge_group: + push: + branches: + - master + - dev + paths-ignore: + - "kleros-sdk/**" + - "services/**" + - "subgraph/**" + - "web/**" + pull_request: + branches: + - "*" + +permissions: # added using https://github.com/step-security/secure-workflows + contents: read + +jobs: + # *********************************************************************************** # + # ******************************* Hardhat Tests ************************************* # + # *********************************************************************************** # + hardhat-tests: + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + with: + disable-sudo: false + egress-policy: block + allowed-endpoints: > + binaries.soliditylang.org:443 + classic.yarnpkg.com:443 + github.com:443 + nightly.yarnpkg.com:443 + nodejs.org:443 + objects.githubusercontent.com:443 + registry.yarnpkg.com:443 + registry.npmjs.org:443 + 54.185.253.63:443 + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: recursive + + - name: Set up corepack (for yarn) + run: | + corepack enable + corepack prepare yarn@4.9.2 --activate + yarn set version 4.9.2 + + - name: Setup Node.js environment + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 + with: + node-version: 20.x + cache: yarn + + - name: Cache node modules + uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1 + env: + cache-name: cache-node-modules + with: + path: | + ~/.npm + **/node_modules + key: ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}- + + - name: Install contracts dependencies + run: yarn workspace @kleros/kleros-v2-contracts install + + - name: Run Hardhat tests + run: yarn test + working-directory: contracts + + # *********************************************************************************** # + # ******************************* Foundry Tests ************************************* # + # *********************************************************************************** # + # COMPILATION FAILS 🤬 + # foundry-tests: + # runs-on: ubuntu-latest + # steps: + # - name: Harden Runner + # uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + # with: + # disable-sudo: false + # egress-policy: block + # allowed-endpoints: > + # binaries.soliditylang.org:443 + # classic.yarnpkg.com:443 + # github.com:443 + # nightly.yarnpkg.com:443 + # nodejs.org:443 + # objects.githubusercontent.com:443 + # registry.yarnpkg.com:443 + # registry.npmjs.org:443 + # 54.185.253.63:443 + + # - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + # with: + # submodules: recursive + + # - name: Set up corepack (for yarn) + # run: | + # corepack enable + # corepack prepare yarn@4.9.2 --activate + # yarn set version 4.9.2 + + # - name: Setup Node.js environment + # uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 + # with: + # node-version: 20.x + # cache: yarn + + # - name: Cache node modules + # uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1 + # env: + # cache-name: cache-node-modules + # with: + # path: | + # ~/.npm + # **/node_modules + # key: ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }} + # restore-keys: | + # ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}- + + # # - name: Install contracts dependencies + # # run: yarn workspace @kleros/kleros-v2-contracts install + + # - name: Install Foundry + # uses: foundry-rs/foundry-toolchain@82dee4ba654bd2146511f85f0d013af94670c4de # v1.4.0 + + # - name: Run Foundry tests + # run: forge test --config-path ./foundry.toml + # working-directory: contracts + + # - name: Run snapshot + # run: NO_COLOR=1 forge snapshot >> $GITHUB_STEP_SUMMARY + # working-directory: contracts diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 000000000..26288d133 --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,40 @@ +# Dependency Review Action +# +# This Action will scan dependency manifest files that change as part of a Pull Request, +# surfacing known-vulnerable versions of the packages declared or updated in the PR. +# Once installed, if the workflow run is marked as required, +# PRs introducing known-vulnerable packages will be blocked from merging. +# +# Source repository: https://github.com/actions/dependency-review-action +name: 'Dependency Review' +on: + merge_group: + pull_request: + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + with: + disable-sudo: true + egress-policy: block + allowed-endpoints: > + api.github.com:443 + api.deps.dev:443 + github.com:443 + pipelinesghubeus2.actions.githubusercontent.com:443 + acghubeus1.actions.githubusercontent.com:443 + + - name: 'Checkout Repository' + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: 'Dependency Review' + uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0 + with: + base-ref: ${{ github.event.pull_request.base.sha || 'dev' }} + head-ref: ${{ github.event.pull_request.head.sha || github.ref }} diff --git a/.github/workflows/deploy-bots.yml b/.github/workflows/deploy-bots.yml new file mode 100644 index 000000000..0529a824a --- /dev/null +++ b/.github/workflows/deploy-bots.yml @@ -0,0 +1,32 @@ +on: [workflow_dispatch] + +permissions: # added using https://github.com/step-security/secure-workflows + contents: read + +jobs: + build-deploy: + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + with: + egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs + + - uses: actions/checkout@7739b9ba2efcda9dde65ad1e3c2dbe65b41dfba7 + - uses: actions/setup-python@5f2af211d616f86005883b44826180b21abb4060 + - uses: aws-actions/setup-sam@12a6719db503425e98edcc798b6779590a450e8f + - uses: aws-actions/configure-aws-credentials@010d0da01d0b5a38af31e9c3470dbfdabdecca3a + with: + aws-access-key-id: ${{ secrets.STAGING_AWS_ACCESS_KEY }} + aws-secret-access-key: ${{ secrets.STAGING_AWS_SECRET_KEY }} + aws-region: us-east-2 + + # sam build + - run: sam build --use-container + working-directory: bots + + # Run Unit tests- Specify unit tests here + + # sam deploy + - run: sam deploy --no-confirm-changeset --no-fail-on-empty-changeset --stack-name kleros-v2-bots --s3-bucket kleros-v2-bots --capabilities CAPABILITY_IAM --region us-east-2 + working-directory: bots diff --git a/.github/workflows/deploy-subgraph.yml b/.github/workflows/deploy-subgraph.yml new file mode 100644 index 000000000..e109c13fb --- /dev/null +++ b/.github/workflows/deploy-subgraph.yml @@ -0,0 +1,99 @@ +name: Deploy the Subgraph + +on: + workflow_dispatch: + inputs: + graph_environment: + description: The Graph environment to deploy to + required: true + default: 'graph-studio-devnet' + type: choice + options: + - graph-studio-devnet + - graph-studio-testnet + - graph-studio-mainnet + subgraph: + description: The name of the subgraph to deploy + required: true + default: 'core' + type: choice + options: + - core + - drt + update: + description: Whether to update the subgraph with the current artifacts for the selected network. + required: true + default: true + type: boolean + +permissions: + contents: read + +jobs: + buildAndDeploy: + runs-on: ubuntu-latest + environment: ${{ inputs.graph_environment }} + steps: + - name: Harden Runner + uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + with: + egress-policy: audit + + - name: Validate Network environment variable + if: ${{!startsWith(vars.NETWORK, 'arbitrum')}} + run: echo ${{vars.NETWORK}} && exit 1 + + - name: Checkout code + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Set up Node.js + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 + with: + node-version: 20 + + - name: Install Yarn if running locally + if: ${{ env.ACT }} + run: npm install -g yarn + + - name: Install the dependencies + run: yarn install + + - name: Install jq and yq + if: ${{ inputs.update }} + run: | + mkdir bin + wget -qO bin/jq https://github.com/jqlang/jq/releases/download/jq-1.6/jq-linux64 + wget -qO bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 + chmod a+x bin/jq bin/yq + + - name: Update the subgraph definition + if: ${{ inputs.update }} + run: | + export PATH=$PWD/../bin:$PATH + yarn update:${{ inputs.subgraph }}:${{ vars.NETWORK }} + working-directory: subgraph + + - name: Build the subgraph + run: | + yarn codegen:${{ inputs.subgraph }} + yarn build:${{ inputs.subgraph }} + working-directory: subgraph + + - name: Authenticate with TheGraph Studio + run: yarn graph auth "${{ secrets.SUBGRAPH_AUTH_TOKEN }}" --studio + working-directory: subgraph + + - name: Deploy the subgraph + run: | + # working around a graph bug which doesn't exit 1 on error: https://github.com/graphprotocol/graph-tooling/issues/1570 + error=$(yarn deploy:${{ inputs.subgraph }}:${{ vars.NETWORK }}) + echo "$error" + if [[ $error == *"Error"* ]] + then + echo "exiting..." + exit 1 + else + echo "deployed successfully" + exit 0 + fi + working-directory: subgraph diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml new file mode 100644 index 000000000..87cf6cd9b --- /dev/null +++ b/.github/workflows/scorecards.yml @@ -0,0 +1,91 @@ +# This workflow uses actions that are not certified by GitHub. They are provided +# by a third-party and are governed by separate terms of service, privacy +# policy, and support documentation. + +name: Scorecards supply-chain security +on: + # For Branch-Protection check. Only the default branch is supported. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection + branch_protection_rule: + # To guarantee Maintained check is occasionally updated. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained + schedule: + - cron: '37 13 * * 3' + push: + branches: [ "dev" ] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecards analysis + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + # Needed to publish results and get a badge (see publish_results below). + id-token: write + # Uncomment the permissions below if installing in a private repository. + # contents: read + # actions: read + + steps: + - name: Harden Runner + uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + with: + disable-sudo: true + egress-policy: block + allowed-endpoints: > + api.github.com:443 + api.github.com/repos/google/oss-fuzz:443 + oss-fuzz-build-logs.storage.googleapis.com:443 + api.securityscorecards.dev:443 + api.osv.dev:443 + auth.docker.io:443 + bestpractices.coreinfrastructure.org:443 + fulcio.sigstore.dev:443 + rekor.sigstore.dev:443 + github.com:443 + index.docker.io:443 + sigstore-tuf-root.storage.googleapis.com:443 + + - name: "Checkout code" + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1 + with: + results_file: results.sarif + results_format: sarif + # (Optional) Read-only PAT token. Uncomment the `repo_token` line below if: + # - you want to enable the Branch-Protection check on a *public* repository, or + # - you are installing Scorecards on a *private* repository + # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. + # repo_token: ${{ secrets.SCORECARD_READ_TOKEN }} + + # Public repositories: + # - Publish results to OpenSSF REST API for easy access by consumers + # - Allows the repository to include the Scorecard badge. + # - See https://github.com/ossf/scorecard-action#publishing-results. + # For private repositories: + # - `publish_results` will always be set to `false`, regardless + # of the value entered here. + publish_results: true + + # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF + # format to the repository Actions tab. + - name: "Upload artifact" + uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard. + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@b8d3b6e8af63cde30bdc382c0bc28114f4346c88 # v2.28.1 + with: + sarif_file: results.sarif diff --git a/.github/workflows/sentry-release.yml b/.github/workflows/sentry-release.yml new file mode 100644 index 000000000..3c033a888 --- /dev/null +++ b/.github/workflows/sentry-release.yml @@ -0,0 +1,84 @@ +name: Sentry Release + +on: + workflow_dispatch: + push: + branches: + - master + +permissions: # added using https://github.com/step-security/secure-workflows + contents: read + +jobs: + release: + runs-on: ubuntu-latest + environment: Master + outputs: + version: ${{ steps.set-version.outputs.version }} + steps: + - name: Harden Runner + uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + with: + disable-sudo: true + egress-policy: block + allowed-endpoints: > + binaries.soliditylang.org:443 + classic.yarnpkg.com:443 + github.com:443 + nightly.yarnpkg.com:443 + nodejs.org:443 + objects.githubusercontent.com:443 + registry.yarnpkg.com:443 + registry.npmjs.org:443 + 54.185.253.63:443 + sentry.io:443 + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: recursive + + - name: Set up corepack (for yarn) + run: | + corepack enable + corepack prepare yarn@4.5.1 --activate + yarn set version 4.5.1 + + - name: Setup Node.js environment + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 + with: + node-version: 20.x + cache: yarn + + - name: Cache node modules + uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1 + env: + cache-name: cache-node-modules + with: + path: | + ~/.npm + **/node_modules + key: ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}- + + - name: Install dependencies and build + run: | + . web/.env.mainnet-neo.public + yarn build:web:ci + + - name: Set version + id: set-version + run: echo "version=v$(cat package.json | jq -r .version)-$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT" + working-directory: web + + - name: Create Sentry release + uses: getsentry/action-release@ffb64465339ef6fb868e2fc261318d78ae0ed8d9 # v1.10.5 + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ORG: ${{ secrets.SENTRY_ORG }} + SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} + with: + environment: production + version: ${{ steps.set-version.outputs.version }} + sourcemaps: ./web/dist + diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml new file mode 100644 index 000000000..55444c953 --- /dev/null +++ b/.github/workflows/sonarcloud.yml @@ -0,0 +1,34 @@ +name: Build +on: + push: + branches: + - master + - dev + pull_request: + types: [opened, synchronize, reopened] + +permissions: + contents: read + +jobs: + sonarcloud: + permissions: + contents: read # for actions/checkout to fetch code + pull-requests: read # for SonarSource/sonarcloud-github-action to determine which PR to decorate + name: SonarCloud + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + with: + egress-policy: audit + + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + + - name: SonarCloud Scan + uses: SonarSource/sonarcloud-github-action@9f9bba2c7aaf7a55eac26abbac906c3021d211b2 # master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} From 3a0e31da34144be0e77afe2d428b6027d2f0a1d0 Mon Sep 17 00:00:00 2001 From: jaybuidl <jaybuidl@pm.me> Date: Fri, 5 Sep 2025 17:17:17 +0100 Subject: [PATCH 3/8] Create CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..1e5caef53 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs.v2.kleros.builders \ No newline at end of file From 35578d1ca696e986ec7901964fe430634398debe Mon Sep 17 00:00:00 2001 From: jaybuidl <jaybuidl@pm.me> Date: Fri, 5 Sep 2025 17:23:16 +0100 Subject: [PATCH 4/8] Delete CNAME --- CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 CNAME diff --git a/CNAME b/CNAME deleted file mode 100644 index 1e5caef53..000000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs.v2.kleros.builders \ No newline at end of file From 04b7136c89bcc4f69ff85567a3ec3b33a7ae8407 Mon Sep 17 00:00:00 2001 From: jaybuidl <jaybuidl@pm.me> Date: Fri, 5 Sep 2025 17:24:30 +0100 Subject: [PATCH 5/8] Create CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..1e5caef53 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs.v2.kleros.builders \ No newline at end of file From ca2a8211622939c26ce474e2ebd8fc1e2c98bc9c Mon Sep 17 00:00:00 2001 From: jaybuidl <jaybuidl@pm.me> Date: Fri, 5 Sep 2025 17:26:54 +0100 Subject: [PATCH 6/8] Delete CNAME --- CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 CNAME diff --git a/CNAME b/CNAME deleted file mode 100644 index 1e5caef53..000000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs.v2.kleros.builders \ No newline at end of file From 601ab5b0ef7ef393317c407cf2733a974067aab4 Mon Sep 17 00:00:00 2001 From: jaybuidl <jb@kleros.io> Date: Fri, 5 Sep 2025 17:28:52 +0100 Subject: [PATCH 7/8] update --- contracts/audit/{METRICS.html => index.html} | 0 index.html | 1 + 2 files changed, 1 insertion(+) rename contracts/audit/{METRICS.html => index.html} (100%) create mode 120000 index.html diff --git a/contracts/audit/METRICS.html b/contracts/audit/index.html similarity index 100% rename from contracts/audit/METRICS.html rename to contracts/audit/index.html diff --git a/index.html b/index.html new file mode 120000 index 000000000..ff0a1182e --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +contracts/audit/index.html \ No newline at end of file From 0247c5eccf2f90f0c0ea4a4bc36ca1b2b0db57d3 Mon Sep 17 00:00:00 2001 From: jaybuidl <jaybuidl@pm.me> Date: Fri, 5 Sep 2025 17:35:57 +0100 Subject: [PATCH 8/8] Create CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..1e5caef53 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs.v2.kleros.builders \ No newline at end of file

sNQbl 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

- - Kleros - -